<?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>176845</bug_id>
          
          <creation_ts>2017-09-13 09:14:37 -0700</creation_ts>
          <short_desc>Add Cache API support of records persistency</short_desc>
          <delta_ts>2022-09-07 08:28:09 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=177380</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>176818</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="youenn fablet">youennf</reporter>
          <assigned_to name="youenn fablet">youennf</assigned_to>
          <cc>achristensen</cc>
    
    <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>koivisto</cc>
    
    <cc>sam</cc>
    
    <cc>thisiskatewinslet</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1348308</commentid>
    <comment_count>0</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-09-13 09:14:37 -0700</bug_when>
    <thetext>Add persistency on disk for regular sessions and in-memory for private sessions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348317</commentid>
    <comment_count>1</comment_count>
      <attachid>320646</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-09-13 09:41:44 -0700</bug_when>
    <thetext>Created attachment 320646
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348528</commentid>
    <comment_count>2</comment_count>
      <attachid>320701</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-09-13 15:41:28 -0700</bug_when>
    <thetext>Created attachment 320701
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348531</commentid>
    <comment_count>3</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-09-13 15:43:24 -0700</bug_when>
    <thetext>Attachment 320701 did not pass style-queue:


ERROR: Source/WebKit/NetworkProcess/cache/CacheStorageEngineCache.cpp:238:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebKit/NetworkProcess/cache/CacheStorageEngineCache.cpp:424:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 2 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348548</commentid>
    <comment_count>4</comment_count>
      <attachid>320706</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-09-13 16:23:11 -0700</bug_when>
    <thetext>Created attachment 320706
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348549</commentid>
    <comment_count>5</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-09-13 16:24:31 -0700</bug_when>
    <thetext>Attachment 320706 did not pass style-queue:


ERROR: Source/WebKit/NetworkProcess/cache/CacheStorageEngineCache.cpp:237:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebKit/NetworkProcess/cache/CacheStorageEngineCache.cpp:426:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 2 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348560</commentid>
    <comment_count>6</comment_count>
      <attachid>320709</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-09-13 16:40:12 -0700</bug_when>
    <thetext>Created attachment 320709
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348561</commentid>
    <comment_count>7</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-09-13 16:42:04 -0700</bug_when>
    <thetext>Attachment 320709 did not pass style-queue:


ERROR: Source/WebKit/NetworkProcess/cache/CacheStorageEngineCache.cpp:244:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebKit/NetworkProcess/cache/CacheStorageEngineCache.cpp:433:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 2 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348565</commentid>
    <comment_count>8</comment_count>
      <attachid>320710</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-09-13 16:50:36 -0700</bug_when>
    <thetext>Created attachment 320710
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348569</commentid>
    <comment_count>9</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-09-13 16:53:09 -0700</bug_when>
    <thetext>Attachment 320710 did not pass style-queue:


ERROR: Source/WebKit/NetworkProcess/cache/CacheStorageEngineCache.cpp:244:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebKit/NetworkProcess/cache/CacheStorageEngineCache.cpp:434:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 2 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348644</commentid>
    <comment_count>10</comment_count>
      <attachid>320710</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-09-13 21:57:44 -0700</bug_when>
    <thetext>Comment on attachment 320710
Patch

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

&gt; Source/WebKit/NetworkProcess/cache/CacheStorageEngineCache.cpp:61
&gt; +    if (keyURL.hasQuery())
&gt; +        keyURL.setQuery({ });

Seems like there should be a removeQuery(), just like there is a removeFragmentIdentifier().

&gt; Source/WebKit/NetworkProcess/cache/CacheStorageEngineCache.cpp:105
&gt; +    auto key = Key { ASCIILiteral(&quot;record&quot;), String { m_uniqueName }, String(), createCanonicalUUIDString(), m_caches.salt() };

I would do Key key { ... }; rather than the auto key = Key { ... };

If m_uniqueName is already a String, why the need to copy-construct?

&gt; Source/WebKit/NetworkProcess/cache/CacheStorageEngineCache.cpp:107
&gt; +    RecordInformation recordInformation = { WTFMove(key), insertionTime, record.identifier, 0 , record.request.url(), false, { } };

I don&apos;t think the = should be necessary.

&gt; Source/WebKit/NetworkProcess/cache/CacheStorageEngineCache.cpp:140
&gt; +struct TraversalResult {
&gt; +    Ref&lt;Caches&gt; caches;
&gt; +    uint64_t cacheIdentifier;
&gt; +    CompletionCallback callback;
&gt; +    HashMap&lt;String, Vector&lt;RecordInformation&gt;&gt; records;
&gt; +    Vector&lt;Key&gt; failedRecords;
&gt; +};

Probably want to wrap this in an anonymous namespace to static linkage.

&gt; Source/WebKit/NetworkProcess/cache/CacheStorageEngineCache.cpp:153
&gt; +    TraversalResult traversalResult = { makeRef(m_caches), m_identifier, WTFMove(callback), { }, { } };

Should not need =.

&gt; Source/WebKit/NetworkProcess/cache/CacheStorageEngineCache.cpp:180
&gt; +        RecordInformation recordInformation = { storageRecord-&gt;key, insertionTime, 0, 0, record.request.url(), false, { } };

Ditto.

&gt; Source/WebKit/NetworkProcess/cache/CacheStorageEngineCache.cpp:220
&gt; +    using ReadRecordsCallback = WTF::Function&lt;void(Vector&lt;Record&gt;&amp;&amp;, Vector&lt;uint64_t&gt;&amp;&amp;)&gt;;
&gt; +    static RefPtr&lt;ReadRecordTaskCounter&gt; create(ReadRecordsCallback&amp;&amp; callback) { return adoptRef(new ReadRecordTaskCounter(WTFMove(callback))); }

Why RefPtr&lt;ReadRecordTaskCounter&gt;? Can this return a Ref&lt;&gt;?

&gt; Source/WebKit/NetworkProcess/cache/CacheStorageEngineCache.cpp:244
&gt; +    explicit ReadRecordTaskCounter(ReadRecordsCallback&amp;&amp; callback) : m_callback(WTFMove(callback)) { }

We usually write this as: 

explicit ReadRecordTaskCounter(ReadRecordsCallback&amp;&amp; callback)
    : m_callback(WTFMove(callback)) 
{
}

&gt; Source/WebKit/NetworkProcess/cache/CacheStorageEngineCache.cpp:317
&gt; +    static RefPtr&lt;AsynchronousPutTaskCounter&gt; create() { return adoptRef(new AsynchronousPutTaskCounter()); }

Ref?  Also, you don&apos;t need the () in new AsynchronousPutTaskCounter()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348661</commentid>
    <comment_count>11</comment_count>
      <attachid>320710</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-09-13 23:22:30 -0700</bug_when>
    <thetext>Comment on attachment 320710
Patch

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

&gt;&gt; Source/WebKit/NetworkProcess/cache/CacheStorageEngineCache.cpp:61
&gt;&gt; +        keyURL.setQuery({ });
&gt; 
&gt; Seems like there should be a removeQuery(), just like there is a removeFragmentIdentifier().

Since we&apos;re removing the fragment right after it, I think this needs a removeQueryAndFragmentIdentifier.  I&apos;ve seen this pattern before, too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348776</commentid>
    <comment_count>12</comment_count>
      <attachid>320773</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-09-14 09:00:19 -0700</bug_when>
    <thetext>Created attachment 320773
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348777</commentid>
    <comment_count>13</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-09-14 09:01:05 -0700</bug_when>
    <thetext>(In reply to Alex Christensen from comment #11)
&gt; Comment on attachment 320710 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=320710&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebKit/NetworkProcess/cache/CacheStorageEngineCache.cpp:61
&gt; &gt;&gt; +        keyURL.setQuery({ });
&gt; &gt; 
&gt; &gt; Seems like there should be a removeQuery(), just like there is a removeFragmentIdentifier().
&gt; 
&gt; Since we&apos;re removing the fragment right after it, I think this needs a
&gt; removeQueryAndFragmentIdentifier.  I&apos;ve seen this pattern before, too.

Right, there are at least two places in CacheStorage API where we would benefit from that pattern. This is on my TODO list.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348779</commentid>
    <comment_count>14</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-09-14 09:02:54 -0700</bug_when>
    <thetext>Attachment 320773 did not pass style-queue:


ERROR: Source/WebKit/NetworkProcess/cache/CacheStorageEngineCache.cpp:243:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebKit/NetworkProcess/cache/CacheStorageEngineCache.cpp:433:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 2 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348781</commentid>
    <comment_count>15</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-09-14 09:04:02 -0700</bug_when>
    <thetext>Thanks for the review.

(In reply to Sam Weinig from comment #10)
&gt; Comment on attachment 320710 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=320710&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/NetworkProcess/cache/CacheStorageEngineCache.cpp:61
&gt; &gt; +    if (keyURL.hasQuery())
&gt; &gt; +        keyURL.setQuery({ });
&gt; 
&gt; Seems like there should be a removeQuery(), just like there is a
&gt; removeFragmentIdentifier().
&gt; 
&gt; &gt; Source/WebKit/NetworkProcess/cache/CacheStorageEngineCache.cpp:105
&gt; &gt; +    auto key = Key { ASCIILiteral(&quot;record&quot;), String { m_uniqueName }, String(), createCanonicalUUIDString(), m_caches.salt() };
&gt; 
&gt; I would do Key key { ... }; rather than the auto key = Key { ... };
&gt; 
&gt; If m_uniqueName is already a String, why the need to copy-construct?

Fixed.

&gt; &gt; Source/WebKit/NetworkProcess/cache/CacheStorageEngineCache.cpp:107
&gt; &gt; +    RecordInformation recordInformation = { WTFMove(key), insertionTime, record.identifier, 0 , record.request.url(), false, { } };
&gt; 
&gt; I don&apos;t think the = should be necessary.

Fixed.

&gt; &gt; Source/WebKit/NetworkProcess/cache/CacheStorageEngineCache.cpp:140
&gt; &gt; +struct TraversalResult {
&gt; &gt; +    Ref&lt;Caches&gt; caches;
&gt; &gt; +    uint64_t cacheIdentifier;
&gt; &gt; +    CompletionCallback callback;
&gt; &gt; +    HashMap&lt;String, Vector&lt;RecordInformation&gt;&gt; records;
&gt; &gt; +    Vector&lt;Key&gt; failedRecords;
&gt; &gt; +};
&gt; 
&gt; Probably want to wrap this in an anonymous namespace to static linkage.

I am not sure what you are proposing, can you elaborate?


&gt; &gt; Source/WebKit/NetworkProcess/cache/CacheStorageEngineCache.cpp:153
&gt; &gt; +    TraversalResult traversalResult = { makeRef(m_caches), m_identifier, WTFMove(callback), { }, { } };
&gt; 
&gt; Should not need =.

Fixed.

&gt; &gt; Source/WebKit/NetworkProcess/cache/CacheStorageEngineCache.cpp:180
&gt; &gt; +        RecordInformation recordInformation = { storageRecord-&gt;key, insertionTime, 0, 0, record.request.url(), false, { } };
&gt; 
&gt; Ditto.

Fixed.

&gt; &gt; Source/WebKit/NetworkProcess/cache/CacheStorageEngineCache.cpp:220
&gt; &gt; +    using ReadRecordsCallback = WTF::Function&lt;void(Vector&lt;Record&gt;&amp;&amp;, Vector&lt;uint64_t&gt;&amp;&amp;)&gt;;
&gt; &gt; +    static RefPtr&lt;ReadRecordTaskCounter&gt; create(ReadRecordsCallback&amp;&amp; callback) { return adoptRef(new ReadRecordTaskCounter(WTFMove(callback))); }
&gt; 
&gt; Why RefPtr&lt;ReadRecordTaskCounter&gt;? Can this return a Ref&lt;&gt;?

It makes capturing the counter in the lambda quicker to write.
[taskCounter] vs [taskCounter = taskeCounter.copyRef()].

Maybe being explicit about the copyRef is a good thing though?

&gt; &gt; Source/WebKit/NetworkProcess/cache/CacheStorageEngineCache.cpp:244
&gt; &gt; +    explicit ReadRecordTaskCounter(ReadRecordsCallback&amp;&amp; callback) : m_callback(WTFMove(callback)) { }
&gt; 
&gt; We usually write this as: 
&gt; 
&gt; explicit ReadRecordTaskCounter(ReadRecordsCallback&amp;&amp; callback)
&gt;     : m_callback(WTFMove(callback)) 
&gt; {
&gt; }

Would it make sense to change the code style here?
I forgot to change this in the patch, will do it asap.

&gt; &gt; Source/WebKit/NetworkProcess/cache/CacheStorageEngineCache.cpp:317
&gt; &gt; +    static RefPtr&lt;AsynchronousPutTaskCounter&gt; create() { return adoptRef(new AsynchronousPutTaskCounter()); }
&gt; 
&gt; Ref?  Also, you don&apos;t need the () in new AsynchronousPutTaskCounter()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348782</commentid>
    <comment_count>16</comment_count>
      <attachid>320774</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-09-14 09:05:04 -0700</bug_when>
    <thetext>Created attachment 320774
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348787</commentid>
    <comment_count>17</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-09-14 09:06:19 -0700</bug_when>
    <thetext>Filed bug 176911 for the URL helper method.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348788</commentid>
    <comment_count>18</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-09-14 09:07:46 -0700</bug_when>
    <thetext>Attachment 320774 did not pass style-queue:


ERROR: Source/WebKit/NetworkProcess/cache/CacheStorageEngineCache.cpp:436:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 1 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348797</commentid>
    <comment_count>19</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-09-14 09:19:37 -0700</bug_when>
    <thetext>(In reply to youenn fablet from comment #15)
&gt; Thanks for the review.
&gt; 
&gt; 
&gt; &gt; &gt; Source/WebKit/NetworkProcess/cache/CacheStorageEngineCache.cpp:140
&gt; &gt; &gt; +struct TraversalResult {
&gt; &gt; &gt; +    Ref&lt;Caches&gt; caches;
&gt; &gt; &gt; +    uint64_t cacheIdentifier;
&gt; &gt; &gt; +    CompletionCallback callback;
&gt; &gt; &gt; +    HashMap&lt;String, Vector&lt;RecordInformation&gt;&gt; records;
&gt; &gt; &gt; +    Vector&lt;Key&gt; failedRecords;
&gt; &gt; &gt; +};
&gt; &gt; 
&gt; &gt; Probably want to wrap this in an anonymous namespace to static linkage.
&gt; 
&gt; I am not sure what you are proposing, can you elaborate?
&gt; 

When you have a function in a cpp file that you want to constrain to that translation unit, you mark that by saying static void functionName()... For a struct or class, you can do the same thing by wrapping it in an anonymous namespace.  In this case:


namespace {

struct TraversalResult {
    Ref&lt;Caches&gt; caches;
    uint64_t cacheIdentifier;
    CompletionCallback callback;
    HashMap&lt;String, Vector&lt;RecordInformation&gt;&gt; records;
    Vector&lt;Key&gt; failedRecords;
};

}

&gt; 
&gt; &gt; &gt; Source/WebKit/NetworkProcess/cache/CacheStorageEngineCache.cpp:220
&gt; &gt; &gt; +    using ReadRecordsCallback = WTF::Function&lt;void(Vector&lt;Record&gt;&amp;&amp;, Vector&lt;uint64_t&gt;&amp;&amp;)&gt;;
&gt; &gt; &gt; +    static RefPtr&lt;ReadRecordTaskCounter&gt; create(ReadRecordsCallback&amp;&amp; callback) { return adoptRef(new ReadRecordTaskCounter(WTFMove(callback))); }
&gt; &gt; 
&gt; &gt; Why RefPtr&lt;ReadRecordTaskCounter&gt;? Can this return a Ref&lt;&gt;?
&gt; 
&gt; It makes capturing the counter in the lambda quicker to write.
&gt; [taskCounter] vs [taskCounter = taskeCounter.copyRef()].
&gt; 
&gt; Maybe being explicit about the copyRef is a good thing though?

I think so. It&apos;s yet another think in my list of things that makes me wonder if Ref&lt;&gt; should be copyable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348832</commentid>
    <comment_count>20</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-09-14 10:21:20 -0700</bug_when>
    <thetext>&gt; When you have a function in a cpp file that you want to constrain to that
&gt; translation unit, you mark that by saying static void functionName()... For
&gt; a struct or class, you can do the same thing by wrapping it in an anonymous
&gt; namespace.  In this case:

We could do that for all classes declared in the cpp file.
I guess the point is that TraversalResult name is generic enough that it could collide.

&gt; &gt; Maybe being explicit about the copyRef is a good thing though?

Will move to this then.
 
&gt; I think so. It&apos;s yet another think in my list of things that makes me wonder
&gt; if Ref&lt;&gt; should be copyable.

That is a vast discussion indeed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348871</commentid>
    <comment_count>21</comment_count>
      <attachid>320793</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-09-14 11:09:48 -0700</bug_when>
    <thetext>Created attachment 320793
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348874</commentid>
    <comment_count>22</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-09-14 11:12:25 -0700</bug_when>
    <thetext>Attachment 320793 did not pass style-queue:


ERROR: Source/WebKit/NetworkProcess/cache/CacheStorageEngineCache.cpp:438:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 1 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1349071</commentid>
    <comment_count>23</comment_count>
      <attachid>320793</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-09-14 16:14:07 -0700</bug_when>
    <thetext>Comment on attachment 320793
Patch

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

r=me other than these comments.

&gt; Source/WebKit/NetworkProcess/cache/CacheStorageEngineCache.cpp:157
&gt; +            RunLoop::main().dispatch([traversalResult = WTFMove(traversalResult)]() mutable {

An isolatedCopy would protect this from future changes accidentally introducing multiply-reffed strings going across threads here.  The key is questionable already.  I think until we have thread safe refcounted strings we need to isolatedCopy things when going across threads at places like this.

&gt; Source/WebKit/NetworkProcess/cache/CacheStorageEngineCache.cpp:218
&gt; +class ReadRecordTaskCounter : public ThreadSafeRefCounted&lt;ReadRecordTaskCounter&gt; {

This doesn&apos;t need to be ThreadSafeRefCounted.  RefCounted is fine because all operations of this class are on the same thread.  Add assertions.

&gt; Source/WebKit/NetworkProcess/cache/CacheStorageEngineCache.cpp:319
&gt; +class AsynchronousPutTaskCounter : public RefCounted&lt;AsynchronousPutTaskCounter&gt; {

This is a strange abstraction.  I think it would be better to reorganize the code that uses it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1349126</commentid>
    <comment_count>24</comment_count>
      <attachid>320852</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-09-14 17:33:19 -0700</bug_when>
    <thetext>Created attachment 320852
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1349129</commentid>
    <comment_count>25</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-09-14 17:36:15 -0700</bug_when>
    <thetext>Attachment 320852 did not pass style-queue:


ERROR: Source/WebKit/NetworkProcess/cache/CacheStorageEngineCache.cpp:473:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 1 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1349156</commentid>
    <comment_count>26</comment_count>
      <attachid>320863</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-09-14 19:03:10 -0700</bug_when>
    <thetext>Created attachment 320863
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1349157</commentid>
    <comment_count>27</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-09-14 19:05:19 -0700</bug_when>
    <thetext>Attachment 320863 did not pass style-queue:


ERROR: Source/WebKit/NetworkProcess/cache/CacheStorageEngineCache.cpp:474:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 1 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1349165</commentid>
    <comment_count>28</comment_count>
      <attachid>320863</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-09-14 20:56:53 -0700</bug_when>
    <thetext>Comment on attachment 320863
Patch for landing

Clearing flags on attachment: 320863

Committed r222073: &lt;http://trac.webkit.org/changeset/222073&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1349166</commentid>
    <comment_count>29</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-09-14 20:56:54 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1353406</commentid>
    <comment_count>30</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-09-27 12:27:57 -0700</bug_when>
    <thetext>&lt;rdar://problem/34693326&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>320646</attachid>
            <date>2017-09-13 09:41:44 -0700</date>
            <delta_ts>2017-09-13 15:41:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-176845-20170913094144.patch</filename>
            <type>text/plain</type>
            <size>55288</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIxODY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGNiNjdkMGMwNTllYWQyM2Iw
YTU3NWI4ZDA0NTI4MGQ5YzU2Zjg2NjUuLmIzMDNjYWM3YWI4OGNiNWQ3NDQ5NWVjZGUwNmU1MTNl
OTBmYzM1NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTAzIEBACisyMDE3LTA5LTEzICBZb3Vlbm4g
RmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgQ2FjaGUgQVBJIHN1cHBv
cnQgb2YgcmVjb3JkcyBwZXJzaXN0ZW5jeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTc2ODQ1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgSW50cm9kdWNpbmcgYXN5bmNocm9ub3VzIG9wZW5pbmcgb2YgQ2Fj
aGUgb2JqZWN0cy4KKyAgICAgICAgV2hlbiBvcGVuaW5nLCBDYWNoZSBvYmplY3RzIHdpbGwgcmVh
ZCB0aGUgbGlzdCBvZiByZWNvcmRzIGZyb20gdGhlIGRpc2suCisgICAgICAgIFRoZXkga2VlcCBp
biBtZW1vcnkgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiB0byBtYWtlIGFueSBtYXRjaCBvciBy
ZW1vdmUgcmVxdWVzdCB3aXRob3V0IHJlYWRpbmcgZnVydGhlciBpbmZvcm1hdGlvbiBmcm9tIHRo
ZSBkaXNrLgorICAgICAgICBDYWNoZSBvYmplY3RzIHRodXMga2VlcCBkdXJpbmcgdGhlIG9wZW5p
bmcgdGltZSBhIGxpc3Qgb2YgY2FsbGJhY2tzIHRvIGNhbGwgd2hlbiBiZWluZyBvcGVuZWQuCisg
ICAgICAgIFBlcnNpc3RlbnQgc3RvcmFnZSBpcyBpbXBsZW1lbnRlZCB0aHJvdWdoIE5ldHdvcmtD
YWNoZTo6U3RvcmFnZS4KKworICAgICAgICBBIENhY2hlIG9iamVjdCBpcyBhZGRlZCBhIHVuaXF1
ZSBuYW1lIHNvIHRoYXQgcmVjb3JkcyBmcm9tIGEgQ2FjaGUgY2Fubm90IGJlIG1peGVkIHdpdGgg
cmVjb3JkcyBmcm9tIGFub3RoZXIgQ2FjaGUuCisgICAgICAgIFRoaXMgdW5pcXVlIG5hbWUgaXMg
c3RvcmVkIHBlcnNpc3Rlbmx5IGluIGFkZGl0aW9uIHRvIHRoZSBDYWNoZSBuYW1lLgorICAgICAg
ICBUaGlzIHVuaXF1ZSBuYW1lIGlzIHVzZWQgYXMgdGhlIGtleSB0eXBlIGdpdmVuIHRvIHRoZSBz
dG9yYWdlLgorCisgICAgICAgIFJlcXVlc3QsIHJlc3BvbnNlIGFuZCByZXNwb25zZWJvZHkgZGF0
YSBhcmUgbm8gbG9uZ2VyIGtlcHQgYnkgdGhlIENhY2hlIG9iamVjdC4KKyAgICAgICAgRm9yIHJl
Z3VsYXIgc2Vzc2lvbnMsIHRoaXMgaW5mb3JtYXRpb24gaXMga2VwdCBvbiB0aGUgZGlzayB0aHJv
dWdoIE5ldHdvcmtDYWNoZTo6U3RvcmFnZS4KKyAgICAgICAgSW5zZXJ0aW9uIHRpbWUgaXMgYWxz
byBzdG9yZWQgcGVyc2lzdGVudGx5IHNvIGFzIHRvIGtlZXAgdGhlIG9yZGVyaW5nIG9mIHRoZSBy
ZWNvcmRzIGNvbnNpc3RlbnQuCisgICAgICAgIEZvciBwcml2YXRlIGJyb3dzaW5nIHNlc3Npb25z
LCB0aGlzIGluZm9ybWF0aW9uIGlzIGtlcHQgaW4gYSBtYXAgb3duZWQgYnkgdGhlIENhY2hlcyBv
YmplY3QuCisgICAgICAgIFJlY29yZERhdGEgaXMgcmVuYW1lZCB0byBSZWNvcmRJbmZvcm1hdGlv
biBhcyBpdCBub3cgb25seSBjb250YWlucyB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBoYW5kbGUg
dGhlIGRpZmZlcmVudCBDYWNoZSBhY3Rpb25zLgorCisgICAgICAgIEZvciBldmVyeSByZWNvcmQg
cmV0cmlldmFsIGFjdGlvbiwgYSBSZWFkUmVjb3JkVGFza0NvdW50ZXIgaXMgdXNlZC4KKyAgICAg
ICAgSXRzIHB1cnBvc2UgaXMgdG8gYWxsb3cgcmV0cmlldmluZyB0aGUgcmVjb3JkIGRhdGEgb24g
dGhlIGRpc2sgaW4gcGFyYWxsZWwsCisgICAgICAgIGFuZCB0aGVuIHNlbmQgYmFjayB0aGUgaW5m
b3JtYXRpb24gd2hlbiBldmVyeXRoaW5nIGlzIHJlYWQuCisgICAgICAgIEluIGNhc2Ugc29tZSBy
ZWNvcmRzIGNhbm5vdCBiZSBjb3JyZWN0bHkgcmVhZCwgdGhleSBhcmUgcmVtb3ZlZCBhdXRvbWF0
aWNhbGx5IGF0IHRoYXQgcG9pbnQuCisgICAgICAgIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9u
IGxvYWRzIGFsbCBpbmZvcm1hdGlvbiBpbiBtZW1vcnkgaW5jbHVkaW5nIHJlc3BvbnNlIGJvZGll
cy4KKyAgICAgICAgRnVydGhlciBpbXByb3ZlbWVudHMgbWlnaHQgY29uc2lkZXIgc3RyZWFtaW5n
IHRoZSByZXNwb25zZSBib2RpZXMgcHJvZ3Jlc3NpdmVseS4KKworICAgICAgICBGb3IgZXZlcnkg
c3RvcmVkIHJlY29yZCwgYW4gQXN5bmNocm9ub3VzUHV0VGFza0NvdW50ZXIgaXMgdXNlZC4KKyAg
ICAgICAgSXRzIHB1cnBvc2UgaXMgYWxzbyB0byB3YWl0IGZvciBhbGwgcHV0IGFjdGlvbnMgdG8g
YmUgY29tcGxldGVkIGJlZm9yZSBleGVjdXRpbmcgdGhlIGNvbXBsZXRpb24gY2FsbGJhY2suCisg
ICAgICAgIEluIHNvbWUgY2FzZXMsIGEgcmVjb3JkIG5lZWRzIHRvIGJlIG92ZXJyaWRlbi4KKyAg
ICAgICAgSW4gdGhhdCBjYXNlLCBhcyBwZXIgdGhlIHNwZWNpZmljYXRpb24sIG9ubHkgdGhlIGRh
dGEgcmVsYXRlZCB0byB0aGUgcmVzcG9uc2UgaXMgdG8gYmUgbW9kaWZpZWQuCisgICAgICAgIFRo
aXMgcmVxdWlyZXMgcmVhZGluZyB0aGUgcmVjb3JkIHJlcXVlc3QgZGF0YSBvbiBkaXNrIGJlZm9y
ZSBhY3R1YWxseSB3cml0aW5nIHRoZSB3aG9sZSByZWNvcmQgYWdhaW4uCisgICAgICAgIFRoaXMg
aXMgaW1wbGVtZW50ZWQgaW4gdXBkYXRlUmVjb3JkVG9EaXNrLgorCisgICAgICAgIFRoZSBDYWNo
ZSBvYmplY3QgaXMgZGVsZWdhdGluZyBhbGwgcmVjb3JkIHdyaXRpbmcvcmVhZGluZyB0YXNrcyB0
byBpdHMgQ2FjaGVzIG9iamVjdC4KKyAgICAgICAgVGhlIENhY2hlcyBvYmplY3QgaXMgcmVzcG9u
c2libGUgdG8gaGFuZGxlIHBlcnNpc3RlbnQvcHJpdmF0ZSBzZXNzaW9ucy4KKworICAgICAgICAq
IE5ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OkNhY2hlU3RvcmFnZTo6RW5naW5lOjpyZXRyaWV2ZVJlY29yZHMpOiBNYWtpbmcgc3Vy
ZSBDYWNoZSBvYmplY3QgaXMgb3BlbmVkLgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6
OkVuZ2luZTo6cmVhZENhY2hlKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFn
ZTo6RW5naW5lOjp1bmxvY2spOiBEaXNwb3NpbmcgdGhlIGNhY2hlIHdpdGhvdXQgZ29pbmcgdGhy
b3VnaCBpbml0aWFsaXppbmcgaXQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2Fj
aGVTdG9yYWdlRW5naW5lQ2FjaGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6
OmNvbXB1dGVLZXlVUkwpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OnF1ZXJ5Q2Fj
aGUpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OnVwZGF0ZVZhcnlJbmZvcm1hdGlv
bik6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OnRvUmVjb3JkSW5mb3Jt
YXRpb24pOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjpDYWNoZSk6Cisg
ICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6Om9wZW4pOgorICAgICAgICAoV2Vi
S2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjpmaW5pc2hPcGVuaW5nKToKKyAgICAgICAgKFdlYktp
dDo6Q2FjaGVTdG9yYWdlOjpSZWFkUmVjb3JkVGFza0NvdW50ZXI6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6UmVhZFJlY29yZFRhc2tDb3VudGVyOjp+UmVhZFJlY29y
ZFRhc2tDb3VudGVyKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpSZWFkUmVjb3Jk
VGFza0NvdW50ZXI6OmFwcGVuZFJlY29yZCk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFn
ZTo6UmVhZFJlY29yZFRhc2tDb3VudGVyOjpSZWFkUmVjb3JkVGFza0NvdW50ZXIpOgorICAgICAg
ICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjpyZXRyaWV2ZVJlY29yZCk6CisgICAgICAg
IChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OnJldHJpZXZlUmVjb3Jkcyk6CisgICAgICAg
IChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OmFkZFJlY29yZCk6CisgICAgICAgIChXZWJL
aXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OnJlY29yZHNGcm9tVVJMKToKKyAgICAgICAgKFdlYktp
dDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6cmVjb3Jkc0Zyb21VUkwgY29uc3QpOgorICAgICAgICAo
V2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkFzeW5jaHJvbm91c1B1dFRhc2tDb3VudGVyOjpjcmVhdGUp
OgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkFzeW5jaHJvbm91c1B1dFRhc2tDb3Vu
dGVyOjp+QXN5bmNocm9ub3VzUHV0VGFza0NvdW50ZXIpOgorICAgICAgICAoV2ViS2l0OjpDYWNo
ZVN0b3JhZ2U6OkFzeW5jaHJvbm91c1B1dFRhc2tDb3VudGVyOjpvbkNvbXBsZXRpb24pOgorICAg
ICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkFzeW5jaHJvbm91c1B1dFRhc2tDb3VudGVyOjpz
ZXRFcnJvcik6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OnB1dCk6Cisg
ICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OnJlbW92ZSk6CisgICAgICAgIChX
ZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OnJlbW92ZUZyb21SZWNvcmRMaXN0KToKKyAgICAg
ICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6d3JpdGVSZWNvcmRUb0Rpc2spOgorICAg
ICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjp1cGRhdGVSZWNvcmRUb0Rpc2spOgor
ICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjpyZWFkUmVjb3JkRnJvbURpc2sp
OgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjpyZW1vdmVSZWNvcmRGcm9t
RGlzayk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OmVuY29kZSk6Cisg
ICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6ZGVjb2RlUmVjb3JkSGVhZGVyKToKKyAgICAg
ICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6ZGVjb2RlKToKKyAgICAgICAgKFdlYktp
dDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6a2V5cyBjb25zdCk6CisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUuaDoKKyAgICAgICAgKFdlYktpdDo6
Q2FjaGVTdG9yYWdlOjpDYWNoZTo6aXNPcGVuZWQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpD
YWNoZVN0b3JhZ2U6OkNhY2hlOjp1bmlxdWVOYW1lIGNvbnN0KToKKyAgICAgICAgKiBOZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJLaXQ6
OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjpvcGVuKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9y
YWdlOjpDYWNoZXM6OnJlbW92ZSk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2Fj
aGVzOjpkaXNwb3NlKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjplbmNvZGVDYWNo
ZU5hbWVzKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpkZWNvZGVDYWNoZXNOYW1l
cyk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjpyZWFkQ2FjaGVzRnJv
bURpc2spOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6cmVhZFJlY29y
ZHNMaXN0KToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6OndyaXRlUmVj
b3JkKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6OnJlYWRSZWNvcmQp
OgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6cmVtb3ZlUmVjb3JkKToK
KyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6OmNsZWFyTWVtb3J5UmVwcmVz
ZW50YXRpb24pOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6c2FsdCBj
b25zdCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5l
Q2FjaGVzLmg6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjpzaG91bGRQ
ZXJzaXN0IGNvbnN0KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVTdG9yYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpTdG9yYWdlOjpz
dG9yZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFn
ZS5oOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlN0b3JhZ2U6OndyaXRlV2l0aG91
dFdhaXRpbmcpOgorCiAyMDE3LTA5LTEyICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNv
bT4KIAogICAgICAgICBJbnRlcm5hbHMgY2xlYXJDYWNoZVN0b3JhZ2VNZW1vcnlSZXByZXNlbnRh
dGlvbiBzaG91bGQgcmV0dXJuIGEgUHJvbWlzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmUuY3BwIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmUuY3BwCmluZGV4IDU4MzJj
MWExMTc5NWU5ZmNkOGIyZjE3YWI4Y2Y1N2Y2ZmVmY2MzMGIuLjQwOGY2MmIxY2NiNGZmYjgzZTll
YTE3OTg2ZDM2ZDA0ZDNmOTllMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZS5jcHAKQEAgLTEzMiw4ICsxMzIs
NyBAQCB2b2lkIEVuZ2luZTo6cmV0cmlldmVSZWNvcmRzKHVpbnQ2NF90IGNhY2hlSWRlbnRpZmll
ciwgV2ViQ29yZTo6VVJMJiYgdXJsLCBSZWNvcgogICAgICAgICAgICAgY2FsbGJhY2sobWFrZVVu
ZXhwZWN0ZWQocmVzdWx0LmVycm9yKCkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQotCi0gICAgICAgIGNhbGxiYWNrKHJlc3VsdC52YWx1ZSgpLmdldCgpLnJldHJpZXZlUmVjb3Jk
cyh1cmwpKTsKKyAgICAgICAgcmVzdWx0LnZhbHVlKCkuZ2V0KCkucmV0cmlldmVSZWNvcmRzKHVy
bCwgV1RGTW92ZShjYWxsYmFjaykpOwogICAgIH0pOwogfQogCkBAIC0yMTcsMTIgKzIxNiwyOCBA
QCB2b2lkIEVuZ2luZTo6cmVhZENhY2hlc0Zyb21EaXNrKGNvbnN0IFN0cmluZyYgb3JpZ2luLCBD
YWNoZXNDYWxsYmFjayYmIGNhbGxiYWNrKQogCiB2b2lkIEVuZ2luZTo6cmVhZENhY2hlKHVpbnQ2
NF90IGNhY2hlSWRlbnRpZmllciwgQ2FjaGVDYWxsYmFjayYmIGNhbGxiYWNrKQogewotICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgcmVhZGluZy4KICAgICBhdXRvKiBjYWNoZSA9IHRoaXMtPmNhY2hl
KGNhY2hlSWRlbnRpZmllcik7CiAgICAgaWYgKCFjYWNoZSkgewogICAgICAgICBjYWxsYmFjayht
YWtlVW5leHBlY3RlZChFcnJvcjo6SW50ZXJuYWwpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
KyAgICBpZiAoIWNhY2hlLT5pc09wZW5lZCgpKSB7CisgICAgICAgIGNhY2hlLT5vcGVuKFt0aGlz
LCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNhY2hlSWRlbnRpZmllciwgY2FsbGJh
Y2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oc3RkOjpvcHRpb25hbDxFcnJvcj4mJiBlcnJvcikgbXV0
YWJsZSB7CisgICAgICAgICAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgICAgICAgICBjYWxsYmFj
ayhtYWtlVW5leHBlY3RlZChlcnJvci52YWx1ZSgpKSk7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBhdXRvKiBjYWNoZSA9IHRoaXMtPmNhY2hl
KGNhY2hlSWRlbnRpZmllcik7CisgICAgICAgICAgICBpZiAoIWNhY2hlKSB7CisgICAgICAgICAg
ICAgICAgY2FsbGJhY2sobWFrZVVuZXhwZWN0ZWQoRXJyb3I6OkludGVybmFsKSk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQVNTRVJUKGNhY2hl
LT5pc09wZW5lZCgpKTsKKyAgICAgICAgICAgIGNhbGxiYWNrKHN0ZDo6cmVmZXJlbmNlX3dyYXBw
ZXI8Q2FjaGU+IHsgKmNhY2hlIH0pOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KICAgICBjYWxsYmFjayhzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPENhY2hlPiB7ICpjYWNoZSB9
KTsKIH0KIApAQCAtMzI4LDEyICszNDMsMTEgQEAgdm9pZCBFbmdpbmU6OnVubG9jayh1aW50NjRf
dCBjYWNoZUlkZW50aWZpZXIpCiAgICAgaWYgKC0tbG9ja0NvdW50LT52YWx1ZSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgcmVhZENhY2hlKGNhY2hlSWRlbnRpZmllciwgW3RoaXNdKENhY2hlT3JF
cnJvciYmIHJlc3VsdCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmICghcmVzdWx0Lmhhc1ZhbHVlKCkp
Ci0gICAgICAgICAgICByZXR1cm47CisgICAgYXV0byogY2FjaGUgPSB0aGlzLT5jYWNoZShjYWNo
ZUlkZW50aWZpZXIpOworICAgIGlmICghY2FjaGUpCisgICAgICAgIHJldHVybjsKIAotICAgICAg
ICByZXN1bHQudmFsdWUoKS5nZXQoKS5kaXNwb3NlKCk7Ci0gICAgfSk7CisgICAgY2FjaGUtPmRp
c3Bvc2UoKTsKIH0KIAogU3RyaW5nIEVuZ2luZTo6cmVwcmVzZW50YXRpb24oKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVD
YWNoZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFn
ZUVuZ2luZUNhY2hlLmNwcAppbmRleCA0ODFhZGQ3ZWNjYjFjNWEyNTIzZWVhZjgyYjY2NGI3M2Rm
ZWE2ODVlLi5mNTQyMWFkZTdlNDdjZTc5MDVjMmQwNGU1OTcxNGQxMjkwY2E1YTlhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2lu
ZUNhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hl
U3RvcmFnZUVuZ2luZUNhY2hlLmNwcApAQCAtMjcsMTUgKzI3LDE2IEBACiAjaW5jbHVkZSAiQ2Fj
aGVTdG9yYWdlRW5naW5lLmgiCiAKICNpbmNsdWRlICJDYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMu
aCIKKyNpbmNsdWRlICJOZXR3b3JrQ2FjaGVDb2RlcnMuaCIKICNpbmNsdWRlICJOZXR3b3JrQ2Fj
aGVJT0NoYW5uZWwuaCIKICNpbmNsdWRlICJOZXR3b3JrQ2FjaGVLZXkuaCIKICNpbmNsdWRlICJO
ZXR3b3JrUHJvY2Vzcy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ2FjaGVRdWVyeU9wdGlvbnMuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL0hUVFBQYXJzZXJzLmg+CiAjaW5jbHVkZSA8cGFsL1Nlc3Npb25J
RC5oPgotI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhy
ZWFkLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1VV
SUQuaD4KICNpbmNsdWRlIDx3dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVycy5oPgogI2lu
Y2x1ZGUgPHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RGVjb2Rlci5oPgogI2luY2x1ZGUgPHd0
Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RW5jb2Rlci5oPgpAQCAtNTEsNyArNTIsMTggQEAgbmFt
ZXNwYWNlIFdlYktpdCB7CiAKIG5hbWVzcGFjZSBDYWNoZVN0b3JhZ2UgewogCi1zdGF0aWMgaW5s
aW5lIFZlY3Rvcjx1aW50NjRfdD4gcXVlcnlDYWNoZShjb25zdCBWZWN0b3I8UmVjb3JkRGF0YT4q
IHJlY29yZHMsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgQ2FjaGVRdWVy
eU9wdGlvbnMmIG9wdGlvbnMpCitzdGF0aWMgc3RkOjpvcHRpb25hbDxzdGQ6OnBhaXI8UmVjb3Jk
LCBkb3VibGU+PiBkZWNvZGVSZWNvcmRIZWFkZXIoY29uc3QgU3RvcmFnZTo6UmVjb3JkJik7CisK
K3N0YXRpYyBpbmxpbmUgU3RyaW5nIGNvbXB1dGVLZXlVUkwoY29uc3QgVVJMJiB1cmwpCit7Cisg
ICAgVVJMIGtleVVSTCA9IHVybDsKKyAgICBpZiAoa2V5VVJMLmhhc1F1ZXJ5KCkpCisgICAgICAg
IGtleVVSTC5zZXRRdWVyeSh7IH0pOworICAgIGtleVVSTC5yZW1vdmVGcmFnbWVudElkZW50aWZp
ZXIoKTsKKyAgICByZXR1cm4ga2V5VVJMOworfQorCitzdGF0aWMgaW5saW5lIFZlY3Rvcjx1aW50
NjRfdD4gcXVlcnlDYWNoZShjb25zdCBWZWN0b3I8UmVjb3JkSW5mb3JtYXRpb24+KiByZWNvcmRz
LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IENhY2hlUXVlcnlPcHRpb25z
JiBvcHRpb25zKQogewogICAgIGlmICghcmVjb3JkcykKICAgICAgICAgcmV0dXJuIHsgfTsKQEAg
LTY3LDQ3ICs3OSw0MyBAQCBzdGF0aWMgaW5saW5lIFZlY3Rvcjx1aW50NjRfdD4gcXVlcnlDYWNo
ZShjb25zdCBWZWN0b3I8UmVjb3JkRGF0YT4qIHJlY29yZHMsIGNvbgogICAgIHJldHVybiByZXN1
bHRzOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlVmFyeUluZm9ybWF0aW9uKFJlY29y
ZERhdGEmIHJlY29yZERhdGEpCitzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlVmFyeUluZm9ybWF0
aW9uKFJlY29yZEluZm9ybWF0aW9uJiByZWNvcmRJbmZvcm1hdGlvbiwgY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKIHsKLSAg
ICBhdXRvIHZhcnlWYWx1ZSA9IHJlY29yZERhdGEuZGF0YS0+cmVzcG9uc2UuaHR0cEhlYWRlckZp
ZWxkKFdlYkNvcmU6OkhUVFBIZWFkZXJOYW1lOjpWYXJ5KTsKKyAgICBhdXRvIHZhcnlWYWx1ZSA9
IHJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZChXZWJDb3JlOjpIVFRQSGVhZGVyTmFtZTo6VmFyeSk7
CiAgICAgaWYgKHZhcnlWYWx1ZS5pc051bGwoKSkgewotICAgICAgICByZWNvcmREYXRhLmhhc1Zh
cnlTdGFyID0gZmFsc2U7Ci0gICAgICAgIHJlY29yZERhdGEudmFyeUhlYWRlcnMgPSB7IH07Cisg
ICAgICAgIHJlY29yZEluZm9ybWF0aW9uLmhhc1ZhcnlTdGFyID0gZmFsc2U7CisgICAgICAgIHJl
Y29yZEluZm9ybWF0aW9uLnZhcnlIZWFkZXJzID0geyB9OwogICAgICAgICByZXR1cm47CiAgICAg
fQogCiAgICAgdmFyeVZhbHVlLnNwbGl0KCcsJywgZmFsc2UsIFsmXShTdHJpbmdWaWV3IHZpZXcp
IHsKLSAgICAgICAgaWYgKCFyZWNvcmREYXRhLmhhc1ZhcnlTdGFyICYmIHN0cmlwTGVhZGluZ0Fu
ZFRyYWlsaW5nSFRUUFNwYWNlcyh2aWV3KSA9PSAiKiIpCi0gICAgICAgICAgICByZWNvcmREYXRh
Lmhhc1ZhcnlTdGFyID0gdHJ1ZTsKKyAgICAgICAgaWYgKCFyZWNvcmRJbmZvcm1hdGlvbi5oYXNW
YXJ5U3RhciAmJiBzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUVFBTcGFjZXModmlldykgPT0gIioi
KQorICAgICAgICAgICAgcmVjb3JkSW5mb3JtYXRpb24uaGFzVmFyeVN0YXIgPSB0cnVlOwogICAg
ICAgICBTdHJpbmcgaGVhZGVyTmFtZSA9IHZpZXcudG9TdHJpbmcoKTsKLSAgICAgICAgcmVjb3Jk
RGF0YS52YXJ5SGVhZGVycy5hZGQoaGVhZGVyTmFtZSwgcmVjb3JkRGF0YS5kYXRhLT5yZXF1ZXN0
Lmh0dHBIZWFkZXJGaWVsZChoZWFkZXJOYW1lKSk7CisgICAgICAgIHJlY29yZEluZm9ybWF0aW9u
LnZhcnlIZWFkZXJzLmFkZChoZWFkZXJOYW1lLCByZXF1ZXN0Lmh0dHBIZWFkZXJGaWVsZChoZWFk
ZXJOYW1lKSk7CiAgICAgfSk7CiAKLSAgICBpZiAocmVjb3JkRGF0YS5oYXNWYXJ5U3RhcikKLSAg
ICAgICAgcmVjb3JkRGF0YS52YXJ5SGVhZGVycyA9IHsgfTsKKyAgICBpZiAocmVjb3JkSW5mb3Jt
YXRpb24uaGFzVmFyeVN0YXIpCisgICAgICAgIHJlY29yZEluZm9ybWF0aW9uLnZhcnlIZWFkZXJz
ID0geyB9OwogfQogCi1zdGF0aWMgaW5saW5lIFJlY29yZCB0b1JlY29yZChjb25zdCBSZWNvcmRE
YXRhJiByZWNvcmQpCitSZWNvcmRJbmZvcm1hdGlvbiBDYWNoZTo6dG9SZWNvcmRJbmZvcm1hdGlv
bihjb25zdCBSZWNvcmQmIHJlY29yZCkKIHsKLSAgICByZXR1cm4geyByZWNvcmQuaWRlbnRpZmll
ciwgcmVjb3JkLnVwZGF0ZVJlc3BvbnNlQ291bnRlciwgcmVjb3JkLmRhdGEtPnJlcXVlc3RIZWFk
ZXJzR3VhcmQsIHJlY29yZC5kYXRhLT5yZXF1ZXN0LCByZWNvcmQuZGF0YS0+b3B0aW9ucywgcmVj
b3JkLmRhdGEtPnJlZmVycmVyLCByZWNvcmQuZGF0YS0+cmVzcG9uc2VIZWFkZXJzR3VhcmQsIHJl
Y29yZC5kYXRhLT5yZXNwb25zZSwgY29weVJlc3BvbnNlQm9keShyZWNvcmQuZGF0YS0+cmVzcG9u
c2VCb2R5KSB9OwotfQorICAgIGF1dG8gaW5zZXJ0aW9uVGltZSA9IG1vbm90b25pY2FsbHlJbmNy
ZWFzaW5nVGltZU1TKCk7CisgICAgYXV0byBrZXkgPSBLZXkgeyBBU0NJSUxpdGVyYWwoInJlY29y
ZCIpLCBTdHJpbmcgeyBtX3VuaXF1ZU5hbWUgfSwgU3RyaW5nKCksIGNyZWF0ZUNhbm9uaWNhbFVV
SURTdHJpbmcoKSwgbV9jYWNoZXMuc2FsdCgpIH07CiAKLXN0YXRpYyBpbmxpbmUgUmVjb3JkRGF0
YSB0b1JlY29yZERhdGEoUmVjb3JkJiYgcmVjb3JkKQotewotICAgIGF1dG8gdXJsID0gcmVjb3Jk
LnJlcXVlc3QudXJsKCk7Ci0gICAgUmVjb3JkRGF0YTo6RGF0YSBkYXRhID0geyByZWNvcmQucmVx
dWVzdEhlYWRlcnNHdWFyZCwgV1RGTW92ZShyZWNvcmQucmVxdWVzdCksIFdURk1vdmUocmVjb3Jk
Lm9wdGlvbnMpLCBXVEZNb3ZlKHJlY29yZC5yZWZlcnJlciksIFdURk1vdmUocmVjb3JkLnJlc3Bv
bnNlSGVhZGVyc0d1YXJkKSwgV1RGTW92ZShyZWNvcmQucmVzcG9uc2UpLCBXVEZNb3ZlKHJlY29y
ZC5yZXNwb25zZUJvZHkpIH07Ci0gICAgUmVjb3JkRGF0YSByZWNvcmREYXRhID0geyB7IH0sIG1v
bm90b25pY2FsbHlJbmNyZWFzaW5nVGltZU1TKCksIHJlY29yZC5pZGVudGlmaWVyLCAwLCB1cmws
IGZhbHNlLCB7IH0sIFdURk1vdmUoZGF0YSkgfTsKKyAgICBSZWNvcmRJbmZvcm1hdGlvbiByZWNv
cmRJbmZvcm1hdGlvbiA9IHsgV1RGTW92ZShrZXkpLCBpbnNlcnRpb25UaW1lLCByZWNvcmQuaWRl
bnRpZmllciwgMCAsIHJlY29yZC5yZXF1ZXN0LnVybCgpLCBmYWxzZSwgeyB9IH07CisgICAgdXBk
YXRlVmFyeUluZm9ybWF0aW9uKHJlY29yZEluZm9ybWF0aW9uLCByZWNvcmQucmVxdWVzdCwgcmVj
b3JkLnJlc3BvbnNlKTsKIAotICAgIHVwZGF0ZVZhcnlJbmZvcm1hdGlvbihyZWNvcmREYXRhKTsK
LQotICAgIHJldHVybiByZWNvcmREYXRhOworICAgIHJldHVybiByZWNvcmRJbmZvcm1hdGlvbjsK
IH0KIAotQ2FjaGU6OkNhY2hlKENhY2hlcyYgY2FjaGVzLCB1aW50NjRfdCBpZGVudGlmaWVyLCBT
dGF0ZSBzdGF0ZSwgU3RyaW5nJiYgbmFtZSkKK0NhY2hlOjpDYWNoZShDYWNoZXMmIGNhY2hlcywg
dWludDY0X3QgaWRlbnRpZmllciwgU3RhdGUgc3RhdGUsIFN0cmluZyYmIG5hbWUsIFN0cmluZyYm
IHVuaXF1ZU5hbWUpCiAgICAgOiBtX2NhY2hlcyhjYWNoZXMpCiAgICAgLCBtX3N0YXRlKHN0YXRl
KQogICAgICwgbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCiAgICAgLCBtX25hbWUoV1RGTW92ZShu
YW1lKSkKKyAgICAsIG1fdW5pcXVlTmFtZShXVEZNb3ZlKHVuaXF1ZU5hbWUpKQogewogfQogCkBA
IC0xMzQsMTggKzE0Miw1NiBAQCB2b2lkIENhY2hlOjpvcGVuKENvbXBsZXRpb25DYWxsYmFjayYm
IGNhbGxiYWNrKQogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIG1fc3RhdGUgPSBTdGF0ZTo6
T3BlbmluZzsKLSAgICByZWFkUmVjb3Jkc0xpc3QoW2NhY2hlcyA9IG1ha2VSZWYobV9jYWNoZXMp
LCBpZGVudGlmaWVyID0gbV9pZGVudGlmaWVyLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2sp
XShzdGQ6Om9wdGlvbmFsPEVycm9yPiYmIGVycm9yKSBtdXRhYmxlIHsKLSAgICAgICAgYXV0byog
Y2FjaGUgPSBjYWNoZXMtPmZpbmQoaWRlbnRpZmllcik7Ci0gICAgICAgIGlmICghY2FjaGUpIHsK
LSAgICAgICAgICAgIGNhbGxiYWNrKEVycm9yOjpJbnRlcm5hbCk7CisgICAgSGFzaE1hcDxTdHJp
bmcsIFZlY3RvcjxSZWNvcmRJbmZvcm1hdGlvbj4+IHJlY29yZHM7CisgICAgVmVjdG9yPEtleT4g
ZmFpbGVkUmVjb3JkczsKKyAgICB1aW50NjRfdCByZWNvcmRDb3VudCA9IDA7CisgICAgbV9jYWNo
ZXMucmVhZFJlY29yZHNMaXN0KCp0aGlzLCBbY2FjaGVzID0gbWFrZVJlZihtX2NhY2hlcyksIGlk
ZW50aWZpZXIgPSBtX2lkZW50aWZpZXIsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIHJl
Y29yZHMgPSBXVEZNb3ZlKHJlY29yZHMpLCBmYWlsZWRSZWNvcmRzID0gV1RGTW92ZShmYWlsZWRS
ZWNvcmRzKSwgcmVjb3JkQ291bnRdKGNvbnN0IGF1dG8qIHN0b3JhZ2VSZWNvcmQsIGNvbnN0IGF1
dG8mKSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKCFzdG9yYWdlUmVjb3JkKSB7CisgICAgICAgICAg
ICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW2NhY2hlcyA9IFdURk1vdmUoY2FjaGVzKSwgaWRl
bnRpZmllciwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgcmVjb3JkcyA9IFdURk1vdmUo
cmVjb3JkcyksIGZhaWxlZFJlY29yZHMgPSBXVEZNb3ZlKGZhaWxlZFJlY29yZHMpXSgpIG11dGFi
bGUgeworICAgICAgICAgICAgICAgIGZvciAoYXV0byYga2V5IDogZmFpbGVkUmVjb3JkcykKKyAg
ICAgICAgICAgICAgICAgICAgY2FjaGVzLT5yZW1vdmVSZWNvcmQoa2V5KTsKKworICAgICAgICAg
ICAgICAgIGF1dG8qIGNhY2hlID0gY2FjaGVzLT5maW5kKGlkZW50aWZpZXIpOworICAgICAgICAg
ICAgICAgIGlmICghY2FjaGUpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soRXJyb3I6
OkludGVybmFsKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBjYWNoZS0+bV9yZWNvcmRzID0gV1RGTW92ZShyZWNvcmRzKTsK
KyAgICAgICAgICAgICAgICBjYWNoZS0+ZmluaXNoT3BlbmluZyhXVEZNb3ZlKGNhbGxiYWNrKSwg
c3RkOjpudWxsb3B0KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgYXV0byBkZWNvZGVkID0gZGVjb2RlUmVjb3JkSGVhZGVyKCpzdG9y
YWdlUmVjb3JkKTsKKyAgICAgICAgaWYgKCFkZWNvZGVkKSB7CisgICAgICAgICAgICBmYWlsZWRS
ZWNvcmRzLmFwcGVuZChzdG9yYWdlUmVjb3JkLT5rZXkpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9Ci0gICAgICAgIGNhY2hlLT5maW5pc2hPcGVuaW5nKFdURk1vdmUoY2FsbGJhY2sp
LCBXVEZNb3ZlKGVycm9yKSk7CisKKyAgICAgICAgYXV0byYgcmVjb3JkID0gZGVjb2RlZC0+Zmly
c3Q7CisgICAgICAgIGF1dG8gaW5zZXJ0aW9uVGltZSA9IGRlY29kZWQtPnNlY29uZDsKKworICAg
ICAgICBSZWNvcmRJbmZvcm1hdGlvbiByZWNvcmRJbmZvcm1hdGlvbiA9IHsgc3RvcmFnZVJlY29y
ZC0+a2V5LCBpbnNlcnRpb25UaW1lLCAwLCAwLCByZWNvcmQucmVxdWVzdC51cmwoKSwgZmFsc2Us
IHsgfSB9OworICAgICAgICB1cGRhdGVWYXJ5SW5mb3JtYXRpb24ocmVjb3JkSW5mb3JtYXRpb24s
IHJlY29yZC5yZXF1ZXN0LCByZWNvcmQucmVzcG9uc2UpOworCisgICAgICAgIGF1dG8mIHNhbWVV
UkxSZWNvcmRzID0gcmVjb3Jkcy5lbnN1cmUoY29tcHV0ZUtleVVSTChyZWNvcmRJbmZvcm1hdGlv
bi51cmwpLCBbXSB7IHJldHVybiBWZWN0b3I8UmVjb3JkSW5mb3JtYXRpb24+IHsgfTsgfSkuaXRl
cmF0b3ItPnZhbHVlOworICAgICAgICBzYW1lVVJMUmVjb3Jkcy5hcHBlbmQoV1RGTW92ZShyZWNv
cmRJbmZvcm1hdGlvbikpOwogICAgIH0pOwogfQogCiB2b2lkIENhY2hlOjpmaW5pc2hPcGVuaW5n
KENvbXBsZXRpb25DYWxsYmFjayYmIGNhbGxiYWNrLCBzdGQ6Om9wdGlvbmFsPEVycm9yPiYmIGVy
cm9yKQogeworICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlY29yZEluZm9ybWF0
aW9uPj4gcmVjb3JkczsKKyAgICBmb3IgKGF1dG8mIHZhbHVlIDogbV9yZWNvcmRzLnZhbHVlcygp
KSB7CisgICAgICAgIGZvciAoYXV0byYgcmVjb3JkIDogdmFsdWUpCisgICAgICAgICAgICByZWNv
cmRzLmFwcGVuZChyZWNvcmQpOworICAgIH0KKyAgICBzdGQ6OnNvcnQocmVjb3Jkcy5iZWdpbigp
LCByZWNvcmRzLmVuZCgpLCBbJl0oY29uc3QgYXV0byYgYSwgY29uc3QgYXV0byYgYikgeworICAg
ICAgICByZXR1cm4gYS5nZXQoKS5pbnNlcnRpb25UaW1lIDwgYi5nZXQoKS5pbnNlcnRpb25UaW1l
OworICAgIH0pOworICAgIGZvciAoYXV0byYgcmVjb3JkIDogcmVjb3JkcykKKyAgICAgICAgcmVj
b3JkLmdldCgpLmlkZW50aWZpZXIgPSArK21fbmV4dFJlY29yZElkZW50aWZpZXI7CisKICAgICBp
ZiAoZXJyb3IpIHsKICAgICAgICAgbV9zdGF0ZSA9IFN0YXRlOjpVbmluaXRpYWxpemVkOwogICAg
ICAgICBjYWxsYmFjayhlcnJvci52YWx1ZSgpKTsKQEAgLTE2Miw1MiArMjA4LDg5IEBAIHZvaWQg
Q2FjaGU6OmZpbmlzaE9wZW5pbmcoQ29tcGxldGlvbkNhbGxiYWNrJiYgY2FsbGJhY2ssIHN0ZDo6
b3B0aW9uYWw8RXJyb3I+JiYKICAgICAgICAgY2FsbGJhY2soc3RkOjpudWxsb3B0KTsKIH0KIAot
VmVjdG9yPFJlY29yZD4gQ2FjaGU6OnJldHJpZXZlUmVjb3Jkcyhjb25zdCBVUkwmIHVybCkgY29u
c3QKK2NsYXNzIFJlYWRSZWNvcmRUYXNrQ291bnRlciA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291
bnRlZDxSZWFkUmVjb3JkVGFza0NvdW50ZXI+IHsKK3B1YmxpYzoKKyAgICB1c2luZyBSZWFkUmVj
b3Jkc0NhbGxiYWNrID0gV1RGOjpGdW5jdGlvbjx2b2lkKFZlY3RvcjxSZWNvcmQ+JiYsIFZlY3Rv
cjx1aW50NjRfdD4mJik+OworICAgIHN0YXRpYyBSZWZQdHI8UmVhZFJlY29yZFRhc2tDb3VudGVy
PiBjcmVhdGUoUmVhZFJlY29yZHNDYWxsYmFjayYmIGNhbGxiYWNrKSB7IHJldHVybiBhZG9wdFJl
ZihuZXcgUmVhZFJlY29yZFRhc2tDb3VudGVyKFdURk1vdmUoY2FsbGJhY2spKSk7IH0KKworICAg
IH5SZWFkUmVjb3JkVGFza0NvdW50ZXIoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2NhbGxiYWNr
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBzdGQ6OnNvcnQobV9yZWNvcmRzLmJlZ2lu
KCksIG1fcmVjb3Jkcy5lbmQoKSwgWyZdIChjb25zdCBhdXRvJiBhLCBjb25zdCBhdXRvJiBiKSB7
CisgICAgICAgICAgICByZXR1cm4gYS5pZGVudGlmaWVyIDwgYi5pZGVudGlmaWVyOworICAgICAg
ICB9KTsKKyAgICAgICAgbV9jYWxsYmFjayhXVEZNb3ZlKG1fcmVjb3JkcyksIFdURk1vdmUobV9m
YWlsZWRSZWNvcmRzKSk7CisgICAgfQorCisgICAgdm9pZCBhcHBlbmRSZWNvcmQoRXhwZWN0ZWQ8
UmVjb3JkLCBFcnJvcj4mJiByZXN1bHQsIHVpbnQ2NF90IHJlY29yZElkZW50aWZpZXIsIHVpbnQ2
NF90IHVwZGF0ZUNvdW50ZXIpCisgICAgeworICAgICAgICBpZiAoIXJlc3VsdC5oYXNWYWx1ZSgp
KSB7CisgICAgICAgICAgICBtX2ZhaWxlZFJlY29yZHMuYXBwZW5kKHJlY29yZElkZW50aWZpZXIp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHJlc3VsdC52YWx1ZSgp
LmlkZW50aWZpZXIgPSByZWNvcmRJZGVudGlmaWVyOworICAgICAgICByZXN1bHQudmFsdWUoKS51
cGRhdGVSZXNwb25zZUNvdW50ZXIgPSB1cGRhdGVDb3VudGVyOworICAgICAgICBtX3JlY29yZHMu
YXBwZW5kKFdURk1vdmUocmVzdWx0LnZhbHVlKCkpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAg
ZXhwbGljaXQgUmVhZFJlY29yZFRhc2tDb3VudGVyKFJlYWRSZWNvcmRzQ2FsbGJhY2smJiBjYWxs
YmFjaykgOiBtX2NhbGxiYWNrKFdURk1vdmUoY2FsbGJhY2spKSB7IH0KKworICAgIFJlYWRSZWNv
cmRzQ2FsbGJhY2sgbV9jYWxsYmFjazsKKyAgICBWZWN0b3I8UmVjb3JkPiBtX3JlY29yZHM7Cisg
ICAgVmVjdG9yPHVpbnQ2NF90PiBtX2ZhaWxlZFJlY29yZHM7Cit9OworCit2b2lkIENhY2hlOjpy
ZXRyaWV2ZVJlY29yZChjb25zdCBSZWNvcmRJbmZvcm1hdGlvbiYgcmVjb3JkLCBSZWZQdHI8UmVh
ZFJlY29yZFRhc2tDb3VudGVyPiYgdGFza0NvdW50ZXIpCit7CisgICAgcmVhZFJlY29yZEZyb21E
aXNrKHJlY29yZCwgW2NhY2hlcyA9IG1ha2VSZWYobV9jYWNoZXMpLCBpZGVudGlmaWVyID0gbV9p
ZGVudGlmaWVyLCByZWNvcmRJZGVudGlmaWVyID0gcmVjb3JkLmlkZW50aWZpZXIsIHVwZGF0ZUNv
dW50ZXIgPSByZWNvcmQudXBkYXRlUmVzcG9uc2VDb3VudGVyLCB0YXNrQ291bnRlcl0oRXhwZWN0
ZWQ8UmVjb3JkLCBFcnJvcj4mJiByZXN1bHQpIG11dGFibGUgeworICAgICAgICBhdXRvKiBjYWNo
ZSA9IGNhY2hlcy0+ZmluZChpZGVudGlmaWVyKTsKKyAgICAgICAgaWYgKCFjYWNoZSkKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgdGFza0NvdW50ZXItPmFwcGVuZFJlY29yZChXVEZNb3Zl
KHJlc3VsdCksIHJlY29yZElkZW50aWZpZXIsIHVwZGF0ZUNvdW50ZXIpOworICAgIH0pOworfQor
Cit2b2lkIENhY2hlOjpyZXRyaWV2ZVJlY29yZHMoY29uc3QgVVJMJiB1cmwsIFJlY29yZHNDYWxs
YmFjayYmIGNhbGxiYWNrKQogeworICAgIEFTU0VSVChtX3N0YXRlID09IFN0YXRlOjpPcGVuKTsK
KworICAgIGF1dG8gdGFza0NvdW50ZXIgPSBSZWFkUmVjb3JkVGFza0NvdW50ZXI6OmNyZWF0ZShb
Y2FjaGVzID0gbWFrZVJlZihtX2NhY2hlcyksIGlkZW50aWZpZXIgPSBtX2lkZW50aWZpZXIsIGNh
bGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKFZlY3RvcjxSZWNvcmQ+JiYgcmVjb3JkcywgVmVj
dG9yPHVpbnQ2NF90PiYmIGZhaWxlZFJlY29yZElkZW50aWZpZXJzKSBtdXRhYmxlIHsKKyAgICAg
ICAgYXV0byogY2FjaGUgPSBjYWNoZXMtPmZpbmQoaWRlbnRpZmllcik7CisgICAgICAgIGlmIChj
YWNoZSkKKyAgICAgICAgICAgIGNhY2hlLT5yZW1vdmVGcm9tUmVjb3JkTGlzdChmYWlsZWRSZWNv
cmRJZGVudGlmaWVycyk7CisgICAgICAgIGNhbGxiYWNrKFdURk1vdmUocmVjb3JkcykpOworICAg
IH0pOworCiAgICAgaWYgKHVybC5pc051bGwoKSkgewotICAgICAgICBWZWN0b3I8UmVjb3JkPiBy
ZXN1bHQ7CiAgICAgICAgIGZvciAoYXV0byYgcmVjb3JkcyA6IG1fcmVjb3Jkcy52YWx1ZXMoKSkg
ewogICAgICAgICAgICAgZm9yIChhdXRvJiByZWNvcmQgOiByZWNvcmRzKQotICAgICAgICAgICAg
ICAgIHJlc3VsdC5hcHBlbmQodG9SZWNvcmQocmVjb3JkKSk7CisgICAgICAgICAgICAgICAgcmV0
cmlldmVSZWNvcmQocmVjb3JkLCB0YXNrQ291bnRlcik7CiAgICAgICAgIH0KLSAgICAgICAgc3Rk
Ojpzb3J0KHJlc3VsdC5iZWdpbigpLCByZXN1bHQuZW5kKCksIFtdKGNvbnN0IGF1dG8mIGEsIGNv
bnN0IGF1dG8mIGIpIHsKLSAgICAgICAgICAgIHJldHVybiBhLmlkZW50aWZpZXIgPCBiLmlkZW50
aWZpZXI7Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgY29uc3QgYXV0byogcmVjb3JkcyA9IHJlY29yZHNGcm9tVVJMKHVy
bCk7CisgICAgYXV0byogcmVjb3JkcyA9IHJlY29yZHNGcm9tVVJMKHVybCk7CiAgICAgaWYgKCFy
ZWNvcmRzKQotICAgICAgICByZXR1cm4geyB9OworICAgICAgICByZXR1cm47CiAKLSAgICBWZWN0
b3I8UmVjb3JkPiByZXN1bHQ7Ci0gICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocmVj
b3Jkcy0+c2l6ZSgpKTsKICAgICBmb3IgKGF1dG8mIHJlY29yZCA6ICpyZWNvcmRzKQotICAgICAg
ICByZXN1bHQuYXBwZW5kKHRvUmVjb3JkKHJlY29yZCkpOwotICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgICAgIHJldHJpZXZlUmVjb3JkKHJlY29yZCwgdGFza0NvdW50ZXIpOwogfQogCi1zdGF0aWMg
aW5saW5lIFN0cmluZyBjb21wdXRlS2V5VVJMKGNvbnN0IFVSTCYgdXJsKQotewotICAgIFVSTCBr
ZXlVUkwgPSB1cmw7Ci0gICAgaWYgKGtleVVSTC5oYXNRdWVyeSgpKQotICAgICAgICBrZXlVUkwu
c2V0UXVlcnkoeyB9KTsKLSAgICBrZXlVUkwucmVtb3ZlRnJhZ21lbnRJZGVudGlmaWVyKCk7Ci0g
ICAgcmV0dXJuIGtleVVSTDsKLX0KLQotUmVjb3JkRGF0YSYgQ2FjaGU6OmFkZFJlY29yZChWZWN0
b3I8UmVjb3JkRGF0YT4qIHJlY29yZHMsIFJlY29yZCYmIHJlY29yZCkKK1JlY29yZEluZm9ybWF0
aW9uJiBDYWNoZTo6YWRkUmVjb3JkKFZlY3RvcjxSZWNvcmRJbmZvcm1hdGlvbj4qIHJlY29yZHMs
IGNvbnN0IFJlY29yZCYgcmVjb3JkKQogewogICAgIGlmICghcmVjb3JkcykgewogICAgICAgICBh
dXRvIGtleSA9IGNvbXB1dGVLZXlVUkwocmVjb3JkLnJlcXVlc3QudXJsKCkpOwogICAgICAgICBB
U1NFUlQoIW1fcmVjb3Jkcy5jb250YWlucyhrZXkpKTsKLSAgICAgICAgcmVjb3JkcyA9ICZtX3Jl
Y29yZHMuc2V0KGtleSwgVmVjdG9yPFJlY29yZERhdGE+IHsgfSkuaXRlcmF0b3ItPnZhbHVlOwor
ICAgICAgICByZWNvcmRzID0gJm1fcmVjb3Jkcy5zZXQoa2V5LCBWZWN0b3I8UmVjb3JkSW5mb3Jt
YXRpb24+IHsgfSkuaXRlcmF0b3ItPnZhbHVlOwogICAgIH0KLSAgICByZWNvcmRzLT5hcHBlbmQo
dG9SZWNvcmREYXRhKFdURk1vdmUocmVjb3JkKSkpOworICAgIHJlY29yZHMtPmFwcGVuZCh0b1Jl
Y29yZEluZm9ybWF0aW9uKHJlY29yZCkpOwogICAgIHJldHVybiByZWNvcmRzLT5sYXN0KCk7CiB9
CiAKLVZlY3RvcjxSZWNvcmREYXRhPiogQ2FjaGU6OnJlY29yZHNGcm9tVVJMKGNvbnN0IFVSTCYg
dXJsKQorVmVjdG9yPFJlY29yZEluZm9ybWF0aW9uPiogQ2FjaGU6OnJlY29yZHNGcm9tVVJMKGNv
bnN0IFVSTCYgdXJsKQogewogICAgIGF1dG8gaXRlcmF0b3IgPSBtX3JlY29yZHMuZmluZChjb21w
dXRlS2V5VVJMKHVybCkpOwogICAgIGlmIChpdGVyYXRvciA9PSBtX3JlY29yZHMuZW5kKCkpCkBA
IC0yMTUsNyArMjk4LDcgQEAgVmVjdG9yPFJlY29yZERhdGE+KiBDYWNoZTo6cmVjb3Jkc0Zyb21V
UkwoY29uc3QgVVJMJiB1cmwpCiAgICAgcmV0dXJuICZpdGVyYXRvci0+dmFsdWU7CiB9CiAKLWNv
bnN0IFZlY3RvcjxSZWNvcmREYXRhPiogQ2FjaGU6OnJlY29yZHNGcm9tVVJMKGNvbnN0IFVSTCYg
dXJsKSBjb25zdAorY29uc3QgVmVjdG9yPFJlY29yZEluZm9ybWF0aW9uPiogQ2FjaGU6OnJlY29y
ZHNGcm9tVVJMKGNvbnN0IFVSTCYgdXJsKSBjb25zdAogewogICAgIGF1dG8gaXRlcmF0b3IgPSBt
X3JlY29yZHMuZmluZChjb21wdXRlS2V5VVJMKHVybCkpOwogICAgIGlmIChpdGVyYXRvciA9PSBt
X3JlY29yZHMuZW5kKCkpCkBAIC0yMjMsOSArMzA2LDMwIEBAIGNvbnN0IFZlY3RvcjxSZWNvcmRE
YXRhPiogQ2FjaGU6OnJlY29yZHNGcm9tVVJMKGNvbnN0IFVSTCYgdXJsKSBjb25zdAogICAgIHJl
dHVybiAmaXRlcmF0b3ItPnZhbHVlOwogfQogCitjbGFzcyBBc3luY2hyb25vdXNQdXRUYXNrQ291
bnRlciA6IHB1YmxpYyBSZWZDb3VudGVkPEFzeW5jaHJvbm91c1B1dFRhc2tDb3VudGVyPiB7Citw
dWJsaWM6CisgICAgc3RhdGljIFJlZlB0cjxBc3luY2hyb25vdXNQdXRUYXNrQ291bnRlcj4gY3Jl
YXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IEFzeW5jaHJvbm91c1B1dFRhc2tDb3VudGVyKCkp
OyB9CisgICAgfkFzeW5jaHJvbm91c1B1dFRhc2tDb3VudGVyKCkKKyAgICB7CisgICAgICAgIGlm
ICghbV9jYWxsYmFjaykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV9jYWxsYmFjayhX
VEZNb3ZlKG1fZXJyb3IpKTsKKyAgICB9CisKKyAgICB2b2lkIG9uQ29tcGxldGlvbihDb21wbGV0
aW9uQ2FsbGJhY2smJiBjYWxsYmFjaykgeyBtX2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayk7
IH0KKyAgICB2b2lkIHNldEVycm9yKEVycm9yIGVycm9yKSB7IG1fZXJyb3IgPSBlcnJvcjsgfQor
Citwcml2YXRlOgorICAgIHN0ZDo6b3B0aW9uYWw8RXJyb3I+IG1fZXJyb3I7CisgICAgQ29tcGxl
dGlvbkNhbGxiYWNrIG1fY2FsbGJhY2s7Cit9OworCiB2b2lkIENhY2hlOjpwdXQoVmVjdG9yPFJl
Y29yZD4mJiByZWNvcmRzLCBSZWNvcmRJZGVudGlmaWVyc0NhbGxiYWNrJiYgY2FsbGJhY2spCiB7
Ci0gICAgYm9vbCBzaG91bGRXcml0ZVJlY29yZExpc3QgeyBmYWxzZSB9OworICAgIEFTU0VSVCht
X3N0YXRlID09IFN0YXRlOjpPcGVuKTsKKworICAgIGF1dG8gdGFza0NvdW50ZXIgPSBBc3luY2hy
b25vdXNQdXRUYXNrQ291bnRlcjo6Y3JlYXRlKCk7CisKICAgICBXZWJDb3JlOjpDYWNoZVF1ZXJ5
T3B0aW9ucyBvcHRpb25zOwogICAgIFZlY3Rvcjx1aW50NjRfdD4gcmVjb3JkSWRlbnRpZmllcnM7
CiAgICAgcmVjb3JkSWRlbnRpZmllcnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShyZWNvcmRzLnNp
emUoKSk7CkBAIC0yMzcsMzQgKzM0MSwyMSBAQCB2b2lkIENhY2hlOjpwdXQoVmVjdG9yPFJlY29y
ZD4mJiByZWNvcmRzLCBSZWNvcmRJZGVudGlmaWVyc0NhbGxiYWNrJiYgY2FsbGJhY2spCiAgICAg
ICAgICAgICByZWNvcmQuaWRlbnRpZmllciA9ICsrbV9uZXh0UmVjb3JkSWRlbnRpZmllcjsKICAg
ICAgICAgICAgIHJlY29yZElkZW50aWZpZXJzLnVuY2hlY2tlZEFwcGVuZChyZWNvcmQuaWRlbnRp
Zmllcik7CiAKLSAgICAgICAgICAgIHNob3VsZFdyaXRlUmVjb3JkTGlzdCA9IHRydWU7Ci0gICAg
ICAgICAgICBhdXRvJiByZWNvcmRUb1dyaXRlID0gYWRkUmVjb3JkKHNhbWVVUkxSZWNvcmRzLCBX
VEZNb3ZlKHJlY29yZCkpOwotICAgICAgICAgICAgd3JpdGVSZWNvcmRUb0Rpc2socmVjb3JkVG9X
cml0ZSk7CisgICAgICAgICAgICBhdXRvJiByZWNvcmRUb1dyaXRlID0gYWRkUmVjb3JkKHNhbWVV
UkxSZWNvcmRzLCByZWNvcmQpOworICAgICAgICAgICAgd3JpdGVSZWNvcmRUb0Rpc2socmVjb3Jk
VG9Xcml0ZSwgV1RGTW92ZShyZWNvcmQpLCB0YXNrQ291bnRlcik7CiAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICBhdXRvIGlkZW50aWZpZXIgPSBtYXRjaGluZ1JlY29yZHNbMF07CiAgICAg
ICAgICAgICBhdXRvIHBvc2l0aW9uID0gc2FtZVVSTFJlY29yZHMtPmZpbmRNYXRjaGluZyhbJl0o
Y29uc3QgYXV0byYgaXRlbSkgeyByZXR1cm4gaXRlbS5pZGVudGlmaWVyID09IGlkZW50aWZpZXI7
IH0pOwogICAgICAgICAgICAgQVNTRVJUKHBvc2l0aW9uICE9IG5vdEZvdW5kKTsKICAgICAgICAg
ICAgIGlmIChwb3NpdGlvbiAhPSBub3RGb3VuZCkgewotICAgICAgICAgICAgICAgIGF1dG8mIGV4
aXN0aW5nUmVjb3JkID0gKCpzYW1lVVJMUmVjb3JkcylbcG9zaXRpb25dOworICAgICAgICAgICAg
ICAgIGF1dG8mIGV4aXN0aW5nUmVjb3JkID0gc2FtZVVSTFJlY29yZHMtPmF0KHBvc2l0aW9uKTsK
ICAgICAgICAgICAgICAgICByZWNvcmRJZGVudGlmaWVycy51bmNoZWNrZWRBcHBlbmQoaWRlbnRp
Zmllcik7Ci0gICAgICAgICAgICAgICAgKytleGlzdGluZ1JlY29yZC51cGRhdGVSZXNwb25zZUNv
dW50ZXI7Ci0KLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogSGFuZGxlIHRoZSBjYXNlIHdoZXJl
IGRhdGEgaXMgbnVsbC4KLSAgICAgICAgICAgICAgICBBU1NFUlQoZXhpc3RpbmdSZWNvcmQuZGF0
YSk7Ci0gICAgICAgICAgICAgICAgZXhpc3RpbmdSZWNvcmQuZGF0YS0+cmVzcG9uc2VIZWFkZXJz
R3VhcmQgPSByZWNvcmQucmVzcG9uc2VIZWFkZXJzR3VhcmQ7Ci0gICAgICAgICAgICAgICAgZXhp
c3RpbmdSZWNvcmQuZGF0YS0+cmVzcG9uc2UgPSBXVEZNb3ZlKHJlY29yZC5yZXNwb25zZSk7Ci0g
ICAgICAgICAgICAgICAgZXhpc3RpbmdSZWNvcmQuZGF0YS0+cmVzcG9uc2VCb2R5ID0gV1RGTW92
ZShyZWNvcmQucmVzcG9uc2VCb2R5KTsKLSAgICAgICAgICAgICAgICB1cGRhdGVWYXJ5SW5mb3Jt
YXRpb24oZXhpc3RpbmdSZWNvcmQpOwotICAgICAgICAgICAgICAgIHdyaXRlUmVjb3JkVG9EaXNr
KGV4aXN0aW5nUmVjb3JkKTsKKyAgICAgICAgICAgICAgICB1cGRhdGVSZWNvcmRUb0Rpc2soZXhp
c3RpbmdSZWNvcmQsIFdURk1vdmUocmVjb3JkKSwgdGFza0NvdW50ZXIpOwogICAgICAgICAgICAg
fQogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKCFzaG91bGRXcml0ZVJlY29yZExpc3QpIHsK
LSAgICAgICAgY2FsbGJhY2soV1RGTW92ZShyZWNvcmRJZGVudGlmaWVycykpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIHdyaXRlUmVjb3Jkc0xpc3QoW2NhbGxiYWNrID0gV1RGTW92ZShj
YWxsYmFjayksIHJlY29yZElkZW50aWZpZXJzID0gV1RGTW92ZShyZWNvcmRJZGVudGlmaWVycyld
KHN0ZDo6b3B0aW9uYWw8RXJyb3I+JiYgZXJyb3IpIG11dGFibGUgeworICAgIHRhc2tDb3VudGVy
LT5vbkNvbXBsZXRpb24oW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIHJlY29yZElkZW50
aWZpZXJzID0gV1RGTW92ZShyZWNvcmRJZGVudGlmaWVycyldKHN0ZDo6b3B0aW9uYWw8RXJyb3I+
JiYgZXJyb3IpIG11dGFibGUgewogICAgICAgICBpZiAoZXJyb3IpIHsKICAgICAgICAgICAgIGNh
bGxiYWNrKG1ha2VVbmV4cGVjdGVkKGVycm9yLnZhbHVlKCkpKTsKICAgICAgICAgICAgIHJldHVy
bjsKQEAgLTI3NSw2ICszNjYsOCBAQCB2b2lkIENhY2hlOjpwdXQoVmVjdG9yPFJlY29yZD4mJiBy
ZWNvcmRzLCBSZWNvcmRJZGVudGlmaWVyc0NhbGxiYWNrJiYgY2FsbGJhY2spCiAKIHZvaWQgQ2Fj
aGU6OnJlbW92ZShXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJiByZXF1ZXN0LCBXZWJDb3JlOjpD
YWNoZVF1ZXJ5T3B0aW9ucyYmIG9wdGlvbnMsIFJlY29yZElkZW50aWZpZXJzQ2FsbGJhY2smJiBj
YWxsYmFjaykKIHsKKyAgICBBU1NFUlQobV9zdGF0ZSA9PSBTdGF0ZTo6T3Blbik7CisKICAgICBh
dXRvKiByZWNvcmRzID0gcmVjb3Jkc0Zyb21VUkwocmVxdWVzdC51cmwoKSk7CiAgICAgYXV0byBy
ZWNvcmRJZGVudGlmaWVycyA9IHF1ZXJ5Q2FjaGUocmVjb3JkcywgcmVxdWVzdCwgb3B0aW9ucyk7
CiAgICAgaWYgKHJlY29yZElkZW50aWZpZXJzLmlzRW1wdHkoKSkgewpAQCAtMjg5LDM1ICszODIs
MTUzIEBAIHZvaWQgQ2FjaGU6OnJlbW92ZShXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJiByZXF1
ZXN0LCBXZWJDb3JlOjpDYWNoZVF1ZXJ5T3B0aW9uCiAgICAgICAgIHJldHVybiBzaG91bGRSZW1v
dmU7CiAgICAgfSk7CiAKLSAgICB3cml0ZVJlY29yZHNMaXN0KFtjYWxsYmFjayA9IFdURk1vdmUo
Y2FsbGJhY2spLCByZWNvcmRJZGVudGlmaWVycyA9IFdURk1vdmUocmVjb3JkSWRlbnRpZmllcnMp
XShzdGQ6Om9wdGlvbmFsPEVycm9yPiYmIGVycm9yKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKGVy
cm9yKSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhtYWtlVW5leHBlY3RlZChlcnJvci52YWx1ZSgp
KSk7CisgICAgY2FsbGJhY2soV1RGTW92ZShyZWNvcmRJZGVudGlmaWVycykpOworfQorCit2b2lk
IENhY2hlOjpyZW1vdmVGcm9tUmVjb3JkTGlzdChjb25zdCBWZWN0b3I8dWludDY0X3Q+JiByZWNv
cmRJZGVudGlmaWVycykKK3sKKyAgICBmb3IgKGF1dG8mIHJlY29yZHMgOiBtX3JlY29yZHMudmFs
dWVzKCkpIHsKKyAgICAgICAgcmVjb3Jkcy5yZW1vdmVBbGxNYXRjaGluZyhbJl0oY29uc3QgYXV0
byYgaXRlbSkgeworICAgICAgICAgICAgcmV0dXJuIG5vdEZvdW5kICE9IHJlY29yZElkZW50aWZp
ZXJzLmZpbmRNYXRjaGluZyhbJl0oY29uc3QgYXV0byYgaWRlbnRpZmllcikgeworICAgICAgICAg
ICAgICAgIGlmIChpdGVtLmlkZW50aWZpZXIgIT0gaWRlbnRpZmllcikKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIHJlbW92ZVJlY29yZEZyb21EaXNr
KGl0ZW0pOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfSk7Cisg
ICAgICAgIH0pOworICAgIH0KK30KKwordm9pZCBDYWNoZTo6d3JpdGVSZWNvcmRUb0Rpc2soY29u
c3QgUmVjb3JkSW5mb3JtYXRpb24mIHJlY29yZEluZm9ybWF0aW9uLCBSZWNvcmQmJiByZWNvcmQs
IGNvbnN0IFJlZlB0cjxBc3luY2hyb25vdXNQdXRUYXNrQ291bnRlcj4mIGNvdW50ZXIpCit7Cisg
ICAgbV9jYWNoZXMud3JpdGVSZWNvcmQoKnRoaXMsIHJlY29yZEluZm9ybWF0aW9uLCBXVEZNb3Zl
KHJlY29yZCksIFtjb3VudGVyXShzdGQ6Om9wdGlvbmFsPEVycm9yPiYmIGVycm9yKSB7CisgICAg
ICAgIEFTU0VSVCghZXJyb3IpOworICAgIH0pOworfQorCit2b2lkIENhY2hlOjp1cGRhdGVSZWNv
cmRUb0Rpc2soUmVjb3JkSW5mb3JtYXRpb24mIGV4aXN0aW5nUmVjb3JkLCBSZWNvcmQmJiByZWNv
cmQsIGNvbnN0IFJlZlB0cjxBc3luY2hyb25vdXNQdXRUYXNrQ291bnRlcj4mIHRhc2tDb3VudGVy
KQoreworICAgICsrZXhpc3RpbmdSZWNvcmQudXBkYXRlUmVzcG9uc2VDb3VudGVyOworICAgIHJl
YWRSZWNvcmRGcm9tRGlzayhleGlzdGluZ1JlY29yZCwgW2NhY2hlcyA9IG1ha2VSZWYobV9jYWNo
ZXMpLCBpZGVudGlmaWVyID0gbV9pZGVudGlmaWVyLCByZWNvcmRJZGVudGlmaWVyID0gZXhpc3Rp
bmdSZWNvcmQuaWRlbnRpZmllciwgcmVjb3JkID0gV1RGTW92ZShyZWNvcmQpLCB0YXNrQ291bnRl
cl0oRXhwZWN0ZWQ8UmVjb3JkLCBFcnJvcj4mJiByZXN1bHQpIG11dGFibGUgeworICAgICAgICBp
ZiAoIXJlc3VsdC5oYXNWYWx1ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g
ICAgICAgIGNhbGxiYWNrKFdURk1vdmUocmVjb3JkSWRlbnRpZmllcnMpKTsKKworICAgICAgICBh
dXRvKiBjYWNoZSA9IGNhY2hlcy0+ZmluZChpZGVudGlmaWVyKTsKKyAgICAgICAgaWYgKCFjYWNo
ZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBhdXRvKiBzYW1lVVJMUmVjb3JkcyA9
IGNhY2hlLT5yZWNvcmRzRnJvbVVSTChyZXN1bHQudmFsdWUoKS5yZXF1ZXN0LnVybCgpKTsKKyAg
ICAgICAgaWYgKCFzYW1lVVJMUmVjb3JkcykKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICBhdXRvIHBvc2l0aW9uID0gc2FtZVVSTFJlY29yZHMtPmZpbmRNYXRjaGluZyhbJl0gKGNvbnN0
IGF1dG8mIGl0ZW0pIHsgcmV0dXJuIGl0ZW0uaWRlbnRpZmllciA9PSByZWNvcmRJZGVudGlmaWVy
OyB9KTsKKyAgICAgICAgaWYgKHBvc2l0aW9uID09IG5vdEZvdW5kKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBhdXRvJiByZWNvcmRJbmZvID0gc2FtZVVSTFJlY29yZHMtPmF0KHBvc2l0
aW9uKTsKKworICAgICAgICBhdXRvJiByZWNvcmRGcm9tRGlzayA9IHJlc3VsdC52YWx1ZSgpOwor
ICAgICAgICByZWNvcmQucmVxdWVzdEhlYWRlcnNHdWFyZCA9IHJlY29yZEZyb21EaXNrLnJlcXVl
c3RIZWFkZXJzR3VhcmQ7CisgICAgICAgIHJlY29yZC5yZXF1ZXN0ID0gV1RGTW92ZShyZWNvcmRG
cm9tRGlzay5yZXF1ZXN0KTsKKyAgICAgICAgcmVjb3JkLm9wdGlvbnMgPSBXVEZNb3ZlKHJlY29y
ZEZyb21EaXNrLm9wdGlvbnMpOworICAgICAgICByZWNvcmQucmVmZXJyZXIgPSBXVEZNb3ZlKHJl
Y29yZEZyb21EaXNrLnJlZmVycmVyKTsKKworICAgICAgICB1cGRhdGVWYXJ5SW5mb3JtYXRpb24o
cmVjb3JkSW5mbywgcmVjb3JkLnJlcXVlc3QsIHJlY29yZC5yZXNwb25zZSk7CisKKyAgICAgICAg
Y2FjaGUtPndyaXRlUmVjb3JkVG9EaXNrKHJlY29yZEluZm8sIFdURk1vdmUocmVjb3JkKSwgdGFz
a0NvdW50ZXIpOwogICAgIH0pOwogfQogCi12b2lkIENhY2hlOjpyZWFkUmVjb3Jkc0xpc3QoQ29t
cGxldGlvbkNhbGxiYWNrJiYgY2FsbGJhY2spCit2b2lkIENhY2hlOjpyZWFkUmVjb3JkRnJvbURp
c2soY29uc3QgUmVjb3JkSW5mb3JtYXRpb24mIHJlY29yZCwgV1RGOjpGdW5jdGlvbjx2b2lkKEV4
cGVjdGVkPFJlY29yZCwgRXJyb3I+JiYpPiYmIGNhbGxiYWNrKQogewotICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQgdGhpcy4KLSAgICBjYWxsYmFjayhzdGQ6Om51bGxvcHQpOworICAgIG1fY2FjaGVz
LnJlYWRSZWNvcmQocmVjb3JkLmtleSwgV1RGTW92ZShjYWxsYmFjaykpOwogfQogCi12b2lkIENh
Y2hlOjp3cml0ZVJlY29yZHNMaXN0KENvbXBsZXRpb25DYWxsYmFjayYmIGNhbGxiYWNrKQordm9p
ZCBDYWNoZTo6cmVtb3ZlUmVjb3JkRnJvbURpc2soY29uc3QgUmVjb3JkSW5mb3JtYXRpb24mIHJl
Y29yZCkKIHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCi0gICAgY2FsbGJhY2soc3Rk
OjpudWxsb3B0KTsKKyAgICBtX2NhY2hlcy5yZW1vdmVSZWNvcmQocmVjb3JkLmtleSk7Cit9CisK
K1N0b3JhZ2U6OlJlY29yZCBDYWNoZTo6ZW5jb2RlKGNvbnN0IFJlY29yZEluZm9ybWF0aW9uJiBy
ZWNvcmRJbmZvcm1hdGlvbiwgY29uc3QgUmVjb3JkJiByZWNvcmQpCit7CisgICAgV1RGOjpQZXJz
aXN0ZW5jZTo6RW5jb2RlciBlbmNvZGVyOworICAgIGVuY29kZXIgPDwgcmVjb3JkSW5mb3JtYXRp
b24uaW5zZXJ0aW9uVGltZTsKKyAgICBlbmNvZGVyIDw8IHJlY29yZC5yZXF1ZXN0SGVhZGVyc0d1
YXJkOworICAgIHJlY29yZC5yZXF1ZXN0LmVuY29kZVdpdGhvdXRQbGF0Zm9ybURhdGEoZW5jb2Rl
cik7CisgICAgZW5jb2RlciA8PCByZWNvcmQub3B0aW9uczsKKyAgICBlbmNvZGVyIDw8IHJlY29y
ZC5yZWZlcnJlcjsKKworICAgIGVuY29kZXIgPDwgcmVjb3JkLnJlc3BvbnNlSGVhZGVyc0d1YXJk
OworICAgIGVuY29kZXIgPDwgcmVjb3JkLnJlc3BvbnNlOworCisgICAgZW5jb2Rlci5lbmNvZGVD
aGVja3N1bSgpOworCisgICAgRGF0YSBoZWFkZXIoZW5jb2Rlci5idWZmZXIoKSwgZW5jb2Rlci5i
dWZmZXJTaXplKCkpOworICAgIERhdGEgYm9keTsKKyAgICBXVEY6OnN3aXRjaE9uKHJlY29yZC5y
ZXNwb25zZUJvZHksIFtdKGNvbnN0IFJlZjxXZWJDb3JlOjpGb3JtRGF0YT4mIGZvcm1EYXRhKSB7
CisgICAgICAgIC8vIEZJWE1FOiBTdG9yZSBmb3JtIGRhdGEgYm9keS4KKyAgICB9LCBbJl0oY29u
c3QgUmVmPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4mIGJ1ZmZlcikgeworICAgICAgICBib2R5ID0g
eyByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihidWZmZXItPmRhdGEoKSksIGJ1ZmZl
ci0+c2l6ZSgpIH07CisgICAgfSwgW10oY29uc3Qgc3RkOjpudWxscHRyX3QmKSB7CisgICAgfSk7
CisKKyAgICByZXR1cm4geyByZWNvcmRJbmZvcm1hdGlvbi5rZXksIHsgfSwgaGVhZGVyLCBib2R5
LCB7IH0gfTsKK30KKworc3RhdGljIGlubGluZSBzdGQ6Om9wdGlvbmFsPHN0ZDo6cGFpcjxSZWNv
cmQsIGRvdWJsZT4+IGRlY29kZVJlY29yZEhlYWRlcihjb25zdCBTdG9yYWdlOjpSZWNvcmQmIHN0
b3JhZ2UpCit7CisgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKHN0b3JhZ2Uu
aGVhZGVyLmRhdGEoKSwgc3RvcmFnZS5oZWFkZXIuc2l6ZSgpKTsKKworICAgIFJlY29yZCByZWNv
cmQ7CisKKyAgICBkb3VibGUgaW5zZXJ0aW9uVGltZTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KGluc2VydGlvblRpbWUpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgaWYg
KCFkZWNvZGVyLmRlY29kZShyZWNvcmQucmVxdWVzdEhlYWRlcnNHdWFyZCkpCisgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBpZiAoIXJlY29yZC5yZXF1ZXN0LmRlY29kZVdpdGhv
dXRQbGF0Zm9ybURhdGEoZGVjb2RlcikpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisK
KyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlY29yZC5vcHRpb25zKSkKKyAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVjb3JkLnJlZmVycmVy
KSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUocmVjb3JkLnJlc3BvbnNlSGVhZGVyc0d1YXJkKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVjb3JkLnJlc3BvbnNlKSkKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGlmICghZGVjb2Rlci52ZXJpZnlDaGVja3N1
bSgpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIHN0ZDo6bWFr
ZV9wYWlyKFdURk1vdmUocmVjb3JkKSwgaW5zZXJ0aW9uVGltZSk7CiB9CiAKLXZvaWQgQ2FjaGU6
OndyaXRlUmVjb3JkVG9EaXNrKFJlY29yZERhdGEmKQorc3RkOjpvcHRpb25hbDxSZWNvcmQ+IENh
Y2hlOjpkZWNvZGUoY29uc3QgU3RvcmFnZTo6UmVjb3JkJiBzdG9yYWdlKQogewotICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQgdGhpcy4KKyAgICBhdXRvIHJlc3VsdCA9IGRlY29kZVJlY29yZEhlYWRl
cihzdG9yYWdlKTsKKworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworCisgICAgYXV0byByZWNvcmQgPSBXVEZNb3ZlKHJlc3VsdC0+Zmlyc3QpOworICAgIHJl
Y29yZC5yZXNwb25zZUJvZHkgPSBXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmNyZWF0ZShzdG9yYWdl
LmJvZHkuZGF0YSgpLCBzdG9yYWdlLmJvZHkuc2l6ZSgpKTsKKworICAgIHJldHVybiByZWNvcmQ7
CiB9CiAKLXZvaWQgQ2FjaGU6OnJlbW92ZVJlY29yZEZyb21EaXNrKFJlY29yZERhdGEmKQorVmVj
dG9yPEtleT4gQ2FjaGU6OmtleXMoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQg
dGhpcy4KKyAgICBWZWN0b3I8S2V5PiBrZXlzOworICAgIGZvciAoYXV0byYgcmVjb3JkcyA6IG1f
cmVjb3Jkcy52YWx1ZXMoKSkgeworICAgICAgICBmb3IgKGF1dG8mIHJlY29yZCA6IHJlY29yZHMp
CisgICAgICAgICAgICBrZXlzLmFwcGVuZChyZWNvcmQua2V5KTsKKyAgICB9CisgICAgcmV0dXJu
IGtleXM7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIENhY2hlU3RvcmFnZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZS5o
IGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVD
YWNoZS5oCmluZGV4IGM5ZjBkODBlNTRiNzZlMjA0MmUxM2M5ZTQwNWM5ZDU1MjczZDEyNjUuLjU5
YTA2YWRkMmNmN2YwN2M1YjVhNGYzMDY1ZTU1OTUxZWFkZmNiOWEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2lu
ZUNhY2hlLmgKQEAgLTI1LDcgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJO
ZXR3b3JrQ2FjaGVLZXkuaCIKKyNpbmNsdWRlICJOZXR3b3JrQ2FjaGVTdG9yYWdlLmgiCiAjaW5j
bHVkZSA8V2ViQ29yZS9ET01DYWNoZUVuZ2luZS5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTM2LDcgKzM2LDcgQEAgbmFtZXNw
YWNlIENhY2hlU3RvcmFnZSB7CiAKIGNsYXNzIENhY2hlczsKIAotc3RydWN0IFJlY29yZERhdGEg
eworc3RydWN0IFJlY29yZEluZm9ybWF0aW9uIHsKICAgICBOZXR3b3JrQ2FjaGU6OktleSBrZXk7
CiAgICAgZG91YmxlIGluc2VydGlvblRpbWUgeyAwIH07CiAKQEAgLTQ2LDU4ICs0Niw2MSBAQCBz
dHJ1Y3QgUmVjb3JkRGF0YSB7CiAgICAgV2ViQ29yZTo6VVJMIHVybDsKICAgICBib29sIGhhc1Zh
cnlTdGFyIHsgZmFsc2UgfTsKICAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiB2YXJ5SGVhZGVy
czsKLQotICAgIHN0cnVjdCBEYXRhIHsKLSAgICAgICAgV2ViQ29yZTo6RmV0Y2hIZWFkZXJzOjpH
dWFyZCByZXF1ZXN0SGVhZGVyc0d1YXJkOwotICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QgcmVxdWVzdDsKLSAgICAgICAgV2ViQ29yZTo6RmV0Y2hPcHRpb25zIG9wdGlvbnM7Ci0gICAg
ICAgIFN0cmluZyByZWZlcnJlcjsKLQotICAgICAgICBXZWJDb3JlOjpGZXRjaEhlYWRlcnM6Okd1
YXJkIHJlc3BvbnNlSGVhZGVyc0d1YXJkOwotICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3Bv
bnNlIHJlc3BvbnNlOwotICAgICAgICBXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6UmVzcG9uc2VC
b2R5IHJlc3BvbnNlQm9keTsKLSAgICB9OwotCi0gICAgc3RkOjpvcHRpb25hbDxEYXRhPiBkYXRh
OwogfTsKIAorY2xhc3MgQXN5bmNocm9ub3VzUHV0VGFza0NvdW50ZXI7CitjbGFzcyBSZWFkUmVj
b3JkVGFza0NvdW50ZXI7CisKIGNsYXNzIENhY2hlIHsKIHB1YmxpYzoKICAgICBlbnVtIGNsYXNz
IFN0YXRlIHsgVW5pbml0aWFsaXplZCwgT3BlbmluZywgT3BlbiB9OwotICAgIENhY2hlKENhY2hl
cyYsIHVpbnQ2NF90IGlkZW50aWZpZXIsIFN0YXRlLCBTdHJpbmcmJiBuYW1lKTsKKyAgICBDYWNo
ZShDYWNoZXMmLCB1aW50NjRfdCBpZGVudGlmaWVyLCBTdGF0ZSwgU3RyaW5nJiYgbmFtZSwgU3Ry
aW5nJiYgdW5pcXVlTmFtZSk7CiAKKyAgICBib29sIGlzT3BlbmVkKCkgY29uc3QgeyByZXR1cm4g
bV9zdGF0ZSA9PSBTdGF0ZTo6T3BlbjsgfQogICAgIHZvaWQgb3BlbihXZWJDb3JlOjpET01DYWNo
ZUVuZ2luZTo6Q29tcGxldGlvbkNhbGxiYWNrJiYpOwogCiAgICAgdWludDY0X3QgaWRlbnRpZmll
cigpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQogICAgIGNvbnN0IFN0cmluZyYgbmFt
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQorICAgIGNvbnN0IFN0cmluZyYgdW5pcXVlTmFt
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdW5pcXVlTmFtZTsgfQogICAgIGJvb2wgaXNBY3RpdmUoKSBj
b25zdCB7IHJldHVybiBtX3N0YXRlICE9IFN0YXRlOjpVbmluaXRpYWxpemVkOyB9CiAKLSAgICBW
ZWN0b3I8V2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OlJlY29yZD4gcmV0cmlldmVSZWNvcmRzKGNv
bnN0IFdlYkNvcmU6OlVSTCYpIGNvbnN0OworICAgIHZvaWQgcmV0cmlldmVSZWNvcmRzKGNvbnN0
IFdlYkNvcmU6OlVSTCYsIFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpSZWNvcmRzQ2FsbGJhY2sm
Jik7CiAgICAgV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OkNhY2hlSW5mbyBpbmZvKCkgY29uc3Qg
eyByZXR1cm4geyBtX2lkZW50aWZpZXIsIG1fbmFtZSB9OyB9CiAKICAgICB2b2lkIHB1dChWZWN0
b3I8V2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OlJlY29yZD4mJiwgV2ViQ29yZTo6RE9NQ2FjaGVF
bmdpbmU6OlJlY29yZElkZW50aWZpZXJzQ2FsbGJhY2smJik7CiAgICAgdm9pZCByZW1vdmUoV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYsIFdlYkNvcmU6OkNhY2hlUXVlcnlPcHRpb25zJiYsIFdl
YkNvcmU6OkRPTUNhY2hlRW5naW5lOjpSZWNvcmRJZGVudGlmaWVyc0NhbGxiYWNrJiYpOwogCisg
ICAgVmVjdG9yPE5ldHdvcmtDYWNoZTo6S2V5PiBrZXlzKCkgY29uc3Q7CisKICAgICB2b2lkIGRp
c3Bvc2UoKTsKICAgICB2b2lkIGNsZWFyTWVtb3J5UmVwcmVzZW50YXRpb24oKTsKLSAKKworICAg
IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpSZWNvcmQ+IGRl
Y29kZShjb25zdCBOZXR3b3JrQ2FjaGU6OlN0b3JhZ2U6OlJlY29yZCYpOworICAgIHN0YXRpYyBO
ZXR3b3JrQ2FjaGU6OlN0b3JhZ2U6OlJlY29yZCBlbmNvZGUoY29uc3QgUmVjb3JkSW5mb3JtYXRp
b24mLCBjb25zdCBXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6UmVjb3JkJik7CisKIHByaXZhdGU6
Ci0gICAgVmVjdG9yPFJlY29yZERhdGE+KiByZWNvcmRzRnJvbVVSTChjb25zdCBXZWJDb3JlOjpV
UkwmKTsKLSAgICBjb25zdCBWZWN0b3I8UmVjb3JkRGF0YT4qIHJlY29yZHNGcm9tVVJMKGNvbnN0
IFdlYkNvcmU6OlVSTCYpIGNvbnN0OwotICAgIFJlY29yZERhdGEmIGFkZFJlY29yZChWZWN0b3I8
UmVjb3JkRGF0YT4qLCBXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6UmVjb3JkJiYpOworICAgIFZl
Y3RvcjxSZWNvcmRJbmZvcm1hdGlvbj4qIHJlY29yZHNGcm9tVVJMKGNvbnN0IFdlYkNvcmU6OlVS
TCYpOworICAgIGNvbnN0IFZlY3RvcjxSZWNvcmRJbmZvcm1hdGlvbj4qIHJlY29yZHNGcm9tVVJM
KGNvbnN0IFdlYkNvcmU6OlVSTCYpIGNvbnN0OworICAgIFJlY29yZEluZm9ybWF0aW9uJiBhZGRS
ZWNvcmQoVmVjdG9yPFJlY29yZEluZm9ybWF0aW9uPiosIGNvbnN0IFdlYkNvcmU6OkRPTUNhY2hl
RW5naW5lOjpSZWNvcmQmKTsKKworICAgIFJlY29yZEluZm9ybWF0aW9uIHRvUmVjb3JkSW5mb3Jt
YXRpb24oY29uc3QgV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OlJlY29yZCYpOwogCiAgICAgdm9p
ZCBmaW5pc2hPcGVuaW5nKFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpDb21wbGV0aW9uQ2FsbGJh
Y2smJiwgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6RXJyb3I+JiYpOwor
ICAgIHZvaWQgcmV0cmlldmVSZWNvcmQoY29uc3QgUmVjb3JkSW5mb3JtYXRpb24mLCBSZWZQdHI8
UmVhZFJlY29yZFRhc2tDb3VudGVyPiYpOwogCiAgICAgdm9pZCByZWFkUmVjb3Jkc0xpc3QoV2Vi
Q29yZTo6RE9NQ2FjaGVFbmdpbmU6OkNvbXBsZXRpb25DYWxsYmFjayYmKTsKLSAgICB2b2lkIHdy
aXRlUmVjb3Jkc0xpc3QoV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OkNvbXBsZXRpb25DYWxsYmFj
ayYmKTsKLSAgICB2b2lkIHdyaXRlUmVjb3JkVG9EaXNrKFJlY29yZERhdGEmKTsKLSAgICB2b2lk
IHJlbW92ZVJlY29yZEZyb21EaXNrKFJlY29yZERhdGEmKTsKKyAgICB2b2lkIHdyaXRlUmVjb3Jk
VG9EaXNrKGNvbnN0IFJlY29yZEluZm9ybWF0aW9uJiwgV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6
OlJlY29yZCYmLCBjb25zdCBSZWZQdHI8QXN5bmNocm9ub3VzUHV0VGFza0NvdW50ZXI+Jik7Cisg
ICAgdm9pZCB1cGRhdGVSZWNvcmRUb0Rpc2soUmVjb3JkSW5mb3JtYXRpb24mLCBXZWJDb3JlOjpE
T01DYWNoZUVuZ2luZTo6UmVjb3JkJiYsIGNvbnN0IFJlZlB0cjxBc3luY2hyb25vdXNQdXRUYXNr
Q291bnRlcj4mKTsKKyAgICB2b2lkIHJlbW92ZVJlY29yZEZyb21EaXNrKGNvbnN0IFJlY29yZElu
Zm9ybWF0aW9uJik7CisgICAgdm9pZCByZWFkUmVjb3JkRnJvbURpc2soY29uc3QgUmVjb3JkSW5m
b3JtYXRpb24mLCBXVEY6OkZ1bmN0aW9uPHZvaWQoRXhwZWN0ZWQ8V2ViQ29yZTo6RE9NQ2FjaGVF
bmdpbmU6OlJlY29yZCwgV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OkVycm9yPiYmKT4mJik7Cisg
ICAgdm9pZCByZW1vdmVGcm9tUmVjb3JkTGlzdChjb25zdCBWZWN0b3I8dWludDY0X3Q+Jik7CiAK
ICAgICBDYWNoZXMmIG1fY2FjaGVzOwogICAgIFN0YXRlIG1fc3RhdGU7CiAgICAgdWludDY0X3Qg
bV9pZGVudGlmaWVyIHsgMCB9OwogICAgIFN0cmluZyBtX25hbWU7Ci0gICAgSGFzaE1hcDxTdHJp
bmcsIFZlY3RvcjxSZWNvcmREYXRhPj4gbV9yZWNvcmRzOworICAgIFN0cmluZyBtX3VuaXF1ZU5h
bWU7CisgICAgSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxSZWNvcmRJbmZvcm1hdGlvbj4+IG1fcmVj
b3JkczsKICAgICB1aW50NjRfdCBtX25leHRSZWNvcmRJZGVudGlmaWVyIHsgMCB9OwogICAgIFZl
Y3RvcjxXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6Q29tcGxldGlvbkNhbGxiYWNrPiBtX3BlbmRp
bmdPcGVuaW5nQ2FsbGJhY2tzOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNwcCBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNwcAppbmRl
eCAyYzFiZmE1ZTViOWVhODNhMjkxOTkxZDJmNGIyYTg5MGNiMWM1MTk2Li5iMmNhMjIzNjgyNjk3
MjliYmI2NWRiMjY0MjE4NDc4N2NjNTgzMmRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMu
Y3BwCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiQ2FjaGVTdG9yYWdlRW5naW5lLmgiCiAK
ICNpbmNsdWRlICJOZXR3b3JrQ2FjaGVDb2RlcnMuaCIKKyNpbmNsdWRlIDx3dGYvVVVJRC5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU6OkRPTUNhY2hlRW5naW5lOwpAQCAtNTksNyArNjAsMTQgQEAgQ2FjaGVzOjpDYWNoZXMo
RW5naW5lJiBlbmdpbmUsIFN0cmluZyYmIG9yaWdpbikKIAogdm9pZCBDYWNoZXM6OmluaXRpYWxp
emUoV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OkNvbXBsZXRpb25DYWxsYmFjayYmIGNhbGxiYWNr
KQogewotICAgIGlmIChtX2lzSW5pdGlhbGl6ZWQgfHwgbV9yb290UGF0aC5pc051bGwoKSkgewor
ICAgIGlmIChtX2lzSW5pdGlhbGl6ZWQpIHsKKyAgICAgICAgY2FsbGJhY2soc3RkOjpudWxsb3B0
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX3Jvb3RQYXRoLmlzTnVsbCgp
KSB7CisgICAgICAgIG1ha2VEaXJ0eSgpOworICAgICAgICBtX2lzSW5pdGlhbGl6ZWQgPSB0cnVl
OwogICAgICAgICBjYWxsYmFjayhzdGQ6Om51bGxvcHQpOwogICAgICAgICByZXR1cm47CiAgICAg
fQpAQCAtNzUsNiArODMsNyBAQCB2b2lkIENhY2hlczo6aW5pdGlhbGl6ZShXZWJDb3JlOjpET01D
YWNoZUVuZ2luZTo6Q29tcGxldGlvbkNhbGxiYWNrJiYgY2FsbGJhY2spCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgbV9zdG9yYWdlID0gc3RvcmFnZS5yZWxlYXNlTm9uTnVsbCgpOworICAg
IG1fc3RvcmFnZS0+d3JpdGVXaXRob3V0V2FpdGluZygpOwogICAgIHJlYWRDYWNoZXNGcm9tRGlz
ayhbdGhpcywgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oRXhwZWN0ZWQ8VmVjdG9yPENh
Y2hlPiwgRXJyb3I+JiYgcmVzdWx0KSB7CiAgICAgICAgIG1ha2VEaXJ0eSgpOwogCkBAIC0xMjAs
NyArMTI5LDkgQEAgQ2FjaGUqIENhY2hlczo6ZmluZCh1aW50NjRfdCBpZGVudGlmaWVyKQogCiB2
b2lkIENhY2hlczo6b3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIENhY2hlSWRlbnRpZmllckNhbGxi
YWNrJiYgY2FsbGJhY2spCiB7CisgICAgQVNTRVJUKG1faXNJbml0aWFsaXplZCk7CiAgICAgQVNT
RVJUKG1fZW5naW5lKTsKKwogICAgIGlmIChhdXRvKiBjYWNoZSA9IGZpbmQobmFtZSkpIHsKICAg
ICAgICAgY2FjaGUtPm9wZW4oW2NhY2hlSWRlbnRpZmllciA9IGNhY2hlLT5pZGVudGlmaWVyKCks
IGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKHN0ZDo6b3B0aW9uYWw8RXJyb3I+JiYgZXJy
b3IpIG11dGFibGUgewogICAgICAgICAgICAgaWYgKGVycm9yKSB7CkBAIC0xMzUsNyArMTQ2LDcg
QEAgdm9pZCBDYWNoZXM6Om9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBDYWNoZUlkZW50aWZpZXJD
YWxsYmFjayYmIGNhbGxiYWNrKQogICAgIG1ha2VEaXJ0eSgpOwogCiAgICAgdWludDY0X3QgY2Fj
aGVJZGVudGlmaWVyID0gbV9lbmdpbmUtPm5leHRDYWNoZUlkZW50aWZpZXIoKTsKLSAgICBtX2Nh
Y2hlcy5hcHBlbmQoQ2FjaGUgeyAqdGhpcywgY2FjaGVJZGVudGlmaWVyLCBDYWNoZTo6U3RhdGU6
Ok9wZW4sIFN0cmluZyB7IG5hbWUgfSB9KTsKKyAgICBtX2NhY2hlcy5hcHBlbmQoQ2FjaGUgeyAq
dGhpcywgY2FjaGVJZGVudGlmaWVyLCBDYWNoZTo6U3RhdGU6Ok9wZW4sIFN0cmluZyB7IG5hbWUg
fSwgY3JlYXRlQ2Fub25pY2FsVVVJRFN0cmluZygpIH0pOwogCiAgICAgd3JpdGVDYWNoZXNUb0Rp
c2soW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGNhY2hlSWRlbnRpZmllcl0oc3RkOjpv
cHRpb25hbDxFcnJvcj4mJiBlcnJvcikgbXV0YWJsZSB7CiAgICAgICAgIGNhbGxiYWNrKENhY2hl
SWRlbnRpZmllck9wZXJhdGlvblJlc3VsdCB7IGNhY2hlSWRlbnRpZmllciwgISFlcnJvciB9KTsK
QEAgLTE0NCw2ICsxNTUsNyBAQCB2b2lkIENhY2hlczo6b3Blbihjb25zdCBTdHJpbmcmIG5hbWUs
IENhY2hlSWRlbnRpZmllckNhbGxiYWNrJiYgY2FsbGJhY2spCiAKIHZvaWQgQ2FjaGVzOjpyZW1v
dmUodWludDY0X3QgaWRlbnRpZmllciwgQ2FjaGVJZGVudGlmaWVyQ2FsbGJhY2smJiBjYWxsYmFj
aykKIHsKKyAgICBBU1NFUlQobV9pc0luaXRpYWxpemVkKTsKICAgICBBU1NFUlQobV9lbmdpbmUp
OwogCiAgICAgYXV0byBwb3NpdGlvbiA9IG1fY2FjaGVzLmZpbmRNYXRjaGluZyhbJl0oY29uc3Qg
YXV0byYgaXRlbSkgeyByZXR1cm4gaXRlbS5pZGVudGlmaWVyKCkgPT0gaWRlbnRpZmllcjsgfSk7
CkBAIC0xNjgsNiArMTgwLDkgQEAgdm9pZCBDYWNoZXM6OmRpc3Bvc2UoQ2FjaGUmIGNhY2hlKQog
ewogICAgIGF1dG8gcG9zaXRpb24gPSBtX3JlbW92ZWRDYWNoZXMuZmluZE1hdGNoaW5nKFsmXShj
b25zdCBhdXRvJiBpdGVtKSB7IHJldHVybiBpdGVtLmlkZW50aWZpZXIoKSA9PSBjYWNoZS5pZGVu
dGlmaWVyKCk7IH0pOwogICAgIGlmIChwb3NpdGlvbiAhPSBub3RGb3VuZCkgeworICAgICAgICBp
ZiAobV9zdG9yYWdlKQorICAgICAgICAgICAgbV9zdG9yYWdlLT5yZW1vdmUoY2FjaGUua2V5cygp
LCB7IH0pOworCiAgICAgICAgIG1fcmVtb3ZlZENhY2hlcy5yZW1vdmUocG9zaXRpb24pOwogICAg
ICAgICByZXR1cm47CiAgICAgfQpAQCAtMTg0LDEzICsxOTksMTUgQEAgc3RhdGljIGlubGluZSBE
YXRhIGVuY29kZUNhY2hlTmFtZXMoY29uc3QgVmVjdG9yPENhY2hlPiYgY2FjaGVzKQogCiAgICAg
dWludDY0X3Qgc2l6ZSA9IGNhY2hlcy5zaXplKCk7CiAgICAgZW5jb2RlciA8PCBzaXplOwotICAg
IGZvciAoYXV0byYgY2FjaGUgOiBjYWNoZXMpCisgICAgZm9yIChhdXRvJiBjYWNoZSA6IGNhY2hl
cykgewogICAgICAgICBlbmNvZGVyIDw8IGNhY2hlLm5hbWUoKTsKKyAgICAgICAgZW5jb2RlciA8
PCBjYWNoZS51bmlxdWVOYW1lKCk7CisgICAgfQogCiAgICAgcmV0dXJuIERhdGEgeyBlbmNvZGVy
LmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSB9OwogfQogCi1zdGF0aWMgaW5saW5lIEV4
cGVjdGVkPFZlY3RvcjxTdHJpbmc+LCBFcnJvcj4gZGVjb2RlQ2FjaGVzTmFtZXMoY29uc3QgRGF0
YSYgZGF0YSwgaW50IGVycm9yKQorc3RhdGljIGlubGluZSBFeHBlY3RlZDxWZWN0b3I8c3RkOjpw
YWlyPFN0cmluZywgU3RyaW5nPj4sIEVycm9yPiBkZWNvZGVDYWNoZXNOYW1lcyhjb25zdCBEYXRh
JiBkYXRhLCBpbnQgZXJyb3IpCiB7CiAgICAgaWYgKGVycm9yKQogICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoRXJyb3I6OlJlYWREaXNrKTsKQEAgLTIwMCwxNCArMjE3LDE3IEBAIHN0YXRp
YyBpbmxpbmUgRXhwZWN0ZWQ8VmVjdG9yPFN0cmluZz4sIEVycm9yPiBkZWNvZGVDYWNoZXNOYW1l
cyhjb25zdCBEYXRhJiBkYXRhCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShjb3VudCkpCiAgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChFcnJvcjo6UmVhZERpc2spOwogCi0gICAgVmVjdG9y
PFN0cmluZz4gbmFtZXM7CisgICAgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4+IG5h
bWVzOwogICAgIG5hbWVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoY291bnQpOwogICAgIGZvciAo
c2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBjb3VudDsgKytpbmRleCkgewogICAgICAgICBTdHJp
bmcgbmFtZTsKICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShuYW1lKSkKICAgICAgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZChFcnJvcjo6UmVhZERpc2spOworICAgICAgICBTdHJpbmcg
dW5pcXVlTmFtZTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh1bmlxdWVOYW1lKSkKKyAg
ICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChFcnJvcjo6UmVhZERpc2spOwogCi0gICAg
ICAgIG5hbWVzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKG5hbWUpKTsKKyAgICAgICAgbmFtZXMu
dW5jaGVja2VkQXBwZW5kKHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4geyBXVEZNb3ZlKG5hbWUp
LCBXVEZNb3ZlKHVuaXF1ZU5hbWUpIH0pOwogICAgIH0KICAgICByZXR1cm4gbmFtZXM7CiB9CkBA
IC0yNDIsOCArMjYyLDggQEAgdm9pZCBDYWNoZXM6OnJlYWRDYWNoZXNGcm9tRGlzayhXVEY6OkZ1
bmN0aW9uPHZvaWQoRXhwZWN0ZWQ8VmVjdG9yPENhY2hlPiwgRXJyb3IKICAgICAgICAgfQogICAg
ICAgICBWZWN0b3I8Q2FjaGU+IGNhY2hlczsKICAgICAgICAgY2FjaGVzLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkocmVzdWx0LnZhbHVlKCkuc2l6ZSgpKTsKLSAgICAgICAgZm9yIChhdXRvJiBuYW1l
IDogcmVzdWx0LnZhbHVlKCkpCi0gICAgICAgICAgICBjYWNoZXMudW5jaGVja2VkQXBwZW5kKENh
Y2hlIHsgKnRoaXMsIG1fZW5naW5lLT5uZXh0Q2FjaGVJZGVudGlmaWVyKCksIENhY2hlOjpTdGF0
ZTo6VW5pbml0aWFsaXplZCwgV1RGTW92ZShuYW1lKSB9KTsKKyAgICAgICAgZm9yIChhdXRvJiBu
YW1lcyA6IHJlc3VsdC52YWx1ZSgpKQorICAgICAgICAgICAgY2FjaGVzLnVuY2hlY2tlZEFwcGVu
ZChDYWNoZSB7ICp0aGlzLCBtX2VuZ2luZS0+bmV4dENhY2hlSWRlbnRpZmllcigpLCBDYWNoZTo6
U3RhdGU6OlVuaW5pdGlhbGl6ZWQsIFdURk1vdmUobmFtZXMuZmlyc3QpLCBXVEZNb3ZlKG5hbWVz
LnNlY29uZCkgfSk7CiAKICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShjYWNoZXMpKTsKICAgICB9
KTsKQEAgLTI2OSwxNCArMjg5LDgyIEBAIHZvaWQgQ2FjaGVzOjp3cml0ZUNhY2hlc1RvRGlzayhD
b21wbGV0aW9uQ2FsbGJhY2smJiBjYWxsYmFjaykKICAgICB9KTsKIH0KIAordm9pZCBDYWNoZXM6
OnJlYWRSZWNvcmRzTGlzdChDYWNoZSYgY2FjaGUsIE5ldHdvcmtDYWNoZTo6U3RvcmFnZTo6VHJh
dmVyc2VIYW5kbGVyJiYgY2FsbGJhY2spCit7CisgICAgQVNTRVJUKG1faXNJbml0aWFsaXplZCk7
CisKKyAgICBpZiAoIW1fc3RvcmFnZSkgeworICAgICAgICBjYWxsYmFjayhudWxscHRyLCB7IH0p
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fc3RvcmFnZS0+dHJhdmVyc2UoY2FjaGUu
dW5pcXVlTmFtZSgpLCAwLCBbcHJvdGVjdGVkU3RvcmFnZSA9IG1ha2VSZWYoKm1fc3RvcmFnZSks
IGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKGNvbnN0IGF1dG8qIHN0b3JhZ2UsIGNvbnN0
IGF1dG8mIGluZm9ybWF0aW9uKSB7CisgICAgICAgIGNhbGxiYWNrKHN0b3JhZ2UsIGluZm9ybWF0
aW9uKTsKKyAgICB9KTsKK30KKwordm9pZCBDYWNoZXM6OndyaXRlUmVjb3JkKGNvbnN0IENhY2hl
JiBjYWNoZSwgY29uc3QgUmVjb3JkSW5mb3JtYXRpb24mIHJlY29yZEluZm9ybWF0aW9uLCBSZWNv
cmQmJiByZWNvcmQsIENvbXBsZXRpb25DYWxsYmFjayYmIGNhbGxiYWNrKQoreworICAgIEFTU0VS
VChtX2lzSW5pdGlhbGl6ZWQpOworCisgICAgLy8gRklYTUU6IENoZWNrIGZvciBzdG9yYWdlIHF1
b3RhLgorICAgIGlmICghc2hvdWxkUGVyc2lzdCgpKSB7CisgICAgICAgIG1fdm9sYXRpbGVTdG9y
YWdlLnNldChyZWNvcmRJbmZvcm1hdGlvbi5rZXksIFdURk1vdmUocmVjb3JkKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBtX3N0b3JhZ2UtPnN0b3JlKENhY2hlOjplbmNvZGUocmVj
b3JkSW5mb3JtYXRpb24sIHJlY29yZCksIFtwcm90ZWN0ZWRTdG9yYWdlID0gbWFrZVJlZigqbV9z
dG9yYWdlKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oY29uc3QgRGF0YSYpIHsKKyAg
ICAgICAgY2FsbGJhY2soc3RkOjpudWxsb3B0KTsKKyAgICB9KTsKK30KKwordm9pZCBDYWNoZXM6
OnJlYWRSZWNvcmQoY29uc3QgTmV0d29ya0NhY2hlOjpLZXkmIGtleSwgV1RGOjpGdW5jdGlvbjx2
b2lkKEV4cGVjdGVkPFJlY29yZCwgRXJyb3I+JiYpPiYmIGNhbGxiYWNrKQoreworICAgIEFTU0VS
VChtX2lzSW5pdGlhbGl6ZWQpOworCisgICAgaWYgKCFzaG91bGRQZXJzaXN0KCkpIHsKKyAgICAg
ICAgYXV0byBpdGVyYXRvciA9IG1fdm9sYXRpbGVTdG9yYWdlLmZpbmQoa2V5KTsKKyAgICAgICAg
aWYgKGl0ZXJhdG9yID09IG1fdm9sYXRpbGVTdG9yYWdlLmVuZCgpKSB7CisgICAgICAgICAgICBj
YWxsYmFjayhtYWtlVW5leHBlY3RlZChFcnJvcjo6SW50ZXJuYWwpKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICBjYWxsYmFjayhpdGVyYXRvci0+dmFsdWUuY29weSgp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fc3RvcmFnZS0+cmV0cmlldmUoa2V5
LCA0LCBbcHJvdGVjdGVkU3RvcmFnZSA9IG1ha2VSZWYoKm1fc3RvcmFnZSksIGNhbGxiYWNrID0g
V1RGTW92ZShjYWxsYmFjayldKHN0ZDo6dW5pcXVlX3B0cjxTdG9yYWdlOjpSZWNvcmQ+IHN0b3Jh
Z2UpIG11dGFibGUgeworICAgICAgICBpZiAoIXN0b3JhZ2UpIHsKKyAgICAgICAgICAgIGNhbGxi
YWNrKG1ha2VVbmV4cGVjdGVkKEVycm9yOjpSZWFkRGlzaykpOworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgYXV0byByZWNvcmQgPSBDYWNoZTo6ZGVjb2Rl
KCpzdG9yYWdlKTsKKyAgICAgICAgaWYgKCFyZWNvcmQpIHsKKyAgICAgICAgICAgIGNhbGxiYWNr
KG1ha2VVbmV4cGVjdGVkKEVycm9yOjpSZWFkRGlzaykpOworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisKKyAgICAgICAgY2FsbGJhY2soV1RGTW92ZShyZWNvcmQudmFsdWUo
KSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9KTsKK30KKwordm9pZCBDYWNoZXM6OnJl
bW92ZVJlY29yZChjb25zdCBOZXR3b3JrQ2FjaGU6OktleSYga2V5KQoreworICAgIEFTU0VSVCht
X2lzSW5pdGlhbGl6ZWQpOworCisgICAgaWYgKCFzaG91bGRQZXJzaXN0KCkpIHsKKyAgICAgICAg
bV92b2xhdGlsZVN0b3JhZ2UucmVtb3ZlKGtleSk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgbV9zdG9yYWdlLT5yZW1vdmUoa2V5KTsKK30KKwogdm9pZCBDYWNoZXM6OmNsZWFyTWVtb3J5
UmVwcmVzZW50YXRpb24oKQogewogICAgIG1ha2VEaXJ0eSgpOwogICAgIG1fY2FjaGVzLmNsZWFy
KCk7CiAgICAgbV9pc0luaXRpYWxpemVkID0gZmFsc2U7CiAgICAgbV9zdG9yYWdlID0gbnVsbHB0
cjsKLSAgICBpZiAobV9lbmdpbmUpCi0gICAgICAgIG1fZW5naW5lLT5yZW1vdmVDYWNoZXMobV9v
cmlnaW4pOwogfQogCiBib29sIENhY2hlczo6aXNEaXJ0eSh1aW50NjRfdCB1cGRhdGVDb3VudGVy
KSBjb25zdApAQCAtMjg1LDYgKzM3MywxNyBAQCBib29sIENhY2hlczo6aXNEaXJ0eSh1aW50NjRf
dCB1cGRhdGVDb3VudGVyKSBjb25zdAogICAgIHJldHVybiBtX3VwZGF0ZUNvdW50ZXIgIT0gdXBk
YXRlQ291bnRlcjsKIH0KIAorY29uc3QgTmV0d29ya0NhY2hlOjpTYWx0JiBDYWNoZXM6OnNhbHQo
KSBjb25zdAoreworICAgIGlmIChtX2VuZ2luZSkKKyAgICAgICAgcmV0dXJuIG1fZW5naW5lLT5z
YWx0KCk7CisKKyAgICBpZiAoIW1fdm9sYXRpbGVTYWx0KQorICAgICAgICBtX3ZvbGF0aWxlU2Fs
dCA9IFNhbHQgeyB9OworCisgICAgcmV0dXJuIG1fdm9sYXRpbGVTYWx0LnZhbHVlKCk7Cit9CisK
IENhY2hlSW5mb3MgQ2FjaGVzOjpjYWNoZUluZm9zKHVpbnQ2NF90IHVwZGF0ZUNvdW50ZXIpIGNv
bnN0CiB7CiAgICAgVmVjdG9yPENhY2hlSW5mbz4gY2FjaGVJbmZvczsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVz
LmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2lu
ZUNhY2hlcy5oCmluZGV4IGYzMTNmZDFjNGNiOGI5ZmFmY2I2NDY2ODg2OGNmNDM3YWQ1OTcyMzIu
LjRhMmE3NzkyZWZlYTZkYWZhNjQ0NDA1M2VjNzA4YmIwNTNlNmFmMDUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVz
LmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VF
bmdpbmVDYWNoZXMuaApAQCAtNTIsMTcgKzUyLDIzIEBAIHB1YmxpYzoKICAgICBDYWNoZSogZmlu
ZCh1aW50NjRfdCBpZGVudGlmaWVyKTsKICAgICB2b2lkIGFwcGVuZFJlcHJlc2VudGF0aW9uKFN0
cmluZ0J1aWxkZXImKSBjb25zdDsKIAorICAgIHZvaWQgcmVhZFJlY29yZHNMaXN0KENhY2hlJiwg
TmV0d29ya0NhY2hlOjpTdG9yYWdlOjpUcmF2ZXJzZUhhbmRsZXImJik7CisgICAgdm9pZCByZWFk
UmVjb3JkKGNvbnN0IE5ldHdvcmtDYWNoZTo6S2V5JiwgV1RGOjpGdW5jdGlvbjx2b2lkKEV4cGVj
dGVkPFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpSZWNvcmQsIFdlYkNvcmU6OkRPTUNhY2hlRW5n
aW5lOjpFcnJvcj4mJik+JiYpOworICAgIHZvaWQgd3JpdGVSZWNvcmQoY29uc3QgQ2FjaGUmLCBj
b25zdCBSZWNvcmRJbmZvcm1hdGlvbiYsIFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpSZWNvcmQm
JiwgV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OkNvbXBsZXRpb25DYWxsYmFjayYmKTsKKyAgICB2
b2lkIHJlbW92ZVJlY29yZChjb25zdCBOZXR3b3JrQ2FjaGU6OktleSYpOworCisgICAgY29uc3Qg
TmV0d29ya0NhY2hlOjpTYWx0JiBzYWx0KCkgY29uc3Q7CisKKyAgICBib29sIHNob3VsZFBlcnNp
c3QoKSBjb25zdCB7IHJldHVybiAhbV9yb290UGF0aC5pc051bGwoKTsgfQorCiBwcml2YXRlOgog
ICAgIENhY2hlcyhFbmdpbmUmLCBTdHJpbmcmJiBvcmlnaW4pOwogCiAgICAgdm9pZCByZWFkQ2Fj
aGVzRnJvbURpc2soV1RGOjpGdW5jdGlvbjx2b2lkKEV4cGVjdGVkPFZlY3RvcjxDYWNoZT4sIFdl
YkNvcmU6OkRPTUNhY2hlRW5naW5lOjpFcnJvcj4mJik+JiYpOwogICAgIHZvaWQgd3JpdGVDYWNo
ZXNUb0Rpc2soV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OkNvbXBsZXRpb25DYWxsYmFjayYmKTsK
IAotCiAgICAgQ2FjaGUqIGZpbmQoY29uc3QgU3RyaW5nJiBuYW1lKTsKIAotICAgIGJvb2wgc2hv
dWxkUGVyc2lzdCgpIGNvbnN0IHsgcmV0dXJuICFtX3Jvb3RQYXRoLmlzTnVsbCgpOyB9Ci0KICAg
ICB2b2lkIG1ha2VEaXJ0eSgpIHsgKyttX3VwZGF0ZUNvdW50ZXI7IH0KICAgICBib29sIGlzRGly
dHkodWludDY0X3QgdXBkYXRlQ291bnRlcikgY29uc3Q7CiAKQEAgLTc0LDYgKzgwLDggQEAgcHJp
dmF0ZToKICAgICBWZWN0b3I8Q2FjaGU+IG1fY2FjaGVzOwogICAgIFZlY3RvcjxDYWNoZT4gbV9y
ZW1vdmVkQ2FjaGVzOwogICAgIFJlZlB0cjxOZXR3b3JrQ2FjaGU6OlN0b3JhZ2U+IG1fc3RvcmFn
ZTsKKyAgICBIYXNoTWFwPE5ldHdvcmtDYWNoZTo6S2V5LCBXZWJDb3JlOjpET01DYWNoZUVuZ2lu
ZTo6UmVjb3JkPiBtX3ZvbGF0aWxlU3RvcmFnZTsKKyAgICBtdXRhYmxlIHN0ZDo6b3B0aW9uYWw8
TmV0d29ya0NhY2hlOjpTYWx0PiBtX3ZvbGF0aWxlU2FsdDsKICAgICBWZWN0b3I8V2ViQ29yZTo6
RE9NQ2FjaGVFbmdpbmU6OkNvbXBsZXRpb25DYWxsYmFjaz4gbV9wZW5kaW5nSW5pdGlhbGl6YXRp
b25DYWxsYmFja3M7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcAppbmRleCA4MDNhOTlmYmRkZDZk
OGQyMjcwYWQ1NWM5YmNiNTBhMDUxYTQ0YjNmLi4wYjY1MjhkZDcyOGZiOTMzMGFhOWQwNTQyODU3
NGNmNDYwZDA5YWYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHAKQEAgLTg0NiwxMCArODQ2LDcgQEAg
dm9pZCBTdG9yYWdlOjpzdG9yZShjb25zdCBSZWNvcmQmIHJlY29yZCwgTWFwcGVkQm9keUhhbmRs
ZXImJiBtYXBwZWRCb2R5SGFuZGxlcikKICAgICBpZiAoIWlzSW5pdGlhbFdyaXRlKQogICAgICAg
ICByZXR1cm47CiAKLSAgICAvLyBEZWxheSB0aGUgc3RhcnQgb2Ygd3JpdGVzIGEgYml0IHRvIGF2
b2lkIGFmZmVjdGluZyBlYXJseSBwYWdlIGxvYWQuCi0gICAgLy8gQ29tcGxldGluZyB3cml0ZXMg
d2lsbCBkaXNwYXRjaCBtb3JlIHdyaXRlcyB3aXRob3V0IGRlbGF5LgotICAgIHN0YXRpYyBjb25z
dCBTZWNvbmRzIGluaXRpYWxXcml0ZURlbGF5ID0gMV9zOwotICAgIG1fd3JpdGVPcGVyYXRpb25E
aXNwYXRjaFRpbWVyLnN0YXJ0T25lU2hvdChpbml0aWFsV3JpdGVEZWxheSk7CisgICAgbV93cml0
ZU9wZXJhdGlvbkRpc3BhdGNoVGltZXIuc3RhcnRPbmVTaG90KG1faW5pdGlhbFdyaXRlRGVsYXkp
OwogfQogCiB2b2lkIFN0b3JhZ2U6OnRyYXZlcnNlKGNvbnN0IFN0cmluZyYgdHlwZSwgVHJhdmVy
c2VGbGFncyBmbGFncywgVHJhdmVyc2VIYW5kbGVyJiYgdHJhdmVyc2VIYW5kbGVyKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9y
YWdlLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0
b3JhZ2UuaAppbmRleCA0MTJlZDllYzU3MzExM2Q4ZTUxYjJjZmUzMWJlYjA1Zjk1ZWQ5NDc5Li5i
Njg4ZGNkNGUwYTc1ZWExMmE5ZDEwZGRlN2M5YmI0YzhmOWY0YjQ2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2Uu
aApAQCAtMTA0LDYgKzEwNCw4IEBAIHB1YmxpYzoKIAogICAgIH5TdG9yYWdlKCk7CiAKKyAgICB2
b2lkIHdyaXRlV2l0aG91dFdhaXRpbmcoKSB7IG1faW5pdGlhbFdyaXRlRGVsYXkgPSAwX3M7IH07
CisKIHByaXZhdGU6CiAgICAgU3RvcmFnZShjb25zdCBTdHJpbmcmIGRpcmVjdG9yeVBhdGgsIE1v
ZGUsIFNhbHQpOwogCkBAIC0xODIsNiArMTg0LDEwIEBAIHByaXZhdGU6CiAgICAgUmVmPFdvcmtR
dWV1ZT4gbV9zZXJpYWxCYWNrZ3JvdW5kSU9RdWV1ZTsKIAogICAgIEJsb2JTdG9yYWdlIG1fYmxv
YlN0b3JhZ2U7CisKKyAgICAvLyBCeSBkZWZhdWx0LCBkZWxheSB0aGUgc3RhcnQgb2Ygd3JpdGVz
IGEgYml0IHRvIGF2b2lkIGFmZmVjdGluZyBlYXJseSBwYWdlIGxvYWQuCisgICAgLy8gQ29tcGxl
dGluZyB3cml0ZXMgd2lsbCBkaXNwYXRjaCBtb3JlIHdyaXRlcyB3aXRob3V0IGRlbGF5LgorICAg
IFNlY29uZHMgbV9pbml0aWFsV3JpdGVEZWxheSB7IDFfcyB9OwogfTsKIAogLy8gRklYTUU6IFJl
bW92ZSwgdXNlZCBieSBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzIG9ubHkuCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMWVjNTYy
Y2ZkYjVlYzc5YjA1NjE3NGM0YzgwNzFkNWVkZTliMzhiYy4uODk5YTIxOTA3NjRmOGM5MmJmMzRj
OTA0MzI1OTdhOGM5YmM2Yzk5OCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisr
KyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDE3LTA5LTEzICBZ
b3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgQ2FjaGUgQVBJ
IHN1cHBvcnQgb2YgcmVjb3JkcyBwZXJzaXN0ZW5jeQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc2ODQ1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBodHRwL3Rlc3RzL2NhY2hlLXN0b3JhZ2UvY2FjaGUt
cGVyc2lzdGVuY3kuaHR0cHMuaHRtbDoKKyAgICAgICAgKiBodHRwL3Rlc3RzL2NhY2hlLXN0b3Jh
Z2UvY2FjaGUtcmVjb3Jkcy1wZXJzaXN0ZW5jeS5odHRwcy1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIGh0dHAvdGVzdHMvY2FjaGUtc3RvcmFnZS9jYWNoZS1yZWNvcmRzLXBlcnNpc3Rl
bmN5Lmh0dHBzLmh0bWw6IEFkZGVkLgorCiAyMDE3LTA5LTEyICBZb3Vlbm4gRmFibGV0ICA8eW91
ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBJbnRlcm5hbHMgY2xlYXJDYWNoZVN0b3JhZ2VNZW1v
cnlSZXByZXNlbnRhdGlvbiBzaG91bGQgcmV0dXJuIGEgUHJvbWlzZQpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9jYWNoZS1zdG9yYWdlL2NhY2hlLXBlcnNpc3RlbmN5Lmh0dHBz
Lmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2NhY2hlLXN0b3JhZ2UvY2FjaGUtcGVyc2lz
dGVuY3kuaHR0cHMuaHRtbAppbmRleCBkMWVhZDRkNGFmMjViY2U4ZjU0ZjYwYThhMzJkZDFkNzc0
MTFiOGY4Li5kYzllOTZiNjVlOGMyNDFmNzA3OTZlNjU5NjVlMjU3ZDljMzUyY2RkIDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2NhY2hlLXN0b3JhZ2UvY2FjaGUtcGVyc2lzdGVu
Y3kuaHR0cHMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2NhY2hlLXN0b3JhZ2Uv
Y2FjaGUtcGVyc2lzdGVuY3kuaHR0cHMuaHRtbApAQCAtNDIsMTEgKzQyLDExIEBACiAgICAgcHJv
bWlzZV90ZXN0KHRlc3QgPT4gewogICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCiAgICAg
ICAgICAgICB0ZXN0UnVubmVyLnNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQoZmFsc2UpOwotICAg
ICAgICB2YXIgY2xlYXJQcm9taXNlOwotICAgICAgICBpZiAod2luZG93LmludGVybmFscykKLSAg
ICAgICAgICAgIGNsZWFyUHJvbWlzZSA9aW50ZXJuYWxzLmNsZWFyQ2FjaGVTdG9yYWdlTWVtb3J5
UmVwcmVzZW50YXRpb24oKTsKIAotICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNsZWFy
UHJvbWlzZSkudGhlbigoKSA9PiB7CisgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKS50
aGVuKCgpID0+IHsKKyAgICAgICAgICAgIGlmICh3aW5kb3cuaW50ZXJuYWxzKQorICAgICAgICAg
ICAgICAgIHJldHVybiBpbnRlcm5hbHMuY2xlYXJDYWNoZVN0b3JhZ2VNZW1vcnlSZXByZXNlbnRh
dGlvbigpOworICAgICAgICB9KS50aGVuKCgpID0+IHsKICAgICAgICAgICAgIHJldHVybiBzZWxm
LmNhY2hlcy5rZXlzKCk7CiAgICAgICAgIH0pLnRoZW4oa2V5cyA9PiB7CiAgICAgICAgICAgICB2
YXIgcGVuZGluZyA9IFtdOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9jYWNo
ZS1zdG9yYWdlL2NhY2hlLXJlY29yZHMtcGVyc2lzdGVuY3kuaHR0cHMtZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9jYWNoZS1zdG9yYWdlL2NhY2hlLXJlY29yZHMtcGVyc2lz
dGVuY3kuaHR0cHMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMxOWNjZWEzYjRkYzRlNmEwMjMw
NTMyYzE3OWZlMTEwNDE0MWY4NjYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL2NhY2hlLXN0b3JhZ2UvY2FjaGUtcmVjb3Jkcy1wZXJzaXN0ZW5jeS5odHRwcy1leHBl
Y3RlZC50eHQKQEAgLTAsMCArMSw5IEBACisKK1BBU1MgQ2xlYW5pbmcgZXhpc3RpbmcgY2FjaGVz
IAorUEFTUyBDYWNoZS5wdXQgY2FsbGVkIHR3aWNlIHdpdGggbWF0Y2hpbmcgUmVxdWVzdHMgLSBr
ZXlzIHNob3VsZCByZW1haW4gdGhlIHNhbWUgLSB0ZXN0aW5nIHBlcnNpc3RlbmN5IAorUEFTUyBD
bGVhbmluZyBjcmVhdGVkIGNhY2hlcyAKK1BBU1MgQ2hlY2tpbmcgcGVyc2lzdGVuY3kgb2YgY2Fj
aGUga2V5cyAKK1BBU1MgQ2hlY2tpbmcgcGVyc2lzdGVuY3kgb2YgcmVzcG9uc2UgCitQQVNTIENo
ZWNraW5nIHBlcnNpc3RlbmN5IG9mIHJlc3BvbnNlIGJvZHkgCitQQVNTIFRlc3Rpbmcgb3ZlcnJp
ZGluZyBvZiBhbiBleGlzdGluZyBjYWNoZWQgcmVjb3JkIHRoYXQgaXMgbm90IGluIG1lbW9yeSAK
KwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9jYWNoZS1zdG9yYWdlL2NhY2hl
LXJlY29yZHMtcGVyc2lzdGVuY3kuaHR0cHMuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMv
Y2FjaGUtc3RvcmFnZS9jYWNoZS1yZWNvcmRzLXBlcnNpc3RlbmN5Lmh0dHBzLmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYmI0YmFhMDBhYmVhYTVkNTUxN2MzMDg1ZTgxYWIyODJhMzcyYTg1MAotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvY2FjaGUtc3RvcmFnZS9jYWNoZS1yZWNv
cmRzLXBlcnNpc3RlbmN5Lmh0dHBzLmh0bWwKQEAgLTAsMCArMSwxMzMgQEAKKzwhRE9DVFlQRSBo
dG1sPgorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5DYWNoZSBTdG9yYWdlOiB0ZXN0aW5nIENhY2hl
IHBlcnNpc3RlbmN5PC90aXRsZT4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNz
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0
LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorICAgIDxzY3JpcHQ+CitmdW5jdGlvbiBh
c3NlcnRfaGVhZGVyX2VxdWFscyhhY3R1YWwsIGV4cGVjdGVkLCBkZXNjcmlwdGlvbikgeworICAg
IGFzc2VydF9jbGFzc19zdHJpbmcoYWN0dWFsLCAiSGVhZGVycyIsIGRlc2NyaXB0aW9uKTsKKyAg
ICB2YXIgaGVhZGVyOworICAgIHZhciBhY3R1YWxfaGVhZGVycyA9IFtdOworICAgIHZhciBleHBl
Y3RlZF9oZWFkZXJzID0gW107CisgICAgZm9yIChoZWFkZXIgb2YgYWN0dWFsKQorICAgICAgICBh
Y3R1YWxfaGVhZGVycy5wdXNoKGhlYWRlclswXSArICI6ICIgKyBoZWFkZXJbMV0pOworICAgIGZv
ciAoaGVhZGVyIG9mIGV4cGVjdGVkKQorICAgICAgICBleHBlY3RlZF9oZWFkZXJzLnB1c2goaGVh
ZGVyWzBdICsgIjogIiArIGhlYWRlclsxXSk7CisgICAgYXNzZXJ0X2FycmF5X2VxdWFscyhhY3R1
YWxfaGVhZGVycywgZXhwZWN0ZWRfaGVhZGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgIGRl
c2NyaXB0aW9uICsgIiBIZWFkZXJzIGRpZmZlci4iKTsKK30KKworZnVuY3Rpb24gYXNzZXJ0X3Jl
c3BvbnNlX2VxdWFscyhhY3R1YWwsIGV4cGVjdGVkLCBkZXNjcmlwdGlvbikgeworICAgIGFzc2Vy
dF9jbGFzc19zdHJpbmcoYWN0dWFsLCAiUmVzcG9uc2UiLCBkZXNjcmlwdGlvbik7CisgICAgWyJ0
eXBlIiwgInVybCIsICJzdGF0dXMiLCAib2siLCAic3RhdHVzVGV4dCJdLmZvckVhY2goZnVuY3Rp
b24oYXR0cmlidXRlKSB7CisgICAgICAgIGFzc2VydF9lcXVhbHMoYWN0dWFsW2F0dHJpYnV0ZV0s
IGV4cGVjdGVkW2F0dHJpYnV0ZV0sCisgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24g
KyAiIEF0dHJpYnV0ZXMgZGlmZmVyOiAiICsgYXR0cmlidXRlICsgIi4iKTsKKyAgICB9KTsKKyAg
ICBhc3NlcnRfaGVhZGVyX2VxdWFscyhhY3R1YWwuaGVhZGVycywgZXhwZWN0ZWQuaGVhZGVycywg
ZGVzY3JpcHRpb24pOworfQorCitmdW5jdGlvbiBhc3NlcnRfcmVxdWVzdF9lcXVhbHMoYWN0dWFs
LCBleHBlY3RlZCwgZGVzY3JpcHRpb24pIHsKKyAgICBhc3NlcnRfY2xhc3Nfc3RyaW5nKGFjdHVh
bCwgIlJlcXVlc3QiLCBkZXNjcmlwdGlvbik7CisgICAgWyJ1cmwiXS5mb3JFYWNoKGZ1bmN0aW9u
KGF0dHJpYnV0ZSkgeworICAgICAgICBhc3NlcnRfZXF1YWxzKGFjdHVhbFthdHRyaWJ1dGVdLCBl
eHBlY3RlZFthdHRyaWJ1dGVdLAorICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICsg
IiBBdHRyaWJ1dGVzIGRpZmZlcjogIiArIGF0dHJpYnV0ZSArICIuIik7CisgICAgfSk7CisgICAg
YXNzZXJ0X2hlYWRlcl9lcXVhbHMoYWN0dWFsLmhlYWRlcnMsIGV4cGVjdGVkLmhlYWRlcnMsIGRl
c2NyaXB0aW9uKTsKK30KKworZnVuY3Rpb24gYXNzZXJ0X3JlcXVlc3RfYXJyYXlfZXF1YWxzKGFj
dHVhbCwgZXhwZWN0ZWQsIGRlc2NyaXB0aW9uKSB7CisgICAgYXNzZXJ0X3RydWUoQXJyYXkuaXNB
cnJheShhY3R1YWwpLCBkZXNjcmlwdGlvbik7CisgICAgYXNzZXJ0X2VxdWFscyhhY3R1YWwubGVu
Z3RoLCBleHBlY3RlZC5sZW5ndGgsIGRlc2NyaXB0aW9uKTsKKyAgICBhY3R1YWwuZm9yRWFjaChm
dW5jdGlvbih2YWx1ZSwgaW5kZXgpIHsKKyAgICAgICAgYXNzZXJ0X3JlcXVlc3RfZXF1YWxzKHZh
bHVlLCBleHBlY3RlZFtpbmRleF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNj
cmlwdGlvbiArICIgOiBvYmplY3RbIiArIGluZGV4ICsgIl0iKTsKKyAgICB9KTsKK30KKworcHJv
bWlzZV90ZXN0KHRlc3QgPT4geworICAgIHJldHVybiBzZWxmLmNhY2hlcy5rZXlzKCkudGhlbihr
ZXlzID0+IHsKKyAgICAgICAgdmFyIHBlbmRpbmcgPSBbXTsKKyAgICAgICAgZm9yIChrZXkgb2Yg
a2V5cykKKyAgICAgICAgICAgIHBlbmRpbmcucHVzaChzZWxmLmNhY2hlcy5kZWxldGUoa2V5c1sw
XSkpOworICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocGVuZGluZyk7CisgICAgfSk7Cit9LCAi
Q2xlYW5pbmcgZXhpc3RpbmcgY2FjaGVzIik7CisKK3ZhciB0ZXN0X3VybCA9ICdodHRwczovL2V4
YW1wbGUuY29tL2Zvbyc7Cit2YXIgdGVzdF9ib2R5ID0gJ0hlbGxvIHdvcmxkISc7CisKK3Byb21p
c2VfdGVzdCgoKSA9PiB7CisgICAgdmFyIGNhY2hlOworICAgIHZhciBjYWNoZV9rZXlzOworICAg
IHZhciBmaXJzdF9yZXNwb25zZSA9IG5ldyBSZXNwb25zZSgiT2xkIGJvZHkiLCB7IHN0YXR1c1Rl
eHQ6ICdPbGQgc3RhdHVzJyB9KTsKKyAgICB2YXIgYWx0ZXJuYXRlX3Jlc3BvbnNlID0gbmV3IFJl
c3BvbnNlKCJOZXcgYm9keSIsIHsgc3RhdHVzVGV4dDogJ05ldyBzdGF0dXMnIH0pOworICAgIHJl
dHVybiBzZWxmLmNhY2hlcy5vcGVuKCJ0ZXN0LWNhY2hlLXJlY29yZHMtcGVyc2lzdGVuY3kiKS50
aGVuKGMgPT4geworICAgICAgICBjYWNoZSA9IGM7CisgICAgfSkudGhlbigoKSA9PiB7CisgICAg
ICAgIHJldHVybiBjYWNoZS5wdXQodGVzdF91cmwsIGZpcnN0X3Jlc3BvbnNlKTsKKyAgICB9KS50
aGVuKCgpID0+IHsKKyAgICAgICAgcmV0dXJuIGNhY2hlLmtleXMoKTsKKyAgICB9KS50aGVuKGtl
eXMgPT4geworICAgICAgICBjYWNoZV9rZXlzID0ga2V5czsKKyAgICAgICAgaWYgKHdpbmRvdy5p
bnRlcm5hbHMpCisgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxzLmNsZWFyQ2FjaGVTdG9yYWdl
TWVtb3J5UmVwcmVzZW50YXRpb24oKTsKKyAgICB9KS50aGVuKCgpID0+IHsKKyAgICAgICAgcmV0
dXJuIHNlbGYuY2FjaGVzLm9wZW4oInRlc3QtY2FjaGUtcmVjb3Jkcy1wZXJzaXN0ZW5jeSIpOwor
ICAgIH0pLnRoZW4oYyA9PiB7CisgICAgICAgIGNhY2hlID0gYzsKKyAgICAgICAgcmV0dXJuIGNh
Y2hlLmtleXMoKS50aGVuKChrZXlzKSA9PiB7CisgICAgICAgICAgICB0ZXN0KCgpID0+IHsKKyAg
ICAgICAgICAgICAgICBhc3NlcnRfcmVxdWVzdF9hcnJheV9lcXVhbHMoa2V5cywgY2FjaGVfa2V5
cyk7CisgICAgICAgICAgICB9LCAiQ2hlY2tpbmcgcGVyc2lzdGVuY3kgb2YgY2FjaGUga2V5cyIp
OworICAgICAgICAgICAgcmV0dXJuIGNhY2hlLm1hdGNoKHRlc3RfdXJsKTsKKyAgICAgICAgfSku
dGhlbigocmVzdWx0KSA9PiB7CisgICAgICAgICAgICB0ZXN0KCgpID0+IHsKKyAgICAgICAgICAg
ICAgICBhc3NlcnRfcmVzcG9uc2VfZXF1YWxzKHJlc3VsdCwgZmlyc3RfcmVzcG9uc2UsICJDYWNo
ZS5wdXQgc2hvdWxkIHN0b3JlIHRoZSByZXNwb25zZSBwZXJzaXN0ZW50bHkiKTsKKyAgICAgICAg
ICAgIH0sICJDaGVja2luZyBwZXJzaXN0ZW5jeSBvZiByZXNwb25zZSIpOworICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdC50ZXh0KCk7CisgICAgICAgIH0pLnRoZW4oKGJvZHkpID0+IHsKKyAgICAg
ICAgICAgIHRlc3QoKCkgPT4geworICAgICAgICAgICAgICAgIGFzc2VydF9lcXVhbHMoYm9keSwg
Ik9sZCBib2R5IiwgIkNhY2hlIHB1dCBzaG91bGQgc3RvcmUgdGhlIHJlc3BvbnNlIGJvZHkgcGVy
c2lzdGVudGx5LiIpOworICAgICAgICAgICAgfSwgIkNoZWNraW5nIHBlcnNpc3RlbmN5IG9mIHJl
c3BvbnNlIGJvZHkiKTsKKyAgICAgICAgfSk7CisgICAgfSkudGhlbigoKSA9PiB7CisgICAgICAg
IHJldHVybiBjYWNoZS5wdXQodGVzdF91cmwsIGFsdGVybmF0ZV9yZXNwb25zZSk7CisgICAgfSku
dGhlbigoKSA9PiB7CisgICAgICAgIHJldHVybiBjYWNoZS5rZXlzKCk7CisgICAgfSkudGhlbihr
ZXlzID0+IHsKKyAgICAgICAgY2FjaGVfa2V5cyA9IGtleXM7CisgICAgICAgIGlmICh3aW5kb3cu
aW50ZXJuYWxzKQorICAgICAgICAgICAgcmV0dXJuIGludGVybmFscy5jbGVhckNhY2hlU3RvcmFn
ZU1lbW9yeVJlcHJlc2VudGF0aW9uKCk7CisgICAgfSkudGhlbigoKSA9PiB7CisgICAgICAgIHJl
dHVybiBzZWxmLmNhY2hlcy5vcGVuKCJ0ZXN0LWNhY2hlLXJlY29yZHMtcGVyc2lzdGVuY3kiKTsK
KyAgICB9KS50aGVuKGMgPT4geworICAgICAgICBjYWNoZSA9IGM7CisgICAgICAgIHJldHVybiBj
YWNoZS5rZXlzKCk7CisgICAgfSkudGhlbigoa2V5cykgPT4geworICAgICAgICBhc3NlcnRfcmVx
dWVzdF9hcnJheV9lcXVhbHMoa2V5cywgY2FjaGVfa2V5cyk7CisgICAgfSkudGhlbigoKSA9PiB7
CisgICAgICAgIHByb21pc2VfdGVzdCgoKSA9PiB7CisgICAgICAgICAgICByZXR1cm4gY2FjaGUu
bWF0Y2godGVzdF91cmwpLnRoZW4oKHJlc3VsdCkgPT4geworICAgICAgICAgICAgICAgIGFzc2Vy
dF9yZXNwb25zZV9lcXVhbHMocmVzdWx0LCBhbHRlcm5hdGVfcmVzcG9uc2UsICdDYWNoZS5wdXQg
c2hvdWxkIHJlcGxhY2UgZXhpc3RpbmcgJyArICdyZXNwb25zZSB3aXRoIG5ldyByZXNwb25zZS4n
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LnRleHQoKTsKKyAgICAgICAgICAgIH0p
LnRoZW4oKGJvZHkpID0+IHsKKyAgICAgICAgICAgICAgICBhc3NlcnRfZXF1YWxzKGJvZHksICJO
ZXcgYm9keSIsICdDYWNoZSBwdXQgc2hvdWxkIHN0b3JlIG5ldyByZXNwb25zZSBib2R5LicpOwor
ICAgICAgICAgICAgfSk7CisgICAgICAgIH0sICdUZXN0aW5nIG92ZXJyaWRpbmcgb2YgYW4gZXhp
c3RpbmcgY2FjaGVkIHJlY29yZCB0aGF0IGlzIG5vdCBpbiBtZW1vcnknKTsKKyAgICB9KTsKK30s
ICdDYWNoZS5wdXQgY2FsbGVkIHR3aWNlIHdpdGggbWF0Y2hpbmcgUmVxdWVzdHMgLSBrZXlzIHNo
b3VsZCByZW1haW4gdGhlIHNhbWUgLSB0ZXN0aW5nIHBlcnNpc3RlbmN5Jyk7CisKK3Byb21pc2Vf
dGVzdCh0ZXN0ID0+IHsKKyAgICByZXR1cm4gc2VsZi5jYWNoZXMua2V5cygpLnRoZW4oa2V5cyA9
PiB7CisgICAgICAgIHZhciBwZW5kaW5nID0gW107CisgICAgICAgIGZvciAoa2V5IG9mIGtleXMp
CisgICAgICAgICAgICBwZW5kaW5nLnB1c2goc2VsZi5jYWNoZXMuZGVsZXRlKGtleXNbMF0pKTsK
KyAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHBlbmRpbmcpOworICAgIH0pOworfSwgIkNsZWFu
aW5nIGNyZWF0ZWQgY2FjaGVzIik7CisgICAgPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>320701</attachid>
            <date>2017-09-13 15:41:28 -0700</date>
            <delta_ts>2017-09-13 16:23:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-176845-20170913154127.patch</filename>
            <type>text/plain</type>
            <size>55330</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIxOTk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDBiNGM1Y2Q2NGM0YzdhNzdl
Y2Y2YmY0MGY5ZDBhNTFkYWVjNTMzNzIuLmE3ZmFkNjEwMmQwY2FkZDE3MmRhZGUxMmZhMzdkYzc0
ZGJiNzM4MjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTA1IEBACiAyMDE3LTA5LTEzICBZb3Vlbm4g
RmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAorICAgICAgICBBZGQgQ2FjaGUgQVBJIHN1cHBv
cnQgb2YgcmVjb3JkcyBwZXJzaXN0ZW5jeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTc2ODQ1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgSW50cm9kdWNpbmcgYXN5bmNocm9ub3VzIG9wZW5pbmcgb2YgQ2Fj
aGUgb2JqZWN0cy4KKyAgICAgICAgV2hlbiBvcGVuaW5nLCBDYWNoZSBvYmplY3RzIHdpbGwgcmVh
ZCB0aGUgbGlzdCBvZiByZWNvcmRzIGZyb20gdGhlIGRpc2suCisgICAgICAgIFRoZXkga2VlcCBp
biBtZW1vcnkgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiB0byBtYWtlIGFueSBtYXRjaCBvciBy
ZW1vdmUgcmVxdWVzdCB3aXRob3V0IHJlYWRpbmcgZnVydGhlciBpbmZvcm1hdGlvbiBmcm9tIHRo
ZSBkaXNrLgorICAgICAgICBDYWNoZSBvYmplY3RzIHRodXMga2VlcCBkdXJpbmcgdGhlIG9wZW5p
bmcgdGltZSBhIGxpc3Qgb2YgY2FsbGJhY2tzIHRvIGNhbGwgd2hlbiBiZWluZyBvcGVuZWQuCisg
ICAgICAgIFBlcnNpc3RlbnQgc3RvcmFnZSBpcyBpbXBsZW1lbnRlZCB0aHJvdWdoIE5ldHdvcmtD
YWNoZTo6U3RvcmFnZS4KKworICAgICAgICBBIENhY2hlIG9iamVjdCBpcyBhZGRlZCBhIHVuaXF1
ZSBuYW1lIHNvIHRoYXQgcmVjb3JkcyBmcm9tIGEgQ2FjaGUgY2Fubm90IGJlIG1peGVkIHdpdGgg
cmVjb3JkcyBmcm9tIGFub3RoZXIgQ2FjaGUuCisgICAgICAgIFRoaXMgdW5pcXVlIG5hbWUgaXMg
c3RvcmVkIHBlcnNpc3Rlbmx5IGluIGFkZGl0aW9uIHRvIHRoZSBDYWNoZSBuYW1lLgorICAgICAg
ICBUaGlzIHVuaXF1ZSBuYW1lIGlzIHVzZWQgYXMgdGhlIGtleSB0eXBlIGdpdmVuIHRvIHRoZSBz
dG9yYWdlLgorCisgICAgICAgIFJlcXVlc3QsIHJlc3BvbnNlIGFuZCByZXNwb25zZWJvZHkgZGF0
YSBhcmUgbm8gbG9uZ2VyIGtlcHQgYnkgdGhlIENhY2hlIG9iamVjdC4KKyAgICAgICAgRm9yIHJl
Z3VsYXIgc2Vzc2lvbnMsIHRoaXMgaW5mb3JtYXRpb24gaXMga2VwdCBvbiB0aGUgZGlzayB0aHJv
dWdoIE5ldHdvcmtDYWNoZTo6U3RvcmFnZS4KKyAgICAgICAgSW5zZXJ0aW9uIHRpbWUgaXMgYWxz
byBzdG9yZWQgcGVyc2lzdGVudGx5IHNvIGFzIHRvIGtlZXAgdGhlIG9yZGVyaW5nIG9mIHRoZSBy
ZWNvcmRzIGNvbnNpc3RlbnQuCisgICAgICAgIEZvciBwcml2YXRlIGJyb3dzaW5nIHNlc3Npb25z
LCB0aGlzIGluZm9ybWF0aW9uIGlzIGtlcHQgaW4gYSBtYXAgb3duZWQgYnkgdGhlIENhY2hlcyBv
YmplY3QuCisgICAgICAgIFJlY29yZERhdGEgaXMgcmVuYW1lZCB0byBSZWNvcmRJbmZvcm1hdGlv
biBhcyBpdCBub3cgb25seSBjb250YWlucyB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBoYW5kbGUg
dGhlIGRpZmZlcmVudCBDYWNoZSBhY3Rpb25zLgorCisgICAgICAgIEZvciBldmVyeSByZWNvcmQg
cmV0cmlldmFsIGFjdGlvbiwgYSBSZWFkUmVjb3JkVGFza0NvdW50ZXIgaXMgdXNlZC4KKyAgICAg
ICAgSXRzIHB1cnBvc2UgaXMgdG8gYWxsb3cgcmV0cmlldmluZyB0aGUgcmVjb3JkIGRhdGEgb24g
dGhlIGRpc2sgaW4gcGFyYWxsZWwsCisgICAgICAgIGFuZCB0aGVuIHNlbmQgYmFjayB0aGUgaW5m
b3JtYXRpb24gd2hlbiBldmVyeXRoaW5nIGlzIHJlYWQuCisgICAgICAgIEluIGNhc2Ugc29tZSBy
ZWNvcmRzIGNhbm5vdCBiZSBjb3JyZWN0bHkgcmVhZCwgdGhleSBhcmUgcmVtb3ZlZCBhdXRvbWF0
aWNhbGx5IGF0IHRoYXQgcG9pbnQuCisgICAgICAgIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9u
IGxvYWRzIGFsbCBpbmZvcm1hdGlvbiBpbiBtZW1vcnkgaW5jbHVkaW5nIHJlc3BvbnNlIGJvZGll
cy4KKyAgICAgICAgRnVydGhlciBpbXByb3ZlbWVudHMgbWlnaHQgY29uc2lkZXIgc3RyZWFtaW5n
IHRoZSByZXNwb25zZSBib2RpZXMgcHJvZ3Jlc3NpdmVseS4KKworICAgICAgICBGb3IgZXZlcnkg
c3RvcmVkIHJlY29yZCwgYW4gQXN5bmNocm9ub3VzUHV0VGFza0NvdW50ZXIgaXMgdXNlZC4KKyAg
ICAgICAgSXRzIHB1cnBvc2UgaXMgYWxzbyB0byB3YWl0IGZvciBhbGwgcHV0IGFjdGlvbnMgdG8g
YmUgY29tcGxldGVkIGJlZm9yZSBleGVjdXRpbmcgdGhlIGNvbXBsZXRpb24gY2FsbGJhY2suCisg
ICAgICAgIEluIHNvbWUgY2FzZXMsIGEgcmVjb3JkIG5lZWRzIHRvIGJlIG92ZXJyaWRlbi4KKyAg
ICAgICAgSW4gdGhhdCBjYXNlLCBhcyBwZXIgdGhlIHNwZWNpZmljYXRpb24sIG9ubHkgdGhlIGRh
dGEgcmVsYXRlZCB0byB0aGUgcmVzcG9uc2UgaXMgdG8gYmUgbW9kaWZpZWQuCisgICAgICAgIFRo
aXMgcmVxdWlyZXMgcmVhZGluZyB0aGUgcmVjb3JkIHJlcXVlc3QgZGF0YSBvbiBkaXNrIGJlZm9y
ZSBhY3R1YWxseSB3cml0aW5nIHRoZSB3aG9sZSByZWNvcmQgYWdhaW4uCisgICAgICAgIFRoaXMg
aXMgaW1wbGVtZW50ZWQgaW4gdXBkYXRlUmVjb3JkVG9EaXNrLgorCisgICAgICAgIFRoZSBDYWNo
ZSBvYmplY3QgaXMgZGVsZWdhdGluZyBhbGwgcmVjb3JkIHdyaXRpbmcvcmVhZGluZyB0YXNrcyB0
byBpdHMgQ2FjaGVzIG9iamVjdC4KKyAgICAgICAgVGhlIENhY2hlcyBvYmplY3QgaXMgcmVzcG9u
c2libGUgdG8gaGFuZGxlIHBlcnNpc3RlbnQvcHJpdmF0ZSBzZXNzaW9ucy4KKworICAgICAgICAq
IE5ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OkNhY2hlU3RvcmFnZTo6RW5naW5lOjpyZXRyaWV2ZVJlY29yZHMpOiBNYWtpbmcgc3Vy
ZSBDYWNoZSBvYmplY3QgaXMgb3BlbmVkLgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6
OkVuZ2luZTo6cmVhZENhY2hlKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFn
ZTo6RW5naW5lOjp1bmxvY2spOiBEaXNwb3NpbmcgdGhlIGNhY2hlIHdpdGhvdXQgZ29pbmcgdGhy
b3VnaCBpbml0aWFsaXppbmcgaXQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2Fj
aGVTdG9yYWdlRW5naW5lQ2FjaGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6
OmNvbXB1dGVLZXlVUkwpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OnF1ZXJ5Q2Fj
aGUpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OnVwZGF0ZVZhcnlJbmZvcm1hdGlv
bik6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OnRvUmVjb3JkSW5mb3Jt
YXRpb24pOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjpDYWNoZSk6Cisg
ICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6Om9wZW4pOgorICAgICAgICAoV2Vi
S2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjpmaW5pc2hPcGVuaW5nKToKKyAgICAgICAgKFdlYktp
dDo6Q2FjaGVTdG9yYWdlOjpSZWFkUmVjb3JkVGFza0NvdW50ZXI6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6UmVhZFJlY29yZFRhc2tDb3VudGVyOjp+UmVhZFJlY29y
ZFRhc2tDb3VudGVyKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpSZWFkUmVjb3Jk
VGFza0NvdW50ZXI6OmFwcGVuZFJlY29yZCk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFn
ZTo6UmVhZFJlY29yZFRhc2tDb3VudGVyOjpSZWFkUmVjb3JkVGFza0NvdW50ZXIpOgorICAgICAg
ICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjpyZXRyaWV2ZVJlY29yZCk6CisgICAgICAg
IChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OnJldHJpZXZlUmVjb3Jkcyk6CisgICAgICAg
IChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OmFkZFJlY29yZCk6CisgICAgICAgIChXZWJL
aXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OnJlY29yZHNGcm9tVVJMKToKKyAgICAgICAgKFdlYktp
dDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6cmVjb3Jkc0Zyb21VUkwgY29uc3QpOgorICAgICAgICAo
V2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkFzeW5jaHJvbm91c1B1dFRhc2tDb3VudGVyOjpjcmVhdGUp
OgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkFzeW5jaHJvbm91c1B1dFRhc2tDb3Vu
dGVyOjp+QXN5bmNocm9ub3VzUHV0VGFza0NvdW50ZXIpOgorICAgICAgICAoV2ViS2l0OjpDYWNo
ZVN0b3JhZ2U6OkFzeW5jaHJvbm91c1B1dFRhc2tDb3VudGVyOjpvbkNvbXBsZXRpb24pOgorICAg
ICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkFzeW5jaHJvbm91c1B1dFRhc2tDb3VudGVyOjpz
ZXRFcnJvcik6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OnB1dCk6Cisg
ICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OnJlbW92ZSk6CisgICAgICAgIChX
ZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OnJlbW92ZUZyb21SZWNvcmRMaXN0KToKKyAgICAg
ICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6d3JpdGVSZWNvcmRUb0Rpc2spOgorICAg
ICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjp1cGRhdGVSZWNvcmRUb0Rpc2spOgor
ICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjpyZWFkUmVjb3JkRnJvbURpc2sp
OgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjpyZW1vdmVSZWNvcmRGcm9t
RGlzayk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OmVuY29kZSk6Cisg
ICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6ZGVjb2RlUmVjb3JkSGVhZGVyKToKKyAgICAg
ICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6ZGVjb2RlKToKKyAgICAgICAgKFdlYktp
dDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6a2V5cyBjb25zdCk6CisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUuaDoKKyAgICAgICAgKFdlYktpdDo6
Q2FjaGVTdG9yYWdlOjpDYWNoZTo6aXNPcGVuZWQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpD
YWNoZVN0b3JhZ2U6OkNhY2hlOjp1bmlxdWVOYW1lIGNvbnN0KToKKyAgICAgICAgKiBOZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJLaXQ6
OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjpvcGVuKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9y
YWdlOjpDYWNoZXM6OnJlbW92ZSk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2Fj
aGVzOjpkaXNwb3NlKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjplbmNvZGVDYWNo
ZU5hbWVzKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpkZWNvZGVDYWNoZXNOYW1l
cyk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjpyZWFkQ2FjaGVzRnJv
bURpc2spOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6cmVhZFJlY29y
ZHNMaXN0KToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6OndyaXRlUmVj
b3JkKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6OnJlYWRSZWNvcmQp
OgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6cmVtb3ZlUmVjb3JkKToK
KyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6OmNsZWFyTWVtb3J5UmVwcmVz
ZW50YXRpb24pOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6c2FsdCBj
b25zdCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5l
Q2FjaGVzLmg6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjpzaG91bGRQ
ZXJzaXN0IGNvbnN0KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVTdG9yYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpTdG9yYWdlOjpz
dG9yZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFn
ZS5oOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlN0b3JhZ2U6OndyaXRlV2l0aG91
dFdhaXRpbmcpOgorCisyMDE3LTA5LTEzICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNv
bT4KKwogICAgICAgICBJbnRlcm5hbHMgY2xlYXJDYWNoZVN0b3JhZ2VNZW1vcnlSZXByZXNlbnRh
dGlvbiBzaG91bGQgcmV0dXJuIGEgUHJvbWlzZQogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc2ODE4CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lLmNwcCBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lLmNwcAppbmRleCA1ODMy
YzFhMTE3OTVlOWZjZDhiMmYxN2FiOGNmNTdmNmZlZmNjMzBiLi40MDhmNjJiMWNjYjRmZmI4M2U5
ZWExNzk4NmQzNmQwNGQzZjk5ZTIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmUuY3BwCkBAIC0xMzIsOCArMTMy
LDcgQEAgdm9pZCBFbmdpbmU6OnJldHJpZXZlUmVjb3Jkcyh1aW50NjRfdCBjYWNoZUlkZW50aWZp
ZXIsIFdlYkNvcmU6OlVSTCYmIHVybCwgUmVjb3IKICAgICAgICAgICAgIGNhbGxiYWNrKG1ha2VV
bmV4cGVjdGVkKHJlc3VsdC5lcnJvcigpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KLQotICAgICAgICBjYWxsYmFjayhyZXN1bHQudmFsdWUoKS5nZXQoKS5yZXRyaWV2ZVJlY29y
ZHModXJsKSk7CisgICAgICAgIHJlc3VsdC52YWx1ZSgpLmdldCgpLnJldHJpZXZlUmVjb3Jkcyh1
cmwsIFdURk1vdmUoY2FsbGJhY2spKTsKICAgICB9KTsKIH0KIApAQCAtMjE3LDEyICsyMTYsMjgg
QEAgdm9pZCBFbmdpbmU6OnJlYWRDYWNoZXNGcm9tRGlzayhjb25zdCBTdHJpbmcmIG9yaWdpbiwg
Q2FjaGVzQ2FsbGJhY2smJiBjYWxsYmFjaykKIAogdm9pZCBFbmdpbmU6OnJlYWRDYWNoZSh1aW50
NjRfdCBjYWNoZUlkZW50aWZpZXIsIENhY2hlQ2FsbGJhY2smJiBjYWxsYmFjaykKIHsKLSAgICAv
LyBGSVhNRTogSW1wbGVtZW50IHJlYWRpbmcuCiAgICAgYXV0byogY2FjaGUgPSB0aGlzLT5jYWNo
ZShjYWNoZUlkZW50aWZpZXIpOwogICAgIGlmICghY2FjaGUpIHsKICAgICAgICAgY2FsbGJhY2so
bWFrZVVuZXhwZWN0ZWQoRXJyb3I6OkludGVybmFsKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CisgICAgaWYgKCFjYWNoZS0+aXNPcGVuZWQoKSkgeworICAgICAgICBjYWNoZS0+b3BlbihbdGhp
cywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjYWNoZUlkZW50aWZpZXIsIGNhbGxi
YWNrID0gV1RGTW92ZShjYWxsYmFjayldKHN0ZDo6b3B0aW9uYWw8RXJyb3I+JiYgZXJyb3IpIG11
dGFibGUgeworICAgICAgICAgICAgaWYgKGVycm9yKSB7CisgICAgICAgICAgICAgICAgY2FsbGJh
Y2sobWFrZVVuZXhwZWN0ZWQoZXJyb3IudmFsdWUoKSkpOworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYXV0byogY2FjaGUgPSB0aGlzLT5jYWNo
ZShjYWNoZUlkZW50aWZpZXIpOworICAgICAgICAgICAgaWYgKCFjYWNoZSkgeworICAgICAgICAg
ICAgICAgIGNhbGxiYWNrKG1ha2VVbmV4cGVjdGVkKEVycm9yOjpJbnRlcm5hbCkpOworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFTU0VSVChjYWNo
ZS0+aXNPcGVuZWQoKSk7CisgICAgICAgICAgICBjYWxsYmFjayhzdGQ6OnJlZmVyZW5jZV93cmFw
cGVyPENhY2hlPiB7ICpjYWNoZSB9KTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CiAgICAgY2FsbGJhY2soc3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxDYWNoZT4geyAqY2FjaGUg
fSk7CiB9CiAKQEAgLTMyOCwxMiArMzQzLDExIEBAIHZvaWQgRW5naW5lOjp1bmxvY2sodWludDY0
X3QgY2FjaGVJZGVudGlmaWVyKQogICAgIGlmICgtLWxvY2tDb3VudC0+dmFsdWUpCiAgICAgICAg
IHJldHVybjsKIAotICAgIHJlYWRDYWNoZShjYWNoZUlkZW50aWZpZXIsIFt0aGlzXShDYWNoZU9y
RXJyb3ImJiByZXN1bHQpIG11dGFibGUgewotICAgICAgICBpZiAoIXJlc3VsdC5oYXNWYWx1ZSgp
KQotICAgICAgICAgICAgcmV0dXJuOworICAgIGF1dG8qIGNhY2hlID0gdGhpcy0+Y2FjaGUoY2Fj
aGVJZGVudGlmaWVyKTsKKyAgICBpZiAoIWNhY2hlKQorICAgICAgICByZXR1cm47CiAKLSAgICAg
ICAgcmVzdWx0LnZhbHVlKCkuZ2V0KCkuZGlzcG9zZSgpOwotICAgIH0pOworICAgIGNhY2hlLT5k
aXNwb3NlKCk7CiB9CiAKIFN0cmluZyBFbmdpbmU6OnJlcHJlc2VudGF0aW9uKCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5l
Q2FjaGUuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3Jh
Z2VFbmdpbmVDYWNoZS5jcHAKaW5kZXggNDgxYWRkN2VjY2IxYzVhMjUyM2VlYWY4MmI2NjRiNzNk
ZmVhNjg1ZS4uZjU0MjFhZGU3ZTQ3Y2U3OTA1YzJkMDRlNTk3MTRkMTI5MGNhNWE5YSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdp
bmVDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNo
ZVN0b3JhZ2VFbmdpbmVDYWNoZS5jcHAKQEAgLTI3LDE1ICsyNywxNiBAQAogI2luY2x1ZGUgIkNh
Y2hlU3RvcmFnZUVuZ2luZS5oIgogCiAjaW5jbHVkZSAiQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVz
LmgiCisjaW5jbHVkZSAiTmV0d29ya0NhY2hlQ29kZXJzLmgiCiAjaW5jbHVkZSAiTmV0d29ya0Nh
Y2hlSU9DaGFubmVsLmgiCiAjaW5jbHVkZSAiTmV0d29ya0NhY2hlS2V5LmgiCiAjaW5jbHVkZSAi
TmV0d29ya1Byb2Nlc3MuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0NhY2hlUXVlcnlPcHRpb25zLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9IVFRQUGFyc2Vycy5oPgogI2luY2x1ZGUgPHBhbC9TZXNzaW9u
SUQuaD4KLSNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvTWFpblRo
cmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9V
VUlELmg+CiAjaW5jbHVkZSA8d3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuaD4KICNp
bmNsdWRlIDx3dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudERlY29kZXIuaD4KICNpbmNsdWRlIDx3
dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudEVuY29kZXIuaD4KQEAgLTUxLDcgKzUyLDE4IEBAIG5h
bWVzcGFjZSBXZWJLaXQgewogCiBuYW1lc3BhY2UgQ2FjaGVTdG9yYWdlIHsKIAotc3RhdGljIGlu
bGluZSBWZWN0b3I8dWludDY0X3Q+IHF1ZXJ5Q2FjaGUoY29uc3QgVmVjdG9yPFJlY29yZERhdGE+
KiByZWNvcmRzLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IENhY2hlUXVl
cnlPcHRpb25zJiBvcHRpb25zKQorc3RhdGljIHN0ZDo6b3B0aW9uYWw8c3RkOjpwYWlyPFJlY29y
ZCwgZG91YmxlPj4gZGVjb2RlUmVjb3JkSGVhZGVyKGNvbnN0IFN0b3JhZ2U6OlJlY29yZCYpOwor
CitzdGF0aWMgaW5saW5lIFN0cmluZyBjb21wdXRlS2V5VVJMKGNvbnN0IFVSTCYgdXJsKQorewor
ICAgIFVSTCBrZXlVUkwgPSB1cmw7CisgICAgaWYgKGtleVVSTC5oYXNRdWVyeSgpKQorICAgICAg
ICBrZXlVUkwuc2V0UXVlcnkoeyB9KTsKKyAgICBrZXlVUkwucmVtb3ZlRnJhZ21lbnRJZGVudGlm
aWVyKCk7CisgICAgcmV0dXJuIGtleVVSTDsKK30KKworc3RhdGljIGlubGluZSBWZWN0b3I8dWlu
dDY0X3Q+IHF1ZXJ5Q2FjaGUoY29uc3QgVmVjdG9yPFJlY29yZEluZm9ybWF0aW9uPiogcmVjb3Jk
cywgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBDYWNoZVF1ZXJ5T3B0aW9u
cyYgb3B0aW9ucykKIHsKICAgICBpZiAoIXJlY29yZHMpCiAgICAgICAgIHJldHVybiB7IH07CkBA
IC02Nyw0NyArNzksNDMgQEAgc3RhdGljIGlubGluZSBWZWN0b3I8dWludDY0X3Q+IHF1ZXJ5Q2Fj
aGUoY29uc3QgVmVjdG9yPFJlY29yZERhdGE+KiByZWNvcmRzLCBjb24KICAgICByZXR1cm4gcmVz
dWx0czsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZVZhcnlJbmZvcm1hdGlvbihSZWNv
cmREYXRhJiByZWNvcmREYXRhKQorc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZVZhcnlJbmZvcm1h
dGlvbihSZWNvcmRJbmZvcm1hdGlvbiYgcmVjb3JkSW5mb3JtYXRpb24sIGNvbnN0IFJlc291cmNl
UmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7Ci0g
ICAgYXV0byB2YXJ5VmFsdWUgPSByZWNvcmREYXRhLmRhdGEtPnJlc3BvbnNlLmh0dHBIZWFkZXJG
aWVsZChXZWJDb3JlOjpIVFRQSGVhZGVyTmFtZTo6VmFyeSk7CisgICAgYXV0byB2YXJ5VmFsdWUg
PSByZXNwb25zZS5odHRwSGVhZGVyRmllbGQoV2ViQ29yZTo6SFRUUEhlYWRlck5hbWU6OlZhcnkp
OwogICAgIGlmICh2YXJ5VmFsdWUuaXNOdWxsKCkpIHsKLSAgICAgICAgcmVjb3JkRGF0YS5oYXNW
YXJ5U3RhciA9IGZhbHNlOwotICAgICAgICByZWNvcmREYXRhLnZhcnlIZWFkZXJzID0geyB9Owor
ICAgICAgICByZWNvcmRJbmZvcm1hdGlvbi5oYXNWYXJ5U3RhciA9IGZhbHNlOworICAgICAgICBy
ZWNvcmRJbmZvcm1hdGlvbi52YXJ5SGVhZGVycyA9IHsgfTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAogICAgIHZhcnlWYWx1ZS5zcGxpdCgnLCcsIGZhbHNlLCBbJl0oU3RyaW5nVmlldyB2aWV3
KSB7Ci0gICAgICAgIGlmICghcmVjb3JkRGF0YS5oYXNWYXJ5U3RhciAmJiBzdHJpcExlYWRpbmdB
bmRUcmFpbGluZ0hUVFBTcGFjZXModmlldykgPT0gIioiKQotICAgICAgICAgICAgcmVjb3JkRGF0
YS5oYXNWYXJ5U3RhciA9IHRydWU7CisgICAgICAgIGlmICghcmVjb3JkSW5mb3JtYXRpb24uaGFz
VmFyeVN0YXIgJiYgc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVFRQU3BhY2VzKHZpZXcpID09ICIq
IikKKyAgICAgICAgICAgIHJlY29yZEluZm9ybWF0aW9uLmhhc1ZhcnlTdGFyID0gdHJ1ZTsKICAg
ICAgICAgU3RyaW5nIGhlYWRlck5hbWUgPSB2aWV3LnRvU3RyaW5nKCk7Ci0gICAgICAgIHJlY29y
ZERhdGEudmFyeUhlYWRlcnMuYWRkKGhlYWRlck5hbWUsIHJlY29yZERhdGEuZGF0YS0+cmVxdWVz
dC5odHRwSGVhZGVyRmllbGQoaGVhZGVyTmFtZSkpOworICAgICAgICByZWNvcmRJbmZvcm1hdGlv
bi52YXJ5SGVhZGVycy5hZGQoaGVhZGVyTmFtZSwgcmVxdWVzdC5odHRwSGVhZGVyRmllbGQoaGVh
ZGVyTmFtZSkpOwogICAgIH0pOwogCi0gICAgaWYgKHJlY29yZERhdGEuaGFzVmFyeVN0YXIpCi0g
ICAgICAgIHJlY29yZERhdGEudmFyeUhlYWRlcnMgPSB7IH07CisgICAgaWYgKHJlY29yZEluZm9y
bWF0aW9uLmhhc1ZhcnlTdGFyKQorICAgICAgICByZWNvcmRJbmZvcm1hdGlvbi52YXJ5SGVhZGVy
cyA9IHsgfTsKIH0KIAotc3RhdGljIGlubGluZSBSZWNvcmQgdG9SZWNvcmQoY29uc3QgUmVjb3Jk
RGF0YSYgcmVjb3JkKQorUmVjb3JkSW5mb3JtYXRpb24gQ2FjaGU6OnRvUmVjb3JkSW5mb3JtYXRp
b24oY29uc3QgUmVjb3JkJiByZWNvcmQpCiB7Ci0gICAgcmV0dXJuIHsgcmVjb3JkLmlkZW50aWZp
ZXIsIHJlY29yZC51cGRhdGVSZXNwb25zZUNvdW50ZXIsIHJlY29yZC5kYXRhLT5yZXF1ZXN0SGVh
ZGVyc0d1YXJkLCByZWNvcmQuZGF0YS0+cmVxdWVzdCwgcmVjb3JkLmRhdGEtPm9wdGlvbnMsIHJl
Y29yZC5kYXRhLT5yZWZlcnJlciwgcmVjb3JkLmRhdGEtPnJlc3BvbnNlSGVhZGVyc0d1YXJkLCBy
ZWNvcmQuZGF0YS0+cmVzcG9uc2UsIGNvcHlSZXNwb25zZUJvZHkocmVjb3JkLmRhdGEtPnJlc3Bv
bnNlQm9keSkgfTsKLX0KKyAgICBhdXRvIGluc2VydGlvblRpbWUgPSBtb25vdG9uaWNhbGx5SW5j
cmVhc2luZ1RpbWVNUygpOworICAgIGF1dG8ga2V5ID0gS2V5IHsgQVNDSUlMaXRlcmFsKCJyZWNv
cmQiKSwgU3RyaW5nIHsgbV91bmlxdWVOYW1lIH0sIFN0cmluZygpLCBjcmVhdGVDYW5vbmljYWxV
VUlEU3RyaW5nKCksIG1fY2FjaGVzLnNhbHQoKSB9OwogCi1zdGF0aWMgaW5saW5lIFJlY29yZERh
dGEgdG9SZWNvcmREYXRhKFJlY29yZCYmIHJlY29yZCkKLXsKLSAgICBhdXRvIHVybCA9IHJlY29y
ZC5yZXF1ZXN0LnVybCgpOwotICAgIFJlY29yZERhdGE6OkRhdGEgZGF0YSA9IHsgcmVjb3JkLnJl
cXVlc3RIZWFkZXJzR3VhcmQsIFdURk1vdmUocmVjb3JkLnJlcXVlc3QpLCBXVEZNb3ZlKHJlY29y
ZC5vcHRpb25zKSwgV1RGTW92ZShyZWNvcmQucmVmZXJyZXIpLCBXVEZNb3ZlKHJlY29yZC5yZXNw
b25zZUhlYWRlcnNHdWFyZCksIFdURk1vdmUocmVjb3JkLnJlc3BvbnNlKSwgV1RGTW92ZShyZWNv
cmQucmVzcG9uc2VCb2R5KSB9OwotICAgIFJlY29yZERhdGEgcmVjb3JkRGF0YSA9IHsgeyB9LCBt
b25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWVNUygpLCByZWNvcmQuaWRlbnRpZmllciwgMCwgdXJs
LCBmYWxzZSwgeyB9LCBXVEZNb3ZlKGRhdGEpIH07CisgICAgUmVjb3JkSW5mb3JtYXRpb24gcmVj
b3JkSW5mb3JtYXRpb24gPSB7IFdURk1vdmUoa2V5KSwgaW5zZXJ0aW9uVGltZSwgcmVjb3JkLmlk
ZW50aWZpZXIsIDAgLCByZWNvcmQucmVxdWVzdC51cmwoKSwgZmFsc2UsIHsgfSB9OworICAgIHVw
ZGF0ZVZhcnlJbmZvcm1hdGlvbihyZWNvcmRJbmZvcm1hdGlvbiwgcmVjb3JkLnJlcXVlc3QsIHJl
Y29yZC5yZXNwb25zZSk7CiAKLSAgICB1cGRhdGVWYXJ5SW5mb3JtYXRpb24ocmVjb3JkRGF0YSk7
Ci0KLSAgICByZXR1cm4gcmVjb3JkRGF0YTsKKyAgICByZXR1cm4gcmVjb3JkSW5mb3JtYXRpb247
CiB9CiAKLUNhY2hlOjpDYWNoZShDYWNoZXMmIGNhY2hlcywgdWludDY0X3QgaWRlbnRpZmllciwg
U3RhdGUgc3RhdGUsIFN0cmluZyYmIG5hbWUpCitDYWNoZTo6Q2FjaGUoQ2FjaGVzJiBjYWNoZXMs
IHVpbnQ2NF90IGlkZW50aWZpZXIsIFN0YXRlIHN0YXRlLCBTdHJpbmcmJiBuYW1lLCBTdHJpbmcm
JiB1bmlxdWVOYW1lKQogICAgIDogbV9jYWNoZXMoY2FjaGVzKQogICAgICwgbV9zdGF0ZShzdGF0
ZSkKICAgICAsIG1faWRlbnRpZmllcihpZGVudGlmaWVyKQogICAgICwgbV9uYW1lKFdURk1vdmUo
bmFtZSkpCisgICAgLCBtX3VuaXF1ZU5hbWUoV1RGTW92ZSh1bmlxdWVOYW1lKSkKIHsKIH0KIApA
QCAtMTM0LDE4ICsxNDIsNTYgQEAgdm9pZCBDYWNoZTo6b3BlbihDb21wbGV0aW9uQ2FsbGJhY2sm
JiBjYWxsYmFjaykKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBtX3N0YXRlID0gU3RhdGU6
Ok9wZW5pbmc7Ci0gICAgcmVhZFJlY29yZHNMaXN0KFtjYWNoZXMgPSBtYWtlUmVmKG1fY2FjaGVz
KSwgaWRlbnRpZmllciA9IG1faWRlbnRpZmllciwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNr
KV0oc3RkOjpvcHRpb25hbDxFcnJvcj4mJiBlcnJvcikgbXV0YWJsZSB7Ci0gICAgICAgIGF1dG8q
IGNhY2hlID0gY2FjaGVzLT5maW5kKGlkZW50aWZpZXIpOwotICAgICAgICBpZiAoIWNhY2hlKSB7
Ci0gICAgICAgICAgICBjYWxsYmFjayhFcnJvcjo6SW50ZXJuYWwpOworICAgIEhhc2hNYXA8U3Ry
aW5nLCBWZWN0b3I8UmVjb3JkSW5mb3JtYXRpb24+PiByZWNvcmRzOworICAgIFZlY3RvcjxLZXk+
IGZhaWxlZFJlY29yZHM7CisgICAgdWludDY0X3QgcmVjb3JkQ291bnQgPSAwOworICAgIG1fY2Fj
aGVzLnJlYWRSZWNvcmRzTGlzdCgqdGhpcywgW2NhY2hlcyA9IG1ha2VSZWYobV9jYWNoZXMpLCBp
ZGVudGlmaWVyID0gbV9pZGVudGlmaWVyLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBy
ZWNvcmRzID0gV1RGTW92ZShyZWNvcmRzKSwgZmFpbGVkUmVjb3JkcyA9IFdURk1vdmUoZmFpbGVk
UmVjb3JkcyksIHJlY29yZENvdW50XShjb25zdCBhdXRvKiBzdG9yYWdlUmVjb3JkLCBjb25zdCBh
dXRvJikgbXV0YWJsZSB7CisgICAgICAgIGlmICghc3RvcmFnZVJlY29yZCkgeworICAgICAgICAg
ICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtjYWNoZXMgPSBXVEZNb3ZlKGNhY2hlcyksIGlk
ZW50aWZpZXIsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIHJlY29yZHMgPSBXVEZNb3Zl
KHJlY29yZHMpLCBmYWlsZWRSZWNvcmRzID0gV1RGTW92ZShmYWlsZWRSZWNvcmRzKV0oKSBtdXRh
YmxlIHsKKyAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIGtleSA6IGZhaWxlZFJlY29yZHMpCisg
ICAgICAgICAgICAgICAgICAgIGNhY2hlcy0+cmVtb3ZlUmVjb3JkKGtleSk7CisKKyAgICAgICAg
ICAgICAgICBhdXRvKiBjYWNoZSA9IGNhY2hlcy0+ZmluZChpZGVudGlmaWVyKTsKKyAgICAgICAg
ICAgICAgICBpZiAoIWNhY2hlKSB7CisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKEVycm9y
OjpJbnRlcm5hbCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgY2FjaGUtPm1fcmVjb3JkcyA9IFdURk1vdmUocmVjb3Jkcyk7
CisgICAgICAgICAgICAgICAgY2FjaGUtPmZpbmlzaE9wZW5pbmcoV1RGTW92ZShjYWxsYmFjayks
IHN0ZDo6bnVsbG9wdCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIGF1dG8gZGVjb2RlZCA9IGRlY29kZVJlY29yZEhlYWRlcigqc3Rv
cmFnZVJlY29yZCk7CisgICAgICAgIGlmICghZGVjb2RlZCkgeworICAgICAgICAgICAgZmFpbGVk
UmVjb3Jkcy5hcHBlbmQoc3RvcmFnZVJlY29yZC0+a2V5KTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQotICAgICAgICBjYWNoZS0+ZmluaXNoT3BlbmluZyhXVEZNb3ZlKGNhbGxiYWNr
KSwgV1RGTW92ZShlcnJvcikpOworCisgICAgICAgIGF1dG8mIHJlY29yZCA9IGRlY29kZWQtPmZp
cnN0OworICAgICAgICBhdXRvIGluc2VydGlvblRpbWUgPSBkZWNvZGVkLT5zZWNvbmQ7CisKKyAg
ICAgICAgUmVjb3JkSW5mb3JtYXRpb24gcmVjb3JkSW5mb3JtYXRpb24gPSB7IHN0b3JhZ2VSZWNv
cmQtPmtleSwgaW5zZXJ0aW9uVGltZSwgMCwgMCwgcmVjb3JkLnJlcXVlc3QudXJsKCksIGZhbHNl
LCB7IH0gfTsKKyAgICAgICAgdXBkYXRlVmFyeUluZm9ybWF0aW9uKHJlY29yZEluZm9ybWF0aW9u
LCByZWNvcmQucmVxdWVzdCwgcmVjb3JkLnJlc3BvbnNlKTsKKworICAgICAgICBhdXRvJiBzYW1l
VVJMUmVjb3JkcyA9IHJlY29yZHMuZW5zdXJlKGNvbXB1dGVLZXlVUkwocmVjb3JkSW5mb3JtYXRp
b24udXJsKSwgW10geyByZXR1cm4gVmVjdG9yPFJlY29yZEluZm9ybWF0aW9uPiB7IH07IH0pLml0
ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgc2FtZVVSTFJlY29yZHMuYXBwZW5kKFdURk1vdmUocmVj
b3JkSW5mb3JtYXRpb24pKTsKICAgICB9KTsKIH0KIAogdm9pZCBDYWNoZTo6ZmluaXNoT3Blbmlu
ZyhDb21wbGV0aW9uQ2FsbGJhY2smJiBjYWxsYmFjaywgc3RkOjpvcHRpb25hbDxFcnJvcj4mJiBl
cnJvcikKIHsKKyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZWNvcmRJbmZvcm1h
dGlvbj4+IHJlY29yZHM7CisgICAgZm9yIChhdXRvJiB2YWx1ZSA6IG1fcmVjb3Jkcy52YWx1ZXMo
KSkgeworICAgICAgICBmb3IgKGF1dG8mIHJlY29yZCA6IHZhbHVlKQorICAgICAgICAgICAgcmVj
b3Jkcy5hcHBlbmQocmVjb3JkKTsKKyAgICB9CisgICAgc3RkOjpzb3J0KHJlY29yZHMuYmVnaW4o
KSwgcmVjb3Jkcy5lbmQoKSwgWyZdKGNvbnN0IGF1dG8mIGEsIGNvbnN0IGF1dG8mIGIpIHsKKyAg
ICAgICAgcmV0dXJuIGEuZ2V0KCkuaW5zZXJ0aW9uVGltZSA8IGIuZ2V0KCkuaW5zZXJ0aW9uVGlt
ZTsKKyAgICB9KTsKKyAgICBmb3IgKGF1dG8mIHJlY29yZCA6IHJlY29yZHMpCisgICAgICAgIHJl
Y29yZC5nZXQoKS5pZGVudGlmaWVyID0gKyttX25leHRSZWNvcmRJZGVudGlmaWVyOworCiAgICAg
aWYgKGVycm9yKSB7CiAgICAgICAgIG1fc3RhdGUgPSBTdGF0ZTo6VW5pbml0aWFsaXplZDsKICAg
ICAgICAgY2FsbGJhY2soZXJyb3IudmFsdWUoKSk7CkBAIC0xNjIsNTIgKzIwOCw4OSBAQCB2b2lk
IENhY2hlOjpmaW5pc2hPcGVuaW5nKENvbXBsZXRpb25DYWxsYmFjayYmIGNhbGxiYWNrLCBzdGQ6
Om9wdGlvbmFsPEVycm9yPiYmCiAgICAgICAgIGNhbGxiYWNrKHN0ZDo6bnVsbG9wdCk7CiB9CiAK
LVZlY3RvcjxSZWNvcmQ+IENhY2hlOjpyZXRyaWV2ZVJlY29yZHMoY29uc3QgVVJMJiB1cmwpIGNv
bnN0CitjbGFzcyBSZWFkUmVjb3JkVGFza0NvdW50ZXIgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNv
dW50ZWQ8UmVhZFJlY29yZFRhc2tDb3VudGVyPiB7CitwdWJsaWM6CisgICAgdXNpbmcgUmVhZFJl
Y29yZHNDYWxsYmFjayA9IFdURjo6RnVuY3Rpb248dm9pZChWZWN0b3I8UmVjb3JkPiYmLCBWZWN0
b3I8dWludDY0X3Q+JiYpPjsKKyAgICBzdGF0aWMgUmVmUHRyPFJlYWRSZWNvcmRUYXNrQ291bnRl
cj4gY3JlYXRlKFJlYWRSZWNvcmRzQ2FsbGJhY2smJiBjYWxsYmFjaykgeyByZXR1cm4gYWRvcHRS
ZWYobmV3IFJlYWRSZWNvcmRUYXNrQ291bnRlcihXVEZNb3ZlKGNhbGxiYWNrKSkpOyB9CisKKyAg
ICB+UmVhZFJlY29yZFRhc2tDb3VudGVyKCkKKyAgICB7CisgICAgICAgIGlmICghbV9jYWxsYmFj
aykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgc3RkOjpzb3J0KG1fcmVjb3Jkcy5iZWdp
bigpLCBtX3JlY29yZHMuZW5kKCksIFsmXSAoY29uc3QgYXV0byYgYSwgY29uc3QgYXV0byYgYikg
eworICAgICAgICAgICAgcmV0dXJuIGEuaWRlbnRpZmllciA8IGIuaWRlbnRpZmllcjsKKyAgICAg
ICAgfSk7CisgICAgICAgIG1fY2FsbGJhY2soV1RGTW92ZShtX3JlY29yZHMpLCBXVEZNb3ZlKG1f
ZmFpbGVkUmVjb3JkcykpOworICAgIH0KKworICAgIHZvaWQgYXBwZW5kUmVjb3JkKEV4cGVjdGVk
PFJlY29yZCwgRXJyb3I+JiYgcmVzdWx0LCB1aW50NjRfdCByZWNvcmRJZGVudGlmaWVyLCB1aW50
NjRfdCB1cGRhdGVDb3VudGVyKQorICAgIHsKKyAgICAgICAgaWYgKCFyZXN1bHQuaGFzVmFsdWUo
KSkgeworICAgICAgICAgICAgbV9mYWlsZWRSZWNvcmRzLmFwcGVuZChyZWNvcmRJZGVudGlmaWVy
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICByZXN1bHQudmFsdWUo
KS5pZGVudGlmaWVyID0gcmVjb3JkSWRlbnRpZmllcjsKKyAgICAgICAgcmVzdWx0LnZhbHVlKCku
dXBkYXRlUmVzcG9uc2VDb3VudGVyID0gdXBkYXRlQ291bnRlcjsKKyAgICAgICAgbV9yZWNvcmRz
LmFwcGVuZChXVEZNb3ZlKHJlc3VsdC52YWx1ZSgpKSk7CisgICAgfQorCitwcml2YXRlOgorICAg
IGV4cGxpY2l0IFJlYWRSZWNvcmRUYXNrQ291bnRlcihSZWFkUmVjb3Jkc0NhbGxiYWNrJiYgY2Fs
bGJhY2spIDogbV9jYWxsYmFjayhXVEZNb3ZlKGNhbGxiYWNrKSkgeyB9CisKKyAgICBSZWFkUmVj
b3Jkc0NhbGxiYWNrIG1fY2FsbGJhY2s7CisgICAgVmVjdG9yPFJlY29yZD4gbV9yZWNvcmRzOwor
ICAgIFZlY3Rvcjx1aW50NjRfdD4gbV9mYWlsZWRSZWNvcmRzOworfTsKKwordm9pZCBDYWNoZTo6
cmV0cmlldmVSZWNvcmQoY29uc3QgUmVjb3JkSW5mb3JtYXRpb24mIHJlY29yZCwgUmVmUHRyPFJl
YWRSZWNvcmRUYXNrQ291bnRlcj4mIHRhc2tDb3VudGVyKQoreworICAgIHJlYWRSZWNvcmRGcm9t
RGlzayhyZWNvcmQsIFtjYWNoZXMgPSBtYWtlUmVmKG1fY2FjaGVzKSwgaWRlbnRpZmllciA9IG1f
aWRlbnRpZmllciwgcmVjb3JkSWRlbnRpZmllciA9IHJlY29yZC5pZGVudGlmaWVyLCB1cGRhdGVD
b3VudGVyID0gcmVjb3JkLnVwZGF0ZVJlc3BvbnNlQ291bnRlciwgdGFza0NvdW50ZXJdKEV4cGVj
dGVkPFJlY29yZCwgRXJyb3I+JiYgcmVzdWx0KSBtdXRhYmxlIHsKKyAgICAgICAgYXV0byogY2Fj
aGUgPSBjYWNoZXMtPmZpbmQoaWRlbnRpZmllcik7CisgICAgICAgIGlmICghY2FjaGUpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIHRhc2tDb3VudGVyLT5hcHBlbmRSZWNvcmQoV1RGTW92
ZShyZXN1bHQpLCByZWNvcmRJZGVudGlmaWVyLCB1cGRhdGVDb3VudGVyKTsKKyAgICB9KTsKK30K
Kwordm9pZCBDYWNoZTo6cmV0cmlldmVSZWNvcmRzKGNvbnN0IFVSTCYgdXJsLCBSZWNvcmRzQ2Fs
bGJhY2smJiBjYWxsYmFjaykKIHsKKyAgICBBU1NFUlQobV9zdGF0ZSA9PSBTdGF0ZTo6T3Blbik7
CisKKyAgICBhdXRvIHRhc2tDb3VudGVyID0gUmVhZFJlY29yZFRhc2tDb3VudGVyOjpjcmVhdGUo
W2NhY2hlcyA9IG1ha2VSZWYobV9jYWNoZXMpLCBpZGVudGlmaWVyID0gbV9pZGVudGlmaWVyLCBj
YWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShWZWN0b3I8UmVjb3JkPiYmIHJlY29yZHMsIFZl
Y3Rvcjx1aW50NjRfdD4mJiBmYWlsZWRSZWNvcmRJZGVudGlmaWVycykgbXV0YWJsZSB7CisgICAg
ICAgIGF1dG8qIGNhY2hlID0gY2FjaGVzLT5maW5kKGlkZW50aWZpZXIpOworICAgICAgICBpZiAo
Y2FjaGUpCisgICAgICAgICAgICBjYWNoZS0+cmVtb3ZlRnJvbVJlY29yZExpc3QoZmFpbGVkUmVj
b3JkSWRlbnRpZmllcnMpOworICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKHJlY29yZHMpKTsKKyAg
ICB9KTsKKwogICAgIGlmICh1cmwuaXNOdWxsKCkpIHsKLSAgICAgICAgVmVjdG9yPFJlY29yZD4g
cmVzdWx0OwogICAgICAgICBmb3IgKGF1dG8mIHJlY29yZHMgOiBtX3JlY29yZHMudmFsdWVzKCkp
IHsKICAgICAgICAgICAgIGZvciAoYXV0byYgcmVjb3JkIDogcmVjb3JkcykKLSAgICAgICAgICAg
ICAgICByZXN1bHQuYXBwZW5kKHRvUmVjb3JkKHJlY29yZCkpOworICAgICAgICAgICAgICAgIHJl
dHJpZXZlUmVjb3JkKHJlY29yZCwgdGFza0NvdW50ZXIpOwogICAgICAgICB9Ci0gICAgICAgIHN0
ZDo6c29ydChyZXN1bHQuYmVnaW4oKSwgcmVzdWx0LmVuZCgpLCBbXShjb25zdCBhdXRvJiBhLCBj
b25zdCBhdXRvJiBiKSB7Ci0gICAgICAgICAgICByZXR1cm4gYS5pZGVudGlmaWVyIDwgYi5pZGVu
dGlmaWVyOwotICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIGNvbnN0IGF1dG8qIHJlY29yZHMgPSByZWNvcmRzRnJvbVVSTCh1
cmwpOworICAgIGF1dG8qIHJlY29yZHMgPSByZWNvcmRzRnJvbVVSTCh1cmwpOwogICAgIGlmICgh
cmVjb3JkcykKLSAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgcmV0dXJuOwogCi0gICAgVmVj
dG9yPFJlY29yZD4gcmVzdWx0OwotICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHJl
Y29yZHMtPnNpemUoKSk7CiAgICAgZm9yIChhdXRvJiByZWNvcmQgOiAqcmVjb3JkcykKLSAgICAg
ICAgcmVzdWx0LmFwcGVuZCh0b1JlY29yZChyZWNvcmQpKTsKLSAgICByZXR1cm4gcmVzdWx0Owor
ICAgICAgICByZXRyaWV2ZVJlY29yZChyZWNvcmQsIHRhc2tDb3VudGVyKTsKIH0KIAotc3RhdGlj
IGlubGluZSBTdHJpbmcgY29tcHV0ZUtleVVSTChjb25zdCBVUkwmIHVybCkKLXsKLSAgICBVUkwg
a2V5VVJMID0gdXJsOwotICAgIGlmIChrZXlVUkwuaGFzUXVlcnkoKSkKLSAgICAgICAga2V5VVJM
LnNldFF1ZXJ5KHsgfSk7Ci0gICAga2V5VVJMLnJlbW92ZUZyYWdtZW50SWRlbnRpZmllcigpOwot
ICAgIHJldHVybiBrZXlVUkw7Ci19Ci0KLVJlY29yZERhdGEmIENhY2hlOjphZGRSZWNvcmQoVmVj
dG9yPFJlY29yZERhdGE+KiByZWNvcmRzLCBSZWNvcmQmJiByZWNvcmQpCitSZWNvcmRJbmZvcm1h
dGlvbiYgQ2FjaGU6OmFkZFJlY29yZChWZWN0b3I8UmVjb3JkSW5mb3JtYXRpb24+KiByZWNvcmRz
LCBjb25zdCBSZWNvcmQmIHJlY29yZCkKIHsKICAgICBpZiAoIXJlY29yZHMpIHsKICAgICAgICAg
YXV0byBrZXkgPSBjb21wdXRlS2V5VVJMKHJlY29yZC5yZXF1ZXN0LnVybCgpKTsKICAgICAgICAg
QVNTRVJUKCFtX3JlY29yZHMuY29udGFpbnMoa2V5KSk7Ci0gICAgICAgIHJlY29yZHMgPSAmbV9y
ZWNvcmRzLnNldChrZXksIFZlY3RvcjxSZWNvcmREYXRhPiB7IH0pLml0ZXJhdG9yLT52YWx1ZTsK
KyAgICAgICAgcmVjb3JkcyA9ICZtX3JlY29yZHMuc2V0KGtleSwgVmVjdG9yPFJlY29yZEluZm9y
bWF0aW9uPiB7IH0pLml0ZXJhdG9yLT52YWx1ZTsKICAgICB9Ci0gICAgcmVjb3Jkcy0+YXBwZW5k
KHRvUmVjb3JkRGF0YShXVEZNb3ZlKHJlY29yZCkpKTsKKyAgICByZWNvcmRzLT5hcHBlbmQodG9S
ZWNvcmRJbmZvcm1hdGlvbihyZWNvcmQpKTsKICAgICByZXR1cm4gcmVjb3Jkcy0+bGFzdCgpOwog
fQogCi1WZWN0b3I8UmVjb3JkRGF0YT4qIENhY2hlOjpyZWNvcmRzRnJvbVVSTChjb25zdCBVUkwm
IHVybCkKK1ZlY3RvcjxSZWNvcmRJbmZvcm1hdGlvbj4qIENhY2hlOjpyZWNvcmRzRnJvbVVSTChj
b25zdCBVUkwmIHVybCkKIHsKICAgICBhdXRvIGl0ZXJhdG9yID0gbV9yZWNvcmRzLmZpbmQoY29t
cHV0ZUtleVVSTCh1cmwpKTsKICAgICBpZiAoaXRlcmF0b3IgPT0gbV9yZWNvcmRzLmVuZCgpKQpA
QCAtMjE1LDcgKzI5OCw3IEBAIFZlY3RvcjxSZWNvcmREYXRhPiogQ2FjaGU6OnJlY29yZHNGcm9t
VVJMKGNvbnN0IFVSTCYgdXJsKQogICAgIHJldHVybiAmaXRlcmF0b3ItPnZhbHVlOwogfQogCi1j
b25zdCBWZWN0b3I8UmVjb3JkRGF0YT4qIENhY2hlOjpyZWNvcmRzRnJvbVVSTChjb25zdCBVUkwm
IHVybCkgY29uc3QKK2NvbnN0IFZlY3RvcjxSZWNvcmRJbmZvcm1hdGlvbj4qIENhY2hlOjpyZWNv
cmRzRnJvbVVSTChjb25zdCBVUkwmIHVybCkgY29uc3QKIHsKICAgICBhdXRvIGl0ZXJhdG9yID0g
bV9yZWNvcmRzLmZpbmQoY29tcHV0ZUtleVVSTCh1cmwpKTsKICAgICBpZiAoaXRlcmF0b3IgPT0g
bV9yZWNvcmRzLmVuZCgpKQpAQCAtMjIzLDkgKzMwNiwzMCBAQCBjb25zdCBWZWN0b3I8UmVjb3Jk
RGF0YT4qIENhY2hlOjpyZWNvcmRzRnJvbVVSTChjb25zdCBVUkwmIHVybCkgY29uc3QKICAgICBy
ZXR1cm4gJml0ZXJhdG9yLT52YWx1ZTsKIH0KIAorY2xhc3MgQXN5bmNocm9ub3VzUHV0VGFza0Nv
dW50ZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxBc3luY2hyb25vdXNQdXRUYXNrQ291bnRlcj4gewor
cHVibGljOgorICAgIHN0YXRpYyBSZWZQdHI8QXN5bmNocm9ub3VzUHV0VGFza0NvdW50ZXI+IGNy
ZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBBc3luY2hyb25vdXNQdXRUYXNrQ291bnRlcigp
KTsgfQorICAgIH5Bc3luY2hyb25vdXNQdXRUYXNrQ291bnRlcigpCisgICAgeworICAgICAgICBp
ZiAoIW1fY2FsbGJhY2spCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fY2FsbGJhY2so
V1RGTW92ZShtX2Vycm9yKSk7CisgICAgfQorCisgICAgdm9pZCBvbkNvbXBsZXRpb24oQ29tcGxl
dGlvbkNhbGxiYWNrJiYgY2FsbGJhY2spIHsgbV9jYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2sp
OyB9CisgICAgdm9pZCBzZXRFcnJvcihFcnJvciBlcnJvcikgeyBtX2Vycm9yID0gZXJyb3I7IH0K
KworcHJpdmF0ZToKKyAgICBzdGQ6Om9wdGlvbmFsPEVycm9yPiBtX2Vycm9yOworICAgIENvbXBs
ZXRpb25DYWxsYmFjayBtX2NhbGxiYWNrOworfTsKKwogdm9pZCBDYWNoZTo6cHV0KFZlY3RvcjxS
ZWNvcmQ+JiYgcmVjb3JkcywgUmVjb3JkSWRlbnRpZmllcnNDYWxsYmFjayYmIGNhbGxiYWNrKQog
ewotICAgIGJvb2wgc2hvdWxkV3JpdGVSZWNvcmRMaXN0IHsgZmFsc2UgfTsKKyAgICBBU1NFUlQo
bV9zdGF0ZSA9PSBTdGF0ZTo6T3Blbik7CisKKyAgICBhdXRvIHRhc2tDb3VudGVyID0gQXN5bmNo
cm9ub3VzUHV0VGFza0NvdW50ZXI6OmNyZWF0ZSgpOworCiAgICAgV2ViQ29yZTo6Q2FjaGVRdWVy
eU9wdGlvbnMgb3B0aW9uczsKICAgICBWZWN0b3I8dWludDY0X3Q+IHJlY29yZElkZW50aWZpZXJz
OwogICAgIHJlY29yZElkZW50aWZpZXJzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocmVjb3Jkcy5z
aXplKCkpOwpAQCAtMjM3LDM0ICszNDEsMjEgQEAgdm9pZCBDYWNoZTo6cHV0KFZlY3RvcjxSZWNv
cmQ+JiYgcmVjb3JkcywgUmVjb3JkSWRlbnRpZmllcnNDYWxsYmFjayYmIGNhbGxiYWNrKQogICAg
ICAgICAgICAgcmVjb3JkLmlkZW50aWZpZXIgPSArK21fbmV4dFJlY29yZElkZW50aWZpZXI7CiAg
ICAgICAgICAgICByZWNvcmRJZGVudGlmaWVycy51bmNoZWNrZWRBcHBlbmQocmVjb3JkLmlkZW50
aWZpZXIpOwogCi0gICAgICAgICAgICBzaG91bGRXcml0ZVJlY29yZExpc3QgPSB0cnVlOwotICAg
ICAgICAgICAgYXV0byYgcmVjb3JkVG9Xcml0ZSA9IGFkZFJlY29yZChzYW1lVVJMUmVjb3Jkcywg
V1RGTW92ZShyZWNvcmQpKTsKLSAgICAgICAgICAgIHdyaXRlUmVjb3JkVG9EaXNrKHJlY29yZFRv
V3JpdGUpOworICAgICAgICAgICAgYXV0byYgcmVjb3JkVG9Xcml0ZSA9IGFkZFJlY29yZChzYW1l
VVJMUmVjb3JkcywgcmVjb3JkKTsKKyAgICAgICAgICAgIHdyaXRlUmVjb3JkVG9EaXNrKHJlY29y
ZFRvV3JpdGUsIFdURk1vdmUocmVjb3JkKSwgdGFza0NvdW50ZXIpOwogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgYXV0byBpZGVudGlmaWVyID0gbWF0Y2hpbmdSZWNvcmRzWzBdOwogICAg
ICAgICAgICAgYXV0byBwb3NpdGlvbiA9IHNhbWVVUkxSZWNvcmRzLT5maW5kTWF0Y2hpbmcoWyZd
KGNvbnN0IGF1dG8mIGl0ZW0pIHsgcmV0dXJuIGl0ZW0uaWRlbnRpZmllciA9PSBpZGVudGlmaWVy
OyB9KTsKICAgICAgICAgICAgIEFTU0VSVChwb3NpdGlvbiAhPSBub3RGb3VuZCk7CiAgICAgICAg
ICAgICBpZiAocG9zaXRpb24gIT0gbm90Rm91bmQpIHsKLSAgICAgICAgICAgICAgICBhdXRvJiBl
eGlzdGluZ1JlY29yZCA9ICgqc2FtZVVSTFJlY29yZHMpW3Bvc2l0aW9uXTsKKyAgICAgICAgICAg
ICAgICBhdXRvJiBleGlzdGluZ1JlY29yZCA9IHNhbWVVUkxSZWNvcmRzLT5hdChwb3NpdGlvbik7
CiAgICAgICAgICAgICAgICAgcmVjb3JkSWRlbnRpZmllcnMudW5jaGVja2VkQXBwZW5kKGlkZW50
aWZpZXIpOwotICAgICAgICAgICAgICAgICsrZXhpc3RpbmdSZWNvcmQudXBkYXRlUmVzcG9uc2VD
b3VudGVyOwotCi0gICAgICAgICAgICAgICAgLy8gRklYTUU6IEhhbmRsZSB0aGUgY2FzZSB3aGVy
ZSBkYXRhIGlzIG51bGwuCi0gICAgICAgICAgICAgICAgQVNTRVJUKGV4aXN0aW5nUmVjb3JkLmRh
dGEpOwotICAgICAgICAgICAgICAgIGV4aXN0aW5nUmVjb3JkLmRhdGEtPnJlc3BvbnNlSGVhZGVy
c0d1YXJkID0gcmVjb3JkLnJlc3BvbnNlSGVhZGVyc0d1YXJkOwotICAgICAgICAgICAgICAgIGV4
aXN0aW5nUmVjb3JkLmRhdGEtPnJlc3BvbnNlID0gV1RGTW92ZShyZWNvcmQucmVzcG9uc2UpOwot
ICAgICAgICAgICAgICAgIGV4aXN0aW5nUmVjb3JkLmRhdGEtPnJlc3BvbnNlQm9keSA9IFdURk1v
dmUocmVjb3JkLnJlc3BvbnNlQm9keSk7Ci0gICAgICAgICAgICAgICAgdXBkYXRlVmFyeUluZm9y
bWF0aW9uKGV4aXN0aW5nUmVjb3JkKTsKLSAgICAgICAgICAgICAgICB3cml0ZVJlY29yZFRvRGlz
ayhleGlzdGluZ1JlY29yZCk7CisgICAgICAgICAgICAgICAgdXBkYXRlUmVjb3JkVG9EaXNrKGV4
aXN0aW5nUmVjb3JkLCBXVEZNb3ZlKHJlY29yZCksIHRhc2tDb3VudGVyKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgIH0KIAotICAgIGlmICghc2hvdWxkV3JpdGVSZWNvcmRMaXN0KSB7
Ci0gICAgICAgIGNhbGxiYWNrKFdURk1vdmUocmVjb3JkSWRlbnRpZmllcnMpKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICB3cml0ZVJlY29yZHNMaXN0KFtjYWxsYmFjayA9IFdURk1vdmUo
Y2FsbGJhY2spLCByZWNvcmRJZGVudGlmaWVycyA9IFdURk1vdmUocmVjb3JkSWRlbnRpZmllcnMp
XShzdGQ6Om9wdGlvbmFsPEVycm9yPiYmIGVycm9yKSBtdXRhYmxlIHsKKyAgICB0YXNrQ291bnRl
ci0+b25Db21wbGV0aW9uKFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCByZWNvcmRJZGVu
dGlmaWVycyA9IFdURk1vdmUocmVjb3JkSWRlbnRpZmllcnMpXShzdGQ6Om9wdGlvbmFsPEVycm9y
PiYmIGVycm9yKSBtdXRhYmxlIHsKICAgICAgICAgaWYgKGVycm9yKSB7CiAgICAgICAgICAgICBj
YWxsYmFjayhtYWtlVW5leHBlY3RlZChlcnJvci52YWx1ZSgpKSk7CiAgICAgICAgICAgICByZXR1
cm47CkBAIC0yNzUsNiArMzY2LDggQEAgdm9pZCBDYWNoZTo6cHV0KFZlY3RvcjxSZWNvcmQ+JiYg
cmVjb3JkcywgUmVjb3JkSWRlbnRpZmllcnNDYWxsYmFjayYmIGNhbGxiYWNrKQogCiB2b2lkIENh
Y2hlOjpyZW1vdmUoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYgcmVxdWVzdCwgV2ViQ29yZTo6
Q2FjaGVRdWVyeU9wdGlvbnMmJiBvcHRpb25zLCBSZWNvcmRJZGVudGlmaWVyc0NhbGxiYWNrJiYg
Y2FsbGJhY2spCiB7CisgICAgQVNTRVJUKG1fc3RhdGUgPT0gU3RhdGU6Ok9wZW4pOworCiAgICAg
YXV0byogcmVjb3JkcyA9IHJlY29yZHNGcm9tVVJMKHJlcXVlc3QudXJsKCkpOwogICAgIGF1dG8g
cmVjb3JkSWRlbnRpZmllcnMgPSBxdWVyeUNhY2hlKHJlY29yZHMsIHJlcXVlc3QsIG9wdGlvbnMp
OwogICAgIGlmIChyZWNvcmRJZGVudGlmaWVycy5pc0VtcHR5KCkpIHsKQEAgLTI4OSwzNSArMzgy
LDE1MyBAQCB2b2lkIENhY2hlOjpyZW1vdmUoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYgcmVx
dWVzdCwgV2ViQ29yZTo6Q2FjaGVRdWVyeU9wdGlvbgogICAgICAgICByZXR1cm4gc2hvdWxkUmVt
b3ZlOwogICAgIH0pOwogCi0gICAgd3JpdGVSZWNvcmRzTGlzdChbY2FsbGJhY2sgPSBXVEZNb3Zl
KGNhbGxiYWNrKSwgcmVjb3JkSWRlbnRpZmllcnMgPSBXVEZNb3ZlKHJlY29yZElkZW50aWZpZXJz
KV0oc3RkOjpvcHRpb25hbDxFcnJvcj4mJiBlcnJvcikgbXV0YWJsZSB7Ci0gICAgICAgIGlmIChl
cnJvcikgewotICAgICAgICAgICAgY2FsbGJhY2sobWFrZVVuZXhwZWN0ZWQoZXJyb3IudmFsdWUo
KSkpOworICAgIGNhbGxiYWNrKFdURk1vdmUocmVjb3JkSWRlbnRpZmllcnMpKTsKK30KKwordm9p
ZCBDYWNoZTo6cmVtb3ZlRnJvbVJlY29yZExpc3QoY29uc3QgVmVjdG9yPHVpbnQ2NF90PiYgcmVj
b3JkSWRlbnRpZmllcnMpCit7CisgICAgZm9yIChhdXRvJiByZWNvcmRzIDogbV9yZWNvcmRzLnZh
bHVlcygpKSB7CisgICAgICAgIHJlY29yZHMucmVtb3ZlQWxsTWF0Y2hpbmcoWyZdKGNvbnN0IGF1
dG8mIGl0ZW0pIHsKKyAgICAgICAgICAgIHJldHVybiBub3RGb3VuZCAhPSByZWNvcmRJZGVudGlm
aWVycy5maW5kTWF0Y2hpbmcoWyZdKGNvbnN0IGF1dG8mIGlkZW50aWZpZXIpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoaXRlbS5pZGVudGlmaWVyICE9IGlkZW50aWZpZXIpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICByZW1vdmVSZWNvcmRGcm9tRGlz
ayhpdGVtKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICB9KTsKKyAgICB9Cit9CisKK3ZvaWQgQ2FjaGU6OndyaXRlUmVjb3JkVG9EaXNrKGNv
bnN0IFJlY29yZEluZm9ybWF0aW9uJiByZWNvcmRJbmZvcm1hdGlvbiwgUmVjb3JkJiYgcmVjb3Jk
LCBjb25zdCBSZWZQdHI8QXN5bmNocm9ub3VzUHV0VGFza0NvdW50ZXI+JiBjb3VudGVyKQorewor
ICAgIG1fY2FjaGVzLndyaXRlUmVjb3JkKCp0aGlzLCByZWNvcmRJbmZvcm1hdGlvbiwgV1RGTW92
ZShyZWNvcmQpLCBbY291bnRlcl0oc3RkOjpvcHRpb25hbDxFcnJvcj4mJiBlcnJvcikgeworICAg
ICAgICBBU1NFUlQoIWVycm9yKTsKKyAgICB9KTsKK30KKwordm9pZCBDYWNoZTo6dXBkYXRlUmVj
b3JkVG9EaXNrKFJlY29yZEluZm9ybWF0aW9uJiBleGlzdGluZ1JlY29yZCwgUmVjb3JkJiYgcmVj
b3JkLCBjb25zdCBSZWZQdHI8QXN5bmNocm9ub3VzUHV0VGFza0NvdW50ZXI+JiB0YXNrQ291bnRl
cikKK3sKKyAgICArK2V4aXN0aW5nUmVjb3JkLnVwZGF0ZVJlc3BvbnNlQ291bnRlcjsKKyAgICBy
ZWFkUmVjb3JkRnJvbURpc2soZXhpc3RpbmdSZWNvcmQsIFtjYWNoZXMgPSBtYWtlUmVmKG1fY2Fj
aGVzKSwgaWRlbnRpZmllciA9IG1faWRlbnRpZmllciwgcmVjb3JkSWRlbnRpZmllciA9IGV4aXN0
aW5nUmVjb3JkLmlkZW50aWZpZXIsIHJlY29yZCA9IFdURk1vdmUocmVjb3JkKSwgdGFza0NvdW50
ZXJdKEV4cGVjdGVkPFJlY29yZCwgRXJyb3I+JiYgcmVzdWx0KSBtdXRhYmxlIHsKKyAgICAgICAg
aWYgKCFyZXN1bHQuaGFzVmFsdWUoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKHJlY29yZElkZW50aWZpZXJzKSk7CisKKyAgICAgICAg
YXV0byogY2FjaGUgPSBjYWNoZXMtPmZpbmQoaWRlbnRpZmllcik7CisgICAgICAgIGlmICghY2Fj
aGUpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgYXV0byogc2FtZVVSTFJlY29yZHMg
PSBjYWNoZS0+cmVjb3Jkc0Zyb21VUkwocmVzdWx0LnZhbHVlKCkucmVxdWVzdC51cmwoKSk7Cisg
ICAgICAgIGlmICghc2FtZVVSTFJlY29yZHMpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgYXV0byBwb3NpdGlvbiA9IHNhbWVVUkxSZWNvcmRzLT5maW5kTWF0Y2hpbmcoWyZdIChjb25z
dCBhdXRvJiBpdGVtKSB7IHJldHVybiBpdGVtLmlkZW50aWZpZXIgPT0gcmVjb3JkSWRlbnRpZmll
cjsgfSk7CisgICAgICAgIGlmIChwb3NpdGlvbiA9PSBub3RGb3VuZCkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgYXV0byYgcmVjb3JkSW5mbyA9IHNhbWVVUkxSZWNvcmRzLT5hdChwb3Np
dGlvbik7CisKKyAgICAgICAgYXV0byYgcmVjb3JkRnJvbURpc2sgPSByZXN1bHQudmFsdWUoKTsK
KyAgICAgICAgcmVjb3JkLnJlcXVlc3RIZWFkZXJzR3VhcmQgPSByZWNvcmRGcm9tRGlzay5yZXF1
ZXN0SGVhZGVyc0d1YXJkOworICAgICAgICByZWNvcmQucmVxdWVzdCA9IFdURk1vdmUocmVjb3Jk
RnJvbURpc2sucmVxdWVzdCk7CisgICAgICAgIHJlY29yZC5vcHRpb25zID0gV1RGTW92ZShyZWNv
cmRGcm9tRGlzay5vcHRpb25zKTsKKyAgICAgICAgcmVjb3JkLnJlZmVycmVyID0gV1RGTW92ZShy
ZWNvcmRGcm9tRGlzay5yZWZlcnJlcik7CisKKyAgICAgICAgdXBkYXRlVmFyeUluZm9ybWF0aW9u
KHJlY29yZEluZm8sIHJlY29yZC5yZXF1ZXN0LCByZWNvcmQucmVzcG9uc2UpOworCisgICAgICAg
IGNhY2hlLT53cml0ZVJlY29yZFRvRGlzayhyZWNvcmRJbmZvLCBXVEZNb3ZlKHJlY29yZCksIHRh
c2tDb3VudGVyKTsKICAgICB9KTsKIH0KIAotdm9pZCBDYWNoZTo6cmVhZFJlY29yZHNMaXN0KENv
bXBsZXRpb25DYWxsYmFjayYmIGNhbGxiYWNrKQordm9pZCBDYWNoZTo6cmVhZFJlY29yZEZyb21E
aXNrKGNvbnN0IFJlY29yZEluZm9ybWF0aW9uJiByZWNvcmQsIFdURjo6RnVuY3Rpb248dm9pZChF
eHBlY3RlZDxSZWNvcmQsIEVycm9yPiYmKT4mJiBjYWxsYmFjaykKIHsKLSAgICAvLyBGSVhNRTog
SW1wbGVtZW50IHRoaXMuCi0gICAgY2FsbGJhY2soc3RkOjpudWxsb3B0KTsKKyAgICBtX2NhY2hl
cy5yZWFkUmVjb3JkKHJlY29yZC5rZXksIFdURk1vdmUoY2FsbGJhY2spKTsKIH0KIAotdm9pZCBD
YWNoZTo6d3JpdGVSZWNvcmRzTGlzdChDb21wbGV0aW9uQ2FsbGJhY2smJiBjYWxsYmFjaykKK3Zv
aWQgQ2FjaGU6OnJlbW92ZVJlY29yZEZyb21EaXNrKGNvbnN0IFJlY29yZEluZm9ybWF0aW9uJiBy
ZWNvcmQpCiB7Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgotICAgIGNhbGxiYWNrKHN0
ZDo6bnVsbG9wdCk7CisgICAgbV9jYWNoZXMucmVtb3ZlUmVjb3JkKHJlY29yZC5rZXkpOworfQor
CitTdG9yYWdlOjpSZWNvcmQgQ2FjaGU6OmVuY29kZShjb25zdCBSZWNvcmRJbmZvcm1hdGlvbiYg
cmVjb3JkSW5mb3JtYXRpb24sIGNvbnN0IFJlY29yZCYgcmVjb3JkKQoreworICAgIFdURjo6UGVy
c2lzdGVuY2U6OkVuY29kZXIgZW5jb2RlcjsKKyAgICBlbmNvZGVyIDw8IHJlY29yZEluZm9ybWF0
aW9uLmluc2VydGlvblRpbWU7CisgICAgZW5jb2RlciA8PCByZWNvcmQucmVxdWVzdEhlYWRlcnNH
dWFyZDsKKyAgICByZWNvcmQucmVxdWVzdC5lbmNvZGVXaXRob3V0UGxhdGZvcm1EYXRhKGVuY29k
ZXIpOworICAgIGVuY29kZXIgPDwgcmVjb3JkLm9wdGlvbnM7CisgICAgZW5jb2RlciA8PCByZWNv
cmQucmVmZXJyZXI7CisKKyAgICBlbmNvZGVyIDw8IHJlY29yZC5yZXNwb25zZUhlYWRlcnNHdWFy
ZDsKKyAgICBlbmNvZGVyIDw8IHJlY29yZC5yZXNwb25zZTsKKworICAgIGVuY29kZXIuZW5jb2Rl
Q2hlY2tzdW0oKTsKKworICAgIERhdGEgaGVhZGVyKGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIu
YnVmZmVyU2l6ZSgpKTsKKyAgICBEYXRhIGJvZHk7CisgICAgV1RGOjpzd2l0Y2hPbihyZWNvcmQu
cmVzcG9uc2VCb2R5LCBbXShjb25zdCBSZWY8V2ViQ29yZTo6Rm9ybURhdGE+JiBmb3JtRGF0YSkg
eworICAgICAgICAvLyBGSVhNRTogU3RvcmUgZm9ybSBkYXRhIGJvZHkuCisgICAgfSwgWyZdKGNv
bnN0IFJlZjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+JiBidWZmZXIpIHsKKyAgICAgICAgYm9keSA9
IHsgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oYnVmZmVyLT5kYXRhKCkpLCBidWZm
ZXItPnNpemUoKSB9OworICAgIH0sIFtdKGNvbnN0IHN0ZDo6bnVsbHB0cl90JikgeworICAgIH0p
OworCisgICAgcmV0dXJuIHsgcmVjb3JkSW5mb3JtYXRpb24ua2V5LCB7IH0sIGhlYWRlciwgYm9k
eSwgeyB9IH07Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RkOjpvcHRpb25hbDxzdGQ6OnBhaXI8UmVj
b3JkLCBkb3VibGU+PiBkZWNvZGVSZWNvcmRIZWFkZXIoY29uc3QgU3RvcmFnZTo6UmVjb3JkJiBz
dG9yYWdlKQoreworICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlcihzdG9yYWdl
LmhlYWRlci5kYXRhKCksIHN0b3JhZ2UuaGVhZGVyLnNpemUoKSk7CisKKyAgICBSZWNvcmQgcmVj
b3JkOworCisgICAgZG91YmxlIGluc2VydGlvblRpbWU7CisgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShpbnNlcnRpb25UaW1lKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUocmVjb3JkLnJlcXVlc3RIZWFkZXJzR3VhcmQpKQorICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgaWYgKCFyZWNvcmQucmVxdWVzdC5kZWNvZGVXaXRo
b3V0UGxhdGZvcm1EYXRhKGRlY29kZXIpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owor
CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZWNvcmQub3B0aW9ucykpCisgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlY29yZC5yZWZlcnJl
cikpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKHJlY29yZC5yZXNwb25zZUhlYWRlcnNHdWFyZCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlY29yZC5yZXNwb25zZSkpCisgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBpZiAoIWRlY29kZXIudmVyaWZ5Q2hlY2tz
dW0oKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHJldHVybiBzdGQ6Om1h
a2VfcGFpcihXVEZNb3ZlKHJlY29yZCksIGluc2VydGlvblRpbWUpOwogfQogCi12b2lkIENhY2hl
Ojp3cml0ZVJlY29yZFRvRGlzayhSZWNvcmREYXRhJikKK3N0ZDo6b3B0aW9uYWw8UmVjb3JkPiBD
YWNoZTo6ZGVjb2RlKGNvbnN0IFN0b3JhZ2U6OlJlY29yZCYgc3RvcmFnZSkKIHsKLSAgICAvLyBG
SVhNRTogSW1wbGVtZW50IHRoaXMuCisgICAgYXV0byByZXN1bHQgPSBkZWNvZGVSZWNvcmRIZWFk
ZXIoc3RvcmFnZSk7CisKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKKworICAgIGF1dG8gcmVjb3JkID0gV1RGTW92ZShyZXN1bHQtPmZpcnN0KTsKKyAgICBy
ZWNvcmQucmVzcG9uc2VCb2R5ID0gV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpjcmVhdGUoc3RvcmFn
ZS5ib2R5LmRhdGEoKSwgc3RvcmFnZS5ib2R5LnNpemUoKSk7CisKKyAgICByZXR1cm4gcmVjb3Jk
OwogfQogCi12b2lkIENhY2hlOjpyZW1vdmVSZWNvcmRGcm9tRGlzayhSZWNvcmREYXRhJikKK1Zl
Y3RvcjxLZXk+IENhY2hlOjprZXlzKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50
IHRoaXMuCisgICAgVmVjdG9yPEtleT4ga2V5czsKKyAgICBmb3IgKGF1dG8mIHJlY29yZHMgOiBt
X3JlY29yZHMudmFsdWVzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvJiByZWNvcmQgOiByZWNvcmRz
KQorICAgICAgICAgICAga2V5cy5hcHBlbmQocmVjb3JkLmtleSk7CisgICAgfQorICAgIHJldHVy
biBrZXlzOwogfQogCiB9IC8vIG5hbWVzcGFjZSBDYWNoZVN0b3JhZ2UKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUu
aCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5l
Q2FjaGUuaAppbmRleCBjOWYwZDgwZTU0Yjc2ZTIwNDJlMTNjOWU0MDVjOWQ1NTI3M2QxMjY1Li41
OWEwNmFkZDJjZjdmMDdjNWI1YTRmMzA2NWU1NTk1MWVhZGZjYjlhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlLmgK
KysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdp
bmVDYWNoZS5oCkBAIC0yNSw3ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAi
TmV0d29ya0NhY2hlS2V5LmgiCisjaW5jbHVkZSAiTmV0d29ya0NhY2hlU3RvcmFnZS5oIgogI2lu
Y2x1ZGUgPFdlYkNvcmUvRE9NQ2FjaGVFbmdpbmUuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBAIC0zNiw3ICszNiw3IEBAIG5hbWVz
cGFjZSBDYWNoZVN0b3JhZ2UgewogCiBjbGFzcyBDYWNoZXM7CiAKLXN0cnVjdCBSZWNvcmREYXRh
IHsKK3N0cnVjdCBSZWNvcmRJbmZvcm1hdGlvbiB7CiAgICAgTmV0d29ya0NhY2hlOjpLZXkga2V5
OwogICAgIGRvdWJsZSBpbnNlcnRpb25UaW1lIHsgMCB9OwogCkBAIC00Niw1OCArNDYsNjEgQEAg
c3RydWN0IFJlY29yZERhdGEgewogICAgIFdlYkNvcmU6OlVSTCB1cmw7CiAgICAgYm9vbCBoYXNW
YXJ5U3RhciB7IGZhbHNlIH07CiAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gdmFyeUhlYWRl
cnM7Ci0KLSAgICBzdHJ1Y3QgRGF0YSB7Ci0gICAgICAgIFdlYkNvcmU6OkZldGNoSGVhZGVyczo6
R3VhcmQgcmVxdWVzdEhlYWRlcnNHdWFyZDsKLSAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0IHJlcXVlc3Q7Ci0gICAgICAgIFdlYkNvcmU6OkZldGNoT3B0aW9ucyBvcHRpb25zOwotICAg
ICAgICBTdHJpbmcgcmVmZXJyZXI7Ci0KLSAgICAgICAgV2ViQ29yZTo6RmV0Y2hIZWFkZXJzOjpH
dWFyZCByZXNwb25zZUhlYWRlcnNHdWFyZDsKLSAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXNw
b25zZSByZXNwb25zZTsKLSAgICAgICAgV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OlJlc3BvbnNl
Qm9keSByZXNwb25zZUJvZHk7Ci0gICAgfTsKLQotICAgIHN0ZDo6b3B0aW9uYWw8RGF0YT4gZGF0
YTsKIH07CiAKK2NsYXNzIEFzeW5jaHJvbm91c1B1dFRhc2tDb3VudGVyOworY2xhc3MgUmVhZFJl
Y29yZFRhc2tDb3VudGVyOworCiBjbGFzcyBDYWNoZSB7CiBwdWJsaWM6CiAgICAgZW51bSBjbGFz
cyBTdGF0ZSB7IFVuaW5pdGlhbGl6ZWQsIE9wZW5pbmcsIE9wZW4gfTsKLSAgICBDYWNoZShDYWNo
ZXMmLCB1aW50NjRfdCBpZGVudGlmaWVyLCBTdGF0ZSwgU3RyaW5nJiYgbmFtZSk7CisgICAgQ2Fj
aGUoQ2FjaGVzJiwgdWludDY0X3QgaWRlbnRpZmllciwgU3RhdGUsIFN0cmluZyYmIG5hbWUsIFN0
cmluZyYmIHVuaXF1ZU5hbWUpOwogCisgICAgYm9vbCBpc09wZW5lZCgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdGUgPT0gU3RhdGU6Ok9wZW47IH0KICAgICB2b2lkIG9wZW4oV2ViQ29yZTo6RE9NQ2Fj
aGVFbmdpbmU6OkNvbXBsZXRpb25DYWxsYmFjayYmKTsKIAogICAgIHVpbnQ2NF90IGlkZW50aWZp
ZXIoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KICAgICBjb25zdCBTdHJpbmcmIG5h
bWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KKyAgICBjb25zdCBTdHJpbmcmIHVuaXF1ZU5h
bWUoKSBjb25zdCB7IHJldHVybiBtX3VuaXF1ZU5hbWU7IH0KICAgICBib29sIGlzQWN0aXZlKCkg
Y29uc3QgeyByZXR1cm4gbV9zdGF0ZSAhPSBTdGF0ZTo6VW5pbml0aWFsaXplZDsgfQogCi0gICAg
VmVjdG9yPFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpSZWNvcmQ+IHJldHJpZXZlUmVjb3Jkcyhj
b25zdCBXZWJDb3JlOjpVUkwmKSBjb25zdDsKKyAgICB2b2lkIHJldHJpZXZlUmVjb3Jkcyhjb25z
dCBXZWJDb3JlOjpVUkwmLCBXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6UmVjb3Jkc0NhbGxiYWNr
JiYpOwogICAgIFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpDYWNoZUluZm8gaW5mbygpIGNvbnN0
IHsgcmV0dXJuIHsgbV9pZGVudGlmaWVyLCBtX25hbWUgfTsgfQogCiAgICAgdm9pZCBwdXQoVmVj
dG9yPFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpSZWNvcmQ+JiYsIFdlYkNvcmU6OkRPTUNhY2hl
RW5naW5lOjpSZWNvcmRJZGVudGlmaWVyc0NhbGxiYWNrJiYpOwogICAgIHZvaWQgcmVtb3ZlKFdl
YkNvcmU6OlJlc291cmNlUmVxdWVzdCYmLCBXZWJDb3JlOjpDYWNoZVF1ZXJ5T3B0aW9ucyYmLCBX
ZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6UmVjb3JkSWRlbnRpZmllcnNDYWxsYmFjayYmKTsKIAor
ICAgIFZlY3RvcjxOZXR3b3JrQ2FjaGU6OktleT4ga2V5cygpIGNvbnN0OworCiAgICAgdm9pZCBk
aXNwb3NlKCk7CiAgICAgdm9pZCBjbGVhck1lbW9yeVJlcHJlc2VudGF0aW9uKCk7Ci0gCisKKyAg
ICBzdGF0aWMgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6UmVjb3JkPiBk
ZWNvZGUoY29uc3QgTmV0d29ya0NhY2hlOjpTdG9yYWdlOjpSZWNvcmQmKTsKKyAgICBzdGF0aWMg
TmV0d29ya0NhY2hlOjpTdG9yYWdlOjpSZWNvcmQgZW5jb2RlKGNvbnN0IFJlY29yZEluZm9ybWF0
aW9uJiwgY29uc3QgV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OlJlY29yZCYpOworCiBwcml2YXRl
OgotICAgIFZlY3RvcjxSZWNvcmREYXRhPiogcmVjb3Jkc0Zyb21VUkwoY29uc3QgV2ViQ29yZTo6
VVJMJik7Ci0gICAgY29uc3QgVmVjdG9yPFJlY29yZERhdGE+KiByZWNvcmRzRnJvbVVSTChjb25z
dCBXZWJDb3JlOjpVUkwmKSBjb25zdDsKLSAgICBSZWNvcmREYXRhJiBhZGRSZWNvcmQoVmVjdG9y
PFJlY29yZERhdGE+KiwgV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OlJlY29yZCYmKTsKKyAgICBW
ZWN0b3I8UmVjb3JkSW5mb3JtYXRpb24+KiByZWNvcmRzRnJvbVVSTChjb25zdCBXZWJDb3JlOjpV
UkwmKTsKKyAgICBjb25zdCBWZWN0b3I8UmVjb3JkSW5mb3JtYXRpb24+KiByZWNvcmRzRnJvbVVS
TChjb25zdCBXZWJDb3JlOjpVUkwmKSBjb25zdDsKKyAgICBSZWNvcmRJbmZvcm1hdGlvbiYgYWRk
UmVjb3JkKFZlY3RvcjxSZWNvcmRJbmZvcm1hdGlvbj4qLCBjb25zdCBXZWJDb3JlOjpET01DYWNo
ZUVuZ2luZTo6UmVjb3JkJik7CisKKyAgICBSZWNvcmRJbmZvcm1hdGlvbiB0b1JlY29yZEluZm9y
bWF0aW9uKGNvbnN0IFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpSZWNvcmQmKTsKIAogICAgIHZv
aWQgZmluaXNoT3BlbmluZyhXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6Q29tcGxldGlvbkNhbGxi
YWNrJiYsIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OkVycm9yPiYmKTsK
KyAgICB2b2lkIHJldHJpZXZlUmVjb3JkKGNvbnN0IFJlY29yZEluZm9ybWF0aW9uJiwgUmVmUHRy
PFJlYWRSZWNvcmRUYXNrQ291bnRlcj4mKTsKIAogICAgIHZvaWQgcmVhZFJlY29yZHNMaXN0KFdl
YkNvcmU6OkRPTUNhY2hlRW5naW5lOjpDb21wbGV0aW9uQ2FsbGJhY2smJik7Ci0gICAgdm9pZCB3
cml0ZVJlY29yZHNMaXN0KFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpDb21wbGV0aW9uQ2FsbGJh
Y2smJik7Ci0gICAgdm9pZCB3cml0ZVJlY29yZFRvRGlzayhSZWNvcmREYXRhJik7Ci0gICAgdm9p
ZCByZW1vdmVSZWNvcmRGcm9tRGlzayhSZWNvcmREYXRhJik7CisgICAgdm9pZCB3cml0ZVJlY29y
ZFRvRGlzayhjb25zdCBSZWNvcmRJbmZvcm1hdGlvbiYsIFdlYkNvcmU6OkRPTUNhY2hlRW5naW5l
OjpSZWNvcmQmJiwgY29uc3QgUmVmUHRyPEFzeW5jaHJvbm91c1B1dFRhc2tDb3VudGVyPiYpOwor
ICAgIHZvaWQgdXBkYXRlUmVjb3JkVG9EaXNrKFJlY29yZEluZm9ybWF0aW9uJiwgV2ViQ29yZTo6
RE9NQ2FjaGVFbmdpbmU6OlJlY29yZCYmLCBjb25zdCBSZWZQdHI8QXN5bmNocm9ub3VzUHV0VGFz
a0NvdW50ZXI+Jik7CisgICAgdm9pZCByZW1vdmVSZWNvcmRGcm9tRGlzayhjb25zdCBSZWNvcmRJ
bmZvcm1hdGlvbiYpOworICAgIHZvaWQgcmVhZFJlY29yZEZyb21EaXNrKGNvbnN0IFJlY29yZElu
Zm9ybWF0aW9uJiwgV1RGOjpGdW5jdGlvbjx2b2lkKEV4cGVjdGVkPFdlYkNvcmU6OkRPTUNhY2hl
RW5naW5lOjpSZWNvcmQsIFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpFcnJvcj4mJik+JiYpOwor
ICAgIHZvaWQgcmVtb3ZlRnJvbVJlY29yZExpc3QoY29uc3QgVmVjdG9yPHVpbnQ2NF90PiYpOwog
CiAgICAgQ2FjaGVzJiBtX2NhY2hlczsKICAgICBTdGF0ZSBtX3N0YXRlOwogICAgIHVpbnQ2NF90
IG1faWRlbnRpZmllciB7IDAgfTsKICAgICBTdHJpbmcgbV9uYW1lOwotICAgIEhhc2hNYXA8U3Ry
aW5nLCBWZWN0b3I8UmVjb3JkRGF0YT4+IG1fcmVjb3JkczsKKyAgICBTdHJpbmcgbV91bmlxdWVO
YW1lOworICAgIEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8UmVjb3JkSW5mb3JtYXRpb24+PiBtX3Jl
Y29yZHM7CiAgICAgdWludDY0X3QgbV9uZXh0UmVjb3JkSWRlbnRpZmllciB7IDAgfTsKICAgICBW
ZWN0b3I8V2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OkNvbXBsZXRpb25DYWxsYmFjaz4gbV9wZW5k
aW5nT3BlbmluZ0NhbGxiYWNrczsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5jcHAKaW5k
ZXggYjMxZTI4OTc3ZGVkMWM0NzBjNjk2OTViMDM4Y2JiNDVjNGEzZjVjNy4uMjA3YjdkNmZkNmFh
ODIyNTE1ZmM2NjYyMjhmMTkyODNlNDA0M2UzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVz
LmNwcApAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIkNhY2hlU3RvcmFnZUVuZ2luZS5oIgog
CiAjaW5jbHVkZSAiTmV0d29ya0NhY2hlQ29kZXJzLmgiCisjaW5jbHVkZSA8d3RmL1VVSUQuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOjpET01DYWNoZUVuZ2luZTsKQEAgLTU5LDcgKzYwLDE0IEBAIENhY2hlczo6Q2FjaGVz
KEVuZ2luZSYgZW5naW5lLCBTdHJpbmcmJiBvcmlnaW4pCiAKIHZvaWQgQ2FjaGVzOjppbml0aWFs
aXplKFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpDb21wbGV0aW9uQ2FsbGJhY2smJiBjYWxsYmFj
aykKIHsKLSAgICBpZiAobV9pc0luaXRpYWxpemVkIHx8IG1fcm9vdFBhdGguaXNOdWxsKCkpIHsK
KyAgICBpZiAobV9pc0luaXRpYWxpemVkKSB7CisgICAgICAgIGNhbGxiYWNrKHN0ZDo6bnVsbG9w
dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9yb290UGF0aC5pc051bGwo
KSkgeworICAgICAgICBtYWtlRGlydHkoKTsKKyAgICAgICAgbV9pc0luaXRpYWxpemVkID0gdHJ1
ZTsKICAgICAgICAgY2FsbGJhY2soc3RkOjpudWxsb3B0KTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KQEAgLTc1LDYgKzgzLDcgQEAgdm9pZCBDYWNoZXM6OmluaXRpYWxpemUoV2ViQ29yZTo6RE9N
Q2FjaGVFbmdpbmU6OkNvbXBsZXRpb25DYWxsYmFjayYmIGNhbGxiYWNrKQogICAgICAgICByZXR1
cm47CiAgICAgfQogICAgIG1fc3RvcmFnZSA9IHN0b3JhZ2UucmVsZWFzZU5vbk51bGwoKTsKKyAg
ICBtX3N0b3JhZ2UtPndyaXRlV2l0aG91dFdhaXRpbmcoKTsKICAgICByZWFkQ2FjaGVzRnJvbURp
c2soW3RoaXMsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKEV4cGVjdGVkPFZlY3RvcjxD
YWNoZT4sIEVycm9yPiYmIHJlc3VsdCkgewogICAgICAgICBtYWtlRGlydHkoKTsKIApAQCAtMTIw
LDcgKzEyOSw5IEBAIENhY2hlKiBDYWNoZXM6OmZpbmQodWludDY0X3QgaWRlbnRpZmllcikKIAog
dm9pZCBDYWNoZXM6Om9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBDYWNoZUlkZW50aWZpZXJDYWxs
YmFjayYmIGNhbGxiYWNrKQogeworICAgIEFTU0VSVChtX2lzSW5pdGlhbGl6ZWQpOwogICAgIEFT
U0VSVChtX2VuZ2luZSk7CisKICAgICBpZiAoYXV0byogY2FjaGUgPSBmaW5kKG5hbWUpKSB7CiAg
ICAgICAgIGNhY2hlLT5vcGVuKFtjYWNoZUlkZW50aWZpZXIgPSBjYWNoZS0+aWRlbnRpZmllcigp
LCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShzdGQ6Om9wdGlvbmFsPEVycm9yPiYmIGVy
cm9yKSBtdXRhYmxlIHsKICAgICAgICAgICAgIGlmIChlcnJvcikgewpAQCAtMTM1LDcgKzE0Niw3
IEBAIHZvaWQgQ2FjaGVzOjpvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgQ2FjaGVJZGVudGlmaWVy
Q2FsbGJhY2smJiBjYWxsYmFjaykKICAgICBtYWtlRGlydHkoKTsKIAogICAgIHVpbnQ2NF90IGNh
Y2hlSWRlbnRpZmllciA9IG1fZW5naW5lLT5uZXh0Q2FjaGVJZGVudGlmaWVyKCk7Ci0gICAgbV9j
YWNoZXMuYXBwZW5kKENhY2hlIHsgKnRoaXMsIGNhY2hlSWRlbnRpZmllciwgQ2FjaGU6OlN0YXRl
OjpPcGVuLCBTdHJpbmcgeyBuYW1lIH0gfSk7CisgICAgbV9jYWNoZXMuYXBwZW5kKENhY2hlIHsg
KnRoaXMsIGNhY2hlSWRlbnRpZmllciwgQ2FjaGU6OlN0YXRlOjpPcGVuLCBTdHJpbmcgeyBuYW1l
IH0sIGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKSB9KTsKIAogICAgIHdyaXRlQ2FjaGVzVG9E
aXNrKFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBjYWNoZUlkZW50aWZpZXJdKHN0ZDo6
b3B0aW9uYWw8RXJyb3I+JiYgZXJyb3IpIG11dGFibGUgewogICAgICAgICBjYWxsYmFjayhDYWNo
ZUlkZW50aWZpZXJPcGVyYXRpb25SZXN1bHQgeyBjYWNoZUlkZW50aWZpZXIsICEhZXJyb3IgfSk7
CkBAIC0xNDQsNiArMTU1LDcgQEAgdm9pZCBDYWNoZXM6Om9wZW4oY29uc3QgU3RyaW5nJiBuYW1l
LCBDYWNoZUlkZW50aWZpZXJDYWxsYmFjayYmIGNhbGxiYWNrKQogCiB2b2lkIENhY2hlczo6cmVt
b3ZlKHVpbnQ2NF90IGlkZW50aWZpZXIsIENhY2hlSWRlbnRpZmllckNhbGxiYWNrJiYgY2FsbGJh
Y2spCiB7CisgICAgQVNTRVJUKG1faXNJbml0aWFsaXplZCk7CiAgICAgQVNTRVJUKG1fZW5naW5l
KTsKIAogICAgIGF1dG8gcG9zaXRpb24gPSBtX2NhY2hlcy5maW5kTWF0Y2hpbmcoWyZdKGNvbnN0
IGF1dG8mIGl0ZW0pIHsgcmV0dXJuIGl0ZW0uaWRlbnRpZmllcigpID09IGlkZW50aWZpZXI7IH0p
OwpAQCAtMTY4LDYgKzE4MCw5IEBAIHZvaWQgQ2FjaGVzOjpkaXNwb3NlKENhY2hlJiBjYWNoZSkK
IHsKICAgICBhdXRvIHBvc2l0aW9uID0gbV9yZW1vdmVkQ2FjaGVzLmZpbmRNYXRjaGluZyhbJl0o
Y29uc3QgYXV0byYgaXRlbSkgeyByZXR1cm4gaXRlbS5pZGVudGlmaWVyKCkgPT0gY2FjaGUuaWRl
bnRpZmllcigpOyB9KTsKICAgICBpZiAocG9zaXRpb24gIT0gbm90Rm91bmQpIHsKKyAgICAgICAg
aWYgKG1fc3RvcmFnZSkKKyAgICAgICAgICAgIG1fc3RvcmFnZS0+cmVtb3ZlKGNhY2hlLmtleXMo
KSwgeyB9KTsKKwogICAgICAgICBtX3JlbW92ZWRDYWNoZXMucmVtb3ZlKHBvc2l0aW9uKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE4NCwxMyArMTk5LDE1IEBAIHN0YXRpYyBpbmxpbmUg
RGF0YSBlbmNvZGVDYWNoZU5hbWVzKGNvbnN0IFZlY3RvcjxDYWNoZT4mIGNhY2hlcykKIAogICAg
IHVpbnQ2NF90IHNpemUgPSBjYWNoZXMuc2l6ZSgpOwogICAgIGVuY29kZXIgPDwgc2l6ZTsKLSAg
ICBmb3IgKGF1dG8mIGNhY2hlIDogY2FjaGVzKQorICAgIGZvciAoYXV0byYgY2FjaGUgOiBjYWNo
ZXMpIHsKICAgICAgICAgZW5jb2RlciA8PCBjYWNoZS5uYW1lKCk7CisgICAgICAgIGVuY29kZXIg
PDwgY2FjaGUudW5pcXVlTmFtZSgpOworICAgIH0KIAogICAgIHJldHVybiBEYXRhIHsgZW5jb2Rl
ci5idWZmZXIoKSwgZW5jb2Rlci5idWZmZXJTaXplKCkgfTsKIH0KIAotc3RhdGljIGlubGluZSBF
eHBlY3RlZDxWZWN0b3I8U3RyaW5nPiwgRXJyb3I+IGRlY29kZUNhY2hlc05hbWVzKGNvbnN0IERh
dGEmIGRhdGEsIGludCBlcnJvcikKK3N0YXRpYyBpbmxpbmUgRXhwZWN0ZWQ8VmVjdG9yPHN0ZDo6
cGFpcjxTdHJpbmcsIFN0cmluZz4+LCBFcnJvcj4gZGVjb2RlQ2FjaGVzTmFtZXMoY29uc3QgRGF0
YSYgZGF0YSwgaW50IGVycm9yKQogewogICAgIGlmIChlcnJvcikKICAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKEVycm9yOjpSZWFkRGlzayk7CkBAIC0yMDAsMTQgKzIxNywxNyBAQCBzdGF0
aWMgaW5saW5lIEV4cGVjdGVkPFZlY3RvcjxTdHJpbmc+LCBFcnJvcj4gZGVjb2RlQ2FjaGVzTmFt
ZXMoY29uc3QgRGF0YSYgZGF0YQogICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY291bnQpKQogICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoRXJyb3I6OlJlYWREaXNrKTsKIAotICAgIFZlY3Rv
cjxTdHJpbmc+IG5hbWVzOworICAgIFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+PiBu
YW1lczsKICAgICBuYW1lcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGNvdW50KTsKICAgICBmb3Ig
KHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgY291bnQ7ICsraW5kZXgpIHsKICAgICAgICAgU3Ry
aW5nIG5hbWU7CiAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobmFtZSkpCiAgICAgICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoRXJyb3I6OlJlYWREaXNrKTsKKyAgICAgICAgU3RyaW5n
IHVuaXF1ZU5hbWU7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUodW5pcXVlTmFtZSkpCisg
ICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoRXJyb3I6OlJlYWREaXNrKTsKIAotICAg
ICAgICBuYW1lcy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShuYW1lKSk7CisgICAgICAgIG5hbWVz
LnVuY2hlY2tlZEFwcGVuZChzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+IHsgV1RGTW92ZShuYW1l
KSwgV1RGTW92ZSh1bmlxdWVOYW1lKSB9KTsKICAgICB9CiAgICAgcmV0dXJuIG5hbWVzOwogfQpA
QCAtMjQwLDggKzI2MCw4IEBAIHZvaWQgQ2FjaGVzOjpyZWFkQ2FjaGVzRnJvbURpc2soV1RGOjpG
dW5jdGlvbjx2b2lkKEV4cGVjdGVkPFZlY3RvcjxDYWNoZT4sIEVycm9yCiAgICAgICAgICAgICBj
YWxsYmFjayhtYWtlVW5leHBlY3RlZChyZXN1bHQuZXJyb3IoKSkpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9Ci0gICAgICAgIGNhbGxiYWNrKFdURjo6bWFwKFdURk1vdmUocmVzdWx0
LnZhbHVlKCkpLCBbdGhpc10gKFN0cmluZyYmIG5hbWUpIHsKLSAgICAgICAgICAgIHJldHVybiBD
YWNoZSB7ICp0aGlzLCBtX2VuZ2luZS0+bmV4dENhY2hlSWRlbnRpZmllcigpLCBDYWNoZTo6U3Rh
dGU6OlVuaW5pdGlhbGl6ZWQsIFdURk1vdmUobmFtZSkgfTsKKyAgICAgICAgY2FsbGJhY2soV1RG
OjptYXAoV1RGTW92ZShyZXN1bHQudmFsdWUoKSksIFt0aGlzXSAoYXV0byYmIHBhaXIpIHsKKyAg
ICAgICAgICAgIHJldHVybiBDYWNoZSB7ICp0aGlzLCBtX2VuZ2luZS0+bmV4dENhY2hlSWRlbnRp
ZmllcigpLCBDYWNoZTo6U3RhdGU6OlVuaW5pdGlhbGl6ZWQsIFdURk1vdmUocGFpci5maXJzdCks
IFdURk1vdmUocGFpci5zZWNvbmQpIH07CiAgICAgICAgIH0pKTsKICAgICB9KTsKIH0KQEAgLTI2
NiwxNCArMjg2LDgyIEBAIHZvaWQgQ2FjaGVzOjp3cml0ZUNhY2hlc1RvRGlzayhDb21wbGV0aW9u
Q2FsbGJhY2smJiBjYWxsYmFjaykKICAgICB9KTsKIH0KIAordm9pZCBDYWNoZXM6OnJlYWRSZWNv
cmRzTGlzdChDYWNoZSYgY2FjaGUsIE5ldHdvcmtDYWNoZTo6U3RvcmFnZTo6VHJhdmVyc2VIYW5k
bGVyJiYgY2FsbGJhY2spCit7CisgICAgQVNTRVJUKG1faXNJbml0aWFsaXplZCk7CisKKyAgICBp
ZiAoIW1fc3RvcmFnZSkgeworICAgICAgICBjYWxsYmFjayhudWxscHRyLCB7IH0pOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIG1fc3RvcmFnZS0+dHJhdmVyc2UoY2FjaGUudW5pcXVlTmFt
ZSgpLCAwLCBbcHJvdGVjdGVkU3RvcmFnZSA9IG1ha2VSZWYoKm1fc3RvcmFnZSksIGNhbGxiYWNr
ID0gV1RGTW92ZShjYWxsYmFjayldKGNvbnN0IGF1dG8qIHN0b3JhZ2UsIGNvbnN0IGF1dG8mIGlu
Zm9ybWF0aW9uKSB7CisgICAgICAgIGNhbGxiYWNrKHN0b3JhZ2UsIGluZm9ybWF0aW9uKTsKKyAg
ICB9KTsKK30KKwordm9pZCBDYWNoZXM6OndyaXRlUmVjb3JkKGNvbnN0IENhY2hlJiBjYWNoZSwg
Y29uc3QgUmVjb3JkSW5mb3JtYXRpb24mIHJlY29yZEluZm9ybWF0aW9uLCBSZWNvcmQmJiByZWNv
cmQsIENvbXBsZXRpb25DYWxsYmFjayYmIGNhbGxiYWNrKQoreworICAgIEFTU0VSVChtX2lzSW5p
dGlhbGl6ZWQpOworCisgICAgLy8gRklYTUU6IENoZWNrIGZvciBzdG9yYWdlIHF1b3RhLgorICAg
IGlmICghc2hvdWxkUGVyc2lzdCgpKSB7CisgICAgICAgIG1fdm9sYXRpbGVTdG9yYWdlLnNldChy
ZWNvcmRJbmZvcm1hdGlvbi5rZXksIFdURk1vdmUocmVjb3JkKSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBtX3N0b3JhZ2UtPnN0b3JlKENhY2hlOjplbmNvZGUocmVjb3JkSW5mb3Jt
YXRpb24sIHJlY29yZCksIFtwcm90ZWN0ZWRTdG9yYWdlID0gbWFrZVJlZigqbV9zdG9yYWdlKSwg
Y2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oY29uc3QgRGF0YSYpIHsKKyAgICAgICAgY2Fs
bGJhY2soc3RkOjpudWxsb3B0KTsKKyAgICB9KTsKK30KKwordm9pZCBDYWNoZXM6OnJlYWRSZWNv
cmQoY29uc3QgTmV0d29ya0NhY2hlOjpLZXkmIGtleSwgV1RGOjpGdW5jdGlvbjx2b2lkKEV4cGVj
dGVkPFJlY29yZCwgRXJyb3I+JiYpPiYmIGNhbGxiYWNrKQoreworICAgIEFTU0VSVChtX2lzSW5p
dGlhbGl6ZWQpOworCisgICAgaWYgKCFzaG91bGRQZXJzaXN0KCkpIHsKKyAgICAgICAgYXV0byBp
dGVyYXRvciA9IG1fdm9sYXRpbGVTdG9yYWdlLmZpbmQoa2V5KTsKKyAgICAgICAgaWYgKGl0ZXJh
dG9yID09IG1fdm9sYXRpbGVTdG9yYWdlLmVuZCgpKSB7CisgICAgICAgICAgICBjYWxsYmFjayht
YWtlVW5leHBlY3RlZChFcnJvcjo6SW50ZXJuYWwpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICBjYWxsYmFjayhpdGVyYXRvci0+dmFsdWUuY29weSgpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIG1fc3RvcmFnZS0+cmV0cmlldmUoa2V5LCA0LCBbcHJv
dGVjdGVkU3RvcmFnZSA9IG1ha2VSZWYoKm1fc3RvcmFnZSksIGNhbGxiYWNrID0gV1RGTW92ZShj
YWxsYmFjayldKHN0ZDo6dW5pcXVlX3B0cjxTdG9yYWdlOjpSZWNvcmQ+IHN0b3JhZ2UpIG11dGFi
bGUgeworICAgICAgICBpZiAoIXN0b3JhZ2UpIHsKKyAgICAgICAgICAgIGNhbGxiYWNrKG1ha2VV
bmV4cGVjdGVkKEVycm9yOjpSZWFkRGlzaykpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisKKyAgICAgICAgYXV0byByZWNvcmQgPSBDYWNoZTo6ZGVjb2RlKCpzdG9yYWdl
KTsKKyAgICAgICAgaWYgKCFyZWNvcmQpIHsKKyAgICAgICAgICAgIGNhbGxiYWNrKG1ha2VVbmV4
cGVjdGVkKEVycm9yOjpSZWFkRGlzaykpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisKKyAgICAgICAgY2FsbGJhY2soV1RGTW92ZShyZWNvcmQudmFsdWUoKSkpOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9KTsKK30KKwordm9pZCBDYWNoZXM6OnJlbW92ZVJlY29y
ZChjb25zdCBOZXR3b3JrQ2FjaGU6OktleSYga2V5KQoreworICAgIEFTU0VSVChtX2lzSW5pdGlh
bGl6ZWQpOworCisgICAgaWYgKCFzaG91bGRQZXJzaXN0KCkpIHsKKyAgICAgICAgbV92b2xhdGls
ZVN0b3JhZ2UucmVtb3ZlKGtleSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9zdG9y
YWdlLT5yZW1vdmUoa2V5KTsKK30KKwogdm9pZCBDYWNoZXM6OmNsZWFyTWVtb3J5UmVwcmVzZW50
YXRpb24oKQogewogICAgIG1ha2VEaXJ0eSgpOwogICAgIG1fY2FjaGVzLmNsZWFyKCk7CiAgICAg
bV9pc0luaXRpYWxpemVkID0gZmFsc2U7CiAgICAgbV9zdG9yYWdlID0gbnVsbHB0cjsKLSAgICBp
ZiAobV9lbmdpbmUpCi0gICAgICAgIG1fZW5naW5lLT5yZW1vdmVDYWNoZXMobV9vcmlnaW4pOwog
fQogCiBib29sIENhY2hlczo6aXNEaXJ0eSh1aW50NjRfdCB1cGRhdGVDb3VudGVyKSBjb25zdApA
QCAtMjgyLDYgKzM3MCwxNyBAQCBib29sIENhY2hlczo6aXNEaXJ0eSh1aW50NjRfdCB1cGRhdGVD
b3VudGVyKSBjb25zdAogICAgIHJldHVybiBtX3VwZGF0ZUNvdW50ZXIgIT0gdXBkYXRlQ291bnRl
cjsKIH0KIAorY29uc3QgTmV0d29ya0NhY2hlOjpTYWx0JiBDYWNoZXM6OnNhbHQoKSBjb25zdAor
eworICAgIGlmIChtX2VuZ2luZSkKKyAgICAgICAgcmV0dXJuIG1fZW5naW5lLT5zYWx0KCk7CisK
KyAgICBpZiAoIW1fdm9sYXRpbGVTYWx0KQorICAgICAgICBtX3ZvbGF0aWxlU2FsdCA9IFNhbHQg
eyB9OworCisgICAgcmV0dXJuIG1fdm9sYXRpbGVTYWx0LnZhbHVlKCk7Cit9CisKIENhY2hlSW5m
b3MgQ2FjaGVzOjpjYWNoZUluZm9zKHVpbnQ2NF90IHVwZGF0ZUNvdW50ZXIpIGNvbnN0CiB7CiAg
ICAgVmVjdG9yPENhY2hlSW5mbz4gY2FjaGVJbmZvczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmggYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5o
CmluZGV4IGYzMTNmZDFjNGNiOGI5ZmFmY2I2NDY2ODg2OGNmNDM3YWQ1OTcyMzIuLjRhMmE3Nzky
ZWZlYTZkYWZhNjQ0NDA1M2VjNzA4YmIwNTNlNmFmMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmgKKysrIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNo
ZXMuaApAQCAtNTIsMTcgKzUyLDIzIEBAIHB1YmxpYzoKICAgICBDYWNoZSogZmluZCh1aW50NjRf
dCBpZGVudGlmaWVyKTsKICAgICB2b2lkIGFwcGVuZFJlcHJlc2VudGF0aW9uKFN0cmluZ0J1aWxk
ZXImKSBjb25zdDsKIAorICAgIHZvaWQgcmVhZFJlY29yZHNMaXN0KENhY2hlJiwgTmV0d29ya0Nh
Y2hlOjpTdG9yYWdlOjpUcmF2ZXJzZUhhbmRsZXImJik7CisgICAgdm9pZCByZWFkUmVjb3JkKGNv
bnN0IE5ldHdvcmtDYWNoZTo6S2V5JiwgV1RGOjpGdW5jdGlvbjx2b2lkKEV4cGVjdGVkPFdlYkNv
cmU6OkRPTUNhY2hlRW5naW5lOjpSZWNvcmQsIFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpFcnJv
cj4mJik+JiYpOworICAgIHZvaWQgd3JpdGVSZWNvcmQoY29uc3QgQ2FjaGUmLCBjb25zdCBSZWNv
cmRJbmZvcm1hdGlvbiYsIFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpSZWNvcmQmJiwgV2ViQ29y
ZTo6RE9NQ2FjaGVFbmdpbmU6OkNvbXBsZXRpb25DYWxsYmFjayYmKTsKKyAgICB2b2lkIHJlbW92
ZVJlY29yZChjb25zdCBOZXR3b3JrQ2FjaGU6OktleSYpOworCisgICAgY29uc3QgTmV0d29ya0Nh
Y2hlOjpTYWx0JiBzYWx0KCkgY29uc3Q7CisKKyAgICBib29sIHNob3VsZFBlcnNpc3QoKSBjb25z
dCB7IHJldHVybiAhbV9yb290UGF0aC5pc051bGwoKTsgfQorCiBwcml2YXRlOgogICAgIENhY2hl
cyhFbmdpbmUmLCBTdHJpbmcmJiBvcmlnaW4pOwogCiAgICAgdm9pZCByZWFkQ2FjaGVzRnJvbURp
c2soV1RGOjpGdW5jdGlvbjx2b2lkKEV4cGVjdGVkPFZlY3RvcjxDYWNoZT4sIFdlYkNvcmU6OkRP
TUNhY2hlRW5naW5lOjpFcnJvcj4mJik+JiYpOwogICAgIHZvaWQgd3JpdGVDYWNoZXNUb0Rpc2so
V2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OkNvbXBsZXRpb25DYWxsYmFjayYmKTsKIAotCiAgICAg
Q2FjaGUqIGZpbmQoY29uc3QgU3RyaW5nJiBuYW1lKTsKIAotICAgIGJvb2wgc2hvdWxkUGVyc2lz
dCgpIGNvbnN0IHsgcmV0dXJuICFtX3Jvb3RQYXRoLmlzTnVsbCgpOyB9Ci0KICAgICB2b2lkIG1h
a2VEaXJ0eSgpIHsgKyttX3VwZGF0ZUNvdW50ZXI7IH0KICAgICBib29sIGlzRGlydHkodWludDY0
X3QgdXBkYXRlQ291bnRlcikgY29uc3Q7CiAKQEAgLTc0LDYgKzgwLDggQEAgcHJpdmF0ZToKICAg
ICBWZWN0b3I8Q2FjaGU+IG1fY2FjaGVzOwogICAgIFZlY3RvcjxDYWNoZT4gbV9yZW1vdmVkQ2Fj
aGVzOwogICAgIFJlZlB0cjxOZXR3b3JrQ2FjaGU6OlN0b3JhZ2U+IG1fc3RvcmFnZTsKKyAgICBI
YXNoTWFwPE5ldHdvcmtDYWNoZTo6S2V5LCBXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6UmVjb3Jk
PiBtX3ZvbGF0aWxlU3RvcmFnZTsKKyAgICBtdXRhYmxlIHN0ZDo6b3B0aW9uYWw8TmV0d29ya0Nh
Y2hlOjpTYWx0PiBtX3ZvbGF0aWxlU2FsdDsKICAgICBWZWN0b3I8V2ViQ29yZTo6RE9NQ2FjaGVF
bmdpbmU6OkNvbXBsZXRpb25DYWxsYmFjaz4gbV9wZW5kaW5nSW5pdGlhbGl6YXRpb25DYWxsYmFj
a3M7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZVN0b3JhZ2UuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9j
YWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcAppbmRleCA4MDNhOTlmYmRkZDZkOGQyMjcwYWQ1
NWM5YmNiNTBhMDUxYTQ0YjNmLi4wYjY1MjhkZDcyOGZiOTMzMGFhOWQwNTQyODU3NGNmNDYwZDA5
YWYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZVN0b3JhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHAKQEAgLTg0NiwxMCArODQ2LDcgQEAgdm9pZCBTdG9y
YWdlOjpzdG9yZShjb25zdCBSZWNvcmQmIHJlY29yZCwgTWFwcGVkQm9keUhhbmRsZXImJiBtYXBw
ZWRCb2R5SGFuZGxlcikKICAgICBpZiAoIWlzSW5pdGlhbFdyaXRlKQogICAgICAgICByZXR1cm47
CiAKLSAgICAvLyBEZWxheSB0aGUgc3RhcnQgb2Ygd3JpdGVzIGEgYml0IHRvIGF2b2lkIGFmZmVj
dGluZyBlYXJseSBwYWdlIGxvYWQuCi0gICAgLy8gQ29tcGxldGluZyB3cml0ZXMgd2lsbCBkaXNw
YXRjaCBtb3JlIHdyaXRlcyB3aXRob3V0IGRlbGF5LgotICAgIHN0YXRpYyBjb25zdCBTZWNvbmRz
IGluaXRpYWxXcml0ZURlbGF5ID0gMV9zOwotICAgIG1fd3JpdGVPcGVyYXRpb25EaXNwYXRjaFRp
bWVyLnN0YXJ0T25lU2hvdChpbml0aWFsV3JpdGVEZWxheSk7CisgICAgbV93cml0ZU9wZXJhdGlv
bkRpc3BhdGNoVGltZXIuc3RhcnRPbmVTaG90KG1faW5pdGlhbFdyaXRlRGVsYXkpOwogfQogCiB2
b2lkIFN0b3JhZ2U6OnRyYXZlcnNlKGNvbnN0IFN0cmluZyYgdHlwZSwgVHJhdmVyc2VGbGFncyBm
bGFncywgVHJhdmVyc2VIYW5kbGVyJiYgdHJhdmVyc2VIYW5kbGVyKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmggYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuaApp
bmRleCA0MTJlZDllYzU3MzExM2Q4ZTUxYjJjZmUzMWJlYjA1Zjk1ZWQ5NDc5Li5iNjg4ZGNkNGUw
YTc1ZWExMmE5ZDEwZGRlN2M5YmI0YzhmOWY0YjQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuaApAQCAtMTA0
LDYgKzEwNCw4IEBAIHB1YmxpYzoKIAogICAgIH5TdG9yYWdlKCk7CiAKKyAgICB2b2lkIHdyaXRl
V2l0aG91dFdhaXRpbmcoKSB7IG1faW5pdGlhbFdyaXRlRGVsYXkgPSAwX3M7IH07CisKIHByaXZh
dGU6CiAgICAgU3RvcmFnZShjb25zdCBTdHJpbmcmIGRpcmVjdG9yeVBhdGgsIE1vZGUsIFNhbHQp
OwogCkBAIC0xODIsNiArMTg0LDEwIEBAIHByaXZhdGU6CiAgICAgUmVmPFdvcmtRdWV1ZT4gbV9z
ZXJpYWxCYWNrZ3JvdW5kSU9RdWV1ZTsKIAogICAgIEJsb2JTdG9yYWdlIG1fYmxvYlN0b3JhZ2U7
CisKKyAgICAvLyBCeSBkZWZhdWx0LCBkZWxheSB0aGUgc3RhcnQgb2Ygd3JpdGVzIGEgYml0IHRv
IGF2b2lkIGFmZmVjdGluZyBlYXJseSBwYWdlIGxvYWQuCisgICAgLy8gQ29tcGxldGluZyB3cml0
ZXMgd2lsbCBkaXNwYXRjaCBtb3JlIHdyaXRlcyB3aXRob3V0IGRlbGF5LgorICAgIFNlY29uZHMg
bV9pbml0aWFsV3JpdGVEZWxheSB7IDFfcyB9OwogfTsKIAogLy8gRklYTUU6IFJlbW92ZSwgdXNl
ZCBieSBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzIG9ubHkuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNzdiNWI5N2RiMGE1MGU4
YTkxNDQ0ZWQxYWM2NDg5ZDBmNTMzNjk2NC4uMTk1MjZkZWRhYzAzMGNiZDE3MjM5MDljMTg3YjRj
YzBmNDMxZWRhNyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91
dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDE3LTA5LTEzICBZb3Vlbm4gRmFi
bGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgQ2FjaGUgQVBJIHN1cHBvcnQg
b2YgcmVjb3JkcyBwZXJzaXN0ZW5jeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTc2ODQ1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBodHRwL3Rlc3RzL2NhY2hlLXN0b3JhZ2UvY2FjaGUtcGVyc2lzdGVu
Y3kuaHR0cHMuaHRtbDoKKyAgICAgICAgKiBodHRwL3Rlc3RzL2NhY2hlLXN0b3JhZ2UvY2FjaGUt
cmVjb3Jkcy1wZXJzaXN0ZW5jeS5odHRwcy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IGh0dHAvdGVzdHMvY2FjaGUtc3RvcmFnZS9jYWNoZS1yZWNvcmRzLXBlcnNpc3RlbmN5Lmh0dHBz
Lmh0bWw6IEFkZGVkLgorCiAyMDE3LTA5LTEzICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFs
bGF3YUBhcHBsZS5jb20+CiAKICAgICAgICAgRm9sbG93dXAgKHIyMjE4MDUpOiBBZGRyZXNzIGNv
bW1lbnRzIGFuZCBhZGQgbW9yZSB0ZXN0cwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9jYWNoZS1zdG9yYWdlL2NhY2hlLXBlcnNpc3RlbmN5Lmh0dHBzLmh0bWwgYi9MYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL2NhY2hlLXN0b3JhZ2UvY2FjaGUtcGVyc2lzdGVuY3kuaHR0cHMuaHRt
bAppbmRleCBkMWVhZDRkNGFmMjViY2U4ZjU0ZjYwYThhMzJkZDFkNzc0MTFiOGY4Li5kYzllOTZi
NjVlOGMyNDFmNzA3OTZlNjU5NjVlMjU3ZDljMzUyY2RkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL2NhY2hlLXN0b3JhZ2UvY2FjaGUtcGVyc2lzdGVuY3kuaHR0cHMuaHRtbAor
KysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2NhY2hlLXN0b3JhZ2UvY2FjaGUtcGVyc2lzdGVu
Y3kuaHR0cHMuaHRtbApAQCAtNDIsMTEgKzQyLDExIEBACiAgICAgcHJvbWlzZV90ZXN0KHRlc3Qg
PT4gewogICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCiAgICAgICAgICAgICB0ZXN0UnVu
bmVyLnNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQoZmFsc2UpOwotICAgICAgICB2YXIgY2xlYXJQ
cm9taXNlOwotICAgICAgICBpZiAod2luZG93LmludGVybmFscykKLSAgICAgICAgICAgIGNsZWFy
UHJvbWlzZSA9aW50ZXJuYWxzLmNsZWFyQ2FjaGVTdG9yYWdlTWVtb3J5UmVwcmVzZW50YXRpb24o
KTsKIAotICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNsZWFyUHJvbWlzZSkudGhlbigo
KSA9PiB7CisgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHsKKyAg
ICAgICAgICAgIGlmICh3aW5kb3cuaW50ZXJuYWxzKQorICAgICAgICAgICAgICAgIHJldHVybiBp
bnRlcm5hbHMuY2xlYXJDYWNoZVN0b3JhZ2VNZW1vcnlSZXByZXNlbnRhdGlvbigpOworICAgICAg
ICB9KS50aGVuKCgpID0+IHsKICAgICAgICAgICAgIHJldHVybiBzZWxmLmNhY2hlcy5rZXlzKCk7
CiAgICAgICAgIH0pLnRoZW4oa2V5cyA9PiB7CiAgICAgICAgICAgICB2YXIgcGVuZGluZyA9IFtd
OwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9jYWNoZS1zdG9yYWdlL2NhY2hl
LXJlY29yZHMtcGVyc2lzdGVuY3kuaHR0cHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9jYWNoZS1zdG9yYWdlL2NhY2hlLXJlY29yZHMtcGVyc2lzdGVuY3kuaHR0cHMtZXhw
ZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMxOWNjZWEzYjRkYzRlNmEwMjMwNTMyYzE3OWZlMTEwNDE0
MWY4NjYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2NhY2hlLXN0
b3JhZ2UvY2FjaGUtcmVjb3Jkcy1wZXJzaXN0ZW5jeS5odHRwcy1leHBlY3RlZC50eHQKQEAgLTAs
MCArMSw5IEBACisKK1BBU1MgQ2xlYW5pbmcgZXhpc3RpbmcgY2FjaGVzIAorUEFTUyBDYWNoZS5w
dXQgY2FsbGVkIHR3aWNlIHdpdGggbWF0Y2hpbmcgUmVxdWVzdHMgLSBrZXlzIHNob3VsZCByZW1h
aW4gdGhlIHNhbWUgLSB0ZXN0aW5nIHBlcnNpc3RlbmN5IAorUEFTUyBDbGVhbmluZyBjcmVhdGVk
IGNhY2hlcyAKK1BBU1MgQ2hlY2tpbmcgcGVyc2lzdGVuY3kgb2YgY2FjaGUga2V5cyAKK1BBU1Mg
Q2hlY2tpbmcgcGVyc2lzdGVuY3kgb2YgcmVzcG9uc2UgCitQQVNTIENoZWNraW5nIHBlcnNpc3Rl
bmN5IG9mIHJlc3BvbnNlIGJvZHkgCitQQVNTIFRlc3Rpbmcgb3ZlcnJpZGluZyBvZiBhbiBleGlz
dGluZyBjYWNoZWQgcmVjb3JkIHRoYXQgaXMgbm90IGluIG1lbW9yeSAKKwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9jYWNoZS1zdG9yYWdlL2NhY2hlLXJlY29yZHMtcGVyc2lz
dGVuY3kuaHR0cHMuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvY2FjaGUtc3RvcmFnZS9j
YWNoZS1yZWNvcmRzLXBlcnNpc3RlbmN5Lmh0dHBzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmI0YmFhMDBh
YmVhYTVkNTUxN2MzMDg1ZTgxYWIyODJhMzcyYTg1MAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2h0dHAvdGVzdHMvY2FjaGUtc3RvcmFnZS9jYWNoZS1yZWNvcmRzLXBlcnNpc3RlbmN5
Lmh0dHBzLmh0bWwKQEAgLTAsMCArMSwxMzMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8
aGVhZD4KKzx0aXRsZT5DYWNoZSBTdG9yYWdlOiB0ZXN0aW5nIENhY2hlIHBlcnNpc3RlbmN5PC90
aXRsZT4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4K
KzwvaGVhZD4KKzxib2R5PgorICAgIDxzY3JpcHQ+CitmdW5jdGlvbiBhc3NlcnRfaGVhZGVyX2Vx
dWFscyhhY3R1YWwsIGV4cGVjdGVkLCBkZXNjcmlwdGlvbikgeworICAgIGFzc2VydF9jbGFzc19z
dHJpbmcoYWN0dWFsLCAiSGVhZGVycyIsIGRlc2NyaXB0aW9uKTsKKyAgICB2YXIgaGVhZGVyOwor
ICAgIHZhciBhY3R1YWxfaGVhZGVycyA9IFtdOworICAgIHZhciBleHBlY3RlZF9oZWFkZXJzID0g
W107CisgICAgZm9yIChoZWFkZXIgb2YgYWN0dWFsKQorICAgICAgICBhY3R1YWxfaGVhZGVycy5w
dXNoKGhlYWRlclswXSArICI6ICIgKyBoZWFkZXJbMV0pOworICAgIGZvciAoaGVhZGVyIG9mIGV4
cGVjdGVkKQorICAgICAgICBleHBlY3RlZF9oZWFkZXJzLnB1c2goaGVhZGVyWzBdICsgIjogIiAr
IGhlYWRlclsxXSk7CisgICAgYXNzZXJ0X2FycmF5X2VxdWFscyhhY3R1YWxfaGVhZGVycywgZXhw
ZWN0ZWRfaGVhZGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICsgIiBI
ZWFkZXJzIGRpZmZlci4iKTsKK30KKworZnVuY3Rpb24gYXNzZXJ0X3Jlc3BvbnNlX2VxdWFscyhh
Y3R1YWwsIGV4cGVjdGVkLCBkZXNjcmlwdGlvbikgeworICAgIGFzc2VydF9jbGFzc19zdHJpbmco
YWN0dWFsLCAiUmVzcG9uc2UiLCBkZXNjcmlwdGlvbik7CisgICAgWyJ0eXBlIiwgInVybCIsICJz
dGF0dXMiLCAib2siLCAic3RhdHVzVGV4dCJdLmZvckVhY2goZnVuY3Rpb24oYXR0cmlidXRlKSB7
CisgICAgICAgIGFzc2VydF9lcXVhbHMoYWN0dWFsW2F0dHJpYnV0ZV0sIGV4cGVjdGVkW2F0dHJp
YnV0ZV0sCisgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gKyAiIEF0dHJpYnV0ZXMg
ZGlmZmVyOiAiICsgYXR0cmlidXRlICsgIi4iKTsKKyAgICB9KTsKKyAgICBhc3NlcnRfaGVhZGVy
X2VxdWFscyhhY3R1YWwuaGVhZGVycywgZXhwZWN0ZWQuaGVhZGVycywgZGVzY3JpcHRpb24pOwor
fQorCitmdW5jdGlvbiBhc3NlcnRfcmVxdWVzdF9lcXVhbHMoYWN0dWFsLCBleHBlY3RlZCwgZGVz
Y3JpcHRpb24pIHsKKyAgICBhc3NlcnRfY2xhc3Nfc3RyaW5nKGFjdHVhbCwgIlJlcXVlc3QiLCBk
ZXNjcmlwdGlvbik7CisgICAgWyJ1cmwiXS5mb3JFYWNoKGZ1bmN0aW9uKGF0dHJpYnV0ZSkgewor
ICAgICAgICBhc3NlcnRfZXF1YWxzKGFjdHVhbFthdHRyaWJ1dGVdLCBleHBlY3RlZFthdHRyaWJ1
dGVdLAorICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICsgIiBBdHRyaWJ1dGVzIGRp
ZmZlcjogIiArIGF0dHJpYnV0ZSArICIuIik7CisgICAgfSk7CisgICAgYXNzZXJ0X2hlYWRlcl9l
cXVhbHMoYWN0dWFsLmhlYWRlcnMsIGV4cGVjdGVkLmhlYWRlcnMsIGRlc2NyaXB0aW9uKTsKK30K
KworZnVuY3Rpb24gYXNzZXJ0X3JlcXVlc3RfYXJyYXlfZXF1YWxzKGFjdHVhbCwgZXhwZWN0ZWQs
IGRlc2NyaXB0aW9uKSB7CisgICAgYXNzZXJ0X3RydWUoQXJyYXkuaXNBcnJheShhY3R1YWwpLCBk
ZXNjcmlwdGlvbik7CisgICAgYXNzZXJ0X2VxdWFscyhhY3R1YWwubGVuZ3RoLCBleHBlY3RlZC5s
ZW5ndGgsIGRlc2NyaXB0aW9uKTsKKyAgICBhY3R1YWwuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwg
aW5kZXgpIHsKKyAgICAgICAgYXNzZXJ0X3JlcXVlc3RfZXF1YWxzKHZhbHVlLCBleHBlY3RlZFtp
bmRleF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiArICIgOiBv
YmplY3RbIiArIGluZGV4ICsgIl0iKTsKKyAgICB9KTsKK30KKworcHJvbWlzZV90ZXN0KHRlc3Qg
PT4geworICAgIHJldHVybiBzZWxmLmNhY2hlcy5rZXlzKCkudGhlbihrZXlzID0+IHsKKyAgICAg
ICAgdmFyIHBlbmRpbmcgPSBbXTsKKyAgICAgICAgZm9yIChrZXkgb2Yga2V5cykKKyAgICAgICAg
ICAgIHBlbmRpbmcucHVzaChzZWxmLmNhY2hlcy5kZWxldGUoa2V5c1swXSkpOworICAgICAgICBy
ZXR1cm4gUHJvbWlzZS5hbGwocGVuZGluZyk7CisgICAgfSk7Cit9LCAiQ2xlYW5pbmcgZXhpc3Rp
bmcgY2FjaGVzIik7CisKK3ZhciB0ZXN0X3VybCA9ICdodHRwczovL2V4YW1wbGUuY29tL2Zvbyc7
Cit2YXIgdGVzdF9ib2R5ID0gJ0hlbGxvIHdvcmxkISc7CisKK3Byb21pc2VfdGVzdCgoKSA9PiB7
CisgICAgdmFyIGNhY2hlOworICAgIHZhciBjYWNoZV9rZXlzOworICAgIHZhciBmaXJzdF9yZXNw
b25zZSA9IG5ldyBSZXNwb25zZSgiT2xkIGJvZHkiLCB7IHN0YXR1c1RleHQ6ICdPbGQgc3RhdHVz
JyB9KTsKKyAgICB2YXIgYWx0ZXJuYXRlX3Jlc3BvbnNlID0gbmV3IFJlc3BvbnNlKCJOZXcgYm9k
eSIsIHsgc3RhdHVzVGV4dDogJ05ldyBzdGF0dXMnIH0pOworICAgIHJldHVybiBzZWxmLmNhY2hl
cy5vcGVuKCJ0ZXN0LWNhY2hlLXJlY29yZHMtcGVyc2lzdGVuY3kiKS50aGVuKGMgPT4geworICAg
ICAgICBjYWNoZSA9IGM7CisgICAgfSkudGhlbigoKSA9PiB7CisgICAgICAgIHJldHVybiBjYWNo
ZS5wdXQodGVzdF91cmwsIGZpcnN0X3Jlc3BvbnNlKTsKKyAgICB9KS50aGVuKCgpID0+IHsKKyAg
ICAgICAgcmV0dXJuIGNhY2hlLmtleXMoKTsKKyAgICB9KS50aGVuKGtleXMgPT4geworICAgICAg
ICBjYWNoZV9rZXlzID0ga2V5czsKKyAgICAgICAgaWYgKHdpbmRvdy5pbnRlcm5hbHMpCisgICAg
ICAgICAgICByZXR1cm4gaW50ZXJuYWxzLmNsZWFyQ2FjaGVTdG9yYWdlTWVtb3J5UmVwcmVzZW50
YXRpb24oKTsKKyAgICB9KS50aGVuKCgpID0+IHsKKyAgICAgICAgcmV0dXJuIHNlbGYuY2FjaGVz
Lm9wZW4oInRlc3QtY2FjaGUtcmVjb3Jkcy1wZXJzaXN0ZW5jeSIpOworICAgIH0pLnRoZW4oYyA9
PiB7CisgICAgICAgIGNhY2hlID0gYzsKKyAgICAgICAgcmV0dXJuIGNhY2hlLmtleXMoKS50aGVu
KChrZXlzKSA9PiB7CisgICAgICAgICAgICB0ZXN0KCgpID0+IHsKKyAgICAgICAgICAgICAgICBh
c3NlcnRfcmVxdWVzdF9hcnJheV9lcXVhbHMoa2V5cywgY2FjaGVfa2V5cyk7CisgICAgICAgICAg
ICB9LCAiQ2hlY2tpbmcgcGVyc2lzdGVuY3kgb2YgY2FjaGUga2V5cyIpOworICAgICAgICAgICAg
cmV0dXJuIGNhY2hlLm1hdGNoKHRlc3RfdXJsKTsKKyAgICAgICAgfSkudGhlbigocmVzdWx0KSA9
PiB7CisgICAgICAgICAgICB0ZXN0KCgpID0+IHsKKyAgICAgICAgICAgICAgICBhc3NlcnRfcmVz
cG9uc2VfZXF1YWxzKHJlc3VsdCwgZmlyc3RfcmVzcG9uc2UsICJDYWNoZS5wdXQgc2hvdWxkIHN0
b3JlIHRoZSByZXNwb25zZSBwZXJzaXN0ZW50bHkiKTsKKyAgICAgICAgICAgIH0sICJDaGVja2lu
ZyBwZXJzaXN0ZW5jeSBvZiByZXNwb25zZSIpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC50
ZXh0KCk7CisgICAgICAgIH0pLnRoZW4oKGJvZHkpID0+IHsKKyAgICAgICAgICAgIHRlc3QoKCkg
PT4geworICAgICAgICAgICAgICAgIGFzc2VydF9lcXVhbHMoYm9keSwgIk9sZCBib2R5IiwgIkNh
Y2hlIHB1dCBzaG91bGQgc3RvcmUgdGhlIHJlc3BvbnNlIGJvZHkgcGVyc2lzdGVudGx5LiIpOwor
ICAgICAgICAgICAgfSwgIkNoZWNraW5nIHBlcnNpc3RlbmN5IG9mIHJlc3BvbnNlIGJvZHkiKTsK
KyAgICAgICAgfSk7CisgICAgfSkudGhlbigoKSA9PiB7CisgICAgICAgIHJldHVybiBjYWNoZS5w
dXQodGVzdF91cmwsIGFsdGVybmF0ZV9yZXNwb25zZSk7CisgICAgfSkudGhlbigoKSA9PiB7Cisg
ICAgICAgIHJldHVybiBjYWNoZS5rZXlzKCk7CisgICAgfSkudGhlbihrZXlzID0+IHsKKyAgICAg
ICAgY2FjaGVfa2V5cyA9IGtleXM7CisgICAgICAgIGlmICh3aW5kb3cuaW50ZXJuYWxzKQorICAg
ICAgICAgICAgcmV0dXJuIGludGVybmFscy5jbGVhckNhY2hlU3RvcmFnZU1lbW9yeVJlcHJlc2Vu
dGF0aW9uKCk7CisgICAgfSkudGhlbigoKSA9PiB7CisgICAgICAgIHJldHVybiBzZWxmLmNhY2hl
cy5vcGVuKCJ0ZXN0LWNhY2hlLXJlY29yZHMtcGVyc2lzdGVuY3kiKTsKKyAgICB9KS50aGVuKGMg
PT4geworICAgICAgICBjYWNoZSA9IGM7CisgICAgICAgIHJldHVybiBjYWNoZS5rZXlzKCk7Cisg
ICAgfSkudGhlbigoa2V5cykgPT4geworICAgICAgICBhc3NlcnRfcmVxdWVzdF9hcnJheV9lcXVh
bHMoa2V5cywgY2FjaGVfa2V5cyk7CisgICAgfSkudGhlbigoKSA9PiB7CisgICAgICAgIHByb21p
c2VfdGVzdCgoKSA9PiB7CisgICAgICAgICAgICByZXR1cm4gY2FjaGUubWF0Y2godGVzdF91cmwp
LnRoZW4oKHJlc3VsdCkgPT4geworICAgICAgICAgICAgICAgIGFzc2VydF9yZXNwb25zZV9lcXVh
bHMocmVzdWx0LCBhbHRlcm5hdGVfcmVzcG9uc2UsICdDYWNoZS5wdXQgc2hvdWxkIHJlcGxhY2Ug
ZXhpc3RpbmcgJyArICdyZXNwb25zZSB3aXRoIG5ldyByZXNwb25zZS4nKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0LnRleHQoKTsKKyAgICAgICAgICAgIH0pLnRoZW4oKGJvZHkpID0+
IHsKKyAgICAgICAgICAgICAgICBhc3NlcnRfZXF1YWxzKGJvZHksICJOZXcgYm9keSIsICdDYWNo
ZSBwdXQgc2hvdWxkIHN0b3JlIG5ldyByZXNwb25zZSBib2R5LicpOworICAgICAgICAgICAgfSk7
CisgICAgICAgIH0sICdUZXN0aW5nIG92ZXJyaWRpbmcgb2YgYW4gZXhpc3RpbmcgY2FjaGVkIHJl
Y29yZCB0aGF0IGlzIG5vdCBpbiBtZW1vcnknKTsKKyAgICB9KTsKK30sICdDYWNoZS5wdXQgY2Fs
bGVkIHR3aWNlIHdpdGggbWF0Y2hpbmcgUmVxdWVzdHMgLSBrZXlzIHNob3VsZCByZW1haW4gdGhl
IHNhbWUgLSB0ZXN0aW5nIHBlcnNpc3RlbmN5Jyk7CisKK3Byb21pc2VfdGVzdCh0ZXN0ID0+IHsK
KyAgICByZXR1cm4gc2VsZi5jYWNoZXMua2V5cygpLnRoZW4oa2V5cyA9PiB7CisgICAgICAgIHZh
ciBwZW5kaW5nID0gW107CisgICAgICAgIGZvciAoa2V5IG9mIGtleXMpCisgICAgICAgICAgICBw
ZW5kaW5nLnB1c2goc2VsZi5jYWNoZXMuZGVsZXRlKGtleXNbMF0pKTsKKyAgICAgICAgcmV0dXJu
IFByb21pc2UuYWxsKHBlbmRpbmcpOworICAgIH0pOworfSwgIkNsZWFuaW5nIGNyZWF0ZWQgY2Fj
aGVzIik7CisgICAgPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>320706</attachid>
            <date>2017-09-13 16:23:11 -0700</date>
            <delta_ts>2017-09-13 16:40:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-176845-20170913162311.patch</filename>
            <type>text/plain</type>
            <size>55385</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIxOTk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDBiNGM1Y2Q2NGM0YzdhNzdl
Y2Y2YmY0MGY5ZDBhNTFkYWVjNTMzNzIuLmE3ZmFkNjEwMmQwY2FkZDE3MmRhZGUxMmZhMzdkYzc0
ZGJiNzM4MjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTA1IEBACiAyMDE3LTA5LTEzICBZb3Vlbm4g
RmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAorICAgICAgICBBZGQgQ2FjaGUgQVBJIHN1cHBv
cnQgb2YgcmVjb3JkcyBwZXJzaXN0ZW5jeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTc2ODQ1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgSW50cm9kdWNpbmcgYXN5bmNocm9ub3VzIG9wZW5pbmcgb2YgQ2Fj
aGUgb2JqZWN0cy4KKyAgICAgICAgV2hlbiBvcGVuaW5nLCBDYWNoZSBvYmplY3RzIHdpbGwgcmVh
ZCB0aGUgbGlzdCBvZiByZWNvcmRzIGZyb20gdGhlIGRpc2suCisgICAgICAgIFRoZXkga2VlcCBp
biBtZW1vcnkgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiB0byBtYWtlIGFueSBtYXRjaCBvciBy
ZW1vdmUgcmVxdWVzdCB3aXRob3V0IHJlYWRpbmcgZnVydGhlciBpbmZvcm1hdGlvbiBmcm9tIHRo
ZSBkaXNrLgorICAgICAgICBDYWNoZSBvYmplY3RzIHRodXMga2VlcCBkdXJpbmcgdGhlIG9wZW5p
bmcgdGltZSBhIGxpc3Qgb2YgY2FsbGJhY2tzIHRvIGNhbGwgd2hlbiBiZWluZyBvcGVuZWQuCisg
ICAgICAgIFBlcnNpc3RlbnQgc3RvcmFnZSBpcyBpbXBsZW1lbnRlZCB0aHJvdWdoIE5ldHdvcmtD
YWNoZTo6U3RvcmFnZS4KKworICAgICAgICBBIENhY2hlIG9iamVjdCBpcyBhZGRlZCBhIHVuaXF1
ZSBuYW1lIHNvIHRoYXQgcmVjb3JkcyBmcm9tIGEgQ2FjaGUgY2Fubm90IGJlIG1peGVkIHdpdGgg
cmVjb3JkcyBmcm9tIGFub3RoZXIgQ2FjaGUuCisgICAgICAgIFRoaXMgdW5pcXVlIG5hbWUgaXMg
c3RvcmVkIHBlcnNpc3Rlbmx5IGluIGFkZGl0aW9uIHRvIHRoZSBDYWNoZSBuYW1lLgorICAgICAg
ICBUaGlzIHVuaXF1ZSBuYW1lIGlzIHVzZWQgYXMgdGhlIGtleSB0eXBlIGdpdmVuIHRvIHRoZSBz
dG9yYWdlLgorCisgICAgICAgIFJlcXVlc3QsIHJlc3BvbnNlIGFuZCByZXNwb25zZWJvZHkgZGF0
YSBhcmUgbm8gbG9uZ2VyIGtlcHQgYnkgdGhlIENhY2hlIG9iamVjdC4KKyAgICAgICAgRm9yIHJl
Z3VsYXIgc2Vzc2lvbnMsIHRoaXMgaW5mb3JtYXRpb24gaXMga2VwdCBvbiB0aGUgZGlzayB0aHJv
dWdoIE5ldHdvcmtDYWNoZTo6U3RvcmFnZS4KKyAgICAgICAgSW5zZXJ0aW9uIHRpbWUgaXMgYWxz
byBzdG9yZWQgcGVyc2lzdGVudGx5IHNvIGFzIHRvIGtlZXAgdGhlIG9yZGVyaW5nIG9mIHRoZSBy
ZWNvcmRzIGNvbnNpc3RlbnQuCisgICAgICAgIEZvciBwcml2YXRlIGJyb3dzaW5nIHNlc3Npb25z
LCB0aGlzIGluZm9ybWF0aW9uIGlzIGtlcHQgaW4gYSBtYXAgb3duZWQgYnkgdGhlIENhY2hlcyBv
YmplY3QuCisgICAgICAgIFJlY29yZERhdGEgaXMgcmVuYW1lZCB0byBSZWNvcmRJbmZvcm1hdGlv
biBhcyBpdCBub3cgb25seSBjb250YWlucyB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBoYW5kbGUg
dGhlIGRpZmZlcmVudCBDYWNoZSBhY3Rpb25zLgorCisgICAgICAgIEZvciBldmVyeSByZWNvcmQg
cmV0cmlldmFsIGFjdGlvbiwgYSBSZWFkUmVjb3JkVGFza0NvdW50ZXIgaXMgdXNlZC4KKyAgICAg
ICAgSXRzIHB1cnBvc2UgaXMgdG8gYWxsb3cgcmV0cmlldmluZyB0aGUgcmVjb3JkIGRhdGEgb24g
dGhlIGRpc2sgaW4gcGFyYWxsZWwsCisgICAgICAgIGFuZCB0aGVuIHNlbmQgYmFjayB0aGUgaW5m
b3JtYXRpb24gd2hlbiBldmVyeXRoaW5nIGlzIHJlYWQuCisgICAgICAgIEluIGNhc2Ugc29tZSBy
ZWNvcmRzIGNhbm5vdCBiZSBjb3JyZWN0bHkgcmVhZCwgdGhleSBhcmUgcmVtb3ZlZCBhdXRvbWF0
aWNhbGx5IGF0IHRoYXQgcG9pbnQuCisgICAgICAgIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9u
IGxvYWRzIGFsbCBpbmZvcm1hdGlvbiBpbiBtZW1vcnkgaW5jbHVkaW5nIHJlc3BvbnNlIGJvZGll
cy4KKyAgICAgICAgRnVydGhlciBpbXByb3ZlbWVudHMgbWlnaHQgY29uc2lkZXIgc3RyZWFtaW5n
IHRoZSByZXNwb25zZSBib2RpZXMgcHJvZ3Jlc3NpdmVseS4KKworICAgICAgICBGb3IgZXZlcnkg
c3RvcmVkIHJlY29yZCwgYW4gQXN5bmNocm9ub3VzUHV0VGFza0NvdW50ZXIgaXMgdXNlZC4KKyAg
ICAgICAgSXRzIHB1cnBvc2UgaXMgYWxzbyB0byB3YWl0IGZvciBhbGwgcHV0IGFjdGlvbnMgdG8g
YmUgY29tcGxldGVkIGJlZm9yZSBleGVjdXRpbmcgdGhlIGNvbXBsZXRpb24gY2FsbGJhY2suCisg
ICAgICAgIEluIHNvbWUgY2FzZXMsIGEgcmVjb3JkIG5lZWRzIHRvIGJlIG92ZXJyaWRlbi4KKyAg
ICAgICAgSW4gdGhhdCBjYXNlLCBhcyBwZXIgdGhlIHNwZWNpZmljYXRpb24sIG9ubHkgdGhlIGRh
dGEgcmVsYXRlZCB0byB0aGUgcmVzcG9uc2UgaXMgdG8gYmUgbW9kaWZpZWQuCisgICAgICAgIFRo
aXMgcmVxdWlyZXMgcmVhZGluZyB0aGUgcmVjb3JkIHJlcXVlc3QgZGF0YSBvbiBkaXNrIGJlZm9y
ZSBhY3R1YWxseSB3cml0aW5nIHRoZSB3aG9sZSByZWNvcmQgYWdhaW4uCisgICAgICAgIFRoaXMg
aXMgaW1wbGVtZW50ZWQgaW4gdXBkYXRlUmVjb3JkVG9EaXNrLgorCisgICAgICAgIFRoZSBDYWNo
ZSBvYmplY3QgaXMgZGVsZWdhdGluZyBhbGwgcmVjb3JkIHdyaXRpbmcvcmVhZGluZyB0YXNrcyB0
byBpdHMgQ2FjaGVzIG9iamVjdC4KKyAgICAgICAgVGhlIENhY2hlcyBvYmplY3QgaXMgcmVzcG9u
c2libGUgdG8gaGFuZGxlIHBlcnNpc3RlbnQvcHJpdmF0ZSBzZXNzaW9ucy4KKworICAgICAgICAq
IE5ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OkNhY2hlU3RvcmFnZTo6RW5naW5lOjpyZXRyaWV2ZVJlY29yZHMpOiBNYWtpbmcgc3Vy
ZSBDYWNoZSBvYmplY3QgaXMgb3BlbmVkLgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6
OkVuZ2luZTo6cmVhZENhY2hlKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFn
ZTo6RW5naW5lOjp1bmxvY2spOiBEaXNwb3NpbmcgdGhlIGNhY2hlIHdpdGhvdXQgZ29pbmcgdGhy
b3VnaCBpbml0aWFsaXppbmcgaXQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2Fj
aGVTdG9yYWdlRW5naW5lQ2FjaGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6
OmNvbXB1dGVLZXlVUkwpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OnF1ZXJ5Q2Fj
aGUpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OnVwZGF0ZVZhcnlJbmZvcm1hdGlv
bik6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OnRvUmVjb3JkSW5mb3Jt
YXRpb24pOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjpDYWNoZSk6Cisg
ICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6Om9wZW4pOgorICAgICAgICAoV2Vi
S2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjpmaW5pc2hPcGVuaW5nKToKKyAgICAgICAgKFdlYktp
dDo6Q2FjaGVTdG9yYWdlOjpSZWFkUmVjb3JkVGFza0NvdW50ZXI6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6UmVhZFJlY29yZFRhc2tDb3VudGVyOjp+UmVhZFJlY29y
ZFRhc2tDb3VudGVyKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpSZWFkUmVjb3Jk
VGFza0NvdW50ZXI6OmFwcGVuZFJlY29yZCk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFn
ZTo6UmVhZFJlY29yZFRhc2tDb3VudGVyOjpSZWFkUmVjb3JkVGFza0NvdW50ZXIpOgorICAgICAg
ICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjpyZXRyaWV2ZVJlY29yZCk6CisgICAgICAg
IChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OnJldHJpZXZlUmVjb3Jkcyk6CisgICAgICAg
IChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OmFkZFJlY29yZCk6CisgICAgICAgIChXZWJL
aXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OnJlY29yZHNGcm9tVVJMKToKKyAgICAgICAgKFdlYktp
dDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6cmVjb3Jkc0Zyb21VUkwgY29uc3QpOgorICAgICAgICAo
V2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkFzeW5jaHJvbm91c1B1dFRhc2tDb3VudGVyOjpjcmVhdGUp
OgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkFzeW5jaHJvbm91c1B1dFRhc2tDb3Vu
dGVyOjp+QXN5bmNocm9ub3VzUHV0VGFza0NvdW50ZXIpOgorICAgICAgICAoV2ViS2l0OjpDYWNo
ZVN0b3JhZ2U6OkFzeW5jaHJvbm91c1B1dFRhc2tDb3VudGVyOjpvbkNvbXBsZXRpb24pOgorICAg
ICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkFzeW5jaHJvbm91c1B1dFRhc2tDb3VudGVyOjpz
ZXRFcnJvcik6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OnB1dCk6Cisg
ICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OnJlbW92ZSk6CisgICAgICAgIChX
ZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OnJlbW92ZUZyb21SZWNvcmRMaXN0KToKKyAgICAg
ICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6d3JpdGVSZWNvcmRUb0Rpc2spOgorICAg
ICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjp1cGRhdGVSZWNvcmRUb0Rpc2spOgor
ICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjpyZWFkUmVjb3JkRnJvbURpc2sp
OgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjpyZW1vdmVSZWNvcmRGcm9t
RGlzayk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OmVuY29kZSk6Cisg
ICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6ZGVjb2RlUmVjb3JkSGVhZGVyKToKKyAgICAg
ICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6ZGVjb2RlKToKKyAgICAgICAgKFdlYktp
dDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6a2V5cyBjb25zdCk6CisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUuaDoKKyAgICAgICAgKFdlYktpdDo6
Q2FjaGVTdG9yYWdlOjpDYWNoZTo6aXNPcGVuZWQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpD
YWNoZVN0b3JhZ2U6OkNhY2hlOjp1bmlxdWVOYW1lIGNvbnN0KToKKyAgICAgICAgKiBOZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJLaXQ6
OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjpvcGVuKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9y
YWdlOjpDYWNoZXM6OnJlbW92ZSk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2Fj
aGVzOjpkaXNwb3NlKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjplbmNvZGVDYWNo
ZU5hbWVzKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpkZWNvZGVDYWNoZXNOYW1l
cyk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjpyZWFkQ2FjaGVzRnJv
bURpc2spOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6cmVhZFJlY29y
ZHNMaXN0KToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6OndyaXRlUmVj
b3JkKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6OnJlYWRSZWNvcmQp
OgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6cmVtb3ZlUmVjb3JkKToK
KyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6OmNsZWFyTWVtb3J5UmVwcmVz
ZW50YXRpb24pOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6c2FsdCBj
b25zdCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5l
Q2FjaGVzLmg6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjpzaG91bGRQ
ZXJzaXN0IGNvbnN0KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVTdG9yYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpTdG9yYWdlOjpz
dG9yZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFn
ZS5oOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlN0b3JhZ2U6OndyaXRlV2l0aG91
dFdhaXRpbmcpOgorCisyMDE3LTA5LTEzICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNv
bT4KKwogICAgICAgICBJbnRlcm5hbHMgY2xlYXJDYWNoZVN0b3JhZ2VNZW1vcnlSZXByZXNlbnRh
dGlvbiBzaG91bGQgcmV0dXJuIGEgUHJvbWlzZQogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc2ODE4CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lLmNwcCBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lLmNwcAppbmRleCA1ODMy
YzFhMTE3OTVlOWZjZDhiMmYxN2FiOGNmNTdmNmZlZmNjMzBiLi40MDhmNjJiMWNjYjRmZmI4M2U5
ZWExNzk4NmQzNmQwNGQzZjk5ZTIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmUuY3BwCkBAIC0xMzIsOCArMTMy
LDcgQEAgdm9pZCBFbmdpbmU6OnJldHJpZXZlUmVjb3Jkcyh1aW50NjRfdCBjYWNoZUlkZW50aWZp
ZXIsIFdlYkNvcmU6OlVSTCYmIHVybCwgUmVjb3IKICAgICAgICAgICAgIGNhbGxiYWNrKG1ha2VV
bmV4cGVjdGVkKHJlc3VsdC5lcnJvcigpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KLQotICAgICAgICBjYWxsYmFjayhyZXN1bHQudmFsdWUoKS5nZXQoKS5yZXRyaWV2ZVJlY29y
ZHModXJsKSk7CisgICAgICAgIHJlc3VsdC52YWx1ZSgpLmdldCgpLnJldHJpZXZlUmVjb3Jkcyh1
cmwsIFdURk1vdmUoY2FsbGJhY2spKTsKICAgICB9KTsKIH0KIApAQCAtMjE3LDEyICsyMTYsMjgg
QEAgdm9pZCBFbmdpbmU6OnJlYWRDYWNoZXNGcm9tRGlzayhjb25zdCBTdHJpbmcmIG9yaWdpbiwg
Q2FjaGVzQ2FsbGJhY2smJiBjYWxsYmFjaykKIAogdm9pZCBFbmdpbmU6OnJlYWRDYWNoZSh1aW50
NjRfdCBjYWNoZUlkZW50aWZpZXIsIENhY2hlQ2FsbGJhY2smJiBjYWxsYmFjaykKIHsKLSAgICAv
LyBGSVhNRTogSW1wbGVtZW50IHJlYWRpbmcuCiAgICAgYXV0byogY2FjaGUgPSB0aGlzLT5jYWNo
ZShjYWNoZUlkZW50aWZpZXIpOwogICAgIGlmICghY2FjaGUpIHsKICAgICAgICAgY2FsbGJhY2so
bWFrZVVuZXhwZWN0ZWQoRXJyb3I6OkludGVybmFsKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CisgICAgaWYgKCFjYWNoZS0+aXNPcGVuZWQoKSkgeworICAgICAgICBjYWNoZS0+b3BlbihbdGhp
cywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjYWNoZUlkZW50aWZpZXIsIGNhbGxi
YWNrID0gV1RGTW92ZShjYWxsYmFjayldKHN0ZDo6b3B0aW9uYWw8RXJyb3I+JiYgZXJyb3IpIG11
dGFibGUgeworICAgICAgICAgICAgaWYgKGVycm9yKSB7CisgICAgICAgICAgICAgICAgY2FsbGJh
Y2sobWFrZVVuZXhwZWN0ZWQoZXJyb3IudmFsdWUoKSkpOworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYXV0byogY2FjaGUgPSB0aGlzLT5jYWNo
ZShjYWNoZUlkZW50aWZpZXIpOworICAgICAgICAgICAgaWYgKCFjYWNoZSkgeworICAgICAgICAg
ICAgICAgIGNhbGxiYWNrKG1ha2VVbmV4cGVjdGVkKEVycm9yOjpJbnRlcm5hbCkpOworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFTU0VSVChjYWNo
ZS0+aXNPcGVuZWQoKSk7CisgICAgICAgICAgICBjYWxsYmFjayhzdGQ6OnJlZmVyZW5jZV93cmFw
cGVyPENhY2hlPiB7ICpjYWNoZSB9KTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CiAgICAgY2FsbGJhY2soc3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxDYWNoZT4geyAqY2FjaGUg
fSk7CiB9CiAKQEAgLTMyOCwxMiArMzQzLDExIEBAIHZvaWQgRW5naW5lOjp1bmxvY2sodWludDY0
X3QgY2FjaGVJZGVudGlmaWVyKQogICAgIGlmICgtLWxvY2tDb3VudC0+dmFsdWUpCiAgICAgICAg
IHJldHVybjsKIAotICAgIHJlYWRDYWNoZShjYWNoZUlkZW50aWZpZXIsIFt0aGlzXShDYWNoZU9y
RXJyb3ImJiByZXN1bHQpIG11dGFibGUgewotICAgICAgICBpZiAoIXJlc3VsdC5oYXNWYWx1ZSgp
KQotICAgICAgICAgICAgcmV0dXJuOworICAgIGF1dG8qIGNhY2hlID0gdGhpcy0+Y2FjaGUoY2Fj
aGVJZGVudGlmaWVyKTsKKyAgICBpZiAoIWNhY2hlKQorICAgICAgICByZXR1cm47CiAKLSAgICAg
ICAgcmVzdWx0LnZhbHVlKCkuZ2V0KCkuZGlzcG9zZSgpOwotICAgIH0pOworICAgIGNhY2hlLT5k
aXNwb3NlKCk7CiB9CiAKIFN0cmluZyBFbmdpbmU6OnJlcHJlc2VudGF0aW9uKCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5l
Q2FjaGUuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3Jh
Z2VFbmdpbmVDYWNoZS5jcHAKaW5kZXggNDgxYWRkN2VjY2IxYzVhMjUyM2VlYWY4MmI2NjRiNzNk
ZmVhNjg1ZS4uMzViMzY0ODNlZWQzMGFmYjEwMDAxYWU5OTY1Y2IxM2UyNzRkNjgzYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdp
bmVDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNo
ZVN0b3JhZ2VFbmdpbmVDYWNoZS5jcHAKQEAgLTI3LDE1ICsyNywxNiBAQAogI2luY2x1ZGUgIkNh
Y2hlU3RvcmFnZUVuZ2luZS5oIgogCiAjaW5jbHVkZSAiQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVz
LmgiCisjaW5jbHVkZSAiTmV0d29ya0NhY2hlQ29kZXJzLmgiCiAjaW5jbHVkZSAiTmV0d29ya0Nh
Y2hlSU9DaGFubmVsLmgiCiAjaW5jbHVkZSAiTmV0d29ya0NhY2hlS2V5LmgiCiAjaW5jbHVkZSAi
TmV0d29ya1Byb2Nlc3MuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0NhY2hlUXVlcnlPcHRpb25zLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9IVFRQUGFyc2Vycy5oPgogI2luY2x1ZGUgPHBhbC9TZXNzaW9u
SUQuaD4KLSNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvTWFpblRo
cmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9V
VUlELmg+CiAjaW5jbHVkZSA8d3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuaD4KICNp
bmNsdWRlIDx3dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudERlY29kZXIuaD4KICNpbmNsdWRlIDx3
dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudEVuY29kZXIuaD4KQEAgLTUxLDcgKzUyLDE4IEBAIG5h
bWVzcGFjZSBXZWJLaXQgewogCiBuYW1lc3BhY2UgQ2FjaGVTdG9yYWdlIHsKIAotc3RhdGljIGlu
bGluZSBWZWN0b3I8dWludDY0X3Q+IHF1ZXJ5Q2FjaGUoY29uc3QgVmVjdG9yPFJlY29yZERhdGE+
KiByZWNvcmRzLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IENhY2hlUXVl
cnlPcHRpb25zJiBvcHRpb25zKQorc3RhdGljIHN0ZDo6b3B0aW9uYWw8c3RkOjpwYWlyPFJlY29y
ZCwgZG91YmxlPj4gZGVjb2RlUmVjb3JkSGVhZGVyKGNvbnN0IFN0b3JhZ2U6OlJlY29yZCYpOwor
CitzdGF0aWMgaW5saW5lIFN0cmluZyBjb21wdXRlS2V5VVJMKGNvbnN0IFVSTCYgdXJsKQorewor
ICAgIFVSTCBrZXlVUkwgPSB1cmw7CisgICAgaWYgKGtleVVSTC5oYXNRdWVyeSgpKQorICAgICAg
ICBrZXlVUkwuc2V0UXVlcnkoeyB9KTsKKyAgICBrZXlVUkwucmVtb3ZlRnJhZ21lbnRJZGVudGlm
aWVyKCk7CisgICAgcmV0dXJuIGtleVVSTDsKK30KKworc3RhdGljIGlubGluZSBWZWN0b3I8dWlu
dDY0X3Q+IHF1ZXJ5Q2FjaGUoY29uc3QgVmVjdG9yPFJlY29yZEluZm9ybWF0aW9uPiogcmVjb3Jk
cywgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBDYWNoZVF1ZXJ5T3B0aW9u
cyYgb3B0aW9ucykKIHsKICAgICBpZiAoIXJlY29yZHMpCiAgICAgICAgIHJldHVybiB7IH07CkBA
IC02Nyw0NyArNzksNDMgQEAgc3RhdGljIGlubGluZSBWZWN0b3I8dWludDY0X3Q+IHF1ZXJ5Q2Fj
aGUoY29uc3QgVmVjdG9yPFJlY29yZERhdGE+KiByZWNvcmRzLCBjb24KICAgICByZXR1cm4gcmVz
dWx0czsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZVZhcnlJbmZvcm1hdGlvbihSZWNv
cmREYXRhJiByZWNvcmREYXRhKQorc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZVZhcnlJbmZvcm1h
dGlvbihSZWNvcmRJbmZvcm1hdGlvbiYgcmVjb3JkSW5mb3JtYXRpb24sIGNvbnN0IFJlc291cmNl
UmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7Ci0g
ICAgYXV0byB2YXJ5VmFsdWUgPSByZWNvcmREYXRhLmRhdGEtPnJlc3BvbnNlLmh0dHBIZWFkZXJG
aWVsZChXZWJDb3JlOjpIVFRQSGVhZGVyTmFtZTo6VmFyeSk7CisgICAgYXV0byB2YXJ5VmFsdWUg
PSByZXNwb25zZS5odHRwSGVhZGVyRmllbGQoV2ViQ29yZTo6SFRUUEhlYWRlck5hbWU6OlZhcnkp
OwogICAgIGlmICh2YXJ5VmFsdWUuaXNOdWxsKCkpIHsKLSAgICAgICAgcmVjb3JkRGF0YS5oYXNW
YXJ5U3RhciA9IGZhbHNlOwotICAgICAgICByZWNvcmREYXRhLnZhcnlIZWFkZXJzID0geyB9Owor
ICAgICAgICByZWNvcmRJbmZvcm1hdGlvbi5oYXNWYXJ5U3RhciA9IGZhbHNlOworICAgICAgICBy
ZWNvcmRJbmZvcm1hdGlvbi52YXJ5SGVhZGVycyA9IHsgfTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAogICAgIHZhcnlWYWx1ZS5zcGxpdCgnLCcsIGZhbHNlLCBbJl0oU3RyaW5nVmlldyB2aWV3
KSB7Ci0gICAgICAgIGlmICghcmVjb3JkRGF0YS5oYXNWYXJ5U3RhciAmJiBzdHJpcExlYWRpbmdB
bmRUcmFpbGluZ0hUVFBTcGFjZXModmlldykgPT0gIioiKQotICAgICAgICAgICAgcmVjb3JkRGF0
YS5oYXNWYXJ5U3RhciA9IHRydWU7CisgICAgICAgIGlmICghcmVjb3JkSW5mb3JtYXRpb24uaGFz
VmFyeVN0YXIgJiYgc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVFRQU3BhY2VzKHZpZXcpID09ICIq
IikKKyAgICAgICAgICAgIHJlY29yZEluZm9ybWF0aW9uLmhhc1ZhcnlTdGFyID0gdHJ1ZTsKICAg
ICAgICAgU3RyaW5nIGhlYWRlck5hbWUgPSB2aWV3LnRvU3RyaW5nKCk7Ci0gICAgICAgIHJlY29y
ZERhdGEudmFyeUhlYWRlcnMuYWRkKGhlYWRlck5hbWUsIHJlY29yZERhdGEuZGF0YS0+cmVxdWVz
dC5odHRwSGVhZGVyRmllbGQoaGVhZGVyTmFtZSkpOworICAgICAgICByZWNvcmRJbmZvcm1hdGlv
bi52YXJ5SGVhZGVycy5hZGQoaGVhZGVyTmFtZSwgcmVxdWVzdC5odHRwSGVhZGVyRmllbGQoaGVh
ZGVyTmFtZSkpOwogICAgIH0pOwogCi0gICAgaWYgKHJlY29yZERhdGEuaGFzVmFyeVN0YXIpCi0g
ICAgICAgIHJlY29yZERhdGEudmFyeUhlYWRlcnMgPSB7IH07Ci19Ci0KLXN0YXRpYyBpbmxpbmUg
UmVjb3JkIHRvUmVjb3JkKGNvbnN0IFJlY29yZERhdGEmIHJlY29yZCkKLXsKLSAgICByZXR1cm4g
eyByZWNvcmQuaWRlbnRpZmllciwgcmVjb3JkLnVwZGF0ZVJlc3BvbnNlQ291bnRlciwgcmVjb3Jk
LmRhdGEtPnJlcXVlc3RIZWFkZXJzR3VhcmQsIHJlY29yZC5kYXRhLT5yZXF1ZXN0LCByZWNvcmQu
ZGF0YS0+b3B0aW9ucywgcmVjb3JkLmRhdGEtPnJlZmVycmVyLCByZWNvcmQuZGF0YS0+cmVzcG9u
c2VIZWFkZXJzR3VhcmQsIHJlY29yZC5kYXRhLT5yZXNwb25zZSwgY29weVJlc3BvbnNlQm9keShy
ZWNvcmQuZGF0YS0+cmVzcG9uc2VCb2R5KSB9OworICAgIGlmIChyZWNvcmRJbmZvcm1hdGlvbi5o
YXNWYXJ5U3RhcikKKyAgICAgICAgcmVjb3JkSW5mb3JtYXRpb24udmFyeUhlYWRlcnMgPSB7IH07
CiB9CiAKLXN0YXRpYyBpbmxpbmUgUmVjb3JkRGF0YSB0b1JlY29yZERhdGEoUmVjb3JkJiYgcmVj
b3JkKQorUmVjb3JkSW5mb3JtYXRpb24gQ2FjaGU6OnRvUmVjb3JkSW5mb3JtYXRpb24oY29uc3Qg
UmVjb3JkJiByZWNvcmQpCiB7Ci0gICAgYXV0byB1cmwgPSByZWNvcmQucmVxdWVzdC51cmwoKTsK
LSAgICBSZWNvcmREYXRhOjpEYXRhIGRhdGEgPSB7IHJlY29yZC5yZXF1ZXN0SGVhZGVyc0d1YXJk
LCBXVEZNb3ZlKHJlY29yZC5yZXF1ZXN0KSwgV1RGTW92ZShyZWNvcmQub3B0aW9ucyksIFdURk1v
dmUocmVjb3JkLnJlZmVycmVyKSwgV1RGTW92ZShyZWNvcmQucmVzcG9uc2VIZWFkZXJzR3VhcmQp
LCBXVEZNb3ZlKHJlY29yZC5yZXNwb25zZSksIFdURk1vdmUocmVjb3JkLnJlc3BvbnNlQm9keSkg
fTsKLSAgICBSZWNvcmREYXRhIHJlY29yZERhdGEgPSB7IHsgfSwgbW9ub3RvbmljYWxseUluY3Jl
YXNpbmdUaW1lTVMoKSwgcmVjb3JkLmlkZW50aWZpZXIsIDAsIHVybCwgZmFsc2UsIHsgfSwgV1RG
TW92ZShkYXRhKSB9OworICAgIGF1dG8gaW5zZXJ0aW9uVGltZSA9IG1vbm90b25pY2FsbHlJbmNy
ZWFzaW5nVGltZU1TKCk7CisgICAgYXV0byBrZXkgPSBLZXkgeyBBU0NJSUxpdGVyYWwoInJlY29y
ZCIpLCBTdHJpbmcgeyBtX3VuaXF1ZU5hbWUgfSwgU3RyaW5nKCksIGNyZWF0ZUNhbm9uaWNhbFVV
SURTdHJpbmcoKSwgbV9jYWNoZXMuc2FsdCgpIH07CiAKLSAgICB1cGRhdGVWYXJ5SW5mb3JtYXRp
b24ocmVjb3JkRGF0YSk7CisgICAgUmVjb3JkSW5mb3JtYXRpb24gcmVjb3JkSW5mb3JtYXRpb24g
PSB7IFdURk1vdmUoa2V5KSwgaW5zZXJ0aW9uVGltZSwgcmVjb3JkLmlkZW50aWZpZXIsIDAgLCBy
ZWNvcmQucmVxdWVzdC51cmwoKSwgZmFsc2UsIHsgfSB9OworICAgIHVwZGF0ZVZhcnlJbmZvcm1h
dGlvbihyZWNvcmRJbmZvcm1hdGlvbiwgcmVjb3JkLnJlcXVlc3QsIHJlY29yZC5yZXNwb25zZSk7
CiAKLSAgICByZXR1cm4gcmVjb3JkRGF0YTsKKyAgICByZXR1cm4gcmVjb3JkSW5mb3JtYXRpb247
CiB9CiAKLUNhY2hlOjpDYWNoZShDYWNoZXMmIGNhY2hlcywgdWludDY0X3QgaWRlbnRpZmllciwg
U3RhdGUgc3RhdGUsIFN0cmluZyYmIG5hbWUpCitDYWNoZTo6Q2FjaGUoQ2FjaGVzJiBjYWNoZXMs
IHVpbnQ2NF90IGlkZW50aWZpZXIsIFN0YXRlIHN0YXRlLCBTdHJpbmcmJiBuYW1lLCBTdHJpbmcm
JiB1bmlxdWVOYW1lKQogICAgIDogbV9jYWNoZXMoY2FjaGVzKQogICAgICwgbV9zdGF0ZShzdGF0
ZSkKICAgICAsIG1faWRlbnRpZmllcihpZGVudGlmaWVyKQogICAgICwgbV9uYW1lKFdURk1vdmUo
bmFtZSkpCisgICAgLCBtX3VuaXF1ZU5hbWUoV1RGTW92ZSh1bmlxdWVOYW1lKSkKIHsKIH0KIApA
QCAtMTM0LDE4ICsxNDIsNTUgQEAgdm9pZCBDYWNoZTo6b3BlbihDb21wbGV0aW9uQ2FsbGJhY2sm
JiBjYWxsYmFjaykKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBtX3N0YXRlID0gU3RhdGU6
Ok9wZW5pbmc7Ci0gICAgcmVhZFJlY29yZHNMaXN0KFtjYWNoZXMgPSBtYWtlUmVmKG1fY2FjaGVz
KSwgaWRlbnRpZmllciA9IG1faWRlbnRpZmllciwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNr
KV0oc3RkOjpvcHRpb25hbDxFcnJvcj4mJiBlcnJvcikgbXV0YWJsZSB7Ci0gICAgICAgIGF1dG8q
IGNhY2hlID0gY2FjaGVzLT5maW5kKGlkZW50aWZpZXIpOwotICAgICAgICBpZiAoIWNhY2hlKSB7
Ci0gICAgICAgICAgICBjYWxsYmFjayhFcnJvcjo6SW50ZXJuYWwpOworICAgIEhhc2hNYXA8U3Ry
aW5nLCBWZWN0b3I8UmVjb3JkSW5mb3JtYXRpb24+PiByZWNvcmRzOworICAgIFZlY3RvcjxLZXk+
IGZhaWxlZFJlY29yZHM7CisgICAgbV9jYWNoZXMucmVhZFJlY29yZHNMaXN0KCp0aGlzLCBbY2Fj
aGVzID0gbWFrZVJlZihtX2NhY2hlcyksIGlkZW50aWZpZXIgPSBtX2lkZW50aWZpZXIsIGNhbGxi
YWNrID0gV1RGTW92ZShjYWxsYmFjayksIHJlY29yZHMgPSBXVEZNb3ZlKHJlY29yZHMpLCBmYWls
ZWRSZWNvcmRzID0gV1RGTW92ZShmYWlsZWRSZWNvcmRzKV0oY29uc3QgYXV0byogc3RvcmFnZVJl
Y29yZCwgY29uc3QgYXV0byYpIG11dGFibGUgeworICAgICAgICBpZiAoIXN0b3JhZ2VSZWNvcmQp
IHsKKyAgICAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbY2FjaGVzID0gV1RGTW92
ZShjYWNoZXMpLCBpZGVudGlmaWVyLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCByZWNv
cmRzID0gV1RGTW92ZShyZWNvcmRzKSwgZmFpbGVkUmVjb3JkcyA9IFdURk1vdmUoZmFpbGVkUmVj
b3JkcyldKCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgZm9yIChhdXRvJiBrZXkgOiBmYWls
ZWRSZWNvcmRzKQorICAgICAgICAgICAgICAgICAgICBjYWNoZXMtPnJlbW92ZVJlY29yZChrZXkp
OworCisgICAgICAgICAgICAgICAgYXV0byogY2FjaGUgPSBjYWNoZXMtPmZpbmQoaWRlbnRpZmll
cik7CisgICAgICAgICAgICAgICAgaWYgKCFjYWNoZSkgeworICAgICAgICAgICAgICAgICAgICBj
YWxsYmFjayhFcnJvcjo6SW50ZXJuYWwpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhY2hlLT5tX3JlY29yZHMgPSBXVEZN
b3ZlKHJlY29yZHMpOworICAgICAgICAgICAgICAgIGNhY2hlLT5maW5pc2hPcGVuaW5nKFdURk1v
dmUoY2FsbGJhY2spLCBzdGQ6Om51bGxvcHQpOworICAgICAgICAgICAgfSk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgY2FjaGUtPmZpbmlzaE9wZW5pbmcoV1RGTW92
ZShjYWxsYmFjayksIFdURk1vdmUoZXJyb3IpKTsKKworICAgICAgICBhdXRvIGRlY29kZWQgPSBk
ZWNvZGVSZWNvcmRIZWFkZXIoKnN0b3JhZ2VSZWNvcmQpOworICAgICAgICBpZiAoIWRlY29kZWQp
IHsKKyAgICAgICAgICAgIGZhaWxlZFJlY29yZHMuYXBwZW5kKHN0b3JhZ2VSZWNvcmQtPmtleSk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBhdXRvJiByZWNvcmQg
PSBkZWNvZGVkLT5maXJzdDsKKyAgICAgICAgYXV0byBpbnNlcnRpb25UaW1lID0gZGVjb2RlZC0+
c2Vjb25kOworCisgICAgICAgIFJlY29yZEluZm9ybWF0aW9uIHJlY29yZEluZm9ybWF0aW9uID0g
eyBzdG9yYWdlUmVjb3JkLT5rZXksIGluc2VydGlvblRpbWUsIDAsIDAsIHJlY29yZC5yZXF1ZXN0
LnVybCgpLCBmYWxzZSwgeyB9IH07CisgICAgICAgIHVwZGF0ZVZhcnlJbmZvcm1hdGlvbihyZWNv
cmRJbmZvcm1hdGlvbiwgcmVjb3JkLnJlcXVlc3QsIHJlY29yZC5yZXNwb25zZSk7CisKKyAgICAg
ICAgYXV0byYgc2FtZVVSTFJlY29yZHMgPSByZWNvcmRzLmVuc3VyZShjb21wdXRlS2V5VVJMKHJl
Y29yZEluZm9ybWF0aW9uLnVybCksIFtdIHsgcmV0dXJuIFZlY3RvcjxSZWNvcmRJbmZvcm1hdGlv
bj4geyB9OyB9KS5pdGVyYXRvci0+dmFsdWU7CisgICAgICAgIHNhbWVVUkxSZWNvcmRzLmFwcGVu
ZChXVEZNb3ZlKHJlY29yZEluZm9ybWF0aW9uKSk7CiAgICAgfSk7CiB9CiAKIHZvaWQgQ2FjaGU6
OmZpbmlzaE9wZW5pbmcoQ29tcGxldGlvbkNhbGxiYWNrJiYgY2FsbGJhY2ssIHN0ZDo6b3B0aW9u
YWw8RXJyb3I+JiYgZXJyb3IpCiB7CisgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8
UmVjb3JkSW5mb3JtYXRpb24+PiByZWNvcmRzOworICAgIGZvciAoYXV0byYgdmFsdWUgOiBtX3Jl
Y29yZHMudmFsdWVzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvJiByZWNvcmQgOiB2YWx1ZSkKKyAg
ICAgICAgICAgIHJlY29yZHMuYXBwZW5kKHJlY29yZCk7CisgICAgfQorICAgIHN0ZDo6c29ydChy
ZWNvcmRzLmJlZ2luKCksIHJlY29yZHMuZW5kKCksIFsmXShjb25zdCBhdXRvJiBhLCBjb25zdCBh
dXRvJiBiKSB7CisgICAgICAgIHJldHVybiBhLmdldCgpLmluc2VydGlvblRpbWUgPCBiLmdldCgp
Lmluc2VydGlvblRpbWU7CisgICAgfSk7CisgICAgZm9yIChhdXRvJiByZWNvcmQgOiByZWNvcmRz
KQorICAgICAgICByZWNvcmQuZ2V0KCkuaWRlbnRpZmllciA9ICsrbV9uZXh0UmVjb3JkSWRlbnRp
ZmllcjsKKwogICAgIGlmIChlcnJvcikgewogICAgICAgICBtX3N0YXRlID0gU3RhdGU6OlVuaW5p
dGlhbGl6ZWQ7CiAgICAgICAgIGNhbGxiYWNrKGVycm9yLnZhbHVlKCkpOwpAQCAtMTYyLDUyICsy
MDcsODkgQEAgdm9pZCBDYWNoZTo6ZmluaXNoT3BlbmluZyhDb21wbGV0aW9uQ2FsbGJhY2smJiBj
YWxsYmFjaywgc3RkOjpvcHRpb25hbDxFcnJvcj4mJgogICAgICAgICBjYWxsYmFjayhzdGQ6Om51
bGxvcHQpOwogfQogCi1WZWN0b3I8UmVjb3JkPiBDYWNoZTo6cmV0cmlldmVSZWNvcmRzKGNvbnN0
IFVSTCYgdXJsKSBjb25zdAorY2xhc3MgUmVhZFJlY29yZFRhc2tDb3VudGVyIDogcHVibGljIFRo
cmVhZFNhZmVSZWZDb3VudGVkPFJlYWRSZWNvcmRUYXNrQ291bnRlcj4geworcHVibGljOgorICAg
IHVzaW5nIFJlYWRSZWNvcmRzQ2FsbGJhY2sgPSBXVEY6OkZ1bmN0aW9uPHZvaWQoVmVjdG9yPFJl
Y29yZD4mJiwgVmVjdG9yPHVpbnQ2NF90PiYmKT47CisgICAgc3RhdGljIFJlZlB0cjxSZWFkUmVj
b3JkVGFza0NvdW50ZXI+IGNyZWF0ZShSZWFkUmVjb3Jkc0NhbGxiYWNrJiYgY2FsbGJhY2spIHsg
cmV0dXJuIGFkb3B0UmVmKG5ldyBSZWFkUmVjb3JkVGFza0NvdW50ZXIoV1RGTW92ZShjYWxsYmFj
aykpKTsgfQorCisgICAgflJlYWRSZWNvcmRUYXNrQ291bnRlcigpCisgICAgeworICAgICAgICBp
ZiAoIW1fY2FsbGJhY2spCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHN0ZDo6c29ydCht
X3JlY29yZHMuYmVnaW4oKSwgbV9yZWNvcmRzLmVuZCgpLCBbJl0gKGNvbnN0IGF1dG8mIGEsIGNv
bnN0IGF1dG8mIGIpIHsKKyAgICAgICAgICAgIHJldHVybiBhLmlkZW50aWZpZXIgPCBiLmlkZW50
aWZpZXI7CisgICAgICAgIH0pOworICAgICAgICBtX2NhbGxiYWNrKFdURk1vdmUobV9yZWNvcmRz
KSwgV1RGTW92ZShtX2ZhaWxlZFJlY29yZHMpKTsKKyAgICB9CisKKyAgICB2b2lkIGFwcGVuZFJl
Y29yZChFeHBlY3RlZDxSZWNvcmQsIEVycm9yPiYmIHJlc3VsdCwgdWludDY0X3QgcmVjb3JkSWRl
bnRpZmllciwgdWludDY0X3QgdXBkYXRlQ291bnRlcikKKyAgICB7CisgICAgICAgIGlmICghcmVz
dWx0Lmhhc1ZhbHVlKCkpIHsKKyAgICAgICAgICAgIG1fZmFpbGVkUmVjb3Jkcy5hcHBlbmQocmVj
b3JkSWRlbnRpZmllcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
cmVzdWx0LnZhbHVlKCkuaWRlbnRpZmllciA9IHJlY29yZElkZW50aWZpZXI7CisgICAgICAgIHJl
c3VsdC52YWx1ZSgpLnVwZGF0ZVJlc3BvbnNlQ291bnRlciA9IHVwZGF0ZUNvdW50ZXI7CisgICAg
ICAgIG1fcmVjb3Jkcy5hcHBlbmQoV1RGTW92ZShyZXN1bHQudmFsdWUoKSkpOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICBleHBsaWNpdCBSZWFkUmVjb3JkVGFza0NvdW50ZXIoUmVhZFJlY29yZHND
YWxsYmFjayYmIGNhbGxiYWNrKSA6IG1fY2FsbGJhY2soV1RGTW92ZShjYWxsYmFjaykpIHsgfQor
CisgICAgUmVhZFJlY29yZHNDYWxsYmFjayBtX2NhbGxiYWNrOworICAgIFZlY3RvcjxSZWNvcmQ+
IG1fcmVjb3JkczsKKyAgICBWZWN0b3I8dWludDY0X3Q+IG1fZmFpbGVkUmVjb3JkczsKK307CisK
K3ZvaWQgQ2FjaGU6OnJldHJpZXZlUmVjb3JkKGNvbnN0IFJlY29yZEluZm9ybWF0aW9uJiByZWNv
cmQsIFJlZlB0cjxSZWFkUmVjb3JkVGFza0NvdW50ZXI+JiB0YXNrQ291bnRlcikKIHsKKyAgICBy
ZWFkUmVjb3JkRnJvbURpc2socmVjb3JkLCBbY2FjaGVzID0gbWFrZVJlZihtX2NhY2hlcyksIGlk
ZW50aWZpZXIgPSBtX2lkZW50aWZpZXIsIHJlY29yZElkZW50aWZpZXIgPSByZWNvcmQuaWRlbnRp
ZmllciwgdXBkYXRlQ291bnRlciA9IHJlY29yZC51cGRhdGVSZXNwb25zZUNvdW50ZXIsIHRhc2tD
b3VudGVyXShFeHBlY3RlZDxSZWNvcmQsIEVycm9yPiYmIHJlc3VsdCkgbXV0YWJsZSB7CisgICAg
ICAgIGF1dG8qIGNhY2hlID0gY2FjaGVzLT5maW5kKGlkZW50aWZpZXIpOworICAgICAgICBpZiAo
IWNhY2hlKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB0YXNrQ291bnRlci0+YXBwZW5k
UmVjb3JkKFdURk1vdmUocmVzdWx0KSwgcmVjb3JkSWRlbnRpZmllciwgdXBkYXRlQ291bnRlcik7
CisgICAgfSk7Cit9CisKK3ZvaWQgQ2FjaGU6OnJldHJpZXZlUmVjb3Jkcyhjb25zdCBVUkwmIHVy
bCwgUmVjb3Jkc0NhbGxiYWNrJiYgY2FsbGJhY2spCit7CisgICAgQVNTRVJUKG1fc3RhdGUgPT0g
U3RhdGU6Ok9wZW4pOworCisgICAgYXV0byB0YXNrQ291bnRlciA9IFJlYWRSZWNvcmRUYXNrQ291
bnRlcjo6Y3JlYXRlKFtjYWNoZXMgPSBtYWtlUmVmKG1fY2FjaGVzKSwgaWRlbnRpZmllciA9IG1f
aWRlbnRpZmllciwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oVmVjdG9yPFJlY29yZD4m
JiByZWNvcmRzLCBWZWN0b3I8dWludDY0X3Q+JiYgZmFpbGVkUmVjb3JkSWRlbnRpZmllcnMpIG11
dGFibGUgeworICAgICAgICBhdXRvKiBjYWNoZSA9IGNhY2hlcy0+ZmluZChpZGVudGlmaWVyKTsK
KyAgICAgICAgaWYgKGNhY2hlKQorICAgICAgICAgICAgY2FjaGUtPnJlbW92ZUZyb21SZWNvcmRM
aXN0KGZhaWxlZFJlY29yZElkZW50aWZpZXJzKTsKKyAgICAgICAgY2FsbGJhY2soV1RGTW92ZShy
ZWNvcmRzKSk7CisgICAgfSk7CisKICAgICBpZiAodXJsLmlzTnVsbCgpKSB7Ci0gICAgICAgIFZl
Y3RvcjxSZWNvcmQ+IHJlc3VsdDsKICAgICAgICAgZm9yIChhdXRvJiByZWNvcmRzIDogbV9yZWNv
cmRzLnZhbHVlcygpKSB7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIHJlY29yZCA6IHJlY29yZHMp
Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh0b1JlY29yZChyZWNvcmQpKTsKKyAgICAg
ICAgICAgICAgICByZXRyaWV2ZVJlY29yZChyZWNvcmQsIHRhc2tDb3VudGVyKTsKICAgICAgICAg
fQotICAgICAgICBzdGQ6OnNvcnQocmVzdWx0LmJlZ2luKCksIHJlc3VsdC5lbmQoKSwgW10oY29u
c3QgYXV0byYgYSwgY29uc3QgYXV0byYgYikgewotICAgICAgICAgICAgcmV0dXJuIGEuaWRlbnRp
ZmllciA8IGIuaWRlbnRpZmllcjsKLSAgICAgICAgfSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBjb25zdCBhdXRvKiByZWNvcmRzID0gcmVj
b3Jkc0Zyb21VUkwodXJsKTsKKyAgICBhdXRvKiByZWNvcmRzID0gcmVjb3Jkc0Zyb21VUkwodXJs
KTsKICAgICBpZiAoIXJlY29yZHMpCi0gICAgICAgIHJldHVybiB7IH07CisgICAgICAgIHJldHVy
bjsKIAotICAgIFZlY3RvcjxSZWNvcmQ+IHJlc3VsdDsKLSAgICByZXN1bHQucmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eShyZWNvcmRzLT5zaXplKCkpOwogICAgIGZvciAoYXV0byYgcmVjb3JkIDogKnJl
Y29yZHMpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQodG9SZWNvcmQocmVjb3JkKSk7Ci0gICAgcmV0
dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0cmlldmVSZWNvcmQocmVjb3JkLCB0YXNrQ291bnRlcik7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgU3RyaW5nIGNvbXB1dGVLZXlVUkwoY29uc3QgVVJMJiB1cmwp
Ci17Ci0gICAgVVJMIGtleVVSTCA9IHVybDsKLSAgICBpZiAoa2V5VVJMLmhhc1F1ZXJ5KCkpCi0g
ICAgICAgIGtleVVSTC5zZXRRdWVyeSh7IH0pOwotICAgIGtleVVSTC5yZW1vdmVGcmFnbWVudElk
ZW50aWZpZXIoKTsKLSAgICByZXR1cm4ga2V5VVJMOwotfQotCi1SZWNvcmREYXRhJiBDYWNoZTo6
YWRkUmVjb3JkKFZlY3RvcjxSZWNvcmREYXRhPiogcmVjb3JkcywgUmVjb3JkJiYgcmVjb3JkKQor
UmVjb3JkSW5mb3JtYXRpb24mIENhY2hlOjphZGRSZWNvcmQoVmVjdG9yPFJlY29yZEluZm9ybWF0
aW9uPiogcmVjb3JkcywgY29uc3QgUmVjb3JkJiByZWNvcmQpCiB7CiAgICAgaWYgKCFyZWNvcmRz
KSB7CiAgICAgICAgIGF1dG8ga2V5ID0gY29tcHV0ZUtleVVSTChyZWNvcmQucmVxdWVzdC51cmwo
KSk7CiAgICAgICAgIEFTU0VSVCghbV9yZWNvcmRzLmNvbnRhaW5zKGtleSkpOwotICAgICAgICBy
ZWNvcmRzID0gJm1fcmVjb3Jkcy5zZXQoa2V5LCBWZWN0b3I8UmVjb3JkRGF0YT4geyB9KS5pdGVy
YXRvci0+dmFsdWU7CisgICAgICAgIHJlY29yZHMgPSAmbV9yZWNvcmRzLnNldChrZXksIFZlY3Rv
cjxSZWNvcmRJbmZvcm1hdGlvbj4geyB9KS5pdGVyYXRvci0+dmFsdWU7CiAgICAgfQotICAgIHJl
Y29yZHMtPmFwcGVuZCh0b1JlY29yZERhdGEoV1RGTW92ZShyZWNvcmQpKSk7CisgICAgcmVjb3Jk
cy0+YXBwZW5kKHRvUmVjb3JkSW5mb3JtYXRpb24ocmVjb3JkKSk7CiAgICAgcmV0dXJuIHJlY29y
ZHMtPmxhc3QoKTsKIH0KIAotVmVjdG9yPFJlY29yZERhdGE+KiBDYWNoZTo6cmVjb3Jkc0Zyb21V
UkwoY29uc3QgVVJMJiB1cmwpCitWZWN0b3I8UmVjb3JkSW5mb3JtYXRpb24+KiBDYWNoZTo6cmVj
b3Jkc0Zyb21VUkwoY29uc3QgVVJMJiB1cmwpCiB7CiAgICAgYXV0byBpdGVyYXRvciA9IG1fcmVj
b3Jkcy5maW5kKGNvbXB1dGVLZXlVUkwodXJsKSk7CiAgICAgaWYgKGl0ZXJhdG9yID09IG1fcmVj
b3Jkcy5lbmQoKSkKQEAgLTIxNSw3ICsyOTcsNyBAQCBWZWN0b3I8UmVjb3JkRGF0YT4qIENhY2hl
OjpyZWNvcmRzRnJvbVVSTChjb25zdCBVUkwmIHVybCkKICAgICByZXR1cm4gJml0ZXJhdG9yLT52
YWx1ZTsKIH0KIAotY29uc3QgVmVjdG9yPFJlY29yZERhdGE+KiBDYWNoZTo6cmVjb3Jkc0Zyb21V
UkwoY29uc3QgVVJMJiB1cmwpIGNvbnN0Citjb25zdCBWZWN0b3I8UmVjb3JkSW5mb3JtYXRpb24+
KiBDYWNoZTo6cmVjb3Jkc0Zyb21VUkwoY29uc3QgVVJMJiB1cmwpIGNvbnN0CiB7CiAgICAgYXV0
byBpdGVyYXRvciA9IG1fcmVjb3Jkcy5maW5kKGNvbXB1dGVLZXlVUkwodXJsKSk7CiAgICAgaWYg
KGl0ZXJhdG9yID09IG1fcmVjb3Jkcy5lbmQoKSkKQEAgLTIyMyw5ICszMDUsMzAgQEAgY29uc3Qg
VmVjdG9yPFJlY29yZERhdGE+KiBDYWNoZTo6cmVjb3Jkc0Zyb21VUkwoY29uc3QgVVJMJiB1cmwp
IGNvbnN0CiAgICAgcmV0dXJuICZpdGVyYXRvci0+dmFsdWU7CiB9CiAKK2NsYXNzIEFzeW5jaHJv
bm91c1B1dFRhc2tDb3VudGVyIDogcHVibGljIFJlZkNvdW50ZWQ8QXN5bmNocm9ub3VzUHV0VGFz
a0NvdW50ZXI+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmUHRyPEFzeW5jaHJvbm91c1B1dFRh
c2tDb3VudGVyPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgQXN5bmNocm9ub3VzUHV0
VGFza0NvdW50ZXIoKSk7IH0KKyAgICB+QXN5bmNocm9ub3VzUHV0VGFza0NvdW50ZXIoKQorICAg
IHsKKyAgICAgICAgaWYgKCFtX2NhbGxiYWNrKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBtX2NhbGxiYWNrKFdURk1vdmUobV9lcnJvcikpOworICAgIH0KKworICAgIHZvaWQgb25Db21w
bGV0aW9uKENvbXBsZXRpb25DYWxsYmFjayYmIGNhbGxiYWNrKSB7IG1fY2FsbGJhY2sgPSBXVEZN
b3ZlKGNhbGxiYWNrKTsgfQorICAgIHZvaWQgc2V0RXJyb3IoRXJyb3IgZXJyb3IpIHsgbV9lcnJv
ciA9IGVycm9yOyB9CisKK3ByaXZhdGU6CisgICAgc3RkOjpvcHRpb25hbDxFcnJvcj4gbV9lcnJv
cjsKKyAgICBDb21wbGV0aW9uQ2FsbGJhY2sgbV9jYWxsYmFjazsKK307CisKIHZvaWQgQ2FjaGU6
OnB1dChWZWN0b3I8UmVjb3JkPiYmIHJlY29yZHMsIFJlY29yZElkZW50aWZpZXJzQ2FsbGJhY2sm
JiBjYWxsYmFjaykKIHsKLSAgICBib29sIHNob3VsZFdyaXRlUmVjb3JkTGlzdCB7IGZhbHNlIH07
CisgICAgQVNTRVJUKG1fc3RhdGUgPT0gU3RhdGU6Ok9wZW4pOworCisgICAgYXV0byB0YXNrQ291
bnRlciA9IEFzeW5jaHJvbm91c1B1dFRhc2tDb3VudGVyOjpjcmVhdGUoKTsKKwogICAgIFdlYkNv
cmU6OkNhY2hlUXVlcnlPcHRpb25zIG9wdGlvbnM7CiAgICAgVmVjdG9yPHVpbnQ2NF90PiByZWNv
cmRJZGVudGlmaWVyczsKICAgICByZWNvcmRJZGVudGlmaWVycy5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KHJlY29yZHMuc2l6ZSgpKTsKQEAgLTIzNywzNCArMzQwLDIxIEBAIHZvaWQgQ2FjaGU6OnB1
dChWZWN0b3I8UmVjb3JkPiYmIHJlY29yZHMsIFJlY29yZElkZW50aWZpZXJzQ2FsbGJhY2smJiBj
YWxsYmFjaykKICAgICAgICAgICAgIHJlY29yZC5pZGVudGlmaWVyID0gKyttX25leHRSZWNvcmRJ
ZGVudGlmaWVyOwogICAgICAgICAgICAgcmVjb3JkSWRlbnRpZmllcnMudW5jaGVja2VkQXBwZW5k
KHJlY29yZC5pZGVudGlmaWVyKTsKIAotICAgICAgICAgICAgc2hvdWxkV3JpdGVSZWNvcmRMaXN0
ID0gdHJ1ZTsKLSAgICAgICAgICAgIGF1dG8mIHJlY29yZFRvV3JpdGUgPSBhZGRSZWNvcmQoc2Ft
ZVVSTFJlY29yZHMsIFdURk1vdmUocmVjb3JkKSk7Ci0gICAgICAgICAgICB3cml0ZVJlY29yZFRv
RGlzayhyZWNvcmRUb1dyaXRlKTsKKyAgICAgICAgICAgIGF1dG8mIHJlY29yZFRvV3JpdGUgPSBh
ZGRSZWNvcmQoc2FtZVVSTFJlY29yZHMsIHJlY29yZCk7CisgICAgICAgICAgICB3cml0ZVJlY29y
ZFRvRGlzayhyZWNvcmRUb1dyaXRlLCBXVEZNb3ZlKHJlY29yZCksIHRhc2tDb3VudGVyKTsKICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGF1dG8gaWRlbnRpZmllciA9IG1hdGNoaW5nUmVj
b3Jkc1swXTsKICAgICAgICAgICAgIGF1dG8gcG9zaXRpb24gPSBzYW1lVVJMUmVjb3Jkcy0+Zmlu
ZE1hdGNoaW5nKFsmXShjb25zdCBhdXRvJiBpdGVtKSB7IHJldHVybiBpdGVtLmlkZW50aWZpZXIg
PT0gaWRlbnRpZmllcjsgfSk7CiAgICAgICAgICAgICBBU1NFUlQocG9zaXRpb24gIT0gbm90Rm91
bmQpOwogICAgICAgICAgICAgaWYgKHBvc2l0aW9uICE9IG5vdEZvdW5kKSB7Ci0gICAgICAgICAg
ICAgICAgYXV0byYgZXhpc3RpbmdSZWNvcmQgPSAoKnNhbWVVUkxSZWNvcmRzKVtwb3NpdGlvbl07
CisgICAgICAgICAgICAgICAgYXV0byYgZXhpc3RpbmdSZWNvcmQgPSBzYW1lVVJMUmVjb3Jkcy0+
YXQocG9zaXRpb24pOwogICAgICAgICAgICAgICAgIHJlY29yZElkZW50aWZpZXJzLnVuY2hlY2tl
ZEFwcGVuZChpZGVudGlmaWVyKTsKLSAgICAgICAgICAgICAgICArK2V4aXN0aW5nUmVjb3JkLnVw
ZGF0ZVJlc3BvbnNlQ291bnRlcjsKLQotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUg
dGhlIGNhc2Ugd2hlcmUgZGF0YSBpcyBudWxsLgotICAgICAgICAgICAgICAgIEFTU0VSVChleGlz
dGluZ1JlY29yZC5kYXRhKTsKLSAgICAgICAgICAgICAgICBleGlzdGluZ1JlY29yZC5kYXRhLT5y
ZXNwb25zZUhlYWRlcnNHdWFyZCA9IHJlY29yZC5yZXNwb25zZUhlYWRlcnNHdWFyZDsKLSAgICAg
ICAgICAgICAgICBleGlzdGluZ1JlY29yZC5kYXRhLT5yZXNwb25zZSA9IFdURk1vdmUocmVjb3Jk
LnJlc3BvbnNlKTsKLSAgICAgICAgICAgICAgICBleGlzdGluZ1JlY29yZC5kYXRhLT5yZXNwb25z
ZUJvZHkgPSBXVEZNb3ZlKHJlY29yZC5yZXNwb25zZUJvZHkpOwotICAgICAgICAgICAgICAgIHVw
ZGF0ZVZhcnlJbmZvcm1hdGlvbihleGlzdGluZ1JlY29yZCk7Ci0gICAgICAgICAgICAgICAgd3Jp
dGVSZWNvcmRUb0Rpc2soZXhpc3RpbmdSZWNvcmQpOworICAgICAgICAgICAgICAgIHVwZGF0ZVJl
Y29yZFRvRGlzayhleGlzdGluZ1JlY29yZCwgV1RGTW92ZShyZWNvcmQpLCB0YXNrQ291bnRlcik7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoIXNob3VsZFdyaXRl
UmVjb3JkTGlzdCkgewotICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKHJlY29yZElkZW50aWZpZXJz
KSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgd3JpdGVSZWNvcmRzTGlzdChbY2FsbGJh
Y2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgcmVjb3JkSWRlbnRpZmllcnMgPSBXVEZNb3ZlKHJlY29y
ZElkZW50aWZpZXJzKV0oc3RkOjpvcHRpb25hbDxFcnJvcj4mJiBlcnJvcikgbXV0YWJsZSB7Cisg
ICAgdGFza0NvdW50ZXItPm9uQ29tcGxldGlvbihbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNr
KSwgcmVjb3JkSWRlbnRpZmllcnMgPSBXVEZNb3ZlKHJlY29yZElkZW50aWZpZXJzKV0oc3RkOjpv
cHRpb25hbDxFcnJvcj4mJiBlcnJvcikgbXV0YWJsZSB7CiAgICAgICAgIGlmIChlcnJvcikgewog
ICAgICAgICAgICAgY2FsbGJhY2sobWFrZVVuZXhwZWN0ZWQoZXJyb3IudmFsdWUoKSkpOwogICAg
ICAgICAgICAgcmV0dXJuOwpAQCAtMjc1LDYgKzM2NSw4IEBAIHZvaWQgQ2FjaGU6OnB1dChWZWN0
b3I8UmVjb3JkPiYmIHJlY29yZHMsIFJlY29yZElkZW50aWZpZXJzQ2FsbGJhY2smJiBjYWxsYmFj
aykKIAogdm9pZCBDYWNoZTo6cmVtb3ZlKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmIHJlcXVl
c3QsIFdlYkNvcmU6OkNhY2hlUXVlcnlPcHRpb25zJiYgb3B0aW9ucywgUmVjb3JkSWRlbnRpZmll
cnNDYWxsYmFjayYmIGNhbGxiYWNrKQogeworICAgIEFTU0VSVChtX3N0YXRlID09IFN0YXRlOjpP
cGVuKTsKKwogICAgIGF1dG8qIHJlY29yZHMgPSByZWNvcmRzRnJvbVVSTChyZXF1ZXN0LnVybCgp
KTsKICAgICBhdXRvIHJlY29yZElkZW50aWZpZXJzID0gcXVlcnlDYWNoZShyZWNvcmRzLCByZXF1
ZXN0LCBvcHRpb25zKTsKICAgICBpZiAocmVjb3JkSWRlbnRpZmllcnMuaXNFbXB0eSgpKSB7CkBA
IC0yODksMzUgKzM4MSwxNTYgQEAgdm9pZCBDYWNoZTo6cmVtb3ZlKFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdCYmIHJlcXVlc3QsIFdlYkNvcmU6OkNhY2hlUXVlcnlPcHRpb24KICAgICAgICAgcmV0
dXJuIHNob3VsZFJlbW92ZTsKICAgICB9KTsKIAotICAgIHdyaXRlUmVjb3Jkc0xpc3QoW2NhbGxi
YWNrID0gV1RGTW92ZShjYWxsYmFjayksIHJlY29yZElkZW50aWZpZXJzID0gV1RGTW92ZShyZWNv
cmRJZGVudGlmaWVycyldKHN0ZDo6b3B0aW9uYWw8RXJyb3I+JiYgZXJyb3IpIG11dGFibGUgewot
ICAgICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKG1ha2VVbmV4cGVjdGVk
KGVycm9yLnZhbHVlKCkpKTsKKyAgICBjYWxsYmFjayhXVEZNb3ZlKHJlY29yZElkZW50aWZpZXJz
KSk7Cit9CisKK3ZvaWQgQ2FjaGU6OnJlbW92ZUZyb21SZWNvcmRMaXN0KGNvbnN0IFZlY3Rvcjx1
aW50NjRfdD4mIHJlY29yZElkZW50aWZpZXJzKQoreworICAgIGlmIChyZWNvcmRJZGVudGlmaWVy
cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGZvciAoYXV0byYgcmVjb3JkcyA6
IG1fcmVjb3Jkcy52YWx1ZXMoKSkgeworICAgICAgICByZWNvcmRzLnJlbW92ZUFsbE1hdGNoaW5n
KFt0aGlzLCAmcmVjb3JkSWRlbnRpZmllcnNdKGNvbnN0IGF1dG8mIGl0ZW0pIHsKKyAgICAgICAg
ICAgIHJldHVybiBub3RGb3VuZCAhPSByZWNvcmRJZGVudGlmaWVycy5maW5kTWF0Y2hpbmcoW3Ro
aXMsICZpdGVtXShjb25zdCBhdXRvJiBpZGVudGlmaWVyKSB7CisgICAgICAgICAgICAgICAgaWYg
KGl0ZW0uaWRlbnRpZmllciAhPSBpZGVudGlmaWVyKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgcmVtb3ZlUmVjb3JkRnJvbURpc2soaXRlbSk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7
CisgICAgfQorfQorCit2b2lkIENhY2hlOjp3cml0ZVJlY29yZFRvRGlzayhjb25zdCBSZWNvcmRJ
bmZvcm1hdGlvbiYgcmVjb3JkSW5mb3JtYXRpb24sIFJlY29yZCYmIHJlY29yZCwgY29uc3QgUmVm
UHRyPEFzeW5jaHJvbm91c1B1dFRhc2tDb3VudGVyPiYgY291bnRlcikKK3sKKyAgICBtX2NhY2hl
cy53cml0ZVJlY29yZCgqdGhpcywgcmVjb3JkSW5mb3JtYXRpb24sIFdURk1vdmUocmVjb3JkKSwg
W2NvdW50ZXJdKHN0ZDo6b3B0aW9uYWw8RXJyb3I+JiYgZXJyb3IpIHsKKyAgICAgICAgQVNTRVJU
KCFlcnJvcik7CisgICAgfSk7Cit9CisKK3ZvaWQgQ2FjaGU6OnVwZGF0ZVJlY29yZFRvRGlzayhS
ZWNvcmRJbmZvcm1hdGlvbiYgZXhpc3RpbmdSZWNvcmQsIFJlY29yZCYmIHJlY29yZCwgY29uc3Qg
UmVmUHRyPEFzeW5jaHJvbm91c1B1dFRhc2tDb3VudGVyPiYgdGFza0NvdW50ZXIpCit7CisgICAg
KytleGlzdGluZ1JlY29yZC51cGRhdGVSZXNwb25zZUNvdW50ZXI7CisgICAgcmVhZFJlY29yZEZy
b21EaXNrKGV4aXN0aW5nUmVjb3JkLCBbY2FjaGVzID0gbWFrZVJlZihtX2NhY2hlcyksIGlkZW50
aWZpZXIgPSBtX2lkZW50aWZpZXIsIHJlY29yZElkZW50aWZpZXIgPSBleGlzdGluZ1JlY29yZC5p
ZGVudGlmaWVyLCByZWNvcmQgPSBXVEZNb3ZlKHJlY29yZCksIHRhc2tDb3VudGVyXShFeHBlY3Rl
ZDxSZWNvcmQsIEVycm9yPiYmIHJlc3VsdCkgbXV0YWJsZSB7CisgICAgICAgIGlmICghcmVzdWx0
Lmhhc1ZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgY2Fs
bGJhY2soV1RGTW92ZShyZWNvcmRJZGVudGlmaWVycykpOworCisgICAgICAgIGF1dG8qIGNhY2hl
ID0gY2FjaGVzLT5maW5kKGlkZW50aWZpZXIpOworICAgICAgICBpZiAoIWNhY2hlKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIGF1dG8qIHNhbWVVUkxSZWNvcmRzID0gY2FjaGUtPnJl
Y29yZHNGcm9tVVJMKHJlc3VsdC52YWx1ZSgpLnJlcXVlc3QudXJsKCkpOworICAgICAgICBpZiAo
IXNhbWVVUkxSZWNvcmRzKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGF1dG8gcG9z
aXRpb24gPSBzYW1lVVJMUmVjb3Jkcy0+ZmluZE1hdGNoaW5nKFsmXSAoY29uc3QgYXV0byYgaXRl
bSkgeyByZXR1cm4gaXRlbS5pZGVudGlmaWVyID09IHJlY29yZElkZW50aWZpZXI7IH0pOworICAg
ICAgICBpZiAocG9zaXRpb24gPT0gbm90Rm91bmQpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIGF1dG8mIHJlY29yZEluZm8gPSBzYW1lVVJMUmVjb3Jkcy0+YXQocG9zaXRpb24pOworCisg
ICAgICAgIGF1dG8mIHJlY29yZEZyb21EaXNrID0gcmVzdWx0LnZhbHVlKCk7CisgICAgICAgIHJl
Y29yZC5yZXF1ZXN0SGVhZGVyc0d1YXJkID0gcmVjb3JkRnJvbURpc2sucmVxdWVzdEhlYWRlcnNH
dWFyZDsKKyAgICAgICAgcmVjb3JkLnJlcXVlc3QgPSBXVEZNb3ZlKHJlY29yZEZyb21EaXNrLnJl
cXVlc3QpOworICAgICAgICByZWNvcmQub3B0aW9ucyA9IFdURk1vdmUocmVjb3JkRnJvbURpc2su
b3B0aW9ucyk7CisgICAgICAgIHJlY29yZC5yZWZlcnJlciA9IFdURk1vdmUocmVjb3JkRnJvbURp
c2sucmVmZXJyZXIpOworCisgICAgICAgIHVwZGF0ZVZhcnlJbmZvcm1hdGlvbihyZWNvcmRJbmZv
LCByZWNvcmQucmVxdWVzdCwgcmVjb3JkLnJlc3BvbnNlKTsKKworICAgICAgICBjYWNoZS0+d3Jp
dGVSZWNvcmRUb0Rpc2socmVjb3JkSW5mbywgV1RGTW92ZShyZWNvcmQpLCB0YXNrQ291bnRlcik7
CiAgICAgfSk7CiB9CiAKLXZvaWQgQ2FjaGU6OnJlYWRSZWNvcmRzTGlzdChDb21wbGV0aW9uQ2Fs
bGJhY2smJiBjYWxsYmFjaykKK3ZvaWQgQ2FjaGU6OnJlYWRSZWNvcmRGcm9tRGlzayhjb25zdCBS
ZWNvcmRJbmZvcm1hdGlvbiYgcmVjb3JkLCBXVEY6OkZ1bmN0aW9uPHZvaWQoRXhwZWN0ZWQ8UmVj
b3JkLCBFcnJvcj4mJik+JiYgY2FsbGJhY2spCiB7Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0
aGlzLgotICAgIGNhbGxiYWNrKHN0ZDo6bnVsbG9wdCk7CisgICAgbV9jYWNoZXMucmVhZFJlY29y
ZChyZWNvcmQua2V5LCBXVEZNb3ZlKGNhbGxiYWNrKSk7CiB9CiAKLXZvaWQgQ2FjaGU6OndyaXRl
UmVjb3Jkc0xpc3QoQ29tcGxldGlvbkNhbGxiYWNrJiYgY2FsbGJhY2spCit2b2lkIENhY2hlOjpy
ZW1vdmVSZWNvcmRGcm9tRGlzayhjb25zdCBSZWNvcmRJbmZvcm1hdGlvbiYgcmVjb3JkKQogewot
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KLSAgICBjYWxsYmFjayhzdGQ6Om51bGxvcHQp
OworICAgIG1fY2FjaGVzLnJlbW92ZVJlY29yZChyZWNvcmQua2V5KTsKK30KKworU3RvcmFnZTo6
UmVjb3JkIENhY2hlOjplbmNvZGUoY29uc3QgUmVjb3JkSW5mb3JtYXRpb24mIHJlY29yZEluZm9y
bWF0aW9uLCBjb25zdCBSZWNvcmQmIHJlY29yZCkKK3sKKyAgICBXVEY6OlBlcnNpc3RlbmNlOjpF
bmNvZGVyIGVuY29kZXI7CisgICAgZW5jb2RlciA8PCByZWNvcmRJbmZvcm1hdGlvbi5pbnNlcnRp
b25UaW1lOworICAgIGVuY29kZXIgPDwgcmVjb3JkLnJlcXVlc3RIZWFkZXJzR3VhcmQ7CisgICAg
cmVjb3JkLnJlcXVlc3QuZW5jb2RlV2l0aG91dFBsYXRmb3JtRGF0YShlbmNvZGVyKTsKKyAgICBl
bmNvZGVyIDw8IHJlY29yZC5vcHRpb25zOworICAgIGVuY29kZXIgPDwgcmVjb3JkLnJlZmVycmVy
OworCisgICAgZW5jb2RlciA8PCByZWNvcmQucmVzcG9uc2VIZWFkZXJzR3VhcmQ7CisgICAgZW5j
b2RlciA8PCByZWNvcmQucmVzcG9uc2U7CisKKyAgICBlbmNvZGVyLmVuY29kZUNoZWNrc3VtKCk7
CisKKyAgICBEYXRhIGhlYWRlcihlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUo
KSk7CisgICAgRGF0YSBib2R5OworICAgIFdURjo6c3dpdGNoT24ocmVjb3JkLnJlc3BvbnNlQm9k
eSwgW10oY29uc3QgUmVmPFdlYkNvcmU6OkZvcm1EYXRhPiYgZm9ybURhdGEpIHsKKyAgICAgICAg
Ly8gRklYTUU6IFN0b3JlIGZvcm0gZGF0YSBib2R5LgorICAgIH0sIFsmXShjb25zdCBSZWY8V2Vi
Q29yZTo6U2hhcmVkQnVmZmVyPiYgYnVmZmVyKSB7CisgICAgICAgIGJvZHkgPSB7IHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGJ1ZmZlci0+ZGF0YSgpKSwgYnVmZmVyLT5zaXplKCkg
fTsKKyAgICB9LCBbXShjb25zdCBzdGQ6Om51bGxwdHJfdCYpIHsKKyAgICB9KTsKKworICAgIHJl
dHVybiB7IHJlY29yZEluZm9ybWF0aW9uLmtleSwgeyB9LCBoZWFkZXIsIGJvZHksIHsgfSB9Owor
fQorCitzdGF0aWMgaW5saW5lIHN0ZDo6b3B0aW9uYWw8c3RkOjpwYWlyPFJlY29yZCwgZG91Ymxl
Pj4gZGVjb2RlUmVjb3JkSGVhZGVyKGNvbnN0IFN0b3JhZ2U6OlJlY29yZCYgc3RvcmFnZSkKK3sK
KyAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIoc3RvcmFnZS5oZWFkZXIuZGF0
YSgpLCBzdG9yYWdlLmhlYWRlci5zaXplKCkpOworCisgICAgUmVjb3JkIHJlY29yZDsKKworICAg
IGRvdWJsZSBpbnNlcnRpb25UaW1lOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaW5zZXJ0aW9u
VGltZSkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKHJlY29yZC5yZXF1ZXN0SGVhZGVyc0d1YXJkKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKKworICAgIGlmICghcmVjb3JkLnJlcXVlc3QuZGVjb2RlV2l0aG91dFBsYXRmb3Jt
RGF0YShkZWNvZGVyKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUocmVjb3JkLm9wdGlvbnMpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZWNvcmQucmVmZXJyZXIpKQorICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZWNvcmQu
cmVzcG9uc2VIZWFkZXJzR3VhcmQpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZWNvcmQucmVzcG9uc2UpKQorICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworCisgICAgaWYgKCFkZWNvZGVyLnZlcmlmeUNoZWNrc3VtKCkpCisgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoV1RG
TW92ZShyZWNvcmQpLCBpbnNlcnRpb25UaW1lKTsKIH0KIAotdm9pZCBDYWNoZTo6d3JpdGVSZWNv
cmRUb0Rpc2soUmVjb3JkRGF0YSYpCitzdGQ6Om9wdGlvbmFsPFJlY29yZD4gQ2FjaGU6OmRlY29k
ZShjb25zdCBTdG9yYWdlOjpSZWNvcmQmIHN0b3JhZ2UpCiB7Ci0gICAgLy8gRklYTUU6IEltcGxl
bWVudCB0aGlzLgorICAgIGF1dG8gcmVzdWx0ID0gZGVjb2RlUmVjb3JkSGVhZGVyKHN0b3JhZ2Up
OworCisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAg
ICBhdXRvIHJlY29yZCA9IFdURk1vdmUocmVzdWx0LT5maXJzdCk7CisgICAgcmVjb3JkLnJlc3Bv
bnNlQm9keSA9IFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKHN0b3JhZ2UuYm9keS5kYXRh
KCksIHN0b3JhZ2UuYm9keS5zaXplKCkpOworCisgICAgcmV0dXJuIFdURk1vdmUocmVjb3JkKTsK
IH0KIAotdm9pZCBDYWNoZTo6cmVtb3ZlUmVjb3JkRnJvbURpc2soUmVjb3JkRGF0YSYpCitWZWN0
b3I8S2V5PiBDYWNoZTo6a2V5cygpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0
aGlzLgorICAgIFZlY3RvcjxLZXk+IGtleXM7CisgICAgZm9yIChhdXRvJiByZWNvcmRzIDogbV9y
ZWNvcmRzLnZhbHVlcygpKSB7CisgICAgICAgIGZvciAoYXV0byYgcmVjb3JkIDogcmVjb3JkcykK
KyAgICAgICAgICAgIGtleXMuYXBwZW5kKHJlY29yZC5rZXkpOworICAgIH0KKyAgICByZXR1cm4g
a2V5czsKIH0KIAogfSAvLyBuYW1lc3BhY2UgQ2FjaGVTdG9yYWdlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlLmgg
Yi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNh
Y2hlLmgKaW5kZXggYzlmMGQ4MGU1NGI3NmUyMDQyZTEzYzllNDA1YzlkNTUyNzNkMTI2NS4uNTlh
MDZhZGQyY2Y3ZjA3YzViNWE0ZjMwNjVlNTU5NTFlYWRmY2I5YSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZS5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5l
Q2FjaGUuaApAQCAtMjUsNyArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIk5l
dHdvcmtDYWNoZUtleS5oIgorI2luY2x1ZGUgIk5ldHdvcmtDYWNoZVN0b3JhZ2UuaCIKICNpbmNs
dWRlIDxXZWJDb3JlL0RPTUNhY2hlRW5naW5lLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtMzYsNyArMzYsNyBAQCBuYW1lc3Bh
Y2UgQ2FjaGVTdG9yYWdlIHsKIAogY2xhc3MgQ2FjaGVzOwogCi1zdHJ1Y3QgUmVjb3JkRGF0YSB7
CitzdHJ1Y3QgUmVjb3JkSW5mb3JtYXRpb24gewogICAgIE5ldHdvcmtDYWNoZTo6S2V5IGtleTsK
ICAgICBkb3VibGUgaW5zZXJ0aW9uVGltZSB7IDAgfTsKIApAQCAtNDYsNTggKzQ2LDYxIEBAIHN0
cnVjdCBSZWNvcmREYXRhIHsKICAgICBXZWJDb3JlOjpVUkwgdXJsOwogICAgIGJvb2wgaGFzVmFy
eVN0YXIgeyBmYWxzZSB9OwogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHZhcnlIZWFkZXJz
OwotCi0gICAgc3RydWN0IERhdGEgewotICAgICAgICBXZWJDb3JlOjpGZXRjaEhlYWRlcnM6Okd1
YXJkIHJlcXVlc3RIZWFkZXJzR3VhcmQ7Ci0gICAgICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dCByZXF1ZXN0OwotICAgICAgICBXZWJDb3JlOjpGZXRjaE9wdGlvbnMgb3B0aW9uczsKLSAgICAg
ICAgU3RyaW5nIHJlZmVycmVyOwotCi0gICAgICAgIFdlYkNvcmU6OkZldGNoSGVhZGVyczo6R3Vh
cmQgcmVzcG9uc2VIZWFkZXJzR3VhcmQ7Ci0gICAgICAgIFdlYkNvcmU6OlJlc291cmNlUmVzcG9u
c2UgcmVzcG9uc2U7Ci0gICAgICAgIFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpSZXNwb25zZUJv
ZHkgcmVzcG9uc2VCb2R5OwotICAgIH07Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPERhdGE+IGRhdGE7
CiB9OwogCitjbGFzcyBBc3luY2hyb25vdXNQdXRUYXNrQ291bnRlcjsKK2NsYXNzIFJlYWRSZWNv
cmRUYXNrQ291bnRlcjsKKwogY2xhc3MgQ2FjaGUgewogcHVibGljOgogICAgIGVudW0gY2xhc3Mg
U3RhdGUgeyBVbmluaXRpYWxpemVkLCBPcGVuaW5nLCBPcGVuIH07Ci0gICAgQ2FjaGUoQ2FjaGVz
JiwgdWludDY0X3QgaWRlbnRpZmllciwgU3RhdGUsIFN0cmluZyYmIG5hbWUpOworICAgIENhY2hl
KENhY2hlcyYsIHVpbnQ2NF90IGlkZW50aWZpZXIsIFN0YXRlLCBTdHJpbmcmJiBuYW1lLCBTdHJp
bmcmJiB1bmlxdWVOYW1lKTsKIAorICAgIGJvb2wgaXNPcGVuZWQoKSBjb25zdCB7IHJldHVybiBt
X3N0YXRlID09IFN0YXRlOjpPcGVuOyB9CiAgICAgdm9pZCBvcGVuKFdlYkNvcmU6OkRPTUNhY2hl
RW5naW5lOjpDb21wbGV0aW9uQ2FsbGJhY2smJik7CiAKICAgICB1aW50NjRfdCBpZGVudGlmaWVy
KCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyOyB9CiAgICAgY29uc3QgU3RyaW5nJiBuYW1l
KCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CisgICAgY29uc3QgU3RyaW5nJiB1bmlxdWVOYW1l
KCkgY29uc3QgeyByZXR1cm4gbV91bmlxdWVOYW1lOyB9CiAgICAgYm9vbCBpc0FjdGl2ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhdGUgIT0gU3RhdGU6OlVuaW5pdGlhbGl6ZWQ7IH0KIAotICAgIFZl
Y3RvcjxXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6UmVjb3JkPiByZXRyaWV2ZVJlY29yZHMoY29u
c3QgV2ViQ29yZTo6VVJMJikgY29uc3Q7CisgICAgdm9pZCByZXRyaWV2ZVJlY29yZHMoY29uc3Qg
V2ViQ29yZTo6VVJMJiwgV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OlJlY29yZHNDYWxsYmFjayYm
KTsKICAgICBXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6Q2FjaGVJbmZvIGluZm8oKSBjb25zdCB7
IHJldHVybiB7IG1faWRlbnRpZmllciwgbV9uYW1lIH07IH0KIAogICAgIHZvaWQgcHV0KFZlY3Rv
cjxXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6UmVjb3JkPiYmLCBXZWJDb3JlOjpET01DYWNoZUVu
Z2luZTo6UmVjb3JkSWRlbnRpZmllcnNDYWxsYmFjayYmKTsKICAgICB2b2lkIHJlbW92ZShXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3QmJiwgV2ViQ29yZTo6Q2FjaGVRdWVyeU9wdGlvbnMmJiwgV2Vi
Q29yZTo6RE9NQ2FjaGVFbmdpbmU6OlJlY29yZElkZW50aWZpZXJzQ2FsbGJhY2smJik7CiAKKyAg
ICBWZWN0b3I8TmV0d29ya0NhY2hlOjpLZXk+IGtleXMoKSBjb25zdDsKKwogICAgIHZvaWQgZGlz
cG9zZSgpOwogICAgIHZvaWQgY2xlYXJNZW1vcnlSZXByZXNlbnRhdGlvbigpOwotIAorCisgICAg
c3RhdGljIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OlJlY29yZD4gZGVj
b2RlKGNvbnN0IE5ldHdvcmtDYWNoZTo6U3RvcmFnZTo6UmVjb3JkJik7CisgICAgc3RhdGljIE5l
dHdvcmtDYWNoZTo6U3RvcmFnZTo6UmVjb3JkIGVuY29kZShjb25zdCBSZWNvcmRJbmZvcm1hdGlv
biYsIGNvbnN0IFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpSZWNvcmQmKTsKKwogcHJpdmF0ZToK
LSAgICBWZWN0b3I8UmVjb3JkRGF0YT4qIHJlY29yZHNGcm9tVVJMKGNvbnN0IFdlYkNvcmU6OlVS
TCYpOwotICAgIGNvbnN0IFZlY3RvcjxSZWNvcmREYXRhPiogcmVjb3Jkc0Zyb21VUkwoY29uc3Qg
V2ViQ29yZTo6VVJMJikgY29uc3Q7Ci0gICAgUmVjb3JkRGF0YSYgYWRkUmVjb3JkKFZlY3RvcjxS
ZWNvcmREYXRhPiosIFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpSZWNvcmQmJik7CisgICAgVmVj
dG9yPFJlY29yZEluZm9ybWF0aW9uPiogcmVjb3Jkc0Zyb21VUkwoY29uc3QgV2ViQ29yZTo6VVJM
Jik7CisgICAgY29uc3QgVmVjdG9yPFJlY29yZEluZm9ybWF0aW9uPiogcmVjb3Jkc0Zyb21VUkwo
Y29uc3QgV2ViQ29yZTo6VVJMJikgY29uc3Q7CisgICAgUmVjb3JkSW5mb3JtYXRpb24mIGFkZFJl
Y29yZChWZWN0b3I8UmVjb3JkSW5mb3JtYXRpb24+KiwgY29uc3QgV2ViQ29yZTo6RE9NQ2FjaGVF
bmdpbmU6OlJlY29yZCYpOworCisgICAgUmVjb3JkSW5mb3JtYXRpb24gdG9SZWNvcmRJbmZvcm1h
dGlvbihjb25zdCBXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6UmVjb3JkJik7CiAKICAgICB2b2lk
IGZpbmlzaE9wZW5pbmcoV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OkNvbXBsZXRpb25DYWxsYmFj
ayYmLCBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpFcnJvcj4mJik7Cisg
ICAgdm9pZCByZXRyaWV2ZVJlY29yZChjb25zdCBSZWNvcmRJbmZvcm1hdGlvbiYsIFJlZlB0cjxS
ZWFkUmVjb3JkVGFza0NvdW50ZXI+Jik7CiAKICAgICB2b2lkIHJlYWRSZWNvcmRzTGlzdChXZWJD
b3JlOjpET01DYWNoZUVuZ2luZTo6Q29tcGxldGlvbkNhbGxiYWNrJiYpOwotICAgIHZvaWQgd3Jp
dGVSZWNvcmRzTGlzdChXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6Q29tcGxldGlvbkNhbGxiYWNr
JiYpOwotICAgIHZvaWQgd3JpdGVSZWNvcmRUb0Rpc2soUmVjb3JkRGF0YSYpOwotICAgIHZvaWQg
cmVtb3ZlUmVjb3JkRnJvbURpc2soUmVjb3JkRGF0YSYpOworICAgIHZvaWQgd3JpdGVSZWNvcmRU
b0Rpc2soY29uc3QgUmVjb3JkSW5mb3JtYXRpb24mLCBXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6
UmVjb3JkJiYsIGNvbnN0IFJlZlB0cjxBc3luY2hyb25vdXNQdXRUYXNrQ291bnRlcj4mKTsKKyAg
ICB2b2lkIHVwZGF0ZVJlY29yZFRvRGlzayhSZWNvcmRJbmZvcm1hdGlvbiYsIFdlYkNvcmU6OkRP
TUNhY2hlRW5naW5lOjpSZWNvcmQmJiwgY29uc3QgUmVmUHRyPEFzeW5jaHJvbm91c1B1dFRhc2tD
b3VudGVyPiYpOworICAgIHZvaWQgcmVtb3ZlUmVjb3JkRnJvbURpc2soY29uc3QgUmVjb3JkSW5m
b3JtYXRpb24mKTsKKyAgICB2b2lkIHJlYWRSZWNvcmRGcm9tRGlzayhjb25zdCBSZWNvcmRJbmZv
cm1hdGlvbiYsIFdURjo6RnVuY3Rpb248dm9pZChFeHBlY3RlZDxXZWJDb3JlOjpET01DYWNoZUVu
Z2luZTo6UmVjb3JkLCBXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6RXJyb3I+JiYpPiYmKTsKKyAg
ICB2b2lkIHJlbW92ZUZyb21SZWNvcmRMaXN0KGNvbnN0IFZlY3Rvcjx1aW50NjRfdD4mKTsKIAog
ICAgIENhY2hlcyYgbV9jYWNoZXM7CiAgICAgU3RhdGUgbV9zdGF0ZTsKICAgICB1aW50NjRfdCBt
X2lkZW50aWZpZXIgeyAwIH07CiAgICAgU3RyaW5nIG1fbmFtZTsKLSAgICBIYXNoTWFwPFN0cmlu
ZywgVmVjdG9yPFJlY29yZERhdGE+PiBtX3JlY29yZHM7CisgICAgU3RyaW5nIG1fdW5pcXVlTmFt
ZTsKKyAgICBIYXNoTWFwPFN0cmluZywgVmVjdG9yPFJlY29yZEluZm9ybWF0aW9uPj4gbV9yZWNv
cmRzOwogICAgIHVpbnQ2NF90IG1fbmV4dFJlY29yZElkZW50aWZpZXIgeyAwIH07CiAgICAgVmVj
dG9yPFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpDb21wbGV0aW9uQ2FsbGJhY2s+IG1fcGVuZGlu
Z09wZW5pbmdDYWxsYmFja3M7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwCmluZGV4
IGIzMWUyODk3N2RlZDFjNDcwYzY5Njk1YjAzOGNiYjQ1YzRhM2Y1YzcuLjIwN2I3ZDZmZDZhYTgy
MjUxNWZjNjY2MjI4ZjE5MjgzZTQwNDNlM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5j
cHAKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJDYWNoZVN0b3JhZ2VFbmdpbmUuaCIKIAog
I2luY2x1ZGUgIk5ldHdvcmtDYWNoZUNvZGVycy5oIgorI2luY2x1ZGUgPHd0Zi9VVUlELmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTo6RE9NQ2FjaGVFbmdpbmU7CkBAIC01OSw3ICs2MCwxNCBAQCBDYWNoZXM6OkNhY2hlcyhF
bmdpbmUmIGVuZ2luZSwgU3RyaW5nJiYgb3JpZ2luKQogCiB2b2lkIENhY2hlczo6aW5pdGlhbGl6
ZShXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6Q29tcGxldGlvbkNhbGxiYWNrJiYgY2FsbGJhY2sp
CiB7Ci0gICAgaWYgKG1faXNJbml0aWFsaXplZCB8fCBtX3Jvb3RQYXRoLmlzTnVsbCgpKSB7Cisg
ICAgaWYgKG1faXNJbml0aWFsaXplZCkgeworICAgICAgICBjYWxsYmFjayhzdGQ6Om51bGxvcHQp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fcm9vdFBhdGguaXNOdWxsKCkp
IHsKKyAgICAgICAgbWFrZURpcnR5KCk7CisgICAgICAgIG1faXNJbml0aWFsaXplZCA9IHRydWU7
CiAgICAgICAgIGNhbGxiYWNrKHN0ZDo6bnVsbG9wdCk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CkBAIC03NSw2ICs4Myw3IEBAIHZvaWQgQ2FjaGVzOjppbml0aWFsaXplKFdlYkNvcmU6OkRPTUNh
Y2hlRW5naW5lOjpDb21wbGV0aW9uQ2FsbGJhY2smJiBjYWxsYmFjaykKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICBtX3N0b3JhZ2UgPSBzdG9yYWdlLnJlbGVhc2VOb25OdWxsKCk7CisgICAg
bV9zdG9yYWdlLT53cml0ZVdpdGhvdXRXYWl0aW5nKCk7CiAgICAgcmVhZENhY2hlc0Zyb21EaXNr
KFt0aGlzLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShFeHBlY3RlZDxWZWN0b3I8Q2Fj
aGU+LCBFcnJvcj4mJiByZXN1bHQpIHsKICAgICAgICAgbWFrZURpcnR5KCk7CiAKQEAgLTEyMCw3
ICsxMjksOSBAQCBDYWNoZSogQ2FjaGVzOjpmaW5kKHVpbnQ2NF90IGlkZW50aWZpZXIpCiAKIHZv
aWQgQ2FjaGVzOjpvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgQ2FjaGVJZGVudGlmaWVyQ2FsbGJh
Y2smJiBjYWxsYmFjaykKIHsKKyAgICBBU1NFUlQobV9pc0luaXRpYWxpemVkKTsKICAgICBBU1NF
UlQobV9lbmdpbmUpOworCiAgICAgaWYgKGF1dG8qIGNhY2hlID0gZmluZChuYW1lKSkgewogICAg
ICAgICBjYWNoZS0+b3BlbihbY2FjaGVJZGVudGlmaWVyID0gY2FjaGUtPmlkZW50aWZpZXIoKSwg
Y2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oc3RkOjpvcHRpb25hbDxFcnJvcj4mJiBlcnJv
cikgbXV0YWJsZSB7CiAgICAgICAgICAgICBpZiAoZXJyb3IpIHsKQEAgLTEzNSw3ICsxNDYsNyBA
QCB2b2lkIENhY2hlczo6b3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIENhY2hlSWRlbnRpZmllckNh
bGxiYWNrJiYgY2FsbGJhY2spCiAgICAgbWFrZURpcnR5KCk7CiAKICAgICB1aW50NjRfdCBjYWNo
ZUlkZW50aWZpZXIgPSBtX2VuZ2luZS0+bmV4dENhY2hlSWRlbnRpZmllcigpOwotICAgIG1fY2Fj
aGVzLmFwcGVuZChDYWNoZSB7ICp0aGlzLCBjYWNoZUlkZW50aWZpZXIsIENhY2hlOjpTdGF0ZTo6
T3BlbiwgU3RyaW5nIHsgbmFtZSB9IH0pOworICAgIG1fY2FjaGVzLmFwcGVuZChDYWNoZSB7ICp0
aGlzLCBjYWNoZUlkZW50aWZpZXIsIENhY2hlOjpTdGF0ZTo6T3BlbiwgU3RyaW5nIHsgbmFtZSB9
LCBjcmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCkgfSk7CiAKICAgICB3cml0ZUNhY2hlc1RvRGlz
ayhbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgY2FjaGVJZGVudGlmaWVyXShzdGQ6Om9w
dGlvbmFsPEVycm9yPiYmIGVycm9yKSBtdXRhYmxlIHsKICAgICAgICAgY2FsbGJhY2soQ2FjaGVJ
ZGVudGlmaWVyT3BlcmF0aW9uUmVzdWx0IHsgY2FjaGVJZGVudGlmaWVyLCAhIWVycm9yIH0pOwpA
QCAtMTQ0LDYgKzE1NSw3IEBAIHZvaWQgQ2FjaGVzOjpvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwg
Q2FjaGVJZGVudGlmaWVyQ2FsbGJhY2smJiBjYWxsYmFjaykKIAogdm9pZCBDYWNoZXM6OnJlbW92
ZSh1aW50NjRfdCBpZGVudGlmaWVyLCBDYWNoZUlkZW50aWZpZXJDYWxsYmFjayYmIGNhbGxiYWNr
KQogeworICAgIEFTU0VSVChtX2lzSW5pdGlhbGl6ZWQpOwogICAgIEFTU0VSVChtX2VuZ2luZSk7
CiAKICAgICBhdXRvIHBvc2l0aW9uID0gbV9jYWNoZXMuZmluZE1hdGNoaW5nKFsmXShjb25zdCBh
dXRvJiBpdGVtKSB7IHJldHVybiBpdGVtLmlkZW50aWZpZXIoKSA9PSBpZGVudGlmaWVyOyB9KTsK
QEAgLTE2OCw2ICsxODAsOSBAQCB2b2lkIENhY2hlczo6ZGlzcG9zZShDYWNoZSYgY2FjaGUpCiB7
CiAgICAgYXV0byBwb3NpdGlvbiA9IG1fcmVtb3ZlZENhY2hlcy5maW5kTWF0Y2hpbmcoWyZdKGNv
bnN0IGF1dG8mIGl0ZW0pIHsgcmV0dXJuIGl0ZW0uaWRlbnRpZmllcigpID09IGNhY2hlLmlkZW50
aWZpZXIoKTsgfSk7CiAgICAgaWYgKHBvc2l0aW9uICE9IG5vdEZvdW5kKSB7CisgICAgICAgIGlm
IChtX3N0b3JhZ2UpCisgICAgICAgICAgICBtX3N0b3JhZ2UtPnJlbW92ZShjYWNoZS5rZXlzKCks
IHsgfSk7CisKICAgICAgICAgbV9yZW1vdmVkQ2FjaGVzLnJlbW92ZShwb3NpdGlvbik7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CkBAIC0xODQsMTMgKzE5OSwxNSBAQCBzdGF0aWMgaW5saW5lIERh
dGEgZW5jb2RlQ2FjaGVOYW1lcyhjb25zdCBWZWN0b3I8Q2FjaGU+JiBjYWNoZXMpCiAKICAgICB1
aW50NjRfdCBzaXplID0gY2FjaGVzLnNpemUoKTsKICAgICBlbmNvZGVyIDw8IHNpemU7Ci0gICAg
Zm9yIChhdXRvJiBjYWNoZSA6IGNhY2hlcykKKyAgICBmb3IgKGF1dG8mIGNhY2hlIDogY2FjaGVz
KSB7CiAgICAgICAgIGVuY29kZXIgPDwgY2FjaGUubmFtZSgpOworICAgICAgICBlbmNvZGVyIDw8
IGNhY2hlLnVuaXF1ZU5hbWUoKTsKKyAgICB9CiAKICAgICByZXR1cm4gRGF0YSB7IGVuY29kZXIu
YnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpIH07CiB9CiAKLXN0YXRpYyBpbmxpbmUgRXhw
ZWN0ZWQ8VmVjdG9yPFN0cmluZz4sIEVycm9yPiBkZWNvZGVDYWNoZXNOYW1lcyhjb25zdCBEYXRh
JiBkYXRhLCBpbnQgZXJyb3IpCitzdGF0aWMgaW5saW5lIEV4cGVjdGVkPFZlY3RvcjxzdGQ6OnBh
aXI8U3RyaW5nLCBTdHJpbmc+PiwgRXJyb3I+IGRlY29kZUNhY2hlc05hbWVzKGNvbnN0IERhdGEm
IGRhdGEsIGludCBlcnJvcikKIHsKICAgICBpZiAoZXJyb3IpCiAgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZChFcnJvcjo6UmVhZERpc2spOwpAQCAtMjAwLDE0ICsyMTcsMTcgQEAgc3RhdGlj
IGlubGluZSBFeHBlY3RlZDxWZWN0b3I8U3RyaW5nPiwgRXJyb3I+IGRlY29kZUNhY2hlc05hbWVz
KGNvbnN0IERhdGEmIGRhdGEKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGNvdW50KSkKICAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVycm9yOjpSZWFkRGlzayk7CiAKLSAgICBWZWN0b3I8
U3RyaW5nPiBuYW1lczsKKyAgICBWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPj4gbmFt
ZXM7CiAgICAgbmFtZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShjb3VudCk7CiAgICAgZm9yIChz
aXplX3QgaW5kZXggPSAwOyBpbmRleCA8IGNvdW50OyArK2luZGV4KSB7CiAgICAgICAgIFN0cmlu
ZyBuYW1lOwogICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG5hbWUpKQogICAgICAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVycm9yOjpSZWFkRGlzayk7CisgICAgICAgIFN0cmluZyB1
bmlxdWVOYW1lOworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHVuaXF1ZU5hbWUpKQorICAg
ICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVycm9yOjpSZWFkRGlzayk7CiAKLSAgICAg
ICAgbmFtZXMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUobmFtZSkpOworICAgICAgICBuYW1lcy51
bmNoZWNrZWRBcHBlbmQoc3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPiB7IFdURk1vdmUobmFtZSks
IFdURk1vdmUodW5pcXVlTmFtZSkgfSk7CiAgICAgfQogICAgIHJldHVybiBuYW1lczsKIH0KQEAg
LTI0MCw4ICsyNjAsOCBAQCB2b2lkIENhY2hlczo6cmVhZENhY2hlc0Zyb21EaXNrKFdURjo6RnVu
Y3Rpb248dm9pZChFeHBlY3RlZDxWZWN0b3I8Q2FjaGU+LCBFcnJvcgogICAgICAgICAgICAgY2Fs
bGJhY2sobWFrZVVuZXhwZWN0ZWQocmVzdWx0LmVycm9yKCkpKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQotICAgICAgICBjYWxsYmFjayhXVEY6Om1hcChXVEZNb3ZlKHJlc3VsdC52
YWx1ZSgpKSwgW3RoaXNdIChTdHJpbmcmJiBuYW1lKSB7Ci0gICAgICAgICAgICByZXR1cm4gQ2Fj
aGUgeyAqdGhpcywgbV9lbmdpbmUtPm5leHRDYWNoZUlkZW50aWZpZXIoKSwgQ2FjaGU6OlN0YXRl
OjpVbmluaXRpYWxpemVkLCBXVEZNb3ZlKG5hbWUpIH07CisgICAgICAgIGNhbGxiYWNrKFdURjo6
bWFwKFdURk1vdmUocmVzdWx0LnZhbHVlKCkpLCBbdGhpc10gKGF1dG8mJiBwYWlyKSB7CisgICAg
ICAgICAgICByZXR1cm4gQ2FjaGUgeyAqdGhpcywgbV9lbmdpbmUtPm5leHRDYWNoZUlkZW50aWZp
ZXIoKSwgQ2FjaGU6OlN0YXRlOjpVbmluaXRpYWxpemVkLCBXVEZNb3ZlKHBhaXIuZmlyc3QpLCBX
VEZNb3ZlKHBhaXIuc2Vjb25kKSB9OwogICAgICAgICB9KSk7CiAgICAgfSk7CiB9CkBAIC0yNjYs
MTQgKzI4Niw4MiBAQCB2b2lkIENhY2hlczo6d3JpdGVDYWNoZXNUb0Rpc2soQ29tcGxldGlvbkNh
bGxiYWNrJiYgY2FsbGJhY2spCiAgICAgfSk7CiB9CiAKK3ZvaWQgQ2FjaGVzOjpyZWFkUmVjb3Jk
c0xpc3QoQ2FjaGUmIGNhY2hlLCBOZXR3b3JrQ2FjaGU6OlN0b3JhZ2U6OlRyYXZlcnNlSGFuZGxl
ciYmIGNhbGxiYWNrKQoreworICAgIEFTU0VSVChtX2lzSW5pdGlhbGl6ZWQpOworCisgICAgaWYg
KCFtX3N0b3JhZ2UpIHsKKyAgICAgICAgY2FsbGJhY2sobnVsbHB0ciwgeyB9KTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBtX3N0b3JhZ2UtPnRyYXZlcnNlKGNhY2hlLnVuaXF1ZU5hbWUo
KSwgMCwgW3Byb3RlY3RlZFN0b3JhZ2UgPSBtYWtlUmVmKCptX3N0b3JhZ2UpLCBjYWxsYmFjayA9
IFdURk1vdmUoY2FsbGJhY2spXShjb25zdCBhdXRvKiBzdG9yYWdlLCBjb25zdCBhdXRvJiBpbmZv
cm1hdGlvbikgeworICAgICAgICBjYWxsYmFjayhzdG9yYWdlLCBpbmZvcm1hdGlvbik7CisgICAg
fSk7Cit9CisKK3ZvaWQgQ2FjaGVzOjp3cml0ZVJlY29yZChjb25zdCBDYWNoZSYgY2FjaGUsIGNv
bnN0IFJlY29yZEluZm9ybWF0aW9uJiByZWNvcmRJbmZvcm1hdGlvbiwgUmVjb3JkJiYgcmVjb3Jk
LCBDb21wbGV0aW9uQ2FsbGJhY2smJiBjYWxsYmFjaykKK3sKKyAgICBBU1NFUlQobV9pc0luaXRp
YWxpemVkKTsKKworICAgIC8vIEZJWE1FOiBDaGVjayBmb3Igc3RvcmFnZSBxdW90YS4KKyAgICBp
ZiAoIXNob3VsZFBlcnNpc3QoKSkgeworICAgICAgICBtX3ZvbGF0aWxlU3RvcmFnZS5zZXQocmVj
b3JkSW5mb3JtYXRpb24ua2V5LCBXVEZNb3ZlKHJlY29yZCkpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgbV9zdG9yYWdlLT5zdG9yZShDYWNoZTo6ZW5jb2RlKHJlY29yZEluZm9ybWF0
aW9uLCByZWNvcmQpLCBbcHJvdGVjdGVkU3RvcmFnZSA9IG1ha2VSZWYoKm1fc3RvcmFnZSksIGNh
bGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKGNvbnN0IERhdGEmKSB7CisgICAgICAgIGNhbGxi
YWNrKHN0ZDo6bnVsbG9wdCk7CisgICAgfSk7Cit9CisKK3ZvaWQgQ2FjaGVzOjpyZWFkUmVjb3Jk
KGNvbnN0IE5ldHdvcmtDYWNoZTo6S2V5JiBrZXksIFdURjo6RnVuY3Rpb248dm9pZChFeHBlY3Rl
ZDxSZWNvcmQsIEVycm9yPiYmKT4mJiBjYWxsYmFjaykKK3sKKyAgICBBU1NFUlQobV9pc0luaXRp
YWxpemVkKTsKKworICAgIGlmICghc2hvdWxkUGVyc2lzdCgpKSB7CisgICAgICAgIGF1dG8gaXRl
cmF0b3IgPSBtX3ZvbGF0aWxlU3RvcmFnZS5maW5kKGtleSk7CisgICAgICAgIGlmIChpdGVyYXRv
ciA9PSBtX3ZvbGF0aWxlU3RvcmFnZS5lbmQoKSkgeworICAgICAgICAgICAgY2FsbGJhY2sobWFr
ZVVuZXhwZWN0ZWQoRXJyb3I6OkludGVybmFsKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgY2FsbGJhY2soaXRlcmF0b3ItPnZhbHVlLmNvcHkoKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBtX3N0b3JhZ2UtPnJldHJpZXZlKGtleSwgNCwgW3Byb3Rl
Y3RlZFN0b3JhZ2UgPSBtYWtlUmVmKCptX3N0b3JhZ2UpLCBjYWxsYmFjayA9IFdURk1vdmUoY2Fs
bGJhY2spXShzdGQ6OnVuaXF1ZV9wdHI8U3RvcmFnZTo6UmVjb3JkPiBzdG9yYWdlKSBtdXRhYmxl
IHsKKyAgICAgICAgaWYgKCFzdG9yYWdlKSB7CisgICAgICAgICAgICBjYWxsYmFjayhtYWtlVW5l
eHBlY3RlZChFcnJvcjo6UmVhZERpc2spKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorCisgICAgICAgIGF1dG8gcmVjb3JkID0gQ2FjaGU6OmRlY29kZSgqc3RvcmFnZSk7
CisgICAgICAgIGlmICghcmVjb3JkKSB7CisgICAgICAgICAgICBjYWxsYmFjayhtYWtlVW5leHBl
Y3RlZChFcnJvcjo6UmVhZERpc2spKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorCisgICAgICAgIGNhbGxiYWNrKFdURk1vdmUocmVjb3JkLnZhbHVlKCkpKTsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfSk7Cit9CisKK3ZvaWQgQ2FjaGVzOjpyZW1vdmVSZWNvcmQo
Y29uc3QgTmV0d29ya0NhY2hlOjpLZXkmIGtleSkKK3sKKyAgICBBU1NFUlQobV9pc0luaXRpYWxp
emVkKTsKKworICAgIGlmICghc2hvdWxkUGVyc2lzdCgpKSB7CisgICAgICAgIG1fdm9sYXRpbGVT
dG9yYWdlLnJlbW92ZShrZXkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fc3RvcmFn
ZS0+cmVtb3ZlKGtleSk7Cit9CisKIHZvaWQgQ2FjaGVzOjpjbGVhck1lbW9yeVJlcHJlc2VudGF0
aW9uKCkKIHsKICAgICBtYWtlRGlydHkoKTsKICAgICBtX2NhY2hlcy5jbGVhcigpOwogICAgIG1f
aXNJbml0aWFsaXplZCA9IGZhbHNlOwogICAgIG1fc3RvcmFnZSA9IG51bGxwdHI7Ci0gICAgaWYg
KG1fZW5naW5lKQotICAgICAgICBtX2VuZ2luZS0+cmVtb3ZlQ2FjaGVzKG1fb3JpZ2luKTsKIH0K
IAogYm9vbCBDYWNoZXM6OmlzRGlydHkodWludDY0X3QgdXBkYXRlQ291bnRlcikgY29uc3QKQEAg
LTI4Miw2ICszNzAsMTcgQEAgYm9vbCBDYWNoZXM6OmlzRGlydHkodWludDY0X3QgdXBkYXRlQ291
bnRlcikgY29uc3QKICAgICByZXR1cm4gbV91cGRhdGVDb3VudGVyICE9IHVwZGF0ZUNvdW50ZXI7
CiB9CiAKK2NvbnN0IE5ldHdvcmtDYWNoZTo6U2FsdCYgQ2FjaGVzOjpzYWx0KCkgY29uc3QKK3sK
KyAgICBpZiAobV9lbmdpbmUpCisgICAgICAgIHJldHVybiBtX2VuZ2luZS0+c2FsdCgpOworCisg
ICAgaWYgKCFtX3ZvbGF0aWxlU2FsdCkKKyAgICAgICAgbV92b2xhdGlsZVNhbHQgPSBTYWx0IHsg
fTsKKworICAgIHJldHVybiBtX3ZvbGF0aWxlU2FsdC52YWx1ZSgpOworfQorCiBDYWNoZUluZm9z
IENhY2hlczo6Y2FjaGVJbmZvcyh1aW50NjRfdCB1cGRhdGVDb3VudGVyKSBjb25zdAogewogICAg
IFZlY3RvcjxDYWNoZUluZm8+IGNhY2hlSW5mb3M7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5oIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuaApp
bmRleCBmMzEzZmQxYzRjYjhiOWZhZmNiNjQ2Njg4NjhjZjQzN2FkNTk3MjMyLi40YTJhNzc5MmVm
ZWE2ZGFmYTY0NDQwNTNlYzcwOGJiMDUzZTZhZjA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVz
LmgKQEAgLTUyLDE3ICs1MiwyMyBAQCBwdWJsaWM6CiAgICAgQ2FjaGUqIGZpbmQodWludDY0X3Qg
aWRlbnRpZmllcik7CiAgICAgdm9pZCBhcHBlbmRSZXByZXNlbnRhdGlvbihTdHJpbmdCdWlsZGVy
JikgY29uc3Q7CiAKKyAgICB2b2lkIHJlYWRSZWNvcmRzTGlzdChDYWNoZSYsIE5ldHdvcmtDYWNo
ZTo6U3RvcmFnZTo6VHJhdmVyc2VIYW5kbGVyJiYpOworICAgIHZvaWQgcmVhZFJlY29yZChjb25z
dCBOZXR3b3JrQ2FjaGU6OktleSYsIFdURjo6RnVuY3Rpb248dm9pZChFeHBlY3RlZDxXZWJDb3Jl
OjpET01DYWNoZUVuZ2luZTo6UmVjb3JkLCBXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6RXJyb3I+
JiYpPiYmKTsKKyAgICB2b2lkIHdyaXRlUmVjb3JkKGNvbnN0IENhY2hlJiwgY29uc3QgUmVjb3Jk
SW5mb3JtYXRpb24mLCBXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6UmVjb3JkJiYsIFdlYkNvcmU6
OkRPTUNhY2hlRW5naW5lOjpDb21wbGV0aW9uQ2FsbGJhY2smJik7CisgICAgdm9pZCByZW1vdmVS
ZWNvcmQoY29uc3QgTmV0d29ya0NhY2hlOjpLZXkmKTsKKworICAgIGNvbnN0IE5ldHdvcmtDYWNo
ZTo6U2FsdCYgc2FsdCgpIGNvbnN0OworCisgICAgYm9vbCBzaG91bGRQZXJzaXN0KCkgY29uc3Qg
eyByZXR1cm4gIW1fcm9vdFBhdGguaXNOdWxsKCk7IH0KKwogcHJpdmF0ZToKICAgICBDYWNoZXMo
RW5naW5lJiwgU3RyaW5nJiYgb3JpZ2luKTsKIAogICAgIHZvaWQgcmVhZENhY2hlc0Zyb21EaXNr
KFdURjo6RnVuY3Rpb248dm9pZChFeHBlY3RlZDxWZWN0b3I8Q2FjaGU+LCBXZWJDb3JlOjpET01D
YWNoZUVuZ2luZTo6RXJyb3I+JiYpPiYmKTsKICAgICB2b2lkIHdyaXRlQ2FjaGVzVG9EaXNrKFdl
YkNvcmU6OkRPTUNhY2hlRW5naW5lOjpDb21wbGV0aW9uQ2FsbGJhY2smJik7CiAKLQogICAgIENh
Y2hlKiBmaW5kKGNvbnN0IFN0cmluZyYgbmFtZSk7CiAKLSAgICBib29sIHNob3VsZFBlcnNpc3Qo
KSBjb25zdCB7IHJldHVybiAhbV9yb290UGF0aC5pc051bGwoKTsgfQotCiAgICAgdm9pZCBtYWtl
RGlydHkoKSB7ICsrbV91cGRhdGVDb3VudGVyOyB9CiAgICAgYm9vbCBpc0RpcnR5KHVpbnQ2NF90
IHVwZGF0ZUNvdW50ZXIpIGNvbnN0OwogCkBAIC03NCw2ICs4MCw4IEBAIHByaXZhdGU6CiAgICAg
VmVjdG9yPENhY2hlPiBtX2NhY2hlczsKICAgICBWZWN0b3I8Q2FjaGU+IG1fcmVtb3ZlZENhY2hl
czsKICAgICBSZWZQdHI8TmV0d29ya0NhY2hlOjpTdG9yYWdlPiBtX3N0b3JhZ2U7CisgICAgSGFz
aE1hcDxOZXR3b3JrQ2FjaGU6OktleSwgV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OlJlY29yZD4g
bV92b2xhdGlsZVN0b3JhZ2U7CisgICAgbXV0YWJsZSBzdGQ6Om9wdGlvbmFsPE5ldHdvcmtDYWNo
ZTo6U2FsdD4gbV92b2xhdGlsZVNhbHQ7CiAgICAgVmVjdG9yPFdlYkNvcmU6OkRPTUNhY2hlRW5n
aW5lOjpDb21wbGV0aW9uQ2FsbGJhY2s+IG1fcGVuZGluZ0luaXRpYWxpemF0aW9uQ2FsbGJhY2tz
OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHAKaW5kZXggODAzYTk5ZmJkZGQ2ZDhkMjI3MGFkNTVj
OWJjYjUwYTA1MWE0NGIzZi4uMGI2NTI4ZGQ3MjhmYjkzMzBhYTlkMDU0Mjg1NzRjZjQ2MGQwOWFm
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3Jr
Q2FjaGVTdG9yYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZVN0b3JhZ2UuY3BwCkBAIC04NDYsMTAgKzg0Niw3IEBAIHZvaWQgU3RvcmFn
ZTo6c3RvcmUoY29uc3QgUmVjb3JkJiByZWNvcmQsIE1hcHBlZEJvZHlIYW5kbGVyJiYgbWFwcGVk
Qm9keUhhbmRsZXIpCiAgICAgaWYgKCFpc0luaXRpYWxXcml0ZSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgLy8gRGVsYXkgdGhlIHN0YXJ0IG9mIHdyaXRlcyBhIGJpdCB0byBhdm9pZCBhZmZlY3Rp
bmcgZWFybHkgcGFnZSBsb2FkLgotICAgIC8vIENvbXBsZXRpbmcgd3JpdGVzIHdpbGwgZGlzcGF0
Y2ggbW9yZSB3cml0ZXMgd2l0aG91dCBkZWxheS4KLSAgICBzdGF0aWMgY29uc3QgU2Vjb25kcyBp
bml0aWFsV3JpdGVEZWxheSA9IDFfczsKLSAgICBtX3dyaXRlT3BlcmF0aW9uRGlzcGF0Y2hUaW1l
ci5zdGFydE9uZVNob3QoaW5pdGlhbFdyaXRlRGVsYXkpOworICAgIG1fd3JpdGVPcGVyYXRpb25E
aXNwYXRjaFRpbWVyLnN0YXJ0T25lU2hvdChtX2luaXRpYWxXcml0ZURlbGF5KTsKIH0KIAogdm9p
ZCBTdG9yYWdlOjp0cmF2ZXJzZShjb25zdCBTdHJpbmcmIHR5cGUsIFRyYXZlcnNlRmxhZ3MgZmxh
Z3MsIFRyYXZlcnNlSGFuZGxlciYmIHRyYXZlcnNlSGFuZGxlcikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5oIGIvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmgKaW5k
ZXggNDEyZWQ5ZWM1NzMxMTNkOGU1MWIyY2ZlMzFiZWIwNWY5NWVkOTQ3OS4uYjY4OGRjZDRlMGE3
NWVhMTJhOWQxMGRkZTdjOWJiNGM4ZjlmNGI0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmgKKysrIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmgKQEAgLTEwNCw2
ICsxMDQsOCBAQCBwdWJsaWM6CiAKICAgICB+U3RvcmFnZSgpOwogCisgICAgdm9pZCB3cml0ZVdp
dGhvdXRXYWl0aW5nKCkgeyBtX2luaXRpYWxXcml0ZURlbGF5ID0gMF9zOyB9OworCiBwcml2YXRl
OgogICAgIFN0b3JhZ2UoY29uc3QgU3RyaW5nJiBkaXJlY3RvcnlQYXRoLCBNb2RlLCBTYWx0KTsK
IApAQCAtMTgyLDYgKzE4NCwxMCBAQCBwcml2YXRlOgogICAgIFJlZjxXb3JrUXVldWU+IG1fc2Vy
aWFsQmFja2dyb3VuZElPUXVldWU7CiAKICAgICBCbG9iU3RvcmFnZSBtX2Jsb2JTdG9yYWdlOwor
CisgICAgLy8gQnkgZGVmYXVsdCwgZGVsYXkgdGhlIHN0YXJ0IG9mIHdyaXRlcyBhIGJpdCB0byBh
dm9pZCBhZmZlY3RpbmcgZWFybHkgcGFnZSBsb2FkLgorICAgIC8vIENvbXBsZXRpbmcgd3JpdGVz
IHdpbGwgZGlzcGF0Y2ggbW9yZSB3cml0ZXMgd2l0aG91dCBkZWxheS4KKyAgICBTZWNvbmRzIG1f
aW5pdGlhbFdyaXRlRGVsYXkgeyAxX3MgfTsKIH07CiAKIC8vIEZJWE1FOiBSZW1vdmUsIHVzZWQg
YnkgTmV0d29ya0NhY2hlU3RhdGlzdGljcyBvbmx5LgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDc3YjViOTdkYjBhNTBlOGE5
MTQ0NGVkMWFjNjQ4OWQwZjUzMzY5NjQuLjE5NTI2ZGVkYWMwMzBjYmQxNzIzOTA5YzE4N2I0Y2Mw
ZjQzMWVkYTcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxNy0wOS0xMyAgWW91ZW5uIEZhYmxl
dCAgPHlvdWVubkBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIENhY2hlIEFQSSBzdXBwb3J0IG9m
IHJlY29yZHMgcGVyc2lzdGVuY3kKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE3Njg0NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogaHR0cC90ZXN0cy9jYWNoZS1zdG9yYWdlL2NhY2hlLXBlcnNpc3RlbmN5
Lmh0dHBzLmh0bWw6CisgICAgICAgICogaHR0cC90ZXN0cy9jYWNoZS1zdG9yYWdlL2NhY2hlLXJl
Y29yZHMtcGVyc2lzdGVuY3kuaHR0cHMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBo
dHRwL3Rlc3RzL2NhY2hlLXN0b3JhZ2UvY2FjaGUtcmVjb3Jkcy1wZXJzaXN0ZW5jeS5odHRwcy5o
dG1sOiBBZGRlZC4KKwogMjAxNy0wOS0xMyAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxh
d2FAYXBwbGUuY29tPgogCiAgICAgICAgIEZvbGxvd3VwIChyMjIxODA1KTogQWRkcmVzcyBjb21t
ZW50cyBhbmQgYWRkIG1vcmUgdGVzdHMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVz
dHMvY2FjaGUtc3RvcmFnZS9jYWNoZS1wZXJzaXN0ZW5jeS5odHRwcy5odG1sIGIvTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9jYWNoZS1zdG9yYWdlL2NhY2hlLXBlcnNpc3RlbmN5Lmh0dHBzLmh0bWwK
aW5kZXggZDFlYWQ0ZDRhZjI1YmNlOGY1NGY2MGE4YTMyZGQxZDc3NDExYjhmOC4uZGM5ZTk2YjY1
ZThjMjQxZjcwNzk2ZTY1OTY1ZTI1N2Q5YzM1MmNkZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9jYWNoZS1zdG9yYWdlL2NhY2hlLXBlcnNpc3RlbmN5Lmh0dHBzLmh0bWwKKysr
IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9jYWNoZS1zdG9yYWdlL2NhY2hlLXBlcnNpc3RlbmN5
Lmh0dHBzLmh0bWwKQEAgLTQyLDExICs0MiwxMSBAQAogICAgIHByb21pc2VfdGVzdCh0ZXN0ID0+
IHsKICAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQogICAgICAgICAgICAgdGVzdFJ1bm5l
ci5zZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkKGZhbHNlKTsKLSAgICAgICAgdmFyIGNsZWFyUHJv
bWlzZTsKLSAgICAgICAgaWYgKHdpbmRvdy5pbnRlcm5hbHMpCi0gICAgICAgICAgICBjbGVhclBy
b21pc2UgPWludGVybmFscy5jbGVhckNhY2hlU3RvcmFnZU1lbW9yeVJlcHJlc2VudGF0aW9uKCk7
CiAKLSAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShjbGVhclByb21pc2UpLnRoZW4oKCkg
PT4geworICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7CisgICAg
ICAgICAgICBpZiAod2luZG93LmludGVybmFscykKKyAgICAgICAgICAgICAgICByZXR1cm4gaW50
ZXJuYWxzLmNsZWFyQ2FjaGVTdG9yYWdlTWVtb3J5UmVwcmVzZW50YXRpb24oKTsKKyAgICAgICAg
fSkudGhlbigoKSA9PiB7CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5jYWNoZXMua2V5cygpOwog
ICAgICAgICB9KS50aGVuKGtleXMgPT4gewogICAgICAgICAgICAgdmFyIHBlbmRpbmcgPSBbXTsK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvY2FjaGUtc3RvcmFnZS9jYWNoZS1y
ZWNvcmRzLXBlcnNpc3RlbmN5Lmh0dHBzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2h0dHAv
dGVzdHMvY2FjaGUtc3RvcmFnZS9jYWNoZS1yZWNvcmRzLXBlcnNpc3RlbmN5Lmh0dHBzLWV4cGVj
dGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5jMTljY2VhM2I0ZGM0ZTZhMDIzMDUzMmMxNzlmZTExMDQxNDFm
ODY2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9jYWNoZS1zdG9y
YWdlL2NhY2hlLXJlY29yZHMtcGVyc2lzdGVuY3kuaHR0cHMtZXhwZWN0ZWQudHh0CkBAIC0wLDAg
KzEsOSBAQAorCitQQVNTIENsZWFuaW5nIGV4aXN0aW5nIGNhY2hlcyAKK1BBU1MgQ2FjaGUucHV0
IGNhbGxlZCB0d2ljZSB3aXRoIG1hdGNoaW5nIFJlcXVlc3RzIC0ga2V5cyBzaG91bGQgcmVtYWlu
IHRoZSBzYW1lIC0gdGVzdGluZyBwZXJzaXN0ZW5jeSAKK1BBU1MgQ2xlYW5pbmcgY3JlYXRlZCBj
YWNoZXMgCitQQVNTIENoZWNraW5nIHBlcnNpc3RlbmN5IG9mIGNhY2hlIGtleXMgCitQQVNTIENo
ZWNraW5nIHBlcnNpc3RlbmN5IG9mIHJlc3BvbnNlIAorUEFTUyBDaGVja2luZyBwZXJzaXN0ZW5j
eSBvZiByZXNwb25zZSBib2R5IAorUEFTUyBUZXN0aW5nIG92ZXJyaWRpbmcgb2YgYW4gZXhpc3Rp
bmcgY2FjaGVkIHJlY29yZCB0aGF0IGlzIG5vdCBpbiBtZW1vcnkgCisKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2h0dHAvdGVzdHMvY2FjaGUtc3RvcmFnZS9jYWNoZS1yZWNvcmRzLXBlcnNpc3Rl
bmN5Lmh0dHBzLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2NhY2hlLXN0b3JhZ2UvY2Fj
aGUtcmVjb3Jkcy1wZXJzaXN0ZW5jeS5odHRwcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJiNGJhYTAwYWJl
YWE1ZDU1MTdjMzA4NWU4MWFiMjgyYTM3MmE4NTAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL2NhY2hlLXN0b3JhZ2UvY2FjaGUtcmVjb3Jkcy1wZXJzaXN0ZW5jeS5o
dHRwcy5odG1sCkBAIC0wLDAgKzEsMTMzIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhl
YWQ+Cis8dGl0bGU+Q2FjaGUgU3RvcmFnZTogdGVzdGluZyBDYWNoZSBwZXJzaXN0ZW5jeTwvdGl0
bGU+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8
L2hlYWQ+Cis8Ym9keT4KKyAgICA8c2NyaXB0PgorZnVuY3Rpb24gYXNzZXJ0X2hlYWRlcl9lcXVh
bHMoYWN0dWFsLCBleHBlY3RlZCwgZGVzY3JpcHRpb24pIHsKKyAgICBhc3NlcnRfY2xhc3Nfc3Ry
aW5nKGFjdHVhbCwgIkhlYWRlcnMiLCBkZXNjcmlwdGlvbik7CisgICAgdmFyIGhlYWRlcjsKKyAg
ICB2YXIgYWN0dWFsX2hlYWRlcnMgPSBbXTsKKyAgICB2YXIgZXhwZWN0ZWRfaGVhZGVycyA9IFtd
OworICAgIGZvciAoaGVhZGVyIG9mIGFjdHVhbCkKKyAgICAgICAgYWN0dWFsX2hlYWRlcnMucHVz
aChoZWFkZXJbMF0gKyAiOiAiICsgaGVhZGVyWzFdKTsKKyAgICBmb3IgKGhlYWRlciBvZiBleHBl
Y3RlZCkKKyAgICAgICAgZXhwZWN0ZWRfaGVhZGVycy5wdXNoKGhlYWRlclswXSArICI6ICIgKyBo
ZWFkZXJbMV0pOworICAgIGFzc2VydF9hcnJheV9lcXVhbHMoYWN0dWFsX2hlYWRlcnMsIGV4cGVj
dGVkX2hlYWRlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiArICIgSGVh
ZGVycyBkaWZmZXIuIik7Cit9CisKK2Z1bmN0aW9uIGFzc2VydF9yZXNwb25zZV9lcXVhbHMoYWN0
dWFsLCBleHBlY3RlZCwgZGVzY3JpcHRpb24pIHsKKyAgICBhc3NlcnRfY2xhc3Nfc3RyaW5nKGFj
dHVhbCwgIlJlc3BvbnNlIiwgZGVzY3JpcHRpb24pOworICAgIFsidHlwZSIsICJ1cmwiLCAic3Rh
dHVzIiwgIm9rIiwgInN0YXR1c1RleHQiXS5mb3JFYWNoKGZ1bmN0aW9uKGF0dHJpYnV0ZSkgewor
ICAgICAgICBhc3NlcnRfZXF1YWxzKGFjdHVhbFthdHRyaWJ1dGVdLCBleHBlY3RlZFthdHRyaWJ1
dGVdLAorICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICsgIiBBdHRyaWJ1dGVzIGRp
ZmZlcjogIiArIGF0dHJpYnV0ZSArICIuIik7CisgICAgfSk7CisgICAgYXNzZXJ0X2hlYWRlcl9l
cXVhbHMoYWN0dWFsLmhlYWRlcnMsIGV4cGVjdGVkLmhlYWRlcnMsIGRlc2NyaXB0aW9uKTsKK30K
KworZnVuY3Rpb24gYXNzZXJ0X3JlcXVlc3RfZXF1YWxzKGFjdHVhbCwgZXhwZWN0ZWQsIGRlc2Ny
aXB0aW9uKSB7CisgICAgYXNzZXJ0X2NsYXNzX3N0cmluZyhhY3R1YWwsICJSZXF1ZXN0IiwgZGVz
Y3JpcHRpb24pOworICAgIFsidXJsIl0uZm9yRWFjaChmdW5jdGlvbihhdHRyaWJ1dGUpIHsKKyAg
ICAgICAgYXNzZXJ0X2VxdWFscyhhY3R1YWxbYXR0cmlidXRlXSwgZXhwZWN0ZWRbYXR0cmlidXRl
XSwKKyAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiArICIgQXR0cmlidXRlcyBkaWZm
ZXI6ICIgKyBhdHRyaWJ1dGUgKyAiLiIpOworICAgIH0pOworICAgIGFzc2VydF9oZWFkZXJfZXF1
YWxzKGFjdHVhbC5oZWFkZXJzLCBleHBlY3RlZC5oZWFkZXJzLCBkZXNjcmlwdGlvbik7Cit9CisK
K2Z1bmN0aW9uIGFzc2VydF9yZXF1ZXN0X2FycmF5X2VxdWFscyhhY3R1YWwsIGV4cGVjdGVkLCBk
ZXNjcmlwdGlvbikgeworICAgIGFzc2VydF90cnVlKEFycmF5LmlzQXJyYXkoYWN0dWFsKSwgZGVz
Y3JpcHRpb24pOworICAgIGFzc2VydF9lcXVhbHMoYWN0dWFsLmxlbmd0aCwgZXhwZWN0ZWQubGVu
Z3RoLCBkZXNjcmlwdGlvbik7CisgICAgYWN0dWFsLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIGlu
ZGV4KSB7CisgICAgICAgIGFzc2VydF9yZXF1ZXN0X2VxdWFscyh2YWx1ZSwgZXhwZWN0ZWRbaW5k
ZXhdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gKyAiIDogb2Jq
ZWN0WyIgKyBpbmRleCArICJdIik7CisgICAgfSk7Cit9CisKK3Byb21pc2VfdGVzdCh0ZXN0ID0+
IHsKKyAgICByZXR1cm4gc2VsZi5jYWNoZXMua2V5cygpLnRoZW4oa2V5cyA9PiB7CisgICAgICAg
IHZhciBwZW5kaW5nID0gW107CisgICAgICAgIGZvciAoa2V5IG9mIGtleXMpCisgICAgICAgICAg
ICBwZW5kaW5nLnB1c2goc2VsZi5jYWNoZXMuZGVsZXRlKGtleXNbMF0pKTsKKyAgICAgICAgcmV0
dXJuIFByb21pc2UuYWxsKHBlbmRpbmcpOworICAgIH0pOworfSwgIkNsZWFuaW5nIGV4aXN0aW5n
IGNhY2hlcyIpOworCit2YXIgdGVzdF91cmwgPSAnaHR0cHM6Ly9leGFtcGxlLmNvbS9mb28nOwor
dmFyIHRlc3RfYm9keSA9ICdIZWxsbyB3b3JsZCEnOworCitwcm9taXNlX3Rlc3QoKCkgPT4gewor
ICAgIHZhciBjYWNoZTsKKyAgICB2YXIgY2FjaGVfa2V5czsKKyAgICB2YXIgZmlyc3RfcmVzcG9u
c2UgPSBuZXcgUmVzcG9uc2UoIk9sZCBib2R5IiwgeyBzdGF0dXNUZXh0OiAnT2xkIHN0YXR1cycg
fSk7CisgICAgdmFyIGFsdGVybmF0ZV9yZXNwb25zZSA9IG5ldyBSZXNwb25zZSgiTmV3IGJvZHki
LCB7IHN0YXR1c1RleHQ6ICdOZXcgc3RhdHVzJyB9KTsKKyAgICByZXR1cm4gc2VsZi5jYWNoZXMu
b3BlbigidGVzdC1jYWNoZS1yZWNvcmRzLXBlcnNpc3RlbmN5IikudGhlbihjID0+IHsKKyAgICAg
ICAgY2FjaGUgPSBjOworICAgIH0pLnRoZW4oKCkgPT4geworICAgICAgICByZXR1cm4gY2FjaGUu
cHV0KHRlc3RfdXJsLCBmaXJzdF9yZXNwb25zZSk7CisgICAgfSkudGhlbigoKSA9PiB7CisgICAg
ICAgIHJldHVybiBjYWNoZS5rZXlzKCk7CisgICAgfSkudGhlbihrZXlzID0+IHsKKyAgICAgICAg
Y2FjaGVfa2V5cyA9IGtleXM7CisgICAgICAgIGlmICh3aW5kb3cuaW50ZXJuYWxzKQorICAgICAg
ICAgICAgcmV0dXJuIGludGVybmFscy5jbGVhckNhY2hlU3RvcmFnZU1lbW9yeVJlcHJlc2VudGF0
aW9uKCk7CisgICAgfSkudGhlbigoKSA9PiB7CisgICAgICAgIHJldHVybiBzZWxmLmNhY2hlcy5v
cGVuKCJ0ZXN0LWNhY2hlLXJlY29yZHMtcGVyc2lzdGVuY3kiKTsKKyAgICB9KS50aGVuKGMgPT4g
eworICAgICAgICBjYWNoZSA9IGM7CisgICAgICAgIHJldHVybiBjYWNoZS5rZXlzKCkudGhlbigo
a2V5cykgPT4geworICAgICAgICAgICAgdGVzdCgoKSA9PiB7CisgICAgICAgICAgICAgICAgYXNz
ZXJ0X3JlcXVlc3RfYXJyYXlfZXF1YWxzKGtleXMsIGNhY2hlX2tleXMpOworICAgICAgICAgICAg
fSwgIkNoZWNraW5nIHBlcnNpc3RlbmN5IG9mIGNhY2hlIGtleXMiKTsKKyAgICAgICAgICAgIHJl
dHVybiBjYWNoZS5tYXRjaCh0ZXN0X3VybCk7CisgICAgICAgIH0pLnRoZW4oKHJlc3VsdCkgPT4g
eworICAgICAgICAgICAgdGVzdCgoKSA9PiB7CisgICAgICAgICAgICAgICAgYXNzZXJ0X3Jlc3Bv
bnNlX2VxdWFscyhyZXN1bHQsIGZpcnN0X3Jlc3BvbnNlLCAiQ2FjaGUucHV0IHNob3VsZCBzdG9y
ZSB0aGUgcmVzcG9uc2UgcGVyc2lzdGVudGx5Iik7CisgICAgICAgICAgICB9LCAiQ2hlY2tpbmcg
cGVyc2lzdGVuY3kgb2YgcmVzcG9uc2UiKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQudGV4
dCgpOworICAgICAgICB9KS50aGVuKChib2R5KSA9PiB7CisgICAgICAgICAgICB0ZXN0KCgpID0+
IHsKKyAgICAgICAgICAgICAgICBhc3NlcnRfZXF1YWxzKGJvZHksICJPbGQgYm9keSIsICJDYWNo
ZSBwdXQgc2hvdWxkIHN0b3JlIHRoZSByZXNwb25zZSBib2R5IHBlcnNpc3RlbnRseS4iKTsKKyAg
ICAgICAgICAgIH0sICJDaGVja2luZyBwZXJzaXN0ZW5jeSBvZiByZXNwb25zZSBib2R5Iik7Cisg
ICAgICAgIH0pOworICAgIH0pLnRoZW4oKCkgPT4geworICAgICAgICByZXR1cm4gY2FjaGUucHV0
KHRlc3RfdXJsLCBhbHRlcm5hdGVfcmVzcG9uc2UpOworICAgIH0pLnRoZW4oKCkgPT4geworICAg
ICAgICByZXR1cm4gY2FjaGUua2V5cygpOworICAgIH0pLnRoZW4oa2V5cyA9PiB7CisgICAgICAg
IGNhY2hlX2tleXMgPSBrZXlzOworICAgICAgICBpZiAod2luZG93LmludGVybmFscykKKyAgICAg
ICAgICAgIHJldHVybiBpbnRlcm5hbHMuY2xlYXJDYWNoZVN0b3JhZ2VNZW1vcnlSZXByZXNlbnRh
dGlvbigpOworICAgIH0pLnRoZW4oKCkgPT4geworICAgICAgICByZXR1cm4gc2VsZi5jYWNoZXMu
b3BlbigidGVzdC1jYWNoZS1yZWNvcmRzLXBlcnNpc3RlbmN5Iik7CisgICAgfSkudGhlbihjID0+
IHsKKyAgICAgICAgY2FjaGUgPSBjOworICAgICAgICByZXR1cm4gY2FjaGUua2V5cygpOworICAg
IH0pLnRoZW4oKGtleXMpID0+IHsKKyAgICAgICAgYXNzZXJ0X3JlcXVlc3RfYXJyYXlfZXF1YWxz
KGtleXMsIGNhY2hlX2tleXMpOworICAgIH0pLnRoZW4oKCkgPT4geworICAgICAgICBwcm9taXNl
X3Rlc3QoKCkgPT4geworICAgICAgICAgICAgcmV0dXJuIGNhY2hlLm1hdGNoKHRlc3RfdXJsKS50
aGVuKChyZXN1bHQpID0+IHsKKyAgICAgICAgICAgICAgICBhc3NlcnRfcmVzcG9uc2VfZXF1YWxz
KHJlc3VsdCwgYWx0ZXJuYXRlX3Jlc3BvbnNlLCAnQ2FjaGUucHV0IHNob3VsZCByZXBsYWNlIGV4
aXN0aW5nICcgKyAncmVzcG9uc2Ugd2l0aCBuZXcgcmVzcG9uc2UuJyk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdC50ZXh0KCk7CisgICAgICAgICAgICB9KS50aGVuKChib2R5KSA9PiB7
CisgICAgICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyhib2R5LCAiTmV3IGJvZHkiLCAnQ2FjaGUg
cHV0IHNob3VsZCBzdG9yZSBuZXcgcmVzcG9uc2UgYm9keS4nKTsKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICB9LCAnVGVzdGluZyBvdmVycmlkaW5nIG9mIGFuIGV4aXN0aW5nIGNhY2hlZCByZWNv
cmQgdGhhdCBpcyBub3QgaW4gbWVtb3J5Jyk7CisgICAgfSk7Cit9LCAnQ2FjaGUucHV0IGNhbGxl
ZCB0d2ljZSB3aXRoIG1hdGNoaW5nIFJlcXVlc3RzIC0ga2V5cyBzaG91bGQgcmVtYWluIHRoZSBz
YW1lIC0gdGVzdGluZyBwZXJzaXN0ZW5jeScpOworCitwcm9taXNlX3Rlc3QodGVzdCA9PiB7Cisg
ICAgcmV0dXJuIHNlbGYuY2FjaGVzLmtleXMoKS50aGVuKGtleXMgPT4geworICAgICAgICB2YXIg
cGVuZGluZyA9IFtdOworICAgICAgICBmb3IgKGtleSBvZiBrZXlzKQorICAgICAgICAgICAgcGVu
ZGluZy5wdXNoKHNlbGYuY2FjaGVzLmRlbGV0ZShrZXlzWzBdKSk7CisgICAgICAgIHJldHVybiBQ
cm9taXNlLmFsbChwZW5kaW5nKTsKKyAgICB9KTsKK30sICJDbGVhbmluZyBjcmVhdGVkIGNhY2hl
cyIpOworICAgIDwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>320709</attachid>
            <date>2017-09-13 16:40:12 -0700</date>
            <delta_ts>2017-09-13 16:50:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-176845-20170913164011.patch</filename>
            <type>text/plain</type>
            <size>55802</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIxOTk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDBiNGM1Y2Q2NGM0YzdhNzdl
Y2Y2YmY0MGY5ZDBhNTFkYWVjNTMzNzIuLmE3ZmFkNjEwMmQwY2FkZDE3MmRhZGUxMmZhMzdkYzc0
ZGJiNzM4MjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTA1IEBACiAyMDE3LTA5LTEzICBZb3Vlbm4g
RmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAorICAgICAgICBBZGQgQ2FjaGUgQVBJIHN1cHBv
cnQgb2YgcmVjb3JkcyBwZXJzaXN0ZW5jeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTc2ODQ1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgSW50cm9kdWNpbmcgYXN5bmNocm9ub3VzIG9wZW5pbmcgb2YgQ2Fj
aGUgb2JqZWN0cy4KKyAgICAgICAgV2hlbiBvcGVuaW5nLCBDYWNoZSBvYmplY3RzIHdpbGwgcmVh
ZCB0aGUgbGlzdCBvZiByZWNvcmRzIGZyb20gdGhlIGRpc2suCisgICAgICAgIFRoZXkga2VlcCBp
biBtZW1vcnkgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiB0byBtYWtlIGFueSBtYXRjaCBvciBy
ZW1vdmUgcmVxdWVzdCB3aXRob3V0IHJlYWRpbmcgZnVydGhlciBpbmZvcm1hdGlvbiBmcm9tIHRo
ZSBkaXNrLgorICAgICAgICBDYWNoZSBvYmplY3RzIHRodXMga2VlcCBkdXJpbmcgdGhlIG9wZW5p
bmcgdGltZSBhIGxpc3Qgb2YgY2FsbGJhY2tzIHRvIGNhbGwgd2hlbiBiZWluZyBvcGVuZWQuCisg
ICAgICAgIFBlcnNpc3RlbnQgc3RvcmFnZSBpcyBpbXBsZW1lbnRlZCB0aHJvdWdoIE5ldHdvcmtD
YWNoZTo6U3RvcmFnZS4KKworICAgICAgICBBIENhY2hlIG9iamVjdCBpcyBhZGRlZCBhIHVuaXF1
ZSBuYW1lIHNvIHRoYXQgcmVjb3JkcyBmcm9tIGEgQ2FjaGUgY2Fubm90IGJlIG1peGVkIHdpdGgg
cmVjb3JkcyBmcm9tIGFub3RoZXIgQ2FjaGUuCisgICAgICAgIFRoaXMgdW5pcXVlIG5hbWUgaXMg
c3RvcmVkIHBlcnNpc3Rlbmx5IGluIGFkZGl0aW9uIHRvIHRoZSBDYWNoZSBuYW1lLgorICAgICAg
ICBUaGlzIHVuaXF1ZSBuYW1lIGlzIHVzZWQgYXMgdGhlIGtleSB0eXBlIGdpdmVuIHRvIHRoZSBz
dG9yYWdlLgorCisgICAgICAgIFJlcXVlc3QsIHJlc3BvbnNlIGFuZCByZXNwb25zZWJvZHkgZGF0
YSBhcmUgbm8gbG9uZ2VyIGtlcHQgYnkgdGhlIENhY2hlIG9iamVjdC4KKyAgICAgICAgRm9yIHJl
Z3VsYXIgc2Vzc2lvbnMsIHRoaXMgaW5mb3JtYXRpb24gaXMga2VwdCBvbiB0aGUgZGlzayB0aHJv
dWdoIE5ldHdvcmtDYWNoZTo6U3RvcmFnZS4KKyAgICAgICAgSW5zZXJ0aW9uIHRpbWUgaXMgYWxz
byBzdG9yZWQgcGVyc2lzdGVudGx5IHNvIGFzIHRvIGtlZXAgdGhlIG9yZGVyaW5nIG9mIHRoZSBy
ZWNvcmRzIGNvbnNpc3RlbnQuCisgICAgICAgIEZvciBwcml2YXRlIGJyb3dzaW5nIHNlc3Npb25z
LCB0aGlzIGluZm9ybWF0aW9uIGlzIGtlcHQgaW4gYSBtYXAgb3duZWQgYnkgdGhlIENhY2hlcyBv
YmplY3QuCisgICAgICAgIFJlY29yZERhdGEgaXMgcmVuYW1lZCB0byBSZWNvcmRJbmZvcm1hdGlv
biBhcyBpdCBub3cgb25seSBjb250YWlucyB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBoYW5kbGUg
dGhlIGRpZmZlcmVudCBDYWNoZSBhY3Rpb25zLgorCisgICAgICAgIEZvciBldmVyeSByZWNvcmQg
cmV0cmlldmFsIGFjdGlvbiwgYSBSZWFkUmVjb3JkVGFza0NvdW50ZXIgaXMgdXNlZC4KKyAgICAg
ICAgSXRzIHB1cnBvc2UgaXMgdG8gYWxsb3cgcmV0cmlldmluZyB0aGUgcmVjb3JkIGRhdGEgb24g
dGhlIGRpc2sgaW4gcGFyYWxsZWwsCisgICAgICAgIGFuZCB0aGVuIHNlbmQgYmFjayB0aGUgaW5m
b3JtYXRpb24gd2hlbiBldmVyeXRoaW5nIGlzIHJlYWQuCisgICAgICAgIEluIGNhc2Ugc29tZSBy
ZWNvcmRzIGNhbm5vdCBiZSBjb3JyZWN0bHkgcmVhZCwgdGhleSBhcmUgcmVtb3ZlZCBhdXRvbWF0
aWNhbGx5IGF0IHRoYXQgcG9pbnQuCisgICAgICAgIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9u
IGxvYWRzIGFsbCBpbmZvcm1hdGlvbiBpbiBtZW1vcnkgaW5jbHVkaW5nIHJlc3BvbnNlIGJvZGll
cy4KKyAgICAgICAgRnVydGhlciBpbXByb3ZlbWVudHMgbWlnaHQgY29uc2lkZXIgc3RyZWFtaW5n
IHRoZSByZXNwb25zZSBib2RpZXMgcHJvZ3Jlc3NpdmVseS4KKworICAgICAgICBGb3IgZXZlcnkg
c3RvcmVkIHJlY29yZCwgYW4gQXN5bmNocm9ub3VzUHV0VGFza0NvdW50ZXIgaXMgdXNlZC4KKyAg
ICAgICAgSXRzIHB1cnBvc2UgaXMgYWxzbyB0byB3YWl0IGZvciBhbGwgcHV0IGFjdGlvbnMgdG8g
YmUgY29tcGxldGVkIGJlZm9yZSBleGVjdXRpbmcgdGhlIGNvbXBsZXRpb24gY2FsbGJhY2suCisg
ICAgICAgIEluIHNvbWUgY2FzZXMsIGEgcmVjb3JkIG5lZWRzIHRvIGJlIG92ZXJyaWRlbi4KKyAg
ICAgICAgSW4gdGhhdCBjYXNlLCBhcyBwZXIgdGhlIHNwZWNpZmljYXRpb24sIG9ubHkgdGhlIGRh
dGEgcmVsYXRlZCB0byB0aGUgcmVzcG9uc2UgaXMgdG8gYmUgbW9kaWZpZWQuCisgICAgICAgIFRo
aXMgcmVxdWlyZXMgcmVhZGluZyB0aGUgcmVjb3JkIHJlcXVlc3QgZGF0YSBvbiBkaXNrIGJlZm9y
ZSBhY3R1YWxseSB3cml0aW5nIHRoZSB3aG9sZSByZWNvcmQgYWdhaW4uCisgICAgICAgIFRoaXMg
aXMgaW1wbGVtZW50ZWQgaW4gdXBkYXRlUmVjb3JkVG9EaXNrLgorCisgICAgICAgIFRoZSBDYWNo
ZSBvYmplY3QgaXMgZGVsZWdhdGluZyBhbGwgcmVjb3JkIHdyaXRpbmcvcmVhZGluZyB0YXNrcyB0
byBpdHMgQ2FjaGVzIG9iamVjdC4KKyAgICAgICAgVGhlIENhY2hlcyBvYmplY3QgaXMgcmVzcG9u
c2libGUgdG8gaGFuZGxlIHBlcnNpc3RlbnQvcHJpdmF0ZSBzZXNzaW9ucy4KKworICAgICAgICAq
IE5ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OkNhY2hlU3RvcmFnZTo6RW5naW5lOjpyZXRyaWV2ZVJlY29yZHMpOiBNYWtpbmcgc3Vy
ZSBDYWNoZSBvYmplY3QgaXMgb3BlbmVkLgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6
OkVuZ2luZTo6cmVhZENhY2hlKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFn
ZTo6RW5naW5lOjp1bmxvY2spOiBEaXNwb3NpbmcgdGhlIGNhY2hlIHdpdGhvdXQgZ29pbmcgdGhy
b3VnaCBpbml0aWFsaXppbmcgaXQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2Fj
aGVTdG9yYWdlRW5naW5lQ2FjaGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6
OmNvbXB1dGVLZXlVUkwpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OnF1ZXJ5Q2Fj
aGUpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OnVwZGF0ZVZhcnlJbmZvcm1hdGlv
bik6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OnRvUmVjb3JkSW5mb3Jt
YXRpb24pOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjpDYWNoZSk6Cisg
ICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6Om9wZW4pOgorICAgICAgICAoV2Vi
S2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjpmaW5pc2hPcGVuaW5nKToKKyAgICAgICAgKFdlYktp
dDo6Q2FjaGVTdG9yYWdlOjpSZWFkUmVjb3JkVGFza0NvdW50ZXI6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6UmVhZFJlY29yZFRhc2tDb3VudGVyOjp+UmVhZFJlY29y
ZFRhc2tDb3VudGVyKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpSZWFkUmVjb3Jk
VGFza0NvdW50ZXI6OmFwcGVuZFJlY29yZCk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFn
ZTo6UmVhZFJlY29yZFRhc2tDb3VudGVyOjpSZWFkUmVjb3JkVGFza0NvdW50ZXIpOgorICAgICAg
ICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjpyZXRyaWV2ZVJlY29yZCk6CisgICAgICAg
IChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OnJldHJpZXZlUmVjb3Jkcyk6CisgICAgICAg
IChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OmFkZFJlY29yZCk6CisgICAgICAgIChXZWJL
aXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OnJlY29yZHNGcm9tVVJMKToKKyAgICAgICAgKFdlYktp
dDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6cmVjb3Jkc0Zyb21VUkwgY29uc3QpOgorICAgICAgICAo
V2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkFzeW5jaHJvbm91c1B1dFRhc2tDb3VudGVyOjpjcmVhdGUp
OgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkFzeW5jaHJvbm91c1B1dFRhc2tDb3Vu
dGVyOjp+QXN5bmNocm9ub3VzUHV0VGFza0NvdW50ZXIpOgorICAgICAgICAoV2ViS2l0OjpDYWNo
ZVN0b3JhZ2U6OkFzeW5jaHJvbm91c1B1dFRhc2tDb3VudGVyOjpvbkNvbXBsZXRpb24pOgorICAg
ICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkFzeW5jaHJvbm91c1B1dFRhc2tDb3VudGVyOjpz
ZXRFcnJvcik6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OnB1dCk6Cisg
ICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OnJlbW92ZSk6CisgICAgICAgIChX
ZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OnJlbW92ZUZyb21SZWNvcmRMaXN0KToKKyAgICAg
ICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6d3JpdGVSZWNvcmRUb0Rpc2spOgorICAg
ICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjp1cGRhdGVSZWNvcmRUb0Rpc2spOgor
ICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjpyZWFkUmVjb3JkRnJvbURpc2sp
OgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjpyZW1vdmVSZWNvcmRGcm9t
RGlzayk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OmVuY29kZSk6Cisg
ICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6ZGVjb2RlUmVjb3JkSGVhZGVyKToKKyAgICAg
ICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6ZGVjb2RlKToKKyAgICAgICAgKFdlYktp
dDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6a2V5cyBjb25zdCk6CisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUuaDoKKyAgICAgICAgKFdlYktpdDo6
Q2FjaGVTdG9yYWdlOjpDYWNoZTo6aXNPcGVuZWQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpD
YWNoZVN0b3JhZ2U6OkNhY2hlOjp1bmlxdWVOYW1lIGNvbnN0KToKKyAgICAgICAgKiBOZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJLaXQ6
OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjpvcGVuKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9y
YWdlOjpDYWNoZXM6OnJlbW92ZSk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2Fj
aGVzOjpkaXNwb3NlKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjplbmNvZGVDYWNo
ZU5hbWVzKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpkZWNvZGVDYWNoZXNOYW1l
cyk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjpyZWFkQ2FjaGVzRnJv
bURpc2spOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6cmVhZFJlY29y
ZHNMaXN0KToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6OndyaXRlUmVj
b3JkKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6OnJlYWRSZWNvcmQp
OgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6cmVtb3ZlUmVjb3JkKToK
KyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6OmNsZWFyTWVtb3J5UmVwcmVz
ZW50YXRpb24pOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6c2FsdCBj
b25zdCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5l
Q2FjaGVzLmg6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjpzaG91bGRQ
ZXJzaXN0IGNvbnN0KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVTdG9yYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpTdG9yYWdlOjpz
dG9yZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFn
ZS5oOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlN0b3JhZ2U6OndyaXRlV2l0aG91
dFdhaXRpbmcpOgorCisyMDE3LTA5LTEzICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNv
bT4KKwogICAgICAgICBJbnRlcm5hbHMgY2xlYXJDYWNoZVN0b3JhZ2VNZW1vcnlSZXByZXNlbnRh
dGlvbiBzaG91bGQgcmV0dXJuIGEgUHJvbWlzZQogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc2ODE4CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lLmNwcCBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lLmNwcAppbmRleCA1ODMy
YzFhMTE3OTVlOWZjZDhiMmYxN2FiOGNmNTdmNmZlZmNjMzBiLi40MDhmNjJiMWNjYjRmZmI4M2U5
ZWExNzk4NmQzNmQwNGQzZjk5ZTIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmUuY3BwCkBAIC0xMzIsOCArMTMy
LDcgQEAgdm9pZCBFbmdpbmU6OnJldHJpZXZlUmVjb3Jkcyh1aW50NjRfdCBjYWNoZUlkZW50aWZp
ZXIsIFdlYkNvcmU6OlVSTCYmIHVybCwgUmVjb3IKICAgICAgICAgICAgIGNhbGxiYWNrKG1ha2VV
bmV4cGVjdGVkKHJlc3VsdC5lcnJvcigpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KLQotICAgICAgICBjYWxsYmFjayhyZXN1bHQudmFsdWUoKS5nZXQoKS5yZXRyaWV2ZVJlY29y
ZHModXJsKSk7CisgICAgICAgIHJlc3VsdC52YWx1ZSgpLmdldCgpLnJldHJpZXZlUmVjb3Jkcyh1
cmwsIFdURk1vdmUoY2FsbGJhY2spKTsKICAgICB9KTsKIH0KIApAQCAtMjE3LDEyICsyMTYsMjgg
QEAgdm9pZCBFbmdpbmU6OnJlYWRDYWNoZXNGcm9tRGlzayhjb25zdCBTdHJpbmcmIG9yaWdpbiwg
Q2FjaGVzQ2FsbGJhY2smJiBjYWxsYmFjaykKIAogdm9pZCBFbmdpbmU6OnJlYWRDYWNoZSh1aW50
NjRfdCBjYWNoZUlkZW50aWZpZXIsIENhY2hlQ2FsbGJhY2smJiBjYWxsYmFjaykKIHsKLSAgICAv
LyBGSVhNRTogSW1wbGVtZW50IHJlYWRpbmcuCiAgICAgYXV0byogY2FjaGUgPSB0aGlzLT5jYWNo
ZShjYWNoZUlkZW50aWZpZXIpOwogICAgIGlmICghY2FjaGUpIHsKICAgICAgICAgY2FsbGJhY2so
bWFrZVVuZXhwZWN0ZWQoRXJyb3I6OkludGVybmFsKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CisgICAgaWYgKCFjYWNoZS0+aXNPcGVuZWQoKSkgeworICAgICAgICBjYWNoZS0+b3BlbihbdGhp
cywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjYWNoZUlkZW50aWZpZXIsIGNhbGxi
YWNrID0gV1RGTW92ZShjYWxsYmFjayldKHN0ZDo6b3B0aW9uYWw8RXJyb3I+JiYgZXJyb3IpIG11
dGFibGUgeworICAgICAgICAgICAgaWYgKGVycm9yKSB7CisgICAgICAgICAgICAgICAgY2FsbGJh
Y2sobWFrZVVuZXhwZWN0ZWQoZXJyb3IudmFsdWUoKSkpOworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYXV0byogY2FjaGUgPSB0aGlzLT5jYWNo
ZShjYWNoZUlkZW50aWZpZXIpOworICAgICAgICAgICAgaWYgKCFjYWNoZSkgeworICAgICAgICAg
ICAgICAgIGNhbGxiYWNrKG1ha2VVbmV4cGVjdGVkKEVycm9yOjpJbnRlcm5hbCkpOworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFTU0VSVChjYWNo
ZS0+aXNPcGVuZWQoKSk7CisgICAgICAgICAgICBjYWxsYmFjayhzdGQ6OnJlZmVyZW5jZV93cmFw
cGVyPENhY2hlPiB7ICpjYWNoZSB9KTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CiAgICAgY2FsbGJhY2soc3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxDYWNoZT4geyAqY2FjaGUg
fSk7CiB9CiAKQEAgLTMyOCwxMiArMzQzLDExIEBAIHZvaWQgRW5naW5lOjp1bmxvY2sodWludDY0
X3QgY2FjaGVJZGVudGlmaWVyKQogICAgIGlmICgtLWxvY2tDb3VudC0+dmFsdWUpCiAgICAgICAg
IHJldHVybjsKIAotICAgIHJlYWRDYWNoZShjYWNoZUlkZW50aWZpZXIsIFt0aGlzXShDYWNoZU9y
RXJyb3ImJiByZXN1bHQpIG11dGFibGUgewotICAgICAgICBpZiAoIXJlc3VsdC5oYXNWYWx1ZSgp
KQotICAgICAgICAgICAgcmV0dXJuOworICAgIGF1dG8qIGNhY2hlID0gdGhpcy0+Y2FjaGUoY2Fj
aGVJZGVudGlmaWVyKTsKKyAgICBpZiAoIWNhY2hlKQorICAgICAgICByZXR1cm47CiAKLSAgICAg
ICAgcmVzdWx0LnZhbHVlKCkuZ2V0KCkuZGlzcG9zZSgpOwotICAgIH0pOworICAgIGNhY2hlLT5k
aXNwb3NlKCk7CiB9CiAKIFN0cmluZyBFbmdpbmU6OnJlcHJlc2VudGF0aW9uKCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5l
Q2FjaGUuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3Jh
Z2VFbmdpbmVDYWNoZS5jcHAKaW5kZXggNDgxYWRkN2VjY2IxYzVhMjUyM2VlYWY4MmI2NjRiNzNk
ZmVhNjg1ZS4uYTgxMDE3Njc0MDMxYzk3MzkwZGI5YjVkZTkxN2RlNTM0MmVkM2UyMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdp
bmVDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNo
ZVN0b3JhZ2VFbmdpbmVDYWNoZS5jcHAKQEAgLTI3LDE1ICsyNywxNiBAQAogI2luY2x1ZGUgIkNh
Y2hlU3RvcmFnZUVuZ2luZS5oIgogCiAjaW5jbHVkZSAiQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVz
LmgiCisjaW5jbHVkZSAiTmV0d29ya0NhY2hlQ29kZXJzLmgiCiAjaW5jbHVkZSAiTmV0d29ya0Nh
Y2hlSU9DaGFubmVsLmgiCiAjaW5jbHVkZSAiTmV0d29ya0NhY2hlS2V5LmgiCiAjaW5jbHVkZSAi
TmV0d29ya1Byb2Nlc3MuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0NhY2hlUXVlcnlPcHRpb25zLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9IVFRQUGFyc2Vycy5oPgogI2luY2x1ZGUgPHBhbC9TZXNzaW9u
SUQuaD4KLSNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvTWFpblRo
cmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9V
VUlELmg+CiAjaW5jbHVkZSA8d3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuaD4KICNp
bmNsdWRlIDx3dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudERlY29kZXIuaD4KICNpbmNsdWRlIDx3
dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudEVuY29kZXIuaD4KQEAgLTUxLDcgKzUyLDE4IEBAIG5h
bWVzcGFjZSBXZWJLaXQgewogCiBuYW1lc3BhY2UgQ2FjaGVTdG9yYWdlIHsKIAotc3RhdGljIGlu
bGluZSBWZWN0b3I8dWludDY0X3Q+IHF1ZXJ5Q2FjaGUoY29uc3QgVmVjdG9yPFJlY29yZERhdGE+
KiByZWNvcmRzLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IENhY2hlUXVl
cnlPcHRpb25zJiBvcHRpb25zKQorc3RhdGljIHN0ZDo6b3B0aW9uYWw8c3RkOjpwYWlyPFJlY29y
ZCwgZG91YmxlPj4gZGVjb2RlUmVjb3JkSGVhZGVyKGNvbnN0IFN0b3JhZ2U6OlJlY29yZCYpOwor
CitzdGF0aWMgaW5saW5lIFN0cmluZyBjb21wdXRlS2V5VVJMKGNvbnN0IFVSTCYgdXJsKQorewor
ICAgIFVSTCBrZXlVUkwgPSB1cmw7CisgICAgaWYgKGtleVVSTC5oYXNRdWVyeSgpKQorICAgICAg
ICBrZXlVUkwuc2V0UXVlcnkoeyB9KTsKKyAgICBrZXlVUkwucmVtb3ZlRnJhZ21lbnRJZGVudGlm
aWVyKCk7CisgICAgcmV0dXJuIGtleVVSTDsKK30KKworc3RhdGljIGlubGluZSBWZWN0b3I8dWlu
dDY0X3Q+IHF1ZXJ5Q2FjaGUoY29uc3QgVmVjdG9yPFJlY29yZEluZm9ybWF0aW9uPiogcmVjb3Jk
cywgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBDYWNoZVF1ZXJ5T3B0aW9u
cyYgb3B0aW9ucykKIHsKICAgICBpZiAoIXJlY29yZHMpCiAgICAgICAgIHJldHVybiB7IH07CkBA
IC02Nyw0NyArNzksNDMgQEAgc3RhdGljIGlubGluZSBWZWN0b3I8dWludDY0X3Q+IHF1ZXJ5Q2Fj
aGUoY29uc3QgVmVjdG9yPFJlY29yZERhdGE+KiByZWNvcmRzLCBjb24KICAgICByZXR1cm4gcmVz
dWx0czsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZVZhcnlJbmZvcm1hdGlvbihSZWNv
cmREYXRhJiByZWNvcmREYXRhKQorc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZVZhcnlJbmZvcm1h
dGlvbihSZWNvcmRJbmZvcm1hdGlvbiYgcmVjb3JkSW5mb3JtYXRpb24sIGNvbnN0IFJlc291cmNl
UmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7Ci0g
ICAgYXV0byB2YXJ5VmFsdWUgPSByZWNvcmREYXRhLmRhdGEtPnJlc3BvbnNlLmh0dHBIZWFkZXJG
aWVsZChXZWJDb3JlOjpIVFRQSGVhZGVyTmFtZTo6VmFyeSk7CisgICAgYXV0byB2YXJ5VmFsdWUg
PSByZXNwb25zZS5odHRwSGVhZGVyRmllbGQoV2ViQ29yZTo6SFRUUEhlYWRlck5hbWU6OlZhcnkp
OwogICAgIGlmICh2YXJ5VmFsdWUuaXNOdWxsKCkpIHsKLSAgICAgICAgcmVjb3JkRGF0YS5oYXNW
YXJ5U3RhciA9IGZhbHNlOwotICAgICAgICByZWNvcmREYXRhLnZhcnlIZWFkZXJzID0geyB9Owor
ICAgICAgICByZWNvcmRJbmZvcm1hdGlvbi5oYXNWYXJ5U3RhciA9IGZhbHNlOworICAgICAgICBy
ZWNvcmRJbmZvcm1hdGlvbi52YXJ5SGVhZGVycyA9IHsgfTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAogICAgIHZhcnlWYWx1ZS5zcGxpdCgnLCcsIGZhbHNlLCBbJl0oU3RyaW5nVmlldyB2aWV3
KSB7Ci0gICAgICAgIGlmICghcmVjb3JkRGF0YS5oYXNWYXJ5U3RhciAmJiBzdHJpcExlYWRpbmdB
bmRUcmFpbGluZ0hUVFBTcGFjZXModmlldykgPT0gIioiKQotICAgICAgICAgICAgcmVjb3JkRGF0
YS5oYXNWYXJ5U3RhciA9IHRydWU7CisgICAgICAgIGlmICghcmVjb3JkSW5mb3JtYXRpb24uaGFz
VmFyeVN0YXIgJiYgc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVFRQU3BhY2VzKHZpZXcpID09ICIq
IikKKyAgICAgICAgICAgIHJlY29yZEluZm9ybWF0aW9uLmhhc1ZhcnlTdGFyID0gdHJ1ZTsKICAg
ICAgICAgU3RyaW5nIGhlYWRlck5hbWUgPSB2aWV3LnRvU3RyaW5nKCk7Ci0gICAgICAgIHJlY29y
ZERhdGEudmFyeUhlYWRlcnMuYWRkKGhlYWRlck5hbWUsIHJlY29yZERhdGEuZGF0YS0+cmVxdWVz
dC5odHRwSGVhZGVyRmllbGQoaGVhZGVyTmFtZSkpOworICAgICAgICByZWNvcmRJbmZvcm1hdGlv
bi52YXJ5SGVhZGVycy5hZGQoaGVhZGVyTmFtZSwgcmVxdWVzdC5odHRwSGVhZGVyRmllbGQoaGVh
ZGVyTmFtZSkpOwogICAgIH0pOwogCi0gICAgaWYgKHJlY29yZERhdGEuaGFzVmFyeVN0YXIpCi0g
ICAgICAgIHJlY29yZERhdGEudmFyeUhlYWRlcnMgPSB7IH07Ci19Ci0KLXN0YXRpYyBpbmxpbmUg
UmVjb3JkIHRvUmVjb3JkKGNvbnN0IFJlY29yZERhdGEmIHJlY29yZCkKLXsKLSAgICByZXR1cm4g
eyByZWNvcmQuaWRlbnRpZmllciwgcmVjb3JkLnVwZGF0ZVJlc3BvbnNlQ291bnRlciwgcmVjb3Jk
LmRhdGEtPnJlcXVlc3RIZWFkZXJzR3VhcmQsIHJlY29yZC5kYXRhLT5yZXF1ZXN0LCByZWNvcmQu
ZGF0YS0+b3B0aW9ucywgcmVjb3JkLmRhdGEtPnJlZmVycmVyLCByZWNvcmQuZGF0YS0+cmVzcG9u
c2VIZWFkZXJzR3VhcmQsIHJlY29yZC5kYXRhLT5yZXNwb25zZSwgY29weVJlc3BvbnNlQm9keShy
ZWNvcmQuZGF0YS0+cmVzcG9uc2VCb2R5KSB9OworICAgIGlmIChyZWNvcmRJbmZvcm1hdGlvbi5o
YXNWYXJ5U3RhcikKKyAgICAgICAgcmVjb3JkSW5mb3JtYXRpb24udmFyeUhlYWRlcnMgPSB7IH07
CiB9CiAKLXN0YXRpYyBpbmxpbmUgUmVjb3JkRGF0YSB0b1JlY29yZERhdGEoUmVjb3JkJiYgcmVj
b3JkKQorUmVjb3JkSW5mb3JtYXRpb24gQ2FjaGU6OnRvUmVjb3JkSW5mb3JtYXRpb24oY29uc3Qg
UmVjb3JkJiByZWNvcmQpCiB7Ci0gICAgYXV0byB1cmwgPSByZWNvcmQucmVxdWVzdC51cmwoKTsK
LSAgICBSZWNvcmREYXRhOjpEYXRhIGRhdGEgPSB7IHJlY29yZC5yZXF1ZXN0SGVhZGVyc0d1YXJk
LCBXVEZNb3ZlKHJlY29yZC5yZXF1ZXN0KSwgV1RGTW92ZShyZWNvcmQub3B0aW9ucyksIFdURk1v
dmUocmVjb3JkLnJlZmVycmVyKSwgV1RGTW92ZShyZWNvcmQucmVzcG9uc2VIZWFkZXJzR3VhcmQp
LCBXVEZNb3ZlKHJlY29yZC5yZXNwb25zZSksIFdURk1vdmUocmVjb3JkLnJlc3BvbnNlQm9keSkg
fTsKLSAgICBSZWNvcmREYXRhIHJlY29yZERhdGEgPSB7IHsgfSwgbW9ub3RvbmljYWxseUluY3Jl
YXNpbmdUaW1lTVMoKSwgcmVjb3JkLmlkZW50aWZpZXIsIDAsIHVybCwgZmFsc2UsIHsgfSwgV1RG
TW92ZShkYXRhKSB9OworICAgIGF1dG8gaW5zZXJ0aW9uVGltZSA9IG1vbm90b25pY2FsbHlJbmNy
ZWFzaW5nVGltZU1TKCk7CisgICAgYXV0byBrZXkgPSBLZXkgeyBBU0NJSUxpdGVyYWwoInJlY29y
ZCIpLCBTdHJpbmcgeyBtX3VuaXF1ZU5hbWUgfSwgU3RyaW5nKCksIGNyZWF0ZUNhbm9uaWNhbFVV
SURTdHJpbmcoKSwgbV9jYWNoZXMuc2FsdCgpIH07CiAKLSAgICB1cGRhdGVWYXJ5SW5mb3JtYXRp
b24ocmVjb3JkRGF0YSk7CisgICAgUmVjb3JkSW5mb3JtYXRpb24gcmVjb3JkSW5mb3JtYXRpb24g
PSB7IFdURk1vdmUoa2V5KSwgaW5zZXJ0aW9uVGltZSwgcmVjb3JkLmlkZW50aWZpZXIsIDAgLCBy
ZWNvcmQucmVxdWVzdC51cmwoKSwgZmFsc2UsIHsgfSB9OworICAgIHVwZGF0ZVZhcnlJbmZvcm1h
dGlvbihyZWNvcmRJbmZvcm1hdGlvbiwgcmVjb3JkLnJlcXVlc3QsIHJlY29yZC5yZXNwb25zZSk7
CiAKLSAgICByZXR1cm4gcmVjb3JkRGF0YTsKKyAgICByZXR1cm4gcmVjb3JkSW5mb3JtYXRpb247
CiB9CiAKLUNhY2hlOjpDYWNoZShDYWNoZXMmIGNhY2hlcywgdWludDY0X3QgaWRlbnRpZmllciwg
U3RhdGUgc3RhdGUsIFN0cmluZyYmIG5hbWUpCitDYWNoZTo6Q2FjaGUoQ2FjaGVzJiBjYWNoZXMs
IHVpbnQ2NF90IGlkZW50aWZpZXIsIFN0YXRlIHN0YXRlLCBTdHJpbmcmJiBuYW1lLCBTdHJpbmcm
JiB1bmlxdWVOYW1lKQogICAgIDogbV9jYWNoZXMoY2FjaGVzKQogICAgICwgbV9zdGF0ZShzdGF0
ZSkKICAgICAsIG1faWRlbnRpZmllcihpZGVudGlmaWVyKQogICAgICwgbV9uYW1lKFdURk1vdmUo
bmFtZSkpCisgICAgLCBtX3VuaXF1ZU5hbWUoV1RGTW92ZSh1bmlxdWVOYW1lKSkKIHsKIH0KIApA
QCAtMTIyLDcgKzEzMCwxNSBAQCB2b2lkIENhY2hlOjpjbGVhck1lbW9yeVJlcHJlc2VudGF0aW9u
KCkKICAgICBtX25leHRSZWNvcmRJZGVudGlmaWVyID0gMDsKICAgICBtX3N0YXRlID0gU3RhdGU6
OlVuaW5pdGlhbGl6ZWQ7CiB9Ci0gCisKK3N0cnVjdCBUcmF2ZXJzYWxSZXN1bHQgeworICAgIFJl
ZjxDYWNoZXM+IGNhY2hlczsKKyAgICB1aW50NjRfdCBjYWNoZUlkZW50aWZpZXI7CisgICAgQ29t
cGxldGlvbkNhbGxiYWNrIGNhbGxiYWNrOworICAgIEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8UmVj
b3JkSW5mb3JtYXRpb24+PiByZWNvcmRzOworICAgIFZlY3RvcjxLZXk+IGZhaWxlZFJlY29yZHM7
Cit9OworCiB2b2lkIENhY2hlOjpvcGVuKENvbXBsZXRpb25DYWxsYmFjayYmIGNhbGxiYWNrKQog
ewogICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpPcGVuKSB7CkBAIC0xMzQsMTggKzE1MCw1NCBA
QCB2b2lkIENhY2hlOjpvcGVuKENvbXBsZXRpb25DYWxsYmFjayYmIGNhbGxiYWNrKQogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgIG1fc3RhdGUgPSBTdGF0ZTo6T3BlbmluZzsKLSAgICByZWFk
UmVjb3Jkc0xpc3QoW2NhY2hlcyA9IG1ha2VSZWYobV9jYWNoZXMpLCBpZGVudGlmaWVyID0gbV9p
ZGVudGlmaWVyLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShzdGQ6Om9wdGlvbmFsPEVy
cm9yPiYmIGVycm9yKSBtdXRhYmxlIHsKLSAgICAgICAgYXV0byogY2FjaGUgPSBjYWNoZXMtPmZp
bmQoaWRlbnRpZmllcik7Ci0gICAgICAgIGlmICghY2FjaGUpIHsKLSAgICAgICAgICAgIGNhbGxi
YWNrKEVycm9yOjpJbnRlcm5hbCk7CisgICAgVHJhdmVyc2FsUmVzdWx0IHRyYXZlcnNhbFJlc3Vs
dCA9IHsgbWFrZVJlZihtX2NhY2hlcyksIG1faWRlbnRpZmllciwgV1RGTW92ZShjYWxsYmFjayks
IHsgfSwgeyB9IH07CisgICAgbV9jYWNoZXMucmVhZFJlY29yZHNMaXN0KCp0aGlzLCBbdHJhdmVy
c2FsUmVzdWx0ID0gV1RGTW92ZSh0cmF2ZXJzYWxSZXN1bHQpXShjb25zdCBhdXRvKiBzdG9yYWdl
UmVjb3JkLCBjb25zdCBhdXRvJikgbXV0YWJsZSB7CisgICAgICAgIGlmICghc3RvcmFnZVJlY29y
ZCkgeworICAgICAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt0cmF2ZXJzYWxSZXN1
bHQgPSBXVEZNb3ZlKHRyYXZlcnNhbFJlc3VsdCldKCkgbXV0YWJsZSB7CisgICAgICAgICAgICAg
ICAgZm9yIChhdXRvJiBrZXkgOiB0cmF2ZXJzYWxSZXN1bHQuZmFpbGVkUmVjb3JkcykKKyAgICAg
ICAgICAgICAgICAgICAgdHJhdmVyc2FsUmVzdWx0LmNhY2hlcy0+cmVtb3ZlUmVjb3JkKGtleSk7
CisKKyAgICAgICAgICAgICAgICBhdXRvKiBjYWNoZSA9IHRyYXZlcnNhbFJlc3VsdC5jYWNoZXMt
PmZpbmQodHJhdmVyc2FsUmVzdWx0LmNhY2hlSWRlbnRpZmllcik7CisgICAgICAgICAgICAgICAg
aWYgKCFjYWNoZSkgeworICAgICAgICAgICAgICAgICAgICB0cmF2ZXJzYWxSZXN1bHQuY2FsbGJh
Y2soRXJyb3I6OkludGVybmFsKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYWNoZS0+bV9yZWNvcmRzID0gV1RGTW92ZSh0
cmF2ZXJzYWxSZXN1bHQucmVjb3Jkcyk7CisgICAgICAgICAgICAgICAgY2FjaGUtPmZpbmlzaE9w
ZW5pbmcoV1RGTW92ZSh0cmF2ZXJzYWxSZXN1bHQuY2FsbGJhY2spLCBzdGQ6Om51bGxvcHQpOwor
ICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAg
Y2FjaGUtPmZpbmlzaE9wZW5pbmcoV1RGTW92ZShjYWxsYmFjayksIFdURk1vdmUoZXJyb3IpKTsK
KworICAgICAgICBhdXRvIGRlY29kZWQgPSBkZWNvZGVSZWNvcmRIZWFkZXIoKnN0b3JhZ2VSZWNv
cmQpOworICAgICAgICBpZiAoIWRlY29kZWQpIHsKKyAgICAgICAgICAgIHRyYXZlcnNhbFJlc3Vs
dC5mYWlsZWRSZWNvcmRzLmFwcGVuZChzdG9yYWdlUmVjb3JkLT5rZXkpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgYXV0byYgcmVjb3JkID0gZGVjb2RlZC0+Zmly
c3Q7CisgICAgICAgIGF1dG8gaW5zZXJ0aW9uVGltZSA9IGRlY29kZWQtPnNlY29uZDsKKworICAg
ICAgICBSZWNvcmRJbmZvcm1hdGlvbiByZWNvcmRJbmZvcm1hdGlvbiA9IHsgc3RvcmFnZVJlY29y
ZC0+a2V5LCBpbnNlcnRpb25UaW1lLCAwLCAwLCByZWNvcmQucmVxdWVzdC51cmwoKSwgZmFsc2Us
IHsgfSB9OworICAgICAgICB1cGRhdGVWYXJ5SW5mb3JtYXRpb24ocmVjb3JkSW5mb3JtYXRpb24s
IHJlY29yZC5yZXF1ZXN0LCByZWNvcmQucmVzcG9uc2UpOworCisgICAgICAgIGF1dG8mIHNhbWVV
UkxSZWNvcmRzID0gdHJhdmVyc2FsUmVzdWx0LnJlY29yZHMuZW5zdXJlKGNvbXB1dGVLZXlVUkwo
cmVjb3JkSW5mb3JtYXRpb24udXJsKSwgW10geyByZXR1cm4gVmVjdG9yPFJlY29yZEluZm9ybWF0
aW9uPiB7IH07IH0pLml0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgc2FtZVVSTFJlY29yZHMuYXBw
ZW5kKFdURk1vdmUocmVjb3JkSW5mb3JtYXRpb24pKTsKICAgICB9KTsKIH0KIAogdm9pZCBDYWNo
ZTo6ZmluaXNoT3BlbmluZyhDb21wbGV0aW9uQ2FsbGJhY2smJiBjYWxsYmFjaywgc3RkOjpvcHRp
b25hbDxFcnJvcj4mJiBlcnJvcikKIHsKKyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBl
cjxSZWNvcmRJbmZvcm1hdGlvbj4+IHJlY29yZHM7CisgICAgZm9yIChhdXRvJiB2YWx1ZSA6IG1f
cmVjb3Jkcy52YWx1ZXMoKSkgeworICAgICAgICBmb3IgKGF1dG8mIHJlY29yZCA6IHZhbHVlKQor
ICAgICAgICAgICAgcmVjb3Jkcy5hcHBlbmQocmVjb3JkKTsKKyAgICB9CisgICAgc3RkOjpzb3J0
KHJlY29yZHMuYmVnaW4oKSwgcmVjb3Jkcy5lbmQoKSwgWyZdKGNvbnN0IGF1dG8mIGEsIGNvbnN0
IGF1dG8mIGIpIHsKKyAgICAgICAgcmV0dXJuIGEuZ2V0KCkuaW5zZXJ0aW9uVGltZSA8IGIuZ2V0
KCkuaW5zZXJ0aW9uVGltZTsKKyAgICB9KTsKKyAgICBmb3IgKGF1dG8mIHJlY29yZCA6IHJlY29y
ZHMpCisgICAgICAgIHJlY29yZC5nZXQoKS5pZGVudGlmaWVyID0gKyttX25leHRSZWNvcmRJZGVu
dGlmaWVyOworCiAgICAgaWYgKGVycm9yKSB7CiAgICAgICAgIG1fc3RhdGUgPSBTdGF0ZTo6VW5p
bml0aWFsaXplZDsKICAgICAgICAgY2FsbGJhY2soZXJyb3IudmFsdWUoKSk7CkBAIC0xNjIsNTIg
KzIxNCw4OSBAQCB2b2lkIENhY2hlOjpmaW5pc2hPcGVuaW5nKENvbXBsZXRpb25DYWxsYmFjayYm
IGNhbGxiYWNrLCBzdGQ6Om9wdGlvbmFsPEVycm9yPiYmCiAgICAgICAgIGNhbGxiYWNrKHN0ZDo6
bnVsbG9wdCk7CiB9CiAKLVZlY3RvcjxSZWNvcmQ+IENhY2hlOjpyZXRyaWV2ZVJlY29yZHMoY29u
c3QgVVJMJiB1cmwpIGNvbnN0CitjbGFzcyBSZWFkUmVjb3JkVGFza0NvdW50ZXIgOiBwdWJsaWMg
VGhyZWFkU2FmZVJlZkNvdW50ZWQ8UmVhZFJlY29yZFRhc2tDb3VudGVyPiB7CitwdWJsaWM6Cisg
ICAgdXNpbmcgUmVhZFJlY29yZHNDYWxsYmFjayA9IFdURjo6RnVuY3Rpb248dm9pZChWZWN0b3I8
UmVjb3JkPiYmLCBWZWN0b3I8dWludDY0X3Q+JiYpPjsKKyAgICBzdGF0aWMgUmVmUHRyPFJlYWRS
ZWNvcmRUYXNrQ291bnRlcj4gY3JlYXRlKFJlYWRSZWNvcmRzQ2FsbGJhY2smJiBjYWxsYmFjaykg
eyByZXR1cm4gYWRvcHRSZWYobmV3IFJlYWRSZWNvcmRUYXNrQ291bnRlcihXVEZNb3ZlKGNhbGxi
YWNrKSkpOyB9CisKKyAgICB+UmVhZFJlY29yZFRhc2tDb3VudGVyKCkKKyAgICB7CisgICAgICAg
IGlmICghbV9jYWxsYmFjaykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgc3RkOjpzb3J0
KG1fcmVjb3Jkcy5iZWdpbigpLCBtX3JlY29yZHMuZW5kKCksIFsmXSAoY29uc3QgYXV0byYgYSwg
Y29uc3QgYXV0byYgYikgeworICAgICAgICAgICAgcmV0dXJuIGEuaWRlbnRpZmllciA8IGIuaWRl
bnRpZmllcjsKKyAgICAgICAgfSk7CisgICAgICAgIG1fY2FsbGJhY2soV1RGTW92ZShtX3JlY29y
ZHMpLCBXVEZNb3ZlKG1fZmFpbGVkUmVjb3JkcykpOworICAgIH0KKworICAgIHZvaWQgYXBwZW5k
UmVjb3JkKEV4cGVjdGVkPFJlY29yZCwgRXJyb3I+JiYgcmVzdWx0LCB1aW50NjRfdCByZWNvcmRJ
ZGVudGlmaWVyLCB1aW50NjRfdCB1cGRhdGVDb3VudGVyKQorICAgIHsKKyAgICAgICAgaWYgKCFy
ZXN1bHQuaGFzVmFsdWUoKSkgeworICAgICAgICAgICAgbV9mYWlsZWRSZWNvcmRzLmFwcGVuZChy
ZWNvcmRJZGVudGlmaWVyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICByZXN1bHQudmFsdWUoKS5pZGVudGlmaWVyID0gcmVjb3JkSWRlbnRpZmllcjsKKyAgICAgICAg
cmVzdWx0LnZhbHVlKCkudXBkYXRlUmVzcG9uc2VDb3VudGVyID0gdXBkYXRlQ291bnRlcjsKKyAg
ICAgICAgbV9yZWNvcmRzLmFwcGVuZChXVEZNb3ZlKHJlc3VsdC52YWx1ZSgpKSk7CisgICAgfQor
Citwcml2YXRlOgorICAgIGV4cGxpY2l0IFJlYWRSZWNvcmRUYXNrQ291bnRlcihSZWFkUmVjb3Jk
c0NhbGxiYWNrJiYgY2FsbGJhY2spIDogbV9jYWxsYmFjayhXVEZNb3ZlKGNhbGxiYWNrKSkgeyB9
CisKKyAgICBSZWFkUmVjb3Jkc0NhbGxiYWNrIG1fY2FsbGJhY2s7CisgICAgVmVjdG9yPFJlY29y
ZD4gbV9yZWNvcmRzOworICAgIFZlY3Rvcjx1aW50NjRfdD4gbV9mYWlsZWRSZWNvcmRzOworfTsK
Kwordm9pZCBDYWNoZTo6cmV0cmlldmVSZWNvcmQoY29uc3QgUmVjb3JkSW5mb3JtYXRpb24mIHJl
Y29yZCwgUmVmUHRyPFJlYWRSZWNvcmRUYXNrQ291bnRlcj4mIHRhc2tDb3VudGVyKQoreworICAg
IHJlYWRSZWNvcmRGcm9tRGlzayhyZWNvcmQsIFtjYWNoZXMgPSBtYWtlUmVmKG1fY2FjaGVzKSwg
aWRlbnRpZmllciA9IG1faWRlbnRpZmllciwgcmVjb3JkSWRlbnRpZmllciA9IHJlY29yZC5pZGVu
dGlmaWVyLCB1cGRhdGVDb3VudGVyID0gcmVjb3JkLnVwZGF0ZVJlc3BvbnNlQ291bnRlciwgdGFz
a0NvdW50ZXJdKEV4cGVjdGVkPFJlY29yZCwgRXJyb3I+JiYgcmVzdWx0KSBtdXRhYmxlIHsKKyAg
ICAgICAgYXV0byogY2FjaGUgPSBjYWNoZXMtPmZpbmQoaWRlbnRpZmllcik7CisgICAgICAgIGlm
ICghY2FjaGUpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHRhc2tDb3VudGVyLT5hcHBl
bmRSZWNvcmQoV1RGTW92ZShyZXN1bHQpLCByZWNvcmRJZGVudGlmaWVyLCB1cGRhdGVDb3VudGVy
KTsKKyAgICB9KTsKK30KKwordm9pZCBDYWNoZTo6cmV0cmlldmVSZWNvcmRzKGNvbnN0IFVSTCYg
dXJsLCBSZWNvcmRzQ2FsbGJhY2smJiBjYWxsYmFjaykKIHsKKyAgICBBU1NFUlQobV9zdGF0ZSA9
PSBTdGF0ZTo6T3Blbik7CisKKyAgICBhdXRvIHRhc2tDb3VudGVyID0gUmVhZFJlY29yZFRhc2tD
b3VudGVyOjpjcmVhdGUoW2NhY2hlcyA9IG1ha2VSZWYobV9jYWNoZXMpLCBpZGVudGlmaWVyID0g
bV9pZGVudGlmaWVyLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShWZWN0b3I8UmVjb3Jk
PiYmIHJlY29yZHMsIFZlY3Rvcjx1aW50NjRfdD4mJiBmYWlsZWRSZWNvcmRJZGVudGlmaWVycykg
bXV0YWJsZSB7CisgICAgICAgIGF1dG8qIGNhY2hlID0gY2FjaGVzLT5maW5kKGlkZW50aWZpZXIp
OworICAgICAgICBpZiAoY2FjaGUpCisgICAgICAgICAgICBjYWNoZS0+cmVtb3ZlRnJvbVJlY29y
ZExpc3QoZmFpbGVkUmVjb3JkSWRlbnRpZmllcnMpOworICAgICAgICBjYWxsYmFjayhXVEZNb3Zl
KHJlY29yZHMpKTsKKyAgICB9KTsKKwogICAgIGlmICh1cmwuaXNOdWxsKCkpIHsKLSAgICAgICAg
VmVjdG9yPFJlY29yZD4gcmVzdWx0OwogICAgICAgICBmb3IgKGF1dG8mIHJlY29yZHMgOiBtX3Jl
Y29yZHMudmFsdWVzKCkpIHsKICAgICAgICAgICAgIGZvciAoYXV0byYgcmVjb3JkIDogcmVjb3Jk
cykKLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHRvUmVjb3JkKHJlY29yZCkpOworICAg
ICAgICAgICAgICAgIHJldHJpZXZlUmVjb3JkKHJlY29yZCwgdGFza0NvdW50ZXIpOwogICAgICAg
ICB9Ci0gICAgICAgIHN0ZDo6c29ydChyZXN1bHQuYmVnaW4oKSwgcmVzdWx0LmVuZCgpLCBbXShj
b25zdCBhdXRvJiBhLCBjb25zdCBhdXRvJiBiKSB7Ci0gICAgICAgICAgICByZXR1cm4gYS5pZGVu
dGlmaWVyIDwgYi5pZGVudGlmaWVyOwotICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGNvbnN0IGF1dG8qIHJlY29yZHMgPSBy
ZWNvcmRzRnJvbVVSTCh1cmwpOworICAgIGF1dG8qIHJlY29yZHMgPSByZWNvcmRzRnJvbVVSTCh1
cmwpOwogICAgIGlmICghcmVjb3JkcykKLSAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgcmV0
dXJuOwogCi0gICAgVmVjdG9yPFJlY29yZD4gcmVzdWx0OwotICAgIHJlc3VsdC5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KHJlY29yZHMtPnNpemUoKSk7CiAgICAgZm9yIChhdXRvJiByZWNvcmQgOiAq
cmVjb3JkcykKLSAgICAgICAgcmVzdWx0LmFwcGVuZCh0b1JlY29yZChyZWNvcmQpKTsKLSAgICBy
ZXR1cm4gcmVzdWx0OworICAgICAgICByZXRyaWV2ZVJlY29yZChyZWNvcmQsIHRhc2tDb3VudGVy
KTsKIH0KIAotc3RhdGljIGlubGluZSBTdHJpbmcgY29tcHV0ZUtleVVSTChjb25zdCBVUkwmIHVy
bCkKLXsKLSAgICBVUkwga2V5VVJMID0gdXJsOwotICAgIGlmIChrZXlVUkwuaGFzUXVlcnkoKSkK
LSAgICAgICAga2V5VVJMLnNldFF1ZXJ5KHsgfSk7Ci0gICAga2V5VVJMLnJlbW92ZUZyYWdtZW50
SWRlbnRpZmllcigpOwotICAgIHJldHVybiBrZXlVUkw7Ci19Ci0KLVJlY29yZERhdGEmIENhY2hl
OjphZGRSZWNvcmQoVmVjdG9yPFJlY29yZERhdGE+KiByZWNvcmRzLCBSZWNvcmQmJiByZWNvcmQp
CitSZWNvcmRJbmZvcm1hdGlvbiYgQ2FjaGU6OmFkZFJlY29yZChWZWN0b3I8UmVjb3JkSW5mb3Jt
YXRpb24+KiByZWNvcmRzLCBjb25zdCBSZWNvcmQmIHJlY29yZCkKIHsKICAgICBpZiAoIXJlY29y
ZHMpIHsKICAgICAgICAgYXV0byBrZXkgPSBjb21wdXRlS2V5VVJMKHJlY29yZC5yZXF1ZXN0LnVy
bCgpKTsKICAgICAgICAgQVNTRVJUKCFtX3JlY29yZHMuY29udGFpbnMoa2V5KSk7Ci0gICAgICAg
IHJlY29yZHMgPSAmbV9yZWNvcmRzLnNldChrZXksIFZlY3RvcjxSZWNvcmREYXRhPiB7IH0pLml0
ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgcmVjb3JkcyA9ICZtX3JlY29yZHMuc2V0KGtleSwgVmVj
dG9yPFJlY29yZEluZm9ybWF0aW9uPiB7IH0pLml0ZXJhdG9yLT52YWx1ZTsKICAgICB9Ci0gICAg
cmVjb3Jkcy0+YXBwZW5kKHRvUmVjb3JkRGF0YShXVEZNb3ZlKHJlY29yZCkpKTsKKyAgICByZWNv
cmRzLT5hcHBlbmQodG9SZWNvcmRJbmZvcm1hdGlvbihyZWNvcmQpKTsKICAgICByZXR1cm4gcmVj
b3Jkcy0+bGFzdCgpOwogfQogCi1WZWN0b3I8UmVjb3JkRGF0YT4qIENhY2hlOjpyZWNvcmRzRnJv
bVVSTChjb25zdCBVUkwmIHVybCkKK1ZlY3RvcjxSZWNvcmRJbmZvcm1hdGlvbj4qIENhY2hlOjpy
ZWNvcmRzRnJvbVVSTChjb25zdCBVUkwmIHVybCkKIHsKICAgICBhdXRvIGl0ZXJhdG9yID0gbV9y
ZWNvcmRzLmZpbmQoY29tcHV0ZUtleVVSTCh1cmwpKTsKICAgICBpZiAoaXRlcmF0b3IgPT0gbV9y
ZWNvcmRzLmVuZCgpKQpAQCAtMjE1LDcgKzMwNCw3IEBAIFZlY3RvcjxSZWNvcmREYXRhPiogQ2Fj
aGU6OnJlY29yZHNGcm9tVVJMKGNvbnN0IFVSTCYgdXJsKQogICAgIHJldHVybiAmaXRlcmF0b3It
PnZhbHVlOwogfQogCi1jb25zdCBWZWN0b3I8UmVjb3JkRGF0YT4qIENhY2hlOjpyZWNvcmRzRnJv
bVVSTChjb25zdCBVUkwmIHVybCkgY29uc3QKK2NvbnN0IFZlY3RvcjxSZWNvcmRJbmZvcm1hdGlv
bj4qIENhY2hlOjpyZWNvcmRzRnJvbVVSTChjb25zdCBVUkwmIHVybCkgY29uc3QKIHsKICAgICBh
dXRvIGl0ZXJhdG9yID0gbV9yZWNvcmRzLmZpbmQoY29tcHV0ZUtleVVSTCh1cmwpKTsKICAgICBp
ZiAoaXRlcmF0b3IgPT0gbV9yZWNvcmRzLmVuZCgpKQpAQCAtMjIzLDkgKzMxMiwzMCBAQCBjb25z
dCBWZWN0b3I8UmVjb3JkRGF0YT4qIENhY2hlOjpyZWNvcmRzRnJvbVVSTChjb25zdCBVUkwmIHVy
bCkgY29uc3QKICAgICByZXR1cm4gJml0ZXJhdG9yLT52YWx1ZTsKIH0KIAorY2xhc3MgQXN5bmNo
cm9ub3VzUHV0VGFza0NvdW50ZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxBc3luY2hyb25vdXNQdXRU
YXNrQ291bnRlcj4geworcHVibGljOgorICAgIHN0YXRpYyBSZWZQdHI8QXN5bmNocm9ub3VzUHV0
VGFza0NvdW50ZXI+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBBc3luY2hyb25vdXNQ
dXRUYXNrQ291bnRlcigpKTsgfQorICAgIH5Bc3luY2hyb25vdXNQdXRUYXNrQ291bnRlcigpCisg
ICAgeworICAgICAgICBpZiAoIW1fY2FsbGJhY2spCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIG1fY2FsbGJhY2soV1RGTW92ZShtX2Vycm9yKSk7CisgICAgfQorCisgICAgdm9pZCBvbkNv
bXBsZXRpb24oQ29tcGxldGlvbkNhbGxiYWNrJiYgY2FsbGJhY2spIHsgbV9jYWxsYmFjayA9IFdU
Rk1vdmUoY2FsbGJhY2spOyB9CisgICAgdm9pZCBzZXRFcnJvcihFcnJvciBlcnJvcikgeyBtX2Vy
cm9yID0gZXJyb3I7IH0KKworcHJpdmF0ZToKKyAgICBzdGQ6Om9wdGlvbmFsPEVycm9yPiBtX2Vy
cm9yOworICAgIENvbXBsZXRpb25DYWxsYmFjayBtX2NhbGxiYWNrOworfTsKKwogdm9pZCBDYWNo
ZTo6cHV0KFZlY3RvcjxSZWNvcmQ+JiYgcmVjb3JkcywgUmVjb3JkSWRlbnRpZmllcnNDYWxsYmFj
ayYmIGNhbGxiYWNrKQogewotICAgIGJvb2wgc2hvdWxkV3JpdGVSZWNvcmRMaXN0IHsgZmFsc2Ug
fTsKKyAgICBBU1NFUlQobV9zdGF0ZSA9PSBTdGF0ZTo6T3Blbik7CisKKyAgICBhdXRvIHRhc2tD
b3VudGVyID0gQXN5bmNocm9ub3VzUHV0VGFza0NvdW50ZXI6OmNyZWF0ZSgpOworCiAgICAgV2Vi
Q29yZTo6Q2FjaGVRdWVyeU9wdGlvbnMgb3B0aW9uczsKICAgICBWZWN0b3I8dWludDY0X3Q+IHJl
Y29yZElkZW50aWZpZXJzOwogICAgIHJlY29yZElkZW50aWZpZXJzLnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkocmVjb3Jkcy5zaXplKCkpOwpAQCAtMjM3LDM0ICszNDcsMjEgQEAgdm9pZCBDYWNoZTo6
cHV0KFZlY3RvcjxSZWNvcmQ+JiYgcmVjb3JkcywgUmVjb3JkSWRlbnRpZmllcnNDYWxsYmFjayYm
IGNhbGxiYWNrKQogICAgICAgICAgICAgcmVjb3JkLmlkZW50aWZpZXIgPSArK21fbmV4dFJlY29y
ZElkZW50aWZpZXI7CiAgICAgICAgICAgICByZWNvcmRJZGVudGlmaWVycy51bmNoZWNrZWRBcHBl
bmQocmVjb3JkLmlkZW50aWZpZXIpOwogCi0gICAgICAgICAgICBzaG91bGRXcml0ZVJlY29yZExp
c3QgPSB0cnVlOwotICAgICAgICAgICAgYXV0byYgcmVjb3JkVG9Xcml0ZSA9IGFkZFJlY29yZChz
YW1lVVJMUmVjb3JkcywgV1RGTW92ZShyZWNvcmQpKTsKLSAgICAgICAgICAgIHdyaXRlUmVjb3Jk
VG9EaXNrKHJlY29yZFRvV3JpdGUpOworICAgICAgICAgICAgYXV0byYgcmVjb3JkVG9Xcml0ZSA9
IGFkZFJlY29yZChzYW1lVVJMUmVjb3JkcywgcmVjb3JkKTsKKyAgICAgICAgICAgIHdyaXRlUmVj
b3JkVG9EaXNrKHJlY29yZFRvV3JpdGUsIFdURk1vdmUocmVjb3JkKSwgdGFza0NvdW50ZXIpOwog
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgYXV0byBpZGVudGlmaWVyID0gbWF0Y2hpbmdS
ZWNvcmRzWzBdOwogICAgICAgICAgICAgYXV0byBwb3NpdGlvbiA9IHNhbWVVUkxSZWNvcmRzLT5m
aW5kTWF0Y2hpbmcoWyZdKGNvbnN0IGF1dG8mIGl0ZW0pIHsgcmV0dXJuIGl0ZW0uaWRlbnRpZmll
ciA9PSBpZGVudGlmaWVyOyB9KTsKICAgICAgICAgICAgIEFTU0VSVChwb3NpdGlvbiAhPSBub3RG
b3VuZCk7CiAgICAgICAgICAgICBpZiAocG9zaXRpb24gIT0gbm90Rm91bmQpIHsKLSAgICAgICAg
ICAgICAgICBhdXRvJiBleGlzdGluZ1JlY29yZCA9ICgqc2FtZVVSTFJlY29yZHMpW3Bvc2l0aW9u
XTsKKyAgICAgICAgICAgICAgICBhdXRvJiBleGlzdGluZ1JlY29yZCA9IHNhbWVVUkxSZWNvcmRz
LT5hdChwb3NpdGlvbik7CiAgICAgICAgICAgICAgICAgcmVjb3JkSWRlbnRpZmllcnMudW5jaGVj
a2VkQXBwZW5kKGlkZW50aWZpZXIpOwotICAgICAgICAgICAgICAgICsrZXhpc3RpbmdSZWNvcmQu
dXBkYXRlUmVzcG9uc2VDb3VudGVyOwotCi0gICAgICAgICAgICAgICAgLy8gRklYTUU6IEhhbmRs
ZSB0aGUgY2FzZSB3aGVyZSBkYXRhIGlzIG51bGwuCi0gICAgICAgICAgICAgICAgQVNTRVJUKGV4
aXN0aW5nUmVjb3JkLmRhdGEpOwotICAgICAgICAgICAgICAgIGV4aXN0aW5nUmVjb3JkLmRhdGEt
PnJlc3BvbnNlSGVhZGVyc0d1YXJkID0gcmVjb3JkLnJlc3BvbnNlSGVhZGVyc0d1YXJkOwotICAg
ICAgICAgICAgICAgIGV4aXN0aW5nUmVjb3JkLmRhdGEtPnJlc3BvbnNlID0gV1RGTW92ZShyZWNv
cmQucmVzcG9uc2UpOwotICAgICAgICAgICAgICAgIGV4aXN0aW5nUmVjb3JkLmRhdGEtPnJlc3Bv
bnNlQm9keSA9IFdURk1vdmUocmVjb3JkLnJlc3BvbnNlQm9keSk7Ci0gICAgICAgICAgICAgICAg
dXBkYXRlVmFyeUluZm9ybWF0aW9uKGV4aXN0aW5nUmVjb3JkKTsKLSAgICAgICAgICAgICAgICB3
cml0ZVJlY29yZFRvRGlzayhleGlzdGluZ1JlY29yZCk7CisgICAgICAgICAgICAgICAgdXBkYXRl
UmVjb3JkVG9EaXNrKGV4aXN0aW5nUmVjb3JkLCBXVEZNb3ZlKHJlY29yZCksIHRhc2tDb3VudGVy
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAotICAgIGlmICghc2hvdWxkV3Jp
dGVSZWNvcmRMaXN0KSB7Ci0gICAgICAgIGNhbGxiYWNrKFdURk1vdmUocmVjb3JkSWRlbnRpZmll
cnMpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICB3cml0ZVJlY29yZHNMaXN0KFtjYWxs
YmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCByZWNvcmRJZGVudGlmaWVycyA9IFdURk1vdmUocmVj
b3JkSWRlbnRpZmllcnMpXShzdGQ6Om9wdGlvbmFsPEVycm9yPiYmIGVycm9yKSBtdXRhYmxlIHsK
KyAgICB0YXNrQ291bnRlci0+b25Db21wbGV0aW9uKFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJh
Y2spLCByZWNvcmRJZGVudGlmaWVycyA9IFdURk1vdmUocmVjb3JkSWRlbnRpZmllcnMpXShzdGQ6
Om9wdGlvbmFsPEVycm9yPiYmIGVycm9yKSBtdXRhYmxlIHsKICAgICAgICAgaWYgKGVycm9yKSB7
CiAgICAgICAgICAgICBjYWxsYmFjayhtYWtlVW5leHBlY3RlZChlcnJvci52YWx1ZSgpKSk7CiAg
ICAgICAgICAgICByZXR1cm47CkBAIC0yNzUsNiArMzcyLDggQEAgdm9pZCBDYWNoZTo6cHV0KFZl
Y3RvcjxSZWNvcmQ+JiYgcmVjb3JkcywgUmVjb3JkSWRlbnRpZmllcnNDYWxsYmFjayYmIGNhbGxi
YWNrKQogCiB2b2lkIENhY2hlOjpyZW1vdmUoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYgcmVx
dWVzdCwgV2ViQ29yZTo6Q2FjaGVRdWVyeU9wdGlvbnMmJiBvcHRpb25zLCBSZWNvcmRJZGVudGlm
aWVyc0NhbGxiYWNrJiYgY2FsbGJhY2spCiB7CisgICAgQVNTRVJUKG1fc3RhdGUgPT0gU3RhdGU6
Ok9wZW4pOworCiAgICAgYXV0byogcmVjb3JkcyA9IHJlY29yZHNGcm9tVVJMKHJlcXVlc3QudXJs
KCkpOwogICAgIGF1dG8gcmVjb3JkSWRlbnRpZmllcnMgPSBxdWVyeUNhY2hlKHJlY29yZHMsIHJl
cXVlc3QsIG9wdGlvbnMpOwogICAgIGlmIChyZWNvcmRJZGVudGlmaWVycy5pc0VtcHR5KCkpIHsK
QEAgLTI4OSwzNSArMzg4LDE1NiBAQCB2b2lkIENhY2hlOjpyZW1vdmUoV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0JiYgcmVxdWVzdCwgV2ViQ29yZTo6Q2FjaGVRdWVyeU9wdGlvbgogICAgICAgICBy
ZXR1cm4gc2hvdWxkUmVtb3ZlOwogICAgIH0pOwogCi0gICAgd3JpdGVSZWNvcmRzTGlzdChbY2Fs
bGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgcmVjb3JkSWRlbnRpZmllcnMgPSBXVEZNb3ZlKHJl
Y29yZElkZW50aWZpZXJzKV0oc3RkOjpvcHRpb25hbDxFcnJvcj4mJiBlcnJvcikgbXV0YWJsZSB7
Ci0gICAgICAgIGlmIChlcnJvcikgewotICAgICAgICAgICAgY2FsbGJhY2sobWFrZVVuZXhwZWN0
ZWQoZXJyb3IudmFsdWUoKSkpOworICAgIGNhbGxiYWNrKFdURk1vdmUocmVjb3JkSWRlbnRpZmll
cnMpKTsKK30KKwordm9pZCBDYWNoZTo6cmVtb3ZlRnJvbVJlY29yZExpc3QoY29uc3QgVmVjdG9y
PHVpbnQ2NF90PiYgcmVjb3JkSWRlbnRpZmllcnMpCit7CisgICAgaWYgKHJlY29yZElkZW50aWZp
ZXJzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChhdXRvJiByZWNvcmRz
IDogbV9yZWNvcmRzLnZhbHVlcygpKSB7CisgICAgICAgIHJlY29yZHMucmVtb3ZlQWxsTWF0Y2hp
bmcoW2NhY2hlID0gdGhpcywgJnJlY29yZElkZW50aWZpZXJzXShjb25zdCBhdXRvJiBpdGVtKSB7
CisgICAgICAgICAgICByZXR1cm4gbm90Rm91bmQgIT0gcmVjb3JkSWRlbnRpZmllcnMuZmluZE1h
dGNoaW5nKFtjYWNoZSwgJml0ZW1dKGNvbnN0IGF1dG8mIGlkZW50aWZpZXIpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoaXRlbS5pZGVudGlmaWVyICE9IGlkZW50aWZpZXIpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBjYWNoZS0+cmVtb3ZlUmVjb3Jk
RnJvbURpc2soaXRlbSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAg
ICB9KTsKKyAgICAgICAgfSk7CisgICAgfQorfQorCit2b2lkIENhY2hlOjp3cml0ZVJlY29yZFRv
RGlzayhjb25zdCBSZWNvcmRJbmZvcm1hdGlvbiYgcmVjb3JkSW5mb3JtYXRpb24sIFJlY29yZCYm
IHJlY29yZCwgY29uc3QgUmVmUHRyPEFzeW5jaHJvbm91c1B1dFRhc2tDb3VudGVyPiYgY291bnRl
cikKK3sKKyAgICBtX2NhY2hlcy53cml0ZVJlY29yZCgqdGhpcywgcmVjb3JkSW5mb3JtYXRpb24s
IFdURk1vdmUocmVjb3JkKSwgW2NvdW50ZXJdKHN0ZDo6b3B0aW9uYWw8RXJyb3I+JiYgZXJyb3Ip
IHsKKyAgICAgICAgQVNTRVJUKCFlcnJvcik7CisgICAgfSk7Cit9CisKK3ZvaWQgQ2FjaGU6OnVw
ZGF0ZVJlY29yZFRvRGlzayhSZWNvcmRJbmZvcm1hdGlvbiYgZXhpc3RpbmdSZWNvcmQsIFJlY29y
ZCYmIHJlY29yZCwgY29uc3QgUmVmUHRyPEFzeW5jaHJvbm91c1B1dFRhc2tDb3VudGVyPiYgdGFz
a0NvdW50ZXIpCit7CisgICAgKytleGlzdGluZ1JlY29yZC51cGRhdGVSZXNwb25zZUNvdW50ZXI7
CisgICAgcmVhZFJlY29yZEZyb21EaXNrKGV4aXN0aW5nUmVjb3JkLCBbY2FjaGVzID0gbWFrZVJl
ZihtX2NhY2hlcyksIGlkZW50aWZpZXIgPSBtX2lkZW50aWZpZXIsIHJlY29yZElkZW50aWZpZXIg
PSBleGlzdGluZ1JlY29yZC5pZGVudGlmaWVyLCByZWNvcmQgPSBXVEZNb3ZlKHJlY29yZCksIHRh
c2tDb3VudGVyXShFeHBlY3RlZDxSZWNvcmQsIEVycm9yPiYmIHJlc3VsdCkgbXV0YWJsZSB7Cisg
ICAgICAgIGlmICghcmVzdWx0Lmhhc1ZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLSAgICAgICAgY2FsbGJhY2soV1RGTW92ZShyZWNvcmRJZGVudGlmaWVycykpOworCisg
ICAgICAgIGF1dG8qIGNhY2hlID0gY2FjaGVzLT5maW5kKGlkZW50aWZpZXIpOworICAgICAgICBp
ZiAoIWNhY2hlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGF1dG8qIHNhbWVVUkxS
ZWNvcmRzID0gY2FjaGUtPnJlY29yZHNGcm9tVVJMKHJlc3VsdC52YWx1ZSgpLnJlcXVlc3QudXJs
KCkpOworICAgICAgICBpZiAoIXNhbWVVUkxSZWNvcmRzKQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIGF1dG8gcG9zaXRpb24gPSBzYW1lVVJMUmVjb3Jkcy0+ZmluZE1hdGNoaW5nKFsm
XSAoY29uc3QgYXV0byYgaXRlbSkgeyByZXR1cm4gaXRlbS5pZGVudGlmaWVyID09IHJlY29yZElk
ZW50aWZpZXI7IH0pOworICAgICAgICBpZiAocG9zaXRpb24gPT0gbm90Rm91bmQpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIGF1dG8mIHJlY29yZEluZm8gPSBzYW1lVVJMUmVjb3Jkcy0+
YXQocG9zaXRpb24pOworCisgICAgICAgIGF1dG8mIHJlY29yZEZyb21EaXNrID0gcmVzdWx0LnZh
bHVlKCk7CisgICAgICAgIHJlY29yZC5yZXF1ZXN0SGVhZGVyc0d1YXJkID0gcmVjb3JkRnJvbURp
c2sucmVxdWVzdEhlYWRlcnNHdWFyZDsKKyAgICAgICAgcmVjb3JkLnJlcXVlc3QgPSBXVEZNb3Zl
KHJlY29yZEZyb21EaXNrLnJlcXVlc3QpOworICAgICAgICByZWNvcmQub3B0aW9ucyA9IFdURk1v
dmUocmVjb3JkRnJvbURpc2sub3B0aW9ucyk7CisgICAgICAgIHJlY29yZC5yZWZlcnJlciA9IFdU
Rk1vdmUocmVjb3JkRnJvbURpc2sucmVmZXJyZXIpOworCisgICAgICAgIHVwZGF0ZVZhcnlJbmZv
cm1hdGlvbihyZWNvcmRJbmZvLCByZWNvcmQucmVxdWVzdCwgcmVjb3JkLnJlc3BvbnNlKTsKKwor
ICAgICAgICBjYWNoZS0+d3JpdGVSZWNvcmRUb0Rpc2socmVjb3JkSW5mbywgV1RGTW92ZShyZWNv
cmQpLCB0YXNrQ291bnRlcik7CiAgICAgfSk7CiB9CiAKLXZvaWQgQ2FjaGU6OnJlYWRSZWNvcmRz
TGlzdChDb21wbGV0aW9uQ2FsbGJhY2smJiBjYWxsYmFjaykKK3ZvaWQgQ2FjaGU6OnJlYWRSZWNv
cmRGcm9tRGlzayhjb25zdCBSZWNvcmRJbmZvcm1hdGlvbiYgcmVjb3JkLCBXVEY6OkZ1bmN0aW9u
PHZvaWQoRXhwZWN0ZWQ8UmVjb3JkLCBFcnJvcj4mJik+JiYgY2FsbGJhY2spCiB7Ci0gICAgLy8g
RklYTUU6IEltcGxlbWVudCB0aGlzLgotICAgIGNhbGxiYWNrKHN0ZDo6bnVsbG9wdCk7CisgICAg
bV9jYWNoZXMucmVhZFJlY29yZChyZWNvcmQua2V5LCBXVEZNb3ZlKGNhbGxiYWNrKSk7CiB9CiAK
LXZvaWQgQ2FjaGU6OndyaXRlUmVjb3Jkc0xpc3QoQ29tcGxldGlvbkNhbGxiYWNrJiYgY2FsbGJh
Y2spCit2b2lkIENhY2hlOjpyZW1vdmVSZWNvcmRGcm9tRGlzayhjb25zdCBSZWNvcmRJbmZvcm1h
dGlvbiYgcmVjb3JkKQogewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KLSAgICBjYWxs
YmFjayhzdGQ6Om51bGxvcHQpOworICAgIG1fY2FjaGVzLnJlbW92ZVJlY29yZChyZWNvcmQua2V5
KTsKIH0KIAotdm9pZCBDYWNoZTo6d3JpdGVSZWNvcmRUb0Rpc2soUmVjb3JkRGF0YSYpCitTdG9y
YWdlOjpSZWNvcmQgQ2FjaGU6OmVuY29kZShjb25zdCBSZWNvcmRJbmZvcm1hdGlvbiYgcmVjb3Jk
SW5mb3JtYXRpb24sIGNvbnN0IFJlY29yZCYgcmVjb3JkKQogewotICAgIC8vIEZJWE1FOiBJbXBs
ZW1lbnQgdGhpcy4KKyAgICBXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyIGVuY29kZXI7CisgICAg
ZW5jb2RlciA8PCByZWNvcmRJbmZvcm1hdGlvbi5pbnNlcnRpb25UaW1lOworICAgIGVuY29kZXIg
PDwgcmVjb3JkLnJlcXVlc3RIZWFkZXJzR3VhcmQ7CisgICAgcmVjb3JkLnJlcXVlc3QuZW5jb2Rl
V2l0aG91dFBsYXRmb3JtRGF0YShlbmNvZGVyKTsKKyAgICBlbmNvZGVyIDw8IHJlY29yZC5vcHRp
b25zOworICAgIGVuY29kZXIgPDwgcmVjb3JkLnJlZmVycmVyOworCisgICAgZW5jb2RlciA8PCBy
ZWNvcmQucmVzcG9uc2VIZWFkZXJzR3VhcmQ7CisgICAgZW5jb2RlciA8PCByZWNvcmQucmVzcG9u
c2U7CisKKyAgICBlbmNvZGVyLmVuY29kZUNoZWNrc3VtKCk7CisKKyAgICBEYXRhIGhlYWRlcihl
bmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7CisgICAgRGF0YSBib2R5Owor
ICAgIFdURjo6c3dpdGNoT24ocmVjb3JkLnJlc3BvbnNlQm9keSwgW10oY29uc3QgUmVmPFdlYkNv
cmU6OkZvcm1EYXRhPiYgZm9ybURhdGEpIHsKKyAgICAgICAgLy8gRklYTUU6IFN0b3JlIGZvcm0g
ZGF0YSBib2R5LgorICAgIH0sIFsmXShjb25zdCBSZWY8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiYg
YnVmZmVyKSB7CisgICAgICAgIGJvZHkgPSB7IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhf
dCo+KGJ1ZmZlci0+ZGF0YSgpKSwgYnVmZmVyLT5zaXplKCkgfTsKKyAgICB9LCBbXShjb25zdCBz
dGQ6Om51bGxwdHJfdCYpIHsKKyAgICB9KTsKKworICAgIHJldHVybiB7IHJlY29yZEluZm9ybWF0
aW9uLmtleSwgeyB9LCBoZWFkZXIsIGJvZHksIHsgfSB9OwogfQogCi12b2lkIENhY2hlOjpyZW1v
dmVSZWNvcmRGcm9tRGlzayhSZWNvcmREYXRhJikKK3N0YXRpYyBpbmxpbmUgc3RkOjpvcHRpb25h
bDxzdGQ6OnBhaXI8UmVjb3JkLCBkb3VibGU+PiBkZWNvZGVSZWNvcmRIZWFkZXIoY29uc3QgU3Rv
cmFnZTo6UmVjb3JkJiBzdG9yYWdlKQogewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4K
KyAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIoc3RvcmFnZS5oZWFkZXIuZGF0
YSgpLCBzdG9yYWdlLmhlYWRlci5zaXplKCkpOworCisgICAgUmVjb3JkIHJlY29yZDsKKworICAg
IGRvdWJsZSBpbnNlcnRpb25UaW1lOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaW5zZXJ0aW9u
VGltZSkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKHJlY29yZC5yZXF1ZXN0SGVhZGVyc0d1YXJkKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKKworICAgIGlmICghcmVjb3JkLnJlcXVlc3QuZGVjb2RlV2l0aG91dFBsYXRmb3Jt
RGF0YShkZWNvZGVyKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUocmVjb3JkLm9wdGlvbnMpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZWNvcmQucmVmZXJyZXIpKQorICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZWNvcmQu
cmVzcG9uc2VIZWFkZXJzR3VhcmQpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZWNvcmQucmVzcG9uc2UpKQorICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworCisgICAgaWYgKCFkZWNvZGVyLnZlcmlmeUNoZWNrc3VtKCkpCisgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoV1RG
TW92ZShyZWNvcmQpLCBpbnNlcnRpb25UaW1lKTsKK30KKworc3RkOjpvcHRpb25hbDxSZWNvcmQ+
IENhY2hlOjpkZWNvZGUoY29uc3QgU3RvcmFnZTo6UmVjb3JkJiBzdG9yYWdlKQoreworICAgIGF1
dG8gcmVzdWx0ID0gZGVjb2RlUmVjb3JkSGVhZGVyKHN0b3JhZ2UpOworCisgICAgaWYgKCFyZXN1
bHQpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBhdXRvIHJlY29yZCA9IFdU
Rk1vdmUocmVzdWx0LT5maXJzdCk7CisgICAgcmVjb3JkLnJlc3BvbnNlQm9keSA9IFdlYkNvcmU6
OlNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKHN0b3JhZ2UuYm9keS5kYXRhKCksIHN0b3JhZ2UuYm9keS5z
aXplKCkpOworCisgICAgcmV0dXJuIFdURk1vdmUocmVjb3JkKTsKK30KKworVmVjdG9yPEtleT4g
Q2FjaGU6OmtleXMoKSBjb25zdAoreworICAgIFZlY3RvcjxLZXk+IGtleXM7CisgICAgZm9yIChh
dXRvJiByZWNvcmRzIDogbV9yZWNvcmRzLnZhbHVlcygpKSB7CisgICAgICAgIGZvciAoYXV0byYg
cmVjb3JkIDogcmVjb3JkcykKKyAgICAgICAgICAgIGtleXMuYXBwZW5kKHJlY29yZC5rZXkpOwor
ICAgIH0KKyAgICByZXR1cm4ga2V5czsKIH0KIAogfSAvLyBuYW1lc3BhY2UgQ2FjaGVTdG9yYWdl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3Rv
cmFnZUVuZ2luZUNhY2hlLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0Nh
Y2hlU3RvcmFnZUVuZ2luZUNhY2hlLmgKaW5kZXggYzlmMGQ4MGU1NGI3NmUyMDQyZTEzYzllNDA1
YzlkNTUyNzNkMTI2NS4uNTlhMDZhZGQyY2Y3ZjA3YzViNWE0ZjMwNjVlNTU5NTFlYWRmY2I5YSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3Jh
Z2VFbmdpbmVDYWNoZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUv
Q2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUuaApAQCAtMjUsNyArMjUsNyBAQAogCiAjcHJhZ21hIG9u
Y2UKIAotI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUtleS5oIgorI2luY2x1ZGUgIk5ldHdvcmtDYWNo
ZVN0b3JhZ2UuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0RPTUNhY2hlRW5naW5lLmg+CiAjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtMzYs
NyArMzYsNyBAQCBuYW1lc3BhY2UgQ2FjaGVTdG9yYWdlIHsKIAogY2xhc3MgQ2FjaGVzOwogCi1z
dHJ1Y3QgUmVjb3JkRGF0YSB7CitzdHJ1Y3QgUmVjb3JkSW5mb3JtYXRpb24gewogICAgIE5ldHdv
cmtDYWNoZTo6S2V5IGtleTsKICAgICBkb3VibGUgaW5zZXJ0aW9uVGltZSB7IDAgfTsKIApAQCAt
NDYsNTggKzQ2LDYxIEBAIHN0cnVjdCBSZWNvcmREYXRhIHsKICAgICBXZWJDb3JlOjpVUkwgdXJs
OwogICAgIGJvb2wgaGFzVmFyeVN0YXIgeyBmYWxzZSB9OwogICAgIEhhc2hNYXA8U3RyaW5nLCBT
dHJpbmc+IHZhcnlIZWFkZXJzOwotCi0gICAgc3RydWN0IERhdGEgewotICAgICAgICBXZWJDb3Jl
OjpGZXRjaEhlYWRlcnM6Okd1YXJkIHJlcXVlc3RIZWFkZXJzR3VhcmQ7Ci0gICAgICAgIFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdCByZXF1ZXN0OwotICAgICAgICBXZWJDb3JlOjpGZXRjaE9wdGlv
bnMgb3B0aW9uczsKLSAgICAgICAgU3RyaW5nIHJlZmVycmVyOwotCi0gICAgICAgIFdlYkNvcmU6
OkZldGNoSGVhZGVyczo6R3VhcmQgcmVzcG9uc2VIZWFkZXJzR3VhcmQ7Ci0gICAgICAgIFdlYkNv
cmU6OlJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2U7Ci0gICAgICAgIFdlYkNvcmU6OkRPTUNhY2hl
RW5naW5lOjpSZXNwb25zZUJvZHkgcmVzcG9uc2VCb2R5OwotICAgIH07Ci0KLSAgICBzdGQ6Om9w
dGlvbmFsPERhdGE+IGRhdGE7CiB9OwogCitjbGFzcyBBc3luY2hyb25vdXNQdXRUYXNrQ291bnRl
cjsKK2NsYXNzIFJlYWRSZWNvcmRUYXNrQ291bnRlcjsKKwogY2xhc3MgQ2FjaGUgewogcHVibGlj
OgogICAgIGVudW0gY2xhc3MgU3RhdGUgeyBVbmluaXRpYWxpemVkLCBPcGVuaW5nLCBPcGVuIH07
Ci0gICAgQ2FjaGUoQ2FjaGVzJiwgdWludDY0X3QgaWRlbnRpZmllciwgU3RhdGUsIFN0cmluZyYm
IG5hbWUpOworICAgIENhY2hlKENhY2hlcyYsIHVpbnQ2NF90IGlkZW50aWZpZXIsIFN0YXRlLCBT
dHJpbmcmJiBuYW1lLCBTdHJpbmcmJiB1bmlxdWVOYW1lKTsKIAorICAgIGJvb2wgaXNPcGVuZWQo
KSBjb25zdCB7IHJldHVybiBtX3N0YXRlID09IFN0YXRlOjpPcGVuOyB9CiAgICAgdm9pZCBvcGVu
KFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpDb21wbGV0aW9uQ2FsbGJhY2smJik7CiAKICAgICB1
aW50NjRfdCBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyOyB9CiAgICAg
Y29uc3QgU3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CisgICAgY29uc3Qg
U3RyaW5nJiB1bmlxdWVOYW1lKCkgY29uc3QgeyByZXR1cm4gbV91bmlxdWVOYW1lOyB9CiAgICAg
Ym9vbCBpc0FjdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgIT0gU3RhdGU6OlVuaW5pdGlh
bGl6ZWQ7IH0KIAotICAgIFZlY3RvcjxXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6UmVjb3JkPiBy
ZXRyaWV2ZVJlY29yZHMoY29uc3QgV2ViQ29yZTo6VVJMJikgY29uc3Q7CisgICAgdm9pZCByZXRy
aWV2ZVJlY29yZHMoY29uc3QgV2ViQ29yZTo6VVJMJiwgV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6
OlJlY29yZHNDYWxsYmFjayYmKTsKICAgICBXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6Q2FjaGVJ
bmZvIGluZm8oKSBjb25zdCB7IHJldHVybiB7IG1faWRlbnRpZmllciwgbV9uYW1lIH07IH0KIAog
ICAgIHZvaWQgcHV0KFZlY3RvcjxXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6UmVjb3JkPiYmLCBX
ZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6UmVjb3JkSWRlbnRpZmllcnNDYWxsYmFjayYmKTsKICAg
ICB2b2lkIHJlbW92ZShXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJiwgV2ViQ29yZTo6Q2FjaGVR
dWVyeU9wdGlvbnMmJiwgV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OlJlY29yZElkZW50aWZpZXJz
Q2FsbGJhY2smJik7CiAKKyAgICBWZWN0b3I8TmV0d29ya0NhY2hlOjpLZXk+IGtleXMoKSBjb25z
dDsKKwogICAgIHZvaWQgZGlzcG9zZSgpOwogICAgIHZvaWQgY2xlYXJNZW1vcnlSZXByZXNlbnRh
dGlvbigpOwotIAorCisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6RE9NQ2FjaGVF
bmdpbmU6OlJlY29yZD4gZGVjb2RlKGNvbnN0IE5ldHdvcmtDYWNoZTo6U3RvcmFnZTo6UmVjb3Jk
Jik7CisgICAgc3RhdGljIE5ldHdvcmtDYWNoZTo6U3RvcmFnZTo6UmVjb3JkIGVuY29kZShjb25z
dCBSZWNvcmRJbmZvcm1hdGlvbiYsIGNvbnN0IFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpSZWNv
cmQmKTsKKwogcHJpdmF0ZToKLSAgICBWZWN0b3I8UmVjb3JkRGF0YT4qIHJlY29yZHNGcm9tVVJM
KGNvbnN0IFdlYkNvcmU6OlVSTCYpOwotICAgIGNvbnN0IFZlY3RvcjxSZWNvcmREYXRhPiogcmVj
b3Jkc0Zyb21VUkwoY29uc3QgV2ViQ29yZTo6VVJMJikgY29uc3Q7Ci0gICAgUmVjb3JkRGF0YSYg
YWRkUmVjb3JkKFZlY3RvcjxSZWNvcmREYXRhPiosIFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpS
ZWNvcmQmJik7CisgICAgVmVjdG9yPFJlY29yZEluZm9ybWF0aW9uPiogcmVjb3Jkc0Zyb21VUkwo
Y29uc3QgV2ViQ29yZTo6VVJMJik7CisgICAgY29uc3QgVmVjdG9yPFJlY29yZEluZm9ybWF0aW9u
PiogcmVjb3Jkc0Zyb21VUkwoY29uc3QgV2ViQ29yZTo6VVJMJikgY29uc3Q7CisgICAgUmVjb3Jk
SW5mb3JtYXRpb24mIGFkZFJlY29yZChWZWN0b3I8UmVjb3JkSW5mb3JtYXRpb24+KiwgY29uc3Qg
V2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OlJlY29yZCYpOworCisgICAgUmVjb3JkSW5mb3JtYXRp
b24gdG9SZWNvcmRJbmZvcm1hdGlvbihjb25zdCBXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6UmVj
b3JkJik7CiAKICAgICB2b2lkIGZpbmlzaE9wZW5pbmcoV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6
OkNvbXBsZXRpb25DYWxsYmFjayYmLCBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkRPTUNhY2hlRW5n
aW5lOjpFcnJvcj4mJik7CisgICAgdm9pZCByZXRyaWV2ZVJlY29yZChjb25zdCBSZWNvcmRJbmZv
cm1hdGlvbiYsIFJlZlB0cjxSZWFkUmVjb3JkVGFza0NvdW50ZXI+Jik7CiAKICAgICB2b2lkIHJl
YWRSZWNvcmRzTGlzdChXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6Q29tcGxldGlvbkNhbGxiYWNr
JiYpOwotICAgIHZvaWQgd3JpdGVSZWNvcmRzTGlzdChXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6
Q29tcGxldGlvbkNhbGxiYWNrJiYpOwotICAgIHZvaWQgd3JpdGVSZWNvcmRUb0Rpc2soUmVjb3Jk
RGF0YSYpOwotICAgIHZvaWQgcmVtb3ZlUmVjb3JkRnJvbURpc2soUmVjb3JkRGF0YSYpOworICAg
IHZvaWQgd3JpdGVSZWNvcmRUb0Rpc2soY29uc3QgUmVjb3JkSW5mb3JtYXRpb24mLCBXZWJDb3Jl
OjpET01DYWNoZUVuZ2luZTo6UmVjb3JkJiYsIGNvbnN0IFJlZlB0cjxBc3luY2hyb25vdXNQdXRU
YXNrQ291bnRlcj4mKTsKKyAgICB2b2lkIHVwZGF0ZVJlY29yZFRvRGlzayhSZWNvcmRJbmZvcm1h
dGlvbiYsIFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpSZWNvcmQmJiwgY29uc3QgUmVmUHRyPEFz
eW5jaHJvbm91c1B1dFRhc2tDb3VudGVyPiYpOworICAgIHZvaWQgcmVtb3ZlUmVjb3JkRnJvbURp
c2soY29uc3QgUmVjb3JkSW5mb3JtYXRpb24mKTsKKyAgICB2b2lkIHJlYWRSZWNvcmRGcm9tRGlz
ayhjb25zdCBSZWNvcmRJbmZvcm1hdGlvbiYsIFdURjo6RnVuY3Rpb248dm9pZChFeHBlY3RlZDxX
ZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6UmVjb3JkLCBXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6
RXJyb3I+JiYpPiYmKTsKKyAgICB2b2lkIHJlbW92ZUZyb21SZWNvcmRMaXN0KGNvbnN0IFZlY3Rv
cjx1aW50NjRfdD4mKTsKIAogICAgIENhY2hlcyYgbV9jYWNoZXM7CiAgICAgU3RhdGUgbV9zdGF0
ZTsKICAgICB1aW50NjRfdCBtX2lkZW50aWZpZXIgeyAwIH07CiAgICAgU3RyaW5nIG1fbmFtZTsK
LSAgICBIYXNoTWFwPFN0cmluZywgVmVjdG9yPFJlY29yZERhdGE+PiBtX3JlY29yZHM7CisgICAg
U3RyaW5nIG1fdW5pcXVlTmFtZTsKKyAgICBIYXNoTWFwPFN0cmluZywgVmVjdG9yPFJlY29yZElu
Zm9ybWF0aW9uPj4gbV9yZWNvcmRzOwogICAgIHVpbnQ2NF90IG1fbmV4dFJlY29yZElkZW50aWZp
ZXIgeyAwIH07CiAgICAgVmVjdG9yPFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpDb21wbGV0aW9u
Q2FsbGJhY2s+IG1fcGVuZGluZ09wZW5pbmdDYWxsYmFja3M7CiB9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMu
Y3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdp
bmVDYWNoZXMuY3BwCmluZGV4IGIzMWUyODk3N2RlZDFjNDcwYzY5Njk1YjAzOGNiYjQ1YzRhM2Y1
YzcuLjIwN2I3ZDZmZDZhYTgyMjUxNWZjNjY2MjI4ZjE5MjgzZTQwNDNlM2IgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2Fj
aGVzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3Rv
cmFnZUVuZ2luZUNhY2hlcy5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJDYWNoZVN0
b3JhZ2VFbmdpbmUuaCIKIAogI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUNvZGVycy5oIgorI2luY2x1
ZGUgPHd0Zi9VVUlELmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiB1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU7CkBAIC01OSw3ICs2MCwxNCBA
QCBDYWNoZXM6OkNhY2hlcyhFbmdpbmUmIGVuZ2luZSwgU3RyaW5nJiYgb3JpZ2luKQogCiB2b2lk
IENhY2hlczo6aW5pdGlhbGl6ZShXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6Q29tcGxldGlvbkNh
bGxiYWNrJiYgY2FsbGJhY2spCiB7Ci0gICAgaWYgKG1faXNJbml0aWFsaXplZCB8fCBtX3Jvb3RQ
YXRoLmlzTnVsbCgpKSB7CisgICAgaWYgKG1faXNJbml0aWFsaXplZCkgeworICAgICAgICBjYWxs
YmFjayhzdGQ6Om51bGxvcHQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1f
cm9vdFBhdGguaXNOdWxsKCkpIHsKKyAgICAgICAgbWFrZURpcnR5KCk7CisgICAgICAgIG1faXNJ
bml0aWFsaXplZCA9IHRydWU7CiAgICAgICAgIGNhbGxiYWNrKHN0ZDo6bnVsbG9wdCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CkBAIC03NSw2ICs4Myw3IEBAIHZvaWQgQ2FjaGVzOjppbml0aWFs
aXplKFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpDb21wbGV0aW9uQ2FsbGJhY2smJiBjYWxsYmFj
aykKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBtX3N0b3JhZ2UgPSBzdG9yYWdlLnJlbGVh
c2VOb25OdWxsKCk7CisgICAgbV9zdG9yYWdlLT53cml0ZVdpdGhvdXRXYWl0aW5nKCk7CiAgICAg
cmVhZENhY2hlc0Zyb21EaXNrKFt0aGlzLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShF
eHBlY3RlZDxWZWN0b3I8Q2FjaGU+LCBFcnJvcj4mJiByZXN1bHQpIHsKICAgICAgICAgbWFrZURp
cnR5KCk7CiAKQEAgLTEyMCw3ICsxMjksOSBAQCBDYWNoZSogQ2FjaGVzOjpmaW5kKHVpbnQ2NF90
IGlkZW50aWZpZXIpCiAKIHZvaWQgQ2FjaGVzOjpvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgQ2Fj
aGVJZGVudGlmaWVyQ2FsbGJhY2smJiBjYWxsYmFjaykKIHsKKyAgICBBU1NFUlQobV9pc0luaXRp
YWxpemVkKTsKICAgICBBU1NFUlQobV9lbmdpbmUpOworCiAgICAgaWYgKGF1dG8qIGNhY2hlID0g
ZmluZChuYW1lKSkgewogICAgICAgICBjYWNoZS0+b3BlbihbY2FjaGVJZGVudGlmaWVyID0gY2Fj
aGUtPmlkZW50aWZpZXIoKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oc3RkOjpvcHRp
b25hbDxFcnJvcj4mJiBlcnJvcikgbXV0YWJsZSB7CiAgICAgICAgICAgICBpZiAoZXJyb3IpIHsK
QEAgLTEzNSw3ICsxNDYsNyBAQCB2b2lkIENhY2hlczo6b3Blbihjb25zdCBTdHJpbmcmIG5hbWUs
IENhY2hlSWRlbnRpZmllckNhbGxiYWNrJiYgY2FsbGJhY2spCiAgICAgbWFrZURpcnR5KCk7CiAK
ICAgICB1aW50NjRfdCBjYWNoZUlkZW50aWZpZXIgPSBtX2VuZ2luZS0+bmV4dENhY2hlSWRlbnRp
ZmllcigpOwotICAgIG1fY2FjaGVzLmFwcGVuZChDYWNoZSB7ICp0aGlzLCBjYWNoZUlkZW50aWZp
ZXIsIENhY2hlOjpTdGF0ZTo6T3BlbiwgU3RyaW5nIHsgbmFtZSB9IH0pOworICAgIG1fY2FjaGVz
LmFwcGVuZChDYWNoZSB7ICp0aGlzLCBjYWNoZUlkZW50aWZpZXIsIENhY2hlOjpTdGF0ZTo6T3Bl
biwgU3RyaW5nIHsgbmFtZSB9LCBjcmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCkgfSk7CiAKICAg
ICB3cml0ZUNhY2hlc1RvRGlzayhbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgY2FjaGVJ
ZGVudGlmaWVyXShzdGQ6Om9wdGlvbmFsPEVycm9yPiYmIGVycm9yKSBtdXRhYmxlIHsKICAgICAg
ICAgY2FsbGJhY2soQ2FjaGVJZGVudGlmaWVyT3BlcmF0aW9uUmVzdWx0IHsgY2FjaGVJZGVudGlm
aWVyLCAhIWVycm9yIH0pOwpAQCAtMTQ0LDYgKzE1NSw3IEBAIHZvaWQgQ2FjaGVzOjpvcGVuKGNv
bnN0IFN0cmluZyYgbmFtZSwgQ2FjaGVJZGVudGlmaWVyQ2FsbGJhY2smJiBjYWxsYmFjaykKIAog
dm9pZCBDYWNoZXM6OnJlbW92ZSh1aW50NjRfdCBpZGVudGlmaWVyLCBDYWNoZUlkZW50aWZpZXJD
YWxsYmFjayYmIGNhbGxiYWNrKQogeworICAgIEFTU0VSVChtX2lzSW5pdGlhbGl6ZWQpOwogICAg
IEFTU0VSVChtX2VuZ2luZSk7CiAKICAgICBhdXRvIHBvc2l0aW9uID0gbV9jYWNoZXMuZmluZE1h
dGNoaW5nKFsmXShjb25zdCBhdXRvJiBpdGVtKSB7IHJldHVybiBpdGVtLmlkZW50aWZpZXIoKSA9
PSBpZGVudGlmaWVyOyB9KTsKQEAgLTE2OCw2ICsxODAsOSBAQCB2b2lkIENhY2hlczo6ZGlzcG9z
ZShDYWNoZSYgY2FjaGUpCiB7CiAgICAgYXV0byBwb3NpdGlvbiA9IG1fcmVtb3ZlZENhY2hlcy5m
aW5kTWF0Y2hpbmcoWyZdKGNvbnN0IGF1dG8mIGl0ZW0pIHsgcmV0dXJuIGl0ZW0uaWRlbnRpZmll
cigpID09IGNhY2hlLmlkZW50aWZpZXIoKTsgfSk7CiAgICAgaWYgKHBvc2l0aW9uICE9IG5vdEZv
dW5kKSB7CisgICAgICAgIGlmIChtX3N0b3JhZ2UpCisgICAgICAgICAgICBtX3N0b3JhZ2UtPnJl
bW92ZShjYWNoZS5rZXlzKCksIHsgfSk7CisKICAgICAgICAgbV9yZW1vdmVkQ2FjaGVzLnJlbW92
ZShwb3NpdGlvbik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xODQsMTMgKzE5OSwxNSBA
QCBzdGF0aWMgaW5saW5lIERhdGEgZW5jb2RlQ2FjaGVOYW1lcyhjb25zdCBWZWN0b3I8Q2FjaGU+
JiBjYWNoZXMpCiAKICAgICB1aW50NjRfdCBzaXplID0gY2FjaGVzLnNpemUoKTsKICAgICBlbmNv
ZGVyIDw8IHNpemU7Ci0gICAgZm9yIChhdXRvJiBjYWNoZSA6IGNhY2hlcykKKyAgICBmb3IgKGF1
dG8mIGNhY2hlIDogY2FjaGVzKSB7CiAgICAgICAgIGVuY29kZXIgPDwgY2FjaGUubmFtZSgpOwor
ICAgICAgICBlbmNvZGVyIDw8IGNhY2hlLnVuaXF1ZU5hbWUoKTsKKyAgICB9CiAKICAgICByZXR1
cm4gRGF0YSB7IGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpIH07CiB9CiAK
LXN0YXRpYyBpbmxpbmUgRXhwZWN0ZWQ8VmVjdG9yPFN0cmluZz4sIEVycm9yPiBkZWNvZGVDYWNo
ZXNOYW1lcyhjb25zdCBEYXRhJiBkYXRhLCBpbnQgZXJyb3IpCitzdGF0aWMgaW5saW5lIEV4cGVj
dGVkPFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+PiwgRXJyb3I+IGRlY29kZUNhY2hl
c05hbWVzKGNvbnN0IERhdGEmIGRhdGEsIGludCBlcnJvcikKIHsKICAgICBpZiAoZXJyb3IpCiAg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChFcnJvcjo6UmVhZERpc2spOwpAQCAtMjAwLDE0
ICsyMTcsMTcgQEAgc3RhdGljIGlubGluZSBFeHBlY3RlZDxWZWN0b3I8U3RyaW5nPiwgRXJyb3I+
IGRlY29kZUNhY2hlc05hbWVzKGNvbnN0IERhdGEmIGRhdGEKICAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKGNvdW50KSkKICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVycm9yOjpSZWFkRGlz
ayk7CiAKLSAgICBWZWN0b3I8U3RyaW5nPiBuYW1lczsKKyAgICBWZWN0b3I8c3RkOjpwYWlyPFN0
cmluZywgU3RyaW5nPj4gbmFtZXM7CiAgICAgbmFtZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShj
b3VudCk7CiAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IGNvdW50OyArK2luZGV4
KSB7CiAgICAgICAgIFN0cmluZyBuYW1lOwogICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG5h
bWUpKQogICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVycm9yOjpSZWFkRGlzayk7
CisgICAgICAgIFN0cmluZyB1bmlxdWVOYW1lOworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KHVuaXF1ZU5hbWUpKQorICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVycm9yOjpS
ZWFkRGlzayk7CiAKLSAgICAgICAgbmFtZXMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUobmFtZSkp
OworICAgICAgICBuYW1lcy51bmNoZWNrZWRBcHBlbmQoc3RkOjpwYWlyPFN0cmluZywgU3RyaW5n
PiB7IFdURk1vdmUobmFtZSksIFdURk1vdmUodW5pcXVlTmFtZSkgfSk7CiAgICAgfQogICAgIHJl
dHVybiBuYW1lczsKIH0KQEAgLTI0MCw4ICsyNjAsOCBAQCB2b2lkIENhY2hlczo6cmVhZENhY2hl
c0Zyb21EaXNrKFdURjo6RnVuY3Rpb248dm9pZChFeHBlY3RlZDxWZWN0b3I8Q2FjaGU+LCBFcnJv
cgogICAgICAgICAgICAgY2FsbGJhY2sobWFrZVVuZXhwZWN0ZWQocmVzdWx0LmVycm9yKCkpKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBjYWxsYmFjayhXVEY6Om1h
cChXVEZNb3ZlKHJlc3VsdC52YWx1ZSgpKSwgW3RoaXNdIChTdHJpbmcmJiBuYW1lKSB7Ci0gICAg
ICAgICAgICByZXR1cm4gQ2FjaGUgeyAqdGhpcywgbV9lbmdpbmUtPm5leHRDYWNoZUlkZW50aWZp
ZXIoKSwgQ2FjaGU6OlN0YXRlOjpVbmluaXRpYWxpemVkLCBXVEZNb3ZlKG5hbWUpIH07CisgICAg
ICAgIGNhbGxiYWNrKFdURjo6bWFwKFdURk1vdmUocmVzdWx0LnZhbHVlKCkpLCBbdGhpc10gKGF1
dG8mJiBwYWlyKSB7CisgICAgICAgICAgICByZXR1cm4gQ2FjaGUgeyAqdGhpcywgbV9lbmdpbmUt
Pm5leHRDYWNoZUlkZW50aWZpZXIoKSwgQ2FjaGU6OlN0YXRlOjpVbmluaXRpYWxpemVkLCBXVEZN
b3ZlKHBhaXIuZmlyc3QpLCBXVEZNb3ZlKHBhaXIuc2Vjb25kKSB9OwogICAgICAgICB9KSk7CiAg
ICAgfSk7CiB9CkBAIC0yNjYsMTQgKzI4Niw4MiBAQCB2b2lkIENhY2hlczo6d3JpdGVDYWNoZXNU
b0Rpc2soQ29tcGxldGlvbkNhbGxiYWNrJiYgY2FsbGJhY2spCiAgICAgfSk7CiB9CiAKK3ZvaWQg
Q2FjaGVzOjpyZWFkUmVjb3Jkc0xpc3QoQ2FjaGUmIGNhY2hlLCBOZXR3b3JrQ2FjaGU6OlN0b3Jh
Z2U6OlRyYXZlcnNlSGFuZGxlciYmIGNhbGxiYWNrKQoreworICAgIEFTU0VSVChtX2lzSW5pdGlh
bGl6ZWQpOworCisgICAgaWYgKCFtX3N0b3JhZ2UpIHsKKyAgICAgICAgY2FsbGJhY2sobnVsbHB0
ciwgeyB9KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX3N0b3JhZ2UtPnRyYXZlcnNl
KGNhY2hlLnVuaXF1ZU5hbWUoKSwgMCwgW3Byb3RlY3RlZFN0b3JhZ2UgPSBtYWtlUmVmKCptX3N0
b3JhZ2UpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShjb25zdCBhdXRvKiBzdG9yYWdl
LCBjb25zdCBhdXRvJiBpbmZvcm1hdGlvbikgeworICAgICAgICBjYWxsYmFjayhzdG9yYWdlLCBp
bmZvcm1hdGlvbik7CisgICAgfSk7Cit9CisKK3ZvaWQgQ2FjaGVzOjp3cml0ZVJlY29yZChjb25z
dCBDYWNoZSYgY2FjaGUsIGNvbnN0IFJlY29yZEluZm9ybWF0aW9uJiByZWNvcmRJbmZvcm1hdGlv
biwgUmVjb3JkJiYgcmVjb3JkLCBDb21wbGV0aW9uQ2FsbGJhY2smJiBjYWxsYmFjaykKK3sKKyAg
ICBBU1NFUlQobV9pc0luaXRpYWxpemVkKTsKKworICAgIC8vIEZJWE1FOiBDaGVjayBmb3Igc3Rv
cmFnZSBxdW90YS4KKyAgICBpZiAoIXNob3VsZFBlcnNpc3QoKSkgeworICAgICAgICBtX3ZvbGF0
aWxlU3RvcmFnZS5zZXQocmVjb3JkSW5mb3JtYXRpb24ua2V5LCBXVEZNb3ZlKHJlY29yZCkpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9zdG9yYWdlLT5zdG9yZShDYWNoZTo6ZW5j
b2RlKHJlY29yZEluZm9ybWF0aW9uLCByZWNvcmQpLCBbcHJvdGVjdGVkU3RvcmFnZSA9IG1ha2VS
ZWYoKm1fc3RvcmFnZSksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKGNvbnN0IERhdGEm
KSB7CisgICAgICAgIGNhbGxiYWNrKHN0ZDo6bnVsbG9wdCk7CisgICAgfSk7Cit9CisKK3ZvaWQg
Q2FjaGVzOjpyZWFkUmVjb3JkKGNvbnN0IE5ldHdvcmtDYWNoZTo6S2V5JiBrZXksIFdURjo6RnVu
Y3Rpb248dm9pZChFeHBlY3RlZDxSZWNvcmQsIEVycm9yPiYmKT4mJiBjYWxsYmFjaykKK3sKKyAg
ICBBU1NFUlQobV9pc0luaXRpYWxpemVkKTsKKworICAgIGlmICghc2hvdWxkUGVyc2lzdCgpKSB7
CisgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX3ZvbGF0aWxlU3RvcmFnZS5maW5kKGtleSk7Cisg
ICAgICAgIGlmIChpdGVyYXRvciA9PSBtX3ZvbGF0aWxlU3RvcmFnZS5lbmQoKSkgeworICAgICAg
ICAgICAgY2FsbGJhY2sobWFrZVVuZXhwZWN0ZWQoRXJyb3I6OkludGVybmFsKSk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgY2FsbGJhY2soaXRlcmF0b3ItPnZhbHVl
LmNvcHkoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX3N0b3JhZ2UtPnJldHJp
ZXZlKGtleSwgNCwgW3Byb3RlY3RlZFN0b3JhZ2UgPSBtYWtlUmVmKCptX3N0b3JhZ2UpLCBjYWxs
YmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShzdGQ6OnVuaXF1ZV9wdHI8U3RvcmFnZTo6UmVjb3Jk
PiBzdG9yYWdlKSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKCFzdG9yYWdlKSB7CisgICAgICAgICAg
ICBjYWxsYmFjayhtYWtlVW5leHBlY3RlZChFcnJvcjo6UmVhZERpc2spKTsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gcmVjb3JkID0gQ2FjaGU6
OmRlY29kZSgqc3RvcmFnZSk7CisgICAgICAgIGlmICghcmVjb3JkKSB7CisgICAgICAgICAgICBj
YWxsYmFjayhtYWtlVW5leHBlY3RlZChFcnJvcjo6UmVhZERpc2spKTsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGNhbGxiYWNrKFdURk1vdmUocmVjb3Jk
LnZhbHVlKCkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSk7Cit9CisKK3ZvaWQgQ2Fj
aGVzOjpyZW1vdmVSZWNvcmQoY29uc3QgTmV0d29ya0NhY2hlOjpLZXkmIGtleSkKK3sKKyAgICBB
U1NFUlQobV9pc0luaXRpYWxpemVkKTsKKworICAgIGlmICghc2hvdWxkUGVyc2lzdCgpKSB7Cisg
ICAgICAgIG1fdm9sYXRpbGVTdG9yYWdlLnJlbW92ZShrZXkpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIG1fc3RvcmFnZS0+cmVtb3ZlKGtleSk7Cit9CisKIHZvaWQgQ2FjaGVzOjpjbGVh
ck1lbW9yeVJlcHJlc2VudGF0aW9uKCkKIHsKICAgICBtYWtlRGlydHkoKTsKICAgICBtX2NhY2hl
cy5jbGVhcigpOwogICAgIG1faXNJbml0aWFsaXplZCA9IGZhbHNlOwogICAgIG1fc3RvcmFnZSA9
IG51bGxwdHI7Ci0gICAgaWYgKG1fZW5naW5lKQotICAgICAgICBtX2VuZ2luZS0+cmVtb3ZlQ2Fj
aGVzKG1fb3JpZ2luKTsKIH0KIAogYm9vbCBDYWNoZXM6OmlzRGlydHkodWludDY0X3QgdXBkYXRl
Q291bnRlcikgY29uc3QKQEAgLTI4Miw2ICszNzAsMTcgQEAgYm9vbCBDYWNoZXM6OmlzRGlydHko
dWludDY0X3QgdXBkYXRlQ291bnRlcikgY29uc3QKICAgICByZXR1cm4gbV91cGRhdGVDb3VudGVy
ICE9IHVwZGF0ZUNvdW50ZXI7CiB9CiAKK2NvbnN0IE5ldHdvcmtDYWNoZTo6U2FsdCYgQ2FjaGVz
OjpzYWx0KCkgY29uc3QKK3sKKyAgICBpZiAobV9lbmdpbmUpCisgICAgICAgIHJldHVybiBtX2Vu
Z2luZS0+c2FsdCgpOworCisgICAgaWYgKCFtX3ZvbGF0aWxlU2FsdCkKKyAgICAgICAgbV92b2xh
dGlsZVNhbHQgPSBTYWx0IHsgfTsKKworICAgIHJldHVybiBtX3ZvbGF0aWxlU2FsdC52YWx1ZSgp
OworfQorCiBDYWNoZUluZm9zIENhY2hlczo6Y2FjaGVJbmZvcyh1aW50NjRfdCB1cGRhdGVDb3Vu
dGVyKSBjb25zdAogewogICAgIFZlY3RvcjxDYWNoZUluZm8+IGNhY2hlSW5mb3M7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2lu
ZUNhY2hlcy5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3Jh
Z2VFbmdpbmVDYWNoZXMuaAppbmRleCBmMzEzZmQxYzRjYjhiOWZhZmNiNjQ2Njg4NjhjZjQzN2Fk
NTk3MjMyLi40YTJhNzc5MmVmZWE2ZGFmYTY0NDQwNTNlYzcwOGJiMDUzZTZhZjA1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2lu
ZUNhY2hlcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVT
dG9yYWdlRW5naW5lQ2FjaGVzLmgKQEAgLTUyLDE3ICs1MiwyMyBAQCBwdWJsaWM6CiAgICAgQ2Fj
aGUqIGZpbmQodWludDY0X3QgaWRlbnRpZmllcik7CiAgICAgdm9pZCBhcHBlbmRSZXByZXNlbnRh
dGlvbihTdHJpbmdCdWlsZGVyJikgY29uc3Q7CiAKKyAgICB2b2lkIHJlYWRSZWNvcmRzTGlzdChD
YWNoZSYsIE5ldHdvcmtDYWNoZTo6U3RvcmFnZTo6VHJhdmVyc2VIYW5kbGVyJiYpOworICAgIHZv
aWQgcmVhZFJlY29yZChjb25zdCBOZXR3b3JrQ2FjaGU6OktleSYsIFdURjo6RnVuY3Rpb248dm9p
ZChFeHBlY3RlZDxXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6UmVjb3JkLCBXZWJDb3JlOjpET01D
YWNoZUVuZ2luZTo6RXJyb3I+JiYpPiYmKTsKKyAgICB2b2lkIHdyaXRlUmVjb3JkKGNvbnN0IENh
Y2hlJiwgY29uc3QgUmVjb3JkSW5mb3JtYXRpb24mLCBXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6
UmVjb3JkJiYsIFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpDb21wbGV0aW9uQ2FsbGJhY2smJik7
CisgICAgdm9pZCByZW1vdmVSZWNvcmQoY29uc3QgTmV0d29ya0NhY2hlOjpLZXkmKTsKKworICAg
IGNvbnN0IE5ldHdvcmtDYWNoZTo6U2FsdCYgc2FsdCgpIGNvbnN0OworCisgICAgYm9vbCBzaG91
bGRQZXJzaXN0KCkgY29uc3QgeyByZXR1cm4gIW1fcm9vdFBhdGguaXNOdWxsKCk7IH0KKwogcHJp
dmF0ZToKICAgICBDYWNoZXMoRW5naW5lJiwgU3RyaW5nJiYgb3JpZ2luKTsKIAogICAgIHZvaWQg
cmVhZENhY2hlc0Zyb21EaXNrKFdURjo6RnVuY3Rpb248dm9pZChFeHBlY3RlZDxWZWN0b3I8Q2Fj
aGU+LCBXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6RXJyb3I+JiYpPiYmKTsKICAgICB2b2lkIHdy
aXRlQ2FjaGVzVG9EaXNrKFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpDb21wbGV0aW9uQ2FsbGJh
Y2smJik7CiAKLQogICAgIENhY2hlKiBmaW5kKGNvbnN0IFN0cmluZyYgbmFtZSk7CiAKLSAgICBi
b29sIHNob3VsZFBlcnNpc3QoKSBjb25zdCB7IHJldHVybiAhbV9yb290UGF0aC5pc051bGwoKTsg
fQotCiAgICAgdm9pZCBtYWtlRGlydHkoKSB7ICsrbV91cGRhdGVDb3VudGVyOyB9CiAgICAgYm9v
bCBpc0RpcnR5KHVpbnQ2NF90IHVwZGF0ZUNvdW50ZXIpIGNvbnN0OwogCkBAIC03NCw2ICs4MCw4
IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPENhY2hlPiBtX2NhY2hlczsKICAgICBWZWN0b3I8Q2Fj
aGU+IG1fcmVtb3ZlZENhY2hlczsKICAgICBSZWZQdHI8TmV0d29ya0NhY2hlOjpTdG9yYWdlPiBt
X3N0b3JhZ2U7CisgICAgSGFzaE1hcDxOZXR3b3JrQ2FjaGU6OktleSwgV2ViQ29yZTo6RE9NQ2Fj
aGVFbmdpbmU6OlJlY29yZD4gbV92b2xhdGlsZVN0b3JhZ2U7CisgICAgbXV0YWJsZSBzdGQ6Om9w
dGlvbmFsPE5ldHdvcmtDYWNoZTo6U2FsdD4gbV92b2xhdGlsZVNhbHQ7CiAgICAgVmVjdG9yPFdl
YkNvcmU6OkRPTUNhY2hlRW5naW5lOjpDb21wbGV0aW9uQ2FsbGJhY2s+IG1fcGVuZGluZ0luaXRp
YWxpemF0aW9uQ2FsbGJhY2tzOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHAKaW5kZXggODAzYTk5
ZmJkZGQ2ZDhkMjI3MGFkNTVjOWJjYjUwYTA1MWE0NGIzZi4uMGI2NTI4ZGQ3MjhmYjkzMzBhYTlk
MDU0Mjg1NzRjZjQ2MGQwOWFmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuY3BwCkBAIC04NDYsMTAgKzg0
Niw3IEBAIHZvaWQgU3RvcmFnZTo6c3RvcmUoY29uc3QgUmVjb3JkJiByZWNvcmQsIE1hcHBlZEJv
ZHlIYW5kbGVyJiYgbWFwcGVkQm9keUhhbmRsZXIpCiAgICAgaWYgKCFpc0luaXRpYWxXcml0ZSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gRGVsYXkgdGhlIHN0YXJ0IG9mIHdyaXRlcyBhIGJp
dCB0byBhdm9pZCBhZmZlY3RpbmcgZWFybHkgcGFnZSBsb2FkLgotICAgIC8vIENvbXBsZXRpbmcg
d3JpdGVzIHdpbGwgZGlzcGF0Y2ggbW9yZSB3cml0ZXMgd2l0aG91dCBkZWxheS4KLSAgICBzdGF0
aWMgY29uc3QgU2Vjb25kcyBpbml0aWFsV3JpdGVEZWxheSA9IDFfczsKLSAgICBtX3dyaXRlT3Bl
cmF0aW9uRGlzcGF0Y2hUaW1lci5zdGFydE9uZVNob3QoaW5pdGlhbFdyaXRlRGVsYXkpOworICAg
IG1fd3JpdGVPcGVyYXRpb25EaXNwYXRjaFRpbWVyLnN0YXJ0T25lU2hvdChtX2luaXRpYWxXcml0
ZURlbGF5KTsKIH0KIAogdm9pZCBTdG9yYWdlOjp0cmF2ZXJzZShjb25zdCBTdHJpbmcmIHR5cGUs
IFRyYXZlcnNlRmxhZ3MgZmxhZ3MsIFRyYXZlcnNlSGFuZGxlciYmIHRyYXZlcnNlSGFuZGxlcikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlU3RvcmFnZS5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3Jr
Q2FjaGVTdG9yYWdlLmgKaW5kZXggNDEyZWQ5ZWM1NzMxMTNkOGU1MWIyY2ZlMzFiZWIwNWY5NWVk
OTQ3OS4uYjY4OGRjZDRlMGE3NWVhMTJhOWQxMGRkZTdjOWJiNGM4ZjlmNGI0NiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdl
LmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVT
dG9yYWdlLmgKQEAgLTEwNCw2ICsxMDQsOCBAQCBwdWJsaWM6CiAKICAgICB+U3RvcmFnZSgpOwog
CisgICAgdm9pZCB3cml0ZVdpdGhvdXRXYWl0aW5nKCkgeyBtX2luaXRpYWxXcml0ZURlbGF5ID0g
MF9zOyB9OworCiBwcml2YXRlOgogICAgIFN0b3JhZ2UoY29uc3QgU3RyaW5nJiBkaXJlY3RvcnlQ
YXRoLCBNb2RlLCBTYWx0KTsKIApAQCAtMTgyLDYgKzE4NCwxMCBAQCBwcml2YXRlOgogICAgIFJl
ZjxXb3JrUXVldWU+IG1fc2VyaWFsQmFja2dyb3VuZElPUXVldWU7CiAKICAgICBCbG9iU3RvcmFn
ZSBtX2Jsb2JTdG9yYWdlOworCisgICAgLy8gQnkgZGVmYXVsdCwgZGVsYXkgdGhlIHN0YXJ0IG9m
IHdyaXRlcyBhIGJpdCB0byBhdm9pZCBhZmZlY3RpbmcgZWFybHkgcGFnZSBsb2FkLgorICAgIC8v
IENvbXBsZXRpbmcgd3JpdGVzIHdpbGwgZGlzcGF0Y2ggbW9yZSB3cml0ZXMgd2l0aG91dCBkZWxh
eS4KKyAgICBTZWNvbmRzIG1faW5pdGlhbFdyaXRlRGVsYXkgeyAxX3MgfTsKIH07CiAKIC8vIEZJ
WE1FOiBSZW1vdmUsIHVzZWQgYnkgTmV0d29ya0NhY2hlU3RhdGlzdGljcyBvbmx5LgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4
IDc3YjViOTdkYjBhNTBlOGE5MTQ0NGVkMWFjNjQ4OWQwZjUzMzY5NjQuLjE5NTI2ZGVkYWMwMzBj
YmQxNzIzOTA5YzE4N2I0Y2MwZjQzMWVkYTcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxNy0w
OS0xMyAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIENh
Y2hlIEFQSSBzdXBwb3J0IG9mIHJlY29yZHMgcGVyc2lzdGVuY3kKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3Njg0NQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogaHR0cC90ZXN0cy9jYWNoZS1zdG9yYWdl
L2NhY2hlLXBlcnNpc3RlbmN5Lmh0dHBzLmh0bWw6CisgICAgICAgICogaHR0cC90ZXN0cy9jYWNo
ZS1zdG9yYWdlL2NhY2hlLXJlY29yZHMtcGVyc2lzdGVuY3kuaHR0cHMtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2NhY2hlLXN0b3JhZ2UvY2FjaGUtcmVjb3Jkcy1w
ZXJzaXN0ZW5jeS5odHRwcy5odG1sOiBBZGRlZC4KKwogMjAxNy0wOS0xMyAgU2FpZCBBYm91LUhh
bGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgogCiAgICAgICAgIEZvbGxvd3VwIChyMjIx
ODA1KTogQWRkcmVzcyBjb21tZW50cyBhbmQgYWRkIG1vcmUgdGVzdHMKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2h0dHAvdGVzdHMvY2FjaGUtc3RvcmFnZS9jYWNoZS1wZXJzaXN0ZW5jeS5odHRw
cy5odG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9jYWNoZS1zdG9yYWdlL2NhY2hlLXBlcnNp
c3RlbmN5Lmh0dHBzLmh0bWwKaW5kZXggZDFlYWQ0ZDRhZjI1YmNlOGY1NGY2MGE4YTMyZGQxZDc3
NDExYjhmOC4uZGM5ZTk2YjY1ZThjMjQxZjcwNzk2ZTY1OTY1ZTI1N2Q5YzM1MmNkZCAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9jYWNoZS1zdG9yYWdlL2NhY2hlLXBlcnNpc3Rl
bmN5Lmh0dHBzLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9jYWNoZS1zdG9yYWdl
L2NhY2hlLXBlcnNpc3RlbmN5Lmh0dHBzLmh0bWwKQEAgLTQyLDExICs0MiwxMSBAQAogICAgIHBy
b21pc2VfdGVzdCh0ZXN0ID0+IHsKICAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQogICAg
ICAgICAgICAgdGVzdFJ1bm5lci5zZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkKGZhbHNlKTsKLSAg
ICAgICAgdmFyIGNsZWFyUHJvbWlzZTsKLSAgICAgICAgaWYgKHdpbmRvdy5pbnRlcm5hbHMpCi0g
ICAgICAgICAgICBjbGVhclByb21pc2UgPWludGVybmFscy5jbGVhckNhY2hlU3RvcmFnZU1lbW9y
eVJlcHJlc2VudGF0aW9uKCk7CiAKLSAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShjbGVh
clByb21pc2UpLnRoZW4oKCkgPT4geworICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCku
dGhlbigoKSA9PiB7CisgICAgICAgICAgICBpZiAod2luZG93LmludGVybmFscykKKyAgICAgICAg
ICAgICAgICByZXR1cm4gaW50ZXJuYWxzLmNsZWFyQ2FjaGVTdG9yYWdlTWVtb3J5UmVwcmVzZW50
YXRpb24oKTsKKyAgICAgICAgfSkudGhlbigoKSA9PiB7CiAgICAgICAgICAgICByZXR1cm4gc2Vs
Zi5jYWNoZXMua2V5cygpOwogICAgICAgICB9KS50aGVuKGtleXMgPT4gewogICAgICAgICAgICAg
dmFyIHBlbmRpbmcgPSBbXTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvY2Fj
aGUtc3RvcmFnZS9jYWNoZS1yZWNvcmRzLXBlcnNpc3RlbmN5Lmh0dHBzLWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL2h0dHAvdGVzdHMvY2FjaGUtc3RvcmFnZS9jYWNoZS1yZWNvcmRzLXBlcnNp
c3RlbmN5Lmh0dHBzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jMTljY2VhM2I0ZGM0ZTZhMDIz
MDUzMmMxNzlmZTExMDQxNDFmODY2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9jYWNoZS1zdG9yYWdlL2NhY2hlLXJlY29yZHMtcGVyc2lzdGVuY3kuaHR0cHMtZXhw
ZWN0ZWQudHh0CkBAIC0wLDAgKzEsOSBAQAorCitQQVNTIENsZWFuaW5nIGV4aXN0aW5nIGNhY2hl
cyAKK1BBU1MgQ2FjaGUucHV0IGNhbGxlZCB0d2ljZSB3aXRoIG1hdGNoaW5nIFJlcXVlc3RzIC0g
a2V5cyBzaG91bGQgcmVtYWluIHRoZSBzYW1lIC0gdGVzdGluZyBwZXJzaXN0ZW5jeSAKK1BBU1Mg
Q2xlYW5pbmcgY3JlYXRlZCBjYWNoZXMgCitQQVNTIENoZWNraW5nIHBlcnNpc3RlbmN5IG9mIGNh
Y2hlIGtleXMgCitQQVNTIENoZWNraW5nIHBlcnNpc3RlbmN5IG9mIHJlc3BvbnNlIAorUEFTUyBD
aGVja2luZyBwZXJzaXN0ZW5jeSBvZiByZXNwb25zZSBib2R5IAorUEFTUyBUZXN0aW5nIG92ZXJy
aWRpbmcgb2YgYW4gZXhpc3RpbmcgY2FjaGVkIHJlY29yZCB0aGF0IGlzIG5vdCBpbiBtZW1vcnkg
CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvY2FjaGUtc3RvcmFnZS9jYWNo
ZS1yZWNvcmRzLXBlcnNpc3RlbmN5Lmh0dHBzLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L2NhY2hlLXN0b3JhZ2UvY2FjaGUtcmVjb3Jkcy1wZXJzaXN0ZW5jeS5odHRwcy5odG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmJiNGJhYTAwYWJlYWE1ZDU1MTdjMzA4NWU4MWFiMjgyYTM3MmE4NTAKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2NhY2hlLXN0b3JhZ2UvY2FjaGUtcmVj
b3Jkcy1wZXJzaXN0ZW5jeS5odHRwcy5odG1sCkBAIC0wLDAgKzEsMTMzIEBACis8IURPQ1RZUEUg
aHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+Q2FjaGUgU3RvcmFnZTogdGVzdGluZyBDYWNo
ZSBwZXJzaXN0ZW5jeTwvdGl0bGU+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVz
cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9y
dC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKyAgICA8c2NyaXB0PgorZnVuY3Rpb24g
YXNzZXJ0X2hlYWRlcl9lcXVhbHMoYWN0dWFsLCBleHBlY3RlZCwgZGVzY3JpcHRpb24pIHsKKyAg
ICBhc3NlcnRfY2xhc3Nfc3RyaW5nKGFjdHVhbCwgIkhlYWRlcnMiLCBkZXNjcmlwdGlvbik7Cisg
ICAgdmFyIGhlYWRlcjsKKyAgICB2YXIgYWN0dWFsX2hlYWRlcnMgPSBbXTsKKyAgICB2YXIgZXhw
ZWN0ZWRfaGVhZGVycyA9IFtdOworICAgIGZvciAoaGVhZGVyIG9mIGFjdHVhbCkKKyAgICAgICAg
YWN0dWFsX2hlYWRlcnMucHVzaChoZWFkZXJbMF0gKyAiOiAiICsgaGVhZGVyWzFdKTsKKyAgICBm
b3IgKGhlYWRlciBvZiBleHBlY3RlZCkKKyAgICAgICAgZXhwZWN0ZWRfaGVhZGVycy5wdXNoKGhl
YWRlclswXSArICI6ICIgKyBoZWFkZXJbMV0pOworICAgIGFzc2VydF9hcnJheV9lcXVhbHMoYWN0
dWFsX2hlYWRlcnMsIGV4cGVjdGVkX2hlYWRlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICBk
ZXNjcmlwdGlvbiArICIgSGVhZGVycyBkaWZmZXIuIik7Cit9CisKK2Z1bmN0aW9uIGFzc2VydF9y
ZXNwb25zZV9lcXVhbHMoYWN0dWFsLCBleHBlY3RlZCwgZGVzY3JpcHRpb24pIHsKKyAgICBhc3Nl
cnRfY2xhc3Nfc3RyaW5nKGFjdHVhbCwgIlJlc3BvbnNlIiwgZGVzY3JpcHRpb24pOworICAgIFsi
dHlwZSIsICJ1cmwiLCAic3RhdHVzIiwgIm9rIiwgInN0YXR1c1RleHQiXS5mb3JFYWNoKGZ1bmN0
aW9uKGF0dHJpYnV0ZSkgeworICAgICAgICBhc3NlcnRfZXF1YWxzKGFjdHVhbFthdHRyaWJ1dGVd
LCBleHBlY3RlZFthdHRyaWJ1dGVdLAorICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9u
ICsgIiBBdHRyaWJ1dGVzIGRpZmZlcjogIiArIGF0dHJpYnV0ZSArICIuIik7CisgICAgfSk7Cisg
ICAgYXNzZXJ0X2hlYWRlcl9lcXVhbHMoYWN0dWFsLmhlYWRlcnMsIGV4cGVjdGVkLmhlYWRlcnMs
IGRlc2NyaXB0aW9uKTsKK30KKworZnVuY3Rpb24gYXNzZXJ0X3JlcXVlc3RfZXF1YWxzKGFjdHVh
bCwgZXhwZWN0ZWQsIGRlc2NyaXB0aW9uKSB7CisgICAgYXNzZXJ0X2NsYXNzX3N0cmluZyhhY3R1
YWwsICJSZXF1ZXN0IiwgZGVzY3JpcHRpb24pOworICAgIFsidXJsIl0uZm9yRWFjaChmdW5jdGlv
bihhdHRyaWJ1dGUpIHsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyhhY3R1YWxbYXR0cmlidXRlXSwg
ZXhwZWN0ZWRbYXR0cmlidXRlXSwKKyAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAr
ICIgQXR0cmlidXRlcyBkaWZmZXI6ICIgKyBhdHRyaWJ1dGUgKyAiLiIpOworICAgIH0pOworICAg
IGFzc2VydF9oZWFkZXJfZXF1YWxzKGFjdHVhbC5oZWFkZXJzLCBleHBlY3RlZC5oZWFkZXJzLCBk
ZXNjcmlwdGlvbik7Cit9CisKK2Z1bmN0aW9uIGFzc2VydF9yZXF1ZXN0X2FycmF5X2VxdWFscyhh
Y3R1YWwsIGV4cGVjdGVkLCBkZXNjcmlwdGlvbikgeworICAgIGFzc2VydF90cnVlKEFycmF5Lmlz
QXJyYXkoYWN0dWFsKSwgZGVzY3JpcHRpb24pOworICAgIGFzc2VydF9lcXVhbHMoYWN0dWFsLmxl
bmd0aCwgZXhwZWN0ZWQubGVuZ3RoLCBkZXNjcmlwdGlvbik7CisgICAgYWN0dWFsLmZvckVhY2go
ZnVuY3Rpb24odmFsdWUsIGluZGV4KSB7CisgICAgICAgIGFzc2VydF9yZXF1ZXN0X2VxdWFscyh2
YWx1ZSwgZXhwZWN0ZWRbaW5kZXhdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVz
Y3JpcHRpb24gKyAiIDogb2JqZWN0WyIgKyBpbmRleCArICJdIik7CisgICAgfSk7Cit9CisKK3By
b21pc2VfdGVzdCh0ZXN0ID0+IHsKKyAgICByZXR1cm4gc2VsZi5jYWNoZXMua2V5cygpLnRoZW4o
a2V5cyA9PiB7CisgICAgICAgIHZhciBwZW5kaW5nID0gW107CisgICAgICAgIGZvciAoa2V5IG9m
IGtleXMpCisgICAgICAgICAgICBwZW5kaW5nLnB1c2goc2VsZi5jYWNoZXMuZGVsZXRlKGtleXNb
MF0pKTsKKyAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHBlbmRpbmcpOworICAgIH0pOworfSwg
IkNsZWFuaW5nIGV4aXN0aW5nIGNhY2hlcyIpOworCit2YXIgdGVzdF91cmwgPSAnaHR0cHM6Ly9l
eGFtcGxlLmNvbS9mb28nOwordmFyIHRlc3RfYm9keSA9ICdIZWxsbyB3b3JsZCEnOworCitwcm9t
aXNlX3Rlc3QoKCkgPT4geworICAgIHZhciBjYWNoZTsKKyAgICB2YXIgY2FjaGVfa2V5czsKKyAg
ICB2YXIgZmlyc3RfcmVzcG9uc2UgPSBuZXcgUmVzcG9uc2UoIk9sZCBib2R5IiwgeyBzdGF0dXNU
ZXh0OiAnT2xkIHN0YXR1cycgfSk7CisgICAgdmFyIGFsdGVybmF0ZV9yZXNwb25zZSA9IG5ldyBS
ZXNwb25zZSgiTmV3IGJvZHkiLCB7IHN0YXR1c1RleHQ6ICdOZXcgc3RhdHVzJyB9KTsKKyAgICBy
ZXR1cm4gc2VsZi5jYWNoZXMub3BlbigidGVzdC1jYWNoZS1yZWNvcmRzLXBlcnNpc3RlbmN5Iiku
dGhlbihjID0+IHsKKyAgICAgICAgY2FjaGUgPSBjOworICAgIH0pLnRoZW4oKCkgPT4geworICAg
ICAgICByZXR1cm4gY2FjaGUucHV0KHRlc3RfdXJsLCBmaXJzdF9yZXNwb25zZSk7CisgICAgfSku
dGhlbigoKSA9PiB7CisgICAgICAgIHJldHVybiBjYWNoZS5rZXlzKCk7CisgICAgfSkudGhlbihr
ZXlzID0+IHsKKyAgICAgICAgY2FjaGVfa2V5cyA9IGtleXM7CisgICAgICAgIGlmICh3aW5kb3cu
aW50ZXJuYWxzKQorICAgICAgICAgICAgcmV0dXJuIGludGVybmFscy5jbGVhckNhY2hlU3RvcmFn
ZU1lbW9yeVJlcHJlc2VudGF0aW9uKCk7CisgICAgfSkudGhlbigoKSA9PiB7CisgICAgICAgIHJl
dHVybiBzZWxmLmNhY2hlcy5vcGVuKCJ0ZXN0LWNhY2hlLXJlY29yZHMtcGVyc2lzdGVuY3kiKTsK
KyAgICB9KS50aGVuKGMgPT4geworICAgICAgICBjYWNoZSA9IGM7CisgICAgICAgIHJldHVybiBj
YWNoZS5rZXlzKCkudGhlbigoa2V5cykgPT4geworICAgICAgICAgICAgdGVzdCgoKSA9PiB7Cisg
ICAgICAgICAgICAgICAgYXNzZXJ0X3JlcXVlc3RfYXJyYXlfZXF1YWxzKGtleXMsIGNhY2hlX2tl
eXMpOworICAgICAgICAgICAgfSwgIkNoZWNraW5nIHBlcnNpc3RlbmN5IG9mIGNhY2hlIGtleXMi
KTsKKyAgICAgICAgICAgIHJldHVybiBjYWNoZS5tYXRjaCh0ZXN0X3VybCk7CisgICAgICAgIH0p
LnRoZW4oKHJlc3VsdCkgPT4geworICAgICAgICAgICAgdGVzdCgoKSA9PiB7CisgICAgICAgICAg
ICAgICAgYXNzZXJ0X3Jlc3BvbnNlX2VxdWFscyhyZXN1bHQsIGZpcnN0X3Jlc3BvbnNlLCAiQ2Fj
aGUucHV0IHNob3VsZCBzdG9yZSB0aGUgcmVzcG9uc2UgcGVyc2lzdGVudGx5Iik7CisgICAgICAg
ICAgICB9LCAiQ2hlY2tpbmcgcGVyc2lzdGVuY3kgb2YgcmVzcG9uc2UiKTsKKyAgICAgICAgICAg
IHJldHVybiByZXN1bHQudGV4dCgpOworICAgICAgICB9KS50aGVuKChib2R5KSA9PiB7CisgICAg
ICAgICAgICB0ZXN0KCgpID0+IHsKKyAgICAgICAgICAgICAgICBhc3NlcnRfZXF1YWxzKGJvZHks
ICJPbGQgYm9keSIsICJDYWNoZSBwdXQgc2hvdWxkIHN0b3JlIHRoZSByZXNwb25zZSBib2R5IHBl
cnNpc3RlbnRseS4iKTsKKyAgICAgICAgICAgIH0sICJDaGVja2luZyBwZXJzaXN0ZW5jeSBvZiBy
ZXNwb25zZSBib2R5Iik7CisgICAgICAgIH0pOworICAgIH0pLnRoZW4oKCkgPT4geworICAgICAg
ICByZXR1cm4gY2FjaGUucHV0KHRlc3RfdXJsLCBhbHRlcm5hdGVfcmVzcG9uc2UpOworICAgIH0p
LnRoZW4oKCkgPT4geworICAgICAgICByZXR1cm4gY2FjaGUua2V5cygpOworICAgIH0pLnRoZW4o
a2V5cyA9PiB7CisgICAgICAgIGNhY2hlX2tleXMgPSBrZXlzOworICAgICAgICBpZiAod2luZG93
LmludGVybmFscykKKyAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbHMuY2xlYXJDYWNoZVN0b3Jh
Z2VNZW1vcnlSZXByZXNlbnRhdGlvbigpOworICAgIH0pLnRoZW4oKCkgPT4geworICAgICAgICBy
ZXR1cm4gc2VsZi5jYWNoZXMub3BlbigidGVzdC1jYWNoZS1yZWNvcmRzLXBlcnNpc3RlbmN5Iik7
CisgICAgfSkudGhlbihjID0+IHsKKyAgICAgICAgY2FjaGUgPSBjOworICAgICAgICByZXR1cm4g
Y2FjaGUua2V5cygpOworICAgIH0pLnRoZW4oKGtleXMpID0+IHsKKyAgICAgICAgYXNzZXJ0X3Jl
cXVlc3RfYXJyYXlfZXF1YWxzKGtleXMsIGNhY2hlX2tleXMpOworICAgIH0pLnRoZW4oKCkgPT4g
eworICAgICAgICBwcm9taXNlX3Rlc3QoKCkgPT4geworICAgICAgICAgICAgcmV0dXJuIGNhY2hl
Lm1hdGNoKHRlc3RfdXJsKS50aGVuKChyZXN1bHQpID0+IHsKKyAgICAgICAgICAgICAgICBhc3Nl
cnRfcmVzcG9uc2VfZXF1YWxzKHJlc3VsdCwgYWx0ZXJuYXRlX3Jlc3BvbnNlLCAnQ2FjaGUucHV0
IHNob3VsZCByZXBsYWNlIGV4aXN0aW5nICcgKyAncmVzcG9uc2Ugd2l0aCBuZXcgcmVzcG9uc2Uu
Jyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC50ZXh0KCk7CisgICAgICAgICAgICB9
KS50aGVuKChib2R5KSA9PiB7CisgICAgICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyhib2R5LCAi
TmV3IGJvZHkiLCAnQ2FjaGUgcHV0IHNob3VsZCBzdG9yZSBuZXcgcmVzcG9uc2UgYm9keS4nKTsK
KyAgICAgICAgICAgIH0pOworICAgICAgICB9LCAnVGVzdGluZyBvdmVycmlkaW5nIG9mIGFuIGV4
aXN0aW5nIGNhY2hlZCByZWNvcmQgdGhhdCBpcyBub3QgaW4gbWVtb3J5Jyk7CisgICAgfSk7Cit9
LCAnQ2FjaGUucHV0IGNhbGxlZCB0d2ljZSB3aXRoIG1hdGNoaW5nIFJlcXVlc3RzIC0ga2V5cyBz
aG91bGQgcmVtYWluIHRoZSBzYW1lIC0gdGVzdGluZyBwZXJzaXN0ZW5jeScpOworCitwcm9taXNl
X3Rlc3QodGVzdCA9PiB7CisgICAgcmV0dXJuIHNlbGYuY2FjaGVzLmtleXMoKS50aGVuKGtleXMg
PT4geworICAgICAgICB2YXIgcGVuZGluZyA9IFtdOworICAgICAgICBmb3IgKGtleSBvZiBrZXlz
KQorICAgICAgICAgICAgcGVuZGluZy5wdXNoKHNlbGYuY2FjaGVzLmRlbGV0ZShrZXlzWzBdKSk7
CisgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChwZW5kaW5nKTsKKyAgICB9KTsKK30sICJDbGVh
bmluZyBjcmVhdGVkIGNhY2hlcyIpOworICAgIDwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>320710</attachid>
            <date>2017-09-13 16:50:36 -0700</date>
            <delta_ts>2017-09-14 09:00:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-176845-20170913165035.patch</filename>
            <type>text/plain</type>
            <size>55824</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIxOTk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDBiNGM1Y2Q2NGM0YzdhNzdl
Y2Y2YmY0MGY5ZDBhNTFkYWVjNTMzNzIuLmE3ZmFkNjEwMmQwY2FkZDE3MmRhZGUxMmZhMzdkYzc0
ZGJiNzM4MjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTA1IEBACiAyMDE3LTA5LTEzICBZb3Vlbm4g
RmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAorICAgICAgICBBZGQgQ2FjaGUgQVBJIHN1cHBv
cnQgb2YgcmVjb3JkcyBwZXJzaXN0ZW5jeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTc2ODQ1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgSW50cm9kdWNpbmcgYXN5bmNocm9ub3VzIG9wZW5pbmcgb2YgQ2Fj
aGUgb2JqZWN0cy4KKyAgICAgICAgV2hlbiBvcGVuaW5nLCBDYWNoZSBvYmplY3RzIHdpbGwgcmVh
ZCB0aGUgbGlzdCBvZiByZWNvcmRzIGZyb20gdGhlIGRpc2suCisgICAgICAgIFRoZXkga2VlcCBp
biBtZW1vcnkgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiB0byBtYWtlIGFueSBtYXRjaCBvciBy
ZW1vdmUgcmVxdWVzdCB3aXRob3V0IHJlYWRpbmcgZnVydGhlciBpbmZvcm1hdGlvbiBmcm9tIHRo
ZSBkaXNrLgorICAgICAgICBDYWNoZSBvYmplY3RzIHRodXMga2VlcCBkdXJpbmcgdGhlIG9wZW5p
bmcgdGltZSBhIGxpc3Qgb2YgY2FsbGJhY2tzIHRvIGNhbGwgd2hlbiBiZWluZyBvcGVuZWQuCisg
ICAgICAgIFBlcnNpc3RlbnQgc3RvcmFnZSBpcyBpbXBsZW1lbnRlZCB0aHJvdWdoIE5ldHdvcmtD
YWNoZTo6U3RvcmFnZS4KKworICAgICAgICBBIENhY2hlIG9iamVjdCBpcyBhZGRlZCBhIHVuaXF1
ZSBuYW1lIHNvIHRoYXQgcmVjb3JkcyBmcm9tIGEgQ2FjaGUgY2Fubm90IGJlIG1peGVkIHdpdGgg
cmVjb3JkcyBmcm9tIGFub3RoZXIgQ2FjaGUuCisgICAgICAgIFRoaXMgdW5pcXVlIG5hbWUgaXMg
c3RvcmVkIHBlcnNpc3Rlbmx5IGluIGFkZGl0aW9uIHRvIHRoZSBDYWNoZSBuYW1lLgorICAgICAg
ICBUaGlzIHVuaXF1ZSBuYW1lIGlzIHVzZWQgYXMgdGhlIGtleSB0eXBlIGdpdmVuIHRvIHRoZSBz
dG9yYWdlLgorCisgICAgICAgIFJlcXVlc3QsIHJlc3BvbnNlIGFuZCByZXNwb25zZWJvZHkgZGF0
YSBhcmUgbm8gbG9uZ2VyIGtlcHQgYnkgdGhlIENhY2hlIG9iamVjdC4KKyAgICAgICAgRm9yIHJl
Z3VsYXIgc2Vzc2lvbnMsIHRoaXMgaW5mb3JtYXRpb24gaXMga2VwdCBvbiB0aGUgZGlzayB0aHJv
dWdoIE5ldHdvcmtDYWNoZTo6U3RvcmFnZS4KKyAgICAgICAgSW5zZXJ0aW9uIHRpbWUgaXMgYWxz
byBzdG9yZWQgcGVyc2lzdGVudGx5IHNvIGFzIHRvIGtlZXAgdGhlIG9yZGVyaW5nIG9mIHRoZSBy
ZWNvcmRzIGNvbnNpc3RlbnQuCisgICAgICAgIEZvciBwcml2YXRlIGJyb3dzaW5nIHNlc3Npb25z
LCB0aGlzIGluZm9ybWF0aW9uIGlzIGtlcHQgaW4gYSBtYXAgb3duZWQgYnkgdGhlIENhY2hlcyBv
YmplY3QuCisgICAgICAgIFJlY29yZERhdGEgaXMgcmVuYW1lZCB0byBSZWNvcmRJbmZvcm1hdGlv
biBhcyBpdCBub3cgb25seSBjb250YWlucyB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBoYW5kbGUg
dGhlIGRpZmZlcmVudCBDYWNoZSBhY3Rpb25zLgorCisgICAgICAgIEZvciBldmVyeSByZWNvcmQg
cmV0cmlldmFsIGFjdGlvbiwgYSBSZWFkUmVjb3JkVGFza0NvdW50ZXIgaXMgdXNlZC4KKyAgICAg
ICAgSXRzIHB1cnBvc2UgaXMgdG8gYWxsb3cgcmV0cmlldmluZyB0aGUgcmVjb3JkIGRhdGEgb24g
dGhlIGRpc2sgaW4gcGFyYWxsZWwsCisgICAgICAgIGFuZCB0aGVuIHNlbmQgYmFjayB0aGUgaW5m
b3JtYXRpb24gd2hlbiBldmVyeXRoaW5nIGlzIHJlYWQuCisgICAgICAgIEluIGNhc2Ugc29tZSBy
ZWNvcmRzIGNhbm5vdCBiZSBjb3JyZWN0bHkgcmVhZCwgdGhleSBhcmUgcmVtb3ZlZCBhdXRvbWF0
aWNhbGx5IGF0IHRoYXQgcG9pbnQuCisgICAgICAgIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9u
IGxvYWRzIGFsbCBpbmZvcm1hdGlvbiBpbiBtZW1vcnkgaW5jbHVkaW5nIHJlc3BvbnNlIGJvZGll
cy4KKyAgICAgICAgRnVydGhlciBpbXByb3ZlbWVudHMgbWlnaHQgY29uc2lkZXIgc3RyZWFtaW5n
IHRoZSByZXNwb25zZSBib2RpZXMgcHJvZ3Jlc3NpdmVseS4KKworICAgICAgICBGb3IgZXZlcnkg
c3RvcmVkIHJlY29yZCwgYW4gQXN5bmNocm9ub3VzUHV0VGFza0NvdW50ZXIgaXMgdXNlZC4KKyAg
ICAgICAgSXRzIHB1cnBvc2UgaXMgYWxzbyB0byB3YWl0IGZvciBhbGwgcHV0IGFjdGlvbnMgdG8g
YmUgY29tcGxldGVkIGJlZm9yZSBleGVjdXRpbmcgdGhlIGNvbXBsZXRpb24gY2FsbGJhY2suCisg
ICAgICAgIEluIHNvbWUgY2FzZXMsIGEgcmVjb3JkIG5lZWRzIHRvIGJlIG92ZXJyaWRlbi4KKyAg
ICAgICAgSW4gdGhhdCBjYXNlLCBhcyBwZXIgdGhlIHNwZWNpZmljYXRpb24sIG9ubHkgdGhlIGRh
dGEgcmVsYXRlZCB0byB0aGUgcmVzcG9uc2UgaXMgdG8gYmUgbW9kaWZpZWQuCisgICAgICAgIFRo
aXMgcmVxdWlyZXMgcmVhZGluZyB0aGUgcmVjb3JkIHJlcXVlc3QgZGF0YSBvbiBkaXNrIGJlZm9y
ZSBhY3R1YWxseSB3cml0aW5nIHRoZSB3aG9sZSByZWNvcmQgYWdhaW4uCisgICAgICAgIFRoaXMg
aXMgaW1wbGVtZW50ZWQgaW4gdXBkYXRlUmVjb3JkVG9EaXNrLgorCisgICAgICAgIFRoZSBDYWNo
ZSBvYmplY3QgaXMgZGVsZWdhdGluZyBhbGwgcmVjb3JkIHdyaXRpbmcvcmVhZGluZyB0YXNrcyB0
byBpdHMgQ2FjaGVzIG9iamVjdC4KKyAgICAgICAgVGhlIENhY2hlcyBvYmplY3QgaXMgcmVzcG9u
c2libGUgdG8gaGFuZGxlIHBlcnNpc3RlbnQvcHJpdmF0ZSBzZXNzaW9ucy4KKworICAgICAgICAq
IE5ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OkNhY2hlU3RvcmFnZTo6RW5naW5lOjpyZXRyaWV2ZVJlY29yZHMpOiBNYWtpbmcgc3Vy
ZSBDYWNoZSBvYmplY3QgaXMgb3BlbmVkLgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6
OkVuZ2luZTo6cmVhZENhY2hlKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFn
ZTo6RW5naW5lOjp1bmxvY2spOiBEaXNwb3NpbmcgdGhlIGNhY2hlIHdpdGhvdXQgZ29pbmcgdGhy
b3VnaCBpbml0aWFsaXppbmcgaXQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2Fj
aGVTdG9yYWdlRW5naW5lQ2FjaGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6
OmNvbXB1dGVLZXlVUkwpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OnF1ZXJ5Q2Fj
aGUpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OnVwZGF0ZVZhcnlJbmZvcm1hdGlv
bik6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OnRvUmVjb3JkSW5mb3Jt
YXRpb24pOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjpDYWNoZSk6Cisg
ICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6Om9wZW4pOgorICAgICAgICAoV2Vi
S2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjpmaW5pc2hPcGVuaW5nKToKKyAgICAgICAgKFdlYktp
dDo6Q2FjaGVTdG9yYWdlOjpSZWFkUmVjb3JkVGFza0NvdW50ZXI6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6UmVhZFJlY29yZFRhc2tDb3VudGVyOjp+UmVhZFJlY29y
ZFRhc2tDb3VudGVyKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpSZWFkUmVjb3Jk
VGFza0NvdW50ZXI6OmFwcGVuZFJlY29yZCk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFn
ZTo6UmVhZFJlY29yZFRhc2tDb3VudGVyOjpSZWFkUmVjb3JkVGFza0NvdW50ZXIpOgorICAgICAg
ICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjpyZXRyaWV2ZVJlY29yZCk6CisgICAgICAg
IChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OnJldHJpZXZlUmVjb3Jkcyk6CisgICAgICAg
IChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OmFkZFJlY29yZCk6CisgICAgICAgIChXZWJL
aXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OnJlY29yZHNGcm9tVVJMKToKKyAgICAgICAgKFdlYktp
dDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6cmVjb3Jkc0Zyb21VUkwgY29uc3QpOgorICAgICAgICAo
V2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkFzeW5jaHJvbm91c1B1dFRhc2tDb3VudGVyOjpjcmVhdGUp
OgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkFzeW5jaHJvbm91c1B1dFRhc2tDb3Vu
dGVyOjp+QXN5bmNocm9ub3VzUHV0VGFza0NvdW50ZXIpOgorICAgICAgICAoV2ViS2l0OjpDYWNo
ZVN0b3JhZ2U6OkFzeW5jaHJvbm91c1B1dFRhc2tDb3VudGVyOjpvbkNvbXBsZXRpb24pOgorICAg
ICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkFzeW5jaHJvbm91c1B1dFRhc2tDb3VudGVyOjpz
ZXRFcnJvcik6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OnB1dCk6Cisg
ICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OnJlbW92ZSk6CisgICAgICAgIChX
ZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OnJlbW92ZUZyb21SZWNvcmRMaXN0KToKKyAgICAg
ICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6d3JpdGVSZWNvcmRUb0Rpc2spOgorICAg
ICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjp1cGRhdGVSZWNvcmRUb0Rpc2spOgor
ICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjpyZWFkUmVjb3JkRnJvbURpc2sp
OgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjpyZW1vdmVSZWNvcmRGcm9t
RGlzayk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OmVuY29kZSk6Cisg
ICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6ZGVjb2RlUmVjb3JkSGVhZGVyKToKKyAgICAg
ICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6ZGVjb2RlKToKKyAgICAgICAgKFdlYktp
dDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6a2V5cyBjb25zdCk6CisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUuaDoKKyAgICAgICAgKFdlYktpdDo6
Q2FjaGVTdG9yYWdlOjpDYWNoZTo6aXNPcGVuZWQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpD
YWNoZVN0b3JhZ2U6OkNhY2hlOjp1bmlxdWVOYW1lIGNvbnN0KToKKyAgICAgICAgKiBOZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJLaXQ6
OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjpvcGVuKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9y
YWdlOjpDYWNoZXM6OnJlbW92ZSk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2Fj
aGVzOjpkaXNwb3NlKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjplbmNvZGVDYWNo
ZU5hbWVzKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpkZWNvZGVDYWNoZXNOYW1l
cyk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjpyZWFkQ2FjaGVzRnJv
bURpc2spOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6cmVhZFJlY29y
ZHNMaXN0KToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6OndyaXRlUmVj
b3JkKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6OnJlYWRSZWNvcmQp
OgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6cmVtb3ZlUmVjb3JkKToK
KyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6OmNsZWFyTWVtb3J5UmVwcmVz
ZW50YXRpb24pOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6c2FsdCBj
b25zdCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5l
Q2FjaGVzLmg6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjpzaG91bGRQ
ZXJzaXN0IGNvbnN0KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVTdG9yYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpTdG9yYWdlOjpz
dG9yZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFn
ZS5oOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlN0b3JhZ2U6OndyaXRlV2l0aG91
dFdhaXRpbmcpOgorCisyMDE3LTA5LTEzICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNv
bT4KKwogICAgICAgICBJbnRlcm5hbHMgY2xlYXJDYWNoZVN0b3JhZ2VNZW1vcnlSZXByZXNlbnRh
dGlvbiBzaG91bGQgcmV0dXJuIGEgUHJvbWlzZQogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc2ODE4CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lLmNwcCBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lLmNwcAppbmRleCA1ODMy
YzFhMTE3OTVlOWZjZDhiMmYxN2FiOGNmNTdmNmZlZmNjMzBiLi40MDhmNjJiMWNjYjRmZmI4M2U5
ZWExNzk4NmQzNmQwNGQzZjk5ZTIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmUuY3BwCkBAIC0xMzIsOCArMTMy
LDcgQEAgdm9pZCBFbmdpbmU6OnJldHJpZXZlUmVjb3Jkcyh1aW50NjRfdCBjYWNoZUlkZW50aWZp
ZXIsIFdlYkNvcmU6OlVSTCYmIHVybCwgUmVjb3IKICAgICAgICAgICAgIGNhbGxiYWNrKG1ha2VV
bmV4cGVjdGVkKHJlc3VsdC5lcnJvcigpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KLQotICAgICAgICBjYWxsYmFjayhyZXN1bHQudmFsdWUoKS5nZXQoKS5yZXRyaWV2ZVJlY29y
ZHModXJsKSk7CisgICAgICAgIHJlc3VsdC52YWx1ZSgpLmdldCgpLnJldHJpZXZlUmVjb3Jkcyh1
cmwsIFdURk1vdmUoY2FsbGJhY2spKTsKICAgICB9KTsKIH0KIApAQCAtMjE3LDEyICsyMTYsMjgg
QEAgdm9pZCBFbmdpbmU6OnJlYWRDYWNoZXNGcm9tRGlzayhjb25zdCBTdHJpbmcmIG9yaWdpbiwg
Q2FjaGVzQ2FsbGJhY2smJiBjYWxsYmFjaykKIAogdm9pZCBFbmdpbmU6OnJlYWRDYWNoZSh1aW50
NjRfdCBjYWNoZUlkZW50aWZpZXIsIENhY2hlQ2FsbGJhY2smJiBjYWxsYmFjaykKIHsKLSAgICAv
LyBGSVhNRTogSW1wbGVtZW50IHJlYWRpbmcuCiAgICAgYXV0byogY2FjaGUgPSB0aGlzLT5jYWNo
ZShjYWNoZUlkZW50aWZpZXIpOwogICAgIGlmICghY2FjaGUpIHsKICAgICAgICAgY2FsbGJhY2so
bWFrZVVuZXhwZWN0ZWQoRXJyb3I6OkludGVybmFsKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CisgICAgaWYgKCFjYWNoZS0+aXNPcGVuZWQoKSkgeworICAgICAgICBjYWNoZS0+b3BlbihbdGhp
cywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjYWNoZUlkZW50aWZpZXIsIGNhbGxi
YWNrID0gV1RGTW92ZShjYWxsYmFjayldKHN0ZDo6b3B0aW9uYWw8RXJyb3I+JiYgZXJyb3IpIG11
dGFibGUgeworICAgICAgICAgICAgaWYgKGVycm9yKSB7CisgICAgICAgICAgICAgICAgY2FsbGJh
Y2sobWFrZVVuZXhwZWN0ZWQoZXJyb3IudmFsdWUoKSkpOworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYXV0byogY2FjaGUgPSB0aGlzLT5jYWNo
ZShjYWNoZUlkZW50aWZpZXIpOworICAgICAgICAgICAgaWYgKCFjYWNoZSkgeworICAgICAgICAg
ICAgICAgIGNhbGxiYWNrKG1ha2VVbmV4cGVjdGVkKEVycm9yOjpJbnRlcm5hbCkpOworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFTU0VSVChjYWNo
ZS0+aXNPcGVuZWQoKSk7CisgICAgICAgICAgICBjYWxsYmFjayhzdGQ6OnJlZmVyZW5jZV93cmFw
cGVyPENhY2hlPiB7ICpjYWNoZSB9KTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CiAgICAgY2FsbGJhY2soc3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxDYWNoZT4geyAqY2FjaGUg
fSk7CiB9CiAKQEAgLTMyOCwxMiArMzQzLDExIEBAIHZvaWQgRW5naW5lOjp1bmxvY2sodWludDY0
X3QgY2FjaGVJZGVudGlmaWVyKQogICAgIGlmICgtLWxvY2tDb3VudC0+dmFsdWUpCiAgICAgICAg
IHJldHVybjsKIAotICAgIHJlYWRDYWNoZShjYWNoZUlkZW50aWZpZXIsIFt0aGlzXShDYWNoZU9y
RXJyb3ImJiByZXN1bHQpIG11dGFibGUgewotICAgICAgICBpZiAoIXJlc3VsdC5oYXNWYWx1ZSgp
KQotICAgICAgICAgICAgcmV0dXJuOworICAgIGF1dG8qIGNhY2hlID0gdGhpcy0+Y2FjaGUoY2Fj
aGVJZGVudGlmaWVyKTsKKyAgICBpZiAoIWNhY2hlKQorICAgICAgICByZXR1cm47CiAKLSAgICAg
ICAgcmVzdWx0LnZhbHVlKCkuZ2V0KCkuZGlzcG9zZSgpOwotICAgIH0pOworICAgIGNhY2hlLT5k
aXNwb3NlKCk7CiB9CiAKIFN0cmluZyBFbmdpbmU6OnJlcHJlc2VudGF0aW9uKCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5l
Q2FjaGUuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3Jh
Z2VFbmdpbmVDYWNoZS5jcHAKaW5kZXggNDgxYWRkN2VjY2IxYzVhMjUyM2VlYWY4MmI2NjRiNzNk
ZmVhNjg1ZS4uMGI2YWQ4YTdhMjc2MjA0OTFlYTVjYTdiNTE3YmJjOTE5NzA3MjAxMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdp
bmVDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNo
ZVN0b3JhZ2VFbmdpbmVDYWNoZS5jcHAKQEAgLTI3LDE1ICsyNywxNiBAQAogI2luY2x1ZGUgIkNh
Y2hlU3RvcmFnZUVuZ2luZS5oIgogCiAjaW5jbHVkZSAiQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVz
LmgiCisjaW5jbHVkZSAiTmV0d29ya0NhY2hlQ29kZXJzLmgiCiAjaW5jbHVkZSAiTmV0d29ya0Nh
Y2hlSU9DaGFubmVsLmgiCiAjaW5jbHVkZSAiTmV0d29ya0NhY2hlS2V5LmgiCiAjaW5jbHVkZSAi
TmV0d29ya1Byb2Nlc3MuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0NhY2hlUXVlcnlPcHRpb25zLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9IVFRQUGFyc2Vycy5oPgogI2luY2x1ZGUgPHBhbC9TZXNzaW9u
SUQuaD4KLSNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvTWFpblRo
cmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9V
VUlELmg+CiAjaW5jbHVkZSA8d3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuaD4KICNp
bmNsdWRlIDx3dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudERlY29kZXIuaD4KICNpbmNsdWRlIDx3
dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudEVuY29kZXIuaD4KQEAgLTUxLDcgKzUyLDE4IEBAIG5h
bWVzcGFjZSBXZWJLaXQgewogCiBuYW1lc3BhY2UgQ2FjaGVTdG9yYWdlIHsKIAotc3RhdGljIGlu
bGluZSBWZWN0b3I8dWludDY0X3Q+IHF1ZXJ5Q2FjaGUoY29uc3QgVmVjdG9yPFJlY29yZERhdGE+
KiByZWNvcmRzLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IENhY2hlUXVl
cnlPcHRpb25zJiBvcHRpb25zKQorc3RhdGljIHN0ZDo6b3B0aW9uYWw8c3RkOjpwYWlyPFJlY29y
ZCwgZG91YmxlPj4gZGVjb2RlUmVjb3JkSGVhZGVyKGNvbnN0IFN0b3JhZ2U6OlJlY29yZCYpOwor
CitzdGF0aWMgaW5saW5lIFN0cmluZyBjb21wdXRlS2V5VVJMKGNvbnN0IFVSTCYgdXJsKQorewor
ICAgIFVSTCBrZXlVUkwgPSB1cmw7CisgICAgaWYgKGtleVVSTC5oYXNRdWVyeSgpKQorICAgICAg
ICBrZXlVUkwuc2V0UXVlcnkoeyB9KTsKKyAgICBrZXlVUkwucmVtb3ZlRnJhZ21lbnRJZGVudGlm
aWVyKCk7CisgICAgcmV0dXJuIGtleVVSTDsKK30KKworc3RhdGljIGlubGluZSBWZWN0b3I8dWlu
dDY0X3Q+IHF1ZXJ5Q2FjaGUoY29uc3QgVmVjdG9yPFJlY29yZEluZm9ybWF0aW9uPiogcmVjb3Jk
cywgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBDYWNoZVF1ZXJ5T3B0aW9u
cyYgb3B0aW9ucykKIHsKICAgICBpZiAoIXJlY29yZHMpCiAgICAgICAgIHJldHVybiB7IH07CkBA
IC02Nyw0NyArNzksNDMgQEAgc3RhdGljIGlubGluZSBWZWN0b3I8dWludDY0X3Q+IHF1ZXJ5Q2Fj
aGUoY29uc3QgVmVjdG9yPFJlY29yZERhdGE+KiByZWNvcmRzLCBjb24KICAgICByZXR1cm4gcmVz
dWx0czsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZVZhcnlJbmZvcm1hdGlvbihSZWNv
cmREYXRhJiByZWNvcmREYXRhKQorc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZVZhcnlJbmZvcm1h
dGlvbihSZWNvcmRJbmZvcm1hdGlvbiYgcmVjb3JkSW5mb3JtYXRpb24sIGNvbnN0IFJlc291cmNl
UmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7Ci0g
ICAgYXV0byB2YXJ5VmFsdWUgPSByZWNvcmREYXRhLmRhdGEtPnJlc3BvbnNlLmh0dHBIZWFkZXJG
aWVsZChXZWJDb3JlOjpIVFRQSGVhZGVyTmFtZTo6VmFyeSk7CisgICAgYXV0byB2YXJ5VmFsdWUg
PSByZXNwb25zZS5odHRwSGVhZGVyRmllbGQoV2ViQ29yZTo6SFRUUEhlYWRlck5hbWU6OlZhcnkp
OwogICAgIGlmICh2YXJ5VmFsdWUuaXNOdWxsKCkpIHsKLSAgICAgICAgcmVjb3JkRGF0YS5oYXNW
YXJ5U3RhciA9IGZhbHNlOwotICAgICAgICByZWNvcmREYXRhLnZhcnlIZWFkZXJzID0geyB9Owor
ICAgICAgICByZWNvcmRJbmZvcm1hdGlvbi5oYXNWYXJ5U3RhciA9IGZhbHNlOworICAgICAgICBy
ZWNvcmRJbmZvcm1hdGlvbi52YXJ5SGVhZGVycyA9IHsgfTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAogICAgIHZhcnlWYWx1ZS5zcGxpdCgnLCcsIGZhbHNlLCBbJl0oU3RyaW5nVmlldyB2aWV3
KSB7Ci0gICAgICAgIGlmICghcmVjb3JkRGF0YS5oYXNWYXJ5U3RhciAmJiBzdHJpcExlYWRpbmdB
bmRUcmFpbGluZ0hUVFBTcGFjZXModmlldykgPT0gIioiKQotICAgICAgICAgICAgcmVjb3JkRGF0
YS5oYXNWYXJ5U3RhciA9IHRydWU7CisgICAgICAgIGlmICghcmVjb3JkSW5mb3JtYXRpb24uaGFz
VmFyeVN0YXIgJiYgc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVFRQU3BhY2VzKHZpZXcpID09ICIq
IikKKyAgICAgICAgICAgIHJlY29yZEluZm9ybWF0aW9uLmhhc1ZhcnlTdGFyID0gdHJ1ZTsKICAg
ICAgICAgU3RyaW5nIGhlYWRlck5hbWUgPSB2aWV3LnRvU3RyaW5nKCk7Ci0gICAgICAgIHJlY29y
ZERhdGEudmFyeUhlYWRlcnMuYWRkKGhlYWRlck5hbWUsIHJlY29yZERhdGEuZGF0YS0+cmVxdWVz
dC5odHRwSGVhZGVyRmllbGQoaGVhZGVyTmFtZSkpOworICAgICAgICByZWNvcmRJbmZvcm1hdGlv
bi52YXJ5SGVhZGVycy5hZGQoaGVhZGVyTmFtZSwgcmVxdWVzdC5odHRwSGVhZGVyRmllbGQoaGVh
ZGVyTmFtZSkpOwogICAgIH0pOwogCi0gICAgaWYgKHJlY29yZERhdGEuaGFzVmFyeVN0YXIpCi0g
ICAgICAgIHJlY29yZERhdGEudmFyeUhlYWRlcnMgPSB7IH07Ci19Ci0KLXN0YXRpYyBpbmxpbmUg
UmVjb3JkIHRvUmVjb3JkKGNvbnN0IFJlY29yZERhdGEmIHJlY29yZCkKLXsKLSAgICByZXR1cm4g
eyByZWNvcmQuaWRlbnRpZmllciwgcmVjb3JkLnVwZGF0ZVJlc3BvbnNlQ291bnRlciwgcmVjb3Jk
LmRhdGEtPnJlcXVlc3RIZWFkZXJzR3VhcmQsIHJlY29yZC5kYXRhLT5yZXF1ZXN0LCByZWNvcmQu
ZGF0YS0+b3B0aW9ucywgcmVjb3JkLmRhdGEtPnJlZmVycmVyLCByZWNvcmQuZGF0YS0+cmVzcG9u
c2VIZWFkZXJzR3VhcmQsIHJlY29yZC5kYXRhLT5yZXNwb25zZSwgY29weVJlc3BvbnNlQm9keShy
ZWNvcmQuZGF0YS0+cmVzcG9uc2VCb2R5KSB9OworICAgIGlmIChyZWNvcmRJbmZvcm1hdGlvbi5o
YXNWYXJ5U3RhcikKKyAgICAgICAgcmVjb3JkSW5mb3JtYXRpb24udmFyeUhlYWRlcnMgPSB7IH07
CiB9CiAKLXN0YXRpYyBpbmxpbmUgUmVjb3JkRGF0YSB0b1JlY29yZERhdGEoUmVjb3JkJiYgcmVj
b3JkKQorUmVjb3JkSW5mb3JtYXRpb24gQ2FjaGU6OnRvUmVjb3JkSW5mb3JtYXRpb24oY29uc3Qg
UmVjb3JkJiByZWNvcmQpCiB7Ci0gICAgYXV0byB1cmwgPSByZWNvcmQucmVxdWVzdC51cmwoKTsK
LSAgICBSZWNvcmREYXRhOjpEYXRhIGRhdGEgPSB7IHJlY29yZC5yZXF1ZXN0SGVhZGVyc0d1YXJk
LCBXVEZNb3ZlKHJlY29yZC5yZXF1ZXN0KSwgV1RGTW92ZShyZWNvcmQub3B0aW9ucyksIFdURk1v
dmUocmVjb3JkLnJlZmVycmVyKSwgV1RGTW92ZShyZWNvcmQucmVzcG9uc2VIZWFkZXJzR3VhcmQp
LCBXVEZNb3ZlKHJlY29yZC5yZXNwb25zZSksIFdURk1vdmUocmVjb3JkLnJlc3BvbnNlQm9keSkg
fTsKLSAgICBSZWNvcmREYXRhIHJlY29yZERhdGEgPSB7IHsgfSwgbW9ub3RvbmljYWxseUluY3Jl
YXNpbmdUaW1lTVMoKSwgcmVjb3JkLmlkZW50aWZpZXIsIDAsIHVybCwgZmFsc2UsIHsgfSwgV1RG
TW92ZShkYXRhKSB9OworICAgIGF1dG8gaW5zZXJ0aW9uVGltZSA9IG1vbm90b25pY2FsbHlJbmNy
ZWFzaW5nVGltZU1TKCk7CisgICAgYXV0byBrZXkgPSBLZXkgeyBBU0NJSUxpdGVyYWwoInJlY29y
ZCIpLCBTdHJpbmcgeyBtX3VuaXF1ZU5hbWUgfSwgU3RyaW5nKCksIGNyZWF0ZUNhbm9uaWNhbFVV
SURTdHJpbmcoKSwgbV9jYWNoZXMuc2FsdCgpIH07CiAKLSAgICB1cGRhdGVWYXJ5SW5mb3JtYXRp
b24ocmVjb3JkRGF0YSk7CisgICAgUmVjb3JkSW5mb3JtYXRpb24gcmVjb3JkSW5mb3JtYXRpb24g
PSB7IFdURk1vdmUoa2V5KSwgaW5zZXJ0aW9uVGltZSwgcmVjb3JkLmlkZW50aWZpZXIsIDAgLCBy
ZWNvcmQucmVxdWVzdC51cmwoKSwgZmFsc2UsIHsgfSB9OworICAgIHVwZGF0ZVZhcnlJbmZvcm1h
dGlvbihyZWNvcmRJbmZvcm1hdGlvbiwgcmVjb3JkLnJlcXVlc3QsIHJlY29yZC5yZXNwb25zZSk7
CiAKLSAgICByZXR1cm4gcmVjb3JkRGF0YTsKKyAgICByZXR1cm4gcmVjb3JkSW5mb3JtYXRpb247
CiB9CiAKLUNhY2hlOjpDYWNoZShDYWNoZXMmIGNhY2hlcywgdWludDY0X3QgaWRlbnRpZmllciwg
U3RhdGUgc3RhdGUsIFN0cmluZyYmIG5hbWUpCitDYWNoZTo6Q2FjaGUoQ2FjaGVzJiBjYWNoZXMs
IHVpbnQ2NF90IGlkZW50aWZpZXIsIFN0YXRlIHN0YXRlLCBTdHJpbmcmJiBuYW1lLCBTdHJpbmcm
JiB1bmlxdWVOYW1lKQogICAgIDogbV9jYWNoZXMoY2FjaGVzKQogICAgICwgbV9zdGF0ZShzdGF0
ZSkKICAgICAsIG1faWRlbnRpZmllcihpZGVudGlmaWVyKQogICAgICwgbV9uYW1lKFdURk1vdmUo
bmFtZSkpCisgICAgLCBtX3VuaXF1ZU5hbWUoV1RGTW92ZSh1bmlxdWVOYW1lKSkKIHsKIH0KIApA
QCAtMTIyLDcgKzEzMCwxNSBAQCB2b2lkIENhY2hlOjpjbGVhck1lbW9yeVJlcHJlc2VudGF0aW9u
KCkKICAgICBtX25leHRSZWNvcmRJZGVudGlmaWVyID0gMDsKICAgICBtX3N0YXRlID0gU3RhdGU6
OlVuaW5pdGlhbGl6ZWQ7CiB9Ci0gCisKK3N0cnVjdCBUcmF2ZXJzYWxSZXN1bHQgeworICAgIFJl
ZjxDYWNoZXM+IGNhY2hlczsKKyAgICB1aW50NjRfdCBjYWNoZUlkZW50aWZpZXI7CisgICAgQ29t
cGxldGlvbkNhbGxiYWNrIGNhbGxiYWNrOworICAgIEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8UmVj
b3JkSW5mb3JtYXRpb24+PiByZWNvcmRzOworICAgIFZlY3RvcjxLZXk+IGZhaWxlZFJlY29yZHM7
Cit9OworCiB2b2lkIENhY2hlOjpvcGVuKENvbXBsZXRpb25DYWxsYmFjayYmIGNhbGxiYWNrKQog
ewogICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpPcGVuKSB7CkBAIC0xMzQsMTggKzE1MCw1NCBA
QCB2b2lkIENhY2hlOjpvcGVuKENvbXBsZXRpb25DYWxsYmFjayYmIGNhbGxiYWNrKQogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgIG1fc3RhdGUgPSBTdGF0ZTo6T3BlbmluZzsKLSAgICByZWFk
UmVjb3Jkc0xpc3QoW2NhY2hlcyA9IG1ha2VSZWYobV9jYWNoZXMpLCBpZGVudGlmaWVyID0gbV9p
ZGVudGlmaWVyLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShzdGQ6Om9wdGlvbmFsPEVy
cm9yPiYmIGVycm9yKSBtdXRhYmxlIHsKLSAgICAgICAgYXV0byogY2FjaGUgPSBjYWNoZXMtPmZp
bmQoaWRlbnRpZmllcik7Ci0gICAgICAgIGlmICghY2FjaGUpIHsKLSAgICAgICAgICAgIGNhbGxi
YWNrKEVycm9yOjpJbnRlcm5hbCk7CisgICAgVHJhdmVyc2FsUmVzdWx0IHRyYXZlcnNhbFJlc3Vs
dCA9IHsgbWFrZVJlZihtX2NhY2hlcyksIG1faWRlbnRpZmllciwgV1RGTW92ZShjYWxsYmFjayks
IHsgfSwgeyB9IH07CisgICAgbV9jYWNoZXMucmVhZFJlY29yZHNMaXN0KCp0aGlzLCBbdHJhdmVy
c2FsUmVzdWx0ID0gV1RGTW92ZSh0cmF2ZXJzYWxSZXN1bHQpXShjb25zdCBhdXRvKiBzdG9yYWdl
UmVjb3JkLCBjb25zdCBhdXRvJikgbXV0YWJsZSB7CisgICAgICAgIGlmICghc3RvcmFnZVJlY29y
ZCkgeworICAgICAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt0cmF2ZXJzYWxSZXN1
bHQgPSBXVEZNb3ZlKHRyYXZlcnNhbFJlc3VsdCldKCkgbXV0YWJsZSB7CisgICAgICAgICAgICAg
ICAgZm9yIChhdXRvJiBrZXkgOiB0cmF2ZXJzYWxSZXN1bHQuZmFpbGVkUmVjb3JkcykKKyAgICAg
ICAgICAgICAgICAgICAgdHJhdmVyc2FsUmVzdWx0LmNhY2hlcy0+cmVtb3ZlUmVjb3JkKGtleSk7
CisKKyAgICAgICAgICAgICAgICBhdXRvKiBjYWNoZSA9IHRyYXZlcnNhbFJlc3VsdC5jYWNoZXMt
PmZpbmQodHJhdmVyc2FsUmVzdWx0LmNhY2hlSWRlbnRpZmllcik7CisgICAgICAgICAgICAgICAg
aWYgKCFjYWNoZSkgeworICAgICAgICAgICAgICAgICAgICB0cmF2ZXJzYWxSZXN1bHQuY2FsbGJh
Y2soRXJyb3I6OkludGVybmFsKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYWNoZS0+bV9yZWNvcmRzID0gV1RGTW92ZSh0
cmF2ZXJzYWxSZXN1bHQucmVjb3Jkcyk7CisgICAgICAgICAgICAgICAgY2FjaGUtPmZpbmlzaE9w
ZW5pbmcoV1RGTW92ZSh0cmF2ZXJzYWxSZXN1bHQuY2FsbGJhY2spLCBzdGQ6Om51bGxvcHQpOwor
ICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAg
Y2FjaGUtPmZpbmlzaE9wZW5pbmcoV1RGTW92ZShjYWxsYmFjayksIFdURk1vdmUoZXJyb3IpKTsK
KworICAgICAgICBhdXRvIGRlY29kZWQgPSBkZWNvZGVSZWNvcmRIZWFkZXIoKnN0b3JhZ2VSZWNv
cmQpOworICAgICAgICBpZiAoIWRlY29kZWQpIHsKKyAgICAgICAgICAgIHRyYXZlcnNhbFJlc3Vs
dC5mYWlsZWRSZWNvcmRzLmFwcGVuZChzdG9yYWdlUmVjb3JkLT5rZXkpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgYXV0byYgcmVjb3JkID0gZGVjb2RlZC0+Zmly
c3Q7CisgICAgICAgIGF1dG8gaW5zZXJ0aW9uVGltZSA9IGRlY29kZWQtPnNlY29uZDsKKworICAg
ICAgICBSZWNvcmRJbmZvcm1hdGlvbiByZWNvcmRJbmZvcm1hdGlvbiA9IHsgc3RvcmFnZVJlY29y
ZC0+a2V5LCBpbnNlcnRpb25UaW1lLCAwLCAwLCByZWNvcmQucmVxdWVzdC51cmwoKSwgZmFsc2Us
IHsgfSB9OworICAgICAgICB1cGRhdGVWYXJ5SW5mb3JtYXRpb24ocmVjb3JkSW5mb3JtYXRpb24s
IHJlY29yZC5yZXF1ZXN0LCByZWNvcmQucmVzcG9uc2UpOworCisgICAgICAgIGF1dG8mIHNhbWVV
UkxSZWNvcmRzID0gdHJhdmVyc2FsUmVzdWx0LnJlY29yZHMuZW5zdXJlKGNvbXB1dGVLZXlVUkwo
cmVjb3JkSW5mb3JtYXRpb24udXJsKSwgW10geyByZXR1cm4gVmVjdG9yPFJlY29yZEluZm9ybWF0
aW9uPiB7IH07IH0pLml0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgc2FtZVVSTFJlY29yZHMuYXBw
ZW5kKFdURk1vdmUocmVjb3JkSW5mb3JtYXRpb24pKTsKICAgICB9KTsKIH0KIAogdm9pZCBDYWNo
ZTo6ZmluaXNoT3BlbmluZyhDb21wbGV0aW9uQ2FsbGJhY2smJiBjYWxsYmFjaywgc3RkOjpvcHRp
b25hbDxFcnJvcj4mJiBlcnJvcikKIHsKKyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBl
cjxSZWNvcmRJbmZvcm1hdGlvbj4+IHJlY29yZHM7CisgICAgZm9yIChhdXRvJiB2YWx1ZSA6IG1f
cmVjb3Jkcy52YWx1ZXMoKSkgeworICAgICAgICBmb3IgKGF1dG8mIHJlY29yZCA6IHZhbHVlKQor
ICAgICAgICAgICAgcmVjb3Jkcy5hcHBlbmQocmVjb3JkKTsKKyAgICB9CisgICAgc3RkOjpzb3J0
KHJlY29yZHMuYmVnaW4oKSwgcmVjb3Jkcy5lbmQoKSwgWyZdKGNvbnN0IGF1dG8mIGEsIGNvbnN0
IGF1dG8mIGIpIHsKKyAgICAgICAgcmV0dXJuIGEuZ2V0KCkuaW5zZXJ0aW9uVGltZSA8IGIuZ2V0
KCkuaW5zZXJ0aW9uVGltZTsKKyAgICB9KTsKKyAgICBmb3IgKGF1dG8mIHJlY29yZCA6IHJlY29y
ZHMpCisgICAgICAgIHJlY29yZC5nZXQoKS5pZGVudGlmaWVyID0gKyttX25leHRSZWNvcmRJZGVu
dGlmaWVyOworCiAgICAgaWYgKGVycm9yKSB7CiAgICAgICAgIG1fc3RhdGUgPSBTdGF0ZTo6VW5p
bml0aWFsaXplZDsKICAgICAgICAgY2FsbGJhY2soZXJyb3IudmFsdWUoKSk7CkBAIC0xNjIsNTIg
KzIxNCw4OSBAQCB2b2lkIENhY2hlOjpmaW5pc2hPcGVuaW5nKENvbXBsZXRpb25DYWxsYmFjayYm
IGNhbGxiYWNrLCBzdGQ6Om9wdGlvbmFsPEVycm9yPiYmCiAgICAgICAgIGNhbGxiYWNrKHN0ZDo6
bnVsbG9wdCk7CiB9CiAKLVZlY3RvcjxSZWNvcmQ+IENhY2hlOjpyZXRyaWV2ZVJlY29yZHMoY29u
c3QgVVJMJiB1cmwpIGNvbnN0CitjbGFzcyBSZWFkUmVjb3JkVGFza0NvdW50ZXIgOiBwdWJsaWMg
VGhyZWFkU2FmZVJlZkNvdW50ZWQ8UmVhZFJlY29yZFRhc2tDb3VudGVyPiB7CitwdWJsaWM6Cisg
ICAgdXNpbmcgUmVhZFJlY29yZHNDYWxsYmFjayA9IFdURjo6RnVuY3Rpb248dm9pZChWZWN0b3I8
UmVjb3JkPiYmLCBWZWN0b3I8dWludDY0X3Q+JiYpPjsKKyAgICBzdGF0aWMgUmVmUHRyPFJlYWRS
ZWNvcmRUYXNrQ291bnRlcj4gY3JlYXRlKFJlYWRSZWNvcmRzQ2FsbGJhY2smJiBjYWxsYmFjaykg
eyByZXR1cm4gYWRvcHRSZWYobmV3IFJlYWRSZWNvcmRUYXNrQ291bnRlcihXVEZNb3ZlKGNhbGxi
YWNrKSkpOyB9CisKKyAgICB+UmVhZFJlY29yZFRhc2tDb3VudGVyKCkKKyAgICB7CisgICAgICAg
IGlmICghbV9jYWxsYmFjaykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgc3RkOjpzb3J0
KG1fcmVjb3Jkcy5iZWdpbigpLCBtX3JlY29yZHMuZW5kKCksIFsmXSAoY29uc3QgYXV0byYgYSwg
Y29uc3QgYXV0byYgYikgeworICAgICAgICAgICAgcmV0dXJuIGEuaWRlbnRpZmllciA8IGIuaWRl
bnRpZmllcjsKKyAgICAgICAgfSk7CisgICAgICAgIG1fY2FsbGJhY2soV1RGTW92ZShtX3JlY29y
ZHMpLCBXVEZNb3ZlKG1fZmFpbGVkUmVjb3JkcykpOworICAgIH0KKworICAgIHZvaWQgYXBwZW5k
UmVjb3JkKEV4cGVjdGVkPFJlY29yZCwgRXJyb3I+JiYgcmVzdWx0LCB1aW50NjRfdCByZWNvcmRJ
ZGVudGlmaWVyLCB1aW50NjRfdCB1cGRhdGVDb3VudGVyKQorICAgIHsKKyAgICAgICAgaWYgKCFy
ZXN1bHQuaGFzVmFsdWUoKSkgeworICAgICAgICAgICAgbV9mYWlsZWRSZWNvcmRzLmFwcGVuZChy
ZWNvcmRJZGVudGlmaWVyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICByZXN1bHQudmFsdWUoKS5pZGVudGlmaWVyID0gcmVjb3JkSWRlbnRpZmllcjsKKyAgICAgICAg
cmVzdWx0LnZhbHVlKCkudXBkYXRlUmVzcG9uc2VDb3VudGVyID0gdXBkYXRlQ291bnRlcjsKKyAg
ICAgICAgbV9yZWNvcmRzLmFwcGVuZChXVEZNb3ZlKHJlc3VsdC52YWx1ZSgpKSk7CisgICAgfQor
Citwcml2YXRlOgorICAgIGV4cGxpY2l0IFJlYWRSZWNvcmRUYXNrQ291bnRlcihSZWFkUmVjb3Jk
c0NhbGxiYWNrJiYgY2FsbGJhY2spIDogbV9jYWxsYmFjayhXVEZNb3ZlKGNhbGxiYWNrKSkgeyB9
CisKKyAgICBSZWFkUmVjb3Jkc0NhbGxiYWNrIG1fY2FsbGJhY2s7CisgICAgVmVjdG9yPFJlY29y
ZD4gbV9yZWNvcmRzOworICAgIFZlY3Rvcjx1aW50NjRfdD4gbV9mYWlsZWRSZWNvcmRzOworfTsK
Kwordm9pZCBDYWNoZTo6cmV0cmlldmVSZWNvcmQoY29uc3QgUmVjb3JkSW5mb3JtYXRpb24mIHJl
Y29yZCwgUmVmUHRyPFJlYWRSZWNvcmRUYXNrQ291bnRlcj4mIHRhc2tDb3VudGVyKQoreworICAg
IHJlYWRSZWNvcmRGcm9tRGlzayhyZWNvcmQsIFtjYWNoZXMgPSBtYWtlUmVmKG1fY2FjaGVzKSwg
aWRlbnRpZmllciA9IG1faWRlbnRpZmllciwgcmVjb3JkSWRlbnRpZmllciA9IHJlY29yZC5pZGVu
dGlmaWVyLCB1cGRhdGVDb3VudGVyID0gcmVjb3JkLnVwZGF0ZVJlc3BvbnNlQ291bnRlciwgdGFz
a0NvdW50ZXJdKEV4cGVjdGVkPFJlY29yZCwgRXJyb3I+JiYgcmVzdWx0KSBtdXRhYmxlIHsKKyAg
ICAgICAgYXV0byogY2FjaGUgPSBjYWNoZXMtPmZpbmQoaWRlbnRpZmllcik7CisgICAgICAgIGlm
ICghY2FjaGUpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHRhc2tDb3VudGVyLT5hcHBl
bmRSZWNvcmQoV1RGTW92ZShyZXN1bHQpLCByZWNvcmRJZGVudGlmaWVyLCB1cGRhdGVDb3VudGVy
KTsKKyAgICB9KTsKK30KKwordm9pZCBDYWNoZTo6cmV0cmlldmVSZWNvcmRzKGNvbnN0IFVSTCYg
dXJsLCBSZWNvcmRzQ2FsbGJhY2smJiBjYWxsYmFjaykKIHsKKyAgICBBU1NFUlQobV9zdGF0ZSA9
PSBTdGF0ZTo6T3Blbik7CisKKyAgICBhdXRvIHRhc2tDb3VudGVyID0gUmVhZFJlY29yZFRhc2tD
b3VudGVyOjpjcmVhdGUoW2NhY2hlcyA9IG1ha2VSZWYobV9jYWNoZXMpLCBpZGVudGlmaWVyID0g
bV9pZGVudGlmaWVyLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShWZWN0b3I8UmVjb3Jk
PiYmIHJlY29yZHMsIFZlY3Rvcjx1aW50NjRfdD4mJiBmYWlsZWRSZWNvcmRJZGVudGlmaWVycykg
bXV0YWJsZSB7CisgICAgICAgIGF1dG8qIGNhY2hlID0gY2FjaGVzLT5maW5kKGlkZW50aWZpZXIp
OworICAgICAgICBpZiAoY2FjaGUpCisgICAgICAgICAgICBjYWNoZS0+cmVtb3ZlRnJvbVJlY29y
ZExpc3QoZmFpbGVkUmVjb3JkSWRlbnRpZmllcnMpOworICAgICAgICBjYWxsYmFjayhXVEZNb3Zl
KHJlY29yZHMpKTsKKyAgICB9KTsKKwogICAgIGlmICh1cmwuaXNOdWxsKCkpIHsKLSAgICAgICAg
VmVjdG9yPFJlY29yZD4gcmVzdWx0OwogICAgICAgICBmb3IgKGF1dG8mIHJlY29yZHMgOiBtX3Jl
Y29yZHMudmFsdWVzKCkpIHsKICAgICAgICAgICAgIGZvciAoYXV0byYgcmVjb3JkIDogcmVjb3Jk
cykKLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHRvUmVjb3JkKHJlY29yZCkpOworICAg
ICAgICAgICAgICAgIHJldHJpZXZlUmVjb3JkKHJlY29yZCwgdGFza0NvdW50ZXIpOwogICAgICAg
ICB9Ci0gICAgICAgIHN0ZDo6c29ydChyZXN1bHQuYmVnaW4oKSwgcmVzdWx0LmVuZCgpLCBbXShj
b25zdCBhdXRvJiBhLCBjb25zdCBhdXRvJiBiKSB7Ci0gICAgICAgICAgICByZXR1cm4gYS5pZGVu
dGlmaWVyIDwgYi5pZGVudGlmaWVyOwotICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGNvbnN0IGF1dG8qIHJlY29yZHMgPSBy
ZWNvcmRzRnJvbVVSTCh1cmwpOworICAgIGF1dG8qIHJlY29yZHMgPSByZWNvcmRzRnJvbVVSTCh1
cmwpOwogICAgIGlmICghcmVjb3JkcykKLSAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgcmV0
dXJuOwogCi0gICAgVmVjdG9yPFJlY29yZD4gcmVzdWx0OwotICAgIHJlc3VsdC5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KHJlY29yZHMtPnNpemUoKSk7CiAgICAgZm9yIChhdXRvJiByZWNvcmQgOiAq
cmVjb3JkcykKLSAgICAgICAgcmVzdWx0LmFwcGVuZCh0b1JlY29yZChyZWNvcmQpKTsKLSAgICBy
ZXR1cm4gcmVzdWx0OworICAgICAgICByZXRyaWV2ZVJlY29yZChyZWNvcmQsIHRhc2tDb3VudGVy
KTsKIH0KIAotc3RhdGljIGlubGluZSBTdHJpbmcgY29tcHV0ZUtleVVSTChjb25zdCBVUkwmIHVy
bCkKLXsKLSAgICBVUkwga2V5VVJMID0gdXJsOwotICAgIGlmIChrZXlVUkwuaGFzUXVlcnkoKSkK
LSAgICAgICAga2V5VVJMLnNldFF1ZXJ5KHsgfSk7Ci0gICAga2V5VVJMLnJlbW92ZUZyYWdtZW50
SWRlbnRpZmllcigpOwotICAgIHJldHVybiBrZXlVUkw7Ci19Ci0KLVJlY29yZERhdGEmIENhY2hl
OjphZGRSZWNvcmQoVmVjdG9yPFJlY29yZERhdGE+KiByZWNvcmRzLCBSZWNvcmQmJiByZWNvcmQp
CitSZWNvcmRJbmZvcm1hdGlvbiYgQ2FjaGU6OmFkZFJlY29yZChWZWN0b3I8UmVjb3JkSW5mb3Jt
YXRpb24+KiByZWNvcmRzLCBjb25zdCBSZWNvcmQmIHJlY29yZCkKIHsKICAgICBpZiAoIXJlY29y
ZHMpIHsKICAgICAgICAgYXV0byBrZXkgPSBjb21wdXRlS2V5VVJMKHJlY29yZC5yZXF1ZXN0LnVy
bCgpKTsKICAgICAgICAgQVNTRVJUKCFtX3JlY29yZHMuY29udGFpbnMoa2V5KSk7Ci0gICAgICAg
IHJlY29yZHMgPSAmbV9yZWNvcmRzLnNldChrZXksIFZlY3RvcjxSZWNvcmREYXRhPiB7IH0pLml0
ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgcmVjb3JkcyA9ICZtX3JlY29yZHMuc2V0KGtleSwgVmVj
dG9yPFJlY29yZEluZm9ybWF0aW9uPiB7IH0pLml0ZXJhdG9yLT52YWx1ZTsKICAgICB9Ci0gICAg
cmVjb3Jkcy0+YXBwZW5kKHRvUmVjb3JkRGF0YShXVEZNb3ZlKHJlY29yZCkpKTsKKyAgICByZWNv
cmRzLT5hcHBlbmQodG9SZWNvcmRJbmZvcm1hdGlvbihyZWNvcmQpKTsKICAgICByZXR1cm4gcmVj
b3Jkcy0+bGFzdCgpOwogfQogCi1WZWN0b3I8UmVjb3JkRGF0YT4qIENhY2hlOjpyZWNvcmRzRnJv
bVVSTChjb25zdCBVUkwmIHVybCkKK1ZlY3RvcjxSZWNvcmRJbmZvcm1hdGlvbj4qIENhY2hlOjpy
ZWNvcmRzRnJvbVVSTChjb25zdCBVUkwmIHVybCkKIHsKICAgICBhdXRvIGl0ZXJhdG9yID0gbV9y
ZWNvcmRzLmZpbmQoY29tcHV0ZUtleVVSTCh1cmwpKTsKICAgICBpZiAoaXRlcmF0b3IgPT0gbV9y
ZWNvcmRzLmVuZCgpKQpAQCAtMjE1LDcgKzMwNCw3IEBAIFZlY3RvcjxSZWNvcmREYXRhPiogQ2Fj
aGU6OnJlY29yZHNGcm9tVVJMKGNvbnN0IFVSTCYgdXJsKQogICAgIHJldHVybiAmaXRlcmF0b3It
PnZhbHVlOwogfQogCi1jb25zdCBWZWN0b3I8UmVjb3JkRGF0YT4qIENhY2hlOjpyZWNvcmRzRnJv
bVVSTChjb25zdCBVUkwmIHVybCkgY29uc3QKK2NvbnN0IFZlY3RvcjxSZWNvcmRJbmZvcm1hdGlv
bj4qIENhY2hlOjpyZWNvcmRzRnJvbVVSTChjb25zdCBVUkwmIHVybCkgY29uc3QKIHsKICAgICBh
dXRvIGl0ZXJhdG9yID0gbV9yZWNvcmRzLmZpbmQoY29tcHV0ZUtleVVSTCh1cmwpKTsKICAgICBp
ZiAoaXRlcmF0b3IgPT0gbV9yZWNvcmRzLmVuZCgpKQpAQCAtMjIzLDkgKzMxMiwzMCBAQCBjb25z
dCBWZWN0b3I8UmVjb3JkRGF0YT4qIENhY2hlOjpyZWNvcmRzRnJvbVVSTChjb25zdCBVUkwmIHVy
bCkgY29uc3QKICAgICByZXR1cm4gJml0ZXJhdG9yLT52YWx1ZTsKIH0KIAorY2xhc3MgQXN5bmNo
cm9ub3VzUHV0VGFza0NvdW50ZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxBc3luY2hyb25vdXNQdXRU
YXNrQ291bnRlcj4geworcHVibGljOgorICAgIHN0YXRpYyBSZWZQdHI8QXN5bmNocm9ub3VzUHV0
VGFza0NvdW50ZXI+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBBc3luY2hyb25vdXNQ
dXRUYXNrQ291bnRlcigpKTsgfQorICAgIH5Bc3luY2hyb25vdXNQdXRUYXNrQ291bnRlcigpCisg
ICAgeworICAgICAgICBpZiAoIW1fY2FsbGJhY2spCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIG1fY2FsbGJhY2soV1RGTW92ZShtX2Vycm9yKSk7CisgICAgfQorCisgICAgdm9pZCBvbkNv
bXBsZXRpb24oQ29tcGxldGlvbkNhbGxiYWNrJiYgY2FsbGJhY2spIHsgbV9jYWxsYmFjayA9IFdU
Rk1vdmUoY2FsbGJhY2spOyB9CisgICAgdm9pZCBzZXRFcnJvcihFcnJvciBlcnJvcikgeyBtX2Vy
cm9yID0gZXJyb3I7IH0KKworcHJpdmF0ZToKKyAgICBzdGQ6Om9wdGlvbmFsPEVycm9yPiBtX2Vy
cm9yOworICAgIENvbXBsZXRpb25DYWxsYmFjayBtX2NhbGxiYWNrOworfTsKKwogdm9pZCBDYWNo
ZTo6cHV0KFZlY3RvcjxSZWNvcmQ+JiYgcmVjb3JkcywgUmVjb3JkSWRlbnRpZmllcnNDYWxsYmFj
ayYmIGNhbGxiYWNrKQogewotICAgIGJvb2wgc2hvdWxkV3JpdGVSZWNvcmRMaXN0IHsgZmFsc2Ug
fTsKKyAgICBBU1NFUlQobV9zdGF0ZSA9PSBTdGF0ZTo6T3Blbik7CisKKyAgICBhdXRvIHRhc2tD
b3VudGVyID0gQXN5bmNocm9ub3VzUHV0VGFza0NvdW50ZXI6OmNyZWF0ZSgpOworCiAgICAgV2Vi
Q29yZTo6Q2FjaGVRdWVyeU9wdGlvbnMgb3B0aW9uczsKICAgICBWZWN0b3I8dWludDY0X3Q+IHJl
Y29yZElkZW50aWZpZXJzOwogICAgIHJlY29yZElkZW50aWZpZXJzLnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkocmVjb3Jkcy5zaXplKCkpOwpAQCAtMjM3LDM0ICszNDcsMjEgQEAgdm9pZCBDYWNoZTo6
cHV0KFZlY3RvcjxSZWNvcmQ+JiYgcmVjb3JkcywgUmVjb3JkSWRlbnRpZmllcnNDYWxsYmFjayYm
IGNhbGxiYWNrKQogICAgICAgICAgICAgcmVjb3JkLmlkZW50aWZpZXIgPSArK21fbmV4dFJlY29y
ZElkZW50aWZpZXI7CiAgICAgICAgICAgICByZWNvcmRJZGVudGlmaWVycy51bmNoZWNrZWRBcHBl
bmQocmVjb3JkLmlkZW50aWZpZXIpOwogCi0gICAgICAgICAgICBzaG91bGRXcml0ZVJlY29yZExp
c3QgPSB0cnVlOwotICAgICAgICAgICAgYXV0byYgcmVjb3JkVG9Xcml0ZSA9IGFkZFJlY29yZChz
YW1lVVJMUmVjb3JkcywgV1RGTW92ZShyZWNvcmQpKTsKLSAgICAgICAgICAgIHdyaXRlUmVjb3Jk
VG9EaXNrKHJlY29yZFRvV3JpdGUpOworICAgICAgICAgICAgYXV0byYgcmVjb3JkVG9Xcml0ZSA9
IGFkZFJlY29yZChzYW1lVVJMUmVjb3JkcywgcmVjb3JkKTsKKyAgICAgICAgICAgIHdyaXRlUmVj
b3JkVG9EaXNrKHJlY29yZFRvV3JpdGUsIFdURk1vdmUocmVjb3JkKSwgdGFza0NvdW50ZXIpOwog
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgYXV0byBpZGVudGlmaWVyID0gbWF0Y2hpbmdS
ZWNvcmRzWzBdOwogICAgICAgICAgICAgYXV0byBwb3NpdGlvbiA9IHNhbWVVUkxSZWNvcmRzLT5m
aW5kTWF0Y2hpbmcoWyZdKGNvbnN0IGF1dG8mIGl0ZW0pIHsgcmV0dXJuIGl0ZW0uaWRlbnRpZmll
ciA9PSBpZGVudGlmaWVyOyB9KTsKICAgICAgICAgICAgIEFTU0VSVChwb3NpdGlvbiAhPSBub3RG
b3VuZCk7CiAgICAgICAgICAgICBpZiAocG9zaXRpb24gIT0gbm90Rm91bmQpIHsKLSAgICAgICAg
ICAgICAgICBhdXRvJiBleGlzdGluZ1JlY29yZCA9ICgqc2FtZVVSTFJlY29yZHMpW3Bvc2l0aW9u
XTsKKyAgICAgICAgICAgICAgICBhdXRvJiBleGlzdGluZ1JlY29yZCA9IHNhbWVVUkxSZWNvcmRz
LT5hdChwb3NpdGlvbik7CiAgICAgICAgICAgICAgICAgcmVjb3JkSWRlbnRpZmllcnMudW5jaGVj
a2VkQXBwZW5kKGlkZW50aWZpZXIpOwotICAgICAgICAgICAgICAgICsrZXhpc3RpbmdSZWNvcmQu
dXBkYXRlUmVzcG9uc2VDb3VudGVyOwotCi0gICAgICAgICAgICAgICAgLy8gRklYTUU6IEhhbmRs
ZSB0aGUgY2FzZSB3aGVyZSBkYXRhIGlzIG51bGwuCi0gICAgICAgICAgICAgICAgQVNTRVJUKGV4
aXN0aW5nUmVjb3JkLmRhdGEpOwotICAgICAgICAgICAgICAgIGV4aXN0aW5nUmVjb3JkLmRhdGEt
PnJlc3BvbnNlSGVhZGVyc0d1YXJkID0gcmVjb3JkLnJlc3BvbnNlSGVhZGVyc0d1YXJkOwotICAg
ICAgICAgICAgICAgIGV4aXN0aW5nUmVjb3JkLmRhdGEtPnJlc3BvbnNlID0gV1RGTW92ZShyZWNv
cmQucmVzcG9uc2UpOwotICAgICAgICAgICAgICAgIGV4aXN0aW5nUmVjb3JkLmRhdGEtPnJlc3Bv
bnNlQm9keSA9IFdURk1vdmUocmVjb3JkLnJlc3BvbnNlQm9keSk7Ci0gICAgICAgICAgICAgICAg
dXBkYXRlVmFyeUluZm9ybWF0aW9uKGV4aXN0aW5nUmVjb3JkKTsKLSAgICAgICAgICAgICAgICB3
cml0ZVJlY29yZFRvRGlzayhleGlzdGluZ1JlY29yZCk7CisgICAgICAgICAgICAgICAgdXBkYXRl
UmVjb3JkVG9EaXNrKGV4aXN0aW5nUmVjb3JkLCBXVEZNb3ZlKHJlY29yZCksIHRhc2tDb3VudGVy
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAotICAgIGlmICghc2hvdWxkV3Jp
dGVSZWNvcmRMaXN0KSB7Ci0gICAgICAgIGNhbGxiYWNrKFdURk1vdmUocmVjb3JkSWRlbnRpZmll
cnMpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICB3cml0ZVJlY29yZHNMaXN0KFtjYWxs
YmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCByZWNvcmRJZGVudGlmaWVycyA9IFdURk1vdmUocmVj
b3JkSWRlbnRpZmllcnMpXShzdGQ6Om9wdGlvbmFsPEVycm9yPiYmIGVycm9yKSBtdXRhYmxlIHsK
KyAgICB0YXNrQ291bnRlci0+b25Db21wbGV0aW9uKFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJh
Y2spLCByZWNvcmRJZGVudGlmaWVycyA9IFdURk1vdmUocmVjb3JkSWRlbnRpZmllcnMpXShzdGQ6
Om9wdGlvbmFsPEVycm9yPiYmIGVycm9yKSBtdXRhYmxlIHsKICAgICAgICAgaWYgKGVycm9yKSB7
CiAgICAgICAgICAgICBjYWxsYmFjayhtYWtlVW5leHBlY3RlZChlcnJvci52YWx1ZSgpKSk7CiAg
ICAgICAgICAgICByZXR1cm47CkBAIC0yNzUsNiArMzcyLDggQEAgdm9pZCBDYWNoZTo6cHV0KFZl
Y3RvcjxSZWNvcmQ+JiYgcmVjb3JkcywgUmVjb3JkSWRlbnRpZmllcnNDYWxsYmFjayYmIGNhbGxi
YWNrKQogCiB2b2lkIENhY2hlOjpyZW1vdmUoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYgcmVx
dWVzdCwgV2ViQ29yZTo6Q2FjaGVRdWVyeU9wdGlvbnMmJiBvcHRpb25zLCBSZWNvcmRJZGVudGlm
aWVyc0NhbGxiYWNrJiYgY2FsbGJhY2spCiB7CisgICAgQVNTRVJUKG1fc3RhdGUgPT0gU3RhdGU6
Ok9wZW4pOworCiAgICAgYXV0byogcmVjb3JkcyA9IHJlY29yZHNGcm9tVVJMKHJlcXVlc3QudXJs
KCkpOwogICAgIGF1dG8gcmVjb3JkSWRlbnRpZmllcnMgPSBxdWVyeUNhY2hlKHJlY29yZHMsIHJl
cXVlc3QsIG9wdGlvbnMpOwogICAgIGlmIChyZWNvcmRJZGVudGlmaWVycy5pc0VtcHR5KCkpIHsK
QEAgLTI4OSwzNSArMzg4LDE1NyBAQCB2b2lkIENhY2hlOjpyZW1vdmUoV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0JiYgcmVxdWVzdCwgV2ViQ29yZTo6Q2FjaGVRdWVyeU9wdGlvbgogICAgICAgICBy
ZXR1cm4gc2hvdWxkUmVtb3ZlOwogICAgIH0pOwogCi0gICAgd3JpdGVSZWNvcmRzTGlzdChbY2Fs
bGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgcmVjb3JkSWRlbnRpZmllcnMgPSBXVEZNb3ZlKHJl
Y29yZElkZW50aWZpZXJzKV0oc3RkOjpvcHRpb25hbDxFcnJvcj4mJiBlcnJvcikgbXV0YWJsZSB7
Ci0gICAgICAgIGlmIChlcnJvcikgewotICAgICAgICAgICAgY2FsbGJhY2sobWFrZVVuZXhwZWN0
ZWQoZXJyb3IudmFsdWUoKSkpOworICAgIGNhbGxiYWNrKFdURk1vdmUocmVjb3JkSWRlbnRpZmll
cnMpKTsKK30KKwordm9pZCBDYWNoZTo6cmVtb3ZlRnJvbVJlY29yZExpc3QoY29uc3QgVmVjdG9y
PHVpbnQ2NF90PiYgcmVjb3JkSWRlbnRpZmllcnMpCit7CisgICAgaWYgKHJlY29yZElkZW50aWZp
ZXJzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChhdXRvJiByZWNvcmRz
IDogbV9yZWNvcmRzLnZhbHVlcygpKSB7CisgICAgICAgIGF1dG8qIGNhY2hlID0gdGhpczsKKyAg
ICAgICAgcmVjb3Jkcy5yZW1vdmVBbGxNYXRjaGluZyhbY2FjaGUsICZyZWNvcmRJZGVudGlmaWVy
c10oY29uc3QgYXV0byYgaXRlbSkgeworICAgICAgICAgICAgcmV0dXJuIG5vdEZvdW5kICE9IHJl
Y29yZElkZW50aWZpZXJzLmZpbmRNYXRjaGluZyhbY2FjaGUsICZpdGVtXShjb25zdCBhdXRvJiBp
ZGVudGlmaWVyKSB7CisgICAgICAgICAgICAgICAgaWYgKGl0ZW0uaWRlbnRpZmllciAhPSBpZGVu
dGlmaWVyKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAg
ICAgY2FjaGUtPnJlbW92ZVJlY29yZEZyb21EaXNrKGl0ZW0pOworICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0KK30KKwordm9p
ZCBDYWNoZTo6d3JpdGVSZWNvcmRUb0Rpc2soY29uc3QgUmVjb3JkSW5mb3JtYXRpb24mIHJlY29y
ZEluZm9ybWF0aW9uLCBSZWNvcmQmJiByZWNvcmQsIGNvbnN0IFJlZlB0cjxBc3luY2hyb25vdXNQ
dXRUYXNrQ291bnRlcj4mIGNvdW50ZXIpCit7CisgICAgbV9jYWNoZXMud3JpdGVSZWNvcmQoKnRo
aXMsIHJlY29yZEluZm9ybWF0aW9uLCBXVEZNb3ZlKHJlY29yZCksIFtjb3VudGVyXShzdGQ6Om9w
dGlvbmFsPEVycm9yPiYmIGVycm9yKSB7CisgICAgICAgIEFTU0VSVCghZXJyb3IpOworICAgIH0p
OworfQorCit2b2lkIENhY2hlOjp1cGRhdGVSZWNvcmRUb0Rpc2soUmVjb3JkSW5mb3JtYXRpb24m
IGV4aXN0aW5nUmVjb3JkLCBSZWNvcmQmJiByZWNvcmQsIGNvbnN0IFJlZlB0cjxBc3luY2hyb25v
dXNQdXRUYXNrQ291bnRlcj4mIHRhc2tDb3VudGVyKQoreworICAgICsrZXhpc3RpbmdSZWNvcmQu
dXBkYXRlUmVzcG9uc2VDb3VudGVyOworICAgIHJlYWRSZWNvcmRGcm9tRGlzayhleGlzdGluZ1Jl
Y29yZCwgW2NhY2hlcyA9IG1ha2VSZWYobV9jYWNoZXMpLCBpZGVudGlmaWVyID0gbV9pZGVudGlm
aWVyLCByZWNvcmRJZGVudGlmaWVyID0gZXhpc3RpbmdSZWNvcmQuaWRlbnRpZmllciwgcmVjb3Jk
ID0gV1RGTW92ZShyZWNvcmQpLCB0YXNrQ291bnRlcl0oRXhwZWN0ZWQ8UmVjb3JkLCBFcnJvcj4m
JiByZXN1bHQpIG11dGFibGUgeworICAgICAgICBpZiAoIXJlc3VsdC5oYXNWYWx1ZSgpKQogICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGNhbGxiYWNrKFdURk1vdmUocmVj
b3JkSWRlbnRpZmllcnMpKTsKKworICAgICAgICBhdXRvKiBjYWNoZSA9IGNhY2hlcy0+ZmluZChp
ZGVudGlmaWVyKTsKKyAgICAgICAgaWYgKCFjYWNoZSkKKyAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICBhdXRvKiBzYW1lVVJMUmVjb3JkcyA9IGNhY2hlLT5yZWNvcmRzRnJvbVVSTChyZXN1
bHQudmFsdWUoKS5yZXF1ZXN0LnVybCgpKTsKKyAgICAgICAgaWYgKCFzYW1lVVJMUmVjb3JkcykK
KyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBhdXRvIHBvc2l0aW9uID0gc2FtZVVSTFJl
Y29yZHMtPmZpbmRNYXRjaGluZyhbJl0gKGNvbnN0IGF1dG8mIGl0ZW0pIHsgcmV0dXJuIGl0ZW0u
aWRlbnRpZmllciA9PSByZWNvcmRJZGVudGlmaWVyOyB9KTsKKyAgICAgICAgaWYgKHBvc2l0aW9u
ID09IG5vdEZvdW5kKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBhdXRvJiByZWNvcmRJ
bmZvID0gc2FtZVVSTFJlY29yZHMtPmF0KHBvc2l0aW9uKTsKKworICAgICAgICBhdXRvJiByZWNv
cmRGcm9tRGlzayA9IHJlc3VsdC52YWx1ZSgpOworICAgICAgICByZWNvcmQucmVxdWVzdEhlYWRl
cnNHdWFyZCA9IHJlY29yZEZyb21EaXNrLnJlcXVlc3RIZWFkZXJzR3VhcmQ7CisgICAgICAgIHJl
Y29yZC5yZXF1ZXN0ID0gV1RGTW92ZShyZWNvcmRGcm9tRGlzay5yZXF1ZXN0KTsKKyAgICAgICAg
cmVjb3JkLm9wdGlvbnMgPSBXVEZNb3ZlKHJlY29yZEZyb21EaXNrLm9wdGlvbnMpOworICAgICAg
ICByZWNvcmQucmVmZXJyZXIgPSBXVEZNb3ZlKHJlY29yZEZyb21EaXNrLnJlZmVycmVyKTsKKwor
ICAgICAgICB1cGRhdGVWYXJ5SW5mb3JtYXRpb24ocmVjb3JkSW5mbywgcmVjb3JkLnJlcXVlc3Qs
IHJlY29yZC5yZXNwb25zZSk7CisKKyAgICAgICAgY2FjaGUtPndyaXRlUmVjb3JkVG9EaXNrKHJl
Y29yZEluZm8sIFdURk1vdmUocmVjb3JkKSwgdGFza0NvdW50ZXIpOwogICAgIH0pOwogfQogCi12
b2lkIENhY2hlOjpyZWFkUmVjb3Jkc0xpc3QoQ29tcGxldGlvbkNhbGxiYWNrJiYgY2FsbGJhY2sp
Cit2b2lkIENhY2hlOjpyZWFkUmVjb3JkRnJvbURpc2soY29uc3QgUmVjb3JkSW5mb3JtYXRpb24m
IHJlY29yZCwgV1RGOjpGdW5jdGlvbjx2b2lkKEV4cGVjdGVkPFJlY29yZCwgRXJyb3I+JiYpPiYm
IGNhbGxiYWNrKQogewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KLSAgICBjYWxsYmFj
ayhzdGQ6Om51bGxvcHQpOworICAgIG1fY2FjaGVzLnJlYWRSZWNvcmQocmVjb3JkLmtleSwgV1RG
TW92ZShjYWxsYmFjaykpOwogfQogCi12b2lkIENhY2hlOjp3cml0ZVJlY29yZHNMaXN0KENvbXBs
ZXRpb25DYWxsYmFjayYmIGNhbGxiYWNrKQordm9pZCBDYWNoZTo6cmVtb3ZlUmVjb3JkRnJvbURp
c2soY29uc3QgUmVjb3JkSW5mb3JtYXRpb24mIHJlY29yZCkKIHsKLSAgICAvLyBGSVhNRTogSW1w
bGVtZW50IHRoaXMuCi0gICAgY2FsbGJhY2soc3RkOjpudWxsb3B0KTsKKyAgICBtX2NhY2hlcy5y
ZW1vdmVSZWNvcmQocmVjb3JkLmtleSk7CiB9CiAKLXZvaWQgQ2FjaGU6OndyaXRlUmVjb3JkVG9E
aXNrKFJlY29yZERhdGEmKQorU3RvcmFnZTo6UmVjb3JkIENhY2hlOjplbmNvZGUoY29uc3QgUmVj
b3JkSW5mb3JtYXRpb24mIHJlY29yZEluZm9ybWF0aW9uLCBjb25zdCBSZWNvcmQmIHJlY29yZCkK
IHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCisgICAgV1RGOjpQZXJzaXN0ZW5jZTo6
RW5jb2RlciBlbmNvZGVyOworICAgIGVuY29kZXIgPDwgcmVjb3JkSW5mb3JtYXRpb24uaW5zZXJ0
aW9uVGltZTsKKyAgICBlbmNvZGVyIDw8IHJlY29yZC5yZXF1ZXN0SGVhZGVyc0d1YXJkOworICAg
IHJlY29yZC5yZXF1ZXN0LmVuY29kZVdpdGhvdXRQbGF0Zm9ybURhdGEoZW5jb2Rlcik7CisgICAg
ZW5jb2RlciA8PCByZWNvcmQub3B0aW9uczsKKyAgICBlbmNvZGVyIDw8IHJlY29yZC5yZWZlcnJl
cjsKKworICAgIGVuY29kZXIgPDwgcmVjb3JkLnJlc3BvbnNlSGVhZGVyc0d1YXJkOworICAgIGVu
Y29kZXIgPDwgcmVjb3JkLnJlc3BvbnNlOworCisgICAgZW5jb2Rlci5lbmNvZGVDaGVja3N1bSgp
OworCisgICAgRGF0YSBoZWFkZXIoZW5jb2Rlci5idWZmZXIoKSwgZW5jb2Rlci5idWZmZXJTaXpl
KCkpOworICAgIERhdGEgYm9keTsKKyAgICBXVEY6OnN3aXRjaE9uKHJlY29yZC5yZXNwb25zZUJv
ZHksIFtdKGNvbnN0IFJlZjxXZWJDb3JlOjpGb3JtRGF0YT4mIGZvcm1EYXRhKSB7CisgICAgICAg
IC8vIEZJWE1FOiBTdG9yZSBmb3JtIGRhdGEgYm9keS4KKyAgICB9LCBbJl0oY29uc3QgUmVmPFdl
YkNvcmU6OlNoYXJlZEJ1ZmZlcj4mIGJ1ZmZlcikgeworICAgICAgICBib2R5ID0geyByZWludGVy
cHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihidWZmZXItPmRhdGEoKSksIGJ1ZmZlci0+c2l6ZSgp
IH07CisgICAgfSwgW10oY29uc3Qgc3RkOjpudWxscHRyX3QmKSB7CisgICAgfSk7CisKKyAgICBy
ZXR1cm4geyByZWNvcmRJbmZvcm1hdGlvbi5rZXksIHsgfSwgaGVhZGVyLCBib2R5LCB7IH0gfTsK
IH0KIAotdm9pZCBDYWNoZTo6cmVtb3ZlUmVjb3JkRnJvbURpc2soUmVjb3JkRGF0YSYpCitzdGF0
aWMgaW5saW5lIHN0ZDo6b3B0aW9uYWw8c3RkOjpwYWlyPFJlY29yZCwgZG91YmxlPj4gZGVjb2Rl
UmVjb3JkSGVhZGVyKGNvbnN0IFN0b3JhZ2U6OlJlY29yZCYgc3RvcmFnZSkKIHsKLSAgICAvLyBG
SVhNRTogSW1wbGVtZW50IHRoaXMuCisgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNv
ZGVyKHN0b3JhZ2UuaGVhZGVyLmRhdGEoKSwgc3RvcmFnZS5oZWFkZXIuc2l6ZSgpKTsKKworICAg
IFJlY29yZCByZWNvcmQ7CisKKyAgICBkb3VibGUgaW5zZXJ0aW9uVGltZTsKKyAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKGluc2VydGlvblRpbWUpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZWNvcmQucmVxdWVzdEhlYWRlcnNHdWFyZCkp
CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBpZiAoIXJlY29yZC5yZXF1ZXN0
LmRlY29kZVdpdGhvdXRQbGF0Zm9ybURhdGEoZGVjb2RlcikpCisgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlY29yZC5vcHRpb25zKSkKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVj
b3JkLnJlZmVycmVyKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUocmVjb3JkLnJlc3BvbnNlSGVhZGVyc0d1YXJkKSkKKyAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVjb3JkLnJlc3Bv
bnNlKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGlmICghZGVjb2Rlci52
ZXJpZnlDaGVja3N1bSgpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0
dXJuIHN0ZDo6bWFrZV9wYWlyKFdURk1vdmUocmVjb3JkKSwgaW5zZXJ0aW9uVGltZSk7Cit9CisK
K3N0ZDo6b3B0aW9uYWw8UmVjb3JkPiBDYWNoZTo6ZGVjb2RlKGNvbnN0IFN0b3JhZ2U6OlJlY29y
ZCYgc3RvcmFnZSkKK3sKKyAgICBhdXRvIHJlc3VsdCA9IGRlY29kZVJlY29yZEhlYWRlcihzdG9y
YWdlKTsKKworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owor
CisgICAgYXV0byByZWNvcmQgPSBXVEZNb3ZlKHJlc3VsdC0+Zmlyc3QpOworICAgIHJlY29yZC5y
ZXNwb25zZUJvZHkgPSBXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmNyZWF0ZShzdG9yYWdlLmJvZHku
ZGF0YSgpLCBzdG9yYWdlLmJvZHkuc2l6ZSgpKTsKKworICAgIHJldHVybiBXVEZNb3ZlKHJlY29y
ZCk7Cit9CisKK1ZlY3RvcjxLZXk+IENhY2hlOjprZXlzKCkgY29uc3QKK3sKKyAgICBWZWN0b3I8
S2V5PiBrZXlzOworICAgIGZvciAoYXV0byYgcmVjb3JkcyA6IG1fcmVjb3Jkcy52YWx1ZXMoKSkg
eworICAgICAgICBmb3IgKGF1dG8mIHJlY29yZCA6IHJlY29yZHMpCisgICAgICAgICAgICBrZXlz
LmFwcGVuZChyZWNvcmQua2V5KTsKKyAgICB9CisgICAgcmV0dXJuIGtleXM7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIENhY2hlU3RvcmFnZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZS5oIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZS5oCmluZGV4IGM5ZjBk
ODBlNTRiNzZlMjA0MmUxM2M5ZTQwNWM5ZDU1MjczZDEyNjUuLjU5YTA2YWRkMmNmN2YwN2M1YjVh
NGYzMDY1ZTU1OTUxZWFkZmNiOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlLmgKQEAgLTI1LDcg
KzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJOZXR3b3JrQ2FjaGVLZXkuaCIK
KyNpbmNsdWRlICJOZXR3b3JrQ2FjaGVTdG9yYWdlLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9ET01D
YWNoZUVuZ2luZS5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KQEAgLTM2LDcgKzM2LDcgQEAgbmFtZXNwYWNlIENhY2hlU3RvcmFnZSB7
CiAKIGNsYXNzIENhY2hlczsKIAotc3RydWN0IFJlY29yZERhdGEgeworc3RydWN0IFJlY29yZElu
Zm9ybWF0aW9uIHsKICAgICBOZXR3b3JrQ2FjaGU6OktleSBrZXk7CiAgICAgZG91YmxlIGluc2Vy
dGlvblRpbWUgeyAwIH07CiAKQEAgLTQ2LDU4ICs0Niw2MSBAQCBzdHJ1Y3QgUmVjb3JkRGF0YSB7
CiAgICAgV2ViQ29yZTo6VVJMIHVybDsKICAgICBib29sIGhhc1ZhcnlTdGFyIHsgZmFsc2UgfTsK
ICAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiB2YXJ5SGVhZGVyczsKLQotICAgIHN0cnVjdCBE
YXRhIHsKLSAgICAgICAgV2ViQ29yZTo6RmV0Y2hIZWFkZXJzOjpHdWFyZCByZXF1ZXN0SGVhZGVy
c0d1YXJkOwotICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdDsKLSAgICAg
ICAgV2ViQ29yZTo6RmV0Y2hPcHRpb25zIG9wdGlvbnM7Ci0gICAgICAgIFN0cmluZyByZWZlcnJl
cjsKLQotICAgICAgICBXZWJDb3JlOjpGZXRjaEhlYWRlcnM6Okd1YXJkIHJlc3BvbnNlSGVhZGVy
c0d1YXJkOwotICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlOwotICAg
ICAgICBXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6UmVzcG9uc2VCb2R5IHJlc3BvbnNlQm9keTsK
LSAgICB9OwotCi0gICAgc3RkOjpvcHRpb25hbDxEYXRhPiBkYXRhOwogfTsKIAorY2xhc3MgQXN5
bmNocm9ub3VzUHV0VGFza0NvdW50ZXI7CitjbGFzcyBSZWFkUmVjb3JkVGFza0NvdW50ZXI7CisK
IGNsYXNzIENhY2hlIHsKIHB1YmxpYzoKICAgICBlbnVtIGNsYXNzIFN0YXRlIHsgVW5pbml0aWFs
aXplZCwgT3BlbmluZywgT3BlbiB9OwotICAgIENhY2hlKENhY2hlcyYsIHVpbnQ2NF90IGlkZW50
aWZpZXIsIFN0YXRlLCBTdHJpbmcmJiBuYW1lKTsKKyAgICBDYWNoZShDYWNoZXMmLCB1aW50NjRf
dCBpZGVudGlmaWVyLCBTdGF0ZSwgU3RyaW5nJiYgbmFtZSwgU3RyaW5nJiYgdW5pcXVlTmFtZSk7
CiAKKyAgICBib29sIGlzT3BlbmVkKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA9PSBTdGF0ZTo6
T3BlbjsgfQogICAgIHZvaWQgb3BlbihXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6Q29tcGxldGlv
bkNhbGxiYWNrJiYpOwogCiAgICAgdWludDY0X3QgaWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJu
IG1faWRlbnRpZmllcjsgfQogICAgIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJu
IG1fbmFtZTsgfQorICAgIGNvbnN0IFN0cmluZyYgdW5pcXVlTmFtZSgpIGNvbnN0IHsgcmV0dXJu
IG1fdW5pcXVlTmFtZTsgfQogICAgIGJvb2wgaXNBY3RpdmUoKSBjb25zdCB7IHJldHVybiBtX3N0
YXRlICE9IFN0YXRlOjpVbmluaXRpYWxpemVkOyB9CiAKLSAgICBWZWN0b3I8V2ViQ29yZTo6RE9N
Q2FjaGVFbmdpbmU6OlJlY29yZD4gcmV0cmlldmVSZWNvcmRzKGNvbnN0IFdlYkNvcmU6OlVSTCYp
IGNvbnN0OworICAgIHZvaWQgcmV0cmlldmVSZWNvcmRzKGNvbnN0IFdlYkNvcmU6OlVSTCYsIFdl
YkNvcmU6OkRPTUNhY2hlRW5naW5lOjpSZWNvcmRzQ2FsbGJhY2smJik7CiAgICAgV2ViQ29yZTo6
RE9NQ2FjaGVFbmdpbmU6OkNhY2hlSW5mbyBpbmZvKCkgY29uc3QgeyByZXR1cm4geyBtX2lkZW50
aWZpZXIsIG1fbmFtZSB9OyB9CiAKICAgICB2b2lkIHB1dChWZWN0b3I8V2ViQ29yZTo6RE9NQ2Fj
aGVFbmdpbmU6OlJlY29yZD4mJiwgV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OlJlY29yZElkZW50
aWZpZXJzQ2FsbGJhY2smJik7CiAgICAgdm9pZCByZW1vdmUoV2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0JiYsIFdlYkNvcmU6OkNhY2hlUXVlcnlPcHRpb25zJiYsIFdlYkNvcmU6OkRPTUNhY2hlRW5n
aW5lOjpSZWNvcmRJZGVudGlmaWVyc0NhbGxiYWNrJiYpOwogCisgICAgVmVjdG9yPE5ldHdvcmtD
YWNoZTo6S2V5PiBrZXlzKCkgY29uc3Q7CisKICAgICB2b2lkIGRpc3Bvc2UoKTsKICAgICB2b2lk
IGNsZWFyTWVtb3J5UmVwcmVzZW50YXRpb24oKTsKLSAKKworICAgIHN0YXRpYyBzdGQ6Om9wdGlv
bmFsPFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpSZWNvcmQ+IGRlY29kZShjb25zdCBOZXR3b3Jr
Q2FjaGU6OlN0b3JhZ2U6OlJlY29yZCYpOworICAgIHN0YXRpYyBOZXR3b3JrQ2FjaGU6OlN0b3Jh
Z2U6OlJlY29yZCBlbmNvZGUoY29uc3QgUmVjb3JkSW5mb3JtYXRpb24mLCBjb25zdCBXZWJDb3Jl
OjpET01DYWNoZUVuZ2luZTo6UmVjb3JkJik7CisKIHByaXZhdGU6Ci0gICAgVmVjdG9yPFJlY29y
ZERhdGE+KiByZWNvcmRzRnJvbVVSTChjb25zdCBXZWJDb3JlOjpVUkwmKTsKLSAgICBjb25zdCBW
ZWN0b3I8UmVjb3JkRGF0YT4qIHJlY29yZHNGcm9tVVJMKGNvbnN0IFdlYkNvcmU6OlVSTCYpIGNv
bnN0OwotICAgIFJlY29yZERhdGEmIGFkZFJlY29yZChWZWN0b3I8UmVjb3JkRGF0YT4qLCBXZWJD
b3JlOjpET01DYWNoZUVuZ2luZTo6UmVjb3JkJiYpOworICAgIFZlY3RvcjxSZWNvcmRJbmZvcm1h
dGlvbj4qIHJlY29yZHNGcm9tVVJMKGNvbnN0IFdlYkNvcmU6OlVSTCYpOworICAgIGNvbnN0IFZl
Y3RvcjxSZWNvcmRJbmZvcm1hdGlvbj4qIHJlY29yZHNGcm9tVVJMKGNvbnN0IFdlYkNvcmU6OlVS
TCYpIGNvbnN0OworICAgIFJlY29yZEluZm9ybWF0aW9uJiBhZGRSZWNvcmQoVmVjdG9yPFJlY29y
ZEluZm9ybWF0aW9uPiosIGNvbnN0IFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpSZWNvcmQmKTsK
KworICAgIFJlY29yZEluZm9ybWF0aW9uIHRvUmVjb3JkSW5mb3JtYXRpb24oY29uc3QgV2ViQ29y
ZTo6RE9NQ2FjaGVFbmdpbmU6OlJlY29yZCYpOwogCiAgICAgdm9pZCBmaW5pc2hPcGVuaW5nKFdl
YkNvcmU6OkRPTUNhY2hlRW5naW5lOjpDb21wbGV0aW9uQ2FsbGJhY2smJiwgc3RkOjpvcHRpb25h
bDxXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6RXJyb3I+JiYpOworICAgIHZvaWQgcmV0cmlldmVS
ZWNvcmQoY29uc3QgUmVjb3JkSW5mb3JtYXRpb24mLCBSZWZQdHI8UmVhZFJlY29yZFRhc2tDb3Vu
dGVyPiYpOwogCiAgICAgdm9pZCByZWFkUmVjb3Jkc0xpc3QoV2ViQ29yZTo6RE9NQ2FjaGVFbmdp
bmU6OkNvbXBsZXRpb25DYWxsYmFjayYmKTsKLSAgICB2b2lkIHdyaXRlUmVjb3Jkc0xpc3QoV2Vi
Q29yZTo6RE9NQ2FjaGVFbmdpbmU6OkNvbXBsZXRpb25DYWxsYmFjayYmKTsKLSAgICB2b2lkIHdy
aXRlUmVjb3JkVG9EaXNrKFJlY29yZERhdGEmKTsKLSAgICB2b2lkIHJlbW92ZVJlY29yZEZyb21E
aXNrKFJlY29yZERhdGEmKTsKKyAgICB2b2lkIHdyaXRlUmVjb3JkVG9EaXNrKGNvbnN0IFJlY29y
ZEluZm9ybWF0aW9uJiwgV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OlJlY29yZCYmLCBjb25zdCBS
ZWZQdHI8QXN5bmNocm9ub3VzUHV0VGFza0NvdW50ZXI+Jik7CisgICAgdm9pZCB1cGRhdGVSZWNv
cmRUb0Rpc2soUmVjb3JkSW5mb3JtYXRpb24mLCBXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6UmVj
b3JkJiYsIGNvbnN0IFJlZlB0cjxBc3luY2hyb25vdXNQdXRUYXNrQ291bnRlcj4mKTsKKyAgICB2
b2lkIHJlbW92ZVJlY29yZEZyb21EaXNrKGNvbnN0IFJlY29yZEluZm9ybWF0aW9uJik7CisgICAg
dm9pZCByZWFkUmVjb3JkRnJvbURpc2soY29uc3QgUmVjb3JkSW5mb3JtYXRpb24mLCBXVEY6OkZ1
bmN0aW9uPHZvaWQoRXhwZWN0ZWQ8V2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OlJlY29yZCwgV2Vi
Q29yZTo6RE9NQ2FjaGVFbmdpbmU6OkVycm9yPiYmKT4mJik7CisgICAgdm9pZCByZW1vdmVGcm9t
UmVjb3JkTGlzdChjb25zdCBWZWN0b3I8dWludDY0X3Q+Jik7CiAKICAgICBDYWNoZXMmIG1fY2Fj
aGVzOwogICAgIFN0YXRlIG1fc3RhdGU7CiAgICAgdWludDY0X3QgbV9pZGVudGlmaWVyIHsgMCB9
OwogICAgIFN0cmluZyBtX25hbWU7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxSZWNvcmRE
YXRhPj4gbV9yZWNvcmRzOworICAgIFN0cmluZyBtX3VuaXF1ZU5hbWU7CisgICAgSGFzaE1hcDxT
dHJpbmcsIFZlY3RvcjxSZWNvcmRJbmZvcm1hdGlvbj4+IG1fcmVjb3JkczsKICAgICB1aW50NjRf
dCBtX25leHRSZWNvcmRJZGVudGlmaWVyIHsgMCB9OwogICAgIFZlY3RvcjxXZWJDb3JlOjpET01D
YWNoZUVuZ2luZTo6Q29tcGxldGlvbkNhbGxiYWNrPiBtX3BlbmRpbmdPcGVuaW5nQ2FsbGJhY2tz
OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2Fj
aGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNwcAppbmRleCBiMzFlMjg5NzdkZWQxYzQ3
MGM2OTY5NWIwMzhjYmI0NWM0YTNmNWM3Li4yMDdiN2Q2ZmQ2YWE4MjI1MTVmYzY2NjIyOGYxOTI4
M2U0MDQzZTNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hl
L0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwCkBAIC0yNyw2ICsyNyw3
IEBACiAjaW5jbHVkZSAiQ2FjaGVTdG9yYWdlRW5naW5lLmgiCiAKICNpbmNsdWRlICJOZXR3b3Jr
Q2FjaGVDb2RlcnMuaCIKKyNpbmNsdWRlIDx3dGYvVVVJRC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU6OkRPTUNhY2hlRW5n
aW5lOwpAQCAtNTksNyArNjAsMTQgQEAgQ2FjaGVzOjpDYWNoZXMoRW5naW5lJiBlbmdpbmUsIFN0
cmluZyYmIG9yaWdpbikKIAogdm9pZCBDYWNoZXM6OmluaXRpYWxpemUoV2ViQ29yZTo6RE9NQ2Fj
aGVFbmdpbmU6OkNvbXBsZXRpb25DYWxsYmFjayYmIGNhbGxiYWNrKQogewotICAgIGlmIChtX2lz
SW5pdGlhbGl6ZWQgfHwgbV9yb290UGF0aC5pc051bGwoKSkgeworICAgIGlmIChtX2lzSW5pdGlh
bGl6ZWQpIHsKKyAgICAgICAgY2FsbGJhY2soc3RkOjpudWxsb3B0KTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmIChtX3Jvb3RQYXRoLmlzTnVsbCgpKSB7CisgICAgICAgIG1ha2VE
aXJ0eSgpOworICAgICAgICBtX2lzSW5pdGlhbGl6ZWQgPSB0cnVlOwogICAgICAgICBjYWxsYmFj
ayhzdGQ6Om51bGxvcHQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNzUsNiArODMsNyBA
QCB2b2lkIENhY2hlczo6aW5pdGlhbGl6ZShXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6Q29tcGxl
dGlvbkNhbGxiYWNrJiYgY2FsbGJhY2spCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgbV9z
dG9yYWdlID0gc3RvcmFnZS5yZWxlYXNlTm9uTnVsbCgpOworICAgIG1fc3RvcmFnZS0+d3JpdGVX
aXRob3V0V2FpdGluZygpOwogICAgIHJlYWRDYWNoZXNGcm9tRGlzayhbdGhpcywgY2FsbGJhY2sg
PSBXVEZNb3ZlKGNhbGxiYWNrKV0oRXhwZWN0ZWQ8VmVjdG9yPENhY2hlPiwgRXJyb3I+JiYgcmVz
dWx0KSB7CiAgICAgICAgIG1ha2VEaXJ0eSgpOwogCkBAIC0xMjAsNyArMTI5LDkgQEAgQ2FjaGUq
IENhY2hlczo6ZmluZCh1aW50NjRfdCBpZGVudGlmaWVyKQogCiB2b2lkIENhY2hlczo6b3Blbihj
b25zdCBTdHJpbmcmIG5hbWUsIENhY2hlSWRlbnRpZmllckNhbGxiYWNrJiYgY2FsbGJhY2spCiB7
CisgICAgQVNTRVJUKG1faXNJbml0aWFsaXplZCk7CiAgICAgQVNTRVJUKG1fZW5naW5lKTsKKwog
ICAgIGlmIChhdXRvKiBjYWNoZSA9IGZpbmQobmFtZSkpIHsKICAgICAgICAgY2FjaGUtPm9wZW4o
W2NhY2hlSWRlbnRpZmllciA9IGNhY2hlLT5pZGVudGlmaWVyKCksIGNhbGxiYWNrID0gV1RGTW92
ZShjYWxsYmFjayldKHN0ZDo6b3B0aW9uYWw8RXJyb3I+JiYgZXJyb3IpIG11dGFibGUgewogICAg
ICAgICAgICAgaWYgKGVycm9yKSB7CkBAIC0xMzUsNyArMTQ2LDcgQEAgdm9pZCBDYWNoZXM6Om9w
ZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBDYWNoZUlkZW50aWZpZXJDYWxsYmFjayYmIGNhbGxiYWNr
KQogICAgIG1ha2VEaXJ0eSgpOwogCiAgICAgdWludDY0X3QgY2FjaGVJZGVudGlmaWVyID0gbV9l
bmdpbmUtPm5leHRDYWNoZUlkZW50aWZpZXIoKTsKLSAgICBtX2NhY2hlcy5hcHBlbmQoQ2FjaGUg
eyAqdGhpcywgY2FjaGVJZGVudGlmaWVyLCBDYWNoZTo6U3RhdGU6Ok9wZW4sIFN0cmluZyB7IG5h
bWUgfSB9KTsKKyAgICBtX2NhY2hlcy5hcHBlbmQoQ2FjaGUgeyAqdGhpcywgY2FjaGVJZGVudGlm
aWVyLCBDYWNoZTo6U3RhdGU6Ok9wZW4sIFN0cmluZyB7IG5hbWUgfSwgY3JlYXRlQ2Fub25pY2Fs
VVVJRFN0cmluZygpIH0pOwogCiAgICAgd3JpdGVDYWNoZXNUb0Rpc2soW2NhbGxiYWNrID0gV1RG
TW92ZShjYWxsYmFjayksIGNhY2hlSWRlbnRpZmllcl0oc3RkOjpvcHRpb25hbDxFcnJvcj4mJiBl
cnJvcikgbXV0YWJsZSB7CiAgICAgICAgIGNhbGxiYWNrKENhY2hlSWRlbnRpZmllck9wZXJhdGlv
blJlc3VsdCB7IGNhY2hlSWRlbnRpZmllciwgISFlcnJvciB9KTsKQEAgLTE0NCw2ICsxNTUsNyBA
QCB2b2lkIENhY2hlczo6b3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIENhY2hlSWRlbnRpZmllckNh
bGxiYWNrJiYgY2FsbGJhY2spCiAKIHZvaWQgQ2FjaGVzOjpyZW1vdmUodWludDY0X3QgaWRlbnRp
ZmllciwgQ2FjaGVJZGVudGlmaWVyQ2FsbGJhY2smJiBjYWxsYmFjaykKIHsKKyAgICBBU1NFUlQo
bV9pc0luaXRpYWxpemVkKTsKICAgICBBU1NFUlQobV9lbmdpbmUpOwogCiAgICAgYXV0byBwb3Np
dGlvbiA9IG1fY2FjaGVzLmZpbmRNYXRjaGluZyhbJl0oY29uc3QgYXV0byYgaXRlbSkgeyByZXR1
cm4gaXRlbS5pZGVudGlmaWVyKCkgPT0gaWRlbnRpZmllcjsgfSk7CkBAIC0xNjgsNiArMTgwLDkg
QEAgdm9pZCBDYWNoZXM6OmRpc3Bvc2UoQ2FjaGUmIGNhY2hlKQogewogICAgIGF1dG8gcG9zaXRp
b24gPSBtX3JlbW92ZWRDYWNoZXMuZmluZE1hdGNoaW5nKFsmXShjb25zdCBhdXRvJiBpdGVtKSB7
IHJldHVybiBpdGVtLmlkZW50aWZpZXIoKSA9PSBjYWNoZS5pZGVudGlmaWVyKCk7IH0pOwogICAg
IGlmIChwb3NpdGlvbiAhPSBub3RGb3VuZCkgeworICAgICAgICBpZiAobV9zdG9yYWdlKQorICAg
ICAgICAgICAgbV9zdG9yYWdlLT5yZW1vdmUoY2FjaGUua2V5cygpLCB7IH0pOworCiAgICAgICAg
IG1fcmVtb3ZlZENhY2hlcy5yZW1vdmUocG9zaXRpb24pOwogICAgICAgICByZXR1cm47CiAgICAg
fQpAQCAtMTg0LDEzICsxOTksMTUgQEAgc3RhdGljIGlubGluZSBEYXRhIGVuY29kZUNhY2hlTmFt
ZXMoY29uc3QgVmVjdG9yPENhY2hlPiYgY2FjaGVzKQogCiAgICAgdWludDY0X3Qgc2l6ZSA9IGNh
Y2hlcy5zaXplKCk7CiAgICAgZW5jb2RlciA8PCBzaXplOwotICAgIGZvciAoYXV0byYgY2FjaGUg
OiBjYWNoZXMpCisgICAgZm9yIChhdXRvJiBjYWNoZSA6IGNhY2hlcykgewogICAgICAgICBlbmNv
ZGVyIDw8IGNhY2hlLm5hbWUoKTsKKyAgICAgICAgZW5jb2RlciA8PCBjYWNoZS51bmlxdWVOYW1l
KCk7CisgICAgfQogCiAgICAgcmV0dXJuIERhdGEgeyBlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVy
LmJ1ZmZlclNpemUoKSB9OwogfQogCi1zdGF0aWMgaW5saW5lIEV4cGVjdGVkPFZlY3RvcjxTdHJp
bmc+LCBFcnJvcj4gZGVjb2RlQ2FjaGVzTmFtZXMoY29uc3QgRGF0YSYgZGF0YSwgaW50IGVycm9y
KQorc3RhdGljIGlubGluZSBFeHBlY3RlZDxWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgU3RyaW5n
Pj4sIEVycm9yPiBkZWNvZGVDYWNoZXNOYW1lcyhjb25zdCBEYXRhJiBkYXRhLCBpbnQgZXJyb3Ip
CiB7CiAgICAgaWYgKGVycm9yKQogICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoRXJyb3I6
OlJlYWREaXNrKTsKQEAgLTIwMCwxNCArMjE3LDE3IEBAIHN0YXRpYyBpbmxpbmUgRXhwZWN0ZWQ8
VmVjdG9yPFN0cmluZz4sIEVycm9yPiBkZWNvZGVDYWNoZXNOYW1lcyhjb25zdCBEYXRhJiBkYXRh
CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShjb3VudCkpCiAgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZChFcnJvcjo6UmVhZERpc2spOwogCi0gICAgVmVjdG9yPFN0cmluZz4gbmFtZXM7Cisg
ICAgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4+IG5hbWVzOwogICAgIG5hbWVzLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkoY291bnQpOwogICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsg
aW5kZXggPCBjb3VudDsgKytpbmRleCkgewogICAgICAgICBTdHJpbmcgbmFtZTsKICAgICAgICAg
aWYgKCFkZWNvZGVyLmRlY29kZShuYW1lKSkKICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChFcnJvcjo6UmVhZERpc2spOworICAgICAgICBTdHJpbmcgdW5pcXVlTmFtZTsKKyAgICAg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZSh1bmlxdWVOYW1lKSkKKyAgICAgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZChFcnJvcjo6UmVhZERpc2spOwogCi0gICAgICAgIG5hbWVzLnVuY2hlY2tl
ZEFwcGVuZChXVEZNb3ZlKG5hbWUpKTsKKyAgICAgICAgbmFtZXMudW5jaGVja2VkQXBwZW5kKHN0
ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4geyBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKHVuaXF1ZU5h
bWUpIH0pOwogICAgIH0KICAgICByZXR1cm4gbmFtZXM7CiB9CkBAIC0yNDAsOCArMjYwLDggQEAg
dm9pZCBDYWNoZXM6OnJlYWRDYWNoZXNGcm9tRGlzayhXVEY6OkZ1bmN0aW9uPHZvaWQoRXhwZWN0
ZWQ8VmVjdG9yPENhY2hlPiwgRXJyb3IKICAgICAgICAgICAgIGNhbGxiYWNrKG1ha2VVbmV4cGVj
dGVkKHJlc3VsdC5lcnJvcigpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAg
ICAgICAgY2FsbGJhY2soV1RGOjptYXAoV1RGTW92ZShyZXN1bHQudmFsdWUoKSksIFt0aGlzXSAo
U3RyaW5nJiYgbmFtZSkgewotICAgICAgICAgICAgcmV0dXJuIENhY2hlIHsgKnRoaXMsIG1fZW5n
aW5lLT5uZXh0Q2FjaGVJZGVudGlmaWVyKCksIENhY2hlOjpTdGF0ZTo6VW5pbml0aWFsaXplZCwg
V1RGTW92ZShuYW1lKSB9OworICAgICAgICBjYWxsYmFjayhXVEY6Om1hcChXVEZNb3ZlKHJlc3Vs
dC52YWx1ZSgpKSwgW3RoaXNdIChhdXRvJiYgcGFpcikgeworICAgICAgICAgICAgcmV0dXJuIENh
Y2hlIHsgKnRoaXMsIG1fZW5naW5lLT5uZXh0Q2FjaGVJZGVudGlmaWVyKCksIENhY2hlOjpTdGF0
ZTo6VW5pbml0aWFsaXplZCwgV1RGTW92ZShwYWlyLmZpcnN0KSwgV1RGTW92ZShwYWlyLnNlY29u
ZCkgfTsKICAgICAgICAgfSkpOwogICAgIH0pOwogfQpAQCAtMjY2LDE0ICsyODYsODIgQEAgdm9p
ZCBDYWNoZXM6OndyaXRlQ2FjaGVzVG9EaXNrKENvbXBsZXRpb25DYWxsYmFjayYmIGNhbGxiYWNr
KQogICAgIH0pOwogfQogCit2b2lkIENhY2hlczo6cmVhZFJlY29yZHNMaXN0KENhY2hlJiBjYWNo
ZSwgTmV0d29ya0NhY2hlOjpTdG9yYWdlOjpUcmF2ZXJzZUhhbmRsZXImJiBjYWxsYmFjaykKK3sK
KyAgICBBU1NFUlQobV9pc0luaXRpYWxpemVkKTsKKworICAgIGlmICghbV9zdG9yYWdlKSB7Cisg
ICAgICAgIGNhbGxiYWNrKG51bGxwdHIsIHsgfSk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgbV9zdG9yYWdlLT50cmF2ZXJzZShjYWNoZS51bmlxdWVOYW1lKCksIDAsIFtwcm90ZWN0ZWRT
dG9yYWdlID0gbWFrZVJlZigqbV9zdG9yYWdlKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNr
KV0oY29uc3QgYXV0byogc3RvcmFnZSwgY29uc3QgYXV0byYgaW5mb3JtYXRpb24pIHsKKyAgICAg
ICAgY2FsbGJhY2soc3RvcmFnZSwgaW5mb3JtYXRpb24pOworICAgIH0pOworfQorCit2b2lkIENh
Y2hlczo6d3JpdGVSZWNvcmQoY29uc3QgQ2FjaGUmIGNhY2hlLCBjb25zdCBSZWNvcmRJbmZvcm1h
dGlvbiYgcmVjb3JkSW5mb3JtYXRpb24sIFJlY29yZCYmIHJlY29yZCwgQ29tcGxldGlvbkNhbGxi
YWNrJiYgY2FsbGJhY2spCit7CisgICAgQVNTRVJUKG1faXNJbml0aWFsaXplZCk7CisKKyAgICAv
LyBGSVhNRTogQ2hlY2sgZm9yIHN0b3JhZ2UgcXVvdGEuCisgICAgaWYgKCFzaG91bGRQZXJzaXN0
KCkpIHsKKyAgICAgICAgbV92b2xhdGlsZVN0b3JhZ2Uuc2V0KHJlY29yZEluZm9ybWF0aW9uLmtl
eSwgV1RGTW92ZShyZWNvcmQpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fc3Rv
cmFnZS0+c3RvcmUoQ2FjaGU6OmVuY29kZShyZWNvcmRJbmZvcm1hdGlvbiwgcmVjb3JkKSwgW3By
b3RlY3RlZFN0b3JhZ2UgPSBtYWtlUmVmKCptX3N0b3JhZ2UpLCBjYWxsYmFjayA9IFdURk1vdmUo
Y2FsbGJhY2spXShjb25zdCBEYXRhJikgeworICAgICAgICBjYWxsYmFjayhzdGQ6Om51bGxvcHQp
OworICAgIH0pOworfQorCit2b2lkIENhY2hlczo6cmVhZFJlY29yZChjb25zdCBOZXR3b3JrQ2Fj
aGU6OktleSYga2V5LCBXVEY6OkZ1bmN0aW9uPHZvaWQoRXhwZWN0ZWQ8UmVjb3JkLCBFcnJvcj4m
Jik+JiYgY2FsbGJhY2spCit7CisgICAgQVNTRVJUKG1faXNJbml0aWFsaXplZCk7CisKKyAgICBp
ZiAoIXNob3VsZFBlcnNpc3QoKSkgeworICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbV92b2xhdGls
ZVN0b3JhZ2UuZmluZChrZXkpOworICAgICAgICBpZiAoaXRlcmF0b3IgPT0gbV92b2xhdGlsZVN0
b3JhZ2UuZW5kKCkpIHsKKyAgICAgICAgICAgIGNhbGxiYWNrKG1ha2VVbmV4cGVjdGVkKEVycm9y
OjpJbnRlcm5hbCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGNh
bGxiYWNrKGl0ZXJhdG9yLT52YWx1ZS5jb3B5KCkpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgbV9zdG9yYWdlLT5yZXRyaWV2ZShrZXksIDQsIFtwcm90ZWN0ZWRTdG9yYWdlID0gbWFr
ZVJlZigqbV9zdG9yYWdlKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oc3RkOjp1bmlx
dWVfcHRyPFN0b3JhZ2U6OlJlY29yZD4gc3RvcmFnZSkgbXV0YWJsZSB7CisgICAgICAgIGlmICgh
c3RvcmFnZSkgeworICAgICAgICAgICAgY2FsbGJhY2sobWFrZVVuZXhwZWN0ZWQoRXJyb3I6OlJl
YWREaXNrKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAg
ICBhdXRvIHJlY29yZCA9IENhY2hlOjpkZWNvZGUoKnN0b3JhZ2UpOworICAgICAgICBpZiAoIXJl
Y29yZCkgeworICAgICAgICAgICAgY2FsbGJhY2sobWFrZVVuZXhwZWN0ZWQoRXJyb3I6OlJlYWRE
aXNrKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBj
YWxsYmFjayhXVEZNb3ZlKHJlY29yZC52YWx1ZSgpKSk7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0pOworfQorCit2b2lkIENhY2hlczo6cmVtb3ZlUmVjb3JkKGNvbnN0IE5ldHdvcmtDYWNo
ZTo6S2V5JiBrZXkpCit7CisgICAgQVNTRVJUKG1faXNJbml0aWFsaXplZCk7CisKKyAgICBpZiAo
IXNob3VsZFBlcnNpc3QoKSkgeworICAgICAgICBtX3ZvbGF0aWxlU3RvcmFnZS5yZW1vdmUoa2V5
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX3N0b3JhZ2UtPnJlbW92ZShrZXkpOwor
fQorCiB2b2lkIENhY2hlczo6Y2xlYXJNZW1vcnlSZXByZXNlbnRhdGlvbigpCiB7CiAgICAgbWFr
ZURpcnR5KCk7CiAgICAgbV9jYWNoZXMuY2xlYXIoKTsKICAgICBtX2lzSW5pdGlhbGl6ZWQgPSBm
YWxzZTsKICAgICBtX3N0b3JhZ2UgPSBudWxscHRyOwotICAgIGlmIChtX2VuZ2luZSkKLSAgICAg
ICAgbV9lbmdpbmUtPnJlbW92ZUNhY2hlcyhtX29yaWdpbik7CiB9CiAKIGJvb2wgQ2FjaGVzOjpp
c0RpcnR5KHVpbnQ2NF90IHVwZGF0ZUNvdW50ZXIpIGNvbnN0CkBAIC0yODIsNiArMzcwLDE3IEBA
IGJvb2wgQ2FjaGVzOjppc0RpcnR5KHVpbnQ2NF90IHVwZGF0ZUNvdW50ZXIpIGNvbnN0CiAgICAg
cmV0dXJuIG1fdXBkYXRlQ291bnRlciAhPSB1cGRhdGVDb3VudGVyOwogfQogCitjb25zdCBOZXR3
b3JrQ2FjaGU6OlNhbHQmIENhY2hlczo6c2FsdCgpIGNvbnN0Cit7CisgICAgaWYgKG1fZW5naW5l
KQorICAgICAgICByZXR1cm4gbV9lbmdpbmUtPnNhbHQoKTsKKworICAgIGlmICghbV92b2xhdGls
ZVNhbHQpCisgICAgICAgIG1fdm9sYXRpbGVTYWx0ID0gU2FsdCB7IH07CisKKyAgICByZXR1cm4g
bV92b2xhdGlsZVNhbHQudmFsdWUoKTsKK30KKwogQ2FjaGVJbmZvcyBDYWNoZXM6OmNhY2hlSW5m
b3ModWludDY0X3QgdXBkYXRlQ291bnRlcikgY29uc3QKIHsKICAgICBWZWN0b3I8Q2FjaGVJbmZv
PiBjYWNoZUluZm9zOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9j
YWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmgKaW5kZXggZjMxM2ZkMWM0Y2I4
YjlmYWZjYjY0NjY4ODY4Y2Y0MzdhZDU5NzIzMi4uNGEyYTc3OTJlZmVhNmRhZmE2NDQ0MDUzZWM3
MDhiYjA1M2U2YWYwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9j
YWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5oCkBAIC01MiwxNyArNTIs
MjMgQEAgcHVibGljOgogICAgIENhY2hlKiBmaW5kKHVpbnQ2NF90IGlkZW50aWZpZXIpOwogICAg
IHZvaWQgYXBwZW5kUmVwcmVzZW50YXRpb24oU3RyaW5nQnVpbGRlciYpIGNvbnN0OwogCisgICAg
dm9pZCByZWFkUmVjb3Jkc0xpc3QoQ2FjaGUmLCBOZXR3b3JrQ2FjaGU6OlN0b3JhZ2U6OlRyYXZl
cnNlSGFuZGxlciYmKTsKKyAgICB2b2lkIHJlYWRSZWNvcmQoY29uc3QgTmV0d29ya0NhY2hlOjpL
ZXkmLCBXVEY6OkZ1bmN0aW9uPHZvaWQoRXhwZWN0ZWQ8V2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6
OlJlY29yZCwgV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OkVycm9yPiYmKT4mJik7CisgICAgdm9p
ZCB3cml0ZVJlY29yZChjb25zdCBDYWNoZSYsIGNvbnN0IFJlY29yZEluZm9ybWF0aW9uJiwgV2Vi
Q29yZTo6RE9NQ2FjaGVFbmdpbmU6OlJlY29yZCYmLCBXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6
Q29tcGxldGlvbkNhbGxiYWNrJiYpOworICAgIHZvaWQgcmVtb3ZlUmVjb3JkKGNvbnN0IE5ldHdv
cmtDYWNoZTo6S2V5Jik7CisKKyAgICBjb25zdCBOZXR3b3JrQ2FjaGU6OlNhbHQmIHNhbHQoKSBj
b25zdDsKKworICAgIGJvb2wgc2hvdWxkUGVyc2lzdCgpIGNvbnN0IHsgcmV0dXJuICFtX3Jvb3RQ
YXRoLmlzTnVsbCgpOyB9CisKIHByaXZhdGU6CiAgICAgQ2FjaGVzKEVuZ2luZSYsIFN0cmluZyYm
IG9yaWdpbik7CiAKICAgICB2b2lkIHJlYWRDYWNoZXNGcm9tRGlzayhXVEY6OkZ1bmN0aW9uPHZv
aWQoRXhwZWN0ZWQ8VmVjdG9yPENhY2hlPiwgV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OkVycm9y
PiYmKT4mJik7CiAgICAgdm9pZCB3cml0ZUNhY2hlc1RvRGlzayhXZWJDb3JlOjpET01DYWNoZUVu
Z2luZTo6Q29tcGxldGlvbkNhbGxiYWNrJiYpOwogCi0KICAgICBDYWNoZSogZmluZChjb25zdCBT
dHJpbmcmIG5hbWUpOwogCi0gICAgYm9vbCBzaG91bGRQZXJzaXN0KCkgY29uc3QgeyByZXR1cm4g
IW1fcm9vdFBhdGguaXNOdWxsKCk7IH0KLQogICAgIHZvaWQgbWFrZURpcnR5KCkgeyArK21fdXBk
YXRlQ291bnRlcjsgfQogICAgIGJvb2wgaXNEaXJ0eSh1aW50NjRfdCB1cGRhdGVDb3VudGVyKSBj
b25zdDsKIApAQCAtNzQsNiArODAsOCBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxDYWNoZT4gbV9j
YWNoZXM7CiAgICAgVmVjdG9yPENhY2hlPiBtX3JlbW92ZWRDYWNoZXM7CiAgICAgUmVmUHRyPE5l
dHdvcmtDYWNoZTo6U3RvcmFnZT4gbV9zdG9yYWdlOworICAgIEhhc2hNYXA8TmV0d29ya0NhY2hl
OjpLZXksIFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpSZWNvcmQ+IG1fdm9sYXRpbGVTdG9yYWdl
OworICAgIG11dGFibGUgc3RkOjpvcHRpb25hbDxOZXR3b3JrQ2FjaGU6OlNhbHQ+IG1fdm9sYXRp
bGVTYWx0OwogICAgIFZlY3RvcjxXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6Q29tcGxldGlvbkNh
bGxiYWNrPiBtX3BlbmRpbmdJbml0aWFsaXphdGlvbkNhbGxiYWNrczsKIH07CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFn
ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0
b3JhZ2UuY3BwCmluZGV4IDgwM2E5OWZiZGRkNmQ4ZDIyNzBhZDU1YzliY2I1MGEwNTFhNDRiM2Yu
LjBiNjUyOGRkNzI4ZmI5MzMwYWE5ZDA1NDI4NTc0Y2Y0NjBkMDlhZjIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9y
YWdlLmNwcApAQCAtODQ2LDEwICs4NDYsNyBAQCB2b2lkIFN0b3JhZ2U6OnN0b3JlKGNvbnN0IFJl
Y29yZCYgcmVjb3JkLCBNYXBwZWRCb2R5SGFuZGxlciYmIG1hcHBlZEJvZHlIYW5kbGVyKQogICAg
IGlmICghaXNJbml0aWFsV3JpdGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIERlbGF5IHRo
ZSBzdGFydCBvZiB3cml0ZXMgYSBiaXQgdG8gYXZvaWQgYWZmZWN0aW5nIGVhcmx5IHBhZ2UgbG9h
ZC4KLSAgICAvLyBDb21wbGV0aW5nIHdyaXRlcyB3aWxsIGRpc3BhdGNoIG1vcmUgd3JpdGVzIHdp
dGhvdXQgZGVsYXkuCi0gICAgc3RhdGljIGNvbnN0IFNlY29uZHMgaW5pdGlhbFdyaXRlRGVsYXkg
PSAxX3M7Ci0gICAgbV93cml0ZU9wZXJhdGlvbkRpc3BhdGNoVGltZXIuc3RhcnRPbmVTaG90KGlu
aXRpYWxXcml0ZURlbGF5KTsKKyAgICBtX3dyaXRlT3BlcmF0aW9uRGlzcGF0Y2hUaW1lci5zdGFy
dE9uZVNob3QobV9pbml0aWFsV3JpdGVEZWxheSk7CiB9CiAKIHZvaWQgU3RvcmFnZTo6dHJhdmVy
c2UoY29uc3QgU3RyaW5nJiB0eXBlLCBUcmF2ZXJzZUZsYWdzIGZsYWdzLCBUcmF2ZXJzZUhhbmRs
ZXImJiB0cmF2ZXJzZUhhbmRsZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5oCmluZGV4IDQxMmVkOWVjNTczMTEz
ZDhlNTFiMmNmZTMxYmViMDVmOTVlZDk0NzkuLmI2ODhkY2Q0ZTBhNzVlYTEyYTlkMTBkZGU3Yzli
YjRjOGY5ZjRiNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlU3RvcmFnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5oCkBAIC0xMDQsNiArMTA0LDggQEAgcHVibGlj
OgogCiAgICAgflN0b3JhZ2UoKTsKIAorICAgIHZvaWQgd3JpdGVXaXRob3V0V2FpdGluZygpIHsg
bV9pbml0aWFsV3JpdGVEZWxheSA9IDBfczsgfTsKKwogcHJpdmF0ZToKICAgICBTdG9yYWdlKGNv
bnN0IFN0cmluZyYgZGlyZWN0b3J5UGF0aCwgTW9kZSwgU2FsdCk7CiAKQEAgLTE4Miw2ICsxODQs
MTAgQEAgcHJpdmF0ZToKICAgICBSZWY8V29ya1F1ZXVlPiBtX3NlcmlhbEJhY2tncm91bmRJT1F1
ZXVlOwogCiAgICAgQmxvYlN0b3JhZ2UgbV9ibG9iU3RvcmFnZTsKKworICAgIC8vIEJ5IGRlZmF1
bHQsIGRlbGF5IHRoZSBzdGFydCBvZiB3cml0ZXMgYSBiaXQgdG8gYXZvaWQgYWZmZWN0aW5nIGVh
cmx5IHBhZ2UgbG9hZC4KKyAgICAvLyBDb21wbGV0aW5nIHdyaXRlcyB3aWxsIGRpc3BhdGNoIG1v
cmUgd3JpdGVzIHdpdGhvdXQgZGVsYXkuCisgICAgU2Vjb25kcyBtX2luaXRpYWxXcml0ZURlbGF5
IHsgMV9zIH07CiB9OwogCiAvLyBGSVhNRTogUmVtb3ZlLCB1c2VkIGJ5IE5ldHdvcmtDYWNoZVN0
YXRpc3RpY3Mgb25seS4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91
dFRlc3RzL0NoYW5nZUxvZwppbmRleCA3N2I1Yjk3ZGIwYTUwZThhOTE0NDRlZDFhYzY0ODlkMGY1
MzM2OTY0Li4xOTUyNmRlZGFjMDMwY2JkMTcyMzkwOWMxODdiNGNjMGY0MzFlZGE3IDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTQgQEAKKzIwMTctMDktMTMgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUu
Y29tPgorCisgICAgICAgIEFkZCBDYWNoZSBBUEkgc3VwcG9ydCBvZiByZWNvcmRzIHBlcnNpc3Rl
bmN5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzY4
NDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGh0
dHAvdGVzdHMvY2FjaGUtc3RvcmFnZS9jYWNoZS1wZXJzaXN0ZW5jeS5odHRwcy5odG1sOgorICAg
ICAgICAqIGh0dHAvdGVzdHMvY2FjaGUtc3RvcmFnZS9jYWNoZS1yZWNvcmRzLXBlcnNpc3RlbmN5
Lmh0dHBzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9jYWNoZS1z
dG9yYWdlL2NhY2hlLXJlY29yZHMtcGVyc2lzdGVuY3kuaHR0cHMuaHRtbDogQWRkZWQuCisKIDIw
MTctMDktMTMgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KIAog
ICAgICAgICBGb2xsb3d1cCAocjIyMTgwNSk6IEFkZHJlc3MgY29tbWVudHMgYW5kIGFkZCBtb3Jl
IHRlc3RzCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2NhY2hlLXN0b3JhZ2Uv
Y2FjaGUtcGVyc2lzdGVuY3kuaHR0cHMuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvY2Fj
aGUtc3RvcmFnZS9jYWNoZS1wZXJzaXN0ZW5jeS5odHRwcy5odG1sCmluZGV4IGQxZWFkNGQ0YWYy
NWJjZThmNTRmNjBhOGEzMmRkMWQ3NzQxMWI4ZjguLmRjOWU5NmI2NWU4YzI0MWY3MDc5NmU2NTk2
NWUyNTdkOWMzNTJjZGQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvY2FjaGUt
c3RvcmFnZS9jYWNoZS1wZXJzaXN0ZW5jeS5odHRwcy5odG1sCisrKyBiL0xheW91dFRlc3RzL2h0
dHAvdGVzdHMvY2FjaGUtc3RvcmFnZS9jYWNoZS1wZXJzaXN0ZW5jeS5odHRwcy5odG1sCkBAIC00
MiwxMSArNDIsMTEgQEAKICAgICBwcm9taXNlX3Rlc3QodGVzdCA9PiB7CiAgICAgICAgIGlmICh3
aW5kb3cudGVzdFJ1bm5lcikKICAgICAgICAgICAgIHRlc3RSdW5uZXIuc2V0UHJpdmF0ZUJyb3dz
aW5nRW5hYmxlZChmYWxzZSk7Ci0gICAgICAgIHZhciBjbGVhclByb21pc2U7Ci0gICAgICAgIGlm
ICh3aW5kb3cuaW50ZXJuYWxzKQotICAgICAgICAgICAgY2xlYXJQcm9taXNlID1pbnRlcm5hbHMu
Y2xlYXJDYWNoZVN0b3JhZ2VNZW1vcnlSZXByZXNlbnRhdGlvbigpOwogCi0gICAgICAgIHJldHVy
biBQcm9taXNlLnJlc29sdmUoY2xlYXJQcm9taXNlKS50aGVuKCgpID0+IHsKKyAgICAgICAgcmV0
dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4geworICAgICAgICAgICAgaWYgKHdpbmRv
dy5pbnRlcm5hbHMpCisgICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFscy5jbGVhckNhY2hl
U3RvcmFnZU1lbW9yeVJlcHJlc2VudGF0aW9uKCk7CisgICAgICAgIH0pLnRoZW4oKCkgPT4gewog
ICAgICAgICAgICAgcmV0dXJuIHNlbGYuY2FjaGVzLmtleXMoKTsKICAgICAgICAgfSkudGhlbihr
ZXlzID0+IHsKICAgICAgICAgICAgIHZhciBwZW5kaW5nID0gW107CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL2NhY2hlLXN0b3JhZ2UvY2FjaGUtcmVjb3Jkcy1wZXJzaXN0ZW5j
eS5odHRwcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2NhY2hlLXN0b3Jh
Z2UvY2FjaGUtcmVjb3Jkcy1wZXJzaXN0ZW5jeS5odHRwcy1leHBlY3RlZC50eHQKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYzE5Y2NlYTNiNGRjNGU2YTAyMzA1MzJjMTc5ZmUxMTA0MTQxZjg2NgotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvY2FjaGUtc3RvcmFnZS9jYWNoZS1yZWNvcmRz
LXBlcnNpc3RlbmN5Lmh0dHBzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDkgQEAKKworUEFTUyBD
bGVhbmluZyBleGlzdGluZyBjYWNoZXMgCitQQVNTIENhY2hlLnB1dCBjYWxsZWQgdHdpY2Ugd2l0
aCBtYXRjaGluZyBSZXF1ZXN0cyAtIGtleXMgc2hvdWxkIHJlbWFpbiB0aGUgc2FtZSAtIHRlc3Rp
bmcgcGVyc2lzdGVuY3kgCitQQVNTIENsZWFuaW5nIGNyZWF0ZWQgY2FjaGVzIAorUEFTUyBDaGVj
a2luZyBwZXJzaXN0ZW5jeSBvZiBjYWNoZSBrZXlzIAorUEFTUyBDaGVja2luZyBwZXJzaXN0ZW5j
eSBvZiByZXNwb25zZSAKK1BBU1MgQ2hlY2tpbmcgcGVyc2lzdGVuY3kgb2YgcmVzcG9uc2UgYm9k
eSAKK1BBU1MgVGVzdGluZyBvdmVycmlkaW5nIG9mIGFuIGV4aXN0aW5nIGNhY2hlZCByZWNvcmQg
dGhhdCBpcyBub3QgaW4gbWVtb3J5IAorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL2NhY2hlLXN0b3JhZ2UvY2FjaGUtcmVjb3Jkcy1wZXJzaXN0ZW5jeS5odHRwcy5odG1sIGIv
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9jYWNoZS1zdG9yYWdlL2NhY2hlLXJlY29yZHMtcGVyc2lz
dGVuY3kuaHR0cHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iYjRiYWEwMGFiZWFhNWQ1NTE3YzMwODVlODFh
YjI4MmEzNzJhODUwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9j
YWNoZS1zdG9yYWdlL2NhY2hlLXJlY29yZHMtcGVyc2lzdGVuY3kuaHR0cHMuaHRtbApAQCAtMCww
ICsxLDEzMyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPkNhY2hl
IFN0b3JhZ2U6IHRlc3RpbmcgQ2FjaGUgcGVyc2lzdGVuY3k8L3RpdGxlPgorPHNjcmlwdCBzcmM9
Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNv
dXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cisg
ICAgPHNjcmlwdD4KK2Z1bmN0aW9uIGFzc2VydF9oZWFkZXJfZXF1YWxzKGFjdHVhbCwgZXhwZWN0
ZWQsIGRlc2NyaXB0aW9uKSB7CisgICAgYXNzZXJ0X2NsYXNzX3N0cmluZyhhY3R1YWwsICJIZWFk
ZXJzIiwgZGVzY3JpcHRpb24pOworICAgIHZhciBoZWFkZXI7CisgICAgdmFyIGFjdHVhbF9oZWFk
ZXJzID0gW107CisgICAgdmFyIGV4cGVjdGVkX2hlYWRlcnMgPSBbXTsKKyAgICBmb3IgKGhlYWRl
ciBvZiBhY3R1YWwpCisgICAgICAgIGFjdHVhbF9oZWFkZXJzLnB1c2goaGVhZGVyWzBdICsgIjog
IiArIGhlYWRlclsxXSk7CisgICAgZm9yIChoZWFkZXIgb2YgZXhwZWN0ZWQpCisgICAgICAgIGV4
cGVjdGVkX2hlYWRlcnMucHVzaChoZWFkZXJbMF0gKyAiOiAiICsgaGVhZGVyWzFdKTsKKyAgICBh
c3NlcnRfYXJyYXlfZXF1YWxzKGFjdHVhbF9oZWFkZXJzLCBleHBlY3RlZF9oZWFkZXJzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gKyAiIEhlYWRlcnMgZGlmZmVyLiIpOwor
fQorCitmdW5jdGlvbiBhc3NlcnRfcmVzcG9uc2VfZXF1YWxzKGFjdHVhbCwgZXhwZWN0ZWQsIGRl
c2NyaXB0aW9uKSB7CisgICAgYXNzZXJ0X2NsYXNzX3N0cmluZyhhY3R1YWwsICJSZXNwb25zZSIs
IGRlc2NyaXB0aW9uKTsKKyAgICBbInR5cGUiLCAidXJsIiwgInN0YXR1cyIsICJvayIsICJzdGF0
dXNUZXh0Il0uZm9yRWFjaChmdW5jdGlvbihhdHRyaWJ1dGUpIHsKKyAgICAgICAgYXNzZXJ0X2Vx
dWFscyhhY3R1YWxbYXR0cmlidXRlXSwgZXhwZWN0ZWRbYXR0cmlidXRlXSwKKyAgICAgICAgICAg
ICAgICAgICAgICBkZXNjcmlwdGlvbiArICIgQXR0cmlidXRlcyBkaWZmZXI6ICIgKyBhdHRyaWJ1
dGUgKyAiLiIpOworICAgIH0pOworICAgIGFzc2VydF9oZWFkZXJfZXF1YWxzKGFjdHVhbC5oZWFk
ZXJzLCBleHBlY3RlZC5oZWFkZXJzLCBkZXNjcmlwdGlvbik7Cit9CisKK2Z1bmN0aW9uIGFzc2Vy
dF9yZXF1ZXN0X2VxdWFscyhhY3R1YWwsIGV4cGVjdGVkLCBkZXNjcmlwdGlvbikgeworICAgIGFz
c2VydF9jbGFzc19zdHJpbmcoYWN0dWFsLCAiUmVxdWVzdCIsIGRlc2NyaXB0aW9uKTsKKyAgICBb
InVybCJdLmZvckVhY2goZnVuY3Rpb24oYXR0cmlidXRlKSB7CisgICAgICAgIGFzc2VydF9lcXVh
bHMoYWN0dWFsW2F0dHJpYnV0ZV0sIGV4cGVjdGVkW2F0dHJpYnV0ZV0sCisgICAgICAgICAgICAg
ICAgICAgICAgZGVzY3JpcHRpb24gKyAiIEF0dHJpYnV0ZXMgZGlmZmVyOiAiICsgYXR0cmlidXRl
ICsgIi4iKTsKKyAgICB9KTsKKyAgICBhc3NlcnRfaGVhZGVyX2VxdWFscyhhY3R1YWwuaGVhZGVy
cywgZXhwZWN0ZWQuaGVhZGVycywgZGVzY3JpcHRpb24pOworfQorCitmdW5jdGlvbiBhc3NlcnRf
cmVxdWVzdF9hcnJheV9lcXVhbHMoYWN0dWFsLCBleHBlY3RlZCwgZGVzY3JpcHRpb24pIHsKKyAg
ICBhc3NlcnRfdHJ1ZShBcnJheS5pc0FycmF5KGFjdHVhbCksIGRlc2NyaXB0aW9uKTsKKyAgICBh
c3NlcnRfZXF1YWxzKGFjdHVhbC5sZW5ndGgsIGV4cGVjdGVkLmxlbmd0aCwgZGVzY3JpcHRpb24p
OworICAgIGFjdHVhbC5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBpbmRleCkgeworICAgICAgICBh
c3NlcnRfcmVxdWVzdF9lcXVhbHModmFsdWUsIGV4cGVjdGVkW2luZGV4XSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICsgIiA6IG9iamVjdFsiICsgaW5kZXggKyAi
XSIpOworICAgIH0pOworfQorCitwcm9taXNlX3Rlc3QodGVzdCA9PiB7CisgICAgcmV0dXJuIHNl
bGYuY2FjaGVzLmtleXMoKS50aGVuKGtleXMgPT4geworICAgICAgICB2YXIgcGVuZGluZyA9IFtd
OworICAgICAgICBmb3IgKGtleSBvZiBrZXlzKQorICAgICAgICAgICAgcGVuZGluZy5wdXNoKHNl
bGYuY2FjaGVzLmRlbGV0ZShrZXlzWzBdKSk7CisgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChw
ZW5kaW5nKTsKKyAgICB9KTsKK30sICJDbGVhbmluZyBleGlzdGluZyBjYWNoZXMiKTsKKwordmFy
IHRlc3RfdXJsID0gJ2h0dHBzOi8vZXhhbXBsZS5jb20vZm9vJzsKK3ZhciB0ZXN0X2JvZHkgPSAn
SGVsbG8gd29ybGQhJzsKKworcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgICB2YXIgY2FjaGU7Cisg
ICAgdmFyIGNhY2hlX2tleXM7CisgICAgdmFyIGZpcnN0X3Jlc3BvbnNlID0gbmV3IFJlc3BvbnNl
KCJPbGQgYm9keSIsIHsgc3RhdHVzVGV4dDogJ09sZCBzdGF0dXMnIH0pOworICAgIHZhciBhbHRl
cm5hdGVfcmVzcG9uc2UgPSBuZXcgUmVzcG9uc2UoIk5ldyBib2R5IiwgeyBzdGF0dXNUZXh0OiAn
TmV3IHN0YXR1cycgfSk7CisgICAgcmV0dXJuIHNlbGYuY2FjaGVzLm9wZW4oInRlc3QtY2FjaGUt
cmVjb3Jkcy1wZXJzaXN0ZW5jeSIpLnRoZW4oYyA9PiB7CisgICAgICAgIGNhY2hlID0gYzsKKyAg
ICB9KS50aGVuKCgpID0+IHsKKyAgICAgICAgcmV0dXJuIGNhY2hlLnB1dCh0ZXN0X3VybCwgZmly
c3RfcmVzcG9uc2UpOworICAgIH0pLnRoZW4oKCkgPT4geworICAgICAgICByZXR1cm4gY2FjaGUu
a2V5cygpOworICAgIH0pLnRoZW4oa2V5cyA9PiB7CisgICAgICAgIGNhY2hlX2tleXMgPSBrZXlz
OworICAgICAgICBpZiAod2luZG93LmludGVybmFscykKKyAgICAgICAgICAgIHJldHVybiBpbnRl
cm5hbHMuY2xlYXJDYWNoZVN0b3JhZ2VNZW1vcnlSZXByZXNlbnRhdGlvbigpOworICAgIH0pLnRo
ZW4oKCkgPT4geworICAgICAgICByZXR1cm4gc2VsZi5jYWNoZXMub3BlbigidGVzdC1jYWNoZS1y
ZWNvcmRzLXBlcnNpc3RlbmN5Iik7CisgICAgfSkudGhlbihjID0+IHsKKyAgICAgICAgY2FjaGUg
PSBjOworICAgICAgICByZXR1cm4gY2FjaGUua2V5cygpLnRoZW4oKGtleXMpID0+IHsKKyAgICAg
ICAgICAgIHRlc3QoKCkgPT4geworICAgICAgICAgICAgICAgIGFzc2VydF9yZXF1ZXN0X2FycmF5
X2VxdWFscyhrZXlzLCBjYWNoZV9rZXlzKTsKKyAgICAgICAgICAgIH0sICJDaGVja2luZyBwZXJz
aXN0ZW5jeSBvZiBjYWNoZSBrZXlzIik7CisgICAgICAgICAgICByZXR1cm4gY2FjaGUubWF0Y2go
dGVzdF91cmwpOworICAgICAgICB9KS50aGVuKChyZXN1bHQpID0+IHsKKyAgICAgICAgICAgIHRl
c3QoKCkgPT4geworICAgICAgICAgICAgICAgIGFzc2VydF9yZXNwb25zZV9lcXVhbHMocmVzdWx0
LCBmaXJzdF9yZXNwb25zZSwgIkNhY2hlLnB1dCBzaG91bGQgc3RvcmUgdGhlIHJlc3BvbnNlIHBl
cnNpc3RlbnRseSIpOworICAgICAgICAgICAgfSwgIkNoZWNraW5nIHBlcnNpc3RlbmN5IG9mIHJl
c3BvbnNlIik7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0LnRleHQoKTsKKyAgICAgICAgfSku
dGhlbigoYm9keSkgPT4geworICAgICAgICAgICAgdGVzdCgoKSA9PiB7CisgICAgICAgICAgICAg
ICAgYXNzZXJ0X2VxdWFscyhib2R5LCAiT2xkIGJvZHkiLCAiQ2FjaGUgcHV0IHNob3VsZCBzdG9y
ZSB0aGUgcmVzcG9uc2UgYm9keSBwZXJzaXN0ZW50bHkuIik7CisgICAgICAgICAgICB9LCAiQ2hl
Y2tpbmcgcGVyc2lzdGVuY3kgb2YgcmVzcG9uc2UgYm9keSIpOworICAgICAgICB9KTsKKyAgICB9
KS50aGVuKCgpID0+IHsKKyAgICAgICAgcmV0dXJuIGNhY2hlLnB1dCh0ZXN0X3VybCwgYWx0ZXJu
YXRlX3Jlc3BvbnNlKTsKKyAgICB9KS50aGVuKCgpID0+IHsKKyAgICAgICAgcmV0dXJuIGNhY2hl
LmtleXMoKTsKKyAgICB9KS50aGVuKGtleXMgPT4geworICAgICAgICBjYWNoZV9rZXlzID0ga2V5
czsKKyAgICAgICAgaWYgKHdpbmRvdy5pbnRlcm5hbHMpCisgICAgICAgICAgICByZXR1cm4gaW50
ZXJuYWxzLmNsZWFyQ2FjaGVTdG9yYWdlTWVtb3J5UmVwcmVzZW50YXRpb24oKTsKKyAgICB9KS50
aGVuKCgpID0+IHsKKyAgICAgICAgcmV0dXJuIHNlbGYuY2FjaGVzLm9wZW4oInRlc3QtY2FjaGUt
cmVjb3Jkcy1wZXJzaXN0ZW5jeSIpOworICAgIH0pLnRoZW4oYyA9PiB7CisgICAgICAgIGNhY2hl
ID0gYzsKKyAgICAgICAgcmV0dXJuIGNhY2hlLmtleXMoKTsKKyAgICB9KS50aGVuKChrZXlzKSA9
PiB7CisgICAgICAgIGFzc2VydF9yZXF1ZXN0X2FycmF5X2VxdWFscyhrZXlzLCBjYWNoZV9rZXlz
KTsKKyAgICB9KS50aGVuKCgpID0+IHsKKyAgICAgICAgcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAg
ICAgICAgICAgIHJldHVybiBjYWNoZS5tYXRjaCh0ZXN0X3VybCkudGhlbigocmVzdWx0KSA9PiB7
CisgICAgICAgICAgICAgICAgYXNzZXJ0X3Jlc3BvbnNlX2VxdWFscyhyZXN1bHQsIGFsdGVybmF0
ZV9yZXNwb25zZSwgJ0NhY2hlLnB1dCBzaG91bGQgcmVwbGFjZSBleGlzdGluZyAnICsgJ3Jlc3Bv
bnNlIHdpdGggbmV3IHJlc3BvbnNlLicpOworICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQu
dGV4dCgpOworICAgICAgICAgICAgfSkudGhlbigoYm9keSkgPT4geworICAgICAgICAgICAgICAg
IGFzc2VydF9lcXVhbHMoYm9keSwgIk5ldyBib2R5IiwgJ0NhY2hlIHB1dCBzaG91bGQgc3RvcmUg
bmV3IHJlc3BvbnNlIGJvZHkuJyk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSwgJ1Rlc3Rp
bmcgb3ZlcnJpZGluZyBvZiBhbiBleGlzdGluZyBjYWNoZWQgcmVjb3JkIHRoYXQgaXMgbm90IGlu
IG1lbW9yeScpOworICAgIH0pOworfSwgJ0NhY2hlLnB1dCBjYWxsZWQgdHdpY2Ugd2l0aCBtYXRj
aGluZyBSZXF1ZXN0cyAtIGtleXMgc2hvdWxkIHJlbWFpbiB0aGUgc2FtZSAtIHRlc3RpbmcgcGVy
c2lzdGVuY3knKTsKKworcHJvbWlzZV90ZXN0KHRlc3QgPT4geworICAgIHJldHVybiBzZWxmLmNh
Y2hlcy5rZXlzKCkudGhlbihrZXlzID0+IHsKKyAgICAgICAgdmFyIHBlbmRpbmcgPSBbXTsKKyAg
ICAgICAgZm9yIChrZXkgb2Yga2V5cykKKyAgICAgICAgICAgIHBlbmRpbmcucHVzaChzZWxmLmNh
Y2hlcy5kZWxldGUoa2V5c1swXSkpOworICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocGVuZGlu
Zyk7CisgICAgfSk7Cit9LCAiQ2xlYW5pbmcgY3JlYXRlZCBjYWNoZXMiKTsKKyAgICA8L3Njcmlw
dD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>320773</attachid>
            <date>2017-09-14 09:00:19 -0700</date>
            <delta_ts>2017-09-14 09:05:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-176845-20170914090018.patch</filename>
            <type>text/plain</type>
            <size>55752</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIxOTk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDBiNGM1Y2Q2NGM0YzdhNzdl
Y2Y2YmY0MGY5ZDBhNTFkYWVjNTMzNzIuLmE3ZmFkNjEwMmQwY2FkZDE3MmRhZGUxMmZhMzdkYzc0
ZGJiNzM4MjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTA1IEBACiAyMDE3LTA5LTEzICBZb3Vlbm4g
RmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAorICAgICAgICBBZGQgQ2FjaGUgQVBJIHN1cHBv
cnQgb2YgcmVjb3JkcyBwZXJzaXN0ZW5jeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTc2ODQ1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgSW50cm9kdWNpbmcgYXN5bmNocm9ub3VzIG9wZW5pbmcgb2YgQ2Fj
aGUgb2JqZWN0cy4KKyAgICAgICAgV2hlbiBvcGVuaW5nLCBDYWNoZSBvYmplY3RzIHdpbGwgcmVh
ZCB0aGUgbGlzdCBvZiByZWNvcmRzIGZyb20gdGhlIGRpc2suCisgICAgICAgIFRoZXkga2VlcCBp
biBtZW1vcnkgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiB0byBtYWtlIGFueSBtYXRjaCBvciBy
ZW1vdmUgcmVxdWVzdCB3aXRob3V0IHJlYWRpbmcgZnVydGhlciBpbmZvcm1hdGlvbiBmcm9tIHRo
ZSBkaXNrLgorICAgICAgICBDYWNoZSBvYmplY3RzIHRodXMga2VlcCBkdXJpbmcgdGhlIG9wZW5p
bmcgdGltZSBhIGxpc3Qgb2YgY2FsbGJhY2tzIHRvIGNhbGwgd2hlbiBiZWluZyBvcGVuZWQuCisg
ICAgICAgIFBlcnNpc3RlbnQgc3RvcmFnZSBpcyBpbXBsZW1lbnRlZCB0aHJvdWdoIE5ldHdvcmtD
YWNoZTo6U3RvcmFnZS4KKworICAgICAgICBBIENhY2hlIG9iamVjdCBpcyBhZGRlZCBhIHVuaXF1
ZSBuYW1lIHNvIHRoYXQgcmVjb3JkcyBmcm9tIGEgQ2FjaGUgY2Fubm90IGJlIG1peGVkIHdpdGgg
cmVjb3JkcyBmcm9tIGFub3RoZXIgQ2FjaGUuCisgICAgICAgIFRoaXMgdW5pcXVlIG5hbWUgaXMg
c3RvcmVkIHBlcnNpc3Rlbmx5IGluIGFkZGl0aW9uIHRvIHRoZSBDYWNoZSBuYW1lLgorICAgICAg
ICBUaGlzIHVuaXF1ZSBuYW1lIGlzIHVzZWQgYXMgdGhlIGtleSB0eXBlIGdpdmVuIHRvIHRoZSBz
dG9yYWdlLgorCisgICAgICAgIFJlcXVlc3QsIHJlc3BvbnNlIGFuZCByZXNwb25zZWJvZHkgZGF0
YSBhcmUgbm8gbG9uZ2VyIGtlcHQgYnkgdGhlIENhY2hlIG9iamVjdC4KKyAgICAgICAgRm9yIHJl
Z3VsYXIgc2Vzc2lvbnMsIHRoaXMgaW5mb3JtYXRpb24gaXMga2VwdCBvbiB0aGUgZGlzayB0aHJv
dWdoIE5ldHdvcmtDYWNoZTo6U3RvcmFnZS4KKyAgICAgICAgSW5zZXJ0aW9uIHRpbWUgaXMgYWxz
byBzdG9yZWQgcGVyc2lzdGVudGx5IHNvIGFzIHRvIGtlZXAgdGhlIG9yZGVyaW5nIG9mIHRoZSBy
ZWNvcmRzIGNvbnNpc3RlbnQuCisgICAgICAgIEZvciBwcml2YXRlIGJyb3dzaW5nIHNlc3Npb25z
LCB0aGlzIGluZm9ybWF0aW9uIGlzIGtlcHQgaW4gYSBtYXAgb3duZWQgYnkgdGhlIENhY2hlcyBv
YmplY3QuCisgICAgICAgIFJlY29yZERhdGEgaXMgcmVuYW1lZCB0byBSZWNvcmRJbmZvcm1hdGlv
biBhcyBpdCBub3cgb25seSBjb250YWlucyB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBoYW5kbGUg
dGhlIGRpZmZlcmVudCBDYWNoZSBhY3Rpb25zLgorCisgICAgICAgIEZvciBldmVyeSByZWNvcmQg
cmV0cmlldmFsIGFjdGlvbiwgYSBSZWFkUmVjb3JkVGFza0NvdW50ZXIgaXMgdXNlZC4KKyAgICAg
ICAgSXRzIHB1cnBvc2UgaXMgdG8gYWxsb3cgcmV0cmlldmluZyB0aGUgcmVjb3JkIGRhdGEgb24g
dGhlIGRpc2sgaW4gcGFyYWxsZWwsCisgICAgICAgIGFuZCB0aGVuIHNlbmQgYmFjayB0aGUgaW5m
b3JtYXRpb24gd2hlbiBldmVyeXRoaW5nIGlzIHJlYWQuCisgICAgICAgIEluIGNhc2Ugc29tZSBy
ZWNvcmRzIGNhbm5vdCBiZSBjb3JyZWN0bHkgcmVhZCwgdGhleSBhcmUgcmVtb3ZlZCBhdXRvbWF0
aWNhbGx5IGF0IHRoYXQgcG9pbnQuCisgICAgICAgIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9u
IGxvYWRzIGFsbCBpbmZvcm1hdGlvbiBpbiBtZW1vcnkgaW5jbHVkaW5nIHJlc3BvbnNlIGJvZGll
cy4KKyAgICAgICAgRnVydGhlciBpbXByb3ZlbWVudHMgbWlnaHQgY29uc2lkZXIgc3RyZWFtaW5n
IHRoZSByZXNwb25zZSBib2RpZXMgcHJvZ3Jlc3NpdmVseS4KKworICAgICAgICBGb3IgZXZlcnkg
c3RvcmVkIHJlY29yZCwgYW4gQXN5bmNocm9ub3VzUHV0VGFza0NvdW50ZXIgaXMgdXNlZC4KKyAg
ICAgICAgSXRzIHB1cnBvc2UgaXMgYWxzbyB0byB3YWl0IGZvciBhbGwgcHV0IGFjdGlvbnMgdG8g
YmUgY29tcGxldGVkIGJlZm9yZSBleGVjdXRpbmcgdGhlIGNvbXBsZXRpb24gY2FsbGJhY2suCisg
ICAgICAgIEluIHNvbWUgY2FzZXMsIGEgcmVjb3JkIG5lZWRzIHRvIGJlIG92ZXJyaWRlbi4KKyAg
ICAgICAgSW4gdGhhdCBjYXNlLCBhcyBwZXIgdGhlIHNwZWNpZmljYXRpb24sIG9ubHkgdGhlIGRh
dGEgcmVsYXRlZCB0byB0aGUgcmVzcG9uc2UgaXMgdG8gYmUgbW9kaWZpZWQuCisgICAgICAgIFRo
aXMgcmVxdWlyZXMgcmVhZGluZyB0aGUgcmVjb3JkIHJlcXVlc3QgZGF0YSBvbiBkaXNrIGJlZm9y
ZSBhY3R1YWxseSB3cml0aW5nIHRoZSB3aG9sZSByZWNvcmQgYWdhaW4uCisgICAgICAgIFRoaXMg
aXMgaW1wbGVtZW50ZWQgaW4gdXBkYXRlUmVjb3JkVG9EaXNrLgorCisgICAgICAgIFRoZSBDYWNo
ZSBvYmplY3QgaXMgZGVsZWdhdGluZyBhbGwgcmVjb3JkIHdyaXRpbmcvcmVhZGluZyB0YXNrcyB0
byBpdHMgQ2FjaGVzIG9iamVjdC4KKyAgICAgICAgVGhlIENhY2hlcyBvYmplY3QgaXMgcmVzcG9u
c2libGUgdG8gaGFuZGxlIHBlcnNpc3RlbnQvcHJpdmF0ZSBzZXNzaW9ucy4KKworICAgICAgICAq
IE5ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OkNhY2hlU3RvcmFnZTo6RW5naW5lOjpyZXRyaWV2ZVJlY29yZHMpOiBNYWtpbmcgc3Vy
ZSBDYWNoZSBvYmplY3QgaXMgb3BlbmVkLgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6
OkVuZ2luZTo6cmVhZENhY2hlKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFn
ZTo6RW5naW5lOjp1bmxvY2spOiBEaXNwb3NpbmcgdGhlIGNhY2hlIHdpdGhvdXQgZ29pbmcgdGhy
b3VnaCBpbml0aWFsaXppbmcgaXQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2Fj
aGVTdG9yYWdlRW5naW5lQ2FjaGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6
OmNvbXB1dGVLZXlVUkwpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OnF1ZXJ5Q2Fj
aGUpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OnVwZGF0ZVZhcnlJbmZvcm1hdGlv
bik6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OnRvUmVjb3JkSW5mb3Jt
YXRpb24pOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjpDYWNoZSk6Cisg
ICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6Om9wZW4pOgorICAgICAgICAoV2Vi
S2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjpmaW5pc2hPcGVuaW5nKToKKyAgICAgICAgKFdlYktp
dDo6Q2FjaGVTdG9yYWdlOjpSZWFkUmVjb3JkVGFza0NvdW50ZXI6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6UmVhZFJlY29yZFRhc2tDb3VudGVyOjp+UmVhZFJlY29y
ZFRhc2tDb3VudGVyKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpSZWFkUmVjb3Jk
VGFza0NvdW50ZXI6OmFwcGVuZFJlY29yZCk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFn
ZTo6UmVhZFJlY29yZFRhc2tDb3VudGVyOjpSZWFkUmVjb3JkVGFza0NvdW50ZXIpOgorICAgICAg
ICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjpyZXRyaWV2ZVJlY29yZCk6CisgICAgICAg
IChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OnJldHJpZXZlUmVjb3Jkcyk6CisgICAgICAg
IChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OmFkZFJlY29yZCk6CisgICAgICAgIChXZWJL
aXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OnJlY29yZHNGcm9tVVJMKToKKyAgICAgICAgKFdlYktp
dDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6cmVjb3Jkc0Zyb21VUkwgY29uc3QpOgorICAgICAgICAo
V2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkFzeW5jaHJvbm91c1B1dFRhc2tDb3VudGVyOjpjcmVhdGUp
OgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkFzeW5jaHJvbm91c1B1dFRhc2tDb3Vu
dGVyOjp+QXN5bmNocm9ub3VzUHV0VGFza0NvdW50ZXIpOgorICAgICAgICAoV2ViS2l0OjpDYWNo
ZVN0b3JhZ2U6OkFzeW5jaHJvbm91c1B1dFRhc2tDb3VudGVyOjpvbkNvbXBsZXRpb24pOgorICAg
ICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkFzeW5jaHJvbm91c1B1dFRhc2tDb3VudGVyOjpz
ZXRFcnJvcik6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OnB1dCk6Cisg
ICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OnJlbW92ZSk6CisgICAgICAgIChX
ZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OnJlbW92ZUZyb21SZWNvcmRMaXN0KToKKyAgICAg
ICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6d3JpdGVSZWNvcmRUb0Rpc2spOgorICAg
ICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjp1cGRhdGVSZWNvcmRUb0Rpc2spOgor
ICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjpyZWFkUmVjb3JkRnJvbURpc2sp
OgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjpyZW1vdmVSZWNvcmRGcm9t
RGlzayk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OmVuY29kZSk6Cisg
ICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6ZGVjb2RlUmVjb3JkSGVhZGVyKToKKyAgICAg
ICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6ZGVjb2RlKToKKyAgICAgICAgKFdlYktp
dDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6a2V5cyBjb25zdCk6CisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUuaDoKKyAgICAgICAgKFdlYktpdDo6
Q2FjaGVTdG9yYWdlOjpDYWNoZTo6aXNPcGVuZWQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpD
YWNoZVN0b3JhZ2U6OkNhY2hlOjp1bmlxdWVOYW1lIGNvbnN0KToKKyAgICAgICAgKiBOZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJLaXQ6
OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjpvcGVuKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9y
YWdlOjpDYWNoZXM6OnJlbW92ZSk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2Fj
aGVzOjpkaXNwb3NlKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjplbmNvZGVDYWNo
ZU5hbWVzKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpkZWNvZGVDYWNoZXNOYW1l
cyk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjpyZWFkQ2FjaGVzRnJv
bURpc2spOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6cmVhZFJlY29y
ZHNMaXN0KToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6OndyaXRlUmVj
b3JkKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6OnJlYWRSZWNvcmQp
OgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6cmVtb3ZlUmVjb3JkKToK
KyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6OmNsZWFyTWVtb3J5UmVwcmVz
ZW50YXRpb24pOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6c2FsdCBj
b25zdCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5l
Q2FjaGVzLmg6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjpzaG91bGRQ
ZXJzaXN0IGNvbnN0KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVTdG9yYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpTdG9yYWdlOjpz
dG9yZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFn
ZS5oOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlN0b3JhZ2U6OndyaXRlV2l0aG91
dFdhaXRpbmcpOgorCisyMDE3LTA5LTEzICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNv
bT4KKwogICAgICAgICBJbnRlcm5hbHMgY2xlYXJDYWNoZVN0b3JhZ2VNZW1vcnlSZXByZXNlbnRh
dGlvbiBzaG91bGQgcmV0dXJuIGEgUHJvbWlzZQogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc2ODE4CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lLmNwcCBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lLmNwcAppbmRleCA1ODMy
YzFhMTE3OTVlOWZjZDhiMmYxN2FiOGNmNTdmNmZlZmNjMzBiLi40MDhmNjJiMWNjYjRmZmI4M2U5
ZWExNzk4NmQzNmQwNGQzZjk5ZTIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmUuY3BwCkBAIC0xMzIsOCArMTMy
LDcgQEAgdm9pZCBFbmdpbmU6OnJldHJpZXZlUmVjb3Jkcyh1aW50NjRfdCBjYWNoZUlkZW50aWZp
ZXIsIFdlYkNvcmU6OlVSTCYmIHVybCwgUmVjb3IKICAgICAgICAgICAgIGNhbGxiYWNrKG1ha2VV
bmV4cGVjdGVkKHJlc3VsdC5lcnJvcigpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KLQotICAgICAgICBjYWxsYmFjayhyZXN1bHQudmFsdWUoKS5nZXQoKS5yZXRyaWV2ZVJlY29y
ZHModXJsKSk7CisgICAgICAgIHJlc3VsdC52YWx1ZSgpLmdldCgpLnJldHJpZXZlUmVjb3Jkcyh1
cmwsIFdURk1vdmUoY2FsbGJhY2spKTsKICAgICB9KTsKIH0KIApAQCAtMjE3LDEyICsyMTYsMjgg
QEAgdm9pZCBFbmdpbmU6OnJlYWRDYWNoZXNGcm9tRGlzayhjb25zdCBTdHJpbmcmIG9yaWdpbiwg
Q2FjaGVzQ2FsbGJhY2smJiBjYWxsYmFjaykKIAogdm9pZCBFbmdpbmU6OnJlYWRDYWNoZSh1aW50
NjRfdCBjYWNoZUlkZW50aWZpZXIsIENhY2hlQ2FsbGJhY2smJiBjYWxsYmFjaykKIHsKLSAgICAv
LyBGSVhNRTogSW1wbGVtZW50IHJlYWRpbmcuCiAgICAgYXV0byogY2FjaGUgPSB0aGlzLT5jYWNo
ZShjYWNoZUlkZW50aWZpZXIpOwogICAgIGlmICghY2FjaGUpIHsKICAgICAgICAgY2FsbGJhY2so
bWFrZVVuZXhwZWN0ZWQoRXJyb3I6OkludGVybmFsKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CisgICAgaWYgKCFjYWNoZS0+aXNPcGVuZWQoKSkgeworICAgICAgICBjYWNoZS0+b3BlbihbdGhp
cywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjYWNoZUlkZW50aWZpZXIsIGNhbGxi
YWNrID0gV1RGTW92ZShjYWxsYmFjayldKHN0ZDo6b3B0aW9uYWw8RXJyb3I+JiYgZXJyb3IpIG11
dGFibGUgeworICAgICAgICAgICAgaWYgKGVycm9yKSB7CisgICAgICAgICAgICAgICAgY2FsbGJh
Y2sobWFrZVVuZXhwZWN0ZWQoZXJyb3IudmFsdWUoKSkpOworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYXV0byogY2FjaGUgPSB0aGlzLT5jYWNo
ZShjYWNoZUlkZW50aWZpZXIpOworICAgICAgICAgICAgaWYgKCFjYWNoZSkgeworICAgICAgICAg
ICAgICAgIGNhbGxiYWNrKG1ha2VVbmV4cGVjdGVkKEVycm9yOjpJbnRlcm5hbCkpOworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFTU0VSVChjYWNo
ZS0+aXNPcGVuZWQoKSk7CisgICAgICAgICAgICBjYWxsYmFjayhzdGQ6OnJlZmVyZW5jZV93cmFw
cGVyPENhY2hlPiB7ICpjYWNoZSB9KTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CiAgICAgY2FsbGJhY2soc3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxDYWNoZT4geyAqY2FjaGUg
fSk7CiB9CiAKQEAgLTMyOCwxMiArMzQzLDExIEBAIHZvaWQgRW5naW5lOjp1bmxvY2sodWludDY0
X3QgY2FjaGVJZGVudGlmaWVyKQogICAgIGlmICgtLWxvY2tDb3VudC0+dmFsdWUpCiAgICAgICAg
IHJldHVybjsKIAotICAgIHJlYWRDYWNoZShjYWNoZUlkZW50aWZpZXIsIFt0aGlzXShDYWNoZU9y
RXJyb3ImJiByZXN1bHQpIG11dGFibGUgewotICAgICAgICBpZiAoIXJlc3VsdC5oYXNWYWx1ZSgp
KQotICAgICAgICAgICAgcmV0dXJuOworICAgIGF1dG8qIGNhY2hlID0gdGhpcy0+Y2FjaGUoY2Fj
aGVJZGVudGlmaWVyKTsKKyAgICBpZiAoIWNhY2hlKQorICAgICAgICByZXR1cm47CiAKLSAgICAg
ICAgcmVzdWx0LnZhbHVlKCkuZ2V0KCkuZGlzcG9zZSgpOwotICAgIH0pOworICAgIGNhY2hlLT5k
aXNwb3NlKCk7CiB9CiAKIFN0cmluZyBFbmdpbmU6OnJlcHJlc2VudGF0aW9uKCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5l
Q2FjaGUuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3Jh
Z2VFbmdpbmVDYWNoZS5jcHAKaW5kZXggNDgxYWRkN2VjY2IxYzVhMjUyM2VlYWY4MmI2NjRiNzNk
ZmVhNjg1ZS4uNjgwMjZkM2U4ZmVhYTEyNjdmNmUyOTE3ZTM4ZTIwMmMwNWNjM2ZhNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdp
bmVDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNo
ZVN0b3JhZ2VFbmdpbmVDYWNoZS5jcHAKQEAgLTI3LDE1ICsyNywxNiBAQAogI2luY2x1ZGUgIkNh
Y2hlU3RvcmFnZUVuZ2luZS5oIgogCiAjaW5jbHVkZSAiQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVz
LmgiCisjaW5jbHVkZSAiTmV0d29ya0NhY2hlQ29kZXJzLmgiCiAjaW5jbHVkZSAiTmV0d29ya0Nh
Y2hlSU9DaGFubmVsLmgiCiAjaW5jbHVkZSAiTmV0d29ya0NhY2hlS2V5LmgiCiAjaW5jbHVkZSAi
TmV0d29ya1Byb2Nlc3MuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0NhY2hlUXVlcnlPcHRpb25zLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9IVFRQUGFyc2Vycy5oPgogI2luY2x1ZGUgPHBhbC9TZXNzaW9u
SUQuaD4KLSNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvTWFpblRo
cmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9V
VUlELmg+CiAjaW5jbHVkZSA8d3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuaD4KICNp
bmNsdWRlIDx3dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudERlY29kZXIuaD4KICNpbmNsdWRlIDx3
dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudEVuY29kZXIuaD4KQEAgLTUxLDcgKzUyLDE4IEBAIG5h
bWVzcGFjZSBXZWJLaXQgewogCiBuYW1lc3BhY2UgQ2FjaGVTdG9yYWdlIHsKIAotc3RhdGljIGlu
bGluZSBWZWN0b3I8dWludDY0X3Q+IHF1ZXJ5Q2FjaGUoY29uc3QgVmVjdG9yPFJlY29yZERhdGE+
KiByZWNvcmRzLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IENhY2hlUXVl
cnlPcHRpb25zJiBvcHRpb25zKQorc3RhdGljIHN0ZDo6b3B0aW9uYWw8c3RkOjpwYWlyPFJlY29y
ZCwgZG91YmxlPj4gZGVjb2RlUmVjb3JkSGVhZGVyKGNvbnN0IFN0b3JhZ2U6OlJlY29yZCYpOwor
CitzdGF0aWMgaW5saW5lIFN0cmluZyBjb21wdXRlS2V5VVJMKGNvbnN0IFVSTCYgdXJsKQorewor
ICAgIFVSTCBrZXlVUkwgPSB1cmw7CisgICAgaWYgKGtleVVSTC5oYXNRdWVyeSgpKQorICAgICAg
ICBrZXlVUkwuc2V0UXVlcnkoeyB9KTsKKyAgICBrZXlVUkwucmVtb3ZlRnJhZ21lbnRJZGVudGlm
aWVyKCk7CisgICAgcmV0dXJuIGtleVVSTDsKK30KKworc3RhdGljIGlubGluZSBWZWN0b3I8dWlu
dDY0X3Q+IHF1ZXJ5Q2FjaGUoY29uc3QgVmVjdG9yPFJlY29yZEluZm9ybWF0aW9uPiogcmVjb3Jk
cywgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBDYWNoZVF1ZXJ5T3B0aW9u
cyYgb3B0aW9ucykKIHsKICAgICBpZiAoIXJlY29yZHMpCiAgICAgICAgIHJldHVybiB7IH07CkBA
IC02Nyw0NyArNzksNDIgQEAgc3RhdGljIGlubGluZSBWZWN0b3I8dWludDY0X3Q+IHF1ZXJ5Q2Fj
aGUoY29uc3QgVmVjdG9yPFJlY29yZERhdGE+KiByZWNvcmRzLCBjb24KICAgICByZXR1cm4gcmVz
dWx0czsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZVZhcnlJbmZvcm1hdGlvbihSZWNv
cmREYXRhJiByZWNvcmREYXRhKQorc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZVZhcnlJbmZvcm1h
dGlvbihSZWNvcmRJbmZvcm1hdGlvbiYgcmVjb3JkSW5mb3JtYXRpb24sIGNvbnN0IFJlc291cmNl
UmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7Ci0g
ICAgYXV0byB2YXJ5VmFsdWUgPSByZWNvcmREYXRhLmRhdGEtPnJlc3BvbnNlLmh0dHBIZWFkZXJG
aWVsZChXZWJDb3JlOjpIVFRQSGVhZGVyTmFtZTo6VmFyeSk7CisgICAgYXV0byB2YXJ5VmFsdWUg
PSByZXNwb25zZS5odHRwSGVhZGVyRmllbGQoV2ViQ29yZTo6SFRUUEhlYWRlck5hbWU6OlZhcnkp
OwogICAgIGlmICh2YXJ5VmFsdWUuaXNOdWxsKCkpIHsKLSAgICAgICAgcmVjb3JkRGF0YS5oYXNW
YXJ5U3RhciA9IGZhbHNlOwotICAgICAgICByZWNvcmREYXRhLnZhcnlIZWFkZXJzID0geyB9Owor
ICAgICAgICByZWNvcmRJbmZvcm1hdGlvbi5oYXNWYXJ5U3RhciA9IGZhbHNlOworICAgICAgICBy
ZWNvcmRJbmZvcm1hdGlvbi52YXJ5SGVhZGVycyA9IHsgfTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAogICAgIHZhcnlWYWx1ZS5zcGxpdCgnLCcsIGZhbHNlLCBbJl0oU3RyaW5nVmlldyB2aWV3
KSB7Ci0gICAgICAgIGlmICghcmVjb3JkRGF0YS5oYXNWYXJ5U3RhciAmJiBzdHJpcExlYWRpbmdB
bmRUcmFpbGluZ0hUVFBTcGFjZXModmlldykgPT0gIioiKQotICAgICAgICAgICAgcmVjb3JkRGF0
YS5oYXNWYXJ5U3RhciA9IHRydWU7CisgICAgICAgIGlmICghcmVjb3JkSW5mb3JtYXRpb24uaGFz
VmFyeVN0YXIgJiYgc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVFRQU3BhY2VzKHZpZXcpID09ICIq
IikKKyAgICAgICAgICAgIHJlY29yZEluZm9ybWF0aW9uLmhhc1ZhcnlTdGFyID0gdHJ1ZTsKICAg
ICAgICAgU3RyaW5nIGhlYWRlck5hbWUgPSB2aWV3LnRvU3RyaW5nKCk7Ci0gICAgICAgIHJlY29y
ZERhdGEudmFyeUhlYWRlcnMuYWRkKGhlYWRlck5hbWUsIHJlY29yZERhdGEuZGF0YS0+cmVxdWVz
dC5odHRwSGVhZGVyRmllbGQoaGVhZGVyTmFtZSkpOworICAgICAgICByZWNvcmRJbmZvcm1hdGlv
bi52YXJ5SGVhZGVycy5hZGQoaGVhZGVyTmFtZSwgcmVxdWVzdC5odHRwSGVhZGVyRmllbGQoaGVh
ZGVyTmFtZSkpOwogICAgIH0pOwogCi0gICAgaWYgKHJlY29yZERhdGEuaGFzVmFyeVN0YXIpCi0g
ICAgICAgIHJlY29yZERhdGEudmFyeUhlYWRlcnMgPSB7IH07Ci19Ci0KLXN0YXRpYyBpbmxpbmUg
UmVjb3JkIHRvUmVjb3JkKGNvbnN0IFJlY29yZERhdGEmIHJlY29yZCkKLXsKLSAgICByZXR1cm4g
eyByZWNvcmQuaWRlbnRpZmllciwgcmVjb3JkLnVwZGF0ZVJlc3BvbnNlQ291bnRlciwgcmVjb3Jk
LmRhdGEtPnJlcXVlc3RIZWFkZXJzR3VhcmQsIHJlY29yZC5kYXRhLT5yZXF1ZXN0LCByZWNvcmQu
ZGF0YS0+b3B0aW9ucywgcmVjb3JkLmRhdGEtPnJlZmVycmVyLCByZWNvcmQuZGF0YS0+cmVzcG9u
c2VIZWFkZXJzR3VhcmQsIHJlY29yZC5kYXRhLT5yZXNwb25zZSwgY29weVJlc3BvbnNlQm9keShy
ZWNvcmQuZGF0YS0+cmVzcG9uc2VCb2R5KSB9OworICAgIGlmIChyZWNvcmRJbmZvcm1hdGlvbi5o
YXNWYXJ5U3RhcikKKyAgICAgICAgcmVjb3JkSW5mb3JtYXRpb24udmFyeUhlYWRlcnMgPSB7IH07
CiB9CiAKLXN0YXRpYyBpbmxpbmUgUmVjb3JkRGF0YSB0b1JlY29yZERhdGEoUmVjb3JkJiYgcmVj
b3JkKQorUmVjb3JkSW5mb3JtYXRpb24gQ2FjaGU6OnRvUmVjb3JkSW5mb3JtYXRpb24oY29uc3Qg
UmVjb3JkJiByZWNvcmQpCiB7Ci0gICAgYXV0byB1cmwgPSByZWNvcmQucmVxdWVzdC51cmwoKTsK
LSAgICBSZWNvcmREYXRhOjpEYXRhIGRhdGEgPSB7IHJlY29yZC5yZXF1ZXN0SGVhZGVyc0d1YXJk
LCBXVEZNb3ZlKHJlY29yZC5yZXF1ZXN0KSwgV1RGTW92ZShyZWNvcmQub3B0aW9ucyksIFdURk1v
dmUocmVjb3JkLnJlZmVycmVyKSwgV1RGTW92ZShyZWNvcmQucmVzcG9uc2VIZWFkZXJzR3VhcmQp
LCBXVEZNb3ZlKHJlY29yZC5yZXNwb25zZSksIFdURk1vdmUocmVjb3JkLnJlc3BvbnNlQm9keSkg
fTsKLSAgICBSZWNvcmREYXRhIHJlY29yZERhdGEgPSB7IHsgfSwgbW9ub3RvbmljYWxseUluY3Jl
YXNpbmdUaW1lTVMoKSwgcmVjb3JkLmlkZW50aWZpZXIsIDAsIHVybCwgZmFsc2UsIHsgfSwgV1RG
TW92ZShkYXRhKSB9OworICAgIEtleSBrZXkgeyBBU0NJSUxpdGVyYWwoInJlY29yZCIpLCBtX3Vu
aXF1ZU5hbWUsIHsgfSwgY3JlYXRlQ2Fub25pY2FsVVVJRFN0cmluZygpLCBtX2NhY2hlcy5zYWx0
KCkgfTsKKyAgICBSZWNvcmRJbmZvcm1hdGlvbiByZWNvcmRJbmZvcm1hdGlvbiB7IFdURk1vdmUo
a2V5KSwgbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lTVMoKSwgcmVjb3JkLmlkZW50aWZpZXIs
IDAgLCByZWNvcmQucmVxdWVzdC51cmwoKSwgZmFsc2UsIHsgfSB9OwogCi0gICAgdXBkYXRlVmFy
eUluZm9ybWF0aW9uKHJlY29yZERhdGEpOworICAgIHVwZGF0ZVZhcnlJbmZvcm1hdGlvbihyZWNv
cmRJbmZvcm1hdGlvbiwgcmVjb3JkLnJlcXVlc3QsIHJlY29yZC5yZXNwb25zZSk7CiAKLSAgICBy
ZXR1cm4gcmVjb3JkRGF0YTsKKyAgICByZXR1cm4gcmVjb3JkSW5mb3JtYXRpb247CiB9CiAKLUNh
Y2hlOjpDYWNoZShDYWNoZXMmIGNhY2hlcywgdWludDY0X3QgaWRlbnRpZmllciwgU3RhdGUgc3Rh
dGUsIFN0cmluZyYmIG5hbWUpCitDYWNoZTo6Q2FjaGUoQ2FjaGVzJiBjYWNoZXMsIHVpbnQ2NF90
IGlkZW50aWZpZXIsIFN0YXRlIHN0YXRlLCBTdHJpbmcmJiBuYW1lLCBTdHJpbmcmJiB1bmlxdWVO
YW1lKQogICAgIDogbV9jYWNoZXMoY2FjaGVzKQogICAgICwgbV9zdGF0ZShzdGF0ZSkKICAgICAs
IG1faWRlbnRpZmllcihpZGVudGlmaWVyKQogICAgICwgbV9uYW1lKFdURk1vdmUobmFtZSkpCisg
ICAgLCBtX3VuaXF1ZU5hbWUoV1RGTW92ZSh1bmlxdWVOYW1lKSkKIHsKIH0KIApAQCAtMTIyLDcg
KzEyOSwxNSBAQCB2b2lkIENhY2hlOjpjbGVhck1lbW9yeVJlcHJlc2VudGF0aW9uKCkKICAgICBt
X25leHRSZWNvcmRJZGVudGlmaWVyID0gMDsKICAgICBtX3N0YXRlID0gU3RhdGU6OlVuaW5pdGlh
bGl6ZWQ7CiB9Ci0gCisKK3N0cnVjdCBUcmF2ZXJzYWxSZXN1bHQgeworICAgIFJlZjxDYWNoZXM+
IGNhY2hlczsKKyAgICB1aW50NjRfdCBjYWNoZUlkZW50aWZpZXI7CisgICAgQ29tcGxldGlvbkNh
bGxiYWNrIGNhbGxiYWNrOworICAgIEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8UmVjb3JkSW5mb3Jt
YXRpb24+PiByZWNvcmRzOworICAgIFZlY3RvcjxLZXk+IGZhaWxlZFJlY29yZHM7Cit9OworCiB2
b2lkIENhY2hlOjpvcGVuKENvbXBsZXRpb25DYWxsYmFjayYmIGNhbGxiYWNrKQogewogICAgIGlm
IChtX3N0YXRlID09IFN0YXRlOjpPcGVuKSB7CkBAIC0xMzQsMTggKzE0OSw1NCBAQCB2b2lkIENh
Y2hlOjpvcGVuKENvbXBsZXRpb25DYWxsYmFjayYmIGNhbGxiYWNrKQogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIG1fc3RhdGUgPSBTdGF0ZTo6T3BlbmluZzsKLSAgICByZWFkUmVjb3Jkc0xp
c3QoW2NhY2hlcyA9IG1ha2VSZWYobV9jYWNoZXMpLCBpZGVudGlmaWVyID0gbV9pZGVudGlmaWVy
LCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShzdGQ6Om9wdGlvbmFsPEVycm9yPiYmIGVy
cm9yKSBtdXRhYmxlIHsKLSAgICAgICAgYXV0byogY2FjaGUgPSBjYWNoZXMtPmZpbmQoaWRlbnRp
Zmllcik7Ci0gICAgICAgIGlmICghY2FjaGUpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKEVycm9y
OjpJbnRlcm5hbCk7CisgICAgVHJhdmVyc2FsUmVzdWx0IHRyYXZlcnNhbFJlc3VsdCB7IG1ha2VS
ZWYobV9jYWNoZXMpLCBtX2lkZW50aWZpZXIsIFdURk1vdmUoY2FsbGJhY2spLCB7IH0sIHsgfSB9
OworICAgIG1fY2FjaGVzLnJlYWRSZWNvcmRzTGlzdCgqdGhpcywgW3RyYXZlcnNhbFJlc3VsdCA9
IFdURk1vdmUodHJhdmVyc2FsUmVzdWx0KV0oY29uc3QgYXV0byogc3RvcmFnZVJlY29yZCwgY29u
c3QgYXV0byYpIG11dGFibGUgeworICAgICAgICBpZiAoIXN0b3JhZ2VSZWNvcmQpIHsKKyAgICAg
ICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbdHJhdmVyc2FsUmVzdWx0ID0gV1RGTW92
ZSh0cmF2ZXJzYWxSZXN1bHQpXSgpIG11dGFibGUgeworICAgICAgICAgICAgICAgIGZvciAoYXV0
byYga2V5IDogdHJhdmVyc2FsUmVzdWx0LmZhaWxlZFJlY29yZHMpCisgICAgICAgICAgICAgICAg
ICAgIHRyYXZlcnNhbFJlc3VsdC5jYWNoZXMtPnJlbW92ZVJlY29yZChrZXkpOworCisgICAgICAg
ICAgICAgICAgYXV0byogY2FjaGUgPSB0cmF2ZXJzYWxSZXN1bHQuY2FjaGVzLT5maW5kKHRyYXZl
cnNhbFJlc3VsdC5jYWNoZUlkZW50aWZpZXIpOworICAgICAgICAgICAgICAgIGlmICghY2FjaGUp
IHsKKyAgICAgICAgICAgICAgICAgICAgdHJhdmVyc2FsUmVzdWx0LmNhbGxiYWNrKEVycm9yOjpJ
bnRlcm5hbCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgY2FjaGUtPm1fcmVjb3JkcyA9IFdURk1vdmUodHJhdmVyc2FsUmVz
dWx0LnJlY29yZHMpOworICAgICAgICAgICAgICAgIGNhY2hlLT5maW5pc2hPcGVuaW5nKFdURk1v
dmUodHJhdmVyc2FsUmVzdWx0LmNhbGxiYWNrKSwgc3RkOjpudWxsb3B0KTsKKyAgICAgICAgICAg
IH0pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGNhY2hlLT5maW5p
c2hPcGVuaW5nKFdURk1vdmUoY2FsbGJhY2spLCBXVEZNb3ZlKGVycm9yKSk7CisKKyAgICAgICAg
YXV0byBkZWNvZGVkID0gZGVjb2RlUmVjb3JkSGVhZGVyKCpzdG9yYWdlUmVjb3JkKTsKKyAgICAg
ICAgaWYgKCFkZWNvZGVkKSB7CisgICAgICAgICAgICB0cmF2ZXJzYWxSZXN1bHQuZmFpbGVkUmVj
b3Jkcy5hcHBlbmQoc3RvcmFnZVJlY29yZC0+a2V5KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIGF1dG8mIHJlY29yZCA9IGRlY29kZWQtPmZpcnN0OworICAgICAg
ICBhdXRvIGluc2VydGlvblRpbWUgPSBkZWNvZGVkLT5zZWNvbmQ7CisKKyAgICAgICAgUmVjb3Jk
SW5mb3JtYXRpb24gcmVjb3JkSW5mb3JtYXRpb24geyBzdG9yYWdlUmVjb3JkLT5rZXksIGluc2Vy
dGlvblRpbWUsIDAsIDAsIHJlY29yZC5yZXF1ZXN0LnVybCgpLCBmYWxzZSwgeyB9IH07CisgICAg
ICAgIHVwZGF0ZVZhcnlJbmZvcm1hdGlvbihyZWNvcmRJbmZvcm1hdGlvbiwgcmVjb3JkLnJlcXVl
c3QsIHJlY29yZC5yZXNwb25zZSk7CisKKyAgICAgICAgYXV0byYgc2FtZVVSTFJlY29yZHMgPSB0
cmF2ZXJzYWxSZXN1bHQucmVjb3Jkcy5lbnN1cmUoY29tcHV0ZUtleVVSTChyZWNvcmRJbmZvcm1h
dGlvbi51cmwpLCBbXSB7IHJldHVybiBWZWN0b3I8UmVjb3JkSW5mb3JtYXRpb24+IHsgfTsgfSku
aXRlcmF0b3ItPnZhbHVlOworICAgICAgICBzYW1lVVJMUmVjb3Jkcy5hcHBlbmQoV1RGTW92ZShy
ZWNvcmRJbmZvcm1hdGlvbikpOwogICAgIH0pOwogfQogCiB2b2lkIENhY2hlOjpmaW5pc2hPcGVu
aW5nKENvbXBsZXRpb25DYWxsYmFjayYmIGNhbGxiYWNrLCBzdGQ6Om9wdGlvbmFsPEVycm9yPiYm
IGVycm9yKQogeworICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlY29yZEluZm9y
bWF0aW9uPj4gcmVjb3JkczsKKyAgICBmb3IgKGF1dG8mIHZhbHVlIDogbV9yZWNvcmRzLnZhbHVl
cygpKSB7CisgICAgICAgIGZvciAoYXV0byYgcmVjb3JkIDogdmFsdWUpCisgICAgICAgICAgICBy
ZWNvcmRzLmFwcGVuZChyZWNvcmQpOworICAgIH0KKyAgICBzdGQ6OnNvcnQocmVjb3Jkcy5iZWdp
bigpLCByZWNvcmRzLmVuZCgpLCBbJl0oY29uc3QgYXV0byYgYSwgY29uc3QgYXV0byYgYikgewor
ICAgICAgICByZXR1cm4gYS5nZXQoKS5pbnNlcnRpb25UaW1lIDwgYi5nZXQoKS5pbnNlcnRpb25U
aW1lOworICAgIH0pOworICAgIGZvciAoYXV0byYgcmVjb3JkIDogcmVjb3JkcykKKyAgICAgICAg
cmVjb3JkLmdldCgpLmlkZW50aWZpZXIgPSArK21fbmV4dFJlY29yZElkZW50aWZpZXI7CisKICAg
ICBpZiAoZXJyb3IpIHsKICAgICAgICAgbV9zdGF0ZSA9IFN0YXRlOjpVbmluaXRpYWxpemVkOwog
ICAgICAgICBjYWxsYmFjayhlcnJvci52YWx1ZSgpKTsKQEAgLTE2Miw1MiArMjEzLDg5IEBAIHZv
aWQgQ2FjaGU6OmZpbmlzaE9wZW5pbmcoQ29tcGxldGlvbkNhbGxiYWNrJiYgY2FsbGJhY2ssIHN0
ZDo6b3B0aW9uYWw8RXJyb3I+JiYKICAgICAgICAgY2FsbGJhY2soc3RkOjpudWxsb3B0KTsKIH0K
IAotVmVjdG9yPFJlY29yZD4gQ2FjaGU6OnJldHJpZXZlUmVjb3Jkcyhjb25zdCBVUkwmIHVybCkg
Y29uc3QKK2NsYXNzIFJlYWRSZWNvcmRUYXNrQ291bnRlciA6IHB1YmxpYyBUaHJlYWRTYWZlUmVm
Q291bnRlZDxSZWFkUmVjb3JkVGFza0NvdW50ZXI+IHsKK3B1YmxpYzoKKyAgICB1c2luZyBSZWFk
UmVjb3Jkc0NhbGxiYWNrID0gV1RGOjpGdW5jdGlvbjx2b2lkKFZlY3RvcjxSZWNvcmQ+JiYsIFZl
Y3Rvcjx1aW50NjRfdD4mJik+OworICAgIHN0YXRpYyBSZWZQdHI8UmVhZFJlY29yZFRhc2tDb3Vu
dGVyPiBjcmVhdGUoUmVhZFJlY29yZHNDYWxsYmFjayYmIGNhbGxiYWNrKSB7IHJldHVybiBhZG9w
dFJlZihuZXcgUmVhZFJlY29yZFRhc2tDb3VudGVyKFdURk1vdmUoY2FsbGJhY2spKSk7IH0KKwor
ICAgIH5SZWFkUmVjb3JkVGFza0NvdW50ZXIoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2NhbGxi
YWNrKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBzdGQ6OnNvcnQobV9yZWNvcmRzLmJl
Z2luKCksIG1fcmVjb3Jkcy5lbmQoKSwgWyZdIChjb25zdCBhdXRvJiBhLCBjb25zdCBhdXRvJiBi
KSB7CisgICAgICAgICAgICByZXR1cm4gYS5pZGVudGlmaWVyIDwgYi5pZGVudGlmaWVyOworICAg
ICAgICB9KTsKKyAgICAgICAgbV9jYWxsYmFjayhXVEZNb3ZlKG1fcmVjb3JkcyksIFdURk1vdmUo
bV9mYWlsZWRSZWNvcmRzKSk7CisgICAgfQorCisgICAgdm9pZCBhcHBlbmRSZWNvcmQoRXhwZWN0
ZWQ8UmVjb3JkLCBFcnJvcj4mJiByZXN1bHQsIHVpbnQ2NF90IHJlY29yZElkZW50aWZpZXIsIHVp
bnQ2NF90IHVwZGF0ZUNvdW50ZXIpCisgICAgeworICAgICAgICBpZiAoIXJlc3VsdC5oYXNWYWx1
ZSgpKSB7CisgICAgICAgICAgICBtX2ZhaWxlZFJlY29yZHMuYXBwZW5kKHJlY29yZElkZW50aWZp
ZXIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHJlc3VsdC52YWx1
ZSgpLmlkZW50aWZpZXIgPSByZWNvcmRJZGVudGlmaWVyOworICAgICAgICByZXN1bHQudmFsdWUo
KS51cGRhdGVSZXNwb25zZUNvdW50ZXIgPSB1cGRhdGVDb3VudGVyOworICAgICAgICBtX3JlY29y
ZHMuYXBwZW5kKFdURk1vdmUocmVzdWx0LnZhbHVlKCkpKTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgZXhwbGljaXQgUmVhZFJlY29yZFRhc2tDb3VudGVyKFJlYWRSZWNvcmRzQ2FsbGJhY2smJiBj
YWxsYmFjaykgOiBtX2NhbGxiYWNrKFdURk1vdmUoY2FsbGJhY2spKSB7IH0KKworICAgIFJlYWRS
ZWNvcmRzQ2FsbGJhY2sgbV9jYWxsYmFjazsKKyAgICBWZWN0b3I8UmVjb3JkPiBtX3JlY29yZHM7
CisgICAgVmVjdG9yPHVpbnQ2NF90PiBtX2ZhaWxlZFJlY29yZHM7Cit9OworCit2b2lkIENhY2hl
OjpyZXRyaWV2ZVJlY29yZChjb25zdCBSZWNvcmRJbmZvcm1hdGlvbiYgcmVjb3JkLCBSZWZQdHI8
UmVhZFJlY29yZFRhc2tDb3VudGVyPiYgdGFza0NvdW50ZXIpCit7CisgICAgcmVhZFJlY29yZEZy
b21EaXNrKHJlY29yZCwgW2NhY2hlcyA9IG1ha2VSZWYobV9jYWNoZXMpLCBpZGVudGlmaWVyID0g
bV9pZGVudGlmaWVyLCByZWNvcmRJZGVudGlmaWVyID0gcmVjb3JkLmlkZW50aWZpZXIsIHVwZGF0
ZUNvdW50ZXIgPSByZWNvcmQudXBkYXRlUmVzcG9uc2VDb3VudGVyLCB0YXNrQ291bnRlcl0oRXhw
ZWN0ZWQ8UmVjb3JkLCBFcnJvcj4mJiByZXN1bHQpIG11dGFibGUgeworICAgICAgICBhdXRvKiBj
YWNoZSA9IGNhY2hlcy0+ZmluZChpZGVudGlmaWVyKTsKKyAgICAgICAgaWYgKCFjYWNoZSkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdGFza0NvdW50ZXItPmFwcGVuZFJlY29yZChXVEZN
b3ZlKHJlc3VsdCksIHJlY29yZElkZW50aWZpZXIsIHVwZGF0ZUNvdW50ZXIpOworICAgIH0pOwor
fQorCit2b2lkIENhY2hlOjpyZXRyaWV2ZVJlY29yZHMoY29uc3QgVVJMJiB1cmwsIFJlY29yZHND
YWxsYmFjayYmIGNhbGxiYWNrKQogeworICAgIEFTU0VSVChtX3N0YXRlID09IFN0YXRlOjpPcGVu
KTsKKworICAgIGF1dG8gdGFza0NvdW50ZXIgPSBSZWFkUmVjb3JkVGFza0NvdW50ZXI6OmNyZWF0
ZShbY2FjaGVzID0gbWFrZVJlZihtX2NhY2hlcyksIGlkZW50aWZpZXIgPSBtX2lkZW50aWZpZXIs
IGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKFZlY3RvcjxSZWNvcmQ+JiYgcmVjb3Jkcywg
VmVjdG9yPHVpbnQ2NF90PiYmIGZhaWxlZFJlY29yZElkZW50aWZpZXJzKSBtdXRhYmxlIHsKKyAg
ICAgICAgYXV0byogY2FjaGUgPSBjYWNoZXMtPmZpbmQoaWRlbnRpZmllcik7CisgICAgICAgIGlm
IChjYWNoZSkKKyAgICAgICAgICAgIGNhY2hlLT5yZW1vdmVGcm9tUmVjb3JkTGlzdChmYWlsZWRS
ZWNvcmRJZGVudGlmaWVycyk7CisgICAgICAgIGNhbGxiYWNrKFdURk1vdmUocmVjb3JkcykpOwor
ICAgIH0pOworCiAgICAgaWYgKHVybC5pc051bGwoKSkgewotICAgICAgICBWZWN0b3I8UmVjb3Jk
PiByZXN1bHQ7CiAgICAgICAgIGZvciAoYXV0byYgcmVjb3JkcyA6IG1fcmVjb3Jkcy52YWx1ZXMo
KSkgewogICAgICAgICAgICAgZm9yIChhdXRvJiByZWNvcmQgOiByZWNvcmRzKQotICAgICAgICAg
ICAgICAgIHJlc3VsdC5hcHBlbmQodG9SZWNvcmQocmVjb3JkKSk7CisgICAgICAgICAgICAgICAg
cmV0cmlldmVSZWNvcmQocmVjb3JkLCB0YXNrQ291bnRlcik7CiAgICAgICAgIH0KLSAgICAgICAg
c3RkOjpzb3J0KHJlc3VsdC5iZWdpbigpLCByZXN1bHQuZW5kKCksIFtdKGNvbnN0IGF1dG8mIGEs
IGNvbnN0IGF1dG8mIGIpIHsKLSAgICAgICAgICAgIHJldHVybiBhLmlkZW50aWZpZXIgPCBiLmlk
ZW50aWZpZXI7Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgY29uc3QgYXV0byogcmVjb3JkcyA9IHJlY29yZHNGcm9tVVJM
KHVybCk7CisgICAgYXV0byogcmVjb3JkcyA9IHJlY29yZHNGcm9tVVJMKHVybCk7CiAgICAgaWYg
KCFyZWNvcmRzKQotICAgICAgICByZXR1cm4geyB9OworICAgICAgICByZXR1cm47CiAKLSAgICBW
ZWN0b3I8UmVjb3JkPiByZXN1bHQ7Ci0gICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
cmVjb3Jkcy0+c2l6ZSgpKTsKICAgICBmb3IgKGF1dG8mIHJlY29yZCA6ICpyZWNvcmRzKQotICAg
ICAgICByZXN1bHQuYXBwZW5kKHRvUmVjb3JkKHJlY29yZCkpOwotICAgIHJldHVybiByZXN1bHQ7
CisgICAgICAgIHJldHJpZXZlUmVjb3JkKHJlY29yZCwgdGFza0NvdW50ZXIpOwogfQogCi1zdGF0
aWMgaW5saW5lIFN0cmluZyBjb21wdXRlS2V5VVJMKGNvbnN0IFVSTCYgdXJsKQotewotICAgIFVS
TCBrZXlVUkwgPSB1cmw7Ci0gICAgaWYgKGtleVVSTC5oYXNRdWVyeSgpKQotICAgICAgICBrZXlV
Ukwuc2V0UXVlcnkoeyB9KTsKLSAgICBrZXlVUkwucmVtb3ZlRnJhZ21lbnRJZGVudGlmaWVyKCk7
Ci0gICAgcmV0dXJuIGtleVVSTDsKLX0KLQotUmVjb3JkRGF0YSYgQ2FjaGU6OmFkZFJlY29yZChW
ZWN0b3I8UmVjb3JkRGF0YT4qIHJlY29yZHMsIFJlY29yZCYmIHJlY29yZCkKK1JlY29yZEluZm9y
bWF0aW9uJiBDYWNoZTo6YWRkUmVjb3JkKFZlY3RvcjxSZWNvcmRJbmZvcm1hdGlvbj4qIHJlY29y
ZHMsIGNvbnN0IFJlY29yZCYgcmVjb3JkKQogewogICAgIGlmICghcmVjb3JkcykgewogICAgICAg
ICBhdXRvIGtleSA9IGNvbXB1dGVLZXlVUkwocmVjb3JkLnJlcXVlc3QudXJsKCkpOwogICAgICAg
ICBBU1NFUlQoIW1fcmVjb3Jkcy5jb250YWlucyhrZXkpKTsKLSAgICAgICAgcmVjb3JkcyA9ICZt
X3JlY29yZHMuc2V0KGtleSwgVmVjdG9yPFJlY29yZERhdGE+IHsgfSkuaXRlcmF0b3ItPnZhbHVl
OworICAgICAgICByZWNvcmRzID0gJm1fcmVjb3Jkcy5zZXQoa2V5LCBWZWN0b3I8UmVjb3JkSW5m
b3JtYXRpb24+IHsgfSkuaXRlcmF0b3ItPnZhbHVlOwogICAgIH0KLSAgICByZWNvcmRzLT5hcHBl
bmQodG9SZWNvcmREYXRhKFdURk1vdmUocmVjb3JkKSkpOworICAgIHJlY29yZHMtPmFwcGVuZCh0
b1JlY29yZEluZm9ybWF0aW9uKHJlY29yZCkpOwogICAgIHJldHVybiByZWNvcmRzLT5sYXN0KCk7
CiB9CiAKLVZlY3RvcjxSZWNvcmREYXRhPiogQ2FjaGU6OnJlY29yZHNGcm9tVVJMKGNvbnN0IFVS
TCYgdXJsKQorVmVjdG9yPFJlY29yZEluZm9ybWF0aW9uPiogQ2FjaGU6OnJlY29yZHNGcm9tVVJM
KGNvbnN0IFVSTCYgdXJsKQogewogICAgIGF1dG8gaXRlcmF0b3IgPSBtX3JlY29yZHMuZmluZChj
b21wdXRlS2V5VVJMKHVybCkpOwogICAgIGlmIChpdGVyYXRvciA9PSBtX3JlY29yZHMuZW5kKCkp
CkBAIC0yMTUsNyArMzAzLDcgQEAgVmVjdG9yPFJlY29yZERhdGE+KiBDYWNoZTo6cmVjb3Jkc0Zy
b21VUkwoY29uc3QgVVJMJiB1cmwpCiAgICAgcmV0dXJuICZpdGVyYXRvci0+dmFsdWU7CiB9CiAK
LWNvbnN0IFZlY3RvcjxSZWNvcmREYXRhPiogQ2FjaGU6OnJlY29yZHNGcm9tVVJMKGNvbnN0IFVS
TCYgdXJsKSBjb25zdAorY29uc3QgVmVjdG9yPFJlY29yZEluZm9ybWF0aW9uPiogQ2FjaGU6OnJl
Y29yZHNGcm9tVVJMKGNvbnN0IFVSTCYgdXJsKSBjb25zdAogewogICAgIGF1dG8gaXRlcmF0b3Ig
PSBtX3JlY29yZHMuZmluZChjb21wdXRlS2V5VVJMKHVybCkpOwogICAgIGlmIChpdGVyYXRvciA9
PSBtX3JlY29yZHMuZW5kKCkpCkBAIC0yMjMsOSArMzExLDMwIEBAIGNvbnN0IFZlY3RvcjxSZWNv
cmREYXRhPiogQ2FjaGU6OnJlY29yZHNGcm9tVVJMKGNvbnN0IFVSTCYgdXJsKSBjb25zdAogICAg
IHJldHVybiAmaXRlcmF0b3ItPnZhbHVlOwogfQogCitjbGFzcyBBc3luY2hyb25vdXNQdXRUYXNr
Q291bnRlciA6IHB1YmxpYyBSZWZDb3VudGVkPEFzeW5jaHJvbm91c1B1dFRhc2tDb3VudGVyPiB7
CitwdWJsaWM6CisgICAgc3RhdGljIFJlZlB0cjxBc3luY2hyb25vdXNQdXRUYXNrQ291bnRlcj4g
Y3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IEFzeW5jaHJvbm91c1B1dFRhc2tDb3VudGVy
KTsgfQorICAgIH5Bc3luY2hyb25vdXNQdXRUYXNrQ291bnRlcigpCisgICAgeworICAgICAgICBp
ZiAoIW1fY2FsbGJhY2spCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fY2FsbGJhY2so
V1RGTW92ZShtX2Vycm9yKSk7CisgICAgfQorCisgICAgdm9pZCBvbkNvbXBsZXRpb24oQ29tcGxl
dGlvbkNhbGxiYWNrJiYgY2FsbGJhY2spIHsgbV9jYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2sp
OyB9CisgICAgdm9pZCBzZXRFcnJvcihFcnJvciBlcnJvcikgeyBtX2Vycm9yID0gZXJyb3I7IH0K
KworcHJpdmF0ZToKKyAgICBzdGQ6Om9wdGlvbmFsPEVycm9yPiBtX2Vycm9yOworICAgIENvbXBs
ZXRpb25DYWxsYmFjayBtX2NhbGxiYWNrOworfTsKKwogdm9pZCBDYWNoZTo6cHV0KFZlY3RvcjxS
ZWNvcmQ+JiYgcmVjb3JkcywgUmVjb3JkSWRlbnRpZmllcnNDYWxsYmFjayYmIGNhbGxiYWNrKQog
ewotICAgIGJvb2wgc2hvdWxkV3JpdGVSZWNvcmRMaXN0IHsgZmFsc2UgfTsKKyAgICBBU1NFUlQo
bV9zdGF0ZSA9PSBTdGF0ZTo6T3Blbik7CisKKyAgICBhdXRvIHRhc2tDb3VudGVyID0gQXN5bmNo
cm9ub3VzUHV0VGFza0NvdW50ZXI6OmNyZWF0ZSgpOworCiAgICAgV2ViQ29yZTo6Q2FjaGVRdWVy
eU9wdGlvbnMgb3B0aW9uczsKICAgICBWZWN0b3I8dWludDY0X3Q+IHJlY29yZElkZW50aWZpZXJz
OwogICAgIHJlY29yZElkZW50aWZpZXJzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocmVjb3Jkcy5z
aXplKCkpOwpAQCAtMjM3LDM0ICszNDYsMjEgQEAgdm9pZCBDYWNoZTo6cHV0KFZlY3RvcjxSZWNv
cmQ+JiYgcmVjb3JkcywgUmVjb3JkSWRlbnRpZmllcnNDYWxsYmFjayYmIGNhbGxiYWNrKQogICAg
ICAgICAgICAgcmVjb3JkLmlkZW50aWZpZXIgPSArK21fbmV4dFJlY29yZElkZW50aWZpZXI7CiAg
ICAgICAgICAgICByZWNvcmRJZGVudGlmaWVycy51bmNoZWNrZWRBcHBlbmQocmVjb3JkLmlkZW50
aWZpZXIpOwogCi0gICAgICAgICAgICBzaG91bGRXcml0ZVJlY29yZExpc3QgPSB0cnVlOwotICAg
ICAgICAgICAgYXV0byYgcmVjb3JkVG9Xcml0ZSA9IGFkZFJlY29yZChzYW1lVVJMUmVjb3Jkcywg
V1RGTW92ZShyZWNvcmQpKTsKLSAgICAgICAgICAgIHdyaXRlUmVjb3JkVG9EaXNrKHJlY29yZFRv
V3JpdGUpOworICAgICAgICAgICAgYXV0byYgcmVjb3JkVG9Xcml0ZSA9IGFkZFJlY29yZChzYW1l
VVJMUmVjb3JkcywgcmVjb3JkKTsKKyAgICAgICAgICAgIHdyaXRlUmVjb3JkVG9EaXNrKHJlY29y
ZFRvV3JpdGUsIFdURk1vdmUocmVjb3JkKSwgdGFza0NvdW50ZXIpOwogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgYXV0byBpZGVudGlmaWVyID0gbWF0Y2hpbmdSZWNvcmRzWzBdOwogICAg
ICAgICAgICAgYXV0byBwb3NpdGlvbiA9IHNhbWVVUkxSZWNvcmRzLT5maW5kTWF0Y2hpbmcoWyZd
KGNvbnN0IGF1dG8mIGl0ZW0pIHsgcmV0dXJuIGl0ZW0uaWRlbnRpZmllciA9PSBpZGVudGlmaWVy
OyB9KTsKICAgICAgICAgICAgIEFTU0VSVChwb3NpdGlvbiAhPSBub3RGb3VuZCk7CiAgICAgICAg
ICAgICBpZiAocG9zaXRpb24gIT0gbm90Rm91bmQpIHsKLSAgICAgICAgICAgICAgICBhdXRvJiBl
eGlzdGluZ1JlY29yZCA9ICgqc2FtZVVSTFJlY29yZHMpW3Bvc2l0aW9uXTsKKyAgICAgICAgICAg
ICAgICBhdXRvJiBleGlzdGluZ1JlY29yZCA9IHNhbWVVUkxSZWNvcmRzLT5hdChwb3NpdGlvbik7
CiAgICAgICAgICAgICAgICAgcmVjb3JkSWRlbnRpZmllcnMudW5jaGVja2VkQXBwZW5kKGlkZW50
aWZpZXIpOwotICAgICAgICAgICAgICAgICsrZXhpc3RpbmdSZWNvcmQudXBkYXRlUmVzcG9uc2VD
b3VudGVyOwotCi0gICAgICAgICAgICAgICAgLy8gRklYTUU6IEhhbmRsZSB0aGUgY2FzZSB3aGVy
ZSBkYXRhIGlzIG51bGwuCi0gICAgICAgICAgICAgICAgQVNTRVJUKGV4aXN0aW5nUmVjb3JkLmRh
dGEpOwotICAgICAgICAgICAgICAgIGV4aXN0aW5nUmVjb3JkLmRhdGEtPnJlc3BvbnNlSGVhZGVy
c0d1YXJkID0gcmVjb3JkLnJlc3BvbnNlSGVhZGVyc0d1YXJkOwotICAgICAgICAgICAgICAgIGV4
aXN0aW5nUmVjb3JkLmRhdGEtPnJlc3BvbnNlID0gV1RGTW92ZShyZWNvcmQucmVzcG9uc2UpOwot
ICAgICAgICAgICAgICAgIGV4aXN0aW5nUmVjb3JkLmRhdGEtPnJlc3BvbnNlQm9keSA9IFdURk1v
dmUocmVjb3JkLnJlc3BvbnNlQm9keSk7Ci0gICAgICAgICAgICAgICAgdXBkYXRlVmFyeUluZm9y
bWF0aW9uKGV4aXN0aW5nUmVjb3JkKTsKLSAgICAgICAgICAgICAgICB3cml0ZVJlY29yZFRvRGlz
ayhleGlzdGluZ1JlY29yZCk7CisgICAgICAgICAgICAgICAgdXBkYXRlUmVjb3JkVG9EaXNrKGV4
aXN0aW5nUmVjb3JkLCBXVEZNb3ZlKHJlY29yZCksIHRhc2tDb3VudGVyKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgIH0KIAotICAgIGlmICghc2hvdWxkV3JpdGVSZWNvcmRMaXN0KSB7
Ci0gICAgICAgIGNhbGxiYWNrKFdURk1vdmUocmVjb3JkSWRlbnRpZmllcnMpKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICB3cml0ZVJlY29yZHNMaXN0KFtjYWxsYmFjayA9IFdURk1vdmUo
Y2FsbGJhY2spLCByZWNvcmRJZGVudGlmaWVycyA9IFdURk1vdmUocmVjb3JkSWRlbnRpZmllcnMp
XShzdGQ6Om9wdGlvbmFsPEVycm9yPiYmIGVycm9yKSBtdXRhYmxlIHsKKyAgICB0YXNrQ291bnRl
ci0+b25Db21wbGV0aW9uKFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCByZWNvcmRJZGVu
dGlmaWVycyA9IFdURk1vdmUocmVjb3JkSWRlbnRpZmllcnMpXShzdGQ6Om9wdGlvbmFsPEVycm9y
PiYmIGVycm9yKSBtdXRhYmxlIHsKICAgICAgICAgaWYgKGVycm9yKSB7CiAgICAgICAgICAgICBj
YWxsYmFjayhtYWtlVW5leHBlY3RlZChlcnJvci52YWx1ZSgpKSk7CiAgICAgICAgICAgICByZXR1
cm47CkBAIC0yNzUsNiArMzcxLDggQEAgdm9pZCBDYWNoZTo6cHV0KFZlY3RvcjxSZWNvcmQ+JiYg
cmVjb3JkcywgUmVjb3JkSWRlbnRpZmllcnNDYWxsYmFjayYmIGNhbGxiYWNrKQogCiB2b2lkIENh
Y2hlOjpyZW1vdmUoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYgcmVxdWVzdCwgV2ViQ29yZTo6
Q2FjaGVRdWVyeU9wdGlvbnMmJiBvcHRpb25zLCBSZWNvcmRJZGVudGlmaWVyc0NhbGxiYWNrJiYg
Y2FsbGJhY2spCiB7CisgICAgQVNTRVJUKG1fc3RhdGUgPT0gU3RhdGU6Ok9wZW4pOworCiAgICAg
YXV0byogcmVjb3JkcyA9IHJlY29yZHNGcm9tVVJMKHJlcXVlc3QudXJsKCkpOwogICAgIGF1dG8g
cmVjb3JkSWRlbnRpZmllcnMgPSBxdWVyeUNhY2hlKHJlY29yZHMsIHJlcXVlc3QsIG9wdGlvbnMp
OwogICAgIGlmIChyZWNvcmRJZGVudGlmaWVycy5pc0VtcHR5KCkpIHsKQEAgLTI4OSwzNSArMzg3
LDE1NyBAQCB2b2lkIENhY2hlOjpyZW1vdmUoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYgcmVx
dWVzdCwgV2ViQ29yZTo6Q2FjaGVRdWVyeU9wdGlvbgogICAgICAgICByZXR1cm4gc2hvdWxkUmVt
b3ZlOwogICAgIH0pOwogCi0gICAgd3JpdGVSZWNvcmRzTGlzdChbY2FsbGJhY2sgPSBXVEZNb3Zl
KGNhbGxiYWNrKSwgcmVjb3JkSWRlbnRpZmllcnMgPSBXVEZNb3ZlKHJlY29yZElkZW50aWZpZXJz
KV0oc3RkOjpvcHRpb25hbDxFcnJvcj4mJiBlcnJvcikgbXV0YWJsZSB7Ci0gICAgICAgIGlmIChl
cnJvcikgewotICAgICAgICAgICAgY2FsbGJhY2sobWFrZVVuZXhwZWN0ZWQoZXJyb3IudmFsdWUo
KSkpOworICAgIGNhbGxiYWNrKFdURk1vdmUocmVjb3JkSWRlbnRpZmllcnMpKTsKK30KKwordm9p
ZCBDYWNoZTo6cmVtb3ZlRnJvbVJlY29yZExpc3QoY29uc3QgVmVjdG9yPHVpbnQ2NF90PiYgcmVj
b3JkSWRlbnRpZmllcnMpCit7CisgICAgaWYgKHJlY29yZElkZW50aWZpZXJzLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChhdXRvJiByZWNvcmRzIDogbV9yZWNvcmRzLnZh
bHVlcygpKSB7CisgICAgICAgIGF1dG8qIGNhY2hlID0gdGhpczsKKyAgICAgICAgcmVjb3Jkcy5y
ZW1vdmVBbGxNYXRjaGluZyhbY2FjaGUsICZyZWNvcmRJZGVudGlmaWVyc10oY29uc3QgYXV0byYg
aXRlbSkgeworICAgICAgICAgICAgcmV0dXJuIG5vdEZvdW5kICE9IHJlY29yZElkZW50aWZpZXJz
LmZpbmRNYXRjaGluZyhbY2FjaGUsICZpdGVtXShjb25zdCBhdXRvJiBpZGVudGlmaWVyKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGl0ZW0uaWRlbnRpZmllciAhPSBpZGVudGlmaWVyKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgY2FjaGUtPnJlbW92
ZVJlY29yZEZyb21EaXNrKGl0ZW0pOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0KK30KKwordm9pZCBDYWNoZTo6d3JpdGVS
ZWNvcmRUb0Rpc2soY29uc3QgUmVjb3JkSW5mb3JtYXRpb24mIHJlY29yZEluZm9ybWF0aW9uLCBS
ZWNvcmQmJiByZWNvcmQsIGNvbnN0IFJlZlB0cjxBc3luY2hyb25vdXNQdXRUYXNrQ291bnRlcj4m
IGNvdW50ZXIpCit7CisgICAgbV9jYWNoZXMud3JpdGVSZWNvcmQoKnRoaXMsIHJlY29yZEluZm9y
bWF0aW9uLCBXVEZNb3ZlKHJlY29yZCksIFtjb3VudGVyXShzdGQ6Om9wdGlvbmFsPEVycm9yPiYm
IGVycm9yKSB7CisgICAgICAgIEFTU0VSVCghZXJyb3IpOworICAgIH0pOworfQorCit2b2lkIENh
Y2hlOjp1cGRhdGVSZWNvcmRUb0Rpc2soUmVjb3JkSW5mb3JtYXRpb24mIGV4aXN0aW5nUmVjb3Jk
LCBSZWNvcmQmJiByZWNvcmQsIGNvbnN0IFJlZlB0cjxBc3luY2hyb25vdXNQdXRUYXNrQ291bnRl
cj4mIHRhc2tDb3VudGVyKQoreworICAgICsrZXhpc3RpbmdSZWNvcmQudXBkYXRlUmVzcG9uc2VD
b3VudGVyOworICAgIHJlYWRSZWNvcmRGcm9tRGlzayhleGlzdGluZ1JlY29yZCwgW2NhY2hlcyA9
IG1ha2VSZWYobV9jYWNoZXMpLCBpZGVudGlmaWVyID0gbV9pZGVudGlmaWVyLCByZWNvcmRJZGVu
dGlmaWVyID0gZXhpc3RpbmdSZWNvcmQuaWRlbnRpZmllciwgcmVjb3JkID0gV1RGTW92ZShyZWNv
cmQpLCB0YXNrQ291bnRlcl0oRXhwZWN0ZWQ8UmVjb3JkLCBFcnJvcj4mJiByZXN1bHQpIG11dGFi
bGUgeworICAgICAgICBpZiAoIXJlc3VsdC5oYXNWYWx1ZSgpKQogICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgICAgIGNhbGxiYWNrKFdURk1vdmUocmVjb3JkSWRlbnRpZmllcnMp
KTsKKworICAgICAgICBhdXRvKiBjYWNoZSA9IGNhY2hlcy0+ZmluZChpZGVudGlmaWVyKTsKKyAg
ICAgICAgaWYgKCFjYWNoZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBhdXRvKiBz
YW1lVVJMUmVjb3JkcyA9IGNhY2hlLT5yZWNvcmRzRnJvbVVSTChyZXN1bHQudmFsdWUoKS5yZXF1
ZXN0LnVybCgpKTsKKyAgICAgICAgaWYgKCFzYW1lVVJMUmVjb3JkcykKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICBhdXRvIHBvc2l0aW9uID0gc2FtZVVSTFJlY29yZHMtPmZpbmRNYXRj
aGluZyhbJl0gKGNvbnN0IGF1dG8mIGl0ZW0pIHsgcmV0dXJuIGl0ZW0uaWRlbnRpZmllciA9PSBy
ZWNvcmRJZGVudGlmaWVyOyB9KTsKKyAgICAgICAgaWYgKHBvc2l0aW9uID09IG5vdEZvdW5kKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBhdXRvJiByZWNvcmRJbmZvID0gc2FtZVVSTFJl
Y29yZHMtPmF0KHBvc2l0aW9uKTsKKworICAgICAgICBhdXRvJiByZWNvcmRGcm9tRGlzayA9IHJl
c3VsdC52YWx1ZSgpOworICAgICAgICByZWNvcmQucmVxdWVzdEhlYWRlcnNHdWFyZCA9IHJlY29y
ZEZyb21EaXNrLnJlcXVlc3RIZWFkZXJzR3VhcmQ7CisgICAgICAgIHJlY29yZC5yZXF1ZXN0ID0g
V1RGTW92ZShyZWNvcmRGcm9tRGlzay5yZXF1ZXN0KTsKKyAgICAgICAgcmVjb3JkLm9wdGlvbnMg
PSBXVEZNb3ZlKHJlY29yZEZyb21EaXNrLm9wdGlvbnMpOworICAgICAgICByZWNvcmQucmVmZXJy
ZXIgPSBXVEZNb3ZlKHJlY29yZEZyb21EaXNrLnJlZmVycmVyKTsKKworICAgICAgICB1cGRhdGVW
YXJ5SW5mb3JtYXRpb24ocmVjb3JkSW5mbywgcmVjb3JkLnJlcXVlc3QsIHJlY29yZC5yZXNwb25z
ZSk7CisKKyAgICAgICAgY2FjaGUtPndyaXRlUmVjb3JkVG9EaXNrKHJlY29yZEluZm8sIFdURk1v
dmUocmVjb3JkKSwgdGFza0NvdW50ZXIpOwogICAgIH0pOwogfQogCi12b2lkIENhY2hlOjpyZWFk
UmVjb3Jkc0xpc3QoQ29tcGxldGlvbkNhbGxiYWNrJiYgY2FsbGJhY2spCit2b2lkIENhY2hlOjpy
ZWFkUmVjb3JkRnJvbURpc2soY29uc3QgUmVjb3JkSW5mb3JtYXRpb24mIHJlY29yZCwgV1RGOjpG
dW5jdGlvbjx2b2lkKEV4cGVjdGVkPFJlY29yZCwgRXJyb3I+JiYpPiYmIGNhbGxiYWNrKQogewot
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KLSAgICBjYWxsYmFjayhzdGQ6Om51bGxvcHQp
OworICAgIG1fY2FjaGVzLnJlYWRSZWNvcmQocmVjb3JkLmtleSwgV1RGTW92ZShjYWxsYmFjaykp
OwogfQogCi12b2lkIENhY2hlOjp3cml0ZVJlY29yZHNMaXN0KENvbXBsZXRpb25DYWxsYmFjayYm
IGNhbGxiYWNrKQordm9pZCBDYWNoZTo6cmVtb3ZlUmVjb3JkRnJvbURpc2soY29uc3QgUmVjb3Jk
SW5mb3JtYXRpb24mIHJlY29yZCkKIHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCi0g
ICAgY2FsbGJhY2soc3RkOjpudWxsb3B0KTsKKyAgICBtX2NhY2hlcy5yZW1vdmVSZWNvcmQocmVj
b3JkLmtleSk7CiB9CiAKLXZvaWQgQ2FjaGU6OndyaXRlUmVjb3JkVG9EaXNrKFJlY29yZERhdGEm
KQorU3RvcmFnZTo6UmVjb3JkIENhY2hlOjplbmNvZGUoY29uc3QgUmVjb3JkSW5mb3JtYXRpb24m
IHJlY29yZEluZm9ybWF0aW9uLCBjb25zdCBSZWNvcmQmIHJlY29yZCkKIHsKLSAgICAvLyBGSVhN
RTogSW1wbGVtZW50IHRoaXMuCisgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2RlciBlbmNvZGVy
OworICAgIGVuY29kZXIgPDwgcmVjb3JkSW5mb3JtYXRpb24uaW5zZXJ0aW9uVGltZTsKKyAgICBl
bmNvZGVyIDw8IHJlY29yZC5yZXF1ZXN0SGVhZGVyc0d1YXJkOworICAgIHJlY29yZC5yZXF1ZXN0
LmVuY29kZVdpdGhvdXRQbGF0Zm9ybURhdGEoZW5jb2Rlcik7CisgICAgZW5jb2RlciA8PCByZWNv
cmQub3B0aW9uczsKKyAgICBlbmNvZGVyIDw8IHJlY29yZC5yZWZlcnJlcjsKKworICAgIGVuY29k
ZXIgPDwgcmVjb3JkLnJlc3BvbnNlSGVhZGVyc0d1YXJkOworICAgIGVuY29kZXIgPDwgcmVjb3Jk
LnJlc3BvbnNlOworCisgICAgZW5jb2Rlci5lbmNvZGVDaGVja3N1bSgpOworCisgICAgRGF0YSBo
ZWFkZXIoZW5jb2Rlci5idWZmZXIoKSwgZW5jb2Rlci5idWZmZXJTaXplKCkpOworICAgIERhdGEg
Ym9keTsKKyAgICBXVEY6OnN3aXRjaE9uKHJlY29yZC5yZXNwb25zZUJvZHksIFtdKGNvbnN0IFJl
ZjxXZWJDb3JlOjpGb3JtRGF0YT4mIGZvcm1EYXRhKSB7CisgICAgICAgIC8vIEZJWE1FOiBTdG9y
ZSBmb3JtIGRhdGEgYm9keS4KKyAgICB9LCBbJl0oY29uc3QgUmVmPFdlYkNvcmU6OlNoYXJlZEJ1
ZmZlcj4mIGJ1ZmZlcikgeworICAgICAgICBib2R5ID0geyByZWludGVycHJldF9jYXN0PGNvbnN0
IHVpbnQ4X3QqPihidWZmZXItPmRhdGEoKSksIGJ1ZmZlci0+c2l6ZSgpIH07CisgICAgfSwgW10o
Y29uc3Qgc3RkOjpudWxscHRyX3QmKSB7CisgICAgfSk7CisKKyAgICByZXR1cm4geyByZWNvcmRJ
bmZvcm1hdGlvbi5rZXksIHsgfSwgaGVhZGVyLCBib2R5LCB7IH0gfTsKIH0KIAotdm9pZCBDYWNo
ZTo6cmVtb3ZlUmVjb3JkRnJvbURpc2soUmVjb3JkRGF0YSYpCitzdGF0aWMgaW5saW5lIHN0ZDo6
b3B0aW9uYWw8c3RkOjpwYWlyPFJlY29yZCwgZG91YmxlPj4gZGVjb2RlUmVjb3JkSGVhZGVyKGNv
bnN0IFN0b3JhZ2U6OlJlY29yZCYgc3RvcmFnZSkKIHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50
IHRoaXMuCisgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKHN0b3JhZ2UuaGVh
ZGVyLmRhdGEoKSwgc3RvcmFnZS5oZWFkZXIuc2l6ZSgpKTsKKworICAgIFJlY29yZCByZWNvcmQ7
CisKKyAgICBkb3VibGUgaW5zZXJ0aW9uVGltZTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGlu
c2VydGlvblRpbWUpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShyZWNvcmQucmVxdWVzdEhlYWRlcnNHdWFyZCkpCisgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CisKKyAgICBpZiAoIXJlY29yZC5yZXF1ZXN0LmRlY29kZVdpdGhvdXRQ
bGF0Zm9ybURhdGEoZGVjb2RlcikpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlY29yZC5vcHRpb25zKSkKKyAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVjb3JkLnJlZmVycmVyKSkK
KyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
cmVjb3JkLnJlc3BvbnNlSGVhZGVyc0d1YXJkKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVjb3JkLnJlc3BvbnNlKSkKKyAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGlmICghZGVjb2Rlci52ZXJpZnlDaGVja3N1bSgp
KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIHN0ZDo6bWFrZV9w
YWlyKFdURk1vdmUocmVjb3JkKSwgaW5zZXJ0aW9uVGltZSk7Cit9CisKK3N0ZDo6b3B0aW9uYWw8
UmVjb3JkPiBDYWNoZTo6ZGVjb2RlKGNvbnN0IFN0b3JhZ2U6OlJlY29yZCYgc3RvcmFnZSkKK3sK
KyAgICBhdXRvIHJlc3VsdCA9IGRlY29kZVJlY29yZEhlYWRlcihzdG9yYWdlKTsKKworICAgIGlm
ICghcmVzdWx0KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgYXV0byByZWNv
cmQgPSBXVEZNb3ZlKHJlc3VsdC0+Zmlyc3QpOworICAgIHJlY29yZC5yZXNwb25zZUJvZHkgPSBX
ZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmNyZWF0ZShzdG9yYWdlLmJvZHkuZGF0YSgpLCBzdG9yYWdl
LmJvZHkuc2l6ZSgpKTsKKworICAgIHJldHVybiBXVEZNb3ZlKHJlY29yZCk7Cit9CisKK1ZlY3Rv
cjxLZXk+IENhY2hlOjprZXlzKCkgY29uc3QKK3sKKyAgICBWZWN0b3I8S2V5PiBrZXlzOworICAg
IGZvciAoYXV0byYgcmVjb3JkcyA6IG1fcmVjb3Jkcy52YWx1ZXMoKSkgeworICAgICAgICBmb3Ig
KGF1dG8mIHJlY29yZCA6IHJlY29yZHMpCisgICAgICAgICAgICBrZXlzLmFwcGVuZChyZWNvcmQu
a2V5KTsKKyAgICB9CisgICAgcmV0dXJuIGtleXM7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIENhY2hl
U3RvcmFnZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9D
YWNoZVN0b3JhZ2VFbmdpbmVDYWNoZS5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9j
YWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZS5oCmluZGV4IGM5ZjBkODBlNTRiNzZlMjA0MmUx
M2M5ZTQwNWM5ZDU1MjczZDEyNjUuLjU5YTA2YWRkMmNmN2YwN2M1YjVhNGYzMDY1ZTU1OTUxZWFk
ZmNiOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2Fj
aGVTdG9yYWdlRW5naW5lQ2FjaGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlLmgKQEAgLTI1LDcgKzI1LDcgQEAKIAogI3By
YWdtYSBvbmNlCiAKLSNpbmNsdWRlICJOZXR3b3JrQ2FjaGVLZXkuaCIKKyNpbmNsdWRlICJOZXR3
b3JrQ2FjaGVTdG9yYWdlLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9ET01DYWNoZUVuZ2luZS5oPgog
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
QEAgLTM2LDcgKzM2LDcgQEAgbmFtZXNwYWNlIENhY2hlU3RvcmFnZSB7CiAKIGNsYXNzIENhY2hl
czsKIAotc3RydWN0IFJlY29yZERhdGEgeworc3RydWN0IFJlY29yZEluZm9ybWF0aW9uIHsKICAg
ICBOZXR3b3JrQ2FjaGU6OktleSBrZXk7CiAgICAgZG91YmxlIGluc2VydGlvblRpbWUgeyAwIH07
CiAKQEAgLTQ2LDU4ICs0Niw2MSBAQCBzdHJ1Y3QgUmVjb3JkRGF0YSB7CiAgICAgV2ViQ29yZTo6
VVJMIHVybDsKICAgICBib29sIGhhc1ZhcnlTdGFyIHsgZmFsc2UgfTsKICAgICBIYXNoTWFwPFN0
cmluZywgU3RyaW5nPiB2YXJ5SGVhZGVyczsKLQotICAgIHN0cnVjdCBEYXRhIHsKLSAgICAgICAg
V2ViQ29yZTo6RmV0Y2hIZWFkZXJzOjpHdWFyZCByZXF1ZXN0SGVhZGVyc0d1YXJkOwotICAgICAg
ICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdDsKLSAgICAgICAgV2ViQ29yZTo6RmV0
Y2hPcHRpb25zIG9wdGlvbnM7Ci0gICAgICAgIFN0cmluZyByZWZlcnJlcjsKLQotICAgICAgICBX
ZWJDb3JlOjpGZXRjaEhlYWRlcnM6Okd1YXJkIHJlc3BvbnNlSGVhZGVyc0d1YXJkOwotICAgICAg
ICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlOwotICAgICAgICBXZWJDb3JlOjpE
T01DYWNoZUVuZ2luZTo6UmVzcG9uc2VCb2R5IHJlc3BvbnNlQm9keTsKLSAgICB9OwotCi0gICAg
c3RkOjpvcHRpb25hbDxEYXRhPiBkYXRhOwogfTsKIAorY2xhc3MgQXN5bmNocm9ub3VzUHV0VGFz
a0NvdW50ZXI7CitjbGFzcyBSZWFkUmVjb3JkVGFza0NvdW50ZXI7CisKIGNsYXNzIENhY2hlIHsK
IHB1YmxpYzoKICAgICBlbnVtIGNsYXNzIFN0YXRlIHsgVW5pbml0aWFsaXplZCwgT3BlbmluZywg
T3BlbiB9OwotICAgIENhY2hlKENhY2hlcyYsIHVpbnQ2NF90IGlkZW50aWZpZXIsIFN0YXRlLCBT
dHJpbmcmJiBuYW1lKTsKKyAgICBDYWNoZShDYWNoZXMmLCB1aW50NjRfdCBpZGVudGlmaWVyLCBT
dGF0ZSwgU3RyaW5nJiYgbmFtZSwgU3RyaW5nJiYgdW5pcXVlTmFtZSk7CiAKKyAgICBib29sIGlz
T3BlbmVkKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA9PSBTdGF0ZTo6T3BlbjsgfQogICAgIHZv
aWQgb3BlbihXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6Q29tcGxldGlvbkNhbGxiYWNrJiYpOwog
CiAgICAgdWludDY0X3QgaWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcjsg
fQogICAgIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQorICAg
IGNvbnN0IFN0cmluZyYgdW5pcXVlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fdW5pcXVlTmFtZTsg
fQogICAgIGJvb2wgaXNBY3RpdmUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlICE9IFN0YXRlOjpV
bmluaXRpYWxpemVkOyB9CiAKLSAgICBWZWN0b3I8V2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OlJl
Y29yZD4gcmV0cmlldmVSZWNvcmRzKGNvbnN0IFdlYkNvcmU6OlVSTCYpIGNvbnN0OworICAgIHZv
aWQgcmV0cmlldmVSZWNvcmRzKGNvbnN0IFdlYkNvcmU6OlVSTCYsIFdlYkNvcmU6OkRPTUNhY2hl
RW5naW5lOjpSZWNvcmRzQ2FsbGJhY2smJik7CiAgICAgV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6
OkNhY2hlSW5mbyBpbmZvKCkgY29uc3QgeyByZXR1cm4geyBtX2lkZW50aWZpZXIsIG1fbmFtZSB9
OyB9CiAKICAgICB2b2lkIHB1dChWZWN0b3I8V2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OlJlY29y
ZD4mJiwgV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OlJlY29yZElkZW50aWZpZXJzQ2FsbGJhY2sm
Jik7CiAgICAgdm9pZCByZW1vdmUoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYsIFdlYkNvcmU6
OkNhY2hlUXVlcnlPcHRpb25zJiYsIFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpSZWNvcmRJZGVu
dGlmaWVyc0NhbGxiYWNrJiYpOwogCisgICAgVmVjdG9yPE5ldHdvcmtDYWNoZTo6S2V5PiBrZXlz
KCkgY29uc3Q7CisKICAgICB2b2lkIGRpc3Bvc2UoKTsKICAgICB2b2lkIGNsZWFyTWVtb3J5UmVw
cmVzZW50YXRpb24oKTsKLSAKKworICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkRP
TUNhY2hlRW5naW5lOjpSZWNvcmQ+IGRlY29kZShjb25zdCBOZXR3b3JrQ2FjaGU6OlN0b3JhZ2U6
OlJlY29yZCYpOworICAgIHN0YXRpYyBOZXR3b3JrQ2FjaGU6OlN0b3JhZ2U6OlJlY29yZCBlbmNv
ZGUoY29uc3QgUmVjb3JkSW5mb3JtYXRpb24mLCBjb25zdCBXZWJDb3JlOjpET01DYWNoZUVuZ2lu
ZTo6UmVjb3JkJik7CisKIHByaXZhdGU6Ci0gICAgVmVjdG9yPFJlY29yZERhdGE+KiByZWNvcmRz
RnJvbVVSTChjb25zdCBXZWJDb3JlOjpVUkwmKTsKLSAgICBjb25zdCBWZWN0b3I8UmVjb3JkRGF0
YT4qIHJlY29yZHNGcm9tVVJMKGNvbnN0IFdlYkNvcmU6OlVSTCYpIGNvbnN0OwotICAgIFJlY29y
ZERhdGEmIGFkZFJlY29yZChWZWN0b3I8UmVjb3JkRGF0YT4qLCBXZWJDb3JlOjpET01DYWNoZUVu
Z2luZTo6UmVjb3JkJiYpOworICAgIFZlY3RvcjxSZWNvcmRJbmZvcm1hdGlvbj4qIHJlY29yZHNG
cm9tVVJMKGNvbnN0IFdlYkNvcmU6OlVSTCYpOworICAgIGNvbnN0IFZlY3RvcjxSZWNvcmRJbmZv
cm1hdGlvbj4qIHJlY29yZHNGcm9tVVJMKGNvbnN0IFdlYkNvcmU6OlVSTCYpIGNvbnN0OworICAg
IFJlY29yZEluZm9ybWF0aW9uJiBhZGRSZWNvcmQoVmVjdG9yPFJlY29yZEluZm9ybWF0aW9uPios
IGNvbnN0IFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpSZWNvcmQmKTsKKworICAgIFJlY29yZElu
Zm9ybWF0aW9uIHRvUmVjb3JkSW5mb3JtYXRpb24oY29uc3QgV2ViQ29yZTo6RE9NQ2FjaGVFbmdp
bmU6OlJlY29yZCYpOwogCiAgICAgdm9pZCBmaW5pc2hPcGVuaW5nKFdlYkNvcmU6OkRPTUNhY2hl
RW5naW5lOjpDb21wbGV0aW9uQ2FsbGJhY2smJiwgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpET01D
YWNoZUVuZ2luZTo6RXJyb3I+JiYpOworICAgIHZvaWQgcmV0cmlldmVSZWNvcmQoY29uc3QgUmVj
b3JkSW5mb3JtYXRpb24mLCBSZWZQdHI8UmVhZFJlY29yZFRhc2tDb3VudGVyPiYpOwogCiAgICAg
dm9pZCByZWFkUmVjb3Jkc0xpc3QoV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OkNvbXBsZXRpb25D
YWxsYmFjayYmKTsKLSAgICB2b2lkIHdyaXRlUmVjb3Jkc0xpc3QoV2ViQ29yZTo6RE9NQ2FjaGVF
bmdpbmU6OkNvbXBsZXRpb25DYWxsYmFjayYmKTsKLSAgICB2b2lkIHdyaXRlUmVjb3JkVG9EaXNr
KFJlY29yZERhdGEmKTsKLSAgICB2b2lkIHJlbW92ZVJlY29yZEZyb21EaXNrKFJlY29yZERhdGEm
KTsKKyAgICB2b2lkIHdyaXRlUmVjb3JkVG9EaXNrKGNvbnN0IFJlY29yZEluZm9ybWF0aW9uJiwg
V2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OlJlY29yZCYmLCBjb25zdCBSZWZQdHI8QXN5bmNocm9u
b3VzUHV0VGFza0NvdW50ZXI+Jik7CisgICAgdm9pZCB1cGRhdGVSZWNvcmRUb0Rpc2soUmVjb3Jk
SW5mb3JtYXRpb24mLCBXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6UmVjb3JkJiYsIGNvbnN0IFJl
ZlB0cjxBc3luY2hyb25vdXNQdXRUYXNrQ291bnRlcj4mKTsKKyAgICB2b2lkIHJlbW92ZVJlY29y
ZEZyb21EaXNrKGNvbnN0IFJlY29yZEluZm9ybWF0aW9uJik7CisgICAgdm9pZCByZWFkUmVjb3Jk
RnJvbURpc2soY29uc3QgUmVjb3JkSW5mb3JtYXRpb24mLCBXVEY6OkZ1bmN0aW9uPHZvaWQoRXhw
ZWN0ZWQ8V2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OlJlY29yZCwgV2ViQ29yZTo6RE9NQ2FjaGVF
bmdpbmU6OkVycm9yPiYmKT4mJik7CisgICAgdm9pZCByZW1vdmVGcm9tUmVjb3JkTGlzdChjb25z
dCBWZWN0b3I8dWludDY0X3Q+Jik7CiAKICAgICBDYWNoZXMmIG1fY2FjaGVzOwogICAgIFN0YXRl
IG1fc3RhdGU7CiAgICAgdWludDY0X3QgbV9pZGVudGlmaWVyIHsgMCB9OwogICAgIFN0cmluZyBt
X25hbWU7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxSZWNvcmREYXRhPj4gbV9yZWNvcmRz
OworICAgIFN0cmluZyBtX3VuaXF1ZU5hbWU7CisgICAgSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxS
ZWNvcmRJbmZvcm1hdGlvbj4+IG1fcmVjb3JkczsKICAgICB1aW50NjRfdCBtX25leHRSZWNvcmRJ
ZGVudGlmaWVyIHsgMCB9OwogICAgIFZlY3RvcjxXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6Q29t
cGxldGlvbkNhbGxiYWNrPiBtX3BlbmRpbmdPcGVuaW5nQ2FsbGJhY2tzOwogfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5l
Q2FjaGVzLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9y
YWdlRW5naW5lQ2FjaGVzLmNwcAppbmRleCBiMzFlMjg5NzdkZWQxYzQ3MGM2OTY5NWIwMzhjYmI0
NWM0YTNmNWM3Li4yMDdiN2Q2ZmQ2YWE4MjI1MTVmYzY2NjIyOGYxOTI4M2U0MDQzZTNiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVu
Z2luZUNhY2hlcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9D
YWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAi
Q2FjaGVTdG9yYWdlRW5naW5lLmgiCiAKICNpbmNsdWRlICJOZXR3b3JrQ2FjaGVDb2RlcnMuaCIK
KyNpbmNsdWRlIDx3dGYvVVVJRC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIu
aD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOwpAQCAtNTksNyAr
NjAsMTQgQEAgQ2FjaGVzOjpDYWNoZXMoRW5naW5lJiBlbmdpbmUsIFN0cmluZyYmIG9yaWdpbikK
IAogdm9pZCBDYWNoZXM6OmluaXRpYWxpemUoV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OkNvbXBs
ZXRpb25DYWxsYmFjayYmIGNhbGxiYWNrKQogewotICAgIGlmIChtX2lzSW5pdGlhbGl6ZWQgfHwg
bV9yb290UGF0aC5pc051bGwoKSkgeworICAgIGlmIChtX2lzSW5pdGlhbGl6ZWQpIHsKKyAgICAg
ICAgY2FsbGJhY2soc3RkOjpudWxsb3B0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmIChtX3Jvb3RQYXRoLmlzTnVsbCgpKSB7CisgICAgICAgIG1ha2VEaXJ0eSgpOworICAgICAg
ICBtX2lzSW5pdGlhbGl6ZWQgPSB0cnVlOwogICAgICAgICBjYWxsYmFjayhzdGQ6Om51bGxvcHQp
OwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNzUsNiArODMsNyBAQCB2b2lkIENhY2hlczo6
aW5pdGlhbGl6ZShXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6Q29tcGxldGlvbkNhbGxiYWNrJiYg
Y2FsbGJhY2spCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgbV9zdG9yYWdlID0gc3RvcmFn
ZS5yZWxlYXNlTm9uTnVsbCgpOworICAgIG1fc3RvcmFnZS0+d3JpdGVXaXRob3V0V2FpdGluZygp
OwogICAgIHJlYWRDYWNoZXNGcm9tRGlzayhbdGhpcywgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxi
YWNrKV0oRXhwZWN0ZWQ8VmVjdG9yPENhY2hlPiwgRXJyb3I+JiYgcmVzdWx0KSB7CiAgICAgICAg
IG1ha2VEaXJ0eSgpOwogCkBAIC0xMjAsNyArMTI5LDkgQEAgQ2FjaGUqIENhY2hlczo6ZmluZCh1
aW50NjRfdCBpZGVudGlmaWVyKQogCiB2b2lkIENhY2hlczo6b3Blbihjb25zdCBTdHJpbmcmIG5h
bWUsIENhY2hlSWRlbnRpZmllckNhbGxiYWNrJiYgY2FsbGJhY2spCiB7CisgICAgQVNTRVJUKG1f
aXNJbml0aWFsaXplZCk7CiAgICAgQVNTRVJUKG1fZW5naW5lKTsKKwogICAgIGlmIChhdXRvKiBj
YWNoZSA9IGZpbmQobmFtZSkpIHsKICAgICAgICAgY2FjaGUtPm9wZW4oW2NhY2hlSWRlbnRpZmll
ciA9IGNhY2hlLT5pZGVudGlmaWVyKCksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKHN0
ZDo6b3B0aW9uYWw8RXJyb3I+JiYgZXJyb3IpIG11dGFibGUgewogICAgICAgICAgICAgaWYgKGVy
cm9yKSB7CkBAIC0xMzUsNyArMTQ2LDcgQEAgdm9pZCBDYWNoZXM6Om9wZW4oY29uc3QgU3RyaW5n
JiBuYW1lLCBDYWNoZUlkZW50aWZpZXJDYWxsYmFjayYmIGNhbGxiYWNrKQogICAgIG1ha2VEaXJ0
eSgpOwogCiAgICAgdWludDY0X3QgY2FjaGVJZGVudGlmaWVyID0gbV9lbmdpbmUtPm5leHRDYWNo
ZUlkZW50aWZpZXIoKTsKLSAgICBtX2NhY2hlcy5hcHBlbmQoQ2FjaGUgeyAqdGhpcywgY2FjaGVJ
ZGVudGlmaWVyLCBDYWNoZTo6U3RhdGU6Ok9wZW4sIFN0cmluZyB7IG5hbWUgfSB9KTsKKyAgICBt
X2NhY2hlcy5hcHBlbmQoQ2FjaGUgeyAqdGhpcywgY2FjaGVJZGVudGlmaWVyLCBDYWNoZTo6U3Rh
dGU6Ok9wZW4sIFN0cmluZyB7IG5hbWUgfSwgY3JlYXRlQ2Fub25pY2FsVVVJRFN0cmluZygpIH0p
OwogCiAgICAgd3JpdGVDYWNoZXNUb0Rpc2soW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayks
IGNhY2hlSWRlbnRpZmllcl0oc3RkOjpvcHRpb25hbDxFcnJvcj4mJiBlcnJvcikgbXV0YWJsZSB7
CiAgICAgICAgIGNhbGxiYWNrKENhY2hlSWRlbnRpZmllck9wZXJhdGlvblJlc3VsdCB7IGNhY2hl
SWRlbnRpZmllciwgISFlcnJvciB9KTsKQEAgLTE0NCw2ICsxNTUsNyBAQCB2b2lkIENhY2hlczo6
b3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIENhY2hlSWRlbnRpZmllckNhbGxiYWNrJiYgY2FsbGJh
Y2spCiAKIHZvaWQgQ2FjaGVzOjpyZW1vdmUodWludDY0X3QgaWRlbnRpZmllciwgQ2FjaGVJZGVu
dGlmaWVyQ2FsbGJhY2smJiBjYWxsYmFjaykKIHsKKyAgICBBU1NFUlQobV9pc0luaXRpYWxpemVk
KTsKICAgICBBU1NFUlQobV9lbmdpbmUpOwogCiAgICAgYXV0byBwb3NpdGlvbiA9IG1fY2FjaGVz
LmZpbmRNYXRjaGluZyhbJl0oY29uc3QgYXV0byYgaXRlbSkgeyByZXR1cm4gaXRlbS5pZGVudGlm
aWVyKCkgPT0gaWRlbnRpZmllcjsgfSk7CkBAIC0xNjgsNiArMTgwLDkgQEAgdm9pZCBDYWNoZXM6
OmRpc3Bvc2UoQ2FjaGUmIGNhY2hlKQogewogICAgIGF1dG8gcG9zaXRpb24gPSBtX3JlbW92ZWRD
YWNoZXMuZmluZE1hdGNoaW5nKFsmXShjb25zdCBhdXRvJiBpdGVtKSB7IHJldHVybiBpdGVtLmlk
ZW50aWZpZXIoKSA9PSBjYWNoZS5pZGVudGlmaWVyKCk7IH0pOwogICAgIGlmIChwb3NpdGlvbiAh
PSBub3RGb3VuZCkgeworICAgICAgICBpZiAobV9zdG9yYWdlKQorICAgICAgICAgICAgbV9zdG9y
YWdlLT5yZW1vdmUoY2FjaGUua2V5cygpLCB7IH0pOworCiAgICAgICAgIG1fcmVtb3ZlZENhY2hl
cy5yZW1vdmUocG9zaXRpb24pOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTg0LDEzICsx
OTksMTUgQEAgc3RhdGljIGlubGluZSBEYXRhIGVuY29kZUNhY2hlTmFtZXMoY29uc3QgVmVjdG9y
PENhY2hlPiYgY2FjaGVzKQogCiAgICAgdWludDY0X3Qgc2l6ZSA9IGNhY2hlcy5zaXplKCk7CiAg
ICAgZW5jb2RlciA8PCBzaXplOwotICAgIGZvciAoYXV0byYgY2FjaGUgOiBjYWNoZXMpCisgICAg
Zm9yIChhdXRvJiBjYWNoZSA6IGNhY2hlcykgewogICAgICAgICBlbmNvZGVyIDw8IGNhY2hlLm5h
bWUoKTsKKyAgICAgICAgZW5jb2RlciA8PCBjYWNoZS51bmlxdWVOYW1lKCk7CisgICAgfQogCiAg
ICAgcmV0dXJuIERhdGEgeyBlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSB9
OwogfQogCi1zdGF0aWMgaW5saW5lIEV4cGVjdGVkPFZlY3RvcjxTdHJpbmc+LCBFcnJvcj4gZGVj
b2RlQ2FjaGVzTmFtZXMoY29uc3QgRGF0YSYgZGF0YSwgaW50IGVycm9yKQorc3RhdGljIGlubGlu
ZSBFeHBlY3RlZDxWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPj4sIEVycm9yPiBkZWNv
ZGVDYWNoZXNOYW1lcyhjb25zdCBEYXRhJiBkYXRhLCBpbnQgZXJyb3IpCiB7CiAgICAgaWYgKGVy
cm9yKQogICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoRXJyb3I6OlJlYWREaXNrKTsKQEAg
LTIwMCwxNCArMjE3LDE3IEBAIHN0YXRpYyBpbmxpbmUgRXhwZWN0ZWQ8VmVjdG9yPFN0cmluZz4s
IEVycm9yPiBkZWNvZGVDYWNoZXNOYW1lcyhjb25zdCBEYXRhJiBkYXRhCiAgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShjb3VudCkpCiAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChFcnJvcjo6
UmVhZERpc2spOwogCi0gICAgVmVjdG9yPFN0cmluZz4gbmFtZXM7CisgICAgVmVjdG9yPHN0ZDo6
cGFpcjxTdHJpbmcsIFN0cmluZz4+IG5hbWVzOwogICAgIG5hbWVzLnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkoY291bnQpOwogICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBjb3VudDsg
KytpbmRleCkgewogICAgICAgICBTdHJpbmcgbmFtZTsKICAgICAgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShuYW1lKSkKICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChFcnJvcjo6UmVh
ZERpc2spOworICAgICAgICBTdHJpbmcgdW5pcXVlTmFtZTsKKyAgICAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZSh1bmlxdWVOYW1lKSkKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChF
cnJvcjo6UmVhZERpc2spOwogCi0gICAgICAgIG5hbWVzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3Zl
KG5hbWUpKTsKKyAgICAgICAgbmFtZXMudW5jaGVja2VkQXBwZW5kKHN0ZDo6cGFpcjxTdHJpbmcs
IFN0cmluZz4geyBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKHVuaXF1ZU5hbWUpIH0pOwogICAgIH0K
ICAgICByZXR1cm4gbmFtZXM7CiB9CkBAIC0yNDAsOCArMjYwLDggQEAgdm9pZCBDYWNoZXM6OnJl
YWRDYWNoZXNGcm9tRGlzayhXVEY6OkZ1bmN0aW9uPHZvaWQoRXhwZWN0ZWQ8VmVjdG9yPENhY2hl
PiwgRXJyb3IKICAgICAgICAgICAgIGNhbGxiYWNrKG1ha2VVbmV4cGVjdGVkKHJlc3VsdC5lcnJv
cigpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgY2FsbGJhY2so
V1RGOjptYXAoV1RGTW92ZShyZXN1bHQudmFsdWUoKSksIFt0aGlzXSAoU3RyaW5nJiYgbmFtZSkg
ewotICAgICAgICAgICAgcmV0dXJuIENhY2hlIHsgKnRoaXMsIG1fZW5naW5lLT5uZXh0Q2FjaGVJ
ZGVudGlmaWVyKCksIENhY2hlOjpTdGF0ZTo6VW5pbml0aWFsaXplZCwgV1RGTW92ZShuYW1lKSB9
OworICAgICAgICBjYWxsYmFjayhXVEY6Om1hcChXVEZNb3ZlKHJlc3VsdC52YWx1ZSgpKSwgW3Ro
aXNdIChhdXRvJiYgcGFpcikgeworICAgICAgICAgICAgcmV0dXJuIENhY2hlIHsgKnRoaXMsIG1f
ZW5naW5lLT5uZXh0Q2FjaGVJZGVudGlmaWVyKCksIENhY2hlOjpTdGF0ZTo6VW5pbml0aWFsaXpl
ZCwgV1RGTW92ZShwYWlyLmZpcnN0KSwgV1RGTW92ZShwYWlyLnNlY29uZCkgfTsKICAgICAgICAg
fSkpOwogICAgIH0pOwogfQpAQCAtMjY2LDE0ICsyODYsODIgQEAgdm9pZCBDYWNoZXM6OndyaXRl
Q2FjaGVzVG9EaXNrKENvbXBsZXRpb25DYWxsYmFjayYmIGNhbGxiYWNrKQogICAgIH0pOwogfQog
Cit2b2lkIENhY2hlczo6cmVhZFJlY29yZHNMaXN0KENhY2hlJiBjYWNoZSwgTmV0d29ya0NhY2hl
OjpTdG9yYWdlOjpUcmF2ZXJzZUhhbmRsZXImJiBjYWxsYmFjaykKK3sKKyAgICBBU1NFUlQobV9p
c0luaXRpYWxpemVkKTsKKworICAgIGlmICghbV9zdG9yYWdlKSB7CisgICAgICAgIGNhbGxiYWNr
KG51bGxwdHIsIHsgfSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9zdG9yYWdlLT50
cmF2ZXJzZShjYWNoZS51bmlxdWVOYW1lKCksIDAsIFtwcm90ZWN0ZWRTdG9yYWdlID0gbWFrZVJl
ZigqbV9zdG9yYWdlKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oY29uc3QgYXV0byog
c3RvcmFnZSwgY29uc3QgYXV0byYgaW5mb3JtYXRpb24pIHsKKyAgICAgICAgY2FsbGJhY2soc3Rv
cmFnZSwgaW5mb3JtYXRpb24pOworICAgIH0pOworfQorCit2b2lkIENhY2hlczo6d3JpdGVSZWNv
cmQoY29uc3QgQ2FjaGUmIGNhY2hlLCBjb25zdCBSZWNvcmRJbmZvcm1hdGlvbiYgcmVjb3JkSW5m
b3JtYXRpb24sIFJlY29yZCYmIHJlY29yZCwgQ29tcGxldGlvbkNhbGxiYWNrJiYgY2FsbGJhY2sp
Cit7CisgICAgQVNTRVJUKG1faXNJbml0aWFsaXplZCk7CisKKyAgICAvLyBGSVhNRTogQ2hlY2sg
Zm9yIHN0b3JhZ2UgcXVvdGEuCisgICAgaWYgKCFzaG91bGRQZXJzaXN0KCkpIHsKKyAgICAgICAg
bV92b2xhdGlsZVN0b3JhZ2Uuc2V0KHJlY29yZEluZm9ybWF0aW9uLmtleSwgV1RGTW92ZShyZWNv
cmQpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fc3RvcmFnZS0+c3RvcmUoQ2Fj
aGU6OmVuY29kZShyZWNvcmRJbmZvcm1hdGlvbiwgcmVjb3JkKSwgW3Byb3RlY3RlZFN0b3JhZ2Ug
PSBtYWtlUmVmKCptX3N0b3JhZ2UpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShjb25z
dCBEYXRhJikgeworICAgICAgICBjYWxsYmFjayhzdGQ6Om51bGxvcHQpOworICAgIH0pOworfQor
Cit2b2lkIENhY2hlczo6cmVhZFJlY29yZChjb25zdCBOZXR3b3JrQ2FjaGU6OktleSYga2V5LCBX
VEY6OkZ1bmN0aW9uPHZvaWQoRXhwZWN0ZWQ8UmVjb3JkLCBFcnJvcj4mJik+JiYgY2FsbGJhY2sp
Cit7CisgICAgQVNTRVJUKG1faXNJbml0aWFsaXplZCk7CisKKyAgICBpZiAoIXNob3VsZFBlcnNp
c3QoKSkgeworICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbV92b2xhdGlsZVN0b3JhZ2UuZmluZChr
ZXkpOworICAgICAgICBpZiAoaXRlcmF0b3IgPT0gbV92b2xhdGlsZVN0b3JhZ2UuZW5kKCkpIHsK
KyAgICAgICAgICAgIGNhbGxiYWNrKG1ha2VVbmV4cGVjdGVkKEVycm9yOjpJbnRlcm5hbCkpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGNhbGxiYWNrKGl0ZXJhdG9y
LT52YWx1ZS5jb3B5KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9zdG9yYWdl
LT5yZXRyaWV2ZShrZXksIDQsIFtwcm90ZWN0ZWRTdG9yYWdlID0gbWFrZVJlZigqbV9zdG9yYWdl
KSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oc3RkOjp1bmlxdWVfcHRyPFN0b3JhZ2U6
OlJlY29yZD4gc3RvcmFnZSkgbXV0YWJsZSB7CisgICAgICAgIGlmICghc3RvcmFnZSkgeworICAg
ICAgICAgICAgY2FsbGJhY2sobWFrZVVuZXhwZWN0ZWQoRXJyb3I6OlJlYWREaXNrKSk7CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBhdXRvIHJlY29yZCA9
IENhY2hlOjpkZWNvZGUoKnN0b3JhZ2UpOworICAgICAgICBpZiAoIXJlY29yZCkgeworICAgICAg
ICAgICAgY2FsbGJhY2sobWFrZVVuZXhwZWN0ZWQoRXJyb3I6OlJlYWREaXNrKSk7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBjYWxsYmFjayhXVEZNb3Zl
KHJlY29yZC52YWx1ZSgpKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0pOworfQorCit2
b2lkIENhY2hlczo6cmVtb3ZlUmVjb3JkKGNvbnN0IE5ldHdvcmtDYWNoZTo6S2V5JiBrZXkpCit7
CisgICAgQVNTRVJUKG1faXNJbml0aWFsaXplZCk7CisKKyAgICBpZiAoIXNob3VsZFBlcnNpc3Qo
KSkgeworICAgICAgICBtX3ZvbGF0aWxlU3RvcmFnZS5yZW1vdmUoa2V5KTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBtX3N0b3JhZ2UtPnJlbW92ZShrZXkpOworfQorCiB2b2lkIENhY2hl
czo6Y2xlYXJNZW1vcnlSZXByZXNlbnRhdGlvbigpCiB7CiAgICAgbWFrZURpcnR5KCk7CiAgICAg
bV9jYWNoZXMuY2xlYXIoKTsKICAgICBtX2lzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKICAgICBtX3N0
b3JhZ2UgPSBudWxscHRyOwotICAgIGlmIChtX2VuZ2luZSkKLSAgICAgICAgbV9lbmdpbmUtPnJl
bW92ZUNhY2hlcyhtX29yaWdpbik7CiB9CiAKIGJvb2wgQ2FjaGVzOjppc0RpcnR5KHVpbnQ2NF90
IHVwZGF0ZUNvdW50ZXIpIGNvbnN0CkBAIC0yODIsNiArMzcwLDE3IEBAIGJvb2wgQ2FjaGVzOjpp
c0RpcnR5KHVpbnQ2NF90IHVwZGF0ZUNvdW50ZXIpIGNvbnN0CiAgICAgcmV0dXJuIG1fdXBkYXRl
Q291bnRlciAhPSB1cGRhdGVDb3VudGVyOwogfQogCitjb25zdCBOZXR3b3JrQ2FjaGU6OlNhbHQm
IENhY2hlczo6c2FsdCgpIGNvbnN0Cit7CisgICAgaWYgKG1fZW5naW5lKQorICAgICAgICByZXR1
cm4gbV9lbmdpbmUtPnNhbHQoKTsKKworICAgIGlmICghbV92b2xhdGlsZVNhbHQpCisgICAgICAg
IG1fdm9sYXRpbGVTYWx0ID0gU2FsdCB7IH07CisKKyAgICByZXR1cm4gbV92b2xhdGlsZVNhbHQu
dmFsdWUoKTsKK30KKwogQ2FjaGVJbmZvcyBDYWNoZXM6OmNhY2hlSW5mb3ModWludDY0X3QgdXBk
YXRlQ291bnRlcikgY29uc3QKIHsKICAgICBWZWN0b3I8Q2FjaGVJbmZvPiBjYWNoZUluZm9zOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3Jh
Z2VFbmdpbmVDYWNoZXMuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2Fj
aGVTdG9yYWdlRW5naW5lQ2FjaGVzLmgKaW5kZXggZjMxM2ZkMWM0Y2I4YjlmYWZjYjY0NjY4ODY4
Y2Y0MzdhZDU5NzIzMi4uNGEyYTc3OTJlZmVhNmRhZmE2NDQ0MDUzZWM3MDhiYjA1M2U2YWYwNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3Jh
Z2VFbmdpbmVDYWNoZXMuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hl
L0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5oCkBAIC01MiwxNyArNTIsMjMgQEAgcHVibGljOgog
ICAgIENhY2hlKiBmaW5kKHVpbnQ2NF90IGlkZW50aWZpZXIpOwogICAgIHZvaWQgYXBwZW5kUmVw
cmVzZW50YXRpb24oU3RyaW5nQnVpbGRlciYpIGNvbnN0OwogCisgICAgdm9pZCByZWFkUmVjb3Jk
c0xpc3QoQ2FjaGUmLCBOZXR3b3JrQ2FjaGU6OlN0b3JhZ2U6OlRyYXZlcnNlSGFuZGxlciYmKTsK
KyAgICB2b2lkIHJlYWRSZWNvcmQoY29uc3QgTmV0d29ya0NhY2hlOjpLZXkmLCBXVEY6OkZ1bmN0
aW9uPHZvaWQoRXhwZWN0ZWQ8V2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OlJlY29yZCwgV2ViQ29y
ZTo6RE9NQ2FjaGVFbmdpbmU6OkVycm9yPiYmKT4mJik7CisgICAgdm9pZCB3cml0ZVJlY29yZChj
b25zdCBDYWNoZSYsIGNvbnN0IFJlY29yZEluZm9ybWF0aW9uJiwgV2ViQ29yZTo6RE9NQ2FjaGVF
bmdpbmU6OlJlY29yZCYmLCBXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6Q29tcGxldGlvbkNhbGxi
YWNrJiYpOworICAgIHZvaWQgcmVtb3ZlUmVjb3JkKGNvbnN0IE5ldHdvcmtDYWNoZTo6S2V5Jik7
CisKKyAgICBjb25zdCBOZXR3b3JrQ2FjaGU6OlNhbHQmIHNhbHQoKSBjb25zdDsKKworICAgIGJv
b2wgc2hvdWxkUGVyc2lzdCgpIGNvbnN0IHsgcmV0dXJuICFtX3Jvb3RQYXRoLmlzTnVsbCgpOyB9
CisKIHByaXZhdGU6CiAgICAgQ2FjaGVzKEVuZ2luZSYsIFN0cmluZyYmIG9yaWdpbik7CiAKICAg
ICB2b2lkIHJlYWRDYWNoZXNGcm9tRGlzayhXVEY6OkZ1bmN0aW9uPHZvaWQoRXhwZWN0ZWQ8VmVj
dG9yPENhY2hlPiwgV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OkVycm9yPiYmKT4mJik7CiAgICAg
dm9pZCB3cml0ZUNhY2hlc1RvRGlzayhXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6Q29tcGxldGlv
bkNhbGxiYWNrJiYpOwogCi0KICAgICBDYWNoZSogZmluZChjb25zdCBTdHJpbmcmIG5hbWUpOwog
Ci0gICAgYm9vbCBzaG91bGRQZXJzaXN0KCkgY29uc3QgeyByZXR1cm4gIW1fcm9vdFBhdGguaXNO
dWxsKCk7IH0KLQogICAgIHZvaWQgbWFrZURpcnR5KCkgeyArK21fdXBkYXRlQ291bnRlcjsgfQog
ICAgIGJvb2wgaXNEaXJ0eSh1aW50NjRfdCB1cGRhdGVDb3VudGVyKSBjb25zdDsKIApAQCAtNzQs
NiArODAsOCBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxDYWNoZT4gbV9jYWNoZXM7CiAgICAgVmVj
dG9yPENhY2hlPiBtX3JlbW92ZWRDYWNoZXM7CiAgICAgUmVmUHRyPE5ldHdvcmtDYWNoZTo6U3Rv
cmFnZT4gbV9zdG9yYWdlOworICAgIEhhc2hNYXA8TmV0d29ya0NhY2hlOjpLZXksIFdlYkNvcmU6
OkRPTUNhY2hlRW5naW5lOjpSZWNvcmQ+IG1fdm9sYXRpbGVTdG9yYWdlOworICAgIG11dGFibGUg
c3RkOjpvcHRpb25hbDxOZXR3b3JrQ2FjaGU6OlNhbHQ+IG1fdm9sYXRpbGVTYWx0OwogICAgIFZl
Y3RvcjxXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6Q29tcGxldGlvbkNhbGxiYWNrPiBtX3BlbmRp
bmdJbml0aWFsaXphdGlvbkNhbGxiYWNrczsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuY3BwCmluZGV4
IDgwM2E5OWZiZGRkNmQ4ZDIyNzBhZDU1YzliY2I1MGEwNTFhNDRiM2YuLjBiNjUyOGRkNzI4ZmI5
MzMwYWE5ZDA1NDI4NTc0Y2Y0NjBkMDlhZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcApAQCAtODQ2
LDEwICs4NDYsNyBAQCB2b2lkIFN0b3JhZ2U6OnN0b3JlKGNvbnN0IFJlY29yZCYgcmVjb3JkLCBN
YXBwZWRCb2R5SGFuZGxlciYmIG1hcHBlZEJvZHlIYW5kbGVyKQogICAgIGlmICghaXNJbml0aWFs
V3JpdGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIERlbGF5IHRoZSBzdGFydCBvZiB3cml0
ZXMgYSBiaXQgdG8gYXZvaWQgYWZmZWN0aW5nIGVhcmx5IHBhZ2UgbG9hZC4KLSAgICAvLyBDb21w
bGV0aW5nIHdyaXRlcyB3aWxsIGRpc3BhdGNoIG1vcmUgd3JpdGVzIHdpdGhvdXQgZGVsYXkuCi0g
ICAgc3RhdGljIGNvbnN0IFNlY29uZHMgaW5pdGlhbFdyaXRlRGVsYXkgPSAxX3M7Ci0gICAgbV93
cml0ZU9wZXJhdGlvbkRpc3BhdGNoVGltZXIuc3RhcnRPbmVTaG90KGluaXRpYWxXcml0ZURlbGF5
KTsKKyAgICBtX3dyaXRlT3BlcmF0aW9uRGlzcGF0Y2hUaW1lci5zdGFydE9uZVNob3QobV9pbml0
aWFsV3JpdGVEZWxheSk7CiB9CiAKIHZvaWQgU3RvcmFnZTo6dHJhdmVyc2UoY29uc3QgU3RyaW5n
JiB0eXBlLCBUcmF2ZXJzZUZsYWdzIGZsYWdzLCBUcmF2ZXJzZUhhbmRsZXImJiB0cmF2ZXJzZUhh
bmRsZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZVN0b3JhZ2UuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUv
TmV0d29ya0NhY2hlU3RvcmFnZS5oCmluZGV4IDQxMmVkOWVjNTczMTEzZDhlNTFiMmNmZTMxYmVi
MDVmOTVlZDk0NzkuLmI2ODhkY2Q0ZTBhNzVlYTEyYTlkMTBkZGU3YzliYjRjOGY5ZjRiNDYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hl
U3RvcmFnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlU3RvcmFnZS5oCkBAIC0xMDQsNiArMTA0LDggQEAgcHVibGljOgogCiAgICAgflN0b3Jh
Z2UoKTsKIAorICAgIHZvaWQgd3JpdGVXaXRob3V0V2FpdGluZygpIHsgbV9pbml0aWFsV3JpdGVE
ZWxheSA9IDBfczsgfTsKKwogcHJpdmF0ZToKICAgICBTdG9yYWdlKGNvbnN0IFN0cmluZyYgZGly
ZWN0b3J5UGF0aCwgTW9kZSwgU2FsdCk7CiAKQEAgLTE4Miw2ICsxODQsMTAgQEAgcHJpdmF0ZToK
ICAgICBSZWY8V29ya1F1ZXVlPiBtX3NlcmlhbEJhY2tncm91bmRJT1F1ZXVlOwogCiAgICAgQmxv
YlN0b3JhZ2UgbV9ibG9iU3RvcmFnZTsKKworICAgIC8vIEJ5IGRlZmF1bHQsIGRlbGF5IHRoZSBz
dGFydCBvZiB3cml0ZXMgYSBiaXQgdG8gYXZvaWQgYWZmZWN0aW5nIGVhcmx5IHBhZ2UgbG9hZC4K
KyAgICAvLyBDb21wbGV0aW5nIHdyaXRlcyB3aWxsIGRpc3BhdGNoIG1vcmUgd3JpdGVzIHdpdGhv
dXQgZGVsYXkuCisgICAgU2Vjb25kcyBtX2luaXRpYWxXcml0ZURlbGF5IHsgMV9zIH07CiB9Owog
CiAvLyBGSVhNRTogUmVtb3ZlLCB1c2VkIGJ5IE5ldHdvcmtDYWNoZVN0YXRpc3RpY3Mgb25seS4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA3N2I1Yjk3ZGIwYTUwZThhOTE0NDRlZDFhYzY0ODlkMGY1MzM2OTY0Li4xOTUyNmRl
ZGFjMDMwY2JkMTcyMzkwOWMxODdiNGNjMGY0MzFlZGE3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAK
KzIwMTctMDktMTMgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgorCisgICAgICAg
IEFkZCBDYWNoZSBBUEkgc3VwcG9ydCBvZiByZWNvcmRzIHBlcnNpc3RlbmN5CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzY4NDUKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGh0dHAvdGVzdHMvY2FjaGUt
c3RvcmFnZS9jYWNoZS1wZXJzaXN0ZW5jeS5odHRwcy5odG1sOgorICAgICAgICAqIGh0dHAvdGVz
dHMvY2FjaGUtc3RvcmFnZS9jYWNoZS1yZWNvcmRzLXBlcnNpc3RlbmN5Lmh0dHBzLWV4cGVjdGVk
LnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9jYWNoZS1zdG9yYWdlL2NhY2hlLXJl
Y29yZHMtcGVyc2lzdGVuY3kuaHR0cHMuaHRtbDogQWRkZWQuCisKIDIwMTctMDktMTMgIFNhaWQg
QWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KIAogICAgICAgICBGb2xsb3d1
cCAocjIyMTgwNSk6IEFkZHJlc3MgY29tbWVudHMgYW5kIGFkZCBtb3JlIHRlc3RzCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2NhY2hlLXN0b3JhZ2UvY2FjaGUtcGVyc2lzdGVu
Y3kuaHR0cHMuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvY2FjaGUtc3RvcmFnZS9jYWNo
ZS1wZXJzaXN0ZW5jeS5odHRwcy5odG1sCmluZGV4IGQxZWFkNGQ0YWYyNWJjZThmNTRmNjBhOGEz
MmRkMWQ3NzQxMWI4ZjguLmRjOWU5NmI2NWU4YzI0MWY3MDc5NmU2NTk2NWUyNTdkOWMzNTJjZGQg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvY2FjaGUtc3RvcmFnZS9jYWNoZS1w
ZXJzaXN0ZW5jeS5odHRwcy5odG1sCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvY2FjaGUt
c3RvcmFnZS9jYWNoZS1wZXJzaXN0ZW5jeS5odHRwcy5odG1sCkBAIC00MiwxMSArNDIsMTEgQEAK
ICAgICBwcm9taXNlX3Rlc3QodGVzdCA9PiB7CiAgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5l
cikKICAgICAgICAgICAgIHRlc3RSdW5uZXIuc2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChmYWxz
ZSk7Ci0gICAgICAgIHZhciBjbGVhclByb21pc2U7Ci0gICAgICAgIGlmICh3aW5kb3cuaW50ZXJu
YWxzKQotICAgICAgICAgICAgY2xlYXJQcm9taXNlID1pbnRlcm5hbHMuY2xlYXJDYWNoZVN0b3Jh
Z2VNZW1vcnlSZXByZXNlbnRhdGlvbigpOwogCi0gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29s
dmUoY2xlYXJQcm9taXNlKS50aGVuKCgpID0+IHsKKyAgICAgICAgcmV0dXJuIFByb21pc2UucmVz
b2x2ZSgpLnRoZW4oKCkgPT4geworICAgICAgICAgICAgaWYgKHdpbmRvdy5pbnRlcm5hbHMpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFscy5jbGVhckNhY2hlU3RvcmFnZU1lbW9yeVJl
cHJlc2VudGF0aW9uKCk7CisgICAgICAgIH0pLnRoZW4oKCkgPT4gewogICAgICAgICAgICAgcmV0
dXJuIHNlbGYuY2FjaGVzLmtleXMoKTsKICAgICAgICAgfSkudGhlbihrZXlzID0+IHsKICAgICAg
ICAgICAgIHZhciBwZW5kaW5nID0gW107CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL2NhY2hlLXN0b3JhZ2UvY2FjaGUtcmVjb3Jkcy1wZXJzaXN0ZW5jeS5odHRwcy1leHBlY3Rl
ZC50eHQgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2NhY2hlLXN0b3JhZ2UvY2FjaGUtcmVjb3Jk
cy1wZXJzaXN0ZW5jeS5odHRwcy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzE5Y2NlYTNiNGRj
NGU2YTAyMzA1MzJjMTc5ZmUxMTA0MTQxZjg2NgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2h0dHAvdGVzdHMvY2FjaGUtc3RvcmFnZS9jYWNoZS1yZWNvcmRzLXBlcnNpc3RlbmN5Lmh0
dHBzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDkgQEAKKworUEFTUyBDbGVhbmluZyBleGlzdGlu
ZyBjYWNoZXMgCitQQVNTIENhY2hlLnB1dCBjYWxsZWQgdHdpY2Ugd2l0aCBtYXRjaGluZyBSZXF1
ZXN0cyAtIGtleXMgc2hvdWxkIHJlbWFpbiB0aGUgc2FtZSAtIHRlc3RpbmcgcGVyc2lzdGVuY3kg
CitQQVNTIENsZWFuaW5nIGNyZWF0ZWQgY2FjaGVzIAorUEFTUyBDaGVja2luZyBwZXJzaXN0ZW5j
eSBvZiBjYWNoZSBrZXlzIAorUEFTUyBDaGVja2luZyBwZXJzaXN0ZW5jeSBvZiByZXNwb25zZSAK
K1BBU1MgQ2hlY2tpbmcgcGVyc2lzdGVuY3kgb2YgcmVzcG9uc2UgYm9keSAKK1BBU1MgVGVzdGlu
ZyBvdmVycmlkaW5nIG9mIGFuIGV4aXN0aW5nIGNhY2hlZCByZWNvcmQgdGhhdCBpcyBub3QgaW4g
bWVtb3J5IAorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2NhY2hlLXN0b3Jh
Z2UvY2FjaGUtcmVjb3Jkcy1wZXJzaXN0ZW5jeS5odHRwcy5odG1sIGIvTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9jYWNoZS1zdG9yYWdlL2NhY2hlLXJlY29yZHMtcGVyc2lzdGVuY3kuaHR0cHMuaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5iYjRiYWEwMGFiZWFhNWQ1NTE3YzMwODVlODFhYjI4MmEzNzJhODUwCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9jYWNoZS1zdG9yYWdlL2Nh
Y2hlLXJlY29yZHMtcGVyc2lzdGVuY3kuaHR0cHMuaHRtbApAQCAtMCwwICsxLDEzMyBAQAorPCFE
T0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPkNhY2hlIFN0b3JhZ2U6IHRlc3Rp
bmcgQ2FjaGUgcGVyc2lzdGVuY3k8L3RpdGxlPgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVz
dGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5l
c3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+CisgICAgPHNjcmlwdD4KK2Z1
bmN0aW9uIGFzc2VydF9oZWFkZXJfZXF1YWxzKGFjdHVhbCwgZXhwZWN0ZWQsIGRlc2NyaXB0aW9u
KSB7CisgICAgYXNzZXJ0X2NsYXNzX3N0cmluZyhhY3R1YWwsICJIZWFkZXJzIiwgZGVzY3JpcHRp
b24pOworICAgIHZhciBoZWFkZXI7CisgICAgdmFyIGFjdHVhbF9oZWFkZXJzID0gW107CisgICAg
dmFyIGV4cGVjdGVkX2hlYWRlcnMgPSBbXTsKKyAgICBmb3IgKGhlYWRlciBvZiBhY3R1YWwpCisg
ICAgICAgIGFjdHVhbF9oZWFkZXJzLnB1c2goaGVhZGVyWzBdICsgIjogIiArIGhlYWRlclsxXSk7
CisgICAgZm9yIChoZWFkZXIgb2YgZXhwZWN0ZWQpCisgICAgICAgIGV4cGVjdGVkX2hlYWRlcnMu
cHVzaChoZWFkZXJbMF0gKyAiOiAiICsgaGVhZGVyWzFdKTsKKyAgICBhc3NlcnRfYXJyYXlfZXF1
YWxzKGFjdHVhbF9oZWFkZXJzLCBleHBlY3RlZF9oZWFkZXJzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgZGVzY3JpcHRpb24gKyAiIEhlYWRlcnMgZGlmZmVyLiIpOworfQorCitmdW5jdGlvbiBh
c3NlcnRfcmVzcG9uc2VfZXF1YWxzKGFjdHVhbCwgZXhwZWN0ZWQsIGRlc2NyaXB0aW9uKSB7Cisg
ICAgYXNzZXJ0X2NsYXNzX3N0cmluZyhhY3R1YWwsICJSZXNwb25zZSIsIGRlc2NyaXB0aW9uKTsK
KyAgICBbInR5cGUiLCAidXJsIiwgInN0YXR1cyIsICJvayIsICJzdGF0dXNUZXh0Il0uZm9yRWFj
aChmdW5jdGlvbihhdHRyaWJ1dGUpIHsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyhhY3R1YWxbYXR0
cmlidXRlXSwgZXhwZWN0ZWRbYXR0cmlidXRlXSwKKyAgICAgICAgICAgICAgICAgICAgICBkZXNj
cmlwdGlvbiArICIgQXR0cmlidXRlcyBkaWZmZXI6ICIgKyBhdHRyaWJ1dGUgKyAiLiIpOworICAg
IH0pOworICAgIGFzc2VydF9oZWFkZXJfZXF1YWxzKGFjdHVhbC5oZWFkZXJzLCBleHBlY3RlZC5o
ZWFkZXJzLCBkZXNjcmlwdGlvbik7Cit9CisKK2Z1bmN0aW9uIGFzc2VydF9yZXF1ZXN0X2VxdWFs
cyhhY3R1YWwsIGV4cGVjdGVkLCBkZXNjcmlwdGlvbikgeworICAgIGFzc2VydF9jbGFzc19zdHJp
bmcoYWN0dWFsLCAiUmVxdWVzdCIsIGRlc2NyaXB0aW9uKTsKKyAgICBbInVybCJdLmZvckVhY2go
ZnVuY3Rpb24oYXR0cmlidXRlKSB7CisgICAgICAgIGFzc2VydF9lcXVhbHMoYWN0dWFsW2F0dHJp
YnV0ZV0sIGV4cGVjdGVkW2F0dHJpYnV0ZV0sCisgICAgICAgICAgICAgICAgICAgICAgZGVzY3Jp
cHRpb24gKyAiIEF0dHJpYnV0ZXMgZGlmZmVyOiAiICsgYXR0cmlidXRlICsgIi4iKTsKKyAgICB9
KTsKKyAgICBhc3NlcnRfaGVhZGVyX2VxdWFscyhhY3R1YWwuaGVhZGVycywgZXhwZWN0ZWQuaGVh
ZGVycywgZGVzY3JpcHRpb24pOworfQorCitmdW5jdGlvbiBhc3NlcnRfcmVxdWVzdF9hcnJheV9l
cXVhbHMoYWN0dWFsLCBleHBlY3RlZCwgZGVzY3JpcHRpb24pIHsKKyAgICBhc3NlcnRfdHJ1ZShB
cnJheS5pc0FycmF5KGFjdHVhbCksIGRlc2NyaXB0aW9uKTsKKyAgICBhc3NlcnRfZXF1YWxzKGFj
dHVhbC5sZW5ndGgsIGV4cGVjdGVkLmxlbmd0aCwgZGVzY3JpcHRpb24pOworICAgIGFjdHVhbC5m
b3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBpbmRleCkgeworICAgICAgICBhc3NlcnRfcmVxdWVzdF9l
cXVhbHModmFsdWUsIGV4cGVjdGVkW2luZGV4XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRlc2NyaXB0aW9uICsgIiA6IG9iamVjdFsiICsgaW5kZXggKyAiXSIpOworICAgIH0pOwor
fQorCitwcm9taXNlX3Rlc3QodGVzdCA9PiB7CisgICAgcmV0dXJuIHNlbGYuY2FjaGVzLmtleXMo
KS50aGVuKGtleXMgPT4geworICAgICAgICB2YXIgcGVuZGluZyA9IFtdOworICAgICAgICBmb3Ig
KGtleSBvZiBrZXlzKQorICAgICAgICAgICAgcGVuZGluZy5wdXNoKHNlbGYuY2FjaGVzLmRlbGV0
ZShrZXlzWzBdKSk7CisgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChwZW5kaW5nKTsKKyAgICB9
KTsKK30sICJDbGVhbmluZyBleGlzdGluZyBjYWNoZXMiKTsKKwordmFyIHRlc3RfdXJsID0gJ2h0
dHBzOi8vZXhhbXBsZS5jb20vZm9vJzsKK3ZhciB0ZXN0X2JvZHkgPSAnSGVsbG8gd29ybGQhJzsK
KworcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgICB2YXIgY2FjaGU7CisgICAgdmFyIGNhY2hlX2tl
eXM7CisgICAgdmFyIGZpcnN0X3Jlc3BvbnNlID0gbmV3IFJlc3BvbnNlKCJPbGQgYm9keSIsIHsg
c3RhdHVzVGV4dDogJ09sZCBzdGF0dXMnIH0pOworICAgIHZhciBhbHRlcm5hdGVfcmVzcG9uc2Ug
PSBuZXcgUmVzcG9uc2UoIk5ldyBib2R5IiwgeyBzdGF0dXNUZXh0OiAnTmV3IHN0YXR1cycgfSk7
CisgICAgcmV0dXJuIHNlbGYuY2FjaGVzLm9wZW4oInRlc3QtY2FjaGUtcmVjb3Jkcy1wZXJzaXN0
ZW5jeSIpLnRoZW4oYyA9PiB7CisgICAgICAgIGNhY2hlID0gYzsKKyAgICB9KS50aGVuKCgpID0+
IHsKKyAgICAgICAgcmV0dXJuIGNhY2hlLnB1dCh0ZXN0X3VybCwgZmlyc3RfcmVzcG9uc2UpOwor
ICAgIH0pLnRoZW4oKCkgPT4geworICAgICAgICByZXR1cm4gY2FjaGUua2V5cygpOworICAgIH0p
LnRoZW4oa2V5cyA9PiB7CisgICAgICAgIGNhY2hlX2tleXMgPSBrZXlzOworICAgICAgICBpZiAo
d2luZG93LmludGVybmFscykKKyAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbHMuY2xlYXJDYWNo
ZVN0b3JhZ2VNZW1vcnlSZXByZXNlbnRhdGlvbigpOworICAgIH0pLnRoZW4oKCkgPT4geworICAg
ICAgICByZXR1cm4gc2VsZi5jYWNoZXMub3BlbigidGVzdC1jYWNoZS1yZWNvcmRzLXBlcnNpc3Rl
bmN5Iik7CisgICAgfSkudGhlbihjID0+IHsKKyAgICAgICAgY2FjaGUgPSBjOworICAgICAgICBy
ZXR1cm4gY2FjaGUua2V5cygpLnRoZW4oKGtleXMpID0+IHsKKyAgICAgICAgICAgIHRlc3QoKCkg
PT4geworICAgICAgICAgICAgICAgIGFzc2VydF9yZXF1ZXN0X2FycmF5X2VxdWFscyhrZXlzLCBj
YWNoZV9rZXlzKTsKKyAgICAgICAgICAgIH0sICJDaGVja2luZyBwZXJzaXN0ZW5jeSBvZiBjYWNo
ZSBrZXlzIik7CisgICAgICAgICAgICByZXR1cm4gY2FjaGUubWF0Y2godGVzdF91cmwpOworICAg
ICAgICB9KS50aGVuKChyZXN1bHQpID0+IHsKKyAgICAgICAgICAgIHRlc3QoKCkgPT4geworICAg
ICAgICAgICAgICAgIGFzc2VydF9yZXNwb25zZV9lcXVhbHMocmVzdWx0LCBmaXJzdF9yZXNwb25z
ZSwgIkNhY2hlLnB1dCBzaG91bGQgc3RvcmUgdGhlIHJlc3BvbnNlIHBlcnNpc3RlbnRseSIpOwor
ICAgICAgICAgICAgfSwgIkNoZWNraW5nIHBlcnNpc3RlbmN5IG9mIHJlc3BvbnNlIik7CisgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0LnRleHQoKTsKKyAgICAgICAgfSkudGhlbigoYm9keSkgPT4g
eworICAgICAgICAgICAgdGVzdCgoKSA9PiB7CisgICAgICAgICAgICAgICAgYXNzZXJ0X2VxdWFs
cyhib2R5LCAiT2xkIGJvZHkiLCAiQ2FjaGUgcHV0IHNob3VsZCBzdG9yZSB0aGUgcmVzcG9uc2Ug
Ym9keSBwZXJzaXN0ZW50bHkuIik7CisgICAgICAgICAgICB9LCAiQ2hlY2tpbmcgcGVyc2lzdGVu
Y3kgb2YgcmVzcG9uc2UgYm9keSIpOworICAgICAgICB9KTsKKyAgICB9KS50aGVuKCgpID0+IHsK
KyAgICAgICAgcmV0dXJuIGNhY2hlLnB1dCh0ZXN0X3VybCwgYWx0ZXJuYXRlX3Jlc3BvbnNlKTsK
KyAgICB9KS50aGVuKCgpID0+IHsKKyAgICAgICAgcmV0dXJuIGNhY2hlLmtleXMoKTsKKyAgICB9
KS50aGVuKGtleXMgPT4geworICAgICAgICBjYWNoZV9rZXlzID0ga2V5czsKKyAgICAgICAgaWYg
KHdpbmRvdy5pbnRlcm5hbHMpCisgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxzLmNsZWFyQ2Fj
aGVTdG9yYWdlTWVtb3J5UmVwcmVzZW50YXRpb24oKTsKKyAgICB9KS50aGVuKCgpID0+IHsKKyAg
ICAgICAgcmV0dXJuIHNlbGYuY2FjaGVzLm9wZW4oInRlc3QtY2FjaGUtcmVjb3Jkcy1wZXJzaXN0
ZW5jeSIpOworICAgIH0pLnRoZW4oYyA9PiB7CisgICAgICAgIGNhY2hlID0gYzsKKyAgICAgICAg
cmV0dXJuIGNhY2hlLmtleXMoKTsKKyAgICB9KS50aGVuKChrZXlzKSA9PiB7CisgICAgICAgIGFz
c2VydF9yZXF1ZXN0X2FycmF5X2VxdWFscyhrZXlzLCBjYWNoZV9rZXlzKTsKKyAgICB9KS50aGVu
KCgpID0+IHsKKyAgICAgICAgcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgICAgICAgICAgIHJldHVy
biBjYWNoZS5tYXRjaCh0ZXN0X3VybCkudGhlbigocmVzdWx0KSA9PiB7CisgICAgICAgICAgICAg
ICAgYXNzZXJ0X3Jlc3BvbnNlX2VxdWFscyhyZXN1bHQsIGFsdGVybmF0ZV9yZXNwb25zZSwgJ0Nh
Y2hlLnB1dCBzaG91bGQgcmVwbGFjZSBleGlzdGluZyAnICsgJ3Jlc3BvbnNlIHdpdGggbmV3IHJl
c3BvbnNlLicpOworICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQudGV4dCgpOworICAgICAg
ICAgICAgfSkudGhlbigoYm9keSkgPT4geworICAgICAgICAgICAgICAgIGFzc2VydF9lcXVhbHMo
Ym9keSwgIk5ldyBib2R5IiwgJ0NhY2hlIHB1dCBzaG91bGQgc3RvcmUgbmV3IHJlc3BvbnNlIGJv
ZHkuJyk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSwgJ1Rlc3Rpbmcgb3ZlcnJpZGluZyBv
ZiBhbiBleGlzdGluZyBjYWNoZWQgcmVjb3JkIHRoYXQgaXMgbm90IGluIG1lbW9yeScpOworICAg
IH0pOworfSwgJ0NhY2hlLnB1dCBjYWxsZWQgdHdpY2Ugd2l0aCBtYXRjaGluZyBSZXF1ZXN0cyAt
IGtleXMgc2hvdWxkIHJlbWFpbiB0aGUgc2FtZSAtIHRlc3RpbmcgcGVyc2lzdGVuY3knKTsKKwor
cHJvbWlzZV90ZXN0KHRlc3QgPT4geworICAgIHJldHVybiBzZWxmLmNhY2hlcy5rZXlzKCkudGhl
bihrZXlzID0+IHsKKyAgICAgICAgdmFyIHBlbmRpbmcgPSBbXTsKKyAgICAgICAgZm9yIChrZXkg
b2Yga2V5cykKKyAgICAgICAgICAgIHBlbmRpbmcucHVzaChzZWxmLmNhY2hlcy5kZWxldGUoa2V5
c1swXSkpOworICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocGVuZGluZyk7CisgICAgfSk7Cit9
LCAiQ2xlYW5pbmcgY3JlYXRlZCBjYWNoZXMiKTsKKyAgICA8L3NjcmlwdD4KKzwvYm9keT4KKzwv
aHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>320774</attachid>
            <date>2017-09-14 09:05:04 -0700</date>
            <delta_ts>2017-09-14 11:09:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-176845-20170914090503.patch</filename>
            <type>text/plain</type>
            <size>55771</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIxOTk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDBiNGM1Y2Q2NGM0YzdhNzdl
Y2Y2YmY0MGY5ZDBhNTFkYWVjNTMzNzIuLmE3ZmFkNjEwMmQwY2FkZDE3MmRhZGUxMmZhMzdkYzc0
ZGJiNzM4MjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTA1IEBACiAyMDE3LTA5LTEzICBZb3Vlbm4g
RmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAorICAgICAgICBBZGQgQ2FjaGUgQVBJIHN1cHBv
cnQgb2YgcmVjb3JkcyBwZXJzaXN0ZW5jeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTc2ODQ1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgSW50cm9kdWNpbmcgYXN5bmNocm9ub3VzIG9wZW5pbmcgb2YgQ2Fj
aGUgb2JqZWN0cy4KKyAgICAgICAgV2hlbiBvcGVuaW5nLCBDYWNoZSBvYmplY3RzIHdpbGwgcmVh
ZCB0aGUgbGlzdCBvZiByZWNvcmRzIGZyb20gdGhlIGRpc2suCisgICAgICAgIFRoZXkga2VlcCBp
biBtZW1vcnkgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiB0byBtYWtlIGFueSBtYXRjaCBvciBy
ZW1vdmUgcmVxdWVzdCB3aXRob3V0IHJlYWRpbmcgZnVydGhlciBpbmZvcm1hdGlvbiBmcm9tIHRo
ZSBkaXNrLgorICAgICAgICBDYWNoZSBvYmplY3RzIHRodXMga2VlcCBkdXJpbmcgdGhlIG9wZW5p
bmcgdGltZSBhIGxpc3Qgb2YgY2FsbGJhY2tzIHRvIGNhbGwgd2hlbiBiZWluZyBvcGVuZWQuCisg
ICAgICAgIFBlcnNpc3RlbnQgc3RvcmFnZSBpcyBpbXBsZW1lbnRlZCB0aHJvdWdoIE5ldHdvcmtD
YWNoZTo6U3RvcmFnZS4KKworICAgICAgICBBIENhY2hlIG9iamVjdCBpcyBhZGRlZCBhIHVuaXF1
ZSBuYW1lIHNvIHRoYXQgcmVjb3JkcyBmcm9tIGEgQ2FjaGUgY2Fubm90IGJlIG1peGVkIHdpdGgg
cmVjb3JkcyBmcm9tIGFub3RoZXIgQ2FjaGUuCisgICAgICAgIFRoaXMgdW5pcXVlIG5hbWUgaXMg
c3RvcmVkIHBlcnNpc3Rlbmx5IGluIGFkZGl0aW9uIHRvIHRoZSBDYWNoZSBuYW1lLgorICAgICAg
ICBUaGlzIHVuaXF1ZSBuYW1lIGlzIHVzZWQgYXMgdGhlIGtleSB0eXBlIGdpdmVuIHRvIHRoZSBz
dG9yYWdlLgorCisgICAgICAgIFJlcXVlc3QsIHJlc3BvbnNlIGFuZCByZXNwb25zZWJvZHkgZGF0
YSBhcmUgbm8gbG9uZ2VyIGtlcHQgYnkgdGhlIENhY2hlIG9iamVjdC4KKyAgICAgICAgRm9yIHJl
Z3VsYXIgc2Vzc2lvbnMsIHRoaXMgaW5mb3JtYXRpb24gaXMga2VwdCBvbiB0aGUgZGlzayB0aHJv
dWdoIE5ldHdvcmtDYWNoZTo6U3RvcmFnZS4KKyAgICAgICAgSW5zZXJ0aW9uIHRpbWUgaXMgYWxz
byBzdG9yZWQgcGVyc2lzdGVudGx5IHNvIGFzIHRvIGtlZXAgdGhlIG9yZGVyaW5nIG9mIHRoZSBy
ZWNvcmRzIGNvbnNpc3RlbnQuCisgICAgICAgIEZvciBwcml2YXRlIGJyb3dzaW5nIHNlc3Npb25z
LCB0aGlzIGluZm9ybWF0aW9uIGlzIGtlcHQgaW4gYSBtYXAgb3duZWQgYnkgdGhlIENhY2hlcyBv
YmplY3QuCisgICAgICAgIFJlY29yZERhdGEgaXMgcmVuYW1lZCB0byBSZWNvcmRJbmZvcm1hdGlv
biBhcyBpdCBub3cgb25seSBjb250YWlucyB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBoYW5kbGUg
dGhlIGRpZmZlcmVudCBDYWNoZSBhY3Rpb25zLgorCisgICAgICAgIEZvciBldmVyeSByZWNvcmQg
cmV0cmlldmFsIGFjdGlvbiwgYSBSZWFkUmVjb3JkVGFza0NvdW50ZXIgaXMgdXNlZC4KKyAgICAg
ICAgSXRzIHB1cnBvc2UgaXMgdG8gYWxsb3cgcmV0cmlldmluZyB0aGUgcmVjb3JkIGRhdGEgb24g
dGhlIGRpc2sgaW4gcGFyYWxsZWwsCisgICAgICAgIGFuZCB0aGVuIHNlbmQgYmFjayB0aGUgaW5m
b3JtYXRpb24gd2hlbiBldmVyeXRoaW5nIGlzIHJlYWQuCisgICAgICAgIEluIGNhc2Ugc29tZSBy
ZWNvcmRzIGNhbm5vdCBiZSBjb3JyZWN0bHkgcmVhZCwgdGhleSBhcmUgcmVtb3ZlZCBhdXRvbWF0
aWNhbGx5IGF0IHRoYXQgcG9pbnQuCisgICAgICAgIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9u
IGxvYWRzIGFsbCBpbmZvcm1hdGlvbiBpbiBtZW1vcnkgaW5jbHVkaW5nIHJlc3BvbnNlIGJvZGll
cy4KKyAgICAgICAgRnVydGhlciBpbXByb3ZlbWVudHMgbWlnaHQgY29uc2lkZXIgc3RyZWFtaW5n
IHRoZSByZXNwb25zZSBib2RpZXMgcHJvZ3Jlc3NpdmVseS4KKworICAgICAgICBGb3IgZXZlcnkg
c3RvcmVkIHJlY29yZCwgYW4gQXN5bmNocm9ub3VzUHV0VGFza0NvdW50ZXIgaXMgdXNlZC4KKyAg
ICAgICAgSXRzIHB1cnBvc2UgaXMgYWxzbyB0byB3YWl0IGZvciBhbGwgcHV0IGFjdGlvbnMgdG8g
YmUgY29tcGxldGVkIGJlZm9yZSBleGVjdXRpbmcgdGhlIGNvbXBsZXRpb24gY2FsbGJhY2suCisg
ICAgICAgIEluIHNvbWUgY2FzZXMsIGEgcmVjb3JkIG5lZWRzIHRvIGJlIG92ZXJyaWRlbi4KKyAg
ICAgICAgSW4gdGhhdCBjYXNlLCBhcyBwZXIgdGhlIHNwZWNpZmljYXRpb24sIG9ubHkgdGhlIGRh
dGEgcmVsYXRlZCB0byB0aGUgcmVzcG9uc2UgaXMgdG8gYmUgbW9kaWZpZWQuCisgICAgICAgIFRo
aXMgcmVxdWlyZXMgcmVhZGluZyB0aGUgcmVjb3JkIHJlcXVlc3QgZGF0YSBvbiBkaXNrIGJlZm9y
ZSBhY3R1YWxseSB3cml0aW5nIHRoZSB3aG9sZSByZWNvcmQgYWdhaW4uCisgICAgICAgIFRoaXMg
aXMgaW1wbGVtZW50ZWQgaW4gdXBkYXRlUmVjb3JkVG9EaXNrLgorCisgICAgICAgIFRoZSBDYWNo
ZSBvYmplY3QgaXMgZGVsZWdhdGluZyBhbGwgcmVjb3JkIHdyaXRpbmcvcmVhZGluZyB0YXNrcyB0
byBpdHMgQ2FjaGVzIG9iamVjdC4KKyAgICAgICAgVGhlIENhY2hlcyBvYmplY3QgaXMgcmVzcG9u
c2libGUgdG8gaGFuZGxlIHBlcnNpc3RlbnQvcHJpdmF0ZSBzZXNzaW9ucy4KKworICAgICAgICAq
IE5ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OkNhY2hlU3RvcmFnZTo6RW5naW5lOjpyZXRyaWV2ZVJlY29yZHMpOiBNYWtpbmcgc3Vy
ZSBDYWNoZSBvYmplY3QgaXMgb3BlbmVkLgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6
OkVuZ2luZTo6cmVhZENhY2hlKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFn
ZTo6RW5naW5lOjp1bmxvY2spOiBEaXNwb3NpbmcgdGhlIGNhY2hlIHdpdGhvdXQgZ29pbmcgdGhy
b3VnaCBpbml0aWFsaXppbmcgaXQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2Fj
aGVTdG9yYWdlRW5naW5lQ2FjaGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6
OmNvbXB1dGVLZXlVUkwpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OnF1ZXJ5Q2Fj
aGUpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OnVwZGF0ZVZhcnlJbmZvcm1hdGlv
bik6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OnRvUmVjb3JkSW5mb3Jt
YXRpb24pOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjpDYWNoZSk6Cisg
ICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6Om9wZW4pOgorICAgICAgICAoV2Vi
S2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjpmaW5pc2hPcGVuaW5nKToKKyAgICAgICAgKFdlYktp
dDo6Q2FjaGVTdG9yYWdlOjpSZWFkUmVjb3JkVGFza0NvdW50ZXI6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6UmVhZFJlY29yZFRhc2tDb3VudGVyOjp+UmVhZFJlY29y
ZFRhc2tDb3VudGVyKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpSZWFkUmVjb3Jk
VGFza0NvdW50ZXI6OmFwcGVuZFJlY29yZCk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFn
ZTo6UmVhZFJlY29yZFRhc2tDb3VudGVyOjpSZWFkUmVjb3JkVGFza0NvdW50ZXIpOgorICAgICAg
ICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjpyZXRyaWV2ZVJlY29yZCk6CisgICAgICAg
IChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OnJldHJpZXZlUmVjb3Jkcyk6CisgICAgICAg
IChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OmFkZFJlY29yZCk6CisgICAgICAgIChXZWJL
aXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OnJlY29yZHNGcm9tVVJMKToKKyAgICAgICAgKFdlYktp
dDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6cmVjb3Jkc0Zyb21VUkwgY29uc3QpOgorICAgICAgICAo
V2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkFzeW5jaHJvbm91c1B1dFRhc2tDb3VudGVyOjpjcmVhdGUp
OgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkFzeW5jaHJvbm91c1B1dFRhc2tDb3Vu
dGVyOjp+QXN5bmNocm9ub3VzUHV0VGFza0NvdW50ZXIpOgorICAgICAgICAoV2ViS2l0OjpDYWNo
ZVN0b3JhZ2U6OkFzeW5jaHJvbm91c1B1dFRhc2tDb3VudGVyOjpvbkNvbXBsZXRpb24pOgorICAg
ICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkFzeW5jaHJvbm91c1B1dFRhc2tDb3VudGVyOjpz
ZXRFcnJvcik6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OnB1dCk6Cisg
ICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OnJlbW92ZSk6CisgICAgICAgIChX
ZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OnJlbW92ZUZyb21SZWNvcmRMaXN0KToKKyAgICAg
ICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6d3JpdGVSZWNvcmRUb0Rpc2spOgorICAg
ICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjp1cGRhdGVSZWNvcmRUb0Rpc2spOgor
ICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjpyZWFkUmVjb3JkRnJvbURpc2sp
OgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjpyZW1vdmVSZWNvcmRGcm9t
RGlzayk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OmVuY29kZSk6Cisg
ICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6ZGVjb2RlUmVjb3JkSGVhZGVyKToKKyAgICAg
ICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6ZGVjb2RlKToKKyAgICAgICAgKFdlYktp
dDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6a2V5cyBjb25zdCk6CisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUuaDoKKyAgICAgICAgKFdlYktpdDo6
Q2FjaGVTdG9yYWdlOjpDYWNoZTo6aXNPcGVuZWQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpD
YWNoZVN0b3JhZ2U6OkNhY2hlOjp1bmlxdWVOYW1lIGNvbnN0KToKKyAgICAgICAgKiBOZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJLaXQ6
OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjpvcGVuKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9y
YWdlOjpDYWNoZXM6OnJlbW92ZSk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2Fj
aGVzOjpkaXNwb3NlKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjplbmNvZGVDYWNo
ZU5hbWVzKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpkZWNvZGVDYWNoZXNOYW1l
cyk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjpyZWFkQ2FjaGVzRnJv
bURpc2spOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6cmVhZFJlY29y
ZHNMaXN0KToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6OndyaXRlUmVj
b3JkKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6OnJlYWRSZWNvcmQp
OgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6cmVtb3ZlUmVjb3JkKToK
KyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6OmNsZWFyTWVtb3J5UmVwcmVz
ZW50YXRpb24pOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6c2FsdCBj
b25zdCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5l
Q2FjaGVzLmg6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjpzaG91bGRQ
ZXJzaXN0IGNvbnN0KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVTdG9yYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpTdG9yYWdlOjpz
dG9yZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFn
ZS5oOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlN0b3JhZ2U6OndyaXRlV2l0aG91
dFdhaXRpbmcpOgorCisyMDE3LTA5LTEzICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNv
bT4KKwogICAgICAgICBJbnRlcm5hbHMgY2xlYXJDYWNoZVN0b3JhZ2VNZW1vcnlSZXByZXNlbnRh
dGlvbiBzaG91bGQgcmV0dXJuIGEgUHJvbWlzZQogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc2ODE4CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lLmNwcCBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lLmNwcAppbmRleCA1ODMy
YzFhMTE3OTVlOWZjZDhiMmYxN2FiOGNmNTdmNmZlZmNjMzBiLi40MDhmNjJiMWNjYjRmZmI4M2U5
ZWExNzk4NmQzNmQwNGQzZjk5ZTIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmUuY3BwCkBAIC0xMzIsOCArMTMy
LDcgQEAgdm9pZCBFbmdpbmU6OnJldHJpZXZlUmVjb3Jkcyh1aW50NjRfdCBjYWNoZUlkZW50aWZp
ZXIsIFdlYkNvcmU6OlVSTCYmIHVybCwgUmVjb3IKICAgICAgICAgICAgIGNhbGxiYWNrKG1ha2VV
bmV4cGVjdGVkKHJlc3VsdC5lcnJvcigpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KLQotICAgICAgICBjYWxsYmFjayhyZXN1bHQudmFsdWUoKS5nZXQoKS5yZXRyaWV2ZVJlY29y
ZHModXJsKSk7CisgICAgICAgIHJlc3VsdC52YWx1ZSgpLmdldCgpLnJldHJpZXZlUmVjb3Jkcyh1
cmwsIFdURk1vdmUoY2FsbGJhY2spKTsKICAgICB9KTsKIH0KIApAQCAtMjE3LDEyICsyMTYsMjgg
QEAgdm9pZCBFbmdpbmU6OnJlYWRDYWNoZXNGcm9tRGlzayhjb25zdCBTdHJpbmcmIG9yaWdpbiwg
Q2FjaGVzQ2FsbGJhY2smJiBjYWxsYmFjaykKIAogdm9pZCBFbmdpbmU6OnJlYWRDYWNoZSh1aW50
NjRfdCBjYWNoZUlkZW50aWZpZXIsIENhY2hlQ2FsbGJhY2smJiBjYWxsYmFjaykKIHsKLSAgICAv
LyBGSVhNRTogSW1wbGVtZW50IHJlYWRpbmcuCiAgICAgYXV0byogY2FjaGUgPSB0aGlzLT5jYWNo
ZShjYWNoZUlkZW50aWZpZXIpOwogICAgIGlmICghY2FjaGUpIHsKICAgICAgICAgY2FsbGJhY2so
bWFrZVVuZXhwZWN0ZWQoRXJyb3I6OkludGVybmFsKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CisgICAgaWYgKCFjYWNoZS0+aXNPcGVuZWQoKSkgeworICAgICAgICBjYWNoZS0+b3BlbihbdGhp
cywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjYWNoZUlkZW50aWZpZXIsIGNhbGxi
YWNrID0gV1RGTW92ZShjYWxsYmFjayldKHN0ZDo6b3B0aW9uYWw8RXJyb3I+JiYgZXJyb3IpIG11
dGFibGUgeworICAgICAgICAgICAgaWYgKGVycm9yKSB7CisgICAgICAgICAgICAgICAgY2FsbGJh
Y2sobWFrZVVuZXhwZWN0ZWQoZXJyb3IudmFsdWUoKSkpOworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYXV0byogY2FjaGUgPSB0aGlzLT5jYWNo
ZShjYWNoZUlkZW50aWZpZXIpOworICAgICAgICAgICAgaWYgKCFjYWNoZSkgeworICAgICAgICAg
ICAgICAgIGNhbGxiYWNrKG1ha2VVbmV4cGVjdGVkKEVycm9yOjpJbnRlcm5hbCkpOworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFTU0VSVChjYWNo
ZS0+aXNPcGVuZWQoKSk7CisgICAgICAgICAgICBjYWxsYmFjayhzdGQ6OnJlZmVyZW5jZV93cmFw
cGVyPENhY2hlPiB7ICpjYWNoZSB9KTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CiAgICAgY2FsbGJhY2soc3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxDYWNoZT4geyAqY2FjaGUg
fSk7CiB9CiAKQEAgLTMyOCwxMiArMzQzLDExIEBAIHZvaWQgRW5naW5lOjp1bmxvY2sodWludDY0
X3QgY2FjaGVJZGVudGlmaWVyKQogICAgIGlmICgtLWxvY2tDb3VudC0+dmFsdWUpCiAgICAgICAg
IHJldHVybjsKIAotICAgIHJlYWRDYWNoZShjYWNoZUlkZW50aWZpZXIsIFt0aGlzXShDYWNoZU9y
RXJyb3ImJiByZXN1bHQpIG11dGFibGUgewotICAgICAgICBpZiAoIXJlc3VsdC5oYXNWYWx1ZSgp
KQotICAgICAgICAgICAgcmV0dXJuOworICAgIGF1dG8qIGNhY2hlID0gdGhpcy0+Y2FjaGUoY2Fj
aGVJZGVudGlmaWVyKTsKKyAgICBpZiAoIWNhY2hlKQorICAgICAgICByZXR1cm47CiAKLSAgICAg
ICAgcmVzdWx0LnZhbHVlKCkuZ2V0KCkuZGlzcG9zZSgpOwotICAgIH0pOworICAgIGNhY2hlLT5k
aXNwb3NlKCk7CiB9CiAKIFN0cmluZyBFbmdpbmU6OnJlcHJlc2VudGF0aW9uKCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5l
Q2FjaGUuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3Jh
Z2VFbmdpbmVDYWNoZS5jcHAKaW5kZXggNDgxYWRkN2VjY2IxYzVhMjUyM2VlYWY4MmI2NjRiNzNk
ZmVhNjg1ZS4uMTU5ZjdjYjEzZTZlNTRhMDFkMWM4ZDJmZGE3NzQ0OTk2MGQzNDU4ZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdp
bmVDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNo
ZVN0b3JhZ2VFbmdpbmVDYWNoZS5jcHAKQEAgLTI3LDE1ICsyNywxNiBAQAogI2luY2x1ZGUgIkNh
Y2hlU3RvcmFnZUVuZ2luZS5oIgogCiAjaW5jbHVkZSAiQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVz
LmgiCisjaW5jbHVkZSAiTmV0d29ya0NhY2hlQ29kZXJzLmgiCiAjaW5jbHVkZSAiTmV0d29ya0Nh
Y2hlSU9DaGFubmVsLmgiCiAjaW5jbHVkZSAiTmV0d29ya0NhY2hlS2V5LmgiCiAjaW5jbHVkZSAi
TmV0d29ya1Byb2Nlc3MuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0NhY2hlUXVlcnlPcHRpb25zLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9IVFRQUGFyc2Vycy5oPgogI2luY2x1ZGUgPHBhbC9TZXNzaW9u
SUQuaD4KLSNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvTWFpblRo
cmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9V
VUlELmg+CiAjaW5jbHVkZSA8d3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuaD4KICNp
bmNsdWRlIDx3dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudERlY29kZXIuaD4KICNpbmNsdWRlIDx3
dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudEVuY29kZXIuaD4KQEAgLTUxLDcgKzUyLDE4IEBAIG5h
bWVzcGFjZSBXZWJLaXQgewogCiBuYW1lc3BhY2UgQ2FjaGVTdG9yYWdlIHsKIAotc3RhdGljIGlu
bGluZSBWZWN0b3I8dWludDY0X3Q+IHF1ZXJ5Q2FjaGUoY29uc3QgVmVjdG9yPFJlY29yZERhdGE+
KiByZWNvcmRzLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IENhY2hlUXVl
cnlPcHRpb25zJiBvcHRpb25zKQorc3RhdGljIHN0ZDo6b3B0aW9uYWw8c3RkOjpwYWlyPFJlY29y
ZCwgZG91YmxlPj4gZGVjb2RlUmVjb3JkSGVhZGVyKGNvbnN0IFN0b3JhZ2U6OlJlY29yZCYpOwor
CitzdGF0aWMgaW5saW5lIFN0cmluZyBjb21wdXRlS2V5VVJMKGNvbnN0IFVSTCYgdXJsKQorewor
ICAgIFVSTCBrZXlVUkwgPSB1cmw7CisgICAgaWYgKGtleVVSTC5oYXNRdWVyeSgpKQorICAgICAg
ICBrZXlVUkwuc2V0UXVlcnkoeyB9KTsKKyAgICBrZXlVUkwucmVtb3ZlRnJhZ21lbnRJZGVudGlm
aWVyKCk7CisgICAgcmV0dXJuIGtleVVSTDsKK30KKworc3RhdGljIGlubGluZSBWZWN0b3I8dWlu
dDY0X3Q+IHF1ZXJ5Q2FjaGUoY29uc3QgVmVjdG9yPFJlY29yZEluZm9ybWF0aW9uPiogcmVjb3Jk
cywgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBDYWNoZVF1ZXJ5T3B0aW9u
cyYgb3B0aW9ucykKIHsKICAgICBpZiAoIXJlY29yZHMpCiAgICAgICAgIHJldHVybiB7IH07CkBA
IC02Nyw0NyArNzksNDIgQEAgc3RhdGljIGlubGluZSBWZWN0b3I8dWludDY0X3Q+IHF1ZXJ5Q2Fj
aGUoY29uc3QgVmVjdG9yPFJlY29yZERhdGE+KiByZWNvcmRzLCBjb24KICAgICByZXR1cm4gcmVz
dWx0czsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZVZhcnlJbmZvcm1hdGlvbihSZWNv
cmREYXRhJiByZWNvcmREYXRhKQorc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZVZhcnlJbmZvcm1h
dGlvbihSZWNvcmRJbmZvcm1hdGlvbiYgcmVjb3JkSW5mb3JtYXRpb24sIGNvbnN0IFJlc291cmNl
UmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7Ci0g
ICAgYXV0byB2YXJ5VmFsdWUgPSByZWNvcmREYXRhLmRhdGEtPnJlc3BvbnNlLmh0dHBIZWFkZXJG
aWVsZChXZWJDb3JlOjpIVFRQSGVhZGVyTmFtZTo6VmFyeSk7CisgICAgYXV0byB2YXJ5VmFsdWUg
PSByZXNwb25zZS5odHRwSGVhZGVyRmllbGQoV2ViQ29yZTo6SFRUUEhlYWRlck5hbWU6OlZhcnkp
OwogICAgIGlmICh2YXJ5VmFsdWUuaXNOdWxsKCkpIHsKLSAgICAgICAgcmVjb3JkRGF0YS5oYXNW
YXJ5U3RhciA9IGZhbHNlOwotICAgICAgICByZWNvcmREYXRhLnZhcnlIZWFkZXJzID0geyB9Owor
ICAgICAgICByZWNvcmRJbmZvcm1hdGlvbi5oYXNWYXJ5U3RhciA9IGZhbHNlOworICAgICAgICBy
ZWNvcmRJbmZvcm1hdGlvbi52YXJ5SGVhZGVycyA9IHsgfTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAogICAgIHZhcnlWYWx1ZS5zcGxpdCgnLCcsIGZhbHNlLCBbJl0oU3RyaW5nVmlldyB2aWV3
KSB7Ci0gICAgICAgIGlmICghcmVjb3JkRGF0YS5oYXNWYXJ5U3RhciAmJiBzdHJpcExlYWRpbmdB
bmRUcmFpbGluZ0hUVFBTcGFjZXModmlldykgPT0gIioiKQotICAgICAgICAgICAgcmVjb3JkRGF0
YS5oYXNWYXJ5U3RhciA9IHRydWU7CisgICAgICAgIGlmICghcmVjb3JkSW5mb3JtYXRpb24uaGFz
VmFyeVN0YXIgJiYgc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVFRQU3BhY2VzKHZpZXcpID09ICIq
IikKKyAgICAgICAgICAgIHJlY29yZEluZm9ybWF0aW9uLmhhc1ZhcnlTdGFyID0gdHJ1ZTsKICAg
ICAgICAgU3RyaW5nIGhlYWRlck5hbWUgPSB2aWV3LnRvU3RyaW5nKCk7Ci0gICAgICAgIHJlY29y
ZERhdGEudmFyeUhlYWRlcnMuYWRkKGhlYWRlck5hbWUsIHJlY29yZERhdGEuZGF0YS0+cmVxdWVz
dC5odHRwSGVhZGVyRmllbGQoaGVhZGVyTmFtZSkpOworICAgICAgICByZWNvcmRJbmZvcm1hdGlv
bi52YXJ5SGVhZGVycy5hZGQoaGVhZGVyTmFtZSwgcmVxdWVzdC5odHRwSGVhZGVyRmllbGQoaGVh
ZGVyTmFtZSkpOwogICAgIH0pOwogCi0gICAgaWYgKHJlY29yZERhdGEuaGFzVmFyeVN0YXIpCi0g
ICAgICAgIHJlY29yZERhdGEudmFyeUhlYWRlcnMgPSB7IH07Ci19Ci0KLXN0YXRpYyBpbmxpbmUg
UmVjb3JkIHRvUmVjb3JkKGNvbnN0IFJlY29yZERhdGEmIHJlY29yZCkKLXsKLSAgICByZXR1cm4g
eyByZWNvcmQuaWRlbnRpZmllciwgcmVjb3JkLnVwZGF0ZVJlc3BvbnNlQ291bnRlciwgcmVjb3Jk
LmRhdGEtPnJlcXVlc3RIZWFkZXJzR3VhcmQsIHJlY29yZC5kYXRhLT5yZXF1ZXN0LCByZWNvcmQu
ZGF0YS0+b3B0aW9ucywgcmVjb3JkLmRhdGEtPnJlZmVycmVyLCByZWNvcmQuZGF0YS0+cmVzcG9u
c2VIZWFkZXJzR3VhcmQsIHJlY29yZC5kYXRhLT5yZXNwb25zZSwgY29weVJlc3BvbnNlQm9keShy
ZWNvcmQuZGF0YS0+cmVzcG9uc2VCb2R5KSB9OworICAgIGlmIChyZWNvcmRJbmZvcm1hdGlvbi5o
YXNWYXJ5U3RhcikKKyAgICAgICAgcmVjb3JkSW5mb3JtYXRpb24udmFyeUhlYWRlcnMgPSB7IH07
CiB9CiAKLXN0YXRpYyBpbmxpbmUgUmVjb3JkRGF0YSB0b1JlY29yZERhdGEoUmVjb3JkJiYgcmVj
b3JkKQorUmVjb3JkSW5mb3JtYXRpb24gQ2FjaGU6OnRvUmVjb3JkSW5mb3JtYXRpb24oY29uc3Qg
UmVjb3JkJiByZWNvcmQpCiB7Ci0gICAgYXV0byB1cmwgPSByZWNvcmQucmVxdWVzdC51cmwoKTsK
LSAgICBSZWNvcmREYXRhOjpEYXRhIGRhdGEgPSB7IHJlY29yZC5yZXF1ZXN0SGVhZGVyc0d1YXJk
LCBXVEZNb3ZlKHJlY29yZC5yZXF1ZXN0KSwgV1RGTW92ZShyZWNvcmQub3B0aW9ucyksIFdURk1v
dmUocmVjb3JkLnJlZmVycmVyKSwgV1RGTW92ZShyZWNvcmQucmVzcG9uc2VIZWFkZXJzR3VhcmQp
LCBXVEZNb3ZlKHJlY29yZC5yZXNwb25zZSksIFdURk1vdmUocmVjb3JkLnJlc3BvbnNlQm9keSkg
fTsKLSAgICBSZWNvcmREYXRhIHJlY29yZERhdGEgPSB7IHsgfSwgbW9ub3RvbmljYWxseUluY3Jl
YXNpbmdUaW1lTVMoKSwgcmVjb3JkLmlkZW50aWZpZXIsIDAsIHVybCwgZmFsc2UsIHsgfSwgV1RG
TW92ZShkYXRhKSB9OworICAgIEtleSBrZXkgeyBBU0NJSUxpdGVyYWwoInJlY29yZCIpLCBtX3Vu
aXF1ZU5hbWUsIHsgfSwgY3JlYXRlQ2Fub25pY2FsVVVJRFN0cmluZygpLCBtX2NhY2hlcy5zYWx0
KCkgfTsKKyAgICBSZWNvcmRJbmZvcm1hdGlvbiByZWNvcmRJbmZvcm1hdGlvbiB7IFdURk1vdmUo
a2V5KSwgbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lTVMoKSwgcmVjb3JkLmlkZW50aWZpZXIs
IDAgLCByZWNvcmQucmVxdWVzdC51cmwoKSwgZmFsc2UsIHsgfSB9OwogCi0gICAgdXBkYXRlVmFy
eUluZm9ybWF0aW9uKHJlY29yZERhdGEpOworICAgIHVwZGF0ZVZhcnlJbmZvcm1hdGlvbihyZWNv
cmRJbmZvcm1hdGlvbiwgcmVjb3JkLnJlcXVlc3QsIHJlY29yZC5yZXNwb25zZSk7CiAKLSAgICBy
ZXR1cm4gcmVjb3JkRGF0YTsKKyAgICByZXR1cm4gcmVjb3JkSW5mb3JtYXRpb247CiB9CiAKLUNh
Y2hlOjpDYWNoZShDYWNoZXMmIGNhY2hlcywgdWludDY0X3QgaWRlbnRpZmllciwgU3RhdGUgc3Rh
dGUsIFN0cmluZyYmIG5hbWUpCitDYWNoZTo6Q2FjaGUoQ2FjaGVzJiBjYWNoZXMsIHVpbnQ2NF90
IGlkZW50aWZpZXIsIFN0YXRlIHN0YXRlLCBTdHJpbmcmJiBuYW1lLCBTdHJpbmcmJiB1bmlxdWVO
YW1lKQogICAgIDogbV9jYWNoZXMoY2FjaGVzKQogICAgICwgbV9zdGF0ZShzdGF0ZSkKICAgICAs
IG1faWRlbnRpZmllcihpZGVudGlmaWVyKQogICAgICwgbV9uYW1lKFdURk1vdmUobmFtZSkpCisg
ICAgLCBtX3VuaXF1ZU5hbWUoV1RGTW92ZSh1bmlxdWVOYW1lKSkKIHsKIH0KIApAQCAtMTIyLDcg
KzEyOSwxNSBAQCB2b2lkIENhY2hlOjpjbGVhck1lbW9yeVJlcHJlc2VudGF0aW9uKCkKICAgICBt
X25leHRSZWNvcmRJZGVudGlmaWVyID0gMDsKICAgICBtX3N0YXRlID0gU3RhdGU6OlVuaW5pdGlh
bGl6ZWQ7CiB9Ci0gCisKK3N0cnVjdCBUcmF2ZXJzYWxSZXN1bHQgeworICAgIFJlZjxDYWNoZXM+
IGNhY2hlczsKKyAgICB1aW50NjRfdCBjYWNoZUlkZW50aWZpZXI7CisgICAgQ29tcGxldGlvbkNh
bGxiYWNrIGNhbGxiYWNrOworICAgIEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8UmVjb3JkSW5mb3Jt
YXRpb24+PiByZWNvcmRzOworICAgIFZlY3RvcjxLZXk+IGZhaWxlZFJlY29yZHM7Cit9OworCiB2
b2lkIENhY2hlOjpvcGVuKENvbXBsZXRpb25DYWxsYmFjayYmIGNhbGxiYWNrKQogewogICAgIGlm
IChtX3N0YXRlID09IFN0YXRlOjpPcGVuKSB7CkBAIC0xMzQsMTggKzE0OSw1NCBAQCB2b2lkIENh
Y2hlOjpvcGVuKENvbXBsZXRpb25DYWxsYmFjayYmIGNhbGxiYWNrKQogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIG1fc3RhdGUgPSBTdGF0ZTo6T3BlbmluZzsKLSAgICByZWFkUmVjb3Jkc0xp
c3QoW2NhY2hlcyA9IG1ha2VSZWYobV9jYWNoZXMpLCBpZGVudGlmaWVyID0gbV9pZGVudGlmaWVy
LCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShzdGQ6Om9wdGlvbmFsPEVycm9yPiYmIGVy
cm9yKSBtdXRhYmxlIHsKLSAgICAgICAgYXV0byogY2FjaGUgPSBjYWNoZXMtPmZpbmQoaWRlbnRp
Zmllcik7Ci0gICAgICAgIGlmICghY2FjaGUpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKEVycm9y
OjpJbnRlcm5hbCk7CisgICAgVHJhdmVyc2FsUmVzdWx0IHRyYXZlcnNhbFJlc3VsdCB7IG1ha2VS
ZWYobV9jYWNoZXMpLCBtX2lkZW50aWZpZXIsIFdURk1vdmUoY2FsbGJhY2spLCB7IH0sIHsgfSB9
OworICAgIG1fY2FjaGVzLnJlYWRSZWNvcmRzTGlzdCgqdGhpcywgW3RyYXZlcnNhbFJlc3VsdCA9
IFdURk1vdmUodHJhdmVyc2FsUmVzdWx0KV0oY29uc3QgYXV0byogc3RvcmFnZVJlY29yZCwgY29u
c3QgYXV0byYpIG11dGFibGUgeworICAgICAgICBpZiAoIXN0b3JhZ2VSZWNvcmQpIHsKKyAgICAg
ICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbdHJhdmVyc2FsUmVzdWx0ID0gV1RGTW92
ZSh0cmF2ZXJzYWxSZXN1bHQpXSgpIG11dGFibGUgeworICAgICAgICAgICAgICAgIGZvciAoYXV0
byYga2V5IDogdHJhdmVyc2FsUmVzdWx0LmZhaWxlZFJlY29yZHMpCisgICAgICAgICAgICAgICAg
ICAgIHRyYXZlcnNhbFJlc3VsdC5jYWNoZXMtPnJlbW92ZVJlY29yZChrZXkpOworCisgICAgICAg
ICAgICAgICAgYXV0byogY2FjaGUgPSB0cmF2ZXJzYWxSZXN1bHQuY2FjaGVzLT5maW5kKHRyYXZl
cnNhbFJlc3VsdC5jYWNoZUlkZW50aWZpZXIpOworICAgICAgICAgICAgICAgIGlmICghY2FjaGUp
IHsKKyAgICAgICAgICAgICAgICAgICAgdHJhdmVyc2FsUmVzdWx0LmNhbGxiYWNrKEVycm9yOjpJ
bnRlcm5hbCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgY2FjaGUtPm1fcmVjb3JkcyA9IFdURk1vdmUodHJhdmVyc2FsUmVz
dWx0LnJlY29yZHMpOworICAgICAgICAgICAgICAgIGNhY2hlLT5maW5pc2hPcGVuaW5nKFdURk1v
dmUodHJhdmVyc2FsUmVzdWx0LmNhbGxiYWNrKSwgc3RkOjpudWxsb3B0KTsKKyAgICAgICAgICAg
IH0pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGNhY2hlLT5maW5p
c2hPcGVuaW5nKFdURk1vdmUoY2FsbGJhY2spLCBXVEZNb3ZlKGVycm9yKSk7CisKKyAgICAgICAg
YXV0byBkZWNvZGVkID0gZGVjb2RlUmVjb3JkSGVhZGVyKCpzdG9yYWdlUmVjb3JkKTsKKyAgICAg
ICAgaWYgKCFkZWNvZGVkKSB7CisgICAgICAgICAgICB0cmF2ZXJzYWxSZXN1bHQuZmFpbGVkUmVj
b3Jkcy5hcHBlbmQoc3RvcmFnZVJlY29yZC0+a2V5KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIGF1dG8mIHJlY29yZCA9IGRlY29kZWQtPmZpcnN0OworICAgICAg
ICBhdXRvIGluc2VydGlvblRpbWUgPSBkZWNvZGVkLT5zZWNvbmQ7CisKKyAgICAgICAgUmVjb3Jk
SW5mb3JtYXRpb24gcmVjb3JkSW5mb3JtYXRpb24geyBzdG9yYWdlUmVjb3JkLT5rZXksIGluc2Vy
dGlvblRpbWUsIDAsIDAsIHJlY29yZC5yZXF1ZXN0LnVybCgpLCBmYWxzZSwgeyB9IH07CisgICAg
ICAgIHVwZGF0ZVZhcnlJbmZvcm1hdGlvbihyZWNvcmRJbmZvcm1hdGlvbiwgcmVjb3JkLnJlcXVl
c3QsIHJlY29yZC5yZXNwb25zZSk7CisKKyAgICAgICAgYXV0byYgc2FtZVVSTFJlY29yZHMgPSB0
cmF2ZXJzYWxSZXN1bHQucmVjb3Jkcy5lbnN1cmUoY29tcHV0ZUtleVVSTChyZWNvcmRJbmZvcm1h
dGlvbi51cmwpLCBbXSB7IHJldHVybiBWZWN0b3I8UmVjb3JkSW5mb3JtYXRpb24+IHsgfTsgfSku
aXRlcmF0b3ItPnZhbHVlOworICAgICAgICBzYW1lVVJMUmVjb3Jkcy5hcHBlbmQoV1RGTW92ZShy
ZWNvcmRJbmZvcm1hdGlvbikpOwogICAgIH0pOwogfQogCiB2b2lkIENhY2hlOjpmaW5pc2hPcGVu
aW5nKENvbXBsZXRpb25DYWxsYmFjayYmIGNhbGxiYWNrLCBzdGQ6Om9wdGlvbmFsPEVycm9yPiYm
IGVycm9yKQogeworICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlY29yZEluZm9y
bWF0aW9uPj4gcmVjb3JkczsKKyAgICBmb3IgKGF1dG8mIHZhbHVlIDogbV9yZWNvcmRzLnZhbHVl
cygpKSB7CisgICAgICAgIGZvciAoYXV0byYgcmVjb3JkIDogdmFsdWUpCisgICAgICAgICAgICBy
ZWNvcmRzLmFwcGVuZChyZWNvcmQpOworICAgIH0KKyAgICBzdGQ6OnNvcnQocmVjb3Jkcy5iZWdp
bigpLCByZWNvcmRzLmVuZCgpLCBbJl0oY29uc3QgYXV0byYgYSwgY29uc3QgYXV0byYgYikgewor
ICAgICAgICByZXR1cm4gYS5nZXQoKS5pbnNlcnRpb25UaW1lIDwgYi5nZXQoKS5pbnNlcnRpb25U
aW1lOworICAgIH0pOworICAgIGZvciAoYXV0byYgcmVjb3JkIDogcmVjb3JkcykKKyAgICAgICAg
cmVjb3JkLmdldCgpLmlkZW50aWZpZXIgPSArK21fbmV4dFJlY29yZElkZW50aWZpZXI7CisKICAg
ICBpZiAoZXJyb3IpIHsKICAgICAgICAgbV9zdGF0ZSA9IFN0YXRlOjpVbmluaXRpYWxpemVkOwog
ICAgICAgICBjYWxsYmFjayhlcnJvci52YWx1ZSgpKTsKQEAgLTE2Miw1MiArMjEzLDkyIEBAIHZv
aWQgQ2FjaGU6OmZpbmlzaE9wZW5pbmcoQ29tcGxldGlvbkNhbGxiYWNrJiYgY2FsbGJhY2ssIHN0
ZDo6b3B0aW9uYWw8RXJyb3I+JiYKICAgICAgICAgY2FsbGJhY2soc3RkOjpudWxsb3B0KTsKIH0K
IAotVmVjdG9yPFJlY29yZD4gQ2FjaGU6OnJldHJpZXZlUmVjb3Jkcyhjb25zdCBVUkwmIHVybCkg
Y29uc3QKK2NsYXNzIFJlYWRSZWNvcmRUYXNrQ291bnRlciA6IHB1YmxpYyBUaHJlYWRTYWZlUmVm
Q291bnRlZDxSZWFkUmVjb3JkVGFza0NvdW50ZXI+IHsKK3B1YmxpYzoKKyAgICB1c2luZyBSZWFk
UmVjb3Jkc0NhbGxiYWNrID0gV1RGOjpGdW5jdGlvbjx2b2lkKFZlY3RvcjxSZWNvcmQ+JiYsIFZl
Y3Rvcjx1aW50NjRfdD4mJik+OworICAgIHN0YXRpYyBSZWZQdHI8UmVhZFJlY29yZFRhc2tDb3Vu
dGVyPiBjcmVhdGUoUmVhZFJlY29yZHNDYWxsYmFjayYmIGNhbGxiYWNrKSB7IHJldHVybiBhZG9w
dFJlZihuZXcgUmVhZFJlY29yZFRhc2tDb3VudGVyKFdURk1vdmUoY2FsbGJhY2spKSk7IH0KKwor
ICAgIH5SZWFkUmVjb3JkVGFza0NvdW50ZXIoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2NhbGxi
YWNrKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBzdGQ6OnNvcnQobV9yZWNvcmRzLmJl
Z2luKCksIG1fcmVjb3Jkcy5lbmQoKSwgWyZdIChjb25zdCBhdXRvJiBhLCBjb25zdCBhdXRvJiBi
KSB7CisgICAgICAgICAgICByZXR1cm4gYS5pZGVudGlmaWVyIDwgYi5pZGVudGlmaWVyOworICAg
ICAgICB9KTsKKyAgICAgICAgbV9jYWxsYmFjayhXVEZNb3ZlKG1fcmVjb3JkcyksIFdURk1vdmUo
bV9mYWlsZWRSZWNvcmRzKSk7CisgICAgfQorCisgICAgdm9pZCBhcHBlbmRSZWNvcmQoRXhwZWN0
ZWQ8UmVjb3JkLCBFcnJvcj4mJiByZXN1bHQsIHVpbnQ2NF90IHJlY29yZElkZW50aWZpZXIsIHVp
bnQ2NF90IHVwZGF0ZUNvdW50ZXIpCisgICAgeworICAgICAgICBpZiAoIXJlc3VsdC5oYXNWYWx1
ZSgpKSB7CisgICAgICAgICAgICBtX2ZhaWxlZFJlY29yZHMuYXBwZW5kKHJlY29yZElkZW50aWZp
ZXIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHJlc3VsdC52YWx1
ZSgpLmlkZW50aWZpZXIgPSByZWNvcmRJZGVudGlmaWVyOworICAgICAgICByZXN1bHQudmFsdWUo
KS51cGRhdGVSZXNwb25zZUNvdW50ZXIgPSB1cGRhdGVDb3VudGVyOworICAgICAgICBtX3JlY29y
ZHMuYXBwZW5kKFdURk1vdmUocmVzdWx0LnZhbHVlKCkpKTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgZXhwbGljaXQgUmVhZFJlY29yZFRhc2tDb3VudGVyKFJlYWRSZWNvcmRzQ2FsbGJhY2smJiBj
YWxsYmFjaykKKyAgICAgICAgOiBtX2NhbGxiYWNrKFdURk1vdmUoY2FsbGJhY2spKQorICAgIHsK
KyAgICB9CisKKyAgICBSZWFkUmVjb3Jkc0NhbGxiYWNrIG1fY2FsbGJhY2s7CisgICAgVmVjdG9y
PFJlY29yZD4gbV9yZWNvcmRzOworICAgIFZlY3Rvcjx1aW50NjRfdD4gbV9mYWlsZWRSZWNvcmRz
OworfTsKKwordm9pZCBDYWNoZTo6cmV0cmlldmVSZWNvcmQoY29uc3QgUmVjb3JkSW5mb3JtYXRp
b24mIHJlY29yZCwgUmVmUHRyPFJlYWRSZWNvcmRUYXNrQ291bnRlcj4mIHRhc2tDb3VudGVyKQor
eworICAgIHJlYWRSZWNvcmRGcm9tRGlzayhyZWNvcmQsIFtjYWNoZXMgPSBtYWtlUmVmKG1fY2Fj
aGVzKSwgaWRlbnRpZmllciA9IG1faWRlbnRpZmllciwgcmVjb3JkSWRlbnRpZmllciA9IHJlY29y
ZC5pZGVudGlmaWVyLCB1cGRhdGVDb3VudGVyID0gcmVjb3JkLnVwZGF0ZVJlc3BvbnNlQ291bnRl
ciwgdGFza0NvdW50ZXJdKEV4cGVjdGVkPFJlY29yZCwgRXJyb3I+JiYgcmVzdWx0KSBtdXRhYmxl
IHsKKyAgICAgICAgYXV0byogY2FjaGUgPSBjYWNoZXMtPmZpbmQoaWRlbnRpZmllcik7CisgICAg
ICAgIGlmICghY2FjaGUpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHRhc2tDb3VudGVy
LT5hcHBlbmRSZWNvcmQoV1RGTW92ZShyZXN1bHQpLCByZWNvcmRJZGVudGlmaWVyLCB1cGRhdGVD
b3VudGVyKTsKKyAgICB9KTsKK30KKwordm9pZCBDYWNoZTo6cmV0cmlldmVSZWNvcmRzKGNvbnN0
IFVSTCYgdXJsLCBSZWNvcmRzQ2FsbGJhY2smJiBjYWxsYmFjaykKIHsKKyAgICBBU1NFUlQobV9z
dGF0ZSA9PSBTdGF0ZTo6T3Blbik7CisKKyAgICBhdXRvIHRhc2tDb3VudGVyID0gUmVhZFJlY29y
ZFRhc2tDb3VudGVyOjpjcmVhdGUoW2NhY2hlcyA9IG1ha2VSZWYobV9jYWNoZXMpLCBpZGVudGlm
aWVyID0gbV9pZGVudGlmaWVyLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShWZWN0b3I8
UmVjb3JkPiYmIHJlY29yZHMsIFZlY3Rvcjx1aW50NjRfdD4mJiBmYWlsZWRSZWNvcmRJZGVudGlm
aWVycykgbXV0YWJsZSB7CisgICAgICAgIGF1dG8qIGNhY2hlID0gY2FjaGVzLT5maW5kKGlkZW50
aWZpZXIpOworICAgICAgICBpZiAoY2FjaGUpCisgICAgICAgICAgICBjYWNoZS0+cmVtb3ZlRnJv
bVJlY29yZExpc3QoZmFpbGVkUmVjb3JkSWRlbnRpZmllcnMpOworICAgICAgICBjYWxsYmFjayhX
VEZNb3ZlKHJlY29yZHMpKTsKKyAgICB9KTsKKwogICAgIGlmICh1cmwuaXNOdWxsKCkpIHsKLSAg
ICAgICAgVmVjdG9yPFJlY29yZD4gcmVzdWx0OwogICAgICAgICBmb3IgKGF1dG8mIHJlY29yZHMg
OiBtX3JlY29yZHMudmFsdWVzKCkpIHsKICAgICAgICAgICAgIGZvciAoYXV0byYgcmVjb3JkIDog
cmVjb3JkcykKLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHRvUmVjb3JkKHJlY29yZCkp
OworICAgICAgICAgICAgICAgIHJldHJpZXZlUmVjb3JkKHJlY29yZCwgdGFza0NvdW50ZXIpOwog
ICAgICAgICB9Ci0gICAgICAgIHN0ZDo6c29ydChyZXN1bHQuYmVnaW4oKSwgcmVzdWx0LmVuZCgp
LCBbXShjb25zdCBhdXRvJiBhLCBjb25zdCBhdXRvJiBiKSB7Ci0gICAgICAgICAgICByZXR1cm4g
YS5pZGVudGlmaWVyIDwgYi5pZGVudGlmaWVyOwotICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGNvbnN0IGF1dG8qIHJlY29y
ZHMgPSByZWNvcmRzRnJvbVVSTCh1cmwpOworICAgIGF1dG8qIHJlY29yZHMgPSByZWNvcmRzRnJv
bVVSTCh1cmwpOwogICAgIGlmICghcmVjb3JkcykKLSAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAg
ICAgcmV0dXJuOwogCi0gICAgVmVjdG9yPFJlY29yZD4gcmVzdWx0OwotICAgIHJlc3VsdC5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KHJlY29yZHMtPnNpemUoKSk7CiAgICAgZm9yIChhdXRvJiByZWNv
cmQgOiAqcmVjb3JkcykKLSAgICAgICAgcmVzdWx0LmFwcGVuZCh0b1JlY29yZChyZWNvcmQpKTsK
LSAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXRyaWV2ZVJlY29yZChyZWNvcmQsIHRhc2tD
b3VudGVyKTsKIH0KIAotc3RhdGljIGlubGluZSBTdHJpbmcgY29tcHV0ZUtleVVSTChjb25zdCBV
UkwmIHVybCkKLXsKLSAgICBVUkwga2V5VVJMID0gdXJsOwotICAgIGlmIChrZXlVUkwuaGFzUXVl
cnkoKSkKLSAgICAgICAga2V5VVJMLnNldFF1ZXJ5KHsgfSk7Ci0gICAga2V5VVJMLnJlbW92ZUZy
YWdtZW50SWRlbnRpZmllcigpOwotICAgIHJldHVybiBrZXlVUkw7Ci19Ci0KLVJlY29yZERhdGEm
IENhY2hlOjphZGRSZWNvcmQoVmVjdG9yPFJlY29yZERhdGE+KiByZWNvcmRzLCBSZWNvcmQmJiBy
ZWNvcmQpCitSZWNvcmRJbmZvcm1hdGlvbiYgQ2FjaGU6OmFkZFJlY29yZChWZWN0b3I8UmVjb3Jk
SW5mb3JtYXRpb24+KiByZWNvcmRzLCBjb25zdCBSZWNvcmQmIHJlY29yZCkKIHsKICAgICBpZiAo
IXJlY29yZHMpIHsKICAgICAgICAgYXV0byBrZXkgPSBjb21wdXRlS2V5VVJMKHJlY29yZC5yZXF1
ZXN0LnVybCgpKTsKICAgICAgICAgQVNTRVJUKCFtX3JlY29yZHMuY29udGFpbnMoa2V5KSk7Ci0g
ICAgICAgIHJlY29yZHMgPSAmbV9yZWNvcmRzLnNldChrZXksIFZlY3RvcjxSZWNvcmREYXRhPiB7
IH0pLml0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgcmVjb3JkcyA9ICZtX3JlY29yZHMuc2V0KGtl
eSwgVmVjdG9yPFJlY29yZEluZm9ybWF0aW9uPiB7IH0pLml0ZXJhdG9yLT52YWx1ZTsKICAgICB9
Ci0gICAgcmVjb3Jkcy0+YXBwZW5kKHRvUmVjb3JkRGF0YShXVEZNb3ZlKHJlY29yZCkpKTsKKyAg
ICByZWNvcmRzLT5hcHBlbmQodG9SZWNvcmRJbmZvcm1hdGlvbihyZWNvcmQpKTsKICAgICByZXR1
cm4gcmVjb3Jkcy0+bGFzdCgpOwogfQogCi1WZWN0b3I8UmVjb3JkRGF0YT4qIENhY2hlOjpyZWNv
cmRzRnJvbVVSTChjb25zdCBVUkwmIHVybCkKK1ZlY3RvcjxSZWNvcmRJbmZvcm1hdGlvbj4qIENh
Y2hlOjpyZWNvcmRzRnJvbVVSTChjb25zdCBVUkwmIHVybCkKIHsKICAgICBhdXRvIGl0ZXJhdG9y
ID0gbV9yZWNvcmRzLmZpbmQoY29tcHV0ZUtleVVSTCh1cmwpKTsKICAgICBpZiAoaXRlcmF0b3Ig
PT0gbV9yZWNvcmRzLmVuZCgpKQpAQCAtMjE1LDcgKzMwNiw3IEBAIFZlY3RvcjxSZWNvcmREYXRh
PiogQ2FjaGU6OnJlY29yZHNGcm9tVVJMKGNvbnN0IFVSTCYgdXJsKQogICAgIHJldHVybiAmaXRl
cmF0b3ItPnZhbHVlOwogfQogCi1jb25zdCBWZWN0b3I8UmVjb3JkRGF0YT4qIENhY2hlOjpyZWNv
cmRzRnJvbVVSTChjb25zdCBVUkwmIHVybCkgY29uc3QKK2NvbnN0IFZlY3RvcjxSZWNvcmRJbmZv
cm1hdGlvbj4qIENhY2hlOjpyZWNvcmRzRnJvbVVSTChjb25zdCBVUkwmIHVybCkgY29uc3QKIHsK
ICAgICBhdXRvIGl0ZXJhdG9yID0gbV9yZWNvcmRzLmZpbmQoY29tcHV0ZUtleVVSTCh1cmwpKTsK
ICAgICBpZiAoaXRlcmF0b3IgPT0gbV9yZWNvcmRzLmVuZCgpKQpAQCAtMjIzLDkgKzMxNCwzMCBA
QCBjb25zdCBWZWN0b3I8UmVjb3JkRGF0YT4qIENhY2hlOjpyZWNvcmRzRnJvbVVSTChjb25zdCBV
UkwmIHVybCkgY29uc3QKICAgICByZXR1cm4gJml0ZXJhdG9yLT52YWx1ZTsKIH0KIAorY2xhc3Mg
QXN5bmNocm9ub3VzUHV0VGFza0NvdW50ZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxBc3luY2hyb25v
dXNQdXRUYXNrQ291bnRlcj4geworcHVibGljOgorICAgIHN0YXRpYyBSZWZQdHI8QXN5bmNocm9u
b3VzUHV0VGFza0NvdW50ZXI+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBBc3luY2hy
b25vdXNQdXRUYXNrQ291bnRlcik7IH0KKyAgICB+QXN5bmNocm9ub3VzUHV0VGFza0NvdW50ZXIo
KQorICAgIHsKKyAgICAgICAgaWYgKCFtX2NhbGxiYWNrKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICBtX2NhbGxiYWNrKFdURk1vdmUobV9lcnJvcikpOworICAgIH0KKworICAgIHZvaWQg
b25Db21wbGV0aW9uKENvbXBsZXRpb25DYWxsYmFjayYmIGNhbGxiYWNrKSB7IG1fY2FsbGJhY2sg
PSBXVEZNb3ZlKGNhbGxiYWNrKTsgfQorICAgIHZvaWQgc2V0RXJyb3IoRXJyb3IgZXJyb3IpIHsg
bV9lcnJvciA9IGVycm9yOyB9CisKK3ByaXZhdGU6CisgICAgc3RkOjpvcHRpb25hbDxFcnJvcj4g
bV9lcnJvcjsKKyAgICBDb21wbGV0aW9uQ2FsbGJhY2sgbV9jYWxsYmFjazsKK307CisKIHZvaWQg
Q2FjaGU6OnB1dChWZWN0b3I8UmVjb3JkPiYmIHJlY29yZHMsIFJlY29yZElkZW50aWZpZXJzQ2Fs
bGJhY2smJiBjYWxsYmFjaykKIHsKLSAgICBib29sIHNob3VsZFdyaXRlUmVjb3JkTGlzdCB7IGZh
bHNlIH07CisgICAgQVNTRVJUKG1fc3RhdGUgPT0gU3RhdGU6Ok9wZW4pOworCisgICAgYXV0byB0
YXNrQ291bnRlciA9IEFzeW5jaHJvbm91c1B1dFRhc2tDb3VudGVyOjpjcmVhdGUoKTsKKwogICAg
IFdlYkNvcmU6OkNhY2hlUXVlcnlPcHRpb25zIG9wdGlvbnM7CiAgICAgVmVjdG9yPHVpbnQ2NF90
PiByZWNvcmRJZGVudGlmaWVyczsKICAgICByZWNvcmRJZGVudGlmaWVycy5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KHJlY29yZHMuc2l6ZSgpKTsKQEAgLTIzNywzNCArMzQ5LDIxIEBAIHZvaWQgQ2Fj
aGU6OnB1dChWZWN0b3I8UmVjb3JkPiYmIHJlY29yZHMsIFJlY29yZElkZW50aWZpZXJzQ2FsbGJh
Y2smJiBjYWxsYmFjaykKICAgICAgICAgICAgIHJlY29yZC5pZGVudGlmaWVyID0gKyttX25leHRS
ZWNvcmRJZGVudGlmaWVyOwogICAgICAgICAgICAgcmVjb3JkSWRlbnRpZmllcnMudW5jaGVja2Vk
QXBwZW5kKHJlY29yZC5pZGVudGlmaWVyKTsKIAotICAgICAgICAgICAgc2hvdWxkV3JpdGVSZWNv
cmRMaXN0ID0gdHJ1ZTsKLSAgICAgICAgICAgIGF1dG8mIHJlY29yZFRvV3JpdGUgPSBhZGRSZWNv
cmQoc2FtZVVSTFJlY29yZHMsIFdURk1vdmUocmVjb3JkKSk7Ci0gICAgICAgICAgICB3cml0ZVJl
Y29yZFRvRGlzayhyZWNvcmRUb1dyaXRlKTsKKyAgICAgICAgICAgIGF1dG8mIHJlY29yZFRvV3Jp
dGUgPSBhZGRSZWNvcmQoc2FtZVVSTFJlY29yZHMsIHJlY29yZCk7CisgICAgICAgICAgICB3cml0
ZVJlY29yZFRvRGlzayhyZWNvcmRUb1dyaXRlLCBXVEZNb3ZlKHJlY29yZCksIHRhc2tDb3VudGVy
KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGF1dG8gaWRlbnRpZmllciA9IG1hdGNo
aW5nUmVjb3Jkc1swXTsKICAgICAgICAgICAgIGF1dG8gcG9zaXRpb24gPSBzYW1lVVJMUmVjb3Jk
cy0+ZmluZE1hdGNoaW5nKFsmXShjb25zdCBhdXRvJiBpdGVtKSB7IHJldHVybiBpdGVtLmlkZW50
aWZpZXIgPT0gaWRlbnRpZmllcjsgfSk7CiAgICAgICAgICAgICBBU1NFUlQocG9zaXRpb24gIT0g
bm90Rm91bmQpOwogICAgICAgICAgICAgaWYgKHBvc2l0aW9uICE9IG5vdEZvdW5kKSB7Ci0gICAg
ICAgICAgICAgICAgYXV0byYgZXhpc3RpbmdSZWNvcmQgPSAoKnNhbWVVUkxSZWNvcmRzKVtwb3Np
dGlvbl07CisgICAgICAgICAgICAgICAgYXV0byYgZXhpc3RpbmdSZWNvcmQgPSBzYW1lVVJMUmVj
b3Jkcy0+YXQocG9zaXRpb24pOwogICAgICAgICAgICAgICAgIHJlY29yZElkZW50aWZpZXJzLnVu
Y2hlY2tlZEFwcGVuZChpZGVudGlmaWVyKTsKLSAgICAgICAgICAgICAgICArK2V4aXN0aW5nUmVj
b3JkLnVwZGF0ZVJlc3BvbnNlQ291bnRlcjsKLQotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBI
YW5kbGUgdGhlIGNhc2Ugd2hlcmUgZGF0YSBpcyBudWxsLgotICAgICAgICAgICAgICAgIEFTU0VS
VChleGlzdGluZ1JlY29yZC5kYXRhKTsKLSAgICAgICAgICAgICAgICBleGlzdGluZ1JlY29yZC5k
YXRhLT5yZXNwb25zZUhlYWRlcnNHdWFyZCA9IHJlY29yZC5yZXNwb25zZUhlYWRlcnNHdWFyZDsK
LSAgICAgICAgICAgICAgICBleGlzdGluZ1JlY29yZC5kYXRhLT5yZXNwb25zZSA9IFdURk1vdmUo
cmVjb3JkLnJlc3BvbnNlKTsKLSAgICAgICAgICAgICAgICBleGlzdGluZ1JlY29yZC5kYXRhLT5y
ZXNwb25zZUJvZHkgPSBXVEZNb3ZlKHJlY29yZC5yZXNwb25zZUJvZHkpOwotICAgICAgICAgICAg
ICAgIHVwZGF0ZVZhcnlJbmZvcm1hdGlvbihleGlzdGluZ1JlY29yZCk7Ci0gICAgICAgICAgICAg
ICAgd3JpdGVSZWNvcmRUb0Rpc2soZXhpc3RpbmdSZWNvcmQpOworICAgICAgICAgICAgICAgIHVw
ZGF0ZVJlY29yZFRvRGlzayhleGlzdGluZ1JlY29yZCwgV1RGTW92ZShyZWNvcmQpLCB0YXNrQ291
bnRlcik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoIXNob3Vs
ZFdyaXRlUmVjb3JkTGlzdCkgewotICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKHJlY29yZElkZW50
aWZpZXJzKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgd3JpdGVSZWNvcmRzTGlzdChb
Y2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgcmVjb3JkSWRlbnRpZmllcnMgPSBXVEZNb3Zl
KHJlY29yZElkZW50aWZpZXJzKV0oc3RkOjpvcHRpb25hbDxFcnJvcj4mJiBlcnJvcikgbXV0YWJs
ZSB7CisgICAgdGFza0NvdW50ZXItPm9uQ29tcGxldGlvbihbY2FsbGJhY2sgPSBXVEZNb3ZlKGNh
bGxiYWNrKSwgcmVjb3JkSWRlbnRpZmllcnMgPSBXVEZNb3ZlKHJlY29yZElkZW50aWZpZXJzKV0o
c3RkOjpvcHRpb25hbDxFcnJvcj4mJiBlcnJvcikgbXV0YWJsZSB7CiAgICAgICAgIGlmIChlcnJv
cikgewogICAgICAgICAgICAgY2FsbGJhY2sobWFrZVVuZXhwZWN0ZWQoZXJyb3IudmFsdWUoKSkp
OwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjc1LDYgKzM3NCw4IEBAIHZvaWQgQ2FjaGU6OnB1
dChWZWN0b3I8UmVjb3JkPiYmIHJlY29yZHMsIFJlY29yZElkZW50aWZpZXJzQ2FsbGJhY2smJiBj
YWxsYmFjaykKIAogdm9pZCBDYWNoZTo6cmVtb3ZlKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYm
IHJlcXVlc3QsIFdlYkNvcmU6OkNhY2hlUXVlcnlPcHRpb25zJiYgb3B0aW9ucywgUmVjb3JkSWRl
bnRpZmllcnNDYWxsYmFjayYmIGNhbGxiYWNrKQogeworICAgIEFTU0VSVChtX3N0YXRlID09IFN0
YXRlOjpPcGVuKTsKKwogICAgIGF1dG8qIHJlY29yZHMgPSByZWNvcmRzRnJvbVVSTChyZXF1ZXN0
LnVybCgpKTsKICAgICBhdXRvIHJlY29yZElkZW50aWZpZXJzID0gcXVlcnlDYWNoZShyZWNvcmRz
LCByZXF1ZXN0LCBvcHRpb25zKTsKICAgICBpZiAocmVjb3JkSWRlbnRpZmllcnMuaXNFbXB0eSgp
KSB7CkBAIC0yODksMzUgKzM5MCwxNTcgQEAgdm9pZCBDYWNoZTo6cmVtb3ZlKFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYmIHJlcXVlc3QsIFdlYkNvcmU6OkNhY2hlUXVlcnlPcHRpb24KICAgICAg
ICAgcmV0dXJuIHNob3VsZFJlbW92ZTsKICAgICB9KTsKIAotICAgIHdyaXRlUmVjb3Jkc0xpc3Qo
W2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIHJlY29yZElkZW50aWZpZXJzID0gV1RGTW92
ZShyZWNvcmRJZGVudGlmaWVycyldKHN0ZDo6b3B0aW9uYWw8RXJyb3I+JiYgZXJyb3IpIG11dGFi
bGUgewotICAgICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKG1ha2VVbmV4
cGVjdGVkKGVycm9yLnZhbHVlKCkpKTsKKyAgICBjYWxsYmFjayhXVEZNb3ZlKHJlY29yZElkZW50
aWZpZXJzKSk7Cit9CisKK3ZvaWQgQ2FjaGU6OnJlbW92ZUZyb21SZWNvcmRMaXN0KGNvbnN0IFZl
Y3Rvcjx1aW50NjRfdD4mIHJlY29yZElkZW50aWZpZXJzKQoreworICAgIGlmIChyZWNvcmRJZGVu
dGlmaWVycy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGZvciAoYXV0byYgcmVj
b3JkcyA6IG1fcmVjb3Jkcy52YWx1ZXMoKSkgeworICAgICAgICBhdXRvKiBjYWNoZSA9IHRoaXM7
CisgICAgICAgIHJlY29yZHMucmVtb3ZlQWxsTWF0Y2hpbmcoW2NhY2hlLCAmcmVjb3JkSWRlbnRp
ZmllcnNdKGNvbnN0IGF1dG8mIGl0ZW0pIHsKKyAgICAgICAgICAgIHJldHVybiBub3RGb3VuZCAh
PSByZWNvcmRJZGVudGlmaWVycy5maW5kTWF0Y2hpbmcoW2NhY2hlLCAmaXRlbV0oY29uc3QgYXV0
byYgaWRlbnRpZmllcikgeworICAgICAgICAgICAgICAgIGlmIChpdGVtLmlkZW50aWZpZXIgIT0g
aWRlbnRpZmllcikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgICAgIGNhY2hlLT5yZW1vdmVSZWNvcmRGcm9tRGlzayhpdGVtKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9Cit9CisK
K3ZvaWQgQ2FjaGU6OndyaXRlUmVjb3JkVG9EaXNrKGNvbnN0IFJlY29yZEluZm9ybWF0aW9uJiBy
ZWNvcmRJbmZvcm1hdGlvbiwgUmVjb3JkJiYgcmVjb3JkLCBjb25zdCBSZWZQdHI8QXN5bmNocm9u
b3VzUHV0VGFza0NvdW50ZXI+JiBjb3VudGVyKQoreworICAgIG1fY2FjaGVzLndyaXRlUmVjb3Jk
KCp0aGlzLCByZWNvcmRJbmZvcm1hdGlvbiwgV1RGTW92ZShyZWNvcmQpLCBbY291bnRlcl0oc3Rk
OjpvcHRpb25hbDxFcnJvcj4mJiBlcnJvcikgeworICAgICAgICBBU1NFUlQoIWVycm9yKTsKKyAg
ICB9KTsKK30KKwordm9pZCBDYWNoZTo6dXBkYXRlUmVjb3JkVG9EaXNrKFJlY29yZEluZm9ybWF0
aW9uJiBleGlzdGluZ1JlY29yZCwgUmVjb3JkJiYgcmVjb3JkLCBjb25zdCBSZWZQdHI8QXN5bmNo
cm9ub3VzUHV0VGFza0NvdW50ZXI+JiB0YXNrQ291bnRlcikKK3sKKyAgICArK2V4aXN0aW5nUmVj
b3JkLnVwZGF0ZVJlc3BvbnNlQ291bnRlcjsKKyAgICByZWFkUmVjb3JkRnJvbURpc2soZXhpc3Rp
bmdSZWNvcmQsIFtjYWNoZXMgPSBtYWtlUmVmKG1fY2FjaGVzKSwgaWRlbnRpZmllciA9IG1faWRl
bnRpZmllciwgcmVjb3JkSWRlbnRpZmllciA9IGV4aXN0aW5nUmVjb3JkLmlkZW50aWZpZXIsIHJl
Y29yZCA9IFdURk1vdmUocmVjb3JkKSwgdGFza0NvdW50ZXJdKEV4cGVjdGVkPFJlY29yZCwgRXJy
b3I+JiYgcmVzdWx0KSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKCFyZXN1bHQuaGFzVmFsdWUoKSkK
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBjYWxsYmFjayhXVEZNb3Zl
KHJlY29yZElkZW50aWZpZXJzKSk7CisKKyAgICAgICAgYXV0byogY2FjaGUgPSBjYWNoZXMtPmZp
bmQoaWRlbnRpZmllcik7CisgICAgICAgIGlmICghY2FjaGUpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgYXV0byogc2FtZVVSTFJlY29yZHMgPSBjYWNoZS0+cmVjb3Jkc0Zyb21VUkwo
cmVzdWx0LnZhbHVlKCkucmVxdWVzdC51cmwoKSk7CisgICAgICAgIGlmICghc2FtZVVSTFJlY29y
ZHMpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgYXV0byBwb3NpdGlvbiA9IHNhbWVV
UkxSZWNvcmRzLT5maW5kTWF0Y2hpbmcoWyZdIChjb25zdCBhdXRvJiBpdGVtKSB7IHJldHVybiBp
dGVtLmlkZW50aWZpZXIgPT0gcmVjb3JkSWRlbnRpZmllcjsgfSk7CisgICAgICAgIGlmIChwb3Np
dGlvbiA9PSBub3RGb3VuZCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgYXV0byYgcmVj
b3JkSW5mbyA9IHNhbWVVUkxSZWNvcmRzLT5hdChwb3NpdGlvbik7CisKKyAgICAgICAgYXV0byYg
cmVjb3JkRnJvbURpc2sgPSByZXN1bHQudmFsdWUoKTsKKyAgICAgICAgcmVjb3JkLnJlcXVlc3RI
ZWFkZXJzR3VhcmQgPSByZWNvcmRGcm9tRGlzay5yZXF1ZXN0SGVhZGVyc0d1YXJkOworICAgICAg
ICByZWNvcmQucmVxdWVzdCA9IFdURk1vdmUocmVjb3JkRnJvbURpc2sucmVxdWVzdCk7CisgICAg
ICAgIHJlY29yZC5vcHRpb25zID0gV1RGTW92ZShyZWNvcmRGcm9tRGlzay5vcHRpb25zKTsKKyAg
ICAgICAgcmVjb3JkLnJlZmVycmVyID0gV1RGTW92ZShyZWNvcmRGcm9tRGlzay5yZWZlcnJlcik7
CisKKyAgICAgICAgdXBkYXRlVmFyeUluZm9ybWF0aW9uKHJlY29yZEluZm8sIHJlY29yZC5yZXF1
ZXN0LCByZWNvcmQucmVzcG9uc2UpOworCisgICAgICAgIGNhY2hlLT53cml0ZVJlY29yZFRvRGlz
ayhyZWNvcmRJbmZvLCBXVEZNb3ZlKHJlY29yZCksIHRhc2tDb3VudGVyKTsKICAgICB9KTsKIH0K
IAotdm9pZCBDYWNoZTo6cmVhZFJlY29yZHNMaXN0KENvbXBsZXRpb25DYWxsYmFjayYmIGNhbGxi
YWNrKQordm9pZCBDYWNoZTo6cmVhZFJlY29yZEZyb21EaXNrKGNvbnN0IFJlY29yZEluZm9ybWF0
aW9uJiByZWNvcmQsIFdURjo6RnVuY3Rpb248dm9pZChFeHBlY3RlZDxSZWNvcmQsIEVycm9yPiYm
KT4mJiBjYWxsYmFjaykKIHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCi0gICAgY2Fs
bGJhY2soc3RkOjpudWxsb3B0KTsKKyAgICBtX2NhY2hlcy5yZWFkUmVjb3JkKHJlY29yZC5rZXks
IFdURk1vdmUoY2FsbGJhY2spKTsKIH0KIAotdm9pZCBDYWNoZTo6d3JpdGVSZWNvcmRzTGlzdChD
b21wbGV0aW9uQ2FsbGJhY2smJiBjYWxsYmFjaykKK3ZvaWQgQ2FjaGU6OnJlbW92ZVJlY29yZEZy
b21EaXNrKGNvbnN0IFJlY29yZEluZm9ybWF0aW9uJiByZWNvcmQpCiB7Ci0gICAgLy8gRklYTUU6
IEltcGxlbWVudCB0aGlzLgotICAgIGNhbGxiYWNrKHN0ZDo6bnVsbG9wdCk7CisgICAgbV9jYWNo
ZXMucmVtb3ZlUmVjb3JkKHJlY29yZC5rZXkpOwogfQogCi12b2lkIENhY2hlOjp3cml0ZVJlY29y
ZFRvRGlzayhSZWNvcmREYXRhJikKK1N0b3JhZ2U6OlJlY29yZCBDYWNoZTo6ZW5jb2RlKGNvbnN0
IFJlY29yZEluZm9ybWF0aW9uJiByZWNvcmRJbmZvcm1hdGlvbiwgY29uc3QgUmVjb3JkJiByZWNv
cmQpCiB7Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgorICAgIFdURjo6UGVyc2lzdGVu
Y2U6OkVuY29kZXIgZW5jb2RlcjsKKyAgICBlbmNvZGVyIDw8IHJlY29yZEluZm9ybWF0aW9uLmlu
c2VydGlvblRpbWU7CisgICAgZW5jb2RlciA8PCByZWNvcmQucmVxdWVzdEhlYWRlcnNHdWFyZDsK
KyAgICByZWNvcmQucmVxdWVzdC5lbmNvZGVXaXRob3V0UGxhdGZvcm1EYXRhKGVuY29kZXIpOwor
ICAgIGVuY29kZXIgPDwgcmVjb3JkLm9wdGlvbnM7CisgICAgZW5jb2RlciA8PCByZWNvcmQucmVm
ZXJyZXI7CisKKyAgICBlbmNvZGVyIDw8IHJlY29yZC5yZXNwb25zZUhlYWRlcnNHdWFyZDsKKyAg
ICBlbmNvZGVyIDw8IHJlY29yZC5yZXNwb25zZTsKKworICAgIGVuY29kZXIuZW5jb2RlQ2hlY2tz
dW0oKTsKKworICAgIERhdGEgaGVhZGVyKGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVy
U2l6ZSgpKTsKKyAgICBEYXRhIGJvZHk7CisgICAgV1RGOjpzd2l0Y2hPbihyZWNvcmQucmVzcG9u
c2VCb2R5LCBbXShjb25zdCBSZWY8V2ViQ29yZTo6Rm9ybURhdGE+JiBmb3JtRGF0YSkgeworICAg
ICAgICAvLyBGSVhNRTogU3RvcmUgZm9ybSBkYXRhIGJvZHkuCisgICAgfSwgWyZdKGNvbnN0IFJl
ZjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+JiBidWZmZXIpIHsKKyAgICAgICAgYm9keSA9IHsgcmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oYnVmZmVyLT5kYXRhKCkpLCBidWZmZXItPnNp
emUoKSB9OworICAgIH0sIFtdKGNvbnN0IHN0ZDo6bnVsbHB0cl90JikgeworICAgIH0pOworCisg
ICAgcmV0dXJuIHsgcmVjb3JkSW5mb3JtYXRpb24ua2V5LCB7IH0sIGhlYWRlciwgYm9keSwgeyB9
IH07CiB9CiAKLXZvaWQgQ2FjaGU6OnJlbW92ZVJlY29yZEZyb21EaXNrKFJlY29yZERhdGEmKQor
c3RhdGljIGlubGluZSBzdGQ6Om9wdGlvbmFsPHN0ZDo6cGFpcjxSZWNvcmQsIGRvdWJsZT4+IGRl
Y29kZVJlY29yZEhlYWRlcihjb25zdCBTdG9yYWdlOjpSZWNvcmQmIHN0b3JhZ2UpCiB7Ci0gICAg
Ly8gRklYTUU6IEltcGxlbWVudCB0aGlzLgorICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIg
ZGVjb2RlcihzdG9yYWdlLmhlYWRlci5kYXRhKCksIHN0b3JhZ2UuaGVhZGVyLnNpemUoKSk7CisK
KyAgICBSZWNvcmQgcmVjb3JkOworCisgICAgZG91YmxlIGluc2VydGlvblRpbWU7CisgICAgaWYg
KCFkZWNvZGVyLmRlY29kZShpbnNlcnRpb25UaW1lKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVjb3JkLnJlcXVlc3RIZWFkZXJzR3Vh
cmQpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgaWYgKCFyZWNvcmQucmVx
dWVzdC5kZWNvZGVXaXRob3V0UGxhdGZvcm1EYXRhKGRlY29kZXIpKQorICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZWNvcmQub3B0aW9ucykp
CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KHJlY29yZC5yZWZlcnJlcikpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKHJlY29yZC5yZXNwb25zZUhlYWRlcnNHdWFyZCkpCisgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlY29yZC5y
ZXNwb25zZSkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBpZiAoIWRlY29k
ZXIudmVyaWZ5Q2hlY2tzdW0oKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAg
IHJldHVybiBzdGQ6Om1ha2VfcGFpcihXVEZNb3ZlKHJlY29yZCksIGluc2VydGlvblRpbWUpOwor
fQorCitzdGQ6Om9wdGlvbmFsPFJlY29yZD4gQ2FjaGU6OmRlY29kZShjb25zdCBTdG9yYWdlOjpS
ZWNvcmQmIHN0b3JhZ2UpCit7CisgICAgYXV0byByZXN1bHQgPSBkZWNvZGVSZWNvcmRIZWFkZXIo
c3RvcmFnZSk7CisKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKKworICAgIGF1dG8gcmVjb3JkID0gV1RGTW92ZShyZXN1bHQtPmZpcnN0KTsKKyAgICByZWNv
cmQucmVzcG9uc2VCb2R5ID0gV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpjcmVhdGUoc3RvcmFnZS5i
b2R5LmRhdGEoKSwgc3RvcmFnZS5ib2R5LnNpemUoKSk7CisKKyAgICByZXR1cm4gV1RGTW92ZShy
ZWNvcmQpOworfQorCitWZWN0b3I8S2V5PiBDYWNoZTo6a2V5cygpIGNvbnN0Cit7CisgICAgVmVj
dG9yPEtleT4ga2V5czsKKyAgICBmb3IgKGF1dG8mIHJlY29yZHMgOiBtX3JlY29yZHMudmFsdWVz
KCkpIHsKKyAgICAgICAgZm9yIChhdXRvJiByZWNvcmQgOiByZWNvcmRzKQorICAgICAgICAgICAg
a2V5cy5hcHBlbmQocmVjb3JkLmtleSk7CisgICAgfQorICAgIHJldHVybiBrZXlzOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBDYWNoZVN0b3JhZ2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUuaCBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUuaAppbmRleCBj
OWYwZDgwZTU0Yjc2ZTIwNDJlMTNjOWU0MDVjOWQ1NTI3M2QxMjY1Li41OWEwNmFkZDJjZjdmMDdj
NWI1YTRmMzA2NWU1NTk1MWVhZGZjYjlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlLmgKKysrIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZS5oCkBAIC0y
NSw3ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiTmV0d29ya0NhY2hlS2V5
LmgiCisjaW5jbHVkZSAiTmV0d29ya0NhY2hlU3RvcmFnZS5oIgogI2luY2x1ZGUgPFdlYkNvcmUv
RE9NQ2FjaGVFbmdpbmUuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CkBAIC0zNiw3ICszNiw3IEBAIG5hbWVzcGFjZSBDYWNoZVN0b3Jh
Z2UgewogCiBjbGFzcyBDYWNoZXM7CiAKLXN0cnVjdCBSZWNvcmREYXRhIHsKK3N0cnVjdCBSZWNv
cmRJbmZvcm1hdGlvbiB7CiAgICAgTmV0d29ya0NhY2hlOjpLZXkga2V5OwogICAgIGRvdWJsZSBp
bnNlcnRpb25UaW1lIHsgMCB9OwogCkBAIC00Niw1OCArNDYsNjEgQEAgc3RydWN0IFJlY29yZERh
dGEgewogICAgIFdlYkNvcmU6OlVSTCB1cmw7CiAgICAgYm9vbCBoYXNWYXJ5U3RhciB7IGZhbHNl
IH07CiAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gdmFyeUhlYWRlcnM7Ci0KLSAgICBzdHJ1
Y3QgRGF0YSB7Ci0gICAgICAgIFdlYkNvcmU6OkZldGNoSGVhZGVyczo6R3VhcmQgcmVxdWVzdEhl
YWRlcnNHdWFyZDsKLSAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3Q7Ci0g
ICAgICAgIFdlYkNvcmU6OkZldGNoT3B0aW9ucyBvcHRpb25zOwotICAgICAgICBTdHJpbmcgcmVm
ZXJyZXI7Ci0KLSAgICAgICAgV2ViQ29yZTo6RmV0Y2hIZWFkZXJzOjpHdWFyZCByZXNwb25zZUhl
YWRlcnNHdWFyZDsKLSAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSByZXNwb25zZTsK
LSAgICAgICAgV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OlJlc3BvbnNlQm9keSByZXNwb25zZUJv
ZHk7Ci0gICAgfTsKLQotICAgIHN0ZDo6b3B0aW9uYWw8RGF0YT4gZGF0YTsKIH07CiAKK2NsYXNz
IEFzeW5jaHJvbm91c1B1dFRhc2tDb3VudGVyOworY2xhc3MgUmVhZFJlY29yZFRhc2tDb3VudGVy
OworCiBjbGFzcyBDYWNoZSB7CiBwdWJsaWM6CiAgICAgZW51bSBjbGFzcyBTdGF0ZSB7IFVuaW5p
dGlhbGl6ZWQsIE9wZW5pbmcsIE9wZW4gfTsKLSAgICBDYWNoZShDYWNoZXMmLCB1aW50NjRfdCBp
ZGVudGlmaWVyLCBTdGF0ZSwgU3RyaW5nJiYgbmFtZSk7CisgICAgQ2FjaGUoQ2FjaGVzJiwgdWlu
dDY0X3QgaWRlbnRpZmllciwgU3RhdGUsIFN0cmluZyYmIG5hbWUsIFN0cmluZyYmIHVuaXF1ZU5h
bWUpOwogCisgICAgYm9vbCBpc09wZW5lZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0gU3Rh
dGU6Ok9wZW47IH0KICAgICB2b2lkIG9wZW4oV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OkNvbXBs
ZXRpb25DYWxsYmFjayYmKTsKIAogICAgIHVpbnQ2NF90IGlkZW50aWZpZXIoKSBjb25zdCB7IHJl
dHVybiBtX2lkZW50aWZpZXI7IH0KICAgICBjb25zdCBTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJl
dHVybiBtX25hbWU7IH0KKyAgICBjb25zdCBTdHJpbmcmIHVuaXF1ZU5hbWUoKSBjb25zdCB7IHJl
dHVybiBtX3VuaXF1ZU5hbWU7IH0KICAgICBib29sIGlzQWN0aXZlKCkgY29uc3QgeyByZXR1cm4g
bV9zdGF0ZSAhPSBTdGF0ZTo6VW5pbml0aWFsaXplZDsgfQogCi0gICAgVmVjdG9yPFdlYkNvcmU6
OkRPTUNhY2hlRW5naW5lOjpSZWNvcmQ+IHJldHJpZXZlUmVjb3Jkcyhjb25zdCBXZWJDb3JlOjpV
UkwmKSBjb25zdDsKKyAgICB2b2lkIHJldHJpZXZlUmVjb3Jkcyhjb25zdCBXZWJDb3JlOjpVUkwm
LCBXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6UmVjb3Jkc0NhbGxiYWNrJiYpOwogICAgIFdlYkNv
cmU6OkRPTUNhY2hlRW5naW5lOjpDYWNoZUluZm8gaW5mbygpIGNvbnN0IHsgcmV0dXJuIHsgbV9p
ZGVudGlmaWVyLCBtX25hbWUgfTsgfQogCiAgICAgdm9pZCBwdXQoVmVjdG9yPFdlYkNvcmU6OkRP
TUNhY2hlRW5naW5lOjpSZWNvcmQ+JiYsIFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpSZWNvcmRJ
ZGVudGlmaWVyc0NhbGxiYWNrJiYpOwogICAgIHZvaWQgcmVtb3ZlKFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdCYmLCBXZWJDb3JlOjpDYWNoZVF1ZXJ5T3B0aW9ucyYmLCBXZWJDb3JlOjpET01DYWNo
ZUVuZ2luZTo6UmVjb3JkSWRlbnRpZmllcnNDYWxsYmFjayYmKTsKIAorICAgIFZlY3RvcjxOZXR3
b3JrQ2FjaGU6OktleT4ga2V5cygpIGNvbnN0OworCiAgICAgdm9pZCBkaXNwb3NlKCk7CiAgICAg
dm9pZCBjbGVhck1lbW9yeVJlcHJlc2VudGF0aW9uKCk7Ci0gCisKKyAgICBzdGF0aWMgc3RkOjpv
cHRpb25hbDxXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6UmVjb3JkPiBkZWNvZGUoY29uc3QgTmV0
d29ya0NhY2hlOjpTdG9yYWdlOjpSZWNvcmQmKTsKKyAgICBzdGF0aWMgTmV0d29ya0NhY2hlOjpT
dG9yYWdlOjpSZWNvcmQgZW5jb2RlKGNvbnN0IFJlY29yZEluZm9ybWF0aW9uJiwgY29uc3QgV2Vi
Q29yZTo6RE9NQ2FjaGVFbmdpbmU6OlJlY29yZCYpOworCiBwcml2YXRlOgotICAgIFZlY3RvcjxS
ZWNvcmREYXRhPiogcmVjb3Jkc0Zyb21VUkwoY29uc3QgV2ViQ29yZTo6VVJMJik7Ci0gICAgY29u
c3QgVmVjdG9yPFJlY29yZERhdGE+KiByZWNvcmRzRnJvbVVSTChjb25zdCBXZWJDb3JlOjpVUkwm
KSBjb25zdDsKLSAgICBSZWNvcmREYXRhJiBhZGRSZWNvcmQoVmVjdG9yPFJlY29yZERhdGE+Kiwg
V2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OlJlY29yZCYmKTsKKyAgICBWZWN0b3I8UmVjb3JkSW5m
b3JtYXRpb24+KiByZWNvcmRzRnJvbVVSTChjb25zdCBXZWJDb3JlOjpVUkwmKTsKKyAgICBjb25z
dCBWZWN0b3I8UmVjb3JkSW5mb3JtYXRpb24+KiByZWNvcmRzRnJvbVVSTChjb25zdCBXZWJDb3Jl
OjpVUkwmKSBjb25zdDsKKyAgICBSZWNvcmRJbmZvcm1hdGlvbiYgYWRkUmVjb3JkKFZlY3RvcjxS
ZWNvcmRJbmZvcm1hdGlvbj4qLCBjb25zdCBXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6UmVjb3Jk
Jik7CisKKyAgICBSZWNvcmRJbmZvcm1hdGlvbiB0b1JlY29yZEluZm9ybWF0aW9uKGNvbnN0IFdl
YkNvcmU6OkRPTUNhY2hlRW5naW5lOjpSZWNvcmQmKTsKIAogICAgIHZvaWQgZmluaXNoT3Blbmlu
ZyhXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6Q29tcGxldGlvbkNhbGxiYWNrJiYsIHN0ZDo6b3B0
aW9uYWw8V2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OkVycm9yPiYmKTsKKyAgICB2b2lkIHJldHJp
ZXZlUmVjb3JkKGNvbnN0IFJlY29yZEluZm9ybWF0aW9uJiwgUmVmUHRyPFJlYWRSZWNvcmRUYXNr
Q291bnRlcj4mKTsKIAogICAgIHZvaWQgcmVhZFJlY29yZHNMaXN0KFdlYkNvcmU6OkRPTUNhY2hl
RW5naW5lOjpDb21wbGV0aW9uQ2FsbGJhY2smJik7Ci0gICAgdm9pZCB3cml0ZVJlY29yZHNMaXN0
KFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpDb21wbGV0aW9uQ2FsbGJhY2smJik7Ci0gICAgdm9p
ZCB3cml0ZVJlY29yZFRvRGlzayhSZWNvcmREYXRhJik7Ci0gICAgdm9pZCByZW1vdmVSZWNvcmRG
cm9tRGlzayhSZWNvcmREYXRhJik7CisgICAgdm9pZCB3cml0ZVJlY29yZFRvRGlzayhjb25zdCBS
ZWNvcmRJbmZvcm1hdGlvbiYsIFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpSZWNvcmQmJiwgY29u
c3QgUmVmUHRyPEFzeW5jaHJvbm91c1B1dFRhc2tDb3VudGVyPiYpOworICAgIHZvaWQgdXBkYXRl
UmVjb3JkVG9EaXNrKFJlY29yZEluZm9ybWF0aW9uJiwgV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6
OlJlY29yZCYmLCBjb25zdCBSZWZQdHI8QXN5bmNocm9ub3VzUHV0VGFza0NvdW50ZXI+Jik7Cisg
ICAgdm9pZCByZW1vdmVSZWNvcmRGcm9tRGlzayhjb25zdCBSZWNvcmRJbmZvcm1hdGlvbiYpOwor
ICAgIHZvaWQgcmVhZFJlY29yZEZyb21EaXNrKGNvbnN0IFJlY29yZEluZm9ybWF0aW9uJiwgV1RG
OjpGdW5jdGlvbjx2b2lkKEV4cGVjdGVkPFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpSZWNvcmQs
IFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpFcnJvcj4mJik+JiYpOworICAgIHZvaWQgcmVtb3Zl
RnJvbVJlY29yZExpc3QoY29uc3QgVmVjdG9yPHVpbnQ2NF90PiYpOwogCiAgICAgQ2FjaGVzJiBt
X2NhY2hlczsKICAgICBTdGF0ZSBtX3N0YXRlOwogICAgIHVpbnQ2NF90IG1faWRlbnRpZmllciB7
IDAgfTsKICAgICBTdHJpbmcgbV9uYW1lOwotICAgIEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8UmVj
b3JkRGF0YT4+IG1fcmVjb3JkczsKKyAgICBTdHJpbmcgbV91bmlxdWVOYW1lOworICAgIEhhc2hN
YXA8U3RyaW5nLCBWZWN0b3I8UmVjb3JkSW5mb3JtYXRpb24+PiBtX3JlY29yZHM7CiAgICAgdWlu
dDY0X3QgbV9uZXh0UmVjb3JkSWRlbnRpZmllciB7IDAgfTsKICAgICBWZWN0b3I8V2ViQ29yZTo6
RE9NQ2FjaGVFbmdpbmU6OkNvbXBsZXRpb25DYWxsYmFjaz4gbV9wZW5kaW5nT3BlbmluZ0NhbGxi
YWNrczsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hl
L0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5jcHAKaW5kZXggYjMxZTI4OTc3ZGVk
MWM0NzBjNjk2OTViMDM4Y2JiNDVjNGEzZjVjNy4uMjA3YjdkNmZkNmFhODIyNTE1ZmM2NjYyMjhm
MTkyODNlNDA0M2UzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9j
YWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNwcApAQCAtMjcsNiAr
MjcsNyBAQAogI2luY2x1ZGUgIkNhY2hlU3RvcmFnZUVuZ2luZS5oIgogCiAjaW5jbHVkZSAiTmV0
d29ya0NhY2hlQ29kZXJzLmgiCisjaW5jbHVkZSA8d3RmL1VVSUQuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOjpET01DYWNo
ZUVuZ2luZTsKQEAgLTU5LDcgKzYwLDE0IEBAIENhY2hlczo6Q2FjaGVzKEVuZ2luZSYgZW5naW5l
LCBTdHJpbmcmJiBvcmlnaW4pCiAKIHZvaWQgQ2FjaGVzOjppbml0aWFsaXplKFdlYkNvcmU6OkRP
TUNhY2hlRW5naW5lOjpDb21wbGV0aW9uQ2FsbGJhY2smJiBjYWxsYmFjaykKIHsKLSAgICBpZiAo
bV9pc0luaXRpYWxpemVkIHx8IG1fcm9vdFBhdGguaXNOdWxsKCkpIHsKKyAgICBpZiAobV9pc0lu
aXRpYWxpemVkKSB7CisgICAgICAgIGNhbGxiYWNrKHN0ZDo6bnVsbG9wdCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAobV9yb290UGF0aC5pc051bGwoKSkgeworICAgICAgICBt
YWtlRGlydHkoKTsKKyAgICAgICAgbV9pc0luaXRpYWxpemVkID0gdHJ1ZTsKICAgICAgICAgY2Fs
bGJhY2soc3RkOjpudWxsb3B0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTc1LDYgKzgz
LDcgQEAgdm9pZCBDYWNoZXM6OmluaXRpYWxpemUoV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OkNv
bXBsZXRpb25DYWxsYmFjayYmIGNhbGxiYWNrKQogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IG1fc3RvcmFnZSA9IHN0b3JhZ2UucmVsZWFzZU5vbk51bGwoKTsKKyAgICBtX3N0b3JhZ2UtPndy
aXRlV2l0aG91dFdhaXRpbmcoKTsKICAgICByZWFkQ2FjaGVzRnJvbURpc2soW3RoaXMsIGNhbGxi
YWNrID0gV1RGTW92ZShjYWxsYmFjayldKEV4cGVjdGVkPFZlY3RvcjxDYWNoZT4sIEVycm9yPiYm
IHJlc3VsdCkgewogICAgICAgICBtYWtlRGlydHkoKTsKIApAQCAtMTIwLDcgKzEyOSw5IEBAIENh
Y2hlKiBDYWNoZXM6OmZpbmQodWludDY0X3QgaWRlbnRpZmllcikKIAogdm9pZCBDYWNoZXM6Om9w
ZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBDYWNoZUlkZW50aWZpZXJDYWxsYmFjayYmIGNhbGxiYWNr
KQogeworICAgIEFTU0VSVChtX2lzSW5pdGlhbGl6ZWQpOwogICAgIEFTU0VSVChtX2VuZ2luZSk7
CisKICAgICBpZiAoYXV0byogY2FjaGUgPSBmaW5kKG5hbWUpKSB7CiAgICAgICAgIGNhY2hlLT5v
cGVuKFtjYWNoZUlkZW50aWZpZXIgPSBjYWNoZS0+aWRlbnRpZmllcigpLCBjYWxsYmFjayA9IFdU
Rk1vdmUoY2FsbGJhY2spXShzdGQ6Om9wdGlvbmFsPEVycm9yPiYmIGVycm9yKSBtdXRhYmxlIHsK
ICAgICAgICAgICAgIGlmIChlcnJvcikgewpAQCAtMTM1LDcgKzE0Niw3IEBAIHZvaWQgQ2FjaGVz
OjpvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgQ2FjaGVJZGVudGlmaWVyQ2FsbGJhY2smJiBjYWxs
YmFjaykKICAgICBtYWtlRGlydHkoKTsKIAogICAgIHVpbnQ2NF90IGNhY2hlSWRlbnRpZmllciA9
IG1fZW5naW5lLT5uZXh0Q2FjaGVJZGVudGlmaWVyKCk7Ci0gICAgbV9jYWNoZXMuYXBwZW5kKENh
Y2hlIHsgKnRoaXMsIGNhY2hlSWRlbnRpZmllciwgQ2FjaGU6OlN0YXRlOjpPcGVuLCBTdHJpbmcg
eyBuYW1lIH0gfSk7CisgICAgbV9jYWNoZXMuYXBwZW5kKENhY2hlIHsgKnRoaXMsIGNhY2hlSWRl
bnRpZmllciwgQ2FjaGU6OlN0YXRlOjpPcGVuLCBTdHJpbmcgeyBuYW1lIH0sIGNyZWF0ZUNhbm9u
aWNhbFVVSURTdHJpbmcoKSB9KTsKIAogICAgIHdyaXRlQ2FjaGVzVG9EaXNrKFtjYWxsYmFjayA9
IFdURk1vdmUoY2FsbGJhY2spLCBjYWNoZUlkZW50aWZpZXJdKHN0ZDo6b3B0aW9uYWw8RXJyb3I+
JiYgZXJyb3IpIG11dGFibGUgewogICAgICAgICBjYWxsYmFjayhDYWNoZUlkZW50aWZpZXJPcGVy
YXRpb25SZXN1bHQgeyBjYWNoZUlkZW50aWZpZXIsICEhZXJyb3IgfSk7CkBAIC0xNDQsNiArMTU1
LDcgQEAgdm9pZCBDYWNoZXM6Om9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBDYWNoZUlkZW50aWZp
ZXJDYWxsYmFjayYmIGNhbGxiYWNrKQogCiB2b2lkIENhY2hlczo6cmVtb3ZlKHVpbnQ2NF90IGlk
ZW50aWZpZXIsIENhY2hlSWRlbnRpZmllckNhbGxiYWNrJiYgY2FsbGJhY2spCiB7CisgICAgQVNT
RVJUKG1faXNJbml0aWFsaXplZCk7CiAgICAgQVNTRVJUKG1fZW5naW5lKTsKIAogICAgIGF1dG8g
cG9zaXRpb24gPSBtX2NhY2hlcy5maW5kTWF0Y2hpbmcoWyZdKGNvbnN0IGF1dG8mIGl0ZW0pIHsg
cmV0dXJuIGl0ZW0uaWRlbnRpZmllcigpID09IGlkZW50aWZpZXI7IH0pOwpAQCAtMTY4LDYgKzE4
MCw5IEBAIHZvaWQgQ2FjaGVzOjpkaXNwb3NlKENhY2hlJiBjYWNoZSkKIHsKICAgICBhdXRvIHBv
c2l0aW9uID0gbV9yZW1vdmVkQ2FjaGVzLmZpbmRNYXRjaGluZyhbJl0oY29uc3QgYXV0byYgaXRl
bSkgeyByZXR1cm4gaXRlbS5pZGVudGlmaWVyKCkgPT0gY2FjaGUuaWRlbnRpZmllcigpOyB9KTsK
ICAgICBpZiAocG9zaXRpb24gIT0gbm90Rm91bmQpIHsKKyAgICAgICAgaWYgKG1fc3RvcmFnZSkK
KyAgICAgICAgICAgIG1fc3RvcmFnZS0+cmVtb3ZlKGNhY2hlLmtleXMoKSwgeyB9KTsKKwogICAg
ICAgICBtX3JlbW92ZWRDYWNoZXMucmVtb3ZlKHBvc2l0aW9uKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KQEAgLTE4NCwxMyArMTk5LDE1IEBAIHN0YXRpYyBpbmxpbmUgRGF0YSBlbmNvZGVDYWNo
ZU5hbWVzKGNvbnN0IFZlY3RvcjxDYWNoZT4mIGNhY2hlcykKIAogICAgIHVpbnQ2NF90IHNpemUg
PSBjYWNoZXMuc2l6ZSgpOwogICAgIGVuY29kZXIgPDwgc2l6ZTsKLSAgICBmb3IgKGF1dG8mIGNh
Y2hlIDogY2FjaGVzKQorICAgIGZvciAoYXV0byYgY2FjaGUgOiBjYWNoZXMpIHsKICAgICAgICAg
ZW5jb2RlciA8PCBjYWNoZS5uYW1lKCk7CisgICAgICAgIGVuY29kZXIgPDwgY2FjaGUudW5pcXVl
TmFtZSgpOworICAgIH0KIAogICAgIHJldHVybiBEYXRhIHsgZW5jb2Rlci5idWZmZXIoKSwgZW5j
b2Rlci5idWZmZXJTaXplKCkgfTsKIH0KIAotc3RhdGljIGlubGluZSBFeHBlY3RlZDxWZWN0b3I8
U3RyaW5nPiwgRXJyb3I+IGRlY29kZUNhY2hlc05hbWVzKGNvbnN0IERhdGEmIGRhdGEsIGludCBl
cnJvcikKK3N0YXRpYyBpbmxpbmUgRXhwZWN0ZWQ8VmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFN0
cmluZz4+LCBFcnJvcj4gZGVjb2RlQ2FjaGVzTmFtZXMoY29uc3QgRGF0YSYgZGF0YSwgaW50IGVy
cm9yKQogewogICAgIGlmIChlcnJvcikKICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVy
cm9yOjpSZWFkRGlzayk7CkBAIC0yMDAsMTQgKzIxNywxNyBAQCBzdGF0aWMgaW5saW5lIEV4cGVj
dGVkPFZlY3RvcjxTdHJpbmc+LCBFcnJvcj4gZGVjb2RlQ2FjaGVzTmFtZXMoY29uc3QgRGF0YSYg
ZGF0YQogICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY291bnQpKQogICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoRXJyb3I6OlJlYWREaXNrKTsKIAotICAgIFZlY3RvcjxTdHJpbmc+IG5hbWVz
OworICAgIFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+PiBuYW1lczsKICAgICBuYW1l
cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGNvdW50KTsKICAgICBmb3IgKHNpemVfdCBpbmRleCA9
IDA7IGluZGV4IDwgY291bnQ7ICsraW5kZXgpIHsKICAgICAgICAgU3RyaW5nIG5hbWU7CiAgICAg
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUobmFtZSkpCiAgICAgICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoRXJyb3I6OlJlYWREaXNrKTsKKyAgICAgICAgU3RyaW5nIHVuaXF1ZU5hbWU7Cisg
ICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUodW5pcXVlTmFtZSkpCisgICAgICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoRXJyb3I6OlJlYWREaXNrKTsKIAotICAgICAgICBuYW1lcy51bmNo
ZWNrZWRBcHBlbmQoV1RGTW92ZShuYW1lKSk7CisgICAgICAgIG5hbWVzLnVuY2hlY2tlZEFwcGVu
ZChzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+IHsgV1RGTW92ZShuYW1lKSwgV1RGTW92ZSh1bmlx
dWVOYW1lKSB9KTsKICAgICB9CiAgICAgcmV0dXJuIG5hbWVzOwogfQpAQCAtMjQwLDggKzI2MCw4
IEBAIHZvaWQgQ2FjaGVzOjpyZWFkQ2FjaGVzRnJvbURpc2soV1RGOjpGdW5jdGlvbjx2b2lkKEV4
cGVjdGVkPFZlY3RvcjxDYWNoZT4sIEVycm9yCiAgICAgICAgICAgICBjYWxsYmFjayhtYWtlVW5l
eHBlY3RlZChyZXN1bHQuZXJyb3IoKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
Ci0gICAgICAgIGNhbGxiYWNrKFdURjo6bWFwKFdURk1vdmUocmVzdWx0LnZhbHVlKCkpLCBbdGhp
c10gKFN0cmluZyYmIG5hbWUpIHsKLSAgICAgICAgICAgIHJldHVybiBDYWNoZSB7ICp0aGlzLCBt
X2VuZ2luZS0+bmV4dENhY2hlSWRlbnRpZmllcigpLCBDYWNoZTo6U3RhdGU6OlVuaW5pdGlhbGl6
ZWQsIFdURk1vdmUobmFtZSkgfTsKKyAgICAgICAgY2FsbGJhY2soV1RGOjptYXAoV1RGTW92ZShy
ZXN1bHQudmFsdWUoKSksIFt0aGlzXSAoYXV0byYmIHBhaXIpIHsKKyAgICAgICAgICAgIHJldHVy
biBDYWNoZSB7ICp0aGlzLCBtX2VuZ2luZS0+bmV4dENhY2hlSWRlbnRpZmllcigpLCBDYWNoZTo6
U3RhdGU6OlVuaW5pdGlhbGl6ZWQsIFdURk1vdmUocGFpci5maXJzdCksIFdURk1vdmUocGFpci5z
ZWNvbmQpIH07CiAgICAgICAgIH0pKTsKICAgICB9KTsKIH0KQEAgLTI2NiwxNCArMjg2LDgyIEBA
IHZvaWQgQ2FjaGVzOjp3cml0ZUNhY2hlc1RvRGlzayhDb21wbGV0aW9uQ2FsbGJhY2smJiBjYWxs
YmFjaykKICAgICB9KTsKIH0KIAordm9pZCBDYWNoZXM6OnJlYWRSZWNvcmRzTGlzdChDYWNoZSYg
Y2FjaGUsIE5ldHdvcmtDYWNoZTo6U3RvcmFnZTo6VHJhdmVyc2VIYW5kbGVyJiYgY2FsbGJhY2sp
Cit7CisgICAgQVNTRVJUKG1faXNJbml0aWFsaXplZCk7CisKKyAgICBpZiAoIW1fc3RvcmFnZSkg
eworICAgICAgICBjYWxsYmFjayhudWxscHRyLCB7IH0pOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIG1fc3RvcmFnZS0+dHJhdmVyc2UoY2FjaGUudW5pcXVlTmFtZSgpLCAwLCBbcHJvdGVj
dGVkU3RvcmFnZSA9IG1ha2VSZWYoKm1fc3RvcmFnZSksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxs
YmFjayldKGNvbnN0IGF1dG8qIHN0b3JhZ2UsIGNvbnN0IGF1dG8mIGluZm9ybWF0aW9uKSB7Cisg
ICAgICAgIGNhbGxiYWNrKHN0b3JhZ2UsIGluZm9ybWF0aW9uKTsKKyAgICB9KTsKK30KKwordm9p
ZCBDYWNoZXM6OndyaXRlUmVjb3JkKGNvbnN0IENhY2hlJiBjYWNoZSwgY29uc3QgUmVjb3JkSW5m
b3JtYXRpb24mIHJlY29yZEluZm9ybWF0aW9uLCBSZWNvcmQmJiByZWNvcmQsIENvbXBsZXRpb25D
YWxsYmFjayYmIGNhbGxiYWNrKQoreworICAgIEFTU0VSVChtX2lzSW5pdGlhbGl6ZWQpOworCisg
ICAgLy8gRklYTUU6IENoZWNrIGZvciBzdG9yYWdlIHF1b3RhLgorICAgIGlmICghc2hvdWxkUGVy
c2lzdCgpKSB7CisgICAgICAgIG1fdm9sYXRpbGVTdG9yYWdlLnNldChyZWNvcmRJbmZvcm1hdGlv
bi5rZXksIFdURk1vdmUocmVjb3JkKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBt
X3N0b3JhZ2UtPnN0b3JlKENhY2hlOjplbmNvZGUocmVjb3JkSW5mb3JtYXRpb24sIHJlY29yZCks
IFtwcm90ZWN0ZWRTdG9yYWdlID0gbWFrZVJlZigqbV9zdG9yYWdlKSwgY2FsbGJhY2sgPSBXVEZN
b3ZlKGNhbGxiYWNrKV0oY29uc3QgRGF0YSYpIHsKKyAgICAgICAgY2FsbGJhY2soc3RkOjpudWxs
b3B0KTsKKyAgICB9KTsKK30KKwordm9pZCBDYWNoZXM6OnJlYWRSZWNvcmQoY29uc3QgTmV0d29y
a0NhY2hlOjpLZXkmIGtleSwgV1RGOjpGdW5jdGlvbjx2b2lkKEV4cGVjdGVkPFJlY29yZCwgRXJy
b3I+JiYpPiYmIGNhbGxiYWNrKQoreworICAgIEFTU0VSVChtX2lzSW5pdGlhbGl6ZWQpOworCisg
ICAgaWYgKCFzaG91bGRQZXJzaXN0KCkpIHsKKyAgICAgICAgYXV0byBpdGVyYXRvciA9IG1fdm9s
YXRpbGVTdG9yYWdlLmZpbmQoa2V5KTsKKyAgICAgICAgaWYgKGl0ZXJhdG9yID09IG1fdm9sYXRp
bGVTdG9yYWdlLmVuZCgpKSB7CisgICAgICAgICAgICBjYWxsYmFjayhtYWtlVW5leHBlY3RlZChF
cnJvcjo6SW50ZXJuYWwpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICBjYWxsYmFjayhpdGVyYXRvci0+dmFsdWUuY29weSgpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIG1fc3RvcmFnZS0+cmV0cmlldmUoa2V5LCA0LCBbcHJvdGVjdGVkU3RvcmFnZSA9
IG1ha2VSZWYoKm1fc3RvcmFnZSksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKHN0ZDo6
dW5pcXVlX3B0cjxTdG9yYWdlOjpSZWNvcmQ+IHN0b3JhZ2UpIG11dGFibGUgeworICAgICAgICBp
ZiAoIXN0b3JhZ2UpIHsKKyAgICAgICAgICAgIGNhbGxiYWNrKG1ha2VVbmV4cGVjdGVkKEVycm9y
OjpSZWFkRGlzaykpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAg
ICAgICAgYXV0byByZWNvcmQgPSBDYWNoZTo6ZGVjb2RlKCpzdG9yYWdlKTsKKyAgICAgICAgaWYg
KCFyZWNvcmQpIHsKKyAgICAgICAgICAgIGNhbGxiYWNrKG1ha2VVbmV4cGVjdGVkKEVycm9yOjpS
ZWFkRGlzaykpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAg
ICAgY2FsbGJhY2soV1RGTW92ZShyZWNvcmQudmFsdWUoKSkpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9KTsKK30KKwordm9pZCBDYWNoZXM6OnJlbW92ZVJlY29yZChjb25zdCBOZXR3b3Jr
Q2FjaGU6OktleSYga2V5KQoreworICAgIEFTU0VSVChtX2lzSW5pdGlhbGl6ZWQpOworCisgICAg
aWYgKCFzaG91bGRQZXJzaXN0KCkpIHsKKyAgICAgICAgbV92b2xhdGlsZVN0b3JhZ2UucmVtb3Zl
KGtleSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9zdG9yYWdlLT5yZW1vdmUoa2V5
KTsKK30KKwogdm9pZCBDYWNoZXM6OmNsZWFyTWVtb3J5UmVwcmVzZW50YXRpb24oKQogewogICAg
IG1ha2VEaXJ0eSgpOwogICAgIG1fY2FjaGVzLmNsZWFyKCk7CiAgICAgbV9pc0luaXRpYWxpemVk
ID0gZmFsc2U7CiAgICAgbV9zdG9yYWdlID0gbnVsbHB0cjsKLSAgICBpZiAobV9lbmdpbmUpCi0g
ICAgICAgIG1fZW5naW5lLT5yZW1vdmVDYWNoZXMobV9vcmlnaW4pOwogfQogCiBib29sIENhY2hl
czo6aXNEaXJ0eSh1aW50NjRfdCB1cGRhdGVDb3VudGVyKSBjb25zdApAQCAtMjgyLDYgKzM3MCwx
NyBAQCBib29sIENhY2hlczo6aXNEaXJ0eSh1aW50NjRfdCB1cGRhdGVDb3VudGVyKSBjb25zdAog
ICAgIHJldHVybiBtX3VwZGF0ZUNvdW50ZXIgIT0gdXBkYXRlQ291bnRlcjsKIH0KIAorY29uc3Qg
TmV0d29ya0NhY2hlOjpTYWx0JiBDYWNoZXM6OnNhbHQoKSBjb25zdAoreworICAgIGlmIChtX2Vu
Z2luZSkKKyAgICAgICAgcmV0dXJuIG1fZW5naW5lLT5zYWx0KCk7CisKKyAgICBpZiAoIW1fdm9s
YXRpbGVTYWx0KQorICAgICAgICBtX3ZvbGF0aWxlU2FsdCA9IFNhbHQgeyB9OworCisgICAgcmV0
dXJuIG1fdm9sYXRpbGVTYWx0LnZhbHVlKCk7Cit9CisKIENhY2hlSW5mb3MgQ2FjaGVzOjpjYWNo
ZUluZm9zKHVpbnQ2NF90IHVwZGF0ZUNvdW50ZXIpIGNvbnN0CiB7CiAgICAgVmVjdG9yPENhY2hl
SW5mbz4gY2FjaGVJbmZvczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5oCmluZGV4IGYzMTNmZDFj
NGNiOGI5ZmFmY2I2NDY2ODg2OGNmNDM3YWQ1OTcyMzIuLjRhMmE3NzkyZWZlYTZkYWZhNjQ0NDA1
M2VjNzA4YmIwNTNlNmFmMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmgKKysrIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuaApAQCAtNTIsMTcg
KzUyLDIzIEBAIHB1YmxpYzoKICAgICBDYWNoZSogZmluZCh1aW50NjRfdCBpZGVudGlmaWVyKTsK
ICAgICB2b2lkIGFwcGVuZFJlcHJlc2VudGF0aW9uKFN0cmluZ0J1aWxkZXImKSBjb25zdDsKIAor
ICAgIHZvaWQgcmVhZFJlY29yZHNMaXN0KENhY2hlJiwgTmV0d29ya0NhY2hlOjpTdG9yYWdlOjpU
cmF2ZXJzZUhhbmRsZXImJik7CisgICAgdm9pZCByZWFkUmVjb3JkKGNvbnN0IE5ldHdvcmtDYWNo
ZTo6S2V5JiwgV1RGOjpGdW5jdGlvbjx2b2lkKEV4cGVjdGVkPFdlYkNvcmU6OkRPTUNhY2hlRW5n
aW5lOjpSZWNvcmQsIFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpFcnJvcj4mJik+JiYpOworICAg
IHZvaWQgd3JpdGVSZWNvcmQoY29uc3QgQ2FjaGUmLCBjb25zdCBSZWNvcmRJbmZvcm1hdGlvbiYs
IFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpSZWNvcmQmJiwgV2ViQ29yZTo6RE9NQ2FjaGVFbmdp
bmU6OkNvbXBsZXRpb25DYWxsYmFjayYmKTsKKyAgICB2b2lkIHJlbW92ZVJlY29yZChjb25zdCBO
ZXR3b3JrQ2FjaGU6OktleSYpOworCisgICAgY29uc3QgTmV0d29ya0NhY2hlOjpTYWx0JiBzYWx0
KCkgY29uc3Q7CisKKyAgICBib29sIHNob3VsZFBlcnNpc3QoKSBjb25zdCB7IHJldHVybiAhbV9y
b290UGF0aC5pc051bGwoKTsgfQorCiBwcml2YXRlOgogICAgIENhY2hlcyhFbmdpbmUmLCBTdHJp
bmcmJiBvcmlnaW4pOwogCiAgICAgdm9pZCByZWFkQ2FjaGVzRnJvbURpc2soV1RGOjpGdW5jdGlv
bjx2b2lkKEV4cGVjdGVkPFZlY3RvcjxDYWNoZT4sIFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpF
cnJvcj4mJik+JiYpOwogICAgIHZvaWQgd3JpdGVDYWNoZXNUb0Rpc2soV2ViQ29yZTo6RE9NQ2Fj
aGVFbmdpbmU6OkNvbXBsZXRpb25DYWxsYmFjayYmKTsKIAotCiAgICAgQ2FjaGUqIGZpbmQoY29u
c3QgU3RyaW5nJiBuYW1lKTsKIAotICAgIGJvb2wgc2hvdWxkUGVyc2lzdCgpIGNvbnN0IHsgcmV0
dXJuICFtX3Jvb3RQYXRoLmlzTnVsbCgpOyB9Ci0KICAgICB2b2lkIG1ha2VEaXJ0eSgpIHsgKytt
X3VwZGF0ZUNvdW50ZXI7IH0KICAgICBib29sIGlzRGlydHkodWludDY0X3QgdXBkYXRlQ291bnRl
cikgY29uc3Q7CiAKQEAgLTc0LDYgKzgwLDggQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8Q2FjaGU+
IG1fY2FjaGVzOwogICAgIFZlY3RvcjxDYWNoZT4gbV9yZW1vdmVkQ2FjaGVzOwogICAgIFJlZlB0
cjxOZXR3b3JrQ2FjaGU6OlN0b3JhZ2U+IG1fc3RvcmFnZTsKKyAgICBIYXNoTWFwPE5ldHdvcmtD
YWNoZTo6S2V5LCBXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6UmVjb3JkPiBtX3ZvbGF0aWxlU3Rv
cmFnZTsKKyAgICBtdXRhYmxlIHN0ZDo6b3B0aW9uYWw8TmV0d29ya0NhY2hlOjpTYWx0PiBtX3Zv
bGF0aWxlU2FsdDsKICAgICBWZWN0b3I8V2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OkNvbXBsZXRp
b25DYWxsYmFjaz4gbV9wZW5kaW5nSW5pdGlhbGl6YXRpb25DYWxsYmFja3M7CiB9OwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0
b3JhZ2UuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVTdG9yYWdlLmNwcAppbmRleCA4MDNhOTlmYmRkZDZkOGQyMjcwYWQ1NWM5YmNiNTBhMDUxYTQ0
YjNmLi4wYjY1MjhkZDcyOGZiOTMzMGFhOWQwNTQyODU3NGNmNDYwZDA5YWYyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hl
U3RvcmFnZS5jcHAKQEAgLTg0NiwxMCArODQ2LDcgQEAgdm9pZCBTdG9yYWdlOjpzdG9yZShjb25z
dCBSZWNvcmQmIHJlY29yZCwgTWFwcGVkQm9keUhhbmRsZXImJiBtYXBwZWRCb2R5SGFuZGxlcikK
ICAgICBpZiAoIWlzSW5pdGlhbFdyaXRlKQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBEZWxh
eSB0aGUgc3RhcnQgb2Ygd3JpdGVzIGEgYml0IHRvIGF2b2lkIGFmZmVjdGluZyBlYXJseSBwYWdl
IGxvYWQuCi0gICAgLy8gQ29tcGxldGluZyB3cml0ZXMgd2lsbCBkaXNwYXRjaCBtb3JlIHdyaXRl
cyB3aXRob3V0IGRlbGF5LgotICAgIHN0YXRpYyBjb25zdCBTZWNvbmRzIGluaXRpYWxXcml0ZURl
bGF5ID0gMV9zOwotICAgIG1fd3JpdGVPcGVyYXRpb25EaXNwYXRjaFRpbWVyLnN0YXJ0T25lU2hv
dChpbml0aWFsV3JpdGVEZWxheSk7CisgICAgbV93cml0ZU9wZXJhdGlvbkRpc3BhdGNoVGltZXIu
c3RhcnRPbmVTaG90KG1faW5pdGlhbFdyaXRlRGVsYXkpOwogfQogCiB2b2lkIFN0b3JhZ2U6OnRy
YXZlcnNlKGNvbnN0IFN0cmluZyYgdHlwZSwgVHJhdmVyc2VGbGFncyBmbGFncywgVHJhdmVyc2VI
YW5kbGVyJiYgdHJhdmVyc2VIYW5kbGVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmggYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuaAppbmRleCA0MTJlZDllYzU3
MzExM2Q4ZTUxYjJjZmUzMWJlYjA1Zjk1ZWQ5NDc5Li5iNjg4ZGNkNGUwYTc1ZWExMmE5ZDEwZGRl
N2M5YmI0YzhmOWY0YjQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuaApAQCAtMTA0LDYgKzEwNCw4IEBAIHB1
YmxpYzoKIAogICAgIH5TdG9yYWdlKCk7CiAKKyAgICB2b2lkIHdyaXRlV2l0aG91dFdhaXRpbmco
KSB7IG1faW5pdGlhbFdyaXRlRGVsYXkgPSAwX3M7IH07CisKIHByaXZhdGU6CiAgICAgU3RvcmFn
ZShjb25zdCBTdHJpbmcmIGRpcmVjdG9yeVBhdGgsIE1vZGUsIFNhbHQpOwogCkBAIC0xODIsNiAr
MTg0LDEwIEBAIHByaXZhdGU6CiAgICAgUmVmPFdvcmtRdWV1ZT4gbV9zZXJpYWxCYWNrZ3JvdW5k
SU9RdWV1ZTsKIAogICAgIEJsb2JTdG9yYWdlIG1fYmxvYlN0b3JhZ2U7CisKKyAgICAvLyBCeSBk
ZWZhdWx0LCBkZWxheSB0aGUgc3RhcnQgb2Ygd3JpdGVzIGEgYml0IHRvIGF2b2lkIGFmZmVjdGlu
ZyBlYXJseSBwYWdlIGxvYWQuCisgICAgLy8gQ29tcGxldGluZyB3cml0ZXMgd2lsbCBkaXNwYXRj
aCBtb3JlIHdyaXRlcyB3aXRob3V0IGRlbGF5LgorICAgIFNlY29uZHMgbV9pbml0aWFsV3JpdGVE
ZWxheSB7IDFfcyB9OwogfTsKIAogLy8gRklYTUU6IFJlbW92ZSwgdXNlZCBieSBOZXR3b3JrQ2Fj
aGVTdGF0aXN0aWNzIG9ubHkuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNzdiNWI5N2RiMGE1MGU4YTkxNDQ0ZWQxYWM2NDg5
ZDBmNTMzNjk2NC4uMTk1MjZkZWRhYzAzMGNiZDE3MjM5MDljMTg3YjRjYzBmNDMxZWRhNyAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE0IEBACisyMDE3LTA5LTEzICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFw
cGxlLmNvbT4KKworICAgICAgICBBZGQgQ2FjaGUgQVBJIHN1cHBvcnQgb2YgcmVjb3JkcyBwZXJz
aXN0ZW5jeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTc2ODQ1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBodHRwL3Rlc3RzL2NhY2hlLXN0b3JhZ2UvY2FjaGUtcGVyc2lzdGVuY3kuaHR0cHMuaHRtbDoK
KyAgICAgICAgKiBodHRwL3Rlc3RzL2NhY2hlLXN0b3JhZ2UvY2FjaGUtcmVjb3Jkcy1wZXJzaXN0
ZW5jeS5odHRwcy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvY2Fj
aGUtc3RvcmFnZS9jYWNoZS1yZWNvcmRzLXBlcnNpc3RlbmN5Lmh0dHBzLmh0bWw6IEFkZGVkLgor
CiAyMDE3LTA5LTEzICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+
CiAKICAgICAgICAgRm9sbG93dXAgKHIyMjE4MDUpOiBBZGRyZXNzIGNvbW1lbnRzIGFuZCBhZGQg
bW9yZSB0ZXN0cwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9jYWNoZS1zdG9y
YWdlL2NhY2hlLXBlcnNpc3RlbmN5Lmh0dHBzLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L2NhY2hlLXN0b3JhZ2UvY2FjaGUtcGVyc2lzdGVuY3kuaHR0cHMuaHRtbAppbmRleCBkMWVhZDRk
NGFmMjViY2U4ZjU0ZjYwYThhMzJkZDFkNzc0MTFiOGY4Li5kYzllOTZiNjVlOGMyNDFmNzA3OTZl
NjU5NjVlMjU3ZDljMzUyY2RkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2Nh
Y2hlLXN0b3JhZ2UvY2FjaGUtcGVyc2lzdGVuY3kuaHR0cHMuaHRtbAorKysgYi9MYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL2NhY2hlLXN0b3JhZ2UvY2FjaGUtcGVyc2lzdGVuY3kuaHR0cHMuaHRtbApA
QCAtNDIsMTEgKzQyLDExIEBACiAgICAgcHJvbWlzZV90ZXN0KHRlc3QgPT4gewogICAgICAgICBp
ZiAod2luZG93LnRlc3RSdW5uZXIpCiAgICAgICAgICAgICB0ZXN0UnVubmVyLnNldFByaXZhdGVC
cm93c2luZ0VuYWJsZWQoZmFsc2UpOwotICAgICAgICB2YXIgY2xlYXJQcm9taXNlOwotICAgICAg
ICBpZiAod2luZG93LmludGVybmFscykKLSAgICAgICAgICAgIGNsZWFyUHJvbWlzZSA9aW50ZXJu
YWxzLmNsZWFyQ2FjaGVTdG9yYWdlTWVtb3J5UmVwcmVzZW50YXRpb24oKTsKIAotICAgICAgICBy
ZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNsZWFyUHJvbWlzZSkudGhlbigoKSA9PiB7CisgICAgICAg
IHJldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHsKKyAgICAgICAgICAgIGlmICh3
aW5kb3cuaW50ZXJuYWxzKQorICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbHMuY2xlYXJD
YWNoZVN0b3JhZ2VNZW1vcnlSZXByZXNlbnRhdGlvbigpOworICAgICAgICB9KS50aGVuKCgpID0+
IHsKICAgICAgICAgICAgIHJldHVybiBzZWxmLmNhY2hlcy5rZXlzKCk7CiAgICAgICAgIH0pLnRo
ZW4oa2V5cyA9PiB7CiAgICAgICAgICAgICB2YXIgcGVuZGluZyA9IFtdOwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9jYWNoZS1zdG9yYWdlL2NhY2hlLXJlY29yZHMtcGVyc2lz
dGVuY3kuaHR0cHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9jYWNoZS1z
dG9yYWdlL2NhY2hlLXJlY29yZHMtcGVyc2lzdGVuY3kuaHR0cHMtZXhwZWN0ZWQudHh0Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmMxOWNjZWEzYjRkYzRlNmEwMjMwNTMyYzE3OWZlMTEwNDE0MWY4NjYKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2NhY2hlLXN0b3JhZ2UvY2FjaGUtcmVj
b3Jkcy1wZXJzaXN0ZW5jeS5odHRwcy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw5IEBACisKK1BB
U1MgQ2xlYW5pbmcgZXhpc3RpbmcgY2FjaGVzIAorUEFTUyBDYWNoZS5wdXQgY2FsbGVkIHR3aWNl
IHdpdGggbWF0Y2hpbmcgUmVxdWVzdHMgLSBrZXlzIHNob3VsZCByZW1haW4gdGhlIHNhbWUgLSB0
ZXN0aW5nIHBlcnNpc3RlbmN5IAorUEFTUyBDbGVhbmluZyBjcmVhdGVkIGNhY2hlcyAKK1BBU1Mg
Q2hlY2tpbmcgcGVyc2lzdGVuY3kgb2YgY2FjaGUga2V5cyAKK1BBU1MgQ2hlY2tpbmcgcGVyc2lz
dGVuY3kgb2YgcmVzcG9uc2UgCitQQVNTIENoZWNraW5nIHBlcnNpc3RlbmN5IG9mIHJlc3BvbnNl
IGJvZHkgCitQQVNTIFRlc3Rpbmcgb3ZlcnJpZGluZyBvZiBhbiBleGlzdGluZyBjYWNoZWQgcmVj
b3JkIHRoYXQgaXMgbm90IGluIG1lbW9yeSAKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9jYWNoZS1zdG9yYWdlL2NhY2hlLXJlY29yZHMtcGVyc2lzdGVuY3kuaHR0cHMuaHRt
bCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvY2FjaGUtc3RvcmFnZS9jYWNoZS1yZWNvcmRzLXBl
cnNpc3RlbmN5Lmh0dHBzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmI0YmFhMDBhYmVhYTVkNTUxN2MzMDg1
ZTgxYWIyODJhMzcyYTg1MAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVz
dHMvY2FjaGUtc3RvcmFnZS9jYWNoZS1yZWNvcmRzLXBlcnNpc3RlbmN5Lmh0dHBzLmh0bWwKQEAg
LTAsMCArMSwxMzMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5D
YWNoZSBTdG9yYWdlOiB0ZXN0aW5nIENhY2hlIHBlcnNpc3RlbmN5PC90aXRsZT4KKzxzY3JpcHQg
c3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIv
cmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5
PgorICAgIDxzY3JpcHQ+CitmdW5jdGlvbiBhc3NlcnRfaGVhZGVyX2VxdWFscyhhY3R1YWwsIGV4
cGVjdGVkLCBkZXNjcmlwdGlvbikgeworICAgIGFzc2VydF9jbGFzc19zdHJpbmcoYWN0dWFsLCAi
SGVhZGVycyIsIGRlc2NyaXB0aW9uKTsKKyAgICB2YXIgaGVhZGVyOworICAgIHZhciBhY3R1YWxf
aGVhZGVycyA9IFtdOworICAgIHZhciBleHBlY3RlZF9oZWFkZXJzID0gW107CisgICAgZm9yICho
ZWFkZXIgb2YgYWN0dWFsKQorICAgICAgICBhY3R1YWxfaGVhZGVycy5wdXNoKGhlYWRlclswXSAr
ICI6ICIgKyBoZWFkZXJbMV0pOworICAgIGZvciAoaGVhZGVyIG9mIGV4cGVjdGVkKQorICAgICAg
ICBleHBlY3RlZF9oZWFkZXJzLnB1c2goaGVhZGVyWzBdICsgIjogIiArIGhlYWRlclsxXSk7Cisg
ICAgYXNzZXJ0X2FycmF5X2VxdWFscyhhY3R1YWxfaGVhZGVycywgZXhwZWN0ZWRfaGVhZGVycywK
KyAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICsgIiBIZWFkZXJzIGRpZmZlci4i
KTsKK30KKworZnVuY3Rpb24gYXNzZXJ0X3Jlc3BvbnNlX2VxdWFscyhhY3R1YWwsIGV4cGVjdGVk
LCBkZXNjcmlwdGlvbikgeworICAgIGFzc2VydF9jbGFzc19zdHJpbmcoYWN0dWFsLCAiUmVzcG9u
c2UiLCBkZXNjcmlwdGlvbik7CisgICAgWyJ0eXBlIiwgInVybCIsICJzdGF0dXMiLCAib2siLCAi
c3RhdHVzVGV4dCJdLmZvckVhY2goZnVuY3Rpb24oYXR0cmlidXRlKSB7CisgICAgICAgIGFzc2Vy
dF9lcXVhbHMoYWN0dWFsW2F0dHJpYnV0ZV0sIGV4cGVjdGVkW2F0dHJpYnV0ZV0sCisgICAgICAg
ICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gKyAiIEF0dHJpYnV0ZXMgZGlmZmVyOiAiICsgYXR0
cmlidXRlICsgIi4iKTsKKyAgICB9KTsKKyAgICBhc3NlcnRfaGVhZGVyX2VxdWFscyhhY3R1YWwu
aGVhZGVycywgZXhwZWN0ZWQuaGVhZGVycywgZGVzY3JpcHRpb24pOworfQorCitmdW5jdGlvbiBh
c3NlcnRfcmVxdWVzdF9lcXVhbHMoYWN0dWFsLCBleHBlY3RlZCwgZGVzY3JpcHRpb24pIHsKKyAg
ICBhc3NlcnRfY2xhc3Nfc3RyaW5nKGFjdHVhbCwgIlJlcXVlc3QiLCBkZXNjcmlwdGlvbik7Cisg
ICAgWyJ1cmwiXS5mb3JFYWNoKGZ1bmN0aW9uKGF0dHJpYnV0ZSkgeworICAgICAgICBhc3NlcnRf
ZXF1YWxzKGFjdHVhbFthdHRyaWJ1dGVdLCBleHBlY3RlZFthdHRyaWJ1dGVdLAorICAgICAgICAg
ICAgICAgICAgICAgIGRlc2NyaXB0aW9uICsgIiBBdHRyaWJ1dGVzIGRpZmZlcjogIiArIGF0dHJp
YnV0ZSArICIuIik7CisgICAgfSk7CisgICAgYXNzZXJ0X2hlYWRlcl9lcXVhbHMoYWN0dWFsLmhl
YWRlcnMsIGV4cGVjdGVkLmhlYWRlcnMsIGRlc2NyaXB0aW9uKTsKK30KKworZnVuY3Rpb24gYXNz
ZXJ0X3JlcXVlc3RfYXJyYXlfZXF1YWxzKGFjdHVhbCwgZXhwZWN0ZWQsIGRlc2NyaXB0aW9uKSB7
CisgICAgYXNzZXJ0X3RydWUoQXJyYXkuaXNBcnJheShhY3R1YWwpLCBkZXNjcmlwdGlvbik7Cisg
ICAgYXNzZXJ0X2VxdWFscyhhY3R1YWwubGVuZ3RoLCBleHBlY3RlZC5sZW5ndGgsIGRlc2NyaXB0
aW9uKTsKKyAgICBhY3R1YWwuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgaW5kZXgpIHsKKyAgICAg
ICAgYXNzZXJ0X3JlcXVlc3RfZXF1YWxzKHZhbHVlLCBleHBlY3RlZFtpbmRleF0sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiArICIgOiBvYmplY3RbIiArIGluZGV4
ICsgIl0iKTsKKyAgICB9KTsKK30KKworcHJvbWlzZV90ZXN0KHRlc3QgPT4geworICAgIHJldHVy
biBzZWxmLmNhY2hlcy5rZXlzKCkudGhlbihrZXlzID0+IHsKKyAgICAgICAgdmFyIHBlbmRpbmcg
PSBbXTsKKyAgICAgICAgZm9yIChrZXkgb2Yga2V5cykKKyAgICAgICAgICAgIHBlbmRpbmcucHVz
aChzZWxmLmNhY2hlcy5kZWxldGUoa2V5c1swXSkpOworICAgICAgICByZXR1cm4gUHJvbWlzZS5h
bGwocGVuZGluZyk7CisgICAgfSk7Cit9LCAiQ2xlYW5pbmcgZXhpc3RpbmcgY2FjaGVzIik7CisK
K3ZhciB0ZXN0X3VybCA9ICdodHRwczovL2V4YW1wbGUuY29tL2Zvbyc7Cit2YXIgdGVzdF9ib2R5
ID0gJ0hlbGxvIHdvcmxkISc7CisKK3Byb21pc2VfdGVzdCgoKSA9PiB7CisgICAgdmFyIGNhY2hl
OworICAgIHZhciBjYWNoZV9rZXlzOworICAgIHZhciBmaXJzdF9yZXNwb25zZSA9IG5ldyBSZXNw
b25zZSgiT2xkIGJvZHkiLCB7IHN0YXR1c1RleHQ6ICdPbGQgc3RhdHVzJyB9KTsKKyAgICB2YXIg
YWx0ZXJuYXRlX3Jlc3BvbnNlID0gbmV3IFJlc3BvbnNlKCJOZXcgYm9keSIsIHsgc3RhdHVzVGV4
dDogJ05ldyBzdGF0dXMnIH0pOworICAgIHJldHVybiBzZWxmLmNhY2hlcy5vcGVuKCJ0ZXN0LWNh
Y2hlLXJlY29yZHMtcGVyc2lzdGVuY3kiKS50aGVuKGMgPT4geworICAgICAgICBjYWNoZSA9IGM7
CisgICAgfSkudGhlbigoKSA9PiB7CisgICAgICAgIHJldHVybiBjYWNoZS5wdXQodGVzdF91cmws
IGZpcnN0X3Jlc3BvbnNlKTsKKyAgICB9KS50aGVuKCgpID0+IHsKKyAgICAgICAgcmV0dXJuIGNh
Y2hlLmtleXMoKTsKKyAgICB9KS50aGVuKGtleXMgPT4geworICAgICAgICBjYWNoZV9rZXlzID0g
a2V5czsKKyAgICAgICAgaWYgKHdpbmRvdy5pbnRlcm5hbHMpCisgICAgICAgICAgICByZXR1cm4g
aW50ZXJuYWxzLmNsZWFyQ2FjaGVTdG9yYWdlTWVtb3J5UmVwcmVzZW50YXRpb24oKTsKKyAgICB9
KS50aGVuKCgpID0+IHsKKyAgICAgICAgcmV0dXJuIHNlbGYuY2FjaGVzLm9wZW4oInRlc3QtY2Fj
aGUtcmVjb3Jkcy1wZXJzaXN0ZW5jeSIpOworICAgIH0pLnRoZW4oYyA9PiB7CisgICAgICAgIGNh
Y2hlID0gYzsKKyAgICAgICAgcmV0dXJuIGNhY2hlLmtleXMoKS50aGVuKChrZXlzKSA9PiB7Cisg
ICAgICAgICAgICB0ZXN0KCgpID0+IHsKKyAgICAgICAgICAgICAgICBhc3NlcnRfcmVxdWVzdF9h
cnJheV9lcXVhbHMoa2V5cywgY2FjaGVfa2V5cyk7CisgICAgICAgICAgICB9LCAiQ2hlY2tpbmcg
cGVyc2lzdGVuY3kgb2YgY2FjaGUga2V5cyIpOworICAgICAgICAgICAgcmV0dXJuIGNhY2hlLm1h
dGNoKHRlc3RfdXJsKTsKKyAgICAgICAgfSkudGhlbigocmVzdWx0KSA9PiB7CisgICAgICAgICAg
ICB0ZXN0KCgpID0+IHsKKyAgICAgICAgICAgICAgICBhc3NlcnRfcmVzcG9uc2VfZXF1YWxzKHJl
c3VsdCwgZmlyc3RfcmVzcG9uc2UsICJDYWNoZS5wdXQgc2hvdWxkIHN0b3JlIHRoZSByZXNwb25z
ZSBwZXJzaXN0ZW50bHkiKTsKKyAgICAgICAgICAgIH0sICJDaGVja2luZyBwZXJzaXN0ZW5jeSBv
ZiByZXNwb25zZSIpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC50ZXh0KCk7CisgICAgICAg
IH0pLnRoZW4oKGJvZHkpID0+IHsKKyAgICAgICAgICAgIHRlc3QoKCkgPT4geworICAgICAgICAg
ICAgICAgIGFzc2VydF9lcXVhbHMoYm9keSwgIk9sZCBib2R5IiwgIkNhY2hlIHB1dCBzaG91bGQg
c3RvcmUgdGhlIHJlc3BvbnNlIGJvZHkgcGVyc2lzdGVudGx5LiIpOworICAgICAgICAgICAgfSwg
IkNoZWNraW5nIHBlcnNpc3RlbmN5IG9mIHJlc3BvbnNlIGJvZHkiKTsKKyAgICAgICAgfSk7Cisg
ICAgfSkudGhlbigoKSA9PiB7CisgICAgICAgIHJldHVybiBjYWNoZS5wdXQodGVzdF91cmwsIGFs
dGVybmF0ZV9yZXNwb25zZSk7CisgICAgfSkudGhlbigoKSA9PiB7CisgICAgICAgIHJldHVybiBj
YWNoZS5rZXlzKCk7CisgICAgfSkudGhlbihrZXlzID0+IHsKKyAgICAgICAgY2FjaGVfa2V5cyA9
IGtleXM7CisgICAgICAgIGlmICh3aW5kb3cuaW50ZXJuYWxzKQorICAgICAgICAgICAgcmV0dXJu
IGludGVybmFscy5jbGVhckNhY2hlU3RvcmFnZU1lbW9yeVJlcHJlc2VudGF0aW9uKCk7CisgICAg
fSkudGhlbigoKSA9PiB7CisgICAgICAgIHJldHVybiBzZWxmLmNhY2hlcy5vcGVuKCJ0ZXN0LWNh
Y2hlLXJlY29yZHMtcGVyc2lzdGVuY3kiKTsKKyAgICB9KS50aGVuKGMgPT4geworICAgICAgICBj
YWNoZSA9IGM7CisgICAgICAgIHJldHVybiBjYWNoZS5rZXlzKCk7CisgICAgfSkudGhlbigoa2V5
cykgPT4geworICAgICAgICBhc3NlcnRfcmVxdWVzdF9hcnJheV9lcXVhbHMoa2V5cywgY2FjaGVf
a2V5cyk7CisgICAgfSkudGhlbigoKSA9PiB7CisgICAgICAgIHByb21pc2VfdGVzdCgoKSA9PiB7
CisgICAgICAgICAgICByZXR1cm4gY2FjaGUubWF0Y2godGVzdF91cmwpLnRoZW4oKHJlc3VsdCkg
PT4geworICAgICAgICAgICAgICAgIGFzc2VydF9yZXNwb25zZV9lcXVhbHMocmVzdWx0LCBhbHRl
cm5hdGVfcmVzcG9uc2UsICdDYWNoZS5wdXQgc2hvdWxkIHJlcGxhY2UgZXhpc3RpbmcgJyArICdy
ZXNwb25zZSB3aXRoIG5ldyByZXNwb25zZS4nKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVz
dWx0LnRleHQoKTsKKyAgICAgICAgICAgIH0pLnRoZW4oKGJvZHkpID0+IHsKKyAgICAgICAgICAg
ICAgICBhc3NlcnRfZXF1YWxzKGJvZHksICJOZXcgYm9keSIsICdDYWNoZSBwdXQgc2hvdWxkIHN0
b3JlIG5ldyByZXNwb25zZSBib2R5LicpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0sICdU
ZXN0aW5nIG92ZXJyaWRpbmcgb2YgYW4gZXhpc3RpbmcgY2FjaGVkIHJlY29yZCB0aGF0IGlzIG5v
dCBpbiBtZW1vcnknKTsKKyAgICB9KTsKK30sICdDYWNoZS5wdXQgY2FsbGVkIHR3aWNlIHdpdGgg
bWF0Y2hpbmcgUmVxdWVzdHMgLSBrZXlzIHNob3VsZCByZW1haW4gdGhlIHNhbWUgLSB0ZXN0aW5n
IHBlcnNpc3RlbmN5Jyk7CisKK3Byb21pc2VfdGVzdCh0ZXN0ID0+IHsKKyAgICByZXR1cm4gc2Vs
Zi5jYWNoZXMua2V5cygpLnRoZW4oa2V5cyA9PiB7CisgICAgICAgIHZhciBwZW5kaW5nID0gW107
CisgICAgICAgIGZvciAoa2V5IG9mIGtleXMpCisgICAgICAgICAgICBwZW5kaW5nLnB1c2goc2Vs
Zi5jYWNoZXMuZGVsZXRlKGtleXNbMF0pKTsKKyAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHBl
bmRpbmcpOworICAgIH0pOworfSwgIkNsZWFuaW5nIGNyZWF0ZWQgY2FjaGVzIik7CisgICAgPC9z
Y3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>320793</attachid>
            <date>2017-09-14 11:09:48 -0700</date>
            <delta_ts>2017-09-14 17:33:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-176845-20170914110947.patch</filename>
            <type>text/plain</type>
            <size>55857</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIxOTk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDBiNGM1Y2Q2NGM0YzdhNzdl
Y2Y2YmY0MGY5ZDBhNTFkYWVjNTMzNzIuLmE3ZmFkNjEwMmQwY2FkZDE3MmRhZGUxMmZhMzdkYzc0
ZGJiNzM4MjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTA1IEBACiAyMDE3LTA5LTEzICBZb3Vlbm4g
RmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAorICAgICAgICBBZGQgQ2FjaGUgQVBJIHN1cHBv
cnQgb2YgcmVjb3JkcyBwZXJzaXN0ZW5jeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTc2ODQ1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgSW50cm9kdWNpbmcgYXN5bmNocm9ub3VzIG9wZW5pbmcgb2YgQ2Fj
aGUgb2JqZWN0cy4KKyAgICAgICAgV2hlbiBvcGVuaW5nLCBDYWNoZSBvYmplY3RzIHdpbGwgcmVh
ZCB0aGUgbGlzdCBvZiByZWNvcmRzIGZyb20gdGhlIGRpc2suCisgICAgICAgIFRoZXkga2VlcCBp
biBtZW1vcnkgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiB0byBtYWtlIGFueSBtYXRjaCBvciBy
ZW1vdmUgcmVxdWVzdCB3aXRob3V0IHJlYWRpbmcgZnVydGhlciBpbmZvcm1hdGlvbiBmcm9tIHRo
ZSBkaXNrLgorICAgICAgICBDYWNoZSBvYmplY3RzIHRodXMga2VlcCBkdXJpbmcgdGhlIG9wZW5p
bmcgdGltZSBhIGxpc3Qgb2YgY2FsbGJhY2tzIHRvIGNhbGwgd2hlbiBiZWluZyBvcGVuZWQuCisg
ICAgICAgIFBlcnNpc3RlbnQgc3RvcmFnZSBpcyBpbXBsZW1lbnRlZCB0aHJvdWdoIE5ldHdvcmtD
YWNoZTo6U3RvcmFnZS4KKworICAgICAgICBBIENhY2hlIG9iamVjdCBpcyBhZGRlZCBhIHVuaXF1
ZSBuYW1lIHNvIHRoYXQgcmVjb3JkcyBmcm9tIGEgQ2FjaGUgY2Fubm90IGJlIG1peGVkIHdpdGgg
cmVjb3JkcyBmcm9tIGFub3RoZXIgQ2FjaGUuCisgICAgICAgIFRoaXMgdW5pcXVlIG5hbWUgaXMg
c3RvcmVkIHBlcnNpc3Rlbmx5IGluIGFkZGl0aW9uIHRvIHRoZSBDYWNoZSBuYW1lLgorICAgICAg
ICBUaGlzIHVuaXF1ZSBuYW1lIGlzIHVzZWQgYXMgdGhlIGtleSB0eXBlIGdpdmVuIHRvIHRoZSBz
dG9yYWdlLgorCisgICAgICAgIFJlcXVlc3QsIHJlc3BvbnNlIGFuZCByZXNwb25zZWJvZHkgZGF0
YSBhcmUgbm8gbG9uZ2VyIGtlcHQgYnkgdGhlIENhY2hlIG9iamVjdC4KKyAgICAgICAgRm9yIHJl
Z3VsYXIgc2Vzc2lvbnMsIHRoaXMgaW5mb3JtYXRpb24gaXMga2VwdCBvbiB0aGUgZGlzayB0aHJv
dWdoIE5ldHdvcmtDYWNoZTo6U3RvcmFnZS4KKyAgICAgICAgSW5zZXJ0aW9uIHRpbWUgaXMgYWxz
byBzdG9yZWQgcGVyc2lzdGVudGx5IHNvIGFzIHRvIGtlZXAgdGhlIG9yZGVyaW5nIG9mIHRoZSBy
ZWNvcmRzIGNvbnNpc3RlbnQuCisgICAgICAgIEZvciBwcml2YXRlIGJyb3dzaW5nIHNlc3Npb25z
LCB0aGlzIGluZm9ybWF0aW9uIGlzIGtlcHQgaW4gYSBtYXAgb3duZWQgYnkgdGhlIENhY2hlcyBv
YmplY3QuCisgICAgICAgIFJlY29yZERhdGEgaXMgcmVuYW1lZCB0byBSZWNvcmRJbmZvcm1hdGlv
biBhcyBpdCBub3cgb25seSBjb250YWlucyB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBoYW5kbGUg
dGhlIGRpZmZlcmVudCBDYWNoZSBhY3Rpb25zLgorCisgICAgICAgIEZvciBldmVyeSByZWNvcmQg
cmV0cmlldmFsIGFjdGlvbiwgYSBSZWFkUmVjb3JkVGFza0NvdW50ZXIgaXMgdXNlZC4KKyAgICAg
ICAgSXRzIHB1cnBvc2UgaXMgdG8gYWxsb3cgcmV0cmlldmluZyB0aGUgcmVjb3JkIGRhdGEgb24g
dGhlIGRpc2sgaW4gcGFyYWxsZWwsCisgICAgICAgIGFuZCB0aGVuIHNlbmQgYmFjayB0aGUgaW5m
b3JtYXRpb24gd2hlbiBldmVyeXRoaW5nIGlzIHJlYWQuCisgICAgICAgIEluIGNhc2Ugc29tZSBy
ZWNvcmRzIGNhbm5vdCBiZSBjb3JyZWN0bHkgcmVhZCwgdGhleSBhcmUgcmVtb3ZlZCBhdXRvbWF0
aWNhbGx5IGF0IHRoYXQgcG9pbnQuCisgICAgICAgIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9u
IGxvYWRzIGFsbCBpbmZvcm1hdGlvbiBpbiBtZW1vcnkgaW5jbHVkaW5nIHJlc3BvbnNlIGJvZGll
cy4KKyAgICAgICAgRnVydGhlciBpbXByb3ZlbWVudHMgbWlnaHQgY29uc2lkZXIgc3RyZWFtaW5n
IHRoZSByZXNwb25zZSBib2RpZXMgcHJvZ3Jlc3NpdmVseS4KKworICAgICAgICBGb3IgZXZlcnkg
c3RvcmVkIHJlY29yZCwgYW4gQXN5bmNocm9ub3VzUHV0VGFza0NvdW50ZXIgaXMgdXNlZC4KKyAg
ICAgICAgSXRzIHB1cnBvc2UgaXMgYWxzbyB0byB3YWl0IGZvciBhbGwgcHV0IGFjdGlvbnMgdG8g
YmUgY29tcGxldGVkIGJlZm9yZSBleGVjdXRpbmcgdGhlIGNvbXBsZXRpb24gY2FsbGJhY2suCisg
ICAgICAgIEluIHNvbWUgY2FzZXMsIGEgcmVjb3JkIG5lZWRzIHRvIGJlIG92ZXJyaWRlbi4KKyAg
ICAgICAgSW4gdGhhdCBjYXNlLCBhcyBwZXIgdGhlIHNwZWNpZmljYXRpb24sIG9ubHkgdGhlIGRh
dGEgcmVsYXRlZCB0byB0aGUgcmVzcG9uc2UgaXMgdG8gYmUgbW9kaWZpZWQuCisgICAgICAgIFRo
aXMgcmVxdWlyZXMgcmVhZGluZyB0aGUgcmVjb3JkIHJlcXVlc3QgZGF0YSBvbiBkaXNrIGJlZm9y
ZSBhY3R1YWxseSB3cml0aW5nIHRoZSB3aG9sZSByZWNvcmQgYWdhaW4uCisgICAgICAgIFRoaXMg
aXMgaW1wbGVtZW50ZWQgaW4gdXBkYXRlUmVjb3JkVG9EaXNrLgorCisgICAgICAgIFRoZSBDYWNo
ZSBvYmplY3QgaXMgZGVsZWdhdGluZyBhbGwgcmVjb3JkIHdyaXRpbmcvcmVhZGluZyB0YXNrcyB0
byBpdHMgQ2FjaGVzIG9iamVjdC4KKyAgICAgICAgVGhlIENhY2hlcyBvYmplY3QgaXMgcmVzcG9u
c2libGUgdG8gaGFuZGxlIHBlcnNpc3RlbnQvcHJpdmF0ZSBzZXNzaW9ucy4KKworICAgICAgICAq
IE5ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OkNhY2hlU3RvcmFnZTo6RW5naW5lOjpyZXRyaWV2ZVJlY29yZHMpOiBNYWtpbmcgc3Vy
ZSBDYWNoZSBvYmplY3QgaXMgb3BlbmVkLgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6
OkVuZ2luZTo6cmVhZENhY2hlKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFn
ZTo6RW5naW5lOjp1bmxvY2spOiBEaXNwb3NpbmcgdGhlIGNhY2hlIHdpdGhvdXQgZ29pbmcgdGhy
b3VnaCBpbml0aWFsaXppbmcgaXQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2Fj
aGVTdG9yYWdlRW5naW5lQ2FjaGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6
OmNvbXB1dGVLZXlVUkwpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OnF1ZXJ5Q2Fj
aGUpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OnVwZGF0ZVZhcnlJbmZvcm1hdGlv
bik6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OnRvUmVjb3JkSW5mb3Jt
YXRpb24pOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjpDYWNoZSk6Cisg
ICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6Om9wZW4pOgorICAgICAgICAoV2Vi
S2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjpmaW5pc2hPcGVuaW5nKToKKyAgICAgICAgKFdlYktp
dDo6Q2FjaGVTdG9yYWdlOjpSZWFkUmVjb3JkVGFza0NvdW50ZXI6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6UmVhZFJlY29yZFRhc2tDb3VudGVyOjp+UmVhZFJlY29y
ZFRhc2tDb3VudGVyKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpSZWFkUmVjb3Jk
VGFza0NvdW50ZXI6OmFwcGVuZFJlY29yZCk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFn
ZTo6UmVhZFJlY29yZFRhc2tDb3VudGVyOjpSZWFkUmVjb3JkVGFza0NvdW50ZXIpOgorICAgICAg
ICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjpyZXRyaWV2ZVJlY29yZCk6CisgICAgICAg
IChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OnJldHJpZXZlUmVjb3Jkcyk6CisgICAgICAg
IChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OmFkZFJlY29yZCk6CisgICAgICAgIChXZWJL
aXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OnJlY29yZHNGcm9tVVJMKToKKyAgICAgICAgKFdlYktp
dDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6cmVjb3Jkc0Zyb21VUkwgY29uc3QpOgorICAgICAgICAo
V2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkFzeW5jaHJvbm91c1B1dFRhc2tDb3VudGVyOjpjcmVhdGUp
OgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkFzeW5jaHJvbm91c1B1dFRhc2tDb3Vu
dGVyOjp+QXN5bmNocm9ub3VzUHV0VGFza0NvdW50ZXIpOgorICAgICAgICAoV2ViS2l0OjpDYWNo
ZVN0b3JhZ2U6OkFzeW5jaHJvbm91c1B1dFRhc2tDb3VudGVyOjpvbkNvbXBsZXRpb24pOgorICAg
ICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkFzeW5jaHJvbm91c1B1dFRhc2tDb3VudGVyOjpz
ZXRFcnJvcik6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OnB1dCk6Cisg
ICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OnJlbW92ZSk6CisgICAgICAgIChX
ZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OnJlbW92ZUZyb21SZWNvcmRMaXN0KToKKyAgICAg
ICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6d3JpdGVSZWNvcmRUb0Rpc2spOgorICAg
ICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjp1cGRhdGVSZWNvcmRUb0Rpc2spOgor
ICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjpyZWFkUmVjb3JkRnJvbURpc2sp
OgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjpyZW1vdmVSZWNvcmRGcm9t
RGlzayk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OmVuY29kZSk6Cisg
ICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6ZGVjb2RlUmVjb3JkSGVhZGVyKToKKyAgICAg
ICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6ZGVjb2RlKToKKyAgICAgICAgKFdlYktp
dDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6a2V5cyBjb25zdCk6CisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUuaDoKKyAgICAgICAgKFdlYktpdDo6
Q2FjaGVTdG9yYWdlOjpDYWNoZTo6aXNPcGVuZWQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpD
YWNoZVN0b3JhZ2U6OkNhY2hlOjp1bmlxdWVOYW1lIGNvbnN0KToKKyAgICAgICAgKiBOZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJLaXQ6
OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjpvcGVuKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9y
YWdlOjpDYWNoZXM6OnJlbW92ZSk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2Fj
aGVzOjpkaXNwb3NlKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjplbmNvZGVDYWNo
ZU5hbWVzKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpkZWNvZGVDYWNoZXNOYW1l
cyk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjpyZWFkQ2FjaGVzRnJv
bURpc2spOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6cmVhZFJlY29y
ZHNMaXN0KToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6OndyaXRlUmVj
b3JkKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6OnJlYWRSZWNvcmQp
OgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6cmVtb3ZlUmVjb3JkKToK
KyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6OmNsZWFyTWVtb3J5UmVwcmVz
ZW50YXRpb24pOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6c2FsdCBj
b25zdCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5l
Q2FjaGVzLmg6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjpzaG91bGRQ
ZXJzaXN0IGNvbnN0KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVTdG9yYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpTdG9yYWdlOjpz
dG9yZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFn
ZS5oOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlN0b3JhZ2U6OndyaXRlV2l0aG91
dFdhaXRpbmcpOgorCisyMDE3LTA5LTEzICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNv
bT4KKwogICAgICAgICBJbnRlcm5hbHMgY2xlYXJDYWNoZVN0b3JhZ2VNZW1vcnlSZXByZXNlbnRh
dGlvbiBzaG91bGQgcmV0dXJuIGEgUHJvbWlzZQogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc2ODE4CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lLmNwcCBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lLmNwcAppbmRleCA1ODMy
YzFhMTE3OTVlOWZjZDhiMmYxN2FiOGNmNTdmNmZlZmNjMzBiLi40MDhmNjJiMWNjYjRmZmI4M2U5
ZWExNzk4NmQzNmQwNGQzZjk5ZTIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmUuY3BwCkBAIC0xMzIsOCArMTMy
LDcgQEAgdm9pZCBFbmdpbmU6OnJldHJpZXZlUmVjb3Jkcyh1aW50NjRfdCBjYWNoZUlkZW50aWZp
ZXIsIFdlYkNvcmU6OlVSTCYmIHVybCwgUmVjb3IKICAgICAgICAgICAgIGNhbGxiYWNrKG1ha2VV
bmV4cGVjdGVkKHJlc3VsdC5lcnJvcigpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KLQotICAgICAgICBjYWxsYmFjayhyZXN1bHQudmFsdWUoKS5nZXQoKS5yZXRyaWV2ZVJlY29y
ZHModXJsKSk7CisgICAgICAgIHJlc3VsdC52YWx1ZSgpLmdldCgpLnJldHJpZXZlUmVjb3Jkcyh1
cmwsIFdURk1vdmUoY2FsbGJhY2spKTsKICAgICB9KTsKIH0KIApAQCAtMjE3LDEyICsyMTYsMjgg
QEAgdm9pZCBFbmdpbmU6OnJlYWRDYWNoZXNGcm9tRGlzayhjb25zdCBTdHJpbmcmIG9yaWdpbiwg
Q2FjaGVzQ2FsbGJhY2smJiBjYWxsYmFjaykKIAogdm9pZCBFbmdpbmU6OnJlYWRDYWNoZSh1aW50
NjRfdCBjYWNoZUlkZW50aWZpZXIsIENhY2hlQ2FsbGJhY2smJiBjYWxsYmFjaykKIHsKLSAgICAv
LyBGSVhNRTogSW1wbGVtZW50IHJlYWRpbmcuCiAgICAgYXV0byogY2FjaGUgPSB0aGlzLT5jYWNo
ZShjYWNoZUlkZW50aWZpZXIpOwogICAgIGlmICghY2FjaGUpIHsKICAgICAgICAgY2FsbGJhY2so
bWFrZVVuZXhwZWN0ZWQoRXJyb3I6OkludGVybmFsKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CisgICAgaWYgKCFjYWNoZS0+aXNPcGVuZWQoKSkgeworICAgICAgICBjYWNoZS0+b3BlbihbdGhp
cywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjYWNoZUlkZW50aWZpZXIsIGNhbGxi
YWNrID0gV1RGTW92ZShjYWxsYmFjayldKHN0ZDo6b3B0aW9uYWw8RXJyb3I+JiYgZXJyb3IpIG11
dGFibGUgeworICAgICAgICAgICAgaWYgKGVycm9yKSB7CisgICAgICAgICAgICAgICAgY2FsbGJh
Y2sobWFrZVVuZXhwZWN0ZWQoZXJyb3IudmFsdWUoKSkpOworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYXV0byogY2FjaGUgPSB0aGlzLT5jYWNo
ZShjYWNoZUlkZW50aWZpZXIpOworICAgICAgICAgICAgaWYgKCFjYWNoZSkgeworICAgICAgICAg
ICAgICAgIGNhbGxiYWNrKG1ha2VVbmV4cGVjdGVkKEVycm9yOjpJbnRlcm5hbCkpOworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFTU0VSVChjYWNo
ZS0+aXNPcGVuZWQoKSk7CisgICAgICAgICAgICBjYWxsYmFjayhzdGQ6OnJlZmVyZW5jZV93cmFw
cGVyPENhY2hlPiB7ICpjYWNoZSB9KTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CiAgICAgY2FsbGJhY2soc3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxDYWNoZT4geyAqY2FjaGUg
fSk7CiB9CiAKQEAgLTMyOCwxMiArMzQzLDExIEBAIHZvaWQgRW5naW5lOjp1bmxvY2sodWludDY0
X3QgY2FjaGVJZGVudGlmaWVyKQogICAgIGlmICgtLWxvY2tDb3VudC0+dmFsdWUpCiAgICAgICAg
IHJldHVybjsKIAotICAgIHJlYWRDYWNoZShjYWNoZUlkZW50aWZpZXIsIFt0aGlzXShDYWNoZU9y
RXJyb3ImJiByZXN1bHQpIG11dGFibGUgewotICAgICAgICBpZiAoIXJlc3VsdC5oYXNWYWx1ZSgp
KQotICAgICAgICAgICAgcmV0dXJuOworICAgIGF1dG8qIGNhY2hlID0gdGhpcy0+Y2FjaGUoY2Fj
aGVJZGVudGlmaWVyKTsKKyAgICBpZiAoIWNhY2hlKQorICAgICAgICByZXR1cm47CiAKLSAgICAg
ICAgcmVzdWx0LnZhbHVlKCkuZ2V0KCkuZGlzcG9zZSgpOwotICAgIH0pOworICAgIGNhY2hlLT5k
aXNwb3NlKCk7CiB9CiAKIFN0cmluZyBFbmdpbmU6OnJlcHJlc2VudGF0aW9uKCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5l
Q2FjaGUuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3Jh
Z2VFbmdpbmVDYWNoZS5jcHAKaW5kZXggNDgxYWRkN2VjY2IxYzVhMjUyM2VlYWY4MmI2NjRiNzNk
ZmVhNjg1ZS4uMmU5ZjlmNTU2N2Y5YTkxNjQ2ZWU2YTgxNzEwM2NhYWZlZGM5YzhhMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdp
bmVDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNo
ZVN0b3JhZ2VFbmdpbmVDYWNoZS5jcHAKQEAgLTI3LDE1ICsyNywxNiBAQAogI2luY2x1ZGUgIkNh
Y2hlU3RvcmFnZUVuZ2luZS5oIgogCiAjaW5jbHVkZSAiQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVz
LmgiCisjaW5jbHVkZSAiTmV0d29ya0NhY2hlQ29kZXJzLmgiCiAjaW5jbHVkZSAiTmV0d29ya0Nh
Y2hlSU9DaGFubmVsLmgiCiAjaW5jbHVkZSAiTmV0d29ya0NhY2hlS2V5LmgiCiAjaW5jbHVkZSAi
TmV0d29ya1Byb2Nlc3MuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0NhY2hlUXVlcnlPcHRpb25zLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9IVFRQUGFyc2Vycy5oPgogI2luY2x1ZGUgPHBhbC9TZXNzaW9u
SUQuaD4KLSNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvTWFpblRo
cmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9V
VUlELmg+CiAjaW5jbHVkZSA8d3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuaD4KICNp
bmNsdWRlIDx3dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudERlY29kZXIuaD4KICNpbmNsdWRlIDx3
dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudEVuY29kZXIuaD4KQEAgLTUxLDcgKzUyLDE4IEBAIG5h
bWVzcGFjZSBXZWJLaXQgewogCiBuYW1lc3BhY2UgQ2FjaGVTdG9yYWdlIHsKIAotc3RhdGljIGlu
bGluZSBWZWN0b3I8dWludDY0X3Q+IHF1ZXJ5Q2FjaGUoY29uc3QgVmVjdG9yPFJlY29yZERhdGE+
KiByZWNvcmRzLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IENhY2hlUXVl
cnlPcHRpb25zJiBvcHRpb25zKQorc3RhdGljIHN0ZDo6b3B0aW9uYWw8c3RkOjpwYWlyPFJlY29y
ZCwgZG91YmxlPj4gZGVjb2RlUmVjb3JkSGVhZGVyKGNvbnN0IFN0b3JhZ2U6OlJlY29yZCYpOwor
CitzdGF0aWMgaW5saW5lIFN0cmluZyBjb21wdXRlS2V5VVJMKGNvbnN0IFVSTCYgdXJsKQorewor
ICAgIFVSTCBrZXlVUkwgPSB1cmw7CisgICAgaWYgKGtleVVSTC5oYXNRdWVyeSgpKQorICAgICAg
ICBrZXlVUkwuc2V0UXVlcnkoeyB9KTsKKyAgICBrZXlVUkwucmVtb3ZlRnJhZ21lbnRJZGVudGlm
aWVyKCk7CisgICAgcmV0dXJuIGtleVVSTDsKK30KKworc3RhdGljIGlubGluZSBWZWN0b3I8dWlu
dDY0X3Q+IHF1ZXJ5Q2FjaGUoY29uc3QgVmVjdG9yPFJlY29yZEluZm9ybWF0aW9uPiogcmVjb3Jk
cywgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBDYWNoZVF1ZXJ5T3B0aW9u
cyYgb3B0aW9ucykKIHsKICAgICBpZiAoIXJlY29yZHMpCiAgICAgICAgIHJldHVybiB7IH07CkBA
IC02Nyw0NyArNzksNDIgQEAgc3RhdGljIGlubGluZSBWZWN0b3I8dWludDY0X3Q+IHF1ZXJ5Q2Fj
aGUoY29uc3QgVmVjdG9yPFJlY29yZERhdGE+KiByZWNvcmRzLCBjb24KICAgICByZXR1cm4gcmVz
dWx0czsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZVZhcnlJbmZvcm1hdGlvbihSZWNv
cmREYXRhJiByZWNvcmREYXRhKQorc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZVZhcnlJbmZvcm1h
dGlvbihSZWNvcmRJbmZvcm1hdGlvbiYgcmVjb3JkSW5mb3JtYXRpb24sIGNvbnN0IFJlc291cmNl
UmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7Ci0g
ICAgYXV0byB2YXJ5VmFsdWUgPSByZWNvcmREYXRhLmRhdGEtPnJlc3BvbnNlLmh0dHBIZWFkZXJG
aWVsZChXZWJDb3JlOjpIVFRQSGVhZGVyTmFtZTo6VmFyeSk7CisgICAgYXV0byB2YXJ5VmFsdWUg
PSByZXNwb25zZS5odHRwSGVhZGVyRmllbGQoV2ViQ29yZTo6SFRUUEhlYWRlck5hbWU6OlZhcnkp
OwogICAgIGlmICh2YXJ5VmFsdWUuaXNOdWxsKCkpIHsKLSAgICAgICAgcmVjb3JkRGF0YS5oYXNW
YXJ5U3RhciA9IGZhbHNlOwotICAgICAgICByZWNvcmREYXRhLnZhcnlIZWFkZXJzID0geyB9Owor
ICAgICAgICByZWNvcmRJbmZvcm1hdGlvbi5oYXNWYXJ5U3RhciA9IGZhbHNlOworICAgICAgICBy
ZWNvcmRJbmZvcm1hdGlvbi52YXJ5SGVhZGVycyA9IHsgfTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAogICAgIHZhcnlWYWx1ZS5zcGxpdCgnLCcsIGZhbHNlLCBbJl0oU3RyaW5nVmlldyB2aWV3
KSB7Ci0gICAgICAgIGlmICghcmVjb3JkRGF0YS5oYXNWYXJ5U3RhciAmJiBzdHJpcExlYWRpbmdB
bmRUcmFpbGluZ0hUVFBTcGFjZXModmlldykgPT0gIioiKQotICAgICAgICAgICAgcmVjb3JkRGF0
YS5oYXNWYXJ5U3RhciA9IHRydWU7CisgICAgICAgIGlmICghcmVjb3JkSW5mb3JtYXRpb24uaGFz
VmFyeVN0YXIgJiYgc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVFRQU3BhY2VzKHZpZXcpID09ICIq
IikKKyAgICAgICAgICAgIHJlY29yZEluZm9ybWF0aW9uLmhhc1ZhcnlTdGFyID0gdHJ1ZTsKICAg
ICAgICAgU3RyaW5nIGhlYWRlck5hbWUgPSB2aWV3LnRvU3RyaW5nKCk7Ci0gICAgICAgIHJlY29y
ZERhdGEudmFyeUhlYWRlcnMuYWRkKGhlYWRlck5hbWUsIHJlY29yZERhdGEuZGF0YS0+cmVxdWVz
dC5odHRwSGVhZGVyRmllbGQoaGVhZGVyTmFtZSkpOworICAgICAgICByZWNvcmRJbmZvcm1hdGlv
bi52YXJ5SGVhZGVycy5hZGQoaGVhZGVyTmFtZSwgcmVxdWVzdC5odHRwSGVhZGVyRmllbGQoaGVh
ZGVyTmFtZSkpOwogICAgIH0pOwogCi0gICAgaWYgKHJlY29yZERhdGEuaGFzVmFyeVN0YXIpCi0g
ICAgICAgIHJlY29yZERhdGEudmFyeUhlYWRlcnMgPSB7IH07Ci19Ci0KLXN0YXRpYyBpbmxpbmUg
UmVjb3JkIHRvUmVjb3JkKGNvbnN0IFJlY29yZERhdGEmIHJlY29yZCkKLXsKLSAgICByZXR1cm4g
eyByZWNvcmQuaWRlbnRpZmllciwgcmVjb3JkLnVwZGF0ZVJlc3BvbnNlQ291bnRlciwgcmVjb3Jk
LmRhdGEtPnJlcXVlc3RIZWFkZXJzR3VhcmQsIHJlY29yZC5kYXRhLT5yZXF1ZXN0LCByZWNvcmQu
ZGF0YS0+b3B0aW9ucywgcmVjb3JkLmRhdGEtPnJlZmVycmVyLCByZWNvcmQuZGF0YS0+cmVzcG9u
c2VIZWFkZXJzR3VhcmQsIHJlY29yZC5kYXRhLT5yZXNwb25zZSwgY29weVJlc3BvbnNlQm9keShy
ZWNvcmQuZGF0YS0+cmVzcG9uc2VCb2R5KSB9OworICAgIGlmIChyZWNvcmRJbmZvcm1hdGlvbi5o
YXNWYXJ5U3RhcikKKyAgICAgICAgcmVjb3JkSW5mb3JtYXRpb24udmFyeUhlYWRlcnMgPSB7IH07
CiB9CiAKLXN0YXRpYyBpbmxpbmUgUmVjb3JkRGF0YSB0b1JlY29yZERhdGEoUmVjb3JkJiYgcmVj
b3JkKQorUmVjb3JkSW5mb3JtYXRpb24gQ2FjaGU6OnRvUmVjb3JkSW5mb3JtYXRpb24oY29uc3Qg
UmVjb3JkJiByZWNvcmQpCiB7Ci0gICAgYXV0byB1cmwgPSByZWNvcmQucmVxdWVzdC51cmwoKTsK
LSAgICBSZWNvcmREYXRhOjpEYXRhIGRhdGEgPSB7IHJlY29yZC5yZXF1ZXN0SGVhZGVyc0d1YXJk
LCBXVEZNb3ZlKHJlY29yZC5yZXF1ZXN0KSwgV1RGTW92ZShyZWNvcmQub3B0aW9ucyksIFdURk1v
dmUocmVjb3JkLnJlZmVycmVyKSwgV1RGTW92ZShyZWNvcmQucmVzcG9uc2VIZWFkZXJzR3VhcmQp
LCBXVEZNb3ZlKHJlY29yZC5yZXNwb25zZSksIFdURk1vdmUocmVjb3JkLnJlc3BvbnNlQm9keSkg
fTsKLSAgICBSZWNvcmREYXRhIHJlY29yZERhdGEgPSB7IHsgfSwgbW9ub3RvbmljYWxseUluY3Jl
YXNpbmdUaW1lTVMoKSwgcmVjb3JkLmlkZW50aWZpZXIsIDAsIHVybCwgZmFsc2UsIHsgfSwgV1RG
TW92ZShkYXRhKSB9OworICAgIEtleSBrZXkgeyBBU0NJSUxpdGVyYWwoInJlY29yZCIpLCBtX3Vu
aXF1ZU5hbWUsIHsgfSwgY3JlYXRlQ2Fub25pY2FsVVVJRFN0cmluZygpLCBtX2NhY2hlcy5zYWx0
KCkgfTsKKyAgICBSZWNvcmRJbmZvcm1hdGlvbiByZWNvcmRJbmZvcm1hdGlvbiB7IFdURk1vdmUo
a2V5KSwgbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lTVMoKSwgcmVjb3JkLmlkZW50aWZpZXIs
IDAgLCByZWNvcmQucmVxdWVzdC51cmwoKSwgZmFsc2UsIHsgfSB9OwogCi0gICAgdXBkYXRlVmFy
eUluZm9ybWF0aW9uKHJlY29yZERhdGEpOworICAgIHVwZGF0ZVZhcnlJbmZvcm1hdGlvbihyZWNv
cmRJbmZvcm1hdGlvbiwgcmVjb3JkLnJlcXVlc3QsIHJlY29yZC5yZXNwb25zZSk7CiAKLSAgICBy
ZXR1cm4gcmVjb3JkRGF0YTsKKyAgICByZXR1cm4gcmVjb3JkSW5mb3JtYXRpb247CiB9CiAKLUNh
Y2hlOjpDYWNoZShDYWNoZXMmIGNhY2hlcywgdWludDY0X3QgaWRlbnRpZmllciwgU3RhdGUgc3Rh
dGUsIFN0cmluZyYmIG5hbWUpCitDYWNoZTo6Q2FjaGUoQ2FjaGVzJiBjYWNoZXMsIHVpbnQ2NF90
IGlkZW50aWZpZXIsIFN0YXRlIHN0YXRlLCBTdHJpbmcmJiBuYW1lLCBTdHJpbmcmJiB1bmlxdWVO
YW1lKQogICAgIDogbV9jYWNoZXMoY2FjaGVzKQogICAgICwgbV9zdGF0ZShzdGF0ZSkKICAgICAs
IG1faWRlbnRpZmllcihpZGVudGlmaWVyKQogICAgICwgbV9uYW1lKFdURk1vdmUobmFtZSkpCisg
ICAgLCBtX3VuaXF1ZU5hbWUoV1RGTW92ZSh1bmlxdWVOYW1lKSkKIHsKIH0KIApAQCAtMTIyLDcg
KzEyOSwxNyBAQCB2b2lkIENhY2hlOjpjbGVhck1lbW9yeVJlcHJlc2VudGF0aW9uKCkKICAgICBt
X25leHRSZWNvcmRJZGVudGlmaWVyID0gMDsKICAgICBtX3N0YXRlID0gU3RhdGU6OlVuaW5pdGlh
bGl6ZWQ7CiB9Ci0gCisKK25hbWVzcGFjZSB7CitzdHJ1Y3QgVHJhdmVyc2FsUmVzdWx0IHsKKyAg
ICBSZWY8Q2FjaGVzPiBjYWNoZXM7CisgICAgdWludDY0X3QgY2FjaGVJZGVudGlmaWVyOworICAg
IENvbXBsZXRpb25DYWxsYmFjayBjYWxsYmFjazsKKyAgICBIYXNoTWFwPFN0cmluZywgVmVjdG9y
PFJlY29yZEluZm9ybWF0aW9uPj4gcmVjb3JkczsKKyAgICBWZWN0b3I8S2V5PiBmYWlsZWRSZWNv
cmRzOworfTsKK30KKwogdm9pZCBDYWNoZTo6b3BlbihDb21wbGV0aW9uQ2FsbGJhY2smJiBjYWxs
YmFjaykKIHsKICAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6T3BlbikgewpAQCAtMTM0LDE4ICsx
NTEsNTQgQEAgdm9pZCBDYWNoZTo6b3BlbihDb21wbGV0aW9uQ2FsbGJhY2smJiBjYWxsYmFjaykK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBtX3N0YXRlID0gU3RhdGU6Ok9wZW5pbmc7Ci0g
ICAgcmVhZFJlY29yZHNMaXN0KFtjYWNoZXMgPSBtYWtlUmVmKG1fY2FjaGVzKSwgaWRlbnRpZmll
ciA9IG1faWRlbnRpZmllciwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oc3RkOjpvcHRp
b25hbDxFcnJvcj4mJiBlcnJvcikgbXV0YWJsZSB7Ci0gICAgICAgIGF1dG8qIGNhY2hlID0gY2Fj
aGVzLT5maW5kKGlkZW50aWZpZXIpOwotICAgICAgICBpZiAoIWNhY2hlKSB7Ci0gICAgICAgICAg
ICBjYWxsYmFjayhFcnJvcjo6SW50ZXJuYWwpOworICAgIFRyYXZlcnNhbFJlc3VsdCB0cmF2ZXJz
YWxSZXN1bHQgeyBtYWtlUmVmKG1fY2FjaGVzKSwgbV9pZGVudGlmaWVyLCBXVEZNb3ZlKGNhbGxi
YWNrKSwgeyB9LCB7IH0gfTsKKyAgICBtX2NhY2hlcy5yZWFkUmVjb3Jkc0xpc3QoKnRoaXMsIFt0
cmF2ZXJzYWxSZXN1bHQgPSBXVEZNb3ZlKHRyYXZlcnNhbFJlc3VsdCldKGNvbnN0IGF1dG8qIHN0
b3JhZ2VSZWNvcmQsIGNvbnN0IGF1dG8mKSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKCFzdG9yYWdl
UmVjb3JkKSB7CisgICAgICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3RyYXZlcnNh
bFJlc3VsdCA9IFdURk1vdmUodHJhdmVyc2FsUmVzdWx0KV0oKSBtdXRhYmxlIHsKKyAgICAgICAg
ICAgICAgICBmb3IgKGF1dG8mIGtleSA6IHRyYXZlcnNhbFJlc3VsdC5mYWlsZWRSZWNvcmRzKQor
ICAgICAgICAgICAgICAgICAgICB0cmF2ZXJzYWxSZXN1bHQuY2FjaGVzLT5yZW1vdmVSZWNvcmQo
a2V5KTsKKworICAgICAgICAgICAgICAgIGF1dG8qIGNhY2hlID0gdHJhdmVyc2FsUmVzdWx0LmNh
Y2hlcy0+ZmluZCh0cmF2ZXJzYWxSZXN1bHQuY2FjaGVJZGVudGlmaWVyKTsKKyAgICAgICAgICAg
ICAgICBpZiAoIWNhY2hlKSB7CisgICAgICAgICAgICAgICAgICAgIHRyYXZlcnNhbFJlc3VsdC5j
YWxsYmFjayhFcnJvcjo6SW50ZXJuYWwpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhY2hlLT5tX3JlY29yZHMgPSBXVEZN
b3ZlKHRyYXZlcnNhbFJlc3VsdC5yZWNvcmRzKTsKKyAgICAgICAgICAgICAgICBjYWNoZS0+Zmlu
aXNoT3BlbmluZyhXVEZNb3ZlKHRyYXZlcnNhbFJlc3VsdC5jYWxsYmFjayksIHN0ZDo6bnVsbG9w
dCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIGF1dG8gZGVjb2RlZCA9IGRlY29kZVJlY29yZEhlYWRlcigqc3RvcmFnZVJlY29yZCk7
CisgICAgICAgIGlmICghZGVjb2RlZCkgeworICAgICAgICAgICAgdHJhdmVyc2FsUmVzdWx0LmZh
aWxlZFJlY29yZHMuYXBwZW5kKHN0b3JhZ2VSZWNvcmQtPmtleSk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KLSAgICAgICAgY2FjaGUtPmZpbmlzaE9wZW5pbmcoV1RGTW92ZShjYWxs
YmFjayksIFdURk1vdmUoZXJyb3IpKTsKKworICAgICAgICBhdXRvJiByZWNvcmQgPSBkZWNvZGVk
LT5maXJzdDsKKyAgICAgICAgYXV0byBpbnNlcnRpb25UaW1lID0gZGVjb2RlZC0+c2Vjb25kOwor
CisgICAgICAgIFJlY29yZEluZm9ybWF0aW9uIHJlY29yZEluZm9ybWF0aW9uIHsgc3RvcmFnZVJl
Y29yZC0+a2V5LCBpbnNlcnRpb25UaW1lLCAwLCAwLCByZWNvcmQucmVxdWVzdC51cmwoKSwgZmFs
c2UsIHsgfSB9OworICAgICAgICB1cGRhdGVWYXJ5SW5mb3JtYXRpb24ocmVjb3JkSW5mb3JtYXRp
b24sIHJlY29yZC5yZXF1ZXN0LCByZWNvcmQucmVzcG9uc2UpOworCisgICAgICAgIGF1dG8mIHNh
bWVVUkxSZWNvcmRzID0gdHJhdmVyc2FsUmVzdWx0LnJlY29yZHMuZW5zdXJlKGNvbXB1dGVLZXlV
UkwocmVjb3JkSW5mb3JtYXRpb24udXJsKSwgW10geyByZXR1cm4gVmVjdG9yPFJlY29yZEluZm9y
bWF0aW9uPiB7IH07IH0pLml0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgc2FtZVVSTFJlY29yZHMu
YXBwZW5kKFdURk1vdmUocmVjb3JkSW5mb3JtYXRpb24pKTsKICAgICB9KTsKIH0KIAogdm9pZCBD
YWNoZTo6ZmluaXNoT3BlbmluZyhDb21wbGV0aW9uQ2FsbGJhY2smJiBjYWxsYmFjaywgc3RkOjpv
cHRpb25hbDxFcnJvcj4mJiBlcnJvcikKIHsKKyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3Jh
cHBlcjxSZWNvcmRJbmZvcm1hdGlvbj4+IHJlY29yZHM7CisgICAgZm9yIChhdXRvJiB2YWx1ZSA6
IG1fcmVjb3Jkcy52YWx1ZXMoKSkgeworICAgICAgICBmb3IgKGF1dG8mIHJlY29yZCA6IHZhbHVl
KQorICAgICAgICAgICAgcmVjb3Jkcy5hcHBlbmQocmVjb3JkKTsKKyAgICB9CisgICAgc3RkOjpz
b3J0KHJlY29yZHMuYmVnaW4oKSwgcmVjb3Jkcy5lbmQoKSwgWyZdKGNvbnN0IGF1dG8mIGEsIGNv
bnN0IGF1dG8mIGIpIHsKKyAgICAgICAgcmV0dXJuIGEuZ2V0KCkuaW5zZXJ0aW9uVGltZSA8IGIu
Z2V0KCkuaW5zZXJ0aW9uVGltZTsKKyAgICB9KTsKKyAgICBmb3IgKGF1dG8mIHJlY29yZCA6IHJl
Y29yZHMpCisgICAgICAgIHJlY29yZC5nZXQoKS5pZGVudGlmaWVyID0gKyttX25leHRSZWNvcmRJ
ZGVudGlmaWVyOworCiAgICAgaWYgKGVycm9yKSB7CiAgICAgICAgIG1fc3RhdGUgPSBTdGF0ZTo6
VW5pbml0aWFsaXplZDsKICAgICAgICAgY2FsbGJhY2soZXJyb3IudmFsdWUoKSk7CkBAIC0xNjIs
NTIgKzIxNSw5MiBAQCB2b2lkIENhY2hlOjpmaW5pc2hPcGVuaW5nKENvbXBsZXRpb25DYWxsYmFj
ayYmIGNhbGxiYWNrLCBzdGQ6Om9wdGlvbmFsPEVycm9yPiYmCiAgICAgICAgIGNhbGxiYWNrKHN0
ZDo6bnVsbG9wdCk7CiB9CiAKLVZlY3RvcjxSZWNvcmQ+IENhY2hlOjpyZXRyaWV2ZVJlY29yZHMo
Y29uc3QgVVJMJiB1cmwpIGNvbnN0CitjbGFzcyBSZWFkUmVjb3JkVGFza0NvdW50ZXIgOiBwdWJs
aWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8UmVhZFJlY29yZFRhc2tDb3VudGVyPiB7CitwdWJsaWM6
CisgICAgdXNpbmcgUmVhZFJlY29yZHNDYWxsYmFjayA9IFdURjo6RnVuY3Rpb248dm9pZChWZWN0
b3I8UmVjb3JkPiYmLCBWZWN0b3I8dWludDY0X3Q+JiYpPjsKKyAgICBzdGF0aWMgUmVmPFJlYWRS
ZWNvcmRUYXNrQ291bnRlcj4gY3JlYXRlKFJlYWRSZWNvcmRzQ2FsbGJhY2smJiBjYWxsYmFjaykg
eyByZXR1cm4gYWRvcHRSZWYoKm5ldyBSZWFkUmVjb3JkVGFza0NvdW50ZXIoV1RGTW92ZShjYWxs
YmFjaykpKTsgfQorCisgICAgflJlYWRSZWNvcmRUYXNrQ291bnRlcigpCisgICAgeworICAgICAg
ICBpZiAoIW1fY2FsbGJhY2spCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHN0ZDo6c29y
dChtX3JlY29yZHMuYmVnaW4oKSwgbV9yZWNvcmRzLmVuZCgpLCBbJl0gKGNvbnN0IGF1dG8mIGEs
IGNvbnN0IGF1dG8mIGIpIHsKKyAgICAgICAgICAgIHJldHVybiBhLmlkZW50aWZpZXIgPCBiLmlk
ZW50aWZpZXI7CisgICAgICAgIH0pOworICAgICAgICBtX2NhbGxiYWNrKFdURk1vdmUobV9yZWNv
cmRzKSwgV1RGTW92ZShtX2ZhaWxlZFJlY29yZHMpKTsKKyAgICB9CisKKyAgICB2b2lkIGFwcGVu
ZFJlY29yZChFeHBlY3RlZDxSZWNvcmQsIEVycm9yPiYmIHJlc3VsdCwgdWludDY0X3QgcmVjb3Jk
SWRlbnRpZmllciwgdWludDY0X3QgdXBkYXRlQ291bnRlcikKKyAgICB7CisgICAgICAgIGlmICgh
cmVzdWx0Lmhhc1ZhbHVlKCkpIHsKKyAgICAgICAgICAgIG1fZmFpbGVkUmVjb3Jkcy5hcHBlbmQo
cmVjb3JkSWRlbnRpZmllcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAg
ICAgcmVzdWx0LnZhbHVlKCkuaWRlbnRpZmllciA9IHJlY29yZElkZW50aWZpZXI7CisgICAgICAg
IHJlc3VsdC52YWx1ZSgpLnVwZGF0ZVJlc3BvbnNlQ291bnRlciA9IHVwZGF0ZUNvdW50ZXI7Cisg
ICAgICAgIG1fcmVjb3Jkcy5hcHBlbmQoV1RGTW92ZShyZXN1bHQudmFsdWUoKSkpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBSZWFkUmVjb3JkVGFza0NvdW50ZXIoUmVhZFJlY29y
ZHNDYWxsYmFjayYmIGNhbGxiYWNrKQorICAgICAgICA6IG1fY2FsbGJhY2soV1RGTW92ZShjYWxs
YmFjaykpCisgICAgeworICAgIH0KKworICAgIFJlYWRSZWNvcmRzQ2FsbGJhY2sgbV9jYWxsYmFj
azsKKyAgICBWZWN0b3I8UmVjb3JkPiBtX3JlY29yZHM7CisgICAgVmVjdG9yPHVpbnQ2NF90PiBt
X2ZhaWxlZFJlY29yZHM7Cit9OworCit2b2lkIENhY2hlOjpyZXRyaWV2ZVJlY29yZChjb25zdCBS
ZWNvcmRJbmZvcm1hdGlvbiYgcmVjb3JkLCBjb25zdCBSZWY8UmVhZFJlY29yZFRhc2tDb3VudGVy
PiYgdGFza0NvdW50ZXIpCit7CisgICAgcmVhZFJlY29yZEZyb21EaXNrKHJlY29yZCwgW2NhY2hl
cyA9IG1ha2VSZWYobV9jYWNoZXMpLCBpZGVudGlmaWVyID0gbV9pZGVudGlmaWVyLCByZWNvcmRJ
ZGVudGlmaWVyID0gcmVjb3JkLmlkZW50aWZpZXIsIHVwZGF0ZUNvdW50ZXIgPSByZWNvcmQudXBk
YXRlUmVzcG9uc2VDb3VudGVyLCB0YXNrQ291bnRlciA9IHRhc2tDb3VudGVyLmNvcHlSZWYoKV0o
RXhwZWN0ZWQ8UmVjb3JkLCBFcnJvcj4mJiByZXN1bHQpIG11dGFibGUgeworICAgICAgICBhdXRv
KiBjYWNoZSA9IGNhY2hlcy0+ZmluZChpZGVudGlmaWVyKTsKKyAgICAgICAgaWYgKCFjYWNoZSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdGFza0NvdW50ZXItPmFwcGVuZFJlY29yZChX
VEZNb3ZlKHJlc3VsdCksIHJlY29yZElkZW50aWZpZXIsIHVwZGF0ZUNvdW50ZXIpOworICAgIH0p
OworfQorCit2b2lkIENhY2hlOjpyZXRyaWV2ZVJlY29yZHMoY29uc3QgVVJMJiB1cmwsIFJlY29y
ZHNDYWxsYmFjayYmIGNhbGxiYWNrKQogeworICAgIEFTU0VSVChtX3N0YXRlID09IFN0YXRlOjpP
cGVuKTsKKworICAgIGF1dG8gdGFza0NvdW50ZXIgPSBSZWFkUmVjb3JkVGFza0NvdW50ZXI6OmNy
ZWF0ZShbY2FjaGVzID0gbWFrZVJlZihtX2NhY2hlcyksIGlkZW50aWZpZXIgPSBtX2lkZW50aWZp
ZXIsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKFZlY3RvcjxSZWNvcmQ+JiYgcmVjb3Jk
cywgVmVjdG9yPHVpbnQ2NF90PiYmIGZhaWxlZFJlY29yZElkZW50aWZpZXJzKSBtdXRhYmxlIHsK
KyAgICAgICAgYXV0byogY2FjaGUgPSBjYWNoZXMtPmZpbmQoaWRlbnRpZmllcik7CisgICAgICAg
IGlmIChjYWNoZSkKKyAgICAgICAgICAgIGNhY2hlLT5yZW1vdmVGcm9tUmVjb3JkTGlzdChmYWls
ZWRSZWNvcmRJZGVudGlmaWVycyk7CisgICAgICAgIGNhbGxiYWNrKFdURk1vdmUocmVjb3Jkcykp
OworICAgIH0pOworCiAgICAgaWYgKHVybC5pc051bGwoKSkgewotICAgICAgICBWZWN0b3I8UmVj
b3JkPiByZXN1bHQ7CiAgICAgICAgIGZvciAoYXV0byYgcmVjb3JkcyA6IG1fcmVjb3Jkcy52YWx1
ZXMoKSkgewogICAgICAgICAgICAgZm9yIChhdXRvJiByZWNvcmQgOiByZWNvcmRzKQotICAgICAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQodG9SZWNvcmQocmVjb3JkKSk7CisgICAgICAgICAgICAg
ICAgcmV0cmlldmVSZWNvcmQocmVjb3JkLCB0YXNrQ291bnRlcik7CiAgICAgICAgIH0KLSAgICAg
ICAgc3RkOjpzb3J0KHJlc3VsdC5iZWdpbigpLCByZXN1bHQuZW5kKCksIFtdKGNvbnN0IGF1dG8m
IGEsIGNvbnN0IGF1dG8mIGIpIHsKLSAgICAgICAgICAgIHJldHVybiBhLmlkZW50aWZpZXIgPCBi
LmlkZW50aWZpZXI7Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgY29uc3QgYXV0byogcmVjb3JkcyA9IHJlY29yZHNGcm9t
VVJMKHVybCk7CisgICAgYXV0byogcmVjb3JkcyA9IHJlY29yZHNGcm9tVVJMKHVybCk7CiAgICAg
aWYgKCFyZWNvcmRzKQotICAgICAgICByZXR1cm4geyB9OworICAgICAgICByZXR1cm47CiAKLSAg
ICBWZWN0b3I8UmVjb3JkPiByZXN1bHQ7Ci0gICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkocmVjb3Jkcy0+c2l6ZSgpKTsKICAgICBmb3IgKGF1dG8mIHJlY29yZCA6ICpyZWNvcmRzKQot
ICAgICAgICByZXN1bHQuYXBwZW5kKHRvUmVjb3JkKHJlY29yZCkpOwotICAgIHJldHVybiByZXN1
bHQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgU3RyaW5nIGNvbXB1dGVLZXlVUkwoY29uc3QgVVJMJiB1
cmwpCi17Ci0gICAgVVJMIGtleVVSTCA9IHVybDsKLSAgICBpZiAoa2V5VVJMLmhhc1F1ZXJ5KCkp
Ci0gICAgICAgIGtleVVSTC5zZXRRdWVyeSh7IH0pOwotICAgIGtleVVSTC5yZW1vdmVGcmFnbWVu
dElkZW50aWZpZXIoKTsKLSAgICByZXR1cm4ga2V5VVJMOworICAgICAgICByZXRyaWV2ZVJlY29y
ZChyZWNvcmQsIHRhc2tDb3VudGVyKTsKIH0KIAotUmVjb3JkRGF0YSYgQ2FjaGU6OmFkZFJlY29y
ZChWZWN0b3I8UmVjb3JkRGF0YT4qIHJlY29yZHMsIFJlY29yZCYmIHJlY29yZCkKK1JlY29yZElu
Zm9ybWF0aW9uJiBDYWNoZTo6YWRkUmVjb3JkKFZlY3RvcjxSZWNvcmRJbmZvcm1hdGlvbj4qIHJl
Y29yZHMsIGNvbnN0IFJlY29yZCYgcmVjb3JkKQogewogICAgIGlmICghcmVjb3JkcykgewogICAg
ICAgICBhdXRvIGtleSA9IGNvbXB1dGVLZXlVUkwocmVjb3JkLnJlcXVlc3QudXJsKCkpOwogICAg
ICAgICBBU1NFUlQoIW1fcmVjb3Jkcy5jb250YWlucyhrZXkpKTsKLSAgICAgICAgcmVjb3JkcyA9
ICZtX3JlY29yZHMuc2V0KGtleSwgVmVjdG9yPFJlY29yZERhdGE+IHsgfSkuaXRlcmF0b3ItPnZh
bHVlOworICAgICAgICByZWNvcmRzID0gJm1fcmVjb3Jkcy5zZXQoa2V5LCBWZWN0b3I8UmVjb3Jk
SW5mb3JtYXRpb24+IHsgfSkuaXRlcmF0b3ItPnZhbHVlOwogICAgIH0KLSAgICByZWNvcmRzLT5h
cHBlbmQodG9SZWNvcmREYXRhKFdURk1vdmUocmVjb3JkKSkpOworICAgIHJlY29yZHMtPmFwcGVu
ZCh0b1JlY29yZEluZm9ybWF0aW9uKHJlY29yZCkpOwogICAgIHJldHVybiByZWNvcmRzLT5sYXN0
KCk7CiB9CiAKLVZlY3RvcjxSZWNvcmREYXRhPiogQ2FjaGU6OnJlY29yZHNGcm9tVVJMKGNvbnN0
IFVSTCYgdXJsKQorVmVjdG9yPFJlY29yZEluZm9ybWF0aW9uPiogQ2FjaGU6OnJlY29yZHNGcm9t
VVJMKGNvbnN0IFVSTCYgdXJsKQogewogICAgIGF1dG8gaXRlcmF0b3IgPSBtX3JlY29yZHMuZmlu
ZChjb21wdXRlS2V5VVJMKHVybCkpOwogICAgIGlmIChpdGVyYXRvciA9PSBtX3JlY29yZHMuZW5k
KCkpCkBAIC0yMTUsNyArMzA4LDcgQEAgVmVjdG9yPFJlY29yZERhdGE+KiBDYWNoZTo6cmVjb3Jk
c0Zyb21VUkwoY29uc3QgVVJMJiB1cmwpCiAgICAgcmV0dXJuICZpdGVyYXRvci0+dmFsdWU7CiB9
CiAKLWNvbnN0IFZlY3RvcjxSZWNvcmREYXRhPiogQ2FjaGU6OnJlY29yZHNGcm9tVVJMKGNvbnN0
IFVSTCYgdXJsKSBjb25zdAorY29uc3QgVmVjdG9yPFJlY29yZEluZm9ybWF0aW9uPiogQ2FjaGU6
OnJlY29yZHNGcm9tVVJMKGNvbnN0IFVSTCYgdXJsKSBjb25zdAogewogICAgIGF1dG8gaXRlcmF0
b3IgPSBtX3JlY29yZHMuZmluZChjb21wdXRlS2V5VVJMKHVybCkpOwogICAgIGlmIChpdGVyYXRv
ciA9PSBtX3JlY29yZHMuZW5kKCkpCkBAIC0yMjMsOSArMzE2LDMwIEBAIGNvbnN0IFZlY3RvcjxS
ZWNvcmREYXRhPiogQ2FjaGU6OnJlY29yZHNGcm9tVVJMKGNvbnN0IFVSTCYgdXJsKSBjb25zdAog
ICAgIHJldHVybiAmaXRlcmF0b3ItPnZhbHVlOwogfQogCitjbGFzcyBBc3luY2hyb25vdXNQdXRU
YXNrQ291bnRlciA6IHB1YmxpYyBSZWZDb3VudGVkPEFzeW5jaHJvbm91c1B1dFRhc2tDb3VudGVy
PiB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxBc3luY2hyb25vdXNQdXRUYXNrQ291bnRlcj4g
Y3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBBc3luY2hyb25vdXNQdXRUYXNrQ291bnRl
cik7IH0KKyAgICB+QXN5bmNocm9ub3VzUHV0VGFza0NvdW50ZXIoKQorICAgIHsKKyAgICAgICAg
aWYgKCFtX2NhbGxiYWNrKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtX2NhbGxiYWNr
KFdURk1vdmUobV9lcnJvcikpOworICAgIH0KKworICAgIHZvaWQgb25Db21wbGV0aW9uKENvbXBs
ZXRpb25DYWxsYmFjayYmIGNhbGxiYWNrKSB7IG1fY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNr
KTsgfQorICAgIHZvaWQgc2V0RXJyb3IoRXJyb3IgZXJyb3IpIHsgbV9lcnJvciA9IGVycm9yOyB9
CisKK3ByaXZhdGU6CisgICAgc3RkOjpvcHRpb25hbDxFcnJvcj4gbV9lcnJvcjsKKyAgICBDb21w
bGV0aW9uQ2FsbGJhY2sgbV9jYWxsYmFjazsKK307CisKIHZvaWQgQ2FjaGU6OnB1dChWZWN0b3I8
UmVjb3JkPiYmIHJlY29yZHMsIFJlY29yZElkZW50aWZpZXJzQ2FsbGJhY2smJiBjYWxsYmFjaykK
IHsKLSAgICBib29sIHNob3VsZFdyaXRlUmVjb3JkTGlzdCB7IGZhbHNlIH07CisgICAgQVNTRVJU
KG1fc3RhdGUgPT0gU3RhdGU6Ok9wZW4pOworCisgICAgYXV0byB0YXNrQ291bnRlciA9IEFzeW5j
aHJvbm91c1B1dFRhc2tDb3VudGVyOjpjcmVhdGUoKTsKKwogICAgIFdlYkNvcmU6OkNhY2hlUXVl
cnlPcHRpb25zIG9wdGlvbnM7CiAgICAgVmVjdG9yPHVpbnQ2NF90PiByZWNvcmRJZGVudGlmaWVy
czsKICAgICByZWNvcmRJZGVudGlmaWVycy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHJlY29yZHMu
c2l6ZSgpKTsKQEAgLTIzNywzNCArMzUxLDIxIEBAIHZvaWQgQ2FjaGU6OnB1dChWZWN0b3I8UmVj
b3JkPiYmIHJlY29yZHMsIFJlY29yZElkZW50aWZpZXJzQ2FsbGJhY2smJiBjYWxsYmFjaykKICAg
ICAgICAgICAgIHJlY29yZC5pZGVudGlmaWVyID0gKyttX25leHRSZWNvcmRJZGVudGlmaWVyOwog
ICAgICAgICAgICAgcmVjb3JkSWRlbnRpZmllcnMudW5jaGVja2VkQXBwZW5kKHJlY29yZC5pZGVu
dGlmaWVyKTsKIAotICAgICAgICAgICAgc2hvdWxkV3JpdGVSZWNvcmRMaXN0ID0gdHJ1ZTsKLSAg
ICAgICAgICAgIGF1dG8mIHJlY29yZFRvV3JpdGUgPSBhZGRSZWNvcmQoc2FtZVVSTFJlY29yZHMs
IFdURk1vdmUocmVjb3JkKSk7Ci0gICAgICAgICAgICB3cml0ZVJlY29yZFRvRGlzayhyZWNvcmRU
b1dyaXRlKTsKKyAgICAgICAgICAgIGF1dG8mIHJlY29yZFRvV3JpdGUgPSBhZGRSZWNvcmQoc2Ft
ZVVSTFJlY29yZHMsIHJlY29yZCk7CisgICAgICAgICAgICB3cml0ZVJlY29yZFRvRGlzayhyZWNv
cmRUb1dyaXRlLCBXVEZNb3ZlKHJlY29yZCksIHRhc2tDb3VudGVyKTsKICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgIGF1dG8gaWRlbnRpZmllciA9IG1hdGNoaW5nUmVjb3Jkc1swXTsKICAg
ICAgICAgICAgIGF1dG8gcG9zaXRpb24gPSBzYW1lVVJMUmVjb3Jkcy0+ZmluZE1hdGNoaW5nKFsm
XShjb25zdCBhdXRvJiBpdGVtKSB7IHJldHVybiBpdGVtLmlkZW50aWZpZXIgPT0gaWRlbnRpZmll
cjsgfSk7CiAgICAgICAgICAgICBBU1NFUlQocG9zaXRpb24gIT0gbm90Rm91bmQpOwogICAgICAg
ICAgICAgaWYgKHBvc2l0aW9uICE9IG5vdEZvdW5kKSB7Ci0gICAgICAgICAgICAgICAgYXV0byYg
ZXhpc3RpbmdSZWNvcmQgPSAoKnNhbWVVUkxSZWNvcmRzKVtwb3NpdGlvbl07CisgICAgICAgICAg
ICAgICAgYXV0byYgZXhpc3RpbmdSZWNvcmQgPSBzYW1lVVJMUmVjb3Jkcy0+YXQocG9zaXRpb24p
OwogICAgICAgICAgICAgICAgIHJlY29yZElkZW50aWZpZXJzLnVuY2hlY2tlZEFwcGVuZChpZGVu
dGlmaWVyKTsKLSAgICAgICAgICAgICAgICArK2V4aXN0aW5nUmVjb3JkLnVwZGF0ZVJlc3BvbnNl
Q291bnRlcjsKLQotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgdGhlIGNhc2Ugd2hl
cmUgZGF0YSBpcyBudWxsLgotICAgICAgICAgICAgICAgIEFTU0VSVChleGlzdGluZ1JlY29yZC5k
YXRhKTsKLSAgICAgICAgICAgICAgICBleGlzdGluZ1JlY29yZC5kYXRhLT5yZXNwb25zZUhlYWRl
cnNHdWFyZCA9IHJlY29yZC5yZXNwb25zZUhlYWRlcnNHdWFyZDsKLSAgICAgICAgICAgICAgICBl
eGlzdGluZ1JlY29yZC5kYXRhLT5yZXNwb25zZSA9IFdURk1vdmUocmVjb3JkLnJlc3BvbnNlKTsK
LSAgICAgICAgICAgICAgICBleGlzdGluZ1JlY29yZC5kYXRhLT5yZXNwb25zZUJvZHkgPSBXVEZN
b3ZlKHJlY29yZC5yZXNwb25zZUJvZHkpOwotICAgICAgICAgICAgICAgIHVwZGF0ZVZhcnlJbmZv
cm1hdGlvbihleGlzdGluZ1JlY29yZCk7Ci0gICAgICAgICAgICAgICAgd3JpdGVSZWNvcmRUb0Rp
c2soZXhpc3RpbmdSZWNvcmQpOworICAgICAgICAgICAgICAgIHVwZGF0ZVJlY29yZFRvRGlzayhl
eGlzdGluZ1JlY29yZCwgV1RGTW92ZShyZWNvcmQpLCB0YXNrQ291bnRlcik7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoIXNob3VsZFdyaXRlUmVjb3JkTGlzdCkg
ewotICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKHJlY29yZElkZW50aWZpZXJzKSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgd3JpdGVSZWNvcmRzTGlzdChbY2FsbGJhY2sgPSBXVEZNb3Zl
KGNhbGxiYWNrKSwgcmVjb3JkSWRlbnRpZmllcnMgPSBXVEZNb3ZlKHJlY29yZElkZW50aWZpZXJz
KV0oc3RkOjpvcHRpb25hbDxFcnJvcj4mJiBlcnJvcikgbXV0YWJsZSB7CisgICAgdGFza0NvdW50
ZXItPm9uQ29tcGxldGlvbihbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgcmVjb3JkSWRl
bnRpZmllcnMgPSBXVEZNb3ZlKHJlY29yZElkZW50aWZpZXJzKV0oc3RkOjpvcHRpb25hbDxFcnJv
cj4mJiBlcnJvcikgbXV0YWJsZSB7CiAgICAgICAgIGlmIChlcnJvcikgewogICAgICAgICAgICAg
Y2FsbGJhY2sobWFrZVVuZXhwZWN0ZWQoZXJyb3IudmFsdWUoKSkpOwogICAgICAgICAgICAgcmV0
dXJuOwpAQCAtMjc1LDYgKzM3Niw4IEBAIHZvaWQgQ2FjaGU6OnB1dChWZWN0b3I8UmVjb3JkPiYm
IHJlY29yZHMsIFJlY29yZElkZW50aWZpZXJzQ2FsbGJhY2smJiBjYWxsYmFjaykKIAogdm9pZCBD
YWNoZTo6cmVtb3ZlKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmIHJlcXVlc3QsIFdlYkNvcmU6
OkNhY2hlUXVlcnlPcHRpb25zJiYgb3B0aW9ucywgUmVjb3JkSWRlbnRpZmllcnNDYWxsYmFjayYm
IGNhbGxiYWNrKQogeworICAgIEFTU0VSVChtX3N0YXRlID09IFN0YXRlOjpPcGVuKTsKKwogICAg
IGF1dG8qIHJlY29yZHMgPSByZWNvcmRzRnJvbVVSTChyZXF1ZXN0LnVybCgpKTsKICAgICBhdXRv
IHJlY29yZElkZW50aWZpZXJzID0gcXVlcnlDYWNoZShyZWNvcmRzLCByZXF1ZXN0LCBvcHRpb25z
KTsKICAgICBpZiAocmVjb3JkSWRlbnRpZmllcnMuaXNFbXB0eSgpKSB7CkBAIC0yODksMzUgKzM5
MiwxNTcgQEAgdm9pZCBDYWNoZTo6cmVtb3ZlKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmIHJl
cXVlc3QsIFdlYkNvcmU6OkNhY2hlUXVlcnlPcHRpb24KICAgICAgICAgcmV0dXJuIHNob3VsZFJl
bW92ZTsKICAgICB9KTsKIAotICAgIHdyaXRlUmVjb3Jkc0xpc3QoW2NhbGxiYWNrID0gV1RGTW92
ZShjYWxsYmFjayksIHJlY29yZElkZW50aWZpZXJzID0gV1RGTW92ZShyZWNvcmRJZGVudGlmaWVy
cyldKHN0ZDo6b3B0aW9uYWw8RXJyb3I+JiYgZXJyb3IpIG11dGFibGUgewotICAgICAgICBpZiAo
ZXJyb3IpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKG1ha2VVbmV4cGVjdGVkKGVycm9yLnZhbHVl
KCkpKTsKKyAgICBjYWxsYmFjayhXVEZNb3ZlKHJlY29yZElkZW50aWZpZXJzKSk7Cit9CisKK3Zv
aWQgQ2FjaGU6OnJlbW92ZUZyb21SZWNvcmRMaXN0KGNvbnN0IFZlY3Rvcjx1aW50NjRfdD4mIHJl
Y29yZElkZW50aWZpZXJzKQoreworICAgIGlmIChyZWNvcmRJZGVudGlmaWVycy5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGZvciAoYXV0byYgcmVjb3JkcyA6IG1fcmVjb3Jkcy52
YWx1ZXMoKSkgeworICAgICAgICBhdXRvKiBjYWNoZSA9IHRoaXM7CisgICAgICAgIHJlY29yZHMu
cmVtb3ZlQWxsTWF0Y2hpbmcoW2NhY2hlLCAmcmVjb3JkSWRlbnRpZmllcnNdKGNvbnN0IGF1dG8m
IGl0ZW0pIHsKKyAgICAgICAgICAgIHJldHVybiBub3RGb3VuZCAhPSByZWNvcmRJZGVudGlmaWVy
cy5maW5kTWF0Y2hpbmcoW2NhY2hlLCAmaXRlbV0oY29uc3QgYXV0byYgaWRlbnRpZmllcikgewor
ICAgICAgICAgICAgICAgIGlmIChpdGVtLmlkZW50aWZpZXIgIT0gaWRlbnRpZmllcikKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGNhY2hlLT5yZW1v
dmVSZWNvcmRGcm9tRGlzayhpdGVtKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9Cit9CisKK3ZvaWQgQ2FjaGU6OndyaXRl
UmVjb3JkVG9EaXNrKGNvbnN0IFJlY29yZEluZm9ybWF0aW9uJiByZWNvcmRJbmZvcm1hdGlvbiwg
UmVjb3JkJiYgcmVjb3JkLCBjb25zdCBSZWY8QXN5bmNocm9ub3VzUHV0VGFza0NvdW50ZXI+JiB0
YXNrQ291bnRlcikKK3sKKyAgICBtX2NhY2hlcy53cml0ZVJlY29yZCgqdGhpcywgcmVjb3JkSW5m
b3JtYXRpb24sIFdURk1vdmUocmVjb3JkKSwgW3Rhc2tDb3VudGVyID0gdGFza0NvdW50ZXIuY29w
eVJlZigpXShzdGQ6Om9wdGlvbmFsPEVycm9yPiYmIGVycm9yKSB7CisgICAgICAgIEFTU0VSVCgh
ZXJyb3IpOworICAgIH0pOworfQorCit2b2lkIENhY2hlOjp1cGRhdGVSZWNvcmRUb0Rpc2soUmVj
b3JkSW5mb3JtYXRpb24mIGV4aXN0aW5nUmVjb3JkLCBSZWNvcmQmJiByZWNvcmQsIGNvbnN0IFJl
ZjxBc3luY2hyb25vdXNQdXRUYXNrQ291bnRlcj4mIHRhc2tDb3VudGVyKQoreworICAgICsrZXhp
c3RpbmdSZWNvcmQudXBkYXRlUmVzcG9uc2VDb3VudGVyOworICAgIHJlYWRSZWNvcmRGcm9tRGlz
ayhleGlzdGluZ1JlY29yZCwgW2NhY2hlcyA9IG1ha2VSZWYobV9jYWNoZXMpLCBpZGVudGlmaWVy
ID0gbV9pZGVudGlmaWVyLCByZWNvcmRJZGVudGlmaWVyID0gZXhpc3RpbmdSZWNvcmQuaWRlbnRp
ZmllciwgcmVjb3JkID0gV1RGTW92ZShyZWNvcmQpLCB0YXNrQ291bnRlciA9IHRhc2tDb3VudGVy
LmNvcHlSZWYoKV0oRXhwZWN0ZWQ8UmVjb3JkLCBFcnJvcj4mJiByZXN1bHQpIG11dGFibGUgewor
ICAgICAgICBpZiAoIXJlc3VsdC5oYXNWYWx1ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgICAgIGNhbGxiYWNrKFdURk1vdmUocmVjb3JkSWRlbnRpZmllcnMpKTsKKwor
ICAgICAgICBhdXRvKiBjYWNoZSA9IGNhY2hlcy0+ZmluZChpZGVudGlmaWVyKTsKKyAgICAgICAg
aWYgKCFjYWNoZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBhdXRvKiBzYW1lVVJM
UmVjb3JkcyA9IGNhY2hlLT5yZWNvcmRzRnJvbVVSTChyZXN1bHQudmFsdWUoKS5yZXF1ZXN0LnVy
bCgpKTsKKyAgICAgICAgaWYgKCFzYW1lVVJMUmVjb3JkcykKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBhdXRvIHBvc2l0aW9uID0gc2FtZVVSTFJlY29yZHMtPmZpbmRNYXRjaGluZyhb
Jl0gKGNvbnN0IGF1dG8mIGl0ZW0pIHsgcmV0dXJuIGl0ZW0uaWRlbnRpZmllciA9PSByZWNvcmRJ
ZGVudGlmaWVyOyB9KTsKKyAgICAgICAgaWYgKHBvc2l0aW9uID09IG5vdEZvdW5kKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICBhdXRvJiByZWNvcmRJbmZvID0gc2FtZVVSTFJlY29yZHMt
PmF0KHBvc2l0aW9uKTsKKworICAgICAgICBhdXRvJiByZWNvcmRGcm9tRGlzayA9IHJlc3VsdC52
YWx1ZSgpOworICAgICAgICByZWNvcmQucmVxdWVzdEhlYWRlcnNHdWFyZCA9IHJlY29yZEZyb21E
aXNrLnJlcXVlc3RIZWFkZXJzR3VhcmQ7CisgICAgICAgIHJlY29yZC5yZXF1ZXN0ID0gV1RGTW92
ZShyZWNvcmRGcm9tRGlzay5yZXF1ZXN0KTsKKyAgICAgICAgcmVjb3JkLm9wdGlvbnMgPSBXVEZN
b3ZlKHJlY29yZEZyb21EaXNrLm9wdGlvbnMpOworICAgICAgICByZWNvcmQucmVmZXJyZXIgPSBX
VEZNb3ZlKHJlY29yZEZyb21EaXNrLnJlZmVycmVyKTsKKworICAgICAgICB1cGRhdGVWYXJ5SW5m
b3JtYXRpb24ocmVjb3JkSW5mbywgcmVjb3JkLnJlcXVlc3QsIHJlY29yZC5yZXNwb25zZSk7CisK
KyAgICAgICAgY2FjaGUtPndyaXRlUmVjb3JkVG9EaXNrKHJlY29yZEluZm8sIFdURk1vdmUocmVj
b3JkKSwgdGFza0NvdW50ZXIpOwogICAgIH0pOwogfQogCi12b2lkIENhY2hlOjpyZWFkUmVjb3Jk
c0xpc3QoQ29tcGxldGlvbkNhbGxiYWNrJiYgY2FsbGJhY2spCit2b2lkIENhY2hlOjpyZWFkUmVj
b3JkRnJvbURpc2soY29uc3QgUmVjb3JkSW5mb3JtYXRpb24mIHJlY29yZCwgV1RGOjpGdW5jdGlv
bjx2b2lkKEV4cGVjdGVkPFJlY29yZCwgRXJyb3I+JiYpPiYmIGNhbGxiYWNrKQogewotICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KLSAgICBjYWxsYmFjayhzdGQ6Om51bGxvcHQpOworICAg
IG1fY2FjaGVzLnJlYWRSZWNvcmQocmVjb3JkLmtleSwgV1RGTW92ZShjYWxsYmFjaykpOwogfQog
Ci12b2lkIENhY2hlOjp3cml0ZVJlY29yZHNMaXN0KENvbXBsZXRpb25DYWxsYmFjayYmIGNhbGxi
YWNrKQordm9pZCBDYWNoZTo6cmVtb3ZlUmVjb3JkRnJvbURpc2soY29uc3QgUmVjb3JkSW5mb3Jt
YXRpb24mIHJlY29yZCkKIHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCi0gICAgY2Fs
bGJhY2soc3RkOjpudWxsb3B0KTsKKyAgICBtX2NhY2hlcy5yZW1vdmVSZWNvcmQocmVjb3JkLmtl
eSk7CiB9CiAKLXZvaWQgQ2FjaGU6OndyaXRlUmVjb3JkVG9EaXNrKFJlY29yZERhdGEmKQorU3Rv
cmFnZTo6UmVjb3JkIENhY2hlOjplbmNvZGUoY29uc3QgUmVjb3JkSW5mb3JtYXRpb24mIHJlY29y
ZEluZm9ybWF0aW9uLCBjb25zdCBSZWNvcmQmIHJlY29yZCkKIHsKLSAgICAvLyBGSVhNRTogSW1w
bGVtZW50IHRoaXMuCisgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2RlciBlbmNvZGVyOworICAg
IGVuY29kZXIgPDwgcmVjb3JkSW5mb3JtYXRpb24uaW5zZXJ0aW9uVGltZTsKKyAgICBlbmNvZGVy
IDw8IHJlY29yZC5yZXF1ZXN0SGVhZGVyc0d1YXJkOworICAgIHJlY29yZC5yZXF1ZXN0LmVuY29k
ZVdpdGhvdXRQbGF0Zm9ybURhdGEoZW5jb2Rlcik7CisgICAgZW5jb2RlciA8PCByZWNvcmQub3B0
aW9uczsKKyAgICBlbmNvZGVyIDw8IHJlY29yZC5yZWZlcnJlcjsKKworICAgIGVuY29kZXIgPDwg
cmVjb3JkLnJlc3BvbnNlSGVhZGVyc0d1YXJkOworICAgIGVuY29kZXIgPDwgcmVjb3JkLnJlc3Bv
bnNlOworCisgICAgZW5jb2Rlci5lbmNvZGVDaGVja3N1bSgpOworCisgICAgRGF0YSBoZWFkZXIo
ZW5jb2Rlci5idWZmZXIoKSwgZW5jb2Rlci5idWZmZXJTaXplKCkpOworICAgIERhdGEgYm9keTsK
KyAgICBXVEY6OnN3aXRjaE9uKHJlY29yZC5yZXNwb25zZUJvZHksIFtdKGNvbnN0IFJlZjxXZWJD
b3JlOjpGb3JtRGF0YT4mIGZvcm1EYXRhKSB7CisgICAgICAgIC8vIEZJWE1FOiBTdG9yZSBmb3Jt
IGRhdGEgYm9keS4KKyAgICB9LCBbJl0oY29uc3QgUmVmPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4m
IGJ1ZmZlcikgeworICAgICAgICBib2R5ID0geyByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4
X3QqPihidWZmZXItPmRhdGEoKSksIGJ1ZmZlci0+c2l6ZSgpIH07CisgICAgfSwgW10oY29uc3Qg
c3RkOjpudWxscHRyX3QmKSB7CisgICAgfSk7CisKKyAgICByZXR1cm4geyByZWNvcmRJbmZvcm1h
dGlvbi5rZXksIHsgfSwgaGVhZGVyLCBib2R5LCB7IH0gfTsKIH0KIAotdm9pZCBDYWNoZTo6cmVt
b3ZlUmVjb3JkRnJvbURpc2soUmVjb3JkRGF0YSYpCitzdGF0aWMgaW5saW5lIHN0ZDo6b3B0aW9u
YWw8c3RkOjpwYWlyPFJlY29yZCwgZG91YmxlPj4gZGVjb2RlUmVjb3JkSGVhZGVyKGNvbnN0IFN0
b3JhZ2U6OlJlY29yZCYgc3RvcmFnZSkKIHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMu
CisgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKHN0b3JhZ2UuaGVhZGVyLmRh
dGEoKSwgc3RvcmFnZS5oZWFkZXIuc2l6ZSgpKTsKKworICAgIFJlY29yZCByZWNvcmQ7CisKKyAg
ICBkb3VibGUgaW5zZXJ0aW9uVGltZTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGluc2VydGlv
blRpbWUpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgaWYgKCFkZWNvZGVy
LmRlY29kZShyZWNvcmQucmVxdWVzdEhlYWRlcnNHdWFyZCkpCisgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CisKKyAgICBpZiAoIXJlY29yZC5yZXF1ZXN0LmRlY29kZVdpdGhvdXRQbGF0Zm9y
bURhdGEoZGVjb2RlcikpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHJlY29yZC5vcHRpb25zKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVjb3JkLnJlZmVycmVyKSkKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVjb3Jk
LnJlc3BvbnNlSGVhZGVyc0d1YXJkKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKwor
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVjb3JkLnJlc3BvbnNlKSkKKyAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKworICAgIGlmICghZGVjb2Rlci52ZXJpZnlDaGVja3N1bSgpKQorICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKFdU
Rk1vdmUocmVjb3JkKSwgaW5zZXJ0aW9uVGltZSk7Cit9CisKK3N0ZDo6b3B0aW9uYWw8UmVjb3Jk
PiBDYWNoZTo6ZGVjb2RlKGNvbnN0IFN0b3JhZ2U6OlJlY29yZCYgc3RvcmFnZSkKK3sKKyAgICBh
dXRvIHJlc3VsdCA9IGRlY29kZVJlY29yZEhlYWRlcihzdG9yYWdlKTsKKworICAgIGlmICghcmVz
dWx0KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgYXV0byByZWNvcmQgPSBX
VEZNb3ZlKHJlc3VsdC0+Zmlyc3QpOworICAgIHJlY29yZC5yZXNwb25zZUJvZHkgPSBXZWJDb3Jl
OjpTaGFyZWRCdWZmZXI6OmNyZWF0ZShzdG9yYWdlLmJvZHkuZGF0YSgpLCBzdG9yYWdlLmJvZHku
c2l6ZSgpKTsKKworICAgIHJldHVybiBXVEZNb3ZlKHJlY29yZCk7Cit9CisKK1ZlY3RvcjxLZXk+
IENhY2hlOjprZXlzKCkgY29uc3QKK3sKKyAgICBWZWN0b3I8S2V5PiBrZXlzOworICAgIGZvciAo
YXV0byYgcmVjb3JkcyA6IG1fcmVjb3Jkcy52YWx1ZXMoKSkgeworICAgICAgICBmb3IgKGF1dG8m
IHJlY29yZCA6IHJlY29yZHMpCisgICAgICAgICAgICBrZXlzLmFwcGVuZChyZWNvcmQua2V5KTsK
KyAgICB9CisgICAgcmV0dXJuIGtleXM7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIENhY2hlU3RvcmFn
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0
b3JhZ2VFbmdpbmVDYWNoZS5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9D
YWNoZVN0b3JhZ2VFbmdpbmVDYWNoZS5oCmluZGV4IGM5ZjBkODBlNTRiNzZlMjA0MmUxM2M5ZTQw
NWM5ZDU1MjczZDEyNjUuLmM0ZGY5OTE0MTIwMzdjNjgzMTYyZjZlZGQ0YzRhNjkwMjc3MTk4NGQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9y
YWdlRW5naW5lQ2FjaGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hl
L0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlLmgKQEAgLTI1LDcgKzI1LDcgQEAKIAogI3ByYWdtYSBv
bmNlCiAKLSNpbmNsdWRlICJOZXR3b3JrQ2FjaGVLZXkuaCIKKyNpbmNsdWRlICJOZXR3b3JrQ2Fj
aGVTdG9yYWdlLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9ET01DYWNoZUVuZ2luZS5oPgogI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTM2
LDcgKzM2LDcgQEAgbmFtZXNwYWNlIENhY2hlU3RvcmFnZSB7CiAKIGNsYXNzIENhY2hlczsKIAot
c3RydWN0IFJlY29yZERhdGEgeworc3RydWN0IFJlY29yZEluZm9ybWF0aW9uIHsKICAgICBOZXR3
b3JrQ2FjaGU6OktleSBrZXk7CiAgICAgZG91YmxlIGluc2VydGlvblRpbWUgeyAwIH07CiAKQEAg
LTQ2LDU4ICs0Niw2MSBAQCBzdHJ1Y3QgUmVjb3JkRGF0YSB7CiAgICAgV2ViQ29yZTo6VVJMIHVy
bDsKICAgICBib29sIGhhc1ZhcnlTdGFyIHsgZmFsc2UgfTsKICAgICBIYXNoTWFwPFN0cmluZywg
U3RyaW5nPiB2YXJ5SGVhZGVyczsKLQotICAgIHN0cnVjdCBEYXRhIHsKLSAgICAgICAgV2ViQ29y
ZTo6RmV0Y2hIZWFkZXJzOjpHdWFyZCByZXF1ZXN0SGVhZGVyc0d1YXJkOwotICAgICAgICBXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdDsKLSAgICAgICAgV2ViQ29yZTo6RmV0Y2hPcHRp
b25zIG9wdGlvbnM7Ci0gICAgICAgIFN0cmluZyByZWZlcnJlcjsKLQotICAgICAgICBXZWJDb3Jl
OjpGZXRjaEhlYWRlcnM6Okd1YXJkIHJlc3BvbnNlSGVhZGVyc0d1YXJkOwotICAgICAgICBXZWJD
b3JlOjpSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlOwotICAgICAgICBXZWJDb3JlOjpET01DYWNo
ZUVuZ2luZTo6UmVzcG9uc2VCb2R5IHJlc3BvbnNlQm9keTsKLSAgICB9OwotCi0gICAgc3RkOjpv
cHRpb25hbDxEYXRhPiBkYXRhOwogfTsKIAorY2xhc3MgQXN5bmNocm9ub3VzUHV0VGFza0NvdW50
ZXI7CitjbGFzcyBSZWFkUmVjb3JkVGFza0NvdW50ZXI7CisKIGNsYXNzIENhY2hlIHsKIHB1Ymxp
YzoKICAgICBlbnVtIGNsYXNzIFN0YXRlIHsgVW5pbml0aWFsaXplZCwgT3BlbmluZywgT3BlbiB9
OwotICAgIENhY2hlKENhY2hlcyYsIHVpbnQ2NF90IGlkZW50aWZpZXIsIFN0YXRlLCBTdHJpbmcm
JiBuYW1lKTsKKyAgICBDYWNoZShDYWNoZXMmLCB1aW50NjRfdCBpZGVudGlmaWVyLCBTdGF0ZSwg
U3RyaW5nJiYgbmFtZSwgU3RyaW5nJiYgdW5pcXVlTmFtZSk7CiAKKyAgICBib29sIGlzT3BlbmVk
KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA9PSBTdGF0ZTo6T3BlbjsgfQogICAgIHZvaWQgb3Bl
bihXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6Q29tcGxldGlvbkNhbGxiYWNrJiYpOwogCiAgICAg
dWludDY0X3QgaWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQogICAg
IGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQorICAgIGNvbnN0
IFN0cmluZyYgdW5pcXVlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fdW5pcXVlTmFtZTsgfQogICAg
IGJvb2wgaXNBY3RpdmUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlICE9IFN0YXRlOjpVbmluaXRp
YWxpemVkOyB9CiAKLSAgICBWZWN0b3I8V2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OlJlY29yZD4g
cmV0cmlldmVSZWNvcmRzKGNvbnN0IFdlYkNvcmU6OlVSTCYpIGNvbnN0OworICAgIHZvaWQgcmV0
cmlldmVSZWNvcmRzKGNvbnN0IFdlYkNvcmU6OlVSTCYsIFdlYkNvcmU6OkRPTUNhY2hlRW5naW5l
OjpSZWNvcmRzQ2FsbGJhY2smJik7CiAgICAgV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OkNhY2hl
SW5mbyBpbmZvKCkgY29uc3QgeyByZXR1cm4geyBtX2lkZW50aWZpZXIsIG1fbmFtZSB9OyB9CiAK
ICAgICB2b2lkIHB1dChWZWN0b3I8V2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OlJlY29yZD4mJiwg
V2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OlJlY29yZElkZW50aWZpZXJzQ2FsbGJhY2smJik7CiAg
ICAgdm9pZCByZW1vdmUoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYsIFdlYkNvcmU6OkNhY2hl
UXVlcnlPcHRpb25zJiYsIFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpSZWNvcmRJZGVudGlmaWVy
c0NhbGxiYWNrJiYpOwogCisgICAgVmVjdG9yPE5ldHdvcmtDYWNoZTo6S2V5PiBrZXlzKCkgY29u
c3Q7CisKICAgICB2b2lkIGRpc3Bvc2UoKTsKICAgICB2b2lkIGNsZWFyTWVtb3J5UmVwcmVzZW50
YXRpb24oKTsKLSAKKworICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkRPTUNhY2hl
RW5naW5lOjpSZWNvcmQ+IGRlY29kZShjb25zdCBOZXR3b3JrQ2FjaGU6OlN0b3JhZ2U6OlJlY29y
ZCYpOworICAgIHN0YXRpYyBOZXR3b3JrQ2FjaGU6OlN0b3JhZ2U6OlJlY29yZCBlbmNvZGUoY29u
c3QgUmVjb3JkSW5mb3JtYXRpb24mLCBjb25zdCBXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6UmVj
b3JkJik7CisKIHByaXZhdGU6Ci0gICAgVmVjdG9yPFJlY29yZERhdGE+KiByZWNvcmRzRnJvbVVS
TChjb25zdCBXZWJDb3JlOjpVUkwmKTsKLSAgICBjb25zdCBWZWN0b3I8UmVjb3JkRGF0YT4qIHJl
Y29yZHNGcm9tVVJMKGNvbnN0IFdlYkNvcmU6OlVSTCYpIGNvbnN0OwotICAgIFJlY29yZERhdGEm
IGFkZFJlY29yZChWZWN0b3I8UmVjb3JkRGF0YT4qLCBXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6
UmVjb3JkJiYpOworICAgIFZlY3RvcjxSZWNvcmRJbmZvcm1hdGlvbj4qIHJlY29yZHNGcm9tVVJM
KGNvbnN0IFdlYkNvcmU6OlVSTCYpOworICAgIGNvbnN0IFZlY3RvcjxSZWNvcmRJbmZvcm1hdGlv
bj4qIHJlY29yZHNGcm9tVVJMKGNvbnN0IFdlYkNvcmU6OlVSTCYpIGNvbnN0OworICAgIFJlY29y
ZEluZm9ybWF0aW9uJiBhZGRSZWNvcmQoVmVjdG9yPFJlY29yZEluZm9ybWF0aW9uPiosIGNvbnN0
IFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpSZWNvcmQmKTsKKworICAgIFJlY29yZEluZm9ybWF0
aW9uIHRvUmVjb3JkSW5mb3JtYXRpb24oY29uc3QgV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OlJl
Y29yZCYpOwogCiAgICAgdm9pZCBmaW5pc2hPcGVuaW5nKFdlYkNvcmU6OkRPTUNhY2hlRW5naW5l
OjpDb21wbGV0aW9uQ2FsbGJhY2smJiwgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpET01DYWNoZUVu
Z2luZTo6RXJyb3I+JiYpOworICAgIHZvaWQgcmV0cmlldmVSZWNvcmQoY29uc3QgUmVjb3JkSW5m
b3JtYXRpb24mLCBjb25zdCBSZWY8UmVhZFJlY29yZFRhc2tDb3VudGVyPiYpOwogCiAgICAgdm9p
ZCByZWFkUmVjb3Jkc0xpc3QoV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OkNvbXBsZXRpb25DYWxs
YmFjayYmKTsKLSAgICB2b2lkIHdyaXRlUmVjb3Jkc0xpc3QoV2ViQ29yZTo6RE9NQ2FjaGVFbmdp
bmU6OkNvbXBsZXRpb25DYWxsYmFjayYmKTsKLSAgICB2b2lkIHdyaXRlUmVjb3JkVG9EaXNrKFJl
Y29yZERhdGEmKTsKLSAgICB2b2lkIHJlbW92ZVJlY29yZEZyb21EaXNrKFJlY29yZERhdGEmKTsK
KyAgICB2b2lkIHdyaXRlUmVjb3JkVG9EaXNrKGNvbnN0IFJlY29yZEluZm9ybWF0aW9uJiwgV2Vi
Q29yZTo6RE9NQ2FjaGVFbmdpbmU6OlJlY29yZCYmLCBjb25zdCBSZWY8QXN5bmNocm9ub3VzUHV0
VGFza0NvdW50ZXI+Jik7CisgICAgdm9pZCB1cGRhdGVSZWNvcmRUb0Rpc2soUmVjb3JkSW5mb3Jt
YXRpb24mLCBXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6UmVjb3JkJiYsIGNvbnN0IFJlZjxBc3lu
Y2hyb25vdXNQdXRUYXNrQ291bnRlcj4mKTsKKyAgICB2b2lkIHJlbW92ZVJlY29yZEZyb21EaXNr
KGNvbnN0IFJlY29yZEluZm9ybWF0aW9uJik7CisgICAgdm9pZCByZWFkUmVjb3JkRnJvbURpc2so
Y29uc3QgUmVjb3JkSW5mb3JtYXRpb24mLCBXVEY6OkZ1bmN0aW9uPHZvaWQoRXhwZWN0ZWQ8V2Vi
Q29yZTo6RE9NQ2FjaGVFbmdpbmU6OlJlY29yZCwgV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OkVy
cm9yPiYmKT4mJik7CisgICAgdm9pZCByZW1vdmVGcm9tUmVjb3JkTGlzdChjb25zdCBWZWN0b3I8
dWludDY0X3Q+Jik7CiAKICAgICBDYWNoZXMmIG1fY2FjaGVzOwogICAgIFN0YXRlIG1fc3RhdGU7
CiAgICAgdWludDY0X3QgbV9pZGVudGlmaWVyIHsgMCB9OwogICAgIFN0cmluZyBtX25hbWU7Ci0g
ICAgSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxSZWNvcmREYXRhPj4gbV9yZWNvcmRzOworICAgIFN0
cmluZyBtX3VuaXF1ZU5hbWU7CisgICAgSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxSZWNvcmRJbmZv
cm1hdGlvbj4+IG1fcmVjb3JkczsKICAgICB1aW50NjRfdCBtX25leHRSZWNvcmRJZGVudGlmaWVy
IHsgMCB9OwogICAgIFZlY3RvcjxXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6Q29tcGxldGlvbkNh
bGxiYWNrPiBtX3BlbmRpbmdPcGVuaW5nQ2FsbGJhY2tzOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNw
cCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5l
Q2FjaGVzLmNwcAppbmRleCBiMzFlMjg5NzdkZWQxYzQ3MGM2OTY5NWIwMzhjYmI0NWM0YTNmNWM3
Li4yMDdiN2Q2ZmQ2YWE4MjI1MTVmYzY2NjIyOGYxOTI4M2U0MDQzZTNiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hl
cy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3Jh
Z2VFbmdpbmVDYWNoZXMuY3BwCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiQ2FjaGVTdG9y
YWdlRW5naW5lLmgiCiAKICNpbmNsdWRlICJOZXR3b3JrQ2FjaGVDb2RlcnMuaCIKKyNpbmNsdWRl
IDx3dGYvVVVJRC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOwpAQCAtNTksNyArNjAsMTQgQEAg
Q2FjaGVzOjpDYWNoZXMoRW5naW5lJiBlbmdpbmUsIFN0cmluZyYmIG9yaWdpbikKIAogdm9pZCBD
YWNoZXM6OmluaXRpYWxpemUoV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OkNvbXBsZXRpb25DYWxs
YmFjayYmIGNhbGxiYWNrKQogewotICAgIGlmIChtX2lzSW5pdGlhbGl6ZWQgfHwgbV9yb290UGF0
aC5pc051bGwoKSkgeworICAgIGlmIChtX2lzSW5pdGlhbGl6ZWQpIHsKKyAgICAgICAgY2FsbGJh
Y2soc3RkOjpudWxsb3B0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX3Jv
b3RQYXRoLmlzTnVsbCgpKSB7CisgICAgICAgIG1ha2VEaXJ0eSgpOworICAgICAgICBtX2lzSW5p
dGlhbGl6ZWQgPSB0cnVlOwogICAgICAgICBjYWxsYmFjayhzdGQ6Om51bGxvcHQpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQpAQCAtNzUsNiArODMsNyBAQCB2b2lkIENhY2hlczo6aW5pdGlhbGl6
ZShXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6Q29tcGxldGlvbkNhbGxiYWNrJiYgY2FsbGJhY2sp
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgbV9zdG9yYWdlID0gc3RvcmFnZS5yZWxlYXNl
Tm9uTnVsbCgpOworICAgIG1fc3RvcmFnZS0+d3JpdGVXaXRob3V0V2FpdGluZygpOwogICAgIHJl
YWRDYWNoZXNGcm9tRGlzayhbdGhpcywgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oRXhw
ZWN0ZWQ8VmVjdG9yPENhY2hlPiwgRXJyb3I+JiYgcmVzdWx0KSB7CiAgICAgICAgIG1ha2VEaXJ0
eSgpOwogCkBAIC0xMjAsNyArMTI5LDkgQEAgQ2FjaGUqIENhY2hlczo6ZmluZCh1aW50NjRfdCBp
ZGVudGlmaWVyKQogCiB2b2lkIENhY2hlczo6b3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIENhY2hl
SWRlbnRpZmllckNhbGxiYWNrJiYgY2FsbGJhY2spCiB7CisgICAgQVNTRVJUKG1faXNJbml0aWFs
aXplZCk7CiAgICAgQVNTRVJUKG1fZW5naW5lKTsKKwogICAgIGlmIChhdXRvKiBjYWNoZSA9IGZp
bmQobmFtZSkpIHsKICAgICAgICAgY2FjaGUtPm9wZW4oW2NhY2hlSWRlbnRpZmllciA9IGNhY2hl
LT5pZGVudGlmaWVyKCksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKHN0ZDo6b3B0aW9u
YWw8RXJyb3I+JiYgZXJyb3IpIG11dGFibGUgewogICAgICAgICAgICAgaWYgKGVycm9yKSB7CkBA
IC0xMzUsNyArMTQ2LDcgQEAgdm9pZCBDYWNoZXM6Om9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBD
YWNoZUlkZW50aWZpZXJDYWxsYmFjayYmIGNhbGxiYWNrKQogICAgIG1ha2VEaXJ0eSgpOwogCiAg
ICAgdWludDY0X3QgY2FjaGVJZGVudGlmaWVyID0gbV9lbmdpbmUtPm5leHRDYWNoZUlkZW50aWZp
ZXIoKTsKLSAgICBtX2NhY2hlcy5hcHBlbmQoQ2FjaGUgeyAqdGhpcywgY2FjaGVJZGVudGlmaWVy
LCBDYWNoZTo6U3RhdGU6Ok9wZW4sIFN0cmluZyB7IG5hbWUgfSB9KTsKKyAgICBtX2NhY2hlcy5h
cHBlbmQoQ2FjaGUgeyAqdGhpcywgY2FjaGVJZGVudGlmaWVyLCBDYWNoZTo6U3RhdGU6Ok9wZW4s
IFN0cmluZyB7IG5hbWUgfSwgY3JlYXRlQ2Fub25pY2FsVVVJRFN0cmluZygpIH0pOwogCiAgICAg
d3JpdGVDYWNoZXNUb0Rpc2soW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGNhY2hlSWRl
bnRpZmllcl0oc3RkOjpvcHRpb25hbDxFcnJvcj4mJiBlcnJvcikgbXV0YWJsZSB7CiAgICAgICAg
IGNhbGxiYWNrKENhY2hlSWRlbnRpZmllck9wZXJhdGlvblJlc3VsdCB7IGNhY2hlSWRlbnRpZmll
ciwgISFlcnJvciB9KTsKQEAgLTE0NCw2ICsxNTUsNyBAQCB2b2lkIENhY2hlczo6b3Blbihjb25z
dCBTdHJpbmcmIG5hbWUsIENhY2hlSWRlbnRpZmllckNhbGxiYWNrJiYgY2FsbGJhY2spCiAKIHZv
aWQgQ2FjaGVzOjpyZW1vdmUodWludDY0X3QgaWRlbnRpZmllciwgQ2FjaGVJZGVudGlmaWVyQ2Fs
bGJhY2smJiBjYWxsYmFjaykKIHsKKyAgICBBU1NFUlQobV9pc0luaXRpYWxpemVkKTsKICAgICBB
U1NFUlQobV9lbmdpbmUpOwogCiAgICAgYXV0byBwb3NpdGlvbiA9IG1fY2FjaGVzLmZpbmRNYXRj
aGluZyhbJl0oY29uc3QgYXV0byYgaXRlbSkgeyByZXR1cm4gaXRlbS5pZGVudGlmaWVyKCkgPT0g
aWRlbnRpZmllcjsgfSk7CkBAIC0xNjgsNiArMTgwLDkgQEAgdm9pZCBDYWNoZXM6OmRpc3Bvc2Uo
Q2FjaGUmIGNhY2hlKQogewogICAgIGF1dG8gcG9zaXRpb24gPSBtX3JlbW92ZWRDYWNoZXMuZmlu
ZE1hdGNoaW5nKFsmXShjb25zdCBhdXRvJiBpdGVtKSB7IHJldHVybiBpdGVtLmlkZW50aWZpZXIo
KSA9PSBjYWNoZS5pZGVudGlmaWVyKCk7IH0pOwogICAgIGlmIChwb3NpdGlvbiAhPSBub3RGb3Vu
ZCkgeworICAgICAgICBpZiAobV9zdG9yYWdlKQorICAgICAgICAgICAgbV9zdG9yYWdlLT5yZW1v
dmUoY2FjaGUua2V5cygpLCB7IH0pOworCiAgICAgICAgIG1fcmVtb3ZlZENhY2hlcy5yZW1vdmUo
cG9zaXRpb24pOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTg0LDEzICsxOTksMTUgQEAg
c3RhdGljIGlubGluZSBEYXRhIGVuY29kZUNhY2hlTmFtZXMoY29uc3QgVmVjdG9yPENhY2hlPiYg
Y2FjaGVzKQogCiAgICAgdWludDY0X3Qgc2l6ZSA9IGNhY2hlcy5zaXplKCk7CiAgICAgZW5jb2Rl
ciA8PCBzaXplOwotICAgIGZvciAoYXV0byYgY2FjaGUgOiBjYWNoZXMpCisgICAgZm9yIChhdXRv
JiBjYWNoZSA6IGNhY2hlcykgewogICAgICAgICBlbmNvZGVyIDw8IGNhY2hlLm5hbWUoKTsKKyAg
ICAgICAgZW5jb2RlciA8PCBjYWNoZS51bmlxdWVOYW1lKCk7CisgICAgfQogCiAgICAgcmV0dXJu
IERhdGEgeyBlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSB9OwogfQogCi1z
dGF0aWMgaW5saW5lIEV4cGVjdGVkPFZlY3RvcjxTdHJpbmc+LCBFcnJvcj4gZGVjb2RlQ2FjaGVz
TmFtZXMoY29uc3QgRGF0YSYgZGF0YSwgaW50IGVycm9yKQorc3RhdGljIGlubGluZSBFeHBlY3Rl
ZDxWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPj4sIEVycm9yPiBkZWNvZGVDYWNoZXNO
YW1lcyhjb25zdCBEYXRhJiBkYXRhLCBpbnQgZXJyb3IpCiB7CiAgICAgaWYgKGVycm9yKQogICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoRXJyb3I6OlJlYWREaXNrKTsKQEAgLTIwMCwxNCAr
MjE3LDE3IEBAIHN0YXRpYyBpbmxpbmUgRXhwZWN0ZWQ8VmVjdG9yPFN0cmluZz4sIEVycm9yPiBk
ZWNvZGVDYWNoZXNOYW1lcyhjb25zdCBEYXRhJiBkYXRhCiAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShjb3VudCkpCiAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChFcnJvcjo6UmVhZERpc2sp
OwogCi0gICAgVmVjdG9yPFN0cmluZz4gbmFtZXM7CisgICAgVmVjdG9yPHN0ZDo6cGFpcjxTdHJp
bmcsIFN0cmluZz4+IG5hbWVzOwogICAgIG5hbWVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoY291
bnQpOwogICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBjb3VudDsgKytpbmRleCkg
ewogICAgICAgICBTdHJpbmcgbmFtZTsKICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShuYW1l
KSkKICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChFcnJvcjo6UmVhZERpc2spOwor
ICAgICAgICBTdHJpbmcgdW5pcXVlTmFtZTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh1
bmlxdWVOYW1lKSkKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChFcnJvcjo6UmVh
ZERpc2spOwogCi0gICAgICAgIG5hbWVzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKG5hbWUpKTsK
KyAgICAgICAgbmFtZXMudW5jaGVja2VkQXBwZW5kKHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4g
eyBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKHVuaXF1ZU5hbWUpIH0pOwogICAgIH0KICAgICByZXR1
cm4gbmFtZXM7CiB9CkBAIC0yNDAsOCArMjYwLDggQEAgdm9pZCBDYWNoZXM6OnJlYWRDYWNoZXNG
cm9tRGlzayhXVEY6OkZ1bmN0aW9uPHZvaWQoRXhwZWN0ZWQ8VmVjdG9yPENhY2hlPiwgRXJyb3IK
ICAgICAgICAgICAgIGNhbGxiYWNrKG1ha2VVbmV4cGVjdGVkKHJlc3VsdC5lcnJvcigpKSk7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgY2FsbGJhY2soV1RGOjptYXAo
V1RGTW92ZShyZXN1bHQudmFsdWUoKSksIFt0aGlzXSAoU3RyaW5nJiYgbmFtZSkgewotICAgICAg
ICAgICAgcmV0dXJuIENhY2hlIHsgKnRoaXMsIG1fZW5naW5lLT5uZXh0Q2FjaGVJZGVudGlmaWVy
KCksIENhY2hlOjpTdGF0ZTo6VW5pbml0aWFsaXplZCwgV1RGTW92ZShuYW1lKSB9OworICAgICAg
ICBjYWxsYmFjayhXVEY6Om1hcChXVEZNb3ZlKHJlc3VsdC52YWx1ZSgpKSwgW3RoaXNdIChhdXRv
JiYgcGFpcikgeworICAgICAgICAgICAgcmV0dXJuIENhY2hlIHsgKnRoaXMsIG1fZW5naW5lLT5u
ZXh0Q2FjaGVJZGVudGlmaWVyKCksIENhY2hlOjpTdGF0ZTo6VW5pbml0aWFsaXplZCwgV1RGTW92
ZShwYWlyLmZpcnN0KSwgV1RGTW92ZShwYWlyLnNlY29uZCkgfTsKICAgICAgICAgfSkpOwogICAg
IH0pOwogfQpAQCAtMjY2LDE0ICsyODYsODIgQEAgdm9pZCBDYWNoZXM6OndyaXRlQ2FjaGVzVG9E
aXNrKENvbXBsZXRpb25DYWxsYmFjayYmIGNhbGxiYWNrKQogICAgIH0pOwogfQogCit2b2lkIENh
Y2hlczo6cmVhZFJlY29yZHNMaXN0KENhY2hlJiBjYWNoZSwgTmV0d29ya0NhY2hlOjpTdG9yYWdl
OjpUcmF2ZXJzZUhhbmRsZXImJiBjYWxsYmFjaykKK3sKKyAgICBBU1NFUlQobV9pc0luaXRpYWxp
emVkKTsKKworICAgIGlmICghbV9zdG9yYWdlKSB7CisgICAgICAgIGNhbGxiYWNrKG51bGxwdHIs
IHsgfSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9zdG9yYWdlLT50cmF2ZXJzZShj
YWNoZS51bmlxdWVOYW1lKCksIDAsIFtwcm90ZWN0ZWRTdG9yYWdlID0gbWFrZVJlZigqbV9zdG9y
YWdlKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oY29uc3QgYXV0byogc3RvcmFnZSwg
Y29uc3QgYXV0byYgaW5mb3JtYXRpb24pIHsKKyAgICAgICAgY2FsbGJhY2soc3RvcmFnZSwgaW5m
b3JtYXRpb24pOworICAgIH0pOworfQorCit2b2lkIENhY2hlczo6d3JpdGVSZWNvcmQoY29uc3Qg
Q2FjaGUmIGNhY2hlLCBjb25zdCBSZWNvcmRJbmZvcm1hdGlvbiYgcmVjb3JkSW5mb3JtYXRpb24s
IFJlY29yZCYmIHJlY29yZCwgQ29tcGxldGlvbkNhbGxiYWNrJiYgY2FsbGJhY2spCit7CisgICAg
QVNTRVJUKG1faXNJbml0aWFsaXplZCk7CisKKyAgICAvLyBGSVhNRTogQ2hlY2sgZm9yIHN0b3Jh
Z2UgcXVvdGEuCisgICAgaWYgKCFzaG91bGRQZXJzaXN0KCkpIHsKKyAgICAgICAgbV92b2xhdGls
ZVN0b3JhZ2Uuc2V0KHJlY29yZEluZm9ybWF0aW9uLmtleSwgV1RGTW92ZShyZWNvcmQpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fc3RvcmFnZS0+c3RvcmUoQ2FjaGU6OmVuY29k
ZShyZWNvcmRJbmZvcm1hdGlvbiwgcmVjb3JkKSwgW3Byb3RlY3RlZFN0b3JhZ2UgPSBtYWtlUmVm
KCptX3N0b3JhZ2UpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShjb25zdCBEYXRhJikg
eworICAgICAgICBjYWxsYmFjayhzdGQ6Om51bGxvcHQpOworICAgIH0pOworfQorCit2b2lkIENh
Y2hlczo6cmVhZFJlY29yZChjb25zdCBOZXR3b3JrQ2FjaGU6OktleSYga2V5LCBXVEY6OkZ1bmN0
aW9uPHZvaWQoRXhwZWN0ZWQ8UmVjb3JkLCBFcnJvcj4mJik+JiYgY2FsbGJhY2spCit7CisgICAg
QVNTRVJUKG1faXNJbml0aWFsaXplZCk7CisKKyAgICBpZiAoIXNob3VsZFBlcnNpc3QoKSkgewor
ICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbV92b2xhdGlsZVN0b3JhZ2UuZmluZChrZXkpOworICAg
ICAgICBpZiAoaXRlcmF0b3IgPT0gbV92b2xhdGlsZVN0b3JhZ2UuZW5kKCkpIHsKKyAgICAgICAg
ICAgIGNhbGxiYWNrKG1ha2VVbmV4cGVjdGVkKEVycm9yOjpJbnRlcm5hbCkpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGNhbGxiYWNrKGl0ZXJhdG9yLT52YWx1ZS5j
b3B5KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9zdG9yYWdlLT5yZXRyaWV2
ZShrZXksIDQsIFtwcm90ZWN0ZWRTdG9yYWdlID0gbWFrZVJlZigqbV9zdG9yYWdlKSwgY2FsbGJh
Y2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oc3RkOjp1bmlxdWVfcHRyPFN0b3JhZ2U6OlJlY29yZD4g
c3RvcmFnZSkgbXV0YWJsZSB7CisgICAgICAgIGlmICghc3RvcmFnZSkgeworICAgICAgICAgICAg
Y2FsbGJhY2sobWFrZVVuZXhwZWN0ZWQoRXJyb3I6OlJlYWREaXNrKSk7CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBhdXRvIHJlY29yZCA9IENhY2hlOjpk
ZWNvZGUoKnN0b3JhZ2UpOworICAgICAgICBpZiAoIXJlY29yZCkgeworICAgICAgICAgICAgY2Fs
bGJhY2sobWFrZVVuZXhwZWN0ZWQoRXJyb3I6OlJlYWREaXNrKSk7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKHJlY29yZC52
YWx1ZSgpKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0pOworfQorCit2b2lkIENhY2hl
czo6cmVtb3ZlUmVjb3JkKGNvbnN0IE5ldHdvcmtDYWNoZTo6S2V5JiBrZXkpCit7CisgICAgQVNT
RVJUKG1faXNJbml0aWFsaXplZCk7CisKKyAgICBpZiAoIXNob3VsZFBlcnNpc3QoKSkgeworICAg
ICAgICBtX3ZvbGF0aWxlU3RvcmFnZS5yZW1vdmUoa2V5KTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBtX3N0b3JhZ2UtPnJlbW92ZShrZXkpOworfQorCiB2b2lkIENhY2hlczo6Y2xlYXJN
ZW1vcnlSZXByZXNlbnRhdGlvbigpCiB7CiAgICAgbWFrZURpcnR5KCk7CiAgICAgbV9jYWNoZXMu
Y2xlYXIoKTsKICAgICBtX2lzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKICAgICBtX3N0b3JhZ2UgPSBu
dWxscHRyOwotICAgIGlmIChtX2VuZ2luZSkKLSAgICAgICAgbV9lbmdpbmUtPnJlbW92ZUNhY2hl
cyhtX29yaWdpbik7CiB9CiAKIGJvb2wgQ2FjaGVzOjppc0RpcnR5KHVpbnQ2NF90IHVwZGF0ZUNv
dW50ZXIpIGNvbnN0CkBAIC0yODIsNiArMzcwLDE3IEBAIGJvb2wgQ2FjaGVzOjppc0RpcnR5KHVp
bnQ2NF90IHVwZGF0ZUNvdW50ZXIpIGNvbnN0CiAgICAgcmV0dXJuIG1fdXBkYXRlQ291bnRlciAh
PSB1cGRhdGVDb3VudGVyOwogfQogCitjb25zdCBOZXR3b3JrQ2FjaGU6OlNhbHQmIENhY2hlczo6
c2FsdCgpIGNvbnN0Cit7CisgICAgaWYgKG1fZW5naW5lKQorICAgICAgICByZXR1cm4gbV9lbmdp
bmUtPnNhbHQoKTsKKworICAgIGlmICghbV92b2xhdGlsZVNhbHQpCisgICAgICAgIG1fdm9sYXRp
bGVTYWx0ID0gU2FsdCB7IH07CisKKyAgICByZXR1cm4gbV92b2xhdGlsZVNhbHQudmFsdWUoKTsK
K30KKwogQ2FjaGVJbmZvcyBDYWNoZXM6OmNhY2hlSW5mb3ModWludDY0X3QgdXBkYXRlQ291bnRl
cikgY29uc3QKIHsKICAgICBWZWN0b3I8Q2FjaGVJbmZvPiBjYWNoZUluZm9zOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVD
YWNoZXMuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdl
RW5naW5lQ2FjaGVzLmgKaW5kZXggZjMxM2ZkMWM0Y2I4YjlmYWZjYjY0NjY4ODY4Y2Y0MzdhZDU5
NzIzMi4uNGEyYTc3OTJlZmVhNmRhZmE2NDQ0MDUzZWM3MDhiYjA1M2U2YWYwNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVD
YWNoZXMuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3Rv
cmFnZUVuZ2luZUNhY2hlcy5oCkBAIC01MiwxNyArNTIsMjMgQEAgcHVibGljOgogICAgIENhY2hl
KiBmaW5kKHVpbnQ2NF90IGlkZW50aWZpZXIpOwogICAgIHZvaWQgYXBwZW5kUmVwcmVzZW50YXRp
b24oU3RyaW5nQnVpbGRlciYpIGNvbnN0OwogCisgICAgdm9pZCByZWFkUmVjb3Jkc0xpc3QoQ2Fj
aGUmLCBOZXR3b3JrQ2FjaGU6OlN0b3JhZ2U6OlRyYXZlcnNlSGFuZGxlciYmKTsKKyAgICB2b2lk
IHJlYWRSZWNvcmQoY29uc3QgTmV0d29ya0NhY2hlOjpLZXkmLCBXVEY6OkZ1bmN0aW9uPHZvaWQo
RXhwZWN0ZWQ8V2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OlJlY29yZCwgV2ViQ29yZTo6RE9NQ2Fj
aGVFbmdpbmU6OkVycm9yPiYmKT4mJik7CisgICAgdm9pZCB3cml0ZVJlY29yZChjb25zdCBDYWNo
ZSYsIGNvbnN0IFJlY29yZEluZm9ybWF0aW9uJiwgV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OlJl
Y29yZCYmLCBXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6Q29tcGxldGlvbkNhbGxiYWNrJiYpOwor
ICAgIHZvaWQgcmVtb3ZlUmVjb3JkKGNvbnN0IE5ldHdvcmtDYWNoZTo6S2V5Jik7CisKKyAgICBj
b25zdCBOZXR3b3JrQ2FjaGU6OlNhbHQmIHNhbHQoKSBjb25zdDsKKworICAgIGJvb2wgc2hvdWxk
UGVyc2lzdCgpIGNvbnN0IHsgcmV0dXJuICFtX3Jvb3RQYXRoLmlzTnVsbCgpOyB9CisKIHByaXZh
dGU6CiAgICAgQ2FjaGVzKEVuZ2luZSYsIFN0cmluZyYmIG9yaWdpbik7CiAKICAgICB2b2lkIHJl
YWRDYWNoZXNGcm9tRGlzayhXVEY6OkZ1bmN0aW9uPHZvaWQoRXhwZWN0ZWQ8VmVjdG9yPENhY2hl
PiwgV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OkVycm9yPiYmKT4mJik7CiAgICAgdm9pZCB3cml0
ZUNhY2hlc1RvRGlzayhXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6Q29tcGxldGlvbkNhbGxiYWNr
JiYpOwogCi0KICAgICBDYWNoZSogZmluZChjb25zdCBTdHJpbmcmIG5hbWUpOwogCi0gICAgYm9v
bCBzaG91bGRQZXJzaXN0KCkgY29uc3QgeyByZXR1cm4gIW1fcm9vdFBhdGguaXNOdWxsKCk7IH0K
LQogICAgIHZvaWQgbWFrZURpcnR5KCkgeyArK21fdXBkYXRlQ291bnRlcjsgfQogICAgIGJvb2wg
aXNEaXJ0eSh1aW50NjRfdCB1cGRhdGVDb3VudGVyKSBjb25zdDsKIApAQCAtNzQsNiArODAsOCBA
QCBwcml2YXRlOgogICAgIFZlY3RvcjxDYWNoZT4gbV9jYWNoZXM7CiAgICAgVmVjdG9yPENhY2hl
PiBtX3JlbW92ZWRDYWNoZXM7CiAgICAgUmVmUHRyPE5ldHdvcmtDYWNoZTo6U3RvcmFnZT4gbV9z
dG9yYWdlOworICAgIEhhc2hNYXA8TmV0d29ya0NhY2hlOjpLZXksIFdlYkNvcmU6OkRPTUNhY2hl
RW5naW5lOjpSZWNvcmQ+IG1fdm9sYXRpbGVTdG9yYWdlOworICAgIG11dGFibGUgc3RkOjpvcHRp
b25hbDxOZXR3b3JrQ2FjaGU6OlNhbHQ+IG1fdm9sYXRpbGVTYWx0OwogICAgIFZlY3RvcjxXZWJD
b3JlOjpET01DYWNoZUVuZ2luZTo6Q29tcGxldGlvbkNhbGxiYWNrPiBtX3BlbmRpbmdJbml0aWFs
aXphdGlvbkNhbGxiYWNrczsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuY3BwCmluZGV4IDgwM2E5OWZi
ZGRkNmQ4ZDIyNzBhZDU1YzliY2I1MGEwNTFhNDRiM2YuLjBiNjUyOGRkNzI4ZmI5MzMwYWE5ZDA1
NDI4NTc0Y2Y0NjBkMDlhZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcApAQCAtODQ2LDEwICs4NDYs
NyBAQCB2b2lkIFN0b3JhZ2U6OnN0b3JlKGNvbnN0IFJlY29yZCYgcmVjb3JkLCBNYXBwZWRCb2R5
SGFuZGxlciYmIG1hcHBlZEJvZHlIYW5kbGVyKQogICAgIGlmICghaXNJbml0aWFsV3JpdGUpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIC8vIERlbGF5IHRoZSBzdGFydCBvZiB3cml0ZXMgYSBiaXQg
dG8gYXZvaWQgYWZmZWN0aW5nIGVhcmx5IHBhZ2UgbG9hZC4KLSAgICAvLyBDb21wbGV0aW5nIHdy
aXRlcyB3aWxsIGRpc3BhdGNoIG1vcmUgd3JpdGVzIHdpdGhvdXQgZGVsYXkuCi0gICAgc3RhdGlj
IGNvbnN0IFNlY29uZHMgaW5pdGlhbFdyaXRlRGVsYXkgPSAxX3M7Ci0gICAgbV93cml0ZU9wZXJh
dGlvbkRpc3BhdGNoVGltZXIuc3RhcnRPbmVTaG90KGluaXRpYWxXcml0ZURlbGF5KTsKKyAgICBt
X3dyaXRlT3BlcmF0aW9uRGlzcGF0Y2hUaW1lci5zdGFydE9uZVNob3QobV9pbml0aWFsV3JpdGVE
ZWxheSk7CiB9CiAKIHZvaWQgU3RvcmFnZTo6dHJhdmVyc2UoY29uc3QgU3RyaW5nJiB0eXBlLCBU
cmF2ZXJzZUZsYWdzIGZsYWdzLCBUcmF2ZXJzZUhhbmRsZXImJiB0cmF2ZXJzZUhhbmRsZXIpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNo
ZVN0b3JhZ2UuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlU3RvcmFnZS5oCmluZGV4IDQxMmVkOWVjNTczMTEzZDhlNTFiMmNmZTMxYmViMDVmOTVlZDk0
NzkuLmI2ODhkY2Q0ZTBhNzVlYTEyYTlkMTBkZGU3YzliYjRjOGY5ZjRiNDYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3Rv
cmFnZS5oCkBAIC0xMDQsNiArMTA0LDggQEAgcHVibGljOgogCiAgICAgflN0b3JhZ2UoKTsKIAor
ICAgIHZvaWQgd3JpdGVXaXRob3V0V2FpdGluZygpIHsgbV9pbml0aWFsV3JpdGVEZWxheSA9IDBf
czsgfTsKKwogcHJpdmF0ZToKICAgICBTdG9yYWdlKGNvbnN0IFN0cmluZyYgZGlyZWN0b3J5UGF0
aCwgTW9kZSwgU2FsdCk7CiAKQEAgLTE4Miw2ICsxODQsMTAgQEAgcHJpdmF0ZToKICAgICBSZWY8
V29ya1F1ZXVlPiBtX3NlcmlhbEJhY2tncm91bmRJT1F1ZXVlOwogCiAgICAgQmxvYlN0b3JhZ2Ug
bV9ibG9iU3RvcmFnZTsKKworICAgIC8vIEJ5IGRlZmF1bHQsIGRlbGF5IHRoZSBzdGFydCBvZiB3
cml0ZXMgYSBiaXQgdG8gYXZvaWQgYWZmZWN0aW5nIGVhcmx5IHBhZ2UgbG9hZC4KKyAgICAvLyBD
b21wbGV0aW5nIHdyaXRlcyB3aWxsIGRpc3BhdGNoIG1vcmUgd3JpdGVzIHdpdGhvdXQgZGVsYXku
CisgICAgU2Vjb25kcyBtX2luaXRpYWxXcml0ZURlbGF5IHsgMV9zIH07CiB9OwogCiAvLyBGSVhN
RTogUmVtb3ZlLCB1c2VkIGJ5IE5ldHdvcmtDYWNoZVN0YXRpc3RpY3Mgb25seS4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA3
N2I1Yjk3ZGIwYTUwZThhOTE0NDRlZDFhYzY0ODlkMGY1MzM2OTY0Li4xOTUyNmRlZGFjMDMwY2Jk
MTcyMzkwOWMxODdiNGNjMGY0MzFlZGE3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTctMDkt
MTMgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBDYWNo
ZSBBUEkgc3VwcG9ydCBvZiByZWNvcmRzIHBlcnNpc3RlbmN5CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzY4NDUKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGh0dHAvdGVzdHMvY2FjaGUtc3RvcmFnZS9j
YWNoZS1wZXJzaXN0ZW5jeS5odHRwcy5odG1sOgorICAgICAgICAqIGh0dHAvdGVzdHMvY2FjaGUt
c3RvcmFnZS9jYWNoZS1yZWNvcmRzLXBlcnNpc3RlbmN5Lmh0dHBzLWV4cGVjdGVkLnR4dDogQWRk
ZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9jYWNoZS1zdG9yYWdlL2NhY2hlLXJlY29yZHMtcGVy
c2lzdGVuY3kuaHR0cHMuaHRtbDogQWRkZWQuCisKIDIwMTctMDktMTMgIFNhaWQgQWJvdS1IYWxs
YXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KIAogICAgICAgICBGb2xsb3d1cCAocjIyMTgw
NSk6IEFkZHJlc3MgY29tbWVudHMgYW5kIGFkZCBtb3JlIHRlc3RzCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL2NhY2hlLXN0b3JhZ2UvY2FjaGUtcGVyc2lzdGVuY3kuaHR0cHMu
aHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvY2FjaGUtc3RvcmFnZS9jYWNoZS1wZXJzaXN0
ZW5jeS5odHRwcy5odG1sCmluZGV4IGQxZWFkNGQ0YWYyNWJjZThmNTRmNjBhOGEzMmRkMWQ3NzQx
MWI4ZjguLmRjOWU5NmI2NWU4YzI0MWY3MDc5NmU2NTk2NWUyNTdkOWMzNTJjZGQgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvY2FjaGUtc3RvcmFnZS9jYWNoZS1wZXJzaXN0ZW5j
eS5odHRwcy5odG1sCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvY2FjaGUtc3RvcmFnZS9j
YWNoZS1wZXJzaXN0ZW5jeS5odHRwcy5odG1sCkBAIC00MiwxMSArNDIsMTEgQEAKICAgICBwcm9t
aXNlX3Rlc3QodGVzdCA9PiB7CiAgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKICAgICAg
ICAgICAgIHRlc3RSdW5uZXIuc2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChmYWxzZSk7Ci0gICAg
ICAgIHZhciBjbGVhclByb21pc2U7Ci0gICAgICAgIGlmICh3aW5kb3cuaW50ZXJuYWxzKQotICAg
ICAgICAgICAgY2xlYXJQcm9taXNlID1pbnRlcm5hbHMuY2xlYXJDYWNoZVN0b3JhZ2VNZW1vcnlS
ZXByZXNlbnRhdGlvbigpOwogCi0gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY2xlYXJQ
cm9taXNlKS50aGVuKCgpID0+IHsKKyAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRo
ZW4oKCkgPT4geworICAgICAgICAgICAgaWYgKHdpbmRvdy5pbnRlcm5hbHMpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGludGVybmFscy5jbGVhckNhY2hlU3RvcmFnZU1lbW9yeVJlcHJlc2VudGF0
aW9uKCk7CisgICAgICAgIH0pLnRoZW4oKCkgPT4gewogICAgICAgICAgICAgcmV0dXJuIHNlbGYu
Y2FjaGVzLmtleXMoKTsKICAgICAgICAgfSkudGhlbihrZXlzID0+IHsKICAgICAgICAgICAgIHZh
ciBwZW5kaW5nID0gW107CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2NhY2hl
LXN0b3JhZ2UvY2FjaGUtcmVjb3Jkcy1wZXJzaXN0ZW5jeS5odHRwcy1leHBlY3RlZC50eHQgYi9M
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL2NhY2hlLXN0b3JhZ2UvY2FjaGUtcmVjb3Jkcy1wZXJzaXN0
ZW5jeS5odHRwcy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzE5Y2NlYTNiNGRjNGU2YTAyMzA1
MzJjMTc5ZmUxMTA0MTQxZjg2NgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAv
dGVzdHMvY2FjaGUtc3RvcmFnZS9jYWNoZS1yZWNvcmRzLXBlcnNpc3RlbmN5Lmh0dHBzLWV4cGVj
dGVkLnR4dApAQCAtMCwwICsxLDkgQEAKKworUEFTUyBDbGVhbmluZyBleGlzdGluZyBjYWNoZXMg
CitQQVNTIENhY2hlLnB1dCBjYWxsZWQgdHdpY2Ugd2l0aCBtYXRjaGluZyBSZXF1ZXN0cyAtIGtl
eXMgc2hvdWxkIHJlbWFpbiB0aGUgc2FtZSAtIHRlc3RpbmcgcGVyc2lzdGVuY3kgCitQQVNTIENs
ZWFuaW5nIGNyZWF0ZWQgY2FjaGVzIAorUEFTUyBDaGVja2luZyBwZXJzaXN0ZW5jeSBvZiBjYWNo
ZSBrZXlzIAorUEFTUyBDaGVja2luZyBwZXJzaXN0ZW5jeSBvZiByZXNwb25zZSAKK1BBU1MgQ2hl
Y2tpbmcgcGVyc2lzdGVuY3kgb2YgcmVzcG9uc2UgYm9keSAKK1BBU1MgVGVzdGluZyBvdmVycmlk
aW5nIG9mIGFuIGV4aXN0aW5nIGNhY2hlZCByZWNvcmQgdGhhdCBpcyBub3QgaW4gbWVtb3J5IAor
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2NhY2hlLXN0b3JhZ2UvY2FjaGUt
cmVjb3Jkcy1wZXJzaXN0ZW5jeS5odHRwcy5odG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9j
YWNoZS1zdG9yYWdlL2NhY2hlLXJlY29yZHMtcGVyc2lzdGVuY3kuaHR0cHMuaHRtbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5iYjRiYWEwMGFiZWFhNWQ1NTE3YzMwODVlODFhYjI4MmEzNzJhODUwCi0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9jYWNoZS1zdG9yYWdlL2NhY2hlLXJlY29y
ZHMtcGVyc2lzdGVuY3kuaHR0cHMuaHRtbApAQCAtMCwwICsxLDEzMyBAQAorPCFET0NUWVBFIGh0
bWw+Cis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPkNhY2hlIFN0b3JhZ2U6IHRlc3RpbmcgQ2FjaGUg
cGVyc2lzdGVuY3k8L3RpdGxlPgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3Mu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQu
anMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+CisgICAgPHNjcmlwdD4KK2Z1bmN0aW9uIGFz
c2VydF9oZWFkZXJfZXF1YWxzKGFjdHVhbCwgZXhwZWN0ZWQsIGRlc2NyaXB0aW9uKSB7CisgICAg
YXNzZXJ0X2NsYXNzX3N0cmluZyhhY3R1YWwsICJIZWFkZXJzIiwgZGVzY3JpcHRpb24pOworICAg
IHZhciBoZWFkZXI7CisgICAgdmFyIGFjdHVhbF9oZWFkZXJzID0gW107CisgICAgdmFyIGV4cGVj
dGVkX2hlYWRlcnMgPSBbXTsKKyAgICBmb3IgKGhlYWRlciBvZiBhY3R1YWwpCisgICAgICAgIGFj
dHVhbF9oZWFkZXJzLnB1c2goaGVhZGVyWzBdICsgIjogIiArIGhlYWRlclsxXSk7CisgICAgZm9y
IChoZWFkZXIgb2YgZXhwZWN0ZWQpCisgICAgICAgIGV4cGVjdGVkX2hlYWRlcnMucHVzaChoZWFk
ZXJbMF0gKyAiOiAiICsgaGVhZGVyWzFdKTsKKyAgICBhc3NlcnRfYXJyYXlfZXF1YWxzKGFjdHVh
bF9oZWFkZXJzLCBleHBlY3RlZF9oZWFkZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgZGVz
Y3JpcHRpb24gKyAiIEhlYWRlcnMgZGlmZmVyLiIpOworfQorCitmdW5jdGlvbiBhc3NlcnRfcmVz
cG9uc2VfZXF1YWxzKGFjdHVhbCwgZXhwZWN0ZWQsIGRlc2NyaXB0aW9uKSB7CisgICAgYXNzZXJ0
X2NsYXNzX3N0cmluZyhhY3R1YWwsICJSZXNwb25zZSIsIGRlc2NyaXB0aW9uKTsKKyAgICBbInR5
cGUiLCAidXJsIiwgInN0YXR1cyIsICJvayIsICJzdGF0dXNUZXh0Il0uZm9yRWFjaChmdW5jdGlv
bihhdHRyaWJ1dGUpIHsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyhhY3R1YWxbYXR0cmlidXRlXSwg
ZXhwZWN0ZWRbYXR0cmlidXRlXSwKKyAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAr
ICIgQXR0cmlidXRlcyBkaWZmZXI6ICIgKyBhdHRyaWJ1dGUgKyAiLiIpOworICAgIH0pOworICAg
IGFzc2VydF9oZWFkZXJfZXF1YWxzKGFjdHVhbC5oZWFkZXJzLCBleHBlY3RlZC5oZWFkZXJzLCBk
ZXNjcmlwdGlvbik7Cit9CisKK2Z1bmN0aW9uIGFzc2VydF9yZXF1ZXN0X2VxdWFscyhhY3R1YWws
IGV4cGVjdGVkLCBkZXNjcmlwdGlvbikgeworICAgIGFzc2VydF9jbGFzc19zdHJpbmcoYWN0dWFs
LCAiUmVxdWVzdCIsIGRlc2NyaXB0aW9uKTsKKyAgICBbInVybCJdLmZvckVhY2goZnVuY3Rpb24o
YXR0cmlidXRlKSB7CisgICAgICAgIGFzc2VydF9lcXVhbHMoYWN0dWFsW2F0dHJpYnV0ZV0sIGV4
cGVjdGVkW2F0dHJpYnV0ZV0sCisgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gKyAi
IEF0dHJpYnV0ZXMgZGlmZmVyOiAiICsgYXR0cmlidXRlICsgIi4iKTsKKyAgICB9KTsKKyAgICBh
c3NlcnRfaGVhZGVyX2VxdWFscyhhY3R1YWwuaGVhZGVycywgZXhwZWN0ZWQuaGVhZGVycywgZGVz
Y3JpcHRpb24pOworfQorCitmdW5jdGlvbiBhc3NlcnRfcmVxdWVzdF9hcnJheV9lcXVhbHMoYWN0
dWFsLCBleHBlY3RlZCwgZGVzY3JpcHRpb24pIHsKKyAgICBhc3NlcnRfdHJ1ZShBcnJheS5pc0Fy
cmF5KGFjdHVhbCksIGRlc2NyaXB0aW9uKTsKKyAgICBhc3NlcnRfZXF1YWxzKGFjdHVhbC5sZW5n
dGgsIGV4cGVjdGVkLmxlbmd0aCwgZGVzY3JpcHRpb24pOworICAgIGFjdHVhbC5mb3JFYWNoKGZ1
bmN0aW9uKHZhbHVlLCBpbmRleCkgeworICAgICAgICBhc3NlcnRfcmVxdWVzdF9lcXVhbHModmFs
dWUsIGV4cGVjdGVkW2luZGV4XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2Ny
aXB0aW9uICsgIiA6IG9iamVjdFsiICsgaW5kZXggKyAiXSIpOworICAgIH0pOworfQorCitwcm9t
aXNlX3Rlc3QodGVzdCA9PiB7CisgICAgcmV0dXJuIHNlbGYuY2FjaGVzLmtleXMoKS50aGVuKGtl
eXMgPT4geworICAgICAgICB2YXIgcGVuZGluZyA9IFtdOworICAgICAgICBmb3IgKGtleSBvZiBr
ZXlzKQorICAgICAgICAgICAgcGVuZGluZy5wdXNoKHNlbGYuY2FjaGVzLmRlbGV0ZShrZXlzWzBd
KSk7CisgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChwZW5kaW5nKTsKKyAgICB9KTsKK30sICJD
bGVhbmluZyBleGlzdGluZyBjYWNoZXMiKTsKKwordmFyIHRlc3RfdXJsID0gJ2h0dHBzOi8vZXhh
bXBsZS5jb20vZm9vJzsKK3ZhciB0ZXN0X2JvZHkgPSAnSGVsbG8gd29ybGQhJzsKKworcHJvbWlz
ZV90ZXN0KCgpID0+IHsKKyAgICB2YXIgY2FjaGU7CisgICAgdmFyIGNhY2hlX2tleXM7CisgICAg
dmFyIGZpcnN0X3Jlc3BvbnNlID0gbmV3IFJlc3BvbnNlKCJPbGQgYm9keSIsIHsgc3RhdHVzVGV4
dDogJ09sZCBzdGF0dXMnIH0pOworICAgIHZhciBhbHRlcm5hdGVfcmVzcG9uc2UgPSBuZXcgUmVz
cG9uc2UoIk5ldyBib2R5IiwgeyBzdGF0dXNUZXh0OiAnTmV3IHN0YXR1cycgfSk7CisgICAgcmV0
dXJuIHNlbGYuY2FjaGVzLm9wZW4oInRlc3QtY2FjaGUtcmVjb3Jkcy1wZXJzaXN0ZW5jeSIpLnRo
ZW4oYyA9PiB7CisgICAgICAgIGNhY2hlID0gYzsKKyAgICB9KS50aGVuKCgpID0+IHsKKyAgICAg
ICAgcmV0dXJuIGNhY2hlLnB1dCh0ZXN0X3VybCwgZmlyc3RfcmVzcG9uc2UpOworICAgIH0pLnRo
ZW4oKCkgPT4geworICAgICAgICByZXR1cm4gY2FjaGUua2V5cygpOworICAgIH0pLnRoZW4oa2V5
cyA9PiB7CisgICAgICAgIGNhY2hlX2tleXMgPSBrZXlzOworICAgICAgICBpZiAod2luZG93Lmlu
dGVybmFscykKKyAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbHMuY2xlYXJDYWNoZVN0b3JhZ2VN
ZW1vcnlSZXByZXNlbnRhdGlvbigpOworICAgIH0pLnRoZW4oKCkgPT4geworICAgICAgICByZXR1
cm4gc2VsZi5jYWNoZXMub3BlbigidGVzdC1jYWNoZS1yZWNvcmRzLXBlcnNpc3RlbmN5Iik7Cisg
ICAgfSkudGhlbihjID0+IHsKKyAgICAgICAgY2FjaGUgPSBjOworICAgICAgICByZXR1cm4gY2Fj
aGUua2V5cygpLnRoZW4oKGtleXMpID0+IHsKKyAgICAgICAgICAgIHRlc3QoKCkgPT4geworICAg
ICAgICAgICAgICAgIGFzc2VydF9yZXF1ZXN0X2FycmF5X2VxdWFscyhrZXlzLCBjYWNoZV9rZXlz
KTsKKyAgICAgICAgICAgIH0sICJDaGVja2luZyBwZXJzaXN0ZW5jeSBvZiBjYWNoZSBrZXlzIik7
CisgICAgICAgICAgICByZXR1cm4gY2FjaGUubWF0Y2godGVzdF91cmwpOworICAgICAgICB9KS50
aGVuKChyZXN1bHQpID0+IHsKKyAgICAgICAgICAgIHRlc3QoKCkgPT4geworICAgICAgICAgICAg
ICAgIGFzc2VydF9yZXNwb25zZV9lcXVhbHMocmVzdWx0LCBmaXJzdF9yZXNwb25zZSwgIkNhY2hl
LnB1dCBzaG91bGQgc3RvcmUgdGhlIHJlc3BvbnNlIHBlcnNpc3RlbnRseSIpOworICAgICAgICAg
ICAgfSwgIkNoZWNraW5nIHBlcnNpc3RlbmN5IG9mIHJlc3BvbnNlIik7CisgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0LnRleHQoKTsKKyAgICAgICAgfSkudGhlbigoYm9keSkgPT4geworICAgICAg
ICAgICAgdGVzdCgoKSA9PiB7CisgICAgICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyhib2R5LCAi
T2xkIGJvZHkiLCAiQ2FjaGUgcHV0IHNob3VsZCBzdG9yZSB0aGUgcmVzcG9uc2UgYm9keSBwZXJz
aXN0ZW50bHkuIik7CisgICAgICAgICAgICB9LCAiQ2hlY2tpbmcgcGVyc2lzdGVuY3kgb2YgcmVz
cG9uc2UgYm9keSIpOworICAgICAgICB9KTsKKyAgICB9KS50aGVuKCgpID0+IHsKKyAgICAgICAg
cmV0dXJuIGNhY2hlLnB1dCh0ZXN0X3VybCwgYWx0ZXJuYXRlX3Jlc3BvbnNlKTsKKyAgICB9KS50
aGVuKCgpID0+IHsKKyAgICAgICAgcmV0dXJuIGNhY2hlLmtleXMoKTsKKyAgICB9KS50aGVuKGtl
eXMgPT4geworICAgICAgICBjYWNoZV9rZXlzID0ga2V5czsKKyAgICAgICAgaWYgKHdpbmRvdy5p
bnRlcm5hbHMpCisgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxzLmNsZWFyQ2FjaGVTdG9yYWdl
TWVtb3J5UmVwcmVzZW50YXRpb24oKTsKKyAgICB9KS50aGVuKCgpID0+IHsKKyAgICAgICAgcmV0
dXJuIHNlbGYuY2FjaGVzLm9wZW4oInRlc3QtY2FjaGUtcmVjb3Jkcy1wZXJzaXN0ZW5jeSIpOwor
ICAgIH0pLnRoZW4oYyA9PiB7CisgICAgICAgIGNhY2hlID0gYzsKKyAgICAgICAgcmV0dXJuIGNh
Y2hlLmtleXMoKTsKKyAgICB9KS50aGVuKChrZXlzKSA9PiB7CisgICAgICAgIGFzc2VydF9yZXF1
ZXN0X2FycmF5X2VxdWFscyhrZXlzLCBjYWNoZV9rZXlzKTsKKyAgICB9KS50aGVuKCgpID0+IHsK
KyAgICAgICAgcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgICAgICAgICAgIHJldHVybiBjYWNoZS5t
YXRjaCh0ZXN0X3VybCkudGhlbigocmVzdWx0KSA9PiB7CisgICAgICAgICAgICAgICAgYXNzZXJ0
X3Jlc3BvbnNlX2VxdWFscyhyZXN1bHQsIGFsdGVybmF0ZV9yZXNwb25zZSwgJ0NhY2hlLnB1dCBz
aG91bGQgcmVwbGFjZSBleGlzdGluZyAnICsgJ3Jlc3BvbnNlIHdpdGggbmV3IHJlc3BvbnNlLicp
OworICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQudGV4dCgpOworICAgICAgICAgICAgfSku
dGhlbigoYm9keSkgPT4geworICAgICAgICAgICAgICAgIGFzc2VydF9lcXVhbHMoYm9keSwgIk5l
dyBib2R5IiwgJ0NhY2hlIHB1dCBzaG91bGQgc3RvcmUgbmV3IHJlc3BvbnNlIGJvZHkuJyk7Cisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgfSwgJ1Rlc3Rpbmcgb3ZlcnJpZGluZyBvZiBhbiBleGlz
dGluZyBjYWNoZWQgcmVjb3JkIHRoYXQgaXMgbm90IGluIG1lbW9yeScpOworICAgIH0pOworfSwg
J0NhY2hlLnB1dCBjYWxsZWQgdHdpY2Ugd2l0aCBtYXRjaGluZyBSZXF1ZXN0cyAtIGtleXMgc2hv
dWxkIHJlbWFpbiB0aGUgc2FtZSAtIHRlc3RpbmcgcGVyc2lzdGVuY3knKTsKKworcHJvbWlzZV90
ZXN0KHRlc3QgPT4geworICAgIHJldHVybiBzZWxmLmNhY2hlcy5rZXlzKCkudGhlbihrZXlzID0+
IHsKKyAgICAgICAgdmFyIHBlbmRpbmcgPSBbXTsKKyAgICAgICAgZm9yIChrZXkgb2Yga2V5cykK
KyAgICAgICAgICAgIHBlbmRpbmcucHVzaChzZWxmLmNhY2hlcy5kZWxldGUoa2V5c1swXSkpOwor
ICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocGVuZGluZyk7CisgICAgfSk7Cit9LCAiQ2xlYW5p
bmcgY3JlYXRlZCBjYWNoZXMiKTsKKyAgICA8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>320852</attachid>
            <date>2017-09-14 17:33:19 -0700</date>
            <delta_ts>2017-09-14 19:03:08 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-176845-20170914173318.patch</filename>
            <type>text/plain</type>
            <size>57715</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIxOTk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDBiNGM1Y2Q2NGM0YzdhNzdl
Y2Y2YmY0MGY5ZDBhNTFkYWVjNTMzNzIuLjhiNTMxOGM4M2E3NDYwM2U2YTkyODc1ZDQ0NzBjZjZh
NmY2MWRlMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTA1IEBACiAyMDE3LTA5LTEzICBZb3Vlbm4g
RmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAorICAgICAgICBBZGQgQ2FjaGUgQVBJIHN1cHBv
cnQgb2YgcmVjb3JkcyBwZXJzaXN0ZW5jeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTc2ODQ1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWxleCBDaHJp
c3RlbnNlbi4KKworICAgICAgICBJbnRyb2R1Y2luZyBhc3luY2hyb25vdXMgb3BlbmluZyBvZiBD
YWNoZSBvYmplY3RzLgorICAgICAgICBXaGVuIG9wZW5pbmcsIENhY2hlIG9iamVjdHMgd2lsbCBy
ZWFkIHRoZSBsaXN0IG9mIHJlY29yZHMgZnJvbSB0aGUgZGlzay4KKyAgICAgICAgVGhleSBrZWVw
IGluIG1lbW9yeSB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIHRvIG1ha2UgYW55IG1hdGNoIG9y
IHJlbW92ZSByZXF1ZXN0IHdpdGhvdXQgcmVhZGluZyBmdXJ0aGVyIGluZm9ybWF0aW9uIGZyb20g
dGhlIGRpc2suCisgICAgICAgIENhY2hlIG9iamVjdHMgdGh1cyBrZWVwIGR1cmluZyB0aGUgb3Bl
bmluZyB0aW1lIGEgbGlzdCBvZiBjYWxsYmFja3MgdG8gY2FsbCB3aGVuIGJlaW5nIG9wZW5lZC4K
KyAgICAgICAgUGVyc2lzdGVudCBzdG9yYWdlIGlzIGltcGxlbWVudGVkIHRocm91Z2ggTmV0d29y
a0NhY2hlOjpTdG9yYWdlLgorCisgICAgICAgIEEgQ2FjaGUgb2JqZWN0IGlzIGFkZGVkIGEgdW5p
cXVlIG5hbWUgc28gdGhhdCByZWNvcmRzIGZyb20gYSBDYWNoZSBjYW5ub3QgYmUgbWl4ZWQgd2l0
aCByZWNvcmRzIGZyb20gYW5vdGhlciBDYWNoZS4KKyAgICAgICAgVGhpcyB1bmlxdWUgbmFtZSBp
cyBzdG9yZWQgcGVyc2lzdGVubHkgaW4gYWRkaXRpb24gdG8gdGhlIENhY2hlIG5hbWUuCisgICAg
ICAgIFRoaXMgdW5pcXVlIG5hbWUgaXMgdXNlZCBhcyB0aGUga2V5IHR5cGUgZ2l2ZW4gdG8gdGhl
IHN0b3JhZ2UuCisKKyAgICAgICAgUmVxdWVzdCwgcmVzcG9uc2UgYW5kIHJlc3BvbnNlYm9keSBk
YXRhIGFyZSBubyBsb25nZXIga2VwdCBieSB0aGUgQ2FjaGUgb2JqZWN0LgorICAgICAgICBGb3Ig
cmVndWxhciBzZXNzaW9ucywgdGhpcyBpbmZvcm1hdGlvbiBpcyBrZXB0IG9uIHRoZSBkaXNrIHRo
cm91Z2ggTmV0d29ya0NhY2hlOjpTdG9yYWdlLgorICAgICAgICBJbnNlcnRpb24gdGltZSBpcyBh
bHNvIHN0b3JlZCBwZXJzaXN0ZW50bHkgc28gYXMgdG8ga2VlcCB0aGUgb3JkZXJpbmcgb2YgdGhl
IHJlY29yZHMgY29uc2lzdGVudC4KKyAgICAgICAgRm9yIHByaXZhdGUgYnJvd3Npbmcgc2Vzc2lv
bnMsIHRoaXMgaW5mb3JtYXRpb24gaXMga2VwdCBpbiBhIG1hcCBvd25lZCBieSB0aGUgQ2FjaGVz
IG9iamVjdC4KKyAgICAgICAgUmVjb3JkRGF0YSBpcyByZW5hbWVkIHRvIFJlY29yZEluZm9ybWF0
aW9uIGFzIGl0IG5vdyBvbmx5IGNvbnRhaW5zIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGhhbmRs
ZSB0aGUgZGlmZmVyZW50IENhY2hlIGFjdGlvbnMuCisKKyAgICAgICAgRm9yIGV2ZXJ5IHJlY29y
ZCByZXRyaWV2YWwgYWN0aW9uLCBhIFJlYWRSZWNvcmRUYXNrQ291bnRlciBpcyB1c2VkLgorICAg
ICAgICBJdHMgcHVycG9zZSBpcyB0byBhbGxvdyByZXRyaWV2aW5nIHRoZSByZWNvcmQgZGF0YSBv
biB0aGUgZGlzayBpbiBwYXJhbGxlbCwKKyAgICAgICAgYW5kIHRoZW4gc2VuZCBiYWNrIHRoZSBp
bmZvcm1hdGlvbiB3aGVuIGV2ZXJ5dGhpbmcgaXMgcmVhZC4KKyAgICAgICAgSW4gY2FzZSBzb21l
IHJlY29yZHMgY2Fubm90IGJlIGNvcnJlY3RseSByZWFkLCB0aGV5IGFyZSByZW1vdmVkIGF1dG9t
YXRpY2FsbHkgYXQgdGhhdCBwb2ludC4KKyAgICAgICAgVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRp
b24gbG9hZHMgYWxsIGluZm9ybWF0aW9uIGluIG1lbW9yeSBpbmNsdWRpbmcgcmVzcG9uc2UgYm9k
aWVzLgorICAgICAgICBGdXJ0aGVyIGltcHJvdmVtZW50cyBtaWdodCBjb25zaWRlciBzdHJlYW1p
bmcgdGhlIHJlc3BvbnNlIGJvZGllcyBwcm9ncmVzc2l2ZWx5LgorCisgICAgICAgIEZvciBldmVy
eSBzdG9yZWQgcmVjb3JkLCBhbiBBc3luY2hyb25vdXNQdXRUYXNrQ291bnRlciBpcyB1c2VkLgor
ICAgICAgICBJdHMgcHVycG9zZSBpcyBhbHNvIHRvIHdhaXQgZm9yIGFsbCBwdXQgYWN0aW9ucyB0
byBiZSBjb21wbGV0ZWQgYmVmb3JlIGV4ZWN1dGluZyB0aGUgY29tcGxldGlvbiBjYWxsYmFjay4K
KyAgICAgICAgSW4gc29tZSBjYXNlcywgYSByZWNvcmQgbmVlZHMgdG8gYmUgb3ZlcnJpZGVuLgor
ICAgICAgICBJbiB0aGF0IGNhc2UsIGFzIHBlciB0aGUgc3BlY2lmaWNhdGlvbiwgb25seSB0aGUg
ZGF0YSByZWxhdGVkIHRvIHRoZSByZXNwb25zZSBpcyB0byBiZSBtb2RpZmllZC4KKyAgICAgICAg
VGhpcyByZXF1aXJlcyByZWFkaW5nIHRoZSByZWNvcmQgcmVxdWVzdCBkYXRhIG9uIGRpc2sgYmVm
b3JlIGFjdHVhbGx5IHdyaXRpbmcgdGhlIHdob2xlIHJlY29yZCBhZ2Fpbi4KKyAgICAgICAgVGhp
cyBpcyBpbXBsZW1lbnRlZCBpbiB1cGRhdGVSZWNvcmRUb0Rpc2suCisKKyAgICAgICAgVGhlIENh
Y2hlIG9iamVjdCBpcyBkZWxlZ2F0aW5nIGFsbCByZWNvcmQgd3JpdGluZy9yZWFkaW5nIHRhc2tz
IHRvIGl0cyBDYWNoZXMgb2JqZWN0LgorICAgICAgICBUaGUgQ2FjaGVzIG9iamVjdCBpcyByZXNw
b25zaWJsZSB0byBoYW5kbGUgcGVyc2lzdGVudC9wcml2YXRlIHNlc3Npb25zLgorCisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpFbmdpbmU6OnJldHJpZXZlUmVjb3Jkcyk6IE1ha2luZyBz
dXJlIENhY2hlIG9iamVjdCBpcyBvcGVuZWQuCisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFn
ZTo6RW5naW5lOjpyZWFkQ2FjaGUpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9y
YWdlOjpFbmdpbmU6OnVubG9jayk6IERpc3Bvc2luZyB0aGUgY2FjaGUgd2l0aG91dCBnb2luZyB0
aHJvdWdoIGluaXRpYWxpemluZyBpdC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9D
YWNoZVN0b3JhZ2VFbmdpbmVDYWNoZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFn
ZTo6Y29tcHV0ZUtleVVSTCk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6cXVlcnlD
YWNoZSk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6dXBkYXRlVmFyeUluZm9ybWF0
aW9uKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6dG9SZWNvcmRJbmZv
cm1hdGlvbik6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OkNhY2hlKToK
KyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6b3Blbik6CisgICAgICAgIChX
ZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OmZpbmlzaE9wZW5pbmcpOgorICAgICAgICAoV2Vi
S2l0OjpDYWNoZVN0b3JhZ2U6OlJlYWRSZWNvcmRUYXNrQ291bnRlcjo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpSZWFkUmVjb3JkVGFza0NvdW50ZXI6On5SZWFkUmVj
b3JkVGFza0NvdW50ZXIpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OlJlYWRSZWNv
cmRUYXNrQ291bnRlcjo6YXBwZW5kUmVjb3JkKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9y
YWdlOjpSZWFkUmVjb3JkVGFza0NvdW50ZXI6OlJlYWRSZWNvcmRUYXNrQ291bnRlcik6CisgICAg
ICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OnJldHJpZXZlUmVjb3JkKToKKyAgICAg
ICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6cmV0cmlldmVSZWNvcmRzKToKKyAgICAg
ICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6YWRkUmVjb3JkKToKKyAgICAgICAgKFdl
YktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6cmVjb3Jkc0Zyb21VUkwpOgorICAgICAgICAoV2Vi
S2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjpyZWNvcmRzRnJvbVVSTCBjb25zdCk6CisgICAgICAg
IChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6QXN5bmNocm9ub3VzUHV0VGFza0NvdW50ZXI6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6QXN5bmNocm9ub3VzUHV0VGFza0Nv
dW50ZXI6On5Bc3luY2hyb25vdXNQdXRUYXNrQ291bnRlcik6CisgICAgICAgIChXZWJLaXQ6OkNh
Y2hlU3RvcmFnZTo6QXN5bmNocm9ub3VzUHV0VGFza0NvdW50ZXI6Om9uQ29tcGxldGlvbik6Cisg
ICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6QXN5bmNocm9ub3VzUHV0VGFza0NvdW50ZXI6
OnNldEVycm9yKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6cHV0KToK
KyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6cmVtb3ZlKToKKyAgICAgICAg
KFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6cmVtb3ZlRnJvbVJlY29yZExpc3QpOgorICAg
ICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjp3cml0ZVJlY29yZFRvRGlzayk6Cisg
ICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OnVwZGF0ZVJlY29yZFRvRGlzayk6
CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OnJlYWRSZWNvcmRGcm9tRGlz
ayk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OnJlbW92ZVJlY29yZEZy
b21EaXNrKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6ZW5jb2RlKToK
KyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpkZWNvZGVSZWNvcmRIZWFkZXIpOgorICAg
ICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjpkZWNvZGUpOgorICAgICAgICAoV2Vi
S2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjprZXlzIGNvbnN0KToKKyAgICAgICAgKiBOZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZS5oOgorICAgICAgICAoV2ViS2l0
OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjppc09wZW5lZCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6
OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OnVuaXF1ZU5hbWUgY29uc3QpOgorICAgICAgICAqIE5ldHdv
cmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYktp
dDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6Om9wZW4pOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0
b3JhZ2U6OkNhY2hlczo6cmVtb3ZlKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpD
YWNoZXM6OmRpc3Bvc2UpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OmVuY29kZUNh
Y2hlTmFtZXMpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OmRlY29kZUNhY2hlc05h
bWVzKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6OnJlYWRDYWNoZXNG
cm9tRGlzayk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjpyZWFkUmVj
b3Jkc0xpc3QpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6d3JpdGVS
ZWNvcmQpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6cmVhZFJlY29y
ZCk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjpyZW1vdmVSZWNvcmQp
OgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6Y2xlYXJNZW1vcnlSZXBy
ZXNlbnRhdGlvbik6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjpzYWx0
IGNvbnN0KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdp
bmVDYWNoZXMuaDoKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6OnNob3Vs
ZFBlcnNpc3QgY29uc3QpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZVN0b3JhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlN0b3JhZ2U6
OnN0b3JlKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9y
YWdlLmg6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3RvcmFnZTo6d3JpdGVXaXRo
b3V0V2FpdGluZyk6CisKKzIwMTctMDktMTMgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUu
Y29tPgorCiAgICAgICAgIEludGVybmFscyBjbGVhckNhY2hlU3RvcmFnZU1lbW9yeVJlcHJlc2Vu
dGF0aW9uIHNob3VsZCByZXR1cm4gYSBQcm9taXNlCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzY4MTgKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmUuY3BwIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmUuY3BwCmluZGV4IDU4
MzJjMWExMTc5NWU5ZmNkOGIyZjE3YWI4Y2Y1N2Y2ZmVmY2MzMGIuLjQwOGY2MmIxY2NiNGZmYjgz
ZTllYTE3OTg2ZDM2ZDA0ZDNmOTllMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZS5jcHAKQEAgLTEzMiw4ICsx
MzIsNyBAQCB2b2lkIEVuZ2luZTo6cmV0cmlldmVSZWNvcmRzKHVpbnQ2NF90IGNhY2hlSWRlbnRp
ZmllciwgV2ViQ29yZTo6VVJMJiYgdXJsLCBSZWNvcgogICAgICAgICAgICAgY2FsbGJhY2sobWFr
ZVVuZXhwZWN0ZWQocmVzdWx0LmVycm9yKCkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQotCi0gICAgICAgIGNhbGxiYWNrKHJlc3VsdC52YWx1ZSgpLmdldCgpLnJldHJpZXZlUmVj
b3Jkcyh1cmwpKTsKKyAgICAgICAgcmVzdWx0LnZhbHVlKCkuZ2V0KCkucmV0cmlldmVSZWNvcmRz
KHVybCwgV1RGTW92ZShjYWxsYmFjaykpOwogICAgIH0pOwogfQogCkBAIC0yMTcsMTIgKzIxNiwy
OCBAQCB2b2lkIEVuZ2luZTo6cmVhZENhY2hlc0Zyb21EaXNrKGNvbnN0IFN0cmluZyYgb3JpZ2lu
LCBDYWNoZXNDYWxsYmFjayYmIGNhbGxiYWNrKQogCiB2b2lkIEVuZ2luZTo6cmVhZENhY2hlKHVp
bnQ2NF90IGNhY2hlSWRlbnRpZmllciwgQ2FjaGVDYWxsYmFjayYmIGNhbGxiYWNrKQogewotICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQgcmVhZGluZy4KICAgICBhdXRvKiBjYWNoZSA9IHRoaXMtPmNh
Y2hlKGNhY2hlSWRlbnRpZmllcik7CiAgICAgaWYgKCFjYWNoZSkgewogICAgICAgICBjYWxsYmFj
ayhtYWtlVW5leHBlY3RlZChFcnJvcjo6SW50ZXJuYWwpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KKyAgICBpZiAoIWNhY2hlLT5pc09wZW5lZCgpKSB7CisgICAgICAgIGNhY2hlLT5vcGVuKFt0
aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNhY2hlSWRlbnRpZmllciwgY2Fs
bGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oc3RkOjpvcHRpb25hbDxFcnJvcj4mJiBlcnJvcikg
bXV0YWJsZSB7CisgICAgICAgICAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgICAgICAgICBjYWxs
YmFjayhtYWtlVW5leHBlY3RlZChlcnJvci52YWx1ZSgpKSk7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBhdXRvKiBjYWNoZSA9IHRoaXMtPmNh
Y2hlKGNhY2hlSWRlbnRpZmllcik7CisgICAgICAgICAgICBpZiAoIWNhY2hlKSB7CisgICAgICAg
ICAgICAgICAgY2FsbGJhY2sobWFrZVVuZXhwZWN0ZWQoRXJyb3I6OkludGVybmFsKSk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQVNTRVJUKGNh
Y2hlLT5pc09wZW5lZCgpKTsKKyAgICAgICAgICAgIGNhbGxiYWNrKHN0ZDo6cmVmZXJlbmNlX3dy
YXBwZXI8Q2FjaGU+IHsgKmNhY2hlIH0pOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KICAgICBjYWxsYmFjayhzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPENhY2hlPiB7ICpjYWNo
ZSB9KTsKIH0KIApAQCAtMzI4LDEyICszNDMsMTEgQEAgdm9pZCBFbmdpbmU6OnVubG9jayh1aW50
NjRfdCBjYWNoZUlkZW50aWZpZXIpCiAgICAgaWYgKC0tbG9ja0NvdW50LT52YWx1ZSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgcmVhZENhY2hlKGNhY2hlSWRlbnRpZmllciwgW3RoaXNdKENhY2hl
T3JFcnJvciYmIHJlc3VsdCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmICghcmVzdWx0Lmhhc1ZhbHVl
KCkpCi0gICAgICAgICAgICByZXR1cm47CisgICAgYXV0byogY2FjaGUgPSB0aGlzLT5jYWNoZShj
YWNoZUlkZW50aWZpZXIpOworICAgIGlmICghY2FjaGUpCisgICAgICAgIHJldHVybjsKIAotICAg
ICAgICByZXN1bHQudmFsdWUoKS5nZXQoKS5kaXNwb3NlKCk7Ci0gICAgfSk7CisgICAgY2FjaGUt
PmRpc3Bvc2UoKTsKIH0KIAogU3RyaW5nIEVuZ2luZTo6cmVwcmVzZW50YXRpb24oKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdp
bmVDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3Rv
cmFnZUVuZ2luZUNhY2hlLmNwcAppbmRleCA0ODFhZGQ3ZWNjYjFjNWEyNTIzZWVhZjgyYjY2NGI3
M2RmZWE2ODVlLi4zOGY4NzQxYWM2NGQ0ODVhZjM4ZTllMWJlNTNjMDU1ZTk0MDJiZTkyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVu
Z2luZUNhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0Nh
Y2hlU3RvcmFnZUVuZ2luZUNhY2hlLmNwcApAQCAtMjcsMTUgKzI3LDE2IEBACiAjaW5jbHVkZSAi
Q2FjaGVTdG9yYWdlRW5naW5lLmgiCiAKICNpbmNsdWRlICJDYWNoZVN0b3JhZ2VFbmdpbmVDYWNo
ZXMuaCIKKyNpbmNsdWRlICJOZXR3b3JrQ2FjaGVDb2RlcnMuaCIKICNpbmNsdWRlICJOZXR3b3Jr
Q2FjaGVJT0NoYW5uZWwuaCIKICNpbmNsdWRlICJOZXR3b3JrQ2FjaGVLZXkuaCIKICNpbmNsdWRl
ICJOZXR3b3JrUHJvY2Vzcy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ2FjaGVRdWVyeU9wdGlvbnMu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL0hUVFBQYXJzZXJzLmg+CiAjaW5jbHVkZSA8cGFsL1Nlc3Np
b25JRC5oPgotI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9NYWlu
VGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3Rm
L1VVSUQuaD4KICNpbmNsdWRlIDx3dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVycy5oPgog
I2luY2x1ZGUgPHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RGVjb2Rlci5oPgogI2luY2x1ZGUg
PHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RW5jb2Rlci5oPgpAQCAtNTEsNyArNTIsMTggQEAg
bmFtZXNwYWNlIFdlYktpdCB7CiAKIG5hbWVzcGFjZSBDYWNoZVN0b3JhZ2UgewogCi1zdGF0aWMg
aW5saW5lIFZlY3Rvcjx1aW50NjRfdD4gcXVlcnlDYWNoZShjb25zdCBWZWN0b3I8UmVjb3JkRGF0
YT4qIHJlY29yZHMsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgQ2FjaGVR
dWVyeU9wdGlvbnMmIG9wdGlvbnMpCitzdGF0aWMgc3RkOjpvcHRpb25hbDxzdGQ6OnBhaXI8UmVj
b3JkLCBkb3VibGU+PiBkZWNvZGVSZWNvcmRIZWFkZXIoY29uc3QgU3RvcmFnZTo6UmVjb3JkJik7
CisKK3N0YXRpYyBpbmxpbmUgU3RyaW5nIGNvbXB1dGVLZXlVUkwoY29uc3QgVVJMJiB1cmwpCit7
CisgICAgVVJMIGtleVVSTCA9IHVybDsKKyAgICBpZiAoa2V5VVJMLmhhc1F1ZXJ5KCkpCisgICAg
ICAgIGtleVVSTC5zZXRRdWVyeSh7IH0pOworICAgIGtleVVSTC5yZW1vdmVGcmFnbWVudElkZW50
aWZpZXIoKTsKKyAgICByZXR1cm4ga2V5VVJMOworfQorCitzdGF0aWMgaW5saW5lIFZlY3Rvcjx1
aW50NjRfdD4gcXVlcnlDYWNoZShjb25zdCBWZWN0b3I8UmVjb3JkSW5mb3JtYXRpb24+KiByZWNv
cmRzLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IENhY2hlUXVlcnlPcHRp
b25zJiBvcHRpb25zKQogewogICAgIGlmICghcmVjb3JkcykKICAgICAgICAgcmV0dXJuIHsgfTsK
QEAgLTY3LDQ3ICs3OSw0MiBAQCBzdGF0aWMgaW5saW5lIFZlY3Rvcjx1aW50NjRfdD4gcXVlcnlD
YWNoZShjb25zdCBWZWN0b3I8UmVjb3JkRGF0YT4qIHJlY29yZHMsIGNvbgogICAgIHJldHVybiBy
ZXN1bHRzOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlVmFyeUluZm9ybWF0aW9uKFJl
Y29yZERhdGEmIHJlY29yZERhdGEpCitzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlVmFyeUluZm9y
bWF0aW9uKFJlY29yZEluZm9ybWF0aW9uJiByZWNvcmRJbmZvcm1hdGlvbiwgY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKIHsK
LSAgICBhdXRvIHZhcnlWYWx1ZSA9IHJlY29yZERhdGEuZGF0YS0+cmVzcG9uc2UuaHR0cEhlYWRl
ckZpZWxkKFdlYkNvcmU6OkhUVFBIZWFkZXJOYW1lOjpWYXJ5KTsKKyAgICBhdXRvIHZhcnlWYWx1
ZSA9IHJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZChXZWJDb3JlOjpIVFRQSGVhZGVyTmFtZTo6VmFy
eSk7CiAgICAgaWYgKHZhcnlWYWx1ZS5pc051bGwoKSkgewotICAgICAgICByZWNvcmREYXRhLmhh
c1ZhcnlTdGFyID0gZmFsc2U7Ci0gICAgICAgIHJlY29yZERhdGEudmFyeUhlYWRlcnMgPSB7IH07
CisgICAgICAgIHJlY29yZEluZm9ybWF0aW9uLmhhc1ZhcnlTdGFyID0gZmFsc2U7CisgICAgICAg
IHJlY29yZEluZm9ybWF0aW9uLnZhcnlIZWFkZXJzID0geyB9OwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCiAgICAgdmFyeVZhbHVlLnNwbGl0KCcsJywgZmFsc2UsIFsmXShTdHJpbmdWaWV3IHZp
ZXcpIHsKLSAgICAgICAgaWYgKCFyZWNvcmREYXRhLmhhc1ZhcnlTdGFyICYmIHN0cmlwTGVhZGlu
Z0FuZFRyYWlsaW5nSFRUUFNwYWNlcyh2aWV3KSA9PSAiKiIpCi0gICAgICAgICAgICByZWNvcmRE
YXRhLmhhc1ZhcnlTdGFyID0gdHJ1ZTsKKyAgICAgICAgaWYgKCFyZWNvcmRJbmZvcm1hdGlvbi5o
YXNWYXJ5U3RhciAmJiBzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUVFBTcGFjZXModmlldykgPT0g
IioiKQorICAgICAgICAgICAgcmVjb3JkSW5mb3JtYXRpb24uaGFzVmFyeVN0YXIgPSB0cnVlOwog
ICAgICAgICBTdHJpbmcgaGVhZGVyTmFtZSA9IHZpZXcudG9TdHJpbmcoKTsKLSAgICAgICAgcmVj
b3JkRGF0YS52YXJ5SGVhZGVycy5hZGQoaGVhZGVyTmFtZSwgcmVjb3JkRGF0YS5kYXRhLT5yZXF1
ZXN0Lmh0dHBIZWFkZXJGaWVsZChoZWFkZXJOYW1lKSk7CisgICAgICAgIHJlY29yZEluZm9ybWF0
aW9uLnZhcnlIZWFkZXJzLmFkZChoZWFkZXJOYW1lLCByZXF1ZXN0Lmh0dHBIZWFkZXJGaWVsZCho
ZWFkZXJOYW1lKSk7CiAgICAgfSk7CiAKLSAgICBpZiAocmVjb3JkRGF0YS5oYXNWYXJ5U3RhcikK
LSAgICAgICAgcmVjb3JkRGF0YS52YXJ5SGVhZGVycyA9IHsgfTsKKyAgICBpZiAocmVjb3JkSW5m
b3JtYXRpb24uaGFzVmFyeVN0YXIpCisgICAgICAgIHJlY29yZEluZm9ybWF0aW9uLnZhcnlIZWFk
ZXJzID0geyB9OwogfQogCi1zdGF0aWMgaW5saW5lIFJlY29yZCB0b1JlY29yZChjb25zdCBSZWNv
cmREYXRhJiByZWNvcmQpCitSZWNvcmRJbmZvcm1hdGlvbiBDYWNoZTo6dG9SZWNvcmRJbmZvcm1h
dGlvbihjb25zdCBSZWNvcmQmIHJlY29yZCkKIHsKLSAgICByZXR1cm4geyByZWNvcmQuaWRlbnRp
ZmllciwgcmVjb3JkLnVwZGF0ZVJlc3BvbnNlQ291bnRlciwgcmVjb3JkLmRhdGEtPnJlcXVlc3RI
ZWFkZXJzR3VhcmQsIHJlY29yZC5kYXRhLT5yZXF1ZXN0LCByZWNvcmQuZGF0YS0+b3B0aW9ucywg
cmVjb3JkLmRhdGEtPnJlZmVycmVyLCByZWNvcmQuZGF0YS0+cmVzcG9uc2VIZWFkZXJzR3VhcmQs
IHJlY29yZC5kYXRhLT5yZXNwb25zZSwgY29weVJlc3BvbnNlQm9keShyZWNvcmQuZGF0YS0+cmVz
cG9uc2VCb2R5KSB9OwotfQotCi1zdGF0aWMgaW5saW5lIFJlY29yZERhdGEgdG9SZWNvcmREYXRh
KFJlY29yZCYmIHJlY29yZCkKLXsKLSAgICBhdXRvIHVybCA9IHJlY29yZC5yZXF1ZXN0LnVybCgp
OwotICAgIFJlY29yZERhdGE6OkRhdGEgZGF0YSA9IHsgcmVjb3JkLnJlcXVlc3RIZWFkZXJzR3Vh
cmQsIFdURk1vdmUocmVjb3JkLnJlcXVlc3QpLCBXVEZNb3ZlKHJlY29yZC5vcHRpb25zKSwgV1RG
TW92ZShyZWNvcmQucmVmZXJyZXIpLCBXVEZNb3ZlKHJlY29yZC5yZXNwb25zZUhlYWRlcnNHdWFy
ZCksIFdURk1vdmUocmVjb3JkLnJlc3BvbnNlKSwgV1RGTW92ZShyZWNvcmQucmVzcG9uc2VCb2R5
KSB9OwotICAgIFJlY29yZERhdGEgcmVjb3JkRGF0YSA9IHsgeyB9LCBtb25vdG9uaWNhbGx5SW5j
cmVhc2luZ1RpbWVNUygpLCByZWNvcmQuaWRlbnRpZmllciwgMCwgdXJsLCBmYWxzZSwgeyB9LCBX
VEZNb3ZlKGRhdGEpIH07CisgICAgS2V5IGtleSB7IEFTQ0lJTGl0ZXJhbCgicmVjb3JkIiksIG1f
dW5pcXVlTmFtZSwgeyB9LCBjcmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCksIG1fY2FjaGVzLnNh
bHQoKSB9OworICAgIFJlY29yZEluZm9ybWF0aW9uIHJlY29yZEluZm9ybWF0aW9uIHsgV1RGTW92
ZShrZXkpLCBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWVNUygpLCByZWNvcmQuaWRlbnRpZmll
ciwgMCAsIHJlY29yZC5yZXF1ZXN0LnVybCgpLCBmYWxzZSwgeyB9IH07CiAKLSAgICB1cGRhdGVW
YXJ5SW5mb3JtYXRpb24ocmVjb3JkRGF0YSk7CisgICAgdXBkYXRlVmFyeUluZm9ybWF0aW9uKHJl
Y29yZEluZm9ybWF0aW9uLCByZWNvcmQucmVxdWVzdCwgcmVjb3JkLnJlc3BvbnNlKTsKIAotICAg
IHJldHVybiByZWNvcmREYXRhOworICAgIHJldHVybiByZWNvcmRJbmZvcm1hdGlvbjsKIH0KIAot
Q2FjaGU6OkNhY2hlKENhY2hlcyYgY2FjaGVzLCB1aW50NjRfdCBpZGVudGlmaWVyLCBTdGF0ZSBz
dGF0ZSwgU3RyaW5nJiYgbmFtZSkKK0NhY2hlOjpDYWNoZShDYWNoZXMmIGNhY2hlcywgdWludDY0
X3QgaWRlbnRpZmllciwgU3RhdGUgc3RhdGUsIFN0cmluZyYmIG5hbWUsIFN0cmluZyYmIHVuaXF1
ZU5hbWUpCiAgICAgOiBtX2NhY2hlcyhjYWNoZXMpCiAgICAgLCBtX3N0YXRlKHN0YXRlKQogICAg
ICwgbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCiAgICAgLCBtX25hbWUoV1RGTW92ZShuYW1lKSkK
KyAgICAsIG1fdW5pcXVlTmFtZShXVEZNb3ZlKHVuaXF1ZU5hbWUpKQogewogfQogCkBAIC0xMjIs
NyArMTI5LDM3IEBAIHZvaWQgQ2FjaGU6OmNsZWFyTWVtb3J5UmVwcmVzZW50YXRpb24oKQogICAg
IG1fbmV4dFJlY29yZElkZW50aWZpZXIgPSAwOwogICAgIG1fc3RhdGUgPSBTdGF0ZTo6VW5pbml0
aWFsaXplZDsKIH0KLSAKKworc3RhdGljIFJlY29yZEluZm9ybWF0aW9uIGlzb2xhdGVkQ29weShj
b25zdCBSZWNvcmRJbmZvcm1hdGlvbiYgaW5mb3JtYXRpb24pCit7CisgICAgYXV0byByZXN1bHQg
PSBSZWNvcmRJbmZvcm1hdGlvbiB7IGluZm9ybWF0aW9uLmtleSwgaW5mb3JtYXRpb24uaW5zZXJ0
aW9uVGltZSwgaW5mb3JtYXRpb24uaWRlbnRpZmllciwgaW5mb3JtYXRpb24udXBkYXRlUmVzcG9u
c2VDb3VudGVyLCBpbmZvcm1hdGlvbi51cmwuaXNvbGF0ZWRDb3B5KCksIGluZm9ybWF0aW9uLmhh
c1ZhcnlTdGFyLCB7IH0gfTsKKyAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiB2YXJ5SGVhZGVy
czsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGtleVZhbHVlIDogaW5mb3JtYXRpb24udmFyeUhlYWRl
cnMpCisgICAgICAgIHZhcnlIZWFkZXJzLnNldChrZXlWYWx1ZS5rZXkuaXNvbGF0ZWRDb3B5KCks
IGtleVZhbHVlLnZhbHVlLmlzb2xhdGVkQ29weSgpKTsKKyAgICByZXN1bHQudmFyeUhlYWRlcnMg
PSBXVEZNb3ZlKHZhcnlIZWFkZXJzKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdHJ1Y3Qg
VHJhdmVyc2FsUmVzdWx0IHsKKyAgICBIYXNoTWFwPFN0cmluZywgVmVjdG9yPFJlY29yZEluZm9y
bWF0aW9uPj4gcmVjb3JkczsKKyAgICBWZWN0b3I8S2V5PiBmYWlsZWRSZWNvcmRzOworfTsKKwor
c3RhdGljIFRyYXZlcnNhbFJlc3VsdCBpc29sYXRlZENvcHkoVHJhdmVyc2FsUmVzdWx0JiYgcmVz
dWx0KQoreworICAgIEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8UmVjb3JkSW5mb3JtYXRpb24+PiBp
c29sYXRlZFJlY29yZHM7CisgICAgZm9yIChhdXRvJiBrZXlWYWx1ZSA6IHJlc3VsdC5yZWNvcmRz
KSB7CisgICAgICAgIGF1dG8mIHJlY29yZFZlY3RvciA9IGtleVZhbHVlLnZhbHVlOworICAgICAg
ICBmb3IgKHNpemVfdCBjcHRyID0gMDsgY3B0ciA8IHJlY29yZFZlY3Rvci5zaXplKCk7IGNwdHIr
KykKKyAgICAgICAgICAgIHJlY29yZFZlY3RvcltjcHRyXSA9IGlzb2xhdGVkQ29weShyZWNvcmRW
ZWN0b3JbY3B0cl0pOworCisgICAgICAgIGlzb2xhdGVkUmVjb3Jkcy5zZXQoa2V5VmFsdWUua2V5
Lmlzb2xhdGVkQ29weSgpLCBXVEZNb3ZlKHJlY29yZFZlY3RvcikpOworICAgIH0KKworICAgIC8v
IE5vIG5lZWQgdG8gaXNvbGF0ZSBrZXlzIHNpbmNlIHRoZXkgYXJlIGlzb2xhdGVkIHRocm91Z2gg
dGhlIGNvcHkgY29uc3RydWN0b3IKKyAgICByZXR1cm4gVHJhdmVyc2FsUmVzdWx0IHsgV1RGTW92
ZShpc29sYXRlZFJlY29yZHMpLCBXVEZNb3ZlKHJlc3VsdC5mYWlsZWRSZWNvcmRzKSB9OworfQor
CiB2b2lkIENhY2hlOjpvcGVuKENvbXBsZXRpb25DYWxsYmFjayYmIGNhbGxiYWNrKQogewogICAg
IGlmIChtX3N0YXRlID09IFN0YXRlOjpPcGVuKSB7CkBAIC0xMzQsMTggKzE3MSw1NCBAQCB2b2lk
IENhY2hlOjpvcGVuKENvbXBsZXRpb25DYWxsYmFjayYmIGNhbGxiYWNrKQogICAgICAgICByZXR1
cm47CiAgICAgfQogICAgIG1fc3RhdGUgPSBTdGF0ZTo6T3BlbmluZzsKLSAgICByZWFkUmVjb3Jk
c0xpc3QoW2NhY2hlcyA9IG1ha2VSZWYobV9jYWNoZXMpLCBpZGVudGlmaWVyID0gbV9pZGVudGlm
aWVyLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShzdGQ6Om9wdGlvbmFsPEVycm9yPiYm
IGVycm9yKSBtdXRhYmxlIHsKLSAgICAgICAgYXV0byogY2FjaGUgPSBjYWNoZXMtPmZpbmQoaWRl
bnRpZmllcik7Ci0gICAgICAgIGlmICghY2FjaGUpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKEVy
cm9yOjpJbnRlcm5hbCk7CisgICAgVHJhdmVyc2FsUmVzdWx0IHRyYXZlcnNhbFJlc3VsdDsKKyAg
ICBtX2NhY2hlcy5yZWFkUmVjb3Jkc0xpc3QoKnRoaXMsIFtjYWNoZXMgPSBtYWtlUmVmKG1fY2Fj
aGVzKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgY2FjaGVJZGVudGlmaWVyID0gbV9p
ZGVudGlmaWVyLCB0cmF2ZXJzYWxSZXN1bHQgPSBXVEZNb3ZlKHRyYXZlcnNhbFJlc3VsdCldKGNv
bnN0IGF1dG8qIHN0b3JhZ2VSZWNvcmQsIGNvbnN0IGF1dG8mKSBtdXRhYmxlIHsKKyAgICAgICAg
aWYgKCFzdG9yYWdlUmVjb3JkKSB7CisgICAgICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0
Y2goW2NhY2hlcyA9IFdURk1vdmUoY2FjaGVzKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNr
KSwgY2FjaGVJZGVudGlmaWVyLCB0cmF2ZXJzYWxSZXN1bHQgPSBpc29sYXRlZENvcHkoV1RGTW92
ZSh0cmF2ZXJzYWxSZXN1bHQpKSBdKCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgZm9yIChh
dXRvJiBrZXkgOiB0cmF2ZXJzYWxSZXN1bHQuZmFpbGVkUmVjb3JkcykKKyAgICAgICAgICAgICAg
ICAgICAgY2FjaGVzLT5yZW1vdmVSZWNvcmQoa2V5KTsKKworICAgICAgICAgICAgICAgIGF1dG8q
IGNhY2hlID0gY2FjaGVzLT5maW5kKGNhY2hlSWRlbnRpZmllcik7CisgICAgICAgICAgICAgICAg
aWYgKCFjYWNoZSkgeworICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhFcnJvcjo6SW50ZXJu
YWwpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGNhY2hlLT5tX3JlY29yZHMgPSBXVEZNb3ZlKHRyYXZlcnNhbFJlc3VsdC5y
ZWNvcmRzKTsKKyAgICAgICAgICAgICAgICBjYWNoZS0+ZmluaXNoT3BlbmluZyhXVEZNb3ZlKGNh
bGxiYWNrKSwgc3RkOjpudWxsb3B0KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgYXV0byBkZWNvZGVkID0gZGVjb2RlUmVjb3JkSGVh
ZGVyKCpzdG9yYWdlUmVjb3JkKTsKKyAgICAgICAgaWYgKCFkZWNvZGVkKSB7CisgICAgICAgICAg
ICB0cmF2ZXJzYWxSZXN1bHQuZmFpbGVkUmVjb3Jkcy5hcHBlbmQoc3RvcmFnZVJlY29yZC0+a2V5
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBjYWNoZS0+ZmluaXNo
T3BlbmluZyhXVEZNb3ZlKGNhbGxiYWNrKSwgV1RGTW92ZShlcnJvcikpOworCisgICAgICAgIGF1
dG8mIHJlY29yZCA9IGRlY29kZWQtPmZpcnN0OworICAgICAgICBhdXRvIGluc2VydGlvblRpbWUg
PSBkZWNvZGVkLT5zZWNvbmQ7CisKKyAgICAgICAgUmVjb3JkSW5mb3JtYXRpb24gcmVjb3JkSW5m
b3JtYXRpb24geyBzdG9yYWdlUmVjb3JkLT5rZXksIGluc2VydGlvblRpbWUsIDAsIDAsIHJlY29y
ZC5yZXF1ZXN0LnVybCgpLCBmYWxzZSwgeyB9IH07CisgICAgICAgIHVwZGF0ZVZhcnlJbmZvcm1h
dGlvbihyZWNvcmRJbmZvcm1hdGlvbiwgcmVjb3JkLnJlcXVlc3QsIHJlY29yZC5yZXNwb25zZSk7
CisKKyAgICAgICAgYXV0byYgc2FtZVVSTFJlY29yZHMgPSB0cmF2ZXJzYWxSZXN1bHQucmVjb3Jk
cy5lbnN1cmUoY29tcHV0ZUtleVVSTChyZWNvcmRJbmZvcm1hdGlvbi51cmwpLCBbXSB7IHJldHVy
biBWZWN0b3I8UmVjb3JkSW5mb3JtYXRpb24+IHsgfTsgfSkuaXRlcmF0b3ItPnZhbHVlOworICAg
ICAgICBzYW1lVVJMUmVjb3Jkcy5hcHBlbmQoV1RGTW92ZShyZWNvcmRJbmZvcm1hdGlvbikpOwog
ICAgIH0pOwogfQogCiB2b2lkIENhY2hlOjpmaW5pc2hPcGVuaW5nKENvbXBsZXRpb25DYWxsYmFj
ayYmIGNhbGxiYWNrLCBzdGQ6Om9wdGlvbmFsPEVycm9yPiYmIGVycm9yKQogeworICAgIFZlY3Rv
cjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlY29yZEluZm9ybWF0aW9uPj4gcmVjb3JkczsKKyAg
ICBmb3IgKGF1dG8mIHZhbHVlIDogbV9yZWNvcmRzLnZhbHVlcygpKSB7CisgICAgICAgIGZvciAo
YXV0byYgcmVjb3JkIDogdmFsdWUpCisgICAgICAgICAgICByZWNvcmRzLmFwcGVuZChyZWNvcmQp
OworICAgIH0KKyAgICBzdGQ6OnNvcnQocmVjb3Jkcy5iZWdpbigpLCByZWNvcmRzLmVuZCgpLCBb
Jl0oY29uc3QgYXV0byYgYSwgY29uc3QgYXV0byYgYikgeworICAgICAgICByZXR1cm4gYS5nZXQo
KS5pbnNlcnRpb25UaW1lIDwgYi5nZXQoKS5pbnNlcnRpb25UaW1lOworICAgIH0pOworICAgIGZv
ciAoYXV0byYgcmVjb3JkIDogcmVjb3JkcykKKyAgICAgICAgcmVjb3JkLmdldCgpLmlkZW50aWZp
ZXIgPSArK21fbmV4dFJlY29yZElkZW50aWZpZXI7CisKICAgICBpZiAoZXJyb3IpIHsKICAgICAg
ICAgbV9zdGF0ZSA9IFN0YXRlOjpVbmluaXRpYWxpemVkOwogICAgICAgICBjYWxsYmFjayhlcnJv
ci52YWx1ZSgpKTsKQEAgLTE2Miw1MiArMjM1LDk0IEBAIHZvaWQgQ2FjaGU6OmZpbmlzaE9wZW5p
bmcoQ29tcGxldGlvbkNhbGxiYWNrJiYgY2FsbGJhY2ssIHN0ZDo6b3B0aW9uYWw8RXJyb3I+JiYK
ICAgICAgICAgY2FsbGJhY2soc3RkOjpudWxsb3B0KTsKIH0KIAotVmVjdG9yPFJlY29yZD4gQ2Fj
aGU6OnJldHJpZXZlUmVjb3Jkcyhjb25zdCBVUkwmIHVybCkgY29uc3QKK2NsYXNzIFJlYWRSZWNv
cmRUYXNrQ291bnRlciA6IHB1YmxpYyBSZWZDb3VudGVkPFJlYWRSZWNvcmRUYXNrQ291bnRlcj4g
eworcHVibGljOgorICAgIHVzaW5nIFJlYWRSZWNvcmRzQ2FsbGJhY2sgPSBXVEY6OkZ1bmN0aW9u
PHZvaWQoVmVjdG9yPFJlY29yZD4mJiwgVmVjdG9yPHVpbnQ2NF90PiYmKT47CisgICAgc3RhdGlj
IFJlZjxSZWFkUmVjb3JkVGFza0NvdW50ZXI+IGNyZWF0ZShSZWFkUmVjb3Jkc0NhbGxiYWNrJiYg
Y2FsbGJhY2spIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUmVhZFJlY29yZFRhc2tDb3VudGVyKFdU
Rk1vdmUoY2FsbGJhY2spKSk7IH0KKworICAgIH5SZWFkUmVjb3JkVGFza0NvdW50ZXIoKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICAgICAgaWYgKCFtX2Nh
bGxiYWNrKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBzdGQ6OnNvcnQobV9yZWNvcmRz
LmJlZ2luKCksIG1fcmVjb3Jkcy5lbmQoKSwgWyZdIChjb25zdCBhdXRvJiBhLCBjb25zdCBhdXRv
JiBiKSB7CisgICAgICAgICAgICByZXR1cm4gYS5pZGVudGlmaWVyIDwgYi5pZGVudGlmaWVyOwor
ICAgICAgICB9KTsKKyAgICAgICAgbV9jYWxsYmFjayhXVEZNb3ZlKG1fcmVjb3JkcyksIFdURk1v
dmUobV9mYWlsZWRSZWNvcmRzKSk7CisgICAgfQorCisgICAgdm9pZCBhcHBlbmRSZWNvcmQoRXhw
ZWN0ZWQ8UmVjb3JkLCBFcnJvcj4mJiByZXN1bHQsIHVpbnQ2NF90IHJlY29yZElkZW50aWZpZXIs
IHVpbnQ2NF90IHVwZGF0ZUNvdW50ZXIpCisgICAgeworICAgICAgICBBU1NFUlQoUnVuTG9vcDo6
aXNNYWluKCkpOworICAgICAgICBpZiAoIXJlc3VsdC5oYXNWYWx1ZSgpKSB7CisgICAgICAgICAg
ICBtX2ZhaWxlZFJlY29yZHMuYXBwZW5kKHJlY29yZElkZW50aWZpZXIpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIHJlc3VsdC52YWx1ZSgpLmlkZW50aWZpZXIgPSBy
ZWNvcmRJZGVudGlmaWVyOworICAgICAgICByZXN1bHQudmFsdWUoKS51cGRhdGVSZXNwb25zZUNv
dW50ZXIgPSB1cGRhdGVDb3VudGVyOworICAgICAgICBtX3JlY29yZHMuYXBwZW5kKFdURk1vdmUo
cmVzdWx0LnZhbHVlKCkpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgUmVhZFJl
Y29yZFRhc2tDb3VudGVyKFJlYWRSZWNvcmRzQ2FsbGJhY2smJiBjYWxsYmFjaykKKyAgICAgICAg
OiBtX2NhbGxiYWNrKFdURk1vdmUoY2FsbGJhY2spKQorICAgIHsKKyAgICB9CisKKyAgICBSZWFk
UmVjb3Jkc0NhbGxiYWNrIG1fY2FsbGJhY2s7CisgICAgVmVjdG9yPFJlY29yZD4gbV9yZWNvcmRz
OworICAgIFZlY3Rvcjx1aW50NjRfdD4gbV9mYWlsZWRSZWNvcmRzOworfTsKKwordm9pZCBDYWNo
ZTo6cmV0cmlldmVSZWNvcmQoY29uc3QgUmVjb3JkSW5mb3JtYXRpb24mIHJlY29yZCwgUmVmPFJl
YWRSZWNvcmRUYXNrQ291bnRlcj4mJiB0YXNrQ291bnRlcikKIHsKKyAgICByZWFkUmVjb3JkRnJv
bURpc2socmVjb3JkLCBbY2FjaGVzID0gbWFrZVJlZihtX2NhY2hlcyksIGlkZW50aWZpZXIgPSBt
X2lkZW50aWZpZXIsIHJlY29yZElkZW50aWZpZXIgPSByZWNvcmQuaWRlbnRpZmllciwgdXBkYXRl
Q291bnRlciA9IHJlY29yZC51cGRhdGVSZXNwb25zZUNvdW50ZXIsIHRhc2tDb3VudGVyID0gV1RG
TW92ZSh0YXNrQ291bnRlcildKEV4cGVjdGVkPFJlY29yZCwgRXJyb3I+JiYgcmVzdWx0KSBtdXRh
YmxlIHsKKyAgICAgICAgYXV0byogY2FjaGUgPSBjYWNoZXMtPmZpbmQoaWRlbnRpZmllcik7Cisg
ICAgICAgIGlmICghY2FjaGUpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHRhc2tDb3Vu
dGVyLT5hcHBlbmRSZWNvcmQoV1RGTW92ZShyZXN1bHQpLCByZWNvcmRJZGVudGlmaWVyLCB1cGRh
dGVDb3VudGVyKTsKKyAgICB9KTsKK30KKwordm9pZCBDYWNoZTo6cmV0cmlldmVSZWNvcmRzKGNv
bnN0IFVSTCYgdXJsLCBSZWNvcmRzQ2FsbGJhY2smJiBjYWxsYmFjaykKK3sKKyAgICBBU1NFUlQo
bV9zdGF0ZSA9PSBTdGF0ZTo6T3Blbik7CisKKyAgICBhdXRvIHRhc2tDb3VudGVyID0gUmVhZFJl
Y29yZFRhc2tDb3VudGVyOjpjcmVhdGUoW2NhY2hlcyA9IG1ha2VSZWYobV9jYWNoZXMpLCBpZGVu
dGlmaWVyID0gbV9pZGVudGlmaWVyLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShWZWN0
b3I8UmVjb3JkPiYmIHJlY29yZHMsIFZlY3Rvcjx1aW50NjRfdD4mJiBmYWlsZWRSZWNvcmRJZGVu
dGlmaWVycykgbXV0YWJsZSB7CisgICAgICAgIGF1dG8qIGNhY2hlID0gY2FjaGVzLT5maW5kKGlk
ZW50aWZpZXIpOworICAgICAgICBpZiAoY2FjaGUpCisgICAgICAgICAgICBjYWNoZS0+cmVtb3Zl
RnJvbVJlY29yZExpc3QoZmFpbGVkUmVjb3JkSWRlbnRpZmllcnMpOworICAgICAgICBjYWxsYmFj
ayhXVEZNb3ZlKHJlY29yZHMpKTsKKyAgICB9KTsKKwogICAgIGlmICh1cmwuaXNOdWxsKCkpIHsK
LSAgICAgICAgVmVjdG9yPFJlY29yZD4gcmVzdWx0OwogICAgICAgICBmb3IgKGF1dG8mIHJlY29y
ZHMgOiBtX3JlY29yZHMudmFsdWVzKCkpIHsKICAgICAgICAgICAgIGZvciAoYXV0byYgcmVjb3Jk
IDogcmVjb3JkcykKLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHRvUmVjb3JkKHJlY29y
ZCkpOworICAgICAgICAgICAgICAgIHJldHJpZXZlUmVjb3JkKHJlY29yZCwgdGFza0NvdW50ZXIu
Y29weVJlZigpKTsKICAgICAgICAgfQotICAgICAgICBzdGQ6OnNvcnQocmVzdWx0LmJlZ2luKCks
IHJlc3VsdC5lbmQoKSwgW10oY29uc3QgYXV0byYgYSwgY29uc3QgYXV0byYgYikgewotICAgICAg
ICAgICAgcmV0dXJuIGEuaWRlbnRpZmllciA8IGIuaWRlbnRpZmllcjsKLSAgICAgICAgfSk7Ci0g
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBjb25z
dCBhdXRvKiByZWNvcmRzID0gcmVjb3Jkc0Zyb21VUkwodXJsKTsKKyAgICBhdXRvKiByZWNvcmRz
ID0gcmVjb3Jkc0Zyb21VUkwodXJsKTsKICAgICBpZiAoIXJlY29yZHMpCi0gICAgICAgIHJldHVy
biB7IH07CisgICAgICAgIHJldHVybjsKIAotICAgIFZlY3RvcjxSZWNvcmQ+IHJlc3VsdDsKLSAg
ICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShyZWNvcmRzLT5zaXplKCkpOwogICAgIGZv
ciAoYXV0byYgcmVjb3JkIDogKnJlY29yZHMpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQodG9SZWNv
cmQocmVjb3JkKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGlubGluZSBTdHJp
bmcgY29tcHV0ZUtleVVSTChjb25zdCBVUkwmIHVybCkKLXsKLSAgICBVUkwga2V5VVJMID0gdXJs
OwotICAgIGlmIChrZXlVUkwuaGFzUXVlcnkoKSkKLSAgICAgICAga2V5VVJMLnNldFF1ZXJ5KHsg
fSk7Ci0gICAga2V5VVJMLnJlbW92ZUZyYWdtZW50SWRlbnRpZmllcigpOwotICAgIHJldHVybiBr
ZXlVUkw7CisgICAgICAgIHJldHJpZXZlUmVjb3JkKHJlY29yZCwgdGFza0NvdW50ZXIuY29weVJl
ZigpKTsKIH0KIAotUmVjb3JkRGF0YSYgQ2FjaGU6OmFkZFJlY29yZChWZWN0b3I8UmVjb3JkRGF0
YT4qIHJlY29yZHMsIFJlY29yZCYmIHJlY29yZCkKK1JlY29yZEluZm9ybWF0aW9uJiBDYWNoZTo6
YWRkUmVjb3JkKFZlY3RvcjxSZWNvcmRJbmZvcm1hdGlvbj4qIHJlY29yZHMsIGNvbnN0IFJlY29y
ZCYgcmVjb3JkKQogewogICAgIGlmICghcmVjb3JkcykgewogICAgICAgICBhdXRvIGtleSA9IGNv
bXB1dGVLZXlVUkwocmVjb3JkLnJlcXVlc3QudXJsKCkpOwogICAgICAgICBBU1NFUlQoIW1fcmVj
b3Jkcy5jb250YWlucyhrZXkpKTsKLSAgICAgICAgcmVjb3JkcyA9ICZtX3JlY29yZHMuc2V0KGtl
eSwgVmVjdG9yPFJlY29yZERhdGE+IHsgfSkuaXRlcmF0b3ItPnZhbHVlOworICAgICAgICByZWNv
cmRzID0gJm1fcmVjb3Jkcy5zZXQoa2V5LCBWZWN0b3I8UmVjb3JkSW5mb3JtYXRpb24+IHsgfSku
aXRlcmF0b3ItPnZhbHVlOwogICAgIH0KLSAgICByZWNvcmRzLT5hcHBlbmQodG9SZWNvcmREYXRh
KFdURk1vdmUocmVjb3JkKSkpOworICAgIHJlY29yZHMtPmFwcGVuZCh0b1JlY29yZEluZm9ybWF0
aW9uKHJlY29yZCkpOwogICAgIHJldHVybiByZWNvcmRzLT5sYXN0KCk7CiB9CiAKLVZlY3RvcjxS
ZWNvcmREYXRhPiogQ2FjaGU6OnJlY29yZHNGcm9tVVJMKGNvbnN0IFVSTCYgdXJsKQorVmVjdG9y
PFJlY29yZEluZm9ybWF0aW9uPiogQ2FjaGU6OnJlY29yZHNGcm9tVVJMKGNvbnN0IFVSTCYgdXJs
KQogewogICAgIGF1dG8gaXRlcmF0b3IgPSBtX3JlY29yZHMuZmluZChjb21wdXRlS2V5VVJMKHVy
bCkpOwogICAgIGlmIChpdGVyYXRvciA9PSBtX3JlY29yZHMuZW5kKCkpCkBAIC0yMTUsNyArMzMw
LDcgQEAgVmVjdG9yPFJlY29yZERhdGE+KiBDYWNoZTo6cmVjb3Jkc0Zyb21VUkwoY29uc3QgVVJM
JiB1cmwpCiAgICAgcmV0dXJuICZpdGVyYXRvci0+dmFsdWU7CiB9CiAKLWNvbnN0IFZlY3RvcjxS
ZWNvcmREYXRhPiogQ2FjaGU6OnJlY29yZHNGcm9tVVJMKGNvbnN0IFVSTCYgdXJsKSBjb25zdAor
Y29uc3QgVmVjdG9yPFJlY29yZEluZm9ybWF0aW9uPiogQ2FjaGU6OnJlY29yZHNGcm9tVVJMKGNv
bnN0IFVSTCYgdXJsKSBjb25zdAogewogICAgIGF1dG8gaXRlcmF0b3IgPSBtX3JlY29yZHMuZmlu
ZChjb21wdXRlS2V5VVJMKHVybCkpOwogICAgIGlmIChpdGVyYXRvciA9PSBtX3JlY29yZHMuZW5k
KCkpCkBAIC0yMjMsNTggKzMzOCw4MCBAQCBjb25zdCBWZWN0b3I8UmVjb3JkRGF0YT4qIENhY2hl
OjpyZWNvcmRzRnJvbVVSTChjb25zdCBVUkwmIHVybCkgY29uc3QKICAgICByZXR1cm4gJml0ZXJh
dG9yLT52YWx1ZTsKIH0KIAorY2xhc3MgQXN5bmNocm9ub3VzUHV0VGFza0NvdW50ZXIgOiBwdWJs
aWMgUmVmQ291bnRlZDxBc3luY2hyb25vdXNQdXRUYXNrQ291bnRlcj4geworcHVibGljOgorICAg
IHN0YXRpYyBSZWY8QXN5bmNocm9ub3VzUHV0VGFza0NvdW50ZXI+IGNyZWF0ZShSZWNvcmRJZGVu
dGlmaWVyc0NhbGxiYWNrJiYgY2FsbGJhY2spIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQXN5bmNo
cm9ub3VzUHV0VGFza0NvdW50ZXIoV1RGTW92ZShjYWxsYmFjaykpKTsgfQorICAgIH5Bc3luY2hy
b25vdXNQdXRUYXNrQ291bnRlcigpCisgICAgeworICAgICAgICBBU1NFUlQoUnVuTG9vcDo6aXNN
YWluKCkpOworICAgICAgICBpZiAoIW1fY2FsbGJhY2spCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIGlmIChtX2Vycm9yKSB7CisgICAgICAgICAgICBtX2NhbGxiYWNrKG1ha2VVbmV4cGVj
dGVkKG1fZXJyb3IudmFsdWUoKSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIG1fY2FsbGJhY2soV1RGTW92ZShtX3JlY29yZElkZW50aWZpZXJzKSk7CisgICAgfQor
CisgICAgdm9pZCBzZXRFcnJvcihFcnJvciBlcnJvcikKKyAgICB7CisgICAgICAgIEFTU0VSVChS
dW5Mb29wOjppc01haW4oKSk7CisgICAgICAgIGlmIChtX2Vycm9yKQorICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIG1fZXJyb3IgPSBlcnJvcjsKKyAgICB9CisKKyAgICB2b2lkIGFkZFJl
Y29yZElkZW50aWZpZXIodWludDY0X3QgaWRlbnRpZmllcikKKyAgICB7CisgICAgICAgIG1fcmVj
b3JkSWRlbnRpZmllcnMuYXBwZW5kKGlkZW50aWZpZXIpOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBleHBsaWNpdCBBc3luY2hyb25vdXNQdXRUYXNrQ291bnRlcihSZWNvcmRJZGVudGlmaWVyc0Nh
bGxiYWNrJiYgY2FsbGJhY2spCisgICAgICAgIDogbV9jYWxsYmFjayhXVEZNb3ZlKGNhbGxiYWNr
KSkKKyAgICB7CisgICAgfQorCisgICAgc3RkOjpvcHRpb25hbDxFcnJvcj4gbV9lcnJvcjsKKyAg
ICBSZWNvcmRJZGVudGlmaWVyc0NhbGxiYWNrIG1fY2FsbGJhY2s7CisgICAgVmVjdG9yPHVpbnQ2
NF90PiBtX3JlY29yZElkZW50aWZpZXJzOworfTsKKwogdm9pZCBDYWNoZTo6cHV0KFZlY3RvcjxS
ZWNvcmQ+JiYgcmVjb3JkcywgUmVjb3JkSWRlbnRpZmllcnNDYWxsYmFjayYmIGNhbGxiYWNrKQog
ewotICAgIGJvb2wgc2hvdWxkV3JpdGVSZWNvcmRMaXN0IHsgZmFsc2UgfTsKKyAgICBBU1NFUlQo
bV9zdGF0ZSA9PSBTdGF0ZTo6T3Blbik7CisKKyAgICBhdXRvIHRhc2tDb3VudGVyID0gQXN5bmNo
cm9ub3VzUHV0VGFza0NvdW50ZXI6OmNyZWF0ZShXVEZNb3ZlKGNhbGxiYWNrKSk7CisKICAgICBX
ZWJDb3JlOjpDYWNoZVF1ZXJ5T3B0aW9ucyBvcHRpb25zOwotICAgIFZlY3Rvcjx1aW50NjRfdD4g
cmVjb3JkSWRlbnRpZmllcnM7Ci0gICAgcmVjb3JkSWRlbnRpZmllcnMucmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eShyZWNvcmRzLnNpemUoKSk7CiAgICAgZm9yIChhdXRvJiByZWNvcmQgOiByZWNvcmRz
KSB7CiAgICAgICAgIGF1dG8qIHNhbWVVUkxSZWNvcmRzID0gcmVjb3Jkc0Zyb21VUkwocmVjb3Jk
LnJlcXVlc3QudXJsKCkpOwogCiAgICAgICAgIGF1dG8gbWF0Y2hpbmdSZWNvcmRzID0gcXVlcnlD
YWNoZShzYW1lVVJMUmVjb3JkcywgcmVjb3JkLnJlcXVlc3QsIG9wdGlvbnMpOwogICAgICAgICBp
ZiAobWF0Y2hpbmdSZWNvcmRzLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgcmVjb3JkLmlkZW50
aWZpZXIgPSArK21fbmV4dFJlY29yZElkZW50aWZpZXI7Ci0gICAgICAgICAgICByZWNvcmRJZGVu
dGlmaWVycy51bmNoZWNrZWRBcHBlbmQocmVjb3JkLmlkZW50aWZpZXIpOworICAgICAgICAgICAg
dGFza0NvdW50ZXItPmFkZFJlY29yZElkZW50aWZpZXIocmVjb3JkLmlkZW50aWZpZXIpOwogCi0g
ICAgICAgICAgICBzaG91bGRXcml0ZVJlY29yZExpc3QgPSB0cnVlOwotICAgICAgICAgICAgYXV0
byYgcmVjb3JkVG9Xcml0ZSA9IGFkZFJlY29yZChzYW1lVVJMUmVjb3JkcywgV1RGTW92ZShyZWNv
cmQpKTsKLSAgICAgICAgICAgIHdyaXRlUmVjb3JkVG9EaXNrKHJlY29yZFRvV3JpdGUpOworICAg
ICAgICAgICAgYXV0byYgcmVjb3JkVG9Xcml0ZSA9IGFkZFJlY29yZChzYW1lVVJMUmVjb3Jkcywg
cmVjb3JkKTsKKyAgICAgICAgICAgIHdyaXRlUmVjb3JkVG9EaXNrKHJlY29yZFRvV3JpdGUsIFdU
Rk1vdmUocmVjb3JkKSwgdGFza0NvdW50ZXIuY29weVJlZigpKTsKICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgIGF1dG8gaWRlbnRpZmllciA9IG1hdGNoaW5nUmVjb3Jkc1swXTsKICAgICAg
ICAgICAgIGF1dG8gcG9zaXRpb24gPSBzYW1lVVJMUmVjb3Jkcy0+ZmluZE1hdGNoaW5nKFsmXShj
b25zdCBhdXRvJiBpdGVtKSB7IHJldHVybiBpdGVtLmlkZW50aWZpZXIgPT0gaWRlbnRpZmllcjsg
fSk7CiAgICAgICAgICAgICBBU1NFUlQocG9zaXRpb24gIT0gbm90Rm91bmQpOwogICAgICAgICAg
ICAgaWYgKHBvc2l0aW9uICE9IG5vdEZvdW5kKSB7Ci0gICAgICAgICAgICAgICAgYXV0byYgZXhp
c3RpbmdSZWNvcmQgPSAoKnNhbWVVUkxSZWNvcmRzKVtwb3NpdGlvbl07Ci0gICAgICAgICAgICAg
ICAgcmVjb3JkSWRlbnRpZmllcnMudW5jaGVja2VkQXBwZW5kKGlkZW50aWZpZXIpOwotICAgICAg
ICAgICAgICAgICsrZXhpc3RpbmdSZWNvcmQudXBkYXRlUmVzcG9uc2VDb3VudGVyOwotCi0gICAg
ICAgICAgICAgICAgLy8gRklYTUU6IEhhbmRsZSB0aGUgY2FzZSB3aGVyZSBkYXRhIGlzIG51bGwu
Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGV4aXN0aW5nUmVjb3JkLmRhdGEpOwotICAgICAgICAg
ICAgICAgIGV4aXN0aW5nUmVjb3JkLmRhdGEtPnJlc3BvbnNlSGVhZGVyc0d1YXJkID0gcmVjb3Jk
LnJlc3BvbnNlSGVhZGVyc0d1YXJkOwotICAgICAgICAgICAgICAgIGV4aXN0aW5nUmVjb3JkLmRh
dGEtPnJlc3BvbnNlID0gV1RGTW92ZShyZWNvcmQucmVzcG9uc2UpOwotICAgICAgICAgICAgICAg
IGV4aXN0aW5nUmVjb3JkLmRhdGEtPnJlc3BvbnNlQm9keSA9IFdURk1vdmUocmVjb3JkLnJlc3Bv
bnNlQm9keSk7Ci0gICAgICAgICAgICAgICAgdXBkYXRlVmFyeUluZm9ybWF0aW9uKGV4aXN0aW5n
UmVjb3JkKTsKLSAgICAgICAgICAgICAgICB3cml0ZVJlY29yZFRvRGlzayhleGlzdGluZ1JlY29y
ZCk7CisgICAgICAgICAgICAgICAgYXV0byYgZXhpc3RpbmdSZWNvcmQgPSBzYW1lVVJMUmVjb3Jk
cy0+YXQocG9zaXRpb24pOworICAgICAgICAgICAgICAgIHRhc2tDb3VudGVyLT5hZGRSZWNvcmRJ
ZGVudGlmaWVyKGlkZW50aWZpZXIpOworICAgICAgICAgICAgICAgIHVwZGF0ZVJlY29yZFRvRGlz
ayhleGlzdGluZ1JlY29yZCwgV1RGTW92ZShyZWNvcmQpLCB0YXNrQ291bnRlci5jb3B5UmVmKCkp
OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotCi0gICAgaWYgKCFzaG91bGRXcml0
ZVJlY29yZExpc3QpIHsKLSAgICAgICAgY2FsbGJhY2soV1RGTW92ZShyZWNvcmRJZGVudGlmaWVy
cykpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHdyaXRlUmVjb3Jkc0xpc3QoW2NhbGxi
YWNrID0gV1RGTW92ZShjYWxsYmFjayksIHJlY29yZElkZW50aWZpZXJzID0gV1RGTW92ZShyZWNv
cmRJZGVudGlmaWVycyldKHN0ZDo6b3B0aW9uYWw8RXJyb3I+JiYgZXJyb3IpIG11dGFibGUgewot
ICAgICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKG1ha2VVbmV4cGVjdGVk
KGVycm9yLnZhbHVlKCkpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAg
ICBjYWxsYmFjayhXVEZNb3ZlKHJlY29yZElkZW50aWZpZXJzKSk7Ci0gICAgfSk7CiB9CiAKIHZv
aWQgQ2FjaGU6OnJlbW92ZShXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJiByZXF1ZXN0LCBXZWJD
b3JlOjpDYWNoZVF1ZXJ5T3B0aW9ucyYmIG9wdGlvbnMsIFJlY29yZElkZW50aWZpZXJzQ2FsbGJh
Y2smJiBjYWxsYmFjaykKIHsKKyAgICBBU1NFUlQobV9zdGF0ZSA9PSBTdGF0ZTo6T3Blbik7CisK
ICAgICBhdXRvKiByZWNvcmRzID0gcmVjb3Jkc0Zyb21VUkwocmVxdWVzdC51cmwoKSk7CiAgICAg
YXV0byByZWNvcmRJZGVudGlmaWVycyA9IHF1ZXJ5Q2FjaGUocmVjb3JkcywgcmVxdWVzdCwgb3B0
aW9ucyk7CiAgICAgaWYgKHJlY29yZElkZW50aWZpZXJzLmlzRW1wdHkoKSkgewpAQCAtMjg5LDM1
ICs0MjYsMTU4IEBAIHZvaWQgQ2FjaGU6OnJlbW92ZShXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Qm
JiByZXF1ZXN0LCBXZWJDb3JlOjpDYWNoZVF1ZXJ5T3B0aW9uCiAgICAgICAgIHJldHVybiBzaG91
bGRSZW1vdmU7CiAgICAgfSk7CiAKLSAgICB3cml0ZVJlY29yZHNMaXN0KFtjYWxsYmFjayA9IFdU
Rk1vdmUoY2FsbGJhY2spLCByZWNvcmRJZGVudGlmaWVycyA9IFdURk1vdmUocmVjb3JkSWRlbnRp
ZmllcnMpXShzdGQ6Om9wdGlvbmFsPEVycm9yPiYmIGVycm9yKSBtdXRhYmxlIHsKLSAgICAgICAg
aWYgKGVycm9yKSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhtYWtlVW5leHBlY3RlZChlcnJvci52
YWx1ZSgpKSk7CisgICAgY2FsbGJhY2soV1RGTW92ZShyZWNvcmRJZGVudGlmaWVycykpOworfQor
Cit2b2lkIENhY2hlOjpyZW1vdmVGcm9tUmVjb3JkTGlzdChjb25zdCBWZWN0b3I8dWludDY0X3Q+
JiByZWNvcmRJZGVudGlmaWVycykKK3sKKyAgICBpZiAocmVjb3JkSWRlbnRpZmllcnMuaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKGF1dG8mIHJlY29yZHMgOiBtX3JlY29y
ZHMudmFsdWVzKCkpIHsKKyAgICAgICAgYXV0byogY2FjaGUgPSB0aGlzOworICAgICAgICByZWNv
cmRzLnJlbW92ZUFsbE1hdGNoaW5nKFtjYWNoZSwgJnJlY29yZElkZW50aWZpZXJzXShjb25zdCBh
dXRvJiBpdGVtKSB7CisgICAgICAgICAgICByZXR1cm4gbm90Rm91bmQgIT0gcmVjb3JkSWRlbnRp
ZmllcnMuZmluZE1hdGNoaW5nKFtjYWNoZSwgJml0ZW1dKGNvbnN0IGF1dG8mIGlkZW50aWZpZXIp
IHsKKyAgICAgICAgICAgICAgICBpZiAoaXRlbS5pZGVudGlmaWVyICE9IGlkZW50aWZpZXIpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBjYWNoZS0+
cmVtb3ZlUmVjb3JkRnJvbURpc2soaXRlbSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfQorfQorCit2b2lkIENhY2hlOjp3
cml0ZVJlY29yZFRvRGlzayhjb25zdCBSZWNvcmRJbmZvcm1hdGlvbiYgcmVjb3JkSW5mb3JtYXRp
b24sIFJlY29yZCYmIHJlY29yZCwgUmVmPEFzeW5jaHJvbm91c1B1dFRhc2tDb3VudGVyPiYmIHRh
c2tDb3VudGVyKQoreworICAgIG1fY2FjaGVzLndyaXRlUmVjb3JkKCp0aGlzLCByZWNvcmRJbmZv
cm1hdGlvbiwgV1RGTW92ZShyZWNvcmQpLCBbdGFza0NvdW50ZXIgPSBXVEZNb3ZlKHRhc2tDb3Vu
dGVyKV0oc3RkOjpvcHRpb25hbDxFcnJvcj4mJiBlcnJvcikgeworICAgICAgICBpZiAoZXJyb3Ip
CisgICAgICAgICAgICB0YXNrQ291bnRlci0+c2V0RXJyb3IoZXJyb3IudmFsdWUoKSk7CisgICAg
fSk7Cit9CisKK3ZvaWQgQ2FjaGU6OnVwZGF0ZVJlY29yZFRvRGlzayhSZWNvcmRJbmZvcm1hdGlv
biYgZXhpc3RpbmdSZWNvcmQsIFJlY29yZCYmIHJlY29yZCwgUmVmPEFzeW5jaHJvbm91c1B1dFRh
c2tDb3VudGVyPiYmIHRhc2tDb3VudGVyKQoreworICAgICsrZXhpc3RpbmdSZWNvcmQudXBkYXRl
UmVzcG9uc2VDb3VudGVyOworICAgIHJlYWRSZWNvcmRGcm9tRGlzayhleGlzdGluZ1JlY29yZCwg
W2NhY2hlcyA9IG1ha2VSZWYobV9jYWNoZXMpLCBpZGVudGlmaWVyID0gbV9pZGVudGlmaWVyLCBy
ZWNvcmRJZGVudGlmaWVyID0gZXhpc3RpbmdSZWNvcmQuaWRlbnRpZmllciwgcmVjb3JkID0gV1RG
TW92ZShyZWNvcmQpLCB0YXNrQ291bnRlciA9IFdURk1vdmUodGFza0NvdW50ZXIpXShFeHBlY3Rl
ZDxSZWNvcmQsIEVycm9yPiYmIHJlc3VsdCkgbXV0YWJsZSB7CisgICAgICAgIGlmICghcmVzdWx0
Lmhhc1ZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgY2Fs
bGJhY2soV1RGTW92ZShyZWNvcmRJZGVudGlmaWVycykpOworCisgICAgICAgIGF1dG8qIGNhY2hl
ID0gY2FjaGVzLT5maW5kKGlkZW50aWZpZXIpOworICAgICAgICBpZiAoIWNhY2hlKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIGF1dG8qIHNhbWVVUkxSZWNvcmRzID0gY2FjaGUtPnJl
Y29yZHNGcm9tVVJMKHJlc3VsdC52YWx1ZSgpLnJlcXVlc3QudXJsKCkpOworICAgICAgICBpZiAo
IXNhbWVVUkxSZWNvcmRzKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGF1dG8gcG9z
aXRpb24gPSBzYW1lVVJMUmVjb3Jkcy0+ZmluZE1hdGNoaW5nKFsmXSAoY29uc3QgYXV0byYgaXRl
bSkgeyByZXR1cm4gaXRlbS5pZGVudGlmaWVyID09IHJlY29yZElkZW50aWZpZXI7IH0pOworICAg
ICAgICBpZiAocG9zaXRpb24gPT0gbm90Rm91bmQpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIGF1dG8mIHJlY29yZEluZm8gPSBzYW1lVVJMUmVjb3Jkcy0+YXQocG9zaXRpb24pOworCisg
ICAgICAgIGF1dG8mIHJlY29yZEZyb21EaXNrID0gcmVzdWx0LnZhbHVlKCk7CisgICAgICAgIHJl
Y29yZC5yZXF1ZXN0SGVhZGVyc0d1YXJkID0gcmVjb3JkRnJvbURpc2sucmVxdWVzdEhlYWRlcnNH
dWFyZDsKKyAgICAgICAgcmVjb3JkLnJlcXVlc3QgPSBXVEZNb3ZlKHJlY29yZEZyb21EaXNrLnJl
cXVlc3QpOworICAgICAgICByZWNvcmQub3B0aW9ucyA9IFdURk1vdmUocmVjb3JkRnJvbURpc2su
b3B0aW9ucyk7CisgICAgICAgIHJlY29yZC5yZWZlcnJlciA9IFdURk1vdmUocmVjb3JkRnJvbURp
c2sucmVmZXJyZXIpOworCisgICAgICAgIHVwZGF0ZVZhcnlJbmZvcm1hdGlvbihyZWNvcmRJbmZv
LCByZWNvcmQucmVxdWVzdCwgcmVjb3JkLnJlc3BvbnNlKTsKKworICAgICAgICBjYWNoZS0+d3Jp
dGVSZWNvcmRUb0Rpc2socmVjb3JkSW5mbywgV1RGTW92ZShyZWNvcmQpLCBXVEZNb3ZlKHRhc2tD
b3VudGVyKSk7CiAgICAgfSk7CiB9CiAKLXZvaWQgQ2FjaGU6OnJlYWRSZWNvcmRzTGlzdChDb21w
bGV0aW9uQ2FsbGJhY2smJiBjYWxsYmFjaykKK3ZvaWQgQ2FjaGU6OnJlYWRSZWNvcmRGcm9tRGlz
ayhjb25zdCBSZWNvcmRJbmZvcm1hdGlvbiYgcmVjb3JkLCBXVEY6OkZ1bmN0aW9uPHZvaWQoRXhw
ZWN0ZWQ8UmVjb3JkLCBFcnJvcj4mJik+JiYgY2FsbGJhY2spCiB7Ci0gICAgLy8gRklYTUU6IElt
cGxlbWVudCB0aGlzLgotICAgIGNhbGxiYWNrKHN0ZDo6bnVsbG9wdCk7CisgICAgbV9jYWNoZXMu
cmVhZFJlY29yZChyZWNvcmQua2V5LCBXVEZNb3ZlKGNhbGxiYWNrKSk7CiB9CiAKLXZvaWQgQ2Fj
aGU6OndyaXRlUmVjb3Jkc0xpc3QoQ29tcGxldGlvbkNhbGxiYWNrJiYgY2FsbGJhY2spCit2b2lk
IENhY2hlOjpyZW1vdmVSZWNvcmRGcm9tRGlzayhjb25zdCBSZWNvcmRJbmZvcm1hdGlvbiYgcmVj
b3JkKQogewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KLSAgICBjYWxsYmFjayhzdGQ6
Om51bGxvcHQpOworICAgIG1fY2FjaGVzLnJlbW92ZVJlY29yZChyZWNvcmQua2V5KTsKK30KKwor
U3RvcmFnZTo6UmVjb3JkIENhY2hlOjplbmNvZGUoY29uc3QgUmVjb3JkSW5mb3JtYXRpb24mIHJl
Y29yZEluZm9ybWF0aW9uLCBjb25zdCBSZWNvcmQmIHJlY29yZCkKK3sKKyAgICBXVEY6OlBlcnNp
c3RlbmNlOjpFbmNvZGVyIGVuY29kZXI7CisgICAgZW5jb2RlciA8PCByZWNvcmRJbmZvcm1hdGlv
bi5pbnNlcnRpb25UaW1lOworICAgIGVuY29kZXIgPDwgcmVjb3JkLnJlcXVlc3RIZWFkZXJzR3Vh
cmQ7CisgICAgcmVjb3JkLnJlcXVlc3QuZW5jb2RlV2l0aG91dFBsYXRmb3JtRGF0YShlbmNvZGVy
KTsKKyAgICBlbmNvZGVyIDw8IHJlY29yZC5vcHRpb25zOworICAgIGVuY29kZXIgPDwgcmVjb3Jk
LnJlZmVycmVyOworCisgICAgZW5jb2RlciA8PCByZWNvcmQucmVzcG9uc2VIZWFkZXJzR3VhcmQ7
CisgICAgZW5jb2RlciA8PCByZWNvcmQucmVzcG9uc2U7CisKKyAgICBlbmNvZGVyLmVuY29kZUNo
ZWNrc3VtKCk7CisKKyAgICBEYXRhIGhlYWRlcihlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1
ZmZlclNpemUoKSk7CisgICAgRGF0YSBib2R5OworICAgIFdURjo6c3dpdGNoT24ocmVjb3JkLnJl
c3BvbnNlQm9keSwgW10oY29uc3QgUmVmPFdlYkNvcmU6OkZvcm1EYXRhPiYgZm9ybURhdGEpIHsK
KyAgICAgICAgLy8gRklYTUU6IFN0b3JlIGZvcm0gZGF0YSBib2R5LgorICAgIH0sIFsmXShjb25z
dCBSZWY8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiYgYnVmZmVyKSB7CisgICAgICAgIGJvZHkgPSB7
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGJ1ZmZlci0+ZGF0YSgpKSwgYnVmZmVy
LT5zaXplKCkgfTsKKyAgICB9LCBbXShjb25zdCBzdGQ6Om51bGxwdHJfdCYpIHsKKyAgICB9KTsK
KworICAgIHJldHVybiB7IHJlY29yZEluZm9ybWF0aW9uLmtleSwgeyB9LCBoZWFkZXIsIGJvZHks
IHsgfSB9OworfQorCitzdGF0aWMgaW5saW5lIHN0ZDo6b3B0aW9uYWw8c3RkOjpwYWlyPFJlY29y
ZCwgZG91YmxlPj4gZGVjb2RlUmVjb3JkSGVhZGVyKGNvbnN0IFN0b3JhZ2U6OlJlY29yZCYgc3Rv
cmFnZSkKK3sKKyAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIoc3RvcmFnZS5o
ZWFkZXIuZGF0YSgpLCBzdG9yYWdlLmhlYWRlci5zaXplKCkpOworCisgICAgUmVjb3JkIHJlY29y
ZDsKKworICAgIGRvdWJsZSBpbnNlcnRpb25UaW1lOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
aW5zZXJ0aW9uVGltZSkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHJlY29yZC5yZXF1ZXN0SGVhZGVyc0d1YXJkKSkKKyAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGlmICghcmVjb3JkLnJlcXVlc3QuZGVjb2RlV2l0aG91
dFBsYXRmb3JtRGF0YShkZWNvZGVyKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKwor
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVjb3JkLm9wdGlvbnMpKQorICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZWNvcmQucmVmZXJyZXIp
KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShyZWNvcmQucmVzcG9uc2VIZWFkZXJzR3VhcmQpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZWNvcmQucmVzcG9uc2UpKQorICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgaWYgKCFkZWNvZGVyLnZlcmlmeUNoZWNrc3Vt
KCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gc3RkOjptYWtl
X3BhaXIoV1RGTW92ZShyZWNvcmQpLCBpbnNlcnRpb25UaW1lKTsKIH0KIAotdm9pZCBDYWNoZTo6
d3JpdGVSZWNvcmRUb0Rpc2soUmVjb3JkRGF0YSYpCitzdGQ6Om9wdGlvbmFsPFJlY29yZD4gQ2Fj
aGU6OmRlY29kZShjb25zdCBTdG9yYWdlOjpSZWNvcmQmIHN0b3JhZ2UpCiB7Ci0gICAgLy8gRklY
TUU6IEltcGxlbWVudCB0aGlzLgorICAgIGF1dG8gcmVzdWx0ID0gZGVjb2RlUmVjb3JkSGVhZGVy
KHN0b3JhZ2UpOworCisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CisKKyAgICBhdXRvIHJlY29yZCA9IFdURk1vdmUocmVzdWx0LT5maXJzdCk7CisgICAgcmVj
b3JkLnJlc3BvbnNlQm9keSA9IFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKHN0b3JhZ2Uu
Ym9keS5kYXRhKCksIHN0b3JhZ2UuYm9keS5zaXplKCkpOworCisgICAgcmV0dXJuIFdURk1vdmUo
cmVjb3JkKTsKIH0KIAotdm9pZCBDYWNoZTo6cmVtb3ZlUmVjb3JkRnJvbURpc2soUmVjb3JkRGF0
YSYpCitWZWN0b3I8S2V5PiBDYWNoZTo6a2V5cygpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IElt
cGxlbWVudCB0aGlzLgorICAgIFZlY3RvcjxLZXk+IGtleXM7CisgICAgZm9yIChhdXRvJiByZWNv
cmRzIDogbV9yZWNvcmRzLnZhbHVlcygpKSB7CisgICAgICAgIGZvciAoYXV0byYgcmVjb3JkIDog
cmVjb3JkcykKKyAgICAgICAgICAgIGtleXMuYXBwZW5kKHJlY29yZC5rZXkpOworICAgIH0KKyAg
ICByZXR1cm4ga2V5czsKIH0KIAogfSAvLyBuYW1lc3BhY2UgQ2FjaGVTdG9yYWdlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2lu
ZUNhY2hlLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFn
ZUVuZ2luZUNhY2hlLmgKaW5kZXggYzlmMGQ4MGU1NGI3NmUyMDQyZTEzYzllNDA1YzlkNTUyNzNk
MTI2NS4uY2RjNDgxNzQ5YWE4Zjc5ZTUzYjUwMGE4NTYxYTM0ZDU4YTQ4ODEzYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVD
YWNoZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9y
YWdlRW5naW5lQ2FjaGUuaApAQCAtMjUsNyArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2lu
Y2x1ZGUgIk5ldHdvcmtDYWNoZUtleS5oIgorI2luY2x1ZGUgIk5ldHdvcmtDYWNoZVN0b3JhZ2Uu
aCIKICNpbmNsdWRlIDxXZWJDb3JlL0RPTUNhY2hlRW5naW5lLmg+CiAjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtMzYsNyArMzYsNyBA
QCBuYW1lc3BhY2UgQ2FjaGVTdG9yYWdlIHsKIAogY2xhc3MgQ2FjaGVzOwogCi1zdHJ1Y3QgUmVj
b3JkRGF0YSB7CitzdHJ1Y3QgUmVjb3JkSW5mb3JtYXRpb24gewogICAgIE5ldHdvcmtDYWNoZTo6
S2V5IGtleTsKICAgICBkb3VibGUgaW5zZXJ0aW9uVGltZSB7IDAgfTsKIApAQCAtNDYsNTggKzQ2
LDYxIEBAIHN0cnVjdCBSZWNvcmREYXRhIHsKICAgICBXZWJDb3JlOjpVUkwgdXJsOwogICAgIGJv
b2wgaGFzVmFyeVN0YXIgeyBmYWxzZSB9OwogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHZh
cnlIZWFkZXJzOwotCi0gICAgc3RydWN0IERhdGEgewotICAgICAgICBXZWJDb3JlOjpGZXRjaEhl
YWRlcnM6Okd1YXJkIHJlcXVlc3RIZWFkZXJzR3VhcmQ7Ci0gICAgICAgIFdlYkNvcmU6OlJlc291
cmNlUmVxdWVzdCByZXF1ZXN0OwotICAgICAgICBXZWJDb3JlOjpGZXRjaE9wdGlvbnMgb3B0aW9u
czsKLSAgICAgICAgU3RyaW5nIHJlZmVycmVyOwotCi0gICAgICAgIFdlYkNvcmU6OkZldGNoSGVh
ZGVyczo6R3VhcmQgcmVzcG9uc2VIZWFkZXJzR3VhcmQ7Ci0gICAgICAgIFdlYkNvcmU6OlJlc291
cmNlUmVzcG9uc2UgcmVzcG9uc2U7Ci0gICAgICAgIFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpS
ZXNwb25zZUJvZHkgcmVzcG9uc2VCb2R5OwotICAgIH07Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPERh
dGE+IGRhdGE7CiB9OwogCitjbGFzcyBBc3luY2hyb25vdXNQdXRUYXNrQ291bnRlcjsKK2NsYXNz
IFJlYWRSZWNvcmRUYXNrQ291bnRlcjsKKwogY2xhc3MgQ2FjaGUgewogcHVibGljOgogICAgIGVu
dW0gY2xhc3MgU3RhdGUgeyBVbmluaXRpYWxpemVkLCBPcGVuaW5nLCBPcGVuIH07Ci0gICAgQ2Fj
aGUoQ2FjaGVzJiwgdWludDY0X3QgaWRlbnRpZmllciwgU3RhdGUsIFN0cmluZyYmIG5hbWUpOwor
ICAgIENhY2hlKENhY2hlcyYsIHVpbnQ2NF90IGlkZW50aWZpZXIsIFN0YXRlLCBTdHJpbmcmJiBu
YW1lLCBTdHJpbmcmJiB1bmlxdWVOYW1lKTsKIAorICAgIGJvb2wgaXNPcGVuZWQoKSBjb25zdCB7
IHJldHVybiBtX3N0YXRlID09IFN0YXRlOjpPcGVuOyB9CiAgICAgdm9pZCBvcGVuKFdlYkNvcmU6
OkRPTUNhY2hlRW5naW5lOjpDb21wbGV0aW9uQ2FsbGJhY2smJik7CiAKICAgICB1aW50NjRfdCBp
ZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyOyB9CiAgICAgY29uc3QgU3Ry
aW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CisgICAgY29uc3QgU3RyaW5nJiB1
bmlxdWVOYW1lKCkgY29uc3QgeyByZXR1cm4gbV91bmlxdWVOYW1lOyB9CiAgICAgYm9vbCBpc0Fj
dGl2ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgIT0gU3RhdGU6OlVuaW5pdGlhbGl6ZWQ7IH0K
IAotICAgIFZlY3RvcjxXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6UmVjb3JkPiByZXRyaWV2ZVJl
Y29yZHMoY29uc3QgV2ViQ29yZTo6VVJMJikgY29uc3Q7CisgICAgdm9pZCByZXRyaWV2ZVJlY29y
ZHMoY29uc3QgV2ViQ29yZTo6VVJMJiwgV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OlJlY29yZHND
YWxsYmFjayYmKTsKICAgICBXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6Q2FjaGVJbmZvIGluZm8o
KSBjb25zdCB7IHJldHVybiB7IG1faWRlbnRpZmllciwgbV9uYW1lIH07IH0KIAogICAgIHZvaWQg
cHV0KFZlY3RvcjxXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6UmVjb3JkPiYmLCBXZWJDb3JlOjpE
T01DYWNoZUVuZ2luZTo6UmVjb3JkSWRlbnRpZmllcnNDYWxsYmFjayYmKTsKICAgICB2b2lkIHJl
bW92ZShXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJiwgV2ViQ29yZTo6Q2FjaGVRdWVyeU9wdGlv
bnMmJiwgV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OlJlY29yZElkZW50aWZpZXJzQ2FsbGJhY2sm
Jik7CiAKKyAgICBWZWN0b3I8TmV0d29ya0NhY2hlOjpLZXk+IGtleXMoKSBjb25zdDsKKwogICAg
IHZvaWQgZGlzcG9zZSgpOwogICAgIHZvaWQgY2xlYXJNZW1vcnlSZXByZXNlbnRhdGlvbigpOwot
IAorCisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OlJl
Y29yZD4gZGVjb2RlKGNvbnN0IE5ldHdvcmtDYWNoZTo6U3RvcmFnZTo6UmVjb3JkJik7CisgICAg
c3RhdGljIE5ldHdvcmtDYWNoZTo6U3RvcmFnZTo6UmVjb3JkIGVuY29kZShjb25zdCBSZWNvcmRJ
bmZvcm1hdGlvbiYsIGNvbnN0IFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpSZWNvcmQmKTsKKwog
cHJpdmF0ZToKLSAgICBWZWN0b3I8UmVjb3JkRGF0YT4qIHJlY29yZHNGcm9tVVJMKGNvbnN0IFdl
YkNvcmU6OlVSTCYpOwotICAgIGNvbnN0IFZlY3RvcjxSZWNvcmREYXRhPiogcmVjb3Jkc0Zyb21V
UkwoY29uc3QgV2ViQ29yZTo6VVJMJikgY29uc3Q7Ci0gICAgUmVjb3JkRGF0YSYgYWRkUmVjb3Jk
KFZlY3RvcjxSZWNvcmREYXRhPiosIFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpSZWNvcmQmJik7
CisgICAgVmVjdG9yPFJlY29yZEluZm9ybWF0aW9uPiogcmVjb3Jkc0Zyb21VUkwoY29uc3QgV2Vi
Q29yZTo6VVJMJik7CisgICAgY29uc3QgVmVjdG9yPFJlY29yZEluZm9ybWF0aW9uPiogcmVjb3Jk
c0Zyb21VUkwoY29uc3QgV2ViQ29yZTo6VVJMJikgY29uc3Q7CisgICAgUmVjb3JkSW5mb3JtYXRp
b24mIGFkZFJlY29yZChWZWN0b3I8UmVjb3JkSW5mb3JtYXRpb24+KiwgY29uc3QgV2ViQ29yZTo6
RE9NQ2FjaGVFbmdpbmU6OlJlY29yZCYpOworCisgICAgUmVjb3JkSW5mb3JtYXRpb24gdG9SZWNv
cmRJbmZvcm1hdGlvbihjb25zdCBXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6UmVjb3JkJik7CiAK
ICAgICB2b2lkIGZpbmlzaE9wZW5pbmcoV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OkNvbXBsZXRp
b25DYWxsYmFjayYmLCBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpFcnJv
cj4mJik7CisgICAgdm9pZCByZXRyaWV2ZVJlY29yZChjb25zdCBSZWNvcmRJbmZvcm1hdGlvbiYs
IFJlZjxSZWFkUmVjb3JkVGFza0NvdW50ZXI+JiYpOwogCiAgICAgdm9pZCByZWFkUmVjb3Jkc0xp
c3QoV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OkNvbXBsZXRpb25DYWxsYmFjayYmKTsKLSAgICB2
b2lkIHdyaXRlUmVjb3Jkc0xpc3QoV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OkNvbXBsZXRpb25D
YWxsYmFjayYmKTsKLSAgICB2b2lkIHdyaXRlUmVjb3JkVG9EaXNrKFJlY29yZERhdGEmKTsKLSAg
ICB2b2lkIHJlbW92ZVJlY29yZEZyb21EaXNrKFJlY29yZERhdGEmKTsKKyAgICB2b2lkIHdyaXRl
UmVjb3JkVG9EaXNrKGNvbnN0IFJlY29yZEluZm9ybWF0aW9uJiwgV2ViQ29yZTo6RE9NQ2FjaGVF
bmdpbmU6OlJlY29yZCYmLCBSZWY8QXN5bmNocm9ub3VzUHV0VGFza0NvdW50ZXI+JiYpOworICAg
IHZvaWQgdXBkYXRlUmVjb3JkVG9EaXNrKFJlY29yZEluZm9ybWF0aW9uJiwgV2ViQ29yZTo6RE9N
Q2FjaGVFbmdpbmU6OlJlY29yZCYmLCBSZWY8QXN5bmNocm9ub3VzUHV0VGFza0NvdW50ZXI+JiYp
OworICAgIHZvaWQgcmVtb3ZlUmVjb3JkRnJvbURpc2soY29uc3QgUmVjb3JkSW5mb3JtYXRpb24m
KTsKKyAgICB2b2lkIHJlYWRSZWNvcmRGcm9tRGlzayhjb25zdCBSZWNvcmRJbmZvcm1hdGlvbiYs
IFdURjo6RnVuY3Rpb248dm9pZChFeHBlY3RlZDxXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6UmVj
b3JkLCBXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6RXJyb3I+JiYpPiYmKTsKKyAgICB2b2lkIHJl
bW92ZUZyb21SZWNvcmRMaXN0KGNvbnN0IFZlY3Rvcjx1aW50NjRfdD4mKTsKIAogICAgIENhY2hl
cyYgbV9jYWNoZXM7CiAgICAgU3RhdGUgbV9zdGF0ZTsKICAgICB1aW50NjRfdCBtX2lkZW50aWZp
ZXIgeyAwIH07CiAgICAgU3RyaW5nIG1fbmFtZTsKLSAgICBIYXNoTWFwPFN0cmluZywgVmVjdG9y
PFJlY29yZERhdGE+PiBtX3JlY29yZHM7CisgICAgU3RyaW5nIG1fdW5pcXVlTmFtZTsKKyAgICBI
YXNoTWFwPFN0cmluZywgVmVjdG9yPFJlY29yZEluZm9ybWF0aW9uPj4gbV9yZWNvcmRzOwogICAg
IHVpbnQ2NF90IG1fbmV4dFJlY29yZElkZW50aWZpZXIgeyAwIH07CiAgICAgVmVjdG9yPFdlYkNv
cmU6OkRPTUNhY2hlRW5naW5lOjpDb21wbGV0aW9uQ2FsbGJhY2s+IG1fcGVuZGluZ09wZW5pbmdD
YWxsYmFja3M7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9j
YWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwCmluZGV4IGIzMWUyODk3
N2RlZDFjNDcwYzY5Njk1YjAzOGNiYjQ1YzRhM2Y1YzcuLjIwN2I3ZDZmZDZhYTgyMjUxNWZjNjY2
MjI4ZjE5MjgzZTQwNDNlM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5jcHAKQEAgLTI3
LDYgKzI3LDcgQEAKICNpbmNsdWRlICJDYWNoZVN0b3JhZ2VFbmdpbmUuaCIKIAogI2luY2x1ZGUg
Ik5ldHdvcmtDYWNoZUNvZGVycy5oIgorI2luY2x1ZGUgPHd0Zi9VVUlELmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTo6RE9N
Q2FjaGVFbmdpbmU7CkBAIC01OSw3ICs2MCwxNCBAQCBDYWNoZXM6OkNhY2hlcyhFbmdpbmUmIGVu
Z2luZSwgU3RyaW5nJiYgb3JpZ2luKQogCiB2b2lkIENhY2hlczo6aW5pdGlhbGl6ZShXZWJDb3Jl
OjpET01DYWNoZUVuZ2luZTo6Q29tcGxldGlvbkNhbGxiYWNrJiYgY2FsbGJhY2spCiB7Ci0gICAg
aWYgKG1faXNJbml0aWFsaXplZCB8fCBtX3Jvb3RQYXRoLmlzTnVsbCgpKSB7CisgICAgaWYgKG1f
aXNJbml0aWFsaXplZCkgeworICAgICAgICBjYWxsYmFjayhzdGQ6Om51bGxvcHQpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fcm9vdFBhdGguaXNOdWxsKCkpIHsKKyAgICAg
ICAgbWFrZURpcnR5KCk7CisgICAgICAgIG1faXNJbml0aWFsaXplZCA9IHRydWU7CiAgICAgICAg
IGNhbGxiYWNrKHN0ZDo6bnVsbG9wdCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC03NSw2
ICs4Myw3IEBAIHZvaWQgQ2FjaGVzOjppbml0aWFsaXplKFdlYkNvcmU6OkRPTUNhY2hlRW5naW5l
OjpDb21wbGV0aW9uQ2FsbGJhY2smJiBjYWxsYmFjaykKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICBtX3N0b3JhZ2UgPSBzdG9yYWdlLnJlbGVhc2VOb25OdWxsKCk7CisgICAgbV9zdG9yYWdl
LT53cml0ZVdpdGhvdXRXYWl0aW5nKCk7CiAgICAgcmVhZENhY2hlc0Zyb21EaXNrKFt0aGlzLCBj
YWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShFeHBlY3RlZDxWZWN0b3I8Q2FjaGU+LCBFcnJv
cj4mJiByZXN1bHQpIHsKICAgICAgICAgbWFrZURpcnR5KCk7CiAKQEAgLTEyMCw3ICsxMjksOSBA
QCBDYWNoZSogQ2FjaGVzOjpmaW5kKHVpbnQ2NF90IGlkZW50aWZpZXIpCiAKIHZvaWQgQ2FjaGVz
OjpvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgQ2FjaGVJZGVudGlmaWVyQ2FsbGJhY2smJiBjYWxs
YmFjaykKIHsKKyAgICBBU1NFUlQobV9pc0luaXRpYWxpemVkKTsKICAgICBBU1NFUlQobV9lbmdp
bmUpOworCiAgICAgaWYgKGF1dG8qIGNhY2hlID0gZmluZChuYW1lKSkgewogICAgICAgICBjYWNo
ZS0+b3BlbihbY2FjaGVJZGVudGlmaWVyID0gY2FjaGUtPmlkZW50aWZpZXIoKSwgY2FsbGJhY2sg
PSBXVEZNb3ZlKGNhbGxiYWNrKV0oc3RkOjpvcHRpb25hbDxFcnJvcj4mJiBlcnJvcikgbXV0YWJs
ZSB7CiAgICAgICAgICAgICBpZiAoZXJyb3IpIHsKQEAgLTEzNSw3ICsxNDYsNyBAQCB2b2lkIENh
Y2hlczo6b3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIENhY2hlSWRlbnRpZmllckNhbGxiYWNrJiYg
Y2FsbGJhY2spCiAgICAgbWFrZURpcnR5KCk7CiAKICAgICB1aW50NjRfdCBjYWNoZUlkZW50aWZp
ZXIgPSBtX2VuZ2luZS0+bmV4dENhY2hlSWRlbnRpZmllcigpOwotICAgIG1fY2FjaGVzLmFwcGVu
ZChDYWNoZSB7ICp0aGlzLCBjYWNoZUlkZW50aWZpZXIsIENhY2hlOjpTdGF0ZTo6T3BlbiwgU3Ry
aW5nIHsgbmFtZSB9IH0pOworICAgIG1fY2FjaGVzLmFwcGVuZChDYWNoZSB7ICp0aGlzLCBjYWNo
ZUlkZW50aWZpZXIsIENhY2hlOjpTdGF0ZTo6T3BlbiwgU3RyaW5nIHsgbmFtZSB9LCBjcmVhdGVD
YW5vbmljYWxVVUlEU3RyaW5nKCkgfSk7CiAKICAgICB3cml0ZUNhY2hlc1RvRGlzayhbY2FsbGJh
Y2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgY2FjaGVJZGVudGlmaWVyXShzdGQ6Om9wdGlvbmFsPEVy
cm9yPiYmIGVycm9yKSBtdXRhYmxlIHsKICAgICAgICAgY2FsbGJhY2soQ2FjaGVJZGVudGlmaWVy
T3BlcmF0aW9uUmVzdWx0IHsgY2FjaGVJZGVudGlmaWVyLCAhIWVycm9yIH0pOwpAQCAtMTQ0LDYg
KzE1NSw3IEBAIHZvaWQgQ2FjaGVzOjpvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgQ2FjaGVJZGVu
dGlmaWVyQ2FsbGJhY2smJiBjYWxsYmFjaykKIAogdm9pZCBDYWNoZXM6OnJlbW92ZSh1aW50NjRf
dCBpZGVudGlmaWVyLCBDYWNoZUlkZW50aWZpZXJDYWxsYmFjayYmIGNhbGxiYWNrKQogeworICAg
IEFTU0VSVChtX2lzSW5pdGlhbGl6ZWQpOwogICAgIEFTU0VSVChtX2VuZ2luZSk7CiAKICAgICBh
dXRvIHBvc2l0aW9uID0gbV9jYWNoZXMuZmluZE1hdGNoaW5nKFsmXShjb25zdCBhdXRvJiBpdGVt
KSB7IHJldHVybiBpdGVtLmlkZW50aWZpZXIoKSA9PSBpZGVudGlmaWVyOyB9KTsKQEAgLTE2OCw2
ICsxODAsOSBAQCB2b2lkIENhY2hlczo6ZGlzcG9zZShDYWNoZSYgY2FjaGUpCiB7CiAgICAgYXV0
byBwb3NpdGlvbiA9IG1fcmVtb3ZlZENhY2hlcy5maW5kTWF0Y2hpbmcoWyZdKGNvbnN0IGF1dG8m
IGl0ZW0pIHsgcmV0dXJuIGl0ZW0uaWRlbnRpZmllcigpID09IGNhY2hlLmlkZW50aWZpZXIoKTsg
fSk7CiAgICAgaWYgKHBvc2l0aW9uICE9IG5vdEZvdW5kKSB7CisgICAgICAgIGlmIChtX3N0b3Jh
Z2UpCisgICAgICAgICAgICBtX3N0b3JhZ2UtPnJlbW92ZShjYWNoZS5rZXlzKCksIHsgfSk7CisK
ICAgICAgICAgbV9yZW1vdmVkQ2FjaGVzLnJlbW92ZShwb3NpdGlvbik7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CkBAIC0xODQsMTMgKzE5OSwxNSBAQCBzdGF0aWMgaW5saW5lIERhdGEgZW5jb2Rl
Q2FjaGVOYW1lcyhjb25zdCBWZWN0b3I8Q2FjaGU+JiBjYWNoZXMpCiAKICAgICB1aW50NjRfdCBz
aXplID0gY2FjaGVzLnNpemUoKTsKICAgICBlbmNvZGVyIDw8IHNpemU7Ci0gICAgZm9yIChhdXRv
JiBjYWNoZSA6IGNhY2hlcykKKyAgICBmb3IgKGF1dG8mIGNhY2hlIDogY2FjaGVzKSB7CiAgICAg
ICAgIGVuY29kZXIgPDwgY2FjaGUubmFtZSgpOworICAgICAgICBlbmNvZGVyIDw8IGNhY2hlLnVu
aXF1ZU5hbWUoKTsKKyAgICB9CiAKICAgICByZXR1cm4gRGF0YSB7IGVuY29kZXIuYnVmZmVyKCks
IGVuY29kZXIuYnVmZmVyU2l6ZSgpIH07CiB9CiAKLXN0YXRpYyBpbmxpbmUgRXhwZWN0ZWQ8VmVj
dG9yPFN0cmluZz4sIEVycm9yPiBkZWNvZGVDYWNoZXNOYW1lcyhjb25zdCBEYXRhJiBkYXRhLCBp
bnQgZXJyb3IpCitzdGF0aWMgaW5saW5lIEV4cGVjdGVkPFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5n
LCBTdHJpbmc+PiwgRXJyb3I+IGRlY29kZUNhY2hlc05hbWVzKGNvbnN0IERhdGEmIGRhdGEsIGlu
dCBlcnJvcikKIHsKICAgICBpZiAoZXJyb3IpCiAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZChFcnJvcjo6UmVhZERpc2spOwpAQCAtMjAwLDE0ICsyMTcsMTcgQEAgc3RhdGljIGlubGluZSBF
eHBlY3RlZDxWZWN0b3I8U3RyaW5nPiwgRXJyb3I+IGRlY29kZUNhY2hlc05hbWVzKGNvbnN0IERh
dGEmIGRhdGEKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGNvdW50KSkKICAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKEVycm9yOjpSZWFkRGlzayk7CiAKLSAgICBWZWN0b3I8U3RyaW5nPiBu
YW1lczsKKyAgICBWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPj4gbmFtZXM7CiAgICAg
bmFtZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShjb3VudCk7CiAgICAgZm9yIChzaXplX3QgaW5k
ZXggPSAwOyBpbmRleCA8IGNvdW50OyArK2luZGV4KSB7CiAgICAgICAgIFN0cmluZyBuYW1lOwog
ICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG5hbWUpKQogICAgICAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKEVycm9yOjpSZWFkRGlzayk7CisgICAgICAgIFN0cmluZyB1bmlxdWVOYW1l
OworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHVuaXF1ZU5hbWUpKQorICAgICAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVycm9yOjpSZWFkRGlzayk7CiAKLSAgICAgICAgbmFtZXMu
dW5jaGVja2VkQXBwZW5kKFdURk1vdmUobmFtZSkpOworICAgICAgICBuYW1lcy51bmNoZWNrZWRB
cHBlbmQoc3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPiB7IFdURk1vdmUobmFtZSksIFdURk1vdmUo
dW5pcXVlTmFtZSkgfSk7CiAgICAgfQogICAgIHJldHVybiBuYW1lczsKIH0KQEAgLTI0MCw4ICsy
NjAsOCBAQCB2b2lkIENhY2hlczo6cmVhZENhY2hlc0Zyb21EaXNrKFdURjo6RnVuY3Rpb248dm9p
ZChFeHBlY3RlZDxWZWN0b3I8Q2FjaGU+LCBFcnJvcgogICAgICAgICAgICAgY2FsbGJhY2sobWFr
ZVVuZXhwZWN0ZWQocmVzdWx0LmVycm9yKCkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQotICAgICAgICBjYWxsYmFjayhXVEY6Om1hcChXVEZNb3ZlKHJlc3VsdC52YWx1ZSgpKSwg
W3RoaXNdIChTdHJpbmcmJiBuYW1lKSB7Ci0gICAgICAgICAgICByZXR1cm4gQ2FjaGUgeyAqdGhp
cywgbV9lbmdpbmUtPm5leHRDYWNoZUlkZW50aWZpZXIoKSwgQ2FjaGU6OlN0YXRlOjpVbmluaXRp
YWxpemVkLCBXVEZNb3ZlKG5hbWUpIH07CisgICAgICAgIGNhbGxiYWNrKFdURjo6bWFwKFdURk1v
dmUocmVzdWx0LnZhbHVlKCkpLCBbdGhpc10gKGF1dG8mJiBwYWlyKSB7CisgICAgICAgICAgICBy
ZXR1cm4gQ2FjaGUgeyAqdGhpcywgbV9lbmdpbmUtPm5leHRDYWNoZUlkZW50aWZpZXIoKSwgQ2Fj
aGU6OlN0YXRlOjpVbmluaXRpYWxpemVkLCBXVEZNb3ZlKHBhaXIuZmlyc3QpLCBXVEZNb3ZlKHBh
aXIuc2Vjb25kKSB9OwogICAgICAgICB9KSk7CiAgICAgfSk7CiB9CkBAIC0yNjYsMTQgKzI4Niw4
MiBAQCB2b2lkIENhY2hlczo6d3JpdGVDYWNoZXNUb0Rpc2soQ29tcGxldGlvbkNhbGxiYWNrJiYg
Y2FsbGJhY2spCiAgICAgfSk7CiB9CiAKK3ZvaWQgQ2FjaGVzOjpyZWFkUmVjb3Jkc0xpc3QoQ2Fj
aGUmIGNhY2hlLCBOZXR3b3JrQ2FjaGU6OlN0b3JhZ2U6OlRyYXZlcnNlSGFuZGxlciYmIGNhbGxi
YWNrKQoreworICAgIEFTU0VSVChtX2lzSW5pdGlhbGl6ZWQpOworCisgICAgaWYgKCFtX3N0b3Jh
Z2UpIHsKKyAgICAgICAgY2FsbGJhY2sobnVsbHB0ciwgeyB9KTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBtX3N0b3JhZ2UtPnRyYXZlcnNlKGNhY2hlLnVuaXF1ZU5hbWUoKSwgMCwgW3By
b3RlY3RlZFN0b3JhZ2UgPSBtYWtlUmVmKCptX3N0b3JhZ2UpLCBjYWxsYmFjayA9IFdURk1vdmUo
Y2FsbGJhY2spXShjb25zdCBhdXRvKiBzdG9yYWdlLCBjb25zdCBhdXRvJiBpbmZvcm1hdGlvbikg
eworICAgICAgICBjYWxsYmFjayhzdG9yYWdlLCBpbmZvcm1hdGlvbik7CisgICAgfSk7Cit9CisK
K3ZvaWQgQ2FjaGVzOjp3cml0ZVJlY29yZChjb25zdCBDYWNoZSYgY2FjaGUsIGNvbnN0IFJlY29y
ZEluZm9ybWF0aW9uJiByZWNvcmRJbmZvcm1hdGlvbiwgUmVjb3JkJiYgcmVjb3JkLCBDb21wbGV0
aW9uQ2FsbGJhY2smJiBjYWxsYmFjaykKK3sKKyAgICBBU1NFUlQobV9pc0luaXRpYWxpemVkKTsK
KworICAgIC8vIEZJWE1FOiBDaGVjayBmb3Igc3RvcmFnZSBxdW90YS4KKyAgICBpZiAoIXNob3Vs
ZFBlcnNpc3QoKSkgeworICAgICAgICBtX3ZvbGF0aWxlU3RvcmFnZS5zZXQocmVjb3JkSW5mb3Jt
YXRpb24ua2V5LCBXVEZNb3ZlKHJlY29yZCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgbV9zdG9yYWdlLT5zdG9yZShDYWNoZTo6ZW5jb2RlKHJlY29yZEluZm9ybWF0aW9uLCByZWNv
cmQpLCBbcHJvdGVjdGVkU3RvcmFnZSA9IG1ha2VSZWYoKm1fc3RvcmFnZSksIGNhbGxiYWNrID0g
V1RGTW92ZShjYWxsYmFjayldKGNvbnN0IERhdGEmKSB7CisgICAgICAgIGNhbGxiYWNrKHN0ZDo6
bnVsbG9wdCk7CisgICAgfSk7Cit9CisKK3ZvaWQgQ2FjaGVzOjpyZWFkUmVjb3JkKGNvbnN0IE5l
dHdvcmtDYWNoZTo6S2V5JiBrZXksIFdURjo6RnVuY3Rpb248dm9pZChFeHBlY3RlZDxSZWNvcmQs
IEVycm9yPiYmKT4mJiBjYWxsYmFjaykKK3sKKyAgICBBU1NFUlQobV9pc0luaXRpYWxpemVkKTsK
KworICAgIGlmICghc2hvdWxkUGVyc2lzdCgpKSB7CisgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBt
X3ZvbGF0aWxlU3RvcmFnZS5maW5kKGtleSk7CisgICAgICAgIGlmIChpdGVyYXRvciA9PSBtX3Zv
bGF0aWxlU3RvcmFnZS5lbmQoKSkgeworICAgICAgICAgICAgY2FsbGJhY2sobWFrZVVuZXhwZWN0
ZWQoRXJyb3I6OkludGVybmFsKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgY2FsbGJhY2soaXRlcmF0b3ItPnZhbHVlLmNvcHkoKSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBtX3N0b3JhZ2UtPnJldHJpZXZlKGtleSwgNCwgW3Byb3RlY3RlZFN0b3Jh
Z2UgPSBtYWtlUmVmKCptX3N0b3JhZ2UpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShz
dGQ6OnVuaXF1ZV9wdHI8U3RvcmFnZTo6UmVjb3JkPiBzdG9yYWdlKSBtdXRhYmxlIHsKKyAgICAg
ICAgaWYgKCFzdG9yYWdlKSB7CisgICAgICAgICAgICBjYWxsYmFjayhtYWtlVW5leHBlY3RlZChF
cnJvcjo6UmVhZERpc2spKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
CisgICAgICAgIGF1dG8gcmVjb3JkID0gQ2FjaGU6OmRlY29kZSgqc3RvcmFnZSk7CisgICAgICAg
IGlmICghcmVjb3JkKSB7CisgICAgICAgICAgICBjYWxsYmFjayhtYWtlVW5leHBlY3RlZChFcnJv
cjo6UmVhZERpc2spKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisg
ICAgICAgIGNhbGxiYWNrKFdURk1vdmUocmVjb3JkLnZhbHVlKCkpKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfSk7Cit9CisKK3ZvaWQgQ2FjaGVzOjpyZW1vdmVSZWNvcmQoY29uc3QgTmV0
d29ya0NhY2hlOjpLZXkmIGtleSkKK3sKKyAgICBBU1NFUlQobV9pc0luaXRpYWxpemVkKTsKKwor
ICAgIGlmICghc2hvdWxkUGVyc2lzdCgpKSB7CisgICAgICAgIG1fdm9sYXRpbGVTdG9yYWdlLnJl
bW92ZShrZXkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fc3RvcmFnZS0+cmVtb3Zl
KGtleSk7Cit9CisKIHZvaWQgQ2FjaGVzOjpjbGVhck1lbW9yeVJlcHJlc2VudGF0aW9uKCkKIHsK
ICAgICBtYWtlRGlydHkoKTsKICAgICBtX2NhY2hlcy5jbGVhcigpOwogICAgIG1faXNJbml0aWFs
aXplZCA9IGZhbHNlOwogICAgIG1fc3RvcmFnZSA9IG51bGxwdHI7Ci0gICAgaWYgKG1fZW5naW5l
KQotICAgICAgICBtX2VuZ2luZS0+cmVtb3ZlQ2FjaGVzKG1fb3JpZ2luKTsKIH0KIAogYm9vbCBD
YWNoZXM6OmlzRGlydHkodWludDY0X3QgdXBkYXRlQ291bnRlcikgY29uc3QKQEAgLTI4Miw2ICsz
NzAsMTcgQEAgYm9vbCBDYWNoZXM6OmlzRGlydHkodWludDY0X3QgdXBkYXRlQ291bnRlcikgY29u
c3QKICAgICByZXR1cm4gbV91cGRhdGVDb3VudGVyICE9IHVwZGF0ZUNvdW50ZXI7CiB9CiAKK2Nv
bnN0IE5ldHdvcmtDYWNoZTo6U2FsdCYgQ2FjaGVzOjpzYWx0KCkgY29uc3QKK3sKKyAgICBpZiAo
bV9lbmdpbmUpCisgICAgICAgIHJldHVybiBtX2VuZ2luZS0+c2FsdCgpOworCisgICAgaWYgKCFt
X3ZvbGF0aWxlU2FsdCkKKyAgICAgICAgbV92b2xhdGlsZVNhbHQgPSBTYWx0IHsgfTsKKworICAg
IHJldHVybiBtX3ZvbGF0aWxlU2FsdC52YWx1ZSgpOworfQorCiBDYWNoZUluZm9zIENhY2hlczo6
Y2FjaGVJbmZvcyh1aW50NjRfdCB1cGRhdGVDb3VudGVyKSBjb25zdAogewogICAgIFZlY3RvcjxD
YWNoZUluZm8+IGNhY2hlSW5mb3M7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5oIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuaAppbmRleCBmMzEz
ZmQxYzRjYjhiOWZhZmNiNjQ2Njg4NjhjZjQzN2FkNTk3MjMyLi40YTJhNzc5MmVmZWE2ZGFmYTY0
NDQwNTNlYzcwOGJiMDUzZTZhZjA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmgKQEAgLTUy
LDE3ICs1MiwyMyBAQCBwdWJsaWM6CiAgICAgQ2FjaGUqIGZpbmQodWludDY0X3QgaWRlbnRpZmll
cik7CiAgICAgdm9pZCBhcHBlbmRSZXByZXNlbnRhdGlvbihTdHJpbmdCdWlsZGVyJikgY29uc3Q7
CiAKKyAgICB2b2lkIHJlYWRSZWNvcmRzTGlzdChDYWNoZSYsIE5ldHdvcmtDYWNoZTo6U3RvcmFn
ZTo6VHJhdmVyc2VIYW5kbGVyJiYpOworICAgIHZvaWQgcmVhZFJlY29yZChjb25zdCBOZXR3b3Jr
Q2FjaGU6OktleSYsIFdURjo6RnVuY3Rpb248dm9pZChFeHBlY3RlZDxXZWJDb3JlOjpET01DYWNo
ZUVuZ2luZTo6UmVjb3JkLCBXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6RXJyb3I+JiYpPiYmKTsK
KyAgICB2b2lkIHdyaXRlUmVjb3JkKGNvbnN0IENhY2hlJiwgY29uc3QgUmVjb3JkSW5mb3JtYXRp
b24mLCBXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6UmVjb3JkJiYsIFdlYkNvcmU6OkRPTUNhY2hl
RW5naW5lOjpDb21wbGV0aW9uQ2FsbGJhY2smJik7CisgICAgdm9pZCByZW1vdmVSZWNvcmQoY29u
c3QgTmV0d29ya0NhY2hlOjpLZXkmKTsKKworICAgIGNvbnN0IE5ldHdvcmtDYWNoZTo6U2FsdCYg
c2FsdCgpIGNvbnN0OworCisgICAgYm9vbCBzaG91bGRQZXJzaXN0KCkgY29uc3QgeyByZXR1cm4g
IW1fcm9vdFBhdGguaXNOdWxsKCk7IH0KKwogcHJpdmF0ZToKICAgICBDYWNoZXMoRW5naW5lJiwg
U3RyaW5nJiYgb3JpZ2luKTsKIAogICAgIHZvaWQgcmVhZENhY2hlc0Zyb21EaXNrKFdURjo6RnVu
Y3Rpb248dm9pZChFeHBlY3RlZDxWZWN0b3I8Q2FjaGU+LCBXZWJDb3JlOjpET01DYWNoZUVuZ2lu
ZTo6RXJyb3I+JiYpPiYmKTsKICAgICB2b2lkIHdyaXRlQ2FjaGVzVG9EaXNrKFdlYkNvcmU6OkRP
TUNhY2hlRW5naW5lOjpDb21wbGV0aW9uQ2FsbGJhY2smJik7CiAKLQogICAgIENhY2hlKiBmaW5k
KGNvbnN0IFN0cmluZyYgbmFtZSk7CiAKLSAgICBib29sIHNob3VsZFBlcnNpc3QoKSBjb25zdCB7
IHJldHVybiAhbV9yb290UGF0aC5pc051bGwoKTsgfQotCiAgICAgdm9pZCBtYWtlRGlydHkoKSB7
ICsrbV91cGRhdGVDb3VudGVyOyB9CiAgICAgYm9vbCBpc0RpcnR5KHVpbnQ2NF90IHVwZGF0ZUNv
dW50ZXIpIGNvbnN0OwogCkBAIC03NCw2ICs4MCw4IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPENh
Y2hlPiBtX2NhY2hlczsKICAgICBWZWN0b3I8Q2FjaGU+IG1fcmVtb3ZlZENhY2hlczsKICAgICBS
ZWZQdHI8TmV0d29ya0NhY2hlOjpTdG9yYWdlPiBtX3N0b3JhZ2U7CisgICAgSGFzaE1hcDxOZXR3
b3JrQ2FjaGU6OktleSwgV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OlJlY29yZD4gbV92b2xhdGls
ZVN0b3JhZ2U7CisgICAgbXV0YWJsZSBzdGQ6Om9wdGlvbmFsPE5ldHdvcmtDYWNoZTo6U2FsdD4g
bV92b2xhdGlsZVNhbHQ7CiAgICAgVmVjdG9yPFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpDb21w
bGV0aW9uQ2FsbGJhY2s+IG1fcGVuZGluZ0luaXRpYWxpemF0aW9uQ2FsbGJhY2tzOwogfTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVTdG9yYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlU3RvcmFnZS5jcHAKaW5kZXggODAzYTk5ZmJkZGQ2ZDhkMjI3MGFkNTVjOWJjYjUwYTA1
MWE0NGIzZi4uMGI2NTI4ZGQ3MjhmYjkzMzBhYTlkMDU0Mjg1NzRjZjQ2MGQwOWFmMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9y
YWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZVN0b3JhZ2UuY3BwCkBAIC04NDYsMTAgKzg0Niw3IEBAIHZvaWQgU3RvcmFnZTo6c3RvcmUo
Y29uc3QgUmVjb3JkJiByZWNvcmQsIE1hcHBlZEJvZHlIYW5kbGVyJiYgbWFwcGVkQm9keUhhbmRs
ZXIpCiAgICAgaWYgKCFpc0luaXRpYWxXcml0ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8g
RGVsYXkgdGhlIHN0YXJ0IG9mIHdyaXRlcyBhIGJpdCB0byBhdm9pZCBhZmZlY3RpbmcgZWFybHkg
cGFnZSBsb2FkLgotICAgIC8vIENvbXBsZXRpbmcgd3JpdGVzIHdpbGwgZGlzcGF0Y2ggbW9yZSB3
cml0ZXMgd2l0aG91dCBkZWxheS4KLSAgICBzdGF0aWMgY29uc3QgU2Vjb25kcyBpbml0aWFsV3Jp
dGVEZWxheSA9IDFfczsKLSAgICBtX3dyaXRlT3BlcmF0aW9uRGlzcGF0Y2hUaW1lci5zdGFydE9u
ZVNob3QoaW5pdGlhbFdyaXRlRGVsYXkpOworICAgIG1fd3JpdGVPcGVyYXRpb25EaXNwYXRjaFRp
bWVyLnN0YXJ0T25lU2hvdChtX2luaXRpYWxXcml0ZURlbGF5KTsKIH0KIAogdm9pZCBTdG9yYWdl
Ojp0cmF2ZXJzZShjb25zdCBTdHJpbmcmIHR5cGUsIFRyYXZlcnNlRmxhZ3MgZmxhZ3MsIFRyYXZl
cnNlSGFuZGxlciYmIHRyYXZlcnNlSGFuZGxlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5oIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmgKaW5kZXggNDEyZWQ5
ZWM1NzMxMTNkOGU1MWIyY2ZlMzFiZWIwNWY5NWVkOTQ3OS4uYjY4OGRjZDRlMGE3NWVhMTJhOWQx
MGRkZTdjOWJiNGM4ZjlmNGI0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmgKQEAgLTEwNCw2ICsxMDQsOCBA
QCBwdWJsaWM6CiAKICAgICB+U3RvcmFnZSgpOwogCisgICAgdm9pZCB3cml0ZVdpdGhvdXRXYWl0
aW5nKCkgeyBtX2luaXRpYWxXcml0ZURlbGF5ID0gMF9zOyB9OworCiBwcml2YXRlOgogICAgIFN0
b3JhZ2UoY29uc3QgU3RyaW5nJiBkaXJlY3RvcnlQYXRoLCBNb2RlLCBTYWx0KTsKIApAQCAtMTgy
LDYgKzE4NCwxMCBAQCBwcml2YXRlOgogICAgIFJlZjxXb3JrUXVldWU+IG1fc2VyaWFsQmFja2dy
b3VuZElPUXVldWU7CiAKICAgICBCbG9iU3RvcmFnZSBtX2Jsb2JTdG9yYWdlOworCisgICAgLy8g
QnkgZGVmYXVsdCwgZGVsYXkgdGhlIHN0YXJ0IG9mIHdyaXRlcyBhIGJpdCB0byBhdm9pZCBhZmZl
Y3RpbmcgZWFybHkgcGFnZSBsb2FkLgorICAgIC8vIENvbXBsZXRpbmcgd3JpdGVzIHdpbGwgZGlz
cGF0Y2ggbW9yZSB3cml0ZXMgd2l0aG91dCBkZWxheS4KKyAgICBTZWNvbmRzIG1faW5pdGlhbFdy
aXRlRGVsYXkgeyAxX3MgfTsKIH07CiAKIC8vIEZJWE1FOiBSZW1vdmUsIHVzZWQgYnkgTmV0d29y
a0NhY2hlU3RhdGlzdGljcyBvbmx5LgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
IGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDc3YjViOTdkYjBhNTBlOGE5MTQ0NGVkMWFj
NjQ4OWQwZjUzMzY5NjQuLjI4MGE5YjViNTgxYjFmYTA3ODJmZjE0YTc1Mjk4ZDJhODQyZWJjNTAg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxNy0wOS0xMyAgWW91ZW5uIEZhYmxldCAgPHlvdWVu
bkBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIENhY2hlIEFQSSBzdXBwb3J0IG9mIHJlY29yZHMg
cGVyc2lzdGVuY3kKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE3Njg0NQorCisgICAgICAgIFJldmlld2VkIGJ5IEFsZXggQ2hyaXN0ZW5zZW4uCisKKyAg
ICAgICAgKiBodHRwL3Rlc3RzL2NhY2hlLXN0b3JhZ2UvY2FjaGUtcGVyc2lzdGVuY3kuaHR0cHMu
aHRtbDoKKyAgICAgICAgKiBodHRwL3Rlc3RzL2NhY2hlLXN0b3JhZ2UvY2FjaGUtcmVjb3Jkcy1w
ZXJzaXN0ZW5jeS5odHRwcy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVz
dHMvY2FjaGUtc3RvcmFnZS9jYWNoZS1yZWNvcmRzLXBlcnNpc3RlbmN5Lmh0dHBzLmh0bWw6IEFk
ZGVkLgorCiAyMDE3LTA5LTEzICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBs
ZS5jb20+CiAKICAgICAgICAgRm9sbG93dXAgKHIyMjE4MDUpOiBBZGRyZXNzIGNvbW1lbnRzIGFu
ZCBhZGQgbW9yZSB0ZXN0cwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9jYWNo
ZS1zdG9yYWdlL2NhY2hlLXBlcnNpc3RlbmN5Lmh0dHBzLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL2NhY2hlLXN0b3JhZ2UvY2FjaGUtcGVyc2lzdGVuY3kuaHR0cHMuaHRtbAppbmRleCBk
MWVhZDRkNGFmMjViY2U4ZjU0ZjYwYThhMzJkZDFkNzc0MTFiOGY4Li5kYzllOTZiNjVlOGMyNDFm
NzA3OTZlNjU5NjVlMjU3ZDljMzUyY2RkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL2NhY2hlLXN0b3JhZ2UvY2FjaGUtcGVyc2lzdGVuY3kuaHR0cHMuaHRtbAorKysgYi9MYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL2NhY2hlLXN0b3JhZ2UvY2FjaGUtcGVyc2lzdGVuY3kuaHR0cHMu
aHRtbApAQCAtNDIsMTEgKzQyLDExIEBACiAgICAgcHJvbWlzZV90ZXN0KHRlc3QgPT4gewogICAg
ICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCiAgICAgICAgICAgICB0ZXN0UnVubmVyLnNldFBy
aXZhdGVCcm93c2luZ0VuYWJsZWQoZmFsc2UpOwotICAgICAgICB2YXIgY2xlYXJQcm9taXNlOwot
ICAgICAgICBpZiAod2luZG93LmludGVybmFscykKLSAgICAgICAgICAgIGNsZWFyUHJvbWlzZSA9
aW50ZXJuYWxzLmNsZWFyQ2FjaGVTdG9yYWdlTWVtb3J5UmVwcmVzZW50YXRpb24oKTsKIAotICAg
ICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNsZWFyUHJvbWlzZSkudGhlbigoKSA9PiB7Cisg
ICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHsKKyAgICAgICAgICAg
IGlmICh3aW5kb3cuaW50ZXJuYWxzKQorICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbHMu
Y2xlYXJDYWNoZVN0b3JhZ2VNZW1vcnlSZXByZXNlbnRhdGlvbigpOworICAgICAgICB9KS50aGVu
KCgpID0+IHsKICAgICAgICAgICAgIHJldHVybiBzZWxmLmNhY2hlcy5rZXlzKCk7CiAgICAgICAg
IH0pLnRoZW4oa2V5cyA9PiB7CiAgICAgICAgICAgICB2YXIgcGVuZGluZyA9IFtdOwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9jYWNoZS1zdG9yYWdlL2NhY2hlLXJlY29yZHMt
cGVyc2lzdGVuY3kuaHR0cHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9j
YWNoZS1zdG9yYWdlL2NhY2hlLXJlY29yZHMtcGVyc2lzdGVuY3kuaHR0cHMtZXhwZWN0ZWQudHh0
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmMxOWNjZWEzYjRkYzRlNmEwMjMwNTMyYzE3OWZlMTEwNDE0MWY4NjYKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2NhY2hlLXN0b3JhZ2UvY2Fj
aGUtcmVjb3Jkcy1wZXJzaXN0ZW5jeS5odHRwcy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw5IEBA
CisKK1BBU1MgQ2xlYW5pbmcgZXhpc3RpbmcgY2FjaGVzIAorUEFTUyBDYWNoZS5wdXQgY2FsbGVk
IHR3aWNlIHdpdGggbWF0Y2hpbmcgUmVxdWVzdHMgLSBrZXlzIHNob3VsZCByZW1haW4gdGhlIHNh
bWUgLSB0ZXN0aW5nIHBlcnNpc3RlbmN5IAorUEFTUyBDbGVhbmluZyBjcmVhdGVkIGNhY2hlcyAK
K1BBU1MgQ2hlY2tpbmcgcGVyc2lzdGVuY3kgb2YgY2FjaGUga2V5cyAKK1BBU1MgQ2hlY2tpbmcg
cGVyc2lzdGVuY3kgb2YgcmVzcG9uc2UgCitQQVNTIENoZWNraW5nIHBlcnNpc3RlbmN5IG9mIHJl
c3BvbnNlIGJvZHkgCitQQVNTIFRlc3Rpbmcgb3ZlcnJpZGluZyBvZiBhbiBleGlzdGluZyBjYWNo
ZWQgcmVjb3JkIHRoYXQgaXMgbm90IGluIG1lbW9yeSAKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9jYWNoZS1zdG9yYWdlL2NhY2hlLXJlY29yZHMtcGVyc2lzdGVuY3kuaHR0
cHMuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvY2FjaGUtc3RvcmFnZS9jYWNoZS1yZWNv
cmRzLXBlcnNpc3RlbmN5Lmh0dHBzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmI0YmFhMDBhYmVhYTVkNTUx
N2MzMDg1ZTgxYWIyODJhMzcyYTg1MAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0
dHAvdGVzdHMvY2FjaGUtc3RvcmFnZS9jYWNoZS1yZWNvcmRzLXBlcnNpc3RlbmN5Lmh0dHBzLmh0
bWwKQEAgLTAsMCArMSwxMzMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzx0
aXRsZT5DYWNoZSBTdG9yYWdlOiB0ZXN0aW5nIENhY2hlIHBlcnNpc3RlbmN5PC90aXRsZT4KKzxz
Y3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4K
Kzxib2R5PgorICAgIDxzY3JpcHQ+CitmdW5jdGlvbiBhc3NlcnRfaGVhZGVyX2VxdWFscyhhY3R1
YWwsIGV4cGVjdGVkLCBkZXNjcmlwdGlvbikgeworICAgIGFzc2VydF9jbGFzc19zdHJpbmcoYWN0
dWFsLCAiSGVhZGVycyIsIGRlc2NyaXB0aW9uKTsKKyAgICB2YXIgaGVhZGVyOworICAgIHZhciBh
Y3R1YWxfaGVhZGVycyA9IFtdOworICAgIHZhciBleHBlY3RlZF9oZWFkZXJzID0gW107CisgICAg
Zm9yIChoZWFkZXIgb2YgYWN0dWFsKQorICAgICAgICBhY3R1YWxfaGVhZGVycy5wdXNoKGhlYWRl
clswXSArICI6ICIgKyBoZWFkZXJbMV0pOworICAgIGZvciAoaGVhZGVyIG9mIGV4cGVjdGVkKQor
ICAgICAgICBleHBlY3RlZF9oZWFkZXJzLnB1c2goaGVhZGVyWzBdICsgIjogIiArIGhlYWRlclsx
XSk7CisgICAgYXNzZXJ0X2FycmF5X2VxdWFscyhhY3R1YWxfaGVhZGVycywgZXhwZWN0ZWRfaGVh
ZGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICsgIiBIZWFkZXJzIGRp
ZmZlci4iKTsKK30KKworZnVuY3Rpb24gYXNzZXJ0X3Jlc3BvbnNlX2VxdWFscyhhY3R1YWwsIGV4
cGVjdGVkLCBkZXNjcmlwdGlvbikgeworICAgIGFzc2VydF9jbGFzc19zdHJpbmcoYWN0dWFsLCAi
UmVzcG9uc2UiLCBkZXNjcmlwdGlvbik7CisgICAgWyJ0eXBlIiwgInVybCIsICJzdGF0dXMiLCAi
b2siLCAic3RhdHVzVGV4dCJdLmZvckVhY2goZnVuY3Rpb24oYXR0cmlidXRlKSB7CisgICAgICAg
IGFzc2VydF9lcXVhbHMoYWN0dWFsW2F0dHJpYnV0ZV0sIGV4cGVjdGVkW2F0dHJpYnV0ZV0sCisg
ICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gKyAiIEF0dHJpYnV0ZXMgZGlmZmVyOiAi
ICsgYXR0cmlidXRlICsgIi4iKTsKKyAgICB9KTsKKyAgICBhc3NlcnRfaGVhZGVyX2VxdWFscyhh
Y3R1YWwuaGVhZGVycywgZXhwZWN0ZWQuaGVhZGVycywgZGVzY3JpcHRpb24pOworfQorCitmdW5j
dGlvbiBhc3NlcnRfcmVxdWVzdF9lcXVhbHMoYWN0dWFsLCBleHBlY3RlZCwgZGVzY3JpcHRpb24p
IHsKKyAgICBhc3NlcnRfY2xhc3Nfc3RyaW5nKGFjdHVhbCwgIlJlcXVlc3QiLCBkZXNjcmlwdGlv
bik7CisgICAgWyJ1cmwiXS5mb3JFYWNoKGZ1bmN0aW9uKGF0dHJpYnV0ZSkgeworICAgICAgICBh
c3NlcnRfZXF1YWxzKGFjdHVhbFthdHRyaWJ1dGVdLCBleHBlY3RlZFthdHRyaWJ1dGVdLAorICAg
ICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICsgIiBBdHRyaWJ1dGVzIGRpZmZlcjogIiAr
IGF0dHJpYnV0ZSArICIuIik7CisgICAgfSk7CisgICAgYXNzZXJ0X2hlYWRlcl9lcXVhbHMoYWN0
dWFsLmhlYWRlcnMsIGV4cGVjdGVkLmhlYWRlcnMsIGRlc2NyaXB0aW9uKTsKK30KKworZnVuY3Rp
b24gYXNzZXJ0X3JlcXVlc3RfYXJyYXlfZXF1YWxzKGFjdHVhbCwgZXhwZWN0ZWQsIGRlc2NyaXB0
aW9uKSB7CisgICAgYXNzZXJ0X3RydWUoQXJyYXkuaXNBcnJheShhY3R1YWwpLCBkZXNjcmlwdGlv
bik7CisgICAgYXNzZXJ0X2VxdWFscyhhY3R1YWwubGVuZ3RoLCBleHBlY3RlZC5sZW5ndGgsIGRl
c2NyaXB0aW9uKTsKKyAgICBhY3R1YWwuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgaW5kZXgpIHsK
KyAgICAgICAgYXNzZXJ0X3JlcXVlc3RfZXF1YWxzKHZhbHVlLCBleHBlY3RlZFtpbmRleF0sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiArICIgOiBvYmplY3RbIiAr
IGluZGV4ICsgIl0iKTsKKyAgICB9KTsKK30KKworcHJvbWlzZV90ZXN0KHRlc3QgPT4geworICAg
IHJldHVybiBzZWxmLmNhY2hlcy5rZXlzKCkudGhlbihrZXlzID0+IHsKKyAgICAgICAgdmFyIHBl
bmRpbmcgPSBbXTsKKyAgICAgICAgZm9yIChrZXkgb2Yga2V5cykKKyAgICAgICAgICAgIHBlbmRp
bmcucHVzaChzZWxmLmNhY2hlcy5kZWxldGUoa2V5c1swXSkpOworICAgICAgICByZXR1cm4gUHJv
bWlzZS5hbGwocGVuZGluZyk7CisgICAgfSk7Cit9LCAiQ2xlYW5pbmcgZXhpc3RpbmcgY2FjaGVz
Iik7CisKK3ZhciB0ZXN0X3VybCA9ICdodHRwczovL2V4YW1wbGUuY29tL2Zvbyc7Cit2YXIgdGVz
dF9ib2R5ID0gJ0hlbGxvIHdvcmxkISc7CisKK3Byb21pc2VfdGVzdCgoKSA9PiB7CisgICAgdmFy
IGNhY2hlOworICAgIHZhciBjYWNoZV9rZXlzOworICAgIHZhciBmaXJzdF9yZXNwb25zZSA9IG5l
dyBSZXNwb25zZSgiT2xkIGJvZHkiLCB7IHN0YXR1c1RleHQ6ICdPbGQgc3RhdHVzJyB9KTsKKyAg
ICB2YXIgYWx0ZXJuYXRlX3Jlc3BvbnNlID0gbmV3IFJlc3BvbnNlKCJOZXcgYm9keSIsIHsgc3Rh
dHVzVGV4dDogJ05ldyBzdGF0dXMnIH0pOworICAgIHJldHVybiBzZWxmLmNhY2hlcy5vcGVuKCJ0
ZXN0LWNhY2hlLXJlY29yZHMtcGVyc2lzdGVuY3kiKS50aGVuKGMgPT4geworICAgICAgICBjYWNo
ZSA9IGM7CisgICAgfSkudGhlbigoKSA9PiB7CisgICAgICAgIHJldHVybiBjYWNoZS5wdXQodGVz
dF91cmwsIGZpcnN0X3Jlc3BvbnNlKTsKKyAgICB9KS50aGVuKCgpID0+IHsKKyAgICAgICAgcmV0
dXJuIGNhY2hlLmtleXMoKTsKKyAgICB9KS50aGVuKGtleXMgPT4geworICAgICAgICBjYWNoZV9r
ZXlzID0ga2V5czsKKyAgICAgICAgaWYgKHdpbmRvdy5pbnRlcm5hbHMpCisgICAgICAgICAgICBy
ZXR1cm4gaW50ZXJuYWxzLmNsZWFyQ2FjaGVTdG9yYWdlTWVtb3J5UmVwcmVzZW50YXRpb24oKTsK
KyAgICB9KS50aGVuKCgpID0+IHsKKyAgICAgICAgcmV0dXJuIHNlbGYuY2FjaGVzLm9wZW4oInRl
c3QtY2FjaGUtcmVjb3Jkcy1wZXJzaXN0ZW5jeSIpOworICAgIH0pLnRoZW4oYyA9PiB7CisgICAg
ICAgIGNhY2hlID0gYzsKKyAgICAgICAgcmV0dXJuIGNhY2hlLmtleXMoKS50aGVuKChrZXlzKSA9
PiB7CisgICAgICAgICAgICB0ZXN0KCgpID0+IHsKKyAgICAgICAgICAgICAgICBhc3NlcnRfcmVx
dWVzdF9hcnJheV9lcXVhbHMoa2V5cywgY2FjaGVfa2V5cyk7CisgICAgICAgICAgICB9LCAiQ2hl
Y2tpbmcgcGVyc2lzdGVuY3kgb2YgY2FjaGUga2V5cyIpOworICAgICAgICAgICAgcmV0dXJuIGNh
Y2hlLm1hdGNoKHRlc3RfdXJsKTsKKyAgICAgICAgfSkudGhlbigocmVzdWx0KSA9PiB7CisgICAg
ICAgICAgICB0ZXN0KCgpID0+IHsKKyAgICAgICAgICAgICAgICBhc3NlcnRfcmVzcG9uc2VfZXF1
YWxzKHJlc3VsdCwgZmlyc3RfcmVzcG9uc2UsICJDYWNoZS5wdXQgc2hvdWxkIHN0b3JlIHRoZSBy
ZXNwb25zZSBwZXJzaXN0ZW50bHkiKTsKKyAgICAgICAgICAgIH0sICJDaGVja2luZyBwZXJzaXN0
ZW5jeSBvZiByZXNwb25zZSIpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC50ZXh0KCk7Cisg
ICAgICAgIH0pLnRoZW4oKGJvZHkpID0+IHsKKyAgICAgICAgICAgIHRlc3QoKCkgPT4geworICAg
ICAgICAgICAgICAgIGFzc2VydF9lcXVhbHMoYm9keSwgIk9sZCBib2R5IiwgIkNhY2hlIHB1dCBz
aG91bGQgc3RvcmUgdGhlIHJlc3BvbnNlIGJvZHkgcGVyc2lzdGVudGx5LiIpOworICAgICAgICAg
ICAgfSwgIkNoZWNraW5nIHBlcnNpc3RlbmN5IG9mIHJlc3BvbnNlIGJvZHkiKTsKKyAgICAgICAg
fSk7CisgICAgfSkudGhlbigoKSA9PiB7CisgICAgICAgIHJldHVybiBjYWNoZS5wdXQodGVzdF91
cmwsIGFsdGVybmF0ZV9yZXNwb25zZSk7CisgICAgfSkudGhlbigoKSA9PiB7CisgICAgICAgIHJl
dHVybiBjYWNoZS5rZXlzKCk7CisgICAgfSkudGhlbihrZXlzID0+IHsKKyAgICAgICAgY2FjaGVf
a2V5cyA9IGtleXM7CisgICAgICAgIGlmICh3aW5kb3cuaW50ZXJuYWxzKQorICAgICAgICAgICAg
cmV0dXJuIGludGVybmFscy5jbGVhckNhY2hlU3RvcmFnZU1lbW9yeVJlcHJlc2VudGF0aW9uKCk7
CisgICAgfSkudGhlbigoKSA9PiB7CisgICAgICAgIHJldHVybiBzZWxmLmNhY2hlcy5vcGVuKCJ0
ZXN0LWNhY2hlLXJlY29yZHMtcGVyc2lzdGVuY3kiKTsKKyAgICB9KS50aGVuKGMgPT4geworICAg
ICAgICBjYWNoZSA9IGM7CisgICAgICAgIHJldHVybiBjYWNoZS5rZXlzKCk7CisgICAgfSkudGhl
bigoa2V5cykgPT4geworICAgICAgICBhc3NlcnRfcmVxdWVzdF9hcnJheV9lcXVhbHMoa2V5cywg
Y2FjaGVfa2V5cyk7CisgICAgfSkudGhlbigoKSA9PiB7CisgICAgICAgIHByb21pc2VfdGVzdCgo
KSA9PiB7CisgICAgICAgICAgICByZXR1cm4gY2FjaGUubWF0Y2godGVzdF91cmwpLnRoZW4oKHJl
c3VsdCkgPT4geworICAgICAgICAgICAgICAgIGFzc2VydF9yZXNwb25zZV9lcXVhbHMocmVzdWx0
LCBhbHRlcm5hdGVfcmVzcG9uc2UsICdDYWNoZS5wdXQgc2hvdWxkIHJlcGxhY2UgZXhpc3Rpbmcg
JyArICdyZXNwb25zZSB3aXRoIG5ldyByZXNwb25zZS4nKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gcmVzdWx0LnRleHQoKTsKKyAgICAgICAgICAgIH0pLnRoZW4oKGJvZHkpID0+IHsKKyAgICAg
ICAgICAgICAgICBhc3NlcnRfZXF1YWxzKGJvZHksICJOZXcgYm9keSIsICdDYWNoZSBwdXQgc2hv
dWxkIHN0b3JlIG5ldyByZXNwb25zZSBib2R5LicpOworICAgICAgICAgICAgfSk7CisgICAgICAg
IH0sICdUZXN0aW5nIG92ZXJyaWRpbmcgb2YgYW4gZXhpc3RpbmcgY2FjaGVkIHJlY29yZCB0aGF0
IGlzIG5vdCBpbiBtZW1vcnknKTsKKyAgICB9KTsKK30sICdDYWNoZS5wdXQgY2FsbGVkIHR3aWNl
IHdpdGggbWF0Y2hpbmcgUmVxdWVzdHMgLSBrZXlzIHNob3VsZCByZW1haW4gdGhlIHNhbWUgLSB0
ZXN0aW5nIHBlcnNpc3RlbmN5Jyk7CisKK3Byb21pc2VfdGVzdCh0ZXN0ID0+IHsKKyAgICByZXR1
cm4gc2VsZi5jYWNoZXMua2V5cygpLnRoZW4oa2V5cyA9PiB7CisgICAgICAgIHZhciBwZW5kaW5n
ID0gW107CisgICAgICAgIGZvciAoa2V5IG9mIGtleXMpCisgICAgICAgICAgICBwZW5kaW5nLnB1
c2goc2VsZi5jYWNoZXMuZGVsZXRlKGtleXNbMF0pKTsKKyAgICAgICAgcmV0dXJuIFByb21pc2Uu
YWxsKHBlbmRpbmcpOworICAgIH0pOworfSwgIkNsZWFuaW5nIGNyZWF0ZWQgY2FjaGVzIik7Cisg
ICAgPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>320863</attachid>
            <date>2017-09-14 19:03:10 -0700</date>
            <delta_ts>2017-09-14 20:56:53 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-176845-20170914190308.patch</filename>
            <type>text/plain</type>
            <size>57764</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIxOTk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDBiNGM1Y2Q2NGM0YzdhNzdl
Y2Y2YmY0MGY5ZDBhNTFkYWVjNTMzNzIuLjhiNTMxOGM4M2E3NDYwM2U2YTkyODc1ZDQ0NzBjZjZh
NmY2MWRlMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTA1IEBACiAyMDE3LTA5LTEzICBZb3Vlbm4g
RmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAorICAgICAgICBBZGQgQ2FjaGUgQVBJIHN1cHBv
cnQgb2YgcmVjb3JkcyBwZXJzaXN0ZW5jeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTc2ODQ1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWxleCBDaHJp
c3RlbnNlbi4KKworICAgICAgICBJbnRyb2R1Y2luZyBhc3luY2hyb25vdXMgb3BlbmluZyBvZiBD
YWNoZSBvYmplY3RzLgorICAgICAgICBXaGVuIG9wZW5pbmcsIENhY2hlIG9iamVjdHMgd2lsbCBy
ZWFkIHRoZSBsaXN0IG9mIHJlY29yZHMgZnJvbSB0aGUgZGlzay4KKyAgICAgICAgVGhleSBrZWVw
IGluIG1lbW9yeSB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIHRvIG1ha2UgYW55IG1hdGNoIG9y
IHJlbW92ZSByZXF1ZXN0IHdpdGhvdXQgcmVhZGluZyBmdXJ0aGVyIGluZm9ybWF0aW9uIGZyb20g
dGhlIGRpc2suCisgICAgICAgIENhY2hlIG9iamVjdHMgdGh1cyBrZWVwIGR1cmluZyB0aGUgb3Bl
bmluZyB0aW1lIGEgbGlzdCBvZiBjYWxsYmFja3MgdG8gY2FsbCB3aGVuIGJlaW5nIG9wZW5lZC4K
KyAgICAgICAgUGVyc2lzdGVudCBzdG9yYWdlIGlzIGltcGxlbWVudGVkIHRocm91Z2ggTmV0d29y
a0NhY2hlOjpTdG9yYWdlLgorCisgICAgICAgIEEgQ2FjaGUgb2JqZWN0IGlzIGFkZGVkIGEgdW5p
cXVlIG5hbWUgc28gdGhhdCByZWNvcmRzIGZyb20gYSBDYWNoZSBjYW5ub3QgYmUgbWl4ZWQgd2l0
aCByZWNvcmRzIGZyb20gYW5vdGhlciBDYWNoZS4KKyAgICAgICAgVGhpcyB1bmlxdWUgbmFtZSBp
cyBzdG9yZWQgcGVyc2lzdGVubHkgaW4gYWRkaXRpb24gdG8gdGhlIENhY2hlIG5hbWUuCisgICAg
ICAgIFRoaXMgdW5pcXVlIG5hbWUgaXMgdXNlZCBhcyB0aGUga2V5IHR5cGUgZ2l2ZW4gdG8gdGhl
IHN0b3JhZ2UuCisKKyAgICAgICAgUmVxdWVzdCwgcmVzcG9uc2UgYW5kIHJlc3BvbnNlYm9keSBk
YXRhIGFyZSBubyBsb25nZXIga2VwdCBieSB0aGUgQ2FjaGUgb2JqZWN0LgorICAgICAgICBGb3Ig
cmVndWxhciBzZXNzaW9ucywgdGhpcyBpbmZvcm1hdGlvbiBpcyBrZXB0IG9uIHRoZSBkaXNrIHRo
cm91Z2ggTmV0d29ya0NhY2hlOjpTdG9yYWdlLgorICAgICAgICBJbnNlcnRpb24gdGltZSBpcyBh
bHNvIHN0b3JlZCBwZXJzaXN0ZW50bHkgc28gYXMgdG8ga2VlcCB0aGUgb3JkZXJpbmcgb2YgdGhl
IHJlY29yZHMgY29uc2lzdGVudC4KKyAgICAgICAgRm9yIHByaXZhdGUgYnJvd3Npbmcgc2Vzc2lv
bnMsIHRoaXMgaW5mb3JtYXRpb24gaXMga2VwdCBpbiBhIG1hcCBvd25lZCBieSB0aGUgQ2FjaGVz
IG9iamVjdC4KKyAgICAgICAgUmVjb3JkRGF0YSBpcyByZW5hbWVkIHRvIFJlY29yZEluZm9ybWF0
aW9uIGFzIGl0IG5vdyBvbmx5IGNvbnRhaW5zIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGhhbmRs
ZSB0aGUgZGlmZmVyZW50IENhY2hlIGFjdGlvbnMuCisKKyAgICAgICAgRm9yIGV2ZXJ5IHJlY29y
ZCByZXRyaWV2YWwgYWN0aW9uLCBhIFJlYWRSZWNvcmRUYXNrQ291bnRlciBpcyB1c2VkLgorICAg
ICAgICBJdHMgcHVycG9zZSBpcyB0byBhbGxvdyByZXRyaWV2aW5nIHRoZSByZWNvcmQgZGF0YSBv
biB0aGUgZGlzayBpbiBwYXJhbGxlbCwKKyAgICAgICAgYW5kIHRoZW4gc2VuZCBiYWNrIHRoZSBp
bmZvcm1hdGlvbiB3aGVuIGV2ZXJ5dGhpbmcgaXMgcmVhZC4KKyAgICAgICAgSW4gY2FzZSBzb21l
IHJlY29yZHMgY2Fubm90IGJlIGNvcnJlY3RseSByZWFkLCB0aGV5IGFyZSByZW1vdmVkIGF1dG9t
YXRpY2FsbHkgYXQgdGhhdCBwb2ludC4KKyAgICAgICAgVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRp
b24gbG9hZHMgYWxsIGluZm9ybWF0aW9uIGluIG1lbW9yeSBpbmNsdWRpbmcgcmVzcG9uc2UgYm9k
aWVzLgorICAgICAgICBGdXJ0aGVyIGltcHJvdmVtZW50cyBtaWdodCBjb25zaWRlciBzdHJlYW1p
bmcgdGhlIHJlc3BvbnNlIGJvZGllcyBwcm9ncmVzc2l2ZWx5LgorCisgICAgICAgIEZvciBldmVy
eSBzdG9yZWQgcmVjb3JkLCBhbiBBc3luY2hyb25vdXNQdXRUYXNrQ291bnRlciBpcyB1c2VkLgor
ICAgICAgICBJdHMgcHVycG9zZSBpcyBhbHNvIHRvIHdhaXQgZm9yIGFsbCBwdXQgYWN0aW9ucyB0
byBiZSBjb21wbGV0ZWQgYmVmb3JlIGV4ZWN1dGluZyB0aGUgY29tcGxldGlvbiBjYWxsYmFjay4K
KyAgICAgICAgSW4gc29tZSBjYXNlcywgYSByZWNvcmQgbmVlZHMgdG8gYmUgb3ZlcnJpZGVuLgor
ICAgICAgICBJbiB0aGF0IGNhc2UsIGFzIHBlciB0aGUgc3BlY2lmaWNhdGlvbiwgb25seSB0aGUg
ZGF0YSByZWxhdGVkIHRvIHRoZSByZXNwb25zZSBpcyB0byBiZSBtb2RpZmllZC4KKyAgICAgICAg
VGhpcyByZXF1aXJlcyByZWFkaW5nIHRoZSByZWNvcmQgcmVxdWVzdCBkYXRhIG9uIGRpc2sgYmVm
b3JlIGFjdHVhbGx5IHdyaXRpbmcgdGhlIHdob2xlIHJlY29yZCBhZ2Fpbi4KKyAgICAgICAgVGhp
cyBpcyBpbXBsZW1lbnRlZCBpbiB1cGRhdGVSZWNvcmRUb0Rpc2suCisKKyAgICAgICAgVGhlIENh
Y2hlIG9iamVjdCBpcyBkZWxlZ2F0aW5nIGFsbCByZWNvcmQgd3JpdGluZy9yZWFkaW5nIHRhc2tz
IHRvIGl0cyBDYWNoZXMgb2JqZWN0LgorICAgICAgICBUaGUgQ2FjaGVzIG9iamVjdCBpcyByZXNw
b25zaWJsZSB0byBoYW5kbGUgcGVyc2lzdGVudC9wcml2YXRlIHNlc3Npb25zLgorCisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpFbmdpbmU6OnJldHJpZXZlUmVjb3Jkcyk6IE1ha2luZyBz
dXJlIENhY2hlIG9iamVjdCBpcyBvcGVuZWQuCisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFn
ZTo6RW5naW5lOjpyZWFkQ2FjaGUpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9y
YWdlOjpFbmdpbmU6OnVubG9jayk6IERpc3Bvc2luZyB0aGUgY2FjaGUgd2l0aG91dCBnb2luZyB0
aHJvdWdoIGluaXRpYWxpemluZyBpdC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9D
YWNoZVN0b3JhZ2VFbmdpbmVDYWNoZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFn
ZTo6Y29tcHV0ZUtleVVSTCk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6cXVlcnlD
YWNoZSk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6dXBkYXRlVmFyeUluZm9ybWF0
aW9uKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6dG9SZWNvcmRJbmZv
cm1hdGlvbik6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OkNhY2hlKToK
KyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6b3Blbik6CisgICAgICAgIChX
ZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OmZpbmlzaE9wZW5pbmcpOgorICAgICAgICAoV2Vi
S2l0OjpDYWNoZVN0b3JhZ2U6OlJlYWRSZWNvcmRUYXNrQ291bnRlcjo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpSZWFkUmVjb3JkVGFza0NvdW50ZXI6On5SZWFkUmVj
b3JkVGFza0NvdW50ZXIpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OlJlYWRSZWNv
cmRUYXNrQ291bnRlcjo6YXBwZW5kUmVjb3JkKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9y
YWdlOjpSZWFkUmVjb3JkVGFza0NvdW50ZXI6OlJlYWRSZWNvcmRUYXNrQ291bnRlcik6CisgICAg
ICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OnJldHJpZXZlUmVjb3JkKToKKyAgICAg
ICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6cmV0cmlldmVSZWNvcmRzKToKKyAgICAg
ICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6YWRkUmVjb3JkKToKKyAgICAgICAgKFdl
YktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6cmVjb3Jkc0Zyb21VUkwpOgorICAgICAgICAoV2Vi
S2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjpyZWNvcmRzRnJvbVVSTCBjb25zdCk6CisgICAgICAg
IChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6QXN5bmNocm9ub3VzUHV0VGFza0NvdW50ZXI6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6QXN5bmNocm9ub3VzUHV0VGFza0Nv
dW50ZXI6On5Bc3luY2hyb25vdXNQdXRUYXNrQ291bnRlcik6CisgICAgICAgIChXZWJLaXQ6OkNh
Y2hlU3RvcmFnZTo6QXN5bmNocm9ub3VzUHV0VGFza0NvdW50ZXI6Om9uQ29tcGxldGlvbik6Cisg
ICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6QXN5bmNocm9ub3VzUHV0VGFza0NvdW50ZXI6
OnNldEVycm9yKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6cHV0KToK
KyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6cmVtb3ZlKToKKyAgICAgICAg
KFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6cmVtb3ZlRnJvbVJlY29yZExpc3QpOgorICAg
ICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjp3cml0ZVJlY29yZFRvRGlzayk6Cisg
ICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OnVwZGF0ZVJlY29yZFRvRGlzayk6
CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OnJlYWRSZWNvcmRGcm9tRGlz
ayk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OnJlbW92ZVJlY29yZEZy
b21EaXNrKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6ZW5jb2RlKToK
KyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpkZWNvZGVSZWNvcmRIZWFkZXIpOgorICAg
ICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjpkZWNvZGUpOgorICAgICAgICAoV2Vi
S2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjprZXlzIGNvbnN0KToKKyAgICAgICAgKiBOZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZS5oOgorICAgICAgICAoV2ViS2l0
OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjppc09wZW5lZCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6
OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OnVuaXF1ZU5hbWUgY29uc3QpOgorICAgICAgICAqIE5ldHdv
cmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYktp
dDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6Om9wZW4pOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0
b3JhZ2U6OkNhY2hlczo6cmVtb3ZlKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpD
YWNoZXM6OmRpc3Bvc2UpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OmVuY29kZUNh
Y2hlTmFtZXMpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OmRlY29kZUNhY2hlc05h
bWVzKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6OnJlYWRDYWNoZXNG
cm9tRGlzayk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjpyZWFkUmVj
b3Jkc0xpc3QpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6d3JpdGVS
ZWNvcmQpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6cmVhZFJlY29y
ZCk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjpyZW1vdmVSZWNvcmQp
OgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6Y2xlYXJNZW1vcnlSZXBy
ZXNlbnRhdGlvbik6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjpzYWx0
IGNvbnN0KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdp
bmVDYWNoZXMuaDoKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6OnNob3Vs
ZFBlcnNpc3QgY29uc3QpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZVN0b3JhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OlN0b3JhZ2U6
OnN0b3JlKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9y
YWdlLmg6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6U3RvcmFnZTo6d3JpdGVXaXRo
b3V0V2FpdGluZyk6CisKKzIwMTctMDktMTMgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUu
Y29tPgorCiAgICAgICAgIEludGVybmFscyBjbGVhckNhY2hlU3RvcmFnZU1lbW9yeVJlcHJlc2Vu
dGF0aW9uIHNob3VsZCByZXR1cm4gYSBQcm9taXNlCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzY4MTgKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmUuY3BwIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmUuY3BwCmluZGV4IDU4
MzJjMWExMTc5NWU5ZmNkOGIyZjE3YWI4Y2Y1N2Y2ZmVmY2MzMGIuLjQwOGY2MmIxY2NiNGZmYjgz
ZTllYTE3OTg2ZDM2ZDA0ZDNmOTllMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZS5jcHAKQEAgLTEzMiw4ICsx
MzIsNyBAQCB2b2lkIEVuZ2luZTo6cmV0cmlldmVSZWNvcmRzKHVpbnQ2NF90IGNhY2hlSWRlbnRp
ZmllciwgV2ViQ29yZTo6VVJMJiYgdXJsLCBSZWNvcgogICAgICAgICAgICAgY2FsbGJhY2sobWFr
ZVVuZXhwZWN0ZWQocmVzdWx0LmVycm9yKCkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQotCi0gICAgICAgIGNhbGxiYWNrKHJlc3VsdC52YWx1ZSgpLmdldCgpLnJldHJpZXZlUmVj
b3Jkcyh1cmwpKTsKKyAgICAgICAgcmVzdWx0LnZhbHVlKCkuZ2V0KCkucmV0cmlldmVSZWNvcmRz
KHVybCwgV1RGTW92ZShjYWxsYmFjaykpOwogICAgIH0pOwogfQogCkBAIC0yMTcsMTIgKzIxNiwy
OCBAQCB2b2lkIEVuZ2luZTo6cmVhZENhY2hlc0Zyb21EaXNrKGNvbnN0IFN0cmluZyYgb3JpZ2lu
LCBDYWNoZXNDYWxsYmFjayYmIGNhbGxiYWNrKQogCiB2b2lkIEVuZ2luZTo6cmVhZENhY2hlKHVp
bnQ2NF90IGNhY2hlSWRlbnRpZmllciwgQ2FjaGVDYWxsYmFjayYmIGNhbGxiYWNrKQogewotICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQgcmVhZGluZy4KICAgICBhdXRvKiBjYWNoZSA9IHRoaXMtPmNh
Y2hlKGNhY2hlSWRlbnRpZmllcik7CiAgICAgaWYgKCFjYWNoZSkgewogICAgICAgICBjYWxsYmFj
ayhtYWtlVW5leHBlY3RlZChFcnJvcjo6SW50ZXJuYWwpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KKyAgICBpZiAoIWNhY2hlLT5pc09wZW5lZCgpKSB7CisgICAgICAgIGNhY2hlLT5vcGVuKFt0
aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNhY2hlSWRlbnRpZmllciwgY2Fs
bGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oc3RkOjpvcHRpb25hbDxFcnJvcj4mJiBlcnJvcikg
bXV0YWJsZSB7CisgICAgICAgICAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgICAgICAgICBjYWxs
YmFjayhtYWtlVW5leHBlY3RlZChlcnJvci52YWx1ZSgpKSk7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBhdXRvKiBjYWNoZSA9IHRoaXMtPmNh
Y2hlKGNhY2hlSWRlbnRpZmllcik7CisgICAgICAgICAgICBpZiAoIWNhY2hlKSB7CisgICAgICAg
ICAgICAgICAgY2FsbGJhY2sobWFrZVVuZXhwZWN0ZWQoRXJyb3I6OkludGVybmFsKSk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQVNTRVJUKGNh
Y2hlLT5pc09wZW5lZCgpKTsKKyAgICAgICAgICAgIGNhbGxiYWNrKHN0ZDo6cmVmZXJlbmNlX3dy
YXBwZXI8Q2FjaGU+IHsgKmNhY2hlIH0pOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KICAgICBjYWxsYmFjayhzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPENhY2hlPiB7ICpjYWNo
ZSB9KTsKIH0KIApAQCAtMzI4LDEyICszNDMsMTEgQEAgdm9pZCBFbmdpbmU6OnVubG9jayh1aW50
NjRfdCBjYWNoZUlkZW50aWZpZXIpCiAgICAgaWYgKC0tbG9ja0NvdW50LT52YWx1ZSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgcmVhZENhY2hlKGNhY2hlSWRlbnRpZmllciwgW3RoaXNdKENhY2hl
T3JFcnJvciYmIHJlc3VsdCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmICghcmVzdWx0Lmhhc1ZhbHVl
KCkpCi0gICAgICAgICAgICByZXR1cm47CisgICAgYXV0byogY2FjaGUgPSB0aGlzLT5jYWNoZShj
YWNoZUlkZW50aWZpZXIpOworICAgIGlmICghY2FjaGUpCisgICAgICAgIHJldHVybjsKIAotICAg
ICAgICByZXN1bHQudmFsdWUoKS5nZXQoKS5kaXNwb3NlKCk7Ci0gICAgfSk7CisgICAgY2FjaGUt
PmRpc3Bvc2UoKTsKIH0KIAogU3RyaW5nIEVuZ2luZTo6cmVwcmVzZW50YXRpb24oKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdp
bmVDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3Rv
cmFnZUVuZ2luZUNhY2hlLmNwcAppbmRleCA0ODFhZGQ3ZWNjYjFjNWEyNTIzZWVhZjgyYjY2NGI3
M2RmZWE2ODVlLi44MmY4NWJmYTBiODZjYWZkYTU1YWZmYzY3MWYyZWQ4ZTUxMTcwNjNjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVu
Z2luZUNhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0Nh
Y2hlU3RvcmFnZUVuZ2luZUNhY2hlLmNwcApAQCAtMjcsMTUgKzI3LDE2IEBACiAjaW5jbHVkZSAi
Q2FjaGVTdG9yYWdlRW5naW5lLmgiCiAKICNpbmNsdWRlICJDYWNoZVN0b3JhZ2VFbmdpbmVDYWNo
ZXMuaCIKKyNpbmNsdWRlICJOZXR3b3JrQ2FjaGVDb2RlcnMuaCIKICNpbmNsdWRlICJOZXR3b3Jr
Q2FjaGVJT0NoYW5uZWwuaCIKICNpbmNsdWRlICJOZXR3b3JrQ2FjaGVLZXkuaCIKICNpbmNsdWRl
ICJOZXR3b3JrUHJvY2Vzcy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ2FjaGVRdWVyeU9wdGlvbnMu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL0hUVFBQYXJzZXJzLmg+CiAjaW5jbHVkZSA8cGFsL1Nlc3Np
b25JRC5oPgotI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9NYWlu
VGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3Rm
L1VVSUQuaD4KICNpbmNsdWRlIDx3dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVycy5oPgog
I2luY2x1ZGUgPHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RGVjb2Rlci5oPgogI2luY2x1ZGUg
PHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RW5jb2Rlci5oPgpAQCAtNTEsNyArNTIsMTggQEAg
bmFtZXNwYWNlIFdlYktpdCB7CiAKIG5hbWVzcGFjZSBDYWNoZVN0b3JhZ2UgewogCi1zdGF0aWMg
aW5saW5lIFZlY3Rvcjx1aW50NjRfdD4gcXVlcnlDYWNoZShjb25zdCBWZWN0b3I8UmVjb3JkRGF0
YT4qIHJlY29yZHMsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgQ2FjaGVR
dWVyeU9wdGlvbnMmIG9wdGlvbnMpCitzdGF0aWMgc3RkOjpvcHRpb25hbDxzdGQ6OnBhaXI8UmVj
b3JkLCBkb3VibGU+PiBkZWNvZGVSZWNvcmRIZWFkZXIoY29uc3QgU3RvcmFnZTo6UmVjb3JkJik7
CisKK3N0YXRpYyBpbmxpbmUgU3RyaW5nIGNvbXB1dGVLZXlVUkwoY29uc3QgVVJMJiB1cmwpCit7
CisgICAgVVJMIGtleVVSTCA9IHVybDsKKyAgICBpZiAoa2V5VVJMLmhhc1F1ZXJ5KCkpCisgICAg
ICAgIGtleVVSTC5zZXRRdWVyeSh7IH0pOworICAgIGtleVVSTC5yZW1vdmVGcmFnbWVudElkZW50
aWZpZXIoKTsKKyAgICByZXR1cm4ga2V5VVJMOworfQorCitzdGF0aWMgaW5saW5lIFZlY3Rvcjx1
aW50NjRfdD4gcXVlcnlDYWNoZShjb25zdCBWZWN0b3I8UmVjb3JkSW5mb3JtYXRpb24+KiByZWNv
cmRzLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IENhY2hlUXVlcnlPcHRp
b25zJiBvcHRpb25zKQogewogICAgIGlmICghcmVjb3JkcykKICAgICAgICAgcmV0dXJuIHsgfTsK
QEAgLTY3LDQ3ICs3OSw0MiBAQCBzdGF0aWMgaW5saW5lIFZlY3Rvcjx1aW50NjRfdD4gcXVlcnlD
YWNoZShjb25zdCBWZWN0b3I8UmVjb3JkRGF0YT4qIHJlY29yZHMsIGNvbgogICAgIHJldHVybiBy
ZXN1bHRzOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlVmFyeUluZm9ybWF0aW9uKFJl
Y29yZERhdGEmIHJlY29yZERhdGEpCitzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlVmFyeUluZm9y
bWF0aW9uKFJlY29yZEluZm9ybWF0aW9uJiByZWNvcmRJbmZvcm1hdGlvbiwgY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKIHsK
LSAgICBhdXRvIHZhcnlWYWx1ZSA9IHJlY29yZERhdGEuZGF0YS0+cmVzcG9uc2UuaHR0cEhlYWRl
ckZpZWxkKFdlYkNvcmU6OkhUVFBIZWFkZXJOYW1lOjpWYXJ5KTsKKyAgICBhdXRvIHZhcnlWYWx1
ZSA9IHJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZChXZWJDb3JlOjpIVFRQSGVhZGVyTmFtZTo6VmFy
eSk7CiAgICAgaWYgKHZhcnlWYWx1ZS5pc051bGwoKSkgewotICAgICAgICByZWNvcmREYXRhLmhh
c1ZhcnlTdGFyID0gZmFsc2U7Ci0gICAgICAgIHJlY29yZERhdGEudmFyeUhlYWRlcnMgPSB7IH07
CisgICAgICAgIHJlY29yZEluZm9ybWF0aW9uLmhhc1ZhcnlTdGFyID0gZmFsc2U7CisgICAgICAg
IHJlY29yZEluZm9ybWF0aW9uLnZhcnlIZWFkZXJzID0geyB9OwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCiAgICAgdmFyeVZhbHVlLnNwbGl0KCcsJywgZmFsc2UsIFsmXShTdHJpbmdWaWV3IHZp
ZXcpIHsKLSAgICAgICAgaWYgKCFyZWNvcmREYXRhLmhhc1ZhcnlTdGFyICYmIHN0cmlwTGVhZGlu
Z0FuZFRyYWlsaW5nSFRUUFNwYWNlcyh2aWV3KSA9PSAiKiIpCi0gICAgICAgICAgICByZWNvcmRE
YXRhLmhhc1ZhcnlTdGFyID0gdHJ1ZTsKKyAgICAgICAgaWYgKCFyZWNvcmRJbmZvcm1hdGlvbi5o
YXNWYXJ5U3RhciAmJiBzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUVFBTcGFjZXModmlldykgPT0g
IioiKQorICAgICAgICAgICAgcmVjb3JkSW5mb3JtYXRpb24uaGFzVmFyeVN0YXIgPSB0cnVlOwog
ICAgICAgICBTdHJpbmcgaGVhZGVyTmFtZSA9IHZpZXcudG9TdHJpbmcoKTsKLSAgICAgICAgcmVj
b3JkRGF0YS52YXJ5SGVhZGVycy5hZGQoaGVhZGVyTmFtZSwgcmVjb3JkRGF0YS5kYXRhLT5yZXF1
ZXN0Lmh0dHBIZWFkZXJGaWVsZChoZWFkZXJOYW1lKSk7CisgICAgICAgIHJlY29yZEluZm9ybWF0
aW9uLnZhcnlIZWFkZXJzLmFkZChoZWFkZXJOYW1lLCByZXF1ZXN0Lmh0dHBIZWFkZXJGaWVsZCho
ZWFkZXJOYW1lKSk7CiAgICAgfSk7CiAKLSAgICBpZiAocmVjb3JkRGF0YS5oYXNWYXJ5U3RhcikK
LSAgICAgICAgcmVjb3JkRGF0YS52YXJ5SGVhZGVycyA9IHsgfTsKKyAgICBpZiAocmVjb3JkSW5m
b3JtYXRpb24uaGFzVmFyeVN0YXIpCisgICAgICAgIHJlY29yZEluZm9ybWF0aW9uLnZhcnlIZWFk
ZXJzID0geyB9OwogfQogCi1zdGF0aWMgaW5saW5lIFJlY29yZCB0b1JlY29yZChjb25zdCBSZWNv
cmREYXRhJiByZWNvcmQpCitSZWNvcmRJbmZvcm1hdGlvbiBDYWNoZTo6dG9SZWNvcmRJbmZvcm1h
dGlvbihjb25zdCBSZWNvcmQmIHJlY29yZCkKIHsKLSAgICByZXR1cm4geyByZWNvcmQuaWRlbnRp
ZmllciwgcmVjb3JkLnVwZGF0ZVJlc3BvbnNlQ291bnRlciwgcmVjb3JkLmRhdGEtPnJlcXVlc3RI
ZWFkZXJzR3VhcmQsIHJlY29yZC5kYXRhLT5yZXF1ZXN0LCByZWNvcmQuZGF0YS0+b3B0aW9ucywg
cmVjb3JkLmRhdGEtPnJlZmVycmVyLCByZWNvcmQuZGF0YS0+cmVzcG9uc2VIZWFkZXJzR3VhcmQs
IHJlY29yZC5kYXRhLT5yZXNwb25zZSwgY29weVJlc3BvbnNlQm9keShyZWNvcmQuZGF0YS0+cmVz
cG9uc2VCb2R5KSB9OwotfQotCi1zdGF0aWMgaW5saW5lIFJlY29yZERhdGEgdG9SZWNvcmREYXRh
KFJlY29yZCYmIHJlY29yZCkKLXsKLSAgICBhdXRvIHVybCA9IHJlY29yZC5yZXF1ZXN0LnVybCgp
OwotICAgIFJlY29yZERhdGE6OkRhdGEgZGF0YSA9IHsgcmVjb3JkLnJlcXVlc3RIZWFkZXJzR3Vh
cmQsIFdURk1vdmUocmVjb3JkLnJlcXVlc3QpLCBXVEZNb3ZlKHJlY29yZC5vcHRpb25zKSwgV1RG
TW92ZShyZWNvcmQucmVmZXJyZXIpLCBXVEZNb3ZlKHJlY29yZC5yZXNwb25zZUhlYWRlcnNHdWFy
ZCksIFdURk1vdmUocmVjb3JkLnJlc3BvbnNlKSwgV1RGTW92ZShyZWNvcmQucmVzcG9uc2VCb2R5
KSB9OwotICAgIFJlY29yZERhdGEgcmVjb3JkRGF0YSA9IHsgeyB9LCBtb25vdG9uaWNhbGx5SW5j
cmVhc2luZ1RpbWVNUygpLCByZWNvcmQuaWRlbnRpZmllciwgMCwgdXJsLCBmYWxzZSwgeyB9LCBX
VEZNb3ZlKGRhdGEpIH07CisgICAgS2V5IGtleSB7IEFTQ0lJTGl0ZXJhbCgicmVjb3JkIiksIG1f
dW5pcXVlTmFtZSwgeyB9LCBjcmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCksIG1fY2FjaGVzLnNh
bHQoKSB9OworICAgIFJlY29yZEluZm9ybWF0aW9uIHJlY29yZEluZm9ybWF0aW9uIHsgV1RGTW92
ZShrZXkpLCBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWVNUygpLCByZWNvcmQuaWRlbnRpZmll
ciwgMCAsIHJlY29yZC5yZXF1ZXN0LnVybCgpLCBmYWxzZSwgeyB9IH07CiAKLSAgICB1cGRhdGVW
YXJ5SW5mb3JtYXRpb24ocmVjb3JkRGF0YSk7CisgICAgdXBkYXRlVmFyeUluZm9ybWF0aW9uKHJl
Y29yZEluZm9ybWF0aW9uLCByZWNvcmQucmVxdWVzdCwgcmVjb3JkLnJlc3BvbnNlKTsKIAotICAg
IHJldHVybiByZWNvcmREYXRhOworICAgIHJldHVybiByZWNvcmRJbmZvcm1hdGlvbjsKIH0KIAot
Q2FjaGU6OkNhY2hlKENhY2hlcyYgY2FjaGVzLCB1aW50NjRfdCBpZGVudGlmaWVyLCBTdGF0ZSBz
dGF0ZSwgU3RyaW5nJiYgbmFtZSkKK0NhY2hlOjpDYWNoZShDYWNoZXMmIGNhY2hlcywgdWludDY0
X3QgaWRlbnRpZmllciwgU3RhdGUgc3RhdGUsIFN0cmluZyYmIG5hbWUsIFN0cmluZyYmIHVuaXF1
ZU5hbWUpCiAgICAgOiBtX2NhY2hlcyhjYWNoZXMpCiAgICAgLCBtX3N0YXRlKHN0YXRlKQogICAg
ICwgbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCiAgICAgLCBtX25hbWUoV1RGTW92ZShuYW1lKSkK
KyAgICAsIG1fdW5pcXVlTmFtZShXVEZNb3ZlKHVuaXF1ZU5hbWUpKQogewogfQogCkBAIC0xMjIs
NyArMTI5LDM4IEBAIHZvaWQgQ2FjaGU6OmNsZWFyTWVtb3J5UmVwcmVzZW50YXRpb24oKQogICAg
IG1fbmV4dFJlY29yZElkZW50aWZpZXIgPSAwOwogICAgIG1fc3RhdGUgPSBTdGF0ZTo6VW5pbml0
aWFsaXplZDsKIH0KLSAKKworc3RhdGljIFJlY29yZEluZm9ybWF0aW9uIGlzb2xhdGVkQ29weShj
b25zdCBSZWNvcmRJbmZvcm1hdGlvbiYgaW5mb3JtYXRpb24pCit7CisgICAgYXV0byByZXN1bHQg
PSBSZWNvcmRJbmZvcm1hdGlvbiB7IGluZm9ybWF0aW9uLmtleSwgaW5mb3JtYXRpb24uaW5zZXJ0
aW9uVGltZSwgaW5mb3JtYXRpb24uaWRlbnRpZmllciwgaW5mb3JtYXRpb24udXBkYXRlUmVzcG9u
c2VDb3VudGVyLCBpbmZvcm1hdGlvbi51cmwuaXNvbGF0ZWRDb3B5KCksIGluZm9ybWF0aW9uLmhh
c1ZhcnlTdGFyLCB7IH0gfTsKKyAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiB2YXJ5SGVhZGVy
czsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGtleVZhbHVlIDogaW5mb3JtYXRpb24udmFyeUhlYWRl
cnMpCisgICAgICAgIHZhcnlIZWFkZXJzLnNldChrZXlWYWx1ZS5rZXkuaXNvbGF0ZWRDb3B5KCks
IGtleVZhbHVlLnZhbHVlLmlzb2xhdGVkQ29weSgpKTsKKyAgICByZXN1bHQudmFyeUhlYWRlcnMg
PSBXVEZNb3ZlKHZhcnlIZWFkZXJzKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdHJ1Y3Qg
VHJhdmVyc2FsUmVzdWx0IHsKKyAgICB1aW50NjRfdCBjYWNoZUlkZW50aWZpZXI7CisgICAgSGFz
aE1hcDxTdHJpbmcsIFZlY3RvcjxSZWNvcmRJbmZvcm1hdGlvbj4+IHJlY29yZHM7CisgICAgVmVj
dG9yPEtleT4gZmFpbGVkUmVjb3JkczsKK307CisKK3N0YXRpYyBUcmF2ZXJzYWxSZXN1bHQgaXNv
bGF0ZWRDb3B5KFRyYXZlcnNhbFJlc3VsdCYmIHJlc3VsdCkKK3sKKyAgICBIYXNoTWFwPFN0cmlu
ZywgVmVjdG9yPFJlY29yZEluZm9ybWF0aW9uPj4gaXNvbGF0ZWRSZWNvcmRzOworICAgIGZvciAo
YXV0byYga2V5VmFsdWUgOiByZXN1bHQucmVjb3JkcykgeworICAgICAgICBhdXRvJiByZWNvcmRW
ZWN0b3IgPSBrZXlWYWx1ZS52YWx1ZTsKKyAgICAgICAgZm9yIChzaXplX3QgY3B0ciA9IDA7IGNw
dHIgPCByZWNvcmRWZWN0b3Iuc2l6ZSgpOyBjcHRyKyspCisgICAgICAgICAgICByZWNvcmRWZWN0
b3JbY3B0cl0gPSBpc29sYXRlZENvcHkocmVjb3JkVmVjdG9yW2NwdHJdKTsKKworICAgICAgICBp
c29sYXRlZFJlY29yZHMuc2V0KGtleVZhbHVlLmtleS5pc29sYXRlZENvcHkoKSwgV1RGTW92ZShy
ZWNvcmRWZWN0b3IpKTsKKyAgICB9CisKKyAgICAvLyBObyBuZWVkIHRvIGlzb2xhdGUga2V5cyBz
aW5jZSB0aGV5IGFyZSBpc29sYXRlZCB0aHJvdWdoIHRoZSBjb3B5IGNvbnN0cnVjdG9yCisgICAg
cmV0dXJuIFRyYXZlcnNhbFJlc3VsdCB7IHJlc3VsdC5jYWNoZUlkZW50aWZpZXIsIFdURk1vdmUo
aXNvbGF0ZWRSZWNvcmRzKSwgV1RGTW92ZShyZXN1bHQuZmFpbGVkUmVjb3JkcykgfTsKK30KKwog
dm9pZCBDYWNoZTo6b3BlbihDb21wbGV0aW9uQ2FsbGJhY2smJiBjYWxsYmFjaykKIHsKICAgICBp
ZiAobV9zdGF0ZSA9PSBTdGF0ZTo6T3BlbikgewpAQCAtMTM0LDE4ICsxNzIsNTQgQEAgdm9pZCBD
YWNoZTo6b3BlbihDb21wbGV0aW9uQ2FsbGJhY2smJiBjYWxsYmFjaykKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICBtX3N0YXRlID0gU3RhdGU6Ok9wZW5pbmc7Ci0gICAgcmVhZFJlY29yZHNM
aXN0KFtjYWNoZXMgPSBtYWtlUmVmKG1fY2FjaGVzKSwgaWRlbnRpZmllciA9IG1faWRlbnRpZmll
ciwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oc3RkOjpvcHRpb25hbDxFcnJvcj4mJiBl
cnJvcikgbXV0YWJsZSB7Ci0gICAgICAgIGF1dG8qIGNhY2hlID0gY2FjaGVzLT5maW5kKGlkZW50
aWZpZXIpOwotICAgICAgICBpZiAoIWNhY2hlKSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhFcnJv
cjo6SW50ZXJuYWwpOworICAgIFRyYXZlcnNhbFJlc3VsdCB0cmF2ZXJzYWxSZXN1bHQgeyBtX2lk
ZW50aWZpZXIsIHsgfSwgeyB9IH07CisgICAgbV9jYWNoZXMucmVhZFJlY29yZHNMaXN0KCp0aGlz
LCBbY2FjaGVzID0gbWFrZVJlZihtX2NhY2hlcyksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFj
ayksIHRyYXZlcnNhbFJlc3VsdCA9IFdURk1vdmUodHJhdmVyc2FsUmVzdWx0KV0oY29uc3QgYXV0
byogc3RvcmFnZVJlY29yZCwgY29uc3QgYXV0byYpIG11dGFibGUgeworICAgICAgICBpZiAoIXN0
b3JhZ2VSZWNvcmQpIHsKKyAgICAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbY2Fj
aGVzID0gV1RGTW92ZShjYWNoZXMpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCB0cmF2
ZXJzYWxSZXN1bHQgPSBpc29sYXRlZENvcHkoV1RGTW92ZSh0cmF2ZXJzYWxSZXN1bHQpKSBdKCkg
bXV0YWJsZSB7CisgICAgICAgICAgICAgICAgZm9yIChhdXRvJiBrZXkgOiB0cmF2ZXJzYWxSZXN1
bHQuZmFpbGVkUmVjb3JkcykKKyAgICAgICAgICAgICAgICAgICAgY2FjaGVzLT5yZW1vdmVSZWNv
cmQoa2V5KTsKKworICAgICAgICAgICAgICAgIGF1dG8qIGNhY2hlID0gY2FjaGVzLT5maW5kKHRy
YXZlcnNhbFJlc3VsdC5jYWNoZUlkZW50aWZpZXIpOworICAgICAgICAgICAgICAgIGlmICghY2Fj
aGUpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soRXJyb3I6OkludGVybmFsKTsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBjYWNoZS0+bV9yZWNvcmRzID0gV1RGTW92ZSh0cmF2ZXJzYWxSZXN1bHQucmVjb3Jkcyk7
CisgICAgICAgICAgICAgICAgY2FjaGUtPmZpbmlzaE9wZW5pbmcoV1RGTW92ZShjYWxsYmFjayks
IHN0ZDo6bnVsbG9wdCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIGF1dG8gZGVjb2RlZCA9IGRlY29kZVJlY29yZEhlYWRlcigqc3Rv
cmFnZVJlY29yZCk7CisgICAgICAgIGlmICghZGVjb2RlZCkgeworICAgICAgICAgICAgdHJhdmVy
c2FsUmVzdWx0LmZhaWxlZFJlY29yZHMuYXBwZW5kKHN0b3JhZ2VSZWNvcmQtPmtleSk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgY2FjaGUtPmZpbmlzaE9wZW5pbmco
V1RGTW92ZShjYWxsYmFjayksIFdURk1vdmUoZXJyb3IpKTsKKworICAgICAgICBhdXRvJiByZWNv
cmQgPSBkZWNvZGVkLT5maXJzdDsKKyAgICAgICAgYXV0byBpbnNlcnRpb25UaW1lID0gZGVjb2Rl
ZC0+c2Vjb25kOworCisgICAgICAgIFJlY29yZEluZm9ybWF0aW9uIHJlY29yZEluZm9ybWF0aW9u
IHsgc3RvcmFnZVJlY29yZC0+a2V5LCBpbnNlcnRpb25UaW1lLCAwLCAwLCByZWNvcmQucmVxdWVz
dC51cmwoKSwgZmFsc2UsIHsgfSB9OworICAgICAgICB1cGRhdGVWYXJ5SW5mb3JtYXRpb24ocmVj
b3JkSW5mb3JtYXRpb24sIHJlY29yZC5yZXF1ZXN0LCByZWNvcmQucmVzcG9uc2UpOworCisgICAg
ICAgIGF1dG8mIHNhbWVVUkxSZWNvcmRzID0gdHJhdmVyc2FsUmVzdWx0LnJlY29yZHMuZW5zdXJl
KGNvbXB1dGVLZXlVUkwocmVjb3JkSW5mb3JtYXRpb24udXJsKSwgW10geyByZXR1cm4gVmVjdG9y
PFJlY29yZEluZm9ybWF0aW9uPiB7IH07IH0pLml0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgc2Ft
ZVVSTFJlY29yZHMuYXBwZW5kKFdURk1vdmUocmVjb3JkSW5mb3JtYXRpb24pKTsKICAgICB9KTsK
IH0KIAogdm9pZCBDYWNoZTo6ZmluaXNoT3BlbmluZyhDb21wbGV0aW9uQ2FsbGJhY2smJiBjYWxs
YmFjaywgc3RkOjpvcHRpb25hbDxFcnJvcj4mJiBlcnJvcikKIHsKKyAgICBWZWN0b3I8c3RkOjpy
ZWZlcmVuY2Vfd3JhcHBlcjxSZWNvcmRJbmZvcm1hdGlvbj4+IHJlY29yZHM7CisgICAgZm9yIChh
dXRvJiB2YWx1ZSA6IG1fcmVjb3Jkcy52YWx1ZXMoKSkgeworICAgICAgICBmb3IgKGF1dG8mIHJl
Y29yZCA6IHZhbHVlKQorICAgICAgICAgICAgcmVjb3Jkcy5hcHBlbmQocmVjb3JkKTsKKyAgICB9
CisgICAgc3RkOjpzb3J0KHJlY29yZHMuYmVnaW4oKSwgcmVjb3Jkcy5lbmQoKSwgWyZdKGNvbnN0
IGF1dG8mIGEsIGNvbnN0IGF1dG8mIGIpIHsKKyAgICAgICAgcmV0dXJuIGEuZ2V0KCkuaW5zZXJ0
aW9uVGltZSA8IGIuZ2V0KCkuaW5zZXJ0aW9uVGltZTsKKyAgICB9KTsKKyAgICBmb3IgKGF1dG8m
IHJlY29yZCA6IHJlY29yZHMpCisgICAgICAgIHJlY29yZC5nZXQoKS5pZGVudGlmaWVyID0gKytt
X25leHRSZWNvcmRJZGVudGlmaWVyOworCiAgICAgaWYgKGVycm9yKSB7CiAgICAgICAgIG1fc3Rh
dGUgPSBTdGF0ZTo6VW5pbml0aWFsaXplZDsKICAgICAgICAgY2FsbGJhY2soZXJyb3IudmFsdWUo
KSk7CkBAIC0xNjIsNTIgKzIzNiw5NCBAQCB2b2lkIENhY2hlOjpmaW5pc2hPcGVuaW5nKENvbXBs
ZXRpb25DYWxsYmFjayYmIGNhbGxiYWNrLCBzdGQ6Om9wdGlvbmFsPEVycm9yPiYmCiAgICAgICAg
IGNhbGxiYWNrKHN0ZDo6bnVsbG9wdCk7CiB9CiAKLVZlY3RvcjxSZWNvcmQ+IENhY2hlOjpyZXRy
aWV2ZVJlY29yZHMoY29uc3QgVVJMJiB1cmwpIGNvbnN0CitjbGFzcyBSZWFkUmVjb3JkVGFza0Nv
dW50ZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxSZWFkUmVjb3JkVGFza0NvdW50ZXI+IHsKK3B1Ymxp
YzoKKyAgICB1c2luZyBSZWFkUmVjb3Jkc0NhbGxiYWNrID0gV1RGOjpGdW5jdGlvbjx2b2lkKFZl
Y3RvcjxSZWNvcmQ+JiYsIFZlY3Rvcjx1aW50NjRfdD4mJik+OworICAgIHN0YXRpYyBSZWY8UmVh
ZFJlY29yZFRhc2tDb3VudGVyPiBjcmVhdGUoUmVhZFJlY29yZHNDYWxsYmFjayYmIGNhbGxiYWNr
KSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFJlYWRSZWNvcmRUYXNrQ291bnRlcihXVEZNb3ZlKGNh
bGxiYWNrKSkpOyB9CisKKyAgICB+UmVhZFJlY29yZFRhc2tDb3VudGVyKCkKKyAgICB7CisgICAg
ICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisgICAgICAgIGlmICghbV9jYWxsYmFjaykK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgc3RkOjpzb3J0KG1fcmVjb3Jkcy5iZWdpbigp
LCBtX3JlY29yZHMuZW5kKCksIFsmXSAoY29uc3QgYXV0byYgYSwgY29uc3QgYXV0byYgYikgewor
ICAgICAgICAgICAgcmV0dXJuIGEuaWRlbnRpZmllciA8IGIuaWRlbnRpZmllcjsKKyAgICAgICAg
fSk7CisgICAgICAgIG1fY2FsbGJhY2soV1RGTW92ZShtX3JlY29yZHMpLCBXVEZNb3ZlKG1fZmFp
bGVkUmVjb3JkcykpOworICAgIH0KKworICAgIHZvaWQgYXBwZW5kUmVjb3JkKEV4cGVjdGVkPFJl
Y29yZCwgRXJyb3I+JiYgcmVzdWx0LCB1aW50NjRfdCByZWNvcmRJZGVudGlmaWVyLCB1aW50NjRf
dCB1cGRhdGVDb3VudGVyKQorICAgIHsKKyAgICAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigp
KTsKKyAgICAgICAgaWYgKCFyZXN1bHQuaGFzVmFsdWUoKSkgeworICAgICAgICAgICAgbV9mYWls
ZWRSZWNvcmRzLmFwcGVuZChyZWNvcmRJZGVudGlmaWVyKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICByZXN1bHQudmFsdWUoKS5pZGVudGlmaWVyID0gcmVjb3JkSWRl
bnRpZmllcjsKKyAgICAgICAgcmVzdWx0LnZhbHVlKCkudXBkYXRlUmVzcG9uc2VDb3VudGVyID0g
dXBkYXRlQ291bnRlcjsKKyAgICAgICAgbV9yZWNvcmRzLmFwcGVuZChXVEZNb3ZlKHJlc3VsdC52
YWx1ZSgpKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIGV4cGxpY2l0IFJlYWRSZWNvcmRUYXNr
Q291bnRlcihSZWFkUmVjb3Jkc0NhbGxiYWNrJiYgY2FsbGJhY2spCisgICAgICAgIDogbV9jYWxs
YmFjayhXVEZNb3ZlKGNhbGxiYWNrKSkKKyAgICB7CisgICAgfQorCisgICAgUmVhZFJlY29yZHND
YWxsYmFjayBtX2NhbGxiYWNrOworICAgIFZlY3RvcjxSZWNvcmQ+IG1fcmVjb3JkczsKKyAgICBW
ZWN0b3I8dWludDY0X3Q+IG1fZmFpbGVkUmVjb3JkczsKK307CisKK3ZvaWQgQ2FjaGU6OnJldHJp
ZXZlUmVjb3JkKGNvbnN0IFJlY29yZEluZm9ybWF0aW9uJiByZWNvcmQsIFJlZjxSZWFkUmVjb3Jk
VGFza0NvdW50ZXI+JiYgdGFza0NvdW50ZXIpCiB7CisgICAgcmVhZFJlY29yZEZyb21EaXNrKHJl
Y29yZCwgW2NhY2hlcyA9IG1ha2VSZWYobV9jYWNoZXMpLCBpZGVudGlmaWVyID0gbV9pZGVudGlm
aWVyLCByZWNvcmRJZGVudGlmaWVyID0gcmVjb3JkLmlkZW50aWZpZXIsIHVwZGF0ZUNvdW50ZXIg
PSByZWNvcmQudXBkYXRlUmVzcG9uc2VDb3VudGVyLCB0YXNrQ291bnRlciA9IFdURk1vdmUodGFz
a0NvdW50ZXIpXShFeHBlY3RlZDxSZWNvcmQsIEVycm9yPiYmIHJlc3VsdCkgbXV0YWJsZSB7Cisg
ICAgICAgIGF1dG8qIGNhY2hlID0gY2FjaGVzLT5maW5kKGlkZW50aWZpZXIpOworICAgICAgICBp
ZiAoIWNhY2hlKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB0YXNrQ291bnRlci0+YXBw
ZW5kUmVjb3JkKFdURk1vdmUocmVzdWx0KSwgcmVjb3JkSWRlbnRpZmllciwgdXBkYXRlQ291bnRl
cik7CisgICAgfSk7Cit9CisKK3ZvaWQgQ2FjaGU6OnJldHJpZXZlUmVjb3Jkcyhjb25zdCBVUkwm
IHVybCwgUmVjb3Jkc0NhbGxiYWNrJiYgY2FsbGJhY2spCit7CisgICAgQVNTRVJUKG1fc3RhdGUg
PT0gU3RhdGU6Ok9wZW4pOworCisgICAgYXV0byB0YXNrQ291bnRlciA9IFJlYWRSZWNvcmRUYXNr
Q291bnRlcjo6Y3JlYXRlKFtjYWNoZXMgPSBtYWtlUmVmKG1fY2FjaGVzKSwgaWRlbnRpZmllciA9
IG1faWRlbnRpZmllciwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oVmVjdG9yPFJlY29y
ZD4mJiByZWNvcmRzLCBWZWN0b3I8dWludDY0X3Q+JiYgZmFpbGVkUmVjb3JkSWRlbnRpZmllcnMp
IG11dGFibGUgeworICAgICAgICBhdXRvKiBjYWNoZSA9IGNhY2hlcy0+ZmluZChpZGVudGlmaWVy
KTsKKyAgICAgICAgaWYgKGNhY2hlKQorICAgICAgICAgICAgY2FjaGUtPnJlbW92ZUZyb21SZWNv
cmRMaXN0KGZhaWxlZFJlY29yZElkZW50aWZpZXJzKTsKKyAgICAgICAgY2FsbGJhY2soV1RGTW92
ZShyZWNvcmRzKSk7CisgICAgfSk7CisKICAgICBpZiAodXJsLmlzTnVsbCgpKSB7Ci0gICAgICAg
IFZlY3RvcjxSZWNvcmQ+IHJlc3VsdDsKICAgICAgICAgZm9yIChhdXRvJiByZWNvcmRzIDogbV9y
ZWNvcmRzLnZhbHVlcygpKSB7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIHJlY29yZCA6IHJlY29y
ZHMpCi0gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh0b1JlY29yZChyZWNvcmQpKTsKKyAg
ICAgICAgICAgICAgICByZXRyaWV2ZVJlY29yZChyZWNvcmQsIHRhc2tDb3VudGVyLmNvcHlSZWYo
KSk7CiAgICAgICAgIH0KLSAgICAgICAgc3RkOjpzb3J0KHJlc3VsdC5iZWdpbigpLCByZXN1bHQu
ZW5kKCksIFtdKGNvbnN0IGF1dG8mIGEsIGNvbnN0IGF1dG8mIGIpIHsKLSAgICAgICAgICAgIHJl
dHVybiBhLmlkZW50aWZpZXIgPCBiLmlkZW50aWZpZXI7Ci0gICAgICAgIH0pOwotICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgY29uc3QgYXV0byog
cmVjb3JkcyA9IHJlY29yZHNGcm9tVVJMKHVybCk7CisgICAgYXV0byogcmVjb3JkcyA9IHJlY29y
ZHNGcm9tVVJMKHVybCk7CiAgICAgaWYgKCFyZWNvcmRzKQotICAgICAgICByZXR1cm4geyB9Owor
ICAgICAgICByZXR1cm47CiAKLSAgICBWZWN0b3I8UmVjb3JkPiByZXN1bHQ7Ci0gICAgcmVzdWx0
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocmVjb3Jkcy0+c2l6ZSgpKTsKICAgICBmb3IgKGF1dG8m
IHJlY29yZCA6ICpyZWNvcmRzKQotICAgICAgICByZXN1bHQuYXBwZW5kKHRvUmVjb3JkKHJlY29y
ZCkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgU3RyaW5nIGNvbXB1
dGVLZXlVUkwoY29uc3QgVVJMJiB1cmwpCi17Ci0gICAgVVJMIGtleVVSTCA9IHVybDsKLSAgICBp
ZiAoa2V5VVJMLmhhc1F1ZXJ5KCkpCi0gICAgICAgIGtleVVSTC5zZXRRdWVyeSh7IH0pOwotICAg
IGtleVVSTC5yZW1vdmVGcmFnbWVudElkZW50aWZpZXIoKTsKLSAgICByZXR1cm4ga2V5VVJMOwor
ICAgICAgICByZXRyaWV2ZVJlY29yZChyZWNvcmQsIHRhc2tDb3VudGVyLmNvcHlSZWYoKSk7CiB9
CiAKLVJlY29yZERhdGEmIENhY2hlOjphZGRSZWNvcmQoVmVjdG9yPFJlY29yZERhdGE+KiByZWNv
cmRzLCBSZWNvcmQmJiByZWNvcmQpCitSZWNvcmRJbmZvcm1hdGlvbiYgQ2FjaGU6OmFkZFJlY29y
ZChWZWN0b3I8UmVjb3JkSW5mb3JtYXRpb24+KiByZWNvcmRzLCBjb25zdCBSZWNvcmQmIHJlY29y
ZCkKIHsKICAgICBpZiAoIXJlY29yZHMpIHsKICAgICAgICAgYXV0byBrZXkgPSBjb21wdXRlS2V5
VVJMKHJlY29yZC5yZXF1ZXN0LnVybCgpKTsKICAgICAgICAgQVNTRVJUKCFtX3JlY29yZHMuY29u
dGFpbnMoa2V5KSk7Ci0gICAgICAgIHJlY29yZHMgPSAmbV9yZWNvcmRzLnNldChrZXksIFZlY3Rv
cjxSZWNvcmREYXRhPiB7IH0pLml0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgcmVjb3JkcyA9ICZt
X3JlY29yZHMuc2V0KGtleSwgVmVjdG9yPFJlY29yZEluZm9ybWF0aW9uPiB7IH0pLml0ZXJhdG9y
LT52YWx1ZTsKICAgICB9Ci0gICAgcmVjb3Jkcy0+YXBwZW5kKHRvUmVjb3JkRGF0YShXVEZNb3Zl
KHJlY29yZCkpKTsKKyAgICByZWNvcmRzLT5hcHBlbmQodG9SZWNvcmRJbmZvcm1hdGlvbihyZWNv
cmQpKTsKICAgICByZXR1cm4gcmVjb3Jkcy0+bGFzdCgpOwogfQogCi1WZWN0b3I8UmVjb3JkRGF0
YT4qIENhY2hlOjpyZWNvcmRzRnJvbVVSTChjb25zdCBVUkwmIHVybCkKK1ZlY3RvcjxSZWNvcmRJ
bmZvcm1hdGlvbj4qIENhY2hlOjpyZWNvcmRzRnJvbVVSTChjb25zdCBVUkwmIHVybCkKIHsKICAg
ICBhdXRvIGl0ZXJhdG9yID0gbV9yZWNvcmRzLmZpbmQoY29tcHV0ZUtleVVSTCh1cmwpKTsKICAg
ICBpZiAoaXRlcmF0b3IgPT0gbV9yZWNvcmRzLmVuZCgpKQpAQCAtMjE1LDcgKzMzMSw3IEBAIFZl
Y3RvcjxSZWNvcmREYXRhPiogQ2FjaGU6OnJlY29yZHNGcm9tVVJMKGNvbnN0IFVSTCYgdXJsKQog
ICAgIHJldHVybiAmaXRlcmF0b3ItPnZhbHVlOwogfQogCi1jb25zdCBWZWN0b3I8UmVjb3JkRGF0
YT4qIENhY2hlOjpyZWNvcmRzRnJvbVVSTChjb25zdCBVUkwmIHVybCkgY29uc3QKK2NvbnN0IFZl
Y3RvcjxSZWNvcmRJbmZvcm1hdGlvbj4qIENhY2hlOjpyZWNvcmRzRnJvbVVSTChjb25zdCBVUkwm
IHVybCkgY29uc3QKIHsKICAgICBhdXRvIGl0ZXJhdG9yID0gbV9yZWNvcmRzLmZpbmQoY29tcHV0
ZUtleVVSTCh1cmwpKTsKICAgICBpZiAoaXRlcmF0b3IgPT0gbV9yZWNvcmRzLmVuZCgpKQpAQCAt
MjIzLDU4ICszMzksODAgQEAgY29uc3QgVmVjdG9yPFJlY29yZERhdGE+KiBDYWNoZTo6cmVjb3Jk
c0Zyb21VUkwoY29uc3QgVVJMJiB1cmwpIGNvbnN0CiAgICAgcmV0dXJuICZpdGVyYXRvci0+dmFs
dWU7CiB9CiAKK2NsYXNzIEFzeW5jaHJvbm91c1B1dFRhc2tDb3VudGVyIDogcHVibGljIFJlZkNv
dW50ZWQ8QXN5bmNocm9ub3VzUHV0VGFza0NvdW50ZXI+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UmVmPEFzeW5jaHJvbm91c1B1dFRhc2tDb3VudGVyPiBjcmVhdGUoUmVjb3JkSWRlbnRpZmllcnND
YWxsYmFjayYmIGNhbGxiYWNrKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IEFzeW5jaHJvbm91c1B1
dFRhc2tDb3VudGVyKFdURk1vdmUoY2FsbGJhY2spKSk7IH0KKyAgICB+QXN5bmNocm9ub3VzUHV0
VGFza0NvdW50ZXIoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsK
KyAgICAgICAgaWYgKCFtX2NhbGxiYWNrKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBp
ZiAobV9lcnJvcikgeworICAgICAgICAgICAgbV9jYWxsYmFjayhtYWtlVW5leHBlY3RlZChtX2Vy
cm9yLnZhbHVlKCkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBt
X2NhbGxiYWNrKFdURk1vdmUobV9yZWNvcmRJZGVudGlmaWVycykpOworICAgIH0KKworICAgIHZv
aWQgc2V0RXJyb3IoRXJyb3IgZXJyb3IpCisgICAgeworICAgICAgICBBU1NFUlQoUnVuTG9vcDo6
aXNNYWluKCkpOworICAgICAgICBpZiAobV9lcnJvcikKKyAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICBtX2Vycm9yID0gZXJyb3I7CisgICAgfQorCisgICAgdm9pZCBhZGRSZWNvcmRJZGVu
dGlmaWVyKHVpbnQ2NF90IGlkZW50aWZpZXIpCisgICAgeworICAgICAgICBtX3JlY29yZElkZW50
aWZpZXJzLmFwcGVuZChpZGVudGlmaWVyKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgZXhwbGlj
aXQgQXN5bmNocm9ub3VzUHV0VGFza0NvdW50ZXIoUmVjb3JkSWRlbnRpZmllcnNDYWxsYmFjayYm
IGNhbGxiYWNrKQorICAgICAgICA6IG1fY2FsbGJhY2soV1RGTW92ZShjYWxsYmFjaykpCisgICAg
eworICAgIH0KKworICAgIHN0ZDo6b3B0aW9uYWw8RXJyb3I+IG1fZXJyb3I7CisgICAgUmVjb3Jk
SWRlbnRpZmllcnNDYWxsYmFjayBtX2NhbGxiYWNrOworICAgIFZlY3Rvcjx1aW50NjRfdD4gbV9y
ZWNvcmRJZGVudGlmaWVyczsKK307CisKIHZvaWQgQ2FjaGU6OnB1dChWZWN0b3I8UmVjb3JkPiYm
IHJlY29yZHMsIFJlY29yZElkZW50aWZpZXJzQ2FsbGJhY2smJiBjYWxsYmFjaykKIHsKLSAgICBi
b29sIHNob3VsZFdyaXRlUmVjb3JkTGlzdCB7IGZhbHNlIH07CisgICAgQVNTRVJUKG1fc3RhdGUg
PT0gU3RhdGU6Ok9wZW4pOworCisgICAgYXV0byB0YXNrQ291bnRlciA9IEFzeW5jaHJvbm91c1B1
dFRhc2tDb3VudGVyOjpjcmVhdGUoV1RGTW92ZShjYWxsYmFjaykpOworCiAgICAgV2ViQ29yZTo6
Q2FjaGVRdWVyeU9wdGlvbnMgb3B0aW9uczsKLSAgICBWZWN0b3I8dWludDY0X3Q+IHJlY29yZElk
ZW50aWZpZXJzOwotICAgIHJlY29yZElkZW50aWZpZXJzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
cmVjb3Jkcy5zaXplKCkpOwogICAgIGZvciAoYXV0byYgcmVjb3JkIDogcmVjb3JkcykgewogICAg
ICAgICBhdXRvKiBzYW1lVVJMUmVjb3JkcyA9IHJlY29yZHNGcm9tVVJMKHJlY29yZC5yZXF1ZXN0
LnVybCgpKTsKIAogICAgICAgICBhdXRvIG1hdGNoaW5nUmVjb3JkcyA9IHF1ZXJ5Q2FjaGUoc2Ft
ZVVSTFJlY29yZHMsIHJlY29yZC5yZXF1ZXN0LCBvcHRpb25zKTsKICAgICAgICAgaWYgKG1hdGNo
aW5nUmVjb3Jkcy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIHJlY29yZC5pZGVudGlmaWVyID0g
KyttX25leHRSZWNvcmRJZGVudGlmaWVyOwotICAgICAgICAgICAgcmVjb3JkSWRlbnRpZmllcnMu
dW5jaGVja2VkQXBwZW5kKHJlY29yZC5pZGVudGlmaWVyKTsKKyAgICAgICAgICAgIHRhc2tDb3Vu
dGVyLT5hZGRSZWNvcmRJZGVudGlmaWVyKHJlY29yZC5pZGVudGlmaWVyKTsKIAotICAgICAgICAg
ICAgc2hvdWxkV3JpdGVSZWNvcmRMaXN0ID0gdHJ1ZTsKLSAgICAgICAgICAgIGF1dG8mIHJlY29y
ZFRvV3JpdGUgPSBhZGRSZWNvcmQoc2FtZVVSTFJlY29yZHMsIFdURk1vdmUocmVjb3JkKSk7Ci0g
ICAgICAgICAgICB3cml0ZVJlY29yZFRvRGlzayhyZWNvcmRUb1dyaXRlKTsKKyAgICAgICAgICAg
IGF1dG8mIHJlY29yZFRvV3JpdGUgPSBhZGRSZWNvcmQoc2FtZVVSTFJlY29yZHMsIHJlY29yZCk7
CisgICAgICAgICAgICB3cml0ZVJlY29yZFRvRGlzayhyZWNvcmRUb1dyaXRlLCBXVEZNb3ZlKHJl
Y29yZCksIHRhc2tDb3VudGVyLmNvcHlSZWYoKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICBhdXRvIGlkZW50aWZpZXIgPSBtYXRjaGluZ1JlY29yZHNbMF07CiAgICAgICAgICAgICBh
dXRvIHBvc2l0aW9uID0gc2FtZVVSTFJlY29yZHMtPmZpbmRNYXRjaGluZyhbJl0oY29uc3QgYXV0
byYgaXRlbSkgeyByZXR1cm4gaXRlbS5pZGVudGlmaWVyID09IGlkZW50aWZpZXI7IH0pOwogICAg
ICAgICAgICAgQVNTRVJUKHBvc2l0aW9uICE9IG5vdEZvdW5kKTsKICAgICAgICAgICAgIGlmIChw
b3NpdGlvbiAhPSBub3RGb3VuZCkgewotICAgICAgICAgICAgICAgIGF1dG8mIGV4aXN0aW5nUmVj
b3JkID0gKCpzYW1lVVJMUmVjb3JkcylbcG9zaXRpb25dOwotICAgICAgICAgICAgICAgIHJlY29y
ZElkZW50aWZpZXJzLnVuY2hlY2tlZEFwcGVuZChpZGVudGlmaWVyKTsKLSAgICAgICAgICAgICAg
ICArK2V4aXN0aW5nUmVjb3JkLnVwZGF0ZVJlc3BvbnNlQ291bnRlcjsKLQotICAgICAgICAgICAg
ICAgIC8vIEZJWE1FOiBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgZGF0YSBpcyBudWxsLgotICAgICAg
ICAgICAgICAgIEFTU0VSVChleGlzdGluZ1JlY29yZC5kYXRhKTsKLSAgICAgICAgICAgICAgICBl
eGlzdGluZ1JlY29yZC5kYXRhLT5yZXNwb25zZUhlYWRlcnNHdWFyZCA9IHJlY29yZC5yZXNwb25z
ZUhlYWRlcnNHdWFyZDsKLSAgICAgICAgICAgICAgICBleGlzdGluZ1JlY29yZC5kYXRhLT5yZXNw
b25zZSA9IFdURk1vdmUocmVjb3JkLnJlc3BvbnNlKTsKLSAgICAgICAgICAgICAgICBleGlzdGlu
Z1JlY29yZC5kYXRhLT5yZXNwb25zZUJvZHkgPSBXVEZNb3ZlKHJlY29yZC5yZXNwb25zZUJvZHkp
OwotICAgICAgICAgICAgICAgIHVwZGF0ZVZhcnlJbmZvcm1hdGlvbihleGlzdGluZ1JlY29yZCk7
Ci0gICAgICAgICAgICAgICAgd3JpdGVSZWNvcmRUb0Rpc2soZXhpc3RpbmdSZWNvcmQpOworICAg
ICAgICAgICAgICAgIGF1dG8mIGV4aXN0aW5nUmVjb3JkID0gc2FtZVVSTFJlY29yZHMtPmF0KHBv
c2l0aW9uKTsKKyAgICAgICAgICAgICAgICB0YXNrQ291bnRlci0+YWRkUmVjb3JkSWRlbnRpZmll
cihpZGVudGlmaWVyKTsKKyAgICAgICAgICAgICAgICB1cGRhdGVSZWNvcmRUb0Rpc2soZXhpc3Rp
bmdSZWNvcmQsIFdURk1vdmUocmVjb3JkKSwgdGFza0NvdW50ZXIuY29weVJlZigpKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLQotICAgIGlmICghc2hvdWxkV3JpdGVSZWNvcmRM
aXN0KSB7Ci0gICAgICAgIGNhbGxiYWNrKFdURk1vdmUocmVjb3JkSWRlbnRpZmllcnMpKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICB3cml0ZVJlY29yZHNMaXN0KFtjYWxsYmFjayA9IFdU
Rk1vdmUoY2FsbGJhY2spLCByZWNvcmRJZGVudGlmaWVycyA9IFdURk1vdmUocmVjb3JkSWRlbnRp
ZmllcnMpXShzdGQ6Om9wdGlvbmFsPEVycm9yPiYmIGVycm9yKSBtdXRhYmxlIHsKLSAgICAgICAg
aWYgKGVycm9yKSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhtYWtlVW5leHBlY3RlZChlcnJvci52
YWx1ZSgpKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgY2FsbGJh
Y2soV1RGTW92ZShyZWNvcmRJZGVudGlmaWVycykpOwotICAgIH0pOwogfQogCiB2b2lkIENhY2hl
OjpyZW1vdmUoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYgcmVxdWVzdCwgV2ViQ29yZTo6Q2Fj
aGVRdWVyeU9wdGlvbnMmJiBvcHRpb25zLCBSZWNvcmRJZGVudGlmaWVyc0NhbGxiYWNrJiYgY2Fs
bGJhY2spCiB7CisgICAgQVNTRVJUKG1fc3RhdGUgPT0gU3RhdGU6Ok9wZW4pOworCiAgICAgYXV0
byogcmVjb3JkcyA9IHJlY29yZHNGcm9tVVJMKHJlcXVlc3QudXJsKCkpOwogICAgIGF1dG8gcmVj
b3JkSWRlbnRpZmllcnMgPSBxdWVyeUNhY2hlKHJlY29yZHMsIHJlcXVlc3QsIG9wdGlvbnMpOwog
ICAgIGlmIChyZWNvcmRJZGVudGlmaWVycy5pc0VtcHR5KCkpIHsKQEAgLTI4OSwzNSArNDI3LDE1
OCBAQCB2b2lkIENhY2hlOjpyZW1vdmUoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYgcmVxdWVz
dCwgV2ViQ29yZTo6Q2FjaGVRdWVyeU9wdGlvbgogICAgICAgICByZXR1cm4gc2hvdWxkUmVtb3Zl
OwogICAgIH0pOwogCi0gICAgd3JpdGVSZWNvcmRzTGlzdChbY2FsbGJhY2sgPSBXVEZNb3ZlKGNh
bGxiYWNrKSwgcmVjb3JkSWRlbnRpZmllcnMgPSBXVEZNb3ZlKHJlY29yZElkZW50aWZpZXJzKV0o
c3RkOjpvcHRpb25hbDxFcnJvcj4mJiBlcnJvcikgbXV0YWJsZSB7Ci0gICAgICAgIGlmIChlcnJv
cikgewotICAgICAgICAgICAgY2FsbGJhY2sobWFrZVVuZXhwZWN0ZWQoZXJyb3IudmFsdWUoKSkp
OworICAgIGNhbGxiYWNrKFdURk1vdmUocmVjb3JkSWRlbnRpZmllcnMpKTsKK30KKwordm9pZCBD
YWNoZTo6cmVtb3ZlRnJvbVJlY29yZExpc3QoY29uc3QgVmVjdG9yPHVpbnQ2NF90PiYgcmVjb3Jk
SWRlbnRpZmllcnMpCit7CisgICAgaWYgKHJlY29yZElkZW50aWZpZXJzLmlzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgZm9yIChhdXRvJiByZWNvcmRzIDogbV9yZWNvcmRzLnZhbHVl
cygpKSB7CisgICAgICAgIGF1dG8qIGNhY2hlID0gdGhpczsKKyAgICAgICAgcmVjb3Jkcy5yZW1v
dmVBbGxNYXRjaGluZyhbY2FjaGUsICZyZWNvcmRJZGVudGlmaWVyc10oY29uc3QgYXV0byYgaXRl
bSkgeworICAgICAgICAgICAgcmV0dXJuIG5vdEZvdW5kICE9IHJlY29yZElkZW50aWZpZXJzLmZp
bmRNYXRjaGluZyhbY2FjaGUsICZpdGVtXShjb25zdCBhdXRvJiBpZGVudGlmaWVyKSB7CisgICAg
ICAgICAgICAgICAgaWYgKGl0ZW0uaWRlbnRpZmllciAhPSBpZGVudGlmaWVyKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgY2FjaGUtPnJlbW92ZVJl
Y29yZEZyb21EaXNrKGl0ZW0pOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0KK30KKwordm9pZCBDYWNoZTo6d3JpdGVSZWNv
cmRUb0Rpc2soY29uc3QgUmVjb3JkSW5mb3JtYXRpb24mIHJlY29yZEluZm9ybWF0aW9uLCBSZWNv
cmQmJiByZWNvcmQsIFJlZjxBc3luY2hyb25vdXNQdXRUYXNrQ291bnRlcj4mJiB0YXNrQ291bnRl
cikKK3sKKyAgICBtX2NhY2hlcy53cml0ZVJlY29yZCgqdGhpcywgcmVjb3JkSW5mb3JtYXRpb24s
IFdURk1vdmUocmVjb3JkKSwgW3Rhc2tDb3VudGVyID0gV1RGTW92ZSh0YXNrQ291bnRlcildKHN0
ZDo6b3B0aW9uYWw8RXJyb3I+JiYgZXJyb3IpIHsKKyAgICAgICAgaWYgKGVycm9yKQorICAgICAg
ICAgICAgdGFza0NvdW50ZXItPnNldEVycm9yKGVycm9yLnZhbHVlKCkpOworICAgIH0pOworfQor
Cit2b2lkIENhY2hlOjp1cGRhdGVSZWNvcmRUb0Rpc2soUmVjb3JkSW5mb3JtYXRpb24mIGV4aXN0
aW5nUmVjb3JkLCBSZWNvcmQmJiByZWNvcmQsIFJlZjxBc3luY2hyb25vdXNQdXRUYXNrQ291bnRl
cj4mJiB0YXNrQ291bnRlcikKK3sKKyAgICArK2V4aXN0aW5nUmVjb3JkLnVwZGF0ZVJlc3BvbnNl
Q291bnRlcjsKKyAgICByZWFkUmVjb3JkRnJvbURpc2soZXhpc3RpbmdSZWNvcmQsIFtjYWNoZXMg
PSBtYWtlUmVmKG1fY2FjaGVzKSwgaWRlbnRpZmllciA9IG1faWRlbnRpZmllciwgcmVjb3JkSWRl
bnRpZmllciA9IGV4aXN0aW5nUmVjb3JkLmlkZW50aWZpZXIsIHJlY29yZCA9IFdURk1vdmUocmVj
b3JkKSwgdGFza0NvdW50ZXIgPSBXVEZNb3ZlKHRhc2tDb3VudGVyKV0oRXhwZWN0ZWQ8UmVjb3Jk
LCBFcnJvcj4mJiByZXN1bHQpIG11dGFibGUgeworICAgICAgICBpZiAoIXJlc3VsdC5oYXNWYWx1
ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGNhbGxiYWNrKFdU
Rk1vdmUocmVjb3JkSWRlbnRpZmllcnMpKTsKKworICAgICAgICBhdXRvKiBjYWNoZSA9IGNhY2hl
cy0+ZmluZChpZGVudGlmaWVyKTsKKyAgICAgICAgaWYgKCFjYWNoZSkKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICBhdXRvKiBzYW1lVVJMUmVjb3JkcyA9IGNhY2hlLT5yZWNvcmRzRnJv
bVVSTChyZXN1bHQudmFsdWUoKS5yZXF1ZXN0LnVybCgpKTsKKyAgICAgICAgaWYgKCFzYW1lVVJM
UmVjb3JkcykKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBhdXRvIHBvc2l0aW9uID0g
c2FtZVVSTFJlY29yZHMtPmZpbmRNYXRjaGluZyhbJl0gKGNvbnN0IGF1dG8mIGl0ZW0pIHsgcmV0
dXJuIGl0ZW0uaWRlbnRpZmllciA9PSByZWNvcmRJZGVudGlmaWVyOyB9KTsKKyAgICAgICAgaWYg
KHBvc2l0aW9uID09IG5vdEZvdW5kKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBhdXRv
JiByZWNvcmRJbmZvID0gc2FtZVVSTFJlY29yZHMtPmF0KHBvc2l0aW9uKTsKKworICAgICAgICBh
dXRvJiByZWNvcmRGcm9tRGlzayA9IHJlc3VsdC52YWx1ZSgpOworICAgICAgICByZWNvcmQucmVx
dWVzdEhlYWRlcnNHdWFyZCA9IHJlY29yZEZyb21EaXNrLnJlcXVlc3RIZWFkZXJzR3VhcmQ7Cisg
ICAgICAgIHJlY29yZC5yZXF1ZXN0ID0gV1RGTW92ZShyZWNvcmRGcm9tRGlzay5yZXF1ZXN0KTsK
KyAgICAgICAgcmVjb3JkLm9wdGlvbnMgPSBXVEZNb3ZlKHJlY29yZEZyb21EaXNrLm9wdGlvbnMp
OworICAgICAgICByZWNvcmQucmVmZXJyZXIgPSBXVEZNb3ZlKHJlY29yZEZyb21EaXNrLnJlZmVy
cmVyKTsKKworICAgICAgICB1cGRhdGVWYXJ5SW5mb3JtYXRpb24ocmVjb3JkSW5mbywgcmVjb3Jk
LnJlcXVlc3QsIHJlY29yZC5yZXNwb25zZSk7CisKKyAgICAgICAgY2FjaGUtPndyaXRlUmVjb3Jk
VG9EaXNrKHJlY29yZEluZm8sIFdURk1vdmUocmVjb3JkKSwgV1RGTW92ZSh0YXNrQ291bnRlcikp
OwogICAgIH0pOwogfQogCi12b2lkIENhY2hlOjpyZWFkUmVjb3Jkc0xpc3QoQ29tcGxldGlvbkNh
bGxiYWNrJiYgY2FsbGJhY2spCit2b2lkIENhY2hlOjpyZWFkUmVjb3JkRnJvbURpc2soY29uc3Qg
UmVjb3JkSW5mb3JtYXRpb24mIHJlY29yZCwgV1RGOjpGdW5jdGlvbjx2b2lkKEV4cGVjdGVkPFJl
Y29yZCwgRXJyb3I+JiYpPiYmIGNhbGxiYWNrKQogewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQg
dGhpcy4KLSAgICBjYWxsYmFjayhzdGQ6Om51bGxvcHQpOworICAgIG1fY2FjaGVzLnJlYWRSZWNv
cmQocmVjb3JkLmtleSwgV1RGTW92ZShjYWxsYmFjaykpOwogfQogCi12b2lkIENhY2hlOjp3cml0
ZVJlY29yZHNMaXN0KENvbXBsZXRpb25DYWxsYmFjayYmIGNhbGxiYWNrKQordm9pZCBDYWNoZTo6
cmVtb3ZlUmVjb3JkRnJvbURpc2soY29uc3QgUmVjb3JkSW5mb3JtYXRpb24mIHJlY29yZCkKIHsK
LSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCi0gICAgY2FsbGJhY2soc3RkOjpudWxsb3B0
KTsKKyAgICBtX2NhY2hlcy5yZW1vdmVSZWNvcmQocmVjb3JkLmtleSk7Cit9CisKK1N0b3JhZ2U6
OlJlY29yZCBDYWNoZTo6ZW5jb2RlKGNvbnN0IFJlY29yZEluZm9ybWF0aW9uJiByZWNvcmRJbmZv
cm1hdGlvbiwgY29uc3QgUmVjb3JkJiByZWNvcmQpCit7CisgICAgV1RGOjpQZXJzaXN0ZW5jZTo6
RW5jb2RlciBlbmNvZGVyOworICAgIGVuY29kZXIgPDwgcmVjb3JkSW5mb3JtYXRpb24uaW5zZXJ0
aW9uVGltZTsKKyAgICBlbmNvZGVyIDw8IHJlY29yZC5yZXF1ZXN0SGVhZGVyc0d1YXJkOworICAg
IHJlY29yZC5yZXF1ZXN0LmVuY29kZVdpdGhvdXRQbGF0Zm9ybURhdGEoZW5jb2Rlcik7CisgICAg
ZW5jb2RlciA8PCByZWNvcmQub3B0aW9uczsKKyAgICBlbmNvZGVyIDw8IHJlY29yZC5yZWZlcnJl
cjsKKworICAgIGVuY29kZXIgPDwgcmVjb3JkLnJlc3BvbnNlSGVhZGVyc0d1YXJkOworICAgIGVu
Y29kZXIgPDwgcmVjb3JkLnJlc3BvbnNlOworCisgICAgZW5jb2Rlci5lbmNvZGVDaGVja3N1bSgp
OworCisgICAgRGF0YSBoZWFkZXIoZW5jb2Rlci5idWZmZXIoKSwgZW5jb2Rlci5idWZmZXJTaXpl
KCkpOworICAgIERhdGEgYm9keTsKKyAgICBXVEY6OnN3aXRjaE9uKHJlY29yZC5yZXNwb25zZUJv
ZHksIFtdKGNvbnN0IFJlZjxXZWJDb3JlOjpGb3JtRGF0YT4mIGZvcm1EYXRhKSB7CisgICAgICAg
IC8vIEZJWE1FOiBTdG9yZSBmb3JtIGRhdGEgYm9keS4KKyAgICB9LCBbJl0oY29uc3QgUmVmPFdl
YkNvcmU6OlNoYXJlZEJ1ZmZlcj4mIGJ1ZmZlcikgeworICAgICAgICBib2R5ID0geyByZWludGVy
cHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihidWZmZXItPmRhdGEoKSksIGJ1ZmZlci0+c2l6ZSgp
IH07CisgICAgfSwgW10oY29uc3Qgc3RkOjpudWxscHRyX3QmKSB7CisgICAgfSk7CisKKyAgICBy
ZXR1cm4geyByZWNvcmRJbmZvcm1hdGlvbi5rZXksIHsgfSwgaGVhZGVyLCBib2R5LCB7IH0gfTsK
K30KKworc3RhdGljIGlubGluZSBzdGQ6Om9wdGlvbmFsPHN0ZDo6cGFpcjxSZWNvcmQsIGRvdWJs
ZT4+IGRlY29kZVJlY29yZEhlYWRlcihjb25zdCBTdG9yYWdlOjpSZWNvcmQmIHN0b3JhZ2UpCit7
CisgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKHN0b3JhZ2UuaGVhZGVyLmRh
dGEoKSwgc3RvcmFnZS5oZWFkZXIuc2l6ZSgpKTsKKworICAgIFJlY29yZCByZWNvcmQ7CisKKyAg
ICBkb3VibGUgaW5zZXJ0aW9uVGltZTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGluc2VydGlv
blRpbWUpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgaWYgKCFkZWNvZGVy
LmRlY29kZShyZWNvcmQucmVxdWVzdEhlYWRlcnNHdWFyZCkpCisgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CisKKyAgICBpZiAoIXJlY29yZC5yZXF1ZXN0LmRlY29kZVdpdGhvdXRQbGF0Zm9y
bURhdGEoZGVjb2RlcikpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHJlY29yZC5vcHRpb25zKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVjb3JkLnJlZmVycmVyKSkKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVjb3Jk
LnJlc3BvbnNlSGVhZGVyc0d1YXJkKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKwor
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVjb3JkLnJlc3BvbnNlKSkKKyAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKworICAgIGlmICghZGVjb2Rlci52ZXJpZnlDaGVja3N1bSgpKQorICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKFdU
Rk1vdmUocmVjb3JkKSwgaW5zZXJ0aW9uVGltZSk7CiB9CiAKLXZvaWQgQ2FjaGU6OndyaXRlUmVj
b3JkVG9EaXNrKFJlY29yZERhdGEmKQorc3RkOjpvcHRpb25hbDxSZWNvcmQ+IENhY2hlOjpkZWNv
ZGUoY29uc3QgU3RvcmFnZTo6UmVjb3JkJiBzdG9yYWdlKQogewotICAgIC8vIEZJWE1FOiBJbXBs
ZW1lbnQgdGhpcy4KKyAgICBhdXRvIHJlc3VsdCA9IGRlY29kZVJlY29yZEhlYWRlcihzdG9yYWdl
KTsKKworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisg
ICAgYXV0byByZWNvcmQgPSBXVEZNb3ZlKHJlc3VsdC0+Zmlyc3QpOworICAgIHJlY29yZC5yZXNw
b25zZUJvZHkgPSBXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmNyZWF0ZShzdG9yYWdlLmJvZHkuZGF0
YSgpLCBzdG9yYWdlLmJvZHkuc2l6ZSgpKTsKKworICAgIHJldHVybiBXVEZNb3ZlKHJlY29yZCk7
CiB9CiAKLXZvaWQgQ2FjaGU6OnJlbW92ZVJlY29yZEZyb21EaXNrKFJlY29yZERhdGEmKQorVmVj
dG9yPEtleT4gQ2FjaGU6OmtleXMoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQg
dGhpcy4KKyAgICBWZWN0b3I8S2V5PiBrZXlzOworICAgIGZvciAoYXV0byYgcmVjb3JkcyA6IG1f
cmVjb3Jkcy52YWx1ZXMoKSkgeworICAgICAgICBmb3IgKGF1dG8mIHJlY29yZCA6IHJlY29yZHMp
CisgICAgICAgICAgICBrZXlzLmFwcGVuZChyZWNvcmQua2V5KTsKKyAgICB9CisgICAgcmV0dXJu
IGtleXM7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIENhY2hlU3RvcmFnZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZS5o
IGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVD
YWNoZS5oCmluZGV4IGM5ZjBkODBlNTRiNzZlMjA0MmUxM2M5ZTQwNWM5ZDU1MjczZDEyNjUuLmNk
YzQ4MTc0OWFhOGY3OWU1M2I1MDBhODU2MWEzNGQ1OGE0ODgxM2IgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2lu
ZUNhY2hlLmgKQEAgLTI1LDcgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJO
ZXR3b3JrQ2FjaGVLZXkuaCIKKyNpbmNsdWRlICJOZXR3b3JrQ2FjaGVTdG9yYWdlLmgiCiAjaW5j
bHVkZSA8V2ViQ29yZS9ET01DYWNoZUVuZ2luZS5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTM2LDcgKzM2LDcgQEAgbmFtZXNw
YWNlIENhY2hlU3RvcmFnZSB7CiAKIGNsYXNzIENhY2hlczsKIAotc3RydWN0IFJlY29yZERhdGEg
eworc3RydWN0IFJlY29yZEluZm9ybWF0aW9uIHsKICAgICBOZXR3b3JrQ2FjaGU6OktleSBrZXk7
CiAgICAgZG91YmxlIGluc2VydGlvblRpbWUgeyAwIH07CiAKQEAgLTQ2LDU4ICs0Niw2MSBAQCBz
dHJ1Y3QgUmVjb3JkRGF0YSB7CiAgICAgV2ViQ29yZTo6VVJMIHVybDsKICAgICBib29sIGhhc1Zh
cnlTdGFyIHsgZmFsc2UgfTsKICAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiB2YXJ5SGVhZGVy
czsKLQotICAgIHN0cnVjdCBEYXRhIHsKLSAgICAgICAgV2ViQ29yZTo6RmV0Y2hIZWFkZXJzOjpH
dWFyZCByZXF1ZXN0SGVhZGVyc0d1YXJkOwotICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QgcmVxdWVzdDsKLSAgICAgICAgV2ViQ29yZTo6RmV0Y2hPcHRpb25zIG9wdGlvbnM7Ci0gICAg
ICAgIFN0cmluZyByZWZlcnJlcjsKLQotICAgICAgICBXZWJDb3JlOjpGZXRjaEhlYWRlcnM6Okd1
YXJkIHJlc3BvbnNlSGVhZGVyc0d1YXJkOwotICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3Bv
bnNlIHJlc3BvbnNlOwotICAgICAgICBXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6UmVzcG9uc2VC
b2R5IHJlc3BvbnNlQm9keTsKLSAgICB9OwotCi0gICAgc3RkOjpvcHRpb25hbDxEYXRhPiBkYXRh
OwogfTsKIAorY2xhc3MgQXN5bmNocm9ub3VzUHV0VGFza0NvdW50ZXI7CitjbGFzcyBSZWFkUmVj
b3JkVGFza0NvdW50ZXI7CisKIGNsYXNzIENhY2hlIHsKIHB1YmxpYzoKICAgICBlbnVtIGNsYXNz
IFN0YXRlIHsgVW5pbml0aWFsaXplZCwgT3BlbmluZywgT3BlbiB9OwotICAgIENhY2hlKENhY2hl
cyYsIHVpbnQ2NF90IGlkZW50aWZpZXIsIFN0YXRlLCBTdHJpbmcmJiBuYW1lKTsKKyAgICBDYWNo
ZShDYWNoZXMmLCB1aW50NjRfdCBpZGVudGlmaWVyLCBTdGF0ZSwgU3RyaW5nJiYgbmFtZSwgU3Ry
aW5nJiYgdW5pcXVlTmFtZSk7CiAKKyAgICBib29sIGlzT3BlbmVkKCkgY29uc3QgeyByZXR1cm4g
bV9zdGF0ZSA9PSBTdGF0ZTo6T3BlbjsgfQogICAgIHZvaWQgb3BlbihXZWJDb3JlOjpET01DYWNo
ZUVuZ2luZTo6Q29tcGxldGlvbkNhbGxiYWNrJiYpOwogCiAgICAgdWludDY0X3QgaWRlbnRpZmll
cigpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQogICAgIGNvbnN0IFN0cmluZyYgbmFt
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQorICAgIGNvbnN0IFN0cmluZyYgdW5pcXVlTmFt
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdW5pcXVlTmFtZTsgfQogICAgIGJvb2wgaXNBY3RpdmUoKSBj
b25zdCB7IHJldHVybiBtX3N0YXRlICE9IFN0YXRlOjpVbmluaXRpYWxpemVkOyB9CiAKLSAgICBW
ZWN0b3I8V2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OlJlY29yZD4gcmV0cmlldmVSZWNvcmRzKGNv
bnN0IFdlYkNvcmU6OlVSTCYpIGNvbnN0OworICAgIHZvaWQgcmV0cmlldmVSZWNvcmRzKGNvbnN0
IFdlYkNvcmU6OlVSTCYsIFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpSZWNvcmRzQ2FsbGJhY2sm
Jik7CiAgICAgV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OkNhY2hlSW5mbyBpbmZvKCkgY29uc3Qg
eyByZXR1cm4geyBtX2lkZW50aWZpZXIsIG1fbmFtZSB9OyB9CiAKICAgICB2b2lkIHB1dChWZWN0
b3I8V2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OlJlY29yZD4mJiwgV2ViQ29yZTo6RE9NQ2FjaGVF
bmdpbmU6OlJlY29yZElkZW50aWZpZXJzQ2FsbGJhY2smJik7CiAgICAgdm9pZCByZW1vdmUoV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYsIFdlYkNvcmU6OkNhY2hlUXVlcnlPcHRpb25zJiYsIFdl
YkNvcmU6OkRPTUNhY2hlRW5naW5lOjpSZWNvcmRJZGVudGlmaWVyc0NhbGxiYWNrJiYpOwogCisg
ICAgVmVjdG9yPE5ldHdvcmtDYWNoZTo6S2V5PiBrZXlzKCkgY29uc3Q7CisKICAgICB2b2lkIGRp
c3Bvc2UoKTsKICAgICB2b2lkIGNsZWFyTWVtb3J5UmVwcmVzZW50YXRpb24oKTsKLSAKKworICAg
IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpSZWNvcmQ+IGRl
Y29kZShjb25zdCBOZXR3b3JrQ2FjaGU6OlN0b3JhZ2U6OlJlY29yZCYpOworICAgIHN0YXRpYyBO
ZXR3b3JrQ2FjaGU6OlN0b3JhZ2U6OlJlY29yZCBlbmNvZGUoY29uc3QgUmVjb3JkSW5mb3JtYXRp
b24mLCBjb25zdCBXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6UmVjb3JkJik7CisKIHByaXZhdGU6
Ci0gICAgVmVjdG9yPFJlY29yZERhdGE+KiByZWNvcmRzRnJvbVVSTChjb25zdCBXZWJDb3JlOjpV
UkwmKTsKLSAgICBjb25zdCBWZWN0b3I8UmVjb3JkRGF0YT4qIHJlY29yZHNGcm9tVVJMKGNvbnN0
IFdlYkNvcmU6OlVSTCYpIGNvbnN0OwotICAgIFJlY29yZERhdGEmIGFkZFJlY29yZChWZWN0b3I8
UmVjb3JkRGF0YT4qLCBXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6UmVjb3JkJiYpOworICAgIFZl
Y3RvcjxSZWNvcmRJbmZvcm1hdGlvbj4qIHJlY29yZHNGcm9tVVJMKGNvbnN0IFdlYkNvcmU6OlVS
TCYpOworICAgIGNvbnN0IFZlY3RvcjxSZWNvcmRJbmZvcm1hdGlvbj4qIHJlY29yZHNGcm9tVVJM
KGNvbnN0IFdlYkNvcmU6OlVSTCYpIGNvbnN0OworICAgIFJlY29yZEluZm9ybWF0aW9uJiBhZGRS
ZWNvcmQoVmVjdG9yPFJlY29yZEluZm9ybWF0aW9uPiosIGNvbnN0IFdlYkNvcmU6OkRPTUNhY2hl
RW5naW5lOjpSZWNvcmQmKTsKKworICAgIFJlY29yZEluZm9ybWF0aW9uIHRvUmVjb3JkSW5mb3Jt
YXRpb24oY29uc3QgV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OlJlY29yZCYpOwogCiAgICAgdm9p
ZCBmaW5pc2hPcGVuaW5nKFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpDb21wbGV0aW9uQ2FsbGJh
Y2smJiwgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6RXJyb3I+JiYpOwor
ICAgIHZvaWQgcmV0cmlldmVSZWNvcmQoY29uc3QgUmVjb3JkSW5mb3JtYXRpb24mLCBSZWY8UmVh
ZFJlY29yZFRhc2tDb3VudGVyPiYmKTsKIAogICAgIHZvaWQgcmVhZFJlY29yZHNMaXN0KFdlYkNv
cmU6OkRPTUNhY2hlRW5naW5lOjpDb21wbGV0aW9uQ2FsbGJhY2smJik7Ci0gICAgdm9pZCB3cml0
ZVJlY29yZHNMaXN0KFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpDb21wbGV0aW9uQ2FsbGJhY2sm
Jik7Ci0gICAgdm9pZCB3cml0ZVJlY29yZFRvRGlzayhSZWNvcmREYXRhJik7Ci0gICAgdm9pZCBy
ZW1vdmVSZWNvcmRGcm9tRGlzayhSZWNvcmREYXRhJik7CisgICAgdm9pZCB3cml0ZVJlY29yZFRv
RGlzayhjb25zdCBSZWNvcmRJbmZvcm1hdGlvbiYsIFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpS
ZWNvcmQmJiwgUmVmPEFzeW5jaHJvbm91c1B1dFRhc2tDb3VudGVyPiYmKTsKKyAgICB2b2lkIHVw
ZGF0ZVJlY29yZFRvRGlzayhSZWNvcmRJbmZvcm1hdGlvbiYsIFdlYkNvcmU6OkRPTUNhY2hlRW5n
aW5lOjpSZWNvcmQmJiwgUmVmPEFzeW5jaHJvbm91c1B1dFRhc2tDb3VudGVyPiYmKTsKKyAgICB2
b2lkIHJlbW92ZVJlY29yZEZyb21EaXNrKGNvbnN0IFJlY29yZEluZm9ybWF0aW9uJik7CisgICAg
dm9pZCByZWFkUmVjb3JkRnJvbURpc2soY29uc3QgUmVjb3JkSW5mb3JtYXRpb24mLCBXVEY6OkZ1
bmN0aW9uPHZvaWQoRXhwZWN0ZWQ8V2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OlJlY29yZCwgV2Vi
Q29yZTo6RE9NQ2FjaGVFbmdpbmU6OkVycm9yPiYmKT4mJik7CisgICAgdm9pZCByZW1vdmVGcm9t
UmVjb3JkTGlzdChjb25zdCBWZWN0b3I8dWludDY0X3Q+Jik7CiAKICAgICBDYWNoZXMmIG1fY2Fj
aGVzOwogICAgIFN0YXRlIG1fc3RhdGU7CiAgICAgdWludDY0X3QgbV9pZGVudGlmaWVyIHsgMCB9
OwogICAgIFN0cmluZyBtX25hbWU7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxSZWNvcmRE
YXRhPj4gbV9yZWNvcmRzOworICAgIFN0cmluZyBtX3VuaXF1ZU5hbWU7CisgICAgSGFzaE1hcDxT
dHJpbmcsIFZlY3RvcjxSZWNvcmRJbmZvcm1hdGlvbj4+IG1fcmVjb3JkczsKICAgICB1aW50NjRf
dCBtX25leHRSZWNvcmRJZGVudGlmaWVyIHsgMCB9OwogICAgIFZlY3RvcjxXZWJDb3JlOjpET01D
YWNoZUVuZ2luZTo6Q29tcGxldGlvbkNhbGxiYWNrPiBtX3BlbmRpbmdPcGVuaW5nQ2FsbGJhY2tz
OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2Fj
aGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNwcAppbmRleCBiMzFlMjg5NzdkZWQxYzQ3
MGM2OTY5NWIwMzhjYmI0NWM0YTNmNWM3Li4yMDdiN2Q2ZmQ2YWE4MjI1MTVmYzY2NjIyOGYxOTI4
M2U0MDQzZTNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hl
L0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwCkBAIC0yNyw2ICsyNyw3
IEBACiAjaW5jbHVkZSAiQ2FjaGVTdG9yYWdlRW5naW5lLmgiCiAKICNpbmNsdWRlICJOZXR3b3Jr
Q2FjaGVDb2RlcnMuaCIKKyNpbmNsdWRlIDx3dGYvVVVJRC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU6OkRPTUNhY2hlRW5n
aW5lOwpAQCAtNTksNyArNjAsMTQgQEAgQ2FjaGVzOjpDYWNoZXMoRW5naW5lJiBlbmdpbmUsIFN0
cmluZyYmIG9yaWdpbikKIAogdm9pZCBDYWNoZXM6OmluaXRpYWxpemUoV2ViQ29yZTo6RE9NQ2Fj
aGVFbmdpbmU6OkNvbXBsZXRpb25DYWxsYmFjayYmIGNhbGxiYWNrKQogewotICAgIGlmIChtX2lz
SW5pdGlhbGl6ZWQgfHwgbV9yb290UGF0aC5pc051bGwoKSkgeworICAgIGlmIChtX2lzSW5pdGlh
bGl6ZWQpIHsKKyAgICAgICAgY2FsbGJhY2soc3RkOjpudWxsb3B0KTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmIChtX3Jvb3RQYXRoLmlzTnVsbCgpKSB7CisgICAgICAgIG1ha2VE
aXJ0eSgpOworICAgICAgICBtX2lzSW5pdGlhbGl6ZWQgPSB0cnVlOwogICAgICAgICBjYWxsYmFj
ayhzdGQ6Om51bGxvcHQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNzUsNiArODMsNyBA
QCB2b2lkIENhY2hlczo6aW5pdGlhbGl6ZShXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6Q29tcGxl
dGlvbkNhbGxiYWNrJiYgY2FsbGJhY2spCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgbV9z
dG9yYWdlID0gc3RvcmFnZS5yZWxlYXNlTm9uTnVsbCgpOworICAgIG1fc3RvcmFnZS0+d3JpdGVX
aXRob3V0V2FpdGluZygpOwogICAgIHJlYWRDYWNoZXNGcm9tRGlzayhbdGhpcywgY2FsbGJhY2sg
PSBXVEZNb3ZlKGNhbGxiYWNrKV0oRXhwZWN0ZWQ8VmVjdG9yPENhY2hlPiwgRXJyb3I+JiYgcmVz
dWx0KSB7CiAgICAgICAgIG1ha2VEaXJ0eSgpOwogCkBAIC0xMjAsNyArMTI5LDkgQEAgQ2FjaGUq
IENhY2hlczo6ZmluZCh1aW50NjRfdCBpZGVudGlmaWVyKQogCiB2b2lkIENhY2hlczo6b3Blbihj
b25zdCBTdHJpbmcmIG5hbWUsIENhY2hlSWRlbnRpZmllckNhbGxiYWNrJiYgY2FsbGJhY2spCiB7
CisgICAgQVNTRVJUKG1faXNJbml0aWFsaXplZCk7CiAgICAgQVNTRVJUKG1fZW5naW5lKTsKKwog
ICAgIGlmIChhdXRvKiBjYWNoZSA9IGZpbmQobmFtZSkpIHsKICAgICAgICAgY2FjaGUtPm9wZW4o
W2NhY2hlSWRlbnRpZmllciA9IGNhY2hlLT5pZGVudGlmaWVyKCksIGNhbGxiYWNrID0gV1RGTW92
ZShjYWxsYmFjayldKHN0ZDo6b3B0aW9uYWw8RXJyb3I+JiYgZXJyb3IpIG11dGFibGUgewogICAg
ICAgICAgICAgaWYgKGVycm9yKSB7CkBAIC0xMzUsNyArMTQ2LDcgQEAgdm9pZCBDYWNoZXM6Om9w
ZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBDYWNoZUlkZW50aWZpZXJDYWxsYmFjayYmIGNhbGxiYWNr
KQogICAgIG1ha2VEaXJ0eSgpOwogCiAgICAgdWludDY0X3QgY2FjaGVJZGVudGlmaWVyID0gbV9l
bmdpbmUtPm5leHRDYWNoZUlkZW50aWZpZXIoKTsKLSAgICBtX2NhY2hlcy5hcHBlbmQoQ2FjaGUg
eyAqdGhpcywgY2FjaGVJZGVudGlmaWVyLCBDYWNoZTo6U3RhdGU6Ok9wZW4sIFN0cmluZyB7IG5h
bWUgfSB9KTsKKyAgICBtX2NhY2hlcy5hcHBlbmQoQ2FjaGUgeyAqdGhpcywgY2FjaGVJZGVudGlm
aWVyLCBDYWNoZTo6U3RhdGU6Ok9wZW4sIFN0cmluZyB7IG5hbWUgfSwgY3JlYXRlQ2Fub25pY2Fs
VVVJRFN0cmluZygpIH0pOwogCiAgICAgd3JpdGVDYWNoZXNUb0Rpc2soW2NhbGxiYWNrID0gV1RG
TW92ZShjYWxsYmFjayksIGNhY2hlSWRlbnRpZmllcl0oc3RkOjpvcHRpb25hbDxFcnJvcj4mJiBl
cnJvcikgbXV0YWJsZSB7CiAgICAgICAgIGNhbGxiYWNrKENhY2hlSWRlbnRpZmllck9wZXJhdGlv
blJlc3VsdCB7IGNhY2hlSWRlbnRpZmllciwgISFlcnJvciB9KTsKQEAgLTE0NCw2ICsxNTUsNyBA
QCB2b2lkIENhY2hlczo6b3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIENhY2hlSWRlbnRpZmllckNh
bGxiYWNrJiYgY2FsbGJhY2spCiAKIHZvaWQgQ2FjaGVzOjpyZW1vdmUodWludDY0X3QgaWRlbnRp
ZmllciwgQ2FjaGVJZGVudGlmaWVyQ2FsbGJhY2smJiBjYWxsYmFjaykKIHsKKyAgICBBU1NFUlQo
bV9pc0luaXRpYWxpemVkKTsKICAgICBBU1NFUlQobV9lbmdpbmUpOwogCiAgICAgYXV0byBwb3Np
dGlvbiA9IG1fY2FjaGVzLmZpbmRNYXRjaGluZyhbJl0oY29uc3QgYXV0byYgaXRlbSkgeyByZXR1
cm4gaXRlbS5pZGVudGlmaWVyKCkgPT0gaWRlbnRpZmllcjsgfSk7CkBAIC0xNjgsNiArMTgwLDkg
QEAgdm9pZCBDYWNoZXM6OmRpc3Bvc2UoQ2FjaGUmIGNhY2hlKQogewogICAgIGF1dG8gcG9zaXRp
b24gPSBtX3JlbW92ZWRDYWNoZXMuZmluZE1hdGNoaW5nKFsmXShjb25zdCBhdXRvJiBpdGVtKSB7
IHJldHVybiBpdGVtLmlkZW50aWZpZXIoKSA9PSBjYWNoZS5pZGVudGlmaWVyKCk7IH0pOwogICAg
IGlmIChwb3NpdGlvbiAhPSBub3RGb3VuZCkgeworICAgICAgICBpZiAobV9zdG9yYWdlKQorICAg
ICAgICAgICAgbV9zdG9yYWdlLT5yZW1vdmUoY2FjaGUua2V5cygpLCB7IH0pOworCiAgICAgICAg
IG1fcmVtb3ZlZENhY2hlcy5yZW1vdmUocG9zaXRpb24pOwogICAgICAgICByZXR1cm47CiAgICAg
fQpAQCAtMTg0LDEzICsxOTksMTUgQEAgc3RhdGljIGlubGluZSBEYXRhIGVuY29kZUNhY2hlTmFt
ZXMoY29uc3QgVmVjdG9yPENhY2hlPiYgY2FjaGVzKQogCiAgICAgdWludDY0X3Qgc2l6ZSA9IGNh
Y2hlcy5zaXplKCk7CiAgICAgZW5jb2RlciA8PCBzaXplOwotICAgIGZvciAoYXV0byYgY2FjaGUg
OiBjYWNoZXMpCisgICAgZm9yIChhdXRvJiBjYWNoZSA6IGNhY2hlcykgewogICAgICAgICBlbmNv
ZGVyIDw8IGNhY2hlLm5hbWUoKTsKKyAgICAgICAgZW5jb2RlciA8PCBjYWNoZS51bmlxdWVOYW1l
KCk7CisgICAgfQogCiAgICAgcmV0dXJuIERhdGEgeyBlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVy
LmJ1ZmZlclNpemUoKSB9OwogfQogCi1zdGF0aWMgaW5saW5lIEV4cGVjdGVkPFZlY3RvcjxTdHJp
bmc+LCBFcnJvcj4gZGVjb2RlQ2FjaGVzTmFtZXMoY29uc3QgRGF0YSYgZGF0YSwgaW50IGVycm9y
KQorc3RhdGljIGlubGluZSBFeHBlY3RlZDxWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgU3RyaW5n
Pj4sIEVycm9yPiBkZWNvZGVDYWNoZXNOYW1lcyhjb25zdCBEYXRhJiBkYXRhLCBpbnQgZXJyb3Ip
CiB7CiAgICAgaWYgKGVycm9yKQogICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoRXJyb3I6
OlJlYWREaXNrKTsKQEAgLTIwMCwxNCArMjE3LDE3IEBAIHN0YXRpYyBpbmxpbmUgRXhwZWN0ZWQ8
VmVjdG9yPFN0cmluZz4sIEVycm9yPiBkZWNvZGVDYWNoZXNOYW1lcyhjb25zdCBEYXRhJiBkYXRh
CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShjb3VudCkpCiAgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZChFcnJvcjo6UmVhZERpc2spOwogCi0gICAgVmVjdG9yPFN0cmluZz4gbmFtZXM7Cisg
ICAgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4+IG5hbWVzOwogICAgIG5hbWVzLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkoY291bnQpOwogICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsg
aW5kZXggPCBjb3VudDsgKytpbmRleCkgewogICAgICAgICBTdHJpbmcgbmFtZTsKICAgICAgICAg
aWYgKCFkZWNvZGVyLmRlY29kZShuYW1lKSkKICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChFcnJvcjo6UmVhZERpc2spOworICAgICAgICBTdHJpbmcgdW5pcXVlTmFtZTsKKyAgICAg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZSh1bmlxdWVOYW1lKSkKKyAgICAgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZChFcnJvcjo6UmVhZERpc2spOwogCi0gICAgICAgIG5hbWVzLnVuY2hlY2tl
ZEFwcGVuZChXVEZNb3ZlKG5hbWUpKTsKKyAgICAgICAgbmFtZXMudW5jaGVja2VkQXBwZW5kKHN0
ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4geyBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKHVuaXF1ZU5h
bWUpIH0pOwogICAgIH0KICAgICByZXR1cm4gbmFtZXM7CiB9CkBAIC0yNDAsOCArMjYwLDggQEAg
dm9pZCBDYWNoZXM6OnJlYWRDYWNoZXNGcm9tRGlzayhXVEY6OkZ1bmN0aW9uPHZvaWQoRXhwZWN0
ZWQ8VmVjdG9yPENhY2hlPiwgRXJyb3IKICAgICAgICAgICAgIGNhbGxiYWNrKG1ha2VVbmV4cGVj
dGVkKHJlc3VsdC5lcnJvcigpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAg
ICAgICAgY2FsbGJhY2soV1RGOjptYXAoV1RGTW92ZShyZXN1bHQudmFsdWUoKSksIFt0aGlzXSAo
U3RyaW5nJiYgbmFtZSkgewotICAgICAgICAgICAgcmV0dXJuIENhY2hlIHsgKnRoaXMsIG1fZW5n
aW5lLT5uZXh0Q2FjaGVJZGVudGlmaWVyKCksIENhY2hlOjpTdGF0ZTo6VW5pbml0aWFsaXplZCwg
V1RGTW92ZShuYW1lKSB9OworICAgICAgICBjYWxsYmFjayhXVEY6Om1hcChXVEZNb3ZlKHJlc3Vs
dC52YWx1ZSgpKSwgW3RoaXNdIChhdXRvJiYgcGFpcikgeworICAgICAgICAgICAgcmV0dXJuIENh
Y2hlIHsgKnRoaXMsIG1fZW5naW5lLT5uZXh0Q2FjaGVJZGVudGlmaWVyKCksIENhY2hlOjpTdGF0
ZTo6VW5pbml0aWFsaXplZCwgV1RGTW92ZShwYWlyLmZpcnN0KSwgV1RGTW92ZShwYWlyLnNlY29u
ZCkgfTsKICAgICAgICAgfSkpOwogICAgIH0pOwogfQpAQCAtMjY2LDE0ICsyODYsODIgQEAgdm9p
ZCBDYWNoZXM6OndyaXRlQ2FjaGVzVG9EaXNrKENvbXBsZXRpb25DYWxsYmFjayYmIGNhbGxiYWNr
KQogICAgIH0pOwogfQogCit2b2lkIENhY2hlczo6cmVhZFJlY29yZHNMaXN0KENhY2hlJiBjYWNo
ZSwgTmV0d29ya0NhY2hlOjpTdG9yYWdlOjpUcmF2ZXJzZUhhbmRsZXImJiBjYWxsYmFjaykKK3sK
KyAgICBBU1NFUlQobV9pc0luaXRpYWxpemVkKTsKKworICAgIGlmICghbV9zdG9yYWdlKSB7Cisg
ICAgICAgIGNhbGxiYWNrKG51bGxwdHIsIHsgfSk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgbV9zdG9yYWdlLT50cmF2ZXJzZShjYWNoZS51bmlxdWVOYW1lKCksIDAsIFtwcm90ZWN0ZWRT
dG9yYWdlID0gbWFrZVJlZigqbV9zdG9yYWdlKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNr
KV0oY29uc3QgYXV0byogc3RvcmFnZSwgY29uc3QgYXV0byYgaW5mb3JtYXRpb24pIHsKKyAgICAg
ICAgY2FsbGJhY2soc3RvcmFnZSwgaW5mb3JtYXRpb24pOworICAgIH0pOworfQorCit2b2lkIENh
Y2hlczo6d3JpdGVSZWNvcmQoY29uc3QgQ2FjaGUmIGNhY2hlLCBjb25zdCBSZWNvcmRJbmZvcm1h
dGlvbiYgcmVjb3JkSW5mb3JtYXRpb24sIFJlY29yZCYmIHJlY29yZCwgQ29tcGxldGlvbkNhbGxi
YWNrJiYgY2FsbGJhY2spCit7CisgICAgQVNTRVJUKG1faXNJbml0aWFsaXplZCk7CisKKyAgICAv
LyBGSVhNRTogQ2hlY2sgZm9yIHN0b3JhZ2UgcXVvdGEuCisgICAgaWYgKCFzaG91bGRQZXJzaXN0
KCkpIHsKKyAgICAgICAgbV92b2xhdGlsZVN0b3JhZ2Uuc2V0KHJlY29yZEluZm9ybWF0aW9uLmtl
eSwgV1RGTW92ZShyZWNvcmQpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fc3Rv
cmFnZS0+c3RvcmUoQ2FjaGU6OmVuY29kZShyZWNvcmRJbmZvcm1hdGlvbiwgcmVjb3JkKSwgW3By
b3RlY3RlZFN0b3JhZ2UgPSBtYWtlUmVmKCptX3N0b3JhZ2UpLCBjYWxsYmFjayA9IFdURk1vdmUo
Y2FsbGJhY2spXShjb25zdCBEYXRhJikgeworICAgICAgICBjYWxsYmFjayhzdGQ6Om51bGxvcHQp
OworICAgIH0pOworfQorCit2b2lkIENhY2hlczo6cmVhZFJlY29yZChjb25zdCBOZXR3b3JrQ2Fj
aGU6OktleSYga2V5LCBXVEY6OkZ1bmN0aW9uPHZvaWQoRXhwZWN0ZWQ8UmVjb3JkLCBFcnJvcj4m
Jik+JiYgY2FsbGJhY2spCit7CisgICAgQVNTRVJUKG1faXNJbml0aWFsaXplZCk7CisKKyAgICBp
ZiAoIXNob3VsZFBlcnNpc3QoKSkgeworICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbV92b2xhdGls
ZVN0b3JhZ2UuZmluZChrZXkpOworICAgICAgICBpZiAoaXRlcmF0b3IgPT0gbV92b2xhdGlsZVN0
b3JhZ2UuZW5kKCkpIHsKKyAgICAgICAgICAgIGNhbGxiYWNrKG1ha2VVbmV4cGVjdGVkKEVycm9y
OjpJbnRlcm5hbCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGNh
bGxiYWNrKGl0ZXJhdG9yLT52YWx1ZS5jb3B5KCkpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgbV9zdG9yYWdlLT5yZXRyaWV2ZShrZXksIDQsIFtwcm90ZWN0ZWRTdG9yYWdlID0gbWFr
ZVJlZigqbV9zdG9yYWdlKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oc3RkOjp1bmlx
dWVfcHRyPFN0b3JhZ2U6OlJlY29yZD4gc3RvcmFnZSkgbXV0YWJsZSB7CisgICAgICAgIGlmICgh
c3RvcmFnZSkgeworICAgICAgICAgICAgY2FsbGJhY2sobWFrZVVuZXhwZWN0ZWQoRXJyb3I6OlJl
YWREaXNrKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAg
ICBhdXRvIHJlY29yZCA9IENhY2hlOjpkZWNvZGUoKnN0b3JhZ2UpOworICAgICAgICBpZiAoIXJl
Y29yZCkgeworICAgICAgICAgICAgY2FsbGJhY2sobWFrZVVuZXhwZWN0ZWQoRXJyb3I6OlJlYWRE
aXNrKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBj
YWxsYmFjayhXVEZNb3ZlKHJlY29yZC52YWx1ZSgpKSk7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0pOworfQorCit2b2lkIENhY2hlczo6cmVtb3ZlUmVjb3JkKGNvbnN0IE5ldHdvcmtDYWNo
ZTo6S2V5JiBrZXkpCit7CisgICAgQVNTRVJUKG1faXNJbml0aWFsaXplZCk7CisKKyAgICBpZiAo
IXNob3VsZFBlcnNpc3QoKSkgeworICAgICAgICBtX3ZvbGF0aWxlU3RvcmFnZS5yZW1vdmUoa2V5
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX3N0b3JhZ2UtPnJlbW92ZShrZXkpOwor
fQorCiB2b2lkIENhY2hlczo6Y2xlYXJNZW1vcnlSZXByZXNlbnRhdGlvbigpCiB7CiAgICAgbWFr
ZURpcnR5KCk7CiAgICAgbV9jYWNoZXMuY2xlYXIoKTsKICAgICBtX2lzSW5pdGlhbGl6ZWQgPSBm
YWxzZTsKICAgICBtX3N0b3JhZ2UgPSBudWxscHRyOwotICAgIGlmIChtX2VuZ2luZSkKLSAgICAg
ICAgbV9lbmdpbmUtPnJlbW92ZUNhY2hlcyhtX29yaWdpbik7CiB9CiAKIGJvb2wgQ2FjaGVzOjpp
c0RpcnR5KHVpbnQ2NF90IHVwZGF0ZUNvdW50ZXIpIGNvbnN0CkBAIC0yODIsNiArMzcwLDE3IEBA
IGJvb2wgQ2FjaGVzOjppc0RpcnR5KHVpbnQ2NF90IHVwZGF0ZUNvdW50ZXIpIGNvbnN0CiAgICAg
cmV0dXJuIG1fdXBkYXRlQ291bnRlciAhPSB1cGRhdGVDb3VudGVyOwogfQogCitjb25zdCBOZXR3
b3JrQ2FjaGU6OlNhbHQmIENhY2hlczo6c2FsdCgpIGNvbnN0Cit7CisgICAgaWYgKG1fZW5naW5l
KQorICAgICAgICByZXR1cm4gbV9lbmdpbmUtPnNhbHQoKTsKKworICAgIGlmICghbV92b2xhdGls
ZVNhbHQpCisgICAgICAgIG1fdm9sYXRpbGVTYWx0ID0gU2FsdCB7IH07CisKKyAgICByZXR1cm4g
bV92b2xhdGlsZVNhbHQudmFsdWUoKTsKK30KKwogQ2FjaGVJbmZvcyBDYWNoZXM6OmNhY2hlSW5m
b3ModWludDY0X3QgdXBkYXRlQ291bnRlcikgY29uc3QKIHsKICAgICBWZWN0b3I8Q2FjaGVJbmZv
PiBjYWNoZUluZm9zOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9j
YWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmgKaW5kZXggZjMxM2ZkMWM0Y2I4
YjlmYWZjYjY0NjY4ODY4Y2Y0MzdhZDU5NzIzMi4uNGEyYTc3OTJlZmVhNmRhZmE2NDQ0MDUzZWM3
MDhiYjA1M2U2YWYwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9j
YWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5oCkBAIC01MiwxNyArNTIs
MjMgQEAgcHVibGljOgogICAgIENhY2hlKiBmaW5kKHVpbnQ2NF90IGlkZW50aWZpZXIpOwogICAg
IHZvaWQgYXBwZW5kUmVwcmVzZW50YXRpb24oU3RyaW5nQnVpbGRlciYpIGNvbnN0OwogCisgICAg
dm9pZCByZWFkUmVjb3Jkc0xpc3QoQ2FjaGUmLCBOZXR3b3JrQ2FjaGU6OlN0b3JhZ2U6OlRyYXZl
cnNlSGFuZGxlciYmKTsKKyAgICB2b2lkIHJlYWRSZWNvcmQoY29uc3QgTmV0d29ya0NhY2hlOjpL
ZXkmLCBXVEY6OkZ1bmN0aW9uPHZvaWQoRXhwZWN0ZWQ8V2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6
OlJlY29yZCwgV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OkVycm9yPiYmKT4mJik7CisgICAgdm9p
ZCB3cml0ZVJlY29yZChjb25zdCBDYWNoZSYsIGNvbnN0IFJlY29yZEluZm9ybWF0aW9uJiwgV2Vi
Q29yZTo6RE9NQ2FjaGVFbmdpbmU6OlJlY29yZCYmLCBXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6
Q29tcGxldGlvbkNhbGxiYWNrJiYpOworICAgIHZvaWQgcmVtb3ZlUmVjb3JkKGNvbnN0IE5ldHdv
cmtDYWNoZTo6S2V5Jik7CisKKyAgICBjb25zdCBOZXR3b3JrQ2FjaGU6OlNhbHQmIHNhbHQoKSBj
b25zdDsKKworICAgIGJvb2wgc2hvdWxkUGVyc2lzdCgpIGNvbnN0IHsgcmV0dXJuICFtX3Jvb3RQ
YXRoLmlzTnVsbCgpOyB9CisKIHByaXZhdGU6CiAgICAgQ2FjaGVzKEVuZ2luZSYsIFN0cmluZyYm
IG9yaWdpbik7CiAKICAgICB2b2lkIHJlYWRDYWNoZXNGcm9tRGlzayhXVEY6OkZ1bmN0aW9uPHZv
aWQoRXhwZWN0ZWQ8VmVjdG9yPENhY2hlPiwgV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OkVycm9y
PiYmKT4mJik7CiAgICAgdm9pZCB3cml0ZUNhY2hlc1RvRGlzayhXZWJDb3JlOjpET01DYWNoZUVu
Z2luZTo6Q29tcGxldGlvbkNhbGxiYWNrJiYpOwogCi0KICAgICBDYWNoZSogZmluZChjb25zdCBT
dHJpbmcmIG5hbWUpOwogCi0gICAgYm9vbCBzaG91bGRQZXJzaXN0KCkgY29uc3QgeyByZXR1cm4g
IW1fcm9vdFBhdGguaXNOdWxsKCk7IH0KLQogICAgIHZvaWQgbWFrZURpcnR5KCkgeyArK21fdXBk
YXRlQ291bnRlcjsgfQogICAgIGJvb2wgaXNEaXJ0eSh1aW50NjRfdCB1cGRhdGVDb3VudGVyKSBj
b25zdDsKIApAQCAtNzQsNiArODAsOCBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxDYWNoZT4gbV9j
YWNoZXM7CiAgICAgVmVjdG9yPENhY2hlPiBtX3JlbW92ZWRDYWNoZXM7CiAgICAgUmVmUHRyPE5l
dHdvcmtDYWNoZTo6U3RvcmFnZT4gbV9zdG9yYWdlOworICAgIEhhc2hNYXA8TmV0d29ya0NhY2hl
OjpLZXksIFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpSZWNvcmQ+IG1fdm9sYXRpbGVTdG9yYWdl
OworICAgIG11dGFibGUgc3RkOjpvcHRpb25hbDxOZXR3b3JrQ2FjaGU6OlNhbHQ+IG1fdm9sYXRp
bGVTYWx0OwogICAgIFZlY3RvcjxXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6Q29tcGxldGlvbkNh
bGxiYWNrPiBtX3BlbmRpbmdJbml0aWFsaXphdGlvbkNhbGxiYWNrczsKIH07CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFn
ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0
b3JhZ2UuY3BwCmluZGV4IDgwM2E5OWZiZGRkNmQ4ZDIyNzBhZDU1YzliY2I1MGEwNTFhNDRiM2Yu
LjBiNjUyOGRkNzI4ZmI5MzMwYWE5ZDA1NDI4NTc0Y2Y0NjBkMDlhZjIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9y
YWdlLmNwcApAQCAtODQ2LDEwICs4NDYsNyBAQCB2b2lkIFN0b3JhZ2U6OnN0b3JlKGNvbnN0IFJl
Y29yZCYgcmVjb3JkLCBNYXBwZWRCb2R5SGFuZGxlciYmIG1hcHBlZEJvZHlIYW5kbGVyKQogICAg
IGlmICghaXNJbml0aWFsV3JpdGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIERlbGF5IHRo
ZSBzdGFydCBvZiB3cml0ZXMgYSBiaXQgdG8gYXZvaWQgYWZmZWN0aW5nIGVhcmx5IHBhZ2UgbG9h
ZC4KLSAgICAvLyBDb21wbGV0aW5nIHdyaXRlcyB3aWxsIGRpc3BhdGNoIG1vcmUgd3JpdGVzIHdp
dGhvdXQgZGVsYXkuCi0gICAgc3RhdGljIGNvbnN0IFNlY29uZHMgaW5pdGlhbFdyaXRlRGVsYXkg
PSAxX3M7Ci0gICAgbV93cml0ZU9wZXJhdGlvbkRpc3BhdGNoVGltZXIuc3RhcnRPbmVTaG90KGlu
aXRpYWxXcml0ZURlbGF5KTsKKyAgICBtX3dyaXRlT3BlcmF0aW9uRGlzcGF0Y2hUaW1lci5zdGFy
dE9uZVNob3QobV9pbml0aWFsV3JpdGVEZWxheSk7CiB9CiAKIHZvaWQgU3RvcmFnZTo6dHJhdmVy
c2UoY29uc3QgU3RyaW5nJiB0eXBlLCBUcmF2ZXJzZUZsYWdzIGZsYWdzLCBUcmF2ZXJzZUhhbmRs
ZXImJiB0cmF2ZXJzZUhhbmRsZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5oCmluZGV4IDQxMmVkOWVjNTczMTEz
ZDhlNTFiMmNmZTMxYmViMDVmOTVlZDk0NzkuLmI2ODhkY2Q0ZTBhNzVlYTEyYTlkMTBkZGU3Yzli
YjRjOGY5ZjRiNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlU3RvcmFnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5oCkBAIC0xMDQsNiArMTA0LDggQEAgcHVibGlj
OgogCiAgICAgflN0b3JhZ2UoKTsKIAorICAgIHZvaWQgd3JpdGVXaXRob3V0V2FpdGluZygpIHsg
bV9pbml0aWFsV3JpdGVEZWxheSA9IDBfczsgfTsKKwogcHJpdmF0ZToKICAgICBTdG9yYWdlKGNv
bnN0IFN0cmluZyYgZGlyZWN0b3J5UGF0aCwgTW9kZSwgU2FsdCk7CiAKQEAgLTE4Miw2ICsxODQs
MTAgQEAgcHJpdmF0ZToKICAgICBSZWY8V29ya1F1ZXVlPiBtX3NlcmlhbEJhY2tncm91bmRJT1F1
ZXVlOwogCiAgICAgQmxvYlN0b3JhZ2UgbV9ibG9iU3RvcmFnZTsKKworICAgIC8vIEJ5IGRlZmF1
bHQsIGRlbGF5IHRoZSBzdGFydCBvZiB3cml0ZXMgYSBiaXQgdG8gYXZvaWQgYWZmZWN0aW5nIGVh
cmx5IHBhZ2UgbG9hZC4KKyAgICAvLyBDb21wbGV0aW5nIHdyaXRlcyB3aWxsIGRpc3BhdGNoIG1v
cmUgd3JpdGVzIHdpdGhvdXQgZGVsYXkuCisgICAgU2Vjb25kcyBtX2luaXRpYWxXcml0ZURlbGF5
IHsgMV9zIH07CiB9OwogCiAvLyBGSVhNRTogUmVtb3ZlLCB1c2VkIGJ5IE5ldHdvcmtDYWNoZVN0
YXRpc3RpY3Mgb25seS4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91
dFRlc3RzL0NoYW5nZUxvZwppbmRleCA3N2I1Yjk3ZGIwYTUwZThhOTE0NDRlZDFhYzY0ODlkMGY1
MzM2OTY0Li4yODBhOWI1YjU4MWIxZmEwNzgyZmYxNGE3NTI5OGQyYTg0MmViYzUwIDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTQgQEAKKzIwMTctMDktMTMgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUu
Y29tPgorCisgICAgICAgIEFkZCBDYWNoZSBBUEkgc3VwcG9ydCBvZiByZWNvcmRzIHBlcnNpc3Rl
bmN5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzY4
NDUKKworICAgICAgICBSZXZpZXdlZCBieSBBbGV4IENocmlzdGVuc2VuLgorCisgICAgICAgICog
aHR0cC90ZXN0cy9jYWNoZS1zdG9yYWdlL2NhY2hlLXBlcnNpc3RlbmN5Lmh0dHBzLmh0bWw6Cisg
ICAgICAgICogaHR0cC90ZXN0cy9jYWNoZS1zdG9yYWdlL2NhY2hlLXJlY29yZHMtcGVyc2lzdGVu
Y3kuaHR0cHMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2NhY2hl
LXN0b3JhZ2UvY2FjaGUtcmVjb3Jkcy1wZXJzaXN0ZW5jeS5odHRwcy5odG1sOiBBZGRlZC4KKwog
MjAxNy0wOS0xMyAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgog
CiAgICAgICAgIEZvbGxvd3VwIChyMjIxODA1KTogQWRkcmVzcyBjb21tZW50cyBhbmQgYWRkIG1v
cmUgdGVzdHMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvY2FjaGUtc3RvcmFn
ZS9jYWNoZS1wZXJzaXN0ZW5jeS5odHRwcy5odG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9j
YWNoZS1zdG9yYWdlL2NhY2hlLXBlcnNpc3RlbmN5Lmh0dHBzLmh0bWwKaW5kZXggZDFlYWQ0ZDRh
ZjI1YmNlOGY1NGY2MGE4YTMyZGQxZDc3NDExYjhmOC4uZGM5ZTk2YjY1ZThjMjQxZjcwNzk2ZTY1
OTY1ZTI1N2Q5YzM1MmNkZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9jYWNo
ZS1zdG9yYWdlL2NhY2hlLXBlcnNpc3RlbmN5Lmh0dHBzLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9jYWNoZS1zdG9yYWdlL2NhY2hlLXBlcnNpc3RlbmN5Lmh0dHBzLmh0bWwKQEAg
LTQyLDExICs0MiwxMSBAQAogICAgIHByb21pc2VfdGVzdCh0ZXN0ID0+IHsKICAgICAgICAgaWYg
KHdpbmRvdy50ZXN0UnVubmVyKQogICAgICAgICAgICAgdGVzdFJ1bm5lci5zZXRQcml2YXRlQnJv
d3NpbmdFbmFibGVkKGZhbHNlKTsKLSAgICAgICAgdmFyIGNsZWFyUHJvbWlzZTsKLSAgICAgICAg
aWYgKHdpbmRvdy5pbnRlcm5hbHMpCi0gICAgICAgICAgICBjbGVhclByb21pc2UgPWludGVybmFs
cy5jbGVhckNhY2hlU3RvcmFnZU1lbW9yeVJlcHJlc2VudGF0aW9uKCk7CiAKLSAgICAgICAgcmV0
dXJuIFByb21pc2UucmVzb2x2ZShjbGVhclByb21pc2UpLnRoZW4oKCkgPT4geworICAgICAgICBy
ZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7CisgICAgICAgICAgICBpZiAod2lu
ZG93LmludGVybmFscykKKyAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxzLmNsZWFyQ2Fj
aGVTdG9yYWdlTWVtb3J5UmVwcmVzZW50YXRpb24oKTsKKyAgICAgICAgfSkudGhlbigoKSA9PiB7
CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5jYWNoZXMua2V5cygpOwogICAgICAgICB9KS50aGVu
KGtleXMgPT4gewogICAgICAgICAgICAgdmFyIHBlbmRpbmcgPSBbXTsKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2h0dHAvdGVzdHMvY2FjaGUtc3RvcmFnZS9jYWNoZS1yZWNvcmRzLXBlcnNpc3Rl
bmN5Lmh0dHBzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvY2FjaGUtc3Rv
cmFnZS9jYWNoZS1yZWNvcmRzLXBlcnNpc3RlbmN5Lmh0dHBzLWV4cGVjdGVkLnR4dApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5jMTljY2VhM2I0ZGM0ZTZhMDIzMDUzMmMxNzlmZTExMDQxNDFmODY2Ci0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9jYWNoZS1zdG9yYWdlL2NhY2hlLXJlY29y
ZHMtcGVyc2lzdGVuY3kuaHR0cHMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsOSBAQAorCitQQVNT
IENsZWFuaW5nIGV4aXN0aW5nIGNhY2hlcyAKK1BBU1MgQ2FjaGUucHV0IGNhbGxlZCB0d2ljZSB3
aXRoIG1hdGNoaW5nIFJlcXVlc3RzIC0ga2V5cyBzaG91bGQgcmVtYWluIHRoZSBzYW1lIC0gdGVz
dGluZyBwZXJzaXN0ZW5jeSAKK1BBU1MgQ2xlYW5pbmcgY3JlYXRlZCBjYWNoZXMgCitQQVNTIENo
ZWNraW5nIHBlcnNpc3RlbmN5IG9mIGNhY2hlIGtleXMgCitQQVNTIENoZWNraW5nIHBlcnNpc3Rl
bmN5IG9mIHJlc3BvbnNlIAorUEFTUyBDaGVja2luZyBwZXJzaXN0ZW5jeSBvZiByZXNwb25zZSBi
b2R5IAorUEFTUyBUZXN0aW5nIG92ZXJyaWRpbmcgb2YgYW4gZXhpc3RpbmcgY2FjaGVkIHJlY29y
ZCB0aGF0IGlzIG5vdCBpbiBtZW1vcnkgCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAv
dGVzdHMvY2FjaGUtc3RvcmFnZS9jYWNoZS1yZWNvcmRzLXBlcnNpc3RlbmN5Lmh0dHBzLmh0bWwg
Yi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2NhY2hlLXN0b3JhZ2UvY2FjaGUtcmVjb3Jkcy1wZXJz
aXN0ZW5jeS5odHRwcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJiNGJhYTAwYWJlYWE1ZDU1MTdjMzA4NWU4
MWFiMjgyYTM3MmE4NTAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L2NhY2hlLXN0b3JhZ2UvY2FjaGUtcmVjb3Jkcy1wZXJzaXN0ZW5jeS5odHRwcy5odG1sCkBAIC0w
LDAgKzEsMTMzIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+Q2Fj
aGUgU3RvcmFnZTogdGVzdGluZyBDYWNoZSBwZXJzaXN0ZW5jeTwvdGl0bGU+Cis8c2NyaXB0IHNy
Yz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jl
c291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4K
KyAgICA8c2NyaXB0PgorZnVuY3Rpb24gYXNzZXJ0X2hlYWRlcl9lcXVhbHMoYWN0dWFsLCBleHBl
Y3RlZCwgZGVzY3JpcHRpb24pIHsKKyAgICBhc3NlcnRfY2xhc3Nfc3RyaW5nKGFjdHVhbCwgIkhl
YWRlcnMiLCBkZXNjcmlwdGlvbik7CisgICAgdmFyIGhlYWRlcjsKKyAgICB2YXIgYWN0dWFsX2hl
YWRlcnMgPSBbXTsKKyAgICB2YXIgZXhwZWN0ZWRfaGVhZGVycyA9IFtdOworICAgIGZvciAoaGVh
ZGVyIG9mIGFjdHVhbCkKKyAgICAgICAgYWN0dWFsX2hlYWRlcnMucHVzaChoZWFkZXJbMF0gKyAi
OiAiICsgaGVhZGVyWzFdKTsKKyAgICBmb3IgKGhlYWRlciBvZiBleHBlY3RlZCkKKyAgICAgICAg
ZXhwZWN0ZWRfaGVhZGVycy5wdXNoKGhlYWRlclswXSArICI6ICIgKyBoZWFkZXJbMV0pOworICAg
IGFzc2VydF9hcnJheV9lcXVhbHMoYWN0dWFsX2hlYWRlcnMsIGV4cGVjdGVkX2hlYWRlcnMsCisg
ICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiArICIgSGVhZGVycyBkaWZmZXIuIik7
Cit9CisKK2Z1bmN0aW9uIGFzc2VydF9yZXNwb25zZV9lcXVhbHMoYWN0dWFsLCBleHBlY3RlZCwg
ZGVzY3JpcHRpb24pIHsKKyAgICBhc3NlcnRfY2xhc3Nfc3RyaW5nKGFjdHVhbCwgIlJlc3BvbnNl
IiwgZGVzY3JpcHRpb24pOworICAgIFsidHlwZSIsICJ1cmwiLCAic3RhdHVzIiwgIm9rIiwgInN0
YXR1c1RleHQiXS5mb3JFYWNoKGZ1bmN0aW9uKGF0dHJpYnV0ZSkgeworICAgICAgICBhc3NlcnRf
ZXF1YWxzKGFjdHVhbFthdHRyaWJ1dGVdLCBleHBlY3RlZFthdHRyaWJ1dGVdLAorICAgICAgICAg
ICAgICAgICAgICAgIGRlc2NyaXB0aW9uICsgIiBBdHRyaWJ1dGVzIGRpZmZlcjogIiArIGF0dHJp
YnV0ZSArICIuIik7CisgICAgfSk7CisgICAgYXNzZXJ0X2hlYWRlcl9lcXVhbHMoYWN0dWFsLmhl
YWRlcnMsIGV4cGVjdGVkLmhlYWRlcnMsIGRlc2NyaXB0aW9uKTsKK30KKworZnVuY3Rpb24gYXNz
ZXJ0X3JlcXVlc3RfZXF1YWxzKGFjdHVhbCwgZXhwZWN0ZWQsIGRlc2NyaXB0aW9uKSB7CisgICAg
YXNzZXJ0X2NsYXNzX3N0cmluZyhhY3R1YWwsICJSZXF1ZXN0IiwgZGVzY3JpcHRpb24pOworICAg
IFsidXJsIl0uZm9yRWFjaChmdW5jdGlvbihhdHRyaWJ1dGUpIHsKKyAgICAgICAgYXNzZXJ0X2Vx
dWFscyhhY3R1YWxbYXR0cmlidXRlXSwgZXhwZWN0ZWRbYXR0cmlidXRlXSwKKyAgICAgICAgICAg
ICAgICAgICAgICBkZXNjcmlwdGlvbiArICIgQXR0cmlidXRlcyBkaWZmZXI6ICIgKyBhdHRyaWJ1
dGUgKyAiLiIpOworICAgIH0pOworICAgIGFzc2VydF9oZWFkZXJfZXF1YWxzKGFjdHVhbC5oZWFk
ZXJzLCBleHBlY3RlZC5oZWFkZXJzLCBkZXNjcmlwdGlvbik7Cit9CisKK2Z1bmN0aW9uIGFzc2Vy
dF9yZXF1ZXN0X2FycmF5X2VxdWFscyhhY3R1YWwsIGV4cGVjdGVkLCBkZXNjcmlwdGlvbikgewor
ICAgIGFzc2VydF90cnVlKEFycmF5LmlzQXJyYXkoYWN0dWFsKSwgZGVzY3JpcHRpb24pOworICAg
IGFzc2VydF9lcXVhbHMoYWN0dWFsLmxlbmd0aCwgZXhwZWN0ZWQubGVuZ3RoLCBkZXNjcmlwdGlv
bik7CisgICAgYWN0dWFsLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIGluZGV4KSB7CisgICAgICAg
IGFzc2VydF9yZXF1ZXN0X2VxdWFscyh2YWx1ZSwgZXhwZWN0ZWRbaW5kZXhdLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gKyAiIDogb2JqZWN0WyIgKyBpbmRleCAr
ICJdIik7CisgICAgfSk7Cit9CisKK3Byb21pc2VfdGVzdCh0ZXN0ID0+IHsKKyAgICByZXR1cm4g
c2VsZi5jYWNoZXMua2V5cygpLnRoZW4oa2V5cyA9PiB7CisgICAgICAgIHZhciBwZW5kaW5nID0g
W107CisgICAgICAgIGZvciAoa2V5IG9mIGtleXMpCisgICAgICAgICAgICBwZW5kaW5nLnB1c2go
c2VsZi5jYWNoZXMuZGVsZXRlKGtleXNbMF0pKTsKKyAgICAgICAgcmV0dXJuIFByb21pc2UuYWxs
KHBlbmRpbmcpOworICAgIH0pOworfSwgIkNsZWFuaW5nIGV4aXN0aW5nIGNhY2hlcyIpOworCit2
YXIgdGVzdF91cmwgPSAnaHR0cHM6Ly9leGFtcGxlLmNvbS9mb28nOwordmFyIHRlc3RfYm9keSA9
ICdIZWxsbyB3b3JsZCEnOworCitwcm9taXNlX3Rlc3QoKCkgPT4geworICAgIHZhciBjYWNoZTsK
KyAgICB2YXIgY2FjaGVfa2V5czsKKyAgICB2YXIgZmlyc3RfcmVzcG9uc2UgPSBuZXcgUmVzcG9u
c2UoIk9sZCBib2R5IiwgeyBzdGF0dXNUZXh0OiAnT2xkIHN0YXR1cycgfSk7CisgICAgdmFyIGFs
dGVybmF0ZV9yZXNwb25zZSA9IG5ldyBSZXNwb25zZSgiTmV3IGJvZHkiLCB7IHN0YXR1c1RleHQ6
ICdOZXcgc3RhdHVzJyB9KTsKKyAgICByZXR1cm4gc2VsZi5jYWNoZXMub3BlbigidGVzdC1jYWNo
ZS1yZWNvcmRzLXBlcnNpc3RlbmN5IikudGhlbihjID0+IHsKKyAgICAgICAgY2FjaGUgPSBjOwor
ICAgIH0pLnRoZW4oKCkgPT4geworICAgICAgICByZXR1cm4gY2FjaGUucHV0KHRlc3RfdXJsLCBm
aXJzdF9yZXNwb25zZSk7CisgICAgfSkudGhlbigoKSA9PiB7CisgICAgICAgIHJldHVybiBjYWNo
ZS5rZXlzKCk7CisgICAgfSkudGhlbihrZXlzID0+IHsKKyAgICAgICAgY2FjaGVfa2V5cyA9IGtl
eXM7CisgICAgICAgIGlmICh3aW5kb3cuaW50ZXJuYWxzKQorICAgICAgICAgICAgcmV0dXJuIGlu
dGVybmFscy5jbGVhckNhY2hlU3RvcmFnZU1lbW9yeVJlcHJlc2VudGF0aW9uKCk7CisgICAgfSku
dGhlbigoKSA9PiB7CisgICAgICAgIHJldHVybiBzZWxmLmNhY2hlcy5vcGVuKCJ0ZXN0LWNhY2hl
LXJlY29yZHMtcGVyc2lzdGVuY3kiKTsKKyAgICB9KS50aGVuKGMgPT4geworICAgICAgICBjYWNo
ZSA9IGM7CisgICAgICAgIHJldHVybiBjYWNoZS5rZXlzKCkudGhlbigoa2V5cykgPT4geworICAg
ICAgICAgICAgdGVzdCgoKSA9PiB7CisgICAgICAgICAgICAgICAgYXNzZXJ0X3JlcXVlc3RfYXJy
YXlfZXF1YWxzKGtleXMsIGNhY2hlX2tleXMpOworICAgICAgICAgICAgfSwgIkNoZWNraW5nIHBl
cnNpc3RlbmN5IG9mIGNhY2hlIGtleXMiKTsKKyAgICAgICAgICAgIHJldHVybiBjYWNoZS5tYXRj
aCh0ZXN0X3VybCk7CisgICAgICAgIH0pLnRoZW4oKHJlc3VsdCkgPT4geworICAgICAgICAgICAg
dGVzdCgoKSA9PiB7CisgICAgICAgICAgICAgICAgYXNzZXJ0X3Jlc3BvbnNlX2VxdWFscyhyZXN1
bHQsIGZpcnN0X3Jlc3BvbnNlLCAiQ2FjaGUucHV0IHNob3VsZCBzdG9yZSB0aGUgcmVzcG9uc2Ug
cGVyc2lzdGVudGx5Iik7CisgICAgICAgICAgICB9LCAiQ2hlY2tpbmcgcGVyc2lzdGVuY3kgb2Yg
cmVzcG9uc2UiKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQudGV4dCgpOworICAgICAgICB9
KS50aGVuKChib2R5KSA9PiB7CisgICAgICAgICAgICB0ZXN0KCgpID0+IHsKKyAgICAgICAgICAg
ICAgICBhc3NlcnRfZXF1YWxzKGJvZHksICJPbGQgYm9keSIsICJDYWNoZSBwdXQgc2hvdWxkIHN0
b3JlIHRoZSByZXNwb25zZSBib2R5IHBlcnNpc3RlbnRseS4iKTsKKyAgICAgICAgICAgIH0sICJD
aGVja2luZyBwZXJzaXN0ZW5jeSBvZiByZXNwb25zZSBib2R5Iik7CisgICAgICAgIH0pOworICAg
IH0pLnRoZW4oKCkgPT4geworICAgICAgICByZXR1cm4gY2FjaGUucHV0KHRlc3RfdXJsLCBhbHRl
cm5hdGVfcmVzcG9uc2UpOworICAgIH0pLnRoZW4oKCkgPT4geworICAgICAgICByZXR1cm4gY2Fj
aGUua2V5cygpOworICAgIH0pLnRoZW4oa2V5cyA9PiB7CisgICAgICAgIGNhY2hlX2tleXMgPSBr
ZXlzOworICAgICAgICBpZiAod2luZG93LmludGVybmFscykKKyAgICAgICAgICAgIHJldHVybiBp
bnRlcm5hbHMuY2xlYXJDYWNoZVN0b3JhZ2VNZW1vcnlSZXByZXNlbnRhdGlvbigpOworICAgIH0p
LnRoZW4oKCkgPT4geworICAgICAgICByZXR1cm4gc2VsZi5jYWNoZXMub3BlbigidGVzdC1jYWNo
ZS1yZWNvcmRzLXBlcnNpc3RlbmN5Iik7CisgICAgfSkudGhlbihjID0+IHsKKyAgICAgICAgY2Fj
aGUgPSBjOworICAgICAgICByZXR1cm4gY2FjaGUua2V5cygpOworICAgIH0pLnRoZW4oKGtleXMp
ID0+IHsKKyAgICAgICAgYXNzZXJ0X3JlcXVlc3RfYXJyYXlfZXF1YWxzKGtleXMsIGNhY2hlX2tl
eXMpOworICAgIH0pLnRoZW4oKCkgPT4geworICAgICAgICBwcm9taXNlX3Rlc3QoKCkgPT4gewor
ICAgICAgICAgICAgcmV0dXJuIGNhY2hlLm1hdGNoKHRlc3RfdXJsKS50aGVuKChyZXN1bHQpID0+
IHsKKyAgICAgICAgICAgICAgICBhc3NlcnRfcmVzcG9uc2VfZXF1YWxzKHJlc3VsdCwgYWx0ZXJu
YXRlX3Jlc3BvbnNlLCAnQ2FjaGUucHV0IHNob3VsZCByZXBsYWNlIGV4aXN0aW5nICcgKyAncmVz
cG9uc2Ugd2l0aCBuZXcgcmVzcG9uc2UuJyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dC50ZXh0KCk7CisgICAgICAgICAgICB9KS50aGVuKChib2R5KSA9PiB7CisgICAgICAgICAgICAg
ICAgYXNzZXJ0X2VxdWFscyhib2R5LCAiTmV3IGJvZHkiLCAnQ2FjaGUgcHV0IHNob3VsZCBzdG9y
ZSBuZXcgcmVzcG9uc2UgYm9keS4nKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9LCAnVGVz
dGluZyBvdmVycmlkaW5nIG9mIGFuIGV4aXN0aW5nIGNhY2hlZCByZWNvcmQgdGhhdCBpcyBub3Qg
aW4gbWVtb3J5Jyk7CisgICAgfSk7Cit9LCAnQ2FjaGUucHV0IGNhbGxlZCB0d2ljZSB3aXRoIG1h
dGNoaW5nIFJlcXVlc3RzIC0ga2V5cyBzaG91bGQgcmVtYWluIHRoZSBzYW1lIC0gdGVzdGluZyBw
ZXJzaXN0ZW5jeScpOworCitwcm9taXNlX3Rlc3QodGVzdCA9PiB7CisgICAgcmV0dXJuIHNlbGYu
Y2FjaGVzLmtleXMoKS50aGVuKGtleXMgPT4geworICAgICAgICB2YXIgcGVuZGluZyA9IFtdOwor
ICAgICAgICBmb3IgKGtleSBvZiBrZXlzKQorICAgICAgICAgICAgcGVuZGluZy5wdXNoKHNlbGYu
Y2FjaGVzLmRlbGV0ZShrZXlzWzBdKSk7CisgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChwZW5k
aW5nKTsKKyAgICB9KTsKK30sICJDbGVhbmluZyBjcmVhdGVkIGNhY2hlcyIpOworICAgIDwvc2Ny
aXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>