<?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>103580</bug_id>
          
          <creation_ts>2012-11-28 17:13:39 -0800</creation_ts>
          <short_desc>IndexedDB: Propagate more leveldb errors to script</short_desc>
          <delta_ts>2012-11-29 18:23:14 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>103688</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="David Grogan">dgrogan</reporter>
          <assigned_to name="David Grogan">dgrogan</assigned_to>
          <cc>alecflett</cc>
    
    <cc>dglazkov</cc>
    
    <cc>gtk-ews</cc>
    
    <cc>jsbell</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>778515</commentid>
    <comment_count>0</comment_count>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2012-11-28 17:13:39 -0800</bug_when>
    <thetext>IndexedDB: Propagate more leveldb errors to script</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778541</commentid>
    <comment_count>1</comment_count>
      <attachid>176613</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2012-11-28 17:39:23 -0800</bug_when>
    <thetext>Created attachment 176613
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778546</commentid>
    <comment_count>2</comment_count>
      <attachid>176613</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-28 17:43:36 -0800</bug_when>
    <thetext>Comment on attachment 176613
Patch

Attachment 176613 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/15016617</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778575</commentid>
    <comment_count>3</comment_count>
      <attachid>176621</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2012-11-28 18:15:14 -0800</bug_when>
    <thetext>Created attachment 176621
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778583</commentid>
    <comment_count>4</comment_count>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2012-11-28 18:22:43 -0800</bug_when>
    <thetext>Josh or Alec, could you take a look at this? I fear that one of you had considered this approach and rejected it for a reason not yet apparent to me.

Do either of you know of any other source of leveldb errors that we don&apos;t propagate?

I haven&apos;t thought hard about a test yet but I&apos;m hoping a webkit unit test will be easy and a browser test won&apos;t be necessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>779240</commentid>
    <comment_count>5</comment_count>
      <attachid>176621</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-11-29 11:30:42 -0800</bug_when>
    <thetext>Comment on attachment 176621
Patch

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

&gt; Source/WebCore/Modules/indexeddb/IDBBackingStore.cpp:726
&gt; +        LOG_ERROR(&quot;Leveldb had problems looking up keyGeneratorCurrentNumberKey&quot;);

Can this use InternalError(IDBLevelDBBackingStoreReadError) ?

&gt; Source/WebCore/Modules/indexeddb/IDBBackingStore.cpp:770
&gt; +            LOG_ERROR(&quot;Disk error in getKeyGeneratorCurrentNumber&quot;);

InternalError(...)?

&gt; Source/WebCore/Modules/indexeddb/IDBBackingStore.h:84
&gt; +    virtual bool getKeyGeneratorCurrentNumber(IDBBackingStore::Transaction*, int64_t databaseId, int64_t objectStoreId, int64_t&amp; currentNumber);

We should mark this with WARN_UNUSED_RETURN (or add a FIXME to do so), here and any other places where we&apos;re returning success/failure.

&gt; Source/WebCore/Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:235
&gt; +        LOG_ERROR(&quot;keyExistsInObjectStore ran in to some corruption&quot;);

Should the backingStore take care of logging/histograms/etc, and leave the consequences (i.e. abort, etc) to the caller?

&gt; Source/WebCore/Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:236
&gt; +        transaction-&gt;abort();

Can we pass a reason (IDBDatabaseError) to the abort? Or is the default good enough?

&gt; Source/WebCore/Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:338
&gt; +            callbacks-&gt;onError(IDBDatabaseError::create(IDBDatabaseException::UNKNOWN_ERR, &quot;Disk Error&quot;));

I&apos;d be careful about calling it a disk error; don&apos;t want to blame the hardware if it&apos;s a software issue!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>779251</commentid>
    <comment_count>6</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-11-29 11:41:28 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; Josh or Alec, could you take a look at this? I fear that one of you had considered this approach and rejected it for a reason not yet apparent to me.

I think this is the right direction. Reading over old email threads, I think the big picture is:

* DEFINITELY: Propagate I/O errors up from all read/write points; never drop them on the floor
* DEFINITELY: Abort the transaction when an I/O error occurs
* MAYBE: Consider closing the connection when an I/O error occurs.
* MAYBE: Consider closing all other connections using the same backing store (i.e. in the same origin) when an I/O error occurs

This patch is part of the first two bullets - seems the best place to start.

&gt; Do either of you know of any other source of leveldb errors that we don&apos;t propagate?

From old email, just a note saying &quot;the error from LevelDBTransaction::get() is not propagated up through IDBLevelDBBackingStore::getObjectStoreRecord(). Right now, dummy data is returned with no indication this is the case.&quot; and &quot;there are more instances of the above, where errors are not propagated through - e.g. getNewObjectStoreId - we need to catch all of these&quot; - but I didn&apos;t have a list, just noticed a few skimming the code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>779257</commentid>
    <comment_count>7</comment_count>
      <attachid>176621</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2012-11-29 11:47:20 -0800</bug_when>
    <thetext>Comment on attachment 176621
Patch

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

Thanks for taking a look. This approach passing your smoke test enough for you to comment gives me more confidence to proceed.

&gt;&gt; Source/WebCore/Modules/indexeddb/IDBBackingStore.cpp:726
&gt;&gt; +        LOG_ERROR(&quot;Leveldb had problems looking up keyGeneratorCurrentNumberKey&quot;);
&gt; 
&gt; Can this use InternalError(IDBLevelDBBackingStoreReadError) ?

Yes, it should.

&gt;&gt; Source/WebCore/Modules/indexeddb/IDBBackingStore.cpp:770
&gt;&gt; +            LOG_ERROR(&quot;Disk error in getKeyGeneratorCurrentNumber&quot;);
&gt; 
&gt; InternalError(...)?

Will do.

&gt;&gt; Source/WebCore/Modules/indexeddb/IDBBackingStore.h:84
&gt;&gt; +    virtual bool getKeyGeneratorCurrentNumber(IDBBackingStore::Transaction*, int64_t databaseId, int64_t objectStoreId, int64_t&amp; currentNumber);
&gt; 
&gt; We should mark this with WARN_UNUSED_RETURN (or add a FIXME to do so), here and any other places where we&apos;re returning success/failure.

Agreed.

&gt;&gt; Source/WebCore/Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:235
&gt;&gt; +        LOG_ERROR(&quot;keyExistsInObjectStore ran in to some corruption&quot;);
&gt; 
&gt; Should the backingStore take care of logging/histograms/etc, and leave the consequences (i.e. abort, etc) to the caller?

I was thinking something similar even though this patch doesn&apos;t yet follow the rules:
BackingStore MUST emit to a histogram.
Caller MAY emit to a histogram (though I&apos;m not sure if any do yet).
Caller MUST surface the error to script.
Liberal logging.

&gt;&gt; Source/WebCore/Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:236
&gt;&gt; +        transaction-&gt;abort();
&gt; 
&gt; Can we pass a reason (IDBDatabaseError) to the abort? Or is the default good enough?

A reason would be better, I don&apos;t know what the default is.  Will look into.

&gt;&gt; Source/WebCore/Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:338
&gt;&gt; +            callbacks-&gt;onError(IDBDatabaseError::create(IDBDatabaseException::UNKNOWN_ERR, &quot;Disk Error&quot;));
&gt; 
&gt; I&apos;d be careful about calling it a disk error; don&apos;t want to blame the hardware if it&apos;s a software issue!

True. I will come up with something different. I didn&apos;t want to just use &quot;Internal Error&quot; everywhere, I want to offer better breadcrumbs for us to follow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>779281</commentid>
    <comment_count>8</comment_count>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-11-29 12:01:17 -0800</bug_when>
    <thetext>A little late to the party but this looks great..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>779376</commentid>
    <comment_count>9</comment_count>
      <attachid>176802</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2012-11-29 13:19:33 -0800</bug_when>
    <thetext>Created attachment 176802
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>779393</commentid>
    <comment_count>10</comment_count>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2012-11-29 13:30:42 -0800</bug_when>
    <thetext>Josh,

