<?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>150221</bug_id>
          
          <creation_ts>2015-10-15 20:45:34 -0700</creation_ts>
          <short_desc>[WK2] Generalize NetworkCacheStorage API so it can store different types of metadata</short_desc>
          <delta_ts>2015-10-20 23:42:03 -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>WebKit2</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>150371</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>koivisto</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1133751</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-10-15 20:45:34 -0700</bug_when>
    <thetext>Generalize NetworkCacheStorage API so it can store different types of metadata alongside the network resources. This is a pre-requirement to making our NetworkCache smarter by storing information about the resources.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1133752</commentid>
    <comment_count>1</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-10-15 20:47:14 -0700</bug_when>
    <thetext>rdar://problem/23092196</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1133753</commentid>
    <comment_count>2</comment_count>
      <attachid>263243</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-10-15 20:47:56 -0700</bug_when>
    <thetext>Created attachment 263243
WIP Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1133754</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-15 20:49:53 -0700</bug_when>
    <thetext>Attachment 263243 did not pass style-queue:


ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheStorage.cpp:188:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheStorage.cpp:943:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheStorage.h:70:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheStorage.h:177:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 4 in 4 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>1133759</commentid>
    <comment_count>4</comment_count>
      <attachid>263244</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-10-15 21:31:14 -0700</bug_when>
    <thetext>Created attachment 263244
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1133760</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-15 21:33:42 -0700</bug_when>
    <thetext>Attachment 263244 did not pass style-queue:


ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheStorage.cpp:188:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheStorage.cpp:948:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheStorage.h:70:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheStorage.h:177:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 4 in 5 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>1133766</commentid>
    <comment_count>6</comment_count>
      <attachid>263244</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-10-15 22:09:24 -0700</bug_when>
    <thetext>Comment on attachment 263244
Patch

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

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCache.cpp:55
&gt; +    static NeverDestroyed&lt;const String&gt; resource(ASCIILiteral(&quot;resource&quot;));

I like to assert that we are on a known (usually main) thread in functions like this, to make sure that the code isn&apos;t accidentally used from a secondary thread.

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCache.cpp:361
&gt; +    m_storage-&gt;retrieve(storageKey, resourceType(), priority, [this, originalRequest, completionHandler, startTime, storageKey, webPageID](std::unique_ptr&lt;Storage::Record&gt; record) {

And here it looks like maybe it is?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1133767</commentid>
    <comment_count>7</comment_count>
      <attachid>263244</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-10-15 22:23:11 -0700</bug_when>
    <thetext>Comment on attachment 263244
Patch

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

&gt;&gt; Source/WebKit2/NetworkProcess/cache/NetworkCache.cpp:55
&gt;&gt; +    static NeverDestroyed&lt;const String&gt; resource(ASCIILiteral(&quot;resource&quot;));
&gt; 
&gt; I like to assert that we are on a known (usually main) thread in functions like this, to make sure that the code isn&apos;t accidentally used from a secondary thread.

This is a good idea, I&apos;ll add a check.

&gt;&gt; Source/WebKit2/NetworkProcess/cache/NetworkCache.cpp:361
&gt;&gt; +    m_storage-&gt;retrieve(storageKey, resourceType(), priority, [this, originalRequest, completionHandler, startTime, storageKey, webPageID](std::unique_ptr&lt;Storage::Record&gt; record) {
&gt; 
&gt; And here it looks like maybe it is?

No, this is executed in the main thread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1133768</commentid>
    <comment_count>8</comment_count>
      <attachid>263248</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-10-15 22:26:43 -0700</bug_when>
    <thetext>Created attachment 263248
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1133769</commentid>
    <comment_count>9</comment_count>
      <attachid>263244</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-10-15 22:27:03 -0700</bug_when>
    <thetext>Comment on attachment 263244
Patch

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

&gt;&gt;&gt; Source/WebKit2/NetworkProcess/cache/NetworkCache.cpp:55
&gt;&gt;&gt; +    static NeverDestroyed&lt;const String&gt; resource(ASCIILiteral(&quot;resource&quot;));
&gt;&gt; 
&gt;&gt; I like to assert that we are on a known (usually main) thread in functions like this, to make sure that the code isn&apos;t accidentally used from a secondary thread.
&gt; 
&gt; This is a good idea, I&apos;ll add a check.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1133770</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-15 22:28:16 -0700</bug_when>
    <thetext>Attachment 263248 did not pass style-queue:


ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheStorage.cpp:188:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheStorage.cpp:948:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheStorage.h:70:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheStorage.h:177:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 4 in 5 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>1133833</commentid>
    <comment_count>11</comment_count>
      <attachid>263248</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-10-16 06:01:01 -0700</bug_when>
    <thetext>Comment on attachment 263248
Patch

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

&gt; Source/WebKit2/ChangeLog:17
&gt; +        Generalize NetworkCacheStorage API so it can store different types of
&gt; +        metadata alongside the network resources. This is a pre-requirement to
&gt; +        making our NetworkCache smarter by storing information about the
&gt; +        resources.
&gt; +
&gt; +        To simplify the code, all cache entries now have a suffix, so that they
&gt; +        all following the following format:
&gt; +        - Regular entries: [hash]-[type]
&gt; +        - Blobs: [hash]-[type]blob

Not that I look this, wouldn&apos;t we get pretty much the same features by simply expanding Key to include the entry type?

I was thinking of having single record file and multiple associated data blobs. That scheme would have advantage of having less files in general case. However may it is not worth the complexity.

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheStorage.cpp:60
&gt; +static bool typeUsesBlobStorage(const String&amp; type)
&gt; +{
&gt; +    return type == resourceType;
&gt; +}
&gt; +
&gt; +static bool typeUsesHeader(const String&amp; type)
&gt; +{
&gt; +    return type == resourceType;
&gt; +}

Are these necessary? Wouldn&apos;t the existing solution that just automatically inlines the data to record file if it is small (&lt;16KB) work as is?

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheStorage.cpp:67
&gt; +    ReadOperation(const Key&amp; key, const String&amp; type, const RetrieveCompletionHandler&amp; completionHandler)

Type could be AtomicString (here and elsewhere).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1133980</commentid>
    <comment_count>12</comment_count>
      <attachid>263248</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-10-16 12:34:13 -0700</bug_when>
    <thetext>Comment on attachment 263248
Patch

Will re-upload another integration based on initial feedback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1134031</commentid>
    <comment_count>13</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2015-10-16 13:56:28 -0700</bug_when>
    <thetext>&lt;rdar://problem/23149771&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1134038</commentid>
    <comment_count>14</comment_count>
      <attachid>263327</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-10-16 14:07:15 -0700</bug_when>
    <thetext>Created attachment 263327
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1134039</commentid>
    <comment_count>15</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-10-16 14:08:53 -0700</bug_when>
    <thetext>Ok Antti, https://www.youtube.com/watch?v=x5kisPBwZOM :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1134040</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-16 14:10:45 -0700</bug_when>
    <thetext>Attachment 263327 did not pass style-queue:


ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheStorage.cpp:156:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheStorage.cpp:876:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheStorage.h:68:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheStorage.h:173:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 4 in 7 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>1134380</commentid>
    <comment_count>17</comment_count>
      <attachid>263327</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-10-18 16:14:54 -0700</bug_when>
    <thetext>Comment on attachment 263327
Patch

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

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCache.cpp:54
&gt; +static const String resourceType()

More efficient to return const String&amp; to avoid reference count churn every time this is called.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1134559</commentid>
    <comment_count>18</comment_count>
      <attachid>263327</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-10-19 05:49:10 -0700</bug_when>
    <thetext>Comment on attachment 263327
Patch

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

r=me as well, looks good.

&gt; Source/WebKit2/ChangeLog:18
&gt; +        - WebKitCache/Version 5/[Partition]/[Type]/[Hash]-bodyblob (Optional)

&quot;bodyblob&quot; is bit strange. How about &quot;blob&quot; or &quot;data&quot;?

&gt;&gt; Source/WebKit2/NetworkProcess/cache/NetworkCache.cpp:54
&gt;&gt; +static const String resourceType()
&gt; 
&gt; More efficient to return const String&amp; to avoid reference count churn every time this is called.

It would also make sense to use AtomicString for type identifier. Doesn&apos;t need to be in this patch if there are complications.

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheStorage.cpp:902
&gt;          deleteEmptyRecordsDirectories(recordsPath);

I think this patch will leave empty partition directories behind. This can be solved separately though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1134639</commentid>
    <comment_count>19</comment_count>
      <attachid>263496</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-10-19 11:26:48 -0700</bug_when>
    <thetext>Created attachment 263496
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1134640</commentid>
    <comment_count>20</comment_count>
      <attachid>263327</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-10-19 11:28:33 -0700</bug_when>
    <thetext>Comment on attachment 263327
Patch

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

&gt;&gt; Source/WebKit2/ChangeLog:18
&gt;&gt; +        - WebKitCache/Version 5/[Partition]/[Type]/[Hash]-bodyblob (Optional)
&gt; 
&gt; &quot;bodyblob&quot; is bit strange. How about &quot;blob&quot; or &quot;data&quot;?

Renamed to &quot;blob&quot;

&gt;&gt;&gt; Source/WebKit2/NetworkProcess/cache/NetworkCache.cpp:54
&gt;&gt;&gt; +static const String resourceType()
&gt;&gt; 
&gt;&gt; More efficient to return const String&amp; to avoid reference count churn every time this is called.
&gt; 
&gt; It would also make sense to use AtomicString for type identifier. Doesn&apos;t need to be in this patch if there are complications.

Ok, now returns a &quot;const AtomicString&amp;&quot;

&gt;&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheStorage.cpp:902
&gt;&gt;          deleteEmptyRecordsDirectories(recordsPath);
&gt; 
&gt; I think this patch will leave empty partition directories behind. This can be solved separately though.

Right, the last iteration updates deleteEmptyRecordsDirectories() to delete empty [type] subdirectories before attempting to delete the [partitition] ones.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1134641</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-19 11:28:48 -0700</bug_when>
    <thetext>Attachment 263496 did not pass style-queue:


ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheStorage.cpp:156:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheStorage.cpp:888:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheStorage.h:68:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheStorage.h:173:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 4 in 7 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>1134659</commentid>
    <comment_count>22</comment_count>
      <attachid>263496</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-19 12:22:02 -0700</bug_when>
    <thetext>Comment on attachment 263496
Patch

Clearing flags on attachment: 263496

Committed r191306: &lt;http://trac.webkit.org/changeset/191306&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1134660</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-19 12:22:07 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1134990</commentid>
    <comment_count>24</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-20 13:46:54 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 150371</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1135023</commentid>
    <comment_count>25</comment_count>
      <attachid>263621</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-10-20 15:22:18 -0700</bug_when>
    <thetext>Created attachment 263621
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1135024</commentid>
    <comment_count>26</comment_count>
      <attachid>263496</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-10-20 15:23:33 -0700</bug_when>
    <thetext>Comment on attachment 263496
Patch

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

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheStorage.cpp:165
&gt; +            if (!actualType.isEmpty() &amp;&amp; expectedType != actualType)

This was supposed to be:
if (! expectedType.isEmpty() &amp;&amp; expectedType != actualType)

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheStorage.cpp:168
&gt; +            traverseDirectory(partitionPath, [&amp;function, &amp;recordDirectoryPath, &amp;actualType](const String&amp; fileName, DirectoryEntryType entryType) {

Should pass recordDirectoryPath instead of partitionPath here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1135025</commentid>
    <comment_count>27</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-20 15:24:40 -0700</bug_when>
    <thetext>Attachment 263621 did not pass style-queue:


ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheStorage.cpp:156:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheStorage.cpp:888:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheStorage.h:68:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheStorage.h:173:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 4 in 7 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>1135032</commentid>
    <comment_count>28</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-10-20 15:41:09 -0700</bug_when>
    <thetext>Waiting for bots to recover before I land again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1135144</commentid>
    <comment_count>29</comment_count>
      <attachid>263621</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-20 23:41:55 -0700</bug_when>
    <thetext>Comment on attachment 263621
Patch

Clearing flags on attachment: 263621

Committed r191377: &lt;http://trac.webkit.org/changeset/191377&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1135145</commentid>
    <comment_count>30</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-20 23:42:03 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263243</attachid>
            <date>2015-10-15 20:47:56 -0700</date>
            <delta_ts>2015-10-15 21:31:11 -0700</delta_ts>
            <desc>WIP Patch</desc>
            <filename>NetworkCache_metadata_wip.patch</filename>
            <type>text/plain</type>
            <size>36496</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGUuY3BwCmluZGV4IGFmODc0OTMuLmRjMmZlNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNwcApAQCAtNTAsNiArNTAsMTIg
QEAKIG5hbWVzcGFjZSBXZWJLaXQgewogbmFtZXNwYWNlIE5ldHdvcmtDYWNoZSB7CiAKK3N0YXRp
YyBjb25zdCBTdHJpbmcgcmVzb3VyY2VUeXBlKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8Y29uc3QgU3RyaW5nPiByZXNvdXJjZShBU0NJSUxpdGVyYWwoInJlc291cmNlIikpOworICAg
IHJldHVybiByZXNvdXJjZTsKK30KKwogQ2FjaGUmIHNpbmdsZXRvbigpCiB7CiAgICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPENhY2hlPiBpbnN0YW5jZTsKQEAgLTM1Miw3ICszNTgsNyBAQCB2b2lk
IENhY2hlOjpyZXRyaWV2ZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIG9yaWdpbmFs
UmVxdWVzdCwgdWludDY0X3QgdwogICAgIGF1dG8gc3RhcnRUaW1lID0gc3RkOjpjaHJvbm86OnN5
c3RlbV9jbG9jazo6bm93KCk7CiAgICAgYXV0byBwcmlvcml0eSA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihvcmlnaW5hbFJlcXVlc3QucHJpb3JpdHkoKSk7CiAKLSAgICBtX3N0b3JhZ2UtPnJldHJp
ZXZlKHN0b3JhZ2VLZXksIHByaW9yaXR5LCBbdGhpcywgb3JpZ2luYWxSZXF1ZXN0LCBjb21wbGV0
aW9uSGFuZGxlciwgc3RhcnRUaW1lLCBzdG9yYWdlS2V5LCB3ZWJQYWdlSURdKHN0ZDo6dW5pcXVl
X3B0cjxTdG9yYWdlOjpSZWNvcmQ+IHJlY29yZCkgeworICAgIG1fc3RvcmFnZS0+cmV0cmlldmUo
c3RvcmFnZUtleSwgcmVzb3VyY2VUeXBlKCksIHByaW9yaXR5LCBbdGhpcywgb3JpZ2luYWxSZXF1
ZXN0LCBjb21wbGV0aW9uSGFuZGxlciwgc3RhcnRUaW1lLCBzdG9yYWdlS2V5LCB3ZWJQYWdlSURd
KHN0ZDo6dW5pcXVlX3B0cjxTdG9yYWdlOjpSZWNvcmQ+IHJlY29yZCkgewogICAgICAgICBpZiAo
IXJlY29yZCkgewogICAgICAgICAgICAgTE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3b3JrUHJvY2Vz
cykgbm90IGZvdW5kIGluIHN0b3JhZ2UiKTsKIApAQCAtNDI1LDcgKzQzMSw3IEBAIHZvaWQgQ2Fj
aGU6OnN0b3JlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgb3JpZ2luYWxSZXF1ZXN0
LCBjb25zdCBXZWJDb3JlCiAKICAgICBhdXRvIHJlY29yZCA9IGNhY2hlRW50cnkuZW5jb2RlQXNT
dG9yYWdlUmVjb3JkKCk7CiAKLSAgICBtX3N0b3JhZ2UtPnN0b3JlKHJlY29yZCwgW2NvbXBsZXRp
b25IYW5kbGVyXShjb25zdCBEYXRhJiBib2R5RGF0YSkgeworICAgIG1fc3RvcmFnZS0+c3RvcmUo
cmVjb3JkLCByZXNvdXJjZVR5cGUoKSwgW2NvbXBsZXRpb25IYW5kbGVyXShjb25zdCBEYXRhJiBi
b2R5RGF0YSkgewogICAgICAgICBNYXBwZWRCb2R5IG1hcHBlZEJvZHk7CiAjaWYgRU5BQkxFKFNI
QVJFQUJMRV9SRVNPVVJDRSkKICAgICAgICAgaWYgKFJlZlB0cjxTaGFyZWRNZW1vcnk+IHNoYXJl
ZE1lbW9yeSA9IGJvZHlEYXRhLnRyeUNyZWF0ZVNoYXJlZE1lbW9yeSgpKSB7CkBAIC00NTAsNyAr
NDU2LDcgQEAgdm9pZCBDYWNoZTo6dXBkYXRlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dCYgb3JpZ2luYWxSZXF1ZXN0LCB1aW50NjRfdCB3ZWIKIAogICAgIGF1dG8gdXBkYXRlUmVjb3Jk
ID0gdXBkYXRlRW50cnkuZW5jb2RlQXNTdG9yYWdlUmVjb3JkKCk7CiAKLSAgICBtX3N0b3JhZ2Ut
PnN0b3JlKHVwZGF0ZVJlY29yZCwgeyB9KTsKKyAgICBtX3N0b3JhZ2UtPnN0b3JlKHVwZGF0ZVJl
Y29yZCwgcmVzb3VyY2VUeXBlKCksIHsgfSk7CiAKICAgICBpZiAobV9zdGF0aXN0aWNzKQogICAg
ICAgICBtX3N0YXRpc3RpY3MtPnJlY29yZFJldmFsaWRhdGlvblN1Y2Nlc3Mod2ViUGFnZUlELCBl
eGlzdGluZ0VudHJ5LmtleSgpLCBvcmlnaW5hbFJlcXVlc3QpOwpAQCAtNDYwLDcgKzQ2Niw3IEBA
IHZvaWQgQ2FjaGU6OnJlbW92ZShjb25zdCBLZXkmIGtleSkKIHsKICAgICBBU1NFUlQoaXNFbmFi
bGVkKCkpOwogCi0gICAgbV9zdG9yYWdlLT5yZW1vdmUoa2V5KTsKKyAgICBtX3N0b3JhZ2UtPnJl
bW92ZShrZXksIHJlc291cmNlVHlwZSgpKTsKIH0KIAogdm9pZCBDYWNoZTo6cmVtb3ZlKGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKQEAgLTU2Nyw3ICs1NzMsNyBAQCB2
b2lkIENhY2hlOjpjbGVhcihzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjp0aW1lX3BvaW50IG1v
ZGlmaWVkU2luY2UsIHN0ZDo6ZnVuYwogICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2go
Y29tcGxldGlvbkhhbmRsZXIpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIG1fc3RvcmFn
ZS0+Y2xlYXIobW9kaWZpZWRTaW5jZSwgV1RGOjptb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Cisg
ICAgbV9zdG9yYWdlLT5jbGVhcihyZXNvdXJjZVR5cGUoKSwgbW9kaWZpZWRTaW5jZSwgV1RGOjpt
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKICAgICBkZWxldGVEdW1wRmlsZSgpOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hl
U3RhdGlzdGljcy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVTdGF0aXN0aWNzLmNwcAppbmRleCBmYmUxNDVlLi5lYjFmNDgzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdGF0aXN0
aWNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3Jr
Q2FjaGVTdGF0aXN0aWNzLmNwcApAQCAtMTQ0LDcgKzE0NCw5IEBAIHZvaWQgU3RhdGlzdGljczo6
Ym9vdHN0cmFwRnJvbU5ldHdvcmtDYWNoZShjb25zdCBTdHJpbmcmIG5ldHdvcmtDYWNoZVBhdGgp
CiAgICAgTE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3b3JrUHJvY2VzcykgQm9vdHN0cmFwcGluZyB0
aGUgbmV0d29yayBjYWNoZSBzdGF0aXN0aWNzIGRhdGFiYXNlIGZyb20gdGhlIG5ldHdvcmsgY2Fj
aGUuLi4iKTsKIAogICAgIFZlY3RvcjxTdHJpbmdDYXB0dXJlPiBoYXNoZXM7Ci0gICAgdHJhdmVy
c2VSZWNvcmRzRmlsZXMobmV0d29ya0NhY2hlUGF0aCwgWyZoYXNoZXNdKGNvbnN0IFN0cmluZyYg
aGFzaFN0cmluZywgY29uc3QgU3RyaW5nJikgeworICAgIEhhc2hTZXQ8U3RyaW5nPiBib2R5T25s
eTsKKyAgICBib2R5T25seS5hZGQoQVNDSUlMaXRlcmFsKCJib2R5IikpOworICAgIHRyYXZlcnNl
UmVjb3Jkc0ZpbGVzKG5ldHdvcmtDYWNoZVBhdGgsIGJvZHlPbmx5LCBbJmhhc2hlc10oY29uc3Qg
U3RyaW5nJiAvKmZpbGVOYW1lKi8sIGNvbnN0IFN0cmluZyYgaGFzaFN0cmluZywgY29uc3QgU3Ry
aW5nJiAvKnR5cGUqLywgY29uc3QgU3RyaW5nJiAvKnBhcnRpdGlvblBhdGgqLykgewogICAgICAg
ICBLZXk6Okhhc2hUeXBlIGhhc2g7CiAgICAgICAgIGlmICghS2V5OjpzdHJpbmdUb0hhc2goaGFz
aFN0cmluZywgaGFzaCkpCiAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuY3Bw
CmluZGV4IGZhNWJhN2QuLjI2ZWRjOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuY3BwCkBAIC00Niwx
NSArNDYsMjcgQEAgbmFtZXNwYWNlIE5ldHdvcmtDYWNoZSB7CiBzdGF0aWMgY29uc3QgY2hhciB2
ZXJzaW9uRGlyZWN0b3J5UHJlZml4W10gPSAiVmVyc2lvbiAiOwogc3RhdGljIGNvbnN0IGNoYXIg
cmVjb3Jkc0RpcmVjdG9yeU5hbWVbXSA9ICJSZWNvcmRzIjsKIHN0YXRpYyBjb25zdCBjaGFyIGJs
b2JzRGlyZWN0b3J5TmFtZVtdID0gIkJsb2JzIjsKLXN0YXRpYyBjb25zdCBjaGFyIGJvZHlQb3N0
Zml4W10gPSAiLWJvZHkiOworc3RhdGljIGNvbnN0IGNoYXIgcmVzb3VyY2VUeXBlW10gPSAicmVz
b3VyY2UiOworc3RhdGljIGNvbnN0IGNoYXIgYmxvYlN1ZmZpeFtdID0gImJsb2IiOworCitzdGF0
aWMgYm9vbCB0eXBlVXNlc0Jsb2JTdG9yYWdlKGNvbnN0IFN0cmluZyYgdHlwZSkKK3sKKyAgICBy
ZXR1cm4gdHlwZSA9PSByZXNvdXJjZVR5cGU7Cit9CisKK3N0YXRpYyBib29sIHR5cGVVc2VzSGVh
ZGVyKGNvbnN0IFN0cmluZyYgdHlwZSkKK3sKKyAgICByZXR1cm4gdHlwZSA9PSByZXNvdXJjZVR5
cGU7Cit9CiAKIHN0YXRpYyBkb3VibGUgY29tcHV0ZVJlY29yZFdvcnRoKEZpbGVUaW1lcyk7CiAK
IHN0cnVjdCBTdG9yYWdlOjpSZWFkT3BlcmF0aW9uIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKIHB1YmxpYzoKLSAgICBSZWFkT3BlcmF0aW9uKGNvbnN0IEtleSYga2V5LCBjb25zdCBS
ZXRyaWV2ZUNvbXBsZXRpb25IYW5kbGVyJiBjb21wbGV0aW9uSGFuZGxlcikKKyAgICBSZWFkT3Bl
cmF0aW9uKGNvbnN0IEtleSYga2V5LCBjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFJldHJpZXZl
Q29tcGxldGlvbkhhbmRsZXImIGNvbXBsZXRpb25IYW5kbGVyKQogICAgICAgICA6IGtleShrZXkp
CisgICAgICAgICwgdHlwZSh0eXBlKQogICAgICAgICAsIGNvbXBsZXRpb25IYW5kbGVyKGNvbXBs
ZXRpb25IYW5kbGVyKQogICAgIHsgfQogCkBAIC02Miw2ICs3NCw3IEBAIHB1YmxpYzoKICAgICBi
b29sIGZpbmlzaCgpOwogCiAgICAgY29uc3QgS2V5IGtleTsKKyAgICBjb25zdCBTdHJpbmcgdHlw
ZTsKICAgICBjb25zdCBSZXRyaWV2ZUNvbXBsZXRpb25IYW5kbGVyIGNvbXBsZXRpb25IYW5kbGVy
OwogICAgIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxSZWNvcmQ+IHJlc3VsdFJlY29yZDsKQEAgLTk5
LDEyICsxMTIsMTQgQEAgYm9vbCBTdG9yYWdlOjpSZWFkT3BlcmF0aW9uOjpmaW5pc2goKQogc3Ry
dWN0IFN0b3JhZ2U6OldyaXRlT3BlcmF0aW9uIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKIHB1YmxpYzoKLSAgICBXcml0ZU9wZXJhdGlvbihjb25zdCBSZWNvcmQmIHJlY29yZCwgY29u
c3QgTWFwcGVkQm9keUhhbmRsZXImIG1hcHBlZEJvZHlIYW5kbGVyKQorICAgIFdyaXRlT3BlcmF0
aW9uKGNvbnN0IFJlY29yZCYgcmVjb3JkLCBjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IE1hcHBl
ZEJvZHlIYW5kbGVyJiBtYXBwZWRCb2R5SGFuZGxlcikKICAgICAgICAgOiByZWNvcmQocmVjb3Jk
KQorICAgICAgICAsIHR5cGUodHlwZSkKICAgICAgICAgLCBtYXBwZWRCb2R5SGFuZGxlcihtYXBw
ZWRCb2R5SGFuZGxlcikKICAgICB7IH0KICAgICAKICAgICBjb25zdCBSZWNvcmQgcmVjb3JkOwor
ICAgIGNvbnN0IFN0cmluZyB0eXBlOwogICAgIGNvbnN0IE1hcHBlZEJvZHlIYW5kbGVyIG1hcHBl
ZEJvZHlIYW5kbGVyOwogCiAgICAgc3RkOjphdG9taWM8dW5zaWduZWQ+IGFjdGl2ZUNvdW50IHsg
MCB9OwpAQCAtMTI2LDYgKzE0MSwyNSBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgYWN0aXZlQ291
bnQgeyAwIH07CiB9OwogCitzdGF0aWMgdm9pZCBoYXNoU3RyaW5nKFNIQTEmIHNoYTEsIGNvbnN0
IFN0cmluZyYgc3RyaW5nKQoreworICAgIGF1dG8gY1N0cmluZyA9IHN0cmluZy51dGY4KCk7Cisg
ICAgc2hhMS5hZGRCeXRlcyhyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihjU3RyaW5n
LmRhdGEoKSksIGNTdHJpbmcubGVuZ3RoKCkgKyAxKTsKK30KKworc3RhdGljIFNIQTE6OkRpZ2Vz
dCBtYWtlUmVjb3JkRmlsdGVyS2V5KGNvbnN0IFN0cmluZyYgaGFzaEFzU3RyaW5nLCBjb25zdCBT
dHJpbmcmIHR5cGUpCit7CisgICAgQVNTRVJUKCFoYXNoQXNTdHJpbmcuaXNOdWxsKCkpOworICAg
IEFTU0VSVCghdHlwZS5pc051bGwoKSk7CisKKyAgICBTSEExIHNoYTE7CisgICAgaGFzaFN0cmlu
ZyhzaGExLCBoYXNoQXNTdHJpbmcpOworICAgIGhhc2hTdHJpbmcoc2hhMSwgdHlwZSk7CisgICAg
U0hBMTo6RGlnZXN0IGhhc2g7CisgICAgc2hhMS5jb21wdXRlSGFzaChoYXNoKTsKKyAgICByZXR1
cm4gaGFzaDsKK30KKwogc3RkOjp1bmlxdWVfcHRyPFN0b3JhZ2U+IFN0b3JhZ2U6Om9wZW4oY29u
c3QgU3RyaW5nJiBjYWNoZVBhdGgpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsK
QEAgLTE1MSwxNiArMTg1LDIzIEBAIHN0YXRpYyBTdHJpbmcgbWFrZUJsb2JEaXJlY3RvcnlQYXRo
KGNvbnN0IFN0cmluZyYgYmFzZURpcmVjdG9yeVBhdGgpCiAgICAgcmV0dXJuIFdlYkNvcmU6OnBh
dGhCeUFwcGVuZGluZ0NvbXBvbmVudChtYWtlVmVyc2lvbmVkRGlyZWN0b3J5UGF0aChiYXNlRGly
ZWN0b3J5UGF0aCksIGJsb2JzRGlyZWN0b3J5TmFtZSk7CiB9CiAKLXZvaWQgdHJhdmVyc2VSZWNv
cmRzRmlsZXMoY29uc3QgU3RyaW5nJiByZWNvcmRzUGF0aCwgY29uc3Qgc3RkOjpmdW5jdGlvbjx2
b2lkIChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKT4mIGZ1bmN0aW9uKQordm9pZCB0cmF2
ZXJzZVJlY29yZHNGaWxlcyhjb25zdCBTdHJpbmcmIHJlY29yZHNQYXRoLCBjb25zdCBIYXNoU2V0
PFN0cmluZz4mIHR5cGVzLCBjb25zdCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGNvbnN0IFN0cmluZyYg
ZmlsZU5hbWUsIGNvbnN0IFN0cmluZyYgaGFzaCwgY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBT
dHJpbmcmIHBhcnRpdGlvblBhdGgpPiYgZnVuY3Rpb24pCiB7Ci0gICAgdHJhdmVyc2VEaXJlY3Rv
cnkocmVjb3Jkc1BhdGgsIFsmcmVjb3Jkc1BhdGgsICZmdW5jdGlvbl0oY29uc3QgU3RyaW5nJiBz
dWJkaXJOYW1lLCBEaXJlY3RvcnlFbnRyeVR5cGUgdHlwZSkgewotICAgICAgICBpZiAodHlwZSAh
PSBEaXJlY3RvcnlFbnRyeVR5cGU6OkRpcmVjdG9yeSkKKyAgICB0cmF2ZXJzZURpcmVjdG9yeShy
ZWNvcmRzUGF0aCwgWyZyZWNvcmRzUGF0aCwgJmZ1bmN0aW9uLCAmdHlwZXNdKGNvbnN0IFN0cmlu
ZyYgc3ViZGlyTmFtZSwgRGlyZWN0b3J5RW50cnlUeXBlIGVudHJ5VHlwZSkgeworICAgICAgICBp
ZiAoZW50cnlUeXBlICE9IERpcmVjdG9yeUVudHJ5VHlwZTo6RGlyZWN0b3J5KQogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICBTdHJpbmcgcGFydGl0aW9uUGF0aCA9IFdlYkNvcmU6OnBhdGhC
eUFwcGVuZGluZ0NvbXBvbmVudChyZWNvcmRzUGF0aCwgc3ViZGlyTmFtZSk7Ci0gICAgICAgIHRy
YXZlcnNlRGlyZWN0b3J5KHBhcnRpdGlvblBhdGgsIFsmZnVuY3Rpb24sICZwYXJ0aXRpb25QYXRo
XShjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBEaXJlY3RvcnlFbnRyeVR5cGUgdHlwZSkgewotICAg
ICAgICAgICAgaWYgKHR5cGUgIT0gRGlyZWN0b3J5RW50cnlUeXBlOjpGaWxlKQorICAgICAgICB0
cmF2ZXJzZURpcmVjdG9yeShwYXJ0aXRpb25QYXRoLCBbJmZ1bmN0aW9uLCAmcGFydGl0aW9uUGF0
aCwgJnR5cGVzXShjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBEaXJlY3RvcnlFbnRyeVR5cGUgZW50
cnlUeXBlKSB7CisgICAgICAgICAgICBpZiAoZW50cnlUeXBlICE9IERpcmVjdG9yeUVudHJ5VHlw
ZTo6RmlsZSB8fCBmaWxlTmFtZVtLZXk6Omhhc2hTdHJpbmdMZW5ndGgoKV0gIT0gJy0nKQogICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGZ1bmN0aW9uKGZpbGVOYW1lLCBwYXJ0
aXRpb25QYXRoKTsKKworICAgICAgICAgICAgYXV0byB0eXBlID0gZmlsZU5hbWUuc3Vic3RyaW5n
KEtleTo6aGFzaFN0cmluZ0xlbmd0aCgpICsgMSk7CisKKyAgICAgICAgICAgIGlmICghdHlwZXMu
aXNFbXB0eSgpICYmICF0eXBlcy5jb250YWlucyh0eXBlKSkKKyAgICAgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgICAgIGF1dG8gaGFzaFN0cmluZyA9IGZpbGVOYW1lLnN1YnN0cmluZygw
LCBLZXk6Omhhc2hTdHJpbmdMZW5ndGgoKSk7CisgICAgICAgICAgICBmdW5jdGlvbihmaWxlTmFt
ZSwgaGFzaFN0cmluZywgdHlwZSwgcGFydGl0aW9uUGF0aCk7CiAgICAgICAgIH0pOwogICAgIH0p
OwogfQpAQCAtMjI1LDE0ICsyNjYsMTMgQEAgdm9pZCBTdG9yYWdlOjpzeW5jaHJvbml6ZSgpCiAK
ICAgICBiYWNrZ3JvdW5kSU9RdWV1ZSgpLmRpc3BhdGNoKFt0aGlzXSB7CiAgICAgICAgIGF1dG8g
cmVjb3JkRmlsdGVyID0gc3RkOjptYWtlX3VuaXF1ZTxDb250ZW50c0ZpbHRlcj4oKTsKLSAgICAg
ICAgYXV0byBib2R5RmlsdGVyID0gc3RkOjptYWtlX3VuaXF1ZTxDb250ZW50c0ZpbHRlcj4oKTsK
KyAgICAgICAgYXV0byBib2R5QmxvYkZpbHRlciA9IHN0ZDo6bWFrZV91bmlxdWU8Q29udGVudHNG
aWx0ZXI+KCk7CiAgICAgICAgIHNpemVfdCByZWNvcmRzU2l6ZSA9IDA7CiAgICAgICAgIHVuc2ln
bmVkIGNvdW50ID0gMDsKLSAgICAgICAgdHJhdmVyc2VSZWNvcmRzRmlsZXMocmVjb3Jkc1BhdGgo
KSwgWyZyZWNvcmRGaWx0ZXIsICZib2R5RmlsdGVyLCAmcmVjb3Jkc1NpemUsICZjb3VudF0oY29u
c3QgU3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgU3RyaW5nJiBwYXJ0aXRpb25QYXRoKSB7CisgICAg
ICAgIEhhc2hTZXQ8U3RyaW5nPiBhbnlUeXBlOworICAgICAgICB0cmF2ZXJzZVJlY29yZHNGaWxl
cyhyZWNvcmRzUGF0aCgpLCBhbnlUeXBlLCBbJnJlY29yZEZpbHRlciwgJmJvZHlCbG9iRmlsdGVy
LCAmcmVjb3Jkc1NpemUsICZjb3VudF0oY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgU3Ry
aW5nJiBoYXNoU3RyaW5nLCBjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgcGFydGl0
aW9uUGF0aCkgewogICAgICAgICAgICAgYXV0byBmaWxlUGF0aCA9IFdlYkNvcmU6OnBhdGhCeUFw
cGVuZGluZ0NvbXBvbmVudChwYXJ0aXRpb25QYXRoLCBmaWxlTmFtZSk7CiAKLSAgICAgICAgICAg
IGJvb2wgaXNCb2R5ID0gZmlsZU5hbWUuZW5kc1dpdGgoYm9keVBvc3RmaXgpOwotICAgICAgICAg
ICAgU3RyaW5nIGhhc2hTdHJpbmcgPSBpc0JvZHkgPyBmaWxlTmFtZS5zdWJzdHJpbmcoMCwgS2V5
OjpoYXNoU3RyaW5nTGVuZ3RoKCkpIDogZmlsZU5hbWU7CiAgICAgICAgICAgICBLZXk6Okhhc2hU
eXBlIGhhc2g7CiAgICAgICAgICAgICBpZiAoIUtleTo6c3RyaW5nVG9IYXNoKGhhc2hTdHJpbmcs
IGhhc2gpKSB7CiAgICAgICAgICAgICAgICAgV2ViQ29yZTo6ZGVsZXRlRmlsZShmaWxlUGF0aCk7
CkBAIC0yNDQsMzEgKzI4NCwzNCBAQCB2b2lkIFN0b3JhZ2U6OnN5bmNocm9uaXplKCkKICAgICAg
ICAgICAgICAgICBXZWJDb3JlOjpkZWxldGVGaWxlKGZpbGVQYXRoKTsKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaXNCb2R5KSB7Ci0gICAg
ICAgICAgICAgICAgYm9keUZpbHRlci0+YWRkKGhhc2gpOworCisgICAgICAgICAgICBpZiAodHlw
ZS5lbmRzV2l0aChibG9iU3VmZml4KSkgeworICAgICAgICAgICAgICAgIGJvZHlCbG9iRmlsdGVy
LT5hZGQoaGFzaCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAg
ICAgICAgICAgcmVjb3JkRmlsdGVyLT5hZGQoaGFzaCk7CisKKyAgICAgICAgICAgIGF1dG8gcmVj
b3JkRmlsdGVyS2V5ID0gbWFrZVJlY29yZEZpbHRlcktleShoYXNoU3RyaW5nLCB0eXBlKTsKKyAg
ICAgICAgICAgIHJlY29yZEZpbHRlci0+YWRkKHJlY29yZEZpbHRlcktleSk7CiAgICAgICAgICAg
ICByZWNvcmRzU2l6ZSArPSBmaWxlU2l6ZTsKICAgICAgICAgICAgICsrY291bnQ7CiAgICAgICAg
IH0pOwogCiAgICAgICAgIGF1dG8qIHJlY29yZEZpbHRlclB0ciA9IHJlY29yZEZpbHRlci5yZWxl
YXNlKCk7Ci0gICAgICAgIGF1dG8qIGJvZHlGaWx0ZXJQdHIgPSBib2R5RmlsdGVyLnJlbGVhc2Uo
KTsKLSAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt0aGlzLCByZWNvcmRGaWx0ZXJQ
dHIsIGJvZHlGaWx0ZXJQdHIsIHJlY29yZHNTaXplXSB7CisgICAgICAgIGF1dG8qIGJvZHlCbG9i
RmlsdGVyUHRyID0gYm9keUJsb2JGaWx0ZXIucmVsZWFzZSgpOworICAgICAgICBSdW5Mb29wOjpt
YWluKCkuZGlzcGF0Y2goW3RoaXMsIHJlY29yZEZpbHRlclB0ciwgYm9keUJsb2JGaWx0ZXJQdHIs
IHJlY29yZHNTaXplXSB7CiAgICAgICAgICAgICBhdXRvIHJlY29yZEZpbHRlciA9IHN0ZDo6dW5p
cXVlX3B0cjxDb250ZW50c0ZpbHRlcj4ocmVjb3JkRmlsdGVyUHRyKTsKLSAgICAgICAgICAgIGF1
dG8gYm9keUZpbHRlciA9IHN0ZDo6dW5pcXVlX3B0cjxDb250ZW50c0ZpbHRlcj4oYm9keUZpbHRl
clB0cik7CisgICAgICAgICAgICBhdXRvIGJvZHlCbG9iRmlsdGVyID0gc3RkOjp1bmlxdWVfcHRy
PENvbnRlbnRzRmlsdGVyPihib2R5QmxvYkZpbHRlclB0cik7CiAKLSAgICAgICAgICAgIGZvciAo
YXV0byYgaGFzaCA6IG1fcmVjb3JkRmlsdGVySGFzaGVzQWRkZWREdXJpbmdTeW5jaHJvbml6YXRp
b24pCi0gICAgICAgICAgICAgICAgcmVjb3JkRmlsdGVyLT5hZGQoaGFzaCk7CisgICAgICAgICAg
ICBmb3IgKGF1dG8mIHJlY29yZEZpbHRlcktleSA6IG1fcmVjb3JkRmlsdGVySGFzaGVzQWRkZWRE
dXJpbmdTeW5jaHJvbml6YXRpb24pCisgICAgICAgICAgICAgICAgcmVjb3JkRmlsdGVyLT5hZGQo
cmVjb3JkRmlsdGVyS2V5KTsKICAgICAgICAgICAgIG1fcmVjb3JkRmlsdGVySGFzaGVzQWRkZWRE
dXJpbmdTeW5jaHJvbml6YXRpb24uY2xlYXIoKTsKIAotICAgICAgICAgICAgZm9yIChhdXRvJiBo
YXNoIDogbV9ib2R5RmlsdGVySGFzaGVzQWRkZWREdXJpbmdTeW5jaHJvbml6YXRpb24pCi0gICAg
ICAgICAgICAgICAgYm9keUZpbHRlci0+YWRkKGhhc2gpOwotICAgICAgICAgICAgbV9ib2R5Rmls
dGVySGFzaGVzQWRkZWREdXJpbmdTeW5jaHJvbml6YXRpb24uY2xlYXIoKTsKKyAgICAgICAgICAg
IGZvciAoYXV0byYgaGFzaCA6IG1fYm9keUJsb2JGaWx0ZXJIYXNoZXNBZGRlZER1cmluZ1N5bmNo
cm9uaXphdGlvbikKKyAgICAgICAgICAgICAgICBib2R5QmxvYkZpbHRlci0+YWRkKGhhc2gpOwor
ICAgICAgICAgICAgbV9ib2R5QmxvYkZpbHRlckhhc2hlc0FkZGVkRHVyaW5nU3luY2hyb25pemF0
aW9uLmNsZWFyKCk7CiAKICAgICAgICAgICAgIG1fcmVjb3JkRmlsdGVyID0gV1RGOjptb3ZlKHJl
Y29yZEZpbHRlcik7Ci0gICAgICAgICAgICBtX2JvZHlGaWx0ZXIgPSBXVEY6Om1vdmUoYm9keUZp
bHRlcik7CisgICAgICAgICAgICBtX2JvZHlCbG9iRmlsdGVyID0gV1RGOjptb3ZlKGJvZHlCbG9i
RmlsdGVyKTsKICAgICAgICAgICAgIG1fYXBwcm94aW1hdGVSZWNvcmRzU2l6ZSA9IHJlY29yZHNT
aXplOwogICAgICAgICAgICAgbV9zeW5jaHJvbml6YXRpb25JblByb2dyZXNzID0gZmFsc2U7CiAg
ICAgICAgIH0pOwpAQCAtMjc3LDUyICszMjAsNjEgQEAgdm9pZCBTdG9yYWdlOjpzeW5jaHJvbml6
ZSgpCiAKICAgICAgICAgZGVsZXRlRW1wdHlSZWNvcmRzRGlyZWN0b3JpZXMocmVjb3Jkc1BhdGgo
KSk7CiAKLSAgICAgICAgTE9HKE5ldHdvcmtDYWNoZVN0b3JhZ2UsICIoTmV0d29ya1Byb2Nlc3Mp
IGNhY2hlIHN5bmNocm9uaXphdGlvbiBjb21wbGV0ZWQgc2l6ZT0lenUgY291bnQ9JWQiLCByZWNv
cmRzU2l6ZSwgY291bnQpOworICAgICAgICBMT0coTmV0d29ya0NhY2hlU3RvcmFnZSwgIihOZXR3
b3JrUHJvY2VzcykgY2FjaGUgc3luY2hyb25pemF0aW9uIGNvbXBsZXRlZCBzaXplPSV6dSBjb3Vu
dD0ldSIsIHJlY29yZHNTaXplLCBjb3VudCk7CiAgICAgfSk7CiB9CiAKLXZvaWQgU3RvcmFnZTo6
YWRkVG9SZWNvcmRGaWx0ZXIoY29uc3QgS2V5JiBrZXkpCit2b2lkIFN0b3JhZ2U6OmFkZFRvUmVj
b3JkRmlsdGVyKGNvbnN0IEtleSYga2V5LCBjb25zdCBTdHJpbmcmIHR5cGUpCiB7CiAgICAgQVNT
RVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBBU1NFUlQoIXR5cGUuZW5kc1dpdGgoYmxvYlN1
ZmZpeCkpOwogCisgICAgYXV0byByZWNvcmRGaWx0ZXJLZXkgPSBtYWtlUmVjb3JkRmlsdGVyS2V5
KGtleS5oYXNoQXNTdHJpbmcoKSwgdHlwZSk7CiAgICAgaWYgKG1fcmVjb3JkRmlsdGVyKQotICAg
ICAgICBtX3JlY29yZEZpbHRlci0+YWRkKGtleS5oYXNoKCkpOworICAgICAgICBtX3JlY29yZEZp
bHRlci0+YWRkKHJlY29yZEZpbHRlcktleSk7CiAKICAgICAvLyBJZiB3ZSBnZXQgbmV3IGVudHJp
ZXMgZHVyaW5nIGZpbHRlciBzeW5jaHJvbml6YXRpb24gdGFrZSBjYXJlIHRvIGFkZCB0aGVtIHRv
IHRoZSBuZXcgZmlsdGVyIGFzIHdlbGwuCiAgICAgaWYgKG1fc3luY2hyb25pemF0aW9uSW5Qcm9n
cmVzcykKLSAgICAgICAgbV9yZWNvcmRGaWx0ZXJIYXNoZXNBZGRlZER1cmluZ1N5bmNocm9uaXph
dGlvbi5hcHBlbmQoa2V5Lmhhc2goKSk7CisgICAgICAgIG1fcmVjb3JkRmlsdGVySGFzaGVzQWRk
ZWREdXJpbmdTeW5jaHJvbml6YXRpb24uYXBwZW5kKHJlY29yZEZpbHRlcktleSk7CiB9CiAKLWJv
b2wgU3RvcmFnZTo6bWF5Q29udGFpbihjb25zdCBLZXkmIGtleSkgY29uc3QKK2Jvb2wgU3RvcmFn
ZTo6bWF5Q29udGFpbihjb25zdCBLZXkmIGtleSwgY29uc3QgU3RyaW5nJiB0eXBlKSBjb25zdAog
ewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgcmV0dXJuICFtX3JlY29yZEZp
bHRlciB8fCBtX3JlY29yZEZpbHRlci0+bWF5Q29udGFpbihrZXkuaGFzaCgpKTsKLX0KKyAgICBB
U1NFUlQoIXR5cGUuZW5kc1dpdGgoYmxvYlN1ZmZpeCkpOworICAgIGlmICghbV9yZWNvcmRGaWx0
ZXIpCisgICAgICAgIHJldHVybiB0cnVlOwogCi1TdHJpbmcgU3RvcmFnZTo6cGFydGl0aW9uUGF0
aEZvcktleShjb25zdCBLZXkmIGtleSkgY29uc3QKLXsKLSAgICBBU1NFUlQoIWtleS5wYXJ0aXRp
b24oKS5pc0VtcHR5KCkpOwotICAgIHJldHVybiBXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21w
b25lbnQocmVjb3Jkc1BhdGgoKSwga2V5LnBhcnRpdGlvbigpKTsKKyAgICBhdXRvIGZpbHRlcktl
eSA9IG1ha2VSZWNvcmRGaWx0ZXJLZXkoa2V5Lmhhc2hBc1N0cmluZygpLCB0eXBlKTsKKyAgICBy
ZXR1cm4gbV9yZWNvcmRGaWx0ZXItPm1heUNvbnRhaW4oZmlsdGVyS2V5KTsKIH0KIAotc3RhdGlj
IFN0cmluZyBmaWxlTmFtZUZvcktleShjb25zdCBLZXkmIGtleSkKK2Jvb2wgU3RvcmFnZTo6bWF5
Q29udGFpbkJsb2IoY29uc3QgS2V5JiBrZXksIGNvbnN0IFN0cmluZyYgdHlwZSkgY29uc3QKIHsK
LSAgICByZXR1cm4ga2V5Lmhhc2hBc1N0cmluZygpOworICAgIEFTU0VSVChSdW5Mb29wOjppc01h
aW4oKSk7CisgICAgQVNTRVJUKCF0eXBlLmVuZHNXaXRoKGJsb2JTdWZmaXgpKTsKKworICAgIGlm
ICghdHlwZVVzZXNCbG9iU3RvcmFnZSh0eXBlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgcmV0dXJuICFtX2JvZHlCbG9iRmlsdGVyIHx8IG1fYm9keUJsb2JGaWx0ZXItPm1heUNvbnRh
aW4oa2V5Lmhhc2goKSk7CiB9CiAKLVN0cmluZyBTdG9yYWdlOjpyZWNvcmRQYXRoRm9yS2V5KGNv
bnN0IEtleSYga2V5KSBjb25zdAorU3RyaW5nIFN0b3JhZ2U6OnBhcnRpdGlvblBhdGhGb3JLZXko
Y29uc3QgS2V5JiBrZXkpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFdlYkNvcmU6OnBhdGhCeUFwcGVu
ZGluZ0NvbXBvbmVudChwYXJ0aXRpb25QYXRoRm9yS2V5KGtleSksIGZpbGVOYW1lRm9yS2V5KGtl
eSkpOworICAgIEFTU0VSVCgha2V5LnBhcnRpdGlvbigpLmlzRW1wdHkoKSk7CisgICAgcmV0dXJu
IFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChyZWNvcmRzUGF0aCgpLCBrZXkucGFy
dGl0aW9uKCkpOwogfQogCi1zdGF0aWMgU3RyaW5nIGJvZHlQYXRoRm9yUmVjb3JkUGF0aChjb25z
dCBTdHJpbmcmIHJlY29yZFBhdGgpCitTdHJpbmcgU3RvcmFnZTo6cmVjb3JkUGF0aEZvcktleShj
b25zdCBLZXkmIGtleSwgY29uc3QgU3RyaW5nJiB0eXBlKSBjb25zdAogewotICAgIHJldHVybiBy
ZWNvcmRQYXRoICsgYm9keVBvc3RmaXg7CisgICAgcmV0dXJuIFdlYkNvcmU6OnBhdGhCeUFwcGVu
ZGluZ0NvbXBvbmVudChwYXJ0aXRpb25QYXRoRm9yS2V5KGtleSksIGtleS5oYXNoQXNTdHJpbmco
KSArICctJyArIHR5cGUpOwogfQogCi1TdHJpbmcgU3RvcmFnZTo6Ym9keVBhdGhGb3JLZXkoY29u
c3QgS2V5JiBrZXkpIGNvbnN0CitTdHJpbmcgU3RvcmFnZTo6Ym9keUJsb2JQYXRoRm9yS2V5KGNv
bnN0IEtleSYga2V5LCBjb25zdCBTdHJpbmcmIHR5cGUpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGJv
ZHlQYXRoRm9yUmVjb3JkUGF0aChyZWNvcmRQYXRoRm9yS2V5KGtleSkpOworICAgIEFTU0VSVCh0
eXBlVXNlc0Jsb2JTdG9yYWdlKHR5cGUpKTsKKyAgICByZXR1cm4gcmVjb3JkUGF0aEZvcktleShr
ZXksIHR5cGUpICsgYmxvYlN1ZmZpeDsKIH0KIAogc3RydWN0IFJlY29yZE1ldGFEYXRhIHsKQEAg
LTQwMCw2ICs0NTIsMjMgQEAgdm9pZCBTdG9yYWdlOjpyZWFkUmVjb3JkKFJlYWRPcGVyYXRpb24m
IHJlYWRPcGVyYXRpb24sIGNvbnN0IERhdGEmIHJlY29yZERhdGEpCiB7CiAgICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7CiAKKyAgICBpZiAodHlwZVVzZXNIZWFkZXIocmVhZE9wZXJhdGlv
bi50eXBlKSkgeworICAgICAgICByZWFkUmVjb3JkV2l0aEhlYWRlcihyZWFkT3BlcmF0aW9uLCBy
ZWNvcmREYXRhKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHJlYWRPcGVyYXRpb24u
cmVzdWx0UmVjb3JkID0gc3RkOjptYWtlX3VuaXF1ZTxTdG9yYWdlOjpSZWNvcmQ+KFN0b3JhZ2U6
OlJlY29yZCB7CisgICAgICAgIHJlYWRPcGVyYXRpb24ua2V5LAorICAgICAgICBzdGQ6OmNocm9u
bzo6c3lzdGVtX2Nsb2NrOjp0aW1lX3BvaW50KCksIC8vIEZJWE1FOiBkbyBiZXR0ZXIuCisgICAg
ICAgIHsgfSwgLy8gTm8gaGVhZGVyLgorICAgICAgICByZWNvcmREYXRhCisgICAgfSk7Cit9CisK
K3ZvaWQgU3RvcmFnZTo6cmVhZFJlY29yZFdpdGhIZWFkZXIoUmVhZE9wZXJhdGlvbiYgcmVhZE9w
ZXJhdGlvbiwgY29uc3QgRGF0YSYgcmVjb3JkRGF0YSkKK3sKKyAgICBBU1NFUlQodHlwZVVzZXNI
ZWFkZXIocmVhZE9wZXJhdGlvbi50eXBlKSk7CisKICAgICBSZWNvcmRNZXRhRGF0YSBtZXRhRGF0
YTsKICAgICBEYXRhIGhlYWRlckRhdGE7CiAgICAgaWYgKCFkZWNvZGVSZWNvcmRIZWFkZXIocmVj
b3JkRGF0YSwgbWV0YURhdGEsIGhlYWRlckRhdGEpKQpAQCAtNDI0LDYgKzQ5Myw3IEBAIHZvaWQg
U3RvcmFnZTo6cmVhZFJlY29yZChSZWFkT3BlcmF0aW9uJiByZWFkT3BlcmF0aW9uLCBjb25zdCBE
YXRhJiByZWNvcmREYXRhKQogICAgIH0KIAogICAgIHJlYWRPcGVyYXRpb24uZXhwZWN0ZWRCb2R5
SGFzaCA9IG1ldGFEYXRhLmJvZHlIYXNoOworCiAgICAgcmVhZE9wZXJhdGlvbi5yZXN1bHRSZWNv
cmQgPSBzdGQ6Om1ha2VfdW5pcXVlPFN0b3JhZ2U6OlJlY29yZD4oU3RvcmFnZTo6UmVjb3JkIHsK
ICAgICAgICAgbWV0YURhdGEua2V5LAogICAgICAgICB0aW1lU3RhbXAsCkBAIC00NTIsMjAgKzUy
MiwyMiBAQCBzdGF0aWMgRGF0YSBlbmNvZGVSZWNvcmRNZXRhRGF0YShjb25zdCBSZWNvcmRNZXRh
RGF0YSYgbWV0YURhdGEpCiAKIE9wdGlvbmFsPEJsb2JTdG9yYWdlOjpCbG9iPiBTdG9yYWdlOjpz
dG9yZUJvZHlBc0Jsb2IoV3JpdGVPcGVyYXRpb24mIHdyaXRlT3BlcmF0aW9uKQogewotICAgIGF1
dG8gYm9keVBhdGggPSBib2R5UGF0aEZvcktleSh3cml0ZU9wZXJhdGlvbi5yZWNvcmQua2V5KTsK
KyAgICBBU1NFUlQodHlwZVVzZXNCbG9iU3RvcmFnZSh3cml0ZU9wZXJhdGlvbi50eXBlKSk7CisK
KyAgICBhdXRvIGJvZHlCbG9iUGF0aCA9IGJvZHlCbG9iUGF0aEZvcktleSh3cml0ZU9wZXJhdGlv
bi5yZWNvcmQua2V5LCB3cml0ZU9wZXJhdGlvbi50eXBlKTsKIAogICAgIC8vIFN0b3JlIHRoZSBi
b2R5LgotICAgIGF1dG8gYmxvYiA9IG1fYmxvYlN0b3JhZ2UuYWRkKGJvZHlQYXRoLCB3cml0ZU9w
ZXJhdGlvbi5yZWNvcmQuYm9keSk7CisgICAgYXV0byBibG9iID0gbV9ibG9iU3RvcmFnZS5hZGQo
Ym9keUJsb2JQYXRoLCB3cml0ZU9wZXJhdGlvbi5yZWNvcmQuYm9keSk7CiAgICAgaWYgKGJsb2Iu
ZGF0YS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgICsrd3JpdGVPcGVyYXRp
b24uYWN0aXZlQ291bnQ7CiAKICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3RoaXMsIGJs
b2IsICZ3cml0ZU9wZXJhdGlvbl0gewotICAgICAgICBpZiAobV9ib2R5RmlsdGVyKQotICAgICAg
ICAgICAgbV9ib2R5RmlsdGVyLT5hZGQod3JpdGVPcGVyYXRpb24ucmVjb3JkLmtleS5oYXNoKCkp
OworICAgICAgICBpZiAobV9ib2R5QmxvYkZpbHRlcikKKyAgICAgICAgICAgIG1fYm9keUJsb2JG
aWx0ZXItPmFkZCh3cml0ZU9wZXJhdGlvbi5yZWNvcmQua2V5Lmhhc2goKSk7CiAgICAgICAgIGlm
IChtX3N5bmNocm9uaXphdGlvbkluUHJvZ3Jlc3MpCi0gICAgICAgICAgICBtX2JvZHlGaWx0ZXJI
YXNoZXNBZGRlZER1cmluZ1N5bmNocm9uaXphdGlvbi5hcHBlbmQod3JpdGVPcGVyYXRpb24ucmVj
b3JkLmtleS5oYXNoKCkpOworICAgICAgICAgICAgbV9ib2R5QmxvYkZpbHRlckhhc2hlc0FkZGVk
RHVyaW5nU3luY2hyb25pemF0aW9uLmFwcGVuZCh3cml0ZU9wZXJhdGlvbi5yZWNvcmQua2V5Lmhh
c2goKSk7CiAKICAgICAgICAgaWYgKHdyaXRlT3BlcmF0aW9uLm1hcHBlZEJvZHlIYW5kbGVyKQog
ICAgICAgICAgICAgd3JpdGVPcGVyYXRpb24ubWFwcGVkQm9keUhhbmRsZXIoYmxvYi5kYXRhKTsK
QEAgLTQ3Nyw2ICs1NDksMTEgQEAgT3B0aW9uYWw8QmxvYlN0b3JhZ2U6OkJsb2I+IFN0b3JhZ2U6
OnN0b3JlQm9keUFzQmxvYihXcml0ZU9wZXJhdGlvbiYgd3JpdGVPcGVyYXQKIAogRGF0YSBTdG9y
YWdlOjplbmNvZGVSZWNvcmQoY29uc3QgUmVjb3JkJiByZWNvcmQsIE9wdGlvbmFsPEJsb2JTdG9y
YWdlOjpCbG9iPiBibG9iKQogeworICAgIHJldHVybiByZWNvcmQuaGVhZGVyLmlzTnVsbCgpID8g
cmVjb3JkLmJvZHkgOiBlbmNvZGVSZWNvcmRXaXRoSGVhZGVyKHJlY29yZCwgYmxvYik7Cit9CisK
K0RhdGEgU3RvcmFnZTo6ZW5jb2RlUmVjb3JkV2l0aEhlYWRlcihjb25zdCBSZWNvcmQmIHJlY29y
ZCwgT3B0aW9uYWw8QmxvYlN0b3JhZ2U6OkJsb2I+IGJsb2IpCit7CiAgICAgQVNTRVJUKCFibG9i
IHx8IGJ5dGVzRXF1YWwoYmxvYi52YWx1ZSgpLmRhdGEsIHJlY29yZC5ib2R5KSk7CiAKICAgICBS
ZWNvcmRNZXRhRGF0YSBtZXRhRGF0YShyZWNvcmQua2V5KTsKQEAgLTQ5NiwxMSArNTczLDExIEBA
IERhdGEgU3RvcmFnZTo6ZW5jb2RlUmVjb3JkKGNvbnN0IFJlY29yZCYgcmVjb3JkLCBPcHRpb25h
bDxCbG9iU3RvcmFnZTo6QmxvYj4gYmxvCiAgICAgcmV0dXJuIHsgaGVhZGVyRGF0YSB9OwogfQog
Ci1ib29sIFN0b3JhZ2U6OnJlbW92ZUZyb21QZW5kaW5nV3JpdGVPcGVyYXRpb25zKGNvbnN0IEtl
eSYga2V5KQorYm9vbCBTdG9yYWdlOjpyZW1vdmVGcm9tUGVuZGluZ1dyaXRlT3BlcmF0aW9ucyhj
b25zdCBLZXkmIGtleSwgY29uc3QgU3RyaW5nJiB0eXBlKQogewogICAgIGF1dG8gZW5kID0gbV9w
ZW5kaW5nV3JpdGVPcGVyYXRpb25zLmVuZCgpOwogICAgIGZvciAoYXV0byBpdCA9IG1fcGVuZGlu
Z1dyaXRlT3BlcmF0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYg
KCgqaXQpLT5yZWNvcmQua2V5ID09IGtleSkgeworICAgICAgICBpZiAoKCppdCktPnJlY29yZC5r
ZXkgPT0ga2V5ICYmICgqaXQpLT50eXBlID09IHR5cGUpIHsKICAgICAgICAgICAgIG1fcGVuZGlu
Z1dyaXRlT3BlcmF0aW9ucy5yZW1vdmUoaXQpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgIH0KQEAgLTUwOCwyMiArNTg1LDI3IEBAIGJvb2wgU3RvcmFnZTo6cmVtb3ZlRnJvbVBl
bmRpbmdXcml0ZU9wZXJhdGlvbnMoY29uc3QgS2V5JiBrZXkpCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi12b2lkIFN0b3JhZ2U6OnJlbW92ZShjb25zdCBLZXkmIGtleSkKK3ZvaWQgU3RvcmFnZTo6
cmVtb3ZlKGNvbnN0IEtleSYga2V5LCBjb25zdCBTdHJpbmcmIHR5cGUpCiB7CiAgICAgQVNTRVJU
KFJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBBU1NFUlQoIWtleS5pc051bGwoKSk7CisgICAgQVNT
RVJUKCF0eXBlLmlzTnVsbCgpKTsKIAotICAgIGlmICghbWF5Q29udGFpbihrZXkpKQorICAgIGlm
ICghbWF5Q29udGFpbihrZXksIHR5cGUpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBXZSBj
YW4ndCByZW1vdmUgdGhlIGtleSBmcm9tIHRoZSBCbG9vbSBmaWx0ZXIgKGJ1dCBzb21lIGZhbHNl
IHBvc2l0aXZlcyBhcmUgZXhwZWN0ZWQgYW55d2F5KS4KICAgICAvLyBGb3Igc2ltcGxpY2l0eSB3
ZSBhbHNvIGRvbid0IHJlZHVjZSBtX2FwcHJveGltYXRlU2l6ZSBvbiByZW1vdmFscy4KICAgICAv
LyBUaGUgbmV4dCBzeW5jaHJvbml6YXRpb24gd2lsbCB1cGRhdGUgZXZlcnl0aGluZy4KIAotICAg
IHJlbW92ZUZyb21QZW5kaW5nV3JpdGVPcGVyYXRpb25zKGtleSk7CisgICAgcmVtb3ZlRnJvbVBl
bmRpbmdXcml0ZU9wZXJhdGlvbnMoa2V5LCB0eXBlKTsKIAotICAgIHNlcmlhbEJhY2tncm91bmRJ
T1F1ZXVlKCkuZGlzcGF0Y2goW3RoaXMsIGtleV0gewotICAgICAgICBXZWJDb3JlOjpkZWxldGVG
aWxlKHJlY29yZFBhdGhGb3JLZXkoa2V5KSk7Ci0gICAgICAgIG1fYmxvYlN0b3JhZ2UucmVtb3Zl
KGJvZHlQYXRoRm9yS2V5KGtleSkpOworICAgIFN0cmluZ0NhcHR1cmUgdHlwZUNhcHR1cmUodHlw
ZSk7CisgICAgc2VyaWFsQmFja2dyb3VuZElPUXVldWUoKS5kaXNwYXRjaChbdGhpcywga2V5LCB0
eXBlQ2FwdHVyZV0geworICAgICAgICBXZWJDb3JlOjpkZWxldGVGaWxlKHJlY29yZFBhdGhGb3JL
ZXkoa2V5LCB0eXBlQ2FwdHVyZS5zdHJpbmcoKSkpOworICAgICAgICAvLyBBc3NvY2lhdGVkIGJs
b2IgbGlua3MgbmVlZCB0byBiZSByZW1vdmVkIGFzIHdlbGwuCisgICAgICAgIGlmICh0eXBlVXNl
c0Jsb2JTdG9yYWdlKHR5cGVDYXB0dXJlLnN0cmluZygpKSkKKyAgICAgICAgICAgIG1fYmxvYlN0
b3JhZ2UucmVtb3ZlKGJvZHlCbG9iUGF0aEZvcktleShrZXksIHR5cGVDYXB0dXJlLnN0cmluZygp
KSk7CiAgICAgfSk7CiB9CiAKQEAgLTU0NiwxMCArNjI4LDEwIEBAIHZvaWQgU3RvcmFnZTo6ZGlz
cGF0Y2hSZWFkT3BlcmF0aW9uKHN0ZDo6dW5pcXVlX3B0cjxSZWFkT3BlcmF0aW9uPiByZWFkT3Bl
cmF0aW9uCiAgICAgY29uc3QgYXV0byByZWFkVGltZW91dCA9IDE1MDBfbXM7CiAgICAgbV9yZWFk
T3BlcmF0aW9uVGltZW91dFRpbWVyLnN0YXJ0T25lU2hvdChyZWFkVGltZW91dCk7CiAKLSAgICBi
b29sIHNob3VsZEdldEJvZHlCbG9iID0gIW1fYm9keUZpbHRlciB8fCBtX2JvZHlGaWx0ZXItPm1h
eUNvbnRhaW4ocmVhZE9wZXJhdGlvbi5rZXkuaGFzaCgpKTsKKyAgICBib29sIHNob3VsZEdldEJv
ZHlCbG9iID0gbWF5Q29udGFpbkJsb2IocmVhZE9wZXJhdGlvbi5rZXksIHJlYWRPcGVyYXRpb24u
dHlwZSk7CiAKICAgICBpb1F1ZXVlKCkuZGlzcGF0Y2goW3RoaXMsICZyZWFkT3BlcmF0aW9uLCBz
aG91bGRHZXRCb2R5QmxvYl0gewotICAgICAgICBhdXRvIHJlY29yZFBhdGggPSByZWNvcmRQYXRo
Rm9yS2V5KHJlYWRPcGVyYXRpb24ua2V5KTsKKyAgICAgICAgYXV0byByZWNvcmRQYXRoID0gcmVj
b3JkUGF0aEZvcktleShyZWFkT3BlcmF0aW9uLmtleSwgcmVhZE9wZXJhdGlvbi50eXBlKTsKIAog
ICAgICAgICArK3JlYWRPcGVyYXRpb24uYWN0aXZlQ291bnQ7CiAgICAgICAgIGlmIChzaG91bGRH
ZXRCb2R5QmxvYikKQEAgLTU2NCw4ICs2NDYsOCBAQCB2b2lkIFN0b3JhZ2U6OmRpc3BhdGNoUmVh
ZE9wZXJhdGlvbihzdGQ6OnVuaXF1ZV9wdHI8UmVhZE9wZXJhdGlvbj4gcmVhZE9wZXJhdGlvbgog
CiAgICAgICAgIGlmIChzaG91bGRHZXRCb2R5QmxvYikgewogICAgICAgICAgICAgLy8gUmVhZCB0
aGUgYm9keSBibG9iIGluIHBhcmFsbGVsIHdpdGggdGhlIHJlY29yZCByZWFkLgotICAgICAgICAg
ICAgYXV0byBib2R5UGF0aCA9IGJvZHlQYXRoRm9yS2V5KHJlYWRPcGVyYXRpb24ua2V5KTsKLSAg
ICAgICAgICAgIHJlYWRPcGVyYXRpb24ucmVzdWx0Qm9keUJsb2IgPSBtX2Jsb2JTdG9yYWdlLmdl
dChib2R5UGF0aCk7CisgICAgICAgICAgICBhdXRvIGJvZHlCbG9iUGF0aCA9IGJvZHlCbG9iUGF0
aEZvcktleShyZWFkT3BlcmF0aW9uLmtleSwgcmVhZE9wZXJhdGlvbi50eXBlKTsKKyAgICAgICAg
ICAgIHJlYWRPcGVyYXRpb24ucmVzdWx0Qm9keUJsb2IgPSBtX2Jsb2JTdG9yYWdlLmdldChib2R5
QmxvYlBhdGgpOwogICAgICAgICAgICAgZmluaXNoUmVhZE9wZXJhdGlvbihyZWFkT3BlcmF0aW9u
KTsKICAgICAgICAgfQogICAgIH0pOwpAQCAtNTgxLDkgKzY2Myw5IEBAIHZvaWQgU3RvcmFnZTo6
ZmluaXNoUmVhZE9wZXJhdGlvbihSZWFkT3BlcmF0aW9uJiByZWFkT3BlcmF0aW9uKQogICAgIFJ1
bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbdGhpcywgJnJlYWRPcGVyYXRpb25dIHsKICAgICAgICAg
Ym9vbCBzdWNjZXNzID0gcmVhZE9wZXJhdGlvbi5maW5pc2goKTsKICAgICAgICAgaWYgKHN1Y2Nl
c3MpCi0gICAgICAgICAgICB1cGRhdGVGaWxlTW9kaWZpY2F0aW9uVGltZShyZWNvcmRQYXRoRm9y
S2V5KHJlYWRPcGVyYXRpb24ua2V5KSk7CisgICAgICAgICAgICB1cGRhdGVGaWxlTW9kaWZpY2F0
aW9uVGltZShyZWNvcmRQYXRoRm9yS2V5KHJlYWRPcGVyYXRpb24ua2V5LCByZWFkT3BlcmF0aW9u
LnR5cGUpKTsKICAgICAgICAgZWxzZSBpZiAoIXJlYWRPcGVyYXRpb24uaXNDYW5jZWxlZCkKLSAg
ICAgICAgICAgIHJlbW92ZShyZWFkT3BlcmF0aW9uLmtleSk7CisgICAgICAgICAgICByZW1vdmUo
cmVhZE9wZXJhdGlvbi5rZXksIHJlYWRPcGVyYXRpb24udHlwZSk7CiAKICAgICAgICAgQVNTRVJU
KG1fYWN0aXZlUmVhZE9wZXJhdGlvbnMuY29udGFpbnMoJnJlYWRPcGVyYXRpb24pKTsKICAgICAg
ICAgbV9hY3RpdmVSZWFkT3BlcmF0aW9ucy5yZW1vdmUoJnJlYWRPcGVyYXRpb24pOwpAQCAtNjM0
LDEwICs3MTYsMTAgQEAgdm9pZCBTdG9yYWdlOjpkaXNwYXRjaFBlbmRpbmdSZWFkT3BlcmF0aW9u
cygpCiAgICAgfQogfQogCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gYm9vbCByZXRyaWV2ZUZyb21NZW1v
cnkoY29uc3QgVCYgb3BlcmF0aW9ucywgY29uc3QgS2V5JiBrZXksIFN0b3JhZ2U6OlJldHJpZXZl
Q29tcGxldGlvbkhhbmRsZXImIGNvbXBsZXRpb25IYW5kbGVyKQordGVtcGxhdGUgPGNsYXNzIFQ+
IGJvb2wgcmV0cmlldmVGcm9tTWVtb3J5KGNvbnN0IFQmIG9wZXJhdGlvbnMsIGNvbnN0IEtleSYg
a2V5LCBjb25zdCBTdHJpbmcmIHR5cGUsIFN0b3JhZ2U6OlJldHJpZXZlQ29tcGxldGlvbkhhbmRs
ZXImIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGZvciAoYXV0byYgb3BlcmF0aW9uIDogb3Bl
cmF0aW9ucykgewotICAgICAgICBpZiAob3BlcmF0aW9uLT5yZWNvcmQua2V5ID09IGtleSkgewor
ICAgICAgICBpZiAob3BlcmF0aW9uLT5yZWNvcmQua2V5ID09IGtleSAmJiBvcGVyYXRpb24tPnR5
cGUgPT0gdHlwZSkgewogICAgICAgICAgICAgTE9HKE5ldHdvcmtDYWNoZVN0b3JhZ2UsICIoTmV0
d29ya1Byb2Nlc3MpIGZvdW5kIHdyaXRlIG9wZXJhdGlvbiBpbiBwcm9ncmVzcyIpOwogICAgICAg
ICAgICAgYXV0byByZWNvcmQgPSBvcGVyYXRpb24tPnJlY29yZDsKICAgICAgICAgICAgIFJ1bkxv
b3A6Om1haW4oKS5kaXNwYXRjaChbcmVjb3JkLCBjb21wbGV0aW9uSGFuZGxlcl0gewpAQCAtNjY0
LDEwICs3NDYsMTAgQEAgdm9pZCBTdG9yYWdlOjpkaXNwYXRjaFBlbmRpbmdXcml0ZU9wZXJhdGlv
bnMoKQogICAgIH0KIH0KIAotc3RhdGljIGJvb2wgc2hvdWxkU3RvcmVCb2R5QXNCbG9iKGNvbnN0
IERhdGEmIGJvZHlEYXRhKQorc3RhdGljIGJvb2wgc2hvdWxkU3RvcmVCb2R5QXNCbG9iKGNvbnN0
IFN0cmluZyYgdHlwZSwgY29uc3QgRGF0YSYgYm9keSkKIHsKICAgICBjb25zdCBzaXplX3QgbWF4
aW11bUlubGluZUJvZHlTaXplIHsgMTYgKiAxMDI0IH07Ci0gICAgcmV0dXJuIGJvZHlEYXRhLnNp
emUoKSA+IG1heGltdW1JbmxpbmVCb2R5U2l6ZTsKKyAgICByZXR1cm4gdHlwZVVzZXNCbG9iU3Rv
cmFnZSh0eXBlKSAmJiBib2R5LnNpemUoKSA+IG1heGltdW1JbmxpbmVCb2R5U2l6ZTsKIH0KIAog
dm9pZCBTdG9yYWdlOjpkaXNwYXRjaFdyaXRlT3BlcmF0aW9uKHN0ZDo6dW5pcXVlX3B0cjxXcml0
ZU9wZXJhdGlvbj4gd3JpdGVPcGVyYXRpb25QdHIpCkBAIC02NzgsMTcgKzc2MCwxNyBAQCB2b2lk
IFN0b3JhZ2U6OmRpc3BhdGNoV3JpdGVPcGVyYXRpb24oc3RkOjp1bmlxdWVfcHRyPFdyaXRlT3Bl
cmF0aW9uPiB3cml0ZU9wZXJhdAogICAgIG1fYWN0aXZlV3JpdGVPcGVyYXRpb25zLmFkZChXVEY6
Om1vdmUod3JpdGVPcGVyYXRpb25QdHIpKTsKIAogICAgIC8vIFRoaXMgd2FzIGFkZGVkIGFscmVh
ZHkgd2hlbiBzdGFydGluZyB0aGUgc3RvcmUgYnV0IGZpbHRlciBtaWdodCBoYXZlIGJlZW4gd2lw
ZWQuCi0gICAgYWRkVG9SZWNvcmRGaWx0ZXIod3JpdGVPcGVyYXRpb24ucmVjb3JkLmtleSk7Cisg
ICAgYWRkVG9SZWNvcmRGaWx0ZXIod3JpdGVPcGVyYXRpb24ucmVjb3JkLmtleSwgd3JpdGVPcGVy
YXRpb24udHlwZSk7CiAKICAgICBiYWNrZ3JvdW5kSU9RdWV1ZSgpLmRpc3BhdGNoKFt0aGlzLCAm
d3JpdGVPcGVyYXRpb25dIHsKICAgICAgICAgYXV0byBwYXJ0aXRpb25QYXRoID0gcGFydGl0aW9u
UGF0aEZvcktleSh3cml0ZU9wZXJhdGlvbi5yZWNvcmQua2V5KTsKLSAgICAgICAgYXV0byByZWNv
cmRQYXRoID0gcmVjb3JkUGF0aEZvcktleSh3cml0ZU9wZXJhdGlvbi5yZWNvcmQua2V5KTsKKyAg
ICAgICAgYXV0byByZWNvcmRQYXRoID0gcmVjb3JkUGF0aEZvcktleSh3cml0ZU9wZXJhdGlvbi5y
ZWNvcmQua2V5LCB3cml0ZU9wZXJhdGlvbi50eXBlKTsKIAogICAgICAgICBXZWJDb3JlOjptYWtl
QWxsRGlyZWN0b3JpZXMocGFydGl0aW9uUGF0aCk7CiAKICAgICAgICAgKyt3cml0ZU9wZXJhdGlv
bi5hY3RpdmVDb3VudDsKIAotICAgICAgICBib29sIHNob3VsZFN0b3JlQXNCbG9iID0gc2hvdWxk
U3RvcmVCb2R5QXNCbG9iKHdyaXRlT3BlcmF0aW9uLnJlY29yZC5ib2R5KTsKKyAgICAgICAgYm9v
bCBzaG91bGRTdG9yZUFzQmxvYiA9IHNob3VsZFN0b3JlQm9keUFzQmxvYih3cml0ZU9wZXJhdGlv
bi50eXBlLCB3cml0ZU9wZXJhdGlvbi5yZWNvcmQuYm9keSk7CiAgICAgICAgIGF1dG8gYm9keUJs
b2IgPSBzaG91bGRTdG9yZUFzQmxvYiA/IHN0b3JlQm9keUFzQmxvYih3cml0ZU9wZXJhdGlvbikg
OiBOdWxsb3B0OwogCiAgICAgICAgIGF1dG8gcmVjb3JkRGF0YSA9IGVuY29kZVJlY29yZCh3cml0
ZU9wZXJhdGlvbi5yZWNvcmQsIGJvZHlCbG9iKTsKQEAgLTcyMCwzMyArODAyLDM0IEBAIHZvaWQg
U3RvcmFnZTo6ZmluaXNoV3JpdGVPcGVyYXRpb24oV3JpdGVPcGVyYXRpb24mIHdyaXRlT3BlcmF0
aW9uKQogICAgIHNocmlua0lmTmVlZGVkKCk7CiB9CiAKLXZvaWQgU3RvcmFnZTo6cmV0cmlldmUo
Y29uc3QgS2V5JiBrZXksIHVuc2lnbmVkIHByaW9yaXR5LCBSZXRyaWV2ZUNvbXBsZXRpb25IYW5k
bGVyJiYgY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIFN0b3JhZ2U6OnJldHJpZXZlKGNvbnN0IEtl
eSYga2V5LCBjb25zdCBTdHJpbmcmIHR5cGUsIHVuc2lnbmVkIHByaW9yaXR5LCBSZXRyaWV2ZUNv
bXBsZXRpb25IYW5kbGVyJiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxv
b3A6OmlzTWFpbigpKTsKICAgICBBU1NFUlQocHJpb3JpdHkgPD0gbWF4aW11bVJldHJpZXZlUHJp
b3JpdHkpOwogICAgIEFTU0VSVCgha2V5LmlzTnVsbCgpKTsKKyAgICBBU1NFUlQoIXR5cGUuaXNO
dWxsKCkpOwogCiAgICAgaWYgKCFtX2NhcGFjaXR5KSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKG51bGxwdHIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCFtYXlDb250
YWluKGtleSkpIHsKKyAgICBpZiAoIW1heUNvbnRhaW4oa2V5LCB0eXBlKSkgewogICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihudWxscHRyKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGlmIChyZXRyaWV2ZUZyb21NZW1vcnkobV9wZW5kaW5nV3JpdGVPcGVyYXRpb25zLCBrZXksIGNv
bXBsZXRpb25IYW5kbGVyKSkKKyAgICBpZiAocmV0cmlldmVGcm9tTWVtb3J5KG1fcGVuZGluZ1dy
aXRlT3BlcmF0aW9ucywga2V5LCB0eXBlLCBjb21wbGV0aW9uSGFuZGxlcikpCiAgICAgICAgIHJl
dHVybjsKLSAgICBpZiAocmV0cmlldmVGcm9tTWVtb3J5KG1fYWN0aXZlV3JpdGVPcGVyYXRpb25z
LCBrZXksIGNvbXBsZXRpb25IYW5kbGVyKSkKKyAgICBpZiAocmV0cmlldmVGcm9tTWVtb3J5KG1f
YWN0aXZlV3JpdGVPcGVyYXRpb25zLCBrZXksIHR5cGUsIGNvbXBsZXRpb25IYW5kbGVyKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgYXV0byByZWFkT3BlcmF0aW9uID0gc3RkOjptYWtlX3VuaXF1
ZTxSZWFkT3BlcmF0aW9uPihrZXksIFdURjo6bW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAg
IGF1dG8gcmVhZE9wZXJhdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8UmVhZE9wZXJhdGlvbj4oa2V5
LCB0eXBlLCBXVEY6Om1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICBtX3BlbmRpbmdSZWFk
T3BlcmF0aW9uc0J5UHJpb3JpdHlbcHJpb3JpdHldLnByZXBlbmQoV1RGOjptb3ZlKHJlYWRPcGVy
YXRpb24pKTsKICAgICBkaXNwYXRjaFBlbmRpbmdSZWFkT3BlcmF0aW9ucygpOwogfQogCi12b2lk
IFN0b3JhZ2U6OnN0b3JlKGNvbnN0IFJlY29yZCYgcmVjb3JkLCBNYXBwZWRCb2R5SGFuZGxlciYm
IG1hcHBlZEJvZHlIYW5kbGVyKQordm9pZCBTdG9yYWdlOjpzdG9yZShjb25zdCBSZWNvcmQmIHJl
Y29yZCwgY29uc3QgU3RyaW5nJiB0eXBlLCBNYXBwZWRCb2R5SGFuZGxlciYmIG1hcHBlZEJvZHlI
YW5kbGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgQVNTRVJUKCFy
ZWNvcmQua2V5LmlzTnVsbCgpKTsKQEAgLTc1NCwxMSArODM3LDExIEBAIHZvaWQgU3RvcmFnZTo6
c3RvcmUoY29uc3QgUmVjb3JkJiByZWNvcmQsIE1hcHBlZEJvZHlIYW5kbGVyJiYgbWFwcGVkQm9k
eUhhbmRsZXIpCiAgICAgaWYgKCFtX2NhcGFjaXR5KQogICAgICAgICByZXR1cm47CiAKLSAgICBh
dXRvIHdyaXRlT3BlcmF0aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxXcml0ZU9wZXJhdGlvbj4ocmVj
b3JkLCBXVEY6Om1vdmUobWFwcGVkQm9keUhhbmRsZXIpKTsKKyAgICBhdXRvIHdyaXRlT3BlcmF0
aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxXcml0ZU9wZXJhdGlvbj4ocmVjb3JkLCB0eXBlLCBXVEY6
Om1vdmUobWFwcGVkQm9keUhhbmRsZXIpKTsKICAgICBtX3BlbmRpbmdXcml0ZU9wZXJhdGlvbnMu
cHJlcGVuZChXVEY6Om1vdmUod3JpdGVPcGVyYXRpb24pKTsKIAogICAgIC8vIEFkZCBrZXkgdG8g
dGhlIGZpbHRlciBhbHJlYWR5IGhlcmUgYXMgd2UgZG8gbG9va3VwcyBmcm9tIHRoZSBwZW5kaW5n
IG9wZXJhdGlvbnMgdG9vLgotICAgIGFkZFRvUmVjb3JkRmlsdGVyKHJlY29yZC5rZXkpOworICAg
IGFkZFRvUmVjb3JkRmlsdGVyKHJlY29yZC5rZXksIHR5cGUpOwogCiAgICAgYm9vbCBpc0luaXRp
YWxXcml0ZSA9IG1fcGVuZGluZ1dyaXRlT3BlcmF0aW9ucy5zaXplKCkgPT0gMTsKICAgICBpZiAo
IWlzSW5pdGlhbFdyaXRlKQpAQCAtNzgxLDkgKzg2NCwxMCBAQCB2b2lkIFN0b3JhZ2U6OnRyYXZl
cnNlKFRyYXZlcnNlRmxhZ3MgZmxhZ3MsIFRyYXZlcnNlSGFuZGxlciYmIHRyYXZlcnNlSGFuZGxl
cikKICAgICBtX2FjdGl2ZVRyYXZlcnNlT3BlcmF0aW9ucy5hZGQoV1RGOjptb3ZlKHRyYXZlcnNl
T3BlcmF0aW9uUHRyKSk7CiAKICAgICBpb1F1ZXVlKCkuZGlzcGF0Y2goW3RoaXMsICZ0cmF2ZXJz
ZU9wZXJhdGlvbl0gewotICAgICAgICB0cmF2ZXJzZVJlY29yZHNGaWxlcyhyZWNvcmRzUGF0aCgp
LCBbdGhpcywgJnRyYXZlcnNlT3BlcmF0aW9uXShjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBjb25z
dCBTdHJpbmcmIHBhcnRpdGlvblBhdGgpIHsKLSAgICAgICAgICAgIGlmIChmaWxlTmFtZS5sZW5n
dGgoKSAhPSBLZXk6Omhhc2hTdHJpbmdMZW5ndGgoKSkKLSAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIEhhc2hTZXQ8U3RyaW5nPiByZXNvdXJjZVR5cGVPbmx5OworICAgICAgICByZXNv
dXJjZVR5cGVPbmx5LmFkZChyZXNvdXJjZVR5cGUpOworICAgICAgICB0cmF2ZXJzZVJlY29yZHNG
aWxlcyhyZWNvcmRzUGF0aCgpLCByZXNvdXJjZVR5cGVPbmx5LCBbdGhpcywgJnRyYXZlcnNlT3Bl
cmF0aW9uXShjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBjb25zdCBTdHJpbmcmIGhhc2hTdHJpbmcs
IGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBwYXJ0aXRpb25QYXRoKSB7CisgICAg
ICAgICAgICBBU1NFUlQodHlwZSA9PSByZXNvdXJjZVR5cGUpOwogICAgICAgICAgICAgYXV0byBy
ZWNvcmRQYXRoID0gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHBhcnRpdGlvblBh
dGgsIGZpbGVOYW1lKTsKIAogICAgICAgICAgICAgZG91YmxlIHdvcnRoID0gLTE7CkBAIC03OTEs
NyArODc1LDcgQEAgdm9pZCBTdG9yYWdlOjp0cmF2ZXJzZShUcmF2ZXJzZUZsYWdzIGZsYWdzLCBU
cmF2ZXJzZUhhbmRsZXImJiB0cmF2ZXJzZUhhbmRsZXIpCiAgICAgICAgICAgICAgICAgd29ydGgg
PSBjb21wdXRlUmVjb3JkV29ydGgoZmlsZVRpbWVzKHJlY29yZFBhdGgpKTsKICAgICAgICAgICAg
IHVuc2lnbmVkIGJvZHlTaGFyZUNvdW50ID0gMDsKICAgICAgICAgICAgIGlmICh0cmF2ZXJzZU9w
ZXJhdGlvbi5mbGFncyAmIFRyYXZlcnNlRmxhZzo6U2hhcmVDb3VudCkKLSAgICAgICAgICAgICAg
ICBib2R5U2hhcmVDb3VudCA9IG1fYmxvYlN0b3JhZ2Uuc2hhcmVDb3VudChib2R5UGF0aEZvclJl
Y29yZFBhdGgocmVjb3JkUGF0aCkpOworICAgICAgICAgICAgICAgIGJvZHlTaGFyZUNvdW50ID0g
bV9ibG9iU3RvcmFnZS5zaGFyZUNvdW50KHJlY29yZFBhdGggKyBibG9iU3VmZml4KTsKIAogICAg
ICAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxMb2NrPiBsb2NrKHRyYXZlcnNlT3BlcmF0aW9uLmFj
dGl2ZU11dGV4KTsKICAgICAgICAgICAgICsrdHJhdmVyc2VPcGVyYXRpb24uYWN0aXZlQ291bnQ7
CkBAIC04NTYsMjMgKzk0MCwyOCBAQCB2b2lkIFN0b3JhZ2U6OnNldENhcGFjaXR5KHNpemVfdCBj
YXBhY2l0eSkKICAgICBzaHJpbmtJZk5lZWRlZCgpOwogfQogCi12b2lkIFN0b3JhZ2U6OmNsZWFy
KHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6OnRpbWVfcG9pbnQgbW9kaWZpZWRTaW5jZVRpbWUs
IHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgU3RvcmFn
ZTo6Y2xlYXIoY29uc3QgU3RyaW5nJiB0eXBlLCBzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjp0
aW1lX3BvaW50IG1vZGlmaWVkU2luY2VUaW1lLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICBM
T0coTmV0d29ya0NhY2hlU3RvcmFnZSwgIihOZXR3b3JrUHJvY2VzcykgY2xlYXJpbmcgY2FjaGUi
KTsKIAogICAgIGlmIChtX3JlY29yZEZpbHRlcikKICAgICAgICAgbV9yZWNvcmRGaWx0ZXItPmNs
ZWFyKCk7Ci0gICAgaWYgKG1fYm9keUZpbHRlcikKLSAgICAgICAgbV9ib2R5RmlsdGVyLT5jbGVh
cigpOworICAgIGlmIChtX2JvZHlCbG9iRmlsdGVyKQorICAgICAgICBtX2JvZHlCbG9iRmlsdGVy
LT5jbGVhcigpOwogICAgIG1fYXBwcm94aW1hdGVSZWNvcmRzU2l6ZSA9IDA7CiAKICAgICAvLyBB
dm9pZCBub24tdGhyZWFkIHNhZmUgc3RkOjpmdW5jdGlvbiBjb3BpZXMuCiAgICAgYXV0byogY29t
cGxldGlvbkhhbmRsZXJQdHIgPSBjb21wbGV0aW9uSGFuZGxlciA/IG5ldyBzdGQ6OmZ1bmN0aW9u
PHZvaWQgKCk+KFdURjo6bW92ZShjb21wbGV0aW9uSGFuZGxlcikpIDogbnVsbHB0cjsKLQotICAg
IGlvUXVldWUoKS5kaXNwYXRjaChbdGhpcywgbW9kaWZpZWRTaW5jZVRpbWUsIGNvbXBsZXRpb25I
YW5kbGVyUHRyXSB7CisgICAgU3RyaW5nQ2FwdHVyZSB0eXBlQ2FwdHVyZSh0eXBlKTsKKyAgICBp
b1F1ZXVlKCkuZGlzcGF0Y2goW3RoaXMsIG1vZGlmaWVkU2luY2VUaW1lLCBjb21wbGV0aW9uSGFu
ZGxlclB0ciwgdHlwZUNhcHR1cmVdIHsKICAgICAgICAgYXV0byByZWNvcmRzUGF0aCA9IHRoaXMt
PnJlY29yZHNQYXRoKCk7Ci0gICAgICAgIHRyYXZlcnNlUmVjb3Jkc0ZpbGVzKHJlY29yZHNQYXRo
LCBbbW9kaWZpZWRTaW5jZVRpbWVdKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IFN0cmlu
ZyYgcGFydGl0aW9uUGF0aCkgeworICAgICAgICBIYXNoU2V0PFN0cmluZz4gdHlwZXM7CisgICAg
ICAgIGlmICghdHlwZUNhcHR1cmUuc3RyaW5nKCkuaXNOdWxsKCkpCisgICAgICAgICAgICB0eXBl
cy5hZGQodHlwZUNhcHR1cmUuc3RyaW5nKCkpOworICAgICAgICBpZiAodHlwZVVzZXNCbG9iU3Rv
cmFnZSh0eXBlQ2FwdHVyZS5zdHJpbmcoKSkpCisgICAgICAgICAgICB0eXBlcy5hZGQodHlwZUNh
cHR1cmUuc3RyaW5nKCkgKyBibG9iU3VmZml4KTsKKyAgICAgICAgdHJhdmVyc2VSZWNvcmRzRmls
ZXMocmVjb3Jkc1BhdGgsIHR5cGVzLCBbbW9kaWZpZWRTaW5jZVRpbWVdKGNvbnN0IFN0cmluZyYg
ZmlsZU5hbWUsIGNvbnN0IFN0cmluZyYgaGFzaFN0cmluZywgY29uc3QgU3RyaW5nJiB0eXBlLCBj
b25zdCBTdHJpbmcmIHBhcnRpdGlvblBhdGgpIHsKICAgICAgICAgICAgIGF1dG8gZmlsZVBhdGgg
PSBXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQocGFydGl0aW9uUGF0aCwgZmlsZU5h
bWUpOwogICAgICAgICAgICAgaWYgKG1vZGlmaWVkU2luY2VUaW1lID4gc3RkOjpjaHJvbm86OnN5
c3RlbV9jbG9jazo6dGltZV9wb2ludDo6bWluKCkpIHsKICAgICAgICAgICAgICAgICBhdXRvIHRp
bWVzID0gZmlsZVRpbWVzKGZpbGVQYXRoKTsKQEAgLTg4NCw3ICs5NzMsNyBAQCB2b2lkIFN0b3Jh
Z2U6OmNsZWFyKHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6OnRpbWVfcG9pbnQgbW9kaWZpZWRT
aW5jZVRpbWUsIHN0ZAogCiAgICAgICAgIGRlbGV0ZUVtcHR5UmVjb3Jkc0RpcmVjdG9yaWVzKHJl
Y29yZHNQYXRoKTsKIAotICAgICAgICAvLyBUaGlzIGNsZWFucyB1bnJlZmVyZW5jZXMgYmxvYnMu
CisgICAgICAgIC8vIFRoaXMgY2xlYW5zIHVucmVmZXJlbmNlZCBibG9icy4KICAgICAgICAgbV9i
bG9iU3RvcmFnZS5zeW5jaHJvbml6ZSgpOwogCiAgICAgICAgIGlmIChjb21wbGV0aW9uSGFuZGxl
clB0cikgewpAQCAtOTIzLDcgKzEwMTIsNyBAQCBzdGF0aWMgZG91YmxlIGRlbGV0aW9uUHJvYmFi
aWxpdHkoRmlsZVRpbWVzIHRpbWVzLCB1bnNpZ25lZCBib2R5U2hhcmVDb3VudCkKIAogICAgIGF1
dG8gcHJvYmFiaWxpdHkgPSAgKDEgLSBlZmZlY3RpdmVXb3J0aCkgKiBtYXhpbXVtUHJvYmFiaWxp
dHk7CiAKLSAgICAvLyBJdCBpcyBsZXNzIHVzZWZ1bCB0byByZW1vdmUgYW4gZW50cnkgdGhhdCBz
aGFyZXMgaXRzIGJvZHkgZGF0YS4KKyAgICAvLyBJdCBpcyBsZXNzIHVzZWZ1bCB0byByZW1vdmUg
YW4gZW50cnkgdGhhdCBzaGFyZXMgaXRzIGJvZHkgYmxvYiBkYXRhLgogICAgIGlmIChib2R5U2hh
cmVDb3VudCkKICAgICAgICAgcHJvYmFiaWxpdHkgLz0gc3RkOjptaW4oYm9keVNoYXJlQ291bnQs
IG1heGltdW1FZmZlY3RpdmVTaGFyZUNvdW50KTsKIApAQCAtOTUwLDIzICsxMDM5LDI0IEBAIHZv
aWQgU3RvcmFnZTo6c2hyaW5rKCkKIAogICAgIGJhY2tncm91bmRJT1F1ZXVlKCkuZGlzcGF0Y2go
W3RoaXNdIHsKICAgICAgICAgYXV0byByZWNvcmRzUGF0aCA9IHRoaXMtPnJlY29yZHNQYXRoKCk7
Ci0gICAgICAgIHRyYXZlcnNlUmVjb3Jkc0ZpbGVzKHJlY29yZHNQYXRoLCBbdGhpc10oY29uc3Qg
U3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgU3RyaW5nJiBwYXJ0aXRpb25QYXRoKSB7Ci0gICAgICAg
ICAgICBpZiAoZmlsZU5hbWUubGVuZ3RoKCkgIT0gS2V5OjpoYXNoU3RyaW5nTGVuZ3RoKCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBIYXNoU2V0PFN0cmluZz4gcmVzb3VyY2VU
eXBlT25seTsKKyAgICAgICAgcmVzb3VyY2VUeXBlT25seS5hZGQocmVzb3VyY2VUeXBlKTsKKyAg
ICAgICAgdHJhdmVyc2VSZWNvcmRzRmlsZXMocmVjb3Jkc1BhdGgsIHJlc291cmNlVHlwZU9ubHks
IFt0aGlzXShjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBjb25zdCBTdHJpbmcmIGhhc2hTdHJpbmcs
IGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBwYXJ0aXRpb25QYXRoKSB7CisgICAg
ICAgICAgICBBU1NFUlQodHlwZSA9PSByZXNvdXJjZVR5cGUpOwogICAgICAgICAgICAgYXV0byBy
ZWNvcmRQYXRoID0gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHBhcnRpdGlvblBh
dGgsIGZpbGVOYW1lKTsKLSAgICAgICAgICAgIGF1dG8gYm9keVBhdGggPSBib2R5UGF0aEZvclJl
Y29yZFBhdGgocmVjb3JkUGF0aCk7CisgICAgICAgICAgICBhdXRvIGJvZHlCbG9iUGF0aCA9IHJl
Y29yZFBhdGggKyBibG9iU3VmZml4OwogCiAgICAgICAgICAgICBhdXRvIHRpbWVzID0gZmlsZVRp
bWVzKHJlY29yZFBhdGgpOwotICAgICAgICAgICAgdW5zaWduZWQgYm9keVNoYXJlQ291bnQgPSBt
X2Jsb2JTdG9yYWdlLnNoYXJlQ291bnQoYm9keVBhdGgpOworICAgICAgICAgICAgdW5zaWduZWQg
Ym9keVNoYXJlQ291bnQgPSBtX2Jsb2JTdG9yYWdlLnNoYXJlQ291bnQoYm9keUJsb2JQYXRoKTsK
ICAgICAgICAgICAgIGF1dG8gcHJvYmFiaWxpdHkgPSBkZWxldGlvblByb2JhYmlsaXR5KHRpbWVz
LCBib2R5U2hhcmVDb3VudCk7CiAKICAgICAgICAgICAgIGJvb2wgc2hvdWxkRGVsZXRlID0gcmFu
ZG9tTnVtYmVyKCkgPCBwcm9iYWJpbGl0eTsKIAotICAgICAgICAgICAgTE9HKE5ldHdvcmtDYWNo
ZVN0b3JhZ2UsICJEZWxldGlvbiBwcm9iYWJpbGl0eT0lZiBib2R5TGlua0NvdW50PSVkIHNob3Vs
ZERlbGV0ZT0lZCIsIHByb2JhYmlsaXR5LCBib2R5U2hhcmVDb3VudCwgc2hvdWxkRGVsZXRlKTsK
KyAgICAgICAgICAgIExPRyhOZXR3b3JrQ2FjaGVTdG9yYWdlLCAiRGVsZXRpb24gcHJvYmFiaWxp
dHk9JWYgYm9keVNoYXJlQ291bnQ9JWQgc2hvdWxkRGVsZXRlPSVkIiwgcHJvYmFiaWxpdHksIGJv
ZHlTaGFyZUNvdW50LCBzaG91bGREZWxldGUpOwogCiAgICAgICAgICAgICBpZiAoc2hvdWxkRGVs
ZXRlKSB7CiAgICAgICAgICAgICAgICAgV2ViQ29yZTo6ZGVsZXRlRmlsZShyZWNvcmRQYXRoKTsK
LSAgICAgICAgICAgICAgICBtX2Jsb2JTdG9yYWdlLnJlbW92ZShib2R5UGF0aCk7CisgICAgICAg
ICAgICAgICAgbV9ibG9iU3RvcmFnZS5yZW1vdmUoYm9keUJsb2JQYXRoKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgfSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuaAppbmRleCAzNmRjMWQ5Li44NmFiM2U2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3Jr
Q2FjaGVTdG9yYWdlLmgKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUv
TmV0d29ya0NhY2hlU3RvcmFnZS5oCkBAIC0zNCw5ICszNCwxMSBAQAogI2luY2x1ZGUgPFdlYkNv
cmUvVGltZXIuaD4KICNpbmNsdWRlIDx3dGYvQmxvb21GaWx0ZXIuaD4KICNpbmNsdWRlIDx3dGYv
RGVxdWUuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0
Lmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL1dvcmtRdWV1ZS5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC00OSwyMyArNTEsMjMgQEAgY2xh
c3MgU3RvcmFnZSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxTdG9yYWdl
PiBvcGVuKGNvbnN0IFN0cmluZyYgY2FjaGVQYXRoKTsKIAotICAgIHN0cnVjdCBSZWNvcmQgewor
ICAgIGNsYXNzIFJlY29yZCB7CiAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAg
IHB1YmxpYzoKICAgICAgICAgS2V5IGtleTsKICAgICAgICAgc3RkOjpjaHJvbm86OnN5c3RlbV9j
bG9jazo6dGltZV9wb2ludCB0aW1lU3RhbXA7Ci0gICAgICAgIERhdGEgaGVhZGVyOworICAgICAg
ICBEYXRhIGhlYWRlcjsgLy8gT25seSB1c2VkIGJ5IHJlc291cmNlIHR5cGUuCiAgICAgICAgIERh
dGEgYm9keTsKICAgICB9OwogICAgIC8vIFRoaXMgbWF5IGNhbGwgY29tcGxldGlvbiBoYW5kbGVy
IHN5bmNocm9ub3VzbHkgb24gZmFpbHVyZS4KICAgICB0eXBlZGVmIHN0ZDo6ZnVuY3Rpb248Ym9v
bCAoc3RkOjp1bmlxdWVfcHRyPFJlY29yZD4pPiBSZXRyaWV2ZUNvbXBsZXRpb25IYW5kbGVyOwot
ICAgIHZvaWQgcmV0cmlldmUoY29uc3QgS2V5JiwgdW5zaWduZWQgcHJpb3JpdHksIFJldHJpZXZl
Q29tcGxldGlvbkhhbmRsZXImJik7CisgICAgdm9pZCByZXRyaWV2ZShjb25zdCBLZXkmLCBjb25z
dCBTdHJpbmcmIHR5cGUsIHVuc2lnbmVkIHByaW9yaXR5LCBSZXRyaWV2ZUNvbXBsZXRpb25IYW5k
bGVyJiYpOwogCiAgICAgdHlwZWRlZiBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGNvbnN0IERhdGEmIG1h
cHBlZEJvZHkpPiBNYXBwZWRCb2R5SGFuZGxlcjsKLSAgICB2b2lkIHN0b3JlKGNvbnN0IFJlY29y
ZCYsIE1hcHBlZEJvZHlIYW5kbGVyJiYpOworICAgIHZvaWQgc3RvcmUoY29uc3QgUmVjb3JkJiwg
Y29uc3QgU3RyaW5nJiB0eXBlLCBNYXBwZWRCb2R5SGFuZGxlciYmKTsKIAotICAgIHZvaWQgcmVt
b3ZlKGNvbnN0IEtleSYpOwotICAgIHZvaWQgY2xlYXIoc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9j
azo6dGltZV9wb2ludCBtb2RpZmllZFNpbmNlVGltZSwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKTsKKyAgICB2b2lkIHJlbW92ZShjb25zdCBLZXkmLCBjb25zdCBT
dHJpbmcmIHR5cGUpOworICAgIHZvaWQgY2xlYXIoY29uc3QgU3RyaW5nJiB0eXBlLCBzdGQ6OmNo
cm9ubzo6c3lzdGVtX2Nsb2NrOjp0aW1lX3BvaW50IG1vZGlmaWVkU2luY2VUaW1lLCBzdGQ6OmZ1
bmN0aW9uPHZvaWQgKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpOwogCiAgICAgc3RydWN0IFJlY29y
ZEluZm8gewogICAgICAgICBzaXplX3QgYm9keVNpemU7CkBAIC04Niw3ICs4OCw3IEBAIHB1Ymxp
YzoKICAgICBzaXplX3QgY2FwYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX2NhcGFjaXR5OyB9CiAg
ICAgc2l6ZV90IGFwcHJveGltYXRlU2l6ZSgpIGNvbnN0OwogCi0gICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIHZlcnNpb24gPSA0OworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCB2ZXJzaW9uID0g
NTsKIAogICAgIFN0cmluZyBiYXNlUGF0aCgpIGNvbnN0OwogICAgIFN0cmluZyB2ZXJzaW9uUGF0
aCgpIGNvbnN0OwpAQCAtOTgsOCArMTAwLDggQEAgcHJpdmF0ZToKICAgICBTdG9yYWdlKGNvbnN0
IFN0cmluZyYgZGlyZWN0b3J5UGF0aCk7CiAKICAgICBTdHJpbmcgcGFydGl0aW9uUGF0aEZvcktl
eShjb25zdCBLZXkmKSBjb25zdDsKLSAgICBTdHJpbmcgcmVjb3JkUGF0aEZvcktleShjb25zdCBL
ZXkmKSBjb25zdDsKLSAgICBTdHJpbmcgYm9keVBhdGhGb3JLZXkoY29uc3QgS2V5JikgY29uc3Q7
CisgICAgU3RyaW5nIGJvZHlCbG9iUGF0aEZvcktleShjb25zdCBLZXkmLCBjb25zdCBTdHJpbmcm
IHR5cGUpIGNvbnN0OworICAgIFN0cmluZyByZWNvcmRQYXRoRm9yS2V5KGNvbnN0IEtleSYsIGNv
bnN0IFN0cmluZyYgdHlwZSkgY29uc3Q7CiAKICAgICB2b2lkIHN5bmNocm9uaXplKCk7CiAgICAg
dm9pZCBkZWxldGVPbGRWZXJzaW9ucygpOwpAQCAtMTE5LDE4ICsxMjEsMjEgQEAgcHJpdmF0ZToK
IAogICAgIE9wdGlvbmFsPEJsb2JTdG9yYWdlOjpCbG9iPiBzdG9yZUJvZHlBc0Jsb2IoV3JpdGVP
cGVyYXRpb24mKTsKICAgICBEYXRhIGVuY29kZVJlY29yZChjb25zdCBSZWNvcmQmLCBPcHRpb25h
bDxCbG9iU3RvcmFnZTo6QmxvYj4pOworICAgIERhdGEgZW5jb2RlUmVjb3JkV2l0aEhlYWRlcihj
b25zdCBSZWNvcmQmLCBPcHRpb25hbDxCbG9iU3RvcmFnZTo6QmxvYj4pOwogICAgIHZvaWQgcmVh
ZFJlY29yZChSZWFkT3BlcmF0aW9uJiwgY29uc3QgRGF0YSYpOworICAgIHZvaWQgcmVhZFJlY29y
ZFdpdGhIZWFkZXIoUmVhZE9wZXJhdGlvbiYsIGNvbnN0IERhdGEmKTsKIAogICAgIHZvaWQgdXBk
YXRlRmlsZU1vZGlmaWNhdGlvblRpbWUoY29uc3QgU3RyaW5nJiBwYXRoKTsKLSAgICBib29sIHJl
bW92ZUZyb21QZW5kaW5nV3JpdGVPcGVyYXRpb25zKGNvbnN0IEtleSYpOworICAgIGJvb2wgcmVt
b3ZlRnJvbVBlbmRpbmdXcml0ZU9wZXJhdGlvbnMoY29uc3QgS2V5JiwgY29uc3QgU3RyaW5nJiB0
eXBlKTsKIAogICAgIFdvcmtRdWV1ZSYgaW9RdWV1ZSgpIHsgcmV0dXJuIG1faW9RdWV1ZS5nZXQo
KTsgfQogICAgIFdvcmtRdWV1ZSYgYmFja2dyb3VuZElPUXVldWUoKSB7IHJldHVybiBtX2JhY2tn
cm91bmRJT1F1ZXVlLmdldCgpOyB9CiAgICAgV29ya1F1ZXVlJiBzZXJpYWxCYWNrZ3JvdW5kSU9R
dWV1ZSgpIHsgcmV0dXJuIG1fc2VyaWFsQmFja2dyb3VuZElPUXVldWUuZ2V0KCk7IH0KIAotICAg
IGJvb2wgbWF5Q29udGFpbihjb25zdCBLZXkmKSBjb25zdDsKKyAgICBib29sIG1heUNvbnRhaW4o
Y29uc3QgS2V5JiwgY29uc3QgU3RyaW5nJiB0eXBlKSBjb25zdDsKKyAgICBib29sIG1heUNvbnRh
aW5CbG9iKGNvbnN0IEtleSYsIGNvbnN0IFN0cmluZyYgdHlwZSkgY29uc3Q7CiAKLSAgICB2b2lk
IGFkZFRvUmVjb3JkRmlsdGVyKGNvbnN0IEtleSYpOworICAgIHZvaWQgYWRkVG9SZWNvcmRGaWx0
ZXIoY29uc3QgS2V5JiwgY29uc3QgU3RyaW5nJiB0eXBlKTsKIAogICAgIGNvbnN0IFN0cmluZyBt
X2Jhc2VQYXRoOwogICAgIGNvbnN0IFN0cmluZyBtX3JlY29yZHNQYXRoOwpAQCAtMTQxLDEzICsx
NDYsMTMgQEAgcHJpdmF0ZToKICAgICAvLyAyXjE4IGJpdCBmaWx0ZXIgY2FuIHN1cHBvcnQgdXAg
dG8gMjYwMDAgZW50cmllcyB3aXRoIGZhbHNlIHBvc2l0aXZlIHJhdGUgPCAxJS4KICAgICB1c2lu
ZyBDb250ZW50c0ZpbHRlciA9IEJsb29tRmlsdGVyPDE4PjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
Q29udGVudHNGaWx0ZXI+IG1fcmVjb3JkRmlsdGVyOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxDb250
ZW50c0ZpbHRlcj4gbV9ib2R5RmlsdGVyOworICAgIHN0ZDo6dW5pcXVlX3B0cjxDb250ZW50c0Zp
bHRlcj4gbV9ib2R5QmxvYkZpbHRlcjsKIAogICAgIGJvb2wgbV9zeW5jaHJvbml6YXRpb25JblBy
b2dyZXNzIHsgZmFsc2UgfTsKICAgICBib29sIG1fc2hyaW5rSW5Qcm9ncmVzcyB7IGZhbHNlIH07
CiAKICAgICBWZWN0b3I8S2V5OjpIYXNoVHlwZT4gbV9yZWNvcmRGaWx0ZXJIYXNoZXNBZGRlZER1
cmluZ1N5bmNocm9uaXphdGlvbjsKLSAgICBWZWN0b3I8S2V5OjpIYXNoVHlwZT4gbV9ib2R5Rmls
dGVySGFzaGVzQWRkZWREdXJpbmdTeW5jaHJvbml6YXRpb247CisgICAgVmVjdG9yPEtleTo6SGFz
aFR5cGU+IG1fYm9keUJsb2JGaWx0ZXJIYXNoZXNBZGRlZER1cmluZ1N5bmNocm9uaXphdGlvbjsK
IAogICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4aW11bVJldHJpZXZlUHJpb3JpdHkgPSA0OwogICAg
IERlcXVlPHN0ZDo6dW5pcXVlX3B0cjxSZWFkT3BlcmF0aW9uPj4gbV9wZW5kaW5nUmVhZE9wZXJh
dGlvbnNCeVByaW9yaXR5W21heGltdW1SZXRyaWV2ZVByaW9yaXR5ICsgMV07CkBAIC0xNjksNyAr
MTc0LDcgQEAgcHJpdmF0ZToKIH07CiAKIC8vIEZJWE1FOiBSZW1vdmUsIHVzZWQgYnkgTmV0d29y
a0NhY2hlU3RhdGlzdGljcyBvbmx5Lgotdm9pZCB0cmF2ZXJzZVJlY29yZHNGaWxlcyhjb25zdCBT
dHJpbmcmIHJlY29yZHNQYXRoLCBjb25zdCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGNvbnN0IFN0cmlu
ZyYsIGNvbnN0IFN0cmluZyYpPiYpOwordm9pZCB0cmF2ZXJzZVJlY29yZHNGaWxlcyhjb25zdCBT
dHJpbmcmIHJlY29yZHNQYXRoLCBjb25zdCBIYXNoU2V0PFN0cmluZz4mIHR5cGVzLCBjb25zdCBz
dGQ6OmZ1bmN0aW9uPHZvaWQgKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IFN0cmluZyYg
aGFzaFN0cmluZywgY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIHBhcnRpdGlvblBh
dGgpPiYpOwogCiB9CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263244</attachid>
            <date>2015-10-15 21:31:14 -0700</date>
            <delta_ts>2015-10-15 22:26:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150221-20151015213036.patch</filename>
            <type>text/plain</type>
            <size>37495</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkxMDA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggYTM2YjNkN2M1YjU3MDVk
YjkyNzY5MzE3ZDM0OTM3NTg5YzllYjg1Mi4uYjkxYWU4NGQzZGI2NTZhYmJhNmI1YTI1YjFmYTUw
YzQ5NWZiMmI2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDE1LTEwLTE1ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgW1dLMl0gR2VuZXJhbGl6ZSBO
ZXR3b3JrQ2FjaGVTdG9yYWdlIEFQSSBzbyBpdCBjYW4gc3RvcmUgZGlmZmVyZW50IHR5cGVzIG9m
IG1ldGFkYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTAyMjEKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzIzMDkyMTk2PgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEdlbmVyYWxpemUgTmV0d29ya0Nh
Y2hlU3RvcmFnZSBBUEkgc28gaXQgY2FuIHN0b3JlIGRpZmZlcmVudCB0eXBlcyBvZgorICAgICAg
ICBtZXRhZGF0YSBhbG9uZ3NpZGUgdGhlIG5ldHdvcmsgcmVzb3VyY2VzLiBUaGlzIGlzIGEgcHJl
LXJlcXVpcmVtZW50IHRvCisgICAgICAgIG1ha2luZyBvdXIgTmV0d29ya0NhY2hlIHNtYXJ0ZXIg
Ynkgc3RvcmluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUKKyAgICAgICAgcmVzb3VyY2VzLgorCisg
ICAgICAgIFRvIHNpbXBsaWZ5IHRoZSBjb2RlLCBhbGwgY2FjaGUgZW50cmllcyBub3cgaGF2ZSBh
IHN1ZmZpeCwgc28gdGhhdCB0aGV5CisgICAgICAgIGFsbCBmb2xsb3dpbmcgdGhlIGZvbGxvd2lu
ZyBmb3JtYXQ6CisgICAgICAgIC0gUmVndWxhciBlbnRyaWVzOiBbaGFzaF0tW3R5cGVdCisgICAg
ICAgIC0gQmxvYnM6IFtoYXNoXS1bdHlwZV1ibG9iCisKKyAgICAgICAgVGhlIHR5cGUgb2YgZXhp
c3RpbmcgY2FjaGUgZW50cmllcyBpcyAncmVzb3VyY2UnIGFzIHRoZXNlIGFyZSBuZXR3b3JrCisg
ICAgICAgIHJlc291cmNlcy4gSW4gdGhlIGZ1dHVyZSwgd2UgY2FuIHN0b3JlIG1vcmUgdHlwZXMg
b2YgY2FjaGUgZW50cmllcy4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZS5jcHA6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hl
U3RhdGlzdGljcy5jcHA6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlU3RvcmFnZS5jcHA6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlU3RvcmFnZS5oOgorCiAyMDE1LTEwLTEzICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBh
cHBsZS5jb20+CiAKICAgICAgICAgQWRkIGFuZCBpbXBsZW1lbnQgV0tQYWdlR2V0T2JqZWN0UmVn
aXN0cnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGUuY3BwCmluZGV4IGFmODc0OTM1NTUxZGFkNTQ2NjAxMGZlYTJhNjkzZTM1ZjkzZTgz
YWIuLmRjMmZlNWQ2NGY3NDQ3ZWY1NTFhMmNjMDdlNmZmY2IzMjZkN2NlMTAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNwcApA
QCAtNTAsNiArNTAsMTIgQEAKIG5hbWVzcGFjZSBXZWJLaXQgewogbmFtZXNwYWNlIE5ldHdvcmtD
YWNoZSB7CiAKK3N0YXRpYyBjb25zdCBTdHJpbmcgcmVzb3VyY2VUeXBlKCkKK3sKKyAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiByZXNvdXJjZShBU0NJSUxpdGVyYWwoInJl
c291cmNlIikpOworICAgIHJldHVybiByZXNvdXJjZTsKK30KKwogQ2FjaGUmIHNpbmdsZXRvbigp
CiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPENhY2hlPiBpbnN0YW5jZTsKQEAgLTM1Miw3
ICszNTgsNyBAQCB2b2lkIENhY2hlOjpyZXRyaWV2ZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3QmIG9yaWdpbmFsUmVxdWVzdCwgdWludDY0X3QgdwogICAgIGF1dG8gc3RhcnRUaW1lID0g
c3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6bm93KCk7CiAgICAgYXV0byBwcmlvcml0eSA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkPihvcmlnaW5hbFJlcXVlc3QucHJpb3JpdHkoKSk7CiAKLSAgICBt
X3N0b3JhZ2UtPnJldHJpZXZlKHN0b3JhZ2VLZXksIHByaW9yaXR5LCBbdGhpcywgb3JpZ2luYWxS
ZXF1ZXN0LCBjb21wbGV0aW9uSGFuZGxlciwgc3RhcnRUaW1lLCBzdG9yYWdlS2V5LCB3ZWJQYWdl
SURdKHN0ZDo6dW5pcXVlX3B0cjxTdG9yYWdlOjpSZWNvcmQ+IHJlY29yZCkgeworICAgIG1fc3Rv
cmFnZS0+cmV0cmlldmUoc3RvcmFnZUtleSwgcmVzb3VyY2VUeXBlKCksIHByaW9yaXR5LCBbdGhp
cywgb3JpZ2luYWxSZXF1ZXN0LCBjb21wbGV0aW9uSGFuZGxlciwgc3RhcnRUaW1lLCBzdG9yYWdl
S2V5LCB3ZWJQYWdlSURdKHN0ZDo6dW5pcXVlX3B0cjxTdG9yYWdlOjpSZWNvcmQ+IHJlY29yZCkg
ewogICAgICAgICBpZiAoIXJlY29yZCkgewogICAgICAgICAgICAgTE9HKE5ldHdvcmtDYWNoZSwg
IihOZXR3b3JrUHJvY2Vzcykgbm90IGZvdW5kIGluIHN0b3JhZ2UiKTsKIApAQCAtNDI1LDcgKzQz
MSw3IEBAIHZvaWQgQ2FjaGU6OnN0b3JlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYg
b3JpZ2luYWxSZXF1ZXN0LCBjb25zdCBXZWJDb3JlCiAKICAgICBhdXRvIHJlY29yZCA9IGNhY2hl
RW50cnkuZW5jb2RlQXNTdG9yYWdlUmVjb3JkKCk7CiAKLSAgICBtX3N0b3JhZ2UtPnN0b3JlKHJl
Y29yZCwgW2NvbXBsZXRpb25IYW5kbGVyXShjb25zdCBEYXRhJiBib2R5RGF0YSkgeworICAgIG1f
c3RvcmFnZS0+c3RvcmUocmVjb3JkLCByZXNvdXJjZVR5cGUoKSwgW2NvbXBsZXRpb25IYW5kbGVy
XShjb25zdCBEYXRhJiBib2R5RGF0YSkgewogICAgICAgICBNYXBwZWRCb2R5IG1hcHBlZEJvZHk7
CiAjaWYgRU5BQkxFKFNIQVJFQUJMRV9SRVNPVVJDRSkKICAgICAgICAgaWYgKFJlZlB0cjxTaGFy
ZWRNZW1vcnk+IHNoYXJlZE1lbW9yeSA9IGJvZHlEYXRhLnRyeUNyZWF0ZVNoYXJlZE1lbW9yeSgp
KSB7CkBAIC00NTAsNyArNDU2LDcgQEAgdm9pZCBDYWNoZTo6dXBkYXRlKGNvbnN0IFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdCYgb3JpZ2luYWxSZXF1ZXN0LCB1aW50NjRfdCB3ZWIKIAogICAgIGF1
dG8gdXBkYXRlUmVjb3JkID0gdXBkYXRlRW50cnkuZW5jb2RlQXNTdG9yYWdlUmVjb3JkKCk7CiAK
LSAgICBtX3N0b3JhZ2UtPnN0b3JlKHVwZGF0ZVJlY29yZCwgeyB9KTsKKyAgICBtX3N0b3JhZ2Ut
PnN0b3JlKHVwZGF0ZVJlY29yZCwgcmVzb3VyY2VUeXBlKCksIHsgfSk7CiAKICAgICBpZiAobV9z
dGF0aXN0aWNzKQogICAgICAgICBtX3N0YXRpc3RpY3MtPnJlY29yZFJldmFsaWRhdGlvblN1Y2Nl
c3Mod2ViUGFnZUlELCBleGlzdGluZ0VudHJ5LmtleSgpLCBvcmlnaW5hbFJlcXVlc3QpOwpAQCAt
NDYwLDcgKzQ2Niw3IEBAIHZvaWQgQ2FjaGU6OnJlbW92ZShjb25zdCBLZXkmIGtleSkKIHsKICAg
ICBBU1NFUlQoaXNFbmFibGVkKCkpOwogCi0gICAgbV9zdG9yYWdlLT5yZW1vdmUoa2V5KTsKKyAg
ICBtX3N0b3JhZ2UtPnJlbW92ZShrZXksIHJlc291cmNlVHlwZSgpKTsKIH0KIAogdm9pZCBDYWNo
ZTo6cmVtb3ZlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKQEAgLTU2
Nyw3ICs1NzMsNyBAQCB2b2lkIENhY2hlOjpjbGVhcihzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2Nr
Ojp0aW1lX3BvaW50IG1vZGlmaWVkU2luY2UsIHN0ZDo6ZnVuYwogICAgICAgICBSdW5Mb29wOjpt
YWluKCkuZGlzcGF0Y2goY29tcGxldGlvbkhhbmRsZXIpOwogICAgICAgICByZXR1cm47CiAgICAg
fQotICAgIG1fc3RvcmFnZS0+Y2xlYXIobW9kaWZpZWRTaW5jZSwgV1RGOjptb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CisgICAgbV9zdG9yYWdlLT5jbGVhcihyZXNvdXJjZVR5cGUoKSwgbW9kaWZp
ZWRTaW5jZSwgV1RGOjptb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKICAgICBkZWxldGVEdW1w
RmlsZSgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlU3RhdGlzdGljcy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdGF0aXN0aWNzLmNwcAppbmRleCBmYmUxNDVlYWE1YmM0
MTI1M2JmNzhhZWZmZDcyNTE1ZTU4ZjE1Mjk3Li40YTc4ZDEwNjkxMDIwYWE1MWI4NTcyNWI2ZmM1
ZjIyOTc0YjYyNjAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9j
YWNoZS9OZXR3b3JrQ2FjaGVTdGF0aXN0aWNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdGF0aXN0aWNzLmNwcApAQCAtMTQ0LDcgKzE0
NCw5IEBAIHZvaWQgU3RhdGlzdGljczo6Ym9vdHN0cmFwRnJvbU5ldHdvcmtDYWNoZShjb25zdCBT
dHJpbmcmIG5ldHdvcmtDYWNoZVBhdGgpCiAgICAgTE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3b3Jr
UHJvY2VzcykgQm9vdHN0cmFwcGluZyB0aGUgbmV0d29yayBjYWNoZSBzdGF0aXN0aWNzIGRhdGFi
YXNlIGZyb20gdGhlIG5ldHdvcmsgY2FjaGUuLi4iKTsKIAogICAgIFZlY3RvcjxTdHJpbmdDYXB0
dXJlPiBoYXNoZXM7Ci0gICAgdHJhdmVyc2VSZWNvcmRzRmlsZXMobmV0d29ya0NhY2hlUGF0aCwg
WyZoYXNoZXNdKGNvbnN0IFN0cmluZyYgaGFzaFN0cmluZywgY29uc3QgU3RyaW5nJikgeworICAg
IEhhc2hTZXQ8U3RyaW5nPiByZXNvdXJjZXNPbmx5OworICAgIHJlc291cmNlc09ubHkuYWRkKEFT
Q0lJTGl0ZXJhbCgicmVzb3VyY2UiKSk7CisgICAgdHJhdmVyc2VSZWNvcmRzRmlsZXMobmV0d29y
a0NhY2hlUGF0aCwgcmVzb3VyY2VzT25seSwgWyZoYXNoZXNdKGNvbnN0IFN0cmluZyYgZmlsZU5h
bWUsIGNvbnN0IFN0cmluZyYgaGFzaFN0cmluZywgY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBT
dHJpbmcmIHBhcnRpdGlvblBhdGgpIHsKICAgICAgICAgS2V5OjpIYXNoVHlwZSBoYXNoOwogICAg
ICAgICBpZiAoIUtleTo6c3RyaW5nVG9IYXNoKGhhc2hTdHJpbmcsIGhhc2gpKQogICAgICAgICAg
ICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcAppbmRleCBmYTViYTdkYTIwNmZkMDk5YTM5
ZjQ4OWU4ODI3NDkyYTQxMDEyNTk1Li40ZjhjMzdhMTMxYjVmZWQ4YmYwMDU4YTdjZTk1ZWQwZTA2
YTM0YjEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcApAQCAtNDYsMTUgKzQ2LDI3IEBAIG5hbWVz
cGFjZSBOZXR3b3JrQ2FjaGUgewogc3RhdGljIGNvbnN0IGNoYXIgdmVyc2lvbkRpcmVjdG9yeVBy
ZWZpeFtdID0gIlZlcnNpb24gIjsKIHN0YXRpYyBjb25zdCBjaGFyIHJlY29yZHNEaXJlY3RvcnlO
YW1lW10gPSAiUmVjb3JkcyI7CiBzdGF0aWMgY29uc3QgY2hhciBibG9ic0RpcmVjdG9yeU5hbWVb
XSA9ICJCbG9icyI7Ci1zdGF0aWMgY29uc3QgY2hhciBib2R5UG9zdGZpeFtdID0gIi1ib2R5IjsK
K3N0YXRpYyBjb25zdCBjaGFyIHJlc291cmNlVHlwZVtdID0gInJlc291cmNlIjsKK3N0YXRpYyBj
b25zdCBjaGFyIGJsb2JTdWZmaXhbXSA9ICJibG9iIjsKKworc3RhdGljIGJvb2wgdHlwZVVzZXNC
bG9iU3RvcmFnZShjb25zdCBTdHJpbmcmIHR5cGUpCit7CisgICAgcmV0dXJuIHR5cGUgPT0gcmVz
b3VyY2VUeXBlOworfQorCitzdGF0aWMgYm9vbCB0eXBlVXNlc0hlYWRlcihjb25zdCBTdHJpbmcm
IHR5cGUpCit7CisgICAgcmV0dXJuIHR5cGUgPT0gcmVzb3VyY2VUeXBlOworfQogCiBzdGF0aWMg
ZG91YmxlIGNvbXB1dGVSZWNvcmRXb3J0aChGaWxlVGltZXMpOwogCiBzdHJ1Y3QgU3RvcmFnZTo6
UmVhZE9wZXJhdGlvbiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0g
ICAgUmVhZE9wZXJhdGlvbihjb25zdCBLZXkmIGtleSwgY29uc3QgUmV0cmlldmVDb21wbGV0aW9u
SGFuZGxlciYgY29tcGxldGlvbkhhbmRsZXIpCisgICAgUmVhZE9wZXJhdGlvbihjb25zdCBLZXkm
IGtleSwgY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBSZXRyaWV2ZUNvbXBsZXRpb25IYW5kbGVy
JiBjb21wbGV0aW9uSGFuZGxlcikKICAgICAgICAgOiBrZXkoa2V5KQorICAgICAgICAsIHR5cGUo
dHlwZSkKICAgICAgICAgLCBjb21wbGV0aW9uSGFuZGxlcihjb21wbGV0aW9uSGFuZGxlcikKICAg
ICB7IH0KIApAQCAtNjIsNiArNzQsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBmaW5pc2goKTsKIAog
ICAgIGNvbnN0IEtleSBrZXk7CisgICAgY29uc3QgU3RyaW5nIHR5cGU7CiAgICAgY29uc3QgUmV0
cmlldmVDb21wbGV0aW9uSGFuZGxlciBjb21wbGV0aW9uSGFuZGxlcjsKICAgICAKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8UmVjb3JkPiByZXN1bHRSZWNvcmQ7CkBAIC05OSwxMiArMTEyLDE0IEBAIGJv
b2wgU3RvcmFnZTo6UmVhZE9wZXJhdGlvbjo6ZmluaXNoKCkKIHN0cnVjdCBTdG9yYWdlOjpXcml0
ZU9wZXJhdGlvbiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAg
V3JpdGVPcGVyYXRpb24oY29uc3QgUmVjb3JkJiByZWNvcmQsIGNvbnN0IE1hcHBlZEJvZHlIYW5k
bGVyJiBtYXBwZWRCb2R5SGFuZGxlcikKKyAgICBXcml0ZU9wZXJhdGlvbihjb25zdCBSZWNvcmQm
IHJlY29yZCwgY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBNYXBwZWRCb2R5SGFuZGxlciYgbWFw
cGVkQm9keUhhbmRsZXIpCiAgICAgICAgIDogcmVjb3JkKHJlY29yZCkKKyAgICAgICAgLCB0eXBl
KHR5cGUpCiAgICAgICAgICwgbWFwcGVkQm9keUhhbmRsZXIobWFwcGVkQm9keUhhbmRsZXIpCiAg
ICAgeyB9CiAgICAgCiAgICAgY29uc3QgUmVjb3JkIHJlY29yZDsKKyAgICBjb25zdCBTdHJpbmcg
dHlwZTsKICAgICBjb25zdCBNYXBwZWRCb2R5SGFuZGxlciBtYXBwZWRCb2R5SGFuZGxlcjsKIAog
ICAgIHN0ZDo6YXRvbWljPHVuc2lnbmVkPiBhY3RpdmVDb3VudCB7IDAgfTsKQEAgLTEyNiw2ICsx
NDEsMjUgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGFjdGl2ZUNvdW50IHsgMCB9OwogfTsKIAor
c3RhdGljIHZvaWQgaGFzaFN0cmluZyhTSEExJiBzaGExLCBjb25zdCBTdHJpbmcmIHN0cmluZykK
K3sKKyAgICBhdXRvIGNTdHJpbmcgPSBzdHJpbmcudXRmOCgpOworICAgIHNoYTEuYWRkQnl0ZXMo
cmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oY1N0cmluZy5kYXRhKCkpLCBjU3RyaW5n
Lmxlbmd0aCgpICsgMSk7Cit9CisKK3N0YXRpYyBTSEExOjpEaWdlc3QgbWFrZVJlY29yZEZpbHRl
cktleShjb25zdCBTdHJpbmcmIGhhc2hBc1N0cmluZywgY29uc3QgU3RyaW5nJiB0eXBlKQorewor
ICAgIEFTU0VSVCghaGFzaEFzU3RyaW5nLmlzTnVsbCgpKTsKKyAgICBBU1NFUlQoIXR5cGUuaXNO
dWxsKCkpOworCisgICAgU0hBMSBzaGExOworICAgIGhhc2hTdHJpbmcoc2hhMSwgaGFzaEFzU3Ry
aW5nKTsKKyAgICBoYXNoU3RyaW5nKHNoYTEsIHR5cGUpOworICAgIFNIQTE6OkRpZ2VzdCBoYXNo
OworICAgIHNoYTEuY29tcHV0ZUhhc2goaGFzaCk7CisgICAgcmV0dXJuIGhhc2g7Cit9CisKIHN0
ZDo6dW5pcXVlX3B0cjxTdG9yYWdlPiBTdG9yYWdlOjpvcGVuKGNvbnN0IFN0cmluZyYgY2FjaGVQ
YXRoKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CkBAIC0xNTEsMTYgKzE4NSwy
MyBAQCBzdGF0aWMgU3RyaW5nIG1ha2VCbG9iRGlyZWN0b3J5UGF0aChjb25zdCBTdHJpbmcmIGJh
c2VEaXJlY3RvcnlQYXRoKQogICAgIHJldHVybiBXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21w
b25lbnQobWFrZVZlcnNpb25lZERpcmVjdG9yeVBhdGgoYmFzZURpcmVjdG9yeVBhdGgpLCBibG9i
c0RpcmVjdG9yeU5hbWUpOwogfQogCi12b2lkIHRyYXZlcnNlUmVjb3Jkc0ZpbGVzKGNvbnN0IFN0
cmluZyYgcmVjb3Jkc1BhdGgsIGNvbnN0IHN0ZDo6ZnVuY3Rpb248dm9pZCAoY29uc3QgU3RyaW5n
JiwgY29uc3QgU3RyaW5nJik+JiBmdW5jdGlvbikKK3ZvaWQgdHJhdmVyc2VSZWNvcmRzRmlsZXMo
Y29uc3QgU3RyaW5nJiByZWNvcmRzUGF0aCwgY29uc3QgSGFzaFNldDxTdHJpbmc+JiB0eXBlcywg
Y29uc3Qgc3RkOjpmdW5jdGlvbjx2b2lkIChjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBjb25zdCBT
dHJpbmcmIGhhc2gsIGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBwYXJ0aXRpb25Q
YXRoKT4mIGZ1bmN0aW9uKQogewotICAgIHRyYXZlcnNlRGlyZWN0b3J5KHJlY29yZHNQYXRoLCBb
JnJlY29yZHNQYXRoLCAmZnVuY3Rpb25dKGNvbnN0IFN0cmluZyYgc3ViZGlyTmFtZSwgRGlyZWN0
b3J5RW50cnlUeXBlIHR5cGUpIHsKLSAgICAgICAgaWYgKHR5cGUgIT0gRGlyZWN0b3J5RW50cnlU
eXBlOjpEaXJlY3RvcnkpCisgICAgdHJhdmVyc2VEaXJlY3RvcnkocmVjb3Jkc1BhdGgsIFsmcmVj
b3Jkc1BhdGgsICZmdW5jdGlvbiwgJnR5cGVzXShjb25zdCBTdHJpbmcmIHN1YmRpck5hbWUsIERp
cmVjdG9yeUVudHJ5VHlwZSBlbnRyeVR5cGUpIHsKKyAgICAgICAgaWYgKGVudHJ5VHlwZSAhPSBE
aXJlY3RvcnlFbnRyeVR5cGU6OkRpcmVjdG9yeSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgU3RyaW5nIHBhcnRpdGlvblBhdGggPSBXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25l
bnQocmVjb3Jkc1BhdGgsIHN1YmRpck5hbWUpOwotICAgICAgICB0cmF2ZXJzZURpcmVjdG9yeShw
YXJ0aXRpb25QYXRoLCBbJmZ1bmN0aW9uLCAmcGFydGl0aW9uUGF0aF0oY29uc3QgU3RyaW5nJiBm
aWxlTmFtZSwgRGlyZWN0b3J5RW50cnlUeXBlIHR5cGUpIHsKLSAgICAgICAgICAgIGlmICh0eXBl
ICE9IERpcmVjdG9yeUVudHJ5VHlwZTo6RmlsZSkKKyAgICAgICAgdHJhdmVyc2VEaXJlY3Rvcnko
cGFydGl0aW9uUGF0aCwgWyZmdW5jdGlvbiwgJnBhcnRpdGlvblBhdGgsICZ0eXBlc10oY29uc3Qg
U3RyaW5nJiBmaWxlTmFtZSwgRGlyZWN0b3J5RW50cnlUeXBlIGVudHJ5VHlwZSkgeworICAgICAg
ICAgICAgaWYgKGVudHJ5VHlwZSAhPSBEaXJlY3RvcnlFbnRyeVR5cGU6OkZpbGUgfHwgZmlsZU5h
bWVbS2V5OjpoYXNoU3RyaW5nTGVuZ3RoKCldICE9ICctJykKKyAgICAgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgICAgIGF1dG8gdHlwZSA9IGZpbGVOYW1lLnN1YnN0cmluZyhLZXk6Omhh
c2hTdHJpbmdMZW5ndGgoKSArIDEpOworCisgICAgICAgICAgICBpZiAoIXR5cGVzLmlzRW1wdHko
KSAmJiAhdHlwZXMuY29udGFpbnModHlwZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgZnVuY3Rpb24oZmlsZU5hbWUsIHBhcnRpdGlvblBhdGgpOworCisgICAgICAgICAg
ICBhdXRvIGhhc2hTdHJpbmcgPSBmaWxlTmFtZS5zdWJzdHJpbmcoMCwgS2V5OjpoYXNoU3RyaW5n
TGVuZ3RoKCkpOworICAgICAgICAgICAgZnVuY3Rpb24oZmlsZU5hbWUsIGhhc2hTdHJpbmcsIHR5
cGUsIHBhcnRpdGlvblBhdGgpOwogICAgICAgICB9KTsKICAgICB9KTsKIH0KQEAgLTIyNSwxNCAr
MjY2LDEzIEBAIHZvaWQgU3RvcmFnZTo6c3luY2hyb25pemUoKQogCiAgICAgYmFja2dyb3VuZElP
UXVldWUoKS5kaXNwYXRjaChbdGhpc10gewogICAgICAgICBhdXRvIHJlY29yZEZpbHRlciA9IHN0
ZDo6bWFrZV91bmlxdWU8Q29udGVudHNGaWx0ZXI+KCk7Ci0gICAgICAgIGF1dG8gYm9keUZpbHRl
ciA9IHN0ZDo6bWFrZV91bmlxdWU8Q29udGVudHNGaWx0ZXI+KCk7CisgICAgICAgIGF1dG8gYm9k
eUJsb2JGaWx0ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPENvbnRlbnRzRmlsdGVyPigpOwogICAgICAg
ICBzaXplX3QgcmVjb3Jkc1NpemUgPSAwOwogICAgICAgICB1bnNpZ25lZCBjb3VudCA9IDA7Ci0g
ICAgICAgIHRyYXZlcnNlUmVjb3Jkc0ZpbGVzKHJlY29yZHNQYXRoKCksIFsmcmVjb3JkRmlsdGVy
LCAmYm9keUZpbHRlciwgJnJlY29yZHNTaXplLCAmY291bnRdKGNvbnN0IFN0cmluZyYgZmlsZU5h
bWUsIGNvbnN0IFN0cmluZyYgcGFydGl0aW9uUGF0aCkgeworICAgICAgICBIYXNoU2V0PFN0cmlu
Zz4gYW55VHlwZTsKKyAgICAgICAgdHJhdmVyc2VSZWNvcmRzRmlsZXMocmVjb3Jkc1BhdGgoKSwg
YW55VHlwZSwgWyZyZWNvcmRGaWx0ZXIsICZib2R5QmxvYkZpbHRlciwgJnJlY29yZHNTaXplLCAm
Y291bnRdKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IFN0cmluZyYgaGFzaFN0cmluZywg
Y29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIHBhcnRpdGlvblBhdGgpIHsKICAgICAg
ICAgICAgIGF1dG8gZmlsZVBhdGggPSBXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQo
cGFydGl0aW9uUGF0aCwgZmlsZU5hbWUpOwogCi0gICAgICAgICAgICBib29sIGlzQm9keSA9IGZp
bGVOYW1lLmVuZHNXaXRoKGJvZHlQb3N0Zml4KTsKLSAgICAgICAgICAgIFN0cmluZyBoYXNoU3Ry
aW5nID0gaXNCb2R5ID8gZmlsZU5hbWUuc3Vic3RyaW5nKDAsIEtleTo6aGFzaFN0cmluZ0xlbmd0
aCgpKSA6IGZpbGVOYW1lOwogICAgICAgICAgICAgS2V5OjpIYXNoVHlwZSBoYXNoOwogICAgICAg
ICAgICAgaWYgKCFLZXk6OnN0cmluZ1RvSGFzaChoYXNoU3RyaW5nLCBoYXNoKSkgewogICAgICAg
ICAgICAgICAgIFdlYkNvcmU6OmRlbGV0ZUZpbGUoZmlsZVBhdGgpOwpAQCAtMjQ0LDMxICsyODQs
MzQgQEAgdm9pZCBTdG9yYWdlOjpzeW5jaHJvbml6ZSgpCiAgICAgICAgICAgICAgICAgV2ViQ29y
ZTo6ZGVsZXRlRmlsZShmaWxlUGF0aCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgaWYgKGlzQm9keSkgewotICAgICAgICAgICAgICAgIGJvZHlG
aWx0ZXItPmFkZChoYXNoKTsKKworICAgICAgICAgICAgaWYgKHR5cGUuZW5kc1dpdGgoYmxvYlN1
ZmZpeCkpIHsKKyAgICAgICAgICAgICAgICBib2R5QmxvYkZpbHRlci0+YWRkKGhhc2gpOwogICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJlY29yZEZp
bHRlci0+YWRkKGhhc2gpOworCisgICAgICAgICAgICBhdXRvIHJlY29yZEZpbHRlcktleSA9IG1h
a2VSZWNvcmRGaWx0ZXJLZXkoaGFzaFN0cmluZywgdHlwZSk7CisgICAgICAgICAgICByZWNvcmRG
aWx0ZXItPmFkZChyZWNvcmRGaWx0ZXJLZXkpOwogICAgICAgICAgICAgcmVjb3Jkc1NpemUgKz0g
ZmlsZVNpemU7CiAgICAgICAgICAgICArK2NvdW50OwogICAgICAgICB9KTsKIAogICAgICAgICBh
dXRvKiByZWNvcmRGaWx0ZXJQdHIgPSByZWNvcmRGaWx0ZXIucmVsZWFzZSgpOwotICAgICAgICBh
dXRvKiBib2R5RmlsdGVyUHRyID0gYm9keUZpbHRlci5yZWxlYXNlKCk7Ci0gICAgICAgIFJ1bkxv
b3A6Om1haW4oKS5kaXNwYXRjaChbdGhpcywgcmVjb3JkRmlsdGVyUHRyLCBib2R5RmlsdGVyUHRy
LCByZWNvcmRzU2l6ZV0geworICAgICAgICBhdXRvKiBib2R5QmxvYkZpbHRlclB0ciA9IGJvZHlC
bG9iRmlsdGVyLnJlbGVhc2UoKTsKKyAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt0
aGlzLCByZWNvcmRGaWx0ZXJQdHIsIGJvZHlCbG9iRmlsdGVyUHRyLCByZWNvcmRzU2l6ZV0gewog
ICAgICAgICAgICAgYXV0byByZWNvcmRGaWx0ZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8Q29udGVudHNG
aWx0ZXI+KHJlY29yZEZpbHRlclB0cik7Ci0gICAgICAgICAgICBhdXRvIGJvZHlGaWx0ZXIgPSBz
dGQ6OnVuaXF1ZV9wdHI8Q29udGVudHNGaWx0ZXI+KGJvZHlGaWx0ZXJQdHIpOworICAgICAgICAg
ICAgYXV0byBib2R5QmxvYkZpbHRlciA9IHN0ZDo6dW5pcXVlX3B0cjxDb250ZW50c0ZpbHRlcj4o
Ym9keUJsb2JGaWx0ZXJQdHIpOwogCi0gICAgICAgICAgICBmb3IgKGF1dG8mIGhhc2ggOiBtX3Jl
Y29yZEZpbHRlckhhc2hlc0FkZGVkRHVyaW5nU3luY2hyb25pemF0aW9uKQotICAgICAgICAgICAg
ICAgIHJlY29yZEZpbHRlci0+YWRkKGhhc2gpOworICAgICAgICAgICAgZm9yIChhdXRvJiByZWNv
cmRGaWx0ZXJLZXkgOiBtX3JlY29yZEZpbHRlckhhc2hlc0FkZGVkRHVyaW5nU3luY2hyb25pemF0
aW9uKQorICAgICAgICAgICAgICAgIHJlY29yZEZpbHRlci0+YWRkKHJlY29yZEZpbHRlcktleSk7
CiAgICAgICAgICAgICBtX3JlY29yZEZpbHRlckhhc2hlc0FkZGVkRHVyaW5nU3luY2hyb25pemF0
aW9uLmNsZWFyKCk7CiAKLSAgICAgICAgICAgIGZvciAoYXV0byYgaGFzaCA6IG1fYm9keUZpbHRl
ckhhc2hlc0FkZGVkRHVyaW5nU3luY2hyb25pemF0aW9uKQotICAgICAgICAgICAgICAgIGJvZHlG
aWx0ZXItPmFkZChoYXNoKTsKLSAgICAgICAgICAgIG1fYm9keUZpbHRlckhhc2hlc0FkZGVkRHVy
aW5nU3luY2hyb25pemF0aW9uLmNsZWFyKCk7CisgICAgICAgICAgICBmb3IgKGF1dG8mIGhhc2gg
OiBtX2JvZHlCbG9iRmlsdGVySGFzaGVzQWRkZWREdXJpbmdTeW5jaHJvbml6YXRpb24pCisgICAg
ICAgICAgICAgICAgYm9keUJsb2JGaWx0ZXItPmFkZChoYXNoKTsKKyAgICAgICAgICAgIG1fYm9k
eUJsb2JGaWx0ZXJIYXNoZXNBZGRlZER1cmluZ1N5bmNocm9uaXphdGlvbi5jbGVhcigpOwogCiAg
ICAgICAgICAgICBtX3JlY29yZEZpbHRlciA9IFdURjo6bW92ZShyZWNvcmRGaWx0ZXIpOwotICAg
ICAgICAgICAgbV9ib2R5RmlsdGVyID0gV1RGOjptb3ZlKGJvZHlGaWx0ZXIpOworICAgICAgICAg
ICAgbV9ib2R5QmxvYkZpbHRlciA9IFdURjo6bW92ZShib2R5QmxvYkZpbHRlcik7CiAgICAgICAg
ICAgICBtX2FwcHJveGltYXRlUmVjb3Jkc1NpemUgPSByZWNvcmRzU2l6ZTsKICAgICAgICAgICAg
IG1fc3luY2hyb25pemF0aW9uSW5Qcm9ncmVzcyA9IGZhbHNlOwogICAgICAgICB9KTsKQEAgLTI3
Nyw1MiArMzIwLDY2IEBAIHZvaWQgU3RvcmFnZTo6c3luY2hyb25pemUoKQogCiAgICAgICAgIGRl
bGV0ZUVtcHR5UmVjb3Jkc0RpcmVjdG9yaWVzKHJlY29yZHNQYXRoKCkpOwogCi0gICAgICAgIExP
RyhOZXR3b3JrQ2FjaGVTdG9yYWdlLCAiKE5ldHdvcmtQcm9jZXNzKSBjYWNoZSBzeW5jaHJvbml6
YXRpb24gY29tcGxldGVkIHNpemU9JXp1IGNvdW50PSVkIiwgcmVjb3Jkc1NpemUsIGNvdW50KTsK
KyAgICAgICAgTE9HKE5ldHdvcmtDYWNoZVN0b3JhZ2UsICIoTmV0d29ya1Byb2Nlc3MpIGNhY2hl
IHN5bmNocm9uaXphdGlvbiBjb21wbGV0ZWQgc2l6ZT0lenUgY291bnQ9JXUiLCByZWNvcmRzU2l6
ZSwgY291bnQpOwogICAgIH0pOwogfQogCi12b2lkIFN0b3JhZ2U6OmFkZFRvUmVjb3JkRmlsdGVy
KGNvbnN0IEtleSYga2V5KQordm9pZCBTdG9yYWdlOjphZGRUb1JlY29yZEZpbHRlcihjb25zdCBL
ZXkmIGtleSwgY29uc3QgU3RyaW5nJiB0eXBlKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01h
aW4oKSk7CisgICAgQVNTRVJUKCF0eXBlLmVuZHNXaXRoKGJsb2JTdWZmaXgpKTsKIAorICAgIGF1
dG8gcmVjb3JkRmlsdGVyS2V5ID0gbWFrZVJlY29yZEZpbHRlcktleShrZXkuaGFzaEFzU3RyaW5n
KCksIHR5cGUpOwogICAgIGlmIChtX3JlY29yZEZpbHRlcikKLSAgICAgICAgbV9yZWNvcmRGaWx0
ZXItPmFkZChrZXkuaGFzaCgpKTsKKyAgICAgICAgbV9yZWNvcmRGaWx0ZXItPmFkZChyZWNvcmRG
aWx0ZXJLZXkpOwogCiAgICAgLy8gSWYgd2UgZ2V0IG5ldyBlbnRyaWVzIGR1cmluZyBmaWx0ZXIg
c3luY2hyb25pemF0aW9uIHRha2UgY2FyZSB0byBhZGQgdGhlbSB0byB0aGUgbmV3IGZpbHRlciBh
cyB3ZWxsLgogICAgIGlmIChtX3N5bmNocm9uaXphdGlvbkluUHJvZ3Jlc3MpCi0gICAgICAgIG1f
cmVjb3JkRmlsdGVySGFzaGVzQWRkZWREdXJpbmdTeW5jaHJvbml6YXRpb24uYXBwZW5kKGtleS5o
YXNoKCkpOworICAgICAgICBtX3JlY29yZEZpbHRlckhhc2hlc0FkZGVkRHVyaW5nU3luY2hyb25p
emF0aW9uLmFwcGVuZChyZWNvcmRGaWx0ZXJLZXkpOwogfQogCi1ib29sIFN0b3JhZ2U6Om1heUNv
bnRhaW4oY29uc3QgS2V5JiBrZXkpIGNvbnN0Citib29sIFN0b3JhZ2U6Om1heUNvbnRhaW4oY29u
c3QgS2V5JiBrZXksIGNvbnN0IFN0cmluZyYgdHlwZSkgY29uc3QKIHsKICAgICBBU1NFUlQoUnVu
TG9vcDo6aXNNYWluKCkpOwotICAgIHJldHVybiAhbV9yZWNvcmRGaWx0ZXIgfHwgbV9yZWNvcmRG
aWx0ZXItPm1heUNvbnRhaW4oa2V5Lmhhc2goKSk7CisgICAgQVNTRVJUKCF0eXBlLmVuZHNXaXRo
KGJsb2JTdWZmaXgpKTsKKyAgICBpZiAoIW1fcmVjb3JkRmlsdGVyKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKworICAgIGF1dG8gZmlsdGVyS2V5ID0gbWFrZVJlY29yZEZpbHRlcktleShrZXkuaGFz
aEFzU3RyaW5nKCksIHR5cGUpOworICAgIHJldHVybiBtX3JlY29yZEZpbHRlci0+bWF5Q29udGFp
bihmaWx0ZXJLZXkpOwogfQogCi1TdHJpbmcgU3RvcmFnZTo6cGFydGl0aW9uUGF0aEZvcktleShj
b25zdCBLZXkmIGtleSkgY29uc3QKK2Jvb2wgU3RvcmFnZTo6bWF5Q29udGFpbkJsb2IoY29uc3Qg
S2V5JiBrZXksIGNvbnN0IFN0cmluZyYgdHlwZSkgY29uc3QKIHsKLSAgICBBU1NFUlQoIWtleS5w
YXJ0aXRpb24oKS5pc0VtcHR5KCkpOwotICAgIHJldHVybiBXZWJDb3JlOjpwYXRoQnlBcHBlbmRp
bmdDb21wb25lbnQocmVjb3Jkc1BhdGgoKSwga2V5LnBhcnRpdGlvbigpKTsKKyAgICBBU1NFUlQo
UnVuTG9vcDo6aXNNYWluKCkpOworICAgIEFTU0VSVCghdHlwZS5lbmRzV2l0aChibG9iU3VmZml4
KSk7CisKKyAgICBpZiAoIXR5cGVVc2VzQmxvYlN0b3JhZ2UodHlwZSkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIHJldHVybiAhbV9ib2R5QmxvYkZpbHRlciB8fCBtX2JvZHlCbG9iRmls
dGVyLT5tYXlDb250YWluKGtleS5oYXNoKCkpOwogfQogCi1zdGF0aWMgU3RyaW5nIGZpbGVOYW1l
Rm9yS2V5KGNvbnN0IEtleSYga2V5KQorU3RyaW5nIFN0b3JhZ2U6OnBhcnRpdGlvblBhdGhGb3JL
ZXkoY29uc3QgS2V5JiBrZXkpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGtleS5oYXNoQXNTdHJpbmco
KTsKKyAgICBBU1NFUlQoIWtleS5wYXJ0aXRpb24oKS5pc0VtcHR5KCkpOworICAgIHJldHVybiBX
ZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQocmVjb3Jkc1BhdGgoKSwga2V5LnBhcnRp
dGlvbigpKTsKIH0KIAotU3RyaW5nIFN0b3JhZ2U6OnJlY29yZFBhdGhGb3JLZXkoY29uc3QgS2V5
JiBrZXkpIGNvbnN0CitTdHJpbmcgU3RvcmFnZTo6cmVjb3JkUGF0aEZvcktleShjb25zdCBLZXkm
IGtleSwgY29uc3QgU3RyaW5nJiB0eXBlKSBjb25zdAogewotICAgIHJldHVybiBXZWJDb3JlOjpw
YXRoQnlBcHBlbmRpbmdDb21wb25lbnQocGFydGl0aW9uUGF0aEZvcktleShrZXkpLCBmaWxlTmFt
ZUZvcktleShrZXkpKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9u
ZW50KHBhcnRpdGlvblBhdGhGb3JLZXkoa2V5KSwga2V5Lmhhc2hBc1N0cmluZygpICsgJy0nICsg
dHlwZSk7CiB9CiAKLXN0YXRpYyBTdHJpbmcgYm9keVBhdGhGb3JSZWNvcmRQYXRoKGNvbnN0IFN0
cmluZyYgcmVjb3JkUGF0aCkKK3N0YXRpYyBTdHJpbmcgYm9keUJsb2JQYXRoRm9yUmVjb3JkUGF0
aChjb25zdCBTdHJpbmcmIHJlY29yZFBhdGgpCiB7Ci0gICAgcmV0dXJuIHJlY29yZFBhdGggKyBi
b2R5UG9zdGZpeDsKKyAgICByZXR1cm4gcmVjb3JkUGF0aCArIGJsb2JTdWZmaXg7CiB9CiAKLVN0
cmluZyBTdG9yYWdlOjpib2R5UGF0aEZvcktleShjb25zdCBLZXkmIGtleSkgY29uc3QKK1N0cmlu
ZyBTdG9yYWdlOjpib2R5QmxvYlBhdGhGb3JLZXkoY29uc3QgS2V5JiBrZXksIGNvbnN0IFN0cmlu
ZyYgdHlwZSkgY29uc3QKIHsKLSAgICByZXR1cm4gYm9keVBhdGhGb3JSZWNvcmRQYXRoKHJlY29y
ZFBhdGhGb3JLZXkoa2V5KSk7CisgICAgQVNTRVJUKHR5cGVVc2VzQmxvYlN0b3JhZ2UodHlwZSkp
OworICAgIHJldHVybiBib2R5QmxvYlBhdGhGb3JSZWNvcmRQYXRoKHJlY29yZFBhdGhGb3JLZXko
a2V5LCB0eXBlKSk7CiB9CiAKIHN0cnVjdCBSZWNvcmRNZXRhRGF0YSB7CkBAIC00MDAsNiArNDU3
LDI0IEBAIHZvaWQgU3RvcmFnZTo6cmVhZFJlY29yZChSZWFkT3BlcmF0aW9uJiByZWFkT3BlcmF0
aW9uLCBjb25zdCBEYXRhJiByZWNvcmREYXRhKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNN
YWluKCkpOwogCisgICAgaWYgKHR5cGVVc2VzSGVhZGVyKHJlYWRPcGVyYXRpb24udHlwZSkpIHsK
KyAgICAgICAgcmVhZFJlY29yZFdpdGhIZWFkZXIocmVhZE9wZXJhdGlvbiwgcmVjb3JkRGF0YSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvIHJlY29yZFBhdGggPSByZWNvcmRQ
YXRoRm9yS2V5KHJlYWRPcGVyYXRpb24ua2V5LCByZWFkT3BlcmF0aW9uLnR5cGUpOworICAgIHJl
YWRPcGVyYXRpb24ucmVzdWx0UmVjb3JkID0gc3RkOjptYWtlX3VuaXF1ZTxTdG9yYWdlOjpSZWNv
cmQ+KFN0b3JhZ2U6OlJlY29yZCB7CisgICAgICAgIHJlYWRPcGVyYXRpb24ua2V5LAorICAgICAg
ICBmaWxlVGltZXMocmVjb3JkUGF0aCkubW9kaWZpY2F0aW9uLAorICAgICAgICB7IH0sIC8vIE5v
IGhlYWRlci4KKyAgICAgICAgcmVjb3JkRGF0YQorICAgIH0pOworfQorCit2b2lkIFN0b3JhZ2U6
OnJlYWRSZWNvcmRXaXRoSGVhZGVyKFJlYWRPcGVyYXRpb24mIHJlYWRPcGVyYXRpb24sIGNvbnN0
IERhdGEmIHJlY29yZERhdGEpCit7CisgICAgQVNTRVJUKHR5cGVVc2VzSGVhZGVyKHJlYWRPcGVy
YXRpb24udHlwZSkpOworCiAgICAgUmVjb3JkTWV0YURhdGEgbWV0YURhdGE7CiAgICAgRGF0YSBo
ZWFkZXJEYXRhOwogICAgIGlmICghZGVjb2RlUmVjb3JkSGVhZGVyKHJlY29yZERhdGEsIG1ldGFE
YXRhLCBoZWFkZXJEYXRhKSkKQEAgLTQ1MiwyMCArNTI3LDIyIEBAIHN0YXRpYyBEYXRhIGVuY29k
ZVJlY29yZE1ldGFEYXRhKGNvbnN0IFJlY29yZE1ldGFEYXRhJiBtZXRhRGF0YSkKIAogT3B0aW9u
YWw8QmxvYlN0b3JhZ2U6OkJsb2I+IFN0b3JhZ2U6OnN0b3JlQm9keUFzQmxvYihXcml0ZU9wZXJh
dGlvbiYgd3JpdGVPcGVyYXRpb24pCiB7Ci0gICAgYXV0byBib2R5UGF0aCA9IGJvZHlQYXRoRm9y
S2V5KHdyaXRlT3BlcmF0aW9uLnJlY29yZC5rZXkpOworICAgIEFTU0VSVCh0eXBlVXNlc0Jsb2JT
dG9yYWdlKHdyaXRlT3BlcmF0aW9uLnR5cGUpKTsKKworICAgIGF1dG8gYm9keUJsb2JQYXRoID0g
Ym9keUJsb2JQYXRoRm9yS2V5KHdyaXRlT3BlcmF0aW9uLnJlY29yZC5rZXksIHdyaXRlT3BlcmF0
aW9uLnR5cGUpOwogCiAgICAgLy8gU3RvcmUgdGhlIGJvZHkuCi0gICAgYXV0byBibG9iID0gbV9i
bG9iU3RvcmFnZS5hZGQoYm9keVBhdGgsIHdyaXRlT3BlcmF0aW9uLnJlY29yZC5ib2R5KTsKKyAg
ICBhdXRvIGJsb2IgPSBtX2Jsb2JTdG9yYWdlLmFkZChib2R5QmxvYlBhdGgsIHdyaXRlT3BlcmF0
aW9uLnJlY29yZC5ib2R5KTsKICAgICBpZiAoYmxvYi5kYXRhLmlzTnVsbCgpKQogICAgICAgICBy
ZXR1cm4geyB9OwogCiAgICAgKyt3cml0ZU9wZXJhdGlvbi5hY3RpdmVDb3VudDsKIAogICAgIFJ1
bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbdGhpcywgYmxvYiwgJndyaXRlT3BlcmF0aW9uXSB7Ci0g
ICAgICAgIGlmIChtX2JvZHlGaWx0ZXIpCi0gICAgICAgICAgICBtX2JvZHlGaWx0ZXItPmFkZCh3
cml0ZU9wZXJhdGlvbi5yZWNvcmQua2V5Lmhhc2goKSk7CisgICAgICAgIGlmIChtX2JvZHlCbG9i
RmlsdGVyKQorICAgICAgICAgICAgbV9ib2R5QmxvYkZpbHRlci0+YWRkKHdyaXRlT3BlcmF0aW9u
LnJlY29yZC5rZXkuaGFzaCgpKTsKICAgICAgICAgaWYgKG1fc3luY2hyb25pemF0aW9uSW5Qcm9n
cmVzcykKLSAgICAgICAgICAgIG1fYm9keUZpbHRlckhhc2hlc0FkZGVkRHVyaW5nU3luY2hyb25p
emF0aW9uLmFwcGVuZCh3cml0ZU9wZXJhdGlvbi5yZWNvcmQua2V5Lmhhc2goKSk7CisgICAgICAg
ICAgICBtX2JvZHlCbG9iRmlsdGVySGFzaGVzQWRkZWREdXJpbmdTeW5jaHJvbml6YXRpb24uYXBw
ZW5kKHdyaXRlT3BlcmF0aW9uLnJlY29yZC5rZXkuaGFzaCgpKTsKIAogICAgICAgICBpZiAod3Jp
dGVPcGVyYXRpb24ubWFwcGVkQm9keUhhbmRsZXIpCiAgICAgICAgICAgICB3cml0ZU9wZXJhdGlv
bi5tYXBwZWRCb2R5SGFuZGxlcihibG9iLmRhdGEpOwpAQCAtNDc3LDYgKzU1NCwxMSBAQCBPcHRp
b25hbDxCbG9iU3RvcmFnZTo6QmxvYj4gU3RvcmFnZTo6c3RvcmVCb2R5QXNCbG9iKFdyaXRlT3Bl
cmF0aW9uJiB3cml0ZU9wZXJhdAogCiBEYXRhIFN0b3JhZ2U6OmVuY29kZVJlY29yZChjb25zdCBS
ZWNvcmQmIHJlY29yZCwgT3B0aW9uYWw8QmxvYlN0b3JhZ2U6OkJsb2I+IGJsb2IpCiB7CisgICAg
cmV0dXJuIHJlY29yZC5oZWFkZXIuaXNOdWxsKCkgPyByZWNvcmQuYm9keSA6IGVuY29kZVJlY29y
ZFdpdGhIZWFkZXIocmVjb3JkLCBibG9iKTsKK30KKworRGF0YSBTdG9yYWdlOjplbmNvZGVSZWNv
cmRXaXRoSGVhZGVyKGNvbnN0IFJlY29yZCYgcmVjb3JkLCBPcHRpb25hbDxCbG9iU3RvcmFnZTo6
QmxvYj4gYmxvYikKK3sKICAgICBBU1NFUlQoIWJsb2IgfHwgYnl0ZXNFcXVhbChibG9iLnZhbHVl
KCkuZGF0YSwgcmVjb3JkLmJvZHkpKTsKIAogICAgIFJlY29yZE1ldGFEYXRhIG1ldGFEYXRhKHJl
Y29yZC5rZXkpOwpAQCAtNDk2LDExICs1NzgsMTEgQEAgRGF0YSBTdG9yYWdlOjplbmNvZGVSZWNv
cmQoY29uc3QgUmVjb3JkJiByZWNvcmQsIE9wdGlvbmFsPEJsb2JTdG9yYWdlOjpCbG9iPiBibG8K
ICAgICByZXR1cm4geyBoZWFkZXJEYXRhIH07CiB9CiAKLWJvb2wgU3RvcmFnZTo6cmVtb3ZlRnJv
bVBlbmRpbmdXcml0ZU9wZXJhdGlvbnMoY29uc3QgS2V5JiBrZXkpCitib29sIFN0b3JhZ2U6OnJl
bW92ZUZyb21QZW5kaW5nV3JpdGVPcGVyYXRpb25zKGNvbnN0IEtleSYga2V5LCBjb25zdCBTdHJp
bmcmIHR5cGUpCiB7CiAgICAgYXV0byBlbmQgPSBtX3BlbmRpbmdXcml0ZU9wZXJhdGlvbnMuZW5k
KCk7CiAgICAgZm9yIChhdXRvIGl0ID0gbV9wZW5kaW5nV3JpdGVPcGVyYXRpb25zLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoKCppdCktPnJlY29yZC5rZXkgPT0ga2V5
KSB7CisgICAgICAgIGlmICgoKml0KS0+cmVjb3JkLmtleSA9PSBrZXkgJiYgKCppdCktPnR5cGUg
PT0gdHlwZSkgewogICAgICAgICAgICAgbV9wZW5kaW5nV3JpdGVPcGVyYXRpb25zLnJlbW92ZShp
dCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtNTA4LDIyICs1OTAs
MjcgQEAgYm9vbCBTdG9yYWdlOjpyZW1vdmVGcm9tUGVuZGluZ1dyaXRlT3BlcmF0aW9ucyhjb25z
dCBLZXkmIGtleSkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgU3RvcmFnZTo6cmVtb3Zl
KGNvbnN0IEtleSYga2V5KQordm9pZCBTdG9yYWdlOjpyZW1vdmUoY29uc3QgS2V5JiBrZXksIGNv
bnN0IFN0cmluZyYgdHlwZSkKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworICAg
IEFTU0VSVCgha2V5LmlzTnVsbCgpKTsKKyAgICBBU1NFUlQoIXR5cGUuaXNOdWxsKCkpOwogCi0g
ICAgaWYgKCFtYXlDb250YWluKGtleSkpCisgICAgaWYgKCFtYXlDb250YWluKGtleSwgdHlwZSkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFdlIGNhbid0IHJlbW92ZSB0aGUga2V5IGZyb20g
dGhlIEJsb29tIGZpbHRlciAoYnV0IHNvbWUgZmFsc2UgcG9zaXRpdmVzIGFyZSBleHBlY3RlZCBh
bnl3YXkpLgogICAgIC8vIEZvciBzaW1wbGljaXR5IHdlIGFsc28gZG9uJ3QgcmVkdWNlIG1fYXBw
cm94aW1hdGVTaXplIG9uIHJlbW92YWxzLgogICAgIC8vIFRoZSBuZXh0IHN5bmNocm9uaXphdGlv
biB3aWxsIHVwZGF0ZSBldmVyeXRoaW5nLgogCi0gICAgcmVtb3ZlRnJvbVBlbmRpbmdXcml0ZU9w
ZXJhdGlvbnMoa2V5KTsKKyAgICByZW1vdmVGcm9tUGVuZGluZ1dyaXRlT3BlcmF0aW9ucyhrZXks
IHR5cGUpOwogCi0gICAgc2VyaWFsQmFja2dyb3VuZElPUXVldWUoKS5kaXNwYXRjaChbdGhpcywg
a2V5XSB7Ci0gICAgICAgIFdlYkNvcmU6OmRlbGV0ZUZpbGUocmVjb3JkUGF0aEZvcktleShrZXkp
KTsKLSAgICAgICAgbV9ibG9iU3RvcmFnZS5yZW1vdmUoYm9keVBhdGhGb3JLZXkoa2V5KSk7Cisg
ICAgU3RyaW5nQ2FwdHVyZSB0eXBlQ2FwdHVyZSh0eXBlKTsKKyAgICBzZXJpYWxCYWNrZ3JvdW5k
SU9RdWV1ZSgpLmRpc3BhdGNoKFt0aGlzLCBrZXksIHR5cGVDYXB0dXJlXSB7CisgICAgICAgIFdl
YkNvcmU6OmRlbGV0ZUZpbGUocmVjb3JkUGF0aEZvcktleShrZXksIHR5cGVDYXB0dXJlLnN0cmlu
ZygpKSk7CisgICAgICAgIC8vIEFzc29jaWF0ZWQgYmxvYiBsaW5rcyBuZWVkIHRvIGJlIHJlbW92
ZWQgYXMgd2VsbC4KKyAgICAgICAgaWYgKHR5cGVVc2VzQmxvYlN0b3JhZ2UodHlwZUNhcHR1cmUu
c3RyaW5nKCkpKQorICAgICAgICAgICAgbV9ibG9iU3RvcmFnZS5yZW1vdmUoYm9keUJsb2JQYXRo
Rm9yS2V5KGtleSwgdHlwZUNhcHR1cmUuc3RyaW5nKCkpKTsKICAgICB9KTsKIH0KIApAQCAtNTQ2
LDEwICs2MzMsMTAgQEAgdm9pZCBTdG9yYWdlOjpkaXNwYXRjaFJlYWRPcGVyYXRpb24oc3RkOjp1
bmlxdWVfcHRyPFJlYWRPcGVyYXRpb24+IHJlYWRPcGVyYXRpb24KICAgICBjb25zdCBhdXRvIHJl
YWRUaW1lb3V0ID0gMTUwMF9tczsKICAgICBtX3JlYWRPcGVyYXRpb25UaW1lb3V0VGltZXIuc3Rh
cnRPbmVTaG90KHJlYWRUaW1lb3V0KTsKIAotICAgIGJvb2wgc2hvdWxkR2V0Qm9keUJsb2IgPSAh
bV9ib2R5RmlsdGVyIHx8IG1fYm9keUZpbHRlci0+bWF5Q29udGFpbihyZWFkT3BlcmF0aW9uLmtl
eS5oYXNoKCkpOworICAgIGJvb2wgc2hvdWxkR2V0Qm9keUJsb2IgPSBtYXlDb250YWluQmxvYihy
ZWFkT3BlcmF0aW9uLmtleSwgcmVhZE9wZXJhdGlvbi50eXBlKTsKIAogICAgIGlvUXVldWUoKS5k
aXNwYXRjaChbdGhpcywgJnJlYWRPcGVyYXRpb24sIHNob3VsZEdldEJvZHlCbG9iXSB7Ci0gICAg
ICAgIGF1dG8gcmVjb3JkUGF0aCA9IHJlY29yZFBhdGhGb3JLZXkocmVhZE9wZXJhdGlvbi5rZXkp
OworICAgICAgICBhdXRvIHJlY29yZFBhdGggPSByZWNvcmRQYXRoRm9yS2V5KHJlYWRPcGVyYXRp
b24ua2V5LCByZWFkT3BlcmF0aW9uLnR5cGUpOwogCiAgICAgICAgICsrcmVhZE9wZXJhdGlvbi5h
Y3RpdmVDb3VudDsKICAgICAgICAgaWYgKHNob3VsZEdldEJvZHlCbG9iKQpAQCAtNTY0LDggKzY1
MSw4IEBAIHZvaWQgU3RvcmFnZTo6ZGlzcGF0Y2hSZWFkT3BlcmF0aW9uKHN0ZDo6dW5pcXVlX3B0
cjxSZWFkT3BlcmF0aW9uPiByZWFkT3BlcmF0aW9uCiAKICAgICAgICAgaWYgKHNob3VsZEdldEJv
ZHlCbG9iKSB7CiAgICAgICAgICAgICAvLyBSZWFkIHRoZSBib2R5IGJsb2IgaW4gcGFyYWxsZWwg
d2l0aCB0aGUgcmVjb3JkIHJlYWQuCi0gICAgICAgICAgICBhdXRvIGJvZHlQYXRoID0gYm9keVBh
dGhGb3JLZXkocmVhZE9wZXJhdGlvbi5rZXkpOwotICAgICAgICAgICAgcmVhZE9wZXJhdGlvbi5y
ZXN1bHRCb2R5QmxvYiA9IG1fYmxvYlN0b3JhZ2UuZ2V0KGJvZHlQYXRoKTsKKyAgICAgICAgICAg
IGF1dG8gYm9keUJsb2JQYXRoID0gYm9keUJsb2JQYXRoRm9yS2V5KHJlYWRPcGVyYXRpb24ua2V5
LCByZWFkT3BlcmF0aW9uLnR5cGUpOworICAgICAgICAgICAgcmVhZE9wZXJhdGlvbi5yZXN1bHRC
b2R5QmxvYiA9IG1fYmxvYlN0b3JhZ2UuZ2V0KGJvZHlCbG9iUGF0aCk7CiAgICAgICAgICAgICBm
aW5pc2hSZWFkT3BlcmF0aW9uKHJlYWRPcGVyYXRpb24pOwogICAgICAgICB9CiAgICAgfSk7CkBA
IC01ODEsOSArNjY4LDkgQEAgdm9pZCBTdG9yYWdlOjpmaW5pc2hSZWFkT3BlcmF0aW9uKFJlYWRP
cGVyYXRpb24mIHJlYWRPcGVyYXRpb24pCiAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt0
aGlzLCAmcmVhZE9wZXJhdGlvbl0gewogICAgICAgICBib29sIHN1Y2Nlc3MgPSByZWFkT3BlcmF0
aW9uLmZpbmlzaCgpOwogICAgICAgICBpZiAoc3VjY2VzcykKLSAgICAgICAgICAgIHVwZGF0ZUZp
bGVNb2RpZmljYXRpb25UaW1lKHJlY29yZFBhdGhGb3JLZXkocmVhZE9wZXJhdGlvbi5rZXkpKTsK
KyAgICAgICAgICAgIHVwZGF0ZUZpbGVNb2RpZmljYXRpb25UaW1lKHJlY29yZFBhdGhGb3JLZXko
cmVhZE9wZXJhdGlvbi5rZXksIHJlYWRPcGVyYXRpb24udHlwZSkpOwogICAgICAgICBlbHNlIGlm
ICghcmVhZE9wZXJhdGlvbi5pc0NhbmNlbGVkKQotICAgICAgICAgICAgcmVtb3ZlKHJlYWRPcGVy
YXRpb24ua2V5KTsKKyAgICAgICAgICAgIHJlbW92ZShyZWFkT3BlcmF0aW9uLmtleSwgcmVhZE9w
ZXJhdGlvbi50eXBlKTsKIAogICAgICAgICBBU1NFUlQobV9hY3RpdmVSZWFkT3BlcmF0aW9ucy5j
b250YWlucygmcmVhZE9wZXJhdGlvbikpOwogICAgICAgICBtX2FjdGl2ZVJlYWRPcGVyYXRpb25z
LnJlbW92ZSgmcmVhZE9wZXJhdGlvbik7CkBAIC02MzQsMTAgKzcyMSwxMCBAQCB2b2lkIFN0b3Jh
Z2U6OmRpc3BhdGNoUGVuZGluZ1JlYWRPcGVyYXRpb25zKCkKICAgICB9CiB9CiAKLXRlbXBsYXRl
IDxjbGFzcyBUPiBib29sIHJldHJpZXZlRnJvbU1lbW9yeShjb25zdCBUJiBvcGVyYXRpb25zLCBj
b25zdCBLZXkmIGtleSwgU3RvcmFnZTo6UmV0cmlldmVDb21wbGV0aW9uSGFuZGxlciYgY29tcGxl
dGlvbkhhbmRsZXIpCit0ZW1wbGF0ZSA8Y2xhc3MgVD4gYm9vbCByZXRyaWV2ZUZyb21NZW1vcnko
Y29uc3QgVCYgb3BlcmF0aW9ucywgY29uc3QgS2V5JiBrZXksIGNvbnN0IFN0cmluZyYgdHlwZSwg
U3RvcmFnZTo6UmV0cmlldmVDb21wbGV0aW9uSGFuZGxlciYgY29tcGxldGlvbkhhbmRsZXIpCiB7
CiAgICAgZm9yIChhdXRvJiBvcGVyYXRpb24gOiBvcGVyYXRpb25zKSB7Ci0gICAgICAgIGlmIChv
cGVyYXRpb24tPnJlY29yZC5rZXkgPT0ga2V5KSB7CisgICAgICAgIGlmIChvcGVyYXRpb24tPnJl
Y29yZC5rZXkgPT0ga2V5ICYmIG9wZXJhdGlvbi0+dHlwZSA9PSB0eXBlKSB7CiAgICAgICAgICAg
ICBMT0coTmV0d29ya0NhY2hlU3RvcmFnZSwgIihOZXR3b3JrUHJvY2VzcykgZm91bmQgd3JpdGUg
b3BlcmF0aW9uIGluIHByb2dyZXNzIik7CiAgICAgICAgICAgICBhdXRvIHJlY29yZCA9IG9wZXJh
dGlvbi0+cmVjb3JkOwogICAgICAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtyZWNv
cmQsIGNvbXBsZXRpb25IYW5kbGVyXSB7CkBAIC02NjQsMTAgKzc1MSwxMCBAQCB2b2lkIFN0b3Jh
Z2U6OmRpc3BhdGNoUGVuZGluZ1dyaXRlT3BlcmF0aW9ucygpCiAgICAgfQogfQogCi1zdGF0aWMg
Ym9vbCBzaG91bGRTdG9yZUJvZHlBc0Jsb2IoY29uc3QgRGF0YSYgYm9keURhdGEpCitzdGF0aWMg
Ym9vbCBzaG91bGRTdG9yZUJvZHlBc0Jsb2IoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBEYXRh
JiBib2R5KQogewogICAgIGNvbnN0IHNpemVfdCBtYXhpbXVtSW5saW5lQm9keVNpemUgeyAxNiAq
IDEwMjQgfTsKLSAgICByZXR1cm4gYm9keURhdGEuc2l6ZSgpID4gbWF4aW11bUlubGluZUJvZHlT
aXplOworICAgIHJldHVybiB0eXBlVXNlc0Jsb2JTdG9yYWdlKHR5cGUpICYmIGJvZHkuc2l6ZSgp
ID4gbWF4aW11bUlubGluZUJvZHlTaXplOwogfQogCiB2b2lkIFN0b3JhZ2U6OmRpc3BhdGNoV3Jp
dGVPcGVyYXRpb24oc3RkOjp1bmlxdWVfcHRyPFdyaXRlT3BlcmF0aW9uPiB3cml0ZU9wZXJhdGlv
blB0cikKQEAgLTY3OCwxNyArNzY1LDE3IEBAIHZvaWQgU3RvcmFnZTo6ZGlzcGF0Y2hXcml0ZU9w
ZXJhdGlvbihzdGQ6OnVuaXF1ZV9wdHI8V3JpdGVPcGVyYXRpb24+IHdyaXRlT3BlcmF0CiAgICAg
bV9hY3RpdmVXcml0ZU9wZXJhdGlvbnMuYWRkKFdURjo6bW92ZSh3cml0ZU9wZXJhdGlvblB0cikp
OwogCiAgICAgLy8gVGhpcyB3YXMgYWRkZWQgYWxyZWFkeSB3aGVuIHN0YXJ0aW5nIHRoZSBzdG9y
ZSBidXQgZmlsdGVyIG1pZ2h0IGhhdmUgYmVlbiB3aXBlZC4KLSAgICBhZGRUb1JlY29yZEZpbHRl
cih3cml0ZU9wZXJhdGlvbi5yZWNvcmQua2V5KTsKKyAgICBhZGRUb1JlY29yZEZpbHRlcih3cml0
ZU9wZXJhdGlvbi5yZWNvcmQua2V5LCB3cml0ZU9wZXJhdGlvbi50eXBlKTsKIAogICAgIGJhY2tn
cm91bmRJT1F1ZXVlKCkuZGlzcGF0Y2goW3RoaXMsICZ3cml0ZU9wZXJhdGlvbl0gewogICAgICAg
ICBhdXRvIHBhcnRpdGlvblBhdGggPSBwYXJ0aXRpb25QYXRoRm9yS2V5KHdyaXRlT3BlcmF0aW9u
LnJlY29yZC5rZXkpOwotICAgICAgICBhdXRvIHJlY29yZFBhdGggPSByZWNvcmRQYXRoRm9yS2V5
KHdyaXRlT3BlcmF0aW9uLnJlY29yZC5rZXkpOworICAgICAgICBhdXRvIHJlY29yZFBhdGggPSBy
ZWNvcmRQYXRoRm9yS2V5KHdyaXRlT3BlcmF0aW9uLnJlY29yZC5rZXksIHdyaXRlT3BlcmF0aW9u
LnR5cGUpOwogCiAgICAgICAgIFdlYkNvcmU6Om1ha2VBbGxEaXJlY3RvcmllcyhwYXJ0aXRpb25Q
YXRoKTsKIAogICAgICAgICArK3dyaXRlT3BlcmF0aW9uLmFjdGl2ZUNvdW50OwogCi0gICAgICAg
IGJvb2wgc2hvdWxkU3RvcmVBc0Jsb2IgPSBzaG91bGRTdG9yZUJvZHlBc0Jsb2Iod3JpdGVPcGVy
YXRpb24ucmVjb3JkLmJvZHkpOworICAgICAgICBib29sIHNob3VsZFN0b3JlQXNCbG9iID0gc2hv
dWxkU3RvcmVCb2R5QXNCbG9iKHdyaXRlT3BlcmF0aW9uLnR5cGUsIHdyaXRlT3BlcmF0aW9uLnJl
Y29yZC5ib2R5KTsKICAgICAgICAgYXV0byBib2R5QmxvYiA9IHNob3VsZFN0b3JlQXNCbG9iID8g
c3RvcmVCb2R5QXNCbG9iKHdyaXRlT3BlcmF0aW9uKSA6IE51bGxvcHQ7CiAKICAgICAgICAgYXV0
byByZWNvcmREYXRhID0gZW5jb2RlUmVjb3JkKHdyaXRlT3BlcmF0aW9uLnJlY29yZCwgYm9keUJs
b2IpOwpAQCAtNzIwLDMzICs4MDcsMzQgQEAgdm9pZCBTdG9yYWdlOjpmaW5pc2hXcml0ZU9wZXJh
dGlvbihXcml0ZU9wZXJhdGlvbiYgd3JpdGVPcGVyYXRpb24pCiAgICAgc2hyaW5rSWZOZWVkZWQo
KTsKIH0KIAotdm9pZCBTdG9yYWdlOjpyZXRyaWV2ZShjb25zdCBLZXkmIGtleSwgdW5zaWduZWQg
cHJpb3JpdHksIFJldHJpZXZlQ29tcGxldGlvbkhhbmRsZXImJiBjb21wbGV0aW9uSGFuZGxlcikK
K3ZvaWQgU3RvcmFnZTo6cmV0cmlldmUoY29uc3QgS2V5JiBrZXksIGNvbnN0IFN0cmluZyYgdHlw
ZSwgdW5zaWduZWQgcHJpb3JpdHksIFJldHJpZXZlQ29tcGxldGlvbkhhbmRsZXImJiBjb21wbGV0
aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIEFTU0VS
VChwcmlvcml0eSA8PSBtYXhpbXVtUmV0cmlldmVQcmlvcml0eSk7CiAgICAgQVNTRVJUKCFrZXku
aXNOdWxsKCkpOworICAgIEFTU0VSVCghdHlwZS5pc051bGwoKSk7CiAKICAgICBpZiAoIW1fY2Fw
YWNpdHkpIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBpZiAoIW1heUNvbnRhaW4oa2V5KSkgeworICAgIGlmICghbWF5
Q29udGFpbihrZXksIHR5cGUpKSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKHJldHJpZXZlRnJvbU1lbW9yeSht
X3BlbmRpbmdXcml0ZU9wZXJhdGlvbnMsIGtleSwgY29tcGxldGlvbkhhbmRsZXIpKQorICAgIGlm
IChyZXRyaWV2ZUZyb21NZW1vcnkobV9wZW5kaW5nV3JpdGVPcGVyYXRpb25zLCBrZXksIHR5cGUs
IGNvbXBsZXRpb25IYW5kbGVyKSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChyZXRyaWV2ZUZy
b21NZW1vcnkobV9hY3RpdmVXcml0ZU9wZXJhdGlvbnMsIGtleSwgY29tcGxldGlvbkhhbmRsZXIp
KQorICAgIGlmIChyZXRyaWV2ZUZyb21NZW1vcnkobV9hY3RpdmVXcml0ZU9wZXJhdGlvbnMsIGtl
eSwgdHlwZSwgY29tcGxldGlvbkhhbmRsZXIpKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRv
IHJlYWRPcGVyYXRpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPFJlYWRPcGVyYXRpb24+KGtleSwgV1RG
Ojptb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgYXV0byByZWFkT3BlcmF0aW9uID0gc3Rk
OjptYWtlX3VuaXF1ZTxSZWFkT3BlcmF0aW9uPihrZXksIHR5cGUsIFdURjo6bW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogICAgIG1fcGVuZGluZ1JlYWRPcGVyYXRpb25zQnlQcmlvcml0eVtwcmlv
cml0eV0ucHJlcGVuZChXVEY6Om1vdmUocmVhZE9wZXJhdGlvbikpOwogICAgIGRpc3BhdGNoUGVu
ZGluZ1JlYWRPcGVyYXRpb25zKCk7CiB9CiAKLXZvaWQgU3RvcmFnZTo6c3RvcmUoY29uc3QgUmVj
b3JkJiByZWNvcmQsIE1hcHBlZEJvZHlIYW5kbGVyJiYgbWFwcGVkQm9keUhhbmRsZXIpCit2b2lk
IFN0b3JhZ2U6OnN0b3JlKGNvbnN0IFJlY29yZCYgcmVjb3JkLCBjb25zdCBTdHJpbmcmIHR5cGUs
IE1hcHBlZEJvZHlIYW5kbGVyJiYgbWFwcGVkQm9keUhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1
bkxvb3A6OmlzTWFpbigpKTsKICAgICBBU1NFUlQoIXJlY29yZC5rZXkuaXNOdWxsKCkpOwpAQCAt
NzU0LDExICs4NDIsMTEgQEAgdm9pZCBTdG9yYWdlOjpzdG9yZShjb25zdCBSZWNvcmQmIHJlY29y
ZCwgTWFwcGVkQm9keUhhbmRsZXImJiBtYXBwZWRCb2R5SGFuZGxlcikKICAgICBpZiAoIW1fY2Fw
YWNpdHkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gd3JpdGVPcGVyYXRpb24gPSBzdGQ6
Om1ha2VfdW5pcXVlPFdyaXRlT3BlcmF0aW9uPihyZWNvcmQsIFdURjo6bW92ZShtYXBwZWRCb2R5
SGFuZGxlcikpOworICAgIGF1dG8gd3JpdGVPcGVyYXRpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPFdy
aXRlT3BlcmF0aW9uPihyZWNvcmQsIHR5cGUsIFdURjo6bW92ZShtYXBwZWRCb2R5SGFuZGxlcikp
OwogICAgIG1fcGVuZGluZ1dyaXRlT3BlcmF0aW9ucy5wcmVwZW5kKFdURjo6bW92ZSh3cml0ZU9w
ZXJhdGlvbikpOwogCiAgICAgLy8gQWRkIGtleSB0byB0aGUgZmlsdGVyIGFscmVhZHkgaGVyZSBh
cyB3ZSBkbyBsb29rdXBzIGZyb20gdGhlIHBlbmRpbmcgb3BlcmF0aW9ucyB0b28uCi0gICAgYWRk
VG9SZWNvcmRGaWx0ZXIocmVjb3JkLmtleSk7CisgICAgYWRkVG9SZWNvcmRGaWx0ZXIocmVjb3Jk
LmtleSwgdHlwZSk7CiAKICAgICBib29sIGlzSW5pdGlhbFdyaXRlID0gbV9wZW5kaW5nV3JpdGVP
cGVyYXRpb25zLnNpemUoKSA9PSAxOwogICAgIGlmICghaXNJbml0aWFsV3JpdGUpCkBAIC03ODEs
OSArODY5LDEwIEBAIHZvaWQgU3RvcmFnZTo6dHJhdmVyc2UoVHJhdmVyc2VGbGFncyBmbGFncywg
VHJhdmVyc2VIYW5kbGVyJiYgdHJhdmVyc2VIYW5kbGVyKQogICAgIG1fYWN0aXZlVHJhdmVyc2VP
cGVyYXRpb25zLmFkZChXVEY6Om1vdmUodHJhdmVyc2VPcGVyYXRpb25QdHIpKTsKIAogICAgIGlv
UXVldWUoKS5kaXNwYXRjaChbdGhpcywgJnRyYXZlcnNlT3BlcmF0aW9uXSB7Ci0gICAgICAgIHRy
YXZlcnNlUmVjb3Jkc0ZpbGVzKHJlY29yZHNQYXRoKCksIFt0aGlzLCAmdHJhdmVyc2VPcGVyYXRp
b25dKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IFN0cmluZyYgcGFydGl0aW9uUGF0aCkg
ewotICAgICAgICAgICAgaWYgKGZpbGVOYW1lLmxlbmd0aCgpICE9IEtleTo6aGFzaFN0cmluZ0xl
bmd0aCgpKQotICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgSGFzaFNldDxTdHJpbmc+
IHJlc291cmNlVHlwZU9ubHk7CisgICAgICAgIHJlc291cmNlVHlwZU9ubHkuYWRkKHJlc291cmNl
VHlwZSk7CisgICAgICAgIHRyYXZlcnNlUmVjb3Jkc0ZpbGVzKHJlY29yZHNQYXRoKCksIHJlc291
cmNlVHlwZU9ubHksIFt0aGlzLCAmdHJhdmVyc2VPcGVyYXRpb25dKGNvbnN0IFN0cmluZyYgZmls
ZU5hbWUsIGNvbnN0IFN0cmluZyYgaGFzaFN0cmluZywgY29uc3QgU3RyaW5nJiB0eXBlLCBjb25z
dCBTdHJpbmcmIHBhcnRpdGlvblBhdGgpIHsKKyAgICAgICAgICAgIEFTU0VSVCh0eXBlID09IHJl
c291cmNlVHlwZSk7CiAgICAgICAgICAgICBhdXRvIHJlY29yZFBhdGggPSBXZWJDb3JlOjpwYXRo
QnlBcHBlbmRpbmdDb21wb25lbnQocGFydGl0aW9uUGF0aCwgZmlsZU5hbWUpOwogCiAgICAgICAg
ICAgICBkb3VibGUgd29ydGggPSAtMTsKQEAgLTc5MSw3ICs4ODAsNyBAQCB2b2lkIFN0b3JhZ2U6
OnRyYXZlcnNlKFRyYXZlcnNlRmxhZ3MgZmxhZ3MsIFRyYXZlcnNlSGFuZGxlciYmIHRyYXZlcnNl
SGFuZGxlcikKICAgICAgICAgICAgICAgICB3b3J0aCA9IGNvbXB1dGVSZWNvcmRXb3J0aChmaWxl
VGltZXMocmVjb3JkUGF0aCkpOwogICAgICAgICAgICAgdW5zaWduZWQgYm9keVNoYXJlQ291bnQg
PSAwOwogICAgICAgICAgICAgaWYgKHRyYXZlcnNlT3BlcmF0aW9uLmZsYWdzICYgVHJhdmVyc2VG
bGFnOjpTaGFyZUNvdW50KQotICAgICAgICAgICAgICAgIGJvZHlTaGFyZUNvdW50ID0gbV9ibG9i
U3RvcmFnZS5zaGFyZUNvdW50KGJvZHlQYXRoRm9yUmVjb3JkUGF0aChyZWNvcmRQYXRoKSk7Cisg
ICAgICAgICAgICAgICAgYm9keVNoYXJlQ291bnQgPSBtX2Jsb2JTdG9yYWdlLnNoYXJlQ291bnQo
Ym9keUJsb2JQYXRoRm9yUmVjb3JkUGF0aChyZWNvcmRQYXRoKSk7CiAKICAgICAgICAgICAgIHN0
ZDo6dW5pcXVlX2xvY2s8TG9jaz4gbG9jayh0cmF2ZXJzZU9wZXJhdGlvbi5hY3RpdmVNdXRleCk7
CiAgICAgICAgICAgICArK3RyYXZlcnNlT3BlcmF0aW9uLmFjdGl2ZUNvdW50OwpAQCAtODU2LDIz
ICs5NDUsMjggQEAgdm9pZCBTdG9yYWdlOjpzZXRDYXBhY2l0eShzaXplX3QgY2FwYWNpdHkpCiAg
ICAgc2hyaW5rSWZOZWVkZWQoKTsKIH0KIAotdm9pZCBTdG9yYWdlOjpjbGVhcihzdGQ6OmNocm9u
bzo6c3lzdGVtX2Nsb2NrOjp0aW1lX3BvaW50IG1vZGlmaWVkU2luY2VUaW1lLCBzdGQ6OmZ1bmN0
aW9uPHZvaWQgKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIFN0b3JhZ2U6OmNsZWFyKGNv
bnN0IFN0cmluZyYgdHlwZSwgc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6dGltZV9wb2ludCBt
b2RpZmllZFNpbmNlVGltZSwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgTE9HKE5ldHdvcmtD
YWNoZVN0b3JhZ2UsICIoTmV0d29ya1Byb2Nlc3MpIGNsZWFyaW5nIGNhY2hlIik7CiAKICAgICBp
ZiAobV9yZWNvcmRGaWx0ZXIpCiAgICAgICAgIG1fcmVjb3JkRmlsdGVyLT5jbGVhcigpOwotICAg
IGlmIChtX2JvZHlGaWx0ZXIpCi0gICAgICAgIG1fYm9keUZpbHRlci0+Y2xlYXIoKTsKKyAgICBp
ZiAobV9ib2R5QmxvYkZpbHRlcikKKyAgICAgICAgbV9ib2R5QmxvYkZpbHRlci0+Y2xlYXIoKTsK
ICAgICBtX2FwcHJveGltYXRlUmVjb3Jkc1NpemUgPSAwOwogCiAgICAgLy8gQXZvaWQgbm9uLXRo
cmVhZCBzYWZlIHN0ZDo6ZnVuY3Rpb24gY29waWVzLgogICAgIGF1dG8qIGNvbXBsZXRpb25IYW5k
bGVyUHRyID0gY29tcGxldGlvbkhhbmRsZXIgPyBuZXcgc3RkOjpmdW5jdGlvbjx2b2lkICgpPihX
VEY6Om1vdmUoY29tcGxldGlvbkhhbmRsZXIpKSA6IG51bGxwdHI7Ci0KLSAgICBpb1F1ZXVlKCku
ZGlzcGF0Y2goW3RoaXMsIG1vZGlmaWVkU2luY2VUaW1lLCBjb21wbGV0aW9uSGFuZGxlclB0cl0g
eworICAgIFN0cmluZ0NhcHR1cmUgdHlwZUNhcHR1cmUodHlwZSk7CisgICAgaW9RdWV1ZSgpLmRp
c3BhdGNoKFt0aGlzLCBtb2RpZmllZFNpbmNlVGltZSwgY29tcGxldGlvbkhhbmRsZXJQdHIsIHR5
cGVDYXB0dXJlXSB7CiAgICAgICAgIGF1dG8gcmVjb3Jkc1BhdGggPSB0aGlzLT5yZWNvcmRzUGF0
aCgpOwotICAgICAgICB0cmF2ZXJzZVJlY29yZHNGaWxlcyhyZWNvcmRzUGF0aCwgW21vZGlmaWVk
U2luY2VUaW1lXShjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBjb25zdCBTdHJpbmcmIHBhcnRpdGlv
blBhdGgpIHsKKyAgICAgICAgSGFzaFNldDxTdHJpbmc+IHR5cGVzOworICAgICAgICBpZiAoIXR5
cGVDYXB0dXJlLnN0cmluZygpLmlzTnVsbCgpKQorICAgICAgICAgICAgdHlwZXMuYWRkKHR5cGVD
YXB0dXJlLnN0cmluZygpKTsKKyAgICAgICAgaWYgKHR5cGVVc2VzQmxvYlN0b3JhZ2UodHlwZUNh
cHR1cmUuc3RyaW5nKCkpKQorICAgICAgICAgICAgdHlwZXMuYWRkKHR5cGVDYXB0dXJlLnN0cmlu
ZygpICsgYmxvYlN1ZmZpeCk7CisgICAgICAgIHRyYXZlcnNlUmVjb3Jkc0ZpbGVzKHJlY29yZHNQ
YXRoLCB0eXBlcywgW21vZGlmaWVkU2luY2VUaW1lXShjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBj
b25zdCBTdHJpbmcmIGhhc2hTdHJpbmcsIGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5n
JiBwYXJ0aXRpb25QYXRoKSB7CiAgICAgICAgICAgICBhdXRvIGZpbGVQYXRoID0gV2ViQ29yZTo6
cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHBhcnRpdGlvblBhdGgsIGZpbGVOYW1lKTsKICAgICAg
ICAgICAgIGlmIChtb2RpZmllZFNpbmNlVGltZSA+IHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6
OnRpbWVfcG9pbnQ6Om1pbigpKSB7CiAgICAgICAgICAgICAgICAgYXV0byB0aW1lcyA9IGZpbGVU
aW1lcyhmaWxlUGF0aCk7CkBAIC04ODQsNyArOTc4LDcgQEAgdm9pZCBTdG9yYWdlOjpjbGVhcihz
dGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjp0aW1lX3BvaW50IG1vZGlmaWVkU2luY2VUaW1lLCBz
dGQKIAogICAgICAgICBkZWxldGVFbXB0eVJlY29yZHNEaXJlY3RvcmllcyhyZWNvcmRzUGF0aCk7
CiAKLSAgICAgICAgLy8gVGhpcyBjbGVhbnMgdW5yZWZlcmVuY2VzIGJsb2JzLgorICAgICAgICAv
LyBUaGlzIGNsZWFucyB1bnJlZmVyZW5jZWQgYmxvYnMuCiAgICAgICAgIG1fYmxvYlN0b3JhZ2Uu
c3luY2hyb25pemUoKTsKIAogICAgICAgICBpZiAoY29tcGxldGlvbkhhbmRsZXJQdHIpIHsKQEAg
LTk1MCwxNCArMTA0NCwxNSBAQCB2b2lkIFN0b3JhZ2U6OnNocmluaygpCiAKICAgICBiYWNrZ3Jv
dW5kSU9RdWV1ZSgpLmRpc3BhdGNoKFt0aGlzXSB7CiAgICAgICAgIGF1dG8gcmVjb3Jkc1BhdGgg
PSB0aGlzLT5yZWNvcmRzUGF0aCgpOwotICAgICAgICB0cmF2ZXJzZVJlY29yZHNGaWxlcyhyZWNv
cmRzUGF0aCwgW3RoaXNdKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IFN0cmluZyYgcGFy
dGl0aW9uUGF0aCkgewotICAgICAgICAgICAgaWYgKGZpbGVOYW1lLmxlbmd0aCgpICE9IEtleTo6
aGFzaFN0cmluZ0xlbmd0aCgpKQotICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgSGFz
aFNldDxTdHJpbmc+IHJlc291cmNlVHlwZU9ubHk7CisgICAgICAgIHJlc291cmNlVHlwZU9ubHku
YWRkKHJlc291cmNlVHlwZSk7CisgICAgICAgIHRyYXZlcnNlUmVjb3Jkc0ZpbGVzKHJlY29yZHNQ
YXRoLCByZXNvdXJjZVR5cGVPbmx5LCBbdGhpc10oY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgY29u
c3QgU3RyaW5nJiBoYXNoU3RyaW5nLCBjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYg
cGFydGl0aW9uUGF0aCkgeworICAgICAgICAgICAgQVNTRVJUKHR5cGUgPT0gcmVzb3VyY2VUeXBl
KTsKICAgICAgICAgICAgIGF1dG8gcmVjb3JkUGF0aCA9IFdlYkNvcmU6OnBhdGhCeUFwcGVuZGlu
Z0NvbXBvbmVudChwYXJ0aXRpb25QYXRoLCBmaWxlTmFtZSk7Ci0gICAgICAgICAgICBhdXRvIGJv
ZHlQYXRoID0gYm9keVBhdGhGb3JSZWNvcmRQYXRoKHJlY29yZFBhdGgpOworICAgICAgICAgICAg
YXV0byBib2R5QmxvYlBhdGggPSBib2R5QmxvYlBhdGhGb3JSZWNvcmRQYXRoKHJlY29yZFBhdGgp
OwogCiAgICAgICAgICAgICBhdXRvIHRpbWVzID0gZmlsZVRpbWVzKHJlY29yZFBhdGgpOwotICAg
ICAgICAgICAgdW5zaWduZWQgYm9keVNoYXJlQ291bnQgPSBtX2Jsb2JTdG9yYWdlLnNoYXJlQ291
bnQoYm9keVBhdGgpOworICAgICAgICAgICAgdW5zaWduZWQgYm9keVNoYXJlQ291bnQgPSBtX2Js
b2JTdG9yYWdlLnNoYXJlQ291bnQoYm9keUJsb2JQYXRoKTsKICAgICAgICAgICAgIGF1dG8gcHJv
YmFiaWxpdHkgPSBkZWxldGlvblByb2JhYmlsaXR5KHRpbWVzLCBib2R5U2hhcmVDb3VudCk7CiAK
ICAgICAgICAgICAgIGJvb2wgc2hvdWxkRGVsZXRlID0gcmFuZG9tTnVtYmVyKCkgPCBwcm9iYWJp
bGl0eTsKQEAgLTk2Niw3ICsxMDYxLDcgQEAgdm9pZCBTdG9yYWdlOjpzaHJpbmsoKQogCiAgICAg
ICAgICAgICBpZiAoc2hvdWxkRGVsZXRlKSB7CiAgICAgICAgICAgICAgICAgV2ViQ29yZTo6ZGVs
ZXRlRmlsZShyZWNvcmRQYXRoKTsKLSAgICAgICAgICAgICAgICBtX2Jsb2JTdG9yYWdlLnJlbW92
ZShib2R5UGF0aCk7CisgICAgICAgICAgICAgICAgbV9ibG9iU3RvcmFnZS5yZW1vdmUoYm9keUJs
b2JQYXRoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuaCBiL1Nv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuaApp
bmRleCAzNmRjMWQ5YTJmM2JmYmYzOWU4YTEzMjY3ZDgwZDg0YzU3NmVhNjcyLi43OTMzMzgxZjlk
MWQ2NTdkZmNlY2M1NWU3NDUxM2Y0NjVjNTRjNTk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmgKKysrIGIvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5oCkBAIC0z
NCw5ICszNCwxMSBAQAogI2luY2x1ZGUgPFdlYkNvcmUvVGltZXIuaD4KICNpbmNsdWRlIDx3dGYv
Qmxvb21GaWx0ZXIuaD4KICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKyNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvbmFs
Lmg+CiAjaW5jbHVkZSA8d3RmL1dvcmtRdWV1ZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z0hhc2guaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdl
YktpdCB7CkBAIC00OSwyMyArNTEsMjMgQEAgY2xhc3MgU3RvcmFnZSB7CiBwdWJsaWM6CiAgICAg
c3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxTdG9yYWdlPiBvcGVuKGNvbnN0IFN0cmluZyYgY2FjaGVQ
YXRoKTsKIAotICAgIHN0cnVjdCBSZWNvcmQgeworICAgIGNsYXNzIFJlY29yZCB7CiAgICAgICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIHB1YmxpYzoKICAgICAgICAgS2V5IGtleTsK
ICAgICAgICAgc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6dGltZV9wb2ludCB0aW1lU3RhbXA7
Ci0gICAgICAgIERhdGEgaGVhZGVyOworICAgICAgICBEYXRhIGhlYWRlcjsgLy8gT25seSB1c2Vk
IGJ5IHJlc291cmNlIHR5cGUuCiAgICAgICAgIERhdGEgYm9keTsKICAgICB9OwogICAgIC8vIFRo
aXMgbWF5IGNhbGwgY29tcGxldGlvbiBoYW5kbGVyIHN5bmNocm9ub3VzbHkgb24gZmFpbHVyZS4K
ICAgICB0eXBlZGVmIHN0ZDo6ZnVuY3Rpb248Ym9vbCAoc3RkOjp1bmlxdWVfcHRyPFJlY29yZD4p
PiBSZXRyaWV2ZUNvbXBsZXRpb25IYW5kbGVyOwotICAgIHZvaWQgcmV0cmlldmUoY29uc3QgS2V5
JiwgdW5zaWduZWQgcHJpb3JpdHksIFJldHJpZXZlQ29tcGxldGlvbkhhbmRsZXImJik7CisgICAg
dm9pZCByZXRyaWV2ZShjb25zdCBLZXkmLCBjb25zdCBTdHJpbmcmIHR5cGUsIHVuc2lnbmVkIHBy
aW9yaXR5LCBSZXRyaWV2ZUNvbXBsZXRpb25IYW5kbGVyJiYpOwogCiAgICAgdHlwZWRlZiBzdGQ6
OmZ1bmN0aW9uPHZvaWQgKGNvbnN0IERhdGEmIG1hcHBlZEJvZHkpPiBNYXBwZWRCb2R5SGFuZGxl
cjsKLSAgICB2b2lkIHN0b3JlKGNvbnN0IFJlY29yZCYsIE1hcHBlZEJvZHlIYW5kbGVyJiYpOwor
ICAgIHZvaWQgc3RvcmUoY29uc3QgUmVjb3JkJiwgY29uc3QgU3RyaW5nJiB0eXBlLCBNYXBwZWRC
b2R5SGFuZGxlciYmKTsKIAotICAgIHZvaWQgcmVtb3ZlKGNvbnN0IEtleSYpOwotICAgIHZvaWQg
Y2xlYXIoc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6dGltZV9wb2ludCBtb2RpZmllZFNpbmNl
VGltZSwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKTsKKyAgICB2
b2lkIHJlbW92ZShjb25zdCBLZXkmLCBjb25zdCBTdHJpbmcmIHR5cGUpOworICAgIHZvaWQgY2xl
YXIoY29uc3QgU3RyaW5nJiB0eXBlLCBzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjp0aW1lX3Bv
aW50IG1vZGlmaWVkU2luY2VUaW1lLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpOwogCiAgICAgc3RydWN0IFJlY29yZEluZm8gewogICAgICAgICBzaXplX3QgYm9k
eVNpemU7CkBAIC04Niw3ICs4OCw3IEBAIHB1YmxpYzoKICAgICBzaXplX3QgY2FwYWNpdHkoKSBj
b25zdCB7IHJldHVybiBtX2NhcGFjaXR5OyB9CiAgICAgc2l6ZV90IGFwcHJveGltYXRlU2l6ZSgp
IGNvbnN0OwogCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHZlcnNpb24gPSA0OworICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCB2ZXJzaW9uID0gNTsKIAogICAgIFN0cmluZyBiYXNlUGF0aCgp
IGNvbnN0OwogICAgIFN0cmluZyB2ZXJzaW9uUGF0aCgpIGNvbnN0OwpAQCAtOTgsOCArMTAwLDgg
QEAgcHJpdmF0ZToKICAgICBTdG9yYWdlKGNvbnN0IFN0cmluZyYgZGlyZWN0b3J5UGF0aCk7CiAK
ICAgICBTdHJpbmcgcGFydGl0aW9uUGF0aEZvcktleShjb25zdCBLZXkmKSBjb25zdDsKLSAgICBT
dHJpbmcgcmVjb3JkUGF0aEZvcktleShjb25zdCBLZXkmKSBjb25zdDsKLSAgICBTdHJpbmcgYm9k
eVBhdGhGb3JLZXkoY29uc3QgS2V5JikgY29uc3Q7CisgICAgU3RyaW5nIHJlY29yZFBhdGhGb3JL
ZXkoY29uc3QgS2V5JiwgY29uc3QgU3RyaW5nJiB0eXBlKSBjb25zdDsKKyAgICBTdHJpbmcgYm9k
eUJsb2JQYXRoRm9yS2V5KGNvbnN0IEtleSYsIGNvbnN0IFN0cmluZyYgdHlwZSkgY29uc3Q7CiAK
ICAgICB2b2lkIHN5bmNocm9uaXplKCk7CiAgICAgdm9pZCBkZWxldGVPbGRWZXJzaW9ucygpOwpA
QCAtMTE5LDE4ICsxMjEsMjEgQEAgcHJpdmF0ZToKIAogICAgIE9wdGlvbmFsPEJsb2JTdG9yYWdl
OjpCbG9iPiBzdG9yZUJvZHlBc0Jsb2IoV3JpdGVPcGVyYXRpb24mKTsKICAgICBEYXRhIGVuY29k
ZVJlY29yZChjb25zdCBSZWNvcmQmLCBPcHRpb25hbDxCbG9iU3RvcmFnZTo6QmxvYj4pOworICAg
IERhdGEgZW5jb2RlUmVjb3JkV2l0aEhlYWRlcihjb25zdCBSZWNvcmQmLCBPcHRpb25hbDxCbG9i
U3RvcmFnZTo6QmxvYj4pOwogICAgIHZvaWQgcmVhZFJlY29yZChSZWFkT3BlcmF0aW9uJiwgY29u
c3QgRGF0YSYpOworICAgIHZvaWQgcmVhZFJlY29yZFdpdGhIZWFkZXIoUmVhZE9wZXJhdGlvbiYs
IGNvbnN0IERhdGEmKTsKIAogICAgIHZvaWQgdXBkYXRlRmlsZU1vZGlmaWNhdGlvblRpbWUoY29u
c3QgU3RyaW5nJiBwYXRoKTsKLSAgICBib29sIHJlbW92ZUZyb21QZW5kaW5nV3JpdGVPcGVyYXRp
b25zKGNvbnN0IEtleSYpOworICAgIGJvb2wgcmVtb3ZlRnJvbVBlbmRpbmdXcml0ZU9wZXJhdGlv
bnMoY29uc3QgS2V5JiwgY29uc3QgU3RyaW5nJiB0eXBlKTsKIAogICAgIFdvcmtRdWV1ZSYgaW9R
dWV1ZSgpIHsgcmV0dXJuIG1faW9RdWV1ZS5nZXQoKTsgfQogICAgIFdvcmtRdWV1ZSYgYmFja2dy
b3VuZElPUXVldWUoKSB7IHJldHVybiBtX2JhY2tncm91bmRJT1F1ZXVlLmdldCgpOyB9CiAgICAg
V29ya1F1ZXVlJiBzZXJpYWxCYWNrZ3JvdW5kSU9RdWV1ZSgpIHsgcmV0dXJuIG1fc2VyaWFsQmFj
a2dyb3VuZElPUXVldWUuZ2V0KCk7IH0KIAotICAgIGJvb2wgbWF5Q29udGFpbihjb25zdCBLZXkm
KSBjb25zdDsKKyAgICBib29sIG1heUNvbnRhaW4oY29uc3QgS2V5JiwgY29uc3QgU3RyaW5nJiB0
eXBlKSBjb25zdDsKKyAgICBib29sIG1heUNvbnRhaW5CbG9iKGNvbnN0IEtleSYsIGNvbnN0IFN0
cmluZyYgdHlwZSkgY29uc3Q7CiAKLSAgICB2b2lkIGFkZFRvUmVjb3JkRmlsdGVyKGNvbnN0IEtl
eSYpOworICAgIHZvaWQgYWRkVG9SZWNvcmRGaWx0ZXIoY29uc3QgS2V5JiwgY29uc3QgU3RyaW5n
JiB0eXBlKTsKIAogICAgIGNvbnN0IFN0cmluZyBtX2Jhc2VQYXRoOwogICAgIGNvbnN0IFN0cmlu
ZyBtX3JlY29yZHNQYXRoOwpAQCAtMTQxLDEzICsxNDYsMTMgQEAgcHJpdmF0ZToKICAgICAvLyAy
XjE4IGJpdCBmaWx0ZXIgY2FuIHN1cHBvcnQgdXAgdG8gMjYwMDAgZW50cmllcyB3aXRoIGZhbHNl
IHBvc2l0aXZlIHJhdGUgPCAxJS4KICAgICB1c2luZyBDb250ZW50c0ZpbHRlciA9IEJsb29tRmls
dGVyPDE4PjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q29udGVudHNGaWx0ZXI+IG1fcmVjb3JkRmls
dGVyOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxDb250ZW50c0ZpbHRlcj4gbV9ib2R5RmlsdGVyOwor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxDb250ZW50c0ZpbHRlcj4gbV9ib2R5QmxvYkZpbHRlcjsKIAog
ICAgIGJvb2wgbV9zeW5jaHJvbml6YXRpb25JblByb2dyZXNzIHsgZmFsc2UgfTsKICAgICBib29s
IG1fc2hyaW5rSW5Qcm9ncmVzcyB7IGZhbHNlIH07CiAKICAgICBWZWN0b3I8S2V5OjpIYXNoVHlw
ZT4gbV9yZWNvcmRGaWx0ZXJIYXNoZXNBZGRlZER1cmluZ1N5bmNocm9uaXphdGlvbjsKLSAgICBW
ZWN0b3I8S2V5OjpIYXNoVHlwZT4gbV9ib2R5RmlsdGVySGFzaGVzQWRkZWREdXJpbmdTeW5jaHJv
bml6YXRpb247CisgICAgVmVjdG9yPEtleTo6SGFzaFR5cGU+IG1fYm9keUJsb2JGaWx0ZXJIYXNo
ZXNBZGRlZER1cmluZ1N5bmNocm9uaXphdGlvbjsKIAogICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4
aW11bVJldHJpZXZlUHJpb3JpdHkgPSA0OwogICAgIERlcXVlPHN0ZDo6dW5pcXVlX3B0cjxSZWFk
T3BlcmF0aW9uPj4gbV9wZW5kaW5nUmVhZE9wZXJhdGlvbnNCeVByaW9yaXR5W21heGltdW1SZXRy
aWV2ZVByaW9yaXR5ICsgMV07CkBAIC0xNjksNyArMTc0LDcgQEAgcHJpdmF0ZToKIH07CiAKIC8v
IEZJWE1FOiBSZW1vdmUsIHVzZWQgYnkgTmV0d29ya0NhY2hlU3RhdGlzdGljcyBvbmx5Lgotdm9p
ZCB0cmF2ZXJzZVJlY29yZHNGaWxlcyhjb25zdCBTdHJpbmcmIHJlY29yZHNQYXRoLCBjb25zdCBz
dGQ6OmZ1bmN0aW9uPHZvaWQgKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpPiYpOwordm9p
ZCB0cmF2ZXJzZVJlY29yZHNGaWxlcyhjb25zdCBTdHJpbmcmIHJlY29yZHNQYXRoLCBjb25zdCBI
YXNoU2V0PFN0cmluZz4mIHR5cGVzLCBjb25zdCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGNvbnN0IFN0
cmluZyYgZmlsZU5hbWUsIGNvbnN0IFN0cmluZyYgaGFzaFN0cmluZywgY29uc3QgU3RyaW5nJiB0
eXBlLCBjb25zdCBTdHJpbmcmIHBhcnRpdGlvblBhdGgpPiYpOwogCiB9CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263248</attachid>
            <date>2015-10-15 22:26:43 -0700</date>
            <delta_ts>2015-10-16 14:07:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150221-20151015222605.patch</filename>
            <type>text/plain</type>
            <size>37784</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkxMDA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggYTM2YjNkN2M1YjU3MDVk
YjkyNzY5MzE3ZDM0OTM3NTg5YzllYjg1Mi4uYjkxYWU4NGQzZGI2NTZhYmJhNmI1YTI1YjFmYTUw
YzQ5NWZiMmI2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDE1LTEwLTE1ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgW1dLMl0gR2VuZXJhbGl6ZSBO
ZXR3b3JrQ2FjaGVTdG9yYWdlIEFQSSBzbyBpdCBjYW4gc3RvcmUgZGlmZmVyZW50IHR5cGVzIG9m
IG1ldGFkYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTAyMjEKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzIzMDkyMTk2PgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEdlbmVyYWxpemUgTmV0d29ya0Nh
Y2hlU3RvcmFnZSBBUEkgc28gaXQgY2FuIHN0b3JlIGRpZmZlcmVudCB0eXBlcyBvZgorICAgICAg
ICBtZXRhZGF0YSBhbG9uZ3NpZGUgdGhlIG5ldHdvcmsgcmVzb3VyY2VzLiBUaGlzIGlzIGEgcHJl
LXJlcXVpcmVtZW50IHRvCisgICAgICAgIG1ha2luZyBvdXIgTmV0d29ya0NhY2hlIHNtYXJ0ZXIg
Ynkgc3RvcmluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUKKyAgICAgICAgcmVzb3VyY2VzLgorCisg
ICAgICAgIFRvIHNpbXBsaWZ5IHRoZSBjb2RlLCBhbGwgY2FjaGUgZW50cmllcyBub3cgaGF2ZSBh
IHN1ZmZpeCwgc28gdGhhdCB0aGV5CisgICAgICAgIGFsbCBmb2xsb3dpbmcgdGhlIGZvbGxvd2lu
ZyBmb3JtYXQ6CisgICAgICAgIC0gUmVndWxhciBlbnRyaWVzOiBbaGFzaF0tW3R5cGVdCisgICAg
ICAgIC0gQmxvYnM6IFtoYXNoXS1bdHlwZV1ibG9iCisKKyAgICAgICAgVGhlIHR5cGUgb2YgZXhp
c3RpbmcgY2FjaGUgZW50cmllcyBpcyAncmVzb3VyY2UnIGFzIHRoZXNlIGFyZSBuZXR3b3JrCisg
ICAgICAgIHJlc291cmNlcy4gSW4gdGhlIGZ1dHVyZSwgd2UgY2FuIHN0b3JlIG1vcmUgdHlwZXMg
b2YgY2FjaGUgZW50cmllcy4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZS5jcHA6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hl
U3RhdGlzdGljcy5jcHA6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlU3RvcmFnZS5jcHA6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlU3RvcmFnZS5oOgorCiAyMDE1LTEwLTEzICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBh
cHBsZS5jb20+CiAKICAgICAgICAgQWRkIGFuZCBpbXBsZW1lbnQgV0tQYWdlR2V0T2JqZWN0UmVn
aXN0cnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGUuY3BwCmluZGV4IGFmODc0OTM1NTUxZGFkNTQ2NjAxMGZlYTJhNjkzZTM1ZjkzZTgz
YWIuLjVjNGI5ZWZhNGNjOGNjZjM1NjIyMGQ2YzllZjJiNmIxZDI5NDI2MWUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNwcApA
QCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlc3BvbnNlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9T
aGFyZWRCdWZmZXIuaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0
Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgpAQCAtNTAsNiArNTEsMTMgQEAKIG5hbWVzcGFjZSBX
ZWJLaXQgewogbmFtZXNwYWNlIE5ldHdvcmtDYWNoZSB7CiAKK3N0YXRpYyBjb25zdCBTdHJpbmcg
cmVzb3VyY2VUeXBlKCkKK3sKKyAgICBBU1NFUlQoV1RGOjppc01haW5UaHJlYWQoKSk7CisgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gcmVzb3VyY2UoQVNDSUlMaXRlcmFs
KCJyZXNvdXJjZSIpKTsKKyAgICByZXR1cm4gcmVzb3VyY2U7Cit9CisKIENhY2hlJiBzaW5nbGV0
b24oKQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxDYWNoZT4gaW5zdGFuY2U7CkBAIC0z
NTIsNyArMzYwLDcgQEAgdm9pZCBDYWNoZTo6cmV0cmlldmUoY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0JiBvcmlnaW5hbFJlcXVlc3QsIHVpbnQ2NF90IHcKICAgICBhdXRvIHN0YXJ0VGlt
ZSA9IHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6Om5vdygpOwogICAgIGF1dG8gcHJpb3JpdHkg
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ob3JpZ2luYWxSZXF1ZXN0LnByaW9yaXR5KCkpOwogCi0g
ICAgbV9zdG9yYWdlLT5yZXRyaWV2ZShzdG9yYWdlS2V5LCBwcmlvcml0eSwgW3RoaXMsIG9yaWdp
bmFsUmVxdWVzdCwgY29tcGxldGlvbkhhbmRsZXIsIHN0YXJ0VGltZSwgc3RvcmFnZUtleSwgd2Vi
UGFnZUlEXShzdGQ6OnVuaXF1ZV9wdHI8U3RvcmFnZTo6UmVjb3JkPiByZWNvcmQpIHsKKyAgICBt
X3N0b3JhZ2UtPnJldHJpZXZlKHN0b3JhZ2VLZXksIHJlc291cmNlVHlwZSgpLCBwcmlvcml0eSwg
W3RoaXMsIG9yaWdpbmFsUmVxdWVzdCwgY29tcGxldGlvbkhhbmRsZXIsIHN0YXJ0VGltZSwgc3Rv
cmFnZUtleSwgd2ViUGFnZUlEXShzdGQ6OnVuaXF1ZV9wdHI8U3RvcmFnZTo6UmVjb3JkPiByZWNv
cmQpIHsKICAgICAgICAgaWYgKCFyZWNvcmQpIHsKICAgICAgICAgICAgIExPRyhOZXR3b3JrQ2Fj
aGUsICIoTmV0d29ya1Byb2Nlc3MpIG5vdCBmb3VuZCBpbiBzdG9yYWdlIik7CiAKQEAgLTQyNSw3
ICs0MzMsNyBAQCB2b2lkIENhY2hlOjpzdG9yZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QmIG9yaWdpbmFsUmVxdWVzdCwgY29uc3QgV2ViQ29yZQogCiAgICAgYXV0byByZWNvcmQgPSBj
YWNoZUVudHJ5LmVuY29kZUFzU3RvcmFnZVJlY29yZCgpOwogCi0gICAgbV9zdG9yYWdlLT5zdG9y
ZShyZWNvcmQsIFtjb21wbGV0aW9uSGFuZGxlcl0oY29uc3QgRGF0YSYgYm9keURhdGEpIHsKKyAg
ICBtX3N0b3JhZ2UtPnN0b3JlKHJlY29yZCwgcmVzb3VyY2VUeXBlKCksIFtjb21wbGV0aW9uSGFu
ZGxlcl0oY29uc3QgRGF0YSYgYm9keURhdGEpIHsKICAgICAgICAgTWFwcGVkQm9keSBtYXBwZWRC
b2R5OwogI2lmIEVOQUJMRShTSEFSRUFCTEVfUkVTT1VSQ0UpCiAgICAgICAgIGlmIChSZWZQdHI8
U2hhcmVkTWVtb3J5PiBzaGFyZWRNZW1vcnkgPSBib2R5RGF0YS50cnlDcmVhdGVTaGFyZWRNZW1v
cnkoKSkgewpAQCAtNDUwLDcgKzQ1OCw3IEBAIHZvaWQgQ2FjaGU6OnVwZGF0ZShjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3QmIG9yaWdpbmFsUmVxdWVzdCwgdWludDY0X3Qgd2ViCiAKICAg
ICBhdXRvIHVwZGF0ZVJlY29yZCA9IHVwZGF0ZUVudHJ5LmVuY29kZUFzU3RvcmFnZVJlY29yZCgp
OwogCi0gICAgbV9zdG9yYWdlLT5zdG9yZSh1cGRhdGVSZWNvcmQsIHsgfSk7CisgICAgbV9zdG9y
YWdlLT5zdG9yZSh1cGRhdGVSZWNvcmQsIHJlc291cmNlVHlwZSgpLCB7IH0pOwogCiAgICAgaWYg
KG1fc3RhdGlzdGljcykKICAgICAgICAgbV9zdGF0aXN0aWNzLT5yZWNvcmRSZXZhbGlkYXRpb25T
dWNjZXNzKHdlYlBhZ2VJRCwgZXhpc3RpbmdFbnRyeS5rZXkoKSwgb3JpZ2luYWxSZXF1ZXN0KTsK
QEAgLTQ2MCw3ICs0NjgsNyBAQCB2b2lkIENhY2hlOjpyZW1vdmUoY29uc3QgS2V5JiBrZXkpCiB7
CiAgICAgQVNTRVJUKGlzRW5hYmxlZCgpKTsKIAotICAgIG1fc3RvcmFnZS0+cmVtb3ZlKGtleSk7
CisgICAgbV9zdG9yYWdlLT5yZW1vdmUoa2V5LCByZXNvdXJjZVR5cGUoKSk7CiB9CiAKIHZvaWQg
Q2FjaGU6OnJlbW92ZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCkBA
IC01NjcsNyArNTc1LDcgQEAgdm9pZCBDYWNoZTo6Y2xlYXIoc3RkOjpjaHJvbm86OnN5c3RlbV9j
bG9jazo6dGltZV9wb2ludCBtb2RpZmllZFNpbmNlLCBzdGQ6OmZ1bmMKICAgICAgICAgUnVuTG9v
cDo6bWFpbigpLmRpc3BhdGNoKGNvbXBsZXRpb25IYW5kbGVyKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KLSAgICBtX3N0b3JhZ2UtPmNsZWFyKG1vZGlmaWVkU2luY2UsIFdURjo6bW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOworICAgIG1fc3RvcmFnZS0+Y2xlYXIocmVzb3VyY2VUeXBlKCksIG1v
ZGlmaWVkU2luY2UsIFdURjo6bW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCiAgICAgZGVsZXRl
RHVtcEZpbGUoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZVN0YXRpc3RpY3MuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RhdGlzdGljcy5jcHAKaW5kZXggZmJlMTQ1ZWFh
NWJjNDEyNTNiZjc4YWVmZmQ3MjUxNWU1OGYxNTI5Ny4uNGE3OGQxMDY5MTAyMGFhNTFiODU3MjVi
NmZjNWYyMjk3NGI2MjYwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlU3RhdGlzdGljcy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RhdGlzdGljcy5jcHAKQEAgLTE0NCw3
ICsxNDQsOSBAQCB2b2lkIFN0YXRpc3RpY3M6OmJvb3RzdHJhcEZyb21OZXR3b3JrQ2FjaGUoY29u
c3QgU3RyaW5nJiBuZXR3b3JrQ2FjaGVQYXRoKQogICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0
d29ya1Byb2Nlc3MpIEJvb3RzdHJhcHBpbmcgdGhlIG5ldHdvcmsgY2FjaGUgc3RhdGlzdGljcyBk
YXRhYmFzZSBmcm9tIHRoZSBuZXR3b3JrIGNhY2hlLi4uIik7CiAKICAgICBWZWN0b3I8U3RyaW5n
Q2FwdHVyZT4gaGFzaGVzOwotICAgIHRyYXZlcnNlUmVjb3Jkc0ZpbGVzKG5ldHdvcmtDYWNoZVBh
dGgsIFsmaGFzaGVzXShjb25zdCBTdHJpbmcmIGhhc2hTdHJpbmcsIGNvbnN0IFN0cmluZyYpIHsK
KyAgICBIYXNoU2V0PFN0cmluZz4gcmVzb3VyY2VzT25seTsKKyAgICByZXNvdXJjZXNPbmx5LmFk
ZChBU0NJSUxpdGVyYWwoInJlc291cmNlIikpOworICAgIHRyYXZlcnNlUmVjb3Jkc0ZpbGVzKG5l
dHdvcmtDYWNoZVBhdGgsIHJlc291cmNlc09ubHksIFsmaGFzaGVzXShjb25zdCBTdHJpbmcmIGZp
bGVOYW1lLCBjb25zdCBTdHJpbmcmIGhhc2hTdHJpbmcsIGNvbnN0IFN0cmluZyYgdHlwZSwgY29u
c3QgU3RyaW5nJiBwYXJ0aXRpb25QYXRoKSB7CiAgICAgICAgIEtleTo6SGFzaFR5cGUgaGFzaDsK
ICAgICAgICAgaWYgKCFLZXk6OnN0cmluZ1RvSGFzaChoYXNoU3RyaW5nLCBoYXNoKSkKICAgICAg
ICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHAKaW5kZXggZmE1YmE3ZGEyMDZmZDA5
OWEzOWY0ODllODgyNzQ5MmE0MTAxMjU5NS4uNGY4YzM3YTEzMWI1ZmVkOGJmMDA1OGE3Y2U5NWVk
MGUwNmEzNGIxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHAKQEAgLTQ2LDE1ICs0NiwyNyBAQCBu
YW1lc3BhY2UgTmV0d29ya0NhY2hlIHsKIHN0YXRpYyBjb25zdCBjaGFyIHZlcnNpb25EaXJlY3Rv
cnlQcmVmaXhbXSA9ICJWZXJzaW9uICI7CiBzdGF0aWMgY29uc3QgY2hhciByZWNvcmRzRGlyZWN0
b3J5TmFtZVtdID0gIlJlY29yZHMiOwogc3RhdGljIGNvbnN0IGNoYXIgYmxvYnNEaXJlY3RvcnlO
YW1lW10gPSAiQmxvYnMiOwotc3RhdGljIGNvbnN0IGNoYXIgYm9keVBvc3RmaXhbXSA9ICItYm9k
eSI7CitzdGF0aWMgY29uc3QgY2hhciByZXNvdXJjZVR5cGVbXSA9ICJyZXNvdXJjZSI7CitzdGF0
aWMgY29uc3QgY2hhciBibG9iU3VmZml4W10gPSAiYmxvYiI7CisKK3N0YXRpYyBib29sIHR5cGVV
c2VzQmxvYlN0b3JhZ2UoY29uc3QgU3RyaW5nJiB0eXBlKQoreworICAgIHJldHVybiB0eXBlID09
IHJlc291cmNlVHlwZTsKK30KKworc3RhdGljIGJvb2wgdHlwZVVzZXNIZWFkZXIoY29uc3QgU3Ry
aW5nJiB0eXBlKQoreworICAgIHJldHVybiB0eXBlID09IHJlc291cmNlVHlwZTsKK30KIAogc3Rh
dGljIGRvdWJsZSBjb21wdXRlUmVjb3JkV29ydGgoRmlsZVRpbWVzKTsKIAogc3RydWN0IFN0b3Jh
Z2U6OlJlYWRPcGVyYXRpb24gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGlj
OgotICAgIFJlYWRPcGVyYXRpb24oY29uc3QgS2V5JiBrZXksIGNvbnN0IFJldHJpZXZlQ29tcGxl
dGlvbkhhbmRsZXImIGNvbXBsZXRpb25IYW5kbGVyKQorICAgIFJlYWRPcGVyYXRpb24oY29uc3Qg
S2V5JiBrZXksIGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgUmV0cmlldmVDb21wbGV0aW9uSGFu
ZGxlciYgY29tcGxldGlvbkhhbmRsZXIpCiAgICAgICAgIDoga2V5KGtleSkKKyAgICAgICAgLCB0
eXBlKHR5cGUpCiAgICAgICAgICwgY29tcGxldGlvbkhhbmRsZXIoY29tcGxldGlvbkhhbmRsZXIp
CiAgICAgeyB9CiAKQEAgLTYyLDYgKzc0LDcgQEAgcHVibGljOgogICAgIGJvb2wgZmluaXNoKCk7
CiAKICAgICBjb25zdCBLZXkga2V5OworICAgIGNvbnN0IFN0cmluZyB0eXBlOwogICAgIGNvbnN0
IFJldHJpZXZlQ29tcGxldGlvbkhhbmRsZXIgY29tcGxldGlvbkhhbmRsZXI7CiAgICAgCiAgICAg
c3RkOjp1bmlxdWVfcHRyPFJlY29yZD4gcmVzdWx0UmVjb3JkOwpAQCAtOTksMTIgKzExMiwxNCBA
QCBib29sIFN0b3JhZ2U6OlJlYWRPcGVyYXRpb246OmZpbmlzaCgpCiBzdHJ1Y3QgU3RvcmFnZTo6
V3JpdGVPcGVyYXRpb24gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgot
ICAgIFdyaXRlT3BlcmF0aW9uKGNvbnN0IFJlY29yZCYgcmVjb3JkLCBjb25zdCBNYXBwZWRCb2R5
SGFuZGxlciYgbWFwcGVkQm9keUhhbmRsZXIpCisgICAgV3JpdGVPcGVyYXRpb24oY29uc3QgUmVj
b3JkJiByZWNvcmQsIGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgTWFwcGVkQm9keUhhbmRsZXIm
IG1hcHBlZEJvZHlIYW5kbGVyKQogICAgICAgICA6IHJlY29yZChyZWNvcmQpCisgICAgICAgICwg
dHlwZSh0eXBlKQogICAgICAgICAsIG1hcHBlZEJvZHlIYW5kbGVyKG1hcHBlZEJvZHlIYW5kbGVy
KQogICAgIHsgfQogICAgIAogICAgIGNvbnN0IFJlY29yZCByZWNvcmQ7CisgICAgY29uc3QgU3Ry
aW5nIHR5cGU7CiAgICAgY29uc3QgTWFwcGVkQm9keUhhbmRsZXIgbWFwcGVkQm9keUhhbmRsZXI7
CiAKICAgICBzdGQ6OmF0b21pYzx1bnNpZ25lZD4gYWN0aXZlQ291bnQgeyAwIH07CkBAIC0xMjYs
NiArMTQxLDI1IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBhY3RpdmVDb3VudCB7IDAgfTsKIH07
CiAKK3N0YXRpYyB2b2lkIGhhc2hTdHJpbmcoU0hBMSYgc2hhMSwgY29uc3QgU3RyaW5nJiBzdHJp
bmcpCit7CisgICAgYXV0byBjU3RyaW5nID0gc3RyaW5nLnV0ZjgoKTsKKyAgICBzaGExLmFkZEJ5
dGVzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGNTdHJpbmcuZGF0YSgpKSwgY1N0
cmluZy5sZW5ndGgoKSArIDEpOworfQorCitzdGF0aWMgU0hBMTo6RGlnZXN0IG1ha2VSZWNvcmRG
aWx0ZXJLZXkoY29uc3QgU3RyaW5nJiBoYXNoQXNTdHJpbmcsIGNvbnN0IFN0cmluZyYgdHlwZSkK
K3sKKyAgICBBU1NFUlQoIWhhc2hBc1N0cmluZy5pc051bGwoKSk7CisgICAgQVNTRVJUKCF0eXBl
LmlzTnVsbCgpKTsKKworICAgIFNIQTEgc2hhMTsKKyAgICBoYXNoU3RyaW5nKHNoYTEsIGhhc2hB
c1N0cmluZyk7CisgICAgaGFzaFN0cmluZyhzaGExLCB0eXBlKTsKKyAgICBTSEExOjpEaWdlc3Qg
aGFzaDsKKyAgICBzaGExLmNvbXB1dGVIYXNoKGhhc2gpOworICAgIHJldHVybiBoYXNoOworfQor
CiBzdGQ6OnVuaXF1ZV9wdHI8U3RvcmFnZT4gU3RvcmFnZTo6b3Blbihjb25zdCBTdHJpbmcmIGNh
Y2hlUGF0aCkKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwpAQCAtMTUxLDE2ICsx
ODUsMjMgQEAgc3RhdGljIFN0cmluZyBtYWtlQmxvYkRpcmVjdG9yeVBhdGgoY29uc3QgU3RyaW5n
JiBiYXNlRGlyZWN0b3J5UGF0aCkKICAgICByZXR1cm4gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5n
Q29tcG9uZW50KG1ha2VWZXJzaW9uZWREaXJlY3RvcnlQYXRoKGJhc2VEaXJlY3RvcnlQYXRoKSwg
YmxvYnNEaXJlY3RvcnlOYW1lKTsKIH0KIAotdm9pZCB0cmF2ZXJzZVJlY29yZHNGaWxlcyhjb25z
dCBTdHJpbmcmIHJlY29yZHNQYXRoLCBjb25zdCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGNvbnN0IFN0
cmluZyYsIGNvbnN0IFN0cmluZyYpPiYgZnVuY3Rpb24pCit2b2lkIHRyYXZlcnNlUmVjb3Jkc0Zp
bGVzKGNvbnN0IFN0cmluZyYgcmVjb3Jkc1BhdGgsIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgdHlw
ZXMsIGNvbnN0IHN0ZDo6ZnVuY3Rpb248dm9pZCAoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgY29u
c3QgU3RyaW5nJiBoYXNoLCBjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgcGFydGl0
aW9uUGF0aCk+JiBmdW5jdGlvbikKIHsKLSAgICB0cmF2ZXJzZURpcmVjdG9yeShyZWNvcmRzUGF0
aCwgWyZyZWNvcmRzUGF0aCwgJmZ1bmN0aW9uXShjb25zdCBTdHJpbmcmIHN1YmRpck5hbWUsIERp
cmVjdG9yeUVudHJ5VHlwZSB0eXBlKSB7Ci0gICAgICAgIGlmICh0eXBlICE9IERpcmVjdG9yeUVu
dHJ5VHlwZTo6RGlyZWN0b3J5KQorICAgIHRyYXZlcnNlRGlyZWN0b3J5KHJlY29yZHNQYXRoLCBb
JnJlY29yZHNQYXRoLCAmZnVuY3Rpb24sICZ0eXBlc10oY29uc3QgU3RyaW5nJiBzdWJkaXJOYW1l
LCBEaXJlY3RvcnlFbnRyeVR5cGUgZW50cnlUeXBlKSB7CisgICAgICAgIGlmIChlbnRyeVR5cGUg
IT0gRGlyZWN0b3J5RW50cnlUeXBlOjpEaXJlY3RvcnkpCiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIFN0cmluZyBwYXJ0aXRpb25QYXRoID0gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29t
cG9uZW50KHJlY29yZHNQYXRoLCBzdWJkaXJOYW1lKTsKLSAgICAgICAgdHJhdmVyc2VEaXJlY3Rv
cnkocGFydGl0aW9uUGF0aCwgWyZmdW5jdGlvbiwgJnBhcnRpdGlvblBhdGhdKGNvbnN0IFN0cmlu
ZyYgZmlsZU5hbWUsIERpcmVjdG9yeUVudHJ5VHlwZSB0eXBlKSB7Ci0gICAgICAgICAgICBpZiAo
dHlwZSAhPSBEaXJlY3RvcnlFbnRyeVR5cGU6OkZpbGUpCisgICAgICAgIHRyYXZlcnNlRGlyZWN0
b3J5KHBhcnRpdGlvblBhdGgsIFsmZnVuY3Rpb24sICZwYXJ0aXRpb25QYXRoLCAmdHlwZXNdKGNv
bnN0IFN0cmluZyYgZmlsZU5hbWUsIERpcmVjdG9yeUVudHJ5VHlwZSBlbnRyeVR5cGUpIHsKKyAg
ICAgICAgICAgIGlmIChlbnRyeVR5cGUgIT0gRGlyZWN0b3J5RW50cnlUeXBlOjpGaWxlIHx8IGZp
bGVOYW1lW0tleTo6aGFzaFN0cmluZ0xlbmd0aCgpXSAhPSAnLScpCisgICAgICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgICAgICBhdXRvIHR5cGUgPSBmaWxlTmFtZS5zdWJzdHJpbmcoS2V5
OjpoYXNoU3RyaW5nTGVuZ3RoKCkgKyAxKTsKKworICAgICAgICAgICAgaWYgKCF0eXBlcy5pc0Vt
cHR5KCkgJiYgIXR5cGVzLmNvbnRhaW5zKHR5cGUpKQogICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgIGZ1bmN0aW9uKGZpbGVOYW1lLCBwYXJ0aXRpb25QYXRoKTsKKworICAgICAg
ICAgICAgYXV0byBoYXNoU3RyaW5nID0gZmlsZU5hbWUuc3Vic3RyaW5nKDAsIEtleTo6aGFzaFN0
cmluZ0xlbmd0aCgpKTsKKyAgICAgICAgICAgIGZ1bmN0aW9uKGZpbGVOYW1lLCBoYXNoU3RyaW5n
LCB0eXBlLCBwYXJ0aXRpb25QYXRoKTsKICAgICAgICAgfSk7CiAgICAgfSk7CiB9CkBAIC0yMjUs
MTQgKzI2NiwxMyBAQCB2b2lkIFN0b3JhZ2U6OnN5bmNocm9uaXplKCkKIAogICAgIGJhY2tncm91
bmRJT1F1ZXVlKCkuZGlzcGF0Y2goW3RoaXNdIHsKICAgICAgICAgYXV0byByZWNvcmRGaWx0ZXIg
PSBzdGQ6Om1ha2VfdW5pcXVlPENvbnRlbnRzRmlsdGVyPigpOwotICAgICAgICBhdXRvIGJvZHlG
aWx0ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPENvbnRlbnRzRmlsdGVyPigpOworICAgICAgICBhdXRv
IGJvZHlCbG9iRmlsdGVyID0gc3RkOjptYWtlX3VuaXF1ZTxDb250ZW50c0ZpbHRlcj4oKTsKICAg
ICAgICAgc2l6ZV90IHJlY29yZHNTaXplID0gMDsKICAgICAgICAgdW5zaWduZWQgY291bnQgPSAw
OwotICAgICAgICB0cmF2ZXJzZVJlY29yZHNGaWxlcyhyZWNvcmRzUGF0aCgpLCBbJnJlY29yZEZp
bHRlciwgJmJvZHlGaWx0ZXIsICZyZWNvcmRzU2l6ZSwgJmNvdW50XShjb25zdCBTdHJpbmcmIGZp
bGVOYW1lLCBjb25zdCBTdHJpbmcmIHBhcnRpdGlvblBhdGgpIHsKKyAgICAgICAgSGFzaFNldDxT
dHJpbmc+IGFueVR5cGU7CisgICAgICAgIHRyYXZlcnNlUmVjb3Jkc0ZpbGVzKHJlY29yZHNQYXRo
KCksIGFueVR5cGUsIFsmcmVjb3JkRmlsdGVyLCAmYm9keUJsb2JGaWx0ZXIsICZyZWNvcmRzU2l6
ZSwgJmNvdW50XShjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBjb25zdCBTdHJpbmcmIGhhc2hTdHJp
bmcsIGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBwYXJ0aXRpb25QYXRoKSB7CiAg
ICAgICAgICAgICBhdXRvIGZpbGVQYXRoID0gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9u
ZW50KHBhcnRpdGlvblBhdGgsIGZpbGVOYW1lKTsKIAotICAgICAgICAgICAgYm9vbCBpc0JvZHkg
PSBmaWxlTmFtZS5lbmRzV2l0aChib2R5UG9zdGZpeCk7Ci0gICAgICAgICAgICBTdHJpbmcgaGFz
aFN0cmluZyA9IGlzQm9keSA/IGZpbGVOYW1lLnN1YnN0cmluZygwLCBLZXk6Omhhc2hTdHJpbmdM
ZW5ndGgoKSkgOiBmaWxlTmFtZTsKICAgICAgICAgICAgIEtleTo6SGFzaFR5cGUgaGFzaDsKICAg
ICAgICAgICAgIGlmICghS2V5OjpzdHJpbmdUb0hhc2goaGFzaFN0cmluZywgaGFzaCkpIHsKICAg
ICAgICAgICAgICAgICBXZWJDb3JlOjpkZWxldGVGaWxlKGZpbGVQYXRoKTsKQEAgLTI0NCwzMSAr
Mjg0LDM0IEBAIHZvaWQgU3RvcmFnZTo6c3luY2hyb25pemUoKQogICAgICAgICAgICAgICAgIFdl
YkNvcmU6OmRlbGV0ZUZpbGUoZmlsZVBhdGgpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpc0JvZHkpIHsKLSAgICAgICAgICAgICAgICBi
b2R5RmlsdGVyLT5hZGQoaGFzaCk7CisKKyAgICAgICAgICAgIGlmICh0eXBlLmVuZHNXaXRoKGJs
b2JTdWZmaXgpKSB7CisgICAgICAgICAgICAgICAgYm9keUJsb2JGaWx0ZXItPmFkZChoYXNoKTsK
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICByZWNv
cmRGaWx0ZXItPmFkZChoYXNoKTsKKworICAgICAgICAgICAgYXV0byByZWNvcmRGaWx0ZXJLZXkg
PSBtYWtlUmVjb3JkRmlsdGVyS2V5KGhhc2hTdHJpbmcsIHR5cGUpOworICAgICAgICAgICAgcmVj
b3JkRmlsdGVyLT5hZGQocmVjb3JkRmlsdGVyS2V5KTsKICAgICAgICAgICAgIHJlY29yZHNTaXpl
ICs9IGZpbGVTaXplOwogICAgICAgICAgICAgKytjb3VudDsKICAgICAgICAgfSk7CiAKICAgICAg
ICAgYXV0byogcmVjb3JkRmlsdGVyUHRyID0gcmVjb3JkRmlsdGVyLnJlbGVhc2UoKTsKLSAgICAg
ICAgYXV0byogYm9keUZpbHRlclB0ciA9IGJvZHlGaWx0ZXIucmVsZWFzZSgpOwotICAgICAgICBS
dW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3RoaXMsIHJlY29yZEZpbHRlclB0ciwgYm9keUZpbHRl
clB0ciwgcmVjb3Jkc1NpemVdIHsKKyAgICAgICAgYXV0byogYm9keUJsb2JGaWx0ZXJQdHIgPSBi
b2R5QmxvYkZpbHRlci5yZWxlYXNlKCk7CisgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRj
aChbdGhpcywgcmVjb3JkRmlsdGVyUHRyLCBib2R5QmxvYkZpbHRlclB0ciwgcmVjb3Jkc1NpemVd
IHsKICAgICAgICAgICAgIGF1dG8gcmVjb3JkRmlsdGVyID0gc3RkOjp1bmlxdWVfcHRyPENvbnRl
bnRzRmlsdGVyPihyZWNvcmRGaWx0ZXJQdHIpOwotICAgICAgICAgICAgYXV0byBib2R5RmlsdGVy
ID0gc3RkOjp1bmlxdWVfcHRyPENvbnRlbnRzRmlsdGVyPihib2R5RmlsdGVyUHRyKTsKKyAgICAg
ICAgICAgIGF1dG8gYm9keUJsb2JGaWx0ZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8Q29udGVudHNGaWx0
ZXI+KGJvZHlCbG9iRmlsdGVyUHRyKTsKIAotICAgICAgICAgICAgZm9yIChhdXRvJiBoYXNoIDog
bV9yZWNvcmRGaWx0ZXJIYXNoZXNBZGRlZER1cmluZ1N5bmNocm9uaXphdGlvbikKLSAgICAgICAg
ICAgICAgICByZWNvcmRGaWx0ZXItPmFkZChoYXNoKTsKKyAgICAgICAgICAgIGZvciAoYXV0byYg
cmVjb3JkRmlsdGVyS2V5IDogbV9yZWNvcmRGaWx0ZXJIYXNoZXNBZGRlZER1cmluZ1N5bmNocm9u
aXphdGlvbikKKyAgICAgICAgICAgICAgICByZWNvcmRGaWx0ZXItPmFkZChyZWNvcmRGaWx0ZXJL
ZXkpOwogICAgICAgICAgICAgbV9yZWNvcmRGaWx0ZXJIYXNoZXNBZGRlZER1cmluZ1N5bmNocm9u
aXphdGlvbi5jbGVhcigpOwogCi0gICAgICAgICAgICBmb3IgKGF1dG8mIGhhc2ggOiBtX2JvZHlG
aWx0ZXJIYXNoZXNBZGRlZER1cmluZ1N5bmNocm9uaXphdGlvbikKLSAgICAgICAgICAgICAgICBi
b2R5RmlsdGVyLT5hZGQoaGFzaCk7Ci0gICAgICAgICAgICBtX2JvZHlGaWx0ZXJIYXNoZXNBZGRl
ZER1cmluZ1N5bmNocm9uaXphdGlvbi5jbGVhcigpOworICAgICAgICAgICAgZm9yIChhdXRvJiBo
YXNoIDogbV9ib2R5QmxvYkZpbHRlckhhc2hlc0FkZGVkRHVyaW5nU3luY2hyb25pemF0aW9uKQor
ICAgICAgICAgICAgICAgIGJvZHlCbG9iRmlsdGVyLT5hZGQoaGFzaCk7CisgICAgICAgICAgICBt
X2JvZHlCbG9iRmlsdGVySGFzaGVzQWRkZWREdXJpbmdTeW5jaHJvbml6YXRpb24uY2xlYXIoKTsK
IAogICAgICAgICAgICAgbV9yZWNvcmRGaWx0ZXIgPSBXVEY6Om1vdmUocmVjb3JkRmlsdGVyKTsK
LSAgICAgICAgICAgIG1fYm9keUZpbHRlciA9IFdURjo6bW92ZShib2R5RmlsdGVyKTsKKyAgICAg
ICAgICAgIG1fYm9keUJsb2JGaWx0ZXIgPSBXVEY6Om1vdmUoYm9keUJsb2JGaWx0ZXIpOwogICAg
ICAgICAgICAgbV9hcHByb3hpbWF0ZVJlY29yZHNTaXplID0gcmVjb3Jkc1NpemU7CiAgICAgICAg
ICAgICBtX3N5bmNocm9uaXphdGlvbkluUHJvZ3Jlc3MgPSBmYWxzZTsKICAgICAgICAgfSk7CkBA
IC0yNzcsNTIgKzMyMCw2NiBAQCB2b2lkIFN0b3JhZ2U6OnN5bmNocm9uaXplKCkKIAogICAgICAg
ICBkZWxldGVFbXB0eVJlY29yZHNEaXJlY3RvcmllcyhyZWNvcmRzUGF0aCgpKTsKIAotICAgICAg
ICBMT0coTmV0d29ya0NhY2hlU3RvcmFnZSwgIihOZXR3b3JrUHJvY2VzcykgY2FjaGUgc3luY2hy
b25pemF0aW9uIGNvbXBsZXRlZCBzaXplPSV6dSBjb3VudD0lZCIsIHJlY29yZHNTaXplLCBjb3Vu
dCk7CisgICAgICAgIExPRyhOZXR3b3JrQ2FjaGVTdG9yYWdlLCAiKE5ldHdvcmtQcm9jZXNzKSBj
YWNoZSBzeW5jaHJvbml6YXRpb24gY29tcGxldGVkIHNpemU9JXp1IGNvdW50PSV1IiwgcmVjb3Jk
c1NpemUsIGNvdW50KTsKICAgICB9KTsKIH0KIAotdm9pZCBTdG9yYWdlOjphZGRUb1JlY29yZEZp
bHRlcihjb25zdCBLZXkmIGtleSkKK3ZvaWQgU3RvcmFnZTo6YWRkVG9SZWNvcmRGaWx0ZXIoY29u
c3QgS2V5JiBrZXksIGNvbnN0IFN0cmluZyYgdHlwZSkKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6
aXNNYWluKCkpOworICAgIEFTU0VSVCghdHlwZS5lbmRzV2l0aChibG9iU3VmZml4KSk7CiAKKyAg
ICBhdXRvIHJlY29yZEZpbHRlcktleSA9IG1ha2VSZWNvcmRGaWx0ZXJLZXkoa2V5Lmhhc2hBc1N0
cmluZygpLCB0eXBlKTsKICAgICBpZiAobV9yZWNvcmRGaWx0ZXIpCi0gICAgICAgIG1fcmVjb3Jk
RmlsdGVyLT5hZGQoa2V5Lmhhc2goKSk7CisgICAgICAgIG1fcmVjb3JkRmlsdGVyLT5hZGQocmVj
b3JkRmlsdGVyS2V5KTsKIAogICAgIC8vIElmIHdlIGdldCBuZXcgZW50cmllcyBkdXJpbmcgZmls
dGVyIHN5bmNocm9uaXphdGlvbiB0YWtlIGNhcmUgdG8gYWRkIHRoZW0gdG8gdGhlIG5ldyBmaWx0
ZXIgYXMgd2VsbC4KICAgICBpZiAobV9zeW5jaHJvbml6YXRpb25JblByb2dyZXNzKQotICAgICAg
ICBtX3JlY29yZEZpbHRlckhhc2hlc0FkZGVkRHVyaW5nU3luY2hyb25pemF0aW9uLmFwcGVuZChr
ZXkuaGFzaCgpKTsKKyAgICAgICAgbV9yZWNvcmRGaWx0ZXJIYXNoZXNBZGRlZER1cmluZ1N5bmNo
cm9uaXphdGlvbi5hcHBlbmQocmVjb3JkRmlsdGVyS2V5KTsKIH0KIAotYm9vbCBTdG9yYWdlOjpt
YXlDb250YWluKGNvbnN0IEtleSYga2V5KSBjb25zdAorYm9vbCBTdG9yYWdlOjptYXlDb250YWlu
KGNvbnN0IEtleSYga2V5LCBjb25zdCBTdHJpbmcmIHR5cGUpIGNvbnN0CiB7CiAgICAgQVNTRVJU
KFJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICByZXR1cm4gIW1fcmVjb3JkRmlsdGVyIHx8IG1fcmVj
b3JkRmlsdGVyLT5tYXlDb250YWluKGtleS5oYXNoKCkpOworICAgIEFTU0VSVCghdHlwZS5lbmRz
V2l0aChibG9iU3VmZml4KSk7CisgICAgaWYgKCFtX3JlY29yZEZpbHRlcikKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICBhdXRvIGZpbHRlcktleSA9IG1ha2VSZWNvcmRGaWx0ZXJLZXkoa2V5
Lmhhc2hBc1N0cmluZygpLCB0eXBlKTsKKyAgICByZXR1cm4gbV9yZWNvcmRGaWx0ZXItPm1heUNv
bnRhaW4oZmlsdGVyS2V5KTsKIH0KIAotU3RyaW5nIFN0b3JhZ2U6OnBhcnRpdGlvblBhdGhGb3JL
ZXkoY29uc3QgS2V5JiBrZXkpIGNvbnN0Citib29sIFN0b3JhZ2U6Om1heUNvbnRhaW5CbG9iKGNv
bnN0IEtleSYga2V5LCBjb25zdCBTdHJpbmcmIHR5cGUpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKCFr
ZXkucGFydGl0aW9uKCkuaXNFbXB0eSgpKTsKLSAgICByZXR1cm4gV2ViQ29yZTo6cGF0aEJ5QXBw
ZW5kaW5nQ29tcG9uZW50KHJlY29yZHNQYXRoKCksIGtleS5wYXJ0aXRpb24oKSk7CisgICAgQVNT
RVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBBU1NFUlQoIXR5cGUuZW5kc1dpdGgoYmxvYlN1
ZmZpeCkpOworCisgICAgaWYgKCF0eXBlVXNlc0Jsb2JTdG9yYWdlKHR5cGUpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gIW1fYm9keUJsb2JGaWx0ZXIgfHwgbV9ib2R5Qmxv
YkZpbHRlci0+bWF5Q29udGFpbihrZXkuaGFzaCgpKTsKIH0KIAotc3RhdGljIFN0cmluZyBmaWxl
TmFtZUZvcktleShjb25zdCBLZXkmIGtleSkKK1N0cmluZyBTdG9yYWdlOjpwYXJ0aXRpb25QYXRo
Rm9yS2V5KGNvbnN0IEtleSYga2V5KSBjb25zdAogewotICAgIHJldHVybiBrZXkuaGFzaEFzU3Ry
aW5nKCk7CisgICAgQVNTRVJUKCFrZXkucGFydGl0aW9uKCkuaXNFbXB0eSgpKTsKKyAgICByZXR1
cm4gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHJlY29yZHNQYXRoKCksIGtleS5w
YXJ0aXRpb24oKSk7CiB9CiAKLVN0cmluZyBTdG9yYWdlOjpyZWNvcmRQYXRoRm9yS2V5KGNvbnN0
IEtleSYga2V5KSBjb25zdAorU3RyaW5nIFN0b3JhZ2U6OnJlY29yZFBhdGhGb3JLZXkoY29uc3Qg
S2V5JiBrZXksIGNvbnN0IFN0cmluZyYgdHlwZSkgY29uc3QKIHsKLSAgICByZXR1cm4gV2ViQ29y
ZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHBhcnRpdGlvblBhdGhGb3JLZXkoa2V5KSwgZmls
ZU5hbWVGb3JLZXkoa2V5KSk7CisgICAgcmV0dXJuIFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0Nv
bXBvbmVudChwYXJ0aXRpb25QYXRoRm9yS2V5KGtleSksIGtleS5oYXNoQXNTdHJpbmcoKSArICct
JyArIHR5cGUpOwogfQogCi1zdGF0aWMgU3RyaW5nIGJvZHlQYXRoRm9yUmVjb3JkUGF0aChjb25z
dCBTdHJpbmcmIHJlY29yZFBhdGgpCitzdGF0aWMgU3RyaW5nIGJvZHlCbG9iUGF0aEZvclJlY29y
ZFBhdGgoY29uc3QgU3RyaW5nJiByZWNvcmRQYXRoKQogewotICAgIHJldHVybiByZWNvcmRQYXRo
ICsgYm9keVBvc3RmaXg7CisgICAgcmV0dXJuIHJlY29yZFBhdGggKyBibG9iU3VmZml4OwogfQog
Ci1TdHJpbmcgU3RvcmFnZTo6Ym9keVBhdGhGb3JLZXkoY29uc3QgS2V5JiBrZXkpIGNvbnN0CitT
dHJpbmcgU3RvcmFnZTo6Ym9keUJsb2JQYXRoRm9yS2V5KGNvbnN0IEtleSYga2V5LCBjb25zdCBT
dHJpbmcmIHR5cGUpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGJvZHlQYXRoRm9yUmVjb3JkUGF0aChy
ZWNvcmRQYXRoRm9yS2V5KGtleSkpOworICAgIEFTU0VSVCh0eXBlVXNlc0Jsb2JTdG9yYWdlKHR5
cGUpKTsKKyAgICByZXR1cm4gYm9keUJsb2JQYXRoRm9yUmVjb3JkUGF0aChyZWNvcmRQYXRoRm9y
S2V5KGtleSwgdHlwZSkpOwogfQogCiBzdHJ1Y3QgUmVjb3JkTWV0YURhdGEgewpAQCAtNDAwLDYg
KzQ1NywyNCBAQCB2b2lkIFN0b3JhZ2U6OnJlYWRSZWNvcmQoUmVhZE9wZXJhdGlvbiYgcmVhZE9w
ZXJhdGlvbiwgY29uc3QgRGF0YSYgcmVjb3JkRGF0YSkKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6
OmlzTWFpbigpKTsKIAorICAgIGlmICh0eXBlVXNlc0hlYWRlcihyZWFkT3BlcmF0aW9uLnR5cGUp
KSB7CisgICAgICAgIHJlYWRSZWNvcmRXaXRoSGVhZGVyKHJlYWRPcGVyYXRpb24sIHJlY29yZERh
dGEpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byByZWNvcmRQYXRoID0gcmVj
b3JkUGF0aEZvcktleShyZWFkT3BlcmF0aW9uLmtleSwgcmVhZE9wZXJhdGlvbi50eXBlKTsKKyAg
ICByZWFkT3BlcmF0aW9uLnJlc3VsdFJlY29yZCA9IHN0ZDo6bWFrZV91bmlxdWU8U3RvcmFnZTo6
UmVjb3JkPihTdG9yYWdlOjpSZWNvcmQgeworICAgICAgICByZWFkT3BlcmF0aW9uLmtleSwKKyAg
ICAgICAgZmlsZVRpbWVzKHJlY29yZFBhdGgpLm1vZGlmaWNhdGlvbiwKKyAgICAgICAgeyB9LCAv
LyBObyBoZWFkZXIuCisgICAgICAgIHJlY29yZERhdGEKKyAgICB9KTsKK30KKwordm9pZCBTdG9y
YWdlOjpyZWFkUmVjb3JkV2l0aEhlYWRlcihSZWFkT3BlcmF0aW9uJiByZWFkT3BlcmF0aW9uLCBj
b25zdCBEYXRhJiByZWNvcmREYXRhKQoreworICAgIEFTU0VSVCh0eXBlVXNlc0hlYWRlcihyZWFk
T3BlcmF0aW9uLnR5cGUpKTsKKwogICAgIFJlY29yZE1ldGFEYXRhIG1ldGFEYXRhOwogICAgIERh
dGEgaGVhZGVyRGF0YTsKICAgICBpZiAoIWRlY29kZVJlY29yZEhlYWRlcihyZWNvcmREYXRhLCBt
ZXRhRGF0YSwgaGVhZGVyRGF0YSkpCkBAIC00NTIsMjAgKzUyNywyMiBAQCBzdGF0aWMgRGF0YSBl
bmNvZGVSZWNvcmRNZXRhRGF0YShjb25zdCBSZWNvcmRNZXRhRGF0YSYgbWV0YURhdGEpCiAKIE9w
dGlvbmFsPEJsb2JTdG9yYWdlOjpCbG9iPiBTdG9yYWdlOjpzdG9yZUJvZHlBc0Jsb2IoV3JpdGVP
cGVyYXRpb24mIHdyaXRlT3BlcmF0aW9uKQogewotICAgIGF1dG8gYm9keVBhdGggPSBib2R5UGF0
aEZvcktleSh3cml0ZU9wZXJhdGlvbi5yZWNvcmQua2V5KTsKKyAgICBBU1NFUlQodHlwZVVzZXNC
bG9iU3RvcmFnZSh3cml0ZU9wZXJhdGlvbi50eXBlKSk7CisKKyAgICBhdXRvIGJvZHlCbG9iUGF0
aCA9IGJvZHlCbG9iUGF0aEZvcktleSh3cml0ZU9wZXJhdGlvbi5yZWNvcmQua2V5LCB3cml0ZU9w
ZXJhdGlvbi50eXBlKTsKIAogICAgIC8vIFN0b3JlIHRoZSBib2R5LgotICAgIGF1dG8gYmxvYiA9
IG1fYmxvYlN0b3JhZ2UuYWRkKGJvZHlQYXRoLCB3cml0ZU9wZXJhdGlvbi5yZWNvcmQuYm9keSk7
CisgICAgYXV0byBibG9iID0gbV9ibG9iU3RvcmFnZS5hZGQoYm9keUJsb2JQYXRoLCB3cml0ZU9w
ZXJhdGlvbi5yZWNvcmQuYm9keSk7CiAgICAgaWYgKGJsb2IuZGF0YS5pc051bGwoKSkKICAgICAg
ICAgcmV0dXJuIHsgfTsKIAogICAgICsrd3JpdGVPcGVyYXRpb24uYWN0aXZlQ291bnQ7CiAKICAg
ICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3RoaXMsIGJsb2IsICZ3cml0ZU9wZXJhdGlvbl0g
ewotICAgICAgICBpZiAobV9ib2R5RmlsdGVyKQotICAgICAgICAgICAgbV9ib2R5RmlsdGVyLT5h
ZGQod3JpdGVPcGVyYXRpb24ucmVjb3JkLmtleS5oYXNoKCkpOworICAgICAgICBpZiAobV9ib2R5
QmxvYkZpbHRlcikKKyAgICAgICAgICAgIG1fYm9keUJsb2JGaWx0ZXItPmFkZCh3cml0ZU9wZXJh
dGlvbi5yZWNvcmQua2V5Lmhhc2goKSk7CiAgICAgICAgIGlmIChtX3N5bmNocm9uaXphdGlvbklu
UHJvZ3Jlc3MpCi0gICAgICAgICAgICBtX2JvZHlGaWx0ZXJIYXNoZXNBZGRlZER1cmluZ1N5bmNo
cm9uaXphdGlvbi5hcHBlbmQod3JpdGVPcGVyYXRpb24ucmVjb3JkLmtleS5oYXNoKCkpOworICAg
ICAgICAgICAgbV9ib2R5QmxvYkZpbHRlckhhc2hlc0FkZGVkRHVyaW5nU3luY2hyb25pemF0aW9u
LmFwcGVuZCh3cml0ZU9wZXJhdGlvbi5yZWNvcmQua2V5Lmhhc2goKSk7CiAKICAgICAgICAgaWYg
KHdyaXRlT3BlcmF0aW9uLm1hcHBlZEJvZHlIYW5kbGVyKQogICAgICAgICAgICAgd3JpdGVPcGVy
YXRpb24ubWFwcGVkQm9keUhhbmRsZXIoYmxvYi5kYXRhKTsKQEAgLTQ3Nyw2ICs1NTQsMTEgQEAg
T3B0aW9uYWw8QmxvYlN0b3JhZ2U6OkJsb2I+IFN0b3JhZ2U6OnN0b3JlQm9keUFzQmxvYihXcml0
ZU9wZXJhdGlvbiYgd3JpdGVPcGVyYXQKIAogRGF0YSBTdG9yYWdlOjplbmNvZGVSZWNvcmQoY29u
c3QgUmVjb3JkJiByZWNvcmQsIE9wdGlvbmFsPEJsb2JTdG9yYWdlOjpCbG9iPiBibG9iKQogewor
ICAgIHJldHVybiByZWNvcmQuaGVhZGVyLmlzTnVsbCgpID8gcmVjb3JkLmJvZHkgOiBlbmNvZGVS
ZWNvcmRXaXRoSGVhZGVyKHJlY29yZCwgYmxvYik7Cit9CisKK0RhdGEgU3RvcmFnZTo6ZW5jb2Rl
UmVjb3JkV2l0aEhlYWRlcihjb25zdCBSZWNvcmQmIHJlY29yZCwgT3B0aW9uYWw8QmxvYlN0b3Jh
Z2U6OkJsb2I+IGJsb2IpCit7CiAgICAgQVNTRVJUKCFibG9iIHx8IGJ5dGVzRXF1YWwoYmxvYi52
YWx1ZSgpLmRhdGEsIHJlY29yZC5ib2R5KSk7CiAKICAgICBSZWNvcmRNZXRhRGF0YSBtZXRhRGF0
YShyZWNvcmQua2V5KTsKQEAgLTQ5NiwxMSArNTc4LDExIEBAIERhdGEgU3RvcmFnZTo6ZW5jb2Rl
UmVjb3JkKGNvbnN0IFJlY29yZCYgcmVjb3JkLCBPcHRpb25hbDxCbG9iU3RvcmFnZTo6QmxvYj4g
YmxvCiAgICAgcmV0dXJuIHsgaGVhZGVyRGF0YSB9OwogfQogCi1ib29sIFN0b3JhZ2U6OnJlbW92
ZUZyb21QZW5kaW5nV3JpdGVPcGVyYXRpb25zKGNvbnN0IEtleSYga2V5KQorYm9vbCBTdG9yYWdl
OjpyZW1vdmVGcm9tUGVuZGluZ1dyaXRlT3BlcmF0aW9ucyhjb25zdCBLZXkmIGtleSwgY29uc3Qg
U3RyaW5nJiB0eXBlKQogewogICAgIGF1dG8gZW5kID0gbV9wZW5kaW5nV3JpdGVPcGVyYXRpb25z
LmVuZCgpOwogICAgIGZvciAoYXV0byBpdCA9IG1fcGVuZGluZ1dyaXRlT3BlcmF0aW9ucy5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKCgqaXQpLT5yZWNvcmQua2V5ID09
IGtleSkgeworICAgICAgICBpZiAoKCppdCktPnJlY29yZC5rZXkgPT0ga2V5ICYmICgqaXQpLT50
eXBlID09IHR5cGUpIHsKICAgICAgICAgICAgIG1fcGVuZGluZ1dyaXRlT3BlcmF0aW9ucy5yZW1v
dmUoaXQpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTUwOCwyMiAr
NTkwLDI3IEBAIGJvb2wgU3RvcmFnZTo6cmVtb3ZlRnJvbVBlbmRpbmdXcml0ZU9wZXJhdGlvbnMo
Y29uc3QgS2V5JiBrZXkpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFN0b3JhZ2U6OnJl
bW92ZShjb25zdCBLZXkmIGtleSkKK3ZvaWQgU3RvcmFnZTo6cmVtb3ZlKGNvbnN0IEtleSYga2V5
LCBjb25zdCBTdHJpbmcmIHR5cGUpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsK
KyAgICBBU1NFUlQoIWtleS5pc051bGwoKSk7CisgICAgQVNTRVJUKCF0eXBlLmlzTnVsbCgpKTsK
IAotICAgIGlmICghbWF5Q29udGFpbihrZXkpKQorICAgIGlmICghbWF5Q29udGFpbihrZXksIHR5
cGUpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBXZSBjYW4ndCByZW1vdmUgdGhlIGtleSBm
cm9tIHRoZSBCbG9vbSBmaWx0ZXIgKGJ1dCBzb21lIGZhbHNlIHBvc2l0aXZlcyBhcmUgZXhwZWN0
ZWQgYW55d2F5KS4KICAgICAvLyBGb3Igc2ltcGxpY2l0eSB3ZSBhbHNvIGRvbid0IHJlZHVjZSBt
X2FwcHJveGltYXRlU2l6ZSBvbiByZW1vdmFscy4KICAgICAvLyBUaGUgbmV4dCBzeW5jaHJvbml6
YXRpb24gd2lsbCB1cGRhdGUgZXZlcnl0aGluZy4KIAotICAgIHJlbW92ZUZyb21QZW5kaW5nV3Jp
dGVPcGVyYXRpb25zKGtleSk7CisgICAgcmVtb3ZlRnJvbVBlbmRpbmdXcml0ZU9wZXJhdGlvbnMo
a2V5LCB0eXBlKTsKIAotICAgIHNlcmlhbEJhY2tncm91bmRJT1F1ZXVlKCkuZGlzcGF0Y2goW3Ro
aXMsIGtleV0gewotICAgICAgICBXZWJDb3JlOjpkZWxldGVGaWxlKHJlY29yZFBhdGhGb3JLZXko
a2V5KSk7Ci0gICAgICAgIG1fYmxvYlN0b3JhZ2UucmVtb3ZlKGJvZHlQYXRoRm9yS2V5KGtleSkp
OworICAgIFN0cmluZ0NhcHR1cmUgdHlwZUNhcHR1cmUodHlwZSk7CisgICAgc2VyaWFsQmFja2dy
b3VuZElPUXVldWUoKS5kaXNwYXRjaChbdGhpcywga2V5LCB0eXBlQ2FwdHVyZV0geworICAgICAg
ICBXZWJDb3JlOjpkZWxldGVGaWxlKHJlY29yZFBhdGhGb3JLZXkoa2V5LCB0eXBlQ2FwdHVyZS5z
dHJpbmcoKSkpOworICAgICAgICAvLyBBc3NvY2lhdGVkIGJsb2IgbGlua3MgbmVlZCB0byBiZSBy
ZW1vdmVkIGFzIHdlbGwuCisgICAgICAgIGlmICh0eXBlVXNlc0Jsb2JTdG9yYWdlKHR5cGVDYXB0
dXJlLnN0cmluZygpKSkKKyAgICAgICAgICAgIG1fYmxvYlN0b3JhZ2UucmVtb3ZlKGJvZHlCbG9i
UGF0aEZvcktleShrZXksIHR5cGVDYXB0dXJlLnN0cmluZygpKSk7CiAgICAgfSk7CiB9CiAKQEAg
LTU0NiwxMCArNjMzLDEwIEBAIHZvaWQgU3RvcmFnZTo6ZGlzcGF0Y2hSZWFkT3BlcmF0aW9uKHN0
ZDo6dW5pcXVlX3B0cjxSZWFkT3BlcmF0aW9uPiByZWFkT3BlcmF0aW9uCiAgICAgY29uc3QgYXV0
byByZWFkVGltZW91dCA9IDE1MDBfbXM7CiAgICAgbV9yZWFkT3BlcmF0aW9uVGltZW91dFRpbWVy
LnN0YXJ0T25lU2hvdChyZWFkVGltZW91dCk7CiAKLSAgICBib29sIHNob3VsZEdldEJvZHlCbG9i
ID0gIW1fYm9keUZpbHRlciB8fCBtX2JvZHlGaWx0ZXItPm1heUNvbnRhaW4ocmVhZE9wZXJhdGlv
bi5rZXkuaGFzaCgpKTsKKyAgICBib29sIHNob3VsZEdldEJvZHlCbG9iID0gbWF5Q29udGFpbkJs
b2IocmVhZE9wZXJhdGlvbi5rZXksIHJlYWRPcGVyYXRpb24udHlwZSk7CiAKICAgICBpb1F1ZXVl
KCkuZGlzcGF0Y2goW3RoaXMsICZyZWFkT3BlcmF0aW9uLCBzaG91bGRHZXRCb2R5QmxvYl0gewot
ICAgICAgICBhdXRvIHJlY29yZFBhdGggPSByZWNvcmRQYXRoRm9yS2V5KHJlYWRPcGVyYXRpb24u
a2V5KTsKKyAgICAgICAgYXV0byByZWNvcmRQYXRoID0gcmVjb3JkUGF0aEZvcktleShyZWFkT3Bl
cmF0aW9uLmtleSwgcmVhZE9wZXJhdGlvbi50eXBlKTsKIAogICAgICAgICArK3JlYWRPcGVyYXRp
b24uYWN0aXZlQ291bnQ7CiAgICAgICAgIGlmIChzaG91bGRHZXRCb2R5QmxvYikKQEAgLTU2NCw4
ICs2NTEsOCBAQCB2b2lkIFN0b3JhZ2U6OmRpc3BhdGNoUmVhZE9wZXJhdGlvbihzdGQ6OnVuaXF1
ZV9wdHI8UmVhZE9wZXJhdGlvbj4gcmVhZE9wZXJhdGlvbgogCiAgICAgICAgIGlmIChzaG91bGRH
ZXRCb2R5QmxvYikgewogICAgICAgICAgICAgLy8gUmVhZCB0aGUgYm9keSBibG9iIGluIHBhcmFs
bGVsIHdpdGggdGhlIHJlY29yZCByZWFkLgotICAgICAgICAgICAgYXV0byBib2R5UGF0aCA9IGJv
ZHlQYXRoRm9yS2V5KHJlYWRPcGVyYXRpb24ua2V5KTsKLSAgICAgICAgICAgIHJlYWRPcGVyYXRp
b24ucmVzdWx0Qm9keUJsb2IgPSBtX2Jsb2JTdG9yYWdlLmdldChib2R5UGF0aCk7CisgICAgICAg
ICAgICBhdXRvIGJvZHlCbG9iUGF0aCA9IGJvZHlCbG9iUGF0aEZvcktleShyZWFkT3BlcmF0aW9u
LmtleSwgcmVhZE9wZXJhdGlvbi50eXBlKTsKKyAgICAgICAgICAgIHJlYWRPcGVyYXRpb24ucmVz
dWx0Qm9keUJsb2IgPSBtX2Jsb2JTdG9yYWdlLmdldChib2R5QmxvYlBhdGgpOwogICAgICAgICAg
ICAgZmluaXNoUmVhZE9wZXJhdGlvbihyZWFkT3BlcmF0aW9uKTsKICAgICAgICAgfQogICAgIH0p
OwpAQCAtNTgxLDkgKzY2OCw5IEBAIHZvaWQgU3RvcmFnZTo6ZmluaXNoUmVhZE9wZXJhdGlvbihS
ZWFkT3BlcmF0aW9uJiByZWFkT3BlcmF0aW9uKQogICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRj
aChbdGhpcywgJnJlYWRPcGVyYXRpb25dIHsKICAgICAgICAgYm9vbCBzdWNjZXNzID0gcmVhZE9w
ZXJhdGlvbi5maW5pc2goKTsKICAgICAgICAgaWYgKHN1Y2Nlc3MpCi0gICAgICAgICAgICB1cGRh
dGVGaWxlTW9kaWZpY2F0aW9uVGltZShyZWNvcmRQYXRoRm9yS2V5KHJlYWRPcGVyYXRpb24ua2V5
KSk7CisgICAgICAgICAgICB1cGRhdGVGaWxlTW9kaWZpY2F0aW9uVGltZShyZWNvcmRQYXRoRm9y
S2V5KHJlYWRPcGVyYXRpb24ua2V5LCByZWFkT3BlcmF0aW9uLnR5cGUpKTsKICAgICAgICAgZWxz
ZSBpZiAoIXJlYWRPcGVyYXRpb24uaXNDYW5jZWxlZCkKLSAgICAgICAgICAgIHJlbW92ZShyZWFk
T3BlcmF0aW9uLmtleSk7CisgICAgICAgICAgICByZW1vdmUocmVhZE9wZXJhdGlvbi5rZXksIHJl
YWRPcGVyYXRpb24udHlwZSk7CiAKICAgICAgICAgQVNTRVJUKG1fYWN0aXZlUmVhZE9wZXJhdGlv
bnMuY29udGFpbnMoJnJlYWRPcGVyYXRpb24pKTsKICAgICAgICAgbV9hY3RpdmVSZWFkT3BlcmF0
aW9ucy5yZW1vdmUoJnJlYWRPcGVyYXRpb24pOwpAQCAtNjM0LDEwICs3MjEsMTAgQEAgdm9pZCBT
dG9yYWdlOjpkaXNwYXRjaFBlbmRpbmdSZWFkT3BlcmF0aW9ucygpCiAgICAgfQogfQogCi10ZW1w
bGF0ZSA8Y2xhc3MgVD4gYm9vbCByZXRyaWV2ZUZyb21NZW1vcnkoY29uc3QgVCYgb3BlcmF0aW9u
cywgY29uc3QgS2V5JiBrZXksIFN0b3JhZ2U6OlJldHJpZXZlQ29tcGxldGlvbkhhbmRsZXImIGNv
bXBsZXRpb25IYW5kbGVyKQordGVtcGxhdGUgPGNsYXNzIFQ+IGJvb2wgcmV0cmlldmVGcm9tTWVt
b3J5KGNvbnN0IFQmIG9wZXJhdGlvbnMsIGNvbnN0IEtleSYga2V5LCBjb25zdCBTdHJpbmcmIHR5
cGUsIFN0b3JhZ2U6OlJldHJpZXZlQ29tcGxldGlvbkhhbmRsZXImIGNvbXBsZXRpb25IYW5kbGVy
KQogewogICAgIGZvciAoYXV0byYgb3BlcmF0aW9uIDogb3BlcmF0aW9ucykgewotICAgICAgICBp
ZiAob3BlcmF0aW9uLT5yZWNvcmQua2V5ID09IGtleSkgeworICAgICAgICBpZiAob3BlcmF0aW9u
LT5yZWNvcmQua2V5ID09IGtleSAmJiBvcGVyYXRpb24tPnR5cGUgPT0gdHlwZSkgewogICAgICAg
ICAgICAgTE9HKE5ldHdvcmtDYWNoZVN0b3JhZ2UsICIoTmV0d29ya1Byb2Nlc3MpIGZvdW5kIHdy
aXRlIG9wZXJhdGlvbiBpbiBwcm9ncmVzcyIpOwogICAgICAgICAgICAgYXV0byByZWNvcmQgPSBv
cGVyYXRpb24tPnJlY29yZDsKICAgICAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChb
cmVjb3JkLCBjb21wbGV0aW9uSGFuZGxlcl0gewpAQCAtNjY0LDEwICs3NTEsMTAgQEAgdm9pZCBT
dG9yYWdlOjpkaXNwYXRjaFBlbmRpbmdXcml0ZU9wZXJhdGlvbnMoKQogICAgIH0KIH0KIAotc3Rh
dGljIGJvb2wgc2hvdWxkU3RvcmVCb2R5QXNCbG9iKGNvbnN0IERhdGEmIGJvZHlEYXRhKQorc3Rh
dGljIGJvb2wgc2hvdWxkU3RvcmVCb2R5QXNCbG9iKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3Qg
RGF0YSYgYm9keSkKIHsKICAgICBjb25zdCBzaXplX3QgbWF4aW11bUlubGluZUJvZHlTaXplIHsg
MTYgKiAxMDI0IH07Ci0gICAgcmV0dXJuIGJvZHlEYXRhLnNpemUoKSA+IG1heGltdW1JbmxpbmVC
b2R5U2l6ZTsKKyAgICByZXR1cm4gdHlwZVVzZXNCbG9iU3RvcmFnZSh0eXBlKSAmJiBib2R5LnNp
emUoKSA+IG1heGltdW1JbmxpbmVCb2R5U2l6ZTsKIH0KIAogdm9pZCBTdG9yYWdlOjpkaXNwYXRj
aFdyaXRlT3BlcmF0aW9uKHN0ZDo6dW5pcXVlX3B0cjxXcml0ZU9wZXJhdGlvbj4gd3JpdGVPcGVy
YXRpb25QdHIpCkBAIC02NzgsMTcgKzc2NSwxNyBAQCB2b2lkIFN0b3JhZ2U6OmRpc3BhdGNoV3Jp
dGVPcGVyYXRpb24oc3RkOjp1bmlxdWVfcHRyPFdyaXRlT3BlcmF0aW9uPiB3cml0ZU9wZXJhdAog
ICAgIG1fYWN0aXZlV3JpdGVPcGVyYXRpb25zLmFkZChXVEY6Om1vdmUod3JpdGVPcGVyYXRpb25Q
dHIpKTsKIAogICAgIC8vIFRoaXMgd2FzIGFkZGVkIGFscmVhZHkgd2hlbiBzdGFydGluZyB0aGUg
c3RvcmUgYnV0IGZpbHRlciBtaWdodCBoYXZlIGJlZW4gd2lwZWQuCi0gICAgYWRkVG9SZWNvcmRG
aWx0ZXIod3JpdGVPcGVyYXRpb24ucmVjb3JkLmtleSk7CisgICAgYWRkVG9SZWNvcmRGaWx0ZXIo
d3JpdGVPcGVyYXRpb24ucmVjb3JkLmtleSwgd3JpdGVPcGVyYXRpb24udHlwZSk7CiAKICAgICBi
YWNrZ3JvdW5kSU9RdWV1ZSgpLmRpc3BhdGNoKFt0aGlzLCAmd3JpdGVPcGVyYXRpb25dIHsKICAg
ICAgICAgYXV0byBwYXJ0aXRpb25QYXRoID0gcGFydGl0aW9uUGF0aEZvcktleSh3cml0ZU9wZXJh
dGlvbi5yZWNvcmQua2V5KTsKLSAgICAgICAgYXV0byByZWNvcmRQYXRoID0gcmVjb3JkUGF0aEZv
cktleSh3cml0ZU9wZXJhdGlvbi5yZWNvcmQua2V5KTsKKyAgICAgICAgYXV0byByZWNvcmRQYXRo
ID0gcmVjb3JkUGF0aEZvcktleSh3cml0ZU9wZXJhdGlvbi5yZWNvcmQua2V5LCB3cml0ZU9wZXJh
dGlvbi50eXBlKTsKIAogICAgICAgICBXZWJDb3JlOjptYWtlQWxsRGlyZWN0b3JpZXMocGFydGl0
aW9uUGF0aCk7CiAKICAgICAgICAgKyt3cml0ZU9wZXJhdGlvbi5hY3RpdmVDb3VudDsKIAotICAg
ICAgICBib29sIHNob3VsZFN0b3JlQXNCbG9iID0gc2hvdWxkU3RvcmVCb2R5QXNCbG9iKHdyaXRl
T3BlcmF0aW9uLnJlY29yZC5ib2R5KTsKKyAgICAgICAgYm9vbCBzaG91bGRTdG9yZUFzQmxvYiA9
IHNob3VsZFN0b3JlQm9keUFzQmxvYih3cml0ZU9wZXJhdGlvbi50eXBlLCB3cml0ZU9wZXJhdGlv
bi5yZWNvcmQuYm9keSk7CiAgICAgICAgIGF1dG8gYm9keUJsb2IgPSBzaG91bGRTdG9yZUFzQmxv
YiA/IHN0b3JlQm9keUFzQmxvYih3cml0ZU9wZXJhdGlvbikgOiBOdWxsb3B0OwogCiAgICAgICAg
IGF1dG8gcmVjb3JkRGF0YSA9IGVuY29kZVJlY29yZCh3cml0ZU9wZXJhdGlvbi5yZWNvcmQsIGJv
ZHlCbG9iKTsKQEAgLTcyMCwzMyArODA3LDM0IEBAIHZvaWQgU3RvcmFnZTo6ZmluaXNoV3JpdGVP
cGVyYXRpb24oV3JpdGVPcGVyYXRpb24mIHdyaXRlT3BlcmF0aW9uKQogICAgIHNocmlua0lmTmVl
ZGVkKCk7CiB9CiAKLXZvaWQgU3RvcmFnZTo6cmV0cmlldmUoY29uc3QgS2V5JiBrZXksIHVuc2ln
bmVkIHByaW9yaXR5LCBSZXRyaWV2ZUNvbXBsZXRpb25IYW5kbGVyJiYgY29tcGxldGlvbkhhbmRs
ZXIpCit2b2lkIFN0b3JhZ2U6OnJldHJpZXZlKGNvbnN0IEtleSYga2V5LCBjb25zdCBTdHJpbmcm
IHR5cGUsIHVuc2lnbmVkIHByaW9yaXR5LCBSZXRyaWV2ZUNvbXBsZXRpb25IYW5kbGVyJiYgY29t
cGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICBB
U1NFUlQocHJpb3JpdHkgPD0gbWF4aW11bVJldHJpZXZlUHJpb3JpdHkpOwogICAgIEFTU0VSVCgh
a2V5LmlzTnVsbCgpKTsKKyAgICBBU1NFUlQoIXR5cGUuaXNOdWxsKCkpOwogCiAgICAgaWYgKCFt
X2NhcGFjaXR5KSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCFtYXlDb250YWluKGtleSkpIHsKKyAgICBpZiAo
IW1heUNvbnRhaW4oa2V5LCB0eXBlKSkgewogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihudWxs
cHRyKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChyZXRyaWV2ZUZyb21NZW1v
cnkobV9wZW5kaW5nV3JpdGVPcGVyYXRpb25zLCBrZXksIGNvbXBsZXRpb25IYW5kbGVyKSkKKyAg
ICBpZiAocmV0cmlldmVGcm9tTWVtb3J5KG1fcGVuZGluZ1dyaXRlT3BlcmF0aW9ucywga2V5LCB0
eXBlLCBjb21wbGV0aW9uSGFuZGxlcikpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAocmV0cmll
dmVGcm9tTWVtb3J5KG1fYWN0aXZlV3JpdGVPcGVyYXRpb25zLCBrZXksIGNvbXBsZXRpb25IYW5k
bGVyKSkKKyAgICBpZiAocmV0cmlldmVGcm9tTWVtb3J5KG1fYWN0aXZlV3JpdGVPcGVyYXRpb25z
LCBrZXksIHR5cGUsIGNvbXBsZXRpb25IYW5kbGVyKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
YXV0byByZWFkT3BlcmF0aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxSZWFkT3BlcmF0aW9uPihrZXks
IFdURjo6bW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIGF1dG8gcmVhZE9wZXJhdGlvbiA9
IHN0ZDo6bWFrZV91bmlxdWU8UmVhZE9wZXJhdGlvbj4oa2V5LCB0eXBlLCBXVEY6Om1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKICAgICBtX3BlbmRpbmdSZWFkT3BlcmF0aW9uc0J5UHJpb3JpdHlb
cHJpb3JpdHldLnByZXBlbmQoV1RGOjptb3ZlKHJlYWRPcGVyYXRpb24pKTsKICAgICBkaXNwYXRj
aFBlbmRpbmdSZWFkT3BlcmF0aW9ucygpOwogfQogCi12b2lkIFN0b3JhZ2U6OnN0b3JlKGNvbnN0
IFJlY29yZCYgcmVjb3JkLCBNYXBwZWRCb2R5SGFuZGxlciYmIG1hcHBlZEJvZHlIYW5kbGVyKQor
dm9pZCBTdG9yYWdlOjpzdG9yZShjb25zdCBSZWNvcmQmIHJlY29yZCwgY29uc3QgU3RyaW5nJiB0
eXBlLCBNYXBwZWRCb2R5SGFuZGxlciYmIG1hcHBlZEJvZHlIYW5kbGVyKQogewogICAgIEFTU0VS
VChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgQVNTRVJUKCFyZWNvcmQua2V5LmlzTnVsbCgpKTsK
QEAgLTc1NCwxMSArODQyLDExIEBAIHZvaWQgU3RvcmFnZTo6c3RvcmUoY29uc3QgUmVjb3JkJiBy
ZWNvcmQsIE1hcHBlZEJvZHlIYW5kbGVyJiYgbWFwcGVkQm9keUhhbmRsZXIpCiAgICAgaWYgKCFt
X2NhcGFjaXR5KQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIHdyaXRlT3BlcmF0aW9uID0g
c3RkOjptYWtlX3VuaXF1ZTxXcml0ZU9wZXJhdGlvbj4ocmVjb3JkLCBXVEY6Om1vdmUobWFwcGVk
Qm9keUhhbmRsZXIpKTsKKyAgICBhdXRvIHdyaXRlT3BlcmF0aW9uID0gc3RkOjptYWtlX3VuaXF1
ZTxXcml0ZU9wZXJhdGlvbj4ocmVjb3JkLCB0eXBlLCBXVEY6Om1vdmUobWFwcGVkQm9keUhhbmRs
ZXIpKTsKICAgICBtX3BlbmRpbmdXcml0ZU9wZXJhdGlvbnMucHJlcGVuZChXVEY6Om1vdmUod3Jp
dGVPcGVyYXRpb24pKTsKIAogICAgIC8vIEFkZCBrZXkgdG8gdGhlIGZpbHRlciBhbHJlYWR5IGhl
cmUgYXMgd2UgZG8gbG9va3VwcyBmcm9tIHRoZSBwZW5kaW5nIG9wZXJhdGlvbnMgdG9vLgotICAg
IGFkZFRvUmVjb3JkRmlsdGVyKHJlY29yZC5rZXkpOworICAgIGFkZFRvUmVjb3JkRmlsdGVyKHJl
Y29yZC5rZXksIHR5cGUpOwogCiAgICAgYm9vbCBpc0luaXRpYWxXcml0ZSA9IG1fcGVuZGluZ1dy
aXRlT3BlcmF0aW9ucy5zaXplKCkgPT0gMTsKICAgICBpZiAoIWlzSW5pdGlhbFdyaXRlKQpAQCAt
NzgxLDkgKzg2OSwxMCBAQCB2b2lkIFN0b3JhZ2U6OnRyYXZlcnNlKFRyYXZlcnNlRmxhZ3MgZmxh
Z3MsIFRyYXZlcnNlSGFuZGxlciYmIHRyYXZlcnNlSGFuZGxlcikKICAgICBtX2FjdGl2ZVRyYXZl
cnNlT3BlcmF0aW9ucy5hZGQoV1RGOjptb3ZlKHRyYXZlcnNlT3BlcmF0aW9uUHRyKSk7CiAKICAg
ICBpb1F1ZXVlKCkuZGlzcGF0Y2goW3RoaXMsICZ0cmF2ZXJzZU9wZXJhdGlvbl0gewotICAgICAg
ICB0cmF2ZXJzZVJlY29yZHNGaWxlcyhyZWNvcmRzUGF0aCgpLCBbdGhpcywgJnRyYXZlcnNlT3Bl
cmF0aW9uXShjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBjb25zdCBTdHJpbmcmIHBhcnRpdGlvblBh
dGgpIHsKLSAgICAgICAgICAgIGlmIChmaWxlTmFtZS5sZW5ndGgoKSAhPSBLZXk6Omhhc2hTdHJp
bmdMZW5ndGgoKSkKLSAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIEhhc2hTZXQ8U3Ry
aW5nPiByZXNvdXJjZVR5cGVPbmx5OworICAgICAgICByZXNvdXJjZVR5cGVPbmx5LmFkZChyZXNv
dXJjZVR5cGUpOworICAgICAgICB0cmF2ZXJzZVJlY29yZHNGaWxlcyhyZWNvcmRzUGF0aCgpLCBy
ZXNvdXJjZVR5cGVPbmx5LCBbdGhpcywgJnRyYXZlcnNlT3BlcmF0aW9uXShjb25zdCBTdHJpbmcm
IGZpbGVOYW1lLCBjb25zdCBTdHJpbmcmIGhhc2hTdHJpbmcsIGNvbnN0IFN0cmluZyYgdHlwZSwg
Y29uc3QgU3RyaW5nJiBwYXJ0aXRpb25QYXRoKSB7CisgICAgICAgICAgICBBU1NFUlQodHlwZSA9
PSByZXNvdXJjZVR5cGUpOwogICAgICAgICAgICAgYXV0byByZWNvcmRQYXRoID0gV2ViQ29yZTo6
cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHBhcnRpdGlvblBhdGgsIGZpbGVOYW1lKTsKIAogICAg
ICAgICAgICAgZG91YmxlIHdvcnRoID0gLTE7CkBAIC03OTEsNyArODgwLDcgQEAgdm9pZCBTdG9y
YWdlOjp0cmF2ZXJzZShUcmF2ZXJzZUZsYWdzIGZsYWdzLCBUcmF2ZXJzZUhhbmRsZXImJiB0cmF2
ZXJzZUhhbmRsZXIpCiAgICAgICAgICAgICAgICAgd29ydGggPSBjb21wdXRlUmVjb3JkV29ydGgo
ZmlsZVRpbWVzKHJlY29yZFBhdGgpKTsKICAgICAgICAgICAgIHVuc2lnbmVkIGJvZHlTaGFyZUNv
dW50ID0gMDsKICAgICAgICAgICAgIGlmICh0cmF2ZXJzZU9wZXJhdGlvbi5mbGFncyAmIFRyYXZl
cnNlRmxhZzo6U2hhcmVDb3VudCkKLSAgICAgICAgICAgICAgICBib2R5U2hhcmVDb3VudCA9IG1f
YmxvYlN0b3JhZ2Uuc2hhcmVDb3VudChib2R5UGF0aEZvclJlY29yZFBhdGgocmVjb3JkUGF0aCkp
OworICAgICAgICAgICAgICAgIGJvZHlTaGFyZUNvdW50ID0gbV9ibG9iU3RvcmFnZS5zaGFyZUNv
dW50KGJvZHlCbG9iUGF0aEZvclJlY29yZFBhdGgocmVjb3JkUGF0aCkpOwogCiAgICAgICAgICAg
ICBzdGQ6OnVuaXF1ZV9sb2NrPExvY2s+IGxvY2sodHJhdmVyc2VPcGVyYXRpb24uYWN0aXZlTXV0
ZXgpOwogICAgICAgICAgICAgKyt0cmF2ZXJzZU9wZXJhdGlvbi5hY3RpdmVDb3VudDsKQEAgLTg1
NiwyMyArOTQ1LDI4IEBAIHZvaWQgU3RvcmFnZTo6c2V0Q2FwYWNpdHkoc2l6ZV90IGNhcGFjaXR5
KQogICAgIHNocmlua0lmTmVlZGVkKCk7CiB9CiAKLXZvaWQgU3RvcmFnZTo6Y2xlYXIoc3RkOjpj
aHJvbm86OnN5c3RlbV9jbG9jazo6dGltZV9wb2ludCBtb2RpZmllZFNpbmNlVGltZSwgc3RkOjpm
dW5jdGlvbjx2b2lkICgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBTdG9yYWdlOjpjbGVh
cihjb25zdCBTdHJpbmcmIHR5cGUsIHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6OnRpbWVfcG9p
bnQgbW9kaWZpZWRTaW5jZVRpbWUsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIExPRyhOZXR3
b3JrQ2FjaGVTdG9yYWdlLCAiKE5ldHdvcmtQcm9jZXNzKSBjbGVhcmluZyBjYWNoZSIpOwogCiAg
ICAgaWYgKG1fcmVjb3JkRmlsdGVyKQogICAgICAgICBtX3JlY29yZEZpbHRlci0+Y2xlYXIoKTsK
LSAgICBpZiAobV9ib2R5RmlsdGVyKQotICAgICAgICBtX2JvZHlGaWx0ZXItPmNsZWFyKCk7Cisg
ICAgaWYgKG1fYm9keUJsb2JGaWx0ZXIpCisgICAgICAgIG1fYm9keUJsb2JGaWx0ZXItPmNsZWFy
KCk7CiAgICAgbV9hcHByb3hpbWF0ZVJlY29yZHNTaXplID0gMDsKIAogICAgIC8vIEF2b2lkIG5v
bi10aHJlYWQgc2FmZSBzdGQ6OmZ1bmN0aW9uIGNvcGllcy4KICAgICBhdXRvKiBjb21wbGV0aW9u
SGFuZGxlclB0ciA9IGNvbXBsZXRpb25IYW5kbGVyID8gbmV3IHN0ZDo6ZnVuY3Rpb248dm9pZCAo
KT4oV1RGOjptb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSkgOiBudWxscHRyOwotCi0gICAgaW9RdWV1
ZSgpLmRpc3BhdGNoKFt0aGlzLCBtb2RpZmllZFNpbmNlVGltZSwgY29tcGxldGlvbkhhbmRsZXJQ
dHJdIHsKKyAgICBTdHJpbmdDYXB0dXJlIHR5cGVDYXB0dXJlKHR5cGUpOworICAgIGlvUXVldWUo
KS5kaXNwYXRjaChbdGhpcywgbW9kaWZpZWRTaW5jZVRpbWUsIGNvbXBsZXRpb25IYW5kbGVyUHRy
LCB0eXBlQ2FwdHVyZV0gewogICAgICAgICBhdXRvIHJlY29yZHNQYXRoID0gdGhpcy0+cmVjb3Jk
c1BhdGgoKTsKLSAgICAgICAgdHJhdmVyc2VSZWNvcmRzRmlsZXMocmVjb3Jkc1BhdGgsIFttb2Rp
ZmllZFNpbmNlVGltZV0oY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgU3RyaW5nJiBwYXJ0
aXRpb25QYXRoKSB7CisgICAgICAgIEhhc2hTZXQ8U3RyaW5nPiB0eXBlczsKKyAgICAgICAgaWYg
KCF0eXBlQ2FwdHVyZS5zdHJpbmcoKS5pc051bGwoKSkKKyAgICAgICAgICAgIHR5cGVzLmFkZCh0
eXBlQ2FwdHVyZS5zdHJpbmcoKSk7CisgICAgICAgIGlmICh0eXBlVXNlc0Jsb2JTdG9yYWdlKHR5
cGVDYXB0dXJlLnN0cmluZygpKSkKKyAgICAgICAgICAgIHR5cGVzLmFkZCh0eXBlQ2FwdHVyZS5z
dHJpbmcoKSArIGJsb2JTdWZmaXgpOworICAgICAgICB0cmF2ZXJzZVJlY29yZHNGaWxlcyhyZWNv
cmRzUGF0aCwgdHlwZXMsIFttb2RpZmllZFNpbmNlVGltZV0oY29uc3QgU3RyaW5nJiBmaWxlTmFt
ZSwgY29uc3QgU3RyaW5nJiBoYXNoU3RyaW5nLCBjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0
cmluZyYgcGFydGl0aW9uUGF0aCkgewogICAgICAgICAgICAgYXV0byBmaWxlUGF0aCA9IFdlYkNv
cmU6OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChwYXJ0aXRpb25QYXRoLCBmaWxlTmFtZSk7CiAg
ICAgICAgICAgICBpZiAobW9kaWZpZWRTaW5jZVRpbWUgPiBzdGQ6OmNocm9ubzo6c3lzdGVtX2Ns
b2NrOjp0aW1lX3BvaW50OjptaW4oKSkgewogICAgICAgICAgICAgICAgIGF1dG8gdGltZXMgPSBm
aWxlVGltZXMoZmlsZVBhdGgpOwpAQCAtODg0LDcgKzk3OCw3IEBAIHZvaWQgU3RvcmFnZTo6Y2xl
YXIoc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6dGltZV9wb2ludCBtb2RpZmllZFNpbmNlVGlt
ZSwgc3RkCiAKICAgICAgICAgZGVsZXRlRW1wdHlSZWNvcmRzRGlyZWN0b3JpZXMocmVjb3Jkc1Bh
dGgpOwogCi0gICAgICAgIC8vIFRoaXMgY2xlYW5zIHVucmVmZXJlbmNlcyBibG9icy4KKyAgICAg
ICAgLy8gVGhpcyBjbGVhbnMgdW5yZWZlcmVuY2VkIGJsb2JzLgogICAgICAgICBtX2Jsb2JTdG9y
YWdlLnN5bmNocm9uaXplKCk7CiAKICAgICAgICAgaWYgKGNvbXBsZXRpb25IYW5kbGVyUHRyKSB7
CkBAIC05NTAsMTQgKzEwNDQsMTUgQEAgdm9pZCBTdG9yYWdlOjpzaHJpbmsoKQogCiAgICAgYmFj
a2dyb3VuZElPUXVldWUoKS5kaXNwYXRjaChbdGhpc10gewogICAgICAgICBhdXRvIHJlY29yZHNQ
YXRoID0gdGhpcy0+cmVjb3Jkc1BhdGgoKTsKLSAgICAgICAgdHJhdmVyc2VSZWNvcmRzRmlsZXMo
cmVjb3Jkc1BhdGgsIFt0aGlzXShjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBjb25zdCBTdHJpbmcm
IHBhcnRpdGlvblBhdGgpIHsKLSAgICAgICAgICAgIGlmIChmaWxlTmFtZS5sZW5ndGgoKSAhPSBL
ZXk6Omhhc2hTdHJpbmdMZW5ndGgoKSkKLSAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IEhhc2hTZXQ8U3RyaW5nPiByZXNvdXJjZVR5cGVPbmx5OworICAgICAgICByZXNvdXJjZVR5cGVP
bmx5LmFkZChyZXNvdXJjZVR5cGUpOworICAgICAgICB0cmF2ZXJzZVJlY29yZHNGaWxlcyhyZWNv
cmRzUGF0aCwgcmVzb3VyY2VUeXBlT25seSwgW3RoaXNdKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUs
IGNvbnN0IFN0cmluZyYgaGFzaFN0cmluZywgY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJp
bmcmIHBhcnRpdGlvblBhdGgpIHsKKyAgICAgICAgICAgIEFTU0VSVCh0eXBlID09IHJlc291cmNl
VHlwZSk7CiAgICAgICAgICAgICBhdXRvIHJlY29yZFBhdGggPSBXZWJDb3JlOjpwYXRoQnlBcHBl
bmRpbmdDb21wb25lbnQocGFydGl0aW9uUGF0aCwgZmlsZU5hbWUpOwotICAgICAgICAgICAgYXV0
byBib2R5UGF0aCA9IGJvZHlQYXRoRm9yUmVjb3JkUGF0aChyZWNvcmRQYXRoKTsKKyAgICAgICAg
ICAgIGF1dG8gYm9keUJsb2JQYXRoID0gYm9keUJsb2JQYXRoRm9yUmVjb3JkUGF0aChyZWNvcmRQ
YXRoKTsKIAogICAgICAgICAgICAgYXV0byB0aW1lcyA9IGZpbGVUaW1lcyhyZWNvcmRQYXRoKTsK
LSAgICAgICAgICAgIHVuc2lnbmVkIGJvZHlTaGFyZUNvdW50ID0gbV9ibG9iU3RvcmFnZS5zaGFy
ZUNvdW50KGJvZHlQYXRoKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGJvZHlTaGFyZUNvdW50ID0g
bV9ibG9iU3RvcmFnZS5zaGFyZUNvdW50KGJvZHlCbG9iUGF0aCk7CiAgICAgICAgICAgICBhdXRv
IHByb2JhYmlsaXR5ID0gZGVsZXRpb25Qcm9iYWJpbGl0eSh0aW1lcywgYm9keVNoYXJlQ291bnQp
OwogCiAgICAgICAgICAgICBib29sIHNob3VsZERlbGV0ZSA9IHJhbmRvbU51bWJlcigpIDwgcHJv
YmFiaWxpdHk7CkBAIC05NjYsNyArMTA2MSw3IEBAIHZvaWQgU3RvcmFnZTo6c2hyaW5rKCkKIAog
ICAgICAgICAgICAgaWYgKHNob3VsZERlbGV0ZSkgewogICAgICAgICAgICAgICAgIFdlYkNvcmU6
OmRlbGV0ZUZpbGUocmVjb3JkUGF0aCk7Ci0gICAgICAgICAgICAgICAgbV9ibG9iU3RvcmFnZS5y
ZW1vdmUoYm9keVBhdGgpOworICAgICAgICAgICAgICAgIG1fYmxvYlN0b3JhZ2UucmVtb3ZlKGJv
ZHlCbG9iUGF0aCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0pOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdl
LmgKaW5kZXggMzZkYzFkOWEyZjNiZmJmMzllOGExMzI2N2Q4MGQ4NGM1NzZlYTY3Mi4uNzkzMzM4
MWY5ZDFkNjU3ZGZjZWNjNTVlNzQ1MTNmNDY1YzU0YzU5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuaApA
QCAtMzQsOSArMzQsMTEgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1RpbWVyLmg+CiAjaW5jbHVkZSA8
d3RmL0Jsb29tRmlsdGVyLmg+CiAjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CisjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9PcHRp
b25hbC5oPgogI2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdIYXNoLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFj
ZSBXZWJLaXQgewpAQCAtNDksMjMgKzUxLDIzIEBAIGNsYXNzIFN0b3JhZ2UgewogcHVibGljOgog
ICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8U3RvcmFnZT4gb3Blbihjb25zdCBTdHJpbmcmIGNh
Y2hlUGF0aCk7CiAKLSAgICBzdHJ1Y3QgUmVjb3JkIHsKKyAgICBjbGFzcyBSZWNvcmQgewogICAg
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBwdWJsaWM6CiAgICAgICAgIEtleSBr
ZXk7CiAgICAgICAgIHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6OnRpbWVfcG9pbnQgdGltZVN0
YW1wOwotICAgICAgICBEYXRhIGhlYWRlcjsKKyAgICAgICAgRGF0YSBoZWFkZXI7IC8vIE9ubHkg
dXNlZCBieSByZXNvdXJjZSB0eXBlLgogICAgICAgICBEYXRhIGJvZHk7CiAgICAgfTsKICAgICAv
LyBUaGlzIG1heSBjYWxsIGNvbXBsZXRpb24gaGFuZGxlciBzeW5jaHJvbm91c2x5IG9uIGZhaWx1
cmUuCiAgICAgdHlwZWRlZiBzdGQ6OmZ1bmN0aW9uPGJvb2wgKHN0ZDo6dW5pcXVlX3B0cjxSZWNv
cmQ+KT4gUmV0cmlldmVDb21wbGV0aW9uSGFuZGxlcjsKLSAgICB2b2lkIHJldHJpZXZlKGNvbnN0
IEtleSYsIHVuc2lnbmVkIHByaW9yaXR5LCBSZXRyaWV2ZUNvbXBsZXRpb25IYW5kbGVyJiYpOwor
ICAgIHZvaWQgcmV0cmlldmUoY29uc3QgS2V5JiwgY29uc3QgU3RyaW5nJiB0eXBlLCB1bnNpZ25l
ZCBwcmlvcml0eSwgUmV0cmlldmVDb21wbGV0aW9uSGFuZGxlciYmKTsKIAogICAgIHR5cGVkZWYg
c3RkOjpmdW5jdGlvbjx2b2lkIChjb25zdCBEYXRhJiBtYXBwZWRCb2R5KT4gTWFwcGVkQm9keUhh
bmRsZXI7Ci0gICAgdm9pZCBzdG9yZShjb25zdCBSZWNvcmQmLCBNYXBwZWRCb2R5SGFuZGxlciYm
KTsKKyAgICB2b2lkIHN0b3JlKGNvbnN0IFJlY29yZCYsIGNvbnN0IFN0cmluZyYgdHlwZSwgTWFw
cGVkQm9keUhhbmRsZXImJik7CiAKLSAgICB2b2lkIHJlbW92ZShjb25zdCBLZXkmKTsKLSAgICB2
b2lkIGNsZWFyKHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6OnRpbWVfcG9pbnQgbW9kaWZpZWRT
aW5jZVRpbWUsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4mJiBjb21wbGV0aW9uSGFuZGxlcik7Cisg
ICAgdm9pZCByZW1vdmUoY29uc3QgS2V5JiwgY29uc3QgU3RyaW5nJiB0eXBlKTsKKyAgICB2b2lk
IGNsZWFyKGNvbnN0IFN0cmluZyYgdHlwZSwgc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6dGlt
ZV9wb2ludCBtb2RpZmllZFNpbmNlVGltZSwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKTsKIAogICAgIHN0cnVjdCBSZWNvcmRJbmZvIHsKICAgICAgICAgc2l6ZV90
IGJvZHlTaXplOwpAQCAtODYsNyArODgsNyBAQCBwdWJsaWM6CiAgICAgc2l6ZV90IGNhcGFjaXR5
KCkgY29uc3QgeyByZXR1cm4gbV9jYXBhY2l0eTsgfQogICAgIHNpemVfdCBhcHByb3hpbWF0ZVNp
emUoKSBjb25zdDsKIAotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCB2ZXJzaW9uID0gNDsKKyAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgdmVyc2lvbiA9IDU7CiAKICAgICBTdHJpbmcgYmFzZVBh
dGgoKSBjb25zdDsKICAgICBTdHJpbmcgdmVyc2lvblBhdGgoKSBjb25zdDsKQEAgLTk4LDggKzEw
MCw4IEBAIHByaXZhdGU6CiAgICAgU3RvcmFnZShjb25zdCBTdHJpbmcmIGRpcmVjdG9yeVBhdGgp
OwogCiAgICAgU3RyaW5nIHBhcnRpdGlvblBhdGhGb3JLZXkoY29uc3QgS2V5JikgY29uc3Q7Ci0g
ICAgU3RyaW5nIHJlY29yZFBhdGhGb3JLZXkoY29uc3QgS2V5JikgY29uc3Q7Ci0gICAgU3RyaW5n
IGJvZHlQYXRoRm9yS2V5KGNvbnN0IEtleSYpIGNvbnN0OworICAgIFN0cmluZyByZWNvcmRQYXRo
Rm9yS2V5KGNvbnN0IEtleSYsIGNvbnN0IFN0cmluZyYgdHlwZSkgY29uc3Q7CisgICAgU3RyaW5n
IGJvZHlCbG9iUGF0aEZvcktleShjb25zdCBLZXkmLCBjb25zdCBTdHJpbmcmIHR5cGUpIGNvbnN0
OwogCiAgICAgdm9pZCBzeW5jaHJvbml6ZSgpOwogICAgIHZvaWQgZGVsZXRlT2xkVmVyc2lvbnMo
KTsKQEAgLTExOSwxOCArMTIxLDIxIEBAIHByaXZhdGU6CiAKICAgICBPcHRpb25hbDxCbG9iU3Rv
cmFnZTo6QmxvYj4gc3RvcmVCb2R5QXNCbG9iKFdyaXRlT3BlcmF0aW9uJik7CiAgICAgRGF0YSBl
bmNvZGVSZWNvcmQoY29uc3QgUmVjb3JkJiwgT3B0aW9uYWw8QmxvYlN0b3JhZ2U6OkJsb2I+KTsK
KyAgICBEYXRhIGVuY29kZVJlY29yZFdpdGhIZWFkZXIoY29uc3QgUmVjb3JkJiwgT3B0aW9uYWw8
QmxvYlN0b3JhZ2U6OkJsb2I+KTsKICAgICB2b2lkIHJlYWRSZWNvcmQoUmVhZE9wZXJhdGlvbiYs
IGNvbnN0IERhdGEmKTsKKyAgICB2b2lkIHJlYWRSZWNvcmRXaXRoSGVhZGVyKFJlYWRPcGVyYXRp
b24mLCBjb25zdCBEYXRhJik7CiAKICAgICB2b2lkIHVwZGF0ZUZpbGVNb2RpZmljYXRpb25UaW1l
KGNvbnN0IFN0cmluZyYgcGF0aCk7Ci0gICAgYm9vbCByZW1vdmVGcm9tUGVuZGluZ1dyaXRlT3Bl
cmF0aW9ucyhjb25zdCBLZXkmKTsKKyAgICBib29sIHJlbW92ZUZyb21QZW5kaW5nV3JpdGVPcGVy
YXRpb25zKGNvbnN0IEtleSYsIGNvbnN0IFN0cmluZyYgdHlwZSk7CiAKICAgICBXb3JrUXVldWUm
IGlvUXVldWUoKSB7IHJldHVybiBtX2lvUXVldWUuZ2V0KCk7IH0KICAgICBXb3JrUXVldWUmIGJh
Y2tncm91bmRJT1F1ZXVlKCkgeyByZXR1cm4gbV9iYWNrZ3JvdW5kSU9RdWV1ZS5nZXQoKTsgfQog
ICAgIFdvcmtRdWV1ZSYgc2VyaWFsQmFja2dyb3VuZElPUXVldWUoKSB7IHJldHVybiBtX3Nlcmlh
bEJhY2tncm91bmRJT1F1ZXVlLmdldCgpOyB9CiAKLSAgICBib29sIG1heUNvbnRhaW4oY29uc3Qg
S2V5JikgY29uc3Q7CisgICAgYm9vbCBtYXlDb250YWluKGNvbnN0IEtleSYsIGNvbnN0IFN0cmlu
ZyYgdHlwZSkgY29uc3Q7CisgICAgYm9vbCBtYXlDb250YWluQmxvYihjb25zdCBLZXkmLCBjb25z
dCBTdHJpbmcmIHR5cGUpIGNvbnN0OwogCi0gICAgdm9pZCBhZGRUb1JlY29yZEZpbHRlcihjb25z
dCBLZXkmKTsKKyAgICB2b2lkIGFkZFRvUmVjb3JkRmlsdGVyKGNvbnN0IEtleSYsIGNvbnN0IFN0
cmluZyYgdHlwZSk7CiAKICAgICBjb25zdCBTdHJpbmcgbV9iYXNlUGF0aDsKICAgICBjb25zdCBT
dHJpbmcgbV9yZWNvcmRzUGF0aDsKQEAgLTE0MSwxMyArMTQ2LDEzIEBAIHByaXZhdGU6CiAgICAg
Ly8gMl4xOCBiaXQgZmlsdGVyIGNhbiBzdXBwb3J0IHVwIHRvIDI2MDAwIGVudHJpZXMgd2l0aCBm
YWxzZSBwb3NpdGl2ZSByYXRlIDwgMSUuCiAgICAgdXNpbmcgQ29udGVudHNGaWx0ZXIgPSBCbG9v
bUZpbHRlcjwxOD47CiAgICAgc3RkOjp1bmlxdWVfcHRyPENvbnRlbnRzRmlsdGVyPiBtX3JlY29y
ZEZpbHRlcjsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q29udGVudHNGaWx0ZXI+IG1fYm9keUZpbHRl
cjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q29udGVudHNGaWx0ZXI+IG1fYm9keUJsb2JGaWx0ZXI7
CiAKICAgICBib29sIG1fc3luY2hyb25pemF0aW9uSW5Qcm9ncmVzcyB7IGZhbHNlIH07CiAgICAg
Ym9vbCBtX3Nocmlua0luUHJvZ3Jlc3MgeyBmYWxzZSB9OwogCiAgICAgVmVjdG9yPEtleTo6SGFz
aFR5cGU+IG1fcmVjb3JkRmlsdGVySGFzaGVzQWRkZWREdXJpbmdTeW5jaHJvbml6YXRpb247Ci0g
ICAgVmVjdG9yPEtleTo6SGFzaFR5cGU+IG1fYm9keUZpbHRlckhhc2hlc0FkZGVkRHVyaW5nU3lu
Y2hyb25pemF0aW9uOworICAgIFZlY3RvcjxLZXk6Okhhc2hUeXBlPiBtX2JvZHlCbG9iRmlsdGVy
SGFzaGVzQWRkZWREdXJpbmdTeW5jaHJvbml6YXRpb247CiAKICAgICBzdGF0aWMgY29uc3QgaW50
IG1heGltdW1SZXRyaWV2ZVByaW9yaXR5ID0gNDsKICAgICBEZXF1ZTxzdGQ6OnVuaXF1ZV9wdHI8
UmVhZE9wZXJhdGlvbj4+IG1fcGVuZGluZ1JlYWRPcGVyYXRpb25zQnlQcmlvcml0eVttYXhpbXVt
UmV0cmlldmVQcmlvcml0eSArIDFdOwpAQCAtMTY5LDcgKzE3NCw3IEBAIHByaXZhdGU6CiB9Owog
CiAvLyBGSVhNRTogUmVtb3ZlLCB1c2VkIGJ5IE5ldHdvcmtDYWNoZVN0YXRpc3RpY3Mgb25seS4K
LXZvaWQgdHJhdmVyc2VSZWNvcmRzRmlsZXMoY29uc3QgU3RyaW5nJiByZWNvcmRzUGF0aCwgY29u
c3Qgc3RkOjpmdW5jdGlvbjx2b2lkIChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKT4mKTsK
K3ZvaWQgdHJhdmVyc2VSZWNvcmRzRmlsZXMoY29uc3QgU3RyaW5nJiByZWNvcmRzUGF0aCwgY29u
c3QgSGFzaFNldDxTdHJpbmc+JiB0eXBlcywgY29uc3Qgc3RkOjpmdW5jdGlvbjx2b2lkIChjb25z
dCBTdHJpbmcmIGZpbGVOYW1lLCBjb25zdCBTdHJpbmcmIGhhc2hTdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBwYXJ0aXRpb25QYXRoKT4mKTsKIAogfQogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263327</attachid>
            <date>2015-10-16 14:07:15 -0700</date>
            <delta_ts>2015-10-19 11:26:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150221-20151016140639.patch</filename>
            <type>text/plain</type>
            <size>30511</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkxMTgzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMzk3ODUxM2UwNTVjNmQ4
ZTExYWQ3NjExNGZhZmQxNjc4OWQ0YWVkNy4uYjJlYmNjZWQ0ZmFiZGZhMGZiOWUwNWIyMGM0ZmM3
YTYyNDQ5ODU5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDE1LTEwLTE2ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgW1dLMl0gR2VuZXJhbGl6ZSBO
ZXR3b3JrQ2FjaGVTdG9yYWdlIEFQSSBzbyBpdCBjYW4gc3RvcmUgZGlmZmVyZW50IHR5cGVzIG9m
IG1ldGFkYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTAyMjEKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzIzMTQ5NzcxPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEdlbmVyYWxpemUgTmV0d29ya0Nh
Y2hlU3RvcmFnZSBBUEkgc28gaXQgY2FuIHN0b3JlIGRpZmZlcmVudCB0eXBlcyBvZgorICAgICAg
ICBtZXRhZGF0YSBhbG9uZ3NpZGUgdGhlIG5ldHdvcmsgcmVzb3VyY2VzLiBUaGlzIGlzIGEgcHJl
LXJlcXVpcmVtZW50IHRvCisgICAgICAgIG1ha2luZyBvdXIgTmV0d29ya0NhY2hlIHNtYXJ0ZXIg
Ynkgc3RvcmluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUKKyAgICAgICAgcmVzb3VyY2VzLgorCisg
ICAgICAgIFRvIGtlZXAgdGhlIGNvZGUgc2ltcGxlLCB0aGUgZW50cnkgdHlwZSBpcyBub3cgcGFy
dCBvZiB0aGUgZW50cnkga2V5IGFuZAorICAgICAgICB3ZSBzdG9yZSByZWNvcmRzIG9mIGEgc3Bl
Y2lmaWMgdHlwZSBpbiBhICd0eXBlJyBzdWJmb2xkZXIuIFRoZSBjYWNoZQorICAgICAgICBzdHJ1
Y3R1cmUgbG9va3MgbGlrZSBzbzoKKyAgICAgICAgLSBXZWJLaXRDYWNoZS9WZXJzaW9uIDUvW1Bh
cnRpdGlvbl0vW1R5cGVdL1tIYXNoXQorICAgICAgICAtIFdlYktpdENhY2hlL1ZlcnNpb24gNS9b
UGFydGl0aW9uXS9bVHlwZV0vW0hhc2hdLWJvZHlibG9iIChPcHRpb25hbCkKKworICAgICAgICBF
eGlzdGluZyBjYWNoZSBlbnRyaWVzIG5vdyB0aGF0IHRoZSAncmVzb3VyY2UnIHR5cGUgYXMgdGhl
c2UgYXJlIG5ldHdvcmsKKyAgICAgICAgcmVzb3VyY2VzLgorCisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNwcDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9j
YWNoZS9OZXR3b3JrQ2FjaGVLZXkuY3BwOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZUtleS5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZVN0YXRpc3RpY3MuY3BwOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZVN0b3JhZ2UuY3BwOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZVN0b3JhZ2UuaDoKKwogMjAxNS0xMC0xNiAgVGltIEhvcnRvbiAgPHRpbW90aHlf
aG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBIb29rIHVwIGF1dG9sYXlvdXQgaW50cmluc2lj
IHNpemluZyBmb3IgV0tXZWJWaWV3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNwcAppbmRleCBhZjg3NDkzNTU1MWRhZDU0NjYwMTBm
ZWEyYTY5M2UzNWY5M2U4M2FiLi4xODRjNDEyZGFiYzI0N2YwMDMwOGYxYWJkOTI5ZjllOGIwNDdm
ODYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZS5jcHAKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291
cmNlUmVxdWVzdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXNwb25zZS5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvU2hhcmVkQnVmZmVyLmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQu
aD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYvUnVuTG9v
cC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KQEAgLTUwLDYgKzUxLDEz
IEBACiBuYW1lc3BhY2UgV2ViS2l0IHsKIG5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgewogCitzdGF0
aWMgY29uc3QgU3RyaW5nIHJlc291cmNlVHlwZSgpCit7CisgICAgQVNTRVJUKFdURjo6aXNNYWlu
VGhyZWFkKCkpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IHJlc291
cmNlKEFTQ0lJTGl0ZXJhbCgicmVzb3VyY2UiKSk7CisgICAgcmV0dXJuIHJlc291cmNlOworfQor
CiBDYWNoZSYgc2luZ2xldG9uKCkKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Q2FjaGU+
IGluc3RhbmNlOwpAQCAtMTEzLDcgKzEyMSw3IEBAIHN0YXRpYyBLZXkgbWFrZUNhY2hlS2V5KGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKICAgICAvLyBGSVhNRTogVGhp
cyBpbXBsZW1lbnRzIG1pbmltYWwgUmFuZ2UgaGVhZGVyIGRpc2sgY2FjaGUgc3VwcG9ydC4gV2Ug
ZG9uJ3QgcGFyc2UKICAgICAvLyByYW5nZXMgc28gb25seSB0aGUgc2FtZSBleGFjdCByYW5nZSBy
ZXF1ZXN0IHdpbGwgYmUgc2VydmVkIGZyb20gdGhlIGNhY2hlLgogICAgIFN0cmluZyByYW5nZSA9
IHJlcXVlc3QuaHR0cEhlYWRlckZpZWxkKFdlYkNvcmU6OkhUVFBIZWFkZXJOYW1lOjpSYW5nZSk7
Ci0gICAgcmV0dXJuIHsgcGFydGl0aW9uLCByYW5nZSwgcmVxdWVzdC51cmwoKS5zdHJpbmcoKSB9
OworICAgIHJldHVybiB7IHBhcnRpdGlvbiwgcmVzb3VyY2VUeXBlKCksIHJhbmdlLCByZXF1ZXN0
LnVybCgpLnN0cmluZygpIH07CiB9CiAKIHN0YXRpYyBTdHJpbmcgaGVhZGVyVmFsdWVGb3JWYXJ5
KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgU3RyaW5nJiBo
ZWFkZXJOYW1lKQpAQCAtNDcyLDcgKzQ4MCw3IEBAIHZvaWQgQ2FjaGU6OnRyYXZlcnNlKHN0ZDo6
ZnVuY3Rpb248dm9pZCAoY29uc3QgRW50cnkqKT4mJiB0cmF2ZXJzZUhhbmRsZXIpCiB7CiAgICAg
QVNTRVJUKGlzRW5hYmxlZCgpKTsKIAotICAgIG1fc3RvcmFnZS0+dHJhdmVyc2UoMCwgW3RyYXZl
cnNlSGFuZGxlcl0oY29uc3QgU3RvcmFnZTo6UmVjb3JkKiByZWNvcmQsIGNvbnN0IFN0b3JhZ2U6
OlJlY29yZEluZm8mKSB7CisgICAgbV9zdG9yYWdlLT50cmF2ZXJzZShyZXNvdXJjZVR5cGUoKSwg
MCwgW3RyYXZlcnNlSGFuZGxlcl0oY29uc3QgU3RvcmFnZTo6UmVjb3JkKiByZWNvcmQsIGNvbnN0
IFN0b3JhZ2U6OlJlY29yZEluZm8mKSB7CiAgICAgICAgIGlmICghcmVjb3JkKSB7CiAgICAgICAg
ICAgICB0cmF2ZXJzZUhhbmRsZXIobnVsbHB0cik7CiAgICAgICAgICAgICByZXR1cm47CkBAIC01
MDksNyArNTE3LDcgQEAgdm9pZCBDYWNoZTo6ZHVtcENvbnRlbnRzVG9GaWxlKCkKICAgICBUb3Rh
bHMgdG90YWxzOwogICAgIGF1dG8gZmxhZ3MgPSBTdG9yYWdlOjpUcmF2ZXJzZUZsYWc6OkNvbXB1
dGVXb3J0aCB8IFN0b3JhZ2U6OlRyYXZlcnNlRmxhZzo6U2hhcmVDb3VudDsKICAgICBzaXplX3Qg
Y2FwYWNpdHkgPSBtX3N0b3JhZ2UtPmNhcGFjaXR5KCk7Ci0gICAgbV9zdG9yYWdlLT50cmF2ZXJz
ZShmbGFncywgW2ZkLCB0b3RhbHMsIGNhcGFjaXR5XShjb25zdCBTdG9yYWdlOjpSZWNvcmQqIHJl
Y29yZCwgY29uc3QgU3RvcmFnZTo6UmVjb3JkSW5mbyYgaW5mbykgbXV0YWJsZSB7CisgICAgbV9z
dG9yYWdlLT50cmF2ZXJzZShyZXNvdXJjZVR5cGUoKSwgZmxhZ3MsIFtmZCwgdG90YWxzLCBjYXBh
Y2l0eV0oY29uc3QgU3RvcmFnZTo6UmVjb3JkKiByZWNvcmQsIGNvbnN0IFN0b3JhZ2U6OlJlY29y
ZEluZm8mIGluZm8pIG11dGFibGUgewogICAgICAgICBpZiAoIXJlY29yZCkgewogICAgICAgICAg
ICAgU3RyaW5nQnVpbGRlciBlcGlsb2d1ZTsKICAgICAgICAgICAgIGVwaWxvZ3VlLmFwcGVuZExp
dGVyYWwoInt9XG5dLFxuIik7CkBAIC01NjcsNyArNTc1LDggQEAgdm9pZCBDYWNoZTo6Y2xlYXIo
c3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6dGltZV9wb2ludCBtb2RpZmllZFNpbmNlLCBzdGQ6
OmZ1bmMKICAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKGNvbXBsZXRpb25IYW5kbGVy
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBtX3N0b3JhZ2UtPmNsZWFyKG1vZGlmaWVk
U2luY2UsIFdURjo6bW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIFN0cmluZyBhbnlUeXBl
OworICAgIG1fc3RvcmFnZS0+Y2xlYXIoYW55VHlwZSwgbW9kaWZpZWRTaW5jZSwgV1RGOjptb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiAKICAgICBkZWxldGVEdW1wRmlsZSgpOwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlS2V5
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUtl
eS5jcHAKaW5kZXggMGI5MWJhZWY5OGM2ZjVhMjExMjhkYzllN2RkODM4YmY3OWViZjcwZS4uYjgy
OGQ0OTVjZTE4MGViNmVjZTMyMjg3OWJhOWM1OTM3ZjFlMDU1ZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlS2V5LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVLZXkuY3BwCkBA
IC0zOCwxNCArMzgsMTYgQEAgbmFtZXNwYWNlIE5ldHdvcmtDYWNoZSB7CiAKIEtleTo6S2V5KGNv
bnN0IEtleSYgbykKICAgICA6IG1fcGFydGl0aW9uKG8ubV9wYXJ0aXRpb24uaXNvbGF0ZWRDb3B5
KCkpCisgICAgLCBtX3R5cGUoby5tX3R5cGUuaXNvbGF0ZWRDb3B5KCkpCiAgICAgLCBtX2lkZW50
aWZpZXIoby5tX2lkZW50aWZpZXIuaXNvbGF0ZWRDb3B5KCkpCiAgICAgLCBtX3JhbmdlKG8ubV9y
YW5nZS5pc29sYXRlZENvcHkoKSkKICAgICAsIG1faGFzaChvLm1faGFzaCkKIHsKIH0KIAotS2V5
OjpLZXkoY29uc3QgU3RyaW5nJiBwYXJ0aXRpb24sIGNvbnN0IFN0cmluZyYgcmFuZ2UsIGNvbnN0
IFN0cmluZyYgaWRlbnRpZmllcikKK0tleTo6S2V5KGNvbnN0IFN0cmluZyYgcGFydGl0aW9uLCBj
b25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgcmFuZ2UsIGNvbnN0IFN0cmluZyYgaWRl
bnRpZmllcikKICAgICA6IG1fcGFydGl0aW9uKHBhcnRpdGlvbi5pc29sYXRlZENvcHkoKSkKKyAg
ICAsIG1fdHlwZSh0eXBlLmlzb2xhdGVkQ29weSgpKQogICAgICwgbV9pZGVudGlmaWVyKGlkZW50
aWZpZXIuaXNvbGF0ZWRDb3B5KCkpCiAgICAgLCBtX3JhbmdlKHJhbmdlLmlzb2xhdGVkQ29weSgp
KQogICAgICwgbV9oYXNoKGNvbXB1dGVIYXNoKCkpCkBAIC01NSw2ICs1Nyw3IEBAIEtleTo6S2V5
KGNvbnN0IFN0cmluZyYgcGFydGl0aW9uLCBjb25zdCBTdHJpbmcmIHJhbmdlLCBjb25zdCBTdHJp
bmcmIGlkZW50aWZpZXIpCiBLZXkmIEtleTo6b3BlcmF0b3I9KGNvbnN0IEtleSYgb3RoZXIpCiB7
CiAgICAgbV9wYXJ0aXRpb24gPSBvdGhlci5tX3BhcnRpdGlvbi5pc29sYXRlZENvcHkoKTsKKyAg
ICBtX3R5cGUgPSBvdGhlci5tX3R5cGUuaXNvbGF0ZWRDb3B5KCk7CiAgICAgbV9pZGVudGlmaWVy
ID0gb3RoZXIubV9pZGVudGlmaWVyLmlzb2xhdGVkQ29weSgpOwogICAgIG1fcmFuZ2UgPSBvdGhl
ci5tX3JhbmdlLmlzb2xhdGVkQ29weSgpOwogICAgIG1faGFzaCA9IG90aGVyLm1faGFzaDsKQEAg
LTgzLDYgKzg2LDcgQEAgS2V5OjpIYXNoVHlwZSBLZXk6OmNvbXB1dGVIYXNoKCkgY29uc3QKICAg
ICAvLyBTSEExIGp1c3QgaGFwcGVucyB0byBiZSBzdWl0YWJseSBzaXplZCwgZmFzdCBhbmQgYXZh
aWxhYmxlLgogICAgIFNIQTEgc2hhMTsKICAgICBoYXNoU3RyaW5nKHNoYTEsIG1fcGFydGl0aW9u
KTsKKyAgICBoYXNoU3RyaW5nKHNoYTEsIG1fdHlwZSk7CiAgICAgaGFzaFN0cmluZyhzaGExLCBt
X2lkZW50aWZpZXIpOwogICAgIGhhc2hTdHJpbmcoc2hhMSwgbV9yYW5nZSk7CiAgICAgU0hBMTo6
RGlnZXN0IGhhc2g7CkBAIC0xMjQsMTIgKzEyOCwxMyBAQCBib29sIEtleTo6c3RyaW5nVG9IYXNo
KGNvbnN0IFN0cmluZyYgc3RyaW5nLCBIYXNoVHlwZSYgaGFzaCkKIAogYm9vbCBLZXk6Om9wZXJh
dG9yPT0oY29uc3QgS2V5JiBvdGhlcikgY29uc3QKIHsKLSAgICByZXR1cm4gbV9oYXNoID09IG90
aGVyLm1faGFzaCAmJiBtX3BhcnRpdGlvbiA9PSBvdGhlci5tX3BhcnRpdGlvbiAmJiBtX2lkZW50
aWZpZXIgPT0gb3RoZXIubV9pZGVudGlmaWVyICYmIG1fcmFuZ2UgPT0gb3RoZXIubV9yYW5nZTsK
KyAgICByZXR1cm4gbV9oYXNoID09IG90aGVyLm1faGFzaCAmJiBtX3BhcnRpdGlvbiA9PSBvdGhl
ci5tX3BhcnRpdGlvbiAmJiBtX3R5cGUgPT0gb3RoZXIubV90eXBlICYmIG1faWRlbnRpZmllciA9
PSBvdGhlci5tX2lkZW50aWZpZXIgJiYgbV9yYW5nZSA9PSBvdGhlci5tX3JhbmdlOwogfQogCiB2
b2lkIEtleTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgZW5jb2RlciA8
PCBtX3BhcnRpdGlvbjsKKyAgICBlbmNvZGVyIDw8IG1fdHlwZTsKICAgICBlbmNvZGVyIDw8IG1f
aWRlbnRpZmllcjsKICAgICBlbmNvZGVyIDw8IG1fcmFuZ2U7CiAgICAgZW5jb2RlciA8PCBtX2hh
c2g7CkBAIC0xMzcsNyArMTQyLDcgQEAgdm9pZCBLZXk6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVy
KSBjb25zdAogCiBib29sIEtleTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIEtleSYga2V5KQog
ewotICAgIHJldHVybiBkZWNvZGVyLmRlY29kZShrZXkubV9wYXJ0aXRpb24pICYmIGRlY29kZXIu
ZGVjb2RlKGtleS5tX2lkZW50aWZpZXIpICYmIGRlY29kZXIuZGVjb2RlKGtleS5tX3JhbmdlKSAm
JiBkZWNvZGVyLmRlY29kZShrZXkubV9oYXNoKTsKKyAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGUo
a2V5Lm1fcGFydGl0aW9uKSAmJiBkZWNvZGVyLmRlY29kZShrZXkubV90eXBlKSAmJiBkZWNvZGVy
LmRlY29kZShrZXkubV9pZGVudGlmaWVyKSAmJiBkZWNvZGVyLmRlY29kZShrZXkubV9yYW5nZSkg
JiYgZGVjb2Rlci5kZWNvZGUoa2V5Lm1faGFzaCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUtleS5oIGIvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlS2V5LmgKaW5kZXggMmNk
YWUzMDVmYjEyMzdhNWMxYjhhYWMzNjdlNDEyMzFmNmFiODcyMi4uZTYzM2I2NTE0MGU0ZGNiMDdk
OGJjNzA5MGU5ODhlYTA0NDcyMWEyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlS2V5LmgKKysrIGIvU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlS2V5LmgKQEAgLTQ0LDcgKzQ0LDcgQEAgcHVi
bGljOgogICAgIEtleSgpIHsgfQogICAgIEtleShjb25zdCBLZXkmKTsKICAgICBLZXkoS2V5JiYp
ID0gZGVmYXVsdDsKLSAgICBLZXkoY29uc3QgU3RyaW5nJiBwYXJ0aXRpb24sIGNvbnN0IFN0cmlu
ZyYgcmFuZ2UsIGNvbnN0IFN0cmluZyYgaWRlbnRpZmllcik7CisgICAgS2V5KGNvbnN0IFN0cmlu
ZyYgcGFydGl0aW9uLCBjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgcmFuZ2UsIGNv
bnN0IFN0cmluZyYgaWRlbnRpZmllcik7CiAKICAgICBLZXkmIG9wZXJhdG9yPShjb25zdCBLZXkm
KTsKICAgICBLZXkmIG9wZXJhdG9yPShLZXkmJikgPSBkZWZhdWx0OwpAQCAtNTMsNiArNTMsNyBA
QCBwdWJsaWM6CiAKICAgICBjb25zdCBTdHJpbmcmIHBhcnRpdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fcGFydGl0aW9uOyB9CiAgICAgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9pZGVudGlmaWVyOyB9CisgICAgY29uc3QgU3RyaW5nJiB0eXBlKCkgY29uc3QgeyBy
ZXR1cm4gbV90eXBlOyB9CiAKICAgICBIYXNoVHlwZSBoYXNoKCkgY29uc3QgeyByZXR1cm4gbV9o
YXNoOyB9CiAKQEAgLTcxLDYgKzcyLDcgQEAgcHJpdmF0ZToKICAgICBIYXNoVHlwZSBjb21wdXRl
SGFzaCgpIGNvbnN0OwogCiAgICAgU3RyaW5nIG1fcGFydGl0aW9uOworICAgIFN0cmluZyBtX3R5
cGU7CiAgICAgU3RyaW5nIG1faWRlbnRpZmllcjsKICAgICBTdHJpbmcgbV9yYW5nZTsKICAgICBI
YXNoVHlwZSBtX2hhc2g7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGVTdGF0aXN0aWNzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0YXRpc3RpY3MuY3BwCmluZGV4IGZiZTE0NWVh
YTViYzQxMjUzYmY3OGFlZmZkNzI1MTVlNThmMTUyOTcuLjczMTA3MmRjZDIzMDk5ZjliM2Y5MGI4
MzFlMjkyNjk2OWM0YWQxNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0YXRpc3RpY3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0YXRpc3RpY3MuY3BwCkBAIC0xNDQs
NyArMTQ0LDEwIEBAIHZvaWQgU3RhdGlzdGljczo6Ym9vdHN0cmFwRnJvbU5ldHdvcmtDYWNoZShj
b25zdCBTdHJpbmcmIG5ldHdvcmtDYWNoZVBhdGgpCiAgICAgTE9HKE5ldHdvcmtDYWNoZSwgIihO
ZXR3b3JrUHJvY2VzcykgQm9vdHN0cmFwcGluZyB0aGUgbmV0d29yayBjYWNoZSBzdGF0aXN0aWNz
IGRhdGFiYXNlIGZyb20gdGhlIG5ldHdvcmsgY2FjaGUuLi4iKTsKIAogICAgIFZlY3RvcjxTdHJp
bmdDYXB0dXJlPiBoYXNoZXM7Ci0gICAgdHJhdmVyc2VSZWNvcmRzRmlsZXMobmV0d29ya0NhY2hl
UGF0aCwgWyZoYXNoZXNdKGNvbnN0IFN0cmluZyYgaGFzaFN0cmluZywgY29uc3QgU3RyaW5nJikg
eworICAgIHRyYXZlcnNlUmVjb3Jkc0ZpbGVzKG5ldHdvcmtDYWNoZVBhdGgsIEFTQ0lJTGl0ZXJh
bCgicmVzb3VyY2UiKSwgWyZoYXNoZXNdKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IFN0
cmluZyYgaGFzaFN0cmluZywgY29uc3QgU3RyaW5nJiB0eXBlLCBib29sIGlzQm9keUJsb2IsIGNv
bnN0IFN0cmluZyYgcmVjb3JkRGlyZWN0b3J5UGF0aCkgeworICAgICAgICBpZiAoaXNCb2R5Qmxv
YikKKyAgICAgICAgICAgIHJldHVybjsKKwogICAgICAgICBLZXk6Okhhc2hUeXBlIGhhc2g7CiAg
ICAgICAgIGlmICghS2V5OjpzdHJpbmdUb0hhc2goaGFzaFN0cmluZywgaGFzaCkpCiAgICAgICAg
ICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9j
YWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuY3BwCmluZGV4IGZhNWJhN2RhMjA2ZmQwOTlh
MzlmNDg5ZTg4Mjc0OTJhNDEwMTI1OTUuLjEwYmQxODFlMjExNzAwODQxZTVhYjlhYTNmNTEwZjc1
Mzg2ZWEwOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZVN0b3JhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuY3BwCkBAIC00Niw3ICs0Niw3IEBAIG5hbWVz
cGFjZSBOZXR3b3JrQ2FjaGUgewogc3RhdGljIGNvbnN0IGNoYXIgdmVyc2lvbkRpcmVjdG9yeVBy
ZWZpeFtdID0gIlZlcnNpb24gIjsKIHN0YXRpYyBjb25zdCBjaGFyIHJlY29yZHNEaXJlY3RvcnlO
YW1lW10gPSAiUmVjb3JkcyI7CiBzdGF0aWMgY29uc3QgY2hhciBibG9ic0RpcmVjdG9yeU5hbWVb
XSA9ICJCbG9icyI7Ci1zdGF0aWMgY29uc3QgY2hhciBib2R5UG9zdGZpeFtdID0gIi1ib2R5IjsK
K3N0YXRpYyBjb25zdCBjaGFyIGJvZHlCbG9iU3VmZml4W10gPSAiLWJvZHkiOwogCiBzdGF0aWMg
ZG91YmxlIGNvbXB1dGVSZWNvcmRXb3J0aChGaWxlVGltZXMpOwogCkBAIC0xMTMsMTEgKzExMywx
MyBAQCBwdWJsaWM6CiBzdHJ1Y3QgU3RvcmFnZTo6VHJhdmVyc2VPcGVyYXRpb24gewogICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIFRyYXZlcnNlT3BlcmF0aW9uKFRy
YXZlcnNlRmxhZ3MgZmxhZ3MsIGNvbnN0IFRyYXZlcnNlSGFuZGxlciYgaGFuZGxlcikKLSAgICAg
ICAgOiBmbGFncyhmbGFncykKKyAgICBUcmF2ZXJzZU9wZXJhdGlvbihjb25zdCBTdHJpbmcmIHR5
cGUsIFRyYXZlcnNlRmxhZ3MgZmxhZ3MsIGNvbnN0IFRyYXZlcnNlSGFuZGxlciYgaGFuZGxlcikK
KyAgICAgICAgOiB0eXBlKHR5cGUpCisgICAgICAgICwgZmxhZ3MoZmxhZ3MpCiAgICAgICAgICwg
aGFuZGxlcihoYW5kbGVyKQogICAgIHsgfQogCisgICAgY29uc3QgU3RyaW5nIHR5cGU7CiAgICAg
Y29uc3QgVHJhdmVyc2VGbGFncyBmbGFnczsKICAgICBjb25zdCBUcmF2ZXJzZUhhbmRsZXIgaGFu
ZGxlcjsKIApAQCAtMTUxLDE2ICsxNTMsMjYgQEAgc3RhdGljIFN0cmluZyBtYWtlQmxvYkRpcmVj
dG9yeVBhdGgoY29uc3QgU3RyaW5nJiBiYXNlRGlyZWN0b3J5UGF0aCkKICAgICByZXR1cm4gV2Vi
Q29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG1ha2VWZXJzaW9uZWREaXJlY3RvcnlQYXRo
KGJhc2VEaXJlY3RvcnlQYXRoKSwgYmxvYnNEaXJlY3RvcnlOYW1lKTsKIH0KIAotdm9pZCB0cmF2
ZXJzZVJlY29yZHNGaWxlcyhjb25zdCBTdHJpbmcmIHJlY29yZHNQYXRoLCBjb25zdCBzdGQ6OmZ1
bmN0aW9uPHZvaWQgKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpPiYgZnVuY3Rpb24pCit2
b2lkIHRyYXZlcnNlUmVjb3Jkc0ZpbGVzKGNvbnN0IFN0cmluZyYgcmVjb3Jkc1BhdGgsIGNvbnN0
IFN0cmluZyYgZXhwZWN0ZWRUeXBlLCBjb25zdCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGNvbnN0IFN0
cmluZyYgZmlsZU5hbWUsIGNvbnN0IFN0cmluZyYgaGFzaFN0cmluZywgY29uc3QgU3RyaW5nJiB0
eXBlLCBib29sIGlzQm9keUJsb2IsIGNvbnN0IFN0cmluZyYgcmVjb3JkRGlyZWN0b3J5UGF0aCk+
JiBmdW5jdGlvbikKIHsKLSAgICB0cmF2ZXJzZURpcmVjdG9yeShyZWNvcmRzUGF0aCwgWyZyZWNv
cmRzUGF0aCwgJmZ1bmN0aW9uXShjb25zdCBTdHJpbmcmIHN1YmRpck5hbWUsIERpcmVjdG9yeUVu
dHJ5VHlwZSB0eXBlKSB7Ci0gICAgICAgIGlmICh0eXBlICE9IERpcmVjdG9yeUVudHJ5VHlwZTo6
RGlyZWN0b3J5KQorICAgIHRyYXZlcnNlRGlyZWN0b3J5KHJlY29yZHNQYXRoLCBbJnJlY29yZHNQ
YXRoLCAmZnVuY3Rpb24sICZleHBlY3RlZFR5cGVdKGNvbnN0IFN0cmluZyYgcGFydGl0aW9uTmFt
ZSwgRGlyZWN0b3J5RW50cnlUeXBlIGVudHJ5VHlwZSkgeworICAgICAgICBpZiAoZW50cnlUeXBl
ICE9IERpcmVjdG9yeUVudHJ5VHlwZTo6RGlyZWN0b3J5KQogICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBTdHJpbmcgcGFydGl0aW9uUGF0aCA9IFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0Nv
bXBvbmVudChyZWNvcmRzUGF0aCwgc3ViZGlyTmFtZSk7Ci0gICAgICAgIHRyYXZlcnNlRGlyZWN0
b3J5KHBhcnRpdGlvblBhdGgsIFsmZnVuY3Rpb24sICZwYXJ0aXRpb25QYXRoXShjb25zdCBTdHJp
bmcmIGZpbGVOYW1lLCBEaXJlY3RvcnlFbnRyeVR5cGUgdHlwZSkgewotICAgICAgICAgICAgaWYg
KHR5cGUgIT0gRGlyZWN0b3J5RW50cnlUeXBlOjpGaWxlKQorICAgICAgICBTdHJpbmcgcGFydGl0
aW9uUGF0aCA9IFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChyZWNvcmRzUGF0aCwg
cGFydGl0aW9uTmFtZSk7CisgICAgICAgIHRyYXZlcnNlRGlyZWN0b3J5KHBhcnRpdGlvblBhdGgs
IFsmZnVuY3Rpb24sICZwYXJ0aXRpb25QYXRoLCAmZXhwZWN0ZWRUeXBlXShjb25zdCBTdHJpbmcm
IGFjdHVhbFR5cGUsIERpcmVjdG9yeUVudHJ5VHlwZSBlbnRyeVR5cGUpIHsKKyAgICAgICAgICAg
IGlmIChlbnRyeVR5cGUgIT0gRGlyZWN0b3J5RW50cnlUeXBlOjpEaXJlY3RvcnkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgaWYgKCFhY3R1YWxUeXBlLmlzRW1wdHkoKSAm
JiBleHBlY3RlZFR5cGUgIT0gYWN0dWFsVHlwZSkKICAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICBmdW5jdGlvbihmaWxlTmFtZSwgcGFydGl0aW9uUGF0aCk7CisgICAgICAgICAg
ICBTdHJpbmcgcmVjb3JkRGlyZWN0b3J5UGF0aCA9IFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0Nv
bXBvbmVudChwYXJ0aXRpb25QYXRoLCBhY3R1YWxUeXBlKTsKKyAgICAgICAgICAgIHRyYXZlcnNl
RGlyZWN0b3J5KHBhcnRpdGlvblBhdGgsIFsmZnVuY3Rpb24sICZyZWNvcmREaXJlY3RvcnlQYXRo
LCAmYWN0dWFsVHlwZV0oY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgRGlyZWN0b3J5RW50cnlUeXBl
IGVudHJ5VHlwZSkgeworICAgICAgICAgICAgICAgIGlmIChlbnRyeVR5cGUgIT0gRGlyZWN0b3J5
RW50cnlUeXBlOjpGaWxlIHx8IGZpbGVOYW1lLmxlbmd0aCgpIDwgS2V5OjpoYXNoU3RyaW5nTGVu
Z3RoKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgICAgIFN0
cmluZyBoYXNoU3RyaW5nID0gZmlsZU5hbWUuc3Vic3RyaW5nKDAsIEtleTo6aGFzaFN0cmluZ0xl
bmd0aCgpKTsKKyAgICAgICAgICAgICAgICBhdXRvIGlzQm9keUJsb2IgPSBmaWxlTmFtZS5sZW5n
dGgoKSA+IEtleTo6aGFzaFN0cmluZ0xlbmd0aCgpICYmIGZpbGVOYW1lLmVuZHNXaXRoKGJvZHlC
bG9iU3VmZml4KTsKKyAgICAgICAgICAgICAgICBmdW5jdGlvbihmaWxlTmFtZSwgaGFzaFN0cmlu
ZywgYWN0dWFsVHlwZSwgaXNCb2R5QmxvYiwgcmVjb3JkRGlyZWN0b3J5UGF0aCk7CisgICAgICAg
ICAgICB9KTsKICAgICAgICAgfSk7CiAgICAgfSk7CiB9CkBAIC0yMjUsMTQgKzIzNywxMyBAQCB2
b2lkIFN0b3JhZ2U6OnN5bmNocm9uaXplKCkKIAogICAgIGJhY2tncm91bmRJT1F1ZXVlKCkuZGlz
cGF0Y2goW3RoaXNdIHsKICAgICAgICAgYXV0byByZWNvcmRGaWx0ZXIgPSBzdGQ6Om1ha2VfdW5p
cXVlPENvbnRlbnRzRmlsdGVyPigpOwotICAgICAgICBhdXRvIGJvZHlGaWx0ZXIgPSBzdGQ6Om1h
a2VfdW5pcXVlPENvbnRlbnRzRmlsdGVyPigpOworICAgICAgICBhdXRvIGJvZHlCbG9iRmlsdGVy
ID0gc3RkOjptYWtlX3VuaXF1ZTxDb250ZW50c0ZpbHRlcj4oKTsKICAgICAgICAgc2l6ZV90IHJl
Y29yZHNTaXplID0gMDsKICAgICAgICAgdW5zaWduZWQgY291bnQgPSAwOwotICAgICAgICB0cmF2
ZXJzZVJlY29yZHNGaWxlcyhyZWNvcmRzUGF0aCgpLCBbJnJlY29yZEZpbHRlciwgJmJvZHlGaWx0
ZXIsICZyZWNvcmRzU2l6ZSwgJmNvdW50XShjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBjb25zdCBT
dHJpbmcmIHBhcnRpdGlvblBhdGgpIHsKLSAgICAgICAgICAgIGF1dG8gZmlsZVBhdGggPSBXZWJD
b3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQocGFydGl0aW9uUGF0aCwgZmlsZU5hbWUpOwor
ICAgICAgICBTdHJpbmcgYW55VHlwZTsKKyAgICAgICAgdHJhdmVyc2VSZWNvcmRzRmlsZXMocmVj
b3Jkc1BhdGgoKSwgYW55VHlwZSwgWyZyZWNvcmRGaWx0ZXIsICZib2R5QmxvYkZpbHRlciwgJnJl
Y29yZHNTaXplLCAmY291bnRdKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IFN0cmluZyYg
aGFzaFN0cmluZywgY29uc3QgU3RyaW5nJiB0eXBlLCBib29sIGlzQm9keUJsb2IsIGNvbnN0IFN0
cmluZyYgcmVjb3JkRGlyZWN0b3J5UGF0aCkgeworICAgICAgICAgICAgYXV0byBmaWxlUGF0aCA9
IFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChyZWNvcmREaXJlY3RvcnlQYXRoLCBm
aWxlTmFtZSk7CiAKLSAgICAgICAgICAgIGJvb2wgaXNCb2R5ID0gZmlsZU5hbWUuZW5kc1dpdGgo
Ym9keVBvc3RmaXgpOwotICAgICAgICAgICAgU3RyaW5nIGhhc2hTdHJpbmcgPSBpc0JvZHkgPyBm
aWxlTmFtZS5zdWJzdHJpbmcoMCwgS2V5OjpoYXNoU3RyaW5nTGVuZ3RoKCkpIDogZmlsZU5hbWU7
CiAgICAgICAgICAgICBLZXk6Okhhc2hUeXBlIGhhc2g7CiAgICAgICAgICAgICBpZiAoIUtleTo6
c3RyaW5nVG9IYXNoKGhhc2hTdHJpbmcsIGhhc2gpKSB7CiAgICAgICAgICAgICAgICAgV2ViQ29y
ZTo6ZGVsZXRlRmlsZShmaWxlUGF0aCk7CkBAIC0yNDQsMzEgKzI1NSwzMyBAQCB2b2lkIFN0b3Jh
Z2U6OnN5bmNocm9uaXplKCkKICAgICAgICAgICAgICAgICBXZWJDb3JlOjpkZWxldGVGaWxlKGZp
bGVQYXRoKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBpZiAoaXNCb2R5KSB7Ci0gICAgICAgICAgICAgICAgYm9keUZpbHRlci0+YWRkKGhhc2gp
OworCisgICAgICAgICAgICBpZiAoaXNCb2R5QmxvYikgeworICAgICAgICAgICAgICAgIGJvZHlC
bG9iRmlsdGVyLT5hZGQoaGFzaCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgfQorCiAgICAgICAgICAgICByZWNvcmRGaWx0ZXItPmFkZChoYXNoKTsKICAgICAgICAgICAg
IHJlY29yZHNTaXplICs9IGZpbGVTaXplOwogICAgICAgICAgICAgKytjb3VudDsKICAgICAgICAg
fSk7CiAKICAgICAgICAgYXV0byogcmVjb3JkRmlsdGVyUHRyID0gcmVjb3JkRmlsdGVyLnJlbGVh
c2UoKTsKLSAgICAgICAgYXV0byogYm9keUZpbHRlclB0ciA9IGJvZHlGaWx0ZXIucmVsZWFzZSgp
OwotICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3RoaXMsIHJlY29yZEZpbHRlclB0
ciwgYm9keUZpbHRlclB0ciwgcmVjb3Jkc1NpemVdIHsKKyAgICAgICAgYXV0byogYm9keUJsb2JG
aWx0ZXJQdHIgPSBib2R5QmxvYkZpbHRlci5yZWxlYXNlKCk7CisgICAgICAgIFJ1bkxvb3A6Om1h
aW4oKS5kaXNwYXRjaChbdGhpcywgcmVjb3JkRmlsdGVyUHRyLCBib2R5QmxvYkZpbHRlclB0ciwg
cmVjb3Jkc1NpemVdIHsKICAgICAgICAgICAgIGF1dG8gcmVjb3JkRmlsdGVyID0gc3RkOjp1bmlx
dWVfcHRyPENvbnRlbnRzRmlsdGVyPihyZWNvcmRGaWx0ZXJQdHIpOwotICAgICAgICAgICAgYXV0
byBib2R5RmlsdGVyID0gc3RkOjp1bmlxdWVfcHRyPENvbnRlbnRzRmlsdGVyPihib2R5RmlsdGVy
UHRyKTsKKyAgICAgICAgICAgIGF1dG8gYm9keUJsb2JGaWx0ZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8
Q29udGVudHNGaWx0ZXI+KGJvZHlCbG9iRmlsdGVyUHRyKTsKIAotICAgICAgICAgICAgZm9yIChh
dXRvJiBoYXNoIDogbV9yZWNvcmRGaWx0ZXJIYXNoZXNBZGRlZER1cmluZ1N5bmNocm9uaXphdGlv
bikKLSAgICAgICAgICAgICAgICByZWNvcmRGaWx0ZXItPmFkZChoYXNoKTsKKyAgICAgICAgICAg
IGZvciAoYXV0byYgcmVjb3JkRmlsdGVyS2V5IDogbV9yZWNvcmRGaWx0ZXJIYXNoZXNBZGRlZER1
cmluZ1N5bmNocm9uaXphdGlvbikKKyAgICAgICAgICAgICAgICByZWNvcmRGaWx0ZXItPmFkZChy
ZWNvcmRGaWx0ZXJLZXkpOwogICAgICAgICAgICAgbV9yZWNvcmRGaWx0ZXJIYXNoZXNBZGRlZER1
cmluZ1N5bmNocm9uaXphdGlvbi5jbGVhcigpOwogCi0gICAgICAgICAgICBmb3IgKGF1dG8mIGhh
c2ggOiBtX2JvZHlGaWx0ZXJIYXNoZXNBZGRlZER1cmluZ1N5bmNocm9uaXphdGlvbikKLSAgICAg
ICAgICAgICAgICBib2R5RmlsdGVyLT5hZGQoaGFzaCk7Ci0gICAgICAgICAgICBtX2JvZHlGaWx0
ZXJIYXNoZXNBZGRlZER1cmluZ1N5bmNocm9uaXphdGlvbi5jbGVhcigpOworICAgICAgICAgICAg
Zm9yIChhdXRvJiBoYXNoIDogbV9ib2R5QmxvYkZpbHRlckhhc2hlc0FkZGVkRHVyaW5nU3luY2hy
b25pemF0aW9uKQorICAgICAgICAgICAgICAgIGJvZHlCbG9iRmlsdGVyLT5hZGQoaGFzaCk7Cisg
ICAgICAgICAgICBtX2JvZHlCbG9iRmlsdGVySGFzaGVzQWRkZWREdXJpbmdTeW5jaHJvbml6YXRp
b24uY2xlYXIoKTsKIAogICAgICAgICAgICAgbV9yZWNvcmRGaWx0ZXIgPSBXVEY6Om1vdmUocmVj
b3JkRmlsdGVyKTsKLSAgICAgICAgICAgIG1fYm9keUZpbHRlciA9IFdURjo6bW92ZShib2R5Rmls
dGVyKTsKKyAgICAgICAgICAgIG1fYm9keUJsb2JGaWx0ZXIgPSBXVEY6Om1vdmUoYm9keUJsb2JG
aWx0ZXIpOwogICAgICAgICAgICAgbV9hcHByb3hpbWF0ZVJlY29yZHNTaXplID0gcmVjb3Jkc1Np
emU7CiAgICAgICAgICAgICBtX3N5bmNocm9uaXphdGlvbkluUHJvZ3Jlc3MgPSBmYWxzZTsKICAg
ICAgICAgfSk7CkBAIC0yNzcsNyArMjkwLDcgQEAgdm9pZCBTdG9yYWdlOjpzeW5jaHJvbml6ZSgp
CiAKICAgICAgICAgZGVsZXRlRW1wdHlSZWNvcmRzRGlyZWN0b3JpZXMocmVjb3Jkc1BhdGgoKSk7
CiAKLSAgICAgICAgTE9HKE5ldHdvcmtDYWNoZVN0b3JhZ2UsICIoTmV0d29ya1Byb2Nlc3MpIGNh
Y2hlIHN5bmNocm9uaXphdGlvbiBjb21wbGV0ZWQgc2l6ZT0lenUgY291bnQ9JWQiLCByZWNvcmRz
U2l6ZSwgY291bnQpOworICAgICAgICBMT0coTmV0d29ya0NhY2hlU3RvcmFnZSwgIihOZXR3b3Jr
UHJvY2VzcykgY2FjaGUgc3luY2hyb25pemF0aW9uIGNvbXBsZXRlZCBzaXplPSV6dSBjb3VudD0l
dSIsIHJlY29yZHNTaXplLCBjb3VudCk7CiAgICAgfSk7CiB9CiAKQEAgLTI5OSwzMCArMzEyLDMy
IEBAIGJvb2wgU3RvcmFnZTo6bWF5Q29udGFpbihjb25zdCBLZXkmIGtleSkgY29uc3QKICAgICBy
ZXR1cm4gIW1fcmVjb3JkRmlsdGVyIHx8IG1fcmVjb3JkRmlsdGVyLT5tYXlDb250YWluKGtleS5o
YXNoKCkpOwogfQogCi1TdHJpbmcgU3RvcmFnZTo6cGFydGl0aW9uUGF0aEZvcktleShjb25zdCBL
ZXkmIGtleSkgY29uc3QKK2Jvb2wgU3RvcmFnZTo6bWF5Q29udGFpbkJsb2IoY29uc3QgS2V5JiBr
ZXkpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKCFrZXkucGFydGl0aW9uKCkuaXNFbXB0eSgpKTsKLSAg
ICByZXR1cm4gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHJlY29yZHNQYXRoKCks
IGtleS5wYXJ0aXRpb24oKSk7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBy
ZXR1cm4gIW1fYm9keUJsb2JGaWx0ZXIgfHwgbV9ib2R5QmxvYkZpbHRlci0+bWF5Q29udGFpbihr
ZXkuaGFzaCgpKTsKIH0KIAotc3RhdGljIFN0cmluZyBmaWxlTmFtZUZvcktleShjb25zdCBLZXkm
IGtleSkKK1N0cmluZyBTdG9yYWdlOjpyZWNvcmREaXJlY3RvcnlQYXRoRm9yS2V5KGNvbnN0IEtl
eSYga2V5KSBjb25zdAogewotICAgIHJldHVybiBrZXkuaGFzaEFzU3RyaW5nKCk7CisgICAgQVNT
RVJUKCFrZXkucGFydGl0aW9uKCkuaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQoIWtleS50eXBlKCku
aXNFbXB0eSgpKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50
KFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChyZWNvcmRzUGF0aCgpLCBrZXkucGFy
dGl0aW9uKCkpLCBrZXkudHlwZSgpKTsKIH0KIAogU3RyaW5nIFN0b3JhZ2U6OnJlY29yZFBhdGhG
b3JLZXkoY29uc3QgS2V5JiBrZXkpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFdlYkNvcmU6OnBhdGhC
eUFwcGVuZGluZ0NvbXBvbmVudChwYXJ0aXRpb25QYXRoRm9yS2V5KGtleSksIGZpbGVOYW1lRm9y
S2V5KGtleSkpOworICAgIHJldHVybiBXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQo
cmVjb3JkRGlyZWN0b3J5UGF0aEZvcktleShrZXkpLCBrZXkuaGFzaEFzU3RyaW5nKCkpOwogfQog
Ci1zdGF0aWMgU3RyaW5nIGJvZHlQYXRoRm9yUmVjb3JkUGF0aChjb25zdCBTdHJpbmcmIHJlY29y
ZFBhdGgpCitzdGF0aWMgU3RyaW5nIGJvZHlCbG9iUGF0aEZvclJlY29yZFBhdGgoY29uc3QgU3Ry
aW5nJiByZWNvcmRQYXRoKQogewotICAgIHJldHVybiByZWNvcmRQYXRoICsgYm9keVBvc3RmaXg7
CisgICAgcmV0dXJuIHJlY29yZFBhdGggKyBib2R5QmxvYlN1ZmZpeDsKIH0KIAotU3RyaW5nIFN0
b3JhZ2U6OmJvZHlQYXRoRm9yS2V5KGNvbnN0IEtleSYga2V5KSBjb25zdAorU3RyaW5nIFN0b3Jh
Z2U6OmJvZHlCbG9iUGF0aEZvcktleShjb25zdCBLZXkmIGtleSkgY29uc3QKIHsKLSAgICByZXR1
cm4gYm9keVBhdGhGb3JSZWNvcmRQYXRoKHJlY29yZFBhdGhGb3JLZXkoa2V5KSk7CisgICAgcmV0
dXJuIGJvZHlCbG9iUGF0aEZvclJlY29yZFBhdGgocmVjb3JkUGF0aEZvcktleShrZXkpKTsKIH0K
IAogc3RydWN0IFJlY29yZE1ldGFEYXRhIHsKQEAgLTQ1MiwyMCArNDY3LDIwIEBAIHN0YXRpYyBE
YXRhIGVuY29kZVJlY29yZE1ldGFEYXRhKGNvbnN0IFJlY29yZE1ldGFEYXRhJiBtZXRhRGF0YSkK
IAogT3B0aW9uYWw8QmxvYlN0b3JhZ2U6OkJsb2I+IFN0b3JhZ2U6OnN0b3JlQm9keUFzQmxvYihX
cml0ZU9wZXJhdGlvbiYgd3JpdGVPcGVyYXRpb24pCiB7Ci0gICAgYXV0byBib2R5UGF0aCA9IGJv
ZHlQYXRoRm9yS2V5KHdyaXRlT3BlcmF0aW9uLnJlY29yZC5rZXkpOworICAgIGF1dG8gYm9keUJs
b2JQYXRoID0gYm9keUJsb2JQYXRoRm9yS2V5KHdyaXRlT3BlcmF0aW9uLnJlY29yZC5rZXkpOwog
CiAgICAgLy8gU3RvcmUgdGhlIGJvZHkuCi0gICAgYXV0byBibG9iID0gbV9ibG9iU3RvcmFnZS5h
ZGQoYm9keVBhdGgsIHdyaXRlT3BlcmF0aW9uLnJlY29yZC5ib2R5KTsKKyAgICBhdXRvIGJsb2Ig
PSBtX2Jsb2JTdG9yYWdlLmFkZChib2R5QmxvYlBhdGgsIHdyaXRlT3BlcmF0aW9uLnJlY29yZC5i
b2R5KTsKICAgICBpZiAoYmxvYi5kYXRhLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4geyB9Owog
CiAgICAgKyt3cml0ZU9wZXJhdGlvbi5hY3RpdmVDb3VudDsKIAogICAgIFJ1bkxvb3A6Om1haW4o
KS5kaXNwYXRjaChbdGhpcywgYmxvYiwgJndyaXRlT3BlcmF0aW9uXSB7Ci0gICAgICAgIGlmICht
X2JvZHlGaWx0ZXIpCi0gICAgICAgICAgICBtX2JvZHlGaWx0ZXItPmFkZCh3cml0ZU9wZXJhdGlv
bi5yZWNvcmQua2V5Lmhhc2goKSk7CisgICAgICAgIGlmIChtX2JvZHlCbG9iRmlsdGVyKQorICAg
ICAgICAgICAgbV9ib2R5QmxvYkZpbHRlci0+YWRkKHdyaXRlT3BlcmF0aW9uLnJlY29yZC5rZXku
aGFzaCgpKTsKICAgICAgICAgaWYgKG1fc3luY2hyb25pemF0aW9uSW5Qcm9ncmVzcykKLSAgICAg
ICAgICAgIG1fYm9keUZpbHRlckhhc2hlc0FkZGVkRHVyaW5nU3luY2hyb25pemF0aW9uLmFwcGVu
ZCh3cml0ZU9wZXJhdGlvbi5yZWNvcmQua2V5Lmhhc2goKSk7CisgICAgICAgICAgICBtX2JvZHlC
bG9iRmlsdGVySGFzaGVzQWRkZWREdXJpbmdTeW5jaHJvbml6YXRpb24uYXBwZW5kKHdyaXRlT3Bl
cmF0aW9uLnJlY29yZC5rZXkuaGFzaCgpKTsKIAogICAgICAgICBpZiAod3JpdGVPcGVyYXRpb24u
bWFwcGVkQm9keUhhbmRsZXIpCiAgICAgICAgICAgICB3cml0ZU9wZXJhdGlvbi5tYXBwZWRCb2R5
SGFuZGxlcihibG9iLmRhdGEpOwpAQCAtNTIzLDcgKzUzOCw3IEBAIHZvaWQgU3RvcmFnZTo6cmVt
b3ZlKGNvbnN0IEtleSYga2V5KQogCiAgICAgc2VyaWFsQmFja2dyb3VuZElPUXVldWUoKS5kaXNw
YXRjaChbdGhpcywga2V5XSB7CiAgICAgICAgIFdlYkNvcmU6OmRlbGV0ZUZpbGUocmVjb3JkUGF0
aEZvcktleShrZXkpKTsKLSAgICAgICAgbV9ibG9iU3RvcmFnZS5yZW1vdmUoYm9keVBhdGhGb3JL
ZXkoa2V5KSk7CisgICAgICAgIG1fYmxvYlN0b3JhZ2UucmVtb3ZlKGJvZHlCbG9iUGF0aEZvcktl
eShrZXkpKTsKICAgICB9KTsKIH0KIApAQCAtNTQ2LDcgKzU2MSw3IEBAIHZvaWQgU3RvcmFnZTo6
ZGlzcGF0Y2hSZWFkT3BlcmF0aW9uKHN0ZDo6dW5pcXVlX3B0cjxSZWFkT3BlcmF0aW9uPiByZWFk
T3BlcmF0aW9uCiAgICAgY29uc3QgYXV0byByZWFkVGltZW91dCA9IDE1MDBfbXM7CiAgICAgbV9y
ZWFkT3BlcmF0aW9uVGltZW91dFRpbWVyLnN0YXJ0T25lU2hvdChyZWFkVGltZW91dCk7CiAKLSAg
ICBib29sIHNob3VsZEdldEJvZHlCbG9iID0gIW1fYm9keUZpbHRlciB8fCBtX2JvZHlGaWx0ZXIt
Pm1heUNvbnRhaW4ocmVhZE9wZXJhdGlvbi5rZXkuaGFzaCgpKTsKKyAgICBib29sIHNob3VsZEdl
dEJvZHlCbG9iID0gbWF5Q29udGFpbkJsb2IocmVhZE9wZXJhdGlvbi5rZXkpOwogCiAgICAgaW9R
dWV1ZSgpLmRpc3BhdGNoKFt0aGlzLCAmcmVhZE9wZXJhdGlvbiwgc2hvdWxkR2V0Qm9keUJsb2Jd
IHsKICAgICAgICAgYXV0byByZWNvcmRQYXRoID0gcmVjb3JkUGF0aEZvcktleShyZWFkT3BlcmF0
aW9uLmtleSk7CkBAIC01NjQsOCArNTc5LDggQEAgdm9pZCBTdG9yYWdlOjpkaXNwYXRjaFJlYWRP
cGVyYXRpb24oc3RkOjp1bmlxdWVfcHRyPFJlYWRPcGVyYXRpb24+IHJlYWRPcGVyYXRpb24KIAog
ICAgICAgICBpZiAoc2hvdWxkR2V0Qm9keUJsb2IpIHsKICAgICAgICAgICAgIC8vIFJlYWQgdGhl
IGJvZHkgYmxvYiBpbiBwYXJhbGxlbCB3aXRoIHRoZSByZWNvcmQgcmVhZC4KLSAgICAgICAgICAg
IGF1dG8gYm9keVBhdGggPSBib2R5UGF0aEZvcktleShyZWFkT3BlcmF0aW9uLmtleSk7Ci0gICAg
ICAgICAgICByZWFkT3BlcmF0aW9uLnJlc3VsdEJvZHlCbG9iID0gbV9ibG9iU3RvcmFnZS5nZXQo
Ym9keVBhdGgpOworICAgICAgICAgICAgYXV0byBib2R5QmxvYlBhdGggPSBib2R5QmxvYlBhdGhG
b3JLZXkocmVhZE9wZXJhdGlvbi5rZXkpOworICAgICAgICAgICAgcmVhZE9wZXJhdGlvbi5yZXN1
bHRCb2R5QmxvYiA9IG1fYmxvYlN0b3JhZ2UuZ2V0KGJvZHlCbG9iUGF0aCk7CiAgICAgICAgICAg
ICBmaW5pc2hSZWFkT3BlcmF0aW9uKHJlYWRPcGVyYXRpb24pOwogICAgICAgICB9CiAgICAgfSk7
CkBAIC02ODEsMTAgKzY5NiwxMCBAQCB2b2lkIFN0b3JhZ2U6OmRpc3BhdGNoV3JpdGVPcGVyYXRp
b24oc3RkOjp1bmlxdWVfcHRyPFdyaXRlT3BlcmF0aW9uPiB3cml0ZU9wZXJhdAogICAgIGFkZFRv
UmVjb3JkRmlsdGVyKHdyaXRlT3BlcmF0aW9uLnJlY29yZC5rZXkpOwogCiAgICAgYmFja2dyb3Vu
ZElPUXVldWUoKS5kaXNwYXRjaChbdGhpcywgJndyaXRlT3BlcmF0aW9uXSB7Ci0gICAgICAgIGF1
dG8gcGFydGl0aW9uUGF0aCA9IHBhcnRpdGlvblBhdGhGb3JLZXkod3JpdGVPcGVyYXRpb24ucmVj
b3JkLmtleSk7CisgICAgICAgIGF1dG8gcmVjb3JkRGlyZWN0b3JQYXRoID0gcmVjb3JkRGlyZWN0
b3J5UGF0aEZvcktleSh3cml0ZU9wZXJhdGlvbi5yZWNvcmQua2V5KTsKICAgICAgICAgYXV0byBy
ZWNvcmRQYXRoID0gcmVjb3JkUGF0aEZvcktleSh3cml0ZU9wZXJhdGlvbi5yZWNvcmQua2V5KTsK
IAotICAgICAgICBXZWJDb3JlOjptYWtlQWxsRGlyZWN0b3JpZXMocGFydGl0aW9uUGF0aCk7Cisg
ICAgICAgIFdlYkNvcmU6Om1ha2VBbGxEaXJlY3RvcmllcyhyZWNvcmREaXJlY3RvclBhdGgpOwog
CiAgICAgICAgICsrd3JpdGVPcGVyYXRpb24uYWN0aXZlQ291bnQ7CiAKQEAgLTc3MCwyOCArNzg1
LDMwIEBAIHZvaWQgU3RvcmFnZTo6c3RvcmUoY29uc3QgUmVjb3JkJiByZWNvcmQsIE1hcHBlZEJv
ZHlIYW5kbGVyJiYgbWFwcGVkQm9keUhhbmRsZXIpCiAgICAgbV93cml0ZU9wZXJhdGlvbkRpc3Bh
dGNoVGltZXIuc3RhcnRPbmVTaG90KGluaXRpYWxXcml0ZURlbGF5KTsKIH0KIAotdm9pZCBTdG9y
YWdlOjp0cmF2ZXJzZShUcmF2ZXJzZUZsYWdzIGZsYWdzLCBUcmF2ZXJzZUhhbmRsZXImJiB0cmF2
ZXJzZUhhbmRsZXIpCit2b2lkIFN0b3JhZ2U6OnRyYXZlcnNlKGNvbnN0IFN0cmluZyYgdHlwZSwg
VHJhdmVyc2VGbGFncyBmbGFncywgVHJhdmVyc2VIYW5kbGVyJiYgdHJhdmVyc2VIYW5kbGVyKQog
ewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgQVNTRVJUKHRyYXZlcnNlSGFu
ZGxlcik7CiAgICAgLy8gQXZvaWQgbm9uLXRocmVhZCBzYWZlIHN0ZDo6ZnVuY3Rpb24gY29waWVz
LgogCi0gICAgYXV0byB0cmF2ZXJzZU9wZXJhdGlvblB0ciA9IHN0ZDo6bWFrZV91bmlxdWU8VHJh
dmVyc2VPcGVyYXRpb24+KGZsYWdzLCBXVEY6Om1vdmUodHJhdmVyc2VIYW5kbGVyKSk7CisgICAg
YXV0byB0cmF2ZXJzZU9wZXJhdGlvblB0ciA9IHN0ZDo6bWFrZV91bmlxdWU8VHJhdmVyc2VPcGVy
YXRpb24+KHR5cGUsIGZsYWdzLCBXVEY6Om1vdmUodHJhdmVyc2VIYW5kbGVyKSk7CiAgICAgYXV0
byYgdHJhdmVyc2VPcGVyYXRpb24gPSAqdHJhdmVyc2VPcGVyYXRpb25QdHI7CiAgICAgbV9hY3Rp
dmVUcmF2ZXJzZU9wZXJhdGlvbnMuYWRkKFdURjo6bW92ZSh0cmF2ZXJzZU9wZXJhdGlvblB0cikp
OwogCiAgICAgaW9RdWV1ZSgpLmRpc3BhdGNoKFt0aGlzLCAmdHJhdmVyc2VPcGVyYXRpb25dIHsK
LSAgICAgICAgdHJhdmVyc2VSZWNvcmRzRmlsZXMocmVjb3Jkc1BhdGgoKSwgW3RoaXMsICZ0cmF2
ZXJzZU9wZXJhdGlvbl0oY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgU3RyaW5nJiBwYXJ0
aXRpb25QYXRoKSB7Ci0gICAgICAgICAgICBpZiAoZmlsZU5hbWUubGVuZ3RoKCkgIT0gS2V5Ojpo
YXNoU3RyaW5nTGVuZ3RoKCkpCisgICAgICAgIHRyYXZlcnNlUmVjb3Jkc0ZpbGVzKHJlY29yZHNQ
YXRoKCksIHRyYXZlcnNlT3BlcmF0aW9uLnR5cGUsIFt0aGlzLCAmdHJhdmVyc2VPcGVyYXRpb25d
KGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IFN0cmluZyYgaGFzaFN0cmluZywgY29uc3Qg
U3RyaW5nJiB0eXBlLCBib29sIGlzQm9keUJsb2IsIGNvbnN0IFN0cmluZyYgcmVjb3JkRGlyZWN0
b3J5UGF0aCkgeworICAgICAgICAgICAgQVNTRVJUKHR5cGUgPT0gdHJhdmVyc2VPcGVyYXRpb24u
dHlwZSk7CisgICAgICAgICAgICBpZiAoaXNCb2R5QmxvYikKICAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICBhdXRvIHJlY29yZFBhdGggPSBXZWJDb3JlOjpwYXRoQnlBcHBlbmRp
bmdDb21wb25lbnQocGFydGl0aW9uUGF0aCwgZmlsZU5hbWUpOworCisgICAgICAgICAgICBhdXRv
IHJlY29yZFBhdGggPSBXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQocmVjb3JkRGly
ZWN0b3J5UGF0aCwgZmlsZU5hbWUpOwogCiAgICAgICAgICAgICBkb3VibGUgd29ydGggPSAtMTsK
ICAgICAgICAgICAgIGlmICh0cmF2ZXJzZU9wZXJhdGlvbi5mbGFncyAmIFRyYXZlcnNlRmxhZzo6
Q29tcHV0ZVdvcnRoKQogICAgICAgICAgICAgICAgIHdvcnRoID0gY29tcHV0ZVJlY29yZFdvcnRo
KGZpbGVUaW1lcyhyZWNvcmRQYXRoKSk7CiAgICAgICAgICAgICB1bnNpZ25lZCBib2R5U2hhcmVD
b3VudCA9IDA7CiAgICAgICAgICAgICBpZiAodHJhdmVyc2VPcGVyYXRpb24uZmxhZ3MgJiBUcmF2
ZXJzZUZsYWc6OlNoYXJlQ291bnQpCi0gICAgICAgICAgICAgICAgYm9keVNoYXJlQ291bnQgPSBt
X2Jsb2JTdG9yYWdlLnNoYXJlQ291bnQoYm9keVBhdGhGb3JSZWNvcmRQYXRoKHJlY29yZFBhdGgp
KTsKKyAgICAgICAgICAgICAgICBib2R5U2hhcmVDb3VudCA9IG1fYmxvYlN0b3JhZ2Uuc2hhcmVD
b3VudChib2R5QmxvYlBhdGhGb3JSZWNvcmRQYXRoKHJlY29yZFBhdGgpKTsKIAogICAgICAgICAg
ICAgc3RkOjp1bmlxdWVfbG9jazxMb2NrPiBsb2NrKHRyYXZlcnNlT3BlcmF0aW9uLmFjdGl2ZU11
dGV4KTsKICAgICAgICAgICAgICsrdHJhdmVyc2VPcGVyYXRpb24uYWN0aXZlQ291bnQ7CkBAIC04
NTYsMjQgKzg3MywyNCBAQCB2b2lkIFN0b3JhZ2U6OnNldENhcGFjaXR5KHNpemVfdCBjYXBhY2l0
eSkKICAgICBzaHJpbmtJZk5lZWRlZCgpOwogfQogCi12b2lkIFN0b3JhZ2U6OmNsZWFyKHN0ZDo6
Y2hyb25vOjpzeXN0ZW1fY2xvY2s6OnRpbWVfcG9pbnQgbW9kaWZpZWRTaW5jZVRpbWUsIHN0ZDo6
ZnVuY3Rpb248dm9pZCAoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgU3RvcmFnZTo6Y2xl
YXIoY29uc3QgU3RyaW5nJiB0eXBlLCBzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjp0aW1lX3Bv
aW50IG1vZGlmaWVkU2luY2VUaW1lLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICBMT0coTmV0
d29ya0NhY2hlU3RvcmFnZSwgIihOZXR3b3JrUHJvY2VzcykgY2xlYXJpbmcgY2FjaGUiKTsKIAog
ICAgIGlmIChtX3JlY29yZEZpbHRlcikKICAgICAgICAgbV9yZWNvcmRGaWx0ZXItPmNsZWFyKCk7
Ci0gICAgaWYgKG1fYm9keUZpbHRlcikKLSAgICAgICAgbV9ib2R5RmlsdGVyLT5jbGVhcigpOwor
ICAgIGlmIChtX2JvZHlCbG9iRmlsdGVyKQorICAgICAgICBtX2JvZHlCbG9iRmlsdGVyLT5jbGVh
cigpOwogICAgIG1fYXBwcm94aW1hdGVSZWNvcmRzU2l6ZSA9IDA7CiAKICAgICAvLyBBdm9pZCBu
b24tdGhyZWFkIHNhZmUgc3RkOjpmdW5jdGlvbiBjb3BpZXMuCiAgICAgYXV0byogY29tcGxldGlv
bkhhbmRsZXJQdHIgPSBjb21wbGV0aW9uSGFuZGxlciA/IG5ldyBzdGQ6OmZ1bmN0aW9uPHZvaWQg
KCk+KFdURjo6bW92ZShjb21wbGV0aW9uSGFuZGxlcikpIDogbnVsbHB0cjsKLQotICAgIGlvUXVl
dWUoKS5kaXNwYXRjaChbdGhpcywgbW9kaWZpZWRTaW5jZVRpbWUsIGNvbXBsZXRpb25IYW5kbGVy
UHRyXSB7CisgICAgU3RyaW5nQ2FwdHVyZSB0eXBlQ2FwdHVyZSh0eXBlKTsKKyAgICBpb1F1ZXVl
KCkuZGlzcGF0Y2goW3RoaXMsIG1vZGlmaWVkU2luY2VUaW1lLCBjb21wbGV0aW9uSGFuZGxlclB0
ciwgdHlwZUNhcHR1cmVdIHsKICAgICAgICAgYXV0byByZWNvcmRzUGF0aCA9IHRoaXMtPnJlY29y
ZHNQYXRoKCk7Ci0gICAgICAgIHRyYXZlcnNlUmVjb3Jkc0ZpbGVzKHJlY29yZHNQYXRoLCBbbW9k
aWZpZWRTaW5jZVRpbWVdKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IFN0cmluZyYgcGFy
dGl0aW9uUGF0aCkgewotICAgICAgICAgICAgYXV0byBmaWxlUGF0aCA9IFdlYkNvcmU6OnBhdGhC
eUFwcGVuZGluZ0NvbXBvbmVudChwYXJ0aXRpb25QYXRoLCBmaWxlTmFtZSk7CisgICAgICAgIHRy
YXZlcnNlUmVjb3Jkc0ZpbGVzKHJlY29yZHNQYXRoLCB0eXBlQ2FwdHVyZS5zdHJpbmcoKSwgW21v
ZGlmaWVkU2luY2VUaW1lXShjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBjb25zdCBTdHJpbmcmIGhh
c2hTdHJpbmcsIGNvbnN0IFN0cmluZyYgdHlwZSwgYm9vbCBpc0JvZHlCbG9iLCBjb25zdCBTdHJp
bmcmIHJlY29yZERpcmVjdG9yeVBhdGgpIHsKKyAgICAgICAgICAgIGF1dG8gZmlsZVBhdGggPSBX
ZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQocmVjb3JkRGlyZWN0b3J5UGF0aCwgZmls
ZU5hbWUpOwogICAgICAgICAgICAgaWYgKG1vZGlmaWVkU2luY2VUaW1lID4gc3RkOjpjaHJvbm86
OnN5c3RlbV9jbG9jazo6dGltZV9wb2ludDo6bWluKCkpIHsKICAgICAgICAgICAgICAgICBhdXRv
IHRpbWVzID0gZmlsZVRpbWVzKGZpbGVQYXRoKTsKICAgICAgICAgICAgICAgICBpZiAodGltZXMu
bW9kaWZpY2F0aW9uIDwgbW9kaWZpZWRTaW5jZVRpbWUpCkBAIC04ODQsNyArOTAxLDcgQEAgdm9p
ZCBTdG9yYWdlOjpjbGVhcihzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjp0aW1lX3BvaW50IG1v
ZGlmaWVkU2luY2VUaW1lLCBzdGQKIAogICAgICAgICBkZWxldGVFbXB0eVJlY29yZHNEaXJlY3Rv
cmllcyhyZWNvcmRzUGF0aCk7CiAKLSAgICAgICAgLy8gVGhpcyBjbGVhbnMgdW5yZWZlcmVuY2Vz
IGJsb2JzLgorICAgICAgICAvLyBUaGlzIGNsZWFucyB1bnJlZmVyZW5jZWQgYmxvYnMuCiAgICAg
ICAgIG1fYmxvYlN0b3JhZ2Uuc3luY2hyb25pemUoKTsKIAogICAgICAgICBpZiAoY29tcGxldGlv
bkhhbmRsZXJQdHIpIHsKQEAgLTk1MCwxNCArOTY3LDE2IEBAIHZvaWQgU3RvcmFnZTo6c2hyaW5r
KCkKIAogICAgIGJhY2tncm91bmRJT1F1ZXVlKCkuZGlzcGF0Y2goW3RoaXNdIHsKICAgICAgICAg
YXV0byByZWNvcmRzUGF0aCA9IHRoaXMtPnJlY29yZHNQYXRoKCk7Ci0gICAgICAgIHRyYXZlcnNl
UmVjb3Jkc0ZpbGVzKHJlY29yZHNQYXRoLCBbdGhpc10oY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwg
Y29uc3QgU3RyaW5nJiBwYXJ0aXRpb25QYXRoKSB7Ci0gICAgICAgICAgICBpZiAoZmlsZU5hbWUu
bGVuZ3RoKCkgIT0gS2V5OjpoYXNoU3RyaW5nTGVuZ3RoKCkpCisgICAgICAgIFN0cmluZyBhbnlU
eXBlOworICAgICAgICB0cmF2ZXJzZVJlY29yZHNGaWxlcyhyZWNvcmRzUGF0aCwgYW55VHlwZSwg
W3RoaXNdKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IFN0cmluZyYgaGFzaFN0cmluZywg
Y29uc3QgU3RyaW5nJiB0eXBlLCBib29sIGlzQm9keUJsb2IsIGNvbnN0IFN0cmluZyYgcmVjb3Jk
RGlyZWN0b3J5UGF0aCkgeworICAgICAgICAgICAgaWYgKGlzQm9keUJsb2IpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgYXV0byByZWNvcmRQYXRoID0gV2ViQ29yZTo6cGF0
aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHBhcnRpdGlvblBhdGgsIGZpbGVOYW1lKTsKLSAgICAgICAg
ICAgIGF1dG8gYm9keVBhdGggPSBib2R5UGF0aEZvclJlY29yZFBhdGgocmVjb3JkUGF0aCk7CisK
KyAgICAgICAgICAgIGF1dG8gcmVjb3JkUGF0aCA9IFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0Nv
bXBvbmVudChyZWNvcmREaXJlY3RvcnlQYXRoLCBmaWxlTmFtZSk7CisgICAgICAgICAgICBhdXRv
IGJvZHlCbG9iUGF0aCA9IGJvZHlCbG9iUGF0aEZvclJlY29yZFBhdGgocmVjb3JkUGF0aCk7CiAK
ICAgICAgICAgICAgIGF1dG8gdGltZXMgPSBmaWxlVGltZXMocmVjb3JkUGF0aCk7Ci0gICAgICAg
ICAgICB1bnNpZ25lZCBib2R5U2hhcmVDb3VudCA9IG1fYmxvYlN0b3JhZ2Uuc2hhcmVDb3VudChi
b2R5UGF0aCk7CisgICAgICAgICAgICB1bnNpZ25lZCBib2R5U2hhcmVDb3VudCA9IG1fYmxvYlN0
b3JhZ2Uuc2hhcmVDb3VudChib2R5QmxvYlBhdGgpOwogICAgICAgICAgICAgYXV0byBwcm9iYWJp
bGl0eSA9IGRlbGV0aW9uUHJvYmFiaWxpdHkodGltZXMsIGJvZHlTaGFyZUNvdW50KTsKIAogICAg
ICAgICAgICAgYm9vbCBzaG91bGREZWxldGUgPSByYW5kb21OdW1iZXIoKSA8IHByb2JhYmlsaXR5
OwpAQCAtOTY2LDcgKzk4NSw3IEBAIHZvaWQgU3RvcmFnZTo6c2hyaW5rKCkKIAogICAgICAgICAg
ICAgaWYgKHNob3VsZERlbGV0ZSkgewogICAgICAgICAgICAgICAgIFdlYkNvcmU6OmRlbGV0ZUZp
bGUocmVjb3JkUGF0aCk7Ci0gICAgICAgICAgICAgICAgbV9ibG9iU3RvcmFnZS5yZW1vdmUoYm9k
eVBhdGgpOworICAgICAgICAgICAgICAgIG1fYmxvYlN0b3JhZ2UucmVtb3ZlKGJvZHlCbG9iUGF0
aCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0pOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmgKaW5kZXgg
MzZkYzFkOWEyZjNiZmJmMzllOGExMzI2N2Q4MGQ4NGM1NzZlYTY3Mi4uMjU1NmQxNWFkNzJlOTZh
MjRlOTllZThmMThmMWVhMDBiOThhODBiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5oCisrKyBiL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuaApAQCAtNjUsNyAr
NjUsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzdG9yZShjb25zdCBSZWNvcmQmLCBNYXBwZWRCb2R5
SGFuZGxlciYmKTsKIAogICAgIHZvaWQgcmVtb3ZlKGNvbnN0IEtleSYpOwotICAgIHZvaWQgY2xl
YXIoc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6dGltZV9wb2ludCBtb2RpZmllZFNpbmNlVGlt
ZSwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKTsKKyAgICB2b2lk
IGNsZWFyKGNvbnN0IFN0cmluZyYgdHlwZSwgc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6dGlt
ZV9wb2ludCBtb2RpZmllZFNpbmNlVGltZSwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKTsKIAogICAgIHN0cnVjdCBSZWNvcmRJbmZvIHsKICAgICAgICAgc2l6ZV90
IGJvZHlTaXplOwpAQCAtODAsMTMgKzgwLDEzIEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIHVuc2ln
bmVkIFRyYXZlcnNlRmxhZ3M7CiAgICAgdHlwZWRlZiBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGNvbnN0
IFJlY29yZCosIGNvbnN0IFJlY29yZEluZm8mKT4gVHJhdmVyc2VIYW5kbGVyOwogICAgIC8vIE51
bGwgcmVjb3JkIHNpZ25hbHMgZW5kLgotICAgIHZvaWQgdHJhdmVyc2UoVHJhdmVyc2VGbGFncywg
VHJhdmVyc2VIYW5kbGVyJiYpOworICAgIHZvaWQgdHJhdmVyc2UoY29uc3QgU3RyaW5nJiB0eXBl
LCBUcmF2ZXJzZUZsYWdzLCBUcmF2ZXJzZUhhbmRsZXImJik7CiAKICAgICB2b2lkIHNldENhcGFj
aXR5KHNpemVfdCk7CiAgICAgc2l6ZV90IGNhcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9jYXBh
Y2l0eTsgfQogICAgIHNpemVfdCBhcHByb3hpbWF0ZVNpemUoKSBjb25zdDsKIAotICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCB2ZXJzaW9uID0gNDsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
dmVyc2lvbiA9IDU7CiAKICAgICBTdHJpbmcgYmFzZVBhdGgoKSBjb25zdDsKICAgICBTdHJpbmcg
dmVyc2lvblBhdGgoKSBjb25zdDsKQEAgLTk3LDkgKzk3LDkgQEAgcHVibGljOgogcHJpdmF0ZToK
ICAgICBTdG9yYWdlKGNvbnN0IFN0cmluZyYgZGlyZWN0b3J5UGF0aCk7CiAKLSAgICBTdHJpbmcg
cGFydGl0aW9uUGF0aEZvcktleShjb25zdCBLZXkmKSBjb25zdDsKKyAgICBTdHJpbmcgcmVjb3Jk
RGlyZWN0b3J5UGF0aEZvcktleShjb25zdCBLZXkmKSBjb25zdDsKICAgICBTdHJpbmcgcmVjb3Jk
UGF0aEZvcktleShjb25zdCBLZXkmKSBjb25zdDsKLSAgICBTdHJpbmcgYm9keVBhdGhGb3JLZXko
Y29uc3QgS2V5JikgY29uc3Q7CisgICAgU3RyaW5nIGJvZHlCbG9iUGF0aEZvcktleShjb25zdCBL
ZXkmKSBjb25zdDsKIAogICAgIHZvaWQgc3luY2hyb25pemUoKTsKICAgICB2b2lkIGRlbGV0ZU9s
ZFZlcnNpb25zKCk7CkBAIC0xMjksNiArMTI5LDcgQEAgcHJpdmF0ZToKICAgICBXb3JrUXVldWUm
IHNlcmlhbEJhY2tncm91bmRJT1F1ZXVlKCkgeyByZXR1cm4gbV9zZXJpYWxCYWNrZ3JvdW5kSU9R
dWV1ZS5nZXQoKTsgfQogCiAgICAgYm9vbCBtYXlDb250YWluKGNvbnN0IEtleSYpIGNvbnN0Owor
ICAgIGJvb2wgbWF5Q29udGFpbkJsb2IoY29uc3QgS2V5JikgY29uc3Q7CiAKICAgICB2b2lkIGFk
ZFRvUmVjb3JkRmlsdGVyKGNvbnN0IEtleSYpOwogCkBAIC0xNDEsMTMgKzE0MiwxMyBAQCBwcml2
YXRlOgogICAgIC8vIDJeMTggYml0IGZpbHRlciBjYW4gc3VwcG9ydCB1cCB0byAyNjAwMCBlbnRy
aWVzIHdpdGggZmFsc2UgcG9zaXRpdmUgcmF0ZSA8IDElLgogICAgIHVzaW5nIENvbnRlbnRzRmls
dGVyID0gQmxvb21GaWx0ZXI8MTg+OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxDb250ZW50c0ZpbHRl
cj4gbV9yZWNvcmRGaWx0ZXI7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPENvbnRlbnRzRmlsdGVyPiBt
X2JvZHlGaWx0ZXI7CisgICAgc3RkOjp1bmlxdWVfcHRyPENvbnRlbnRzRmlsdGVyPiBtX2JvZHlC
bG9iRmlsdGVyOwogCiAgICAgYm9vbCBtX3N5bmNocm9uaXphdGlvbkluUHJvZ3Jlc3MgeyBmYWxz
ZSB9OwogICAgIGJvb2wgbV9zaHJpbmtJblByb2dyZXNzIHsgZmFsc2UgfTsKIAogICAgIFZlY3Rv
cjxLZXk6Okhhc2hUeXBlPiBtX3JlY29yZEZpbHRlckhhc2hlc0FkZGVkRHVyaW5nU3luY2hyb25p
emF0aW9uOwotICAgIFZlY3RvcjxLZXk6Okhhc2hUeXBlPiBtX2JvZHlGaWx0ZXJIYXNoZXNBZGRl
ZER1cmluZ1N5bmNocm9uaXphdGlvbjsKKyAgICBWZWN0b3I8S2V5OjpIYXNoVHlwZT4gbV9ib2R5
QmxvYkZpbHRlckhhc2hlc0FkZGVkRHVyaW5nU3luY2hyb25pemF0aW9uOwogCiAgICAgc3RhdGlj
IGNvbnN0IGludCBtYXhpbXVtUmV0cmlldmVQcmlvcml0eSA9IDQ7CiAgICAgRGVxdWU8c3RkOjp1
bmlxdWVfcHRyPFJlYWRPcGVyYXRpb24+PiBtX3BlbmRpbmdSZWFkT3BlcmF0aW9uc0J5UHJpb3Jp
dHlbbWF4aW11bVJldHJpZXZlUHJpb3JpdHkgKyAxXTsKQEAgLTE2OSw3ICsxNzAsNyBAQCBwcml2
YXRlOgogfTsKIAogLy8gRklYTUU6IFJlbW92ZSwgdXNlZCBieSBOZXR3b3JrQ2FjaGVTdGF0aXN0
aWNzIG9ubHkuCi12b2lkIHRyYXZlcnNlUmVjb3Jkc0ZpbGVzKGNvbnN0IFN0cmluZyYgcmVjb3Jk
c1BhdGgsIGNvbnN0IHN0ZDo6ZnVuY3Rpb248dm9pZCAoY29uc3QgU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJik+Jik7Cit2b2lkIHRyYXZlcnNlUmVjb3Jkc0ZpbGVzKGNvbnN0IFN0cmluZyYgcmVjb3Jk
c1BhdGgsIGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3Qgc3RkOjpmdW5jdGlvbjx2b2lkIChjb25z
dCBTdHJpbmcmIGZpbGVOYW1lLCBjb25zdCBTdHJpbmcmIGhhc2hTdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgdHlwZSwgYm9vbCBpc0JvZHlCbG9iLCBjb25zdCBTdHJpbmcmIHJlY29yZERpcmVjdG9yeVBh
dGgpPiYpOwogCiB9CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263496</attachid>
            <date>2015-10-19 11:26:48 -0700</date>
            <delta_ts>2015-10-20 15:22:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150221-20151019112606.patch</filename>
            <type>text/plain</type>
            <size>32579</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkxMjk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggY2JkN2VjOGM2MzNhZGVi
NmNmYTg1MGMyNjZlMDUwMGE4YWUzMzJkOS4uMzEzNWU3Yjc5MmFhMTUyMzg5ZDk5MDI3YjdiN2Vh
YzNmYWYxMWI4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDE1LTEwLTE2ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgW1dLMl0gR2VuZXJhbGl6ZSBO
ZXR3b3JrQ2FjaGVTdG9yYWdlIEFQSSBzbyBpdCBjYW4gc3RvcmUgZGlmZmVyZW50IHR5cGVzIG9m
IG1ldGFkYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTAyMjEKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzIzMTQ5NzcxPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IERhcmluIEFkbGVyIGFuZCBBbnR0aSBLb2l2aXN0by4KKworICAgICAgICBHZW5l
cmFsaXplIE5ldHdvcmtDYWNoZVN0b3JhZ2UgQVBJIHNvIGl0IGNhbiBzdG9yZSBkaWZmZXJlbnQg
dHlwZXMgb2YKKyAgICAgICAgbWV0YWRhdGEgYWxvbmdzaWRlIHRoZSBuZXR3b3JrIHJlc291cmNl
cy4gVGhpcyBpcyBhIHByZS1yZXF1aXJlbWVudCB0bworICAgICAgICBtYWtpbmcgb3VyIE5ldHdv
cmtDYWNoZSBzbWFydGVyIGJ5IHN0b3JpbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlCisgICAgICAg
IHJlc291cmNlcy4KKworICAgICAgICBUbyBrZWVwIHRoZSBjb2RlIHNpbXBsZSwgdGhlIGVudHJ5
IHR5cGUgaXMgbm93IHBhcnQgb2YgdGhlIGVudHJ5IGtleSBhbmQKKyAgICAgICAgd2Ugc3RvcmUg
cmVjb3JkcyBvZiBhIHNwZWNpZmljIHR5cGUgaW4gYSAndHlwZScgc3ViZm9sZGVyLiBUaGUgY2Fj
aGUKKyAgICAgICAgc3RydWN0dXJlIGxvb2tzIGxpa2Ugc286CisgICAgICAgIC0gV2ViS2l0Q2Fj
aGUvVmVyc2lvbiA1L1tQYXJ0aXRpb25dL1tUeXBlXS9bSGFzaF0KKyAgICAgICAgLSBXZWJLaXRD
YWNoZS9WZXJzaW9uIDUvW1BhcnRpdGlvbl0vW1R5cGVdL1tIYXNoXS1ibG9iIChPcHRpb25hbCkK
KworICAgICAgICBFeGlzdGluZyBjYWNoZSBlbnRyaWVzIG5vdyB0aGF0IHRoZSAncmVzb3VyY2Un
IHR5cGUgYXMgdGhlc2UgYXJlIG5ldHdvcmsKKyAgICAgICAgcmVzb3VyY2VzLgorCisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNwcDoKKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVLZXkuY3BwOgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUtleS5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZVN0YXRpc3RpY3MuY3BwOgorICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuY3BwOgorICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuaDoKKwogMjAxNS0xMC0xOSAgQ2FybG9zIEdh
cmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gQVNTRVJU
SU9OIEZBSUxFRDogcGFyZW50IGluIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybURldGFjaCgp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3Jr
Q2FjaGUuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlLmNwcAppbmRleCBhZjg3NDkzNTU1MWRhZDU0NjYwMTBmZWEyYTY5M2UzNWY5M2U4M2FiLi40
MDQzMTdiMGQ2NTc4NDY1OTgzMTVkYTBkZjNjZjgwOWE1NjkxOGY5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHAKQEAgLTM5
LDYgKzM5LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVxdWVzdC5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXNwb25zZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2hhcmVk
QnVmZmVyLmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvTmV2
ZXJEZXN0cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0J1aWxkZXIuaD4KQEAgLTUwLDYgKzUxLDEzIEBACiBuYW1lc3BhY2UgV2ViS2l0
IHsKIG5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgewogCitzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5n
JiByZXNvdXJjZVR5cGUoKQoreworICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVhZCgpKTsKKyAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbWljU3RyaW5nPiByZXNvdXJjZSgicmVz
b3VyY2UiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICByZXR1cm4g
cmVzb3VyY2U7Cit9CisKIENhY2hlJiBzaW5nbGV0b24oKQogewogICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxDYWNoZT4gaW5zdGFuY2U7CkBAIC0xMTMsNyArMTIxLDcgQEAgc3RhdGljIEtleSBt
YWtlQ2FjaGVLZXkoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogICAg
IC8vIEZJWE1FOiBUaGlzIGltcGxlbWVudHMgbWluaW1hbCBSYW5nZSBoZWFkZXIgZGlzayBjYWNo
ZSBzdXBwb3J0LiBXZSBkb24ndCBwYXJzZQogICAgIC8vIHJhbmdlcyBzbyBvbmx5IHRoZSBzYW1l
IGV4YWN0IHJhbmdlIHJlcXVlc3Qgd2lsbCBiZSBzZXJ2ZWQgZnJvbSB0aGUgY2FjaGUuCiAgICAg
U3RyaW5nIHJhbmdlID0gcmVxdWVzdC5odHRwSGVhZGVyRmllbGQoV2ViQ29yZTo6SFRUUEhlYWRl
ck5hbWU6OlJhbmdlKTsKLSAgICByZXR1cm4geyBwYXJ0aXRpb24sIHJhbmdlLCByZXF1ZXN0LnVy
bCgpLnN0cmluZygpIH07CisgICAgcmV0dXJuIHsgcGFydGl0aW9uLCByZXNvdXJjZVR5cGUoKSwg
cmFuZ2UsIHJlcXVlc3QudXJsKCkuc3RyaW5nKCkgfTsKIH0KIAogc3RhdGljIFN0cmluZyBoZWFk
ZXJWYWx1ZUZvclZhcnkoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBj
b25zdCBTdHJpbmcmIGhlYWRlck5hbWUpCkBAIC00NzIsNyArNDgwLDcgQEAgdm9pZCBDYWNoZTo6
dHJhdmVyc2Uoc3RkOjpmdW5jdGlvbjx2b2lkIChjb25zdCBFbnRyeSopPiYmIHRyYXZlcnNlSGFu
ZGxlcikKIHsKICAgICBBU1NFUlQoaXNFbmFibGVkKCkpOwogCi0gICAgbV9zdG9yYWdlLT50cmF2
ZXJzZSgwLCBbdHJhdmVyc2VIYW5kbGVyXShjb25zdCBTdG9yYWdlOjpSZWNvcmQqIHJlY29yZCwg
Y29uc3QgU3RvcmFnZTo6UmVjb3JkSW5mbyYpIHsKKyAgICBtX3N0b3JhZ2UtPnRyYXZlcnNlKHJl
c291cmNlVHlwZSgpLCAwLCBbdHJhdmVyc2VIYW5kbGVyXShjb25zdCBTdG9yYWdlOjpSZWNvcmQq
IHJlY29yZCwgY29uc3QgU3RvcmFnZTo6UmVjb3JkSW5mbyYpIHsKICAgICAgICAgaWYgKCFyZWNv
cmQpIHsKICAgICAgICAgICAgIHRyYXZlcnNlSGFuZGxlcihudWxscHRyKTsKICAgICAgICAgICAg
IHJldHVybjsKQEAgLTUwOSw3ICs1MTcsNyBAQCB2b2lkIENhY2hlOjpkdW1wQ29udGVudHNUb0Zp
bGUoKQogICAgIFRvdGFscyB0b3RhbHM7CiAgICAgYXV0byBmbGFncyA9IFN0b3JhZ2U6OlRyYXZl
cnNlRmxhZzo6Q29tcHV0ZVdvcnRoIHwgU3RvcmFnZTo6VHJhdmVyc2VGbGFnOjpTaGFyZUNvdW50
OwogICAgIHNpemVfdCBjYXBhY2l0eSA9IG1fc3RvcmFnZS0+Y2FwYWNpdHkoKTsKLSAgICBtX3N0
b3JhZ2UtPnRyYXZlcnNlKGZsYWdzLCBbZmQsIHRvdGFscywgY2FwYWNpdHldKGNvbnN0IFN0b3Jh
Z2U6OlJlY29yZCogcmVjb3JkLCBjb25zdCBTdG9yYWdlOjpSZWNvcmRJbmZvJiBpbmZvKSBtdXRh
YmxlIHsKKyAgICBtX3N0b3JhZ2UtPnRyYXZlcnNlKHJlc291cmNlVHlwZSgpLCBmbGFncywgW2Zk
LCB0b3RhbHMsIGNhcGFjaXR5XShjb25zdCBTdG9yYWdlOjpSZWNvcmQqIHJlY29yZCwgY29uc3Qg
U3RvcmFnZTo6UmVjb3JkSW5mbyYgaW5mbykgbXV0YWJsZSB7CiAgICAgICAgIGlmICghcmVjb3Jk
KSB7CiAgICAgICAgICAgICBTdHJpbmdCdWlsZGVyIGVwaWxvZ3VlOwogICAgICAgICAgICAgZXBp
bG9ndWUuYXBwZW5kTGl0ZXJhbCgie31cbl0sXG4iKTsKQEAgLTU2Nyw3ICs1NzUsOCBAQCB2b2lk
IENhY2hlOjpjbGVhcihzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjp0aW1lX3BvaW50IG1vZGlm
aWVkU2luY2UsIHN0ZDo6ZnVuYwogICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goY29t
cGxldGlvbkhhbmRsZXIpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIG1fc3RvcmFnZS0+
Y2xlYXIobW9kaWZpZWRTaW5jZSwgV1RGOjptb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAg
U3RyaW5nIGFueVR5cGU7CisgICAgbV9zdG9yYWdlLT5jbGVhcihhbnlUeXBlLCBtb2RpZmllZFNp
bmNlLCBXVEY6Om1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIAogICAgIGRlbGV0ZUR1bXBGaWxl
KCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGVLZXkuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUv
TmV0d29ya0NhY2hlS2V5LmNwcAppbmRleCAwYjkxYmFlZjk4YzZmNWEyMTEyOGRjOWU3ZGQ4Mzhi
Zjc5ZWJmNzBlLi5iODI4ZDQ5NWNlMTgwZWI2ZWNlMzIyODc5YmE5YzU5MzdmMWUwNTVlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVL
ZXkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZUtleS5jcHAKQEAgLTM4LDE0ICszOCwxNiBAQCBuYW1lc3BhY2UgTmV0d29ya0NhY2hlIHsK
IAogS2V5OjpLZXkoY29uc3QgS2V5JiBvKQogICAgIDogbV9wYXJ0aXRpb24oby5tX3BhcnRpdGlv
bi5pc29sYXRlZENvcHkoKSkKKyAgICAsIG1fdHlwZShvLm1fdHlwZS5pc29sYXRlZENvcHkoKSkK
ICAgICAsIG1faWRlbnRpZmllcihvLm1faWRlbnRpZmllci5pc29sYXRlZENvcHkoKSkKICAgICAs
IG1fcmFuZ2Uoby5tX3JhbmdlLmlzb2xhdGVkQ29weSgpKQogICAgICwgbV9oYXNoKG8ubV9oYXNo
KQogewogfQogCi1LZXk6OktleShjb25zdCBTdHJpbmcmIHBhcnRpdGlvbiwgY29uc3QgU3RyaW5n
JiByYW5nZSwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyKQorS2V5OjpLZXkoY29uc3QgU3RyaW5n
JiBwYXJ0aXRpb24sIGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiByYW5nZSwgY29u
c3QgU3RyaW5nJiBpZGVudGlmaWVyKQogICAgIDogbV9wYXJ0aXRpb24ocGFydGl0aW9uLmlzb2xh
dGVkQ29weSgpKQorICAgICwgbV90eXBlKHR5cGUuaXNvbGF0ZWRDb3B5KCkpCiAgICAgLCBtX2lk
ZW50aWZpZXIoaWRlbnRpZmllci5pc29sYXRlZENvcHkoKSkKICAgICAsIG1fcmFuZ2UocmFuZ2Uu
aXNvbGF0ZWRDb3B5KCkpCiAgICAgLCBtX2hhc2goY29tcHV0ZUhhc2goKSkKQEAgLTU1LDYgKzU3
LDcgQEAgS2V5OjpLZXkoY29uc3QgU3RyaW5nJiBwYXJ0aXRpb24sIGNvbnN0IFN0cmluZyYgcmFu
Z2UsIGNvbnN0IFN0cmluZyYgaWRlbnRpZmllcikKIEtleSYgS2V5OjpvcGVyYXRvcj0oY29uc3Qg
S2V5JiBvdGhlcikKIHsKICAgICBtX3BhcnRpdGlvbiA9IG90aGVyLm1fcGFydGl0aW9uLmlzb2xh
dGVkQ29weSgpOworICAgIG1fdHlwZSA9IG90aGVyLm1fdHlwZS5pc29sYXRlZENvcHkoKTsKICAg
ICBtX2lkZW50aWZpZXIgPSBvdGhlci5tX2lkZW50aWZpZXIuaXNvbGF0ZWRDb3B5KCk7CiAgICAg
bV9yYW5nZSA9IG90aGVyLm1fcmFuZ2UuaXNvbGF0ZWRDb3B5KCk7CiAgICAgbV9oYXNoID0gb3Ro
ZXIubV9oYXNoOwpAQCAtODMsNiArODYsNyBAQCBLZXk6Okhhc2hUeXBlIEtleTo6Y29tcHV0ZUhh
c2goKSBjb25zdAogICAgIC8vIFNIQTEganVzdCBoYXBwZW5zIHRvIGJlIHN1aXRhYmx5IHNpemVk
LCBmYXN0IGFuZCBhdmFpbGFibGUuCiAgICAgU0hBMSBzaGExOwogICAgIGhhc2hTdHJpbmcoc2hh
MSwgbV9wYXJ0aXRpb24pOworICAgIGhhc2hTdHJpbmcoc2hhMSwgbV90eXBlKTsKICAgICBoYXNo
U3RyaW5nKHNoYTEsIG1faWRlbnRpZmllcik7CiAgICAgaGFzaFN0cmluZyhzaGExLCBtX3Jhbmdl
KTsKICAgICBTSEExOjpEaWdlc3QgaGFzaDsKQEAgLTEyNCwxMiArMTI4LDEzIEBAIGJvb2wgS2V5
OjpzdHJpbmdUb0hhc2goY29uc3QgU3RyaW5nJiBzdHJpbmcsIEhhc2hUeXBlJiBoYXNoKQogCiBi
b29sIEtleTo6b3BlcmF0b3I9PShjb25zdCBLZXkmIG90aGVyKSBjb25zdAogewotICAgIHJldHVy
biBtX2hhc2ggPT0gb3RoZXIubV9oYXNoICYmIG1fcGFydGl0aW9uID09IG90aGVyLm1fcGFydGl0
aW9uICYmIG1faWRlbnRpZmllciA9PSBvdGhlci5tX2lkZW50aWZpZXIgJiYgbV9yYW5nZSA9PSBv
dGhlci5tX3JhbmdlOworICAgIHJldHVybiBtX2hhc2ggPT0gb3RoZXIubV9oYXNoICYmIG1fcGFy
dGl0aW9uID09IG90aGVyLm1fcGFydGl0aW9uICYmIG1fdHlwZSA9PSBvdGhlci5tX3R5cGUgJiYg
bV9pZGVudGlmaWVyID09IG90aGVyLm1faWRlbnRpZmllciAmJiBtX3JhbmdlID09IG90aGVyLm1f
cmFuZ2U7CiB9CiAKIHZvaWQgS2V5OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsK
ICAgICBlbmNvZGVyIDw8IG1fcGFydGl0aW9uOworICAgIGVuY29kZXIgPDwgbV90eXBlOwogICAg
IGVuY29kZXIgPDwgbV9pZGVudGlmaWVyOwogICAgIGVuY29kZXIgPDwgbV9yYW5nZTsKICAgICBl
bmNvZGVyIDw8IG1faGFzaDsKQEAgLTEzNyw3ICsxNDIsNyBAQCB2b2lkIEtleTo6ZW5jb2RlKEVu
Y29kZXImIGVuY29kZXIpIGNvbnN0CiAKIGJvb2wgS2V5OjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
ciwgS2V5JiBrZXkpCiB7Ci0gICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlKGtleS5tX3BhcnRpdGlv
bikgJiYgZGVjb2Rlci5kZWNvZGUoa2V5Lm1faWRlbnRpZmllcikgJiYgZGVjb2Rlci5kZWNvZGUo
a2V5Lm1fcmFuZ2UpICYmIGRlY29kZXIuZGVjb2RlKGtleS5tX2hhc2gpOworICAgIHJldHVybiBk
ZWNvZGVyLmRlY29kZShrZXkubV9wYXJ0aXRpb24pICYmIGRlY29kZXIuZGVjb2RlKGtleS5tX3R5
cGUpICYmIGRlY29kZXIuZGVjb2RlKGtleS5tX2lkZW50aWZpZXIpICYmIGRlY29kZXIuZGVjb2Rl
KGtleS5tX3JhbmdlKSAmJiBkZWNvZGVyLmRlY29kZShrZXkubV9oYXNoKTsKIH0KIAogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hl
S2V5LmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVL
ZXkuaAppbmRleCAyY2RhZTMwNWZiMTIzN2E1YzFiOGFhYzM2N2U0MTIzMWY2YWI4NzIyLi5lNjMz
YjY1MTQwZTRkY2IwN2Q4YmM3MDkwZTk4OGVhMDQ0NzIxYTI3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVLZXkuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVLZXkuaApAQCAtNDQs
NyArNDQsNyBAQCBwdWJsaWM6CiAgICAgS2V5KCkgeyB9CiAgICAgS2V5KGNvbnN0IEtleSYpOwog
ICAgIEtleShLZXkmJikgPSBkZWZhdWx0OwotICAgIEtleShjb25zdCBTdHJpbmcmIHBhcnRpdGlv
biwgY29uc3QgU3RyaW5nJiByYW5nZSwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyKTsKKyAgICBL
ZXkoY29uc3QgU3RyaW5nJiBwYXJ0aXRpb24sIGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3Ry
aW5nJiByYW5nZSwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyKTsKIAogICAgIEtleSYgb3BlcmF0
b3I9KGNvbnN0IEtleSYpOwogICAgIEtleSYgb3BlcmF0b3I9KEtleSYmKSA9IGRlZmF1bHQ7CkBA
IC01Myw2ICs1Myw3IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IFN0cmluZyYgcGFydGl0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9wYXJ0aXRpb247IH0KICAgICBjb25zdCBTdHJpbmcmIGlkZW50aWZp
ZXIoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KKyAgICBjb25zdCBTdHJpbmcmIHR5
cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KIAogICAgIEhhc2hUeXBlIGhhc2goKSBjb25z
dCB7IHJldHVybiBtX2hhc2g7IH0KIApAQCAtNzEsNiArNzIsNyBAQCBwcml2YXRlOgogICAgIEhh
c2hUeXBlIGNvbXB1dGVIYXNoKCkgY29uc3Q7CiAKICAgICBTdHJpbmcgbV9wYXJ0aXRpb247Cisg
ICAgU3RyaW5nIG1fdHlwZTsKICAgICBTdHJpbmcgbV9pZGVudGlmaWVyOwogICAgIFN0cmluZyBt
X3JhbmdlOwogICAgIEhhc2hUeXBlIG1faGFzaDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0YXRpc3RpY3MuY3BwIGIvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RhdGlzdGljcy5jcHAK
aW5kZXggZmJlMTQ1ZWFhNWJjNDEyNTNiZjc4YWVmZmQ3MjUxNWU1OGYxNTI5Ny4uNzMxMDcyZGNk
MjMwOTlmOWIzZjkwYjgzMWUyOTI2OTY5YzRhZDE0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RhdGlzdGljcy5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RhdGlzdGlj
cy5jcHAKQEAgLTE0NCw3ICsxNDQsMTAgQEAgdm9pZCBTdGF0aXN0aWNzOjpib290c3RyYXBGcm9t
TmV0d29ya0NhY2hlKGNvbnN0IFN0cmluZyYgbmV0d29ya0NhY2hlUGF0aCkKICAgICBMT0coTmV0
d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSBCb290c3RyYXBwaW5nIHRoZSBuZXR3b3JrIGNh
Y2hlIHN0YXRpc3RpY3MgZGF0YWJhc2UgZnJvbSB0aGUgbmV0d29yayBjYWNoZS4uLiIpOwogCiAg
ICAgVmVjdG9yPFN0cmluZ0NhcHR1cmU+IGhhc2hlczsKLSAgICB0cmF2ZXJzZVJlY29yZHNGaWxl
cyhuZXR3b3JrQ2FjaGVQYXRoLCBbJmhhc2hlc10oY29uc3QgU3RyaW5nJiBoYXNoU3RyaW5nLCBj
b25zdCBTdHJpbmcmKSB7CisgICAgdHJhdmVyc2VSZWNvcmRzRmlsZXMobmV0d29ya0NhY2hlUGF0
aCwgQVNDSUlMaXRlcmFsKCJyZXNvdXJjZSIpLCBbJmhhc2hlc10oY29uc3QgU3RyaW5nJiBmaWxl
TmFtZSwgY29uc3QgU3RyaW5nJiBoYXNoU3RyaW5nLCBjb25zdCBTdHJpbmcmIHR5cGUsIGJvb2wg
aXNCb2R5QmxvYiwgY29uc3QgU3RyaW5nJiByZWNvcmREaXJlY3RvcnlQYXRoKSB7CisgICAgICAg
IGlmIChpc0JvZHlCbG9iKQorICAgICAgICAgICAgcmV0dXJuOworCiAgICAgICAgIEtleTo6SGFz
aFR5cGUgaGFzaDsKICAgICAgICAgaWYgKCFLZXk6OnN0cmluZ1RvSGFzaChoYXNoU3RyaW5nLCBo
YXNoKSkKICAgICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuY3BwIGIvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHAKaW5kZXggZmE1
YmE3ZGEyMDZmZDA5OWEzOWY0ODllODgyNzQ5MmE0MTAxMjU5NS4uMDBhNzUxMDA0MTM4MjUyZDZk
NTk4N2IyZWE1YmYwODM4M2RlNzU5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHAKQEAgLTQ2LDcg
KzQ2LDcgQEAgbmFtZXNwYWNlIE5ldHdvcmtDYWNoZSB7CiBzdGF0aWMgY29uc3QgY2hhciB2ZXJz
aW9uRGlyZWN0b3J5UHJlZml4W10gPSAiVmVyc2lvbiAiOwogc3RhdGljIGNvbnN0IGNoYXIgcmVj
b3Jkc0RpcmVjdG9yeU5hbWVbXSA9ICJSZWNvcmRzIjsKIHN0YXRpYyBjb25zdCBjaGFyIGJsb2Jz
RGlyZWN0b3J5TmFtZVtdID0gIkJsb2JzIjsKLXN0YXRpYyBjb25zdCBjaGFyIGJvZHlQb3N0Zml4
W10gPSAiLWJvZHkiOworc3RhdGljIGNvbnN0IGNoYXIgYmxvYlN1ZmZpeFtdID0gIi1ibG9iIjsK
IAogc3RhdGljIGRvdWJsZSBjb21wdXRlUmVjb3JkV29ydGgoRmlsZVRpbWVzKTsKIApAQCAtMTEz
LDExICsxMTMsMTMgQEAgcHVibGljOgogc3RydWN0IFN0b3JhZ2U6OlRyYXZlcnNlT3BlcmF0aW9u
IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBUcmF2ZXJzZU9w
ZXJhdGlvbihUcmF2ZXJzZUZsYWdzIGZsYWdzLCBjb25zdCBUcmF2ZXJzZUhhbmRsZXImIGhhbmRs
ZXIpCi0gICAgICAgIDogZmxhZ3MoZmxhZ3MpCisgICAgVHJhdmVyc2VPcGVyYXRpb24oY29uc3Qg
U3RyaW5nJiB0eXBlLCBUcmF2ZXJzZUZsYWdzIGZsYWdzLCBjb25zdCBUcmF2ZXJzZUhhbmRsZXIm
IGhhbmRsZXIpCisgICAgICAgIDogdHlwZSh0eXBlKQorICAgICAgICAsIGZsYWdzKGZsYWdzKQog
ICAgICAgICAsIGhhbmRsZXIoaGFuZGxlcikKICAgICB7IH0KIAorICAgIGNvbnN0IFN0cmluZyB0
eXBlOwogICAgIGNvbnN0IFRyYXZlcnNlRmxhZ3MgZmxhZ3M7CiAgICAgY29uc3QgVHJhdmVyc2VI
YW5kbGVyIGhhbmRsZXI7CiAKQEAgLTE1MSwyNyArMTUzLDQ5IEBAIHN0YXRpYyBTdHJpbmcgbWFr
ZUJsb2JEaXJlY3RvcnlQYXRoKGNvbnN0IFN0cmluZyYgYmFzZURpcmVjdG9yeVBhdGgpCiAgICAg
cmV0dXJuIFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChtYWtlVmVyc2lvbmVkRGly
ZWN0b3J5UGF0aChiYXNlRGlyZWN0b3J5UGF0aCksIGJsb2JzRGlyZWN0b3J5TmFtZSk7CiB9CiAK
LXZvaWQgdHJhdmVyc2VSZWNvcmRzRmlsZXMoY29uc3QgU3RyaW5nJiByZWNvcmRzUGF0aCwgY29u
c3Qgc3RkOjpmdW5jdGlvbjx2b2lkIChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKT4mIGZ1
bmN0aW9uKQordm9pZCB0cmF2ZXJzZVJlY29yZHNGaWxlcyhjb25zdCBTdHJpbmcmIHJlY29yZHNQ
YXRoLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVHlwZSwgY29uc3Qgc3RkOjpmdW5jdGlvbjx2b2lk
IChjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBjb25zdCBTdHJpbmcmIGhhc2hTdHJpbmcsIGNvbnN0
IFN0cmluZyYgdHlwZSwgYm9vbCBpc0JvZHlCbG9iLCBjb25zdCBTdHJpbmcmIHJlY29yZERpcmVj
dG9yeVBhdGgpPiYgZnVuY3Rpb24pCiB7Ci0gICAgdHJhdmVyc2VEaXJlY3RvcnkocmVjb3Jkc1Bh
dGgsIFsmcmVjb3Jkc1BhdGgsICZmdW5jdGlvbl0oY29uc3QgU3RyaW5nJiBzdWJkaXJOYW1lLCBE
aXJlY3RvcnlFbnRyeVR5cGUgdHlwZSkgewotICAgICAgICBpZiAodHlwZSAhPSBEaXJlY3RvcnlF
bnRyeVR5cGU6OkRpcmVjdG9yeSkKKyAgICB0cmF2ZXJzZURpcmVjdG9yeShyZWNvcmRzUGF0aCwg
WyZyZWNvcmRzUGF0aCwgJmZ1bmN0aW9uLCAmZXhwZWN0ZWRUeXBlXShjb25zdCBTdHJpbmcmIHBh
cnRpdGlvbk5hbWUsIERpcmVjdG9yeUVudHJ5VHlwZSBlbnRyeVR5cGUpIHsKKyAgICAgICAgaWYg
KGVudHJ5VHlwZSAhPSBEaXJlY3RvcnlFbnRyeVR5cGU6OkRpcmVjdG9yeSkKICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgU3RyaW5nIHBhcnRpdGlvblBhdGggPSBXZWJDb3JlOjpwYXRoQnlB
cHBlbmRpbmdDb21wb25lbnQocmVjb3Jkc1BhdGgsIHN1YmRpck5hbWUpOwotICAgICAgICB0cmF2
ZXJzZURpcmVjdG9yeShwYXJ0aXRpb25QYXRoLCBbJmZ1bmN0aW9uLCAmcGFydGl0aW9uUGF0aF0o
Y29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgRGlyZWN0b3J5RW50cnlUeXBlIHR5cGUpIHsKLSAgICAg
ICAgICAgIGlmICh0eXBlICE9IERpcmVjdG9yeUVudHJ5VHlwZTo6RmlsZSkKKyAgICAgICAgU3Ry
aW5nIHBhcnRpdGlvblBhdGggPSBXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQocmVj
b3Jkc1BhdGgsIHBhcnRpdGlvbk5hbWUpOworICAgICAgICB0cmF2ZXJzZURpcmVjdG9yeShwYXJ0
aXRpb25QYXRoLCBbJmZ1bmN0aW9uLCAmcGFydGl0aW9uUGF0aCwgJmV4cGVjdGVkVHlwZV0oY29u
c3QgU3RyaW5nJiBhY3R1YWxUeXBlLCBEaXJlY3RvcnlFbnRyeVR5cGUgZW50cnlUeXBlKSB7Cisg
ICAgICAgICAgICBpZiAoZW50cnlUeXBlICE9IERpcmVjdG9yeUVudHJ5VHlwZTo6RGlyZWN0b3J5
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGlmICghYWN0dWFsVHlwZS5p
c0VtcHR5KCkgJiYgZXhwZWN0ZWRUeXBlICE9IGFjdHVhbFR5cGUpCiAgICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgZnVuY3Rpb24oZmlsZU5hbWUsIHBhcnRpdGlvblBhdGgpOwor
ICAgICAgICAgICAgU3RyaW5nIHJlY29yZERpcmVjdG9yeVBhdGggPSBXZWJDb3JlOjpwYXRoQnlB
cHBlbmRpbmdDb21wb25lbnQocGFydGl0aW9uUGF0aCwgYWN0dWFsVHlwZSk7CisgICAgICAgICAg
ICB0cmF2ZXJzZURpcmVjdG9yeShwYXJ0aXRpb25QYXRoLCBbJmZ1bmN0aW9uLCAmcmVjb3JkRGly
ZWN0b3J5UGF0aCwgJmFjdHVhbFR5cGVdKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIERpcmVjdG9y
eUVudHJ5VHlwZSBlbnRyeVR5cGUpIHsKKyAgICAgICAgICAgICAgICBpZiAoZW50cnlUeXBlICE9
IERpcmVjdG9yeUVudHJ5VHlwZTo6RmlsZSB8fCBmaWxlTmFtZS5sZW5ndGgoKSA8IEtleTo6aGFz
aFN0cmluZ0xlbmd0aCgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
ICAgICAgICBTdHJpbmcgaGFzaFN0cmluZyA9IGZpbGVOYW1lLnN1YnN0cmluZygwLCBLZXk6Omhh
c2hTdHJpbmdMZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgYXV0byBpc0JvZHlCbG9iID0gZmls
ZU5hbWUubGVuZ3RoKCkgPiBLZXk6Omhhc2hTdHJpbmdMZW5ndGgoKSAmJiBmaWxlTmFtZS5lbmRz
V2l0aChibG9iU3VmZml4KTsKKyAgICAgICAgICAgICAgICBmdW5jdGlvbihmaWxlTmFtZSwgaGFz
aFN0cmluZywgYWN0dWFsVHlwZSwgaXNCb2R5QmxvYiwgcmVjb3JkRGlyZWN0b3J5UGF0aCk7Cisg
ICAgICAgICAgICB9KTsKICAgICAgICAgfSk7CiAgICAgfSk7CiB9CiAKIHN0YXRpYyB2b2lkIGRl
bGV0ZUVtcHR5UmVjb3Jkc0RpcmVjdG9yaWVzKGNvbnN0IFN0cmluZyYgcmVjb3Jkc1BhdGgpCiB7
Ci0gICAgdHJhdmVyc2VEaXJlY3RvcnkocmVjb3Jkc1BhdGgsIFsmcmVjb3Jkc1BhdGhdKGNvbnN0
IFN0cmluZyYgc3ViZGlyTmFtZSwgRGlyZWN0b3J5RW50cnlUeXBlIHR5cGUpIHsKKyAgICB0cmF2
ZXJzZURpcmVjdG9yeShyZWNvcmRzUGF0aCwgWyZyZWNvcmRzUGF0aF0oY29uc3QgU3RyaW5nJiBw
YXJ0aXRpb25OYW1lLCBEaXJlY3RvcnlFbnRyeVR5cGUgdHlwZSkgewogICAgICAgICBpZiAodHlw
ZSAhPSBEaXJlY3RvcnlFbnRyeVR5cGU6OkRpcmVjdG9yeSkKICAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICAvLyBEZWxldGUgW3R5cGVdIHN1Yi1mb2xkZXJzLgorICAgICAgICBTdHJpbmcg
cGFydGl0aW9uUGF0aCA9IFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChyZWNvcmRz
UGF0aCwgcGFydGl0aW9uTmFtZSk7CisgICAgICAgIHRyYXZlcnNlRGlyZWN0b3J5KHBhcnRpdGlv
blBhdGgsIFsmcGFydGl0aW9uUGF0aF0oY29uc3QgU3RyaW5nJiBzdWJkaXJOYW1lLCBEaXJlY3Rv
cnlFbnRyeVR5cGUgZW50cnlUeXBlKSB7CisgICAgICAgICAgICBpZiAoZW50cnlUeXBlICE9IERp
cmVjdG9yeUVudHJ5VHlwZTo6RGlyZWN0b3J5KQorICAgICAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICAgICAgLy8gTGV0IHN5c3RlbSBmaWd1cmUgb3V0IGlmIGl0IGlzIHJlYWxseSBlbXB0
eS4KKyAgICAgICAgICAgIFdlYkNvcmU6OmRlbGV0ZUVtcHR5RGlyZWN0b3J5KFdlYkNvcmU6OnBh
dGhCeUFwcGVuZGluZ0NvbXBvbmVudChwYXJ0aXRpb25QYXRoLCBzdWJkaXJOYW1lKSk7CisgICAg
ICAgIH0pOworCisgICAgICAgIC8vIERlbGV0ZSBbUGFydGl0aW9uXSBmb2xkZXJzLgogICAgICAg
ICAvLyBMZXQgc3lzdGVtIGZpZ3VyZSBvdXQgaWYgaXQgaXMgcmVhbGx5IGVtcHR5LgotICAgICAg
ICBXZWJDb3JlOjpkZWxldGVFbXB0eURpcmVjdG9yeShXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdD
b21wb25lbnQocmVjb3Jkc1BhdGgsIHN1YmRpck5hbWUpKTsKKyAgICAgICAgV2ViQ29yZTo6ZGVs
ZXRlRW1wdHlEaXJlY3RvcnkoV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHJlY29y
ZHNQYXRoLCBwYXJ0aXRpb25OYW1lKSk7CiAgICAgfSk7CiB9CiAKQEAgLTIyNSwxNCArMjQ5LDEz
IEBAIHZvaWQgU3RvcmFnZTo6c3luY2hyb25pemUoKQogCiAgICAgYmFja2dyb3VuZElPUXVldWUo
KS5kaXNwYXRjaChbdGhpc10gewogICAgICAgICBhdXRvIHJlY29yZEZpbHRlciA9IHN0ZDo6bWFr
ZV91bmlxdWU8Q29udGVudHNGaWx0ZXI+KCk7Ci0gICAgICAgIGF1dG8gYm9keUZpbHRlciA9IHN0
ZDo6bWFrZV91bmlxdWU8Q29udGVudHNGaWx0ZXI+KCk7CisgICAgICAgIGF1dG8gYmxvYkZpbHRl
ciA9IHN0ZDo6bWFrZV91bmlxdWU8Q29udGVudHNGaWx0ZXI+KCk7CiAgICAgICAgIHNpemVfdCBy
ZWNvcmRzU2l6ZSA9IDA7CiAgICAgICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKLSAgICAgICAgdHJh
dmVyc2VSZWNvcmRzRmlsZXMocmVjb3Jkc1BhdGgoKSwgWyZyZWNvcmRGaWx0ZXIsICZib2R5Rmls
dGVyLCAmcmVjb3Jkc1NpemUsICZjb3VudF0oY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgY29uc3Qg
U3RyaW5nJiBwYXJ0aXRpb25QYXRoKSB7Ci0gICAgICAgICAgICBhdXRvIGZpbGVQYXRoID0gV2Vi
Q29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHBhcnRpdGlvblBhdGgsIGZpbGVOYW1lKTsK
KyAgICAgICAgU3RyaW5nIGFueVR5cGU7CisgICAgICAgIHRyYXZlcnNlUmVjb3Jkc0ZpbGVzKHJl
Y29yZHNQYXRoKCksIGFueVR5cGUsIFsmcmVjb3JkRmlsdGVyLCAmYmxvYkZpbHRlciwgJnJlY29y
ZHNTaXplLCAmY291bnRdKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IFN0cmluZyYgaGFz
aFN0cmluZywgY29uc3QgU3RyaW5nJiB0eXBlLCBib29sIGlzQm9keUJsb2IsIGNvbnN0IFN0cmlu
ZyYgcmVjb3JkRGlyZWN0b3J5UGF0aCkgeworICAgICAgICAgICAgYXV0byBmaWxlUGF0aCA9IFdl
YkNvcmU6OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChyZWNvcmREaXJlY3RvcnlQYXRoLCBmaWxl
TmFtZSk7CiAKLSAgICAgICAgICAgIGJvb2wgaXNCb2R5ID0gZmlsZU5hbWUuZW5kc1dpdGgoYm9k
eVBvc3RmaXgpOwotICAgICAgICAgICAgU3RyaW5nIGhhc2hTdHJpbmcgPSBpc0JvZHkgPyBmaWxl
TmFtZS5zdWJzdHJpbmcoMCwgS2V5OjpoYXNoU3RyaW5nTGVuZ3RoKCkpIDogZmlsZU5hbWU7CiAg
ICAgICAgICAgICBLZXk6Okhhc2hUeXBlIGhhc2g7CiAgICAgICAgICAgICBpZiAoIUtleTo6c3Ry
aW5nVG9IYXNoKGhhc2hTdHJpbmcsIGhhc2gpKSB7CiAgICAgICAgICAgICAgICAgV2ViQ29yZTo6
ZGVsZXRlRmlsZShmaWxlUGF0aCk7CkBAIC0yNDQsMzEgKzI2NywzMyBAQCB2b2lkIFN0b3JhZ2U6
OnN5bmNocm9uaXplKCkKICAgICAgICAgICAgICAgICBXZWJDb3JlOjpkZWxldGVGaWxlKGZpbGVQ
YXRoKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBpZiAoaXNCb2R5KSB7Ci0gICAgICAgICAgICAgICAgYm9keUZpbHRlci0+YWRkKGhhc2gpOwor
CisgICAgICAgICAgICBpZiAoaXNCb2R5QmxvYikgeworICAgICAgICAgICAgICAgIGJsb2JGaWx0
ZXItPmFkZChoYXNoKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CisK
ICAgICAgICAgICAgIHJlY29yZEZpbHRlci0+YWRkKGhhc2gpOwogICAgICAgICAgICAgcmVjb3Jk
c1NpemUgKz0gZmlsZVNpemU7CiAgICAgICAgICAgICArK2NvdW50OwogICAgICAgICB9KTsKIAog
ICAgICAgICBhdXRvKiByZWNvcmRGaWx0ZXJQdHIgPSByZWNvcmRGaWx0ZXIucmVsZWFzZSgpOwot
ICAgICAgICBhdXRvKiBib2R5RmlsdGVyUHRyID0gYm9keUZpbHRlci5yZWxlYXNlKCk7Ci0gICAg
ICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbdGhpcywgcmVjb3JkRmlsdGVyUHRyLCBib2R5
RmlsdGVyUHRyLCByZWNvcmRzU2l6ZV0geworICAgICAgICBhdXRvKiBibG9iRmlsdGVyUHRyID0g
YmxvYkZpbHRlci5yZWxlYXNlKCk7CisgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChb
dGhpcywgcmVjb3JkRmlsdGVyUHRyLCBibG9iRmlsdGVyUHRyLCByZWNvcmRzU2l6ZV0gewogICAg
ICAgICAgICAgYXV0byByZWNvcmRGaWx0ZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8Q29udGVudHNGaWx0
ZXI+KHJlY29yZEZpbHRlclB0cik7Ci0gICAgICAgICAgICBhdXRvIGJvZHlGaWx0ZXIgPSBzdGQ6
OnVuaXF1ZV9wdHI8Q29udGVudHNGaWx0ZXI+KGJvZHlGaWx0ZXJQdHIpOworICAgICAgICAgICAg
YXV0byBibG9iRmlsdGVyID0gc3RkOjp1bmlxdWVfcHRyPENvbnRlbnRzRmlsdGVyPihibG9iRmls
dGVyUHRyKTsKIAotICAgICAgICAgICAgZm9yIChhdXRvJiBoYXNoIDogbV9yZWNvcmRGaWx0ZXJI
YXNoZXNBZGRlZER1cmluZ1N5bmNocm9uaXphdGlvbikKLSAgICAgICAgICAgICAgICByZWNvcmRG
aWx0ZXItPmFkZChoYXNoKTsKKyAgICAgICAgICAgIGZvciAoYXV0byYgcmVjb3JkRmlsdGVyS2V5
IDogbV9yZWNvcmRGaWx0ZXJIYXNoZXNBZGRlZER1cmluZ1N5bmNocm9uaXphdGlvbikKKyAgICAg
ICAgICAgICAgICByZWNvcmRGaWx0ZXItPmFkZChyZWNvcmRGaWx0ZXJLZXkpOwogICAgICAgICAg
ICAgbV9yZWNvcmRGaWx0ZXJIYXNoZXNBZGRlZER1cmluZ1N5bmNocm9uaXphdGlvbi5jbGVhcigp
OwogCi0gICAgICAgICAgICBmb3IgKGF1dG8mIGhhc2ggOiBtX2JvZHlGaWx0ZXJIYXNoZXNBZGRl
ZER1cmluZ1N5bmNocm9uaXphdGlvbikKLSAgICAgICAgICAgICAgICBib2R5RmlsdGVyLT5hZGQo
aGFzaCk7Ci0gICAgICAgICAgICBtX2JvZHlGaWx0ZXJIYXNoZXNBZGRlZER1cmluZ1N5bmNocm9u
aXphdGlvbi5jbGVhcigpOworICAgICAgICAgICAgZm9yIChhdXRvJiBoYXNoIDogbV9ibG9iRmls
dGVySGFzaGVzQWRkZWREdXJpbmdTeW5jaHJvbml6YXRpb24pCisgICAgICAgICAgICAgICAgYmxv
YkZpbHRlci0+YWRkKGhhc2gpOworICAgICAgICAgICAgbV9ibG9iRmlsdGVySGFzaGVzQWRkZWRE
dXJpbmdTeW5jaHJvbml6YXRpb24uY2xlYXIoKTsKIAogICAgICAgICAgICAgbV9yZWNvcmRGaWx0
ZXIgPSBXVEY6Om1vdmUocmVjb3JkRmlsdGVyKTsKLSAgICAgICAgICAgIG1fYm9keUZpbHRlciA9
IFdURjo6bW92ZShib2R5RmlsdGVyKTsKKyAgICAgICAgICAgIG1fYmxvYkZpbHRlciA9IFdURjo6
bW92ZShibG9iRmlsdGVyKTsKICAgICAgICAgICAgIG1fYXBwcm94aW1hdGVSZWNvcmRzU2l6ZSA9
IHJlY29yZHNTaXplOwogICAgICAgICAgICAgbV9zeW5jaHJvbml6YXRpb25JblByb2dyZXNzID0g
ZmFsc2U7CiAgICAgICAgIH0pOwpAQCAtMjc3LDcgKzMwMiw3IEBAIHZvaWQgU3RvcmFnZTo6c3lu
Y2hyb25pemUoKQogCiAgICAgICAgIGRlbGV0ZUVtcHR5UmVjb3Jkc0RpcmVjdG9yaWVzKHJlY29y
ZHNQYXRoKCkpOwogCi0gICAgICAgIExPRyhOZXR3b3JrQ2FjaGVTdG9yYWdlLCAiKE5ldHdvcmtQ
cm9jZXNzKSBjYWNoZSBzeW5jaHJvbml6YXRpb24gY29tcGxldGVkIHNpemU9JXp1IGNvdW50PSVk
IiwgcmVjb3Jkc1NpemUsIGNvdW50KTsKKyAgICAgICAgTE9HKE5ldHdvcmtDYWNoZVN0b3JhZ2Us
ICIoTmV0d29ya1Byb2Nlc3MpIGNhY2hlIHN5bmNocm9uaXphdGlvbiBjb21wbGV0ZWQgc2l6ZT0l
enUgY291bnQ9JXUiLCByZWNvcmRzU2l6ZSwgY291bnQpOwogICAgIH0pOwogfQogCkBAIC0yOTks
MzAgKzMyNCwzMiBAQCBib29sIFN0b3JhZ2U6Om1heUNvbnRhaW4oY29uc3QgS2V5JiBrZXkpIGNv
bnN0CiAgICAgcmV0dXJuICFtX3JlY29yZEZpbHRlciB8fCBtX3JlY29yZEZpbHRlci0+bWF5Q29u
dGFpbihrZXkuaGFzaCgpKTsKIH0KIAotU3RyaW5nIFN0b3JhZ2U6OnBhcnRpdGlvblBhdGhGb3JL
ZXkoY29uc3QgS2V5JiBrZXkpIGNvbnN0Citib29sIFN0b3JhZ2U6Om1heUNvbnRhaW5CbG9iKGNv
bnN0IEtleSYga2V5KSBjb25zdAogewotICAgIEFTU0VSVCgha2V5LnBhcnRpdGlvbigpLmlzRW1w
dHkoKSk7Ci0gICAgcmV0dXJuIFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChyZWNv
cmRzUGF0aCgpLCBrZXkucGFydGl0aW9uKCkpOworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4o
KSk7CisgICAgcmV0dXJuICFtX2Jsb2JGaWx0ZXIgfHwgbV9ibG9iRmlsdGVyLT5tYXlDb250YWlu
KGtleS5oYXNoKCkpOwogfQogCi1zdGF0aWMgU3RyaW5nIGZpbGVOYW1lRm9yS2V5KGNvbnN0IEtl
eSYga2V5KQorU3RyaW5nIFN0b3JhZ2U6OnJlY29yZERpcmVjdG9yeVBhdGhGb3JLZXkoY29uc3Qg
S2V5JiBrZXkpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGtleS5oYXNoQXNTdHJpbmcoKTsKKyAgICBB
U1NFUlQoIWtleS5wYXJ0aXRpb24oKS5pc0VtcHR5KCkpOworICAgIEFTU0VSVCgha2V5LnR5cGUo
KS5pc0VtcHR5KCkpOworICAgIHJldHVybiBXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25l
bnQoV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHJlY29yZHNQYXRoKCksIGtleS5w
YXJ0aXRpb24oKSksIGtleS50eXBlKCkpOwogfQogCiBTdHJpbmcgU3RvcmFnZTo6cmVjb3JkUGF0
aEZvcktleShjb25zdCBLZXkmIGtleSkgY29uc3QKIHsKLSAgICByZXR1cm4gV2ViQ29yZTo6cGF0
aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHBhcnRpdGlvblBhdGhGb3JLZXkoa2V5KSwgZmlsZU5hbWVG
b3JLZXkoa2V5KSk7CisgICAgcmV0dXJuIFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVu
dChyZWNvcmREaXJlY3RvcnlQYXRoRm9yS2V5KGtleSksIGtleS5oYXNoQXNTdHJpbmcoKSk7CiB9
CiAKLXN0YXRpYyBTdHJpbmcgYm9keVBhdGhGb3JSZWNvcmRQYXRoKGNvbnN0IFN0cmluZyYgcmVj
b3JkUGF0aCkKK3N0YXRpYyBTdHJpbmcgYmxvYlBhdGhGb3JSZWNvcmRQYXRoKGNvbnN0IFN0cmlu
ZyYgcmVjb3JkUGF0aCkKIHsKLSAgICByZXR1cm4gcmVjb3JkUGF0aCArIGJvZHlQb3N0Zml4Owor
ICAgIHJldHVybiByZWNvcmRQYXRoICsgYmxvYlN1ZmZpeDsKIH0KIAotU3RyaW5nIFN0b3JhZ2U6
OmJvZHlQYXRoRm9yS2V5KGNvbnN0IEtleSYga2V5KSBjb25zdAorU3RyaW5nIFN0b3JhZ2U6OmJs
b2JQYXRoRm9yS2V5KGNvbnN0IEtleSYga2V5KSBjb25zdAogewotICAgIHJldHVybiBib2R5UGF0
aEZvclJlY29yZFBhdGgocmVjb3JkUGF0aEZvcktleShrZXkpKTsKKyAgICByZXR1cm4gYmxvYlBh
dGhGb3JSZWNvcmRQYXRoKHJlY29yZFBhdGhGb3JLZXkoa2V5KSk7CiB9CiAKIHN0cnVjdCBSZWNv
cmRNZXRhRGF0YSB7CkBAIC00NTIsMjAgKzQ3OSwyMCBAQCBzdGF0aWMgRGF0YSBlbmNvZGVSZWNv
cmRNZXRhRGF0YShjb25zdCBSZWNvcmRNZXRhRGF0YSYgbWV0YURhdGEpCiAKIE9wdGlvbmFsPEJs
b2JTdG9yYWdlOjpCbG9iPiBTdG9yYWdlOjpzdG9yZUJvZHlBc0Jsb2IoV3JpdGVPcGVyYXRpb24m
IHdyaXRlT3BlcmF0aW9uKQogewotICAgIGF1dG8gYm9keVBhdGggPSBib2R5UGF0aEZvcktleSh3
cml0ZU9wZXJhdGlvbi5yZWNvcmQua2V5KTsKKyAgICBhdXRvIGJsb2JQYXRoID0gYmxvYlBhdGhG
b3JLZXkod3JpdGVPcGVyYXRpb24ucmVjb3JkLmtleSk7CiAKICAgICAvLyBTdG9yZSB0aGUgYm9k
eS4KLSAgICBhdXRvIGJsb2IgPSBtX2Jsb2JTdG9yYWdlLmFkZChib2R5UGF0aCwgd3JpdGVPcGVy
YXRpb24ucmVjb3JkLmJvZHkpOworICAgIGF1dG8gYmxvYiA9IG1fYmxvYlN0b3JhZ2UuYWRkKGJs
b2JQYXRoLCB3cml0ZU9wZXJhdGlvbi5yZWNvcmQuYm9keSk7CiAgICAgaWYgKGJsb2IuZGF0YS5p
c051bGwoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgICsrd3JpdGVPcGVyYXRpb24uYWN0
aXZlQ291bnQ7CiAKICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3RoaXMsIGJsb2IsICZ3
cml0ZU9wZXJhdGlvbl0gewotICAgICAgICBpZiAobV9ib2R5RmlsdGVyKQotICAgICAgICAgICAg
bV9ib2R5RmlsdGVyLT5hZGQod3JpdGVPcGVyYXRpb24ucmVjb3JkLmtleS5oYXNoKCkpOworICAg
ICAgICBpZiAobV9ibG9iRmlsdGVyKQorICAgICAgICAgICAgbV9ibG9iRmlsdGVyLT5hZGQod3Jp
dGVPcGVyYXRpb24ucmVjb3JkLmtleS5oYXNoKCkpOwogICAgICAgICBpZiAobV9zeW5jaHJvbml6
YXRpb25JblByb2dyZXNzKQotICAgICAgICAgICAgbV9ib2R5RmlsdGVySGFzaGVzQWRkZWREdXJp
bmdTeW5jaHJvbml6YXRpb24uYXBwZW5kKHdyaXRlT3BlcmF0aW9uLnJlY29yZC5rZXkuaGFzaCgp
KTsKKyAgICAgICAgICAgIG1fYmxvYkZpbHRlckhhc2hlc0FkZGVkRHVyaW5nU3luY2hyb25pemF0
aW9uLmFwcGVuZCh3cml0ZU9wZXJhdGlvbi5yZWNvcmQua2V5Lmhhc2goKSk7CiAKICAgICAgICAg
aWYgKHdyaXRlT3BlcmF0aW9uLm1hcHBlZEJvZHlIYW5kbGVyKQogICAgICAgICAgICAgd3JpdGVP
cGVyYXRpb24ubWFwcGVkQm9keUhhbmRsZXIoYmxvYi5kYXRhKTsKQEAgLTUyMyw3ICs1NTAsNyBA
QCB2b2lkIFN0b3JhZ2U6OnJlbW92ZShjb25zdCBLZXkmIGtleSkKIAogICAgIHNlcmlhbEJhY2tn
cm91bmRJT1F1ZXVlKCkuZGlzcGF0Y2goW3RoaXMsIGtleV0gewogICAgICAgICBXZWJDb3JlOjpk
ZWxldGVGaWxlKHJlY29yZFBhdGhGb3JLZXkoa2V5KSk7Ci0gICAgICAgIG1fYmxvYlN0b3JhZ2Uu
cmVtb3ZlKGJvZHlQYXRoRm9yS2V5KGtleSkpOworICAgICAgICBtX2Jsb2JTdG9yYWdlLnJlbW92
ZShibG9iUGF0aEZvcktleShrZXkpKTsKICAgICB9KTsKIH0KIApAQCAtNTQ2LDcgKzU3Myw3IEBA
IHZvaWQgU3RvcmFnZTo6ZGlzcGF0Y2hSZWFkT3BlcmF0aW9uKHN0ZDo6dW5pcXVlX3B0cjxSZWFk
T3BlcmF0aW9uPiByZWFkT3BlcmF0aW9uCiAgICAgY29uc3QgYXV0byByZWFkVGltZW91dCA9IDE1
MDBfbXM7CiAgICAgbV9yZWFkT3BlcmF0aW9uVGltZW91dFRpbWVyLnN0YXJ0T25lU2hvdChyZWFk
VGltZW91dCk7CiAKLSAgICBib29sIHNob3VsZEdldEJvZHlCbG9iID0gIW1fYm9keUZpbHRlciB8
fCBtX2JvZHlGaWx0ZXItPm1heUNvbnRhaW4ocmVhZE9wZXJhdGlvbi5rZXkuaGFzaCgpKTsKKyAg
ICBib29sIHNob3VsZEdldEJvZHlCbG9iID0gbWF5Q29udGFpbkJsb2IocmVhZE9wZXJhdGlvbi5r
ZXkpOwogCiAgICAgaW9RdWV1ZSgpLmRpc3BhdGNoKFt0aGlzLCAmcmVhZE9wZXJhdGlvbiwgc2hv
dWxkR2V0Qm9keUJsb2JdIHsKICAgICAgICAgYXV0byByZWNvcmRQYXRoID0gcmVjb3JkUGF0aEZv
cktleShyZWFkT3BlcmF0aW9uLmtleSk7CkBAIC01NjMsOSArNTkwLDkgQEAgdm9pZCBTdG9yYWdl
OjpkaXNwYXRjaFJlYWRPcGVyYXRpb24oc3RkOjp1bmlxdWVfcHRyPFJlYWRPcGVyYXRpb24+IHJl
YWRPcGVyYXRpb24KICAgICAgICAgfSk7CiAKICAgICAgICAgaWYgKHNob3VsZEdldEJvZHlCbG9i
KSB7Ci0gICAgICAgICAgICAvLyBSZWFkIHRoZSBib2R5IGJsb2IgaW4gcGFyYWxsZWwgd2l0aCB0
aGUgcmVjb3JkIHJlYWQuCi0gICAgICAgICAgICBhdXRvIGJvZHlQYXRoID0gYm9keVBhdGhGb3JL
ZXkocmVhZE9wZXJhdGlvbi5rZXkpOwotICAgICAgICAgICAgcmVhZE9wZXJhdGlvbi5yZXN1bHRC
b2R5QmxvYiA9IG1fYmxvYlN0b3JhZ2UuZ2V0KGJvZHlQYXRoKTsKKyAgICAgICAgICAgIC8vIFJl
YWQgdGhlIGJsb2IgaW4gcGFyYWxsZWwgd2l0aCB0aGUgcmVjb3JkIHJlYWQuCisgICAgICAgICAg
ICBhdXRvIGJsb2JQYXRoID0gYmxvYlBhdGhGb3JLZXkocmVhZE9wZXJhdGlvbi5rZXkpOworICAg
ICAgICAgICAgcmVhZE9wZXJhdGlvbi5yZXN1bHRCb2R5QmxvYiA9IG1fYmxvYlN0b3JhZ2UuZ2V0
KGJsb2JQYXRoKTsKICAgICAgICAgICAgIGZpbmlzaFJlYWRPcGVyYXRpb24ocmVhZE9wZXJhdGlv
bik7CiAgICAgICAgIH0KICAgICB9KTsKQEAgLTU3NCw3ICs2MDEsNyBAQCB2b2lkIFN0b3JhZ2U6
OmRpc3BhdGNoUmVhZE9wZXJhdGlvbihzdGQ6OnVuaXF1ZV9wdHI8UmVhZE9wZXJhdGlvbj4gcmVh
ZE9wZXJhdGlvbgogdm9pZCBTdG9yYWdlOjpmaW5pc2hSZWFkT3BlcmF0aW9uKFJlYWRPcGVyYXRp
b24mIHJlYWRPcGVyYXRpb24pCiB7CiAgICAgQVNTRVJUKHJlYWRPcGVyYXRpb24uYWN0aXZlQ291
bnQpOwotICAgIC8vIFJlY29yZCBhbmQgYm9keSBibG9iIHJlYWRzIG11c3QgZmluaXNoLgorICAg
IC8vIFJlY29yZCBhbmQgYmxvYiByZWFkcyBtdXN0IGZpbmlzaC4KICAgICBpZiAoLS1yZWFkT3Bl
cmF0aW9uLmFjdGl2ZUNvdW50KQogICAgICAgICByZXR1cm47CiAKQEAgLTY4MSwxNyArNzA4LDE3
IEBAIHZvaWQgU3RvcmFnZTo6ZGlzcGF0Y2hXcml0ZU9wZXJhdGlvbihzdGQ6OnVuaXF1ZV9wdHI8
V3JpdGVPcGVyYXRpb24+IHdyaXRlT3BlcmF0CiAgICAgYWRkVG9SZWNvcmRGaWx0ZXIod3JpdGVP
cGVyYXRpb24ucmVjb3JkLmtleSk7CiAKICAgICBiYWNrZ3JvdW5kSU9RdWV1ZSgpLmRpc3BhdGNo
KFt0aGlzLCAmd3JpdGVPcGVyYXRpb25dIHsKLSAgICAgICAgYXV0byBwYXJ0aXRpb25QYXRoID0g
cGFydGl0aW9uUGF0aEZvcktleSh3cml0ZU9wZXJhdGlvbi5yZWNvcmQua2V5KTsKKyAgICAgICAg
YXV0byByZWNvcmREaXJlY3RvclBhdGggPSByZWNvcmREaXJlY3RvcnlQYXRoRm9yS2V5KHdyaXRl
T3BlcmF0aW9uLnJlY29yZC5rZXkpOwogICAgICAgICBhdXRvIHJlY29yZFBhdGggPSByZWNvcmRQ
YXRoRm9yS2V5KHdyaXRlT3BlcmF0aW9uLnJlY29yZC5rZXkpOwogCi0gICAgICAgIFdlYkNvcmU6
Om1ha2VBbGxEaXJlY3RvcmllcyhwYXJ0aXRpb25QYXRoKTsKKyAgICAgICAgV2ViQ29yZTo6bWFr
ZUFsbERpcmVjdG9yaWVzKHJlY29yZERpcmVjdG9yUGF0aCk7CiAKICAgICAgICAgKyt3cml0ZU9w
ZXJhdGlvbi5hY3RpdmVDb3VudDsKIAogICAgICAgICBib29sIHNob3VsZFN0b3JlQXNCbG9iID0g
c2hvdWxkU3RvcmVCb2R5QXNCbG9iKHdyaXRlT3BlcmF0aW9uLnJlY29yZC5ib2R5KTsKLSAgICAg
ICAgYXV0byBib2R5QmxvYiA9IHNob3VsZFN0b3JlQXNCbG9iID8gc3RvcmVCb2R5QXNCbG9iKHdy
aXRlT3BlcmF0aW9uKSA6IE51bGxvcHQ7CisgICAgICAgIGF1dG8gYmxvYiA9IHNob3VsZFN0b3Jl
QXNCbG9iID8gc3RvcmVCb2R5QXNCbG9iKHdyaXRlT3BlcmF0aW9uKSA6IE51bGxvcHQ7CiAKLSAg
ICAgICAgYXV0byByZWNvcmREYXRhID0gZW5jb2RlUmVjb3JkKHdyaXRlT3BlcmF0aW9uLnJlY29y
ZCwgYm9keUJsb2IpOworICAgICAgICBhdXRvIHJlY29yZERhdGEgPSBlbmNvZGVSZWNvcmQod3Jp
dGVPcGVyYXRpb24ucmVjb3JkLCBibG9iKTsKIAogICAgICAgICBhdXRvIGNoYW5uZWwgPSBJT0No
YW5uZWw6Om9wZW4ocmVjb3JkUGF0aCwgSU9DaGFubmVsOjpUeXBlOjpDcmVhdGUpOwogICAgICAg
ICBzaXplX3QgcmVjb3JkU2l6ZSA9IHJlY29yZERhdGEuc2l6ZSgpOwpAQCAtNzcwLDI4ICs3OTcs
MzAgQEAgdm9pZCBTdG9yYWdlOjpzdG9yZShjb25zdCBSZWNvcmQmIHJlY29yZCwgTWFwcGVkQm9k
eUhhbmRsZXImJiBtYXBwZWRCb2R5SGFuZGxlcikKICAgICBtX3dyaXRlT3BlcmF0aW9uRGlzcGF0
Y2hUaW1lci5zdGFydE9uZVNob3QoaW5pdGlhbFdyaXRlRGVsYXkpOwogfQogCi12b2lkIFN0b3Jh
Z2U6OnRyYXZlcnNlKFRyYXZlcnNlRmxhZ3MgZmxhZ3MsIFRyYXZlcnNlSGFuZGxlciYmIHRyYXZl
cnNlSGFuZGxlcikKK3ZvaWQgU3RvcmFnZTo6dHJhdmVyc2UoY29uc3QgU3RyaW5nJiB0eXBlLCBU
cmF2ZXJzZUZsYWdzIGZsYWdzLCBUcmF2ZXJzZUhhbmRsZXImJiB0cmF2ZXJzZUhhbmRsZXIpCiB7
CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICBBU1NFUlQodHJhdmVyc2VIYW5k
bGVyKTsKICAgICAvLyBBdm9pZCBub24tdGhyZWFkIHNhZmUgc3RkOjpmdW5jdGlvbiBjb3BpZXMu
CiAKLSAgICBhdXRvIHRyYXZlcnNlT3BlcmF0aW9uUHRyID0gc3RkOjptYWtlX3VuaXF1ZTxUcmF2
ZXJzZU9wZXJhdGlvbj4oZmxhZ3MsIFdURjo6bW92ZSh0cmF2ZXJzZUhhbmRsZXIpKTsKKyAgICBh
dXRvIHRyYXZlcnNlT3BlcmF0aW9uUHRyID0gc3RkOjptYWtlX3VuaXF1ZTxUcmF2ZXJzZU9wZXJh
dGlvbj4odHlwZSwgZmxhZ3MsIFdURjo6bW92ZSh0cmF2ZXJzZUhhbmRsZXIpKTsKICAgICBhdXRv
JiB0cmF2ZXJzZU9wZXJhdGlvbiA9ICp0cmF2ZXJzZU9wZXJhdGlvblB0cjsKICAgICBtX2FjdGl2
ZVRyYXZlcnNlT3BlcmF0aW9ucy5hZGQoV1RGOjptb3ZlKHRyYXZlcnNlT3BlcmF0aW9uUHRyKSk7
CiAKICAgICBpb1F1ZXVlKCkuZGlzcGF0Y2goW3RoaXMsICZ0cmF2ZXJzZU9wZXJhdGlvbl0gewot
ICAgICAgICB0cmF2ZXJzZVJlY29yZHNGaWxlcyhyZWNvcmRzUGF0aCgpLCBbdGhpcywgJnRyYXZl
cnNlT3BlcmF0aW9uXShjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBjb25zdCBTdHJpbmcmIHBhcnRp
dGlvblBhdGgpIHsKLSAgICAgICAgICAgIGlmIChmaWxlTmFtZS5sZW5ndGgoKSAhPSBLZXk6Omhh
c2hTdHJpbmdMZW5ndGgoKSkKKyAgICAgICAgdHJhdmVyc2VSZWNvcmRzRmlsZXMocmVjb3Jkc1Bh
dGgoKSwgdHJhdmVyc2VPcGVyYXRpb24udHlwZSwgW3RoaXMsICZ0cmF2ZXJzZU9wZXJhdGlvbl0o
Y29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgU3RyaW5nJiBoYXNoU3RyaW5nLCBjb25zdCBT
dHJpbmcmIHR5cGUsIGJvb2wgaXNCb2R5QmxvYiwgY29uc3QgU3RyaW5nJiByZWNvcmREaXJlY3Rv
cnlQYXRoKSB7CisgICAgICAgICAgICBBU1NFUlQodHlwZSA9PSB0cmF2ZXJzZU9wZXJhdGlvbi50
eXBlKTsKKyAgICAgICAgICAgIGlmIChpc0JvZHlCbG9iKQogICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgIGF1dG8gcmVjb3JkUGF0aCA9IFdlYkNvcmU6OnBhdGhCeUFwcGVuZGlu
Z0NvbXBvbmVudChwYXJ0aXRpb25QYXRoLCBmaWxlTmFtZSk7CisKKyAgICAgICAgICAgIGF1dG8g
cmVjb3JkUGF0aCA9IFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChyZWNvcmREaXJl
Y3RvcnlQYXRoLCBmaWxlTmFtZSk7CiAKICAgICAgICAgICAgIGRvdWJsZSB3b3J0aCA9IC0xOwog
ICAgICAgICAgICAgaWYgKHRyYXZlcnNlT3BlcmF0aW9uLmZsYWdzICYgVHJhdmVyc2VGbGFnOjpD
b21wdXRlV29ydGgpCiAgICAgICAgICAgICAgICAgd29ydGggPSBjb21wdXRlUmVjb3JkV29ydGgo
ZmlsZVRpbWVzKHJlY29yZFBhdGgpKTsKICAgICAgICAgICAgIHVuc2lnbmVkIGJvZHlTaGFyZUNv
dW50ID0gMDsKICAgICAgICAgICAgIGlmICh0cmF2ZXJzZU9wZXJhdGlvbi5mbGFncyAmIFRyYXZl
cnNlRmxhZzo6U2hhcmVDb3VudCkKLSAgICAgICAgICAgICAgICBib2R5U2hhcmVDb3VudCA9IG1f
YmxvYlN0b3JhZ2Uuc2hhcmVDb3VudChib2R5UGF0aEZvclJlY29yZFBhdGgocmVjb3JkUGF0aCkp
OworICAgICAgICAgICAgICAgIGJvZHlTaGFyZUNvdW50ID0gbV9ibG9iU3RvcmFnZS5zaGFyZUNv
dW50KGJsb2JQYXRoRm9yUmVjb3JkUGF0aChyZWNvcmRQYXRoKSk7CiAKICAgICAgICAgICAgIHN0
ZDo6dW5pcXVlX2xvY2s8TG9jaz4gbG9jayh0cmF2ZXJzZU9wZXJhdGlvbi5hY3RpdmVNdXRleCk7
CiAgICAgICAgICAgICArK3RyYXZlcnNlT3BlcmF0aW9uLmFjdGl2ZUNvdW50OwpAQCAtODU2LDI0
ICs4ODUsMjQgQEAgdm9pZCBTdG9yYWdlOjpzZXRDYXBhY2l0eShzaXplX3QgY2FwYWNpdHkpCiAg
ICAgc2hyaW5rSWZOZWVkZWQoKTsKIH0KIAotdm9pZCBTdG9yYWdlOjpjbGVhcihzdGQ6OmNocm9u
bzo6c3lzdGVtX2Nsb2NrOjp0aW1lX3BvaW50IG1vZGlmaWVkU2luY2VUaW1lLCBzdGQ6OmZ1bmN0
aW9uPHZvaWQgKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIFN0b3JhZ2U6OmNsZWFyKGNv
bnN0IFN0cmluZyYgdHlwZSwgc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6dGltZV9wb2ludCBt
b2RpZmllZFNpbmNlVGltZSwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgTE9HKE5ldHdvcmtD
YWNoZVN0b3JhZ2UsICIoTmV0d29ya1Byb2Nlc3MpIGNsZWFyaW5nIGNhY2hlIik7CiAKICAgICBp
ZiAobV9yZWNvcmRGaWx0ZXIpCiAgICAgICAgIG1fcmVjb3JkRmlsdGVyLT5jbGVhcigpOwotICAg
IGlmIChtX2JvZHlGaWx0ZXIpCi0gICAgICAgIG1fYm9keUZpbHRlci0+Y2xlYXIoKTsKKyAgICBp
ZiAobV9ibG9iRmlsdGVyKQorICAgICAgICBtX2Jsb2JGaWx0ZXItPmNsZWFyKCk7CiAgICAgbV9h
cHByb3hpbWF0ZVJlY29yZHNTaXplID0gMDsKIAogICAgIC8vIEF2b2lkIG5vbi10aHJlYWQgc2Fm
ZSBzdGQ6OmZ1bmN0aW9uIGNvcGllcy4KICAgICBhdXRvKiBjb21wbGV0aW9uSGFuZGxlclB0ciA9
IGNvbXBsZXRpb25IYW5kbGVyID8gbmV3IHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4oV1RGOjptb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSkgOiBudWxscHRyOwotCi0gICAgaW9RdWV1ZSgpLmRpc3BhdGNo
KFt0aGlzLCBtb2RpZmllZFNpbmNlVGltZSwgY29tcGxldGlvbkhhbmRsZXJQdHJdIHsKKyAgICBT
dHJpbmdDYXB0dXJlIHR5cGVDYXB0dXJlKHR5cGUpOworICAgIGlvUXVldWUoKS5kaXNwYXRjaChb
dGhpcywgbW9kaWZpZWRTaW5jZVRpbWUsIGNvbXBsZXRpb25IYW5kbGVyUHRyLCB0eXBlQ2FwdHVy
ZV0gewogICAgICAgICBhdXRvIHJlY29yZHNQYXRoID0gdGhpcy0+cmVjb3Jkc1BhdGgoKTsKLSAg
ICAgICAgdHJhdmVyc2VSZWNvcmRzRmlsZXMocmVjb3Jkc1BhdGgsIFttb2RpZmllZFNpbmNlVGlt
ZV0oY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgU3RyaW5nJiBwYXJ0aXRpb25QYXRoKSB7
Ci0gICAgICAgICAgICBhdXRvIGZpbGVQYXRoID0gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29t
cG9uZW50KHBhcnRpdGlvblBhdGgsIGZpbGVOYW1lKTsKKyAgICAgICAgdHJhdmVyc2VSZWNvcmRz
RmlsZXMocmVjb3Jkc1BhdGgsIHR5cGVDYXB0dXJlLnN0cmluZygpLCBbbW9kaWZpZWRTaW5jZVRp
bWVdKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IFN0cmluZyYgaGFzaFN0cmluZywgY29u
c3QgU3RyaW5nJiB0eXBlLCBib29sIGlzQm9keUJsb2IsIGNvbnN0IFN0cmluZyYgcmVjb3JkRGly
ZWN0b3J5UGF0aCkgeworICAgICAgICAgICAgYXV0byBmaWxlUGF0aCA9IFdlYkNvcmU6OnBhdGhC
eUFwcGVuZGluZ0NvbXBvbmVudChyZWNvcmREaXJlY3RvcnlQYXRoLCBmaWxlTmFtZSk7CiAgICAg
ICAgICAgICBpZiAobW9kaWZpZWRTaW5jZVRpbWUgPiBzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2Nr
Ojp0aW1lX3BvaW50OjptaW4oKSkgewogICAgICAgICAgICAgICAgIGF1dG8gdGltZXMgPSBmaWxl
VGltZXMoZmlsZVBhdGgpOwogICAgICAgICAgICAgICAgIGlmICh0aW1lcy5tb2RpZmljYXRpb24g
PCBtb2RpZmllZFNpbmNlVGltZSkKQEAgLTg4NCw3ICs5MTMsNyBAQCB2b2lkIFN0b3JhZ2U6OmNs
ZWFyKHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6OnRpbWVfcG9pbnQgbW9kaWZpZWRTaW5jZVRp
bWUsIHN0ZAogCiAgICAgICAgIGRlbGV0ZUVtcHR5UmVjb3Jkc0RpcmVjdG9yaWVzKHJlY29yZHNQ
YXRoKTsKIAotICAgICAgICAvLyBUaGlzIGNsZWFucyB1bnJlZmVyZW5jZXMgYmxvYnMuCisgICAg
ICAgIC8vIFRoaXMgY2xlYW5zIHVucmVmZXJlbmNlZCBibG9icy4KICAgICAgICAgbV9ibG9iU3Rv
cmFnZS5zeW5jaHJvbml6ZSgpOwogCiAgICAgICAgIGlmIChjb21wbGV0aW9uSGFuZGxlclB0cikg
ewpAQCAtOTUwLDE0ICs5NzksMTYgQEAgdm9pZCBTdG9yYWdlOjpzaHJpbmsoKQogCiAgICAgYmFj
a2dyb3VuZElPUXVldWUoKS5kaXNwYXRjaChbdGhpc10gewogICAgICAgICBhdXRvIHJlY29yZHNQ
YXRoID0gdGhpcy0+cmVjb3Jkc1BhdGgoKTsKLSAgICAgICAgdHJhdmVyc2VSZWNvcmRzRmlsZXMo
cmVjb3Jkc1BhdGgsIFt0aGlzXShjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBjb25zdCBTdHJpbmcm
IHBhcnRpdGlvblBhdGgpIHsKLSAgICAgICAgICAgIGlmIChmaWxlTmFtZS5sZW5ndGgoKSAhPSBL
ZXk6Omhhc2hTdHJpbmdMZW5ndGgoKSkKKyAgICAgICAgU3RyaW5nIGFueVR5cGU7CisgICAgICAg
IHRyYXZlcnNlUmVjb3Jkc0ZpbGVzKHJlY29yZHNQYXRoLCBhbnlUeXBlLCBbdGhpc10oY29uc3Qg
U3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgU3RyaW5nJiBoYXNoU3RyaW5nLCBjb25zdCBTdHJpbmcm
IHR5cGUsIGJvb2wgaXNCb2R5QmxvYiwgY29uc3QgU3RyaW5nJiByZWNvcmREaXJlY3RvcnlQYXRo
KSB7CisgICAgICAgICAgICBpZiAoaXNCb2R5QmxvYikKICAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICBhdXRvIHJlY29yZFBhdGggPSBXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdD
b21wb25lbnQocGFydGl0aW9uUGF0aCwgZmlsZU5hbWUpOwotICAgICAgICAgICAgYXV0byBib2R5
UGF0aCA9IGJvZHlQYXRoRm9yUmVjb3JkUGF0aChyZWNvcmRQYXRoKTsKKworICAgICAgICAgICAg
YXV0byByZWNvcmRQYXRoID0gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHJlY29y
ZERpcmVjdG9yeVBhdGgsIGZpbGVOYW1lKTsKKyAgICAgICAgICAgIGF1dG8gYmxvYlBhdGggPSBi
bG9iUGF0aEZvclJlY29yZFBhdGgocmVjb3JkUGF0aCk7CiAKICAgICAgICAgICAgIGF1dG8gdGlt
ZXMgPSBmaWxlVGltZXMocmVjb3JkUGF0aCk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBib2R5U2hh
cmVDb3VudCA9IG1fYmxvYlN0b3JhZ2Uuc2hhcmVDb3VudChib2R5UGF0aCk7CisgICAgICAgICAg
ICB1bnNpZ25lZCBib2R5U2hhcmVDb3VudCA9IG1fYmxvYlN0b3JhZ2Uuc2hhcmVDb3VudChibG9i
UGF0aCk7CiAgICAgICAgICAgICBhdXRvIHByb2JhYmlsaXR5ID0gZGVsZXRpb25Qcm9iYWJpbGl0
eSh0aW1lcywgYm9keVNoYXJlQ291bnQpOwogCiAgICAgICAgICAgICBib29sIHNob3VsZERlbGV0
ZSA9IHJhbmRvbU51bWJlcigpIDwgcHJvYmFiaWxpdHk7CkBAIC05NjYsNyArOTk3LDcgQEAgdm9p
ZCBTdG9yYWdlOjpzaHJpbmsoKQogCiAgICAgICAgICAgICBpZiAoc2hvdWxkRGVsZXRlKSB7CiAg
ICAgICAgICAgICAgICAgV2ViQ29yZTo6ZGVsZXRlRmlsZShyZWNvcmRQYXRoKTsKLSAgICAgICAg
ICAgICAgICBtX2Jsb2JTdG9yYWdlLnJlbW92ZShib2R5UGF0aCk7CisgICAgICAgICAgICAgICAg
bV9ibG9iU3RvcmFnZS5yZW1vdmUoYmxvYlBhdGgpOwogICAgICAgICAgICAgfQogICAgICAgICB9
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0
d29ya0NhY2hlU3RvcmFnZS5oIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUv
TmV0d29ya0NhY2hlU3RvcmFnZS5oCmluZGV4IDM2ZGMxZDlhMmYzYmZiZjM5ZThhMTMyNjdkODBk
ODRjNTc2ZWE2NzIuLjVmN2RiZTUxNTAwMDZiY2VhMTdjNDg2OWQ0Y2YwYjEwZDk3MjYyMzYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNo
ZVN0b3JhZ2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVTdG9yYWdlLmgKQEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgogICAgIHZvaWQgc3Rv
cmUoY29uc3QgUmVjb3JkJiwgTWFwcGVkQm9keUhhbmRsZXImJik7CiAKICAgICB2b2lkIHJlbW92
ZShjb25zdCBLZXkmKTsKLSAgICB2b2lkIGNsZWFyKHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6
OnRpbWVfcG9pbnQgbW9kaWZpZWRTaW5jZVRpbWUsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcik7CisgICAgdm9pZCBjbGVhcihjb25zdCBTdHJpbmcmIHR5cGUsIHN0
ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6OnRpbWVfcG9pbnQgbW9kaWZpZWRTaW5jZVRpbWUsIHN0
ZDo6ZnVuY3Rpb248dm9pZCAoKT4mJiBjb21wbGV0aW9uSGFuZGxlcik7CiAKICAgICBzdHJ1Y3Qg
UmVjb3JkSW5mbyB7CiAgICAgICAgIHNpemVfdCBib2R5U2l6ZTsKQEAgLTgwLDEzICs4MCwxMyBA
QCBwdWJsaWM6CiAgICAgdHlwZWRlZiB1bnNpZ25lZCBUcmF2ZXJzZUZsYWdzOwogICAgIHR5cGVk
ZWYgc3RkOjpmdW5jdGlvbjx2b2lkIChjb25zdCBSZWNvcmQqLCBjb25zdCBSZWNvcmRJbmZvJik+
IFRyYXZlcnNlSGFuZGxlcjsKICAgICAvLyBOdWxsIHJlY29yZCBzaWduYWxzIGVuZC4KLSAgICB2
b2lkIHRyYXZlcnNlKFRyYXZlcnNlRmxhZ3MsIFRyYXZlcnNlSGFuZGxlciYmKTsKKyAgICB2b2lk
IHRyYXZlcnNlKGNvbnN0IFN0cmluZyYgdHlwZSwgVHJhdmVyc2VGbGFncywgVHJhdmVyc2VIYW5k
bGVyJiYpOwogCiAgICAgdm9pZCBzZXRDYXBhY2l0eShzaXplX3QpOwogICAgIHNpemVfdCBjYXBh
Y2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FwYWNpdHk7IH0KICAgICBzaXplX3QgYXBwcm94aW1h
dGVTaXplKCkgY29uc3Q7CiAKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgdmVyc2lvbiA9IDQ7
CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHZlcnNpb24gPSA1OwogCiAgICAgU3RyaW5nIGJh
c2VQYXRoKCkgY29uc3Q7CiAgICAgU3RyaW5nIHZlcnNpb25QYXRoKCkgY29uc3Q7CkBAIC05Nyw5
ICs5Nyw5IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgU3RvcmFnZShjb25zdCBTdHJpbmcmIGRp
cmVjdG9yeVBhdGgpOwogCi0gICAgU3RyaW5nIHBhcnRpdGlvblBhdGhGb3JLZXkoY29uc3QgS2V5
JikgY29uc3Q7CisgICAgU3RyaW5nIHJlY29yZERpcmVjdG9yeVBhdGhGb3JLZXkoY29uc3QgS2V5
JikgY29uc3Q7CiAgICAgU3RyaW5nIHJlY29yZFBhdGhGb3JLZXkoY29uc3QgS2V5JikgY29uc3Q7
Ci0gICAgU3RyaW5nIGJvZHlQYXRoRm9yS2V5KGNvbnN0IEtleSYpIGNvbnN0OworICAgIFN0cmlu
ZyBibG9iUGF0aEZvcktleShjb25zdCBLZXkmKSBjb25zdDsKIAogICAgIHZvaWQgc3luY2hyb25p
emUoKTsKICAgICB2b2lkIGRlbGV0ZU9sZFZlcnNpb25zKCk7CkBAIC0xMjksNiArMTI5LDcgQEAg
cHJpdmF0ZToKICAgICBXb3JrUXVldWUmIHNlcmlhbEJhY2tncm91bmRJT1F1ZXVlKCkgeyByZXR1
cm4gbV9zZXJpYWxCYWNrZ3JvdW5kSU9RdWV1ZS5nZXQoKTsgfQogCiAgICAgYm9vbCBtYXlDb250
YWluKGNvbnN0IEtleSYpIGNvbnN0OworICAgIGJvb2wgbWF5Q29udGFpbkJsb2IoY29uc3QgS2V5
JikgY29uc3Q7CiAKICAgICB2b2lkIGFkZFRvUmVjb3JkRmlsdGVyKGNvbnN0IEtleSYpOwogCkBA
IC0xNDEsMTMgKzE0MiwxMyBAQCBwcml2YXRlOgogICAgIC8vIDJeMTggYml0IGZpbHRlciBjYW4g
c3VwcG9ydCB1cCB0byAyNjAwMCBlbnRyaWVzIHdpdGggZmFsc2UgcG9zaXRpdmUgcmF0ZSA8IDEl
LgogICAgIHVzaW5nIENvbnRlbnRzRmlsdGVyID0gQmxvb21GaWx0ZXI8MTg+OwogICAgIHN0ZDo6
dW5pcXVlX3B0cjxDb250ZW50c0ZpbHRlcj4gbV9yZWNvcmRGaWx0ZXI7Ci0gICAgc3RkOjp1bmlx
dWVfcHRyPENvbnRlbnRzRmlsdGVyPiBtX2JvZHlGaWx0ZXI7CisgICAgc3RkOjp1bmlxdWVfcHRy
PENvbnRlbnRzRmlsdGVyPiBtX2Jsb2JGaWx0ZXI7CiAKICAgICBib29sIG1fc3luY2hyb25pemF0
aW9uSW5Qcm9ncmVzcyB7IGZhbHNlIH07CiAgICAgYm9vbCBtX3Nocmlua0luUHJvZ3Jlc3MgeyBm
YWxzZSB9OwogCiAgICAgVmVjdG9yPEtleTo6SGFzaFR5cGU+IG1fcmVjb3JkRmlsdGVySGFzaGVz
QWRkZWREdXJpbmdTeW5jaHJvbml6YXRpb247Ci0gICAgVmVjdG9yPEtleTo6SGFzaFR5cGU+IG1f
Ym9keUZpbHRlckhhc2hlc0FkZGVkRHVyaW5nU3luY2hyb25pemF0aW9uOworICAgIFZlY3RvcjxL
ZXk6Okhhc2hUeXBlPiBtX2Jsb2JGaWx0ZXJIYXNoZXNBZGRlZER1cmluZ1N5bmNocm9uaXphdGlv
bjsKIAogICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4aW11bVJldHJpZXZlUHJpb3JpdHkgPSA0Owog
ICAgIERlcXVlPHN0ZDo6dW5pcXVlX3B0cjxSZWFkT3BlcmF0aW9uPj4gbV9wZW5kaW5nUmVhZE9w
ZXJhdGlvbnNCeVByaW9yaXR5W21heGltdW1SZXRyaWV2ZVByaW9yaXR5ICsgMV07CkBAIC0xNjks
NyArMTcwLDcgQEAgcHJpdmF0ZToKIH07CiAKIC8vIEZJWE1FOiBSZW1vdmUsIHVzZWQgYnkgTmV0
d29ya0NhY2hlU3RhdGlzdGljcyBvbmx5Lgotdm9pZCB0cmF2ZXJzZVJlY29yZHNGaWxlcyhjb25z
dCBTdHJpbmcmIHJlY29yZHNQYXRoLCBjb25zdCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGNvbnN0IFN0
cmluZyYsIGNvbnN0IFN0cmluZyYpPiYpOwordm9pZCB0cmF2ZXJzZVJlY29yZHNGaWxlcyhjb25z
dCBTdHJpbmcmIHJlY29yZHNQYXRoLCBjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IHN0ZDo6ZnVu
Y3Rpb248dm9pZCAoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgU3RyaW5nJiBoYXNoU3Ry
aW5nLCBjb25zdCBTdHJpbmcmIHR5cGUsIGJvb2wgaXNCb2R5QmxvYiwgY29uc3QgU3RyaW5nJiBy
ZWNvcmREaXJlY3RvcnlQYXRoKT4mKTsKIAogfQogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263621</attachid>
            <date>2015-10-20 15:22:18 -0700</date>
            <delta_ts>2015-10-20 23:41:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150221-20151020152135.patch</filename>
            <type>text/plain</type>
            <size>32507</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkxMzU3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggOThiNjAwYmQxNjhlNDRi
YmYxOTcyMjhlMGNjZThlNDRmNDVkZmFhOS4uYTIzNGFmZTUzN2UxOWUwNDU3YzNkYzZmYjZiZjRh
NDA1YWYzZWM4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDE1LTEwLTIwICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgW1dLMl0gR2VuZXJhbGl6ZSBO
ZXR3b3JrQ2FjaGVTdG9yYWdlIEFQSSBzbyBpdCBjYW4gc3RvcmUgZGlmZmVyZW50IHR5cGVzIG9m
IG1ldGFkYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTAyMjEKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzIzMTQ5NzcxPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IERhcmluIEFkbGVyIGFuZCBBbnR0aSBLb2l2aXN0by4KKworICAgICAgICBHZW5l
cmFsaXplIE5ldHdvcmtDYWNoZVN0b3JhZ2UgQVBJIHNvIGl0IGNhbiBzdG9yZSBkaWZmZXJlbnQg
dHlwZXMgb2YKKyAgICAgICAgbWV0YWRhdGEgYWxvbmdzaWRlIHRoZSBuZXR3b3JrIHJlc291cmNl
cy4gVGhpcyBpcyBhIHByZS1yZXF1aXJlbWVudCB0bworICAgICAgICBtYWtpbmcgb3VyIE5ldHdv
cmtDYWNoZSBzbWFydGVyIGJ5IHN0b3JpbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlCisgICAgICAg
IHJlc291cmNlcy4KKworICAgICAgICBUbyBrZWVwIHRoZSBjb2RlIHNpbXBsZSwgdGhlIGVudHJ5
IHR5cGUgaXMgbm93IHBhcnQgb2YgdGhlIGVudHJ5IGtleSBhbmQKKyAgICAgICAgd2Ugc3RvcmUg
cmVjb3JkcyBvZiBhIHNwZWNpZmljIHR5cGUgaW4gYSAndHlwZScgc3ViZm9sZGVyLiBUaGUgY2Fj
aGUKKyAgICAgICAgc3RydWN0dXJlIGxvb2tzIGxpa2Ugc286CisgICAgICAgIC0gV2ViS2l0Q2Fj
aGUvVmVyc2lvbiA1L1tQYXJ0aXRpb25dL1tUeXBlXS9bSGFzaF0KKyAgICAgICAgLSBXZWJLaXRD
YWNoZS9WZXJzaW9uIDUvW1BhcnRpdGlvbl0vW1R5cGVdL1tIYXNoXS1ibG9iIChPcHRpb25hbCkK
KworICAgICAgICBFeGlzdGluZyBjYWNoZSBlbnRyaWVzIG5vdyB0aGF0IHRoZSAncmVzb3VyY2Un
IHR5cGUgYXMgdGhlc2UgYXJlIG5ldHdvcmsKKyAgICAgICAgcmVzb3VyY2VzLgorCisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNwcDoKKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVLZXkuY3BwOgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUtleS5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZVN0YXRpc3RpY3MuY3BwOgorICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuY3BwOgorICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuaDoKKwogMjAxNS0xMC0yMCAgQ29tbWl0IFF1
ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9s
bGluZyBvdXQgcjE5MTMwNi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGUuY3BwCmluZGV4IGFmODc0OTM1NTUxZGFkNTQ2NjAxMGZlYTJh
NjkzZTM1ZjkzZTgzYWIuLjQwNDMxN2IwZDY1Nzg0NjU5ODMxNWRhMGRmM2NmODA5YTU2OTE4Zjkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlLmNwcApAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VS
ZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlc3BvbnNlLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9TaGFyZWRCdWZmZXIuaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgog
I2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgpAQCAtNTAsNiArNTEsMTMgQEAK
IG5hbWVzcGFjZSBXZWJLaXQgewogbmFtZXNwYWNlIE5ldHdvcmtDYWNoZSB7CiAKK3N0YXRpYyBj
b25zdCBBdG9taWNTdHJpbmcmIHJlc291cmNlVHlwZSgpCit7CisgICAgQVNTRVJUKFdURjo6aXNN
YWluVGhyZWFkKCkpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBBdG9taWNTdHJp
bmc+IHJlc291cmNlKCJyZXNvdXJjZSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVy
YWwpOworICAgIHJldHVybiByZXNvdXJjZTsKK30KKwogQ2FjaGUmIHNpbmdsZXRvbigpCiB7CiAg
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPENhY2hlPiBpbnN0YW5jZTsKQEAgLTExMyw3ICsxMjEs
NyBAQCBzdGF0aWMgS2V5IG1ha2VDYWNoZUtleShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QmIHJlcXVlc3QpCiAgICAgLy8gRklYTUU6IFRoaXMgaW1wbGVtZW50cyBtaW5pbWFsIFJhbmdl
IGhlYWRlciBkaXNrIGNhY2hlIHN1cHBvcnQuIFdlIGRvbid0IHBhcnNlCiAgICAgLy8gcmFuZ2Vz
IHNvIG9ubHkgdGhlIHNhbWUgZXhhY3QgcmFuZ2UgcmVxdWVzdCB3aWxsIGJlIHNlcnZlZCBmcm9t
IHRoZSBjYWNoZS4KICAgICBTdHJpbmcgcmFuZ2UgPSByZXF1ZXN0Lmh0dHBIZWFkZXJGaWVsZChX
ZWJDb3JlOjpIVFRQSGVhZGVyTmFtZTo6UmFuZ2UpOwotICAgIHJldHVybiB7IHBhcnRpdGlvbiwg
cmFuZ2UsIHJlcXVlc3QudXJsKCkuc3RyaW5nKCkgfTsKKyAgICByZXR1cm4geyBwYXJ0aXRpb24s
IHJlc291cmNlVHlwZSgpLCByYW5nZSwgcmVxdWVzdC51cmwoKS5zdHJpbmcoKSB9OwogfQogCiBz
dGF0aWMgU3RyaW5nIGhlYWRlclZhbHVlRm9yVmFyeShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QsIGNvbnN0IFN0cmluZyYgaGVhZGVyTmFtZSkKQEAgLTQ3Miw3ICs0ODAs
NyBAQCB2b2lkIENhY2hlOjp0cmF2ZXJzZShzdGQ6OmZ1bmN0aW9uPHZvaWQgKGNvbnN0IEVudHJ5
Kik+JiYgdHJhdmVyc2VIYW5kbGVyKQogewogICAgIEFTU0VSVChpc0VuYWJsZWQoKSk7CiAKLSAg
ICBtX3N0b3JhZ2UtPnRyYXZlcnNlKDAsIFt0cmF2ZXJzZUhhbmRsZXJdKGNvbnN0IFN0b3JhZ2U6
OlJlY29yZCogcmVjb3JkLCBjb25zdCBTdG9yYWdlOjpSZWNvcmRJbmZvJikgeworICAgIG1fc3Rv
cmFnZS0+dHJhdmVyc2UocmVzb3VyY2VUeXBlKCksIDAsIFt0cmF2ZXJzZUhhbmRsZXJdKGNvbnN0
IFN0b3JhZ2U6OlJlY29yZCogcmVjb3JkLCBjb25zdCBTdG9yYWdlOjpSZWNvcmRJbmZvJikgewog
ICAgICAgICBpZiAoIXJlY29yZCkgewogICAgICAgICAgICAgdHJhdmVyc2VIYW5kbGVyKG51bGxw
dHIpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtNTA5LDcgKzUxNyw3IEBAIHZvaWQgQ2FjaGU6
OmR1bXBDb250ZW50c1RvRmlsZSgpCiAgICAgVG90YWxzIHRvdGFsczsKICAgICBhdXRvIGZsYWdz
ID0gU3RvcmFnZTo6VHJhdmVyc2VGbGFnOjpDb21wdXRlV29ydGggfCBTdG9yYWdlOjpUcmF2ZXJz
ZUZsYWc6OlNoYXJlQ291bnQ7CiAgICAgc2l6ZV90IGNhcGFjaXR5ID0gbV9zdG9yYWdlLT5jYXBh
Y2l0eSgpOwotICAgIG1fc3RvcmFnZS0+dHJhdmVyc2UoZmxhZ3MsIFtmZCwgdG90YWxzLCBjYXBh
Y2l0eV0oY29uc3QgU3RvcmFnZTo6UmVjb3JkKiByZWNvcmQsIGNvbnN0IFN0b3JhZ2U6OlJlY29y
ZEluZm8mIGluZm8pIG11dGFibGUgeworICAgIG1fc3RvcmFnZS0+dHJhdmVyc2UocmVzb3VyY2VU
eXBlKCksIGZsYWdzLCBbZmQsIHRvdGFscywgY2FwYWNpdHldKGNvbnN0IFN0b3JhZ2U6OlJlY29y
ZCogcmVjb3JkLCBjb25zdCBTdG9yYWdlOjpSZWNvcmRJbmZvJiBpbmZvKSBtdXRhYmxlIHsKICAg
ICAgICAgaWYgKCFyZWNvcmQpIHsKICAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIgZXBpbG9ndWU7
CiAgICAgICAgICAgICBlcGlsb2d1ZS5hcHBlbmRMaXRlcmFsKCJ7fVxuXSxcbiIpOwpAQCAtNTY3
LDcgKzU3NSw4IEBAIHZvaWQgQ2FjaGU6OmNsZWFyKHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6
OnRpbWVfcG9pbnQgbW9kaWZpZWRTaW5jZSwgc3RkOjpmdW5jCiAgICAgICAgIFJ1bkxvb3A6Om1h
aW4oKS5kaXNwYXRjaChjb21wbGV0aW9uSGFuZGxlcik7CiAgICAgICAgIHJldHVybjsKICAgICB9
Ci0gICAgbV9zdG9yYWdlLT5jbGVhcihtb2RpZmllZFNpbmNlLCBXVEY6Om1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKKyAgICBTdHJpbmcgYW55VHlwZTsKKyAgICBtX3N0b3JhZ2UtPmNsZWFyKGFu
eVR5cGUsIG1vZGlmaWVkU2luY2UsIFdURjo6bW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogCiAg
ICAgZGVsZXRlRHVtcEZpbGUoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUtleS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVLZXkuY3BwCmluZGV4IDBiOTFiYWVmOThjNmY1
YTIxMTI4ZGM5ZTdkZDgzOGJmNzllYmY3MGUuLmI4MjhkNDk1Y2UxODBlYjZlY2UzMjI4NzliYTlj
NTkzN2YxZTA1NWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZUtleS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlS2V5LmNwcApAQCAtMzgsMTQgKzM4LDE2IEBAIG5hbWVzcGFj
ZSBOZXR3b3JrQ2FjaGUgewogCiBLZXk6OktleShjb25zdCBLZXkmIG8pCiAgICAgOiBtX3BhcnRp
dGlvbihvLm1fcGFydGl0aW9uLmlzb2xhdGVkQ29weSgpKQorICAgICwgbV90eXBlKG8ubV90eXBl
Lmlzb2xhdGVkQ29weSgpKQogICAgICwgbV9pZGVudGlmaWVyKG8ubV9pZGVudGlmaWVyLmlzb2xh
dGVkQ29weSgpKQogICAgICwgbV9yYW5nZShvLm1fcmFuZ2UuaXNvbGF0ZWRDb3B5KCkpCiAgICAg
LCBtX2hhc2goby5tX2hhc2gpCiB7CiB9CiAKLUtleTo6S2V5KGNvbnN0IFN0cmluZyYgcGFydGl0
aW9uLCBjb25zdCBTdHJpbmcmIHJhbmdlLCBjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIpCitLZXk6
OktleShjb25zdCBTdHJpbmcmIHBhcnRpdGlvbiwgY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBT
dHJpbmcmIHJhbmdlLCBjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIpCiAgICAgOiBtX3BhcnRpdGlv
bihwYXJ0aXRpb24uaXNvbGF0ZWRDb3B5KCkpCisgICAgLCBtX3R5cGUodHlwZS5pc29sYXRlZENv
cHkoKSkKICAgICAsIG1faWRlbnRpZmllcihpZGVudGlmaWVyLmlzb2xhdGVkQ29weSgpKQogICAg
ICwgbV9yYW5nZShyYW5nZS5pc29sYXRlZENvcHkoKSkKICAgICAsIG1faGFzaChjb21wdXRlSGFz
aCgpKQpAQCAtNTUsNiArNTcsNyBAQCBLZXk6OktleShjb25zdCBTdHJpbmcmIHBhcnRpdGlvbiwg
Y29uc3QgU3RyaW5nJiByYW5nZSwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyKQogS2V5JiBLZXk6
Om9wZXJhdG9yPShjb25zdCBLZXkmIG90aGVyKQogewogICAgIG1fcGFydGl0aW9uID0gb3RoZXIu
bV9wYXJ0aXRpb24uaXNvbGF0ZWRDb3B5KCk7CisgICAgbV90eXBlID0gb3RoZXIubV90eXBlLmlz
b2xhdGVkQ29weSgpOwogICAgIG1faWRlbnRpZmllciA9IG90aGVyLm1faWRlbnRpZmllci5pc29s
YXRlZENvcHkoKTsKICAgICBtX3JhbmdlID0gb3RoZXIubV9yYW5nZS5pc29sYXRlZENvcHkoKTsK
ICAgICBtX2hhc2ggPSBvdGhlci5tX2hhc2g7CkBAIC04Myw2ICs4Niw3IEBAIEtleTo6SGFzaFR5
cGUgS2V5Ojpjb21wdXRlSGFzaCgpIGNvbnN0CiAgICAgLy8gU0hBMSBqdXN0IGhhcHBlbnMgdG8g
YmUgc3VpdGFibHkgc2l6ZWQsIGZhc3QgYW5kIGF2YWlsYWJsZS4KICAgICBTSEExIHNoYTE7CiAg
ICAgaGFzaFN0cmluZyhzaGExLCBtX3BhcnRpdGlvbik7CisgICAgaGFzaFN0cmluZyhzaGExLCBt
X3R5cGUpOwogICAgIGhhc2hTdHJpbmcoc2hhMSwgbV9pZGVudGlmaWVyKTsKICAgICBoYXNoU3Ry
aW5nKHNoYTEsIG1fcmFuZ2UpOwogICAgIFNIQTE6OkRpZ2VzdCBoYXNoOwpAQCAtMTI0LDEyICsx
MjgsMTMgQEAgYm9vbCBLZXk6OnN0cmluZ1RvSGFzaChjb25zdCBTdHJpbmcmIHN0cmluZywgSGFz
aFR5cGUmIGhhc2gpCiAKIGJvb2wgS2V5OjpvcGVyYXRvcj09KGNvbnN0IEtleSYgb3RoZXIpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIG1faGFzaCA9PSBvdGhlci5tX2hhc2ggJiYgbV9wYXJ0aXRpb24g
PT0gb3RoZXIubV9wYXJ0aXRpb24gJiYgbV9pZGVudGlmaWVyID09IG90aGVyLm1faWRlbnRpZmll
ciAmJiBtX3JhbmdlID09IG90aGVyLm1fcmFuZ2U7CisgICAgcmV0dXJuIG1faGFzaCA9PSBvdGhl
ci5tX2hhc2ggJiYgbV9wYXJ0aXRpb24gPT0gb3RoZXIubV9wYXJ0aXRpb24gJiYgbV90eXBlID09
IG90aGVyLm1fdHlwZSAmJiBtX2lkZW50aWZpZXIgPT0gb3RoZXIubV9pZGVudGlmaWVyICYmIG1f
cmFuZ2UgPT0gb3RoZXIubV9yYW5nZTsKIH0KIAogdm9pZCBLZXk6OmVuY29kZShFbmNvZGVyJiBl
bmNvZGVyKSBjb25zdAogewogICAgIGVuY29kZXIgPDwgbV9wYXJ0aXRpb247CisgICAgZW5jb2Rl
ciA8PCBtX3R5cGU7CiAgICAgZW5jb2RlciA8PCBtX2lkZW50aWZpZXI7CiAgICAgZW5jb2RlciA8
PCBtX3JhbmdlOwogICAgIGVuY29kZXIgPDwgbV9oYXNoOwpAQCAtMTM3LDcgKzE0Miw3IEBAIHZv
aWQgS2V5OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIAogYm9vbCBLZXk6OmRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyLCBLZXkmIGtleSkKIHsKLSAgICByZXR1cm4gZGVjb2Rlci5kZWNv
ZGUoa2V5Lm1fcGFydGl0aW9uKSAmJiBkZWNvZGVyLmRlY29kZShrZXkubV9pZGVudGlmaWVyKSAm
JiBkZWNvZGVyLmRlY29kZShrZXkubV9yYW5nZSkgJiYgZGVjb2Rlci5kZWNvZGUoa2V5Lm1faGFz
aCk7CisgICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlKGtleS5tX3BhcnRpdGlvbikgJiYgZGVjb2Rl
ci5kZWNvZGUoa2V5Lm1fdHlwZSkgJiYgZGVjb2Rlci5kZWNvZGUoa2V5Lm1faWRlbnRpZmllcikg
JiYgZGVjb2Rlci5kZWNvZGUoa2V5Lm1fcmFuZ2UpICYmIGRlY29kZXIuZGVjb2RlKGtleS5tX2hh
c2gpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9j
YWNoZS9OZXR3b3JrQ2FjaGVLZXkuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZUtleS5oCmluZGV4IDJjZGFlMzA1ZmIxMjM3YTVjMWI4YWFjMzY3ZTQx
MjMxZjZhYjg3MjIuLmU2MzNiNjUxNDBlNGRjYjA3ZDhiYzcwOTBlOTg4ZWEwNDQ3MjFhMjcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNo
ZUtleS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZUtleS5oCkBAIC00NCw3ICs0NCw3IEBAIHB1YmxpYzoKICAgICBLZXkoKSB7IH0KICAgICBL
ZXkoY29uc3QgS2V5Jik7CiAgICAgS2V5KEtleSYmKSA9IGRlZmF1bHQ7Ci0gICAgS2V5KGNvbnN0
IFN0cmluZyYgcGFydGl0aW9uLCBjb25zdCBTdHJpbmcmIHJhbmdlLCBjb25zdCBTdHJpbmcmIGlk
ZW50aWZpZXIpOworICAgIEtleShjb25zdCBTdHJpbmcmIHBhcnRpdGlvbiwgY29uc3QgU3RyaW5n
JiB0eXBlLCBjb25zdCBTdHJpbmcmIHJhbmdlLCBjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIpOwog
CiAgICAgS2V5JiBvcGVyYXRvcj0oY29uc3QgS2V5Jik7CiAgICAgS2V5JiBvcGVyYXRvcj0oS2V5
JiYpID0gZGVmYXVsdDsKQEAgLTUzLDYgKzUzLDcgQEAgcHVibGljOgogCiAgICAgY29uc3QgU3Ry
aW5nJiBwYXJ0aXRpb24oKSBjb25zdCB7IHJldHVybiBtX3BhcnRpdGlvbjsgfQogICAgIGNvbnN0
IFN0cmluZyYgaWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQorICAg
IGNvbnN0IFN0cmluZyYgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQogCiAgICAgSGFz
aFR5cGUgaGFzaCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzaDsgfQogCkBAIC03MSw2ICs3Miw3IEBA
IHByaXZhdGU6CiAgICAgSGFzaFR5cGUgY29tcHV0ZUhhc2goKSBjb25zdDsKIAogICAgIFN0cmlu
ZyBtX3BhcnRpdGlvbjsKKyAgICBTdHJpbmcgbV90eXBlOwogICAgIFN0cmluZyBtX2lkZW50aWZp
ZXI7CiAgICAgU3RyaW5nIG1fcmFuZ2U7CiAgICAgSGFzaFR5cGUgbV9oYXNoOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RhdGlz
dGljcy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVTdGF0aXN0aWNzLmNwcAppbmRleCBmYmUxNDVlYWE1YmM0MTI1M2JmNzhhZWZmZDcyNTE1ZTU4
ZjE1Mjk3Li43MzEwNzJkY2QyMzA5OWY5YjNmOTBiODMxZTI5MjY5NjljNGFkMTRlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdGF0
aXN0aWNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVTdGF0aXN0aWNzLmNwcApAQCAtMTQ0LDcgKzE0NCwxMCBAQCB2b2lkIFN0YXRpc3Rp
Y3M6OmJvb3RzdHJhcEZyb21OZXR3b3JrQ2FjaGUoY29uc3QgU3RyaW5nJiBuZXR3b3JrQ2FjaGVQ
YXRoKQogICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIEJvb3RzdHJhcHBp
bmcgdGhlIG5ldHdvcmsgY2FjaGUgc3RhdGlzdGljcyBkYXRhYmFzZSBmcm9tIHRoZSBuZXR3b3Jr
IGNhY2hlLi4uIik7CiAKICAgICBWZWN0b3I8U3RyaW5nQ2FwdHVyZT4gaGFzaGVzOwotICAgIHRy
YXZlcnNlUmVjb3Jkc0ZpbGVzKG5ldHdvcmtDYWNoZVBhdGgsIFsmaGFzaGVzXShjb25zdCBTdHJp
bmcmIGhhc2hTdHJpbmcsIGNvbnN0IFN0cmluZyYpIHsKKyAgICB0cmF2ZXJzZVJlY29yZHNGaWxl
cyhuZXR3b3JrQ2FjaGVQYXRoLCBBU0NJSUxpdGVyYWwoInJlc291cmNlIiksIFsmaGFzaGVzXShj
b25zdCBTdHJpbmcmIGZpbGVOYW1lLCBjb25zdCBTdHJpbmcmIGhhc2hTdHJpbmcsIGNvbnN0IFN0
cmluZyYgdHlwZSwgYm9vbCBpc0JvZHlCbG9iLCBjb25zdCBTdHJpbmcmIHJlY29yZERpcmVjdG9y
eVBhdGgpIHsKKyAgICAgICAgaWYgKGlzQm9keUJsb2IpCisgICAgICAgICAgICByZXR1cm47CisK
ICAgICAgICAgS2V5OjpIYXNoVHlwZSBoYXNoOwogICAgICAgICBpZiAoIUtleTo6c3RyaW5nVG9I
YXNoKGhhc2hTdHJpbmcsIGhhc2gpKQogICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9y
YWdlLmNwcAppbmRleCBiYzg0YmEyZmVkYjM3ZDVjMTdkMTRlN2YyZWM1YzA4ZjI3ZjFjZjk3Li44
ODM5NWY0ZTI4MjRhNzUwMTQyMzZmNmYzOTA5MzM2MDZmMDJlMmYwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9y
YWdlLmNwcApAQCAtNDYsNyArNDYsNyBAQCBuYW1lc3BhY2UgTmV0d29ya0NhY2hlIHsKIHN0YXRp
YyBjb25zdCBjaGFyIHZlcnNpb25EaXJlY3RvcnlQcmVmaXhbXSA9ICJWZXJzaW9uICI7CiBzdGF0
aWMgY29uc3QgY2hhciByZWNvcmRzRGlyZWN0b3J5TmFtZVtdID0gIlJlY29yZHMiOwogc3RhdGlj
IGNvbnN0IGNoYXIgYmxvYnNEaXJlY3RvcnlOYW1lW10gPSAiQmxvYnMiOwotc3RhdGljIGNvbnN0
IGNoYXIgYm9keVBvc3RmaXhbXSA9ICItYm9keSI7CitzdGF0aWMgY29uc3QgY2hhciBibG9iU3Vm
Zml4W10gPSAiLWJsb2IiOwogCiBzdGF0aWMgZG91YmxlIGNvbXB1dGVSZWNvcmRXb3J0aChGaWxl
VGltZXMpOwogCkBAIC0xMTMsMTEgKzExMywxMyBAQCBwdWJsaWM6CiBzdHJ1Y3QgU3RvcmFnZTo6
VHJhdmVyc2VPcGVyYXRpb24gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGlj
OgotICAgIFRyYXZlcnNlT3BlcmF0aW9uKFRyYXZlcnNlRmxhZ3MgZmxhZ3MsIGNvbnN0IFRyYXZl
cnNlSGFuZGxlciYgaGFuZGxlcikKLSAgICAgICAgOiBmbGFncyhmbGFncykKKyAgICBUcmF2ZXJz
ZU9wZXJhdGlvbihjb25zdCBTdHJpbmcmIHR5cGUsIFRyYXZlcnNlRmxhZ3MgZmxhZ3MsIGNvbnN0
IFRyYXZlcnNlSGFuZGxlciYgaGFuZGxlcikKKyAgICAgICAgOiB0eXBlKHR5cGUpCisgICAgICAg
ICwgZmxhZ3MoZmxhZ3MpCiAgICAgICAgICwgaGFuZGxlcihoYW5kbGVyKQogICAgIHsgfQogCisg
ICAgY29uc3QgU3RyaW5nIHR5cGU7CiAgICAgY29uc3QgVHJhdmVyc2VGbGFncyBmbGFnczsKICAg
ICBjb25zdCBUcmF2ZXJzZUhhbmRsZXIgaGFuZGxlcjsKIApAQCAtMTUxLDI3ICsxNTMsNDkgQEAg
c3RhdGljIFN0cmluZyBtYWtlQmxvYkRpcmVjdG9yeVBhdGgoY29uc3QgU3RyaW5nJiBiYXNlRGly
ZWN0b3J5UGF0aCkKICAgICByZXR1cm4gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50
KG1ha2VWZXJzaW9uZWREaXJlY3RvcnlQYXRoKGJhc2VEaXJlY3RvcnlQYXRoKSwgYmxvYnNEaXJl
Y3RvcnlOYW1lKTsKIH0KIAotdm9pZCB0cmF2ZXJzZVJlY29yZHNGaWxlcyhjb25zdCBTdHJpbmcm
IHJlY29yZHNQYXRoLCBjb25zdCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGNvbnN0IFN0cmluZyYsIGNv
bnN0IFN0cmluZyYpPiYgZnVuY3Rpb24pCit2b2lkIHRyYXZlcnNlUmVjb3Jkc0ZpbGVzKGNvbnN0
IFN0cmluZyYgcmVjb3Jkc1BhdGgsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRUeXBlLCBjb25zdCBz
dGQ6OmZ1bmN0aW9uPHZvaWQgKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IFN0cmluZyYg
aGFzaFN0cmluZywgY29uc3QgU3RyaW5nJiB0eXBlLCBib29sIGlzQmxvYiwgY29uc3QgU3RyaW5n
JiByZWNvcmREaXJlY3RvcnlQYXRoKT4mIGZ1bmN0aW9uKQogewotICAgIHRyYXZlcnNlRGlyZWN0
b3J5KHJlY29yZHNQYXRoLCBbJnJlY29yZHNQYXRoLCAmZnVuY3Rpb25dKGNvbnN0IFN0cmluZyYg
c3ViZGlyTmFtZSwgRGlyZWN0b3J5RW50cnlUeXBlIHR5cGUpIHsKLSAgICAgICAgaWYgKHR5cGUg
IT0gRGlyZWN0b3J5RW50cnlUeXBlOjpEaXJlY3RvcnkpCisgICAgdHJhdmVyc2VEaXJlY3Rvcnko
cmVjb3Jkc1BhdGgsIFsmcmVjb3Jkc1BhdGgsICZmdW5jdGlvbiwgJmV4cGVjdGVkVHlwZV0oY29u
c3QgU3RyaW5nJiBwYXJ0aXRpb25OYW1lLCBEaXJlY3RvcnlFbnRyeVR5cGUgZW50cnlUeXBlKSB7
CisgICAgICAgIGlmIChlbnRyeVR5cGUgIT0gRGlyZWN0b3J5RW50cnlUeXBlOjpEaXJlY3Rvcnkp
CiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIFN0cmluZyBwYXJ0aXRpb25QYXRoID0gV2Vi
Q29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHJlY29yZHNQYXRoLCBzdWJkaXJOYW1lKTsK
LSAgICAgICAgdHJhdmVyc2VEaXJlY3RvcnkocGFydGl0aW9uUGF0aCwgWyZmdW5jdGlvbiwgJnBh
cnRpdGlvblBhdGhdKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIERpcmVjdG9yeUVudHJ5VHlwZSB0
eXBlKSB7Ci0gICAgICAgICAgICBpZiAodHlwZSAhPSBEaXJlY3RvcnlFbnRyeVR5cGU6OkZpbGUp
CisgICAgICAgIFN0cmluZyBwYXJ0aXRpb25QYXRoID0gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5n
Q29tcG9uZW50KHJlY29yZHNQYXRoLCBwYXJ0aXRpb25OYW1lKTsKKyAgICAgICAgdHJhdmVyc2VE
aXJlY3RvcnkocGFydGl0aW9uUGF0aCwgWyZmdW5jdGlvbiwgJnBhcnRpdGlvblBhdGgsICZleHBl
Y3RlZFR5cGVdKGNvbnN0IFN0cmluZyYgYWN0dWFsVHlwZSwgRGlyZWN0b3J5RW50cnlUeXBlIGVu
dHJ5VHlwZSkgeworICAgICAgICAgICAgaWYgKGVudHJ5VHlwZSAhPSBEaXJlY3RvcnlFbnRyeVR5
cGU6OkRpcmVjdG9yeSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBpZiAo
IWV4cGVjdGVkVHlwZS5pc0VtcHR5KCkgJiYgZXhwZWN0ZWRUeXBlICE9IGFjdHVhbFR5cGUpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgZnVuY3Rpb24oZmlsZU5hbWUsIHBh
cnRpdGlvblBhdGgpOworICAgICAgICAgICAgU3RyaW5nIHJlY29yZERpcmVjdG9yeVBhdGggPSBX
ZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQocGFydGl0aW9uUGF0aCwgYWN0dWFsVHlw
ZSk7CisgICAgICAgICAgICB0cmF2ZXJzZURpcmVjdG9yeShyZWNvcmREaXJlY3RvcnlQYXRoLCBb
JmZ1bmN0aW9uLCAmcmVjb3JkRGlyZWN0b3J5UGF0aCwgJmFjdHVhbFR5cGVdKGNvbnN0IFN0cmlu
ZyYgZmlsZU5hbWUsIERpcmVjdG9yeUVudHJ5VHlwZSBlbnRyeVR5cGUpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoZW50cnlUeXBlICE9IERpcmVjdG9yeUVudHJ5VHlwZTo6RmlsZSB8fCBmaWxlTmFt
ZS5sZW5ndGgoKSA8IEtleTo6aGFzaFN0cmluZ0xlbmd0aCgpKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgICAgICAgICBTdHJpbmcgaGFzaFN0cmluZyA9IGZpbGVOYW1l
LnN1YnN0cmluZygwLCBLZXk6Omhhc2hTdHJpbmdMZW5ndGgoKSk7CisgICAgICAgICAgICAgICAg
YXV0byBpc0Jsb2IgPSBmaWxlTmFtZS5sZW5ndGgoKSA+IEtleTo6aGFzaFN0cmluZ0xlbmd0aCgp
ICYmIGZpbGVOYW1lLmVuZHNXaXRoKGJsb2JTdWZmaXgpOworICAgICAgICAgICAgICAgIGZ1bmN0
aW9uKGZpbGVOYW1lLCBoYXNoU3RyaW5nLCBhY3R1YWxUeXBlLCBpc0Jsb2IsIHJlY29yZERpcmVj
dG9yeVBhdGgpOworICAgICAgICAgICAgfSk7CiAgICAgICAgIH0pOwogICAgIH0pOwogfQogCiBz
dGF0aWMgdm9pZCBkZWxldGVFbXB0eVJlY29yZHNEaXJlY3Rvcmllcyhjb25zdCBTdHJpbmcmIHJl
Y29yZHNQYXRoKQogewotICAgIHRyYXZlcnNlRGlyZWN0b3J5KHJlY29yZHNQYXRoLCBbJnJlY29y
ZHNQYXRoXShjb25zdCBTdHJpbmcmIHN1YmRpck5hbWUsIERpcmVjdG9yeUVudHJ5VHlwZSB0eXBl
KSB7CisgICAgdHJhdmVyc2VEaXJlY3RvcnkocmVjb3Jkc1BhdGgsIFsmcmVjb3Jkc1BhdGhdKGNv
bnN0IFN0cmluZyYgcGFydGl0aW9uTmFtZSwgRGlyZWN0b3J5RW50cnlUeXBlIHR5cGUpIHsKICAg
ICAgICAgaWYgKHR5cGUgIT0gRGlyZWN0b3J5RW50cnlUeXBlOjpEaXJlY3RvcnkpCiAgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgLy8gRGVsZXRlIFt0eXBlXSBzdWItZm9sZGVycy4KKyAg
ICAgICAgU3RyaW5nIHBhcnRpdGlvblBhdGggPSBXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21w
b25lbnQocmVjb3Jkc1BhdGgsIHBhcnRpdGlvbk5hbWUpOworICAgICAgICB0cmF2ZXJzZURpcmVj
dG9yeShwYXJ0aXRpb25QYXRoLCBbJnBhcnRpdGlvblBhdGhdKGNvbnN0IFN0cmluZyYgc3ViZGly
TmFtZSwgRGlyZWN0b3J5RW50cnlUeXBlIGVudHJ5VHlwZSkgeworICAgICAgICAgICAgaWYgKGVu
dHJ5VHlwZSAhPSBEaXJlY3RvcnlFbnRyeVR5cGU6OkRpcmVjdG9yeSkKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgICAgIC8vIExldCBzeXN0ZW0gZmlndXJlIG91dCBpZiBpdCBp
cyByZWFsbHkgZW1wdHkuCisgICAgICAgICAgICBXZWJDb3JlOjpkZWxldGVFbXB0eURpcmVjdG9y
eShXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQocGFydGl0aW9uUGF0aCwgc3ViZGly
TmFtZSkpOworICAgICAgICB9KTsKKworICAgICAgICAvLyBEZWxldGUgW1BhcnRpdGlvbl0gZm9s
ZGVycy4KICAgICAgICAgLy8gTGV0IHN5c3RlbSBmaWd1cmUgb3V0IGlmIGl0IGlzIHJlYWxseSBl
bXB0eS4KLSAgICAgICAgV2ViQ29yZTo6ZGVsZXRlRW1wdHlEaXJlY3RvcnkoV2ViQ29yZTo6cGF0
aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHJlY29yZHNQYXRoLCBzdWJkaXJOYW1lKSk7CisgICAgICAg
IFdlYkNvcmU6OmRlbGV0ZUVtcHR5RGlyZWN0b3J5KFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0Nv
bXBvbmVudChyZWNvcmRzUGF0aCwgcGFydGl0aW9uTmFtZSkpOwogICAgIH0pOwogfQogCkBAIC0y
MjUsMTQgKzI0OSwxMyBAQCB2b2lkIFN0b3JhZ2U6OnN5bmNocm9uaXplKCkKIAogICAgIGJhY2tn
cm91bmRJT1F1ZXVlKCkuZGlzcGF0Y2goW3RoaXNdIHsKICAgICAgICAgYXV0byByZWNvcmRGaWx0
ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPENvbnRlbnRzRmlsdGVyPigpOwotICAgICAgICBhdXRvIGJv
ZHlGaWx0ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPENvbnRlbnRzRmlsdGVyPigpOworICAgICAgICBh
dXRvIGJsb2JGaWx0ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPENvbnRlbnRzRmlsdGVyPigpOwogICAg
ICAgICBzaXplX3QgcmVjb3Jkc1NpemUgPSAwOwogICAgICAgICB1bnNpZ25lZCBjb3VudCA9IDA7
Ci0gICAgICAgIHRyYXZlcnNlUmVjb3Jkc0ZpbGVzKHJlY29yZHNQYXRoKCksIFsmcmVjb3JkRmls
dGVyLCAmYm9keUZpbHRlciwgJnJlY29yZHNTaXplLCAmY291bnRdKGNvbnN0IFN0cmluZyYgZmls
ZU5hbWUsIGNvbnN0IFN0cmluZyYgcGFydGl0aW9uUGF0aCkgewotICAgICAgICAgICAgYXV0byBm
aWxlUGF0aCA9IFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChwYXJ0aXRpb25QYXRo
LCBmaWxlTmFtZSk7CisgICAgICAgIFN0cmluZyBhbnlUeXBlOworICAgICAgICB0cmF2ZXJzZVJl
Y29yZHNGaWxlcyhyZWNvcmRzUGF0aCgpLCBhbnlUeXBlLCBbJnJlY29yZEZpbHRlciwgJmJsb2JG
aWx0ZXIsICZyZWNvcmRzU2l6ZSwgJmNvdW50XShjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBjb25z
dCBTdHJpbmcmIGhhc2hTdHJpbmcsIGNvbnN0IFN0cmluZyYgdHlwZSwgYm9vbCBpc0Jsb2IsIGNv
bnN0IFN0cmluZyYgcmVjb3JkRGlyZWN0b3J5UGF0aCkgeworICAgICAgICAgICAgYXV0byBmaWxl
UGF0aCA9IFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChyZWNvcmREaXJlY3RvcnlQ
YXRoLCBmaWxlTmFtZSk7CiAKLSAgICAgICAgICAgIGJvb2wgaXNCb2R5ID0gZmlsZU5hbWUuZW5k
c1dpdGgoYm9keVBvc3RmaXgpOwotICAgICAgICAgICAgU3RyaW5nIGhhc2hTdHJpbmcgPSBpc0Jv
ZHkgPyBmaWxlTmFtZS5zdWJzdHJpbmcoMCwgS2V5OjpoYXNoU3RyaW5nTGVuZ3RoKCkpIDogZmls
ZU5hbWU7CiAgICAgICAgICAgICBLZXk6Okhhc2hUeXBlIGhhc2g7CiAgICAgICAgICAgICBpZiAo
IUtleTo6c3RyaW5nVG9IYXNoKGhhc2hTdHJpbmcsIGhhc2gpKSB7CiAgICAgICAgICAgICAgICAg
V2ViQ29yZTo6ZGVsZXRlRmlsZShmaWxlUGF0aCk7CkBAIC0yNDQsMzEgKzI2NywzMyBAQCB2b2lk
IFN0b3JhZ2U6OnN5bmNocm9uaXplKCkKICAgICAgICAgICAgICAgICBXZWJDb3JlOjpkZWxldGVG
aWxlKGZpbGVQYXRoKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBpZiAoaXNCb2R5KSB7Ci0gICAgICAgICAgICAgICAgYm9keUZpbHRlci0+YWRk
KGhhc2gpOworCisgICAgICAgICAgICBpZiAoaXNCbG9iKSB7CisgICAgICAgICAgICAgICAgYmxv
YkZpbHRlci0+YWRkKGhhc2gpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg
IH0KKwogICAgICAgICAgICAgcmVjb3JkRmlsdGVyLT5hZGQoaGFzaCk7CiAgICAgICAgICAgICBy
ZWNvcmRzU2l6ZSArPSBmaWxlU2l6ZTsKICAgICAgICAgICAgICsrY291bnQ7CiAgICAgICAgIH0p
OwogCiAgICAgICAgIGF1dG8qIHJlY29yZEZpbHRlclB0ciA9IHJlY29yZEZpbHRlci5yZWxlYXNl
KCk7Ci0gICAgICAgIGF1dG8qIGJvZHlGaWx0ZXJQdHIgPSBib2R5RmlsdGVyLnJlbGVhc2UoKTsK
LSAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt0aGlzLCByZWNvcmRGaWx0ZXJQdHIs
IGJvZHlGaWx0ZXJQdHIsIHJlY29yZHNTaXplXSB7CisgICAgICAgIGF1dG8qIGJsb2JGaWx0ZXJQ
dHIgPSBibG9iRmlsdGVyLnJlbGVhc2UoKTsKKyAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3Bh
dGNoKFt0aGlzLCByZWNvcmRGaWx0ZXJQdHIsIGJsb2JGaWx0ZXJQdHIsIHJlY29yZHNTaXplXSB7
CiAgICAgICAgICAgICBhdXRvIHJlY29yZEZpbHRlciA9IHN0ZDo6dW5pcXVlX3B0cjxDb250ZW50
c0ZpbHRlcj4ocmVjb3JkRmlsdGVyUHRyKTsKLSAgICAgICAgICAgIGF1dG8gYm9keUZpbHRlciA9
IHN0ZDo6dW5pcXVlX3B0cjxDb250ZW50c0ZpbHRlcj4oYm9keUZpbHRlclB0cik7CisgICAgICAg
ICAgICBhdXRvIGJsb2JGaWx0ZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8Q29udGVudHNGaWx0ZXI+KGJs
b2JGaWx0ZXJQdHIpOwogCi0gICAgICAgICAgICBmb3IgKGF1dG8mIGhhc2ggOiBtX3JlY29yZEZp
bHRlckhhc2hlc0FkZGVkRHVyaW5nU3luY2hyb25pemF0aW9uKQotICAgICAgICAgICAgICAgIHJl
Y29yZEZpbHRlci0+YWRkKGhhc2gpOworICAgICAgICAgICAgZm9yIChhdXRvJiByZWNvcmRGaWx0
ZXJLZXkgOiBtX3JlY29yZEZpbHRlckhhc2hlc0FkZGVkRHVyaW5nU3luY2hyb25pemF0aW9uKQor
ICAgICAgICAgICAgICAgIHJlY29yZEZpbHRlci0+YWRkKHJlY29yZEZpbHRlcktleSk7CiAgICAg
ICAgICAgICBtX3JlY29yZEZpbHRlckhhc2hlc0FkZGVkRHVyaW5nU3luY2hyb25pemF0aW9uLmNs
ZWFyKCk7CiAKLSAgICAgICAgICAgIGZvciAoYXV0byYgaGFzaCA6IG1fYm9keUZpbHRlckhhc2hl
c0FkZGVkRHVyaW5nU3luY2hyb25pemF0aW9uKQotICAgICAgICAgICAgICAgIGJvZHlGaWx0ZXIt
PmFkZChoYXNoKTsKLSAgICAgICAgICAgIG1fYm9keUZpbHRlckhhc2hlc0FkZGVkRHVyaW5nU3lu
Y2hyb25pemF0aW9uLmNsZWFyKCk7CisgICAgICAgICAgICBmb3IgKGF1dG8mIGhhc2ggOiBtX2Js
b2JGaWx0ZXJIYXNoZXNBZGRlZER1cmluZ1N5bmNocm9uaXphdGlvbikKKyAgICAgICAgICAgICAg
ICBibG9iRmlsdGVyLT5hZGQoaGFzaCk7CisgICAgICAgICAgICBtX2Jsb2JGaWx0ZXJIYXNoZXNB
ZGRlZER1cmluZ1N5bmNocm9uaXphdGlvbi5jbGVhcigpOwogCiAgICAgICAgICAgICBtX3JlY29y
ZEZpbHRlciA9IFdURjo6bW92ZShyZWNvcmRGaWx0ZXIpOwotICAgICAgICAgICAgbV9ib2R5Rmls
dGVyID0gV1RGOjptb3ZlKGJvZHlGaWx0ZXIpOworICAgICAgICAgICAgbV9ibG9iRmlsdGVyID0g
V1RGOjptb3ZlKGJsb2JGaWx0ZXIpOwogICAgICAgICAgICAgbV9hcHByb3hpbWF0ZVJlY29yZHNT
aXplID0gcmVjb3Jkc1NpemU7CiAgICAgICAgICAgICBtX3N5bmNocm9uaXphdGlvbkluUHJvZ3Jl
c3MgPSBmYWxzZTsKICAgICAgICAgfSk7CkBAIC0yNzcsNyArMzAyLDcgQEAgdm9pZCBTdG9yYWdl
OjpzeW5jaHJvbml6ZSgpCiAKICAgICAgICAgZGVsZXRlRW1wdHlSZWNvcmRzRGlyZWN0b3JpZXMo
cmVjb3Jkc1BhdGgoKSk7CiAKLSAgICAgICAgTE9HKE5ldHdvcmtDYWNoZVN0b3JhZ2UsICIoTmV0
d29ya1Byb2Nlc3MpIGNhY2hlIHN5bmNocm9uaXphdGlvbiBjb21wbGV0ZWQgc2l6ZT0lenUgY291
bnQ9JWQiLCByZWNvcmRzU2l6ZSwgY291bnQpOworICAgICAgICBMT0coTmV0d29ya0NhY2hlU3Rv
cmFnZSwgIihOZXR3b3JrUHJvY2VzcykgY2FjaGUgc3luY2hyb25pemF0aW9uIGNvbXBsZXRlZCBz
aXplPSV6dSBjb3VudD0ldSIsIHJlY29yZHNTaXplLCBjb3VudCk7CiAgICAgfSk7CiB9CiAKQEAg
LTI5OSwzMCArMzI0LDMyIEBAIGJvb2wgU3RvcmFnZTo6bWF5Q29udGFpbihjb25zdCBLZXkmIGtl
eSkgY29uc3QKICAgICByZXR1cm4gIW1fcmVjb3JkRmlsdGVyIHx8IG1fcmVjb3JkRmlsdGVyLT5t
YXlDb250YWluKGtleS5oYXNoKCkpOwogfQogCi1TdHJpbmcgU3RvcmFnZTo6cGFydGl0aW9uUGF0
aEZvcktleShjb25zdCBLZXkmIGtleSkgY29uc3QKK2Jvb2wgU3RvcmFnZTo6bWF5Q29udGFpbkJs
b2IoY29uc3QgS2V5JiBrZXkpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKCFrZXkucGFydGl0aW9uKCku
aXNFbXB0eSgpKTsKLSAgICByZXR1cm4gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50
KHJlY29yZHNQYXRoKCksIGtleS5wYXJ0aXRpb24oKSk7CisgICAgQVNTRVJUKFJ1bkxvb3A6Omlz
TWFpbigpKTsKKyAgICByZXR1cm4gIW1fYmxvYkZpbHRlciB8fCBtX2Jsb2JGaWx0ZXItPm1heUNv
bnRhaW4oa2V5Lmhhc2goKSk7CiB9CiAKLXN0YXRpYyBTdHJpbmcgZmlsZU5hbWVGb3JLZXkoY29u
c3QgS2V5JiBrZXkpCitTdHJpbmcgU3RvcmFnZTo6cmVjb3JkRGlyZWN0b3J5UGF0aEZvcktleShj
b25zdCBLZXkmIGtleSkgY29uc3QKIHsKLSAgICByZXR1cm4ga2V5Lmhhc2hBc1N0cmluZygpOwor
ICAgIEFTU0VSVCgha2V5LnBhcnRpdGlvbigpLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKCFrZXku
dHlwZSgpLmlzRW1wdHkoKSk7CisgICAgcmV0dXJuIFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0Nv
bXBvbmVudChXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQocmVjb3Jkc1BhdGgoKSwg
a2V5LnBhcnRpdGlvbigpKSwga2V5LnR5cGUoKSk7CiB9CiAKIFN0cmluZyBTdG9yYWdlOjpyZWNv
cmRQYXRoRm9yS2V5KGNvbnN0IEtleSYga2V5KSBjb25zdAogewotICAgIHJldHVybiBXZWJDb3Jl
OjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQocGFydGl0aW9uUGF0aEZvcktleShrZXkpLCBmaWxl
TmFtZUZvcktleShrZXkpKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29t
cG9uZW50KHJlY29yZERpcmVjdG9yeVBhdGhGb3JLZXkoa2V5KSwga2V5Lmhhc2hBc1N0cmluZygp
KTsKIH0KIAotc3RhdGljIFN0cmluZyBib2R5UGF0aEZvclJlY29yZFBhdGgoY29uc3QgU3RyaW5n
JiByZWNvcmRQYXRoKQorc3RhdGljIFN0cmluZyBibG9iUGF0aEZvclJlY29yZFBhdGgoY29uc3Qg
U3RyaW5nJiByZWNvcmRQYXRoKQogewotICAgIHJldHVybiByZWNvcmRQYXRoICsgYm9keVBvc3Rm
aXg7CisgICAgcmV0dXJuIHJlY29yZFBhdGggKyBibG9iU3VmZml4OwogfQogCi1TdHJpbmcgU3Rv
cmFnZTo6Ym9keVBhdGhGb3JLZXkoY29uc3QgS2V5JiBrZXkpIGNvbnN0CitTdHJpbmcgU3RvcmFn
ZTo6YmxvYlBhdGhGb3JLZXkoY29uc3QgS2V5JiBrZXkpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGJv
ZHlQYXRoRm9yUmVjb3JkUGF0aChyZWNvcmRQYXRoRm9yS2V5KGtleSkpOworICAgIHJldHVybiBi
bG9iUGF0aEZvclJlY29yZFBhdGgocmVjb3JkUGF0aEZvcktleShrZXkpKTsKIH0KIAogc3RydWN0
IFJlY29yZE1ldGFEYXRhIHsKQEAgLTQ1MiwyMCArNDc5LDIwIEBAIHN0YXRpYyBEYXRhIGVuY29k
ZVJlY29yZE1ldGFEYXRhKGNvbnN0IFJlY29yZE1ldGFEYXRhJiBtZXRhRGF0YSkKIAogT3B0aW9u
YWw8QmxvYlN0b3JhZ2U6OkJsb2I+IFN0b3JhZ2U6OnN0b3JlQm9keUFzQmxvYihXcml0ZU9wZXJh
dGlvbiYgd3JpdGVPcGVyYXRpb24pCiB7Ci0gICAgYXV0byBib2R5UGF0aCA9IGJvZHlQYXRoRm9y
S2V5KHdyaXRlT3BlcmF0aW9uLnJlY29yZC5rZXkpOworICAgIGF1dG8gYmxvYlBhdGggPSBibG9i
UGF0aEZvcktleSh3cml0ZU9wZXJhdGlvbi5yZWNvcmQua2V5KTsKIAogICAgIC8vIFN0b3JlIHRo
ZSBib2R5LgotICAgIGF1dG8gYmxvYiA9IG1fYmxvYlN0b3JhZ2UuYWRkKGJvZHlQYXRoLCB3cml0
ZU9wZXJhdGlvbi5yZWNvcmQuYm9keSk7CisgICAgYXV0byBibG9iID0gbV9ibG9iU3RvcmFnZS5h
ZGQoYmxvYlBhdGgsIHdyaXRlT3BlcmF0aW9uLnJlY29yZC5ib2R5KTsKICAgICBpZiAoYmxvYi5k
YXRhLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4geyB9OwogCiAgICAgKyt3cml0ZU9wZXJhdGlv
bi5hY3RpdmVDb3VudDsKIAogICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbdGhpcywgYmxv
YiwgJndyaXRlT3BlcmF0aW9uXSB7Ci0gICAgICAgIGlmIChtX2JvZHlGaWx0ZXIpCi0gICAgICAg
ICAgICBtX2JvZHlGaWx0ZXItPmFkZCh3cml0ZU9wZXJhdGlvbi5yZWNvcmQua2V5Lmhhc2goKSk7
CisgICAgICAgIGlmIChtX2Jsb2JGaWx0ZXIpCisgICAgICAgICAgICBtX2Jsb2JGaWx0ZXItPmFk
ZCh3cml0ZU9wZXJhdGlvbi5yZWNvcmQua2V5Lmhhc2goKSk7CiAgICAgICAgIGlmIChtX3N5bmNo
cm9uaXphdGlvbkluUHJvZ3Jlc3MpCi0gICAgICAgICAgICBtX2JvZHlGaWx0ZXJIYXNoZXNBZGRl
ZER1cmluZ1N5bmNocm9uaXphdGlvbi5hcHBlbmQod3JpdGVPcGVyYXRpb24ucmVjb3JkLmtleS5o
YXNoKCkpOworICAgICAgICAgICAgbV9ibG9iRmlsdGVySGFzaGVzQWRkZWREdXJpbmdTeW5jaHJv
bml6YXRpb24uYXBwZW5kKHdyaXRlT3BlcmF0aW9uLnJlY29yZC5rZXkuaGFzaCgpKTsKIAogICAg
ICAgICBpZiAod3JpdGVPcGVyYXRpb24ubWFwcGVkQm9keUhhbmRsZXIpCiAgICAgICAgICAgICB3
cml0ZU9wZXJhdGlvbi5tYXBwZWRCb2R5SGFuZGxlcihibG9iLmRhdGEpOwpAQCAtNTIzLDcgKzU1
MCw3IEBAIHZvaWQgU3RvcmFnZTo6cmVtb3ZlKGNvbnN0IEtleSYga2V5KQogCiAgICAgc2VyaWFs
QmFja2dyb3VuZElPUXVldWUoKS5kaXNwYXRjaChbdGhpcywga2V5XSB7CiAgICAgICAgIFdlYkNv
cmU6OmRlbGV0ZUZpbGUocmVjb3JkUGF0aEZvcktleShrZXkpKTsKLSAgICAgICAgbV9ibG9iU3Rv
cmFnZS5yZW1vdmUoYm9keVBhdGhGb3JLZXkoa2V5KSk7CisgICAgICAgIG1fYmxvYlN0b3JhZ2Uu
cmVtb3ZlKGJsb2JQYXRoRm9yS2V5KGtleSkpOwogICAgIH0pOwogfQogCkBAIC01NDYsNyArNTcz
LDcgQEAgdm9pZCBTdG9yYWdlOjpkaXNwYXRjaFJlYWRPcGVyYXRpb24oc3RkOjp1bmlxdWVfcHRy
PFJlYWRPcGVyYXRpb24+IHJlYWRPcGVyYXRpb24KICAgICBjb25zdCBhdXRvIHJlYWRUaW1lb3V0
ID0gMTUwMF9tczsKICAgICBtX3JlYWRPcGVyYXRpb25UaW1lb3V0VGltZXIuc3RhcnRPbmVTaG90
KHJlYWRUaW1lb3V0KTsKIAotICAgIGJvb2wgc2hvdWxkR2V0Qm9keUJsb2IgPSAhbV9ib2R5Rmls
dGVyIHx8IG1fYm9keUZpbHRlci0+bWF5Q29udGFpbihyZWFkT3BlcmF0aW9uLmtleS5oYXNoKCkp
OworICAgIGJvb2wgc2hvdWxkR2V0Qm9keUJsb2IgPSBtYXlDb250YWluQmxvYihyZWFkT3BlcmF0
aW9uLmtleSk7CiAKICAgICBpb1F1ZXVlKCkuZGlzcGF0Y2goW3RoaXMsICZyZWFkT3BlcmF0aW9u
LCBzaG91bGRHZXRCb2R5QmxvYl0gewogICAgICAgICBhdXRvIHJlY29yZFBhdGggPSByZWNvcmRQ
YXRoRm9yS2V5KHJlYWRPcGVyYXRpb24ua2V5KTsKQEAgLTU2Myw5ICs1OTAsOSBAQCB2b2lkIFN0
b3JhZ2U6OmRpc3BhdGNoUmVhZE9wZXJhdGlvbihzdGQ6OnVuaXF1ZV9wdHI8UmVhZE9wZXJhdGlv
bj4gcmVhZE9wZXJhdGlvbgogICAgICAgICB9KTsKIAogICAgICAgICBpZiAoc2hvdWxkR2V0Qm9k
eUJsb2IpIHsKLSAgICAgICAgICAgIC8vIFJlYWQgdGhlIGJvZHkgYmxvYiBpbiBwYXJhbGxlbCB3
aXRoIHRoZSByZWNvcmQgcmVhZC4KLSAgICAgICAgICAgIGF1dG8gYm9keVBhdGggPSBib2R5UGF0
aEZvcktleShyZWFkT3BlcmF0aW9uLmtleSk7Ci0gICAgICAgICAgICByZWFkT3BlcmF0aW9uLnJl
c3VsdEJvZHlCbG9iID0gbV9ibG9iU3RvcmFnZS5nZXQoYm9keVBhdGgpOworICAgICAgICAgICAg
Ly8gUmVhZCB0aGUgYmxvYiBpbiBwYXJhbGxlbCB3aXRoIHRoZSByZWNvcmQgcmVhZC4KKyAgICAg
ICAgICAgIGF1dG8gYmxvYlBhdGggPSBibG9iUGF0aEZvcktleShyZWFkT3BlcmF0aW9uLmtleSk7
CisgICAgICAgICAgICByZWFkT3BlcmF0aW9uLnJlc3VsdEJvZHlCbG9iID0gbV9ibG9iU3RvcmFn
ZS5nZXQoYmxvYlBhdGgpOwogICAgICAgICAgICAgZmluaXNoUmVhZE9wZXJhdGlvbihyZWFkT3Bl
cmF0aW9uKTsKICAgICAgICAgfQogICAgIH0pOwpAQCAtNTc0LDcgKzYwMSw3IEBAIHZvaWQgU3Rv
cmFnZTo6ZGlzcGF0Y2hSZWFkT3BlcmF0aW9uKHN0ZDo6dW5pcXVlX3B0cjxSZWFkT3BlcmF0aW9u
PiByZWFkT3BlcmF0aW9uCiB2b2lkIFN0b3JhZ2U6OmZpbmlzaFJlYWRPcGVyYXRpb24oUmVhZE9w
ZXJhdGlvbiYgcmVhZE9wZXJhdGlvbikKIHsKICAgICBBU1NFUlQocmVhZE9wZXJhdGlvbi5hY3Rp
dmVDb3VudCk7Ci0gICAgLy8gUmVjb3JkIGFuZCBib2R5IGJsb2IgcmVhZHMgbXVzdCBmaW5pc2gu
CisgICAgLy8gUmVjb3JkIGFuZCBibG9iIHJlYWRzIG11c3QgZmluaXNoLgogICAgIGlmICgtLXJl
YWRPcGVyYXRpb24uYWN0aXZlQ291bnQpCiAgICAgICAgIHJldHVybjsKIApAQCAtNjgxLDE3ICs3
MDgsMTcgQEAgdm9pZCBTdG9yYWdlOjpkaXNwYXRjaFdyaXRlT3BlcmF0aW9uKHN0ZDo6dW5pcXVl
X3B0cjxXcml0ZU9wZXJhdGlvbj4gd3JpdGVPcGVyYXQKICAgICBhZGRUb1JlY29yZEZpbHRlcih3
cml0ZU9wZXJhdGlvbi5yZWNvcmQua2V5KTsKIAogICAgIGJhY2tncm91bmRJT1F1ZXVlKCkuZGlz
cGF0Y2goW3RoaXMsICZ3cml0ZU9wZXJhdGlvbl0gewotICAgICAgICBhdXRvIHBhcnRpdGlvblBh
dGggPSBwYXJ0aXRpb25QYXRoRm9yS2V5KHdyaXRlT3BlcmF0aW9uLnJlY29yZC5rZXkpOworICAg
ICAgICBhdXRvIHJlY29yZERpcmVjdG9yUGF0aCA9IHJlY29yZERpcmVjdG9yeVBhdGhGb3JLZXko
d3JpdGVPcGVyYXRpb24ucmVjb3JkLmtleSk7CiAgICAgICAgIGF1dG8gcmVjb3JkUGF0aCA9IHJl
Y29yZFBhdGhGb3JLZXkod3JpdGVPcGVyYXRpb24ucmVjb3JkLmtleSk7CiAKLSAgICAgICAgV2Vi
Q29yZTo6bWFrZUFsbERpcmVjdG9yaWVzKHBhcnRpdGlvblBhdGgpOworICAgICAgICBXZWJDb3Jl
OjptYWtlQWxsRGlyZWN0b3JpZXMocmVjb3JkRGlyZWN0b3JQYXRoKTsKIAogICAgICAgICArK3dy
aXRlT3BlcmF0aW9uLmFjdGl2ZUNvdW50OwogCiAgICAgICAgIGJvb2wgc2hvdWxkU3RvcmVBc0Js
b2IgPSBzaG91bGRTdG9yZUJvZHlBc0Jsb2Iod3JpdGVPcGVyYXRpb24ucmVjb3JkLmJvZHkpOwot
ICAgICAgICBhdXRvIGJvZHlCbG9iID0gc2hvdWxkU3RvcmVBc0Jsb2IgPyBzdG9yZUJvZHlBc0Js
b2Iod3JpdGVPcGVyYXRpb24pIDogTnVsbG9wdDsKKyAgICAgICAgYXV0byBibG9iID0gc2hvdWxk
U3RvcmVBc0Jsb2IgPyBzdG9yZUJvZHlBc0Jsb2Iod3JpdGVPcGVyYXRpb24pIDogTnVsbG9wdDsK
IAotICAgICAgICBhdXRvIHJlY29yZERhdGEgPSBlbmNvZGVSZWNvcmQod3JpdGVPcGVyYXRpb24u
cmVjb3JkLCBib2R5QmxvYik7CisgICAgICAgIGF1dG8gcmVjb3JkRGF0YSA9IGVuY29kZVJlY29y
ZCh3cml0ZU9wZXJhdGlvbi5yZWNvcmQsIGJsb2IpOwogCiAgICAgICAgIGF1dG8gY2hhbm5lbCA9
IElPQ2hhbm5lbDo6b3BlbihyZWNvcmRQYXRoLCBJT0NoYW5uZWw6OlR5cGU6OkNyZWF0ZSk7CiAg
ICAgICAgIHNpemVfdCByZWNvcmRTaXplID0gcmVjb3JkRGF0YS5zaXplKCk7CkBAIC03NzAsMjgg
Kzc5NywzMCBAQCB2b2lkIFN0b3JhZ2U6OnN0b3JlKGNvbnN0IFJlY29yZCYgcmVjb3JkLCBNYXBw
ZWRCb2R5SGFuZGxlciYmIG1hcHBlZEJvZHlIYW5kbGVyKQogICAgIG1fd3JpdGVPcGVyYXRpb25E
aXNwYXRjaFRpbWVyLnN0YXJ0T25lU2hvdChpbml0aWFsV3JpdGVEZWxheSk7CiB9CiAKLXZvaWQg
U3RvcmFnZTo6dHJhdmVyc2UoVHJhdmVyc2VGbGFncyBmbGFncywgVHJhdmVyc2VIYW5kbGVyJiYg
dHJhdmVyc2VIYW5kbGVyKQordm9pZCBTdG9yYWdlOjp0cmF2ZXJzZShjb25zdCBTdHJpbmcmIHR5
cGUsIFRyYXZlcnNlRmxhZ3MgZmxhZ3MsIFRyYXZlcnNlSGFuZGxlciYmIHRyYXZlcnNlSGFuZGxl
cikKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIEFTU0VSVCh0cmF2ZXJz
ZUhhbmRsZXIpOwogICAgIC8vIEF2b2lkIG5vbi10aHJlYWQgc2FmZSBzdGQ6OmZ1bmN0aW9uIGNv
cGllcy4KIAotICAgIGF1dG8gdHJhdmVyc2VPcGVyYXRpb25QdHIgPSBzdGQ6Om1ha2VfdW5pcXVl
PFRyYXZlcnNlT3BlcmF0aW9uPihmbGFncywgV1RGOjptb3ZlKHRyYXZlcnNlSGFuZGxlcikpOwor
ICAgIGF1dG8gdHJhdmVyc2VPcGVyYXRpb25QdHIgPSBzdGQ6Om1ha2VfdW5pcXVlPFRyYXZlcnNl
T3BlcmF0aW9uPih0eXBlLCBmbGFncywgV1RGOjptb3ZlKHRyYXZlcnNlSGFuZGxlcikpOwogICAg
IGF1dG8mIHRyYXZlcnNlT3BlcmF0aW9uID0gKnRyYXZlcnNlT3BlcmF0aW9uUHRyOwogICAgIG1f
YWN0aXZlVHJhdmVyc2VPcGVyYXRpb25zLmFkZChXVEY6Om1vdmUodHJhdmVyc2VPcGVyYXRpb25Q
dHIpKTsKIAogICAgIGlvUXVldWUoKS5kaXNwYXRjaChbdGhpcywgJnRyYXZlcnNlT3BlcmF0aW9u
XSB7Ci0gICAgICAgIHRyYXZlcnNlUmVjb3Jkc0ZpbGVzKHJlY29yZHNQYXRoKCksIFt0aGlzLCAm
dHJhdmVyc2VPcGVyYXRpb25dKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IFN0cmluZyYg
cGFydGl0aW9uUGF0aCkgewotICAgICAgICAgICAgaWYgKGZpbGVOYW1lLmxlbmd0aCgpICE9IEtl
eTo6aGFzaFN0cmluZ0xlbmd0aCgpKQorICAgICAgICB0cmF2ZXJzZVJlY29yZHNGaWxlcyhyZWNv
cmRzUGF0aCgpLCB0cmF2ZXJzZU9wZXJhdGlvbi50eXBlLCBbdGhpcywgJnRyYXZlcnNlT3BlcmF0
aW9uXShjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBjb25zdCBTdHJpbmcmIGhhc2hTdHJpbmcsIGNv
bnN0IFN0cmluZyYgdHlwZSwgYm9vbCBpc0Jsb2IsIGNvbnN0IFN0cmluZyYgcmVjb3JkRGlyZWN0
b3J5UGF0aCkgeworICAgICAgICAgICAgQVNTRVJUKHR5cGUgPT0gdHJhdmVyc2VPcGVyYXRpb24u
dHlwZSk7CisgICAgICAgICAgICBpZiAoaXNCbG9iKQogICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgIGF1dG8gcmVjb3JkUGF0aCA9IFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0Nv
bXBvbmVudChwYXJ0aXRpb25QYXRoLCBmaWxlTmFtZSk7CisKKyAgICAgICAgICAgIGF1dG8gcmVj
b3JkUGF0aCA9IFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChyZWNvcmREaXJlY3Rv
cnlQYXRoLCBmaWxlTmFtZSk7CiAKICAgICAgICAgICAgIGRvdWJsZSB3b3J0aCA9IC0xOwogICAg
ICAgICAgICAgaWYgKHRyYXZlcnNlT3BlcmF0aW9uLmZsYWdzICYgVHJhdmVyc2VGbGFnOjpDb21w
dXRlV29ydGgpCiAgICAgICAgICAgICAgICAgd29ydGggPSBjb21wdXRlUmVjb3JkV29ydGgoZmls
ZVRpbWVzKHJlY29yZFBhdGgpKTsKICAgICAgICAgICAgIHVuc2lnbmVkIGJvZHlTaGFyZUNvdW50
ID0gMDsKICAgICAgICAgICAgIGlmICh0cmF2ZXJzZU9wZXJhdGlvbi5mbGFncyAmIFRyYXZlcnNl
RmxhZzo6U2hhcmVDb3VudCkKLSAgICAgICAgICAgICAgICBib2R5U2hhcmVDb3VudCA9IG1fYmxv
YlN0b3JhZ2Uuc2hhcmVDb3VudChib2R5UGF0aEZvclJlY29yZFBhdGgocmVjb3JkUGF0aCkpOwor
ICAgICAgICAgICAgICAgIGJvZHlTaGFyZUNvdW50ID0gbV9ibG9iU3RvcmFnZS5zaGFyZUNvdW50
KGJsb2JQYXRoRm9yUmVjb3JkUGF0aChyZWNvcmRQYXRoKSk7CiAKICAgICAgICAgICAgIHN0ZDo6
dW5pcXVlX2xvY2s8TG9jaz4gbG9jayh0cmF2ZXJzZU9wZXJhdGlvbi5hY3RpdmVNdXRleCk7CiAg
ICAgICAgICAgICArK3RyYXZlcnNlT3BlcmF0aW9uLmFjdGl2ZUNvdW50OwpAQCAtODU2LDI0ICs4
ODUsMjQgQEAgdm9pZCBTdG9yYWdlOjpzZXRDYXBhY2l0eShzaXplX3QgY2FwYWNpdHkpCiAgICAg
c2hyaW5rSWZOZWVkZWQoKTsKIH0KIAotdm9pZCBTdG9yYWdlOjpjbGVhcihzdGQ6OmNocm9ubzo6
c3lzdGVtX2Nsb2NrOjp0aW1lX3BvaW50IG1vZGlmaWVkU2luY2VUaW1lLCBzdGQ6OmZ1bmN0aW9u
PHZvaWQgKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIFN0b3JhZ2U6OmNsZWFyKGNvbnN0
IFN0cmluZyYgdHlwZSwgc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6dGltZV9wb2ludCBtb2Rp
ZmllZFNpbmNlVGltZSwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgTE9HKE5ldHdvcmtDYWNo
ZVN0b3JhZ2UsICIoTmV0d29ya1Byb2Nlc3MpIGNsZWFyaW5nIGNhY2hlIik7CiAKICAgICBpZiAo
bV9yZWNvcmRGaWx0ZXIpCiAgICAgICAgIG1fcmVjb3JkRmlsdGVyLT5jbGVhcigpOwotICAgIGlm
IChtX2JvZHlGaWx0ZXIpCi0gICAgICAgIG1fYm9keUZpbHRlci0+Y2xlYXIoKTsKKyAgICBpZiAo
bV9ibG9iRmlsdGVyKQorICAgICAgICBtX2Jsb2JGaWx0ZXItPmNsZWFyKCk7CiAgICAgbV9hcHBy
b3hpbWF0ZVJlY29yZHNTaXplID0gMDsKIAogICAgIC8vIEF2b2lkIG5vbi10aHJlYWQgc2FmZSBz
dGQ6OmZ1bmN0aW9uIGNvcGllcy4KICAgICBhdXRvKiBjb21wbGV0aW9uSGFuZGxlclB0ciA9IGNv
bXBsZXRpb25IYW5kbGVyID8gbmV3IHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4oV1RGOjptb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSkgOiBudWxscHRyOwotCi0gICAgaW9RdWV1ZSgpLmRpc3BhdGNoKFt0
aGlzLCBtb2RpZmllZFNpbmNlVGltZSwgY29tcGxldGlvbkhhbmRsZXJQdHJdIHsKKyAgICBTdHJp
bmdDYXB0dXJlIHR5cGVDYXB0dXJlKHR5cGUpOworICAgIGlvUXVldWUoKS5kaXNwYXRjaChbdGhp
cywgbW9kaWZpZWRTaW5jZVRpbWUsIGNvbXBsZXRpb25IYW5kbGVyUHRyLCB0eXBlQ2FwdHVyZV0g
ewogICAgICAgICBhdXRvIHJlY29yZHNQYXRoID0gdGhpcy0+cmVjb3Jkc1BhdGgoKTsKLSAgICAg
ICAgdHJhdmVyc2VSZWNvcmRzRmlsZXMocmVjb3Jkc1BhdGgsIFttb2RpZmllZFNpbmNlVGltZV0o
Y29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgU3RyaW5nJiBwYXJ0aXRpb25QYXRoKSB7Ci0g
ICAgICAgICAgICBhdXRvIGZpbGVQYXRoID0gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9u
ZW50KHBhcnRpdGlvblBhdGgsIGZpbGVOYW1lKTsKKyAgICAgICAgdHJhdmVyc2VSZWNvcmRzRmls
ZXMocmVjb3Jkc1BhdGgsIHR5cGVDYXB0dXJlLnN0cmluZygpLCBbbW9kaWZpZWRTaW5jZVRpbWVd
KGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IFN0cmluZyYgaGFzaFN0cmluZywgY29uc3Qg
U3RyaW5nJiB0eXBlLCBib29sIGlzQmxvYiwgY29uc3QgU3RyaW5nJiByZWNvcmREaXJlY3RvcnlQ
YXRoKSB7CisgICAgICAgICAgICBhdXRvIGZpbGVQYXRoID0gV2ViQ29yZTo6cGF0aEJ5QXBwZW5k
aW5nQ29tcG9uZW50KHJlY29yZERpcmVjdG9yeVBhdGgsIGZpbGVOYW1lKTsKICAgICAgICAgICAg
IGlmIChtb2RpZmllZFNpbmNlVGltZSA+IHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6OnRpbWVf
cG9pbnQ6Om1pbigpKSB7CiAgICAgICAgICAgICAgICAgYXV0byB0aW1lcyA9IGZpbGVUaW1lcyhm
aWxlUGF0aCk7CiAgICAgICAgICAgICAgICAgaWYgKHRpbWVzLm1vZGlmaWNhdGlvbiA8IG1vZGlm
aWVkU2luY2VUaW1lKQpAQCAtODg0LDcgKzkxMyw3IEBAIHZvaWQgU3RvcmFnZTo6Y2xlYXIoc3Rk
OjpjaHJvbm86OnN5c3RlbV9jbG9jazo6dGltZV9wb2ludCBtb2RpZmllZFNpbmNlVGltZSwgc3Rk
CiAKICAgICAgICAgZGVsZXRlRW1wdHlSZWNvcmRzRGlyZWN0b3JpZXMocmVjb3Jkc1BhdGgpOwog
Ci0gICAgICAgIC8vIFRoaXMgY2xlYW5zIHVucmVmZXJlbmNlcyBibG9icy4KKyAgICAgICAgLy8g
VGhpcyBjbGVhbnMgdW5yZWZlcmVuY2VkIGJsb2JzLgogICAgICAgICBtX2Jsb2JTdG9yYWdlLnN5
bmNocm9uaXplKCk7CiAKICAgICAgICAgaWYgKGNvbXBsZXRpb25IYW5kbGVyUHRyKSB7CkBAIC05
NTAsMTQgKzk3OSwxNiBAQCB2b2lkIFN0b3JhZ2U6OnNocmluaygpCiAKICAgICBiYWNrZ3JvdW5k
SU9RdWV1ZSgpLmRpc3BhdGNoKFt0aGlzXSB7CiAgICAgICAgIGF1dG8gcmVjb3Jkc1BhdGggPSB0
aGlzLT5yZWNvcmRzUGF0aCgpOwotICAgICAgICB0cmF2ZXJzZVJlY29yZHNGaWxlcyhyZWNvcmRz
UGF0aCwgW3RoaXNdKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IFN0cmluZyYgcGFydGl0
aW9uUGF0aCkgewotICAgICAgICAgICAgaWYgKGZpbGVOYW1lLmxlbmd0aCgpICE9IEtleTo6aGFz
aFN0cmluZ0xlbmd0aCgpKQorICAgICAgICBTdHJpbmcgYW55VHlwZTsKKyAgICAgICAgdHJhdmVy
c2VSZWNvcmRzRmlsZXMocmVjb3Jkc1BhdGgsIGFueVR5cGUsIFt0aGlzXShjb25zdCBTdHJpbmcm
IGZpbGVOYW1lLCBjb25zdCBTdHJpbmcmIGhhc2hTdHJpbmcsIGNvbnN0IFN0cmluZyYgdHlwZSwg
Ym9vbCBpc0Jsb2IsIGNvbnN0IFN0cmluZyYgcmVjb3JkRGlyZWN0b3J5UGF0aCkgeworICAgICAg
ICAgICAgaWYgKGlzQmxvYikKICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBh
dXRvIHJlY29yZFBhdGggPSBXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQocGFydGl0
aW9uUGF0aCwgZmlsZU5hbWUpOwotICAgICAgICAgICAgYXV0byBib2R5UGF0aCA9IGJvZHlQYXRo
Rm9yUmVjb3JkUGF0aChyZWNvcmRQYXRoKTsKKworICAgICAgICAgICAgYXV0byByZWNvcmRQYXRo
ID0gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHJlY29yZERpcmVjdG9yeVBhdGgs
IGZpbGVOYW1lKTsKKyAgICAgICAgICAgIGF1dG8gYmxvYlBhdGggPSBibG9iUGF0aEZvclJlY29y
ZFBhdGgocmVjb3JkUGF0aCk7CiAKICAgICAgICAgICAgIGF1dG8gdGltZXMgPSBmaWxlVGltZXMo
cmVjb3JkUGF0aCk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBib2R5U2hhcmVDb3VudCA9IG1fYmxv
YlN0b3JhZ2Uuc2hhcmVDb3VudChib2R5UGF0aCk7CisgICAgICAgICAgICB1bnNpZ25lZCBib2R5
U2hhcmVDb3VudCA9IG1fYmxvYlN0b3JhZ2Uuc2hhcmVDb3VudChibG9iUGF0aCk7CiAgICAgICAg
ICAgICBhdXRvIHByb2JhYmlsaXR5ID0gZGVsZXRpb25Qcm9iYWJpbGl0eSh0aW1lcywgYm9keVNo
YXJlQ291bnQpOwogCiAgICAgICAgICAgICBib29sIHNob3VsZERlbGV0ZSA9IHJhbmRvbU51bWJl
cigpIDwgcHJvYmFiaWxpdHk7CkBAIC05NjYsNyArOTk3LDcgQEAgdm9pZCBTdG9yYWdlOjpzaHJp
bmsoKQogCiAgICAgICAgICAgICBpZiAoc2hvdWxkRGVsZXRlKSB7CiAgICAgICAgICAgICAgICAg
V2ViQ29yZTo6ZGVsZXRlRmlsZShyZWNvcmRQYXRoKTsKLSAgICAgICAgICAgICAgICBtX2Jsb2JT
dG9yYWdlLnJlbW92ZShib2R5UGF0aCk7CisgICAgICAgICAgICAgICAgbV9ibG9iU3RvcmFnZS5y
ZW1vdmUoYmxvYlBhdGgpOwogICAgICAgICAgICAgfQogICAgICAgICB9KTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFn
ZS5oIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3Rv
cmFnZS5oCmluZGV4IDM2ZGMxZDlhMmYzYmZiZjM5ZThhMTMyNjdkODBkODRjNTc2ZWE2NzIuLjVm
N2RiZTUxNTAwMDZiY2VhMTdjNDg2OWQ0Y2YwYjEwZDk3MjYyMzYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdl
LmgKQEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgogICAgIHZvaWQgc3RvcmUoY29uc3QgUmVjb3Jk
JiwgTWFwcGVkQm9keUhhbmRsZXImJik7CiAKICAgICB2b2lkIHJlbW92ZShjb25zdCBLZXkmKTsK
LSAgICB2b2lkIGNsZWFyKHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6OnRpbWVfcG9pbnQgbW9k
aWZpZWRTaW5jZVRpbWUsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4mJiBjb21wbGV0aW9uSGFuZGxl
cik7CisgICAgdm9pZCBjbGVhcihjb25zdCBTdHJpbmcmIHR5cGUsIHN0ZDo6Y2hyb25vOjpzeXN0
ZW1fY2xvY2s6OnRpbWVfcG9pbnQgbW9kaWZpZWRTaW5jZVRpbWUsIHN0ZDo6ZnVuY3Rpb248dm9p
ZCAoKT4mJiBjb21wbGV0aW9uSGFuZGxlcik7CiAKICAgICBzdHJ1Y3QgUmVjb3JkSW5mbyB7CiAg
ICAgICAgIHNpemVfdCBib2R5U2l6ZTsKQEAgLTgwLDEzICs4MCwxMyBAQCBwdWJsaWM6CiAgICAg
dHlwZWRlZiB1bnNpZ25lZCBUcmF2ZXJzZUZsYWdzOwogICAgIHR5cGVkZWYgc3RkOjpmdW5jdGlv
bjx2b2lkIChjb25zdCBSZWNvcmQqLCBjb25zdCBSZWNvcmRJbmZvJik+IFRyYXZlcnNlSGFuZGxl
cjsKICAgICAvLyBOdWxsIHJlY29yZCBzaWduYWxzIGVuZC4KLSAgICB2b2lkIHRyYXZlcnNlKFRy
YXZlcnNlRmxhZ3MsIFRyYXZlcnNlSGFuZGxlciYmKTsKKyAgICB2b2lkIHRyYXZlcnNlKGNvbnN0
IFN0cmluZyYgdHlwZSwgVHJhdmVyc2VGbGFncywgVHJhdmVyc2VIYW5kbGVyJiYpOwogCiAgICAg
dm9pZCBzZXRDYXBhY2l0eShzaXplX3QpOwogICAgIHNpemVfdCBjYXBhY2l0eSgpIGNvbnN0IHsg
cmV0dXJuIG1fY2FwYWNpdHk7IH0KICAgICBzaXplX3QgYXBwcm94aW1hdGVTaXplKCkgY29uc3Q7
CiAKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgdmVyc2lvbiA9IDQ7CisgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIHZlcnNpb24gPSA1OwogCiAgICAgU3RyaW5nIGJhc2VQYXRoKCkgY29uc3Q7
CiAgICAgU3RyaW5nIHZlcnNpb25QYXRoKCkgY29uc3Q7CkBAIC05Nyw5ICs5Nyw5IEBAIHB1Ymxp
YzoKIHByaXZhdGU6CiAgICAgU3RvcmFnZShjb25zdCBTdHJpbmcmIGRpcmVjdG9yeVBhdGgpOwog
Ci0gICAgU3RyaW5nIHBhcnRpdGlvblBhdGhGb3JLZXkoY29uc3QgS2V5JikgY29uc3Q7CisgICAg
U3RyaW5nIHJlY29yZERpcmVjdG9yeVBhdGhGb3JLZXkoY29uc3QgS2V5JikgY29uc3Q7CiAgICAg
U3RyaW5nIHJlY29yZFBhdGhGb3JLZXkoY29uc3QgS2V5JikgY29uc3Q7Ci0gICAgU3RyaW5nIGJv
ZHlQYXRoRm9yS2V5KGNvbnN0IEtleSYpIGNvbnN0OworICAgIFN0cmluZyBibG9iUGF0aEZvcktl
eShjb25zdCBLZXkmKSBjb25zdDsKIAogICAgIHZvaWQgc3luY2hyb25pemUoKTsKICAgICB2b2lk
IGRlbGV0ZU9sZFZlcnNpb25zKCk7CkBAIC0xMjksNiArMTI5LDcgQEAgcHJpdmF0ZToKICAgICBX
b3JrUXVldWUmIHNlcmlhbEJhY2tncm91bmRJT1F1ZXVlKCkgeyByZXR1cm4gbV9zZXJpYWxCYWNr
Z3JvdW5kSU9RdWV1ZS5nZXQoKTsgfQogCiAgICAgYm9vbCBtYXlDb250YWluKGNvbnN0IEtleSYp
IGNvbnN0OworICAgIGJvb2wgbWF5Q29udGFpbkJsb2IoY29uc3QgS2V5JikgY29uc3Q7CiAKICAg
ICB2b2lkIGFkZFRvUmVjb3JkRmlsdGVyKGNvbnN0IEtleSYpOwogCkBAIC0xNDEsMTMgKzE0Miwx
MyBAQCBwcml2YXRlOgogICAgIC8vIDJeMTggYml0IGZpbHRlciBjYW4gc3VwcG9ydCB1cCB0byAy
NjAwMCBlbnRyaWVzIHdpdGggZmFsc2UgcG9zaXRpdmUgcmF0ZSA8IDElLgogICAgIHVzaW5nIENv
bnRlbnRzRmlsdGVyID0gQmxvb21GaWx0ZXI8MTg+OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxDb250
ZW50c0ZpbHRlcj4gbV9yZWNvcmRGaWx0ZXI7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPENvbnRlbnRz
RmlsdGVyPiBtX2JvZHlGaWx0ZXI7CisgICAgc3RkOjp1bmlxdWVfcHRyPENvbnRlbnRzRmlsdGVy
PiBtX2Jsb2JGaWx0ZXI7CiAKICAgICBib29sIG1fc3luY2hyb25pemF0aW9uSW5Qcm9ncmVzcyB7
IGZhbHNlIH07CiAgICAgYm9vbCBtX3Nocmlua0luUHJvZ3Jlc3MgeyBmYWxzZSB9OwogCiAgICAg
VmVjdG9yPEtleTo6SGFzaFR5cGU+IG1fcmVjb3JkRmlsdGVySGFzaGVzQWRkZWREdXJpbmdTeW5j
aHJvbml6YXRpb247Ci0gICAgVmVjdG9yPEtleTo6SGFzaFR5cGU+IG1fYm9keUZpbHRlckhhc2hl
c0FkZGVkRHVyaW5nU3luY2hyb25pemF0aW9uOworICAgIFZlY3RvcjxLZXk6Okhhc2hUeXBlPiBt
X2Jsb2JGaWx0ZXJIYXNoZXNBZGRlZER1cmluZ1N5bmNocm9uaXphdGlvbjsKIAogICAgIHN0YXRp
YyBjb25zdCBpbnQgbWF4aW11bVJldHJpZXZlUHJpb3JpdHkgPSA0OwogICAgIERlcXVlPHN0ZDo6
dW5pcXVlX3B0cjxSZWFkT3BlcmF0aW9uPj4gbV9wZW5kaW5nUmVhZE9wZXJhdGlvbnNCeVByaW9y
aXR5W21heGltdW1SZXRyaWV2ZVByaW9yaXR5ICsgMV07CkBAIC0xNjksNyArMTcwLDcgQEAgcHJp
dmF0ZToKIH07CiAKIC8vIEZJWE1FOiBSZW1vdmUsIHVzZWQgYnkgTmV0d29ya0NhY2hlU3RhdGlz
dGljcyBvbmx5Lgotdm9pZCB0cmF2ZXJzZVJlY29yZHNGaWxlcyhjb25zdCBTdHJpbmcmIHJlY29y
ZHNQYXRoLCBjb25zdCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0
cmluZyYpPiYpOwordm9pZCB0cmF2ZXJzZVJlY29yZHNGaWxlcyhjb25zdCBTdHJpbmcmIHJlY29y
ZHNQYXRoLCBjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IHN0ZDo6ZnVuY3Rpb248dm9pZCAoY29u
c3QgU3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgU3RyaW5nJiBoYXNoU3RyaW5nLCBjb25zdCBTdHJp
bmcmIHR5cGUsIGJvb2wgaXNCb2R5QmxvYiwgY29uc3QgU3RyaW5nJiByZWNvcmREaXJlY3RvcnlQ
YXRoKT4mKTsKIAogfQogfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>