<?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>90923</bug_id>
          
          <creation_ts>2012-07-10 17:30:02 -0700</creation_ts>
          <short_desc>IndexedDB: Introduce putWithIndexKeys and calculate them in the renderer</short_desc>
          <delta_ts>2012-07-16 16:59:06 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>91123</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>fishd</cc>
    
    <cc>jamesr</cc>
    
    <cc>levin+threading</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>666196</commentid>
    <comment_count>0</comment_count>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-07-10 17:30:02 -0700</bug_when>
    <thetext>IndexedDB: Introduce putWithIndexKeys and calculate them in the renderer</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666200</commentid>
    <comment_count>1</comment_count>
      <attachid>151562</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-07-10 17:38:53 -0700</bug_when>
    <thetext>Created attachment 151562
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666201</commentid>
    <comment_count>2</comment_count>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-07-10 17:39:30 -0700</bug_when>
    <thetext>jsbell@ - care to take  a look?

After this comes a chromium patch to hook back up to putWithIndexKeys()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666203</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-10 17:41:30 -0700</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>667109</commentid>
    <comment_count>4</comment_count>
      <attachid>151562</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-07-11 15:10:26 -0700</bug_when>
    <thetext>Comment on attachment 151562
Patch

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

I&apos;m still not sure how this approach will work with indexes created after the put() call.

&gt; Source/WebCore/Modules/indexeddb/IDBObjectStore.cpp:-176
&gt; -    // FIXME: Pass through keyPathKey as key to simplify back end implementation.

Why is this comment being removed?

&gt; Source/WebCore/Modules/indexeddb/IDBObjectStore.h:106
&gt; +    typedef HashMap&lt;String, IndexKeys&gt; IndexKeyMap;

Is this second typedef used?

&gt; Source/WebCore/Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:156
&gt; +    OwnPtr&lt;Vector&lt;String&gt; &gt; nullIndexNames;

Unless they will diverge in the future, rather than having put() duplicate the (admittedly minimal) logic of putWithIndexKeys() I&apos;d just have it turn around and call putWithIndexKeys() with the two empty vectors.

&gt; Source/WebCore/Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:157
&gt; +    OwnPtr&lt;Vector&lt;IndexKeys&gt; &gt; nullIndexKeys;

Maybe add a comment that null pointers signify to putInternal that it should compute the keys, since not everything in the new pipeline is functional yet.

&gt; Source/WebCore/Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:231
&gt; +    bool verifyIndexKeys(IDBBackingStore&amp; backingStore,

Mark method as const.

Make the param a const reference, while you&apos;re there? (Will require touching IDBBackingStore and IDBLevelDBBackingStore since keyExistsInObjectStore is not marked const)

&gt; Source/WebCore/Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:247
&gt; +    bool writeIndexKeys(const IDBBackingStore::ObjectStoreRecordIdentifier* recordIdentifier, IDBBackingStore&amp; backingStore, int64_t databaseId, int64_t objectStoreId, int64_t indexId)

Mark method as const.

&gt; Source/WebCore/Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:262
&gt; +    bool addingKeyAllowed(IDBBackingStore&amp; backingStore,

Mark method as const.

&gt; Source/WebCore/Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:308
&gt; +                // FIXME: remove this when get-side key injection is the norm.

Capitalize.

&gt; Source/WebCore/Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:351
&gt; +        if (indexKeys)

Add FIXME that keys will eventually be passed in and this can change to an ASSERT and the else block can go away.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667154</commentid>
    <comment_count>5</comment_count>
      <attachid>151562</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-07-11 15:41:33 -0700</bug_when>
    <thetext>Comment on attachment 151562
Patch

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

&gt;&gt; Source/WebCore/Modules/indexeddb/IDBObjectStore.cpp:-176
&gt;&gt; -    // FIXME: Pass through keyPathKey as key to simplify back end implementation.
&gt; 
&gt; Why is this comment being removed?

oops, this belongs in the next patch, which does this.

&gt;&gt; Source/WebCore/Modules/indexeddb/IDBObjectStore.h:106
&gt;&gt; +    typedef HashMap&lt;String, IndexKeys&gt; IndexKeyMap;
&gt; 
&gt; Is this second typedef used?

yes, in IDBObjectStore::put()

&gt;&gt; Source/WebCore/Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:156
&gt;&gt; +    OwnPtr&lt;Vector&lt;String&gt; &gt; nullIndexNames;
&gt; 
&gt; Unless they will diverge in the future, rather than having put() duplicate the (admittedly minimal) logic of putWithIndexKeys() I&apos;d just have it turn around and call putWithIndexKeys() with the two empty vectors.

good point.

[Later] Ooops, I now remember why I did it this way:
1) there&apos;s a slight difference between a null pointer and an empty array (as you noticed in your next comment)
2) due to ownership/callback issues I had to make putInternal take a pointer (const Vector&lt;&gt; *), whereas putWithIndexKeys takes a reference (const Vector&lt;&gt;&amp;) - and I cant pass null to a reference.

This is only a band-aid solution that will be cleaned up in my next patch (Which I&apos;ve already written and tested) which removes the excess methods.