This is a cleaned up revision with the comments addressed. Could you take another look before I send it to Tony? I wish interdiff worked :(

What do you think of increasing the number of entries in the IDBLevelDBBackingStoreInternalErrorType enum?  There are ~25 uses of IDBLevelDBBackingStoreReadError in IDBBackingStore. If a vast majority of our histogram entries come from one method, that&apos;d be good to know.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>779398</commentid>
    <comment_count>11</comment_count>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-11-29 13:33:42 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; Josh,
&gt; 
&gt; This is a cleaned up revision with the comments addressed. Could you take another look before I send it to Tony? I wish interdiff worked :(
&gt; 
&gt; What do you think of increasing the number of entries in the IDBLevelDBBackingStoreInternalErrorType enum?  There are ~25 uses of IDBLevelDBBackingStoreReadError in IDBBackingStore. If a vast majority of our histogram entries come from one method, that&apos;d be good to know.

+1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>779440</commentid>
    <comment_count>12</comment_count>
      <attachid>176802</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-11-29 14:25:39 -0800</bug_when>
    <thetext>Comment on attachment 176802
Patch

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

+1 to adding enum values, especially if it will distinguish logic/consistency errors (e.g. we forgot to add an entry while migrating, etc) from more spectacular cases.

lgtm, just wordsmithing

&gt; Source/WebCore/Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:237
&gt; +        LOG_ERROR(&quot;keyExistsInObjectStore ran in to some corruption&quot;);

Maybe just &quot;keyExistsInObjectStore reported an error&quot; ?

&gt; Source/WebCore/Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:238
&gt; +        transaction-&gt;abort(IDBDatabaseError::create(IDBDatabaseException::UNKNOWN_ERR, &quot;Internal Error setting index keys.&quot;));

s/Error/error/

&gt; Source/WebCore/Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:314
&gt; +            callbacks-&gt;onError(IDBDatabaseError::create(IDBDatabaseException::UNKNOWN_ERR, &quot;Internal Error checking key existence.&quot;));

s/Error/error/

&gt; Source/WebCore/Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:342
&gt; +            callbacks-&gt;onError(IDBDatabaseError::create(IDBDatabaseException::UNKNOWN_ERR, &quot;Internal Error updating key generator.&quot;));

s/Error/error/

&gt; Source/WebCore/Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:551
&gt; +        LOG_ERROR(&quot;Disk error while doing getKeyGeneratorCurrentNumber&quot;);

Looking around WebCore, a more common phrasing would be something like:
&quot;Failed to getKeyGeneratorCurrentNumber&quot;
&quot;getKeyGeneratorCurrentNumber failed&quot;
&quot;getKeyGeneratorCurrentNumber reported an error&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>779514</commentid>
    <comment_count>13</comment_count>
      <attachid>176833</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2012-11-29 15:35:08 -0800</bug_when>
    <thetext>Created attachment 176833
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>779517</commentid>
    <comment_count>14</comment_count>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2012-11-29 15:36:12 -0800</bug_when>
    <thetext>Phrasing fixed.

Tony, could you review this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>779536</commentid>
    <comment_count>15</comment_count>
      <attachid>176833</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2012-11-29 15:43:38 -0800</bug_when>
    <thetext>Comment on attachment 176833
Patch

Attachment 176833 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/15036684</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>779544</commentid>
    <comment_count>16</comment_count>
      <attachid>176833</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-11-29 15:48:18 -0800</bug_when>
    <thetext>Comment on attachment 176833
Patch

I&apos;m not a huge fan of COM style success/failure returned from every function, but maybe that&apos;s unavoidable if you want to track errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>779570</commentid>
    <comment_count>17</comment_count>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2012-11-29 16:14:46 -0800</bug_when>
    <thetext>Agreed that it is lame. This was the first time in a while that I&apos;ve longed to use exceptions. Do you know of other alternative patterns?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>779710</commentid>
    <comment_count>18</comment_count>
      <attachid>176833</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-29 18:23:09 -0800</bug_when>
    <thetext>Comment on attachment 176833
Patch

Clearing flags on attachment: 176833

Committed r136194: &lt;http://trac.webkit.org/changeset/136194&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>779711</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-29 18:23:14 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>176613</attachid>
            <date>2012-11-28 17:39:23 -0800</date>
            <delta_ts>2012-11-28 18:15:12 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-103580-20121128173657.patch</filename>
            <type>text/plain</type>
            <size>22926</size>
            <attacher name="David Grogan">dgrogan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM2MDY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDc0MDkwNDJmMTU4NDMy
NWY4NjE4ZDYxYzQxZTY1YmNjMTc4MTQ2Ny4uMDFhNmQyY2YwNzQwMWUzZTM4NzYwZGQ5N2E4M2Zi
NWJmZTA3NTU5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDEyLTExLTI4ICBEYXZp
ZCBHcm9nYW4gIDxkZ3JvZ2FuQGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IFBy
b3BhZ2F0ZSBtb3JlIGxldmVsZGIgZXJyb3JzIHRvIHNjcmlwdAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzNTgwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTGV2ZWxEQkRhdGFiYXNlIHVzZWQgYSBzaW5n
bGUgcmV0dXJuIHZhbHVlIHRvIGluZGljYXRlIGJvdGggSS9PIHByb2JsZW1zCisgICAgICAgIGFu
ZCBhIG1pc3Npbmcga2V5LiBOb3cgYW4gb3V0IHZhcmlhYmxlIGlzIHVzZWQgdG8gaW5kaWNhdGUg
aWYgdGhlCisgICAgICAgIHJlcXVlc3RlZCBrZXkgd2FzIGZvdW5kLiBUaGUgcmV0dXJuIHZhbHVl
IGlzIHVzZWQgdG8gcmVwb3J0IGNvcnJ1cHRpb24KKyAgICAgICAgb3IgZGlzayBlcnJvci4KKwor
ICAgICAgICBUaGlzIGlzIGEgc21hbGwgc3RlcCB0b3dhcmQgcHJvcGFnYXRpbmcgbG93IGxldmVs
IGVycm9ycyBldmVyeXdoZXJlCisgICAgICAgIHBvc3NpYmxlLiBTbyBmYXIgb25seSBvbmUgc2Nl
bmFyaW8gd2lsbCBuZXdseSBjYXVzZSBzY3JpcHQgdG8gcmVjZWl2ZQorICAgICAgICBhbiBlcnJv
cjogd2hlbiBsZXZlbGRiIGhhcyB0cm91YmxlIGxvb2tpbmcgZm9yIGV4aXN0aW5nIGtleXMgZHVy
aW5nIGFuCisgICAgICAgIG9iamVjdHN0b3JlLT5hZGQuCisKKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0SW50KToK
KyAgICAgICAgKFdlYkNvcmU6OmdldFZhckludCk6CisgICAgICAgIChXZWJDb3JlOjpnZXRTdHJp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlOjpnZXRLZXlHZW5lcmF0b3JD
dXJyZW50TnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6bWF5YmVV
cGRhdGVLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJh
Y2tpbmdTdG9yZTo6a2V5RXhpc3RzSW5PYmplY3RTdG9yZSk6CisgICAgICAgICogTW9kdWxlcy9p
bmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmg6CisgICAgICAgIChJREJCYWNraW5nU3RvcmUpOgor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6c2V0SW5kZXhL
ZXlzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dElu
dGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Omdl
bmVyYXRlS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6
OnVwZGF0ZUtleUdlbmVyYXRvcik6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbC5oOgorICAgICAgICAoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bCk6CisgICAgICAgICogcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCRGF0YWJhc2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6TGV2ZWxEQkRhdGFiYXNlOjpzYWZlR2V0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9sZXZlbGRiL0xldmVsREJEYXRhYmFzZS5oOgorICAgICAgICAoTGV2ZWxEQkRhdGFiYXNl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJUcmFuc2FjdGlvbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpMZXZlbERCVHJhbnNhY3Rpb246OnNhZmVHZXQpOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpMZXZlbERCVHJhbnNhY3Rpb246OmdldCk6Cisg
ICAgICAgICogcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCVHJhbnNhY3Rpb24uaDoKKyAgICAgICAg
KExldmVsREJUcmFuc2FjdGlvbik6CisKIDIwMTItMTEtMjggIE1pY2hhZWwgU2Fib2ZmICA8bXNh
Ym9mZkBhcHBsZS5jb20+CiAKICAgICAgICAgSFRNTEZvbnRFbGVtZW50IGZvbnQgc2l6ZSBwYXJz
aW5nIHNob3VsZCBkaXJlY3RseSBoYW5kbGUgOCBiaXQgc3RyaW5ncwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZwppbmRleCBkZTAwYWM3MTJlMThlMjk0NDM4MTQwZTIzYzc1YjUzYTQ2MzE5N2ViLi45
NTA2MzllYzc0YjVlYTBlNjcxZTg5YzQzMWRiZmRhNWM1MTUyYzI3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDEyLTExLTI4ICBEYXZpZCBHcm9nYW4gIDxk
Z3JvZ2FuQGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IFByb3BhZ2F0ZSBtb3Jl
IGxldmVsZGIgZXJyb3JzIHRvIHNjcmlwdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTAzNTgwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiB0ZXN0cy9JREJGYWtlQmFja2luZ1N0b3JlLmg6CisgICAgICAg
ICBVcGRhdGUgbWV0aG9kIHNpZ25hdHVyZXMuCisKIDIwMTItMTEtMjggIFJvYmVydCBLcm9lZ2Vy
ICA8cmprcm9lZ2VAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIHJlbW92ZSB1bnVzZWQgUGxhdGZv
cm1HZXN0dXJlQ3VydmUgY29kZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5jcHAKaW5kZXggOTkwNWQ1YjUzM2QxMzNhZmM5OWQ4MTUy
NGJhYzVmMDBkMDc0NTk1ZC4uZWRjNDIwNjdlNGRiN2FiODg3YWVlNzAxZjVlMTYyMmQwMTljNjFk
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2lu
Z1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNr
aW5nU3RvcmUuY3BwCkBAIC05MSw3ICs5MSwxMSBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgREJPclRy
YW5zYWN0aW9uPgogc3RhdGljIGJvb2wgZ2V0SW50KERCT3JUcmFuc2FjdGlvbiogZGIsIGNvbnN0
IExldmVsREJTbGljZSYga2V5LCBpbnQ2NF90JiBmb3VuZEludCkKIHsKICAgICBWZWN0b3I8Y2hh
cj4gcmVzdWx0OwotICAgIGlmICghZGItPmdldChrZXksIHJlc3VsdCkpCisgICAgYm9vbCBmb3Vu
ZCA9IGZhbHNlOworICAgIGJvb2wgb2sgPSBkYi0+c2FmZUdldChrZXksIHJlc3VsdCwgZm91bmQp
OworICAgIC8vIEZJWE1FOiBOb3RpZnkgdGhlIGNhbGxlciBpZiAhb2suCisgICAgQVNTRVJUX1VO
VVNFRChvaywgb2spOworICAgIGlmICghZm91bmQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIGZvdW5kSW50ID0gZGVjb2RlSW50KHJlc3VsdC5iZWdpbigpLCByZXN1bHQuZW5kKCkpOwpA
QCAtMTA4LDcgKzExMiwxMSBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgREJPclRyYW5zYWN0aW9uPgog
c3RhdGljIGJvb2wgZ2V0VmFySW50KERCT3JUcmFuc2FjdGlvbiogZGIsIGNvbnN0IExldmVsREJT
bGljZSYga2V5LCBpbnQ2NF90JiBmb3VuZEludCkKIHsKICAgICBWZWN0b3I8Y2hhcj4gcmVzdWx0
OwotICAgIGlmICghZGItPmdldChrZXksIHJlc3VsdCkpCisgICAgYm9vbCBmb3VuZCA9IGZhbHNl
OworICAgIGJvb2wgb2sgPSBkYi0+c2FmZUdldChrZXksIHJlc3VsdCwgZm91bmQpOworICAgIC8v
IEZJWE1FOiBOb3RpZnkgdGhlIGNhbGxlciBpZiAhb2suCisgICAgQVNTRVJUX1VOVVNFRChvaywg
b2spOworICAgIGlmICghZm91bmQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVy
biBkZWNvZGVWYXJJbnQocmVzdWx0LmJlZ2luKCksIHJlc3VsdC5lbmQoKSwgZm91bmRJbnQpID09
IHJlc3VsdC5lbmQoKTsKQEAgLTEyMyw3ICsxMzEsMTEgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIERC
T3JUcmFuc2FjdGlvbj4KIHN0YXRpYyBib29sIGdldFN0cmluZyhEQk9yVHJhbnNhY3Rpb24qIGRi
LCBjb25zdCBMZXZlbERCU2xpY2UmIGtleSwgU3RyaW5nJiBmb3VuZFN0cmluZykKIHsKICAgICBW
ZWN0b3I8Y2hhcj4gcmVzdWx0OwotICAgIGlmICghZGItPmdldChrZXksIHJlc3VsdCkpCisgICAg
Ym9vbCBmb3VuZCA9IGZhbHNlOworICAgIGJvb2wgb2sgPSBkYi0+c2FmZUdldChrZXksIHJlc3Vs
dCwgZm91bmQpOworICAgIC8vIEZJWE1FOiBOb3RpZnkgdGhlIGNhbGxlciBpZiAhb2suCisgICAg
QVNTRVJUX1VOVVNFRChvaywgb2spOworICAgIGlmICghZm91bmQpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIGZvdW5kU3RyaW5nID0gZGVjb2RlU3RyaW5nKHJlc3VsdC5iZWdpbigpLCBy
ZXN1bHQuZW5kKCkpOwpAQCAtNjk5LDE2ICs3MTEsMjIgQEAgdm9pZCBJREJCYWNraW5nU3RvcmU6
OmRlbGV0ZVJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwg
aW4KIH0KIAogCi1pbnQ2NF90IElEQkJhY2tpbmdTdG9yZTo6Z2V0S2V5R2VuZXJhdG9yQ3VycmVu
dE51bWJlcihJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCitib29sIElEQkJhY2tpbmdTdG9y
ZTo6Z2V0S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0
aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QmIGtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIpCiB7CiAgICAgTGV2ZWxEQlRy
YW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0
aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKIAogICAgIGNvbnN0IFZl
Y3RvcjxjaGFyPiBrZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyS2V5ID0gT2JqZWN0U3RvcmVNZXRh
RGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIE9iamVjdFN0b3JlTWV0
YURhdGFLZXk6OktleUdlbmVyYXRvckN1cnJlbnROdW1iZXIpOwogCi0gICAgaW50NjRfdCBrZXlH
ZW5lcmF0b3JDdXJyZW50TnVtYmVyID0gLTE7CisgICAga2V5R2VuZXJhdG9yQ3VycmVudE51bWJl
ciA9IC0xOwogICAgIFZlY3RvcjxjaGFyPiBkYXRhOwogCi0gICAgaWYgKGxldmVsREJUcmFuc2Fj
dGlvbi0+Z2V0KGtleUdlbmVyYXRvckN1cnJlbnROdW1iZXJLZXksIGRhdGEpKQorICAgIGJvb2wg
Zm91bmQgPSBmYWxzZTsKKyAgICBib29sIG9rID0gbGV2ZWxEQlRyYW5zYWN0aW9uLT5zYWZlR2V0
KGtleUdlbmVyYXRvckN1cnJlbnROdW1iZXJLZXksIGRhdGEsIGZvdW5kKTsKKyAgICBpZiAoIW9r
KSB7CisgICAgICAgIExPR19FUlJPUigiTGV2ZWxkYiBoYWQgcHJvYmxlbXMgbG9va2luZyB1cCBr
ZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyS2V5Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgaWYgKGZvdW5kKQogICAgICAgICBrZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyID0g
ZGVjb2RlSW50KGRhdGEuYmVnaW4oKSwgZGF0YS5lbmQoKSk7CiAgICAgZWxzZSB7CiAgICAgICAg
IC8vIFByZXZpb3VzbHksIHRoZSBrZXkgZ2VuZXJhdG9yIHN0YXRlIHdhcyBub3Qgc3RvcmVkIGV4
cGxpY2l0bHkgYnV0IGRlcml2ZWQgZnJvbSB0aGUKQEAgLTc0MSwyOSArNzU5LDM5IEBAIGludDY0
X3QgSURCQmFja2luZ1N0b3JlOjpnZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKElEQkJhY2tp
bmdTdG9yZTo6VHJhbnNhY3RpCiAgICAgcmV0dXJuIGtleUdlbmVyYXRvckN1cnJlbnROdW1iZXI7
CiB9CiAKLXZvaWQgSURCQmFja2luZ1N0b3JlOjptYXliZVVwZGF0ZUtleUdlbmVyYXRvckN1cnJl
bnROdW1iZXIoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IG5ld051bWJlciwg
Ym9vbCBjaGVja0N1cnJlbnQpCitib29sIElEQkJhY2tpbmdTdG9yZTo6bWF5YmVVcGRhdGVLZXlH
ZW5lcmF0b3JDdXJyZW50TnVtYmVyKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5z
YWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRf
dCBuZXdOdW1iZXIsIGJvb2wgY2hlY2tDdXJyZW50KQogewogICAgIExldmVsREJUcmFuc2FjdGlv
biogbGV2ZWxEQlRyYW5zYWN0aW9uID0gSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6bGV2
ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7CiAKICAgICBpZiAoY2hlY2tDdXJyZW50
KSB7Ci0gICAgICAgIGludDY0X3QgY3VycmVudE51bWJlciA9IGdldEtleUdlbmVyYXRvckN1cnJl
bnROdW1iZXIodHJhbnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQpOworICAgICAg
ICBpbnQ2NF90IGN1cnJlbnROdW1iZXI7CisgICAgICAgIGJvb2wgb2sgPSBnZXRLZXlHZW5lcmF0
b3JDdXJyZW50TnVtYmVyKHRyYW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBj
dXJyZW50TnVtYmVyKTsKKyAgICAgICAgaWYgKCFvaykgeworICAgICAgICAgICAgTE9HX0VSUk9S
KCJEaXNrIGVycm9yIGluIGdldEtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIiKTsKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQogICAgICAgICBpZiAobmV3TnVtYmVyIDw9IGN1
cnJlbnROdW1iZXIpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4ga2V5R2VuZXJhdG9yQ3VycmVudE51
bWJlcktleSA9IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmpl
Y3RTdG9yZUlkLCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjpLZXlHZW5lcmF0b3JDdXJyZW50TnVt
YmVyKTsKICAgICBwdXRJbnQobGV2ZWxEQlRyYW5zYWN0aW9uLCBrZXlHZW5lcmF0b3JDdXJyZW50
TnVtYmVyS2V5LCBuZXdOdW1iZXIpOworICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIElEQkJh
Y2tpbmdTdG9yZTo6a2V5RXhpc3RzSW5PYmplY3RTdG9yZShJREJCYWNraW5nU3RvcmU6OlRyYW5z
YWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGNvbnN0IElEQktleSYga2V5LCBSZWNvcmRJZGVudGlmaWVyKiBmb3VuZFJlY29yZElk
ZW50aWZpZXIpCitib29sIElEQkJhY2tpbmdTdG9yZTo6a2V5RXhpc3RzSW5PYmplY3RTdG9yZShJ
REJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYga2V5LCBSZWNvcmRJZGVu
dGlmaWVyKiBmb3VuZFJlY29yZElkZW50aWZpZXIsIGJvb2wmIGZvdW5kKQogewogICAgIElEQl9U
UkFDRSgiSURCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbk9iamVjdFN0b3JlIik7CisgICAgZm91
bmQgPSBmYWxzZTsKICAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9
IElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJh
bnNhY3Rpb24pOwogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBsZXZlbGRiS2V5ID0gT2JqZWN0U3Rv
cmVEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwga2V5KTsKICAgICBW
ZWN0b3I8Y2hhcj4gZGF0YTsKIAotICAgIGlmICghbGV2ZWxEQlRyYW5zYWN0aW9uLT5nZXQobGV2
ZWxkYktleSwgZGF0YSkpCisgICAgYm9vbCBvayA9IGxldmVsREJUcmFuc2FjdGlvbi0+c2FmZUdl
dChsZXZlbGRiS2V5LCBkYXRhLCBmb3VuZCk7CisgICAgaWYgKCFvaykKICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGlmICghZm91bmQpCisgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgaW50
NjRfdCB2ZXJzaW9uOwogICAgIGlmICghZGVjb2RlVmFySW50KGRhdGEuYmVnaW4oKSwgZGF0YS5l
bmQoKSwgdmVyc2lvbikpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkJhY2tpbmdTdG9yZS5oCmluZGV4IGIwYTU5ODg3YTFiN2JjOTE2ZDZkZmM5N2MwMDJhMDQ5
NTY5ZWZjOGMuLmVjNmYwYWVlMmI3ODQ3OTg5YzU4NDA4MzA2OTk0NjRjODVkYjExM2YgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5o
CkBAIC04MCw5ICs4MCw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcHV0UmVjb3JkKElE
QkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgUmVjb3Jk
SWRlbnRpZmllciopOwogICAgIHZpcnR1YWwgdm9pZCBjbGVhck9iamVjdFN0b3JlKElEQkJhY2tp
bmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCk7CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZVJlY29yZChJREJCYWNraW5nU3RvcmU6
OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGNvbnN0IFJlY29yZElkZW50aWZpZXImKTsKLSAgICB2aXJ0dWFsIGludDY0X3QgZ2V0S2V5R2Vu
ZXJhdG9yQ3VycmVudE51bWJlcihJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpOwotICAgIHZpcnR1YWwgdm9pZCBt
YXliZVVwZGF0ZUtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIoSURCQmFja2luZ1N0b3JlOjpUcmFu
c2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2
NF90IG5ld1N0YXRlLCBib29sIGNoZWNrQ3VycmVudCk7Ci0gICAgdmlydHVhbCBib29sIGtleUV4
aXN0c0luT2JqZWN0U3RvcmUoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBSZWNvcmRJ
ZGVudGlmaWVyKiBmb3VuZFJlY29yZElkZW50aWZpZXIpOworICAgIHZpcnR1YWwgYm9vbCBnZXRL
ZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCYgY3VycmVu
dE51bWJlcik7CisgICAgdmlydHVhbCBib29sIG1heWJlVXBkYXRlS2V5R2VuZXJhdG9yQ3VycmVu
dE51bWJlcihJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgbmV3U3RhdGUsIGJvb2wgY2hlY2tDdXJy
ZW50KTsKKyAgICB2aXJ0dWFsIGJvb2wga2V5RXhpc3RzSW5PYmplY3RTdG9yZShJREJCYWNraW5n
U3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGNvbnN0IElEQktleSYsIFJlY29yZElkZW50aWZpZXIqIGZvdW5kUmVjb3JkSWRlbnRp
ZmllciwgYm9vbCYgZm91bmQpOwogCiAgICAgdmlydHVhbCBWZWN0b3I8SURCSW5kZXhNZXRhZGF0
YT4gZ2V0SW5kZXhlcyhpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7
CiAgICAgdmlydHVhbCBib29sIGNyZWF0ZUluZGV4KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rp
b24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBp
bmRleElkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmLCBib29sIGlzVW5p
cXVlLCBib29sIGlzTXVsdGlFbnRyeSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwCmluZGV4
IDZhMTRhZDc5MjBhNmZkNjVlOTM2ZTExOTlkNTQ5NDU0M2QyNDJiMjguLjk5ZDIyN2U2NWZkODdh
NjdlYWQwNDg4YTg0MTZjYjBjZGEyZDQ0MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3Bw
CkBAIC0yMjksNyArMjI5LDE0IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6c2V0
SW5kZXhLZXlzKFBhc3NSZWZQdHI8SURCS2V5PiBwcnBQcmltYXJ5S2V5LCBjCiAKICAgICAvLyBG
SVhNRTogVGhpcyBtZXRob2QgY291bGQgYmUgYXN5bmNocm9ub3VzLCBidXQgd2UgbmVlZCB0byBl
dmFsdWF0ZSBpZiBpdCdzIHdvcnRoIHRoZSBleHRyYSBjb21wbGV4aXR5LgogICAgIElEQkJhY2tp
bmdTdG9yZTo6UmVjb3JkSWRlbnRpZmllciByZWNvcmRJZGVudGlmaWVyOwotICAgIGlmICghYmFj
a2luZ1N0b3JlKCktPmtleUV4aXN0c0luT2JqZWN0U3RvcmUodHJhbnNhY3Rpb24tPmJhY2tpbmdT
dG9yZVRyYW5zYWN0aW9uKCksIGRhdGFiYXNlSWQoKSwgaWQoKSwgKnByaW1hcnlLZXksICZyZWNv
cmRJZGVudGlmaWVyKSkgeworICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICBib29sIG9rID0g
YmFja2luZ1N0b3JlKCktPmtleUV4aXN0c0luT2JqZWN0U3RvcmUodHJhbnNhY3Rpb24tPmJhY2tp
bmdTdG9yZVRyYW5zYWN0aW9uKCksIGRhdGFiYXNlSWQoKSwgaWQoKSwgKnByaW1hcnlLZXksICZy
ZWNvcmRJZGVudGlmaWVyLCBmb3VuZCk7CisgICAgaWYgKCFvaykgeworICAgICAgICBMT0dfRVJS
T1IoImtleUV4aXN0c0luT2JqZWN0U3RvcmUgcmFuIGluIHRvIHNvbWUgY29ycnVwdGlvbiIpOwor
ICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBpZiAoIWZvdW5kKSB7CiAgICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydCgpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQpAQCAtMjk2LDkgKzMwMywxNyBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OnB1dEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRy
PAogICAgIEFTU0VSVChrZXkgJiYga2V5LT5pc1ZhbGlkKCkpOwogCiAgICAgSURCQmFja2luZ1N0
b3JlOjpSZWNvcmRJZGVudGlmaWVyIHJlY29yZElkZW50aWZpZXI7Ci0gICAgaWYgKHB1dE1vZGUg
PT0gQWRkT25seSAmJiBvYmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCktPmtleUV4aXN0c0luT2Jq
ZWN0U3RvcmUodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG9iamVjdFN0
b3JlLT5kYXRhYmFzZUlkKCksIG9iamVjdFN0b3JlLT5pZCgpLCAqa2V5LCAmcmVjb3JkSWRlbnRp
ZmllcikpIHsKLSAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNy
ZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Q09OU1RSQUlOVF9FUlIsICJLZXkgYWxyZWFkeSBl
eGlzdHMgaW4gdGhlIG9iamVjdCBzdG9yZS4iKSk7Ci0gICAgICAgIHJldHVybjsKKyAgICBpZiAo
cHV0TW9kZSA9PSBBZGRPbmx5KSB7CisgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICAg
ICAgYm9vbCBvayA9IG9iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+a2V5RXhpc3RzSW5PYmpl
Y3RTdG9yZSh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgb2JqZWN0U3Rv
cmUtPmRhdGFiYXNlSWQoKSwgb2JqZWN0U3RvcmUtPmlkKCksICprZXksICZyZWNvcmRJZGVudGlm
aWVyLCBmb3VuZCk7CisgICAgICAgIGlmICghb2spIHsKKyAgICAgICAgICAgIGNhbGxiYWNrcy0+
b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVO
S05PV05fRVJSLCAiSW50ZXJuYWwgZXJyb3IuIikpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIGlmIChmb3VuZCkgeworICAgICAgICAgICAgY2FsbGJhY2tzLT5vbkVy
cm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Q09OU1RS
QUlOVF9FUlIsICJLZXkgYWxyZWFkeSBleGlzdHMgaW4gdGhlIG9iamVjdCBzdG9yZS4iKSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICB9CiAKICAgICBWZWN0b3I8T3duUHRy
PEluZGV4V3JpdGVyPiA+IGluZGV4V3JpdGVyczsKQEAgLTMxNyw4ICszMzIsMTMgQEAgdm9pZCBJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgUGFzc1JlZlB0cjwKICAgICAgICAgaW5kZXhXcml0ZXItPndyaXRlSW5kZXhLZXlzKHJl
Y29yZElkZW50aWZpZXIsICpvYmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCksIHRyYW5zYWN0aW9u
LT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBvYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBv
YmplY3RTdG9yZS0+bV9tZXRhZGF0YS5pZCk7CiAgICAgfQogCi0gICAgaWYgKGF1dG9JbmNyZW1l
bnQgJiYgcHV0TW9kZSAhPSBDdXJzb3JVcGRhdGUgJiYga2V5LT50eXBlKCkgPT0gSURCS2V5OjpO
dW1iZXJUeXBlKQotICAgICAgICBvYmplY3RTdG9yZS0+dXBkYXRlS2V5R2VuZXJhdG9yKHRyYW5z
YWN0aW9uLCBrZXkuZ2V0KCksICFrZXlXYXNHZW5lcmF0ZWQpOworICAgIGlmIChhdXRvSW5jcmVt
ZW50ICYmIHB1dE1vZGUgIT0gQ3Vyc29yVXBkYXRlICYmIGtleS0+dHlwZSgpID09IElEQktleTo6
TnVtYmVyVHlwZSkgeworICAgICAgICBib29sIG9rID0gb2JqZWN0U3RvcmUtPnVwZGF0ZUtleUdl
bmVyYXRvcih0cmFuc2FjdGlvbiwga2V5LmdldCgpLCAha2V5V2FzR2VuZXJhdGVkKTsKKyAgICAg
ICAgaWYgKCFvaykgeworICAgICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNl
RXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIsICJEaXNrIEVy
cm9yIikpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQogCiAgICAgY2Fs
bGJhY2tzLT5vblN1Y2Nlc3Moa2V5LnJlbGVhc2UoKSk7CiB9CkBAIC01MjEsMTcgKzU0MSwyMiBA
QCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmFkZEluZGV4VG9NYXAoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdAogUGFzc1JlZlB0cjxJREJLZXk+IElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OmdlbmVyYXRlS2V5KFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbD4gdHJhbnNhY3Rpb24pCiB7CiAgICAgY29uc3QgaW50NjRfdCBtYXhHZW5lcmF0b3JW
YWx1ZSA9IDkwMDcxOTkyNTQ3NDA5OTJMTDsgLy8gTWF4aW11bSBpbnRlZ2VyIHN0b3JhYmxlIGFz
IEVDTUFTY3JpcHQgbnVtYmVyLgotICAgIGludDY0X3QgY3VycmVudE51bWJlciA9IGJhY2tpbmdT
dG9yZSgpLT5nZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKHRyYW5zYWN0aW9uLT5iYWNraW5n
U3RvcmVUcmFuc2FjdGlvbigpLCBkYXRhYmFzZUlkKCksIGlkKCkpOworICAgIGludDY0X3QgY3Vy
cmVudE51bWJlcjsKKyAgICBib29sIG9rID0gYmFja2luZ1N0b3JlKCktPmdldEtleUdlbmVyYXRv
ckN1cnJlbnROdW1iZXIodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIGRh
dGFiYXNlSWQoKSwgaWQoKSwgY3VycmVudE51bWJlcik7CisgICAgaWYgKCFvaykgeworICAgICAg
ICBMT0dfRVJST1IoIkRpc2sgZXJyb3Igd2hpbGUgZG9pbmcgZ2V0S2V5R2VuZXJhdG9yQ3VycmVu
dE51bWJlciIpOworICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVJbnZhbGlkKCk7CisgICAg
fQogICAgIGlmIChjdXJyZW50TnVtYmVyIDwgMCB8fCBjdXJyZW50TnVtYmVyID4gbWF4R2VuZXJh
dG9yVmFsdWUpCiAgICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZUludmFsaWQoKTsKIAogICAg
IHJldHVybiBJREJLZXk6OmNyZWF0ZU51bWJlcihjdXJyZW50TnVtYmVyKTsKIH0KIAotdm9pZCBJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjp1cGRhdGVLZXlHZW5lcmF0b3IoUGFzc1JlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiwgY29uc3QgSURCS2V5KiBrZXks
IGJvb2wgY2hlY2tDdXJyZW50KQorYm9vbCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjp1cGRh
dGVLZXlHZW5lcmF0b3IoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFu
c2FjdGlvbiwgY29uc3QgSURCS2V5KiBrZXksIGJvb2wgY2hlY2tDdXJyZW50KQogewogICAgIEFT
U0VSVChrZXkgJiYga2V5LT50eXBlKCkgPT0gSURCS2V5OjpOdW1iZXJUeXBlKTsKLSAgICBiYWNr
aW5nU3RvcmUoKS0+bWF5YmVVcGRhdGVLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKHRyYW5zYWN0
aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBkYXRhYmFzZUlkKCksIGlkKCksIHN0YXRp
Y19jYXN0PGludDY0X3Q+KGZsb29yKGtleS0+bnVtYmVyKCkpKSArIDEsIGNoZWNrQ3VycmVudCk7
CisgICAgcmV0dXJuIGJhY2tpbmdTdG9yZSgpLT5tYXliZVVwZGF0ZUtleUdlbmVyYXRvckN1cnJl
bnROdW1iZXIodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIGRhdGFiYXNl
SWQoKSwgaWQoKSwgc3RhdGljX2Nhc3Q8aW50NjRfdD4oZmxvb3Ioa2V5LT5udW1iZXIoKSkpICsg
MSwgY2hlY2tDdXJyZW50KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbC5oCmluZGV4IGNmZGUzYmU3YjM0NTFiYjJiNjMyNmVkYWI2MDdlZDI4MGI0MzQy
MDQuLmFlMWFhNmRlMGYwYTlhMmFkNTJkMmVmYmI4NGQ5NTVlNTcyOTY4OGEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZElt
cGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsLmgKQEAgLTk2LDcgKzk2LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgbG9h
ZEluZGV4ZXMoKTsKICAgICBQYXNzUmVmUHRyPElEQktleT4gZ2VuZXJhdGVLZXkoUGFzc1JlZlB0
cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7Ci0gICAgdm9pZCB1cGRhdGVLZXlHZW5lcmF0
b3IoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiwgY29uc3QgSURCS2V5Kiwg
Ym9vbCBjaGVja0N1cnJlbnQpOworICAgIGJvb2wgdXBkYXRlS2V5R2VuZXJhdG9yKFBhc3NSZWZQ
dHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4sIGNvbnN0IElEQktleSosIGJvb2wgY2hlY2tD
dXJyZW50KTsKIAogICAgIHN0YXRpYyB2b2lkIGdldEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRy
PElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGw+KTsKICAgICBzdGF0aWMgdm9pZCBwdXRJbnRlcm5hbChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
PiwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQktleT4s
IFB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsPiwgUGFzc093blB0cjxWZWN0b3I8aW50NjRfdD4gPiBwb3BJbmRleE5h
bWVzLCBQYXNzT3duUHRyPFZlY3RvcjxJbmRleEtleXM+ID4pOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCRGF0YWJhc2UuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCRGF0YWJhc2UuY3BwCmluZGV4IGVkZjlkYjI1
NzJlMzU4ZjdiNWNjM2E3NTQ0NzMwYWQ0N2ZjZjMxZDMuLjJkNWNmY2Q3ZjZiMWVhZDI5YWM5NjYz
ODA1Y2EzYTdlMjA5ODVmMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xl
dmVsZGIvTGV2ZWxEQkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9s
ZXZlbGRiL0xldmVsREJEYXRhYmFzZS5jcHAKQEAgLTE5OCw4ICsxOTgsOSBAQCBib29sIExldmVs
REJEYXRhYmFzZTo6cmVtb3ZlKGNvbnN0IExldmVsREJTbGljZSYga2V5KQogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotYm9vbCBMZXZlbERCRGF0YWJhc2U6OmdldChjb25zdCBMZXZlbERCU2xpY2Um
IGtleSwgVmVjdG9yPGNoYXI+JiB2YWx1ZSwgY29uc3QgTGV2ZWxEQlNuYXBzaG90KiBzbmFwc2hv
dCkKK2Jvb2wgTGV2ZWxEQkRhdGFiYXNlOjpzYWZlR2V0KGNvbnN0IExldmVsREJTbGljZSYga2V5
LCBWZWN0b3I8Y2hhcj4mIHZhbHVlLCBib29sJiBmb3VuZCwgY29uc3QgTGV2ZWxEQlNuYXBzaG90
KiBzbmFwc2hvdCkKIHsKKyAgICBmb3VuZCA9IGZhbHNlOwogICAgIHN0ZDo6c3RyaW5nIHJlc3Vs
dDsKICAgICBsZXZlbGRiOjpSZWFkT3B0aW9ucyByZWFkT3B0aW9uczsKICAgICByZWFkT3B0aW9u
cy52ZXJpZnlfY2hlY2tzdW1zID0gdHJ1ZTsgLy8gRklYTUU6IERpc2FibGUgdGhpcyBpZiB0aGUg
cGVyZm9ybWFuY2UgaW1wYWN0IGlzIHRvbyBncmVhdC4KQEAgLTIwNywxMSArMjA4LDEyIEBAIGJv
b2wgTGV2ZWxEQkRhdGFiYXNlOjpnZXQoY29uc3QgTGV2ZWxEQlNsaWNlJiBrZXksIFZlY3Rvcjxj
aGFyPiYgdmFsdWUsIGNvbnN0IExlCiAKICAgICBjb25zdCBsZXZlbGRiOjpTdGF0dXMgcyA9IG1f
ZGItPkdldChyZWFkT3B0aW9ucywgbWFrZVNsaWNlKGtleSksICZyZXN1bHQpOwogICAgIGlmIChz
Lm9rKCkpIHsKKyAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICB2YWx1ZSA9IG1ha2VWZWN0
b3IocmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGlmIChzLklzTm90
Rm91bmQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICBMT0dfRVJST1IoIkxldmVsREIgZ2V0IGZhaWxlZDogJXMiLCBzLlRvU3RyaW5nKCkuY19zdHIo
KSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbGV2ZWxkYi9MZXZlbERCRGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2xldmVsZGIvTGV2ZWxEQkRhdGFiYXNlLmgKaW5kZXggMmQzMmNkNzM2M2U1ODM2NzdkNWNjN2E0
ODQzNmUzMDI3M2E4ZjVlZC4uZjlmNGQ0ZTFiYWU0YjBiNjNiOGE5OGJlOTIyMjI4ZDQ2NzUxMDU4
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCRGF0
YWJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJEYXRh
YmFzZS5oCkBAIC02OSw3ICs2OSw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgcHV0KGNvbnN0IExl
dmVsREJTbGljZSYga2V5LCBjb25zdCBWZWN0b3I8Y2hhcj4mIHZhbHVlKTsKICAgICBib29sIHJl
bW92ZShjb25zdCBMZXZlbERCU2xpY2UmIGtleSk7Ci0gICAgYm9vbCBnZXQoY29uc3QgTGV2ZWxE
QlNsaWNlJiBrZXksIFZlY3RvcjxjaGFyPiYgdmFsdWUsIGNvbnN0IExldmVsREJTbmFwc2hvdCog
PSAwKTsKKyAgICBib29sIHNhZmVHZXQoY29uc3QgTGV2ZWxEQlNsaWNlJiBrZXksIFZlY3Rvcjxj
aGFyPiYgdmFsdWUsIGJvb2wmIGZvdW5kLCBjb25zdCBMZXZlbERCU25hcHNob3QqID0gMCk7CiAg
ICAgYm9vbCB3cml0ZShMZXZlbERCV3JpdGVCYXRjaCYpOwogICAgIFBhc3NPd25QdHI8TGV2ZWxE
Qkl0ZXJhdG9yPiBjcmVhdGVJdGVyYXRvcihjb25zdCBMZXZlbERCU25hcHNob3QqID0gMCk7CiAg
ICAgY29uc3QgTGV2ZWxEQkNvbXBhcmF0b3IqIGNvbXBhcmF0b3IoKSBjb25zdDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQlRyYW5zYWN0aW9uLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQlRyYW5zYWN0aW9uLmNw
cAppbmRleCBmZTgyNjJhMjQwMjMyZDNlMjgwZTlkNTAyZTI2NGM0YjI0NmQ0MTgwLi41MzM1YTAy
OGFmN2M3ODJlMjExN2UzZTU0OWUxYjM4M2RiNjhmYTAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJUcmFuc2FjdGlvbi5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCVHJhbnNhY3Rpb24uY3BwCkBAIC0xMDcs
MjAgKzEwNywzOCBAQCB2b2lkIExldmVsREJUcmFuc2FjdGlvbjo6cmVtb3ZlKGNvbnN0IExldmVs
REJTbGljZSYga2V5KQogICAgIHNldChrZXksIFZlY3RvcjxjaGFyPigpLCB0cnVlKTsKIH0KIAot
Ym9vbCBMZXZlbERCVHJhbnNhY3Rpb246OmdldChjb25zdCBMZXZlbERCU2xpY2UmIGtleSwgVmVj
dG9yPGNoYXI+JiB2YWx1ZSkKK2Jvb2wgTGV2ZWxEQlRyYW5zYWN0aW9uOjpzYWZlR2V0KGNvbnN0
IExldmVsREJTbGljZSYga2V5LCBWZWN0b3I8Y2hhcj4mIHZhbHVlLCBib29sJiBmb3VuZCkKIHsK
KyAgICBmb3VuZCA9IGZhbHNlOwogICAgIEFTU0VSVCghbV9maW5pc2hlZCk7CiAgICAgQVZMVHJl
ZU5vZGUqIG5vZGUgPSBtX3RyZWUuc2VhcmNoKGtleSk7CiAKICAgICBpZiAobm9kZSkgewogICAg
ICAgICBpZiAobm9kZS0+ZGVsZXRlZCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgICAgIHZhbHVlID0gbm9kZS0+dmFsdWU7CisgICAg
ICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgcmV0
dXJuIG1fZGItPmdldChrZXksIHZhbHVlLCAmbV9zbmFwc2hvdCk7CisgICAgYm9vbCBvayA9IG1f
ZGItPnNhZmVHZXQoa2V5LCB2YWx1ZSwgZm91bmQsICZtX3NuYXBzaG90KTsKKyAgICBpZiAoIW9r
KSB7CisgICAgICAgIEFTU0VSVCghZm91bmQpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIExldmVsREJUcmFuc2FjdGlvbjo6Z2V0KGNv
bnN0IExldmVsREJTbGljZSYga2V5LCBWZWN0b3I8Y2hhcj4mIHZhbHVlKQoreworICAgIGJvb2wg
Zm91bmQgPSBmYWxzZTsKKyAgICBib29sIG9rID0gc2FmZUdldChrZXksIHZhbHVlLCBmb3VuZCk7
CisgICAgaWYgKCFvaykgeworICAgICAgICBBU1NFUlQoIWZvdW5kKTsKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIHJldHVybiBvayAmJiBmb3VuZDsKIH0KIAogYm9v
bCBMZXZlbERCVHJhbnNhY3Rpb246OmNvbW1pdCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJUcmFuc2FjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCVHJhbnNhY3Rpb24uaAppbmRleCA5NDIzNmZmNzYwNTM1
MWVmM2IxZjIxY2RhNWI1NTRmNWE0OTU2YmFjLi4yMzNhNjBlZWFhYzY1ZWEzZTRiMWMwN2Q5ZmFm
Njk4NTZmMmQwZjExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRi
L0xldmVsREJUcmFuc2FjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xldmVs
ZGIvTGV2ZWxEQlRyYW5zYWN0aW9uLmgKQEAgLTU0LDYgKzU0LDggQEAgcHVibGljOgogICAgIH5M
ZXZlbERCVHJhbnNhY3Rpb24oKTsKICAgICB2b2lkIHB1dChjb25zdCBMZXZlbERCU2xpY2UmIGtl
eSwgY29uc3QgVmVjdG9yPGNoYXI+JiB2YWx1ZSk7CiAgICAgdm9pZCByZW1vdmUoY29uc3QgTGV2
ZWxEQlNsaWNlJiBrZXkpOworICAgIGJvb2wgc2FmZUdldChjb25zdCBMZXZlbERCU2xpY2UmIGtl
eSwgVmVjdG9yPGNoYXI+JiB2YWx1ZSwgYm9vbCYgZm91bmQpOworICAgIC8vIEZJWE1FOiBDb252
ZXJ0IGFsbCBjYWxsZXJzIG9mIGdldCB0byBzYWZlR2V0IHRoZW4gcmVtb3ZlIGdldC4KICAgICBi
b29sIGdldChjb25zdCBMZXZlbERCU2xpY2UmIGtleSwgVmVjdG9yPGNoYXI+JiB2YWx1ZSk7CiAg
ICAgYm9vbCBjb21taXQoKTsKICAgICB2b2lkIHJvbGxiYWNrKCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lEQkZha2VCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCRmFrZUJhY2tpbmdTdG9yZS5oCmluZGV4IDM0NjM2M2Fj
M2U1NDZhMDIzMTE2OGZiNjE3MDhjNTFmOWM5ZDNiY2MuLjc0MThiYTM2YzdlZjJjNDVkN2VlZWMw
YjMwZTQ4M2Y4NmRhMjk3MjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvSURCRmFrZUJhY2tpbmdTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvSURCRmFrZUJhY2tpbmdTdG9yZS5oCkBAIC00Nyw5ICs0Nyw5IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIHZvaWQgcHV0UmVjb3JkKFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYsIGNvbnN0IFN0cmluZyYgdmFsdWUs
IFJlY29yZElkZW50aWZpZXIqKSBPVkVSUklERSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJP
YmplY3RTdG9yZShUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkKSBPVkVSUklERSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlUmVjb3JkKFRy
YW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNv
bnN0IFJlY29yZElkZW50aWZpZXImKSBPVkVSUklERSB7IH0KLSAgICB2aXJ0dWFsIGludDY0X3Qg
Z2V0S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKSBPVkVSUklERSB7IHJldHVybiAwOyB9Ci0gICAg
dmlydHVhbCB2b2lkIG1heWJlVXBkYXRlS2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihUcmFuc2Fj
dGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90
IG5ld051bWJlciwgYm9vbCBjaGVja0N1cnJlbnQpIE9WRVJSSURFIHsgfQotICAgIHZpcnR1YWwg
Ym9vbCBrZXlFeGlzdHNJbk9iamVjdFN0b3JlKFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYsIFJlY29yZElkZW50aWZp
ZXIqIGZvdW5kUmVjb3JkSWRlbnRpZmllcikgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KKyAg
ICB2aXJ0dWFsIGJvb2wgZ2V0S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihUcmFuc2FjdGlvbios
IGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90JiBjdXJy
ZW50TnVtYmVyKSBPVkVSUklERSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIG1h
eWJlVXBkYXRlS2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihUcmFuc2FjdGlvbiosIGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IG5ld051bWJlciwgYm9v
bCBjaGVja0N1cnJlbnQpIE9WRVJSSURFIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJv
b2wga2V5RXhpc3RzSW5PYmplY3RTdG9yZShUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBSZWNvcmRJZGVudGlmaWVy
KiBmb3VuZFJlY29yZElkZW50aWZpZXIsIGJvb2wmIGZvdW5kKSBPVkVSUklERSB7IHJldHVybiB0
cnVlOyB9CiAKICAgICB2aXJ0dWFsIFZlY3RvcjxJREJJbmRleE1ldGFkYXRhPiBnZXRJbmRleGVz
KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKSBPVkVSUklERSB7IHJl
dHVybiBWZWN0b3I8SURCSW5kZXhNZXRhZGF0YT4oKTsgfQogICAgIHZpcnR1YWwgYm9vbCBjcmVh
dGVJbmRleChUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5
UGF0aCYsIGJvb2wgaXNVbmlxdWUsIGJvb2wgaXNNdWx0aUVudHJ5KSBPVkVSUklERSB7IHJldHVy
biBmYWxzZTsgfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>176621</attachid>
            <date>2012-11-28 18:15:14 -0800</date>
            <delta_ts>2012-11-29 13:19:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-103580-20121128181248.patch</filename>
            <type>text/plain</type>
            <size>24876</size>
            <attacher name="David Grogan">dgrogan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM2MDc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDA1MTIyM2VmZGI3ZmU4
MjdlNzg2ODdiZTk2MjYwMzJiOTc5MmIwMy4uYWUwNDM1YzgxZjg2NTdjNzM3YjdmNWYzZGExMmFh
ZWUxNGM1Y2ViNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDEyLTExLTI4ICBEYXZp
ZCBHcm9nYW4gIDxkZ3JvZ2FuQGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IFBy
b3BhZ2F0ZSBtb3JlIGxldmVsZGIgZXJyb3JzIHRvIHNjcmlwdAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzNTgwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTGV2ZWxEQkRhdGFiYXNlIHVzZWQgYSBzaW5n
bGUgcmV0dXJuIHZhbHVlIHRvIGluZGljYXRlIGJvdGggSS9PIHByb2JsZW1zCisgICAgICAgIGFu
ZCBhIG1pc3Npbmcga2V5LiBOb3cgYW4gb3V0IHZhcmlhYmxlIGlzIHVzZWQgdG8gaW5kaWNhdGUg
aWYgdGhlCisgICAgICAgIHJlcXVlc3RlZCBrZXkgd2FzIGZvdW5kLiBUaGUgcmV0dXJuIHZhbHVl
IGlzIHVzZWQgdG8gcmVwb3J0IGNvcnJ1cHRpb24KKyAgICAgICAgb3IgZGlzayBlcnJvci4KKwor
ICAgICAgICBUaGlzIGlzIGEgc21hbGwgc3RlcCB0b3dhcmQgcHJvcGFnYXRpbmcgbG93IGxldmVs
IGVycm9ycyBldmVyeXdoZXJlCisgICAgICAgIHBvc3NpYmxlLiBTbyBmYXIgb25seSBvbmUgc2Nl
bmFyaW8gd2lsbCBuZXdseSBjYXVzZSBzY3JpcHQgdG8gcmVjZWl2ZQorICAgICAgICBhbiBlcnJv
cjogd2hlbiBsZXZlbGRiIGhhcyB0cm91YmxlIGxvb2tpbmcgZm9yIGV4aXN0aW5nIGtleXMgZHVy
aW5nIGFuCisgICAgICAgIG9iamVjdHN0b3JlLT5hZGQuCisKKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0SW50KToK
KyAgICAgICAgKFdlYkNvcmU6OmdldFZhckludCk6CisgICAgICAgIChXZWJDb3JlOjpnZXRTdHJp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlOjpnZXRLZXlHZW5lcmF0b3JD
dXJyZW50TnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6bWF5YmVV
cGRhdGVLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJh
Y2tpbmdTdG9yZTo6a2V5RXhpc3RzSW5PYmplY3RTdG9yZSk6CisgICAgICAgICogTW9kdWxlcy9p
bmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmg6CisgICAgICAgIChJREJCYWNraW5nU3RvcmUpOgor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6c2V0SW5kZXhL
ZXlzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dElu
dGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Omdl
bmVyYXRlS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6
OnVwZGF0ZUtleUdlbmVyYXRvcik6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbC5oOgorICAgICAgICAoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bCk6CisgICAgICAgICogcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCRGF0YWJhc2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6TGV2ZWxEQkRhdGFiYXNlOjpzYWZlR2V0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9sZXZlbGRiL0xldmVsREJEYXRhYmFzZS5oOgorICAgICAgICAoTGV2ZWxEQkRhdGFiYXNl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJUcmFuc2FjdGlvbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpMZXZlbERCVHJhbnNhY3Rpb246OnNhZmVHZXQpOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpMZXZlbERCVHJhbnNhY3Rpb246OmdldCk6Cisg
ICAgICAgICogcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCVHJhbnNhY3Rpb24uaDoKKyAgICAgICAg
KExldmVsREJUcmFuc2FjdGlvbik6CisKIDIwMTItMTEtMjggIE1pY2hhZWwgUHJ1ZXR0ICA8bWlj
aGFlbEA2OGsub3JnPgogCiAgICAgICAgIEluZGV4ZWREQjogQWRkIGZvcndhcmQgZGVjbGFyYXRp
b24gb2YgU2VjdXJpdHlPcmlnaW4gdG8gSURCQmFja2luZ1N0b3JlLmgKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKaW5kZXggZGUwMGFjNzEyZTE4ZTI5NDQzODE0MGUyM2M3NWI1M2E0NjMxOTdlYi4u
OTUwNjM5ZWM3NGI1ZWEwZTY3MWU4OWM0MzFkYmZkYTVjNTE1MmMyNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxMi0xMS0yOCAgRGF2aWQgR3JvZ2FuICA8
ZGdyb2dhbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBQcm9wYWdhdGUgbW9y
ZSBsZXZlbGRiIGVycm9ycyB0byBzY3JpcHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEwMzU4MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogdGVzdHMvSURCRmFrZUJhY2tpbmdTdG9yZS5oOgorICAgICAg
ICAgVXBkYXRlIG1ldGhvZCBzaWduYXR1cmVzLgorCiAyMDEyLTExLTI4ICBSb2JlcnQgS3JvZWdl
ciAgPHJqa3JvZWdlQGNocm9taXVtLm9yZz4KIAogICAgICAgICByZW1vdmUgdW51c2VkIFBsYXRm
b3JtR2VzdHVyZUN1cnZlIGNvZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuY3BwCmluZGV4IDk5MDVkNWI1MzNkMTMzYWZjOTlkODE1
MjRiYWM1ZjAwZDA3NDU5NWQuLmVkYzQyMDY3ZTRkYjdhYjg4N2FlZTcwMWY1ZTE2MjJkMDE5YzYx
ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tp
bmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFj
a2luZ1N0b3JlLmNwcApAQCAtOTEsNyArOTEsMTEgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIERCT3JU
cmFuc2FjdGlvbj4KIHN0YXRpYyBib29sIGdldEludChEQk9yVHJhbnNhY3Rpb24qIGRiLCBjb25z
dCBMZXZlbERCU2xpY2UmIGtleSwgaW50NjRfdCYgZm91bmRJbnQpCiB7CiAgICAgVmVjdG9yPGNo
YXI+IHJlc3VsdDsKLSAgICBpZiAoIWRiLT5nZXQoa2V5LCByZXN1bHQpKQorICAgIGJvb2wgZm91
bmQgPSBmYWxzZTsKKyAgICBib29sIG9rID0gZGItPnNhZmVHZXQoa2V5LCByZXN1bHQsIGZvdW5k
KTsKKyAgICAvLyBGSVhNRTogTm90aWZ5IHRoZSBjYWxsZXIgaWYgIW9rLgorICAgIEFTU0VSVF9V
TlVTRUQob2ssIG9rKTsKKyAgICBpZiAoIWZvdW5kKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICBmb3VuZEludCA9IGRlY29kZUludChyZXN1bHQuYmVnaW4oKSwgcmVzdWx0LmVuZCgpKTsK
QEAgLTEwOCw3ICsxMTIsMTEgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIERCT3JUcmFuc2FjdGlvbj4K
IHN0YXRpYyBib29sIGdldFZhckludChEQk9yVHJhbnNhY3Rpb24qIGRiLCBjb25zdCBMZXZlbERC
U2xpY2UmIGtleSwgaW50NjRfdCYgZm91bmRJbnQpCiB7CiAgICAgVmVjdG9yPGNoYXI+IHJlc3Vs
dDsKLSAgICBpZiAoIWRiLT5nZXQoa2V5LCByZXN1bHQpKQorICAgIGJvb2wgZm91bmQgPSBmYWxz
ZTsKKyAgICBib29sIG9rID0gZGItPnNhZmVHZXQoa2V5LCByZXN1bHQsIGZvdW5kKTsKKyAgICAv
LyBGSVhNRTogTm90aWZ5IHRoZSBjYWxsZXIgaWYgIW9rLgorICAgIEFTU0VSVF9VTlVTRUQob2ss
IG9rKTsKKyAgICBpZiAoIWZvdW5kKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1
cm4gZGVjb2RlVmFySW50KHJlc3VsdC5iZWdpbigpLCByZXN1bHQuZW5kKCksIGZvdW5kSW50KSA9
PSByZXN1bHQuZW5kKCk7CkBAIC0xMjMsNyArMTMxLDExIEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBE
Qk9yVHJhbnNhY3Rpb24+CiBzdGF0aWMgYm9vbCBnZXRTdHJpbmcoREJPclRyYW5zYWN0aW9uKiBk
YiwgY29uc3QgTGV2ZWxEQlNsaWNlJiBrZXksIFN0cmluZyYgZm91bmRTdHJpbmcpCiB7CiAgICAg
VmVjdG9yPGNoYXI+IHJlc3VsdDsKLSAgICBpZiAoIWRiLT5nZXQoa2V5LCByZXN1bHQpKQorICAg
IGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICBib29sIG9rID0gZGItPnNhZmVHZXQoa2V5LCByZXN1
bHQsIGZvdW5kKTsKKyAgICAvLyBGSVhNRTogTm90aWZ5IHRoZSBjYWxsZXIgaWYgIW9rLgorICAg
IEFTU0VSVF9VTlVTRUQob2ssIG9rKTsKKyAgICBpZiAoIWZvdW5kKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICBmb3VuZFN0cmluZyA9IGRlY29kZVN0cmluZyhyZXN1bHQuYmVnaW4oKSwg
cmVzdWx0LmVuZCgpKTsKQEAgLTY5OSwxNiArNzExLDIyIEBAIHZvaWQgSURCQmFja2luZ1N0b3Jl
OjpkZWxldGVSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24s
IGluCiB9CiAKIAotaW50NjRfdCBJREJCYWNraW5nU3RvcmU6OmdldEtleUdlbmVyYXRvckN1cnJl
bnROdW1iZXIoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQorYm9vbCBJREJCYWNraW5nU3Rv
cmU6OmdldEtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIoSURCQmFja2luZ1N0b3JlOjpUcmFuc2Fj
dGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBpbnQ2NF90JiBrZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKQogewogICAgIExldmVsREJU
cmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uID0gSURCQmFja2luZ1N0b3JlOjpUcmFuc2Fj
dGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7CiAKICAgICBjb25zdCBW
ZWN0b3I8Y2hhcj4ga2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcktleSA9IE9iamVjdFN0b3JlTWV0
YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBPYmplY3RTdG9yZU1l
dGFEYXRhS2V5OjpLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKTsKIAotICAgIGludDY0X3Qga2V5
R2VuZXJhdG9yQ3VycmVudE51bWJlciA9IC0xOworICAgIGtleUdlbmVyYXRvckN1cnJlbnROdW1i
ZXIgPSAtMTsKICAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKIAotICAgIGlmIChsZXZlbERCVHJhbnNh
Y3Rpb24tPmdldChrZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyS2V5LCBkYXRhKSkKKyAgICBib29s
IGZvdW5kID0gZmFsc2U7CisgICAgYm9vbCBvayA9IGxldmVsREJUcmFuc2FjdGlvbi0+c2FmZUdl
dChrZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyS2V5LCBkYXRhLCBmb3VuZCk7CisgICAgaWYgKCFv
aykgeworICAgICAgICBMT0dfRVJST1IoIkxldmVsZGIgaGFkIHByb2JsZW1zIGxvb2tpbmcgdXAg
a2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcktleSIpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgIGlmIChmb3VuZCkKICAgICAgICAga2V5R2VuZXJhdG9yQ3VycmVudE51bWJlciA9
IGRlY29kZUludChkYXRhLmJlZ2luKCksIGRhdGEuZW5kKCkpOwogICAgIGVsc2UgewogICAgICAg
ICAvLyBQcmV2aW91c2x5LCB0aGUga2V5IGdlbmVyYXRvciBzdGF0ZSB3YXMgbm90IHN0b3JlZCBl
eHBsaWNpdGx5IGJ1dCBkZXJpdmVkIGZyb20gdGhlCkBAIC03NDEsMjkgKzc1OSwzOSBAQCBpbnQ2
NF90IElEQkJhY2tpbmdTdG9yZTo6Z2V0S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihJREJCYWNr
aW5nU3RvcmU6OlRyYW5zYWN0aQogICAgIHJldHVybiBrZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVy
OwogfQogCi12b2lkIElEQkJhY2tpbmdTdG9yZTo6bWF5YmVVcGRhdGVLZXlHZW5lcmF0b3JDdXJy
ZW50TnVtYmVyKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBuZXdOdW1iZXIs
IGJvb2wgY2hlY2tDdXJyZW50KQorYm9vbCBJREJCYWNraW5nU3RvcmU6Om1heWJlVXBkYXRlS2V5
R2VuZXJhdG9yQ3VycmVudE51bWJlcihJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFu
c2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0
X3QgbmV3TnVtYmVyLCBib29sIGNoZWNrQ3VycmVudCkKIHsKICAgICBMZXZlbERCVHJhbnNhY3Rp
b24qIGxldmVsREJUcmFuc2FjdGlvbiA9IElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246Omxl
dmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOwogCiAgICAgaWYgKGNoZWNrQ3VycmVu
dCkgewotICAgICAgICBpbnQ2NF90IGN1cnJlbnROdW1iZXIgPSBnZXRLZXlHZW5lcmF0b3JDdXJy
ZW50TnVtYmVyKHRyYW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkKTsKKyAgICAg
ICAgaW50NjRfdCBjdXJyZW50TnVtYmVyOworICAgICAgICBib29sIG9rID0gZ2V0S2V5R2VuZXJh
dG9yQ3VycmVudE51bWJlcih0cmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwg
Y3VycmVudE51bWJlcik7CisgICAgICAgIGlmICghb2spIHsKKyAgICAgICAgICAgIExPR19FUlJP
UigiRGlzayBlcnJvciBpbiBnZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyIik7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KICAgICAgICAgaWYgKG5ld051bWJlciA8PSBj
dXJyZW50TnVtYmVyKQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogCiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IGtleUdlbmVyYXRvckN1cnJlbnRO
dW1iZXJLZXkgPSBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2Jq
ZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6S2V5R2VuZXJhdG9yQ3VycmVudE51
bWJlcik7CiAgICAgcHV0SW50KGxldmVsREJUcmFuc2FjdGlvbiwga2V5R2VuZXJhdG9yQ3VycmVu
dE51bWJlcktleSwgbmV3TnVtYmVyKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBJREJC
YWNraW5nU3RvcmU6OmtleUV4aXN0c0luT2JqZWN0U3RvcmUoSURCQmFja2luZ1N0b3JlOjpUcmFu
c2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBjb25zdCBJREJLZXkmIGtleSwgUmVjb3JkSWRlbnRpZmllciogZm91bmRSZWNvcmRJ
ZGVudGlmaWVyKQorYm9vbCBJREJCYWNraW5nU3RvcmU6OmtleUV4aXN0c0luT2JqZWN0U3RvcmUo
SURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmIGtleSwgUmVjb3JkSWRl
bnRpZmllciogZm91bmRSZWNvcmRJZGVudGlmaWVyLCBib29sJiBmb3VuZCkKIHsKICAgICBJREJf
VFJBQ0UoIklEQkJhY2tpbmdTdG9yZTo6a2V5RXhpc3RzSW5PYmplY3RTdG9yZSIpOworICAgIGZv
dW5kID0gZmFsc2U7CiAgICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24g
PSBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRy
YW5zYWN0aW9uKTsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gbGV2ZWxkYktleSA9IE9iamVjdFN0
b3JlRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGtleSk7CiAgICAg
VmVjdG9yPGNoYXI+IGRhdGE7CiAKLSAgICBpZiAoIWxldmVsREJUcmFuc2FjdGlvbi0+Z2V0KGxl
dmVsZGJLZXksIGRhdGEpKQorICAgIGJvb2wgb2sgPSBsZXZlbERCVHJhbnNhY3Rpb24tPnNhZmVH
ZXQobGV2ZWxkYktleSwgZGF0YSwgZm91bmQpOworICAgIGlmICghb2spCiAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBpZiAoIWZvdW5kKQorICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGlu
dDY0X3QgdmVyc2lvbjsKICAgICBpZiAoIWRlY29kZVZhckludChkYXRhLmJlZ2luKCksIGRhdGEu
ZW5kKCksIHZlcnNpb24pKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJCYWNraW5nU3RvcmUuaAppbmRleCBmNGJlY2I5NzY1ZGM4OTMzODA2M2UzYjFhMzBiNzhj
ZjZiMmQ1MDIxLi5kNjQwYTcyZGQxNmZlMThjNGY1YzQxYjc1Zjc0MGM0MjdkODEzN2NkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUu
aApAQCAtODEsOSArODEsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHB1dFJlY29yZChJ
REJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYsIGNvbnN0IFN0cmluZyYgdmFsdWUsIFJlY29y
ZElkZW50aWZpZXIqKTsKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJPYmplY3RTdG9yZShJREJCYWNr
aW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQpOwogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVSZWNvcmQoSURCQmFja2luZ1N0b3Jl
OjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBjb25zdCBSZWNvcmRJZGVudGlmaWVyJik7Ci0gICAgdmlydHVhbCBpbnQ2NF90IGdldEtleUdl
bmVyYXRvckN1cnJlbnROdW1iZXIoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKTsKLSAgICB2aXJ0dWFsIHZvaWQg
bWF5YmVVcGRhdGVLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKElEQkJhY2tpbmdTdG9yZTo6VHJh
bnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50
NjRfdCBuZXdTdGF0ZSwgYm9vbCBjaGVja0N1cnJlbnQpOwotICAgIHZpcnR1YWwgYm9vbCBrZXlF
eGlzdHNJbk9iamVjdFN0b3JlKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiwgUmVjb3Jk
SWRlbnRpZmllciogZm91bmRSZWNvcmRJZGVudGlmaWVyKTsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0
S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwg
aW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QmIGN1cnJl
bnROdW1iZXIpOworICAgIHZpcnR1YWwgYm9vbCBtYXliZVVwZGF0ZUtleUdlbmVyYXRvckN1cnJl
bnROdW1iZXIoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IG5ld1N0YXRlLCBib29sIGNoZWNrQ3Vy
cmVudCk7CisgICAgdmlydHVhbCBib29sIGtleUV4aXN0c0luT2JqZWN0U3RvcmUoSURCQmFja2lu
Z1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBjb25zdCBJREJLZXkmLCBSZWNvcmRJZGVudGlmaWVyKiBmb3VuZFJlY29yZElkZW50
aWZpZXIsIGJvb2wmIGZvdW5kKTsKIAogICAgIHZpcnR1YWwgVmVjdG9yPElEQkluZGV4TWV0YWRh
dGE+IGdldEluZGV4ZXMoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQp
OwogICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVJbmRleChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0
aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qg
aW5kZXhJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9vbCBpc1Vu
aXF1ZSwgYm9vbCBpc011bHRpRW50cnkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcAppbmRl
eCA2YTE0YWQ3OTIwYTZmZDY1ZTkzNmUxMTk5ZDU0OTQ1NDNkMjQyYjI4Li45OWQyMjdlNjVmZDg3
YTY3ZWFkMDQ4OGE4NDE2Y2IwY2RhMmQ0NDJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNw
cApAQCAtMjI5LDcgKzIyOSwxNCBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnNl
dEluZGV4S2V5cyhQYXNzUmVmUHRyPElEQktleT4gcHJwUHJpbWFyeUtleSwgYwogCiAgICAgLy8g
RklYTUU6IFRoaXMgbWV0aG9kIGNvdWxkIGJlIGFzeW5jaHJvbm91cywgYnV0IHdlIG5lZWQgdG8g
ZXZhbHVhdGUgaWYgaXQncyB3b3J0aCB0aGUgZXh0cmEgY29tcGxleGl0eS4KICAgICBJREJCYWNr
aW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXIgcmVjb3JkSWRlbnRpZmllcjsKLSAgICBpZiAoIWJh
Y2tpbmdTdG9yZSgpLT5rZXlFeGlzdHNJbk9iamVjdFN0b3JlKHRyYW5zYWN0aW9uLT5iYWNraW5n
U3RvcmVUcmFuc2FjdGlvbigpLCBkYXRhYmFzZUlkKCksIGlkKCksICpwcmltYXJ5S2V5LCAmcmVj
b3JkSWRlbnRpZmllcikpIHsKKyAgICBib29sIGZvdW5kID0gZmFsc2U7CisgICAgYm9vbCBvayA9
IGJhY2tpbmdTdG9yZSgpLT5rZXlFeGlzdHNJbk9iamVjdFN0b3JlKHRyYW5zYWN0aW9uLT5iYWNr
aW5nU3RvcmVUcmFuc2FjdGlvbigpLCBkYXRhYmFzZUlkKCksIGlkKCksICpwcmltYXJ5S2V5LCAm
cmVjb3JkSWRlbnRpZmllciwgZm91bmQpOworICAgIGlmICghb2spIHsKKyAgICAgICAgTE9HX0VS
Uk9SKCJrZXlFeGlzdHNJbk9iamVjdFN0b3JlIHJhbiBpbiB0byBzb21lIGNvcnJ1cHRpb24iKTsK
KyAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgaWYgKCFmb3VuZCkgewogICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KQEAgLTI5Niw5ICszMDMsMTcgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjpwdXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0
cjwKICAgICBBU1NFUlQoa2V5ICYmIGtleS0+aXNWYWxpZCgpKTsKIAogICAgIElEQkJhY2tpbmdT
dG9yZTo6UmVjb3JkSWRlbnRpZmllciByZWNvcmRJZGVudGlmaWVyOwotICAgIGlmIChwdXRNb2Rl
ID09IEFkZE9ubHkgJiYgb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5rZXlFeGlzdHNJbk9i
amVjdFN0b3JlKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBvYmplY3RT
dG9yZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+aWQoKSwgKmtleSwgJnJlY29yZElkZW50
aWZpZXIpKSB7Ci0gICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpj
cmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkNPTlNUUkFJTlRfRVJSLCAiS2V5IGFscmVhZHkg
ZXhpc3RzIGluIHRoZSBvYmplY3Qgc3RvcmUuIikpOwotICAgICAgICByZXR1cm47CisgICAgaWYg
KHB1dE1vZGUgPT0gQWRkT25seSkgeworICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7CisgICAg
ICAgIGJvb2wgb2sgPSBvYmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCktPmtleUV4aXN0c0luT2Jq
ZWN0U3RvcmUodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG9iamVjdFN0
b3JlLT5kYXRhYmFzZUlkKCksIG9iamVjdFN0b3JlLT5pZCgpLCAqa2V5LCAmcmVjb3JkSWRlbnRp
ZmllciwgZm91bmQpOworICAgICAgICBpZiAoIW9rKSB7CisgICAgICAgICAgICBjYWxsYmFja3Mt
Pm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpV
TktOT1dOX0VSUiwgIkludGVybmFsIGVycm9yLiIpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoZm91bmQpIHsKKyAgICAgICAgICAgIGNhbGxiYWNrcy0+b25F
cnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkNPTlNU
UkFJTlRfRVJSLCAiS2V5IGFscmVhZHkgZXhpc3RzIGluIHRoZSBvYmplY3Qgc3RvcmUuIikpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgfQogCiAgICAgVmVjdG9yPE93blB0
cjxJbmRleFdyaXRlcj4gPiBpbmRleFdyaXRlcnM7CkBAIC0zMTcsOCArMzMyLDEzIEBAIHZvaWQg
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFBhc3NSZWZQdHI8CiAgICAgICAgIGluZGV4V3JpdGVyLT53cml0ZUluZGV4S2V5cyhy
ZWNvcmRJZGVudGlmaWVyLCAqb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLCB0cmFuc2FjdGlv
bi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwg
b2JqZWN0U3RvcmUtPm1fbWV0YWRhdGEuaWQpOwogICAgIH0KIAotICAgIGlmIChhdXRvSW5jcmVt
ZW50ICYmIHB1dE1vZGUgIT0gQ3Vyc29yVXBkYXRlICYmIGtleS0+dHlwZSgpID09IElEQktleTo6
TnVtYmVyVHlwZSkKLSAgICAgICAgb2JqZWN0U3RvcmUtPnVwZGF0ZUtleUdlbmVyYXRvcih0cmFu
c2FjdGlvbiwga2V5LmdldCgpLCAha2V5V2FzR2VuZXJhdGVkKTsKKyAgICBpZiAoYXV0b0luY3Jl
bWVudCAmJiBwdXRNb2RlICE9IEN1cnNvclVwZGF0ZSAmJiBrZXktPnR5cGUoKSA9PSBJREJLZXk6
Ok51bWJlclR5cGUpIHsKKyAgICAgICAgYm9vbCBvayA9IG9iamVjdFN0b3JlLT51cGRhdGVLZXlH
ZW5lcmF0b3IodHJhbnNhY3Rpb24sIGtleS5nZXQoKSwgIWtleVdhc0dlbmVyYXRlZCk7CisgICAg
ICAgIGlmICghb2spIHsKKyAgICAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFz
ZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJSLCAiRGlzayBF
cnJvciIpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KIAogICAgIGNh
bGxiYWNrcy0+b25TdWNjZXNzKGtleS5yZWxlYXNlKCkpOwogfQpAQCAtNTIxLDE3ICs1NDEsMjIg
QEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjphZGRJbmRleFRvTWFwKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHQKIFBhc3NSZWZQdHI8SURCS2V5PiBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpnZW5lcmF0ZUtleShQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw+IHRyYW5zYWN0aW9uKQogewogICAgIGNvbnN0IGludDY0X3QgbWF4R2VuZXJhdG9y
VmFsdWUgPSA5MDA3MTk5MjU0NzQwOTkyTEw7IC8vIE1heGltdW0gaW50ZWdlciBzdG9yYWJsZSBh
cyBFQ01BU2NyaXB0IG51bWJlci4KLSAgICBpbnQ2NF90IGN1cnJlbnROdW1iZXIgPSBiYWNraW5n
U3RvcmUoKS0+Z2V0S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcih0cmFuc2FjdGlvbi0+YmFja2lu
Z1N0b3JlVHJhbnNhY3Rpb24oKSwgZGF0YWJhc2VJZCgpLCBpZCgpKTsKKyAgICBpbnQ2NF90IGN1
cnJlbnROdW1iZXI7CisgICAgYm9vbCBvayA9IGJhY2tpbmdTdG9yZSgpLT5nZXRLZXlHZW5lcmF0
b3JDdXJyZW50TnVtYmVyKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBk
YXRhYmFzZUlkKCksIGlkKCksIGN1cnJlbnROdW1iZXIpOworICAgIGlmICghb2spIHsKKyAgICAg
ICAgTE9HX0VSUk9SKCJEaXNrIGVycm9yIHdoaWxlIGRvaW5nIGdldEtleUdlbmVyYXRvckN1cnJl
bnROdW1iZXIiKTsKKyAgICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlSW52YWxpZCgpOworICAg
IH0KICAgICBpZiAoY3VycmVudE51bWJlciA8IDAgfHwgY3VycmVudE51bWJlciA+IG1heEdlbmVy
YXRvclZhbHVlKQogICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVJbnZhbGlkKCk7CiAKICAg
ICByZXR1cm4gSURCS2V5OjpjcmVhdGVOdW1iZXIoY3VycmVudE51bWJlcik7CiB9CiAKLXZvaWQg
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6dXBkYXRlS2V5R2VuZXJhdG9yKFBhc3NSZWZQdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24sIGNvbnN0IElEQktleSoga2V5
LCBib29sIGNoZWNrQ3VycmVudCkKK2Jvb2wgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6dXBk
YXRlS2V5R2VuZXJhdG9yKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJh
bnNhY3Rpb24sIGNvbnN0IElEQktleSoga2V5LCBib29sIGNoZWNrQ3VycmVudCkKIHsKICAgICBB
U1NFUlQoa2V5ICYmIGtleS0+dHlwZSgpID09IElEQktleTo6TnVtYmVyVHlwZSk7Ci0gICAgYmFj
a2luZ1N0b3JlKCktPm1heWJlVXBkYXRlS2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcih0cmFuc2Fj
dGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgZGF0YWJhc2VJZCgpLCBpZCgpLCBzdGF0
aWNfY2FzdDxpbnQ2NF90PihmbG9vcihrZXktPm51bWJlcigpKSkgKyAxLCBjaGVja0N1cnJlbnQp
OworICAgIHJldHVybiBiYWNraW5nU3RvcmUoKS0+bWF5YmVVcGRhdGVLZXlHZW5lcmF0b3JDdXJy
ZW50TnVtYmVyKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBkYXRhYmFz
ZUlkKCksIGlkKCksIHN0YXRpY19jYXN0PGludDY0X3Q+KGZsb29yKGtleS0+bnVtYmVyKCkpKSAr
IDEsIGNoZWNrQ3VycmVudCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGwuaAppbmRleCBjZmRlM2JlN2IzNDUxYmIyYjYzMjZlZGFiNjA3ZWQyODBiNDM0
MjA0Li5hZTFhYTZkZTBmMGE5YTJhZDUyZDJlZmJiODRkOTU1ZTU3Mjk2ODhhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbC5oCkBAIC05Niw3ICs5Niw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGxv
YWRJbmRleGVzKCk7CiAgICAgUGFzc1JlZlB0cjxJREJLZXk+IGdlbmVyYXRlS2V5KFBhc3NSZWZQ
dHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOwotICAgIHZvaWQgdXBkYXRlS2V5R2VuZXJh
dG9yKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4sIGNvbnN0IElEQktleSos
IGJvb2wgY2hlY2tDdXJyZW50KTsKKyAgICBib29sIHVwZGF0ZUtleUdlbmVyYXRvcihQYXNzUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+LCBjb25zdCBJREJLZXkqLCBib29sIGNoZWNr
Q3VycmVudCk7CiAKICAgICBzdGF0aWMgdm9pZCBnZXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0
cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7CiAgICAgc3RhdGljIHZvaWQgcHV0SW50ZXJuYWwoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bD4sIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxJREJLZXk+
LCBQdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbD4sIFBhc3NPd25QdHI8VmVjdG9yPGludDY0X3Q+ID4gcG9wSW5kZXhO
YW1lcywgUGFzc093blB0cjxWZWN0b3I8SW5kZXhLZXlzPiA+KTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQkRhdGFiYXNlLmNwcAppbmRleCBlZGY5ZGIy
NTcyZTM1OGY3YjVjYzNhNzU0NDczMGFkNDdmY2YzMWQzLi4yZDVjZmNkN2Y2YjFlYWQyOWFjOTY2
MzgwNWNhM2E3ZTIwOTg1ZjIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9s
ZXZlbGRiL0xldmVsREJEYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bGV2ZWxkYi9MZXZlbERCRGF0YWJhc2UuY3BwCkBAIC0xOTgsOCArMTk4LDkgQEAgYm9vbCBMZXZl
bERCRGF0YWJhc2U6OnJlbW92ZShjb25zdCBMZXZlbERCU2xpY2UmIGtleSkKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLWJvb2wgTGV2ZWxEQkRhdGFiYXNlOjpnZXQoY29uc3QgTGV2ZWxEQlNsaWNl
JiBrZXksIFZlY3RvcjxjaGFyPiYgdmFsdWUsIGNvbnN0IExldmVsREJTbmFwc2hvdCogc25hcHNo
b3QpCitib29sIExldmVsREJEYXRhYmFzZTo6c2FmZUdldChjb25zdCBMZXZlbERCU2xpY2UmIGtl
eSwgVmVjdG9yPGNoYXI+JiB2YWx1ZSwgYm9vbCYgZm91bmQsIGNvbnN0IExldmVsREJTbmFwc2hv
dCogc25hcHNob3QpCiB7CisgICAgZm91bmQgPSBmYWxzZTsKICAgICBzdGQ6OnN0cmluZyByZXN1
bHQ7CiAgICAgbGV2ZWxkYjo6UmVhZE9wdGlvbnMgcmVhZE9wdGlvbnM7CiAgICAgcmVhZE9wdGlv
bnMudmVyaWZ5X2NoZWNrc3VtcyA9IHRydWU7IC8vIEZJWE1FOiBEaXNhYmxlIHRoaXMgaWYgdGhl
IHBlcmZvcm1hbmNlIGltcGFjdCBpcyB0b28gZ3JlYXQuCkBAIC0yMDcsMTEgKzIwOCwxMiBAQCBi
b29sIExldmVsREJEYXRhYmFzZTo6Z2V0KGNvbnN0IExldmVsREJTbGljZSYga2V5LCBWZWN0b3I8
Y2hhcj4mIHZhbHVlLCBjb25zdCBMZQogCiAgICAgY29uc3QgbGV2ZWxkYjo6U3RhdHVzIHMgPSBt
X2RiLT5HZXQocmVhZE9wdGlvbnMsIG1ha2VTbGljZShrZXkpLCAmcmVzdWx0KTsKICAgICBpZiAo
cy5vaygpKSB7CisgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgdmFsdWUgPSBtYWtlVmVj
dG9yKHJlc3VsdCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBpZiAocy5Jc05v
dEZvdW5kKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgTE9HX0VSUk9SKCJMZXZlbERCIGdldCBmYWlsZWQ6ICVzIiwgcy5Ub1N0cmluZygpLmNfc3Ry
KCkpOwogICAgIHJldHVybiBmYWxzZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2xldmVsZGIvTGV2ZWxEQkRhdGFiYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9sZXZlbGRiL0xldmVsREJEYXRhYmFzZS5oCmluZGV4IDJkMzJjZDczNjNlNTgzNjc3ZDVjYzdh
NDg0MzZlMzAyNzNhOGY1ZWQuLmY5ZjRkNGUxYmFlNGIwYjYzYjhhOThiZTkyMjIyOGQ0Njc1MTA1
OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQkRh
dGFiYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCRGF0
YWJhc2UuaApAQCAtNjksNyArNjksNyBAQCBwdWJsaWM6CiAKICAgICBib29sIHB1dChjb25zdCBM
ZXZlbERCU2xpY2UmIGtleSwgY29uc3QgVmVjdG9yPGNoYXI+JiB2YWx1ZSk7CiAgICAgYm9vbCBy
ZW1vdmUoY29uc3QgTGV2ZWxEQlNsaWNlJiBrZXkpOwotICAgIGJvb2wgZ2V0KGNvbnN0IExldmVs
REJTbGljZSYga2V5LCBWZWN0b3I8Y2hhcj4mIHZhbHVlLCBjb25zdCBMZXZlbERCU25hcHNob3Qq
ID0gMCk7CisgICAgYm9vbCBzYWZlR2V0KGNvbnN0IExldmVsREJTbGljZSYga2V5LCBWZWN0b3I8
Y2hhcj4mIHZhbHVlLCBib29sJiBmb3VuZCwgY29uc3QgTGV2ZWxEQlNuYXBzaG90KiA9IDApOwog
ICAgIGJvb2wgd3JpdGUoTGV2ZWxEQldyaXRlQmF0Y2gmKTsKICAgICBQYXNzT3duUHRyPExldmVs
REJJdGVyYXRvcj4gY3JlYXRlSXRlcmF0b3IoY29uc3QgTGV2ZWxEQlNuYXBzaG90KiA9IDApOwog
ICAgIGNvbnN0IExldmVsREJDb21wYXJhdG9yKiBjb21wYXJhdG9yKCkgY29uc3Q7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJUcmFuc2FjdGlvbi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJUcmFuc2FjdGlvbi5j
cHAKaW5kZXggZmU4MjYyYTI0MDIzMmQzZTI4MGU5ZDUwMmUyNjRjNGIyNDZkNDE4MC4uNTMzNWEw
MjhhZjdjNzgyZTIxMTdlM2U1NDllMWIzODNkYjY4ZmEwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCVHJhbnNhY3Rpb24uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQlRyYW5zYWN0aW9uLmNwcApAQCAtMTA3
LDIwICsxMDcsMzggQEAgdm9pZCBMZXZlbERCVHJhbnNhY3Rpb246OnJlbW92ZShjb25zdCBMZXZl
bERCU2xpY2UmIGtleSkKICAgICBzZXQoa2V5LCBWZWN0b3I8Y2hhcj4oKSwgdHJ1ZSk7CiB9CiAK
LWJvb2wgTGV2ZWxEQlRyYW5zYWN0aW9uOjpnZXQoY29uc3QgTGV2ZWxEQlNsaWNlJiBrZXksIFZl
Y3RvcjxjaGFyPiYgdmFsdWUpCitib29sIExldmVsREJUcmFuc2FjdGlvbjo6c2FmZUdldChjb25z
dCBMZXZlbERCU2xpY2UmIGtleSwgVmVjdG9yPGNoYXI+JiB2YWx1ZSwgYm9vbCYgZm91bmQpCiB7
CisgICAgZm91bmQgPSBmYWxzZTsKICAgICBBU1NFUlQoIW1fZmluaXNoZWQpOwogICAgIEFWTFRy
ZWVOb2RlKiBub2RlID0gbV90cmVlLnNlYXJjaChrZXkpOwogCiAgICAgaWYgKG5vZGUpIHsKICAg
ICAgICAgaWYgKG5vZGUtPmRlbGV0ZWQpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgICAgICB2YWx1ZSA9IG5vZGUtPnZhbHVlOworICAg
ICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHJl
dHVybiBtX2RiLT5nZXQoa2V5LCB2YWx1ZSwgJm1fc25hcHNob3QpOworICAgIGJvb2wgb2sgPSBt
X2RiLT5zYWZlR2V0KGtleSwgdmFsdWUsIGZvdW5kLCAmbV9zbmFwc2hvdCk7CisgICAgaWYgKCFv
aykgeworICAgICAgICBBU1NFUlQoIWZvdW5kKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBMZXZlbERCVHJhbnNhY3Rpb246OmdldChj
b25zdCBMZXZlbERCU2xpY2UmIGtleSwgVmVjdG9yPGNoYXI+JiB2YWx1ZSkKK3sKKyAgICBib29s
IGZvdW5kID0gZmFsc2U7CisgICAgYm9vbCBvayA9IHNhZmVHZXQoa2V5LCB2YWx1ZSwgZm91bmQp
OworICAgIGlmICghb2spIHsKKyAgICAgICAgQVNTRVJUKCFmb3VuZCk7CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICByZXR1cm4gb2sgJiYgZm91bmQ7CiB9CiAKIGJv
b2wgTGV2ZWxEQlRyYW5zYWN0aW9uOjpjb21taXQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCVHJhbnNhY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQlRyYW5zYWN0aW9uLmgKaW5kZXggOTQyMzZmZjc2MDUz
NTFlZjNiMWYyMWNkYTViNTU0ZjVhNDk1NmJhYy4uMjMzYTYwZWVhYWM2NWVhM2U0YjFjMDdkOWZh
ZjY5ODU2ZjJkMGYxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxk
Yi9MZXZlbERCVHJhbnNhY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZl
bGRiL0xldmVsREJUcmFuc2FjdGlvbi5oCkBAIC01NCw2ICs1NCw4IEBAIHB1YmxpYzoKICAgICB+
TGV2ZWxEQlRyYW5zYWN0aW9uKCk7CiAgICAgdm9pZCBwdXQoY29uc3QgTGV2ZWxEQlNsaWNlJiBr
ZXksIGNvbnN0IFZlY3RvcjxjaGFyPiYgdmFsdWUpOwogICAgIHZvaWQgcmVtb3ZlKGNvbnN0IExl
dmVsREJTbGljZSYga2V5KTsKKyAgICBib29sIHNhZmVHZXQoY29uc3QgTGV2ZWxEQlNsaWNlJiBr
ZXksIFZlY3RvcjxjaGFyPiYgdmFsdWUsIGJvb2wmIGZvdW5kKTsKKyAgICAvLyBGSVhNRTogQ29u
dmVydCBhbGwgY2FsbGVycyBvZiBnZXQgdG8gc2FmZUdldCB0aGVuIHJlbW92ZSBnZXQuCiAgICAg
Ym9vbCBnZXQoY29uc3QgTGV2ZWxEQlNsaWNlJiBrZXksIFZlY3RvcjxjaGFyPiYgdmFsdWUpOwog
ICAgIGJvb2wgY29tbWl0KCk7CiAgICAgdm9pZCByb2xsYmFjaygpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJGYWtlQmFja2luZ1N0b3JlLmggYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lEQkZha2VCYWNraW5nU3RvcmUuaAppbmRleCAzNDYzNjNh
YzNlNTQ2YTAyMzExNjhmYjYxNzA4YzUxZjljOWQzYmNjLi43NDE4YmEzNmM3ZWYyYzQ1ZDdlZWVj
MGIzMGU0ODNmODZkYTI5NzI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0lEQkZha2VCYWNraW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0lEQkZha2VCYWNraW5nU3RvcmUuaApAQCAtNDcsOSArNDcsOSBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCB2b2lkIHB1dFJlY29yZChUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBjb25zdCBTdHJpbmcmIHZhbHVl
LCBSZWNvcmRJZGVudGlmaWVyKikgT1ZFUlJJREUgeyB9CiAgICAgdmlydHVhbCB2b2lkIGNsZWFy
T2JqZWN0U3RvcmUoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCkgT1ZFUlJJREUgeyB9CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZVJlY29yZChU
cmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBj
b25zdCBSZWNvcmRJZGVudGlmaWVyJikgT1ZFUlJJREUgeyB9Ci0gICAgdmlydHVhbCBpbnQ2NF90
IGdldEtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkgT1ZFUlJJREUgeyByZXR1cm4gMDsgfQotICAg
IHZpcnR1YWwgdm9pZCBtYXliZVVwZGF0ZUtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIoVHJhbnNh
Y3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRf
dCBuZXdOdW1iZXIsIGJvb2wgY2hlY2tDdXJyZW50KSBPVkVSUklERSB7IH0KLSAgICB2aXJ0dWFs
IGJvb2wga2V5RXhpc3RzSW5PYmplY3RTdG9yZShUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBSZWNvcmRJZGVudGlm
aWVyKiBmb3VuZFJlY29yZElkZW50aWZpZXIpIE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9Cisg
ICAgdmlydHVhbCBib29sIGdldEtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIoVHJhbnNhY3Rpb24q
LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCYgY3Vy
cmVudE51bWJlcikgT1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBt
YXliZVVwZGF0ZUtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIoVHJhbnNhY3Rpb24qLCBpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBuZXdOdW1iZXIsIGJv
b2wgY2hlY2tDdXJyZW50KSBPVkVSUklERSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBi
b29sIGtleUV4aXN0c0luT2JqZWN0U3RvcmUoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiwgUmVjb3JkSWRlbnRpZmll
ciogZm91bmRSZWNvcmRJZGVudGlmaWVyLCBib29sJiBmb3VuZCkgT1ZFUlJJREUgeyByZXR1cm4g
dHJ1ZTsgfQogCiAgICAgdmlydHVhbCBWZWN0b3I8SURCSW5kZXhNZXRhZGF0YT4gZ2V0SW5kZXhl
cyhpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkgT1ZFUlJJREUgeyBy
ZXR1cm4gVmVjdG9yPElEQkluZGV4TWV0YWRhdGE+KCk7IH0KICAgICB2aXJ0dWFsIGJvb2wgY3Jl
YXRlSW5kZXgoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktl
eVBhdGgmLCBib29sIGlzVW5pcXVlLCBib29sIGlzTXVsdGlFbnRyeSkgT1ZFUlJJREUgeyByZXR1
cm4gZmFsc2U7IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xl
dmVsREJUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTGV2ZWxEQlRlc3Qu
Y3BwCmluZGV4IDdkYzAzNTVkZmU5MzVmMzkzMzE0NTBlZTY5NjYyOTc3MmVjYzJmMjkuLjRiOWNh
ZjhjZmMwOGViODFhNDlhNWJhNDEwZjgyZjNjMjU4MDFmMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvTGV2ZWxEQlRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvTGV2ZWxEQlRlc3QuY3BwCkBAIC03OSw4ICs3OSwxMCBAQCBURVNUKExl
dmVsREJEYXRhYmFzZVRlc3QsIENvcnJ1cHRpb25UZXN0KQogCiAgICAgbGV2ZWxkYiA9IExldmVs
REJEYXRhYmFzZTo6b3BlbihwYXRoLCAmY29tcGFyYXRvcik7CiAgICAgRVhQRUNUX1RSVUUobGV2
ZWxkYik7Ci0gICAgc3VjY2VzcyA9IGxldmVsZGItPmdldChrZXksIGdvdFZhbHVlKTsKKyAgICBi
b29sIGZvdW5kID0gZmFsc2U7CisgICAgc3VjY2VzcyA9IGxldmVsZGItPnNhZmVHZXQoa2V5LCBn
b3RWYWx1ZSwgZm91bmQpOwogICAgIEVYUEVDVF9UUlVFKHN1Y2Nlc3MpOworICAgIEVYUEVDVF9U
UlVFKGZvdW5kKTsKICAgICBFWFBFQ1RfRVEocHV0VmFsdWUsIGdvdFZhbHVlKTsKICAgICBsZXZl
bGRiLnJlbGVhc2UoKTsKICAgICBFWFBFQ1RfRkFMU0UobGV2ZWxkYik7CkBAIC05OCw4ICsxMDAs
OSBAQCBURVNUKExldmVsREJEYXRhYmFzZVRlc3QsIENvcnJ1cHRpb25UZXN0KQogCiAgICAgbGV2
ZWxkYiA9IExldmVsREJEYXRhYmFzZTo6b3BlbihwYXRoLCAmY29tcGFyYXRvcik7CiAgICAgRVhQ
RUNUX1RSVUUobGV2ZWxkYik7Ci0gICAgc3VjY2VzcyA9IGxldmVsZGItPmdldChrZXksIGdvdFZh
bHVlKTsKLSAgICBFWFBFQ1RfRkFMU0Uoc3VjY2Vzcyk7CisgICAgc3VjY2VzcyA9IGxldmVsZGIt
PnNhZmVHZXQoa2V5LCBnb3RWYWx1ZSwgZm91bmQpOworICAgIEVYUEVDVF9UUlVFKHN1Y2Nlc3Mp
OworICAgIEVYUEVDVF9GQUxTRShmb3VuZCk7CiB9CiAKIFRFU1QoTGV2ZWxEQkRhdGFiYXNlVGVz
dCwgVHJhbnNhY3Rpb24pCkBAIC0xMjksOCArMTMyLDEwIEBAIFRFU1QoTGV2ZWxEQkRhdGFiYXNl
VGVzdCwgVHJhbnNhY3Rpb24pCiAgICAgRVhQRUNUX1RSVUUoc3VjY2Vzcyk7CiAgICAgRVhQRUNU
X0VRKGNvbXBhcmF0b3IuY29tcGFyZShnb3RWYWx1ZSwgb2xkVmFsdWUpLCAwKTsKIAotICAgIHN1
Y2Nlc3MgPSBsZXZlbGRiLT5nZXQoa2V5LCBnb3RWYWx1ZSk7CisgICAgYm9vbCBmb3VuZCA9IGZh
bHNlOworICAgIHN1Y2Nlc3MgPSBsZXZlbGRiLT5zYWZlR2V0KGtleSwgZ290VmFsdWUsIGZvdW5k
KTsKICAgICBFWFBFQ1RfVFJVRShzdWNjZXNzKTsKKyAgICBFWFBFQ1RfVFJVRShmb3VuZCk7CiAg
ICAgRVhQRUNUX0VRKGNvbXBhcmF0b3IuY29tcGFyZShnb3RWYWx1ZSwgbmV3VmFsdWUpLCAwKTsK
IAogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBhZGRlZEtleSA9IGVuY29kZVN0cmluZygiYWRkZWQg
a2V5Iik7CkBAIC0xMzgsOCArMTQzLDkgQEAgVEVTVChMZXZlbERCRGF0YWJhc2VUZXN0LCBUcmFu
c2FjdGlvbikKICAgICBzdWNjZXNzID0gbGV2ZWxkYi0+cHV0KGFkZGVkS2V5LCBhZGRlZFZhbHVl
KTsKICAgICBFWFBFQ1RfVFJVRShzdWNjZXNzKTsKIAotICAgIHN1Y2Nlc3MgPSBsZXZlbGRiLT5n
ZXQoYWRkZWRLZXksIGdvdFZhbHVlKTsKKyAgICBzdWNjZXNzID0gbGV2ZWxkYi0+c2FmZUdldChh
ZGRlZEtleSwgZ290VmFsdWUsIGZvdW5kKTsKICAgICBFWFBFQ1RfVFJVRShzdWNjZXNzKTsKKyAg
ICBFWFBFQ1RfVFJVRShmb3VuZCk7CiAgICAgRVhQRUNUX0VRKGNvbXBhcmF0b3IuY29tcGFyZShn
b3RWYWx1ZSwgYWRkZWRWYWx1ZSksIDApOwogCiAgICAgc3VjY2VzcyA9IHRyYW5zYWN0aW9uLT5n
ZXQoYWRkZWRLZXksIGdvdFZhbHVlKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>176802</attachid>
            <date>2012-11-29 13:19:33 -0800</date>
            <delta_ts>2012-11-29 15:35:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-103580-20121129131707.patch</filename>
            <type>text/plain</type>
            <size>25035</size>
            <attacher name="David Grogan">dgrogan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM2MTQzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmY1Njc5ODkwMjgzMWEw
ZjRiYTg3MDA5OGUwNmU2ZDRkNzZkNjRhYS4uYzYxYzM2MDZlNmFiMmMyZjRhZTJmOTM5ZmI0NGM5
ZTg3YWZmYTg4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDEyLTExLTI4ICBEYXZp
ZCBHcm9nYW4gIDxkZ3JvZ2FuQGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IFBy
b3BhZ2F0ZSBtb3JlIGxldmVsZGIgZXJyb3JzIHRvIHNjcmlwdAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzNTgwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTGV2ZWxEQkRhdGFiYXNlIHVzZWQgYSBzaW5n
bGUgcmV0dXJuIHZhbHVlIHRvIGluZGljYXRlIGJvdGggSS9PIHByb2JsZW1zCisgICAgICAgIGFu
ZCBhIG1pc3Npbmcga2V5LiBOb3cgYW4gb3V0IHZhcmlhYmxlIGlzIHVzZWQgdG8gaW5kaWNhdGUg
aWYgdGhlCisgICAgICAgIHJlcXVlc3RlZCBrZXkgd2FzIGZvdW5kLiBUaGUgcmV0dXJuIHZhbHVl
IGlzIHVzZWQgdG8gcmVwb3J0IGNvcnJ1cHRpb24KKyAgICAgICAgb3IgZGlzayBlcnJvci4KKwor
ICAgICAgICBUaGlzIGlzIGEgc21hbGwgc3RlcCB0b3dhcmQgcHJvcGFnYXRpbmcgbG93IGxldmVs
IGVycm9ycyBldmVyeXdoZXJlCisgICAgICAgIHBvc3NpYmxlLiBTbyBmYXIgb25seSBvbmUgc2Nl
bmFyaW8gd2lsbCBuZXdseSBjYXVzZSBzY3JpcHQgdG8gcmVjZWl2ZQorICAgICAgICBhbiBlcnJv
cjogd2hlbiBsZXZlbGRiIGhhcyB0cm91YmxlIGxvb2tpbmcgZm9yIGV4aXN0aW5nIGtleXMgZHVy
aW5nIGFuCisgICAgICAgIG9iamVjdHN0b3JlLT5hZGQuCisKKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0SW50KToK
KyAgICAgICAgKFdlYkNvcmU6OmdldFZhckludCk6CisgICAgICAgIChXZWJDb3JlOjpnZXRTdHJp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlOjpnZXRLZXlHZW5lcmF0b3JD
dXJyZW50TnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6bWF5YmVV
cGRhdGVLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJh
Y2tpbmdTdG9yZTo6a2V5RXhpc3RzSW5PYmplY3RTdG9yZSk6CisgICAgICAgICogTW9kdWxlcy9p
bmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmg6CisgICAgICAgIChJREJCYWNraW5nU3RvcmUpOgor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6c2V0SW5kZXhL
ZXlzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dElu
dGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Omdl
bmVyYXRlS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6
OnVwZGF0ZUtleUdlbmVyYXRvcik6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbC5oOgorICAgICAgICAoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bCk6CisgICAgICAgICogcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCRGF0YWJhc2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6TGV2ZWxEQkRhdGFiYXNlOjpzYWZlR2V0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9sZXZlbGRiL0xldmVsREJEYXRhYmFzZS5oOgorICAgICAgICAoTGV2ZWxEQkRhdGFiYXNl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJUcmFuc2FjdGlvbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpMZXZlbERCVHJhbnNhY3Rpb246OnNhZmVHZXQpOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpMZXZlbERCVHJhbnNhY3Rpb246OmdldCk6Cisg
ICAgICAgICogcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCVHJhbnNhY3Rpb24uaDoKKyAgICAgICAg
KExldmVsREJUcmFuc2FjdGlvbik6CisKIDIwMTItMTEtMjkgIERhbiBCZXJuc3RlaW4gIDxtaXR6
QGFwcGxlLmNvbT4KIAogICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTI3NzE4ODU+IFN1cHBvcnQg
cnVieS1wb3NpdGlvbjoge2JlZm9yZSwgYWZ0ZXJ9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmlu
ZGV4IGRmMzYxMzkxYzkwZjhhNDdiZDZiYWRiZTc0ZDY1ZWQyNWRiYmIzNTAuLjRkNzYyMzIzOTJi
Zjg5YjhiMzk0MWYwZTJjNDNkNDVmOTczMzVhYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTMgQEAKKzIwMTItMTEtMjggIERhdmlkIEdyb2dhbiAgPGRncm9nYW5AY2hy
b21pdW0ub3JnPgorCisgICAgICAgIEluZGV4ZWREQjogUHJvcGFnYXRlIG1vcmUgbGV2ZWxkYiBl
cnJvcnMgdG8gc2NyaXB0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMDM1ODAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIHRlc3RzL0lEQkZha2VCYWNraW5nU3RvcmUuaDoKKyAgICAgICAgIFVwZGF0ZSBt
ZXRob2Qgc2lnbmF0dXJlcy4KKwogMjAxMi0xMS0yOSAgU3RlcGhlbiBDaGVubmV5ICA8c2NoZW5u
ZXlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtDaHJvbWl1bV0gQWRkIGNvZGUgc3VwcHByZXNz
aW9uIGZsYWdzIGZvciBza2lhCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCQmFja2luZ1N0b3JlLmNwcAppbmRleCA5OTA1ZDViNTMzZDEzM2FmYzk5ZDgxNTI0
YmFjNWYwMGQwNzQ1OTVkLi42MTI1M2ZhMDE0YjI0ZGJhOTU2OTBhNTQ3ZDk5NzE0Y2RmNmYzODU4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5n
U3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tp
bmdTdG9yZS5jcHAKQEAgLTkxLDcgKzkxLDExIEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBEQk9yVHJh
bnNhY3Rpb24+CiBzdGF0aWMgYm9vbCBnZXRJbnQoREJPclRyYW5zYWN0aW9uKiBkYiwgY29uc3Qg
TGV2ZWxEQlNsaWNlJiBrZXksIGludDY0X3QmIGZvdW5kSW50KQogewogICAgIFZlY3RvcjxjaGFy
PiByZXN1bHQ7Ci0gICAgaWYgKCFkYi0+Z2V0KGtleSwgcmVzdWx0KSkKKyAgICBib29sIGZvdW5k
ID0gZmFsc2U7CisgICAgYm9vbCBvayA9IGRiLT5zYWZlR2V0KGtleSwgcmVzdWx0LCBmb3VuZCk7
CisgICAgLy8gRklYTUU6IE5vdGlmeSB0aGUgY2FsbGVyIGlmICFvay4KKyAgICBBU1NFUlRfVU5V
U0VEKG9rLCBvayk7CisgICAgaWYgKCFmb3VuZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgZm91bmRJbnQgPSBkZWNvZGVJbnQocmVzdWx0LmJlZ2luKCksIHJlc3VsdC5lbmQoKSk7CkBA
IC0xMDgsNyArMTEyLDExIEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBEQk9yVHJhbnNhY3Rpb24+CiBz
dGF0aWMgYm9vbCBnZXRWYXJJbnQoREJPclRyYW5zYWN0aW9uKiBkYiwgY29uc3QgTGV2ZWxEQlNs
aWNlJiBrZXksIGludDY0X3QmIGZvdW5kSW50KQogewogICAgIFZlY3RvcjxjaGFyPiByZXN1bHQ7
Ci0gICAgaWYgKCFkYi0+Z2V0KGtleSwgcmVzdWx0KSkKKyAgICBib29sIGZvdW5kID0gZmFsc2U7
CisgICAgYm9vbCBvayA9IGRiLT5zYWZlR2V0KGtleSwgcmVzdWx0LCBmb3VuZCk7CisgICAgLy8g
RklYTUU6IE5vdGlmeSB0aGUgY2FsbGVyIGlmICFvay4KKyAgICBBU1NFUlRfVU5VU0VEKG9rLCBv
ayk7CisgICAgaWYgKCFmb3VuZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJu
IGRlY29kZVZhckludChyZXN1bHQuYmVnaW4oKSwgcmVzdWx0LmVuZCgpLCBmb3VuZEludCkgPT0g
cmVzdWx0LmVuZCgpOwpAQCAtMTIzLDcgKzEzMSwxMSBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgREJP
clRyYW5zYWN0aW9uPgogc3RhdGljIGJvb2wgZ2V0U3RyaW5nKERCT3JUcmFuc2FjdGlvbiogZGIs
IGNvbnN0IExldmVsREJTbGljZSYga2V5LCBTdHJpbmcmIGZvdW5kU3RyaW5nKQogewogICAgIFZl
Y3RvcjxjaGFyPiByZXN1bHQ7Ci0gICAgaWYgKCFkYi0+Z2V0KGtleSwgcmVzdWx0KSkKKyAgICBi
b29sIGZvdW5kID0gZmFsc2U7CisgICAgYm9vbCBvayA9IGRiLT5zYWZlR2V0KGtleSwgcmVzdWx0
LCBmb3VuZCk7CisgICAgLy8gRklYTUU6IE5vdGlmeSB0aGUgY2FsbGVyIGlmICFvay4KKyAgICBB
U1NFUlRfVU5VU0VEKG9rLCBvayk7CisgICAgaWYgKCFmb3VuZCkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgZm91bmRTdHJpbmcgPSBkZWNvZGVTdHJpbmcocmVzdWx0LmJlZ2luKCksIHJl
c3VsdC5lbmQoKSk7CkBAIC02OTksMTYgKzcxMSwyMiBAQCB2b2lkIElEQkJhY2tpbmdTdG9yZTo6
ZGVsZXRlUmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBp
bgogfQogCiAKLWludDY0X3QgSURCQmFja2luZ1N0b3JlOjpnZXRLZXlHZW5lcmF0b3JDdXJyZW50
TnVtYmVyKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKK2Jvb2wgSURCQmFja2luZ1N0b3Jl
OjpnZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rp
b24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgaW50NjRfdCYga2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcikKIHsKICAgICBMZXZlbERCVHJh
bnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rp
b246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOwogCiAgICAgY29uc3QgVmVj
dG9yPGNoYXI+IGtleUdlbmVyYXRvckN1cnJlbnROdW1iZXJLZXkgPSBPYmplY3RTdG9yZU1ldGFE
YXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVNZXRh
RGF0YUtleTo6S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcik7CiAKLSAgICBpbnQ2NF90IGtleUdl
bmVyYXRvckN1cnJlbnROdW1iZXIgPSAtMTsKKyAgICBrZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVy
ID0gLTE7CiAgICAgVmVjdG9yPGNoYXI+IGRhdGE7CiAKLSAgICBpZiAobGV2ZWxEQlRyYW5zYWN0
aW9uLT5nZXQoa2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcktleSwgZGF0YSkpCisgICAgYm9vbCBm
b3VuZCA9IGZhbHNlOworICAgIGJvb2wgb2sgPSBsZXZlbERCVHJhbnNhY3Rpb24tPnNhZmVHZXQo
a2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcktleSwgZGF0YSwgZm91bmQpOworICAgIGlmICghb2sp
IHsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9y
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoZm91bmQpCiAgICAgICAg
IGtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIgPSBkZWNvZGVJbnQoZGF0YS5iZWdpbigpLCBkYXRh
LmVuZCgpKTsKICAgICBlbHNlIHsKICAgICAgICAgLy8gUHJldmlvdXNseSwgdGhlIGtleSBnZW5l
cmF0b3Igc3RhdGUgd2FzIG5vdCBzdG9yZWQgZXhwbGljaXRseSBidXQgZGVyaXZlZCBmcm9tIHRo
ZQpAQCAtNzQxLDI5ICs3NTksMzkgQEAgaW50NjRfdCBJREJCYWNraW5nU3RvcmU6OmdldEtleUdl
bmVyYXRvckN1cnJlbnROdW1iZXIoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGkKICAgICByZXR1
cm4ga2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcjsKIH0KIAotdm9pZCBJREJCYWNraW5nU3RvcmU6
Om1heWJlVXBkYXRlS2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihJREJCYWNraW5nU3RvcmU6OlRy
YW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIGludDY0X3QgbmV3TnVtYmVyLCBib29sIGNoZWNrQ3VycmVudCkKK2Jvb2wgSURC
QmFja2luZ1N0b3JlOjptYXliZVVwZGF0ZUtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIoSURCQmFj
a2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IG5ld051bWJlciwgYm9vbCBjaGVja0N1cnJl
bnQpCiB7CiAgICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBJREJC
YWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0
aW9uKTsKIAogICAgIGlmIChjaGVja0N1cnJlbnQpIHsKLSAgICAgICAgaW50NjRfdCBjdXJyZW50
TnVtYmVyID0gZ2V0S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcih0cmFuc2FjdGlvbiwgZGF0YWJh
c2VJZCwgb2JqZWN0U3RvcmVJZCk7CisgICAgICAgIGludDY0X3QgY3VycmVudE51bWJlcjsKKyAg
ICAgICAgYm9vbCBvayA9IGdldEtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIodHJhbnNhY3Rpb24s
IGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGN1cnJlbnROdW1iZXIpOworICAgICAgICBpZiAo
IW9rKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAobmV3TnVtYmVyIDw9
IGN1cnJlbnROdW1iZXIpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4ga2V5R2VuZXJhdG9yQ3VycmVu
dE51bWJlcktleSA9IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBv
YmplY3RTdG9yZUlkLCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjpLZXlHZW5lcmF0b3JDdXJyZW50
TnVtYmVyKTsKICAgICBwdXRJbnQobGV2ZWxEQlRyYW5zYWN0aW9uLCBrZXlHZW5lcmF0b3JDdXJy
ZW50TnVtYmVyS2V5LCBuZXdOdW1iZXIpOworICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIElE
QkJhY2tpbmdTdG9yZTo6a2V5RXhpc3RzSW5PYmplY3RTdG9yZShJREJCYWNraW5nU3RvcmU6OlRy
YW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIGNvbnN0IElEQktleSYga2V5LCBSZWNvcmRJZGVudGlmaWVyKiBmb3VuZFJlY29y
ZElkZW50aWZpZXIpCitib29sIElEQkJhY2tpbmdTdG9yZTo6a2V5RXhpc3RzSW5PYmplY3RTdG9y
ZShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYga2V5LCBSZWNvcmRJ
ZGVudGlmaWVyKiBmb3VuZFJlY29yZElkZW50aWZpZXIsIGJvb2wmIGZvdW5kKQogewogICAgIElE
Ql9UUkFDRSgiSURCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbk9iamVjdFN0b3JlIik7CisgICAg
Zm91bmQgPSBmYWxzZTsKICAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlv
biA9IElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20o
dHJhbnNhY3Rpb24pOwogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBsZXZlbGRiS2V5ID0gT2JqZWN0
U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwga2V5KTsKICAg
ICBWZWN0b3I8Y2hhcj4gZGF0YTsKIAotICAgIGlmICghbGV2ZWxEQlRyYW5zYWN0aW9uLT5nZXQo
bGV2ZWxkYktleSwgZGF0YSkpCisgICAgYm9vbCBvayA9IGxldmVsREJUcmFuc2FjdGlvbi0+c2Fm
ZUdldChsZXZlbGRiS2V5LCBkYXRhLCBmb3VuZCk7CisgICAgaWYgKCFvaykgeworICAgICAgICBJ
bnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3IpOwogICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICghZm91bmQpCisgICAgICAgIHJldHVybiB0cnVl
OwogCiAgICAgaW50NjRfdCB2ZXJzaW9uOwogICAgIGlmICghZGVjb2RlVmFySW50KGRhdGEuYmVn
aW4oKSwgZGF0YS5lbmQoKSwgdmVyc2lvbikpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oCmluZGV4IGY0YmVjYjk3NjVkYzg5MzM4MDYz
ZTNiMWEzMGI3OGNmNmIyZDUwMjEuLjRmNTU5Njg1ODhkOTllMDY1ZjBkMGQyZjI4NTkzNGM2ZmY4
MWRmNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJh
Y2tpbmdTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJh
Y2tpbmdTdG9yZS5oCkBAIC04MSw5ICs4MSw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQg
cHV0UmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiwgY29uc3QgU3RyaW5nJiB2
YWx1ZSwgUmVjb3JkSWRlbnRpZmllciopOwogICAgIHZpcnR1YWwgdm9pZCBjbGVhck9iamVjdFN0
b3JlKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCk7CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZVJlY29yZChJREJC
YWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGNvbnN0IFJlY29yZElkZW50aWZpZXImKTsKLSAgICB2aXJ0dWFsIGludDY0
X3QgZ2V0S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0
aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpOwotICAgIHZp
cnR1YWwgdm9pZCBtYXliZVVwZGF0ZUtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIoSURCQmFja2lu
Z1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBpbnQ2NF90IG5ld1N0YXRlLCBib29sIGNoZWNrQ3VycmVudCk7Ci0gICAgdmlydHVh
bCBib29sIGtleUV4aXN0c0luT2JqZWN0U3RvcmUoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlv
biosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJL
ZXkmLCBSZWNvcmRJZGVudGlmaWVyKiBmb3VuZFJlY29yZElkZW50aWZpZXIpOworICAgIHZpcnR1
YWwgYm9vbCBnZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKElEQkJhY2tpbmdTdG9yZTo6VHJh
bnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50
NjRfdCYgY3VycmVudE51bWJlcikgV0FSTl9VTlVTRURfUkVUVVJOOworICAgIHZpcnR1YWwgYm9v
bCBtYXliZVVwZGF0ZUtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIoSURCQmFja2luZ1N0b3JlOjpU
cmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBp
bnQ2NF90IG5ld1N0YXRlLCBib29sIGNoZWNrQ3VycmVudCkgV0FSTl9VTlVTRURfUkVUVVJOOwor
ICAgIHZpcnR1YWwgYm9vbCBrZXlFeGlzdHNJbk9iamVjdFN0b3JlKElEQkJhY2tpbmdTdG9yZTo6
VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
Y29uc3QgSURCS2V5JiwgUmVjb3JkSWRlbnRpZmllciogZm91bmRSZWNvcmRJZGVudGlmaWVyLCBi
b29sJiBmb3VuZCkgV0FSTl9VTlVTRURfUkVUVVJOOwogCiAgICAgdmlydHVhbCBWZWN0b3I8SURC
SW5kZXhNZXRhZGF0YT4gZ2V0SW5kZXhlcyhpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCk7CiAgICAgdmlydHVhbCBib29sIGNyZWF0ZUluZGV4KElEQkJhY2tpbmdTdG9y
ZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgm
LCBib29sIGlzVW5pcXVlLCBib29sIGlzTXVsdGlFbnRyeSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZElt
cGwuY3BwCmluZGV4IGM5MGRhYzIyNGQ0NTVjMDEwNTE2NjdlM2M5MjRiOWM3M2ExODk2YjEuLjc3
OWFmZjZkMzUxNDgzYWRlZDk5YzY5OTNlMjU0ZmJjYzQzZmY1ZmYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGwuY3BwCkBAIC0yMzEsNyArMjMxLDE0IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6c2V0SW5kZXhLZXlzKFBhc3NSZWZQdHI8SURCS2V5PiBwcnBQcmltYXJ5S2V5LCBj
CiAKICAgICAvLyBGSVhNRTogVGhpcyBtZXRob2QgY291bGQgYmUgYXN5bmNocm9ub3VzLCBidXQg
d2UgbmVlZCB0byBldmFsdWF0ZSBpZiBpdCdzIHdvcnRoIHRoZSBleHRyYSBjb21wbGV4aXR5Lgog
ICAgIElEQkJhY2tpbmdTdG9yZTo6UmVjb3JkSWRlbnRpZmllciByZWNvcmRJZGVudGlmaWVyOwot
ICAgIGlmICghYmFja2luZ1N0b3JlKCktPmtleUV4aXN0c0luT2JqZWN0U3RvcmUodHJhbnNhY3Rp
b24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIGRhdGFiYXNlSWQoKSwgaWQoKSwgKnByaW1h
cnlLZXksICZyZWNvcmRJZGVudGlmaWVyKSkgeworICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAg
ICBib29sIG9rID0gYmFja2luZ1N0b3JlKCktPmtleUV4aXN0c0luT2JqZWN0U3RvcmUodHJhbnNh
Y3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIGRhdGFiYXNlSWQoKSwgaWQoKSwgKnBy
aW1hcnlLZXksICZyZWNvcmRJZGVudGlmaWVyLCBmb3VuZCk7CisgICAgaWYgKCFvaykgeworICAg
ICAgICBMT0dfRVJST1IoImtleUV4aXN0c0luT2JqZWN0U3RvcmUgcmFuIGluIHRvIHNvbWUgY29y
cnVwdGlvbiIpOworICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoSURCRGF0YWJhc2VFcnJvcjo6
Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVTktOT1dOX0VSUiwgIkludGVybmFsIEVycm9y
IHNldHRpbmcgaW5kZXgga2V5cy4iKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYg
KCFmb3VuZCkgewogICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KQEAgLTMwMCw5ICszMDcsMTcgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsOjpwdXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjwKICAg
ICBBU1NFUlQoa2V5ICYmIGtleS0+aXNWYWxpZCgpKTsKIAogICAgIElEQkJhY2tpbmdTdG9yZTo6
UmVjb3JkSWRlbnRpZmllciByZWNvcmRJZGVudGlmaWVyOwotICAgIGlmIChwdXRNb2RlID09IEFk
ZE9ubHkgJiYgb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5rZXlFeGlzdHNJbk9iamVjdFN0
b3JlKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBvYmplY3RTdG9yZS0+
ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+aWQoKSwgKmtleSwgJnJlY29yZElkZW50aWZpZXIp
KSB7Ci0gICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUo
SURCRGF0YWJhc2VFeGNlcHRpb246OkNPTlNUUkFJTlRfRVJSLCAiS2V5IGFscmVhZHkgZXhpc3Rz
IGluIHRoZSBvYmplY3Qgc3RvcmUuIikpOwotICAgICAgICByZXR1cm47CisgICAgaWYgKHB1dE1v
ZGUgPT0gQWRkT25seSkgeworICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7CisgICAgICAgIGJv
b2wgb2sgPSBvYmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCktPmtleUV4aXN0c0luT2JqZWN0U3Rv
cmUodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG9iamVjdFN0b3JlLT5k
YXRhYmFzZUlkKCksIG9iamVjdFN0b3JlLT5pZCgpLCAqa2V5LCAmcmVjb3JkSWRlbnRpZmllciwg
Zm91bmQpOworICAgICAgICBpZiAoIW9rKSB7CisgICAgICAgICAgICBjYWxsYmFja3MtPm9uRXJy
b3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVTktOT1dO
X0VSUiwgIkludGVybmFsIEVycm9yIGNoZWNraW5nIGtleSBleGlzdGVuY2UuIikpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmIChmb3VuZCkgeworICAgICAgICAg
ICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6Q09OU1RSQUlOVF9FUlIsICJLZXkgYWxyZWFkeSBleGlzdHMgaW4gdGhlIG9i
amVjdCBzdG9yZS4iKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICB9CiAK
ICAgICBWZWN0b3I8T3duUHRyPEluZGV4V3JpdGVyPiA+IGluZGV4V3JpdGVyczsKQEAgLTMyMSw4
ICszMzYsMTMgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjwKICAgICAgICAgaW5kZXhXcml0ZXIt
PndyaXRlSW5kZXhLZXlzKHJlY29yZElkZW50aWZpZXIsICpvYmplY3RTdG9yZS0+YmFja2luZ1N0
b3JlKCksIHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBvYmplY3RTdG9y
ZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+bV9tZXRhZGF0YS5pZCk7CiAgICAgfQogCi0g
ICAgaWYgKGF1dG9JbmNyZW1lbnQgJiYgcHV0TW9kZSAhPSBDdXJzb3JVcGRhdGUgJiYga2V5LT50
eXBlKCkgPT0gSURCS2V5OjpOdW1iZXJUeXBlKQotICAgICAgICBvYmplY3RTdG9yZS0+dXBkYXRl
S2V5R2VuZXJhdG9yKHRyYW5zYWN0aW9uLCBrZXkuZ2V0KCksICFrZXlXYXNHZW5lcmF0ZWQpOwor
ICAgIGlmIChhdXRvSW5jcmVtZW50ICYmIHB1dE1vZGUgIT0gQ3Vyc29yVXBkYXRlICYmIGtleS0+
dHlwZSgpID09IElEQktleTo6TnVtYmVyVHlwZSkgeworICAgICAgICBib29sIG9rID0gb2JqZWN0
U3RvcmUtPnVwZGF0ZUtleUdlbmVyYXRvcih0cmFuc2FjdGlvbiwga2V5LmdldCgpLCAha2V5V2Fz
R2VuZXJhdGVkKTsKKyAgICAgICAgaWYgKCFvaykgeworICAgICAgICAgICAgY2FsbGJhY2tzLT5v
bkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VU5L
Tk9XTl9FUlIsICJJbnRlcm5hbCBFcnJvciB1cGRhdGluZyBrZXkgZ2VuZXJhdG9yLiIpKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KIAogICAgIGNhbGxiYWNrcy0+b25T
dWNjZXNzKGtleS5yZWxlYXNlKCkpOwogfQpAQCAtNTI1LDE3ICs1NDUsMjIgQEAgdm9pZCBJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjphZGRJbmRleFRvTWFwKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBQYXNzUmVmUHQKIFBhc3NSZWZQdHI8SURCS2V5PiBJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsOjpnZW5lcmF0ZUtleShQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRy
YW5zYWN0aW9uKQogewogICAgIGNvbnN0IGludDY0X3QgbWF4R2VuZXJhdG9yVmFsdWUgPSA5MDA3
MTk5MjU0NzQwOTkyTEw7IC8vIE1heGltdW0gaW50ZWdlciBzdG9yYWJsZSBhcyBFQ01BU2NyaXB0
IG51bWJlci4KLSAgICBpbnQ2NF90IGN1cnJlbnROdW1iZXIgPSBiYWNraW5nU3RvcmUoKS0+Z2V0
S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcih0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNh
Y3Rpb24oKSwgZGF0YWJhc2VJZCgpLCBpZCgpKTsKKyAgICBpbnQ2NF90IGN1cnJlbnROdW1iZXI7
CisgICAgYm9vbCBvayA9IGJhY2tpbmdTdG9yZSgpLT5nZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVt
YmVyKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBkYXRhYmFzZUlkKCks
IGlkKCksIGN1cnJlbnROdW1iZXIpOworICAgIGlmICghb2spIHsKKyAgICAgICAgTE9HX0VSUk9S
KCJEaXNrIGVycm9yIHdoaWxlIGRvaW5nIGdldEtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIiKTsK
KyAgICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlSW52YWxpZCgpOworICAgIH0KICAgICBpZiAo
Y3VycmVudE51bWJlciA8IDAgfHwgY3VycmVudE51bWJlciA+IG1heEdlbmVyYXRvclZhbHVlKQog
ICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVJbnZhbGlkKCk7CiAKICAgICByZXR1cm4gSURC
S2V5OjpjcmVhdGVOdW1iZXIoY3VycmVudE51bWJlcik7CiB9CiAKLXZvaWQgSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6dXBkYXRlS2V5R2VuZXJhdG9yKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24sIGNvbnN0IElEQktleSoga2V5LCBib29sIGNoZWNr
Q3VycmVudCkKK2Jvb2wgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6dXBkYXRlS2V5R2VuZXJh
dG9yKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24sIGNv
bnN0IElEQktleSoga2V5LCBib29sIGNoZWNrQ3VycmVudCkKIHsKICAgICBBU1NFUlQoa2V5ICYm
IGtleS0+dHlwZSgpID09IElEQktleTo6TnVtYmVyVHlwZSk7Ci0gICAgYmFja2luZ1N0b3JlKCkt
Pm1heWJlVXBkYXRlS2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcih0cmFuc2FjdGlvbi0+YmFja2lu
Z1N0b3JlVHJhbnNhY3Rpb24oKSwgZGF0YWJhc2VJZCgpLCBpZCgpLCBzdGF0aWNfY2FzdDxpbnQ2
NF90PihmbG9vcihrZXktPm51bWJlcigpKSkgKyAxLCBjaGVja0N1cnJlbnQpOworICAgIHJldHVy
biBiYWNraW5nU3RvcmUoKS0+bWF5YmVVcGRhdGVLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKHRy
YW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBkYXRhYmFzZUlkKCksIGlkKCks
IHN0YXRpY19jYXN0PGludDY0X3Q+KGZsb29yKGtleS0+bnVtYmVyKCkpKSArIDEsIGNoZWNrQ3Vy
cmVudCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwu
aAppbmRleCBjZmRlM2JlN2IzNDUxYmIyYjYzMjZlZGFiNjA3ZWQyODBiNDM0MjA0Li5hZTFhYTZk
ZTBmMGE5YTJhZDUyZDJlZmJiODRkOTU1ZTU3Mjk2ODhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bC5oCkBAIC05Niw3ICs5Niw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGxvYWRJbmRleGVzKCk7
CiAgICAgUGFzc1JlZlB0cjxJREJLZXk+IGdlbmVyYXRlS2V5KFBhc3NSZWZQdHI8SURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbD4pOwotICAgIHZvaWQgdXBkYXRlS2V5R2VuZXJhdG9yKFBhc3NSZWZQ
dHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4sIGNvbnN0IElEQktleSosIGJvb2wgY2hlY2tD
dXJyZW50KTsKKyAgICBib29sIHVwZGF0ZUtleUdlbmVyYXRvcihQYXNzUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw+LCBjb25zdCBJREJLZXkqLCBib29sIGNoZWNrQ3VycmVudCk7CiAK
ICAgICBzdGF0aWMgdm9pZCBnZXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFz
c1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJLZXlSYW5n
ZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsPik7CiAgICAgc3RhdGljIHZvaWQgcHV0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQ
dHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxJREJLZXk+LCBQdXRNb2RlLCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbD4sIFBhc3NPd25QdHI8VmVjdG9yPGludDY0X3Q+ID4gcG9wSW5kZXhOYW1lcywgUGFzc093
blB0cjxWZWN0b3I8SW5kZXhLZXlzPiA+KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2xldmVsZGIvTGV2ZWxEQkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2xldmVsZGIvTGV2ZWxEQkRhdGFiYXNlLmNwcAppbmRleCBlZGY5ZGIyNTcyZTM1OGY3YjVj
YzNhNzU0NDczMGFkNDdmY2YzMWQzLi4yZDVjZmNkN2Y2YjFlYWQyOWFjOTY2MzgwNWNhM2E3ZTIw
OTg1ZjIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRiL0xldmVs
REJEYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZl
bERCRGF0YWJhc2UuY3BwCkBAIC0xOTgsOCArMTk4LDkgQEAgYm9vbCBMZXZlbERCRGF0YWJhc2U6
OnJlbW92ZShjb25zdCBMZXZlbERCU2xpY2UmIGtleSkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LWJvb2wgTGV2ZWxEQkRhdGFiYXNlOjpnZXQoY29uc3QgTGV2ZWxEQlNsaWNlJiBrZXksIFZlY3Rv
cjxjaGFyPiYgdmFsdWUsIGNvbnN0IExldmVsREJTbmFwc2hvdCogc25hcHNob3QpCitib29sIExl
dmVsREJEYXRhYmFzZTo6c2FmZUdldChjb25zdCBMZXZlbERCU2xpY2UmIGtleSwgVmVjdG9yPGNo
YXI+JiB2YWx1ZSwgYm9vbCYgZm91bmQsIGNvbnN0IExldmVsREJTbmFwc2hvdCogc25hcHNob3Qp
CiB7CisgICAgZm91bmQgPSBmYWxzZTsKICAgICBzdGQ6OnN0cmluZyByZXN1bHQ7CiAgICAgbGV2
ZWxkYjo6UmVhZE9wdGlvbnMgcmVhZE9wdGlvbnM7CiAgICAgcmVhZE9wdGlvbnMudmVyaWZ5X2No
ZWNrc3VtcyA9IHRydWU7IC8vIEZJWE1FOiBEaXNhYmxlIHRoaXMgaWYgdGhlIHBlcmZvcm1hbmNl
IGltcGFjdCBpcyB0b28gZ3JlYXQuCkBAIC0yMDcsMTEgKzIwOCwxMiBAQCBib29sIExldmVsREJE
YXRhYmFzZTo6Z2V0KGNvbnN0IExldmVsREJTbGljZSYga2V5LCBWZWN0b3I8Y2hhcj4mIHZhbHVl
LCBjb25zdCBMZQogCiAgICAgY29uc3QgbGV2ZWxkYjo6U3RhdHVzIHMgPSBtX2RiLT5HZXQocmVh
ZE9wdGlvbnMsIG1ha2VTbGljZShrZXkpLCAmcmVzdWx0KTsKICAgICBpZiAocy5vaygpKSB7Cisg
ICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgdmFsdWUgPSBtYWtlVmVjdG9yKHJlc3VsdCk7
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBpZiAocy5Jc05vdEZvdW5kKCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgTE9HX0VSUk9S
KCJMZXZlbERCIGdldCBmYWlsZWQ6ICVzIiwgcy5Ub1N0cmluZygpLmNfc3RyKCkpOwogICAgIHJl
dHVybiBmYWxzZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xldmVs
ZGIvTGV2ZWxEQkRhdGFiYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRiL0xl
dmVsREJEYXRhYmFzZS5oCmluZGV4IDJkMzJjZDczNjNlNTgzNjc3ZDVjYzdhNDg0MzZlMzAyNzNh
OGY1ZWQuLmY5ZjRkNGUxYmFlNGIwYjYzYjhhOThiZTkyMjIyOGQ0Njc1MTA1OGUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQkRhdGFiYXNlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCRGF0YWJhc2UuaApAQCAt
NjksNyArNjksNyBAQCBwdWJsaWM6CiAKICAgICBib29sIHB1dChjb25zdCBMZXZlbERCU2xpY2Um
IGtleSwgY29uc3QgVmVjdG9yPGNoYXI+JiB2YWx1ZSk7CiAgICAgYm9vbCByZW1vdmUoY29uc3Qg
TGV2ZWxEQlNsaWNlJiBrZXkpOwotICAgIGJvb2wgZ2V0KGNvbnN0IExldmVsREJTbGljZSYga2V5
LCBWZWN0b3I8Y2hhcj4mIHZhbHVlLCBjb25zdCBMZXZlbERCU25hcHNob3QqID0gMCk7CisgICAg
Ym9vbCBzYWZlR2V0KGNvbnN0IExldmVsREJTbGljZSYga2V5LCBWZWN0b3I8Y2hhcj4mIHZhbHVl
LCBib29sJiBmb3VuZCwgY29uc3QgTGV2ZWxEQlNuYXBzaG90KiA9IDApOwogICAgIGJvb2wgd3Jp
dGUoTGV2ZWxEQldyaXRlQmF0Y2gmKTsKICAgICBQYXNzT3duUHRyPExldmVsREJJdGVyYXRvcj4g
Y3JlYXRlSXRlcmF0b3IoY29uc3QgTGV2ZWxEQlNuYXBzaG90KiA9IDApOwogICAgIGNvbnN0IExl
dmVsREJDb21wYXJhdG9yKiBjb21wYXJhdG9yKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJUcmFuc2FjdGlvbi5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJUcmFuc2FjdGlvbi5jcHAKaW5kZXggZmU4
MjYyYTI0MDIzMmQzZTI4MGU5ZDUwMmUyNjRjNGIyNDZkNDE4MC4uNTMzNWEwMjhhZjdjNzgyZTIx
MTdlM2U1NDllMWIzODNkYjY4ZmEwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbGV2ZWxkYi9MZXZlbERCVHJhbnNhY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2xldmVsZGIvTGV2ZWxEQlRyYW5zYWN0aW9uLmNwcApAQCAtMTA3LDIwICsxMDcsMzgg
QEAgdm9pZCBMZXZlbERCVHJhbnNhY3Rpb246OnJlbW92ZShjb25zdCBMZXZlbERCU2xpY2UmIGtl
eSkKICAgICBzZXQoa2V5LCBWZWN0b3I8Y2hhcj4oKSwgdHJ1ZSk7CiB9CiAKLWJvb2wgTGV2ZWxE
QlRyYW5zYWN0aW9uOjpnZXQoY29uc3QgTGV2ZWxEQlNsaWNlJiBrZXksIFZlY3RvcjxjaGFyPiYg
dmFsdWUpCitib29sIExldmVsREJUcmFuc2FjdGlvbjo6c2FmZUdldChjb25zdCBMZXZlbERCU2xp
Y2UmIGtleSwgVmVjdG9yPGNoYXI+JiB2YWx1ZSwgYm9vbCYgZm91bmQpCiB7CisgICAgZm91bmQg
PSBmYWxzZTsKICAgICBBU1NFUlQoIW1fZmluaXNoZWQpOwogICAgIEFWTFRyZWVOb2RlKiBub2Rl
ID0gbV90cmVlLnNlYXJjaChrZXkpOwogCiAgICAgaWYgKG5vZGUpIHsKICAgICAgICAgaWYgKG5v
ZGUtPmRlbGV0ZWQpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKIAogICAgICAgICB2YWx1ZSA9IG5vZGUtPnZhbHVlOworICAgICAgICBmb3VuZCA9
IHRydWU7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHJldHVybiBtX2RiLT5n
ZXQoa2V5LCB2YWx1ZSwgJm1fc25hcHNob3QpOworICAgIGJvb2wgb2sgPSBtX2RiLT5zYWZlR2V0
KGtleSwgdmFsdWUsIGZvdW5kLCAmbV9zbmFwc2hvdCk7CisgICAgaWYgKCFvaykgeworICAgICAg
ICBBU1NFUlQoIWZvdW5kKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBMZXZlbERCVHJhbnNhY3Rpb246OmdldChjb25zdCBMZXZlbERC
U2xpY2UmIGtleSwgVmVjdG9yPGNoYXI+JiB2YWx1ZSkKK3sKKyAgICBib29sIGZvdW5kID0gZmFs
c2U7CisgICAgYm9vbCBvayA9IHNhZmVHZXQoa2V5LCB2YWx1ZSwgZm91bmQpOworICAgIGlmICgh
b2spIHsKKyAgICAgICAgQVNTRVJUKCFmb3VuZCk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIH0KKyAgICByZXR1cm4gb2sgJiYgZm91bmQ7CiB9CiAKIGJvb2wgTGV2ZWxEQlRy
YW5zYWN0aW9uOjpjb21taXQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bGV2ZWxkYi9MZXZlbERCVHJhbnNhY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xl
dmVsZGIvTGV2ZWxEQlRyYW5zYWN0aW9uLmgKaW5kZXggOTQyMzZmZjc2MDUzNTFlZjNiMWYyMWNk
YTViNTU0ZjVhNDk1NmJhYy4uMjMzYTYwZWVhYWM2NWVhM2U0YjFjMDdkOWZhZjY5ODU2ZjJkMGYx
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCVHJh
bnNhY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJU
cmFuc2FjdGlvbi5oCkBAIC01NCw2ICs1NCw4IEBAIHB1YmxpYzoKICAgICB+TGV2ZWxEQlRyYW5z
YWN0aW9uKCk7CiAgICAgdm9pZCBwdXQoY29uc3QgTGV2ZWxEQlNsaWNlJiBrZXksIGNvbnN0IFZl
Y3RvcjxjaGFyPiYgdmFsdWUpOwogICAgIHZvaWQgcmVtb3ZlKGNvbnN0IExldmVsREJTbGljZSYg
a2V5KTsKKyAgICBib29sIHNhZmVHZXQoY29uc3QgTGV2ZWxEQlNsaWNlJiBrZXksIFZlY3Rvcjxj
aGFyPiYgdmFsdWUsIGJvb2wmIGZvdW5kKTsKKyAgICAvLyBGSVhNRTogQ29udmVydCBhbGwgY2Fs
bGVycyBvZiBnZXQgdG8gc2FmZUdldCB0aGVuIHJlbW92ZSBnZXQuCiAgICAgYm9vbCBnZXQoY29u
c3QgTGV2ZWxEQlNsaWNlJiBrZXksIFZlY3RvcjxjaGFyPiYgdmFsdWUpOwogICAgIGJvb2wgY29t
bWl0KCk7CiAgICAgdm9pZCByb2xsYmFjaygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9JREJGYWtlQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0lEQkZha2VCYWNraW5nU3RvcmUuaAppbmRleCAzNDYzNjNhYzNlNTQ2YTAyMzEx
NjhmYjYxNzA4YzUxZjljOWQzYmNjLi43NDE4YmEzNmM3ZWYyYzQ1ZDdlZWVjMGIzMGU0ODNmODZk
YTI5NzI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lEQkZha2VC
YWNraW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lEQkZha2VC
YWNraW5nU3RvcmUuaApAQCAtNDcsOSArNDcsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IHB1dFJlY29yZChUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBSZWNvcmRJZGVu
dGlmaWVyKikgT1ZFUlJJREUgeyB9CiAgICAgdmlydHVhbCB2b2lkIGNsZWFyT2JqZWN0U3RvcmUo
VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkg
T1ZFUlJJREUgeyB9CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZVJlY29yZChUcmFuc2FjdGlvbios
IGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBSZWNvcmRJ
ZGVudGlmaWVyJikgT1ZFUlJJREUgeyB9Ci0gICAgdmlydHVhbCBpbnQ2NF90IGdldEtleUdlbmVy
YXRvckN1cnJlbnROdW1iZXIoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCkgT1ZFUlJJREUgeyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwgdm9p
ZCBtYXliZVVwZGF0ZUtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIoVHJhbnNhY3Rpb24qLCBpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBuZXdOdW1iZXIs
IGJvb2wgY2hlY2tDdXJyZW50KSBPVkVSUklERSB7IH0KLSAgICB2aXJ0dWFsIGJvb2wga2V5RXhp
c3RzSW5PYmplY3RTdG9yZShUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBSZWNvcmRJZGVudGlmaWVyKiBmb3VuZFJl
Y29yZElkZW50aWZpZXIpIE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBi
b29sIGdldEtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCYgY3VycmVudE51bWJlcikg
T1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBtYXliZVVwZGF0ZUtl
eUdlbmVyYXRvckN1cnJlbnROdW1iZXIoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBuZXdOdW1iZXIsIGJvb2wgY2hlY2tDdXJy
ZW50KSBPVkVSUklERSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIGtleUV4aXN0
c0luT2JqZWN0U3RvcmUoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiwgUmVjb3JkSWRlbnRpZmllciogZm91bmRSZWNv
cmRJZGVudGlmaWVyLCBib29sJiBmb3VuZCkgT1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfQogCiAg
ICAgdmlydHVhbCBWZWN0b3I8SURCSW5kZXhNZXRhZGF0YT4gZ2V0SW5kZXhlcyhpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkgT1ZFUlJJREUgeyByZXR1cm4gVmVjdG9y
PElEQkluZGV4TWV0YWRhdGE+KCk7IH0KICAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSW5kZXgoVHJh
bnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50
NjRfdCBpbmRleElkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmLCBib29s
IGlzVW5pcXVlLCBib29sIGlzTXVsdGlFbnRyeSkgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xldmVsREJUZXN0LmNw
cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTGV2ZWxEQlRlc3QuY3BwCmluZGV4IDdk
YzAzNTVkZmU5MzVmMzkzMzE0NTBlZTY5NjYyOTc3MmVjYzJmMjkuLjRiOWNhZjhjZmMwOGViODFh
NDlhNWJhNDEwZjgyZjNjMjU4MDFmMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvTGV2ZWxEQlRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvTGV2ZWxEQlRlc3QuY3BwCkBAIC03OSw4ICs3OSwxMCBAQCBURVNUKExldmVsREJEYXRhYmFz
ZVRlc3QsIENvcnJ1cHRpb25UZXN0KQogCiAgICAgbGV2ZWxkYiA9IExldmVsREJEYXRhYmFzZTo6
b3BlbihwYXRoLCAmY29tcGFyYXRvcik7CiAgICAgRVhQRUNUX1RSVUUobGV2ZWxkYik7Ci0gICAg
c3VjY2VzcyA9IGxldmVsZGItPmdldChrZXksIGdvdFZhbHVlKTsKKyAgICBib29sIGZvdW5kID0g
ZmFsc2U7CisgICAgc3VjY2VzcyA9IGxldmVsZGItPnNhZmVHZXQoa2V5LCBnb3RWYWx1ZSwgZm91
bmQpOwogICAgIEVYUEVDVF9UUlVFKHN1Y2Nlc3MpOworICAgIEVYUEVDVF9UUlVFKGZvdW5kKTsK
ICAgICBFWFBFQ1RfRVEocHV0VmFsdWUsIGdvdFZhbHVlKTsKICAgICBsZXZlbGRiLnJlbGVhc2Uo
KTsKICAgICBFWFBFQ1RfRkFMU0UobGV2ZWxkYik7CkBAIC05OCw4ICsxMDAsOSBAQCBURVNUKExl
dmVsREJEYXRhYmFzZVRlc3QsIENvcnJ1cHRpb25UZXN0KQogCiAgICAgbGV2ZWxkYiA9IExldmVs
REJEYXRhYmFzZTo6b3BlbihwYXRoLCAmY29tcGFyYXRvcik7CiAgICAgRVhQRUNUX1RSVUUobGV2
ZWxkYik7Ci0gICAgc3VjY2VzcyA9IGxldmVsZGItPmdldChrZXksIGdvdFZhbHVlKTsKLSAgICBF
WFBFQ1RfRkFMU0Uoc3VjY2Vzcyk7CisgICAgc3VjY2VzcyA9IGxldmVsZGItPnNhZmVHZXQoa2V5
LCBnb3RWYWx1ZSwgZm91bmQpOworICAgIEVYUEVDVF9UUlVFKHN1Y2Nlc3MpOworICAgIEVYUEVD
VF9GQUxTRShmb3VuZCk7CiB9CiAKIFRFU1QoTGV2ZWxEQkRhdGFiYXNlVGVzdCwgVHJhbnNhY3Rp
b24pCkBAIC0xMjksOCArMTMyLDEwIEBAIFRFU1QoTGV2ZWxEQkRhdGFiYXNlVGVzdCwgVHJhbnNh
Y3Rpb24pCiAgICAgRVhQRUNUX1RSVUUoc3VjY2Vzcyk7CiAgICAgRVhQRUNUX0VRKGNvbXBhcmF0
b3IuY29tcGFyZShnb3RWYWx1ZSwgb2xkVmFsdWUpLCAwKTsKIAotICAgIHN1Y2Nlc3MgPSBsZXZl
bGRiLT5nZXQoa2V5LCBnb3RWYWx1ZSk7CisgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgIHN1
Y2Nlc3MgPSBsZXZlbGRiLT5zYWZlR2V0KGtleSwgZ290VmFsdWUsIGZvdW5kKTsKICAgICBFWFBF
Q1RfVFJVRShzdWNjZXNzKTsKKyAgICBFWFBFQ1RfVFJVRShmb3VuZCk7CiAgICAgRVhQRUNUX0VR
KGNvbXBhcmF0b3IuY29tcGFyZShnb3RWYWx1ZSwgbmV3VmFsdWUpLCAwKTsKIAogICAgIGNvbnN0
IFZlY3RvcjxjaGFyPiBhZGRlZEtleSA9IGVuY29kZVN0cmluZygiYWRkZWQga2V5Iik7CkBAIC0x
MzgsOCArMTQzLDkgQEAgVEVTVChMZXZlbERCRGF0YWJhc2VUZXN0LCBUcmFuc2FjdGlvbikKICAg
ICBzdWNjZXNzID0gbGV2ZWxkYi0+cHV0KGFkZGVkS2V5LCBhZGRlZFZhbHVlKTsKICAgICBFWFBF
Q1RfVFJVRShzdWNjZXNzKTsKIAotICAgIHN1Y2Nlc3MgPSBsZXZlbGRiLT5nZXQoYWRkZWRLZXks
IGdvdFZhbHVlKTsKKyAgICBzdWNjZXNzID0gbGV2ZWxkYi0+c2FmZUdldChhZGRlZEtleSwgZ290
VmFsdWUsIGZvdW5kKTsKICAgICBFWFBFQ1RfVFJVRShzdWNjZXNzKTsKKyAgICBFWFBFQ1RfVFJV
RShmb3VuZCk7CiAgICAgRVhQRUNUX0VRKGNvbXBhcmF0b3IuY29tcGFyZShnb3RWYWx1ZSwgYWRk
ZWRWYWx1ZSksIDApOwogCiAgICAgc3VjY2VzcyA9IHRyYW5zYWN0aW9uLT5nZXQoYWRkZWRLZXks
IGdvdFZhbHVlKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>176833</attachid>
            <date>2012-11-29 15:35:08 -0800</date>
            <delta_ts>2012-11-29 18:23:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-103580-20121129153241.patch</filename>
            <type>text/plain</type>
            <size>25014</size>
            <attacher name="David Grogan">dgrogan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM2MTQzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmY1Njc5ODkwMjgzMWEw
ZjRiYTg3MDA5OGUwNmU2ZDRkNzZkNjRhYS4uYzYxYzM2MDZlNmFiMmMyZjRhZTJmOTM5ZmI0NGM5
ZTg3YWZmYTg4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDEyLTExLTI4ICBEYXZp
ZCBHcm9nYW4gIDxkZ3JvZ2FuQGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IFBy
b3BhZ2F0ZSBtb3JlIGxldmVsZGIgZXJyb3JzIHRvIHNjcmlwdAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzNTgwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTGV2ZWxEQkRhdGFiYXNlIHVzZWQgYSBzaW5n
bGUgcmV0dXJuIHZhbHVlIHRvIGluZGljYXRlIGJvdGggSS9PIHByb2JsZW1zCisgICAgICAgIGFu
ZCBhIG1pc3Npbmcga2V5LiBOb3cgYW4gb3V0IHZhcmlhYmxlIGlzIHVzZWQgdG8gaW5kaWNhdGUg
aWYgdGhlCisgICAgICAgIHJlcXVlc3RlZCBrZXkgd2FzIGZvdW5kLiBUaGUgcmV0dXJuIHZhbHVl
IGlzIHVzZWQgdG8gcmVwb3J0IGNvcnJ1cHRpb24KKyAgICAgICAgb3IgZGlzayBlcnJvci4KKwor
ICAgICAgICBUaGlzIGlzIGEgc21hbGwgc3RlcCB0b3dhcmQgcHJvcGFnYXRpbmcgbG93IGxldmVs
IGVycm9ycyBldmVyeXdoZXJlCisgICAgICAgIHBvc3NpYmxlLiBTbyBmYXIgb25seSBvbmUgc2Nl
bmFyaW8gd2lsbCBuZXdseSBjYXVzZSBzY3JpcHQgdG8gcmVjZWl2ZQorICAgICAgICBhbiBlcnJv
cjogd2hlbiBsZXZlbGRiIGhhcyB0cm91YmxlIGxvb2tpbmcgZm9yIGV4aXN0aW5nIGtleXMgZHVy
aW5nIGFuCisgICAgICAgIG9iamVjdHN0b3JlLT5hZGQuCisKKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0SW50KToK
KyAgICAgICAgKFdlYkNvcmU6OmdldFZhckludCk6CisgICAgICAgIChXZWJDb3JlOjpnZXRTdHJp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlOjpnZXRLZXlHZW5lcmF0b3JD
dXJyZW50TnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6bWF5YmVV
cGRhdGVLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJh
Y2tpbmdTdG9yZTo6a2V5RXhpc3RzSW5PYmplY3RTdG9yZSk6CisgICAgICAgICogTW9kdWxlcy9p
bmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmg6CisgICAgICAgIChJREJCYWNraW5nU3RvcmUpOgor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6c2V0SW5kZXhL
ZXlzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dElu
dGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Omdl
bmVyYXRlS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6
OnVwZGF0ZUtleUdlbmVyYXRvcik6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbC5oOgorICAgICAgICAoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bCk6CisgICAgICAgICogcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCRGF0YWJhc2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6TGV2ZWxEQkRhdGFiYXNlOjpzYWZlR2V0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9sZXZlbGRiL0xldmVsREJEYXRhYmFzZS5oOgorICAgICAgICAoTGV2ZWxEQkRhdGFiYXNl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJUcmFuc2FjdGlvbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpMZXZlbERCVHJhbnNhY3Rpb246OnNhZmVHZXQpOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpMZXZlbERCVHJhbnNhY3Rpb246OmdldCk6Cisg
ICAgICAgICogcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCVHJhbnNhY3Rpb24uaDoKKyAgICAgICAg
KExldmVsREJUcmFuc2FjdGlvbik6CisKIDIwMTItMTEtMjkgIERhbiBCZXJuc3RlaW4gIDxtaXR6
QGFwcGxlLmNvbT4KIAogICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTI3NzE4ODU+IFN1cHBvcnQg
cnVieS1wb3NpdGlvbjoge2JlZm9yZSwgYWZ0ZXJ9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmlu
ZGV4IGRmMzYxMzkxYzkwZjhhNDdiZDZiYWRiZTc0ZDY1ZWQyNWRiYmIzNTAuLjRkNzYyMzIzOTJi
Zjg5YjhiMzk0MWYwZTJjNDNkNDVmOTczMzVhYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTMgQEAKKzIwMTItMTEtMjggIERhdmlkIEdyb2dhbiAgPGRncm9nYW5AY2hy
b21pdW0ub3JnPgorCisgICAgICAgIEluZGV4ZWREQjogUHJvcGFnYXRlIG1vcmUgbGV2ZWxkYiBl
cnJvcnMgdG8gc2NyaXB0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMDM1ODAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIHRlc3RzL0lEQkZha2VCYWNraW5nU3RvcmUuaDoKKyAgICAgICAgIFVwZGF0ZSBt
ZXRob2Qgc2lnbmF0dXJlcy4KKwogMjAxMi0xMS0yOSAgU3RlcGhlbiBDaGVubmV5ICA8c2NoZW5u
ZXlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtDaHJvbWl1bV0gQWRkIGNvZGUgc3VwcHByZXNz
aW9uIGZsYWdzIGZvciBza2lhCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCQmFja2luZ1N0b3JlLmNwcAppbmRleCA5OTA1ZDViNTMzZDEzM2FmYzk5ZDgxNTI0
YmFjNWYwMGQwNzQ1OTVkLi42MTI1M2ZhMDE0YjI0ZGJhOTU2OTBhNTQ3ZDk5NzE0Y2RmNmYzODU4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5n
U3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tp
bmdTdG9yZS5jcHAKQEAgLTkxLDcgKzkxLDExIEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBEQk9yVHJh
bnNhY3Rpb24+CiBzdGF0aWMgYm9vbCBnZXRJbnQoREJPclRyYW5zYWN0aW9uKiBkYiwgY29uc3Qg
TGV2ZWxEQlNsaWNlJiBrZXksIGludDY0X3QmIGZvdW5kSW50KQogewogICAgIFZlY3RvcjxjaGFy
PiByZXN1bHQ7Ci0gICAgaWYgKCFkYi0+Z2V0KGtleSwgcmVzdWx0KSkKKyAgICBib29sIGZvdW5k
ID0gZmFsc2U7CisgICAgYm9vbCBvayA9IGRiLT5zYWZlR2V0KGtleSwgcmVzdWx0LCBmb3VuZCk7
CisgICAgLy8gRklYTUU6IE5vdGlmeSB0aGUgY2FsbGVyIGlmICFvay4KKyAgICBBU1NFUlRfVU5V
U0VEKG9rLCBvayk7CisgICAgaWYgKCFmb3VuZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgZm91bmRJbnQgPSBkZWNvZGVJbnQocmVzdWx0LmJlZ2luKCksIHJlc3VsdC5lbmQoKSk7CkBA
IC0xMDgsNyArMTEyLDExIEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBEQk9yVHJhbnNhY3Rpb24+CiBz
dGF0aWMgYm9vbCBnZXRWYXJJbnQoREJPclRyYW5zYWN0aW9uKiBkYiwgY29uc3QgTGV2ZWxEQlNs
aWNlJiBrZXksIGludDY0X3QmIGZvdW5kSW50KQogewogICAgIFZlY3RvcjxjaGFyPiByZXN1bHQ7
Ci0gICAgaWYgKCFkYi0+Z2V0KGtleSwgcmVzdWx0KSkKKyAgICBib29sIGZvdW5kID0gZmFsc2U7
CisgICAgYm9vbCBvayA9IGRiLT5zYWZlR2V0KGtleSwgcmVzdWx0LCBmb3VuZCk7CisgICAgLy8g
RklYTUU6IE5vdGlmeSB0aGUgY2FsbGVyIGlmICFvay4KKyAgICBBU1NFUlRfVU5VU0VEKG9rLCBv
ayk7CisgICAgaWYgKCFmb3VuZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJu
IGRlY29kZVZhckludChyZXN1bHQuYmVnaW4oKSwgcmVzdWx0LmVuZCgpLCBmb3VuZEludCkgPT0g
cmVzdWx0LmVuZCgpOwpAQCAtMTIzLDcgKzEzMSwxMSBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgREJP
clRyYW5zYWN0aW9uPgogc3RhdGljIGJvb2wgZ2V0U3RyaW5nKERCT3JUcmFuc2FjdGlvbiogZGIs
IGNvbnN0IExldmVsREJTbGljZSYga2V5LCBTdHJpbmcmIGZvdW5kU3RyaW5nKQogewogICAgIFZl
Y3RvcjxjaGFyPiByZXN1bHQ7Ci0gICAgaWYgKCFkYi0+Z2V0KGtleSwgcmVzdWx0KSkKKyAgICBi
b29sIGZvdW5kID0gZmFsc2U7CisgICAgYm9vbCBvayA9IGRiLT5zYWZlR2V0KGtleSwgcmVzdWx0
LCBmb3VuZCk7CisgICAgLy8gRklYTUU6IE5vdGlmeSB0aGUgY2FsbGVyIGlmICFvay4KKyAgICBB
U1NFUlRfVU5VU0VEKG9rLCBvayk7CisgICAgaWYgKCFmb3VuZCkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgZm91bmRTdHJpbmcgPSBkZWNvZGVTdHJpbmcocmVzdWx0LmJlZ2luKCksIHJl
c3VsdC5lbmQoKSk7CkBAIC02OTksMTYgKzcxMSwyMiBAQCB2b2lkIElEQkJhY2tpbmdTdG9yZTo6
ZGVsZXRlUmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBp
bgogfQogCiAKLWludDY0X3QgSURCQmFja2luZ1N0b3JlOjpnZXRLZXlHZW5lcmF0b3JDdXJyZW50
TnVtYmVyKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKK2Jvb2wgSURCQmFja2luZ1N0b3Jl
OjpnZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rp
b24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgaW50NjRfdCYga2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcikKIHsKICAgICBMZXZlbERCVHJh
bnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rp
b246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOwogCiAgICAgY29uc3QgVmVj
dG9yPGNoYXI+IGtleUdlbmVyYXRvckN1cnJlbnROdW1iZXJLZXkgPSBPYmplY3RTdG9yZU1ldGFE
YXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVNZXRh
RGF0YUtleTo6S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcik7CiAKLSAgICBpbnQ2NF90IGtleUdl
bmVyYXRvckN1cnJlbnROdW1iZXIgPSAtMTsKKyAgICBrZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVy
ID0gLTE7CiAgICAgVmVjdG9yPGNoYXI+IGRhdGE7CiAKLSAgICBpZiAobGV2ZWxEQlRyYW5zYWN0
aW9uLT5nZXQoa2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcktleSwgZGF0YSkpCisgICAgYm9vbCBm
b3VuZCA9IGZhbHNlOworICAgIGJvb2wgb2sgPSBsZXZlbERCVHJhbnNhY3Rpb24tPnNhZmVHZXQo
a2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcktleSwgZGF0YSwgZm91bmQpOworICAgIGlmICghb2sp
IHsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9y
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoZm91bmQpCiAgICAgICAg
IGtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIgPSBkZWNvZGVJbnQoZGF0YS5iZWdpbigpLCBkYXRh
LmVuZCgpKTsKICAgICBlbHNlIHsKICAgICAgICAgLy8gUHJldmlvdXNseSwgdGhlIGtleSBnZW5l
cmF0b3Igc3RhdGUgd2FzIG5vdCBzdG9yZWQgZXhwbGljaXRseSBidXQgZGVyaXZlZCBmcm9tIHRo
ZQpAQCAtNzQxLDI5ICs3NTksMzkgQEAgaW50NjRfdCBJREJCYWNraW5nU3RvcmU6OmdldEtleUdl
bmVyYXRvckN1cnJlbnROdW1iZXIoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGkKICAgICByZXR1
cm4ga2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcjsKIH0KIAotdm9pZCBJREJCYWNraW5nU3RvcmU6
Om1heWJlVXBkYXRlS2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihJREJCYWNraW5nU3RvcmU6OlRy
YW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIGludDY0X3QgbmV3TnVtYmVyLCBib29sIGNoZWNrQ3VycmVudCkKK2Jvb2wgSURC
QmFja2luZ1N0b3JlOjptYXliZVVwZGF0ZUtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIoSURCQmFj
a2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IG5ld051bWJlciwgYm9vbCBjaGVja0N1cnJl
bnQpCiB7CiAgICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBJREJC
YWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0
aW9uKTsKIAogICAgIGlmIChjaGVja0N1cnJlbnQpIHsKLSAgICAgICAgaW50NjRfdCBjdXJyZW50
TnVtYmVyID0gZ2V0S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcih0cmFuc2FjdGlvbiwgZGF0YWJh
c2VJZCwgb2JqZWN0U3RvcmVJZCk7CisgICAgICAgIGludDY0X3QgY3VycmVudE51bWJlcjsKKyAg
ICAgICAgYm9vbCBvayA9IGdldEtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIodHJhbnNhY3Rpb24s
IGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGN1cnJlbnROdW1iZXIpOworICAgICAgICBpZiAo
IW9rKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAobmV3TnVtYmVyIDw9
IGN1cnJlbnROdW1iZXIpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4ga2V5R2VuZXJhdG9yQ3VycmVu
dE51bWJlcktleSA9IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBv
YmplY3RTdG9yZUlkLCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjpLZXlHZW5lcmF0b3JDdXJyZW50
TnVtYmVyKTsKICAgICBwdXRJbnQobGV2ZWxEQlRyYW5zYWN0aW9uLCBrZXlHZW5lcmF0b3JDdXJy
ZW50TnVtYmVyS2V5LCBuZXdOdW1iZXIpOworICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIElE
QkJhY2tpbmdTdG9yZTo6a2V5RXhpc3RzSW5PYmplY3RTdG9yZShJREJCYWNraW5nU3RvcmU6OlRy
YW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIGNvbnN0IElEQktleSYga2V5LCBSZWNvcmRJZGVudGlmaWVyKiBmb3VuZFJlY29y
ZElkZW50aWZpZXIpCitib29sIElEQkJhY2tpbmdTdG9yZTo6a2V5RXhpc3RzSW5PYmplY3RTdG9y
ZShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYga2V5LCBSZWNvcmRJ
ZGVudGlmaWVyKiBmb3VuZFJlY29yZElkZW50aWZpZXIsIGJvb2wmIGZvdW5kKQogewogICAgIElE
Ql9UUkFDRSgiSURCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbk9iamVjdFN0b3JlIik7CisgICAg
Zm91bmQgPSBmYWxzZTsKICAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlv
biA9IElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20o
dHJhbnNhY3Rpb24pOwogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBsZXZlbGRiS2V5ID0gT2JqZWN0
U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwga2V5KTsKICAg
ICBWZWN0b3I8Y2hhcj4gZGF0YTsKIAotICAgIGlmICghbGV2ZWxEQlRyYW5zYWN0aW9uLT5nZXQo
bGV2ZWxkYktleSwgZGF0YSkpCisgICAgYm9vbCBvayA9IGxldmVsREJUcmFuc2FjdGlvbi0+c2Fm
ZUdldChsZXZlbGRiS2V5LCBkYXRhLCBmb3VuZCk7CisgICAgaWYgKCFvaykgeworICAgICAgICBJ
bnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3IpOwogICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICghZm91bmQpCisgICAgICAgIHJldHVybiB0cnVl
OwogCiAgICAgaW50NjRfdCB2ZXJzaW9uOwogICAgIGlmICghZGVjb2RlVmFySW50KGRhdGEuYmVn
aW4oKSwgZGF0YS5lbmQoKSwgdmVyc2lvbikpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oCmluZGV4IGY0YmVjYjk3NjVkYzg5MzM4MDYz
ZTNiMWEzMGI3OGNmNmIyZDUwMjEuLjRmNTU5Njg1ODhkOTllMDY1ZjBkMGQyZjI4NTkzNGM2ZmY4
MWRmNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJh
Y2tpbmdTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJh
Y2tpbmdTdG9yZS5oCkBAIC04MSw5ICs4MSw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQg
cHV0UmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiwgY29uc3QgU3RyaW5nJiB2
YWx1ZSwgUmVjb3JkSWRlbnRpZmllciopOwogICAgIHZpcnR1YWwgdm9pZCBjbGVhck9iamVjdFN0
b3JlKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCk7CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZVJlY29yZChJREJC
YWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGNvbnN0IFJlY29yZElkZW50aWZpZXImKTsKLSAgICB2aXJ0dWFsIGludDY0
X3QgZ2V0S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0
aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpOwotICAgIHZp
cnR1YWwgdm9pZCBtYXliZVVwZGF0ZUtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIoSURCQmFja2lu
Z1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBpbnQ2NF90IG5ld1N0YXRlLCBib29sIGNoZWNrQ3VycmVudCk7Ci0gICAgdmlydHVh
bCBib29sIGtleUV4aXN0c0luT2JqZWN0U3RvcmUoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlv
biosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJL
ZXkmLCBSZWNvcmRJZGVudGlmaWVyKiBmb3VuZFJlY29yZElkZW50aWZpZXIpOworICAgIHZpcnR1
YWwgYm9vbCBnZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKElEQkJhY2tpbmdTdG9yZTo6VHJh
bnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50
NjRfdCYgY3VycmVudE51bWJlcikgV0FSTl9VTlVTRURfUkVUVVJOOworICAgIHZpcnR1YWwgYm9v
bCBtYXliZVVwZGF0ZUtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIoSURCQmFja2luZ1N0b3JlOjpU
cmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBp
bnQ2NF90IG5ld1N0YXRlLCBib29sIGNoZWNrQ3VycmVudCkgV0FSTl9VTlVTRURfUkVUVVJOOwor
ICAgIHZpcnR1YWwgYm9vbCBrZXlFeGlzdHNJbk9iamVjdFN0b3JlKElEQkJhY2tpbmdTdG9yZTo6
VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
Y29uc3QgSURCS2V5JiwgUmVjb3JkSWRlbnRpZmllciogZm91bmRSZWNvcmRJZGVudGlmaWVyLCBi
b29sJiBmb3VuZCkgV0FSTl9VTlVTRURfUkVUVVJOOwogCiAgICAgdmlydHVhbCBWZWN0b3I8SURC
SW5kZXhNZXRhZGF0YT4gZ2V0SW5kZXhlcyhpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCk7CiAgICAgdmlydHVhbCBib29sIGNyZWF0ZUluZGV4KElEQkJhY2tpbmdTdG9y
ZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgm
LCBib29sIGlzVW5pcXVlLCBib29sIGlzTXVsdGlFbnRyeSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZElt
cGwuY3BwCmluZGV4IGM5MGRhYzIyNGQ0NTVjMDEwNTE2NjdlM2M5MjRiOWM3M2ExODk2YjEuLjcx
NGFlZDVkYTY1YWMyODhiNDMwYWZlZWMxOTA1YWUwMGY3NmYxZjAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGwuY3BwCkBAIC0yMzEsNyArMjMxLDE0IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6c2V0SW5kZXhLZXlzKFBhc3NSZWZQdHI8SURCS2V5PiBwcnBQcmltYXJ5S2V5LCBj
CiAKICAgICAvLyBGSVhNRTogVGhpcyBtZXRob2QgY291bGQgYmUgYXN5bmNocm9ub3VzLCBidXQg
d2UgbmVlZCB0byBldmFsdWF0ZSBpZiBpdCdzIHdvcnRoIHRoZSBleHRyYSBjb21wbGV4aXR5Lgog
ICAgIElEQkJhY2tpbmdTdG9yZTo6UmVjb3JkSWRlbnRpZmllciByZWNvcmRJZGVudGlmaWVyOwot
ICAgIGlmICghYmFja2luZ1N0b3JlKCktPmtleUV4aXN0c0luT2JqZWN0U3RvcmUodHJhbnNhY3Rp
b24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIGRhdGFiYXNlSWQoKSwgaWQoKSwgKnByaW1h
cnlLZXksICZyZWNvcmRJZGVudGlmaWVyKSkgeworICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAg
ICBib29sIG9rID0gYmFja2luZ1N0b3JlKCktPmtleUV4aXN0c0luT2JqZWN0U3RvcmUodHJhbnNh
Y3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIGRhdGFiYXNlSWQoKSwgaWQoKSwgKnBy
aW1hcnlLZXksICZyZWNvcmRJZGVudGlmaWVyLCBmb3VuZCk7CisgICAgaWYgKCFvaykgeworICAg
ICAgICBMT0dfRVJST1IoImtleUV4aXN0c0luT2JqZWN0U3RvcmUgcmVwb3J0ZWQgYW4gZXJyb3Ii
KTsKKyAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIsICJJbnRlcm5hbCBlcnJvciBzZXR0aW5n
IGluZGV4IGtleXMuIikpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghZm91bmQp
IHsKICAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CkBAIC0zMDAsOSArMzA3LDE3IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0
SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8CiAgICAgQVNTRVJU
KGtleSAmJiBrZXktPmlzVmFsaWQoKSk7CiAKICAgICBJREJCYWNraW5nU3RvcmU6OlJlY29yZElk
ZW50aWZpZXIgcmVjb3JkSWRlbnRpZmllcjsKLSAgICBpZiAocHV0TW9kZSA9PSBBZGRPbmx5ICYm
IG9iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+a2V5RXhpc3RzSW5PYmplY3RTdG9yZSh0cmFu
c2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgb2JqZWN0U3RvcmUtPmRhdGFiYXNl
SWQoKSwgb2JqZWN0U3RvcmUtPmlkKCksICprZXksICZyZWNvcmRJZGVudGlmaWVyKSkgewotICAg
ICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpDT05TVFJBSU5UX0VSUiwgIktleSBhbHJlYWR5IGV4aXN0cyBpbiB0aGUg
b2JqZWN0IHN0b3JlLiIpKTsKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChwdXRNb2RlID09IEFk
ZE9ubHkpIHsKKyAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgICAgICBib29sIG9rID0g
b2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5rZXlFeGlzdHNJbk9iamVjdFN0b3JlKHRyYW5z
YWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBvYmplY3RTdG9yZS0+ZGF0YWJhc2VJ
ZCgpLCBvYmplY3RTdG9yZS0+aWQoKSwgKmtleSwgJnJlY29yZElkZW50aWZpZXIsIGZvdW5kKTsK
KyAgICAgICAgaWYgKCFvaykgeworICAgICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRh
dGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIsICJJ
bnRlcm5hbCBlcnJvciBjaGVja2luZyBrZXkgZXhpc3RlbmNlLiIpKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAoZm91bmQpIHsKKyAgICAgICAgICAgIGNhbGxi
YWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRp
b246OkNPTlNUUkFJTlRfRVJSLCAiS2V5IGFscmVhZHkgZXhpc3RzIGluIHRoZSBvYmplY3Qgc3Rv
cmUuIikpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgfQogCiAgICAgVmVj
dG9yPE93blB0cjxJbmRleFdyaXRlcj4gPiBpbmRleFdyaXRlcnM7CkBAIC0zMjEsOCArMzM2LDEz
IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8CiAgICAgICAgIGluZGV4V3JpdGVyLT53cml0ZUlu
ZGV4S2V5cyhyZWNvcmRJZGVudGlmaWVyLCAqb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLCB0
cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgb2JqZWN0U3RvcmUtPmRhdGFi
YXNlSWQoKSwgb2JqZWN0U3RvcmUtPm1fbWV0YWRhdGEuaWQpOwogICAgIH0KIAotICAgIGlmIChh
dXRvSW5jcmVtZW50ICYmIHB1dE1vZGUgIT0gQ3Vyc29yVXBkYXRlICYmIGtleS0+dHlwZSgpID09
IElEQktleTo6TnVtYmVyVHlwZSkKLSAgICAgICAgb2JqZWN0U3RvcmUtPnVwZGF0ZUtleUdlbmVy
YXRvcih0cmFuc2FjdGlvbiwga2V5LmdldCgpLCAha2V5V2FzR2VuZXJhdGVkKTsKKyAgICBpZiAo
YXV0b0luY3JlbWVudCAmJiBwdXRNb2RlICE9IEN1cnNvclVwZGF0ZSAmJiBrZXktPnR5cGUoKSA9
PSBJREJLZXk6Ok51bWJlclR5cGUpIHsKKyAgICAgICAgYm9vbCBvayA9IG9iamVjdFN0b3JlLT51
cGRhdGVLZXlHZW5lcmF0b3IodHJhbnNhY3Rpb24sIGtleS5nZXQoKSwgIWtleVdhc0dlbmVyYXRl
ZCk7CisgICAgICAgIGlmICghb2spIHsKKyAgICAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJ
REJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJS
LCAiSW50ZXJuYWwgZXJyb3IgdXBkYXRpbmcga2V5IGdlbmVyYXRvci4iKSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CiAKICAgICBjYWxsYmFja3MtPm9uU3VjY2Vzcyhr
ZXkucmVsZWFzZSgpKTsKIH0KQEAgLTUyNSwxNyArNTQ1LDIyIEBAIHZvaWQgSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6YWRkSW5kZXhUb01hcChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFz
c1JlZlB0CiBQYXNzUmVmUHRyPElEQktleT4gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Z2Vu
ZXJhdGVLZXkoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlv
bikKIHsKICAgICBjb25zdCBpbnQ2NF90IG1heEdlbmVyYXRvclZhbHVlID0gOTAwNzE5OTI1NDc0
MDk5MkxMOyAvLyBNYXhpbXVtIGludGVnZXIgc3RvcmFibGUgYXMgRUNNQVNjcmlwdCBudW1iZXIu
Ci0gICAgaW50NjRfdCBjdXJyZW50TnVtYmVyID0gYmFja2luZ1N0b3JlKCktPmdldEtleUdlbmVy
YXRvckN1cnJlbnROdW1iZXIodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCks
IGRhdGFiYXNlSWQoKSwgaWQoKSk7CisgICAgaW50NjRfdCBjdXJyZW50TnVtYmVyOworICAgIGJv
b2wgb2sgPSBiYWNraW5nU3RvcmUoKS0+Z2V0S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcih0cmFu
c2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgZGF0YWJhc2VJZCgpLCBpZCgpLCBj
dXJyZW50TnVtYmVyKTsKKyAgICBpZiAoIW9rKSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVk
IHRvIGdldEtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIiKTsKKyAgICAgICAgcmV0dXJuIElEQktl
eTo6Y3JlYXRlSW52YWxpZCgpOworICAgIH0KICAgICBpZiAoY3VycmVudE51bWJlciA8IDAgfHwg
Y3VycmVudE51bWJlciA+IG1heEdlbmVyYXRvclZhbHVlKQogICAgICAgICByZXR1cm4gSURCS2V5
OjpjcmVhdGVJbnZhbGlkKCk7CiAKICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVOdW1iZXIoY3Vy
cmVudE51bWJlcik7CiB9CiAKLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6dXBkYXRl
S2V5R2VuZXJhdG9yKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNh
Y3Rpb24sIGNvbnN0IElEQktleSoga2V5LCBib29sIGNoZWNrQ3VycmVudCkKK2Jvb2wgSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6dXBkYXRlS2V5R2VuZXJhdG9yKFBhc3NSZWZQdHI8SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24sIGNvbnN0IElEQktleSoga2V5LCBib29s
IGNoZWNrQ3VycmVudCkKIHsKICAgICBBU1NFUlQoa2V5ICYmIGtleS0+dHlwZSgpID09IElEQktl
eTo6TnVtYmVyVHlwZSk7Ci0gICAgYmFja2luZ1N0b3JlKCktPm1heWJlVXBkYXRlS2V5R2VuZXJh
dG9yQ3VycmVudE51bWJlcih0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwg
ZGF0YWJhc2VJZCgpLCBpZCgpLCBzdGF0aWNfY2FzdDxpbnQ2NF90PihmbG9vcihrZXktPm51bWJl
cigpKSkgKyAxLCBjaGVja0N1cnJlbnQpOworICAgIHJldHVybiBiYWNraW5nU3RvcmUoKS0+bWF5
YmVVcGRhdGVLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKHRyYW5zYWN0aW9uLT5iYWNraW5nU3Rv
cmVUcmFuc2FjdGlvbigpLCBkYXRhYmFzZUlkKCksIGlkKCksIHN0YXRpY19jYXN0PGludDY0X3Q+
KGZsb29yKGtleS0+bnVtYmVyKCkpKSArIDEsIGNoZWNrQ3VycmVudCk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaAppbmRleCBjZmRlM2JlN2IzNDUx
YmIyYjYzMjZlZGFiNjA3ZWQyODBiNDM0MjA0Li5hZTFhYTZkZTBmMGE5YTJhZDUyZDJlZmJiODRk
OTU1ZTU3Mjk2ODhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oCkBAIC05Niw3ICs5Niw3IEBA
IHByaXZhdGU6CiAKICAgICB2b2lkIGxvYWRJbmRleGVzKCk7CiAgICAgUGFzc1JlZlB0cjxJREJL
ZXk+IGdlbmVyYXRlS2V5KFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOwot
ICAgIHZvaWQgdXBkYXRlS2V5R2VuZXJhdG9yKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbD4sIGNvbnN0IElEQktleSosIGJvb2wgY2hlY2tDdXJyZW50KTsKKyAgICBib29sIHVw
ZGF0ZUtleUdlbmVyYXRvcihQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+LCBj
b25zdCBJREJLZXkqLCBib29sIGNoZWNrQ3VycmVudCk7CiAKICAgICBzdGF0aWMgdm9pZCBnZXRJ
bnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7CiAgICAgc3Rh
dGljIHZvaWQgcHV0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiwgUGFzc1JlZlB0cjxJREJLZXk+LCBQdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4sIFBhc3NPd25QdHI8VmVj
dG9yPGludDY0X3Q+ID4gcG9wSW5kZXhOYW1lcywgUGFzc093blB0cjxWZWN0b3I8SW5kZXhLZXlz
PiA+KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxE
QkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQkRh
dGFiYXNlLmNwcAppbmRleCBlZGY5ZGIyNTcyZTM1OGY3YjVjYzNhNzU0NDczMGFkNDdmY2YzMWQz
Li4yZDVjZmNkN2Y2YjFlYWQyOWFjOTY2MzgwNWNhM2E3ZTIwOTg1ZjIxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJEYXRhYmFzZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCRGF0YWJhc2UuY3BwCkBAIC0x
OTgsOCArMTk4LDkgQEAgYm9vbCBMZXZlbERCRGF0YWJhc2U6OnJlbW92ZShjb25zdCBMZXZlbERC
U2xpY2UmIGtleSkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgTGV2ZWxEQkRhdGFiYXNl
OjpnZXQoY29uc3QgTGV2ZWxEQlNsaWNlJiBrZXksIFZlY3RvcjxjaGFyPiYgdmFsdWUsIGNvbnN0
IExldmVsREJTbmFwc2hvdCogc25hcHNob3QpCitib29sIExldmVsREJEYXRhYmFzZTo6c2FmZUdl
dChjb25zdCBMZXZlbERCU2xpY2UmIGtleSwgVmVjdG9yPGNoYXI+JiB2YWx1ZSwgYm9vbCYgZm91
bmQsIGNvbnN0IExldmVsREJTbmFwc2hvdCogc25hcHNob3QpCiB7CisgICAgZm91bmQgPSBmYWxz
ZTsKICAgICBzdGQ6OnN0cmluZyByZXN1bHQ7CiAgICAgbGV2ZWxkYjo6UmVhZE9wdGlvbnMgcmVh
ZE9wdGlvbnM7CiAgICAgcmVhZE9wdGlvbnMudmVyaWZ5X2NoZWNrc3VtcyA9IHRydWU7IC8vIEZJ
WE1FOiBEaXNhYmxlIHRoaXMgaWYgdGhlIHBlcmZvcm1hbmNlIGltcGFjdCBpcyB0b28gZ3JlYXQu
CkBAIC0yMDcsMTEgKzIwOCwxMiBAQCBib29sIExldmVsREJEYXRhYmFzZTo6Z2V0KGNvbnN0IExl
dmVsREJTbGljZSYga2V5LCBWZWN0b3I8Y2hhcj4mIHZhbHVlLCBjb25zdCBMZQogCiAgICAgY29u
c3QgbGV2ZWxkYjo6U3RhdHVzIHMgPSBtX2RiLT5HZXQocmVhZE9wdGlvbnMsIG1ha2VTbGljZShr
ZXkpLCAmcmVzdWx0KTsKICAgICBpZiAocy5vaygpKSB7CisgICAgICAgIGZvdW5kID0gdHJ1ZTsK
ICAgICAgICAgdmFsdWUgPSBtYWtlVmVjdG9yKHJlc3VsdCk7CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KICAgICBpZiAocy5Jc05vdEZvdW5kKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgTE9HX0VSUk9SKCJMZXZlbERCIGdldCBmYWlsZWQ6
ICVzIiwgcy5Ub1N0cmluZygpLmNfc3RyKCkpOwogICAgIHJldHVybiBmYWxzZTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQkRhdGFiYXNlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJEYXRhYmFzZS5oCmluZGV4
IDJkMzJjZDczNjNlNTgzNjc3ZDVjYzdhNDg0MzZlMzAyNzNhOGY1ZWQuLmY5ZjRkNGUxYmFlNGIw
YjYzYjhhOThiZTkyMjIyOGQ0Njc1MTA1OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2xldmVsZGIvTGV2ZWxEQkRhdGFiYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbGV2ZWxkYi9MZXZlbERCRGF0YWJhc2UuaApAQCAtNjksNyArNjksNyBAQCBwdWJsaWM6
CiAKICAgICBib29sIHB1dChjb25zdCBMZXZlbERCU2xpY2UmIGtleSwgY29uc3QgVmVjdG9yPGNo
YXI+JiB2YWx1ZSk7CiAgICAgYm9vbCByZW1vdmUoY29uc3QgTGV2ZWxEQlNsaWNlJiBrZXkpOwot
ICAgIGJvb2wgZ2V0KGNvbnN0IExldmVsREJTbGljZSYga2V5LCBWZWN0b3I8Y2hhcj4mIHZhbHVl
LCBjb25zdCBMZXZlbERCU25hcHNob3QqID0gMCk7CisgICAgYm9vbCBzYWZlR2V0KGNvbnN0IExl
dmVsREJTbGljZSYga2V5LCBWZWN0b3I8Y2hhcj4mIHZhbHVlLCBib29sJiBmb3VuZCwgY29uc3Qg
TGV2ZWxEQlNuYXBzaG90KiA9IDApOwogICAgIGJvb2wgd3JpdGUoTGV2ZWxEQldyaXRlQmF0Y2gm
KTsKICAgICBQYXNzT3duUHRyPExldmVsREJJdGVyYXRvcj4gY3JlYXRlSXRlcmF0b3IoY29uc3Qg
TGV2ZWxEQlNuYXBzaG90KiA9IDApOwogICAgIGNvbnN0IExldmVsREJDb21wYXJhdG9yKiBjb21w
YXJhdG9yKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZl
bGRiL0xldmVsREJUcmFuc2FjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZl
bGRiL0xldmVsREJUcmFuc2FjdGlvbi5jcHAKaW5kZXggZmU4MjYyYTI0MDIzMmQzZTI4MGU5ZDUw
MmUyNjRjNGIyNDZkNDE4MC4uNTMzNWEwMjhhZjdjNzgyZTIxMTdlM2U1NDllMWIzODNkYjY4ZmEw
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCVHJh
bnNhY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxE
QlRyYW5zYWN0aW9uLmNwcApAQCAtMTA3LDIwICsxMDcsMzggQEAgdm9pZCBMZXZlbERCVHJhbnNh
Y3Rpb246OnJlbW92ZShjb25zdCBMZXZlbERCU2xpY2UmIGtleSkKICAgICBzZXQoa2V5LCBWZWN0
b3I8Y2hhcj4oKSwgdHJ1ZSk7CiB9CiAKLWJvb2wgTGV2ZWxEQlRyYW5zYWN0aW9uOjpnZXQoY29u
c3QgTGV2ZWxEQlNsaWNlJiBrZXksIFZlY3RvcjxjaGFyPiYgdmFsdWUpCitib29sIExldmVsREJU
cmFuc2FjdGlvbjo6c2FmZUdldChjb25zdCBMZXZlbERCU2xpY2UmIGtleSwgVmVjdG9yPGNoYXI+
JiB2YWx1ZSwgYm9vbCYgZm91bmQpCiB7CisgICAgZm91bmQgPSBmYWxzZTsKICAgICBBU1NFUlQo
IW1fZmluaXNoZWQpOwogICAgIEFWTFRyZWVOb2RlKiBub2RlID0gbV90cmVlLnNlYXJjaChrZXkp
OwogCiAgICAgaWYgKG5vZGUpIHsKICAgICAgICAgaWYgKG5vZGUtPmRlbGV0ZWQpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgICAgICB2
YWx1ZSA9IG5vZGUtPnZhbHVlOworICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KIAotICAgIHJldHVybiBtX2RiLT5nZXQoa2V5LCB2YWx1ZSwgJm1fc25h
cHNob3QpOworICAgIGJvb2wgb2sgPSBtX2RiLT5zYWZlR2V0KGtleSwgdmFsdWUsIGZvdW5kLCAm
bV9zbmFwc2hvdCk7CisgICAgaWYgKCFvaykgeworICAgICAgICBBU1NFUlQoIWZvdW5kKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBM
ZXZlbERCVHJhbnNhY3Rpb246OmdldChjb25zdCBMZXZlbERCU2xpY2UmIGtleSwgVmVjdG9yPGNo
YXI+JiB2YWx1ZSkKK3sKKyAgICBib29sIGZvdW5kID0gZmFsc2U7CisgICAgYm9vbCBvayA9IHNh
ZmVHZXQoa2V5LCB2YWx1ZSwgZm91bmQpOworICAgIGlmICghb2spIHsKKyAgICAgICAgQVNTRVJU
KCFmb3VuZCk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICByZXR1
cm4gb2sgJiYgZm91bmQ7CiB9CiAKIGJvb2wgTGV2ZWxEQlRyYW5zYWN0aW9uOjpjb21taXQoKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCVHJhbnNh
Y3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQlRyYW5zYWN0
aW9uLmgKaW5kZXggOTQyMzZmZjc2MDUzNTFlZjNiMWYyMWNkYTViNTU0ZjVhNDk1NmJhYy4uMjMz
YTYwZWVhYWM2NWVhM2U0YjFjMDdkOWZhZjY5ODU2ZjJkMGYxMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCVHJhbnNhY3Rpb24uaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJUcmFuc2FjdGlvbi5oCkBAIC01NCw2
ICs1NCw4IEBAIHB1YmxpYzoKICAgICB+TGV2ZWxEQlRyYW5zYWN0aW9uKCk7CiAgICAgdm9pZCBw
dXQoY29uc3QgTGV2ZWxEQlNsaWNlJiBrZXksIGNvbnN0IFZlY3RvcjxjaGFyPiYgdmFsdWUpOwog
ICAgIHZvaWQgcmVtb3ZlKGNvbnN0IExldmVsREJTbGljZSYga2V5KTsKKyAgICBib29sIHNhZmVH
ZXQoY29uc3QgTGV2ZWxEQlNsaWNlJiBrZXksIFZlY3RvcjxjaGFyPiYgdmFsdWUsIGJvb2wmIGZv
dW5kKTsKKyAgICAvLyBGSVhNRTogQ29udmVydCBhbGwgY2FsbGVycyBvZiBnZXQgdG8gc2FmZUdl
dCB0aGVuIHJlbW92ZSBnZXQuCiAgICAgYm9vbCBnZXQoY29uc3QgTGV2ZWxEQlNsaWNlJiBrZXks
IFZlY3RvcjxjaGFyPiYgdmFsdWUpOwogICAgIGJvb2wgY29tbWl0KCk7CiAgICAgdm9pZCByb2xs
YmFjaygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJGYWtl
QmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lEQkZha2VCYWNr
aW5nU3RvcmUuaAppbmRleCAzNDYzNjNhYzNlNTQ2YTAyMzExNjhmYjYxNzA4YzUxZjljOWQzYmNj
Li43NDE4YmEzNmM3ZWYyYzQ1ZDdlZWVjMGIzMGU0ODNmODZkYTI5NzI0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lEQkZha2VCYWNraW5nU3RvcmUuaAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lEQkZha2VCYWNraW5nU3RvcmUuaApAQCAtNDcs
OSArNDcsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHB1dFJlY29yZChUcmFuc2FjdGlv
biosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJL
ZXkmLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBSZWNvcmRJZGVudGlmaWVyKikgT1ZFUlJJREUgeyB9
CiAgICAgdmlydHVhbCB2b2lkIGNsZWFyT2JqZWN0U3RvcmUoVHJhbnNhY3Rpb24qLCBpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkgT1ZFUlJJREUgeyB9CiAgICAgdmly
dHVhbCB2b2lkIGRlbGV0ZVJlY29yZChUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBSZWNvcmRJZGVudGlmaWVyJikgT1ZFUlJJREUg
eyB9Ci0gICAgdmlydHVhbCBpbnQ2NF90IGdldEtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIoVHJh
bnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkgT1ZF
UlJJREUgeyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwgdm9pZCBtYXliZVVwZGF0ZUtleUdlbmVy
YXRvckN1cnJlbnROdW1iZXIoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBuZXdOdW1iZXIsIGJvb2wgY2hlY2tDdXJyZW50KSBP
VkVSUklERSB7IH0KLSAgICB2aXJ0dWFsIGJvb2wga2V5RXhpc3RzSW5PYmplY3RTdG9yZShUcmFu
c2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25z
dCBJREJLZXkmLCBSZWNvcmRJZGVudGlmaWVyKiBmb3VuZFJlY29yZElkZW50aWZpZXIpIE9WRVJS
SURFIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGdldEtleUdlbmVyYXRvckN1
cnJlbnROdW1iZXIoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgaW50NjRfdCYgY3VycmVudE51bWJlcikgT1ZFUlJJREUgeyByZXR1cm4gdHJ1
ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBtYXliZVVwZGF0ZUtleUdlbmVyYXRvckN1cnJlbnROdW1i
ZXIoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgaW50NjRfdCBuZXdOdW1iZXIsIGJvb2wgY2hlY2tDdXJyZW50KSBPVkVSUklERSB7IHJldHVy
biB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIGtleUV4aXN0c0luT2JqZWN0U3RvcmUoVHJhbnNh
Y3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3Qg
SURCS2V5JiwgUmVjb3JkSWRlbnRpZmllciogZm91bmRSZWNvcmRJZGVudGlmaWVyLCBib29sJiBm
b3VuZCkgT1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgdmlydHVhbCBWZWN0b3I8SURC
SW5kZXhNZXRhZGF0YT4gZ2V0SW5kZXhlcyhpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCkgT1ZFUlJJREUgeyByZXR1cm4gVmVjdG9yPElEQkluZGV4TWV0YWRhdGE+KCk7
IH0KICAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSW5kZXgoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmLCBib29sIGlzVW5pcXVlLCBib29sIGlzTXVs
dGlFbnRyeSkgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xldmVsREJUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvTGV2ZWxEQlRlc3QuY3BwCmluZGV4IDdkYzAzNTVkZmU5MzVmMzkzMzE0NTBl
ZTY5NjYyOTc3MmVjYzJmMjkuLjRiOWNhZjhjZmMwOGViODFhNDlhNWJhNDEwZjgyZjNjMjU4MDFm
MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTGV2ZWxEQlRlc3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTGV2ZWxEQlRlc3QuY3BwCkBA
IC03OSw4ICs3OSwxMCBAQCBURVNUKExldmVsREJEYXRhYmFzZVRlc3QsIENvcnJ1cHRpb25UZXN0
KQogCiAgICAgbGV2ZWxkYiA9IExldmVsREJEYXRhYmFzZTo6b3BlbihwYXRoLCAmY29tcGFyYXRv
cik7CiAgICAgRVhQRUNUX1RSVUUobGV2ZWxkYik7Ci0gICAgc3VjY2VzcyA9IGxldmVsZGItPmdl
dChrZXksIGdvdFZhbHVlKTsKKyAgICBib29sIGZvdW5kID0gZmFsc2U7CisgICAgc3VjY2VzcyA9
IGxldmVsZGItPnNhZmVHZXQoa2V5LCBnb3RWYWx1ZSwgZm91bmQpOwogICAgIEVYUEVDVF9UUlVF
KHN1Y2Nlc3MpOworICAgIEVYUEVDVF9UUlVFKGZvdW5kKTsKICAgICBFWFBFQ1RfRVEocHV0VmFs
dWUsIGdvdFZhbHVlKTsKICAgICBsZXZlbGRiLnJlbGVhc2UoKTsKICAgICBFWFBFQ1RfRkFMU0Uo
bGV2ZWxkYik7CkBAIC05OCw4ICsxMDAsOSBAQCBURVNUKExldmVsREJEYXRhYmFzZVRlc3QsIENv
cnJ1cHRpb25UZXN0KQogCiAgICAgbGV2ZWxkYiA9IExldmVsREJEYXRhYmFzZTo6b3BlbihwYXRo
LCAmY29tcGFyYXRvcik7CiAgICAgRVhQRUNUX1RSVUUobGV2ZWxkYik7Ci0gICAgc3VjY2VzcyA9
IGxldmVsZGItPmdldChrZXksIGdvdFZhbHVlKTsKLSAgICBFWFBFQ1RfRkFMU0Uoc3VjY2Vzcyk7
CisgICAgc3VjY2VzcyA9IGxldmVsZGItPnNhZmVHZXQoa2V5LCBnb3RWYWx1ZSwgZm91bmQpOwor
ICAgIEVYUEVDVF9UUlVFKHN1Y2Nlc3MpOworICAgIEVYUEVDVF9GQUxTRShmb3VuZCk7CiB9CiAK
IFRFU1QoTGV2ZWxEQkRhdGFiYXNlVGVzdCwgVHJhbnNhY3Rpb24pCkBAIC0xMjksOCArMTMyLDEw
IEBAIFRFU1QoTGV2ZWxEQkRhdGFiYXNlVGVzdCwgVHJhbnNhY3Rpb24pCiAgICAgRVhQRUNUX1RS
VUUoc3VjY2Vzcyk7CiAgICAgRVhQRUNUX0VRKGNvbXBhcmF0b3IuY29tcGFyZShnb3RWYWx1ZSwg
b2xkVmFsdWUpLCAwKTsKIAotICAgIHN1Y2Nlc3MgPSBsZXZlbGRiLT5nZXQoa2V5LCBnb3RWYWx1
ZSk7CisgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgIHN1Y2Nlc3MgPSBsZXZlbGRiLT5zYWZl
R2V0KGtleSwgZ290VmFsdWUsIGZvdW5kKTsKICAgICBFWFBFQ1RfVFJVRShzdWNjZXNzKTsKKyAg
ICBFWFBFQ1RfVFJVRShmb3VuZCk7CiAgICAgRVhQRUNUX0VRKGNvbXBhcmF0b3IuY29tcGFyZShn
b3RWYWx1ZSwgbmV3VmFsdWUpLCAwKTsKIAogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBhZGRlZEtl
eSA9IGVuY29kZVN0cmluZygiYWRkZWQga2V5Iik7CkBAIC0xMzgsOCArMTQzLDkgQEAgVEVTVChM
ZXZlbERCRGF0YWJhc2VUZXN0LCBUcmFuc2FjdGlvbikKICAgICBzdWNjZXNzID0gbGV2ZWxkYi0+
cHV0KGFkZGVkS2V5LCBhZGRlZFZhbHVlKTsKICAgICBFWFBFQ1RfVFJVRShzdWNjZXNzKTsKIAot
ICAgIHN1Y2Nlc3MgPSBsZXZlbGRiLT5nZXQoYWRkZWRLZXksIGdvdFZhbHVlKTsKKyAgICBzdWNj
ZXNzID0gbGV2ZWxkYi0+c2FmZUdldChhZGRlZEtleSwgZ290VmFsdWUsIGZvdW5kKTsKICAgICBF
WFBFQ1RfVFJVRShzdWNjZXNzKTsKKyAgICBFWFBFQ1RfVFJVRShmb3VuZCk7CiAgICAgRVhQRUNU
X0VRKGNvbXBhcmF0b3IuY29tcGFyZShnb3RWYWx1ZSwgYWRkZWRWYWx1ZSksIDApOwogCiAgICAg
c3VjY2VzcyA9IHRyYW5zYWN0aW9uLT5nZXQoYWRkZWRLZXksIGdvdFZhbHVlKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>