<?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>102741</bug_id>
          
          <creation_ts>2012-11-19 16:44:33 -0800</creation_ts>
          <short_desc>IndexedDB: Migrate backend ObjectStore/Index calls to use transaction id</short_desc>
          <delta_ts>2013-01-05 12:44:04 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>102732</dependson>
    
    <dependson>102742</dependson>
    
    <dependson>104592</dependson>
          <blocked>99774</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Alec Flett">alecflett</reporter>
          <assigned_to name="Alec Flett">alecflett</assigned_to>
          <cc>abarth</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dgrogan</cc>
    
    <cc>fishd</cc>
    
    <cc>jamesr</cc>
    
    <cc>jsbell</cc>
    
    <cc>peter+ews</cc>
    
    <cc>tkent+wkapi</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>771200</commentid>
    <comment_count>0</comment_count>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-11-19 16:44:33 -0800</bug_when>
    <thetext>Rather than calling through IDBTransactionBackendInterface, backend object store calls should just call through IDBDatabase with a transaction id

specifically: (leaving out the details of request/callback hookup/etc)
* IDBObjectStoreBackendInterface::openCursor() becomes 
  IDBDatabaseBackendInterface::openCursor(transaction_id, objectstore_id, -1, keyRange, direction, key=false);
* IDBObjectStoreBackendInterface::openKeyCursor() becomes 
  IDBDatabaseBackendInterface::openCursor(transaction_id, objectstore_id, -1, keyRange, direction, key=true);
* IDBObjectStoreBackendInterface::count() becomes 
  IDBDatabaseBackendInterface::count(transaction_id, objectstore_id, -1, keyRange);
* IDBObjectStoreBackendInterface::get() becomes 
  IDBDatabaseBackendInterface::get(transaction_id, objectstore_id, -1, keyRange, key=false);
* IDBObjectStoreBackendInterface::put() becomes
  IDBDatabaseBackendInterface::put(transaction_id, objectstore_id, -1, key);
* IDBObjectStoreBackendInterface::deleteFunctiuon() becomes
  IDBDatabaseBackendInterface::deleteFunction(transaction_id, objectstore_id, -1, keyRange);
* IDBObjectStoreBackendInterface::clear() becomes
  IDBDatabaseBackendInterface::clear(transaction_id, objectstore_id);
* IDBObjectStoreBackendInterface::setIndexKeys() becomes
  IDBDatabaseBackendInterface::setIndexKeys(transaction_id, objectstore_id, index_ids, index_keys, ...);
* IDBObjectStoreBackendInterface::setIndexesReady() becomes
  IDBDatabaseBackendInterface::setIndexesReady(transaction_id, objectstore_id, index_ids);


This bug does not cover:
* IDBObjectStoreBackendInterface::createIndex()
* IDBObjectStoreBackendInterface::deleteIndex()

(I&apos;m leaving openKeyCursor in here for now, even though it isn&apos;t yet implemented in the IDL or in the spec)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>799854</commentid>
    <comment_count>1</comment_count>
      <attachid>181251</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2013-01-03 17:07:42 -0800</bug_when>
    <thetext>Created attachment 181251
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>799857</commentid>
    <comment_count>2</comment_count>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2013-01-03 17:08:30 -0800</bug_when>
    <thetext>*** Bug 102736 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>799862</commentid>
    <comment_count>3</comment_count>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2013-01-03 17:09:54 -0800</bug_when>
    <thetext>jsbell/dgrogan - this is my mega-patch as promised. this does NOT yet incorporate josh&apos;s changes to the scheduleTask() stuff, but you can take a look at it now, and I&apos;ll update it on friday (2012-01-04) while you&apos;re reviewing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>800268</commentid>
    <comment_count>4</comment_count>
      <attachid>181316</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2013-01-04 09:27:02 -0800</bug_when>
    <thetext>Created attachment 181316
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>800270</commentid>
    <comment_count>5</comment_count>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2013-01-04 09:27:31 -0800</bug_when>
    <thetext>ok, this is fully ready for idb review now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>800271</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-04 09:28:40 -0800</bug_when>
    <thetext>Please wait for approval from abarth@webkit.org, dglazkov@chromium.org, fishd@chromium.org, jamesr@chromium.org or tkent@chromium.org before submitting, as this patch contains changes to the Chromium public API. See also https://trac.webkit.org/wiki/ChromiumWebKitAPI.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>800309</commentid>
    <comment_count>7</comment_count>
      <attachid>181316</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-04 10:00:02 -0800</bug_when>
    <thetext>Comment on attachment 181316
Patch

Attachment 181316 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/15708219</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>800320</commentid>
    <comment_count>8</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2013-01-04 10:09:38 -0800</bug_when>
    <thetext>View in context: https://bugs.webkit.org/attachment.cgi?id=181316&amp;action=review

Overall LGTM with some merge glitches, nits, and one question.

&gt; Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp:509
&gt; +    RefPtr&lt;IDBCallbacks&gt; callbacks = prpCallbacks;

Don&apos;t need this since the PassRefPtr is otherwise unused in this method - can just pass the argument straight through.

&gt; Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp:532
&gt; +                // Index Value Retrieval Operation

Mixing the Object Store and Index operations together makes this method fairly unweildy. Did you try keeping it as two separate operations, with the IDBDatabaseBackendImpl::get() deciding which to create?

&gt; Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp:763
&gt; +    RefPtr&lt;IDBCallbacks&gt; callbacks = prpCallbacks;

Don&apos;t need this refptr churn.

&gt; Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp:806
&gt; +    RefPtr&lt;IDBCallbacks&gt; callbacks = prpCallbacks;

Don&apos;t need this refptr churn.

&gt; Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp:816
&gt; +    IDB_TRACE(&quot;ObjectStoreCountOperation&quot;);

This now handles Indexes as well, so just CountOperation.

&gt; Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp:840
&gt; +    RefPtr&lt;IDBCallbacks&gt; callbacks = prpCallbacks;

Don&apos;t need this refptr churn.

&gt; Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp:866
&gt; +    RefPtr&lt;IDBCallbacks&gt; callbacks = prpCallbacks;

Don&apos;t need this refptr churn.

&gt; Source/WebCore/Modules/indexeddb/IDBIndex.cpp:208
&gt; +IDBDatabaseBackendInterface* IDBIndex::backendDB() const

This is short enough that I&apos;d put it in the header file.

&gt; Source/WebCore/Modules/indexeddb/IDBObjectStore.cpp:216
&gt; +    backendDB()-&gt;put(m_transaction-&gt;id(), id(), &amp;valueBytes, key.release(), static_cast&lt;IDBDatabaseBackendInterface::PutMode&gt;(putMode), request, indexIds, indexKeys);

Subsequent patch will collapse the enumerations into just the IDBDatabaseBackendInterface versions to avoid the casting?

&gt; Source/WebCore/Modules/indexeddb/IDBObjectStore.cpp:553
&gt; +IDBDatabaseBackendInterface* IDBObjectStore::backendDB() const

Move to the header?

&gt; Source/WebCore/Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:144
&gt; +    if (!transaction-&gt;scheduleTask(ObjectStoreRetrievalOperation::create(this, keyRange, callbacks)))

Looks like a merge glitch - shouldn&apos;t need to send the AbortError in this async call.

&gt; Source/WebCore/Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:195
&gt; +        callbacks-&gt;onError(IDBDatabaseError::create(IDBDatabaseException::AbortError));

Looks like a merge glitch - shouldn&apos;t need to send the AbortError in this async call.

&gt; Source/WebCore/Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:346
&gt; +        RefPtr&lt;IDBKey&gt; autoIncKey = IDBObjectStoreBackendImpl::generateKey(m_objectStore-&gt;backingStore(), transaction, m_objectStore-&gt;databaseId(), m_objectStore-&gt;id());

The key generator logic will be flattened into the DB backend in a subsequent patch?

&gt; Source/WebCore/Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:418
&gt; +        callbacks-&gt;onError(IDBDatabaseError::create(IDBDatabaseException::AbortError));

Looks like a merge glitch - shouldn&apos;t need to send the AbortError in this async call.

&gt; Source/WebCore/Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:446
&gt; +        callbacks-&gt;onError(IDBDatabaseError::create(IDBDatabaseException::AbortError));

Looks like a merge glitch - shouldn&apos;t need to send the AbortError in this async call.

&gt; Source/WebCore/Modules/indexeddb/IDBTransaction.cpp:466
&gt; +IDBDatabaseBackendInterface* IDBTransaction::backendDB() const

Move to header?

&gt; Source/WebKit/chromium/src/WebIDBDatabaseImpl.cpp:-167
&gt; -    Vector&lt;uint8_t&gt; valueBuffer(value-&gt;size());

Nice find.

&gt; LayoutTests/ChangeLog:8
&gt; +        Add additional count() tests for multi-entry indexes, not previously

Also nice!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>800341</commentid>
    <comment_count>9</comment_count>
      <attachid>181326</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2013-01-04 10:25:28 -0800</bug_when>
    <thetext>Created attachment 181326
Patch

oops, bad merge - trying again</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>800441</commentid>
    <comment_count>10</comment_count>
      <attachid>181326</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2013-01-04 11:33:53 -0800</bug_when>
    <thetext>Comment on attachment 181326
Patch

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

still LGTM with nits

&gt; Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp:509
&gt; -    ASSERT_NOT_REACHED();
&gt; +    RefPtr&lt;IDBCallbacks&gt; callbacks = prpCallbacks;

Unnecessary refptr churn. (Not new, though, was in the original location too.)

&gt; Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp:608
&gt; +    RefPtr&lt;IDBCallbacks&gt; callbacks = prpCallbacks;

Unnecessary refptr churn.

&gt; Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp:763
&gt; +    RefPtr&lt;IDBCallbacks&gt; callbacks = prpCallbacks;

Unnecessary refptr churn.

&gt; Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp:806
&gt; +    RefPtr&lt;IDBCallbacks&gt; callbacks = prpCallbacks;

Unnecessary refptr churn.

&gt; Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp:840
&gt; +    RefPtr&lt;IDBCallbacks&gt; callbacks = prpCallbacks;

Unnecessary refptr churn.

&gt; Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp:866
&gt; +    RefPtr&lt;IDBCallbacks&gt; callbacks = prpCallbacks;

Unnecessary refptr churn.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>800449</commentid>
    <comment_count>11</comment_count>
      <attachid>181326</attachid>
    <who name="Peter Beverloo (cr-android ews)">peter+ews</who>
    <bug_when>2013-01-04 11:40:05 -0800</bug_when>
    <thetext>Comment on attachment 181326
Patch

Attachment 181326 did not pass cr-android-ews (chromium-android):
Output: http://queues.webkit.org/results/15709222</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>800476</commentid>
    <comment_count>12</comment_count>
      <attachid>181353</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2013-01-04 12:00:12 -0800</bug_when>
    <thetext>Created attachment 181353
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>800480</commentid>
    <comment_count>13</comment_count>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2013-01-04 12:03:15 -0800</bug_when>
    <thetext>ok, new patch addresses nits, also:

1) I couldn&apos;t make backendDB() methods be part of the class definition because of all sorts of crazy circular dependencies between IDBDatabaseBackendImpl, IDBTransactionBackendImp, IDBObjectStoreBackendImpl and the like. These will hopefully be fixed by the overall refactor and I can make a pass through and clean up little stuff like that.

2) Yup, subsequent patches will move all code, including enums and static methods, out of IDBObjectStoreBackend* and IDBIndexBackend* so those casts will eventually go away.

tony@ - r? This is a biggie, I&apos;m happy to discuss before you start reviewing, so you get the basic idea.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>800504</commentid>
    <comment_count>14</comment_count>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2013-01-04 12:26:32 -0800</bug_when>
    <thetext>actually CC tony this time.

tony@ - r? This is a biggie, I&apos;m happy to discuss before you start reviewing, so you get the basic idea.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>800614</commentid>
    <comment_count>15</comment_count>
      <attachid>181353</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2013-01-04 14:31:37 -0800</bug_when>
    <thetext>Comment on attachment 181353
Patch

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

LGTM as it&apos;s mostly moving code around.

&gt; Source/WebCore/ChangeLog:37
&gt; +        * Modules/indexeddb/IDBCursorBackendImpl.cpp:
&gt; +        (WebCore::IDBCursorBackendImpl::IDBCursorBackendImpl):
&gt; +        (WebCore::IDBCursorBackendImpl::~IDBCursorBackendImpl):
&gt; +        (WebCore::IDBCursorBackendImpl::deleteFunction):
&gt; +        * Modules/indexeddb/IDBCursorBackendImpl.h:
&gt; +        (WebCore::IDBCursorBackendImpl::create):
&gt; +        (IDBCursorBackendImpl):
&gt; +        * Modules/indexeddb/IDBDatabase.h:
&gt; +        (WebCore::IDBDatabase::backend):
&gt; +        (IDBDatabase):
&gt; +        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
&gt; +        (GetOperation):

It would be helpful to fill some of this in. Specifically, you could point out when you&apos;re moving code vs when you&apos;re changing code.

&gt; Source/WebCore/Modules/indexeddb/IDBCursorBackendImpl.h:87
&gt; +    // Order is important, the cursors have to be destructed before the transaction.
&gt; +    RefPtr&lt;IDBBackingStore::Cursor&gt; m_cursor;
&gt; +    RefPtr&lt;IDBBackingStore::Cursor&gt; m_savedCursor;

Nit: I would probably do end of line comments to explain dependencies like you would do for locks.  E.g.:
  RefPtr&lt;IDBBackingStore::Cursor&gt; m_cursor; // Must be destroyed before m_transaction.
  RefPtr&lt;IDBBackingStore::Cursor&gt; m_savedCursor; // Must be destroyed before m_transaction.

&gt; Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp:167
&gt; +
&gt; +    void perform(IDBTransactionBackendImpl*);
&gt; +

Nit: Maybe get rid of the blank lines around perform()? The other Operation declarations don&apos;t have these blank lines.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>800634</commentid>
    <comment_count>16</comment_count>
      <attachid>181378</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2013-01-04 14:49:39 -0800</bug_when>
    <thetext>Created attachment 181378
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>800964</commentid>
    <comment_count>17</comment_count>
      <attachid>181378</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-05 12:43:59 -0800</bug_when>
    <thetext>Comment on attachment 181378
Patch for landing

Clearing flags on attachment: 181378

Committed r138900: &lt;http://trac.webkit.org/changeset/138900&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>800965</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-05 12:44:04 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>181251</attachid>
            <date>2013-01-03 17:07:42 -0800</date>
            <delta_ts>2013-01-04 09:27:01 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-102741-20130103170449.patch</filename>
            <type>text/plain</type>
            <size>116478</size>
            <attacher name="Alec Flett">alecflett</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM4NjczCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTdmZTQyZGRkODk0M2E0
Y2VmYjhmOThkZWQxZGM2MWNkNDUwYzE2ZC4uYmNlMTJhYTk3YTU4OWIxNTJlY2QxYjg1YzNmZGFi
MmZiOGRmYjNkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzMSBAQAorMjAxMy0wMS0wMyAgQWxl
YyBGbGV0dCAgPGFsZWNmbGV0dEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBN
aWdyYXRlIGJhY2tlbmQgT2JqZWN0U3RvcmUgY2FsbHMgdG8gdXNlIHRyYW5zYWN0aW9uIGlkCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDI3NDEKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGdWxseSBtaWdy
YXRlIDggY29yZSBkYXRhIGNhbGxzIChnZXQsIHB1dCwgc2V0SW5kZXhLZXlzLCBzZXRJbmRleGVz
UmVhZHksCisgICAgICAgIG9wZW5DdXJzb3IsIGNvdW50LCBkZWxldGVSYW5nZSwgYW5kIGNsZWFy
KSBpbnRvIElEQkRhdGFiYXNlQmFja2VuZEltcGwsCisgICAgICAgIGNvbWJpbmluZyBjb21tb24g
Y29kZSBmcm9tIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwgYW5kIElEQkluZGV4QmFja2VuZElt
cGwKKyAgICAgICAgaW4gb3JkZXIgdG8gc2ltcGxpZnkgdGhlIGJhY2tlbmQgaW50ZXJmYWNlLiBU
aGVzZSBjYWxscyBhcmUgbm93CisgICAgICAgIGltcGxlbWVudGVkIGluIHRlcm1zIG9mIGFuIGlu
dDY0X3QtYmFzZWQgdHJhbnNhY3Rpb25JZCByYXRoZXIgdGhhbgorICAgICAgICBhbiBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UsIHdoaWNoIHNpbXBsaWZpZXMgdGhlIG93bmVyc2hpcCBt
b2RlbAorICAgICAgICBiZXR3ZWVuIHRoZSBmcm9udGVuZCBhbmQgdGhlIGJhY2tlbmQuCisKKyAg
ICAgICAgSW4gYWRkaXRpb24sIHJlbW92ZSByZWZlcmVuY2VzIHRvIElEQk9iamVjdFN0b3JlQmFj
a2VuZCogZnJvbSBJREJJbmRleCwKKyAgICAgICAgYXMgaXQgaXMgbm8gbG9uZ2VyIG5lZWRlZC4K
KworICAgICAgICBBIGZldyBkdXBsaWNhdGUgSURCX1RSQUNFIG1ldGhvZHMgaGF2ZSBiZWVuIHJl
bW92ZWQgZnJvbSB3cmFwcGVyIG1ldGhvZHMKKyAgICAgICAgdGhhdCBjYWxsIGFub3RoZXIgbWV0
aG9kIHRoYXQgYWxyZWFkeSBoYXZlIElEQl9UUkFDRSdzLgorCisgICAgICAgIEZpbmFsbHksIElE
QkN1cnNvckJhY2tlbmRJbXBsIG5vdyBubyBsb25nZXIgaG9sZHMgb250byBhbiAKKyAgICAgICAg
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCosIHNvIGl0cyBkZXN0cnVjdGlvbiBhbmQgbWVtYmVy
IHZhcmlhYmxlcyBhcmUKKyAgICAgICAgc2ltcGxpZmllZCwgYW5kIHJlb3JkZXJlZCB0byBtYXRj
aCBwcm9wZXIgZGVzdHJ1Y3Rpb24gb3JkZXIuCisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3JC
YWNrZW5kSW1wbDo6SURCQ3Vyc29yQmFja2VuZEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SURC
Q3Vyc29yQmFja2VuZEltcGw6On5JREJDdXJzb3JCYWNrZW5kSW1wbCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJDdXJzb3JCYWNrZW5kSW1wbDo6ZGVsZXRlRnVuY3Rpb24pOgorICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmg6CisgICAgICAgIChXZWJDb3Jl
OjpJREJDdXJzb3JCYWNrZW5kSW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKElEQkN1cnNvckJhY2tl
bmRJbXBsKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5oOgorICAg
ICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6OmJhY2tlbmQpOgorICAgICAgICAoSURCRGF0YWJh
c2UpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwu
Y3BwOgorICAgICAgICAoR2V0T3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdldE9wZXJh
dGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdldE9wZXJhdGlvbjo6R2V0T3BlcmF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoUHV0T3BlcmF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlB1dE9wZXJhdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlB1
dE9wZXJhdGlvbjo6UHV0T3BlcmF0aW9uKToKKyAgICAgICAgKFNldEluZGV4ZXNSZWFkeU9wZXJh
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTZXRJbmRleGVzUmVhZHlPcGVyYXRpb246OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTZXRJbmRleGVzUmVhZHlPcGVyYXRpb246OlNldEluZGV4
ZXNSZWFkeU9wZXJhdGlvbik6CisgICAgICAgIChPcGVuQ3Vyc29yT3BlcmF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok9wZW5DdXJzb3JPcGVyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpPcGVuQ3Vyc29yT3BlcmF0aW9uOjpPcGVuQ3Vyc29yT3BlcmF0aW9uKToKKyAgICAgICAg
KENvdW50T3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvdW50T3BlcmF0aW9uOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q291bnRPcGVyYXRpb246OkNvdW50T3BlcmF0aW9uKToK
KyAgICAgICAgKERlbGV0ZVJhbmdlT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0
ZVJhbmdlT3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlUmFuZ2VP
cGVyYXRpb246OkRlbGV0ZVJhbmdlT3BlcmF0aW9uKToKKyAgICAgICAgKENsZWFyT3BlcmF0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkNsZWFyT3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6Q2xlYXJPcGVyYXRpb246OkNsZWFyT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmdldCk6CisgICAgICAgIChXZWJDb3JlOjpHZXRP
cGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5k
SW1wbDo6cHV0KToKKyAgICAgICAgKFdlYkNvcmU6OlB1dE9wZXJhdGlvbjo6cGVyZm9ybSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRJbmRleEtleXMpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6c2V0SW5kZXhlc1JlYWR5
KToKKyAgICAgICAgKFdlYkNvcmU6OlNldEluZGV4ZXNSZWFkeU9wZXJhdGlvbjo6cGVyZm9ybSk6
CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29yKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNvdW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvdW50T3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6
OkRlbGV0ZVJhbmdlT3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRh
dGFiYXNlQmFja2VuZEltcGw6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkNsZWFyT3BlcmF0
aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wZW5DdXJzb3JPcGVyYXRpb246OnBl
cmZvcm0pOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OklEQkluZGV4OjpJREJJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJJ
bmRleDo6b3BlbkN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleDo6Y291bnQpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXg6Om9wZW5LZXlDdXJzb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCSW5kZXg6OmdldCk6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleDo6Z2V0S2V5
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4OjpiYWNrZW5kREIpOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguaDoKKyAgICAgICAg
KFdlYkNvcmU6OklEQkluZGV4OjpjcmVhdGUpOgorICAgICAgICAoSURCSW5kZXgpOgorICAgICAg
ICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SURCSW5kZXhCYWNrZW5kSW1wbDo6SURCSW5kZXhCYWNrZW5kSW1wbCk6CisgICAg
ICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5oOgorICAgICAgICAo
V2ViQ29yZTo6SURCSW5kZXhCYWNrZW5kSW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQkluZGV4QmFja2VuZEltcGw6Om9wZW5DdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6SURC
SW5kZXhCYWNrZW5kSW1wbDo6Y291bnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXhCYWNr
ZW5kSW1wbDo6b3BlbktleUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleEJhY2tl
bmRJbXBsOjpnZXQpOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXhCYWNrZW5kSW1wbDo6Z2V0
S2V5KToKKyAgICAgICAgKElEQkluZGV4QmFja2VuZEltcGwpOgorICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVj
dFN0b3JlOjpnZXQpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OnB1dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6ZGVsZXRlRnVuY3Rpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmNyZWF0ZUluZGV4KToKKyAgICAgICAg
KFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjppbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJP
YmplY3RTdG9yZTo6b3BlbkN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9y
ZTo6Y291bnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmJhY2tlbmREQik6
CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaDoKKyAgICAgICAg
KFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjppZCk6CisgICAgICAgIChJREJPYmplY3RTdG9yZSk6
CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVhdGVJ
bmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpsb2Fk
SW5kZXhlcyk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpn
ZW5lcmF0ZUtleSk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
Ojp1cGRhdGVLZXlHZW5lcmF0b3IpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9i
amVjdFN0b3JlQmFja2VuZEltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6OmdldCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpwdXQpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bDo6ZGVsZXRlRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6c2V0SW5kZXhLZXlzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OnNldEluZGV4ZXNSZWFkeSk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OmNvdW50KToKKyAgICAgICAgKElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGwpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmRh
dGFiYXNlKToKKyAgICAgICAgKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwpOgorCiAyMDEzLTAx
LTAyICBEYXZpZCBHcm9nYW4gIDxkZ3JvZ2FuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBJbmRl
eGVkREI6IFN1cmZhY2UgYSBmZXcgbW9yZSBsZXZlbGRiIGVycm9ycy4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKaW5kZXggNjBhZWI5Y2Q0YjE2ZjM4MGJiNTkyMjU2MzcxMzRjYzNmNDdkY2YyZS4u
ZWE4ODMyOWI1NzkzYTg5NmE3MzJmZjUyYTA2YTE1MWVlOThhNGJlOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMSBAQAorMjAxMy0wMS0wMyAgQWxlYyBGbGV0dCAgPGFs
ZWNmbGV0dEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBNaWdyYXRlIGJhY2tl
bmQgT2JqZWN0U3RvcmUgY2FsbHMgdG8gdXNlIHRyYW5zYWN0aW9uIGlkCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDI3NDEKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXggYSBidWcgd2hlcmUgYW4gYXJy
YXkgd2FzIGluaXRpYWxpemVkIHdpdGggYSBsYXJnZSBlbXB0eSBidWZmZXIsCisgICAgICAgIGNs
ZWFuIHVwIHdoaXRlc3BhY2UsIGFuZCB1cGRhdGUgdG8gbWF0Y2ggc2lnbmF0dXJlcyB0aGF0IGNo
YW5nZWQKKyAgICAgICAgaW4gV2ViQ29yZS4KKworICAgICAgICAqIHB1YmxpYy9XZWJJREJEYXRh
YmFzZS5oOgorICAgICAgICAoV2ViS2l0OjpXZWJJREJEYXRhYmFzZTo6Y2xlYXIpOgorICAgICAg
ICAqIHNyYy9XZWJJREJEYXRhYmFzZUltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJJREJE
YXRhYmFzZUltcGw6OnB1dCk6CisgICAgICAgICogc3JjL1dlYklEQkluZGV4SW1wbC5jcHA6Cisg
ICAgICAgICogdGVzdHMvSURCRGF0YWJhc2VCYWNrZW5kVGVzdC5jcHA6CisKIDIwMTMtMDEtMDIg
IE1hcmsgUGlsZ3JpbSAgPHBpbGdyaW1AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtDaHJvbWl1
bV0gQWRkIFBsYXRmb3JtL2Nocm9taXVtIHRvIGluY2x1ZGVfZGlycwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuY3Bw
CmluZGV4IDVlYjZkYzI3Njc5NzZiZTQ3ODcxNmM3MGI3NTVhOTdkNTM5ZTY5MGIuLjViZmQyNTg0
YzEwMTExOWE1MzYyMjgyZjYzMWVmOWMwM2UwZGM1ODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAKQEAg
LTEwMSwxMiArMTAxLDEzIEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9j
YWxsYmFja3M7CiB9OwogCi1JREJDdXJzb3JCYWNrZW5kSW1wbDo6SURCQ3Vyc29yQmFja2VuZElt
cGwoUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gY3Vyc29yLCBDdXJzb3JUeXBl
IGN1cnNvclR5cGUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUgdGFz
a1R5cGUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uLCBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsKiBvYmplY3RTdG9yZSkKLSAgICA6IG1fY3Vyc29yKGN1cnNvcikKLSAg
ICAsIG1fdGFza1R5cGUodGFza1R5cGUpCitJREJDdXJzb3JCYWNrZW5kSW1wbDo6SURCQ3Vyc29y
QmFja2VuZEltcGwoUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gY3Vyc29yLCBD
dXJzb3JUeXBlIGN1cnNvclR5cGUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZTo6VGFz
a1R5cGUgdGFza1R5cGUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQpCisgICAgOiBtX3Rhc2tUeXBlKHRhc2tUeXBlKQogICAgICwg
bV9jdXJzb3JUeXBlKGN1cnNvclR5cGUpCisgICAgLCBtX2RhdGFiYXNlKHRyYW5zYWN0aW9uLT5k
YXRhYmFzZSgpKQogICAgICwgbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKLSAgICAsIG1fb2Jq
ZWN0U3RvcmUob2JqZWN0U3RvcmUpCisgICAgLCBtX29iamVjdFN0b3JlSWQob2JqZWN0U3RvcmVJ
ZCkKKyAgICAsIG1fY3Vyc29yKGN1cnNvcikKICAgICAsIG1fY2xvc2VkKGZhbHNlKQogewogICAg
IG1fdHJhbnNhY3Rpb24tPnJlZ2lzdGVyT3BlbkN1cnNvcih0aGlzKTsKQEAgLTExNSwxMSArMTE2
LDYgQEAgSURCQ3Vyc29yQmFja2VuZEltcGw6OklEQkN1cnNvckJhY2tlbmRJbXBsKFBhc3NSZWZQ
dHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGMKIElEQkN1cnNvckJhY2tlbmRJbXBsOjp+SURC
Q3Vyc29yQmFja2VuZEltcGwoKQogewogICAgIG1fdHJhbnNhY3Rpb24tPnVucmVnaXN0ZXJPcGVu
Q3Vyc29yKHRoaXMpOwotICAgIC8vIE9yZGVyIGlzIGltcG9ydGFudCwgdGhlIGN1cnNvcnMgaGF2
ZSB0byBiZSBkZXN0cnVjdGVkIGJlZm9yZSB0aGUgb2JqZWN0U3RvcmUuCi0gICAgbV9jdXJzb3Iu
Y2xlYXIoKTsKLSAgICBtX3NhdmVkQ3Vyc29yLmNsZWFyKCk7Ci0KLSAgICBtX29iamVjdFN0b3Jl
LmNsZWFyKCk7CiB9CiAKIApAQCAtMTczLDggKzE2OSw3IEBAIHZvaWQgSURCQ3Vyc29yQmFja2Vu
ZEltcGw6OmRlbGV0ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFj
a3MsCiAgICAgUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSA9IElEQktleVJhbmdlOjpvbmx5
KG1fY3Vyc29yLT5wcmltYXJ5S2V5KCksIGVjKTsKICAgICBBU1NFUlQoIWVjKTsKIAotICAgIG1f
b2JqZWN0U3RvcmUtPmRlbGV0ZUZ1bmN0aW9uKGtleVJhbmdlLnJlbGVhc2UoKSwgcHJwQ2FsbGJh
Y2tzLCBtX3RyYW5zYWN0aW9uLmdldCgpLCBlYyk7Ci0gICAgQVNTRVJUKCFlYyk7CisgICAgbV9k
YXRhYmFzZS0+ZGVsZXRlUmFuZ2UobV90cmFuc2FjdGlvbi0+aWQoKSwgbV9vYmplY3RTdG9yZUlk
LCBrZXlSYW5nZS5yZWxlYXNlKCksIHBycENhbGxiYWNrcyk7CiB9CiAKIHZvaWQgSURCQ3Vyc29y
QmFja2VuZEltcGw6OnByZWZldGNoQ29udGludWUoaW50IG51bWJlclRvRmV0Y2gsIFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIEV4Y2VwdGlvbkNvZGUmKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwu
aCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBs
LmgKaW5kZXggYjBjNzlmMjE0ZmNhYzY3MjJlYzU0NDIzZTlkOTliOGZmYjUxZDYzNC4uNTYwN2I1
NzY3Y2I3OTVlYWQzOGU1MWI0ZDE4OGNmZThmMzg4YzVmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5oCkBAIC00
NywxMyArNDcsMTMgQEAgY2xhc3MgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDsKIAogY2xhc3Mg
SURCQ3Vyc29yQmFja2VuZEltcGwgOiBwdWJsaWMgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZSB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+IGNy
ZWF0ZShQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBjdXJzb3IsIEN1cnNvclR5
cGUgY3Vyc29yVHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24sIElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGwqIG9iamVjdFN0b3JlKQorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPElEQkN1cnNvckJhY2tlbmRJbXBsPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJCYWNraW5nU3Rv
cmU6OkN1cnNvcj4gY3Vyc29yLCBDdXJzb3JUeXBlIGN1cnNvclR5cGUsIElEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGwqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCiAgICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkN1cnNvckJhY2tlbmRJbXBsKGN1cnNvciwg
Y3Vyc29yVHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOjpOb3JtYWxUYXNrLCB0
cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmUpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJ
REJDdXJzb3JCYWNrZW5kSW1wbChjdXJzb3IsIGN1cnNvclR5cGUsIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZTo6Tm9ybWFsVGFzaywgdHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlSWQpKTsK
ICAgICB9Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+IGNyZWF0
ZShQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBjdXJzb3IsIEN1cnNvclR5cGUg
Y3Vyc29yVHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSB0YXNr
VHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24sIElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGwqIG9iamVjdFN0b3JlKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkN1
cnNvckJhY2tlbmRJbXBsPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNv
cj4gY3Vyc29yLCBDdXJzb3JUeXBlIGN1cnNvclR5cGUsIElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZTo6VGFza1R5cGUgdGFza1R5cGUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRy
YW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCiAgICAgewotICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IElEQkN1cnNvckJhY2tlbmRJbXBsKGN1cnNvciwgY3Vyc29yVHlwZSwgdGFz
a1R5cGUsIHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZSkpOworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IElEQkN1cnNvckJhY2tlbmRJbXBsKGN1cnNvciwgY3Vyc29yVHlwZSwgdGFza1R5cGUs
IHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZUlkKSk7CiAgICAgfQogICAgIHZpcnR1YWwgfklEQkN1
cnNvckJhY2tlbmRJbXBsKCk7CiAKQEAgLTcxLDE4ICs3MSwyMCBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBjbG9zZSgpOwogCiBwcml2YXRlOgotICAgIElEQkN1cnNvckJhY2tlbmRJbXBsKFBhc3NSZWZQ
dHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+LCBDdXJzb3JUeXBlLCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiwgSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbCopOworICAgIElEQkN1cnNvckJhY2tlbmRJbXBsKFBhc3NS
ZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+LCBDdXJzb3JUeXBlLCBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiwg
aW50NjRfdCBvYmplY3RTdG9yZUlkKTsKIAogICAgIGNsYXNzIEN1cnNvckl0ZXJhdGlvbk9wZXJh
dGlvbjsKICAgICBjbGFzcyBDdXJzb3JBZHZhbmNlT3BlcmF0aW9uOwogICAgIGNsYXNzIEN1cnNv
clByZWZldGNoSXRlcmF0aW9uT3BlcmF0aW9uOwogCi0gICAgUmVmUHRyPElEQkJhY2tpbmdTdG9y
ZTo6Q3Vyc29yPiBtX2N1cnNvcjsKLSAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+
IG1fc2F2ZWRDdXJzb3I7CiAgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOjpUYXNr
VHlwZSBtX3Rhc2tUeXBlOwogICAgIEN1cnNvclR5cGUgbV9jdXJzb3JUeXBlOwotICAgIFJlZlB0
cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiBtX3RyYW5zYWN0aW9uOwotICAgIFJlZlB0cjxJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBtX29iamVjdFN0b3JlOworICAgIGNvbnN0IFJlZlB0
cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBtX2RhdGFiYXNlOworICAgIGNvbnN0IFJlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiBtX3RyYW5zYWN0aW9uOworICAgIGNvbnN0IGludDY0
X3QgbV9vYmplY3RTdG9yZUlkOworICAgIC8vIE9yZGVyIGlzIGltcG9ydGFudCwgdGhlIGN1cnNv
cnMgaGF2ZSB0byBiZSBkZXN0cnVjdGVkIGJlZm9yZSB0aGUgdHJhbnNhY3Rpb24uCisgICAgUmVm
UHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBtX2N1cnNvcjsKKyAgICBSZWZQdHI8SURCQmFj
a2luZ1N0b3JlOjpDdXJzb3I+IG1fc2F2ZWRDdXJzb3I7CiAKICAgICBib29sIG1fY2xvc2VkOwog
fTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFi
YXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5oCmlu
ZGV4IGE5YzRjNWJjMzI1ZGZlMmY3NDRmNjk2NDlhZGM4NjM3OWFjZmNmOTkuLjUwNGRlY2M2NWY2
MmFlOWUxNmU0MTBjYzE3ZGQ1YjY1ZjY2OTkxMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaApAQCAtMTAyLDYgKzEwMiw4IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIGZpbmRPYmplY3RTdG9yZUlkKG5hbWUpICE9IElEQk9iamVjdFN0b3Jl
TWV0YWRhdGE6OkludmFsaWRJZDsKICAgICB9CiAKKyAgICBJREJEYXRhYmFzZUJhY2tlbmRJbnRl
cmZhY2UqIGJhY2tlbmQoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmQuZ2V0KCk7IH0KKwogICAg
IHN0YXRpYyBpbnQ2NF90IG5leHRUcmFuc2FjdGlvbklkKCk7CiAKICAgICB1c2luZyBSZWZDb3Vu
dGVkPElEQkRhdGFiYXNlPjo6cmVmOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcAppbmRleCBjZDhhZTc3
ODczMDc2NDI5OGFjYmVlOWVjYzlmZjNkZjRjY2Y5NzNhLi42ZTNkY2Q2NzY1ZTRlNzhhOGYwOTZk
M2ZiOTI4N2YzMmZmYWNjYjlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcApAQCAtMjksOCArMjks
MTAgQEAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAogI2luY2x1ZGUgIklEQkJhY2tp
bmdTdG9yZS5oIgorI2luY2x1ZGUgIklEQkN1cnNvckJhY2tlbmRJbXBsLmgiCiAjaW5jbHVkZSAi
SURCRGF0YWJhc2VFeGNlcHRpb24uaCIKICNpbmNsdWRlICJJREJGYWN0b3J5QmFja2VuZEltcGwu
aCIKKyNpbmNsdWRlICJJREJJbmRleEJhY2tlbmRJbXBsLmgiCiAjaW5jbHVkZSAiSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbC5oIgogI2luY2x1ZGUgIklEQlRyYWNpbmcuaCIKICNpbmNsdWRlICJJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmgiCkBAIC0xNTQsNiArMTU2LDE5MiBAQCBwcml2YXRl
OgogICAgIGludDY0X3QgbV9wcmV2aW91c0ludFZlcnNpb247CiB9OwogCitjbGFzcyBHZXRPcGVy
YXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpP
cGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3Jl
LCBjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiBtZXRhZGF0YSwgaW50NjQgb2JqZWN0U3RvcmVJ
ZCwgaW50NjQgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIElEQkN1
cnNvckJhY2tlbmRJbnRlcmZhY2U6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+IGNhbGxiYWNrcykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihu
ZXcgR2V0T3BlcmF0aW9uKGJhY2tpbmdTdG9yZSwgbWV0YWRhdGEsIG9iamVjdFN0b3JlSWQsIGlu
ZGV4SWQsIGtleVJhbmdlLCBjdXJzb3JUeXBlLCBjYWxsYmFja3MpKTsKKyAgICB9CisKKyAgICB2
b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOworCitwcml2YXRlOgorICAg
IEdldE9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlLCBj
b25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiBtZXRhZGF0YSwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBJREJD
dXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCisgICAgICAgIDogbV9iYWNraW5nU3RvcmUoYmFja2lu
Z1N0b3JlKQorICAgICAgICAsIG1fZGF0YWJhc2VJZChtZXRhZGF0YS5pZCkKKyAgICAgICAgLCBt
X29iamVjdFN0b3JlSWQob2JqZWN0U3RvcmVJZCkKKyAgICAgICAgLCBtX2luZGV4SWQoaW5kZXhJ
ZCkKKyAgICAgICAgLCBtX2tleVBhdGgobWV0YWRhdGEub2JqZWN0U3RvcmVzLmdldChvYmplY3RT
dG9yZUlkKS5rZXlQYXRoKQorICAgICAgICAsIG1fYXV0b0luY3JlbWVudChtZXRhZGF0YS5vYmpl
Y3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpLmF1dG9JbmNyZW1lbnQpCisgICAgICAgICwgbV9r
ZXlSYW5nZShrZXlSYW5nZSkKKyAgICAgICAgLCBtX2N1cnNvclR5cGUoY3Vyc29yVHlwZSkKKyAg
ICAgICAgLCBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCisgICAgeworICAgICAgICBBU1NFUlQobWV0
YWRhdGEub2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlkKS5pZCA9PSBvYmplY3RTdG9yZUlk
KTsKKyAgICB9CisKKyAgICBjb25zdCBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBtX2JhY2tpbmdT
dG9yZTsKKyAgICBjb25zdCBpbnQ2NF90IG1fZGF0YWJhc2VJZDsKKyAgICBjb25zdCBpbnQ2NF90
IG1fb2JqZWN0U3RvcmVJZDsKKyAgICBjb25zdCBpbnQ2NF90IG1faW5kZXhJZDsKKyAgICBjb25z
dCBJREJLZXlQYXRoIG1fa2V5UGF0aDsKKyAgICBjb25zdCBib29sIG1fYXV0b0luY3JlbWVudDsK
KyAgICBjb25zdCBSZWZQdHI8SURCS2V5UmFuZ2U+IG1fa2V5UmFuZ2U7CisgICAgY29uc3QgSURC
Q3Vyc29yQmFja2VuZEludGVyZmFjZTo6Q3Vyc29yVHlwZSBtX2N1cnNvclR5cGU7CisgICAgY29u
c3QgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7Cit9OworCitjbGFzcyBQdXRPcGVy
YXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpP
cGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3Jl
LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVj
dFN0b3JlLCBWZWN0b3I8dWludDhfdD4mIHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBJ
REJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+IGNhbGxiYWNrcywgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywg
Y29uc3QgVmVjdG9yPElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlzPiYgaW5k
ZXhLZXlzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBQdXRPcGVyYXRpb24o
YmFja2luZ1N0b3JlLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZSwgdmFsdWUsIGtleSwgcHV0TW9k
ZSwgY2FsbGJhY2tzLCBpbmRleElkcywgaW5kZXhLZXlzKSk7CisgICAgfQorICAgIHZpcnR1YWwg
dm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqKTsKK3ByaXZhdGU6CisgICAg
UHV0T3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIGlu
dDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3Rv
cmUsIFZlY3Rvcjx1aW50OF90PiYgdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIElEQkRh
dGFiYXNlQmFja2VuZEludGVyZmFjZTo6UHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4gY2FsbGJhY2tzLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25z
dCBWZWN0b3I8SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleXM+JiBpbmRleEtl
eXMpCisgICAgICAgIDogbV9iYWNraW5nU3RvcmUoYmFja2luZ1N0b3JlKQorICAgICAgICAsIG1f
ZGF0YWJhc2VJZChkYXRhYmFzZUlkKQorICAgICAgICAsIG1fb2JqZWN0U3RvcmUob2JqZWN0U3Rv
cmUpCisgICAgICAgICwgbV9rZXkoa2V5KQorICAgICAgICAsIG1fcHV0TW9kZShwdXRNb2RlKQor
ICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKKyAgICAgICAgLCBtX2luZGV4SWRzKGlu
ZGV4SWRzKQorICAgICAgICAsIG1faW5kZXhLZXlzKGluZGV4S2V5cykKKyAgICB7CisgICAgICAg
IG1fdmFsdWUuc3dhcCh2YWx1ZSk7CisgICAgfQorCisgICAgY29uc3QgUmVmUHRyPElEQkJhY2tp
bmdTdG9yZT4gbV9iYWNraW5nU3RvcmU7CisgICAgY29uc3QgaW50NjRfdCBtX2RhdGFiYXNlSWQ7
CisgICAgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBtX29iamVjdFN0b3JlOworICAgIFZl
Y3Rvcjx1aW50OF90PiBtX3ZhbHVlOworICAgIGNvbnN0IFJlZlB0cjxJREJLZXk+IG1fa2V5Owor
ICAgIGNvbnN0IElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6UHV0TW9kZSBtX3B1dE1vZGU7
CisgICAgY29uc3QgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7CisgICAgY29uc3Qg
VmVjdG9yPGludDY0X3Q+IG1faW5kZXhJZHM7CisgICAgY29uc3QgVmVjdG9yPElEQkRhdGFiYXNl
QmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlzPiBtX2luZGV4S2V5czsKK307CisKK2NsYXNzIFNl
dEluZGV4ZXNSZWFkeU9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
OjpPcGVyYXRpb24geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKHNpemVfdCBpbmRleENvdW50KQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTZXRJbmRleGVzUmVhZHlPcGVyYXRpb24o
aW5kZXhDb3VudCkpOworICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsKik7Citwcml2YXRlOgorICAgIFNldEluZGV4ZXNSZWFkeU9wZXJhdGlv
bihzaXplX3QgaW5kZXhDb3VudCkKKyAgICAgICAgOiBtX2luZGV4Q291bnQoaW5kZXhDb3VudCkK
KyAgICB7CisgICAgfQorCisgICAgY29uc3Qgc2l6ZV90IG1faW5kZXhDb3VudDsKK307CisKK2Ns
YXNzIE9wZW5DdXJzb3JPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bDo6T3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkJhY2tpbmdT
dG9yZT4gYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwg
dW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpDdXJz
b3JUeXBlIGN1cnNvclR5cGUsIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUg
dGFza1R5cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRQdHIobmV3IE9wZW5DdXJzb3JPcGVyYXRpb24oYmFja2luZ1N0b3Jl
LCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBrZXlSYW5nZSwgZGlyZWN0aW9u
LCBjdXJzb3JUeXBlLCB0YXNrVHlwZSwgY2FsbGJhY2tzKSk7CisgICAgfQorICAgIHZpcnR1YWwg
dm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqKTsKK3ByaXZhdGU6CisgICAg
T3BlbkN1cnNvck9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0
b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBp
bmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgdW5zaWduZWQgc2hvcnQg
ZGlyZWN0aW9uLCBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpDdXJzb3JUeXBlIGN1cnNvclR5
cGUsIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUgdGFza1R5cGUsIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCisgICAgICAgIDogbV9iYWNraW5nU3RvcmUo
YmFja2luZ1N0b3JlKQorICAgICAgICAsIG1fZGF0YWJhc2VJZChkYXRhYmFzZUlkKQorICAgICAg
ICAsIG1fb2JqZWN0U3RvcmVJZChvYmplY3RTdG9yZUlkKQorICAgICAgICAsIG1faW5kZXhJZChp
bmRleElkKQorICAgICAgICAsIG1fa2V5UmFuZ2Uoa2V5UmFuZ2UpCisgICAgICAgICwgbV9kaXJl
Y3Rpb24oZGlyZWN0aW9uKQorICAgICAgICAsIG1fY3Vyc29yVHlwZShjdXJzb3JUeXBlKQorICAg
ICAgICAsIG1fdGFza1R5cGUodGFza1R5cGUpCisgICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJh
Y2tzKQorICAgIHsKKyAgICB9CisKKyAgICBjb25zdCBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBt
X2JhY2tpbmdTdG9yZTsKKyAgICBjb25zdCBpbnQ2NF90IG1fZGF0YWJhc2VJZDsKKyAgICBjb25z
dCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJZDsKKyAgICBjb25zdCBpbnQ2NF90IG1faW5kZXhJZDsK
KyAgICBjb25zdCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBtX2tleVJhbmdlOworICAgIGNvbnN0
IHVuc2lnbmVkIHNob3J0IG1fZGlyZWN0aW9uOworICAgIGNvbnN0IElEQkN1cnNvckJhY2tlbmRJ
bnRlcmZhY2U6OkN1cnNvclR5cGUgbV9jdXJzb3JUeXBlOworICAgIGNvbnN0IElEQkRhdGFiYXNl
QmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUgbV90YXNrVHlwZTsKKyAgICBjb25zdCBSZWZQdHI8
SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKK307CisKK2NsYXNzIENvdW50T3BlcmF0aW9uIDog
cHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbiB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9u
PiBjcmVhdGUoUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSwgaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFz
c1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBj
YWxsYmFja3MpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENvdW50T3BlcmF0
aW9uKGJhY2tpbmdTdG9yZSwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5
UmFuZ2UsIGNhbGxiYWNrcykpOworICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7Citwcml2YXRlOgorICAgIENvdW50T3BlcmF0aW9uKFBh
c3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURC
S2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQor
ICAgICAgICA6IG1fYmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKKyAgICAgICAgLCBtX2RhdGFi
YXNlSWQoZGF0YWJhc2VJZCkKKyAgICAgICAgLCBtX29iamVjdFN0b3JlSWQob2JqZWN0U3RvcmVJ
ZCkKKyAgICAgICAgLCBtX2luZGV4SWQoaW5kZXhJZCkKKyAgICAgICAgLCBtX2tleVJhbmdlKGtl
eVJhbmdlKQorICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKKyAgICB7CisgICAgfQor
CisgICAgY29uc3QgUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gbV9iYWNraW5nU3RvcmU7CisgICAg
Y29uc3QgaW50NjRfdCBtX2RhdGFiYXNlSWQ7CisgICAgY29uc3QgaW50NjRfdCBtX29iamVjdFN0
b3JlSWQ7CisgICAgY29uc3QgaW50NjRfdCBtX2luZGV4SWQ7CisgICAgY29uc3QgUmVmUHRyPElE
QktleVJhbmdlPiBtX2tleVJhbmdlOworICAgIGNvbnN0IFJlZlB0cjxJREJDYWxsYmFja3M+IG1f
Y2FsbGJhY2tzOworfTsKKworY2xhc3MgRGVsZXRlUmFuZ2VPcGVyYXRpb24gOiBwdWJsaWMgSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQ
YXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFu
Z2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCisgICAgeworICAgICAgICBy
ZXR1cm4gYWRvcHRQdHIobmV3IERlbGV0ZVJhbmdlT3BlcmF0aW9uKGJhY2tpbmdTdG9yZSwgZGF0
YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwga2V5UmFuZ2UsIGNhbGxiYWNrcykpOworICAgIH0KKyAg
ICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7Citwcml2
YXRlOgorICAgIERlbGV0ZVJhbmdlT3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3Jl
PiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+IGNhbGxiYWNrcykKKyAgICAgICAgOiBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUpCisg
ICAgICAgICwgbV9kYXRhYmFzZUlkKGRhdGFiYXNlSWQpCisgICAgICAgICwgbV9vYmplY3RTdG9y
ZUlkKG9iamVjdFN0b3JlSWQpCisgICAgICAgICwgbV9rZXlSYW5nZShrZXlSYW5nZSkKKyAgICAg
ICAgLCBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCisgICAgeworICAgIH0KKworICAgIGNvbnN0IFJl
ZlB0cjxJREJCYWNraW5nU3RvcmU+IG1fYmFja2luZ1N0b3JlOworICAgIGNvbnN0IGludDY0X3Qg
bV9kYXRhYmFzZUlkOworICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlkOworICAgIGNv
bnN0IFJlZlB0cjxJREJLZXlSYW5nZT4gbV9rZXlSYW5nZTsKKyAgICBjb25zdCBSZWZQdHI8SURC
Q2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKK307CisKK2NsYXNzIENsZWFyT3BlcmF0aW9uIDogcHVi
bGljIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbiB7CitwdWJsaWM6CisgICAg
c3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uPiBj
cmVhdGUoUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSwgaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBjYWxsYmFja3MpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENsZWFyT3Bl
cmF0aW9uKGJhY2tpbmdTdG9yZSwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgY2FsbGJhY2tz
KSk7CisgICAgfQorICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGwqKTsKK3ByaXZhdGU6CisgICAgQ2xlYXJPcGVyYXRpb24oUGFzc1JlZlB0cjxJREJCYWNr
aW5nU3RvcmU+IGJhY2tpbmdTdG9yZSwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCisgICAgICAgIDog
bV9iYWNraW5nU3RvcmUoYmFja2luZ1N0b3JlKQorICAgICAgICAsIG1fZGF0YWJhc2VJZChkYXRh
YmFzZUlkKQorICAgICAgICAsIG1fb2JqZWN0U3RvcmVJZChvYmplY3RTdG9yZUlkKQorICAgICAg
ICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKKyAgICB7CisgICAgfQorCisgICAgY29uc3QgUmVm
UHRyPElEQkJhY2tpbmdTdG9yZT4gbV9iYWNraW5nU3RvcmU7CisgICAgY29uc3QgaW50NjRfdCBt
X2RhdGFiYXNlSWQ7CisgICAgY29uc3QgaW50NjRfdCBtX29iamVjdFN0b3JlSWQ7CisgICAgY29u
c3QgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7Cit9OwogCiBjbGFzcyBJREJEYXRh
YmFzZUJhY2tlbmRJbXBsOjpQZW5kaW5nT3BlbkNhbGwgewogcHVibGljOgpAQCAtMzE2LDQ0ICs1
MDQsMzUwIEBAIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6YWJvcnQoaW50NjRfdCB0cmFu
c2FjdGlvbklkKQogICAgIG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKS0+YWJvcnQo
KTsKIH0KIAotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpnZXQoaW50NjRfdCB0cmFuc2Fj
dGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0
cjxJREJLZXlSYW5nZT4sIGJvb2wga2V5T25seSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KQor
dm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpnZXQoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlS
YW5nZT4ga2V5UmFuZ2UsIGJvb2wga2V5T25seSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBy
cENhbGxiYWNrcykKIHsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBSZWZQdHI8SURC
Q2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7CisgICAgQVNTRVJUKG1fdHJhbnNh
Y3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uSWQpKTsKKyAgICBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsK
KworICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhHZXRPcGVyYXRpb246OmNyZWF0
ZShtX2JhY2tpbmdTdG9yZSwgbWV0YWRhdGEoKSwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5
UmFuZ2UsIGtleU9ubHkgPyBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpLZXlPbmx5IDogSURC
Q3Vyc29yQmFja2VuZEludGVyZmFjZTo6S2V5QW5kVmFsdWUsIGNhbGxiYWNrcykpKQorICAgICAg
ICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpBYm9ydEVycm9yKSk7CiB9CiAKLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1w
bDo6cHV0KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBWZWN0
b3I8dWludDhfdD4qIHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4sIFB1dE1vZGUsIFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3Qg
VmVjdG9yPEluZGV4S2V5cz4mKQordm9pZCBHZXRPcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24pCiB7Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgSURCX1RSQUNFKCJHZXRPcGVyYXRpb24iKTsKKworICAgIFJlZlB0cjxJREJLZXk+
IGtleTsKKworICAgIGlmIChtX2tleVJhbmdlLT5pc09ubHlLZXkoKSkKKyAgICAgICAga2V5ID0g
bV9rZXlSYW5nZS0+bG93ZXIoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgUmVmUHRyPElEQkJhY2tp
bmdTdG9yZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJzb3I7CisgICAgICAgIGlmIChtX2luZGV4
SWQgPT0gSURCSW5kZXhNZXRhZGF0YTo6SW52YWxpZElkKSB7CisgICAgICAgICAgICBBU1NFUlQo
bV9jdXJzb3JUeXBlICE9IElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OktleU9ubHkpOworICAg
ICAgICAgICAgLy8gT2JqZWN0U3RvcmUgUmV0cmlldmFsIE9wZXJhdGlvbgorICAgICAgICAgICAg
YmFja2luZ1N0b3JlQ3Vyc29yID0gbV9iYWNraW5nU3RvcmUtPm9wZW5PYmplY3RTdG9yZUN1cnNv
cih0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBt
X29iamVjdFN0b3JlSWQsIG1fa2V5UmFuZ2UuZ2V0KCksIElEQkN1cnNvcjo6TkVYVCk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAobV9jdXJzb3JUeXBlID09IElEQkN1cnNvckJh
Y2tlbmRJbnRlcmZhY2U6OktleU9ubHkpCisgICAgICAgICAgICAgICAgLy8gSW5kZXggVmFsdWUg
UmV0cmlldmFsIE9wZXJhdGlvbgorICAgICAgICAgICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9
IG1fYmFja2luZ1N0b3JlLT5vcGVuSW5kZXhLZXlDdXJzb3IodHJhbnNhY3Rpb24tPmJhY2tpbmdT
dG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCBtX2luZGV4
SWQsIG1fa2V5UmFuZ2UuZ2V0KCksIElEQkN1cnNvcjo6TkVYVCk7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgLy8gSW5kZXggUmVmZXJlbmNlZCBWYWx1ZSBSZXRyaWV2YWwgT3Bl
cmF0aW9uCisgICAgICAgICAgICAgICAgYmFja2luZ1N0b3JlQ3Vyc29yID0gbV9iYWNraW5nU3Rv
cmUtPm9wZW5JbmRleEN1cnNvcih0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24o
KSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIG1faW5kZXhJZCwgbV9rZXlSYW5nZS5n
ZXQoKSwgSURCQ3Vyc29yOjpORVhUKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghYmFja2lu
Z1N0b3JlQ3Vyc29yKSB7CisgICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKCk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBrZXkgPSBiYWNraW5nU3Rv
cmVDdXJzb3ItPmtleSgpOworICAgIH0KKworICAgIFJlZlB0cjxJREJLZXk+IHByaW1hcnlLZXk7
CisgICAgYm9vbCBvazsKKyAgICBpZiAobV9pbmRleElkID09IElEQkluZGV4TWV0YWRhdGE6Oklu
dmFsaWRJZCkgeworICAgICAgICAvLyBPYmplY3QgU3RvcmUgUmV0cmlldmFsIE9wZXJhdGlvbgor
ICAgICAgICBWZWN0b3I8dWludDhfdD4gdmFsdWU7CisgICAgICAgIG9rID0gbV9iYWNraW5nU3Rv
cmUtPmdldFJlY29yZCh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9k
YXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsICprZXksIHZhbHVlKTsKKyAgICAgICAgaWYgKCFv
aykgeworICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6
Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJv
ciBpbiBnZXRSZWNvcmQuIikpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKHZhbHVlLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9u
U3VjY2VzcygpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KG1fYXV0b0luY3JlbWVudCAmJiAhbV9rZXlQYXRoLmlzTnVsbCgpKSB7CisgICAgICAgICAgICBt
X2NhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdp
cmVCeXRlcyh2YWx1ZSksIGtleSwgbV9rZXlQYXRoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlw
dFZhbHVlOjpjcmVhdGVGcm9tV2lyZUJ5dGVzKHZhbHVlKSk7CisgICAgICAgIHJldHVybjsKKwor
ICAgIH0KKworICAgIC8vIEZyb20gaGVyZSB3ZSBhcmUgZGVhbGluZyBvbmx5IHdpdGggaW5kZXhl
cy4KKyAgICBvayA9IG1fYmFja2luZ1N0b3JlLT5nZXRQcmltYXJ5S2V5VmlhSW5kZXgodHJhbnNh
Y3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RT
dG9yZUlkLCBtX2luZGV4SWQsICprZXksIHByaW1hcnlLZXkpOworICAgIGlmICghb2spIHsKKyAg
ICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvciBpbiBnZXRQcmlt
YXJ5S2V5VmlhSW5kZXguIikpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChtX2N1
cnNvclR5cGUgPT0gSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6S2V5T25seSkgeworICAgICAg
ICAvLyBJbmRleCBWYWx1ZSBSZXRyaWV2YWwgT3BlcmF0aW9uCisgICAgICAgIG1fY2FsbGJhY2tz
LT5vblN1Y2Nlc3MocHJpbWFyeUtleS5nZXQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICAvLyBJbmRleCBSZWZlcmVuY2VkIFZhbHVlIFJldHJpZXZhbCBPcGVyYXRpb24KKyAgICBW
ZWN0b3I8dWludDhfdD4gdmFsdWU7CisgICAgb2sgPSBtX2JhY2tpbmdTdG9yZS0+Z2V0UmVjb3Jk
KHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1f
b2JqZWN0U3RvcmVJZCwgKnByaW1hcnlLZXksIHZhbHVlKTsKKyAgICBpZiAoIW9rKSB7CisgICAg
ICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3IgaW4gZ2V0UmVjb3Jk
LiIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICh2YWx1ZS5pc0VtcHR5KCkp
IHsKKyAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcygpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIGlmIChtX2F1dG9JbmNyZW1lbnQgJiYgIW1fa2V5UGF0aC5pc051bGwoKSkgewor
ICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3Jl
YXRlRnJvbVdpcmVCeXRlcyh2YWx1ZSksIHByaW1hcnlLZXksIG1fa2V5UGF0aCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVkU2Ny
aXB0VmFsdWU6OmNyZWF0ZUZyb21XaXJlQnl0ZXModmFsdWUpKTsKIH0KIAotdm9pZCBJREJEYXRh
YmFzZUJhY2tlbmRJbXBsOjpzZXRJbmRleEtleXMoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCS2V5PiBwcnBQcmltYXJ5S2V5LCBjb25z
dCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYpCit2
b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnB1dChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgVmVjdG9yPHVpbnQ4X3Q+KiB2YWx1ZSwgUGFzc1JlZlB0cjxJ
REJLZXk+IGtleSwgUHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJw
Q2FsbGJhY2tzLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25zdCBWZWN0b3I8
SW5kZXhLZXlzPiYgaW5kZXhLZXlzKQogewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IElEQl9UUkFDRSgiSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6cHV0Iik7CisKKyAgICBSZWZQdHI8
SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7CisgICAgQVNTRVJUKG1fdHJh
bnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uSWQpKTsKKyAgICBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklk
KTsKKyAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1vZGUoKSAhPSBJREJUcmFuc2FjdGlvbjo6UkVB
RF9PTkxZKTsKKworICAgIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEgb2JqZWN0U3RvcmVN
ZXRhZGF0YSA9IG1ldGFkYXRhKCkub2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlkKTsKKwor
ICAgIEFTU0VSVChvYmplY3RTdG9yZU1ldGFkYXRhLmF1dG9JbmNyZW1lbnQgfHwga2V5LmdldCgp
KTsKKworICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhQdXRPcGVyYXRpb246OmNy
ZWF0ZShtX2JhY2tpbmdTdG9yZSwgaWQoKSwgb2JqZWN0U3RvcmVNZXRhZGF0YSwgKnZhbHVlLCBr
ZXksIHB1dE1vZGUsIGNhbGxiYWNrcywgaW5kZXhJZHMsIGluZGV4S2V5cykpKQorICAgICAgICBj
YWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpBYm9ydEVycm9yKSk7Cit9CisKK3ZvaWQgUHV0T3BlcmF0aW9uOjpwZXJmb3JtKElE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQoreworICAgIElEQl9UUkFDRSgi
T2JqZWN0U3RvcmVTdG9yYWdlT3BlcmF0aW9uIik7CisgICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5t
b2RlKCkgIT0gSURCVHJhbnNhY3Rpb246OlJFQURfT05MWSk7CisgICAgQVNTRVJUKG1faW5kZXhJ
ZHMuc2l6ZSgpID09IG1faW5kZXhLZXlzLnNpemUoKSk7CisgICAgYm9vbCBrZXlXYXNHZW5lcmF0
ZWQgPSBmYWxzZTsKKworICAgIFJlZlB0cjxJREJLZXk+IGtleTsKKyAgICBpZiAobV9wdXRNb2Rl
ICE9IElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6Q3Vyc29yVXBkYXRlICYmIG1fb2JqZWN0
U3RvcmUuYXV0b0luY3JlbWVudCAmJiAhbV9rZXkpIHsKKyAgICAgICAgUmVmUHRyPElEQktleT4g
YXV0b0luY0tleSA9IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmdlbmVyYXRlS2V5KG1fYmFj
a2luZ1N0b3JlLCB0cmFuc2FjdGlvbiwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlLmlkKTsK
KyAgICAgICAga2V5V2FzR2VuZXJhdGVkID0gdHJ1ZTsKKyAgICAgICAgaWYgKCFhdXRvSW5jS2V5
LT5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFi
YXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Q29uc3RyYWludEVycm9yLCAi
TWF4aW11bSBrZXkgZ2VuZXJhdG9yIHZhbHVlIHJlYWNoZWQuIikpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIGtleSA9IGF1dG9JbmNLZXk7CisgICAgfSBlbHNlCisg
ICAgICAgIGtleSA9IG1fa2V5OworCisgICAgQVNTRVJUKGtleSAmJiBrZXktPmlzVmFsaWQoKSk7
CisKKyAgICBJREJCYWNraW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXIgcmVjb3JkSWRlbnRpZmll
cjsKKyAgICBpZiAobV9wdXRNb2RlID09IElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6QWRk
T25seSkgeworICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7CisgICAgICAgIGJvb2wgb2sgPSBt
X2JhY2tpbmdTdG9yZS0+a2V5RXhpc3RzSW5PYmplY3RTdG9yZSh0cmFuc2FjdGlvbi0+YmFja2lu
Z1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlLmlkLCAqa2V5
LCAmcmVjb3JkSWRlbnRpZmllciwgZm91bmQpOworICAgICAgICBpZiAoIW9rKSB7CisgICAgICAg
ICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0
YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yIGNoZWNraW5nIGtl
eSBleGlzdGVuY2UuIikpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IGlmIChmb3VuZCkgeworICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJh
c2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDb25zdHJhaW50RXJyb3IsICJL
ZXkgYWxyZWFkeSBleGlzdHMgaW4gdGhlIG9iamVjdCBzdG9yZS4iKSk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBWZWN0b3I8T3duUHRyPElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OkluZGV4V3JpdGVyPiA+IGluZGV4V3JpdGVyczsKKyAgICBTdHJpbmcg
ZXJyb3JNZXNzYWdlOworICAgIGJvb2wgb2JleXNDb25zdHJhaW50cyA9IGZhbHNlOworICAgIGJv
b2wgYmFja2luZ1N0b3JlU3VjY2VzcyA9IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Om1ha2VJ
bmRleFdyaXRlcnModHJhbnNhY3Rpb24sIG1fYmFja2luZ1N0b3JlLmdldCgpLCBtX2RhdGFiYXNl
SWQsIG1fb2JqZWN0U3RvcmUsIGtleSwga2V5V2FzR2VuZXJhdGVkLCBtX2luZGV4SWRzLCBtX2lu
ZGV4S2V5cywgJmluZGV4V3JpdGVycywgJmVycm9yTWVzc2FnZSwgb2JleXNDb25zdHJhaW50cyk7
CisgICAgaWYgKCFiYWNraW5nU3RvcmVTdWNjZXNzKSB7CisgICAgICAgIG1fY2FsbGJhY2tzLT5v
bkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5r
bm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3I6IGJhY2tpbmcgc3RvcmUgZXJyb3IgdXBkYXRpbmcg
aW5kZXgga2V5cy4iKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCFvYmV5c0Nv
bnN0cmFpbnRzKSB7CisgICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJy
b3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Q29uc3RyYWludEVycm9yLCBlcnJvck1l
c3NhZ2UpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEJlZm9yZSB0aGlzIHBv
aW50LCBkb24ndCBkbyBhbnkgbXV0YXRpb24uIEFmdGVyIHRoaXMgcG9pbnQsIHJvbGxiYWNrIHRo
ZSB0cmFuc2FjdGlvbiBpbiBjYXNlIG9mIGVycm9yLgorICAgIGJhY2tpbmdTdG9yZVN1Y2Nlc3Mg
PSBtX2JhY2tpbmdTdG9yZS0+cHV0UmVjb3JkKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFu
c2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmUuaWQsICprZXksIG1fdmFsdWUs
ICZyZWNvcmRJZGVudGlmaWVyKTsKKyAgICBpZiAoIWJhY2tpbmdTdG9yZVN1Y2Nlc3MpIHsKKyAg
ICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvcjogYmFja2luZyBz
dG9yZSBlcnJvciBwZXJmb3JtaW5nIHB1dC9hZGQuIikpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbmRleFdyaXRlcnMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6SW5kZXhXcml0ZXIqIGluZGV4
V3JpdGVyID0gaW5kZXhXcml0ZXJzW2ldLmdldCgpOworICAgICAgICBpbmRleFdyaXRlci0+d3Jp
dGVJbmRleEtleXMocmVjb3JkSWRlbnRpZmllciwgKm1fYmFja2luZ1N0b3JlLCB0cmFuc2FjdGlv
bi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3Jl
LmlkKTsKKyAgICB9CisKKyAgICBpZiAobV9vYmplY3RTdG9yZS5hdXRvSW5jcmVtZW50ICYmIG1f
cHV0TW9kZSAhPSBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OkN1cnNvclVwZGF0ZSAmJiBr
ZXktPnR5cGUoKSA9PSBJREJLZXk6Ok51bWJlclR5cGUpIHsKKyAgICAgICAgYm9vbCBvayA9IElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnVwZGF0ZUtleUdlbmVyYXRvcihtX2JhY2tpbmdTdG9y
ZSwgdHJhbnNhY3Rpb24sIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZS5pZCwga2V5LmdldCgp
LCAha2V5V2FzR2VuZXJhdGVkKTsKKyAgICAgICAgaWYgKCFvaykgeworICAgICAgICAgICAgbV9j
YWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvciB1cGRhdGluZyBrZXkgZ2VuZXJh
dG9yLiIpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1f
Y2FsbGJhY2tzLT5vblN1Y2Nlc3Moa2V5LnJlbGVhc2UoKSk7Cit9CisKKwordm9pZCBJREJEYXRh
YmFzZUJhY2tlbmRJbXBsOjpzZXRJbmRleEtleXMoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCS2V5PiBwcnBQcmltYXJ5S2V5LCBjb25z
dCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYgaW5k
ZXhLZXlzKQoreworICAgIElEQl9UUkFDRSgiSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6c2V0SW5k
ZXhLZXlzIik7CisgICAgaWYgKCFtX3RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbklk
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJh
bnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7CisgICAgaWYgKHRy
YW5zYWN0aW9uLT5pc0ZpbmlzaGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFJlZlB0cjxJ
REJLZXk+IHByaW1hcnlLZXkgPSBwcnBQcmltYXJ5S2V5OworICAgIFJlZlB0cjxJREJCYWNraW5n
U3RvcmU+IHN0b3JlID0gYmFja2luZ1N0b3JlKCk7CisgICAgLy8gRklYTUU6IFRoaXMgbWV0aG9k
IGNvdWxkIGJlIGFzeW5jaHJvbm91cywgYnV0IHdlIG5lZWQgdG8gZXZhbHVhdGUgaWYgaXQncyB3
b3J0aCB0aGUgZXh0cmEgY29tcGxleGl0eS4KKyAgICBJREJCYWNraW5nU3RvcmU6OlJlY29yZElk
ZW50aWZpZXIgcmVjb3JkSWRlbnRpZmllcjsKKyAgICBib29sIGZvdW5kID0gZmFsc2U7CisgICAg
Ym9vbCBvayA9IHN0b3JlLT5rZXlFeGlzdHNJbk9iamVjdFN0b3JlKHRyYW5zYWN0aW9uLT5iYWNr
aW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX21ldGFkYXRhLmlkLCBvYmplY3RTdG9yZUlkLCAqcHJp
bWFyeUtleSwgJnJlY29yZElkZW50aWZpZXIsIGZvdW5kKTsKKyAgICBpZiAoIW9rKSB7CisgICAg
ICAgIHRyYW5zYWN0aW9uLT5hYm9ydChJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJh
c2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yIHNldHRpbmcgaW5kZXgg
a2V5cy4iKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCFmb3VuZCkgeworICAg
ICAgICBSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IgPSBJREJEYXRhYmFzZUVycm9yOjpj
cmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgU3RyaW5nOjpmb3JtYXQo
IkludGVybmFsIGVycm9yIHNldHRpbmcgaW5kZXgga2V5cyBmb3Igb2JqZWN0IHN0b3JlICMlbGQu
Iiwgb2JqZWN0U3RvcmVJZCkpOworICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoZXJyb3IucmVs
ZWFzZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFZlY3RvcjxPd25QdHI8SURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6SW5kZXhXcml0ZXI+ID4gaW5kZXhXcml0ZXJzOworICAg
IFN0cmluZyBlcnJvck1lc3NhZ2U7CisgICAgYm9vbCBvYmV5c0NvbnN0cmFpbnRzID0gZmFsc2U7
CisgICAgQVNTRVJUKG1ldGFkYXRhKCkub2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3Jl
SWQpKTsKKyAgICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1ldGFk
YXRhID0gbWV0YWRhdGEoKS5vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpOworICAgIGJv
b2wgYmFja2luZ1N0b3JlU3VjY2VzcyA9IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Om1ha2VJ
bmRleFdyaXRlcnModHJhbnNhY3Rpb24sIHN0b3JlLmdldCgpLCBpZCgpLCBvYmplY3RTdG9yZU1l
dGFkYXRhLCBwcmltYXJ5S2V5LCBmYWxzZSwgaW5kZXhJZHMsIGluZGV4S2V5cywgJmluZGV4V3Jp
dGVycywgJmVycm9yTWVzc2FnZSwgb2JleXNDb25zdHJhaW50cyk7CisgICAgaWYgKCFiYWNraW5n
U3RvcmVTdWNjZXNzKSB7CisgICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydChJREJEYXRhYmFzZUVy
cm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFs
IGVycm9yOiBiYWNraW5nIHN0b3JlIGVycm9yIHVwZGF0aW5nIGluZGV4IGtleXMuIikpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghb2JleXNDb25zdHJhaW50cykgeworICAgICAg
ICB0cmFuc2FjdGlvbi0+YWJvcnQoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpDb25zdHJhaW50RXJyb3IsIGVycm9yTWVzc2FnZSkpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbmRleFdyaXRlcnMuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6SW5kZXhXcml0
ZXIqIGluZGV4V3JpdGVyID0gaW5kZXhXcml0ZXJzW2ldLmdldCgpOworICAgICAgICBpbmRleFdy
aXRlci0+d3JpdGVJbmRleEtleXMocmVjb3JkSWRlbnRpZmllciwgKnN0b3JlLmdldCgpLCB0cmFu
c2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgaWQoKSwgb2JqZWN0U3RvcmVJZCk7
CisgICAgfQogfQogCiB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnNldEluZGV4ZXNSZWFk
eShpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgVmVj
dG9yPGludDY0X3Q+JiBpbmRleElkcykKIHsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnNldEluZGV4ZXNSZWFkeSIp
OworCisgICAgaWYgKCFtX3RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbklkKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rp
b24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7CisgICAgaWYgKHRyYW5zYWN0
aW9uLT5pc0ZpbmlzaGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghdHJhbnNhY3Rp
b24tPnNjaGVkdWxlVGFzayhJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U6OlByZWVtcHRp
dmVUYXNrLCBTZXRJbmRleGVzUmVhZHlPcGVyYXRpb246OmNyZWF0ZShpbmRleElkcy5zaXplKCkp
KSkKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLXZvaWQgSURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6b3BlbkN1cnNvcihpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlS
YW5nZSwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBib29sIGtleU9ubHksIFRhc2tUeXBlIHRh
c2tUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQordm9pZCBTZXRJbmRl
eGVzUmVhZHlPcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJh
bnNhY3Rpb24pCiB7Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgSURCX1RSQUNFKCJT
ZXRJbmRleGVzUmVhZHlPcGVyYXRpb24iKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
aW5kZXhDb3VudDsgKytpKQorICAgICAgICB0cmFuc2FjdGlvbi0+ZGlkQ29tcGxldGVQcmVlbXB0
aXZlRXZlbnQoKTsKIH0KIAotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjb3VudChpbnQ2
NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElk
LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KQordm9p
ZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29yKGludDY0X3QgdHJhbnNhY3Rpb25J
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURC
S2V5UmFuZ2U+IGtleVJhbmdlLCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIGJvb2wga2V5T25s
eSwgVGFza1R5cGUgdGFza1R5cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFj
a3MpCiB7Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgUmVmUHRyPElEQkNhbGxiYWNr
cz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOworICAgIEFTU0VSVChtX3RyYW5zYWN0aW9ucy5j
b250YWlucyh0cmFuc2FjdGlvbklkKSk7CisgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCog
dHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7CisKKyAgICBp
ZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soT3BlbkN1cnNvck9wZXJhdGlvbjo6Y3JlYXRl
KG1fYmFja2luZ1N0b3JlLCBpZCgpLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBrZXlSYW5nZSwg
ZGlyZWN0aW9uLCBrZXlPbmx5ID8gSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6S2V5T25seSA6
IElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OktleUFuZFZhbHVlLCB0YXNrVHlwZSwgY2FsbGJh
Y2tzKSkpCisgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVh
dGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkFib3J0RXJyb3IpKTsKIH0KIAotdm9pZCBJREJEYXRh
YmFzZUJhY2tlbmRJbXBsOjpkZWxldGVSYW5nZShpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPikKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y291bnQoaW50NjRfdCB0
cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFz
c1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBw
cnBDYWxsYmFja3MpCiB7Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgUmVmUHRyPElE
QkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOworICAgIElEQl9UUkFDRSgiSURC
RGF0YWJhc2VCYWNrZW5kSW1wbDo6Y291bnQiKTsKKyAgICBBU1NFUlQobV90cmFuc2FjdGlvbnMu
Y29udGFpbnModHJhbnNhY3Rpb25JZCkpOworICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwq
IHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOworICAgIEFT
U0VSVChtZXRhZGF0YSgpLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlkKSk7Cisg
ICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKENvdW50T3BlcmF0aW9uOjpjcmVhdGUo
bV9iYWNraW5nU3RvcmUsIGlkKCksIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtleVJhbmdlLCBj
YWxsYmFja3MpKSkKKyAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6
OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6QWJvcnRFcnJvcikpOwogfQogCi12b2lkIElE
QkRhdGFiYXNlQmFja2VuZEltcGw6OmNsZWFyKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pCit2b2lkIENvdW50T3Bl
cmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQog
ewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIElEQl9UUkFDRSgiT2JqZWN0U3RvcmVD
b3VudE9wZXJhdGlvbiIpOworICAgIHVpbnQzMl90IGNvdW50ID0gMDsKKyAgICBSZWZQdHI8SURC
QmFja2luZ1N0b3JlOjpDdXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNvcjsKKworICAgIGlmIChtX2lu
ZGV4SWQgPT0gSURCSW5kZXhNZXRhZGF0YTo6SW52YWxpZElkKQorICAgICAgICBiYWNraW5nU3Rv
cmVDdXJzb3IgPSBtX2JhY2tpbmdTdG9yZS0+b3Blbk9iamVjdFN0b3JlS2V5Q3Vyc29yKHRyYW5z
YWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0
U3RvcmVJZCwgbV9rZXlSYW5nZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhUKTsKKyAgICBlbHNlCisg
ICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IG1fYmFja2luZ1N0b3JlLT5vcGVuSW5kZXhLZXlD
dXJzb3IodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJ
ZCwgbV9vYmplY3RTdG9yZUlkLCBtX2luZGV4SWQsIG1fa2V5UmFuZ2UuZ2V0KCksIElEQkN1cnNv
cjo6TkVYVCk7CisgICAgaWYgKCFiYWNraW5nU3RvcmVDdXJzb3IpIHsKKyAgICAgICAgbV9jYWxs
YmFja3MtPm9uU3VjY2Vzcyhjb3VudCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBk
byB7CisgICAgICAgICsrY291bnQ7CisgICAgfSB3aGlsZSAoYmFja2luZ1N0b3JlQ3Vyc29yLT5j
b250aW51ZUZ1bmN0aW9uKDApKTsKKworICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoY291bnQp
OworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZVJhbmdlKGludDY0X3Qg
dHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQktleVJh
bmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcykKK3sK
KyAgICBJREJfVFJBQ0UoIklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZSIpOworCisgICAg
UmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOworICAgIEFTU0VS
VChtX3RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbklkKSk7CisgICAgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNh
Y3Rpb25JZCk7CisgICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgIT0gSURCVHJhbnNhY3Rp
b246OlJFQURfT05MWSk7CisKKyAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soRGVs
ZXRlUmFuZ2VPcGVyYXRpb246OmNyZWF0ZShtX2JhY2tpbmdTdG9yZSwgaWQoKSwgb2JqZWN0U3Rv
cmVJZCwga2V5UmFuZ2UsIGNhbGxiYWNrcykpKQorICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3Io
SURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpBYm9ydEVycm9y
KSk7Cit9CisKK3ZvaWQgRGVsZXRlUmFuZ2VPcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24pCit7CisgICAgSURCX1RSQUNFKCJEZWxldGVSYW5n
ZU9wZXJhdGlvbiIpOworCisgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBiYWNr
aW5nU3RvcmVDdXJzb3IgPSBtX2JhY2tpbmdTdG9yZS0+b3Blbk9iamVjdFN0b3JlQ3Vyc29yKHRy
YW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2Jq
ZWN0U3RvcmVJZCwgbV9rZXlSYW5nZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhUKTsKKyAgICBpZiAo
YmFja2luZ1N0b3JlQ3Vyc29yKSB7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIG1fYmFja2lu
Z1N0b3JlLT5kZWxldGVSZWNvcmQodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9u
KCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCBiYWNraW5nU3RvcmVDdXJzb3ItPnJl
Y29yZElkZW50aWZpZXIoKSk7CisgICAgICAgIH0gd2hpbGUgKGJhY2tpbmdTdG9yZUN1cnNvci0+
Y29udGludWVGdW5jdGlvbigwKSk7CisgICAgfQorCisgICAgbV9jYWxsYmFja3MtPm9uU3VjY2Vz
cygpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNsZWFyKGludDY0X3QgdHJh
bnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4gcHJwQ2FsbGJhY2tzKQoreworICAgIElEQl9UUkFDRSgiSURCRGF0YWJhc2VCYWNrZW5kSW1w
bDo6Y2xlYXIiKTsKKworICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENh
bGxiYWNrczsKKyAgICBBU1NFUlQobV90cmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb25J
ZCkpOworICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uID0gbV90cmFu
c2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOworICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9k
ZSgpICE9IElEQlRyYW5zYWN0aW9uOjpSRUFEX09OTFkpOworCisgICAgaWYgKCF0cmFuc2FjdGlv
bi0+c2NoZWR1bGVUYXNrKENsZWFyT3BlcmF0aW9uOjpjcmVhdGUobV9iYWNraW5nU3RvcmUsIGlk
KCksIG9iamVjdFN0b3JlSWQsIGNhbGxiYWNrcykpKQorICAgICAgICBjYWxsYmFja3MtPm9uRXJy
b3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpBYm9ydEVy
cm9yKSk7Cit9CisKK3ZvaWQgQ2xlYXJPcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbCogdHJhbnNhY3Rpb24pCit7CisgICAgSURCX1RSQUNFKCJPYmplY3RTdG9yZUNs
ZWFyT3BlcmF0aW9uIik7CisgICAgbV9iYWNraW5nU3RvcmUtPmNsZWFyT2JqZWN0U3RvcmUodHJh
bnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmpl
Y3RTdG9yZUlkKTsKKyAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKCk7CiB9CiAKIHZvaWQgSURC
RGF0YWJhc2VCYWNrZW5kSW1wbDo6RGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb246OnBlcmZvcm0o
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24pCkBAIC02OTUsNiArMTE4OSw0
MCBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OlZlcnNpb25DaGFuZ2VBYm9ydE9wZXJh
dGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbgogICAgIG1fZGF0YWJhc2UtPm1fbWV0YWRhdGEu
aW50VmVyc2lvbiA9IG1fcHJldmlvdXNJbnRWZXJzaW9uOwogfQogCit2b2lkIE9wZW5DdXJzb3JP
cGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24p
Cit7CisgICAgSURCX1RSQUNFKCJPcGVuQ3Vyc29yT3BlcmF0aW9uIik7CisKKyAgICAvLyBUaGUg
ZnJvbnRlbmQgaGFzIGJlZ3VuIGluZGV4aW5nLCBzbyB0aGlzIHBhdXNlcyB0aGUgdHJhbnNhY3Rp
b24KKyAgICAvLyB1bnRpbCB0aGUgaW5kZXhpbmcgaXMgY29tcGxldGUuIFRoaXMgY2FuJ3QgaGFw
cGVuIGFueSBlYXJsaWVyCisgICAgLy8gYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIHN3aXRjaCB0
byBlYXJseSBtb2RlIGluIGNhc2UgbXVsdGlwbGUKKyAgICAvLyBpbmRleGVzIGFyZSBiZWluZyBj
cmVhdGVkIGluIGEgcm93LCB3aXRoIHB1dCgpJ3MgaW4gYmV0d2Vlbi4KKyAgICBpZiAobV90YXNr
VHlwZSA9PSBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlByZWVtcHRpdmVUYXNrKQorICAg
ICAgICB0cmFuc2FjdGlvbi0+YWRkUHJlZW1wdGl2ZUV2ZW50KCk7CisKKyAgICBJREJDdXJzb3I6
OkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBzdGF0aWNfY2FzdDxJREJDdXJzb3I6OkRpcmVjdGlvbj4o
bV9kaXJlY3Rpb24pOworICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gYmFja2lu
Z1N0b3JlQ3Vyc29yOworICAgIGlmIChtX2luZGV4SWQgPT0gSURCSW5kZXhNZXRhZGF0YTo6SW52
YWxpZElkKSB7CisgICAgICAgIEFTU0VSVChtX2N1cnNvclR5cGUgIT0gSURCQ3Vyc29yQmFja2Vu
ZEludGVyZmFjZTo6S2V5T25seSk7CisgICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IG1fYmFj
a2luZ1N0b3JlLT5vcGVuT2JqZWN0U3RvcmVDdXJzb3IodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9y
ZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCBtX2tleVJhbmdl
LmdldCgpLCBkaXJlY3Rpb24pOworICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVChtX3Rhc2tU
eXBlID09IElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6Tm9ybWFsVGFzayk7CisgICAgICAg
IGlmIChtX2N1cnNvclR5cGUgPT0gSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6S2V5T25seSkK
KyAgICAgICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IG1fYmFja2luZ1N0b3JlLT5vcGVuSW5k
ZXhLZXlDdXJzb3IodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0
YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCBtX2luZGV4SWQsIG1fa2V5UmFuZ2UuZ2V0KCksIGRp
cmVjdGlvbik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9
IG1fYmFja2luZ1N0b3JlLT5vcGVuSW5kZXhDdXJzb3IodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9y
ZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCBtX2luZGV4SWQs
IG1fa2V5UmFuZ2UuZ2V0KCksIGRpcmVjdGlvbik7CisgICAgfQorCisgICAgaWYgKCFiYWNraW5n
U3RvcmVDdXJzb3IpIHsKKyAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhzdGF0aWNfY2Fz
dDxTZXJpYWxpemVkU2NyaXB0VmFsdWUqPigwKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlIHRhc2tUeXBlKHN0
YXRpY19jYXN0PElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZTo6VGFza1R5cGU+KG1fdGFz
a1R5cGUpKTsKKyAgICBSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+IGN1cnNvciA9IElEQkN1
cnNvckJhY2tlbmRJbXBsOjpjcmVhdGUoYmFja2luZ1N0b3JlQ3Vyc29yLmdldCgpLCBtX2N1cnNv
clR5cGUsIHRhc2tUeXBlLCB0cmFuc2FjdGlvbiwgbV9vYmplY3RTdG9yZUlkKTsKKyAgICBtX2Nh
bGxiYWNrcy0+b25TdWNjZXNzKGN1cnNvciwgY3Vyc29yLT5rZXkoKSwgY3Vyc29yLT5wcmltYXJ5
S2V5KCksIGN1cnNvci0+dmFsdWUoKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAog
I2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCSW5kZXguY3BwCmluZGV4IDc2MjY0ODhlYTBmZDNlNzBkNzQ2NDQ0
MmYyZWM4NWQ3YTRmNTliMDAuLjYyM2NmZDAzNDAwMGE1ZWNhODBlNzdjZjIxODhjMzdkMWJiZDky
OWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5jcHAK
QEAgLTQzLDE2ICs0MywxNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBzaG9ydCBkZWZhdWx0RGlyZWN0aW9uID0gSURCQ3Vyc29yOjpORVhUOwogCi1JREJJ
bmRleDo6SURCSW5kZXgoY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgbWV0YWRhdGEsIFBhc3NSZWZQ
dHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBiYWNrZW5kLCBJREJPYmplY3RTdG9yZSogb2Jq
ZWN0U3RvcmUsIElEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKK0lEQkluZGV4OjpJREJJbmRl
eChjb25zdCBJREJJbmRleE1ldGFkYXRhJiBtZXRhZGF0YSwgSURCT2JqZWN0U3RvcmUqIG9iamVj
dFN0b3JlLCBJREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCiAgICAgOiBtX21ldGFkYXRhKG1l
dGFkYXRhKQotICAgICwgbV9iYWNrZW5kKGJhY2tlbmQpCiAgICAgLCBtX29iamVjdFN0b3JlKG9i
amVjdFN0b3JlKQogICAgICwgbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKICAgICAsIG1fZGVs
ZXRlZChmYWxzZSkKIHsKLSAgICBBU1NFUlQobV9iYWNrZW5kKTsKICAgICBBU1NFUlQobV9vYmpl
Y3RTdG9yZSk7CiAgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb24pOworICAgIEFTU0VSVChtX21ldGFk
YXRhLmlkICE9IElEQkluZGV4TWV0YWRhdGE6OkludmFsaWRJZCk7CiB9CiAKIElEQkluZGV4Ojp+
SURCSW5kZXgoKQpAQCAtNzYsOCArNzUsNyBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQklu
ZGV4OjpvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhcwogCiAg
ICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4
dCwgSURCQW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwogICAgIHJlcXVl
c3QtPnNldEN1cnNvckRldGFpbHMoSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6S2V5QW5kVmFs
dWUsIGRpcmVjdGlvbik7Ci0gICAgbV9iYWNrZW5kLT5vcGVuQ3Vyc29yKGtleVJhbmdlLCBkaXJl
Y3Rpb24sIHJlcXVlc3QsIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOwotICAgIEFTU0VS
VCghZWMpOworICAgIGJhY2tlbmREQigpLT5vcGVuQ3Vyc29yKG1fdHJhbnNhY3Rpb24tPmlkKCks
IG1fb2JqZWN0U3RvcmUtPmlkKCksIG1fbWV0YWRhdGEuaWQsIGtleVJhbmdlLCBkaXJlY3Rpb24s
IGZhbHNlLCBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6Ok5vcm1hbFRhc2ssIHJlcXVlc3Qp
OwogICAgIHJldHVybiByZXF1ZXN0OwogfQogCkBAIC0xMDIsOCArMTAwLDggQEAgUGFzc1JlZlB0
cjxJREJSZXF1ZXN0PiBJREJJbmRleDo6Y291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCwgUGFzc1JlZlAKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIFJlZlB0cjxJREJS
ZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3Jl
YXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKLSAgICBtX2JhY2tlbmQtPmNvdW50KGtl
eVJhbmdlLCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKLSAgICBBU1NF
UlQoIWVjKTsKKyAgICBJREJEYXRhYmFzZU1ldGFkYXRhIG1ldGFkYXRhKG1fdHJhbnNhY3Rpb24t
PmRiKCktPm1ldGFkYXRhKCkpOworICAgIGJhY2tlbmREQigpLT5jb3VudChtX3RyYW5zYWN0aW9u
LT5pZCgpLCBtX29iamVjdFN0b3JlLT5pZCgpLCBtX21ldGFkYXRhLmlkLCBrZXlSYW5nZSwgcmVx
dWVzdCk7CiAgICAgcmV0dXJuIHJlcXVlc3Q7CiB9CiAKQEAgLTEzMyw4ICsxMzEsNyBAQCBQYXNz
UmVmUHRyPElEQlJlcXVlc3Q+IElEQkluZGV4OjpvcGVuS2V5Q3Vyc29yKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQsCiAKICAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElE
QlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2Fj
dGlvbi5nZXQoKSk7CiAgICAgcmVxdWVzdC0+c2V0Q3Vyc29yRGV0YWlscyhJREJDdXJzb3JCYWNr
ZW5kSW50ZXJmYWNlOjpLZXlPbmx5LCBkaXJlY3Rpb24pOwotICAgIG1fYmFja2VuZC0+b3Blbktl
eUN1cnNvcihrZXlSYW5nZSwgZGlyZWN0aW9uLCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNr
ZW5kKCksIGVjKTsKLSAgICBBU1NFUlQoIWVjKTsKKyAgICBiYWNrZW5kREIoKS0+b3BlbkN1cnNv
cihtX3RyYW5zYWN0aW9uLT5pZCgpLCBtX29iamVjdFN0b3JlLT5pZCgpLCBtX21ldGFkYXRhLmlk
LCBrZXlSYW5nZSwgZGlyZWN0aW9uLCB0cnVlLCBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6
Ok5vcm1hbFRhc2ssIHJlcXVlc3QpOwogICAgIHJldHVybiByZXF1ZXN0OwogfQogCkBAIC0xNzMs
OCArMTcwLDcgQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJJbmRleDo6Z2V0KFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHIKICAgICB9CiAKICAgICBSZWZQdHI8
SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6
OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7Ci0gICAgbV9iYWNrZW5kLT5nZXQo
a2V5UmFuZ2UsIHJlcXVlc3QsIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOwotICAgIEFT
U0VSVCghZWMpOworICAgIGJhY2tlbmREQigpLT5nZXQobV90cmFuc2FjdGlvbi0+aWQoKSwgbV9v
YmplY3RTdG9yZS0+aWQoKSwgbV9tZXRhZGF0YS5pZCwga2V5UmFuZ2UsIGZhbHNlLCByZXF1ZXN0
KTsKICAgICByZXR1cm4gcmVxdWVzdDsKIH0KIApAQCAtMjA1LDExICsyMDEsMTUgQEAgUGFzc1Jl
ZlB0cjxJREJSZXF1ZXN0PiBJREJJbmRleDo6Z2V0S2V5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQsIFBhc3NSZWYKICAgICB9CiAKICAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVz
dCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgbV90
cmFuc2FjdGlvbi5nZXQoKSk7Ci0gICAgbV9iYWNrZW5kLT5nZXRLZXkoa2V5UmFuZ2UsIHJlcXVl
c3QsIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOwotICAgIEFTU0VSVCghZWMpOworICAg
IGJhY2tlbmREQigpLT5nZXQobV90cmFuc2FjdGlvbi0+aWQoKSwgbV9vYmplY3RTdG9yZS0+aWQo
KSwgbV9tZXRhZGF0YS5pZCwga2V5UmFuZ2UsIHRydWUsIHJlcXVlc3QpOwogICAgIHJldHVybiBy
ZXF1ZXN0OwogfQogCitJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UqIElEQkluZGV4OjpiYWNr
ZW5kREIoKSBjb25zdAoreworICAgIHJldHVybiBtX3RyYW5zYWN0aW9uLT5kYigpLT5iYWNrZW5k
KCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCSW5kZXguaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4
LmgKaW5kZXggY2Y0ZjFjZjMzYzg0MTEyZjk1ZTQwOThmMjE2ODMwNDYyNTIzMTBhMy4uMzA3MmYx
NWI5ODEyMmY4MWQ0NDRkNDk1MWQyOTIwN2I3MmVlODZlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5oCkBAIC0yNyw3ICsyNyw3IEBACiAjZGVmaW5lIElE
QkluZGV4X2gKIAogI2luY2x1ZGUgIklEQkN1cnNvci5oIgotI2luY2x1ZGUgIklEQkluZGV4QmFj
a2VuZEludGVyZmFjZS5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiSURC
S2V5UGF0aC5oIgogI2luY2x1ZGUgIklEQktleVJhbmdlLmgiCiAjaW5jbHVkZSAiSURCTWV0YWRh
dGEuaCIKQEAgLTQ1LDkgKzQ1LDkgQEAgY2xhc3MgSURCT2JqZWN0U3RvcmU7CiAKIGNsYXNzIElE
QkluZGV4IDogcHVibGljIFNjcmlwdFdyYXBwYWJsZSwgcHVibGljIFJlZkNvdW50ZWQ8SURCSW5k
ZXg+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJJbmRleD4gY3JlYXRlKGNv
bnN0IElEQkluZGV4TWV0YWRhdGEmIG1ldGFkYXRhLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2Vu
ZEludGVyZmFjZT4gYmFja2VuZCwgSURCT2JqZWN0U3RvcmUqIG9iamVjdFN0b3JlLCBJREJUcmFu
c2FjdGlvbiogdHJhbnNhY3Rpb24pCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCSW5kZXg+IGNy
ZWF0ZShjb25zdCBJREJJbmRleE1ldGFkYXRhJiBtZXRhZGF0YSwgSURCT2JqZWN0U3RvcmUqIG9i
amVjdFN0b3JlLCBJREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCiAgICAgewotICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IElEQkluZGV4KG1ldGFkYXRhLCBiYWNrZW5kLCBvYmplY3RTdG9y
ZSwgdHJhbnNhY3Rpb24pKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJJbmRleCht
ZXRhZGF0YSwgb2JqZWN0U3RvcmUsIHRyYW5zYWN0aW9uKSk7CiAgICAgfQogICAgIH5JREJJbmRl
eCgpOwogCkBAIC04MywxMSArODMsMTIgQEAgcHVibGljOgogCiAgICAgdm9pZCBtYXJrRGVsZXRl
ZCgpIHsgbV9kZWxldGVkID0gdHJ1ZTsgfQogCisgICAgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJm
YWNlKiBiYWNrZW5kREIoKSBjb25zdDsKKwogcHJpdmF0ZToKLSAgICBJREJJbmRleChjb25zdCBJ
REJJbmRleE1ldGFkYXRhJiwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+LCBJ
REJPYmplY3RTdG9yZSosIElEQlRyYW5zYWN0aW9uKik7CisgICAgSURCSW5kZXgoY29uc3QgSURC
SW5kZXhNZXRhZGF0YSYsIElEQk9iamVjdFN0b3JlKiwgSURCVHJhbnNhY3Rpb24qKTsKIAogICAg
IElEQkluZGV4TWV0YWRhdGEgbV9tZXRhZGF0YTsKLSAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5k
SW50ZXJmYWNlPiBtX2JhY2tlbmQ7CiAgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlPiBtX29iamVj
dFN0b3JlOwogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gbV90cmFuc2FjdGlvbjsKICAgICBi
b29sIG1fZGVsZXRlZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkluZGV4QmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5jcHAKaW5kZXggMjQ2Njg0OTA2MWVmODYxMTU2ZDhi
NDAwMTM3YTRjODg4ZWE5ZTc1Yy4uODk0MGM1ZTdlMThiYmE0YTgwNTU2NGU0YmU4NDZmOTMyNDcz
YjgxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5k
ZXhCYWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCSW5kZXhCYWNrZW5kSW1wbC5jcHAKQEAgLTQyLDk0ICs0Miw4IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotY2xhc3MgSURCSW5kZXhCYWNrZW5kSW1wbDo6T3BlbkluZGV4Q3Vyc29yT3Bl
cmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbiB7Ci1w
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6
T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCwg
UGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlv
biwgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UHRyKG5ldyBPcGVuSW5kZXhDdXJzb3JPcGVyYXRpb24oaW5kZXgsIGtleVJhbmdlLCBkaXJl
Y3Rpb24sIGN1cnNvclR5cGUsIGNhbGxiYWNrcykpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQg
cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7Ci1wcml2YXRlOgotICAgIE9wZW5J
bmRleEN1cnNvck9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4
LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgdW5zaWduZWQgc2hvcnQgZGlyZWN0
aW9uLCBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi0gICAgICAgIDogbV9pbmRleChpbmRl
eCkKLSAgICAgICAgLCBtX2tleVJhbmdlKGtleVJhbmdlKQotICAgICAgICAsIG1fZGlyZWN0aW9u
KGRpcmVjdGlvbikKLSAgICAgICAgLCBtX2N1cnNvclR5cGUoY3Vyc29yVHlwZSkKLSAgICAgICAg
LCBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCi0gICAgewotICAgIH0KLQotICAgIFJlZlB0cjxJREJJ
bmRleEJhY2tlbmRJbXBsPiBtX2luZGV4OwotICAgIFJlZlB0cjxJREJLZXlSYW5nZT4gbV9rZXlS
YW5nZTsKLSAgICB1bnNpZ25lZCBzaG9ydCBtX2RpcmVjdGlvbjsKLSAgICBJREJDdXJzb3JCYWNr
ZW5kSW50ZXJmYWNlOjpDdXJzb3JUeXBlIG1fY3Vyc29yVHlwZTsKLSAgICBSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBtX2NhbGxiYWNrczsKLX07Ci0KLWNsYXNzIElEQkluZGV4QmFja2VuZEltcGw6Oklu
ZGV4Q291bnRPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3Bl
cmF0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZElt
cGw+IGluZGV4LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+IGNhbGxiYWNrcykKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihu
ZXcgSW5kZXhDb3VudE9wZXJhdGlvbihpbmRleCwga2V5UmFuZ2UsIGNhbGxiYWNrcykpOwotICAg
IH0KLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7
Ci1wcml2YXRlOgotICAgIEluZGV4Q291bnRPcGVyYXRpb24oUGFzc1JlZlB0cjxJREJJbmRleEJh
Y2tlbmRJbXBsPiBpbmRleCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi0gICAgICAgIDogbV9pbmRleChpbmRleCkK
LSAgICAgICAgLCBtX2tleVJhbmdlKGtleVJhbmdlKQotICAgICAgICAsIG1fY2FsbGJhY2tzKGNh
bGxiYWNrcykKLSAgICB7Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+
IG1faW5kZXg7Ci0gICAgUmVmUHRyPElEQktleVJhbmdlPiBtX2tleVJhbmdlOwotICAgIFJlZlB0
cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOwotfTsKLQotY2xhc3MgSURCSW5kZXhCYWNrZW5k
SW1wbDo6SW5kZXhSZWZlcmVuY2VkVmFsdWVSZXRyaWV2YWxPcGVyYXRpb24gOiBwdWJsaWMgSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMg
UGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQ
YXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4LCBQYXNzUmVmUHRyPElEQktleVJh
bmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLSAgICB7
Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgSW5kZXhSZWZlcmVuY2VkVmFsdWVSZXRyaWV2
YWxPcGVyYXRpb24oaW5kZXgsIGtleVJhbmdlLCBjYWxsYmFja3MpKTsKLSAgICB9Ci0gICAgdmly
dHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOwotcHJpdmF0ZToK
LSAgICBJbmRleFJlZmVyZW5jZWRWYWx1ZVJldHJpZXZhbE9wZXJhdGlvbihQYXNzUmVmUHRyPElE
QkluZGV4QmFja2VuZEltcGw+IGluZGV4LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5n
ZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLSAgICAgICAgOiBtX2luZGV4
KGluZGV4KQotICAgICAgICAsIG1fa2V5UmFuZ2Uoa2V5UmFuZ2UpCi0gICAgICAgICwgbV9jYWxs
YmFja3MoY2FsbGJhY2tzKQotICAgIHsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCSW5kZXhCYWNr
ZW5kSW1wbD4gbV9pbmRleDsKLSAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IG1fa2V5UmFuZ2U7Ci0g
ICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7Ci19OwotCi1jbGFzcyBJREJJbmRl
eEJhY2tlbmRJbXBsOjpJbmRleFZhbHVlUmV0cmlldmFsT3BlcmF0aW9uIDogcHVibGljIElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBh
c3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uPiBjcmVhdGUoUGFz
c1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCwgUGFzc1JlZlB0cjxJREJLZXlSYW5n
ZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi0gICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEluZGV4VmFsdWVSZXRyaWV2YWxPcGVyYXRpb24o
aW5kZXgsIGtleVJhbmdlLCBjYWxsYmFja3MpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIHBl
cmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOwotcHJpdmF0ZToKLSAgICBJbmRleFZh
bHVlUmV0cmlldmFsT3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5k
ZXgsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4gY2FsbGJhY2tzKQotICAgICAgICA6IG1faW5kZXgoaW5kZXgpCi0gICAgICAgICwgbV9r
ZXlSYW5nZShrZXlSYW5nZSkKLSAgICAgICAgLCBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCi0gICAg
ewotICAgIH0KLQotICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBtX2luZGV4OwotICAg
IFJlZlB0cjxJREJLZXlSYW5nZT4gbV9rZXlSYW5nZTsKLSAgICBSZWZQdHI8SURCQ2FsbGJhY2tz
PiBtX2NhbGxiYWNrczsKLX07Ci0KLQotSURCSW5kZXhCYWNrZW5kSW1wbDo6SURCSW5kZXhCYWNr
ZW5kSW1wbChjb25zdCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKiBkYXRhYmFzZSwgSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbCogb2JqZWN0U3RvcmVCYWNrZW5kLCBjb25zdCBJREJJbmRleE1ldGFk
YXRhJiBtZXRhZGF0YSkKK0lEQkluZGV4QmFja2VuZEltcGw6OklEQkluZGV4QmFja2VuZEltcGwo
Y29uc3QgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCogZGF0YWJhc2UsIGNvbnN0IElEQkluZGV4TWV0
YWRhdGEmIG1ldGFkYXRhKQogICAgIDogbV9kYXRhYmFzZShkYXRhYmFzZSkKLSAgICAsIG1fb2Jq
ZWN0U3RvcmVCYWNrZW5kKG9iamVjdFN0b3JlQmFja2VuZCkKICAgICAsIG1fbWV0YWRhdGEobWV0
YWRhdGEpCiB7CiB9CkBAIC0xMzgsMTY0ICs1Miw2IEBAIElEQkluZGV4QmFja2VuZEltcGw6On5J
REJJbmRleEJhY2tlbmRJbXBsKCkKIHsKIH0KIAotdm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpP
cGVuSW5kZXhDdXJzb3JPcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bCogdHJhbnNhY3Rpb24pCi17Ci0gICAgSURCX1RSQUNFKCJPcGVuSW5kZXhDdXJzb3JPcGVyYXRp
b24iKTsKLSAgICBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBzdGF0aWNfY2FzdDxJ
REJDdXJzb3I6OkRpcmVjdGlvbj4obV9kaXJlY3Rpb24pOwotCi0gICAgUmVmUHRyPElEQkJhY2tp
bmdTdG9yZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJzb3I7Ci0KLSAgICBzd2l0Y2ggKG1fY3Vy
c29yVHlwZSkgewotICAgIGNhc2UgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6S2V5T25seToK
LSAgICAgICAgYmFja2luZ1N0b3JlQ3Vyc29yID0gbV9pbmRleC0+YmFja2luZ1N0b3JlKCktPm9w
ZW5JbmRleEtleUN1cnNvcih0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwg
bV9pbmRleC0+ZGF0YWJhc2VJZCgpLCBtX2luZGV4LT5tX29iamVjdFN0b3JlQmFja2VuZC0+aWQo
KSwgbV9pbmRleC0+aWQoKSwgbV9rZXlSYW5nZS5nZXQoKSwgZGlyZWN0aW9uKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpLZXlBbmRWYWx1ZToK
LSAgICAgICAgYmFja2luZ1N0b3JlQ3Vyc29yID0gbV9pbmRleC0+YmFja2luZ1N0b3JlKCktPm9w
ZW5JbmRleEN1cnNvcih0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9p
bmRleC0+ZGF0YWJhc2VJZCgpLCBtX2luZGV4LT5tX29iamVjdFN0b3JlQmFja2VuZC0+aWQoKSwg
bV9pbmRleC0+aWQoKSwgbV9rZXlSYW5nZS5nZXQoKSwgZGlyZWN0aW9uKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQot
Ci0gICAgaWYgKCFiYWNraW5nU3RvcmVDdXJzb3IpIHsKLSAgICAgICAgbV9jYWxsYmFja3MtPm9u
U3VjY2VzcyhzdGF0aWNfY2FzdDxTZXJpYWxpemVkU2NyaXB0VmFsdWUqPigwKSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+IGN1cnNv
ciA9IElEQkN1cnNvckJhY2tlbmRJbXBsOjpjcmVhdGUoYmFja2luZ1N0b3JlQ3Vyc29yLmdldCgp
LCBtX2N1cnNvclR5cGUsIHRyYW5zYWN0aW9uLCBtX2luZGV4LT5tX29iamVjdFN0b3JlQmFja2Vu
ZCk7Ci0gICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhjdXJzb3IsIGN1cnNvci0+a2V5KCksIGN1
cnNvci0+cHJpbWFyeUtleSgpLCBjdXJzb3ItPnZhbHVlKCkpOwotfQotCi12b2lkIElEQkluZGV4
QmFja2VuZEltcGw6Om9wZW5DdXJzb3IoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2Us
IHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENh
bGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwg
RXhjZXB0aW9uQ29kZSYpCi17Ci0gICAgSURCX1RSQUNFKCJJREJJbmRleEJhY2tlbmRJbXBsOjpv
cGVuQ3Vyc29yIik7Ci0gICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2Fs
bGJhY2tzOwotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlv
biA9IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmZyb20odHJhbnNhY3Rpb25QdHIpOwotICAg
IGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhPcGVuSW5kZXhDdXJzb3JPcGVyYXRpb246
OmNyZWF0ZSh0aGlzLCBrZXlSYW5nZSwgZGlyZWN0aW9uLCBJREJDdXJzb3JCYWNrZW5kSW50ZXJm
YWNlOjpLZXlBbmRWYWx1ZSwgY2FsbGJhY2tzKSkpCi0gICAgICAgIGNhbGxiYWNrcy0+b25FcnJv
cihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkFib3J0RXJy
b3IpKTsKLX0KLQotdm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpvcGVuS2V5Q3Vyc29yKFBhc3NS
ZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIEV4Y2VwdGlvbkNvZGUmKQotewotICAgIElEQl9U
UkFDRSgiSURCSW5kZXhCYWNrZW5kSW1wbDo6b3BlbktleUN1cnNvciIpOwotICAgIFJlZlB0cjxJ
REJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKLSAgICBSZWZQdHI8SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsOjpmcm9tKHRyYW5zYWN0aW9uUHRyKTsKLSAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVs
ZVRhc2soT3BlbkluZGV4Q3Vyc29yT3BlcmF0aW9uOjpjcmVhdGUodGhpcywga2V5UmFuZ2UsIGRp
cmVjdGlvbiwgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6S2V5T25seSwgY2FsbGJhY2tzKSkp
Ci0gICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURC
RGF0YWJhc2VFeGNlcHRpb246OkFib3J0RXJyb3IpKTsKLX0KLQotdm9pZCBJREJJbmRleEJhY2tl
bmRJbXBsOjpJbmRleENvdW50T3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGwqIHRyYW5zYWN0aW9uKQotewotICAgIElEQl9UUkFDRSgiSW5kZXhDb3VudE9wZXJhdGlv
biIpOwotICAgIHVpbnQzMl90IGNvdW50ID0gMDsKLQotICAgIFJlZlB0cjxJREJCYWNraW5nU3Rv
cmU6OkN1cnNvcj4gYmFja2luZ1N0b3JlQ3Vyc29yID0gbV9pbmRleC0+YmFja2luZ1N0b3JlKCkt
Pm9wZW5JbmRleEtleUN1cnNvcih0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24o
KSwgbV9pbmRleC0+ZGF0YWJhc2VJZCgpLCBtX2luZGV4LT5tX29iamVjdFN0b3JlQmFja2VuZC0+
aWQoKSwgbV9pbmRleC0+aWQoKSwgbV9rZXlSYW5nZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhUKTsK
LSAgICBpZiAoIWJhY2tpbmdTdG9yZUN1cnNvcikgewotICAgICAgICBtX2NhbGxiYWNrcy0+b25T
dWNjZXNzKGNvdW50KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGRvIHsKLSAgICAg
ICAgKytjb3VudDsKLSAgICB9IHdoaWxlIChiYWNraW5nU3RvcmVDdXJzb3ItPmNvbnRpbnVlRnVu
Y3Rpb24oMCkpOwotCi0gICAgbV9jYWxsYmFja3MtPm9uU3VjY2Vzcyhjb3VudCk7Ci19Ci0KLXZv
aWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6Y291bnQoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcmFu
Z2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIEV4Y2VwdGlvbkNvZGUmKQotewotICAg
IElEQl9UUkFDRSgiSURCSW5kZXhCYWNrZW5kSW1wbDo6Y291bnQiKTsKLSAgICBSZWZQdHI8SURC
Q2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7Ci0gICAgUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bDo6ZnJvbSh0cmFuc2FjdGlvblB0cik7Ci0gICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVU
YXNrKEluZGV4Q291bnRPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCByYW5nZSwgY2FsbGJhY2tzKSkp
Ci0gICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURC
RGF0YWJhc2VFeGNlcHRpb246OkFib3J0RXJyb3IpKTsKLX0KLQotdm9pZCBJREJJbmRleEJhY2tl
bmRJbXBsOjpJbmRleFJlZmVyZW5jZWRWYWx1ZVJldHJpZXZhbE9wZXJhdGlvbjo6cGVyZm9ybShJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKLXsKLSAgICBJREJfVFJBQ0Uo
IkluZGV4UmVmZXJlbmNlZFZhbHVlUmV0cmlldmFsT3BlcmF0aW9uIik7Ci0KLSAgICBSZWZQdHI8
SURCS2V5PiBrZXk7Ci0KLSAgICBpZiAobV9rZXlSYW5nZS0+aXNPbmx5S2V5KCkpCi0gICAgICAg
IGtleSA9IG1fa2V5UmFuZ2UtPmxvd2VyKCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIFJlZlB0cjxJ
REJCYWNraW5nU3RvcmU6OkN1cnNvcj4gYmFja2luZ1N0b3JlQ3Vyc29yID0gbV9pbmRleC0+YmFj
a2luZ1N0b3JlKCktPm9wZW5JbmRleEN1cnNvcih0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJh
bnNhY3Rpb24oKSwgbV9pbmRleC0+ZGF0YWJhc2VJZCgpLCBtX2luZGV4LT5tX29iamVjdFN0b3Jl
QmFja2VuZC0+aWQoKSwgbV9pbmRleC0+aWQoKSwgbV9rZXlSYW5nZS5nZXQoKSwgSURCQ3Vyc29y
OjpORVhUKTsKLQotICAgICAgICBpZiAoIWJhY2tpbmdTdG9yZUN1cnNvcikgewotICAgICAgICAg
ICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcygpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgICAgIGtleSA9IGJhY2tpbmdTdG9yZUN1cnNvci0+a2V5KCk7Ci0gICAgfQotCi0g
ICAgUmVmUHRyPElEQktleT4gcHJpbWFyeUtleTsKLSAgICBib29sIG9rID0gbV9pbmRleC0+YmFj
a2luZ1N0b3JlKCktPmdldFByaW1hcnlLZXlWaWFJbmRleCh0cmFuc2FjdGlvbi0+YmFja2luZ1N0
b3JlVHJhbnNhY3Rpb24oKSwgbV9pbmRleC0+ZGF0YWJhc2VJZCgpLCBtX2luZGV4LT5tX29iamVj
dFN0b3JlQmFja2VuZC0+aWQoKSwgbV9pbmRleC0+aWQoKSwgKmtleSwgcHJpbWFyeUtleSk7Ci0g
ICAgaWYgKCFvaykgewotICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVy
cm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFs
IGVycm9yIGluIGdldFByaW1hcnlLZXlWaWFJbmRleC4iKSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBWZWN0b3I8dWludDhfdD4gdmFsdWU7Ci0gICAgb2sgPSBtX2luZGV4LT5iYWNr
aW5nU3RvcmUoKS0+Z2V0UmVjb3JkKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlv
bigpLCBtX2luZGV4LT5kYXRhYmFzZUlkKCksIG1faW5kZXgtPm1fb2JqZWN0U3RvcmVCYWNrZW5k
LT5pZCgpLCAqcHJpbWFyeUtleSwgdmFsdWUpOwotICAgIGlmICghb2spIHsKLSAgICAgICAgbV9j
YWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvciBpbiBnZXRSZWNvcmQuIikpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHZhbHVlLmlzRW1wdHkoKSkgewotICAg
ICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgaWYgKG1faW5kZXgtPm1fb2JqZWN0U3RvcmVCYWNrZW5kLT5hdXRvSW5jcmVtZW50KCkgJiYg
IW1faW5kZXgtPm1fb2JqZWN0U3RvcmVCYWNrZW5kLT5rZXlQYXRoKCkuaXNOdWxsKCkpIHsKLSAg
ICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0
ZUZyb21XaXJlQnl0ZXModmFsdWUpLCBwcmltYXJ5S2V5LCBtX2luZGV4LT5tX29iamVjdFN0b3Jl
QmFja2VuZC0+a2V5UGF0aCgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX2NhbGxi
YWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmVCeXRl
cyh2YWx1ZSkpOwotfQotCi0KLXZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6SW5kZXhWYWx1ZVJl
dHJpZXZhbE9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFu
c2FjdGlvbikKLXsKLSAgICBJREJfVFJBQ0UoIkluZGV4VmFsdWVSZXRyaWV2YWxPcGVyYXRpb24i
KTsKLQotICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gYmFja2luZ1N0b3JlQ3Vy
c29yID0gbV9pbmRleC0+YmFja2luZ1N0b3JlKCktPm9wZW5JbmRleEtleUN1cnNvcih0cmFuc2Fj
dGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9pbmRleC0+ZGF0YWJhc2VJZCgpLCBt
X2luZGV4LT5tX29iamVjdFN0b3JlQmFja2VuZC0+aWQoKSwgbV9pbmRleC0+aWQoKSwgbV9rZXlS
YW5nZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhUKTsKLQotICAgIGlmICghYmFja2luZ1N0b3JlQ3Vy
c29yKSB7Ci0gICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3Moc3RhdGljX2Nhc3Q8SURCS2V5
Kj4oMCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQktleT4ga2V5
UmVzdWx0OwotICAgIGJvb2wgb2sgPSBtX2luZGV4LT5iYWNraW5nU3RvcmUoKS0+Z2V0UHJpbWFy
eUtleVZpYUluZGV4KHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2lu
ZGV4LT5kYXRhYmFzZUlkKCksIG1faW5kZXgtPm1fb2JqZWN0U3RvcmVCYWNrZW5kLT5pZCgpLCBt
X2luZGV4LT5pZCgpLCAqYmFja2luZ1N0b3JlQ3Vyc29yLT5rZXkoKSwga2V5UmVzdWx0KTsKLSAg
ICBpZiAoIW9rKSB7Ci0gICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJy
b3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwg
ZXJyb3IgaW4gZ2V0UHJpbWFyeUtleVZpYUluZGV4LiIpKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICBpZiAoIWtleVJlc3VsdCkgewotICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNz
KHN0YXRpY19jYXN0PElEQktleSo+KDApKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBt
X2NhbGxiYWNrcy0+b25TdWNjZXNzKGtleVJlc3VsdC5nZXQoKSk7Ci19Ci0KLXZvaWQgSURCSW5k
ZXhCYWNrZW5kSW1wbDo6Z2V0KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRpb25Db2RlJikKLXsKLSAgICBJREJfVFJB
Q0UoIklEQkluZGV4QmFja2VuZEltcGw6OmdldCIpOwotICAgIFJlZlB0cjxJREJDYWxsYmFja3M+
IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpmcm9tKHRy
YW5zYWN0aW9uUHRyKTsKLSAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soSW5kZXhS
ZWZlcmVuY2VkVmFsdWVSZXRyaWV2YWxPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBrZXlSYW5nZSwg
Y2FsbGJhY2tzKSkpCi0gICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9y
OjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkFib3J0RXJyb3IpKTsKLX0KLQotdm9pZCBJ
REJJbmRleEJhY2tlbmRJbXBsOjpnZXRLZXkoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFu
Z2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIEV4Y2VwdGlvbkNvZGUmKQotewotICAg
IElEQl9UUkFDRSgiSURCSW5kZXhCYWNrZW5kSW1wbDo6Z2V0S2V5Iik7Ci0gICAgUmVmUHRyPElE
QkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOwotICAgIFJlZlB0cjxJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGw6OmZyb20odHJhbnNhY3Rpb25QdHIpOwotICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxl
VGFzayhJbmRleFZhbHVlUmV0cmlldmFsT3BlcmF0aW9uOjpjcmVhdGUodGhpcywga2V5UmFuZ2Us
IGNhbGxiYWNrcykpKQotICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJv
cjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpBYm9ydEVycm9yKSk7Ci19Ci0KIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNr
ZW5kSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNr
ZW5kSW1wbC5oCmluZGV4IDBjZDdmZTFhZDg4NDAxYTZiMjQ5YjJmYjhkYTNiNzVmYThmM2VjYmQu
LjFhOTM5OTllMTYzM2Q0ZjdmYTcxZTliNjg3NGRlMTgxMDFjMjBlOWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmgK
QEAgLTQyLDkgKzQyLDkgQEAgY2xhc3MgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDsKIAogY2xh
c3MgSURCSW5kZXhCYWNrZW5kSW1wbCA6IHB1YmxpYyBJREJJbmRleEJhY2tlbmRJbnRlcmZhY2Ug
ewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGNy
ZWF0ZShjb25zdCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKiBkYXRhYmFzZSwgSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbCogb2JqZWN0U3RvcmVCYWNrZW5kLCBjb25zdCBJREJJbmRleE1ldGFkYXRh
JiBtZXRhZGF0YSkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBj
cmVhdGUoY29uc3QgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCogZGF0YWJhc2UsIGNvbnN0IElEQklu
ZGV4TWV0YWRhdGEmIG1ldGFkYXRhKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBJREJJbmRleEJhY2tlbmRJbXBsKGRhdGFiYXNlLCBvYmplY3RTdG9yZUJhY2tlbmQsIG1ldGFk
YXRhKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCSW5kZXhCYWNrZW5kSW1wbChk
YXRhYmFzZSwgbWV0YWRhdGEpKTsKICAgICB9CiAgICAgdmlydHVhbCB+SURCSW5kZXhCYWNrZW5k
SW1wbCgpOwogCkBAIC01NSwxMSArNTUsMTEgQEAgcHVibGljOgogICAgIH0KIAogICAgIC8vIElE
QkluZGV4QmFja2VuZEludGVyZmFjZQotICAgIHZpcnR1YWwgdm9pZCBvcGVuQ3Vyc29yKFBhc3NS
ZWZQdHI8SURCS2V5UmFuZ2U+LCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9u
Q29kZSYpOwotICAgIHZpcnR1YWwgdm9pZCBjb3VudChQYXNzUmVmUHRyPElEQktleVJhbmdlPiwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2Uq
LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdmlydHVhbCB2b2lkIG9wZW5LZXlDdXJzb3IoUGFzc1Jl
ZlB0cjxJREJLZXlSYW5nZT4sIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25D
b2RlJik7Ci0gICAgdmlydHVhbCB2b2lkIGdldChQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBF
eGNlcHRpb25Db2RlJik7Ci0gICAgdmlydHVhbCB2b2lkIGdldEtleShQYXNzUmVmUHRyPElEQktl
eVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJik7CisgICAgdmlydHVhbCB2b2lkIG9wZW5DdXJzb3Io
UGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNl
cHRpb25Db2RlJikgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBj
b3VudChQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgeyBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBvcGVuS2V5Q3Vyc29yKFBhc3NSZWZQ
dHI8SURCS2V5UmFuZ2U+LCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29k
ZSYpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZ2V0KFBhc3NS
ZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSB7IEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOyB9CisgICAgdmlydHVhbCB2b2lkIGdldEtleShQYXNzUmVmUHRyPElEQktleVJhbmdlPiwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2Uq
LCBFeGNlcHRpb25Db2RlJikgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogCiAgICAgSURCSW5k
ZXhNZXRhZGF0YSBtZXRhZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0YWRhdGE7IH0KICAgICBj
b25zdCBTdHJpbmcmIG5hbWUoKSB7IHJldHVybiBtX21ldGFkYXRhLm5hbWU7IH0KQEAgLTY4LDEy
ICs2OCw3IEBAIHB1YmxpYzoKICAgICBjb25zdCBib29sJiBtdWx0aUVudHJ5KCkgeyByZXR1cm4g
bV9tZXRhZGF0YS5tdWx0aUVudHJ5OyB9CiAKIHByaXZhdGU6Ci0gICAgSURCSW5kZXhCYWNrZW5k
SW1wbChjb25zdCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKiwgSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbCosIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmKTsKLQotICAgIGNsYXNzIE9wZW5JbmRleEN1
cnNvck9wZXJhdGlvbjsKLSAgICBjbGFzcyBJbmRleENvdW50T3BlcmF0aW9uOwotICAgIGNsYXNz
IEluZGV4UmVmZXJlbmNlZFZhbHVlUmV0cmlldmFsT3BlcmF0aW9uOwotICAgIGNsYXNzIEluZGV4
VmFsdWVSZXRyaWV2YWxPcGVyYXRpb247CisgICAgSURCSW5kZXhCYWNrZW5kSW1wbChjb25zdCBJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsKiwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYpOwogCiAgICAg
c3RhdGljIGNvbnN0IGludDY0X3QgSW52YWxpZElkID0gMDsKIApAQCAtODIsOCArNzcsNiBAQCBw
cml2YXRlOgogCiAgICAgY29uc3QgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCogbV9kYXRhYmFzZTsK
IAotICAgIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwqIG1fb2JqZWN0U3RvcmVCYWNrZW5kOwot
CiAgICAgSURCSW5kZXhNZXRhZGF0YSBtX21ldGFkYXRhOwogfTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCmluZGV4IGYxZDE3
NmM0ZTM4ODdhZWNjYmY1ZGUwM2IxMDRkZWQwMTczYWVmMGEuLmQwNjg5NzM3N2M1NGViZWY2ZTAz
ZDA1ZTNiNmU5MmMzNzE1OGJhNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKQEAgLTg3LDE0ICs4NywxMiBAQCBQYXNzUmVm
UHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpnZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCwgUGFzcwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgUmVmUHRyPElE
QlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55Ojpj
cmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwotICAgIG1fYmFja2VuZC0+Z2V0KGtl
eVJhbmdlLCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKLSAgICBBU1NF
UlQoIWVjKTsKKyAgICBiYWNrZW5kREIoKS0+Z2V0KG1fdHJhbnNhY3Rpb24tPmlkKCksIGlkKCks
IElEQkluZGV4TWV0YWRhdGE6OkludmFsaWRJZCwga2V5UmFuZ2UsIGZhbHNlLCByZXF1ZXN0KTsK
ICAgICByZXR1cm4gcmVxdWVzdC5yZWxlYXNlKCk7CiB9CiAKIFBhc3NSZWZQdHI8SURCUmVxdWVz
dD4gSURCT2JqZWN0U3RvcmU6OmdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQ
YXNzUmVmUHRyPElEQktleT4ga2V5LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBJREJfVFJB
Q0UoIklEQk9iamVjdFN0b3JlOjpnZXQiKTsKICAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJh
bmdlID0gSURCS2V5UmFuZ2U6Om9ubHkoa2V5LCBlYyk7CiAgICAgaWYgKGVjKQogICAgICAgICBy
ZXR1cm4gMDsKQEAgLTIxNCw4ICsyMTIsOCBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9i
amVjdFN0b3JlOjpwdXQoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpQdXRNbwogICAg
IH0KIAogICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRl
KGNvbnRleHQsIHNvdXJjZSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7Ci0gICAgbV9iYWNrZW5kLT5w
dXQoc2VyaWFsaXplZFZhbHVlLnJlbGVhc2UoKSwga2V5LnJlbGVhc2UoKSwgcHV0TW9kZSwgcmVx
dWVzdCwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBpbmRleElkcywgaW5kZXhLZXlzKTsKLSAg
ICBBU1NFUlQoIWVjKTsKKyAgICBWZWN0b3I8dWludDhfdD4gdmFsdWVCeXRlcyA9IHNlcmlhbGl6
ZWRWYWx1ZS0+dG9XaXJlQnl0ZXMoKTsKKyAgICBiYWNrZW5kREIoKS0+cHV0KG1fdHJhbnNhY3Rp
b24tPmlkKCksIGlkKCksICZ2YWx1ZUJ5dGVzLCBrZXkucmVsZWFzZSgpLCBzdGF0aWNfY2FzdDxJ
REJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlB1dE1vZGU+KHB1dE1vZGUpLCByZXF1ZXN0LCBp
bmRleElkcywgaW5kZXhLZXlzKTsKICAgICByZXR1cm4gcmVxdWVzdC5yZWxlYXNlKCk7CiB9CiAK
QEAgLTI0MCwxNCArMjM4LDEyIEBAIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3Rv
cmU6OmRlbGV0ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvCiAgICAgfQogCiAg
ICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4
dCwgSURCQW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwotICAgIG1fYmFj
a2VuZC0+ZGVsZXRlRnVuY3Rpb24oa2V5UmFuZ2UsIHJlcXVlc3QsIG1fdHJhbnNhY3Rpb24tPmJh
Y2tlbmQoKSwgZWMpOwotICAgIEFTU0VSVCghZWMpOworICAgIGJhY2tlbmREQigpLT5kZWxldGVS
YW5nZShtX3RyYW5zYWN0aW9uLT5pZCgpLCBpZCgpLCBrZXlSYW5nZSwgcmVxdWVzdCk7CiAgICAg
cmV0dXJuIHJlcXVlc3QucmVsZWFzZSgpOwogfQogCiBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElE
Qk9iamVjdFN0b3JlOjpkZWxldGVGdW5jdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0LCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBJ
REJfVFJBQ0UoIklEQk9iamVjdFN0b3JlOjpkZWxldGUiKTsKICAgICBSZWZQdHI8SURCS2V5UmFu
Z2U+IGtleVJhbmdlID0gSURCS2V5UmFuZ2U6Om9ubHkoa2V5LCBlYyk7CiAgICAgaWYgKGVjKQog
ICAgICAgICByZXR1cm4gMDsKQEAgLTI3MSw4ICsyNjcsNyBAQCBQYXNzUmVmUHRyPElEQlJlcXVl
c3Q+IElEQk9iamVjdFN0b3JlOjpjbGVhcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
LCBFeAogICAgIH0KIAogICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVz
dDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdl
dCgpKTsKLSAgICBtX2JhY2tlbmQtPmNsZWFyKHJlcXVlc3QsIG1fdHJhbnNhY3Rpb24tPmJhY2tl
bmQoKSwgZWMpOwotICAgIEFTU0VSVCghZWMpOworICAgIGJhY2tlbmREQigpLT5jbGVhcihtX3Ry
YW5zYWN0aW9uLT5pZCgpLCBpZCgpLCByZXF1ZXN0KTsKICAgICByZXR1cm4gcmVxdWVzdC5yZWxl
YXNlKCk7CiB9CiAKQEAgLTI4NCw5ICsyNzksOSBAQCBuYW1lc3BhY2UgewogLy8gY3Vyc29yIHN1
Y2Nlc3MgaGFuZGxlcnMgYXJlIGtlcHQgYWxpdmUuCiBjbGFzcyBJbmRleFBvcHVsYXRvciA6IHB1
YmxpYyBFdmVudExpc3RlbmVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbmRl
eFBvcHVsYXRvcj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJm
YWNlPiBiYWNrZW5kLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4g
dHJhbnNhY3Rpb24sIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCwgY29uc3QgSURCSW5k
ZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbmRleFBv
cHVsYXRvcj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlPiBi
YWNrZW5kLCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29u
c3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSkKICAgICB7Ci0gICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgSW5kZXhQb3B1bGF0b3IoYmFja2VuZCwgdHJhbnNhY3Rpb24sIGluZGV4
TWV0YWRhdGEpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbmRleFBvcHVsYXRvcihi
YWNrZW5kLCB0cmFuc2FjdGlvbklkLCBvYmplY3RTdG9yZUlkLCBpbmRleE1ldGFkYXRhKSk7CiAg
ICAgfQogCiAgICAgdmlydHVhbCBib29sIG9wZXJhdG9yPT0oY29uc3QgRXZlbnRMaXN0ZW5lciYg
b3RoZXIpCkBAIC0yOTUsMTIgKzI5MCwxMSBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgot
ICAgIEluZGV4UG9wdWxhdG9yKFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJm
YWNlPiBiYWNrZW5kLAotICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbiwKLSAgICAgICAgICAgICAgICAgICBjb25z
dCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhKQorICAgIEluZGV4UG9wdWxhdG9yKFBh
c3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlPiBiYWNrZW5kLCBpbnQ2NF90IHRy
YW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0
YSYgaW5kZXhNZXRhZGF0YSkKICAgICAgICAgOiBFdmVudExpc3RlbmVyKENQUEV2ZW50TGlzdGVu
ZXJUeXBlKQotICAgICAgICAsIG1fb2JqZWN0U3RvcmVCYWNrZW5kKGJhY2tlbmQpCi0gICAgICAg
ICwgbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKKyAgICAgICAgLCBtX2RhdGFiYXNlQmFja2Vu
ZChiYWNrZW5kKQorICAgICAgICAsIG1fdHJhbnNhY3Rpb25JZCh0cmFuc2FjdGlvbklkKQorICAg
ICAgICAsIG1fb2JqZWN0U3RvcmVJZChvYmplY3RTdG9yZUlkKQogICAgICAgICAsIG1faW5kZXhN
ZXRhZGF0YShpbmRleE1ldGFkYXRhKQogICAgIHsKICAgICB9CkBAIC0zMzMsMjEgKzMyNywyMCBA
QCBwcml2YXRlOgogICAgICAgICAgICAgVmVjdG9yPElEQk9iamVjdFN0b3JlOjpJbmRleEtleXMs
IDE+IGluZGV4S2V5c0xpc3Q7CiAgICAgICAgICAgICBpbmRleEtleXNMaXN0LmFwcGVuZChpbmRl
eEtleXMpOwogCi0gICAgICAgICAgICBtX29iamVjdFN0b3JlQmFja2VuZC0+c2V0SW5kZXhLZXlz
KHByaW1hcnlLZXksIGluZGV4SWRzLCBpbmRleEtleXNMaXN0LCBtX3RyYW5zYWN0aW9uLmdldCgp
KTsKLQorICAgICAgICAgICAgbV9kYXRhYmFzZUJhY2tlbmQtPnNldEluZGV4S2V5cyhtX3RyYW5z
YWN0aW9uSWQsIG1fb2JqZWN0U3RvcmVJZCwgcHJpbWFyeUtleSwgaW5kZXhJZHMsIGluZGV4S2V5
c0xpc3QpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gTm93IHRoYXQgd2UgYXJl
IGRvbmUgaW5kZXhpbmcsIHRlbGwgdGhlIGJhY2tlbmQgdG8gZ28KICAgICAgICAgICAgIC8vIGJh
Y2sgdG8gcHJvY2Vzc2luZyB0YXNrcyBvZiB0eXBlIE5vcm1hbFRhc2suCi0gICAgICAgICAgICBt
X29iamVjdFN0b3JlQmFja2VuZC0+c2V0SW5kZXhlc1JlYWR5KGluZGV4SWRzLCBtX3RyYW5zYWN0
aW9uLmdldCgpKTsKLSAgICAgICAgICAgIG1fb2JqZWN0U3RvcmVCYWNrZW5kLmNsZWFyKCk7Ci0g
ICAgICAgICAgICBtX3RyYW5zYWN0aW9uLmNsZWFyKCk7CisgICAgICAgICAgICBtX2RhdGFiYXNl
QmFja2VuZC0+c2V0SW5kZXhlc1JlYWR5KG1fdHJhbnNhY3Rpb25JZCwgbV9vYmplY3RTdG9yZUlk
LCBpbmRleElkcyk7CisgICAgICAgICAgICBtX2RhdGFiYXNlQmFja2VuZC5jbGVhcigpOwogICAg
ICAgICB9CiAKICAgICB9CiAKLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJm
YWNlPiBtX29iamVjdFN0b3JlQmFja2VuZDsKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlPiBtX3RyYW5zYWN0aW9uOwotICAgIElEQkluZGV4TWV0YWRhdGEgbV9pbmRl
eE1ldGFkYXRhOworICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U+IG1fZGF0
YWJhc2VCYWNrZW5kOworICAgIGNvbnN0IGludDY0X3QgbV90cmFuc2FjdGlvbklkOworICAgIGNv
bnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlkOworICAgIGNvbnN0IElEQkluZGV4TWV0YWRhdGEg
bV9pbmRleE1ldGFkYXRhOwogfTsKIH0KIApAQCAtMzkyLDE1ICszODUsMTQgQEAgUGFzc1JlZlB0
cjxJREJJbmRleD4gSURCT2JqZWN0U3RvcmU6OmNyZWF0ZUluZGV4KFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQKICAgICB9CiAKICAgICBpbnQ2NF90IGluZGV4SWQgPSBtX21ldGFkYXRh
Lm1heEluZGV4SWQgKyAxOwotICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGlu
ZGV4QmFja2VuZCA9IG1fYmFja2VuZC0+Y3JlYXRlSW5kZXgoaW5kZXhJZCwgbmFtZSwga2V5UGF0
aCwgdW5pcXVlLCBtdWx0aUVudHJ5LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKLSAg
ICBBU1NFUlQoIWluZGV4QmFja2VuZCAhPSAhZWMpOyAvLyBJZiB3ZSBkaWRuJ3QgZ2V0IGFuIGlu
ZGV4LCB3ZSBzaG91bGQgaGF2ZSBnb3R0ZW4gYW4gZXhjZXB0aW9uIGNvZGUuIEFuZCB2aWNlIHZl
cnNhLgorICAgIG1fYmFja2VuZC0+Y3JlYXRlSW5kZXgoaW5kZXhJZCwgbmFtZSwga2V5UGF0aCwg
dW5pcXVlLCBtdWx0aUVudHJ5LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKICAgICBp
ZiAoZWMpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgKyttX21ldGFkYXRhLm1heEluZGV4SWQ7
CiAKICAgICBJREJJbmRleE1ldGFkYXRhIG1ldGFkYXRhKG5hbWUsIGluZGV4SWQsIGtleVBhdGgs
IHVuaXF1ZSwgbXVsdGlFbnRyeSk7Ci0gICAgUmVmUHRyPElEQkluZGV4PiBpbmRleCA9IElEQklu
ZGV4OjpjcmVhdGUobWV0YWRhdGEsIGluZGV4QmFja2VuZC5yZWxlYXNlKCksIHRoaXMsIG1fdHJh
bnNhY3Rpb24uZ2V0KCkpOworICAgIFJlZlB0cjxJREJJbmRleD4gaW5kZXggPSBJREJJbmRleDo6
Y3JlYXRlKG1ldGFkYXRhLCB0aGlzLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKICAgICBtX2luZGV4
TWFwLnNldChuYW1lLCBpbmRleCk7CiAgICAgbV9tZXRhZGF0YS5pbmRleGVzLnNldChpbmRleElk
LCBtZXRhZGF0YSk7CiAKQEAgLTQxNSw3ICs0MDcsNyBAQCBQYXNzUmVmUHRyPElEQkluZGV4PiBJ
REJPYmplY3RTdG9yZTo6Y3JlYXRlSW5kZXgoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dAogICAgIGluZGV4UmVxdWVzdC0+cHJldmVudFByb3BhZ2F0aW9uKCk7CiAKICAgICAvLyBUaGlz
IGlzIGtlcHQgYWxpdmUgYnkgYmVpbmcgdGhlIHN1Y2Nlc3MgaGFuZGxlciBvZiB0aGUgcmVxdWVz
dCwgd2hpY2ggaXMgaW4gdHVybiBrZXB0IGFsaXZlIGJ5IHRoZSBvd25pbmcgdHJhbnNhY3Rpb24u
Ci0gICAgUmVmUHRyPEluZGV4UG9wdWxhdG9yPiBpbmRleFBvcHVsYXRvciA9IEluZGV4UG9wdWxh
dG9yOjpjcmVhdGUobV9iYWNrZW5kLCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGluZGV4UmVx
dWVzdCwgbWV0YWRhdGEpOworICAgIFJlZlB0cjxJbmRleFBvcHVsYXRvcj4gaW5kZXhQb3B1bGF0
b3IgPSBJbmRleFBvcHVsYXRvcjo6Y3JlYXRlKGJhY2tlbmREQigpLCBtX3RyYW5zYWN0aW9uLT5p
ZCgpLCBpZCgpLCBtZXRhZGF0YSk7CiAgICAgaW5kZXhSZXF1ZXN0LT5zZXRPbnN1Y2Nlc3MoaW5k
ZXhQb3B1bGF0b3IpOwogCiAgICAgcmV0dXJuIGluZGV4LnJlbGVhc2UoKTsKQEAgLTQ0Myw5ICs0
MzUsNiBAQCBQYXNzUmVmUHRyPElEQkluZGV4PiBJREJPYmplY3RTdG9yZTo6aW5kZXgoY29uc3Qg
U3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYwogICAgICAgICByZXR1cm4gMDsKICAgICB9
CiAKLSAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBpbmRleEJhY2tlbmQgPSBt
X2JhY2tlbmQtPmluZGV4KGluZGV4SWQpOwotICAgIEFTU0VSVCghZWMgJiYgaW5kZXhCYWNrZW5k
KTsKLQogICAgIGNvbnN0IElEQkluZGV4TWV0YWRhdGEqIGluZGV4TWV0YWRhdGEoMCk7CiAgICAg
Zm9yIChJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJbmRleE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtX21ldGFkYXRhLmluZGV4ZXMuYmVnaW4oKTsgaXQgIT0gbV9tZXRhZGF0YS5pbmRleGVzLmVu
ZCgpOyArK2l0KSB7CiAgICAgICAgIGlmIChpdC0+dmFsdWUubmFtZSA9PSBuYW1lKSB7CkBAIC00
NTQsOCArNDQzLDkgQEAgUGFzc1JlZlB0cjxJREJJbmRleD4gSURCT2JqZWN0U3RvcmU6OmluZGV4
KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMKICAgICAgICAgfQogICAgIH0K
ICAgICBBU1NFUlQoaW5kZXhNZXRhZGF0YSk7CisgICAgQVNTRVJUKGluZGV4TWV0YWRhdGEtPmlk
ICE9IElEQkluZGV4TWV0YWRhdGE6OkludmFsaWRJZCk7CiAKLSAgICBSZWZQdHI8SURCSW5kZXg+
IGluZGV4ID0gSURCSW5kZXg6OmNyZWF0ZSgqaW5kZXhNZXRhZGF0YSwgaW5kZXhCYWNrZW5kLnJl
bGVhc2UoKSwgdGhpcywgbV90cmFuc2FjdGlvbi5nZXQoKSk7CisgICAgUmVmUHRyPElEQkluZGV4
PiBpbmRleCA9IElEQkluZGV4OjpjcmVhdGUoKmluZGV4TWV0YWRhdGEsIHRoaXMsIG1fdHJhbnNh
Y3Rpb24uZ2V0KCkpOwogICAgIG1faW5kZXhNYXAuc2V0KG5hbWUsIGluZGV4KTsKICAgICByZXR1
cm4gaW5kZXgucmVsZWFzZSgpOwogfQpAQCAtNTA0LDE0ICs0OTQsMTMgQEAgUGFzc1JlZlB0cjxJ
REJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6b3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXgKIAogICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVz
dDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdl
dCgpKTsKICAgICByZXF1ZXN0LT5zZXRDdXJzb3JEZXRhaWxzKElEQkN1cnNvckJhY2tlbmRJbnRl
cmZhY2U6OktleUFuZFZhbHVlLCBkaXJlY3Rpb24pOwotICAgIG1fYmFja2VuZC0+b3BlbkN1cnNv
cihyYW5nZSwgZGlyZWN0aW9uLCByZXF1ZXN0LCB0YXNrVHlwZSwgbV90cmFuc2FjdGlvbi0+YmFj
a2VuZCgpLCBlYyk7Ci0gICAgQVNTRVJUKCFlYyk7CisKKyAgICBiYWNrZW5kREIoKS0+b3BlbkN1
cnNvcihtX3RyYW5zYWN0aW9uLT5pZCgpLCBpZCgpLCBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlk
SWQsIHJhbmdlLCBkaXJlY3Rpb24sIGZhbHNlLCBzdGF0aWNfY2FzdDxJREJEYXRhYmFzZUJhY2tl
bmRJbnRlcmZhY2U6OlRhc2tUeXBlPih0YXNrVHlwZSksIHJlcXVlc3QpOwogICAgIHJldHVybiBy
ZXF1ZXN0LnJlbGVhc2UoKTsKIH0KIAogUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RT
dG9yZTo6b3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVm
UHRyPElEQktleT4ga2V5LCBjb25zdCBTdHJpbmcmIGRpcmVjdGlvbiwgRXhjZXB0aW9uQ29kZSYg
ZWMpCiB7Ci0gICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZTo6b3BlbkN1cnNvciIpOwogICAg
IFJlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UgPSBJREJLZXlSYW5nZTo6b25seShrZXksIGVj
KTsKICAgICBpZiAoZWMpCiAgICAgICAgIHJldHVybiAwOwpAQCAtNTMwLDE0ICs1MTksMTIgQEAg
UGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6Y291bnQoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwgUGEKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIFJl
ZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElE
QkFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKLSAgICBtX2JhY2tlbmQt
PmNvdW50KHJhbmdlLCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKLSAg
ICBBU1NFUlQoIWVjKTsKKyAgICBiYWNrZW5kREIoKS0+Y291bnQobV90cmFuc2FjdGlvbi0+aWQo
KSwgaWQoKSwgSURCSW5kZXhNZXRhZGF0YTo6SW52YWxpZElkLCByYW5nZSwgcmVxdWVzdCk7CiAg
ICAgcmV0dXJuIHJlcXVlc3QucmVsZWFzZSgpOwogfQogCiBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+
IElEQk9iamVjdFN0b3JlOjpjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQ
YXNzUmVmUHRyPElEQktleT4ga2V5LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBJREJfVFJB
Q0UoIklEQk9iamVjdFN0b3JlOjpjb3VudCIpOwogICAgIFJlZlB0cjxJREJLZXlSYW5nZT4ga2V5
UmFuZ2UgPSBJREJLZXlSYW5nZTo6b25seShrZXksIGVjKTsKICAgICBpZiAoZWMpCiAgICAgICAg
IHJldHVybiAwOwpAQCAtNTYzLDYgKzU1MCwxMSBAQCBpbnQ2NF90IElEQk9iamVjdFN0b3JlOjpm
aW5kSW5kZXhJZChjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0CiAgICAgcmV0dXJuIElEQkluZGV4
TWV0YWRhdGE6OkludmFsaWRJZDsKIH0KIAorSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlKiBJ
REJPYmplY3RTdG9yZTo6YmFja2VuZERCKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90cmFuc2Fj
dGlvbi0+ZGIoKS0+YmFja2VuZCgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNl
bmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oCmluZGV4IGZjYjQzNzlhZWVkNzc2Mzhk
NzBjZjY5MjA4NzgzNTgwM2ZiNjlmZWQuLjdlMmY3MmZhZWE4NTE5M2MzMDkzZWQ2M2Q4NWFhMmE1
MDJmM2MwMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
Qk9iamVjdFN0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
T2JqZWN0U3RvcmUuaApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkRpY3Rpb25hcnkuaCIK
ICNpbmNsdWRlICJJREJDdXJzb3IuaCIKICNpbmNsdWRlICJJREJJbmRleC5oIgorI2luY2x1ZGUg
IklEQkluZGV4QmFja2VuZEludGVyZmFjZS5oIgogI2luY2x1ZGUgIklEQktleS5oIgogI2luY2x1
ZGUgIklEQktleVJhbmdlLmgiCiAjaW5jbHVkZSAiSURCTWV0YWRhdGEuaCIKQEAgLTU4LDYgKzU5
LDcgQEAgcHVibGljOgogICAgIH5JREJPYmplY3RTdG9yZSgpIHsgfQogCiAgICAgLy8gSW1wbGVt
ZW50IHRoZSBJREJPYmplY3RTdG9yZSBJREwKKyAgICBpbnQ2NF90IGlkKCkgY29uc3QgeyByZXR1
cm4gbV9tZXRhZGF0YS5pZDsgfQogICAgIGNvbnN0IFN0cmluZyBuYW1lKCkgY29uc3QgeyByZXR1
cm4gbV9tZXRhZGF0YS5uYW1lOyB9CiAgICAgUGFzc1JlZlB0cjxJREJBbnk+IGtleVBhdGhBbnko
KSBjb25zdCB7IHJldHVybiBJREJBbnk6OmNyZWF0ZShtX21ldGFkYXRhLmtleVBhdGgpOyB9CiAg
ICAgY29uc3QgSURCS2V5UGF0aCBrZXlQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9tZXRhZGF0YS5r
ZXlQYXRoOyB9CkBAIC0xMDQsNiArMTA2LDggQEAgcHVibGljOgogICAgIHR5cGVkZWYgVmVjdG9y
PFJlZlB0cjxJREJLZXk+ID4gSW5kZXhLZXlzOwogICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcs
IEluZGV4S2V5cz4gSW5kZXhLZXlNYXA7CiAKKyAgICBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZh
Y2UqIGJhY2tlbmREQigpIGNvbnN0OworCiBwcml2YXRlOgogICAgIElEQk9iamVjdFN0b3JlKGNv
bnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFj
a2VuZEludGVyZmFjZT4sIElEQlRyYW5zYWN0aW9uKik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bC5jcHAKaW5kZXggYTJlZGY0YWViYjYyYjQ4MjYzMTUxZTYyYzcwMjY5NzM2NDEyZTEzMC4uZTZj
ZTgzYzM1YjM4YzA0ZWNlYWZhNzhhOWFhZDU1ZmY4MGFmYjdiMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbC5jcHAKQEAgLTQ0LDExMCArNDQsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LWNsYXNzIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Ok9iamVjdFN0b3JlUmV0cmlldmFsT3Bl
cmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbiB7Ci1w
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6
T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBv
YmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IE9iamVjdFN0b3JlUmV0cmlldmFsT3BlcmF0aW9uKG9iamVjdFN0b3JlLCBrZXlSYW5nZSwg
Y2FsbGJhY2tzKSk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGwqKTsKLXByaXZhdGU6Ci0gICAgT2JqZWN0U3RvcmVSZXRyaWV2YWxPcGVy
YXRpb24oUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwg
UGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBjYWxsYmFja3MpCi0gICAgICAgIDogbV9vYmplY3RTdG9yZShvYmplY3RTdG9yZSkKLSAgICAg
ICAgLCBtX2tleVJhbmdlKGtleVJhbmdlKQotICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNr
cykKLSAgICB7Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+
IG1fb2JqZWN0U3RvcmU7Ci0gICAgUmVmUHRyPElEQktleVJhbmdlPiBtX2tleVJhbmdlOwotICAg
IFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOwotfTsKLQotY2xhc3MgSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6T2JqZWN0U3RvcmVTdG9yYWdlT3BlcmF0aW9uIDogcHVibGljIElE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uPiBjcmVhdGUo
UGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1Jl
ZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5
LCBQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBh
c3NPd25QdHI8VmVjdG9yPGludDY0X3Q+ID4gcG9wSW5kZXhJZHMsIFBhc3NPd25QdHI8VmVjdG9y
PEluZGV4S2V5cz4gPiBwb3BJbmRleEtleXMpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQ
dHIobmV3IE9iamVjdFN0b3JlU3RvcmFnZU9wZXJhdGlvbihvYmplY3RTdG9yZSwgdmFsdWUsIGtl
eSwgcHV0TW9kZSwgY2FsbGJhY2tzLCBwb3BJbmRleElkcywgcG9wSW5kZXhLZXlzKSk7Ci0gICAg
fQotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqKTsK
LXByaXZhdGU6Ci0gICAgT2JqZWN0U3RvcmVTdG9yYWdlT3BlcmF0aW9uKFBhc3NSZWZQdHI8SURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUHV0TW9kZSBwdXRN
b2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzT3duUHRyPFZlY3Rv
cjxpbnQ2NF90PiA+IHBvcEluZGV4SWRzLCBQYXNzT3duUHRyPFZlY3RvcjxJbmRleEtleXM+ID4g
cG9wSW5kZXhLZXlzKQotICAgICAgICA6IG1fb2JqZWN0U3RvcmUob2JqZWN0U3RvcmUpCi0gICAg
ICAgICwgbV92YWx1ZSh2YWx1ZSkKLSAgICAgICAgLCBtX2tleShrZXkpCi0gICAgICAgICwgbV9w
dXRNb2RlKHB1dE1vZGUpCi0gICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQotICAgICAg
ICAsIG1fcG9wSW5kZXhJZHMocG9wSW5kZXhJZHMpCi0gICAgICAgICwgbV9wb3BJbmRleEtleXMo
cG9wSW5kZXhLZXlzKQotICAgIHsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbD4gbV9vYmplY3RTdG9yZTsKLSAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiBtX3ZhbHVlOwotICAgIFJlZlB0cjxJREJLZXk+IG1fa2V5OwotICAgIFB1dE1vZGUgbV9w
dXRNb2RlOwotICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOwotICAgIE93blB0
cjxWZWN0b3I8aW50NjRfdD4gPiBtX3BvcEluZGV4SWRzOwotICAgIE93blB0cjxWZWN0b3I8SW5k
ZXhLZXlzPiA+IG1fcG9wSW5kZXhLZXlzOwotfTsKLQotY2xhc3MgSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6T2JqZWN0U3RvcmVJbmRleGVzUmVhZHlPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFz
c093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNz
UmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzT3duUHRy
PFZlY3RvcjxpbnQ2NF90PiA+IHBvcEluZGV4SWRzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UHRyKG5ldyBPYmplY3RTdG9yZUluZGV4ZXNSZWFkeU9wZXJhdGlvbihvYmplY3RTdG9yZSwg
cG9wSW5kZXhJZHMpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbCopOwotcHJpdmF0ZToKLSAgICBPYmplY3RTdG9yZUluZGV4ZXNSZWFk
eU9wZXJhdGlvbihQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0
b3JlLCBQYXNzT3duUHRyPFZlY3RvcjxpbnQ2NF90PiA+IHBvcEluZGV4SWRzKQotICAgICAgICA6
IG1fb2JqZWN0U3RvcmUob2JqZWN0U3RvcmUpCi0gICAgICAgICwgbV9wb3BJbmRleElkcyhwb3BJ
bmRleElkcykKLSAgICB7Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw+IG1fb2JqZWN0U3RvcmU7Ci0gICAgT3duUHRyPFZlY3RvcjxpbnQ2NF90PiA+IG1fcG9w
SW5kZXhJZHM7Ci19OwotCi1jbGFzcyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpPYmplY3RT
dG9yZURlbGV0aW9uT3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6
Ok9wZXJhdGlvbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFu
Z2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi0gICAgewotICAgICAgICBy
ZXR1cm4gYWRvcHRQdHIobmV3IE9iamVjdFN0b3JlRGVsZXRpb25PcGVyYXRpb24ob2JqZWN0U3Rv
cmUsIGtleVJhbmdlLCBjYWxsYmFja3MpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIHBlcmZv
cm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOwotcHJpdmF0ZToKLSAgICBPYmplY3RTdG9y
ZURlbGV0aW9uT3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4g
b2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQotICAgICAgICA6IG1fb2JqZWN0U3RvcmUob2JqZWN0
U3RvcmUpCi0gICAgICAgICwgbV9rZXlSYW5nZShrZXlSYW5nZSkKLSAgICAgICAgLCBtX2NhbGxi
YWNrcyhjYWxsYmFja3MpCi0gICAgewotICAgIH0KLQotICAgIFJlZlB0cjxJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsPiBtX29iamVjdFN0b3JlOwotICAgIFJlZlB0cjxJREJLZXlSYW5nZT4gbV9r
ZXlSYW5nZTsKLSAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKLX07Ci0KLWNs
YXNzIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Ok9iamVjdFN0b3JlQ2xlYXJPcGVyYXRpb24g
OiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKLXB1YmxpYzoK
LSAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRp
b24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0
b3JlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBPYmplY3RTdG9yZUNsZWFyT3BlcmF0aW9uKG9iamVjdFN0b3Jl
LCBjYWxsYmFja3MpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbCopOwotcHJpdmF0ZToKLSAgICBPYmplY3RTdG9yZUNsZWFyT3BlcmF0
aW9uKFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi0gICAgICAgIDogbV9vYmplY3RTdG9y
ZShvYmplY3RTdG9yZSkKLSAgICAgICAgLCBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCi0gICAgewot
ICAgIH0KLQotICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBtX29iamVjdFN0
b3JlOwotICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOwotfTsKLQogY2xhc3Mg
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Q3JlYXRlSW5kZXhPcGVyYXRpb24gOiBwdWJsaWMg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKIHB1YmxpYzoKICAgICBzdGF0
aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0
ZShQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNz
UmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4KQpAQCAtMTg0LDUwICs4MCw2IEBAIHBy
aXZhdGU6CiAgICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IG1faW5kZXg7CiB9OwogCi1j
bGFzcyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpPcGVuT2JqZWN0U3RvcmVDdXJzb3JPcGVy
YXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKLXB1
YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpP
cGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9i
amVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiByYW5nZSwgSURCQ3Vyc29yOjpEaXJl
Y3Rpb24gZGlyZWN0aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlIHRhc2tUeXBlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBPcGVuT2JqZWN0U3RvcmVDdXJzb3JPcGVyYXRpb24o
b2JqZWN0U3RvcmUsIHJhbmdlLCBkaXJlY3Rpb24sIGNhbGxiYWNrcywgdGFza1R5cGUpKTsKLSAg
ICB9Ci0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCop
OwotcHJpdmF0ZToKLSAgICBPcGVuT2JqZWN0U3RvcmVDdXJzb3JPcGVyYXRpb24oUGFzc1JlZlB0
cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJL
ZXlSYW5nZT4gcmFuZ2UsIElEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVjdGlvbiwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
OjpUYXNrVHlwZSB0YXNrVHlwZSkKLSAgICAgICAgOiBtX29iamVjdFN0b3JlKG9iamVjdFN0b3Jl
KQotICAgICAgICAsIG1fcmFuZ2UocmFuZ2UpCi0gICAgICAgICwgbV9kaXJlY3Rpb24oZGlyZWN0
aW9uKQotICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKLSAgICAgICAgLCBtX3Rhc2tU
eXBlKHRhc2tUeXBlKQotICAgIHsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbD4gbV9vYmplY3RTdG9yZTsKLSAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IG1fcmFu
Z2U7Ci0gICAgSURCQ3Vyc29yOjpEaXJlY3Rpb24gbV9kaXJlY3Rpb247Ci0gICAgUmVmUHRyPElE
QkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7Ci0gICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlOjpUYXNrVHlwZSBtX3Rhc2tUeXBlOwotfTsKLQotY2xhc3MgSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6T2JqZWN0U3RvcmVDb3VudE9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsOjpPcGVyYXRpb24gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCS2V5
UmFuZ2U+IHJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBPYmplY3RTdG9yZUNvdW50T3BlcmF0aW9uKG9i
amVjdFN0b3JlLCByYW5nZSwgY2FsbGJhY2tzKSk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBw
ZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqKTsKLXByaXZhdGU6Ci0gICAgT2JqZWN0
U3RvcmVDb3VudE9wZXJhdGlvbihQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+
IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiByYW5nZSwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+IGNhbGxiYWNrcykKLSAgICAgICAgOiBtX29iamVjdFN0b3JlKG9iamVjdFN0
b3JlKQotICAgICAgICAsIG1fcmFuZ2UocmFuZ2UpCi0gICAgICAgICwgbV9jYWxsYmFja3MoY2Fs
bGJhY2tzKQotICAgIHsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbD4gbV9vYmplY3RTdG9yZTsKLSAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IG1fcmFuZ2U7Ci0g
ICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7Ci19OwotCiBjbGFzcyBJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsOjpDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9uIDogcHVibGljIElE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbiB7CiBwdWJsaWM6CiAgICAgc3RhdGlj
IFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uPiBjcmVhdGUo
UGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1Jl
ZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCkKQEAgLTI4NCw2NSArMTM2LDYgQEAgSURC
T2JqZWN0U3RvcmVNZXRhZGF0YSBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjptZXRhZGF0YSgp
IGNvbnN0CiAgICAgcmV0dXJuIG1ldGFkYXRhOwogfQogCi12b2lkIElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OmdldChQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlKiB0cmFuc2FjdGlvblB0ciwgRXhjZXB0aW9uQ29kZSYpCi17Ci0gICAgSURCX1RSQUNFKCJJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpnZXQiKTsKLSAgICBSZWZQdHI8SURCQ2FsbGJhY2tz
PiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw+IHRyYW5zYWN0aW9uID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6ZnJvbSh0
cmFuc2FjdGlvblB0cik7Ci0gICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKE9iamVj
dFN0b3JlUmV0cmlldmFsT3BlcmF0aW9uOjpjcmVhdGUodGhpcywga2V5UmFuZ2UsIGNhbGxiYWNr
cykpKQotICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRl
KElEQkRhdGFiYXNlRXhjZXB0aW9uOjpBYm9ydEVycm9yKSk7Ci19Ci0KLXZvaWQgSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6T2JqZWN0U3RvcmVSZXRyaWV2YWxPcGVyYXRpb246OnBlcmZvcm0o
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24pCi17Ci0gICAgSURCX1RSQUNF
KCJPYmplY3RTdG9yZVJldHJpZXZhbE9wZXJhdGlvbiIpOwotICAgIFJlZlB0cjxJREJLZXk+IGtl
eTsKLSAgICBpZiAobV9rZXlSYW5nZS0+aXNPbmx5S2V5KCkpCi0gICAgICAgIGtleSA9IG1fa2V5
UmFuZ2UtPmxvd2VyKCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIFJlZlB0cjxJREJCYWNraW5nU3Rv
cmU6OkN1cnNvcj4gYmFja2luZ1N0b3JlQ3Vyc29yID0gbV9vYmplY3RTdG9yZS0+YmFja2luZ1N0
b3JlKCktPm9wZW5PYmplY3RTdG9yZUN1cnNvcih0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJh
bnNhY3Rpb24oKSwgbV9vYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBtX29iamVjdFN0b3JlLT5p
ZCgpLCBtX2tleVJhbmdlLmdldCgpLCBJREJDdXJzb3I6Ok5FWFQpOwotICAgICAgICBpZiAoIWJh
Y2tpbmdTdG9yZUN1cnNvcikgewotICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2Vzcygp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGtleSA9IGJhY2tpbmdT
dG9yZUN1cnNvci0+a2V5KCk7Ci0gICAgfQotCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IHdpcmVEYXRh
OwotICAgIGJvb2wgb2sgPSBtX29iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+Z2V0UmVjb3Jk
KHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX29iamVjdFN0b3JlLT5k
YXRhYmFzZUlkKCksIG1fb2JqZWN0U3RvcmUtPmlkKCksICprZXksIHdpcmVEYXRhKTsKLSAgICBp
ZiAoIW9rKSB7Ci0gICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6
OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJy
b3IgaW4gZ2V0UmVjb3JkLiIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAod2ly
ZURhdGEuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChtX29iamVjdFN0b3JlLT5hdXRvSW5jcmVt
ZW50KCkgJiYgIW1fb2JqZWN0U3RvcmUtPmtleVBhdGgoKS5pc051bGwoKSkgewotICAgICAgICBt
X2NhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdp
cmVCeXRlcyh3aXJlRGF0YSksIGtleSwgbV9vYmplY3RTdG9yZS0+a2V5UGF0aCgpKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmVCeXRlcyh3aXJlRGF0YSkpOwotfQotCi12b2lkIElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4gdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFB1dE1vZGUgcHV0TW9kZSwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElk
cywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mIGluZGV4S2V5cykKLXsKLSAgICBJREJfVFJBQ0Uo
IklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dCIpOwotCi0gICAgUmVmUHRyPElEQkNhbGxi
YWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOwotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmZy
b20odHJhbnNhY3Rpb25QdHIpOwotICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpICE9IElE
QlRyYW5zYWN0aW9uOjpSRUFEX09OTFkpOwotCi0gICAgT3duUHRyPFZlY3RvcjxpbnQ2NF90PiA+
IG5ld0luZGV4SWRzID0gYWRvcHRQdHIobmV3IFZlY3RvcjxpbnQ2NF90PihpbmRleElkcykpOwot
ICAgIE93blB0cjxWZWN0b3I8SW5kZXhLZXlzPiA+IG5ld0luZGV4S2V5cyA9IGFkb3B0UHRyKG5l
dyBWZWN0b3I8SW5kZXhLZXlzPihpbmRleEtleXMpKTsKLQotICAgIEFTU0VSVChhdXRvSW5jcmVt
ZW50KCkgfHwga2V5LmdldCgpKTsKLQotICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFz
ayhPYmplY3RTdG9yZVN0b3JhZ2VPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCB2YWx1ZSwga2V5LCBw
dXRNb2RlLCBjYWxsYmFja3MsIG5ld0luZGV4SWRzLnJlbGVhc2UoKSwgbmV3SW5kZXhLZXlzLnJl
bGVhc2UoKSkpKQotICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6
Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpBYm9ydEVycm9yKSk7Ci19Ci0KIGJvb2wgSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6SW5kZXhXcml0ZXI6OnZlcmlmeUluZGV4S2V5cyhJREJC
YWNraW5nU3RvcmUmIGJhY2tpbmdTdG9yZSwgSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiog
dHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBp
bnQ2NF90IGluZGV4SWQsIGJvb2wmIGNhbkFkZEtleXMsIGNvbnN0IElEQktleSogcHJpbWFyeUtl
eSwgU3RyaW5nKiBlcnJvck1lc3NhZ2UpIGNvbnN0CiB7CiAgICAgY2FuQWRkS2V5cyA9IGZhbHNl
OwpAQCAtNDE5LDE5NCArMjEyLDExIEBAIGJvb2wgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6
bWFrZUluZGV4V3JpdGVycyhQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6c2V0SW5kZXhL
ZXlzKFBhc3NSZWZQdHI8SURCS2V5PiBwcnBQcmltYXJ5S2V5LCBjb25zdCBWZWN0b3I8aW50NjRf
dD4mIGluZGV4SWRzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYgaW5kZXhLZXlzLCBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyKQotewotICAgIElEQl9UUkFD
RSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6c2V0SW5kZXhLZXlzIik7Ci0gICAgUmVmUHRy
PElEQktleT4gcHJpbWFyeUtleSA9IHBycFByaW1hcnlLZXk7Ci0gICAgUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bDo6ZnJvbSh0cmFuc2FjdGlvblB0cik7Ci0gICAgaWYgKHRyYW5zYWN0aW9uLT5pc0ZpbmlzaGVk
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEZJWE1FOiBUaGlzIG1ldGhvZCBjb3VsZCBi
ZSBhc3luY2hyb25vdXMsIGJ1dCB3ZSBuZWVkIHRvIGV2YWx1YXRlIGlmIGl0J3Mgd29ydGggdGhl
IGV4dHJhIGNvbXBsZXhpdHkuCi0gICAgSURCQmFja2luZ1N0b3JlOjpSZWNvcmRJZGVudGlmaWVy
IHJlY29yZElkZW50aWZpZXI7Ci0gICAgYm9vbCBmb3VuZCA9IGZhbHNlOwotICAgIGJvb2wgb2sg
PSBiYWNraW5nU3RvcmUoKS0+a2V5RXhpc3RzSW5PYmplY3RTdG9yZSh0cmFuc2FjdGlvbi0+YmFj
a2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgZGF0YWJhc2VJZCgpLCBpZCgpLCAqcHJpbWFyeUtleSwg
JnJlY29yZElkZW50aWZpZXIsIGZvdW5kKTsKLSAgICBpZiAoIW9rKSB7Ci0gICAgICAgIExPR19F
UlJPUigia2V5RXhpc3RzSW5PYmplY3RTdG9yZSByZXBvcnRlZCBhbiBlcnJvciIpOwotICAgICAg
ICB0cmFuc2FjdGlvbi0+YWJvcnQoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvciBzZXR0aW5nIGluZGV4IGtl
eXMuIikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICghZm91bmQpIHsKLSAgICAg
ICAgUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9yID0gSURCRGF0YWJhc2VFcnJvcjo6Y3Jl
YXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIFN0cmluZzo6Zm9ybWF0KCJJ
bnRlcm5hbCBlcnJvciBzZXR0aW5nIGluZGV4IGtleXMgZm9yIG9iamVjdCBzdG9yZSAnJXMnLiIs
IG5hbWUoKS51dGY4KCkuZGF0YSgpKSk7Ci0gICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydChlcnJv
ci5yZWxlYXNlKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgVmVjdG9yPE93blB0
cjxJbmRleFdyaXRlcj4gPiBpbmRleFdyaXRlcnM7Ci0gICAgU3RyaW5nIGVycm9yTWVzc2FnZTsK
LSAgICBib29sIG9iZXlzQ29uc3RyYWludHMgPSBmYWxzZTsKLSAgICBSZWZQdHI8SURCQmFja2lu
Z1N0b3JlPiBzdG9yZSA9IGJhY2tpbmdTdG9yZSgpOwotICAgIGJvb2wgYmFja2luZ1N0b3JlU3Vj
Y2VzcyA9IG1ha2VJbmRleFdyaXRlcnModHJhbnNhY3Rpb24sIHN0b3JlLmdldCgpLCBkYXRhYmFz
ZUlkKCksIG1ldGFkYXRhKCksIHByaW1hcnlLZXksIGZhbHNlLCBpbmRleElkcywgaW5kZXhLZXlz
LCAmaW5kZXhXcml0ZXJzLCAmZXJyb3JNZXNzYWdlLCBvYmV5c0NvbnN0cmFpbnRzKTsKLSAgICBp
ZiAoIWJhY2tpbmdTdG9yZVN1Y2Nlc3MpIHsKLSAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KElE
QkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9y
LCAiSW50ZXJuYWwgZXJyb3I6IGJhY2tpbmcgc3RvcmUgZXJyb3IgdXBkYXRpbmcgaW5kZXgga2V5
cy4iKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFvYmV5c0NvbnN0cmFpbnRz
KSB7Ci0gICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydChJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUo
SURCRGF0YWJhc2VFeGNlcHRpb246OkNvbnN0cmFpbnRFcnJvciwgZXJyb3JNZXNzYWdlKSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGluZGV4
V3JpdGVycy5zaXplKCk7ICsraSkgewotICAgICAgICBJbmRleFdyaXRlciogaW5kZXhXcml0ZXIg
PSBpbmRleFdyaXRlcnNbaV0uZ2V0KCk7Ci0gICAgICAgIGluZGV4V3JpdGVyLT53cml0ZUluZGV4
S2V5cyhyZWNvcmRJZGVudGlmaWVyLCAqYmFja2luZ1N0b3JlKCksIHRyYW5zYWN0aW9uLT5iYWNr
aW5nU3RvcmVUcmFuc2FjdGlvbigpLCBkYXRhYmFzZUlkKCksIG1fbWV0YWRhdGEuaWQpOwotICAg
IH0KLX0KLQotdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpzZXRJbmRleGVzUmVhZHko
Y29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlKiB0cmFuc2FjdGlvbkludGVyZmFjZSkKLXsKLSAgICBJREJfVFJBQ0UoIklEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OnNldEluZGV4ZXNSZWFkeSIpOwotCi0gICAgT3duUHRyPFZlY3Rv
cjxpbnQ2NF90PiA+IG5ld0luZGV4SWRzID0gYWRvcHRQdHIobmV3IFZlY3RvcjxpbnQ2NF90Pihp
bmRleElkcykpOwotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2Fj
dGlvbiA9IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmZyb20odHJhbnNhY3Rpb25JbnRlcmZh
Y2UpOwotICAgIGlmICh0cmFuc2FjdGlvbi0+aXNGaW5pc2hlZCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlOjpQcmVlbXB0aXZlVGFzaywgT2JqZWN0U3RvcmVJbmRleGVzUmVhZHlPcGVy
YXRpb246OmNyZWF0ZSh0aGlzLCBuZXdJbmRleElkcy5yZWxlYXNlKCkpKSkKLSAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6
T2JqZWN0U3RvcmVJbmRleGVzUmVhZHlPcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbCogdHJhbnNhY3Rpb24pCi17Ci0gICAgSURCX1RSQUNFKCJPYmplY3RTdG9yZUlu
ZGV4ZXNSZWFkeU9wZXJhdGlvbiIpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9wb3BJ
bmRleElkcy0+c2l6ZSgpOyArK2kpCi0gICAgICAgIHRyYW5zYWN0aW9uLT5kaWRDb21wbGV0ZVBy
ZWVtcHRpdmVFdmVudCgpOwotfQotCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Ok9i
amVjdFN0b3JlU3RvcmFnZU9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsKiB0cmFuc2FjdGlvbikKLXsKLSAgICBJREJfVFJBQ0UoIk9iamVjdFN0b3JlU3RvcmFnZU9w
ZXJhdGlvbiIpOwotICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpICE9IElEQlRyYW5zYWN0
aW9uOjpSRUFEX09OTFkpOwotICAgIEFTU0VSVChtX3BvcEluZGV4SWRzICYmIG1fcG9wSW5kZXhL
ZXlzICYmIG1fcG9wSW5kZXhJZHMtPnNpemUoKSA9PSBtX3BvcEluZGV4S2V5cy0+c2l6ZSgpKTsK
LSAgICBjb25zdCBib29sIGF1dG9JbmNyZW1lbnQgPSBtX29iamVjdFN0b3JlLT5hdXRvSW5jcmVt
ZW50KCk7Ci0gICAgYm9vbCBrZXlXYXNHZW5lcmF0ZWQgPSBmYWxzZTsKLQotICAgIGlmIChtX3B1
dE1vZGUgIT0gQ3Vyc29yVXBkYXRlICYmIGF1dG9JbmNyZW1lbnQgJiYgIW1fa2V5KSB7Ci0gICAg
ICAgIFJlZlB0cjxJREJLZXk+IGF1dG9JbmNLZXkgPSBtX29iamVjdFN0b3JlLT5nZW5lcmF0ZUtl
eSh0cmFuc2FjdGlvbik7Ci0gICAgICAgIGtleVdhc0dlbmVyYXRlZCA9IHRydWU7Ci0gICAgICAg
IGlmICghYXV0b0luY0tleS0+aXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICBtX2NhbGxiYWNrcy0+
b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkNv
bnN0cmFpbnRFcnJvciwgIk1heGltdW0ga2V5IGdlbmVyYXRvciB2YWx1ZSByZWFjaGVkLiIpKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBtX2tleSA9IGF1dG9JbmNL
ZXk7Ci0gICAgfQotCi0gICAgQVNTRVJUKG1fa2V5ICYmIG1fa2V5LT5pc1ZhbGlkKCkpOwotCi0g
ICAgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBvYmplY3RTdG9yZU1ldGFkYXRhID0gbV9vYmplY3RT
dG9yZS0+bWV0YWRhdGEoKTsKLSAgICBJREJCYWNraW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXIg
cmVjb3JkSWRlbnRpZmllcjsKLSAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3Rv
cmUgPSBtX29iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKTsKLSAgICBpZiAobV9wdXRNb2RlID09
IEFkZE9ubHkpIHsKLSAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwotICAgICAgICBib29sIG9r
ID0gYmFja2luZ1N0b3JlLT5rZXlFeGlzdHNJbk9iamVjdFN0b3JlKHRyYW5zYWN0aW9uLT5iYWNr
aW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX29iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG1fb2Jq
ZWN0U3RvcmUtPmlkKCksICptX2tleSwgJnJlY29yZElkZW50aWZpZXIsIGZvdW5kKTsKLSAgICAg
ICAgaWYgKCFvaykgewotICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJh
c2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRl
cm5hbCBlcnJvciBjaGVja2luZyBrZXkgZXhpc3RlbmNlLiIpKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgICAgICBpZiAoZm91bmQpIHsKLSAgICAgICAgICAgIG1fY2FsbGJh
Y2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6Q29uc3RyYWludEVycm9yLCAiS2V5IGFscmVhZHkgZXhpc3RzIGluIHRoZSBvYmplY3Qgc3Rv
cmUuIikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgVmVj
dG9yPE93blB0cjxJbmRleFdyaXRlcj4gPiBpbmRleFdyaXRlcnM7Ci0gICAgU3RyaW5nIGVycm9y
TWVzc2FnZTsKLSAgICBib29sIG9iZXlzQ29uc3RyYWludHMgPSBmYWxzZTsKLSAgICBib29sIGJh
Y2tpbmdTdG9yZVN1Y2Nlc3MgPSBtYWtlSW5kZXhXcml0ZXJzKHRyYW5zYWN0aW9uLCBiYWNraW5n
U3RvcmUuZ2V0KCksIG1fb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgb2JqZWN0U3RvcmVNZXRh
ZGF0YSwgbV9rZXksIGtleVdhc0dlbmVyYXRlZCwgKm1fcG9wSW5kZXhJZHMsICptX3BvcEluZGV4
S2V5cywgJmluZGV4V3JpdGVycywgJmVycm9yTWVzc2FnZSwgb2JleXNDb25zdHJhaW50cyk7Ci0g
ICAgaWYgKCFiYWNraW5nU3RvcmVTdWNjZXNzKSB7Ci0gICAgICAgIG1fY2FsbGJhY2tzLT5vbkVy
cm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93
bkVycm9yLCAiSW50ZXJuYWwgZXJyb3I6IGJhY2tpbmcgc3RvcmUgZXJyb3IgdXBkYXRpbmcgaW5k
ZXgga2V5cy4iKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFvYmV5c0NvbnN0
cmFpbnRzKSB7Ci0gICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6
OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Q29uc3RyYWludEVycm9yLCBlcnJvck1lc3Nh
Z2UpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEJlZm9yZSB0aGlzIHBvaW50
LCBkb24ndCBkbyBhbnkgbXV0YXRpb24uICBBZnRlciB0aGlzIHBvaW50LCByb2xsYmFjayB0aGUg
dHJhbnNhY3Rpb24gaW4gY2FzZSBvZiBlcnJvci4KLQotICAgIGJhY2tpbmdTdG9yZVN1Y2Nlc3Mg
PSBtX29iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+cHV0UmVjb3JkKHRyYW5zYWN0aW9uLT5i
YWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX29iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG1f
b2JqZWN0U3RvcmUtPmlkKCksICptX2tleSwgbV92YWx1ZS0+dG9XaXJlQnl0ZXMoKSwgJnJlY29y
ZElkZW50aWZpZXIpOwotICAgIGlmICghYmFja2luZ1N0b3JlU3VjY2VzcykgewotICAgICAgICBt
X2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VF
eGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yOiBiYWNraW5nIHN0b3JlIGVy
cm9yIHBlcmZvcm1pbmcgcHV0L2FkZC4iKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGluZGV4V3JpdGVycy5zaXplKCk7ICsraSkgewotICAg
ICAgICBJbmRleFdyaXRlciogaW5kZXhXcml0ZXIgPSBpbmRleFdyaXRlcnNbaV0uZ2V0KCk7Ci0g
ICAgICAgIGluZGV4V3JpdGVyLT53cml0ZUluZGV4S2V5cyhyZWNvcmRJZGVudGlmaWVyLCAqbV9v
YmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCksIHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFu
c2FjdGlvbigpLCBtX29iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG1fb2JqZWN0U3RvcmUtPm1f
bWV0YWRhdGEuaWQpOwotICAgIH0KLQotICAgIGlmIChhdXRvSW5jcmVtZW50ICYmIG1fcHV0TW9k
ZSAhPSBDdXJzb3JVcGRhdGUgJiYgbV9rZXktPnR5cGUoKSA9PSBJREJLZXk6Ok51bWJlclR5cGUp
IHsKLSAgICAgICAgYm9vbCBvayA9IG1fb2JqZWN0U3RvcmUtPnVwZGF0ZUtleUdlbmVyYXRvcih0
cmFuc2FjdGlvbiwgbV9rZXkuZ2V0KCksICFrZXlXYXNHZW5lcmF0ZWQpOwotICAgICAgICBpZiAo
IW9rKSB7Ci0gICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9y
OjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVy
cm9yIHVwZGF0aW5nIGtleSBnZW5lcmF0b3IuIikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhtX2tleS5yZWxlYXNl
KCkpOwotfQotCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmRlbGV0ZUZ1bmN0aW9u
KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0
aW9uUHRyLCBFeGNlcHRpb25Db2RlJikKLXsKLSAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6OmRlbGV0ZSIpOwotCi0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGw+IHRyYW5zYWN0aW9uID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6ZnJvbSh0cmFu
c2FjdGlvblB0cik7Ci0gICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgIT0gSURCVHJhbnNh
Y3Rpb246OlJFQURfT05MWSk7Ci0gICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0g
cHJwQ2FsbGJhY2tzOwotCi0gICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKE9iamVj
dFN0b3JlRGVsZXRpb25PcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBrZXlSYW5nZSwgY2FsbGJhY2tz
KSkpCi0gICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUo
SURCRGF0YWJhc2VFeGNlcHRpb246OkFib3J0RXJyb3IpKTsKLX0KLQotdm9pZCBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpPYmplY3RTdG9yZURlbGV0aW9uT3BlcmF0aW9uOjpwZXJmb3JtKElE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQotewotICAgIElEQl9UUkFDRSgi
T2JqZWN0U3RvcmVEZWxldGlvbk9wZXJhdGlvbiIpOwotCi0gICAgUmVmUHRyPElEQkJhY2tpbmdT
dG9yZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX29iamVjdFN0b3JlLT5iYWNraW5n
U3RvcmUoKS0+b3Blbk9iamVjdFN0b3JlQ3Vyc29yKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVU
cmFuc2FjdGlvbigpLCBtX29iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG1fb2JqZWN0U3RvcmUt
PmlkKCksIG1fa2V5UmFuZ2UuZ2V0KCksIElEQkN1cnNvcjo6TkVYVCk7Ci0gICAgaWYgKGJhY2tp
bmdTdG9yZUN1cnNvcikgewotCi0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIG1fb2JqZWN0U3Rv
cmUtPmJhY2tpbmdTdG9yZSgpLT5kZWxldGVSZWNvcmQodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9y
ZVRyYW5zYWN0aW9uKCksIG1fb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgbV9vYmplY3RTdG9y
ZS0+aWQoKSwgYmFja2luZ1N0b3JlQ3Vyc29yLT5yZWNvcmRJZGVudGlmaWVyKCkpOwotCi0gICAg
ICAgIH0gd2hpbGUgKGJhY2tpbmdTdG9yZUN1cnNvci0+Y29udGludWVGdW5jdGlvbigwKSk7Ci0g
ICAgfQotCi0gICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcygpOwotfQotCi12b2lkIElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OmNsZWFyKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxs
YmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIEV4
Y2VwdGlvbkNvZGUmKQotewotICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bDo6Y2xlYXIiKTsKLQotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFu
c2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmZyb20odHJhbnNhY3Rpb25QdHIp
OwotICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpICE9IElEQlRyYW5zYWN0aW9uOjpSRUFE
X09OTFkpOwotICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNr
czsKLQotICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhPYmplY3RTdG9yZUNsZWFy
T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgY2FsbGJhY2tzKSkpCi0gICAgICAgIGNhbGxiYWNrcy0+
b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkFi
b3J0RXJyb3IpKTsKLX0KLQotdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpPYmplY3RT
dG9yZUNsZWFyT3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRy
YW5zYWN0aW9uKQotewotICAgIElEQl9UUkFDRSgiT2JqZWN0U3RvcmVDbGVhck9wZXJhdGlvbiIp
OwotICAgIG1fb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5jbGVhck9iamVjdFN0b3JlKHRy
YW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX29iamVjdFN0b3JlLT5kYXRh
YmFzZUlkKCksIG1fb2JqZWN0U3RvcmUtPmlkKCkpOwotICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nl
c3MoKTsKLX0KLQogUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OmNyZWF0ZUluZGV4KGludDY0X3QgaWQsIGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCwgYm9vbCB1bmlxdWUsIGJvb2wgbXVsdGlF
bnRyeSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwgRXhj
ZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghbV9pbmRleGVzLmNv
bnRhaW5zKGlkKSwgIkluZGV4ZXMgYWxyZWFkeSBjb250YWluICclcyciLCBuYW1lLnV0ZjgoKS5k
YXRhKCkpOwogCi0gICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4ID0gSURCSW5k
ZXhCYWNrZW5kSW1wbDo6Y3JlYXRlKG1fZGF0YWJhc2UsIHRoaXMsIElEQkluZGV4TWV0YWRhdGEo
bmFtZSwgaWQsIGtleVBhdGgsIHVuaXF1ZSwgbXVsdGlFbnRyeSkpOworICAgIFJlZlB0cjxJREJJ
bmRleEJhY2tlbmRJbXBsPiBpbmRleCA9IElEQkluZGV4QmFja2VuZEltcGw6OmNyZWF0ZShtX2Rh
dGFiYXNlLCBJREJJbmRleE1ldGFkYXRhKG5hbWUsIGlkLCBrZXlQYXRoLCB1bmlxdWUsIG11bHRp
RW50cnkpKTsKICAgICBBU1NFUlQoaW5kZXgtPm5hbWUoKSA9PSBuYW1lKTsKIAogICAgIFJlZlB0
cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGw6OmZyb20odHJhbnNhY3Rpb25QdHIpOwpAQCAtNjYwLDY4ICsyNzAsMTIgQEAg
dm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpEZWxldGVJbmRleE9wZXJhdGlvbjo6cGVy
Zm9ybShJREJUcmFuc2FjdGlvbkJhY2sKICAgICBtX29iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUo
KS0+ZGVsZXRlSW5kZXgodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1f
b2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgbV9vYmplY3RTdG9yZS0+aWQoKSwgbV9pbmRleC0+
aWQoKSk7CiB9CiAKLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6b3BlbkN1cnNvcihQ
YXNzUmVmUHRyPElEQktleVJhbmdlPiByYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0
aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlIHRhc2tUeXBlLCBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRpb25Db2RlJikKLXsKLSAgICBJREJf
VFJBQ0UoIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Om9wZW5DdXJzb3IiKTsKLSAgICBSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7Ci0gICAgUmVmUHRyPElE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0gSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbDo6ZnJvbSh0cmFuc2FjdGlvblB0cik7Ci0gICAgaWYgKCF0cmFuc2FjdGlvbi0+c2No
ZWR1bGVUYXNrKE9wZW5PYmplY3RTdG9yZUN1cnNvck9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIHJh
bmdlLCBkaXJlY3Rpb24sIGNhbGxiYWNrcywgdGFza1R5cGUpKSkgewotICAgICAgICBjYWxsYmFj
a3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpBYm9ydEVycm9yKSk7Ci0gICAgfQotfQotCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6Ok9wZW5PYmplY3RTdG9yZUN1cnNvck9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKLXsKLSAgICBJREJfVFJBQ0UoIk9wZW5PYmplY3RT
dG9yZUN1cnNvciIpOwotCi0gICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBiYWNr
aW5nU3RvcmVDdXJzb3IgPSBtX29iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+b3Blbk9iamVj
dFN0b3JlQ3Vyc29yKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX29i
amVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG1fb2JqZWN0U3RvcmUtPmlkKCksIG1fcmFuZ2UuZ2V0
KCksIG1fZGlyZWN0aW9uKTsKLSAgICAvLyBUaGUgZnJvbnRlbmQgaGFzIGJlZ3VuIGluZGV4aW5n
LCBzbyB0aGlzIHBhdXNlcyB0aGUgdHJhbnNhY3Rpb24KLSAgICAvLyB1bnRpbCB0aGUgaW5kZXhp
bmcgaXMgY29tcGxldGUuIFRoaXMgY2FuJ3QgaGFwcGVuIGFueSBlYXJsaWVyCi0gICAgLy8gYmVj
YXVzZSB3ZSBkb24ndCB3YW50IHRvIHN3aXRjaCB0byBlYXJseSBtb2RlIGluIGNhc2UgbXVsdGlw
bGUKLSAgICAvLyBpbmRleGVzIGFyZSBiZWluZyBjcmVhdGVkIGluIGEgcm93LCB3aXRoIHB1dCgp
J3MgaW4gYmV0d2Vlbi4KLSAgICBpZiAobV90YXNrVHlwZSA9PSBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2U6OlByZWVtcHRpdmVUYXNrKQotICAgICAgICB0cmFuc2FjdGlvbi0+YWRkUHJl
ZW1wdGl2ZUV2ZW50KCk7Ci0gICAgaWYgKCFiYWNraW5nU3RvcmVDdXJzb3IpIHsKLSAgICAgICAg
bV9jYWxsYmFja3MtPm9uU3VjY2VzcyhzdGF0aWNfY2FzdDxTZXJpYWxpemVkU2NyaXB0VmFsdWUq
PigwKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCQ3Vyc29yQmFj
a2VuZEltcGw+IGN1cnNvciA9IElEQkN1cnNvckJhY2tlbmRJbXBsOjpjcmVhdGUoYmFja2luZ1N0
b3JlQ3Vyc29yLnJlbGVhc2UoKSwgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6S2V5QW5kVmFs
dWUsIG1fdGFza1R5cGUsIHRyYW5zYWN0aW9uLCBtX29iamVjdFN0b3JlLmdldCgpKTsKLSAgICBt
X2NhbGxiYWNrcy0+b25TdWNjZXNzKGN1cnNvciwgY3Vyc29yLT5rZXkoKSwgY3Vyc29yLT5wcmlt
YXJ5S2V5KCksIGN1cnNvci0+dmFsdWUoKSk7Ci19Ci0KLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6Y291bnQoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2UsIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZSogdHJhbnNhY3Rpb25QdHIsIEV4Y2VwdGlvbkNvZGUmKQotewotICAgIElEQl9UUkFDRSgiSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y291bnQiKTsKLSAgICBSZWZQdHI8SURCQ2FsbGJhY2tz
PiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw+IHRyYW5zYWN0aW9uID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6ZnJvbSh0
cmFuc2FjdGlvblB0cik7Ci0gICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKE9iamVj
dFN0b3JlQ291bnRPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCByYW5nZSwgY2FsbGJhY2tzKSkpCi0g
ICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0
YWJhc2VFeGNlcHRpb246OkFib3J0RXJyb3IpKTsKLX0KLQotdm9pZCBJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjpPYmplY3RTdG9yZUNvdW50T3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQotewotICAgIElEQl9UUkFDRSgiT2JqZWN0U3Rv
cmVDb3VudE9wZXJhdGlvbiIpOwotICAgIHVpbnQzMl90IGNvdW50ID0gMDsKLSAgICBSZWZQdHI8
SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNvciA9IG1fb2JqZWN0U3Rv
cmUtPmJhY2tpbmdTdG9yZSgpLT5vcGVuT2JqZWN0U3RvcmVLZXlDdXJzb3IodHJhbnNhY3Rpb24t
PmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwg
bV9vYmplY3RTdG9yZS0+aWQoKSwgbV9yYW5nZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhUKTsKLSAg
ICBpZiAoIWJhY2tpbmdTdG9yZUN1cnNvcikgewotICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNj
ZXNzKGNvdW50KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGRvIHsKLSAgICAgICAg
Kytjb3VudDsKLSAgICB9IHdoaWxlIChiYWNraW5nU3RvcmVDdXJzb3ItPmNvbnRpbnVlRnVuY3Rp
b24oMCkpOwotCi0gICAgbV9jYWxsYmFja3MtPm9uU3VjY2Vzcyhjb3VudCk7Ci19Ci0KIHZvaWQg
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6bG9hZEluZGV4ZXMoKQogewogICAgIFZlY3RvcjxJ
REJJbmRleE1ldGFkYXRhPiBpbmRleGVzID0gYmFja2luZ1N0b3JlKCktPmdldEluZGV4ZXMoZGF0
YWJhc2VJZCgpLCBtX21ldGFkYXRhLmlkKTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
aW5kZXhlcy5zaXplKCk7ICsraSkKLSAgICAgICAgbV9pbmRleGVzLnNldChpbmRleGVzW2ldLmlk
LCBJREJJbmRleEJhY2tlbmRJbXBsOjpjcmVhdGUobV9kYXRhYmFzZSwgdGhpcywgaW5kZXhlc1tp
XSkpOworICAgICAgICBtX2luZGV4ZXMuc2V0KGluZGV4ZXNbaV0uaWQsIElEQkluZGV4QmFja2Vu
ZEltcGw6OmNyZWF0ZShtX2RhdGFiYXNlLCBpbmRleGVzW2ldKSk7CiB9CiAKIHZvaWQgSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6Q3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybShJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKQEAgLTczOCwxMSArMjkyLDEx
IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6RGVsZXRlSW5kZXhBYm9ydE9wZXJh
dGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvCiAgICAgbV9vYmplY3RTdG9yZS0+bV9pbmRleGVz
LnNldChtX2luZGV4LT5pZCgpLCBtX2luZGV4KTsKIH0KIAotUGFzc1JlZlB0cjxJREJLZXk+IElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmdlbmVyYXRlS2V5KFBhc3NSZWZQdHI8SURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24pCitQYXNzUmVmUHRyPElEQktleT4gSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6Z2VuZXJhdGVLZXkoUGFzc1JlZlB0cjxJREJCYWNraW5nU3Rv
cmU+IGJhY2tpbmdTdG9yZSwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0
cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCiB7
CiAgICAgY29uc3QgaW50NjRfdCBtYXhHZW5lcmF0b3JWYWx1ZSA9IDkwMDcxOTkyNTQ3NDA5OTJM
TDsgLy8gTWF4aW11bSBpbnRlZ2VyIHN0b3JhYmxlIGFzIEVDTUFTY3JpcHQgbnVtYmVyLgogICAg
IGludDY0X3QgY3VycmVudE51bWJlcjsKLSAgICBib29sIG9rID0gYmFja2luZ1N0b3JlKCktPmdl
dEtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5z
YWN0aW9uKCksIGRhdGFiYXNlSWQoKSwgaWQoKSwgY3VycmVudE51bWJlcik7CisgICAgYm9vbCBv
ayA9IGJhY2tpbmdTdG9yZS0+Z2V0S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcih0cmFuc2FjdGlv
bi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwg
Y3VycmVudE51bWJlcik7CiAgICAgaWYgKCFvaykgewogICAgICAgICBMT0dfRVJST1IoIkZhaWxl
ZCB0byBnZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyIik7CiAgICAgICAgIHJldHVybiBJREJL
ZXk6OmNyZWF0ZUludmFsaWQoKTsKQEAgLTc1MywxMCArMzA3LDEwIEBAIFBhc3NSZWZQdHI8SURC
S2V5PiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpnZW5lcmF0ZUtleShQYXNzUmVmUHRyPElE
QlRyYW5zYWN0CiAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlTnVtYmVyKGN1cnJlbnROdW1iZXIp
OwogfQogCi1ib29sIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnVwZGF0ZUtleUdlbmVyYXRv
cihQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uLCBjb25z
dCBJREJLZXkqIGtleSwgYm9vbCBjaGVja0N1cnJlbnQpCitib29sIElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OnVwZGF0ZUtleUdlbmVyYXRvcihQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4g
YmFja2luZ1N0b3JlLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5z
YWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3Qg
SURCS2V5KiBrZXksIGJvb2wgY2hlY2tDdXJyZW50KQogewogICAgIEFTU0VSVChrZXkgJiYga2V5
LT50eXBlKCkgPT0gSURCS2V5OjpOdW1iZXJUeXBlKTsKLSAgICByZXR1cm4gYmFja2luZ1N0b3Jl
KCktPm1heWJlVXBkYXRlS2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcih0cmFuc2FjdGlvbi0+YmFj
a2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgZGF0YWJhc2VJZCgpLCBpZCgpLCBzdGF0aWNfY2FzdDxp
bnQ2NF90PihmbG9vcihrZXktPm51bWJlcigpKSkgKyAxLCBjaGVja0N1cnJlbnQpOworICAgIHJl
dHVybiBiYWNraW5nU3RvcmUtPm1heWJlVXBkYXRlS2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcih0
cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgZGF0YWJhc2VJZCwgb2JqZWN0
U3RvcmVJZCwgc3RhdGljX2Nhc3Q8aW50NjRfdD4oZmxvb3Ioa2V5LT5udW1iZXIoKSkpICsgMSwg
Y2hlY2tDdXJyZW50KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbC5oCmluZGV4IGRjZjcwMTllMWJiYmRlYzcwODA2OTEwNGY0YjkwYmVlN2QwZWFlZjcu
Ljk5ODU1NDAwMzZmODhmM2Y2OWQ2Y2QwYjBiMTQ1ODlkZGIzZmRlYjIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsLmgKQEAgLTYyLDI1ICs2MiwyMCBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgLy8g
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlCi0gICAgdmlydHVhbCB2b2lkIGdldChQYXNz
UmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdmlydHVhbCB2b2lk
IHB1dChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NSZWZQdHI8SURCS2V5
PiwgUHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2UqLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mLCBjb25zdCBWZWN0b3I8SW5kZXhL
ZXlzPiYpOworICAgIHZpcnR1YWwgdm9pZCBnZXQoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwg
RXhjZXB0aW9uQ29kZSYpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgcHV0KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxJREJL
ZXk+LCBQdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZSosIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYsIGNvbnN0IFZlY3RvcjxJbmRl
eEtleXM+JikgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogCi0gICAgdmlydHVhbCB2b2lkIGRl
bGV0ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsK
LSAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJik7CisgICAgdmlydHVhbCB2
b2lkIGRlbGV0ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNv
ZGUmKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisgICAgdmlydHVhbCB2b2lkIGNsZWFyKFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwg
RXhjZXB0aW9uQ29kZSYpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KIAogICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGNyZWF0ZUluZGV4KGludDY0X3Qs
IGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgdW5pcXVlLCBib29s
IG11bHRpRW50cnksIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNv
ZGUmKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0SW5kZXhLZXlzKFBhc3NSZWZQdHI8SURCS2V5PiBw
cnBQcmltYXJ5S2V5LCBjb25zdCBWZWN0b3I8aW50NjRfdD4mLCBjb25zdCBWZWN0b3I8SW5kZXhL
ZXlzPiYsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSopOwotICAgIHZpcnR1YWwgdm9p
ZCBzZXRJbmRleGVzUmVhZHkoY29uc3QgVmVjdG9yPGludDY0X3Q+JiwgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlKik7CisgICAgdmlydHVhbCB2b2lkIHNldEluZGV4S2V5cyhQYXNzUmVm
UHRyPElEQktleT4gcHJwUHJpbWFyeUtleSwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiwgY29uc3Qg
VmVjdG9yPEluZGV4S2V5cz4mLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqKSB7IEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisgICAgdmlydHVhbCB2b2lkIHNldEluZGV4ZXNSZWFkeShj
b25zdCBWZWN0b3I8aW50NjRfdD4mLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqKSB7
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkluZGV4
QmFja2VuZEludGVyZmFjZT4gaW5kZXgoaW50NjRfdCk7CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0
ZUluZGV4KGludDY0X3QsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlv
bkNvZGUmKTsKIAotICAgIHZpcnR1YWwgdm9pZCBvcGVuQ3Vyc29yKFBhc3NSZWZQdHI8SURCS2V5
UmFuZ2U+LCBJREJDdXJzb3I6OkRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlLCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdmlydHVhbCB2b2lkIGNvdW50
KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIHN0YXRp
YyBib29sIHBvcHVsYXRlSW5kZXgoSURCQmFja2luZ1N0b3JlJiwgaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4p
OwotCi0gICAgY29uc3QgSW5kZXhNYXA6Oml0ZXJhdG9yIGl0ZXJJbmRleGVzQmVnaW4oKSB7IHJl
dHVybiBtX2luZGV4ZXMuYmVnaW4oKTsgfTsKLSAgICBjb25zdCBJbmRleE1hcDo6aXRlcmF0b3Ig
aXRlckluZGV4ZXNFbmQoKSB7IHJldHVybiBtX2luZGV4ZXMuZW5kKCk7IH07CisgICAgdmlydHVh
bCB2b2lkIG9wZW5DdXJzb3IoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIElEQkN1cnNvcjo6RGly
ZWN0aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZTo6VGFza1R5cGUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2Vw
dGlvbkNvZGUmKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisgICAgdmlydHVhbCB2b2lkIGNv
dW50KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSB7IEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOyB9CiAKICAgICBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG1ldGFkYXRhKCkg
Y29uc3Q7CiAgICAgY29uc3QgU3RyaW5nJiBuYW1lKCkgeyByZXR1cm4gbV9tZXRhZGF0YS5uYW1l
OyB9CkBAIC0xMTQsMjIgKzEwOSwxNiBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgYm9vbCBtYWtl
SW5kZXhXcml0ZXJzKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4sIElEQkJh
Y2tpbmdTdG9yZSosIGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRh
ZGF0YSYsIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5LCBib29sIGtleVdhc0dlbmVyYXRl
ZCwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPElEQk9iamVj
dFN0b3JlQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlzPiYsIFZlY3RvcjxPd25QdHI8SW5kZXhX
cml0ZXI+ID4qIGluZGV4V3JpdGVycywgU3RyaW5nKiBlcnJvck1lc3NhZ2UsIGJvb2wmIGNvbXBs
ZXRlZCkgV0FSTl9VTlVTRURfUkVUVVJOOwogCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCS2V5
PiBnZW5lcmF0ZUtleShQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4sIFBhc3NSZWZQdHI8SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkKTsKKyAgICBzdGF0aWMgYm9vbCB1cGRhdGVLZXlHZW5lcmF0b3IoUGFzc1JlZlB0
cjxJREJCYWNraW5nU3RvcmU+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+
LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5
KiwgYm9vbCBjaGVja0N1cnJlbnQpOworCiBwcml2YXRlOgogICAgIElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGwoY29uc3QgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCosIGNvbnN0IElEQk9iamVjdFN0
b3JlTWV0YWRhdGEmKTsKIAogICAgIHZvaWQgbG9hZEluZGV4ZXMoKTsKLSAgICBQYXNzUmVmUHRy
PElEQktleT4gZ2VuZXJhdGVLZXkoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
Pik7Ci0gICAgYm9vbCB1cGRhdGVLZXlHZW5lcmF0b3IoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsPiwgY29uc3QgSURCS2V5KiwgYm9vbCBjaGVja0N1cnJlbnQpOwotCi0gICAg
Y2xhc3MgT2JqZWN0U3RvcmVSZXRyaWV2YWxPcGVyYXRpb247Ci0gICAgY2xhc3MgT2JqZWN0U3Rv
cmVTdG9yYWdlT3BlcmF0aW9uOwotICAgIGNsYXNzIE9iamVjdFN0b3JlSW5kZXhlc1JlYWR5T3Bl
cmF0aW9uOwotICAgIGNsYXNzIE9iamVjdFN0b3JlRGVsZXRpb25PcGVyYXRpb247Ci0gICAgY2xh
c3MgT2JqZWN0U3RvcmVDbGVhck9wZXJhdGlvbjsKKwogICAgIGNsYXNzIENyZWF0ZUluZGV4T3Bl
cmF0aW9uOwogICAgIGNsYXNzIERlbGV0ZUluZGV4T3BlcmF0aW9uOwotICAgIGNsYXNzIE9wZW5P
YmplY3RTdG9yZUN1cnNvck9wZXJhdGlvbjsKLSAgICBjbGFzcyBPYmplY3RTdG9yZUNvdW50T3Bl
cmF0aW9uOwogCiAgICAgLy8gV2hlbiBhICJ2ZXJzaW9uY2hhbmdlIiB0cmFuc2FjdGlvbiBhYm9y
dHMsIHRoZXNlIHJlc3RvcmUgdGhlIGJhY2stZW5kIG9iamVjdCBoaWVyYXJjaHkuCiAgICAgY2xh
c3MgQ3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaAppbmRl
eCAxZTIyYjcxNzBmMjU1NTk2OGMzNzg5MWViY2RlZWE5YTFlYzZjMTEyLi5jNzlkZWZmNDg4NDgw
NGY3ZjM3YWYwMzIzNTQwNzg5MjczOTFhM2IxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oCkBA
IC03Nyw2ICs3Nyw4IEBAIHB1YmxpYzoKICAgICBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9u
KiBiYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpIHsgcmV0dXJuICZtX3RyYW5zYWN0aW9uOyB9CiAg
ICAgaW50NjRfdCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KIAorICAgIElEQkRhdGFiYXNl
QmFja2VuZEltcGwqIGRhdGFiYXNlKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhYmFzZS5nZXQoKTsg
fQorCiBwcml2YXRlOgogICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwoaW50NjRfdCBpZCwg
Y29uc3QgSGFzaFNldDxpbnQ2NF90PiYgb2JqZWN0U3RvcmVJZHMsIElEQlRyYW5zYWN0aW9uOjpN
b2RlLCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYklEQkRhdGFiYXNlLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJJREJEYXRhYmFzZS5oCmluZGV4IGU2MjRmZTU4ZDgxNGNjMjNjMjZjNzUz
ZjE2Nzc4YTgwNzViNzU4NzkuLmMzMWE1NGQzMGQxZTkxZWNhZmJhZTYzOTc3OTUxNzgyMzExOGQx
MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklEQkRhdGFi
YXNlLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSURCRGF0YWJhc2Uu
aApAQCAtODksNyArODksNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIG9wZW5DdXJzb3Io
bG9uZyBsb25nIHRyYW5zYWN0aW9uSWQsIGxvbmcgbG9uZyBvYmplY3RTdG9yZUlkLCBsb25nIGxv
bmcgaW5kZXhJZCwgY29uc3QgV2ViSURCS2V5UmFuZ2UmLCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rp
b24sIGJvb2wga2V5T25seSwgVGFza1R5cGUsIFdlYklEQkNhbGxiYWNrcyopIHsgV0VCS0lUX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAgICAgdmlydHVhbCB2b2lkIGNvdW50KGxvbmcgbG9uZyB0
cmFuc2FjdGlvbklkLCBsb25nIGxvbmcgb2JqZWN0U3RvcmVJZCwgbG9uZyBsb25nIGluZGV4SWQs
IGNvbnN0IFdlYklEQktleVJhbmdlJiwgV2ViSURCQ2FsbGJhY2tzKikgeyBXRUJLSVRfQVNTRVJU
X05PVF9SRUFDSEVEKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlUmFuZ2UobG9uZyBsb25n
IHRyYW5zYWN0aW9uSWQsIGxvbmcgbG9uZyBvYmplY3RTdG9yZUlkLCBjb25zdCBXZWJJREJLZXlS
YW5nZSYsIFdlYklEQkNhbGxiYWNrcyopIHsgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9
Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyKGxvbmcgbG9uZyB0cmFuc2FjdGlvbklkLCBsb25nIGxv
bmcgb2JqZWN0U3RvcmVJZCwgV2ViSURCQ2FsbGJhY2tzKikgIHsgV0VCS0lUX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOyB9CisgICAgdmlydHVhbCB2b2lkIGNsZWFyKGxvbmcgbG9uZyB0cmFuc2FjdGlv
bklkLCBsb25nIGxvbmcgb2JqZWN0U3RvcmVJZCwgV2ViSURCQ2FsbGJhY2tzKikgeyBXRUJLSVRf
QVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KIAogcHJvdGVjdGVkOgogICAgIFdlYklEQkRhdGFiYXNl
KCkgeyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJEYXRh
YmFzZUltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRGF0YWJhc2VJ
bXBsLmNwcAppbmRleCBiMDVjNTE3YzQzMThhMTk3MTNkYjk1ZmNjMDdlNjEzZDllNTZiYjQzLi4x
MzlkMDQ3NWVkMjk3ZmUwZDE1NTQ5MzU0YmQ3MTI0YzEwNTliYjIyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJEYXRhYmFzZUltcGwuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkRhdGFiYXNlSW1wbC5jcHAKQEAgLTE2NCw3ICsx
NjQsNyBAQCB2b2lkIFdlYklEQkRhdGFiYXNlSW1wbDo6cHV0KGxvbmcgbG9uZyB0cmFuc2FjdGlv
bklkLCBsb25nIGxvbmcgb2JqZWN0U3RvcmVJZCwgVwogICAgICAgICBpbmRleEtleXNbaV0gPSBp
bmRleEtleUxpc3Q7CiAgICAgfQogCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IHZhbHVlQnVmZmVyKHZh
bHVlLT5zaXplKCkpOworICAgIFZlY3Rvcjx1aW50OF90PiB2YWx1ZUJ1ZmZlcjsKICAgICB2YWx1
ZUJ1ZmZlci5hcHBlbmQodmFsdWUtPmRhdGEoKSwgdmFsdWUtPnNpemUoKSk7CiAgICAgbV9kYXRh
YmFzZUJhY2tlbmQtPnB1dCh0cmFuc2FjdGlvbklkLCBvYmplY3RTdG9yZUlkLCAmdmFsdWVCdWZm
ZXIsIGtleSwgc3RhdGljX2Nhc3Q8SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpQdXRNb2Rl
PihwdXRNb2RlKSwgSURCQ2FsbGJhY2tzUHJveHk6OmNyZWF0ZShhZG9wdFB0cihjYWxsYmFja3Mp
KSwgaW5kZXhJZHMsIGluZGV4S2V5cyk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJJREJJbmRleEltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViSURCSW5kZXhJbXBsLmNwcAppbmRleCA5YjFkNjhjZmY3ZDdlNDJhNWI3MDgzY2U1Zjdl
MjgyNjE5MzdjZWYxLi5iMDhmODU0ZjM1ZjU4NzIyZGJmNTA4ODJkMzQ2NDVhZjkyMWVkNDg5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJJbmRleEltcGwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkluZGV4SW1wbC5jcHAKQEAg
LTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIklEQkNhbGxiYWNrc1Byb3h5LmgiCiAjaW5jbHVk
ZSAiSURCSW5kZXguaCIKKyNpbmNsdWRlICJJREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaCIKICNp
bmNsdWRlICJJREJLZXlSYW5nZS5oIgogI2luY2x1ZGUgIldlYklEQkNhbGxiYWNrcy5oIgogI2lu
Y2x1ZGUgIldlYklEQktleS5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9JREJEYXRhYmFzZUJhY2tlbmRUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvSURCRGF0YWJhc2VCYWNrZW5kVGVzdC5jcHAKaW5kZXggZWU0ODdhMWM2MjFmMTkyYTIw
NjdiNDJmMzIwMTJkMzBmMDU5YTUyMS4uMGM1ZjQ1OGZmMzk5NjRkMzFlZGQ4ZWEzZTdmY2ZiOTRh
MTQ3ZjJjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJEYXRh
YmFzZUJhY2tlbmRUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lE
QkRhdGFiYXNlQmFja2VuZFRlc3QuY3BwCkBAIC02Miw3ICs2Miw3IEBAIFRFU1QoSURCRGF0YWJh
c2VCYWNrZW5kVGVzdCwgQmFja2luZ1N0b3JlUmV0ZW50aW9uKQogCiAgICAgY29uc3QgYm9vbCB1
bmlxdWUgPSBmYWxzZTsKICAgICBjb25zdCBib29sIG11bHRpRW50cnkgPSBmYWxzZTsKLSAgICBS
ZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXggPSBJREJJbmRleEJhY2tlbmRJbXBsOjpj
cmVhdGUoZGIuZ2V0KCksIHN0b3JlLmdldCgpLCBJREJJbmRleE1ldGFkYXRhKCJpbmRleCIsIC0x
LCBJREJLZXlQYXRoKCJrZXlQYXRoIiksIHVuaXF1ZSwgbXVsdGlFbnRyeSkpOworICAgIFJlZlB0
cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCA9IElEQkluZGV4QmFja2VuZEltcGw6OmNyZWF0
ZShkYi5nZXQoKSwgSURCSW5kZXhNZXRhZGF0YSgiaW5kZXgiLCAtMSwgSURCS2V5UGF0aCgia2V5
UGF0aCIpLCB1bmlxdWUsIG11bHRpRW50cnkpKTsKICAgICBFWFBFQ1RfR1QoYmFja2luZ1N0b3Jl
LT5yZWZDb3VudCgpLCAxKTsKIAogICAgIGRiLmNsZWFyKCk7CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYTQ5YjViNzMyMTFi
NWQxZGI1YzIwMzExNzAxOTcyMzFlZDg2MWI4Ni4uNDM2ZDgxMmY1YjI0ZDg0OTBjODEwYjY1Y2Yx
ODY1YWUxMjQwNGYzOCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xh
eW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDEzLTAxLTAzICBBbGVjIEZs
ZXR0ICA8YWxlY2ZsZXR0QGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IE1pZ3Jh
dGUgYmFja2VuZCBPYmplY3RTdG9yZSBjYWxscyB0byB1c2UgdHJhbnNhY3Rpb24gaWQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMjc0MQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBhZGRpdGlvbmFs
IGNvdW50KCkgdGVzdHMgZm9yIG11bHRpLWVudHJ5IGluZGV4ZXMsIG5vdCBwcmV2aW91c2x5Cisg
ICAgICAgIGNvdmVyZWQuCisKKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9pbmRleC1tdWx0
aWVudHJ5LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9yZXNvdXJj
ZXMvaW5kZXgtbXVsdGllbnRyeS5qczoKKyAgICAgICAgKC50cmFuc2FjdGlvbi5vbmNvbXBsZXRl
KToKKyAgICAgICAgKHZlcmlmeUNvdW50LnJlcXVlc3Qub25zdWNjZXNzLnJlcXVlc3Qub25zdWNj
ZXNzKToKKyAgICAgICAgKHZlcmlmeUNvdW50LnJlcXVlc3Qub25zdWNjZXNzKToKKyAgICAgICAg
KHZlcmlmeUNvdW50KToKKwogMjAxMy0wMS0wMiAgQmVtIEpvbmVzLUJleSAgPGJqb25lc2JlQGFk
b2JlLmNvbT4KIAogICAgICAgICBXaGVuIGEgYmxvY2sncyBoZWlnaHQgaXMgZGV0ZXJtaW5lZCBi
eSBtaW4taGVpZ2h0L21heC1oZWlnaHQsIGNoaWxkcmVuIHdpdGggcGVyY2VudGFnZSBoZWlnaHRz
IGFyZSBzaXplZCBpbmNvcnJlY3RseQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9p
bmRleGVkZGIvaW5kZXgtbXVsdGllbnRyeS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdG9y
YWdlL2luZGV4ZWRkYi9pbmRleC1tdWx0aWVudHJ5LWV4cGVjdGVkLnR4dAppbmRleCBmMWQ2OTc3
ZTdmOGYzMTBiM2QxODM2Yzk3MmM4N2M3NmVjOWM3ZmRkLi45YzJkZWY4YjkxNzQwMzQzMmRlNjBj
ZWExZWZiYWY5MDlmOWVjY2Q0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4
ZWRkYi9pbmRleC1tdWx0aWVudHJ5LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9zdG9y
YWdlL2luZGV4ZWRkYi9pbmRleC1tdWx0aWVudHJ5LWV4cGVjdGVkLnR4dApAQCAtODIsNiArODIs
MTIgQEAgUEFTUyBjdXJzb3IudmFsdWUueSBpcyAiZCIKIGN1cnNvci5jb250aW51ZSgpCiBjdXJz
b3IgPSBldmVudC50YXJnZXQucmVzdWx0CiBQQVNTIGV4cGVjdGVkLmxlbmd0aCBpcyAwCit0cmFu
c2FjdGlvbiA9IGRiLnRyYW5zYWN0aW9uKFsnc3RvcmUnXSkKK3RyYW5zYWN0aW9uLm9iamVjdFN0
b3JlKCdzdG9yZScpLmluZGV4KCdpbmRleCcpCitpbmRleC5jb3VudCgpCitQQVNTIGV2ZW50LnRh
cmdldC5yZXN1bHQgaXMgOQoraW5kZXguY291bnQoNykKK1BBU1MgZXZlbnQudGFyZ2V0LnJlc3Vs
dCBpcyAxCiAKIFZlcmlmeWluZyB1bmlxdWUgY29uc3RyYWludCBvbiBtdWx0aUVudHJ5IGluZGV4
CiB0cmFuc2FjdGlvbiA9IGRiLnRyYW5zYWN0aW9uKFsnc3RvcmUtdW5pcXVlJ10sICdyZWFkd3Jp
dGUnKQpAQCAtMTYyLDYgKzE2OCwxMiBAQCBQQVNTIGN1cnNvci52YWx1ZS55IGlzICJkIgogY3Vy
c29yLmNvbnRpbnVlKCkKIGN1cnNvciA9IGV2ZW50LnRhcmdldC5yZXN1bHQKIFBBU1MgZXhwZWN0
ZWQubGVuZ3RoIGlzIDAKK3RyYW5zYWN0aW9uID0gZGIudHJhbnNhY3Rpb24oWydzdG9yZSddKQor
dHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoJ3N0b3JlJykuaW5kZXgoJ2luZGV4JykKK2luZGV4LmNv
dW50KCkKK1BBU1MgZXZlbnQudGFyZ2V0LnJlc3VsdCBpcyA5CitpbmRleC5jb3VudCg3KQorUEFT
UyBldmVudC50YXJnZXQucmVzdWx0IGlzIDEKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRy
dWUKIAogVEVTVCBDT01QTEVURQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRl
eGVkZGIvcmVzb3VyY2VzL2luZGV4LW11bHRpZW50cnkuanMgYi9MYXlvdXRUZXN0cy9zdG9yYWdl
L2luZGV4ZWRkYi9yZXNvdXJjZXMvaW5kZXgtbXVsdGllbnRyeS5qcwppbmRleCA3ZGY1ZjU5MmNm
Y2MzZjE1NmI3MzQzMzgyOTNmMTZmZWEyZGVjNGMwLi5iMGI1NWU4YWJmZWIwNDhiY2I1NjViNTRk
MmFhYmY4M2I2MTE3MjM4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRk
Yi9yZXNvdXJjZXMvaW5kZXgtbXVsdGllbnRyeS5qcworKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdl
L2luZGV4ZWRkYi9yZXNvdXJjZXMvaW5kZXgtbXVsdGllbnRyeS5qcwpAQCAtNDUsNyArNDUsNyBA
QCBmdW5jdGlvbiB2ZXJpZnlJbmRleGVzKGluZGV4TmFtZSwgY2FsbGJhY2spCiAgICAgZGVidWco
IlZlcmlmeWluZyBpbmRleDogIiArIGluZGV4TmFtZSk7CiAgICAgdHJhbnNhY3Rpb24gPSBldmFs
QW5kTG9nKCJ0cmFuc2FjdGlvbiA9IGRiLnRyYW5zYWN0aW9uKFsnc3RvcmUnXSwgJ3JlYWRvbmx5
JykiKTsKICAgICB0cmFuc2FjdGlvbi5vbmFib3J0ID0gdW5leHBlY3RlZEFib3J0Q2FsbGJhY2s7
Ci0gICAgdHJhbnNhY3Rpb24ub25jb21wbGV0ZSA9IGNhbGxiYWNrOworICAgIHRyYW5zYWN0aW9u
Lm9uY29tcGxldGUgPSBmdW5jdGlvbigpIHsgdmVyaWZ5Q291bnQoY2FsbGJhY2spOyB9OwogCiAg
ICAgZXhwZWN0ZWQgPSBbCiAgICAgICAgIHsga2V5OiAxLCBwcmltYXJ5S2V5OiAnZm9vJywgeTog
J2EnIH0sCkBAIC0xMDQsNiArMTA0LDI2IEBAIGZ1bmN0aW9uIHZlcmlmeVVuaXF1ZUNvbnN0cmFp
bnQoKQogICAgIH07CiB9CiAKK2Z1bmN0aW9uIHZlcmlmeUNvdW50KGNhbGxiYWNrKSB7CisgICAg
ZXZhbEFuZExvZygidHJhbnNhY3Rpb24gPSBkYi50cmFuc2FjdGlvbihbJ3N0b3JlJ10pIik7CisK
KyAgICB0cmFuc2FjdGlvbi5vbmFib3J0ID0gdW5leHBlY3RlZEFib3J0Q2FsbGJhY2s7CisgICAg
dHJhbnNhY3Rpb24ub25jb21wbGV0ZSA9IGNhbGxiYWNrOworCisgICAgaW5kZXggPSBldmFsQW5k
TG9nKCJ0cmFuc2FjdGlvbi5vYmplY3RTdG9yZSgnc3RvcmUnKS5pbmRleCgnaW5kZXgnKSIpOwor
ICAgIHJlcXVlc3QgPSBldmFsQW5kTG9nKCJpbmRleC5jb3VudCgpIik7CisgICAgcmVxdWVzdC5v
bnN1Y2Nlc3MgPSBmdW5jdGlvbihldmVudCkgeworCisgICAgICAgIHNob3VsZEJlKCJldmVudC50
YXJnZXQucmVzdWx0IiwgIjkiKTsKKworICAgICAgICByZXF1ZXN0ID0gZXZhbEFuZExvZygiaW5k
ZXguY291bnQoNykiKTsKKyAgICAgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSBmdW5jdGlvbihldmVu
dCkgeworICAgICAgICAgICAgc2hvdWxkQmUoImV2ZW50LnRhcmdldC5yZXN1bHQiLCAiMSIpOwor
ICAgICAgICB9OworICAgIH07CisKK30KKwogZnVuY3Rpb24gY3JlYXRlSW5kZXhPblN0b3JlV2l0
aERhdGEoKQogewogICAgIGRlYnVnKCIiKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>181316</attachid>
            <date>2013-01-04 09:27:02 -0800</date>
            <delta_ts>2013-01-04 10:25:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-102741-20130104092409.patch</filename>
            <type>text/plain</type>
            <size>109301</size>
            <attacher name="Alec Flett">alecflett</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM4NzY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmUzNWIyZTk1ZWEwYWNj
NWE5YTVlYzFhMjFkMTZhMGY3MzEyYTAxYi4uYmVmMzA4MzZkNjBiNzI2YzQzNWFmNTk0N2FkMmY5
NDlkNTNkN2RmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzMSBAQAorMjAxMy0wMS0wMyAgQWxl
YyBGbGV0dCAgPGFsZWNmbGV0dEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBN
aWdyYXRlIGJhY2tlbmQgT2JqZWN0U3RvcmUgY2FsbHMgdG8gdXNlIHRyYW5zYWN0aW9uIGlkCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDI3NDEKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGdWxseSBtaWdy
YXRlIDggY29yZSBkYXRhIGNhbGxzIChnZXQsIHB1dCwgc2V0SW5kZXhLZXlzLCBzZXRJbmRleGVz
UmVhZHksCisgICAgICAgIG9wZW5DdXJzb3IsIGNvdW50LCBkZWxldGVSYW5nZSwgYW5kIGNsZWFy
KSBpbnRvIElEQkRhdGFiYXNlQmFja2VuZEltcGwsCisgICAgICAgIGNvbWJpbmluZyBjb21tb24g
Y29kZSBmcm9tIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwgYW5kIElEQkluZGV4QmFja2VuZElt
cGwKKyAgICAgICAgaW4gb3JkZXIgdG8gc2ltcGxpZnkgdGhlIGJhY2tlbmQgaW50ZXJmYWNlLiBU
aGVzZSBjYWxscyBhcmUgbm93CisgICAgICAgIGltcGxlbWVudGVkIGluIHRlcm1zIG9mIGFuIGlu
dDY0X3QtYmFzZWQgdHJhbnNhY3Rpb25JZCByYXRoZXIgdGhhbgorICAgICAgICBhbiBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UsIHdoaWNoIHNpbXBsaWZpZXMgdGhlIG93bmVyc2hpcCBt
b2RlbAorICAgICAgICBiZXR3ZWVuIHRoZSBmcm9udGVuZCBhbmQgdGhlIGJhY2tlbmQuCisKKyAg
ICAgICAgSW4gYWRkaXRpb24sIHJlbW92ZSByZWZlcmVuY2VzIHRvIElEQk9iamVjdFN0b3JlQmFj
a2VuZCogZnJvbSBJREJJbmRleCwKKyAgICAgICAgYXMgaXQgaXMgbm8gbG9uZ2VyIG5lZWRlZC4K
KworICAgICAgICBBIGZldyBkdXBsaWNhdGUgSURCX1RSQUNFIG1ldGhvZHMgaGF2ZSBiZWVuIHJl
bW92ZWQgZnJvbSB3cmFwcGVyIG1ldGhvZHMKKyAgICAgICAgdGhhdCBjYWxsIGFub3RoZXIgbWV0
aG9kIHRoYXQgYWxyZWFkeSBoYXZlIElEQl9UUkFDRSdzLgorCisgICAgICAgIEZpbmFsbHksIElE
QkN1cnNvckJhY2tlbmRJbXBsIG5vdyBubyBsb25nZXIgaG9sZHMgb250byBhbiAKKyAgICAgICAg
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCosIHNvIGl0cyBkZXN0cnVjdGlvbiBhbmQgbWVtYmVy
IHZhcmlhYmxlcyBhcmUKKyAgICAgICAgc2ltcGxpZmllZCwgYW5kIHJlb3JkZXJlZCB0byBtYXRj
aCBwcm9wZXIgZGVzdHJ1Y3Rpb24gb3JkZXIuCisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3JC
YWNrZW5kSW1wbDo6SURCQ3Vyc29yQmFja2VuZEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SURC
Q3Vyc29yQmFja2VuZEltcGw6On5JREJDdXJzb3JCYWNrZW5kSW1wbCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJDdXJzb3JCYWNrZW5kSW1wbDo6ZGVsZXRlRnVuY3Rpb24pOgorICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmg6CisgICAgICAgIChXZWJDb3Jl
OjpJREJDdXJzb3JCYWNrZW5kSW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKElEQkN1cnNvckJhY2tl
bmRJbXBsKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5oOgorICAg
ICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6OmJhY2tlbmQpOgorICAgICAgICAoSURCRGF0YWJh
c2UpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwu
Y3BwOgorICAgICAgICAoR2V0T3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdldE9wZXJh
dGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdldE9wZXJhdGlvbjo6R2V0T3BlcmF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoUHV0T3BlcmF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlB1dE9wZXJhdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlB1
dE9wZXJhdGlvbjo6UHV0T3BlcmF0aW9uKToKKyAgICAgICAgKFNldEluZGV4ZXNSZWFkeU9wZXJh
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTZXRJbmRleGVzUmVhZHlPcGVyYXRpb246OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTZXRJbmRleGVzUmVhZHlPcGVyYXRpb246OlNldEluZGV4
ZXNSZWFkeU9wZXJhdGlvbik6CisgICAgICAgIChPcGVuQ3Vyc29yT3BlcmF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok9wZW5DdXJzb3JPcGVyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpPcGVuQ3Vyc29yT3BlcmF0aW9uOjpPcGVuQ3Vyc29yT3BlcmF0aW9uKToKKyAgICAgICAg
KENvdW50T3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvdW50T3BlcmF0aW9uOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q291bnRPcGVyYXRpb246OkNvdW50T3BlcmF0aW9uKToK
KyAgICAgICAgKERlbGV0ZVJhbmdlT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0
ZVJhbmdlT3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlUmFuZ2VP
cGVyYXRpb246OkRlbGV0ZVJhbmdlT3BlcmF0aW9uKToKKyAgICAgICAgKENsZWFyT3BlcmF0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkNsZWFyT3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6Q2xlYXJPcGVyYXRpb246OkNsZWFyT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmdldCk6CisgICAgICAgIChXZWJDb3JlOjpHZXRP
cGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5k
SW1wbDo6cHV0KToKKyAgICAgICAgKFdlYkNvcmU6OlB1dE9wZXJhdGlvbjo6cGVyZm9ybSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRJbmRleEtleXMpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6c2V0SW5kZXhlc1JlYWR5
KToKKyAgICAgICAgKFdlYkNvcmU6OlNldEluZGV4ZXNSZWFkeU9wZXJhdGlvbjo6cGVyZm9ybSk6
CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29yKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNvdW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvdW50T3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6
OkRlbGV0ZVJhbmdlT3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRh
dGFiYXNlQmFja2VuZEltcGw6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkNsZWFyT3BlcmF0
aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wZW5DdXJzb3JPcGVyYXRpb246OnBl
cmZvcm0pOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OklEQkluZGV4OjpJREJJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJJ
bmRleDo6b3BlbkN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleDo6Y291bnQpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXg6Om9wZW5LZXlDdXJzb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCSW5kZXg6OmdldCk6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleDo6Z2V0S2V5
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4OjpiYWNrZW5kREIpOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguaDoKKyAgICAgICAg
KFdlYkNvcmU6OklEQkluZGV4OjpjcmVhdGUpOgorICAgICAgICAoSURCSW5kZXgpOgorICAgICAg
ICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SURCSW5kZXhCYWNrZW5kSW1wbDo6SURCSW5kZXhCYWNrZW5kSW1wbCk6CisgICAg
ICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5oOgorICAgICAgICAo
V2ViQ29yZTo6SURCSW5kZXhCYWNrZW5kSW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQkluZGV4QmFja2VuZEltcGw6Om9wZW5DdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6SURC
SW5kZXhCYWNrZW5kSW1wbDo6Y291bnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXhCYWNr
ZW5kSW1wbDo6b3BlbktleUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleEJhY2tl
bmRJbXBsOjpnZXQpOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXhCYWNrZW5kSW1wbDo6Z2V0
S2V5KToKKyAgICAgICAgKElEQkluZGV4QmFja2VuZEltcGwpOgorICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVj
dFN0b3JlOjpnZXQpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OnB1dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6ZGVsZXRlRnVuY3Rpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmNyZWF0ZUluZGV4KToKKyAgICAgICAg
KFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjppbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJP
YmplY3RTdG9yZTo6b3BlbkN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9y
ZTo6Y291bnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmJhY2tlbmREQik6
CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaDoKKyAgICAgICAg
KFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjppZCk6CisgICAgICAgIChJREJPYmplY3RTdG9yZSk6
CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVhdGVJ
bmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpsb2Fk
SW5kZXhlcyk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpn
ZW5lcmF0ZUtleSk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
Ojp1cGRhdGVLZXlHZW5lcmF0b3IpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9i
amVjdFN0b3JlQmFja2VuZEltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6OmdldCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpwdXQpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bDo6ZGVsZXRlRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6c2V0SW5kZXhLZXlzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OnNldEluZGV4ZXNSZWFkeSk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OmNvdW50KToKKyAgICAgICAgKElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGwpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmRh
dGFiYXNlKToKKyAgICAgICAgKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwpOgorCiAyMDEzLTAx
LTAzICBBbnRvaW5lIFF1aW50ICA8Z3Jhb3V0c0BhcHBsZS5jb20+CiAKICAgICAgICAgb25sb2Fk
IGNhbGxiYWNrIGZvciA8dHJhY2s+IGVsZW1lbnQgYXR0YWNoZWQgdG8gPHZpZGVvPiBkb2VzIG5v
dCBmaXJlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGRlMDc5N2I1NmE0OGQwYTY1NjVj
YmI3NWJhZDEzMTc4YTZkNGE2MWYuLmMzZTljZjA1MDI2NDA4MzA0ZjhhZjM4Yjg1NDkzMDZkMzBh
YjBhN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTMt
MDEtMDMgIEFsZWMgRmxldHQgIDxhbGVjZmxldHRAY2hyb21pdW0ub3JnPgorCisgICAgICAgIElu
ZGV4ZWREQjogTWlncmF0ZSBiYWNrZW5kIE9iamVjdFN0b3JlIGNhbGxzIHRvIHVzZSB0cmFuc2Fj
dGlvbiBpZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTAyNzQxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
Rml4IGEgYnVnIHdoZXJlIGFuIGFycmF5IHdhcyBpbml0aWFsaXplZCB3aXRoIGEgbGFyZ2UgZW1w
dHkgYnVmZmVyLAorICAgICAgICBjbGVhbiB1cCB3aGl0ZXNwYWNlLCBhbmQgdXBkYXRlIHRvIG1h
dGNoIHNpZ25hdHVyZXMgdGhhdCBjaGFuZ2VkCisgICAgICAgIGluIFdlYkNvcmUuCisKKyAgICAg
ICAgKiBwdWJsaWMvV2ViSURCRGF0YWJhc2UuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViSURCRGF0
YWJhc2U6OmNsZWFyKToKKyAgICAgICAgKiBzcmMvV2ViSURCRGF0YWJhc2VJbXBsLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViSURCRGF0YWJhc2VJbXBsOjpwdXQpOgorICAgICAgICAqIHNyYy9X
ZWJJREJJbmRleEltcGwuY3BwOgorICAgICAgICAqIHRlc3RzL0lEQkRhdGFiYXNlQmFja2VuZFRl
c3QuY3BwOgorCiAyMDEzLTAxLTAzICBTYW1pIEt5b3N0aWxhICA8c2t5b3N0aWxAY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gUmVuYW1lIGxvdyBsYXRlbmN5IHJlbmRlcmluZyBt
b2RlIHNldHRpbmcgdG8gdnN5bmMgbm90aWZpY2F0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAKaW5kZXgg
ZGE3YWRjZjg5NTVkMDMzMmJhMjc0ZWYwNjJkNjcyODY1MTI3YjJiMy4uZmVhYjVjNWUzYTM2NDVm
MDk5NDQwMDliMDNjOWZjZDYwNGRjNmIxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcApAQCAtMTAxLDEy
ICsxMDEsMTMgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNr
czsKIH07CiAKLUlEQkN1cnNvckJhY2tlbmRJbXBsOjpJREJDdXJzb3JCYWNrZW5kSW1wbChQYXNz
UmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBjdXJzb3IsIEN1cnNvclR5cGUgY3Vyc29y
VHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSB0YXNrVHlwZSwg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24sIElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGwqIG9iamVjdFN0b3JlKQotICAgIDogbV9jdXJzb3IoY3Vyc29yKQotICAgICwgbV90
YXNrVHlwZSh0YXNrVHlwZSkKK0lEQkN1cnNvckJhY2tlbmRJbXBsOjpJREJDdXJzb3JCYWNrZW5k
SW1wbChQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBjdXJzb3IsIEN1cnNvclR5
cGUgY3Vyc29yVHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSB0
YXNrVHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24sIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCkKKyAgICA6IG1fdGFza1R5cGUodGFza1R5cGUpCiAgICAgLCBtX2N1cnNv
clR5cGUoY3Vyc29yVHlwZSkKKyAgICAsIG1fZGF0YWJhc2UodHJhbnNhY3Rpb24tPmRhdGFiYXNl
KCkpCiAgICAgLCBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQotICAgICwgbV9vYmplY3RTdG9y
ZShvYmplY3RTdG9yZSkKKyAgICAsIG1fb2JqZWN0U3RvcmVJZChvYmplY3RTdG9yZUlkKQorICAg
ICwgbV9jdXJzb3IoY3Vyc29yKQogICAgICwgbV9jbG9zZWQoZmFsc2UpCiB7CiAgICAgbV90cmFu
c2FjdGlvbi0+cmVnaXN0ZXJPcGVuQ3Vyc29yKHRoaXMpOwpAQCAtMTE1LDExICsxMTYsNiBAQCBJ
REJDdXJzb3JCYWNrZW5kSW1wbDo6SURCQ3Vyc29yQmFja2VuZEltcGwoUGFzc1JlZlB0cjxJREJC
YWNraW5nU3RvcmU6OkN1cnNvcj4gYwogSURCQ3Vyc29yQmFja2VuZEltcGw6On5JREJDdXJzb3JC
YWNrZW5kSW1wbCgpCiB7CiAgICAgbV90cmFuc2FjdGlvbi0+dW5yZWdpc3Rlck9wZW5DdXJzb3Io
dGhpcyk7Ci0gICAgLy8gT3JkZXIgaXMgaW1wb3J0YW50LCB0aGUgY3Vyc29ycyBoYXZlIHRvIGJl
IGRlc3RydWN0ZWQgYmVmb3JlIHRoZSBvYmplY3RTdG9yZS4KLSAgICBtX2N1cnNvci5jbGVhcigp
OwotICAgIG1fc2F2ZWRDdXJzb3IuY2xlYXIoKTsKLQotICAgIG1fb2JqZWN0U3RvcmUuY2xlYXIo
KTsKIH0KIAogCkBAIC0xNzAsOCArMTY2LDcgQEAgdm9pZCBJREJDdXJzb3JCYWNrZW5kSW1wbDo6
ZGVsZXRlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywKICAg
ICBSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlID0gSURCS2V5UmFuZ2U6Om9ubHkobV9jdXJz
b3ItPnByaW1hcnlLZXkoKSwgZWMpOwogICAgIEFTU0VSVCghZWMpOwogCi0gICAgbV9vYmplY3RT
dG9yZS0+ZGVsZXRlRnVuY3Rpb24oa2V5UmFuZ2UucmVsZWFzZSgpLCBwcnBDYWxsYmFja3MsIG1f
dHJhbnNhY3Rpb24uZ2V0KCksIGVjKTsKLSAgICBBU1NFUlQoIWVjKTsKKyAgICBtX2RhdGFiYXNl
LT5kZWxldGVSYW5nZShtX3RyYW5zYWN0aW9uLT5pZCgpLCBtX29iamVjdFN0b3JlSWQsIGtleVJh
bmdlLnJlbGVhc2UoKSwgcHJwQ2FsbGJhY2tzKTsKIH0KIAogdm9pZCBJREJDdXJzb3JCYWNrZW5k
SW1wbDo6cHJlZmV0Y2hDb250aW51ZShpbnQgbnVtYmVyVG9GZXRjaCwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IHBycENhbGxiYWNrcywgRXhjZXB0aW9uQ29kZSYpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuaAppbmRl
eCBiMGM3OWYyMTRmY2FjNjcyMmVjNTQ0MjNlOWQ5OWI4ZmZiNTFkNjM0Li41NjA3YjU3NjdjYjc5
NWVhZDM4ZTUxYjRkMTg4Y2ZlOGYzODhjNWY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmgKQEAgLTQ3LDEzICs0
NywxMyBAQCBjbGFzcyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOwogCiBjbGFzcyBJREJDdXJz
b3JCYWNrZW5kSW1wbCA6IHB1YmxpYyBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlIHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW1wbD4gY3JlYXRlKFBh
c3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGN1cnNvciwgQ3Vyc29yVHlwZSBjdXJz
b3JUeXBlLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbiwgSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbCogb2JqZWN0U3RvcmUpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURC
Q3Vyc29yQmFja2VuZEltcGw+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vy
c29yPiBjdXJzb3IsIEN1cnNvclR5cGUgY3Vyc29yVHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbCogdHJhbnNhY3Rpb24sIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKICAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgSURCQ3Vyc29yQmFja2VuZEltcGwoY3Vyc29yLCBjdXJzb3JU
eXBlLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U6Ok5vcm1hbFRhc2ssIHRyYW5zYWN0
aW9uLCBvYmplY3RTdG9yZSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkN1cnNv
ckJhY2tlbmRJbXBsKGN1cnNvciwgY3Vyc29yVHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlOjpOb3JtYWxUYXNrLCB0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVJZCkpOwogICAgIH0K
LSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW1wbD4gY3JlYXRlKFBhc3NS
ZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGN1cnNvciwgQ3Vyc29yVHlwZSBjdXJzb3JU
eXBlLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlIHRhc2tUeXBlLCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbiwgSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbCogb2JqZWN0U3RvcmUpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFj
a2VuZEltcGw+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBjdXJz
b3IsIEN1cnNvclR5cGUgY3Vyc29yVHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
OjpUYXNrVHlwZSB0YXNrVHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rp
b24sIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgSURCQ3Vyc29yQmFja2VuZEltcGwoY3Vyc29yLCBjdXJzb3JUeXBlLCB0YXNrVHlwZSwg
dHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
SURCQ3Vyc29yQmFja2VuZEltcGwoY3Vyc29yLCBjdXJzb3JUeXBlLCB0YXNrVHlwZSwgdHJhbnNh
Y3Rpb24sIG9iamVjdFN0b3JlSWQpKTsKICAgICB9CiAgICAgdmlydHVhbCB+SURCQ3Vyc29yQmFj
a2VuZEltcGwoKTsKIApAQCAtNzEsMTggKzcxLDIwIEBAIHB1YmxpYzoKICAgICB2b2lkIGNsb3Nl
KCk7CiAKIHByaXZhdGU6Ci0gICAgSURCQ3Vyc29yQmFja2VuZEltcGwoUGFzc1JlZlB0cjxJREJC
YWNraW5nU3RvcmU6OkN1cnNvcj4sIEN1cnNvclR5cGUsIElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZTo6VGFza1R5cGUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqLCBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsKik7CisgICAgSURCQ3Vyc29yQmFja2VuZEltcGwoUGFzc1JlZlB0cjxJ
REJCYWNraW5nU3RvcmU6OkN1cnNvcj4sIEN1cnNvclR5cGUsIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZTo6VGFza1R5cGUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQpOwogCiAgICAgY2xhc3MgQ3Vyc29ySXRlcmF0aW9uT3BlcmF0aW9uOwog
ICAgIGNsYXNzIEN1cnNvckFkdmFuY2VPcGVyYXRpb247CiAgICAgY2xhc3MgQ3Vyc29yUHJlZmV0
Y2hJdGVyYXRpb25PcGVyYXRpb247CiAKLSAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJz
b3I+IG1fY3Vyc29yOwotICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gbV9zYXZl
ZEN1cnNvcjsKICAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlIG1f
dGFza1R5cGU7CiAgICAgQ3Vyc29yVHlwZSBtX2N1cnNvclR5cGU7Ci0gICAgUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGw+IG1fdHJhbnNhY3Rpb247Ci0gICAgUmVmUHRyPElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw+IG1fb2JqZWN0U3RvcmU7CisgICAgY29uc3QgUmVmUHRyPElEQkRh
dGFiYXNlQmFja2VuZEltcGw+IG1fZGF0YWJhc2U7CisgICAgY29uc3QgUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw+IG1fdHJhbnNhY3Rpb247CisgICAgY29uc3QgaW50NjRfdCBtX29i
amVjdFN0b3JlSWQ7CisgICAgLy8gT3JkZXIgaXMgaW1wb3J0YW50LCB0aGUgY3Vyc29ycyBoYXZl
IHRvIGJlIGRlc3RydWN0ZWQgYmVmb3JlIHRoZSB0cmFuc2FjdGlvbi4KKyAgICBSZWZQdHI8SURC
QmFja2luZ1N0b3JlOjpDdXJzb3I+IG1fY3Vyc29yOworICAgIFJlZlB0cjxJREJCYWNraW5nU3Rv
cmU6OkN1cnNvcj4gbV9zYXZlZEN1cnNvcjsKIAogICAgIGJvb2wgbV9jbG9zZWQ7CiB9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmgKaW5kZXggZGRj
MTg5YTBiNDI4ZGI0OGVlZjRkYjYwNzY0ZTEyZjM2NWI1MGVkYi4uZjk5YjVlNDg2NzJkYzg1NmI3
ZGQzZjQzMTEyZTc4YjYzNjU1YzBjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJEYXRhYmFzZS5oCkBAIC0xMDMsNiArMTAzLDggQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gZmluZE9iamVjdFN0b3JlSWQobmFtZSkgIT0gSURCT2JqZWN0U3RvcmVNZXRhZGF0
YTo6SW52YWxpZElkOwogICAgIH0KIAorICAgIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZSog
YmFja2VuZCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZC5nZXQoKTsgfQorCiAgICAgc3RhdGlj
IGludDY0X3QgbmV4dFRyYW5zYWN0aW9uSWQoKTsKIAogICAgIHVzaW5nIFJlZkNvdW50ZWQ8SURC
RGF0YWJhc2U+OjpyZWY7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCmluZGV4IGNkOGFlNzc4NzMwNzY0
Mjk4YWNiZWU5ZWNjOWZmM2RmNGNjZjk3M2EuLjU3MjcxZjE3MWZmNjkwZDI3NDdjZGY0MjljNGVj
ZGJiYTk2ODI0N2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCkBAIC0yOSw4ICsyOSwxMCBAQAog
I2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCiAjaW5jbHVkZSAiSURCQmFja2luZ1N0b3Jl
LmgiCisjaW5jbHVkZSAiSURCQ3Vyc29yQmFja2VuZEltcGwuaCIKICNpbmNsdWRlICJJREJEYXRh
YmFzZUV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIklEQkZhY3RvcnlCYWNrZW5kSW1wbC5oIgorI2lu
Y2x1ZGUgIklEQkluZGV4QmFja2VuZEltcGwuaCIKICNpbmNsdWRlICJJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsLmgiCiAjaW5jbHVkZSAiSURCVHJhY2luZy5oIgogI2luY2x1ZGUgIklEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGwuaCIKQEAgLTE1NCw2ICsxNTYsMTkyIEBAIHByaXZhdGU6CiAgICAg
aW50NjRfdCBtX3ByZXZpb3VzSW50VmVyc2lvbjsKIH07CiAKK2NsYXNzIEdldE9wZXJhdGlvbiA6
IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24geworcHVibGljOgor
ICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlv
bj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIGNvbnN0
IElEQkRhdGFiYXNlTWV0YWRhdGEmIG1ldGFkYXRhLCBpbnQ2NCBvYmplY3RTdG9yZUlkLCBpbnQ2
NCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgSURCQ3Vyc29yQmFj
a2VuZEludGVyZmFjZTo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4gY2FsbGJhY2tzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBHZXRP
cGVyYXRpb24oYmFja2luZ1N0b3JlLCBtZXRhZGF0YSwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwg
a2V5UmFuZ2UsIGN1cnNvclR5cGUsIGNhbGxiYWNrcykpOworICAgIH0KKworICAgIHZvaWQgcGVy
Zm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7CisKK3ByaXZhdGU6CisgICAgR2V0T3Bl
cmF0aW9uKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIGNvbnN0IElE
QkRhdGFiYXNlTWV0YWRhdGEmIG1ldGFkYXRhLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0
X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIElEQkN1cnNvckJh
Y2tlbmRJbnRlcmZhY2U6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+IGNhbGxiYWNrcykKKyAgICAgICAgOiBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUp
CisgICAgICAgICwgbV9kYXRhYmFzZUlkKG1ldGFkYXRhLmlkKQorICAgICAgICAsIG1fb2JqZWN0
U3RvcmVJZChvYmplY3RTdG9yZUlkKQorICAgICAgICAsIG1faW5kZXhJZChpbmRleElkKQorICAg
ICAgICAsIG1fa2V5UGF0aChtZXRhZGF0YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQp
LmtleVBhdGgpCisgICAgICAgICwgbV9hdXRvSW5jcmVtZW50KG1ldGFkYXRhLm9iamVjdFN0b3Jl
cy5nZXQob2JqZWN0U3RvcmVJZCkuYXV0b0luY3JlbWVudCkKKyAgICAgICAgLCBtX2tleVJhbmdl
KGtleVJhbmdlKQorICAgICAgICAsIG1fY3Vyc29yVHlwZShjdXJzb3JUeXBlKQorICAgICAgICAs
IG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKKyAgICB7CisgICAgICAgIEFTU0VSVChtZXRhZGF0YS5v
YmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpLmlkID09IG9iamVjdFN0b3JlSWQpOworICAg
IH0KKworICAgIGNvbnN0IFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IG1fYmFja2luZ1N0b3JlOwor
ICAgIGNvbnN0IGludDY0X3QgbV9kYXRhYmFzZUlkOworICAgIGNvbnN0IGludDY0X3QgbV9vYmpl
Y3RTdG9yZUlkOworICAgIGNvbnN0IGludDY0X3QgbV9pbmRleElkOworICAgIGNvbnN0IElEQktl
eVBhdGggbV9rZXlQYXRoOworICAgIGNvbnN0IGJvb2wgbV9hdXRvSW5jcmVtZW50OworICAgIGNv
bnN0IFJlZlB0cjxJREJLZXlSYW5nZT4gbV9rZXlSYW5nZTsKKyAgICBjb25zdCBJREJDdXJzb3JC
YWNrZW5kSW50ZXJmYWNlOjpDdXJzb3JUeXBlIG1fY3Vyc29yVHlwZTsKKyAgICBjb25zdCBSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKK307CisKK2NsYXNzIFB1dE9wZXJhdGlvbiA6
IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24geworcHVibGljOgor
ICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlv
bj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIGludDY0
X3QgZGF0YWJhc2VJZCwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmUs
IFZlY3Rvcjx1aW50OF90PiYgdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIElEQkRhdGFi
YXNlQmFja2VuZEludGVyZmFjZTo6UHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4gY2FsbGJhY2tzLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25zdCBW
ZWN0b3I8SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleXM+JiBpbmRleEtleXMp
CisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFB1dE9wZXJhdGlvbihiYWNraW5n
U3RvcmUsIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlLCB2YWx1ZSwga2V5LCBwdXRNb2RlLCBjYWxs
YmFja3MsIGluZGV4SWRzLCBpbmRleEtleXMpKTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIHBl
cmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOworcHJpdmF0ZToKKyAgICBQdXRPcGVy
YXRpb24oUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSwgaW50NjRfdCBk
YXRhYmFzZUlkLCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZSwgVmVj
dG9yPHVpbnQ4X3Q+JiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgSURCRGF0YWJhc2VC
YWNrZW5kSW50ZXJmYWNlOjpQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBjYWxsYmFja3MsIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMsIGNvbnN0IFZlY3Rv
cjxJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OkluZGV4S2V5cz4mIGluZGV4S2V5cykKKyAg
ICAgICAgOiBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUpCisgICAgICAgICwgbV9kYXRhYmFz
ZUlkKGRhdGFiYXNlSWQpCisgICAgICAgICwgbV9vYmplY3RTdG9yZShvYmplY3RTdG9yZSkKKyAg
ICAgICAgLCBtX2tleShrZXkpCisgICAgICAgICwgbV9wdXRNb2RlKHB1dE1vZGUpCisgICAgICAg
ICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQorICAgICAgICAsIG1faW5kZXhJZHMoaW5kZXhJZHMp
CisgICAgICAgICwgbV9pbmRleEtleXMoaW5kZXhLZXlzKQorICAgIHsKKyAgICAgICAgbV92YWx1
ZS5zd2FwKHZhbHVlKTsKKyAgICB9CisKKyAgICBjb25zdCBSZWZQdHI8SURCQmFja2luZ1N0b3Jl
PiBtX2JhY2tpbmdTdG9yZTsKKyAgICBjb25zdCBpbnQ2NF90IG1fZGF0YWJhc2VJZDsKKyAgICBj
b25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG1fb2JqZWN0U3RvcmU7CisgICAgVmVjdG9yPHVp
bnQ4X3Q+IG1fdmFsdWU7CisgICAgY29uc3QgUmVmUHRyPElEQktleT4gbV9rZXk7CisgICAgY29u
c3QgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpQdXRNb2RlIG1fcHV0TW9kZTsKKyAgICBj
b25zdCBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKKyAgICBjb25zdCBWZWN0b3I8
aW50NjRfdD4gbV9pbmRleElkczsKKyAgICBjb25zdCBWZWN0b3I8SURCRGF0YWJhc2VCYWNrZW5k
SW50ZXJmYWNlOjpJbmRleEtleXM+IG1faW5kZXhLZXlzOworfTsKKworY2xhc3MgU2V0SW5kZXhl
c1JlYWR5T3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJh
dGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbDo6T3BlcmF0aW9uPiBjcmVhdGUoc2l6ZV90IGluZGV4Q291bnQpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFNldEluZGV4ZXNSZWFkeU9wZXJhdGlvbihpbmRleENv
dW50KSk7CisgICAgfQorICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGwqKTsKK3ByaXZhdGU6CisgICAgU2V0SW5kZXhlc1JlYWR5T3BlcmF0aW9uKHNpemVf
dCBpbmRleENvdW50KQorICAgICAgICA6IG1faW5kZXhDb3VudChpbmRleENvdW50KQorICAgIHsK
KyAgICB9CisKKyAgICBjb25zdCBzaXplX3QgbV9pbmRleENvdW50OworfTsKKworY2xhc3MgT3Bl
bkN1cnNvck9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVy
YXRpb24geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBi
YWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBp
bnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCB1bnNpZ25l
ZCBzaG9ydCBkaXJlY3Rpb24sIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OkN1cnNvclR5cGUg
Y3Vyc29yVHlwZSwgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSB0YXNrVHlw
ZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKKyAgICB7CisgICAgICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgT3BlbkN1cnNvck9wZXJhdGlvbihiYWNraW5nU3RvcmUsIGRhdGFi
YXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtleVJhbmdlLCBkaXJlY3Rpb24sIGN1cnNv
clR5cGUsIHRhc2tUeXBlLCBjYWxsYmFja3MpKTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIHBl
cmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOworcHJpdmF0ZToKKyAgICBPcGVuQ3Vy
c29yT3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQs
IFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rp
b24sIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgSURC
RGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSB0YXNrVHlwZSwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+IGNhbGxiYWNrcykKKyAgICAgICAgOiBtX2JhY2tpbmdTdG9yZShiYWNraW5n
U3RvcmUpCisgICAgICAgICwgbV9kYXRhYmFzZUlkKGRhdGFiYXNlSWQpCisgICAgICAgICwgbV9v
YmplY3RTdG9yZUlkKG9iamVjdFN0b3JlSWQpCisgICAgICAgICwgbV9pbmRleElkKGluZGV4SWQp
CisgICAgICAgICwgbV9rZXlSYW5nZShrZXlSYW5nZSkKKyAgICAgICAgLCBtX2RpcmVjdGlvbihk
aXJlY3Rpb24pCisgICAgICAgICwgbV9jdXJzb3JUeXBlKGN1cnNvclR5cGUpCisgICAgICAgICwg
bV90YXNrVHlwZSh0YXNrVHlwZSkKKyAgICAgICAgLCBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCisg
ICAgeworICAgIH0KKworICAgIGNvbnN0IFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IG1fYmFja2lu
Z1N0b3JlOworICAgIGNvbnN0IGludDY0X3QgbV9kYXRhYmFzZUlkOworICAgIGNvbnN0IGludDY0
X3QgbV9vYmplY3RTdG9yZUlkOworICAgIGNvbnN0IGludDY0X3QgbV9pbmRleElkOworICAgIGNv
bnN0IFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IG1fa2V5UmFuZ2U7CisgICAgY29uc3QgdW5zaWdu
ZWQgc2hvcnQgbV9kaXJlY3Rpb247CisgICAgY29uc3QgSURCQ3Vyc29yQmFja2VuZEludGVyZmFj
ZTo6Q3Vyc29yVHlwZSBtX2N1cnNvclR5cGU7CisgICAgY29uc3QgSURCRGF0YWJhc2VCYWNrZW5k
SW50ZXJmYWNlOjpUYXNrVHlwZSBtX3Rhc2tUeXBlOworICAgIGNvbnN0IFJlZlB0cjxJREJDYWxs
YmFja3M+IG1fY2FsbGJhY2tzOworfTsKKworY2xhc3MgQ291bnRPcGVyYXRpb24gOiBwdWJsaWMg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0
ZShQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRy
PElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNr
cykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ291bnRPcGVyYXRpb24oYmFj
a2luZ1N0b3JlLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBrZXlSYW5nZSwg
Y2FsbGJhY2tzKSk7CisgICAgfQorICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGwqKTsKK3ByaXZhdGU6CisgICAgQ291bnRPcGVyYXRpb24oUGFzc1JlZlB0
cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5n
ZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCisgICAgICAg
IDogbV9iYWNraW5nU3RvcmUoYmFja2luZ1N0b3JlKQorICAgICAgICAsIG1fZGF0YWJhc2VJZChk
YXRhYmFzZUlkKQorICAgICAgICAsIG1fb2JqZWN0U3RvcmVJZChvYmplY3RTdG9yZUlkKQorICAg
ICAgICAsIG1faW5kZXhJZChpbmRleElkKQorICAgICAgICAsIG1fa2V5UmFuZ2Uoa2V5UmFuZ2Up
CisgICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQorICAgIHsKKyAgICB9CisKKyAgICBj
b25zdCBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBtX2JhY2tpbmdTdG9yZTsKKyAgICBjb25zdCBp
bnQ2NF90IG1fZGF0YWJhc2VJZDsKKyAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJZDsK
KyAgICBjb25zdCBpbnQ2NF90IG1faW5kZXhJZDsKKyAgICBjb25zdCBSZWZQdHI8SURCS2V5UmFu
Z2U+IG1fa2V5UmFuZ2U7CisgICAgY29uc3QgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFj
a3M7Cit9OworCitjbGFzcyBEZWxldGVSYW5nZU9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3du
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQ
dHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKKyAgICB7CisgICAgICAgIHJldHVybiBh
ZG9wdFB0cihuZXcgRGVsZXRlUmFuZ2VPcGVyYXRpb24oYmFja2luZ1N0b3JlLCBkYXRhYmFzZUlk
LCBvYmplY3RTdG9yZUlkLCBrZXlSYW5nZSwgY2FsbGJhY2tzKSk7CisgICAgfQorICAgIHZpcnR1
YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqKTsKK3ByaXZhdGU6Cisg
ICAgRGVsZXRlUmFuZ2VPcGVyYXRpb24oUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tp
bmdTdG9yZSwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NS
ZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzKQorICAgICAgICA6IG1fYmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKKyAgICAgICAg
LCBtX2RhdGFiYXNlSWQoZGF0YWJhc2VJZCkKKyAgICAgICAgLCBtX29iamVjdFN0b3JlSWQob2Jq
ZWN0U3RvcmVJZCkKKyAgICAgICAgLCBtX2tleVJhbmdlKGtleVJhbmdlKQorICAgICAgICAsIG1f
Y2FsbGJhY2tzKGNhbGxiYWNrcykKKyAgICB7CisgICAgfQorCisgICAgY29uc3QgUmVmUHRyPElE
QkJhY2tpbmdTdG9yZT4gbV9iYWNraW5nU3RvcmU7CisgICAgY29uc3QgaW50NjRfdCBtX2RhdGFi
YXNlSWQ7CisgICAgY29uc3QgaW50NjRfdCBtX29iamVjdFN0b3JlSWQ7CisgICAgY29uc3QgUmVm
UHRyPElEQktleVJhbmdlPiBtX2tleVJhbmdlOworICAgIGNvbnN0IFJlZlB0cjxJREJDYWxsYmFj
a3M+IG1fY2FsbGJhY2tzOworfTsKKworY2xhc3MgQ2xlYXJPcGVyYXRpb24gOiBwdWJsaWMgSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQ
YXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxi
YWNrcykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ2xlYXJPcGVyYXRpb24o
YmFja2luZ1N0b3JlLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBjYWxsYmFja3MpKTsKKyAg
ICB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCop
OworcHJpdmF0ZToKKyAgICBDbGVhck9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9y
ZT4gYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKKyAgICAgICAgOiBtX2JhY2tp
bmdTdG9yZShiYWNraW5nU3RvcmUpCisgICAgICAgICwgbV9kYXRhYmFzZUlkKGRhdGFiYXNlSWQp
CisgICAgICAgICwgbV9vYmplY3RTdG9yZUlkKG9iamVjdFN0b3JlSWQpCisgICAgICAgICwgbV9j
YWxsYmFja3MoY2FsbGJhY2tzKQorICAgIHsKKyAgICB9CisKKyAgICBjb25zdCBSZWZQdHI8SURC
QmFja2luZ1N0b3JlPiBtX2JhY2tpbmdTdG9yZTsKKyAgICBjb25zdCBpbnQ2NF90IG1fZGF0YWJh
c2VJZDsKKyAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJZDsKKyAgICBjb25zdCBSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKK307CiAKIGNsYXNzIElEQkRhdGFiYXNlQmFj
a2VuZEltcGw6OlBlbmRpbmdPcGVuQ2FsbCB7CiBwdWJsaWM6CkBAIC0zMTYsNDQgKzUwNCwzNzgg
QEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjphYm9ydChpbnQ2NF90IHRyYW5zYWN0aW9u
SWQpCiAgICAgbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpLT5hYm9ydCgpOwogfQog
Ci12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmdldChpbnQ2NF90IHRyYW5zYWN0aW9uSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktl
eVJhbmdlPiwgYm9vbCBrZXlPbmx5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pCit2b2lkIElE
QkRhdGFiYXNlQmFja2VuZEltcGw6OmdldChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBr
ZXlSYW5nZSwgYm9vbCBrZXlPbmx5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJh
Y2tzKQogewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIFJlZlB0cjxJREJDYWxsYmFj
a3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKKyAgICBBU1NFUlQobV90cmFuc2FjdGlvbnMu
Y29udGFpbnModHJhbnNhY3Rpb25JZCkpOworICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwq
IHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOworCisgICAg
dHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhHZXRPcGVyYXRpb246OmNyZWF0ZShtX2JhY2tpbmdT
dG9yZSwgbWV0YWRhdGEoKSwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5UmFuZ2UsIGtleU9u
bHkgPyBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpLZXlPbmx5IDogSURCQ3Vyc29yQmFja2Vu
ZEludGVyZmFjZTo6S2V5QW5kVmFsdWUsIGNhbGxiYWNrcykpOwogfQogCi12b2lkIElEQkRhdGFi
YXNlQmFja2VuZEltcGw6OnB1dChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgVmVjdG9yPHVpbnQ4X3Q+KiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+LCBQdXRN
b2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5k
ZXhJZHMsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JikKK3ZvaWQgR2V0T3BlcmF0aW9uOjpwZXJm
b3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQogewotICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIElEQl9UUkFDRSgiR2V0T3BlcmF0aW9uIik7CisKKyAgICBS
ZWZQdHI8SURCS2V5PiBrZXk7CisKKyAgICBpZiAobV9rZXlSYW5nZS0+aXNPbmx5S2V5KCkpCisg
ICAgICAgIGtleSA9IG1fa2V5UmFuZ2UtPmxvd2VyKCk7CisgICAgZWxzZSB7CisgICAgICAgIFJl
ZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gYmFja2luZ1N0b3JlQ3Vyc29yOworICAgICAg
ICBpZiAobV9pbmRleElkID09IElEQkluZGV4TWV0YWRhdGE6OkludmFsaWRJZCkgeworICAgICAg
ICAgICAgQVNTRVJUKG1fY3Vyc29yVHlwZSAhPSBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpL
ZXlPbmx5KTsKKyAgICAgICAgICAgIC8vIE9iamVjdFN0b3JlIFJldHJpZXZhbCBPcGVyYXRpb24K
KyAgICAgICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IG1fYmFja2luZ1N0b3JlLT5vcGVuT2Jq
ZWN0U3RvcmVDdXJzb3IodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1f
ZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCBtX2tleVJhbmdlLmdldCgpLCBJREJDdXJzb3I6
Ok5FWFQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKG1fY3Vyc29yVHlwZSA9
PSBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpLZXlPbmx5KQorICAgICAgICAgICAgICAgIC8v
IEluZGV4IFZhbHVlIFJldHJpZXZhbCBPcGVyYXRpb24KKyAgICAgICAgICAgICAgICBiYWNraW5n
U3RvcmVDdXJzb3IgPSBtX2JhY2tpbmdTdG9yZS0+b3BlbkluZGV4S2V5Q3Vyc29yKHRyYW5zYWN0
aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3Rv
cmVJZCwgbV9pbmRleElkLCBtX2tleVJhbmdlLmdldCgpLCBJREJDdXJzb3I6Ok5FWFQpOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIC8vIEluZGV4IFJlZmVyZW5jZWQgVmFsdWUg
UmV0cmlldmFsIE9wZXJhdGlvbgorICAgICAgICAgICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9
IG1fYmFja2luZ1N0b3JlLT5vcGVuSW5kZXhDdXJzb3IodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9y
ZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCBtX2luZGV4SWQs
IG1fa2V5UmFuZ2UuZ2V0KCksIElEQkN1cnNvcjo6TkVYVCk7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoIWJhY2tpbmdTdG9yZUN1cnNvcikgeworICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9u
U3VjY2VzcygpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAga2V5
ID0gYmFja2luZ1N0b3JlQ3Vyc29yLT5rZXkoKTsKKyAgICB9CisKKyAgICBSZWZQdHI8SURCS2V5
PiBwcmltYXJ5S2V5OworICAgIGJvb2wgb2s7CisgICAgaWYgKG1faW5kZXhJZCA9PSBJREJJbmRl
eE1ldGFkYXRhOjpJbnZhbGlkSWQpIHsKKyAgICAgICAgLy8gT2JqZWN0IFN0b3JlIFJldHJpZXZh
bCBPcGVyYXRpb24KKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZhbHVlOworICAgICAgICBvayA9
IG1fYmFja2luZ1N0b3JlLT5nZXRSZWNvcmQodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5z
YWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCAqa2V5LCB2YWx1ZSk7Cisg
ICAgICAgIGlmICghb2spIHsKKyAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRh
dGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAi
SW50ZXJuYWwgZXJyb3IgaW4gZ2V0UmVjb3JkLiIpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmICh2YWx1ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIG1f
Y2FsbGJhY2tzLT5vblN1Y2Nlc3MoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChtX2F1dG9JbmNyZW1lbnQgJiYgIW1fa2V5UGF0aC5pc051bGwoKSkgewor
ICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVkU2NyaXB0VmFsdWU6
OmNyZWF0ZUZyb21XaXJlQnl0ZXModmFsdWUpLCBrZXksIG1fa2V5UGF0aCk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmVCeXRlcyh2YWx1ZSkpOworICAgICAg
ICByZXR1cm47CisKKyAgICB9CisKKyAgICAvLyBGcm9tIGhlcmUgd2UgYXJlIGRlYWxpbmcgb25s
eSB3aXRoIGluZGV4ZXMuCisgICAgb2sgPSBtX2JhY2tpbmdTdG9yZS0+Z2V0UHJpbWFyeUtleVZp
YUluZGV4KHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNl
SWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRleElkLCAqa2V5LCBwcmltYXJ5S2V5KTsKKyAgICBp
ZiAoIW9rKSB7CisgICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6
OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJy
b3IgaW4gZ2V0UHJpbWFyeUtleVZpYUluZGV4LiIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBpZiAobV9jdXJzb3JUeXBlID09IElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OktleU9u
bHkpIHsKKyAgICAgICAgLy8gSW5kZXggVmFsdWUgUmV0cmlldmFsIE9wZXJhdGlvbgorICAgICAg
ICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKHByaW1hcnlLZXkuZ2V0KCkpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgLy8gSW5kZXggUmVmZXJlbmNlZCBWYWx1ZSBSZXRyaWV2YWwgT3Bl
cmF0aW9uCisgICAgVmVjdG9yPHVpbnQ4X3Q+IHZhbHVlOworICAgIG9rID0gbV9iYWNraW5nU3Rv
cmUtPmdldFJlY29yZCh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9k
YXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsICpwcmltYXJ5S2V5LCB2YWx1ZSk7CisgICAgaWYg
KCFvaykgeworICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpj
cmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9y
IGluIGdldFJlY29yZC4iKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAodmFs
dWUuaXNFbXB0eSgpKSB7CisgICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAobV9hdXRvSW5jcmVtZW50ICYmICFtX2tleVBhdGgu
aXNOdWxsKCkpIHsKKyAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVkU2Ny
aXB0VmFsdWU6OmNyZWF0ZUZyb21XaXJlQnl0ZXModmFsdWUpLCBwcmltYXJ5S2V5LCBtX2tleVBh
dGgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3Mo
U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9tV2lyZUJ5dGVzKHZhbHVlKSk7CiB9CiAK
LXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6c2V0SW5kZXhLZXlzKGludDY0X3QgdHJhbnNh
Y3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQktleT4gcHJwUHJp
bWFyeUtleSwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPElu
ZGV4S2V5cz4mKQordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpwdXQoaW50NjRfdCB0cmFu
c2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFZlY3Rvcjx1aW50OF90PiogdmFsdWUs
IFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IHBycENhbGxiYWNrcywgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywg
Y29uc3QgVmVjdG9yPEluZGV4S2V5cz4mIGluZGV4S2V5cykKIHsKLSAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICBJREJfVFJBQ0UoIklEQkRhdGFiYXNlQmFja2VuZEltcGw6OnB1dCIpOwor
CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOworICAg
IEFTU0VSVChtX3RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbklkKSk7CisgICAgSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQo
dHJhbnNhY3Rpb25JZCk7CisgICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgIT0gSURCVHJh
bnNhY3Rpb246OlJFQURfT05MWSk7CisKKyAgICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRh
IG9iamVjdFN0b3JlTWV0YWRhdGEgPSBtZXRhZGF0YSgpLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0
U3RvcmVJZCk7CisKKyAgICBBU1NFUlQob2JqZWN0U3RvcmVNZXRhZGF0YS5hdXRvSW5jcmVtZW50
IHx8IGtleS5nZXQoKSk7CisKKyAgICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKFB1dE9wZXJh
dGlvbjo6Y3JlYXRlKG1fYmFja2luZ1N0b3JlLCBpZCgpLCBvYmplY3RTdG9yZU1ldGFkYXRhLCAq
dmFsdWUsIGtleSwgcHV0TW9kZSwgY2FsbGJhY2tzLCBpbmRleElkcywgaW5kZXhLZXlzKSk7Cit9
CisKK3ZvaWQgUHV0T3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwq
IHRyYW5zYWN0aW9uKQoreworICAgIElEQl9UUkFDRSgiT2JqZWN0U3RvcmVTdG9yYWdlT3BlcmF0
aW9uIik7CisgICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgIT0gSURCVHJhbnNhY3Rpb246
OlJFQURfT05MWSk7CisgICAgQVNTRVJUKG1faW5kZXhJZHMuc2l6ZSgpID09IG1faW5kZXhLZXlz
LnNpemUoKSk7CisgICAgYm9vbCBrZXlXYXNHZW5lcmF0ZWQgPSBmYWxzZTsKKworICAgIFJlZlB0
cjxJREJLZXk+IGtleTsKKyAgICBpZiAobV9wdXRNb2RlICE9IElEQkRhdGFiYXNlQmFja2VuZElu
dGVyZmFjZTo6Q3Vyc29yVXBkYXRlICYmIG1fb2JqZWN0U3RvcmUuYXV0b0luY3JlbWVudCAmJiAh
bV9rZXkpIHsKKyAgICAgICAgUmVmUHRyPElEQktleT4gYXV0b0luY0tleSA9IElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OmdlbmVyYXRlS2V5KG1fYmFja2luZ1N0b3JlLCB0cmFuc2FjdGlvbiwg
bV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlLmlkKTsKKyAgICAgICAga2V5V2FzR2VuZXJhdGVk
ID0gdHJ1ZTsKKyAgICAgICAgaWYgKCFhdXRvSW5jS2V5LT5pc1ZhbGlkKCkpIHsKKyAgICAgICAg
ICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6Q29uc3RyYWludEVycm9yLCAiTWF4aW11bSBrZXkgZ2VuZXJhdG9yIHZh
bHVlIHJlYWNoZWQuIikpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IGtleSA9IGF1dG9JbmNLZXk7CisgICAgfSBlbHNlCisgICAgICAgIGtleSA9IG1fa2V5OworCisg
ICAgQVNTRVJUKGtleSAmJiBrZXktPmlzVmFsaWQoKSk7CisKKyAgICBJREJCYWNraW5nU3RvcmU6
OlJlY29yZElkZW50aWZpZXIgcmVjb3JkSWRlbnRpZmllcjsKKyAgICBpZiAobV9wdXRNb2RlID09
IElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6QWRkT25seSkgeworICAgICAgICBib29sIGZv
dW5kID0gZmFsc2U7CisgICAgICAgIGJvb2wgb2sgPSBtX2JhY2tpbmdTdG9yZS0+a2V5RXhpc3Rz
SW5PYmplY3RTdG9yZSh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9k
YXRhYmFzZUlkLCBtX29iamVjdFN0b3JlLmlkLCAqa2V5LCAmcmVjb3JkSWRlbnRpZmllciwgZm91
bmQpOworICAgICAgICBpZiAoIW9rKSB7CisgICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJv
cihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25F
cnJvciwgIkludGVybmFsIGVycm9yIGNoZWNraW5nIGtleSBleGlzdGVuY2UuIikpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmIChmb3VuZCkgeworICAgICAgICAg
ICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpDb25zdHJhaW50RXJyb3IsICJLZXkgYWxyZWFkeSBleGlzdHMgaW4gdGhl
IG9iamVjdCBzdG9yZS4iKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBWZWN0b3I8T3duUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OkluZGV4V3Jp
dGVyPiA+IGluZGV4V3JpdGVyczsKKyAgICBTdHJpbmcgZXJyb3JNZXNzYWdlOworICAgIGJvb2wg
b2JleXNDb25zdHJhaW50cyA9IGZhbHNlOworICAgIGJvb2wgYmFja2luZ1N0b3JlU3VjY2VzcyA9
IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Om1ha2VJbmRleFdyaXRlcnModHJhbnNhY3Rpb24s
IG1fYmFja2luZ1N0b3JlLmdldCgpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmUsIGtleSwg
a2V5V2FzR2VuZXJhdGVkLCBtX2luZGV4SWRzLCBtX2luZGV4S2V5cywgJmluZGV4V3JpdGVycywg
JmVycm9yTWVzc2FnZSwgb2JleXNDb25zdHJhaW50cyk7CisgICAgaWYgKCFiYWNraW5nU3RvcmVT
dWNjZXNzKSB7CisgICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6
OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJy
b3I6IGJhY2tpbmcgc3RvcmUgZXJyb3IgdXBkYXRpbmcgaW5kZXgga2V5cy4iKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgaWYgKCFvYmV5c0NvbnN0cmFpbnRzKSB7CisgICAgICAgIG1f
Y2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6Q29uc3RyYWludEVycm9yLCBlcnJvck1lc3NhZ2UpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIC8vIEJlZm9yZSB0aGlzIHBvaW50LCBkb24ndCBkbyBhbnkgbXV0YXRp
b24uIEFmdGVyIHRoaXMgcG9pbnQsIHJvbGxiYWNrIHRoZSB0cmFuc2FjdGlvbiBpbiBjYXNlIG9m
IGVycm9yLgorICAgIGJhY2tpbmdTdG9yZVN1Y2Nlc3MgPSBtX2JhY2tpbmdTdG9yZS0+cHV0UmVj
b3JkKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQs
IG1fb2JqZWN0U3RvcmUuaWQsICprZXksIG1fdmFsdWUsICZyZWNvcmRJZGVudGlmaWVyKTsKKyAg
ICBpZiAoIWJhY2tpbmdTdG9yZVN1Y2Nlc3MpIHsKKyAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJy
b3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3du
RXJyb3IsICJJbnRlcm5hbCBlcnJvcjogYmFja2luZyBzdG9yZSBlcnJvciBwZXJmb3JtaW5nIHB1
dC9hZGQuIikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBpbmRleFdyaXRlcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6SW5kZXhXcml0ZXIqIGluZGV4V3JpdGVyID0gaW5kZXhXcml0ZXJzW2ld
LmdldCgpOworICAgICAgICBpbmRleFdyaXRlci0+d3JpdGVJbmRleEtleXMocmVjb3JkSWRlbnRp
ZmllciwgKm1fYmFja2luZ1N0b3JlLCB0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rp
b24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlLmlkKTsKKyAgICB9CisKKyAgICBpZiAo
bV9vYmplY3RTdG9yZS5hdXRvSW5jcmVtZW50ICYmIG1fcHV0TW9kZSAhPSBJREJEYXRhYmFzZUJh
Y2tlbmRJbnRlcmZhY2U6OkN1cnNvclVwZGF0ZSAmJiBrZXktPnR5cGUoKSA9PSBJREJLZXk6Ok51
bWJlclR5cGUpIHsKKyAgICAgICAgYm9vbCBvayA9IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6
OnVwZGF0ZUtleUdlbmVyYXRvcihtX2JhY2tpbmdTdG9yZSwgdHJhbnNhY3Rpb24sIG1fZGF0YWJh
c2VJZCwgbV9vYmplY3RTdG9yZS5pZCwga2V5LmdldCgpLCAha2V5V2FzR2VuZXJhdGVkKTsKKyAg
ICAgICAgaWYgKCFvaykgeworICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0
YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJ
bnRlcm5hbCBlcnJvciB1cGRhdGluZyBrZXkgZ2VuZXJhdG9yLiIpKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3Moa2V5
LnJlbGVhc2UoKSk7Cit9CisKKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRJbmRl
eEtleXMoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NS
ZWZQdHI8SURCS2V5PiBwcnBQcmltYXJ5S2V5LCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4
SWRzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYgaW5kZXhLZXlzKQoreworICAgIElEQl9UUkFD
RSgiSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6c2V0SW5kZXhLZXlzIik7CisgICAgaWYgKCFtX3Ry
YW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbklkKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9u
cy5nZXQodHJhbnNhY3Rpb25JZCk7CisgICAgaWYgKHRyYW5zYWN0aW9uLT5pc0ZpbmlzaGVkKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIFJlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkgPSBwcnBQ
cmltYXJ5S2V5OworICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IHN0b3JlID0gYmFja2luZ1N0
b3JlKCk7CisgICAgLy8gRklYTUU6IFRoaXMgbWV0aG9kIGNvdWxkIGJlIGFzeW5jaHJvbm91cywg
YnV0IHdlIG5lZWQgdG8gZXZhbHVhdGUgaWYgaXQncyB3b3J0aCB0aGUgZXh0cmEgY29tcGxleGl0
eS4KKyAgICBJREJCYWNraW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXIgcmVjb3JkSWRlbnRpZmll
cjsKKyAgICBib29sIGZvdW5kID0gZmFsc2U7CisgICAgYm9vbCBvayA9IHN0b3JlLT5rZXlFeGlz
dHNJbk9iamVjdFN0b3JlKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBt
X21ldGFkYXRhLmlkLCBvYmplY3RTdG9yZUlkLCAqcHJpbWFyeUtleSwgJnJlY29yZElkZW50aWZp
ZXIsIGZvdW5kKTsKKyAgICBpZiAoIW9rKSB7CisgICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydChJ
REJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJv
ciwgIkludGVybmFsIGVycm9yIHNldHRpbmcgaW5kZXgga2V5cy4iKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgaWYgKCFmb3VuZCkgeworICAgICAgICBSZWZQdHI8SURCRGF0YWJhc2VF
cnJvcj4gZXJyb3IgPSBJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRp
b246OlVua25vd25FcnJvciwgU3RyaW5nOjpmb3JtYXQoIkludGVybmFsIGVycm9yIHNldHRpbmcg
aW5kZXgga2V5cyBmb3Igb2JqZWN0IHN0b3JlICMlbGQuIiwgb2JqZWN0U3RvcmVJZCkpOworICAg
ICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoZXJyb3IucmVsZWFzZSgpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIFZlY3RvcjxPd25QdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6
SW5kZXhXcml0ZXI+ID4gaW5kZXhXcml0ZXJzOworICAgIFN0cmluZyBlcnJvck1lc3NhZ2U7Cisg
ICAgYm9vbCBvYmV5c0NvbnN0cmFpbnRzID0gZmFsc2U7CisgICAgQVNTRVJUKG1ldGFkYXRhKCku
b2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSWQpKTsKKyAgICBjb25zdCBJREJPYmpl
Y3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1ldGFkYXRhID0gbWV0YWRhdGEoKS5vYmplY3RT
dG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpOworICAgIGJvb2wgYmFja2luZ1N0b3JlU3VjY2VzcyA9
IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Om1ha2VJbmRleFdyaXRlcnModHJhbnNhY3Rpb24s
IHN0b3JlLmdldCgpLCBpZCgpLCBvYmplY3RTdG9yZU1ldGFkYXRhLCBwcmltYXJ5S2V5LCBmYWxz
ZSwgaW5kZXhJZHMsIGluZGV4S2V5cywgJmluZGV4V3JpdGVycywgJmVycm9yTWVzc2FnZSwgb2Jl
eXNDb25zdHJhaW50cyk7CisgICAgaWYgKCFiYWNraW5nU3RvcmVTdWNjZXNzKSB7CisgICAgICAg
IHRyYW5zYWN0aW9uLT5hYm9ydChJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VF
eGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yOiBiYWNraW5nIHN0b3JlIGVy
cm9yIHVwZGF0aW5nIGluZGV4IGtleXMuIikpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IGlmICghb2JleXNDb25zdHJhaW50cykgeworICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoSURC
RGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDb25zdHJhaW50RXJy
b3IsIGVycm9yTWVzc2FnZSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBpbmRleFdyaXRlcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6SW5kZXhXcml0ZXIqIGluZGV4V3JpdGVyID0gaW5kZXhX
cml0ZXJzW2ldLmdldCgpOworICAgICAgICBpbmRleFdyaXRlci0+d3JpdGVJbmRleEtleXMocmVj
b3JkSWRlbnRpZmllciwgKnN0b3JlLmdldCgpLCB0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJh
bnNhY3Rpb24oKSwgaWQoKSwgb2JqZWN0U3RvcmVJZCk7CisgICAgfQogfQogCiB2b2lkIElEQkRh
dGFiYXNlQmFja2VuZEltcGw6OnNldEluZGV4ZXNSZWFkeShpbnQ2NF90IHRyYW5zYWN0aW9uSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcykK
IHsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OnNldEluZGV4ZXNSZWFkeSIpOworCisgICAgaWYgKCFtX3RyYW5zYWN0
aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbklkKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQo
dHJhbnNhY3Rpb25JZCk7CisgICAgaWYgKHRyYW5zYWN0aW9uLT5pc0ZpbmlzaGVkKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U6OlByZWVtcHRpdmVUYXNrLCBTZXRJbmRleGVzUmVhZHlP
cGVyYXRpb246OmNyZWF0ZShpbmRleElkcy5zaXplKCkpKSkKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiB9CiAKLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6b3BlbkN1cnNvcihp
bnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRl
eElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgdW5zaWduZWQgc2hvcnQgZGly
ZWN0aW9uLCBib29sIGtleU9ubHksIFRhc2tUeXBlIHRhc2tUeXBlLCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4gY2FsbGJhY2tzKQordm9pZCBTZXRJbmRleGVzUmVhZHlPcGVyYXRpb246OnBlcmZv
cm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24pCiB7Ci0gICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgSURCX1RSQUNFKCJTZXRJbmRleGVzUmVhZHlPcGVyYXRpb24i
KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1faW5kZXhDb3VudDsgKytpKQorICAgICAg
ICB0cmFuc2FjdGlvbi0+ZGlkQ29tcGxldGVQcmVlbXB0aXZlRXZlbnQoKTsKIH0KIAotdm9pZCBJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjb3VudChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdl
PiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KQordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBs
OjpvcGVuQ3Vyc29yKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCB1bnNp
Z25lZCBzaG9ydCBkaXJlY3Rpb24sIGJvb2wga2V5T25seSwgVGFza1R5cGUgdGFza1R5cGUsIFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MpCiB7Ci0gICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJh
Y2tzOworICAgIEFTU0VSVChtX3RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbklkKSk7
CisgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0
aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7CisKKyAgICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNr
KE9wZW5DdXJzb3JPcGVyYXRpb246OmNyZWF0ZShtX2JhY2tpbmdTdG9yZSwgaWQoKSwgb2JqZWN0
U3RvcmVJZCwgaW5kZXhJZCwga2V5UmFuZ2UsIGRpcmVjdGlvbiwga2V5T25seSA/IElEQkN1cnNv
ckJhY2tlbmRJbnRlcmZhY2U6OktleU9ubHkgOiBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpL
ZXlBbmRWYWx1ZSwgdGFza1R5cGUsIGNhbGxiYWNrcykpOwogfQogCi12b2lkIElEQkRhdGFiYXNl
QmFja2VuZEltcGw6OmRlbGV0ZVJhbmdlKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+KQordm9pZCBPcGVuQ3Vyc29yT3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQogewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIElEQl9UUkFDRSgiT3BlbkN1cnNvck9wZXJhdGlvbiIpOworCisgICAgLy8gVGhlIGZyb250
ZW5kIGhhcyBiZWd1biBpbmRleGluZywgc28gdGhpcyBwYXVzZXMgdGhlIHRyYW5zYWN0aW9uCisg
ICAgLy8gdW50aWwgdGhlIGluZGV4aW5nIGlzIGNvbXBsZXRlLiBUaGlzIGNhbid0IGhhcHBlbiBh
bnkgZWFybGllcgorICAgIC8vIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBzd2l0Y2ggdG8gZWFy
bHkgbW9kZSBpbiBjYXNlIG11bHRpcGxlCisgICAgLy8gaW5kZXhlcyBhcmUgYmVpbmcgY3JlYXRl
ZCBpbiBhIHJvdywgd2l0aCBwdXQoKSdzIGluIGJldHdlZW4uCisgICAgaWYgKG1fdGFza1R5cGUg
PT0gSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpQcmVlbXB0aXZlVGFzaykKKyAgICAgICAg
dHJhbnNhY3Rpb24tPmFkZFByZWVtcHRpdmVFdmVudCgpOworCisgICAgSURCQ3Vyc29yOjpEaXJl
Y3Rpb24gZGlyZWN0aW9uID0gc3RhdGljX2Nhc3Q8SURCQ3Vyc29yOjpEaXJlY3Rpb24+KG1fZGly
ZWN0aW9uKTsKKyAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGJhY2tpbmdTdG9y
ZUN1cnNvcjsKKyAgICBpZiAobV9pbmRleElkID09IElEQkluZGV4TWV0YWRhdGE6OkludmFsaWRJ
ZCkgeworICAgICAgICBBU1NFUlQobV9jdXJzb3JUeXBlICE9IElEQkN1cnNvckJhY2tlbmRJbnRl
cmZhY2U6OktleU9ubHkpOworICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX2JhY2tpbmdT
dG9yZS0+b3Blbk9iamVjdFN0b3JlQ3Vyc29yKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFu
c2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9rZXlSYW5nZS5nZXQo
KSwgZGlyZWN0aW9uKTsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQobV90YXNrVHlwZSA9
PSBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6Ok5vcm1hbFRhc2spOworICAgICAgICBpZiAo
bV9jdXJzb3JUeXBlID09IElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OktleU9ubHkpCisgICAg
ICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX2JhY2tpbmdTdG9yZS0+b3BlbkluZGV4S2V5
Q3Vyc29yKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNl
SWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRleElkLCBtX2tleVJhbmdlLmdldCgpLCBkaXJlY3Rp
b24pOworICAgICAgICBlbHNlCisgICAgICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX2Jh
Y2tpbmdTdG9yZS0+b3BlbkluZGV4Q3Vyc29yKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFu
c2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRleElkLCBtX2tl
eVJhbmdlLmdldCgpLCBkaXJlY3Rpb24pOworICAgIH0KKworICAgIGlmICghYmFja2luZ1N0b3Jl
Q3Vyc29yKSB7CisgICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3Moc3RhdGljX2Nhc3Q8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlKj4oMCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSB0YXNrVHlwZShzdGF0aWNf
Y2FzdDxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlPihtX3Rhc2tUeXBl
KSk7CisgICAgUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbXBsPiBjdXJzb3IgPSBJREJDdXJzb3JC
YWNrZW5kSW1wbDo6Y3JlYXRlKGJhY2tpbmdTdG9yZUN1cnNvci5nZXQoKSwgbV9jdXJzb3JUeXBl
LCB0YXNrVHlwZSwgdHJhbnNhY3Rpb24sIG1fb2JqZWN0U3RvcmVJZCk7CisgICAgbV9jYWxsYmFj
a3MtPm9uU3VjY2VzcyhjdXJzb3IsIGN1cnNvci0+a2V5KCksIGN1cnNvci0+cHJpbWFyeUtleSgp
LCBjdXJzb3ItPnZhbHVlKCkpOwogfQogCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNs
ZWFyKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4pCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNvdW50KGlu
dDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4
SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4gcHJwQ2FsbGJhY2tzKQogewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIFJl
ZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKKyAgICBJREJfVFJB
Q0UoIklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNvdW50Iik7CisgICAgQVNTRVJUKG1fdHJhbnNh
Y3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uSWQpKTsKKyAgICBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsK
KyAgICBBU1NFUlQobWV0YWRhdGEoKS5vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmVJ
ZCkpOworICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soQ291bnRPcGVyYXRpb246OmNyZWF0
ZShtX2JhY2tpbmdTdG9yZSwgaWQoKSwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5UmFuZ2Us
IGNhbGxiYWNrcykpOworfQorCit2b2lkIENvdW50T3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQoreworICAgIElEQl9UUkFDRSgiT2JqZWN0
U3RvcmVDb3VudE9wZXJhdGlvbiIpOworICAgIHVpbnQzMl90IGNvdW50ID0gMDsKKyAgICBSZWZQ
dHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNvcjsKKworICAgIGlm
IChtX2luZGV4SWQgPT0gSURCSW5kZXhNZXRhZGF0YTo6SW52YWxpZElkKQorICAgICAgICBiYWNr
aW5nU3RvcmVDdXJzb3IgPSBtX2JhY2tpbmdTdG9yZS0+b3Blbk9iamVjdFN0b3JlS2V5Q3Vyc29y
KHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1f
b2JqZWN0U3RvcmVJZCwgbV9rZXlSYW5nZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhUKTsKKyAgICBl
bHNlCisgICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IG1fYmFja2luZ1N0b3JlLT5vcGVuSW5k
ZXhLZXlDdXJzb3IodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0
YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCBtX2luZGV4SWQsIG1fa2V5UmFuZ2UuZ2V0KCksIElE
QkN1cnNvcjo6TkVYVCk7CisgICAgaWYgKCFiYWNraW5nU3RvcmVDdXJzb3IpIHsKKyAgICAgICAg
bV9jYWxsYmFja3MtPm9uU3VjY2Vzcyhjb3VudCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBkbyB7CisgICAgICAgICsrY291bnQ7CisgICAgfSB3aGlsZSAoYmFja2luZ1N0b3JlQ3Vy
c29yLT5jb250aW51ZUZ1bmN0aW9uKDApKTsKKworICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3Mo
Y291bnQpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZVJhbmdlKGlu
dDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElE
QktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNr
cykKK3sKKyAgICBJREJfVFJBQ0UoIklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZSIpOwor
CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOworICAg
IEFTU0VSVChtX3RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbklkKSk7CisgICAgSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQo
dHJhbnNhY3Rpb25JZCk7CisgICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgIT0gSURCVHJh
bnNhY3Rpb246OlJFQURfT05MWSk7CisKKyAgICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKERl
bGV0ZVJhbmdlT3BlcmF0aW9uOjpjcmVhdGUobV9iYWNraW5nU3RvcmUsIGlkKCksIG9iamVjdFN0
b3JlSWQsIGtleVJhbmdlLCBjYWxsYmFja3MpKTsKK30KKwordm9pZCBEZWxldGVSYW5nZU9wZXJh
dGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKK3sK
KyAgICBJREJfVFJBQ0UoIkRlbGV0ZVJhbmdlT3BlcmF0aW9uIik7CisKKyAgICBSZWZQdHI8SURC
QmFja2luZ1N0b3JlOjpDdXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNvciA9IG1fYmFja2luZ1N0b3Jl
LT5vcGVuT2JqZWN0U3RvcmVDdXJzb3IodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0
aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCBtX2tleVJhbmdlLmdldCgpLCBJ
REJDdXJzb3I6Ok5FWFQpOworICAgIGlmIChiYWNraW5nU3RvcmVDdXJzb3IpIHsKKyAgICAgICAg
ZG8geworICAgICAgICAgICAgbV9iYWNraW5nU3RvcmUtPmRlbGV0ZVJlY29yZCh0cmFuc2FjdGlv
bi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3Jl
SWQsIGJhY2tpbmdTdG9yZUN1cnNvci0+cmVjb3JkSWRlbnRpZmllcigpKTsKKyAgICAgICAgfSB3
aGlsZSAoYmFja2luZ1N0b3JlQ3Vyc29yLT5jb250aW51ZUZ1bmN0aW9uKDApKTsKKyAgICB9CisK
KyAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKCk7Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDo6Y2xlYXIoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MpCit7CisgICAgSURCX1RS
QUNFKCJJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjbGVhciIpOworCisgICAgUmVmUHRyPElEQkNh
bGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOworICAgIEFTU0VSVChtX3RyYW5zYWN0
aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbklkKSk7CisgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbCogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7Cisg
ICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgIT0gSURCVHJhbnNhY3Rpb246OlJFQURfT05M
WSk7CisKKyAgICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKENsZWFyT3BlcmF0aW9uOjpjcmVh
dGUobV9iYWNraW5nU3RvcmUsIGlkKCksIG9iamVjdFN0b3JlSWQsIGNhbGxiYWNrcykpOworfQor
Cit2b2lkIENsZWFyT3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwq
IHRyYW5zYWN0aW9uKQoreworICAgIElEQl9UUkFDRSgiT2JqZWN0U3RvcmVDbGVhck9wZXJhdGlv
biIpOworICAgIG1fYmFja2luZ1N0b3JlLT5jbGVhck9iamVjdFN0b3JlKHRyYW5zYWN0aW9uLT5i
YWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCk7
CisgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcygpOwogfQogCiB2b2lkIElEQkRhdGFiYXNlQmFj
a2VuZEltcGw6OkRlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCSW5kZXguY3BwCmluZGV4IDc2MjY0ODhlYTBmZDNlNzBkNzQ2NDQ0MmYyZWM4
NWQ3YTRmNTliMDAuLmE4YzE5NjA2MDNhNjBlMmZiOGJjOTZlNDYyMDMwYWI4ZWM5OTEzZDEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5jcHAKQEAgLTQz
LDE2ICs0MywxNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBzaG9ydCBkZWZhdWx0RGlyZWN0aW9uID0gSURCQ3Vyc29yOjpORVhUOwogCi1JREJJbmRleDo6
SURCSW5kZXgoY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgbWV0YWRhdGEsIFBhc3NSZWZQdHI8SURC
SW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBiYWNrZW5kLCBJREJPYmplY3RTdG9yZSogb2JqZWN0U3Rv
cmUsIElEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKK0lEQkluZGV4OjpJREJJbmRleChjb25z
dCBJREJJbmRleE1ldGFkYXRhJiBtZXRhZGF0YSwgSURCT2JqZWN0U3RvcmUqIG9iamVjdFN0b3Jl
LCBJREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCiAgICAgOiBtX21ldGFkYXRhKG1ldGFkYXRh
KQotICAgICwgbV9iYWNrZW5kKGJhY2tlbmQpCiAgICAgLCBtX29iamVjdFN0b3JlKG9iamVjdFN0
b3JlKQogICAgICwgbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKICAgICAsIG1fZGVsZXRlZChm
YWxzZSkKIHsKLSAgICBBU1NFUlQobV9iYWNrZW5kKTsKICAgICBBU1NFUlQobV9vYmplY3RTdG9y
ZSk7CiAgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb24pOworICAgIEFTU0VSVChtX21ldGFkYXRhLmlk
ICE9IElEQkluZGV4TWV0YWRhdGE6OkludmFsaWRJZCk7CiB9CiAKIElEQkluZGV4Ojp+SURCSW5k
ZXgoKQpAQCAtNzYsOCArNzUsNyBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQkluZGV4Ojpv
cGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhcwogCiAgICAgUmVm
UHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURC
QW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwogICAgIHJlcXVlc3QtPnNl
dEN1cnNvckRldGFpbHMoSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6S2V5QW5kVmFsdWUsIGRp
cmVjdGlvbik7Ci0gICAgbV9iYWNrZW5kLT5vcGVuQ3Vyc29yKGtleVJhbmdlLCBkaXJlY3Rpb24s
IHJlcXVlc3QsIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOwotICAgIEFTU0VSVCghZWMp
OworICAgIGJhY2tlbmREQigpLT5vcGVuQ3Vyc29yKG1fdHJhbnNhY3Rpb24tPmlkKCksIG1fb2Jq
ZWN0U3RvcmUtPmlkKCksIG1fbWV0YWRhdGEuaWQsIGtleVJhbmdlLCBkaXJlY3Rpb24sIGZhbHNl
LCBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6Ok5vcm1hbFRhc2ssIHJlcXVlc3QpOwogICAg
IHJldHVybiByZXF1ZXN0OwogfQogCkBAIC0xMDIsOCArMTAwLDggQEAgUGFzc1JlZlB0cjxJREJS
ZXF1ZXN0PiBJREJJbmRleDo6Y291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
UGFzc1JlZlAKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIFJlZlB0cjxJREJSZXF1ZXN0
PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRo
aXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKLSAgICBtX2JhY2tlbmQtPmNvdW50KGtleVJhbmdl
LCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKLSAgICBBU1NFUlQoIWVj
KTsKKyAgICBJREJEYXRhYmFzZU1ldGFkYXRhIG1ldGFkYXRhKG1fdHJhbnNhY3Rpb24tPmRiKCkt
Pm1ldGFkYXRhKCkpOworICAgIGJhY2tlbmREQigpLT5jb3VudChtX3RyYW5zYWN0aW9uLT5pZCgp
LCBtX29iamVjdFN0b3JlLT5pZCgpLCBtX21ldGFkYXRhLmlkLCBrZXlSYW5nZSwgcmVxdWVzdCk7
CiAgICAgcmV0dXJuIHJlcXVlc3Q7CiB9CiAKQEAgLTEzMyw4ICsxMzEsNyBAQCBQYXNzUmVmUHRy
PElEQlJlcXVlc3Q+IElEQkluZGV4OjpvcGVuS2V5Q3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQsCiAKICAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVl
c3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5n
ZXQoKSk7CiAgICAgcmVxdWVzdC0+c2V0Q3Vyc29yRGV0YWlscyhJREJDdXJzb3JCYWNrZW5kSW50
ZXJmYWNlOjpLZXlPbmx5LCBkaXJlY3Rpb24pOwotICAgIG1fYmFja2VuZC0+b3BlbktleUN1cnNv
cihrZXlSYW5nZSwgZGlyZWN0aW9uLCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCks
IGVjKTsKLSAgICBBU1NFUlQoIWVjKTsKKyAgICBiYWNrZW5kREIoKS0+b3BlbkN1cnNvcihtX3Ry
YW5zYWN0aW9uLT5pZCgpLCBtX29iamVjdFN0b3JlLT5pZCgpLCBtX21ldGFkYXRhLmlkLCBrZXlS
YW5nZSwgZGlyZWN0aW9uLCB0cnVlLCBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6Ok5vcm1h
bFRhc2ssIHJlcXVlc3QpOwogICAgIHJldHVybiByZXF1ZXN0OwogfQogCkBAIC0xNzMsOCArMTcw
LDcgQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJJbmRleDo6Z2V0KFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHIKICAgICB9CiAKICAgICBSZWZQdHI8SURCUmVx
dWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0
ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7Ci0gICAgbV9iYWNrZW5kLT5nZXQoa2V5UmFu
Z2UsIHJlcXVlc3QsIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOwotICAgIEFTU0VSVCgh
ZWMpOworICAgIGJhY2tlbmREQigpLT5nZXQobV90cmFuc2FjdGlvbi0+aWQoKSwgbV9vYmplY3RT
dG9yZS0+aWQoKSwgbV9tZXRhZGF0YS5pZCwga2V5UmFuZ2UsIGZhbHNlLCByZXF1ZXN0KTsKICAg
ICByZXR1cm4gcmVxdWVzdDsKIH0KIApAQCAtMjA1LDExICsyMDEsMTUgQEAgUGFzc1JlZlB0cjxJ
REJSZXF1ZXN0PiBJREJJbmRleDo6Z2V0S2V5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQsIFBhc3NSZWYKICAgICB9CiAKICAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElE
QlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2Fj
dGlvbi5nZXQoKSk7Ci0gICAgbV9iYWNrZW5kLT5nZXRLZXkoa2V5UmFuZ2UsIHJlcXVlc3QsIG1f
dHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOwotICAgIEFTU0VSVCghZWMpOworICAgIGJhY2tl
bmREQigpLT5nZXQobV90cmFuc2FjdGlvbi0+aWQoKSwgbV9vYmplY3RTdG9yZS0+aWQoKSwgbV9t
ZXRhZGF0YS5pZCwga2V5UmFuZ2UsIHRydWUsIHJlcXVlc3QpOwogICAgIHJldHVybiByZXF1ZXN0
OwogfQogCitJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UqIElEQkluZGV4OjpiYWNrZW5kREIo
KSBjb25zdAoreworICAgIHJldHVybiBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kREIoKTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJB
U0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRl
eC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguaAppbmRleCBj
ZjRmMWNmMzNjODQxMTJmOTVlNDA5OGYyMTY4MzA0NjI1MjMxMGEzLi4zMDcyZjE1Yjk4MTIyZjgx
ZDQ0NGQ0OTUxZDI5MjA3YjcyZWU4NmVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJJbmRleC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkluZGV4LmgKQEAgLTI3LDcgKzI3LDcgQEAKICNkZWZpbmUgSURCSW5kZXhfaAog
CiAjaW5jbHVkZSAiSURCQ3Vyc29yLmgiCi0jaW5jbHVkZSAiSURCSW5kZXhCYWNrZW5kSW50ZXJm
YWNlLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2UuaCIKICNpbmNsdWRlICJJREJLZXlQYXRoLmgi
CiAjaW5jbHVkZSAiSURCS2V5UmFuZ2UuaCIKICNpbmNsdWRlICJJREJNZXRhZGF0YS5oIgpAQCAt
NDUsOSArNDUsOSBAQCBjbGFzcyBJREJPYmplY3RTdG9yZTsKIAogY2xhc3MgSURCSW5kZXggOiBw
dWJsaWMgU2NyaXB0V3JhcHBhYmxlLCBwdWJsaWMgUmVmQ291bnRlZDxJREJJbmRleD4gewogcHVi
bGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkluZGV4PiBjcmVhdGUoY29uc3QgSURCSW5k
ZXhNZXRhZGF0YSYgbWV0YWRhdGEsIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNl
PiBiYWNrZW5kLCBJREJPYmplY3RTdG9yZSogb2JqZWN0U3RvcmUsIElEQlRyYW5zYWN0aW9uKiB0
cmFuc2FjdGlvbikKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJJbmRleD4gY3JlYXRlKGNvbnN0
IElEQkluZGV4TWV0YWRhdGEmIG1ldGFkYXRhLCBJREJPYmplY3RTdG9yZSogb2JqZWN0U3RvcmUs
IElEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgSURCSW5kZXgobWV0YWRhdGEsIGJhY2tlbmQsIG9iamVjdFN0b3JlLCB0cmFuc2Fj
dGlvbikpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkluZGV4KG1ldGFkYXRhLCBv
YmplY3RTdG9yZSwgdHJhbnNhY3Rpb24pKTsKICAgICB9CiAgICAgfklEQkluZGV4KCk7CiAKQEAg
LTgzLDExICs4MywxMiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIG1hcmtEZWxldGVkKCkgeyBtX2Rl
bGV0ZWQgPSB0cnVlOyB9CiAKKyAgICBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UqIGJhY2tl
bmREQigpIGNvbnN0OworCiBwcml2YXRlOgotICAgIElEQkluZGV4KGNvbnN0IElEQkluZGV4TWV0
YWRhdGEmLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4sIElEQk9iamVjdFN0
b3JlKiwgSURCVHJhbnNhY3Rpb24qKTsKKyAgICBJREJJbmRleChjb25zdCBJREJJbmRleE1ldGFk
YXRhJiwgSURCT2JqZWN0U3RvcmUqLCBJREJUcmFuc2FjdGlvbiopOwogCiAgICAgSURCSW5kZXhN
ZXRhZGF0YSBtX21ldGFkYXRhOwotICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+
IG1fYmFja2VuZDsKICAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmU+IG1fb2JqZWN0U3RvcmU7CiAg
ICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBtX3RyYW5zYWN0aW9uOwogICAgIGJvb2wgbV9kZWxl
dGVkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5k
ZXhCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJ
bmRleEJhY2tlbmRJbXBsLmNwcAppbmRleCBlOTIzNDQ3NDkzMWJjNjcwYmU3ZjkwYjNmMWMzNWMy
OTFjMTM4MDJhLi44OTQwYzVlN2UxOGJiYTRhODA1NTY0ZTRiZTg0NmY5MzI0NzNiODFhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJ
bXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJh
Y2tlbmRJbXBsLmNwcApAQCAtNDIsOTQgKzQyLDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1jbGFzcyBJREJJbmRleEJhY2tlbmRJbXBsOjpPcGVuSW5kZXhDdXJzb3JPcGVyYXRpb24gOiBw
dWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKLXB1YmxpYzoKLSAg
ICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+
IGNyZWF0ZShQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4LCBQYXNzUmVmUHRy
PElEQktleVJhbmdlPiBrZXlSYW5nZSwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBJREJDdXJz
b3JCYWNrZW5kSW50ZXJmYWNlOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiBjYWxsYmFja3MpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3
IE9wZW5JbmRleEN1cnNvck9wZXJhdGlvbihpbmRleCwga2V5UmFuZ2UsIGRpcmVjdGlvbiwgY3Vy
c29yVHlwZSwgY2FsbGJhY2tzKSk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGwqKTsKLXByaXZhdGU6Ci0gICAgT3BlbkluZGV4Q3Vyc29y
T3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgsIFBhc3NSZWZQ
dHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIElEQkN1
cnNvckJhY2tlbmRJbnRlcmZhY2U6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+IGNhbGxiYWNrcykKLSAgICAgICAgOiBtX2luZGV4KGluZGV4KQotICAgICAg
ICAsIG1fa2V5UmFuZ2Uoa2V5UmFuZ2UpCi0gICAgICAgICwgbV9kaXJlY3Rpb24oZGlyZWN0aW9u
KQotICAgICAgICAsIG1fY3Vyc29yVHlwZShjdXJzb3JUeXBlKQotICAgICAgICAsIG1fY2FsbGJh
Y2tzKGNhbGxiYWNrcykKLSAgICB7Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQkluZGV4QmFja2Vu
ZEltcGw+IG1faW5kZXg7Ci0gICAgUmVmUHRyPElEQktleVJhbmdlPiBtX2tleVJhbmdlOwotICAg
IHVuc2lnbmVkIHNob3J0IG1fZGlyZWN0aW9uOwotICAgIElEQkN1cnNvckJhY2tlbmRJbnRlcmZh
Y2U6OkN1cnNvclR5cGUgbV9jdXJzb3JUeXBlOwotICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IG1f
Y2FsbGJhY2tzOwotfTsKLQotY2xhc3MgSURCSW5kZXhCYWNrZW5kSW1wbDo6SW5kZXhDb3VudE9w
ZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24gewot
cHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6
Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgs
IFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4gY2FsbGJhY2tzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBJbmRleENv
dW50T3BlcmF0aW9uKGluZGV4LCBrZXlSYW5nZSwgY2FsbGJhY2tzKSk7Ci0gICAgfQotICAgIHZp
cnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqKTsKLXByaXZhdGU6
Ci0gICAgSW5kZXhDb3VudE9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+
IGluZGV4LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IGNhbGxiYWNrcykKLSAgICAgICAgOiBtX2luZGV4KGluZGV4KQotICAgICAgICAs
IG1fa2V5UmFuZ2Uoa2V5UmFuZ2UpCi0gICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQot
ICAgIHsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gbV9pbmRleDsK
LSAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IG1fa2V5UmFuZ2U7Ci0gICAgUmVmUHRyPElEQkNhbGxi
YWNrcz4gbV9jYWxsYmFja3M7Ci19OwotCi1jbGFzcyBJREJJbmRleEJhY2tlbmRJbXBsOjpJbmRl
eFJlZmVyZW5jZWRWYWx1ZVJldHJpZXZhbE9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsOjpPcGVyYXRpb24gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8
SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJh
bmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBJbmRleFJlZmVyZW5jZWRWYWx1ZVJldHJpZXZhbE9wZXJhdGlv
bihpbmRleCwga2V5UmFuZ2UsIGNhbGxiYWNrcykpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQg
cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7Ci1wcml2YXRlOgotICAgIEluZGV4
UmVmZXJlbmNlZFZhbHVlUmV0cmlldmFsT3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCSW5kZXhCYWNr
ZW5kSW1wbD4gaW5kZXgsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQotICAgICAgICA6IG1faW5kZXgoaW5kZXgpCi0g
ICAgICAgICwgbV9rZXlSYW5nZShrZXlSYW5nZSkKLSAgICAgICAgLCBtX2NhbGxiYWNrcyhjYWxs
YmFja3MpCi0gICAgewotICAgIH0KLQotICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBt
X2luZGV4OwotICAgIFJlZlB0cjxJREJLZXlSYW5nZT4gbV9rZXlSYW5nZTsKLSAgICBSZWZQdHI8
SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKLX07Ci0KLWNsYXNzIElEQkluZGV4QmFja2VuZElt
cGw6OkluZGV4VmFsdWVSZXRyaWV2YWxPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElE
QkluZGV4QmFja2VuZEltcGw+IGluZGV4LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5n
ZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgSW5kZXhWYWx1ZVJldHJpZXZhbE9wZXJhdGlvbihpbmRleCwga2V5
UmFuZ2UsIGNhbGxiYWNrcykpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7Ci1wcml2YXRlOgotICAgIEluZGV4VmFsdWVSZXRyaWV2
YWxPcGVyYXRpb24oUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCwgUGFzc1Jl
ZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxs
YmFja3MpCi0gICAgICAgIDogbV9pbmRleChpbmRleCkKLSAgICAgICAgLCBtX2tleVJhbmdlKGtl
eVJhbmdlKQotICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKLSAgICB7Ci0gICAgfQot
Ci0gICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IG1faW5kZXg7Ci0gICAgUmVmUHRyPElE
QktleVJhbmdlPiBtX2tleVJhbmdlOwotICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJh
Y2tzOwotfTsKLQotCi1JREJJbmRleEJhY2tlbmRJbXBsOjpJREJJbmRleEJhY2tlbmRJbXBsKGNv
bnN0IElEQkRhdGFiYXNlQmFja2VuZEltcGwqIGRhdGFiYXNlLCBJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsKiBvYmplY3RTdG9yZUJhY2tlbmQsIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIG1ldGFk
YXRhKQorSURCSW5kZXhCYWNrZW5kSW1wbDo6SURCSW5kZXhCYWNrZW5kSW1wbChjb25zdCBJREJE
YXRhYmFzZUJhY2tlbmRJbXBsKiBkYXRhYmFzZSwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgbWV0
YWRhdGEpCiAgICAgOiBtX2RhdGFiYXNlKGRhdGFiYXNlKQotICAgICwgbV9vYmplY3RTdG9yZUJh
Y2tlbmQob2JqZWN0U3RvcmVCYWNrZW5kKQogICAgICwgbV9tZXRhZGF0YShtZXRhZGF0YSkKIHsK
IH0KQEAgLTEzOCwxNTkgKzUyLDYgQEAgSURCSW5kZXhCYWNrZW5kSW1wbDo6fklEQkluZGV4QmFj
a2VuZEltcGwoKQogewogfQogCi12b2lkIElEQkluZGV4QmFja2VuZEltcGw6Ok9wZW5JbmRleEN1
cnNvck9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2Fj
dGlvbikKLXsKLSAgICBJREJfVFJBQ0UoIk9wZW5JbmRleEN1cnNvck9wZXJhdGlvbiIpOwotICAg
IElEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVjdGlvbiA9IHN0YXRpY19jYXN0PElEQkN1cnNvcjo6
RGlyZWN0aW9uPihtX2RpcmVjdGlvbik7Ci0KLSAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpD
dXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNvcjsKLQotICAgIHN3aXRjaCAobV9jdXJzb3JUeXBlKSB7
Ci0gICAgY2FzZSBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpLZXlPbmx5OgotICAgICAgICBi
YWNraW5nU3RvcmVDdXJzb3IgPSBtX2luZGV4LT5iYWNraW5nU3RvcmUoKS0+b3BlbkluZGV4S2V5
Q3Vyc29yKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2luZGV4LT5k
YXRhYmFzZUlkKCksIG1faW5kZXgtPm1fb2JqZWN0U3RvcmVCYWNrZW5kLT5pZCgpLCBtX2luZGV4
LT5pZCgpLCBtX2tleVJhbmdlLmdldCgpLCBkaXJlY3Rpb24pOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OktleUFuZFZhbHVlOgotICAgICAgICBi
YWNraW5nU3RvcmVDdXJzb3IgPSBtX2luZGV4LT5iYWNraW5nU3RvcmUoKS0+b3BlbkluZGV4Q3Vy
c29yKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2luZGV4LT5kYXRh
YmFzZUlkKCksIG1faW5kZXgtPm1fb2JqZWN0U3RvcmVCYWNrZW5kLT5pZCgpLCBtX2luZGV4LT5p
ZCgpLCBtX2tleVJhbmdlLmdldCgpLCBkaXJlY3Rpb24pOwotICAgICAgICBicmVhazsKLSAgICBk
ZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0KLSAgICBpZiAo
IWJhY2tpbmdTdG9yZUN1cnNvcikgewotICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKHN0
YXRpY19jYXN0PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSo+KDApKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIFJlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW1wbD4gY3Vyc29yID0gSURCQ3Vy
c29yQmFja2VuZEltcGw6OmNyZWF0ZShiYWNraW5nU3RvcmVDdXJzb3IuZ2V0KCksIG1fY3Vyc29y
VHlwZSwgdHJhbnNhY3Rpb24sIG1faW5kZXgtPm1fb2JqZWN0U3RvcmVCYWNrZW5kKTsKLSAgICBt
X2NhbGxiYWNrcy0+b25TdWNjZXNzKGN1cnNvciwgY3Vyc29yLT5rZXkoKSwgY3Vyc29yLT5wcmlt
YXJ5S2V5KCksIGN1cnNvci0+dmFsdWUoKSk7Ci19Ci0KLXZvaWQgSURCSW5kZXhCYWNrZW5kSW1w
bDo6b3BlbkN1cnNvcihQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgdW5zaWduZWQg
c2hvcnQgZGlyZWN0aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRpb25D
b2RlJikKLXsKLSAgICBJREJfVFJBQ0UoIklEQkluZGV4QmFja2VuZEltcGw6Om9wZW5DdXJzb3Ii
KTsKLSAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7Ci0g
ICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0gSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbDo6ZnJvbSh0cmFuc2FjdGlvblB0cik7Ci0gICAgdHJhbnNhY3Rp
b24tPnNjaGVkdWxlVGFzayhPcGVuSW5kZXhDdXJzb3JPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBr
ZXlSYW5nZSwgZGlyZWN0aW9uLCBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpLZXlBbmRWYWx1
ZSwgY2FsbGJhY2tzKSk7Ci19Ci0KLXZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6b3BlbktleUN1
cnNvcihQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgdW5zaWduZWQgc2hvcnQgZGly
ZWN0aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRpb25Db2RlJikKLXsK
LSAgICBJREJfVFJBQ0UoIklEQkluZGV4QmFja2VuZEltcGw6Om9wZW5LZXlDdXJzb3IiKTsKLSAg
ICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7Ci0gICAgUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0gSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbDo6ZnJvbSh0cmFuc2FjdGlvblB0cik7Ci0gICAgdHJhbnNhY3Rpb24tPnNj
aGVkdWxlVGFzayhPcGVuSW5kZXhDdXJzb3JPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBrZXlSYW5n
ZSwgZGlyZWN0aW9uLCBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpLZXlPbmx5LCBjYWxsYmFj
a3MpKTsKLX0KLQotdm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpJbmRleENvdW50T3BlcmF0aW9u
OjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQotewotICAg
IElEQl9UUkFDRSgiSW5kZXhDb3VudE9wZXJhdGlvbiIpOwotICAgIHVpbnQzMl90IGNvdW50ID0g
MDsKLQotICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gYmFja2luZ1N0b3JlQ3Vy
c29yID0gbV9pbmRleC0+YmFja2luZ1N0b3JlKCktPm9wZW5JbmRleEtleUN1cnNvcih0cmFuc2Fj
dGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9pbmRleC0+ZGF0YWJhc2VJZCgpLCBt
X2luZGV4LT5tX29iamVjdFN0b3JlQmFja2VuZC0+aWQoKSwgbV9pbmRleC0+aWQoKSwgbV9rZXlS
YW5nZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhUKTsKLSAgICBpZiAoIWJhY2tpbmdTdG9yZUN1cnNv
cikgewotICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKGNvdW50KTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGRvIHsKLSAgICAgICAgKytjb3VudDsKLSAgICB9IHdoaWxlIChi
YWNraW5nU3RvcmVDdXJzb3ItPmNvbnRpbnVlRnVuY3Rpb24oMCkpOwotCi0gICAgbV9jYWxsYmFj
a3MtPm9uU3VjY2Vzcyhjb3VudCk7Ci19Ci0KLXZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6Y291
bnQoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBwcnBDYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rp
b25QdHIsIEV4Y2VwdGlvbkNvZGUmKQotewotICAgIElEQl9UUkFDRSgiSURCSW5kZXhCYWNrZW5k
SW1wbDo6Y291bnQiKTsKLSAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBD
YWxsYmFja3M7Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0
aW9uID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6ZnJvbSh0cmFuc2FjdGlvblB0cik7Ci0g
ICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhJbmRleENvdW50T3BlcmF0aW9uOjpjcmVhdGUo
dGhpcywgcmFuZ2UsIGNhbGxiYWNrcykpOwotfQotCi12b2lkIElEQkluZGV4QmFja2VuZEltcGw6
OkluZGV4UmVmZXJlbmNlZFZhbHVlUmV0cmlldmFsT3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQotewotICAgIElEQl9UUkFDRSgiSW5kZXhS
ZWZlcmVuY2VkVmFsdWVSZXRyaWV2YWxPcGVyYXRpb24iKTsKLQotICAgIFJlZlB0cjxJREJLZXk+
IGtleTsKLQotICAgIGlmIChtX2tleVJhbmdlLT5pc09ubHlLZXkoKSkKLSAgICAgICAga2V5ID0g
bV9rZXlSYW5nZS0+bG93ZXIoKTsKLSAgICBlbHNlIHsKLSAgICAgICAgUmVmUHRyPElEQkJhY2tp
bmdTdG9yZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX2luZGV4LT5iYWNraW5nU3Rv
cmUoKS0+b3BlbkluZGV4Q3Vyc29yKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlv
bigpLCBtX2luZGV4LT5kYXRhYmFzZUlkKCksIG1faW5kZXgtPm1fb2JqZWN0U3RvcmVCYWNrZW5k
LT5pZCgpLCBtX2luZGV4LT5pZCgpLCBtX2tleVJhbmdlLmdldCgpLCBJREJDdXJzb3I6Ok5FWFQp
OwotCi0gICAgICAgIGlmICghYmFja2luZ1N0b3JlQ3Vyc29yKSB7Ci0gICAgICAgICAgICBtX2Nh
bGxiYWNrcy0+b25TdWNjZXNzKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICAgICAga2V5ID0gYmFja2luZ1N0b3JlQ3Vyc29yLT5rZXkoKTsKLSAgICB9Ci0KLSAgICBSZWZQ
dHI8SURCS2V5PiBwcmltYXJ5S2V5OwotICAgIGJvb2wgb2sgPSBtX2luZGV4LT5iYWNraW5nU3Rv
cmUoKS0+Z2V0UHJpbWFyeUtleVZpYUluZGV4KHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFu
c2FjdGlvbigpLCBtX2luZGV4LT5kYXRhYmFzZUlkKCksIG1faW5kZXgtPm1fb2JqZWN0U3RvcmVC
YWNrZW5kLT5pZCgpLCBtX2luZGV4LT5pZCgpLCAqa2V5LCBwcmltYXJ5S2V5KTsKLSAgICBpZiAo
IW9rKSB7Ci0gICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNy
ZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3Ig
aW4gZ2V0UHJpbWFyeUtleVZpYUluZGV4LiIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIFZlY3Rvcjx1aW50OF90PiB2YWx1ZTsKLSAgICBvayA9IG1faW5kZXgtPmJhY2tpbmdTdG9y
ZSgpLT5nZXRSZWNvcmQodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1f
aW5kZXgtPmRhdGFiYXNlSWQoKSwgbV9pbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmlkKCks
ICpwcmltYXJ5S2V5LCB2YWx1ZSk7Ci0gICAgaWYgKCFvaykgewotICAgICAgICBtX2NhbGxiYWNr
cy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246
OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yIGluIGdldFJlY29yZC4iKSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAodmFsdWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1f
Y2FsbGJhY2tzLT5vblN1Y2Nlc3MoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAo
bV9pbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmF1dG9JbmNyZW1lbnQoKSAmJiAhbV9pbmRl
eC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmtleVBhdGgoKS5pc051bGwoKSkgewotICAgICAgICBt
X2NhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdp
cmVCeXRlcyh2YWx1ZSksIHByaW1hcnlLZXksIG1faW5kZXgtPm1fb2JqZWN0U3RvcmVCYWNrZW5k
LT5rZXlQYXRoKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1fY2FsbGJhY2tzLT5v
blN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9tV2lyZUJ5dGVzKHZhbHVl
KSk7Ci19Ci0KLQotdm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpJbmRleFZhbHVlUmV0cmlldmFs
T3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9u
KQotewotICAgIElEQl9UUkFDRSgiSW5kZXhWYWx1ZVJldHJpZXZhbE9wZXJhdGlvbiIpOwotCi0g
ICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJzb3IgPSBt
X2luZGV4LT5iYWNraW5nU3RvcmUoKS0+b3BlbkluZGV4S2V5Q3Vyc29yKHRyYW5zYWN0aW9uLT5i
YWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2luZGV4LT5kYXRhYmFzZUlkKCksIG1faW5kZXgt
Pm1fb2JqZWN0U3RvcmVCYWNrZW5kLT5pZCgpLCBtX2luZGV4LT5pZCgpLCBtX2tleVJhbmdlLmdl
dCgpLCBJREJDdXJzb3I6Ok5FWFQpOwotCi0gICAgaWYgKCFiYWNraW5nU3RvcmVDdXJzb3IpIHsK
LSAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhzdGF0aWNfY2FzdDxJREJLZXkqPigwKSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCS2V5PiBrZXlSZXN1bHQ7
Ci0gICAgYm9vbCBvayA9IG1faW5kZXgtPmJhY2tpbmdTdG9yZSgpLT5nZXRQcmltYXJ5S2V5Vmlh
SW5kZXgodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1faW5kZXgtPmRh
dGFiYXNlSWQoKSwgbV9pbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmlkKCksIG1faW5kZXgt
PmlkKCksICpiYWNraW5nU3RvcmVDdXJzb3ItPmtleSgpLCBrZXlSZXN1bHQpOwotICAgIGlmICgh
b2spIHsKLSAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3Jl
YXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvciBp
biBnZXRQcmltYXJ5S2V5VmlhSW5kZXguIikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IGlmICgha2V5UmVzdWx0KSB7Ci0gICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3Moc3RhdGlj
X2Nhc3Q8SURCS2V5Kj4oMCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1fY2FsbGJh
Y2tzLT5vblN1Y2Nlc3Moa2V5UmVzdWx0LmdldCgpKTsKLX0KLQotdm9pZCBJREJJbmRleEJhY2tl
bmRJbXBsOjpnZXQoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZSogdHJhbnNhY3Rpb25QdHIsIEV4Y2VwdGlvbkNvZGUmKQotewotICAgIElEQl9UUkFDRSgiSURC
SW5kZXhCYWNrZW5kSW1wbDo6Z2V0Iik7Ci0gICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJh
Y2tzID0gcHJwQ2FsbGJhY2tzOwotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
PiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmZyb20odHJhbnNhY3Rp
b25QdHIpOwotICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soSW5kZXhSZWZlcmVuY2VkVmFs
dWVSZXRyaWV2YWxPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBrZXlSYW5nZSwgY2FsbGJhY2tzKSk7
Ci19Ci0KLXZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6Z2V0S2V5KFBhc3NSZWZQdHI8SURCS2V5
UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRpb25D
b2RlJikKLXsKLSAgICBJREJfVFJBQ0UoIklEQkluZGV4QmFja2VuZEltcGw6OmdldEtleSIpOwot
ICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKLSAgICBS
ZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsOjpmcm9tKHRyYW5zYWN0aW9uUHRyKTsKLSAgICB0cmFuc2FjdGlvbi0+
c2NoZWR1bGVUYXNrKEluZGV4VmFsdWVSZXRyaWV2YWxPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBr
ZXlSYW5nZSwgY2FsbGJhY2tzKSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2Vu
ZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5oCmluZGV4IDBjZDdmZTFh
ZDg4NDAxYTZiMjQ5YjJmYjhkYTNiNzVmYThmM2VjYmQuLjFhOTM5OTllMTYzM2Q0ZjdmYTcxZTli
Njg3NGRlMTgxMDFjMjBlOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmgKQEAgLTQyLDkgKzQyLDkgQEAgY2xhc3Mg
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDsKIAogY2xhc3MgSURCSW5kZXhCYWNrZW5kSW1wbCA6
IHB1YmxpYyBJREJJbmRleEJhY2tlbmRJbnRlcmZhY2UgewogcHVibGljOgotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGNyZWF0ZShjb25zdCBJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsKiBkYXRhYmFzZSwgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCogb2JqZWN0U3Rv
cmVCYWNrZW5kLCBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBtZXRhZGF0YSkKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBjcmVhdGUoY29uc3QgSURCRGF0YWJhc2VC
YWNrZW5kSW1wbCogZGF0YWJhc2UsIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIG1ldGFkYXRhKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJJbmRleEJhY2tlbmRJbXBsKGRh
dGFiYXNlLCBvYmplY3RTdG9yZUJhY2tlbmQsIG1ldGFkYXRhKSk7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgSURCSW5kZXhCYWNrZW5kSW1wbChkYXRhYmFzZSwgbWV0YWRhdGEpKTsKICAg
ICB9CiAgICAgdmlydHVhbCB+SURCSW5kZXhCYWNrZW5kSW1wbCgpOwogCkBAIC01NSwxMSArNTUs
MTEgQEAgcHVibGljOgogICAgIH0KIAogICAgIC8vIElEQkluZGV4QmFja2VuZEludGVyZmFjZQot
ICAgIHZpcnR1YWwgdm9pZCBvcGVuQ3Vyc29yKFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCB1bnNp
Z25lZCBzaG9ydCBkaXJlY3Rpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1YWwgdm9p
ZCBjb3VudChQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAg
dmlydHVhbCB2b2lkIG9wZW5LZXlDdXJzb3IoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIHVuc2ln
bmVkIHNob3J0IGRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdmlydHVhbCB2b2lk
IGdldChQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdmly
dHVhbCB2b2lkIGdldEtleShQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2Rl
Jik7CisgICAgdmlydHVhbCB2b2lkIG9wZW5DdXJzb3IoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4s
IHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgeyBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBjb3VudChQYXNzUmVmUHRyPElEQktleVJh
bmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2UqLCBFeGNlcHRpb25Db2RlJikgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorICAgIHZp
cnR1YWwgdm9pZCBvcGVuS2V5Q3Vyc29yKFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCB1bnNpZ25l
ZCBzaG9ydCBkaXJlY3Rpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpIHsgQVNTRVJUX05PVF9SRUFDSEVE
KCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZ2V0KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4
Y2VwdGlvbkNvZGUmKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisgICAgdmlydHVhbCB2b2lk
IGdldEtleShQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgeyBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsgfQogCiAgICAgSURCSW5kZXhNZXRhZGF0YSBtZXRhZGF0YSgpIGNv
bnN0IHsgcmV0dXJuIG1fbWV0YWRhdGE7IH0KICAgICBjb25zdCBTdHJpbmcmIG5hbWUoKSB7IHJl
dHVybiBtX21ldGFkYXRhLm5hbWU7IH0KQEAgLTY4LDEyICs2OCw3IEBAIHB1YmxpYzoKICAgICBj
b25zdCBib29sJiBtdWx0aUVudHJ5KCkgeyByZXR1cm4gbV9tZXRhZGF0YS5tdWx0aUVudHJ5OyB9
CiAKIHByaXZhdGU6Ci0gICAgSURCSW5kZXhCYWNrZW5kSW1wbChjb25zdCBJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsKiwgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCosIGNvbnN0IElEQkluZGV4TWV0
YWRhdGEmKTsKLQotICAgIGNsYXNzIE9wZW5JbmRleEN1cnNvck9wZXJhdGlvbjsKLSAgICBjbGFz
cyBJbmRleENvdW50T3BlcmF0aW9uOwotICAgIGNsYXNzIEluZGV4UmVmZXJlbmNlZFZhbHVlUmV0
cmlldmFsT3BlcmF0aW9uOwotICAgIGNsYXNzIEluZGV4VmFsdWVSZXRyaWV2YWxPcGVyYXRpb247
CisgICAgSURCSW5kZXhCYWNrZW5kSW1wbChjb25zdCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKiwg
Y29uc3QgSURCSW5kZXhNZXRhZGF0YSYpOwogCiAgICAgc3RhdGljIGNvbnN0IGludDY0X3QgSW52
YWxpZElkID0gMDsKIApAQCAtODIsOCArNzcsNiBAQCBwcml2YXRlOgogCiAgICAgY29uc3QgSURC
RGF0YWJhc2VCYWNrZW5kSW1wbCogbV9kYXRhYmFzZTsKIAotICAgIElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGwqIG1fb2JqZWN0U3RvcmVCYWNrZW5kOwotCiAgICAgSURCSW5kZXhNZXRhZGF0YSBt
X21ldGFkYXRhOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCT2JqZWN0U3RvcmUuY3BwCmluZGV4IGYxZDE3NmM0ZTM4ODdhZWNjYmY1ZGUwM2IxMDRk
ZWQwMTczYWVmMGEuLjg5MTI1M2Q5ZTA0YzkxZTk1YWVlYjIzMDQ1NDVmMjQ2NmEwMjcyNWUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3Jl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9y
ZS5jcHAKQEAgLTg3LDE0ICs4NywxMiBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVj
dFN0b3JlOjpnZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzcwogICAgICAg
ICByZXR1cm4gMDsKICAgICB9CiAgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJS
ZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rp
b24uZ2V0KCkpOwotICAgIG1fYmFja2VuZC0+Z2V0KGtleVJhbmdlLCByZXF1ZXN0LCBtX3RyYW5z
YWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKLSAgICBBU1NFUlQoIWVjKTsKKyAgICBiYWNrZW5kREIo
KS0+Z2V0KG1fdHJhbnNhY3Rpb24tPmlkKCksIGlkKCksIElEQkluZGV4TWV0YWRhdGE6OkludmFs
aWRJZCwga2V5UmFuZ2UsIGZhbHNlLCByZXF1ZXN0KTsKICAgICByZXR1cm4gcmVxdWVzdC5yZWxl
YXNlKCk7CiB9CiAKIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OmdldChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBF
eGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlOjpnZXQi
KTsKICAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlID0gSURCS2V5UmFuZ2U6Om9ubHko
a2V5LCBlYyk7CiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm4gMDsKQEAgLTIxNCw4ICsyMTIs
OCBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpwdXQoSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpQdXRNbwogICAgIH0KIAogICAgIFJlZlB0cjxJREJSZXF1
ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIHNvdXJjZSwgbV90cmFu
c2FjdGlvbi5nZXQoKSk7Ci0gICAgbV9iYWNrZW5kLT5wdXQoc2VyaWFsaXplZFZhbHVlLnJlbGVh
c2UoKSwga2V5LnJlbGVhc2UoKSwgcHV0TW9kZSwgcmVxdWVzdCwgbV90cmFuc2FjdGlvbi0+YmFj
a2VuZCgpLCBpbmRleElkcywgaW5kZXhLZXlzKTsKLSAgICBBU1NFUlQoIWVjKTsKKyAgICBWZWN0
b3I8dWludDhfdD4gdmFsdWVCeXRlcyA9IHNlcmlhbGl6ZWRWYWx1ZS0+dG9XaXJlQnl0ZXMoKTsK
KyAgICBiYWNrZW5kREIoKS0+cHV0KG1fdHJhbnNhY3Rpb24tPmlkKCksIGlkKCksICZ2YWx1ZUJ5
dGVzLCBrZXkucmVsZWFzZSgpLCBzdGF0aWNfY2FzdDxJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZh
Y2U6OlB1dE1vZGU+KHB1dE1vZGUpLCByZXF1ZXN0LCBpbmRleElkcywgaW5kZXhLZXlzKTsKICAg
ICByZXR1cm4gcmVxdWVzdC5yZWxlYXNlKCk7CiB9CiAKQEAgLTI0MCwxNCArMjM4LDEyIEBAIFBh
c3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OmRlbGV0ZUZ1bmN0aW9uKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvCiAgICAgfQogCiAgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJl
cXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyks
IG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwotICAgIG1fYmFja2VuZC0+ZGVsZXRlRnVuY3Rpb24oa2V5
UmFuZ2UsIHJlcXVlc3QsIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOwotICAgIEFTU0VS
VCghZWMpOworICAgIGJhY2tlbmREQigpLT5kZWxldGVSYW5nZShtX3RyYW5zYWN0aW9uLT5pZCgp
LCBpZCgpLCBrZXlSYW5nZSwgcmVxdWVzdCk7CiAgICAgcmV0dXJuIHJlcXVlc3QucmVsZWFzZSgp
OwogfQogCiBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpkZWxldGVGdW5j
dGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleT4g
a2V5LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3Jl
OjpkZWxldGUiKTsKICAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlID0gSURCS2V5UmFu
Z2U6Om9ubHkoa2V5LCBlYyk7CiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm4gMDsKQEAgLTI3
MSw4ICsyNjcsNyBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpjbGVh
cihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBFeAogICAgIH0KIAogICAgIFJlZlB0
cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFu
eTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKLSAgICBtX2JhY2tlbmQtPmNs
ZWFyKHJlcXVlc3QsIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOwotICAgIEFTU0VSVCgh
ZWMpOworICAgIGJhY2tlbmREQigpLT5jbGVhcihtX3RyYW5zYWN0aW9uLT5pZCgpLCBpZCgpLCBy
ZXF1ZXN0KTsKICAgICByZXR1cm4gcmVxdWVzdC5yZWxlYXNlKCk7CiB9CiAKQEAgLTI4NCw5ICsy
NzksOSBAQCBuYW1lc3BhY2UgewogLy8gY3Vyc29yIHN1Y2Nlc3MgaGFuZGxlcnMgYXJlIGtlcHQg
YWxpdmUuCiBjbGFzcyBJbmRleFBvcHVsYXRvciA6IHB1YmxpYyBFdmVudExpc3RlbmVyIHsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbmRleFBvcHVsYXRvcj4gY3JlYXRlKFBhc3NS
ZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBiYWNrZW5kLCBQYXNzUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24sIFBhc3NSZWZQdHI8
SURCUmVxdWVzdD4gcmVxdWVzdCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0
YSkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbmRleFBvcHVsYXRvcj4gY3JlYXRlKFBhc3NSZWZQ
dHI8SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlPiBiYWNrZW5kLCBpbnQ2NF90IHRyYW5zYWN0
aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5k
ZXhNZXRhZGF0YSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5kZXhQb3B1
bGF0b3IoYmFja2VuZCwgdHJhbnNhY3Rpb24sIGluZGV4TWV0YWRhdGEpKTsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBJbmRleFBvcHVsYXRvcihiYWNrZW5kLCB0cmFuc2FjdGlvbklkLCBv
YmplY3RTdG9yZUlkLCBpbmRleE1ldGFkYXRhKSk7CiAgICAgfQogCiAgICAgdmlydHVhbCBib29s
IG9wZXJhdG9yPT0oY29uc3QgRXZlbnRMaXN0ZW5lciYgb3RoZXIpCkBAIC0yOTUsMTIgKzI5MCwx
MSBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIEluZGV4UG9wdWxhdG9yKFBhc3NS
ZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBiYWNrZW5kLAotICAgICAgICAg
ICAgICAgICAgIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFu
c2FjdGlvbiwKLSAgICAgICAgICAgICAgICAgICBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRl
eE1ldGFkYXRhKQorICAgIEluZGV4UG9wdWxhdG9yKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNr
ZW5kSW50ZXJmYWNlPiBiYWNrZW5kLCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSkKICAgICAg
ICAgOiBFdmVudExpc3RlbmVyKENQUEV2ZW50TGlzdGVuZXJUeXBlKQotICAgICAgICAsIG1fb2Jq
ZWN0U3RvcmVCYWNrZW5kKGJhY2tlbmQpCi0gICAgICAgICwgbV90cmFuc2FjdGlvbih0cmFuc2Fj
dGlvbikKKyAgICAgICAgLCBtX2RhdGFiYXNlQmFja2VuZChiYWNrZW5kKQorICAgICAgICAsIG1f
dHJhbnNhY3Rpb25JZCh0cmFuc2FjdGlvbklkKQorICAgICAgICAsIG1fb2JqZWN0U3RvcmVJZChv
YmplY3RTdG9yZUlkKQogICAgICAgICAsIG1faW5kZXhNZXRhZGF0YShpbmRleE1ldGFkYXRhKQog
ICAgIHsKICAgICB9CkBAIC0zMzMsMjEgKzMyNywyMCBAQCBwcml2YXRlOgogICAgICAgICAgICAg
VmVjdG9yPElEQk9iamVjdFN0b3JlOjpJbmRleEtleXMsIDE+IGluZGV4S2V5c0xpc3Q7CiAgICAg
ICAgICAgICBpbmRleEtleXNMaXN0LmFwcGVuZChpbmRleEtleXMpOwogCi0gICAgICAgICAgICBt
X29iamVjdFN0b3JlQmFja2VuZC0+c2V0SW5kZXhLZXlzKHByaW1hcnlLZXksIGluZGV4SWRzLCBp
bmRleEtleXNMaXN0LCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKLQorICAgICAgICAgICAgbV9kYXRh
YmFzZUJhY2tlbmQtPnNldEluZGV4S2V5cyhtX3RyYW5zYWN0aW9uSWQsIG1fb2JqZWN0U3RvcmVJ
ZCwgcHJpbWFyeUtleSwgaW5kZXhJZHMsIGluZGV4S2V5c0xpc3QpOwogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgLy8gTm93IHRoYXQgd2UgYXJlIGRvbmUgaW5kZXhpbmcsIHRlbGwgdGhl
IGJhY2tlbmQgdG8gZ28KICAgICAgICAgICAgIC8vIGJhY2sgdG8gcHJvY2Vzc2luZyB0YXNrcyBv
ZiB0eXBlIE5vcm1hbFRhc2suCi0gICAgICAgICAgICBtX29iamVjdFN0b3JlQmFja2VuZC0+c2V0
SW5kZXhlc1JlYWR5KGluZGV4SWRzLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKLSAgICAgICAgICAg
IG1fb2JqZWN0U3RvcmVCYWNrZW5kLmNsZWFyKCk7Ci0gICAgICAgICAgICBtX3RyYW5zYWN0aW9u
LmNsZWFyKCk7CisgICAgICAgICAgICBtX2RhdGFiYXNlQmFja2VuZC0+c2V0SW5kZXhlc1JlYWR5
KG1fdHJhbnNhY3Rpb25JZCwgbV9vYmplY3RTdG9yZUlkLCBpbmRleElkcyk7CisgICAgICAgICAg
ICBtX2RhdGFiYXNlQmFja2VuZC5jbGVhcigpOwogICAgICAgICB9CiAKICAgICB9CiAKLSAgICBS
ZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBtX29iamVjdFN0b3JlQmFja2Vu
ZDsKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBtX3RyYW5zYWN0
aW9uOwotICAgIElEQkluZGV4TWV0YWRhdGEgbV9pbmRleE1ldGFkYXRhOworICAgIFJlZlB0cjxJ
REJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U+IG1fZGF0YWJhc2VCYWNrZW5kOworICAgIGNvbnN0
IGludDY0X3QgbV90cmFuc2FjdGlvbklkOworICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9y
ZUlkOworICAgIGNvbnN0IElEQkluZGV4TWV0YWRhdGEgbV9pbmRleE1ldGFkYXRhOwogfTsKIH0K
IApAQCAtMzkyLDE1ICszODUsMTQgQEAgUGFzc1JlZlB0cjxJREJJbmRleD4gSURCT2JqZWN0U3Rv
cmU6OmNyZWF0ZUluZGV4KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQKICAgICB9CiAK
ICAgICBpbnQ2NF90IGluZGV4SWQgPSBtX21ldGFkYXRhLm1heEluZGV4SWQgKyAxOwotICAgIFJl
ZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGluZGV4QmFja2VuZCA9IG1fYmFja2VuZC0+
Y3JlYXRlSW5kZXgoaW5kZXhJZCwgbmFtZSwga2V5UGF0aCwgdW5pcXVlLCBtdWx0aUVudHJ5LCBt
X3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKLSAgICBBU1NFUlQoIWluZGV4QmFja2VuZCAh
PSAhZWMpOyAvLyBJZiB3ZSBkaWRuJ3QgZ2V0IGFuIGluZGV4LCB3ZSBzaG91bGQgaGF2ZSBnb3R0
ZW4gYW4gZXhjZXB0aW9uIGNvZGUuIEFuZCB2aWNlIHZlcnNhLgorICAgIG1fYmFja2VuZC0+Y3Jl
YXRlSW5kZXgoaW5kZXhJZCwgbmFtZSwga2V5UGF0aCwgdW5pcXVlLCBtdWx0aUVudHJ5LCBtX3Ry
YW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKICAgICBpZiAoZWMpCiAgICAgICAgIHJldHVybiAw
OwogCiAgICAgKyttX21ldGFkYXRhLm1heEluZGV4SWQ7CiAKICAgICBJREJJbmRleE1ldGFkYXRh
IG1ldGFkYXRhKG5hbWUsIGluZGV4SWQsIGtleVBhdGgsIHVuaXF1ZSwgbXVsdGlFbnRyeSk7Ci0g
ICAgUmVmUHRyPElEQkluZGV4PiBpbmRleCA9IElEQkluZGV4OjpjcmVhdGUobWV0YWRhdGEsIGlu
ZGV4QmFja2VuZC5yZWxlYXNlKCksIHRoaXMsIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOworICAgIFJl
ZlB0cjxJREJJbmRleD4gaW5kZXggPSBJREJJbmRleDo6Y3JlYXRlKG1ldGFkYXRhLCB0aGlzLCBt
X3RyYW5zYWN0aW9uLmdldCgpKTsKICAgICBtX2luZGV4TWFwLnNldChuYW1lLCBpbmRleCk7CiAg
ICAgbV9tZXRhZGF0YS5pbmRleGVzLnNldChpbmRleElkLCBtZXRhZGF0YSk7CiAKQEAgLTQxNSw3
ICs0MDcsNyBAQCBQYXNzUmVmUHRyPElEQkluZGV4PiBJREJPYmplY3RTdG9yZTo6Y3JlYXRlSW5k
ZXgoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dAogICAgIGluZGV4UmVxdWVzdC0+cHJl
dmVudFByb3BhZ2F0aW9uKCk7CiAKICAgICAvLyBUaGlzIGlzIGtlcHQgYWxpdmUgYnkgYmVpbmcg
dGhlIHN1Y2Nlc3MgaGFuZGxlciBvZiB0aGUgcmVxdWVzdCwgd2hpY2ggaXMgaW4gdHVybiBrZXB0
IGFsaXZlIGJ5IHRoZSBvd25pbmcgdHJhbnNhY3Rpb24uCi0gICAgUmVmUHRyPEluZGV4UG9wdWxh
dG9yPiBpbmRleFBvcHVsYXRvciA9IEluZGV4UG9wdWxhdG9yOjpjcmVhdGUobV9iYWNrZW5kLCBt
X3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGluZGV4UmVxdWVzdCwgbWV0YWRhdGEpOworICAgIFJl
ZlB0cjxJbmRleFBvcHVsYXRvcj4gaW5kZXhQb3B1bGF0b3IgPSBJbmRleFBvcHVsYXRvcjo6Y3Jl
YXRlKGJhY2tlbmREQigpLCBtX3RyYW5zYWN0aW9uLT5pZCgpLCBpZCgpLCBtZXRhZGF0YSk7CiAg
ICAgaW5kZXhSZXF1ZXN0LT5zZXRPbnN1Y2Nlc3MoaW5kZXhQb3B1bGF0b3IpOwogCiAgICAgcmV0
dXJuIGluZGV4LnJlbGVhc2UoKTsKQEAgLTQ0Myw5ICs0MzUsNiBAQCBQYXNzUmVmUHRyPElEQklu
ZGV4PiBJREJPYmplY3RTdG9yZTo6aW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25D
b2RlJiBlYwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBSZWZQdHI8SURCSW5kZXhC
YWNrZW5kSW50ZXJmYWNlPiBpbmRleEJhY2tlbmQgPSBtX2JhY2tlbmQtPmluZGV4KGluZGV4SWQp
OwotICAgIEFTU0VSVCghZWMgJiYgaW5kZXhCYWNrZW5kKTsKLQogICAgIGNvbnN0IElEQkluZGV4
TWV0YWRhdGEqIGluZGV4TWV0YWRhdGEoMCk7CiAgICAgZm9yIChJREJPYmplY3RTdG9yZU1ldGFk
YXRhOjpJbmRleE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX21ldGFkYXRhLmluZGV4ZXMuYmVn
aW4oKTsgaXQgIT0gbV9tZXRhZGF0YS5pbmRleGVzLmVuZCgpOyArK2l0KSB7CiAgICAgICAgIGlm
IChpdC0+dmFsdWUubmFtZSA9PSBuYW1lKSB7CkBAIC00NTQsOCArNDQzLDkgQEAgUGFzc1JlZlB0
cjxJREJJbmRleD4gSURCT2JqZWN0U3RvcmU6OmluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhj
ZXB0aW9uQ29kZSYgZWMKICAgICAgICAgfQogICAgIH0KICAgICBBU1NFUlQoaW5kZXhNZXRhZGF0
YSk7CisgICAgQVNTRVJUKGluZGV4TWV0YWRhdGEtPmlkICE9IElEQkluZGV4TWV0YWRhdGE6Oklu
dmFsaWRJZCk7CiAKLSAgICBSZWZQdHI8SURCSW5kZXg+IGluZGV4ID0gSURCSW5kZXg6OmNyZWF0
ZSgqaW5kZXhNZXRhZGF0YSwgaW5kZXhCYWNrZW5kLnJlbGVhc2UoKSwgdGhpcywgbV90cmFuc2Fj
dGlvbi5nZXQoKSk7CisgICAgUmVmUHRyPElEQkluZGV4PiBpbmRleCA9IElEQkluZGV4OjpjcmVh
dGUoKmluZGV4TWV0YWRhdGEsIHRoaXMsIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwogICAgIG1faW5k
ZXhNYXAuc2V0KG5hbWUsIGluZGV4KTsKICAgICByZXR1cm4gaW5kZXgucmVsZWFzZSgpOwogfQpA
QCAtNTA0LDE0ICs0OTQsMTMgQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9y
ZTo6b3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXgKIAogICAgIFJlZlB0
cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFu
eTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKICAgICByZXF1ZXN0LT5zZXRD
dXJzb3JEZXRhaWxzKElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OktleUFuZFZhbHVlLCBkaXJl
Y3Rpb24pOwotICAgIG1fYmFja2VuZC0+b3BlbkN1cnNvcihyYW5nZSwgZGlyZWN0aW9uLCByZXF1
ZXN0LCB0YXNrVHlwZSwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7Ci0gICAgQVNTRVJU
KCFlYyk7CisKKyAgICBiYWNrZW5kREIoKS0+b3BlbkN1cnNvcihtX3RyYW5zYWN0aW9uLT5pZCgp
LCBpZCgpLCBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQsIHJhbmdlLCBkaXJlY3Rpb24sIGZh
bHNlLCBzdGF0aWNfY2FzdDxJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlPih0
YXNrVHlwZSksIHJlcXVlc3QpOwogICAgIHJldHVybiByZXF1ZXN0LnJlbGVhc2UoKTsKIH0KIAog
UGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6b3BlbkN1cnNvcihTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBjb25zdCBT
dHJpbmcmIGRpcmVjdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgSURCX1RSQUNFKCJJ
REJPYmplY3RTdG9yZTo6b3BlbkN1cnNvciIpOwogICAgIFJlZlB0cjxJREJLZXlSYW5nZT4ga2V5
UmFuZ2UgPSBJREJLZXlSYW5nZTo6b25seShrZXksIGVjKTsKICAgICBpZiAoZWMpCiAgICAgICAg
IHJldHVybiAwOwpAQCAtNTMwLDE0ICs1MTksMTIgQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJ
REJPYmplY3RTdG9yZTo6Y291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGEK
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0
ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBtX3Ry
YW5zYWN0aW9uLmdldCgpKTsKLSAgICBtX2JhY2tlbmQtPmNvdW50KHJhbmdlLCByZXF1ZXN0LCBt
X3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKLSAgICBBU1NFUlQoIWVjKTsKKyAgICBiYWNr
ZW5kREIoKS0+Y291bnQobV90cmFuc2FjdGlvbi0+aWQoKSwgaWQoKSwgSURCSW5kZXhNZXRhZGF0
YTo6SW52YWxpZElkLCByYW5nZSwgcmVxdWVzdCk7CiAgICAgcmV0dXJuIHJlcXVlc3QucmVsZWFz
ZSgpOwogfQogCiBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpjb3VudChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBF
eGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlOjpjb3Vu
dCIpOwogICAgIFJlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UgPSBJREJLZXlSYW5nZTo6b25s
eShrZXksIGVjKTsKICAgICBpZiAoZWMpCiAgICAgICAgIHJldHVybiAwOwpAQCAtNTYzLDYgKzU1
MCwxMSBAQCBpbnQ2NF90IElEQk9iamVjdFN0b3JlOjpmaW5kSW5kZXhJZChjb25zdCBTdHJpbmcm
IG5hbWUpIGNvbnN0CiAgICAgcmV0dXJuIElEQkluZGV4TWV0YWRhdGE6OkludmFsaWRJZDsKIH0K
IAorSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlKiBJREJPYmplY3RTdG9yZTo6YmFja2VuZERC
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90cmFuc2FjdGlvbi0+YmFja2VuZERCKCk7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2Jq
ZWN0U3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0
b3JlLmgKaW5kZXggZmNiNDM3OWFlZWQ3NzYzOGQ3MGNmNjkyMDg3ODM1ODAzZmI2OWZlZC4uN2Uy
ZjcyZmFlYTg1MTkzYzMwOTNlZDYzZDg1YWEyYTUwMmYzYzAyNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oCkBAIC0yOSw2ICsyOSw3
IEBACiAjaW5jbHVkZSAiRGljdGlvbmFyeS5oIgogI2luY2x1ZGUgIklEQkN1cnNvci5oIgogI2lu
Y2x1ZGUgIklEQkluZGV4LmgiCisjaW5jbHVkZSAiSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlLmgi
CiAjaW5jbHVkZSAiSURCS2V5LmgiCiAjaW5jbHVkZSAiSURCS2V5UmFuZ2UuaCIKICNpbmNsdWRl
ICJJREJNZXRhZGF0YS5oIgpAQCAtNTgsNiArNTksNyBAQCBwdWJsaWM6CiAgICAgfklEQk9iamVj
dFN0b3JlKCkgeyB9CiAKICAgICAvLyBJbXBsZW1lbnQgdGhlIElEQk9iamVjdFN0b3JlIElETAor
ICAgIGludDY0X3QgaWQoKSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhLmlkOyB9CiAgICAgY29u
c3QgU3RyaW5nIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhLm5hbWU7IH0KICAgICBQ
YXNzUmVmUHRyPElEQkFueT4ga2V5UGF0aEFueSgpIGNvbnN0IHsgcmV0dXJuIElEQkFueTo6Y3Jl
YXRlKG1fbWV0YWRhdGEua2V5UGF0aCk7IH0KICAgICBjb25zdCBJREJLZXlQYXRoIGtleVBhdGgo
KSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhLmtleVBhdGg7IH0KQEAgLTEwNCw2ICsxMDYsOCBA
QCBwdWJsaWM6CiAgICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPElEQktleT4gPiBJbmRleEtleXM7
CiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgSW5kZXhLZXlzPiBJbmRleEtleU1hcDsKIAor
ICAgIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZSogYmFja2VuZERCKCkgY29uc3Q7CisKIHBy
aXZhdGU6CiAgICAgSURCT2JqZWN0U3RvcmUoY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYs
IFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiwgSURCVHJhbnNhY3Rp
b24qKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcAppbmRleCAzYzJkOWI3MDczMDhkOThi
YzM5OTRhMGMwZWQ2YjgxYTQ5ZWUzOTk0Li41MzE3ZTNhZjc2MmQ3YTRmMmUxYWEwN2I3ZDI5ZDM2
ZmJkYWJiNDZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcApAQCAtNDQsMTEwICs0NCw2
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6T2JqZWN0U3RvcmVSZXRyaWV2YWxPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0
cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRy
PElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQktl
eVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgT2JqZWN0U3RvcmVSZXRyaWV2YWxPcGVy
YXRpb24ob2JqZWN0U3RvcmUsIGtleVJhbmdlLCBjYWxsYmFja3MpKTsKLSAgICB9Ci0gICAgdmly
dHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOwotcHJpdmF0ZToK
LSAgICBPYmplY3RTdG9yZVJldHJpZXZhbE9wZXJhdGlvbihQYXNzUmVmUHRyPElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlS
YW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLSAgICAgICAgOiBtX29i
amVjdFN0b3JlKG9iamVjdFN0b3JlKQotICAgICAgICAsIG1fa2V5UmFuZ2Uoa2V5UmFuZ2UpCi0g
ICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQotICAgIHsKLSAgICB9Ci0KLSAgICBSZWZQ
dHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gbV9vYmplY3RTdG9yZTsKLSAgICBSZWZQdHI8
SURCS2V5UmFuZ2U+IG1fa2V5UmFuZ2U7Ci0gICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxs
YmFja3M7Ci19OwotCi1jbGFzcyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpPYmplY3RTdG9y
ZVN0b3JhZ2VPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3Bl
cmF0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4g
dmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc093blB0cjxWZWN0b3I8aW50NjRfdD4gPiBw
b3BJbmRleElkcywgUGFzc093blB0cjxWZWN0b3I8SW5kZXhLZXlzPiA+IHBvcEluZGV4S2V5cykK
LSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgT2JqZWN0U3RvcmVTdG9yYWdlT3Bl
cmF0aW9uKG9iamVjdFN0b3JlLCB2YWx1ZSwga2V5LCBwdXRNb2RlLCBjYWxsYmFja3MsIHBvcElu
ZGV4SWRzLCBwb3BJbmRleEtleXMpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm0o
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOwotcHJpdmF0ZToKLSAgICBPYmplY3RTdG9yZVN0
b3JhZ2VPcGVyYXRpb24oUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmpl
Y3RTdG9yZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlLCBQYXNzUmVm
UHRyPElEQktleT4ga2V5LCBQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBjYWxsYmFja3MsIFBhc3NPd25QdHI8VmVjdG9yPGludDY0X3Q+ID4gcG9wSW5kZXhJZHMsIFBh
c3NPd25QdHI8VmVjdG9yPEluZGV4S2V5cz4gPiBwb3BJbmRleEtleXMpCi0gICAgICAgIDogbV9v
YmplY3RTdG9yZShvYmplY3RTdG9yZSkKLSAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQotICAgICAg
ICAsIG1fa2V5KGtleSkKLSAgICAgICAgLCBtX3B1dE1vZGUocHV0TW9kZSkKLSAgICAgICAgLCBt
X2NhbGxiYWNrcyhjYWxsYmFja3MpCi0gICAgICAgICwgbV9wb3BJbmRleElkcyhwb3BJbmRleElk
cykKLSAgICAgICAgLCBtX3BvcEluZGV4S2V5cyhwb3BJbmRleEtleXMpCi0gICAgewotICAgIH0K
LQotICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBtX29iamVjdFN0b3JlOwot
ICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG1fdmFsdWU7Ci0gICAgUmVmUHRyPElE
QktleT4gbV9rZXk7Ci0gICAgUHV0TW9kZSBtX3B1dE1vZGU7Ci0gICAgUmVmUHRyPElEQkNhbGxi
YWNrcz4gbV9jYWxsYmFja3M7Ci0gICAgT3duUHRyPFZlY3RvcjxpbnQ2NF90PiA+IG1fcG9wSW5k
ZXhJZHM7Ci0gICAgT3duUHRyPFZlY3RvcjxJbmRleEtleXM+ID4gbV9wb3BJbmRleEtleXM7Ci19
OwotCi1jbGFzcyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpPYmplY3RTdG9yZUluZGV4ZXNS
ZWFkeU9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRp
b24gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NPd25QdHI8VmVjdG9yPGludDY0X3Q+ID4gcG9wSW5kZXhJ
ZHMpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IE9iamVjdFN0b3JlSW5kZXhl
c1JlYWR5T3BlcmF0aW9uKG9iamVjdFN0b3JlLCBwb3BJbmRleElkcykpOwotICAgIH0KLSAgICB2
aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7Ci1wcml2YXRl
OgotICAgIE9iamVjdFN0b3JlSW5kZXhlc1JlYWR5T3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NPd25QdHI8VmVjdG9yPGludDY0
X3Q+ID4gcG9wSW5kZXhJZHMpCi0gICAgICAgIDogbV9vYmplY3RTdG9yZShvYmplY3RTdG9yZSkK
LSAgICAgICAgLCBtX3BvcEluZGV4SWRzKHBvcEluZGV4SWRzKQotICAgIHsKLSAgICB9Ci0KLSAg
ICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gbV9vYmplY3RTdG9yZTsKLSAgICBP
d25QdHI8VmVjdG9yPGludDY0X3Q+ID4gbV9wb3BJbmRleElkczsKLX07Ci0KLWNsYXNzIElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6Ok9iamVjdFN0b3JlRGVsZXRpb25PcGVyYXRpb24gOiBwdWJs
aWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKLXB1YmxpYzoKLSAgICBz
dGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNy
ZWF0ZShQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQ
YXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
IGNhbGxiYWNrcykKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgT2JqZWN0U3Rv
cmVEZWxldGlvbk9wZXJhdGlvbihvYmplY3RTdG9yZSwga2V5UmFuZ2UsIGNhbGxiYWNrcykpOwot
ICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
Kik7Ci1wcml2YXRlOgotICAgIE9iamVjdFN0b3JlRGVsZXRpb25PcGVyYXRpb24oUGFzc1JlZlB0
cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJL
ZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi0g
ICAgICAgIDogbV9vYmplY3RTdG9yZShvYmplY3RTdG9yZSkKLSAgICAgICAgLCBtX2tleVJhbmdl
KGtleVJhbmdlKQotICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKLSAgICB7Ci0gICAg
fQotCi0gICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG1fb2JqZWN0U3RvcmU7
Ci0gICAgUmVmUHRyPElEQktleVJhbmdlPiBtX2tleVJhbmdlOwotICAgIFJlZlB0cjxJREJDYWxs
YmFja3M+IG1fY2FsbGJhY2tzOwotfTsKLQotY2xhc3MgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bDo6T2JqZWN0U3RvcmVDbGVhck9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsOjpPcGVyYXRpb24gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBjYWxsYmFja3MpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IE9iamVjdFN0
b3JlQ2xlYXJPcGVyYXRpb24ob2JqZWN0U3RvcmUsIGNhbGxiYWNrcykpOwotICAgIH0KLSAgICB2
aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7Ci1wcml2YXRl
OgotICAgIE9iamVjdFN0b3JlQ2xlYXJPcGVyYXRpb24oUGFzc1JlZlB0cjxJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxi
YWNrcykKLSAgICAgICAgOiBtX29iamVjdFN0b3JlKG9iamVjdFN0b3JlKQotICAgICAgICAsIG1f
Y2FsbGJhY2tzKGNhbGxiYWNrcykKLSAgICB7Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw+IG1fb2JqZWN0U3RvcmU7Ci0gICAgUmVmUHRyPElEQkNhbGxiYWNr
cz4gbV9jYWxsYmFja3M7Ci19OwotCiBjbGFzcyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpD
cmVhdGVJbmRleE9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpP
cGVyYXRpb24gewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4g
aW5kZXgpCkBAIC0xODQsNTAgKzgwLDYgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8SURCSW5kZXhC
YWNrZW5kSW1wbD4gbV9pbmRleDsKIH07CiAKLWNsYXNzIElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6Ok9wZW5PYmplY3RTdG9yZUN1cnNvck9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsOjpPcGVyYXRpb24gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCS2V5
UmFuZ2U+IHJhbmdlLCBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24sIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZTo6
VGFza1R5cGUgdGFza1R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IE9w
ZW5PYmplY3RTdG9yZUN1cnNvck9wZXJhdGlvbihvYmplY3RTdG9yZSwgcmFuZ2UsIGRpcmVjdGlv
biwgY2FsbGJhY2tzLCB0YXNrVHlwZSkpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9y
bShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7Ci1wcml2YXRlOgotICAgIE9wZW5PYmplY3RT
dG9yZUN1cnNvck9wZXJhdGlvbihQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+
IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiByYW5nZSwgSURCQ3Vyc29yOjpE
aXJlY3Rpb24gZGlyZWN0aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlIHRhc2tUeXBlKQotICAgICAg
ICA6IG1fb2JqZWN0U3RvcmUob2JqZWN0U3RvcmUpCi0gICAgICAgICwgbV9yYW5nZShyYW5nZSkK
LSAgICAgICAgLCBtX2RpcmVjdGlvbihkaXJlY3Rpb24pCi0gICAgICAgICwgbV9jYWxsYmFja3Mo
Y2FsbGJhY2tzKQotICAgICAgICAsIG1fdGFza1R5cGUodGFza1R5cGUpCi0gICAgewotICAgIH0K
LQotICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBtX29iamVjdFN0b3JlOwot
ICAgIFJlZlB0cjxJREJLZXlSYW5nZT4gbV9yYW5nZTsKLSAgICBJREJDdXJzb3I6OkRpcmVjdGlv
biBtX2RpcmVjdGlvbjsKLSAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKLSAg
ICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlIG1fdGFza1R5cGU7Ci19
OwotCi1jbGFzcyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpPYmplY3RTdG9yZUNvdW50T3Bl
cmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbiB7Ci1w
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6
T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBv
YmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2UsIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiBjYWxsYmFja3MpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3
IE9iamVjdFN0b3JlQ291bnRPcGVyYXRpb24ob2JqZWN0U3RvcmUsIHJhbmdlLCBjYWxsYmFja3Mp
KTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbCopOwotcHJpdmF0ZToKLSAgICBPYmplY3RTdG9yZUNvdW50T3BlcmF0aW9uKFBhc3NSZWZQ
dHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURC
S2V5UmFuZ2U+IHJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQotICAg
ICAgICA6IG1fb2JqZWN0U3RvcmUob2JqZWN0U3RvcmUpCi0gICAgICAgICwgbV9yYW5nZShyYW5n
ZSkKLSAgICAgICAgLCBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCi0gICAgewotICAgIH0KLQotICAg
IFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBtX29iamVjdFN0b3JlOwotICAgIFJl
ZlB0cjxJREJLZXlSYW5nZT4gbV9yYW5nZTsKLSAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2Nh
bGxiYWNrczsKLX07Ci0KIGNsYXNzIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OkNyZWF0ZUlu
ZGV4QWJvcnRPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3Bl
cmF0aW9uIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGlu
ZGV4KQpAQCAtMjg5LDcgKzE0MSw4IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6
Z2V0KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyCiAgICAgSURC
X1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpnZXQiKTsKICAgICBSZWZQdHI8SURC
Q2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7CiAgICAgUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bDo6ZnJvbSh0cmFuc2FjdGlvblB0cik7Ci0gICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhP
YmplY3RTdG9yZVJldHJpZXZhbE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIGtleVJhbmdlLCBjYWxs
YmFja3MpKTsKKyAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soT2JqZWN0U3RvcmVS
ZXRyaWV2YWxPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBrZXlSYW5nZSwgY2FsbGJhY2tzKSkpCisg
ICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0
YWJhc2VFeGNlcHRpb246OkFib3J0RXJyb3IpKTsKIH0KIAogdm9pZCBJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjpPYmplY3RTdG9yZVJldHJpZXZhbE9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKQEAgLTMzOCw3ICsxOTEsOCBAQCB2b2lk
IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4gdmFsdWUsIFBhcwogCiAgICAgQVNTRVJUKGF1dG9JbmNyZW1lbnQoKSB8fCBrZXku
Z2V0KCkpOwogCi0gICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhPYmplY3RTdG9yZVN0b3Jh
Z2VPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCB2YWx1ZSwga2V5LCBwdXRNb2RlLCBjYWxsYmFja3Ms
IG5ld0luZGV4SWRzLnJlbGVhc2UoKSwgbmV3SW5kZXhLZXlzLnJlbGVhc2UoKSkpOworICAgIGlm
ICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhPYmplY3RTdG9yZVN0b3JhZ2VPcGVyYXRpb246
OmNyZWF0ZSh0aGlzLCB2YWx1ZSwga2V5LCBwdXRNb2RlLCBjYWxsYmFja3MsIG5ld0luZGV4SWRz
LnJlbGVhc2UoKSwgbmV3SW5kZXhLZXlzLnJlbGVhc2UoKSkpKQorICAgICAgICBjYWxsYmFja3Mt
Pm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpB
Ym9ydEVycm9yKSk7CiB9CiAKIGJvb2wgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6SW5kZXhX
cml0ZXI6OnZlcmlmeUluZGV4S2V5cyhJREJCYWNraW5nU3RvcmUmIGJhY2tpbmdTdG9yZSwgSURC
QmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGJvb2wmIGNhbkFkZEtl
eXMsIGNvbnN0IElEQktleSogcHJpbWFyeUtleSwgU3RyaW5nKiBlcnJvck1lc3NhZ2UpIGNvbnN0
CkBAIC00ODksNyArMzQzLDcgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpPYmpl
Y3RTdG9yZVN0b3JhZ2VPcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3QKICAgICBib29sIGtl
eVdhc0dlbmVyYXRlZCA9IGZhbHNlOwogCiAgICAgaWYgKG1fcHV0TW9kZSAhPSBDdXJzb3JVcGRh
dGUgJiYgYXV0b0luY3JlbWVudCAmJiAhbV9rZXkpIHsKLSAgICAgICAgUmVmUHRyPElEQktleT4g
YXV0b0luY0tleSA9IG1fb2JqZWN0U3RvcmUtPmdlbmVyYXRlS2V5KHRyYW5zYWN0aW9uKTsKKyAg
ICAgICAgUmVmUHRyPElEQktleT4gYXV0b0luY0tleSA9IElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6OmdlbmVyYXRlS2V5KG1fb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLCB0cmFuc2FjdGlv
biwgbV9vYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBtX29iamVjdFN0b3JlLT5pZCgpKTsKICAg
ICAgICAga2V5V2FzR2VuZXJhdGVkID0gdHJ1ZTsKICAgICAgICAgaWYgKCFhdXRvSW5jS2V5LT5p
c1ZhbGlkKCkpIHsKICAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNl
RXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Q29uc3RyYWludEVycm9yLCAiTWF4
aW11bSBrZXkgZ2VuZXJhdG9yIHZhbHVlIHJlYWNoZWQuIikpOwpAQCAtNTMwLDcgKzM4NCw2IEBA
IHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6T2JqZWN0U3RvcmVTdG9yYWdlT3BlcmF0
aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0CiAgICAgfQogCiAgICAgLy8gQmVmb3JlIHRoaXMgcG9p
bnQsIGRvbid0IGRvIGFueSBtdXRhdGlvbi4gIEFmdGVyIHRoaXMgcG9pbnQsIHJvbGxiYWNrIHRo
ZSB0cmFuc2FjdGlvbiBpbiBjYXNlIG9mIGVycm9yLgotCiAgICAgYmFja2luZ1N0b3JlU3VjY2Vz
cyA9IG1fb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5wdXRSZWNvcmQodHJhbnNhY3Rpb24t
PmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwg
bV9vYmplY3RTdG9yZS0+aWQoKSwgKm1fa2V5LCBtX3ZhbHVlLT50b1dpcmVCeXRlcygpLCAmcmVj
b3JkSWRlbnRpZmllcik7CiAgICAgaWYgKCFiYWNraW5nU3RvcmVTdWNjZXNzKSB7CiAgICAgICAg
IG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3I6IGJhY2tpbmcgc3RvcmUg
ZXJyb3IgcGVyZm9ybWluZyBwdXQvYWRkLiIpKTsKQEAgLTU0Myw3ICszOTYsNyBAQCB2b2lkIElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw6Ok9iamVjdFN0b3JlU3RvcmFnZU9wZXJhdGlvbjo6cGVy
Zm9ybShJREJUcmFuc2FjdAogICAgIH0KIAogICAgIGlmIChhdXRvSW5jcmVtZW50ICYmIG1fcHV0
TW9kZSAhPSBDdXJzb3JVcGRhdGUgJiYgbV9rZXktPnR5cGUoKSA9PSBJREJLZXk6Ok51bWJlclR5
cGUpIHsKLSAgICAgICAgYm9vbCBvayA9IG1fb2JqZWN0U3RvcmUtPnVwZGF0ZUtleUdlbmVyYXRv
cih0cmFuc2FjdGlvbiwgbV9rZXkuZ2V0KCksICFrZXlXYXNHZW5lcmF0ZWQpOworICAgICAgICBi
b29sIG9rID0gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6dXBkYXRlS2V5R2VuZXJhdG9yKGJh
Y2tpbmdTdG9yZSwgdHJhbnNhY3Rpb24sIG1fb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgbV9v
YmplY3RTdG9yZS0+aWQoKSwgbV9rZXkuZ2V0KCksICFrZXlXYXNHZW5lcmF0ZWQpOwogICAgICAg
ICBpZiAoIW9rKSB7CiAgICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFz
ZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVy
bmFsIGVycm9yIHVwZGF0aW5nIGtleSBnZW5lcmF0b3IuIikpOwogICAgICAgICAgICAgcmV0dXJu
OwpAQCAtNTUzLDEzICs0MDYsMTYgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpP
YmplY3RTdG9yZVN0b3JhZ2VPcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3QKICAgICBtX2Nh
bGxiYWNrcy0+b25TdWNjZXNzKG1fa2V5LnJlbGVhc2UoKSk7CiB9CiAKLXZvaWQgSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4g
a2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIEV4Y2VwdGlvbkNvZGUmKQordm9p
ZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVGdW5jdGlvbihQYXNzUmVmUHRyPElE
QktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNr
cywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwgRXhjZXB0
aW9uQ29kZSYpCiB7CiAgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpk
ZWxldGUiKTsKIAogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2Fj
dGlvbiA9IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmZyb20odHJhbnNhY3Rpb25QdHIpOwog
ICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpICE9IElEQlRyYW5zYWN0aW9uOjpSRUFEX09O
TFkpOwotICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soT2JqZWN0U3RvcmVEZWxldGlvbk9w
ZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIGtleVJhbmdlLCBjYWxsYmFja3MpKTsKKyAgICBSZWZQdHI8
SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7CisKKyAgICBpZiAoIXRyYW5z
YWN0aW9uLT5zY2hlZHVsZVRhc2soT2JqZWN0U3RvcmVEZWxldGlvbk9wZXJhdGlvbjo6Y3JlYXRl
KHRoaXMsIGtleVJhbmdlLCBjYWxsYmFja3MpKSkKKyAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9y
KElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6QWJvcnRFcnJv
cikpOwogfQogCiB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Ok9iamVjdFN0b3JlRGVs
ZXRpb25PcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNh
Y3Rpb24pCkBAIC01NzgsMTMgKzQzNCwxNiBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6Ok9iamVjdFN0b3JlRGVsZXRpb25PcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhYwogICAg
IG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoKTsKIH0KIAotdm9pZCBJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpjbGVhcihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRpb25Db2RlJikK
K3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y2xlYXIoUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+IHBycENhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFu
c2FjdGlvblB0ciwgRXhjZXB0aW9uQ29kZSYpCiB7CiAgICAgSURCX1RSQUNFKCJJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpjbGVhciIpOwogCiAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw+IHRyYW5zYWN0aW9uID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6ZnJvbSh0
cmFuc2FjdGlvblB0cik7CiAgICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgIT0gSURCVHJh
bnNhY3Rpb246OlJFQURfT05MWSk7Ci0gICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhPYmpl
Y3RTdG9yZUNsZWFyT3BlcmF0aW9uOjpjcmVhdGUodGhpcywgY2FsbGJhY2tzKSk7CisgICAgUmVm
UHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOworCisgICAgaWYgKCF0
cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKE9iamVjdFN0b3JlQ2xlYXJPcGVyYXRpb246OmNyZWF0
ZSh0aGlzLCBjYWxsYmFja3MpKSkKKyAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFi
YXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6QWJvcnRFcnJvcikpOwogfQog
CiB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Ok9iamVjdFN0b3JlQ2xlYXJPcGVyYXRp
b246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24pCkBAIC01
OTgsNyArNDU3LDcgQEAgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6OmNyZWF0ZUluZGV4KGludDYKIHsKICAgICBBU1NFUlRfV0lU
SF9NRVNTQUdFKCFtX2luZGV4ZXMuY29udGFpbnMoaWQpLCAiSW5kZXhlcyBhbHJlYWR5IGNvbnRh
aW4gJyVzJyIsIG5hbWUudXRmOCgpLmRhdGEoKSk7CiAKLSAgICBSZWZQdHI8SURCSW5kZXhCYWNr
ZW5kSW1wbD4gaW5kZXggPSBJREJJbmRleEJhY2tlbmRJbXBsOjpjcmVhdGUobV9kYXRhYmFzZSwg
dGhpcywgSURCSW5kZXhNZXRhZGF0YShuYW1lLCBpZCwga2V5UGF0aCwgdW5pcXVlLCBtdWx0aUVu
dHJ5KSk7CisgICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4ID0gSURCSW5kZXhC
YWNrZW5kSW1wbDo6Y3JlYXRlKG1fZGF0YWJhc2UsIElEQkluZGV4TWV0YWRhdGEobmFtZSwgaWQs
IGtleVBhdGgsIHVuaXF1ZSwgbXVsdGlFbnRyeSkpOwogICAgIEFTU0VSVChpbmRleC0+bmFtZSgp
ID09IG5hbWUpOwogCiAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5z
YWN0aW9uID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6ZnJvbSh0cmFuc2FjdGlvblB0cik7
CkBAIC02NTIsNjUgKzUxMSwxMiBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OkRl
bGV0ZUluZGV4T3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFjawogICAgIG1fb2Jq
ZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5kZWxldGVJbmRleCh0cmFuc2FjdGlvbi0+YmFja2lu
Z1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9vYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBtX29iamVj
dFN0b3JlLT5pZCgpLCBtX2luZGV4LT5pZCgpKTsKIH0KIAotdm9pZCBJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjpvcGVuQ3Vyc29yKFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHJhbmdlLCBJREJD
dXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBD
YWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUgdGFza1R5
cGUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIEV4Y2Vw
dGlvbkNvZGUmKQotewotICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6
b3BlbkN1cnNvciIpOwotICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENh
bGxiYWNrczsKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rp
b24gPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpmcm9tKHRyYW5zYWN0aW9uUHRyKTsKLSAg
ICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKE9wZW5PYmplY3RTdG9yZUN1cnNvck9wZXJhdGlv
bjo6Y3JlYXRlKHRoaXMsIHJhbmdlLCBkaXJlY3Rpb24sIGNhbGxiYWNrcywgdGFza1R5cGUpKTsK
LX0KLQotdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpPcGVuT2JqZWN0U3RvcmVDdXJz
b3JPcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rp
b24pCi17Ci0gICAgSURCX1RSQUNFKCJPcGVuT2JqZWN0U3RvcmVDdXJzb3IiKTsKLQotICAgIFJl
ZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gYmFja2luZ1N0b3JlQ3Vyc29yID0gbV9vYmpl
Y3RTdG9yZS0+YmFja2luZ1N0b3JlKCktPm9wZW5PYmplY3RTdG9yZUN1cnNvcih0cmFuc2FjdGlv
bi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9vYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgp
LCBtX29iamVjdFN0b3JlLT5pZCgpLCBtX3JhbmdlLmdldCgpLCBtX2RpcmVjdGlvbik7Ci0gICAg
Ly8gVGhlIGZyb250ZW5kIGhhcyBiZWd1biBpbmRleGluZywgc28gdGhpcyBwYXVzZXMgdGhlIHRy
YW5zYWN0aW9uCi0gICAgLy8gdW50aWwgdGhlIGluZGV4aW5nIGlzIGNvbXBsZXRlLiBUaGlzIGNh
bid0IGhhcHBlbiBhbnkgZWFybGllcgotICAgIC8vIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBz
d2l0Y2ggdG8gZWFybHkgbW9kZSBpbiBjYXNlIG11bHRpcGxlCi0gICAgLy8gaW5kZXhlcyBhcmUg
YmVpbmcgY3JlYXRlZCBpbiBhIHJvdywgd2l0aCBwdXQoKSdzIGluIGJldHdlZW4uCi0gICAgaWYg
KG1fdGFza1R5cGUgPT0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOjpQcmVlbXB0aXZl
VGFzaykKLSAgICAgICAgdHJhbnNhY3Rpb24tPmFkZFByZWVtcHRpdmVFdmVudCgpOwotICAgIGlm
ICghYmFja2luZ1N0b3JlQ3Vyc29yKSB7Ci0gICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3Mo
c3RhdGljX2Nhc3Q8U2VyaWFsaXplZFNjcmlwdFZhbHVlKj4oMCkpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbXBsPiBjdXJzb3IgPSBJREJD
dXJzb3JCYWNrZW5kSW1wbDo6Y3JlYXRlKGJhY2tpbmdTdG9yZUN1cnNvci5yZWxlYXNlKCksIElE
QkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OktleUFuZFZhbHVlLCBtX3Rhc2tUeXBlLCB0cmFuc2Fj
dGlvbiwgbV9vYmplY3RTdG9yZS5nZXQoKSk7Ci0gICAgbV9jYWxsYmFja3MtPm9uU3VjY2Vzcyhj
dXJzb3IsIGN1cnNvci0+a2V5KCksIGN1cnNvci0+cHJpbWFyeUtleSgpLCBjdXJzb3ItPnZhbHVl
KCkpOwotfQotCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNvdW50KFBhc3NSZWZQ
dHI8SURCS2V5UmFuZ2U+IHJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJh
Y2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNl
cHRpb25Db2RlJikKLXsKLSAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6
OmNvdW50Iik7Ci0gICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJh
Y2tzOwotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9
IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmZyb20odHJhbnNhY3Rpb25QdHIpOwotICAgIHRy
YW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soT2JqZWN0U3RvcmVDb3VudE9wZXJhdGlvbjo6Y3JlYXRl
KHRoaXMsIHJhbmdlLCBjYWxsYmFja3MpKTsKLX0KLQotdm9pZCBJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpPYmplY3RTdG9yZUNvdW50T3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQotewotICAgIElEQl9UUkFDRSgiT2JqZWN0U3RvcmVD
b3VudE9wZXJhdGlvbiIpOwotICAgIHVpbnQzMl90IGNvdW50ID0gMDsKLSAgICBSZWZQdHI8SURC
QmFja2luZ1N0b3JlOjpDdXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNvciA9IG1fb2JqZWN0U3RvcmUt
PmJhY2tpbmdTdG9yZSgpLT5vcGVuT2JqZWN0U3RvcmVLZXlDdXJzb3IodHJhbnNhY3Rpb24tPmJh
Y2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgbV9v
YmplY3RTdG9yZS0+aWQoKSwgbV9yYW5nZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhUKTsKLSAgICBp
ZiAoIWJhY2tpbmdTdG9yZUN1cnNvcikgewotICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNz
KGNvdW50KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGRvIHsKLSAgICAgICAgKytj
b3VudDsKLSAgICB9IHdoaWxlIChiYWNraW5nU3RvcmVDdXJzb3ItPmNvbnRpbnVlRnVuY3Rpb24o
MCkpOwotCi0gICAgbV9jYWxsYmFja3MtPm9uU3VjY2Vzcyhjb3VudCk7Ci19Ci0KIHZvaWQgSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6bG9hZEluZGV4ZXMoKQogewogICAgIFZlY3RvcjxJREJJ
bmRleE1ldGFkYXRhPiBpbmRleGVzID0gYmFja2luZ1N0b3JlKCktPmdldEluZGV4ZXMoZGF0YWJh
c2VJZCgpLCBtX21ldGFkYXRhLmlkKTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5k
ZXhlcy5zaXplKCk7ICsraSkKLSAgICAgICAgbV9pbmRleGVzLnNldChpbmRleGVzW2ldLmlkLCBJ
REJJbmRleEJhY2tlbmRJbXBsOjpjcmVhdGUobV9kYXRhYmFzZSwgdGhpcywgaW5kZXhlc1tpXSkp
OworICAgICAgICBtX2luZGV4ZXMuc2V0KGluZGV4ZXNbaV0uaWQsIElEQkluZGV4QmFja2VuZElt
cGw6OmNyZWF0ZShtX2RhdGFiYXNlLCBpbmRleGVzW2ldKSk7CiB9CiAKIHZvaWQgSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6Q3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybShJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKQEAgLTcyNywxMSArNTMzLDExIEBA
IHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6RGVsZXRlSW5kZXhBYm9ydE9wZXJhdGlv
bjo6cGVyZm9ybShJREJUcmFuc2FjdGlvCiAgICAgbV9vYmplY3RTdG9yZS0+bV9pbmRleGVzLnNl
dChtX2luZGV4LT5pZCgpLCBtX2luZGV4KTsKIH0KIAotUGFzc1JlZlB0cjxJREJLZXk+IElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6OmdlbmVyYXRlS2V5KFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24pCitQYXNzUmVmUHRyPElEQktleT4gSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6Z2VuZXJhdGVLZXkoUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+
IGJhY2tpbmdTdG9yZSwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFu
c2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCiB7CiAg
ICAgY29uc3QgaW50NjRfdCBtYXhHZW5lcmF0b3JWYWx1ZSA9IDkwMDcxOTkyNTQ3NDA5OTJMTDsg
Ly8gTWF4aW11bSBpbnRlZ2VyIHN0b3JhYmxlIGFzIEVDTUFTY3JpcHQgbnVtYmVyLgogICAgIGlu
dDY0X3QgY3VycmVudE51bWJlcjsKLSAgICBib29sIG9rID0gYmFja2luZ1N0b3JlKCktPmdldEtl
eUdlbmVyYXRvckN1cnJlbnROdW1iZXIodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0
aW9uKCksIGRhdGFiYXNlSWQoKSwgaWQoKSwgY3VycmVudE51bWJlcik7CisgICAgYm9vbCBvayA9
IGJhY2tpbmdTdG9yZS0+Z2V0S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcih0cmFuc2FjdGlvbi0+
YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgY3Vy
cmVudE51bWJlcik7CiAgICAgaWYgKCFvaykgewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0
byBnZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyIik7CiAgICAgICAgIHJldHVybiBJREJLZXk6
OmNyZWF0ZUludmFsaWQoKTsKQEAgLTc0MiwxMCArNTQ4LDEwIEBAIFBhc3NSZWZQdHI8SURCS2V5
PiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpnZW5lcmF0ZUtleShQYXNzUmVmUHRyPElEQlRy
YW5zYWN0CiAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlTnVtYmVyKGN1cnJlbnROdW1iZXIpOwog
fQogCi1ib29sIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnVwZGF0ZUtleUdlbmVyYXRvcihQ
YXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uLCBjb25zdCBJ
REJLZXkqIGtleSwgYm9vbCBjaGVja0N1cnJlbnQpCitib29sIElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6OnVwZGF0ZUtleUdlbmVyYXRvcihQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFj
a2luZ1N0b3JlLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0
aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURC
S2V5KiBrZXksIGJvb2wgY2hlY2tDdXJyZW50KQogewogICAgIEFTU0VSVChrZXkgJiYga2V5LT50
eXBlKCkgPT0gSURCS2V5OjpOdW1iZXJUeXBlKTsKLSAgICByZXR1cm4gYmFja2luZ1N0b3JlKCkt
Pm1heWJlVXBkYXRlS2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcih0cmFuc2FjdGlvbi0+YmFja2lu
Z1N0b3JlVHJhbnNhY3Rpb24oKSwgZGF0YWJhc2VJZCgpLCBpZCgpLCBzdGF0aWNfY2FzdDxpbnQ2
NF90PihmbG9vcihrZXktPm51bWJlcigpKSkgKyAxLCBjaGVja0N1cnJlbnQpOworICAgIHJldHVy
biBiYWNraW5nU3RvcmUtPm1heWJlVXBkYXRlS2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcih0cmFu
c2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgZGF0YWJhc2VJZCwgb2JqZWN0U3Rv
cmVJZCwgc3RhdGljX2Nhc3Q8aW50NjRfdD4oZmxvb3Ioa2V5LT5udW1iZXIoKSkpICsgMSwgY2hl
Y2tDdXJyZW50KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbC5oCmluZGV4IGRjZjcwMTllMWJiYmRlYzcwODA2OTEwNGY0YjkwYmVlN2QwZWFlZjcuLjk5
ODU1NDAwMzZmODhmM2Y2OWQ2Y2QwYjBiMTQ1ODlkZGIzZmRlYjIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsLmgKQEAgLTYyLDI1ICs2MiwyMCBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgLy8gSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlCi0gICAgdmlydHVhbCB2b2lkIGdldChQYXNzUmVm
UHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdmlydHVhbCB2b2lkIHB1
dChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NSZWZQdHI8SURCS2V5Piwg
UHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2UqLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlz
PiYpOworICAgIHZpcnR1YWwgdm9pZCBnZXQoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhj
ZXB0aW9uQ29kZSYpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
cHV0KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxJREJLZXk+
LCBQdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZSosIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYsIGNvbnN0IFZlY3RvcjxJbmRleEtl
eXM+JikgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogCi0gICAgdmlydHVhbCB2b2lkIGRlbGV0
ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgY2xlYXIoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJik7CisgICAgdmlydHVhbCB2b2lk
IGRlbGV0ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUm
KSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisgICAgdmlydHVhbCB2b2lkIGNsZWFyKFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhj
ZXB0aW9uQ29kZSYpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KIAogICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGNyZWF0ZUluZGV4KGludDY0X3QsIGNv
bnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgdW5pcXVlLCBib29sIG11
bHRpRW50cnksIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUm
KTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0SW5kZXhLZXlzKFBhc3NSZWZQdHI8SURCS2V5PiBwcnBQ
cmltYXJ5S2V5LCBjb25zdCBWZWN0b3I8aW50NjRfdD4mLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlz
PiYsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSopOwotICAgIHZpcnR1YWwgdm9pZCBz
ZXRJbmRleGVzUmVhZHkoY29uc3QgVmVjdG9yPGludDY0X3Q+JiwgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlKik7CisgICAgdmlydHVhbCB2b2lkIHNldEluZGV4S2V5cyhQYXNzUmVmUHRy
PElEQktleT4gcHJwUHJpbWFyeUtleSwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiwgY29uc3QgVmVj
dG9yPEluZGV4S2V5cz4mLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqKSB7IEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOyB9CisgICAgdmlydHVhbCB2b2lkIHNldEluZGV4ZXNSZWFkeShjb25z
dCBWZWN0b3I8aW50NjRfdD4mLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqKSB7IEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkluZGV4QmFj
a2VuZEludGVyZmFjZT4gaW5kZXgoaW50NjRfdCk7CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUlu
ZGV4KGludDY0X3QsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNv
ZGUmKTsKIAotICAgIHZpcnR1YWwgdm9pZCBvcGVuQ3Vyc29yKFBhc3NSZWZQdHI8SURCS2V5UmFu
Z2U+LCBJREJDdXJzb3I6OkRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlLCBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdmlydHVhbCB2b2lkIGNvdW50KFBh
c3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIHN0YXRpYyBi
b29sIHBvcHVsYXRlSW5kZXgoSURCQmFja2luZ1N0b3JlJiwgaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4pOwot
Ci0gICAgY29uc3QgSW5kZXhNYXA6Oml0ZXJhdG9yIGl0ZXJJbmRleGVzQmVnaW4oKSB7IHJldHVy
biBtX2luZGV4ZXMuYmVnaW4oKTsgfTsKLSAgICBjb25zdCBJbmRleE1hcDo6aXRlcmF0b3IgaXRl
ckluZGV4ZXNFbmQoKSB7IHJldHVybiBtX2luZGV4ZXMuZW5kKCk7IH07CisgICAgdmlydHVhbCB2
b2lkIG9wZW5DdXJzb3IoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIElEQkN1cnNvcjo6RGlyZWN0
aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZTo6VGFza1R5cGUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlv
bkNvZGUmKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisgICAgdmlydHVhbCB2b2lkIGNvdW50
KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSB7IEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOyB9CiAKICAgICBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG1ldGFkYXRhKCkgY29u
c3Q7CiAgICAgY29uc3QgU3RyaW5nJiBuYW1lKCkgeyByZXR1cm4gbV9tZXRhZGF0YS5uYW1lOyB9
CkBAIC0xMTQsMjIgKzEwOSwxNiBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgYm9vbCBtYWtlSW5k
ZXhXcml0ZXJzKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4sIElEQkJhY2tp
bmdTdG9yZSosIGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0
YSYsIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5LCBib29sIGtleVdhc0dlbmVyYXRlZCwg
Y29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPElEQk9iamVjdFN0
b3JlQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlzPiYsIFZlY3RvcjxPd25QdHI8SW5kZXhXcml0
ZXI+ID4qIGluZGV4V3JpdGVycywgU3RyaW5nKiBlcnJvck1lc3NhZ2UsIGJvb2wmIGNvbXBsZXRl
ZCkgV0FSTl9VTlVTRURfUkVUVVJOOwogCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCS2V5PiBn
ZW5lcmF0ZUtleShQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4sIFBhc3NSZWZQdHI8SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbD4sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkKTsKKyAgICBzdGF0aWMgYm9vbCB1cGRhdGVLZXlHZW5lcmF0b3IoUGFzc1JlZlB0cjxJ
REJCYWNraW5nU3RvcmU+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+LCBp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5Kiwg
Ym9vbCBjaGVja0N1cnJlbnQpOworCiBwcml2YXRlOgogICAgIElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGwoY29uc3QgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCosIGNvbnN0IElEQk9iamVjdFN0b3Jl
TWV0YWRhdGEmKTsKIAogICAgIHZvaWQgbG9hZEluZGV4ZXMoKTsKLSAgICBQYXNzUmVmUHRyPElE
QktleT4gZ2VuZXJhdGVLZXkoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7
Ci0gICAgYm9vbCB1cGRhdGVLZXlHZW5lcmF0b3IoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsPiwgY29uc3QgSURCS2V5KiwgYm9vbCBjaGVja0N1cnJlbnQpOwotCi0gICAgY2xh
c3MgT2JqZWN0U3RvcmVSZXRyaWV2YWxPcGVyYXRpb247Ci0gICAgY2xhc3MgT2JqZWN0U3RvcmVT
dG9yYWdlT3BlcmF0aW9uOwotICAgIGNsYXNzIE9iamVjdFN0b3JlSW5kZXhlc1JlYWR5T3BlcmF0
aW9uOwotICAgIGNsYXNzIE9iamVjdFN0b3JlRGVsZXRpb25PcGVyYXRpb247Ci0gICAgY2xhc3Mg
T2JqZWN0U3RvcmVDbGVhck9wZXJhdGlvbjsKKwogICAgIGNsYXNzIENyZWF0ZUluZGV4T3BlcmF0
aW9uOwogICAgIGNsYXNzIERlbGV0ZUluZGV4T3BlcmF0aW9uOwotICAgIGNsYXNzIE9wZW5PYmpl
Y3RTdG9yZUN1cnNvck9wZXJhdGlvbjsKLSAgICBjbGFzcyBPYmplY3RTdG9yZUNvdW50T3BlcmF0
aW9uOwogCiAgICAgLy8gV2hlbiBhICJ2ZXJzaW9uY2hhbmdlIiB0cmFuc2FjdGlvbiBhYm9ydHMs
IHRoZXNlIHJlc3RvcmUgdGhlIGJhY2stZW5kIG9iamVjdCBoaWVyYXJjaHkuCiAgICAgY2xhc3Mg
Q3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcAppbmRleCAwNDUyNWViNjVlZTBjNWUyOGNl
ZGNjMDZlNzgzYzcxNWJjZjA4N2IzLi5hZmE0NWUyNGIwNDFlZjgyNWM2NTdhNjExOTUxNDBkMTQ1
NzQxMmYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJU
cmFuc2FjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
VHJhbnNhY3Rpb24uY3BwCkBAIC00NjMsNiArNDYzLDExIEBAIEV2ZW50VGFyZ2V0RGF0YSogSURC
VHJhbnNhY3Rpb246OmVuc3VyZUV2ZW50VGFyZ2V0RGF0YSgpCiAgICAgcmV0dXJuICZtX2V2ZW50
VGFyZ2V0RGF0YTsKIH0KIAorSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlKiBJREJUcmFuc2Fj
dGlvbjo6YmFja2VuZERCKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZGIoKS0+YmFja2VuZCgpOwor
fQorCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5oCmluZGV4IGUxMjc1
Yjg0YTk0NTc0Y2Q0Yjk5M2M1MTBjNDgzY2JkNTcxMWRiNDcuLmRmNDFiYmIwZWY1MzM4MWMwY2Uy
NzFiN2RkNDU2ZmRiZjllZTA0MDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCVHJhbnNhY3Rpb24uaApAQCAtNDcsNiArNDcsNyBAQCBjbGFzcyBJREJEYXRh
YmFzZTsKIGNsYXNzIElEQk9iamVjdFN0b3JlOwogY2xhc3MgSURCT3BlbkRCUmVxdWVzdDsKIGNs
YXNzIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZTsKK2NsYXNzIElEQkRhdGFiYXNlQmFj
a2VuZEludGVyZmFjZTsKIHN0cnVjdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhOwogCiBjbGFzcyBJ
REJUcmFuc2FjdGlvbiA6IHB1YmxpYyBTY3JpcHRXcmFwcGFibGUsIHB1YmxpYyBJREJUcmFuc2Fj
dGlvbkNhbGxiYWNrcywgcHVibGljIEV2ZW50VGFyZ2V0LCBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0
IHsKQEAgLTcxLDYgKzcyLDggQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJp
bmcmIG1vZGVUb1N0cmluZyhNb2RlLCBFeGNlcHRpb25Db2RlJik7CiAKICAgICBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2UqIGJhY2tlbmQoKSBjb25zdDsKKyAgICBJREJEYXRhYmFzZUJh
Y2tlbmRJbnRlcmZhY2UqIGJhY2tlbmREQigpIGNvbnN0OworCiAgICAgaW50NjRfdCBpZCgpIGNv
bnN0IHsgcmV0dXJuIG1faWQ7IH0KICAgICBib29sIGlzQWN0aXZlKCkgY29uc3QgeyByZXR1cm4g
bV9zdGF0ZSA9PSBBY3RpdmU7IH0KICAgICBib29sIGlzRmluaXNoZWQoKSBjb25zdCB7IHJldHVy
biBtX3N0YXRlID09IEZpbmlzaGVkOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmgKaW5kZXggMWUy
MmI3MTcwZjI1NTU5NjhjMzc4OTFlYmNkZWVhOWExZWM2YzExMi4uYzc5ZGVmZjQ4ODQ4MDRmN2Yz
N2FmMDMyMzU0MDc4OTI3MzkxYTNiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaApAQCAtNzcs
NiArNzcsOCBAQCBwdWJsaWM6CiAgICAgSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogYmFj
a2luZ1N0b3JlVHJhbnNhY3Rpb24oKSB7IHJldHVybiAmbV90cmFuc2FjdGlvbjsgfQogICAgIGlu
dDY0X3QgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9CiAKKyAgICBJREJEYXRhYmFzZUJhY2tl
bmRJbXBsKiBkYXRhYmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YWJhc2UuZ2V0KCk7IH0KKwog
cHJpdmF0ZToKICAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKGludDY0X3QgaWQsIGNvbnN0
IEhhc2hTZXQ8aW50NjRfdD4mIG9iamVjdFN0b3JlSWRzLCBJREJUcmFuc2FjdGlvbjo6TW9kZSwg
SURCRGF0YWJhc2VCYWNrZW5kSW1wbCopOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJJREJEYXRhYmFzZS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViSURCRGF0YWJhc2UuaAppbmRleCBlNjI0ZmU1OGQ4MTRjYzIzYzI2Yzc1M2YxNjc3
OGE4MDc1Yjc1ODc5Li5jMzFhNTRkMzBkMWU5MWVjYWZiYWU2Mzk3Nzk1MTc4MjMxMThkMTMxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJEYXRhYmFzZS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklEQkRhdGFiYXNlLmgKQEAg
LTg5LDcgKzg5LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBvcGVuQ3Vyc29yKGxvbmcg
bG9uZyB0cmFuc2FjdGlvbklkLCBsb25nIGxvbmcgb2JqZWN0U3RvcmVJZCwgbG9uZyBsb25nIGlu
ZGV4SWQsIGNvbnN0IFdlYklEQktleVJhbmdlJiwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBi
b29sIGtleU9ubHksIFRhc2tUeXBlLCBXZWJJREJDYWxsYmFja3MqKSB7IFdFQktJVF9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBjb3VudChsb25nIGxvbmcgdHJhbnNh
Y3Rpb25JZCwgbG9uZyBsb25nIG9iamVjdFN0b3JlSWQsIGxvbmcgbG9uZyBpbmRleElkLCBjb25z
dCBXZWJJREJLZXlSYW5nZSYsIFdlYklEQkNhbGxiYWNrcyopIHsgV0VCS0lUX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOyB9CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZVJhbmdlKGxvbmcgbG9uZyB0cmFu
c2FjdGlvbklkLCBsb25nIGxvbmcgb2JqZWN0U3RvcmVJZCwgY29uc3QgV2ViSURCS2V5UmFuZ2Um
LCBXZWJJREJDYWxsYmFja3MqKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQotICAg
IHZpcnR1YWwgdm9pZCBjbGVhcihsb25nIGxvbmcgdHJhbnNhY3Rpb25JZCwgbG9uZyBsb25nIG9i
amVjdFN0b3JlSWQsIFdlYklEQkNhbGxiYWNrcyopICB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBjbGVhcihsb25nIGxvbmcgdHJhbnNhY3Rpb25JZCwg
bG9uZyBsb25nIG9iamVjdFN0b3JlSWQsIFdlYklEQkNhbGxiYWNrcyopIHsgV0VCS0lUX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOyB9CiAKIHByb3RlY3RlZDoKICAgICBXZWJJREJEYXRhYmFzZSgpIHsg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRGF0YWJhc2VJ
bXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkRhdGFiYXNlSW1wbC5j
cHAKaW5kZXggYjA1YzUxN2M0MzE4YTE5NzEzZGI5NWZjYzA3ZTYxM2Q5ZTU2YmI0My4uMTM5ZDA0
NzVlZDI5N2ZlMGQxNTU0OTM1NGJkNzEyNGMxMDU5YmIyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRGF0YWJhc2VJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJJREJEYXRhYmFzZUltcGwuY3BwCkBAIC0xNjQsNyArMTY0LDcg
QEAgdm9pZCBXZWJJREJEYXRhYmFzZUltcGw6OnB1dChsb25nIGxvbmcgdHJhbnNhY3Rpb25JZCwg
bG9uZyBsb25nIG9iamVjdFN0b3JlSWQsIFcKICAgICAgICAgaW5kZXhLZXlzW2ldID0gaW5kZXhL
ZXlMaXN0OwogICAgIH0KIAotICAgIFZlY3Rvcjx1aW50OF90PiB2YWx1ZUJ1ZmZlcih2YWx1ZS0+
c2l6ZSgpKTsKKyAgICBWZWN0b3I8dWludDhfdD4gdmFsdWVCdWZmZXI7CiAgICAgdmFsdWVCdWZm
ZXIuYXBwZW5kKHZhbHVlLT5kYXRhKCksIHZhbHVlLT5zaXplKCkpOwogICAgIG1fZGF0YWJhc2VC
YWNrZW5kLT5wdXQodHJhbnNhY3Rpb25JZCwgb2JqZWN0U3RvcmVJZCwgJnZhbHVlQnVmZmVyLCBr
ZXksIHN0YXRpY19jYXN0PElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6UHV0TW9kZT4ocHV0
TW9kZSksIElEQkNhbGxiYWNrc1Byb3h5OjpjcmVhdGUoYWRvcHRQdHIoY2FsbGJhY2tzKSksIGlu
ZGV4SWRzLCBpbmRleEtleXMpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViSURCSW5kZXhJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YklEQkluZGV4SW1wbC5jcHAKaW5kZXggOWIxZDY4Y2ZmN2Q3ZTQyYTViNzA4M2NlNWY3ZTI4MjYx
OTM3Y2VmMS4uYjA4Zjg1NGYzNWY1ODcyMmRiZjUwODgyZDM0NjQ1YWY5MjFlZDQ4OSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCSW5kZXhJbXBsLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJJbmRleEltcGwuY3BwCkBAIC0zMCw2
ICszMCw3IEBACiAKICNpbmNsdWRlICJJREJDYWxsYmFja3NQcm94eS5oIgogI2luY2x1ZGUgIklE
QkluZGV4LmgiCisjaW5jbHVkZSAiSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlLmgiCiAjaW5jbHVk
ZSAiSURCS2V5UmFuZ2UuaCIKICNpbmNsdWRlICJXZWJJREJDYWxsYmFja3MuaCIKICNpbmNsdWRl
ICJXZWJJREJLZXkuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
SURCRGF0YWJhc2VCYWNrZW5kVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0lEQkRhdGFiYXNlQmFja2VuZFRlc3QuY3BwCmluZGV4IGVlNDg3YTFjNjIxZjE5MmEyMDY3YjQy
ZjMyMDEyZDMwZjA1OWE1MjEuLjBjNWY0NThmZjM5OTY0ZDMxZWRkOGVhM2U3ZmNmYjk0YTE0N2Yy
YzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCRGF0YWJhc2VC
YWNrZW5kVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJEYXRh
YmFzZUJhY2tlbmRUZXN0LmNwcApAQCAtNjIsNyArNjIsNyBAQCBURVNUKElEQkRhdGFiYXNlQmFj
a2VuZFRlc3QsIEJhY2tpbmdTdG9yZVJldGVudGlvbikKIAogICAgIGNvbnN0IGJvb2wgdW5pcXVl
ID0gZmFsc2U7CiAgICAgY29uc3QgYm9vbCBtdWx0aUVudHJ5ID0gZmFsc2U7Ci0gICAgUmVmUHRy
PElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4ID0gSURCSW5kZXhCYWNrZW5kSW1wbDo6Y3JlYXRl
KGRiLmdldCgpLCBzdG9yZS5nZXQoKSwgSURCSW5kZXhNZXRhZGF0YSgiaW5kZXgiLCAtMSwgSURC
S2V5UGF0aCgia2V5UGF0aCIpLCB1bmlxdWUsIG11bHRpRW50cnkpKTsKKyAgICBSZWZQdHI8SURC
SW5kZXhCYWNrZW5kSW1wbD4gaW5kZXggPSBJREJJbmRleEJhY2tlbmRJbXBsOjpjcmVhdGUoZGIu
Z2V0KCksIElEQkluZGV4TWV0YWRhdGEoImluZGV4IiwgLTEsIElEQktleVBhdGgoImtleVBhdGgi
KSwgdW5pcXVlLCBtdWx0aUVudHJ5KSk7CiAgICAgRVhQRUNUX0dUKGJhY2tpbmdTdG9yZS0+cmVm
Q291bnQoKSwgMSk7CiAKICAgICBkYi5jbGVhcigpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGMzMDNlMGRkMjE1OWQ0ZDli
ZDg2OGI4MTlkMGUzMGJmNDRhZWU3NzUuLjA2ZjM3MWNmYjBlNGZlYTYxZTY1NGIyZTQwNWY2YTE0
ZjM4NzIyYmEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAxMy0wMS0wMyAgQWxlYyBGbGV0dCAg
PGFsZWNmbGV0dEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBNaWdyYXRlIGJh
Y2tlbmQgT2JqZWN0U3RvcmUgY2FsbHMgdG8gdXNlIHRyYW5zYWN0aW9uIGlkCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDI3NDEKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYWRkaXRpb25hbCBjb3Vu
dCgpIHRlc3RzIGZvciBtdWx0aS1lbnRyeSBpbmRleGVzLCBub3QgcHJldmlvdXNseQorICAgICAg
ICBjb3ZlcmVkLgorCisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvaW5kZXgtbXVsdGllbnRy
eS1leHBlY3RlZC50eHQ6CisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvcmVzb3VyY2VzL2lu
ZGV4LW11bHRpZW50cnkuanM6CisgICAgICAgICgudHJhbnNhY3Rpb24ub25jb21wbGV0ZSk6Cisg
ICAgICAgICh2ZXJpZnlDb3VudC5yZXF1ZXN0Lm9uc3VjY2Vzcy5yZXF1ZXN0Lm9uc3VjY2Vzcyk6
CisgICAgICAgICh2ZXJpZnlDb3VudC5yZXF1ZXN0Lm9uc3VjY2Vzcyk6CisgICAgICAgICh2ZXJp
ZnlDb3VudCk6CisKIDIwMTMtMDEtMDMgIFRlcnJ5IEFuZGVyc29uICA8dGRhbmRlcnNvbkBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCBnYXJkZW5pbmcuIE1hcmtpbmcgZmFzdC9l
dmVudHMvNTA1NjYxOS5odG1sIGFzIGZsYWt5CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9y
YWdlL2luZGV4ZWRkYi9pbmRleC1tdWx0aWVudHJ5LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3Rz
L3N0b3JhZ2UvaW5kZXhlZGRiL2luZGV4LW11bHRpZW50cnktZXhwZWN0ZWQudHh0CmluZGV4IGYx
ZDY5NzdlN2Y4ZjMxMGIzZDE4MzZjOTcyYzg3Yzc2ZWM5YzdmZGQuLjljMmRlZjhiOTE3NDAzNDMy
ZGU2MGNlYTFlZmJhZjkwOWY5ZWNjZDQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3N0b3JhZ2Uv
aW5kZXhlZGRiL2luZGV4LW11bHRpZW50cnktZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3Rz
L3N0b3JhZ2UvaW5kZXhlZGRiL2luZGV4LW11bHRpZW50cnktZXhwZWN0ZWQudHh0CkBAIC04Miw2
ICs4MiwxMiBAQCBQQVNTIGN1cnNvci52YWx1ZS55IGlzICJkIgogY3Vyc29yLmNvbnRpbnVlKCkK
IGN1cnNvciA9IGV2ZW50LnRhcmdldC5yZXN1bHQKIFBBU1MgZXhwZWN0ZWQubGVuZ3RoIGlzIDAK
K3RyYW5zYWN0aW9uID0gZGIudHJhbnNhY3Rpb24oWydzdG9yZSddKQordHJhbnNhY3Rpb24ub2Jq
ZWN0U3RvcmUoJ3N0b3JlJykuaW5kZXgoJ2luZGV4JykKK2luZGV4LmNvdW50KCkKK1BBU1MgZXZl
bnQudGFyZ2V0LnJlc3VsdCBpcyA5CitpbmRleC5jb3VudCg3KQorUEFTUyBldmVudC50YXJnZXQu
cmVzdWx0IGlzIDEKIAogVmVyaWZ5aW5nIHVuaXF1ZSBjb25zdHJhaW50IG9uIG11bHRpRW50cnkg
aW5kZXgKIHRyYW5zYWN0aW9uID0gZGIudHJhbnNhY3Rpb24oWydzdG9yZS11bmlxdWUnXSwgJ3Jl
YWR3cml0ZScpCkBAIC0xNjIsNiArMTY4LDEyIEBAIFBBU1MgY3Vyc29yLnZhbHVlLnkgaXMgImQi
CiBjdXJzb3IuY29udGludWUoKQogY3Vyc29yID0gZXZlbnQudGFyZ2V0LnJlc3VsdAogUEFTUyBl
eHBlY3RlZC5sZW5ndGggaXMgMAordHJhbnNhY3Rpb24gPSBkYi50cmFuc2FjdGlvbihbJ3N0b3Jl
J10pCit0cmFuc2FjdGlvbi5vYmplY3RTdG9yZSgnc3RvcmUnKS5pbmRleCgnaW5kZXgnKQoraW5k
ZXguY291bnQoKQorUEFTUyBldmVudC50YXJnZXQucmVzdWx0IGlzIDkKK2luZGV4LmNvdW50KDcp
CitQQVNTIGV2ZW50LnRhcmdldC5yZXN1bHQgaXMgMQogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQg
aXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdl
L2luZGV4ZWRkYi9yZXNvdXJjZXMvaW5kZXgtbXVsdGllbnRyeS5qcyBiL0xheW91dFRlc3RzL3N0
b3JhZ2UvaW5kZXhlZGRiL3Jlc291cmNlcy9pbmRleC1tdWx0aWVudHJ5LmpzCmluZGV4IDdkZjVm
NTkyY2ZjYzNmMTU2YjczNDMzODI5M2YxNmZlYTJkZWM0YzAuLmIwYjU1ZThhYmZlYjA0OGJjYjU2
NWI1NGQyYWFiZjgzYjYxMTcyMzggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5k
ZXhlZGRiL3Jlc291cmNlcy9pbmRleC1tdWx0aWVudHJ5LmpzCisrKyBiL0xheW91dFRlc3RzL3N0
b3JhZ2UvaW5kZXhlZGRiL3Jlc291cmNlcy9pbmRleC1tdWx0aWVudHJ5LmpzCkBAIC00NSw3ICs0
NSw3IEBAIGZ1bmN0aW9uIHZlcmlmeUluZGV4ZXMoaW5kZXhOYW1lLCBjYWxsYmFjaykKICAgICBk
ZWJ1ZygiVmVyaWZ5aW5nIGluZGV4OiAiICsgaW5kZXhOYW1lKTsKICAgICB0cmFuc2FjdGlvbiA9
IGV2YWxBbmRMb2coInRyYW5zYWN0aW9uID0gZGIudHJhbnNhY3Rpb24oWydzdG9yZSddLCAncmVh
ZG9ubHknKSIpOwogICAgIHRyYW5zYWN0aW9uLm9uYWJvcnQgPSB1bmV4cGVjdGVkQWJvcnRDYWxs
YmFjazsKLSAgICB0cmFuc2FjdGlvbi5vbmNvbXBsZXRlID0gY2FsbGJhY2s7CisgICAgdHJhbnNh
Y3Rpb24ub25jb21wbGV0ZSA9IGZ1bmN0aW9uKCkgeyB2ZXJpZnlDb3VudChjYWxsYmFjayk7IH07
CiAKICAgICBleHBlY3RlZCA9IFsKICAgICAgICAgeyBrZXk6IDEsIHByaW1hcnlLZXk6ICdmb28n
LCB5OiAnYScgfSwKQEAgLTEwNCw2ICsxMDQsMjYgQEAgZnVuY3Rpb24gdmVyaWZ5VW5pcXVlQ29u
c3RyYWludCgpCiAgICAgfTsKIH0KIAorZnVuY3Rpb24gdmVyaWZ5Q291bnQoY2FsbGJhY2spIHsK
KyAgICBldmFsQW5kTG9nKCJ0cmFuc2FjdGlvbiA9IGRiLnRyYW5zYWN0aW9uKFsnc3RvcmUnXSki
KTsKKworICAgIHRyYW5zYWN0aW9uLm9uYWJvcnQgPSB1bmV4cGVjdGVkQWJvcnRDYWxsYmFjazsK
KyAgICB0cmFuc2FjdGlvbi5vbmNvbXBsZXRlID0gY2FsbGJhY2s7CisKKyAgICBpbmRleCA9IGV2
YWxBbmRMb2coInRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKCdzdG9yZScpLmluZGV4KCdpbmRleCcp
Iik7CisgICAgcmVxdWVzdCA9IGV2YWxBbmRMb2coImluZGV4LmNvdW50KCkiKTsKKyAgICByZXF1
ZXN0Lm9uc3VjY2VzcyA9IGZ1bmN0aW9uKGV2ZW50KSB7CisKKyAgICAgICAgc2hvdWxkQmUoImV2
ZW50LnRhcmdldC5yZXN1bHQiLCAiOSIpOworCisgICAgICAgIHJlcXVlc3QgPSBldmFsQW5kTG9n
KCJpbmRleC5jb3VudCg3KSIpOworICAgICAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IGZ1bmN0aW9u
KGV2ZW50KSB7CisgICAgICAgICAgICBzaG91bGRCZSgiZXZlbnQudGFyZ2V0LnJlc3VsdCIsICIx
Iik7CisgICAgICAgIH07CisgICAgfTsKKworfQorCiBmdW5jdGlvbiBjcmVhdGVJbmRleE9uU3Rv
cmVXaXRoRGF0YSgpCiB7CiAgICAgZGVidWcoIiIpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>181326</attachid>
            <date>2013-01-04 10:25:28 -0800</date>
            <delta_ts>2013-01-04 12:00:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-102741-20130104102235.patch</filename>
            <type>text/plain</type>
            <size>116183</size>
            <attacher name="Alec Flett">alecflett</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM4NzY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmUzNWIyZTk1ZWEwYWNj
NWE5YTVlYzFhMjFkMTZhMGY3MzEyYTAxYi4uYmVmMzA4MzZkNjBiNzI2YzQzNWFmNTk0N2FkMmY5
NDlkNTNkN2RmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzMSBAQAorMjAxMy0wMS0wMyAgQWxl
YyBGbGV0dCAgPGFsZWNmbGV0dEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBN
aWdyYXRlIGJhY2tlbmQgT2JqZWN0U3RvcmUgY2FsbHMgdG8gdXNlIHRyYW5zYWN0aW9uIGlkCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDI3NDEKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGdWxseSBtaWdy
YXRlIDggY29yZSBkYXRhIGNhbGxzIChnZXQsIHB1dCwgc2V0SW5kZXhLZXlzLCBzZXRJbmRleGVz
UmVhZHksCisgICAgICAgIG9wZW5DdXJzb3IsIGNvdW50LCBkZWxldGVSYW5nZSwgYW5kIGNsZWFy
KSBpbnRvIElEQkRhdGFiYXNlQmFja2VuZEltcGwsCisgICAgICAgIGNvbWJpbmluZyBjb21tb24g
Y29kZSBmcm9tIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwgYW5kIElEQkluZGV4QmFja2VuZElt
cGwKKyAgICAgICAgaW4gb3JkZXIgdG8gc2ltcGxpZnkgdGhlIGJhY2tlbmQgaW50ZXJmYWNlLiBU
aGVzZSBjYWxscyBhcmUgbm93CisgICAgICAgIGltcGxlbWVudGVkIGluIHRlcm1zIG9mIGFuIGlu
dDY0X3QtYmFzZWQgdHJhbnNhY3Rpb25JZCByYXRoZXIgdGhhbgorICAgICAgICBhbiBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UsIHdoaWNoIHNpbXBsaWZpZXMgdGhlIG93bmVyc2hpcCBt
b2RlbAorICAgICAgICBiZXR3ZWVuIHRoZSBmcm9udGVuZCBhbmQgdGhlIGJhY2tlbmQuCisKKyAg
ICAgICAgSW4gYWRkaXRpb24sIHJlbW92ZSByZWZlcmVuY2VzIHRvIElEQk9iamVjdFN0b3JlQmFj
a2VuZCogZnJvbSBJREJJbmRleCwKKyAgICAgICAgYXMgaXQgaXMgbm8gbG9uZ2VyIG5lZWRlZC4K
KworICAgICAgICBBIGZldyBkdXBsaWNhdGUgSURCX1RSQUNFIG1ldGhvZHMgaGF2ZSBiZWVuIHJl
bW92ZWQgZnJvbSB3cmFwcGVyIG1ldGhvZHMKKyAgICAgICAgdGhhdCBjYWxsIGFub3RoZXIgbWV0
aG9kIHRoYXQgYWxyZWFkeSBoYXZlIElEQl9UUkFDRSdzLgorCisgICAgICAgIEZpbmFsbHksIElE
QkN1cnNvckJhY2tlbmRJbXBsIG5vdyBubyBsb25nZXIgaG9sZHMgb250byBhbiAKKyAgICAgICAg
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCosIHNvIGl0cyBkZXN0cnVjdGlvbiBhbmQgbWVtYmVy
IHZhcmlhYmxlcyBhcmUKKyAgICAgICAgc2ltcGxpZmllZCwgYW5kIHJlb3JkZXJlZCB0byBtYXRj
aCBwcm9wZXIgZGVzdHJ1Y3Rpb24gb3JkZXIuCisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3JC
YWNrZW5kSW1wbDo6SURCQ3Vyc29yQmFja2VuZEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SURC
Q3Vyc29yQmFja2VuZEltcGw6On5JREJDdXJzb3JCYWNrZW5kSW1wbCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJDdXJzb3JCYWNrZW5kSW1wbDo6ZGVsZXRlRnVuY3Rpb24pOgorICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmg6CisgICAgICAgIChXZWJDb3Jl
OjpJREJDdXJzb3JCYWNrZW5kSW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKElEQkN1cnNvckJhY2tl
bmRJbXBsKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5oOgorICAg
ICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6OmJhY2tlbmQpOgorICAgICAgICAoSURCRGF0YWJh
c2UpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwu
Y3BwOgorICAgICAgICAoR2V0T3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdldE9wZXJh
dGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdldE9wZXJhdGlvbjo6R2V0T3BlcmF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoUHV0T3BlcmF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlB1dE9wZXJhdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlB1
dE9wZXJhdGlvbjo6UHV0T3BlcmF0aW9uKToKKyAgICAgICAgKFNldEluZGV4ZXNSZWFkeU9wZXJh
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTZXRJbmRleGVzUmVhZHlPcGVyYXRpb246OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTZXRJbmRleGVzUmVhZHlPcGVyYXRpb246OlNldEluZGV4
ZXNSZWFkeU9wZXJhdGlvbik6CisgICAgICAgIChPcGVuQ3Vyc29yT3BlcmF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok9wZW5DdXJzb3JPcGVyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpPcGVuQ3Vyc29yT3BlcmF0aW9uOjpPcGVuQ3Vyc29yT3BlcmF0aW9uKToKKyAgICAgICAg
KENvdW50T3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvdW50T3BlcmF0aW9uOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q291bnRPcGVyYXRpb246OkNvdW50T3BlcmF0aW9uKToK
KyAgICAgICAgKERlbGV0ZVJhbmdlT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0
ZVJhbmdlT3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlUmFuZ2VP
cGVyYXRpb246OkRlbGV0ZVJhbmdlT3BlcmF0aW9uKToKKyAgICAgICAgKENsZWFyT3BlcmF0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkNsZWFyT3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6Q2xlYXJPcGVyYXRpb246OkNsZWFyT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmdldCk6CisgICAgICAgIChXZWJDb3JlOjpHZXRP
cGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5k
SW1wbDo6cHV0KToKKyAgICAgICAgKFdlYkNvcmU6OlB1dE9wZXJhdGlvbjo6cGVyZm9ybSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRJbmRleEtleXMpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6c2V0SW5kZXhlc1JlYWR5
KToKKyAgICAgICAgKFdlYkNvcmU6OlNldEluZGV4ZXNSZWFkeU9wZXJhdGlvbjo6cGVyZm9ybSk6
CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29yKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNvdW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvdW50T3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6
OkRlbGV0ZVJhbmdlT3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRh
dGFiYXNlQmFja2VuZEltcGw6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkNsZWFyT3BlcmF0
aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wZW5DdXJzb3JPcGVyYXRpb246OnBl
cmZvcm0pOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OklEQkluZGV4OjpJREJJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJJ
bmRleDo6b3BlbkN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleDo6Y291bnQpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXg6Om9wZW5LZXlDdXJzb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCSW5kZXg6OmdldCk6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleDo6Z2V0S2V5
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4OjpiYWNrZW5kREIpOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguaDoKKyAgICAgICAg
KFdlYkNvcmU6OklEQkluZGV4OjpjcmVhdGUpOgorICAgICAgICAoSURCSW5kZXgpOgorICAgICAg
ICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SURCSW5kZXhCYWNrZW5kSW1wbDo6SURCSW5kZXhCYWNrZW5kSW1wbCk6CisgICAg
ICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5oOgorICAgICAgICAo
V2ViQ29yZTo6SURCSW5kZXhCYWNrZW5kSW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQkluZGV4QmFja2VuZEltcGw6Om9wZW5DdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6SURC
SW5kZXhCYWNrZW5kSW1wbDo6Y291bnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXhCYWNr
ZW5kSW1wbDo6b3BlbktleUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleEJhY2tl
bmRJbXBsOjpnZXQpOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXhCYWNrZW5kSW1wbDo6Z2V0
S2V5KToKKyAgICAgICAgKElEQkluZGV4QmFja2VuZEltcGwpOgorICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVj
dFN0b3JlOjpnZXQpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OnB1dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6ZGVsZXRlRnVuY3Rpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmNyZWF0ZUluZGV4KToKKyAgICAgICAg
KFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjppbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJP
YmplY3RTdG9yZTo6b3BlbkN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9y
ZTo6Y291bnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmJhY2tlbmREQik6
CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaDoKKyAgICAgICAg
KFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjppZCk6CisgICAgICAgIChJREJPYmplY3RTdG9yZSk6
CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVhdGVJ
bmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpsb2Fk
SW5kZXhlcyk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpn
ZW5lcmF0ZUtleSk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
Ojp1cGRhdGVLZXlHZW5lcmF0b3IpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9i
amVjdFN0b3JlQmFja2VuZEltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6OmdldCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpwdXQpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bDo6ZGVsZXRlRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6c2V0SW5kZXhLZXlzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OnNldEluZGV4ZXNSZWFkeSk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OmNvdW50KToKKyAgICAgICAgKElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGwpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmRh
dGFiYXNlKToKKyAgICAgICAgKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwpOgorCiAyMDEzLTAx
LTAzICBBbnRvaW5lIFF1aW50ICA8Z3Jhb3V0c0BhcHBsZS5jb20+CiAKICAgICAgICAgb25sb2Fk
IGNhbGxiYWNrIGZvciA8dHJhY2s+IGVsZW1lbnQgYXR0YWNoZWQgdG8gPHZpZGVvPiBkb2VzIG5v
dCBmaXJlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGRlMDc5N2I1NmE0OGQwYTY1NjVj
YmI3NWJhZDEzMTc4YTZkNGE2MWYuLmMzZTljZjA1MDI2NDA4MzA0ZjhhZjM4Yjg1NDkzMDZkMzBh
YjBhN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTMt
MDEtMDMgIEFsZWMgRmxldHQgIDxhbGVjZmxldHRAY2hyb21pdW0ub3JnPgorCisgICAgICAgIElu
ZGV4ZWREQjogTWlncmF0ZSBiYWNrZW5kIE9iamVjdFN0b3JlIGNhbGxzIHRvIHVzZSB0cmFuc2Fj
dGlvbiBpZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTAyNzQxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
Rml4IGEgYnVnIHdoZXJlIGFuIGFycmF5IHdhcyBpbml0aWFsaXplZCB3aXRoIGEgbGFyZ2UgZW1w
dHkgYnVmZmVyLAorICAgICAgICBjbGVhbiB1cCB3aGl0ZXNwYWNlLCBhbmQgdXBkYXRlIHRvIG1h
dGNoIHNpZ25hdHVyZXMgdGhhdCBjaGFuZ2VkCisgICAgICAgIGluIFdlYkNvcmUuCisKKyAgICAg
ICAgKiBwdWJsaWMvV2ViSURCRGF0YWJhc2UuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViSURCRGF0
YWJhc2U6OmNsZWFyKToKKyAgICAgICAgKiBzcmMvV2ViSURCRGF0YWJhc2VJbXBsLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViSURCRGF0YWJhc2VJbXBsOjpwdXQpOgorICAgICAgICAqIHNyYy9X
ZWJJREJJbmRleEltcGwuY3BwOgorICAgICAgICAqIHRlc3RzL0lEQkRhdGFiYXNlQmFja2VuZFRl
c3QuY3BwOgorCiAyMDEzLTAxLTAzICBTYW1pIEt5b3N0aWxhICA8c2t5b3N0aWxAY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gUmVuYW1lIGxvdyBsYXRlbmN5IHJlbmRlcmluZyBt
b2RlIHNldHRpbmcgdG8gdnN5bmMgbm90aWZpY2F0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAKaW5kZXgg
ZGE3YWRjZjg5NTVkMDMzMmJhMjc0ZWYwNjJkNjcyODY1MTI3YjJiMy4uZmVhYjVjNWUzYTM2NDVm
MDk5NDQwMDliMDNjOWZjZDYwNGRjNmIxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcApAQCAtMTAxLDEy
ICsxMDEsMTMgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNr
czsKIH07CiAKLUlEQkN1cnNvckJhY2tlbmRJbXBsOjpJREJDdXJzb3JCYWNrZW5kSW1wbChQYXNz
UmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBjdXJzb3IsIEN1cnNvclR5cGUgY3Vyc29y
VHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSB0YXNrVHlwZSwg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24sIElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGwqIG9iamVjdFN0b3JlKQotICAgIDogbV9jdXJzb3IoY3Vyc29yKQotICAgICwgbV90
YXNrVHlwZSh0YXNrVHlwZSkKK0lEQkN1cnNvckJhY2tlbmRJbXBsOjpJREJDdXJzb3JCYWNrZW5k
SW1wbChQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBjdXJzb3IsIEN1cnNvclR5
cGUgY3Vyc29yVHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSB0
YXNrVHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24sIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCkKKyAgICA6IG1fdGFza1R5cGUodGFza1R5cGUpCiAgICAgLCBtX2N1cnNv
clR5cGUoY3Vyc29yVHlwZSkKKyAgICAsIG1fZGF0YWJhc2UodHJhbnNhY3Rpb24tPmRhdGFiYXNl
KCkpCiAgICAgLCBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQotICAgICwgbV9vYmplY3RTdG9y
ZShvYmplY3RTdG9yZSkKKyAgICAsIG1fb2JqZWN0U3RvcmVJZChvYmplY3RTdG9yZUlkKQorICAg
ICwgbV9jdXJzb3IoY3Vyc29yKQogICAgICwgbV9jbG9zZWQoZmFsc2UpCiB7CiAgICAgbV90cmFu
c2FjdGlvbi0+cmVnaXN0ZXJPcGVuQ3Vyc29yKHRoaXMpOwpAQCAtMTE1LDExICsxMTYsNiBAQCBJ
REJDdXJzb3JCYWNrZW5kSW1wbDo6SURCQ3Vyc29yQmFja2VuZEltcGwoUGFzc1JlZlB0cjxJREJC
YWNraW5nU3RvcmU6OkN1cnNvcj4gYwogSURCQ3Vyc29yQmFja2VuZEltcGw6On5JREJDdXJzb3JC
YWNrZW5kSW1wbCgpCiB7CiAgICAgbV90cmFuc2FjdGlvbi0+dW5yZWdpc3Rlck9wZW5DdXJzb3Io
dGhpcyk7Ci0gICAgLy8gT3JkZXIgaXMgaW1wb3J0YW50LCB0aGUgY3Vyc29ycyBoYXZlIHRvIGJl
IGRlc3RydWN0ZWQgYmVmb3JlIHRoZSBvYmplY3RTdG9yZS4KLSAgICBtX2N1cnNvci5jbGVhcigp
OwotICAgIG1fc2F2ZWRDdXJzb3IuY2xlYXIoKTsKLQotICAgIG1fb2JqZWN0U3RvcmUuY2xlYXIo
KTsKIH0KIAogCkBAIC0xNzAsOCArMTY2LDcgQEAgdm9pZCBJREJDdXJzb3JCYWNrZW5kSW1wbDo6
ZGVsZXRlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywKICAg
ICBSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlID0gSURCS2V5UmFuZ2U6Om9ubHkobV9jdXJz
b3ItPnByaW1hcnlLZXkoKSwgZWMpOwogICAgIEFTU0VSVCghZWMpOwogCi0gICAgbV9vYmplY3RT
dG9yZS0+ZGVsZXRlRnVuY3Rpb24oa2V5UmFuZ2UucmVsZWFzZSgpLCBwcnBDYWxsYmFja3MsIG1f
dHJhbnNhY3Rpb24uZ2V0KCksIGVjKTsKLSAgICBBU1NFUlQoIWVjKTsKKyAgICBtX2RhdGFiYXNl
LT5kZWxldGVSYW5nZShtX3RyYW5zYWN0aW9uLT5pZCgpLCBtX29iamVjdFN0b3JlSWQsIGtleVJh
bmdlLnJlbGVhc2UoKSwgcHJwQ2FsbGJhY2tzKTsKIH0KIAogdm9pZCBJREJDdXJzb3JCYWNrZW5k
SW1wbDo6cHJlZmV0Y2hDb250aW51ZShpbnQgbnVtYmVyVG9GZXRjaCwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IHBycENhbGxiYWNrcywgRXhjZXB0aW9uQ29kZSYpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuaAppbmRl
eCBiMGM3OWYyMTRmY2FjNjcyMmVjNTQ0MjNlOWQ5OWI4ZmZiNTFkNjM0Li41NjA3YjU3NjdjYjc5
NWVhZDM4ZTUxYjRkMTg4Y2ZlOGYzODhjNWY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmgKQEAgLTQ3LDEzICs0
NywxMyBAQCBjbGFzcyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOwogCiBjbGFzcyBJREJDdXJz
b3JCYWNrZW5kSW1wbCA6IHB1YmxpYyBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlIHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW1wbD4gY3JlYXRlKFBh
c3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGN1cnNvciwgQ3Vyc29yVHlwZSBjdXJz
b3JUeXBlLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbiwgSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbCogb2JqZWN0U3RvcmUpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURC
Q3Vyc29yQmFja2VuZEltcGw+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vy
c29yPiBjdXJzb3IsIEN1cnNvclR5cGUgY3Vyc29yVHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbCogdHJhbnNhY3Rpb24sIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKICAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgSURCQ3Vyc29yQmFja2VuZEltcGwoY3Vyc29yLCBjdXJzb3JU
eXBlLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U6Ok5vcm1hbFRhc2ssIHRyYW5zYWN0
aW9uLCBvYmplY3RTdG9yZSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkN1cnNv
ckJhY2tlbmRJbXBsKGN1cnNvciwgY3Vyc29yVHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlOjpOb3JtYWxUYXNrLCB0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVJZCkpOwogICAgIH0K
LSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW1wbD4gY3JlYXRlKFBhc3NS
ZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGN1cnNvciwgQ3Vyc29yVHlwZSBjdXJzb3JU
eXBlLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlIHRhc2tUeXBlLCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbiwgSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbCogb2JqZWN0U3RvcmUpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFj
a2VuZEltcGw+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBjdXJz
b3IsIEN1cnNvclR5cGUgY3Vyc29yVHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
OjpUYXNrVHlwZSB0YXNrVHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rp
b24sIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgSURCQ3Vyc29yQmFja2VuZEltcGwoY3Vyc29yLCBjdXJzb3JUeXBlLCB0YXNrVHlwZSwg
dHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
SURCQ3Vyc29yQmFja2VuZEltcGwoY3Vyc29yLCBjdXJzb3JUeXBlLCB0YXNrVHlwZSwgdHJhbnNh
Y3Rpb24sIG9iamVjdFN0b3JlSWQpKTsKICAgICB9CiAgICAgdmlydHVhbCB+SURCQ3Vyc29yQmFj
a2VuZEltcGwoKTsKIApAQCAtNzEsMTggKzcxLDIwIEBAIHB1YmxpYzoKICAgICB2b2lkIGNsb3Nl
KCk7CiAKIHByaXZhdGU6Ci0gICAgSURCQ3Vyc29yQmFja2VuZEltcGwoUGFzc1JlZlB0cjxJREJC
YWNraW5nU3RvcmU6OkN1cnNvcj4sIEN1cnNvclR5cGUsIElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZTo6VGFza1R5cGUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqLCBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsKik7CisgICAgSURCQ3Vyc29yQmFja2VuZEltcGwoUGFzc1JlZlB0cjxJ
REJCYWNraW5nU3RvcmU6OkN1cnNvcj4sIEN1cnNvclR5cGUsIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZTo6VGFza1R5cGUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQpOwogCiAgICAgY2xhc3MgQ3Vyc29ySXRlcmF0aW9uT3BlcmF0aW9uOwog
ICAgIGNsYXNzIEN1cnNvckFkdmFuY2VPcGVyYXRpb247CiAgICAgY2xhc3MgQ3Vyc29yUHJlZmV0
Y2hJdGVyYXRpb25PcGVyYXRpb247CiAKLSAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJz
b3I+IG1fY3Vyc29yOwotICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gbV9zYXZl
ZEN1cnNvcjsKICAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlIG1f
dGFza1R5cGU7CiAgICAgQ3Vyc29yVHlwZSBtX2N1cnNvclR5cGU7Ci0gICAgUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGw+IG1fdHJhbnNhY3Rpb247Ci0gICAgUmVmUHRyPElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw+IG1fb2JqZWN0U3RvcmU7CisgICAgY29uc3QgUmVmUHRyPElEQkRh
dGFiYXNlQmFja2VuZEltcGw+IG1fZGF0YWJhc2U7CisgICAgY29uc3QgUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw+IG1fdHJhbnNhY3Rpb247CisgICAgY29uc3QgaW50NjRfdCBtX29i
amVjdFN0b3JlSWQ7CisgICAgLy8gT3JkZXIgaXMgaW1wb3J0YW50LCB0aGUgY3Vyc29ycyBoYXZl
IHRvIGJlIGRlc3RydWN0ZWQgYmVmb3JlIHRoZSB0cmFuc2FjdGlvbi4KKyAgICBSZWZQdHI8SURC
QmFja2luZ1N0b3JlOjpDdXJzb3I+IG1fY3Vyc29yOworICAgIFJlZlB0cjxJREJCYWNraW5nU3Rv
cmU6OkN1cnNvcj4gbV9zYXZlZEN1cnNvcjsKIAogICAgIGJvb2wgbV9jbG9zZWQ7CiB9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmgKaW5kZXggZGRj
MTg5YTBiNDI4ZGI0OGVlZjRkYjYwNzY0ZTEyZjM2NWI1MGVkYi4uZjk5YjVlNDg2NzJkYzg1NmI3
ZGQzZjQzMTEyZTc4YjYzNjU1YzBjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJEYXRhYmFzZS5oCkBAIC0xMDMsNiArMTAzLDggQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gZmluZE9iamVjdFN0b3JlSWQobmFtZSkgIT0gSURCT2JqZWN0U3RvcmVNZXRhZGF0
YTo6SW52YWxpZElkOwogICAgIH0KIAorICAgIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZSog
YmFja2VuZCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZC5nZXQoKTsgfQorCiAgICAgc3RhdGlj
IGludDY0X3QgbmV4dFRyYW5zYWN0aW9uSWQoKTsKIAogICAgIHVzaW5nIFJlZkNvdW50ZWQ8SURC
RGF0YWJhc2U+OjpyZWY7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCmluZGV4IGNkOGFlNzc4NzMwNzY0
Mjk4YWNiZWU5ZWNjOWZmM2RmNGNjZjk3M2EuLjU3MjcxZjE3MWZmNjkwZDI3NDdjZGY0MjljNGVj
ZGJiYTk2ODI0N2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCkBAIC0yOSw4ICsyOSwxMCBAQAog
I2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCiAjaW5jbHVkZSAiSURCQmFja2luZ1N0b3Jl
LmgiCisjaW5jbHVkZSAiSURCQ3Vyc29yQmFja2VuZEltcGwuaCIKICNpbmNsdWRlICJJREJEYXRh
YmFzZUV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIklEQkZhY3RvcnlCYWNrZW5kSW1wbC5oIgorI2lu
Y2x1ZGUgIklEQkluZGV4QmFja2VuZEltcGwuaCIKICNpbmNsdWRlICJJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsLmgiCiAjaW5jbHVkZSAiSURCVHJhY2luZy5oIgogI2luY2x1ZGUgIklEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGwuaCIKQEAgLTE1NCw2ICsxNTYsMTkyIEBAIHByaXZhdGU6CiAgICAg
aW50NjRfdCBtX3ByZXZpb3VzSW50VmVyc2lvbjsKIH07CiAKK2NsYXNzIEdldE9wZXJhdGlvbiA6
IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24geworcHVibGljOgor
ICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlv
bj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIGNvbnN0
IElEQkRhdGFiYXNlTWV0YWRhdGEmIG1ldGFkYXRhLCBpbnQ2NCBvYmplY3RTdG9yZUlkLCBpbnQ2
NCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgSURCQ3Vyc29yQmFj
a2VuZEludGVyZmFjZTo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4gY2FsbGJhY2tzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBHZXRP
cGVyYXRpb24oYmFja2luZ1N0b3JlLCBtZXRhZGF0YSwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwg
a2V5UmFuZ2UsIGN1cnNvclR5cGUsIGNhbGxiYWNrcykpOworICAgIH0KKworICAgIHZvaWQgcGVy
Zm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7CisKK3ByaXZhdGU6CisgICAgR2V0T3Bl
cmF0aW9uKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIGNvbnN0IElE
QkRhdGFiYXNlTWV0YWRhdGEmIG1ldGFkYXRhLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0
X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIElEQkN1cnNvckJh
Y2tlbmRJbnRlcmZhY2U6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+IGNhbGxiYWNrcykKKyAgICAgICAgOiBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUp
CisgICAgICAgICwgbV9kYXRhYmFzZUlkKG1ldGFkYXRhLmlkKQorICAgICAgICAsIG1fb2JqZWN0
U3RvcmVJZChvYmplY3RTdG9yZUlkKQorICAgICAgICAsIG1faW5kZXhJZChpbmRleElkKQorICAg
ICAgICAsIG1fa2V5UGF0aChtZXRhZGF0YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQp
LmtleVBhdGgpCisgICAgICAgICwgbV9hdXRvSW5jcmVtZW50KG1ldGFkYXRhLm9iamVjdFN0b3Jl
cy5nZXQob2JqZWN0U3RvcmVJZCkuYXV0b0luY3JlbWVudCkKKyAgICAgICAgLCBtX2tleVJhbmdl
KGtleVJhbmdlKQorICAgICAgICAsIG1fY3Vyc29yVHlwZShjdXJzb3JUeXBlKQorICAgICAgICAs
IG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKKyAgICB7CisgICAgICAgIEFTU0VSVChtZXRhZGF0YS5v
YmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpLmlkID09IG9iamVjdFN0b3JlSWQpOworICAg
IH0KKworICAgIGNvbnN0IFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IG1fYmFja2luZ1N0b3JlOwor
ICAgIGNvbnN0IGludDY0X3QgbV9kYXRhYmFzZUlkOworICAgIGNvbnN0IGludDY0X3QgbV9vYmpl
Y3RTdG9yZUlkOworICAgIGNvbnN0IGludDY0X3QgbV9pbmRleElkOworICAgIGNvbnN0IElEQktl
eVBhdGggbV9rZXlQYXRoOworICAgIGNvbnN0IGJvb2wgbV9hdXRvSW5jcmVtZW50OworICAgIGNv
bnN0IFJlZlB0cjxJREJLZXlSYW5nZT4gbV9rZXlSYW5nZTsKKyAgICBjb25zdCBJREJDdXJzb3JC
YWNrZW5kSW50ZXJmYWNlOjpDdXJzb3JUeXBlIG1fY3Vyc29yVHlwZTsKKyAgICBjb25zdCBSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKK307CisKK2NsYXNzIFB1dE9wZXJhdGlvbiA6
IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24geworcHVibGljOgor
ICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlv
bj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIGludDY0
X3QgZGF0YWJhc2VJZCwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmUs
IFZlY3Rvcjx1aW50OF90PiYgdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIElEQkRhdGFi
YXNlQmFja2VuZEludGVyZmFjZTo6UHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4gY2FsbGJhY2tzLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25zdCBW
ZWN0b3I8SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleXM+JiBpbmRleEtleXMp
CisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFB1dE9wZXJhdGlvbihiYWNraW5n
U3RvcmUsIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlLCB2YWx1ZSwga2V5LCBwdXRNb2RlLCBjYWxs
YmFja3MsIGluZGV4SWRzLCBpbmRleEtleXMpKTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIHBl
cmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOworcHJpdmF0ZToKKyAgICBQdXRPcGVy
YXRpb24oUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSwgaW50NjRfdCBk
YXRhYmFzZUlkLCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZSwgVmVj
dG9yPHVpbnQ4X3Q+JiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgSURCRGF0YWJhc2VC
YWNrZW5kSW50ZXJmYWNlOjpQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBjYWxsYmFja3MsIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMsIGNvbnN0IFZlY3Rv
cjxJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OkluZGV4S2V5cz4mIGluZGV4S2V5cykKKyAg
ICAgICAgOiBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUpCisgICAgICAgICwgbV9kYXRhYmFz
ZUlkKGRhdGFiYXNlSWQpCisgICAgICAgICwgbV9vYmplY3RTdG9yZShvYmplY3RTdG9yZSkKKyAg
ICAgICAgLCBtX2tleShrZXkpCisgICAgICAgICwgbV9wdXRNb2RlKHB1dE1vZGUpCisgICAgICAg
ICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQorICAgICAgICAsIG1faW5kZXhJZHMoaW5kZXhJZHMp
CisgICAgICAgICwgbV9pbmRleEtleXMoaW5kZXhLZXlzKQorICAgIHsKKyAgICAgICAgbV92YWx1
ZS5zd2FwKHZhbHVlKTsKKyAgICB9CisKKyAgICBjb25zdCBSZWZQdHI8SURCQmFja2luZ1N0b3Jl
PiBtX2JhY2tpbmdTdG9yZTsKKyAgICBjb25zdCBpbnQ2NF90IG1fZGF0YWJhc2VJZDsKKyAgICBj
b25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG1fb2JqZWN0U3RvcmU7CisgICAgVmVjdG9yPHVp
bnQ4X3Q+IG1fdmFsdWU7CisgICAgY29uc3QgUmVmUHRyPElEQktleT4gbV9rZXk7CisgICAgY29u
c3QgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpQdXRNb2RlIG1fcHV0TW9kZTsKKyAgICBj
b25zdCBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKKyAgICBjb25zdCBWZWN0b3I8
aW50NjRfdD4gbV9pbmRleElkczsKKyAgICBjb25zdCBWZWN0b3I8SURCRGF0YWJhc2VCYWNrZW5k
SW50ZXJmYWNlOjpJbmRleEtleXM+IG1faW5kZXhLZXlzOworfTsKKworY2xhc3MgU2V0SW5kZXhl
c1JlYWR5T3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJh
dGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbDo6T3BlcmF0aW9uPiBjcmVhdGUoc2l6ZV90IGluZGV4Q291bnQpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFNldEluZGV4ZXNSZWFkeU9wZXJhdGlvbihpbmRleENv
dW50KSk7CisgICAgfQorICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGwqKTsKK3ByaXZhdGU6CisgICAgU2V0SW5kZXhlc1JlYWR5T3BlcmF0aW9uKHNpemVf
dCBpbmRleENvdW50KQorICAgICAgICA6IG1faW5kZXhDb3VudChpbmRleENvdW50KQorICAgIHsK
KyAgICB9CisKKyAgICBjb25zdCBzaXplX3QgbV9pbmRleENvdW50OworfTsKKworY2xhc3MgT3Bl
bkN1cnNvck9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVy
YXRpb24geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBi
YWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBp
bnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCB1bnNpZ25l
ZCBzaG9ydCBkaXJlY3Rpb24sIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OkN1cnNvclR5cGUg
Y3Vyc29yVHlwZSwgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSB0YXNrVHlw
ZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKKyAgICB7CisgICAgICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgT3BlbkN1cnNvck9wZXJhdGlvbihiYWNraW5nU3RvcmUsIGRhdGFi
YXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtleVJhbmdlLCBkaXJlY3Rpb24sIGN1cnNv
clR5cGUsIHRhc2tUeXBlLCBjYWxsYmFja3MpKTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIHBl
cmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOworcHJpdmF0ZToKKyAgICBPcGVuQ3Vy
c29yT3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQs
IFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rp
b24sIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgSURC
RGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSB0YXNrVHlwZSwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+IGNhbGxiYWNrcykKKyAgICAgICAgOiBtX2JhY2tpbmdTdG9yZShiYWNraW5n
U3RvcmUpCisgICAgICAgICwgbV9kYXRhYmFzZUlkKGRhdGFiYXNlSWQpCisgICAgICAgICwgbV9v
YmplY3RTdG9yZUlkKG9iamVjdFN0b3JlSWQpCisgICAgICAgICwgbV9pbmRleElkKGluZGV4SWQp
CisgICAgICAgICwgbV9rZXlSYW5nZShrZXlSYW5nZSkKKyAgICAgICAgLCBtX2RpcmVjdGlvbihk
aXJlY3Rpb24pCisgICAgICAgICwgbV9jdXJzb3JUeXBlKGN1cnNvclR5cGUpCisgICAgICAgICwg
bV90YXNrVHlwZSh0YXNrVHlwZSkKKyAgICAgICAgLCBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCisg
ICAgeworICAgIH0KKworICAgIGNvbnN0IFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IG1fYmFja2lu
Z1N0b3JlOworICAgIGNvbnN0IGludDY0X3QgbV9kYXRhYmFzZUlkOworICAgIGNvbnN0IGludDY0
X3QgbV9vYmplY3RTdG9yZUlkOworICAgIGNvbnN0IGludDY0X3QgbV9pbmRleElkOworICAgIGNv
bnN0IFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IG1fa2V5UmFuZ2U7CisgICAgY29uc3QgdW5zaWdu
ZWQgc2hvcnQgbV9kaXJlY3Rpb247CisgICAgY29uc3QgSURCQ3Vyc29yQmFja2VuZEludGVyZmFj
ZTo6Q3Vyc29yVHlwZSBtX2N1cnNvclR5cGU7CisgICAgY29uc3QgSURCRGF0YWJhc2VCYWNrZW5k
SW50ZXJmYWNlOjpUYXNrVHlwZSBtX3Rhc2tUeXBlOworICAgIGNvbnN0IFJlZlB0cjxJREJDYWxs
YmFja3M+IG1fY2FsbGJhY2tzOworfTsKKworY2xhc3MgQ291bnRPcGVyYXRpb24gOiBwdWJsaWMg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0
ZShQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRy
PElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNr
cykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ291bnRPcGVyYXRpb24oYmFj
a2luZ1N0b3JlLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBrZXlSYW5nZSwg
Y2FsbGJhY2tzKSk7CisgICAgfQorICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGwqKTsKK3ByaXZhdGU6CisgICAgQ291bnRPcGVyYXRpb24oUGFzc1JlZlB0
cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5n
ZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCisgICAgICAg
IDogbV9iYWNraW5nU3RvcmUoYmFja2luZ1N0b3JlKQorICAgICAgICAsIG1fZGF0YWJhc2VJZChk
YXRhYmFzZUlkKQorICAgICAgICAsIG1fb2JqZWN0U3RvcmVJZChvYmplY3RTdG9yZUlkKQorICAg
ICAgICAsIG1faW5kZXhJZChpbmRleElkKQorICAgICAgICAsIG1fa2V5UmFuZ2Uoa2V5UmFuZ2Up
CisgICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQorICAgIHsKKyAgICB9CisKKyAgICBj
b25zdCBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBtX2JhY2tpbmdTdG9yZTsKKyAgICBjb25zdCBp
bnQ2NF90IG1fZGF0YWJhc2VJZDsKKyAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJZDsK
KyAgICBjb25zdCBpbnQ2NF90IG1faW5kZXhJZDsKKyAgICBjb25zdCBSZWZQdHI8SURCS2V5UmFu
Z2U+IG1fa2V5UmFuZ2U7CisgICAgY29uc3QgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFj
a3M7Cit9OworCitjbGFzcyBEZWxldGVSYW5nZU9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3du
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQ
dHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKKyAgICB7CisgICAgICAgIHJldHVybiBh
ZG9wdFB0cihuZXcgRGVsZXRlUmFuZ2VPcGVyYXRpb24oYmFja2luZ1N0b3JlLCBkYXRhYmFzZUlk
LCBvYmplY3RTdG9yZUlkLCBrZXlSYW5nZSwgY2FsbGJhY2tzKSk7CisgICAgfQorICAgIHZpcnR1
YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqKTsKK3ByaXZhdGU6Cisg
ICAgRGVsZXRlUmFuZ2VPcGVyYXRpb24oUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tp
bmdTdG9yZSwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NS
ZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzKQorICAgICAgICA6IG1fYmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKKyAgICAgICAg
LCBtX2RhdGFiYXNlSWQoZGF0YWJhc2VJZCkKKyAgICAgICAgLCBtX29iamVjdFN0b3JlSWQob2Jq
ZWN0U3RvcmVJZCkKKyAgICAgICAgLCBtX2tleVJhbmdlKGtleVJhbmdlKQorICAgICAgICAsIG1f
Y2FsbGJhY2tzKGNhbGxiYWNrcykKKyAgICB7CisgICAgfQorCisgICAgY29uc3QgUmVmUHRyPElE
QkJhY2tpbmdTdG9yZT4gbV9iYWNraW5nU3RvcmU7CisgICAgY29uc3QgaW50NjRfdCBtX2RhdGFi
YXNlSWQ7CisgICAgY29uc3QgaW50NjRfdCBtX29iamVjdFN0b3JlSWQ7CisgICAgY29uc3QgUmVm
UHRyPElEQktleVJhbmdlPiBtX2tleVJhbmdlOworICAgIGNvbnN0IFJlZlB0cjxJREJDYWxsYmFj
a3M+IG1fY2FsbGJhY2tzOworfTsKKworY2xhc3MgQ2xlYXJPcGVyYXRpb24gOiBwdWJsaWMgSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQ
YXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxi
YWNrcykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ2xlYXJPcGVyYXRpb24o
YmFja2luZ1N0b3JlLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBjYWxsYmFja3MpKTsKKyAg
ICB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCop
OworcHJpdmF0ZToKKyAgICBDbGVhck9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9y
ZT4gYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKKyAgICAgICAgOiBtX2JhY2tp
bmdTdG9yZShiYWNraW5nU3RvcmUpCisgICAgICAgICwgbV9kYXRhYmFzZUlkKGRhdGFiYXNlSWQp
CisgICAgICAgICwgbV9vYmplY3RTdG9yZUlkKG9iamVjdFN0b3JlSWQpCisgICAgICAgICwgbV9j
YWxsYmFja3MoY2FsbGJhY2tzKQorICAgIHsKKyAgICB9CisKKyAgICBjb25zdCBSZWZQdHI8SURC
QmFja2luZ1N0b3JlPiBtX2JhY2tpbmdTdG9yZTsKKyAgICBjb25zdCBpbnQ2NF90IG1fZGF0YWJh
c2VJZDsKKyAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJZDsKKyAgICBjb25zdCBSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKK307CiAKIGNsYXNzIElEQkRhdGFiYXNlQmFj
a2VuZEltcGw6OlBlbmRpbmdPcGVuQ2FsbCB7CiBwdWJsaWM6CkBAIC0zMTYsNDQgKzUwNCwzNzgg
QEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjphYm9ydChpbnQ2NF90IHRyYW5zYWN0aW9u
SWQpCiAgICAgbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpLT5hYm9ydCgpOwogfQog
Ci12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmdldChpbnQ2NF90IHRyYW5zYWN0aW9uSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktl
eVJhbmdlPiwgYm9vbCBrZXlPbmx5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pCit2b2lkIElE
QkRhdGFiYXNlQmFja2VuZEltcGw6OmdldChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBr
ZXlSYW5nZSwgYm9vbCBrZXlPbmx5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJh
Y2tzKQogewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIFJlZlB0cjxJREJDYWxsYmFj
a3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKKyAgICBBU1NFUlQobV90cmFuc2FjdGlvbnMu
Y29udGFpbnModHJhbnNhY3Rpb25JZCkpOworICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwq
IHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOworCisgICAg
dHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhHZXRPcGVyYXRpb246OmNyZWF0ZShtX2JhY2tpbmdT
dG9yZSwgbWV0YWRhdGEoKSwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5UmFuZ2UsIGtleU9u
bHkgPyBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpLZXlPbmx5IDogSURCQ3Vyc29yQmFja2Vu
ZEludGVyZmFjZTo6S2V5QW5kVmFsdWUsIGNhbGxiYWNrcykpOwogfQogCi12b2lkIElEQkRhdGFi
YXNlQmFja2VuZEltcGw6OnB1dChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgVmVjdG9yPHVpbnQ4X3Q+KiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+LCBQdXRN
b2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5k
ZXhJZHMsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JikKK3ZvaWQgR2V0T3BlcmF0aW9uOjpwZXJm
b3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQogewotICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIElEQl9UUkFDRSgiR2V0T3BlcmF0aW9uIik7CisKKyAgICBS
ZWZQdHI8SURCS2V5PiBrZXk7CisKKyAgICBpZiAobV9rZXlSYW5nZS0+aXNPbmx5S2V5KCkpCisg
ICAgICAgIGtleSA9IG1fa2V5UmFuZ2UtPmxvd2VyKCk7CisgICAgZWxzZSB7CisgICAgICAgIFJl
ZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gYmFja2luZ1N0b3JlQ3Vyc29yOworICAgICAg
ICBpZiAobV9pbmRleElkID09IElEQkluZGV4TWV0YWRhdGE6OkludmFsaWRJZCkgeworICAgICAg
ICAgICAgQVNTRVJUKG1fY3Vyc29yVHlwZSAhPSBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpL
ZXlPbmx5KTsKKyAgICAgICAgICAgIC8vIE9iamVjdFN0b3JlIFJldHJpZXZhbCBPcGVyYXRpb24K
KyAgICAgICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IG1fYmFja2luZ1N0b3JlLT5vcGVuT2Jq
ZWN0U3RvcmVDdXJzb3IodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1f
ZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCBtX2tleVJhbmdlLmdldCgpLCBJREJDdXJzb3I6
Ok5FWFQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKG1fY3Vyc29yVHlwZSA9
PSBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpLZXlPbmx5KQorICAgICAgICAgICAgICAgIC8v
IEluZGV4IFZhbHVlIFJldHJpZXZhbCBPcGVyYXRpb24KKyAgICAgICAgICAgICAgICBiYWNraW5n
U3RvcmVDdXJzb3IgPSBtX2JhY2tpbmdTdG9yZS0+b3BlbkluZGV4S2V5Q3Vyc29yKHRyYW5zYWN0
aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3Rv
cmVJZCwgbV9pbmRleElkLCBtX2tleVJhbmdlLmdldCgpLCBJREJDdXJzb3I6Ok5FWFQpOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIC8vIEluZGV4IFJlZmVyZW5jZWQgVmFsdWUg
UmV0cmlldmFsIE9wZXJhdGlvbgorICAgICAgICAgICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9
IG1fYmFja2luZ1N0b3JlLT5vcGVuSW5kZXhDdXJzb3IodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9y
ZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCBtX2luZGV4SWQs
IG1fa2V5UmFuZ2UuZ2V0KCksIElEQkN1cnNvcjo6TkVYVCk7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoIWJhY2tpbmdTdG9yZUN1cnNvcikgeworICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9u
U3VjY2VzcygpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAga2V5
ID0gYmFja2luZ1N0b3JlQ3Vyc29yLT5rZXkoKTsKKyAgICB9CisKKyAgICBSZWZQdHI8SURCS2V5
PiBwcmltYXJ5S2V5OworICAgIGJvb2wgb2s7CisgICAgaWYgKG1faW5kZXhJZCA9PSBJREJJbmRl
eE1ldGFkYXRhOjpJbnZhbGlkSWQpIHsKKyAgICAgICAgLy8gT2JqZWN0IFN0b3JlIFJldHJpZXZh
bCBPcGVyYXRpb24KKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZhbHVlOworICAgICAgICBvayA9
IG1fYmFja2luZ1N0b3JlLT5nZXRSZWNvcmQodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5z
YWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCAqa2V5LCB2YWx1ZSk7Cisg
ICAgICAgIGlmICghb2spIHsKKyAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRh
dGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAi
SW50ZXJuYWwgZXJyb3IgaW4gZ2V0UmVjb3JkLiIpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmICh2YWx1ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIG1f
Y2FsbGJhY2tzLT5vblN1Y2Nlc3MoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChtX2F1dG9JbmNyZW1lbnQgJiYgIW1fa2V5UGF0aC5pc051bGwoKSkgewor
ICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVkU2NyaXB0VmFsdWU6
OmNyZWF0ZUZyb21XaXJlQnl0ZXModmFsdWUpLCBrZXksIG1fa2V5UGF0aCk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmVCeXRlcyh2YWx1ZSkpOworICAgICAg
ICByZXR1cm47CisKKyAgICB9CisKKyAgICAvLyBGcm9tIGhlcmUgd2UgYXJlIGRlYWxpbmcgb25s
eSB3aXRoIGluZGV4ZXMuCisgICAgb2sgPSBtX2JhY2tpbmdTdG9yZS0+Z2V0UHJpbWFyeUtleVZp
YUluZGV4KHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNl
SWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRleElkLCAqa2V5LCBwcmltYXJ5S2V5KTsKKyAgICBp
ZiAoIW9rKSB7CisgICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6
OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJy
b3IgaW4gZ2V0UHJpbWFyeUtleVZpYUluZGV4LiIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBpZiAobV9jdXJzb3JUeXBlID09IElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OktleU9u
bHkpIHsKKyAgICAgICAgLy8gSW5kZXggVmFsdWUgUmV0cmlldmFsIE9wZXJhdGlvbgorICAgICAg
ICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKHByaW1hcnlLZXkuZ2V0KCkpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgLy8gSW5kZXggUmVmZXJlbmNlZCBWYWx1ZSBSZXRyaWV2YWwgT3Bl
cmF0aW9uCisgICAgVmVjdG9yPHVpbnQ4X3Q+IHZhbHVlOworICAgIG9rID0gbV9iYWNraW5nU3Rv
cmUtPmdldFJlY29yZCh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9k
YXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsICpwcmltYXJ5S2V5LCB2YWx1ZSk7CisgICAgaWYg
KCFvaykgeworICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpj
cmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9y
IGluIGdldFJlY29yZC4iKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAodmFs
dWUuaXNFbXB0eSgpKSB7CisgICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAobV9hdXRvSW5jcmVtZW50ICYmICFtX2tleVBhdGgu
aXNOdWxsKCkpIHsKKyAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVkU2Ny
aXB0VmFsdWU6OmNyZWF0ZUZyb21XaXJlQnl0ZXModmFsdWUpLCBwcmltYXJ5S2V5LCBtX2tleVBh
dGgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3Mo
U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9tV2lyZUJ5dGVzKHZhbHVlKSk7CiB9CiAK
LXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6c2V0SW5kZXhLZXlzKGludDY0X3QgdHJhbnNh
Y3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQktleT4gcHJwUHJp
bWFyeUtleSwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPElu
ZGV4S2V5cz4mKQordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpwdXQoaW50NjRfdCB0cmFu
c2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFZlY3Rvcjx1aW50OF90PiogdmFsdWUs
IFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IHBycENhbGxiYWNrcywgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywg
Y29uc3QgVmVjdG9yPEluZGV4S2V5cz4mIGluZGV4S2V5cykKIHsKLSAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICBJREJfVFJBQ0UoIklEQkRhdGFiYXNlQmFja2VuZEltcGw6OnB1dCIpOwor
CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOworICAg
IEFTU0VSVChtX3RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbklkKSk7CisgICAgSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQo
dHJhbnNhY3Rpb25JZCk7CisgICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgIT0gSURCVHJh
bnNhY3Rpb246OlJFQURfT05MWSk7CisKKyAgICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRh
IG9iamVjdFN0b3JlTWV0YWRhdGEgPSBtZXRhZGF0YSgpLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0
U3RvcmVJZCk7CisKKyAgICBBU1NFUlQob2JqZWN0U3RvcmVNZXRhZGF0YS5hdXRvSW5jcmVtZW50
IHx8IGtleS5nZXQoKSk7CisKKyAgICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKFB1dE9wZXJh
dGlvbjo6Y3JlYXRlKG1fYmFja2luZ1N0b3JlLCBpZCgpLCBvYmplY3RTdG9yZU1ldGFkYXRhLCAq
dmFsdWUsIGtleSwgcHV0TW9kZSwgY2FsbGJhY2tzLCBpbmRleElkcywgaW5kZXhLZXlzKSk7Cit9
CisKK3ZvaWQgUHV0T3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwq
IHRyYW5zYWN0aW9uKQoreworICAgIElEQl9UUkFDRSgiT2JqZWN0U3RvcmVTdG9yYWdlT3BlcmF0
aW9uIik7CisgICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgIT0gSURCVHJhbnNhY3Rpb246
OlJFQURfT05MWSk7CisgICAgQVNTRVJUKG1faW5kZXhJZHMuc2l6ZSgpID09IG1faW5kZXhLZXlz
LnNpemUoKSk7CisgICAgYm9vbCBrZXlXYXNHZW5lcmF0ZWQgPSBmYWxzZTsKKworICAgIFJlZlB0
cjxJREJLZXk+IGtleTsKKyAgICBpZiAobV9wdXRNb2RlICE9IElEQkRhdGFiYXNlQmFja2VuZElu
dGVyZmFjZTo6Q3Vyc29yVXBkYXRlICYmIG1fb2JqZWN0U3RvcmUuYXV0b0luY3JlbWVudCAmJiAh
bV9rZXkpIHsKKyAgICAgICAgUmVmUHRyPElEQktleT4gYXV0b0luY0tleSA9IElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OmdlbmVyYXRlS2V5KG1fYmFja2luZ1N0b3JlLCB0cmFuc2FjdGlvbiwg
bV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlLmlkKTsKKyAgICAgICAga2V5V2FzR2VuZXJhdGVk
ID0gdHJ1ZTsKKyAgICAgICAgaWYgKCFhdXRvSW5jS2V5LT5pc1ZhbGlkKCkpIHsKKyAgICAgICAg
ICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6Q29uc3RyYWludEVycm9yLCAiTWF4aW11bSBrZXkgZ2VuZXJhdG9yIHZh
bHVlIHJlYWNoZWQuIikpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IGtleSA9IGF1dG9JbmNLZXk7CisgICAgfSBlbHNlCisgICAgICAgIGtleSA9IG1fa2V5OworCisg
ICAgQVNTRVJUKGtleSAmJiBrZXktPmlzVmFsaWQoKSk7CisKKyAgICBJREJCYWNraW5nU3RvcmU6
OlJlY29yZElkZW50aWZpZXIgcmVjb3JkSWRlbnRpZmllcjsKKyAgICBpZiAobV9wdXRNb2RlID09
IElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6QWRkT25seSkgeworICAgICAgICBib29sIGZv
dW5kID0gZmFsc2U7CisgICAgICAgIGJvb2wgb2sgPSBtX2JhY2tpbmdTdG9yZS0+a2V5RXhpc3Rz
SW5PYmplY3RTdG9yZSh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9k
YXRhYmFzZUlkLCBtX29iamVjdFN0b3JlLmlkLCAqa2V5LCAmcmVjb3JkSWRlbnRpZmllciwgZm91
bmQpOworICAgICAgICBpZiAoIW9rKSB7CisgICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJv
cihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25F
cnJvciwgIkludGVybmFsIGVycm9yIGNoZWNraW5nIGtleSBleGlzdGVuY2UuIikpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmIChmb3VuZCkgeworICAgICAgICAg
ICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpDb25zdHJhaW50RXJyb3IsICJLZXkgYWxyZWFkeSBleGlzdHMgaW4gdGhl
IG9iamVjdCBzdG9yZS4iKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBWZWN0b3I8T3duUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OkluZGV4V3Jp
dGVyPiA+IGluZGV4V3JpdGVyczsKKyAgICBTdHJpbmcgZXJyb3JNZXNzYWdlOworICAgIGJvb2wg
b2JleXNDb25zdHJhaW50cyA9IGZhbHNlOworICAgIGJvb2wgYmFja2luZ1N0b3JlU3VjY2VzcyA9
IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Om1ha2VJbmRleFdyaXRlcnModHJhbnNhY3Rpb24s
IG1fYmFja2luZ1N0b3JlLmdldCgpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmUsIGtleSwg
a2V5V2FzR2VuZXJhdGVkLCBtX2luZGV4SWRzLCBtX2luZGV4S2V5cywgJmluZGV4V3JpdGVycywg
JmVycm9yTWVzc2FnZSwgb2JleXNDb25zdHJhaW50cyk7CisgICAgaWYgKCFiYWNraW5nU3RvcmVT
dWNjZXNzKSB7CisgICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6
OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJy
b3I6IGJhY2tpbmcgc3RvcmUgZXJyb3IgdXBkYXRpbmcgaW5kZXgga2V5cy4iKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgaWYgKCFvYmV5c0NvbnN0cmFpbnRzKSB7CisgICAgICAgIG1f
Y2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6Q29uc3RyYWludEVycm9yLCBlcnJvck1lc3NhZ2UpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIC8vIEJlZm9yZSB0aGlzIHBvaW50LCBkb24ndCBkbyBhbnkgbXV0YXRp
b24uIEFmdGVyIHRoaXMgcG9pbnQsIHJvbGxiYWNrIHRoZSB0cmFuc2FjdGlvbiBpbiBjYXNlIG9m
IGVycm9yLgorICAgIGJhY2tpbmdTdG9yZVN1Y2Nlc3MgPSBtX2JhY2tpbmdTdG9yZS0+cHV0UmVj
b3JkKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQs
IG1fb2JqZWN0U3RvcmUuaWQsICprZXksIG1fdmFsdWUsICZyZWNvcmRJZGVudGlmaWVyKTsKKyAg
ICBpZiAoIWJhY2tpbmdTdG9yZVN1Y2Nlc3MpIHsKKyAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJy
b3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3du
RXJyb3IsICJJbnRlcm5hbCBlcnJvcjogYmFja2luZyBzdG9yZSBlcnJvciBwZXJmb3JtaW5nIHB1
dC9hZGQuIikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBpbmRleFdyaXRlcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6SW5kZXhXcml0ZXIqIGluZGV4V3JpdGVyID0gaW5kZXhXcml0ZXJzW2ld
LmdldCgpOworICAgICAgICBpbmRleFdyaXRlci0+d3JpdGVJbmRleEtleXMocmVjb3JkSWRlbnRp
ZmllciwgKm1fYmFja2luZ1N0b3JlLCB0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rp
b24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlLmlkKTsKKyAgICB9CisKKyAgICBpZiAo
bV9vYmplY3RTdG9yZS5hdXRvSW5jcmVtZW50ICYmIG1fcHV0TW9kZSAhPSBJREJEYXRhYmFzZUJh
Y2tlbmRJbnRlcmZhY2U6OkN1cnNvclVwZGF0ZSAmJiBrZXktPnR5cGUoKSA9PSBJREJLZXk6Ok51
bWJlclR5cGUpIHsKKyAgICAgICAgYm9vbCBvayA9IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6
OnVwZGF0ZUtleUdlbmVyYXRvcihtX2JhY2tpbmdTdG9yZSwgdHJhbnNhY3Rpb24sIG1fZGF0YWJh
c2VJZCwgbV9vYmplY3RTdG9yZS5pZCwga2V5LmdldCgpLCAha2V5V2FzR2VuZXJhdGVkKTsKKyAg
ICAgICAgaWYgKCFvaykgeworICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0
YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJ
bnRlcm5hbCBlcnJvciB1cGRhdGluZyBrZXkgZ2VuZXJhdG9yLiIpKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3Moa2V5
LnJlbGVhc2UoKSk7Cit9CisKKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRJbmRl
eEtleXMoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NS
ZWZQdHI8SURCS2V5PiBwcnBQcmltYXJ5S2V5LCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4
SWRzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYgaW5kZXhLZXlzKQoreworICAgIElEQl9UUkFD
RSgiSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6c2V0SW5kZXhLZXlzIik7CisgICAgaWYgKCFtX3Ry
YW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbklkKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9u
cy5nZXQodHJhbnNhY3Rpb25JZCk7CisgICAgaWYgKHRyYW5zYWN0aW9uLT5pc0ZpbmlzaGVkKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIFJlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkgPSBwcnBQ
cmltYXJ5S2V5OworICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IHN0b3JlID0gYmFja2luZ1N0
b3JlKCk7CisgICAgLy8gRklYTUU6IFRoaXMgbWV0aG9kIGNvdWxkIGJlIGFzeW5jaHJvbm91cywg
YnV0IHdlIG5lZWQgdG8gZXZhbHVhdGUgaWYgaXQncyB3b3J0aCB0aGUgZXh0cmEgY29tcGxleGl0
eS4KKyAgICBJREJCYWNraW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXIgcmVjb3JkSWRlbnRpZmll
cjsKKyAgICBib29sIGZvdW5kID0gZmFsc2U7CisgICAgYm9vbCBvayA9IHN0b3JlLT5rZXlFeGlz
dHNJbk9iamVjdFN0b3JlKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBt
X21ldGFkYXRhLmlkLCBvYmplY3RTdG9yZUlkLCAqcHJpbWFyeUtleSwgJnJlY29yZElkZW50aWZp
ZXIsIGZvdW5kKTsKKyAgICBpZiAoIW9rKSB7CisgICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydChJ
REJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJv
ciwgIkludGVybmFsIGVycm9yIHNldHRpbmcgaW5kZXgga2V5cy4iKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgaWYgKCFmb3VuZCkgeworICAgICAgICBSZWZQdHI8SURCRGF0YWJhc2VF
cnJvcj4gZXJyb3IgPSBJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRp
b246OlVua25vd25FcnJvciwgU3RyaW5nOjpmb3JtYXQoIkludGVybmFsIGVycm9yIHNldHRpbmcg
aW5kZXgga2V5cyBmb3Igb2JqZWN0IHN0b3JlICMlbGQuIiwgb2JqZWN0U3RvcmVJZCkpOworICAg
ICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoZXJyb3IucmVsZWFzZSgpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIFZlY3RvcjxPd25QdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6
SW5kZXhXcml0ZXI+ID4gaW5kZXhXcml0ZXJzOworICAgIFN0cmluZyBlcnJvck1lc3NhZ2U7Cisg
ICAgYm9vbCBvYmV5c0NvbnN0cmFpbnRzID0gZmFsc2U7CisgICAgQVNTRVJUKG1ldGFkYXRhKCku
b2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSWQpKTsKKyAgICBjb25zdCBJREJPYmpl
Y3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1ldGFkYXRhID0gbWV0YWRhdGEoKS5vYmplY3RT
dG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpOworICAgIGJvb2wgYmFja2luZ1N0b3JlU3VjY2VzcyA9
IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Om1ha2VJbmRleFdyaXRlcnModHJhbnNhY3Rpb24s
IHN0b3JlLmdldCgpLCBpZCgpLCBvYmplY3RTdG9yZU1ldGFkYXRhLCBwcmltYXJ5S2V5LCBmYWxz
ZSwgaW5kZXhJZHMsIGluZGV4S2V5cywgJmluZGV4V3JpdGVycywgJmVycm9yTWVzc2FnZSwgb2Jl
eXNDb25zdHJhaW50cyk7CisgICAgaWYgKCFiYWNraW5nU3RvcmVTdWNjZXNzKSB7CisgICAgICAg
IHRyYW5zYWN0aW9uLT5hYm9ydChJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VF
eGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yOiBiYWNraW5nIHN0b3JlIGVy
cm9yIHVwZGF0aW5nIGluZGV4IGtleXMuIikpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IGlmICghb2JleXNDb25zdHJhaW50cykgeworICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoSURC
RGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDb25zdHJhaW50RXJy
b3IsIGVycm9yTWVzc2FnZSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBpbmRleFdyaXRlcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6SW5kZXhXcml0ZXIqIGluZGV4V3JpdGVyID0gaW5kZXhX
cml0ZXJzW2ldLmdldCgpOworICAgICAgICBpbmRleFdyaXRlci0+d3JpdGVJbmRleEtleXMocmVj
b3JkSWRlbnRpZmllciwgKnN0b3JlLmdldCgpLCB0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJh
bnNhY3Rpb24oKSwgaWQoKSwgb2JqZWN0U3RvcmVJZCk7CisgICAgfQogfQogCiB2b2lkIElEQkRh
dGFiYXNlQmFja2VuZEltcGw6OnNldEluZGV4ZXNSZWFkeShpbnQ2NF90IHRyYW5zYWN0aW9uSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcykK
IHsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OnNldEluZGV4ZXNSZWFkeSIpOworCisgICAgaWYgKCFtX3RyYW5zYWN0
aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbklkKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQo
dHJhbnNhY3Rpb25JZCk7CisgICAgaWYgKHRyYW5zYWN0aW9uLT5pc0ZpbmlzaGVkKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U6OlByZWVtcHRpdmVUYXNrLCBTZXRJbmRleGVzUmVhZHlP
cGVyYXRpb246OmNyZWF0ZShpbmRleElkcy5zaXplKCkpKSkKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiB9CiAKLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6b3BlbkN1cnNvcihp
bnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRl
eElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgdW5zaWduZWQgc2hvcnQgZGly
ZWN0aW9uLCBib29sIGtleU9ubHksIFRhc2tUeXBlIHRhc2tUeXBlLCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4gY2FsbGJhY2tzKQordm9pZCBTZXRJbmRleGVzUmVhZHlPcGVyYXRpb246OnBlcmZv
cm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24pCiB7Ci0gICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgSURCX1RSQUNFKCJTZXRJbmRleGVzUmVhZHlPcGVyYXRpb24i
KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1faW5kZXhDb3VudDsgKytpKQorICAgICAg
ICB0cmFuc2FjdGlvbi0+ZGlkQ29tcGxldGVQcmVlbXB0aXZlRXZlbnQoKTsKIH0KIAotdm9pZCBJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjb3VudChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdl
PiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KQordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBs
OjpvcGVuQ3Vyc29yKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCB1bnNp
Z25lZCBzaG9ydCBkaXJlY3Rpb24sIGJvb2wga2V5T25seSwgVGFza1R5cGUgdGFza1R5cGUsIFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MpCiB7Ci0gICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJh
Y2tzOworICAgIEFTU0VSVChtX3RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbklkKSk7
CisgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0
aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7CisKKyAgICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNr
KE9wZW5DdXJzb3JPcGVyYXRpb246OmNyZWF0ZShtX2JhY2tpbmdTdG9yZSwgaWQoKSwgb2JqZWN0
U3RvcmVJZCwgaW5kZXhJZCwga2V5UmFuZ2UsIGRpcmVjdGlvbiwga2V5T25seSA/IElEQkN1cnNv
ckJhY2tlbmRJbnRlcmZhY2U6OktleU9ubHkgOiBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpL
ZXlBbmRWYWx1ZSwgdGFza1R5cGUsIGNhbGxiYWNrcykpOwogfQogCi12b2lkIElEQkRhdGFiYXNl
QmFja2VuZEltcGw6OmRlbGV0ZVJhbmdlKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+KQordm9pZCBPcGVuQ3Vyc29yT3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQogewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIElEQl9UUkFDRSgiT3BlbkN1cnNvck9wZXJhdGlvbiIpOworCisgICAgLy8gVGhlIGZyb250
ZW5kIGhhcyBiZWd1biBpbmRleGluZywgc28gdGhpcyBwYXVzZXMgdGhlIHRyYW5zYWN0aW9uCisg
ICAgLy8gdW50aWwgdGhlIGluZGV4aW5nIGlzIGNvbXBsZXRlLiBUaGlzIGNhbid0IGhhcHBlbiBh
bnkgZWFybGllcgorICAgIC8vIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBzd2l0Y2ggdG8gZWFy
bHkgbW9kZSBpbiBjYXNlIG11bHRpcGxlCisgICAgLy8gaW5kZXhlcyBhcmUgYmVpbmcgY3JlYXRl
ZCBpbiBhIHJvdywgd2l0aCBwdXQoKSdzIGluIGJldHdlZW4uCisgICAgaWYgKG1fdGFza1R5cGUg
PT0gSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpQcmVlbXB0aXZlVGFzaykKKyAgICAgICAg
dHJhbnNhY3Rpb24tPmFkZFByZWVtcHRpdmVFdmVudCgpOworCisgICAgSURCQ3Vyc29yOjpEaXJl
Y3Rpb24gZGlyZWN0aW9uID0gc3RhdGljX2Nhc3Q8SURCQ3Vyc29yOjpEaXJlY3Rpb24+KG1fZGly
ZWN0aW9uKTsKKyAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGJhY2tpbmdTdG9y
ZUN1cnNvcjsKKyAgICBpZiAobV9pbmRleElkID09IElEQkluZGV4TWV0YWRhdGE6OkludmFsaWRJ
ZCkgeworICAgICAgICBBU1NFUlQobV9jdXJzb3JUeXBlICE9IElEQkN1cnNvckJhY2tlbmRJbnRl
cmZhY2U6OktleU9ubHkpOworICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX2JhY2tpbmdT
dG9yZS0+b3Blbk9iamVjdFN0b3JlQ3Vyc29yKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFu
c2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9rZXlSYW5nZS5nZXQo
KSwgZGlyZWN0aW9uKTsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQobV90YXNrVHlwZSA9
PSBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6Ok5vcm1hbFRhc2spOworICAgICAgICBpZiAo
bV9jdXJzb3JUeXBlID09IElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OktleU9ubHkpCisgICAg
ICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX2JhY2tpbmdTdG9yZS0+b3BlbkluZGV4S2V5
Q3Vyc29yKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNl
SWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRleElkLCBtX2tleVJhbmdlLmdldCgpLCBkaXJlY3Rp
b24pOworICAgICAgICBlbHNlCisgICAgICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX2Jh
Y2tpbmdTdG9yZS0+b3BlbkluZGV4Q3Vyc29yKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFu
c2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRleElkLCBtX2tl
eVJhbmdlLmdldCgpLCBkaXJlY3Rpb24pOworICAgIH0KKworICAgIGlmICghYmFja2luZ1N0b3Jl
Q3Vyc29yKSB7CisgICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3Moc3RhdGljX2Nhc3Q8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlKj4oMCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSB0YXNrVHlwZShzdGF0aWNf
Y2FzdDxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlPihtX3Rhc2tUeXBl
KSk7CisgICAgUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbXBsPiBjdXJzb3IgPSBJREJDdXJzb3JC
YWNrZW5kSW1wbDo6Y3JlYXRlKGJhY2tpbmdTdG9yZUN1cnNvci5nZXQoKSwgbV9jdXJzb3JUeXBl
LCB0YXNrVHlwZSwgdHJhbnNhY3Rpb24sIG1fb2JqZWN0U3RvcmVJZCk7CisgICAgbV9jYWxsYmFj
a3MtPm9uU3VjY2VzcyhjdXJzb3IsIGN1cnNvci0+a2V5KCksIGN1cnNvci0+cHJpbWFyeUtleSgp
LCBjdXJzb3ItPnZhbHVlKCkpOwogfQogCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNs
ZWFyKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4pCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNvdW50KGlu
dDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4
SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4gcHJwQ2FsbGJhY2tzKQogewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIFJl
ZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKKyAgICBJREJfVFJB
Q0UoIklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNvdW50Iik7CisgICAgQVNTRVJUKG1fdHJhbnNh
Y3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uSWQpKTsKKyAgICBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsK
KyAgICBBU1NFUlQobWV0YWRhdGEoKS5vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmVJ
ZCkpOworICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soQ291bnRPcGVyYXRpb246OmNyZWF0
ZShtX2JhY2tpbmdTdG9yZSwgaWQoKSwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5UmFuZ2Us
IGNhbGxiYWNrcykpOworfQorCit2b2lkIENvdW50T3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQoreworICAgIElEQl9UUkFDRSgiT2JqZWN0
U3RvcmVDb3VudE9wZXJhdGlvbiIpOworICAgIHVpbnQzMl90IGNvdW50ID0gMDsKKyAgICBSZWZQ
dHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNvcjsKKworICAgIGlm
IChtX2luZGV4SWQgPT0gSURCSW5kZXhNZXRhZGF0YTo6SW52YWxpZElkKQorICAgICAgICBiYWNr
aW5nU3RvcmVDdXJzb3IgPSBtX2JhY2tpbmdTdG9yZS0+b3Blbk9iamVjdFN0b3JlS2V5Q3Vyc29y
KHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1f
b2JqZWN0U3RvcmVJZCwgbV9rZXlSYW5nZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhUKTsKKyAgICBl
bHNlCisgICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IG1fYmFja2luZ1N0b3JlLT5vcGVuSW5k
ZXhLZXlDdXJzb3IodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0
YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCBtX2luZGV4SWQsIG1fa2V5UmFuZ2UuZ2V0KCksIElE
QkN1cnNvcjo6TkVYVCk7CisgICAgaWYgKCFiYWNraW5nU3RvcmVDdXJzb3IpIHsKKyAgICAgICAg
bV9jYWxsYmFja3MtPm9uU3VjY2Vzcyhjb3VudCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBkbyB7CisgICAgICAgICsrY291bnQ7CisgICAgfSB3aGlsZSAoYmFja2luZ1N0b3JlQ3Vy
c29yLT5jb250aW51ZUZ1bmN0aW9uKDApKTsKKworICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3Mo
Y291bnQpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZVJhbmdlKGlu
dDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElE
QktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNr
cykKK3sKKyAgICBJREJfVFJBQ0UoIklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZSIpOwor
CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOworICAg
IEFTU0VSVChtX3RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbklkKSk7CisgICAgSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQo
dHJhbnNhY3Rpb25JZCk7CisgICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgIT0gSURCVHJh
bnNhY3Rpb246OlJFQURfT05MWSk7CisKKyAgICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKERl
bGV0ZVJhbmdlT3BlcmF0aW9uOjpjcmVhdGUobV9iYWNraW5nU3RvcmUsIGlkKCksIG9iamVjdFN0
b3JlSWQsIGtleVJhbmdlLCBjYWxsYmFja3MpKTsKK30KKwordm9pZCBEZWxldGVSYW5nZU9wZXJh
dGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKK3sK
KyAgICBJREJfVFJBQ0UoIkRlbGV0ZVJhbmdlT3BlcmF0aW9uIik7CisKKyAgICBSZWZQdHI8SURC
QmFja2luZ1N0b3JlOjpDdXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNvciA9IG1fYmFja2luZ1N0b3Jl
LT5vcGVuT2JqZWN0U3RvcmVDdXJzb3IodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0
aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCBtX2tleVJhbmdlLmdldCgpLCBJ
REJDdXJzb3I6Ok5FWFQpOworICAgIGlmIChiYWNraW5nU3RvcmVDdXJzb3IpIHsKKyAgICAgICAg
ZG8geworICAgICAgICAgICAgbV9iYWNraW5nU3RvcmUtPmRlbGV0ZVJlY29yZCh0cmFuc2FjdGlv
bi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3Jl
SWQsIGJhY2tpbmdTdG9yZUN1cnNvci0+cmVjb3JkSWRlbnRpZmllcigpKTsKKyAgICAgICAgfSB3
aGlsZSAoYmFja2luZ1N0b3JlQ3Vyc29yLT5jb250aW51ZUZ1bmN0aW9uKDApKTsKKyAgICB9CisK
KyAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKCk7Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDo6Y2xlYXIoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MpCit7CisgICAgSURCX1RS
QUNFKCJJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjbGVhciIpOworCisgICAgUmVmUHRyPElEQkNh
bGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOworICAgIEFTU0VSVChtX3RyYW5zYWN0
aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbklkKSk7CisgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbCogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7Cisg
ICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgIT0gSURCVHJhbnNhY3Rpb246OlJFQURfT05M
WSk7CisKKyAgICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKENsZWFyT3BlcmF0aW9uOjpjcmVh
dGUobV9iYWNraW5nU3RvcmUsIGlkKCksIG9iamVjdFN0b3JlSWQsIGNhbGxiYWNrcykpOworfQor
Cit2b2lkIENsZWFyT3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwq
IHRyYW5zYWN0aW9uKQoreworICAgIElEQl9UUkFDRSgiT2JqZWN0U3RvcmVDbGVhck9wZXJhdGlv
biIpOworICAgIG1fYmFja2luZ1N0b3JlLT5jbGVhck9iamVjdFN0b3JlKHRyYW5zYWN0aW9uLT5i
YWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCk7
CisgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcygpOwogfQogCiB2b2lkIElEQkRhdGFiYXNlQmFj
a2VuZEltcGw6OkRlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCSW5kZXguY3BwCmluZGV4IDc2MjY0ODhlYTBmZDNlNzBkNzQ2NDQ0MmYyZWM4
NWQ3YTRmNTliMDAuLmE4YzE5NjA2MDNhNjBlMmZiOGJjOTZlNDYyMDMwYWI4ZWM5OTEzZDEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5jcHAKQEAgLTQz
LDE2ICs0MywxNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBzaG9ydCBkZWZhdWx0RGlyZWN0aW9uID0gSURCQ3Vyc29yOjpORVhUOwogCi1JREJJbmRleDo6
SURCSW5kZXgoY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgbWV0YWRhdGEsIFBhc3NSZWZQdHI8SURC
SW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBiYWNrZW5kLCBJREJPYmplY3RTdG9yZSogb2JqZWN0U3Rv
cmUsIElEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKK0lEQkluZGV4OjpJREJJbmRleChjb25z
dCBJREJJbmRleE1ldGFkYXRhJiBtZXRhZGF0YSwgSURCT2JqZWN0U3RvcmUqIG9iamVjdFN0b3Jl
LCBJREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCiAgICAgOiBtX21ldGFkYXRhKG1ldGFkYXRh
KQotICAgICwgbV9iYWNrZW5kKGJhY2tlbmQpCiAgICAgLCBtX29iamVjdFN0b3JlKG9iamVjdFN0
b3JlKQogICAgICwgbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKICAgICAsIG1fZGVsZXRlZChm
YWxzZSkKIHsKLSAgICBBU1NFUlQobV9iYWNrZW5kKTsKICAgICBBU1NFUlQobV9vYmplY3RTdG9y
ZSk7CiAgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb24pOworICAgIEFTU0VSVChtX21ldGFkYXRhLmlk
ICE9IElEQkluZGV4TWV0YWRhdGE6OkludmFsaWRJZCk7CiB9CiAKIElEQkluZGV4Ojp+SURCSW5k
ZXgoKQpAQCAtNzYsOCArNzUsNyBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQkluZGV4Ojpv
cGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhcwogCiAgICAgUmVm
UHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURC
QW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwogICAgIHJlcXVlc3QtPnNl
dEN1cnNvckRldGFpbHMoSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6S2V5QW5kVmFsdWUsIGRp
cmVjdGlvbik7Ci0gICAgbV9iYWNrZW5kLT5vcGVuQ3Vyc29yKGtleVJhbmdlLCBkaXJlY3Rpb24s
IHJlcXVlc3QsIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOwotICAgIEFTU0VSVCghZWMp
OworICAgIGJhY2tlbmREQigpLT5vcGVuQ3Vyc29yKG1fdHJhbnNhY3Rpb24tPmlkKCksIG1fb2Jq
ZWN0U3RvcmUtPmlkKCksIG1fbWV0YWRhdGEuaWQsIGtleVJhbmdlLCBkaXJlY3Rpb24sIGZhbHNl
LCBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6Ok5vcm1hbFRhc2ssIHJlcXVlc3QpOwogICAg
IHJldHVybiByZXF1ZXN0OwogfQogCkBAIC0xMDIsOCArMTAwLDggQEAgUGFzc1JlZlB0cjxJREJS
ZXF1ZXN0PiBJREJJbmRleDo6Y291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
UGFzc1JlZlAKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIFJlZlB0cjxJREJSZXF1ZXN0
PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRo
aXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKLSAgICBtX2JhY2tlbmQtPmNvdW50KGtleVJhbmdl
LCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKLSAgICBBU1NFUlQoIWVj
KTsKKyAgICBJREJEYXRhYmFzZU1ldGFkYXRhIG1ldGFkYXRhKG1fdHJhbnNhY3Rpb24tPmRiKCkt
Pm1ldGFkYXRhKCkpOworICAgIGJhY2tlbmREQigpLT5jb3VudChtX3RyYW5zYWN0aW9uLT5pZCgp
LCBtX29iamVjdFN0b3JlLT5pZCgpLCBtX21ldGFkYXRhLmlkLCBrZXlSYW5nZSwgcmVxdWVzdCk7
CiAgICAgcmV0dXJuIHJlcXVlc3Q7CiB9CiAKQEAgLTEzMyw4ICsxMzEsNyBAQCBQYXNzUmVmUHRy
PElEQlJlcXVlc3Q+IElEQkluZGV4OjpvcGVuS2V5Q3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQsCiAKICAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVl
c3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5n
ZXQoKSk7CiAgICAgcmVxdWVzdC0+c2V0Q3Vyc29yRGV0YWlscyhJREJDdXJzb3JCYWNrZW5kSW50
ZXJmYWNlOjpLZXlPbmx5LCBkaXJlY3Rpb24pOwotICAgIG1fYmFja2VuZC0+b3BlbktleUN1cnNv
cihrZXlSYW5nZSwgZGlyZWN0aW9uLCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCks
IGVjKTsKLSAgICBBU1NFUlQoIWVjKTsKKyAgICBiYWNrZW5kREIoKS0+b3BlbkN1cnNvcihtX3Ry
YW5zYWN0aW9uLT5pZCgpLCBtX29iamVjdFN0b3JlLT5pZCgpLCBtX21ldGFkYXRhLmlkLCBrZXlS
YW5nZSwgZGlyZWN0aW9uLCB0cnVlLCBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6Ok5vcm1h
bFRhc2ssIHJlcXVlc3QpOwogICAgIHJldHVybiByZXF1ZXN0OwogfQogCkBAIC0xNzMsOCArMTcw
LDcgQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJJbmRleDo6Z2V0KFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHIKICAgICB9CiAKICAgICBSZWZQdHI8SURCUmVx
dWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0
ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7Ci0gICAgbV9iYWNrZW5kLT5nZXQoa2V5UmFu
Z2UsIHJlcXVlc3QsIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOwotICAgIEFTU0VSVCgh
ZWMpOworICAgIGJhY2tlbmREQigpLT5nZXQobV90cmFuc2FjdGlvbi0+aWQoKSwgbV9vYmplY3RT
dG9yZS0+aWQoKSwgbV9tZXRhZGF0YS5pZCwga2V5UmFuZ2UsIGZhbHNlLCByZXF1ZXN0KTsKICAg
ICByZXR1cm4gcmVxdWVzdDsKIH0KIApAQCAtMjA1LDExICsyMDEsMTUgQEAgUGFzc1JlZlB0cjxJ
REJSZXF1ZXN0PiBJREJJbmRleDo6Z2V0S2V5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQsIFBhc3NSZWYKICAgICB9CiAKICAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElE
QlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2Fj
dGlvbi5nZXQoKSk7Ci0gICAgbV9iYWNrZW5kLT5nZXRLZXkoa2V5UmFuZ2UsIHJlcXVlc3QsIG1f
dHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOwotICAgIEFTU0VSVCghZWMpOworICAgIGJhY2tl
bmREQigpLT5nZXQobV90cmFuc2FjdGlvbi0+aWQoKSwgbV9vYmplY3RTdG9yZS0+aWQoKSwgbV9t
ZXRhZGF0YS5pZCwga2V5UmFuZ2UsIHRydWUsIHJlcXVlc3QpOwogICAgIHJldHVybiByZXF1ZXN0
OwogfQogCitJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UqIElEQkluZGV4OjpiYWNrZW5kREIo
KSBjb25zdAoreworICAgIHJldHVybiBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kREIoKTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJB
U0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRl
eC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguaAppbmRleCBj
ZjRmMWNmMzNjODQxMTJmOTVlNDA5OGYyMTY4MzA0NjI1MjMxMGEzLi4zMDcyZjE1Yjk4MTIyZjgx
ZDQ0NGQ0OTUxZDI5MjA3YjcyZWU4NmVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJJbmRleC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkluZGV4LmgKQEAgLTI3LDcgKzI3LDcgQEAKICNkZWZpbmUgSURCSW5kZXhfaAog
CiAjaW5jbHVkZSAiSURCQ3Vyc29yLmgiCi0jaW5jbHVkZSAiSURCSW5kZXhCYWNrZW5kSW50ZXJm
YWNlLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2UuaCIKICNpbmNsdWRlICJJREJLZXlQYXRoLmgi
CiAjaW5jbHVkZSAiSURCS2V5UmFuZ2UuaCIKICNpbmNsdWRlICJJREJNZXRhZGF0YS5oIgpAQCAt
NDUsOSArNDUsOSBAQCBjbGFzcyBJREJPYmplY3RTdG9yZTsKIAogY2xhc3MgSURCSW5kZXggOiBw
dWJsaWMgU2NyaXB0V3JhcHBhYmxlLCBwdWJsaWMgUmVmQ291bnRlZDxJREJJbmRleD4gewogcHVi
bGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkluZGV4PiBjcmVhdGUoY29uc3QgSURCSW5k
ZXhNZXRhZGF0YSYgbWV0YWRhdGEsIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNl
PiBiYWNrZW5kLCBJREJPYmplY3RTdG9yZSogb2JqZWN0U3RvcmUsIElEQlRyYW5zYWN0aW9uKiB0
cmFuc2FjdGlvbikKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJJbmRleD4gY3JlYXRlKGNvbnN0
IElEQkluZGV4TWV0YWRhdGEmIG1ldGFkYXRhLCBJREJPYmplY3RTdG9yZSogb2JqZWN0U3RvcmUs
IElEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgSURCSW5kZXgobWV0YWRhdGEsIGJhY2tlbmQsIG9iamVjdFN0b3JlLCB0cmFuc2Fj
dGlvbikpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkluZGV4KG1ldGFkYXRhLCBv
YmplY3RTdG9yZSwgdHJhbnNhY3Rpb24pKTsKICAgICB9CiAgICAgfklEQkluZGV4KCk7CiAKQEAg
LTgzLDExICs4MywxMiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIG1hcmtEZWxldGVkKCkgeyBtX2Rl
bGV0ZWQgPSB0cnVlOyB9CiAKKyAgICBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UqIGJhY2tl
bmREQigpIGNvbnN0OworCiBwcml2YXRlOgotICAgIElEQkluZGV4KGNvbnN0IElEQkluZGV4TWV0
YWRhdGEmLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4sIElEQk9iamVjdFN0
b3JlKiwgSURCVHJhbnNhY3Rpb24qKTsKKyAgICBJREJJbmRleChjb25zdCBJREJJbmRleE1ldGFk
YXRhJiwgSURCT2JqZWN0U3RvcmUqLCBJREJUcmFuc2FjdGlvbiopOwogCiAgICAgSURCSW5kZXhN
ZXRhZGF0YSBtX21ldGFkYXRhOwotICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+
IG1fYmFja2VuZDsKICAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmU+IG1fb2JqZWN0U3RvcmU7CiAg
ICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBtX3RyYW5zYWN0aW9uOwogICAgIGJvb2wgbV9kZWxl
dGVkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5k
ZXhCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJ
bmRleEJhY2tlbmRJbXBsLmNwcAppbmRleCBlOTIzNDQ3NDkzMWJjNjcwYmU3ZjkwYjNmMWMzNWMy
OTFjMTM4MDJhLi44OTQwYzVlN2UxOGJiYTRhODA1NTY0ZTRiZTg0NmY5MzI0NzNiODFhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJ
bXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJh
Y2tlbmRJbXBsLmNwcApAQCAtNDIsOTQgKzQyLDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1jbGFzcyBJREJJbmRleEJhY2tlbmRJbXBsOjpPcGVuSW5kZXhDdXJzb3JPcGVyYXRpb24gOiBw
dWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKLXB1YmxpYzoKLSAg
ICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+
IGNyZWF0ZShQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4LCBQYXNzUmVmUHRy
PElEQktleVJhbmdlPiBrZXlSYW5nZSwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBJREJDdXJz
b3JCYWNrZW5kSW50ZXJmYWNlOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiBjYWxsYmFja3MpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3
IE9wZW5JbmRleEN1cnNvck9wZXJhdGlvbihpbmRleCwga2V5UmFuZ2UsIGRpcmVjdGlvbiwgY3Vy
c29yVHlwZSwgY2FsbGJhY2tzKSk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGwqKTsKLXByaXZhdGU6Ci0gICAgT3BlbkluZGV4Q3Vyc29y
T3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgsIFBhc3NSZWZQ
dHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIElEQkN1
cnNvckJhY2tlbmRJbnRlcmZhY2U6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+IGNhbGxiYWNrcykKLSAgICAgICAgOiBtX2luZGV4KGluZGV4KQotICAgICAg
ICAsIG1fa2V5UmFuZ2Uoa2V5UmFuZ2UpCi0gICAgICAgICwgbV9kaXJlY3Rpb24oZGlyZWN0aW9u
KQotICAgICAgICAsIG1fY3Vyc29yVHlwZShjdXJzb3JUeXBlKQotICAgICAgICAsIG1fY2FsbGJh
Y2tzKGNhbGxiYWNrcykKLSAgICB7Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQkluZGV4QmFja2Vu
ZEltcGw+IG1faW5kZXg7Ci0gICAgUmVmUHRyPElEQktleVJhbmdlPiBtX2tleVJhbmdlOwotICAg
IHVuc2lnbmVkIHNob3J0IG1fZGlyZWN0aW9uOwotICAgIElEQkN1cnNvckJhY2tlbmRJbnRlcmZh
Y2U6OkN1cnNvclR5cGUgbV9jdXJzb3JUeXBlOwotICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IG1f
Y2FsbGJhY2tzOwotfTsKLQotY2xhc3MgSURCSW5kZXhCYWNrZW5kSW1wbDo6SW5kZXhDb3VudE9w
ZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24gewot
cHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6
Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgs
IFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4gY2FsbGJhY2tzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBJbmRleENv
dW50T3BlcmF0aW9uKGluZGV4LCBrZXlSYW5nZSwgY2FsbGJhY2tzKSk7Ci0gICAgfQotICAgIHZp
cnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqKTsKLXByaXZhdGU6
Ci0gICAgSW5kZXhDb3VudE9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+
IGluZGV4LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IGNhbGxiYWNrcykKLSAgICAgICAgOiBtX2luZGV4KGluZGV4KQotICAgICAgICAs
IG1fa2V5UmFuZ2Uoa2V5UmFuZ2UpCi0gICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQot
ICAgIHsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gbV9pbmRleDsK
LSAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IG1fa2V5UmFuZ2U7Ci0gICAgUmVmUHRyPElEQkNhbGxi
YWNrcz4gbV9jYWxsYmFja3M7Ci19OwotCi1jbGFzcyBJREJJbmRleEJhY2tlbmRJbXBsOjpJbmRl
eFJlZmVyZW5jZWRWYWx1ZVJldHJpZXZhbE9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsOjpPcGVyYXRpb24gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8
SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJh
bmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBJbmRleFJlZmVyZW5jZWRWYWx1ZVJldHJpZXZhbE9wZXJhdGlv
bihpbmRleCwga2V5UmFuZ2UsIGNhbGxiYWNrcykpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQg
cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7Ci1wcml2YXRlOgotICAgIEluZGV4
UmVmZXJlbmNlZFZhbHVlUmV0cmlldmFsT3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCSW5kZXhCYWNr
ZW5kSW1wbD4gaW5kZXgsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQotICAgICAgICA6IG1faW5kZXgoaW5kZXgpCi0g
ICAgICAgICwgbV9rZXlSYW5nZShrZXlSYW5nZSkKLSAgICAgICAgLCBtX2NhbGxiYWNrcyhjYWxs
YmFja3MpCi0gICAgewotICAgIH0KLQotICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBt
X2luZGV4OwotICAgIFJlZlB0cjxJREJLZXlSYW5nZT4gbV9rZXlSYW5nZTsKLSAgICBSZWZQdHI8
SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKLX07Ci0KLWNsYXNzIElEQkluZGV4QmFja2VuZElt
cGw6OkluZGV4VmFsdWVSZXRyaWV2YWxPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElE
QkluZGV4QmFja2VuZEltcGw+IGluZGV4LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5n
ZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgSW5kZXhWYWx1ZVJldHJpZXZhbE9wZXJhdGlvbihpbmRleCwga2V5
UmFuZ2UsIGNhbGxiYWNrcykpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7Ci1wcml2YXRlOgotICAgIEluZGV4VmFsdWVSZXRyaWV2
YWxPcGVyYXRpb24oUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCwgUGFzc1Jl
ZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxs
YmFja3MpCi0gICAgICAgIDogbV9pbmRleChpbmRleCkKLSAgICAgICAgLCBtX2tleVJhbmdlKGtl
eVJhbmdlKQotICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKLSAgICB7Ci0gICAgfQot
Ci0gICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IG1faW5kZXg7Ci0gICAgUmVmUHRyPElE
QktleVJhbmdlPiBtX2tleVJhbmdlOwotICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJh
Y2tzOwotfTsKLQotCi1JREJJbmRleEJhY2tlbmRJbXBsOjpJREJJbmRleEJhY2tlbmRJbXBsKGNv
bnN0IElEQkRhdGFiYXNlQmFja2VuZEltcGwqIGRhdGFiYXNlLCBJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsKiBvYmplY3RTdG9yZUJhY2tlbmQsIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIG1ldGFk
YXRhKQorSURCSW5kZXhCYWNrZW5kSW1wbDo6SURCSW5kZXhCYWNrZW5kSW1wbChjb25zdCBJREJE
YXRhYmFzZUJhY2tlbmRJbXBsKiBkYXRhYmFzZSwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgbWV0
YWRhdGEpCiAgICAgOiBtX2RhdGFiYXNlKGRhdGFiYXNlKQotICAgICwgbV9vYmplY3RTdG9yZUJh
Y2tlbmQob2JqZWN0U3RvcmVCYWNrZW5kKQogICAgICwgbV9tZXRhZGF0YShtZXRhZGF0YSkKIHsK
IH0KQEAgLTEzOCwxNTkgKzUyLDYgQEAgSURCSW5kZXhCYWNrZW5kSW1wbDo6fklEQkluZGV4QmFj
a2VuZEltcGwoKQogewogfQogCi12b2lkIElEQkluZGV4QmFja2VuZEltcGw6Ok9wZW5JbmRleEN1
cnNvck9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2Fj
dGlvbikKLXsKLSAgICBJREJfVFJBQ0UoIk9wZW5JbmRleEN1cnNvck9wZXJhdGlvbiIpOwotICAg
IElEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVjdGlvbiA9IHN0YXRpY19jYXN0PElEQkN1cnNvcjo6
RGlyZWN0aW9uPihtX2RpcmVjdGlvbik7Ci0KLSAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpD
dXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNvcjsKLQotICAgIHN3aXRjaCAobV9jdXJzb3JUeXBlKSB7
Ci0gICAgY2FzZSBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpLZXlPbmx5OgotICAgICAgICBi
YWNraW5nU3RvcmVDdXJzb3IgPSBtX2luZGV4LT5iYWNraW5nU3RvcmUoKS0+b3BlbkluZGV4S2V5
Q3Vyc29yKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2luZGV4LT5k
YXRhYmFzZUlkKCksIG1faW5kZXgtPm1fb2JqZWN0U3RvcmVCYWNrZW5kLT5pZCgpLCBtX2luZGV4
LT5pZCgpLCBtX2tleVJhbmdlLmdldCgpLCBkaXJlY3Rpb24pOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OktleUFuZFZhbHVlOgotICAgICAgICBi
YWNraW5nU3RvcmVDdXJzb3IgPSBtX2luZGV4LT5iYWNraW5nU3RvcmUoKS0+b3BlbkluZGV4Q3Vy
c29yKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2luZGV4LT5kYXRh
YmFzZUlkKCksIG1faW5kZXgtPm1fb2JqZWN0U3RvcmVCYWNrZW5kLT5pZCgpLCBtX2luZGV4LT5p
ZCgpLCBtX2tleVJhbmdlLmdldCgpLCBkaXJlY3Rpb24pOwotICAgICAgICBicmVhazsKLSAgICBk
ZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0KLSAgICBpZiAo
IWJhY2tpbmdTdG9yZUN1cnNvcikgewotICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKHN0
YXRpY19jYXN0PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSo+KDApKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIFJlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW1wbD4gY3Vyc29yID0gSURCQ3Vy
c29yQmFja2VuZEltcGw6OmNyZWF0ZShiYWNraW5nU3RvcmVDdXJzb3IuZ2V0KCksIG1fY3Vyc29y
VHlwZSwgdHJhbnNhY3Rpb24sIG1faW5kZXgtPm1fb2JqZWN0U3RvcmVCYWNrZW5kKTsKLSAgICBt
X2NhbGxiYWNrcy0+b25TdWNjZXNzKGN1cnNvciwgY3Vyc29yLT5rZXkoKSwgY3Vyc29yLT5wcmlt
YXJ5S2V5KCksIGN1cnNvci0+dmFsdWUoKSk7Ci19Ci0KLXZvaWQgSURCSW5kZXhCYWNrZW5kSW1w
bDo6b3BlbkN1cnNvcihQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgdW5zaWduZWQg
c2hvcnQgZGlyZWN0aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRpb25D
b2RlJikKLXsKLSAgICBJREJfVFJBQ0UoIklEQkluZGV4QmFja2VuZEltcGw6Om9wZW5DdXJzb3Ii
KTsKLSAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7Ci0g
ICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0gSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbDo6ZnJvbSh0cmFuc2FjdGlvblB0cik7Ci0gICAgdHJhbnNhY3Rp
b24tPnNjaGVkdWxlVGFzayhPcGVuSW5kZXhDdXJzb3JPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBr
ZXlSYW5nZSwgZGlyZWN0aW9uLCBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpLZXlBbmRWYWx1
ZSwgY2FsbGJhY2tzKSk7Ci19Ci0KLXZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6b3BlbktleUN1
cnNvcihQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgdW5zaWduZWQgc2hvcnQgZGly
ZWN0aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRpb25Db2RlJikKLXsK
LSAgICBJREJfVFJBQ0UoIklEQkluZGV4QmFja2VuZEltcGw6Om9wZW5LZXlDdXJzb3IiKTsKLSAg
ICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7Ci0gICAgUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0gSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbDo6ZnJvbSh0cmFuc2FjdGlvblB0cik7Ci0gICAgdHJhbnNhY3Rpb24tPnNj
aGVkdWxlVGFzayhPcGVuSW5kZXhDdXJzb3JPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBrZXlSYW5n
ZSwgZGlyZWN0aW9uLCBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpLZXlPbmx5LCBjYWxsYmFj
a3MpKTsKLX0KLQotdm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpJbmRleENvdW50T3BlcmF0aW9u
OjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQotewotICAg
IElEQl9UUkFDRSgiSW5kZXhDb3VudE9wZXJhdGlvbiIpOwotICAgIHVpbnQzMl90IGNvdW50ID0g
MDsKLQotICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gYmFja2luZ1N0b3JlQ3Vy
c29yID0gbV9pbmRleC0+YmFja2luZ1N0b3JlKCktPm9wZW5JbmRleEtleUN1cnNvcih0cmFuc2Fj
dGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9pbmRleC0+ZGF0YWJhc2VJZCgpLCBt
X2luZGV4LT5tX29iamVjdFN0b3JlQmFja2VuZC0+aWQoKSwgbV9pbmRleC0+aWQoKSwgbV9rZXlS
YW5nZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhUKTsKLSAgICBpZiAoIWJhY2tpbmdTdG9yZUN1cnNv
cikgewotICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKGNvdW50KTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGRvIHsKLSAgICAgICAgKytjb3VudDsKLSAgICB9IHdoaWxlIChi
YWNraW5nU3RvcmVDdXJzb3ItPmNvbnRpbnVlRnVuY3Rpb24oMCkpOwotCi0gICAgbV9jYWxsYmFj
a3MtPm9uU3VjY2Vzcyhjb3VudCk7Ci19Ci0KLXZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6Y291
bnQoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBwcnBDYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rp
b25QdHIsIEV4Y2VwdGlvbkNvZGUmKQotewotICAgIElEQl9UUkFDRSgiSURCSW5kZXhCYWNrZW5k
SW1wbDo6Y291bnQiKTsKLSAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBD
YWxsYmFja3M7Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0
aW9uID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6ZnJvbSh0cmFuc2FjdGlvblB0cik7Ci0g
ICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhJbmRleENvdW50T3BlcmF0aW9uOjpjcmVhdGUo
dGhpcywgcmFuZ2UsIGNhbGxiYWNrcykpOwotfQotCi12b2lkIElEQkluZGV4QmFja2VuZEltcGw6
OkluZGV4UmVmZXJlbmNlZFZhbHVlUmV0cmlldmFsT3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQotewotICAgIElEQl9UUkFDRSgiSW5kZXhS
ZWZlcmVuY2VkVmFsdWVSZXRyaWV2YWxPcGVyYXRpb24iKTsKLQotICAgIFJlZlB0cjxJREJLZXk+
IGtleTsKLQotICAgIGlmIChtX2tleVJhbmdlLT5pc09ubHlLZXkoKSkKLSAgICAgICAga2V5ID0g
bV9rZXlSYW5nZS0+bG93ZXIoKTsKLSAgICBlbHNlIHsKLSAgICAgICAgUmVmUHRyPElEQkJhY2tp
bmdTdG9yZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX2luZGV4LT5iYWNraW5nU3Rv
cmUoKS0+b3BlbkluZGV4Q3Vyc29yKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlv
bigpLCBtX2luZGV4LT5kYXRhYmFzZUlkKCksIG1faW5kZXgtPm1fb2JqZWN0U3RvcmVCYWNrZW5k
LT5pZCgpLCBtX2luZGV4LT5pZCgpLCBtX2tleVJhbmdlLmdldCgpLCBJREJDdXJzb3I6Ok5FWFQp
OwotCi0gICAgICAgIGlmICghYmFja2luZ1N0b3JlQ3Vyc29yKSB7Ci0gICAgICAgICAgICBtX2Nh
bGxiYWNrcy0+b25TdWNjZXNzKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICAgICAga2V5ID0gYmFja2luZ1N0b3JlQ3Vyc29yLT5rZXkoKTsKLSAgICB9Ci0KLSAgICBSZWZQ
dHI8SURCS2V5PiBwcmltYXJ5S2V5OwotICAgIGJvb2wgb2sgPSBtX2luZGV4LT5iYWNraW5nU3Rv
cmUoKS0+Z2V0UHJpbWFyeUtleVZpYUluZGV4KHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFu
c2FjdGlvbigpLCBtX2luZGV4LT5kYXRhYmFzZUlkKCksIG1faW5kZXgtPm1fb2JqZWN0U3RvcmVC
YWNrZW5kLT5pZCgpLCBtX2luZGV4LT5pZCgpLCAqa2V5LCBwcmltYXJ5S2V5KTsKLSAgICBpZiAo
IW9rKSB7Ci0gICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNy
ZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3Ig
aW4gZ2V0UHJpbWFyeUtleVZpYUluZGV4LiIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIFZlY3Rvcjx1aW50OF90PiB2YWx1ZTsKLSAgICBvayA9IG1faW5kZXgtPmJhY2tpbmdTdG9y
ZSgpLT5nZXRSZWNvcmQodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1f
aW5kZXgtPmRhdGFiYXNlSWQoKSwgbV9pbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmlkKCks
ICpwcmltYXJ5S2V5LCB2YWx1ZSk7Ci0gICAgaWYgKCFvaykgewotICAgICAgICBtX2NhbGxiYWNr
cy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246
OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yIGluIGdldFJlY29yZC4iKSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAodmFsdWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1f
Y2FsbGJhY2tzLT5vblN1Y2Nlc3MoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAo
bV9pbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmF1dG9JbmNyZW1lbnQoKSAmJiAhbV9pbmRl
eC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmtleVBhdGgoKS5pc051bGwoKSkgewotICAgICAgICBt
X2NhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdp
cmVCeXRlcyh2YWx1ZSksIHByaW1hcnlLZXksIG1faW5kZXgtPm1fb2JqZWN0U3RvcmVCYWNrZW5k
LT5rZXlQYXRoKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1fY2FsbGJhY2tzLT5v
blN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9tV2lyZUJ5dGVzKHZhbHVl
KSk7Ci19Ci0KLQotdm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpJbmRleFZhbHVlUmV0cmlldmFs
T3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9u
KQotewotICAgIElEQl9UUkFDRSgiSW5kZXhWYWx1ZVJldHJpZXZhbE9wZXJhdGlvbiIpOwotCi0g
ICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJzb3IgPSBt
X2luZGV4LT5iYWNraW5nU3RvcmUoKS0+b3BlbkluZGV4S2V5Q3Vyc29yKHRyYW5zYWN0aW9uLT5i
YWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2luZGV4LT5kYXRhYmFzZUlkKCksIG1faW5kZXgt
Pm1fb2JqZWN0U3RvcmVCYWNrZW5kLT5pZCgpLCBtX2luZGV4LT5pZCgpLCBtX2tleVJhbmdlLmdl
dCgpLCBJREJDdXJzb3I6Ok5FWFQpOwotCi0gICAgaWYgKCFiYWNraW5nU3RvcmVDdXJzb3IpIHsK
LSAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhzdGF0aWNfY2FzdDxJREJLZXkqPigwKSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCS2V5PiBrZXlSZXN1bHQ7
Ci0gICAgYm9vbCBvayA9IG1faW5kZXgtPmJhY2tpbmdTdG9yZSgpLT5nZXRQcmltYXJ5S2V5Vmlh
SW5kZXgodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1faW5kZXgtPmRh
dGFiYXNlSWQoKSwgbV9pbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmlkKCksIG1faW5kZXgt
PmlkKCksICpiYWNraW5nU3RvcmVDdXJzb3ItPmtleSgpLCBrZXlSZXN1bHQpOwotICAgIGlmICgh
b2spIHsKLSAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3Jl
YXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvciBp
biBnZXRQcmltYXJ5S2V5VmlhSW5kZXguIikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IGlmICgha2V5UmVzdWx0KSB7Ci0gICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3Moc3RhdGlj
X2Nhc3Q8SURCS2V5Kj4oMCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1fY2FsbGJh
Y2tzLT5vblN1Y2Nlc3Moa2V5UmVzdWx0LmdldCgpKTsKLX0KLQotdm9pZCBJREJJbmRleEJhY2tl
bmRJbXBsOjpnZXQoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZSogdHJhbnNhY3Rpb25QdHIsIEV4Y2VwdGlvbkNvZGUmKQotewotICAgIElEQl9UUkFDRSgiSURC
SW5kZXhCYWNrZW5kSW1wbDo6Z2V0Iik7Ci0gICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJh
Y2tzID0gcHJwQ2FsbGJhY2tzOwotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
PiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmZyb20odHJhbnNhY3Rp
b25QdHIpOwotICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soSW5kZXhSZWZlcmVuY2VkVmFs
dWVSZXRyaWV2YWxPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBrZXlSYW5nZSwgY2FsbGJhY2tzKSk7
Ci19Ci0KLXZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6Z2V0S2V5KFBhc3NSZWZQdHI8SURCS2V5
UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRpb25D
b2RlJikKLXsKLSAgICBJREJfVFJBQ0UoIklEQkluZGV4QmFja2VuZEltcGw6OmdldEtleSIpOwot
ICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKLSAgICBS
ZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsOjpmcm9tKHRyYW5zYWN0aW9uUHRyKTsKLSAgICB0cmFuc2FjdGlvbi0+
c2NoZWR1bGVUYXNrKEluZGV4VmFsdWVSZXRyaWV2YWxPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBr
ZXlSYW5nZSwgY2FsbGJhY2tzKSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2Vu
ZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5oCmluZGV4IDBjZDdmZTFh
ZDg4NDAxYTZiMjQ5YjJmYjhkYTNiNzVmYThmM2VjYmQuLjFhOTM5OTllMTYzM2Q0ZjdmYTcxZTli
Njg3NGRlMTgxMDFjMjBlOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmgKQEAgLTQyLDkgKzQyLDkgQEAgY2xhc3Mg
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDsKIAogY2xhc3MgSURCSW5kZXhCYWNrZW5kSW1wbCA6
IHB1YmxpYyBJREJJbmRleEJhY2tlbmRJbnRlcmZhY2UgewogcHVibGljOgotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGNyZWF0ZShjb25zdCBJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsKiBkYXRhYmFzZSwgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCogb2JqZWN0U3Rv
cmVCYWNrZW5kLCBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBtZXRhZGF0YSkKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBjcmVhdGUoY29uc3QgSURCRGF0YWJhc2VC
YWNrZW5kSW1wbCogZGF0YWJhc2UsIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIG1ldGFkYXRhKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJJbmRleEJhY2tlbmRJbXBsKGRh
dGFiYXNlLCBvYmplY3RTdG9yZUJhY2tlbmQsIG1ldGFkYXRhKSk7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgSURCSW5kZXhCYWNrZW5kSW1wbChkYXRhYmFzZSwgbWV0YWRhdGEpKTsKICAg
ICB9CiAgICAgdmlydHVhbCB+SURCSW5kZXhCYWNrZW5kSW1wbCgpOwogCkBAIC01NSwxMSArNTUs
MTEgQEAgcHVibGljOgogICAgIH0KIAogICAgIC8vIElEQkluZGV4QmFja2VuZEludGVyZmFjZQot
ICAgIHZpcnR1YWwgdm9pZCBvcGVuQ3Vyc29yKFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCB1bnNp
Z25lZCBzaG9ydCBkaXJlY3Rpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1YWwgdm9p
ZCBjb3VudChQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAg
dmlydHVhbCB2b2lkIG9wZW5LZXlDdXJzb3IoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIHVuc2ln
bmVkIHNob3J0IGRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdmlydHVhbCB2b2lk
IGdldChQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdmly
dHVhbCB2b2lkIGdldEtleShQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2Rl
Jik7CisgICAgdmlydHVhbCB2b2lkIG9wZW5DdXJzb3IoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4s
IHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgeyBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBjb3VudChQYXNzUmVmUHRyPElEQktleVJh
bmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2UqLCBFeGNlcHRpb25Db2RlJikgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorICAgIHZp
cnR1YWwgdm9pZCBvcGVuS2V5Q3Vyc29yKFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCB1bnNpZ25l
ZCBzaG9ydCBkaXJlY3Rpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpIHsgQVNTRVJUX05PVF9SRUFDSEVE
KCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZ2V0KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4
Y2VwdGlvbkNvZGUmKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisgICAgdmlydHVhbCB2b2lk
IGdldEtleShQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgeyBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsgfQogCiAgICAgSURCSW5kZXhNZXRhZGF0YSBtZXRhZGF0YSgpIGNv
bnN0IHsgcmV0dXJuIG1fbWV0YWRhdGE7IH0KICAgICBjb25zdCBTdHJpbmcmIG5hbWUoKSB7IHJl
dHVybiBtX21ldGFkYXRhLm5hbWU7IH0KQEAgLTY4LDEyICs2OCw3IEBAIHB1YmxpYzoKICAgICBj
b25zdCBib29sJiBtdWx0aUVudHJ5KCkgeyByZXR1cm4gbV9tZXRhZGF0YS5tdWx0aUVudHJ5OyB9
CiAKIHByaXZhdGU6Ci0gICAgSURCSW5kZXhCYWNrZW5kSW1wbChjb25zdCBJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsKiwgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCosIGNvbnN0IElEQkluZGV4TWV0
YWRhdGEmKTsKLQotICAgIGNsYXNzIE9wZW5JbmRleEN1cnNvck9wZXJhdGlvbjsKLSAgICBjbGFz
cyBJbmRleENvdW50T3BlcmF0aW9uOwotICAgIGNsYXNzIEluZGV4UmVmZXJlbmNlZFZhbHVlUmV0
cmlldmFsT3BlcmF0aW9uOwotICAgIGNsYXNzIEluZGV4VmFsdWVSZXRyaWV2YWxPcGVyYXRpb247
CisgICAgSURCSW5kZXhCYWNrZW5kSW1wbChjb25zdCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKiwg
Y29uc3QgSURCSW5kZXhNZXRhZGF0YSYpOwogCiAgICAgc3RhdGljIGNvbnN0IGludDY0X3QgSW52
YWxpZElkID0gMDsKIApAQCAtODIsOCArNzcsNiBAQCBwcml2YXRlOgogCiAgICAgY29uc3QgSURC
RGF0YWJhc2VCYWNrZW5kSW1wbCogbV9kYXRhYmFzZTsKIAotICAgIElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGwqIG1fb2JqZWN0U3RvcmVCYWNrZW5kOwotCiAgICAgSURCSW5kZXhNZXRhZGF0YSBt
X21ldGFkYXRhOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCT2JqZWN0U3RvcmUuY3BwCmluZGV4IGYxZDE3NmM0ZTM4ODdhZWNjYmY1ZGUwM2IxMDRk
ZWQwMTczYWVmMGEuLjg5MTI1M2Q5ZTA0YzkxZTk1YWVlYjIzMDQ1NDVmMjQ2NmEwMjcyNWUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3Jl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9y
ZS5jcHAKQEAgLTg3LDE0ICs4NywxMiBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVj
dFN0b3JlOjpnZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzcwogICAgICAg
ICByZXR1cm4gMDsKICAgICB9CiAgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJS
ZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rp
b24uZ2V0KCkpOwotICAgIG1fYmFja2VuZC0+Z2V0KGtleVJhbmdlLCByZXF1ZXN0LCBtX3RyYW5z
YWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKLSAgICBBU1NFUlQoIWVjKTsKKyAgICBiYWNrZW5kREIo
KS0+Z2V0KG1fdHJhbnNhY3Rpb24tPmlkKCksIGlkKCksIElEQkluZGV4TWV0YWRhdGE6OkludmFs
aWRJZCwga2V5UmFuZ2UsIGZhbHNlLCByZXF1ZXN0KTsKICAgICByZXR1cm4gcmVxdWVzdC5yZWxl
YXNlKCk7CiB9CiAKIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OmdldChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBF
eGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlOjpnZXQi
KTsKICAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlID0gSURCS2V5UmFuZ2U6Om9ubHko
a2V5LCBlYyk7CiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm4gMDsKQEAgLTIxNCw4ICsyMTIs
OCBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpwdXQoSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpQdXRNbwogICAgIH0KIAogICAgIFJlZlB0cjxJREJSZXF1
ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIHNvdXJjZSwgbV90cmFu
c2FjdGlvbi5nZXQoKSk7Ci0gICAgbV9iYWNrZW5kLT5wdXQoc2VyaWFsaXplZFZhbHVlLnJlbGVh
c2UoKSwga2V5LnJlbGVhc2UoKSwgcHV0TW9kZSwgcmVxdWVzdCwgbV90cmFuc2FjdGlvbi0+YmFj
a2VuZCgpLCBpbmRleElkcywgaW5kZXhLZXlzKTsKLSAgICBBU1NFUlQoIWVjKTsKKyAgICBWZWN0
b3I8dWludDhfdD4gdmFsdWVCeXRlcyA9IHNlcmlhbGl6ZWRWYWx1ZS0+dG9XaXJlQnl0ZXMoKTsK
KyAgICBiYWNrZW5kREIoKS0+cHV0KG1fdHJhbnNhY3Rpb24tPmlkKCksIGlkKCksICZ2YWx1ZUJ5
dGVzLCBrZXkucmVsZWFzZSgpLCBzdGF0aWNfY2FzdDxJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZh
Y2U6OlB1dE1vZGU+KHB1dE1vZGUpLCByZXF1ZXN0LCBpbmRleElkcywgaW5kZXhLZXlzKTsKICAg
ICByZXR1cm4gcmVxdWVzdC5yZWxlYXNlKCk7CiB9CiAKQEAgLTI0MCwxNCArMjM4LDEyIEBAIFBh
c3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OmRlbGV0ZUZ1bmN0aW9uKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvCiAgICAgfQogCiAgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJl
cXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyks
IG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwotICAgIG1fYmFja2VuZC0+ZGVsZXRlRnVuY3Rpb24oa2V5
UmFuZ2UsIHJlcXVlc3QsIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOwotICAgIEFTU0VS
VCghZWMpOworICAgIGJhY2tlbmREQigpLT5kZWxldGVSYW5nZShtX3RyYW5zYWN0aW9uLT5pZCgp
LCBpZCgpLCBrZXlSYW5nZSwgcmVxdWVzdCk7CiAgICAgcmV0dXJuIHJlcXVlc3QucmVsZWFzZSgp
OwogfQogCiBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpkZWxldGVGdW5j
dGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleT4g
a2V5LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3Jl
OjpkZWxldGUiKTsKICAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlID0gSURCS2V5UmFu
Z2U6Om9ubHkoa2V5LCBlYyk7CiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm4gMDsKQEAgLTI3
MSw4ICsyNjcsNyBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpjbGVh
cihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBFeAogICAgIH0KIAogICAgIFJlZlB0
cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFu
eTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKLSAgICBtX2JhY2tlbmQtPmNs
ZWFyKHJlcXVlc3QsIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOwotICAgIEFTU0VSVCgh
ZWMpOworICAgIGJhY2tlbmREQigpLT5jbGVhcihtX3RyYW5zYWN0aW9uLT5pZCgpLCBpZCgpLCBy
ZXF1ZXN0KTsKICAgICByZXR1cm4gcmVxdWVzdC5yZWxlYXNlKCk7CiB9CiAKQEAgLTI4NCw5ICsy
NzksOSBAQCBuYW1lc3BhY2UgewogLy8gY3Vyc29yIHN1Y2Nlc3MgaGFuZGxlcnMgYXJlIGtlcHQg
YWxpdmUuCiBjbGFzcyBJbmRleFBvcHVsYXRvciA6IHB1YmxpYyBFdmVudExpc3RlbmVyIHsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbmRleFBvcHVsYXRvcj4gY3JlYXRlKFBhc3NS
ZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBiYWNrZW5kLCBQYXNzUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24sIFBhc3NSZWZQdHI8
SURCUmVxdWVzdD4gcmVxdWVzdCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0
YSkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbmRleFBvcHVsYXRvcj4gY3JlYXRlKFBhc3NSZWZQ
dHI8SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlPiBiYWNrZW5kLCBpbnQ2NF90IHRyYW5zYWN0
aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5k
ZXhNZXRhZGF0YSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5kZXhQb3B1
bGF0b3IoYmFja2VuZCwgdHJhbnNhY3Rpb24sIGluZGV4TWV0YWRhdGEpKTsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBJbmRleFBvcHVsYXRvcihiYWNrZW5kLCB0cmFuc2FjdGlvbklkLCBv
YmplY3RTdG9yZUlkLCBpbmRleE1ldGFkYXRhKSk7CiAgICAgfQogCiAgICAgdmlydHVhbCBib29s
IG9wZXJhdG9yPT0oY29uc3QgRXZlbnRMaXN0ZW5lciYgb3RoZXIpCkBAIC0yOTUsMTIgKzI5MCwx
MSBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIEluZGV4UG9wdWxhdG9yKFBhc3NS
ZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBiYWNrZW5kLAotICAgICAgICAg
ICAgICAgICAgIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFu
c2FjdGlvbiwKLSAgICAgICAgICAgICAgICAgICBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRl
eE1ldGFkYXRhKQorICAgIEluZGV4UG9wdWxhdG9yKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNr
ZW5kSW50ZXJmYWNlPiBiYWNrZW5kLCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSkKICAgICAg
ICAgOiBFdmVudExpc3RlbmVyKENQUEV2ZW50TGlzdGVuZXJUeXBlKQotICAgICAgICAsIG1fb2Jq
ZWN0U3RvcmVCYWNrZW5kKGJhY2tlbmQpCi0gICAgICAgICwgbV90cmFuc2FjdGlvbih0cmFuc2Fj
dGlvbikKKyAgICAgICAgLCBtX2RhdGFiYXNlQmFja2VuZChiYWNrZW5kKQorICAgICAgICAsIG1f
dHJhbnNhY3Rpb25JZCh0cmFuc2FjdGlvbklkKQorICAgICAgICAsIG1fb2JqZWN0U3RvcmVJZChv
YmplY3RTdG9yZUlkKQogICAgICAgICAsIG1faW5kZXhNZXRhZGF0YShpbmRleE1ldGFkYXRhKQog
ICAgIHsKICAgICB9CkBAIC0zMzMsMjEgKzMyNywyMCBAQCBwcml2YXRlOgogICAgICAgICAgICAg
VmVjdG9yPElEQk9iamVjdFN0b3JlOjpJbmRleEtleXMsIDE+IGluZGV4S2V5c0xpc3Q7CiAgICAg
ICAgICAgICBpbmRleEtleXNMaXN0LmFwcGVuZChpbmRleEtleXMpOwogCi0gICAgICAgICAgICBt
X29iamVjdFN0b3JlQmFja2VuZC0+c2V0SW5kZXhLZXlzKHByaW1hcnlLZXksIGluZGV4SWRzLCBp
bmRleEtleXNMaXN0LCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKLQorICAgICAgICAgICAgbV9kYXRh
YmFzZUJhY2tlbmQtPnNldEluZGV4S2V5cyhtX3RyYW5zYWN0aW9uSWQsIG1fb2JqZWN0U3RvcmVJ
ZCwgcHJpbWFyeUtleSwgaW5kZXhJZHMsIGluZGV4S2V5c0xpc3QpOwogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgLy8gTm93IHRoYXQgd2UgYXJlIGRvbmUgaW5kZXhpbmcsIHRlbGwgdGhl
IGJhY2tlbmQgdG8gZ28KICAgICAgICAgICAgIC8vIGJhY2sgdG8gcHJvY2Vzc2luZyB0YXNrcyBv
ZiB0eXBlIE5vcm1hbFRhc2suCi0gICAgICAgICAgICBtX29iamVjdFN0b3JlQmFja2VuZC0+c2V0
SW5kZXhlc1JlYWR5KGluZGV4SWRzLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKLSAgICAgICAgICAg
IG1fb2JqZWN0U3RvcmVCYWNrZW5kLmNsZWFyKCk7Ci0gICAgICAgICAgICBtX3RyYW5zYWN0aW9u
LmNsZWFyKCk7CisgICAgICAgICAgICBtX2RhdGFiYXNlQmFja2VuZC0+c2V0SW5kZXhlc1JlYWR5
KG1fdHJhbnNhY3Rpb25JZCwgbV9vYmplY3RTdG9yZUlkLCBpbmRleElkcyk7CisgICAgICAgICAg
ICBtX2RhdGFiYXNlQmFja2VuZC5jbGVhcigpOwogICAgICAgICB9CiAKICAgICB9CiAKLSAgICBS
ZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBtX29iamVjdFN0b3JlQmFja2Vu
ZDsKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBtX3RyYW5zYWN0
aW9uOwotICAgIElEQkluZGV4TWV0YWRhdGEgbV9pbmRleE1ldGFkYXRhOworICAgIFJlZlB0cjxJ
REJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U+IG1fZGF0YWJhc2VCYWNrZW5kOworICAgIGNvbnN0
IGludDY0X3QgbV90cmFuc2FjdGlvbklkOworICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9y
ZUlkOworICAgIGNvbnN0IElEQkluZGV4TWV0YWRhdGEgbV9pbmRleE1ldGFkYXRhOwogfTsKIH0K
IApAQCAtMzkyLDE1ICszODUsMTQgQEAgUGFzc1JlZlB0cjxJREJJbmRleD4gSURCT2JqZWN0U3Rv
cmU6OmNyZWF0ZUluZGV4KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQKICAgICB9CiAK
ICAgICBpbnQ2NF90IGluZGV4SWQgPSBtX21ldGFkYXRhLm1heEluZGV4SWQgKyAxOwotICAgIFJl
ZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGluZGV4QmFja2VuZCA9IG1fYmFja2VuZC0+
Y3JlYXRlSW5kZXgoaW5kZXhJZCwgbmFtZSwga2V5UGF0aCwgdW5pcXVlLCBtdWx0aUVudHJ5LCBt
X3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKLSAgICBBU1NFUlQoIWluZGV4QmFja2VuZCAh
PSAhZWMpOyAvLyBJZiB3ZSBkaWRuJ3QgZ2V0IGFuIGluZGV4LCB3ZSBzaG91bGQgaGF2ZSBnb3R0
ZW4gYW4gZXhjZXB0aW9uIGNvZGUuIEFuZCB2aWNlIHZlcnNhLgorICAgIG1fYmFja2VuZC0+Y3Jl
YXRlSW5kZXgoaW5kZXhJZCwgbmFtZSwga2V5UGF0aCwgdW5pcXVlLCBtdWx0aUVudHJ5LCBtX3Ry
YW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKICAgICBpZiAoZWMpCiAgICAgICAgIHJldHVybiAw
OwogCiAgICAgKyttX21ldGFkYXRhLm1heEluZGV4SWQ7CiAKICAgICBJREJJbmRleE1ldGFkYXRh
IG1ldGFkYXRhKG5hbWUsIGluZGV4SWQsIGtleVBhdGgsIHVuaXF1ZSwgbXVsdGlFbnRyeSk7Ci0g
ICAgUmVmUHRyPElEQkluZGV4PiBpbmRleCA9IElEQkluZGV4OjpjcmVhdGUobWV0YWRhdGEsIGlu
ZGV4QmFja2VuZC5yZWxlYXNlKCksIHRoaXMsIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOworICAgIFJl
ZlB0cjxJREJJbmRleD4gaW5kZXggPSBJREJJbmRleDo6Y3JlYXRlKG1ldGFkYXRhLCB0aGlzLCBt
X3RyYW5zYWN0aW9uLmdldCgpKTsKICAgICBtX2luZGV4TWFwLnNldChuYW1lLCBpbmRleCk7CiAg
ICAgbV9tZXRhZGF0YS5pbmRleGVzLnNldChpbmRleElkLCBtZXRhZGF0YSk7CiAKQEAgLTQxNSw3
ICs0MDcsNyBAQCBQYXNzUmVmUHRyPElEQkluZGV4PiBJREJPYmplY3RTdG9yZTo6Y3JlYXRlSW5k
ZXgoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dAogICAgIGluZGV4UmVxdWVzdC0+cHJl
dmVudFByb3BhZ2F0aW9uKCk7CiAKICAgICAvLyBUaGlzIGlzIGtlcHQgYWxpdmUgYnkgYmVpbmcg
dGhlIHN1Y2Nlc3MgaGFuZGxlciBvZiB0aGUgcmVxdWVzdCwgd2hpY2ggaXMgaW4gdHVybiBrZXB0
IGFsaXZlIGJ5IHRoZSBvd25pbmcgdHJhbnNhY3Rpb24uCi0gICAgUmVmUHRyPEluZGV4UG9wdWxh
dG9yPiBpbmRleFBvcHVsYXRvciA9IEluZGV4UG9wdWxhdG9yOjpjcmVhdGUobV9iYWNrZW5kLCBt
X3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGluZGV4UmVxdWVzdCwgbWV0YWRhdGEpOworICAgIFJl
ZlB0cjxJbmRleFBvcHVsYXRvcj4gaW5kZXhQb3B1bGF0b3IgPSBJbmRleFBvcHVsYXRvcjo6Y3Jl
YXRlKGJhY2tlbmREQigpLCBtX3RyYW5zYWN0aW9uLT5pZCgpLCBpZCgpLCBtZXRhZGF0YSk7CiAg
ICAgaW5kZXhSZXF1ZXN0LT5zZXRPbnN1Y2Nlc3MoaW5kZXhQb3B1bGF0b3IpOwogCiAgICAgcmV0
dXJuIGluZGV4LnJlbGVhc2UoKTsKQEAgLTQ0Myw5ICs0MzUsNiBAQCBQYXNzUmVmUHRyPElEQklu
ZGV4PiBJREJPYmplY3RTdG9yZTo6aW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25D
b2RlJiBlYwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBSZWZQdHI8SURCSW5kZXhC
YWNrZW5kSW50ZXJmYWNlPiBpbmRleEJhY2tlbmQgPSBtX2JhY2tlbmQtPmluZGV4KGluZGV4SWQp
OwotICAgIEFTU0VSVCghZWMgJiYgaW5kZXhCYWNrZW5kKTsKLQogICAgIGNvbnN0IElEQkluZGV4
TWV0YWRhdGEqIGluZGV4TWV0YWRhdGEoMCk7CiAgICAgZm9yIChJREJPYmplY3RTdG9yZU1ldGFk
YXRhOjpJbmRleE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX21ldGFkYXRhLmluZGV4ZXMuYmVn
aW4oKTsgaXQgIT0gbV9tZXRhZGF0YS5pbmRleGVzLmVuZCgpOyArK2l0KSB7CiAgICAgICAgIGlm
IChpdC0+dmFsdWUubmFtZSA9PSBuYW1lKSB7CkBAIC00NTQsOCArNDQzLDkgQEAgUGFzc1JlZlB0
cjxJREJJbmRleD4gSURCT2JqZWN0U3RvcmU6OmluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhj
ZXB0aW9uQ29kZSYgZWMKICAgICAgICAgfQogICAgIH0KICAgICBBU1NFUlQoaW5kZXhNZXRhZGF0
YSk7CisgICAgQVNTRVJUKGluZGV4TWV0YWRhdGEtPmlkICE9IElEQkluZGV4TWV0YWRhdGE6Oklu
dmFsaWRJZCk7CiAKLSAgICBSZWZQdHI8SURCSW5kZXg+IGluZGV4ID0gSURCSW5kZXg6OmNyZWF0
ZSgqaW5kZXhNZXRhZGF0YSwgaW5kZXhCYWNrZW5kLnJlbGVhc2UoKSwgdGhpcywgbV90cmFuc2Fj
dGlvbi5nZXQoKSk7CisgICAgUmVmUHRyPElEQkluZGV4PiBpbmRleCA9IElEQkluZGV4OjpjcmVh
dGUoKmluZGV4TWV0YWRhdGEsIHRoaXMsIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwogICAgIG1faW5k
ZXhNYXAuc2V0KG5hbWUsIGluZGV4KTsKICAgICByZXR1cm4gaW5kZXgucmVsZWFzZSgpOwogfQpA
QCAtNTA0LDE0ICs0OTQsMTMgQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9y
ZTo6b3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXgKIAogICAgIFJlZlB0
cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFu
eTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKICAgICByZXF1ZXN0LT5zZXRD
dXJzb3JEZXRhaWxzKElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OktleUFuZFZhbHVlLCBkaXJl
Y3Rpb24pOwotICAgIG1fYmFja2VuZC0+b3BlbkN1cnNvcihyYW5nZSwgZGlyZWN0aW9uLCByZXF1
ZXN0LCB0YXNrVHlwZSwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7Ci0gICAgQVNTRVJU
KCFlYyk7CisKKyAgICBiYWNrZW5kREIoKS0+b3BlbkN1cnNvcihtX3RyYW5zYWN0aW9uLT5pZCgp
LCBpZCgpLCBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQsIHJhbmdlLCBkaXJlY3Rpb24sIGZh
bHNlLCBzdGF0aWNfY2FzdDxJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlPih0
YXNrVHlwZSksIHJlcXVlc3QpOwogICAgIHJldHVybiByZXF1ZXN0LnJlbGVhc2UoKTsKIH0KIAog
UGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6b3BlbkN1cnNvcihTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBjb25zdCBT
dHJpbmcmIGRpcmVjdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgSURCX1RSQUNFKCJJ
REJPYmplY3RTdG9yZTo6b3BlbkN1cnNvciIpOwogICAgIFJlZlB0cjxJREJLZXlSYW5nZT4ga2V5
UmFuZ2UgPSBJREJLZXlSYW5nZTo6b25seShrZXksIGVjKTsKICAgICBpZiAoZWMpCiAgICAgICAg
IHJldHVybiAwOwpAQCAtNTMwLDE0ICs1MTksMTIgQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJ
REJPYmplY3RTdG9yZTo6Y291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGEK
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0
ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBtX3Ry
YW5zYWN0aW9uLmdldCgpKTsKLSAgICBtX2JhY2tlbmQtPmNvdW50KHJhbmdlLCByZXF1ZXN0LCBt
X3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKLSAgICBBU1NFUlQoIWVjKTsKKyAgICBiYWNr
ZW5kREIoKS0+Y291bnQobV90cmFuc2FjdGlvbi0+aWQoKSwgaWQoKSwgSURCSW5kZXhNZXRhZGF0
YTo6SW52YWxpZElkLCByYW5nZSwgcmVxdWVzdCk7CiAgICAgcmV0dXJuIHJlcXVlc3QucmVsZWFz
ZSgpOwogfQogCiBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpjb3VudChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBF
eGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlOjpjb3Vu
dCIpOwogICAgIFJlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UgPSBJREJLZXlSYW5nZTo6b25s
eShrZXksIGVjKTsKICAgICBpZiAoZWMpCiAgICAgICAgIHJldHVybiAwOwpAQCAtNTYzLDYgKzU1
MCwxMSBAQCBpbnQ2NF90IElEQk9iamVjdFN0b3JlOjpmaW5kSW5kZXhJZChjb25zdCBTdHJpbmcm
IG5hbWUpIGNvbnN0CiAgICAgcmV0dXJuIElEQkluZGV4TWV0YWRhdGE6OkludmFsaWRJZDsKIH0K
IAorSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlKiBJREJPYmplY3RTdG9yZTo6YmFja2VuZERC
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90cmFuc2FjdGlvbi0+YmFja2VuZERCKCk7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2Jq
ZWN0U3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0
b3JlLmgKaW5kZXggZmNiNDM3OWFlZWQ3NzYzOGQ3MGNmNjkyMDg3ODM1ODAzZmI2OWZlZC4uN2Uy
ZjcyZmFlYTg1MTkzYzMwOTNlZDYzZDg1YWEyYTUwMmYzYzAyNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oCkBAIC0yOSw2ICsyOSw3
IEBACiAjaW5jbHVkZSAiRGljdGlvbmFyeS5oIgogI2luY2x1ZGUgIklEQkN1cnNvci5oIgogI2lu
Y2x1ZGUgIklEQkluZGV4LmgiCisjaW5jbHVkZSAiSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlLmgi
CiAjaW5jbHVkZSAiSURCS2V5LmgiCiAjaW5jbHVkZSAiSURCS2V5UmFuZ2UuaCIKICNpbmNsdWRl
ICJJREJNZXRhZGF0YS5oIgpAQCAtNTgsNiArNTksNyBAQCBwdWJsaWM6CiAgICAgfklEQk9iamVj
dFN0b3JlKCkgeyB9CiAKICAgICAvLyBJbXBsZW1lbnQgdGhlIElEQk9iamVjdFN0b3JlIElETAor
ICAgIGludDY0X3QgaWQoKSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhLmlkOyB9CiAgICAgY29u
c3QgU3RyaW5nIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhLm5hbWU7IH0KICAgICBQ
YXNzUmVmUHRyPElEQkFueT4ga2V5UGF0aEFueSgpIGNvbnN0IHsgcmV0dXJuIElEQkFueTo6Y3Jl
YXRlKG1fbWV0YWRhdGEua2V5UGF0aCk7IH0KICAgICBjb25zdCBJREJLZXlQYXRoIGtleVBhdGgo
KSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhLmtleVBhdGg7IH0KQEAgLTEwNCw2ICsxMDYsOCBA
QCBwdWJsaWM6CiAgICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPElEQktleT4gPiBJbmRleEtleXM7
CiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgSW5kZXhLZXlzPiBJbmRleEtleU1hcDsKIAor
ICAgIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZSogYmFja2VuZERCKCkgY29uc3Q7CisKIHBy
aXZhdGU6CiAgICAgSURCT2JqZWN0U3RvcmUoY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYs
IFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiwgSURCVHJhbnNhY3Rp
b24qKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcAppbmRleCAzYzJkOWI3MDczMDhkOThi
YzM5OTRhMGMwZWQ2YjgxYTQ5ZWUzOTk0Li5lNmNlODNjMzViMzhjMDRlY2VhZmE3OGE5YWFkNTVm
ZjgwYWZiN2IxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcApAQCAtNDQsMTEwICs0NCw2
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6T2JqZWN0U3RvcmVSZXRyaWV2YWxPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0
cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRy
PElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQktl
eVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgT2JqZWN0U3RvcmVSZXRyaWV2YWxPcGVy
YXRpb24ob2JqZWN0U3RvcmUsIGtleVJhbmdlLCBjYWxsYmFja3MpKTsKLSAgICB9Ci0gICAgdmly
dHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOwotcHJpdmF0ZToK
LSAgICBPYmplY3RTdG9yZVJldHJpZXZhbE9wZXJhdGlvbihQYXNzUmVmUHRyPElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlS
YW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLSAgICAgICAgOiBtX29i
amVjdFN0b3JlKG9iamVjdFN0b3JlKQotICAgICAgICAsIG1fa2V5UmFuZ2Uoa2V5UmFuZ2UpCi0g
ICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQotICAgIHsKLSAgICB9Ci0KLSAgICBSZWZQ
dHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gbV9vYmplY3RTdG9yZTsKLSAgICBSZWZQdHI8
SURCS2V5UmFuZ2U+IG1fa2V5UmFuZ2U7Ci0gICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxs
YmFja3M7Ci19OwotCi1jbGFzcyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpPYmplY3RTdG9y
ZVN0b3JhZ2VPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3Bl
cmF0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4g
dmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc093blB0cjxWZWN0b3I8aW50NjRfdD4gPiBw
b3BJbmRleElkcywgUGFzc093blB0cjxWZWN0b3I8SW5kZXhLZXlzPiA+IHBvcEluZGV4S2V5cykK
LSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgT2JqZWN0U3RvcmVTdG9yYWdlT3Bl
cmF0aW9uKG9iamVjdFN0b3JlLCB2YWx1ZSwga2V5LCBwdXRNb2RlLCBjYWxsYmFja3MsIHBvcElu
ZGV4SWRzLCBwb3BJbmRleEtleXMpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm0o
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOwotcHJpdmF0ZToKLSAgICBPYmplY3RTdG9yZVN0
b3JhZ2VPcGVyYXRpb24oUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmpl
Y3RTdG9yZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlLCBQYXNzUmVm
UHRyPElEQktleT4ga2V5LCBQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBjYWxsYmFja3MsIFBhc3NPd25QdHI8VmVjdG9yPGludDY0X3Q+ID4gcG9wSW5kZXhJZHMsIFBh
c3NPd25QdHI8VmVjdG9yPEluZGV4S2V5cz4gPiBwb3BJbmRleEtleXMpCi0gICAgICAgIDogbV9v
YmplY3RTdG9yZShvYmplY3RTdG9yZSkKLSAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQotICAgICAg
ICAsIG1fa2V5KGtleSkKLSAgICAgICAgLCBtX3B1dE1vZGUocHV0TW9kZSkKLSAgICAgICAgLCBt
X2NhbGxiYWNrcyhjYWxsYmFja3MpCi0gICAgICAgICwgbV9wb3BJbmRleElkcyhwb3BJbmRleElk
cykKLSAgICAgICAgLCBtX3BvcEluZGV4S2V5cyhwb3BJbmRleEtleXMpCi0gICAgewotICAgIH0K
LQotICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBtX29iamVjdFN0b3JlOwot
ICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG1fdmFsdWU7Ci0gICAgUmVmUHRyPElE
QktleT4gbV9rZXk7Ci0gICAgUHV0TW9kZSBtX3B1dE1vZGU7Ci0gICAgUmVmUHRyPElEQkNhbGxi
YWNrcz4gbV9jYWxsYmFja3M7Ci0gICAgT3duUHRyPFZlY3RvcjxpbnQ2NF90PiA+IG1fcG9wSW5k
ZXhJZHM7Ci0gICAgT3duUHRyPFZlY3RvcjxJbmRleEtleXM+ID4gbV9wb3BJbmRleEtleXM7Ci19
OwotCi1jbGFzcyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpPYmplY3RTdG9yZUluZGV4ZXNS
ZWFkeU9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRp
b24gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NPd25QdHI8VmVjdG9yPGludDY0X3Q+ID4gcG9wSW5kZXhJ
ZHMpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IE9iamVjdFN0b3JlSW5kZXhl
c1JlYWR5T3BlcmF0aW9uKG9iamVjdFN0b3JlLCBwb3BJbmRleElkcykpOwotICAgIH0KLSAgICB2
aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7Ci1wcml2YXRl
OgotICAgIE9iamVjdFN0b3JlSW5kZXhlc1JlYWR5T3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NPd25QdHI8VmVjdG9yPGludDY0
X3Q+ID4gcG9wSW5kZXhJZHMpCi0gICAgICAgIDogbV9vYmplY3RTdG9yZShvYmplY3RTdG9yZSkK
LSAgICAgICAgLCBtX3BvcEluZGV4SWRzKHBvcEluZGV4SWRzKQotICAgIHsKLSAgICB9Ci0KLSAg
ICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gbV9vYmplY3RTdG9yZTsKLSAgICBP
d25QdHI8VmVjdG9yPGludDY0X3Q+ID4gbV9wb3BJbmRleElkczsKLX07Ci0KLWNsYXNzIElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6Ok9iamVjdFN0b3JlRGVsZXRpb25PcGVyYXRpb24gOiBwdWJs
aWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKLXB1YmxpYzoKLSAgICBz
dGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNy
ZWF0ZShQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQ
YXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
IGNhbGxiYWNrcykKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgT2JqZWN0U3Rv
cmVEZWxldGlvbk9wZXJhdGlvbihvYmplY3RTdG9yZSwga2V5UmFuZ2UsIGNhbGxiYWNrcykpOwot
ICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
Kik7Ci1wcml2YXRlOgotICAgIE9iamVjdFN0b3JlRGVsZXRpb25PcGVyYXRpb24oUGFzc1JlZlB0
cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJL
ZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi0g
ICAgICAgIDogbV9vYmplY3RTdG9yZShvYmplY3RTdG9yZSkKLSAgICAgICAgLCBtX2tleVJhbmdl
KGtleVJhbmdlKQotICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKLSAgICB7Ci0gICAg
fQotCi0gICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG1fb2JqZWN0U3RvcmU7
Ci0gICAgUmVmUHRyPElEQktleVJhbmdlPiBtX2tleVJhbmdlOwotICAgIFJlZlB0cjxJREJDYWxs
YmFja3M+IG1fY2FsbGJhY2tzOwotfTsKLQotY2xhc3MgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bDo6T2JqZWN0U3RvcmVDbGVhck9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsOjpPcGVyYXRpb24gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBjYWxsYmFja3MpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IE9iamVjdFN0
b3JlQ2xlYXJPcGVyYXRpb24ob2JqZWN0U3RvcmUsIGNhbGxiYWNrcykpOwotICAgIH0KLSAgICB2
aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7Ci1wcml2YXRl
OgotICAgIE9iamVjdFN0b3JlQ2xlYXJPcGVyYXRpb24oUGFzc1JlZlB0cjxJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxi
YWNrcykKLSAgICAgICAgOiBtX29iamVjdFN0b3JlKG9iamVjdFN0b3JlKQotICAgICAgICAsIG1f
Y2FsbGJhY2tzKGNhbGxiYWNrcykKLSAgICB7Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw+IG1fb2JqZWN0U3RvcmU7Ci0gICAgUmVmUHRyPElEQkNhbGxiYWNr
cz4gbV9jYWxsYmFja3M7Ci19OwotCiBjbGFzcyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpD
cmVhdGVJbmRleE9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpP
cGVyYXRpb24gewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4g
aW5kZXgpCkBAIC0xODQsNTAgKzgwLDYgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8SURCSW5kZXhC
YWNrZW5kSW1wbD4gbV9pbmRleDsKIH07CiAKLWNsYXNzIElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6Ok9wZW5PYmplY3RTdG9yZUN1cnNvck9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsOjpPcGVyYXRpb24gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCS2V5
UmFuZ2U+IHJhbmdlLCBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24sIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZTo6
VGFza1R5cGUgdGFza1R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IE9w
ZW5PYmplY3RTdG9yZUN1cnNvck9wZXJhdGlvbihvYmplY3RTdG9yZSwgcmFuZ2UsIGRpcmVjdGlv
biwgY2FsbGJhY2tzLCB0YXNrVHlwZSkpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9y
bShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7Ci1wcml2YXRlOgotICAgIE9wZW5PYmplY3RT
dG9yZUN1cnNvck9wZXJhdGlvbihQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+
IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiByYW5nZSwgSURCQ3Vyc29yOjpE
aXJlY3Rpb24gZGlyZWN0aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlIHRhc2tUeXBlKQotICAgICAg
ICA6IG1fb2JqZWN0U3RvcmUob2JqZWN0U3RvcmUpCi0gICAgICAgICwgbV9yYW5nZShyYW5nZSkK
LSAgICAgICAgLCBtX2RpcmVjdGlvbihkaXJlY3Rpb24pCi0gICAgICAgICwgbV9jYWxsYmFja3Mo
Y2FsbGJhY2tzKQotICAgICAgICAsIG1fdGFza1R5cGUodGFza1R5cGUpCi0gICAgewotICAgIH0K
LQotICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBtX29iamVjdFN0b3JlOwot
ICAgIFJlZlB0cjxJREJLZXlSYW5nZT4gbV9yYW5nZTsKLSAgICBJREJDdXJzb3I6OkRpcmVjdGlv
biBtX2RpcmVjdGlvbjsKLSAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKLSAg
ICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlIG1fdGFza1R5cGU7Ci19
OwotCi1jbGFzcyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpPYmplY3RTdG9yZUNvdW50T3Bl
cmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbiB7Ci1w
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6
T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBv
YmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2UsIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiBjYWxsYmFja3MpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3
IE9iamVjdFN0b3JlQ291bnRPcGVyYXRpb24ob2JqZWN0U3RvcmUsIHJhbmdlLCBjYWxsYmFja3Mp
KTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbCopOwotcHJpdmF0ZToKLSAgICBPYmplY3RTdG9yZUNvdW50T3BlcmF0aW9uKFBhc3NSZWZQ
dHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURC
S2V5UmFuZ2U+IHJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQotICAg
ICAgICA6IG1fb2JqZWN0U3RvcmUob2JqZWN0U3RvcmUpCi0gICAgICAgICwgbV9yYW5nZShyYW5n
ZSkKLSAgICAgICAgLCBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCi0gICAgewotICAgIH0KLQotICAg
IFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBtX29iamVjdFN0b3JlOwotICAgIFJl
ZlB0cjxJREJLZXlSYW5nZT4gbV9yYW5nZTsKLSAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2Nh
bGxiYWNrczsKLX07Ci0KIGNsYXNzIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OkNyZWF0ZUlu
ZGV4QWJvcnRPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3Bl
cmF0aW9uIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGlu
ZGV4KQpAQCAtMjg0LDYzICsxMzYsNiBAQCBJREJPYmplY3RTdG9yZU1ldGFkYXRhIElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6Om1ldGFkYXRhKCkgY29uc3QKICAgICByZXR1cm4gbWV0YWRhdGE7
CiB9CiAKLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Z2V0KFBhc3NSZWZQdHI8SURC
S2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tz
LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRp
b25Db2RlJikKLXsKLSAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Omdl
dCIpOwotICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsK
LSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpmcm9tKHRyYW5zYWN0aW9uUHRyKTsKLSAgICB0cmFuc2Fj
dGlvbi0+c2NoZWR1bGVUYXNrKE9iamVjdFN0b3JlUmV0cmlldmFsT3BlcmF0aW9uOjpjcmVhdGUo
dGhpcywga2V5UmFuZ2UsIGNhbGxiYWNrcykpOwotfQotCi12b2lkIElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6Ok9iamVjdFN0b3JlUmV0cmlldmFsT3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQotewotICAgIElEQl9UUkFDRSgiT2JqZWN0
U3RvcmVSZXRyaWV2YWxPcGVyYXRpb24iKTsKLSAgICBSZWZQdHI8SURCS2V5PiBrZXk7Ci0gICAg
aWYgKG1fa2V5UmFuZ2UtPmlzT25seUtleSgpKQotICAgICAgICBrZXkgPSBtX2tleVJhbmdlLT5s
b3dlcigpOwotICAgIGVsc2UgewotICAgICAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJz
b3I+IGJhY2tpbmdTdG9yZUN1cnNvciA9IG1fb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5v
cGVuT2JqZWN0U3RvcmVDdXJzb3IodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9u
KCksIG1fb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgbV9vYmplY3RTdG9yZS0+aWQoKSwgbV9r
ZXlSYW5nZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhUKTsKLSAgICAgICAgaWYgKCFiYWNraW5nU3Rv
cmVDdXJzb3IpIHsKLSAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBrZXkgPSBiYWNraW5nU3RvcmVDdXJz
b3ItPmtleSgpOwotICAgIH0KLQotICAgIFZlY3Rvcjx1aW50OF90PiB3aXJlRGF0YTsKLSAgICBi
b29sIG9rID0gbV9vYmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCktPmdldFJlY29yZCh0cmFuc2Fj
dGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9vYmplY3RTdG9yZS0+ZGF0YWJhc2VJ
ZCgpLCBtX29iamVjdFN0b3JlLT5pZCgpLCAqa2V5LCB3aXJlRGF0YSk7Ci0gICAgaWYgKCFvaykg
ewotICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUo
SURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yIGluIGdl
dFJlY29yZC4iKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHdpcmVEYXRhLmlz
RW1wdHkoKSkgewotICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBpZiAobV9vYmplY3RTdG9yZS0+YXV0b0luY3JlbWVudCgpICYm
ICFtX29iamVjdFN0b3JlLT5rZXlQYXRoKCkuaXNOdWxsKCkpIHsKLSAgICAgICAgbV9jYWxsYmFj
a3MtPm9uU3VjY2VzcyhTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZUZyb21XaXJlQnl0ZXMo
d2lyZURhdGEpLCBrZXksIG1fb2JqZWN0U3RvcmUtPmtleVBhdGgoKSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVkU2NyaXB0VmFs
dWU6OmNyZWF0ZUZyb21XaXJlQnl0ZXMod2lyZURhdGEpKTsKLX0KLQotdm9pZCBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpwdXQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZh
bHVlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZSogdHJhbnNhY3Rpb25QdHIsIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMsIGNvbnN0
IFZlY3RvcjxJbmRleEtleXM+JiBpbmRleEtleXMpCi17Ci0gICAgSURCX1RSQUNFKCJJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsOjpwdXQiKTsKLQotICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNh
bGxiYWNrcyA9IHBycENhbGxiYWNrczsKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbD4gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpmcm9tKHRyYW5z
YWN0aW9uUHRyKTsKLSAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1vZGUoKSAhPSBJREJUcmFuc2Fj
dGlvbjo6UkVBRF9PTkxZKTsKLQotICAgIE93blB0cjxWZWN0b3I8aW50NjRfdD4gPiBuZXdJbmRl
eElkcyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8aW50NjRfdD4oaW5kZXhJZHMpKTsKLSAgICBPd25Q
dHI8VmVjdG9yPEluZGV4S2V5cz4gPiBuZXdJbmRleEtleXMgPSBhZG9wdFB0cihuZXcgVmVjdG9y
PEluZGV4S2V5cz4oaW5kZXhLZXlzKSk7Ci0KLSAgICBBU1NFUlQoYXV0b0luY3JlbWVudCgpIHx8
IGtleS5nZXQoKSk7Ci0KLSAgICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKE9iamVjdFN0b3Jl
U3RvcmFnZU9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIHZhbHVlLCBrZXksIHB1dE1vZGUsIGNhbGxi
YWNrcywgbmV3SW5kZXhJZHMucmVsZWFzZSgpLCBuZXdJbmRleEtleXMucmVsZWFzZSgpKSk7Ci19
Ci0KIGJvb2wgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6SW5kZXhXcml0ZXI6OnZlcmlmeUlu
ZGV4S2V5cyhJREJCYWNraW5nU3RvcmUmIGJhY2tpbmdTdG9yZSwgSURCQmFja2luZ1N0b3JlOjpU
cmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGJvb2wmIGNhbkFkZEtleXMsIGNvbnN0IElEQktl
eSogcHJpbWFyeUtleSwgU3RyaW5nKiBlcnJvck1lc3NhZ2UpIGNvbnN0CiB7CiAgICAgY2FuQWRk
S2V5cyA9IGZhbHNlOwpAQCAtNDE3LDE4OCArMjEyLDExIEBAIGJvb2wgSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6bWFrZUluZGV4V3JpdGVycyhQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFj
a2VuCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bDo6c2V0SW5kZXhLZXlzKFBhc3NSZWZQdHI8SURCS2V5PiBwcnBQcmltYXJ5S2V5LCBjb25zdCBW
ZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYgaW5kZXhL
ZXlzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyKQotewot
ICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6c2V0SW5kZXhLZXlzIik7
Ci0gICAgUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSA9IHBycFByaW1hcnlLZXk7Ci0gICAgUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0gSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbDo6ZnJvbSh0cmFuc2FjdGlvblB0cik7Ci0gICAgaWYgKHRyYW5zYWN0aW9u
LT5pc0ZpbmlzaGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEZJWE1FOiBUaGlzIG1l
dGhvZCBjb3VsZCBiZSBhc3luY2hyb25vdXMsIGJ1dCB3ZSBuZWVkIHRvIGV2YWx1YXRlIGlmIGl0
J3Mgd29ydGggdGhlIGV4dHJhIGNvbXBsZXhpdHkuCi0gICAgSURCQmFja2luZ1N0b3JlOjpSZWNv
cmRJZGVudGlmaWVyIHJlY29yZElkZW50aWZpZXI7Ci0gICAgYm9vbCBmb3VuZCA9IGZhbHNlOwot
ICAgIGJvb2wgb2sgPSBiYWNraW5nU3RvcmUoKS0+a2V5RXhpc3RzSW5PYmplY3RTdG9yZSh0cmFu
c2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgZGF0YWJhc2VJZCgpLCBpZCgpLCAq
cHJpbWFyeUtleSwgJnJlY29yZElkZW50aWZpZXIsIGZvdW5kKTsKLSAgICBpZiAoIW9rKSB7Ci0g
ICAgICAgIExPR19FUlJPUigia2V5RXhpc3RzSW5PYmplY3RTdG9yZSByZXBvcnRlZCBhbiBlcnJv
ciIpOwotICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRl
KElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvciBzZXR0
aW5nIGluZGV4IGtleXMuIikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICghZm91
bmQpIHsKLSAgICAgICAgUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9yID0gSURCRGF0YWJh
c2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIFN0cmlu
Zzo6Zm9ybWF0KCJJbnRlcm5hbCBlcnJvciBzZXR0aW5nIGluZGV4IGtleXMgZm9yIG9iamVjdCBz
dG9yZSAnJXMnLiIsIG5hbWUoKS51dGY4KCkuZGF0YSgpKSk7Ci0gICAgICAgIHRyYW5zYWN0aW9u
LT5hYm9ydChlcnJvci5yZWxlYXNlKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
VmVjdG9yPE93blB0cjxJbmRleFdyaXRlcj4gPiBpbmRleFdyaXRlcnM7Ci0gICAgU3RyaW5nIGVy
cm9yTWVzc2FnZTsKLSAgICBib29sIG9iZXlzQ29uc3RyYWludHMgPSBmYWxzZTsKLSAgICBSZWZQ
dHI8SURCQmFja2luZ1N0b3JlPiBzdG9yZSA9IGJhY2tpbmdTdG9yZSgpOwotICAgIGJvb2wgYmFj
a2luZ1N0b3JlU3VjY2VzcyA9IG1ha2VJbmRleFdyaXRlcnModHJhbnNhY3Rpb24sIHN0b3JlLmdl
dCgpLCBkYXRhYmFzZUlkKCksIG1ldGFkYXRhKCksIHByaW1hcnlLZXksIGZhbHNlLCBpbmRleElk
cywgaW5kZXhLZXlzLCAmaW5kZXhXcml0ZXJzLCAmZXJyb3JNZXNzYWdlLCBvYmV5c0NvbnN0cmFp
bnRzKTsKLSAgICBpZiAoIWJhY2tpbmdTdG9yZVN1Y2Nlc3MpIHsKLSAgICAgICAgdHJhbnNhY3Rp
b24tPmFib3J0KElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3I6IGJhY2tpbmcgc3RvcmUgZXJyb3IgdXBkYXRp
bmcgaW5kZXgga2V5cy4iKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFvYmV5
c0NvbnN0cmFpbnRzKSB7Ci0gICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydChJREJEYXRhYmFzZUVy
cm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkNvbnN0cmFpbnRFcnJvciwgZXJyb3JN
ZXNzYWdlKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGluZGV4V3JpdGVycy5zaXplKCk7ICsraSkgewotICAgICAgICBJbmRleFdyaXRlciog
aW5kZXhXcml0ZXIgPSBpbmRleFdyaXRlcnNbaV0uZ2V0KCk7Ci0gICAgICAgIGluZGV4V3JpdGVy
LT53cml0ZUluZGV4S2V5cyhyZWNvcmRJZGVudGlmaWVyLCAqYmFja2luZ1N0b3JlKCksIHRyYW5z
YWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBkYXRhYmFzZUlkKCksIG1fbWV0YWRh
dGEuaWQpOwotICAgIH0KLX0KLQotdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpzZXRJ
bmRleGVzUmVhZHkoY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbkludGVyZmFjZSkKLXsKLSAgICBJREJfVFJB
Q0UoIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnNldEluZGV4ZXNSZWFkeSIpOwotCi0gICAg
T3duUHRyPFZlY3RvcjxpbnQ2NF90PiA+IG5ld0luZGV4SWRzID0gYWRvcHRQdHIobmV3IFZlY3Rv
cjxpbnQ2NF90PihpbmRleElkcykpOwotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmZyb20odHJhbnNh
Y3Rpb25JbnRlcmZhY2UpOwotICAgIGlmICh0cmFuc2FjdGlvbi0+aXNGaW5pc2hlZCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOjpQcmVlbXB0aXZlVGFzaywgT2JqZWN0U3RvcmVJbmRl
eGVzUmVhZHlPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBuZXdJbmRleElkcy5yZWxlYXNlKCkpKSkK
LSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLXZvaWQgSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6T2JqZWN0U3RvcmVJbmRleGVzUmVhZHlPcGVyYXRpb246OnBlcmZvcm0oSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24pCi17Ci0gICAgSURCX1RSQUNFKCJP
YmplY3RTdG9yZUluZGV4ZXNSZWFkeU9wZXJhdGlvbiIpOwotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV9wb3BJbmRleElkcy0+c2l6ZSgpOyArK2kpCi0gICAgICAgIHRyYW5zYWN0aW9uLT5k
aWRDb21wbGV0ZVByZWVtcHRpdmVFdmVudCgpOwotfQotCi12b2lkIElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6Ok9iamVjdFN0b3JlU3RvcmFnZU9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKLXsKLSAgICBJREJfVFJBQ0UoIk9iamVjdFN0
b3JlU3RvcmFnZU9wZXJhdGlvbiIpOwotICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpICE9
IElEQlRyYW5zYWN0aW9uOjpSRUFEX09OTFkpOwotICAgIEFTU0VSVChtX3BvcEluZGV4SWRzICYm
IG1fcG9wSW5kZXhLZXlzICYmIG1fcG9wSW5kZXhJZHMtPnNpemUoKSA9PSBtX3BvcEluZGV4S2V5
cy0+c2l6ZSgpKTsKLSAgICBjb25zdCBib29sIGF1dG9JbmNyZW1lbnQgPSBtX29iamVjdFN0b3Jl
LT5hdXRvSW5jcmVtZW50KCk7Ci0gICAgYm9vbCBrZXlXYXNHZW5lcmF0ZWQgPSBmYWxzZTsKLQot
ICAgIGlmIChtX3B1dE1vZGUgIT0gQ3Vyc29yVXBkYXRlICYmIGF1dG9JbmNyZW1lbnQgJiYgIW1f
a2V5KSB7Ci0gICAgICAgIFJlZlB0cjxJREJLZXk+IGF1dG9JbmNLZXkgPSBtX29iamVjdFN0b3Jl
LT5nZW5lcmF0ZUtleSh0cmFuc2FjdGlvbik7Ci0gICAgICAgIGtleVdhc0dlbmVyYXRlZCA9IHRy
dWU7Ci0gICAgICAgIGlmICghYXV0b0luY0tleS0+aXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICBt
X2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VF
eGNlcHRpb246OkNvbnN0cmFpbnRFcnJvciwgIk1heGltdW0ga2V5IGdlbmVyYXRvciB2YWx1ZSBy
ZWFjaGVkLiIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBtX2tl
eSA9IGF1dG9JbmNLZXk7Ci0gICAgfQotCi0gICAgQVNTRVJUKG1fa2V5ICYmIG1fa2V5LT5pc1Zh
bGlkKCkpOwotCi0gICAgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBvYmplY3RTdG9yZU1ldGFkYXRh
ID0gbV9vYmplY3RTdG9yZS0+bWV0YWRhdGEoKTsKLSAgICBJREJCYWNraW5nU3RvcmU6OlJlY29y
ZElkZW50aWZpZXIgcmVjb3JkSWRlbnRpZmllcjsKLSAgICBSZWZQdHI8SURCQmFja2luZ1N0b3Jl
PiBiYWNraW5nU3RvcmUgPSBtX29iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKTsKLSAgICBpZiAo
bV9wdXRNb2RlID09IEFkZE9ubHkpIHsKLSAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwotICAg
ICAgICBib29sIG9rID0gYmFja2luZ1N0b3JlLT5rZXlFeGlzdHNJbk9iamVjdFN0b3JlKHRyYW5z
YWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX29iamVjdFN0b3JlLT5kYXRhYmFz
ZUlkKCksIG1fb2JqZWN0U3RvcmUtPmlkKCksICptX2tleSwgJnJlY29yZElkZW50aWZpZXIsIGZv
dW5kKTsKLSAgICAgICAgaWYgKCFvaykgewotICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJy
b3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3du
RXJyb3IsICJJbnRlcm5hbCBlcnJvciBjaGVja2luZyBrZXkgZXhpc3RlbmNlLiIpKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBpZiAoZm91bmQpIHsKLSAgICAgICAg
ICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6Q29uc3RyYWludEVycm9yLCAiS2V5IGFscmVhZHkgZXhpc3RzIGluIHRo
ZSBvYmplY3Qgc3RvcmUuIikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgVmVjdG9yPE93blB0cjxJbmRleFdyaXRlcj4gPiBpbmRleFdyaXRlcnM7Ci0gICAg
U3RyaW5nIGVycm9yTWVzc2FnZTsKLSAgICBib29sIG9iZXlzQ29uc3RyYWludHMgPSBmYWxzZTsK
LSAgICBib29sIGJhY2tpbmdTdG9yZVN1Y2Nlc3MgPSBtYWtlSW5kZXhXcml0ZXJzKHRyYW5zYWN0
aW9uLCBiYWNraW5nU3RvcmUuZ2V0KCksIG1fb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgb2Jq
ZWN0U3RvcmVNZXRhZGF0YSwgbV9rZXksIGtleVdhc0dlbmVyYXRlZCwgKm1fcG9wSW5kZXhJZHMs
ICptX3BvcEluZGV4S2V5cywgJmluZGV4V3JpdGVycywgJmVycm9yTWVzc2FnZSwgb2JleXNDb25z
dHJhaW50cyk7Ci0gICAgaWYgKCFiYWNraW5nU3RvcmVTdWNjZXNzKSB7Ci0gICAgICAgIG1fY2Fs
bGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3I6IGJhY2tpbmcgc3RvcmUgZXJyb3Ig
dXBkYXRpbmcgaW5kZXgga2V5cy4iKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYg
KCFvYmV5c0NvbnN0cmFpbnRzKSB7Ci0gICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRh
dGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Q29uc3RyYWludEVycm9y
LCBlcnJvck1lc3NhZ2UpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEJlZm9y
ZSB0aGlzIHBvaW50LCBkb24ndCBkbyBhbnkgbXV0YXRpb24uICBBZnRlciB0aGlzIHBvaW50LCBy
b2xsYmFjayB0aGUgdHJhbnNhY3Rpb24gaW4gY2FzZSBvZiBlcnJvci4KLQotICAgIGJhY2tpbmdT
dG9yZVN1Y2Nlc3MgPSBtX29iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+cHV0UmVjb3JkKHRy
YW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX29iamVjdFN0b3JlLT5kYXRh
YmFzZUlkKCksIG1fb2JqZWN0U3RvcmUtPmlkKCksICptX2tleSwgbV92YWx1ZS0+dG9XaXJlQnl0
ZXMoKSwgJnJlY29yZElkZW50aWZpZXIpOwotICAgIGlmICghYmFja2luZ1N0b3JlU3VjY2Vzcykg
ewotICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUo
SURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yOiBiYWNr
aW5nIHN0b3JlIGVycm9yIHBlcmZvcm1pbmcgcHV0L2FkZC4iKSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGluZGV4V3JpdGVycy5zaXplKCk7
ICsraSkgewotICAgICAgICBJbmRleFdyaXRlciogaW5kZXhXcml0ZXIgPSBpbmRleFdyaXRlcnNb
aV0uZ2V0KCk7Ci0gICAgICAgIGluZGV4V3JpdGVyLT53cml0ZUluZGV4S2V5cyhyZWNvcmRJZGVu
dGlmaWVyLCAqbV9vYmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCksIHRyYW5zYWN0aW9uLT5iYWNr
aW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX29iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG1fb2Jq
ZWN0U3RvcmUtPm1fbWV0YWRhdGEuaWQpOwotICAgIH0KLQotICAgIGlmIChhdXRvSW5jcmVtZW50
ICYmIG1fcHV0TW9kZSAhPSBDdXJzb3JVcGRhdGUgJiYgbV9rZXktPnR5cGUoKSA9PSBJREJLZXk6
Ok51bWJlclR5cGUpIHsKLSAgICAgICAgYm9vbCBvayA9IG1fb2JqZWN0U3RvcmUtPnVwZGF0ZUtl
eUdlbmVyYXRvcih0cmFuc2FjdGlvbiwgbV9rZXkuZ2V0KCksICFrZXlXYXNHZW5lcmF0ZWQpOwot
ICAgICAgICBpZiAoIW9rKSB7Ci0gICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJE
YXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwg
IkludGVybmFsIGVycm9yIHVwZGF0aW5nIGtleSBnZW5lcmF0b3IuIikpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgbV9jYWxsYmFja3MtPm9uU3VjY2Vzcyht
X2tleS5yZWxlYXNlKCkpOwotfQotCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmRl
bGV0ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2Uq
IHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRpb25Db2RlJikKLXsKLSAgICBJREJfVFJBQ0UoIklEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6OmRlbGV0ZSIpOwotCi0gICAgUmVmUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6
ZnJvbSh0cmFuc2FjdGlvblB0cik7Ci0gICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgIT0g
SURCVHJhbnNhY3Rpb246OlJFQURfT05MWSk7Ci0gICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFz
ayhPYmplY3RTdG9yZURlbGV0aW9uT3BlcmF0aW9uOjpjcmVhdGUodGhpcywga2V5UmFuZ2UsIGNh
bGxiYWNrcykpOwotfQotCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Ok9iamVjdFN0
b3JlRGVsZXRpb25PcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCog
dHJhbnNhY3Rpb24pCi17Ci0gICAgSURCX1RSQUNFKCJPYmplY3RTdG9yZURlbGV0aW9uT3BlcmF0
aW9uIik7Ci0KLSAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGJhY2tpbmdTdG9y
ZUN1cnNvciA9IG1fb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5vcGVuT2JqZWN0U3RvcmVD
dXJzb3IodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fb2JqZWN0U3Rv
cmUtPmRhdGFiYXNlSWQoKSwgbV9vYmplY3RTdG9yZS0+aWQoKSwgbV9rZXlSYW5nZS5nZXQoKSwg
SURCQ3Vyc29yOjpORVhUKTsKLSAgICBpZiAoYmFja2luZ1N0b3JlQ3Vyc29yKSB7Ci0KLSAgICAg
ICAgZG8gewotICAgICAgICAgICAgbV9vYmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCktPmRlbGV0
ZVJlY29yZCh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9vYmplY3RT
dG9yZS0+ZGF0YWJhc2VJZCgpLCBtX29iamVjdFN0b3JlLT5pZCgpLCBiYWNraW5nU3RvcmVDdXJz
b3ItPnJlY29yZElkZW50aWZpZXIoKSk7Ci0KLSAgICAgICAgfSB3aGlsZSAoYmFja2luZ1N0b3Jl
Q3Vyc29yLT5jb250aW51ZUZ1bmN0aW9uKDApKTsKLSAgICB9Ci0KLSAgICBtX2NhbGxiYWNrcy0+
b25TdWNjZXNzKCk7Ci19Ci0KLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y2xlYXIo
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwgRXhjZXB0aW9uQ29kZSYpCi17Ci0gICAgSURCX1RS
QUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjbGVhciIpOwotCi0gICAgUmVmUHRyPElE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0gSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbDo6ZnJvbSh0cmFuc2FjdGlvblB0cik7Ci0gICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5t
b2RlKCkgIT0gSURCVHJhbnNhY3Rpb246OlJFQURfT05MWSk7Ci0gICAgdHJhbnNhY3Rpb24tPnNj
aGVkdWxlVGFzayhPYmplY3RTdG9yZUNsZWFyT3BlcmF0aW9uOjpjcmVhdGUodGhpcywgY2FsbGJh
Y2tzKSk7Ci19Ci0KLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6T2JqZWN0U3RvcmVD
bGVhck9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2Fj
dGlvbikKLXsKLSAgICBJREJfVFJBQ0UoIk9iamVjdFN0b3JlQ2xlYXJPcGVyYXRpb24iKTsKLSAg
ICBtX29iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+Y2xlYXJPYmplY3RTdG9yZSh0cmFuc2Fj
dGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9vYmplY3RTdG9yZS0+ZGF0YWJhc2VJ
ZCgpLCBtX29iamVjdFN0b3JlLT5pZCgpKTsKLSAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKCk7
Ci19Ci0KIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjpjcmVhdGVJbmRleChpbnQ2NF90IGlkLCBjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgsIGJvb2wgdW5pcXVlLCBib29sIG11bHRpRW50cnks
IElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIEV4Y2VwdGlv
bkNvZGUmIGVjKQogewogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIW1faW5kZXhlcy5jb250YWlu
cyhpZCksICJJbmRleGVzIGFscmVhZHkgY29udGFpbiAnJXMnIiwgbmFtZS51dGY4KCkuZGF0YSgp
KTsKIAotICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCA9IElEQkluZGV4QmFj
a2VuZEltcGw6OmNyZWF0ZShtX2RhdGFiYXNlLCB0aGlzLCBJREJJbmRleE1ldGFkYXRhKG5hbWUs
IGlkLCBrZXlQYXRoLCB1bmlxdWUsIG11bHRpRW50cnkpKTsKKyAgICBSZWZQdHI8SURCSW5kZXhC
YWNrZW5kSW1wbD4gaW5kZXggPSBJREJJbmRleEJhY2tlbmRJbXBsOjpjcmVhdGUobV9kYXRhYmFz
ZSwgSURCSW5kZXhNZXRhZGF0YShuYW1lLCBpZCwga2V5UGF0aCwgdW5pcXVlLCBtdWx0aUVudHJ5
KSk7CiAgICAgQVNTRVJUKGluZGV4LT5uYW1lKCkgPT0gbmFtZSk7CiAKICAgICBSZWZQdHI8SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsOjpmcm9tKHRyYW5zYWN0aW9uUHRyKTsKQEAgLTY1Miw2NSArMjcwLDEyIEBAIHZvaWQg
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6RGVsZXRlSW5kZXhPcGVyYXRpb246OnBlcmZvcm0o
SURCVHJhbnNhY3Rpb25CYWNrCiAgICAgbV9vYmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCktPmRl
bGV0ZUluZGV4KHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX29iamVj
dFN0b3JlLT5kYXRhYmFzZUlkKCksIG1fb2JqZWN0U3RvcmUtPmlkKCksIG1faW5kZXgtPmlkKCkp
OwogfQogCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Om9wZW5DdXJzb3IoUGFzc1Jl
ZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2UsIElEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVjdGlvbiwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSB0YXNrVHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwgRXhjZXB0aW9uQ29kZSYpCi17Ci0gICAgSURCX1RSQUNF
KCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29yIik7Ci0gICAgUmVmUHRyPElE
QkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOwotICAgIFJlZlB0cjxJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGw6OmZyb20odHJhbnNhY3Rpb25QdHIpOwotICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2so
T3Blbk9iamVjdFN0b3JlQ3Vyc29yT3BlcmF0aW9uOjpjcmVhdGUodGhpcywgcmFuZ2UsIGRpcmVj
dGlvbiwgY2FsbGJhY2tzLCB0YXNrVHlwZSkpOwotfQotCi12b2lkIElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6Ok9wZW5PYmplY3RTdG9yZUN1cnNvck9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKLXsKLSAgICBJREJfVFJBQ0UoIk9wZW5P
YmplY3RTdG9yZUN1cnNvciIpOwotCi0gICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29y
PiBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX29iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+b3Bl
bk9iamVjdFN0b3JlQ3Vyc29yKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigp
LCBtX29iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG1fb2JqZWN0U3RvcmUtPmlkKCksIG1fcmFu
Z2UuZ2V0KCksIG1fZGlyZWN0aW9uKTsKLSAgICAvLyBUaGUgZnJvbnRlbmQgaGFzIGJlZ3VuIGlu
ZGV4aW5nLCBzbyB0aGlzIHBhdXNlcyB0aGUgdHJhbnNhY3Rpb24KLSAgICAvLyB1bnRpbCB0aGUg
aW5kZXhpbmcgaXMgY29tcGxldGUuIFRoaXMgY2FuJ3QgaGFwcGVuIGFueSBlYXJsaWVyCi0gICAg
Ly8gYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIHN3aXRjaCB0byBlYXJseSBtb2RlIGluIGNhc2Ug
bXVsdGlwbGUKLSAgICAvLyBpbmRleGVzIGFyZSBiZWluZyBjcmVhdGVkIGluIGEgcm93LCB3aXRo
IHB1dCgpJ3MgaW4gYmV0d2Vlbi4KLSAgICBpZiAobV90YXNrVHlwZSA9PSBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2U6OlByZWVtcHRpdmVUYXNrKQotICAgICAgICB0cmFuc2FjdGlvbi0+
YWRkUHJlZW1wdGl2ZUV2ZW50KCk7Ci0gICAgaWYgKCFiYWNraW5nU3RvcmVDdXJzb3IpIHsKLSAg
ICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhzdGF0aWNfY2FzdDxTZXJpYWxpemVkU2NyaXB0
VmFsdWUqPigwKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCQ3Vy
c29yQmFja2VuZEltcGw+IGN1cnNvciA9IElEQkN1cnNvckJhY2tlbmRJbXBsOjpjcmVhdGUoYmFj
a2luZ1N0b3JlQ3Vyc29yLnJlbGVhc2UoKSwgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6S2V5
QW5kVmFsdWUsIG1fdGFza1R5cGUsIHRyYW5zYWN0aW9uLCBtX29iamVjdFN0b3JlLmdldCgpKTsK
LSAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKGN1cnNvciwgY3Vyc29yLT5rZXkoKSwgY3Vyc29y
LT5wcmltYXJ5S2V5KCksIGN1cnNvci0+dmFsdWUoKSk7Ci19Ci0KLXZvaWQgSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6Y291bnQoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2UsIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIEV4Y2VwdGlvbkNvZGUmKQotewotICAgIElEQl9UUkFD
RSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y291bnQiKTsKLSAgICBSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6
ZnJvbSh0cmFuc2FjdGlvblB0cik7Ci0gICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhPYmpl
Y3RTdG9yZUNvdW50T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgcmFuZ2UsIGNhbGxiYWNrcykpOwot
fQotCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Ok9iamVjdFN0b3JlQ291bnRPcGVy
YXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24pCi17
Ci0gICAgSURCX1RSQUNFKCJPYmplY3RTdG9yZUNvdW50T3BlcmF0aW9uIik7Ci0gICAgdWludDMy
X3QgY291bnQgPSAwOwotICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gYmFja2lu
Z1N0b3JlQ3Vyc29yID0gbV9vYmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCktPm9wZW5PYmplY3RT
dG9yZUtleUN1cnNvcih0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9v
YmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBtX29iamVjdFN0b3JlLT5pZCgpLCBtX3JhbmdlLmdl
dCgpLCBJREJDdXJzb3I6Ok5FWFQpOwotICAgIGlmICghYmFja2luZ1N0b3JlQ3Vyc29yKSB7Ci0g
ICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoY291bnQpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgZG8gewotICAgICAgICArK2NvdW50OwotICAgIH0gd2hpbGUgKGJhY2tpbmdT
dG9yZUN1cnNvci0+Y29udGludWVGdW5jdGlvbigwKSk7Ci0KLSAgICBtX2NhbGxiYWNrcy0+b25T
dWNjZXNzKGNvdW50KTsKLX0KLQogdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpsb2Fk
SW5kZXhlcygpCiB7CiAgICAgVmVjdG9yPElEQkluZGV4TWV0YWRhdGE+IGluZGV4ZXMgPSBiYWNr
aW5nU3RvcmUoKS0+Z2V0SW5kZXhlcyhkYXRhYmFzZUlkKCksIG1fbWV0YWRhdGEuaWQpOwogCiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbmRleGVzLnNpemUoKTsgKytpKQotICAgICAgICBt
X2luZGV4ZXMuc2V0KGluZGV4ZXNbaV0uaWQsIElEQkluZGV4QmFja2VuZEltcGw6OmNyZWF0ZSht
X2RhdGFiYXNlLCB0aGlzLCBpbmRleGVzW2ldKSk7CisgICAgICAgIG1faW5kZXhlcy5zZXQoaW5k
ZXhlc1tpXS5pZCwgSURCSW5kZXhCYWNrZW5kSW1wbDo6Y3JlYXRlKG1fZGF0YWJhc2UsIGluZGV4
ZXNbaV0pKTsKIH0KIAogdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpDcmVhdGVJbmRl
eEFib3J0T3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5z
YWN0aW9uKQpAQCAtNzI3LDExICsyOTIsMTEgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsOjpEZWxldGVJbmRleEFib3J0T3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW8KICAg
ICBtX29iamVjdFN0b3JlLT5tX2luZGV4ZXMuc2V0KG1faW5kZXgtPmlkKCksIG1faW5kZXgpOwog
fQogCi1QYXNzUmVmUHRyPElEQktleT4gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Z2VuZXJh
dGVLZXkoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbikK
K1Bhc3NSZWZQdHI8SURCS2V5PiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpnZW5lcmF0ZUtl
eShQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlLCBQYXNzUmVmUHRyPElE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKIHsKICAgICBjb25zdCBpbnQ2NF90IG1heEdlbmVyYXRv
clZhbHVlID0gOTAwNzE5OTI1NDc0MDk5MkxMOyAvLyBNYXhpbXVtIGludGVnZXIgc3RvcmFibGUg
YXMgRUNNQVNjcmlwdCBudW1iZXIuCiAgICAgaW50NjRfdCBjdXJyZW50TnVtYmVyOwotICAgIGJv
b2wgb2sgPSBiYWNraW5nU3RvcmUoKS0+Z2V0S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcih0cmFu
c2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgZGF0YWJhc2VJZCgpLCBpZCgpLCBj
dXJyZW50TnVtYmVyKTsKKyAgICBib29sIG9rID0gYmFja2luZ1N0b3JlLT5nZXRLZXlHZW5lcmF0
b3JDdXJyZW50TnVtYmVyKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBk
YXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBjdXJyZW50TnVtYmVyKTsKICAgICBpZiAoIW9rKSB7
CiAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGdldEtleUdlbmVyYXRvckN1cnJlbnROdW1i
ZXIiKTsKICAgICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlSW52YWxpZCgpOwpAQCAtNzQyLDEw
ICszMDcsMTAgQEAgUGFzc1JlZlB0cjxJREJLZXk+IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6
OmdlbmVyYXRlS2V5KFBhc3NSZWZQdHI8SURCVHJhbnNhY3QKICAgICByZXR1cm4gSURCS2V5Ojpj
cmVhdGVOdW1iZXIoY3VycmVudE51bWJlcik7CiB9CiAKLWJvb2wgSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6dXBkYXRlS2V5R2VuZXJhdG9yKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbD4gdHJhbnNhY3Rpb24sIGNvbnN0IElEQktleSoga2V5LCBib29sIGNoZWNrQ3VycmVu
dCkKK2Jvb2wgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6dXBkYXRlS2V5R2VuZXJhdG9yKFBh
c3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIFBhc3NSZWZQdHI8SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkqIGtleSwgYm9vbCBjaGVja0N1cnJlbnQp
CiB7CiAgICAgQVNTRVJUKGtleSAmJiBrZXktPnR5cGUoKSA9PSBJREJLZXk6Ok51bWJlclR5cGUp
OwotICAgIHJldHVybiBiYWNraW5nU3RvcmUoKS0+bWF5YmVVcGRhdGVLZXlHZW5lcmF0b3JDdXJy
ZW50TnVtYmVyKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBkYXRhYmFz
ZUlkKCksIGlkKCksIHN0YXRpY19jYXN0PGludDY0X3Q+KGZsb29yKGtleS0+bnVtYmVyKCkpKSAr
IDEsIGNoZWNrQ3VycmVudCk7CisgICAgcmV0dXJuIGJhY2tpbmdTdG9yZS0+bWF5YmVVcGRhdGVL
ZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2Fj
dGlvbigpLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBzdGF0aWNfY2FzdDxpbnQ2NF90Pihm
bG9vcihrZXktPm51bWJlcigpKSkgKyAxLCBjaGVja0N1cnJlbnQpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgKaW5kZXggZGNmNzAxOWUxYmJiZGVj
NzA4MDY5MTA0ZjRiOTBiZWU3ZDBlYWVmNy4uYjNlMmU1NTAxNmUxMzEyZjMzOTBhMDE3NmRlZTc4
MTY5YTk4MmJkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaApAQCAtNjIsMjYgKzYyLDIzIEBA
IHB1YmxpYzoKICAgICB9CiAKICAgICAvLyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UK
LSAgICB2aXJ0dWFsIHZvaWQgZ2V0KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlv
bkNvZGUmKTsKLSAgICB2aXJ0dWFsIHZvaWQgcHV0KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlw
dFZhbHVlPiwgUGFzc1JlZlB0cjxJREJLZXk+LCBQdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIGNvbnN0IFZlY3RvcjxpbnQ2
NF90PiYsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+Jik7CisgICAgdmlydHVhbCB2b2lkIGdldChQ
YXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgeyBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBwdXQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2Ny
aXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQktleT4sIFB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgY29uc3QgVmVjdG9yPGlu
dDY0X3Q+JiwgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJLZXlS
YW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhcihQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2Vw
dGlvbkNvZGUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRnVuY3Rpb24oUGFzc1JlZlB0cjxJ
REJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgeyBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsgfQogCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVy
ZmFjZT4gY3JlYXRlSW5kZXgoaW50NjRfdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJL
ZXlQYXRoJiwgYm9vbCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSwgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRJbmRl
eEtleXMoUGFzc1JlZlB0cjxJREJLZXk+IHBycFByaW1hcnlLZXksIGNvbnN0IFZlY3RvcjxpbnQ2
NF90PiYsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlKik7Ci0gICAgdmlydHVhbCB2b2lkIHNldEluZGV4ZXNSZWFkeShjb25zdCBWZWN0b3I8
aW50NjRfdD4mLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqKTsKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0SW5kZXhLZXlzKFBhc3NSZWZQdHI8SURCS2V5PiBwcnBQcmltYXJ5S2V5LCBjb25z
dCBWZWN0b3I8aW50NjRfdD4mLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYsIElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZSopIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgc2V0SW5kZXhlc1JlYWR5KGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYsIElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZSopIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KICAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBpbmRleChpbnQ2NF90
KTsKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSW5kZXgoaW50NjRfdCwgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwogCi0gICAgdmlydHVhbCB2b2lkIG9w
ZW5DdXJzb3IoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIElEQkN1cnNvcjo6RGlyZWN0aW9uLCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZTo6
VGFza1R5cGUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUm
KTsKLSAgICB2aXJ0dWFsIHZvaWQgY291bnQoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhj
ZXB0aW9uQ29kZSYpOworICAgIHZpcnR1YWwgdm9pZCBvcGVuQ3Vyc29yKFBhc3NSZWZQdHI8SURC
S2V5UmFuZ2U+LCBJREJDdXJzb3I6OkRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlLCBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgeyBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsgfQorICAgIHZpcnR1YWwgdm9pZCBjb3VudChQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBF
eGNlcHRpb25Db2RlJikgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogCiAgICAgc3RhdGljIGJv
b2wgcG9wdWxhdGVJbmRleChJREJCYWNraW5nU3RvcmUmLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPik7CiAK
LSAgICBjb25zdCBJbmRleE1hcDo6aXRlcmF0b3IgaXRlckluZGV4ZXNCZWdpbigpIHsgcmV0dXJu
IG1faW5kZXhlcy5iZWdpbigpOyB9OwotICAgIGNvbnN0IEluZGV4TWFwOjppdGVyYXRvciBpdGVy
SW5kZXhlc0VuZCgpIHsgcmV0dXJuIG1faW5kZXhlcy5lbmQoKTsgfTsKLQogICAgIElEQk9iamVj
dFN0b3JlTWV0YWRhdGEgbWV0YWRhdGEoKSBjb25zdDsKICAgICBjb25zdCBTdHJpbmcmIG5hbWUo
KSB7IHJldHVybiBtX21ldGFkYXRhLm5hbWU7IH0KICAgICBjb25zdCBJREJLZXlQYXRoJiBrZXlQ
YXRoKCkgY29uc3QgeyByZXR1cm4gbV9tZXRhZGF0YS5rZXlQYXRoOyB9CkBAIC0xMTQsMjIgKzEx
MSwxNiBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgYm9vbCBtYWtlSW5kZXhXcml0ZXJzKFBhc3NS
ZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4sIElEQkJhY2tpbmdTdG9yZSosIGludDY0
X3QgZGF0YWJhc2VJZCwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYsIFBhc3NSZWZQdHI8
SURCS2V5PiBwcmltYXJ5S2V5LCBib29sIGtleVdhc0dlbmVyYXRlZCwgY29uc3QgVmVjdG9yPGlu
dDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVy
ZmFjZTo6SW5kZXhLZXlzPiYsIFZlY3RvcjxPd25QdHI8SW5kZXhXcml0ZXI+ID4qIGluZGV4V3Jp
dGVycywgU3RyaW5nKiBlcnJvck1lc3NhZ2UsIGJvb2wmIGNvbXBsZXRlZCkgV0FSTl9VTlVTRURf
UkVUVVJOOwogCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCS2V5PiBnZW5lcmF0ZUtleShQYXNz
UmVmUHRyPElEQkJhY2tpbmdTdG9yZT4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbD4sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKTsKKyAgICBz
dGF0aWMgYm9vbCB1cGRhdGVLZXlHZW5lcmF0b3IoUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+
LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+LCBpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5KiwgYm9vbCBjaGVja0N1cnJl
bnQpOworCiBwcml2YXRlOgogICAgIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwoY29uc3QgSURC
RGF0YWJhc2VCYWNrZW5kSW1wbCosIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmKTsKIAog
ICAgIHZvaWQgbG9hZEluZGV4ZXMoKTsKLSAgICBQYXNzUmVmUHRyPElEQktleT4gZ2VuZXJhdGVL
ZXkoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7Ci0gICAgYm9vbCB1cGRh
dGVLZXlHZW5lcmF0b3IoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiwgY29u
c3QgSURCS2V5KiwgYm9vbCBjaGVja0N1cnJlbnQpOwotCi0gICAgY2xhc3MgT2JqZWN0U3RvcmVS
ZXRyaWV2YWxPcGVyYXRpb247Ci0gICAgY2xhc3MgT2JqZWN0U3RvcmVTdG9yYWdlT3BlcmF0aW9u
OwotICAgIGNsYXNzIE9iamVjdFN0b3JlSW5kZXhlc1JlYWR5T3BlcmF0aW9uOwotICAgIGNsYXNz
IE9iamVjdFN0b3JlRGVsZXRpb25PcGVyYXRpb247Ci0gICAgY2xhc3MgT2JqZWN0U3RvcmVDbGVh
ck9wZXJhdGlvbjsKKwogICAgIGNsYXNzIENyZWF0ZUluZGV4T3BlcmF0aW9uOwogICAgIGNsYXNz
IERlbGV0ZUluZGV4T3BlcmF0aW9uOwotICAgIGNsYXNzIE9wZW5PYmplY3RTdG9yZUN1cnNvck9w
ZXJhdGlvbjsKLSAgICBjbGFzcyBPYmplY3RTdG9yZUNvdW50T3BlcmF0aW9uOwogCiAgICAgLy8g
V2hlbiBhICJ2ZXJzaW9uY2hhbmdlIiB0cmFuc2FjdGlvbiBhYm9ydHMsIHRoZXNlIHJlc3RvcmUg
dGhlIGJhY2stZW5kIG9iamVjdCBoaWVyYXJjaHkuCiAgICAgY2xhc3MgQ3JlYXRlSW5kZXhBYm9y
dE9wZXJhdGlvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQlRyYW5zYWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QlRyYW5zYWN0aW9uLmNwcAppbmRleCAwNDUyNWViNjVlZTBjNWUyOGNlZGNjMDZlNzgzYzcxNWJj
ZjA4N2IzLi5hZmE0NWUyNGIwNDFlZjgyNWM2NTdhNjExOTUxNDBkMTQ1NzQxMmYxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3Bw
CkBAIC00NjMsNiArNDYzLDExIEBAIEV2ZW50VGFyZ2V0RGF0YSogSURCVHJhbnNhY3Rpb246OmVu
c3VyZUV2ZW50VGFyZ2V0RGF0YSgpCiAgICAgcmV0dXJuICZtX2V2ZW50VGFyZ2V0RGF0YTsKIH0K
IAorSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlKiBJREJUcmFuc2FjdGlvbjo6YmFja2VuZERC
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZGIoKS0+YmFja2VuZCgpOworfQorCiB9CiAKICNlbmRp
ZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5oCmluZGV4IGUxMjc1Yjg0YTk0NTc0Y2Q0Yjk5
M2M1MTBjNDgzY2JkNTcxMWRiNDcuLmRmNDFiYmIwZWY1MzM4MWMwY2UyNzFiN2RkNDU2ZmRiZjll
ZTA0MDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRy
YW5zYWN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJh
bnNhY3Rpb24uaApAQCAtNDcsNiArNDcsNyBAQCBjbGFzcyBJREJEYXRhYmFzZTsKIGNsYXNzIElE
Qk9iamVjdFN0b3JlOwogY2xhc3MgSURCT3BlbkRCUmVxdWVzdDsKIGNsYXNzIElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZTsKK2NsYXNzIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTsK
IHN0cnVjdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhOwogCiBjbGFzcyBJREJUcmFuc2FjdGlvbiA6
IHB1YmxpYyBTY3JpcHRXcmFwcGFibGUsIHB1YmxpYyBJREJUcmFuc2FjdGlvbkNhbGxiYWNrcywg
cHVibGljIEV2ZW50VGFyZ2V0LCBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0IHsKQEAgLTcxLDYgKzcy
LDggQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIG1vZGVUb1N0cmlu
ZyhNb2RlLCBFeGNlcHRpb25Db2RlJik7CiAKICAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2UqIGJhY2tlbmQoKSBjb25zdDsKKyAgICBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2Uq
IGJhY2tlbmREQigpIGNvbnN0OworCiAgICAgaW50NjRfdCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1f
aWQ7IH0KICAgICBib29sIGlzQWN0aXZlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA9PSBBY3Rp
dmU7IH0KICAgICBib29sIGlzRmluaXNoZWQoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlID09IEZp
bmlzaGVkOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmgKaW5kZXggMWUyMmI3MTcwZjI1NTU5Njhj
Mzc4OTFlYmNkZWVhOWExZWM2YzExMi4uYzc5ZGVmZjQ4ODQ4MDRmN2YzN2FmMDMyMzU0MDc4OTI3
MzkxYTNiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaApAQCAtNzcsNiArNzcsOCBAQCBwdWJs
aWM6CiAgICAgSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogYmFja2luZ1N0b3JlVHJhbnNh
Y3Rpb24oKSB7IHJldHVybiAmbV90cmFuc2FjdGlvbjsgfQogICAgIGludDY0X3QgaWQoKSBjb25z
dCB7IHJldHVybiBtX2lkOyB9CiAKKyAgICBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKiBkYXRhYmFz
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YWJhc2UuZ2V0KCk7IH0KKwogcHJpdmF0ZToKICAgICBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKGludDY0X3QgaWQsIGNvbnN0IEhhc2hTZXQ8aW50NjRf
dD4mIG9iamVjdFN0b3JlSWRzLCBJREJUcmFuc2FjdGlvbjo6TW9kZSwgSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbCopOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9X
ZWJJREJEYXRhYmFzZS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSURCRGF0
YWJhc2UuaAppbmRleCBlNjI0ZmU1OGQ4MTRjYzIzYzI2Yzc1M2YxNjc3OGE4MDc1Yjc1ODc5Li5j
MzFhNTRkMzBkMWU5MWVjYWZiYWU2Mzk3Nzk1MTc4MjMxMThkMTMxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJEYXRhYmFzZS5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklEQkRhdGFiYXNlLmgKQEAgLTg5LDcgKzg5LDcgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBvcGVuQ3Vyc29yKGxvbmcgbG9uZyB0cmFuc2FjdGlv
bklkLCBsb25nIGxvbmcgb2JqZWN0U3RvcmVJZCwgbG9uZyBsb25nIGluZGV4SWQsIGNvbnN0IFdl
YklEQktleVJhbmdlJiwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBib29sIGtleU9ubHksIFRh
c2tUeXBlLCBXZWJJREJDYWxsYmFja3MqKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsg
fQogICAgIHZpcnR1YWwgdm9pZCBjb3VudChsb25nIGxvbmcgdHJhbnNhY3Rpb25JZCwgbG9uZyBs
b25nIG9iamVjdFN0b3JlSWQsIGxvbmcgbG9uZyBpbmRleElkLCBjb25zdCBXZWJJREJLZXlSYW5n
ZSYsIFdlYklEQkNhbGxiYWNrcyopIHsgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAg
ICAgdmlydHVhbCB2b2lkIGRlbGV0ZVJhbmdlKGxvbmcgbG9uZyB0cmFuc2FjdGlvbklkLCBsb25n
IGxvbmcgb2JqZWN0U3RvcmVJZCwgY29uc3QgV2ViSURCS2V5UmFuZ2UmLCBXZWJJREJDYWxsYmFj
a3MqKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQotICAgIHZpcnR1YWwgdm9pZCBj
bGVhcihsb25nIGxvbmcgdHJhbnNhY3Rpb25JZCwgbG9uZyBsb25nIG9iamVjdFN0b3JlSWQsIFdl
YklEQkNhbGxiYWNrcyopICB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorICAgIHZp
cnR1YWwgdm9pZCBjbGVhcihsb25nIGxvbmcgdHJhbnNhY3Rpb25JZCwgbG9uZyBsb25nIG9iamVj
dFN0b3JlSWQsIFdlYklEQkNhbGxiYWNrcyopIHsgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OyB9CiAKIHByb3RlY3RlZDoKICAgICBXZWJJREJEYXRhYmFzZSgpIHsgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRGF0YWJhc2VJbXBsLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkRhdGFiYXNlSW1wbC5jcHAKaW5kZXggYjA1YzUx
N2M0MzE4YTE5NzEzZGI5NWZjYzA3ZTYxM2Q5ZTU2YmI0My4uMTM5ZDA0NzVlZDI5N2ZlMGQxNTU0
OTM1NGJkNzEyNGMxMDU5YmIyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViSURCRGF0YWJhc2VJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJJREJEYXRhYmFzZUltcGwuY3BwCkBAIC0xNjQsNyArMTY0LDcgQEAgdm9pZCBXZWJJREJE
YXRhYmFzZUltcGw6OnB1dChsb25nIGxvbmcgdHJhbnNhY3Rpb25JZCwgbG9uZyBsb25nIG9iamVj
dFN0b3JlSWQsIFcKICAgICAgICAgaW5kZXhLZXlzW2ldID0gaW5kZXhLZXlMaXN0OwogICAgIH0K
IAotICAgIFZlY3Rvcjx1aW50OF90PiB2YWx1ZUJ1ZmZlcih2YWx1ZS0+c2l6ZSgpKTsKKyAgICBW
ZWN0b3I8dWludDhfdD4gdmFsdWVCdWZmZXI7CiAgICAgdmFsdWVCdWZmZXIuYXBwZW5kKHZhbHVl
LT5kYXRhKCksIHZhbHVlLT5zaXplKCkpOwogICAgIG1fZGF0YWJhc2VCYWNrZW5kLT5wdXQodHJh
bnNhY3Rpb25JZCwgb2JqZWN0U3RvcmVJZCwgJnZhbHVlQnVmZmVyLCBrZXksIHN0YXRpY19jYXN0
PElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6UHV0TW9kZT4ocHV0TW9kZSksIElEQkNhbGxi
YWNrc1Byb3h5OjpjcmVhdGUoYWRvcHRQdHIoY2FsbGJhY2tzKSksIGluZGV4SWRzLCBpbmRleEtl
eXMpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCSW5k
ZXhJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkluZGV4SW1wbC5j
cHAKaW5kZXggOWIxZDY4Y2ZmN2Q3ZTQyYTViNzA4M2NlNWY3ZTI4MjYxOTM3Y2VmMS4uYjA4Zjg1
NGYzNWY1ODcyMmRiZjUwODgyZDM0NjQ1YWY5MjFlZDQ4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViSURCSW5kZXhJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJJREJJbmRleEltcGwuY3BwCkBAIC0zMCw2ICszMCw3IEBACiAKICNp
bmNsdWRlICJJREJDYWxsYmFja3NQcm94eS5oIgogI2luY2x1ZGUgIklEQkluZGV4LmgiCisjaW5j
bHVkZSAiSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlLmgiCiAjaW5jbHVkZSAiSURCS2V5UmFuZ2Uu
aCIKICNpbmNsdWRlICJXZWJJREJDYWxsYmFja3MuaCIKICNpbmNsdWRlICJXZWJJREJLZXkuaCIK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCRGF0YWJhc2VCYWNr
ZW5kVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lEQkRhdGFiYXNlQmFj
a2VuZFRlc3QuY3BwCmluZGV4IGVlNDg3YTFjNjIxZjE5MmEyMDY3YjQyZjMyMDEyZDMwZjA1OWE1
MjEuLjBjNWY0NThmZjM5OTY0ZDMxZWRkOGVhM2U3ZmNmYjk0YTE0N2YyYzcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCRGF0YWJhc2VCYWNrZW5kVGVzdC5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJEYXRhYmFzZUJhY2tlbmRUZXN0
LmNwcApAQCAtNjIsNyArNjIsNyBAQCBURVNUKElEQkRhdGFiYXNlQmFja2VuZFRlc3QsIEJhY2tp
bmdTdG9yZVJldGVudGlvbikKIAogICAgIGNvbnN0IGJvb2wgdW5pcXVlID0gZmFsc2U7CiAgICAg
Y29uc3QgYm9vbCBtdWx0aUVudHJ5ID0gZmFsc2U7Ci0gICAgUmVmUHRyPElEQkluZGV4QmFja2Vu
ZEltcGw+IGluZGV4ID0gSURCSW5kZXhCYWNrZW5kSW1wbDo6Y3JlYXRlKGRiLmdldCgpLCBzdG9y
ZS5nZXQoKSwgSURCSW5kZXhNZXRhZGF0YSgiaW5kZXgiLCAtMSwgSURCS2V5UGF0aCgia2V5UGF0
aCIpLCB1bmlxdWUsIG11bHRpRW50cnkpKTsKKyAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1w
bD4gaW5kZXggPSBJREJJbmRleEJhY2tlbmRJbXBsOjpjcmVhdGUoZGIuZ2V0KCksIElEQkluZGV4
TWV0YWRhdGEoImluZGV4IiwgLTEsIElEQktleVBhdGgoImtleVBhdGgiKSwgdW5pcXVlLCBtdWx0
aUVudHJ5KSk7CiAgICAgRVhQRUNUX0dUKGJhY2tpbmdTdG9yZS0+cmVmQ291bnQoKSwgMSk7CiAK
ICAgICBkYi5jbGVhcigpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGMzMDNlMGRkMjE1OWQ0ZDliZDg2OGI4MTlkMGUzMGJm
NDRhZWU3NzUuLjA2ZjM3MWNmYjBlNGZlYTYxZTY1NGIyZTQwNWY2YTE0ZjM4NzIyYmEgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwyMCBAQAorMjAxMy0wMS0wMyAgQWxlYyBGbGV0dCAgPGFsZWNmbGV0dEBjaHJv
bWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBNaWdyYXRlIGJhY2tlbmQgT2JqZWN0U3Rv
cmUgY2FsbHMgdG8gdXNlIHRyYW5zYWN0aW9uIGlkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDI3NDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYWRkaXRpb25hbCBjb3VudCgpIHRlc3RzIGZvciBt
dWx0aS1lbnRyeSBpbmRleGVzLCBub3QgcHJldmlvdXNseQorICAgICAgICBjb3ZlcmVkLgorCisg
ICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvaW5kZXgtbXVsdGllbnRyeS1leHBlY3RlZC50eHQ6
CisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvcmVzb3VyY2VzL2luZGV4LW11bHRpZW50cnku
anM6CisgICAgICAgICgudHJhbnNhY3Rpb24ub25jb21wbGV0ZSk6CisgICAgICAgICh2ZXJpZnlD
b3VudC5yZXF1ZXN0Lm9uc3VjY2Vzcy5yZXF1ZXN0Lm9uc3VjY2Vzcyk6CisgICAgICAgICh2ZXJp
ZnlDb3VudC5yZXF1ZXN0Lm9uc3VjY2Vzcyk6CisgICAgICAgICh2ZXJpZnlDb3VudCk6CisKIDIw
MTMtMDEtMDMgIFRlcnJ5IEFuZGVyc29uICA8dGRhbmRlcnNvbkBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgVW5yZXZpZXdlZCBnYXJkZW5pbmcuIE1hcmtpbmcgZmFzdC9ldmVudHMvNTA1NjYxOS5o
dG1sIGFzIGZsYWt5CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9p
bmRleC1tdWx0aWVudHJ5LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhl
ZGRiL2luZGV4LW11bHRpZW50cnktZXhwZWN0ZWQudHh0CmluZGV4IGYxZDY5NzdlN2Y4ZjMxMGIz
ZDE4MzZjOTcyYzg3Yzc2ZWM5YzdmZGQuLjljMmRlZjhiOTE3NDAzNDMyZGU2MGNlYTFlZmJhZjkw
OWY5ZWNjZDQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2luZGV4
LW11bHRpZW50cnktZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhl
ZGRiL2luZGV4LW11bHRpZW50cnktZXhwZWN0ZWQudHh0CkBAIC04Miw2ICs4MiwxMiBAQCBQQVNT
IGN1cnNvci52YWx1ZS55IGlzICJkIgogY3Vyc29yLmNvbnRpbnVlKCkKIGN1cnNvciA9IGV2ZW50
LnRhcmdldC5yZXN1bHQKIFBBU1MgZXhwZWN0ZWQubGVuZ3RoIGlzIDAKK3RyYW5zYWN0aW9uID0g
ZGIudHJhbnNhY3Rpb24oWydzdG9yZSddKQordHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoJ3N0b3Jl
JykuaW5kZXgoJ2luZGV4JykKK2luZGV4LmNvdW50KCkKK1BBU1MgZXZlbnQudGFyZ2V0LnJlc3Vs
dCBpcyA5CitpbmRleC5jb3VudCg3KQorUEFTUyBldmVudC50YXJnZXQucmVzdWx0IGlzIDEKIAog
VmVyaWZ5aW5nIHVuaXF1ZSBjb25zdHJhaW50IG9uIG11bHRpRW50cnkgaW5kZXgKIHRyYW5zYWN0
aW9uID0gZGIudHJhbnNhY3Rpb24oWydzdG9yZS11bmlxdWUnXSwgJ3JlYWR3cml0ZScpCkBAIC0x
NjIsNiArMTY4LDEyIEBAIFBBU1MgY3Vyc29yLnZhbHVlLnkgaXMgImQiCiBjdXJzb3IuY29udGlu
dWUoKQogY3Vyc29yID0gZXZlbnQudGFyZ2V0LnJlc3VsdAogUEFTUyBleHBlY3RlZC5sZW5ndGgg
aXMgMAordHJhbnNhY3Rpb24gPSBkYi50cmFuc2FjdGlvbihbJ3N0b3JlJ10pCit0cmFuc2FjdGlv
bi5vYmplY3RTdG9yZSgnc3RvcmUnKS5pbmRleCgnaW5kZXgnKQoraW5kZXguY291bnQoKQorUEFT
UyBldmVudC50YXJnZXQucmVzdWx0IGlzIDkKK2luZGV4LmNvdW50KDcpCitQQVNTIGV2ZW50LnRh
cmdldC5yZXN1bHQgaXMgMQogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNU
IENPTVBMRVRFCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9yZXNv
dXJjZXMvaW5kZXgtbXVsdGllbnRyeS5qcyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRi
L3Jlc291cmNlcy9pbmRleC1tdWx0aWVudHJ5LmpzCmluZGV4IDdkZjVmNTkyY2ZjYzNmMTU2Yjcz
NDMzODI5M2YxNmZlYTJkZWM0YzAuLmIwYjU1ZThhYmZlYjA0OGJjYjU2NWI1NGQyYWFiZjgzYjYx
MTcyMzggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3Jlc291cmNl
cy9pbmRleC1tdWx0aWVudHJ5LmpzCisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRi
L3Jlc291cmNlcy9pbmRleC1tdWx0aWVudHJ5LmpzCkBAIC00NSw3ICs0NSw3IEBAIGZ1bmN0aW9u
IHZlcmlmeUluZGV4ZXMoaW5kZXhOYW1lLCBjYWxsYmFjaykKICAgICBkZWJ1ZygiVmVyaWZ5aW5n
IGluZGV4OiAiICsgaW5kZXhOYW1lKTsKICAgICB0cmFuc2FjdGlvbiA9IGV2YWxBbmRMb2coInRy
YW5zYWN0aW9uID0gZGIudHJhbnNhY3Rpb24oWydzdG9yZSddLCAncmVhZG9ubHknKSIpOwogICAg
IHRyYW5zYWN0aW9uLm9uYWJvcnQgPSB1bmV4cGVjdGVkQWJvcnRDYWxsYmFjazsKLSAgICB0cmFu
c2FjdGlvbi5vbmNvbXBsZXRlID0gY2FsbGJhY2s7CisgICAgdHJhbnNhY3Rpb24ub25jb21wbGV0
ZSA9IGZ1bmN0aW9uKCkgeyB2ZXJpZnlDb3VudChjYWxsYmFjayk7IH07CiAKICAgICBleHBlY3Rl
ZCA9IFsKICAgICAgICAgeyBrZXk6IDEsIHByaW1hcnlLZXk6ICdmb28nLCB5OiAnYScgfSwKQEAg
LTEwNCw2ICsxMDQsMjYgQEAgZnVuY3Rpb24gdmVyaWZ5VW5pcXVlQ29uc3RyYWludCgpCiAgICAg
fTsKIH0KIAorZnVuY3Rpb24gdmVyaWZ5Q291bnQoY2FsbGJhY2spIHsKKyAgICBldmFsQW5kTG9n
KCJ0cmFuc2FjdGlvbiA9IGRiLnRyYW5zYWN0aW9uKFsnc3RvcmUnXSkiKTsKKworICAgIHRyYW5z
YWN0aW9uLm9uYWJvcnQgPSB1bmV4cGVjdGVkQWJvcnRDYWxsYmFjazsKKyAgICB0cmFuc2FjdGlv
bi5vbmNvbXBsZXRlID0gY2FsbGJhY2s7CisKKyAgICBpbmRleCA9IGV2YWxBbmRMb2coInRyYW5z
YWN0aW9uLm9iamVjdFN0b3JlKCdzdG9yZScpLmluZGV4KCdpbmRleCcpIik7CisgICAgcmVxdWVz
dCA9IGV2YWxBbmRMb2coImluZGV4LmNvdW50KCkiKTsKKyAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9
IGZ1bmN0aW9uKGV2ZW50KSB7CisKKyAgICAgICAgc2hvdWxkQmUoImV2ZW50LnRhcmdldC5yZXN1
bHQiLCAiOSIpOworCisgICAgICAgIHJlcXVlc3QgPSBldmFsQW5kTG9nKCJpbmRleC5jb3VudCg3
KSIpOworICAgICAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAg
ICAgICAgICBzaG91bGRCZSgiZXZlbnQudGFyZ2V0LnJlc3VsdCIsICIxIik7CisgICAgICAgIH07
CisgICAgfTsKKworfQorCiBmdW5jdGlvbiBjcmVhdGVJbmRleE9uU3RvcmVXaXRoRGF0YSgpCiB7
CiAgICAgZGVidWcoIiIpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>181353</attachid>
            <date>2013-01-04 12:00:12 -0800</date>
            <delta_ts>2013-01-04 14:49:36 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-102741-20130104115719.patch</filename>
            <type>text/plain</type>
            <size>115680</size>
            <attacher name="Alec Flett">alecflett</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM4NzY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmUzNWIyZTk1ZWEwYWNj
NWE5YTVlYzFhMjFkMTZhMGY3MzEyYTAxYi4uYmVmMzA4MzZkNjBiNzI2YzQzNWFmNTk0N2FkMmY5
NDlkNTNkN2RmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzMSBAQAorMjAxMy0wMS0wMyAgQWxl
YyBGbGV0dCAgPGFsZWNmbGV0dEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBN
aWdyYXRlIGJhY2tlbmQgT2JqZWN0U3RvcmUgY2FsbHMgdG8gdXNlIHRyYW5zYWN0aW9uIGlkCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDI3NDEKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGdWxseSBtaWdy
YXRlIDggY29yZSBkYXRhIGNhbGxzIChnZXQsIHB1dCwgc2V0SW5kZXhLZXlzLCBzZXRJbmRleGVz
UmVhZHksCisgICAgICAgIG9wZW5DdXJzb3IsIGNvdW50LCBkZWxldGVSYW5nZSwgYW5kIGNsZWFy
KSBpbnRvIElEQkRhdGFiYXNlQmFja2VuZEltcGwsCisgICAgICAgIGNvbWJpbmluZyBjb21tb24g
Y29kZSBmcm9tIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwgYW5kIElEQkluZGV4QmFja2VuZElt
cGwKKyAgICAgICAgaW4gb3JkZXIgdG8gc2ltcGxpZnkgdGhlIGJhY2tlbmQgaW50ZXJmYWNlLiBU
aGVzZSBjYWxscyBhcmUgbm93CisgICAgICAgIGltcGxlbWVudGVkIGluIHRlcm1zIG9mIGFuIGlu
dDY0X3QtYmFzZWQgdHJhbnNhY3Rpb25JZCByYXRoZXIgdGhhbgorICAgICAgICBhbiBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UsIHdoaWNoIHNpbXBsaWZpZXMgdGhlIG93bmVyc2hpcCBt
b2RlbAorICAgICAgICBiZXR3ZWVuIHRoZSBmcm9udGVuZCBhbmQgdGhlIGJhY2tlbmQuCisKKyAg
ICAgICAgSW4gYWRkaXRpb24sIHJlbW92ZSByZWZlcmVuY2VzIHRvIElEQk9iamVjdFN0b3JlQmFj
a2VuZCogZnJvbSBJREJJbmRleCwKKyAgICAgICAgYXMgaXQgaXMgbm8gbG9uZ2VyIG5lZWRlZC4K
KworICAgICAgICBBIGZldyBkdXBsaWNhdGUgSURCX1RSQUNFIG1ldGhvZHMgaGF2ZSBiZWVuIHJl
bW92ZWQgZnJvbSB3cmFwcGVyIG1ldGhvZHMKKyAgICAgICAgdGhhdCBjYWxsIGFub3RoZXIgbWV0
aG9kIHRoYXQgYWxyZWFkeSBoYXZlIElEQl9UUkFDRSdzLgorCisgICAgICAgIEZpbmFsbHksIElE
QkN1cnNvckJhY2tlbmRJbXBsIG5vdyBubyBsb25nZXIgaG9sZHMgb250byBhbiAKKyAgICAgICAg
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCosIHNvIGl0cyBkZXN0cnVjdGlvbiBhbmQgbWVtYmVy
IHZhcmlhYmxlcyBhcmUKKyAgICAgICAgc2ltcGxpZmllZCwgYW5kIHJlb3JkZXJlZCB0byBtYXRj
aCBwcm9wZXIgZGVzdHJ1Y3Rpb24gb3JkZXIuCisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3JC
YWNrZW5kSW1wbDo6SURCQ3Vyc29yQmFja2VuZEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SURC
Q3Vyc29yQmFja2VuZEltcGw6On5JREJDdXJzb3JCYWNrZW5kSW1wbCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJDdXJzb3JCYWNrZW5kSW1wbDo6ZGVsZXRlRnVuY3Rpb24pOgorICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmg6CisgICAgICAgIChXZWJDb3Jl
OjpJREJDdXJzb3JCYWNrZW5kSW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKElEQkN1cnNvckJhY2tl
bmRJbXBsKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5oOgorICAg
ICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6OmJhY2tlbmQpOgorICAgICAgICAoSURCRGF0YWJh
c2UpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwu
Y3BwOgorICAgICAgICAoR2V0T3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdldE9wZXJh
dGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdldE9wZXJhdGlvbjo6R2V0T3BlcmF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoUHV0T3BlcmF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlB1dE9wZXJhdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlB1
dE9wZXJhdGlvbjo6UHV0T3BlcmF0aW9uKToKKyAgICAgICAgKFNldEluZGV4ZXNSZWFkeU9wZXJh
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTZXRJbmRleGVzUmVhZHlPcGVyYXRpb246OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTZXRJbmRleGVzUmVhZHlPcGVyYXRpb246OlNldEluZGV4
ZXNSZWFkeU9wZXJhdGlvbik6CisgICAgICAgIChPcGVuQ3Vyc29yT3BlcmF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok9wZW5DdXJzb3JPcGVyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpPcGVuQ3Vyc29yT3BlcmF0aW9uOjpPcGVuQ3Vyc29yT3BlcmF0aW9uKToKKyAgICAgICAg
KENvdW50T3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvdW50T3BlcmF0aW9uOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q291bnRPcGVyYXRpb246OkNvdW50T3BlcmF0aW9uKToK
KyAgICAgICAgKERlbGV0ZVJhbmdlT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0
ZVJhbmdlT3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlUmFuZ2VP
cGVyYXRpb246OkRlbGV0ZVJhbmdlT3BlcmF0aW9uKToKKyAgICAgICAgKENsZWFyT3BlcmF0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkNsZWFyT3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6Q2xlYXJPcGVyYXRpb246OkNsZWFyT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmdldCk6CisgICAgICAgIChXZWJDb3JlOjpHZXRP
cGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5k
SW1wbDo6cHV0KToKKyAgICAgICAgKFdlYkNvcmU6OlB1dE9wZXJhdGlvbjo6cGVyZm9ybSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRJbmRleEtleXMpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6c2V0SW5kZXhlc1JlYWR5
KToKKyAgICAgICAgKFdlYkNvcmU6OlNldEluZGV4ZXNSZWFkeU9wZXJhdGlvbjo6cGVyZm9ybSk6
CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29yKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNvdW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvdW50T3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6
OkRlbGV0ZVJhbmdlT3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRh
dGFiYXNlQmFja2VuZEltcGw6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkNsZWFyT3BlcmF0
aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wZW5DdXJzb3JPcGVyYXRpb246OnBl
cmZvcm0pOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OklEQkluZGV4OjpJREJJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJJ
bmRleDo6b3BlbkN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleDo6Y291bnQpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXg6Om9wZW5LZXlDdXJzb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCSW5kZXg6OmdldCk6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleDo6Z2V0S2V5
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4OjpiYWNrZW5kREIpOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguaDoKKyAgICAgICAg
KFdlYkNvcmU6OklEQkluZGV4OjpjcmVhdGUpOgorICAgICAgICAoSURCSW5kZXgpOgorICAgICAg
ICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SURCSW5kZXhCYWNrZW5kSW1wbDo6SURCSW5kZXhCYWNrZW5kSW1wbCk6CisgICAg
ICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5oOgorICAgICAgICAo
V2ViQ29yZTo6SURCSW5kZXhCYWNrZW5kSW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQkluZGV4QmFja2VuZEltcGw6Om9wZW5DdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6SURC
SW5kZXhCYWNrZW5kSW1wbDo6Y291bnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXhCYWNr
ZW5kSW1wbDo6b3BlbktleUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleEJhY2tl
bmRJbXBsOjpnZXQpOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXhCYWNrZW5kSW1wbDo6Z2V0
S2V5KToKKyAgICAgICAgKElEQkluZGV4QmFja2VuZEltcGwpOgorICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVj
dFN0b3JlOjpnZXQpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OnB1dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6ZGVsZXRlRnVuY3Rpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmNyZWF0ZUluZGV4KToKKyAgICAgICAg
KFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjppbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJP
YmplY3RTdG9yZTo6b3BlbkN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9y
ZTo6Y291bnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmJhY2tlbmREQik6
CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaDoKKyAgICAgICAg
KFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjppZCk6CisgICAgICAgIChJREJPYmplY3RTdG9yZSk6
CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVhdGVJ
bmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpsb2Fk
SW5kZXhlcyk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpn
ZW5lcmF0ZUtleSk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
Ojp1cGRhdGVLZXlHZW5lcmF0b3IpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9i
amVjdFN0b3JlQmFja2VuZEltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6OmdldCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpwdXQpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bDo6ZGVsZXRlRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6c2V0SW5kZXhLZXlzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OnNldEluZGV4ZXNSZWFkeSk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OmNvdW50KToKKyAgICAgICAgKElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGwpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmRh
dGFiYXNlKToKKyAgICAgICAgKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwpOgorCiAyMDEzLTAx
LTAzICBBbnRvaW5lIFF1aW50ICA8Z3Jhb3V0c0BhcHBsZS5jb20+CiAKICAgICAgICAgb25sb2Fk
IGNhbGxiYWNrIGZvciA8dHJhY2s+IGVsZW1lbnQgYXR0YWNoZWQgdG8gPHZpZGVvPiBkb2VzIG5v
dCBmaXJlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGRlMDc5N2I1NmE0OGQwYTY1NjVj
YmI3NWJhZDEzMTc4YTZkNGE2MWYuLmMzZTljZjA1MDI2NDA4MzA0ZjhhZjM4Yjg1NDkzMDZkMzBh
YjBhN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTMt
MDEtMDMgIEFsZWMgRmxldHQgIDxhbGVjZmxldHRAY2hyb21pdW0ub3JnPgorCisgICAgICAgIElu
ZGV4ZWREQjogTWlncmF0ZSBiYWNrZW5kIE9iamVjdFN0b3JlIGNhbGxzIHRvIHVzZSB0cmFuc2Fj
dGlvbiBpZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTAyNzQxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
Rml4IGEgYnVnIHdoZXJlIGFuIGFycmF5IHdhcyBpbml0aWFsaXplZCB3aXRoIGEgbGFyZ2UgZW1w
dHkgYnVmZmVyLAorICAgICAgICBjbGVhbiB1cCB3aGl0ZXNwYWNlLCBhbmQgdXBkYXRlIHRvIG1h
dGNoIHNpZ25hdHVyZXMgdGhhdCBjaGFuZ2VkCisgICAgICAgIGluIFdlYkNvcmUuCisKKyAgICAg
ICAgKiBwdWJsaWMvV2ViSURCRGF0YWJhc2UuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViSURCRGF0
YWJhc2U6OmNsZWFyKToKKyAgICAgICAgKiBzcmMvV2ViSURCRGF0YWJhc2VJbXBsLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViSURCRGF0YWJhc2VJbXBsOjpwdXQpOgorICAgICAgICAqIHNyYy9X
ZWJJREJJbmRleEltcGwuY3BwOgorICAgICAgICAqIHRlc3RzL0lEQkRhdGFiYXNlQmFja2VuZFRl
c3QuY3BwOgorCiAyMDEzLTAxLTAzICBTYW1pIEt5b3N0aWxhICA8c2t5b3N0aWxAY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gUmVuYW1lIGxvdyBsYXRlbmN5IHJlbmRlcmluZyBt
b2RlIHNldHRpbmcgdG8gdnN5bmMgbm90aWZpY2F0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAKaW5kZXgg
ZGE3YWRjZjg5NTVkMDMzMmJhMjc0ZWYwNjJkNjcyODY1MTI3YjJiMy4uZmVhYjVjNWUzYTM2NDVm
MDk5NDQwMDliMDNjOWZjZDYwNGRjNmIxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcApAQCAtMTAxLDEy
ICsxMDEsMTMgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNr
czsKIH07CiAKLUlEQkN1cnNvckJhY2tlbmRJbXBsOjpJREJDdXJzb3JCYWNrZW5kSW1wbChQYXNz
UmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBjdXJzb3IsIEN1cnNvclR5cGUgY3Vyc29y
VHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSB0YXNrVHlwZSwg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24sIElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGwqIG9iamVjdFN0b3JlKQotICAgIDogbV9jdXJzb3IoY3Vyc29yKQotICAgICwgbV90
YXNrVHlwZSh0YXNrVHlwZSkKK0lEQkN1cnNvckJhY2tlbmRJbXBsOjpJREJDdXJzb3JCYWNrZW5k
SW1wbChQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBjdXJzb3IsIEN1cnNvclR5
cGUgY3Vyc29yVHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSB0
YXNrVHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24sIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCkKKyAgICA6IG1fdGFza1R5cGUodGFza1R5cGUpCiAgICAgLCBtX2N1cnNv
clR5cGUoY3Vyc29yVHlwZSkKKyAgICAsIG1fZGF0YWJhc2UodHJhbnNhY3Rpb24tPmRhdGFiYXNl
KCkpCiAgICAgLCBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQotICAgICwgbV9vYmplY3RTdG9y
ZShvYmplY3RTdG9yZSkKKyAgICAsIG1fb2JqZWN0U3RvcmVJZChvYmplY3RTdG9yZUlkKQorICAg
ICwgbV9jdXJzb3IoY3Vyc29yKQogICAgICwgbV9jbG9zZWQoZmFsc2UpCiB7CiAgICAgbV90cmFu
c2FjdGlvbi0+cmVnaXN0ZXJPcGVuQ3Vyc29yKHRoaXMpOwpAQCAtMTE1LDExICsxMTYsNiBAQCBJ
REJDdXJzb3JCYWNrZW5kSW1wbDo6SURCQ3Vyc29yQmFja2VuZEltcGwoUGFzc1JlZlB0cjxJREJC
YWNraW5nU3RvcmU6OkN1cnNvcj4gYwogSURCQ3Vyc29yQmFja2VuZEltcGw6On5JREJDdXJzb3JC
YWNrZW5kSW1wbCgpCiB7CiAgICAgbV90cmFuc2FjdGlvbi0+dW5yZWdpc3Rlck9wZW5DdXJzb3Io
dGhpcyk7Ci0gICAgLy8gT3JkZXIgaXMgaW1wb3J0YW50LCB0aGUgY3Vyc29ycyBoYXZlIHRvIGJl
IGRlc3RydWN0ZWQgYmVmb3JlIHRoZSBvYmplY3RTdG9yZS4KLSAgICBtX2N1cnNvci5jbGVhcigp
OwotICAgIG1fc2F2ZWRDdXJzb3IuY2xlYXIoKTsKLQotICAgIG1fb2JqZWN0U3RvcmUuY2xlYXIo
KTsKIH0KIAogCkBAIC0xNzAsOCArMTY2LDcgQEAgdm9pZCBJREJDdXJzb3JCYWNrZW5kSW1wbDo6
ZGVsZXRlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywKICAg
ICBSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlID0gSURCS2V5UmFuZ2U6Om9ubHkobV9jdXJz
b3ItPnByaW1hcnlLZXkoKSwgZWMpOwogICAgIEFTU0VSVCghZWMpOwogCi0gICAgbV9vYmplY3RT
dG9yZS0+ZGVsZXRlRnVuY3Rpb24oa2V5UmFuZ2UucmVsZWFzZSgpLCBwcnBDYWxsYmFja3MsIG1f
dHJhbnNhY3Rpb24uZ2V0KCksIGVjKTsKLSAgICBBU1NFUlQoIWVjKTsKKyAgICBtX2RhdGFiYXNl
LT5kZWxldGVSYW5nZShtX3RyYW5zYWN0aW9uLT5pZCgpLCBtX29iamVjdFN0b3JlSWQsIGtleVJh
bmdlLnJlbGVhc2UoKSwgcHJwQ2FsbGJhY2tzKTsKIH0KIAogdm9pZCBJREJDdXJzb3JCYWNrZW5k
SW1wbDo6cHJlZmV0Y2hDb250aW51ZShpbnQgbnVtYmVyVG9GZXRjaCwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IHBycENhbGxiYWNrcywgRXhjZXB0aW9uQ29kZSYpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuaAppbmRl
eCBiMGM3OWYyMTRmY2FjNjcyMmVjNTQ0MjNlOWQ5OWI4ZmZiNTFkNjM0Li41NjA3YjU3NjdjYjc5
NWVhZDM4ZTUxYjRkMTg4Y2ZlOGYzODhjNWY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmgKQEAgLTQ3LDEzICs0
NywxMyBAQCBjbGFzcyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOwogCiBjbGFzcyBJREJDdXJz
b3JCYWNrZW5kSW1wbCA6IHB1YmxpYyBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlIHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW1wbD4gY3JlYXRlKFBh
c3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGN1cnNvciwgQ3Vyc29yVHlwZSBjdXJz
b3JUeXBlLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbiwgSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbCogb2JqZWN0U3RvcmUpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURC
Q3Vyc29yQmFja2VuZEltcGw+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vy
c29yPiBjdXJzb3IsIEN1cnNvclR5cGUgY3Vyc29yVHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbCogdHJhbnNhY3Rpb24sIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKICAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgSURCQ3Vyc29yQmFja2VuZEltcGwoY3Vyc29yLCBjdXJzb3JU
eXBlLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U6Ok5vcm1hbFRhc2ssIHRyYW5zYWN0
aW9uLCBvYmplY3RTdG9yZSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkN1cnNv
ckJhY2tlbmRJbXBsKGN1cnNvciwgY3Vyc29yVHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlOjpOb3JtYWxUYXNrLCB0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVJZCkpOwogICAgIH0K
LSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW1wbD4gY3JlYXRlKFBhc3NS
ZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGN1cnNvciwgQ3Vyc29yVHlwZSBjdXJzb3JU
eXBlLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlIHRhc2tUeXBlLCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbiwgSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbCogb2JqZWN0U3RvcmUpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFj
a2VuZEltcGw+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBjdXJz
b3IsIEN1cnNvclR5cGUgY3Vyc29yVHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
OjpUYXNrVHlwZSB0YXNrVHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rp
b24sIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgSURCQ3Vyc29yQmFja2VuZEltcGwoY3Vyc29yLCBjdXJzb3JUeXBlLCB0YXNrVHlwZSwg
dHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
SURCQ3Vyc29yQmFja2VuZEltcGwoY3Vyc29yLCBjdXJzb3JUeXBlLCB0YXNrVHlwZSwgdHJhbnNh
Y3Rpb24sIG9iamVjdFN0b3JlSWQpKTsKICAgICB9CiAgICAgdmlydHVhbCB+SURCQ3Vyc29yQmFj
a2VuZEltcGwoKTsKIApAQCAtNzEsMTggKzcxLDIwIEBAIHB1YmxpYzoKICAgICB2b2lkIGNsb3Nl
KCk7CiAKIHByaXZhdGU6Ci0gICAgSURCQ3Vyc29yQmFja2VuZEltcGwoUGFzc1JlZlB0cjxJREJC
YWNraW5nU3RvcmU6OkN1cnNvcj4sIEN1cnNvclR5cGUsIElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZTo6VGFza1R5cGUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqLCBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsKik7CisgICAgSURCQ3Vyc29yQmFja2VuZEltcGwoUGFzc1JlZlB0cjxJ
REJCYWNraW5nU3RvcmU6OkN1cnNvcj4sIEN1cnNvclR5cGUsIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZTo6VGFza1R5cGUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQpOwogCiAgICAgY2xhc3MgQ3Vyc29ySXRlcmF0aW9uT3BlcmF0aW9uOwog
ICAgIGNsYXNzIEN1cnNvckFkdmFuY2VPcGVyYXRpb247CiAgICAgY2xhc3MgQ3Vyc29yUHJlZmV0
Y2hJdGVyYXRpb25PcGVyYXRpb247CiAKLSAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJz
b3I+IG1fY3Vyc29yOwotICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gbV9zYXZl
ZEN1cnNvcjsKICAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlIG1f
dGFza1R5cGU7CiAgICAgQ3Vyc29yVHlwZSBtX2N1cnNvclR5cGU7Ci0gICAgUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGw+IG1fdHJhbnNhY3Rpb247Ci0gICAgUmVmUHRyPElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw+IG1fb2JqZWN0U3RvcmU7CisgICAgY29uc3QgUmVmUHRyPElEQkRh
dGFiYXNlQmFja2VuZEltcGw+IG1fZGF0YWJhc2U7CisgICAgY29uc3QgUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw+IG1fdHJhbnNhY3Rpb247CisgICAgY29uc3QgaW50NjRfdCBtX29i
amVjdFN0b3JlSWQ7CisgICAgLy8gT3JkZXIgaXMgaW1wb3J0YW50LCB0aGUgY3Vyc29ycyBoYXZl
IHRvIGJlIGRlc3RydWN0ZWQgYmVmb3JlIHRoZSB0cmFuc2FjdGlvbi4KKyAgICBSZWZQdHI8SURC
QmFja2luZ1N0b3JlOjpDdXJzb3I+IG1fY3Vyc29yOworICAgIFJlZlB0cjxJREJCYWNraW5nU3Rv
cmU6OkN1cnNvcj4gbV9zYXZlZEN1cnNvcjsKIAogICAgIGJvb2wgbV9jbG9zZWQ7CiB9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmgKaW5kZXggZGRj
MTg5YTBiNDI4ZGI0OGVlZjRkYjYwNzY0ZTEyZjM2NWI1MGVkYi4uZjk5YjVlNDg2NzJkYzg1NmI3
ZGQzZjQzMTEyZTc4YjYzNjU1YzBjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJEYXRhYmFzZS5oCkBAIC0xMDMsNiArMTAzLDggQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gZmluZE9iamVjdFN0b3JlSWQobmFtZSkgIT0gSURCT2JqZWN0U3RvcmVNZXRhZGF0
YTo6SW52YWxpZElkOwogICAgIH0KIAorICAgIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZSog
YmFja2VuZCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZC5nZXQoKTsgfQorCiAgICAgc3RhdGlj
IGludDY0X3QgbmV4dFRyYW5zYWN0aW9uSWQoKTsKIAogICAgIHVzaW5nIFJlZkNvdW50ZWQ8SURC
RGF0YWJhc2U+OjpyZWY7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCmluZGV4IGNkOGFlNzc4NzMwNzY0
Mjk4YWNiZWU5ZWNjOWZmM2RmNGNjZjk3M2EuLjUzNTEzNDVlYzVkMmJlYzViNGJmNWRkZGJjOTg3
Y2RlZDBkMzBiY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCkBAIC0yOSw4ICsyOSwxMCBAQAog
I2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCiAjaW5jbHVkZSAiSURCQmFja2luZ1N0b3Jl
LmgiCisjaW5jbHVkZSAiSURCQ3Vyc29yQmFja2VuZEltcGwuaCIKICNpbmNsdWRlICJJREJEYXRh
YmFzZUV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIklEQkZhY3RvcnlCYWNrZW5kSW1wbC5oIgorI2lu
Y2x1ZGUgIklEQkluZGV4QmFja2VuZEltcGwuaCIKICNpbmNsdWRlICJJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsLmgiCiAjaW5jbHVkZSAiSURCVHJhY2luZy5oIgogI2luY2x1ZGUgIklEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGwuaCIKQEAgLTE1NCw2ICsxNTYsMTkyIEBAIHByaXZhdGU6CiAgICAg
aW50NjRfdCBtX3ByZXZpb3VzSW50VmVyc2lvbjsKIH07CiAKK2NsYXNzIEdldE9wZXJhdGlvbiA6
IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24geworcHVibGljOgor
ICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlv
bj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIGNvbnN0
IElEQkRhdGFiYXNlTWV0YWRhdGEmIG1ldGFkYXRhLCBpbnQ2NCBvYmplY3RTdG9yZUlkLCBpbnQ2
NCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgSURCQ3Vyc29yQmFj
a2VuZEludGVyZmFjZTo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4gY2FsbGJhY2tzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBHZXRP
cGVyYXRpb24oYmFja2luZ1N0b3JlLCBtZXRhZGF0YSwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwg
a2V5UmFuZ2UsIGN1cnNvclR5cGUsIGNhbGxiYWNrcykpOworICAgIH0KKworICAgIHZvaWQgcGVy
Zm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7CisKK3ByaXZhdGU6CisgICAgR2V0T3Bl
cmF0aW9uKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIGNvbnN0IElE
QkRhdGFiYXNlTWV0YWRhdGEmIG1ldGFkYXRhLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0
X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIElEQkN1cnNvckJh
Y2tlbmRJbnRlcmZhY2U6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+IGNhbGxiYWNrcykKKyAgICAgICAgOiBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUp
CisgICAgICAgICwgbV9kYXRhYmFzZUlkKG1ldGFkYXRhLmlkKQorICAgICAgICAsIG1fb2JqZWN0
U3RvcmVJZChvYmplY3RTdG9yZUlkKQorICAgICAgICAsIG1faW5kZXhJZChpbmRleElkKQorICAg
ICAgICAsIG1fa2V5UGF0aChtZXRhZGF0YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQp
LmtleVBhdGgpCisgICAgICAgICwgbV9hdXRvSW5jcmVtZW50KG1ldGFkYXRhLm9iamVjdFN0b3Jl
cy5nZXQob2JqZWN0U3RvcmVJZCkuYXV0b0luY3JlbWVudCkKKyAgICAgICAgLCBtX2tleVJhbmdl
KGtleVJhbmdlKQorICAgICAgICAsIG1fY3Vyc29yVHlwZShjdXJzb3JUeXBlKQorICAgICAgICAs
IG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKKyAgICB7CisgICAgICAgIEFTU0VSVChtZXRhZGF0YS5v
YmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpLmlkID09IG9iamVjdFN0b3JlSWQpOworICAg
IH0KKworICAgIGNvbnN0IFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IG1fYmFja2luZ1N0b3JlOwor
ICAgIGNvbnN0IGludDY0X3QgbV9kYXRhYmFzZUlkOworICAgIGNvbnN0IGludDY0X3QgbV9vYmpl
Y3RTdG9yZUlkOworICAgIGNvbnN0IGludDY0X3QgbV9pbmRleElkOworICAgIGNvbnN0IElEQktl
eVBhdGggbV9rZXlQYXRoOworICAgIGNvbnN0IGJvb2wgbV9hdXRvSW5jcmVtZW50OworICAgIGNv
bnN0IFJlZlB0cjxJREJLZXlSYW5nZT4gbV9rZXlSYW5nZTsKKyAgICBjb25zdCBJREJDdXJzb3JC
YWNrZW5kSW50ZXJmYWNlOjpDdXJzb3JUeXBlIG1fY3Vyc29yVHlwZTsKKyAgICBjb25zdCBSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKK307CisKK2NsYXNzIFB1dE9wZXJhdGlvbiA6
IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24geworcHVibGljOgor
ICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlv
bj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIGludDY0
X3QgZGF0YWJhc2VJZCwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmUs
IFZlY3Rvcjx1aW50OF90PiYgdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIElEQkRhdGFi
YXNlQmFja2VuZEludGVyZmFjZTo6UHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4gY2FsbGJhY2tzLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25zdCBW
ZWN0b3I8SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleXM+JiBpbmRleEtleXMp
CisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFB1dE9wZXJhdGlvbihiYWNraW5n
U3RvcmUsIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlLCB2YWx1ZSwga2V5LCBwdXRNb2RlLCBjYWxs
YmFja3MsIGluZGV4SWRzLCBpbmRleEtleXMpKTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIHBl
cmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOworcHJpdmF0ZToKKyAgICBQdXRPcGVy
YXRpb24oUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSwgaW50NjRfdCBk
YXRhYmFzZUlkLCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZSwgVmVj
dG9yPHVpbnQ4X3Q+JiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgSURCRGF0YWJhc2VC
YWNrZW5kSW50ZXJmYWNlOjpQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBjYWxsYmFja3MsIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMsIGNvbnN0IFZlY3Rv
cjxJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OkluZGV4S2V5cz4mIGluZGV4S2V5cykKKyAg
ICAgICAgOiBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUpCisgICAgICAgICwgbV9kYXRhYmFz
ZUlkKGRhdGFiYXNlSWQpCisgICAgICAgICwgbV9vYmplY3RTdG9yZShvYmplY3RTdG9yZSkKKyAg
ICAgICAgLCBtX2tleShrZXkpCisgICAgICAgICwgbV9wdXRNb2RlKHB1dE1vZGUpCisgICAgICAg
ICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQorICAgICAgICAsIG1faW5kZXhJZHMoaW5kZXhJZHMp
CisgICAgICAgICwgbV9pbmRleEtleXMoaW5kZXhLZXlzKQorICAgIHsKKyAgICAgICAgbV92YWx1
ZS5zd2FwKHZhbHVlKTsKKyAgICB9CisKKyAgICBjb25zdCBSZWZQdHI8SURCQmFja2luZ1N0b3Jl
PiBtX2JhY2tpbmdTdG9yZTsKKyAgICBjb25zdCBpbnQ2NF90IG1fZGF0YWJhc2VJZDsKKyAgICBj
b25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG1fb2JqZWN0U3RvcmU7CisgICAgVmVjdG9yPHVp
bnQ4X3Q+IG1fdmFsdWU7CisgICAgY29uc3QgUmVmUHRyPElEQktleT4gbV9rZXk7CisgICAgY29u
c3QgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpQdXRNb2RlIG1fcHV0TW9kZTsKKyAgICBj
b25zdCBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKKyAgICBjb25zdCBWZWN0b3I8
aW50NjRfdD4gbV9pbmRleElkczsKKyAgICBjb25zdCBWZWN0b3I8SURCRGF0YWJhc2VCYWNrZW5k
SW50ZXJmYWNlOjpJbmRleEtleXM+IG1faW5kZXhLZXlzOworfTsKKworY2xhc3MgU2V0SW5kZXhl
c1JlYWR5T3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJh
dGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbDo6T3BlcmF0aW9uPiBjcmVhdGUoc2l6ZV90IGluZGV4Q291bnQpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFNldEluZGV4ZXNSZWFkeU9wZXJhdGlvbihpbmRleENv
dW50KSk7CisgICAgfQorICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGwqKTsKK3ByaXZhdGU6CisgICAgU2V0SW5kZXhlc1JlYWR5T3BlcmF0aW9uKHNpemVf
dCBpbmRleENvdW50KQorICAgICAgICA6IG1faW5kZXhDb3VudChpbmRleENvdW50KQorICAgIHsK
KyAgICB9CisKKyAgICBjb25zdCBzaXplX3QgbV9pbmRleENvdW50OworfTsKKworY2xhc3MgT3Bl
bkN1cnNvck9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVy
YXRpb24geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBi
YWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBp
bnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCB1bnNpZ25l
ZCBzaG9ydCBkaXJlY3Rpb24sIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OkN1cnNvclR5cGUg
Y3Vyc29yVHlwZSwgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSB0YXNrVHlw
ZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKKyAgICB7CisgICAgICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgT3BlbkN1cnNvck9wZXJhdGlvbihiYWNraW5nU3RvcmUsIGRhdGFi
YXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtleVJhbmdlLCBkaXJlY3Rpb24sIGN1cnNv
clR5cGUsIHRhc2tUeXBlLCBjYWxsYmFja3MpKTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIHBl
cmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOworcHJpdmF0ZToKKyAgICBPcGVuQ3Vy
c29yT3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQs
IFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rp
b24sIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgSURC
RGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSB0YXNrVHlwZSwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+IGNhbGxiYWNrcykKKyAgICAgICAgOiBtX2JhY2tpbmdTdG9yZShiYWNraW5n
U3RvcmUpCisgICAgICAgICwgbV9kYXRhYmFzZUlkKGRhdGFiYXNlSWQpCisgICAgICAgICwgbV9v
YmplY3RTdG9yZUlkKG9iamVjdFN0b3JlSWQpCisgICAgICAgICwgbV9pbmRleElkKGluZGV4SWQp
CisgICAgICAgICwgbV9rZXlSYW5nZShrZXlSYW5nZSkKKyAgICAgICAgLCBtX2RpcmVjdGlvbihk
aXJlY3Rpb24pCisgICAgICAgICwgbV9jdXJzb3JUeXBlKGN1cnNvclR5cGUpCisgICAgICAgICwg
bV90YXNrVHlwZSh0YXNrVHlwZSkKKyAgICAgICAgLCBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCisg
ICAgeworICAgIH0KKworICAgIGNvbnN0IFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IG1fYmFja2lu
Z1N0b3JlOworICAgIGNvbnN0IGludDY0X3QgbV9kYXRhYmFzZUlkOworICAgIGNvbnN0IGludDY0
X3QgbV9vYmplY3RTdG9yZUlkOworICAgIGNvbnN0IGludDY0X3QgbV9pbmRleElkOworICAgIGNv
bnN0IFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IG1fa2V5UmFuZ2U7CisgICAgY29uc3QgdW5zaWdu
ZWQgc2hvcnQgbV9kaXJlY3Rpb247CisgICAgY29uc3QgSURCQ3Vyc29yQmFja2VuZEludGVyZmFj
ZTo6Q3Vyc29yVHlwZSBtX2N1cnNvclR5cGU7CisgICAgY29uc3QgSURCRGF0YWJhc2VCYWNrZW5k
SW50ZXJmYWNlOjpUYXNrVHlwZSBtX3Rhc2tUeXBlOworICAgIGNvbnN0IFJlZlB0cjxJREJDYWxs
YmFja3M+IG1fY2FsbGJhY2tzOworfTsKKworY2xhc3MgQ291bnRPcGVyYXRpb24gOiBwdWJsaWMg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0
ZShQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRy
PElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNr
cykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ291bnRPcGVyYXRpb24oYmFj
a2luZ1N0b3JlLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBrZXlSYW5nZSwg
Y2FsbGJhY2tzKSk7CisgICAgfQorICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGwqKTsKK3ByaXZhdGU6CisgICAgQ291bnRPcGVyYXRpb24oUGFzc1JlZlB0
cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5n
ZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCisgICAgICAg
IDogbV9iYWNraW5nU3RvcmUoYmFja2luZ1N0b3JlKQorICAgICAgICAsIG1fZGF0YWJhc2VJZChk
YXRhYmFzZUlkKQorICAgICAgICAsIG1fb2JqZWN0U3RvcmVJZChvYmplY3RTdG9yZUlkKQorICAg
ICAgICAsIG1faW5kZXhJZChpbmRleElkKQorICAgICAgICAsIG1fa2V5UmFuZ2Uoa2V5UmFuZ2Up
CisgICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQorICAgIHsKKyAgICB9CisKKyAgICBj
b25zdCBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBtX2JhY2tpbmdTdG9yZTsKKyAgICBjb25zdCBp
bnQ2NF90IG1fZGF0YWJhc2VJZDsKKyAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJZDsK
KyAgICBjb25zdCBpbnQ2NF90IG1faW5kZXhJZDsKKyAgICBjb25zdCBSZWZQdHI8SURCS2V5UmFu
Z2U+IG1fa2V5UmFuZ2U7CisgICAgY29uc3QgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFj
a3M7Cit9OworCitjbGFzcyBEZWxldGVSYW5nZU9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3du
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQ
dHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKKyAgICB7CisgICAgICAgIHJldHVybiBh
ZG9wdFB0cihuZXcgRGVsZXRlUmFuZ2VPcGVyYXRpb24oYmFja2luZ1N0b3JlLCBkYXRhYmFzZUlk
LCBvYmplY3RTdG9yZUlkLCBrZXlSYW5nZSwgY2FsbGJhY2tzKSk7CisgICAgfQorICAgIHZpcnR1
YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqKTsKK3ByaXZhdGU6Cisg
ICAgRGVsZXRlUmFuZ2VPcGVyYXRpb24oUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tp
bmdTdG9yZSwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NS
ZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzKQorICAgICAgICA6IG1fYmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKKyAgICAgICAg
LCBtX2RhdGFiYXNlSWQoZGF0YWJhc2VJZCkKKyAgICAgICAgLCBtX29iamVjdFN0b3JlSWQob2Jq
ZWN0U3RvcmVJZCkKKyAgICAgICAgLCBtX2tleVJhbmdlKGtleVJhbmdlKQorICAgICAgICAsIG1f
Y2FsbGJhY2tzKGNhbGxiYWNrcykKKyAgICB7CisgICAgfQorCisgICAgY29uc3QgUmVmUHRyPElE
QkJhY2tpbmdTdG9yZT4gbV9iYWNraW5nU3RvcmU7CisgICAgY29uc3QgaW50NjRfdCBtX2RhdGFi
YXNlSWQ7CisgICAgY29uc3QgaW50NjRfdCBtX29iamVjdFN0b3JlSWQ7CisgICAgY29uc3QgUmVm
UHRyPElEQktleVJhbmdlPiBtX2tleVJhbmdlOworICAgIGNvbnN0IFJlZlB0cjxJREJDYWxsYmFj
a3M+IG1fY2FsbGJhY2tzOworfTsKKworY2xhc3MgQ2xlYXJPcGVyYXRpb24gOiBwdWJsaWMgSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQ
YXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxi
YWNrcykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ2xlYXJPcGVyYXRpb24o
YmFja2luZ1N0b3JlLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBjYWxsYmFja3MpKTsKKyAg
ICB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCop
OworcHJpdmF0ZToKKyAgICBDbGVhck9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9y
ZT4gYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKKyAgICAgICAgOiBtX2JhY2tp
bmdTdG9yZShiYWNraW5nU3RvcmUpCisgICAgICAgICwgbV9kYXRhYmFzZUlkKGRhdGFiYXNlSWQp
CisgICAgICAgICwgbV9vYmplY3RTdG9yZUlkKG9iamVjdFN0b3JlSWQpCisgICAgICAgICwgbV9j
YWxsYmFja3MoY2FsbGJhY2tzKQorICAgIHsKKyAgICB9CisKKyAgICBjb25zdCBSZWZQdHI8SURC
QmFja2luZ1N0b3JlPiBtX2JhY2tpbmdTdG9yZTsKKyAgICBjb25zdCBpbnQ2NF90IG1fZGF0YWJh
c2VJZDsKKyAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJZDsKKyAgICBjb25zdCBSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKK307CiAKIGNsYXNzIElEQkRhdGFiYXNlQmFj
a2VuZEltcGw6OlBlbmRpbmdPcGVuQ2FsbCB7CiBwdWJsaWM6CkBAIC0zMTYsNDQgKzUwNCwzNzQg
QEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjphYm9ydChpbnQ2NF90IHRyYW5zYWN0aW9u
SWQpCiAgICAgbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpLT5hYm9ydCgpOwogfQog
Ci12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmdldChpbnQ2NF90IHRyYW5zYWN0aW9uSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktl
eVJhbmdlPiwgYm9vbCBrZXlPbmx5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pCit2b2lkIElE
QkRhdGFiYXNlQmFja2VuZEltcGw6OmdldChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBr
ZXlSYW5nZSwgYm9vbCBrZXlPbmx5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tz
KQogewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIElEQl9UUkFDRSgiSURCRGF0YWJh
c2VCYWNrZW5kSW1wbDo6Z2V0Iik7CisgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25zLmNvbnRhaW5z
KHRyYW5zYWN0aW9uSWQpKTsKKyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2Fj
dGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKKworICAgIHRyYW5zYWN0
aW9uLT5zY2hlZHVsZVRhc2soR2V0T3BlcmF0aW9uOjpjcmVhdGUobV9iYWNraW5nU3RvcmUsIG1l
dGFkYXRhKCksIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtleVJhbmdlLCBrZXlPbmx5ID8gSURC
Q3Vyc29yQmFja2VuZEludGVyZmFjZTo6S2V5T25seSA6IElEQkN1cnNvckJhY2tlbmRJbnRlcmZh
Y2U6OktleUFuZFZhbHVlLCBjYWxsYmFja3MpKTsKIH0KIAotdm9pZCBJREJEYXRhYmFzZUJhY2tl
bmRJbXBsOjpwdXQoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IFZlY3Rvcjx1aW50OF90PiogdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiwgUHV0TW9kZSwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+LCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBj
b25zdCBWZWN0b3I8SW5kZXhLZXlzPiYpCit2b2lkIEdldE9wZXJhdGlvbjo6cGVyZm9ybShJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKIHsKLSAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICBJREJfVFJBQ0UoIkdldE9wZXJhdGlvbiIpOworCisgICAgUmVmUHRyPElE
QktleT4ga2V5OworCisgICAgaWYgKG1fa2V5UmFuZ2UtPmlzT25seUtleSgpKQorICAgICAgICBr
ZXkgPSBtX2tleVJhbmdlLT5sb3dlcigpOworICAgIGVsc2UgeworICAgICAgICBSZWZQdHI8SURC
QmFja2luZ1N0b3JlOjpDdXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNvcjsKKyAgICAgICAgaWYgKG1f
aW5kZXhJZCA9PSBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQpIHsKKyAgICAgICAgICAgIEFT
U0VSVChtX2N1cnNvclR5cGUgIT0gSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6S2V5T25seSk7
CisgICAgICAgICAgICAvLyBPYmplY3RTdG9yZSBSZXRyaWV2YWwgT3BlcmF0aW9uCisgICAgICAg
ICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX2JhY2tpbmdTdG9yZS0+b3Blbk9iamVjdFN0b3Jl
Q3Vyc29yKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNl
SWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9rZXlSYW5nZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhUKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChtX2N1cnNvclR5cGUgPT0gSURCQ3Vy
c29yQmFja2VuZEludGVyZmFjZTo6S2V5T25seSkKKyAgICAgICAgICAgICAgICAvLyBJbmRleCBW
YWx1ZSBSZXRyaWV2YWwgT3BlcmF0aW9uCisgICAgICAgICAgICAgICAgYmFja2luZ1N0b3JlQ3Vy
c29yID0gbV9iYWNraW5nU3RvcmUtPm9wZW5JbmRleEtleUN1cnNvcih0cmFuc2FjdGlvbi0+YmFj
a2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIG1f
aW5kZXhJZCwgbV9rZXlSYW5nZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhUKTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAvLyBJbmRleCBSZWZlcmVuY2VkIFZhbHVlIFJldHJpZXZh
bCBPcGVyYXRpb24KKyAgICAgICAgICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX2JhY2tp
bmdTdG9yZS0+b3BlbkluZGV4Q3Vyc29yKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2Fj
dGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRleElkLCBtX2tleVJh
bmdlLmdldCgpLCBJREJDdXJzb3I6Ok5FWFQpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFi
YWNraW5nU3RvcmVDdXJzb3IpIHsKKyAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3Mo
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGtleSA9IGJhY2tp
bmdTdG9yZUN1cnNvci0+a2V5KCk7CisgICAgfQorCisgICAgUmVmUHRyPElEQktleT4gcHJpbWFy
eUtleTsKKyAgICBib29sIG9rOworICAgIGlmIChtX2luZGV4SWQgPT0gSURCSW5kZXhNZXRhZGF0
YTo6SW52YWxpZElkKSB7CisgICAgICAgIC8vIE9iamVjdCBTdG9yZSBSZXRyaWV2YWwgT3BlcmF0
aW9uCisgICAgICAgIFZlY3Rvcjx1aW50OF90PiB2YWx1ZTsKKyAgICAgICAgb2sgPSBtX2JhY2tp
bmdTdG9yZS0+Z2V0UmVjb3JkKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigp
LCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgKmtleSwgdmFsdWUpOworICAgICAgICBp
ZiAoIW9rKSB7CisgICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVy
cm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFs
IGVycm9yIGluIGdldFJlY29yZC4iKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICBpZiAodmFsdWUuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBtX2NhbGxiYWNr
cy0+b25TdWNjZXNzKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBpZiAobV9hdXRvSW5jcmVtZW50ICYmICFtX2tleVBhdGguaXNOdWxsKCkpIHsKKyAgICAgICAg
ICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVG
cm9tV2lyZUJ5dGVzKHZhbHVlKSwga2V5LCBtX2tleVBhdGgpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVk
U2NyaXB0VmFsdWU6OmNyZWF0ZUZyb21XaXJlQnl0ZXModmFsdWUpKTsKKyAgICAgICAgcmV0dXJu
OworCisgICAgfQorCisgICAgLy8gRnJvbSBoZXJlIHdlIGFyZSBkZWFsaW5nIG9ubHkgd2l0aCBp
bmRleGVzLgorICAgIG9rID0gbV9iYWNraW5nU3RvcmUtPmdldFByaW1hcnlLZXlWaWFJbmRleCh0
cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29i
amVjdFN0b3JlSWQsIG1faW5kZXhJZCwgKmtleSwgcHJpbWFyeUtleSk7CisgICAgaWYgKCFvaykg
eworICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUo
SURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yIGluIGdl
dFByaW1hcnlLZXlWaWFJbmRleC4iKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYg
KG1fY3Vyc29yVHlwZSA9PSBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpLZXlPbmx5KSB7Cisg
ICAgICAgIC8vIEluZGV4IFZhbHVlIFJldHJpZXZhbCBPcGVyYXRpb24KKyAgICAgICAgbV9jYWxs
YmFja3MtPm9uU3VjY2VzcyhwcmltYXJ5S2V5LmdldCgpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIC8vIEluZGV4IFJlZmVyZW5jZWQgVmFsdWUgUmV0cmlldmFsIE9wZXJhdGlvbgor
ICAgIFZlY3Rvcjx1aW50OF90PiB2YWx1ZTsKKyAgICBvayA9IG1fYmFja2luZ1N0b3JlLT5nZXRS
ZWNvcmQodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJ
ZCwgbV9vYmplY3RTdG9yZUlkLCAqcHJpbWFyeUtleSwgdmFsdWUpOworICAgIGlmICghb2spIHsK
KyAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvciBpbiBnZXRS
ZWNvcmQuIikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHZhbHVlLmlzRW1w
dHkoKSkgeworICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgaWYgKG1fYXV0b0luY3JlbWVudCAmJiAhbV9rZXlQYXRoLmlzTnVsbCgp
KSB7CisgICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlwdFZhbHVl
OjpjcmVhdGVGcm9tV2lyZUJ5dGVzKHZhbHVlKSwgcHJpbWFyeUtleSwgbV9rZXlQYXRoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmVCeXRlcyh2YWx1ZSkpOwogfQogCi12b2lkIElE
QkRhdGFiYXNlQmFja2VuZEltcGw6OnNldEluZGV4S2V5cyhpbnQ2NF90IHRyYW5zYWN0aW9uSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJLZXk+IHBycFByaW1hcnlLZXks
IGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+
JikKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6cHV0KGludDY0X3QgdHJhbnNhY3Rpb25J
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBWZWN0b3I8dWludDhfdD4qIHZhbHVlLCBQYXNzUmVm
UHRyPElEQktleT4ga2V5LCBQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBjYWxsYmFja3MsIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMsIGNvbnN0IFZlY3Rv
cjxJbmRleEtleXM+JiBpbmRleEtleXMpCiB7Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgSURCX1RSQUNFKCJJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpwdXQiKTsKKworICAgIEFTU0VS
VChtX3RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbklkKSk7CisgICAgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNh
Y3Rpb25JZCk7CisgICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgIT0gSURCVHJhbnNhY3Rp
b246OlJFQURfT05MWSk7CisKKyAgICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG9iamVj
dFN0b3JlTWV0YWRhdGEgPSBtZXRhZGF0YSgpLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJ
ZCk7CisKKyAgICBBU1NFUlQob2JqZWN0U3RvcmVNZXRhZGF0YS5hdXRvSW5jcmVtZW50IHx8IGtl
eS5nZXQoKSk7CisKKyAgICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKFB1dE9wZXJhdGlvbjo6
Y3JlYXRlKG1fYmFja2luZ1N0b3JlLCBpZCgpLCBvYmplY3RTdG9yZU1ldGFkYXRhLCAqdmFsdWUs
IGtleSwgcHV0TW9kZSwgY2FsbGJhY2tzLCBpbmRleElkcywgaW5kZXhLZXlzKSk7Cit9CisKK3Zv
aWQgUHV0T3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5z
YWN0aW9uKQoreworICAgIElEQl9UUkFDRSgiUHV0T3BlcmF0aW9uIik7CisgICAgQVNTRVJUKHRy
YW5zYWN0aW9uLT5tb2RlKCkgIT0gSURCVHJhbnNhY3Rpb246OlJFQURfT05MWSk7CisgICAgQVNT
RVJUKG1faW5kZXhJZHMuc2l6ZSgpID09IG1faW5kZXhLZXlzLnNpemUoKSk7CisgICAgYm9vbCBr
ZXlXYXNHZW5lcmF0ZWQgPSBmYWxzZTsKKworICAgIFJlZlB0cjxJREJLZXk+IGtleTsKKyAgICBp
ZiAobV9wdXRNb2RlICE9IElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6Q3Vyc29yVXBkYXRl
ICYmIG1fb2JqZWN0U3RvcmUuYXV0b0luY3JlbWVudCAmJiAhbV9rZXkpIHsKKyAgICAgICAgUmVm
UHRyPElEQktleT4gYXV0b0luY0tleSA9IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmdlbmVy
YXRlS2V5KG1fYmFja2luZ1N0b3JlLCB0cmFuc2FjdGlvbiwgbV9kYXRhYmFzZUlkLCBtX29iamVj
dFN0b3JlLmlkKTsKKyAgICAgICAga2V5V2FzR2VuZXJhdGVkID0gdHJ1ZTsKKyAgICAgICAgaWYg
KCFhdXRvSW5jS2V5LT5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vbkVy
cm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Q29uc3Ry
YWludEVycm9yLCAiTWF4aW11bSBrZXkgZ2VuZXJhdG9yIHZhbHVlIHJlYWNoZWQuIikpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGtleSA9IGF1dG9JbmNLZXk7Cisg
ICAgfSBlbHNlCisgICAgICAgIGtleSA9IG1fa2V5OworCisgICAgQVNTRVJUKGtleSAmJiBrZXkt
PmlzVmFsaWQoKSk7CisKKyAgICBJREJCYWNraW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXIgcmVj
b3JkSWRlbnRpZmllcjsKKyAgICBpZiAobV9wdXRNb2RlID09IElEQkRhdGFiYXNlQmFja2VuZElu
dGVyZmFjZTo6QWRkT25seSkgeworICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7CisgICAgICAg
IGJvb2wgb2sgPSBtX2JhY2tpbmdTdG9yZS0+a2V5RXhpc3RzSW5PYmplY3RTdG9yZSh0cmFuc2Fj
dGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0
b3JlLmlkLCAqa2V5LCAmcmVjb3JkSWRlbnRpZmllciwgZm91bmQpOworICAgICAgICBpZiAoIW9r
KSB7CisgICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpj
cmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9y
IGNoZWNraW5nIGtleSBleGlzdGVuY2UuIikpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIGlmIChmb3VuZCkgeworICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJy
b3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDb25zdHJh
aW50RXJyb3IsICJLZXkgYWxyZWFkeSBleGlzdHMgaW4gdGhlIG9iamVjdCBzdG9yZS4iKSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBWZWN0b3I8T3duUHRy
PElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OkluZGV4V3JpdGVyPiA+IGluZGV4V3JpdGVyczsK
KyAgICBTdHJpbmcgZXJyb3JNZXNzYWdlOworICAgIGJvb2wgb2JleXNDb25zdHJhaW50cyA9IGZh
bHNlOworICAgIGJvb2wgYmFja2luZ1N0b3JlU3VjY2VzcyA9IElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6Om1ha2VJbmRleFdyaXRlcnModHJhbnNhY3Rpb24sIG1fYmFja2luZ1N0b3JlLmdldCgp
LCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmUsIGtleSwga2V5V2FzR2VuZXJhdGVkLCBtX2lu
ZGV4SWRzLCBtX2luZGV4S2V5cywgJmluZGV4V3JpdGVycywgJmVycm9yTWVzc2FnZSwgb2JleXND
b25zdHJhaW50cyk7CisgICAgaWYgKCFiYWNraW5nU3RvcmVTdWNjZXNzKSB7CisgICAgICAgIG1f
Y2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3I6IGJhY2tpbmcgc3RvcmUgZXJy
b3IgdXBkYXRpbmcgaW5kZXgga2V5cy4iKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
aWYgKCFvYmV5c0NvbnN0cmFpbnRzKSB7CisgICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElE
QkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Q29uc3RyYWludEVy
cm9yLCBlcnJvck1lc3NhZ2UpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEJl
Zm9yZSB0aGlzIHBvaW50LCBkb24ndCBkbyBhbnkgbXV0YXRpb24uIEFmdGVyIHRoaXMgcG9pbnQs
IHJvbGxiYWNrIHRoZSB0cmFuc2FjdGlvbiBpbiBjYXNlIG9mIGVycm9yLgorICAgIGJhY2tpbmdT
dG9yZVN1Y2Nlc3MgPSBtX2JhY2tpbmdTdG9yZS0+cHV0UmVjb3JkKHRyYW5zYWN0aW9uLT5iYWNr
aW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmUuaWQsICpr
ZXksIG1fdmFsdWUsICZyZWNvcmRJZGVudGlmaWVyKTsKKyAgICBpZiAoIWJhY2tpbmdTdG9yZVN1
Y2Nlc3MpIHsKKyAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6
Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJv
cjogYmFja2luZyBzdG9yZSBlcnJvciBwZXJmb3JtaW5nIHB1dC9hZGQuIikpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbmRleFdyaXRlcnMu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6SW5kZXhX
cml0ZXIqIGluZGV4V3JpdGVyID0gaW5kZXhXcml0ZXJzW2ldLmdldCgpOworICAgICAgICBpbmRl
eFdyaXRlci0+d3JpdGVJbmRleEtleXMocmVjb3JkSWRlbnRpZmllciwgKm1fYmFja2luZ1N0b3Jl
LCB0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBt
X29iamVjdFN0b3JlLmlkKTsKKyAgICB9CisKKyAgICBpZiAobV9vYmplY3RTdG9yZS5hdXRvSW5j
cmVtZW50ICYmIG1fcHV0TW9kZSAhPSBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OkN1cnNv
clVwZGF0ZSAmJiBrZXktPnR5cGUoKSA9PSBJREJLZXk6Ok51bWJlclR5cGUpIHsKKyAgICAgICAg
Ym9vbCBvayA9IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnVwZGF0ZUtleUdlbmVyYXRvciht
X2JhY2tpbmdTdG9yZSwgdHJhbnNhY3Rpb24sIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZS5p
ZCwga2V5LmdldCgpLCAha2V5V2FzR2VuZXJhdGVkKTsKKyAgICAgICAgaWYgKCFvaykgeworICAg
ICAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvciB1cGRhdGlu
ZyBrZXkgZ2VuZXJhdG9yLiIpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
IH0KKworICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3Moa2V5LnJlbGVhc2UoKSk7Cit9CisKKwor
dm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRJbmRleEtleXMoaW50NjRfdCB0cmFuc2Fj
dGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCS2V5PiBwcnBQcmlt
YXJ5S2V5LCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25zdCBWZWN0b3I8SW5k
ZXhLZXlzPiYgaW5kZXhLZXlzKQoreworICAgIElEQl9UUkFDRSgiSURCRGF0YWJhc2VCYWNrZW5k
SW1wbDo6c2V0SW5kZXhLZXlzIik7CisgICAgaWYgKCFtX3RyYW5zYWN0aW9ucy5jb250YWlucyh0
cmFuc2FjdGlvbklkKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbCogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7
CisgICAgaWYgKHRyYW5zYWN0aW9uLT5pc0ZpbmlzaGVkKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIFJlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkgPSBwcnBQcmltYXJ5S2V5OworICAgIFJlZlB0
cjxJREJCYWNraW5nU3RvcmU+IHN0b3JlID0gYmFja2luZ1N0b3JlKCk7CisgICAgLy8gRklYTUU6
IFRoaXMgbWV0aG9kIGNvdWxkIGJlIGFzeW5jaHJvbm91cywgYnV0IHdlIG5lZWQgdG8gZXZhbHVh
dGUgaWYgaXQncyB3b3J0aCB0aGUgZXh0cmEgY29tcGxleGl0eS4KKyAgICBJREJCYWNraW5nU3Rv
cmU6OlJlY29yZElkZW50aWZpZXIgcmVjb3JkSWRlbnRpZmllcjsKKyAgICBib29sIGZvdW5kID0g
ZmFsc2U7CisgICAgYm9vbCBvayA9IHN0b3JlLT5rZXlFeGlzdHNJbk9iamVjdFN0b3JlKHRyYW5z
YWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX21ldGFkYXRhLmlkLCBvYmplY3RT
dG9yZUlkLCAqcHJpbWFyeUtleSwgJnJlY29yZElkZW50aWZpZXIsIGZvdW5kKTsKKyAgICBpZiAo
IW9rKSB7CisgICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydChJREJEYXRhYmFzZUVycm9yOjpjcmVh
dGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yIHNl
dHRpbmcgaW5kZXgga2V5cy4iKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCFm
b3VuZCkgeworICAgICAgICBSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IgPSBJREJEYXRh
YmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgU3Ry
aW5nOjpmb3JtYXQoIkludGVybmFsIGVycm9yIHNldHRpbmcgaW5kZXgga2V5cyBmb3Igb2JqZWN0
IHN0b3JlLiIpKTsKKyAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KGVycm9yLnJlbGVhc2UoKSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBWZWN0b3I8T3duUHRyPElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OkluZGV4V3JpdGVyPiA+IGluZGV4V3JpdGVyczsKKyAgICBTdHJpbmcg
ZXJyb3JNZXNzYWdlOworICAgIGJvb2wgb2JleXNDb25zdHJhaW50cyA9IGZhbHNlOworICAgIEFT
U0VSVChtZXRhZGF0YSgpLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlkKSk7Cisg
ICAgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSA9IG1l
dGFkYXRhKCkub2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlkKTsKKyAgICBib29sIGJhY2tp
bmdTdG9yZVN1Y2Nlc3MgPSBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjptYWtlSW5kZXhXcml0
ZXJzKHRyYW5zYWN0aW9uLCBzdG9yZS5nZXQoKSwgaWQoKSwgb2JqZWN0U3RvcmVNZXRhZGF0YSwg
cHJpbWFyeUtleSwgZmFsc2UsIGluZGV4SWRzLCBpbmRleEtleXMsICZpbmRleFdyaXRlcnMsICZl
cnJvck1lc3NhZ2UsIG9iZXlzQ29uc3RyYWludHMpOworICAgIGlmICghYmFja2luZ1N0b3JlU3Vj
Y2VzcykgeworICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoSURCRGF0YWJhc2VFcnJvcjo6Y3Jl
YXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvcjog
YmFja2luZyBzdG9yZSBlcnJvciB1cGRhdGluZyBpbmRleCBrZXlzLiIpKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBpZiAoIW9iZXlzQ29uc3RyYWludHMpIHsKKyAgICAgICAgdHJhbnNh
Y3Rpb24tPmFib3J0KElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6Q29uc3RyYWludEVycm9yLCBlcnJvck1lc3NhZ2UpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5kZXhXcml0ZXJzLnNpemUoKTsgKytp
KSB7CisgICAgICAgIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OkluZGV4V3JpdGVyKiBpbmRl
eFdyaXRlciA9IGluZGV4V3JpdGVyc1tpXS5nZXQoKTsKKyAgICAgICAgaW5kZXhXcml0ZXItPndy
aXRlSW5kZXhLZXlzKHJlY29yZElkZW50aWZpZXIsICpzdG9yZS5nZXQoKSwgdHJhbnNhY3Rpb24t
PmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIGlkKCksIG9iamVjdFN0b3JlSWQpOworICAgIH0K
IH0KIAogdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRJbmRleGVzUmVhZHkoaW50NjRf
dCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFZlY3RvcjxpbnQ2
NF90PiYgaW5kZXhJZHMpCiB7Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgSURCX1RS
QUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpzZXRJbmRleGVzUmVhZHkiKTsKKworICAg
IGlmICghbV90cmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb25JZCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uID0gbV90
cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOworICAgIGlmICh0cmFuc2FjdGlvbi0+aXNG
aW5pc2hlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hl
ZHVsZVRhc2soSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOjpQcmVlbXB0aXZlVGFzaywg
U2V0SW5kZXhlc1JlYWR5T3BlcmF0aW9uOjpjcmVhdGUoaW5kZXhJZHMuc2l6ZSgpKSkpCisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIFNldEluZGV4ZXNSZWFkeU9wZXJh
dGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKK3sK
KyAgICBJREJfVFJBQ0UoIlNldEluZGV4ZXNSZWFkeU9wZXJhdGlvbiIpOworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9pbmRleENvdW50OyArK2kpCisgICAgICAgIHRyYW5zYWN0aW9uLT5k
aWRDb21wbGV0ZVByZWVtcHRpdmVFdmVudCgpOwogfQogCiB2b2lkIElEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6Om9wZW5DdXJzb3IoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2Us
IHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgYm9vbCBrZXlPbmx5LCBUYXNrVHlwZSB0YXNrVHlw
ZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKIHsKLSAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICBJREJfVFJBQ0UoIklEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9wZW5D
dXJzb3IiKTsKKyAgICBBU1NFUlQobV90cmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb25J
ZCkpOworICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uID0gbV90cmFu
c2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOworCisgICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxl
VGFzayhPcGVuQ3Vyc29yT3BlcmF0aW9uOjpjcmVhdGUobV9iYWNraW5nU3RvcmUsIGlkKCksIG9i
amVjdFN0b3JlSWQsIGluZGV4SWQsIGtleVJhbmdlLCBkaXJlY3Rpb24sIGtleU9ubHkgPyBJREJD
dXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpLZXlPbmx5IDogSURCQ3Vyc29yQmFja2VuZEludGVyZmFj
ZTo6S2V5QW5kVmFsdWUsIHRhc2tUeXBlLCBjYWxsYmFja3MpKTsKIH0KIAotdm9pZCBJREJEYXRh
YmFzZUJhY2tlbmRJbXBsOjpjb3VudChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+KQordm9pZCBPcGVuQ3Vyc29yT3BlcmF0aW9uOjpwZXJmb3Jt
KElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQogewotICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIElEQl9UUkFDRSgiT3BlbkN1cnNvck9wZXJhdGlvbiIpOworCisg
ICAgLy8gVGhlIGZyb250ZW5kIGhhcyBiZWd1biBpbmRleGluZywgc28gdGhpcyBwYXVzZXMgdGhl
IHRyYW5zYWN0aW9uCisgICAgLy8gdW50aWwgdGhlIGluZGV4aW5nIGlzIGNvbXBsZXRlLiBUaGlz
IGNhbid0IGhhcHBlbiBhbnkgZWFybGllcgorICAgIC8vIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0
byBzd2l0Y2ggdG8gZWFybHkgbW9kZSBpbiBjYXNlIG11bHRpcGxlCisgICAgLy8gaW5kZXhlcyBh
cmUgYmVpbmcgY3JlYXRlZCBpbiBhIHJvdywgd2l0aCBwdXQoKSdzIGluIGJldHdlZW4uCisgICAg
aWYgKG1fdGFza1R5cGUgPT0gSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpQcmVlbXB0aXZl
VGFzaykKKyAgICAgICAgdHJhbnNhY3Rpb24tPmFkZFByZWVtcHRpdmVFdmVudCgpOworCisgICAg
SURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uID0gc3RhdGljX2Nhc3Q8SURCQ3Vyc29yOjpE
aXJlY3Rpb24+KG1fZGlyZWN0aW9uKTsKKyAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJz
b3I+IGJhY2tpbmdTdG9yZUN1cnNvcjsKKyAgICBpZiAobV9pbmRleElkID09IElEQkluZGV4TWV0
YWRhdGE6OkludmFsaWRJZCkgeworICAgICAgICBBU1NFUlQobV9jdXJzb3JUeXBlICE9IElEQkN1
cnNvckJhY2tlbmRJbnRlcmZhY2U6OktleU9ubHkpOworICAgICAgICBiYWNraW5nU3RvcmVDdXJz
b3IgPSBtX2JhY2tpbmdTdG9yZS0+b3Blbk9iamVjdFN0b3JlQ3Vyc29yKHRyYW5zYWN0aW9uLT5i
YWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwg
bV9rZXlSYW5nZS5nZXQoKSwgZGlyZWN0aW9uKTsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NF
UlQobV90YXNrVHlwZSA9PSBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6Ok5vcm1hbFRhc2sp
OworICAgICAgICBpZiAobV9jdXJzb3JUeXBlID09IElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6
OktleU9ubHkpCisgICAgICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX2JhY2tpbmdTdG9y
ZS0+b3BlbkluZGV4S2V5Q3Vyc29yKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlv
bigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRleElkLCBtX2tleVJhbmdl
LmdldCgpLCBkaXJlY3Rpb24pOworICAgICAgICBlbHNlCisgICAgICAgICAgICBiYWNraW5nU3Rv
cmVDdXJzb3IgPSBtX2JhY2tpbmdTdG9yZS0+b3BlbkluZGV4Q3Vyc29yKHRyYW5zYWN0aW9uLT5i
YWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwg
bV9pbmRleElkLCBtX2tleVJhbmdlLmdldCgpLCBkaXJlY3Rpb24pOworICAgIH0KKworICAgIGlm
ICghYmFja2luZ1N0b3JlQ3Vyc29yKSB7CisgICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3Mo
c3RhdGljX2Nhc3Q8U2VyaWFsaXplZFNjcmlwdFZhbHVlKj4oMCkpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSB0
YXNrVHlwZShzdGF0aWNfY2FzdDxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U6OlRhc2tU
eXBlPihtX3Rhc2tUeXBlKSk7CisgICAgUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbXBsPiBjdXJz
b3IgPSBJREJDdXJzb3JCYWNrZW5kSW1wbDo6Y3JlYXRlKGJhY2tpbmdTdG9yZUN1cnNvci5nZXQo
KSwgbV9jdXJzb3JUeXBlLCB0YXNrVHlwZSwgdHJhbnNhY3Rpb24sIG1fb2JqZWN0U3RvcmVJZCk7
CisgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhjdXJzb3IsIGN1cnNvci0+a2V5KCksIGN1cnNv
ci0+cHJpbWFyeUtleSgpLCBjdXJzb3ItPnZhbHVlKCkpOwogfQogCi12b2lkIElEQkRhdGFiYXNl
QmFja2VuZEltcGw6OmRlbGV0ZVJhbmdlKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+KQordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjb3VudChpbnQ2NF90IHRyYW5z
YWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVm
UHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxi
YWNrcykKIHsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBJREJfVFJBQ0UoIklEQkRh
dGFiYXNlQmFja2VuZEltcGw6OmNvdW50Iik7CisgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25zLmNv
bnRhaW5zKHRyYW5zYWN0aW9uSWQpKTsKKyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0
cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKKyAgICBBU1NF
UlQobWV0YWRhdGEoKS5vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmVJZCkpOworICAg
IHRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soQ291bnRPcGVyYXRpb246OmNyZWF0ZShtX2JhY2tp
bmdTdG9yZSwgaWQoKSwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5UmFuZ2UsIGNhbGxiYWNr
cykpOwogfQogCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNsZWFyKGludDY0X3QgdHJh
bnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4pCit2b2lkIENvdW50T3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGwqIHRyYW5zYWN0aW9uKQogewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIElEQl9U
UkFDRSgiQ291bnRPcGVyYXRpb24iKTsKKyAgICB1aW50MzJfdCBjb3VudCA9IDA7CisgICAgUmVm
UHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJzb3I7CisKKyAgICBp
ZiAobV9pbmRleElkID09IElEQkluZGV4TWV0YWRhdGE6OkludmFsaWRJZCkKKyAgICAgICAgYmFj
a2luZ1N0b3JlQ3Vyc29yID0gbV9iYWNraW5nU3RvcmUtPm9wZW5PYmplY3RTdG9yZUtleUN1cnNv
cih0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBt
X29iamVjdFN0b3JlSWQsIG1fa2V5UmFuZ2UuZ2V0KCksIElEQkN1cnNvcjo6TkVYVCk7CisgICAg
ZWxzZQorICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX2JhY2tpbmdTdG9yZS0+b3Blbklu
ZGV4S2V5Q3Vyc29yKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2Rh
dGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRleElkLCBtX2tleVJhbmdlLmdldCgpLCBJ
REJDdXJzb3I6Ok5FWFQpOworICAgIGlmICghYmFja2luZ1N0b3JlQ3Vyc29yKSB7CisgICAgICAg
IG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoY291bnQpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgZG8geworICAgICAgICArK2NvdW50OworICAgIH0gd2hpbGUgKGJhY2tpbmdTdG9yZUN1
cnNvci0+Y29udGludWVGdW5jdGlvbigwKSk7CisKKyAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNz
KGNvdW50KTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpkZWxldGVSYW5nZShp
bnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJ
REJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3Mp
Cit7CisgICAgSURCX1RSQUNFKCJJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpkZWxldGVSYW5nZSIp
OworCisgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uSWQpKTsK
KyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rp
b25zLmdldCh0cmFuc2FjdGlvbklkKTsKKyAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1vZGUoKSAh
PSBJREJUcmFuc2FjdGlvbjo6UkVBRF9PTkxZKTsKKworICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVs
ZVRhc2soRGVsZXRlUmFuZ2VPcGVyYXRpb246OmNyZWF0ZShtX2JhY2tpbmdTdG9yZSwgaWQoKSwg
b2JqZWN0U3RvcmVJZCwga2V5UmFuZ2UsIGNhbGxiYWNrcykpOworfQorCit2b2lkIERlbGV0ZVJh
bmdlT3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0
aW9uKQoreworICAgIElEQl9UUkFDRSgiRGVsZXRlUmFuZ2VPcGVyYXRpb24iKTsKKworICAgIFJl
ZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gYmFja2luZ1N0b3JlQ3Vyc29yID0gbV9iYWNr
aW5nU3RvcmUtPm9wZW5PYmplY3RTdG9yZUN1cnNvcih0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3Jl
VHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIG1fa2V5UmFuZ2Uu
Z2V0KCksIElEQkN1cnNvcjo6TkVYVCk7CisgICAgaWYgKGJhY2tpbmdTdG9yZUN1cnNvcikgewor
ICAgICAgICBkbyB7CisgICAgICAgICAgICBtX2JhY2tpbmdTdG9yZS0+ZGVsZXRlUmVjb3JkKHRy
YW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2Jq
ZWN0U3RvcmVJZCwgYmFja2luZ1N0b3JlQ3Vyc29yLT5yZWNvcmRJZGVudGlmaWVyKCkpOworICAg
ICAgICB9IHdoaWxlIChiYWNraW5nU3RvcmVDdXJzb3ItPmNvbnRpbnVlRnVuY3Rpb24oMCkpOwor
ICAgIH0KKworICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoKTsKK30KKwordm9pZCBJREJEYXRh
YmFzZUJhY2tlbmRJbXBsOjpjbGVhcihpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKK3sKKyAgICBJ
REJfVFJBQ0UoIklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNsZWFyIik7CisKKyAgICBBU1NFUlQo
bV90cmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb25JZCkpOworICAgIElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0
aW9uSWQpOworICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpICE9IElEQlRyYW5zYWN0aW9u
OjpSRUFEX09OTFkpOworCisgICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhDbGVhck9wZXJh
dGlvbjo6Y3JlYXRlKG1fYmFja2luZ1N0b3JlLCBpZCgpLCBvYmplY3RTdG9yZUlkLCBjYWxsYmFj
a3MpKTsKK30KKwordm9pZCBDbGVhck9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKK3sKKyAgICBJREJfVFJBQ0UoIk9iamVjdFN0b3JlQ2xl
YXJPcGVyYXRpb24iKTsKKyAgICBtX2JhY2tpbmdTdG9yZS0+Y2xlYXJPYmplY3RTdG9yZSh0cmFu
c2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVj
dFN0b3JlSWQpOworICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoKTsKIH0KIAogdm9pZCBJREJE
YXRhYmFzZUJhY2tlbmRJbXBsOjpEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6cGVyZm9ybShJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmNwcAppbmRleCA3NjI2NDg4ZWEwZmQzZTcwZDc0
NjQ0NDJmMmVjODVkN2E0ZjU5YjAwLi5hOGMxOTYwNjAzYTYwZTJmYjhiYzk2ZTQ2MjAzMGFiOGVj
OTkxM2QxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJ
bmRleC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXgu
Y3BwCkBAIC00MywxNiArNDMsMTUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgY29u
c3QgdW5zaWduZWQgc2hvcnQgZGVmYXVsdERpcmVjdGlvbiA9IElEQkN1cnNvcjo6TkVYVDsKIAot
SURCSW5kZXg6OklEQkluZGV4KGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIG1ldGFkYXRhLCBQYXNz
UmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gYmFja2VuZCwgSURCT2JqZWN0U3RvcmUq
IG9iamVjdFN0b3JlLCBJREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCitJREJJbmRleDo6SURC
SW5kZXgoY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgbWV0YWRhdGEsIElEQk9iamVjdFN0b3JlKiBv
YmplY3RTdG9yZSwgSURCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQogICAgIDogbV9tZXRhZGF0
YShtZXRhZGF0YSkKLSAgICAsIG1fYmFja2VuZChiYWNrZW5kKQogICAgICwgbV9vYmplY3RTdG9y
ZShvYmplY3RTdG9yZSkKICAgICAsIG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCiAgICAgLCBt
X2RlbGV0ZWQoZmFsc2UpCiB7Ci0gICAgQVNTRVJUKG1fYmFja2VuZCk7CiAgICAgQVNTRVJUKG1f
b2JqZWN0U3RvcmUpOwogICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uKTsKKyAgICBBU1NFUlQobV9t
ZXRhZGF0YS5pZCAhPSBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQpOwogfQogCiBJREJJbmRl
eDo6fklEQkluZGV4KCkKQEAgLTc2LDggKzc1LDcgQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJ
REJJbmRleDo6b3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXMK
IAogICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNv
bnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKICAgICBy
ZXF1ZXN0LT5zZXRDdXJzb3JEZXRhaWxzKElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OktleUFu
ZFZhbHVlLCBkaXJlY3Rpb24pOwotICAgIG1fYmFja2VuZC0+b3BlbkN1cnNvcihrZXlSYW5nZSwg
ZGlyZWN0aW9uLCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKLSAgICBB
U1NFUlQoIWVjKTsKKyAgICBiYWNrZW5kREIoKS0+b3BlbkN1cnNvcihtX3RyYW5zYWN0aW9uLT5p
ZCgpLCBtX29iamVjdFN0b3JlLT5pZCgpLCBtX21ldGFkYXRhLmlkLCBrZXlSYW5nZSwgZGlyZWN0
aW9uLCBmYWxzZSwgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpOb3JtYWxUYXNrLCByZXF1
ZXN0KTsKICAgICByZXR1cm4gcmVxdWVzdDsKIH0KIApAQCAtMTAyLDggKzEwMCw4IEBAIFBhc3NS
ZWZQdHI8SURCUmVxdWVzdD4gSURCSW5kZXg6OmNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQsIFBhc3NSZWZQCiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBSZWZQdHI8
SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6
OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7Ci0gICAgbV9iYWNrZW5kLT5jb3Vu
dChrZXlSYW5nZSwgcmVxdWVzdCwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7Ci0gICAg
QVNTRVJUKCFlYyk7CisgICAgSURCRGF0YWJhc2VNZXRhZGF0YSBtZXRhZGF0YShtX3RyYW5zYWN0
aW9uLT5kYigpLT5tZXRhZGF0YSgpKTsKKyAgICBiYWNrZW5kREIoKS0+Y291bnQobV90cmFuc2Fj
dGlvbi0+aWQoKSwgbV9vYmplY3RTdG9yZS0+aWQoKSwgbV9tZXRhZGF0YS5pZCwga2V5UmFuZ2Us
IHJlcXVlc3QpOwogICAgIHJldHVybiByZXF1ZXN0OwogfQogCkBAIC0xMzMsOCArMTMxLDcgQEAg
UGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJJbmRleDo6b3BlbktleUN1cnNvcihTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0LAogCiAgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3Qg
PSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIG1fdHJh
bnNhY3Rpb24uZ2V0KCkpOwogICAgIHJlcXVlc3QtPnNldEN1cnNvckRldGFpbHMoSURCQ3Vyc29y
QmFja2VuZEludGVyZmFjZTo6S2V5T25seSwgZGlyZWN0aW9uKTsKLSAgICBtX2JhY2tlbmQtPm9w
ZW5LZXlDdXJzb3Ioa2V5UmFuZ2UsIGRpcmVjdGlvbiwgcmVxdWVzdCwgbV90cmFuc2FjdGlvbi0+
YmFja2VuZCgpLCBlYyk7Ci0gICAgQVNTRVJUKCFlYyk7CisgICAgYmFja2VuZERCKCktPm9wZW5D
dXJzb3IobV90cmFuc2FjdGlvbi0+aWQoKSwgbV9vYmplY3RTdG9yZS0+aWQoKSwgbV9tZXRhZGF0
YS5pZCwga2V5UmFuZ2UsIGRpcmVjdGlvbiwgdHJ1ZSwgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJm
YWNlOjpOb3JtYWxUYXNrLCByZXF1ZXN0KTsKICAgICByZXR1cm4gcmVxdWVzdDsKIH0KIApAQCAt
MTczLDggKzE3MCw3IEBAIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCSW5kZXg6OmdldChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyCiAgICAgfQogCiAgICAgUmVm
UHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURC
QW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwotICAgIG1fYmFja2VuZC0+
Z2V0KGtleVJhbmdlLCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKLSAg
ICBBU1NFUlQoIWVjKTsKKyAgICBiYWNrZW5kREIoKS0+Z2V0KG1fdHJhbnNhY3Rpb24tPmlkKCks
IG1fb2JqZWN0U3RvcmUtPmlkKCksIG1fbWV0YWRhdGEuaWQsIGtleVJhbmdlLCBmYWxzZSwgcmVx
dWVzdCk7CiAgICAgcmV0dXJuIHJlcXVlc3Q7CiB9CiAKQEAgLTIwNSwxMSArMjAxLDE1IEBAIFBh
c3NSZWZQdHI8SURCUmVxdWVzdD4gSURCSW5kZXg6OmdldEtleShTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0LCBQYXNzUmVmCiAgICAgfQogCiAgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJl
cXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyks
IG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwotICAgIG1fYmFja2VuZC0+Z2V0S2V5KGtleVJhbmdlLCBy
ZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKLSAgICBBU1NFUlQoIWVjKTsK
KyAgICBiYWNrZW5kREIoKS0+Z2V0KG1fdHJhbnNhY3Rpb24tPmlkKCksIG1fb2JqZWN0U3RvcmUt
PmlkKCksIG1fbWV0YWRhdGEuaWQsIGtleVJhbmdlLCB0cnVlLCByZXF1ZXN0KTsKICAgICByZXR1
cm4gcmVxdWVzdDsKIH0KIAorSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlKiBJREJJbmRleDo6
YmFja2VuZERCKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90cmFuc2FjdGlvbi0+YmFja2VuZERC
KCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCSW5kZXguaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4
LmgKaW5kZXggY2Y0ZjFjZjMzYzg0MTEyZjk1ZTQwOThmMjE2ODMwNDYyNTIzMTBhMy4uMzA3MmYx
NWI5ODEyMmY4MWQ0NDRkNDk1MWQyOTIwN2I3MmVlODZlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5oCkBAIC0yNyw3ICsyNyw3IEBACiAjZGVmaW5lIElE
QkluZGV4X2gKIAogI2luY2x1ZGUgIklEQkN1cnNvci5oIgotI2luY2x1ZGUgIklEQkluZGV4QmFj
a2VuZEludGVyZmFjZS5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiSURC
S2V5UGF0aC5oIgogI2luY2x1ZGUgIklEQktleVJhbmdlLmgiCiAjaW5jbHVkZSAiSURCTWV0YWRh
dGEuaCIKQEAgLTQ1LDkgKzQ1LDkgQEAgY2xhc3MgSURCT2JqZWN0U3RvcmU7CiAKIGNsYXNzIElE
QkluZGV4IDogcHVibGljIFNjcmlwdFdyYXBwYWJsZSwgcHVibGljIFJlZkNvdW50ZWQ8SURCSW5k
ZXg+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJJbmRleD4gY3JlYXRlKGNv
bnN0IElEQkluZGV4TWV0YWRhdGEmIG1ldGFkYXRhLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2Vu
ZEludGVyZmFjZT4gYmFja2VuZCwgSURCT2JqZWN0U3RvcmUqIG9iamVjdFN0b3JlLCBJREJUcmFu
c2FjdGlvbiogdHJhbnNhY3Rpb24pCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCSW5kZXg+IGNy
ZWF0ZShjb25zdCBJREJJbmRleE1ldGFkYXRhJiBtZXRhZGF0YSwgSURCT2JqZWN0U3RvcmUqIG9i
amVjdFN0b3JlLCBJREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCiAgICAgewotICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IElEQkluZGV4KG1ldGFkYXRhLCBiYWNrZW5kLCBvYmplY3RTdG9y
ZSwgdHJhbnNhY3Rpb24pKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJJbmRleCht
ZXRhZGF0YSwgb2JqZWN0U3RvcmUsIHRyYW5zYWN0aW9uKSk7CiAgICAgfQogICAgIH5JREJJbmRl
eCgpOwogCkBAIC04MywxMSArODMsMTIgQEAgcHVibGljOgogCiAgICAgdm9pZCBtYXJrRGVsZXRl
ZCgpIHsgbV9kZWxldGVkID0gdHJ1ZTsgfQogCisgICAgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJm
YWNlKiBiYWNrZW5kREIoKSBjb25zdDsKKwogcHJpdmF0ZToKLSAgICBJREJJbmRleChjb25zdCBJ
REJJbmRleE1ldGFkYXRhJiwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+LCBJ
REJPYmplY3RTdG9yZSosIElEQlRyYW5zYWN0aW9uKik7CisgICAgSURCSW5kZXgoY29uc3QgSURC
SW5kZXhNZXRhZGF0YSYsIElEQk9iamVjdFN0b3JlKiwgSURCVHJhbnNhY3Rpb24qKTsKIAogICAg
IElEQkluZGV4TWV0YWRhdGEgbV9tZXRhZGF0YTsKLSAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5k
SW50ZXJmYWNlPiBtX2JhY2tlbmQ7CiAgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlPiBtX29iamVj
dFN0b3JlOwogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gbV90cmFuc2FjdGlvbjsKICAgICBi
b29sIG1fZGVsZXRlZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkluZGV4QmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5jcHAKaW5kZXggZTkyMzQ0NzQ5MzFiYzY3MGJlN2Y5
MGIzZjFjMzVjMjkxYzEzODAyYS4uODk0MGM1ZTdlMThiYmE0YTgwNTU2NGU0YmU4NDZmOTMyNDcz
YjgxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5k
ZXhCYWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCSW5kZXhCYWNrZW5kSW1wbC5jcHAKQEAgLTQyLDk0ICs0Miw4IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotY2xhc3MgSURCSW5kZXhCYWNrZW5kSW1wbDo6T3BlbkluZGV4Q3Vyc29yT3Bl
cmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbiB7Ci1w
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6
T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCwg
UGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlv
biwgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UHRyKG5ldyBPcGVuSW5kZXhDdXJzb3JPcGVyYXRpb24oaW5kZXgsIGtleVJhbmdlLCBkaXJl
Y3Rpb24sIGN1cnNvclR5cGUsIGNhbGxiYWNrcykpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQg
cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7Ci1wcml2YXRlOgotICAgIE9wZW5J
bmRleEN1cnNvck9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4
LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgdW5zaWduZWQgc2hvcnQgZGlyZWN0
aW9uLCBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi0gICAgICAgIDogbV9pbmRleChpbmRl
eCkKLSAgICAgICAgLCBtX2tleVJhbmdlKGtleVJhbmdlKQotICAgICAgICAsIG1fZGlyZWN0aW9u
KGRpcmVjdGlvbikKLSAgICAgICAgLCBtX2N1cnNvclR5cGUoY3Vyc29yVHlwZSkKLSAgICAgICAg
LCBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCi0gICAgewotICAgIH0KLQotICAgIFJlZlB0cjxJREJJ
bmRleEJhY2tlbmRJbXBsPiBtX2luZGV4OwotICAgIFJlZlB0cjxJREJLZXlSYW5nZT4gbV9rZXlS
YW5nZTsKLSAgICB1bnNpZ25lZCBzaG9ydCBtX2RpcmVjdGlvbjsKLSAgICBJREJDdXJzb3JCYWNr
ZW5kSW50ZXJmYWNlOjpDdXJzb3JUeXBlIG1fY3Vyc29yVHlwZTsKLSAgICBSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBtX2NhbGxiYWNrczsKLX07Ci0KLWNsYXNzIElEQkluZGV4QmFja2VuZEltcGw6Oklu
ZGV4Q291bnRPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3Bl
cmF0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZElt
cGw+IGluZGV4LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+IGNhbGxiYWNrcykKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihu
ZXcgSW5kZXhDb3VudE9wZXJhdGlvbihpbmRleCwga2V5UmFuZ2UsIGNhbGxiYWNrcykpOwotICAg
IH0KLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7
Ci1wcml2YXRlOgotICAgIEluZGV4Q291bnRPcGVyYXRpb24oUGFzc1JlZlB0cjxJREJJbmRleEJh
Y2tlbmRJbXBsPiBpbmRleCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi0gICAgICAgIDogbV9pbmRleChpbmRleCkK
LSAgICAgICAgLCBtX2tleVJhbmdlKGtleVJhbmdlKQotICAgICAgICAsIG1fY2FsbGJhY2tzKGNh
bGxiYWNrcykKLSAgICB7Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+
IG1faW5kZXg7Ci0gICAgUmVmUHRyPElEQktleVJhbmdlPiBtX2tleVJhbmdlOwotICAgIFJlZlB0
cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOwotfTsKLQotY2xhc3MgSURCSW5kZXhCYWNrZW5k
SW1wbDo6SW5kZXhSZWZlcmVuY2VkVmFsdWVSZXRyaWV2YWxPcGVyYXRpb24gOiBwdWJsaWMgSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMg
UGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQ
YXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4LCBQYXNzUmVmUHRyPElEQktleVJh
bmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLSAgICB7
Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgSW5kZXhSZWZlcmVuY2VkVmFsdWVSZXRyaWV2
YWxPcGVyYXRpb24oaW5kZXgsIGtleVJhbmdlLCBjYWxsYmFja3MpKTsKLSAgICB9Ci0gICAgdmly
dHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOwotcHJpdmF0ZToK
LSAgICBJbmRleFJlZmVyZW5jZWRWYWx1ZVJldHJpZXZhbE9wZXJhdGlvbihQYXNzUmVmUHRyPElE
QkluZGV4QmFja2VuZEltcGw+IGluZGV4LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5n
ZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLSAgICAgICAgOiBtX2luZGV4
KGluZGV4KQotICAgICAgICAsIG1fa2V5UmFuZ2Uoa2V5UmFuZ2UpCi0gICAgICAgICwgbV9jYWxs
YmFja3MoY2FsbGJhY2tzKQotICAgIHsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCSW5kZXhCYWNr
ZW5kSW1wbD4gbV9pbmRleDsKLSAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IG1fa2V5UmFuZ2U7Ci0g
ICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7Ci19OwotCi1jbGFzcyBJREJJbmRl
eEJhY2tlbmRJbXBsOjpJbmRleFZhbHVlUmV0cmlldmFsT3BlcmF0aW9uIDogcHVibGljIElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBh
c3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uPiBjcmVhdGUoUGFz
c1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCwgUGFzc1JlZlB0cjxJREJLZXlSYW5n
ZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi0gICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEluZGV4VmFsdWVSZXRyaWV2YWxPcGVyYXRpb24o
aW5kZXgsIGtleVJhbmdlLCBjYWxsYmFja3MpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIHBl
cmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOwotcHJpdmF0ZToKLSAgICBJbmRleFZh
bHVlUmV0cmlldmFsT3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5k
ZXgsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4gY2FsbGJhY2tzKQotICAgICAgICA6IG1faW5kZXgoaW5kZXgpCi0gICAgICAgICwgbV9r
ZXlSYW5nZShrZXlSYW5nZSkKLSAgICAgICAgLCBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCi0gICAg
ewotICAgIH0KLQotICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBtX2luZGV4OwotICAg
IFJlZlB0cjxJREJLZXlSYW5nZT4gbV9rZXlSYW5nZTsKLSAgICBSZWZQdHI8SURCQ2FsbGJhY2tz
PiBtX2NhbGxiYWNrczsKLX07Ci0KLQotSURCSW5kZXhCYWNrZW5kSW1wbDo6SURCSW5kZXhCYWNr
ZW5kSW1wbChjb25zdCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKiBkYXRhYmFzZSwgSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbCogb2JqZWN0U3RvcmVCYWNrZW5kLCBjb25zdCBJREJJbmRleE1ldGFk
YXRhJiBtZXRhZGF0YSkKK0lEQkluZGV4QmFja2VuZEltcGw6OklEQkluZGV4QmFja2VuZEltcGwo
Y29uc3QgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCogZGF0YWJhc2UsIGNvbnN0IElEQkluZGV4TWV0
YWRhdGEmIG1ldGFkYXRhKQogICAgIDogbV9kYXRhYmFzZShkYXRhYmFzZSkKLSAgICAsIG1fb2Jq
ZWN0U3RvcmVCYWNrZW5kKG9iamVjdFN0b3JlQmFja2VuZCkKICAgICAsIG1fbWV0YWRhdGEobWV0
YWRhdGEpCiB7CiB9CkBAIC0xMzgsMTU5ICs1Miw2IEBAIElEQkluZGV4QmFja2VuZEltcGw6On5J
REJJbmRleEJhY2tlbmRJbXBsKCkKIHsKIH0KIAotdm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpP
cGVuSW5kZXhDdXJzb3JPcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bCogdHJhbnNhY3Rpb24pCi17Ci0gICAgSURCX1RSQUNFKCJPcGVuSW5kZXhDdXJzb3JPcGVyYXRp
b24iKTsKLSAgICBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBzdGF0aWNfY2FzdDxJ
REJDdXJzb3I6OkRpcmVjdGlvbj4obV9kaXJlY3Rpb24pOwotCi0gICAgUmVmUHRyPElEQkJhY2tp
bmdTdG9yZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJzb3I7Ci0KLSAgICBzd2l0Y2ggKG1fY3Vy
c29yVHlwZSkgewotICAgIGNhc2UgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6S2V5T25seToK
LSAgICAgICAgYmFja2luZ1N0b3JlQ3Vyc29yID0gbV9pbmRleC0+YmFja2luZ1N0b3JlKCktPm9w
ZW5JbmRleEtleUN1cnNvcih0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwg
bV9pbmRleC0+ZGF0YWJhc2VJZCgpLCBtX2luZGV4LT5tX29iamVjdFN0b3JlQmFja2VuZC0+aWQo
KSwgbV9pbmRleC0+aWQoKSwgbV9rZXlSYW5nZS5nZXQoKSwgZGlyZWN0aW9uKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpLZXlBbmRWYWx1ZToK
LSAgICAgICAgYmFja2luZ1N0b3JlQ3Vyc29yID0gbV9pbmRleC0+YmFja2luZ1N0b3JlKCktPm9w
ZW5JbmRleEN1cnNvcih0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9p
bmRleC0+ZGF0YWJhc2VJZCgpLCBtX2luZGV4LT5tX29iamVjdFN0b3JlQmFja2VuZC0+aWQoKSwg
bV9pbmRleC0+aWQoKSwgbV9rZXlSYW5nZS5nZXQoKSwgZGlyZWN0aW9uKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQot
Ci0gICAgaWYgKCFiYWNraW5nU3RvcmVDdXJzb3IpIHsKLSAgICAgICAgbV9jYWxsYmFja3MtPm9u
U3VjY2VzcyhzdGF0aWNfY2FzdDxTZXJpYWxpemVkU2NyaXB0VmFsdWUqPigwKSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+IGN1cnNv
ciA9IElEQkN1cnNvckJhY2tlbmRJbXBsOjpjcmVhdGUoYmFja2luZ1N0b3JlQ3Vyc29yLmdldCgp
LCBtX2N1cnNvclR5cGUsIHRyYW5zYWN0aW9uLCBtX2luZGV4LT5tX29iamVjdFN0b3JlQmFja2Vu
ZCk7Ci0gICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhjdXJzb3IsIGN1cnNvci0+a2V5KCksIGN1
cnNvci0+cHJpbWFyeUtleSgpLCBjdXJzb3ItPnZhbHVlKCkpOwotfQotCi12b2lkIElEQkluZGV4
QmFja2VuZEltcGw6Om9wZW5DdXJzb3IoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2Us
IHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENh
bGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwg
RXhjZXB0aW9uQ29kZSYpCi17Ci0gICAgSURCX1RSQUNFKCJJREJJbmRleEJhY2tlbmRJbXBsOjpv
cGVuQ3Vyc29yIik7Ci0gICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2Fs
bGJhY2tzOwotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlv
biA9IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmZyb20odHJhbnNhY3Rpb25QdHIpOwotICAg
IHRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soT3BlbkluZGV4Q3Vyc29yT3BlcmF0aW9uOjpjcmVh
dGUodGhpcywga2V5UmFuZ2UsIGRpcmVjdGlvbiwgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6
S2V5QW5kVmFsdWUsIGNhbGxiYWNrcykpOwotfQotCi12b2lkIElEQkluZGV4QmFja2VuZEltcGw6
Om9wZW5LZXlDdXJzb3IoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIHVuc2lnbmVk
IHNob3J0IGRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwgRXhjZXB0aW9u
Q29kZSYpCi17Ci0gICAgSURCX1RSQUNFKCJJREJJbmRleEJhY2tlbmRJbXBsOjpvcGVuS2V5Q3Vy
c29yIik7Ci0gICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tz
OwotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IElE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmZyb20odHJhbnNhY3Rpb25QdHIpOwotICAgIHRyYW5z
YWN0aW9uLT5zY2hlZHVsZVRhc2soT3BlbkluZGV4Q3Vyc29yT3BlcmF0aW9uOjpjcmVhdGUodGhp
cywga2V5UmFuZ2UsIGRpcmVjdGlvbiwgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6S2V5T25s
eSwgY2FsbGJhY2tzKSk7Ci19Ci0KLXZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6SW5kZXhDb3Vu
dE9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlv
bikKLXsKLSAgICBJREJfVFJBQ0UoIkluZGV4Q291bnRPcGVyYXRpb24iKTsKLSAgICB1aW50MzJf
dCBjb3VudCA9IDA7Ci0KLSAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGJhY2tp
bmdTdG9yZUN1cnNvciA9IG1faW5kZXgtPmJhY2tpbmdTdG9yZSgpLT5vcGVuSW5kZXhLZXlDdXJz
b3IodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1faW5kZXgtPmRhdGFi
YXNlSWQoKSwgbV9pbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmlkKCksIG1faW5kZXgtPmlk
KCksIG1fa2V5UmFuZ2UuZ2V0KCksIElEQkN1cnNvcjo6TkVYVCk7Ci0gICAgaWYgKCFiYWNraW5n
U3RvcmVDdXJzb3IpIHsKLSAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2Vzcyhjb3VudCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBkbyB7Ci0gICAgICAgICsrY291bnQ7Ci0gICAg
fSB3aGlsZSAoYmFja2luZ1N0b3JlQ3Vyc29yLT5jb250aW51ZUZ1bmN0aW9uKDApKTsKLQotICAg
IG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoY291bnQpOwotfQotCi12b2lkIElEQkluZGV4QmFja2Vu
ZEltcGw6OmNvdW50KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHJhbmdlLCBQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2Uq
IHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRpb25Db2RlJikKLXsKLSAgICBJREJfVFJBQ0UoIklEQklu
ZGV4QmFja2VuZEltcGw6OmNvdW50Iik7Ci0gICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJh
Y2tzID0gcHJwQ2FsbGJhY2tzOwotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
PiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmZyb20odHJhbnNhY3Rp
b25QdHIpOwotICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soSW5kZXhDb3VudE9wZXJhdGlv
bjo6Y3JlYXRlKHRoaXMsIHJhbmdlLCBjYWxsYmFja3MpKTsKLX0KLQotdm9pZCBJREJJbmRleEJh
Y2tlbmRJbXBsOjpJbmRleFJlZmVyZW5jZWRWYWx1ZVJldHJpZXZhbE9wZXJhdGlvbjo6cGVyZm9y
bShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKLXsKLSAgICBJREJfVFJB
Q0UoIkluZGV4UmVmZXJlbmNlZFZhbHVlUmV0cmlldmFsT3BlcmF0aW9uIik7Ci0KLSAgICBSZWZQ
dHI8SURCS2V5PiBrZXk7Ci0KLSAgICBpZiAobV9rZXlSYW5nZS0+aXNPbmx5S2V5KCkpCi0gICAg
ICAgIGtleSA9IG1fa2V5UmFuZ2UtPmxvd2VyKCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIFJlZlB0
cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gYmFja2luZ1N0b3JlQ3Vyc29yID0gbV9pbmRleC0+
YmFja2luZ1N0b3JlKCktPm9wZW5JbmRleEN1cnNvcih0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3Jl
VHJhbnNhY3Rpb24oKSwgbV9pbmRleC0+ZGF0YWJhc2VJZCgpLCBtX2luZGV4LT5tX29iamVjdFN0
b3JlQmFja2VuZC0+aWQoKSwgbV9pbmRleC0+aWQoKSwgbV9rZXlSYW5nZS5nZXQoKSwgSURCQ3Vy
c29yOjpORVhUKTsKLQotICAgICAgICBpZiAoIWJhY2tpbmdTdG9yZUN1cnNvcikgewotICAgICAg
ICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcygpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgICAgIGtleSA9IGJhY2tpbmdTdG9yZUN1cnNvci0+a2V5KCk7Ci0gICAgfQot
Ci0gICAgUmVmUHRyPElEQktleT4gcHJpbWFyeUtleTsKLSAgICBib29sIG9rID0gbV9pbmRleC0+
YmFja2luZ1N0b3JlKCktPmdldFByaW1hcnlLZXlWaWFJbmRleCh0cmFuc2FjdGlvbi0+YmFja2lu
Z1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9pbmRleC0+ZGF0YWJhc2VJZCgpLCBtX2luZGV4LT5tX29i
amVjdFN0b3JlQmFja2VuZC0+aWQoKSwgbV9pbmRleC0+aWQoKSwgKmtleSwgcHJpbWFyeUtleSk7
Ci0gICAgaWYgKCFvaykgewotICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFz
ZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVy
bmFsIGVycm9yIGluIGdldFByaW1hcnlLZXlWaWFJbmRleC4iKSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBWZWN0b3I8dWludDhfdD4gdmFsdWU7Ci0gICAgb2sgPSBtX2luZGV4LT5i
YWNraW5nU3RvcmUoKS0+Z2V0UmVjb3JkKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2Fj
dGlvbigpLCBtX2luZGV4LT5kYXRhYmFzZUlkKCksIG1faW5kZXgtPm1fb2JqZWN0U3RvcmVCYWNr
ZW5kLT5pZCgpLCAqcHJpbWFyeUtleSwgdmFsdWUpOwotICAgIGlmICghb2spIHsKLSAgICAgICAg
bV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvciBpbiBnZXRSZWNvcmQuIikp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHZhbHVlLmlzRW1wdHkoKSkgewot
ICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgaWYgKG1faW5kZXgtPm1fb2JqZWN0U3RvcmVCYWNrZW5kLT5hdXRvSW5jcmVtZW50KCkg
JiYgIW1faW5kZXgtPm1fb2JqZWN0U3RvcmVCYWNrZW5kLT5rZXlQYXRoKCkuaXNOdWxsKCkpIHsK
LSAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNy
ZWF0ZUZyb21XaXJlQnl0ZXModmFsdWUpLCBwcmltYXJ5S2V5LCBtX2luZGV4LT5tX29iamVjdFN0
b3JlQmFja2VuZC0+a2V5UGF0aCgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX2Nh
bGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmVC
eXRlcyh2YWx1ZSkpOwotfQotCi0KLXZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6SW5kZXhWYWx1
ZVJldHJpZXZhbE9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0
cmFuc2FjdGlvbikKLXsKLSAgICBJREJfVFJBQ0UoIkluZGV4VmFsdWVSZXRyaWV2YWxPcGVyYXRp
b24iKTsKLQotICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gYmFja2luZ1N0b3Jl
Q3Vyc29yID0gbV9pbmRleC0+YmFja2luZ1N0b3JlKCktPm9wZW5JbmRleEtleUN1cnNvcih0cmFu
c2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9pbmRleC0+ZGF0YWJhc2VJZCgp
LCBtX2luZGV4LT5tX29iamVjdFN0b3JlQmFja2VuZC0+aWQoKSwgbV9pbmRleC0+aWQoKSwgbV9r
ZXlSYW5nZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhUKTsKLQotICAgIGlmICghYmFja2luZ1N0b3Jl
Q3Vyc29yKSB7Ci0gICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3Moc3RhdGljX2Nhc3Q8SURC
S2V5Kj4oMCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQktleT4g
a2V5UmVzdWx0OwotICAgIGJvb2wgb2sgPSBtX2luZGV4LT5iYWNraW5nU3RvcmUoKS0+Z2V0UHJp
bWFyeUtleVZpYUluZGV4KHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBt
X2luZGV4LT5kYXRhYmFzZUlkKCksIG1faW5kZXgtPm1fb2JqZWN0U3RvcmVCYWNrZW5kLT5pZCgp
LCBtX2luZGV4LT5pZCgpLCAqYmFja2luZ1N0b3JlQ3Vyc29yLT5rZXkoKSwga2V5UmVzdWx0KTsK
LSAgICBpZiAoIW9rKSB7Ci0gICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNl
RXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJu
YWwgZXJyb3IgaW4gZ2V0UHJpbWFyeUtleVZpYUluZGV4LiIpKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICBpZiAoIWtleVJlc3VsdCkgewotICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNj
ZXNzKHN0YXRpY19jYXN0PElEQktleSo+KDApKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKGtleVJlc3VsdC5nZXQoKSk7Ci19Ci0KLXZvaWQgSURC
SW5kZXhCYWNrZW5kSW1wbDo6Z2V0KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRpb25Db2RlJikKLXsKLSAgICBJREJf
VFJBQ0UoIklEQkluZGV4QmFja2VuZEltcGw6OmdldCIpOwotICAgIFJlZlB0cjxJREJDYWxsYmFj
a3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpmcm9t
KHRyYW5zYWN0aW9uUHRyKTsKLSAgICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKEluZGV4UmVm
ZXJlbmNlZFZhbHVlUmV0cmlldmFsT3BlcmF0aW9uOjpjcmVhdGUodGhpcywga2V5UmFuZ2UsIGNh
bGxiYWNrcykpOwotfQotCi12b2lkIElEQkluZGV4QmFja2VuZEltcGw6OmdldEtleShQYXNzUmVm
UHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENh
bGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwg
RXhjZXB0aW9uQ29kZSYpCi17Ci0gICAgSURCX1RSQUNFKCJJREJJbmRleEJhY2tlbmRJbXBsOjpn
ZXRLZXkiKTsKLSAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFj
a3M7Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0g
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6ZnJvbSh0cmFuc2FjdGlvblB0cik7Ci0gICAgdHJh
bnNhY3Rpb24tPnNjaGVkdWxlVGFzayhJbmRleFZhbHVlUmV0cmlldmFsT3BlcmF0aW9uOjpjcmVh
dGUodGhpcywga2V5UmFuZ2UsIGNhbGxiYWNrcykpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwuaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwuaAppbmRl
eCAwY2Q3ZmUxYWQ4ODQwMWE2YjI0OWIyZmI4ZGEzYjc1ZmE4ZjNlY2JkLi4xYTkzOTk5ZTE2MzNk
NGY3ZmE3MWU5YjY4NzRkZTE4MTAxYzIwZTlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5oCkBAIC00Miw5ICs0Miw5
IEBAIGNsYXNzIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw7CiAKIGNsYXNzIElEQkluZGV4QmFj
a2VuZEltcGwgOiBwdWJsaWMgSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlIHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBjcmVhdGUoY29uc3QgSURC
RGF0YWJhc2VCYWNrZW5kSW1wbCogZGF0YWJhc2UsIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwq
IG9iamVjdFN0b3JlQmFja2VuZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgbWV0YWRhdGEpCisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gY3JlYXRlKGNvbnN0IElE
QkRhdGFiYXNlQmFja2VuZEltcGwqIGRhdGFiYXNlLCBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBt
ZXRhZGF0YSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCSW5kZXhCYWNr
ZW5kSW1wbChkYXRhYmFzZSwgb2JqZWN0U3RvcmVCYWNrZW5kLCBtZXRhZGF0YSkpOworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkluZGV4QmFja2VuZEltcGwoZGF0YWJhc2UsIG1ldGFk
YXRhKSk7CiAgICAgfQogICAgIHZpcnR1YWwgfklEQkluZGV4QmFja2VuZEltcGwoKTsKIApAQCAt
NTUsMTEgKzU1LDExIEBAIHB1YmxpYzoKICAgICB9CiAKICAgICAvLyBJREJJbmRleEJhY2tlbmRJ
bnRlcmZhY2UKLSAgICB2aXJ0dWFsIHZvaWQgb3BlbkN1cnNvcihQYXNzUmVmUHRyPElEQktleVJh
bmdlPiwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4s
IElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2
aXJ0dWFsIHZvaWQgY291bnQoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29k
ZSYpOwotICAgIHZpcnR1YWwgdm9pZCBvcGVuS2V5Q3Vyc29yKFBhc3NSZWZQdHI8SURCS2V5UmFu
Z2U+LCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZp
cnR1YWwgdm9pZCBnZXQoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYp
OwotICAgIHZpcnR1YWwgdm9pZCBnZXRLZXkoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhj
ZXB0aW9uQ29kZSYpOworICAgIHZpcnR1YWwgdm9pZCBvcGVuQ3Vyc29yKFBhc3NSZWZQdHI8SURC
S2V5UmFuZ2U+LCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpIHsg
QVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY291bnQoUGFzc1JlZlB0
cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgb3BlbktleUN1cnNvcihQYXNzUmVmUHRyPElEQktleVJhbmdl
PiwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSB7IEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOyB9CisgICAgdmlydHVhbCB2b2lkIGdldChQYXNzUmVmUHRyPElEQktleVJh
bmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2UqLCBFeGNlcHRpb25Db2RlJikgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorICAgIHZp
cnR1YWwgdm9pZCBnZXRLZXkoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29k
ZSYpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KIAogICAgIElEQkluZGV4TWV0YWRhdGEgbWV0
YWRhdGEoKSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhOyB9CiAgICAgY29uc3QgU3RyaW5nJiBu
YW1lKCkgeyByZXR1cm4gbV9tZXRhZGF0YS5uYW1lOyB9CkBAIC02OCwxMiArNjgsNyBAQCBwdWJs
aWM6CiAgICAgY29uc3QgYm9vbCYgbXVsdGlFbnRyeSgpIHsgcmV0dXJuIG1fbWV0YWRhdGEubXVs
dGlFbnRyeTsgfQogCiBwcml2YXRlOgotICAgIElEQkluZGV4QmFja2VuZEltcGwoY29uc3QgSURC
RGF0YWJhc2VCYWNrZW5kSW1wbCosIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwqLCBjb25zdCBJ
REJJbmRleE1ldGFkYXRhJik7Ci0KLSAgICBjbGFzcyBPcGVuSW5kZXhDdXJzb3JPcGVyYXRpb247
Ci0gICAgY2xhc3MgSW5kZXhDb3VudE9wZXJhdGlvbjsKLSAgICBjbGFzcyBJbmRleFJlZmVyZW5j
ZWRWYWx1ZVJldHJpZXZhbE9wZXJhdGlvbjsKLSAgICBjbGFzcyBJbmRleFZhbHVlUmV0cmlldmFs
T3BlcmF0aW9uOworICAgIElEQkluZGV4QmFja2VuZEltcGwoY29uc3QgSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbCosIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmKTsKIAogICAgIHN0YXRpYyBjb25zdCBp
bnQ2NF90IEludmFsaWRJZCA9IDA7CiAKQEAgLTgyLDggKzc3LDYgQEAgcHJpdmF0ZToKIAogICAg
IGNvbnN0IElEQkRhdGFiYXNlQmFja2VuZEltcGwqIG1fZGF0YWJhc2U7CiAKLSAgICBJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsKiBtX29iamVjdFN0b3JlQmFja2VuZDsKLQogICAgIElEQkluZGV4
TWV0YWRhdGEgbV9tZXRhZGF0YTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAppbmRleCBmMWQxNzZjNGUzODg3YWVjY2Jm
NWRlMDNiMTA0ZGVkMDE3M2FlZjBhLi44OTEyNTNkOWUwNGM5MWU5NWFlZWIyMzA0NTQ1ZjI0NjZh
MDI3MjVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJP
YmplY3RTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
T2JqZWN0U3RvcmUuY3BwCkBAIC04NywxNCArODcsMTIgQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0
PiBJREJPYmplY3RTdG9yZTo6Z2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBh
c3MKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1
ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBt
X3RyYW5zYWN0aW9uLmdldCgpKTsKLSAgICBtX2JhY2tlbmQtPmdldChrZXlSYW5nZSwgcmVxdWVz
dCwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7Ci0gICAgQVNTRVJUKCFlYyk7CisgICAg
YmFja2VuZERCKCktPmdldChtX3RyYW5zYWN0aW9uLT5pZCgpLCBpZCgpLCBJREJJbmRleE1ldGFk
YXRhOjpJbnZhbGlkSWQsIGtleVJhbmdlLCBmYWxzZSwgcmVxdWVzdCk7CiAgICAgcmV0dXJuIHJl
cXVlc3QucmVsZWFzZSgpOwogfQogCiBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0
b3JlOjpnZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJL
ZXk+IGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgSURCX1RSQUNFKCJJREJPYmplY3RT
dG9yZTo6Z2V0Iik7CiAgICAgUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSA9IElEQktleVJh
bmdlOjpvbmx5KGtleSwgZWMpOwogICAgIGlmIChlYykKICAgICAgICAgcmV0dXJuIDA7CkBAIC0y
MTQsOCArMjEyLDggQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6cHV0
KElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6UHV0TW8KICAgICB9CiAKICAgICBSZWZQ
dHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBzb3Vy
Y2UsIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwotICAgIG1fYmFja2VuZC0+cHV0KHNlcmlhbGl6ZWRW
YWx1ZS5yZWxlYXNlKCksIGtleS5yZWxlYXNlKCksIHB1dE1vZGUsIHJlcXVlc3QsIG1fdHJhbnNh
Y3Rpb24tPmJhY2tlbmQoKSwgaW5kZXhJZHMsIGluZGV4S2V5cyk7Ci0gICAgQVNTRVJUKCFlYyk7
CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHZhbHVlQnl0ZXMgPSBzZXJpYWxpemVkVmFsdWUtPnRvV2ly
ZUJ5dGVzKCk7CisgICAgYmFja2VuZERCKCktPnB1dChtX3RyYW5zYWN0aW9uLT5pZCgpLCBpZCgp
LCAmdmFsdWVCeXRlcywga2V5LnJlbGVhc2UoKSwgc3RhdGljX2Nhc3Q8SURCRGF0YWJhc2VCYWNr
ZW5kSW50ZXJmYWNlOjpQdXRNb2RlPihwdXRNb2RlKSwgcmVxdWVzdCwgaW5kZXhJZHMsIGluZGV4
S2V5cyk7CiAgICAgcmV0dXJuIHJlcXVlc3QucmVsZWFzZSgpOwogfQogCkBAIC0yNDAsMTQgKzIz
OCwxMiBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpkZWxldGVGdW5j
dGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjbwogICAgIH0KIAogICAgIFJlZlB0cjxJREJS
ZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3Jl
YXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKLSAgICBtX2JhY2tlbmQtPmRlbGV0ZUZ1
bmN0aW9uKGtleVJhbmdlLCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsK
LSAgICBBU1NFUlQoIWVjKTsKKyAgICBiYWNrZW5kREIoKS0+ZGVsZXRlUmFuZ2UobV90cmFuc2Fj
dGlvbi0+aWQoKSwgaWQoKSwga2V5UmFuZ2UsIHJlcXVlc3QpOwogICAgIHJldHVybiByZXF1ZXN0
LnJlbGVhc2UoKTsKIH0KIAogUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6
ZGVsZXRlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0
cjxJREJLZXk+IGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgSURCX1RSQUNFKCJJREJP
YmplY3RTdG9yZTo6ZGVsZXRlIik7CiAgICAgUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSA9
IElEQktleVJhbmdlOjpvbmx5KGtleSwgZWMpOwogICAgIGlmIChlYykKICAgICAgICAgcmV0dXJu
IDA7CkBAIC0yNzEsOCArMjY3LDcgQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RT
dG9yZTo6Y2xlYXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRXgKICAgICB9CiAK
ICAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250
ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7Ci0gICAgbV9i
YWNrZW5kLT5jbGVhcihyZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKLSAg
ICBBU1NFUlQoIWVjKTsKKyAgICBiYWNrZW5kREIoKS0+Y2xlYXIobV90cmFuc2FjdGlvbi0+aWQo
KSwgaWQoKSwgcmVxdWVzdCk7CiAgICAgcmV0dXJuIHJlcXVlc3QucmVsZWFzZSgpOwogfQogCkBA
IC0yODQsOSArMjc5LDkgQEAgbmFtZXNwYWNlIHsKIC8vIGN1cnNvciBzdWNjZXNzIGhhbmRsZXJz
IGFyZSBrZXB0IGFsaXZlLgogY2xhc3MgSW5kZXhQb3B1bGF0b3IgOiBwdWJsaWMgRXZlbnRMaXN0
ZW5lciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SW5kZXhQb3B1bGF0b3I+IGNy
ZWF0ZShQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gYmFja2VuZCwg
UGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uLCBQ
YXNzUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QsIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGlu
ZGV4TWV0YWRhdGEpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5kZXhQb3B1bGF0b3I+IGNyZWF0
ZShQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZT4gYmFja2VuZCwgaW50NjRf
dCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQkluZGV4TWV0
YWRhdGEmIGluZGV4TWV0YWRhdGEpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IEluZGV4UG9wdWxhdG9yKGJhY2tlbmQsIHRyYW5zYWN0aW9uLCBpbmRleE1ldGFkYXRhKSk7Cisg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5kZXhQb3B1bGF0b3IoYmFja2VuZCwgdHJhbnNh
Y3Rpb25JZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhNZXRhZGF0YSkpOwogICAgIH0KIAogICAgIHZp
cnR1YWwgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEV2ZW50TGlzdGVuZXImIG90aGVyKQpAQCAtMjk1
LDEyICsyOTAsMTEgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBJbmRleFBvcHVs
YXRvcihQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gYmFja2VuZCwK
LSAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZT4gdHJhbnNhY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgY29uc3QgSURCSW5kZXhNZXRh
ZGF0YSYgaW5kZXhNZXRhZGF0YSkKKyAgICBJbmRleFBvcHVsYXRvcihQYXNzUmVmUHRyPElEQkRh
dGFiYXNlQmFja2VuZEludGVyZmFjZT4gYmFja2VuZCwgaW50NjRfdCB0cmFuc2FjdGlvbklkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRh
dGEpCiAgICAgICAgIDogRXZlbnRMaXN0ZW5lcihDUFBFdmVudExpc3RlbmVyVHlwZSkKLSAgICAg
ICAgLCBtX29iamVjdFN0b3JlQmFja2VuZChiYWNrZW5kKQotICAgICAgICAsIG1fdHJhbnNhY3Rp
b24odHJhbnNhY3Rpb24pCisgICAgICAgICwgbV9kYXRhYmFzZUJhY2tlbmQoYmFja2VuZCkKKyAg
ICAgICAgLCBtX3RyYW5zYWN0aW9uSWQodHJhbnNhY3Rpb25JZCkKKyAgICAgICAgLCBtX29iamVj
dFN0b3JlSWQob2JqZWN0U3RvcmVJZCkKICAgICAgICAgLCBtX2luZGV4TWV0YWRhdGEoaW5kZXhN
ZXRhZGF0YSkKICAgICB7CiAgICAgfQpAQCAtMzMzLDIxICszMjcsMjAgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIFZlY3RvcjxJREJPYmplY3RTdG9yZTo6SW5kZXhLZXlzLCAxPiBpbmRleEtleXNM
aXN0OwogICAgICAgICAgICAgaW5kZXhLZXlzTGlzdC5hcHBlbmQoaW5kZXhLZXlzKTsKIAotICAg
ICAgICAgICAgbV9vYmplY3RTdG9yZUJhY2tlbmQtPnNldEluZGV4S2V5cyhwcmltYXJ5S2V5LCBp
bmRleElkcywgaW5kZXhLZXlzTGlzdCwgbV90cmFuc2FjdGlvbi5nZXQoKSk7Ci0KKyAgICAgICAg
ICAgIG1fZGF0YWJhc2VCYWNrZW5kLT5zZXRJbmRleEtleXMobV90cmFuc2FjdGlvbklkLCBtX29i
amVjdFN0b3JlSWQsIHByaW1hcnlLZXksIGluZGV4SWRzLCBpbmRleEtleXNMaXN0KTsKICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIE5vdyB0aGF0IHdlIGFyZSBkb25lIGluZGV4aW5n
LCB0ZWxsIHRoZSBiYWNrZW5kIHRvIGdvCiAgICAgICAgICAgICAvLyBiYWNrIHRvIHByb2Nlc3Np
bmcgdGFza3Mgb2YgdHlwZSBOb3JtYWxUYXNrLgotICAgICAgICAgICAgbV9vYmplY3RTdG9yZUJh
Y2tlbmQtPnNldEluZGV4ZXNSZWFkeShpbmRleElkcywgbV90cmFuc2FjdGlvbi5nZXQoKSk7Ci0g
ICAgICAgICAgICBtX29iamVjdFN0b3JlQmFja2VuZC5jbGVhcigpOwotICAgICAgICAgICAgbV90
cmFuc2FjdGlvbi5jbGVhcigpOworICAgICAgICAgICAgbV9kYXRhYmFzZUJhY2tlbmQtPnNldElu
ZGV4ZXNSZWFkeShtX3RyYW5zYWN0aW9uSWQsIG1fb2JqZWN0U3RvcmVJZCwgaW5kZXhJZHMpOwor
ICAgICAgICAgICAgbV9kYXRhYmFzZUJhY2tlbmQuY2xlYXIoKTsKICAgICAgICAgfQogCiAgICAg
fQogCi0gICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gbV9vYmplY3RT
dG9yZUJhY2tlbmQ7Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4g
bV90cmFuc2FjdGlvbjsKLSAgICBJREJJbmRleE1ldGFkYXRhIG1faW5kZXhNZXRhZGF0YTsKKyAg
ICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlPiBtX2RhdGFiYXNlQmFja2VuZDsK
KyAgICBjb25zdCBpbnQ2NF90IG1fdHJhbnNhY3Rpb25JZDsKKyAgICBjb25zdCBpbnQ2NF90IG1f
b2JqZWN0U3RvcmVJZDsKKyAgICBjb25zdCBJREJJbmRleE1ldGFkYXRhIG1faW5kZXhNZXRhZGF0
YTsKIH07CiB9CiAKQEAgLTM5MiwxNSArMzg1LDE0IEBAIFBhc3NSZWZQdHI8SURCSW5kZXg+IElE
Qk9iamVjdFN0b3JlOjpjcmVhdGVJbmRleChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
CiAgICAgfQogCiAgICAgaW50NjRfdCBpbmRleElkID0gbV9tZXRhZGF0YS5tYXhJbmRleElkICsg
MTsKLSAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBpbmRleEJhY2tlbmQgPSBt
X2JhY2tlbmQtPmNyZWF0ZUluZGV4KGluZGV4SWQsIG5hbWUsIGtleVBhdGgsIHVuaXF1ZSwgbXVs
dGlFbnRyeSwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7Ci0gICAgQVNTRVJUKCFpbmRl
eEJhY2tlbmQgIT0gIWVjKTsgLy8gSWYgd2UgZGlkbid0IGdldCBhbiBpbmRleCwgd2Ugc2hvdWxk
IGhhdmUgZ290dGVuIGFuIGV4Y2VwdGlvbiBjb2RlLiBBbmQgdmljZSB2ZXJzYS4KKyAgICBtX2Jh
Y2tlbmQtPmNyZWF0ZUluZGV4KGluZGV4SWQsIG5hbWUsIGtleVBhdGgsIHVuaXF1ZSwgbXVsdGlF
bnRyeSwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7CiAgICAgaWYgKGVjKQogICAgICAg
ICByZXR1cm4gMDsKIAogICAgICsrbV9tZXRhZGF0YS5tYXhJbmRleElkOwogCiAgICAgSURCSW5k
ZXhNZXRhZGF0YSBtZXRhZGF0YShuYW1lLCBpbmRleElkLCBrZXlQYXRoLCB1bmlxdWUsIG11bHRp
RW50cnkpOwotICAgIFJlZlB0cjxJREJJbmRleD4gaW5kZXggPSBJREJJbmRleDo6Y3JlYXRlKG1l
dGFkYXRhLCBpbmRleEJhY2tlbmQucmVsZWFzZSgpLCB0aGlzLCBtX3RyYW5zYWN0aW9uLmdldCgp
KTsKKyAgICBSZWZQdHI8SURCSW5kZXg+IGluZGV4ID0gSURCSW5kZXg6OmNyZWF0ZShtZXRhZGF0
YSwgdGhpcywgbV90cmFuc2FjdGlvbi5nZXQoKSk7CiAgICAgbV9pbmRleE1hcC5zZXQobmFtZSwg
aW5kZXgpOwogICAgIG1fbWV0YWRhdGEuaW5kZXhlcy5zZXQoaW5kZXhJZCwgbWV0YWRhdGEpOwog
CkBAIC00MTUsNyArNDA3LDcgQEAgUGFzc1JlZlB0cjxJREJJbmRleD4gSURCT2JqZWN0U3RvcmU6
OmNyZWF0ZUluZGV4KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQKICAgICBpbmRleFJl
cXVlc3QtPnByZXZlbnRQcm9wYWdhdGlvbigpOwogCiAgICAgLy8gVGhpcyBpcyBrZXB0IGFsaXZl
IGJ5IGJlaW5nIHRoZSBzdWNjZXNzIGhhbmRsZXIgb2YgdGhlIHJlcXVlc3QsIHdoaWNoIGlzIGlu
IHR1cm4ga2VwdCBhbGl2ZSBieSB0aGUgb3duaW5nIHRyYW5zYWN0aW9uLgotICAgIFJlZlB0cjxJ
bmRleFBvcHVsYXRvcj4gaW5kZXhQb3B1bGF0b3IgPSBJbmRleFBvcHVsYXRvcjo6Y3JlYXRlKG1f
YmFja2VuZCwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBpbmRleFJlcXVlc3QsIG1ldGFkYXRh
KTsKKyAgICBSZWZQdHI8SW5kZXhQb3B1bGF0b3I+IGluZGV4UG9wdWxhdG9yID0gSW5kZXhQb3B1
bGF0b3I6OmNyZWF0ZShiYWNrZW5kREIoKSwgbV90cmFuc2FjdGlvbi0+aWQoKSwgaWQoKSwgbWV0
YWRhdGEpOwogICAgIGluZGV4UmVxdWVzdC0+c2V0T25zdWNjZXNzKGluZGV4UG9wdWxhdG9yKTsK
IAogICAgIHJldHVybiBpbmRleC5yZWxlYXNlKCk7CkBAIC00NDMsOSArNDM1LDYgQEAgUGFzc1Jl
ZlB0cjxJREJJbmRleD4gSURCT2JqZWN0U3RvcmU6OmluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwg
RXhjZXB0aW9uQ29kZSYgZWMKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgUmVmUHRy
PElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gaW5kZXhCYWNrZW5kID0gbV9iYWNrZW5kLT5pbmRl
eChpbmRleElkKTsKLSAgICBBU1NFUlQoIWVjICYmIGluZGV4QmFja2VuZCk7Ci0KICAgICBjb25z
dCBJREJJbmRleE1ldGFkYXRhKiBpbmRleE1ldGFkYXRhKDApOwogICAgIGZvciAoSURCT2JqZWN0
U3RvcmVNZXRhZGF0YTo6SW5kZXhNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9tZXRhZGF0YS5p
bmRleGVzLmJlZ2luKCk7IGl0ICE9IG1fbWV0YWRhdGEuaW5kZXhlcy5lbmQoKTsgKytpdCkgewog
ICAgICAgICBpZiAoaXQtPnZhbHVlLm5hbWUgPT0gbmFtZSkgewpAQCAtNDU0LDggKzQ0Myw5IEBA
IFBhc3NSZWZQdHI8SURCSW5kZXg+IElEQk9iamVjdFN0b3JlOjppbmRleChjb25zdCBTdHJpbmcm
IG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjCiAgICAgICAgIH0KICAgICB9CiAgICAgQVNTRVJUKGlu
ZGV4TWV0YWRhdGEpOworICAgIEFTU0VSVChpbmRleE1ldGFkYXRhLT5pZCAhPSBJREJJbmRleE1l
dGFkYXRhOjpJbnZhbGlkSWQpOwogCi0gICAgUmVmUHRyPElEQkluZGV4PiBpbmRleCA9IElEQklu
ZGV4OjpjcmVhdGUoKmluZGV4TWV0YWRhdGEsIGluZGV4QmFja2VuZC5yZWxlYXNlKCksIHRoaXMs
IG1fdHJhbnNhY3Rpb24uZ2V0KCkpOworICAgIFJlZlB0cjxJREJJbmRleD4gaW5kZXggPSBJREJJ
bmRleDo6Y3JlYXRlKCppbmRleE1ldGFkYXRhLCB0aGlzLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsK
ICAgICBtX2luZGV4TWFwLnNldChuYW1lLCBpbmRleCk7CiAgICAgcmV0dXJuIGluZGV4LnJlbGVh
c2UoKTsKIH0KQEAgLTUwNCwxNCArNDk0LDEzIEBAIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURC
T2JqZWN0U3RvcmU6Om9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4CiAK
ICAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250
ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7CiAgICAgcmVx
dWVzdC0+c2V0Q3Vyc29yRGV0YWlscyhJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpLZXlBbmRW
YWx1ZSwgZGlyZWN0aW9uKTsKLSAgICBtX2JhY2tlbmQtPm9wZW5DdXJzb3IocmFuZ2UsIGRpcmVj
dGlvbiwgcmVxdWVzdCwgdGFza1R5cGUsIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOwot
ICAgIEFTU0VSVCghZWMpOworCisgICAgYmFja2VuZERCKCktPm9wZW5DdXJzb3IobV90cmFuc2Fj
dGlvbi0+aWQoKSwgaWQoKSwgSURCSW5kZXhNZXRhZGF0YTo6SW52YWxpZElkLCByYW5nZSwgZGly
ZWN0aW9uLCBmYWxzZSwgc3RhdGljX2Nhc3Q8SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpU
YXNrVHlwZT4odGFza1R5cGUpLCByZXF1ZXN0KTsKICAgICByZXR1cm4gcmVxdWVzdC5yZWxlYXNl
KCk7CiB9CiAKIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6Om9wZW5DdXJz
b3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJLZXk+IGtl
eSwgY29uc3QgU3RyaW5nJiBkaXJlY3Rpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIElE
Ql9UUkFDRSgiSURCT2JqZWN0U3RvcmU6Om9wZW5DdXJzb3IiKTsKICAgICBSZWZQdHI8SURCS2V5
UmFuZ2U+IGtleVJhbmdlID0gSURCS2V5UmFuZ2U6Om9ubHkoa2V5LCBlYyk7CiAgICAgaWYgKGVj
KQogICAgICAgICByZXR1cm4gMDsKQEAgLTUzMCwxNCArNTE5LDEyIEBAIFBhc3NSZWZQdHI8SURC
UmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OmNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQsIFBhCiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBSZWZQdHI8SURCUmVxdWVz
dD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0
aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7Ci0gICAgbV9iYWNrZW5kLT5jb3VudChyYW5nZSwg
cmVxdWVzdCwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7Ci0gICAgQVNTRVJUKCFlYyk7
CisgICAgYmFja2VuZERCKCktPmNvdW50KG1fdHJhbnNhY3Rpb24tPmlkKCksIGlkKCksIElEQklu
ZGV4TWV0YWRhdGE6OkludmFsaWRJZCwgcmFuZ2UsIHJlcXVlc3QpOwogICAgIHJldHVybiByZXF1
ZXN0LnJlbGVhc2UoKTsKIH0KIAogUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9y
ZTo6Y291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJL
ZXk+IGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgSURCX1RSQUNFKCJJREJPYmplY3RT
dG9yZTo6Y291bnQiKTsKICAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlID0gSURCS2V5
UmFuZ2U6Om9ubHkoa2V5LCBlYyk7CiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm4gMDsKQEAg
LTU2Myw2ICs1NTAsMTEgQEAgaW50NjRfdCBJREJPYmplY3RTdG9yZTo6ZmluZEluZGV4SWQoY29u
c3QgU3RyaW5nJiBuYW1lKSBjb25zdAogICAgIHJldHVybiBJREJJbmRleE1ldGFkYXRhOjpJbnZh
bGlkSWQ7CiB9CiAKK0lEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZSogSURCT2JqZWN0U3RvcmU6
OmJhY2tlbmREQigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmRE
QigpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQk9iamVjdFN0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJPYmplY3RTdG9yZS5oCmluZGV4IGZjYjQzNzlhZWVkNzc2MzhkNzBjZjY5MjA4NzgzNTgwM2Zi
NjlmZWQuLjdlMmY3MmZhZWE4NTE5M2MzMDkzZWQ2M2Q4NWFhMmE1MDJmM2MwMjcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaApAQCAt
MjksNiArMjksNyBAQAogI2luY2x1ZGUgIkRpY3Rpb25hcnkuaCIKICNpbmNsdWRlICJJREJDdXJz
b3IuaCIKICNpbmNsdWRlICJJREJJbmRleC5oIgorI2luY2x1ZGUgIklEQkluZGV4QmFja2VuZElu
dGVyZmFjZS5oIgogI2luY2x1ZGUgIklEQktleS5oIgogI2luY2x1ZGUgIklEQktleVJhbmdlLmgi
CiAjaW5jbHVkZSAiSURCTWV0YWRhdGEuaCIKQEAgLTU4LDYgKzU5LDcgQEAgcHVibGljOgogICAg
IH5JREJPYmplY3RTdG9yZSgpIHsgfQogCiAgICAgLy8gSW1wbGVtZW50IHRoZSBJREJPYmplY3RT
dG9yZSBJREwKKyAgICBpbnQ2NF90IGlkKCkgY29uc3QgeyByZXR1cm4gbV9tZXRhZGF0YS5pZDsg
fQogICAgIGNvbnN0IFN0cmluZyBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9tZXRhZGF0YS5uYW1l
OyB9CiAgICAgUGFzc1JlZlB0cjxJREJBbnk+IGtleVBhdGhBbnkoKSBjb25zdCB7IHJldHVybiBJ
REJBbnk6OmNyZWF0ZShtX21ldGFkYXRhLmtleVBhdGgpOyB9CiAgICAgY29uc3QgSURCS2V5UGF0
aCBrZXlQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9tZXRhZGF0YS5rZXlQYXRoOyB9CkBAIC0xMDQs
NiArMTA2LDggQEAgcHVibGljOgogICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxJREJLZXk+ID4g
SW5kZXhLZXlzOwogICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIEluZGV4S2V5cz4gSW5kZXhL
ZXlNYXA7CiAKKyAgICBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UqIGJhY2tlbmREQigpIGNv
bnN0OworCiBwcml2YXRlOgogICAgIElEQk9iamVjdFN0b3JlKGNvbnN0IElEQk9iamVjdFN0b3Jl
TWV0YWRhdGEmLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4sIElE
QlRyYW5zYWN0aW9uKik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKaW5kZXggM2MyZDli
NzA3MzA4ZDk4YmMzOTk0YTBjMGVkNmI4MWE0OWVlMzk5NC4uZTZjZTgzYzM1YjM4YzA0ZWNlYWZh
NzhhOWFhZDU1ZmY4MGFmYjdiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKQEAgLTQ0
LDExMCArNDQsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6Ok9iamVjdFN0b3JlUmV0cmlldmFsT3BlcmF0aW9uIDogcHVibGljIElE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uPiBjcmVhdGUo
UGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1Jl
ZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxs
YmFja3MpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IE9iamVjdFN0b3JlUmV0
cmlldmFsT3BlcmF0aW9uKG9iamVjdFN0b3JlLCBrZXlSYW5nZSwgY2FsbGJhY2tzKSk7Ci0gICAg
fQotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqKTsK
LXByaXZhdGU6Ci0gICAgT2JqZWN0U3RvcmVSZXRyaWV2YWxPcGVyYXRpb24oUGFzc1JlZlB0cjxJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJLZXlS
YW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi0gICAg
ICAgIDogbV9vYmplY3RTdG9yZShvYmplY3RTdG9yZSkKLSAgICAgICAgLCBtX2tleVJhbmdlKGtl
eVJhbmdlKQotICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKLSAgICB7Ci0gICAgfQot
Ci0gICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG1fb2JqZWN0U3RvcmU7Ci0g
ICAgUmVmUHRyPElEQktleVJhbmdlPiBtX2tleVJhbmdlOwotICAgIFJlZlB0cjxJREJDYWxsYmFj
a3M+IG1fY2FsbGJhY2tzOwotfTsKLQotY2xhc3MgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6
T2JqZWN0U3RvcmVTdG9yYWdlT3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGw6Ok9wZXJhdGlvbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2Ny
aXB0VmFsdWU+IHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQdXRNb2RlIHB1dE1vZGUs
IFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NPd25QdHI8VmVjdG9yPGlu
dDY0X3Q+ID4gcG9wSW5kZXhJZHMsIFBhc3NPd25QdHI8VmVjdG9yPEluZGV4S2V5cz4gPiBwb3BJ
bmRleEtleXMpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IE9iamVjdFN0b3Jl
U3RvcmFnZU9wZXJhdGlvbihvYmplY3RTdG9yZSwgdmFsdWUsIGtleSwgcHV0TW9kZSwgY2FsbGJh
Y2tzLCBwb3BJbmRleElkcywgcG9wSW5kZXhLZXlzKSk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9p
ZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqKTsKLXByaXZhdGU6Ci0gICAgT2Jq
ZWN0U3RvcmVTdG9yYWdlT3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1
ZSwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzT3duUHRyPFZlY3RvcjxpbnQ2NF90PiA+IHBvcElu
ZGV4SWRzLCBQYXNzT3duUHRyPFZlY3RvcjxJbmRleEtleXM+ID4gcG9wSW5kZXhLZXlzKQotICAg
ICAgICA6IG1fb2JqZWN0U3RvcmUob2JqZWN0U3RvcmUpCi0gICAgICAgICwgbV92YWx1ZSh2YWx1
ZSkKLSAgICAgICAgLCBtX2tleShrZXkpCi0gICAgICAgICwgbV9wdXRNb2RlKHB1dE1vZGUpCi0g
ICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQotICAgICAgICAsIG1fcG9wSW5kZXhJZHMo
cG9wSW5kZXhJZHMpCi0gICAgICAgICwgbV9wb3BJbmRleEtleXMocG9wSW5kZXhLZXlzKQotICAg
IHsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gbV9vYmpl
Y3RTdG9yZTsKLSAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBtX3ZhbHVlOwotICAg
IFJlZlB0cjxJREJLZXk+IG1fa2V5OwotICAgIFB1dE1vZGUgbV9wdXRNb2RlOwotICAgIFJlZlB0
cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOwotICAgIE93blB0cjxWZWN0b3I8aW50NjRfdD4g
PiBtX3BvcEluZGV4SWRzOwotICAgIE93blB0cjxWZWN0b3I8SW5kZXhLZXlzPiA+IG1fcG9wSW5k
ZXhLZXlzOwotfTsKLQotY2xhc3MgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6T2JqZWN0U3Rv
cmVJbmRleGVzUmVhZHlPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bDo6T3BlcmF0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzT3duUHRyPFZlY3RvcjxpbnQ2NF90PiA+
IHBvcEluZGV4SWRzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBPYmplY3RT
dG9yZUluZGV4ZXNSZWFkeU9wZXJhdGlvbihvYmplY3RTdG9yZSwgcG9wSW5kZXhJZHMpKTsKLSAg
ICB9Ci0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCop
OwotcHJpdmF0ZToKLSAgICBPYmplY3RTdG9yZUluZGV4ZXNSZWFkeU9wZXJhdGlvbihQYXNzUmVm
UHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzT3duUHRyPFZl
Y3RvcjxpbnQ2NF90PiA+IHBvcEluZGV4SWRzKQotICAgICAgICA6IG1fb2JqZWN0U3RvcmUob2Jq
ZWN0U3RvcmUpCi0gICAgICAgICwgbV9wb3BJbmRleElkcyhwb3BJbmRleElkcykKLSAgICB7Ci0g
ICAgfQotCi0gICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG1fb2JqZWN0U3Rv
cmU7Ci0gICAgT3duUHRyPFZlY3RvcjxpbnQ2NF90PiA+IG1fcG9wSW5kZXhJZHM7Ci19OwotCi1j
bGFzcyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpPYmplY3RTdG9yZURlbGV0aW9uT3BlcmF0
aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbiB7Ci1wdWJs
aWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3Bl
cmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmpl
Y3RTdG9yZSwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiBjYWxsYmFja3MpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3
IE9iamVjdFN0b3JlRGVsZXRpb25PcGVyYXRpb24ob2JqZWN0U3RvcmUsIGtleVJhbmdlLCBjYWxs
YmFja3MpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbCopOwotcHJpdmF0ZToKLSAgICBPYmplY3RTdG9yZURlbGV0aW9uT3BlcmF0aW9u
KFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NS
ZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzKQotICAgICAgICA6IG1fb2JqZWN0U3RvcmUob2JqZWN0U3RvcmUpCi0gICAgICAgICwg
bV9rZXlSYW5nZShrZXlSYW5nZSkKLSAgICAgICAgLCBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCi0g
ICAgewotICAgIH0KLQotICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBtX29i
amVjdFN0b3JlOwotICAgIFJlZlB0cjxJREJLZXlSYW5nZT4gbV9rZXlSYW5nZTsKLSAgICBSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKLX07Ci0KLWNsYXNzIElEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6Ok9iamVjdFN0b3JlQ2xlYXJPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093
blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVm
UHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4gY2FsbGJhY2tzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5l
dyBPYmplY3RTdG9yZUNsZWFyT3BlcmF0aW9uKG9iamVjdFN0b3JlLCBjYWxsYmFja3MpKTsKLSAg
ICB9Ci0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCop
OwotcHJpdmF0ZToKLSAgICBPYmplY3RTdG9yZUNsZWFyT3BlcmF0aW9uKFBhc3NSZWZQdHI8SURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiBjYWxsYmFja3MpCi0gICAgICAgIDogbV9vYmplY3RTdG9yZShvYmplY3RTdG9yZSkKLSAg
ICAgICAgLCBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCi0gICAgewotICAgIH0KLQotICAgIFJlZlB0
cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBtX29iamVjdFN0b3JlOwotICAgIFJlZlB0cjxJ
REJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOwotfTsKLQogY2xhc3MgSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6Q3JlYXRlSW5kZXhPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbDo6T3BlcmF0aW9uIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc093blB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQkluZGV4QmFj
a2VuZEltcGw+IGluZGV4KQpAQCAtMTg0LDUwICs4MCw2IEBAIHByaXZhdGU6CiAgICAgUmVmUHRy
PElEQkluZGV4QmFja2VuZEltcGw+IG1faW5kZXg7CiB9OwogCi1jbGFzcyBJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjpPcGVuT2JqZWN0U3RvcmVDdXJzb3JPcGVyYXRpb24gOiBwdWJsaWMgSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMg
UGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQ
YXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVm
UHRyPElEQktleVJhbmdlPiByYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uLCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2U6OlRhc2tUeXBlIHRhc2tUeXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UHRyKG5ldyBPcGVuT2JqZWN0U3RvcmVDdXJzb3JPcGVyYXRpb24ob2JqZWN0U3RvcmUsIHJhbmdl
LCBkaXJlY3Rpb24sIGNhbGxiYWNrcywgdGFza1R5cGUpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2
b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOwotcHJpdmF0ZToKLSAgICBP
cGVuT2JqZWN0U3RvcmVDdXJzb3JPcGVyYXRpb24oUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2UsIElE
QkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNh
bGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSB0YXNrVHlw
ZSkKLSAgICAgICAgOiBtX29iamVjdFN0b3JlKG9iamVjdFN0b3JlKQotICAgICAgICAsIG1fcmFu
Z2UocmFuZ2UpCi0gICAgICAgICwgbV9kaXJlY3Rpb24oZGlyZWN0aW9uKQotICAgICAgICAsIG1f
Y2FsbGJhY2tzKGNhbGxiYWNrcykKLSAgICAgICAgLCBtX3Rhc2tUeXBlKHRhc2tUeXBlKQotICAg
IHsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gbV9vYmpl
Y3RTdG9yZTsKLSAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IG1fcmFuZ2U7Ci0gICAgSURCQ3Vyc29y
OjpEaXJlY3Rpb24gbV9kaXJlY3Rpb247Ci0gICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxs
YmFja3M7Ci0gICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSBtX3Rh
c2tUeXBlOwotfTsKLQotY2xhc3MgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6T2JqZWN0U3Rv
cmVDb3VudE9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVy
YXRpb24gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHJhbmdlLCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UHRyKG5ldyBPYmplY3RTdG9yZUNvdW50T3BlcmF0aW9uKG9iamVjdFN0b3JlLCByYW5nZSwg
Y2FsbGJhY2tzKSk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGwqKTsKLXByaXZhdGU6Ci0gICAgT2JqZWN0U3RvcmVDb3VudE9wZXJhdGlv
bihQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNz
UmVmUHRyPElEQktleVJhbmdlPiByYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxi
YWNrcykKLSAgICAgICAgOiBtX29iamVjdFN0b3JlKG9iamVjdFN0b3JlKQotICAgICAgICAsIG1f
cmFuZ2UocmFuZ2UpCi0gICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQotICAgIHsKLSAg
ICB9Ci0KLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gbV9vYmplY3RTdG9y
ZTsKLSAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IG1fcmFuZ2U7Ci0gICAgUmVmUHRyPElEQkNhbGxi
YWNrcz4gbV9jYWxsYmFja3M7Ci19OwotCiBjbGFzcyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
OjpDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGw6Ok9wZXJhdGlvbiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tl
bmRJbXBsPiBpbmRleCkKQEAgLTI4NCw2MyArMTM2LDYgQEAgSURCT2JqZWN0U3RvcmVNZXRhZGF0
YSBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjptZXRhZGF0YSgpIGNvbnN0CiAgICAgcmV0dXJu
IG1ldGFkYXRhOwogfQogCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmdldChQYXNz
UmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBy
cENhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0
ciwgRXhjZXB0aW9uQ29kZSYpCi17Ci0gICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpnZXQiKTsKLSAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBD
YWxsYmFja3M7Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0
aW9uID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6ZnJvbSh0cmFuc2FjdGlvblB0cik7Ci0g
ICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhPYmplY3RTdG9yZVJldHJpZXZhbE9wZXJhdGlv
bjo6Y3JlYXRlKHRoaXMsIGtleVJhbmdlLCBjYWxsYmFja3MpKTsKLX0KLQotdm9pZCBJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsOjpPYmplY3RTdG9yZVJldHJpZXZhbE9wZXJhdGlvbjo6cGVyZm9y
bShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKLXsKLSAgICBJREJfVFJB
Q0UoIk9iamVjdFN0b3JlUmV0cmlldmFsT3BlcmF0aW9uIik7Ci0gICAgUmVmUHRyPElEQktleT4g
a2V5OwotICAgIGlmIChtX2tleVJhbmdlLT5pc09ubHlLZXkoKSkKLSAgICAgICAga2V5ID0gbV9r
ZXlSYW5nZS0+bG93ZXIoKTsKLSAgICBlbHNlIHsKLSAgICAgICAgUmVmUHRyPElEQkJhY2tpbmdT
dG9yZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX29iamVjdFN0b3JlLT5iYWNraW5n
U3RvcmUoKS0+b3Blbk9iamVjdFN0b3JlQ3Vyc29yKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVU
cmFuc2FjdGlvbigpLCBtX29iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG1fb2JqZWN0U3RvcmUt
PmlkKCksIG1fa2V5UmFuZ2UuZ2V0KCksIElEQkN1cnNvcjo6TkVYVCk7Ci0gICAgICAgIGlmICgh
YmFja2luZ1N0b3JlQ3Vyc29yKSB7Ci0gICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNz
KCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAga2V5ID0gYmFja2lu
Z1N0b3JlQ3Vyc29yLT5rZXkoKTsKLSAgICB9Ci0KLSAgICBWZWN0b3I8dWludDhfdD4gd2lyZURh
dGE7Ci0gICAgYm9vbCBvayA9IG1fb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5nZXRSZWNv
cmQodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fb2JqZWN0U3RvcmUt
PmRhdGFiYXNlSWQoKSwgbV9vYmplY3RTdG9yZS0+aWQoKSwgKmtleSwgd2lyZURhdGEpOwotICAg
IGlmICghb2spIHsKLSAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJv
cjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBl
cnJvciBpbiBnZXRSZWNvcmQuIikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICh3
aXJlRGF0YS5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcygpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1fb2JqZWN0U3RvcmUtPmF1dG9JbmNy
ZW1lbnQoKSAmJiAhbV9vYmplY3RTdG9yZS0+a2V5UGF0aCgpLmlzTnVsbCgpKSB7Ci0gICAgICAg
IG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9t
V2lyZUJ5dGVzKHdpcmVEYXRhKSwga2V5LCBtX29iamVjdFN0b3JlLT5rZXlQYXRoKCkpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9tV2lyZUJ5dGVzKHdpcmVEYXRhKSk7Ci19Ci0KLXZvaWQg
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlw
dFZhbHVlPiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUHV0TW9kZSBwdXRNb2RlLCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4
SWRzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYgaW5kZXhLZXlzKQotewotICAgIElEQl9UUkFD
RSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0Iik7Ci0KLSAgICBSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6
ZnJvbSh0cmFuc2FjdGlvblB0cik7Ci0gICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgIT0g
SURCVHJhbnNhY3Rpb246OlJFQURfT05MWSk7Ci0KLSAgICBPd25QdHI8VmVjdG9yPGludDY0X3Q+
ID4gbmV3SW5kZXhJZHMgPSBhZG9wdFB0cihuZXcgVmVjdG9yPGludDY0X3Q+KGluZGV4SWRzKSk7
Ci0gICAgT3duUHRyPFZlY3RvcjxJbmRleEtleXM+ID4gbmV3SW5kZXhLZXlzID0gYWRvcHRQdHIo
bmV3IFZlY3RvcjxJbmRleEtleXM+KGluZGV4S2V5cykpOwotCi0gICAgQVNTRVJUKGF1dG9JbmNy
ZW1lbnQoKSB8fCBrZXkuZ2V0KCkpOwotCi0gICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhP
YmplY3RTdG9yZVN0b3JhZ2VPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCB2YWx1ZSwga2V5LCBwdXRN
b2RlLCBjYWxsYmFja3MsIG5ld0luZGV4SWRzLnJlbGVhc2UoKSwgbmV3SW5kZXhLZXlzLnJlbGVh
c2UoKSkpOwotfQotCiBib29sIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OkluZGV4V3JpdGVy
Ojp2ZXJpZnlJbmRleEtleXMoSURCQmFja2luZ1N0b3JlJiBiYWNraW5nU3RvcmUsIElEQkJhY2tp
bmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBib29sJiBjYW5BZGRLZXlzLCBj
b25zdCBJREJLZXkqIHByaW1hcnlLZXksIFN0cmluZyogZXJyb3JNZXNzYWdlKSBjb25zdAogewog
ICAgIGNhbkFkZEtleXMgPSBmYWxzZTsKQEAgLTQxNywxODggKzIxMiwxMSBAQCBib29sIElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6Om1ha2VJbmRleFdyaXRlcnMoUGFzc1JlZlB0cjxJREJUcmFu
c2FjdGlvbkJhY2tlbgogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIElEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6OnNldEluZGV4S2V5cyhQYXNzUmVmUHRyPElEQktleT4gcHJwUHJpbWFyeUtl
eSwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPEluZGV4S2V5
cz4mIGluZGV4S2V5cywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlv
blB0cikKLXsKLSAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnNldElu
ZGV4S2V5cyIpOwotICAgIFJlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkgPSBwcnBQcmltYXJ5S2V5
OwotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IElE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmZyb20odHJhbnNhY3Rpb25QdHIpOwotICAgIGlmICh0
cmFuc2FjdGlvbi0+aXNGaW5pc2hlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBGSVhN
RTogVGhpcyBtZXRob2QgY291bGQgYmUgYXN5bmNocm9ub3VzLCBidXQgd2UgbmVlZCB0byBldmFs
dWF0ZSBpZiBpdCdzIHdvcnRoIHRoZSBleHRyYSBjb21wbGV4aXR5LgotICAgIElEQkJhY2tpbmdT
dG9yZTo6UmVjb3JkSWRlbnRpZmllciByZWNvcmRJZGVudGlmaWVyOwotICAgIGJvb2wgZm91bmQg
PSBmYWxzZTsKLSAgICBib29sIG9rID0gYmFja2luZ1N0b3JlKCktPmtleUV4aXN0c0luT2JqZWN0
U3RvcmUodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIGRhdGFiYXNlSWQo
KSwgaWQoKSwgKnByaW1hcnlLZXksICZyZWNvcmRJZGVudGlmaWVyLCBmb3VuZCk7Ci0gICAgaWYg
KCFvaykgewotICAgICAgICBMT0dfRVJST1IoImtleUV4aXN0c0luT2JqZWN0U3RvcmUgcmVwb3J0
ZWQgYW4gZXJyb3IiKTsKLSAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KElEQkRhdGFiYXNlRXJy
b3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwg
ZXJyb3Igc2V0dGluZyBpbmRleCBrZXlzLiIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICBpZiAoIWZvdW5kKSB7Ci0gICAgICAgIFJlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBlcnJvciA9
IElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVy
cm9yLCBTdHJpbmc6OmZvcm1hdCgiSW50ZXJuYWwgZXJyb3Igc2V0dGluZyBpbmRleCBrZXlzIGZv
ciBvYmplY3Qgc3RvcmUgJyVzJy4iLCBuYW1lKCkudXRmOCgpLmRhdGEoKSkpOwotICAgICAgICB0
cmFuc2FjdGlvbi0+YWJvcnQoZXJyb3IucmVsZWFzZSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIFZlY3RvcjxPd25QdHI8SW5kZXhXcml0ZXI+ID4gaW5kZXhXcml0ZXJzOwotICAg
IFN0cmluZyBlcnJvck1lc3NhZ2U7Ci0gICAgYm9vbCBvYmV5c0NvbnN0cmFpbnRzID0gZmFsc2U7
Ci0gICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gc3RvcmUgPSBiYWNraW5nU3RvcmUoKTsKLSAg
ICBib29sIGJhY2tpbmdTdG9yZVN1Y2Nlc3MgPSBtYWtlSW5kZXhXcml0ZXJzKHRyYW5zYWN0aW9u
LCBzdG9yZS5nZXQoKSwgZGF0YWJhc2VJZCgpLCBtZXRhZGF0YSgpLCBwcmltYXJ5S2V5LCBmYWxz
ZSwgaW5kZXhJZHMsIGluZGV4S2V5cywgJmluZGV4V3JpdGVycywgJmVycm9yTWVzc2FnZSwgb2Jl
eXNDb25zdHJhaW50cyk7Ci0gICAgaWYgKCFiYWNraW5nU3RvcmVTdWNjZXNzKSB7Ci0gICAgICAg
IHRyYW5zYWN0aW9uLT5hYm9ydChJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VF
eGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yOiBiYWNraW5nIHN0b3JlIGVy
cm9yIHVwZGF0aW5nIGluZGV4IGtleXMuIikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IGlmICghb2JleXNDb25zdHJhaW50cykgewotICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoSURC
RGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDb25zdHJhaW50RXJy
b3IsIGVycm9yTWVzc2FnZSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBpbmRleFdyaXRlcnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgSW5k
ZXhXcml0ZXIqIGluZGV4V3JpdGVyID0gaW5kZXhXcml0ZXJzW2ldLmdldCgpOwotICAgICAgICBp
bmRleFdyaXRlci0+d3JpdGVJbmRleEtleXMocmVjb3JkSWRlbnRpZmllciwgKmJhY2tpbmdTdG9y
ZSgpLCB0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgZGF0YWJhc2VJZCgp
LCBtX21ldGFkYXRhLmlkKTsKLSAgICB9Ci19Ci0KLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6c2V0SW5kZXhlc1JlYWR5KGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMsIElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25JbnRlcmZhY2UpCi17Ci0g
ICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpzZXRJbmRleGVzUmVhZHki
KTsKLQotICAgIE93blB0cjxWZWN0b3I8aW50NjRfdD4gPiBuZXdJbmRleElkcyA9IGFkb3B0UHRy
KG5ldyBWZWN0b3I8aW50NjRfdD4oaW5kZXhJZHMpKTsKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpm
cm9tKHRyYW5zYWN0aW9uSW50ZXJmYWNlKTsKLSAgICBpZiAodHJhbnNhY3Rpb24tPmlzRmluaXNo
ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVU
YXNrKElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZTo6UHJlZW1wdGl2ZVRhc2ssIE9iamVj
dFN0b3JlSW5kZXhlc1JlYWR5T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgbmV3SW5kZXhJZHMucmVs
ZWFzZSgpKSkpCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi12b2lkIElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6Ok9iamVjdFN0b3JlSW5kZXhlc1JlYWR5T3BlcmF0aW9uOjpw
ZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQotewotICAgIElE
Ql9UUkFDRSgiT2JqZWN0U3RvcmVJbmRleGVzUmVhZHlPcGVyYXRpb24iKTsKLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1fcG9wSW5kZXhJZHMtPnNpemUoKTsgKytpKQotICAgICAgICB0cmFu
c2FjdGlvbi0+ZGlkQ29tcGxldGVQcmVlbXB0aXZlRXZlbnQoKTsKLX0KLQotdm9pZCBJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsOjpPYmplY3RTdG9yZVN0b3JhZ2VPcGVyYXRpb246OnBlcmZvcm0o
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24pCi17Ci0gICAgSURCX1RSQUNF
KCJPYmplY3RTdG9yZVN0b3JhZ2VPcGVyYXRpb24iKTsKLSAgICBBU1NFUlQodHJhbnNhY3Rpb24t
Pm1vZGUoKSAhPSBJREJUcmFuc2FjdGlvbjo6UkVBRF9PTkxZKTsKLSAgICBBU1NFUlQobV9wb3BJ
bmRleElkcyAmJiBtX3BvcEluZGV4S2V5cyAmJiBtX3BvcEluZGV4SWRzLT5zaXplKCkgPT0gbV9w
b3BJbmRleEtleXMtPnNpemUoKSk7Ci0gICAgY29uc3QgYm9vbCBhdXRvSW5jcmVtZW50ID0gbV9v
YmplY3RTdG9yZS0+YXV0b0luY3JlbWVudCgpOwotICAgIGJvb2wga2V5V2FzR2VuZXJhdGVkID0g
ZmFsc2U7Ci0KLSAgICBpZiAobV9wdXRNb2RlICE9IEN1cnNvclVwZGF0ZSAmJiBhdXRvSW5jcmVt
ZW50ICYmICFtX2tleSkgewotICAgICAgICBSZWZQdHI8SURCS2V5PiBhdXRvSW5jS2V5ID0gbV9v
YmplY3RTdG9yZS0+Z2VuZXJhdGVLZXkodHJhbnNhY3Rpb24pOwotICAgICAgICBrZXlXYXNHZW5l
cmF0ZWQgPSB0cnVlOwotICAgICAgICBpZiAoIWF1dG9JbmNLZXktPmlzVmFsaWQoKSkgewotICAg
ICAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpDb25zdHJhaW50RXJyb3IsICJNYXhpbXVtIGtleSBnZW5lcmF0
b3IgdmFsdWUgcmVhY2hlZC4iKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICAgICAgbV9rZXkgPSBhdXRvSW5jS2V5OwotICAgIH0KLQotICAgIEFTU0VSVChtX2tleSAmJiBt
X2tleS0+aXNWYWxpZCgpKTsKLQotICAgIElEQk9iamVjdFN0b3JlTWV0YWRhdGEgb2JqZWN0U3Rv
cmVNZXRhZGF0YSA9IG1fb2JqZWN0U3RvcmUtPm1ldGFkYXRhKCk7Ci0gICAgSURCQmFja2luZ1N0
b3JlOjpSZWNvcmRJZGVudGlmaWVyIHJlY29yZElkZW50aWZpZXI7Ci0gICAgUmVmUHRyPElEQkJh
Y2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlID0gbV9vYmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCk7
Ci0gICAgaWYgKG1fcHV0TW9kZSA9PSBBZGRPbmx5KSB7Ci0gICAgICAgIGJvb2wgZm91bmQgPSBm
YWxzZTsKLSAgICAgICAgYm9vbCBvayA9IGJhY2tpbmdTdG9yZS0+a2V5RXhpc3RzSW5PYmplY3RT
dG9yZSh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9vYmplY3RTdG9y
ZS0+ZGF0YWJhc2VJZCgpLCBtX29iamVjdFN0b3JlLT5pZCgpLCAqbV9rZXksICZyZWNvcmRJZGVu
dGlmaWVyLCBmb3VuZCk7Ci0gICAgICAgIGlmICghb2spIHsKLSAgICAgICAgICAgIG1fY2FsbGJh
Y2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3IgY2hlY2tpbmcga2V5IGV4aXN0ZW5jZS4i
KSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGZvdW5kKSB7
Ci0gICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVh
dGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkNvbnN0cmFpbnRFcnJvciwgIktleSBhbHJlYWR5IGV4
aXN0cyBpbiB0aGUgb2JqZWN0IHN0b3JlLiIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIFZlY3RvcjxPd25QdHI8SW5kZXhXcml0ZXI+ID4gaW5kZXhXcml0
ZXJzOwotICAgIFN0cmluZyBlcnJvck1lc3NhZ2U7Ci0gICAgYm9vbCBvYmV5c0NvbnN0cmFpbnRz
ID0gZmFsc2U7Ci0gICAgYm9vbCBiYWNraW5nU3RvcmVTdWNjZXNzID0gbWFrZUluZGV4V3JpdGVy
cyh0cmFuc2FjdGlvbiwgYmFja2luZ1N0b3JlLmdldCgpLCBtX29iamVjdFN0b3JlLT5kYXRhYmFz
ZUlkKCksIG9iamVjdFN0b3JlTWV0YWRhdGEsIG1fa2V5LCBrZXlXYXNHZW5lcmF0ZWQsICptX3Bv
cEluZGV4SWRzLCAqbV9wb3BJbmRleEtleXMsICZpbmRleFdyaXRlcnMsICZlcnJvck1lc3NhZ2Us
IG9iZXlzQ29uc3RyYWludHMpOwotICAgIGlmICghYmFja2luZ1N0b3JlU3VjY2VzcykgewotICAg
ICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0
YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yOiBiYWNraW5nIHN0
b3JlIGVycm9yIHVwZGF0aW5nIGluZGV4IGtleXMuIikpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIGlmICghb2JleXNDb25zdHJhaW50cykgewotICAgICAgICBtX2NhbGxiYWNrcy0+b25F
cnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkNvbnN0
cmFpbnRFcnJvciwgZXJyb3JNZXNzYWdlKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICAvLyBCZWZvcmUgdGhpcyBwb2ludCwgZG9uJ3QgZG8gYW55IG11dGF0aW9uLiAgQWZ0ZXIgdGhp
cyBwb2ludCwgcm9sbGJhY2sgdGhlIHRyYW5zYWN0aW9uIGluIGNhc2Ugb2YgZXJyb3IuCi0KLSAg
ICBiYWNraW5nU3RvcmVTdWNjZXNzID0gbV9vYmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCktPnB1
dFJlY29yZCh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9vYmplY3RT
dG9yZS0+ZGF0YWJhc2VJZCgpLCBtX29iamVjdFN0b3JlLT5pZCgpLCAqbV9rZXksIG1fdmFsdWUt
PnRvV2lyZUJ5dGVzKCksICZyZWNvcmRJZGVudGlmaWVyKTsKLSAgICBpZiAoIWJhY2tpbmdTdG9y
ZVN1Y2Nlc3MpIHsKLSAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJv
cjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBl
cnJvcjogYmFja2luZyBzdG9yZSBlcnJvciBwZXJmb3JtaW5nIHB1dC9hZGQuIikpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbmRleFdyaXRl
cnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgSW5kZXhXcml0ZXIqIGluZGV4V3JpdGVyID0gaW5k
ZXhXcml0ZXJzW2ldLmdldCgpOwotICAgICAgICBpbmRleFdyaXRlci0+d3JpdGVJbmRleEtleXMo
cmVjb3JkSWRlbnRpZmllciwgKm1fb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLCB0cmFuc2Fj
dGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9vYmplY3RTdG9yZS0+ZGF0YWJhc2VJ
ZCgpLCBtX29iamVjdFN0b3JlLT5tX21ldGFkYXRhLmlkKTsKLSAgICB9Ci0KLSAgICBpZiAoYXV0
b0luY3JlbWVudCAmJiBtX3B1dE1vZGUgIT0gQ3Vyc29yVXBkYXRlICYmIG1fa2V5LT50eXBlKCkg
PT0gSURCS2V5OjpOdW1iZXJUeXBlKSB7Ci0gICAgICAgIGJvb2wgb2sgPSBtX29iamVjdFN0b3Jl
LT51cGRhdGVLZXlHZW5lcmF0b3IodHJhbnNhY3Rpb24sIG1fa2V5LmdldCgpLCAha2V5V2FzR2Vu
ZXJhdGVkKTsKLSAgICAgICAgaWYgKCFvaykgewotICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9u
RXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtu
b3duRXJyb3IsICJJbnRlcm5hbCBlcnJvciB1cGRhdGluZyBrZXkgZ2VuZXJhdG9yLiIpKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIG1fY2FsbGJhY2tzLT5v
blN1Y2Nlc3MobV9rZXkucmVsZWFzZSgpKTsKLX0KLQotdm9pZCBJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpkZWxldGVGdW5jdGlvbihQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwgRXhjZXB0aW9uQ29kZSYpCi17Ci0gICAgSURCX1RS
QUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGUiKTsKLQotICAgIFJlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw6OmZyb20odHJhbnNhY3Rpb25QdHIpOwotICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+
bW9kZSgpICE9IElEQlRyYW5zYWN0aW9uOjpSRUFEX09OTFkpOwotICAgIHRyYW5zYWN0aW9uLT5z
Y2hlZHVsZVRhc2soT2JqZWN0U3RvcmVEZWxldGlvbk9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIGtl
eVJhbmdlLCBjYWxsYmFja3MpKTsKLX0KLQotdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
OjpPYmplY3RTdG9yZURlbGV0aW9uT3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGwqIHRyYW5zYWN0aW9uKQotewotICAgIElEQl9UUkFDRSgiT2JqZWN0U3RvcmVEZWxl
dGlvbk9wZXJhdGlvbiIpOwotCi0gICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBi
YWNraW5nU3RvcmVDdXJzb3IgPSBtX29iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+b3Blbk9i
amVjdFN0b3JlQ3Vyc29yKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBt
X29iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG1fb2JqZWN0U3RvcmUtPmlkKCksIG1fa2V5UmFu
Z2UuZ2V0KCksIElEQkN1cnNvcjo6TkVYVCk7Ci0gICAgaWYgKGJhY2tpbmdTdG9yZUN1cnNvcikg
ewotCi0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIG1fb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9y
ZSgpLT5kZWxldGVSZWNvcmQodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCks
IG1fb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgbV9vYmplY3RTdG9yZS0+aWQoKSwgYmFja2lu
Z1N0b3JlQ3Vyc29yLT5yZWNvcmRJZGVudGlmaWVyKCkpOwotCi0gICAgICAgIH0gd2hpbGUgKGJh
Y2tpbmdTdG9yZUN1cnNvci0+Y29udGludWVGdW5jdGlvbigwKSk7Ci0gICAgfQotCi0gICAgbV9j
YWxsYmFja3MtPm9uU3VjY2VzcygpOwotfQotCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6OmNsZWFyKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIEV4Y2VwdGlvbkNvZGUmKQotewot
ICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y2xlYXIiKTsKLQotICAg
IFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw6OmZyb20odHJhbnNhY3Rpb25QdHIpOwotICAgIEFTU0VSVCh0cmFu
c2FjdGlvbi0+bW9kZSgpICE9IElEQlRyYW5zYWN0aW9uOjpSRUFEX09OTFkpOwotICAgIHRyYW5z
YWN0aW9uLT5zY2hlZHVsZVRhc2soT2JqZWN0U3RvcmVDbGVhck9wZXJhdGlvbjo6Y3JlYXRlKHRo
aXMsIGNhbGxiYWNrcykpOwotfQotCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Ok9i
amVjdFN0b3JlQ2xlYXJPcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bCogdHJhbnNhY3Rpb24pCi17Ci0gICAgSURCX1RSQUNFKCJPYmplY3RTdG9yZUNsZWFyT3BlcmF0
aW9uIik7Ci0gICAgbV9vYmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCktPmNsZWFyT2JqZWN0U3Rv
cmUodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fb2JqZWN0U3RvcmUt
PmRhdGFiYXNlSWQoKSwgbV9vYmplY3RTdG9yZS0+aWQoKSk7Ci0gICAgbV9jYWxsYmFja3MtPm9u
U3VjY2VzcygpOwotfQotCiBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y3JlYXRlSW5kZXgoaW50NjRfdCBpZCwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoLCBib29sIHVuaXF1ZSwgYm9vbCBt
dWx0aUVudHJ5LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRy
LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFtX2luZGV4
ZXMuY29udGFpbnMoaWQpLCAiSW5kZXhlcyBhbHJlYWR5IGNvbnRhaW4gJyVzJyIsIG5hbWUudXRm
OCgpLmRhdGEoKSk7CiAKLSAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXggPSBJ
REJJbmRleEJhY2tlbmRJbXBsOjpjcmVhdGUobV9kYXRhYmFzZSwgdGhpcywgSURCSW5kZXhNZXRh
ZGF0YShuYW1lLCBpZCwga2V5UGF0aCwgdW5pcXVlLCBtdWx0aUVudHJ5KSk7CisgICAgUmVmUHRy
PElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4ID0gSURCSW5kZXhCYWNrZW5kSW1wbDo6Y3JlYXRl
KG1fZGF0YWJhc2UsIElEQkluZGV4TWV0YWRhdGEobmFtZSwgaWQsIGtleVBhdGgsIHVuaXF1ZSwg
bXVsdGlFbnRyeSkpOwogICAgIEFTU0VSVChpbmRleC0+bmFtZSgpID09IG5hbWUpOwogCiAgICAg
UmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0gSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbDo6ZnJvbSh0cmFuc2FjdGlvblB0cik7CkBAIC02NTIsNjUgKzI3MCwx
MiBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OkRlbGV0ZUluZGV4T3BlcmF0aW9u
OjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFjawogICAgIG1fb2JqZWN0U3RvcmUtPmJhY2tpbmdT
dG9yZSgpLT5kZWxldGVJbmRleCh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24o
KSwgbV9vYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBtX29iamVjdFN0b3JlLT5pZCgpLCBtX2lu
ZGV4LT5pZCgpKTsKIH0KIAotdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpvcGVuQ3Vy
c29yKFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHJhbmdlLCBJREJDdXJzb3I6OkRpcmVjdGlvbiBk
aXJlY3Rpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUgdGFza1R5cGUsIElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIEV4Y2VwdGlvbkNvZGUmKQotewotICAg
IElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6b3BlbkN1cnNvciIpOwotICAg
IFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKLSAgICBSZWZQ
dHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsOjpmcm9tKHRyYW5zYWN0aW9uUHRyKTsKLSAgICB0cmFuc2FjdGlvbi0+c2No
ZWR1bGVUYXNrKE9wZW5PYmplY3RTdG9yZUN1cnNvck9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIHJh
bmdlLCBkaXJlY3Rpb24sIGNhbGxiYWNrcywgdGFza1R5cGUpKTsKLX0KLQotdm9pZCBJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsOjpPcGVuT2JqZWN0U3RvcmVDdXJzb3JPcGVyYXRpb246OnBlcmZv
cm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24pCi17Ci0gICAgSURCX1RS
QUNFKCJPcGVuT2JqZWN0U3RvcmVDdXJzb3IiKTsKLQotICAgIFJlZlB0cjxJREJCYWNraW5nU3Rv
cmU6OkN1cnNvcj4gYmFja2luZ1N0b3JlQ3Vyc29yID0gbV9vYmplY3RTdG9yZS0+YmFja2luZ1N0
b3JlKCktPm9wZW5PYmplY3RTdG9yZUN1cnNvcih0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJh
bnNhY3Rpb24oKSwgbV9vYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBtX29iamVjdFN0b3JlLT5p
ZCgpLCBtX3JhbmdlLmdldCgpLCBtX2RpcmVjdGlvbik7Ci0gICAgLy8gVGhlIGZyb250ZW5kIGhh
cyBiZWd1biBpbmRleGluZywgc28gdGhpcyBwYXVzZXMgdGhlIHRyYW5zYWN0aW9uCi0gICAgLy8g
dW50aWwgdGhlIGluZGV4aW5nIGlzIGNvbXBsZXRlLiBUaGlzIGNhbid0IGhhcHBlbiBhbnkgZWFy
bGllcgotICAgIC8vIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBzd2l0Y2ggdG8gZWFybHkgbW9k
ZSBpbiBjYXNlIG11bHRpcGxlCi0gICAgLy8gaW5kZXhlcyBhcmUgYmVpbmcgY3JlYXRlZCBpbiBh
IHJvdywgd2l0aCBwdXQoKSdzIGluIGJldHdlZW4uCi0gICAgaWYgKG1fdGFza1R5cGUgPT0gSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOjpQcmVlbXB0aXZlVGFzaykKLSAgICAgICAgdHJh
bnNhY3Rpb24tPmFkZFByZWVtcHRpdmVFdmVudCgpOwotICAgIGlmICghYmFja2luZ1N0b3JlQ3Vy
c29yKSB7Ci0gICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3Moc3RhdGljX2Nhc3Q8U2VyaWFs
aXplZFNjcmlwdFZhbHVlKj4oMCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUmVm
UHRyPElEQkN1cnNvckJhY2tlbmRJbXBsPiBjdXJzb3IgPSBJREJDdXJzb3JCYWNrZW5kSW1wbDo6
Y3JlYXRlKGJhY2tpbmdTdG9yZUN1cnNvci5yZWxlYXNlKCksIElEQkN1cnNvckJhY2tlbmRJbnRl
cmZhY2U6OktleUFuZFZhbHVlLCBtX3Rhc2tUeXBlLCB0cmFuc2FjdGlvbiwgbV9vYmplY3RTdG9y
ZS5nZXQoKSk7Ci0gICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhjdXJzb3IsIGN1cnNvci0+a2V5
KCksIGN1cnNvci0+cHJpbWFyeUtleSgpLCBjdXJzb3ItPnZhbHVlKCkpOwotfQotCi12b2lkIElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNvdW50KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHJh
bmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRpb25Db2RlJikKLXsKLSAg
ICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNvdW50Iik7Ci0gICAgUmVm
UHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOwotICAgIFJlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw6OmZyb20odHJhbnNhY3Rpb25QdHIpOwotICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVs
ZVRhc2soT2JqZWN0U3RvcmVDb3VudE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIHJhbmdlLCBjYWxs
YmFja3MpKTsKLX0KLQotdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpPYmplY3RTdG9y
ZUNvdW50T3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5z
YWN0aW9uKQotewotICAgIElEQl9UUkFDRSgiT2JqZWN0U3RvcmVDb3VudE9wZXJhdGlvbiIpOwot
ICAgIHVpbnQzMl90IGNvdW50ID0gMDsKLSAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJz
b3I+IGJhY2tpbmdTdG9yZUN1cnNvciA9IG1fb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5v
cGVuT2JqZWN0U3RvcmVLZXlDdXJzb3IodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0
aW9uKCksIG1fb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgbV9vYmplY3RTdG9yZS0+aWQoKSwg
bV9yYW5nZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhUKTsKLSAgICBpZiAoIWJhY2tpbmdTdG9yZUN1
cnNvcikgewotICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKGNvdW50KTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGRvIHsKLSAgICAgICAgKytjb3VudDsKLSAgICB9IHdoaWxl
IChiYWNraW5nU3RvcmVDdXJzb3ItPmNvbnRpbnVlRnVuY3Rpb24oMCkpOwotCi0gICAgbV9jYWxs
YmFja3MtPm9uU3VjY2Vzcyhjb3VudCk7Ci19Ci0KIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6bG9hZEluZGV4ZXMoKQogewogICAgIFZlY3RvcjxJREJJbmRleE1ldGFkYXRhPiBpbmRl
eGVzID0gYmFja2luZ1N0b3JlKCktPmdldEluZGV4ZXMoZGF0YWJhc2VJZCgpLCBtX21ldGFkYXRh
LmlkKTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5kZXhlcy5zaXplKCk7ICsraSkK
LSAgICAgICAgbV9pbmRleGVzLnNldChpbmRleGVzW2ldLmlkLCBJREJJbmRleEJhY2tlbmRJbXBs
OjpjcmVhdGUobV9kYXRhYmFzZSwgdGhpcywgaW5kZXhlc1tpXSkpOworICAgICAgICBtX2luZGV4
ZXMuc2V0KGluZGV4ZXNbaV0uaWQsIElEQkluZGV4QmFja2VuZEltcGw6OmNyZWF0ZShtX2RhdGFi
YXNlLCBpbmRleGVzW2ldKSk7CiB9CiAKIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6
Q3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsKiB0cmFuc2FjdGlvbikKQEAgLTcyNywxMSArMjkyLDExIEBAIHZvaWQgSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6RGVsZXRlSW5kZXhBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFu
c2FjdGlvCiAgICAgbV9vYmplY3RTdG9yZS0+bV9pbmRleGVzLnNldChtX2luZGV4LT5pZCgpLCBt
X2luZGV4KTsKIH0KIAotUGFzc1JlZlB0cjxJREJLZXk+IElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6OmdlbmVyYXRlS2V5KFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJh
bnNhY3Rpb24pCitQYXNzUmVmUHRyPElEQktleT4gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6
Z2VuZXJhdGVLZXkoUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSwgUGFz
c1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiwgaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCiB7CiAgICAgY29uc3QgaW50NjRfdCBt
YXhHZW5lcmF0b3JWYWx1ZSA9IDkwMDcxOTkyNTQ3NDA5OTJMTDsgLy8gTWF4aW11bSBpbnRlZ2Vy
IHN0b3JhYmxlIGFzIEVDTUFTY3JpcHQgbnVtYmVyLgogICAgIGludDY0X3QgY3VycmVudE51bWJl
cjsKLSAgICBib29sIG9rID0gYmFja2luZ1N0b3JlKCktPmdldEtleUdlbmVyYXRvckN1cnJlbnRO
dW1iZXIodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIGRhdGFiYXNlSWQo
KSwgaWQoKSwgY3VycmVudE51bWJlcik7CisgICAgYm9vbCBvayA9IGJhY2tpbmdTdG9yZS0+Z2V0
S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcih0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNh
Y3Rpb24oKSwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgY3VycmVudE51bWJlcik7CiAgICAg
aWYgKCFvaykgewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBnZXRLZXlHZW5lcmF0b3JD
dXJyZW50TnVtYmVyIik7CiAgICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZUludmFsaWQoKTsK
QEAgLTc0MiwxMCArMzA3LDEwIEBAIFBhc3NSZWZQdHI8SURCS2V5PiBJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjpnZW5lcmF0ZUtleShQYXNzUmVmUHRyPElEQlRyYW5zYWN0CiAgICAgcmV0dXJu
IElEQktleTo6Y3JlYXRlTnVtYmVyKGN1cnJlbnROdW1iZXIpOwogfQogCi1ib29sIElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OnVwZGF0ZUtleUdlbmVyYXRvcihQYXNzUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uLCBjb25zdCBJREJLZXkqIGtleSwgYm9vbCBj
aGVja0N1cnJlbnQpCitib29sIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnVwZGF0ZUtleUdl
bmVyYXRvcihQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlLCBQYXNzUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5KiBrZXksIGJvb2wgY2hl
Y2tDdXJyZW50KQogewogICAgIEFTU0VSVChrZXkgJiYga2V5LT50eXBlKCkgPT0gSURCS2V5OjpO
dW1iZXJUeXBlKTsKLSAgICByZXR1cm4gYmFja2luZ1N0b3JlKCktPm1heWJlVXBkYXRlS2V5R2Vu
ZXJhdG9yQ3VycmVudE51bWJlcih0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24o
KSwgZGF0YWJhc2VJZCgpLCBpZCgpLCBzdGF0aWNfY2FzdDxpbnQ2NF90PihmbG9vcihrZXktPm51
bWJlcigpKSkgKyAxLCBjaGVja0N1cnJlbnQpOworICAgIHJldHVybiBiYWNraW5nU3RvcmUtPm1h
eWJlVXBkYXRlS2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcih0cmFuc2FjdGlvbi0+YmFja2luZ1N0
b3JlVHJhbnNhY3Rpb24oKSwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgc3RhdGljX2Nhc3Q8
aW50NjRfdD4oZmxvb3Ioa2V5LT5udW1iZXIoKSkpICsgMSwgY2hlY2tDdXJyZW50KTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oCmluZGV4IGRjZjcw
MTllMWJiYmRlYzcwODA2OTEwNGY0YjkwYmVlN2QwZWFlZjcuLmIzZTJlNTUwMTZlMTMxMmYzMzkw
YTAxNzZkZWU3ODE2OWE5ODJiZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgKQEAgLTYyLDI2
ICs2MiwyMyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgLy8gSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW50ZXJmYWNlCi0gICAgdmlydHVhbCB2b2lkIGdldChQYXNzUmVmUHRyPElEQktleVJhbmdlPiwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2Uq
LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdmlydHVhbCB2b2lkIHB1dChQYXNzUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NSZWZQdHI8SURCS2V5PiwgUHV0TW9kZSwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBjb25zdCBW
ZWN0b3I8aW50NjRfdD4mLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYpOworICAgIHZpcnR1YWwg
dm9pZCBnZXQoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpIHsgQVNT
RVJUX05PVF9SRUFDSEVEKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcHV0KFBhc3NSZWZQdHI8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxJREJLZXk+LCBQdXRNb2RlLCBQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIGNvbnN0
IFZlY3RvcjxpbnQ2NF90PiYsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JikgeyBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsgfQogCi0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZUZ1bmN0aW9uKFBhc3NSZWZQ
dHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2aXJ0dWFsIHZvaWQgY2xl
YXIoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2UqLCBFeGNlcHRpb25Db2RlJik7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUZ1bmN0aW9uKFBh
c3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSB7IEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOyB9CisgICAgdmlydHVhbCB2b2lkIGNsZWFyKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpIHsgQVNT
RVJUX05PVF9SRUFDSEVEKCk7IH0KIAogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJJbmRleEJh
Y2tlbmRJbnRlcmZhY2U+IGNyZWF0ZUluZGV4KGludDY0X3QsIGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgSURCS2V5UGF0aCYsIGJvb2wgdW5pcXVlLCBib29sIG11bHRpRW50cnksIElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2aXJ0dWFsIHZv
aWQgc2V0SW5kZXhLZXlzKFBhc3NSZWZQdHI8SURCS2V5PiBwcnBQcmltYXJ5S2V5LCBjb25zdCBW
ZWN0b3I8aW50NjRfdD4mLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYsIElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZSopOwotICAgIHZpcnR1YWwgdm9pZCBzZXRJbmRleGVzUmVhZHkoY29u
c3QgVmVjdG9yPGludDY0X3Q+JiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKik7Cisg
ICAgdmlydHVhbCB2b2lkIHNldEluZGV4S2V5cyhQYXNzUmVmUHRyPElEQktleT4gcHJwUHJpbWFy
eUtleSwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiwgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mLCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9
CisgICAgdmlydHVhbCB2b2lkIHNldEluZGV4ZXNSZWFkeShjb25zdCBWZWN0b3I8aW50NjRfdD4m
LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OyB9CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gaW5k
ZXgoaW50NjRfdCk7CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUluZGV4KGludDY0X3QsIElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKIAotICAgIHZpcnR1
YWwgdm9pZCBvcGVuQ3Vyc29yKFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBJREJDdXJzb3I6OkRp
cmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2U6OlRhc2tUeXBlLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNl
cHRpb25Db2RlJik7Ci0gICAgdmlydHVhbCB2b2lkIGNvdW50KFBhc3NSZWZQdHI8SURCS2V5UmFu
Z2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgb3BlbkN1cnNvcihQYXNz
UmVmUHRyPElEQktleVJhbmdlPiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24sIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSwgSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpIHsgQVNTRVJUX05P
VF9SRUFDSEVEKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY291bnQoUGFzc1JlZlB0cjxJREJLZXlS
YW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KIAogICAg
IHN0YXRpYyBib29sIHBvcHVsYXRlSW5kZXgoSURCQmFja2luZ1N0b3JlJiwgaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5k
SW1wbD4pOwogCi0gICAgY29uc3QgSW5kZXhNYXA6Oml0ZXJhdG9yIGl0ZXJJbmRleGVzQmVnaW4o
KSB7IHJldHVybiBtX2luZGV4ZXMuYmVnaW4oKTsgfTsKLSAgICBjb25zdCBJbmRleE1hcDo6aXRl
cmF0b3IgaXRlckluZGV4ZXNFbmQoKSB7IHJldHVybiBtX2luZGV4ZXMuZW5kKCk7IH07Ci0KICAg
ICBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG1ldGFkYXRhKCkgY29uc3Q7CiAgICAgY29uc3QgU3Ry
aW5nJiBuYW1lKCkgeyByZXR1cm4gbV9tZXRhZGF0YS5uYW1lOyB9CiAgICAgY29uc3QgSURCS2V5
UGF0aCYga2V5UGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0YWRhdGEua2V5UGF0aDsgfQpAQCAt
MTE0LDIyICsxMTEsMTYgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGJvb2wgbWFrZUluZGV4V3Jp
dGVycyhQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+LCBJREJCYWNraW5nU3Rv
cmUqLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmLCBQ
YXNzUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSwgYm9vbCBrZXlXYXNHZW5lcmF0ZWQsIGNvbnN0
IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMsIGNvbnN0IFZlY3RvcjxJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbnRlcmZhY2U6OkluZGV4S2V5cz4mLCBWZWN0b3I8T3duUHRyPEluZGV4V3JpdGVyPiA+
KiBpbmRleFdyaXRlcnMsIFN0cmluZyogZXJyb3JNZXNzYWdlLCBib29sJiBjb21wbGV0ZWQpIFdB
Uk5fVU5VU0VEX1JFVFVSTjsKIAorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQktleT4gZ2VuZXJh
dGVLZXkoUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGw+LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCk7CisgICAgc3RhdGljIGJvb2wgdXBkYXRlS2V5R2VuZXJhdG9yKFBhc3NSZWZQdHI8SURCQmFj
a2luZ1N0b3JlPiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiwgaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSosIGJvb2wg
Y2hlY2tDdXJyZW50KTsKKwogcHJpdmF0ZToKICAgICBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
KGNvbnN0IElEQkRhdGFiYXNlQmFja2VuZEltcGwqLCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFk
YXRhJik7CiAKICAgICB2b2lkIGxvYWRJbmRleGVzKCk7Ci0gICAgUGFzc1JlZlB0cjxJREJLZXk+
IGdlbmVyYXRlS2V5KFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOwotICAg
IGJvb2wgdXBkYXRlS2V5R2VuZXJhdG9yKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbD4sIGNvbnN0IElEQktleSosIGJvb2wgY2hlY2tDdXJyZW50KTsKLQotICAgIGNsYXNzIE9i
amVjdFN0b3JlUmV0cmlldmFsT3BlcmF0aW9uOwotICAgIGNsYXNzIE9iamVjdFN0b3JlU3RvcmFn
ZU9wZXJhdGlvbjsKLSAgICBjbGFzcyBPYmplY3RTdG9yZUluZGV4ZXNSZWFkeU9wZXJhdGlvbjsK
LSAgICBjbGFzcyBPYmplY3RTdG9yZURlbGV0aW9uT3BlcmF0aW9uOwotICAgIGNsYXNzIE9iamVj
dFN0b3JlQ2xlYXJPcGVyYXRpb247CisKICAgICBjbGFzcyBDcmVhdGVJbmRleE9wZXJhdGlvbjsK
ICAgICBjbGFzcyBEZWxldGVJbmRleE9wZXJhdGlvbjsKLSAgICBjbGFzcyBPcGVuT2JqZWN0U3Rv
cmVDdXJzb3JPcGVyYXRpb247Ci0gICAgY2xhc3MgT2JqZWN0U3RvcmVDb3VudE9wZXJhdGlvbjsK
IAogICAgIC8vIFdoZW4gYSAidmVyc2lvbmNoYW5nZSIgdHJhbnNhY3Rpb24gYWJvcnRzLCB0aGVz
ZSByZXN0b3JlIHRoZSBiYWNrLWVuZCBvYmplY3QgaGllcmFyY2h5LgogICAgIGNsYXNzIENyZWF0
ZUluZGV4QWJvcnRPcGVyYXRpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAKaW5kZXggMDQ1MjVlYjY1ZWUwYzVlMjhjZWRjYzA2
ZTc4M2M3MTViY2YwODdiMy4uYWZhNDVlMjRiMDQxZWY4MjVjNjU3YTYxMTk1MTQwZDE0NTc0MTJm
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNh
Y3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5z
YWN0aW9uLmNwcApAQCAtNDYzLDYgKzQ2MywxMSBAQCBFdmVudFRhcmdldERhdGEqIElEQlRyYW5z
YWN0aW9uOjplbnN1cmVFdmVudFRhcmdldERhdGEoKQogICAgIHJldHVybiAmbV9ldmVudFRhcmdl
dERhdGE7CiB9CiAKK0lEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZSogSURCVHJhbnNhY3Rpb246
OmJhY2tlbmREQigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRiKCktPmJhY2tlbmQoKTsKK30KKwog
fQogCiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5oIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uaAppbmRleCBlMTI3NWI4NGE5
NDU3NGNkNGI5OTNjNTEwYzQ4M2NiZDU3MTFkYjQ3Li5kZjQxYmJiMGVmNTMzODFjMGNlMjcxYjdk
ZDQ1NmZkYmY5ZWUwNDA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJUcmFuc2FjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQlRyYW5zYWN0aW9uLmgKQEAgLTQ3LDYgKzQ3LDcgQEAgY2xhc3MgSURCRGF0YWJhc2U7
CiBjbGFzcyBJREJPYmplY3RTdG9yZTsKIGNsYXNzIElEQk9wZW5EQlJlcXVlc3Q7CiBjbGFzcyBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U7CitjbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJ
bnRlcmZhY2U7CiBzdHJ1Y3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YTsKIAogY2xhc3MgSURCVHJh
bnNhY3Rpb24gOiBwdWJsaWMgU2NyaXB0V3JhcHBhYmxlLCBwdWJsaWMgSURCVHJhbnNhY3Rpb25D
YWxsYmFja3MsIHB1YmxpYyBFdmVudFRhcmdldCwgcHVibGljIEFjdGl2ZURPTU9iamVjdCB7CkBA
IC03MSw2ICs3Miw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBt
b2RlVG9TdHJpbmcoTW9kZSwgRXhjZXB0aW9uQ29kZSYpOwogCiAgICAgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlKiBiYWNrZW5kKCkgY29uc3Q7CisgICAgSURCRGF0YWJhc2VCYWNrZW5k
SW50ZXJmYWNlKiBiYWNrZW5kREIoKSBjb25zdDsKKwogICAgIGludDY0X3QgaWQoKSBjb25zdCB7
IHJldHVybiBtX2lkOyB9CiAgICAgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dGUgPT0gQWN0aXZlOyB9CiAgICAgYm9vbCBpc0ZpbmlzaGVkKCkgY29uc3QgeyByZXR1cm4gbV9z
dGF0ZSA9PSBGaW5pc2hlZDsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oCmluZGV4IDFlMjJiNzE3
MGYyNTU1OTY4YzM3ODkxZWJjZGVlYTlhMWVjNmMxMTIuLmM3OWRlZmY0ODg0ODA0ZjdmMzdhZjAz
MjM1NDA3ODkyNzM5MWEzYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmgKQEAgLTc3LDYgKzc3
LDggQEAgcHVibGljOgogICAgIElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIGJhY2tpbmdT
dG9yZVRyYW5zYWN0aW9uKCkgeyByZXR1cm4gJm1fdHJhbnNhY3Rpb247IH0KICAgICBpbnQ2NF90
IGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQogCisgICAgSURCRGF0YWJhc2VCYWNrZW5kSW1w
bCogZGF0YWJhc2UoKSBjb25zdCB7IHJldHVybiBtX2RhdGFiYXNlLmdldCgpOyB9CisKIHByaXZh
dGU6CiAgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbChpbnQ2NF90IGlkLCBjb25zdCBIYXNo
U2V0PGludDY0X3Q+JiBvYmplY3RTdG9yZUlkcywgSURCVHJhbnNhY3Rpb246Ok1vZGUsIElEQkRh
dGFiYXNlQmFja2VuZEltcGwqKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViSURCRGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYklEQkRhdGFiYXNlLmgKaW5kZXggZTYyNGZlNThkODE0Y2MyM2MyNmM3NTNmMTY3NzhhODA3
NWI3NTg3OS4uYzMxYTU0ZDMwZDFlOTFlY2FmYmFlNjM5Nzc5NTE3ODIzMTE4ZDEzMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSURCRGF0YWJhc2UuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJEYXRhYmFzZS5oCkBAIC04OSw3
ICs4OSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgb3BlbkN1cnNvcihsb25nIGxvbmcg
dHJhbnNhY3Rpb25JZCwgbG9uZyBsb25nIG9iamVjdFN0b3JlSWQsIGxvbmcgbG9uZyBpbmRleElk
LCBjb25zdCBXZWJJREJLZXlSYW5nZSYsIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgYm9vbCBr
ZXlPbmx5LCBUYXNrVHlwZSwgV2ViSURCQ2FsbGJhY2tzKikgeyBXRUJLSVRfQVNTRVJUX05PVF9S
RUFDSEVEKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgY291bnQobG9uZyBsb25nIHRyYW5zYWN0aW9u
SWQsIGxvbmcgbG9uZyBvYmplY3RTdG9yZUlkLCBsb25nIGxvbmcgaW5kZXhJZCwgY29uc3QgV2Vi
SURCS2V5UmFuZ2UmLCBXZWJJREJDYWxsYmFja3MqKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVSYW5nZShsb25nIGxvbmcgdHJhbnNhY3Rp
b25JZCwgbG9uZyBsb25nIG9iamVjdFN0b3JlSWQsIGNvbnN0IFdlYklEQktleVJhbmdlJiwgV2Vi
SURCQ2FsbGJhY2tzKikgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KLSAgICB2aXJ0
dWFsIHZvaWQgY2xlYXIobG9uZyBsb25nIHRyYW5zYWN0aW9uSWQsIGxvbmcgbG9uZyBvYmplY3RT
dG9yZUlkLCBXZWJJREJDYWxsYmFja3MqKSAgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXIobG9uZyBsb25nIHRyYW5zYWN0aW9uSWQsIGxvbmcg
bG9uZyBvYmplY3RTdG9yZUlkLCBXZWJJREJDYWxsYmFja3MqKSB7IFdFQktJVF9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgV2ViSURCRGF0YWJhc2UoKSB7IH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkRhdGFiYXNlSW1wbC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJEYXRhYmFzZUltcGwuY3BwCmlu
ZGV4IGIwNWM1MTdjNDMxOGExOTcxM2RiOTVmY2MwN2U2MTNkOWU1NmJiNDMuLjEzOWQwNDc1ZWQy
OTdmZTBkMTU1NDkzNTRiZDcxMjRjMTA1OWJiMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYklEQkRhdGFiYXNlSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViSURCRGF0YWJhc2VJbXBsLmNwcApAQCAtMTY0LDcgKzE2NCw3IEBAIHZv
aWQgV2ViSURCRGF0YWJhc2VJbXBsOjpwdXQobG9uZyBsb25nIHRyYW5zYWN0aW9uSWQsIGxvbmcg
bG9uZyBvYmplY3RTdG9yZUlkLCBXCiAgICAgICAgIGluZGV4S2V5c1tpXSA9IGluZGV4S2V5TGlz
dDsKICAgICB9CiAKLSAgICBWZWN0b3I8dWludDhfdD4gdmFsdWVCdWZmZXIodmFsdWUtPnNpemUo
KSk7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHZhbHVlQnVmZmVyOwogICAgIHZhbHVlQnVmZmVyLmFw
cGVuZCh2YWx1ZS0+ZGF0YSgpLCB2YWx1ZS0+c2l6ZSgpKTsKICAgICBtX2RhdGFiYXNlQmFja2Vu
ZC0+cHV0KHRyYW5zYWN0aW9uSWQsIG9iamVjdFN0b3JlSWQsICZ2YWx1ZUJ1ZmZlciwga2V5LCBz
dGF0aWNfY2FzdDxJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlB1dE1vZGU+KHB1dE1vZGUp
LCBJREJDYWxsYmFja3NQcm94eTo6Y3JlYXRlKGFkb3B0UHRyKGNhbGxiYWNrcykpLCBpbmRleElk
cywgaW5kZXhLZXlzKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYklEQkluZGV4SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJJ
bmRleEltcGwuY3BwCmluZGV4IDliMWQ2OGNmZjdkN2U0MmE1YjcwODNjZTVmN2UyODI2MTkzN2Nl
ZjEuLmIwOGY4NTRmMzVmNTg3MjJkYmY1MDg4MmQzNDY0NWFmOTIxZWQ0ODkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkluZGV4SW1wbC5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCSW5kZXhJbXBsLmNwcApAQCAtMzAsNiArMzAs
NyBAQAogCiAjaW5jbHVkZSAiSURCQ2FsbGJhY2tzUHJveHkuaCIKICNpbmNsdWRlICJJREJJbmRl
eC5oIgorI2luY2x1ZGUgIklEQkluZGV4QmFja2VuZEludGVyZmFjZS5oIgogI2luY2x1ZGUgIklE
QktleVJhbmdlLmgiCiAjaW5jbHVkZSAiV2ViSURCQ2FsbGJhY2tzLmgiCiAjaW5jbHVkZSAiV2Vi
SURCS2V5LmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lEQkRh
dGFiYXNlQmFja2VuZFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJE
YXRhYmFzZUJhY2tlbmRUZXN0LmNwcAppbmRleCBlZTQ4N2ExYzYyMWYxOTJhMjA2N2I0MmYzMjAx
MmQzMGYwNTlhNTIxLi4wYzVmNDU4ZmYzOTk2NGQzMWVkZDhlYTNlN2ZjZmI5NGExNDdmMmM3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lEQkRhdGFiYXNlQmFja2Vu
ZFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCRGF0YWJhc2VC
YWNrZW5kVGVzdC5jcHAKQEAgLTYyLDcgKzYyLDcgQEAgVEVTVChJREJEYXRhYmFzZUJhY2tlbmRU
ZXN0LCBCYWNraW5nU3RvcmVSZXRlbnRpb24pCiAKICAgICBjb25zdCBib29sIHVuaXF1ZSA9IGZh
bHNlOwogICAgIGNvbnN0IGJvb2wgbXVsdGlFbnRyeSA9IGZhbHNlOwotICAgIFJlZlB0cjxJREJJ
bmRleEJhY2tlbmRJbXBsPiBpbmRleCA9IElEQkluZGV4QmFja2VuZEltcGw6OmNyZWF0ZShkYi5n
ZXQoKSwgc3RvcmUuZ2V0KCksIElEQkluZGV4TWV0YWRhdGEoImluZGV4IiwgLTEsIElEQktleVBh
dGgoImtleVBhdGgiKSwgdW5pcXVlLCBtdWx0aUVudHJ5KSk7CisgICAgUmVmUHRyPElEQkluZGV4
QmFja2VuZEltcGw+IGluZGV4ID0gSURCSW5kZXhCYWNrZW5kSW1wbDo6Y3JlYXRlKGRiLmdldCgp
LCBJREJJbmRleE1ldGFkYXRhKCJpbmRleCIsIC0xLCBJREJLZXlQYXRoKCJrZXlQYXRoIiksIHVu
aXF1ZSwgbXVsdGlFbnRyeSkpOwogICAgIEVYUEVDVF9HVChiYWNraW5nU3RvcmUtPnJlZkNvdW50
KCksIDEpOwogCiAgICAgZGIuY2xlYXIoKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBjMzAzZTBkZDIxNTlkNGQ5YmQ4Njhi
ODE5ZDBlMzBiZjQ0YWVlNzc1Li4wNmYzNzFjZmIwZTRmZWE2MWU2NTRiMmU0MDVmNmExNGYzODcy
MmJhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTMtMDEtMDMgIEFsZWMgRmxldHQgIDxhbGVj
ZmxldHRAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEluZGV4ZWREQjogTWlncmF0ZSBiYWNrZW5k
IE9iamVjdFN0b3JlIGNhbGxzIHRvIHVzZSB0cmFuc2FjdGlvbiBpZAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAyNzQxCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGFkZGl0aW9uYWwgY291bnQoKSB0
ZXN0cyBmb3IgbXVsdGktZW50cnkgaW5kZXhlcywgbm90IHByZXZpb3VzbHkKKyAgICAgICAgY292
ZXJlZC4KKworICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL2luZGV4LW11bHRpZW50cnktZXhw
ZWN0ZWQudHh0OgorICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL3Jlc291cmNlcy9pbmRleC1t
dWx0aWVudHJ5LmpzOgorICAgICAgICAoLnRyYW5zYWN0aW9uLm9uY29tcGxldGUpOgorICAgICAg
ICAodmVyaWZ5Q291bnQucmVxdWVzdC5vbnN1Y2Nlc3MucmVxdWVzdC5vbnN1Y2Nlc3MpOgorICAg
ICAgICAodmVyaWZ5Q291bnQucmVxdWVzdC5vbnN1Y2Nlc3MpOgorICAgICAgICAodmVyaWZ5Q291
bnQpOgorCiAyMDEzLTAxLTAzICBUZXJyeSBBbmRlcnNvbiAgPHRkYW5kZXJzb25AY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQgZ2FyZGVuaW5nLiBNYXJraW5nIGZhc3QvZXZlbnRz
LzUwNTY2MTkuaHRtbCBhcyBmbGFreQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9p
bmRleGVkZGIvaW5kZXgtbXVsdGllbnRyeS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdG9y
YWdlL2luZGV4ZWRkYi9pbmRleC1tdWx0aWVudHJ5LWV4cGVjdGVkLnR4dAppbmRleCBmMWQ2OTc3
ZTdmOGYzMTBiM2QxODM2Yzk3MmM4N2M3NmVjOWM3ZmRkLi45YzJkZWY4YjkxNzQwMzQzMmRlNjBj
ZWExZWZiYWY5MDlmOWVjY2Q0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4
ZWRkYi9pbmRleC1tdWx0aWVudHJ5LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9zdG9y
YWdlL2luZGV4ZWRkYi9pbmRleC1tdWx0aWVudHJ5LWV4cGVjdGVkLnR4dApAQCAtODIsNiArODIs
MTIgQEAgUEFTUyBjdXJzb3IudmFsdWUueSBpcyAiZCIKIGN1cnNvci5jb250aW51ZSgpCiBjdXJz
b3IgPSBldmVudC50YXJnZXQucmVzdWx0CiBQQVNTIGV4cGVjdGVkLmxlbmd0aCBpcyAwCit0cmFu
c2FjdGlvbiA9IGRiLnRyYW5zYWN0aW9uKFsnc3RvcmUnXSkKK3RyYW5zYWN0aW9uLm9iamVjdFN0
b3JlKCdzdG9yZScpLmluZGV4KCdpbmRleCcpCitpbmRleC5jb3VudCgpCitQQVNTIGV2ZW50LnRh
cmdldC5yZXN1bHQgaXMgOQoraW5kZXguY291bnQoNykKK1BBU1MgZXZlbnQudGFyZ2V0LnJlc3Vs
dCBpcyAxCiAKIFZlcmlmeWluZyB1bmlxdWUgY29uc3RyYWludCBvbiBtdWx0aUVudHJ5IGluZGV4
CiB0cmFuc2FjdGlvbiA9IGRiLnRyYW5zYWN0aW9uKFsnc3RvcmUtdW5pcXVlJ10sICdyZWFkd3Jp
dGUnKQpAQCAtMTYyLDYgKzE2OCwxMiBAQCBQQVNTIGN1cnNvci52YWx1ZS55IGlzICJkIgogY3Vy
c29yLmNvbnRpbnVlKCkKIGN1cnNvciA9IGV2ZW50LnRhcmdldC5yZXN1bHQKIFBBU1MgZXhwZWN0
ZWQubGVuZ3RoIGlzIDAKK3RyYW5zYWN0aW9uID0gZGIudHJhbnNhY3Rpb24oWydzdG9yZSddKQor
dHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoJ3N0b3JlJykuaW5kZXgoJ2luZGV4JykKK2luZGV4LmNv
dW50KCkKK1BBU1MgZXZlbnQudGFyZ2V0LnJlc3VsdCBpcyA5CitpbmRleC5jb3VudCg3KQorUEFT
UyBldmVudC50YXJnZXQucmVzdWx0IGlzIDEKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRy
dWUKIAogVEVTVCBDT01QTEVURQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRl
eGVkZGIvcmVzb3VyY2VzL2luZGV4LW11bHRpZW50cnkuanMgYi9MYXlvdXRUZXN0cy9zdG9yYWdl
L2luZGV4ZWRkYi9yZXNvdXJjZXMvaW5kZXgtbXVsdGllbnRyeS5qcwppbmRleCA3ZGY1ZjU5MmNm
Y2MzZjE1NmI3MzQzMzgyOTNmMTZmZWEyZGVjNGMwLi5iMGI1NWU4YWJmZWIwNDhiY2I1NjViNTRk
MmFhYmY4M2I2MTE3MjM4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRk
Yi9yZXNvdXJjZXMvaW5kZXgtbXVsdGllbnRyeS5qcworKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdl
L2luZGV4ZWRkYi9yZXNvdXJjZXMvaW5kZXgtbXVsdGllbnRyeS5qcwpAQCAtNDUsNyArNDUsNyBA
QCBmdW5jdGlvbiB2ZXJpZnlJbmRleGVzKGluZGV4TmFtZSwgY2FsbGJhY2spCiAgICAgZGVidWco
IlZlcmlmeWluZyBpbmRleDogIiArIGluZGV4TmFtZSk7CiAgICAgdHJhbnNhY3Rpb24gPSBldmFs
QW5kTG9nKCJ0cmFuc2FjdGlvbiA9IGRiLnRyYW5zYWN0aW9uKFsnc3RvcmUnXSwgJ3JlYWRvbmx5
JykiKTsKICAgICB0cmFuc2FjdGlvbi5vbmFib3J0ID0gdW5leHBlY3RlZEFib3J0Q2FsbGJhY2s7
Ci0gICAgdHJhbnNhY3Rpb24ub25jb21wbGV0ZSA9IGNhbGxiYWNrOworICAgIHRyYW5zYWN0aW9u
Lm9uY29tcGxldGUgPSBmdW5jdGlvbigpIHsgdmVyaWZ5Q291bnQoY2FsbGJhY2spOyB9OwogCiAg
ICAgZXhwZWN0ZWQgPSBbCiAgICAgICAgIHsga2V5OiAxLCBwcmltYXJ5S2V5OiAnZm9vJywgeTog
J2EnIH0sCkBAIC0xMDQsNiArMTA0LDI2IEBAIGZ1bmN0aW9uIHZlcmlmeVVuaXF1ZUNvbnN0cmFp
bnQoKQogICAgIH07CiB9CiAKK2Z1bmN0aW9uIHZlcmlmeUNvdW50KGNhbGxiYWNrKSB7CisgICAg
ZXZhbEFuZExvZygidHJhbnNhY3Rpb24gPSBkYi50cmFuc2FjdGlvbihbJ3N0b3JlJ10pIik7CisK
KyAgICB0cmFuc2FjdGlvbi5vbmFib3J0ID0gdW5leHBlY3RlZEFib3J0Q2FsbGJhY2s7CisgICAg
dHJhbnNhY3Rpb24ub25jb21wbGV0ZSA9IGNhbGxiYWNrOworCisgICAgaW5kZXggPSBldmFsQW5k
TG9nKCJ0cmFuc2FjdGlvbi5vYmplY3RTdG9yZSgnc3RvcmUnKS5pbmRleCgnaW5kZXgnKSIpOwor
ICAgIHJlcXVlc3QgPSBldmFsQW5kTG9nKCJpbmRleC5jb3VudCgpIik7CisgICAgcmVxdWVzdC5v
bnN1Y2Nlc3MgPSBmdW5jdGlvbihldmVudCkgeworCisgICAgICAgIHNob3VsZEJlKCJldmVudC50
YXJnZXQucmVzdWx0IiwgIjkiKTsKKworICAgICAgICByZXF1ZXN0ID0gZXZhbEFuZExvZygiaW5k
ZXguY291bnQoNykiKTsKKyAgICAgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSBmdW5jdGlvbihldmVu
dCkgeworICAgICAgICAgICAgc2hvdWxkQmUoImV2ZW50LnRhcmdldC5yZXN1bHQiLCAiMSIpOwor
ICAgICAgICB9OworICAgIH07CisKK30KKwogZnVuY3Rpb24gY3JlYXRlSW5kZXhPblN0b3JlV2l0
aERhdGEoKQogewogICAgIGRlYnVnKCIiKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>181378</attachid>
            <date>2013-01-04 14:49:39 -0800</date>
            <delta_ts>2013-01-05 12:43:59 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-102741-20130104144646.patch</filename>
            <type>text/plain</type>
            <size>116365</size>
            <attacher name="Alec Flett">alecflett</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM4NzY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmUzNWIyZTk1ZWEwYWNj
NWE5YTVlYzFhMjFkMTZhMGY3MzEyYTAxYi4uNTMyYjEwZmMzMmNiMzI4YWJmZWVkYTk4ZTU0NThk
MDRiNTc2Y2RmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzMSBAQAorMjAxMy0wMS0wMyAgQWxl
YyBGbGV0dCAgPGFsZWNmbGV0dEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBN
aWdyYXRlIGJhY2tlbmQgT2JqZWN0U3RvcmUgY2FsbHMgdG8gdXNlIHRyYW5zYWN0aW9uIGlkCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDI3NDEKKwor
ICAgICAgICBSZXZpZXdlZCBieSBUb255IENoYW5nLgorCisgICAgICAgIEZ1bGx5IG1pZ3JhdGUg
OCBjb3JlIGRhdGEgY2FsbHMgKGdldCwgcHV0LCBzZXRJbmRleEtleXMsIHNldEluZGV4ZXNSZWFk
eSwKKyAgICAgICAgb3BlbkN1cnNvciwgY291bnQsIGRlbGV0ZVJhbmdlLCBhbmQgY2xlYXIpIGlu
dG8gSURCRGF0YWJhc2VCYWNrZW5kSW1wbCwKKyAgICAgICAgY29tYmluaW5nIGNvbW1vbiBjb2Rl
IGZyb20gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCBhbmQgSURCSW5kZXhCYWNrZW5kSW1wbAor
ICAgICAgICBpbiBvcmRlciB0byBzaW1wbGlmeSB0aGUgYmFja2VuZCBpbnRlcmZhY2UuIFRoZXNl
IGNhbGxzIGFyZSBub3cKKyAgICAgICAgaW1wbGVtZW50ZWQgaW4gdGVybXMgb2YgYW4gaW50NjRf
dC1iYXNlZCB0cmFuc2FjdGlvbklkIHJhdGhlciB0aGFuCisgICAgICAgIGFuIElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZSwgd2hpY2ggc2ltcGxpZmllcyB0aGUgb3duZXJzaGlwIG1vZGVs
CisgICAgICAgIGJldHdlZW4gdGhlIGZyb250ZW5kIGFuZCB0aGUgYmFja2VuZC4KKworICAgICAg
ICBJbiBhZGRpdGlvbiwgcmVtb3ZlIHJlZmVyZW5jZXMgdG8gSURCT2JqZWN0U3RvcmVCYWNrZW5k
KiBmcm9tIElEQkluZGV4LAorICAgICAgICBhcyBpdCBpcyBubyBsb25nZXIgbmVlZGVkLgorCisg
ICAgICAgIEEgZmV3IGR1cGxpY2F0ZSBJREJfVFJBQ0UgbWV0aG9kcyBoYXZlIGJlZW4gcmVtb3Zl
ZCBmcm9tIHdyYXBwZXIgbWV0aG9kcworICAgICAgICB0aGF0IGNhbGwgYW5vdGhlciBtZXRob2Qg
dGhhdCBhbHJlYWR5IGhhdmUgSURCX1RSQUNFJ3MuCisKKyAgICAgICAgRmluYWxseSwgSURCQ3Vy
c29yQmFja2VuZEltcGwgbm93IG5vIGxvbmdlciBob2xkcyBvbnRvIGFuIAorICAgICAgICBJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsKiwgc28gaXRzIGRlc3RydWN0aW9uIGFuZCBtZW1iZXIgdmFy
aWFibGVzIGFyZQorICAgICAgICBzaW1wbGlmaWVkLCBhbmQgcmVvcmRlcmVkIHRvIG1hdGNoIHBy
b3BlciBkZXN0cnVjdGlvbiBvcmRlci4KKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lE
QkN1cnNvckJhY2tlbmRJbXBsLmNwcDogUmVvcmRlcmVkIHRvIGFjY291bnQgZm9yIHByb3BlciBk
ZXN0cnVjdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvckJhY2tlbmRJbXBsOjpJREJD
dXJzb3JCYWNrZW5kSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3JCYWNrZW5kSW1w
bDo6fklEQkN1cnNvckJhY2tlbmRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvckJh
Y2tlbmRJbXBsOjpkZWxldGVGdW5jdGlvbik6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
SURCQ3Vyc29yQmFja2VuZEltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvckJhY2tl
bmRJbXBsOjpjcmVhdGUpOgorICAgICAgICAoSURCQ3Vyc29yQmFja2VuZEltcGwpOgorICAgICAg
ICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmg6CisgICAgICAgIChXZWJDb3JlOjpJ
REJEYXRhYmFzZTo6YmFja2VuZCk6CisgICAgICAgIChJREJEYXRhYmFzZSk6CisgICAgICAgICog
TW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChH
ZXRPcGVyYXRpb24pOiBDb21iaW5lZCBmcm9tIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwvSURC
SW5kZXhCYWNrZW5kSW1wbDo6KlJldHJpZXZhbE9wZXJhdGlvbgorICAgICAgICAoV2ViQ29yZTo6
R2V0T3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R2V0T3BlcmF0aW9uOjpH
ZXRPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChQdXRPcGVyYXRpb24p
OiBDb21iaW5lZCBmcm9tIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwvSURCSW5kZXhCYWNrZW5k
SW1wbDo6KlN0b3JhZ2VPcGVyYXRpb24uCisgICAgICAgIChXZWJDb3JlOjpQdXRPcGVyYXRpb246
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQdXRPcGVyYXRpb246OlB1dE9wZXJhdGlvbik6
CisgICAgICAgIChTZXRJbmRleGVzUmVhZHlPcGVyYXRpb24pOiBNb3ZlZCBmcm9tIElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OkluZGV4ZXNSZWFkeU9wZXJhdGlvbgorICAgICAgICAoV2ViQ29y
ZTo6U2V0SW5kZXhlc1JlYWR5T3BlcmF0aW9uOjpjcmVhdGUpOiAKKyAgICAgICAgKFdlYkNvcmU6
OlNldEluZGV4ZXNSZWFkeU9wZXJhdGlvbjo6U2V0SW5kZXhlc1JlYWR5T3BlcmF0aW9uKToKKyAg
ICAgICAgKE9wZW5DdXJzb3JPcGVyYXRpb24pOiBDb21iaW5lZCBmcm9tIElEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGwvSURCSW5kZXhCYWNrZW5kSW1wbDo6T3BlbipDdXJzb3JPcGVyYXRpb24KKyAg
ICAgICAgKFdlYkNvcmU6Ok9wZW5DdXJzb3JPcGVyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpPcGVuQ3Vyc29yT3BlcmF0aW9uOjpPcGVuQ3Vyc29yT3BlcmF0aW9uKToKKyAgICAg
ICAgKENvdW50T3BlcmF0aW9uKTogQ29tYmluZWQgZnJvbSBJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsL0lEQkluZGV4QmFja2VuZEltcGw6OkNvdW50T3BlcmF0aW9uCisgICAgICAgIChXZWJDb3Jl
OjpDb3VudE9wZXJhdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvdW50T3BlcmF0
aW9uOjpDb3VudE9wZXJhdGlvbik6CisgICAgICAgIChEZWxldGVSYW5nZU9wZXJhdGlvbik6IE1v
dmVkIGZyb20gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6RGVsZXRlT3BlcmF0aW9uCisgICAg
ICAgIChXZWJDb3JlOjpEZWxldGVSYW5nZU9wZXJhdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkRlbGV0ZVJhbmdlT3BlcmF0aW9uOjpEZWxldGVSYW5nZU9wZXJhdGlvbik6CisgICAg
ICAgIChDbGVhck9wZXJhdGlvbik6IE1vdmVkIGZyb20gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bDo6Q2xlYXJPcGVyYXRpb24KKyAgICAgICAgKFdlYkNvcmU6OkNsZWFyT3BlcmF0aW9uOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2xlYXJPcGVyYXRpb246OkNsZWFyT3BlcmF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmdldCk6IENvbWJpbmVk
IGZyb20gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC9JREJJbmRleEJhY2tlbmRJbXBsOjpnZXQq
CisgICAgICAgIChXZWJDb3JlOjpHZXRPcGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAoV2Vi
Q29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6cHV0KTogTW92ZWQgZnJvbSBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpwdXQKKyAgICAgICAgKFdlYkNvcmU6OlB1dE9wZXJhdGlvbjo6cGVy
Zm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRJbmRl
eEtleXMpOiBNb3ZlZCBmcm9tIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnNldEluZGV4S2V5
cworICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6c2V0SW5kZXhlc1Jl
YWR5KToKKyAgICAgICAgKFdlYkNvcmU6OlNldEluZGV4ZXNSZWFkeU9wZXJhdGlvbjo6cGVyZm9y
bSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29y
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNvdW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvdW50T3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZVJhbmdlKToKKyAgICAgICAgKFdlYkNv
cmU6OkRlbGV0ZVJhbmdlT3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QkRhdGFiYXNlQmFja2VuZEltcGw6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkNsZWFyT3Bl
cmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wZW5DdXJzb3JPcGVyYXRpb246
OnBlcmZvcm0pOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkluZGV4OjpJREJJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJJbmRleDo6b3BlbkN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleDo6Y291bnQp
OgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXg6Om9wZW5LZXlDdXJzb3IpOgorICAgICAgICAo
V2ViQ29yZTo6SURCSW5kZXg6OmdldCk6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleDo6Z2V0
S2V5KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4OjpiYWNrZW5kREIpOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguaDoKKyAgICAg
ICAgKFdlYkNvcmU6OklEQkluZGV4OjpjcmVhdGUpOgorICAgICAgICAoSURCSW5kZXgpOgorICAg
ICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SURCSW5kZXhCYWNrZW5kSW1wbDo6SURCSW5kZXhCYWNrZW5kSW1wbCk6Cisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5oOgorICAgICAg
ICAoV2ViQ29yZTo6SURCSW5kZXhCYWNrZW5kSW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQkluZGV4QmFja2VuZEltcGw6Om9wZW5DdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6
SURCSW5kZXhCYWNrZW5kSW1wbDo6Y291bnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXhC
YWNrZW5kSW1wbDo6b3BlbktleUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleEJh
Y2tlbmRJbXBsOjpnZXQpOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXhCYWNrZW5kSW1wbDo6
Z2V0S2V5KToKKyAgICAgICAgKElEQkluZGV4QmFja2VuZEltcGwpOgorICAgICAgICAqIE1vZHVs
ZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9i
amVjdFN0b3JlOjpnZXQpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OnB1dCk6
CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6ZGVsZXRlRnVuY3Rpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmNyZWF0ZUluZGV4KToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjppbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJPYmplY3RTdG9yZTo6b3BlbkN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RT
dG9yZTo6Y291bnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmJhY2tlbmRE
Qik6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjppZCk6CisgICAgICAgIChJREJPYmplY3RTdG9y
ZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVh
dGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjps
b2FkSW5kZXhlcyk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
OjpnZW5lcmF0ZUtleSk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsOjp1cGRhdGVLZXlHZW5lcmF0b3IpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OmdldCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjpwdXQpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6ZGVsZXRlRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6c2V0SW5kZXhLZXlzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6OnNldEluZGV4ZXNSZWFkeSk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6OmNvdW50KToKKyAgICAgICAgKElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGwpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6
OmRhdGFiYXNlKToKKyAgICAgICAgKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwpOgorCiAyMDEz
LTAxLTAzICBBbnRvaW5lIFF1aW50ICA8Z3Jhb3V0c0BhcHBsZS5jb20+CiAKICAgICAgICAgb25s
b2FkIGNhbGxiYWNrIGZvciA8dHJhY2s+IGVsZW1lbnQgYXR0YWNoZWQgdG8gPHZpZGVvPiBkb2Vz
IG5vdCBmaXJlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGRlMDc5N2I1NmE0OGQwYTY1
NjVjYmI3NWJhZDEzMTc4YTZkNGE2MWYuLmVhMTIwNzVmNTZjNTBjNjdlZjM2YmYyZDZjODc1MDM1
ZTY1OTdkY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIw
MTMtMDEtMDMgIEFsZWMgRmxldHQgIDxhbGVjZmxldHRAY2hyb21pdW0ub3JnPgorCisgICAgICAg
IEluZGV4ZWREQjogTWlncmF0ZSBiYWNrZW5kIE9iamVjdFN0b3JlIGNhbGxzIHRvIHVzZSB0cmFu
c2FjdGlvbiBpZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTAyNzQxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgVG9ueSBDaGFuZy4KKworICAgICAgICBG
aXggYSBidWcgd2hlcmUgYW4gYXJyYXkgd2FzIGluaXRpYWxpemVkIHdpdGggYSBsYXJnZSBlbXB0
eSBidWZmZXIsCisgICAgICAgIGNsZWFuIHVwIHdoaXRlc3BhY2UsIGFuZCB1cGRhdGUgdG8gbWF0
Y2ggc2lnbmF0dXJlcyB0aGF0IGNoYW5nZWQKKyAgICAgICAgaW4gV2ViQ29yZS4KKworICAgICAg
ICAqIHB1YmxpYy9XZWJJREJEYXRhYmFzZS5oOgorICAgICAgICAoV2ViS2l0OjpXZWJJREJEYXRh
YmFzZTo6Y2xlYXIpOgorICAgICAgICAqIHNyYy9XZWJJREJEYXRhYmFzZUltcGwuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJJREJEYXRhYmFzZUltcGw6OnB1dCk6CisgICAgICAgICogc3JjL1dl
YklEQkluZGV4SW1wbC5jcHA6CisgICAgICAgICogdGVzdHMvSURCRGF0YWJhc2VCYWNrZW5kVGVz
dC5jcHA6CisKIDIwMTMtMDEtMDMgIFNhbWkgS3lvc3RpbGEgIDxza3lvc3RpbEBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBSZW5hbWUgbG93IGxhdGVuY3kgcmVuZGVyaW5nIG1v
ZGUgc2V0dGluZyB0byB2c3luYyBub3RpZmljYXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcAppbmRleCBk
YTdhZGNmODk1NWQwMzMyYmEyNzRlZjA2MmQ2NzI4NjUxMjdiMmIzLi5mZWFiNWM1ZTNhMzY0NWYw
OTk0NDAwOWIwM2M5ZmNkNjA0ZGM2YjFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwCkBAIC0xMDEsMTIg
KzEwMSwxMyBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tz
OwogfTsKIAotSURCQ3Vyc29yQmFja2VuZEltcGw6OklEQkN1cnNvckJhY2tlbmRJbXBsKFBhc3NS
ZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGN1cnNvciwgQ3Vyc29yVHlwZSBjdXJzb3JU
eXBlLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlIHRhc2tUeXBlLCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbiwgSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbCogb2JqZWN0U3RvcmUpCi0gICAgOiBtX2N1cnNvcihjdXJzb3IpCi0gICAgLCBtX3Rh
c2tUeXBlKHRhc2tUeXBlKQorSURCQ3Vyc29yQmFja2VuZEltcGw6OklEQkN1cnNvckJhY2tlbmRJ
bXBsKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGN1cnNvciwgQ3Vyc29yVHlw
ZSBjdXJzb3JUeXBlLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlIHRh
c2tUeXBlLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBv
YmplY3RTdG9yZUlkKQorICAgIDogbV90YXNrVHlwZSh0YXNrVHlwZSkKICAgICAsIG1fY3Vyc29y
VHlwZShjdXJzb3JUeXBlKQorICAgICwgbV9kYXRhYmFzZSh0cmFuc2FjdGlvbi0+ZGF0YWJhc2Uo
KSkKICAgICAsIG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCi0gICAgLCBtX29iamVjdFN0b3Jl
KG9iamVjdFN0b3JlKQorICAgICwgbV9vYmplY3RTdG9yZUlkKG9iamVjdFN0b3JlSWQpCisgICAg
LCBtX2N1cnNvcihjdXJzb3IpCiAgICAgLCBtX2Nsb3NlZChmYWxzZSkKIHsKICAgICBtX3RyYW5z
YWN0aW9uLT5yZWdpc3Rlck9wZW5DdXJzb3IodGhpcyk7CkBAIC0xMTUsMTEgKzExNiw2IEBAIElE
QkN1cnNvckJhY2tlbmRJbXBsOjpJREJDdXJzb3JCYWNrZW5kSW1wbChQYXNzUmVmUHRyPElEQkJh
Y2tpbmdTdG9yZTo6Q3Vyc29yPiBjCiBJREJDdXJzb3JCYWNrZW5kSW1wbDo6fklEQkN1cnNvckJh
Y2tlbmRJbXBsKCkKIHsKICAgICBtX3RyYW5zYWN0aW9uLT51bnJlZ2lzdGVyT3BlbkN1cnNvcih0
aGlzKTsKLSAgICAvLyBPcmRlciBpcyBpbXBvcnRhbnQsIHRoZSBjdXJzb3JzIGhhdmUgdG8gYmUg
ZGVzdHJ1Y3RlZCBiZWZvcmUgdGhlIG9iamVjdFN0b3JlLgotICAgIG1fY3Vyc29yLmNsZWFyKCk7
Ci0gICAgbV9zYXZlZEN1cnNvci5jbGVhcigpOwotCi0gICAgbV9vYmplY3RTdG9yZS5jbGVhcigp
OwogfQogCiAKQEAgLTE3MCw4ICsxNjYsNyBAQCB2b2lkIElEQkN1cnNvckJhY2tlbmRJbXBsOjpk
ZWxldGVGdW5jdGlvbihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLAogICAg
IFJlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UgPSBJREJLZXlSYW5nZTo6b25seShtX2N1cnNv
ci0+cHJpbWFyeUtleSgpLCBlYyk7CiAgICAgQVNTRVJUKCFlYyk7CiAKLSAgICBtX29iamVjdFN0
b3JlLT5kZWxldGVGdW5jdGlvbihrZXlSYW5nZS5yZWxlYXNlKCksIHBycENhbGxiYWNrcywgbV90
cmFuc2FjdGlvbi5nZXQoKSwgZWMpOwotICAgIEFTU0VSVCghZWMpOworICAgIG1fZGF0YWJhc2Ut
PmRlbGV0ZVJhbmdlKG1fdHJhbnNhY3Rpb24tPmlkKCksIG1fb2JqZWN0U3RvcmVJZCwga2V5UmFu
Z2UucmVsZWFzZSgpLCBwcnBDYWxsYmFja3MpOwogfQogCiB2b2lkIElEQkN1cnNvckJhY2tlbmRJ
bXBsOjpwcmVmZXRjaENvbnRpbnVlKGludCBudW1iZXJUb0ZldGNoLCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBFeGNlcHRpb25Db2RlJikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5oCmluZGV4
IGIwYzc5ZjIxNGZjYWM2NzIyZWM1NDQyM2U5ZDk5YjhmZmI1MWQ2MzQuLjk2NjhkZmQzYTQ2MzFl
MzM4ZjQ3ZTM1NDc2MzcxZjE2MTY2ZmMzYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuaApAQCAtNDcsMTMgKzQ3
LDEzIEBAIGNsYXNzIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw7CiAKIGNsYXNzIElEQkN1cnNv
ckJhY2tlbmRJbXBsIDogcHVibGljIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2UgewogcHVibGlj
OgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbXBsPiBjcmVhdGUoUGFz
c1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gY3Vyc29yLCBDdXJzb3JUeXBlIGN1cnNv
clR5cGUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uLCBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsKiBvYmplY3RTdG9yZSkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJD
dXJzb3JCYWNrZW5kSW1wbD4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJz
b3I+IGN1cnNvciwgQ3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBJREJDdXJzb3JCYWNrZW5kSW1wbChjdXJzb3IsIGN1cnNvclR5
cGUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZTo6Tm9ybWFsVGFzaywgdHJhbnNhY3Rp
b24sIG9iamVjdFN0b3JlKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCQ3Vyc29y
QmFja2VuZEltcGwoY3Vyc29yLCBjdXJzb3JUeXBlLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2U6Ok5vcm1hbFRhc2ssIHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZUlkKSk7CiAgICAgfQot
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbXBsPiBjcmVhdGUoUGFzc1Jl
ZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gY3Vyc29yLCBDdXJzb3JUeXBlIGN1cnNvclR5
cGUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUgdGFza1R5cGUsIElE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uLCBJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsKiBvYmplY3RTdG9yZSkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNr
ZW5kSW1wbD4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGN1cnNv
ciwgQ3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U6
OlRhc2tUeXBlIHRhc2tUeXBlLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlv
biwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBJREJDdXJzb3JCYWNrZW5kSW1wbChjdXJzb3IsIGN1cnNvclR5cGUsIHRhc2tUeXBlLCB0
cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmUpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJ
REJDdXJzb3JCYWNrZW5kSW1wbChjdXJzb3IsIGN1cnNvclR5cGUsIHRhc2tUeXBlLCB0cmFuc2Fj
dGlvbiwgb2JqZWN0U3RvcmVJZCkpOwogICAgIH0KICAgICB2aXJ0dWFsIH5JREJDdXJzb3JCYWNr
ZW5kSW1wbCgpOwogCkBAIC03MSwxOCArNzEsMjAgQEAgcHVibGljOgogICAgIHZvaWQgY2xvc2Uo
KTsKIAogcHJpdmF0ZToKLSAgICBJREJDdXJzb3JCYWNrZW5kSW1wbChQYXNzUmVmUHRyPElEQkJh
Y2tpbmdTdG9yZTo6Q3Vyc29yPiwgQ3Vyc29yVHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlOjpUYXNrVHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCosIElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGwqKTsKKyAgICBJREJDdXJzb3JCYWNrZW5kSW1wbChQYXNzUmVmUHRyPElE
QkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiwgQ3Vyc29yVHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlOjpUYXNrVHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCosIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCk7CiAKICAgICBjbGFzcyBDdXJzb3JJdGVyYXRpb25PcGVyYXRpb247CiAg
ICAgY2xhc3MgQ3Vyc29yQWR2YW5jZU9wZXJhdGlvbjsKICAgICBjbGFzcyBDdXJzb3JQcmVmZXRj
aEl0ZXJhdGlvbk9wZXJhdGlvbjsKIAotICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNv
cj4gbV9jdXJzb3I7Ci0gICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBtX3NhdmVk
Q3Vyc29yOwogICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUgbV90
YXNrVHlwZTsKICAgICBDdXJzb3JUeXBlIG1fY3Vyc29yVHlwZTsKLSAgICBSZWZQdHI8SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbD4gbV90cmFuc2FjdGlvbjsKLSAgICBSZWZQdHI8SURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbD4gbV9vYmplY3RTdG9yZTsKKyAgICBjb25zdCBSZWZQdHI8SURCRGF0
YWJhc2VCYWNrZW5kSW1wbD4gbV9kYXRhYmFzZTsKKyAgICBjb25zdCBSZWZQdHI8SURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbD4gbV90cmFuc2FjdGlvbjsKKyAgICBjb25zdCBpbnQ2NF90IG1fb2Jq
ZWN0U3RvcmVJZDsKKworICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gbV9jdXJz
b3I7IC8vIE11c3QgYmUgZGVzdHJveWVkIGJlZm9yZSBtX3RyYW5zYWN0aW9uLgorICAgIFJlZlB0
cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gbV9zYXZlZEN1cnNvcjsgLy8gTXVzdCBiZSBkZXN0
cm95ZWQgYmVmb3JlIG1fdHJhbnNhY3Rpb24uCiAKICAgICBib29sIG1fY2xvc2VkOwogfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5oCmluZGV4IGRk
YzE4OWEwYjQyOGRiNDhlZWY0ZGI2MDc2NGUxMmYzNjViNTBlZGIuLmY5OWI1ZTQ4NjcyZGM4NTZi
N2RkM2Y0MzExMmU3OGI2MzY1NWMwYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCRGF0YWJhc2UuaApAQCAtMTAzLDYgKzEwMyw4IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIGZpbmRPYmplY3RTdG9yZUlkKG5hbWUpICE9IElEQk9iamVjdFN0b3JlTWV0YWRh
dGE6OkludmFsaWRJZDsKICAgICB9CiAKKyAgICBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2Uq
IGJhY2tlbmQoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmQuZ2V0KCk7IH0KKwogICAgIHN0YXRp
YyBpbnQ2NF90IG5leHRUcmFuc2FjdGlvbklkKCk7CiAKICAgICB1c2luZyBSZWZDb3VudGVkPElE
QkRhdGFiYXNlPjo6cmVmOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcAppbmRleCBjZDhhZTc3ODczMDc2
NDI5OGFjYmVlOWVjYzlmZjNkZjRjY2Y5NzNhLi5mMDZjYjdlZGVhMzc1M2JjNjMxOWE2ZTg0Njdj
NmM2Nzg3ZjYwMDdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcApAQCAtMjksOCArMjksMTAgQEAK
ICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAogI2luY2x1ZGUgIklEQkJhY2tpbmdTdG9y
ZS5oIgorI2luY2x1ZGUgIklEQkN1cnNvckJhY2tlbmRJbXBsLmgiCiAjaW5jbHVkZSAiSURCRGF0
YWJhc2VFeGNlcHRpb24uaCIKICNpbmNsdWRlICJJREJGYWN0b3J5QmFja2VuZEltcGwuaCIKKyNp
bmNsdWRlICJJREJJbmRleEJhY2tlbmRJbXBsLmgiCiAjaW5jbHVkZSAiSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbC5oIgogI2luY2x1ZGUgIklEQlRyYWNpbmcuaCIKICNpbmNsdWRlICJJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsLmgiCkBAIC0xNTQsNiArMTU2LDE5MCBAQCBwcml2YXRlOgogICAg
IGludDY0X3QgbV9wcmV2aW91c0ludFZlcnNpb247CiB9OwogCitjbGFzcyBHZXRPcGVyYXRpb24g
OiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRp
b24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlLCBjb25z
dCBJREJEYXRhYmFzZU1ldGFkYXRhJiBtZXRhZGF0YSwgaW50NjQgb2JqZWN0U3RvcmVJZCwgaW50
NjQgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIElEQkN1cnNvckJh
Y2tlbmRJbnRlcmZhY2U6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+IGNhbGxiYWNrcykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgR2V0
T3BlcmF0aW9uKGJhY2tpbmdTdG9yZSwgbWV0YWRhdGEsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQs
IGtleVJhbmdlLCBjdXJzb3JUeXBlLCBjYWxsYmFja3MpKTsKKyAgICB9CisgICAgdmlydHVhbCB2
b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOworcHJpdmF0ZToKKyAgICBH
ZXRPcGVyYXRpb24oUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSwgY29u
c3QgSURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
aW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgSURCQ3Vy
c29yQmFja2VuZEludGVyZmFjZTo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorICAgICAgICA6IG1fYmFja2luZ1N0b3JlKGJhY2tpbmdT
dG9yZSkKKyAgICAgICAgLCBtX2RhdGFiYXNlSWQobWV0YWRhdGEuaWQpCisgICAgICAgICwgbV9v
YmplY3RTdG9yZUlkKG9iamVjdFN0b3JlSWQpCisgICAgICAgICwgbV9pbmRleElkKGluZGV4SWQp
CisgICAgICAgICwgbV9rZXlQYXRoKG1ldGFkYXRhLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3Rv
cmVJZCkua2V5UGF0aCkKKyAgICAgICAgLCBtX2F1dG9JbmNyZW1lbnQobWV0YWRhdGEub2JqZWN0
U3RvcmVzLmdldChvYmplY3RTdG9yZUlkKS5hdXRvSW5jcmVtZW50KQorICAgICAgICAsIG1fa2V5
UmFuZ2Uoa2V5UmFuZ2UpCisgICAgICAgICwgbV9jdXJzb3JUeXBlKGN1cnNvclR5cGUpCisgICAg
ICAgICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1ldGFk
YXRhLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJZCkuaWQgPT0gb2JqZWN0U3RvcmVJZCk7
CisgICAgfQorCisgICAgY29uc3QgUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gbV9iYWNraW5nU3Rv
cmU7CisgICAgY29uc3QgaW50NjRfdCBtX2RhdGFiYXNlSWQ7CisgICAgY29uc3QgaW50NjRfdCBt
X29iamVjdFN0b3JlSWQ7CisgICAgY29uc3QgaW50NjRfdCBtX2luZGV4SWQ7CisgICAgY29uc3Qg
SURCS2V5UGF0aCBtX2tleVBhdGg7CisgICAgY29uc3QgYm9vbCBtX2F1dG9JbmNyZW1lbnQ7Cisg
ICAgY29uc3QgUmVmUHRyPElEQktleVJhbmdlPiBtX2tleVJhbmdlOworICAgIGNvbnN0IElEQkN1
cnNvckJhY2tlbmRJbnRlcmZhY2U6OkN1cnNvclR5cGUgbV9jdXJzb3JUeXBlOworICAgIGNvbnN0
IFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOworfTsKKworY2xhc3MgUHV0T3BlcmF0
aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbiB7CitwdWJs
aWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3Bl
cmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSwg
aW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RT
dG9yZSwgVmVjdG9yPHVpbnQ4X3Q+JiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgSURC
RGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiBjYWxsYmFja3MsIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMsIGNv
bnN0IFZlY3RvcjxJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OkluZGV4S2V5cz4mIGluZGV4
S2V5cykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgUHV0T3BlcmF0aW9uKGJh
Y2tpbmdTdG9yZSwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmUsIHZhbHVlLCBrZXksIHB1dE1vZGUs
IGNhbGxiYWNrcywgaW5kZXhJZHMsIGluZGV4S2V5cykpOworICAgIH0KKyAgICB2aXJ0dWFsIHZv
aWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7Citwcml2YXRlOgorICAgIFB1
dE9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlLCBpbnQ2
NF90IGRhdGFiYXNlSWQsIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3Jl
LCBWZWN0b3I8dWludDhfdD4mIHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBJREJEYXRh
YmFzZUJhY2tlbmRJbnRlcmZhY2U6OlB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+IGNhbGxiYWNrcywgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3Qg
VmVjdG9yPElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlzPiYgaW5kZXhLZXlz
KQorICAgICAgICA6IG1fYmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKKyAgICAgICAgLCBtX2Rh
dGFiYXNlSWQoZGF0YWJhc2VJZCkKKyAgICAgICAgLCBtX29iamVjdFN0b3JlKG9iamVjdFN0b3Jl
KQorICAgICAgICAsIG1fa2V5KGtleSkKKyAgICAgICAgLCBtX3B1dE1vZGUocHV0TW9kZSkKKyAg
ICAgICAgLCBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCisgICAgICAgICwgbV9pbmRleElkcyhpbmRl
eElkcykKKyAgICAgICAgLCBtX2luZGV4S2V5cyhpbmRleEtleXMpCisgICAgeworICAgICAgICBt
X3ZhbHVlLnN3YXAodmFsdWUpOworICAgIH0KKworICAgIGNvbnN0IFJlZlB0cjxJREJCYWNraW5n
U3RvcmU+IG1fYmFja2luZ1N0b3JlOworICAgIGNvbnN0IGludDY0X3QgbV9kYXRhYmFzZUlkOwor
ICAgIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEgbV9vYmplY3RTdG9yZTsKKyAgICBWZWN0
b3I8dWludDhfdD4gbV92YWx1ZTsKKyAgICBjb25zdCBSZWZQdHI8SURCS2V5PiBtX2tleTsKKyAg
ICBjb25zdCBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlB1dE1vZGUgbV9wdXRNb2RlOwor
ICAgIGNvbnN0IFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOworICAgIGNvbnN0IFZl
Y3RvcjxpbnQ2NF90PiBtX2luZGV4SWRzOworICAgIGNvbnN0IFZlY3RvcjxJREJEYXRhYmFzZUJh
Y2tlbmRJbnRlcmZhY2U6OkluZGV4S2V5cz4gbV9pbmRleEtleXM7Cit9OworCitjbGFzcyBTZXRJ
bmRleGVzUmVhZHlPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6
T3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShzaXplX3QgaW5kZXhDb3VudCkKKyAgICB7
CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgU2V0SW5kZXhlc1JlYWR5T3BlcmF0aW9uKGlu
ZGV4Q291bnQpKTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbCopOworcHJpdmF0ZToKKyAgICBTZXRJbmRleGVzUmVhZHlPcGVyYXRpb24o
c2l6ZV90IGluZGV4Q291bnQpCisgICAgICAgIDogbV9pbmRleENvdW50KGluZGV4Q291bnQpCisg
ICAgeworICAgIH0KKworICAgIGNvbnN0IHNpemVfdCBtX2luZGV4Q291bnQ7Cit9OworCitjbGFz
cyBPcGVuQ3Vyc29yT3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6
Ok9wZXJhdGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJCYWNraW5nU3Rv
cmU+IGJhY2tpbmdTdG9yZSwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIHVu
c2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6Q3Vyc29y
VHlwZSBjdXJzb3JUeXBlLCBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlIHRh
c2tUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBPcGVuQ3Vyc29yT3BlcmF0aW9uKGJhY2tpbmdTdG9yZSwg
ZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5UmFuZ2UsIGRpcmVjdGlvbiwg
Y3Vyc29yVHlwZSwgdGFza1R5cGUsIGNhbGxiYWNrcykpOworICAgIH0KKyAgICB2aXJ0dWFsIHZv
aWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7Citwcml2YXRlOgorICAgIE9w
ZW5DdXJzb3JPcGVyYXRpb24oUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9y
ZSwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5k
ZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIHVuc2lnbmVkIHNob3J0IGRp
cmVjdGlvbiwgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBl
LCBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlIHRhc2tUeXBlLCBQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorICAgICAgICA6IG1fYmFja2luZ1N0b3JlKGJh
Y2tpbmdTdG9yZSkKKyAgICAgICAgLCBtX2RhdGFiYXNlSWQoZGF0YWJhc2VJZCkKKyAgICAgICAg
LCBtX29iamVjdFN0b3JlSWQob2JqZWN0U3RvcmVJZCkKKyAgICAgICAgLCBtX2luZGV4SWQoaW5k
ZXhJZCkKKyAgICAgICAgLCBtX2tleVJhbmdlKGtleVJhbmdlKQorICAgICAgICAsIG1fZGlyZWN0
aW9uKGRpcmVjdGlvbikKKyAgICAgICAgLCBtX2N1cnNvclR5cGUoY3Vyc29yVHlwZSkKKyAgICAg
ICAgLCBtX3Rhc2tUeXBlKHRhc2tUeXBlKQorICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNr
cykKKyAgICB7CisgICAgfQorCisgICAgY29uc3QgUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gbV9i
YWNraW5nU3RvcmU7CisgICAgY29uc3QgaW50NjRfdCBtX2RhdGFiYXNlSWQ7CisgICAgY29uc3Qg
aW50NjRfdCBtX29iamVjdFN0b3JlSWQ7CisgICAgY29uc3QgaW50NjRfdCBtX2luZGV4SWQ7Cisg
ICAgY29uc3QgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gbV9rZXlSYW5nZTsKKyAgICBjb25zdCB1
bnNpZ25lZCBzaG9ydCBtX2RpcmVjdGlvbjsKKyAgICBjb25zdCBJREJDdXJzb3JCYWNrZW5kSW50
ZXJmYWNlOjpDdXJzb3JUeXBlIG1fY3Vyc29yVHlwZTsKKyAgICBjb25zdCBJREJEYXRhYmFzZUJh
Y2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlIG1fdGFza1R5cGU7CisgICAgY29uc3QgUmVmUHRyPElE
QkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7Cit9OworCitjbGFzcyBDb3VudE9wZXJhdGlvbiA6IHB1
YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24geworcHVibGljOgorICAg
IHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbj4g
Y3JlYXRlKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NS
ZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDb3VudE9wZXJhdGlv
bihiYWNraW5nU3RvcmUsIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtleVJh
bmdlLCBjYWxsYmFja3MpKTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbCopOworcHJpdmF0ZToKKyAgICBDb3VudE9wZXJhdGlvbihQYXNz
UmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktl
eVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKKyAg
ICAgICAgOiBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUpCisgICAgICAgICwgbV9kYXRhYmFz
ZUlkKGRhdGFiYXNlSWQpCisgICAgICAgICwgbV9vYmplY3RTdG9yZUlkKG9iamVjdFN0b3JlSWQp
CisgICAgICAgICwgbV9pbmRleElkKGluZGV4SWQpCisgICAgICAgICwgbV9rZXlSYW5nZShrZXlS
YW5nZSkKKyAgICAgICAgLCBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCisgICAgeworICAgIH0KKwor
ICAgIGNvbnN0IFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IG1fYmFja2luZ1N0b3JlOworICAgIGNv
bnN0IGludDY0X3QgbV9kYXRhYmFzZUlkOworICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9y
ZUlkOworICAgIGNvbnN0IGludDY0X3QgbV9pbmRleElkOworICAgIGNvbnN0IFJlZlB0cjxJREJL
ZXlSYW5nZT4gbV9rZXlSYW5nZTsKKyAgICBjb25zdCBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2Nh
bGxiYWNrczsKK307CisKK2NsYXNzIERlbGV0ZVJhbmdlT3BlcmF0aW9uIDogcHVibGljIElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBh
c3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uPiBjcmVhdGUoUGFz
c1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSwgaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdl
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UHRyKG5ldyBEZWxldGVSYW5nZU9wZXJhdGlvbihiYWNraW5nU3RvcmUsIGRhdGFi
YXNlSWQsIG9iamVjdFN0b3JlSWQsIGtleVJhbmdlLCBjYWxsYmFja3MpKTsKKyAgICB9CisgICAg
dmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOworcHJpdmF0
ZToKKyAgICBEZWxldGVSYW5nZU9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4g
YmFja2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
UGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBjYWxsYmFja3MpCisgICAgICAgIDogbV9iYWNraW5nU3RvcmUoYmFja2luZ1N0b3JlKQorICAg
ICAgICAsIG1fZGF0YWJhc2VJZChkYXRhYmFzZUlkKQorICAgICAgICAsIG1fb2JqZWN0U3RvcmVJ
ZChvYmplY3RTdG9yZUlkKQorICAgICAgICAsIG1fa2V5UmFuZ2Uoa2V5UmFuZ2UpCisgICAgICAg
ICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQorICAgIHsKKyAgICB9CisKKyAgICBjb25zdCBSZWZQ
dHI8SURCQmFja2luZ1N0b3JlPiBtX2JhY2tpbmdTdG9yZTsKKyAgICBjb25zdCBpbnQ2NF90IG1f
ZGF0YWJhc2VJZDsKKyAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJZDsKKyAgICBjb25z
dCBSZWZQdHI8SURCS2V5UmFuZ2U+IG1fa2V5UmFuZ2U7CisgICAgY29uc3QgUmVmUHRyPElEQkNh
bGxiYWNrcz4gbV9jYWxsYmFja3M7Cit9OworCitjbGFzcyBDbGVhck9wZXJhdGlvbiA6IHB1Ymxp
YyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24geworcHVibGljOgorICAgIHN0
YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbj4gY3Jl
YXRlKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4g
Y2FsbGJhY2tzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDbGVhck9wZXJh
dGlvbihiYWNraW5nU3RvcmUsIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGNhbGxiYWNrcykp
OworICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsKik7Citwcml2YXRlOgorICAgIENsZWFyT3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCQmFja2lu
Z1N0b3JlPiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorICAgICAgICA6IG1f
YmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKKyAgICAgICAgLCBtX2RhdGFiYXNlSWQoZGF0YWJh
c2VJZCkKKyAgICAgICAgLCBtX29iamVjdFN0b3JlSWQob2JqZWN0U3RvcmVJZCkKKyAgICAgICAg
LCBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCisgICAgeworICAgIH0KKworICAgIGNvbnN0IFJlZlB0
cjxJREJCYWNraW5nU3RvcmU+IG1fYmFja2luZ1N0b3JlOworICAgIGNvbnN0IGludDY0X3QgbV9k
YXRhYmFzZUlkOworICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlkOworICAgIGNvbnN0
IFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOworfTsKIAogY2xhc3MgSURCRGF0YWJh
c2VCYWNrZW5kSW1wbDo6UGVuZGluZ09wZW5DYWxsIHsKIHB1YmxpYzoKQEAgLTMxNiw0NCArNTAy
LDM3NCBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmFib3J0KGludDY0X3QgdHJhbnNh
Y3Rpb25JZCkKICAgICBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCktPmFib3J0KCk7
CiB9CiAKLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Z2V0KGludDY0X3QgdHJhbnNhY3Rp
b25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8
SURCS2V5UmFuZ2U+LCBib29sIGtleU9ubHksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPikKK3Zv
aWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Z2V0KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFu
Z2U+IGtleVJhbmdlLCBib29sIGtleU9ubHksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxs
YmFja3MpCiB7Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgSURCX1RSQUNFKCJJREJE
YXRhYmFzZUJhY2tlbmRJbXBsOjpnZXQiKTsKKyAgICBBU1NFUlQobV90cmFuc2FjdGlvbnMuY29u
dGFpbnModHJhbnNhY3Rpb25JZCkpOworICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRy
YW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOworCisgICAgdHJh
bnNhY3Rpb24tPnNjaGVkdWxlVGFzayhHZXRPcGVyYXRpb246OmNyZWF0ZShtX2JhY2tpbmdTdG9y
ZSwgbWV0YWRhdGEoKSwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5UmFuZ2UsIGtleU9ubHkg
PyBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpLZXlPbmx5IDogSURCQ3Vyc29yQmFja2VuZElu
dGVyZmFjZTo6S2V5QW5kVmFsdWUsIGNhbGxiYWNrcykpOwogfQogCi12b2lkIElEQkRhdGFiYXNl
QmFja2VuZEltcGw6OnB1dChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgVmVjdG9yPHVpbnQ4X3Q+KiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+LCBQdXRNb2Rl
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJ
ZHMsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JikKK3ZvaWQgR2V0T3BlcmF0aW9uOjpwZXJmb3Jt
KElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQogewotICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIElEQl9UUkFDRSgiR2V0T3BlcmF0aW9uIik7CisKKyAgICBSZWZQ
dHI8SURCS2V5PiBrZXk7CisKKyAgICBpZiAobV9rZXlSYW5nZS0+aXNPbmx5S2V5KCkpCisgICAg
ICAgIGtleSA9IG1fa2V5UmFuZ2UtPmxvd2VyKCk7CisgICAgZWxzZSB7CisgICAgICAgIFJlZlB0
cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gYmFja2luZ1N0b3JlQ3Vyc29yOworICAgICAgICBp
ZiAobV9pbmRleElkID09IElEQkluZGV4TWV0YWRhdGE6OkludmFsaWRJZCkgeworICAgICAgICAg
ICAgQVNTRVJUKG1fY3Vyc29yVHlwZSAhPSBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpLZXlP
bmx5KTsKKyAgICAgICAgICAgIC8vIE9iamVjdFN0b3JlIFJldHJpZXZhbCBPcGVyYXRpb24KKyAg
ICAgICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IG1fYmFja2luZ1N0b3JlLT5vcGVuT2JqZWN0
U3RvcmVDdXJzb3IodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0
YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCBtX2tleVJhbmdlLmdldCgpLCBJREJDdXJzb3I6Ok5F
WFQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKG1fY3Vyc29yVHlwZSA9PSBJ
REJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpLZXlPbmx5KQorICAgICAgICAgICAgICAgIC8vIElu
ZGV4IFZhbHVlIFJldHJpZXZhbCBPcGVyYXRpb24KKyAgICAgICAgICAgICAgICBiYWNraW5nU3Rv
cmVDdXJzb3IgPSBtX2JhY2tpbmdTdG9yZS0+b3BlbkluZGV4S2V5Q3Vyc29yKHRyYW5zYWN0aW9u
LT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJ
ZCwgbV9pbmRleElkLCBtX2tleVJhbmdlLmdldCgpLCBJREJDdXJzb3I6Ok5FWFQpOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIC8vIEluZGV4IFJlZmVyZW5jZWQgVmFsdWUgUmV0
cmlldmFsIE9wZXJhdGlvbgorICAgICAgICAgICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IG1f
YmFja2luZ1N0b3JlLT5vcGVuSW5kZXhDdXJzb3IodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRy
YW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCBtX2luZGV4SWQsIG1f
a2V5UmFuZ2UuZ2V0KCksIElEQkN1cnNvcjo6TkVYVCk7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoIWJhY2tpbmdTdG9yZUN1cnNvcikgeworICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uU3Vj
Y2VzcygpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAga2V5ID0g
YmFja2luZ1N0b3JlQ3Vyc29yLT5rZXkoKTsKKyAgICB9CisKKyAgICBSZWZQdHI8SURCS2V5PiBw
cmltYXJ5S2V5OworICAgIGJvb2wgb2s7CisgICAgaWYgKG1faW5kZXhJZCA9PSBJREJJbmRleE1l
dGFkYXRhOjpJbnZhbGlkSWQpIHsKKyAgICAgICAgLy8gT2JqZWN0IFN0b3JlIFJldHJpZXZhbCBP
cGVyYXRpb24KKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHZhbHVlOworICAgICAgICBvayA9IG1f
YmFja2luZ1N0b3JlLT5nZXRSZWNvcmQodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0
aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCAqa2V5LCB2YWx1ZSk7CisgICAg
ICAgIGlmICghb2spIHsKKyAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFi
YXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50
ZXJuYWwgZXJyb3IgaW4gZ2V0UmVjb3JkLiIpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmICh2YWx1ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIG1fY2Fs
bGJhY2tzLT5vblN1Y2Nlc3MoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChtX2F1dG9JbmNyZW1lbnQgJiYgIW1fa2V5UGF0aC5pc051bGwoKSkgeworICAg
ICAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNy
ZWF0ZUZyb21XaXJlQnl0ZXModmFsdWUpLCBrZXksIG1fa2V5UGF0aCk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmVCeXRlcyh2YWx1ZSkpOworICAgICAgICBy
ZXR1cm47CisKKyAgICB9CisKKyAgICAvLyBGcm9tIGhlcmUgd2UgYXJlIGRlYWxpbmcgb25seSB3
aXRoIGluZGV4ZXMuCisgICAgb2sgPSBtX2JhY2tpbmdTdG9yZS0+Z2V0UHJpbWFyeUtleVZpYUlu
ZGV4KHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQs
IG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRleElkLCAqa2V5LCBwcmltYXJ5S2V5KTsKKyAgICBpZiAo
IW9rKSB7CisgICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNy
ZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3Ig
aW4gZ2V0UHJpbWFyeUtleVZpYUluZGV4LiIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBpZiAobV9jdXJzb3JUeXBlID09IElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OktleU9ubHkp
IHsKKyAgICAgICAgLy8gSW5kZXggVmFsdWUgUmV0cmlldmFsIE9wZXJhdGlvbgorICAgICAgICBt
X2NhbGxiYWNrcy0+b25TdWNjZXNzKHByaW1hcnlLZXkuZ2V0KCkpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgLy8gSW5kZXggUmVmZXJlbmNlZCBWYWx1ZSBSZXRyaWV2YWwgT3BlcmF0
aW9uCisgICAgVmVjdG9yPHVpbnQ4X3Q+IHZhbHVlOworICAgIG9rID0gbV9iYWNraW5nU3RvcmUt
PmdldFJlY29yZCh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRh
YmFzZUlkLCBtX29iamVjdFN0b3JlSWQsICpwcmltYXJ5S2V5LCB2YWx1ZSk7CisgICAgaWYgKCFv
aykgeworICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVh
dGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yIGlu
IGdldFJlY29yZC4iKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAodmFsdWUu
aXNFbXB0eSgpKSB7CisgICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBpZiAobV9hdXRvSW5jcmVtZW50ICYmICFtX2tleVBhdGguaXNO
dWxsKCkpIHsKKyAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVkU2NyaXB0
VmFsdWU6OmNyZWF0ZUZyb21XaXJlQnl0ZXModmFsdWUpLCBwcmltYXJ5S2V5LCBtX2tleVBhdGgp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2Vy
aWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9tV2lyZUJ5dGVzKHZhbHVlKSk7CiB9CiAKLXZv
aWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6c2V0SW5kZXhLZXlzKGludDY0X3QgdHJhbnNhY3Rp
b25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQktleT4gcHJwUHJpbWFy
eUtleSwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPEluZGV4
S2V5cz4mKQordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpwdXQoaW50NjRfdCB0cmFuc2Fj
dGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFZlY3Rvcjx1aW50OF90PiogdmFsdWUsIFBh
c3NSZWZQdHI8SURCS2V5PiBrZXksIFB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+IGNhbGxiYWNrcywgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3Qg
VmVjdG9yPEluZGV4S2V5cz4mIGluZGV4S2V5cykKIHsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICBJREJfVFJBQ0UoIklEQkRhdGFiYXNlQmFja2VuZEltcGw6OnB1dCIpOworCisgICAg
QVNTRVJUKG1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uSWQpKTsKKyAgICBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0
cmFuc2FjdGlvbklkKTsKKyAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1vZGUoKSAhPSBJREJUcmFu
c2FjdGlvbjo6UkVBRF9PTkxZKTsKKworICAgIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEg
b2JqZWN0U3RvcmVNZXRhZGF0YSA9IG1ldGFkYXRhKCkub2JqZWN0U3RvcmVzLmdldChvYmplY3RT
dG9yZUlkKTsKKworICAgIEFTU0VSVChvYmplY3RTdG9yZU1ldGFkYXRhLmF1dG9JbmNyZW1lbnQg
fHwga2V5LmdldCgpKTsKKworICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soUHV0T3BlcmF0
aW9uOjpjcmVhdGUobV9iYWNraW5nU3RvcmUsIGlkKCksIG9iamVjdFN0b3JlTWV0YWRhdGEsICp2
YWx1ZSwga2V5LCBwdXRNb2RlLCBjYWxsYmFja3MsIGluZGV4SWRzLCBpbmRleEtleXMpKTsKK30K
Kwordm9pZCBQdXRPcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCog
dHJhbnNhY3Rpb24pCit7CisgICAgSURCX1RSQUNFKCJQdXRPcGVyYXRpb24iKTsKKyAgICBBU1NF
UlQodHJhbnNhY3Rpb24tPm1vZGUoKSAhPSBJREJUcmFuc2FjdGlvbjo6UkVBRF9PTkxZKTsKKyAg
ICBBU1NFUlQobV9pbmRleElkcy5zaXplKCkgPT0gbV9pbmRleEtleXMuc2l6ZSgpKTsKKyAgICBi
b29sIGtleVdhc0dlbmVyYXRlZCA9IGZhbHNlOworCisgICAgUmVmUHRyPElEQktleT4ga2V5Owor
ICAgIGlmIChtX3B1dE1vZGUgIT0gSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpDdXJzb3JV
cGRhdGUgJiYgbV9vYmplY3RTdG9yZS5hdXRvSW5jcmVtZW50ICYmICFtX2tleSkgeworICAgICAg
ICBSZWZQdHI8SURCS2V5PiBhdXRvSW5jS2V5ID0gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6
Z2VuZXJhdGVLZXkobV9iYWNraW5nU3RvcmUsIHRyYW5zYWN0aW9uLCBtX2RhdGFiYXNlSWQsIG1f
b2JqZWN0U3RvcmUuaWQpOworICAgICAgICBrZXlXYXNHZW5lcmF0ZWQgPSB0cnVlOworICAgICAg
ICBpZiAoIWF1dG9JbmNLZXktPmlzVmFsaWQoKSkgeworICAgICAgICAgICAgbV9jYWxsYmFja3Mt
Pm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpD
b25zdHJhaW50RXJyb3IsICJNYXhpbXVtIGtleSBnZW5lcmF0b3IgdmFsdWUgcmVhY2hlZC4iKSk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAga2V5ID0gYXV0b0luY0tl
eTsKKyAgICB9IGVsc2UKKyAgICAgICAga2V5ID0gbV9rZXk7CisKKyAgICBBU1NFUlQoa2V5ICYm
IGtleS0+aXNWYWxpZCgpKTsKKworICAgIElEQkJhY2tpbmdTdG9yZTo6UmVjb3JkSWRlbnRpZmll
ciByZWNvcmRJZGVudGlmaWVyOworICAgIGlmIChtX3B1dE1vZGUgPT0gSURCRGF0YWJhc2VCYWNr
ZW5kSW50ZXJmYWNlOjpBZGRPbmx5KSB7CisgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAg
ICAgICAgYm9vbCBvayA9IG1fYmFja2luZ1N0b3JlLT5rZXlFeGlzdHNJbk9iamVjdFN0b3JlKHRy
YW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2Jq
ZWN0U3RvcmUuaWQsICprZXksICZyZWNvcmRJZGVudGlmaWVyLCBmb3VuZCk7CisgICAgICAgIGlm
ICghb2spIHsKKyAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJy
b3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwg
ZXJyb3IgY2hlY2tpbmcga2V5IGV4aXN0ZW5jZS4iKSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKGZvdW5kKSB7CisgICAgICAgICAgICBtX2NhbGxiYWNrcy0+
b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkNv
bnN0cmFpbnRFcnJvciwgIktleSBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgb2JqZWN0IHN0b3JlLiIp
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIFZlY3RvcjxP
d25QdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6SW5kZXhXcml0ZXI+ID4gaW5kZXhXcml0
ZXJzOworICAgIFN0cmluZyBlcnJvck1lc3NhZ2U7CisgICAgYm9vbCBvYmV5c0NvbnN0cmFpbnRz
ID0gZmFsc2U7CisgICAgYm9vbCBiYWNraW5nU3RvcmVTdWNjZXNzID0gSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6bWFrZUluZGV4V3JpdGVycyh0cmFuc2FjdGlvbiwgbV9iYWNraW5nU3RvcmUu
Z2V0KCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZSwga2V5LCBrZXlXYXNHZW5lcmF0ZWQs
IG1faW5kZXhJZHMsIG1faW5kZXhLZXlzLCAmaW5kZXhXcml0ZXJzLCAmZXJyb3JNZXNzYWdlLCBv
YmV5c0NvbnN0cmFpbnRzKTsKKyAgICBpZiAoIWJhY2tpbmdTdG9yZVN1Y2Nlc3MpIHsKKyAgICAg
ICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvcjogYmFja2luZyBzdG9y
ZSBlcnJvciB1cGRhdGluZyBpbmRleCBrZXlzLiIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBpZiAoIW9iZXlzQ29uc3RyYWludHMpIHsKKyAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJy
b3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDb25zdHJh
aW50RXJyb3IsIGVycm9yTWVzc2FnZSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
Ly8gQmVmb3JlIHRoaXMgcG9pbnQsIGRvbid0IGRvIGFueSBtdXRhdGlvbi4gQWZ0ZXIgdGhpcyBw
b2ludCwgcm9sbGJhY2sgdGhlIHRyYW5zYWN0aW9uIGluIGNhc2Ugb2YgZXJyb3IuCisgICAgYmFj
a2luZ1N0b3JlU3VjY2VzcyA9IG1fYmFja2luZ1N0b3JlLT5wdXRSZWNvcmQodHJhbnNhY3Rpb24t
PmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZS5p
ZCwgKmtleSwgbV92YWx1ZSwgJnJlY29yZElkZW50aWZpZXIpOworICAgIGlmICghYmFja2luZ1N0
b3JlU3VjY2VzcykgeworICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVy
cm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFs
IGVycm9yOiBiYWNraW5nIHN0b3JlIGVycm9yIHBlcmZvcm1pbmcgcHV0L2FkZC4iKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGluZGV4V3Jp
dGVycy5zaXplKCk7ICsraSkgeworICAgICAgICBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpJ
bmRleFdyaXRlciogaW5kZXhXcml0ZXIgPSBpbmRleFdyaXRlcnNbaV0uZ2V0KCk7CisgICAgICAg
IGluZGV4V3JpdGVyLT53cml0ZUluZGV4S2V5cyhyZWNvcmRJZGVudGlmaWVyLCAqbV9iYWNraW5n
U3RvcmUsIHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNl
SWQsIG1fb2JqZWN0U3RvcmUuaWQpOworICAgIH0KKworICAgIGlmIChtX29iamVjdFN0b3JlLmF1
dG9JbmNyZW1lbnQgJiYgbV9wdXRNb2RlICE9IElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6
Q3Vyc29yVXBkYXRlICYmIGtleS0+dHlwZSgpID09IElEQktleTo6TnVtYmVyVHlwZSkgeworICAg
ICAgICBib29sIG9rID0gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6dXBkYXRlS2V5R2VuZXJh
dG9yKG1fYmFja2luZ1N0b3JlLCB0cmFuc2FjdGlvbiwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0
b3JlLmlkLCBrZXkuZ2V0KCksICFrZXlXYXNHZW5lcmF0ZWQpOworICAgICAgICBpZiAoIW9rKSB7
CisgICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVh
dGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yIHVw
ZGF0aW5nIGtleSBnZW5lcmF0b3IuIikpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgfQorCisgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhrZXkucmVsZWFzZSgpKTsKK30K
KworCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnNldEluZGV4S2V5cyhpbnQ2NF90IHRy
YW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJLZXk+IHBy
cFByaW1hcnlLZXksIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMsIGNvbnN0IFZlY3Rv
cjxJbmRleEtleXM+JiBpbmRleEtleXMpCit7CisgICAgSURCX1RSQUNFKCJJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsOjpzZXRJbmRleEtleXMiKTsKKyAgICBpZiAoIW1fdHJhbnNhY3Rpb25zLmNvbnRh
aW5zKHRyYW5zYWN0aW9uSWQpKQorICAgICAgICByZXR1cm47CisKKyAgICBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlv
bklkKTsKKyAgICBpZiAodHJhbnNhY3Rpb24tPmlzRmluaXNoZWQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSA9IHBycFByaW1hcnlLZXk7CisgICAg
UmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gc3RvcmUgPSBiYWNraW5nU3RvcmUoKTsKKyAgICAvLyBG
SVhNRTogVGhpcyBtZXRob2QgY291bGQgYmUgYXN5bmNocm9ub3VzLCBidXQgd2UgbmVlZCB0byBl
dmFsdWF0ZSBpZiBpdCdzIHdvcnRoIHRoZSBleHRyYSBjb21wbGV4aXR5LgorICAgIElEQkJhY2tp
bmdTdG9yZTo6UmVjb3JkSWRlbnRpZmllciByZWNvcmRJZGVudGlmaWVyOworICAgIGJvb2wgZm91
bmQgPSBmYWxzZTsKKyAgICBib29sIG9rID0gc3RvcmUtPmtleUV4aXN0c0luT2JqZWN0U3RvcmUo
dHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fbWV0YWRhdGEuaWQsIG9i
amVjdFN0b3JlSWQsICpwcmltYXJ5S2V5LCAmcmVjb3JkSWRlbnRpZmllciwgZm91bmQpOworICAg
IGlmICghb2spIHsKKyAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KElEQkRhdGFiYXNlRXJyb3I6
OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJy
b3Igc2V0dGluZyBpbmRleCBrZXlzLiIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBp
ZiAoIWZvdW5kKSB7CisgICAgICAgIFJlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBlcnJvciA9IElE
QkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9y
LCBTdHJpbmc6OmZvcm1hdCgiSW50ZXJuYWwgZXJyb3Igc2V0dGluZyBpbmRleCBrZXlzIGZvciBv
YmplY3Qgc3RvcmUuIikpOworICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoZXJyb3IucmVsZWFz
ZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFZlY3RvcjxPd25QdHI8SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6SW5kZXhXcml0ZXI+ID4gaW5kZXhXcml0ZXJzOworICAgIFN0
cmluZyBlcnJvck1lc3NhZ2U7CisgICAgYm9vbCBvYmV5c0NvbnN0cmFpbnRzID0gZmFsc2U7Cisg
ICAgQVNTRVJUKG1ldGFkYXRhKCkub2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSWQp
KTsKKyAgICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1ldGFkYXRh
ID0gbWV0YWRhdGEoKS5vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpOworICAgIGJvb2wg
YmFja2luZ1N0b3JlU3VjY2VzcyA9IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Om1ha2VJbmRl
eFdyaXRlcnModHJhbnNhY3Rpb24sIHN0b3JlLmdldCgpLCBpZCgpLCBvYmplY3RTdG9yZU1ldGFk
YXRhLCBwcmltYXJ5S2V5LCBmYWxzZSwgaW5kZXhJZHMsIGluZGV4S2V5cywgJmluZGV4V3JpdGVy
cywgJmVycm9yTWVzc2FnZSwgb2JleXNDb25zdHJhaW50cyk7CisgICAgaWYgKCFiYWNraW5nU3Rv
cmVTdWNjZXNzKSB7CisgICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydChJREJEYXRhYmFzZUVycm9y
OjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVy
cm9yOiBiYWNraW5nIHN0b3JlIGVycm9yIHVwZGF0aW5nIGluZGV4IGtleXMuIikpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGlmICghb2JleXNDb25zdHJhaW50cykgeworICAgICAgICB0
cmFuc2FjdGlvbi0+YWJvcnQoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpDb25zdHJhaW50RXJyb3IsIGVycm9yTWVzc2FnZSkpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbmRleFdyaXRlcnMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6SW5kZXhXcml0ZXIq
IGluZGV4V3JpdGVyID0gaW5kZXhXcml0ZXJzW2ldLmdldCgpOworICAgICAgICBpbmRleFdyaXRl
ci0+d3JpdGVJbmRleEtleXMocmVjb3JkSWRlbnRpZmllciwgKnN0b3JlLmdldCgpLCB0cmFuc2Fj
dGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgaWQoKSwgb2JqZWN0U3RvcmVJZCk7Cisg
ICAgfQogfQogCiB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnNldEluZGV4ZXNSZWFkeShp
bnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgVmVjdG9y
PGludDY0X3Q+JiBpbmRleElkcykKIHsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBJ
REJfVFJBQ0UoIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnNldEluZGV4ZXNSZWFkeSIpOwor
CisgICAgaWYgKCFtX3RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbklkKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24g
PSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7CisgICAgaWYgKHRyYW5zYWN0aW9u
LT5pc0ZpbmlzaGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghdHJhbnNhY3Rpb24t
PnNjaGVkdWxlVGFzayhJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U6OlByZWVtcHRpdmVU
YXNrLCBTZXRJbmRleGVzUmVhZHlPcGVyYXRpb246OmNyZWF0ZShpbmRleElkcy5zaXplKCkpKSkK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgU2V0SW5kZXhlc1JlYWR5
T3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9u
KQoreworICAgIElEQl9UUkFDRSgiU2V0SW5kZXhlc1JlYWR5T3BlcmF0aW9uIik7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtX2luZGV4Q291bnQ7ICsraSkKKyAgICAgICAgdHJhbnNhY3Rp
b24tPmRpZENvbXBsZXRlUHJlZW1wdGl2ZUV2ZW50KCk7CiB9CiAKIHZvaWQgSURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6b3BlbkN1cnNvcihpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlS
YW5nZSwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBib29sIGtleU9ubHksIFRhc2tUeXBlIHRh
c2tUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQogewotICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIElEQl9UUkFDRSgiSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6
b3BlbkN1cnNvciIpOworICAgIEFTU0VSVChtX3RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2Fj
dGlvbklkKSk7CisgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24gPSBt
X3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7CisKKyAgICB0cmFuc2FjdGlvbi0+c2No
ZWR1bGVUYXNrKE9wZW5DdXJzb3JPcGVyYXRpb246OmNyZWF0ZShtX2JhY2tpbmdTdG9yZSwgaWQo
KSwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5UmFuZ2UsIGRpcmVjdGlvbiwga2V5T25seSA/
IElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OktleU9ubHkgOiBJREJDdXJzb3JCYWNrZW5kSW50
ZXJmYWNlOjpLZXlBbmRWYWx1ZSwgdGFza1R5cGUsIGNhbGxiYWNrcykpOwogfQogCi12b2lkIElE
QkRhdGFiYXNlQmFja2VuZEltcGw6OmNvdW50KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pCit2b2lkIE9wZW5DdXJzb3JPcGVyYXRpb246OnBl
cmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24pCiB7Ci0gICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgSURCX1RSQUNFKCJPcGVuQ3Vyc29yT3BlcmF0aW9uIik7
CisKKyAgICAvLyBUaGUgZnJvbnRlbmQgaGFzIGJlZ3VuIGluZGV4aW5nLCBzbyB0aGlzIHBhdXNl
cyB0aGUgdHJhbnNhY3Rpb24KKyAgICAvLyB1bnRpbCB0aGUgaW5kZXhpbmcgaXMgY29tcGxldGUu
IFRoaXMgY2FuJ3QgaGFwcGVuIGFueSBlYXJsaWVyCisgICAgLy8gYmVjYXVzZSB3ZSBkb24ndCB3
YW50IHRvIHN3aXRjaCB0byBlYXJseSBtb2RlIGluIGNhc2UgbXVsdGlwbGUKKyAgICAvLyBpbmRl
eGVzIGFyZSBiZWluZyBjcmVhdGVkIGluIGEgcm93LCB3aXRoIHB1dCgpJ3MgaW4gYmV0d2Vlbi4K
KyAgICBpZiAobV90YXNrVHlwZSA9PSBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlByZWVt
cHRpdmVUYXNrKQorICAgICAgICB0cmFuc2FjdGlvbi0+YWRkUHJlZW1wdGl2ZUV2ZW50KCk7CisK
KyAgICBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBzdGF0aWNfY2FzdDxJREJDdXJz
b3I6OkRpcmVjdGlvbj4obV9kaXJlY3Rpb24pOworICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU6
OkN1cnNvcj4gYmFja2luZ1N0b3JlQ3Vyc29yOworICAgIGlmIChtX2luZGV4SWQgPT0gSURCSW5k
ZXhNZXRhZGF0YTo6SW52YWxpZElkKSB7CisgICAgICAgIEFTU0VSVChtX2N1cnNvclR5cGUgIT0g
SURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6S2V5T25seSk7CisgICAgICAgIGJhY2tpbmdTdG9y
ZUN1cnNvciA9IG1fYmFja2luZ1N0b3JlLT5vcGVuT2JqZWN0U3RvcmVDdXJzb3IodHJhbnNhY3Rp
b24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9y
ZUlkLCBtX2tleVJhbmdlLmdldCgpLCBkaXJlY3Rpb24pOworICAgIH0gZWxzZSB7CisgICAgICAg
IEFTU0VSVChtX3Rhc2tUeXBlID09IElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6Tm9ybWFs
VGFzayk7CisgICAgICAgIGlmIChtX2N1cnNvclR5cGUgPT0gSURCQ3Vyc29yQmFja2VuZEludGVy
ZmFjZTo6S2V5T25seSkKKyAgICAgICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IG1fYmFja2lu
Z1N0b3JlLT5vcGVuSW5kZXhLZXlDdXJzb3IodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5z
YWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCBtX2luZGV4SWQsIG1fa2V5
UmFuZ2UuZ2V0KCksIGRpcmVjdGlvbik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGJhY2tp
bmdTdG9yZUN1cnNvciA9IG1fYmFja2luZ1N0b3JlLT5vcGVuSW5kZXhDdXJzb3IodHJhbnNhY3Rp
b24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9y
ZUlkLCBtX2luZGV4SWQsIG1fa2V5UmFuZ2UuZ2V0KCksIGRpcmVjdGlvbik7CisgICAgfQorCisg
ICAgaWYgKCFiYWNraW5nU3RvcmVDdXJzb3IpIHsKKyAgICAgICAgbV9jYWxsYmFja3MtPm9uU3Vj
Y2VzcyhzdGF0aWNfY2FzdDxTZXJpYWxpemVkU2NyaXB0VmFsdWUqPigwKSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U6OlRhc2tU
eXBlIHRhc2tUeXBlKHN0YXRpY19jYXN0PElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZTo6
VGFza1R5cGU+KG1fdGFza1R5cGUpKTsKKyAgICBSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+
IGN1cnNvciA9IElEQkN1cnNvckJhY2tlbmRJbXBsOjpjcmVhdGUoYmFja2luZ1N0b3JlQ3Vyc29y
LmdldCgpLCBtX2N1cnNvclR5cGUsIHRhc2tUeXBlLCB0cmFuc2FjdGlvbiwgbV9vYmplY3RTdG9y
ZUlkKTsKKyAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKGN1cnNvciwgY3Vyc29yLT5rZXkoKSwg
Y3Vyc29yLT5wcmltYXJ5S2V5KCksIGN1cnNvci0+dmFsdWUoKSk7CiB9CiAKLXZvaWQgSURCRGF0
YWJhc2VCYWNrZW5kSW1wbDo6ZGVsZXRlUmFuZ2UoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4pCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNvdW50KGludDY0X3Qg
dHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBh
c3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4g
Y2FsbGJhY2tzKQogewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIElEQl9UUkFDRSgi
SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y291bnQiKTsKKyAgICBBU1NFUlQobV90cmFuc2FjdGlv
bnMuY29udGFpbnModHJhbnNhY3Rpb25JZCkpOworICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGwqIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOworICAg
IEFTU0VSVChtZXRhZGF0YSgpLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlkKSk7
CisgICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhDb3VudE9wZXJhdGlvbjo6Y3JlYXRlKG1f
YmFja2luZ1N0b3JlLCBpZCgpLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBrZXlSYW5nZSwgY2Fs
bGJhY2tzKSk7CiB9CiAKLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y2xlYXIoaW50NjRf
dCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPikKK3ZvaWQgQ291bnRPcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbCogdHJhbnNhY3Rpb24pCiB7Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
SURCX1RSQUNFKCJDb3VudE9wZXJhdGlvbiIpOworICAgIHVpbnQzMl90IGNvdW50ID0gMDsKKyAg
ICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNvcjsKKwor
ICAgIGlmIChtX2luZGV4SWQgPT0gSURCSW5kZXhNZXRhZGF0YTo6SW52YWxpZElkKQorICAgICAg
ICBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX2JhY2tpbmdTdG9yZS0+b3Blbk9iamVjdFN0b3JlS2V5
Q3Vyc29yKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNl
SWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9rZXlSYW5nZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhUKTsK
KyAgICBlbHNlCisgICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IG1fYmFja2luZ1N0b3JlLT5v
cGVuSW5kZXhLZXlDdXJzb3IodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCks
IG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCBtX2luZGV4SWQsIG1fa2V5UmFuZ2UuZ2V0
KCksIElEQkN1cnNvcjo6TkVYVCk7CisgICAgaWYgKCFiYWNraW5nU3RvcmVDdXJzb3IpIHsKKyAg
ICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2Vzcyhjb3VudCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBkbyB7CisgICAgICAgICsrY291bnQ7CisgICAgfSB3aGlsZSAoYmFja2luZ1N0
b3JlQ3Vyc29yLT5jb250aW51ZUZ1bmN0aW9uKDApKTsKKworICAgIG1fY2FsbGJhY2tzLT5vblN1
Y2Nlc3MoY291bnQpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZVJh
bmdlKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVm
UHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxi
YWNrcykKK3sKKyAgICBJREJfVFJBQ0UoIklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZVJh
bmdlIik7CisKKyAgICBBU1NFUlQobV90cmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb25J
ZCkpOworICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uID0gbV90cmFu
c2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOworICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9k
ZSgpICE9IElEQlRyYW5zYWN0aW9uOjpSRUFEX09OTFkpOworCisgICAgdHJhbnNhY3Rpb24tPnNj
aGVkdWxlVGFzayhEZWxldGVSYW5nZU9wZXJhdGlvbjo6Y3JlYXRlKG1fYmFja2luZ1N0b3JlLCBp
ZCgpLCBvYmplY3RTdG9yZUlkLCBrZXlSYW5nZSwgY2FsbGJhY2tzKSk7Cit9CisKK3ZvaWQgRGVs
ZXRlUmFuZ2VPcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJh
bnNhY3Rpb24pCit7CisgICAgSURCX1RSQUNFKCJEZWxldGVSYW5nZU9wZXJhdGlvbiIpOworCisg
ICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJzb3IgPSBt
X2JhY2tpbmdTdG9yZS0+b3Blbk9iamVjdFN0b3JlQ3Vyc29yKHRyYW5zYWN0aW9uLT5iYWNraW5n
U3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9rZXlS
YW5nZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhUKTsKKyAgICBpZiAoYmFja2luZ1N0b3JlQ3Vyc29y
KSB7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIG1fYmFja2luZ1N0b3JlLT5kZWxldGVSZWNv
cmQodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJZCwg
bV9vYmplY3RTdG9yZUlkLCBiYWNraW5nU3RvcmVDdXJzb3ItPnJlY29yZElkZW50aWZpZXIoKSk7
CisgICAgICAgIH0gd2hpbGUgKGJhY2tpbmdTdG9yZUN1cnNvci0+Y29udGludWVGdW5jdGlvbigw
KSk7CisgICAgfQorCisgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcygpOworfQorCit2b2lkIElE
QkRhdGFiYXNlQmFja2VuZEltcGw6OmNsZWFyKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorewor
ICAgIElEQl9UUkFDRSgiSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y2xlYXIiKTsKKworICAgIEFT
U0VSVChtX3RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbklkKSk7CisgICAgSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJh
bnNhY3Rpb25JZCk7CisgICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgIT0gSURCVHJhbnNh
Y3Rpb246OlJFQURfT05MWSk7CisKKyAgICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKENsZWFy
T3BlcmF0aW9uOjpjcmVhdGUobV9iYWNraW5nU3RvcmUsIGlkKCksIG9iamVjdFN0b3JlSWQsIGNh
bGxiYWNrcykpOworfQorCit2b2lkIENsZWFyT3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQoreworICAgIElEQl9UUkFDRSgiT2JqZWN0U3Rv
cmVDbGVhck9wZXJhdGlvbiIpOworICAgIG1fYmFja2luZ1N0b3JlLT5jbGVhck9iamVjdFN0b3Jl
KHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1f
b2JqZWN0U3RvcmVJZCk7CisgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcygpOwogfQogCiB2b2lk
IElEQkRhdGFiYXNlQmFja2VuZEltcGw6OkRlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpwZXJm
b3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguY3BwCmluZGV4IDc2MjY0ODhlYTBmZDNl
NzBkNzQ2NDQ0MmYyZWM4NWQ3YTRmNTliMDAuLmE4YzE5NjA2MDNhNjBlMmZiOGJjOTZlNDYyMDMw
YWI4ZWM5OTEzZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkluZGV4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJ
bmRleC5jcHAKQEAgLTQzLDE2ICs0MywxNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBzaG9ydCBkZWZhdWx0RGlyZWN0aW9uID0gSURCQ3Vyc29yOjpORVhU
OwogCi1JREJJbmRleDo6SURCSW5kZXgoY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgbWV0YWRhdGEs
IFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBiYWNrZW5kLCBJREJPYmplY3RT
dG9yZSogb2JqZWN0U3RvcmUsIElEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKK0lEQkluZGV4
OjpJREJJbmRleChjb25zdCBJREJJbmRleE1ldGFkYXRhJiBtZXRhZGF0YSwgSURCT2JqZWN0U3Rv
cmUqIG9iamVjdFN0b3JlLCBJREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCiAgICAgOiBtX21l
dGFkYXRhKG1ldGFkYXRhKQotICAgICwgbV9iYWNrZW5kKGJhY2tlbmQpCiAgICAgLCBtX29iamVj
dFN0b3JlKG9iamVjdFN0b3JlKQogICAgICwgbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKICAg
ICAsIG1fZGVsZXRlZChmYWxzZSkKIHsKLSAgICBBU1NFUlQobV9iYWNrZW5kKTsKICAgICBBU1NF
UlQobV9vYmplY3RTdG9yZSk7CiAgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb24pOworICAgIEFTU0VS
VChtX21ldGFkYXRhLmlkICE9IElEQkluZGV4TWV0YWRhdGE6OkludmFsaWRJZCk7CiB9CiAKIElE
QkluZGV4Ojp+SURCSW5kZXgoKQpAQCAtNzYsOCArNzUsNyBAQCBQYXNzUmVmUHRyPElEQlJlcXVl
c3Q+IElEQkluZGV4OjpvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQs
IFBhcwogCiAgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVh
dGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwog
ICAgIHJlcXVlc3QtPnNldEN1cnNvckRldGFpbHMoSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6
S2V5QW5kVmFsdWUsIGRpcmVjdGlvbik7Ci0gICAgbV9iYWNrZW5kLT5vcGVuQ3Vyc29yKGtleVJh
bmdlLCBkaXJlY3Rpb24sIHJlcXVlc3QsIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOwot
ICAgIEFTU0VSVCghZWMpOworICAgIGJhY2tlbmREQigpLT5vcGVuQ3Vyc29yKG1fdHJhbnNhY3Rp
b24tPmlkKCksIG1fb2JqZWN0U3RvcmUtPmlkKCksIG1fbWV0YWRhdGEuaWQsIGtleVJhbmdlLCBk
aXJlY3Rpb24sIGZhbHNlLCBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6Ok5vcm1hbFRhc2ss
IHJlcXVlc3QpOwogICAgIHJldHVybiByZXF1ZXN0OwogfQogCkBAIC0xMDIsOCArMTAwLDggQEAg
UGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJJbmRleDo6Y291bnQoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCwgUGFzc1JlZlAKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIFJl
ZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElE
QkFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKLSAgICBtX2JhY2tlbmQt
PmNvdW50KGtleVJhbmdlLCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsK
LSAgICBBU1NFUlQoIWVjKTsKKyAgICBJREJEYXRhYmFzZU1ldGFkYXRhIG1ldGFkYXRhKG1fdHJh
bnNhY3Rpb24tPmRiKCktPm1ldGFkYXRhKCkpOworICAgIGJhY2tlbmREQigpLT5jb3VudChtX3Ry
YW5zYWN0aW9uLT5pZCgpLCBtX29iamVjdFN0b3JlLT5pZCgpLCBtX21ldGFkYXRhLmlkLCBrZXlS
YW5nZSwgcmVxdWVzdCk7CiAgICAgcmV0dXJuIHJlcXVlc3Q7CiB9CiAKQEAgLTEzMyw4ICsxMzEs
NyBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQkluZGV4OjpvcGVuS2V5Q3Vyc29yKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCiAKICAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVx
dWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwg
bV90cmFuc2FjdGlvbi5nZXQoKSk7CiAgICAgcmVxdWVzdC0+c2V0Q3Vyc29yRGV0YWlscyhJREJD
dXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpLZXlPbmx5LCBkaXJlY3Rpb24pOwotICAgIG1fYmFja2Vu
ZC0+b3BlbktleUN1cnNvcihrZXlSYW5nZSwgZGlyZWN0aW9uLCByZXF1ZXN0LCBtX3RyYW5zYWN0
aW9uLT5iYWNrZW5kKCksIGVjKTsKLSAgICBBU1NFUlQoIWVjKTsKKyAgICBiYWNrZW5kREIoKS0+
b3BlbkN1cnNvcihtX3RyYW5zYWN0aW9uLT5pZCgpLCBtX29iamVjdFN0b3JlLT5pZCgpLCBtX21l
dGFkYXRhLmlkLCBrZXlSYW5nZSwgZGlyZWN0aW9uLCB0cnVlLCBJREJEYXRhYmFzZUJhY2tlbmRJ
bnRlcmZhY2U6Ok5vcm1hbFRhc2ssIHJlcXVlc3QpOwogICAgIHJldHVybiByZXF1ZXN0OwogfQog
CkBAIC0xNzMsOCArMTcwLDcgQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJJbmRleDo6Z2V0
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHIKICAgICB9CiAKICAg
ICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0
LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7Ci0gICAgbV9iYWNr
ZW5kLT5nZXQoa2V5UmFuZ2UsIHJlcXVlc3QsIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMp
OwotICAgIEFTU0VSVCghZWMpOworICAgIGJhY2tlbmREQigpLT5nZXQobV90cmFuc2FjdGlvbi0+
aWQoKSwgbV9vYmplY3RTdG9yZS0+aWQoKSwgbV9tZXRhZGF0YS5pZCwga2V5UmFuZ2UsIGZhbHNl
LCByZXF1ZXN0KTsKICAgICByZXR1cm4gcmVxdWVzdDsKIH0KIApAQCAtMjA1LDExICsyMDEsMTUg
QEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJJbmRleDo6Z2V0S2V5KFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWYKICAgICB9CiAKICAgICBSZWZQdHI8SURCUmVxdWVz
dD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0
aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7Ci0gICAgbV9iYWNrZW5kLT5nZXRLZXkoa2V5UmFu
Z2UsIHJlcXVlc3QsIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOwotICAgIEFTU0VSVCgh
ZWMpOworICAgIGJhY2tlbmREQigpLT5nZXQobV90cmFuc2FjdGlvbi0+aWQoKSwgbV9vYmplY3RT
dG9yZS0+aWQoKSwgbV9tZXRhZGF0YS5pZCwga2V5UmFuZ2UsIHRydWUsIHJlcXVlc3QpOwogICAg
IHJldHVybiByZXF1ZXN0OwogfQogCitJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UqIElEQklu
ZGV4OjpiYWNrZW5kREIoKSBjb25zdAoreworICAgIHJldHVybiBtX3RyYW5zYWN0aW9uLT5iYWNr
ZW5kREIoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJJbmRleC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
SW5kZXguaAppbmRleCBjZjRmMWNmMzNjODQxMTJmOTVlNDA5OGYyMTY4MzA0NjI1MjMxMGEzLi4z
MDcyZjE1Yjk4MTIyZjgxZDQ0NGQ0OTUxZDI5MjA3YjcyZWU4NmVjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmgKQEAgLTI3LDcgKzI3LDcgQEAKICNkZWZp
bmUgSURCSW5kZXhfaAogCiAjaW5jbHVkZSAiSURCQ3Vyc29yLmgiCi0jaW5jbHVkZSAiSURCSW5k
ZXhCYWNrZW5kSW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2UuaCIKICNpbmNsdWRl
ICJJREJLZXlQYXRoLmgiCiAjaW5jbHVkZSAiSURCS2V5UmFuZ2UuaCIKICNpbmNsdWRlICJJREJN
ZXRhZGF0YS5oIgpAQCAtNDUsOSArNDUsOSBAQCBjbGFzcyBJREJPYmplY3RTdG9yZTsKIAogY2xh
c3MgSURCSW5kZXggOiBwdWJsaWMgU2NyaXB0V3JhcHBhYmxlLCBwdWJsaWMgUmVmQ291bnRlZDxJ
REJJbmRleD4gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkluZGV4PiBjcmVh
dGUoY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgbWV0YWRhdGEsIFBhc3NSZWZQdHI8SURCSW5kZXhC
YWNrZW5kSW50ZXJmYWNlPiBiYWNrZW5kLCBJREJPYmplY3RTdG9yZSogb2JqZWN0U3RvcmUsIElE
QlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJJbmRl
eD4gY3JlYXRlKGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIG1ldGFkYXRhLCBJREJPYmplY3RTdG9y
ZSogb2JqZWN0U3RvcmUsIElEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKICAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCSW5kZXgobWV0YWRhdGEsIGJhY2tlbmQsIG9iamVj
dFN0b3JlLCB0cmFuc2FjdGlvbikpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQklu
ZGV4KG1ldGFkYXRhLCBvYmplY3RTdG9yZSwgdHJhbnNhY3Rpb24pKTsKICAgICB9CiAgICAgfklE
QkluZGV4KCk7CiAKQEAgLTgzLDExICs4MywxMiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIG1hcmtE
ZWxldGVkKCkgeyBtX2RlbGV0ZWQgPSB0cnVlOyB9CiAKKyAgICBJREJEYXRhYmFzZUJhY2tlbmRJ
bnRlcmZhY2UqIGJhY2tlbmREQigpIGNvbnN0OworCiBwcml2YXRlOgotICAgIElEQkluZGV4KGNv
bnN0IElEQkluZGV4TWV0YWRhdGEmLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFj
ZT4sIElEQk9iamVjdFN0b3JlKiwgSURCVHJhbnNhY3Rpb24qKTsKKyAgICBJREJJbmRleChjb25z
dCBJREJJbmRleE1ldGFkYXRhJiwgSURCT2JqZWN0U3RvcmUqLCBJREJUcmFuc2FjdGlvbiopOwog
CiAgICAgSURCSW5kZXhNZXRhZGF0YSBtX21ldGFkYXRhOwotICAgIFJlZlB0cjxJREJJbmRleEJh
Y2tlbmRJbnRlcmZhY2U+IG1fYmFja2VuZDsKICAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmU+IG1f
b2JqZWN0U3RvcmU7CiAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBtX3RyYW5zYWN0aW9uOwog
ICAgIGJvb2wgbV9kZWxldGVkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmNwcAppbmRleCBlOTIzNDQ3NDkzMWJjNjcw
YmU3ZjkwYjNmMWMzNWMyOTFjMTM4MDJhLi44OTQwYzVlN2UxOGJiYTRhODA1NTY0ZTRiZTg0NmY5
MzI0NzNiODFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJJbmRleEJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmNwcApAQCAtNDIsOTQgKzQyLDggQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1jbGFzcyBJREJJbmRleEJhY2tlbmRJbXBsOjpPcGVuSW5kZXhDdXJz
b3JPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9u
IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGlu
ZGV4LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgdW5zaWduZWQgc2hvcnQgZGly
ZWN0aW9uLCBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUs
IFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi0gICAgewotICAgICAgICByZXR1
cm4gYWRvcHRQdHIobmV3IE9wZW5JbmRleEN1cnNvck9wZXJhdGlvbihpbmRleCwga2V5UmFuZ2Us
IGRpcmVjdGlvbiwgY3Vyc29yVHlwZSwgY2FsbGJhY2tzKSk7Ci0gICAgfQotICAgIHZpcnR1YWwg
dm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqKTsKLXByaXZhdGU6Ci0gICAg
T3BlbkluZGV4Q3Vyc29yT3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4g
aW5kZXgsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCB1bnNpZ25lZCBzaG9ydCBk
aXJlY3Rpb24sIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OkN1cnNvclR5cGUgY3Vyc29yVHlw
ZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLSAgICAgICAgOiBtX2luZGV4
KGluZGV4KQotICAgICAgICAsIG1fa2V5UmFuZ2Uoa2V5UmFuZ2UpCi0gICAgICAgICwgbV9kaXJl
Y3Rpb24oZGlyZWN0aW9uKQotICAgICAgICAsIG1fY3Vyc29yVHlwZShjdXJzb3JUeXBlKQotICAg
ICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKLSAgICB7Ci0gICAgfQotCi0gICAgUmVmUHRy
PElEQkluZGV4QmFja2VuZEltcGw+IG1faW5kZXg7Ci0gICAgUmVmUHRyPElEQktleVJhbmdlPiBt
X2tleVJhbmdlOwotICAgIHVuc2lnbmVkIHNob3J0IG1fZGlyZWN0aW9uOwotICAgIElEQkN1cnNv
ckJhY2tlbmRJbnRlcmZhY2U6OkN1cnNvclR5cGUgbV9jdXJzb3JUeXBlOwotICAgIFJlZlB0cjxJ
REJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOwotfTsKLQotY2xhc3MgSURCSW5kZXhCYWNrZW5kSW1w
bDo6SW5kZXhDb3VudE9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
OjpPcGVyYXRpb24gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCSW5kZXhCYWNr
ZW5kSW1wbD4gaW5kZXgsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UHRyKG5ldyBJbmRleENvdW50T3BlcmF0aW9uKGluZGV4LCBrZXlSYW5nZSwgY2FsbGJhY2tzKSk7
Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGwqKTsKLXByaXZhdGU6Ci0gICAgSW5kZXhDb3VudE9wZXJhdGlvbihQYXNzUmVmUHRyPElEQklu
ZGV4QmFja2VuZEltcGw+IGluZGV4LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLSAgICAgICAgOiBtX2luZGV4KGlu
ZGV4KQotICAgICAgICAsIG1fa2V5UmFuZ2Uoa2V5UmFuZ2UpCi0gICAgICAgICwgbV9jYWxsYmFj
a3MoY2FsbGJhY2tzKQotICAgIHsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5k
SW1wbD4gbV9pbmRleDsKLSAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IG1fa2V5UmFuZ2U7Ci0gICAg
UmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7Ci19OwotCi1jbGFzcyBJREJJbmRleEJh
Y2tlbmRJbXBsOjpJbmRleFJlZmVyZW5jZWRWYWx1ZVJldHJpZXZhbE9wZXJhdGlvbiA6IHB1Ymxp
YyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24gewotcHVibGljOgotICAgIHN0
YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbj4gY3Jl
YXRlKFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgsIFBhc3NSZWZQdHI8SURC
S2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBJbmRleFJlZmVyZW5jZWRWYWx1ZVJl
dHJpZXZhbE9wZXJhdGlvbihpbmRleCwga2V5UmFuZ2UsIGNhbGxiYWNrcykpOwotICAgIH0KLSAg
ICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7Ci1wcml2
YXRlOgotICAgIEluZGV4UmVmZXJlbmNlZFZhbHVlUmV0cmlldmFsT3BlcmF0aW9uKFBhc3NSZWZQ
dHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtl
eVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQotICAgICAgICA6IG1f
aW5kZXgoaW5kZXgpCi0gICAgICAgICwgbV9rZXlSYW5nZShrZXlSYW5nZSkKLSAgICAgICAgLCBt
X2NhbGxiYWNrcyhjYWxsYmFja3MpCi0gICAgewotICAgIH0KLQotICAgIFJlZlB0cjxJREJJbmRl
eEJhY2tlbmRJbXBsPiBtX2luZGV4OwotICAgIFJlZlB0cjxJREJLZXlSYW5nZT4gbV9rZXlSYW5n
ZTsKLSAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKLX07Ci0KLWNsYXNzIElE
QkluZGV4QmFja2VuZEltcGw6OkluZGV4VmFsdWVSZXRyaWV2YWxPcGVyYXRpb24gOiBwdWJsaWMg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0
aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0
ZShQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4LCBQYXNzUmVmUHRyPElEQktl
eVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgSW5kZXhWYWx1ZVJldHJpZXZhbE9wZXJh
dGlvbihpbmRleCwga2V5UmFuZ2UsIGNhbGxiYWNrcykpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZv
aWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7Ci1wcml2YXRlOgotICAgIElu
ZGV4VmFsdWVSZXRyaWV2YWxPcGVyYXRpb24oUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBs
PiBpbmRleCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiBjYWxsYmFja3MpCi0gICAgICAgIDogbV9pbmRleChpbmRleCkKLSAgICAgICAg
LCBtX2tleVJhbmdlKGtleVJhbmdlKQotICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykK
LSAgICB7Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IG1faW5kZXg7
Ci0gICAgUmVmUHRyPElEQktleVJhbmdlPiBtX2tleVJhbmdlOwotICAgIFJlZlB0cjxJREJDYWxs
YmFja3M+IG1fY2FsbGJhY2tzOwotfTsKLQotCi1JREJJbmRleEJhY2tlbmRJbXBsOjpJREJJbmRl
eEJhY2tlbmRJbXBsKGNvbnN0IElEQkRhdGFiYXNlQmFja2VuZEltcGwqIGRhdGFiYXNlLCBJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsKiBvYmplY3RTdG9yZUJhY2tlbmQsIGNvbnN0IElEQkluZGV4
TWV0YWRhdGEmIG1ldGFkYXRhKQorSURCSW5kZXhCYWNrZW5kSW1wbDo6SURCSW5kZXhCYWNrZW5k
SW1wbChjb25zdCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKiBkYXRhYmFzZSwgY29uc3QgSURCSW5k
ZXhNZXRhZGF0YSYgbWV0YWRhdGEpCiAgICAgOiBtX2RhdGFiYXNlKGRhdGFiYXNlKQotICAgICwg
bV9vYmplY3RTdG9yZUJhY2tlbmQob2JqZWN0U3RvcmVCYWNrZW5kKQogICAgICwgbV9tZXRhZGF0
YShtZXRhZGF0YSkKIHsKIH0KQEAgLTEzOCwxNTkgKzUyLDYgQEAgSURCSW5kZXhCYWNrZW5kSW1w
bDo6fklEQkluZGV4QmFja2VuZEltcGwoKQogewogfQogCi12b2lkIElEQkluZGV4QmFja2VuZElt
cGw6Ok9wZW5JbmRleEN1cnNvck9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsKiB0cmFuc2FjdGlvbikKLXsKLSAgICBJREJfVFJBQ0UoIk9wZW5JbmRleEN1cnNvck9w
ZXJhdGlvbiIpOwotICAgIElEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVjdGlvbiA9IHN0YXRpY19j
YXN0PElEQkN1cnNvcjo6RGlyZWN0aW9uPihtX2RpcmVjdGlvbik7Ci0KLSAgICBSZWZQdHI8SURC
QmFja2luZ1N0b3JlOjpDdXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNvcjsKLQotICAgIHN3aXRjaCAo
bV9jdXJzb3JUeXBlKSB7Ci0gICAgY2FzZSBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpLZXlP
bmx5OgotICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX2luZGV4LT5iYWNraW5nU3RvcmUo
KS0+b3BlbkluZGV4S2V5Q3Vyc29yKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlv
bigpLCBtX2luZGV4LT5kYXRhYmFzZUlkKCksIG1faW5kZXgtPm1fb2JqZWN0U3RvcmVCYWNrZW5k
LT5pZCgpLCBtX2luZGV4LT5pZCgpLCBtX2tleVJhbmdlLmdldCgpLCBkaXJlY3Rpb24pOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OktleUFuZFZh
bHVlOgotICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX2luZGV4LT5iYWNraW5nU3RvcmUo
KS0+b3BlbkluZGV4Q3Vyc29yKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigp
LCBtX2luZGV4LT5kYXRhYmFzZUlkKCksIG1faW5kZXgtPm1fb2JqZWN0U3RvcmVCYWNrZW5kLT5p
ZCgpLCBtX2luZGV4LT5pZCgpLCBtX2tleVJhbmdlLmdldCgpLCBkaXJlY3Rpb24pOwotICAgICAg
ICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICB9Ci0KLSAgICBpZiAoIWJhY2tpbmdTdG9yZUN1cnNvcikgewotICAgICAgICBtX2NhbGxiYWNr
cy0+b25TdWNjZXNzKHN0YXRpY19jYXN0PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSo+KDApKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFJlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW1wbD4g
Y3Vyc29yID0gSURCQ3Vyc29yQmFja2VuZEltcGw6OmNyZWF0ZShiYWNraW5nU3RvcmVDdXJzb3Iu
Z2V0KCksIG1fY3Vyc29yVHlwZSwgdHJhbnNhY3Rpb24sIG1faW5kZXgtPm1fb2JqZWN0U3RvcmVC
YWNrZW5kKTsKLSAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKGN1cnNvciwgY3Vyc29yLT5rZXko
KSwgY3Vyc29yLT5wcmltYXJ5S2V5KCksIGN1cnNvci0+dmFsdWUoKSk7Ci19Ci0KLXZvaWQgSURC
SW5kZXhCYWNrZW5kSW1wbDo6b3BlbkN1cnNvcihQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlS
YW5nZSwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4g
cHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9u
UHRyLCBFeGNlcHRpb25Db2RlJikKLXsKLSAgICBJREJfVFJBQ0UoIklEQkluZGV4QmFja2VuZElt
cGw6Om9wZW5DdXJzb3IiKTsKLSAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBw
cnBDYWxsYmFja3M7Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5z
YWN0aW9uID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6ZnJvbSh0cmFuc2FjdGlvblB0cik7
Ci0gICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhPcGVuSW5kZXhDdXJzb3JPcGVyYXRpb246
OmNyZWF0ZSh0aGlzLCBrZXlSYW5nZSwgZGlyZWN0aW9uLCBJREJDdXJzb3JCYWNrZW5kSW50ZXJm
YWNlOjpLZXlBbmRWYWx1ZSwgY2FsbGJhY2tzKSk7Ci19Ci0KLXZvaWQgSURCSW5kZXhCYWNrZW5k
SW1wbDo6b3BlbktleUN1cnNvcihQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgdW5z
aWduZWQgc2hvcnQgZGlyZWN0aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJh
Y2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNl
cHRpb25Db2RlJikKLXsKLSAgICBJREJfVFJBQ0UoIklEQkluZGV4QmFja2VuZEltcGw6Om9wZW5L
ZXlDdXJzb3IiKTsKLSAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxs
YmFja3M7Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9u
ID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6ZnJvbSh0cmFuc2FjdGlvblB0cik7Ci0gICAg
dHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhPcGVuSW5kZXhDdXJzb3JPcGVyYXRpb246OmNyZWF0
ZSh0aGlzLCBrZXlSYW5nZSwgZGlyZWN0aW9uLCBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpL
ZXlPbmx5LCBjYWxsYmFja3MpKTsKLX0KLQotdm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpJbmRl
eENvdW50T3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5z
YWN0aW9uKQotewotICAgIElEQl9UUkFDRSgiSW5kZXhDb3VudE9wZXJhdGlvbiIpOwotICAgIHVp
bnQzMl90IGNvdW50ID0gMDsKLQotICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4g
YmFja2luZ1N0b3JlQ3Vyc29yID0gbV9pbmRleC0+YmFja2luZ1N0b3JlKCktPm9wZW5JbmRleEtl
eUN1cnNvcih0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9pbmRleC0+
ZGF0YWJhc2VJZCgpLCBtX2luZGV4LT5tX29iamVjdFN0b3JlQmFja2VuZC0+aWQoKSwgbV9pbmRl
eC0+aWQoKSwgbV9rZXlSYW5nZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhUKTsKLSAgICBpZiAoIWJh
Y2tpbmdTdG9yZUN1cnNvcikgewotICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKGNvdW50
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGRvIHsKLSAgICAgICAgKytjb3VudDsK
LSAgICB9IHdoaWxlIChiYWNraW5nU3RvcmVDdXJzb3ItPmNvbnRpbnVlRnVuY3Rpb24oMCkpOwot
Ci0gICAgbV9jYWxsYmFja3MtPm9uU3VjY2Vzcyhjb3VudCk7Ci19Ci0KLXZvaWQgSURCSW5kZXhC
YWNrZW5kSW1wbDo6Y291bnQoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2UsIFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZSogdHJhbnNhY3Rpb25QdHIsIEV4Y2VwdGlvbkNvZGUmKQotewotICAgIElEQl9UUkFDRSgi
SURCSW5kZXhCYWNrZW5kSW1wbDo6Y291bnQiKTsKLSAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBj
YWxsYmFja3MgPSBwcnBDYWxsYmFja3M7Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGw+IHRyYW5zYWN0aW9uID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6ZnJvbSh0cmFu
c2FjdGlvblB0cik7Ci0gICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhJbmRleENvdW50T3Bl
cmF0aW9uOjpjcmVhdGUodGhpcywgcmFuZ2UsIGNhbGxiYWNrcykpOwotfQotCi12b2lkIElEQklu
ZGV4QmFja2VuZEltcGw6OkluZGV4UmVmZXJlbmNlZFZhbHVlUmV0cmlldmFsT3BlcmF0aW9uOjpw
ZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQotewotICAgIElE
Ql9UUkFDRSgiSW5kZXhSZWZlcmVuY2VkVmFsdWVSZXRyaWV2YWxPcGVyYXRpb24iKTsKLQotICAg
IFJlZlB0cjxJREJLZXk+IGtleTsKLQotICAgIGlmIChtX2tleVJhbmdlLT5pc09ubHlLZXkoKSkK
LSAgICAgICAga2V5ID0gbV9rZXlSYW5nZS0+bG93ZXIoKTsKLSAgICBlbHNlIHsKLSAgICAgICAg
UmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX2lu
ZGV4LT5iYWNraW5nU3RvcmUoKS0+b3BlbkluZGV4Q3Vyc29yKHRyYW5zYWN0aW9uLT5iYWNraW5n
U3RvcmVUcmFuc2FjdGlvbigpLCBtX2luZGV4LT5kYXRhYmFzZUlkKCksIG1faW5kZXgtPm1fb2Jq
ZWN0U3RvcmVCYWNrZW5kLT5pZCgpLCBtX2luZGV4LT5pZCgpLCBtX2tleVJhbmdlLmdldCgpLCBJ
REJDdXJzb3I6Ok5FWFQpOwotCi0gICAgICAgIGlmICghYmFja2luZ1N0b3JlQ3Vyc29yKSB7Ci0g
ICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKCk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICAgICAga2V5ID0gYmFja2luZ1N0b3JlQ3Vyc29yLT5rZXkoKTsKLSAg
ICB9Ci0KLSAgICBSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5OwotICAgIGJvb2wgb2sgPSBtX2lu
ZGV4LT5iYWNraW5nU3RvcmUoKS0+Z2V0UHJpbWFyeUtleVZpYUluZGV4KHRyYW5zYWN0aW9uLT5i
YWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2luZGV4LT5kYXRhYmFzZUlkKCksIG1faW5kZXgt
Pm1fb2JqZWN0U3RvcmVCYWNrZW5kLT5pZCgpLCBtX2luZGV4LT5pZCgpLCAqa2V5LCBwcmltYXJ5
S2V5KTsKLSAgICBpZiAoIW9rKSB7Ci0gICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRh
dGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAi
SW50ZXJuYWwgZXJyb3IgaW4gZ2V0UHJpbWFyeUtleVZpYUluZGV4LiIpKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIFZlY3Rvcjx1aW50OF90PiB2YWx1ZTsKLSAgICBvayA9IG1faW5k
ZXgtPmJhY2tpbmdTdG9yZSgpLT5nZXRSZWNvcmQodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRy
YW5zYWN0aW9uKCksIG1faW5kZXgtPmRhdGFiYXNlSWQoKSwgbV9pbmRleC0+bV9vYmplY3RTdG9y
ZUJhY2tlbmQtPmlkKCksICpwcmltYXJ5S2V5LCB2YWx1ZSk7Ci0gICAgaWYgKCFvaykgewotICAg
ICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0
YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yIGluIGdldFJlY29y
ZC4iKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAodmFsdWUuaXNFbXB0eSgp
KSB7Ci0gICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICBpZiAobV9pbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmF1dG9JbmNyZW1l
bnQoKSAmJiAhbV9pbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmtleVBhdGgoKS5pc051bGwo
KSkgewotICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZTo6Y3JlYXRlRnJvbVdpcmVCeXRlcyh2YWx1ZSksIHByaW1hcnlLZXksIG1faW5kZXgtPm1fb2Jq
ZWN0U3RvcmVCYWNrZW5kLT5rZXlQYXRoKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9t
V2lyZUJ5dGVzKHZhbHVlKSk7Ci19Ci0KLQotdm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpJbmRl
eFZhbHVlUmV0cmlldmFsT3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGwqIHRyYW5zYWN0aW9uKQotewotICAgIElEQl9UUkFDRSgiSW5kZXhWYWx1ZVJldHJpZXZhbE9w
ZXJhdGlvbiIpOwotCi0gICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBiYWNraW5n
U3RvcmVDdXJzb3IgPSBtX2luZGV4LT5iYWNraW5nU3RvcmUoKS0+b3BlbkluZGV4S2V5Q3Vyc29y
KHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2luZGV4LT5kYXRhYmFz
ZUlkKCksIG1faW5kZXgtPm1fb2JqZWN0U3RvcmVCYWNrZW5kLT5pZCgpLCBtX2luZGV4LT5pZCgp
LCBtX2tleVJhbmdlLmdldCgpLCBJREJDdXJzb3I6Ok5FWFQpOwotCi0gICAgaWYgKCFiYWNraW5n
U3RvcmVDdXJzb3IpIHsKLSAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhzdGF0aWNfY2Fz
dDxJREJLZXkqPigwKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURC
S2V5PiBrZXlSZXN1bHQ7Ci0gICAgYm9vbCBvayA9IG1faW5kZXgtPmJhY2tpbmdTdG9yZSgpLT5n
ZXRQcmltYXJ5S2V5VmlhSW5kZXgodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9u
KCksIG1faW5kZXgtPmRhdGFiYXNlSWQoKSwgbV9pbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQt
PmlkKCksIG1faW5kZXgtPmlkKCksICpiYWNraW5nU3RvcmVDdXJzb3ItPmtleSgpLCBrZXlSZXN1
bHQpOwotICAgIGlmICghb2spIHsKLSAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0
YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJ
bnRlcm5hbCBlcnJvciBpbiBnZXRQcmltYXJ5S2V5VmlhSW5kZXguIikpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIGlmICgha2V5UmVzdWx0KSB7Ci0gICAgICAgIG1fY2FsbGJhY2tzLT5v
blN1Y2Nlc3Moc3RhdGljX2Nhc3Q8SURCS2V5Kj4oMCkpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3Moa2V5UmVzdWx0LmdldCgpKTsKLX0KLQotdm9p
ZCBJREJJbmRleEJhY2tlbmRJbXBsOjpnZXQoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFu
Z2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIEV4Y2VwdGlvbkNvZGUmKQotewotICAg
IElEQl9UUkFDRSgiSURCSW5kZXhCYWNrZW5kSW1wbDo6Z2V0Iik7Ci0gICAgUmVmUHRyPElEQkNh
bGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOwotICAgIFJlZlB0cjxJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6
OmZyb20odHJhbnNhY3Rpb25QdHIpOwotICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soSW5k
ZXhSZWZlcmVuY2VkVmFsdWVSZXRyaWV2YWxPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBrZXlSYW5n
ZSwgY2FsbGJhY2tzKSk7Ci19Ci0KLXZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6Z2V0S2V5KFBh
c3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4g
cHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9u
UHRyLCBFeGNlcHRpb25Db2RlJikKLXsKLSAgICBJREJfVFJBQ0UoIklEQkluZGV4QmFja2VuZElt
cGw6OmdldEtleSIpOwotICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENh
bGxiYWNrczsKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rp
b24gPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpmcm9tKHRyYW5zYWN0aW9uUHRyKTsKLSAg
ICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKEluZGV4VmFsdWVSZXRyaWV2YWxPcGVyYXRpb246
OmNyZWF0ZSh0aGlzLCBrZXlSYW5nZSwgY2FsbGJhY2tzKSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5o
CmluZGV4IDBjZDdmZTFhZDg4NDAxYTZiMjQ5YjJmYjhkYTNiNzVmYThmM2VjYmQuLjFhOTM5OTll
MTYzM2Q0ZjdmYTcxZTliNjg3NGRlMTgxMDFjMjBlOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmgKQEAgLTQyLDkg
KzQyLDkgQEAgY2xhc3MgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDsKIAogY2xhc3MgSURCSW5k
ZXhCYWNrZW5kSW1wbCA6IHB1YmxpYyBJREJJbmRleEJhY2tlbmRJbnRlcmZhY2UgewogcHVibGlj
OgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGNyZWF0ZShjb25z
dCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKiBkYXRhYmFzZSwgSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbCogb2JqZWN0U3RvcmVCYWNrZW5kLCBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBtZXRhZGF0
YSkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBjcmVhdGUoY29u
c3QgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCogZGF0YWJhc2UsIGNvbnN0IElEQkluZGV4TWV0YWRh
dGEmIG1ldGFkYXRhKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJJbmRl
eEJhY2tlbmRJbXBsKGRhdGFiYXNlLCBvYmplY3RTdG9yZUJhY2tlbmQsIG1ldGFkYXRhKSk7Cisg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCSW5kZXhCYWNrZW5kSW1wbChkYXRhYmFzZSwg
bWV0YWRhdGEpKTsKICAgICB9CiAgICAgdmlydHVhbCB+SURCSW5kZXhCYWNrZW5kSW1wbCgpOwog
CkBAIC01NSwxMSArNTUsMTEgQEAgcHVibGljOgogICAgIH0KIAogICAgIC8vIElEQkluZGV4QmFj
a2VuZEludGVyZmFjZQotICAgIHZpcnR1YWwgdm9pZCBvcGVuQ3Vyc29yKFBhc3NSZWZQdHI8SURC
S2V5UmFuZ2U+LCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwot
ICAgIHZpcnR1YWwgdm9pZCBjb3VudChQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRp
b25Db2RlJik7Ci0gICAgdmlydHVhbCB2b2lkIG9wZW5LZXlDdXJzb3IoUGFzc1JlZlB0cjxJREJL
ZXlSYW5nZT4sIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJik7Ci0g
ICAgdmlydHVhbCB2b2lkIGdldChQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25D
b2RlJik7Ci0gICAgdmlydHVhbCB2b2lkIGdldEtleShQYXNzUmVmUHRyPElEQktleVJhbmdlPiwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2Uq
LCBFeGNlcHRpb25Db2RlJik7CisgICAgdmlydHVhbCB2b2lkIG9wZW5DdXJzb3IoUGFzc1JlZlB0
cjxJREJLZXlSYW5nZT4sIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2Rl
JikgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBjb3VudChQYXNz
UmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgeyBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBvcGVuS2V5Q3Vyc29yKFBhc3NSZWZQdHI8SURCS2V5
UmFuZ2U+LCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpIHsgQVNT
RVJUX05PVF9SRUFDSEVEKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZ2V0KFBhc3NSZWZQdHI8SURC
S2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9Cisg
ICAgdmlydHVhbCB2b2lkIGdldEtleShQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRp
b25Db2RlJikgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogCiAgICAgSURCSW5kZXhNZXRhZGF0
YSBtZXRhZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0YWRhdGE7IH0KICAgICBjb25zdCBTdHJp
bmcmIG5hbWUoKSB7IHJldHVybiBtX21ldGFkYXRhLm5hbWU7IH0KQEAgLTY4LDEyICs2OCw3IEBA
IHB1YmxpYzoKICAgICBjb25zdCBib29sJiBtdWx0aUVudHJ5KCkgeyByZXR1cm4gbV9tZXRhZGF0
YS5tdWx0aUVudHJ5OyB9CiAKIHByaXZhdGU6Ci0gICAgSURCSW5kZXhCYWNrZW5kSW1wbChjb25z
dCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKiwgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCosIGNv
bnN0IElEQkluZGV4TWV0YWRhdGEmKTsKLQotICAgIGNsYXNzIE9wZW5JbmRleEN1cnNvck9wZXJh
dGlvbjsKLSAgICBjbGFzcyBJbmRleENvdW50T3BlcmF0aW9uOwotICAgIGNsYXNzIEluZGV4UmVm
ZXJlbmNlZFZhbHVlUmV0cmlldmFsT3BlcmF0aW9uOwotICAgIGNsYXNzIEluZGV4VmFsdWVSZXRy
aWV2YWxPcGVyYXRpb247CisgICAgSURCSW5kZXhCYWNrZW5kSW1wbChjb25zdCBJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsKiwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYpOwogCiAgICAgc3RhdGljIGNv
bnN0IGludDY0X3QgSW52YWxpZElkID0gMDsKIApAQCAtODIsOCArNzcsNiBAQCBwcml2YXRlOgog
CiAgICAgY29uc3QgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCogbV9kYXRhYmFzZTsKIAotICAgIElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGwqIG1fb2JqZWN0U3RvcmVCYWNrZW5kOwotCiAgICAgSURC
SW5kZXhNZXRhZGF0YSBtX21ldGFkYXRhOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCmluZGV4IGYxZDE3NmM0ZTM4ODdh
ZWNjYmY1ZGUwM2IxMDRkZWQwMTczYWVmMGEuLjg5MTI1M2Q5ZTA0YzkxZTk1YWVlYjIzMDQ1NDVm
MjQ2NmEwMjcyNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQk9iamVjdFN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJPYmplY3RTdG9yZS5jcHAKQEAgLTg3LDE0ICs4NywxMiBAQCBQYXNzUmVmUHRyPElEQlJl
cXVlc3Q+IElEQk9iamVjdFN0b3JlOjpnZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgUGFzcwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgUmVmUHRyPElEQlJlcXVlc3Q+
IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhp
cyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwotICAgIG1fYmFja2VuZC0+Z2V0KGtleVJhbmdlLCBy
ZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKLSAgICBBU1NFUlQoIWVjKTsK
KyAgICBiYWNrZW5kREIoKS0+Z2V0KG1fdHJhbnNhY3Rpb24tPmlkKCksIGlkKCksIElEQkluZGV4
TWV0YWRhdGE6OkludmFsaWRJZCwga2V5UmFuZ2UsIGZhbHNlLCByZXF1ZXN0KTsKICAgICByZXR1
cm4gcmVxdWVzdC5yZWxlYXNlKCk7CiB9CiAKIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2Jq
ZWN0U3RvcmU6OmdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRy
PElEQktleT4ga2V5LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBJREJfVFJBQ0UoIklEQk9i
amVjdFN0b3JlOjpnZXQiKTsKICAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlID0gSURC
S2V5UmFuZ2U6Om9ubHkoa2V5LCBlYyk7CiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm4gMDsK
QEAgLTIxNCw4ICsyMTIsOCBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3Jl
OjpwdXQoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpQdXRNbwogICAgIH0KIAogICAg
IFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQs
IHNvdXJjZSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7Ci0gICAgbV9iYWNrZW5kLT5wdXQoc2VyaWFs
aXplZFZhbHVlLnJlbGVhc2UoKSwga2V5LnJlbGVhc2UoKSwgcHV0TW9kZSwgcmVxdWVzdCwgbV90
cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBpbmRleElkcywgaW5kZXhLZXlzKTsKLSAgICBBU1NFUlQo
IWVjKTsKKyAgICBWZWN0b3I8dWludDhfdD4gdmFsdWVCeXRlcyA9IHNlcmlhbGl6ZWRWYWx1ZS0+
dG9XaXJlQnl0ZXMoKTsKKyAgICBiYWNrZW5kREIoKS0+cHV0KG1fdHJhbnNhY3Rpb24tPmlkKCks
IGlkKCksICZ2YWx1ZUJ5dGVzLCBrZXkucmVsZWFzZSgpLCBzdGF0aWNfY2FzdDxJREJEYXRhYmFz
ZUJhY2tlbmRJbnRlcmZhY2U6OlB1dE1vZGU+KHB1dE1vZGUpLCByZXF1ZXN0LCBpbmRleElkcywg
aW5kZXhLZXlzKTsKICAgICByZXR1cm4gcmVxdWVzdC5yZWxlYXNlKCk7CiB9CiAKQEAgLTI0MCwx
NCArMjM4LDEyIEBAIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OmRlbGV0
ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvCiAgICAgfQogCiAgICAgUmVmUHRy
PElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55
OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwotICAgIG1fYmFja2VuZC0+ZGVs
ZXRlRnVuY3Rpb24oa2V5UmFuZ2UsIHJlcXVlc3QsIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwg
ZWMpOwotICAgIEFTU0VSVCghZWMpOworICAgIGJhY2tlbmREQigpLT5kZWxldGVSYW5nZShtX3Ry
YW5zYWN0aW9uLT5pZCgpLCBpZCgpLCBrZXlSYW5nZSwgcmVxdWVzdCk7CiAgICAgcmV0dXJuIHJl
cXVlc3QucmVsZWFzZSgpOwogfQogCiBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0
b3JlOjpkZWxldGVGdW5jdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNz
UmVmUHRyPElEQktleT4ga2V5LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBJREJfVFJBQ0Uo
IklEQk9iamVjdFN0b3JlOjpkZWxldGUiKTsKICAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJh
bmdlID0gSURCS2V5UmFuZ2U6Om9ubHkoa2V5LCBlYyk7CiAgICAgaWYgKGVjKQogICAgICAgICBy
ZXR1cm4gMDsKQEAgLTI3MSw4ICsyNjcsNyBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9i
amVjdFN0b3JlOjpjbGVhcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBFeAogICAg
IH0KIAogICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRl
KGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKLSAg
ICBtX2JhY2tlbmQtPmNsZWFyKHJlcXVlc3QsIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMp
OwotICAgIEFTU0VSVCghZWMpOworICAgIGJhY2tlbmREQigpLT5jbGVhcihtX3RyYW5zYWN0aW9u
LT5pZCgpLCBpZCgpLCByZXF1ZXN0KTsKICAgICByZXR1cm4gcmVxdWVzdC5yZWxlYXNlKCk7CiB9
CiAKQEAgLTI4NCw5ICsyNzksOSBAQCBuYW1lc3BhY2UgewogLy8gY3Vyc29yIHN1Y2Nlc3MgaGFu
ZGxlcnMgYXJlIGtlcHQgYWxpdmUuCiBjbGFzcyBJbmRleFBvcHVsYXRvciA6IHB1YmxpYyBFdmVu
dExpc3RlbmVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbmRleFBvcHVsYXRv
cj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBiYWNr
ZW5kLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rp
b24sIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCwgY29uc3QgSURCSW5kZXhNZXRhZGF0
YSYgaW5kZXhNZXRhZGF0YSkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbmRleFBvcHVsYXRvcj4g
Y3JlYXRlKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlPiBiYWNrZW5kLCBp
bnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCSW5k
ZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgSW5kZXhQb3B1bGF0b3IoYmFja2VuZCwgdHJhbnNhY3Rpb24sIGluZGV4TWV0YWRhdGEp
KTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbmRleFBvcHVsYXRvcihiYWNrZW5kLCB0
cmFuc2FjdGlvbklkLCBvYmplY3RTdG9yZUlkLCBpbmRleE1ldGFkYXRhKSk7CiAgICAgfQogCiAg
ICAgdmlydHVhbCBib29sIG9wZXJhdG9yPT0oY29uc3QgRXZlbnRMaXN0ZW5lciYgb3RoZXIpCkBA
IC0yOTUsMTIgKzI5MCwxMSBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIEluZGV4
UG9wdWxhdG9yKFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBiYWNr
ZW5kLAotICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlPiB0cmFuc2FjdGlvbiwKLSAgICAgICAgICAgICAgICAgICBjb25zdCBJREJJbmRl
eE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhKQorICAgIEluZGV4UG9wdWxhdG9yKFBhc3NSZWZQdHI8
SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlPiBiYWNrZW5kLCBpbnQ2NF90IHRyYW5zYWN0aW9u
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhN
ZXRhZGF0YSkKICAgICAgICAgOiBFdmVudExpc3RlbmVyKENQUEV2ZW50TGlzdGVuZXJUeXBlKQot
ICAgICAgICAsIG1fb2JqZWN0U3RvcmVCYWNrZW5kKGJhY2tlbmQpCi0gICAgICAgICwgbV90cmFu
c2FjdGlvbih0cmFuc2FjdGlvbikKKyAgICAgICAgLCBtX2RhdGFiYXNlQmFja2VuZChiYWNrZW5k
KQorICAgICAgICAsIG1fdHJhbnNhY3Rpb25JZCh0cmFuc2FjdGlvbklkKQorICAgICAgICAsIG1f
b2JqZWN0U3RvcmVJZChvYmplY3RTdG9yZUlkKQogICAgICAgICAsIG1faW5kZXhNZXRhZGF0YShp
bmRleE1ldGFkYXRhKQogICAgIHsKICAgICB9CkBAIC0zMzMsMjEgKzMyNywyMCBAQCBwcml2YXRl
OgogICAgICAgICAgICAgVmVjdG9yPElEQk9iamVjdFN0b3JlOjpJbmRleEtleXMsIDE+IGluZGV4
S2V5c0xpc3Q7CiAgICAgICAgICAgICBpbmRleEtleXNMaXN0LmFwcGVuZChpbmRleEtleXMpOwog
Ci0gICAgICAgICAgICBtX29iamVjdFN0b3JlQmFja2VuZC0+c2V0SW5kZXhLZXlzKHByaW1hcnlL
ZXksIGluZGV4SWRzLCBpbmRleEtleXNMaXN0LCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKLQorICAg
ICAgICAgICAgbV9kYXRhYmFzZUJhY2tlbmQtPnNldEluZGV4S2V5cyhtX3RyYW5zYWN0aW9uSWQs
IG1fb2JqZWN0U3RvcmVJZCwgcHJpbWFyeUtleSwgaW5kZXhJZHMsIGluZGV4S2V5c0xpc3QpOwog
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gTm93IHRoYXQgd2UgYXJlIGRvbmUgaW5k
ZXhpbmcsIHRlbGwgdGhlIGJhY2tlbmQgdG8gZ28KICAgICAgICAgICAgIC8vIGJhY2sgdG8gcHJv
Y2Vzc2luZyB0YXNrcyBvZiB0eXBlIE5vcm1hbFRhc2suCi0gICAgICAgICAgICBtX29iamVjdFN0
b3JlQmFja2VuZC0+c2V0SW5kZXhlc1JlYWR5KGluZGV4SWRzLCBtX3RyYW5zYWN0aW9uLmdldCgp
KTsKLSAgICAgICAgICAgIG1fb2JqZWN0U3RvcmVCYWNrZW5kLmNsZWFyKCk7Ci0gICAgICAgICAg
ICBtX3RyYW5zYWN0aW9uLmNsZWFyKCk7CisgICAgICAgICAgICBtX2RhdGFiYXNlQmFja2VuZC0+
c2V0SW5kZXhlc1JlYWR5KG1fdHJhbnNhY3Rpb25JZCwgbV9vYmplY3RTdG9yZUlkLCBpbmRleElk
cyk7CisgICAgICAgICAgICBtX2RhdGFiYXNlQmFja2VuZC5jbGVhcigpOwogICAgICAgICB9CiAK
ICAgICB9CiAKLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBtX29i
amVjdFN0b3JlQmFja2VuZDsKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlPiBtX3RyYW5zYWN0aW9uOwotICAgIElEQkluZGV4TWV0YWRhdGEgbV9pbmRleE1ldGFkYXRh
OworICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U+IG1fZGF0YWJhc2VCYWNr
ZW5kOworICAgIGNvbnN0IGludDY0X3QgbV90cmFuc2FjdGlvbklkOworICAgIGNvbnN0IGludDY0
X3QgbV9vYmplY3RTdG9yZUlkOworICAgIGNvbnN0IElEQkluZGV4TWV0YWRhdGEgbV9pbmRleE1l
dGFkYXRhOwogfTsKIH0KIApAQCAtMzkyLDE1ICszODUsMTQgQEAgUGFzc1JlZlB0cjxJREJJbmRl
eD4gSURCT2JqZWN0U3RvcmU6OmNyZWF0ZUluZGV4KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQKICAgICB9CiAKICAgICBpbnQ2NF90IGluZGV4SWQgPSBtX21ldGFkYXRhLm1heEluZGV4
SWQgKyAxOwotICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGluZGV4QmFja2Vu
ZCA9IG1fYmFja2VuZC0+Y3JlYXRlSW5kZXgoaW5kZXhJZCwgbmFtZSwga2V5UGF0aCwgdW5pcXVl
LCBtdWx0aUVudHJ5LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKLSAgICBBU1NFUlQo
IWluZGV4QmFja2VuZCAhPSAhZWMpOyAvLyBJZiB3ZSBkaWRuJ3QgZ2V0IGFuIGluZGV4LCB3ZSBz
aG91bGQgaGF2ZSBnb3R0ZW4gYW4gZXhjZXB0aW9uIGNvZGUuIEFuZCB2aWNlIHZlcnNhLgorICAg
IG1fYmFja2VuZC0+Y3JlYXRlSW5kZXgoaW5kZXhJZCwgbmFtZSwga2V5UGF0aCwgdW5pcXVlLCBt
dWx0aUVudHJ5LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKICAgICBpZiAoZWMpCiAg
ICAgICAgIHJldHVybiAwOwogCiAgICAgKyttX21ldGFkYXRhLm1heEluZGV4SWQ7CiAKICAgICBJ
REJJbmRleE1ldGFkYXRhIG1ldGFkYXRhKG5hbWUsIGluZGV4SWQsIGtleVBhdGgsIHVuaXF1ZSwg
bXVsdGlFbnRyeSk7Ci0gICAgUmVmUHRyPElEQkluZGV4PiBpbmRleCA9IElEQkluZGV4OjpjcmVh
dGUobWV0YWRhdGEsIGluZGV4QmFja2VuZC5yZWxlYXNlKCksIHRoaXMsIG1fdHJhbnNhY3Rpb24u
Z2V0KCkpOworICAgIFJlZlB0cjxJREJJbmRleD4gaW5kZXggPSBJREJJbmRleDo6Y3JlYXRlKG1l
dGFkYXRhLCB0aGlzLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKICAgICBtX2luZGV4TWFwLnNldChu
YW1lLCBpbmRleCk7CiAgICAgbV9tZXRhZGF0YS5pbmRleGVzLnNldChpbmRleElkLCBtZXRhZGF0
YSk7CiAKQEAgLTQxNSw3ICs0MDcsNyBAQCBQYXNzUmVmUHRyPElEQkluZGV4PiBJREJPYmplY3RT
dG9yZTo6Y3JlYXRlSW5kZXgoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dAogICAgIGlu
ZGV4UmVxdWVzdC0+cHJldmVudFByb3BhZ2F0aW9uKCk7CiAKICAgICAvLyBUaGlzIGlzIGtlcHQg
YWxpdmUgYnkgYmVpbmcgdGhlIHN1Y2Nlc3MgaGFuZGxlciBvZiB0aGUgcmVxdWVzdCwgd2hpY2gg
aXMgaW4gdHVybiBrZXB0IGFsaXZlIGJ5IHRoZSBvd25pbmcgdHJhbnNhY3Rpb24uCi0gICAgUmVm
UHRyPEluZGV4UG9wdWxhdG9yPiBpbmRleFBvcHVsYXRvciA9IEluZGV4UG9wdWxhdG9yOjpjcmVh
dGUobV9iYWNrZW5kLCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGluZGV4UmVxdWVzdCwgbWV0
YWRhdGEpOworICAgIFJlZlB0cjxJbmRleFBvcHVsYXRvcj4gaW5kZXhQb3B1bGF0b3IgPSBJbmRl
eFBvcHVsYXRvcjo6Y3JlYXRlKGJhY2tlbmREQigpLCBtX3RyYW5zYWN0aW9uLT5pZCgpLCBpZCgp
LCBtZXRhZGF0YSk7CiAgICAgaW5kZXhSZXF1ZXN0LT5zZXRPbnN1Y2Nlc3MoaW5kZXhQb3B1bGF0
b3IpOwogCiAgICAgcmV0dXJuIGluZGV4LnJlbGVhc2UoKTsKQEAgLTQ0Myw5ICs0MzUsNiBAQCBQ
YXNzUmVmUHRyPElEQkluZGV4PiBJREJPYmplY3RTdG9yZTo6aW5kZXgoY29uc3QgU3RyaW5nJiBu
YW1lLCBFeGNlcHRpb25Db2RlJiBlYwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBS
ZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBpbmRleEJhY2tlbmQgPSBtX2JhY2tlbmQt
PmluZGV4KGluZGV4SWQpOwotICAgIEFTU0VSVCghZWMgJiYgaW5kZXhCYWNrZW5kKTsKLQogICAg
IGNvbnN0IElEQkluZGV4TWV0YWRhdGEqIGluZGV4TWV0YWRhdGEoMCk7CiAgICAgZm9yIChJREJP
YmplY3RTdG9yZU1ldGFkYXRhOjpJbmRleE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX21ldGFk
YXRhLmluZGV4ZXMuYmVnaW4oKTsgaXQgIT0gbV9tZXRhZGF0YS5pbmRleGVzLmVuZCgpOyArK2l0
KSB7CiAgICAgICAgIGlmIChpdC0+dmFsdWUubmFtZSA9PSBuYW1lKSB7CkBAIC00NTQsOCArNDQz
LDkgQEAgUGFzc1JlZlB0cjxJREJJbmRleD4gSURCT2JqZWN0U3RvcmU6OmluZGV4KGNvbnN0IFN0
cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMKICAgICAgICAgfQogICAgIH0KICAgICBBU1NF
UlQoaW5kZXhNZXRhZGF0YSk7CisgICAgQVNTRVJUKGluZGV4TWV0YWRhdGEtPmlkICE9IElEQklu
ZGV4TWV0YWRhdGE6OkludmFsaWRJZCk7CiAKLSAgICBSZWZQdHI8SURCSW5kZXg+IGluZGV4ID0g
SURCSW5kZXg6OmNyZWF0ZSgqaW5kZXhNZXRhZGF0YSwgaW5kZXhCYWNrZW5kLnJlbGVhc2UoKSwg
dGhpcywgbV90cmFuc2FjdGlvbi5nZXQoKSk7CisgICAgUmVmUHRyPElEQkluZGV4PiBpbmRleCA9
IElEQkluZGV4OjpjcmVhdGUoKmluZGV4TWV0YWRhdGEsIHRoaXMsIG1fdHJhbnNhY3Rpb24uZ2V0
KCkpOwogICAgIG1faW5kZXhNYXAuc2V0KG5hbWUsIGluZGV4KTsKICAgICByZXR1cm4gaW5kZXgu
cmVsZWFzZSgpOwogfQpAQCAtNTA0LDE0ICs0OTQsMTMgQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0
PiBJREJPYmplY3RTdG9yZTo6b3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXgKIAogICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRl
KGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKICAg
ICByZXF1ZXN0LT5zZXRDdXJzb3JEZXRhaWxzKElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6Oktl
eUFuZFZhbHVlLCBkaXJlY3Rpb24pOwotICAgIG1fYmFja2VuZC0+b3BlbkN1cnNvcihyYW5nZSwg
ZGlyZWN0aW9uLCByZXF1ZXN0LCB0YXNrVHlwZSwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBl
Yyk7Ci0gICAgQVNTRVJUKCFlYyk7CisKKyAgICBiYWNrZW5kREIoKS0+b3BlbkN1cnNvcihtX3Ry
YW5zYWN0aW9uLT5pZCgpLCBpZCgpLCBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQsIHJhbmdl
LCBkaXJlY3Rpb24sIGZhbHNlLCBzdGF0aWNfY2FzdDxJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZh
Y2U6OlRhc2tUeXBlPih0YXNrVHlwZSksIHJlcXVlc3QpOwogICAgIHJldHVybiByZXF1ZXN0LnJl
bGVhc2UoKTsKIH0KIAogUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6b3Bl
bkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktl
eT4ga2V5LCBjb25zdCBTdHJpbmcmIGRpcmVjdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0g
ICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZTo6b3BlbkN1cnNvciIpOwogICAgIFJlZlB0cjxJ
REJLZXlSYW5nZT4ga2V5UmFuZ2UgPSBJREJLZXlSYW5nZTo6b25seShrZXksIGVjKTsKICAgICBp
ZiAoZWMpCiAgICAgICAgIHJldHVybiAwOwpAQCAtNTMwLDE0ICs1MTksMTIgQEAgUGFzc1JlZlB0
cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6Y291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCwgUGEKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIFJlZlB0cjxJREJS
ZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3Jl
YXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKLSAgICBtX2JhY2tlbmQtPmNvdW50KHJh
bmdlLCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKLSAgICBBU1NFUlQo
IWVjKTsKKyAgICBiYWNrZW5kREIoKS0+Y291bnQobV90cmFuc2FjdGlvbi0+aWQoKSwgaWQoKSwg
SURCSW5kZXhNZXRhZGF0YTo6SW52YWxpZElkLCByYW5nZSwgcmVxdWVzdCk7CiAgICAgcmV0dXJu
IHJlcXVlc3QucmVsZWFzZSgpOwogfQogCiBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVj
dFN0b3JlOjpjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRy
PElEQktleT4ga2V5LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBJREJfVFJBQ0UoIklEQk9i
amVjdFN0b3JlOjpjb3VudCIpOwogICAgIFJlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UgPSBJ
REJLZXlSYW5nZTo6b25seShrZXksIGVjKTsKICAgICBpZiAoZWMpCiAgICAgICAgIHJldHVybiAw
OwpAQCAtNTYzLDYgKzU1MCwxMSBAQCBpbnQ2NF90IElEQk9iamVjdFN0b3JlOjpmaW5kSW5kZXhJ
ZChjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0CiAgICAgcmV0dXJuIElEQkluZGV4TWV0YWRhdGE6
OkludmFsaWRJZDsKIH0KIAorSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlKiBJREJPYmplY3RT
dG9yZTo6YmFja2VuZERCKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90cmFuc2FjdGlvbi0+YmFj
a2VuZERCKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJM
RShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQk9iamVjdFN0b3JlLmgKaW5kZXggZmNiNDM3OWFlZWQ3NzYzOGQ3MGNmNjkyMDg3ODM1
ODAzZmI2OWZlZC4uN2UyZjcyZmFlYTg1MTkzYzMwOTNlZDYzZDg1YWEyYTUwMmYzYzAyNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5o
CkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiRGljdGlvbmFyeS5oIgogI2luY2x1ZGUgIklE
QkN1cnNvci5oIgogI2luY2x1ZGUgIklEQkluZGV4LmgiCisjaW5jbHVkZSAiSURCSW5kZXhCYWNr
ZW5kSW50ZXJmYWNlLmgiCiAjaW5jbHVkZSAiSURCS2V5LmgiCiAjaW5jbHVkZSAiSURCS2V5UmFu
Z2UuaCIKICNpbmNsdWRlICJJREJNZXRhZGF0YS5oIgpAQCAtNTgsNiArNTksNyBAQCBwdWJsaWM6
CiAgICAgfklEQk9iamVjdFN0b3JlKCkgeyB9CiAKICAgICAvLyBJbXBsZW1lbnQgdGhlIElEQk9i
amVjdFN0b3JlIElETAorICAgIGludDY0X3QgaWQoKSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRh
LmlkOyB9CiAgICAgY29uc3QgU3RyaW5nIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRh
Lm5hbWU7IH0KICAgICBQYXNzUmVmUHRyPElEQkFueT4ga2V5UGF0aEFueSgpIGNvbnN0IHsgcmV0
dXJuIElEQkFueTo6Y3JlYXRlKG1fbWV0YWRhdGEua2V5UGF0aCk7IH0KICAgICBjb25zdCBJREJL
ZXlQYXRoIGtleVBhdGgoKSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhLmtleVBhdGg7IH0KQEAg
LTEwNCw2ICsxMDYsOCBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPElEQktl
eT4gPiBJbmRleEtleXM7CiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgSW5kZXhLZXlzPiBJ
bmRleEtleU1hcDsKIAorICAgIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZSogYmFja2VuZERC
KCkgY29uc3Q7CisKIHByaXZhdGU6CiAgICAgSURCT2JqZWN0U3RvcmUoY29uc3QgSURCT2JqZWN0
U3RvcmVNZXRhZGF0YSYsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNl
PiwgSURCVHJhbnNhY3Rpb24qKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcAppbmRleCAz
YzJkOWI3MDczMDhkOThiYzM5OTRhMGMwZWQ2YjgxYTQ5ZWUzOTk0Li5lNmNlODNjMzViMzhjMDRl
Y2VhZmE3OGE5YWFkNTVmZjgwYWZiN2IxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcApA
QCAtNDQsMTEwICs0NCw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6T2JqZWN0U3RvcmVSZXRyaWV2YWxPcGVyYXRpb24gOiBwdWJs
aWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKLXB1YmxpYzoKLSAgICBz
dGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNy
ZWF0ZShQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQ
YXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
IGNhbGxiYWNrcykKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgT2JqZWN0U3Rv
cmVSZXRyaWV2YWxPcGVyYXRpb24ob2JqZWN0U3RvcmUsIGtleVJhbmdlLCBjYWxsYmFja3MpKTsK
LSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bCopOwotcHJpdmF0ZToKLSAgICBPYmplY3RTdG9yZVJldHJpZXZhbE9wZXJhdGlvbihQYXNzUmVm
UHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElE
QktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykK
LSAgICAgICAgOiBtX29iamVjdFN0b3JlKG9iamVjdFN0b3JlKQotICAgICAgICAsIG1fa2V5UmFu
Z2Uoa2V5UmFuZ2UpCi0gICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQotICAgIHsKLSAg
ICB9Ci0KLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gbV9vYmplY3RTdG9y
ZTsKLSAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IG1fa2V5UmFuZ2U7Ci0gICAgUmVmUHRyPElEQkNh
bGxiYWNrcz4gbV9jYWxsYmFja3M7Ci19OwotCi1jbGFzcyBJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsOjpPYmplY3RTdG9yZVN0b3JhZ2VPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFB1dE1vZGUgcHV0
TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc093blB0cjxWZWN0
b3I8aW50NjRfdD4gPiBwb3BJbmRleElkcywgUGFzc093blB0cjxWZWN0b3I8SW5kZXhLZXlzPiA+
IHBvcEluZGV4S2V5cykKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgT2JqZWN0
U3RvcmVTdG9yYWdlT3BlcmF0aW9uKG9iamVjdFN0b3JlLCB2YWx1ZSwga2V5LCBwdXRNb2RlLCBj
YWxsYmFja3MsIHBvcEluZGV4SWRzLCBwb3BJbmRleEtleXMpKTsKLSAgICB9Ci0gICAgdmlydHVh
bCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOwotcHJpdmF0ZToKLSAg
ICBPYmplY3RTdG9yZVN0b3JhZ2VPcGVyYXRpb24oUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
IHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NPd25QdHI8VmVjdG9yPGludDY0X3Q+ID4g
cG9wSW5kZXhJZHMsIFBhc3NPd25QdHI8VmVjdG9yPEluZGV4S2V5cz4gPiBwb3BJbmRleEtleXMp
Ci0gICAgICAgIDogbV9vYmplY3RTdG9yZShvYmplY3RTdG9yZSkKLSAgICAgICAgLCBtX3ZhbHVl
KHZhbHVlKQotICAgICAgICAsIG1fa2V5KGtleSkKLSAgICAgICAgLCBtX3B1dE1vZGUocHV0TW9k
ZSkKLSAgICAgICAgLCBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCi0gICAgICAgICwgbV9wb3BJbmRl
eElkcyhwb3BJbmRleElkcykKLSAgICAgICAgLCBtX3BvcEluZGV4S2V5cyhwb3BJbmRleEtleXMp
Ci0gICAgewotICAgIH0KLQotICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBt
X29iamVjdFN0b3JlOwotICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG1fdmFsdWU7
Ci0gICAgUmVmUHRyPElEQktleT4gbV9rZXk7Ci0gICAgUHV0TW9kZSBtX3B1dE1vZGU7Ci0gICAg
UmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7Ci0gICAgT3duUHRyPFZlY3RvcjxpbnQ2
NF90PiA+IG1fcG9wSW5kZXhJZHM7Ci0gICAgT3duUHRyPFZlY3RvcjxJbmRleEtleXM+ID4gbV9w
b3BJbmRleEtleXM7Ci19OwotCi1jbGFzcyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpPYmpl
Y3RTdG9yZUluZGV4ZXNSZWFkeU9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsOjpPcGVyYXRpb24gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NPd25QdHI8VmVjdG9yPGludDY0
X3Q+ID4gcG9wSW5kZXhJZHMpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IE9i
amVjdFN0b3JlSW5kZXhlc1JlYWR5T3BlcmF0aW9uKG9iamVjdFN0b3JlLCBwb3BJbmRleElkcykp
OwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsKik7Ci1wcml2YXRlOgotICAgIE9iamVjdFN0b3JlSW5kZXhlc1JlYWR5T3BlcmF0aW9uKFBh
c3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NPd25Q
dHI8VmVjdG9yPGludDY0X3Q+ID4gcG9wSW5kZXhJZHMpCi0gICAgICAgIDogbV9vYmplY3RTdG9y
ZShvYmplY3RTdG9yZSkKLSAgICAgICAgLCBtX3BvcEluZGV4SWRzKHBvcEluZGV4SWRzKQotICAg
IHsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gbV9vYmpl
Y3RTdG9yZTsKLSAgICBPd25QdHI8VmVjdG9yPGludDY0X3Q+ID4gbV9wb3BJbmRleElkczsKLX07
Ci0KLWNsYXNzIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Ok9iamVjdFN0b3JlRGVsZXRpb25P
cGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
OjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+
IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0
cihuZXcgT2JqZWN0U3RvcmVEZWxldGlvbk9wZXJhdGlvbihvYmplY3RTdG9yZSwga2V5UmFuZ2Us
IGNhbGxiYWNrcykpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsKik7Ci1wcml2YXRlOgotICAgIE9iamVjdFN0b3JlRGVsZXRpb25PcGVy
YXRpb24oUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwg
UGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBjYWxsYmFja3MpCi0gICAgICAgIDogbV9vYmplY3RTdG9yZShvYmplY3RTdG9yZSkKLSAgICAg
ICAgLCBtX2tleVJhbmdlKGtleVJhbmdlKQotICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNr
cykKLSAgICB7Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+
IG1fb2JqZWN0U3RvcmU7Ci0gICAgUmVmUHRyPElEQktleVJhbmdlPiBtX2tleVJhbmdlOwotICAg
IFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOwotfTsKLQotY2xhc3MgSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6T2JqZWN0U3RvcmVDbGVhck9wZXJhdGlvbiA6IHB1YmxpYyBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24gewotcHVibGljOgotICAgIHN0YXRpYyBQ
YXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBh
c3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQ
dHIobmV3IE9iamVjdFN0b3JlQ2xlYXJPcGVyYXRpb24ob2JqZWN0U3RvcmUsIGNhbGxiYWNrcykp
OwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsKik7Ci1wcml2YXRlOgotICAgIE9iamVjdFN0b3JlQ2xlYXJPcGVyYXRpb24oUGFzc1JlZlB0
cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IGNhbGxiYWNrcykKLSAgICAgICAgOiBtX29iamVjdFN0b3JlKG9iamVjdFN0b3Jl
KQotICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKLSAgICB7Ci0gICAgfQotCi0gICAg
UmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG1fb2JqZWN0U3RvcmU7Ci0gICAgUmVm
UHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7Ci19OwotCiBjbGFzcyBJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjpDcmVhdGVJbmRleE9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsOjpPcGVyYXRpb24gewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzT3duUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCSW5k
ZXhCYWNrZW5kSW1wbD4gaW5kZXgpCkBAIC0xODQsNTAgKzgwLDYgQEAgcHJpdmF0ZToKICAgICBS
ZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gbV9pbmRleDsKIH07CiAKLWNsYXNzIElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6Ok9wZW5PYmplY3RTdG9yZUN1cnNvck9wZXJhdGlvbiA6IHB1Ymxp
YyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24gewotcHVibGljOgotICAgIHN0
YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbj4gY3Jl
YXRlKFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBh
c3NSZWZQdHI8SURCS2V5UmFuZ2U+IHJhbmdlLCBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rp
b24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZTo6VGFza1R5cGUgdGFza1R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4g
YWRvcHRQdHIobmV3IE9wZW5PYmplY3RTdG9yZUN1cnNvck9wZXJhdGlvbihvYmplY3RTdG9yZSwg
cmFuZ2UsIGRpcmVjdGlvbiwgY2FsbGJhY2tzLCB0YXNrVHlwZSkpOwotICAgIH0KLSAgICB2aXJ0
dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7Ci1wcml2YXRlOgot
ICAgIE9wZW5PYmplY3RTdG9yZUN1cnNvck9wZXJhdGlvbihQYXNzUmVmUHRyPElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiByYW5n
ZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4gY2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlIHRh
c2tUeXBlKQotICAgICAgICA6IG1fb2JqZWN0U3RvcmUob2JqZWN0U3RvcmUpCi0gICAgICAgICwg
bV9yYW5nZShyYW5nZSkKLSAgICAgICAgLCBtX2RpcmVjdGlvbihkaXJlY3Rpb24pCi0gICAgICAg
ICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQotICAgICAgICAsIG1fdGFza1R5cGUodGFza1R5cGUp
Ci0gICAgewotICAgIH0KLQotICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBt
X29iamVjdFN0b3JlOwotICAgIFJlZlB0cjxJREJLZXlSYW5nZT4gbV9yYW5nZTsKLSAgICBJREJD
dXJzb3I6OkRpcmVjdGlvbiBtX2RpcmVjdGlvbjsKLSAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBt
X2NhbGxiYWNrczsKLSAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBl
IG1fdGFza1R5cGU7Ci19OwotCi1jbGFzcyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpPYmpl
Y3RTdG9yZUNvdW50T3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6
Ok9wZXJhdGlvbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2Us
IFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi0gICAgewotICAgICAgICByZXR1
cm4gYWRvcHRQdHIobmV3IE9iamVjdFN0b3JlQ291bnRPcGVyYXRpb24ob2JqZWN0U3RvcmUsIHJh
bmdlLCBjYWxsYmFja3MpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbCopOwotcHJpdmF0ZToKLSAgICBPYmplY3RTdG9yZUNvdW50T3Bl
cmF0aW9uKFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUs
IFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4g
Y2FsbGJhY2tzKQotICAgICAgICA6IG1fb2JqZWN0U3RvcmUob2JqZWN0U3RvcmUpCi0gICAgICAg
ICwgbV9yYW5nZShyYW5nZSkKLSAgICAgICAgLCBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCi0gICAg
ewotICAgIH0KLQotICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBtX29iamVj
dFN0b3JlOwotICAgIFJlZlB0cjxJREJLZXlSYW5nZT4gbV9yYW5nZTsKLSAgICBSZWZQdHI8SURC
Q2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKLX07Ci0KIGNsYXNzIElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6OkNyZWF0ZUluZGV4QWJvcnRPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc093blB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQkluZGV4
QmFja2VuZEltcGw+IGluZGV4KQpAQCAtMjg0LDYzICsxMzYsNiBAQCBJREJPYmplY3RTdG9yZU1l
dGFkYXRhIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Om1ldGFkYXRhKCkgY29uc3QKICAgICBy
ZXR1cm4gbWV0YWRhdGE7CiB9CiAKLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Z2V0
KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0
aW9uUHRyLCBFeGNlcHRpb25Db2RlJikKLXsKLSAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6OmdldCIpOwotICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9
IHBycENhbGxiYWNrczsKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJh
bnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpmcm9tKHRyYW5zYWN0aW9uUHRy
KTsKLSAgICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKE9iamVjdFN0b3JlUmV0cmlldmFsT3Bl
cmF0aW9uOjpjcmVhdGUodGhpcywga2V5UmFuZ2UsIGNhbGxiYWNrcykpOwotfQotCi12b2lkIElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw6Ok9iamVjdFN0b3JlUmV0cmlldmFsT3BlcmF0aW9uOjpw
ZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQotewotICAgIElE
Ql9UUkFDRSgiT2JqZWN0U3RvcmVSZXRyaWV2YWxPcGVyYXRpb24iKTsKLSAgICBSZWZQdHI8SURC
S2V5PiBrZXk7Ci0gICAgaWYgKG1fa2V5UmFuZ2UtPmlzT25seUtleSgpKQotICAgICAgICBrZXkg
PSBtX2tleVJhbmdlLT5sb3dlcigpOwotICAgIGVsc2UgewotICAgICAgICBSZWZQdHI8SURCQmFj
a2luZ1N0b3JlOjpDdXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNvciA9IG1fb2JqZWN0U3RvcmUtPmJh
Y2tpbmdTdG9yZSgpLT5vcGVuT2JqZWN0U3RvcmVDdXJzb3IodHJhbnNhY3Rpb24tPmJhY2tpbmdT
dG9yZVRyYW5zYWN0aW9uKCksIG1fb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgbV9vYmplY3RT
dG9yZS0+aWQoKSwgbV9rZXlSYW5nZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhUKTsKLSAgICAgICAg
aWYgKCFiYWNraW5nU3RvcmVDdXJzb3IpIHsKLSAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vblN1
Y2Nlc3MoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBrZXkgPSBi
YWNraW5nU3RvcmVDdXJzb3ItPmtleSgpOwotICAgIH0KLQotICAgIFZlY3Rvcjx1aW50OF90PiB3
aXJlRGF0YTsKLSAgICBib29sIG9rID0gbV9vYmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCktPmdl
dFJlY29yZCh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9vYmplY3RT
dG9yZS0+ZGF0YWJhc2VJZCgpLCBtX29iamVjdFN0b3JlLT5pZCgpLCAqa2V5LCB3aXJlRGF0YSk7
Ci0gICAgaWYgKCFvaykgewotICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFz
ZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVy
bmFsIGVycm9yIGluIGdldFJlY29yZC4iKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
aWYgKHdpcmVEYXRhLmlzRW1wdHkoKSkgewotICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNz
KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAobV9vYmplY3RTdG9yZS0+YXV0
b0luY3JlbWVudCgpICYmICFtX29iamVjdFN0b3JlLT5rZXlQYXRoKCkuaXNOdWxsKCkpIHsKLSAg
ICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0
ZUZyb21XaXJlQnl0ZXMod2lyZURhdGEpLCBrZXksIG1fb2JqZWN0U3RvcmUtPmtleVBhdGgoKSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJp
YWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZUZyb21XaXJlQnl0ZXMod2lyZURhdGEpKTsKLX0KLQot
dm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXQoUGFzc1JlZlB0cjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+IHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQdXRNb2RlIHB1dE1v
ZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYg
aW5kZXhJZHMsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiBpbmRleEtleXMpCi17Ci0gICAgSURC
X1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXQiKTsKLQotICAgIFJlZlB0cjxJ
REJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKLSAgICBSZWZQdHI8SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsOjpmcm9tKHRyYW5zYWN0aW9uUHRyKTsKLSAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1vZGUo
KSAhPSBJREJUcmFuc2FjdGlvbjo6UkVBRF9PTkxZKTsKLQotICAgIE93blB0cjxWZWN0b3I8aW50
NjRfdD4gPiBuZXdJbmRleElkcyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8aW50NjRfdD4oaW5kZXhJ
ZHMpKTsKLSAgICBPd25QdHI8VmVjdG9yPEluZGV4S2V5cz4gPiBuZXdJbmRleEtleXMgPSBhZG9w
dFB0cihuZXcgVmVjdG9yPEluZGV4S2V5cz4oaW5kZXhLZXlzKSk7Ci0KLSAgICBBU1NFUlQoYXV0
b0luY3JlbWVudCgpIHx8IGtleS5nZXQoKSk7Ci0KLSAgICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVU
YXNrKE9iamVjdFN0b3JlU3RvcmFnZU9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIHZhbHVlLCBrZXks
IHB1dE1vZGUsIGNhbGxiYWNrcywgbmV3SW5kZXhJZHMucmVsZWFzZSgpLCBuZXdJbmRleEtleXMu
cmVsZWFzZSgpKSk7Ci19Ci0KIGJvb2wgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6SW5kZXhX
cml0ZXI6OnZlcmlmeUluZGV4S2V5cyhJREJCYWNraW5nU3RvcmUmIGJhY2tpbmdTdG9yZSwgSURC
QmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGJvb2wmIGNhbkFkZEtl
eXMsIGNvbnN0IElEQktleSogcHJpbWFyeUtleSwgU3RyaW5nKiBlcnJvck1lc3NhZ2UpIGNvbnN0
CiB7CiAgICAgY2FuQWRkS2V5cyA9IGZhbHNlOwpAQCAtNDE3LDE4OCArMjEyLDExIEBAIGJvb2wg
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6bWFrZUluZGV4V3JpdGVycyhQYXNzUmVmUHRyPElE
QlRyYW5zYWN0aW9uQmFja2VuCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6c2V0SW5kZXhLZXlzKFBhc3NSZWZQdHI8SURCS2V5PiBwcnBQcmlt
YXJ5S2V5LCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25zdCBWZWN0b3I8SW5k
ZXhLZXlzPiYgaW5kZXhLZXlzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5z
YWN0aW9uUHRyKQotewotICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6
c2V0SW5kZXhLZXlzIik7Ci0gICAgUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSA9IHBycFByaW1h
cnlLZXk7Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9u
ID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6ZnJvbSh0cmFuc2FjdGlvblB0cik7Ci0gICAg
aWYgKHRyYW5zYWN0aW9uLT5pc0ZpbmlzaGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8v
IEZJWE1FOiBUaGlzIG1ldGhvZCBjb3VsZCBiZSBhc3luY2hyb25vdXMsIGJ1dCB3ZSBuZWVkIHRv
IGV2YWx1YXRlIGlmIGl0J3Mgd29ydGggdGhlIGV4dHJhIGNvbXBsZXhpdHkuCi0gICAgSURCQmFj
a2luZ1N0b3JlOjpSZWNvcmRJZGVudGlmaWVyIHJlY29yZElkZW50aWZpZXI7Ci0gICAgYm9vbCBm
b3VuZCA9IGZhbHNlOwotICAgIGJvb2wgb2sgPSBiYWNraW5nU3RvcmUoKS0+a2V5RXhpc3RzSW5P
YmplY3RTdG9yZSh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgZGF0YWJh
c2VJZCgpLCBpZCgpLCAqcHJpbWFyeUtleSwgJnJlY29yZElkZW50aWZpZXIsIGZvdW5kKTsKLSAg
ICBpZiAoIW9rKSB7Ci0gICAgICAgIExPR19FUlJPUigia2V5RXhpc3RzSW5PYmplY3RTdG9yZSBy
ZXBvcnRlZCBhbiBlcnJvciIpOwotICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoSURCRGF0YWJh
c2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRl
cm5hbCBlcnJvciBzZXR0aW5nIGluZGV4IGtleXMuIikpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIGlmICghZm91bmQpIHsKLSAgICAgICAgUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVy
cm9yID0gSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtu
b3duRXJyb3IsIFN0cmluZzo6Zm9ybWF0KCJJbnRlcm5hbCBlcnJvciBzZXR0aW5nIGluZGV4IGtl
eXMgZm9yIG9iamVjdCBzdG9yZSAnJXMnLiIsIG5hbWUoKS51dGY4KCkuZGF0YSgpKSk7Ci0gICAg
ICAgIHRyYW5zYWN0aW9uLT5hYm9ydChlcnJvci5yZWxlYXNlKCkpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgVmVjdG9yPE93blB0cjxJbmRleFdyaXRlcj4gPiBpbmRleFdyaXRlcnM7
Ci0gICAgU3RyaW5nIGVycm9yTWVzc2FnZTsKLSAgICBib29sIG9iZXlzQ29uc3RyYWludHMgPSBm
YWxzZTsKLSAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBzdG9yZSA9IGJhY2tpbmdTdG9yZSgp
OwotICAgIGJvb2wgYmFja2luZ1N0b3JlU3VjY2VzcyA9IG1ha2VJbmRleFdyaXRlcnModHJhbnNh
Y3Rpb24sIHN0b3JlLmdldCgpLCBkYXRhYmFzZUlkKCksIG1ldGFkYXRhKCksIHByaW1hcnlLZXks
IGZhbHNlLCBpbmRleElkcywgaW5kZXhLZXlzLCAmaW5kZXhXcml0ZXJzLCAmZXJyb3JNZXNzYWdl
LCBvYmV5c0NvbnN0cmFpbnRzKTsKLSAgICBpZiAoIWJhY2tpbmdTdG9yZVN1Y2Nlc3MpIHsKLSAg
ICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3I6IGJhY2tpbmcgc3Rv
cmUgZXJyb3IgdXBkYXRpbmcgaW5kZXgga2V5cy4iKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgaWYgKCFvYmV5c0NvbnN0cmFpbnRzKSB7Ci0gICAgICAgIHRyYW5zYWN0aW9uLT5hYm9y
dChJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkNvbnN0cmFp
bnRFcnJvciwgZXJyb3JNZXNzYWdlKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGluZGV4V3JpdGVycy5zaXplKCk7ICsraSkgewotICAgICAg
ICBJbmRleFdyaXRlciogaW5kZXhXcml0ZXIgPSBpbmRleFdyaXRlcnNbaV0uZ2V0KCk7Ci0gICAg
ICAgIGluZGV4V3JpdGVyLT53cml0ZUluZGV4S2V5cyhyZWNvcmRJZGVudGlmaWVyLCAqYmFja2lu
Z1N0b3JlKCksIHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBkYXRhYmFz
ZUlkKCksIG1fbWV0YWRhdGEuaWQpOwotICAgIH0KLX0KLQotdm9pZCBJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjpzZXRJbmRleGVzUmVhZHkoY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElk
cywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbkludGVyZmFjZSkK
LXsKLSAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnNldEluZGV4ZXNS
ZWFkeSIpOwotCi0gICAgT3duUHRyPFZlY3RvcjxpbnQ2NF90PiA+IG5ld0luZGV4SWRzID0gYWRv
cHRQdHIobmV3IFZlY3RvcjxpbnQ2NF90PihpbmRleElkcykpOwotICAgIFJlZlB0cjxJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGw6OmZyb20odHJhbnNhY3Rpb25JbnRlcmZhY2UpOwotICAgIGlmICh0cmFuc2FjdGlvbi0+aXNG
aW5pc2hlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hl
ZHVsZVRhc2soSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOjpQcmVlbXB0aXZlVGFzaywg
T2JqZWN0U3RvcmVJbmRleGVzUmVhZHlPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBuZXdJbmRleElk
cy5yZWxlYXNlKCkpKSkKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLXZvaWQg
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6T2JqZWN0U3RvcmVJbmRleGVzUmVhZHlPcGVyYXRp
b246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24pCi17Ci0g
ICAgSURCX1RSQUNFKCJPYmplY3RTdG9yZUluZGV4ZXNSZWFkeU9wZXJhdGlvbiIpOwotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9wb3BJbmRleElkcy0+c2l6ZSgpOyArK2kpCi0gICAgICAg
IHRyYW5zYWN0aW9uLT5kaWRDb21wbGV0ZVByZWVtcHRpdmVFdmVudCgpOwotfQotCi12b2lkIElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw6Ok9iamVjdFN0b3JlU3RvcmFnZU9wZXJhdGlvbjo6cGVy
Zm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKLXsKLSAgICBJREJf
VFJBQ0UoIk9iamVjdFN0b3JlU3RvcmFnZU9wZXJhdGlvbiIpOwotICAgIEFTU0VSVCh0cmFuc2Fj
dGlvbi0+bW9kZSgpICE9IElEQlRyYW5zYWN0aW9uOjpSRUFEX09OTFkpOwotICAgIEFTU0VSVCht
X3BvcEluZGV4SWRzICYmIG1fcG9wSW5kZXhLZXlzICYmIG1fcG9wSW5kZXhJZHMtPnNpemUoKSA9
PSBtX3BvcEluZGV4S2V5cy0+c2l6ZSgpKTsKLSAgICBjb25zdCBib29sIGF1dG9JbmNyZW1lbnQg
PSBtX29iamVjdFN0b3JlLT5hdXRvSW5jcmVtZW50KCk7Ci0gICAgYm9vbCBrZXlXYXNHZW5lcmF0
ZWQgPSBmYWxzZTsKLQotICAgIGlmIChtX3B1dE1vZGUgIT0gQ3Vyc29yVXBkYXRlICYmIGF1dG9J
bmNyZW1lbnQgJiYgIW1fa2V5KSB7Ci0gICAgICAgIFJlZlB0cjxJREJLZXk+IGF1dG9JbmNLZXkg
PSBtX29iamVjdFN0b3JlLT5nZW5lcmF0ZUtleSh0cmFuc2FjdGlvbik7Ci0gICAgICAgIGtleVdh
c0dlbmVyYXRlZCA9IHRydWU7Ci0gICAgICAgIGlmICghYXV0b0luY0tleS0+aXNWYWxpZCgpKSB7
Ci0gICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVh
dGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkNvbnN0cmFpbnRFcnJvciwgIk1heGltdW0ga2V5IGdl
bmVyYXRvciB2YWx1ZSByZWFjaGVkLiIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotICAgICAgICBtX2tleSA9IGF1dG9JbmNLZXk7Ci0gICAgfQotCi0gICAgQVNTRVJUKG1fa2V5
ICYmIG1fa2V5LT5pc1ZhbGlkKCkpOwotCi0gICAgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBvYmpl
Y3RTdG9yZU1ldGFkYXRhID0gbV9vYmplY3RTdG9yZS0+bWV0YWRhdGEoKTsKLSAgICBJREJCYWNr
aW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXIgcmVjb3JkSWRlbnRpZmllcjsKLSAgICBSZWZQdHI8
SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBtX29iamVjdFN0b3JlLT5iYWNraW5nU3Rv
cmUoKTsKLSAgICBpZiAobV9wdXRNb2RlID09IEFkZE9ubHkpIHsKLSAgICAgICAgYm9vbCBmb3Vu
ZCA9IGZhbHNlOwotICAgICAgICBib29sIG9rID0gYmFja2luZ1N0b3JlLT5rZXlFeGlzdHNJbk9i
amVjdFN0b3JlKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX29iamVj
dFN0b3JlLT5kYXRhYmFzZUlkKCksIG1fb2JqZWN0U3RvcmUtPmlkKCksICptX2tleSwgJnJlY29y
ZElkZW50aWZpZXIsIGZvdW5kKTsKLSAgICAgICAgaWYgKCFvaykgewotICAgICAgICAgICAgbV9j
YWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvciBjaGVja2luZyBrZXkgZXhpc3Rl
bmNlLiIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBpZiAoZm91
bmQpIHsKLSAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6
OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Q29uc3RyYWludEVycm9yLCAiS2V5IGFscmVh
ZHkgZXhpc3RzIGluIHRoZSBvYmplY3Qgc3RvcmUuIikpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgVmVjdG9yPE93blB0cjxJbmRleFdyaXRlcj4gPiBpbmRl
eFdyaXRlcnM7Ci0gICAgU3RyaW5nIGVycm9yTWVzc2FnZTsKLSAgICBib29sIG9iZXlzQ29uc3Ry
YWludHMgPSBmYWxzZTsKLSAgICBib29sIGJhY2tpbmdTdG9yZVN1Y2Nlc3MgPSBtYWtlSW5kZXhX
cml0ZXJzKHRyYW5zYWN0aW9uLCBiYWNraW5nU3RvcmUuZ2V0KCksIG1fb2JqZWN0U3RvcmUtPmRh
dGFiYXNlSWQoKSwgb2JqZWN0U3RvcmVNZXRhZGF0YSwgbV9rZXksIGtleVdhc0dlbmVyYXRlZCwg
Km1fcG9wSW5kZXhJZHMsICptX3BvcEluZGV4S2V5cywgJmluZGV4V3JpdGVycywgJmVycm9yTWVz
c2FnZSwgb2JleXNDb25zdHJhaW50cyk7Ci0gICAgaWYgKCFiYWNraW5nU3RvcmVTdWNjZXNzKSB7
Ci0gICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3I6IGJhY2tp
bmcgc3RvcmUgZXJyb3IgdXBkYXRpbmcgaW5kZXgga2V5cy4iKSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgaWYgKCFvYmV5c0NvbnN0cmFpbnRzKSB7Ci0gICAgICAgIG1fY2FsbGJhY2tz
LT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
Q29uc3RyYWludEVycm9yLCBlcnJvck1lc3NhZ2UpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIC8vIEJlZm9yZSB0aGlzIHBvaW50LCBkb24ndCBkbyBhbnkgbXV0YXRpb24uICBBZnRl
ciB0aGlzIHBvaW50LCByb2xsYmFjayB0aGUgdHJhbnNhY3Rpb24gaW4gY2FzZSBvZiBlcnJvci4K
LQotICAgIGJhY2tpbmdTdG9yZVN1Y2Nlc3MgPSBtX29iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUo
KS0+cHV0UmVjb3JkKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX29i
amVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG1fb2JqZWN0U3RvcmUtPmlkKCksICptX2tleSwgbV92
YWx1ZS0+dG9XaXJlQnl0ZXMoKSwgJnJlY29yZElkZW50aWZpZXIpOwotICAgIGlmICghYmFja2lu
Z1N0b3JlU3VjY2VzcykgewotICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFz
ZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVy
bmFsIGVycm9yOiBiYWNraW5nIHN0b3JlIGVycm9yIHBlcmZvcm1pbmcgcHV0L2FkZC4iKSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGluZGV4
V3JpdGVycy5zaXplKCk7ICsraSkgewotICAgICAgICBJbmRleFdyaXRlciogaW5kZXhXcml0ZXIg
PSBpbmRleFdyaXRlcnNbaV0uZ2V0KCk7Ci0gICAgICAgIGluZGV4V3JpdGVyLT53cml0ZUluZGV4
S2V5cyhyZWNvcmRJZGVudGlmaWVyLCAqbV9vYmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCksIHRy
YW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX29iamVjdFN0b3JlLT5kYXRh
YmFzZUlkKCksIG1fb2JqZWN0U3RvcmUtPm1fbWV0YWRhdGEuaWQpOwotICAgIH0KLQotICAgIGlm
IChhdXRvSW5jcmVtZW50ICYmIG1fcHV0TW9kZSAhPSBDdXJzb3JVcGRhdGUgJiYgbV9rZXktPnR5
cGUoKSA9PSBJREJLZXk6Ok51bWJlclR5cGUpIHsKLSAgICAgICAgYm9vbCBvayA9IG1fb2JqZWN0
U3RvcmUtPnVwZGF0ZUtleUdlbmVyYXRvcih0cmFuc2FjdGlvbiwgbV9rZXkuZ2V0KCksICFrZXlX
YXNHZW5lcmF0ZWQpOwotICAgICAgICBpZiAoIW9rKSB7Ci0gICAgICAgICAgICBtX2NhbGxiYWNr
cy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246
OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yIHVwZGF0aW5nIGtleSBnZW5lcmF0b3IuIikp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgbV9jYWxsYmFj
a3MtPm9uU3VjY2VzcyhtX2tleS5yZWxlYXNlKCkpOwotfQotCi12b2lkIElEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6OmRlbGV0ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJh
bmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRpb25Db2RlJikKLXsKLSAgICBJ
REJfVFJBQ0UoIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmRlbGV0ZSIpOwotCi0gICAgUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0gSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbDo6ZnJvbSh0cmFuc2FjdGlvblB0cik7Ci0gICAgQVNTRVJUKHRyYW5zYWN0
aW9uLT5tb2RlKCkgIT0gSURCVHJhbnNhY3Rpb246OlJFQURfT05MWSk7Ci0gICAgdHJhbnNhY3Rp
b24tPnNjaGVkdWxlVGFzayhPYmplY3RTdG9yZURlbGV0aW9uT3BlcmF0aW9uOjpjcmVhdGUodGhp
cywga2V5UmFuZ2UsIGNhbGxiYWNrcykpOwotfQotCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6Ok9iamVjdFN0b3JlRGVsZXRpb25PcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24pCi17Ci0gICAgSURCX1RSQUNFKCJPYmplY3RTdG9y
ZURlbGV0aW9uT3BlcmF0aW9uIik7Ci0KLSAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJz
b3I+IGJhY2tpbmdTdG9yZUN1cnNvciA9IG1fb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5v
cGVuT2JqZWN0U3RvcmVDdXJzb3IodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9u
KCksIG1fb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgbV9vYmplY3RTdG9yZS0+aWQoKSwgbV9r
ZXlSYW5nZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhUKTsKLSAgICBpZiAoYmFja2luZ1N0b3JlQ3Vy
c29yKSB7Ci0KLSAgICAgICAgZG8gewotICAgICAgICAgICAgbV9vYmplY3RTdG9yZS0+YmFja2lu
Z1N0b3JlKCktPmRlbGV0ZVJlY29yZCh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rp
b24oKSwgbV9vYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBtX29iamVjdFN0b3JlLT5pZCgpLCBi
YWNraW5nU3RvcmVDdXJzb3ItPnJlY29yZElkZW50aWZpZXIoKSk7Ci0KLSAgICAgICAgfSB3aGls
ZSAoYmFja2luZ1N0b3JlQ3Vyc29yLT5jb250aW51ZUZ1bmN0aW9uKDApKTsKLSAgICB9Ci0KLSAg
ICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKCk7Ci19Ci0KLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6Y2xlYXIoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwgRXhjZXB0aW9uQ29kZSYp
Ci17Ci0gICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjbGVhciIpOwot
Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0gSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6ZnJvbSh0cmFuc2FjdGlvblB0cik7Ci0gICAgQVNTRVJU
KHRyYW5zYWN0aW9uLT5tb2RlKCkgIT0gSURCVHJhbnNhY3Rpb246OlJFQURfT05MWSk7Ci0gICAg
dHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhPYmplY3RTdG9yZUNsZWFyT3BlcmF0aW9uOjpjcmVh
dGUodGhpcywgY2FsbGJhY2tzKSk7Ci19Ci0KLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bDo6T2JqZWN0U3RvcmVDbGVhck9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsKiB0cmFuc2FjdGlvbikKLXsKLSAgICBJREJfVFJBQ0UoIk9iamVjdFN0b3JlQ2xlYXJP
cGVyYXRpb24iKTsKLSAgICBtX29iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+Y2xlYXJPYmpl
Y3RTdG9yZSh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9vYmplY3RT
dG9yZS0+ZGF0YWJhc2VJZCgpLCBtX29iamVjdFN0b3JlLT5pZCgpKTsKLSAgICBtX2NhbGxiYWNr
cy0+b25TdWNjZXNzKCk7Ci19Ci0KIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNl
PiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVhdGVJbmRleChpbnQ2NF90IGlkLCBjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgsIGJvb2wgdW5pcXVlLCBi
b29sIG11bHRpRW50cnksIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rp
b25QdHIsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIW1f
aW5kZXhlcy5jb250YWlucyhpZCksICJJbmRleGVzIGFscmVhZHkgY29udGFpbiAnJXMnIiwgbmFt
ZS51dGY4KCkuZGF0YSgpKTsKIAotICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRl
eCA9IElEQkluZGV4QmFja2VuZEltcGw6OmNyZWF0ZShtX2RhdGFiYXNlLCB0aGlzLCBJREJJbmRl
eE1ldGFkYXRhKG5hbWUsIGlkLCBrZXlQYXRoLCB1bmlxdWUsIG11bHRpRW50cnkpKTsKKyAgICBS
ZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXggPSBJREJJbmRleEJhY2tlbmRJbXBsOjpj
cmVhdGUobV9kYXRhYmFzZSwgSURCSW5kZXhNZXRhZGF0YShuYW1lLCBpZCwga2V5UGF0aCwgdW5p
cXVlLCBtdWx0aUVudHJ5KSk7CiAgICAgQVNTRVJUKGluZGV4LT5uYW1lKCkgPT0gbmFtZSk7CiAK
ICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpmcm9tKHRyYW5zYWN0aW9uUHRyKTsKQEAgLTY1Miw2NSAr
MjcwLDEyIEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6RGVsZXRlSW5kZXhPcGVy
YXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrCiAgICAgbV9vYmplY3RTdG9yZS0+YmFj
a2luZ1N0b3JlKCktPmRlbGV0ZUluZGV4KHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2Fj
dGlvbigpLCBtX29iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG1fb2JqZWN0U3RvcmUtPmlkKCks
IG1faW5kZXgtPmlkKCkpOwogfQogCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Om9w
ZW5DdXJzb3IoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2UsIElEQkN1cnNvcjo6RGlyZWN0
aW9uIGRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSB0YXNrVHlwZSwgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwgRXhjZXB0aW9uQ29kZSYpCi17
Ci0gICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29yIik7
Ci0gICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOwotICAg
IFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw6OmZyb20odHJhbnNhY3Rpb25QdHIpOwotICAgIHRyYW5zYWN0aW9u
LT5zY2hlZHVsZVRhc2soT3Blbk9iamVjdFN0b3JlQ3Vyc29yT3BlcmF0aW9uOjpjcmVhdGUodGhp
cywgcmFuZ2UsIGRpcmVjdGlvbiwgY2FsbGJhY2tzLCB0YXNrVHlwZSkpOwotfQotCi12b2lkIElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw6Ok9wZW5PYmplY3RTdG9yZUN1cnNvck9wZXJhdGlvbjo6
cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKLXsKLSAgICBJ
REJfVFJBQ0UoIk9wZW5PYmplY3RTdG9yZUN1cnNvciIpOwotCi0gICAgUmVmUHRyPElEQkJhY2tp
bmdTdG9yZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX29iamVjdFN0b3JlLT5iYWNr
aW5nU3RvcmUoKS0+b3Blbk9iamVjdFN0b3JlQ3Vyc29yKHRyYW5zYWN0aW9uLT5iYWNraW5nU3Rv
cmVUcmFuc2FjdGlvbigpLCBtX29iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG1fb2JqZWN0U3Rv
cmUtPmlkKCksIG1fcmFuZ2UuZ2V0KCksIG1fZGlyZWN0aW9uKTsKLSAgICAvLyBUaGUgZnJvbnRl
bmQgaGFzIGJlZ3VuIGluZGV4aW5nLCBzbyB0aGlzIHBhdXNlcyB0aGUgdHJhbnNhY3Rpb24KLSAg
ICAvLyB1bnRpbCB0aGUgaW5kZXhpbmcgaXMgY29tcGxldGUuIFRoaXMgY2FuJ3QgaGFwcGVuIGFu
eSBlYXJsaWVyCi0gICAgLy8gYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIHN3aXRjaCB0byBlYXJs
eSBtb2RlIGluIGNhc2UgbXVsdGlwbGUKLSAgICAvLyBpbmRleGVzIGFyZSBiZWluZyBjcmVhdGVk
IGluIGEgcm93LCB3aXRoIHB1dCgpJ3MgaW4gYmV0d2Vlbi4KLSAgICBpZiAobV90YXNrVHlwZSA9
PSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U6OlByZWVtcHRpdmVUYXNrKQotICAgICAg
ICB0cmFuc2FjdGlvbi0+YWRkUHJlZW1wdGl2ZUV2ZW50KCk7Ci0gICAgaWYgKCFiYWNraW5nU3Rv
cmVDdXJzb3IpIHsKLSAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhzdGF0aWNfY2FzdDxT
ZXJpYWxpemVkU2NyaXB0VmFsdWUqPigwKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+IGN1cnNvciA9IElEQkN1cnNvckJhY2tlbmRJ
bXBsOjpjcmVhdGUoYmFja2luZ1N0b3JlQ3Vyc29yLnJlbGVhc2UoKSwgSURCQ3Vyc29yQmFja2Vu
ZEludGVyZmFjZTo6S2V5QW5kVmFsdWUsIG1fdGFza1R5cGUsIHRyYW5zYWN0aW9uLCBtX29iamVj
dFN0b3JlLmdldCgpKTsKLSAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKGN1cnNvciwgY3Vyc29y
LT5rZXkoKSwgY3Vyc29yLT5wcmltYXJ5S2V5KCksIGN1cnNvci0+dmFsdWUoKSk7Ci19Ci0KLXZv
aWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y291bnQoUGFzc1JlZlB0cjxJREJLZXlSYW5n
ZT4gcmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIEV4Y2VwdGlvbkNvZGUmKQot
ewotICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y291bnQiKTsKLSAg
ICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7Ci0gICAgUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0gSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbDo6ZnJvbSh0cmFuc2FjdGlvblB0cik7Ci0gICAgdHJhbnNhY3Rpb24tPnNj
aGVkdWxlVGFzayhPYmplY3RTdG9yZUNvdW50T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgcmFuZ2Us
IGNhbGxiYWNrcykpOwotfQotCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Ok9iamVj
dFN0b3JlQ291bnRPcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCog
dHJhbnNhY3Rpb24pCi17Ci0gICAgSURCX1RSQUNFKCJPYmplY3RTdG9yZUNvdW50T3BlcmF0aW9u
Iik7Ci0gICAgdWludDMyX3QgY291bnQgPSAwOwotICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU6
OkN1cnNvcj4gYmFja2luZ1N0b3JlQ3Vyc29yID0gbV9vYmplY3RTdG9yZS0+YmFja2luZ1N0b3Jl
KCktPm9wZW5PYmplY3RTdG9yZUtleUN1cnNvcih0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJh
bnNhY3Rpb24oKSwgbV9vYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBtX29iamVjdFN0b3JlLT5p
ZCgpLCBtX3JhbmdlLmdldCgpLCBJREJDdXJzb3I6Ok5FWFQpOwotICAgIGlmICghYmFja2luZ1N0
b3JlQ3Vyc29yKSB7Ci0gICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoY291bnQpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZG8gewotICAgICAgICArK2NvdW50OwotICAgIH0g
d2hpbGUgKGJhY2tpbmdTdG9yZUN1cnNvci0+Y29udGludWVGdW5jdGlvbigwKSk7Ci0KLSAgICBt
X2NhbGxiYWNrcy0+b25TdWNjZXNzKGNvdW50KTsKLX0KLQogdm9pZCBJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjpsb2FkSW5kZXhlcygpCiB7CiAgICAgVmVjdG9yPElEQkluZGV4TWV0YWRhdGE+
IGluZGV4ZXMgPSBiYWNraW5nU3RvcmUoKS0+Z2V0SW5kZXhlcyhkYXRhYmFzZUlkKCksIG1fbWV0
YWRhdGEuaWQpOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbmRleGVzLnNpemUoKTsg
KytpKQotICAgICAgICBtX2luZGV4ZXMuc2V0KGluZGV4ZXNbaV0uaWQsIElEQkluZGV4QmFja2Vu
ZEltcGw6OmNyZWF0ZShtX2RhdGFiYXNlLCB0aGlzLCBpbmRleGVzW2ldKSk7CisgICAgICAgIG1f
aW5kZXhlcy5zZXQoaW5kZXhlc1tpXS5pZCwgSURCSW5kZXhCYWNrZW5kSW1wbDo6Y3JlYXRlKG1f
ZGF0YWJhc2UsIGluZGV4ZXNbaV0pKTsKIH0KIAogdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsOjpDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGwqIHRyYW5zYWN0aW9uKQpAQCAtNzI3LDExICsyOTIsMTEgQEAgdm9pZCBJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsOjpEZWxldGVJbmRleEFib3J0T3BlcmF0aW9uOjpwZXJmb3JtKElE
QlRyYW5zYWN0aW8KICAgICBtX29iamVjdFN0b3JlLT5tX2luZGV4ZXMuc2V0KG1faW5kZXgtPmlk
KCksIG1faW5kZXgpOwogfQogCi1QYXNzUmVmUHRyPElEQktleT4gSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6Z2VuZXJhdGVLZXkoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
PiB0cmFuc2FjdGlvbikKK1Bhc3NSZWZQdHI8SURCS2V5PiBJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsOjpnZW5lcmF0ZUtleShQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3Jl
LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uLCBpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKIHsKICAgICBjb25zdCBpbnQ2
NF90IG1heEdlbmVyYXRvclZhbHVlID0gOTAwNzE5OTI1NDc0MDk5MkxMOyAvLyBNYXhpbXVtIGlu
dGVnZXIgc3RvcmFibGUgYXMgRUNNQVNjcmlwdCBudW1iZXIuCiAgICAgaW50NjRfdCBjdXJyZW50
TnVtYmVyOwotICAgIGJvb2wgb2sgPSBiYWNraW5nU3RvcmUoKS0+Z2V0S2V5R2VuZXJhdG9yQ3Vy
cmVudE51bWJlcih0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgZGF0YWJh
c2VJZCgpLCBpZCgpLCBjdXJyZW50TnVtYmVyKTsKKyAgICBib29sIG9rID0gYmFja2luZ1N0b3Jl
LT5nZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVU
cmFuc2FjdGlvbigpLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBjdXJyZW50TnVtYmVyKTsK
ICAgICBpZiAoIW9rKSB7CiAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGdldEtleUdlbmVy
YXRvckN1cnJlbnROdW1iZXIiKTsKICAgICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlSW52YWxp
ZCgpOwpAQCAtNzQyLDEwICszMDcsMTAgQEAgUGFzc1JlZlB0cjxJREJLZXk+IElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OmdlbmVyYXRlS2V5KFBhc3NSZWZQdHI8SURCVHJhbnNhY3QKICAgICBy
ZXR1cm4gSURCS2V5OjpjcmVhdGVOdW1iZXIoY3VycmVudE51bWJlcik7CiB9CiAKLWJvb2wgSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6dXBkYXRlS2V5R2VuZXJhdG9yKFBhc3NSZWZQdHI8SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24sIGNvbnN0IElEQktleSoga2V5LCBi
b29sIGNoZWNrQ3VycmVudCkKK2Jvb2wgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6dXBkYXRl
S2V5R2VuZXJhdG9yKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIFBh
c3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24sIGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkqIGtleSwgYm9v
bCBjaGVja0N1cnJlbnQpCiB7CiAgICAgQVNTRVJUKGtleSAmJiBrZXktPnR5cGUoKSA9PSBJREJL
ZXk6Ok51bWJlclR5cGUpOwotICAgIHJldHVybiBiYWNraW5nU3RvcmUoKS0+bWF5YmVVcGRhdGVL
ZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2Fj
dGlvbigpLCBkYXRhYmFzZUlkKCksIGlkKCksIHN0YXRpY19jYXN0PGludDY0X3Q+KGZsb29yKGtl
eS0+bnVtYmVyKCkpKSArIDEsIGNoZWNrQ3VycmVudCk7CisgICAgcmV0dXJuIGJhY2tpbmdTdG9y
ZS0+bWF5YmVVcGRhdGVLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKHRyYW5zYWN0aW9uLT5iYWNr
aW5nU3RvcmVUcmFuc2FjdGlvbigpLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBzdGF0aWNf
Y2FzdDxpbnQ2NF90PihmbG9vcihrZXktPm51bWJlcigpKSkgKyAxLCBjaGVja0N1cnJlbnQpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmggYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgKaW5kZXgg
ZGNmNzAxOWUxYmJiZGVjNzA4MDY5MTA0ZjRiOTBiZWU3ZDBlYWVmNy4uYjNlMmU1NTAxNmUxMzEy
ZjMzOTBhMDE3NmRlZTc4MTY5YTk4MmJkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaApAQCAt
NjIsMjYgKzYyLDIzIEBAIHB1YmxpYzoKICAgICB9CiAKICAgICAvLyBJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbnRlcmZhY2UKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0KFBhc3NSZWZQdHI8SURCS2V5UmFu
Z2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2aXJ0dWFsIHZvaWQgcHV0KFBhc3NSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxJREJLZXk+LCBQdXRNb2RlLCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIGNv
bnN0IFZlY3RvcjxpbnQ2NF90PiYsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+Jik7CisgICAgdmly
dHVhbCB2b2lkIGdldChQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikg
eyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBwdXQoUGFzc1JlZlB0
cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQktleT4sIFB1dE1vZGUsIFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwg
Y29uc3QgVmVjdG9yPGludDY0X3Q+JiwgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mKSB7IEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRnVuY3Rpb24oUGFz
c1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1YWwgdm9p
ZCBjbGVhcihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRnVuY3Rp
b24oUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpIHsgQVNTRVJUX05P
VF9SRUFDSEVEKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikg
eyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQklu
ZGV4QmFja2VuZEludGVyZmFjZT4gY3JlYXRlSW5kZXgoaW50NjRfdCwgY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9vbCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSwgSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1
YWwgdm9pZCBzZXRJbmRleEtleXMoUGFzc1JlZlB0cjxJREJLZXk+IHBycFByaW1hcnlLZXksIGNv
bnN0IFZlY3RvcjxpbnQ2NF90PiYsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiwgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlKik7Ci0gICAgdmlydHVhbCB2b2lkIHNldEluZGV4ZXNSZWFk
eShjb25zdCBWZWN0b3I8aW50NjRfdD4mLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2Uq
KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0SW5kZXhLZXlzKFBhc3NSZWZQdHI8SURCS2V5PiBwcnBQ
cmltYXJ5S2V5LCBjb25zdCBWZWN0b3I8aW50NjRfdD4mLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlz
PiYsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSopIHsgQVNTRVJUX05PVF9SRUFDSEVE
KCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0SW5kZXhlc1JlYWR5KGNvbnN0IFZlY3RvcjxpbnQ2
NF90PiYsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSopIHsgQVNTRVJUX05PVF9SRUFD
SEVEKCk7IH0KICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNl
PiBpbmRleChpbnQ2NF90KTsKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSW5kZXgoaW50NjRfdCwg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwogCi0gICAg
dmlydHVhbCB2b2lkIG9wZW5DdXJzb3IoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIElEQkN1cnNv
cjo6RGlyZWN0aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZTo6VGFza1R5cGUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSos
IEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2aXJ0dWFsIHZvaWQgY291bnQoUGFzc1JlZlB0cjxJREJL
ZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZpcnR1YWwgdm9pZCBvcGVuQ3Vyc29y
KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBJREJDdXJzb3I6OkRpcmVjdGlvbiwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBl
LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgeyBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBjb3VudChQYXNzUmVmUHRyPElE
QktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQog
CiAgICAgc3RhdGljIGJvb2wgcG9wdWxhdGVJbmRleChJREJCYWNraW5nU3RvcmUmLCBpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJJbmRleEJh
Y2tlbmRJbXBsPik7CiAKLSAgICBjb25zdCBJbmRleE1hcDo6aXRlcmF0b3IgaXRlckluZGV4ZXNC
ZWdpbigpIHsgcmV0dXJuIG1faW5kZXhlcy5iZWdpbigpOyB9OwotICAgIGNvbnN0IEluZGV4TWFw
OjppdGVyYXRvciBpdGVySW5kZXhlc0VuZCgpIHsgcmV0dXJuIG1faW5kZXhlcy5lbmQoKTsgfTsK
LQogICAgIElEQk9iamVjdFN0b3JlTWV0YWRhdGEgbWV0YWRhdGEoKSBjb25zdDsKICAgICBjb25z
dCBTdHJpbmcmIG5hbWUoKSB7IHJldHVybiBtX21ldGFkYXRhLm5hbWU7IH0KICAgICBjb25zdCBJ
REJLZXlQYXRoJiBrZXlQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9tZXRhZGF0YS5rZXlQYXRoOyB9
CkBAIC0xMTQsMjIgKzExMSwxNiBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgYm9vbCBtYWtlSW5k
ZXhXcml0ZXJzKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4sIElEQkJhY2tp
bmdTdG9yZSosIGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0
YSYsIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5LCBib29sIGtleVdhc0dlbmVyYXRlZCwg
Y29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPElEQk9iamVjdFN0
b3JlQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlzPiYsIFZlY3RvcjxPd25QdHI8SW5kZXhXcml0
ZXI+ID4qIGluZGV4V3JpdGVycywgU3RyaW5nKiBlcnJvck1lc3NhZ2UsIGJvb2wmIGNvbXBsZXRl
ZCkgV0FSTl9VTlVTRURfUkVUVVJOOwogCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCS2V5PiBn
ZW5lcmF0ZUtleShQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4sIFBhc3NSZWZQdHI8SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbD4sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkKTsKKyAgICBzdGF0aWMgYm9vbCB1cGRhdGVLZXlHZW5lcmF0b3IoUGFzc1JlZlB0cjxJ
REJCYWNraW5nU3RvcmU+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+LCBp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5Kiwg
Ym9vbCBjaGVja0N1cnJlbnQpOworCiBwcml2YXRlOgogICAgIElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGwoY29uc3QgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCosIGNvbnN0IElEQk9iamVjdFN0b3Jl
TWV0YWRhdGEmKTsKIAogICAgIHZvaWQgbG9hZEluZGV4ZXMoKTsKLSAgICBQYXNzUmVmUHRyPElE
QktleT4gZ2VuZXJhdGVLZXkoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7
Ci0gICAgYm9vbCB1cGRhdGVLZXlHZW5lcmF0b3IoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsPiwgY29uc3QgSURCS2V5KiwgYm9vbCBjaGVja0N1cnJlbnQpOwotCi0gICAgY2xh
c3MgT2JqZWN0U3RvcmVSZXRyaWV2YWxPcGVyYXRpb247Ci0gICAgY2xhc3MgT2JqZWN0U3RvcmVT
dG9yYWdlT3BlcmF0aW9uOwotICAgIGNsYXNzIE9iamVjdFN0b3JlSW5kZXhlc1JlYWR5T3BlcmF0
aW9uOwotICAgIGNsYXNzIE9iamVjdFN0b3JlRGVsZXRpb25PcGVyYXRpb247Ci0gICAgY2xhc3Mg
T2JqZWN0U3RvcmVDbGVhck9wZXJhdGlvbjsKKwogICAgIGNsYXNzIENyZWF0ZUluZGV4T3BlcmF0
aW9uOwogICAgIGNsYXNzIERlbGV0ZUluZGV4T3BlcmF0aW9uOwotICAgIGNsYXNzIE9wZW5PYmpl
Y3RTdG9yZUN1cnNvck9wZXJhdGlvbjsKLSAgICBjbGFzcyBPYmplY3RTdG9yZUNvdW50T3BlcmF0
aW9uOwogCiAgICAgLy8gV2hlbiBhICJ2ZXJzaW9uY2hhbmdlIiB0cmFuc2FjdGlvbiBhYm9ydHMs
IHRoZXNlIHJlc3RvcmUgdGhlIGJhY2stZW5kIG9iamVjdCBoaWVyYXJjaHkuCiAgICAgY2xhc3Mg
Q3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcAppbmRleCAwNDUyNWViNjVlZTBjNWUyOGNl
ZGNjMDZlNzgzYzcxNWJjZjA4N2IzLi5hZmE0NWUyNGIwNDFlZjgyNWM2NTdhNjExOTUxNDBkMTQ1
NzQxMmYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJU
cmFuc2FjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
VHJhbnNhY3Rpb24uY3BwCkBAIC00NjMsNiArNDYzLDExIEBAIEV2ZW50VGFyZ2V0RGF0YSogSURC
VHJhbnNhY3Rpb246OmVuc3VyZUV2ZW50VGFyZ2V0RGF0YSgpCiAgICAgcmV0dXJuICZtX2V2ZW50
VGFyZ2V0RGF0YTsKIH0KIAorSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlKiBJREJUcmFuc2Fj
dGlvbjo6YmFja2VuZERCKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZGIoKS0+YmFja2VuZCgpOwor
fQorCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5oCmluZGV4IGUxMjc1
Yjg0YTk0NTc0Y2Q0Yjk5M2M1MTBjNDgzY2JkNTcxMWRiNDcuLmRmNDFiYmIwZWY1MzM4MWMwY2Uy
NzFiN2RkNDU2ZmRiZjllZTA0MDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCVHJhbnNhY3Rpb24uaApAQCAtNDcsNiArNDcsNyBAQCBjbGFzcyBJREJEYXRh
YmFzZTsKIGNsYXNzIElEQk9iamVjdFN0b3JlOwogY2xhc3MgSURCT3BlbkRCUmVxdWVzdDsKIGNs
YXNzIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZTsKK2NsYXNzIElEQkRhdGFiYXNlQmFj
a2VuZEludGVyZmFjZTsKIHN0cnVjdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhOwogCiBjbGFzcyBJ
REJUcmFuc2FjdGlvbiA6IHB1YmxpYyBTY3JpcHRXcmFwcGFibGUsIHB1YmxpYyBJREJUcmFuc2Fj
dGlvbkNhbGxiYWNrcywgcHVibGljIEV2ZW50VGFyZ2V0LCBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0
IHsKQEAgLTcxLDYgKzcyLDggQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJp
bmcmIG1vZGVUb1N0cmluZyhNb2RlLCBFeGNlcHRpb25Db2RlJik7CiAKICAgICBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2UqIGJhY2tlbmQoKSBjb25zdDsKKyAgICBJREJEYXRhYmFzZUJh
Y2tlbmRJbnRlcmZhY2UqIGJhY2tlbmREQigpIGNvbnN0OworCiAgICAgaW50NjRfdCBpZCgpIGNv
bnN0IHsgcmV0dXJuIG1faWQ7IH0KICAgICBib29sIGlzQWN0aXZlKCkgY29uc3QgeyByZXR1cm4g
bV9zdGF0ZSA9PSBBY3RpdmU7IH0KICAgICBib29sIGlzRmluaXNoZWQoKSBjb25zdCB7IHJldHVy
biBtX3N0YXRlID09IEZpbmlzaGVkOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmgKaW5kZXggMWUy
MmI3MTcwZjI1NTU5NjhjMzc4OTFlYmNkZWVhOWExZWM2YzExMi4uYzc5ZGVmZjQ4ODQ4MDRmN2Yz
N2FmMDMyMzU0MDc4OTI3MzkxYTNiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaApAQCAtNzcs
NiArNzcsOCBAQCBwdWJsaWM6CiAgICAgSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogYmFj
a2luZ1N0b3JlVHJhbnNhY3Rpb24oKSB7IHJldHVybiAmbV90cmFuc2FjdGlvbjsgfQogICAgIGlu
dDY0X3QgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9CiAKKyAgICBJREJEYXRhYmFzZUJhY2tl
bmRJbXBsKiBkYXRhYmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YWJhc2UuZ2V0KCk7IH0KKwog
cHJpdmF0ZToKICAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKGludDY0X3QgaWQsIGNvbnN0
IEhhc2hTZXQ8aW50NjRfdD4mIG9iamVjdFN0b3JlSWRzLCBJREJUcmFuc2FjdGlvbjo6TW9kZSwg
SURCRGF0YWJhc2VCYWNrZW5kSW1wbCopOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJJREJEYXRhYmFzZS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViSURCRGF0YWJhc2UuaAppbmRleCBlNjI0ZmU1OGQ4MTRjYzIzYzI2Yzc1M2YxNjc3
OGE4MDc1Yjc1ODc5Li5jMzFhNTRkMzBkMWU5MWVjYWZiYWU2Mzk3Nzk1MTc4MjMxMThkMTMxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJEYXRhYmFzZS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklEQkRhdGFiYXNlLmgKQEAg
LTg5LDcgKzg5LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBvcGVuQ3Vyc29yKGxvbmcg
bG9uZyB0cmFuc2FjdGlvbklkLCBsb25nIGxvbmcgb2JqZWN0U3RvcmVJZCwgbG9uZyBsb25nIGlu
ZGV4SWQsIGNvbnN0IFdlYklEQktleVJhbmdlJiwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBi
b29sIGtleU9ubHksIFRhc2tUeXBlLCBXZWJJREJDYWxsYmFja3MqKSB7IFdFQktJVF9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBjb3VudChsb25nIGxvbmcgdHJhbnNh
Y3Rpb25JZCwgbG9uZyBsb25nIG9iamVjdFN0b3JlSWQsIGxvbmcgbG9uZyBpbmRleElkLCBjb25z
dCBXZWJJREJLZXlSYW5nZSYsIFdlYklEQkNhbGxiYWNrcyopIHsgV0VCS0lUX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOyB9CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZVJhbmdlKGxvbmcgbG9uZyB0cmFu
c2FjdGlvbklkLCBsb25nIGxvbmcgb2JqZWN0U3RvcmVJZCwgY29uc3QgV2ViSURCS2V5UmFuZ2Um
LCBXZWJJREJDYWxsYmFja3MqKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQotICAg
IHZpcnR1YWwgdm9pZCBjbGVhcihsb25nIGxvbmcgdHJhbnNhY3Rpb25JZCwgbG9uZyBsb25nIG9i
amVjdFN0b3JlSWQsIFdlYklEQkNhbGxiYWNrcyopICB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBjbGVhcihsb25nIGxvbmcgdHJhbnNhY3Rpb25JZCwg
bG9uZyBsb25nIG9iamVjdFN0b3JlSWQsIFdlYklEQkNhbGxiYWNrcyopIHsgV0VCS0lUX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOyB9CiAKIHByb3RlY3RlZDoKICAgICBXZWJJREJEYXRhYmFzZSgpIHsg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRGF0YWJhc2VJ
bXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkRhdGFiYXNlSW1wbC5j
cHAKaW5kZXggYjA1YzUxN2M0MzE4YTE5NzEzZGI5NWZjYzA3ZTYxM2Q5ZTU2YmI0My4uMTM5ZDA0
NzVlZDI5N2ZlMGQxNTU0OTM1NGJkNzEyNGMxMDU5YmIyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRGF0YWJhc2VJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJJREJEYXRhYmFzZUltcGwuY3BwCkBAIC0xNjQsNyArMTY0LDcg
QEAgdm9pZCBXZWJJREJEYXRhYmFzZUltcGw6OnB1dChsb25nIGxvbmcgdHJhbnNhY3Rpb25JZCwg
bG9uZyBsb25nIG9iamVjdFN0b3JlSWQsIFcKICAgICAgICAgaW5kZXhLZXlzW2ldID0gaW5kZXhL
ZXlMaXN0OwogICAgIH0KIAotICAgIFZlY3Rvcjx1aW50OF90PiB2YWx1ZUJ1ZmZlcih2YWx1ZS0+
c2l6ZSgpKTsKKyAgICBWZWN0b3I8dWludDhfdD4gdmFsdWVCdWZmZXI7CiAgICAgdmFsdWVCdWZm
ZXIuYXBwZW5kKHZhbHVlLT5kYXRhKCksIHZhbHVlLT5zaXplKCkpOwogICAgIG1fZGF0YWJhc2VC
YWNrZW5kLT5wdXQodHJhbnNhY3Rpb25JZCwgb2JqZWN0U3RvcmVJZCwgJnZhbHVlQnVmZmVyLCBr
ZXksIHN0YXRpY19jYXN0PElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6UHV0TW9kZT4ocHV0
TW9kZSksIElEQkNhbGxiYWNrc1Byb3h5OjpjcmVhdGUoYWRvcHRQdHIoY2FsbGJhY2tzKSksIGlu
ZGV4SWRzLCBpbmRleEtleXMpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViSURCSW5kZXhJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YklEQkluZGV4SW1wbC5jcHAKaW5kZXggOWIxZDY4Y2ZmN2Q3ZTQyYTViNzA4M2NlNWY3ZTI4MjYx
OTM3Y2VmMS4uYjA4Zjg1NGYzNWY1ODcyMmRiZjUwODgyZDM0NjQ1YWY5MjFlZDQ4OSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCSW5kZXhJbXBsLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJJbmRleEltcGwuY3BwCkBAIC0zMCw2
ICszMCw3IEBACiAKICNpbmNsdWRlICJJREJDYWxsYmFja3NQcm94eS5oIgogI2luY2x1ZGUgIklE
QkluZGV4LmgiCisjaW5jbHVkZSAiSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlLmgiCiAjaW5jbHVk
ZSAiSURCS2V5UmFuZ2UuaCIKICNpbmNsdWRlICJXZWJJREJDYWxsYmFja3MuaCIKICNpbmNsdWRl
ICJXZWJJREJLZXkuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
SURCRGF0YWJhc2VCYWNrZW5kVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0lEQkRhdGFiYXNlQmFja2VuZFRlc3QuY3BwCmluZGV4IGVlNDg3YTFjNjIxZjE5MmEyMDY3YjQy
ZjMyMDEyZDMwZjA1OWE1MjEuLjBjNWY0NThmZjM5OTY0ZDMxZWRkOGVhM2U3ZmNmYjk0YTE0N2Yy
YzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCRGF0YWJhc2VC
YWNrZW5kVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJEYXRh
YmFzZUJhY2tlbmRUZXN0LmNwcApAQCAtNjIsNyArNjIsNyBAQCBURVNUKElEQkRhdGFiYXNlQmFj
a2VuZFRlc3QsIEJhY2tpbmdTdG9yZVJldGVudGlvbikKIAogICAgIGNvbnN0IGJvb2wgdW5pcXVl
ID0gZmFsc2U7CiAgICAgY29uc3QgYm9vbCBtdWx0aUVudHJ5ID0gZmFsc2U7Ci0gICAgUmVmUHRy
PElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4ID0gSURCSW5kZXhCYWNrZW5kSW1wbDo6Y3JlYXRl
KGRiLmdldCgpLCBzdG9yZS5nZXQoKSwgSURCSW5kZXhNZXRhZGF0YSgiaW5kZXgiLCAtMSwgSURC
S2V5UGF0aCgia2V5UGF0aCIpLCB1bmlxdWUsIG11bHRpRW50cnkpKTsKKyAgICBSZWZQdHI8SURC
SW5kZXhCYWNrZW5kSW1wbD4gaW5kZXggPSBJREJJbmRleEJhY2tlbmRJbXBsOjpjcmVhdGUoZGIu
Z2V0KCksIElEQkluZGV4TWV0YWRhdGEoImluZGV4IiwgLTEsIElEQktleVBhdGgoImtleVBhdGgi
KSwgdW5pcXVlLCBtdWx0aUVudHJ5KSk7CiAgICAgRVhQRUNUX0dUKGJhY2tpbmdTdG9yZS0+cmVm
Q291bnQoKSwgMSk7CiAKICAgICBkYi5jbGVhcigpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGMzMDNlMGRkMjE1OWQ0ZDli
ZDg2OGI4MTlkMGUzMGJmNDRhZWU3NzUuLjBlNjFlNDczN2FlN2I2ZWRiNzViN2JlOWE1ZWE5MTMw
Y2Q1MTdjN2IgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAxMy0wMS0wMyAgQWxlYyBGbGV0dCAg
PGFsZWNmbGV0dEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBNaWdyYXRlIGJh
Y2tlbmQgT2JqZWN0U3RvcmUgY2FsbHMgdG8gdXNlIHRyYW5zYWN0aW9uIGlkCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDI3NDEKKworICAgICAgICBS
ZXZpZXdlZCBieSBUb255IENoYW5nLgorCisgICAgICAgIEFkZCBhZGRpdGlvbmFsIGNvdW50KCkg
dGVzdHMgZm9yIG11bHRpLWVudHJ5IGluZGV4ZXMsIG5vdCBwcmV2aW91c2x5CisgICAgICAgIGNv
dmVyZWQuCisKKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9pbmRleC1tdWx0aWVudHJ5LWV4
cGVjdGVkLnR4dDoKKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9yZXNvdXJjZXMvaW5kZXgt
bXVsdGllbnRyeS5qczoKKyAgICAgICAgKC50cmFuc2FjdGlvbi5vbmNvbXBsZXRlKToKKyAgICAg
ICAgKHZlcmlmeUNvdW50LnJlcXVlc3Qub25zdWNjZXNzLnJlcXVlc3Qub25zdWNjZXNzKToKKyAg
ICAgICAgKHZlcmlmeUNvdW50LnJlcXVlc3Qub25zdWNjZXNzKToKKyAgICAgICAgKHZlcmlmeUNv
dW50KToKKwogMjAxMy0wMS0wMyAgVGVycnkgQW5kZXJzb24gIDx0ZGFuZGVyc29uQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkIGdhcmRlbmluZy4gTWFya2luZyBmYXN0L2V2ZW50
cy81MDU2NjE5Lmh0bWwgYXMgZmxha3kKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2Uv
aW5kZXhlZGRiL2luZGV4LW11bHRpZW50cnktZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3Rv
cmFnZS9pbmRleGVkZGIvaW5kZXgtbXVsdGllbnRyeS1leHBlY3RlZC50eHQKaW5kZXggZjFkNjk3
N2U3ZjhmMzEwYjNkMTgzNmM5NzJjODdjNzZlYzljN2ZkZC4uOWMyZGVmOGI5MTc0MDM0MzJkZTYw
Y2VhMWVmYmFmOTA5ZjllY2NkNCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRl
eGVkZGIvaW5kZXgtbXVsdGllbnRyeS1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvc3Rv
cmFnZS9pbmRleGVkZGIvaW5kZXgtbXVsdGllbnRyeS1leHBlY3RlZC50eHQKQEAgLTgyLDYgKzgy
LDEyIEBAIFBBU1MgY3Vyc29yLnZhbHVlLnkgaXMgImQiCiBjdXJzb3IuY29udGludWUoKQogY3Vy
c29yID0gZXZlbnQudGFyZ2V0LnJlc3VsdAogUEFTUyBleHBlY3RlZC5sZW5ndGggaXMgMAordHJh
bnNhY3Rpb24gPSBkYi50cmFuc2FjdGlvbihbJ3N0b3JlJ10pCit0cmFuc2FjdGlvbi5vYmplY3RT
dG9yZSgnc3RvcmUnKS5pbmRleCgnaW5kZXgnKQoraW5kZXguY291bnQoKQorUEFTUyBldmVudC50
YXJnZXQucmVzdWx0IGlzIDkKK2luZGV4LmNvdW50KDcpCitQQVNTIGV2ZW50LnRhcmdldC5yZXN1
bHQgaXMgMQogCiBWZXJpZnlpbmcgdW5pcXVlIGNvbnN0cmFpbnQgb24gbXVsdGlFbnRyeSBpbmRl
eAogdHJhbnNhY3Rpb24gPSBkYi50cmFuc2FjdGlvbihbJ3N0b3JlLXVuaXF1ZSddLCAncmVhZHdy
aXRlJykKQEAgLTE2Miw2ICsxNjgsMTIgQEAgUEFTUyBjdXJzb3IudmFsdWUueSBpcyAiZCIKIGN1
cnNvci5jb250aW51ZSgpCiBjdXJzb3IgPSBldmVudC50YXJnZXQucmVzdWx0CiBQQVNTIGV4cGVj
dGVkLmxlbmd0aCBpcyAwCit0cmFuc2FjdGlvbiA9IGRiLnRyYW5zYWN0aW9uKFsnc3RvcmUnXSkK
K3RyYW5zYWN0aW9uLm9iamVjdFN0b3JlKCdzdG9yZScpLmluZGV4KCdpbmRleCcpCitpbmRleC5j
b3VudCgpCitQQVNTIGV2ZW50LnRhcmdldC5yZXN1bHQgaXMgOQoraW5kZXguY291bnQoNykKK1BB
U1MgZXZlbnQudGFyZ2V0LnJlc3VsdCBpcyAxCiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0
cnVlCiAKIFRFU1QgQ09NUExFVEUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5k
ZXhlZGRiL3Jlc291cmNlcy9pbmRleC1tdWx0aWVudHJ5LmpzIGIvTGF5b3V0VGVzdHMvc3RvcmFn
ZS9pbmRleGVkZGIvcmVzb3VyY2VzL2luZGV4LW11bHRpZW50cnkuanMKaW5kZXggN2RmNWY1OTJj
ZmNjM2YxNTZiNzM0MzM4MjkzZjE2ZmVhMmRlYzRjMC4uYjBiNTVlOGFiZmViMDQ4YmNiNTY1YjU0
ZDJhYWJmODNiNjExNzIzOCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVk
ZGIvcmVzb3VyY2VzL2luZGV4LW11bHRpZW50cnkuanMKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFn
ZS9pbmRleGVkZGIvcmVzb3VyY2VzL2luZGV4LW11bHRpZW50cnkuanMKQEAgLTQ1LDcgKzQ1LDcg
QEAgZnVuY3Rpb24gdmVyaWZ5SW5kZXhlcyhpbmRleE5hbWUsIGNhbGxiYWNrKQogICAgIGRlYnVn
KCJWZXJpZnlpbmcgaW5kZXg6ICIgKyBpbmRleE5hbWUpOwogICAgIHRyYW5zYWN0aW9uID0gZXZh
bEFuZExvZygidHJhbnNhY3Rpb24gPSBkYi50cmFuc2FjdGlvbihbJ3N0b3JlJ10sICdyZWFkb25s
eScpIik7CiAgICAgdHJhbnNhY3Rpb24ub25hYm9ydCA9IHVuZXhwZWN0ZWRBYm9ydENhbGxiYWNr
OwotICAgIHRyYW5zYWN0aW9uLm9uY29tcGxldGUgPSBjYWxsYmFjazsKKyAgICB0cmFuc2FjdGlv
bi5vbmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7IHZlcmlmeUNvdW50KGNhbGxiYWNrKTsgfTsKIAog
ICAgIGV4cGVjdGVkID0gWwogICAgICAgICB7IGtleTogMSwgcHJpbWFyeUtleTogJ2ZvbycsIHk6
ICdhJyB9LApAQCAtMTA0LDYgKzEwNCwyNiBAQCBmdW5jdGlvbiB2ZXJpZnlVbmlxdWVDb25zdHJh
aW50KCkKICAgICB9OwogfQogCitmdW5jdGlvbiB2ZXJpZnlDb3VudChjYWxsYmFjaykgeworICAg
IGV2YWxBbmRMb2coInRyYW5zYWN0aW9uID0gZGIudHJhbnNhY3Rpb24oWydzdG9yZSddKSIpOwor
CisgICAgdHJhbnNhY3Rpb24ub25hYm9ydCA9IHVuZXhwZWN0ZWRBYm9ydENhbGxiYWNrOworICAg
IHRyYW5zYWN0aW9uLm9uY29tcGxldGUgPSBjYWxsYmFjazsKKworICAgIGluZGV4ID0gZXZhbEFu
ZExvZygidHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoJ3N0b3JlJykuaW5kZXgoJ2luZGV4JykiKTsK
KyAgICByZXF1ZXN0ID0gZXZhbEFuZExvZygiaW5kZXguY291bnQoKSIpOworICAgIHJlcXVlc3Qu
b25zdWNjZXNzID0gZnVuY3Rpb24oZXZlbnQpIHsKKworICAgICAgICBzaG91bGRCZSgiZXZlbnQu
dGFyZ2V0LnJlc3VsdCIsICI5Iik7CisKKyAgICAgICAgcmVxdWVzdCA9IGV2YWxBbmRMb2coImlu
ZGV4LmNvdW50KDcpIik7CisgICAgICAgIHJlcXVlc3Qub25zdWNjZXNzID0gZnVuY3Rpb24oZXZl
bnQpIHsKKyAgICAgICAgICAgIHNob3VsZEJlKCJldmVudC50YXJnZXQucmVzdWx0IiwgIjEiKTsK
KyAgICAgICAgfTsKKyAgICB9OworCit9CisKIGZ1bmN0aW9uIGNyZWF0ZUluZGV4T25TdG9yZVdp
dGhEYXRhKCkKIHsKICAgICBkZWJ1ZygiIik7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>