&gt;&gt; Source/WebCore/Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:231
&gt;&gt; +    bool verifyIndexKeys(IDBBackingStore&amp; backingStore,
&gt; 
&gt; Mark method as const.
&gt; 
&gt; Make the param a const reference, while you&apos;re there? (Will require touching IDBBackingStore and IDBLevelDBBackingStore since keyExistsInObjectStore is not marked const)

Tried this already - keyExistsInObjectStore deletes stale entries from the database, so it can&apos;t be const, and thus neither can addingKeyAllowed, nor this method.

&gt;&gt; Source/WebCore/Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:262
&gt;&gt; +    bool addingKeyAllowed(IDBBackingStore&amp; backingStore,
&gt; 
&gt; Mark method as const.

(as mentioned above, tried this and can&apos;t due to the fact that keyExistsInIndex tweaks stale entries (via findKeyInIndex) - I&apos;m happy to try to clean up that a bit in a separate pass though - one const path and one non-const path.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667245</commentid>
    <comment_count>6</comment_count>
      <attachid>151824</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-07-11 17:37:18 -0700</bug_when>
    <thetext>Created attachment 151824
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667939</commentid>
    <comment_count>7</comment_count>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-07-12 10:26:21 -0700</bug_when>
    <thetext>jsbell@ - latest patch addresses outstanding review comments, sans a few minor issues described above. Another r?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>668068</commentid>
    <comment_count>8</comment_count>
      <attachid>151824</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-07-12 12:16:21 -0700</bug_when>
    <thetext>Comment on attachment 151824
Patch

lgtm, just nits.

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

&gt; Source/WebCore/Modules/indexeddb/IDBObjectStore.cpp:-458
&gt; -

Eliminate this diff so this file is not touched just for a whitespace change.

&gt; Source/WebCore/Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:158
&gt; +    // null pointers here signifiy that index keys should be generated as a part of this put.

Capitalize null, typo: &quot;signify&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>668070</commentid>
    <comment_count>9</comment_count>
      <attachid>152020</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-07-12 12:20:55 -0700</bug_when>
    <thetext>Created attachment 152020
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>668073</commentid>
    <comment_count>10</comment_count>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-07-12 12:23:01 -0700</bug_when>
    <thetext>tony@ r? for idb stuff

dglazkov@ r? for chromium stuff? (just stubbing out new methods)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>669382</commentid>
    <comment_count>11</comment_count>
      <attachid>152020</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-07-13 13:34:59 -0700</bug_when>
    <thetext>Comment on attachment 152020
Patch

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

LGTM. Passing off to dglazkov for API review.

&gt; Source/WebCore/Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:343
&gt; +        for (size_t i = 0; i &lt; indexNames-&gt;size(); i++)

Nit: ++i</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>669389</commentid>
    <comment_count>12</comment_count>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-07-13 13:49:09 -0700</bug_when>
    <thetext>thanks tony, will do.

fishd@ - dglazkov is on vacation. mind a quick r? for chromium API stuff?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670637</commentid>
    <comment_count>13</comment_count>
      <attachid>152020</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2012-07-16 14:00:54 -0700</bug_when>
    <thetext>Comment on attachment 152020
Patch

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

&gt; Source/WebKit/chromium/public/WebIDBObjectStore.h:57
&gt; +    virtual void putWithIndexKeys(const WebSerializedScriptValue&amp;, const WebIDBKey&amp;, PutMode, WebIDBCallbacks*, const WebIDBTransaction&amp;, const WebVector&lt;WebString&gt;&amp;, const WebVector&lt;WebIndexKeys&gt;&amp;, WebExceptionCode&amp;) { WEBKIT_ASSERT_NOT_REACHED(); }

nit: give the WebVector&lt;WebString&gt; parameter a name?  using indexNames would help a lot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670733</commentid>
    <comment_count>14</comment_count>
      <attachid>152626</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-07-16 15:40:59 -0700</bug_when>
    <thetext>Created attachment 152626
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670782</commentid>
    <comment_count>15</comment_count>
      <attachid>152626</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-16 16:59:00 -0700</bug_when>
    <thetext>Comment on attachment 152626
Patch for landing

Clearing flags on attachment: 152626

Committed r122779: &lt;http://trac.webkit.org/changeset/122779&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670783</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-16 16:59:06 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151562</attachid>
            <date>2012-07-10 17:38:53 -0700</date>
            <delta_ts>2012-07-11 17:37:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90923-20120710173852.patch</filename>
            <type>text/plain</type>
            <size>30599</size>
            <attacher name="Alec Flett">alecflett</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyMjA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGE1YjhjYTI3MGVhYzJh
NmVlNThlNDljODkzMzg3YTc1MGJlMTlmMS4uZWQ5MzRjZWQ2MDcyNzdkZDM5MDkzNzkyOGQzZjY1
YjRhNDc4YzEyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDEyLTA3LTEwICBBbGVj
IEZsZXR0ICA8YWxlY2ZsZXR0QGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IElu
dHJvZHVjZSBwdXRXaXRoSW5kZXhLZXlzIGFuZCBjYWxjdWxhdGUgdGhlbSBpbiB0aGUgcmVuZGVy
ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwOTIz
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVmYWN0
b3IgSW5kZXhXcml0ZXIgdG8gZGVwZW5kIG9ubHkgb24gSURCSW5kZXhNZXRhZGF0YSBhbmQgb24K
KyAgICAgICAgKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQpIHNvIHRoYXQgaXQg
Y2FuIHRhbGsgZGlyZWN0bHkKKyAgICAgICAgdG8gdGhlIGJhY2tpbmcgc3RvcmUsIGFuZCBhbHNv
IGV2ZW50dWFsbHkgYmUgbW92ZWQgaW50byB0aGUgcmVuZGVyZXIuCisKKyAgICAgICAgVGhpcyBh
bHNvIGludHJvZHVjZXMgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpwdXRXaXRoSW5k
ZXhLZXlzCisgICAgICAgIGFzIGEgcmVwbGFjZW1lbnQgZm9yIElEQk9iamVjdFN0b3JlQmFja2Vu
ZEludGVyZmFjZTo6cHV0LCBhbHJlYWR5CisgICAgICAgIHN0dWJiZWQgb3V0IGluIHRoZSBjaHJv
bWl1bSBwb3J0LiBJdCB3aWxsIGZ1bGx5IHJlcGxhY2UgcHV0KCkKKyAgICAgICAgYWZ0ZXIgYm90
aCBjaHJvbWl1bSBhbmQgd2Via2l0IHNpZGVzIGhhdmUgcmVhY2hlZCBhbGlnbm1lbnQuCisKKyAg
ICAgICAgTm8gbmV3IHRlc3RzIGFzIHRoaXMgaXMganVzdCBhIHJlZmFjdG9yIGFuZCBleGlzdGlu
ZyB0ZXN0cyBjb3ZlcgorICAgICAgICBjb3JyZWN0bmVzcy4KKworICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL0lEQkN1cnNvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OnNl
dFZhbHVlUmVhZHkpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2Vu
ZEltcGwuY3BwOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZElt
cGwuaDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6cHV0KToKKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oOgorICAgICAgICAoSURCT2JqZWN0U3RvcmUpOgor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0KToKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6cHV0V2l0aEluZGV4S2V5cyk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpwb3B1bGF0ZUluZGV4KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4
ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmg6CisgICAgICAgIChJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9y
ZUJhY2tlbmRJbnRlcmZhY2UuaDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1
ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6Om9uU3VjY2Vzcyk6CisKIDIw
MTItMDctMTAgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAg
ICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMjIxNzguCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCmluZGV4IDc1OTY3M2U0NThjMGY3ODNiZDYwZGJiMjEyNTc3MTI3MjE1OTEzNmUuLmU4
ZjRmMTdmMTA2NWZjOTkwNGUyMDQ3YmMwNjI2Mjk1MzU3OTI2NzcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTItMDctMTAgIEFsZWMgRmxldHQgIDxhbGVj
ZmxldHRAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEluZGV4ZWREQjogSW50cm9kdWNlIHB1dFdp
dGhJbmRleEtleXMgYW5kIGNhbGN1bGF0ZSB0aGVtIGluIHRoZSByZW5kZXJlcgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTA5MjMKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTdHViIG91dCBpbXBsZW1lbnRh
dGlvbnMgb2YgcHV0V2l0aEluZGV4S2V5cygpLCBhbHJlYWR5IGltcGxlbWVudGVkCisgICAgICAg
IG9uIHRoZSBjaHJvbWl1bSBzaWRlLgorCisgICAgICAgICogcHVibGljL1dlYklEQk9iamVjdFN0
b3JlLmg6CisgICAgICAgIChXZWJLaXQ6OldlYklEQk9iamVjdFN0b3JlOjpwdXRXaXRoSW5kZXhL
ZXlzKToKKyAgICAgICAgKiBzcmMvSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHkuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpJREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eTo6cHV0V2l0aEluZGV4S2V5
cyk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAqIHNyYy9JREJPYmplY3RTdG9yZUJhY2tl
bmRQcm94eS5oOgorICAgICAgICAoSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHkpOgorCiAyMDEy
LTA3LTA5ICBNYXR0IEZhbGtlbmhhZ2VuICA8ZmFsa2VuQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBBZGQgRU5BQkxFX0RJQUxPR19FTEVNRU5UIGFuZCBza2VsZXRvbiBmaWxlcwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHAKaW5kZXggNWU5MDI1MTEy
ZWU2YmI5Y2Q5ODgwNTk1YTI5MGU2MjkzZWNiN2EyOS4uNmUyODY5MWFmMGI3NzE2YzkwNjU2Yzg2
YjVjODg3MDQ1YzdiNTdlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCQ3Vyc29yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJDdXJzb3IuY3BwCkBAIC0yNzYsNiArMjc2LDcgQEAgdm9pZCBJREJDdXJzb3I6OnNldFZh
bHVlUmVhZHkoKQogICAgICAgICBpZiAob2JqZWN0U3RvcmUtPmF1dG9JbmNyZW1lbnQoKSAmJiAh
b2JqZWN0U3RvcmUtPm1ldGFkYXRhKCkua2V5UGF0aC5pc051bGwoKSkgewogICAgICAgICAgICAg
Y29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCA9IG9iamVjdFN0b3JlLT5tZXRhZGF0YSgpLmtleVBh
dGg7CiAgICAgICAgICAgICBSZWZQdHI8SURCS2V5PiBleHBlY3RlZEtleSA9IGNyZWF0ZUlEQktl
eUZyb21TZXJpYWxpemVkVmFsdWVBbmRLZXlQYXRoKHZhbHVlLCBrZXlQYXRoKTsKKyAgICAgICAg
ICAgIEFTU0VSVChtX2N1cnJlbnRQcmltYXJ5S2V5KTsKICAgICAgICAgICAgIEFTU0VSVChleHBl
Y3RlZEtleS0+aXNFcXVhbChtX2N1cnJlbnRQcmltYXJ5S2V5LmdldCgpKSk7CiAgICAgICAgIH0K
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJ
bmRleEJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkluZGV4QmFja2VuZEltcGwuY3BwCmluZGV4IGEwODdlNmFhZjJmNTI0MjM1Zjg1MDdhNmVmNDhl
NWIyZWM3ZDllZTcuLmFmZGI3ZWMzYzZkNDVlZDczZmY3NTcxNWQ2NDViMmFmYjQ3MGFmM2IgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2Vu
ZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4
QmFja2VuZEltcGwuY3BwCkBAIC0yMTksMjAgKzIxOSw2IEBAIHZvaWQgSURCSW5kZXhCYWNrZW5k
SW1wbDo6Z2V0S2V5KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHBycEtleVJhbmdlLCBQYXNzUmVm
UHRyCiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNU
SVZFX0VSUjsKIH0KIAotYm9vbCBJREJJbmRleEJhY2tlbmRJbXBsOjphZGRpbmdLZXlBbGxvd2Vk
KGNvbnN0IElEQktleSogaW5kZXhLZXksIGNvbnN0IElEQktleSogcHJpbWFyeUtleSkKLXsKLSAg
ICBpZiAoIW1fdW5pcXVlKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIFJlZlB0cjxJREJL
ZXk+IGZvdW5kUHJpbWFyeUtleTsKLSAgICBib29sIGZvdW5kID0gYmFja2luZ1N0b3JlKCktPmtl
eUV4aXN0c0luSW5kZXgoZGF0YWJhc2VJZCgpLCBtX29iamVjdFN0b3JlQmFja2VuZC0+aWQoKSwg
bV9pZCwgKmluZGV4S2V5LCBmb3VuZFByaW1hcnlLZXkpOwotICAgIGlmICghZm91bmQpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIGlmIChwcmltYXJ5S2V5ICYmIGZvdW5kUHJpbWFyeUtleS0+
aXNFcXVhbChwcmltYXJ5S2V5KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIGZh
bHNlOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkluZGV4QmFja2VuZEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkluZGV4QmFja2VuZEltcGwuaAppbmRleCA5ODM4NTEyOGYyOGJhY2E1NDUzNjkxMTNm
YWQ2OTIxMGMyMzUwMWZiLi5mODQxYTk1ODM3MjQ0YzJmZDA4Mjg4MDRhNjkwMTM0NGQ4NWE1MjVj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJh
Y2tlbmRJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5k
ZXhCYWNrZW5kSW1wbC5oCkBAIC02MSw4ICs2MSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldElk
KGludDY0X3QgaWQpIHsgbV9pZCA9IGlkOyB9CiAgICAgYm9vbCBoYXNWYWxpZElkKCkgY29uc3Qg
eyByZXR1cm4gbV9pZCAhPSBJbnZhbGlkSWQ7IH07CiAKLSAgICBib29sIGFkZGluZ0tleUFsbG93
ZWQoY29uc3QgSURCS2V5KiBpbmRleEtleSwgY29uc3QgSURCS2V5KiBwcmltYXJ5S2V5ID0gMCk7
Ci0KICAgICAvLyBJbXBsZW1lbnRzIElEQkluZGV4QmFja2VuZEludGVyZmFjZS4KICAgICB2aXJ0
dWFsIElEQkluZGV4TWV0YWRhdGEgbWV0YWRhdGEoKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCmluZGV4IDY1ZjIy
MmJmODU2NWU2YjMwMWZhYTQ1NWRhN2Q4YjFmMGYzMjcyNDAuLjAzYTI4MmM1OTI2Yzg4OTg4MzVl
MzRlN2MyYTBjYWJiMzcxY2U0ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKQEAgLTE3Myw3ICsxNzMsNiBAQCBQYXNzUmVm
UHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpwdXQoSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW50ZXJmYWNlOjpQdXRNbwogICAgIH0KIAogICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0
ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBtX3Ry
YW5zYWN0aW9uLmdldCgpKTsKLSAgICAvLyBGSVhNRTogUGFzcyB0aHJvdWdoIGtleVBhdGhLZXkg
YXMga2V5IHRvIHNpbXBsaWZ5IGJhY2sgZW5kIGltcGxlbWVudGF0aW9uLgogICAgIG1fYmFja2Vu
ZC0+cHV0KHZhbHVlLnJlbGVhc2UoKSwga2V5LnJlbGVhc2UoKSwgcHV0TW9kZSwgcmVxdWVzdCwg
bV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7CiAgICAgaWYgKGVjKSB7CiAgICAgICAgIHJl
cXVlc3QtPm1hcmtFYXJseURlYXRoKCk7CkBAIC00NTUsNyArNDU0LDYgQEAgdm9pZCBJREJPYmpl
Y3RTdG9yZTo6dHJhbnNhY3Rpb25GaW5pc2hlZCgpCiAgICAgbV9pbmRleE1hcC5jbGVhcigpOwog
fQogCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCT2JqZWN0U3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9i
amVjdFN0b3JlLmgKaW5kZXggNjdiMzZmOTk1NTE3YTliODRkMmExYzIyNTI0OTU4ZmNkYWE0ODRj
ZS4uZWY3YzA2M2I4ZjgyMjY0MTdhN2JmZjhmMmZlMTM2OTgyNDNiODUzNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oCkBAIC0xMDIs
NiArMTAyLDkgQEAgcHVibGljOgogICAgIElEQk9iamVjdFN0b3JlTWV0YWRhdGEgbWV0YWRhdGEo
KSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhOyB9CiAgICAgdm9pZCBzZXRNZXRhZGF0YShjb25z
dCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBtZXRhZGF0YSkgeyBtX21ldGFkYXRhID0gbWV0YWRh
dGE7IH0KIAorICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxJREJLZXk+ID4gSW5kZXhLZXlzOwor
ICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIEluZGV4S2V5cz4gSW5kZXhLZXlNYXA7CisKIHBy
aXZhdGU6CiAgICAgSURCT2JqZWN0U3RvcmUoY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYs
IFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiwgSURCVHJhbnNhY3Rp
b24qKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcAppbmRleCA0NzRjZGViNWI1YTJjODg0
MWExZmNhZGY5OGZmNjIzMjJmZGYwNGRjLi5kM2U0MGE0NGEzOTFlMDgwNTE1ZGRlZjgwNTNlMmIy
MGQ4NDcyNDIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcApAQCAtMTUzLDggKzE1Mywz
MiBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dChQYXNzUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4gcHJwVmFsdWUsCiAgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzID0gcHJwQ2FsbGJhY2tzOwogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2U+IHRyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb25QdHI7CiAKKyAgICBPd25QdHI8VmVj
dG9yPFN0cmluZz4gPiBudWxsSW5kZXhOYW1lczsKKyAgICBPd25QdHI8VmVjdG9yPEluZGV4S2V5
cz4gPiBudWxsSW5kZXhLZXlzOwogICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzaygK
LSAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bDo6cHV0SW50ZXJuYWwsIG9iamVjdFN0b3JlLCB2YWx1ZSwga2V5LCBwdXRNb2RlLCBjYWxsYmFj
a3MsIHRyYW5zYWN0aW9uKSwKKyAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwsIG9iamVjdFN0b3JlLCB2YWx1ZSwga2V5
LCBwdXRNb2RlLCBjYWxsYmFja3MsIHRyYW5zYWN0aW9uLCBudWxsSW5kZXhOYW1lcy5yZWxlYXNl
KCksIG51bGxJbmRleEtleXMucmVsZWFzZSgpKSwKKyAgICAgICAgICAgIC8vIEZJWE1FOiBPbmUg
b2YgdGhlc2UgcGVyIHB1dCgpIGlzIG92ZXJraWxsLCBzaW5jZSBpdCdzIHNpbXBseSBhIGNhY2hl
IGludmFsaWRhdGlvbi4KKyAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6cmV2ZXJ0QXV0b0luY3JlbWVudEtleUNhY2hlLCBvYmplY3RTdG9y
ZSkpKQorICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFD
VElWRV9FUlI7Cit9CisKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0V2l0aElu
ZGV4S2V5cyhQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcHJwVmFsdWUsIFBhc3NS
ZWZQdHI8SURCS2V5PiBwcnBLZXksIFB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+IHBycENhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFu
c2FjdGlvblB0ciwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGluZGV4TmFtZXMsIGNvbnN0IFZlY3Rv
cjxJbmRleEtleXM+JiBpbmRleEtleXMsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIElEQl9U
UkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0Iik7CisKKyAgICBBU1NFUlQodHJh
bnNhY3Rpb25QdHItPm1vZGUoKSAhPSBJREJUcmFuc2FjdGlvbjo6UkVBRF9PTkxZKTsKKworICAg
IFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSA9IHRoaXM7Cisg
ICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUgPSBwcnBWYWx1ZTsKKyAgICBS
ZWZQdHI8SURCS2V5PiBrZXkgPSBwcnBLZXk7CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzID0gcHJwQ2FsbGJhY2tzOworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2U+IHRyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb25QdHI7CisKKyAgICBPd25QdHI8VmVj
dG9yPFN0cmluZz4gPiBuZXdJbmRleE5hbWVzID0gYWRvcHRQdHIobmV3IFZlY3RvcjxTdHJpbmc+
KGluZGV4TmFtZXMpKTsKKyAgICBPd25QdHI8VmVjdG9yPEluZGV4S2V5cz4gPiBuZXdJbmRleEtl
eXMgPSBhZG9wdFB0cihuZXcgVmVjdG9yPEluZGV4S2V5cz4oaW5kZXhLZXlzKSk7CisKKyAgICBp
ZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soCisgICAgICAgICAgICBjcmVhdGVDYWxsYmFj
a1Rhc2soJklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsLCBvYmplY3RTdG9y
ZSwgdmFsdWUsIGtleSwgcHV0TW9kZSwgY2FsbGJhY2tzLCB0cmFuc2FjdGlvbiwgbmV3SW5kZXhO
YW1lcy5yZWxlYXNlKCksIG5ld0luZGV4S2V5cy5yZWxlYXNlKCkpLAogICAgICAgICAgICAgLy8g
RklYTUU6IE9uZSBvZiB0aGVzZSBwZXIgcHV0KCkgaXMgb3ZlcmtpbGwsIHNpbmNlIGl0J3Mgc2lt
cGx5IGEgY2FjaGUgaW52YWxpZGF0aW9uLgogICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNr
KCZJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpyZXZlcnRBdXRvSW5jcmVtZW50S2V5Q2FjaGUs
IG9iamVjdFN0b3JlKSkpCiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRSQU5T
QUNUSU9OX0lOQUNUSVZFX0VSUjsKQEAgLTE2OCw3MiArMTkyLDEwMiBAQCB2b2lkIElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OnJldmVydEF1dG9JbmNyZW1lbnRLZXlDYWNoZShTY3JpcHRFeGVj
dXRpb25Db250ZQogbmFtZXNwYWNlIHsKIGNsYXNzIEluZGV4V3JpdGVyIHsKIHB1YmxpYzoKLSAg
ICBleHBsaWNpdCBJbmRleFdyaXRlcihQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGlu
ZGV4KQotICAgICAgICA6IG1faW5kZXgoaW5kZXgpCi0gICAgewotICAgIH0KKyAgICBleHBsaWNp
dCBJbmRleFdyaXRlcihjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhKQorICAg
ICAgICA6IG1faW5kZXhNZXRhZGF0YShpbmRleE1ldGFkYXRhKQorICAgIHsgfQorCisgICAgSW5k
ZXhXcml0ZXIoY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSwKKyAgICAgICAg
ICAgICAgICBjb25zdCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OkluZGV4S2V5cyYg
aW5kZXhLZXlzKQorICAgICAgICA6IG1faW5kZXhNZXRhZGF0YShpbmRleE1ldGFkYXRhKQorICAg
ICAgICAsIG1faW5kZXhLZXlzKGluZGV4S2V5cykKKyAgICB7IH0KIAotICAgIGJvb2wgbG9hZElu
ZGV4S2V5c0ZvclZhbHVlKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogb2JqZWN0VmFsdWUsIGNvbnN0
IElEQktleSogcHJpbWFyeUtleSA9IDAsIFN0cmluZyogZXJyb3JNZXNzYWdlID0gMCkKKyAgICBi
b29sIGdlbmVyYXRlSW5kZXhLZXlzRm9yVmFsdWUoU2VyaWFsaXplZFNjcmlwdFZhbHVlKiBvYmpl
Y3RWYWx1ZSkKICAgICB7CiAgICAgICAgIG1faW5kZXhLZXlzLmNsZWFyKCk7CiAKLSAgICAgICAg
UmVmUHRyPElEQktleT4gaW5kZXhLZXkgPSBmZXRjaEtleUZyb21LZXlQYXRoKG9iamVjdFZhbHVl
LCBtX2luZGV4LT5rZXlQYXRoKCkpOworICAgICAgICBSZWZQdHI8SURCS2V5PiBpbmRleEtleSA9
IGZldGNoS2V5RnJvbUtleVBhdGgob2JqZWN0VmFsdWUsIG1faW5kZXhNZXRhZGF0YS5rZXlQYXRo
KTsKIAogICAgICAgICBpZiAoIWluZGV4S2V5KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAK
LSAgICAgICAgaWYgKCFtX2luZGV4LT5tdWx0aUVudHJ5KCkgfHwgaW5kZXhLZXktPnR5cGUoKSAh
PSBJREJLZXk6OkFycmF5VHlwZSkgeworICAgICAgICBpZiAoIW1faW5kZXhNZXRhZGF0YS5tdWx0
aUVudHJ5IHx8IGluZGV4S2V5LT50eXBlKCkgIT0gSURCS2V5OjpBcnJheVR5cGUpIHsKICAgICAg
ICAgICAgIGlmICghaW5kZXhLZXktPmlzVmFsaWQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKIAotICAgICAgICAgICAgaWYgKCFtX2luZGV4LT5hZGRpbmdLZXlBbGxvd2VkKGluZGV4
S2V5LmdldCgpLCBwcmltYXJ5S2V5KSkgewotICAgICAgICAgICAgICAgIGlmIChlcnJvck1lc3Nh
Z2UpCi0gICAgICAgICAgICAgICAgICAgICplcnJvck1lc3NhZ2UgPSBTdHJpbmc6OmZvcm1hdCgi
VW5hYmxlIHRvIGFkZCBrZXkgdG8gaW5kZXggJyVzJzogdGhlIGtleSBkb2VzIG5vdCBzYXRpc2Z5
IGl0cyB1bmlxdWVuZXNzIHJlcXVpcmVtZW50cy4iLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRleC0+bmFtZSgpLnV0ZjgoKS5kYXRhKCkp
OwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIG1faW5kZXhLZXlzLmFwcGVuZChpbmRleEtleSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBBU1NFUlQobV9pbmRleC0+bXVsdGlFbnRyeSgpKTsKKyAgICAgICAgICAgIEFTU0VS
VChtX2luZGV4TWV0YWRhdGEubXVsdGlFbnRyeSk7CiAgICAgICAgICAgICBBU1NFUlQoaW5kZXhL
ZXktPnR5cGUoKSA9PSBJREJLZXk6OkFycmF5VHlwZSk7CiAgICAgICAgICAgICBpbmRleEtleSA9
IElEQktleTo6Y3JlYXRlTXVsdGlFbnRyeUFycmF5KGluZGV4S2V5LT5hcnJheSgpKTsKIAogICAg
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbmRleEtleS0+YXJyYXkoKS5zaXplKCk7
ICsraSkgewotICAgICAgICAgICAgICAgIGlmICghbV9pbmRleC0+YWRkaW5nS2V5QWxsb3dlZChp
bmRleEtleS0+YXJyYXkoKVtpXS5nZXQoKSwgcHJpbWFyeUtleSkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGVycm9yTWVzc2FnZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICplcnJvck1l
c3NhZ2UgPSBTdHJpbmc6OmZvcm1hdCgiVW5hYmxlIHRvIGFkZCBrZXkgdG8gaW5kZXggJyVzJzog
YXQgbGVhc3Qgb25lIGtleSBkb2VzIG5vdCBzYXRpc2Z5IHRoZSB1bmlxdWVuZXNzIHJlcXVpcmVt
ZW50cy4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1faW5kZXgtPm5hbWUoKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBtX2lu
ZGV4S2V5cy5hcHBlbmQoaW5kZXhLZXktPmFycmF5KClbaV0pOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGJvb2wgd3JpdGVJbmRl
eEtleXMoY29uc3QgSURCQmFja2luZ1N0b3JlOjpPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIq
IHJlY29yZElkZW50aWZpZXIsIElEQkJhY2tpbmdTdG9yZSYgYmFja2luZ1N0b3JlLCBpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgU3RyaW5nKiBlcnJvck1lc3NhZ2Ug
PSAwKQorICAgIGJvb2wgdmVyaWZ5SW5kZXhLZXlzKElEQkJhY2tpbmdTdG9yZSYgYmFja2luZ1N0
b3JlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgSURCS2V5KiBwcmltYXJ5S2V5ID0gMCwgU3RyaW5nKiBlcnJvck1lc3NhZ2UgPSAw
KQorICAgIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2luZGV4S2V5cy5zaXpl
KCk7ICsraSkgeworICAgICAgICAgICAgaWYgKCFhZGRpbmdLZXlBbGxvd2VkKGJhY2tpbmdTdG9y
ZSwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAobV9pbmRleEtleXMpW2ldLmdldCgpLCBwcmltYXJ5S2V5KSkgewor
ICAgICAgICAgICAgICAgIGlmIChlcnJvck1lc3NhZ2UpCisgICAgICAgICAgICAgICAgICAgICpl
cnJvck1lc3NhZ2UgPSBTdHJpbmc6OmZvcm1hdCgiVW5hYmxlIHRvIGFkZCBrZXkgdG8gaW5kZXgg
JyVzJzogYXQgbGVhc3Qgb25lIGtleSBkb2VzIG5vdCBzYXRpc2Z5IHRoZSB1bmlxdWVuZXNzIHJl
cXVpcmVtZW50cy4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbV9pbmRleE1ldGFkYXRhLm5hbWUudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKworICAgIGJvb2wgd3JpdGVJbmRleEtleXMoY29uc3QgSURCQmFj
a2luZ1N0b3JlOjpPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqIHJlY29yZElkZW50aWZpZXIs
IElEQkJhY2tpbmdTdG9yZSYgYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKQogICAgIHsKICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX2luZGV4S2V5cy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAg
aWYgKCFiYWNraW5nU3RvcmUuZGVsZXRlSW5kZXhEYXRhRm9yUmVjb3JkKGRhdGFiYXNlSWQsIG9i
amVjdFN0b3JlSWQsIG1faW5kZXgtPmlkKCksIHJlY29yZElkZW50aWZpZXIpKQorICAgICAgICAg
ICAgaWYgKCFiYWNraW5nU3RvcmUuZGVsZXRlSW5kZXhEYXRhRm9yUmVjb3JkKGRhdGFiYXNlSWQs
IG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIHJlY29yZElkZW50aWZpZXIpKQogICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmICghYmFja2luZ1N0b3JlLnB1dEluZGV4
RGF0YUZvclJlY29yZChkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBtX2luZGV4LT5pZCgpLCAq
bV9pbmRleEtleXNbaV0uZ2V0KCksIHJlY29yZElkZW50aWZpZXIpKQorICAgICAgICAgICAgaWYg
KCFiYWNraW5nU3RvcmUucHV0SW5kZXhEYXRhRm9yUmVjb3JkKGRhdGFiYXNlSWQsIG9iamVjdFN0
b3JlSWQsIGluZGV4SWQsICoobV9pbmRleEtleXMpW2ldLmdldCgpLCByZWNvcmRJZGVudGlmaWVy
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogCisgICAgY29uc3QgU3RyaW5nJiBpbmRleE5hbWUoKSBjb25zdCB7
IHJldHVybiBtX2luZGV4TWV0YWRhdGEubmFtZTsgfQorCiBwcml2YXRlOgotICAgIFJlZlB0cjxJ
REJJbmRleEJhY2tlbmRJbXBsPiBtX2luZGV4OwotICAgIFZlY3RvcjxSZWZQdHI8SURCS2V5PiA+
IG1faW5kZXhLZXlzOworCisgICAgYm9vbCBhZGRpbmdLZXlBbGxvd2VkKElEQkJhY2tpbmdTdG9y
ZSYgYmFja2luZ1N0b3JlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBJREJLZXkqIGluZGV4S2V5LCBjb25zdCBJREJLZXkqIHBy
aW1hcnlLZXkpCisgICAgeworICAgICAgICBpZiAoIW1faW5kZXhNZXRhZGF0YS51bmlxdWUpCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICBSZWZQdHI8SURCS2V5PiBmb3VuZFBy
aW1hcnlLZXk7CisgICAgICAgIGJvb2wgZm91bmQgPSBiYWNraW5nU3RvcmUua2V5RXhpc3RzSW5J
bmRleChkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCAqaW5kZXhLZXksIGZvdW5k
UHJpbWFyeUtleSk7CisgICAgICAgIGlmICghZm91bmQpCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgaWYgKHByaW1hcnlLZXkgJiYgZm91bmRQcmltYXJ5S2V5LT5pc0VxdWFsKHBy
aW1hcnlLZXkpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSBtX2luZGV4TWV0YWRhdGE7Cisg
ICAgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleXMgbV9pbmRleEtleXM7
CiB9OwogfQogCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcHJwVmFs
dWUsIFBhc3NSZWZQdHI8SURCS2V5PiBwcnBLZXksIFB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uKQordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
OjpwdXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2Ny
aXB0VmFsdWU+IHBycFZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4gcHJwS2V5LCBQdXRNb2RlIHB1
dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbiwgUGFzc093blB0cjxWZWN0
b3I8U3RyaW5nPiA+IHBvcEluZGV4TmFtZXMsIFBhc3NPd25QdHI8VmVjdG9yPEluZGV4S2V5cz4g
PiBwb3BJbmRleEtleXMpCiB7CiAgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsOjpwdXRJbnRlcm5hbCIpOwogICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpICE9IElE
QlRyYW5zYWN0aW9uOjpSRUFEX09OTFkpOwogICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+IHZhbHVlID0gcHJwVmFsdWU7CiAgICAgUmVmUHRyPElEQktleT4ga2V5ID0gcHJwS2V5Owor
ICAgIE93blB0cjxWZWN0b3I8U3RyaW5nPiA+IGluZGV4TmFtZXMgPSBwb3BJbmRleE5hbWVzOwor
ICAgIE93blB0cjxWZWN0b3I8SW5kZXhLZXlzPiA+IGluZGV4S2V5cyA9IHBvcEluZGV4S2V5czsK
KyAgICBBU1NFUlQoKCFpbmRleE5hbWVzICYmICFpbmRleEtleXMpIHx8IGluZGV4TmFtZXMtPnNp
emUoKSA9PSBpbmRleEtleXMtPnNpemUoKSk7CiAKICAgICBpZiAocHV0TW9kZSAhPSBDdXJzb3JV
cGRhdGUpIHsKICAgICAgICAgY29uc3QgYm9vbCBhdXRvSW5jcmVtZW50ID0gb2JqZWN0U3RvcmUt
PmF1dG9JbmNyZW1lbnQoKTsKQEAgLTI1MSw2ICszMDUsNyBAQCB2b2lkIElEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6OnB1dEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVm
UHRyPAogICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VF
cnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUiwgIk1heGltdW0ga2V5
IGdlbmVyYXRvciB2YWx1ZSByZWFjaGVkLiIpKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogcmVtb3ZlIHRo
aXMgd2hlbiBnZXQtc2lkZSBrZXkgaW5qZWN0aW9uIGlzIHRoZSBub3JtLgogICAgICAgICAgICAg
ICAgIGlmIChoYXNLZXlQYXRoKSB7CiAgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxTZXJpYWxp
emVkU2NyaXB0VmFsdWU+IHZhbHVlQWZ0ZXJJbmplY3Rpb24gPSBpbmplY3RLZXlJbnRvS2V5UGF0
aChhdXRvSW5jS2V5LCB2YWx1ZSwgb2JqZWN0U3RvcmUtPm1fa2V5UGF0aCk7CiAgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVCh2YWx1ZUFmdGVySW5qZWN0aW9uKTsKQEAgLTI4MCwxNSArMzM1LDMw
IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8CiAgICAgfQogCiAgICAgVmVjdG9yPE93blB0cjxJ
bmRleFdyaXRlcj4gPiBpbmRleFdyaXRlcnM7CisgICAgSGFzaE1hcDxTdHJpbmcsIEluZGV4S2V5
cz4gaW5kZXhLZXlNYXA7CisgICAgaWYgKGluZGV4S2V5cykgeworICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGluZGV4TmFtZXMtPnNpemUoKTsgaSsrKQorICAgICAgICAgICAgaW5kZXhL
ZXlNYXAuYWRkKGluZGV4TmFtZXMtPmF0KGkpLCBpbmRleEtleXMtPmF0KGkpKTsKKyAgICB9CisK
ICAgICBmb3IgKEluZGV4TWFwOjppdGVyYXRvciBpdCA9IG9iamVjdFN0b3JlLT5tX2luZGV4ZXMu
YmVnaW4oKTsgaXQgIT0gb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5lbmQoKTsgKytpdCkgewogCiAg
ICAgICAgIGNvbnN0IFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiYgaW5kZXggPSBpdC0+c2Vj
b25kOwogICAgICAgICBpZiAoIWluZGV4LT5oYXNWYWxpZElkKCkpCiAgICAgICAgICAgICBjb250
aW51ZTsgLy8gVGhlIGluZGV4IG9iamVjdCBoYXMgYmVlbiBjcmVhdGVkLCBidXQgZG9lcyBub3Qg
ZXhpc3QgaW4gdGhlIGRhdGFiYXNlIHlldC4KIAotICAgICAgICBPd25QdHI8SW5kZXhXcml0ZXI+
IGluZGV4V3JpdGVyKGFkb3B0UHRyKG5ldyBJbmRleFdyaXRlcihpbmRleCkpKTsKKyAgICAgICAg
T3duUHRyPEluZGV4V3JpdGVyPiBpbmRleFdyaXRlcjsKKyAgICAgICAgaWYgKGluZGV4S2V5cykK
KyAgICAgICAgICAgIGluZGV4V3JpdGVyID0gYWRvcHRQdHIobmV3IEluZGV4V3JpdGVyKGluZGV4
LT5tZXRhZGF0YSgpLCBpbmRleEtleU1hcC5nZXQoaXQtPmZpcnN0KSkpOworICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgIGluZGV4V3JpdGVyID0gYWRvcHRQdHIobmV3IEluZGV4V3JpdGVyKGlu
ZGV4LT5tZXRhZGF0YSgpKSk7CisgICAgICAgICAgICBpbmRleFdyaXRlci0+Z2VuZXJhdGVJbmRl
eEtleXNGb3JWYWx1ZSh2YWx1ZS5nZXQoKSk7CisgICAgICAgIH0KICAgICAgICAgU3RyaW5nIGVy
cm9yTWVzc2FnZTsKLSAgICAgICAgaWYgKCFpbmRleFdyaXRlci0+bG9hZEluZGV4S2V5c0ZvclZh
bHVlKHZhbHVlLmdldCgpLCBrZXkuZ2V0KCksICZlcnJvck1lc3NhZ2UpKSB7CisgICAgICAgIGlm
ICghaW5kZXhXcml0ZXItPnZlcmlmeUluZGV4S2V5cygqb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9y
ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0U3Rv
cmUtPmRhdGFiYXNlSWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG9iamVjdFN0b3JlLT5pZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW5kZXgtPmlkKCksIGtleS5nZXQoKSwgJmVycm9yTWVzc2FnZSkpIHsKICAgICAg
ICAgICAgIG9iamVjdFN0b3JlLT5yZXNldEF1dG9JbmNyZW1lbnRLZXlDYWNoZSgpOwogICAgICAg
ICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6REFUQV9FUlIsIGVycm9yTWVzc2FnZSkpOwogICAgICAgICAgICAgcmV0
dXJuOwpAQCAtMzA2LDkgKzM3NiwxMyBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6
OnB1dEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPAogICAgIH0K
IAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5kZXhXcml0ZXJzLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgIGlmICghaW5kZXhXcml0ZXJzW2ldLT53cml0ZUluZGV4S2V5cyhyZWNvcmRJZGVu
dGlmaWVyLmdldCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKm9iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKSwgb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQo
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdFN0
b3JlLT5tX2lkKSkgeworICAgICAgICBJbmRleFdyaXRlciogaW5kZXhXcml0ZXIgPSBpbmRleFdy
aXRlcnNbaV0uZ2V0KCk7CisgICAgICAgIGlmICghaW5kZXhXcml0ZXItPndyaXRlSW5kZXhLZXlz
KHJlY29yZElkZW50aWZpZXIuZ2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICpvYmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdFN0b3JlLT5tX2lkLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RTdG9yZS0+bV9p
bmRleGVzLmdldChpbmRleFdyaXRlci0+aW5kZXhOYW1lKCkpLT5pZCgpKSkgeworCiAgICAgICAg
ICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpVTktOT1dOX0VSUiwgIkVycm9yIHdyaXRpbmcgZGF0YSB0byBzdGFibGUg
c3RvcmFnZS4iKSk7CiAgICAgICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoKTsKICAgICAgICAg
ICAgIHJldHVybjsKQEAgLTM4MywzMyArNDU3LDM2IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6Y2xlYXJJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0
CiBuYW1lc3BhY2UgewogY2xhc3MgUG9wdWxhdGVJbmRleENhbGxiYWNrIDogcHVibGljIElEQkJh
Y2tpbmdTdG9yZTo6T2JqZWN0U3RvcmVSZWNvcmRDYWxsYmFjayB7CiBwdWJsaWM6Ci0gICAgUG9w
dWxhdGVJbmRleENhbGxiYWNrKElEQkJhY2tpbmdTdG9yZSYgYmFja2luZ1N0b3JlLCBpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJJbmRleEJh
Y2tlbmRJbXBsPiBpbmRleCkKKyAgICBQb3B1bGF0ZUluZGV4Q2FsbGJhY2soSURCQmFja2luZ1N0
b3JlJiBiYWNraW5nU3RvcmUsIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRhdGEs
IGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4
SWQpCiAgICAgICAgIDogbV9iYWNraW5nU3RvcmUoYmFja2luZ1N0b3JlKQogICAgICAgICAsIG1f
ZGF0YWJhc2VJZChkYXRhYmFzZUlkKQogICAgICAgICAsIG1fb2JqZWN0U3RvcmVJZChvYmplY3RT
dG9yZUlkKQotICAgICAgICAsIG1fd3JpdGVyKGluZGV4KQorICAgICAgICAsIG1faW5kZXhJZChp
bmRleElkKQorICAgICAgICAsIG1fd3JpdGVyKGluZGV4TWV0YWRhdGEpCiAgICAgewogICAgIH0K
IAogICAgIHZpcnR1YWwgYm9vbCBjYWxsYmFjayhjb25zdCBJREJCYWNraW5nU3RvcmU6Ok9iamVj
dFN0b3JlUmVjb3JkSWRlbnRpZmllciogcmVjb3JkSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiB2
YWx1ZSkKICAgICB7CiAgICAgICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG9iamVj
dFZhbHVlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9tV2lyZSh2YWx1ZSk7Ci0g
ICAgICAgIGlmICghbV93cml0ZXIubG9hZEluZGV4S2V5c0ZvclZhbHVlKG9iamVjdFZhbHVlLmdl
dCgpKSkKKyAgICAgICAgbV93cml0ZXIuZ2VuZXJhdGVJbmRleEtleXNGb3JWYWx1ZShvYmplY3RW
YWx1ZS5nZXQoKSk7CisgICAgICAgIGlmICghbV93cml0ZXIudmVyaWZ5SW5kZXhLZXlzKG1fYmFj
a2luZ1N0b3JlLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRleElkKSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIG1fd3JpdGVyLndyaXRlSW5k
ZXhLZXlzKHJlY29yZElkZW50aWZpZXIsIG1fYmFja2luZ1N0b3JlLCBtX2RhdGFiYXNlSWQsIG1f
b2JqZWN0U3RvcmVJZCk7CisgICAgICAgIHJldHVybiBtX3dyaXRlci53cml0ZUluZGV4S2V5cyhy
ZWNvcmRJZGVudGlmaWVyLCBtX2JhY2tpbmdTdG9yZSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0
b3JlSWQsIG1faW5kZXhJZCk7CiAgICAgfQogCiBwcml2YXRlOgogICAgIElEQkJhY2tpbmdTdG9y
ZSYgbV9iYWNraW5nU3RvcmU7CiAgICAgaW50NjRfdCBtX2RhdGFiYXNlSWQ7CiAgICAgaW50NjRf
dCBtX29iamVjdFN0b3JlSWQ7CisgICAgaW50NjRfdCBtX2luZGV4SWQ7CiAgICAgSW5kZXhXcml0
ZXIgbV93cml0ZXI7CiB9OwogfQogCiBib29sIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnBv
cHVsYXRlSW5kZXgoSURCQmFja2luZ1N0b3JlJiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZElt
cGw+IGluZGV4KQogewotICAgIFBvcHVsYXRlSW5kZXhDYWxsYmFjayBjYWxsYmFjayhiYWNraW5n
U3RvcmUsIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4KTsKKyAgICBQb3B1bGF0ZUlu
ZGV4Q2FsbGJhY2sgY2FsbGJhY2soYmFja2luZ1N0b3JlLCBpbmRleC0+bWV0YWRhdGEoKSwgZGF0
YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXgtPmlkKCkpOwogICAgIGlmICghYmFja2luZ1N0
b3JlLmZvckVhY2hPYmplY3RTdG9yZVJlY29yZChkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBj
YWxsYmFjaykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0
b3JlQmFja2VuZEltcGwuaAppbmRleCAxZTM5ZGRhYzMwNTFiYTBjZGE5ZThkNWI5MTBjMTQ2Njc0
ZjRiOWU5Li4xYzc0NWI1OTNkZmI0MDdkYzM1MGUyMjllY2YxMzBiMGM1MzY2N2E2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbC5oCkBAIC02Nyw2ICs2Nyw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1
YWwgdm9pZCBnZXQoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwog
ICAgIHZpcnR1YWwgdm9pZCBwdXQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQ
YXNzUmVmUHRyPElEQktleT4sIFB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZpcnR1
YWwgdm9pZCBwdXRXaXRoSW5kZXhLZXlzKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiwgUGFzc1JlZlB0cjxJREJLZXk+LCBQdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4s
IElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIGNvbnN0IFZlY3RvcjxTdHJpbmc+Jiwg
Y29uc3QgVmVjdG9yPEluZGV4S2V5cz4mLCBFeGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2
b2lkIGRlbGV0ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNv
ZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJik7CiAKQEAgLTky
LDcgKzkzLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlc2V0QXV0b0luY3JlbWVudEtleUNhY2hl
KCkgeyBtX2F1dG9JbmNyZW1lbnROdW1iZXIgPSAtMTsgfQogCiAgICAgc3RhdGljIHZvaWQgZ2V0
SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4pOwotICAgIHN0YXRpYyB2b2lkIHB1dEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NSZWZQdHI8SURCS2V5PiwgUHV0TW9kZSwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZT4pOworICAgIHN0YXRpYyB2b2lkIHB1dEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NSZWZQdHI8SURCS2V5PiwgUHV0TW9kZSwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZT4sIFBhc3NPd25QdHI8VmVjdG9yPFN0cmluZz4gPiBwb3BJbmRleE5hbWVzLCBQYXNz
T3duUHRyPFZlY3RvcjxJbmRleEtleXM+ID4pOwogICAgIHN0YXRpYyB2b2lkIGRlbGV0ZUludGVy
bmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+KTsKICAgICBzdGF0aWMgdm9pZCBjbGVhckludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4pOwogICAgIHN0YXRpYyB2b2lkIGNyZWF0ZUluZGV4SW50ZXJuYWwoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4s
IFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlPik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UuaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZS5oCmlu
ZGV4IDA3ZjlmNzI2MGIyYWFiYWRhNDZkYjM2MDFhYTA0ZGIwN2Q5Mzc3N2QuLjM3ZDNlZTBmOTQz
MGRjNTA3YjA5NGUzNDBmODljMzllNGEwZDZkMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZElu
dGVyZmFjZS5oCkBAIC01NSw3ICs1NSwxMCBAQCBwdWJsaWM6CiAgICAgICAgIEFkZE9ubHksCiAg
ICAgICAgIEN1cnNvclVwZGF0ZQogICAgIH07CisgICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPElE
QktleT4gPiBJbmRleEtleXM7CisKICAgICB2aXJ0dWFsIHZvaWQgcHV0KFBhc3NSZWZQdHI8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxJREJLZXk+LCBQdXRNb2RlLCBQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2Vw
dGlvbkNvZGUmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHB1dFdpdGhJbmRleEtleXMoUGFzc1Jl
ZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQktleT4sIFB1dE1vZGUs
IFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
KiwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYsIEV4Y2Vw
dGlvbkNvZGUmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUZ1bmN0aW9uKFBhc3NSZWZQ
dHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CiAKICAgICB2aXJ0dWFsIHZv
aWQgY2xlYXIoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcAppbmRleCAwODg1Y2FjMWVkM2NlOGE4ZDNjZjQ2
YmQxMGUwYTc1MWZlOGRiZWY1Li5kYmI2ZGI3NGEzMDEwNGJkMzdiM2VjNzk3ZjNjNGYyNzkwYmIz
ZDIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1
ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0
LmNwcApAQCAtMzEzLDYgKzMxMyw3IEBAIHZvaWQgSURCUmVxdWVzdDo6b25TdWNjZXNzKFBhc3NS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBwcnBTZXJpYWxpemVkU2NyaXB0CiAgICAgUmVm
UHRyPElEQktleT4gcHJpbWFyeUtleSA9IHBycFByaW1hcnlLZXk7CiAgICAgUmVmUHRyPElEQktl
eT4gZXhwZWN0ZWRLZXkgPQogICAgICAgICAgICAgICBjcmVhdGVJREJLZXlGcm9tU2VyaWFsaXpl
ZFZhbHVlQW5kS2V5UGF0aChzZXJpYWxpemVkU2NyaXB0VmFsdWUsIGtleVBhdGgpOworICAgIEFT
U0VSVChwcmltYXJ5S2V5KTsKICAgICBBU1NFUlQoZXhwZWN0ZWRLZXktPmlzRXF1YWwocHJpbWFy
eUtleS5nZXQoKSkpOwogI2VuZGlmCiAgICAgb25TdWNjZXNzKHNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZS5yZWxlYXNlKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViSURCT2JqZWN0U3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklE
Qk9iamVjdFN0b3JlLmgKaW5kZXggZWMxNTNhNzE5OWRkNjExNmNkNjY2ZTFlMTVkMmQyMGM5ZGNl
NTVmNi4uOThjNDUxM2UyMTY0NzdiMDc1MzJhZDljMGU0YzgxMGU5NDIyN2I1NCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSURCT2JqZWN0U3RvcmUuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJPYmplY3RTdG9yZS5oCkBAIC01
MSw3ICs1MSwxMCBAQCBwdWJsaWM6CiAgICAgICAgIEN1cnNvclVwZGF0ZQogICAgIH07CiAKKyAg
ICB0eXBlZGVmIFdlYlZlY3RvcjxXZWJJREJLZXk+IFdlYkluZGV4S2V5czsKKwogICAgIHZpcnR1
YWwgdm9pZCBwdXQoY29uc3QgV2ViU2VyaWFsaXplZFNjcmlwdFZhbHVlJiwgY29uc3QgV2ViSURC
S2V5JiwgUHV0TW9kZSwgV2ViSURCQ2FsbGJhY2tzKiwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24m
LCBXZWJFeGNlcHRpb25Db2RlJikgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgcHV0V2l0aEluZGV4S2V5cyhjb25zdCBXZWJTZXJpYWxpemVkU2NyaXB0
VmFsdWUmLCBjb25zdCBXZWJJREJLZXkmLCBQdXRNb2RlLCBXZWJJREJDYWxsYmFja3MqLCBjb25z
dCBXZWJJREJUcmFuc2FjdGlvbiYsIGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiwgY29uc3Qg
V2ViVmVjdG9yPFdlYkluZGV4S2V5cz4mLCBXZWJFeGNlcHRpb25Db2RlJikgeyBXRUJLSVRfQVNT
RVJUX05PVF9SRUFDSEVEKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRnVuY3Rpb24oY29u
c3QgV2ViSURCS2V5UmFuZ2UmLCBXZWJJREJDYWxsYmFja3MqLCBjb25zdCBXZWJJREJUcmFuc2Fj
dGlvbiYsIFdlYkV4Y2VwdGlvbkNvZGUmKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsg
fQogICAgIHZpcnR1YWwgdm9pZCBjbGVhcihXZWJJREJDYWxsYmFja3MqLCBjb25zdCBXZWJJREJU
cmFuc2FjdGlvbiYsIFdlYkV4Y2VwdGlvbkNvZGUmKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsgfQogICAgIHZpcnR1YWwgV2ViSURCSW5kZXgqIGNyZWF0ZUluZGV4KGNvbnN0IFdlYlN0
cmluZyYsIGNvbnN0IFdlYklEQktleVBhdGgmLCBib29sLCBib29sLCBjb25zdCBXZWJJREJUcmFu
c2FjdGlvbiYsIFdlYkV4Y2VwdGlvbkNvZGUmKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHkuY3BwIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHkuY3BwCmluZGV4IDQyZjgw
OGM4NWI0NmFlNmFkOWU4OTM4MDIyNGMxNWE2MjZlNDUyMWQuLjgyNjQwNzMzMGEwMjdhMTZkYjdm
YjFjM2RjZDBlZmRjMWY0YjM1MTcgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL0lEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9JREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eS5jcHAKQEAgLTc1LDYgKzc1LDE2
IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHk6OnB1dChQYXNzUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIFBhCiAgICAgbV93ZWJJREJPYmplY3RTdG9yZS0+cHV0
KHZhbHVlLCBrZXksIHN0YXRpY19jYXN0PFdlYklEQk9iamVjdFN0b3JlOjpQdXRNb2RlPihwdXRN
b2RlKSwgbmV3IFdlYklEQkNhbGxiYWNrc0ltcGwoY2FsbGJhY2tzKSwgKnRyYW5zYWN0aW9uUHJv
eHktPmdldFdlYklEQlRyYW5zYWN0aW9uKCksIGVjKTsKIH0KIAordm9pZCBJREJPYmplY3RTdG9y
ZUJhY2tlbmRQcm94eTo6cHV0V2l0aEluZGV4S2V5cyhQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4gdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFB1dE1vZGUgcHV0TW9kZSwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGluZGV4TmFtZXMs
IGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiBpbmRleEtleXMsIEV4Y2VwdGlvbkNvZGUmIGVjKQor
eworICAgIC8vIFRoZSB0cmFuc2FjdGlvbiBwb2ludGVyIGlzIGd1YXJhbnRlZWQgdG8gYmUgYSBw
b2ludGVyIHRvIGEgcHJveHkgb2JqZWN0IGFzLCBpbiB0aGUgcmVuZGVyZXIsCisgICAgLy8gYWxs
IGltcGxlbWVudGF0aW9ucyBvZiBJREIgaW50ZXJmYWNlcyBhcmUgcHJveHkgb2JqZWN0cy4KKyAg
ICBJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eSogdHJhbnNhY3Rpb25Qcm94eSA9IHN0YXRpY19j
YXN0PElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5Kj4odHJhbnNhY3Rpb24pOworICAgIFdlYlZl
Y3RvcjxXZWJTdHJpbmc+IHdlYkluZGV4TmFtZXMoaW5kZXhOYW1lcyk7CisgICAgV2ViVmVjdG9y
PEluZGV4S2V5cz4gd2ViSW5kZXhLZXlzKGluZGV4S2V5cyk7CisgICAgbV93ZWJJREJPYmplY3RT
dG9yZS0+cHV0V2l0aEluZGV4S2V5cyh2YWx1ZSwga2V5LCBzdGF0aWNfY2FzdDxXZWJJREJPYmpl
Y3RTdG9yZTo6UHV0TW9kZT4ocHV0TW9kZSksIG5ldyBXZWJJREJDYWxsYmFja3NJbXBsKGNhbGxi
YWNrcyksICp0cmFuc2FjdGlvblByb3h5LT5nZXRXZWJJREJUcmFuc2FjdGlvbigpLCB3ZWJJbmRl
eE5hbWVzLCB3ZWJJbmRleEtleXMsIGVjKTsKK30KKwogdm9pZCBJREJPYmplY3RTdG9yZUJhY2tl
bmRQcm94eTo6ZGVsZXRlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2Us
IFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIC8vIFRo
ZSB0cmFuc2FjdGlvbiBwb2ludGVyIGlzIGd1YXJhbnRlZWQgdG8gYmUgYSBwb2ludGVyIHRvIGEg
cHJveHkgb2JqZWN0IGFzLCBpbiB0aGUgcmVuZGVyZXIsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9JREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eS5oIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHkuaAppbmRleCBjNjY2
YzlmYzc5ODJjYmFiNzNjNmI0Yjc4N2Y5N2MxYzljNDA0MDFiLi5jNjQwMjhjZmZiNjBmMmQ4YTI0
NGE3MTVjNzNjMGI3NjVhZWVmNDRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9JREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL0lEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5LmgKQEAgLTQ1LDYgKzQ1LDcgQEAg
cHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGdldChQYXNzUmVmUHRyPFdlYkNvcmU6OklEQktl
eVJhbmdlPiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJDYWxsYmFja3M+LCBXZWJDb3JlOjpJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBXZWJDb3JlOjpFeGNlcHRpb25Db2RlJik7CiAg
ICAgdmlydHVhbCB2b2lkIHB1dChQYXNzUmVmUHRyPFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4sIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCS2V5PiwgUHV0TW9kZSwgUGFzc1JlZlB0cjxX
ZWJDb3JlOjpJREJDYWxsYmFja3M+LCBXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2UqLCBXZWJDb3JlOjpFeGNlcHRpb25Db2RlJik7CisgICAgdmlydHVhbCB2b2lkIHB1dFdp
dGhJbmRleEtleXMoUGFzc1JlZlB0cjxXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQ
YXNzUmVmUHRyPFdlYkNvcmU6OklEQktleT4sIFB1dE1vZGUsIFBhc3NSZWZQdHI8V2ViQ29yZTo6
SURCQ2FsbGJhY2tzPiwgV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwg
Y29uc3QgV1RGOjpWZWN0b3I8V1RGOjpTdHJpbmc+JiwgY29uc3QgV1RGOjpWZWN0b3I8SW5kZXhL
ZXlzPiYsIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRl
RnVuY3Rpb24oUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8V2Vi
Q29yZTo6SURCQ2FsbGJhY2tzPiwgV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlKiwgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBjbGVhcihQ
YXNzUmVmUHRyPFdlYkNvcmU6OklEQkNhbGxiYWNrcz4sIFdlYkNvcmU6OklEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZSosIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUmKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151824</attachid>
            <date>2012-07-11 17:37:18 -0700</date>
            <delta_ts>2012-07-12 12:20:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90923-20120711173717.patch</filename>
            <type>text/plain</type>
            <size>31040</size>
            <attacher name="Alec Flett">alecflett</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyMzA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTFjMmYxMjk1NTE2ZDNi
ZjZmMmEyMjk3NzczNThlZjMxMGEyZGNhMi4uNjA5ZjBlODhjOGY5OTY5ZWNjYmY2YjdhNDMxZWM2
NzMxMTQ0OTNlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDEyLTA3LTEwICBBbGVj
IEZsZXR0ICA8YWxlY2ZsZXR0QGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IElu
dHJvZHVjZSBwdXRXaXRoSW5kZXhLZXlzIGFuZCBjYWxjdWxhdGUgdGhlbSBpbiB0aGUgcmVuZGVy
ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwOTIz
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVmYWN0
b3IgSW5kZXhXcml0ZXIgdG8gZGVwZW5kIG9ubHkgb24gSURCSW5kZXhNZXRhZGF0YSBhbmQgb24K
KyAgICAgICAgKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQpIHNvIHRoYXQgaXQg
Y2FuIHRhbGsgZGlyZWN0bHkKKyAgICAgICAgdG8gdGhlIGJhY2tpbmcgc3RvcmUsIGFuZCBhbHNv
IGV2ZW50dWFsbHkgYmUgbW92ZWQgaW50byB0aGUgcmVuZGVyZXIuCisKKyAgICAgICAgVGhpcyBh
bHNvIGludHJvZHVjZXMgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpwdXRXaXRoSW5k
ZXhLZXlzCisgICAgICAgIGFzIGEgcmVwbGFjZW1lbnQgZm9yIElEQk9iamVjdFN0b3JlQmFja2Vu
ZEludGVyZmFjZTo6cHV0LCBhbHJlYWR5CisgICAgICAgIHN0dWJiZWQgb3V0IGluIHRoZSBjaHJv
bWl1bSBwb3J0LiBJdCB3aWxsIGZ1bGx5IHJlcGxhY2UgcHV0KCkKKyAgICAgICAgYWZ0ZXIgYm90
aCBjaHJvbWl1bSBhbmQgd2Via2l0IHNpZGVzIGhhdmUgcmVhY2hlZCBhbGlnbm1lbnQuCisKKyAg
ICAgICAgTm8gbmV3IHRlc3RzIGFzIHRoaXMgaXMganVzdCBhIHJlZmFjdG9yIGFuZCBleGlzdGlu
ZyB0ZXN0cyBjb3ZlcgorICAgICAgICBjb3JyZWN0bmVzcy4KKworICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL0lEQkN1cnNvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OnNl
dFZhbHVlUmVhZHkpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2Vu
ZEltcGwuY3BwOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZElt
cGwuaDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6cHV0KToKKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oOgorICAgICAgICAoSURCT2JqZWN0U3RvcmUpOgor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0KToKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6cHV0V2l0aEluZGV4S2V5cyk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpwb3B1bGF0ZUluZGV4KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4
ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmg6CisgICAgICAgIChJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9y
ZUJhY2tlbmRJbnRlcmZhY2UuaDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1
ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6Om9uU3VjY2Vzcyk6CisKIDIw
MTItMDctMTEgIEtlbm5ldGggUnVzc2VsbCAgPGtickBnb29nbGUuY29tPgogCiAgICAgICAgIGNv
bXBvc2l0aW5nL3dlYmdsL3dlYmdsLW5vbnByZW11bHRpcGxpZWQtYmxlbmQuaHRtbCBpcyBmbGFr
eSBvbiBMaW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGNlY2FkMDgxNzhmNjZiODRi
NmU3YjM4NGM4ZTdjNzYzODMyNTc2NDguLjk3NmFkZDVhOTU2ODk4ODlmNGYyYzk3OWFiNWExNTQ5
OTBkMGNhM2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIw
MTItMDctMTAgIEFsZWMgRmxldHQgIDxhbGVjZmxldHRAY2hyb21pdW0ub3JnPgorCisgICAgICAg
IEluZGV4ZWREQjogSW50cm9kdWNlIHB1dFdpdGhJbmRleEtleXMgYW5kIGNhbGN1bGF0ZSB0aGVt
IGluIHRoZSByZW5kZXJlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9OTA5MjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBTdHViIG91dCBpbXBsZW1lbnRhdGlvbnMgb2YgcHV0V2l0aEluZGV4S2V5cygpLCBh
bHJlYWR5IGltcGxlbWVudGVkCisgICAgICAgIG9uIHRoZSBjaHJvbWl1bSBzaWRlLgorCisgICAg
ICAgICogcHVibGljL1dlYklEQk9iamVjdFN0b3JlLmg6CisgICAgICAgIChXZWJLaXQ6OldlYklE
Qk9iamVjdFN0b3JlOjpwdXRXaXRoSW5kZXhLZXlzKToKKyAgICAgICAgKiBzcmMvSURCT2JqZWN0
U3RvcmVCYWNrZW5kUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpJREJPYmplY3RTdG9yZUJh
Y2tlbmRQcm94eTo6cHV0V2l0aEluZGV4S2V5cyk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAg
ICAqIHNyYy9JREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eS5oOgorICAgICAgICAoSURCT2JqZWN0
U3RvcmVCYWNrZW5kUHJveHkpOgorCiAyMDEyLTA3LTEwICBIYXlhdG8gSXRvICA8aGF5YXRvQGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkIGdhcmRlbmluZy4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwCmluZGV4IDVlOTAyNTExMmVl
NmJiOWNkOTg4MDU5NWEyOTBlNjI5M2VjYjdhMjkuLjZlMjg2OTFhZjBiNzcxNmM5MDY1NmM4NmI1
Yzg4NzA0NWM3YjU3ZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkN1cnNvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCQ3Vyc29yLmNwcApAQCAtMjc2LDYgKzI3Niw3IEBAIHZvaWQgSURCQ3Vyc29yOjpzZXRWYWx1
ZVJlYWR5KCkKICAgICAgICAgaWYgKG9iamVjdFN0b3JlLT5hdXRvSW5jcmVtZW50KCkgJiYgIW9i
amVjdFN0b3JlLT5tZXRhZGF0YSgpLmtleVBhdGguaXNOdWxsKCkpIHsKICAgICAgICAgICAgIGNv
bnN0IElEQktleVBhdGgmIGtleVBhdGggPSBvYmplY3RTdG9yZS0+bWV0YWRhdGEoKS5rZXlQYXRo
OwogICAgICAgICAgICAgUmVmUHRyPElEQktleT4gZXhwZWN0ZWRLZXkgPSBjcmVhdGVJREJLZXlG
cm9tU2VyaWFsaXplZFZhbHVlQW5kS2V5UGF0aCh2YWx1ZSwga2V5UGF0aCk7CisgICAgICAgICAg
ICBBU1NFUlQobV9jdXJyZW50UHJpbWFyeUtleSk7CiAgICAgICAgICAgICBBU1NFUlQoZXhwZWN0
ZWRLZXktPmlzRXF1YWwobV9jdXJyZW50UHJpbWFyeUtleS5nZXQoKSkpOwogICAgICAgICB9CiAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5k
ZXhCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJ
bmRleEJhY2tlbmRJbXBsLmNwcAppbmRleCBhMDg3ZTZhYWYyZjUyNDIzNWY4NTA3YTZlZjQ4ZTVi
MmVjN2Q5ZWU3Li5hZmRiN2VjM2M2ZDQ1ZWQ3M2ZmNzU3MTVkNjQ1YjJhZmI0NzBhZjNiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJ
bXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJh
Y2tlbmRJbXBsLmNwcApAQCAtMjE5LDIwICsyMTksNiBAQCB2b2lkIElEQkluZGV4QmFja2VuZElt
cGw6OmdldEtleShQYXNzUmVmUHRyPElEQktleVJhbmdlPiBwcnBLZXlSYW5nZSwgUGFzc1JlZlB0
cgogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElW
RV9FUlI7CiB9CiAKLWJvb2wgSURCSW5kZXhCYWNrZW5kSW1wbDo6YWRkaW5nS2V5QWxsb3dlZChj
b25zdCBJREJLZXkqIGluZGV4S2V5LCBjb25zdCBJREJLZXkqIHByaW1hcnlLZXkpCi17Ci0gICAg
aWYgKCFtX3VuaXF1ZSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBSZWZQdHI8SURCS2V5
PiBmb3VuZFByaW1hcnlLZXk7Ci0gICAgYm9vbCBmb3VuZCA9IGJhY2tpbmdTdG9yZSgpLT5rZXlF
eGlzdHNJbkluZGV4KGRhdGFiYXNlSWQoKSwgbV9vYmplY3RTdG9yZUJhY2tlbmQtPmlkKCksIG1f
aWQsICppbmRleEtleSwgZm91bmRQcmltYXJ5S2V5KTsKLSAgICBpZiAoIWZvdW5kKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAocHJpbWFyeUtleSAmJiBmb3VuZFByaW1hcnlLZXktPmlz
RXF1YWwocHJpbWFyeUtleSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJJbmRleEJhY2tlbmRJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJJbmRleEJhY2tlbmRJbXBsLmgKaW5kZXggOTgzODUxMjhmMjhiYWNhNTQ1MzY5MTEzZmFk
NjkyMTBjMjM1MDFmYi4uZjg0MWE5NTgzNzI0NGMyZmQwODI4ODA0YTY5MDEzNDRkODVhNTI1YyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNr
ZW5kSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4
QmFja2VuZEltcGwuaApAQCAtNjEsOCArNjEsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRJZChp
bnQ2NF90IGlkKSB7IG1faWQgPSBpZDsgfQogICAgIGJvb2wgaGFzVmFsaWRJZCgpIGNvbnN0IHsg
cmV0dXJuIG1faWQgIT0gSW52YWxpZElkOyB9OwogCi0gICAgYm9vbCBhZGRpbmdLZXlBbGxvd2Vk
KGNvbnN0IElEQktleSogaW5kZXhLZXksIGNvbnN0IElEQktleSogcHJpbWFyeUtleSA9IDApOwot
CiAgICAgLy8gSW1wbGVtZW50cyBJREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuCiAgICAgdmlydHVh
bCBJREJJbmRleE1ldGFkYXRhIG1ldGFkYXRhKCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAppbmRleCA2NWYyMjJi
Zjg1NjVlNmIzMDFmYWE0NTVkYTdkOGIxZjBmMzI3MjQwLi5lYzY2Mzc1ZDUxNGY3YTlmMjg4Mjkw
ZDAwNTk4YzliMzk3MmUwZDMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCkBAIC00NTUsNyArNDU1LDYgQEAgdm9pZCBJREJP
YmplY3RTdG9yZTo6dHJhbnNhY3Rpb25GaW5pc2hlZCgpCiAgICAgbV9pbmRleE1hcC5jbGVhcigp
OwogfQogCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCT2JqZWN0U3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
Qk9iamVjdFN0b3JlLmgKaW5kZXggNjdiMzZmOTk1NTE3YTliODRkMmExYzIyNTI0OTU4ZmNkYWE0
ODRjZS4uZWY3YzA2M2I4ZjgyMjY0MTdhN2JmZjhmMmZlMTM2OTgyNDNiODUzNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oCkBAIC0x
MDIsNiArMTAyLDkgQEAgcHVibGljOgogICAgIElEQk9iamVjdFN0b3JlTWV0YWRhdGEgbWV0YWRh
dGEoKSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhOyB9CiAgICAgdm9pZCBzZXRNZXRhZGF0YShj
b25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBtZXRhZGF0YSkgeyBtX21ldGFkYXRhID0gbWV0
YWRhdGE7IH0KIAorICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxJREJLZXk+ID4gSW5kZXhLZXlz
OworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIEluZGV4S2V5cz4gSW5kZXhLZXlNYXA7CisK
IHByaXZhdGU6CiAgICAgSURCT2JqZWN0U3RvcmUoY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0
YSYsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiwgSURCVHJhbnNh
Y3Rpb24qKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcAppbmRleCA0NzRjZGViNWI1YTJj
ODg0MWExZmNhZGY5OGZmNjIzMjJmZGYwNGRjLi5lOTRhMmQzYTJkM2FmMmY3ZWQ1YjFjODY3ODhk
MjNhY2NkZDQ2ZTk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcApAQCAtMTQxLDkgKzE0
MSwxMSBAQCBzdGF0aWMgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGluamVjdEtl
eUludG9LZXlQYXRoKFBhc3NSZWZQdHI8SURCS2V5PgogICAgIHJldHVybiBJREJLZXlQYXRoQmFj
a2VuZEltcGw6OmluamVjdElEQktleUludG9TZXJpYWxpemVkVmFsdWUoa2V5LCB2YWx1ZSwga2V5
UGF0aCk7CiB9CiAKKy8vIEZJWE1FOiBSZW1vdmUgdGhpcyBtZXRob2Qgd2hlbiBnZXQtc2lkZSBr
ZXkgaW5qZWN0aW9uIGlzIHRoZSBub3JtLgogdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
OjpwdXQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVlLCBQYXNzUmVm
UHRyPElEQktleT4gcHJwS2V5LCBQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiBwcnBDYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNh
Y3Rpb25QdHIsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIElEQl9UUkFDRSgiSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6cHV0Iik7CisgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjpwdXRXaXRoSW5kZXhLZXlzIik7CiAKICAgICBBU1NFUlQodHJhbnNhY3Rpb25Q
dHItPm1vZGUoKSAhPSBJREJUcmFuc2FjdGlvbjo6UkVBRF9PTkxZKTsKIApAQCAtMTUzLDggKzE1
NSwzMyBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dChQYXNzUmVmUHRyPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcHJwVmFsdWUsCiAgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4g
Y2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOwogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb25QdHI7CiAKKyAgICAvLyBudWxs
IHBvaW50ZXJzIGhlcmUgc2lnbmlmaXkgdGhhdCBpbmRleCBrZXlzIHNob3VsZCBiZSBnZW5lcmF0
ZWQgYXMgYSBwYXJ0IG9mIHRoaXMgcHV0LgorICAgIE93blB0cjxWZWN0b3I8U3RyaW5nPiA+IG51
bGxJbmRleE5hbWVzOworICAgIE93blB0cjxWZWN0b3I8SW5kZXhLZXlzPiA+IG51bGxJbmRleEtl
eXM7CiAgICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKAotICAgICAgICAgICAgY3Jl
YXRlQ2FsbGJhY2tUYXNrKCZJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbCwg
b2JqZWN0U3RvcmUsIHZhbHVlLCBrZXksIHB1dE1vZGUsIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24p
LAorICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsOjpwdXRJbnRlcm5hbCwgb2JqZWN0U3RvcmUsIHZhbHVlLCBrZXksIHB1dE1vZGUsIGNhbGxi
YWNrcywgdHJhbnNhY3Rpb24sIG51bGxJbmRleE5hbWVzLnJlbGVhc2UoKSwgbnVsbEluZGV4S2V5
cy5yZWxlYXNlKCkpLAorICAgICAgICAgICAgLy8gRklYTUU6IE9uZSBvZiB0aGVzZSBwZXIgcHV0
KCkgaXMgb3ZlcmtpbGwsIHNpbmNlIGl0J3Mgc2ltcGx5IGEgY2FjaGUgaW52YWxpZGF0aW9uLgor
ICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
OjpyZXZlcnRBdXRvSW5jcmVtZW50S2V5Q2FjaGUsIG9iamVjdFN0b3JlKSkpCisgICAgICAgIGVj
ID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKK30KKwor
dm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRXaXRoSW5kZXhLZXlzKFBhc3NSZWZQ
dHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IHBy
cEtleSwgUHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJh
Y2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBjb25z
dCBWZWN0b3I8U3RyaW5nPiYgaW5kZXhOYW1lcywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mIGlu
ZGV4S2V5cywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgSURCX1RSQUNFKCJJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpwdXRXaXRoSW5kZXhLZXlzIik7CisKKyAgICBBU1NFUlQodHJhbnNh
Y3Rpb25QdHItPm1vZGUoKSAhPSBJREJUcmFuc2FjdGlvbjo6UkVBRF9PTkxZKTsKKworICAgIFJl
ZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSA9IHRoaXM7CisgICAg
UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUgPSBwcnBWYWx1ZTsKKyAgICBSZWZQ
dHI8SURCS2V5PiBrZXkgPSBwcnBLZXk7CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJh
Y2tzID0gcHJwQ2FsbGJhY2tzOworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2U+IHRyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb25QdHI7CisKKyAgICBPd25QdHI8VmVjdG9y
PFN0cmluZz4gPiBuZXdJbmRleE5hbWVzID0gYWRvcHRQdHIobmV3IFZlY3RvcjxTdHJpbmc+KGlu
ZGV4TmFtZXMpKTsKKyAgICBPd25QdHI8VmVjdG9yPEluZGV4S2V5cz4gPiBuZXdJbmRleEtleXMg
PSBhZG9wdFB0cihuZXcgVmVjdG9yPEluZGV4S2V5cz4oaW5kZXhLZXlzKSk7CisKKyAgICBpZiAo
IXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soCisgICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rh
c2soJklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsLCBvYmplY3RTdG9yZSwg
dmFsdWUsIGtleSwgcHV0TW9kZSwgY2FsbGJhY2tzLCB0cmFuc2FjdGlvbiwgbmV3SW5kZXhOYW1l
cy5yZWxlYXNlKCksIG5ld0luZGV4S2V5cy5yZWxlYXNlKCkpLAogICAgICAgICAgICAgLy8gRklY
TUU6IE9uZSBvZiB0aGVzZSBwZXIgcHV0KCkgaXMgb3ZlcmtpbGwsIHNpbmNlIGl0J3Mgc2ltcGx5
IGEgY2FjaGUgaW52YWxpZGF0aW9uLgogICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpyZXZlcnRBdXRvSW5jcmVtZW50S2V5Q2FjaGUsIG9i
amVjdFN0b3JlKSkpCiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRSQU5TQUNU
SU9OX0lOQUNUSVZFX0VSUjsKQEAgLTE2OCw3MiArMTk1LDEwMiBAQCB2b2lkIElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OnJldmVydEF1dG9JbmNyZW1lbnRLZXlDYWNoZShTY3JpcHRFeGVjdXRp
b25Db250ZQogbmFtZXNwYWNlIHsKIGNsYXNzIEluZGV4V3JpdGVyIHsKIHB1YmxpYzoKLSAgICBl
eHBsaWNpdCBJbmRleFdyaXRlcihQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4
KQotICAgICAgICA6IG1faW5kZXgoaW5kZXgpCi0gICAgewotICAgIH0KKyAgICBleHBsaWNpdCBJ
bmRleFdyaXRlcihjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhKQorICAgICAg
ICA6IG1faW5kZXhNZXRhZGF0YShpbmRleE1ldGFkYXRhKQorICAgIHsgfQorCisgICAgSW5kZXhX
cml0ZXIoY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSwKKyAgICAgICAgICAg
ICAgICBjb25zdCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OkluZGV4S2V5cyYgaW5k
ZXhLZXlzKQorICAgICAgICA6IG1faW5kZXhNZXRhZGF0YShpbmRleE1ldGFkYXRhKQorICAgICAg
ICAsIG1faW5kZXhLZXlzKGluZGV4S2V5cykKKyAgICB7IH0KIAotICAgIGJvb2wgbG9hZEluZGV4
S2V5c0ZvclZhbHVlKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogb2JqZWN0VmFsdWUsIGNvbnN0IElE
QktleSogcHJpbWFyeUtleSA9IDAsIFN0cmluZyogZXJyb3JNZXNzYWdlID0gMCkKKyAgICBib29s
IGdlbmVyYXRlSW5kZXhLZXlzRm9yVmFsdWUoU2VyaWFsaXplZFNjcmlwdFZhbHVlKiBvYmplY3RW
YWx1ZSkKICAgICB7CiAgICAgICAgIG1faW5kZXhLZXlzLmNsZWFyKCk7CiAKLSAgICAgICAgUmVm
UHRyPElEQktleT4gaW5kZXhLZXkgPSBmZXRjaEtleUZyb21LZXlQYXRoKG9iamVjdFZhbHVlLCBt
X2luZGV4LT5rZXlQYXRoKCkpOworICAgICAgICBSZWZQdHI8SURCS2V5PiBpbmRleEtleSA9IGZl
dGNoS2V5RnJvbUtleVBhdGgob2JqZWN0VmFsdWUsIG1faW5kZXhNZXRhZGF0YS5rZXlQYXRoKTsK
IAogICAgICAgICBpZiAoIWluZGV4S2V5KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAg
ICAgICAgaWYgKCFtX2luZGV4LT5tdWx0aUVudHJ5KCkgfHwgaW5kZXhLZXktPnR5cGUoKSAhPSBJ
REJLZXk6OkFycmF5VHlwZSkgeworICAgICAgICBpZiAoIW1faW5kZXhNZXRhZGF0YS5tdWx0aUVu
dHJ5IHx8IGluZGV4S2V5LT50eXBlKCkgIT0gSURCS2V5OjpBcnJheVR5cGUpIHsKICAgICAgICAg
ICAgIGlmICghaW5kZXhLZXktPmlzVmFsaWQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKIAotICAgICAgICAgICAgaWYgKCFtX2luZGV4LT5hZGRpbmdLZXlBbGxvd2VkKGluZGV4S2V5
LmdldCgpLCBwcmltYXJ5S2V5KSkgewotICAgICAgICAgICAgICAgIGlmIChlcnJvck1lc3NhZ2Up
Ci0gICAgICAgICAgICAgICAgICAgICplcnJvck1lc3NhZ2UgPSBTdHJpbmc6OmZvcm1hdCgiVW5h
YmxlIHRvIGFkZCBrZXkgdG8gaW5kZXggJyVzJzogdGhlIGtleSBkb2VzIG5vdCBzYXRpc2Z5IGl0
cyB1bmlxdWVuZXNzIHJlcXVpcmVtZW50cy4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRleC0+bmFtZSgpLnV0ZjgoKS5kYXRhKCkpOwot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KICAgICAgICAgICAg
IG1faW5kZXhLZXlzLmFwcGVuZChpbmRleEtleSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBBU1NFUlQobV9pbmRleC0+bXVsdGlFbnRyeSgpKTsKKyAgICAgICAgICAgIEFTU0VSVCht
X2luZGV4TWV0YWRhdGEubXVsdGlFbnRyeSk7CiAgICAgICAgICAgICBBU1NFUlQoaW5kZXhLZXkt
PnR5cGUoKSA9PSBJREJLZXk6OkFycmF5VHlwZSk7CiAgICAgICAgICAgICBpbmRleEtleSA9IElE
QktleTo6Y3JlYXRlTXVsdGlFbnRyeUFycmF5KGluZGV4S2V5LT5hcnJheSgpKTsKIAogICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbmRleEtleS0+YXJyYXkoKS5zaXplKCk7ICsr
aSkgewotICAgICAgICAgICAgICAgIGlmICghbV9pbmRleC0+YWRkaW5nS2V5QWxsb3dlZChpbmRl
eEtleS0+YXJyYXkoKVtpXS5nZXQoKSwgcHJpbWFyeUtleSkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKGVycm9yTWVzc2FnZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICplcnJvck1lc3Nh
Z2UgPSBTdHJpbmc6OmZvcm1hdCgiVW5hYmxlIHRvIGFkZCBrZXkgdG8gaW5kZXggJyVzJzogYXQg
bGVhc3Qgb25lIGtleSBkb2VzIG5vdCBzYXRpc2Z5IHRoZSB1bmlxdWVuZXNzIHJlcXVpcmVtZW50
cy4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1faW5kZXgtPm5hbWUoKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBtX2luZGV4
S2V5cy5hcHBlbmQoaW5kZXhLZXktPmFycmF5KClbaV0pOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGJvb2wgd3JpdGVJbmRleEtl
eXMoY29uc3QgSURCQmFja2luZ1N0b3JlOjpPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqIHJl
Y29yZElkZW50aWZpZXIsIElEQkJhY2tpbmdTdG9yZSYgYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgU3RyaW5nKiBlcnJvck1lc3NhZ2UgPSAw
KQorICAgIGJvb2wgdmVyaWZ5SW5kZXhLZXlzKElEQkJhY2tpbmdTdG9yZSYgYmFja2luZ1N0b3Jl
LAorICAgICAgICAgICAgICAgICAgICAgICAgIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgSURCS2V5KiBwcmltYXJ5S2V5ID0gMCwgU3RyaW5nKiBlcnJvck1lc3NhZ2UgPSAwKQor
ICAgIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2luZGV4S2V5cy5zaXplKCk7
ICsraSkgeworICAgICAgICAgICAgaWYgKCFhZGRpbmdLZXlBbGxvd2VkKGJhY2tpbmdTdG9yZSwg
ZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAobV9pbmRleEtleXMpW2ldLmdldCgpLCBwcmltYXJ5S2V5KSkgeworICAg
ICAgICAgICAgICAgIGlmIChlcnJvck1lc3NhZ2UpCisgICAgICAgICAgICAgICAgICAgICplcnJv
ck1lc3NhZ2UgPSBTdHJpbmc6OmZvcm1hdCgiVW5hYmxlIHRvIGFkZCBrZXkgdG8gaW5kZXggJyVz
JzogYXQgbGVhc3Qgb25lIGtleSBkb2VzIG5vdCBzYXRpc2Z5IHRoZSB1bmlxdWVuZXNzIHJlcXVp
cmVtZW50cy4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9pbmRleE1ldGFkYXRhLm5hbWUudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworICAgIGJvb2wgd3JpdGVJbmRleEtleXMoY29uc3QgSURCQmFja2lu
Z1N0b3JlOjpPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqIHJlY29yZElkZW50aWZpZXIsIElE
QkJhY2tpbmdTdG9yZSYgYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKSBjb25zdAogICAgIHsKICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtX2luZGV4S2V5cy5zaXplKCk7ICsraSkgewotICAgICAgICAg
ICAgaWYgKCFiYWNraW5nU3RvcmUuZGVsZXRlSW5kZXhEYXRhRm9yUmVjb3JkKGRhdGFiYXNlSWQs
IG9iamVjdFN0b3JlSWQsIG1faW5kZXgtPmlkKCksIHJlY29yZElkZW50aWZpZXIpKQorICAgICAg
ICAgICAgaWYgKCFiYWNraW5nU3RvcmUuZGVsZXRlSW5kZXhEYXRhRm9yUmVjb3JkKGRhdGFiYXNl
SWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIHJlY29yZElkZW50aWZpZXIpKQogICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmICghYmFja2luZ1N0b3JlLnB1dElu
ZGV4RGF0YUZvclJlY29yZChkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBtX2luZGV4LT5pZCgp
LCAqbV9pbmRleEtleXNbaV0uZ2V0KCksIHJlY29yZElkZW50aWZpZXIpKQorICAgICAgICAgICAg
aWYgKCFiYWNraW5nU3RvcmUucHV0SW5kZXhEYXRhRm9yUmVjb3JkKGRhdGFiYXNlSWQsIG9iamVj
dFN0b3JlSWQsIGluZGV4SWQsICoobV9pbmRleEtleXMpW2ldLmdldCgpLCByZWNvcmRJZGVudGlm
aWVyKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogCisgICAgY29uc3QgU3RyaW5nJiBpbmRleE5hbWUoKSBjb25z
dCB7IHJldHVybiBtX2luZGV4TWV0YWRhdGEubmFtZTsgfQorCiBwcml2YXRlOgotICAgIFJlZlB0
cjxJREJJbmRleEJhY2tlbmRJbXBsPiBtX2luZGV4OwotICAgIFZlY3RvcjxSZWZQdHI8SURCS2V5
PiA+IG1faW5kZXhLZXlzOworCisgICAgYm9vbCBhZGRpbmdLZXlBbGxvd2VkKElEQkJhY2tpbmdT
dG9yZSYgYmFja2luZ1N0b3JlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBJREJLZXkqIGluZGV4S2V5LCBjb25zdCBJREJLZXkq
IHByaW1hcnlLZXkpCisgICAgeworICAgICAgICBpZiAoIW1faW5kZXhNZXRhZGF0YS51bmlxdWUp
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICBSZWZQdHI8SURCS2V5PiBmb3Vu
ZFByaW1hcnlLZXk7CisgICAgICAgIGJvb2wgZm91bmQgPSBiYWNraW5nU3RvcmUua2V5RXhpc3Rz
SW5JbmRleChkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCAqaW5kZXhLZXksIGZv
dW5kUHJpbWFyeUtleSk7CisgICAgICAgIGlmICghZm91bmQpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgaWYgKHByaW1hcnlLZXkgJiYgZm91bmRQcmltYXJ5S2V5LT5pc0VxdWFs
KHByaW1hcnlLZXkpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSBtX2luZGV4TWV0YWRhdGE7
CisgICAgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleXMgbV9pbmRleEtl
eXM7CiB9OwogfQogCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFs
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcHJw
VmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBwcnBLZXksIFB1dE1vZGUgcHV0TW9kZSwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uKQordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsOjpwdXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+IHBycFZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4gcHJwS2V5LCBQdXRNb2Rl
IHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbiwgUGFzc093blB0cjxW
ZWN0b3I8U3RyaW5nPiA+IHBvcEluZGV4TmFtZXMsIFBhc3NPd25QdHI8VmVjdG9yPEluZGV4S2V5
cz4gPiBwb3BJbmRleEtleXMpCiB7CiAgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpwdXRJbnRlcm5hbCIpOwogICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpICE9
IElEQlRyYW5zYWN0aW9uOjpSRUFEX09OTFkpOwogICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IHZhbHVlID0gcHJwVmFsdWU7CiAgICAgUmVmUHRyPElEQktleT4ga2V5ID0gcHJwS2V5
OworICAgIE93blB0cjxWZWN0b3I8U3RyaW5nPiA+IGluZGV4TmFtZXMgPSBwb3BJbmRleE5hbWVz
OworICAgIE93blB0cjxWZWN0b3I8SW5kZXhLZXlzPiA+IGluZGV4S2V5cyA9IHBvcEluZGV4S2V5
czsKKyAgICBBU1NFUlQoKCFpbmRleE5hbWVzICYmICFpbmRleEtleXMpIHx8IGluZGV4TmFtZXMt
PnNpemUoKSA9PSBpbmRleEtleXMtPnNpemUoKSk7CiAKICAgICBpZiAocHV0TW9kZSAhPSBDdXJz
b3JVcGRhdGUpIHsKICAgICAgICAgY29uc3QgYm9vbCBhdXRvSW5jcmVtZW50ID0gb2JqZWN0U3Rv
cmUtPmF1dG9JbmNyZW1lbnQoKTsKQEAgLTI1MSw2ICszMDgsNyBAQCB2b2lkIElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNz
UmVmUHRyPAogICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJh
c2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUiwgIk1heGltdW0g
a2V5IGdlbmVyYXRvciB2YWx1ZSByZWFjaGVkLiIpKTsKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogUmVtb3Zl
IHRoaXMgd2hlbiBnZXQtc2lkZSBrZXkgaW5qZWN0aW9uIGlzIHRoZSBub3JtLgogICAgICAgICAg
ICAgICAgIGlmIChoYXNLZXlQYXRoKSB7CiAgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxTZXJp
YWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlQWZ0ZXJJbmplY3Rpb24gPSBpbmplY3RLZXlJbnRvS2V5
UGF0aChhdXRvSW5jS2V5LCB2YWx1ZSwgb2JqZWN0U3RvcmUtPm1fa2V5UGF0aCk7CiAgICAgICAg
ICAgICAgICAgICAgIEFTU0VSVCh2YWx1ZUFmdGVySW5qZWN0aW9uKTsKQEAgLTI4MCwxNSArMzM4
LDMxIEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8CiAgICAgfQogCiAgICAgVmVjdG9yPE93blB0
cjxJbmRleFdyaXRlcj4gPiBpbmRleFdyaXRlcnM7CisgICAgSGFzaE1hcDxTdHJpbmcsIEluZGV4
S2V5cz4gaW5kZXhLZXlNYXA7CisgICAgaWYgKGluZGV4S2V5cykgeworICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGluZGV4TmFtZXMtPnNpemUoKTsgaSsrKQorICAgICAgICAgICAgaW5k
ZXhLZXlNYXAuYWRkKGluZGV4TmFtZXMtPmF0KGkpLCBpbmRleEtleXMtPmF0KGkpKTsKKyAgICB9
CisKICAgICBmb3IgKEluZGV4TWFwOjppdGVyYXRvciBpdCA9IG9iamVjdFN0b3JlLT5tX2luZGV4
ZXMuYmVnaW4oKTsgaXQgIT0gb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5lbmQoKTsgKytpdCkgewog
CiAgICAgICAgIGNvbnN0IFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiYgaW5kZXggPSBpdC0+
c2Vjb25kOwogICAgICAgICBpZiAoIWluZGV4LT5oYXNWYWxpZElkKCkpCiAgICAgICAgICAgICBj
b250aW51ZTsgLy8gVGhlIGluZGV4IG9iamVjdCBoYXMgYmVlbiBjcmVhdGVkLCBidXQgZG9lcyBu
b3QgZXhpc3QgaW4gdGhlIGRhdGFiYXNlIHlldC4KIAotICAgICAgICBPd25QdHI8SW5kZXhXcml0
ZXI+IGluZGV4V3JpdGVyKGFkb3B0UHRyKG5ldyBJbmRleFdyaXRlcihpbmRleCkpKTsKKyAgICAg
ICAgT3duUHRyPEluZGV4V3JpdGVyPiBpbmRleFdyaXRlcjsKKyAgICAgICAgLy8gRklYTUU6IFR1
cm4gdGhpcyBpbnRvIGFuIEFTU0VSVChpbmRleEtleXMpIHdoZW4gZ2V0LXNpZGUga2V5IGluamVj
dGlvbiBpcyB0aGUgbm9ybS4KKyAgICAgICAgaWYgKGluZGV4S2V5cykKKyAgICAgICAgICAgIGlu
ZGV4V3JpdGVyID0gYWRvcHRQdHIobmV3IEluZGV4V3JpdGVyKGluZGV4LT5tZXRhZGF0YSgpLCBp
bmRleEtleU1hcC5nZXQoaXQtPmZpcnN0KSkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
IGluZGV4V3JpdGVyID0gYWRvcHRQdHIobmV3IEluZGV4V3JpdGVyKGluZGV4LT5tZXRhZGF0YSgp
KSk7CisgICAgICAgICAgICBpbmRleFdyaXRlci0+Z2VuZXJhdGVJbmRleEtleXNGb3JWYWx1ZSh2
YWx1ZS5nZXQoKSk7CisgICAgICAgIH0KICAgICAgICAgU3RyaW5nIGVycm9yTWVzc2FnZTsKLSAg
ICAgICAgaWYgKCFpbmRleFdyaXRlci0+bG9hZEluZGV4S2V5c0ZvclZhbHVlKHZhbHVlLmdldCgp
LCBrZXkuZ2V0KCksICZlcnJvck1lc3NhZ2UpKSB7CisgICAgICAgIGlmICghaW5kZXhXcml0ZXIt
PnZlcmlmeUluZGV4S2V5cygqb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQo
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdFN0b3Jl
LT5pZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgt
PmlkKCksIGtleS5nZXQoKSwgJmVycm9yTWVzc2FnZSkpIHsKICAgICAgICAgICAgIG9iamVjdFN0
b3JlLT5yZXNldEF1dG9JbmNyZW1lbnRLZXlDYWNoZSgpOwogICAgICAgICAgICAgY2FsbGJhY2tz
LT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
REFUQV9FUlIsIGVycm9yTWVzc2FnZSkpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzA2LDkg
KzM4MCwxMyBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPAogICAgIH0KIAogICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgaW5kZXhXcml0ZXJzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmICgh
aW5kZXhXcml0ZXJzW2ldLT53cml0ZUluZGV4S2V5cyhyZWNvcmRJZGVudGlmaWVyLmdldCgpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm9iamVjdFN0b3Jl
LT5iYWNraW5nU3RvcmUoKSwgb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdFN0b3JlLT5tX2lkKSkgewor
ICAgICAgICBJbmRleFdyaXRlciogaW5kZXhXcml0ZXIgPSBpbmRleFdyaXRlcnNbaV0uZ2V0KCk7
CisgICAgICAgIGlmICghaW5kZXhXcml0ZXItPndyaXRlSW5kZXhLZXlzKHJlY29yZElkZW50aWZp
ZXIuZ2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpvYmpl
Y3RTdG9yZS0+YmFja2luZ1N0b3JlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG9iamVjdFN0b3JlLT5tX2lkLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RTdG9yZS0+bV9pbmRleGVzLmdldChpbmRl
eFdyaXRlci0+aW5kZXhOYW1lKCkpLT5pZCgpKSkgeworCiAgICAgICAgICAgICBjYWxsYmFja3Mt
Pm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpV
TktOT1dOX0VSUiwgIkVycm9yIHdyaXRpbmcgZGF0YSB0byBzdGFibGUgc3RvcmFnZS4iKSk7CiAg
ICAgICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoKTsKICAgICAgICAgICAgIHJldHVybjsKQEAg
LTM4MywzMyArNDYxLDM2IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y2xlYXJJ
bnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0CiBuYW1lc3BhY2Ugewog
Y2xhc3MgUG9wdWxhdGVJbmRleENhbGxiYWNrIDogcHVibGljIElEQkJhY2tpbmdTdG9yZTo6T2Jq
ZWN0U3RvcmVSZWNvcmRDYWxsYmFjayB7CiBwdWJsaWM6Ci0gICAgUG9wdWxhdGVJbmRleENhbGxi
YWNrKElEQkJhY2tpbmdTdG9yZSYgYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRl
eCkKKyAgICBQb3B1bGF0ZUluZGV4Q2FsbGJhY2soSURCQmFja2luZ1N0b3JlJiBiYWNraW5nU3Rv
cmUsIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRhdGEsIGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpCiAgICAgICAgIDog
bV9iYWNraW5nU3RvcmUoYmFja2luZ1N0b3JlKQogICAgICAgICAsIG1fZGF0YWJhc2VJZChkYXRh
YmFzZUlkKQogICAgICAgICAsIG1fb2JqZWN0U3RvcmVJZChvYmplY3RTdG9yZUlkKQotICAgICAg
ICAsIG1fd3JpdGVyKGluZGV4KQorICAgICAgICAsIG1faW5kZXhJZChpbmRleElkKQorICAgICAg
ICAsIG1fd3JpdGVyKGluZGV4TWV0YWRhdGEpCiAgICAgewogICAgIH0KIAogICAgIHZpcnR1YWwg
Ym9vbCBjYWxsYmFjayhjb25zdCBJREJCYWNraW5nU3RvcmU6Ok9iamVjdFN0b3JlUmVjb3JkSWRl
bnRpZmllciogcmVjb3JkSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICB7CiAg
ICAgICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG9iamVjdFZhbHVlID0gU2VyaWFs
aXplZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9tV2lyZSh2YWx1ZSk7Ci0gICAgICAgIGlmICghbV93
cml0ZXIubG9hZEluZGV4S2V5c0ZvclZhbHVlKG9iamVjdFZhbHVlLmdldCgpKSkKKyAgICAgICAg
bV93cml0ZXIuZ2VuZXJhdGVJbmRleEtleXNGb3JWYWx1ZShvYmplY3RWYWx1ZS5nZXQoKSk7Cisg
ICAgICAgIGlmICghbV93cml0ZXIudmVyaWZ5SW5kZXhLZXlzKG1fYmFja2luZ1N0b3JlLCBtX2Rh
dGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRleElkKSkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgcmV0dXJuIG1fd3JpdGVyLndyaXRlSW5kZXhLZXlzKHJlY29yZElk
ZW50aWZpZXIsIG1fYmFja2luZ1N0b3JlLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCk7
CisgICAgICAgIHJldHVybiBtX3dyaXRlci53cml0ZUluZGV4S2V5cyhyZWNvcmRJZGVudGlmaWVy
LCBtX2JhY2tpbmdTdG9yZSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIG1faW5kZXhJ
ZCk7CiAgICAgfQogCiBwcml2YXRlOgogICAgIElEQkJhY2tpbmdTdG9yZSYgbV9iYWNraW5nU3Rv
cmU7CiAgICAgaW50NjRfdCBtX2RhdGFiYXNlSWQ7CiAgICAgaW50NjRfdCBtX29iamVjdFN0b3Jl
SWQ7CisgICAgaW50NjRfdCBtX2luZGV4SWQ7CiAgICAgSW5kZXhXcml0ZXIgbV93cml0ZXI7CiB9
OwogfQogCiBib29sIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnBvcHVsYXRlSW5kZXgoSURC
QmFja2luZ1N0b3JlJiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4KQogewot
ICAgIFBvcHVsYXRlSW5kZXhDYWxsYmFjayBjYWxsYmFjayhiYWNraW5nU3RvcmUsIGRhdGFiYXNl
SWQsIG9iamVjdFN0b3JlSWQsIGluZGV4KTsKKyAgICBQb3B1bGF0ZUluZGV4Q2FsbGJhY2sgY2Fs
bGJhY2soYmFja2luZ1N0b3JlLCBpbmRleC0+bWV0YWRhdGEoKSwgZGF0YWJhc2VJZCwgb2JqZWN0
U3RvcmVJZCwgaW5kZXgtPmlkKCkpOwogICAgIGlmICghYmFja2luZ1N0b3JlLmZvckVhY2hPYmpl
Y3RTdG9yZVJlY29yZChkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBjYWxsYmFjaykpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwu
aAppbmRleCAxZTM5ZGRhYzMwNTFiYTBjZGE5ZThkNWI5MTBjMTQ2Njc0ZjRiOWU5Li4xYzc0NWI1
OTNkZmI0MDdkYzM1MGUyMjllY2YxMzBiMGM1MzY2N2E2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bC5oCkBAIC02Nyw2ICs2Nyw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBnZXQoUGFz
c1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9p
ZCBwdXQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQktl
eT4sIFB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZpcnR1YWwgdm9pZCBwdXRXaXRo
SW5kZXhLZXlzKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxJ
REJLZXk+LCBQdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZSosIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgVmVjdG9yPElu
ZGV4S2V5cz4mLCBFeGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUZ1bmN0
aW9uKFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0
dWFsIHZvaWQgY2xlYXIoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJik7CiAKQEAgLTkyLDcgKzkzLDcgQEAgcHJp
dmF0ZToKICAgICB2b2lkIHJlc2V0QXV0b0luY3JlbWVudEtleUNhY2hlKCkgeyBtX2F1dG9JbmNy
ZW1lbnROdW1iZXIgPSAtMTsgfQogCiAgICAgc3RhdGljIHZvaWQgZ2V0SW50ZXJuYWwoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4s
IFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOwotICAg
IHN0YXRpYyB2b2lkIHB1dEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVm
UHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4sIFBhc3NSZWZQdHI8SURCS2V5PiwgUHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4pOworICAg
IHN0YXRpYyB2b2lkIHB1dEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVm
UHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4sIFBhc3NSZWZQdHI8SURCS2V5PiwgUHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4sIFBhc3NP
d25QdHI8VmVjdG9yPFN0cmluZz4gPiBwb3BJbmRleE5hbWVzLCBQYXNzT3duUHRyPFZlY3RvcjxJ
bmRleEtleXM+ID4pOwogICAgIHN0YXRpYyB2b2lkIGRlbGV0ZUludGVybmFsKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNz
UmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKICAgICBzdGF0
aWMgdm9pZCBjbGVhckludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRy
PElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOwog
ICAgIHN0YXRpYyB2b2lkIGNyZWF0ZUluZGV4SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURC
SW5kZXhCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlPik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJP
YmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZS5oCmluZGV4IDA3ZjlmNzI2MGIy
YWFiYWRhNDZkYjM2MDFhYTA0ZGIwN2Q5Mzc3N2QuLjM3ZDNlZTBmOTQzMGRjNTA3YjA5NGUzNDBm
ODljMzllNGEwZDZkMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZS5oCkBAIC01
NSw3ICs1NSwxMCBAQCBwdWJsaWM6CiAgICAgICAgIEFkZE9ubHksCiAgICAgICAgIEN1cnNvclVw
ZGF0ZQogICAgIH07CisgICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPElEQktleT4gPiBJbmRleEtl
eXM7CisKICAgICB2aXJ0dWFsIHZvaWQgcHV0KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiwgUGFzc1JlZlB0cjxJREJLZXk+LCBQdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHB1dFdpdGhJbmRleEtleXMoUGFzc1JlZlB0cjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQktleT4sIFB1dE1vZGUsIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgY29uc3QgVmVjdG9y
PFN0cmluZz4mLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYsIEV4Y2VwdGlvbkNvZGUmKSA9IDA7
CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZSosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNl
cHRpb25Db2RlJikgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCUmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJSZXF1ZXN0LmNwcAppbmRleCA2MmQyOTIzNDAyNTAwNGM1OThkY2NhMmQwN2E2OTgyM2JhYzM4
NGZlLi42M2E0OGJlOTM1YTVmYjQ2ZDc1MmY3MTE1M2E2ZGI5NTAxOWI2ZDdmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcApAQCAtMzMyLDYg
KzMzMiw3IEBAIHZvaWQgSURCUmVxdWVzdDo6b25TdWNjZXNzKFBhc3NSZWZQdHI8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiBwcnBTZXJpYWxpemVkU2NyaXB0CiAgICAgUmVmUHRyPElEQktleT4gcHJp
bWFyeUtleSA9IHBycFByaW1hcnlLZXk7CiAgICAgUmVmUHRyPElEQktleT4gZXhwZWN0ZWRLZXkg
PQogICAgICAgICAgICAgICBjcmVhdGVJREJLZXlGcm9tU2VyaWFsaXplZFZhbHVlQW5kS2V5UGF0
aChzZXJpYWxpemVkU2NyaXB0VmFsdWUsIGtleVBhdGgpOworICAgIEFTU0VSVChwcmltYXJ5S2V5
KTsKICAgICBBU1NFUlQoZXhwZWN0ZWRLZXktPmlzRXF1YWwocHJpbWFyeUtleS5nZXQoKSkpOwog
I2VuZGlmCiAgICAgb25TdWNjZXNzKHNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5yZWxlYXNlKCkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSURCT2JqZWN0U3Rv
cmUuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklEQk9iamVjdFN0b3JlLmgK
aW5kZXggZWMxNTNhNzE5OWRkNjExNmNkNjY2ZTFlMTVkMmQyMGM5ZGNlNTVmNi4uOThjNDUxM2Uy
MTY0NzdiMDc1MzJhZDljMGU0YzgxMGU5NDIyN2I1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViSURCT2JqZWN0U3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJJREJPYmplY3RTdG9yZS5oCkBAIC01MSw3ICs1MSwxMCBAQCBw
dWJsaWM6CiAgICAgICAgIEN1cnNvclVwZGF0ZQogICAgIH07CiAKKyAgICB0eXBlZGVmIFdlYlZl
Y3RvcjxXZWJJREJLZXk+IFdlYkluZGV4S2V5czsKKwogICAgIHZpcnR1YWwgdm9pZCBwdXQoY29u
c3QgV2ViU2VyaWFsaXplZFNjcmlwdFZhbHVlJiwgY29uc3QgV2ViSURCS2V5JiwgUHV0TW9kZSwg
V2ViSURCQ2FsbGJhY2tzKiwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mLCBXZWJFeGNlcHRpb25D
b2RlJikgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
cHV0V2l0aEluZGV4S2V5cyhjb25zdCBXZWJTZXJpYWxpemVkU2NyaXB0VmFsdWUmLCBjb25zdCBX
ZWJJREJLZXkmLCBQdXRNb2RlLCBXZWJJREJDYWxsYmFja3MqLCBjb25zdCBXZWJJREJUcmFuc2Fj
dGlvbiYsIGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiwgY29uc3QgV2ViVmVjdG9yPFdlYklu
ZGV4S2V5cz4mLCBXZWJFeGNlcHRpb25Db2RlJikgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVE
KCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRnVuY3Rpb24oY29uc3QgV2ViSURCS2V5UmFu
Z2UmLCBXZWJJREJDYWxsYmFja3MqLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYsIFdlYkV4Y2Vw
dGlvbkNvZGUmKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogICAgIHZpcnR1YWwg
dm9pZCBjbGVhcihXZWJJREJDYWxsYmFja3MqLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYsIFdl
YkV4Y2VwdGlvbkNvZGUmKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogICAgIHZp
cnR1YWwgV2ViSURCSW5kZXgqIGNyZWF0ZUluZGV4KGNvbnN0IFdlYlN0cmluZyYsIGNvbnN0IFdl
YklEQktleVBhdGgmLCBib29sLCBib29sLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYsIFdlYkV4
Y2VwdGlvbkNvZGUmKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURC
T2JqZWN0U3RvcmVCYWNrZW5kUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
SURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHkuY3BwCmluZGV4IDQyZjgwOGM4NWI0NmFlNmFkOWU4
OTM4MDIyNGMxNWE2MjZlNDUyMWQuLjgyNjQwNzMzMGEwMjdhMTZkYjdmYjFjM2RjZDBlZmRjMWY0
YjM1MTcgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQk9iamVjdFN0
b3JlQmFja2VuZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJP
YmplY3RTdG9yZUJhY2tlbmRQcm94eS5jcHAKQEAgLTc1LDYgKzc1LDE2IEBAIHZvaWQgSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kUHJveHk6OnB1dChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZT4gdmFsdWUsIFBhCiAgICAgbV93ZWJJREJPYmplY3RTdG9yZS0+cHV0KHZhbHVlLCBrZXksIHN0
YXRpY19jYXN0PFdlYklEQk9iamVjdFN0b3JlOjpQdXRNb2RlPihwdXRNb2RlKSwgbmV3IFdlYklE
QkNhbGxiYWNrc0ltcGwoY2FsbGJhY2tzKSwgKnRyYW5zYWN0aW9uUHJveHktPmdldFdlYklEQlRy
YW5zYWN0aW9uKCksIGVjKTsKIH0KIAordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eTo6
cHV0V2l0aEluZGV4S2V5cyhQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUs
IFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IGNhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFu
c2FjdGlvbiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGluZGV4TmFtZXMsIGNvbnN0IFZlY3RvcjxJ
bmRleEtleXM+JiBpbmRleEtleXMsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIC8vIFRoZSB0
cmFuc2FjdGlvbiBwb2ludGVyIGlzIGd1YXJhbnRlZWQgdG8gYmUgYSBwb2ludGVyIHRvIGEgcHJv
eHkgb2JqZWN0IGFzLCBpbiB0aGUgcmVuZGVyZXIsCisgICAgLy8gYWxsIGltcGxlbWVudGF0aW9u
cyBvZiBJREIgaW50ZXJmYWNlcyBhcmUgcHJveHkgb2JqZWN0cy4KKyAgICBJREJUcmFuc2FjdGlv
bkJhY2tlbmRQcm94eSogdHJhbnNhY3Rpb25Qcm94eSA9IHN0YXRpY19jYXN0PElEQlRyYW5zYWN0
aW9uQmFja2VuZFByb3h5Kj4odHJhbnNhY3Rpb24pOworICAgIFdlYlZlY3RvcjxXZWJTdHJpbmc+
IHdlYkluZGV4TmFtZXMoaW5kZXhOYW1lcyk7CisgICAgV2ViVmVjdG9yPEluZGV4S2V5cz4gd2Vi
SW5kZXhLZXlzKGluZGV4S2V5cyk7CisgICAgbV93ZWJJREJPYmplY3RTdG9yZS0+cHV0V2l0aElu
ZGV4S2V5cyh2YWx1ZSwga2V5LCBzdGF0aWNfY2FzdDxXZWJJREJPYmplY3RTdG9yZTo6UHV0TW9k
ZT4ocHV0TW9kZSksIG5ldyBXZWJJREJDYWxsYmFja3NJbXBsKGNhbGxiYWNrcyksICp0cmFuc2Fj
dGlvblByb3h5LT5nZXRXZWJJREJUcmFuc2FjdGlvbigpLCB3ZWJJbmRleE5hbWVzLCB3ZWJJbmRl
eEtleXMsIGVjKTsKK30KKwogdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eTo6ZGVsZXRl
RnVuY3Rpb24oUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiBjYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJh
bnNhY3Rpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIC8vIFRoZSB0cmFuc2FjdGlvbiBw
b2ludGVyIGlzIGd1YXJhbnRlZWQgdG8gYmUgYSBwb2ludGVyIHRvIGEgcHJveHkgb2JqZWN0IGFz
LCBpbiB0aGUgcmVuZGVyZXIsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9JREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHkuaAppbmRleCBjNjY2YzlmYzc5ODJjYmFiNzNj
NmI0Yjc4N2Y5N2MxYzljNDA0MDFiLi5jNjQwMjhjZmZiNjBmMmQ4YTI0NGE3MTVjNzNjMGI3NjVh
ZWVmNDRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJPYmplY3RT
dG9yZUJhY2tlbmRQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQk9i
amVjdFN0b3JlQmFja2VuZFByb3h5LmgKQEAgLTQ1LDYgKzQ1LDcgQEAgcHVibGljOgogCiAgICAg
dmlydHVhbCB2b2lkIGdldChQYXNzUmVmUHRyPFdlYkNvcmU6OklEQktleVJhbmdlPiwgUGFzc1Jl
ZlB0cjxXZWJDb3JlOjpJREJDYWxsYmFja3M+LCBXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2UqLCBXZWJDb3JlOjpFeGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2b2lk
IHB1dChQYXNzUmVmUHRyPFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NSZWZQ
dHI8V2ViQ29yZTo6SURCS2V5PiwgUHV0TW9kZSwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJDYWxs
YmFja3M+LCBXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBXZWJDb3Jl
OjpFeGNlcHRpb25Db2RlJik7CisgICAgdmlydHVhbCB2b2lkIHB1dFdpdGhJbmRleEtleXMoUGFz
c1JlZlB0cjxXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPFdlYkNv
cmU6OklEQktleT4sIFB1dE1vZGUsIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ2FsbGJhY2tzPiwg
V2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgY29uc3QgV1RGOjpWZWN0
b3I8V1RGOjpTdHJpbmc+JiwgY29uc3QgV1RGOjpWZWN0b3I8SW5kZXhLZXlzPiYsIFdlYkNvcmU6
OkV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRnVuY3Rpb24oUGFzc1Jl
ZlB0cjxXZWJDb3JlOjpJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ2FsbGJh
Y2tzPiwgV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgV2ViQ29yZTo6
RXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBjbGVhcihQYXNzUmVmUHRyPFdlYkNv
cmU6OklEQkNhbGxiYWNrcz4sIFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZSosIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUmKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152020</attachid>
            <date>2012-07-12 12:20:55 -0700</date>
            <delta_ts>2012-07-16 15:40:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90923-20120712122054.patch</filename>
            <type>text/plain</type>
            <size>30563</size>
            <attacher name="Alec Flett">alecflett</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyNDQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGYzOTdkYzU0OWVkNTEx
NzUyNjc3ZWY5ZWVkYTUyOWZiNDRkNTc4MS4uZDI4MjMyYmQ0MDA4YTM3MjMzZDQwMzM4M2RjNDFj
MmYwMTkyMDBhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDEyLTA3LTEwICBBbGVj
IEZsZXR0ICA8YWxlY2ZsZXR0QGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IElu
dHJvZHVjZSBwdXRXaXRoSW5kZXhLZXlzIGFuZCBjYWxjdWxhdGUgdGhlbSBpbiB0aGUgcmVuZGVy
ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwOTIz
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVmYWN0
b3IgSW5kZXhXcml0ZXIgdG8gZGVwZW5kIG9ubHkgb24gSURCSW5kZXhNZXRhZGF0YSBhbmQgb24K
KyAgICAgICAgKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQpIHNvIHRoYXQgaXQg
Y2FuIHRhbGsgZGlyZWN0bHkKKyAgICAgICAgdG8gdGhlIGJhY2tpbmcgc3RvcmUsIGFuZCBhbHNv
IGV2ZW50dWFsbHkgYmUgbW92ZWQgaW50byB0aGUgcmVuZGVyZXIuCisKKyAgICAgICAgVGhpcyBh
bHNvIGludHJvZHVjZXMgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpwdXRXaXRoSW5k
ZXhLZXlzCisgICAgICAgIGFzIGEgcmVwbGFjZW1lbnQgZm9yIElEQk9iamVjdFN0b3JlQmFja2Vu
ZEludGVyZmFjZTo6cHV0LCBhbHJlYWR5CisgICAgICAgIHN0dWJiZWQgb3V0IGluIHRoZSBjaHJv
bWl1bSBwb3J0LiBJdCB3aWxsIGZ1bGx5IHJlcGxhY2UgcHV0KCkKKyAgICAgICAgYWZ0ZXIgYm90
aCBjaHJvbWl1bSBhbmQgd2Via2l0IHNpZGVzIGhhdmUgcmVhY2hlZCBhbGlnbm1lbnQuCisKKyAg
ICAgICAgTm8gbmV3IHRlc3RzIGFzIHRoaXMgaXMganVzdCBhIHJlZmFjdG9yIGFuZCBleGlzdGlu
ZyB0ZXN0cyBjb3ZlcgorICAgICAgICBjb3JyZWN0bmVzcy4KKworICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL0lEQkN1cnNvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OnNl
dFZhbHVlUmVhZHkpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2Vu
ZEltcGwuY3BwOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZElt
cGwuaDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oOgorICAg
ICAgICAoSURCT2JqZWN0U3RvcmUpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9i
amVjdFN0b3JlQmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6cHV0KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0V2l0aEluZGV4S2V5cyk6CisgICAgICAg
IChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbCk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwb3B1bGF0ZUluZGV4KToK
KyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmg6
CisgICAgICAgIChJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKToKKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UuaDoKKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlJl
cXVlc3Q6Om9uU3VjY2Vzcyk6CisKIDIwMTItMDctMTIgIFhpbmduYW4gV2FuZyAgPHhpbmduYW4u
d2FuZ0BpbnRlbC5jb20+CiAKICAgICAgICAgW0luZGV4ZWREQl0gdXBwZXJPcGVuIHNldCB0byB0
cnVlIGluIGxvd2VyQm91bmQoKS9sb3dlck9wZW4gc2V0IHRvIHRydWUgaW4gdXBwZXJCb3VuZCgp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGU3M2VjOTU0YmMxOWM1ZWE0NTA2MmRkYmM1
ZGQ1NDkwNjRjZDhlNDAuLjg3NGVmZGVjYjg0ODdiMjQ3ODA2ZDQwY2IzMzQzMGFiMDM1ZjBkZmQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTItMDctMTAg
IEFsZWMgRmxldHQgIDxhbGVjZmxldHRAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEluZGV4ZWRE
QjogSW50cm9kdWNlIHB1dFdpdGhJbmRleEtleXMgYW5kIGNhbGN1bGF0ZSB0aGVtIGluIHRoZSBy
ZW5kZXJlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTA5MjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBT
dHViIG91dCBpbXBsZW1lbnRhdGlvbnMgb2YgcHV0V2l0aEluZGV4S2V5cygpLCBhbHJlYWR5IGlt
cGxlbWVudGVkCisgICAgICAgIG9uIHRoZSBjaHJvbWl1bSBzaWRlLgorCisgICAgICAgICogcHVi
bGljL1dlYklEQk9iamVjdFN0b3JlLmg6CisgICAgICAgIChXZWJLaXQ6OldlYklEQk9iamVjdFN0
b3JlOjpwdXRXaXRoSW5kZXhLZXlzKToKKyAgICAgICAgKiBzcmMvSURCT2JqZWN0U3RvcmVCYWNr
ZW5kUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpJREJPYmplY3RTdG9yZUJhY2tlbmRQcm94
eTo6cHV0V2l0aEluZGV4S2V5cyk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAqIHNyYy9J
REJPYmplY3RTdG9yZUJhY2tlbmRQcm94eS5oOgorICAgICAgICAoSURCT2JqZWN0U3RvcmVCYWNr
ZW5kUHJveHkpOgorCiAyMDEyLTA3LTExICBNYXJrIFJvd2UgIDxtcm93ZUBhcHBsZS5jb20+CiAK
ICAgICAgICAgPGh0dHA6Ly93ZWJraXQub3JnL2IvOTEwMTU+IFJlbW92ZSBCVUlMRElOR19PTiAv
IFRBUkdFVElORyBtYWNyb3MgaW4gZmF2b3Igb2Ygc3lzdGVtIGF2YWlsYWJpbGl0eSBtYWNyb3MK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwCmluZGV4
IDVlOTAyNTExMmVlNmJiOWNkOTg4MDU5NWEyOTBlNjI5M2VjYjdhMjkuLjZlMjg2OTFhZjBiNzcx
NmM5MDY1NmM4NmI1Yzg4NzA0NWM3YjU3ZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCQ3Vyc29yLmNwcApAQCAtMjc2LDYgKzI3Niw3IEBAIHZvaWQgSURCQ3Vy
c29yOjpzZXRWYWx1ZVJlYWR5KCkKICAgICAgICAgaWYgKG9iamVjdFN0b3JlLT5hdXRvSW5jcmVt
ZW50KCkgJiYgIW9iamVjdFN0b3JlLT5tZXRhZGF0YSgpLmtleVBhdGguaXNOdWxsKCkpIHsKICAg
ICAgICAgICAgIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGggPSBvYmplY3RTdG9yZS0+bWV0YWRh
dGEoKS5rZXlQYXRoOwogICAgICAgICAgICAgUmVmUHRyPElEQktleT4gZXhwZWN0ZWRLZXkgPSBj
cmVhdGVJREJLZXlGcm9tU2VyaWFsaXplZFZhbHVlQW5kS2V5UGF0aCh2YWx1ZSwga2V5UGF0aCk7
CisgICAgICAgICAgICBBU1NFUlQobV9jdXJyZW50UHJpbWFyeUtleSk7CiAgICAgICAgICAgICBB
U1NFUlQoZXhwZWN0ZWRLZXktPmlzRXF1YWwobV9jdXJyZW50UHJpbWFyeUtleS5nZXQoKSkpOwog
ICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmNwcAppbmRleCBhMDg3ZTZhYWYyZjUyNDIzNWY4
NTA3YTZlZjQ4ZTViMmVjN2Q5ZWU3Li5hZmRiN2VjM2M2ZDQ1ZWQ3M2ZmNzU3MTVkNjQ1YjJhZmI0
NzBhZjNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJ
bmRleEJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJJbmRleEJhY2tlbmRJbXBsLmNwcApAQCAtMjE5LDIwICsyMTksNiBAQCB2b2lkIElEQklu
ZGV4QmFja2VuZEltcGw6OmdldEtleShQYXNzUmVmUHRyPElEQktleVJhbmdlPiBwcnBLZXlSYW5n
ZSwgUGFzc1JlZlB0cgogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FD
VElPTl9JTkFDVElWRV9FUlI7CiB9CiAKLWJvb2wgSURCSW5kZXhCYWNrZW5kSW1wbDo6YWRkaW5n
S2V5QWxsb3dlZChjb25zdCBJREJLZXkqIGluZGV4S2V5LCBjb25zdCBJREJLZXkqIHByaW1hcnlL
ZXkpCi17Ci0gICAgaWYgKCFtX3VuaXF1ZSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBS
ZWZQdHI8SURCS2V5PiBmb3VuZFByaW1hcnlLZXk7Ci0gICAgYm9vbCBmb3VuZCA9IGJhY2tpbmdT
dG9yZSgpLT5rZXlFeGlzdHNJbkluZGV4KGRhdGFiYXNlSWQoKSwgbV9vYmplY3RTdG9yZUJhY2tl
bmQtPmlkKCksIG1faWQsICppbmRleEtleSwgZm91bmRQcmltYXJ5S2V5KTsKLSAgICBpZiAoIWZv
dW5kKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAocHJpbWFyeUtleSAmJiBmb3VuZFBy
aW1hcnlLZXktPmlzRXF1YWwocHJpbWFyeUtleSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IHJldHVybiBmYWxzZTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8g
RU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmgKaW5kZXggOTgzODUxMjhmMjhiYWNh
NTQ1MzY5MTEzZmFkNjkyMTBjMjM1MDFmYi4uZjg0MWE5NTgzNzI0NGMyZmQwODI4ODA0YTY5MDEz
NDRkODVhNTI1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCSW5kZXhCYWNrZW5kSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkluZGV4QmFja2VuZEltcGwuaApAQCAtNjEsOCArNjEsNiBAQCBwdWJsaWM6CiAgICAg
dm9pZCBzZXRJZChpbnQ2NF90IGlkKSB7IG1faWQgPSBpZDsgfQogICAgIGJvb2wgaGFzVmFsaWRJ
ZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQgIT0gSW52YWxpZElkOyB9OwogCi0gICAgYm9vbCBhZGRp
bmdLZXlBbGxvd2VkKGNvbnN0IElEQktleSogaW5kZXhLZXksIGNvbnN0IElEQktleSogcHJpbWFy
eUtleSA9IDApOwotCiAgICAgLy8gSW1wbGVtZW50cyBJREJJbmRleEJhY2tlbmRJbnRlcmZhY2Uu
CiAgICAgdmlydHVhbCBJREJJbmRleE1ldGFkYXRhIG1ldGFkYXRhKCkgY29uc3Q7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oCmluZGV4
IDY3YjM2Zjk5NTUxN2E5Yjg0ZDJhMWMyMjUyNDk1OGZjZGFhNDg0Y2UuLmVmN2MwNjNiOGY4MjI2
NDE3YTdiZmY4ZjJmZTEzNjk4MjQzYjg1MzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaApAQCAtMTAyLDYgKzEwMiw5IEBAIHB1Ymxp
YzoKICAgICBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG1ldGFkYXRhKCkgY29uc3QgeyByZXR1cm4g
bV9tZXRhZGF0YTsgfQogICAgIHZvaWQgc2V0TWV0YWRhdGEoY29uc3QgSURCT2JqZWN0U3RvcmVN
ZXRhZGF0YSYgbWV0YWRhdGEpIHsgbV9tZXRhZGF0YSA9IG1ldGFkYXRhOyB9CiAKKyAgICB0eXBl
ZGVmIFZlY3RvcjxSZWZQdHI8SURCS2V5PiA+IEluZGV4S2V5czsKKyAgICB0eXBlZGVmIEhhc2hN
YXA8U3RyaW5nLCBJbmRleEtleXM+IEluZGV4S2V5TWFwOworCiBwcml2YXRlOgogICAgIElEQk9i
amVjdFN0b3JlKGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmLCBQYXNzUmVmUHRyPElEQk9i
amVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4sIElEQlRyYW5zYWN0aW9uKik7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbC5jcHAKaW5kZXggNDc0Y2RlYjViNWEyYzg4NDFhMWZjYWRmOThmZjYyMzIy
ZmRmMDRkYy4uNzljZWNkNDZiNzlkOTA0NDEwYWNiZTRiM2E1NjE2MmM4ODg3ODBkMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKQEAgLTE0MSw5ICsxNDEsMTEgQEAgc3RhdGljIFBhc3NS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBpbmplY3RLZXlJbnRvS2V5UGF0aChQYXNzUmVm
UHRyPElEQktleT4KICAgICByZXR1cm4gSURCS2V5UGF0aEJhY2tlbmRJbXBsOjppbmplY3RJREJL
ZXlJbnRvU2VyaWFsaXplZFZhbHVlKGtleSwgdmFsdWUsIGtleVBhdGgpOwogfQogCisvLyBGSVhN
RTogUmVtb3ZlIHRoaXMgbWV0aG9kIHdoZW4gZ2V0LXNpZGUga2V5IGluamVjdGlvbiBpcyB0aGUg
bm9ybS4KIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0KFBhc3NSZWZQdHI8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IHBycEtleSwg
UHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRpb25D
b2RlJiBlYykKIHsKICAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1
dCIpOworICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0V2l0aElu
ZGV4S2V5cyIpOwogCiAgICAgQVNTRVJUKHRyYW5zYWN0aW9uUHRyLT5tb2RlKCkgIT0gSURCVHJh
bnNhY3Rpb246OlJFQURfT05MWSk7CiAKQEAgLTE1Myw4ICsxNTUsMzMgQEAgdm9pZCBJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsOjpwdXQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
IHBycFZhbHVlLAogICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxi
YWNrczsKICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2Fj
dGlvbiA9IHRyYW5zYWN0aW9uUHRyOwogCisgICAgLy8gTnVsbCBwb2ludGVycyBoZXJlIHNpZ25p
ZnkgdGhhdCBpbmRleCBrZXlzIHNob3VsZCBiZSBnZW5lcmF0ZWQgYXMgYSBwYXJ0IG9mIHRoaXMg
cHV0LgorICAgIE93blB0cjxWZWN0b3I8U3RyaW5nPiA+IG51bGxJbmRleE5hbWVzOworICAgIE93
blB0cjxWZWN0b3I8SW5kZXhLZXlzPiA+IG51bGxJbmRleEtleXM7CiAgICAgaWYgKCF0cmFuc2Fj
dGlvbi0+c2NoZWR1bGVUYXNrKAotICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbCwgb2JqZWN0U3RvcmUsIHZhbHVlLCBr
ZXksIHB1dE1vZGUsIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24pLAorICAgICAgICAgICAgY3JlYXRl
Q2FsbGJhY2tUYXNrKCZJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbCwgb2Jq
ZWN0U3RvcmUsIHZhbHVlLCBrZXksIHB1dE1vZGUsIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24sIG51
bGxJbmRleE5hbWVzLnJlbGVhc2UoKSwgbnVsbEluZGV4S2V5cy5yZWxlYXNlKCkpLAorICAgICAg
ICAgICAgLy8gRklYTUU6IE9uZSBvZiB0aGVzZSBwZXIgcHV0KCkgaXMgb3ZlcmtpbGwsIHNpbmNl
IGl0J3Mgc2ltcGx5IGEgY2FjaGUgaW52YWxpZGF0aW9uLgorICAgICAgICAgICAgY3JlYXRlQ2Fs
bGJhY2tUYXNrKCZJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpyZXZlcnRBdXRvSW5jcmVtZW50
S2V5Q2FjaGUsIG9iamVjdFN0b3JlKSkpCisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRp
b246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKK30KKwordm9pZCBJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjpwdXRXaXRoSW5kZXhLZXlzKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiBwcnBWYWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IHBycEtleSwgUHV0TW9kZSBwdXRNb2Rl
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgaW5k
ZXhOYW1lcywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mIGluZGV4S2V5cywgRXhjZXB0aW9uQ29k
ZSYgZWMpCit7CisgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRX
aXRoSW5kZXhLZXlzIik7CisKKyAgICBBU1NFUlQodHJhbnNhY3Rpb25QdHItPm1vZGUoKSAhPSBJ
REJUcmFuc2FjdGlvbjo6UkVBRF9PTkxZKTsKKworICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsPiBvYmplY3RTdG9yZSA9IHRoaXM7CisgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4gdmFsdWUgPSBwcnBWYWx1ZTsKKyAgICBSZWZQdHI8SURCS2V5PiBrZXkgPSBwcnBL
ZXk7CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOwor
ICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uID0g
dHJhbnNhY3Rpb25QdHI7CisKKyAgICBPd25QdHI8VmVjdG9yPFN0cmluZz4gPiBuZXdJbmRleE5h
bWVzID0gYWRvcHRQdHIobmV3IFZlY3RvcjxTdHJpbmc+KGluZGV4TmFtZXMpKTsKKyAgICBPd25Q
dHI8VmVjdG9yPEluZGV4S2V5cz4gPiBuZXdJbmRleEtleXMgPSBhZG9wdFB0cihuZXcgVmVjdG9y
PEluZGV4S2V5cz4oaW5kZXhLZXlzKSk7CisKKyAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVs
ZVRhc2soCisgICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJklEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OnB1dEludGVybmFsLCBvYmplY3RTdG9yZSwgdmFsdWUsIGtleSwgcHV0TW9kZSwg
Y2FsbGJhY2tzLCB0cmFuc2FjdGlvbiwgbmV3SW5kZXhOYW1lcy5yZWxlYXNlKCksIG5ld0luZGV4
S2V5cy5yZWxlYXNlKCkpLAogICAgICAgICAgICAgLy8gRklYTUU6IE9uZSBvZiB0aGVzZSBwZXIg
cHV0KCkgaXMgb3ZlcmtpbGwsIHNpbmNlIGl0J3Mgc2ltcGx5IGEgY2FjaGUgaW52YWxpZGF0aW9u
LgogICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsOjpyZXZlcnRBdXRvSW5jcmVtZW50S2V5Q2FjaGUsIG9iamVjdFN0b3JlKSkpCiAgICAgICAg
IGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKQEAg
LTE2OCw3MiArMTk1LDEwMiBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnJldmVy
dEF1dG9JbmNyZW1lbnRLZXlDYWNoZShTY3JpcHRFeGVjdXRpb25Db250ZQogbmFtZXNwYWNlIHsK
IGNsYXNzIEluZGV4V3JpdGVyIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBJbmRleFdyaXRlcihQ
YXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4KQotICAgICAgICA6IG1faW5kZXgo
aW5kZXgpCi0gICAgewotICAgIH0KKyAgICBleHBsaWNpdCBJbmRleFdyaXRlcihjb25zdCBJREJJ
bmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhKQorICAgICAgICA6IG1faW5kZXhNZXRhZGF0YShp
bmRleE1ldGFkYXRhKQorICAgIHsgfQorCisgICAgSW5kZXhXcml0ZXIoY29uc3QgSURCSW5kZXhN
ZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSwKKyAgICAgICAgICAgICAgICBjb25zdCBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbnRlcmZhY2U6OkluZGV4S2V5cyYgaW5kZXhLZXlzKQorICAgICAgICA6IG1f
aW5kZXhNZXRhZGF0YShpbmRleE1ldGFkYXRhKQorICAgICAgICAsIG1faW5kZXhLZXlzKGluZGV4
S2V5cykKKyAgICB7IH0KIAotICAgIGJvb2wgbG9hZEluZGV4S2V5c0ZvclZhbHVlKFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZSogb2JqZWN0VmFsdWUsIGNvbnN0IElEQktleSogcHJpbWFyeUtleSA9IDAs
IFN0cmluZyogZXJyb3JNZXNzYWdlID0gMCkKKyAgICBib29sIGdlbmVyYXRlSW5kZXhLZXlzRm9y
VmFsdWUoU2VyaWFsaXplZFNjcmlwdFZhbHVlKiBvYmplY3RWYWx1ZSkKICAgICB7CiAgICAgICAg
IG1faW5kZXhLZXlzLmNsZWFyKCk7CiAKLSAgICAgICAgUmVmUHRyPElEQktleT4gaW5kZXhLZXkg
PSBmZXRjaEtleUZyb21LZXlQYXRoKG9iamVjdFZhbHVlLCBtX2luZGV4LT5rZXlQYXRoKCkpOwor
ICAgICAgICBSZWZQdHI8SURCS2V5PiBpbmRleEtleSA9IGZldGNoS2V5RnJvbUtleVBhdGgob2Jq
ZWN0VmFsdWUsIG1faW5kZXhNZXRhZGF0YS5rZXlQYXRoKTsKIAogICAgICAgICBpZiAoIWluZGV4
S2V5KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICAgICAgaWYgKCFtX2luZGV4LT5t
dWx0aUVudHJ5KCkgfHwgaW5kZXhLZXktPnR5cGUoKSAhPSBJREJLZXk6OkFycmF5VHlwZSkgewor
ICAgICAgICBpZiAoIW1faW5kZXhNZXRhZGF0YS5tdWx0aUVudHJ5IHx8IGluZGV4S2V5LT50eXBl
KCkgIT0gSURCS2V5OjpBcnJheVR5cGUpIHsKICAgICAgICAgICAgIGlmICghaW5kZXhLZXktPmlz
VmFsaWQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgICAgICAgICAgaWYg
KCFtX2luZGV4LT5hZGRpbmdLZXlBbGxvd2VkKGluZGV4S2V5LmdldCgpLCBwcmltYXJ5S2V5KSkg
ewotICAgICAgICAgICAgICAgIGlmIChlcnJvck1lc3NhZ2UpCi0gICAgICAgICAgICAgICAgICAg
ICplcnJvck1lc3NhZ2UgPSBTdHJpbmc6OmZvcm1hdCgiVW5hYmxlIHRvIGFkZCBrZXkgdG8gaW5k
ZXggJyVzJzogdGhlIGtleSBkb2VzIG5vdCBzYXRpc2Z5IGl0cyB1bmlxdWVuZXNzIHJlcXVpcmVt
ZW50cy4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbV9pbmRleC0+bmFtZSgpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1faW5kZXhLZXlzLmFwcGVuZChp
bmRleEtleSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQobV9pbmRleC0+
bXVsdGlFbnRyeSgpKTsKKyAgICAgICAgICAgIEFTU0VSVChtX2luZGV4TWV0YWRhdGEubXVsdGlF
bnRyeSk7CiAgICAgICAgICAgICBBU1NFUlQoaW5kZXhLZXktPnR5cGUoKSA9PSBJREJLZXk6OkFy
cmF5VHlwZSk7CiAgICAgICAgICAgICBpbmRleEtleSA9IElEQktleTo6Y3JlYXRlTXVsdGlFbnRy
eUFycmF5KGluZGV4S2V5LT5hcnJheSgpKTsKIAogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBpbmRleEtleS0+YXJyYXkoKS5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAg
IGlmICghbV9pbmRleC0+YWRkaW5nS2V5QWxsb3dlZChpbmRleEtleS0+YXJyYXkoKVtpXS5nZXQo
KSwgcHJpbWFyeUtleSkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yTWVzc2FnZSkK
LSAgICAgICAgICAgICAgICAgICAgICAgICplcnJvck1lc3NhZ2UgPSBTdHJpbmc6OmZvcm1hdCgi
VW5hYmxlIHRvIGFkZCBrZXkgdG8gaW5kZXggJyVzJzogYXQgbGVhc3Qgb25lIGtleSBkb2VzIG5v
dCBzYXRpc2Z5IHRoZSB1bmlxdWVuZXNzIHJlcXVpcmVtZW50cy4iLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXgtPm5hbWUoKS51
dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBtX2luZGV4S2V5cy5hcHBlbmQoaW5kZXhLZXkt
PmFycmF5KClbaV0pOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KIAotICAgIGJvb2wgd3JpdGVJbmRleEtleXMoY29uc3QgSURCQmFja2luZ1N0
b3JlOjpPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqIHJlY29yZElkZW50aWZpZXIsIElEQkJh
Y2tpbmdTdG9yZSYgYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgU3RyaW5nKiBlcnJvck1lc3NhZ2UgPSAwKQorICAgIGJvb2wgdmVyaWZ5SW5k
ZXhLZXlzKElEQkJhY2tpbmdTdG9yZSYgYmFja2luZ1N0b3JlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90
IGluZGV4SWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSURCS2V5KiBwcmltYXJ5
S2V5ID0gMCwgU3RyaW5nKiBlcnJvck1lc3NhZ2UgPSAwKQorICAgIHsKKyAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX2luZGV4S2V5cy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAg
aWYgKCFhZGRpbmdLZXlBbGxvd2VkKGJhY2tpbmdTdG9yZSwgZGF0YWJhc2VJZCwgb2JqZWN0U3Rv
cmVJZCwgaW5kZXhJZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobV9pbmRl
eEtleXMpW2ldLmdldCgpLCBwcmltYXJ5S2V5KSkgeworICAgICAgICAgICAgICAgIGlmIChlcnJv
ck1lc3NhZ2UpCisgICAgICAgICAgICAgICAgICAgICplcnJvck1lc3NhZ2UgPSBTdHJpbmc6OmZv
cm1hdCgiVW5hYmxlIHRvIGFkZCBrZXkgdG8gaW5kZXggJyVzJzogYXQgbGVhc3Qgb25lIGtleSBk
b2VzIG5vdCBzYXRpc2Z5IHRoZSB1bmlxdWVuZXNzIHJlcXVpcmVtZW50cy4iLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRleE1ldGFkYXRh
Lm5hbWUudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAg
IGJvb2wgd3JpdGVJbmRleEtleXMoY29uc3QgSURCQmFja2luZ1N0b3JlOjpPYmplY3RTdG9yZVJl
Y29yZElkZW50aWZpZXIqIHJlY29yZElkZW50aWZpZXIsIElEQkJhY2tpbmdTdG9yZSYgYmFja2lu
Z1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRf
dCBpbmRleElkKSBjb25zdAogICAgIHsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X2luZGV4S2V5cy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgaWYgKCFiYWNraW5nU3RvcmUu
ZGVsZXRlSW5kZXhEYXRhRm9yUmVjb3JkKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIG1faW5k
ZXgtPmlkKCksIHJlY29yZElkZW50aWZpZXIpKQorICAgICAgICAgICAgaWYgKCFiYWNraW5nU3Rv
cmUuZGVsZXRlSW5kZXhEYXRhRm9yUmVjb3JkKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGlu
ZGV4SWQsIHJlY29yZElkZW50aWZpZXIpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICAgIGlmICghYmFja2luZ1N0b3JlLnB1dEluZGV4RGF0YUZvclJlY29yZChkYXRh
YmFzZUlkLCBvYmplY3RTdG9yZUlkLCBtX2luZGV4LT5pZCgpLCAqbV9pbmRleEtleXNbaV0uZ2V0
KCksIHJlY29yZElkZW50aWZpZXIpKQorICAgICAgICAgICAgaWYgKCFiYWNraW5nU3RvcmUucHV0
SW5kZXhEYXRhRm9yUmVjb3JkKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsICoo
bV9pbmRleEtleXMpW2ldLmdldCgpLCByZWNvcmRJZGVudGlmaWVyKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
CisgICAgY29uc3QgU3RyaW5nJiBpbmRleE5hbWUoKSBjb25zdCB7IHJldHVybiBtX2luZGV4TWV0
YWRhdGEubmFtZTsgfQorCiBwcml2YXRlOgotICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBs
PiBtX2luZGV4OwotICAgIFZlY3RvcjxSZWZQdHI8SURCS2V5PiA+IG1faW5kZXhLZXlzOworCisg
ICAgYm9vbCBhZGRpbmdLZXlBbGxvd2VkKElEQkJhY2tpbmdTdG9yZSYgYmFja2luZ1N0b3JlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLAorICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBJREJLZXkqIGluZGV4S2V5LCBjb25zdCBJREJLZXkqIHByaW1hcnlLZXkpCisgICAgewor
ICAgICAgICBpZiAoIW1faW5kZXhNZXRhZGF0YS51bmlxdWUpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKworICAgICAgICBSZWZQdHI8SURCS2V5PiBmb3VuZFByaW1hcnlLZXk7CisgICAgICAg
IGJvb2wgZm91bmQgPSBiYWNraW5nU3RvcmUua2V5RXhpc3RzSW5JbmRleChkYXRhYmFzZUlkLCBv
YmplY3RTdG9yZUlkLCBpbmRleElkLCAqaW5kZXhLZXksIGZvdW5kUHJpbWFyeUtleSk7CisgICAg
ICAgIGlmICghZm91bmQpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKHBy
aW1hcnlLZXkgJiYgZm91bmRQcmltYXJ5S2V5LT5pc0VxdWFsKHByaW1hcnlLZXkpKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgY29u
c3QgSURCSW5kZXhNZXRhZGF0YSBtX2luZGV4TWV0YWRhdGE7CisgICAgSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleXMgbV9pbmRleEtleXM7CiB9OwogfQogCi12b2lkIElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQ
YXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcHJwVmFsdWUsIFBhc3NSZWZQdHI8SURC
S2V5PiBwcnBLZXksIFB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNh
bGxiYWNrcywgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5z
YWN0aW9uKQordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
PiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVl
LCBQYXNzUmVmUHRyPElEQktleT4gcHJwS2V5LCBQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlPiB0cmFuc2FjdGlvbiwgUGFzc093blB0cjxWZWN0b3I8U3RyaW5nPiA+IHBvcElu
ZGV4TmFtZXMsIFBhc3NPd25QdHI8VmVjdG9yPEluZGV4S2V5cz4gPiBwb3BJbmRleEtleXMpCiB7
CiAgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbCIp
OwogICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpICE9IElEQlRyYW5zYWN0aW9uOjpSRUFE
X09OTFkpOwogICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlID0gcHJwVmFs
dWU7CiAgICAgUmVmUHRyPElEQktleT4ga2V5ID0gcHJwS2V5OworICAgIE93blB0cjxWZWN0b3I8
U3RyaW5nPiA+IGluZGV4TmFtZXMgPSBwb3BJbmRleE5hbWVzOworICAgIE93blB0cjxWZWN0b3I8
SW5kZXhLZXlzPiA+IGluZGV4S2V5cyA9IHBvcEluZGV4S2V5czsKKyAgICBBU1NFUlQoKCFpbmRl
eE5hbWVzICYmICFpbmRleEtleXMpIHx8IGluZGV4TmFtZXMtPnNpemUoKSA9PSBpbmRleEtleXMt
PnNpemUoKSk7CiAKICAgICBpZiAocHV0TW9kZSAhPSBDdXJzb3JVcGRhdGUpIHsKICAgICAgICAg
Y29uc3QgYm9vbCBhdXRvSW5jcmVtZW50ID0gb2JqZWN0U3RvcmUtPmF1dG9JbmNyZW1lbnQoKTsK
QEAgLTI1MSw2ICszMDgsNyBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dElu
dGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPAogICAgICAgICAgICAg
ICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUiwgIk1heGltdW0ga2V5IGdlbmVyYXRvciB2YWx1ZSBy
ZWFjaGVkLiIpKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgd2hlbiBnZXQtc2lkZSBr
ZXkgaW5qZWN0aW9uIGlzIHRoZSBub3JtLgogICAgICAgICAgICAgICAgIGlmIChoYXNLZXlQYXRo
KSB7CiAgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZh
bHVlQWZ0ZXJJbmplY3Rpb24gPSBpbmplY3RLZXlJbnRvS2V5UGF0aChhdXRvSW5jS2V5LCB2YWx1
ZSwgb2JqZWN0U3RvcmUtPm1fa2V5UGF0aCk7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCh2
YWx1ZUFmdGVySW5qZWN0aW9uKTsKQEAgLTI4MCwxNSArMzM4LDMxIEBAIHZvaWQgSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBh
c3NSZWZQdHI8CiAgICAgfQogCiAgICAgVmVjdG9yPE93blB0cjxJbmRleFdyaXRlcj4gPiBpbmRl
eFdyaXRlcnM7CisgICAgSGFzaE1hcDxTdHJpbmcsIEluZGV4S2V5cz4gaW5kZXhLZXlNYXA7Cisg
ICAgaWYgKGluZGV4S2V5cykgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGluZGV4
TmFtZXMtPnNpemUoKTsgaSsrKQorICAgICAgICAgICAgaW5kZXhLZXlNYXAuYWRkKGluZGV4TmFt
ZXMtPmF0KGkpLCBpbmRleEtleXMtPmF0KGkpKTsKKyAgICB9CisKICAgICBmb3IgKEluZGV4TWFw
OjppdGVyYXRvciBpdCA9IG9iamVjdFN0b3JlLT5tX2luZGV4ZXMuYmVnaW4oKTsgaXQgIT0gb2Jq
ZWN0U3RvcmUtPm1faW5kZXhlcy5lbmQoKTsgKytpdCkgewogCiAgICAgICAgIGNvbnN0IFJlZlB0
cjxJREJJbmRleEJhY2tlbmRJbXBsPiYgaW5kZXggPSBpdC0+c2Vjb25kOwogICAgICAgICBpZiAo
IWluZGV4LT5oYXNWYWxpZElkKCkpCiAgICAgICAgICAgICBjb250aW51ZTsgLy8gVGhlIGluZGV4
IG9iamVjdCBoYXMgYmVlbiBjcmVhdGVkLCBidXQgZG9lcyBub3QgZXhpc3QgaW4gdGhlIGRhdGFi
YXNlIHlldC4KIAotICAgICAgICBPd25QdHI8SW5kZXhXcml0ZXI+IGluZGV4V3JpdGVyKGFkb3B0
UHRyKG5ldyBJbmRleFdyaXRlcihpbmRleCkpKTsKKyAgICAgICAgT3duUHRyPEluZGV4V3JpdGVy
PiBpbmRleFdyaXRlcjsKKyAgICAgICAgLy8gRklYTUU6IFR1cm4gdGhpcyBpbnRvIGFuIEFTU0VS
VChpbmRleEtleXMpIHdoZW4gZ2V0LXNpZGUga2V5IGluamVjdGlvbiBpcyB0aGUgbm9ybS4KKyAg
ICAgICAgaWYgKGluZGV4S2V5cykKKyAgICAgICAgICAgIGluZGV4V3JpdGVyID0gYWRvcHRQdHIo
bmV3IEluZGV4V3JpdGVyKGluZGV4LT5tZXRhZGF0YSgpLCBpbmRleEtleU1hcC5nZXQoaXQtPmZp
cnN0KSkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGluZGV4V3JpdGVyID0gYWRvcHRQ
dHIobmV3IEluZGV4V3JpdGVyKGluZGV4LT5tZXRhZGF0YSgpKSk7CisgICAgICAgICAgICBpbmRl
eFdyaXRlci0+Z2VuZXJhdGVJbmRleEtleXNGb3JWYWx1ZSh2YWx1ZS5nZXQoKSk7CisgICAgICAg
IH0KICAgICAgICAgU3RyaW5nIGVycm9yTWVzc2FnZTsKLSAgICAgICAgaWYgKCFpbmRleFdyaXRl
ci0+bG9hZEluZGV4S2V5c0ZvclZhbHVlKHZhbHVlLmdldCgpLCBrZXkuZ2V0KCksICZlcnJvck1l
c3NhZ2UpKSB7CisgICAgICAgIGlmICghaW5kZXhXcml0ZXItPnZlcmlmeUluZGV4S2V5cygqb2Jq
ZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdFN0b3JlLT5pZCgpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgtPmlkKCksIGtleS5nZXQoKSwgJmVy
cm9yTWVzc2FnZSkpIHsKICAgICAgICAgICAgIG9iamVjdFN0b3JlLT5yZXNldEF1dG9JbmNyZW1l
bnRLZXlDYWNoZSgpOwogICAgICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNl
RXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlIsIGVycm9yTWVzc2Fn
ZSkpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzA2LDkgKzM4MCwxMyBAQCB2b2lkIElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBQYXNzUmVmUHRyPAogICAgIH0KIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5kZXhX
cml0ZXJzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmICghaW5kZXhXcml0ZXJzW2ldLT53cml0
ZUluZGV4S2V5cyhyZWNvcmRJZGVudGlmaWVyLmdldCgpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKm9iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKSwgb2Jq
ZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG9iamVjdFN0b3JlLT5tX2lkKSkgeworICAgICAgICBJbmRleFdyaXRlciog
aW5kZXhXcml0ZXIgPSBpbmRleFdyaXRlcnNbaV0uZ2V0KCk7CisgICAgICAgIGlmICghaW5kZXhX
cml0ZXItPndyaXRlSW5kZXhLZXlzKHJlY29yZElkZW50aWZpZXIuZ2V0KCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpvYmplY3RTdG9yZS0+YmFja2luZ1N0b3Jl
KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdFN0b3Jl
LT5kYXRhYmFzZUlkKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG9iamVjdFN0b3JlLT5tX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBvYmplY3RTdG9yZS0+bV9pbmRleGVzLmdldChpbmRleFdyaXRlci0+aW5kZXhOYW1lKCkp
LT5pZCgpKSkgeworCiAgICAgICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VF
cnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVTktOT1dOX0VSUiwgIkVycm9yIHdy
aXRpbmcgZGF0YSB0byBzdGFibGUgc3RvcmFnZS4iKSk7CiAgICAgICAgICAgICB0cmFuc2FjdGlv
bi0+YWJvcnQoKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTM4MywzMyArNDYxLDM2IEBAIHZv
aWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y2xlYXJJbnRlcm5hbChTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgUGFzc1JlZlB0CiBuYW1lc3BhY2UgewogY2xhc3MgUG9wdWxhdGVJbmRleENh
bGxiYWNrIDogcHVibGljIElEQkJhY2tpbmdTdG9yZTo6T2JqZWN0U3RvcmVSZWNvcmRDYWxsYmFj
ayB7CiBwdWJsaWM6Ci0gICAgUG9wdWxhdGVJbmRleENhbGxiYWNrKElEQkJhY2tpbmdTdG9yZSYg
YmFja2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
UGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCkKKyAgICBQb3B1bGF0ZUluZGV4
Q2FsbGJhY2soSURCQmFja2luZ1N0b3JlJiBiYWNraW5nU3RvcmUsIGNvbnN0IElEQkluZGV4TWV0
YWRhdGEmIGluZGV4TWV0YWRhdGEsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpCiAgICAgICAgIDogbV9iYWNraW5nU3RvcmUoYmFja2lu
Z1N0b3JlKQogICAgICAgICAsIG1fZGF0YWJhc2VJZChkYXRhYmFzZUlkKQogICAgICAgICAsIG1f
b2JqZWN0U3RvcmVJZChvYmplY3RTdG9yZUlkKQotICAgICAgICAsIG1fd3JpdGVyKGluZGV4KQor
ICAgICAgICAsIG1faW5kZXhJZChpbmRleElkKQorICAgICAgICAsIG1fd3JpdGVyKGluZGV4TWV0
YWRhdGEpCiAgICAgewogICAgIH0KIAogICAgIHZpcnR1YWwgYm9vbCBjYWxsYmFjayhjb25zdCBJ
REJCYWNraW5nU3RvcmU6Ok9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciogcmVjb3JkSWRlbnRp
ZmllciwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICB7CiAgICAgICAgIFJlZlB0cjxTZXJpYWxp
emVkU2NyaXB0VmFsdWU+IG9iamVjdFZhbHVlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVh
dGVGcm9tV2lyZSh2YWx1ZSk7Ci0gICAgICAgIGlmICghbV93cml0ZXIubG9hZEluZGV4S2V5c0Zv
clZhbHVlKG9iamVjdFZhbHVlLmdldCgpKSkKKyAgICAgICAgbV93cml0ZXIuZ2VuZXJhdGVJbmRl
eEtleXNGb3JWYWx1ZShvYmplY3RWYWx1ZS5nZXQoKSk7CisgICAgICAgIGlmICghbV93cml0ZXIu
dmVyaWZ5SW5kZXhLZXlzKG1fYmFja2luZ1N0b3JlLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3Rv
cmVJZCwgbV9pbmRleElkKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0
dXJuIG1fd3JpdGVyLndyaXRlSW5kZXhLZXlzKHJlY29yZElkZW50aWZpZXIsIG1fYmFja2luZ1N0
b3JlLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCk7CisgICAgICAgIHJldHVybiBtX3dy
aXRlci53cml0ZUluZGV4S2V5cyhyZWNvcmRJZGVudGlmaWVyLCBtX2JhY2tpbmdTdG9yZSwgbV9k
YXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIG1faW5kZXhJZCk7CiAgICAgfQogCiBwcml2YXRl
OgogICAgIElEQkJhY2tpbmdTdG9yZSYgbV9iYWNraW5nU3RvcmU7CiAgICAgaW50NjRfdCBtX2Rh
dGFiYXNlSWQ7CiAgICAgaW50NjRfdCBtX29iamVjdFN0b3JlSWQ7CisgICAgaW50NjRfdCBtX2lu
ZGV4SWQ7CiAgICAgSW5kZXhXcml0ZXIgbV93cml0ZXI7CiB9OwogfQogCiBib29sIElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OnBvcHVsYXRlSW5kZXgoSURCQmFja2luZ1N0b3JlJiBiYWNraW5n
U3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVm
UHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4KQogewotICAgIFBvcHVsYXRlSW5kZXhDYWxs
YmFjayBjYWxsYmFjayhiYWNraW5nU3RvcmUsIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGlu
ZGV4KTsKKyAgICBQb3B1bGF0ZUluZGV4Q2FsbGJhY2sgY2FsbGJhY2soYmFja2luZ1N0b3JlLCBp
bmRleC0+bWV0YWRhdGEoKSwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXgtPmlkKCkp
OwogICAgIGlmICghYmFja2luZ1N0b3JlLmZvckVhY2hPYmplY3RTdG9yZVJlY29yZChkYXRhYmFz
ZUlkLCBvYmplY3RTdG9yZUlkLCBjYWxsYmFjaykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaAppbmRleCAxZTM5ZGRhYzMwNTFi
YTBjZGE5ZThkNWI5MTBjMTQ2Njc0ZjRiOWU5Li4xYzc0NWI1OTNkZmI0MDdkYzM1MGUyMjllY2Yx
MzBiMGM1MzY2N2E2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oCkBAIC02Nyw2ICs2Nyw3IEBA
IHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBnZXQoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4s
IFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
KiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBwdXQoUGFzc1JlZlB0cjxTZXJp
YWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQktleT4sIFB1dE1vZGUsIFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0
aW9uQ29kZSYpOworICAgIHZpcnR1YWwgdm9pZCBwdXRXaXRoSW5kZXhLZXlzKFBhc3NSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxJREJLZXk+LCBQdXRNb2RlLCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mLCBFeGNlcHRpb25D
b2RlJik7CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCS2V5
UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNl
cHRpb25Db2RlJik7CiAKQEAgLTkyLDcgKzkzLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlc2V0
QXV0b0luY3JlbWVudEtleUNhY2hlKCkgeyBtX2F1dG9JbmNyZW1lbnROdW1iZXIgPSAtMTsgfQog
CiAgICAgc3RhdGljIHZvaWQgZ2V0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBh
c3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCS2V5UmFu
Z2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOwotICAgIHN0YXRpYyB2b2lkIHB1dEludGVy
bmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw+LCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NSZWZQdHI8
SURCS2V5PiwgUHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4pOworICAgIHN0YXRpYyB2b2lkIHB1dEludGVy
bmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw+LCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NSZWZQdHI8
SURCS2V5PiwgUHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4sIFBhc3NPd25QdHI8VmVjdG9yPFN0cmluZz4g
PiBwb3BJbmRleE5hbWVzLCBQYXNzT3duUHRyPFZlY3RvcjxJbmRleEtleXM+ID4pOwogICAgIHN0
YXRpYyB2b2lkIGRlbGV0ZUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVm
UHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKICAgICBzdGF0aWMgdm9pZCBjbGVhckludGVybmFs
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOwogICAgIHN0YXRpYyB2b2lkIGNyZWF0
ZUluZGV4SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4sIFBh
c3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbnRl
cmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3Jl
QmFja2VuZEludGVyZmFjZS5oCmluZGV4IDA3ZjlmNzI2MGIyYWFiYWRhNDZkYjM2MDFhYTA0ZGIw
N2Q5Mzc3N2QuLjM3ZDNlZTBmOTQzMGRjNTA3YjA5NGUzNDBmODljMzllNGEwZDZkMzQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFj
a2VuZEludGVyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
Qk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZS5oCkBAIC01NSw3ICs1NSwxMCBAQCBwdWJsaWM6
CiAgICAgICAgIEFkZE9ubHksCiAgICAgICAgIEN1cnNvclVwZGF0ZQogICAgIH07CisgICAgdHlw
ZWRlZiBWZWN0b3I8UmVmUHRyPElEQktleT4gPiBJbmRleEtleXM7CisKICAgICB2aXJ0dWFsIHZv
aWQgcHV0KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxJREJL
ZXk+LCBQdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHB1
dFdpdGhJbmRleEtleXMoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVm
UHRyPElEQktleT4sIFB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBWZWN0
b3I8SW5kZXhLZXlzPiYsIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRl
bGV0ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSA9
IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgPSAwOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcAppbmRleCA2
MmQyOTIzNDAyNTAwNGM1OThkY2NhMmQwN2E2OTgyM2JhYzM4NGZlLi42M2E0OGJlOTM1YTVmYjQ2
ZDc1MmY3MTE1M2E2ZGI5NTAxOWI2ZDdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcApAQCAtMzMyLDYgKzMzMiw3IEBAIHZvaWQgSURCUmVx
dWVzdDo6b25TdWNjZXNzKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBwcnBTZXJp
YWxpemVkU2NyaXB0CiAgICAgUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSA9IHBycFByaW1hcnlL
ZXk7CiAgICAgUmVmUHRyPElEQktleT4gZXhwZWN0ZWRLZXkgPQogICAgICAgICAgICAgICBjcmVh
dGVJREJLZXlGcm9tU2VyaWFsaXplZFZhbHVlQW5kS2V5UGF0aChzZXJpYWxpemVkU2NyaXB0VmFs
dWUsIGtleVBhdGgpOworICAgIEFTU0VSVChwcmltYXJ5S2V5KTsKICAgICBBU1NFUlQoZXhwZWN0
ZWRLZXktPmlzRXF1YWwocHJpbWFyeUtleS5nZXQoKSkpOwogI2VuZGlmCiAgICAgb25TdWNjZXNz
KHNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5yZWxlYXNlKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSURCT2JqZWN0U3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYklEQk9iamVjdFN0b3JlLmgKaW5kZXggZWMxNTNhNzE5OWRkNjEx
NmNkNjY2ZTFlMTVkMmQyMGM5ZGNlNTVmNi4uOThjNDUxM2UyMTY0NzdiMDc1MzJhZDljMGU0Yzgx
MGU5NDIyN2I1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2Vi
SURCT2JqZWN0U3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJ
REJPYmplY3RTdG9yZS5oCkBAIC01MSw3ICs1MSwxMCBAQCBwdWJsaWM6CiAgICAgICAgIEN1cnNv
clVwZGF0ZQogICAgIH07CiAKKyAgICB0eXBlZGVmIFdlYlZlY3RvcjxXZWJJREJLZXk+IFdlYklu
ZGV4S2V5czsKKwogICAgIHZpcnR1YWwgdm9pZCBwdXQoY29uc3QgV2ViU2VyaWFsaXplZFNjcmlw
dFZhbHVlJiwgY29uc3QgV2ViSURCS2V5JiwgUHV0TW9kZSwgV2ViSURCQ2FsbGJhY2tzKiwgY29u
c3QgV2ViSURCVHJhbnNhY3Rpb24mLCBXZWJFeGNlcHRpb25Db2RlJikgeyBXRUJLSVRfQVNTRVJU
X05PVF9SRUFDSEVEKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcHV0V2l0aEluZGV4S2V5cyhjb25z
dCBXZWJTZXJpYWxpemVkU2NyaXB0VmFsdWUmLCBjb25zdCBXZWJJREJLZXkmLCBQdXRNb2RlLCBX
ZWJJREJDYWxsYmFja3MqLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYsIGNvbnN0IFdlYlZlY3Rv
cjxXZWJTdHJpbmc+JiwgY29uc3QgV2ViVmVjdG9yPFdlYkluZGV4S2V5cz4mLCBXZWJFeGNlcHRp
b25Db2RlJikgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KICAgICB2aXJ0dWFsIHZv
aWQgZGVsZXRlRnVuY3Rpb24oY29uc3QgV2ViSURCS2V5UmFuZ2UmLCBXZWJJREJDYWxsYmFja3Mq
LCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYsIFdlYkV4Y2VwdGlvbkNvZGUmKSB7IFdFQktJVF9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBjbGVhcihXZWJJREJDYWxs
YmFja3MqLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYsIFdlYkV4Y2VwdGlvbkNvZGUmKSB7IFdF
QktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogICAgIHZpcnR1YWwgV2ViSURCSW5kZXgqIGNy
ZWF0ZUluZGV4KGNvbnN0IFdlYlN0cmluZyYsIGNvbnN0IFdlYklEQktleVBhdGgmLCBib29sLCBi
b29sLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYsIFdlYkV4Y2VwdGlvbkNvZGUmKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJv
eHkuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCT2JqZWN0U3RvcmVCYWNrZW5k
UHJveHkuY3BwCmluZGV4IDQyZjgwOGM4NWI0NmFlNmFkOWU4OTM4MDIyNGMxNWE2MjZlNDUyMWQu
LjgyNjQwNzMzMGEwMjdhMTZkYjdmYjFjM2RjZDBlZmRjMWY0YjM1MTcgMTAwNzU1Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJPYmplY3RTdG9yZUJhY2tlbmRQcm94
eS5jcHAKQEAgLTc1LDYgKzc1LDE2IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHk6
OnB1dChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIFBhCiAgICAgbV93
ZWJJREJPYmplY3RTdG9yZS0+cHV0KHZhbHVlLCBrZXksIHN0YXRpY19jYXN0PFdlYklEQk9iamVj
dFN0b3JlOjpQdXRNb2RlPihwdXRNb2RlKSwgbmV3IFdlYklEQkNhbGxiYWNrc0ltcGwoY2FsbGJh
Y2tzKSwgKnRyYW5zYWN0aW9uUHJveHktPmdldFdlYklEQlRyYW5zYWN0aW9uKCksIGVjKTsKIH0K
IAordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eTo6cHV0V2l0aEluZGV4S2V5cyhQYXNz
UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBr
ZXksIFB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgY29uc3QgVmVjdG9y
PFN0cmluZz4mIGluZGV4TmFtZXMsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiBpbmRleEtleXMs
IEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIC8vIFRoZSB0cmFuc2FjdGlvbiBwb2ludGVyIGlz
IGd1YXJhbnRlZWQgdG8gYmUgYSBwb2ludGVyIHRvIGEgcHJveHkgb2JqZWN0IGFzLCBpbiB0aGUg
cmVuZGVyZXIsCisgICAgLy8gYWxsIGltcGxlbWVudGF0aW9ucyBvZiBJREIgaW50ZXJmYWNlcyBh
cmUgcHJveHkgb2JqZWN0cy4KKyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eSogdHJhbnNh
Y3Rpb25Qcm94eSA9IHN0YXRpY19jYXN0PElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5Kj4odHJh
bnNhY3Rpb24pOworICAgIFdlYlZlY3RvcjxXZWJTdHJpbmc+IHdlYkluZGV4TmFtZXMoaW5kZXhO
YW1lcyk7CisgICAgV2ViVmVjdG9yPEluZGV4S2V5cz4gd2ViSW5kZXhLZXlzKGluZGV4S2V5cyk7
CisgICAgbV93ZWJJREJPYmplY3RTdG9yZS0+cHV0V2l0aEluZGV4S2V5cyh2YWx1ZSwga2V5LCBz
dGF0aWNfY2FzdDxXZWJJREJPYmplY3RTdG9yZTo6UHV0TW9kZT4ocHV0TW9kZSksIG5ldyBXZWJJ
REJDYWxsYmFja3NJbXBsKGNhbGxiYWNrcyksICp0cmFuc2FjdGlvblByb3h5LT5nZXRXZWJJREJU
cmFuc2FjdGlvbigpLCB3ZWJJbmRleE5hbWVzLCB3ZWJJbmRleEtleXMsIGVjKTsKK30KKwogdm9p
ZCBJREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eTo6ZGVsZXRlRnVuY3Rpb24oUGFzc1JlZlB0cjxJ
REJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3Ms
IElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIEV4Y2VwdGlvbkNv
ZGUmIGVjKQogewogICAgIC8vIFRoZSB0cmFuc2FjdGlvbiBwb2ludGVyIGlzIGd1YXJhbnRlZWQg
dG8gYmUgYSBwb2ludGVyIHRvIGEgcHJveHkgb2JqZWN0IGFzLCBpbiB0aGUgcmVuZGVyZXIsCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJPYmplY3RTdG9yZUJhY2tl
bmRQcm94eS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCT2JqZWN0U3RvcmVCYWNr
ZW5kUHJveHkuaAppbmRleCBjNjY2YzlmYzc5ODJjYmFiNzNjNmI0Yjc4N2Y5N2MxYzljNDA0MDFi
Li5jNjQwMjhjZmZiNjBmMmQ4YTI0NGE3MTVjNzNjMGI3NjVhZWVmNDRjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eS5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5
LmgKQEAgLTQ1LDYgKzQ1LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGdldChQYXNz
UmVmUHRyPFdlYkNvcmU6OklEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJDYWxs
YmFja3M+LCBXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBXZWJDb3Jl
OjpFeGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2b2lkIHB1dChQYXNzUmVmUHRyPFdlYkNv
cmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCS2V5Piwg
UHV0TW9kZSwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJDYWxsYmFja3M+LCBXZWJDb3JlOjpJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBXZWJDb3JlOjpFeGNlcHRpb25Db2RlJik7Cisg
ICAgdmlydHVhbCB2b2lkIHB1dFdpdGhJbmRleEtleXMoUGFzc1JlZlB0cjxXZWJDb3JlOjpTZXJp
YWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQktleT4sIFB1dE1vZGUs
IFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ2FsbGJhY2tzPiwgV2ViQ29yZTo6SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlKiwgY29uc3QgV1RGOjpWZWN0b3I8V1RGOjpTdHJpbmc+JiwgY29u
c3QgV1RGOjpWZWN0b3I8SW5kZXhLZXlzPiYsIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUmKTsKICAg
ICB2aXJ0dWFsIHZvaWQgZGVsZXRlRnVuY3Rpb24oUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJLZXlS
YW5nZT4sIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ2FsbGJhY2tzPiwgV2ViQ29yZTo6SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSYpOwogICAg
IHZpcnR1YWwgdm9pZCBjbGVhcihQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkNhbGxiYWNrcz4sIFdl
YkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIFdlYkNvcmU6OkV4Y2VwdGlv
bkNvZGUmKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152626</attachid>
            <date>2012-07-16 15:40:59 -0700</date>
            <delta_ts>2012-07-16 16:59:00 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-90923-20120716154058.patch</filename>
            <type>text/plain</type>
            <size>30561</size>
            <attacher name="Alec Flett">alecflett</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyNzA2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzllODc0OThmYmU0MGU4
YjRiZmY1NDQ3YmU0ODgyNDU1YmZjZDBmNS4uMjI0Yzg3NzUzYzJiZjFhN2ZkMjg0YzdmYjFhMmFj
ZTdiZGFkMWRhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDEyLTA3LTEwICBBbGVj
IEZsZXR0ICA8YWxlY2ZsZXR0QGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IElu
dHJvZHVjZSBwdXRXaXRoSW5kZXhLZXlzIGFuZCBjYWxjdWxhdGUgdGhlbSBpbiB0aGUgcmVuZGVy
ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwOTIz
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gRmlzaGVyLgorCisgICAgICAgIFJlZmFjdG9y
IEluZGV4V3JpdGVyIHRvIGRlcGVuZCBvbmx5IG9uIElEQkluZGV4TWV0YWRhdGEgYW5kIG9uCisg
ICAgICAgIChkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkKSBzbyB0aGF0IGl0IGNh
biB0YWxrIGRpcmVjdGx5CisgICAgICAgIHRvIHRoZSBiYWNraW5nIHN0b3JlLCBhbmQgYWxzbyBl
dmVudHVhbGx5IGJlIG1vdmVkIGludG8gdGhlIHJlbmRlcmVyLgorCisgICAgICAgIFRoaXMgYWxz
byBpbnRyb2R1Y2VzIElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6cHV0V2l0aEluZGV4
S2V5cworICAgICAgICBhcyBhIHJlcGxhY2VtZW50IGZvciBJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bnRlcmZhY2U6OnB1dCwgYWxyZWFkeQorICAgICAgICBzdHViYmVkIG91dCBpbiB0aGUgY2hyb21p
dW0gcG9ydC4gSXQgd2lsbCBmdWxseSByZXBsYWNlIHB1dCgpCisgICAgICAgIGFmdGVyIGJvdGgg
Y2hyb21pdW0gYW5kIHdlYmtpdCBzaWRlcyBoYXZlIHJlYWNoZWQgYWxpZ25tZW50LgorCisgICAg
ICAgIE5vIG5ldyB0ZXN0cyBhcyB0aGlzIGlzIGp1c3QgYSByZWZhY3RvciBhbmQgZXhpc3Rpbmcg
dGVzdHMgY292ZXIKKyAgICAgICAgY29ycmVjdG5lc3MuCisKKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJDdXJzb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yOjpzZXRW
YWx1ZVJlYWR5KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJ
bXBsLmNwcDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBs
Lmg6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaDoKKyAgICAg
ICAgKElEQk9iamVjdFN0b3JlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6OnB1dCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dFdpdGhJbmRleEtleXMpOgorICAgICAgICAo
V2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cG9wdWxhdGVJbmRleCk6Cisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oOgor
ICAgICAgICAoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCk6CisgICAgICAgICogTW9kdWxlcy9p
bmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmg6CisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1
ZXN0OjpvblN1Y2Nlc3MpOgorCiAyMDEyLTA3LTE2ICBFdWdlbmUgS2x5dWNobmlrb3YgIDxldXN0
YXMuYmlnQGdtYWlsLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBJbXBsZW1lbnQgbWVz
c2FnZSBsb29wIGluc3RydW1lbnRhdGlvbiBmb3IgdGltZWxpbmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cKaW5kZXggY2EwMDQ5MTY4ZGRlNjU1ZGY4ZGQ5MDcyZmQwZmRmMTE1ZWFiYTBlOC4uM2Vm
OWQwZTEzM2U5NDllOTYxZTg5N2MxMjIwOTcyYzQyNGYxOWEyMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwyMSBAQAorMjAxMi0wNy0xMCAgQWxlYyBGbGV0dCAgPGFsZWNm
bGV0dEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBJbnRyb2R1Y2UgcHV0V2l0
aEluZGV4S2V5cyBhbmQgY2FsY3VsYXRlIHRoZW0gaW4gdGhlIHJlbmRlcmVyCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDkyMworCisgICAgICAgIFJl
dmlld2VkIGJ5IERhcmluIEZpc2hlci4KKworICAgICAgICBTdHViIG91dCBpbXBsZW1lbnRhdGlv
bnMgb2YgcHV0V2l0aEluZGV4S2V5cygpLCBhbHJlYWR5IGltcGxlbWVudGVkCisgICAgICAgIG9u
IHRoZSBjaHJvbWl1bSBzaWRlLgorCisgICAgICAgICogcHVibGljL1dlYklEQk9iamVjdFN0b3Jl
Lmg6CisgICAgICAgIChXZWJLaXQ6OldlYklEQk9iamVjdFN0b3JlOjpwdXRXaXRoSW5kZXhLZXlz
KToKKyAgICAgICAgKiBzcmMvSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHkuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpJREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eTo6cHV0V2l0aEluZGV4S2V5cyk6
CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAqIHNyYy9JREJPYmplY3RTdG9yZUJhY2tlbmRQ
cm94eS5oOgorICAgICAgICAoSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHkpOgorCiAyMDEyLTA3
LTEzICBFcmljIFBlbm5lciAgPGVwZW5uZXJAZ29vZ2xlLmNvbT4KIAogICAgICAgICBbY2hyb21p
dW1dIEFkZCAnc2VsZi1tYW5hZ2VkJyBvcHRpb24gdG8gQ0NQcmlvcml0aXplZFRleHR1cmUgdG8g
ZW5hYmxlIHJlbmRlci1zdXJmYWNlIGFuZCBjYW52YXMgdXNlIGNhc2VzLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHAKaW5kZXggNWU5MDI1MTEyZWU2
YmI5Y2Q5ODgwNTk1YTI5MGU2MjkzZWNiN2EyOS4uNmUyODY5MWFmMGI3NzE2YzkwNjU2Yzg2YjVj
ODg3MDQ1YzdiNTdlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCQ3Vyc29yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJDdXJzb3IuY3BwCkBAIC0yNzYsNiArMjc2LDcgQEAgdm9pZCBJREJDdXJzb3I6OnNldFZhbHVl
UmVhZHkoKQogICAgICAgICBpZiAob2JqZWN0U3RvcmUtPmF1dG9JbmNyZW1lbnQoKSAmJiAhb2Jq
ZWN0U3RvcmUtPm1ldGFkYXRhKCkua2V5UGF0aC5pc051bGwoKSkgewogICAgICAgICAgICAgY29u
c3QgSURCS2V5UGF0aCYga2V5UGF0aCA9IG9iamVjdFN0b3JlLT5tZXRhZGF0YSgpLmtleVBhdGg7
CiAgICAgICAgICAgICBSZWZQdHI8SURCS2V5PiBleHBlY3RlZEtleSA9IGNyZWF0ZUlEQktleUZy
b21TZXJpYWxpemVkVmFsdWVBbmRLZXlQYXRoKHZhbHVlLCBrZXlQYXRoKTsKKyAgICAgICAgICAg
IEFTU0VSVChtX2N1cnJlbnRQcmltYXJ5S2V5KTsKICAgICAgICAgICAgIEFTU0VSVChleHBlY3Rl
ZEtleS0+aXNFcXVhbChtX2N1cnJlbnRQcmltYXJ5S2V5LmdldCgpKSk7CiAgICAgICAgIH0KICAg
ICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRl
eEJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQklu
ZGV4QmFja2VuZEltcGwuY3BwCmluZGV4IGEwODdlNmFhZjJmNTI0MjM1Zjg1MDdhNmVmNDhlNWIy
ZWM3ZDllZTcuLmFmZGI3ZWMzYzZkNDVlZDczZmY3NTcxNWQ2NDViMmFmYjQ3MGFmM2IgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZElt
cGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFj
a2VuZEltcGwuY3BwCkBAIC0yMTksMjAgKzIxOSw2IEBAIHZvaWQgSURCSW5kZXhCYWNrZW5kSW1w
bDo6Z2V0S2V5KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHBycEtleVJhbmdlLCBQYXNzUmVmUHRy
CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZF
X0VSUjsKIH0KIAotYm9vbCBJREJJbmRleEJhY2tlbmRJbXBsOjphZGRpbmdLZXlBbGxvd2VkKGNv
bnN0IElEQktleSogaW5kZXhLZXksIGNvbnN0IElEQktleSogcHJpbWFyeUtleSkKLXsKLSAgICBp
ZiAoIW1fdW5pcXVlKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIFJlZlB0cjxJREJLZXk+
IGZvdW5kUHJpbWFyeUtleTsKLSAgICBib29sIGZvdW5kID0gYmFja2luZ1N0b3JlKCktPmtleUV4
aXN0c0luSW5kZXgoZGF0YWJhc2VJZCgpLCBtX29iamVjdFN0b3JlQmFja2VuZC0+aWQoKSwgbV9p
ZCwgKmluZGV4S2V5LCBmb3VuZFByaW1hcnlLZXkpOwotICAgIGlmICghZm91bmQpCi0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIGlmIChwcmltYXJ5S2V5ICYmIGZvdW5kUHJpbWFyeUtleS0+aXNF
cXVhbChwcmltYXJ5S2V5KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkluZGV4QmFja2VuZEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkluZGV4QmFja2VuZEltcGwuaAppbmRleCA5ODM4NTEyOGYyOGJhY2E1NDUzNjkxMTNmYWQ2
OTIxMGMyMzUwMWZiLi5mODQxYTk1ODM3MjQ0YzJmZDA4Mjg4MDRhNjkwMTM0NGQ4NWE1MjVjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tl
bmRJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhC
YWNrZW5kSW1wbC5oCkBAIC02MSw4ICs2MSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldElkKGlu
dDY0X3QgaWQpIHsgbV9pZCA9IGlkOyB9CiAgICAgYm9vbCBoYXNWYWxpZElkKCkgY29uc3QgeyBy
ZXR1cm4gbV9pZCAhPSBJbnZhbGlkSWQ7IH07CiAKLSAgICBib29sIGFkZGluZ0tleUFsbG93ZWQo
Y29uc3QgSURCS2V5KiBpbmRleEtleSwgY29uc3QgSURCS2V5KiBwcmltYXJ5S2V5ID0gMCk7Ci0K
ICAgICAvLyBJbXBsZW1lbnRzIElEQkluZGV4QmFja2VuZEludGVyZmFjZS4KICAgICB2aXJ0dWFs
IElEQkluZGV4TWV0YWRhdGEgbWV0YWRhdGEoKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmgKaW5kZXggNjdiMzZmOTk1NTE3
YTliODRkMmExYzIyNTI0OTU4ZmNkYWE0ODRjZS4uZWY3YzA2M2I4ZjgyMjY0MTdhN2JmZjhmMmZl
MTM2OTgyNDNiODUzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCT2JqZWN0U3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJPYmplY3RTdG9yZS5oCkBAIC0xMDIsNiArMTAyLDkgQEAgcHVibGljOgogICAgIElEQk9i
amVjdFN0b3JlTWV0YWRhdGEgbWV0YWRhdGEoKSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhOyB9
CiAgICAgdm9pZCBzZXRNZXRhZGF0YShjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBtZXRh
ZGF0YSkgeyBtX21ldGFkYXRhID0gbWV0YWRhdGE7IH0KIAorICAgIHR5cGVkZWYgVmVjdG9yPFJl
ZlB0cjxJREJLZXk+ID4gSW5kZXhLZXlzOworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIElu
ZGV4S2V5cz4gSW5kZXhLZXlNYXA7CisKIHByaXZhdGU6CiAgICAgSURCT2JqZWN0U3RvcmUoY29u
c3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW50ZXJmYWNlPiwgSURCVHJhbnNhY3Rpb24qKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
LmNwcAppbmRleCA0NzRjZGViNWI1YTJjODg0MWExZmNhZGY5OGZmNjIzMjJmZGYwNGRjLi43MmU3
MGFmNzdkMDcxM2IxNTA1NmUzNjg0NzMxNmJmN2VjY2RhMzYwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsLmNwcApAQCAtMTQxLDkgKzE0MSwxMSBAQCBzdGF0aWMgUGFzc1JlZlB0cjxTZXJpYWxp
emVkU2NyaXB0VmFsdWU+IGluamVjdEtleUludG9LZXlQYXRoKFBhc3NSZWZQdHI8SURCS2V5Pgog
ICAgIHJldHVybiBJREJLZXlQYXRoQmFja2VuZEltcGw6OmluamVjdElEQktleUludG9TZXJpYWxp
emVkVmFsdWUoa2V5LCB2YWx1ZSwga2V5UGF0aCk7CiB9CiAKKy8vIEZJWE1FOiBSZW1vdmUgdGhp
cyBtZXRob2Qgd2hlbiBnZXQtc2lkZSBrZXkgaW5qZWN0aW9uIGlzIHRoZSBub3JtLgogdm9pZCBJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IHBycFZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4gcHJwS2V5LCBQdXRNb2RlIHB1dE1v
ZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewog
ICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0Iik7CisgICAgSURC
X1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRXaXRoSW5kZXhLZXlzIik7CiAK
ICAgICBBU1NFUlQodHJhbnNhY3Rpb25QdHItPm1vZGUoKSAhPSBJREJUcmFuc2FjdGlvbjo6UkVB
RF9PTkxZKTsKIApAQCAtMTUzLDggKzE1NSwzMyBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6OnB1dChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcHJwVmFsdWUsCiAg
ICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOwogICAgIFJl
ZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uID0gdHJhbnNh
Y3Rpb25QdHI7CiAKKyAgICAvLyBOdWxsIHBvaW50ZXJzIGhlcmUgc2lnbmlmeSB0aGF0IGluZGV4
IGtleXMgc2hvdWxkIGJlIGdlbmVyYXRlZCBhcyBhIHBhcnQgb2YgdGhpcyBwdXQuCisgICAgT3du
UHRyPFZlY3RvcjxTdHJpbmc+ID4gbnVsbEluZGV4TmFtZXM7CisgICAgT3duUHRyPFZlY3RvcjxJ
bmRleEtleXM+ID4gbnVsbEluZGV4S2V5czsKICAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVs
ZVRhc2soCi0gICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJklEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OnB1dEludGVybmFsLCBvYmplY3RTdG9yZSwgdmFsdWUsIGtleSwgcHV0TW9kZSwg
Y2FsbGJhY2tzLCB0cmFuc2FjdGlvbiksCisgICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2so
JklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsLCBvYmplY3RTdG9yZSwgdmFs
dWUsIGtleSwgcHV0TW9kZSwgY2FsbGJhY2tzLCB0cmFuc2FjdGlvbiwgbnVsbEluZGV4TmFtZXMu
cmVsZWFzZSgpLCBudWxsSW5kZXhLZXlzLnJlbGVhc2UoKSksCisgICAgICAgICAgICAvLyBGSVhN
RTogT25lIG9mIHRoZXNlIHBlciBwdXQoKSBpcyBvdmVya2lsbCwgc2luY2UgaXQncyBzaW1wbHkg
YSBjYWNoZSBpbnZhbGlkYXRpb24uCisgICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJklE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnJldmVydEF1dG9JbmNyZW1lbnRLZXlDYWNoZSwgb2Jq
ZWN0U3RvcmUpKSkKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJ
T05fSU5BQ1RJVkVfRVJSOworfQorCit2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1
dFdpdGhJbmRleEtleXMoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVl
LCBQYXNzUmVmUHRyPElEQktleT4gcHJwS2V5LCBQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZSogdHJhbnNhY3Rpb25QdHIsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBpbmRleE5hbWVzLCBjb25z
dCBWZWN0b3I8SW5kZXhLZXlzPiYgaW5kZXhLZXlzLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAg
ICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dFdpdGhJbmRleEtleXMi
KTsKKworICAgIEFTU0VSVCh0cmFuc2FjdGlvblB0ci0+bW9kZSgpICE9IElEQlRyYW5zYWN0aW9u
OjpSRUFEX09OTFkpOworCisgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9i
amVjdFN0b3JlID0gdGhpczsKKyAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1
ZSA9IHBycFZhbHVlOworICAgIFJlZlB0cjxJREJLZXk+IGtleSA9IHBycEtleTsKKyAgICBSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7CisgICAgUmVmUHRyPElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvblB0
cjsKKworICAgIE93blB0cjxWZWN0b3I8U3RyaW5nPiA+IG5ld0luZGV4TmFtZXMgPSBhZG9wdFB0
cihuZXcgVmVjdG9yPFN0cmluZz4oaW5kZXhOYW1lcykpOworICAgIE93blB0cjxWZWN0b3I8SW5k
ZXhLZXlzPiA+IG5ld0luZGV4S2V5cyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8SW5kZXhLZXlzPihp
bmRleEtleXMpKTsKKworICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzaygKKyAgICAg
ICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0
SW50ZXJuYWwsIG9iamVjdFN0b3JlLCB2YWx1ZSwga2V5LCBwdXRNb2RlLCBjYWxsYmFja3MsIHRy
YW5zYWN0aW9uLCBuZXdJbmRleE5hbWVzLnJlbGVhc2UoKSwgbmV3SW5kZXhLZXlzLnJlbGVhc2Uo
KSksCiAgICAgICAgICAgICAvLyBGSVhNRTogT25lIG9mIHRoZXNlIHBlciBwdXQoKSBpcyBvdmVy
a2lsbCwgc2luY2UgaXQncyBzaW1wbHkgYSBjYWNoZSBpbnZhbGlkYXRpb24uCiAgICAgICAgICAg
ICBjcmVhdGVDYWxsYmFja1Rhc2soJklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnJldmVydEF1
dG9JbmNyZW1lbnRLZXlDYWNoZSwgb2JqZWN0U3RvcmUpKSkKICAgICAgICAgZWMgPSBJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOwpAQCAtMTY4LDcyICsxOTUs
MTAyIEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cmV2ZXJ0QXV0b0luY3JlbWVu
dEtleUNhY2hlKFNjcmlwdEV4ZWN1dGlvbkNvbnRlCiBuYW1lc3BhY2UgewogY2xhc3MgSW5kZXhX
cml0ZXIgewogcHVibGljOgotICAgIGV4cGxpY2l0IEluZGV4V3JpdGVyKFBhc3NSZWZQdHI8SURC
SW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgpCi0gICAgICAgIDogbV9pbmRleChpbmRleCkKLSAgICB7
Ci0gICAgfQorICAgIGV4cGxpY2l0IEluZGV4V3JpdGVyKGNvbnN0IElEQkluZGV4TWV0YWRhdGEm
IGluZGV4TWV0YWRhdGEpCisgICAgICAgIDogbV9pbmRleE1ldGFkYXRhKGluZGV4TWV0YWRhdGEp
CisgICAgeyB9CisKKyAgICBJbmRleFdyaXRlcihjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRl
eE1ldGFkYXRhLAorICAgICAgICAgICAgICAgIGNvbnN0IElEQk9iamVjdFN0b3JlQmFja2VuZElu
dGVyZmFjZTo6SW5kZXhLZXlzJiBpbmRleEtleXMpCisgICAgICAgIDogbV9pbmRleE1ldGFkYXRh
KGluZGV4TWV0YWRhdGEpCisgICAgICAgICwgbV9pbmRleEtleXMoaW5kZXhLZXlzKQorICAgIHsg
fQogCi0gICAgYm9vbCBsb2FkSW5kZXhLZXlzRm9yVmFsdWUoU2VyaWFsaXplZFNjcmlwdFZhbHVl
KiBvYmplY3RWYWx1ZSwgY29uc3QgSURCS2V5KiBwcmltYXJ5S2V5ID0gMCwgU3RyaW5nKiBlcnJv
ck1lc3NhZ2UgPSAwKQorICAgIGJvb2wgZ2VuZXJhdGVJbmRleEtleXNGb3JWYWx1ZShTZXJpYWxp
emVkU2NyaXB0VmFsdWUqIG9iamVjdFZhbHVlKQogICAgIHsKICAgICAgICAgbV9pbmRleEtleXMu
Y2xlYXIoKTsKIAotICAgICAgICBSZWZQdHI8SURCS2V5PiBpbmRleEtleSA9IGZldGNoS2V5RnJv
bUtleVBhdGgob2JqZWN0VmFsdWUsIG1faW5kZXgtPmtleVBhdGgoKSk7CisgICAgICAgIFJlZlB0
cjxJREJLZXk+IGluZGV4S2V5ID0gZmV0Y2hLZXlGcm9tS2V5UGF0aChvYmplY3RWYWx1ZSwgbV9p
bmRleE1ldGFkYXRhLmtleVBhdGgpOwogCiAgICAgICAgIGlmICghaW5kZXhLZXkpCiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKIAotICAgICAgICBpZiAoIW1faW5kZXgtPm11bHRpRW50cnkoKSB8
fCBpbmRleEtleS0+dHlwZSgpICE9IElEQktleTo6QXJyYXlUeXBlKSB7CisgICAgICAgIGlmICgh
bV9pbmRleE1ldGFkYXRhLm11bHRpRW50cnkgfHwgaW5kZXhLZXktPnR5cGUoKSAhPSBJREJLZXk6
OkFycmF5VHlwZSkgewogICAgICAgICAgICAgaWYgKCFpbmRleEtleS0+aXNWYWxpZCgpKQogICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgICAgICAgICBpZiAoIW1faW5kZXgtPmFk
ZGluZ0tleUFsbG93ZWQoaW5kZXhLZXkuZ2V0KCksIHByaW1hcnlLZXkpKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKGVycm9yTWVzc2FnZSkKLSAgICAgICAgICAgICAgICAgICAgKmVycm9yTWVzc2Fn
ZSA9IFN0cmluZzo6Zm9ybWF0KCJVbmFibGUgdG8gYWRkIGtleSB0byBpbmRleCAnJXMnOiB0aGUg
a2V5IGRvZXMgbm90IHNhdGlzZnkgaXRzIHVuaXF1ZW5lc3MgcmVxdWlyZW1lbnRzLiIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luZGV4LT5u
YW1lKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgfQogICAgICAgICAgICAgbV9pbmRleEtleXMuYXBwZW5kKGluZGV4S2V5KTsKICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVChtX2luZGV4LT5tdWx0aUVudHJ5KCkp
OworICAgICAgICAgICAgQVNTRVJUKG1faW5kZXhNZXRhZGF0YS5tdWx0aUVudHJ5KTsKICAgICAg
ICAgICAgIEFTU0VSVChpbmRleEtleS0+dHlwZSgpID09IElEQktleTo6QXJyYXlUeXBlKTsKICAg
ICAgICAgICAgIGluZGV4S2V5ID0gSURCS2V5OjpjcmVhdGVNdWx0aUVudHJ5QXJyYXkoaW5kZXhL
ZXktPmFycmF5KCkpOwogCiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGluZGV4
S2V5LT5hcnJheSgpLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFtX2luZGV4
LT5hZGRpbmdLZXlBbGxvd2VkKGluZGV4S2V5LT5hcnJheSgpW2ldLmdldCgpLCBwcmltYXJ5S2V5
KSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3JNZXNzYWdlKQotICAgICAgICAgICAg
ICAgICAgICAgICAgKmVycm9yTWVzc2FnZSA9IFN0cmluZzo6Zm9ybWF0KCJVbmFibGUgdG8gYWRk
IGtleSB0byBpbmRleCAnJXMnOiBhdCBsZWFzdCBvbmUga2V5IGRvZXMgbm90IHNhdGlzZnkgdGhl
IHVuaXF1ZW5lc3MgcmVxdWlyZW1lbnRzLiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRleC0+bmFtZSgpLnV0ZjgoKS5kYXRhKCkp
OwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIG1faW5kZXhLZXlzLmFwcGVuZChpbmRleEtleS0+YXJyYXkoKVtpXSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
Ci0gICAgYm9vbCB3cml0ZUluZGV4S2V5cyhjb25zdCBJREJCYWNraW5nU3RvcmU6Ok9iamVjdFN0
b3JlUmVjb3JkSWRlbnRpZmllciogcmVjb3JkSWRlbnRpZmllciwgSURCQmFja2luZ1N0b3JlJiBi
YWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBT
dHJpbmcqIGVycm9yTWVzc2FnZSA9IDApCisgICAgYm9vbCB2ZXJpZnlJbmRleEtleXMoSURCQmFj
a2luZ1N0b3JlJiBiYWNraW5nU3RvcmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJREJLZXkqIHByaW1hcnlLZXkgPSAwLCBTdHJp
bmcqIGVycm9yTWVzc2FnZSA9IDApCisgICAgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG1faW5kZXhLZXlzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAoIWFkZGluZ0tl
eUFsbG93ZWQoYmFja2luZ1N0b3JlLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElk
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtX2luZGV4S2V5cylbaV0uZ2V0
KCksIHByaW1hcnlLZXkpKSB7CisgICAgICAgICAgICAgICAgaWYgKGVycm9yTWVzc2FnZSkKKyAg
ICAgICAgICAgICAgICAgICAgKmVycm9yTWVzc2FnZSA9IFN0cmluZzo6Zm9ybWF0KCJVbmFibGUg
dG8gYWRkIGtleSB0byBpbmRleCAnJXMnOiBhdCBsZWFzdCBvbmUga2V5IGRvZXMgbm90IHNhdGlz
ZnkgdGhlIHVuaXF1ZW5lc3MgcmVxdWlyZW1lbnRzLiIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luZGV4TWV0YWRhdGEubmFtZS51dGY4KCku
ZGF0YSgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgYm9vbCB3cml0ZUlu
ZGV4S2V5cyhjb25zdCBJREJCYWNraW5nU3RvcmU6Ok9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmll
ciogcmVjb3JkSWRlbnRpZmllciwgSURCQmFja2luZ1N0b3JlJiBiYWNraW5nU3RvcmUsIGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpIGNv
bnN0CiAgICAgewogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1faW5kZXhLZXlzLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoIWJhY2tpbmdTdG9yZS5kZWxldGVJbmRleERh
dGFGb3JSZWNvcmQoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgbV9pbmRleC0+aWQoKSwgcmVj
b3JkSWRlbnRpZmllcikpCisgICAgICAgICAgICBpZiAoIWJhY2tpbmdTdG9yZS5kZWxldGVJbmRl
eERhdGFGb3JSZWNvcmQoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgcmVjb3Jk
SWRlbnRpZmllcikpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
aWYgKCFiYWNraW5nU3RvcmUucHV0SW5kZXhEYXRhRm9yUmVjb3JkKGRhdGFiYXNlSWQsIG9iamVj
dFN0b3JlSWQsIG1faW5kZXgtPmlkKCksICptX2luZGV4S2V5c1tpXS5nZXQoKSwgcmVjb3JkSWRl
bnRpZmllcikpCisgICAgICAgICAgICBpZiAoIWJhY2tpbmdTdG9yZS5wdXRJbmRleERhdGFGb3JS
ZWNvcmQoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgKihtX2luZGV4S2V5cylb
aV0uZ2V0KCksIHJlY29yZElkZW50aWZpZXIpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKKyAgICBjb25zdCBT
dHJpbmcmIGluZGV4TmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXhNZXRhZGF0YS5uYW1lOyB9
CisKIHByaXZhdGU6Ci0gICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IG1faW5kZXg7Ci0g
ICAgVmVjdG9yPFJlZlB0cjxJREJLZXk+ID4gbV9pbmRleEtleXM7CisKKyAgICBib29sIGFkZGlu
Z0tleUFsbG93ZWQoSURCQmFja2luZ1N0b3JlJiBiYWNraW5nU3RvcmUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBp
bnQ2NF90IGluZGV4SWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElEQktleSog
aW5kZXhLZXksIGNvbnN0IElEQktleSogcHJpbWFyeUtleSkKKyAgICB7CisgICAgICAgIGlmICgh
bV9pbmRleE1ldGFkYXRhLnVuaXF1ZSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
ICAgIFJlZlB0cjxJREJLZXk+IGZvdW5kUHJpbWFyeUtleTsKKyAgICAgICAgYm9vbCBmb3VuZCA9
IGJhY2tpbmdTdG9yZS5rZXlFeGlzdHNJbkluZGV4KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQs
IGluZGV4SWQsICppbmRleEtleSwgZm91bmRQcmltYXJ5S2V5KTsKKyAgICAgICAgaWYgKCFmb3Vu
ZCkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAocHJpbWFyeUtleSAmJiBm
b3VuZFByaW1hcnlLZXktPmlzRXF1YWwocHJpbWFyeUtleSkpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBjb25zdCBJREJJbmRleE1l
dGFkYXRhIG1faW5kZXhNZXRhZGF0YTsKKyAgICBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZh
Y2U6OkluZGV4S2V5cyBtX2luZGV4S2V5czsKIH07CiB9CiAKLXZvaWQgSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQ
dHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IHBycEtleSwg
UHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNz
UmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24pCit2b2lk
IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3Jl
LCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcHJwVmFsdWUsIFBhc3NSZWZQdHI8
SURCS2V5PiBwcnBLZXksIFB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRy
YW5zYWN0aW9uLCBQYXNzT3duUHRyPFZlY3RvcjxTdHJpbmc+ID4gcG9wSW5kZXhOYW1lcywgUGFz
c093blB0cjxWZWN0b3I8SW5kZXhLZXlzPiA+IHBvcEluZGV4S2V5cykKIHsKICAgICBJREJfVFJB
Q0UoIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsIik7CiAgICAgQVNTRVJU
KHRyYW5zYWN0aW9uLT5tb2RlKCkgIT0gSURCVHJhbnNhY3Rpb246OlJFQURfT05MWSk7CiAgICAg
UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUgPSBwcnBWYWx1ZTsKICAgICBSZWZQ
dHI8SURCS2V5PiBrZXkgPSBwcnBLZXk7CisgICAgT3duUHRyPFZlY3RvcjxTdHJpbmc+ID4gaW5k
ZXhOYW1lcyA9IHBvcEluZGV4TmFtZXM7CisgICAgT3duUHRyPFZlY3RvcjxJbmRleEtleXM+ID4g
aW5kZXhLZXlzID0gcG9wSW5kZXhLZXlzOworICAgIEFTU0VSVCgoIWluZGV4TmFtZXMgJiYgIWlu
ZGV4S2V5cykgfHwgaW5kZXhOYW1lcy0+c2l6ZSgpID09IGluZGV4S2V5cy0+c2l6ZSgpKTsKIAog
ICAgIGlmIChwdXRNb2RlICE9IEN1cnNvclVwZGF0ZSkgewogICAgICAgICBjb25zdCBib29sIGF1
dG9JbmNyZW1lbnQgPSBvYmplY3RTdG9yZS0+YXV0b0luY3JlbWVudCgpOwpAQCAtMjUxLDYgKzMw
OCw3IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8CiAgICAgICAgICAgICAgICAgICAgIGNhbGxi
YWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRp
b246OkRBVEFfRVJSLCAiTWF4aW11bSBrZXkgZ2VuZXJhdG9yIHZhbHVlIHJlYWNoZWQuIikpOwog
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyB3aGVuIGdldC1zaWRlIGtleSBpbmplY3Rpb24g
aXMgdGhlIG5vcm0uCiAgICAgICAgICAgICAgICAgaWYgKGhhc0tleVBhdGgpIHsKICAgICAgICAg
ICAgICAgICAgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWVBZnRlckluamVj
dGlvbiA9IGluamVjdEtleUludG9LZXlQYXRoKGF1dG9JbmNLZXksIHZhbHVlLCBvYmplY3RTdG9y
ZS0+bV9rZXlQYXRoKTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHZhbHVlQWZ0ZXJJbmpl
Y3Rpb24pOwpAQCAtMjgwLDE1ICszMzgsMzEgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsOjpwdXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjwKICAg
ICB9CiAKICAgICBWZWN0b3I8T3duUHRyPEluZGV4V3JpdGVyPiA+IGluZGV4V3JpdGVyczsKKyAg
ICBIYXNoTWFwPFN0cmluZywgSW5kZXhLZXlzPiBpbmRleEtleU1hcDsKKyAgICBpZiAoaW5kZXhL
ZXlzKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5kZXhOYW1lcy0+c2l6ZSgp
OyArK2kpCisgICAgICAgICAgICBpbmRleEtleU1hcC5hZGQoaW5kZXhOYW1lcy0+YXQoaSksIGlu
ZGV4S2V5cy0+YXQoaSkpOworICAgIH0KKwogICAgIGZvciAoSW5kZXhNYXA6Oml0ZXJhdG9yIGl0
ID0gb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5iZWdpbigpOyBpdCAhPSBvYmplY3RTdG9yZS0+bV9p
bmRleGVzLmVuZCgpOyArK2l0KSB7CiAKICAgICAgICAgY29uc3QgUmVmUHRyPElEQkluZGV4QmFj
a2VuZEltcGw+JiBpbmRleCA9IGl0LT5zZWNvbmQ7CiAgICAgICAgIGlmICghaW5kZXgtPmhhc1Zh
bGlkSWQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBUaGUgaW5kZXggb2JqZWN0IGhhcyBi
ZWVuIGNyZWF0ZWQsIGJ1dCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgZGF0YWJhc2UgeWV0LgogCi0g
ICAgICAgIE93blB0cjxJbmRleFdyaXRlcj4gaW5kZXhXcml0ZXIoYWRvcHRQdHIobmV3IEluZGV4
V3JpdGVyKGluZGV4KSkpOworICAgICAgICBPd25QdHI8SW5kZXhXcml0ZXI+IGluZGV4V3JpdGVy
OworICAgICAgICAvLyBGSVhNRTogVHVybiB0aGlzIGludG8gYW4gQVNTRVJUKGluZGV4S2V5cykg
d2hlbiBnZXQtc2lkZSBrZXkgaW5qZWN0aW9uIGlzIHRoZSBub3JtLgorICAgICAgICBpZiAoaW5k
ZXhLZXlzKQorICAgICAgICAgICAgaW5kZXhXcml0ZXIgPSBhZG9wdFB0cihuZXcgSW5kZXhXcml0
ZXIoaW5kZXgtPm1ldGFkYXRhKCksIGluZGV4S2V5TWFwLmdldChpdC0+Zmlyc3QpKSk7CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgaW5kZXhXcml0ZXIgPSBhZG9wdFB0cihuZXcgSW5kZXhX
cml0ZXIoaW5kZXgtPm1ldGFkYXRhKCkpKTsKKyAgICAgICAgICAgIGluZGV4V3JpdGVyLT5nZW5l
cmF0ZUluZGV4S2V5c0ZvclZhbHVlKHZhbHVlLmdldCgpKTsKKyAgICAgICAgfQogICAgICAgICBT
dHJpbmcgZXJyb3JNZXNzYWdlOwotICAgICAgICBpZiAoIWluZGV4V3JpdGVyLT5sb2FkSW5kZXhL
ZXlzRm9yVmFsdWUodmFsdWUuZ2V0KCksIGtleS5nZXQoKSwgJmVycm9yTWVzc2FnZSkpIHsKKyAg
ICAgICAgaWYgKCFpbmRleFdyaXRlci0+dmVyaWZ5SW5kZXhLZXlzKCpvYmplY3RTdG9yZS0+YmFj
a2luZ1N0b3JlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
YmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgb2JqZWN0U3RvcmUtPmlkKCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbmRleC0+aWQoKSwga2V5LmdldCgpLCAmZXJyb3JNZXNzYWdlKSkg
ewogICAgICAgICAgICAgb2JqZWN0U3RvcmUtPnJlc2V0QXV0b0luY3JlbWVudEtleUNhY2hlKCk7
CiAgICAgICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRl
KElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUiwgZXJyb3JNZXNzYWdlKSk7CiAgICAgICAg
ICAgICByZXR1cm47CkBAIC0zMDYsOSArMzgwLDEzIEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6cHV0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8
CiAgICAgfQogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbmRleFdyaXRlcnMuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgaWYgKCFpbmRleFdyaXRlcnNbaV0tPndyaXRlSW5kZXhLZXlzKHJl
Y29yZElkZW50aWZpZXIuZ2V0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAqb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLCBvYmplY3RTdG9yZS0+ZGF0
YWJhc2VJZCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b2JqZWN0U3RvcmUtPm1faWQpKSB7CisgICAgICAgIEluZGV4V3JpdGVyKiBpbmRleFdyaXRlciA9
IGluZGV4V3JpdGVyc1tpXS5nZXQoKTsKKyAgICAgICAgaWYgKCFpbmRleFdyaXRlci0+d3JpdGVJ
bmRleEtleXMocmVjb3JkSWRlbnRpZmllci5nZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKm9iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQo
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0U3RvcmUt
Pm1faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdFN0
b3JlLT5tX2luZGV4ZXMuZ2V0KGluZGV4V3JpdGVyLT5pbmRleE5hbWUoKSktPmlkKCkpKSB7CisK
ICAgICAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUo
SURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJSLCAiRXJyb3Igd3JpdGluZyBkYXRhIHRv
IHN0YWJsZSBzdG9yYWdlLiIpKTsKICAgICAgICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydCgpOwog
ICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzgzLDMzICs0NjEsMzYgQEAgdm9pZCBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpjbGVhckludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQ
YXNzUmVmUHQKIG5hbWVzcGFjZSB7CiBjbGFzcyBQb3B1bGF0ZUluZGV4Q2FsbGJhY2sgOiBwdWJs
aWMgSURCQmFja2luZ1N0b3JlOjpPYmplY3RTdG9yZVJlY29yZENhbGxiYWNrIHsKIHB1YmxpYzoK
LSAgICBQb3B1bGF0ZUluZGV4Q2FsbGJhY2soSURCQmFja2luZ1N0b3JlJiBiYWNraW5nU3RvcmUs
IGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElE
QkluZGV4QmFja2VuZEltcGw+IGluZGV4KQorICAgIFBvcHVsYXRlSW5kZXhDYWxsYmFjayhJREJC
YWNraW5nU3RvcmUmIGJhY2tpbmdTdG9yZSwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhN
ZXRhZGF0YSwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0
X3QgaW5kZXhJZCkKICAgICAgICAgOiBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUpCiAgICAg
ICAgICwgbV9kYXRhYmFzZUlkKGRhdGFiYXNlSWQpCiAgICAgICAgICwgbV9vYmplY3RTdG9yZUlk
KG9iamVjdFN0b3JlSWQpCi0gICAgICAgICwgbV93cml0ZXIoaW5kZXgpCisgICAgICAgICwgbV9p
bmRleElkKGluZGV4SWQpCisgICAgICAgICwgbV93cml0ZXIoaW5kZXhNZXRhZGF0YSkKICAgICB7
CiAgICAgfQogCiAgICAgdmlydHVhbCBib29sIGNhbGxiYWNrKGNvbnN0IElEQkJhY2tpbmdTdG9y
ZTo6T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKiByZWNvcmRJZGVudGlmaWVyLCBjb25zdCBT
dHJpbmcmIHZhbHVlKQogICAgIHsKICAgICAgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZT4gb2JqZWN0VmFsdWUgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZUZyb21XaXJlKHZh
bHVlKTsKLSAgICAgICAgaWYgKCFtX3dyaXRlci5sb2FkSW5kZXhLZXlzRm9yVmFsdWUob2JqZWN0
VmFsdWUuZ2V0KCkpKQorICAgICAgICBtX3dyaXRlci5nZW5lcmF0ZUluZGV4S2V5c0ZvclZhbHVl
KG9iamVjdFZhbHVlLmdldCgpKTsKKyAgICAgICAgaWYgKCFtX3dyaXRlci52ZXJpZnlJbmRleEtl
eXMobV9iYWNraW5nU3RvcmUsIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCBtX2luZGV4
SWQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gbV93cml0ZXIu
d3JpdGVJbmRleEtleXMocmVjb3JkSWRlbnRpZmllciwgbV9iYWNraW5nU3RvcmUsIG1fZGF0YWJh
c2VJZCwgbV9vYmplY3RTdG9yZUlkKTsKKyAgICAgICAgcmV0dXJuIG1fd3JpdGVyLndyaXRlSW5k
ZXhLZXlzKHJlY29yZElkZW50aWZpZXIsIG1fYmFja2luZ1N0b3JlLCBtX2RhdGFiYXNlSWQsIG1f
b2JqZWN0U3RvcmVJZCwgbV9pbmRleElkKTsKICAgICB9CiAKIHByaXZhdGU6CiAgICAgSURCQmFj
a2luZ1N0b3JlJiBtX2JhY2tpbmdTdG9yZTsKICAgICBpbnQ2NF90IG1fZGF0YWJhc2VJZDsKICAg
ICBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJZDsKKyAgICBpbnQ2NF90IG1faW5kZXhJZDsKICAgICBJ
bmRleFdyaXRlciBtX3dyaXRlcjsKIH07CiB9CiAKIGJvb2wgSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6cG9wdWxhdGVJbmRleChJREJCYWNraW5nU3RvcmUmIGJhY2tpbmdTdG9yZSwgaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCSW5kZXhC
YWNrZW5kSW1wbD4gaW5kZXgpCiB7Ci0gICAgUG9wdWxhdGVJbmRleENhbGxiYWNrIGNhbGxiYWNr
KGJhY2tpbmdTdG9yZSwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXgpOworICAgIFBv
cHVsYXRlSW5kZXhDYWxsYmFjayBjYWxsYmFjayhiYWNraW5nU3RvcmUsIGluZGV4LT5tZXRhZGF0
YSgpLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleC0+aWQoKSk7CiAgICAgaWYgKCFi
YWNraW5nU3RvcmUuZm9yRWFjaE9iamVjdFN0b3JlUmVjb3JkKGRhdGFiYXNlSWQsIG9iamVjdFN0
b3JlSWQsIGNhbGxiYWNrKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiB0cnVl
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oCmluZGV4IDFlMzlkZGFjMzA1MWJhMGNkYTllOGQ1Yjkx
MGMxNDY2NzRmNGI5ZTkuLjFjNzQ1YjU5M2RmYjQwN2RjMzUwZTIyOWVjZjEzMGIwYzUzNjY3YTYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0
b3JlQmFja2VuZEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgKQEAgLTY3LDYgKzY3LDcgQEAgcHVibGljOgogCiAg
ICAgdmlydHVhbCB2b2lkIGdldChQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25D
b2RlJik7CiAgICAgdmlydHVhbCB2b2lkIHB1dChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4sIFBhc3NSZWZQdHI8SURCS2V5PiwgUHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJik7Cisg
ICAgdmlydHVhbCB2b2lkIHB1dFdpdGhJbmRleEtleXMoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2Ny
aXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQktleT4sIFB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgY29uc3QgVmVjdG9yPFN0
cmluZz4mLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2
aXJ0dWFsIHZvaWQgZGVsZXRlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhj
ZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBjbGVhcihQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsK
IApAQCAtOTIsNyArOTMsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVzZXRBdXRvSW5jcmVtZW50
S2V5Q2FjaGUoKSB7IG1fYXV0b0luY3JlbWVudE51bWJlciA9IC0xOyB9CiAKICAgICBzdGF0aWMg
dm9pZCBnZXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPik7Ci0gICAgc3RhdGljIHZvaWQgcHV0SW50ZXJuYWwoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBh
c3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxJREJLZXk+LCBQdXRN
b2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlPik7CisgICAgc3RhdGljIHZvaWQgcHV0SW50ZXJuYWwoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBh
c3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxJREJLZXk+LCBQdXRN
b2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlPiwgUGFzc093blB0cjxWZWN0b3I8U3RyaW5nPiA+IHBvcEluZGV4TmFt
ZXMsIFBhc3NPd25QdHI8VmVjdG9yPEluZGV4S2V5cz4gPik7CiAgICAgc3RhdGljIHZvaWQgZGVs
ZXRlSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4pOwogICAgIHN0YXRpYyB2b2lkIGNsZWFySW50ZXJuYWwoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPik7CiAgICAgc3RhdGljIHZvaWQgY3JlYXRlSW5kZXhJbnRlcm5h
bChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsPiwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZS5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJm
YWNlLmgKaW5kZXggMDdmOWY3MjYwYjJhYWJhZGE0NmRiMzYwMWFhMDRkYjA3ZDkzNzc3ZC4uMzdk
M2VlMGY5NDMwZGM1MDdiMDk0ZTM0MGY4OWMzOWU0YTBkNmQzNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW50ZXJmYWNlLmgKQEAgLTU1LDcgKzU1LDEwIEBAIHB1YmxpYzoKICAgICAgICAgQWRk
T25seSwKICAgICAgICAgQ3Vyc29yVXBkYXRlCiAgICAgfTsKKyAgICB0eXBlZGVmIFZlY3RvcjxS
ZWZQdHI8SURCS2V5PiA+IEluZGV4S2V5czsKKwogICAgIHZpcnR1YWwgdm9pZCBwdXQoUGFzc1Jl
ZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQktleT4sIFB1dE1vZGUs
IFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
KiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcHV0V2l0aEluZGV4S2V5
cyhQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NSZWZQdHI8SURCS2V5Piwg
UHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2UqLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+
JiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRnVuY3Rpb24o
UGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKIAogICAgIHZp
cnR1YWwgdm9pZCBjbGVhcihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwCmluZGV4IDYyZDI5MjM0MDI1MDA0
YzU5OGRjY2EyZDA3YTY5ODIzYmFjMzg0ZmUuLjYzYTQ4YmU5MzVhNWZiNDZkNzUyZjcxMTUzYTZk
Yjk1MDE5YjZkN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQlJlcXVlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QlJlcXVlc3QuY3BwCkBAIC0zMzIsNiArMzMyLDcgQEAgdm9pZCBJREJSZXF1ZXN0OjpvblN1Y2Nl
c3MoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFNlcmlhbGl6ZWRTY3JpcHQK
ICAgICBSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5ID0gcHJwUHJpbWFyeUtleTsKICAgICBSZWZQ
dHI8SURCS2V5PiBleHBlY3RlZEtleSA9CiAgICAgICAgICAgICAgIGNyZWF0ZUlEQktleUZyb21T
ZXJpYWxpemVkVmFsdWVBbmRLZXlQYXRoKHNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSwga2V5UGF0aCk7
CisgICAgQVNTRVJUKHByaW1hcnlLZXkpOwogICAgIEFTU0VSVChleHBlY3RlZEtleS0+aXNFcXVh
bChwcmltYXJ5S2V5LmdldCgpKSk7CiAjZW5kaWYKICAgICBvblN1Y2Nlc3Moc2VyaWFsaXplZFNj
cmlwdFZhbHVlLnJlbGVhc2UoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJJREJPYmplY3RTdG9yZS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViSURCT2JqZWN0U3RvcmUuaAppbmRleCBlYzE1M2E3MTk5ZGQ2MTE2Y2Q2NjZlMWUxNWQy
ZDIwYzlkY2U1NWY2Li4zODkzYzk1OTUzODkzNThhOTEzNmYzYTE5NWYzZmZhODg0MjVkM2IzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJPYmplY3RTdG9y
ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklEQk9iamVjdFN0b3Jl
LmgKQEAgLTUxLDcgKzUxLDEwIEBAIHB1YmxpYzoKICAgICAgICAgQ3Vyc29yVXBkYXRlCiAgICAg
fTsKIAorICAgIHR5cGVkZWYgV2ViVmVjdG9yPFdlYklEQktleT4gV2ViSW5kZXhLZXlzOworCiAg
ICAgdmlydHVhbCB2b2lkIHB1dChjb25zdCBXZWJTZXJpYWxpemVkU2NyaXB0VmFsdWUmLCBjb25z
dCBXZWJJREJLZXkmLCBQdXRNb2RlLCBXZWJJREJDYWxsYmFja3MqLCBjb25zdCBXZWJJREJUcmFu
c2FjdGlvbiYsIFdlYkV4Y2VwdGlvbkNvZGUmKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsgfQorICAgIHZpcnR1YWwgdm9pZCBwdXRXaXRoSW5kZXhLZXlzKGNvbnN0IFdlYlNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZSYsIGNvbnN0IFdlYklEQktleSYsIFB1dE1vZGUsIFdlYklEQkNhbGxiYWNr
cyosIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiwgY29uc3QgV2ViVmVjdG9yPFdlYlN0cmluZz4m
IGluZGV4TmFtZXMsIGNvbnN0IFdlYlZlY3RvcjxXZWJJbmRleEtleXM+JiwgV2ViRXhjZXB0aW9u
Q29kZSYpIHsgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAgICAgdmlydHVhbCB2b2lk
IGRlbGV0ZUZ1bmN0aW9uKGNvbnN0IFdlYklEQktleVJhbmdlJiwgV2ViSURCQ2FsbGJhY2tzKiwg
Y29uc3QgV2ViSURCVHJhbnNhY3Rpb24mLCBXZWJFeGNlcHRpb25Db2RlJikgeyBXRUJLSVRfQVNT
RVJUX05PVF9SRUFDSEVEKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoV2ViSURCQ2FsbGJh
Y2tzKiwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mLCBXZWJFeGNlcHRpb25Db2RlJikgeyBXRUJL
SVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KICAgICB2aXJ0dWFsIFdlYklEQkluZGV4KiBjcmVh
dGVJbmRleChjb25zdCBXZWJTdHJpbmcmLCBjb25zdCBXZWJJREJLZXlQYXRoJiwgYm9vbCwgYm9v
bCwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mLCBXZWJFeGNlcHRpb25Db2RlJikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5
LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQk9iamVjdFN0b3JlQmFja2VuZFBy
b3h5LmNwcAppbmRleCA0MmY4MDhjODViNDZhZTZhZDllODkzODAyMjRjMTVhNjI2ZTQ1MjFkLi44
MjY0MDczMzBhMDI3YTE2ZGI3ZmIxYzNkY2QwZWZkYzFmNGIzNTE3IDEwMDc1NQotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eS5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHku
Y3BwCkBAIC03NSw2ICs3NSwxNiBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5Ojpw
dXQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlLCBQYQogICAgIG1fd2Vi
SURCT2JqZWN0U3RvcmUtPnB1dCh2YWx1ZSwga2V5LCBzdGF0aWNfY2FzdDxXZWJJREJPYmplY3RT
dG9yZTo6UHV0TW9kZT4ocHV0TW9kZSksIG5ldyBXZWJJREJDYWxsYmFja3NJbXBsKGNhbGxiYWNr
cyksICp0cmFuc2FjdGlvblByb3h5LT5nZXRXZWJJREJUcmFuc2FjdGlvbigpLCBlYyk7CiB9CiAK
K3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHk6OnB1dFdpdGhJbmRleEtleXMoUGFzc1Jl
ZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5
LCBQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBpbmRleE5hbWVzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYgaW5kZXhLZXlzLCBF
eGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICAvLyBUaGUgdHJhbnNhY3Rpb24gcG9pbnRlciBpcyBn
dWFyYW50ZWVkIHRvIGJlIGEgcG9pbnRlciB0byBhIHByb3h5IG9iamVjdCBhcywgaW4gdGhlIHJl
bmRlcmVyLAorICAgIC8vIGFsbCBpbXBsZW1lbnRhdGlvbnMgb2YgSURCIGludGVyZmFjZXMgYXJl
IHByb3h5IG9iamVjdHMuCisgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkqIHRyYW5zYWN0
aW9uUHJveHkgPSBzdGF0aWNfY2FzdDxJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eSo+KHRyYW5z
YWN0aW9uKTsKKyAgICBXZWJWZWN0b3I8V2ViU3RyaW5nPiB3ZWJJbmRleE5hbWVzKGluZGV4TmFt
ZXMpOworICAgIFdlYlZlY3RvcjxJbmRleEtleXM+IHdlYkluZGV4S2V5cyhpbmRleEtleXMpOwor
ICAgIG1fd2ViSURCT2JqZWN0U3RvcmUtPnB1dFdpdGhJbmRleEtleXModmFsdWUsIGtleSwgc3Rh
dGljX2Nhc3Q8V2ViSURCT2JqZWN0U3RvcmU6OlB1dE1vZGU+KHB1dE1vZGUpLCBuZXcgV2ViSURC
Q2FsbGJhY2tzSW1wbChjYWxsYmFja3MpLCAqdHJhbnNhY3Rpb25Qcm94eS0+Z2V0V2ViSURCVHJh
bnNhY3Rpb24oKSwgd2ViSW5kZXhOYW1lcywgd2ViSW5kZXhLZXlzLCBlYyk7Cit9CisKIHZvaWQg
SURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHk6OmRlbGV0ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURC
S2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBFeGNlcHRpb25Db2Rl
JiBlYykKIHsKICAgICAvLyBUaGUgdHJhbnNhY3Rpb24gcG9pbnRlciBpcyBndWFyYW50ZWVkIHRv
IGJlIGEgcG9pbnRlciB0byBhIHByb3h5IG9iamVjdCBhcywgaW4gdGhlIHJlbmRlcmVyLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCT2JqZWN0U3RvcmVCYWNrZW5k
UHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQk9iamVjdFN0b3JlQmFja2Vu
ZFByb3h5LmgKaW5kZXggYzY2NmM5ZmM3OTgyY2JhYjczYzZiNGI3ODdmOTdjMWM5YzQwNDAxYi4u
YzY0MDI4Y2ZmYjYwZjJkOGEyNDRhNzE1YzczYzBiNzY1YWVlZjQ0YyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHkuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eS5o
CkBAIC00NSw2ICs0NSw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBnZXQoUGFzc1Jl
ZlB0cjxXZWJDb3JlOjpJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ2FsbGJh
Y2tzPiwgV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgV2ViQ29yZTo6
RXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBwdXQoUGFzc1JlZlB0cjxXZWJDb3Jl
OjpTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQktleT4sIFB1
dE1vZGUsIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ2FsbGJhY2tzPiwgV2ViQ29yZTo6SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSYpOworICAg
IHZpcnR1YWwgdm9pZCBwdXRXaXRoSW5kZXhLZXlzKFBhc3NSZWZQdHI8V2ViQ29yZTo6U2VyaWFs
aXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJLZXk+LCBQdXRNb2RlLCBQ
YXNzUmVmUHRyPFdlYkNvcmU6OklEQkNhbGxiYWNrcz4sIFdlYkNvcmU6OklEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZSosIGNvbnN0IFdURjo6VmVjdG9yPFdURjo6U3RyaW5nPiYsIGNvbnN0
IFdURjo6VmVjdG9yPEluZGV4S2V5cz4mLCBXZWJDb3JlOjpFeGNlcHRpb25Db2RlJik7CiAgICAg
dmlydHVhbCB2b2lkIGRlbGV0ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCS2V5UmFu
Z2U+LCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkNhbGxiYWNrcz4sIFdlYkNvcmU6OklEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZSosIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUmKTsKICAgICB2
aXJ0dWFsIHZvaWQgY2xlYXIoUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJDYWxsYmFja3M+LCBXZWJD
b3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBXZWJDb3JlOjpFeGNlcHRpb25D
b2RlJik7CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>