<?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>172793</bug_id>
          
          <creation_ts>2017-05-31 20:37:52 -0700</creation_ts>
          <short_desc>GC should use scrambled free-lists</short_desc>
          <delta_ts>2017-06-09 11:27:20 -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>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>buildbot</cc>
    
    <cc>clopez</cc>
    
    <cc>ggaren</cc>
    
    <cc>guijemont</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>ossy</cc>
    
    <cc>ryanhaddad</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1314518</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-05-31 20:37:52 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1314519</commentid>
    <comment_count>1</comment_count>
      <attachid>311676</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-05-31 20:38:30 -0700</bug_when>
    <thetext>Created attachment 311676
it&apos;s a start</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1314641</commentid>
    <comment_count>2</comment_count>
      <attachid>311709</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-06-01 09:17:10 -0700</bug_when>
    <thetext>Created attachment 311709
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1314659</commentid>
    <comment_count>3</comment_count>
      <attachid>311711</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-06-01 09:53:46 -0700</bug_when>
    <thetext>Created attachment 311711
it grows</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1314698</commentid>
    <comment_count>4</comment_count>
      <attachid>311722</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-06-01 10:32:46 -0700</bug_when>
    <thetext>Created attachment 311722
compiles in debug and runs some simple code

Building and testing release now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1314699</commentid>
    <comment_count>5</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-06-01 10:34:42 -0700</bug_when>
    <thetext>Attachment 311722 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/MarkedAllocator.cpp:159:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 1 in 23 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>1314703</commentid>
    <comment_count>6</comment_count>
      <attachid>311724</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-06-01 10:41:53 -0700</bug_when>
    <thetext>Created attachment 311724
release builds and seems to pass some tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1314706</commentid>
    <comment_count>7</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-06-01 10:44:44 -0700</bug_when>
    <thetext>Attachment 311724 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/MarkedAllocator.cpp:159:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 1 in 24 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>1314719</commentid>
    <comment_count>8</comment_count>
      <attachid>311728</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-06-01 11:05:46 -0700</bug_when>
    <thetext>Created attachment 311728
the patch

Fix builds</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1314720</commentid>
    <comment_count>9</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-06-01 11:07:29 -0700</bug_when>
    <thetext>Attachment 311728 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/MarkedAllocator.cpp:159:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 1 in 24 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>1314731</commentid>
    <comment_count>10</comment_count>
      <attachid>311733</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-06-01 11:22:54 -0700</bug_when>
    <thetext>Created attachment 311733
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1314734</commentid>
    <comment_count>11</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-06-01 11:25:23 -0700</bug_when>
    <thetext>Attachment 311733 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/MarkedAllocator.cpp:159:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 1 in 24 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>1314737</commentid>
    <comment_count>12</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2017-06-01 11:27:45 -0700</bug_when>
    <thetext>View in context: https://bugs.webkit.org/attachment.cgi?id=311728&amp;action=review

lgtm (with comments), but i&apos;d obviously prefer someone more familiar with ToT to actually r+

&gt; Source/JavaScriptCore/heap/FreeList.cpp:71
&gt; +    m_remaining = remaining;

can you add a RELEASE_ASSERT(remaining % cellSize == 0 ) ?

&gt; Source/JavaScriptCore/heap/FreeListInlines.h:43
&gt; +    unsigned remaining = m_remaining;

Can you see if making this Checked&lt;unsigned&gt; has a perf impact? This is simply paranoia and the code does not obviously overflow, but i&apos;m increasingly paranoid about almost math these days :D

&gt; Source/JavaScriptCore/heap/FreeListInlines.h:47
&gt; +        m_remaining = remaining;

This being safe is dependent on remaining always being a multiple of m_cellSize.

&gt; Source/JavaScriptCore/heap/MarkedAllocator.cpp:159
&gt; +        [] () -&gt; HeapCell* { RELEASE_ASSERT_NOT_REACHED(); return nullptr; });

nice</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1314744</commentid>
    <comment_count>13</comment_count>
      <attachid>311724</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-06-01 11:35:41 -0700</bug_when>
    <thetext>Comment on attachment 311724
release builds and seems to pass some tests

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

&gt; Source/JavaScriptCore/heap/FreeList.cpp:38
&gt; +    static_assert(MarkedBlock::blockSize &lt;= (1u &lt;&lt; (sizeof(FreeOffset) * 8)), &quot;FreeList assumes that FreeOffset is big enough to express all possible block offsets&quot;);

Why 8?  Why not MarkedBlock::atomSize?  According to MarkedBlock::Handle::cellSize(), the cellSize is m_atomsPerCell * atomSize.  That means the minimum cellSize is atomSize (which incidentally is 16 bytes).

&gt; Source/JavaScriptCore/heap/FreeList.cpp:46
&gt; +FreeList::~FreeList()
&gt; +{
&gt; +}

Can we delete this since it does nothing?

&gt; Source/JavaScriptCore/heap/FreeList.h:-82
&gt; -    bool operator==(const FreeList&amp; other) const
&gt; -    {
&gt; -        return head == other.head
&gt; -            &amp;&amp; payloadEnd == other.payloadEnd
&gt; -            &amp;&amp; remaining == other.remaining
&gt; -            &amp;&amp; originalSize == other.originalSize;
&gt; -    }
&gt; -    
&gt; -    bool operator!=(const FreeList&amp; other) const
&gt; -    {
&gt; -        return !(*this == other);
&gt; -    }
&gt; -    
&gt; -    explicit operator bool() const
&gt; -    {
&gt; -        return *this != FreeList();
&gt; -    }

Are these unused?  Would you mind adding = delete versions of these in the private section just to make sure that we&apos;re not using the default versions of them unexpectedly?

&gt; Source/JavaScriptCore/heap/FreeList.h:43
&gt; +    ~FreeList();

Delete since it does nothing?

&gt; Source/JavaScriptCore/heap/FreeList.h:80
&gt; +    unsigned m_cellSize { UINT_MAX };

nit: can we group this with the other unsigneds below for better packing (though it happens to not matter right now because you have an odd number of unsigneds at the moment )?

&gt; Source/JavaScriptCore/heap/FreeList.h:84
&gt; +    unsigned m_listSize { 0 };
&gt; +    unsigned m_index { 0 };

nit: Why not make these of type FreeOffset since they should be bounded by FreeOffset, no?

Oh wait ... is there an atomicity requirement that requires that these be 32-bit?  Or is it just because it&apos;s bothersome to have the JIT code read/write a 16bit field?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1314747</commentid>
    <comment_count>14</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-06-01 11:45:05 -0700</bug_when>
    <thetext>(In reply to Oliver Hunt from comment #12)
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=311728&amp;action=review
&gt; 
&gt; lgtm (with comments), but i&apos;d obviously prefer someone more familiar with
&gt; ToT to actually r+
&gt; 
&gt; &gt; Source/JavaScriptCore/heap/FreeList.cpp:71
&gt; &gt; +    m_remaining = remaining;
&gt; 
&gt; can you add a RELEASE_ASSERT(remaining % cellSize == 0 ) ?

I suppose.

&gt; 
&gt; &gt; Source/JavaScriptCore/heap/FreeListInlines.h:43
&gt; &gt; +    unsigned remaining = m_remaining;
&gt; 
&gt; Can you see if making this Checked&lt;unsigned&gt; has a perf impact? This is
&gt; simply paranoia and the code does not obviously overflow, but i&apos;m
&gt; increasingly paranoid about almost math these days :D

I don&apos;t think we want to use Checked&lt;&gt; everywhere.  This bump allocator is unchanged in this patch, so even if we did want to harden it, we&apos;d want to do this in another patch.  I wouldn&apos;t want to see that, though.  This code is meant to be compact.

&gt; 
&gt; &gt; Source/JavaScriptCore/heap/FreeListInlines.h:47
&gt; &gt; +        m_remaining = remaining;
&gt; 
&gt; This being safe is dependent on remaining always being a multiple of
&gt; m_cellSize.

Which has always been true.  I&apos;m not worried about that path.

&gt; 
&gt; &gt; Source/JavaScriptCore/heap/MarkedAllocator.cpp:159
&gt; &gt; +        [] () -&gt; HeapCell* { RELEASE_ASSERT_NOT_REACHED(); return nullptr; });
&gt; 
&gt; nice</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1314749</commentid>
    <comment_count>15</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-06-01 11:49:35 -0700</bug_when>
    <thetext>(In reply to Mark Lam from comment #13)
&gt; Comment on attachment 311724 [details]
&gt; release builds and seems to pass some tests
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=311724&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/heap/FreeList.cpp:38
&gt; &gt; +    static_assert(MarkedBlock::blockSize &lt;= (1u &lt;&lt; (sizeof(FreeOffset) * 8)), &quot;FreeList assumes that FreeOffset is big enough to express all possible block offsets&quot;);
&gt; 
&gt; Why 8?  Why not MarkedBlock::atomSize?  According to
&gt; MarkedBlock::Handle::cellSize(), the cellSize is m_atomsPerCell * atomSize. 
&gt; That means the minimum cellSize is atomSize (which incidentally is 16 bytes).

sizeof(blah)*8 is a way of counting the bits in blah.  This is counting the number of bits in FreeOffset, which is 16.  The result is 16K, which is also blockSize.  The point is: if we made blockSize any bigger, then a 16-bit offset wouldn&apos;t work anymore.

&gt; 
&gt; &gt; Source/JavaScriptCore/heap/FreeList.cpp:46
&gt; &gt; +FreeList::~FreeList()
&gt; &gt; +{
&gt; &gt; +}
&gt; 
&gt; Can we delete this since it does nothing?

It deallocates the m_list, which is a unique_ptr.  I like having those kinds of things get outlined.  Makes debugging easier IMO.

&gt; 
&gt; &gt; Source/JavaScriptCore/heap/FreeList.h:-82
&gt; &gt; -    bool operator==(const FreeList&amp; other) const
&gt; &gt; -    {
&gt; &gt; -        return head == other.head
&gt; &gt; -            &amp;&amp; payloadEnd == other.payloadEnd
&gt; &gt; -            &amp;&amp; remaining == other.remaining
&gt; &gt; -            &amp;&amp; originalSize == other.originalSize;
&gt; &gt; -    }
&gt; &gt; -    
&gt; &gt; -    bool operator!=(const FreeList&amp; other) const
&gt; &gt; -    {
&gt; &gt; -        return !(*this == other);
&gt; &gt; -    }
&gt; &gt; -    
&gt; &gt; -    explicit operator bool() const
&gt; &gt; -    {
&gt; &gt; -        return *this != FreeList();
&gt; &gt; -    }
&gt; 
&gt; Are these unused?  Would you mind adding = delete versions of these in the
&gt; private section just to make sure that we&apos;re not using the default versions
&gt; of them unexpectedly?

Don&apos;t need to =delete them because these don&apos;t get defaults.

&gt; 
&gt; &gt; Source/JavaScriptCore/heap/FreeList.h:43
&gt; &gt; +    ~FreeList();
&gt; 
&gt; Delete since it does nothing?
&gt; 
&gt; &gt; Source/JavaScriptCore/heap/FreeList.h:80
&gt; &gt; +    unsigned m_cellSize { UINT_MAX };
&gt; 
&gt; nit: can we group this with the other unsigneds below for better packing
&gt; (though it happens to not matter right now because you have an odd number of
&gt; unsigneds at the moment )?

Interesting, I&apos;ll look at this.

&gt; 
&gt; &gt; Source/JavaScriptCore/heap/FreeList.h:84
&gt; &gt; +    unsigned m_listSize { 0 };
&gt; &gt; +    unsigned m_index { 0 };
&gt; 
&gt; nit: Why not make these of type FreeOffset since they should be bounded by
&gt; FreeOffset, no?

32-bit is cheaper to load/store on x86 than 16-bit, just in the sense that 16-bit operations need the 16-bit prefix byte.  So, I only use 16-bit for the array, since there we get a nice space savings.

&gt; 
&gt; Oh wait ... is there an atomicity requirement that requires that these be
&gt; 32-bit?  Or is it just because it&apos;s bothersome to have the JIT code
&gt; read/write a 16bit field?

Yeah, the bothersome part.  Specifically, code bloat.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1314754</commentid>
    <comment_count>16</comment_count>
      <attachid>311724</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-06-01 11:58:38 -0700</bug_when>
    <thetext>Comment on attachment 311724
release builds and seems to pass some tests

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

&gt;&gt;&gt; Source/JavaScriptCore/heap/FreeList.cpp:38
&gt;&gt;&gt; +    static_assert(MarkedBlock::blockSize &lt;= (1u &lt;&lt; (sizeof(FreeOffset) * 8)), &quot;FreeList assumes that FreeOffset is big enough to express all possible block offsets&quot;);
&gt;&gt; 
&gt;&gt; Why 8?  Why not MarkedBlock::atomSize?  According to MarkedBlock::Handle::cellSize(), the cellSize is m_atomsPerCell * atomSize.  That means the minimum cellSize is atomSize (which incidentally is 16 bytes).
&gt; 
&gt; sizeof(blah)*8 is a way of counting the bits in blah.  This is counting the number of bits in FreeOffset, which is 16.  The result is 16K, which is also blockSize.  The point is: if we made blockSize any bigger, then a 16-bit offset wouldn&apos;t work anymore.

Oh, I totally misread that.  Ignore me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1314762</commentid>
    <comment_count>17</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-06-01 12:15:34 -0700</bug_when>
    <thetext>It looks like this is having some perf issues in splay.  Investigating...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1314788</commentid>
    <comment_count>18</comment_count>
      <attachid>311747</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-06-01 13:12:19 -0700</bug_when>
    <thetext>Created attachment 311747
removed some pointer chasing

It&apos;s not much faster though</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1314799</commentid>
    <comment_count>19</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-06-01 13:30:14 -0700</bug_when>
    <thetext>Hmmmm.  This might be a lost cause.  I cannot seem to be able to get it to be fast on splay.  I&apos;m going to try a few more things...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1314803</commentid>
    <comment_count>20</comment_count>
      <attachid>311752</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-06-01 13:41:06 -0700</bug_when>
    <thetext>Created attachment 311752
switched to list-of-pointers instead of list-of-offsets

Still slow</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1314829</commentid>
    <comment_count>21</comment_count>
      <attachid>311759</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-06-01 14:35:41 -0700</bug_when>
    <thetext>Created attachment 311759
scrambled the free-list instead

This *looks* like it will be perf-neutral!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1314849</commentid>
    <comment_count>22</comment_count>
      <attachid>311767</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-06-01 15:38:55 -0700</bug_when>
    <thetext>Created attachment 311767
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1314851</commentid>
    <comment_count>23</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-06-01 15:41:44 -0700</bug_when>
    <thetext>Attachment 311767 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/MarkedAllocator.cpp:159:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 1 in 27 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>1314853</commentid>
    <comment_count>24</comment_count>
      <attachid>311769</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-06-01 15:44:18 -0700</bug_when>
    <thetext>Created attachment 311769
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1314856</commentid>
    <comment_count>25</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-06-01 15:45:57 -0700</bug_when>
    <thetext>Attachment 311769 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/MarkedAllocator.cpp:159:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 1 in 27 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>1314894</commentid>
    <comment_count>26</comment_count>
      <attachid>311783</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-06-01 17:03:22 -0700</bug_when>
    <thetext>Created attachment 311783
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1314896</commentid>
    <comment_count>27</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-06-01 17:05:28 -0700</bug_when>
    <thetext>Attachment 311783 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/MarkedAllocator.cpp:159:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 1 in 28 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>1314900</commentid>
    <comment_count>28</comment_count>
      <attachid>311783</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-06-01 17:13:52 -0700</bug_when>
    <thetext>Comment on attachment 311783
the patch

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

r=me

&gt; Source/JavaScriptCore/ChangeLog:3
&gt; +        GC should use a scrambled free-list

Please update to match your changed bug title.

&gt; Source/JavaScriptCore/jit/AssemblyHelpers.h:1494
&gt; +        if (isX86())
&gt; +            xorPtr(Address(allocatorGPR, MarkedAllocator::offsetOfFreeList() + FreeList::offsetOfSecret()), resultGPR);
&gt; +        else {
&gt; +            loadPtr(Address(allocatorGPR, MarkedAllocator::offsetOfFreeList() + FreeList::offsetOfSecret()), scratchGPR);
&gt; +            xorPtr(scratchGPR, resultGPR);
&gt; +        }

Do we still need to have this conditional on isX86() given that you&apos;ve added the xorPtr impls for ARM64 and ARMv7?  Maybe make it #if CPU(...) to be nice to other ports that don&apos;t have the xorPtr(Address src, RegisterID dest) impl yet?  Otherwise, they get a build failure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1314906</commentid>
    <comment_count>29</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-06-01 17:38:54 -0700</bug_when>
    <thetext>(In reply to Mark Lam from comment #28)
&gt; Comment on attachment 311783 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=311783&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:3
&gt; &gt; +        GC should use a scrambled free-list
&gt; 
&gt; Please update to match your changed bug title.
&gt; 
&gt; &gt; Source/JavaScriptCore/jit/AssemblyHelpers.h:1494
&gt; &gt; +        if (isX86())
&gt; &gt; +            xorPtr(Address(allocatorGPR, MarkedAllocator::offsetOfFreeList() + FreeList::offsetOfSecret()), resultGPR);
&gt; &gt; +        else {
&gt; &gt; +            loadPtr(Address(allocatorGPR, MarkedAllocator::offsetOfFreeList() + FreeList::offsetOfSecret()), scratchGPR);
&gt; &gt; +            xorPtr(scratchGPR, resultGPR);
&gt; &gt; +        }
&gt; 
&gt; Do we still need to have this conditional on isX86() given that you&apos;ve added
&gt; the xorPtr impls for ARM64 and ARMv7?  Maybe make it #if CPU(...) to be nice
&gt; to other ports that don&apos;t have the xorPtr(Address src, RegisterID dest) impl
&gt; yet?  Otherwise, they get a build failure.

We need this because of the scratch register issue: this code cannot use the scratch register because it&apos;s called from FTL patchpoints that aren&apos;t marked as clobbering the scratch register.  Most patchpoints don&apos;t behave this way.  This one is special.

The rest of this function uses &quot;if&quot; instead of &quot;#if&quot;, so I just went with the style.  That forced me to implement that function.  I think that eventually we want all variants of these opcodes in all masms, so that for normal JIT code (which doesn&apos;t get called from the super special kinds of patchpoints) we can just say op(addr, reg).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1314907</commentid>
    <comment_count>30</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-06-01 17:39:12 -0700</bug_when>
    <thetext>&lt;rdar://problem/32526204&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1314914</commentid>
    <comment_count>31</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-06-01 17:54:17 -0700</bug_when>
    <thetext>(In reply to Filip Pizlo from comment #29)
&gt; (In reply to Mark Lam from comment #28)
&gt; &gt; &gt; Source/JavaScriptCore/jit/AssemblyHelpers.h:1494
&gt; &gt; &gt; +        if (isX86())
&gt; &gt; &gt; +            xorPtr(Address(allocatorGPR, MarkedAllocator::offsetOfFreeList() + FreeList::offsetOfSecret()), resultGPR);
&gt; &gt; &gt; +        else {
&gt; &gt; &gt; +            loadPtr(Address(allocatorGPR, MarkedAllocator::offsetOfFreeList() + FreeList::offsetOfSecret()), scratchGPR);
&gt; &gt; &gt; +            xorPtr(scratchGPR, resultGPR);
&gt; &gt; &gt; +        }
&gt; &gt; 
&gt; &gt; Do we still need to have this conditional on isX86() given that you&apos;ve added
&gt; &gt; the xorPtr impls for ARM64 and ARMv7?  Maybe make it #if CPU(...) to be nice
&gt; &gt; to other ports that don&apos;t have the xorPtr(Address src, RegisterID dest) impl
&gt; &gt; yet?  Otherwise, they get a build failure.
&gt; 
&gt; We need this because of the scratch register issue: this code cannot use the
&gt; scratch register because it&apos;s called from FTL patchpoints that aren&apos;t marked
&gt; as clobbering the scratch register.  Most patchpoints don&apos;t behave this way.
&gt; This one is special.
&gt; 
&gt; The rest of this function uses &quot;if&quot; instead of &quot;#if&quot;, so I just went with
&gt; the style.  That forced me to implement that function.  I think that
&gt; eventually we want all variants of these opcodes in all masms, so that for
&gt; normal JIT code (which doesn&apos;t get called from the super special kinds of
&gt; patchpoints) we can just say op(addr, reg).

By scratch register, I presume you meant the dataTempRegister and not the scratchGPR in the code?  Perhaps a comment to document this restriction would be good because it&apos;s not obvious from the code, and someone might come along later and break this code unknowingly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1315055</commentid>
    <comment_count>32</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-06-02 08:58:23 -0700</bug_when>
    <thetext>(In reply to Mark Lam from comment #31)
&gt; (In reply to Filip Pizlo from comment #29)
&gt; &gt; (In reply to Mark Lam from comment #28)
&gt; &gt; &gt; &gt; Source/JavaScriptCore/jit/AssemblyHelpers.h:1494
&gt; &gt; &gt; &gt; +        if (isX86())
&gt; &gt; &gt; &gt; +            xorPtr(Address(allocatorGPR, MarkedAllocator::offsetOfFreeList() + FreeList::offsetOfSecret()), resultGPR);
&gt; &gt; &gt; &gt; +        else {
&gt; &gt; &gt; &gt; +            loadPtr(Address(allocatorGPR, MarkedAllocator::offsetOfFreeList() + FreeList::offsetOfSecret()), scratchGPR);
&gt; &gt; &gt; &gt; +            xorPtr(scratchGPR, resultGPR);
&gt; &gt; &gt; &gt; +        }
&gt; &gt; &gt; 
&gt; &gt; &gt; Do we still need to have this conditional on isX86() given that you&apos;ve added
&gt; &gt; &gt; the xorPtr impls for ARM64 and ARMv7?  Maybe make it #if CPU(...) to be nice
&gt; &gt; &gt; to other ports that don&apos;t have the xorPtr(Address src, RegisterID dest) impl
&gt; &gt; &gt; yet?  Otherwise, they get a build failure.
&gt; &gt; 
&gt; &gt; We need this because of the scratch register issue: this code cannot use the
&gt; &gt; scratch register because it&apos;s called from FTL patchpoints that aren&apos;t marked
&gt; &gt; as clobbering the scratch register.  Most patchpoints don&apos;t behave this way.
&gt; &gt; This one is special.
&gt; &gt; 
&gt; &gt; The rest of this function uses &quot;if&quot; instead of &quot;#if&quot;, so I just went with
&gt; &gt; the style.  That forced me to implement that function.  I think that
&gt; &gt; eventually we want all variants of these opcodes in all masms, so that for
&gt; &gt; normal JIT code (which doesn&apos;t get called from the super special kinds of
&gt; &gt; patchpoints) we can just say op(addr, reg).
&gt; 
&gt; By scratch register, I presume you meant the dataTempRegister and not the
&gt; scratchGPR in the code?  Perhaps a comment to document this restriction
&gt; would be good because it&apos;s not obvious from the code, and someone might come
&gt; along later and break this code unknowingly.

There already is a comment:

        // NOTE: This is carefully written so that we can call it while we disallow scratch
        // register usage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1315056</commentid>
    <comment_count>33</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-06-02 09:00:09 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/217711/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1315116</commentid>
    <comment_count>34</comment_count>
    <who name="Ryan Haddad">ryanhaddad</who>
    <bug_when>2017-06-02 10:52:25 -0700</bug_when>
    <thetext>iOS build fix in https://trac.webkit.org/changeset/217717/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1315412</commentid>
    <comment_count>35</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2017-06-03 06:44:49 -0700</bug_when>
    <thetext>And ARM buildfix landed in https://trac.webkit.org/changeset/217756/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1317523</commentid>
    <comment_count>36</comment_count>
    <who name="Guillaume Emont">guijemont</who>
    <bug_when>2017-06-09 11:27:20 -0700</bug_when>
    <thetext>Build fix for MIPS provided in bug#173170</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>311676</attachid>
            <date>2017-05-31 20:38:30 -0700</date>
            <delta_ts>2017-06-01 09:17:10 -0700</delta_ts>
            <desc>it&apos;s a start</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>32861</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0ZyZWVMaXN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9GcmVlTGlzdC5jcHAJKHJldmlzaW9uIDIx
NzY0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0ZyZWVMaXN0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsMjcgKzI4LDUwIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1ib29sIEZy
ZWVMaXN0Ojpjb250YWlucyhjb25zdCB2b2lkKiB0YXJnZXQpIGNvbnN0CitGcmVlTGlzdDo6RnJl
ZUxpc3QodW5zaWduZWQgY2VsbFNpemUpCisgICAgOiBtX2NlbGxTaXplKGNlbGxTaXplKQogewot
ICAgIGlmIChyZW1haW5pbmcpIHsKLSAgICAgICAgY29uc3Qgdm9pZCogc3RhcnQgPSAocGF5bG9h
ZEVuZCAtIHJlbWFpbmluZyk7Ci0gICAgICAgIGNvbnN0IHZvaWQqIGVuZCA9IHBheWxvYWRFbmQ7
CisgICAgbGlzdC5maWxsKG51bGxwdHIpOworfQorCit2b2lkIEZyZWVMaXN0Ojppbml0aWFsaXpl
TGlzdCgpCit7CisgICAgbV9pbmRleCA9IDA7CisgICAgbV9wYXlsb2FkRW5kID0gbnVsbHB0cjsK
KyAgICBtX3JlbWFpbmluZyA9IDA7CisgICAgbV9vcmlnaW5hbFNpemUgPSAwOworfQorCit2b2lk
IEZyZWVMaXN0Ojppbml0aWFsaXplQnVtcChjaGFyKiBwYXlsb2FkRW5kLCB1bnNpZ25lZCByZW1h
aW5pbmcpCit7CisgICAgbV9pbmRleCA9IDA7CisgICAgbV9wYXlsb2FkRW5kID0gcGF5bG9hZEVu
ZDsKKyAgICBtX3JlbWFpbmluZyA9IHJlbWFpbmluZzsKKyAgICBtX29yaWdpbmFsU2l6ZSA9IHJl
bWFpbmluZzsKK30KKworYm9vbCBGcmVlTGlzdDo6Y29udGFpbnMoRnJlZUNlbGwqIHRhcmdldCkg
Y29uc3QKK3sKKyAgICBpZiAobV9yZW1haW5pbmcpIHsKKyAgICAgICAgY29uc3Qgdm9pZCogc3Rh
cnQgPSAobV9wYXlsb2FkRW5kIC0gbV9yZW1haW5pbmcpOworICAgICAgICBjb25zdCB2b2lkKiBl
bmQgPSBtX3BheWxvYWRFbmQ7CiAgICAgICAgIHJldHVybiAoc3RhcnQgPD0gdGFyZ2V0KSAmJiAo
dGFyZ2V0IDwgZW5kKTsKICAgICB9CiAKLSAgICBGcmVlQ2VsbCogY2FuZGlkYXRlID0gaGVhZDsK
LSAgICB3aGlsZSAoY2FuZGlkYXRlKSB7Ci0gICAgICAgIGlmIChjYW5kaWRhdGUgPT0gdGFyZ2V0
KQorICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXg7IGktLTspIHsKKyAgICAgICAgaWYgKG1f
bGlzdFtpXSA9PSB0YXJnZXQpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgY2Fu
ZGlkYXRlID0gY2FuZGlkYXRlLT5uZXh0OwogICAgIH0KLQogICAgIHJldHVybiBmYWxzZTsKIH0K
IAogdm9pZCBGcmVlTGlzdDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewotICAgIG91
dC5wcmludCgie2hlYWQgPSAiLCBSYXdQb2ludGVyKGhlYWQpLCAiLCBwYXlsb2FkRW5kID0gIiwg
UmF3UG9pbnRlcihwYXlsb2FkRW5kKSwgIiwgcmVtYWluaW5nID0gIiwgcmVtYWluaW5nLCAiLCBv
cmlnaW5hbFNpemUgPSAiLCBvcmlnaW5hbFNpemUsICJ9Iik7CisgICAgb3V0LnByaW50KCJ7bGlz
dCA9IFsiKTsKKyAgICBDb21tYVByaW50ZXIgY29tbWE7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1faW5kZXg7ICsraSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCBSYXdQb2ludGVy
KG1fbGlzdFtpXSkpOworICAgIG91dC5wcmludCgiXSwgaW5kZXggPSAiLCBtX2luZGV4LCAiLCBw
YXlsb2FkRW5kID0gIiwgUmF3UG9pbnRlcihtX3BheWxvYWRFbmQpLCAiLCByZW1haW5pbmcgPSAi
LCBtX3JlbWFpbmluZywgIiwgb3JpZ2luYWxTaXplID0gIiwgbV9vcmlnaW5hbFNpemUsICJ9Iik7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvRnJlZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9G
cmVlTGlzdC5oCShyZXZpc2lvbiAyMTc2NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9GcmVlTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2NyArMjUsNTIgQEAKIAogI3ByYWdt
YSBvbmNlCiAKKyNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5
YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgSlNDIHsK
IAotc3RydWN0IEZyZWVDZWxsIHsKLSAgICBGcmVlQ2VsbCogbmV4dDsKLX07Ci0gICAgICAgIAot
Ly8gVGhpcyByZXByZXNlbnRhdGlvbiBvZiBhIEZyZWVMaXN0IGlzIGNvbnZlbmllbnQgZm9yIHRo
ZSBNYXJrZWRBbGxvY2F0b3IuCi0KLXN0cnVjdCBGcmVlTGlzdCB7Ci0gICAgRnJlZUNlbGwqIGhl
YWQgeyBudWxscHRyIH07Ci0gICAgY2hhciogcGF5bG9hZEVuZCB7IG51bGxwdHIgfTsKLSAgICB1
bnNpZ25lZCByZW1haW5pbmcgeyAwIH07Ci0gICAgdW5zaWduZWQgb3JpZ2luYWxTaXplIHsgMCB9
OwotICAgIAotICAgIEZyZWVMaXN0KCkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIHN0YXRpYyBG
cmVlTGlzdCBsaXN0KEZyZWVDZWxsKiBoZWFkLCB1bnNpZ25lZCBieXRlcykKLSAgICB7Ci0gICAg
ICAgIEZyZWVMaXN0IHJlc3VsdDsKLSAgICAgICAgcmVzdWx0LmhlYWQgPSBoZWFkOwotICAgICAg
ICByZXN1bHQucmVtYWluaW5nID0gMDsKLSAgICAgICAgcmVzdWx0Lm9yaWdpbmFsU2l6ZSA9IGJ5
dGVzOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAKLSAgICBzdGF0aWMgRnJl
ZUxpc3QgYnVtcChjaGFyKiBwYXlsb2FkRW5kLCB1bnNpZ25lZCByZW1haW5pbmcpCi0gICAgewot
ICAgICAgICBGcmVlTGlzdCByZXN1bHQ7Ci0gICAgICAgIHJlc3VsdC5wYXlsb2FkRW5kID0gcGF5
bG9hZEVuZDsKLSAgICAgICAgcmVzdWx0LnJlbWFpbmluZyA9IHJlbWFpbmluZzsKLSAgICAgICAg
cmVzdWx0Lm9yaWdpbmFsU2l6ZSA9IHJlbWFpbmluZzsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsK
LSAgICB9Ci0gICAgCi0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZyZWVMaXN0JiBvdGhlcikg
Y29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBoZWFkID09IG90aGVyLmhlYWQKLSAgICAgICAg
ICAgICYmIHBheWxvYWRFbmQgPT0gb3RoZXIucGF5bG9hZEVuZAotICAgICAgICAgICAgJiYgcmVt
YWluaW5nID09IG90aGVyLnJlbWFpbmluZwotICAgICAgICAgICAgJiYgb3JpZ2luYWxTaXplID09
IG90aGVyLm9yaWdpbmFsU2l6ZTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IEZyZWVMaXN0JiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiAhKCp0aGlz
ID09IG90aGVyKTsKLSAgICB9Ci0gICAgCi0gICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNv
bnN0Ci0gICAgewotICAgICAgICByZXR1cm4gKnRoaXMgIT0gRnJlZUxpc3QoKTsKLSAgICB9Ci0K
LSAgICBib29sIGNvbnRhaW5zKGNvbnN0IHZvaWQqIHRhcmdldCkgY29uc3Q7CitjbGFzcyBIZWFw
Q2VsbDsKIAotICAgIGJvb2wgYWxsb2NhdGlvbldpbGxGYWlsKCkgY29uc3QgeyByZXR1cm4gIWhl
YWQgJiYgIXJlbWFpbmluZzsgfQorY2xhc3MgRnJlZUxpc3QgeworICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKEZyZWVMaXN0KTsKKyAgICAKK3B1YmxpYzoKKyAgICB0eXBlZGVmIHN0ZDo6YXJyYXk8
SGVhcENlbGwqLCBNYXJrZWRCbG9jazo6YXRvbXNQZXJCbG9jaz4gRnJlZUNlbGxBcnJheTsKKyAg
ICAKKyAgICBGcmVlTGlzdCh1bnNpZ25lZCBjZWxsU2l6ZSk7CisgICAgCisgICAgdm9pZCBpbml0
aWFsaXplTGlzdCgpOworICAgIHZvaWQgYWRkRnJlZUNlbGwoSGVhcENlbGwqIGNlbGwpOworICAg
IAorICAgIHZvaWQgaW5pdGlhbGl6ZUJ1bXAoY2hhciogcGF5bG9hZEVuZCwgdW5zaWduZWQgcmVt
YWluaW5nKTsKKyAgICAKKyAgICBib29sIGFsbG9jYXRpb25XaWxsRmFpbCgpIGNvbnN0IHsgcmV0
dXJuICFtX2luZGV4ICYmICFtX3JlbWFpbmluZzsgfQogICAgIGJvb2wgYWxsb2NhdGlvbldpbGxT
dWNjZWVkKCkgY29uc3QgeyByZXR1cm4gIWFsbG9jYXRpb25XaWxsRmFpbCgpOyB9CiAgICAgCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICBIZWFwQ2VsbCogYWxsb2NhdGUoY29uc3Qg
RnVuYyYgc2xvd1BhdGgpOworICAgIAorICAgIGJvb2wgY29udGFpbnMoSGVhcENlbGwqKSBjb25z
dDsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIHZvaWQgZm9yRWFjaChj
b25zdCBGdW5jJikgY29uc3Q7CisgICAgCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkxp
c3QoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRnJlZUxpc3QsIG1fbGlzdCk7IH0KKyAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW5kZXgoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0Yo
RnJlZUxpc3QsIG1faW5kZXgpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlBheWxv
YWRFbmQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRnJlZUxpc3QsIG1fcGF5bG9hZEVuZCk7
IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mUmVtYWluaW5nKCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKEZyZWVMaXN0LCBtX3JlbWFpbmluZyk7IH0KKyAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mT3JpZ2luYWxTaXplKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZyZWVM
aXN0LCBtX29yaWdpbmFsU2l6ZSk7IH0KKyAgICAKK3ByaXZhdGU6CisgICAgdW5zaWduZWQgbV9j
ZWxsU2l6ZSB7IFVJTlRfTUFYIH07CisgICAgRnJlZUNlbGxBcnJheSBtX2xpc3Q7CisgICAgdW5z
aWduZWQgbV9pbmRleCB7IDAgfTsKKyAgICBjaGFyKiBtX3BheWxvYWRFbmQgeyBudWxscHRyIH07
CisgICAgdW5zaWduZWQgbV9yZW1haW5pbmcgeyAwIH07CisgICAgdW5zaWduZWQgbV9vcmlnaW5h
bFNpemUgeyAwIH07CisgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiB9
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9GcmVlTGlzdElubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9GcmVlTGlzdElubGluZXMu
aAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9GcmVlTGlzdElu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlICJGcmVlTGlzdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworaW5saW5lIHZvaWQgRnJlZUxp
c3Q6OmFkZEZyZWVDZWxsKEhlYXBDZWxsKiBjZWxsKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1f
aW5kZXggPCBtX2xpc3Quc2l6ZSgpKTsKKyAgICBtX2xpc3RbbV9pbmRleCsrXSA9IGNlbGw7Cisg
ICAgbV9vcmlnaW5hbFNpemUgKz0gbV9jZWxsU2l6ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
RnVuYz4KK0hlYXBDZWxsKiBGcmVlTGlzdDo6YWxsb2NhdGUoY29uc3QgRnVuYyYgc2xvd1BhdGgp
Cit7CisgICAgdW5zaWduZWQgcmVtYWluaW5nID0gbV9yZW1haW5pbmc7CisgICAgaWYgKHJlbWFp
bmluZykgeworICAgICAgICB1bnNpZ25lZCBjZWxsU2l6ZSA9IG1fY2VsbFNpemU7CisgICAgICAg
IHJlbWFpbmluZyAtPSBjZWxsU2l6ZTsKKyAgICAgICAgbV9yZW1haW5pbmcgPSByZW1haW5pbmc7
CisgICAgICAgIHJldHVybiBtX3BheWxvYWRFbmQgLSByZW1haW5pbmcgLSBjZWxsU2l6ZTsKKyAg
ICB9CisgICAgCisgICAgdW5zaWduZWQgaW5kZXggPSBtX2luZGV4OworICAgIGlmIChVTkxJS0VM
WSghaW5kZXgpKQorICAgICAgICByZXR1cm4gc2xvd1BhdGgoKTsKKyAgICAKKyAgICAtLWluZGV4
OworICAgIG1faW5kZXggPSBpbmRleDsKKyAgICByZXR1cm4gbV9saXN0W2luZGV4XTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KK3ZvaWQgRnJlZUxpc3Q6OmZvckVhY2goY29uc3QgRnVu
YyYgZnVuYykgY29uc3QKK3sKKyAgICBpZiAobV9yZW1haW5pbmcpIHsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCByZW1haW5pbmcgPSBtX3JlbWFpbmluZzsgcmVtYWluaW5nOyBtX3JlbWFpbmluZyAt
PSBtX2NlbGxTaXplKQorICAgICAgICAgICAgZnVuYyhiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPiht
X3BheWxvYWRFbmQgLSByZW1haW5pbmcpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBtX2luZGV4OyBpLS07KQorICAgICAgICAgICAgZnVuYyhtX2xpc3RbaV0pOwor
ICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmgJKHJldmlzaW9uIDIx
NzY0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvcklubGlu
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNDQgKzI1LDI1IEBACiAKICNwcmFnbWEgb25jZQog
CisjaW5jbHVkZSAiRnJlZUxpc3RJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTWFya2VkQWxsb2NhdG9y
LmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCiBBTFdBWVNfSU5MSU5FIHZvaWQqIE1hcmtlZEFsbG9j
YXRvcjo6dHJ5QWxsb2NhdGUoR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCkKIHsK
LSAgICB1bnNpZ25lZCByZW1haW5pbmcgPSBtX2ZyZWVMaXN0LnJlbWFpbmluZzsKLSAgICBpZiAo
cmVtYWluaW5nKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNlbGxTaXplID0gbV9jZWxsU2l6ZTsKLSAg
ICAgICAgcmVtYWluaW5nIC09IGNlbGxTaXplOwotICAgICAgICBtX2ZyZWVMaXN0LnJlbWFpbmlu
ZyA9IHJlbWFpbmluZzsKLSAgICAgICAgcmV0dXJuIG1fZnJlZUxpc3QucGF5bG9hZEVuZCAtIHJl
bWFpbmluZyAtIGNlbGxTaXplOwotICAgIH0KLSAgICAKLSAgICBGcmVlQ2VsbCogaGVhZCA9IG1f
ZnJlZUxpc3QuaGVhZDsKLSAgICBpZiAoVU5MSUtFTFkoIWhlYWQpKQotICAgICAgICByZXR1cm4g
dHJ5QWxsb2NhdGVTbG93Q2FzZShkZWZlcnJhbENvbnRleHQpOwotICAgIAotICAgIG1fZnJlZUxp
c3QuaGVhZCA9IGhlYWQtPm5leHQ7Ci0gICAgcmV0dXJuIGhlYWQ7CisgICAgcmV0dXJuIG1fZnJl
ZUxpc3QuYWxsb2NhdGUoCisgICAgICAgIFsmXSAoKSAtPiBGcmVlQ2VsbCogeworICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PEZyZWVDZWxsKj4odHJ5QWxsb2NhdGVTbG93Q2FzZShkZWZl
cnJhbENvbnRleHQpKTsKKyAgICAgICAgfSk7CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCogTWFy
a2VkQWxsb2NhdG9yOjphbGxvY2F0ZShHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0
KQogewotICAgIHVuc2lnbmVkIHJlbWFpbmluZyA9IG1fZnJlZUxpc3QucmVtYWluaW5nOwotICAg
IGlmIChyZW1haW5pbmcpIHsKLSAgICAgICAgdW5zaWduZWQgY2VsbFNpemUgPSBtX2NlbGxTaXpl
OwotICAgICAgICByZW1haW5pbmcgLT0gY2VsbFNpemU7Ci0gICAgICAgIG1fZnJlZUxpc3QucmVt
YWluaW5nID0gcmVtYWluaW5nOwotICAgICAgICByZXR1cm4gbV9mcmVlTGlzdC5wYXlsb2FkRW5k
IC0gcmVtYWluaW5nIC0gY2VsbFNpemU7Ci0gICAgfQotICAgIAotICAgIEZyZWVDZWxsKiBoZWFk
ID0gbV9mcmVlTGlzdC5oZWFkOwotICAgIGlmIChVTkxJS0VMWSghaGVhZCkpCi0gICAgICAgIHJl
dHVybiBhbGxvY2F0ZVNsb3dDYXNlKGRlZmVycmFsQ29udGV4dCk7Ci0gICAgCi0gICAgbV9mcmVl
TGlzdC5oZWFkID0gaGVhZC0+bmV4dDsKLSAgICByZXR1cm4gaGVhZDsKKyAgICByZXR1cm4gbV9m
cmVlTGlzdC5hbGxvY2F0ZSgKKyAgICAgICAgWyZdICgpIC0+IEZyZWVDZWxsKiB7CisgICAgICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RnJlZUNlbGwqPihhbGxvY2F0ZVNsb3dDYXNlKGRlZmVy
cmFsQ29udGV4dCkpOworICAgICAgICB9KTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0
b3I+IGlubGluZSB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6Zm9yRWFjaEJsb2NrKGNvbnN0IEZ1bmN0
b3ImIGZ1bmN0b3IpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9j
ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxv
Y2suY3BwCShyZXZpc2lvbiAyMTc2NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgogCisjaW5jbHVkZSAiRnJlZUxp
c3RJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiSlNEZXN0cnVjdGli
bGVPYmplY3QuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCkBAIC0xMzQsOCArMTM1LDcgQEAg
dm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzdG9wQWxsb2NhdGluZwogICAgICAgICAgICAgcmV0
dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7CiAgICAgICAgIH0pOwogCi0gICAgZm9yRWFj
aEZyZWVDZWxsKAotICAgICAgICBmcmVlTGlzdCwKKyAgICBmcmVlTGlzdC5mb3JFYWNoKAogICAg
ICAgICBbJl0gKEhlYXBDZWxsKiBjZWxsKSB7CiAgICAgICAgICAgICBpZiAoZmFsc2UpCiAgICAg
ICAgICAgICAgICAgZGF0YUxvZygiRnJlZSBjZWxsOiAiLCBSYXdQb2ludGVyKGNlbGwpLCAiXG4i
KTsKQEAgLTE4NCwyOSArMTg0LDEzIEBAIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnJl
c3VtZUFsbG8KIAogdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjp6YXAoY29uc3QgRnJlZUxpc3Qm
IGZyZWVMaXN0KQogewotICAgIGZvckVhY2hGcmVlQ2VsbCgKLSAgICAgICAgZnJlZUxpc3QsCisg
ICAgZnJlZUxpc3QuZm9yRWFjaCgKICAgICAgICAgWyZdIChIZWFwQ2VsbCogY2VsbCkgewogICAg
ICAgICAgICAgaWYgKG1fYXR0cmlidXRlcy5kZXN0cnVjdGlvbiA9PSBOZWVkc0Rlc3RydWN0aW9u
KQogICAgICAgICAgICAgICAgIGNlbGwtPnphcCgpOwogICAgICAgICB9KTsKIH0KIAotdGVtcGxh
dGU8dHlwZW5hbWUgRnVuYz4KLXZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6Zm9yRWFjaEZyZWVD
ZWxsKGNvbnN0IEZyZWVMaXN0JiBmcmVlTGlzdCwgY29uc3QgRnVuYyYgZnVuYykKLXsKLSAgICBp
ZiAoZnJlZUxpc3QucmVtYWluaW5nKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgcmVtYWluaW5n
ID0gZnJlZUxpc3QucmVtYWluaW5nOyByZW1haW5pbmc7IHJlbWFpbmluZyAtPSBjZWxsU2l6ZSgp
KQotICAgICAgICAgICAgZnVuYyhiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPihmcmVlTGlzdC5wYXls
b2FkRW5kIC0gcmVtYWluaW5nKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZm9yIChGcmVlQ2Vs
bCogY3VycmVudCA9IGZyZWVMaXN0LmhlYWQ7IGN1cnJlbnQ7KSB7Ci0gICAgICAgICAgICBGcmVl
Q2VsbCogbmV4dCA9IGN1cnJlbnQtPm5leHQ7Ci0gICAgICAgICAgICBmdW5jKGJpdHdpc2VfY2Fz
dDxIZWFwQ2VsbCo+KGN1cnJlbnQpKTsKLSAgICAgICAgICAgIGN1cnJlbnQgPSBuZXh0OwotICAg
ICAgICB9Ci0gICAgfQotfQotCiB2b2lkIE1hcmtlZEJsb2NrOjphYm91dFRvTWFya1Nsb3coSGVh
cFZlcnNpb24gbWFya2luZ1ZlcnNpb24pCiB7CiAgICAgQVNTRVJUKHZtKCktPmhlYXAub2JqZWN0
U3BhY2UoKS5pc01hcmtpbmcoKSk7CkBAIC00MDcsMjAgKzM5MSwyMiBAQCBTdWJzcGFjZSogTWFy
a2VkQmxvY2s6OkhhbmRsZTo6c3Vic3BhY2UoCiAgICAgcmV0dXJuIGFsbG9jYXRvcigpLT5zdWJz
cGFjZSgpOwogfQogCi1GcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzd2VlcChTd2VlcE1v
ZGUgc3dlZXBNb2RlKQordm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzd2VlcChGcmVlTGlzdCog
ZnJlZUxpc3QpCiB7CiAgICAgU3dlZXBpbmdTY29wZSBzd2VlcGluZ1Njb3BlKCpoZWFwKCkpOwog
ICAgIAorICAgIFN3ZWVwTW9kZSBzd2VlcE1vZGUgPSBmcmVlTGlzdCA/IFN3ZWVwVG9GcmVlTGlz
dCA6IFN3ZWVwT25seTsKKyAgICAKICAgICBtX2FsbG9jYXRvci0+c2V0SXNVbnN3ZXB0KE5vTG9j
a2luZ05lY2Vzc2FyeSwgdGhpcywgZmFsc2UpOwogICAgIAogICAgIG1fd2Vha1NldC5zd2VlcCgp
OwogCiAgICAgaWYgKHN3ZWVwTW9kZSA9PSBTd2VlcE9ubHkgJiYgbV9hdHRyaWJ1dGVzLmRlc3Ry
dWN0aW9uID09IERvZXNOb3ROZWVkRGVzdHJ1Y3Rpb24pCi0gICAgICAgIHJldHVybiBGcmVlTGlz
dCgpOworICAgICAgICByZXR1cm47CiAKICAgICBpZiAoVU5MSUtFTFkobV9pc0ZyZWVMaXN0ZWQp
KSB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN3ZWVwTW9kZSA9PSBTd2VlcFRvRnJlZUxpc3Qp
OwotICAgICAgICByZXR1cm4gRnJlZUxpc3QoKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICAKICAgICBBU1NFUlQoIW1fYWxsb2NhdG9yLT5pc0FsbG9jYXRlZChOb0xvY2tpbmdOZWNlc3Nh
cnksIHRoaXMpKTsKQEAgLTQyOCw4ICs0MTQsMTAgQEAgRnJlZUxpc3QgTWFya2VkQmxvY2s6Okhh
bmRsZTo6c3dlZXAoU3dlZQogICAgIGlmIChzcGFjZSgpLT5pc01hcmtpbmcoKSkKICAgICAgICAg
YmxvY2soKS5tX2xvY2subG9jaygpOwogICAgIAotICAgIGlmIChtX2F0dHJpYnV0ZXMuZGVzdHJ1
Y3Rpb24gPT0gTmVlZHNEZXN0cnVjdGlvbikKLSAgICAgICAgcmV0dXJuIHN1YnNwYWNlKCktPmZp
bmlzaFN3ZWVwKCp0aGlzLCBzd2VlcE1vZGUpOworICAgIGlmIChtX2F0dHJpYnV0ZXMuZGVzdHJ1
Y3Rpb24gPT0gTmVlZHNEZXN0cnVjdGlvbikgeworICAgICAgICBzdWJzcGFjZSgpLT5maW5pc2hT
d2VlcCgqdGhpcywgZnJlZUxpc3QpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgIAogICAg
IC8vIEhhbmRsZSB0aGUgbm8tZGVzdHJ1Y3RvciBzcGVjaWFsaXphdGlvbnMgaGVyZSwgc2luY2Ug
d2UgaGF2ZSB0aGUgbW9zdCBvZiB0aG9zZS4gVGhpcwogICAgIC8vIGVuc3VyZXMgdGhhdCB0aGV5
IGRvbid0IGdldCByZS1zcGVjaWFsaXplZCBmb3IgZXZlcnkgZGVzdHJ1Y3RvciBzcGFjZS4KQEAg
LTQzOSw3ICs0MjcsNiBAQCBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzd2VlcChTd2Vl
CiAgICAgTmV3bHlBbGxvY2F0ZWRNb2RlIG5ld2x5QWxsb2NhdGVkTW9kZSA9IHRoaXMtPm5ld2x5
QWxsb2NhdGVkTW9kZSgpOwogICAgIE1hcmtzTW9kZSBtYXJrc01vZGUgPSB0aGlzLT5tYXJrc01v
ZGUoKTsKICAgICAKLSAgICBGcmVlTGlzdCByZXN1bHQ7CiAgICAgYXV0byB0cnlTcGVjaWFsaXpl
ZCA9IFsmXSAoKSAtPiBib29sIHsKICAgICAgICAgaWYgKHN3ZWVwTW9kZSAhPSBTd2VlcFRvRnJl
ZUxpc3QpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC00NTIsMjAgKzQzOSwyMCBAQCBG
cmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzd2VlcChTd2VlCiAgICAgICAgIGNhc2UgSXNF
bXB0eToKICAgICAgICAgICAgIHN3aXRjaCAobWFya3NNb2RlKSB7CiAgICAgICAgICAgICBjYXNl
IE1hcmtzTm90U3RhbGU6Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gc3BlY2lhbGl6ZWRTd2Vl
cDx0cnVlLCBJc0VtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzTm9EZXN0cnVjdG9ycywg
RG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBNYXJrc05vdFN0YWxlPihJ
c0VtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzTm9EZXN0cnVjdG9ycywgRG9udFNjcmli
YmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBNYXJrc05vdFN0YWxlLCBbXSAoVk0mLCBK
U0NlbGwqKSB7IH0pOworICAgICAgICAgICAgICAgIHNwZWNpYWxpemVkU3dlZXA8dHJ1ZSwgSXNF
bXB0eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJs
ZSwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCwgTWFya3NOb3RTdGFsZT4oZnJlZUxpc3QsIElz
RW1wdHksIFN3ZWVwVG9GcmVlTGlzdCwgQmxvY2tIYXNOb0Rlc3RydWN0b3JzLCBEb250U2NyaWJi
bGUsIERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzTm90U3RhbGUsIFtdIChWTSYsIEpT
Q2VsbCopIHsgfSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICBj
YXNlIE1hcmtzU3RhbGU6Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gc3BlY2lhbGl6ZWRTd2Vl
cDx0cnVlLCBJc0VtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzTm9EZXN0cnVjdG9ycywg
RG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBNYXJrc1N0YWxlPihJc0Vt
cHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzTm9EZXN0cnVjdG9ycywgRG9udFNjcmliYmxl
LCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBNYXJrc1N0YWxlLCBbXSAoVk0mLCBKU0NlbGwq
KSB7IH0pOworICAgICAgICAgICAgICAgIHNwZWNpYWxpemVkU3dlZXA8dHJ1ZSwgSXNFbXB0eSwg
U3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9l
c05vdEhhdmVOZXdseUFsbG9jYXRlZCwgTWFya3NTdGFsZT4oZnJlZUxpc3QsIElzRW1wdHksIFN3
ZWVwVG9GcmVlTGlzdCwgQmxvY2tIYXNOb0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUsIERvZXNO
b3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzU3RhbGUsIFtdIChWTSYsIEpTQ2VsbCopIHsgfSk7
CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBOb3RFbXB0eToKICAgICAgICAgICAgIHN3aXRjaCAobWFy
a3NNb2RlKSB7CiAgICAgICAgICAgICBjYXNlIE1hcmtzTm90U3RhbGU6Ci0gICAgICAgICAgICAg
ICAgcmVzdWx0ID0gc3BlY2lhbGl6ZWRTd2VlcDx0cnVlLCBOb3RFbXB0eSwgU3dlZXBUb0ZyZWVM
aXN0LCBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9lc05vdEhhdmVOZXds
eUFsbG9jYXRlZCwgTWFya3NOb3RTdGFsZT4oSXNFbXB0eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9j
a0hhc05vRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRl
ZCwgTWFya3NOb3RTdGFsZSwgW10gKFZNJiwgSlNDZWxsKikgeyB9KTsKKyAgICAgICAgICAgICAg
ICBzcGVjaWFsaXplZFN3ZWVwPHRydWUsIE5vdEVtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2Nr
SGFzTm9EZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVk
LCBNYXJrc05vdFN0YWxlPihmcmVlTGlzdCwgSXNFbXB0eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9j
a0hhc05vRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRl
ZCwgTWFya3NOb3RTdGFsZSwgW10gKFZNJiwgSlNDZWxsKikgeyB9KTsKICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIGNhc2UgTWFya3NTdGFsZToKLSAgICAgICAgICAg
ICAgICByZXN1bHQgPSBzcGVjaWFsaXplZFN3ZWVwPHRydWUsIE5vdEVtcHR5LCBTd2VlcFRvRnJl
ZUxpc3QsIEJsb2NrSGFzTm9EZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5l
d2x5QWxsb2NhdGVkLCBNYXJrc1N0YWxlPihJc0VtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2Nr
SGFzTm9EZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVk
LCBNYXJrc1N0YWxlLCBbXSAoVk0mLCBKU0NlbGwqKSB7IH0pOworICAgICAgICAgICAgICAgIHNw
ZWNpYWxpemVkU3dlZXA8dHJ1ZSwgTm90RW1wdHksIFN3ZWVwVG9GcmVlTGlzdCwgQmxvY2tIYXNO
b0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUsIERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1h
cmtzU3RhbGU+KGZyZWVMaXN0LCBJc0VtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzTm9E
ZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBNYXJr
c1N0YWxlLCBbXSAoVk0mLCBKU0NlbGwqKSB7IH0pOwogICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CkBAIC00NzUsMTAgKzQ2Miwx
MCBAQCBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzd2VlcChTd2VlCiAgICAgfTsKICAg
ICAKICAgICBpZiAodHJ5U3BlY2lhbGl6ZWQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICAgICAgcmV0dXJuOwogCiAgICAgLy8gVGhlIHRlbXBsYXRlIGFyZ3VtZW50cyBkb24ndCBtYXR0
ZXIgYmVjYXVzZSB0aGUgZmlyc3Qgb25lIGlzIGZhbHNlLgotICAgIHJldHVybiBzcGVjaWFsaXpl
ZFN3ZWVwPGZhbHNlLCBJc0VtcHR5LCBTd2VlcE9ubHksIEJsb2NrSGFzTm9EZXN0cnVjdG9ycywg
RG9udFNjcmliYmxlLCBIYXNOZXdseUFsbG9jYXRlZCwgTWFya3NTdGFsZT4oZW1wdHlNb2RlLCBz
d2VlcE1vZGUsIEJsb2NrSGFzTm9EZXN0cnVjdG9ycywgc2NyaWJibGVNb2RlLCBuZXdseUFsbG9j
YXRlZE1vZGUsIG1hcmtzTW9kZSwgW10gKFZNJiwgSlNDZWxsKikgeyB9KTsKKyAgICBzcGVjaWFs
aXplZFN3ZWVwPGZhbHNlLCBJc0VtcHR5LCBTd2VlcE9ubHksIEJsb2NrSGFzTm9EZXN0cnVjdG9y
cywgRG9udFNjcmliYmxlLCBIYXNOZXdseUFsbG9jYXRlZCwgTWFya3NTdGFsZT4oZnJlZUxpc3Qs
IGVtcHR5TW9kZSwgc3dlZXBNb2RlLCBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMsIHNjcmliYmxlTW9k
ZSwgbmV3bHlBbGxvY2F0ZWRNb2RlLCBtYXJrc01vZGUsIFtdIChWTSYsIEpTQ2VsbCopIHsgfSk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrZWRCbG9jay5oCShyZXZpc2lvbiAyMTc2NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrZWRCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw3ICsyMyw2IEBACiAK
ICNpbmNsdWRlICJBbGxvY2F0b3JBdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAiRGVzdHJ1Y3Rpb25N
b2RlLmgiCi0jaW5jbHVkZSAiRnJlZUxpc3QuaCIKICNpbmNsdWRlICJIZWFwQ2VsbC5oIgogI2lu
Y2x1ZGUgIkl0ZXJhdGlvblN0YXR1cy5oIgogI2luY2x1ZGUgIldlYWtTZXQuaCIKQEAgLTEyMCwx
OCArMTE5LDE3IEBAIHB1YmxpYzoKICAgICAgICAgLy8gU3dlZXBpbmcgZW5zdXJlcyB0aGF0IGRl
c3RydWN0b3JzIGdldCBjYWxsZWQgYW5kIHJlbW92ZXMgdGhlIGJsb2NrIGZyb20gdGhlIHVuc3dl
cHQKICAgICAgICAgLy8gc2V0LiBTd2VlcGluZyB0byBmcmVlIGxpc3QgYWxzbyByZW1vdmVzIHRo
ZSBibG9jayBmcm9tIHRoZSBlbXB0eSBzZXQsIGlmIGl0IHdhcyBpbiB0aGF0CiAgICAgICAgIC8v
IHNldC4gU3dlZXBpbmcgd2l0aCBTd2VlcE9ubHkgbWF5IGFkZCB0aGlzIGJsb2NrIHRvIHRoZSBl
bXB0eSBzZXQsIGlmIHRoZSBibG9jayBpcyBmb3VuZAotICAgICAgICAvLyB0byBiZSBlbXB0eS4K
KyAgICAgICAgLy8gdG8gYmUgZW1wdHkuIFRoZSBmcmVlLWxpc3QgYmVpbmcgbnVsbCBpbXBsaWVz
IFN3ZWVwT25seS4KICAgICAgICAgLy8KICAgICAgICAgLy8gTm90ZSB0aGF0IHlvdSBuZWVkIHRv
IG1ha2Ugc3VyZSB0aGF0IHRoZSBlbXB0eSBiaXQgcmVmbGVjdHMgcmVhbGl0eS4gSWYgaXQncyBu
b3Qgc2V0CiAgICAgICAgIC8vIGFuZCB0aGUgYmxvY2sgaXMgZnJlc2hseSBjcmVhdGVkLCB0aGVu
IHdlJ2xsIG1ha2UgdGhlIG1pc3Rha2Ugb2YgcnVubmluZyBkZXN0cnVjdG9ycyBpbgogICAgICAg
ICAvLyB0aGUgYmxvY2suIElmIGl0J3Mgbm90IHNldCBhbmQgdGhlIGJsb2NrIGhhcyBub3RoaW5n
IG1hcmtlZCwgdGhlbiB3ZSdsbCBtYWtlIHRoZQogICAgICAgICAvLyBtaXN0YWtlIG9mIG1ha2lu
ZyBhIHBvcCBmcmVlbGlzdCByYXRoZXIgdGhhbiBhIGJ1bXAgZnJlZWxpc3QuCi0gICAgICAgIGVu
dW0gU3dlZXBNb2RlIHsgU3dlZXBPbmx5LCBTd2VlcFRvRnJlZUxpc3QgfTsKLSAgICAgICAgRnJl
ZUxpc3Qgc3dlZXAoU3dlZXBNb2RlID0gU3dlZXBPbmx5KTsKKyAgICAgICAgdm9pZCBzd2VlcChG
cmVlTGlzdCopOwogICAgICAgICAKICAgICAgICAgLy8gVGhpcyBpcyB0byBiZSBjYWxsZWQgYnkg
U3Vic3BhY2UuCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIERlc3Ryb3lGdW5jPgotICAgICAg
ICBGcmVlTGlzdCBmaW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZShTd2VlcE1vZGUsIGNvbnN0IERl
c3Ryb3lGdW5jJik7CisgICAgICAgIHZvaWQgZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2UoRnJl
ZUxpc3QqLCBjb25zdCBEZXN0cm95RnVuYyYpOwogICAgICAgICAKICAgICAgICAgdm9pZCB1bnN3
ZWVwV2l0aE5vTmV3bHlBbGxvY2F0ZWQoKTsKICAgICAgICAgCkBAIC0yMDIsNiArMjAwLDcgQEAg
cHVibGljOgogICAgIHByaXZhdGU6CiAgICAgICAgIEhhbmRsZShIZWFwJiwgdm9pZCopOwogICAg
ICAgICAKKyAgICAgICAgZW51bSBTd2VlcE1vZGUgeyBTd2VlcE9ubHksIFN3ZWVwVG9GcmVlTGlz
dCB9OwogICAgICAgICBlbnVtIFN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlIHsgQmxvY2tIYXNOb0Rlc3Ry
dWN0b3JzLCBCbG9ja0hhc0Rlc3RydWN0b3JzLCBCbG9ja0hhc0Rlc3RydWN0b3JzQW5kQ29sbGVj
dG9ySXNSdW5uaW5nIH07CiAgICAgICAgIGVudW0gU2NyaWJibGVNb2RlIHsgRG9udFNjcmliYmxl
LCBTY3JpYmJsZSB9OwogICAgICAgICBlbnVtIEVtcHR5TW9kZSB7IElzRW1wdHksIE5vdEVtcHR5
IH07CkBAIC0yMTUsMTAgKzIxNCw3IEBAIHB1YmxpYzoKICAgICAgICAgTWFya3NNb2RlIG1hcmtz
TW9kZSgpOwogICAgICAgICAKICAgICAgICAgdGVtcGxhdGU8Ym9vbCwgRW1wdHlNb2RlLCBTd2Vl
cE1vZGUsIFN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlLCBTY3JpYmJsZU1vZGUsIE5ld2x5QWxsb2NhdGVk
TW9kZSwgTWFya3NNb2RlLCB0eXBlbmFtZSBEZXN0cm95RnVuYz4KLSAgICAgICAgRnJlZUxpc3Qg
c3BlY2lhbGl6ZWRTd2VlcChFbXB0eU1vZGUsIFN3ZWVwTW9kZSwgU3dlZXBEZXN0cnVjdGlvbk1v
ZGUsIFNjcmliYmxlTW9kZSwgTmV3bHlBbGxvY2F0ZWRNb2RlLCBNYXJrc01vZGUsIGNvbnN0IERl
c3Ryb3lGdW5jJik7Ci0gICAgICAgIAotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgot
ICAgICAgICB2b2lkIGZvckVhY2hGcmVlQ2VsbChjb25zdCBGcmVlTGlzdCYsIGNvbnN0IEZ1bmMm
KTsKKyAgICAgICAgdm9pZCBzcGVjaWFsaXplZFN3ZWVwKEZyZWVMaXN0KiwgRW1wdHlNb2RlLCBT
d2VlcE1vZGUsIFN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlLCBTY3JpYmJsZU1vZGUsIE5ld2x5QWxsb2Nh
dGVkTW9kZSwgTWFya3NNb2RlLCBjb25zdCBEZXN0cm95RnVuYyYpOwogICAgICAgICAKICAgICAg
ICAgdm9pZCBzZXRJc0ZyZWVMaXN0ZWQoKTsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrZWRCbG9ja0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9ja0lubGluZXMuaAkocmV2aXNpb24gMjE3NjQ2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2tJbmxpbmVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTE0NSw3ICsxNDUsNyBAQCBpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6
SGFuZGxlOjppc0ZyZWVMCiAvLyBPbmx5IHRoZSBEb2VzTm90TmVlZERlc3RydWN0aW9uIG9uZSBz
aG91bGQgYmUgc3BlY2lhbGl6ZWQgYnkgTWFya2VkQmxvY2suCiAKIHRlbXBsYXRlPGJvb2wgc3Bl
Y2lhbGl6ZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6RW1wdHlNb2RlIHNwZWNpYWxpemVkRW1wdHlN
b2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcE1vZGUgc3BlY2lhbGl6ZWRTd2VlcE1vZGUs
IE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlIHNwZWNpYWxpemVkRGVz
dHJ1Y3Rpb25Nb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTY3JpYmJsZU1vZGUgc3BlY2lhbGl6
ZWRTY3JpYmJsZU1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6Ok5ld2x5QWxsb2NhdGVkTW9kZSBz
cGVjaWFsaXplZE5ld2x5QWxsb2NhdGVkTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6TWFya3NN
b2RlIHNwZWNpYWxpemVkTWFya3NNb2RlLCB0eXBlbmFtZSBEZXN0cm95RnVuYz4KLUZyZWVMaXN0
IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxpemVkU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRs
ZTo6RW1wdHlNb2RlIGVtcHR5TW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBNb2RlIHN3
ZWVwTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBEZXN0cnVjdGlvbk1vZGUgZGVzdHJ1
Y3Rpb25Nb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTY3JpYmJsZU1vZGUgc2NyaWJibGVNb2Rl
LCBNYXJrZWRCbG9jazo6SGFuZGxlOjpOZXdseUFsbG9jYXRlZE1vZGUgbmV3bHlBbGxvY2F0ZWRN
b2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpNYXJrc01vZGUgbWFya3NNb2RlLCBjb25zdCBEZXN0
cm95RnVuYyYgZGVzdHJveUZ1bmMpCit2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxp
emVkU3dlZXAoRnJlZUxpc3QqIGZyZWVMaXN0LCBNYXJrZWRCbG9jazo6SGFuZGxlOjpFbXB0eU1v
ZGUgZW1wdHlNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcE1vZGUgc3dlZXBNb2RlLCBN
YXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbk1vZGUs
IE1hcmtlZEJsb2NrOjpIYW5kbGU6OlNjcmliYmxlTW9kZSBzY3JpYmJsZU1vZGUsIE1hcmtlZEJs
b2NrOjpIYW5kbGU6Ok5ld2x5QWxsb2NhdGVkTW9kZSBuZXdseUFsbG9jYXRlZE1vZGUsIE1hcmtl
ZEJsb2NrOjpIYW5kbGU6Ok1hcmtzTW9kZSBtYXJrc01vZGUsIGNvbnN0IERlc3Ryb3lGdW5jJiBk
ZXN0cm95RnVuYykKIHsKICAgICBpZiAoc3BlY2lhbGl6ZSkgewogICAgICAgICBlbXB0eU1vZGUg
PSBzcGVjaWFsaXplZEVtcHR5TW9kZTsKQEAgLTE5MywxNyArMTkzLDE4IEBAIEZyZWVMaXN0IE1h
cmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxpemUKICAgICAgICAgICAgIG1fYWxsb2NhdG9yLT5z
ZXRJc0VtcHR5KE5vTG9ja2luZ05lY2Vzc2FyeSwgdGhpcywgdHJ1ZSk7CiAgICAgICAgIGlmIChz
cGFjZSgpLT5pc01hcmtpbmcoKSkKICAgICAgICAgICAgIGJsb2NrLm1fbG9jay51bmxvY2soKTsK
LSAgICAgICAgRnJlZUxpc3QgcmVzdWx0ID0gRnJlZUxpc3Q6OmJ1bXAocGF5bG9hZEVuZCwgcGF5
bG9hZEVuZCAtIHBheWxvYWRCZWdpbik7CisgICAgICAgIGlmIChzd2VlcE1vZGUgPT0gU3dlZXBU
b0ZyZWVMaXN0KQorICAgICAgICAgICAgZnJlZUxpc3QtPmluaXRpYWxpemVCdW1wKHBheWxvYWRF
bmQsIHBheWxvYWRFbmQgLSBwYXlsb2FkQmVnaW4pOwogICAgICAgICBpZiAoZmFsc2UpCiAgICAg
ICAgICAgICBkYXRhTG9nKCJRdWlja2x5IHN3ZXB0IGJsb2NrICIsIFJhd1BvaW50ZXIodGhpcyks
ICIgd2l0aCBjZWxsIHNpemUgIiwgY2VsbFNpemUoKSwgIiBhbmQgYXR0cmlidXRlcyAiLCBtX2F0
dHJpYnV0ZXMsICI6ICIsIHJlc3VsdCwgIlxuIik7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICAvLyBUaGlzIHByb2R1Y2VzIGEgZnJlZSBsaXN0
IHRoYXQgaXMgb3JkZXJlZCBpbiByZXZlcnNlIHRocm91Z2ggdGhlIGJsb2NrLgogICAgIC8vIFRo
aXMgaXMgZmluZSwgc2luY2UgdGhlIGFsbG9jYXRpb24gY29kZSBtYWtlcyBubyBhc3N1bXB0aW9u
cyBhYm91dCB0aGUKICAgICAvLyBvcmRlciBvZiB0aGUgZnJlZSBsaXN0LgotICAgIEZyZWVDZWxs
KiBoZWFkID0gMDsKLSAgICBzaXplX3QgY291bnQgPSAwOworICAgIGlmIChzd2VlcE1vZGUgPT0g
U3dlZXBUb0ZyZWVMaXN0KQorICAgICAgICBmcmVlTGlzdC0+aW5pdGlhbGl6ZUxpc3QoKTsKICAg
ICBib29sIGlzRW1wdHkgPSB0cnVlOwogICAgIFZlY3RvcjxzaXplX3Q+IGRlYWRDZWxsczsKICAg
ICBWTSYgdm0gPSAqdGhpcy0+dm0oKTsKQEAgLTIxOSwxMiArMjIwLDkgQEAgRnJlZUxpc3QgTWFy
a2VkQmxvY2s6OkhhbmRsZTo6c3BlY2lhbGl6ZQogICAgICAgICB9CiAKICAgICAgICAgaWYgKHN3
ZWVwTW9kZSA9PSBTd2VlcFRvRnJlZUxpc3QpIHsKLSAgICAgICAgICAgIEZyZWVDZWxsKiBmcmVl
Q2VsbCA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEZyZWVDZWxsKj4oY2VsbCk7CiAgICAgICAgICAg
ICBpZiAoc2NyaWJibGVNb2RlID09IFNjcmliYmxlKQotICAgICAgICAgICAgICAgIHNjcmliYmxl
KGZyZWVDZWxsLCBjZWxsU2l6ZSgpKTsKLSAgICAgICAgICAgIGZyZWVDZWxsLT5uZXh0ID0gaGVh
ZDsKLSAgICAgICAgICAgIGhlYWQgPSBmcmVlQ2VsbDsKLSAgICAgICAgICAgICsrY291bnQ7Cisg
ICAgICAgICAgICAgICAgc2NyaWJibGUoY2VsbCwgY2VsbFNpemUoKSk7CisgICAgICAgICAgICBm
cmVlTGlzdC0+YWRkRnJlZUNlbGwoY2VsbCk7CiAgICAgICAgIH0KICAgICB9OwogICAgIGZvciAo
c2l6ZV90IGkgPSBmaXJzdEF0b20oKTsgaSA8IG1fZW5kQXRvbTsgaSArPSBtX2F0b21zUGVyQ2Vs
bCkgewpAQCAtMjU0LDI2ICsyNTIsMjQgQEAgRnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6
c3BlY2lhbGl6ZQogICAgICAgICAgICAgaGFuZGxlRGVhZENlbGwoaSk7CiAgICAgfQogCi0gICAg
RnJlZUxpc3QgcmVzdWx0ID0gRnJlZUxpc3Q6Omxpc3QoaGVhZCwgY291bnQgKiBjZWxsU2l6ZSgp
KTsKICAgICBpZiAoc3dlZXBNb2RlID09IFN3ZWVwVG9GcmVlTGlzdCkKICAgICAgICAgc2V0SXNG
cmVlTGlzdGVkKCk7CiAgICAgZWxzZSBpZiAoaXNFbXB0eSkKICAgICAgICAgbV9hbGxvY2F0b3It
PnNldElzRW1wdHkoTm9Mb2NraW5nTmVjZXNzYXJ5LCB0aGlzLCB0cnVlKTsKICAgICBpZiAoZmFs
c2UpCiAgICAgICAgIGRhdGFMb2coIlNsb3dseSBzd2VwdCBibG9jayAiLCBSYXdQb2ludGVyKCZi
bG9jayksICIgd2l0aCBjZWxsIHNpemUgIiwgY2VsbFNpemUoKSwgIiBhbmQgYXR0cmlidXRlcyAi
LCBtX2F0dHJpYnV0ZXMsICI6ICIsIHJlc3VsdCwgIlxuIik7Ci0gICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRGVzdHJveUZ1bmM+Ci1GcmVlTGlzdCBNYXJrZWRCbG9j
azo6SGFuZGxlOjpmaW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZShTd2VlcE1vZGUgc3dlZXBNb2Rl
LCBjb25zdCBEZXN0cm95RnVuYyYgZGVzdHJveUZ1bmMpCit2b2lkIE1hcmtlZEJsb2NrOjpIYW5k
bGU6OmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlKEZyZWVMaXN0KiBmcmVlTGlzdCwgY29uc3Qg
RGVzdHJveUZ1bmMmIGRlc3Ryb3lGdW5jKQogeworICAgIFN3ZWVwTW9kZSBzd2VlcE1vZGUgPSBm
cmVlTGlzdCA/IFN3ZWVwVG9GcmVlTGlzdCA6IFN3ZWVwT25seTsKICAgICBTd2VlcERlc3RydWN0
aW9uTW9kZSBkZXN0cnVjdGlvbk1vZGUgPSB0aGlzLT5zd2VlcERlc3RydWN0aW9uTW9kZSgpOwog
ICAgIEVtcHR5TW9kZSBlbXB0eU1vZGUgPSB0aGlzLT5lbXB0eU1vZGUoKTsKICAgICBTY3JpYmJs
ZU1vZGUgc2NyaWJibGVNb2RlID0gdGhpcy0+c2NyaWJibGVNb2RlKCk7CiAgICAgTmV3bHlBbGxv
Y2F0ZWRNb2RlIG5ld2x5QWxsb2NhdGVkTW9kZSA9IHRoaXMtPm5ld2x5QWxsb2NhdGVkTW9kZSgp
OwogICAgIE1hcmtzTW9kZSBtYXJrc01vZGUgPSB0aGlzLT5tYXJrc01vZGUoKTsKIAotICAgIEZy
ZWVMaXN0IHJlc3VsdDsKICAgICBhdXRvIHRyeVNwZWNpYWxpemVkID0gWyZdICgpIC0+IGJvb2wg
ewogICAgICAgICBpZiAoc3dlZXBNb2RlICE9IFN3ZWVwVG9GcmVlTGlzdCkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKQEAgLTI4OCwxMCArMjg0LDEwIEBAIEZyZWVMaXN0IE1hcmtlZEJsb2Nr
OjpIYW5kbGU6OmZpbmlzaFN3ZWUKICAgICAgICAgCiAgICAgICAgIHN3aXRjaCAobWFya3NNb2Rl
KSB7CiAgICAgICAgIGNhc2UgTWFya3NOb3RTdGFsZToKLSAgICAgICAgICAgIHJlc3VsdCA9IHNw
ZWNpYWxpemVkU3dlZXA8dHJ1ZSwgTm90RW1wdHksIFN3ZWVwVG9GcmVlTGlzdCwgQmxvY2tIYXNE
ZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBNYXJr
c05vdFN0YWxlPihJc0VtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzRGVzdHJ1Y3RvcnMs
IERvbnRTY3JpYmJsZSwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCwgTWFya3NOb3RTdGFsZSwg
ZGVzdHJveUZ1bmMpOworICAgICAgICAgICAgc3BlY2lhbGl6ZWRTd2VlcDx0cnVlLCBOb3RFbXB0
eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hhc0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUsIERv
ZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzTm90U3RhbGU+KGZyZWVMaXN0LCBJc0VtcHR5
LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9l
c05vdEhhdmVOZXdseUFsbG9jYXRlZCwgTWFya3NOb3RTdGFsZSwgZGVzdHJveUZ1bmMpOwogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGNhc2UgTWFya3NTdGFsZToKLSAgICAgICAg
ICAgIHJlc3VsdCA9IHNwZWNpYWxpemVkU3dlZXA8dHJ1ZSwgTm90RW1wdHksIFN3ZWVwVG9GcmVl
TGlzdCwgQmxvY2tIYXNEZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5
QWxsb2NhdGVkLCBNYXJrc1N0YWxlPihJc0VtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFz
RGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCwgTWFy
a3NTdGFsZSwgZGVzdHJveUZ1bmMpOworICAgICAgICAgICAgc3BlY2lhbGl6ZWRTd2VlcDx0cnVl
LCBOb3RFbXB0eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hhc0Rlc3RydWN0b3JzLCBEb250U2Ny
aWJibGUsIERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzU3RhbGU+KGZyZWVMaXN0LCBJ
c0VtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJs
ZSwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCwgTWFya3NTdGFsZSwgZGVzdHJveUZ1bmMpOwog
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0yOTksMTAg
KzI5NSwxMCBAQCBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpmaW5pc2hTd2VlCiAgICAg
fTsKICAgICAKICAgICBpZiAodHJ5U3BlY2lhbGl6ZWQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICAgICAgcmV0dXJuOwogICAgIAogICAgIC8vIFRoZSB0ZW1wbGF0ZSBhcmd1bWVudHMg
ZG9uJ3QgbWF0dGVyIGJlY2F1c2UgdGhlIGZpcnN0IG9uZSBpcyBmYWxzZS4KLSAgICByZXR1cm4g
c3BlY2lhbGl6ZWRTd2VlcDxmYWxzZSwgSXNFbXB0eSwgU3dlZXBPbmx5LCBCbG9ja0hhc05vRGVz
dHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgSGFzTmV3bHlBbGxvY2F0ZWQsIE1hcmtzU3RhbGU+KGVt
cHR5TW9kZSwgc3dlZXBNb2RlLCBkZXN0cnVjdGlvbk1vZGUsIHNjcmliYmxlTW9kZSwgbmV3bHlB
bGxvY2F0ZWRNb2RlLCBtYXJrc01vZGUsIGRlc3Ryb3lGdW5jKTsKKyAgICBzcGVjaWFsaXplZFN3
ZWVwPGZhbHNlLCBJc0VtcHR5LCBTd2VlcE9ubHksIEJsb2NrSGFzTm9EZXN0cnVjdG9ycywgRG9u
dFNjcmliYmxlLCBIYXNOZXdseUFsbG9jYXRlZCwgTWFya3NTdGFsZT4oZnJlZUxpc3QsIGVtcHR5
TW9kZSwgc3dlZXBNb2RlLCBkZXN0cnVjdGlvbk1vZGUsIHNjcmliYmxlTW9kZSwgbmV3bHlBbGxv
Y2F0ZWRNb2RlLCBtYXJrc01vZGUsIGRlc3Ryb3lGdW5jKTsKIH0KIAogaW5saW5lIE1hcmtlZEJs
b2NrOjpIYW5kbGU6OlN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlIE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN3
ZWVwRGVzdHJ1Y3Rpb25Nb2RlKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1
YnNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJz
cGFjZS5jcHAJKHJldmlzaW9uIDIxNzY0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1N1YnNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsOSArNzcsOSBAQCBTdWJzcGFjZTo6
flN1YnNwYWNlKCkKIHsKIH0KIAotRnJlZUxpc3QgU3Vic3BhY2U6OmZpbmlzaFN3ZWVwKE1hcmtl
ZEJsb2NrOjpIYW5kbGUmIGJsb2NrLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcE1vZGUgc3dl
ZXBNb2RlKQordm9pZCBTdWJzcGFjZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYg
YmxvY2ssIEZyZWVMaXN0KiBmcmVlTGlzdCkKIHsKLSAgICByZXR1cm4gYmxvY2suZmluaXNoU3dl
ZXBLbm93aW5nU3Vic3BhY2Uoc3dlZXBNb2RlLCBEZXN0cm95RnVuYygpKTsKKyAgICBibG9jay5m
aW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZShmcmVlTGlzdCwgRGVzdHJveUZ1bmMoKSk7CiB9CiAK
IHZvaWQgU3Vic3BhY2U6OmRlc3Ryb3koVk0mIHZtLCBKU0NlbGwqIGNlbGwpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgJKHJldmlzaW9uIDIxNzY0NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcg
KzU0LDcgQEAgcHVibGljOgogICAgIAogICAgIC8vIFRoZSBwdXJwb3NlIG9mIG92ZXJyaWRpbmcg
dGhpcyBpcyB0byBzcGVjaWFsaXplIHRoZSBzd2VlcCBmb3IgeW91ciBkZXN0cnVjdG9ycy4gVGhp
cyB3b24ndAogICAgIC8vIGJlIGNhbGxlZCBmb3Igbm8tZGVzdHJ1Y3RvciBibG9ja3MuIFRoaXMg
bXVzdCBjYWxsIE1hcmtlZEJsb2NrOjpmaW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZS4KLSAgICB2
aXJ0dWFsIEZyZWVMaXN0IGZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmLCBNYXJrZWRC
bG9jazo6SGFuZGxlOjpTd2VlcE1vZGUpOworICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hTd2VlcChN
YXJrZWRCbG9jazo6SGFuZGxlJiwgRnJlZUxpc3QqKTsKICAgICAKICAgICAvLyBUaGVzZSBnZXQg
Y2FsbGVkIGZvciBsYXJnZSBvYmplY3RzLgogICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KFZNJiwg
SlNDZWxsKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVy
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxw
ZXJzLmgJKHJldmlzaW9uIDIxNzY0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNz
ZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0NTgsNyArMTQ1OCw3IEBAIHB1Ymxp
YzoKICAgICAgICAgSnVtcCBwb3BQYXRoOwogICAgICAgICBKdW1wIGRvbmU7CiAgICAgICAgIAot
ICAgICAgICBsb2FkMzIoQWRkcmVzcyhhbGxvY2F0b3JHUFIsIE1hcmtlZEFsbG9jYXRvcjo6b2Zm
c2V0T2ZGcmVlTGlzdCgpICsgT0JKRUNUX09GRlNFVE9GKEZyZWVMaXN0LCByZW1haW5pbmcpKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBNYXJrZWRB
bGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZlJlbWFpbmlu
ZygpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgcG9wUGF0aCA9IGJyYW5jaFRlc3QzMihaZXJvLCBy
ZXN1bHRHUFIpOwogICAgICAgICBpZiAoYWxsb2NhdG9yKQogICAgICAgICAgICAgYWRkMzIoVHJ1
c3RlZEltbTMyKC1hbGxvY2F0b3ItPmNlbGxTaXplKCkpLCByZXN1bHRHUFIsIHNjcmF0Y2hHUFIp
OwpAQCAtMTQ3Miw4ICsxNDcyLDggQEAgcHVibGljOgogICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgICAgIG5lZ1B0cihyZXN1bHRHUFIpOwotICAgICAgICBzdG9yZTMyKHNjcmF0Y2hHUFIs
IEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBNYXJrZWRBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3Qo
KSArIE9CSkVDVF9PRkZTRVRPRihGcmVlTGlzdCwgcmVtYWluaW5nKSkpOwotICAgICAgICBBZGRy
ZXNzIHBheWxvYWRFbmRBZGRyID0gQWRkcmVzcyhhbGxvY2F0b3JHUFIsIE1hcmtlZEFsbG9jYXRv
cjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgT0JKRUNUX09GRlNFVE9GKEZyZWVMaXN0LCBwYXlsb2Fk
RW5kKSk7CisgICAgICAgIHN0b3JlMzIoc2NyYXRjaEdQUiwgQWRkcmVzcyhhbGxvY2F0b3JHUFIs
IE1hcmtlZEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9m
UmVtYWluaW5nKCkpKTsKKyAgICAgICAgQWRkcmVzcyBwYXlsb2FkRW5kQWRkciA9IEFkZHJlc3Mo
YWxsb2NhdG9yR1BSLCBNYXJrZWRBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVM
aXN0OjpvZmZzZXRPZlBheWxvYWRFbmQoKSk7CiAgICAgICAgIGlmIChpc1g4NigpKQogICAgICAg
ICAgICAgYWRkUHRyKHBheWxvYWRFbmRBZGRyLCByZXN1bHRHUFIpOwogICAgICAgICBlbHNlIHsK
QEAgLTE0ODUsMTMgKzE0ODUsMTYgQEAgcHVibGljOgogICAgICAgICAKICAgICAgICAgcG9wUGF0
aC5saW5rKHRoaXMpOwogICAgICAgICAKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKGFsbG9jYXRv
ckdQUiwgTWFya2VkQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBPQkpFQ1RfT0ZGU0VU
T0YoRnJlZUxpc3QsIGhlYWQpKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgc2xvd1BhdGguYXBwZW5k
KGJyYW5jaFRlc3RQdHIoWmVybywgcmVzdWx0R1BSKSk7Ci0gICAgICAgIAotICAgICAgICAvLyBU
aGUgb2JqZWN0IGlzIGhhbGYtYWxsb2NhdGVkOiB3ZSBoYXZlIHdoYXQgd2Uga25vdyBpcyBhIGZy
ZXNoIG9iamVjdCwgYnV0Ci0gICAgICAgIC8vIGl0J3Mgc3RpbGwgb24gdGhlIEdDJ3MgZnJlZSBs
aXN0LgotICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0R1BSKSwgc2NyYXRjaEdQUik7Ci0g
ICAgICAgIHN0b3JlUHRyKHNjcmF0Y2hHUFIsIEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBNYXJrZWRB
bGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIE9CSkVDVF9PRkZTRVRPRihGcmVlTGlzdCwg
aGVhZCkpKTsKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBNYXJrZWRBbGxv
Y2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZkluZGV4KCkpLCBy
ZXN1bHRHUFIpOworICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoVGVzdDMyKFplcm8sIHJl
c3VsdEdQUikpOworICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7Cisg
ICAgICAgIHN0b3JlMzIocmVzdWx0R1BSLCBBZGRyZXNzKGFsbG9jYXRvckdQUiwgTWFya2VkQWxs
b2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZJbmRleCgpKSk7
CisgICAgICAgIGlmIChpc1g4NigpKQorICAgICAgICAgICAgbG9hZFB0cihCYXNlSW5kZXgoYWxs
b2NhdG9yR1BSLCByZXN1bHRHUFIsIHRpbWVzUHRyKCksIE1hcmtlZEFsbG9jYXRvcjo6b2Zmc2V0
T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mTGlzdCgpKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKE1hcmtlZEFsbG9j
YXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mTGlzdCgpKSwgYWxs
b2NhdG9yR1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQmFzZUluZGV4KHNj
cmF0Y2hHUFIsIHJlc3VsdEdQUiwgdGltZXNQdHIoKSksIHJlc3VsdEdQUik7CisgICAgICAgIH0K
ICAgICAgICAgCiAgICAgICAgIGRvbmUubGluayh0aGlzKTsKICAgICB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Rlc3RydWN0aWJs
ZU9iamVjdFN1YnNwYWNlLmNwcAkocmV2aXNpb24gMjE3NjQ2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUyLDkgKzUyLDkgQEAgSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZTo6fkpT
RGVzdHJ1YwogewogfQogCi1GcmVlTGlzdCBKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlOjpm
aW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiBoYW5kbGUsIE1hcmtlZEJsb2NrOjpIYW5k
bGU6OlN3ZWVwTW9kZSBzd2VlcE1vZGUpCit2b2lkIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3Bh
Y2U6OmZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmIGhhbmRsZSwgRnJlZUxpc3QqIGZy
ZWVMaXN0KQogewotICAgIHJldHVybiBoYW5kbGUuZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2Uo
c3dlZXBNb2RlLCBEZXN0cm95RnVuYygpKTsKKyAgICBoYW5kbGUuZmluaXNoU3dlZXBLbm93aW5n
U3Vic3BhY2UoZnJlZUxpc3QsIERlc3Ryb3lGdW5jKCkpOwogfQogCiB2b2lkIEpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0U3Vic3BhY2U6OmRlc3Ryb3koVk0mIHZtLCBKU0NlbGwqIGNlbGwpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVj
dGlibGVPYmplY3RTdWJzcGFjZS5oCShyZXZpc2lvbiAyMTc2NDYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM0LDcgKzM0LDcgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIEpT
RGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJik7CiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+SlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZSgpOwog
ICAgIAotICAgIEZyZWVMaXN0IGZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmLCBNYXJr
ZWRCbG9jazo6SGFuZGxlOjpTd2VlcE1vZGUpIG92ZXJyaWRlOworICAgIHZvaWQgZmluaXNoU3dl
ZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYsIEZyZWVMaXN0Kikgb3ZlcnJpZGU7CiAgICAgdm9pZCBk
ZXN0cm95KFZNJiwgSlNDZWxsKikgb3ZlcnJpZGU7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFy
aWFibGVPYmplY3RTdWJzcGFjZS5jcHAJKHJldmlzaW9uIDIxNzY0NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUyLDkgKzUyLDkgQEAgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVj
dFN1YnNwYWNlOjp+SlNTZQogewogfQogCi1GcmVlTGlzdCBKU1NlZ21lbnRlZFZhcmlhYmxlT2Jq
ZWN0U3Vic3BhY2U6OmZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmIGhhbmRsZSwgTWFy
a2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBNb2RlIHN3ZWVwTW9kZSkKK3ZvaWQgSlNTZWdtZW50ZWRW
YXJpYWJsZU9iamVjdFN1YnNwYWNlOjpmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiBo
YW5kbGUsIEZyZWVMaXN0KiBmcmVlTGlzdCkKIHsKLSAgICByZXR1cm4gaGFuZGxlLmZpbmlzaFN3
ZWVwS25vd2luZ1N1YnNwYWNlKHN3ZWVwTW9kZSwgRGVzdHJveUZ1bmMoKSk7CisgICAgaGFuZGxl
LmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlKGZyZWVMaXN0LCBEZXN0cm95RnVuYygpKTsKIH0K
IAogdm9pZCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2U6OmRlc3Ryb3koVk0mIHZt
LCBKU0NlbGwqIGNlbGwpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Nl
Z21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UuaAko
cmV2aXNpb24gMjE3NjQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdt
ZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0
LDcgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTU2VnbWVudGVkVmFyaWFibGVP
YmplY3RTdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmKTsKICAgICBKU19FWFBPUlRfUFJJVkFU
RSB2aXJ0dWFsIH5KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UoKTsKICAgICAKLSAg
ICBGcmVlTGlzdCBmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiwgTWFya2VkQmxvY2s6
OkhhbmRsZTo6U3dlZXBNb2RlKSBvdmVycmlkZTsKKyAgICB2b2lkIGZpbmlzaFN3ZWVwKE1hcmtl
ZEJsb2NrOjpIYW5kbGUmLCBGcmVlTGlzdCopIG92ZXJyaWRlOwogICAgIHZvaWQgZGVzdHJveShW
TSYsIEpTQ2VsbCopIG92ZXJyaWRlOwogfTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>311709</attachid>
            <date>2017-06-01 09:17:10 -0700</date>
            <delta_ts>2017-06-01 09:53:46 -0700</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>38515</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0ZyZWVMaXN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9GcmVlTGlzdC5jcHAJKHJldmlzaW9uIDIx
NzY0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0ZyZWVMaXN0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYsMjkgKzI2LDY0IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiRnJlZUxpc3QuaCIKIAorI2luY2x1ZGUgIk1hcmtlZEJsb2NrLmgiCisjaW5jbHVkZSA8d3Rm
L0NvbW1hUHJpbnRlci5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAotYm9vbCBGcmVlTGlzdDo6Y29u
dGFpbnMoY29uc3Qgdm9pZCogdGFyZ2V0KSBjb25zdAorRnJlZUxpc3Q6OkZyZWVMaXN0KHVuc2ln
bmVkIGNlbGxTaXplKQorICAgIDogbV9jZWxsU2l6ZShjZWxsU2l6ZSkKK3sKKyAgICBzdGF0aWNf
YXNzZXJ0KE1hcmtlZEJsb2NrOjpibG9ja1NpemUgPD0gKDF1IDw8IChzaXplb2YoRnJlZU9mZnNl
dCkgKiA4KSksICJGcmVlTGlzdCBhc3N1bWVzIHRoYXQgRnJlZU9mZnNldCBpcyBiaWcgZW5vdWdo
IHRvIGV4cHJlc3MgYWxsIHBvc3NpYmxlIGJsb2NrIG9mZnNldHMiKTsKKyAgICAKKyAgICBtX2xp
c3RTaXplID0gTWFya2VkQmxvY2s6OmJsb2NrU2l6ZSAvIGNlbGxTaXplOworICAgIG1fbGlzdCA9
IHN0ZDo6bWFrZV91bmlxdWU8RnJlZU9mZnNldFtdPihtX2xpc3RTaXplKTsKK30KKworRnJlZUxp
c3Q6On5GcmVlTGlzdCgpCit7Cit9CisKK3ZvaWQgRnJlZUxpc3Q6OmluaXRpYWxpemVMaXN0KE1h
cmtlZEJsb2NrKiBibG9jaykKIHsKLSAgICBpZiAocmVtYWluaW5nKSB7Ci0gICAgICAgIGNvbnN0
IHZvaWQqIHN0YXJ0ID0gKHBheWxvYWRFbmQgLSByZW1haW5pbmcpOwotICAgICAgICBjb25zdCB2
b2lkKiBlbmQgPSBwYXlsb2FkRW5kOworICAgIG1fYmxvY2sgPSBibG9jazsKKyAgICBtX2luZGV4
ID0gMDsKKyAgICBtX3BheWxvYWRFbmQgPSBudWxscHRyOworICAgIG1fcmVtYWluaW5nID0gMDsK
KyAgICBtX29yaWdpbmFsU2l6ZSA9IDA7Cit9CisKK3ZvaWQgRnJlZUxpc3Q6OmluaXRpYWxpemVC
dW1wKGNoYXIqIHBheWxvYWRFbmQsIHVuc2lnbmVkIHJlbWFpbmluZykKK3sKKyAgICBtX2Jsb2Nr
ID0gbnVsbHB0cjsKKyAgICBtX2luZGV4ID0gMDsKKyAgICBtX3BheWxvYWRFbmQgPSBwYXlsb2Fk
RW5kOworICAgIG1fcmVtYWluaW5nID0gcmVtYWluaW5nOworICAgIG1fb3JpZ2luYWxTaXplID0g
cmVtYWluaW5nOworfQorCitib29sIEZyZWVMaXN0Ojpjb250YWlucyhIZWFwQ2VsbCogdGFyZ2V0
KSBjb25zdAoreworICAgIGlmIChtX3JlbWFpbmluZykgeworICAgICAgICBjb25zdCB2b2lkKiBz
dGFydCA9IChtX3BheWxvYWRFbmQgLSBtX3JlbWFpbmluZyk7CisgICAgICAgIGNvbnN0IHZvaWQq
IGVuZCA9IG1fcGF5bG9hZEVuZDsKICAgICAgICAgcmV0dXJuIChzdGFydCA8PSB0YXJnZXQpICYm
ICh0YXJnZXQgPCBlbmQpOwogICAgIH0KIAotICAgIEZyZWVDZWxsKiBjYW5kaWRhdGUgPSBoZWFk
OwotICAgIHdoaWxlIChjYW5kaWRhdGUpIHsKLSAgICAgICAgaWYgKGNhbmRpZGF0ZSA9PSB0YXJn
ZXQpCisgICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleDsgaS0tOykgeworICAgICAgICBpZiAo
ZnJvbU9mZnNldChtX2xpc3RbaV0pID09IHRhcmdldCkKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICBjYW5kaWRhdGUgPSBjYW5kaWRhdGUtPm5leHQ7CiAgICAgfQotCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCiB2b2lkIEZyZWVMaXN0OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0CiB7Ci0gICAgb3V0LnByaW50KCJ7aGVhZCA9ICIsIFJhd1BvaW50ZXIoaGVhZCksICIsIHBh
eWxvYWRFbmQgPSAiLCBSYXdQb2ludGVyKHBheWxvYWRFbmQpLCAiLCByZW1haW5pbmcgPSAiLCBy
ZW1haW5pbmcsICIsIG9yaWdpbmFsU2l6ZSA9ICIsIG9yaWdpbmFsU2l6ZSwgIn0iKTsKKyAgICBv
dXQucHJpbnQoIntibG9jayA9ICIsIFJhd1BvaW50ZXIobV9ibG9jayksICIsIGxpc3QgPSBbIik7
CisgICAgQ29tbWFQcmludGVyIGNvbW1hOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
X2luZGV4OyArK2kpCisgICAgICAgIG91dC5wcmludChjb21tYSwgbV9saXN0W2ldKTsKKyAgICBv
dXQucHJpbnQoIl0sIGluZGV4ID0gIiwgbV9pbmRleCwgIiwgcGF5bG9hZEVuZCA9ICIsIFJhd1Bv
aW50ZXIobV9wYXlsb2FkRW5kKSwgIiwgcmVtYWluaW5nID0gIiwgbV9yZW1haW5pbmcsICIsIG9y
aWdpbmFsU2l6ZSA9ICIsIG1fb3JpZ2luYWxTaXplLCAifSIpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0ZyZWVMaXN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRnJlZUxpc3QuaAkocmV2aXNpb24g
MjE3NjQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRnJlZUxpc3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjUsNjcgKzI1LDYxIEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSA8
d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAKIG5hbWVz
cGFjZSBKU0MgewogCi1zdHJ1Y3QgRnJlZUNlbGwgewotICAgIEZyZWVDZWxsKiBuZXh0OwotfTsK
LSAgICAgICAgCi0vLyBUaGlzIHJlcHJlc2VudGF0aW9uIG9mIGEgRnJlZUxpc3QgaXMgY29udmVu
aWVudCBmb3IgdGhlIE1hcmtlZEFsbG9jYXRvci4KLQotc3RydWN0IEZyZWVMaXN0IHsKLSAgICBG
cmVlQ2VsbCogaGVhZCB7IG51bGxwdHIgfTsKLSAgICBjaGFyKiBwYXlsb2FkRW5kIHsgbnVsbHB0
ciB9OwotICAgIHVuc2lnbmVkIHJlbWFpbmluZyB7IDAgfTsKLSAgICB1bnNpZ25lZCBvcmlnaW5h
bFNpemUgeyAwIH07Ci0gICAgCi0gICAgRnJlZUxpc3QoKQotICAgIHsKLSAgICB9Ci0gICAgCi0g
ICAgc3RhdGljIEZyZWVMaXN0IGxpc3QoRnJlZUNlbGwqIGhlYWQsIHVuc2lnbmVkIGJ5dGVzKQot
ICAgIHsKLSAgICAgICAgRnJlZUxpc3QgcmVzdWx0OwotICAgICAgICByZXN1bHQuaGVhZCA9IGhl
YWQ7Ci0gICAgICAgIHJlc3VsdC5yZW1haW5pbmcgPSAwOwotICAgICAgICByZXN1bHQub3JpZ2lu
YWxTaXplID0gYnl0ZXM7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIAotICAg
IHN0YXRpYyBGcmVlTGlzdCBidW1wKGNoYXIqIHBheWxvYWRFbmQsIHVuc2lnbmVkIHJlbWFpbmlu
ZykKLSAgICB7Ci0gICAgICAgIEZyZWVMaXN0IHJlc3VsdDsKLSAgICAgICAgcmVzdWx0LnBheWxv
YWRFbmQgPSBwYXlsb2FkRW5kOwotICAgICAgICByZXN1bHQucmVtYWluaW5nID0gcmVtYWluaW5n
OwotICAgICAgICByZXN1bHQub3JpZ2luYWxTaXplID0gcmVtYWluaW5nOwotICAgICAgICByZXR1
cm4gcmVzdWx0OwotICAgIH0KLSAgICAKLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRnJlZUxp
c3QmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGhlYWQgPT0gb3RoZXIuaGVh
ZAotICAgICAgICAgICAgJiYgcGF5bG9hZEVuZCA9PSBvdGhlci5wYXlsb2FkRW5kCi0gICAgICAg
ICAgICAmJiByZW1haW5pbmcgPT0gb3RoZXIucmVtYWluaW5nCi0gICAgICAgICAgICAmJiBvcmln
aW5hbFNpemUgPT0gb3RoZXIub3JpZ2luYWxTaXplOwotICAgIH0KLSAgICAKLSAgICBib29sIG9w
ZXJhdG9yIT0oY29uc3QgRnJlZUxpc3QmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0
dXJuICEoKnRoaXMgPT0gb3RoZXIpOwotICAgIH0KLSAgICAKLSAgICBleHBsaWNpdCBvcGVyYXRv
ciBib29sKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiAqdGhpcyAhPSBGcmVlTGlzdCgp
OwotICAgIH0KLQotICAgIGJvb2wgY29udGFpbnMoY29uc3Qgdm9pZCogdGFyZ2V0KSBjb25zdDsK
K2NsYXNzIEhlYXBDZWxsOworY2xhc3MgTWFya2VkQmxvY2s7CiAKLSAgICBib29sIGFsbG9jYXRp
b25XaWxsRmFpbCgpIGNvbnN0IHsgcmV0dXJuICFoZWFkICYmICFyZW1haW5pbmc7IH0KK2NsYXNz
IEZyZWVMaXN0IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShGcmVlTGlzdCk7CisgICAgCitw
dWJsaWM6CisgICAgdHlwZWRlZiB1aW50MTZfdCBGcmVlT2Zmc2V0OworICAgIAorICAgIEZyZWVM
aXN0KHVuc2lnbmVkIGNlbGxTaXplKTsKKyAgICB+RnJlZUxpc3QoKTsKKyAgICAKKyAgICB2b2lk
IGluaXRpYWxpemVMaXN0KE1hcmtlZEJsb2NrKik7CisgICAgdm9pZCBhZGRGcmVlQ2VsbChIZWFw
Q2VsbCopOworICAgIAorICAgIHZvaWQgaW5pdGlhbGl6ZUJ1bXAoY2hhciogcGF5bG9hZEVuZCwg
dW5zaWduZWQgcmVtYWluaW5nKTsKKyAgICAKKyAgICBib29sIGFsbG9jYXRpb25XaWxsRmFpbCgp
IGNvbnN0IHsgcmV0dXJuICFtX2luZGV4ICYmICFtX3JlbWFpbmluZzsgfQogICAgIGJvb2wgYWxs
b2NhdGlvbldpbGxTdWNjZWVkKCkgY29uc3QgeyByZXR1cm4gIWFsbG9jYXRpb25XaWxsRmFpbCgp
OyB9CiAgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICBIZWFwQ2VsbCogYWxs
b2NhdGUoY29uc3QgRnVuYyYgc2xvd1BhdGgpOworICAgIAorICAgIGJvb2wgY29udGFpbnMoSGVh
cENlbGwqKSBjb25zdDsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIHZv
aWQgZm9yRWFjaChjb25zdCBGdW5jJikgY29uc3Q7CisgICAgCisgICAgRnJlZU9mZnNldCogYWRk
cmVzc09mTGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdC5nZXQoKTsgfQorCisgICAgc3RhdGlj
IHB0cmRpZmZfdCBvZmZzZXRPZkJsb2NrKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZyZWVM
aXN0LCBtX2Jsb2NrKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZMaXN0KCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZyZWVMaXN0LCBtX2xpc3QpOyB9CisgICAgc3RhdGljIHB0
cmRpZmZfdCBvZmZzZXRPZkluZGV4KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZyZWVMaXN0
LCBtX2luZGV4KTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZQYXlsb2FkRW5kKCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZyZWVMaXN0LCBtX3BheWxvYWRFbmQpOyB9CisgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlJlbWFpbmluZygpIHsgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihGcmVlTGlzdCwgbV9yZW1haW5pbmcpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZz
ZXRPZk9yaWdpbmFsU2l6ZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihGcmVlTGlzdCwgbV9v
cmlnaW5hbFNpemUpOyB9CisgICAgCitwcml2YXRlOgorICAgIEZyZWVPZmZzZXQgdG9PZmZzZXQo
SGVhcENlbGwqKSBjb25zdDsKKyAgICBIZWFwQ2VsbCogZnJvbU9mZnNldChGcmVlT2Zmc2V0KSBj
b25zdDsKKyAgICAKKyAgICB1bnNpZ25lZCBtX2NlbGxTaXplIHsgVUlOVF9NQVggfTsKKyAgICBN
YXJrZWRCbG9jayogbV9ibG9jayB7IG51bGxwdHIgfTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RnJl
ZU9mZnNldFtdPiBtX2xpc3Q7CisgICAgdW5zaWduZWQgbV9saXN0U2l6ZSB7IDAgfTsKKyAgICB1
bnNpZ25lZCBtX2luZGV4IHsgMCB9OworICAgIGNoYXIqIG1fcGF5bG9hZEVuZCB7IG51bGxwdHIg
fTsKKyAgICB1bnNpZ25lZCBtX3JlbWFpbmluZyB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX29yaWdp
bmFsU2l6ZSB7IDAgfTsKKyAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsK
IH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0ZyZWVMaXN0SW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0ZyZWVMaXN0SW5saW5l
cy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0ZyZWVMaXN0
SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJGcmVlTGlzdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworaW5saW5lIHZvaWQgRnJlZUxpc3Q6
OmFkZEZyZWVDZWxsKEhlYXBDZWxsKiBjZWxsKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1faW5k
ZXggPCBtX2xpc3RTaXplKTsKKyAgICBtX2xpc3RbbV9pbmRleCsrXSA9IHRvT2Zmc2V0KGNlbGwp
OworICAgIG1fb3JpZ2luYWxTaXplICs9IG1fY2VsbFNpemU7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIEZ1bmM+CitIZWFwQ2VsbCogRnJlZUxpc3Q6OmFsbG9jYXRlKGNvbnN0IEZ1bmMmIHNsb3dQ
YXRoKQoreworICAgIHVuc2lnbmVkIHJlbWFpbmluZyA9IG1fcmVtYWluaW5nOworICAgIGlmIChy
ZW1haW5pbmcpIHsKKyAgICAgICAgdW5zaWduZWQgY2VsbFNpemUgPSBtX2NlbGxTaXplOworICAg
ICAgICByZW1haW5pbmcgLT0gY2VsbFNpemU7CisgICAgICAgIG1fcmVtYWluaW5nID0gcmVtYWlu
aW5nOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4obV9wYXlsb2FkRW5k
IC0gcmVtYWluaW5nIC0gY2VsbFNpemUpOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBpbmRl
eCA9IG1faW5kZXg7CisgICAgaWYgKFVOTElLRUxZKCFpbmRleCkpCisgICAgICAgIHJldHVybiBz
bG93UGF0aCgpOworICAgIAorICAgIC0taW5kZXg7CisgICAgbV9pbmRleCA9IGluZGV4OworICAg
IHJldHVybiBmcm9tT2Zmc2V0KG1fbGlzdFtpbmRleF0pOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jPgordm9pZCBGcmVlTGlzdDo6Zm9yRWFjaChjb25zdCBGdW5jJiBmdW5jKSBjb25zdAor
eworICAgIGlmIChtX3JlbWFpbmluZykgeworICAgICAgICBmb3IgKHVuc2lnbmVkIHJlbWFpbmlu
ZyA9IG1fcmVtYWluaW5nOyByZW1haW5pbmc7IHJlbWFpbmluZyAtPSBtX2NlbGxTaXplKQorICAg
ICAgICAgICAgZnVuYyhiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPihtX3BheWxvYWRFbmQgLSByZW1h
aW5pbmcpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4
OyBpLS07KQorICAgICAgICAgICAgZnVuYyhmcm9tT2Zmc2V0KG1fbGlzdFtpXSkpOworICAgIH0K
K30KKworaW5saW5lIEZyZWVMaXN0OjpGcmVlT2Zmc2V0IEZyZWVMaXN0Ojp0b09mZnNldChIZWFw
Q2VsbCogY2VsbCkgY29uc3QKK3sKKyAgICB1aW50cHRyX3QgcmVzdWx0ID0gYml0d2lzZV9jYXN0
PHVpbnRwdHJfdD4oY2VsbCkgLSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihtX2Jsb2NrKTsKKyAg
ICBSRUxFQVNFX0FTU0VSVChyZXN1bHQgPCBNYXJrZWRCbG9jazo6YmxvY2tTaXplKTsKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8RnJlZU9mZnNldD4ocmVzdWx0KTsKK30KKworaW5saW5lIEhlYXBD
ZWxsKiBGcmVlTGlzdDo6ZnJvbU9mZnNldChGcmVlT2Zmc2V0IG9mZnNldCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90Pihv
ZmZzZXQpICsgYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obV9ibG9jaykpOworfQorCit9IC8vIG5h
bWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxs
b2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2Vk
QWxsb2NhdG9yLmgJKHJldmlzaW9uIDIxNzY0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtlZEFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTYsNyArMTU2LDcgQEAg
cHVibGljOgogICAgIHZvaWQqIHRyeUFsbG9jYXRlKEdDRGVmZXJyYWxDb250ZXh0KiA9IG51bGxw
dHIpOwogICAgIEhlYXAqIGhlYXAoKSB7IHJldHVybiBtX2hlYXA7IH0KIAotICAgIGJvb2wgaXNG
cmVlTGlzdGVkQ2VsbChjb25zdCB2b2lkKiB0YXJnZXQpIGNvbnN0IHsgcmV0dXJuIG1fZnJlZUxp
c3QuY29udGFpbnModGFyZ2V0KTsgfQorICAgIGJvb2wgaXNGcmVlTGlzdGVkQ2VsbChjb25zdCB2
b2lkKiB0YXJnZXQpIGNvbnN0OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9p
ZCBmb3JFYWNoQmxvY2soY29uc3QgRnVuY3RvciYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmN0b3I+IHZvaWQgZm9yRWFjaE5vdEVtcHR5QmxvY2soY29uc3QgRnVuY3RvciYpOwpAQCAtMjA5
LDYgKzIwOSw4IEBAIHB1YmxpYzoKICAgICBTdWJzcGFjZSogc3Vic3BhY2UoKSBjb25zdCB7IHJl
dHVybiBtX3N1YnNwYWNlOyB9CiAgICAgTWFya2VkU3BhY2UmIG1hcmtlZFNwYWNlKCkgY29uc3Q7
CiAgICAgCisgICAgY29uc3QgRnJlZUxpc3QmIGZyZWVMaXN0KCkgY29uc3QgeyByZXR1cm4gbV9m
cmVlTGlzdDsgfQorICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogICAg
IHZvaWQgZHVtcEJpdHMoUHJpbnRTdHJlYW0mID0gV1RGOjpkYXRhRmlsZSgpKTsKICAgICAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvcklubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3JJ
bmxpbmVzLmgJKHJldmlzaW9uIDIxNzY0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtlZEFsbG9jYXRvcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNDQgKzI1LDMw
IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiRnJlZUxpc3RJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiTWFya2VkQWxsb2NhdG9yLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCitpbmxpbmUgYm9v
bCBNYXJrZWRBbGxvY2F0b3I6OmlzRnJlZUxpc3RlZENlbGwoY29uc3Qgdm9pZCogdGFyZ2V0KSBj
b25zdAoreworICAgIHJldHVybiBtX2ZyZWVMaXN0LmNvbnRhaW5zKGJpdHdpc2VfY2FzdDxIZWFw
Q2VsbCo+KHRhcmdldCkpOworfQorCiBBTFdBWVNfSU5MSU5FIHZvaWQqIE1hcmtlZEFsbG9jYXRv
cjo6dHJ5QWxsb2NhdGUoR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCkKIHsKLSAg
ICB1bnNpZ25lZCByZW1haW5pbmcgPSBtX2ZyZWVMaXN0LnJlbWFpbmluZzsKLSAgICBpZiAocmVt
YWluaW5nKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNlbGxTaXplID0gbV9jZWxsU2l6ZTsKLSAgICAg
ICAgcmVtYWluaW5nIC09IGNlbGxTaXplOwotICAgICAgICBtX2ZyZWVMaXN0LnJlbWFpbmluZyA9
IHJlbWFpbmluZzsKLSAgICAgICAgcmV0dXJuIG1fZnJlZUxpc3QucGF5bG9hZEVuZCAtIHJlbWFp
bmluZyAtIGNlbGxTaXplOwotICAgIH0KLSAgICAKLSAgICBGcmVlQ2VsbCogaGVhZCA9IG1fZnJl
ZUxpc3QuaGVhZDsKLSAgICBpZiAoVU5MSUtFTFkoIWhlYWQpKQotICAgICAgICByZXR1cm4gdHJ5
QWxsb2NhdGVTbG93Q2FzZShkZWZlcnJhbENvbnRleHQpOwotICAgIAotICAgIG1fZnJlZUxpc3Qu
aGVhZCA9IGhlYWQtPm5leHQ7Ci0gICAgcmV0dXJuIGhlYWQ7CisgICAgcmV0dXJuIG1fZnJlZUxp
c3QuYWxsb2NhdGUoCisgICAgICAgIFsmXSAoKSAtPiBIZWFwQ2VsbCogeworICAgICAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PEhlYXBDZWxsKj4odHJ5QWxsb2NhdGVTbG93Q2FzZShkZWZlcnJh
bENvbnRleHQpKTsKKyAgICAgICAgfSk7CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCogTWFya2Vk
QWxsb2NhdG9yOjphbGxvY2F0ZShHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0KQog
ewotICAgIHVuc2lnbmVkIHJlbWFpbmluZyA9IG1fZnJlZUxpc3QucmVtYWluaW5nOwotICAgIGlm
IChyZW1haW5pbmcpIHsKLSAgICAgICAgdW5zaWduZWQgY2VsbFNpemUgPSBtX2NlbGxTaXplOwot
ICAgICAgICByZW1haW5pbmcgLT0gY2VsbFNpemU7Ci0gICAgICAgIG1fZnJlZUxpc3QucmVtYWlu
aW5nID0gcmVtYWluaW5nOwotICAgICAgICByZXR1cm4gbV9mcmVlTGlzdC5wYXlsb2FkRW5kIC0g
cmVtYWluaW5nIC0gY2VsbFNpemU7Ci0gICAgfQotICAgIAotICAgIEZyZWVDZWxsKiBoZWFkID0g
bV9mcmVlTGlzdC5oZWFkOwotICAgIGlmIChVTkxJS0VMWSghaGVhZCkpCi0gICAgICAgIHJldHVy
biBhbGxvY2F0ZVNsb3dDYXNlKGRlZmVycmFsQ29udGV4dCk7Ci0gICAgCi0gICAgbV9mcmVlTGlz
dC5oZWFkID0gaGVhZC0+bmV4dDsKLSAgICByZXR1cm4gaGVhZDsKKyAgICByZXR1cm4gbV9mcmVl
TGlzdC5hbGxvY2F0ZSgKKyAgICAgICAgWyZdICgpIC0+IEhlYXBDZWxsKiB7CisgICAgICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8SGVhcENlbGwqPihhbGxvY2F0ZVNsb3dDYXNlKGRlZmVycmFs
Q29udGV4dCkpOworICAgICAgICB9KTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+
IGlubGluZSB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6Zm9yRWFjaEJsb2NrKGNvbnN0IEZ1bmN0b3Im
IGZ1bmN0b3IpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2su
Y3BwCShyZXZpc2lvbiAyMTc2NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
ZWRCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgogCisjaW5jbHVkZSAiRnJlZUxpc3RJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiSlNEZXN0cnVjdGlibGVP
YmplY3QuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCkBAIC0xMzQsOCArMTM1LDcgQEAgdm9p
ZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzdG9wQWxsb2NhdGluZwogICAgICAgICAgICAgcmV0dXJu
IEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7CiAgICAgICAgIH0pOwogCi0gICAgZm9yRWFjaEZy
ZWVDZWxsKAotICAgICAgICBmcmVlTGlzdCwKKyAgICBmcmVlTGlzdC5mb3JFYWNoKAogICAgICAg
ICBbJl0gKEhlYXBDZWxsKiBjZWxsKSB7CiAgICAgICAgICAgICBpZiAoZmFsc2UpCiAgICAgICAg
ICAgICAgICAgZGF0YUxvZygiRnJlZSBjZWxsOiAiLCBSYXdQb2ludGVyKGNlbGwpLCAiXG4iKTsK
QEAgLTE4NCwyOSArMTg0LDEzIEBAIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnJlc3Vt
ZUFsbG8KIAogdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjp6YXAoY29uc3QgRnJlZUxpc3QmIGZy
ZWVMaXN0KQogewotICAgIGZvckVhY2hGcmVlQ2VsbCgKLSAgICAgICAgZnJlZUxpc3QsCisgICAg
ZnJlZUxpc3QuZm9yRWFjaCgKICAgICAgICAgWyZdIChIZWFwQ2VsbCogY2VsbCkgewogICAgICAg
ICAgICAgaWYgKG1fYXR0cmlidXRlcy5kZXN0cnVjdGlvbiA9PSBOZWVkc0Rlc3RydWN0aW9uKQog
ICAgICAgICAgICAgICAgIGNlbGwtPnphcCgpOwogICAgICAgICB9KTsKIH0KIAotdGVtcGxhdGU8
dHlwZW5hbWUgRnVuYz4KLXZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6Zm9yRWFjaEZyZWVDZWxs
KGNvbnN0IEZyZWVMaXN0JiBmcmVlTGlzdCwgY29uc3QgRnVuYyYgZnVuYykKLXsKLSAgICBpZiAo
ZnJlZUxpc3QucmVtYWluaW5nKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgcmVtYWluaW5nID0g
ZnJlZUxpc3QucmVtYWluaW5nOyByZW1haW5pbmc7IHJlbWFpbmluZyAtPSBjZWxsU2l6ZSgpKQot
ICAgICAgICAgICAgZnVuYyhiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPihmcmVlTGlzdC5wYXlsb2Fk
RW5kIC0gcmVtYWluaW5nKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZm9yIChGcmVlQ2VsbCog
Y3VycmVudCA9IGZyZWVMaXN0LmhlYWQ7IGN1cnJlbnQ7KSB7Ci0gICAgICAgICAgICBGcmVlQ2Vs
bCogbmV4dCA9IGN1cnJlbnQtPm5leHQ7Ci0gICAgICAgICAgICBmdW5jKGJpdHdpc2VfY2FzdDxI
ZWFwQ2VsbCo+KGN1cnJlbnQpKTsKLSAgICAgICAgICAgIGN1cnJlbnQgPSBuZXh0OwotICAgICAg
ICB9Ci0gICAgfQotfQotCiB2b2lkIE1hcmtlZEJsb2NrOjphYm91dFRvTWFya1Nsb3coSGVhcFZl
cnNpb24gbWFya2luZ1ZlcnNpb24pCiB7CiAgICAgQVNTRVJUKHZtKCktPmhlYXAub2JqZWN0U3Bh
Y2UoKS5pc01hcmtpbmcoKSk7CkBAIC00MDcsMjAgKzM5MSwyMiBAQCBTdWJzcGFjZSogTWFya2Vk
QmxvY2s6OkhhbmRsZTo6c3Vic3BhY2UoCiAgICAgcmV0dXJuIGFsbG9jYXRvcigpLT5zdWJzcGFj
ZSgpOwogfQogCi1GcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzd2VlcChTd2VlcE1vZGUg
c3dlZXBNb2RlKQordm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzd2VlcChGcmVlTGlzdCogZnJl
ZUxpc3QpCiB7CiAgICAgU3dlZXBpbmdTY29wZSBzd2VlcGluZ1Njb3BlKCpoZWFwKCkpOwogICAg
IAorICAgIFN3ZWVwTW9kZSBzd2VlcE1vZGUgPSBmcmVlTGlzdCA/IFN3ZWVwVG9GcmVlTGlzdCA6
IFN3ZWVwT25seTsKKyAgICAKICAgICBtX2FsbG9jYXRvci0+c2V0SXNVbnN3ZXB0KE5vTG9ja2lu
Z05lY2Vzc2FyeSwgdGhpcywgZmFsc2UpOwogICAgIAogICAgIG1fd2Vha1NldC5zd2VlcCgpOwog
CiAgICAgaWYgKHN3ZWVwTW9kZSA9PSBTd2VlcE9ubHkgJiYgbV9hdHRyaWJ1dGVzLmRlc3RydWN0
aW9uID09IERvZXNOb3ROZWVkRGVzdHJ1Y3Rpb24pCi0gICAgICAgIHJldHVybiBGcmVlTGlzdCgp
OworICAgICAgICByZXR1cm47CiAKICAgICBpZiAoVU5MSUtFTFkobV9pc0ZyZWVMaXN0ZWQpKSB7
CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN3ZWVwTW9kZSA9PSBTd2VlcFRvRnJlZUxpc3QpOwot
ICAgICAgICByZXR1cm4gRnJlZUxpc3QoKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAK
ICAgICBBU1NFUlQoIW1fYWxsb2NhdG9yLT5pc0FsbG9jYXRlZChOb0xvY2tpbmdOZWNlc3Nhcnks
IHRoaXMpKTsKQEAgLTQyOCw4ICs0MTQsMTAgQEAgRnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRs
ZTo6c3dlZXAoU3dlZQogICAgIGlmIChzcGFjZSgpLT5pc01hcmtpbmcoKSkKICAgICAgICAgYmxv
Y2soKS5tX2xvY2subG9jaygpOwogICAgIAotICAgIGlmIChtX2F0dHJpYnV0ZXMuZGVzdHJ1Y3Rp
b24gPT0gTmVlZHNEZXN0cnVjdGlvbikKLSAgICAgICAgcmV0dXJuIHN1YnNwYWNlKCktPmZpbmlz
aFN3ZWVwKCp0aGlzLCBzd2VlcE1vZGUpOworICAgIGlmIChtX2F0dHJpYnV0ZXMuZGVzdHJ1Y3Rp
b24gPT0gTmVlZHNEZXN0cnVjdGlvbikgeworICAgICAgICBzdWJzcGFjZSgpLT5maW5pc2hTd2Vl
cCgqdGhpcywgZnJlZUxpc3QpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgIAogICAgIC8v
IEhhbmRsZSB0aGUgbm8tZGVzdHJ1Y3RvciBzcGVjaWFsaXphdGlvbnMgaGVyZSwgc2luY2Ugd2Ug
aGF2ZSB0aGUgbW9zdCBvZiB0aG9zZS4gVGhpcwogICAgIC8vIGVuc3VyZXMgdGhhdCB0aGV5IGRv
bid0IGdldCByZS1zcGVjaWFsaXplZCBmb3IgZXZlcnkgZGVzdHJ1Y3RvciBzcGFjZS4KQEAgLTQz
OSw3ICs0MjcsNiBAQCBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzd2VlcChTd2VlCiAg
ICAgTmV3bHlBbGxvY2F0ZWRNb2RlIG5ld2x5QWxsb2NhdGVkTW9kZSA9IHRoaXMtPm5ld2x5QWxs
b2NhdGVkTW9kZSgpOwogICAgIE1hcmtzTW9kZSBtYXJrc01vZGUgPSB0aGlzLT5tYXJrc01vZGUo
KTsKICAgICAKLSAgICBGcmVlTGlzdCByZXN1bHQ7CiAgICAgYXV0byB0cnlTcGVjaWFsaXplZCA9
IFsmXSAoKSAtPiBib29sIHsKICAgICAgICAgaWYgKHN3ZWVwTW9kZSAhPSBTd2VlcFRvRnJlZUxp
c3QpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC00NTIsMjAgKzQzOSwyMCBAQCBGcmVl
TGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzd2VlcChTd2VlCiAgICAgICAgIGNhc2UgSXNFbXB0
eToKICAgICAgICAgICAgIHN3aXRjaCAobWFya3NNb2RlKSB7CiAgICAgICAgICAgICBjYXNlIE1h
cmtzTm90U3RhbGU6Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gc3BlY2lhbGl6ZWRTd2VlcDx0
cnVlLCBJc0VtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzTm9EZXN0cnVjdG9ycywgRG9u
dFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBNYXJrc05vdFN0YWxlPihJc0Vt
cHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzTm9EZXN0cnVjdG9ycywgRG9udFNjcmliYmxl
LCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBNYXJrc05vdFN0YWxlLCBbXSAoVk0mLCBKU0Nl
bGwqKSB7IH0pOworICAgICAgICAgICAgICAgIHNwZWNpYWxpemVkU3dlZXA8dHJ1ZSwgSXNFbXB0
eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwg
RG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCwgTWFya3NOb3RTdGFsZT4oZnJlZUxpc3QsIElzRW1w
dHksIFN3ZWVwVG9GcmVlTGlzdCwgQmxvY2tIYXNOb0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUs
IERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzTm90U3RhbGUsIFtdIChWTSYsIEpTQ2Vs
bCopIHsgfSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICBjYXNl
IE1hcmtzU3RhbGU6Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gc3BlY2lhbGl6ZWRTd2VlcDx0
cnVlLCBJc0VtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzTm9EZXN0cnVjdG9ycywgRG9u
dFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBNYXJrc1N0YWxlPihJc0VtcHR5
LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzTm9EZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBE
b2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBNYXJrc1N0YWxlLCBbXSAoVk0mLCBKU0NlbGwqKSB7
IH0pOworICAgICAgICAgICAgICAgIHNwZWNpYWxpemVkU3dlZXA8dHJ1ZSwgSXNFbXB0eSwgU3dl
ZXBUb0ZyZWVMaXN0LCBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9lc05v
dEhhdmVOZXdseUFsbG9jYXRlZCwgTWFya3NTdGFsZT4oZnJlZUxpc3QsIElzRW1wdHksIFN3ZWVw
VG9GcmVlTGlzdCwgQmxvY2tIYXNOb0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUsIERvZXNOb3RI
YXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzU3RhbGUsIFtdIChWTSYsIEpTQ2VsbCopIHsgfSk7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBOb3RFbXB0eToKICAgICAgICAgICAgIHN3aXRjaCAobWFya3NN
b2RlKSB7CiAgICAgICAgICAgICBjYXNlIE1hcmtzTm90U3RhbGU6Ci0gICAgICAgICAgICAgICAg
cmVzdWx0ID0gc3BlY2lhbGl6ZWRTd2VlcDx0cnVlLCBOb3RFbXB0eSwgU3dlZXBUb0ZyZWVMaXN0
LCBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9lc05vdEhhdmVOZXdseUFs
bG9jYXRlZCwgTWFya3NOb3RTdGFsZT4oSXNFbXB0eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hh
c05vRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCwg
TWFya3NOb3RTdGFsZSwgW10gKFZNJiwgSlNDZWxsKikgeyB9KTsKKyAgICAgICAgICAgICAgICBz
cGVjaWFsaXplZFN3ZWVwPHRydWUsIE5vdEVtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFz
Tm9EZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBN
YXJrc05vdFN0YWxlPihmcmVlTGlzdCwgSXNFbXB0eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hh
c05vRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCwg
TWFya3NOb3RTdGFsZSwgW10gKFZNJiwgSlNDZWxsKikgeyB9KTsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIGNhc2UgTWFya3NTdGFsZToKLSAgICAgICAgICAgICAg
ICByZXN1bHQgPSBzcGVjaWFsaXplZFN3ZWVwPHRydWUsIE5vdEVtcHR5LCBTd2VlcFRvRnJlZUxp
c3QsIEJsb2NrSGFzTm9EZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5
QWxsb2NhdGVkLCBNYXJrc1N0YWxlPihJc0VtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFz
Tm9EZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBN
YXJrc1N0YWxlLCBbXSAoVk0mLCBKU0NlbGwqKSB7IH0pOworICAgICAgICAgICAgICAgIHNwZWNp
YWxpemVkU3dlZXA8dHJ1ZSwgTm90RW1wdHksIFN3ZWVwVG9GcmVlTGlzdCwgQmxvY2tIYXNOb0Rl
c3RydWN0b3JzLCBEb250U2NyaWJibGUsIERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtz
U3RhbGU+KGZyZWVMaXN0LCBJc0VtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzTm9EZXN0
cnVjdG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBNYXJrc1N0
YWxlLCBbXSAoVk0mLCBKU0NlbGwqKSB7IH0pOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CkBAIC00NzUsMTAgKzQ2MiwxMCBA
QCBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzd2VlcChTd2VlCiAgICAgfTsKICAgICAK
ICAgICBpZiAodHJ5U3BlY2lhbGl6ZWQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgcmV0dXJuOwogCiAgICAgLy8gVGhlIHRlbXBsYXRlIGFyZ3VtZW50cyBkb24ndCBtYXR0ZXIg
YmVjYXVzZSB0aGUgZmlyc3Qgb25lIGlzIGZhbHNlLgotICAgIHJldHVybiBzcGVjaWFsaXplZFN3
ZWVwPGZhbHNlLCBJc0VtcHR5LCBTd2VlcE9ubHksIEJsb2NrSGFzTm9EZXN0cnVjdG9ycywgRG9u
dFNjcmliYmxlLCBIYXNOZXdseUFsbG9jYXRlZCwgTWFya3NTdGFsZT4oZW1wdHlNb2RlLCBzd2Vl
cE1vZGUsIEJsb2NrSGFzTm9EZXN0cnVjdG9ycywgc2NyaWJibGVNb2RlLCBuZXdseUFsbG9jYXRl
ZE1vZGUsIG1hcmtzTW9kZSwgW10gKFZNJiwgSlNDZWxsKikgeyB9KTsKKyAgICBzcGVjaWFsaXpl
ZFN3ZWVwPGZhbHNlLCBJc0VtcHR5LCBTd2VlcE9ubHksIEJsb2NrSGFzTm9EZXN0cnVjdG9ycywg
RG9udFNjcmliYmxlLCBIYXNOZXdseUFsbG9jYXRlZCwgTWFya3NTdGFsZT4oZnJlZUxpc3QsIGVt
cHR5TW9kZSwgc3dlZXBNb2RlLCBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMsIHNjcmliYmxlTW9kZSwg
bmV3bHlBbGxvY2F0ZWRNb2RlLCBtYXJrc01vZGUsIFtdIChWTSYsIEpTQ2VsbCopIHsgfSk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2VkQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRCbG9jay5oCShyZXZpc2lvbiAyMTc2NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrZWRCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw3ICsyMyw2IEBACiAKICNp
bmNsdWRlICJBbGxvY2F0b3JBdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAiRGVzdHJ1Y3Rpb25Nb2Rl
LmgiCi0jaW5jbHVkZSAiRnJlZUxpc3QuaCIKICNpbmNsdWRlICJIZWFwQ2VsbC5oIgogI2luY2x1
ZGUgIkl0ZXJhdGlvblN0YXR1cy5oIgogI2luY2x1ZGUgIldlYWtTZXQuaCIKQEAgLTM2LDYgKzM1
LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAgICAgCitjbGFzcyBGcmVlTGlzdDsKIGNsYXNzIEhl
YXA7CiBjbGFzcyBKU0NlbGw7CiBjbGFzcyBNYXJrZWRBbGxvY2F0b3I7CkBAIC0xMTcsMjEgKzEx
NywyMiBAQCBwdWJsaWM6CiAgICAgICAgIFZNKiB2bSgpIGNvbnN0OwogICAgICAgICBXZWFrU2V0
JiB3ZWFrU2V0KCk7CiAgICAgICAgICAgICAKKyAgICAgICAgZW51bSBTd2VlcE1vZGUgeyBTd2Vl
cE9ubHksIFN3ZWVwVG9GcmVlTGlzdCB9OworCiAgICAgICAgIC8vIFN3ZWVwaW5nIGVuc3VyZXMg
dGhhdCBkZXN0cnVjdG9ycyBnZXQgY2FsbGVkIGFuZCByZW1vdmVzIHRoZSBibG9jayBmcm9tIHRo
ZSB1bnN3ZXB0CiAgICAgICAgIC8vIHNldC4gU3dlZXBpbmcgdG8gZnJlZSBsaXN0IGFsc28gcmVt
b3ZlcyB0aGUgYmxvY2sgZnJvbSB0aGUgZW1wdHkgc2V0LCBpZiBpdCB3YXMgaW4gdGhhdAogICAg
ICAgICAvLyBzZXQuIFN3ZWVwaW5nIHdpdGggU3dlZXBPbmx5IG1heSBhZGQgdGhpcyBibG9jayB0
byB0aGUgZW1wdHkgc2V0LCBpZiB0aGUgYmxvY2sgaXMgZm91bmQKLSAgICAgICAgLy8gdG8gYmUg
ZW1wdHkuCisgICAgICAgIC8vIHRvIGJlIGVtcHR5LiBUaGUgZnJlZS1saXN0IGJlaW5nIG51bGwg
aW1wbGllcyBTd2VlcE9ubHkuCiAgICAgICAgIC8vCiAgICAgICAgIC8vIE5vdGUgdGhhdCB5b3Ug
bmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgZW1wdHkgYml0IHJlZmxlY3RzIHJlYWxpdHkuIElm
IGl0J3Mgbm90IHNldAogICAgICAgICAvLyBhbmQgdGhlIGJsb2NrIGlzIGZyZXNobHkgY3JlYXRl
ZCwgdGhlbiB3ZSdsbCBtYWtlIHRoZSBtaXN0YWtlIG9mIHJ1bm5pbmcgZGVzdHJ1Y3RvcnMgaW4K
ICAgICAgICAgLy8gdGhlIGJsb2NrLiBJZiBpdCdzIG5vdCBzZXQgYW5kIHRoZSBibG9jayBoYXMg
bm90aGluZyBtYXJrZWQsIHRoZW4gd2UnbGwgbWFrZSB0aGUKICAgICAgICAgLy8gbWlzdGFrZSBv
ZiBtYWtpbmcgYSBwb3AgZnJlZWxpc3QgcmF0aGVyIHRoYW4gYSBidW1wIGZyZWVsaXN0LgotICAg
ICAgICBlbnVtIFN3ZWVwTW9kZSB7IFN3ZWVwT25seSwgU3dlZXBUb0ZyZWVMaXN0IH07Ci0gICAg
ICAgIEZyZWVMaXN0IHN3ZWVwKFN3ZWVwTW9kZSA9IFN3ZWVwT25seSk7CisgICAgICAgIHZvaWQg
c3dlZXAoRnJlZUxpc3QqKTsKICAgICAgICAgCiAgICAgICAgIC8vIFRoaXMgaXMgdG8gYmUgY2Fs
bGVkIGJ5IFN1YnNwYWNlLgogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBEZXN0cm95RnVuYz4K
LSAgICAgICAgRnJlZUxpc3QgZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2UoU3dlZXBNb2RlLCBj
b25zdCBEZXN0cm95RnVuYyYpOworICAgICAgICB2b2lkIGZpbmlzaFN3ZWVwS25vd2luZ1N1YnNw
YWNlKEZyZWVMaXN0KiwgY29uc3QgRGVzdHJveUZ1bmMmKTsKICAgICAgICAgCiAgICAgICAgIHZv
aWQgdW5zd2VlcFdpdGhOb05ld2x5QWxsb2NhdGVkKCk7CiAgICAgICAgIApAQCAtMjE1LDEwICsy
MTYsNyBAQCBwdWJsaWM6CiAgICAgICAgIE1hcmtzTW9kZSBtYXJrc01vZGUoKTsKICAgICAgICAg
CiAgICAgICAgIHRlbXBsYXRlPGJvb2wsIEVtcHR5TW9kZSwgU3dlZXBNb2RlLCBTd2VlcERlc3Ry
dWN0aW9uTW9kZSwgU2NyaWJibGVNb2RlLCBOZXdseUFsbG9jYXRlZE1vZGUsIE1hcmtzTW9kZSwg
dHlwZW5hbWUgRGVzdHJveUZ1bmM+Ci0gICAgICAgIEZyZWVMaXN0IHNwZWNpYWxpemVkU3dlZXAo
RW1wdHlNb2RlLCBTd2VlcE1vZGUsIFN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlLCBTY3JpYmJsZU1vZGUs
IE5ld2x5QWxsb2NhdGVkTW9kZSwgTWFya3NNb2RlLCBjb25zdCBEZXN0cm95RnVuYyYpOwotICAg
ICAgICAKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLSAgICAgICAgdm9pZCBmb3JF
YWNoRnJlZUNlbGwoY29uc3QgRnJlZUxpc3QmLCBjb25zdCBGdW5jJik7CisgICAgICAgIHZvaWQg
c3BlY2lhbGl6ZWRTd2VlcChGcmVlTGlzdCosIEVtcHR5TW9kZSwgU3dlZXBNb2RlLCBTd2VlcERl
c3RydWN0aW9uTW9kZSwgU2NyaWJibGVNb2RlLCBOZXdseUFsbG9jYXRlZE1vZGUsIE1hcmtzTW9k
ZSwgY29uc3QgRGVzdHJveUZ1bmMmKTsKICAgICAgICAgCiAgICAgICAgIHZvaWQgc2V0SXNGcmVl
TGlzdGVkKCk7CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2VkQmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkQmxvY2tJbmxpbmVzLmgJKHJldmlzaW9uIDIxNzY0NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDUsNyArMTQ1LDcgQEAgaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6OkhhbmRsZTo6aXNGcmVlTAog
Ly8gT25seSB0aGUgRG9lc05vdE5lZWREZXN0cnVjdGlvbiBvbmUgc2hvdWxkIGJlIHNwZWNpYWxp
emVkIGJ5IE1hcmtlZEJsb2NrLgogCiB0ZW1wbGF0ZTxib29sIHNwZWNpYWxpemUsIE1hcmtlZEJs
b2NrOjpIYW5kbGU6OkVtcHR5TW9kZSBzcGVjaWFsaXplZEVtcHR5TW9kZSwgTWFya2VkQmxvY2s6
OkhhbmRsZTo6U3dlZXBNb2RlIHNwZWNpYWxpemVkU3dlZXBNb2RlLCBNYXJrZWRCbG9jazo6SGFu
ZGxlOjpTd2VlcERlc3RydWN0aW9uTW9kZSBzcGVjaWFsaXplZERlc3RydWN0aW9uTW9kZSwgTWFy
a2VkQmxvY2s6OkhhbmRsZTo6U2NyaWJibGVNb2RlIHNwZWNpYWxpemVkU2NyaWJibGVNb2RlLCBN
YXJrZWRCbG9jazo6SGFuZGxlOjpOZXdseUFsbG9jYXRlZE1vZGUgc3BlY2lhbGl6ZWROZXdseUFs
bG9jYXRlZE1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6Ok1hcmtzTW9kZSBzcGVjaWFsaXplZE1h
cmtzTW9kZSwgdHlwZW5hbWUgRGVzdHJveUZ1bmM+Ci1GcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFu
ZGxlOjpzcGVjaWFsaXplZFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGU6OkVtcHR5TW9kZSBlbXB0
eU1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwTW9kZSBzd2VlcE1vZGUsIE1hcmtlZEJs
b2NrOjpIYW5kbGU6OlN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0aW9uTW9kZSwgTWFya2Vk
QmxvY2s6OkhhbmRsZTo6U2NyaWJibGVNb2RlIHNjcmliYmxlTW9kZSwgTWFya2VkQmxvY2s6Okhh
bmRsZTo6TmV3bHlBbGxvY2F0ZWRNb2RlIG5ld2x5QWxsb2NhdGVkTW9kZSwgTWFya2VkQmxvY2s6
OkhhbmRsZTo6TWFya3NNb2RlIG1hcmtzTW9kZSwgY29uc3QgRGVzdHJveUZ1bmMmIGRlc3Ryb3lG
dW5jKQordm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzcGVjaWFsaXplZFN3ZWVwKEZyZWVMaXN0
KiBmcmVlTGlzdCwgTWFya2VkQmxvY2s6OkhhbmRsZTo6RW1wdHlNb2RlIGVtcHR5TW9kZSwgTWFy
a2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBNb2RlIHN3ZWVwTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRs
ZTo6U3dlZXBEZXN0cnVjdGlvbk1vZGUgZGVzdHJ1Y3Rpb25Nb2RlLCBNYXJrZWRCbG9jazo6SGFu
ZGxlOjpTY3JpYmJsZU1vZGUgc2NyaWJibGVNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpOZXds
eUFsbG9jYXRlZE1vZGUgbmV3bHlBbGxvY2F0ZWRNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpN
YXJrc01vZGUgbWFya3NNb2RlLCBjb25zdCBEZXN0cm95RnVuYyYgZGVzdHJveUZ1bmMpCiB7CiAg
ICAgaWYgKHNwZWNpYWxpemUpIHsKICAgICAgICAgZW1wdHlNb2RlID0gc3BlY2lhbGl6ZWRFbXB0
eU1vZGU7CkBAIC0xOTMsMTcgKzE5MywxOCBAQCBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxl
OjpzcGVjaWFsaXplCiAgICAgICAgICAgICBtX2FsbG9jYXRvci0+c2V0SXNFbXB0eShOb0xvY2tp
bmdOZWNlc3NhcnksIHRoaXMsIHRydWUpOwogICAgICAgICBpZiAoc3BhY2UoKS0+aXNNYXJraW5n
KCkpCiAgICAgICAgICAgICBibG9jay5tX2xvY2sudW5sb2NrKCk7Ci0gICAgICAgIEZyZWVMaXN0
IHJlc3VsdCA9IEZyZWVMaXN0OjpidW1wKHBheWxvYWRFbmQsIHBheWxvYWRFbmQgLSBwYXlsb2Fk
QmVnaW4pOworICAgICAgICBpZiAoc3dlZXBNb2RlID09IFN3ZWVwVG9GcmVlTGlzdCkKKyAgICAg
ICAgICAgIGZyZWVMaXN0LT5pbml0aWFsaXplQnVtcChwYXlsb2FkRW5kLCBwYXlsb2FkRW5kIC0g
cGF5bG9hZEJlZ2luKTsKICAgICAgICAgaWYgKGZhbHNlKQotICAgICAgICAgICAgZGF0YUxvZygi
UXVpY2tseSBzd2VwdCBibG9jayAiLCBSYXdQb2ludGVyKHRoaXMpLCAiIHdpdGggY2VsbCBzaXpl
ICIsIGNlbGxTaXplKCksICIgYW5kIGF0dHJpYnV0ZXMgIiwgbV9hdHRyaWJ1dGVzLCAiOiAiLCBy
ZXN1bHQsICJcbiIpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgZGF0YUxv
ZygiUXVpY2tseSBzd2VwdCBibG9jayAiLCBSYXdQb2ludGVyKHRoaXMpLCAiIHdpdGggY2VsbCBz
aXplICIsIGNlbGxTaXplKCksICIgYW5kIGF0dHJpYnV0ZXMgIiwgbV9hdHRyaWJ1dGVzLCAiOiAi
LCBwb2ludGVyRHVtcChmcmVlTGlzdCksICJcbiIpOworICAgICAgICByZXR1cm47CiAgICAgfQog
CiAgICAgLy8gVGhpcyBwcm9kdWNlcyBhIGZyZWUgbGlzdCB0aGF0IGlzIG9yZGVyZWQgaW4gcmV2
ZXJzZSB0aHJvdWdoIHRoZSBibG9jay4KICAgICAvLyBUaGlzIGlzIGZpbmUsIHNpbmNlIHRoZSBh
bGxvY2F0aW9uIGNvZGUgbWFrZXMgbm8gYXNzdW1wdGlvbnMgYWJvdXQgdGhlCiAgICAgLy8gb3Jk
ZXIgb2YgdGhlIGZyZWUgbGlzdC4KLSAgICBGcmVlQ2VsbCogaGVhZCA9IDA7Ci0gICAgc2l6ZV90
IGNvdW50ID0gMDsKKyAgICBpZiAoc3dlZXBNb2RlID09IFN3ZWVwVG9GcmVlTGlzdCkKKyAgICAg
ICAgZnJlZUxpc3QtPmluaXRpYWxpemVMaXN0KCZibG9jayk7CiAgICAgYm9vbCBpc0VtcHR5ID0g
dHJ1ZTsKICAgICBWZWN0b3I8c2l6ZV90PiBkZWFkQ2VsbHM7CiAgICAgVk0mIHZtID0gKnRoaXMt
PnZtKCk7CkBAIC0yMTksMTIgKzIyMCw5IEBAIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6
OnNwZWNpYWxpemUKICAgICAgICAgfQogCiAgICAgICAgIGlmIChzd2VlcE1vZGUgPT0gU3dlZXBU
b0ZyZWVMaXN0KSB7Ci0gICAgICAgICAgICBGcmVlQ2VsbCogZnJlZUNlbGwgPSByZWludGVycHJl
dF9jYXN0X3B0cjxGcmVlQ2VsbCo+KGNlbGwpOwogICAgICAgICAgICAgaWYgKHNjcmliYmxlTW9k
ZSA9PSBTY3JpYmJsZSkKLSAgICAgICAgICAgICAgICBzY3JpYmJsZShmcmVlQ2VsbCwgY2VsbFNp
emUoKSk7Ci0gICAgICAgICAgICBmcmVlQ2VsbC0+bmV4dCA9IGhlYWQ7Ci0gICAgICAgICAgICBo
ZWFkID0gZnJlZUNlbGw7Ci0gICAgICAgICAgICArK2NvdW50OworICAgICAgICAgICAgICAgIHNj
cmliYmxlKGNlbGwsIGNlbGxTaXplKCkpOworICAgICAgICAgICAgZnJlZUxpc3QtPmFkZEZyZWVD
ZWxsKGNlbGwpOwogICAgICAgICB9CiAgICAgfTsKICAgICBmb3IgKHNpemVfdCBpID0gZmlyc3RB
dG9tKCk7IGkgPCBtX2VuZEF0b207IGkgKz0gbV9hdG9tc1BlckNlbGwpIHsKQEAgLTI1NCwyNiAr
MjUyLDI0IEBAIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxpemUKICAgICAg
ICAgICAgIGhhbmRsZURlYWRDZWxsKGkpOwogICAgIH0KIAotICAgIEZyZWVMaXN0IHJlc3VsdCA9
IEZyZWVMaXN0OjpsaXN0KGhlYWQsIGNvdW50ICogY2VsbFNpemUoKSk7CiAgICAgaWYgKHN3ZWVw
TW9kZSA9PSBTd2VlcFRvRnJlZUxpc3QpCiAgICAgICAgIHNldElzRnJlZUxpc3RlZCgpOwogICAg
IGVsc2UgaWYgKGlzRW1wdHkpCiAgICAgICAgIG1fYWxsb2NhdG9yLT5zZXRJc0VtcHR5KE5vTG9j
a2luZ05lY2Vzc2FyeSwgdGhpcywgdHJ1ZSk7CiAgICAgaWYgKGZhbHNlKQotICAgICAgICBkYXRh
TG9nKCJTbG93bHkgc3dlcHQgYmxvY2sgIiwgUmF3UG9pbnRlcigmYmxvY2spLCAiIHdpdGggY2Vs
bCBzaXplICIsIGNlbGxTaXplKCksICIgYW5kIGF0dHJpYnV0ZXMgIiwgbV9hdHRyaWJ1dGVzLCAi
OiAiLCByZXN1bHQsICJcbiIpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIGRhdGFMb2co
IlNsb3dseSBzd2VwdCBibG9jayAiLCBSYXdQb2ludGVyKCZibG9jayksICIgd2l0aCBjZWxsIHNp
emUgIiwgY2VsbFNpemUoKSwgIiBhbmQgYXR0cmlidXRlcyAiLCBtX2F0dHJpYnV0ZXMsICI6ICIs
IHBvaW50ZXJEdW1wKGZyZWVMaXN0KSwgIlxuIik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIERl
c3Ryb3lGdW5jPgotRnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6ZmluaXNoU3dlZXBLbm93
aW5nU3Vic3BhY2UoU3dlZXBNb2RlIHN3ZWVwTW9kZSwgY29uc3QgRGVzdHJveUZ1bmMmIGRlc3Ry
b3lGdW5jKQordm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpmaW5pc2hTd2VlcEtub3dpbmdTdWJz
cGFjZShGcmVlTGlzdCogZnJlZUxpc3QsIGNvbnN0IERlc3Ryb3lGdW5jJiBkZXN0cm95RnVuYykK
IHsKKyAgICBTd2VlcE1vZGUgc3dlZXBNb2RlID0gZnJlZUxpc3QgPyBTd2VlcFRvRnJlZUxpc3Qg
OiBTd2VlcE9ubHk7CiAgICAgU3dlZXBEZXN0cnVjdGlvbk1vZGUgZGVzdHJ1Y3Rpb25Nb2RlID0g
dGhpcy0+c3dlZXBEZXN0cnVjdGlvbk1vZGUoKTsKICAgICBFbXB0eU1vZGUgZW1wdHlNb2RlID0g
dGhpcy0+ZW1wdHlNb2RlKCk7CiAgICAgU2NyaWJibGVNb2RlIHNjcmliYmxlTW9kZSA9IHRoaXMt
PnNjcmliYmxlTW9kZSgpOwogICAgIE5ld2x5QWxsb2NhdGVkTW9kZSBuZXdseUFsbG9jYXRlZE1v
ZGUgPSB0aGlzLT5uZXdseUFsbG9jYXRlZE1vZGUoKTsKICAgICBNYXJrc01vZGUgbWFya3NNb2Rl
ID0gdGhpcy0+bWFya3NNb2RlKCk7CiAKLSAgICBGcmVlTGlzdCByZXN1bHQ7CiAgICAgYXV0byB0
cnlTcGVjaWFsaXplZCA9IFsmXSAoKSAtPiBib29sIHsKICAgICAgICAgaWYgKHN3ZWVwTW9kZSAh
PSBTd2VlcFRvRnJlZUxpc3QpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yODgsMTAg
KzI4NCwxMCBAQCBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpmaW5pc2hTd2VlCiAgICAg
ICAgIAogICAgICAgICBzd2l0Y2ggKG1hcmtzTW9kZSkgewogICAgICAgICBjYXNlIE1hcmtzTm90
U3RhbGU6Ci0gICAgICAgICAgICByZXN1bHQgPSBzcGVjaWFsaXplZFN3ZWVwPHRydWUsIE5vdEVt
cHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwg
RG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCwgTWFya3NOb3RTdGFsZT4oSXNFbXB0eSwgU3dlZXBU
b0ZyZWVMaXN0LCBCbG9ja0hhc0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUsIERvZXNOb3RIYXZl
TmV3bHlBbGxvY2F0ZWQsIE1hcmtzTm90U3RhbGUsIGRlc3Ryb3lGdW5jKTsKKyAgICAgICAgICAg
IHNwZWNpYWxpemVkU3dlZXA8dHJ1ZSwgTm90RW1wdHksIFN3ZWVwVG9GcmVlTGlzdCwgQmxvY2tI
YXNEZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBN
YXJrc05vdFN0YWxlPihmcmVlTGlzdCwgSXNFbXB0eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hh
c0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUsIERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1h
cmtzTm90U3RhbGUsIGRlc3Ryb3lGdW5jKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICBjYXNlIE1hcmtzU3RhbGU6Ci0gICAgICAgICAgICByZXN1bHQgPSBzcGVjaWFsaXplZFN3
ZWVwPHRydWUsIE5vdEVtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzRGVzdHJ1Y3RvcnMs
IERvbnRTY3JpYmJsZSwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCwgTWFya3NTdGFsZT4oSXNF
bXB0eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hhc0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUs
IERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzU3RhbGUsIGRlc3Ryb3lGdW5jKTsKKyAg
ICAgICAgICAgIHNwZWNpYWxpemVkU3dlZXA8dHJ1ZSwgTm90RW1wdHksIFN3ZWVwVG9GcmVlTGlz
dCwgQmxvY2tIYXNEZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxs
b2NhdGVkLCBNYXJrc1N0YWxlPihmcmVlTGlzdCwgSXNFbXB0eSwgU3dlZXBUb0ZyZWVMaXN0LCBC
bG9ja0hhc0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUsIERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0
ZWQsIE1hcmtzU3RhbGUsIGRlc3Ryb3lGdW5jKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICB9CiAgICAgICAgIApAQCAtMjk5LDEwICsyOTUsMTAgQEAgRnJlZUxpc3QgTWFya2Vk
QmxvY2s6OkhhbmRsZTo6ZmluaXNoU3dlZQogICAgIH07CiAgICAgCiAgICAgaWYgKHRyeVNwZWNp
YWxpemVkKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybjsKICAgICAK
ICAgICAvLyBUaGUgdGVtcGxhdGUgYXJndW1lbnRzIGRvbid0IG1hdHRlciBiZWNhdXNlIHRoZSBm
aXJzdCBvbmUgaXMgZmFsc2UuCi0gICAgcmV0dXJuIHNwZWNpYWxpemVkU3dlZXA8ZmFsc2UsIElz
RW1wdHksIFN3ZWVwT25seSwgQmxvY2tIYXNOb0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUsIEhh
c05ld2x5QWxsb2NhdGVkLCBNYXJrc1N0YWxlPihlbXB0eU1vZGUsIHN3ZWVwTW9kZSwgZGVzdHJ1
Y3Rpb25Nb2RlLCBzY3JpYmJsZU1vZGUsIG5ld2x5QWxsb2NhdGVkTW9kZSwgbWFya3NNb2RlLCBk
ZXN0cm95RnVuYyk7CisgICAgc3BlY2lhbGl6ZWRTd2VlcDxmYWxzZSwgSXNFbXB0eSwgU3dlZXBP
bmx5LCBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgSGFzTmV3bHlBbGxvY2F0
ZWQsIE1hcmtzU3RhbGU+KGZyZWVMaXN0LCBlbXB0eU1vZGUsIHN3ZWVwTW9kZSwgZGVzdHJ1Y3Rp
b25Nb2RlLCBzY3JpYmJsZU1vZGUsIG5ld2x5QWxsb2NhdGVkTW9kZSwgbWFya3NNb2RlLCBkZXN0
cm95RnVuYyk7CiB9CiAKIGlubGluZSBNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcERlc3RydWN0
aW9uTW9kZSBNYXJrZWRCbG9jazo6SGFuZGxlOjpzd2VlcERlc3RydWN0aW9uTW9kZSgpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuY3BwCShyZXZpc2lvbiAyMTc2NDYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTc3LDkgKzc3LDkgQEAgU3Vic3BhY2U6On5TdWJzcGFjZSgpCiB7CiB9CiAKLUZyZWVM
aXN0IFN1YnNwYWNlOjpmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiBibG9jaywgTWFy
a2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBNb2RlIHN3ZWVwTW9kZSkKK3ZvaWQgU3Vic3BhY2U6OmZp
bmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmIGJsb2NrLCBGcmVlTGlzdCogZnJlZUxpc3Qp
CiB7Ci0gICAgcmV0dXJuIGJsb2NrLmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlKHN3ZWVwTW9k
ZSwgRGVzdHJveUZ1bmMoKSk7CisgICAgYmxvY2suZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2Uo
ZnJlZUxpc3QsIERlc3Ryb3lGdW5jKCkpOwogfQogCiB2b2lkIFN1YnNwYWNlOjpkZXN0cm95KFZN
JiB2bSwgSlNDZWxsKiBjZWxsKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vi
c3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFj
ZS5oCShyZXZpc2lvbiAyMTc2NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJz
cGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIHB1YmxpYzoKICAgICAKICAg
ICAvLyBUaGUgcHVycG9zZSBvZiBvdmVycmlkaW5nIHRoaXMgaXMgdG8gc3BlY2lhbGl6ZSB0aGUg
c3dlZXAgZm9yIHlvdXIgZGVzdHJ1Y3RvcnMuIFRoaXMgd29uJ3QKICAgICAvLyBiZSBjYWxsZWQg
Zm9yIG5vLWRlc3RydWN0b3IgYmxvY2tzLiBUaGlzIG11c3QgY2FsbCBNYXJrZWRCbG9jazo6Zmlu
aXNoU3dlZXBLbm93aW5nU3Vic3BhY2UuCi0gICAgdmlydHVhbCBGcmVlTGlzdCBmaW5pc2hTd2Vl
cChNYXJrZWRCbG9jazo6SGFuZGxlJiwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBNb2RlKTsK
KyAgICB2aXJ0dWFsIHZvaWQgZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYsIEZyZWVM
aXN0Kik7CiAgICAgCiAgICAgLy8gVGhlc2UgZ2V0IGNhbGxlZCBmb3IgbGFyZ2Ugb2JqZWN0cy4K
ICAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveShWTSYsIEpTQ2VsbCopOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAyMTc2NDYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDU4LDcgKzE0NTgsNyBAQCBwdWJsaWM6CiAgICAgICAgIEp1bXAgcG9wUGF0aDsK
ICAgICAgICAgSnVtcCBkb25lOwogICAgICAgICAKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MoYWxs
b2NhdG9yR1BSLCBNYXJrZWRBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIE9CSkVDVF9P
RkZTRVRPRihGcmVlTGlzdCwgcmVtYWluaW5nKSksIHJlc3VsdEdQUik7CisgICAgICAgIGxvYWQz
MihBZGRyZXNzKGFsbG9jYXRvckdQUiwgTWFya2VkQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0
KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZSZW1haW5pbmcoKSksIHJlc3VsdEdQUik7CiAgICAgICAg
IHBvcFBhdGggPSBicmFuY2hUZXN0MzIoWmVybywgcmVzdWx0R1BSKTsKICAgICAgICAgaWYgKGFs
bG9jYXRvcikKICAgICAgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigtYWxsb2NhdG9yLT5jZWxs
U2l6ZSgpKSwgcmVzdWx0R1BSLCBzY3JhdGNoR1BSKTsKQEAgLTE0NzIsOCArMTQ3Miw4IEBAIHB1
YmxpYzoKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBuZWdQdHIocmVzdWx0R1BS
KTsKLSAgICAgICAgc3RvcmUzMihzY3JhdGNoR1BSLCBBZGRyZXNzKGFsbG9jYXRvckdQUiwgTWFy
a2VkQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRnJlZUxp
c3QsIHJlbWFpbmluZykpKTsKLSAgICAgICAgQWRkcmVzcyBwYXlsb2FkRW5kQWRkciA9IEFkZHJl
c3MoYWxsb2NhdG9yR1BSLCBNYXJrZWRBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIE9C
SkVDVF9PRkZTRVRPRihGcmVlTGlzdCwgcGF5bG9hZEVuZCkpOworICAgICAgICBzdG9yZTMyKHNj
cmF0Y2hHUFIsIEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBNYXJrZWRBbGxvY2F0b3I6Om9mZnNldE9m
RnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZlJlbWFpbmluZygpKSk7CisgICAgICAgIEFk
ZHJlc3MgcGF5bG9hZEVuZEFkZHIgPSBBZGRyZXNzKGFsbG9jYXRvckdQUiwgTWFya2VkQWxsb2Nh
dG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZQYXlsb2FkRW5kKCkp
OwogICAgICAgICBpZiAoaXNYODYoKSkKICAgICAgICAgICAgIGFkZFB0cihwYXlsb2FkRW5kQWRk
ciwgcmVzdWx0R1BSKTsKICAgICAgICAgZWxzZSB7CkBAIC0xNDg1LDEzICsxNDg1LDIyIEBAIHB1
YmxpYzoKICAgICAgICAgCiAgICAgICAgIHBvcFBhdGgubGluayh0aGlzKTsKICAgICAgICAgCi0g
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhhbGxvY2F0b3JHUFIsIE1hcmtlZEFsbG9jYXRvcjo6b2Zm
c2V0T2ZGcmVlTGlzdCgpICsgT0JKRUNUX09GRlNFVE9GKEZyZWVMaXN0LCBoZWFkKSksIHJlc3Vs
dEdQUik7Ci0gICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hUZXN0UHRyKFplcm8sIHJlc3Vs
dEdQUikpOwotICAgICAgICAKLSAgICAgICAgLy8gVGhlIG9iamVjdCBpcyBoYWxmLWFsbG9jYXRl
ZDogd2UgaGF2ZSB3aGF0IHdlIGtub3cgaXMgYSBmcmVzaCBvYmplY3QsIGJ1dAotICAgICAgICAv
LyBpdCdzIHN0aWxsIG9uIHRoZSBHQydzIGZyZWUgbGlzdC4KLSAgICAgICAgbG9hZFB0cihBZGRy
ZXNzKHJlc3VsdEdQUiksIHNjcmF0Y2hHUFIpOwotICAgICAgICBzdG9yZVB0cihzY3JhdGNoR1BS
LCBBZGRyZXNzKGFsbG9jYXRvckdQUiwgTWFya2VkQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0
KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRnJlZUxpc3QsIGhlYWQpKSk7CisgICAgICAgIGlmIChhbGxv
Y2F0b3IpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYWxsb2NhdG9yLT5mcmVlTGlz
dCgpLmFkZHJlc3NPZkxpc3QoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBsb2FkUHRyKEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBNYXJrZWRBbGxvY2F0b3I6Om9mZnNl
dE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZkxpc3QoKSksIHNjcmF0Y2hHUFIpOwor
CisgICAgICAgIGxvYWQzMihBZGRyZXNzKGFsbG9jYXRvckdQUiwgTWFya2VkQWxsb2NhdG9yOjpv
ZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZJbmRleCgpKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaFRlc3QzMihaZXJvLCByZXN1bHRHUFIp
KTsKKyAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOworICAgICAgICBz
dG9yZTMyKHJlc3VsdEdQUiwgQWRkcmVzcyhhbGxvY2F0b3JHUFIsIE1hcmtlZEFsbG9jYXRvcjo6
b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mSW5kZXgoKSkpOworICAgICAg
ICBsb2FkMTYoQmFzZUluZGV4KHNjcmF0Y2hHUFIsIHJlc3VsdEdQUiwgVGltZXNUd28pLCByZXN1
bHRHUFIpOworICAgICAgICBpZiAoaXNYODYoKSkKKyAgICAgICAgICAgIGFkZFB0cihBZGRyZXNz
KGFsbG9jYXRvckdQUiwgTWFya2VkQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVl
TGlzdDo6b2Zmc2V0T2ZCbG9jaygpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBNYXJrZWRBbGxvY2F0b3I6Om9m
ZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZkJsb2NrKCkpLCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgICAgIGFkZFB0cihzY3JhdGNoR1BSLCByZXN1bHRHUFIpOworICAgICAgICB9
CiAgICAgICAgIAogICAgICAgICBkb25lLmxpbmsodGhpcyk7CiAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVjdGli
bGVPYmplY3RTdWJzcGFjZS5jcHAJKHJldmlzaW9uIDIxNzY0NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01Miw5ICs1Miw5IEBAIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2U6On5K
U0Rlc3RydWMKIHsKIH0KIAotRnJlZUxpc3QgSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZTo6
ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYgaGFuZGxlLCBNYXJrZWRCbG9jazo6SGFu
ZGxlOjpTd2VlcE1vZGUgc3dlZXBNb2RlKQordm9pZCBKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNw
YWNlOjpmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiBoYW5kbGUsIEZyZWVMaXN0KiBm
cmVlTGlzdCkKIHsKLSAgICByZXR1cm4gaGFuZGxlLmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNl
KHN3ZWVwTW9kZSwgRGVzdHJveUZ1bmMoKSk7CisgICAgaGFuZGxlLmZpbmlzaFN3ZWVwS25vd2lu
Z1N1YnNwYWNlKGZyZWVMaXN0LCBEZXN0cm95RnVuYygpKTsKIH0KIAogdm9pZCBKU0Rlc3RydWN0
aWJsZU9iamVjdFN1YnNwYWNlOjpkZXN0cm95KFZNJiB2bSwgSlNDZWxsKiBjZWxsKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFj
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGVzdHJ1
Y3RpYmxlT2JqZWN0U3Vic3BhY2UuaAkocmV2aXNpb24gMjE3NjQ2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSBK
U0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVhcCYpOwogICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgfkpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UoKTsK
ICAgICAKLSAgICBGcmVlTGlzdCBmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiwgTWFy
a2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBNb2RlKSBvdmVycmlkZTsKKyAgICB2b2lkIGZpbmlzaFN3
ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmLCBGcmVlTGlzdCopIG92ZXJyaWRlOwogICAgIHZvaWQg
ZGVzdHJveShWTSYsIEpTQ2VsbCopIG92ZXJyaWRlOwogfTsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZh
cmlhYmxlT2JqZWN0U3Vic3BhY2UuY3BwCShyZXZpc2lvbiAyMTc2NDYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01Miw5ICs1Miw5IEBAIEpTU2VnbWVudGVkVmFyaWFibGVPYmpl
Y3RTdWJzcGFjZTo6fkpTU2UKIHsKIH0KIAotRnJlZUxpc3QgSlNTZWdtZW50ZWRWYXJpYWJsZU9i
amVjdFN1YnNwYWNlOjpmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiBoYW5kbGUsIE1h
cmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwTW9kZSBzd2VlcE1vZGUpCit2b2lkIEpTU2VnbWVudGVk
VmFyaWFibGVPYmplY3RTdWJzcGFjZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYg
aGFuZGxlLCBGcmVlTGlzdCogZnJlZUxpc3QpCiB7Ci0gICAgcmV0dXJuIGhhbmRsZS5maW5pc2hT
d2VlcEtub3dpbmdTdWJzcGFjZShzd2VlcE1vZGUsIERlc3Ryb3lGdW5jKCkpOworICAgIGhhbmRs
ZS5maW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZShmcmVlTGlzdCwgRGVzdHJveUZ1bmMoKSk7CiB9
CiAKIHZvaWQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlOjpkZXN0cm95KFZNJiB2
bSwgSlNDZWxsKiBjZWxsKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
ZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlLmgJ
KHJldmlzaW9uIDIxNzY0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2Vn
bWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICsz
NCw3IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSBKU1NlZ21lbnRlZFZhcmlhYmxl
T2JqZWN0U3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJik7CiAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgdmlydHVhbCB+SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlKCk7CiAgICAgCi0g
ICAgRnJlZUxpc3QgZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYsIE1hcmtlZEJsb2Nr
OjpIYW5kbGU6OlN3ZWVwTW9kZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBmaW5pc2hTd2VlcChNYXJr
ZWRCbG9jazo6SGFuZGxlJiwgRnJlZUxpc3QqKSBvdmVycmlkZTsKICAgICB2b2lkIGRlc3Ryb3ko
Vk0mLCBKU0NlbGwqKSBvdmVycmlkZTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU3RyaW5nU3Vic3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nU3Vic3BhY2UuY3BwCShyZXZpc2lvbiAyMTc2NDYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ1N1YnNwYWNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTIsOSArNTIsOSBAQCBKU1N0cmluZ1N1YnNwYWNlOjp+SlNTdHJp
bmdTdWJzcGFjZSgpCiB7CiB9CiAKLUZyZWVMaXN0IEpTU3RyaW5nU3Vic3BhY2U6OmZpbmlzaFN3
ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmIGhhbmRsZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U3dl
ZXBNb2RlIHN3ZWVwTW9kZSkKK3ZvaWQgSlNTdHJpbmdTdWJzcGFjZTo6ZmluaXNoU3dlZXAoTWFy
a2VkQmxvY2s6OkhhbmRsZSYgaGFuZGxlLCBGcmVlTGlzdCogZnJlZUxpc3QpCiB7Ci0gICAgcmV0
dXJuIGhhbmRsZS5maW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZShzd2VlcE1vZGUsIERlc3Ryb3lG
dW5jKCkpOworICAgIGhhbmRsZS5maW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZShmcmVlTGlzdCwg
RGVzdHJveUZ1bmMoKSk7CiB9CiAKIHZvaWQgSlNTdHJpbmdTdWJzcGFjZTo6ZGVzdHJveShWTSYg
dm0sIEpTQ2VsbCogY2VsbCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U3RyaW5nU3Vic3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1N0cmluZ1N1YnNwYWNlLmgJKHJldmlzaW9uIDIxNzY0NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nU3Vic3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAt
MzQsNyArMzQsNyBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNTdHJpbmdTdWJz
cGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB2aXJ0dWFs
IH5KU1N0cmluZ1N1YnNwYWNlKCk7CiAgICAgCi0gICAgRnJlZUxpc3QgZmluaXNoU3dlZXAoTWFy
a2VkQmxvY2s6OkhhbmRsZSYsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwTW9kZSkgb3ZlcnJp
ZGU7CisgICAgdm9pZCBmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiwgRnJlZUxpc3Qq
KSBvdmVycmlkZTsKICAgICB2b2lkIGRlc3Ryb3koVk0mLCBKU0NlbGwqKSBvdmVycmlkZTsKIH07
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2Rl
QmxvY2tTdWJzcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmNwcAkocmV2aXNpb24gMjE3NjQ2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9j
a1N1YnNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsOSArNTYsOSBAQCBKU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrU3Vic3BhY2U6On5KU1dlYkFzCiB7CiB9CiAKLUZyZWVMaXN0IEpTV2ViQXNz
ZW1ibHlDb2RlQmxvY2tTdWJzcGFjZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYg
aGFuZGxlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcE1vZGUgc3dlZXBNb2RlKQordm9pZCBK
U1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2U6OmZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpI
YW5kbGUmIGhhbmRsZSwgRnJlZUxpc3QqIGZyZWVMaXN0KQogewotICAgIHJldHVybiBoYW5kbGUu
ZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2Uoc3dlZXBNb2RlLCBEZXN0cm95RnVuYygpKTsKKyAg
ICBoYW5kbGUuZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2UoZnJlZUxpc3QsIERlc3Ryb3lGdW5j
KCkpOwogfQogCiB2b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZTo6ZGVzdHJveShW
TSYgdm0sIEpTQ2VsbCogY2VsbCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5oCShy
ZXZpc2lvbiAyMTc2NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBA
QCBwdWJsaWM6CiAgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlKENTdHJpbmcgbmFt
ZSwgSGVhcCYpOwogICAgIHZpcnR1YWwgfkpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZSgp
OwogICAgIAotICAgIEZyZWVMaXN0IGZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmLCBN
YXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcE1vZGUpIG92ZXJyaWRlOworICAgIHZvaWQgZmluaXNo
U3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYsIEZyZWVMaXN0Kikgb3ZlcnJpZGU7CiAgICAgdm9p
ZCBkZXN0cm95KFZNJiwgSlNDZWxsKikgb3ZlcnJpZGU7CiB9OwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>311711</attachid>
            <date>2017-06-01 09:53:46 -0700</date>
            <delta_ts>2017-06-01 10:32:46 -0700</delta_ts>
            <desc>it grows</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>45261</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0ZyZWVMaXN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9GcmVlTGlzdC5jcHAJKHJldmlzaW9uIDIx
NzY0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0ZyZWVMaXN0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYsMjkgKzI2LDY0IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiRnJlZUxpc3QuaCIKIAorI2luY2x1ZGUgIk1hcmtlZEJsb2NrLmgiCisjaW5jbHVkZSA8d3Rm
L0NvbW1hUHJpbnRlci5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAotYm9vbCBGcmVlTGlzdDo6Y29u
dGFpbnMoY29uc3Qgdm9pZCogdGFyZ2V0KSBjb25zdAorRnJlZUxpc3Q6OkZyZWVMaXN0KHVuc2ln
bmVkIGNlbGxTaXplKQorICAgIDogbV9jZWxsU2l6ZShjZWxsU2l6ZSkKK3sKKyAgICBzdGF0aWNf
YXNzZXJ0KE1hcmtlZEJsb2NrOjpibG9ja1NpemUgPD0gKDF1IDw8IChzaXplb2YoRnJlZU9mZnNl
dCkgKiA4KSksICJGcmVlTGlzdCBhc3N1bWVzIHRoYXQgRnJlZU9mZnNldCBpcyBiaWcgZW5vdWdo
IHRvIGV4cHJlc3MgYWxsIHBvc3NpYmxlIGJsb2NrIG9mZnNldHMiKTsKKyAgICAKKyAgICBtX2xp
c3RTaXplID0gTWFya2VkQmxvY2s6OmJsb2NrU2l6ZSAvIGNlbGxTaXplOworICAgIG1fbGlzdCA9
IHN0ZDo6bWFrZV91bmlxdWU8RnJlZU9mZnNldFtdPihtX2xpc3RTaXplKTsKK30KKworRnJlZUxp
c3Q6On5GcmVlTGlzdCgpCit7Cit9CisKK3ZvaWQgRnJlZUxpc3Q6OmluaXRpYWxpemVMaXN0KE1h
cmtlZEJsb2NrKiBibG9jaykKIHsKLSAgICBpZiAocmVtYWluaW5nKSB7Ci0gICAgICAgIGNvbnN0
IHZvaWQqIHN0YXJ0ID0gKHBheWxvYWRFbmQgLSByZW1haW5pbmcpOwotICAgICAgICBjb25zdCB2
b2lkKiBlbmQgPSBwYXlsb2FkRW5kOworICAgIG1fYmxvY2sgPSBibG9jazsKKyAgICBtX2luZGV4
ID0gMDsKKyAgICBtX3BheWxvYWRFbmQgPSBudWxscHRyOworICAgIG1fcmVtYWluaW5nID0gMDsK
KyAgICBtX29yaWdpbmFsU2l6ZSA9IDA7Cit9CisKK3ZvaWQgRnJlZUxpc3Q6OmluaXRpYWxpemVC
dW1wKGNoYXIqIHBheWxvYWRFbmQsIHVuc2lnbmVkIHJlbWFpbmluZykKK3sKKyAgICBtX2Jsb2Nr
ID0gbnVsbHB0cjsKKyAgICBtX2luZGV4ID0gMDsKKyAgICBtX3BheWxvYWRFbmQgPSBwYXlsb2Fk
RW5kOworICAgIG1fcmVtYWluaW5nID0gcmVtYWluaW5nOworICAgIG1fb3JpZ2luYWxTaXplID0g
cmVtYWluaW5nOworfQorCitib29sIEZyZWVMaXN0Ojpjb250YWlucyhIZWFwQ2VsbCogdGFyZ2V0
KSBjb25zdAoreworICAgIGlmIChtX3JlbWFpbmluZykgeworICAgICAgICBjb25zdCB2b2lkKiBz
dGFydCA9IChtX3BheWxvYWRFbmQgLSBtX3JlbWFpbmluZyk7CisgICAgICAgIGNvbnN0IHZvaWQq
IGVuZCA9IG1fcGF5bG9hZEVuZDsKICAgICAgICAgcmV0dXJuIChzdGFydCA8PSB0YXJnZXQpICYm
ICh0YXJnZXQgPCBlbmQpOwogICAgIH0KIAotICAgIEZyZWVDZWxsKiBjYW5kaWRhdGUgPSBoZWFk
OwotICAgIHdoaWxlIChjYW5kaWRhdGUpIHsKLSAgICAgICAgaWYgKGNhbmRpZGF0ZSA9PSB0YXJn
ZXQpCisgICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleDsgaS0tOykgeworICAgICAgICBpZiAo
ZnJvbU9mZnNldChtX2xpc3RbaV0pID09IHRhcmdldCkKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICBjYW5kaWRhdGUgPSBjYW5kaWRhdGUtPm5leHQ7CiAgICAgfQotCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCiB2b2lkIEZyZWVMaXN0OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0CiB7Ci0gICAgb3V0LnByaW50KCJ7aGVhZCA9ICIsIFJhd1BvaW50ZXIoaGVhZCksICIsIHBh
eWxvYWRFbmQgPSAiLCBSYXdQb2ludGVyKHBheWxvYWRFbmQpLCAiLCByZW1haW5pbmcgPSAiLCBy
ZW1haW5pbmcsICIsIG9yaWdpbmFsU2l6ZSA9ICIsIG9yaWdpbmFsU2l6ZSwgIn0iKTsKKyAgICBv
dXQucHJpbnQoIntibG9jayA9ICIsIFJhd1BvaW50ZXIobV9ibG9jayksICIsIGxpc3QgPSBbIik7
CisgICAgQ29tbWFQcmludGVyIGNvbW1hOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
X2luZGV4OyArK2kpCisgICAgICAgIG91dC5wcmludChjb21tYSwgbV9saXN0W2ldKTsKKyAgICBv
dXQucHJpbnQoIl0sIGluZGV4ID0gIiwgbV9pbmRleCwgIiwgcGF5bG9hZEVuZCA9ICIsIFJhd1Bv
aW50ZXIobV9wYXlsb2FkRW5kKSwgIiwgcmVtYWluaW5nID0gIiwgbV9yZW1haW5pbmcsICIsIG9y
aWdpbmFsU2l6ZSA9ICIsIG1fb3JpZ2luYWxTaXplLCAifSIpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0ZyZWVMaXN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRnJlZUxpc3QuaAkocmV2aXNpb24g
MjE3NjQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRnJlZUxpc3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjUsNjggKzI1LDY2IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSA8
d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAKIG5hbWVz
cGFjZSBKU0MgewogCi1zdHJ1Y3QgRnJlZUNlbGwgewotICAgIEZyZWVDZWxsKiBuZXh0OwotfTsK
LSAgICAgICAgCi0vLyBUaGlzIHJlcHJlc2VudGF0aW9uIG9mIGEgRnJlZUxpc3QgaXMgY29udmVu
aWVudCBmb3IgdGhlIE1hcmtlZEFsbG9jYXRvci4KLQotc3RydWN0IEZyZWVMaXN0IHsKLSAgICBG
cmVlQ2VsbCogaGVhZCB7IG51bGxwdHIgfTsKLSAgICBjaGFyKiBwYXlsb2FkRW5kIHsgbnVsbHB0
ciB9OwotICAgIHVuc2lnbmVkIHJlbWFpbmluZyB7IDAgfTsKLSAgICB1bnNpZ25lZCBvcmlnaW5h
bFNpemUgeyAwIH07Ci0gICAgCi0gICAgRnJlZUxpc3QoKQotICAgIHsKLSAgICB9Ci0gICAgCi0g
ICAgc3RhdGljIEZyZWVMaXN0IGxpc3QoRnJlZUNlbGwqIGhlYWQsIHVuc2lnbmVkIGJ5dGVzKQot
ICAgIHsKLSAgICAgICAgRnJlZUxpc3QgcmVzdWx0OwotICAgICAgICByZXN1bHQuaGVhZCA9IGhl
YWQ7Ci0gICAgICAgIHJlc3VsdC5yZW1haW5pbmcgPSAwOwotICAgICAgICByZXN1bHQub3JpZ2lu
YWxTaXplID0gYnl0ZXM7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIAotICAg
IHN0YXRpYyBGcmVlTGlzdCBidW1wKGNoYXIqIHBheWxvYWRFbmQsIHVuc2lnbmVkIHJlbWFpbmlu
ZykKLSAgICB7Ci0gICAgICAgIEZyZWVMaXN0IHJlc3VsdDsKLSAgICAgICAgcmVzdWx0LnBheWxv
YWRFbmQgPSBwYXlsb2FkRW5kOwotICAgICAgICByZXN1bHQucmVtYWluaW5nID0gcmVtYWluaW5n
OwotICAgICAgICByZXN1bHQub3JpZ2luYWxTaXplID0gcmVtYWluaW5nOwotICAgICAgICByZXR1
cm4gcmVzdWx0OwotICAgIH0KLSAgICAKLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRnJlZUxp
c3QmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGhlYWQgPT0gb3RoZXIuaGVh
ZAotICAgICAgICAgICAgJiYgcGF5bG9hZEVuZCA9PSBvdGhlci5wYXlsb2FkRW5kCi0gICAgICAg
ICAgICAmJiByZW1haW5pbmcgPT0gb3RoZXIucmVtYWluaW5nCi0gICAgICAgICAgICAmJiBvcmln
aW5hbFNpemUgPT0gb3RoZXIub3JpZ2luYWxTaXplOwotICAgIH0KLSAgICAKLSAgICBib29sIG9w
ZXJhdG9yIT0oY29uc3QgRnJlZUxpc3QmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0
dXJuICEoKnRoaXMgPT0gb3RoZXIpOwotICAgIH0KLSAgICAKLSAgICBleHBsaWNpdCBvcGVyYXRv
ciBib29sKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiAqdGhpcyAhPSBGcmVlTGlzdCgp
OwotICAgIH0KK2NsYXNzIEhlYXBDZWxsOworY2xhc3MgTWFya2VkQmxvY2s7CiAKLSAgICBib29s
IGNvbnRhaW5zKGNvbnN0IHZvaWQqIHRhcmdldCkgY29uc3Q7Ci0KLSAgICBib29sIGFsbG9jYXRp
b25XaWxsRmFpbCgpIGNvbnN0IHsgcmV0dXJuICFoZWFkICYmICFyZW1haW5pbmc7IH0KK2NsYXNz
IEZyZWVMaXN0IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShGcmVlTGlzdCk7CisgICAgCitw
dWJsaWM6CisgICAgdHlwZWRlZiB1aW50MTZfdCBGcmVlT2Zmc2V0OworICAgIAorICAgIEZyZWVM
aXN0KHVuc2lnbmVkIGNlbGxTaXplKTsKKyAgICB+RnJlZUxpc3QoKTsKKyAgICAKKyAgICB2b2lk
IGNsZWFyKCk7CisgICAgCisgICAgdm9pZCBpbml0aWFsaXplTGlzdChNYXJrZWRCbG9jayopOwor
ICAgIHZvaWQgYWRkRnJlZUNlbGwoSGVhcENlbGwqKTsKKyAgICAKKyAgICB2b2lkIGluaXRpYWxp
emVCdW1wKGNoYXIqIHBheWxvYWRFbmQsIHVuc2lnbmVkIHJlbWFpbmluZyk7CisgICAgCisgICAg
Ym9vbCBhbGxvY2F0aW9uV2lsbEZhaWwoKSBjb25zdCB7IHJldHVybiAhbV9pbmRleCAmJiAhbV9y
ZW1haW5pbmc7IH0KICAgICBib29sIGFsbG9jYXRpb25XaWxsU3VjY2VlZCgpIGNvbnN0IHsgcmV0
dXJuICFhbGxvY2F0aW9uV2lsbEZhaWwoKTsgfQogICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmM+CisgICAgSGVhcENlbGwqIGFsbG9jYXRlKGNvbnN0IEZ1bmMmIHNsb3dQYXRoKTsKKyAg
ICAKKyAgICBib29sIGNvbnRhaW5zKEhlYXBDZWxsKikgY29uc3Q7CisgICAgCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRnVuYz4KKyAgICB2b2lkIGZvckVhY2goY29uc3QgRnVuYyYpIGNvbnN0Owor
ICAgIAorICAgIHVuc2lnbmVkIG9yaWdpbmFsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2lu
YWxTaXplOyB9CisgICAgCisgICAgRnJlZU9mZnNldCogYWRkcmVzc09mTGlzdCgpIGNvbnN0IHsg
cmV0dXJuIG1fbGlzdC5nZXQoKTsgfQorCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkJs
b2NrKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZyZWVMaXN0LCBtX2Jsb2NrKTsgfQorICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZMaXN0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KEZyZWVMaXN0LCBtX2xpc3QpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkluZGV4
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZyZWVMaXN0LCBtX2luZGV4KTsgfQorICAgIHN0
YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZQYXlsb2FkRW5kKCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKEZyZWVMaXN0LCBtX3BheWxvYWRFbmQpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZz
ZXRPZlJlbWFpbmluZygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihGcmVlTGlzdCwgbV9yZW1h
aW5pbmcpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk9yaWdpbmFsU2l6ZSgpIHsg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihGcmVlTGlzdCwgbV9vcmlnaW5hbFNpemUpOyB9CisgICAg
CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAg
IEZyZWVPZmZzZXQgdG9PZmZzZXQoSGVhcENlbGwqKSBjb25zdDsKKyAgICBIZWFwQ2VsbCogZnJv
bU9mZnNldChGcmVlT2Zmc2V0KSBjb25zdDsKKyAgICAKKyAgICB1bnNpZ25lZCBtX2NlbGxTaXpl
IHsgVUlOVF9NQVggfTsKKyAgICBNYXJrZWRCbG9jayogbV9ibG9jayB7IG51bGxwdHIgfTsKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8RnJlZU9mZnNldFtdPiBtX2xpc3Q7CisgICAgdW5zaWduZWQgbV9s
aXN0U2l6ZSB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX2luZGV4IHsgMCB9OworICAgIGNoYXIqIG1f
cGF5bG9hZEVuZCB7IG51bGxwdHIgfTsKKyAgICB1bnNpZ25lZCBtX3JlbWFpbmluZyB7IDAgfTsK
KyAgICB1bnNpZ25lZCBtX29yaWdpbmFsU2l6ZSB7IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRnJlZUxpc3RJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRnJlZUxpc3RJbmxpbmVz
LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRnJlZUxpc3RJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
IkZyZWVMaXN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitpbmxpbmUgdm9pZCBGcmVlTGlzdDo6
YWRkRnJlZUNlbGwoSGVhcENlbGwqIGNlbGwpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9pbmRl
eCA8IG1fbGlzdFNpemUpOworICAgIG1fbGlzdFttX2luZGV4KytdID0gdG9PZmZzZXQoY2VsbCk7
CisgICAgbV9vcmlnaW5hbFNpemUgKz0gbV9jZWxsU2l6ZTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgRnVuYz4KK0hlYXBDZWxsKiBGcmVlTGlzdDo6YWxsb2NhdGUoY29uc3QgRnVuYyYgc2xvd1Bh
dGgpCit7CisgICAgdW5zaWduZWQgcmVtYWluaW5nID0gbV9yZW1haW5pbmc7CisgICAgaWYgKHJl
bWFpbmluZykgeworICAgICAgICB1bnNpZ25lZCBjZWxsU2l6ZSA9IG1fY2VsbFNpemU7CisgICAg
ICAgIHJlbWFpbmluZyAtPSBjZWxsU2l6ZTsKKyAgICAgICAgbV9yZW1haW5pbmcgPSByZW1haW5p
bmc7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPihtX3BheWxvYWRFbmQg
LSByZW1haW5pbmcgLSBjZWxsU2l6ZSk7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGluZGV4
ID0gbV9pbmRleDsKKyAgICBpZiAoVU5MSUtFTFkoIWluZGV4KSkKKyAgICAgICAgcmV0dXJuIHNs
b3dQYXRoKCk7CisgICAgCisgICAgLS1pbmRleDsKKyAgICBtX2luZGV4ID0gaW5kZXg7CisgICAg
cmV0dXJuIGZyb21PZmZzZXQobV9saXN0W2luZGV4XSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEZ1bmM+Cit2b2lkIEZyZWVMaXN0Ojpmb3JFYWNoKGNvbnN0IEZ1bmMmIGZ1bmMpIGNvbnN0Cit7
CisgICAgaWYgKG1fcmVtYWluaW5nKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgcmVtYWluaW5n
ID0gbV9yZW1haW5pbmc7IHJlbWFpbmluZzsgcmVtYWluaW5nIC09IG1fY2VsbFNpemUpCisgICAg
ICAgICAgICBmdW5jKGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KG1fcGF5bG9hZEVuZCAtIHJlbWFp
bmluZykpOworICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXg7
IGktLTspCisgICAgICAgICAgICBmdW5jKGZyb21PZmZzZXQobV9saXN0W2ldKSk7CisgICAgfQor
fQorCitpbmxpbmUgRnJlZUxpc3Q6OkZyZWVPZmZzZXQgRnJlZUxpc3Q6OnRvT2Zmc2V0KEhlYXBD
ZWxsKiBjZWxsKSBjb25zdAoreworICAgIHVpbnRwdHJfdCByZXN1bHQgPSBiaXR3aXNlX2Nhc3Q8
dWludHB0cl90PihjZWxsKSAtIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG1fYmxvY2spOworICAg
IFJFTEVBU0VfQVNTRVJUKHJlc3VsdCA8IE1hcmtlZEJsb2NrOjpibG9ja1NpemUpOworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxGcmVlT2Zmc2V0PihyZXN1bHQpOworfQorCitpbmxpbmUgSGVhcENl
bGwqIEZyZWVMaXN0Ojpmcm9tT2Zmc2V0KEZyZWVPZmZzZXQgb2Zmc2V0KSBjb25zdAoreworICAg
IHJldHVybiBiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KG9m
ZnNldCkgKyBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihtX2Jsb2NrKSk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRh
bFN3ZWVwZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lu
Y3JlbWVudGFsU3dlZXBlci5jcHAJKHJldmlzaW9uIDIxNzY0NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3
LDcgKzg3LDcgQEAgYm9vbCBJbmNyZW1lbnRhbFN3ZWVwZXI6OnN3ZWVwTmV4dEJsb2NrKAogICAg
IAogICAgIGlmIChibG9jaykgewogICAgICAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0MobV92
bS0+aGVhcCk7Ci0gICAgICAgIGJsb2NrLT5zd2VlcCgpOworICAgICAgICBibG9jay0+c3dlZXAo
bnVsbHB0cik7CiAgICAgICAgIG1fdm0tPmhlYXAub2JqZWN0U3BhY2UoKS5mcmVlT3JTaHJpbmtC
bG9jayhibG9jayk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMjE3
NjQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsOCBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIE1hcmtl
ZEFsbG9jYXRvcjo6TWFya2VkQWxsb2NhdG9yKEhlYXAqIGhlYXAsIFN1YnNwYWNlKiBzdWJzcGFj
ZSwgc2l6ZV90IGNlbGxTaXplKQotICAgIDogbV9jdXJyZW50QmxvY2soMCkKKyAgICA6IG1fZnJl
ZUxpc3QoY2VsbFNpemUpCisgICAgLCBtX2N1cnJlbnRCbG9jaygwKQogICAgICwgbV9sYXN0QWN0
aXZlQmxvY2soMCkKICAgICAsIG1fY2VsbFNpemUoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNlbGxT
aXplKSkKICAgICAsIG1fYXR0cmlidXRlcyhzdWJzcGFjZS0+YXR0cmlidXRlcygpKQpAQCAtODgs
NyArODksNyBAQCB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6ZGlkQ29uc3VtZUZyZWVMaXN0CiAgICAg
aWYgKG1fY3VycmVudEJsb2NrKQogICAgICAgICBtX2N1cnJlbnRCbG9jay0+ZGlkQ29uc3VtZUZy
ZWVMaXN0KCk7CiAgICAgCi0gICAgc2V0RnJlZUxpc3QoRnJlZUxpc3QoKSk7CisgICAgbV9mcmVl
TGlzdC5jbGVhcigpOwogICAgIG1fY3VycmVudEJsb2NrID0gbnVsbHB0cjsKIH0KIApAQCAtOTcs
NyArOTgsNyBAQCB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlV2l0aG91CiAgICAg
U3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogICAgIAogICAgIEFT
U0VSVCghbV9jdXJyZW50QmxvY2spOwotICAgIEFTU0VSVCghbV9mcmVlTGlzdCk7CisgICAgQVNT
RVJUKG1fZnJlZUxpc3QuYWxsb2NhdGlvbldpbGxGYWlsKCkpOwogICAgIAogICAgIGZvciAoOzsp
IHsKICAgICAgICAgbV9hbGxvY2F0aW9uQ3Vyc29yID0gKG1fY2FuQWxsb2NhdGVCdXROb3RFbXB0
eSB8IG1fZW1wdHkpLmZpbmRCaXQobV9hbGxvY2F0aW9uQ3Vyc29yLCB0cnVlKTsKQEAgLTExMyw3
ICsxMTQsNyBAQCB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlV2l0aG91CiAgICAg
aWYgKE9wdGlvbnM6OnN0ZWFsRW1wdHlCbG9ja3NGcm9tT3RoZXJBbGxvY2F0b3JzKCkKICAgICAg
ICAgJiYgc2hvdWxkU3RlYWxFbXB0eUJsb2Nrc0Zyb21PdGhlckFsbG9jYXRvcnMoKSkgewogICAg
ICAgICBpZiAoTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2sgPSBtYXJrZWRTcGFjZSgpLmZpbmRF
bXB0eUJsb2NrVG9TdGVhbCgpKSB7Ci0gICAgICAgICAgICBibG9jay0+c3dlZXAoKTsKKyAgICAg
ICAgICAgIGJsb2NrLT5zd2VlcChudWxscHRyKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAg
Ly8gSXQncyBnb29kIHRoYXQgdGhpcyBjbGVhcnMgY2FuQWxsb2NhdGVCdXROb3RFbXB0eSBhcyB3
ZWxsIGFzIGFsbCBvdGhlciBiaXRzLAogICAgICAgICAgICAgLy8gYmVjYXVzZSB0aGVyZSBpcyBh
IHJlbW90ZSBjaGFuY2UgdGhhdCBhIGJsb2NrIG1heSBoYXZlIGJvdGggY2FuQWxsb2NhdGVCdXRO
b3RFbXB0eQpAQCAtMTM5LDExICsxNDAsMTEgQEAgdm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlB
bGxvY2F0ZUluKE1hcgogICAgIEFTU0VSVChibG9jayk7CiAgICAgQVNTRVJUKCFibG9jay0+aXNG
cmVlTGlzdGVkKCkpOwogICAgIAotICAgIEZyZWVMaXN0IGZyZWVMaXN0ID0gYmxvY2stPnN3ZWVw
KE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwVG9GcmVlTGlzdCk7CisgICAgYmxvY2stPnN3ZWVw
KCZtX2ZyZWVMaXN0KTsKICAgICAKICAgICAvLyBJdCdzIHBvc3NpYmxlIHRvIHN0dW1ibGUgb24g
YSBjb21wbGV0ZWx5IGZ1bGwgYmxvY2suIE1hcmtpbmcgdHJpZXMgdG8gcmV0aXJlIHRoZXNlLCBi
dXQKICAgICAvLyB0aGF0IGFsZ29yaXRobSBpcyByYWN5IGFuZCBtYXkgZm9yZ2V0IHRvIGRvIGl0
IHNvbWV0aW1lcy4KLSAgICBpZiAoZnJlZUxpc3QuYWxsb2NhdGlvbldpbGxGYWlsKCkpIHsKKyAg
ICBpZiAobV9mcmVlTGlzdC5hbGxvY2F0aW9uV2lsbEZhaWwoKSkgewogICAgICAgICBBU1NFUlQo
YmxvY2stPmlzRnJlZUxpc3RlZCgpKTsKICAgICAgICAgYmxvY2stPnVuc3dlZXBXaXRoTm9OZXds
eUFsbG9jYXRlZCgpOwogICAgICAgICBBU1NFUlQoIWJsb2NrLT5pc0ZyZWVMaXN0ZWQoKSk7CkBA
IC0xNTMsMTkgKzE1NCw5IEBAIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVJbihN
YXIKICAgICB9CiAgICAgCiAgICAgbV9jdXJyZW50QmxvY2sgPSBibG9jazsKLSAgICBzZXRGcmVl
TGlzdChmcmVlTGlzdCk7CiAgICAgCi0gICAgdm9pZCogcmVzdWx0OwotICAgIGlmIChtX2ZyZWVM
aXN0LnJlbWFpbmluZykgewotICAgICAgICB1bnNpZ25lZCBjZWxsU2l6ZSA9IG1fY2VsbFNpemU7
Ci0gICAgICAgIG1fZnJlZUxpc3QucmVtYWluaW5nIC09IGNlbGxTaXplOwotICAgICAgICByZXN1
bHQgPSBtX2ZyZWVMaXN0LnBheWxvYWRFbmQgLSBtX2ZyZWVMaXN0LnJlbWFpbmluZyAtIGNlbGxT
aXplOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEZyZWVDZWxsKiBoZWFkID0gbV9mcmVlTGlzdC5o
ZWFkOwotICAgICAgICBtX2ZyZWVMaXN0LmhlYWQgPSBoZWFkLT5uZXh0OwotICAgICAgICByZXN1
bHQgPSBoZWFkOwotICAgIH0KLSAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQpOworICAgIHZvaWQq
IHJlc3VsdCA9IG1fZnJlZUxpc3QuYWxsb2NhdGUoCisgICAgICAgIFtdICgpIC0+IEhlYXBDZWxs
KiB7IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBudWxscHRyOyB9KTsKICAg
ICBzZXRJc0VkZW4oTm9Mb2NraW5nTmVjZXNzYXJ5LCBtX2N1cnJlbnRCbG9jaywgdHJ1ZSk7CiAg
ICAgbWFya2VkU3BhY2UoKS5kaWRBbGxvY2F0ZUluQmxvY2sobV9jdXJyZW50QmxvY2spOwogICAg
IHJldHVybiByZXN1bHQ7CkBAIC0yMDgsNyArMTk5LDcgQEAgdm9pZCogTWFya2VkQWxsb2NhdG9y
OjphbGxvY2F0ZVNsb3dDYXNlSQogICAgIGRvVGVzdENvbGxlY3Rpb25zSWZOZWVkZWQoZGVmZXJy
YWxDb250ZXh0KTsKIAogICAgIEFTU0VSVCghbWFya2VkU3BhY2UoKS5pc0l0ZXJhdGluZygpKTsK
LSAgICBtX2hlYXAtPmRpZEFsbG9jYXRlKG1fZnJlZUxpc3Qub3JpZ2luYWxTaXplKTsKKyAgICBt
X2hlYXAtPmRpZEFsbG9jYXRlKG1fZnJlZUxpc3Qub3JpZ2luYWxTaXplKCkpOwogICAgIAogICAg
IGRpZENvbnN1bWVGcmVlTGlzdCgpOwogICAgIApAQCAtMzM0LDIxICszMjUsMjEgQEAgdm9pZCBN
YXJrZWRBbGxvY2F0b3I6OnN0b3BBbGxvY2F0aW5nKCkKICAgICAgICAgZGF0YUxvZyhSYXdQb2lu
dGVyKHRoaXMpLCAiOiBNYXJrZWRBbGxvY2F0b3I6OnN0b3BBbGxvY2F0aW5nIVxuIik7CiAgICAg
QVNTRVJUKCFtX2xhc3RBY3RpdmVCbG9jayk7CiAgICAgaWYgKCFtX2N1cnJlbnRCbG9jaykgewot
ICAgICAgICBBU1NFUlQoIW1fZnJlZUxpc3QpOworICAgICAgICBBU1NFUlQobV9mcmVlTGlzdC5h
bGxvY2F0aW9uV2lsbEZhaWwoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCiAgICAg
bV9jdXJyZW50QmxvY2stPnN0b3BBbGxvY2F0aW5nKG1fZnJlZUxpc3QpOwogICAgIG1fbGFzdEFj
dGl2ZUJsb2NrID0gbV9jdXJyZW50QmxvY2s7CiAgICAgbV9jdXJyZW50QmxvY2sgPSAwOwotICAg
IG1fZnJlZUxpc3QgPSBGcmVlTGlzdCgpOworICAgIG1fZnJlZUxpc3QuY2xlYXIoKTsKIH0KIAog
dm9pZCBNYXJrZWRBbGxvY2F0b3I6OnByZXBhcmVGb3JBbGxvY2F0aW9uKCkKIHsKICAgICBtX2xh
c3RBY3RpdmVCbG9jayA9IG51bGxwdHI7CiAgICAgbV9jdXJyZW50QmxvY2sgPSBudWxscHRyOwot
ICAgIHNldEZyZWVMaXN0KEZyZWVMaXN0KCkpOworICAgIG1fZnJlZUxpc3QuY2xlYXIoKTsKIAog
ICAgIG1fYWxsb2NhdGlvbkN1cnNvciA9IDA7CiAgICAgbV9lbXB0eUN1cnNvciA9IDA7CkBAIC0z
NzEsMTcgKzM2MiwxMiBAQCB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6bGFzdENoYW5jZVRvRmluYWxp
CiAgICAgICAgIH0pOwogfQogCi12b2lkIE1hcmtlZEFsbG9jYXRvcjo6c2V0RnJlZUxpc3QoY29u
c3QgRnJlZUxpc3QmIGZyZWVMaXN0KQotewotICAgIG1fZnJlZUxpc3QgPSBmcmVlTGlzdDsKLX0K
LQogdm9pZCBNYXJrZWRBbGxvY2F0b3I6OnJlc3VtZUFsbG9jYXRpbmcoKQogewogICAgIGlmICgh
bV9sYXN0QWN0aXZlQmxvY2spCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZnJlZUxpc3QgPSBt
X2xhc3RBY3RpdmVCbG9jay0+cmVzdW1lQWxsb2NhdGluZygpOworICAgIG1fbGFzdEFjdGl2ZUJs
b2NrLT5yZXN1bWVBbGxvY2F0aW5nKG1fZnJlZUxpc3QpOwogICAgIG1fY3VycmVudEJsb2NrID0g
bV9sYXN0QWN0aXZlQmxvY2s7CiAgICAgbV9sYXN0QWN0aXZlQmxvY2sgPSBudWxscHRyOwogfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgJKHJl
dmlzaW9uIDIxNzY0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9j
YXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTYsNyArMTU2LDcgQEAgcHVibGljOgogICAgIHZv
aWQqIHRyeUFsbG9jYXRlKEdDRGVmZXJyYWxDb250ZXh0KiA9IG51bGxwdHIpOwogICAgIEhlYXAq
IGhlYXAoKSB7IHJldHVybiBtX2hlYXA7IH0KIAotICAgIGJvb2wgaXNGcmVlTGlzdGVkQ2VsbChj
b25zdCB2b2lkKiB0YXJnZXQpIGNvbnN0IHsgcmV0dXJuIG1fZnJlZUxpc3QuY29udGFpbnModGFy
Z2V0KTsgfQorICAgIGJvb2wgaXNGcmVlTGlzdGVkQ2VsbChjb25zdCB2b2lkKiB0YXJnZXQpIGNv
bnN0OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQmxvY2so
Y29uc3QgRnVuY3RvciYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9y
RWFjaE5vdEVtcHR5QmxvY2soY29uc3QgRnVuY3RvciYpOwpAQCAtMjA5LDYgKzIwOSw4IEBAIHB1
YmxpYzoKICAgICBTdWJzcGFjZSogc3Vic3BhY2UoKSBjb25zdCB7IHJldHVybiBtX3N1YnNwYWNl
OyB9CiAgICAgTWFya2VkU3BhY2UmIG1hcmtlZFNwYWNlKCkgY29uc3Q7CiAgICAgCisgICAgY29u
c3QgRnJlZUxpc3QmIGZyZWVMaXN0KCkgY29uc3QgeyByZXR1cm4gbV9mcmVlTGlzdDsgfQorICAg
IAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgIHZvaWQgZHVtcEJpdHMo
UHJpbnRTdHJlYW0mID0gV1RGOjpkYXRhRmlsZSgpKTsKICAgICAKQEAgLTIyNyw4ICsyMjksNiBA
QCBwcml2YXRlOgogICAgIHZvaWQqIGFsbG9jYXRlSW4oTWFya2VkQmxvY2s6OkhhbmRsZSopOwog
ICAgIEFMV0FZU19JTkxJTkUgdm9pZCBkb1Rlc3RDb2xsZWN0aW9uc0lmTmVlZGVkKEdDRGVmZXJy
YWxDb250ZXh0Kik7CiAgICAgCi0gICAgdm9pZCBzZXRGcmVlTGlzdChjb25zdCBGcmVlTGlzdCYp
OwotICAgIAogICAgIEZyZWVMaXN0IG1fZnJlZUxpc3Q7CiAgICAgCiAgICAgVmVjdG9yPE1hcmtl
ZEJsb2NrOjpIYW5kbGUqPiBtX2Jsb2NrczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtlZEFsbG9jYXRvcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmgJKHJldmlzaW9uIDIxNzY0NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvcklubGluZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtMjUsNDQgKzI1LDMwIEBACiAKICNwcmFnbWEgb25jZQogCisjaW5j
bHVkZSAiRnJlZUxpc3RJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTWFya2VkQWxsb2NhdG9yLmgiCiAK
IG5hbWVzcGFjZSBKU0MgewogCitpbmxpbmUgYm9vbCBNYXJrZWRBbGxvY2F0b3I6OmlzRnJlZUxp
c3RlZENlbGwoY29uc3Qgdm9pZCogdGFyZ2V0KSBjb25zdAoreworICAgIHJldHVybiBtX2ZyZWVM
aXN0LmNvbnRhaW5zKGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KHRhcmdldCkpOworfQorCiBBTFdB
WVNfSU5MSU5FIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGUoR0NEZWZlcnJhbENv
bnRleHQqIGRlZmVycmFsQ29udGV4dCkKIHsKLSAgICB1bnNpZ25lZCByZW1haW5pbmcgPSBtX2Zy
ZWVMaXN0LnJlbWFpbmluZzsKLSAgICBpZiAocmVtYWluaW5nKSB7Ci0gICAgICAgIHVuc2lnbmVk
IGNlbGxTaXplID0gbV9jZWxsU2l6ZTsKLSAgICAgICAgcmVtYWluaW5nIC09IGNlbGxTaXplOwot
ICAgICAgICBtX2ZyZWVMaXN0LnJlbWFpbmluZyA9IHJlbWFpbmluZzsKLSAgICAgICAgcmV0dXJu
IG1fZnJlZUxpc3QucGF5bG9hZEVuZCAtIHJlbWFpbmluZyAtIGNlbGxTaXplOwotICAgIH0KLSAg
ICAKLSAgICBGcmVlQ2VsbCogaGVhZCA9IG1fZnJlZUxpc3QuaGVhZDsKLSAgICBpZiAoVU5MSUtF
TFkoIWhlYWQpKQotICAgICAgICByZXR1cm4gdHJ5QWxsb2NhdGVTbG93Q2FzZShkZWZlcnJhbENv
bnRleHQpOwotICAgIAotICAgIG1fZnJlZUxpc3QuaGVhZCA9IGhlYWQtPm5leHQ7Ci0gICAgcmV0
dXJuIGhlYWQ7CisgICAgcmV0dXJuIG1fZnJlZUxpc3QuYWxsb2NhdGUoCisgICAgICAgIFsmXSAo
KSAtPiBIZWFwQ2VsbCogeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhlYXBDZWxs
Kj4odHJ5QWxsb2NhdGVTbG93Q2FzZShkZWZlcnJhbENvbnRleHQpKTsKKyAgICAgICAgfSk7CiB9
CiAKIEFMV0FZU19JTkxJTkUgdm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZShHQ0RlZmVy
cmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0KQogewotICAgIHVuc2lnbmVkIHJlbWFpbmluZyA9
IG1fZnJlZUxpc3QucmVtYWluaW5nOwotICAgIGlmIChyZW1haW5pbmcpIHsKLSAgICAgICAgdW5z
aWduZWQgY2VsbFNpemUgPSBtX2NlbGxTaXplOwotICAgICAgICByZW1haW5pbmcgLT0gY2VsbFNp
emU7Ci0gICAgICAgIG1fZnJlZUxpc3QucmVtYWluaW5nID0gcmVtYWluaW5nOwotICAgICAgICBy
ZXR1cm4gbV9mcmVlTGlzdC5wYXlsb2FkRW5kIC0gcmVtYWluaW5nIC0gY2VsbFNpemU7Ci0gICAg
fQotICAgIAotICAgIEZyZWVDZWxsKiBoZWFkID0gbV9mcmVlTGlzdC5oZWFkOwotICAgIGlmIChV
TkxJS0VMWSghaGVhZCkpCi0gICAgICAgIHJldHVybiBhbGxvY2F0ZVNsb3dDYXNlKGRlZmVycmFs
Q29udGV4dCk7Ci0gICAgCi0gICAgbV9mcmVlTGlzdC5oZWFkID0gaGVhZC0+bmV4dDsKLSAgICBy
ZXR1cm4gaGVhZDsKKyAgICByZXR1cm4gbV9mcmVlTGlzdC5hbGxvY2F0ZSgKKyAgICAgICAgWyZd
ICgpIC0+IEhlYXBDZWxsKiB7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SGVhcENl
bGwqPihhbGxvY2F0ZVNsb3dDYXNlKGRlZmVycmFsQ29udGV4dCkpOworICAgICAgICB9KTsKIH0K
IAogdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+IGlubGluZSB2b2lkIE1hcmtlZEFsbG9jYXRv
cjo6Zm9yRWFjaEJsb2NrKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCShyZXZpc2lvbiAyMTc2NDYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJNYXJrZWRC
bG9jay5oIgogCisjaW5jbHVkZSAiRnJlZUxpc3RJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDZWxs
LmgiCiAjaW5jbHVkZSAiSlNEZXN0cnVjdGlibGVPYmplY3QuaCIKICNpbmNsdWRlICJKU0NJbmxp
bmVzLmgiCkBAIC0xMzQsOCArMTM1LDcgQEAgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzdG9w
QWxsb2NhdGluZwogICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7
CiAgICAgICAgIH0pOwogCi0gICAgZm9yRWFjaEZyZWVDZWxsKAotICAgICAgICBmcmVlTGlzdCwK
KyAgICBmcmVlTGlzdC5mb3JFYWNoKAogICAgICAgICBbJl0gKEhlYXBDZWxsKiBjZWxsKSB7CiAg
ICAgICAgICAgICBpZiAoZmFsc2UpCiAgICAgICAgICAgICAgICAgZGF0YUxvZygiRnJlZSBjZWxs
OiAiLCBSYXdQb2ludGVyKGNlbGwpLCAiXG4iKTsKQEAgLTE1OSw3ICsxNTksNyBAQCB2b2lkIE1h
cmtlZEJsb2NrOjpIYW5kbGU6Omxhc3RDaGFuY2VUb0ZpCiAgICAgc3dlZXAoKTsKIH0KIAotRnJl
ZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6cmVzdW1lQWxsb2NhdGluZygpCit2b2lkIE1hcmtl
ZEJsb2NrOjpIYW5kbGU6OnJlc3VtZUFsbG9jYXRpbmcoRnJlZUxpc3QmIGZyZWVMaXN0KQogewog
ICAgIHsKICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhibG9jaygpLm1fbG9jayk7CkBA
IC0xNzMsNDAgKzE3MywyNSBAQCBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpyZXN1bWVB
bGxvCiAgICAgICAgICAgICBpZiAoZmFsc2UpCiAgICAgICAgICAgICAgICAgZGF0YUxvZygiVGhl
cmUgYWluJ3Qgbm8gbmV3bHkgYWxsb2NhdGVkLlxuIik7CiAgICAgICAgICAgICAvLyBUaGlzIG1l
YW5zIHdlIGhhZCBhbHJlYWR5IGV4aGF1c3RlZCB0aGUgYmxvY2sgd2hlbiB3ZSBzdG9wcGVkIGFs
bG9jYXRpb24uCi0gICAgICAgICAgICByZXR1cm4gRnJlZUxpc3QoKTsKKyAgICAgICAgICAgIGZy
ZWVMaXN0LmNsZWFyKCk7CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CiAK
ICAgICAvLyBSZS1jcmVhdGUgb3VyIGZyZWUgbGlzdCBmcm9tIGJlZm9yZSBzdG9wcGluZyBhbGxv
Y2F0aW9uLiBOb3RlIHRoYXQgdGhpcyBtYXkgcmV0dXJuIGFuIGVtcHR5CiAgICAgLy8gZnJlZWxp
c3QsIGluIHdoaWNoIGNhc2UgdGhlIGJsb2NrIHdpbGwgc3RpbGwgYmUgTWFya2VkIQotICAgIHJl
dHVybiBzd2VlcChTd2VlcFRvRnJlZUxpc3QpOworICAgIHN3ZWVwKCZmcmVlTGlzdCk7CiB9CiAK
IHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6emFwKGNvbnN0IEZyZWVMaXN0JiBmcmVlTGlzdCkK
IHsKLSAgICBmb3JFYWNoRnJlZUNlbGwoCi0gICAgICAgIGZyZWVMaXN0LAorICAgIGZyZWVMaXN0
LmZvckVhY2goCiAgICAgICAgIFsmXSAoSGVhcENlbGwqIGNlbGwpIHsKICAgICAgICAgICAgIGlm
IChtX2F0dHJpYnV0ZXMuZGVzdHJ1Y3Rpb24gPT0gTmVlZHNEZXN0cnVjdGlvbikKICAgICAgICAg
ICAgICAgICBjZWxsLT56YXAoKTsKICAgICAgICAgfSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmM+Ci12b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmZvckVhY2hGcmVlQ2VsbChjb25zdCBG
cmVlTGlzdCYgZnJlZUxpc3QsIGNvbnN0IEZ1bmMmIGZ1bmMpCi17Ci0gICAgaWYgKGZyZWVMaXN0
LnJlbWFpbmluZykgewotICAgICAgICBmb3IgKHVuc2lnbmVkIHJlbWFpbmluZyA9IGZyZWVMaXN0
LnJlbWFpbmluZzsgcmVtYWluaW5nOyByZW1haW5pbmcgLT0gY2VsbFNpemUoKSkKLSAgICAgICAg
ICAgIGZ1bmMoYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4oZnJlZUxpc3QucGF5bG9hZEVuZCAtIHJl
bWFpbmluZykpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZvciAoRnJlZUNlbGwqIGN1cnJlbnQg
PSBmcmVlTGlzdC5oZWFkOyBjdXJyZW50OykgewotICAgICAgICAgICAgRnJlZUNlbGwqIG5leHQg
PSBjdXJyZW50LT5uZXh0OwotICAgICAgICAgICAgZnVuYyhiaXR3aXNlX2Nhc3Q8SGVhcENlbGwq
PihjdXJyZW50KSk7Ci0gICAgICAgICAgICBjdXJyZW50ID0gbmV4dDsKLSAgICAgICAgfQotICAg
IH0KLX0KLQogdm9pZCBNYXJrZWRCbG9jazo6YWJvdXRUb01hcmtTbG93KEhlYXBWZXJzaW9uIG1h
cmtpbmdWZXJzaW9uKQogewogICAgIEFTU0VSVCh2bSgpLT5oZWFwLm9iamVjdFNwYWNlKCkuaXNN
YXJraW5nKCkpOwpAQCAtNDA3LDIwICszOTIsMjIgQEAgU3Vic3BhY2UqIE1hcmtlZEJsb2NrOjpI
YW5kbGU6OnN1YnNwYWNlKAogICAgIHJldHVybiBhbGxvY2F0b3IoKS0+c3Vic3BhY2UoKTsKIH0K
IAotRnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3dlZXAoU3dlZXBNb2RlIHN3ZWVwTW9k
ZSkKK3ZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3dlZXAoRnJlZUxpc3QqIGZyZWVMaXN0KQog
ewogICAgIFN3ZWVwaW5nU2NvcGUgc3dlZXBpbmdTY29wZSgqaGVhcCgpKTsKICAgICAKKyAgICBT
d2VlcE1vZGUgc3dlZXBNb2RlID0gZnJlZUxpc3QgPyBTd2VlcFRvRnJlZUxpc3QgOiBTd2VlcE9u
bHk7CisgICAgCiAgICAgbV9hbGxvY2F0b3ItPnNldElzVW5zd2VwdChOb0xvY2tpbmdOZWNlc3Nh
cnksIHRoaXMsIGZhbHNlKTsKICAgICAKICAgICBtX3dlYWtTZXQuc3dlZXAoKTsKIAogICAgIGlm
IChzd2VlcE1vZGUgPT0gU3dlZXBPbmx5ICYmIG1fYXR0cmlidXRlcy5kZXN0cnVjdGlvbiA9PSBE
b2VzTm90TmVlZERlc3RydWN0aW9uKQotICAgICAgICByZXR1cm4gRnJlZUxpc3QoKTsKKyAgICAg
ICAgcmV0dXJuOwogCiAgICAgaWYgKFVOTElLRUxZKG1faXNGcmVlTGlzdGVkKSkgewogICAgICAg
ICBSRUxFQVNFX0FTU0VSVChzd2VlcE1vZGUgPT0gU3dlZXBUb0ZyZWVMaXN0KTsKLSAgICAgICAg
cmV0dXJuIEZyZWVMaXN0KCk7CisgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCiAgICAgQVNT
RVJUKCFtX2FsbG9jYXRvci0+aXNBbGxvY2F0ZWQoTm9Mb2NraW5nTmVjZXNzYXJ5LCB0aGlzKSk7
CkBAIC00MjgsOCArNDE1LDEwIEBAIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN3ZWVw
KFN3ZWUKICAgICBpZiAoc3BhY2UoKS0+aXNNYXJraW5nKCkpCiAgICAgICAgIGJsb2NrKCkubV9s
b2NrLmxvY2soKTsKICAgICAKLSAgICBpZiAobV9hdHRyaWJ1dGVzLmRlc3RydWN0aW9uID09IE5l
ZWRzRGVzdHJ1Y3Rpb24pCi0gICAgICAgIHJldHVybiBzdWJzcGFjZSgpLT5maW5pc2hTd2VlcCgq
dGhpcywgc3dlZXBNb2RlKTsKKyAgICBpZiAobV9hdHRyaWJ1dGVzLmRlc3RydWN0aW9uID09IE5l
ZWRzRGVzdHJ1Y3Rpb24pIHsKKyAgICAgICAgc3Vic3BhY2UoKS0+ZmluaXNoU3dlZXAoKnRoaXMs
IGZyZWVMaXN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICAKICAgICAvLyBIYW5kbGUg
dGhlIG5vLWRlc3RydWN0b3Igc3BlY2lhbGl6YXRpb25zIGhlcmUsIHNpbmNlIHdlIGhhdmUgdGhl
IG1vc3Qgb2YgdGhvc2UuIFRoaXMKICAgICAvLyBlbnN1cmVzIHRoYXQgdGhleSBkb24ndCBnZXQg
cmUtc3BlY2lhbGl6ZWQgZm9yIGV2ZXJ5IGRlc3RydWN0b3Igc3BhY2UuCkBAIC00MzksNyArNDI4
LDYgQEAgRnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3dlZXAoU3dlZQogICAgIE5ld2x5
QWxsb2NhdGVkTW9kZSBuZXdseUFsbG9jYXRlZE1vZGUgPSB0aGlzLT5uZXdseUFsbG9jYXRlZE1v
ZGUoKTsKICAgICBNYXJrc01vZGUgbWFya3NNb2RlID0gdGhpcy0+bWFya3NNb2RlKCk7CiAgICAg
Ci0gICAgRnJlZUxpc3QgcmVzdWx0OwogICAgIGF1dG8gdHJ5U3BlY2lhbGl6ZWQgPSBbJl0gKCkg
LT4gYm9vbCB7CiAgICAgICAgIGlmIChzd2VlcE1vZGUgIT0gU3dlZXBUb0ZyZWVMaXN0KQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNDUyLDIwICs0NDAsMjAgQEAgRnJlZUxpc3QgTWFy
a2VkQmxvY2s6OkhhbmRsZTo6c3dlZXAoU3dlZQogICAgICAgICBjYXNlIElzRW1wdHk6CiAgICAg
ICAgICAgICBzd2l0Y2ggKG1hcmtzTW9kZSkgewogICAgICAgICAgICAgY2FzZSBNYXJrc05vdFN0
YWxlOgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNwZWNpYWxpemVkU3dlZXA8dHJ1ZSwgSXNF
bXB0eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJs
ZSwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCwgTWFya3NOb3RTdGFsZT4oSXNFbXB0eSwgU3dl
ZXBUb0ZyZWVMaXN0LCBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9lc05v
dEhhdmVOZXdseUFsbG9jYXRlZCwgTWFya3NOb3RTdGFsZSwgW10gKFZNJiwgSlNDZWxsKikgeyB9
KTsKKyAgICAgICAgICAgICAgICBzcGVjaWFsaXplZFN3ZWVwPHRydWUsIElzRW1wdHksIFN3ZWVw
VG9GcmVlTGlzdCwgQmxvY2tIYXNOb0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUsIERvZXNOb3RI
YXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzTm90U3RhbGU+KGZyZWVMaXN0LCBJc0VtcHR5LCBTd2Vl
cFRvRnJlZUxpc3QsIEJsb2NrSGFzTm9EZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90
SGF2ZU5ld2x5QWxsb2NhdGVkLCBNYXJrc05vdFN0YWxlLCBbXSAoVk0mLCBKU0NlbGwqKSB7IH0p
OwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgY2FzZSBNYXJrc1N0
YWxlOgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNwZWNpYWxpemVkU3dlZXA8dHJ1ZSwgSXNF
bXB0eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJs
ZSwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCwgTWFya3NTdGFsZT4oSXNFbXB0eSwgU3dlZXBU
b0ZyZWVMaXN0LCBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9lc05vdEhh
dmVOZXdseUFsbG9jYXRlZCwgTWFya3NTdGFsZSwgW10gKFZNJiwgSlNDZWxsKikgeyB9KTsKKyAg
ICAgICAgICAgICAgICBzcGVjaWFsaXplZFN3ZWVwPHRydWUsIElzRW1wdHksIFN3ZWVwVG9GcmVl
TGlzdCwgQmxvY2tIYXNOb0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUsIERvZXNOb3RIYXZlTmV3
bHlBbGxvY2F0ZWQsIE1hcmtzU3RhbGU+KGZyZWVMaXN0LCBJc0VtcHR5LCBTd2VlcFRvRnJlZUxp
c3QsIEJsb2NrSGFzTm9EZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5
QWxsb2NhdGVkLCBNYXJrc1N0YWxlLCBbXSAoVk0mLCBKU0NlbGwqKSB7IH0pOwogICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgTm90RW1wdHk6CiAgICAgICAgICAgICBzd2l0Y2ggKG1hcmtzTW9kZSkgewog
ICAgICAgICAgICAgY2FzZSBNYXJrc05vdFN0YWxlOgotICAgICAgICAgICAgICAgIHJlc3VsdCA9
IHNwZWNpYWxpemVkU3dlZXA8dHJ1ZSwgTm90RW1wdHksIFN3ZWVwVG9GcmVlTGlzdCwgQmxvY2tI
YXNOb0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUsIERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQs
IE1hcmtzTm90U3RhbGU+KElzRW1wdHksIFN3ZWVwVG9GcmVlTGlzdCwgQmxvY2tIYXNOb0Rlc3Ry
dWN0b3JzLCBEb250U2NyaWJibGUsIERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzTm90
U3RhbGUsIFtdIChWTSYsIEpTQ2VsbCopIHsgfSk7CisgICAgICAgICAgICAgICAgc3BlY2lhbGl6
ZWRTd2VlcDx0cnVlLCBOb3RFbXB0eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hhc05vRGVzdHJ1
Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCwgTWFya3NOb3RT
dGFsZT4oZnJlZUxpc3QsIElzRW1wdHksIFN3ZWVwVG9GcmVlTGlzdCwgQmxvY2tIYXNOb0Rlc3Ry
dWN0b3JzLCBEb250U2NyaWJibGUsIERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzTm90
U3RhbGUsIFtdIChWTSYsIEpTQ2VsbCopIHsgfSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgICAgICBjYXNlIE1hcmtzU3RhbGU6Ci0gICAgICAgICAgICAgICAgcmVzdWx0
ID0gc3BlY2lhbGl6ZWRTd2VlcDx0cnVlLCBOb3RFbXB0eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9j
a0hhc05vRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRl
ZCwgTWFya3NTdGFsZT4oSXNFbXB0eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hhc05vRGVzdHJ1
Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCwgTWFya3NTdGFs
ZSwgW10gKFZNJiwgSlNDZWxsKikgeyB9KTsKKyAgICAgICAgICAgICAgICBzcGVjaWFsaXplZFN3
ZWVwPHRydWUsIE5vdEVtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzTm9EZXN0cnVjdG9y
cywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBNYXJrc1N0YWxlPihm
cmVlTGlzdCwgSXNFbXB0eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMs
IERvbnRTY3JpYmJsZSwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCwgTWFya3NTdGFsZSwgW10g
KFZNJiwgSlNDZWxsKikgeyB9KTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwpAQCAtNDc1LDEwICs0NjMsMTAgQEAgRnJlZUxp
c3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3dlZXAoU3dlZQogICAgIH07CiAgICAgCiAgICAgaWYg
KHRyeVNwZWNpYWxpemVkKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVy
bjsKIAogICAgIC8vIFRoZSB0ZW1wbGF0ZSBhcmd1bWVudHMgZG9uJ3QgbWF0dGVyIGJlY2F1c2Ug
dGhlIGZpcnN0IG9uZSBpcyBmYWxzZS4KLSAgICByZXR1cm4gc3BlY2lhbGl6ZWRTd2VlcDxmYWxz
ZSwgSXNFbXB0eSwgU3dlZXBPbmx5LCBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJs
ZSwgSGFzTmV3bHlBbGxvY2F0ZWQsIE1hcmtzU3RhbGU+KGVtcHR5TW9kZSwgc3dlZXBNb2RlLCBC
bG9ja0hhc05vRGVzdHJ1Y3RvcnMsIHNjcmliYmxlTW9kZSwgbmV3bHlBbGxvY2F0ZWRNb2RlLCBt
YXJrc01vZGUsIFtdIChWTSYsIEpTQ2VsbCopIHsgfSk7CisgICAgc3BlY2lhbGl6ZWRTd2VlcDxm
YWxzZSwgSXNFbXB0eSwgU3dlZXBPbmx5LCBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMsIERvbnRTY3Jp
YmJsZSwgSGFzTmV3bHlBbGxvY2F0ZWQsIE1hcmtzU3RhbGU+KGZyZWVMaXN0LCBlbXB0eU1vZGUs
IHN3ZWVwTW9kZSwgQmxvY2tIYXNOb0Rlc3RydWN0b3JzLCBzY3JpYmJsZU1vZGUsIG5ld2x5QWxs
b2NhdGVkTW9kZSwgbWFya3NNb2RlLCBbXSAoVk0mLCBKU0NlbGwqKSB7IH0pOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJs
b2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxv
Y2suaAkocmV2aXNpb24gMjE3NjQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2VkQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjMsNyArMjMsNiBAQAogCiAjaW5jbHVkZSAi
QWxsb2NhdG9yQXR0cmlidXRlcy5oIgogI2luY2x1ZGUgIkRlc3RydWN0aW9uTW9kZS5oIgotI2lu
Y2x1ZGUgIkZyZWVMaXN0LmgiCiAjaW5jbHVkZSAiSGVhcENlbGwuaCIKICNpbmNsdWRlICJJdGVy
YXRpb25TdGF0dXMuaCIKICNpbmNsdWRlICJXZWFrU2V0LmgiCkBAIC0zNiw2ICszNSw3IEBACiAK
IG5hbWVzcGFjZSBKU0MgewogICAgIAorY2xhc3MgRnJlZUxpc3Q7CiBjbGFzcyBIZWFwOwogY2xh
c3MgSlNDZWxsOwogY2xhc3MgTWFya2VkQWxsb2NhdG9yOwpAQCAtMTE3LDIxICsxMTcsMjIgQEAg
cHVibGljOgogICAgICAgICBWTSogdm0oKSBjb25zdDsKICAgICAgICAgV2Vha1NldCYgd2Vha1Nl
dCgpOwogICAgICAgICAgICAgCisgICAgICAgIGVudW0gU3dlZXBNb2RlIHsgU3dlZXBPbmx5LCBT
d2VlcFRvRnJlZUxpc3QgfTsKKwogICAgICAgICAvLyBTd2VlcGluZyBlbnN1cmVzIHRoYXQgZGVz
dHJ1Y3RvcnMgZ2V0IGNhbGxlZCBhbmQgcmVtb3ZlcyB0aGUgYmxvY2sgZnJvbSB0aGUgdW5zd2Vw
dAogICAgICAgICAvLyBzZXQuIFN3ZWVwaW5nIHRvIGZyZWUgbGlzdCBhbHNvIHJlbW92ZXMgdGhl
IGJsb2NrIGZyb20gdGhlIGVtcHR5IHNldCwgaWYgaXQgd2FzIGluIHRoYXQKICAgICAgICAgLy8g
c2V0LiBTd2VlcGluZyB3aXRoIFN3ZWVwT25seSBtYXkgYWRkIHRoaXMgYmxvY2sgdG8gdGhlIGVt
cHR5IHNldCwgaWYgdGhlIGJsb2NrIGlzIGZvdW5kCi0gICAgICAgIC8vIHRvIGJlIGVtcHR5Lgor
ICAgICAgICAvLyB0byBiZSBlbXB0eS4gVGhlIGZyZWUtbGlzdCBiZWluZyBudWxsIGltcGxpZXMg
U3dlZXBPbmx5LgogICAgICAgICAvLwogICAgICAgICAvLyBOb3RlIHRoYXQgeW91IG5lZWQgdG8g
bWFrZSBzdXJlIHRoYXQgdGhlIGVtcHR5IGJpdCByZWZsZWN0cyByZWFsaXR5LiBJZiBpdCdzIG5v
dCBzZXQKICAgICAgICAgLy8gYW5kIHRoZSBibG9jayBpcyBmcmVzaGx5IGNyZWF0ZWQsIHRoZW4g
d2UnbGwgbWFrZSB0aGUgbWlzdGFrZSBvZiBydW5uaW5nIGRlc3RydWN0b3JzIGluCiAgICAgICAg
IC8vIHRoZSBibG9jay4gSWYgaXQncyBub3Qgc2V0IGFuZCB0aGUgYmxvY2sgaGFzIG5vdGhpbmcg
bWFya2VkLCB0aGVuIHdlJ2xsIG1ha2UgdGhlCiAgICAgICAgIC8vIG1pc3Rha2Ugb2YgbWFraW5n
IGEgcG9wIGZyZWVsaXN0IHJhdGhlciB0aGFuIGEgYnVtcCBmcmVlbGlzdC4KLSAgICAgICAgZW51
bSBTd2VlcE1vZGUgeyBTd2VlcE9ubHksIFN3ZWVwVG9GcmVlTGlzdCB9OwotICAgICAgICBGcmVl
TGlzdCBzd2VlcChTd2VlcE1vZGUgPSBTd2VlcE9ubHkpOworICAgICAgICB2b2lkIHN3ZWVwKEZy
ZWVMaXN0Kik7CiAgICAgICAgIAogICAgICAgICAvLyBUaGlzIGlzIHRvIGJlIGNhbGxlZCBieSBT
dWJzcGFjZS4KICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRGVzdHJveUZ1bmM+Ci0gICAgICAg
IEZyZWVMaXN0IGZpbmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlKFN3ZWVwTW9kZSwgY29uc3QgRGVz
dHJveUZ1bmMmKTsKKyAgICAgICAgdm9pZCBmaW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZShGcmVl
TGlzdCosIGNvbnN0IERlc3Ryb3lGdW5jJik7CiAgICAgICAgIAogICAgICAgICB2b2lkIHVuc3dl
ZXBXaXRoTm9OZXdseUFsbG9jYXRlZCgpOwogICAgICAgICAKQEAgLTE0Nyw3ICsxNDgsNyBAQCBw
dWJsaWM6CiAgICAgICAgIC8vIG9mIHRoZXNlIGZ1bmN0aW9uczoKICAgICAgICAgdm9pZCBkaWRD
b25zdW1lRnJlZUxpc3QoKTsgLy8gQ2FsbCB0aGlzIG9uY2UgeW91J3ZlIGFsbG9jYXRlZCBhbGwg
dGhlIGl0ZW1zIGluIHRoZSBmcmVlIGxpc3QuCiAgICAgICAgIHZvaWQgc3RvcEFsbG9jYXRpbmco
Y29uc3QgRnJlZUxpc3QmKTsKLSAgICAgICAgRnJlZUxpc3QgcmVzdW1lQWxsb2NhdGluZygpOyAv
LyBDYWxsIHRoaXMgaWYgeW91IGNhbm9uaWNhbGl6ZWQgYSBibG9jayBmb3Igc29tZSBub24tY29s
bGVjdGlvbiByZWxhdGVkIHB1cnBvc2UuCisgICAgICAgIHZvaWQgcmVzdW1lQWxsb2NhdGluZyhG
cmVlTGlzdCYpOyAvLyBDYWxsIHRoaXMgaWYgeW91IGNhbm9uaWNhbGl6ZWQgYSBibG9jayBmb3Ig
c29tZSBub24tY29sbGVjdGlvbiByZWxhdGVkIHB1cnBvc2UuCiAgICAgICAgICAgICAKICAgICAg
ICAgc2l6ZV90IGNlbGxTaXplKCk7CiAgICAgICAgIGlubGluZSB1bnNpZ25lZCBjZWxsc1BlckJs
b2NrKCk7CkBAIC0yMTUsMTAgKzIxNiw3IEBAIHB1YmxpYzoKICAgICAgICAgTWFya3NNb2RlIG1h
cmtzTW9kZSgpOwogICAgICAgICAKICAgICAgICAgdGVtcGxhdGU8Ym9vbCwgRW1wdHlNb2RlLCBT
d2VlcE1vZGUsIFN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlLCBTY3JpYmJsZU1vZGUsIE5ld2x5QWxsb2Nh
dGVkTW9kZSwgTWFya3NNb2RlLCB0eXBlbmFtZSBEZXN0cm95RnVuYz4KLSAgICAgICAgRnJlZUxp
c3Qgc3BlY2lhbGl6ZWRTd2VlcChFbXB0eU1vZGUsIFN3ZWVwTW9kZSwgU3dlZXBEZXN0cnVjdGlv
bk1vZGUsIFNjcmliYmxlTW9kZSwgTmV3bHlBbGxvY2F0ZWRNb2RlLCBNYXJrc01vZGUsIGNvbnN0
IERlc3Ryb3lGdW5jJik7Ci0gICAgICAgIAotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
PgotICAgICAgICB2b2lkIGZvckVhY2hGcmVlQ2VsbChjb25zdCBGcmVlTGlzdCYsIGNvbnN0IEZ1
bmMmKTsKKyAgICAgICAgdm9pZCBzcGVjaWFsaXplZFN3ZWVwKEZyZWVMaXN0KiwgRW1wdHlNb2Rl
LCBTd2VlcE1vZGUsIFN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlLCBTY3JpYmJsZU1vZGUsIE5ld2x5QWxs
b2NhdGVkTW9kZSwgTWFya3NNb2RlLCBjb25zdCBEZXN0cm95RnVuYyYpOwogICAgICAgICAKICAg
ICAgICAgdm9pZCBzZXRJc0ZyZWVMaXN0ZWQoKTsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9ja0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9ja0lubGluZXMuaAkocmV2aXNpb24gMjE3
NjQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2tJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE0NSw3ICsxNDUsNyBAQCBpbmxpbmUgYm9vbCBNYXJrZWRCbG9j
azo6SGFuZGxlOjppc0ZyZWVMCiAvLyBPbmx5IHRoZSBEb2VzTm90TmVlZERlc3RydWN0aW9uIG9u
ZSBzaG91bGQgYmUgc3BlY2lhbGl6ZWQgYnkgTWFya2VkQmxvY2suCiAKIHRlbXBsYXRlPGJvb2wg
c3BlY2lhbGl6ZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6RW1wdHlNb2RlIHNwZWNpYWxpemVkRW1w
dHlNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcE1vZGUgc3BlY2lhbGl6ZWRTd2VlcE1v
ZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlIHNwZWNpYWxpemVk
RGVzdHJ1Y3Rpb25Nb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTY3JpYmJsZU1vZGUgc3BlY2lh
bGl6ZWRTY3JpYmJsZU1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6Ok5ld2x5QWxsb2NhdGVkTW9k
ZSBzcGVjaWFsaXplZE5ld2x5QWxsb2NhdGVkTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6TWFy
a3NNb2RlIHNwZWNpYWxpemVkTWFya3NNb2RlLCB0eXBlbmFtZSBEZXN0cm95RnVuYz4KLUZyZWVM
aXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxpemVkU3dlZXAoTWFya2VkQmxvY2s6Okhh
bmRsZTo6RW1wdHlNb2RlIGVtcHR5TW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBNb2Rl
IHN3ZWVwTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBEZXN0cnVjdGlvbk1vZGUgZGVz
dHJ1Y3Rpb25Nb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTY3JpYmJsZU1vZGUgc2NyaWJibGVN
b2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpOZXdseUFsbG9jYXRlZE1vZGUgbmV3bHlBbGxvY2F0
ZWRNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpNYXJrc01vZGUgbWFya3NNb2RlLCBjb25zdCBE
ZXN0cm95RnVuYyYgZGVzdHJveUZ1bmMpCit2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNp
YWxpemVkU3dlZXAoRnJlZUxpc3QqIGZyZWVMaXN0LCBNYXJrZWRCbG9jazo6SGFuZGxlOjpFbXB0
eU1vZGUgZW1wdHlNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcE1vZGUgc3dlZXBNb2Rl
LCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbk1v
ZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlNjcmliYmxlTW9kZSBzY3JpYmJsZU1vZGUsIE1hcmtl
ZEJsb2NrOjpIYW5kbGU6Ok5ld2x5QWxsb2NhdGVkTW9kZSBuZXdseUFsbG9jYXRlZE1vZGUsIE1h
cmtlZEJsb2NrOjpIYW5kbGU6Ok1hcmtzTW9kZSBtYXJrc01vZGUsIGNvbnN0IERlc3Ryb3lGdW5j
JiBkZXN0cm95RnVuYykKIHsKICAgICBpZiAoc3BlY2lhbGl6ZSkgewogICAgICAgICBlbXB0eU1v
ZGUgPSBzcGVjaWFsaXplZEVtcHR5TW9kZTsKQEAgLTE5MywxNyArMTkzLDE4IEBAIEZyZWVMaXN0
IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxpemUKICAgICAgICAgICAgIG1fYWxsb2NhdG9y
LT5zZXRJc0VtcHR5KE5vTG9ja2luZ05lY2Vzc2FyeSwgdGhpcywgdHJ1ZSk7CiAgICAgICAgIGlm
IChzcGFjZSgpLT5pc01hcmtpbmcoKSkKICAgICAgICAgICAgIGJsb2NrLm1fbG9jay51bmxvY2so
KTsKLSAgICAgICAgRnJlZUxpc3QgcmVzdWx0ID0gRnJlZUxpc3Q6OmJ1bXAocGF5bG9hZEVuZCwg
cGF5bG9hZEVuZCAtIHBheWxvYWRCZWdpbik7CisgICAgICAgIGlmIChzd2VlcE1vZGUgPT0gU3dl
ZXBUb0ZyZWVMaXN0KQorICAgICAgICAgICAgZnJlZUxpc3QtPmluaXRpYWxpemVCdW1wKHBheWxv
YWRFbmQsIHBheWxvYWRFbmQgLSBwYXlsb2FkQmVnaW4pOwogICAgICAgICBpZiAoZmFsc2UpCi0g
ICAgICAgICAgICBkYXRhTG9nKCJRdWlja2x5IHN3ZXB0IGJsb2NrICIsIFJhd1BvaW50ZXIodGhp
cyksICIgd2l0aCBjZWxsIHNpemUgIiwgY2VsbFNpemUoKSwgIiBhbmQgYXR0cmlidXRlcyAiLCBt
X2F0dHJpYnV0ZXMsICI6ICIsIHJlc3VsdCwgIlxuIik7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgICAgICAgICBkYXRhTG9nKCJRdWlja2x5IHN3ZXB0IGJsb2NrICIsIFJhd1BvaW50ZXIo
dGhpcyksICIgd2l0aCBjZWxsIHNpemUgIiwgY2VsbFNpemUoKSwgIiBhbmQgYXR0cmlidXRlcyAi
LCBtX2F0dHJpYnV0ZXMsICI6ICIsIHBvaW50ZXJEdW1wKGZyZWVMaXN0KSwgIlxuIik7CisgICAg
ICAgIHJldHVybjsKICAgICB9CiAKICAgICAvLyBUaGlzIHByb2R1Y2VzIGEgZnJlZSBsaXN0IHRo
YXQgaXMgb3JkZXJlZCBpbiByZXZlcnNlIHRocm91Z2ggdGhlIGJsb2NrLgogICAgIC8vIFRoaXMg
aXMgZmluZSwgc2luY2UgdGhlIGFsbG9jYXRpb24gY29kZSBtYWtlcyBubyBhc3N1bXB0aW9ucyBh
Ym91dCB0aGUKICAgICAvLyBvcmRlciBvZiB0aGUgZnJlZSBsaXN0LgotICAgIEZyZWVDZWxsKiBo
ZWFkID0gMDsKLSAgICBzaXplX3QgY291bnQgPSAwOworICAgIGlmIChzd2VlcE1vZGUgPT0gU3dl
ZXBUb0ZyZWVMaXN0KQorICAgICAgICBmcmVlTGlzdC0+aW5pdGlhbGl6ZUxpc3QoJmJsb2NrKTsK
ICAgICBib29sIGlzRW1wdHkgPSB0cnVlOwogICAgIFZlY3RvcjxzaXplX3Q+IGRlYWRDZWxsczsK
ICAgICBWTSYgdm0gPSAqdGhpcy0+dm0oKTsKQEAgLTIxOSwxMiArMjIwLDkgQEAgRnJlZUxpc3Qg
TWFya2VkQmxvY2s6OkhhbmRsZTo6c3BlY2lhbGl6ZQogICAgICAgICB9CiAKICAgICAgICAgaWYg
KHN3ZWVwTW9kZSA9PSBTd2VlcFRvRnJlZUxpc3QpIHsKLSAgICAgICAgICAgIEZyZWVDZWxsKiBm
cmVlQ2VsbCA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEZyZWVDZWxsKj4oY2VsbCk7CiAgICAgICAg
ICAgICBpZiAoc2NyaWJibGVNb2RlID09IFNjcmliYmxlKQotICAgICAgICAgICAgICAgIHNjcmli
YmxlKGZyZWVDZWxsLCBjZWxsU2l6ZSgpKTsKLSAgICAgICAgICAgIGZyZWVDZWxsLT5uZXh0ID0g
aGVhZDsKLSAgICAgICAgICAgIGhlYWQgPSBmcmVlQ2VsbDsKLSAgICAgICAgICAgICsrY291bnQ7
CisgICAgICAgICAgICAgICAgc2NyaWJibGUoY2VsbCwgY2VsbFNpemUoKSk7CisgICAgICAgICAg
ICBmcmVlTGlzdC0+YWRkRnJlZUNlbGwoY2VsbCk7CiAgICAgICAgIH0KICAgICB9OwogICAgIGZv
ciAoc2l6ZV90IGkgPSBmaXJzdEF0b20oKTsgaSA8IG1fZW5kQXRvbTsgaSArPSBtX2F0b21zUGVy
Q2VsbCkgewpAQCAtMjU0LDI2ICsyNTIsMjQgQEAgRnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRs
ZTo6c3BlY2lhbGl6ZQogICAgICAgICAgICAgaGFuZGxlRGVhZENlbGwoaSk7CiAgICAgfQogCi0g
ICAgRnJlZUxpc3QgcmVzdWx0ID0gRnJlZUxpc3Q6Omxpc3QoaGVhZCwgY291bnQgKiBjZWxsU2l6
ZSgpKTsKICAgICBpZiAoc3dlZXBNb2RlID09IFN3ZWVwVG9GcmVlTGlzdCkKICAgICAgICAgc2V0
SXNGcmVlTGlzdGVkKCk7CiAgICAgZWxzZSBpZiAoaXNFbXB0eSkKICAgICAgICAgbV9hbGxvY2F0
b3ItPnNldElzRW1wdHkoTm9Mb2NraW5nTmVjZXNzYXJ5LCB0aGlzLCB0cnVlKTsKICAgICBpZiAo
ZmFsc2UpCi0gICAgICAgIGRhdGFMb2coIlNsb3dseSBzd2VwdCBibG9jayAiLCBSYXdQb2ludGVy
KCZibG9jayksICIgd2l0aCBjZWxsIHNpemUgIiwgY2VsbFNpemUoKSwgIiBhbmQgYXR0cmlidXRl
cyAiLCBtX2F0dHJpYnV0ZXMsICI6ICIsIHJlc3VsdCwgIlxuIik7Ci0gICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICAgICAgZGF0YUxvZygiU2xvd2x5IHN3ZXB0IGJsb2NrICIsIFJhd1BvaW50ZXIoJmJs
b2NrKSwgIiB3aXRoIGNlbGwgc2l6ZSAiLCBjZWxsU2l6ZSgpLCAiIGFuZCBhdHRyaWJ1dGVzICIs
IG1fYXR0cmlidXRlcywgIjogIiwgcG9pbnRlckR1bXAoZnJlZUxpc3QpLCAiXG4iKTsKIH0KIAog
dGVtcGxhdGU8dHlwZW5hbWUgRGVzdHJveUZ1bmM+Ci1GcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFu
ZGxlOjpmaW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZShTd2VlcE1vZGUgc3dlZXBNb2RlLCBjb25z
dCBEZXN0cm95RnVuYyYgZGVzdHJveUZ1bmMpCit2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmZp
bmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlKEZyZWVMaXN0KiBmcmVlTGlzdCwgY29uc3QgRGVzdHJv
eUZ1bmMmIGRlc3Ryb3lGdW5jKQogeworICAgIFN3ZWVwTW9kZSBzd2VlcE1vZGUgPSBmcmVlTGlz
dCA/IFN3ZWVwVG9GcmVlTGlzdCA6IFN3ZWVwT25seTsKICAgICBTd2VlcERlc3RydWN0aW9uTW9k
ZSBkZXN0cnVjdGlvbk1vZGUgPSB0aGlzLT5zd2VlcERlc3RydWN0aW9uTW9kZSgpOwogICAgIEVt
cHR5TW9kZSBlbXB0eU1vZGUgPSB0aGlzLT5lbXB0eU1vZGUoKTsKICAgICBTY3JpYmJsZU1vZGUg
c2NyaWJibGVNb2RlID0gdGhpcy0+c2NyaWJibGVNb2RlKCk7CiAgICAgTmV3bHlBbGxvY2F0ZWRN
b2RlIG5ld2x5QWxsb2NhdGVkTW9kZSA9IHRoaXMtPm5ld2x5QWxsb2NhdGVkTW9kZSgpOwogICAg
IE1hcmtzTW9kZSBtYXJrc01vZGUgPSB0aGlzLT5tYXJrc01vZGUoKTsKIAotICAgIEZyZWVMaXN0
IHJlc3VsdDsKICAgICBhdXRvIHRyeVNwZWNpYWxpemVkID0gWyZdICgpIC0+IGJvb2wgewogICAg
ICAgICBpZiAoc3dlZXBNb2RlICE9IFN3ZWVwVG9GcmVlTGlzdCkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTI4OCwxMCArMjg0LDEwIEBAIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5k
bGU6OmZpbmlzaFN3ZWUKICAgICAgICAgCiAgICAgICAgIHN3aXRjaCAobWFya3NNb2RlKSB7CiAg
ICAgICAgIGNhc2UgTWFya3NOb3RTdGFsZToKLSAgICAgICAgICAgIHJlc3VsdCA9IHNwZWNpYWxp
emVkU3dlZXA8dHJ1ZSwgTm90RW1wdHksIFN3ZWVwVG9GcmVlTGlzdCwgQmxvY2tIYXNEZXN0cnVj
dG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBNYXJrc05vdFN0
YWxlPihJc0VtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzRGVzdHJ1Y3RvcnMsIERvbnRT
Y3JpYmJsZSwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCwgTWFya3NOb3RTdGFsZSwgZGVzdHJv
eUZ1bmMpOworICAgICAgICAgICAgc3BlY2lhbGl6ZWRTd2VlcDx0cnVlLCBOb3RFbXB0eSwgU3dl
ZXBUb0ZyZWVMaXN0LCBCbG9ja0hhc0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUsIERvZXNOb3RI
YXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzTm90U3RhbGU+KGZyZWVMaXN0LCBJc0VtcHR5LCBTd2Vl
cFRvRnJlZUxpc3QsIEJsb2NrSGFzRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9lc05vdEhh
dmVOZXdseUFsbG9jYXRlZCwgTWFya3NOb3RTdGFsZSwgZGVzdHJveUZ1bmMpOwogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGNhc2UgTWFya3NTdGFsZToKLSAgICAgICAgICAgIHJl
c3VsdCA9IHNwZWNpYWxpemVkU3dlZXA8dHJ1ZSwgTm90RW1wdHksIFN3ZWVwVG9GcmVlTGlzdCwg
QmxvY2tIYXNEZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2Nh
dGVkLCBNYXJrc1N0YWxlPihJc0VtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzRGVzdHJ1
Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCwgTWFya3NTdGFs
ZSwgZGVzdHJveUZ1bmMpOworICAgICAgICAgICAgc3BlY2lhbGl6ZWRTd2VlcDx0cnVlLCBOb3RF
bXB0eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hhc0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUs
IERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzU3RhbGU+KGZyZWVMaXN0LCBJc0VtcHR5
LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9l
c05vdEhhdmVOZXdseUFsbG9jYXRlZCwgTWFya3NTdGFsZSwgZGVzdHJveUZ1bmMpOwogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0yOTksMTAgKzI5NSwx
MCBAQCBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpmaW5pc2hTd2VlCiAgICAgfTsKICAg
ICAKICAgICBpZiAodHJ5U3BlY2lhbGl6ZWQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICAgICAgcmV0dXJuOwogICAgIAogICAgIC8vIFRoZSB0ZW1wbGF0ZSBhcmd1bWVudHMgZG9uJ3Qg
bWF0dGVyIGJlY2F1c2UgdGhlIGZpcnN0IG9uZSBpcyBmYWxzZS4KLSAgICByZXR1cm4gc3BlY2lh
bGl6ZWRTd2VlcDxmYWxzZSwgSXNFbXB0eSwgU3dlZXBPbmx5LCBCbG9ja0hhc05vRGVzdHJ1Y3Rv
cnMsIERvbnRTY3JpYmJsZSwgSGFzTmV3bHlBbGxvY2F0ZWQsIE1hcmtzU3RhbGU+KGVtcHR5TW9k
ZSwgc3dlZXBNb2RlLCBkZXN0cnVjdGlvbk1vZGUsIHNjcmliYmxlTW9kZSwgbmV3bHlBbGxvY2F0
ZWRNb2RlLCBtYXJrc01vZGUsIGRlc3Ryb3lGdW5jKTsKKyAgICBzcGVjaWFsaXplZFN3ZWVwPGZh
bHNlLCBJc0VtcHR5LCBTd2VlcE9ubHksIEJsb2NrSGFzTm9EZXN0cnVjdG9ycywgRG9udFNjcmli
YmxlLCBIYXNOZXdseUFsbG9jYXRlZCwgTWFya3NTdGFsZT4oZnJlZUxpc3QsIGVtcHR5TW9kZSwg
c3dlZXBNb2RlLCBkZXN0cnVjdGlvbk1vZGUsIHNjcmliYmxlTW9kZSwgbmV3bHlBbGxvY2F0ZWRN
b2RlLCBtYXJrc01vZGUsIGRlc3Ryb3lGdW5jKTsKIH0KIAogaW5saW5lIE1hcmtlZEJsb2NrOjpI
YW5kbGU6OlN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlIE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN3ZWVwRGVz
dHJ1Y3Rpb25Nb2RlKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5j
cHAJKHJldmlzaW9uIDIxNzY0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNw
YWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsOSArNzcsOSBAQCBTdWJzcGFjZTo6flN1YnNw
YWNlKCkKIHsKIH0KIAotRnJlZUxpc3QgU3Vic3BhY2U6OmZpbmlzaFN3ZWVwKE1hcmtlZEJsb2Nr
OjpIYW5kbGUmIGJsb2NrLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcE1vZGUgc3dlZXBNb2Rl
KQordm9pZCBTdWJzcGFjZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYgYmxvY2ss
IEZyZWVMaXN0KiBmcmVlTGlzdCkKIHsKLSAgICByZXR1cm4gYmxvY2suZmluaXNoU3dlZXBLbm93
aW5nU3Vic3BhY2Uoc3dlZXBNb2RlLCBEZXN0cm95RnVuYygpKTsKKyAgICBibG9jay5maW5pc2hT
d2VlcEtub3dpbmdTdWJzcGFjZShmcmVlTGlzdCwgRGVzdHJveUZ1bmMoKSk7CiB9CiAKIHZvaWQg
U3Vic3BhY2U6OmRlc3Ryb3koVk0mIHZtLCBKU0NlbGwqIGNlbGwpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgJKHJldmlzaW9uIDIxNzY0NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcg
QEAgcHVibGljOgogICAgIAogICAgIC8vIFRoZSBwdXJwb3NlIG9mIG92ZXJyaWRpbmcgdGhpcyBp
cyB0byBzcGVjaWFsaXplIHRoZSBzd2VlcCBmb3IgeW91ciBkZXN0cnVjdG9ycy4gVGhpcyB3b24n
dAogICAgIC8vIGJlIGNhbGxlZCBmb3Igbm8tZGVzdHJ1Y3RvciBibG9ja3MuIFRoaXMgbXVzdCBj
YWxsIE1hcmtlZEJsb2NrOjpmaW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZS4KLSAgICB2aXJ0dWFs
IEZyZWVMaXN0IGZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmLCBNYXJrZWRCbG9jazo6
SGFuZGxlOjpTd2VlcE1vZGUpOworICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hTd2VlcChNYXJrZWRC
bG9jazo6SGFuZGxlJiwgRnJlZUxpc3QqKTsKICAgICAKICAgICAvLyBUaGVzZSBnZXQgY2FsbGVk
IGZvciBsYXJnZSBvYmplY3RzLgogICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KFZNJiwgSlNDZWxs
Kik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJ
KHJldmlzaW9uIDIxNzY0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlI
ZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0NTgsNyArMTQ1OCw3IEBAIHB1YmxpYzoKICAg
ICAgICAgSnVtcCBwb3BQYXRoOwogICAgICAgICBKdW1wIGRvbmU7CiAgICAgICAgIAotICAgICAg
ICBsb2FkMzIoQWRkcmVzcyhhbGxvY2F0b3JHUFIsIE1hcmtlZEFsbG9jYXRvcjo6b2Zmc2V0T2ZG
cmVlTGlzdCgpICsgT0JKRUNUX09GRlNFVE9GKEZyZWVMaXN0LCByZW1haW5pbmcpKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBNYXJrZWRBbGxvY2F0
b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZlJlbWFpbmluZygpKSwg
cmVzdWx0R1BSKTsKICAgICAgICAgcG9wUGF0aCA9IGJyYW5jaFRlc3QzMihaZXJvLCByZXN1bHRH
UFIpOwogICAgICAgICBpZiAoYWxsb2NhdG9yKQogICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZElt
bTMyKC1hbGxvY2F0b3ItPmNlbGxTaXplKCkpLCByZXN1bHRHUFIsIHNjcmF0Y2hHUFIpOwpAQCAt
MTQ3Miw4ICsxNDcyLDggQEAgcHVibGljOgogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAg
ICAgIG5lZ1B0cihyZXN1bHRHUFIpOwotICAgICAgICBzdG9yZTMyKHNjcmF0Y2hHUFIsIEFkZHJl
c3MoYWxsb2NhdG9yR1BSLCBNYXJrZWRBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIE9C
SkVDVF9PRkZTRVRPRihGcmVlTGlzdCwgcmVtYWluaW5nKSkpOwotICAgICAgICBBZGRyZXNzIHBh
eWxvYWRFbmRBZGRyID0gQWRkcmVzcyhhbGxvY2F0b3JHUFIsIE1hcmtlZEFsbG9jYXRvcjo6b2Zm
c2V0T2ZGcmVlTGlzdCgpICsgT0JKRUNUX09GRlNFVE9GKEZyZWVMaXN0LCBwYXlsb2FkRW5kKSk7
CisgICAgICAgIHN0b3JlMzIoc2NyYXRjaEdQUiwgQWRkcmVzcyhhbGxvY2F0b3JHUFIsIE1hcmtl
ZEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mUmVtYWlu
aW5nKCkpKTsKKyAgICAgICAgQWRkcmVzcyBwYXlsb2FkRW5kQWRkciA9IEFkZHJlc3MoYWxsb2Nh
dG9yR1BSLCBNYXJrZWRBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0Ojpv
ZmZzZXRPZlBheWxvYWRFbmQoKSk7CiAgICAgICAgIGlmIChpc1g4NigpKQogICAgICAgICAgICAg
YWRkUHRyKHBheWxvYWRFbmRBZGRyLCByZXN1bHRHUFIpOwogICAgICAgICBlbHNlIHsKQEAgLTE0
ODUsMTMgKzE0ODUsMjIgQEAgcHVibGljOgogICAgICAgICAKICAgICAgICAgcG9wUGF0aC5saW5r
KHRoaXMpOwogICAgICAgICAKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKGFsbG9jYXRvckdQUiwg
TWFya2VkQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRnJl
ZUxpc3QsIGhlYWQpKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5j
aFRlc3RQdHIoWmVybywgcmVzdWx0R1BSKSk7Ci0gICAgICAgIAotICAgICAgICAvLyBUaGUgb2Jq
ZWN0IGlzIGhhbGYtYWxsb2NhdGVkOiB3ZSBoYXZlIHdoYXQgd2Uga25vdyBpcyBhIGZyZXNoIG9i
amVjdCwgYnV0Ci0gICAgICAgIC8vIGl0J3Mgc3RpbGwgb24gdGhlIEdDJ3MgZnJlZSBsaXN0Lgot
ICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0R1BSKSwgc2NyYXRjaEdQUik7Ci0gICAgICAg
IHN0b3JlUHRyKHNjcmF0Y2hHUFIsIEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBNYXJrZWRBbGxvY2F0
b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIE9CSkVDVF9PRkZTRVRPRihGcmVlTGlzdCwgaGVhZCkp
KTsKKyAgICAgICAgaWYgKGFsbG9jYXRvcikKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihhbGxvY2F0b3ItPmZyZWVMaXN0KCkuYWRkcmVzc09mTGlzdCgpKSwgc2NyYXRjaEdQUik7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhhbGxvY2F0b3JHUFIsIE1h
cmtlZEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mTGlz
dCgpKSwgc2NyYXRjaEdQUik7CisKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MoYWxsb2NhdG9yR1BS
LCBNYXJrZWRBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRP
ZkluZGV4KCkpLCByZXN1bHRHUFIpOworICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoVGVz
dDMyKFplcm8sIHJlc3VsdEdQUikpOworICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJl
c3VsdEdQUik7CisgICAgICAgIHN0b3JlMzIocmVzdWx0R1BSLCBBZGRyZXNzKGFsbG9jYXRvckdQ
UiwgTWFya2VkQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0
T2ZJbmRleCgpKSk7CisgICAgICAgIGxvYWQxNihCYXNlSW5kZXgoc2NyYXRjaEdQUiwgcmVzdWx0
R1BSLCBUaW1lc1R3byksIHJlc3VsdEdQUik7CisgICAgICAgIGlmIChpc1g4NigpKQorICAgICAg
ICAgICAgYWRkUHRyKEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBNYXJrZWRBbGxvY2F0b3I6Om9mZnNl
dE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZkJsb2NrKCkpLCByZXN1bHRHUFIpOwor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhhbGxvY2F0b3JHUFIs
IE1hcmtlZEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9m
QmxvY2soKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkUHRyKHNjcmF0Y2hHUFIsIHJl
c3VsdEdQUik7CisgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGRvbmUubGluayh0aGlzKTsK
ICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Rlc3RydWN0aWJs
ZU9iamVjdFN1YnNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlLmNwcAkocmV2aXNpb24gMjE3NjQ2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RT
dWJzcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDkgKzUyLDkgQEAgSlNEZXN0cnVjdGli
bGVPYmplY3RTdWJzcGFjZTo6fkpTRGVzdHJ1YwogewogfQogCi1GcmVlTGlzdCBKU0Rlc3RydWN0
aWJsZU9iamVjdFN1YnNwYWNlOjpmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiBoYW5k
bGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwTW9kZSBzd2VlcE1vZGUpCit2b2lkIEpTRGVz
dHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2U6OmZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUm
IGhhbmRsZSwgRnJlZUxpc3QqIGZyZWVMaXN0KQogewotICAgIHJldHVybiBoYW5kbGUuZmluaXNo
U3dlZXBLbm93aW5nU3Vic3BhY2Uoc3dlZXBNb2RlLCBEZXN0cm95RnVuYygpKTsKKyAgICBoYW5k
bGUuZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2UoZnJlZUxpc3QsIERlc3Ryb3lGdW5jKCkpOwog
fQogCiB2b2lkIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2U6OmRlc3Ryb3koVk0mIHZtLCBK
U0NlbGwqIGNlbGwpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Rlc3Ry
dWN0aWJsZU9iamVjdFN1YnNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZS5oCShyZXZpc2lvbiAyMTc2
NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVj
dFN1YnNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgcHVibGljOgogICAg
IEpTX0VYUE9SVF9QUklWQVRFIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UoQ1N0cmluZyBu
YW1lLCBIZWFwJik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+SlNEZXN0cnVjdGli
bGVPYmplY3RTdWJzcGFjZSgpOwogICAgIAotICAgIEZyZWVMaXN0IGZpbmlzaFN3ZWVwKE1hcmtl
ZEJsb2NrOjpIYW5kbGUmLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcE1vZGUpIG92ZXJyaWRl
OworICAgIHZvaWQgZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYsIEZyZWVMaXN0Kikg
b3ZlcnJpZGU7CiAgICAgdm9pZCBkZXN0cm95KFZNJiwgSlNDZWxsKikgb3ZlcnJpZGU7CiB9Owog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxl
T2JqZWN0U3Vic3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5jcHAJKHJldmlzaW9uIDIx
NzY0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFi
bGVPYmplY3RTdWJzcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDkgKzUyLDkgQEAgSlNT
ZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlOjp+SlNTZQogewogfQogCi1GcmVlTGlzdCBK
U1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2U6OmZpbmlzaFN3ZWVwKE1hcmtlZEJsb2Nr
OjpIYW5kbGUmIGhhbmRsZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBNb2RlIHN3ZWVwTW9k
ZSkKK3ZvaWQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlOjpmaW5pc2hTd2VlcChN
YXJrZWRCbG9jazo6SGFuZGxlJiBoYW5kbGUsIEZyZWVMaXN0KiBmcmVlTGlzdCkKIHsKLSAgICBy
ZXR1cm4gaGFuZGxlLmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlKHN3ZWVwTW9kZSwgRGVzdHJv
eUZ1bmMoKSk7CisgICAgaGFuZGxlLmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlKGZyZWVMaXN0
LCBEZXN0cm95RnVuYygpKTsKIH0KIAogdm9pZCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vi
c3BhY2U6OmRlc3Ryb3koVk0mIHZtLCBKU0NlbGwqIGNlbGwpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlh
YmxlT2JqZWN0U3Vic3BhY2UuaAkocmV2aXNpb24gMjE3NjQ2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRF
IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmKTsK
ICAgICBKU19FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIH5KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0
U3Vic3BhY2UoKTsKICAgICAKLSAgICBGcmVlTGlzdCBmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6
SGFuZGxlJiwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBNb2RlKSBvdmVycmlkZTsKKyAgICB2
b2lkIGZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmLCBGcmVlTGlzdCopIG92ZXJyaWRl
OwogICAgIHZvaWQgZGVzdHJveShWTSYsIEpTQ2VsbCopIG92ZXJyaWRlOwogfTsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdTdWJzcGFjZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdTdWJzcGFjZS5j
cHAJKHJldmlzaW9uIDIxNzY0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U3RyaW5nU3Vic3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw5ICs1Miw5IEBAIEpTU3Ry
aW5nU3Vic3BhY2U6On5KU1N0cmluZ1N1YnNwYWNlKCkKIHsKIH0KIAotRnJlZUxpc3QgSlNTdHJp
bmdTdWJzcGFjZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYgaGFuZGxlLCBNYXJr
ZWRCbG9jazo6SGFuZGxlOjpTd2VlcE1vZGUgc3dlZXBNb2RlKQordm9pZCBKU1N0cmluZ1N1YnNw
YWNlOjpmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiBoYW5kbGUsIEZyZWVMaXN0KiBm
cmVlTGlzdCkKIHsKLSAgICByZXR1cm4gaGFuZGxlLmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNl
KHN3ZWVwTW9kZSwgRGVzdHJveUZ1bmMoKSk7CisgICAgaGFuZGxlLmZpbmlzaFN3ZWVwS25vd2lu
Z1N1YnNwYWNlKGZyZWVMaXN0LCBEZXN0cm95RnVuYygpKTsKIH0KIAogdm9pZCBKU1N0cmluZ1N1
YnNwYWNlOjpkZXN0cm95KFZNJiB2bSwgSlNDZWxsKiBjZWxsKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdTdWJzcGFjZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nU3Vic3BhY2UuaAkocmV2aXNpb24gMjE3
NjQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdTdWJzcGFjZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRf
UFJJVkFURSBKU1N0cmluZ1N1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVhcCYpOwogICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZpcnR1YWwgfkpTU3RyaW5nU3Vic3BhY2UoKTsKICAgICAKLSAgICBGcmVl
TGlzdCBmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiwgTWFya2VkQmxvY2s6OkhhbmRs
ZTo6U3dlZXBNb2RlKSBvdmVycmlkZTsKKyAgICB2b2lkIGZpbmlzaFN3ZWVwKE1hcmtlZEJsb2Nr
OjpIYW5kbGUmLCBGcmVlTGlzdCopIG92ZXJyaWRlOwogICAgIHZvaWQgZGVzdHJveShWTSYsIEpT
Q2VsbCopIG92ZXJyaWRlOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2Uu
Y3BwCShyZXZpc2lvbiAyMTc2NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw5
ICs1Niw5IEBAIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZTo6fkpTV2ViQXMKIHsKIH0K
IAotRnJlZUxpc3QgSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlOjpmaW5pc2hTd2VlcChN
YXJrZWRCbG9jazo6SGFuZGxlJiBoYW5kbGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwTW9k
ZSBzd2VlcE1vZGUpCit2b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZTo6ZmluaXNo
U3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYgaGFuZGxlLCBGcmVlTGlzdCogZnJlZUxpc3QpCiB7
Ci0gICAgcmV0dXJuIGhhbmRsZS5maW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZShzd2VlcE1vZGUs
IERlc3Ryb3lGdW5jKCkpOworICAgIGhhbmRsZS5maW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZShm
cmVlTGlzdCwgRGVzdHJveUZ1bmMoKSk7CiB9CiAKIHZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9j
a1N1YnNwYWNlOjpkZXN0cm95KFZNJiB2bSwgSlNDZWxsKiBjZWxsKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNv
ZGVCbG9ja1N1YnNwYWNlLmgJKHJldmlzaW9uIDIxNzY0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNiw3ICszNiw3IEBAIHB1YmxpYzoKICAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2Nr
U3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJik7CiAgICAgdmlydHVhbCB+SlNXZWJBc3NlbWJs
eUNvZGVCbG9ja1N1YnNwYWNlKCk7CiAgICAgCi0gICAgRnJlZUxpc3QgZmluaXNoU3dlZXAoTWFy
a2VkQmxvY2s6OkhhbmRsZSYsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwTW9kZSkgb3ZlcnJp
ZGU7CisgICAgdm9pZCBmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiwgRnJlZUxpc3Qq
KSBvdmVycmlkZTsKICAgICB2b2lkIGRlc3Ryb3koVk0mLCBKU0NlbGwqKSBvdmVycmlkZTsKIH07
CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>311722</attachid>
            <date>2017-06-01 10:32:46 -0700</date>
            <delta_ts>2017-06-01 10:41:53 -0700</delta_ts>
            <desc>compiles in debug and runs some simple code</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>55183</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjE3NjYyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMCBA
QAorMjAxNy0wNi0wMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEdDIHNob3VsZCBrZWVwIGl0cyBmcmVlIGxpc3Qgb24gdGhlIHNpZGUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3Mjc5MworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgUHJldmlvdXNseSwgb3Vy
IGJ1bXAnbidwb3AgYWxsb2NhdG9yIHdvdWxkIHVzZSBhIGNvbnZlbnRpb25hbCBsaW5rZWQtbGlz
dCBmb3IgdGhlIGZyZWUtbGlzdC4KKyAgICAgICAgVGhlIGxpbmtlZC1saXN0IHdvdWxkIGJlIHRo
cmVhZGVkIHRocm91Z2ggZnJlZSBtZW1vcnksIGFzIGlzIHRoZSB1c3VhbCBjb252ZW50aW9uLgor
ICAgICAgICAKKyAgICAgICAgSG93ZXZlciwgaXQncyBxdWl0ZSBhIGJpdCBtb3JlIHNhbmUgdG8g
aGF2ZSB0aGUgZnJlZS1saXN0IHJlc2l6ZSBzb21ld2hlcmUgb3RoZXIgdGhhbiB0aGUgZnJlZQor
ICAgICAgICBtZW1vcnkuIFRoaXMgcHV0cyB0aGUgZnJlZS1saXN0IGluIGFuIGFycmF5LiBJdCdz
IGEgc3RhY2sgb2YgMTYtYml0IG9mZnNldHMgaW50byB0aGUgYmxvY2suCisgICAgICAgIFRoZSBh
bGxvY2F0b3IgcG9wcyBhbiBvZmZzZXQgb2ZmIHRoZSBzdGFjaywgYW5kIGFkZHMgaXQgdG8gdGhl
IGN1cnJlbnQgYmxvY2sgcG9pbnRlci4gVGhpcworICAgICAgICBpc24ndCBhbnkgc2xvd2VyIHRo
YW4gdGhlIG9sZCBsaW5rZWQtbGlzdCBmcmVlLWxpc3QsIGFuZCBpdCBtYWtlcyB3ZWlyZCBpc3N1
ZXMgZWFzaWVyIHRvIGRlYnVnLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBoZWFwL0ZyZWVMaXN0LmNwcDoKKyAgICAgICAg
KEpTQzo6RnJlZUxpc3Q6OkZyZWVMaXN0KToKKyAgICAgICAgKEpTQzo6RnJlZUxpc3Q6On5GcmVl
TGlzdCk6CisgICAgICAgIChKU0M6OkZyZWVMaXN0OjpjbGVhcik6CisgICAgICAgIChKU0M6OkZy
ZWVMaXN0Ojppbml0aWFsaXplTGlzdCk6CisgICAgICAgIChKU0M6OkZyZWVMaXN0Ojppbml0aWFs
aXplQnVtcCk6CisgICAgICAgIChKU0M6OkZyZWVMaXN0Ojpjb250YWlucyk6CisgICAgICAgIChK
U0M6OkZyZWVMaXN0OjpkdW1wKToKKyAgICAgICAgKiBoZWFwL0ZyZWVMaXN0Lmg6CisgICAgICAg
IChKU0M6OkZyZWVMaXN0OjphbGxvY2F0aW9uV2lsbEZhaWwpOgorICAgICAgICAoSlNDOjpGcmVl
TGlzdDo6b3JpZ2luYWxTaXplKToKKyAgICAgICAgKEpTQzo6RnJlZUxpc3Q6OmFkZHJlc3NPZkxp
c3QpOgorICAgICAgICAoSlNDOjpGcmVlTGlzdDo6b2Zmc2V0T2ZCbG9jayk6CisgICAgICAgIChK
U0M6OkZyZWVMaXN0OjpvZmZzZXRPZkxpc3QpOgorICAgICAgICAoSlNDOjpGcmVlTGlzdDo6b2Zm
c2V0T2ZJbmRleCk6CisgICAgICAgIChKU0M6OkZyZWVMaXN0OjpvZmZzZXRPZlBheWxvYWRFbmQp
OgorICAgICAgICAoSlNDOjpGcmVlTGlzdDo6b2Zmc2V0T2ZSZW1haW5pbmcpOgorICAgICAgICAo
SlNDOjpGcmVlTGlzdDo6b2Zmc2V0T2ZPcmlnaW5hbFNpemUpOgorICAgICAgICAoSlNDOjpGcmVl
TGlzdDo6RnJlZUxpc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpGcmVlTGlzdDo6bGlzdCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkZyZWVMaXN0OjpidW1wKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6RnJlZUxpc3Q6Om9wZXJhdG9yPT0pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpG
cmVlTGlzdDo6b3BlcmF0b3IhPSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkZyZWVMaXN0Ojpv
cGVyYXRvciBib29sKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL0ZyZWVMaXN0SW5saW5lcy5o
OiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RnJlZUxpc3Q6OmFkZEZyZWVDZWxsKToKKyAgICAgICAg
KEpTQzo6RnJlZUxpc3Q6OmFsbG9jYXRlKToKKyAgICAgICAgKEpTQzo6RnJlZUxpc3Q6OmZvckVh
Y2gpOgorICAgICAgICAoSlNDOjpGcmVlTGlzdDo6dG9PZmZzZXQpOgorICAgICAgICAoSlNDOjpG
cmVlTGlzdDo6ZnJvbU9mZnNldCk6CisgICAgICAgICogaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIu
Y3BwOgorICAgICAgICAoSlNDOjpJbmNyZW1lbnRhbFN3ZWVwZXI6OnN3ZWVwTmV4dEJsb2NrKToK
KyAgICAgICAgKiBoZWFwL01hcmtlZEFsbG9jYXRvci5jcHA6CisgICAgICAgIChKU0M6Ok1hcmtl
ZEFsbG9jYXRvcjo6TWFya2VkQWxsb2NhdG9yKToKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2Nh
dG9yOjpkaWRDb25zdW1lRnJlZUxpc3QpOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6
OnRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3RpbmcpOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxv
Y2F0b3I6OnRyeUFsbG9jYXRlSW4pOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OmFs
bG9jYXRlU2xvd0Nhc2VJbXBsKToKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjpzdG9w
QWxsb2NhdGluZyk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6cHJlcGFyZUZvckFs
bG9jYXRpb24pOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OnJlc3VtZUFsbG9jYXRp
bmcpOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OnN3ZWVwKToKKyAgICAgICAgKEpT
Qzo6TWFya2VkQWxsb2NhdG9yOjpzZXRGcmVlTGlzdCk6IERlbGV0ZWQuCisgICAgICAgICogaGVh
cC9NYXJrZWRBbGxvY2F0b3IuaDoKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjpmcmVl
TGlzdCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6aXNGcmVlTGlzdGVkQ2VsbCk6
IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9NYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmg6CisgICAg
ICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6aXNGcmVlTGlzdGVkQ2VsbCk6CisgICAgICAgIChK
U0M6Ok1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGUpOgorICAgICAgICAoSlNDOjpNYXJrZWRB
bGxvY2F0b3I6OmFsbG9jYXRlKToKKyAgICAgICAgKiBoZWFwL01hcmtlZEJsb2NrLmNwcDoKKyAg
ICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OkhhbmRsZTo6c3RvcEFsbG9jYXRpbmcpOgorICAgICAg
ICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjpsYXN0Q2hhbmNlVG9GaW5hbGl6ZSk6CisgICAg
ICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6OnJlc3VtZUFsbG9jYXRpbmcpOgorICAgICAg
ICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjp6YXApOgorICAgICAgICAoSlNDOjpNYXJrZWRC
bG9jazo6SGFuZGxlOjpzd2VlcCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6
OmlzRnJlZUxpc3RlZENlbGwpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjpm
b3JFYWNoRnJlZUNlbGwpOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvTWFya2VkQmxvY2suaDoK
KyAgICAgICAgKiBoZWFwL01hcmtlZEJsb2NrSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpNYXJr
ZWRCbG9jazo6SGFuZGxlOjpzcGVjaWFsaXplZFN3ZWVwKToKKyAgICAgICAgKEpTQzo6TWFya2Vk
QmxvY2s6OkhhbmRsZTo6ZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2UpOgorICAgICAgICAoSlND
OjpNYXJrZWRCbG9jazo6SGFuZGxlOjppc0ZyZWVMaXN0ZWRDZWxsKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBoZWFwL1N1YnNwYWNlLmNwcDoKKyAgICAgICAgKEpTQzo6U3Vic3BhY2U6OmZpbmlzaFN3
ZWVwKToKKyAgICAgICAgKiBoZWFwL1N1YnNwYWNlLmg6CisgICAgICAgICogaml0L0Fzc2VtYmx5
SGVscGVycy5oOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRBbGxvY2F0ZVdp
dGhOb25OdWxsQWxsb2NhdG9yKToKKyAgICAgICAgKiBydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0U3Vic3BhY2UuY3BwOgorICAgICAgICAoSlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNw
YWNlOjpmaW5pc2hTd2VlcCk6CisgICAgICAgICogcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVj
dFN1YnNwYWNlLmg6CisgICAgICAgICogcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0
U3Vic3BhY2UuY3BwOgorICAgICAgICAoSlNDOjpKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vi
c3BhY2U6OmZpbmlzaFN3ZWVwKToKKyAgICAgICAgKiBydW50aW1lL0pTU2VnbWVudGVkVmFyaWFi
bGVPYmplY3RTdWJzcGFjZS5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmdTdWJzcGFjZS5j
cHA6CisgICAgICAgIChKU0M6OkpTU3RyaW5nU3Vic3BhY2U6OmZpbmlzaFN3ZWVwKToKKyAgICAg
ICAgKiBydW50aW1lL0pTU3RyaW5nU3Vic3BhY2UuaDoKKyAgICAgICAgKiB3YXNtL2pzL0pTV2Vi
QXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5jcHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1i
bHlDb2RlQmxvY2tTdWJzcGFjZTo6ZmluaXNoU3dlZXApOgorICAgICAgICAqIHdhc20vanMvSlNX
ZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmg6CisKIDIwMTctMDYtMDEgIFRvbWFzIFBvcGVs
YSAgPHRwb3BlbGFAcmVkaGF0LmNvbT4sIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgog
CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCkgaW4gSW5mZXJyZWRUeXBlOjpr
aW5kRm9yRmxhZ3MoKSBvbiBCaWctRW5kaWFucwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDIxNzY0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01MDEs
NiArNTAxLDcgQEAKIAkJMEY2NEIyNzkxQTc5NTdCMjAwNkU0RTY2IC8qIENhbGxFZGdlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjRCMjc3MUE3
OTU3QjIwMDZFNEU2NiAvKiBDYWxsRWRnZS5jcHAgKi87IH07CiAJCTBGNjRCMjdBMUE3OTU3QjIw
MDZFNEU2NiAvKiBDYWxsRWRnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY2NEIyNzgxQTc5NTdCMjAwNkU0RTY2IC8qIENhbGxFZGdlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY2NEVBRjMxQzRF
Q0QwNjAwNjIxRTlCIC8qIEFpckFyZ0lubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjRFQUYyMUM0RUNEMDYwMDYyMUU5QiAvKiBBaXJBcmdJ
bmxpbmVzLmggKi87IH07CisJCTBGNjU4NUUxMUVFMDgwNUEwMDk1MTc2RCAvKiBGcmVlTGlzdElu
bGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NjU4NUUwMUVFMDgwNTcwMDk1MTc2RCAvKiBGcmVlTGlzdElubGluZXMuaCAqLzsgfTsKIAkJMEY2
NjBFMzcxRTA1MTdCOTAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjYwRTMzMUUwNTE3QjcwMDMx
NDYyQyAvKiBNYXJraW5nQ29uc3RyYWludC5jcHAgKi87IH07CiAJCTBGNjYwRTM4MUUwNTE3QkIw
MDMxNDYyQyAvKiBNYXJraW5nQ29uc3RyYWludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NjBFMzQxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdD
b25zdHJhaW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEY2NjBFMzkxRTA1MTdCRjAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50U2V0LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjYwRTM1
MUUwNTE3QjcwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3RyYWludFNldC5jcHAgKi87IH07CkBAIC0z
MDc3LDYgKzMwNzgsNyBAQAogCQkwRjY0QjI3NzFBNzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2Uu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FsbEVkZ2UuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY0QjI3ODFBNzk1N0IyMDA2RTRFNjYgLyog
Q2FsbEVkZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FsbEVkZ2UuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2NEVBRjIxQzRFQ0QwNjAwNjIxRTlCIC8q
IEFpckFyZ0lubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyQXJn
SW5saW5lcy5oOyBwYXRoID0gYjMvYWlyL0FpckFyZ0lubGluZXMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEY2NTg1RTAxRUUwODA1NzAwOTUxNzZEIC8qIEZyZWVMaXN0SW5saW5l
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGcmVlTGlzdElubGluZXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2NjBFMzMxRTA1MTdCNzAwMzE0NjJDIC8q
IE1hcmtpbmdDb25zdHJhaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IE1hcmtpbmdDb25zdHJhaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY2NjBFMzQxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hcmtpbmdDb25zdHJhaW50Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGNjYwRTM1MUUwNTE3QjcwMDMxNDYyQyAvKiBNYXJraW5nQ29u
c3RyYWludFNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYXJr
aW5nQ29uc3RyYWludFNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02MDE5
LDYgKzYwMjEsNyBAQAogCQkJCTJBODM2Mzg0MThEN0QwRUUwMDAwRUJDQyAvKiBFZGVuR0NBY3Rp
dml0eUNhbGxiYWNrLmggKi8sCiAJCQkJMEY1NTEzQTcxRDVBNjhDQjAwQzMyQkQ4IC8qIEZyZWVM
aXN0LmNwcCAqLywKIAkJCQkwRjU1MTNBNTFENUE2ODJBMDBDMzJCRDggLyogRnJlZUxpc3QuaCAq
LywKKwkJCQkwRjY1ODVFMDFFRTA4MDU3MDA5NTE3NkQgLyogRnJlZUxpc3RJbmxpbmVzLmggKi8s
CiAJCQkJMkE4MzYzODcxOEQ3RDBGRTAwMDBFQkNDIC8qIEZ1bGxHQ0FjdGl2aXR5Q2FsbGJhY2su
Y3BwICovLAogCQkJCTJBODM2Mzg4MThEN0QwRkUwMDAwRUJDQyAvKiBGdWxsR0NBY3Rpdml0eUNh
bGxiYWNrLmggKi8sCiAJCQkJMkFBQ0U2M0ExOENBNUEwMzAwRUQwMTkxIC8qIEdDQWN0aXZpdHlD
YWxsYmFjay5jcHAgKi8sCkBAIC04NjYxLDYgKzg2NjQsNyBAQAogCQkJCTBGMjM1QkVFMTcxNzhF
NzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0UHJlcGFyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGMkM2M0I3MUU2MzQzRUQwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjYyMzc5ODFBRTQ1Q0E3MDBENDAyRUEgLyogREZHUGhhbnRvbUluc2VydGlvblBo
YXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjY1ODVFMTFFRTA4MDVBMDA5NTE3NkQgLyogRnJl
ZUxpc3RJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZGQzk1QzE0RUY5MEFGMDBDNzI1
MzIgLyogREZHUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTM3QzczOEQyMUVEQjU2RTQwMDNG
MkIwQiAvKiBQYXJzZUludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjlDRUIxOUQwQkE3RDAw
QjFEMUI1IC8qIERGR1BoaUNoaWxkcmVuLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0ZyZWVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9GcmVlTGlzdC5jcHAJKHJldmlzaW9uIDIxNzY0NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0ZyZWVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYs
MjkgKzI2LDczIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRnJlZUxpc3QuaCIK
IAorI2luY2x1ZGUgIk1hcmtlZEJsb2NrLmgiCisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5o
PgorCiBuYW1lc3BhY2UgSlNDIHsKIAotYm9vbCBGcmVlTGlzdDo6Y29udGFpbnMoY29uc3Qgdm9p
ZCogdGFyZ2V0KSBjb25zdAorRnJlZUxpc3Q6OkZyZWVMaXN0KHVuc2lnbmVkIGNlbGxTaXplKQor
ICAgIDogbV9jZWxsU2l6ZShjZWxsU2l6ZSkKIHsKLSAgICBpZiAocmVtYWluaW5nKSB7Ci0gICAg
ICAgIGNvbnN0IHZvaWQqIHN0YXJ0ID0gKHBheWxvYWRFbmQgLSByZW1haW5pbmcpOwotICAgICAg
ICBjb25zdCB2b2lkKiBlbmQgPSBwYXlsb2FkRW5kOworICAgIHN0YXRpY19hc3NlcnQoTWFya2Vk
QmxvY2s6OmJsb2NrU2l6ZSA8PSAoMXUgPDwgKHNpemVvZihGcmVlT2Zmc2V0KSAqIDgpKSwgIkZy
ZWVMaXN0IGFzc3VtZXMgdGhhdCBGcmVlT2Zmc2V0IGlzIGJpZyBlbm91Z2ggdG8gZXhwcmVzcyBh
bGwgcG9zc2libGUgYmxvY2sgb2Zmc2V0cyIpOworICAgIAorICAgIG1fbGlzdFNpemUgPSBNYXJr
ZWRCbG9jazo6YmxvY2tTaXplIC8gY2VsbFNpemU7CisgICAgbV9saXN0ID0gc3RkOjptYWtlX3Vu
aXF1ZTxGcmVlT2Zmc2V0W10+KG1fbGlzdFNpemUpOworfQorCitGcmVlTGlzdDo6fkZyZWVMaXN0
KCkKK3sKK30KKwordm9pZCBGcmVlTGlzdDo6Y2xlYXIoKQoreworICAgIG1fYmxvY2sgPSBudWxs
cHRyOworICAgIG1faW5kZXggPSAwOworICAgIG1fcGF5bG9hZEVuZCA9IG51bGxwdHI7CisgICAg
bV9yZW1haW5pbmcgPSAwOworICAgIG1fb3JpZ2luYWxTaXplID0gMDsKK30KKwordm9pZCBGcmVl
TGlzdDo6aW5pdGlhbGl6ZUxpc3QoTWFya2VkQmxvY2sqIGJsb2NrKQoreworICAgIG1fYmxvY2sg
PSBibG9jazsKKyAgICBtX2luZGV4ID0gMDsKKyAgICBtX3BheWxvYWRFbmQgPSBudWxscHRyOwor
ICAgIG1fcmVtYWluaW5nID0gMDsKKyAgICBtX29yaWdpbmFsU2l6ZSA9IDA7Cit9CisKK3ZvaWQg
RnJlZUxpc3Q6OmluaXRpYWxpemVCdW1wKGNoYXIqIHBheWxvYWRFbmQsIHVuc2lnbmVkIHJlbWFp
bmluZykKK3sKKyAgICBtX2Jsb2NrID0gbnVsbHB0cjsKKyAgICBtX2luZGV4ID0gMDsKKyAgICBt
X3BheWxvYWRFbmQgPSBwYXlsb2FkRW5kOworICAgIG1fcmVtYWluaW5nID0gcmVtYWluaW5nOwor
ICAgIG1fb3JpZ2luYWxTaXplID0gcmVtYWluaW5nOworfQorCitib29sIEZyZWVMaXN0Ojpjb250
YWlucyhIZWFwQ2VsbCogdGFyZ2V0KSBjb25zdAoreworICAgIGlmIChtX3JlbWFpbmluZykgewor
ICAgICAgICBjb25zdCB2b2lkKiBzdGFydCA9IChtX3BheWxvYWRFbmQgLSBtX3JlbWFpbmluZyk7
CisgICAgICAgIGNvbnN0IHZvaWQqIGVuZCA9IG1fcGF5bG9hZEVuZDsKICAgICAgICAgcmV0dXJu
IChzdGFydCA8PSB0YXJnZXQpICYmICh0YXJnZXQgPCBlbmQpOwogICAgIH0KIAotICAgIEZyZWVD
ZWxsKiBjYW5kaWRhdGUgPSBoZWFkOwotICAgIHdoaWxlIChjYW5kaWRhdGUpIHsKLSAgICAgICAg
aWYgKGNhbmRpZGF0ZSA9PSB0YXJnZXQpCisgICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleDsg
aS0tOykgeworICAgICAgICBpZiAoZnJvbU9mZnNldChtX2xpc3RbaV0pID09IHRhcmdldCkKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBjYW5kaWRhdGUgPSBjYW5kaWRhdGUtPm5l
eHQ7CiAgICAgfQotCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiB2b2lkIEZyZWVMaXN0OjpkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7Ci0gICAgb3V0LnByaW50KCJ7aGVhZCA9ICIsIFJh
d1BvaW50ZXIoaGVhZCksICIsIHBheWxvYWRFbmQgPSAiLCBSYXdQb2ludGVyKHBheWxvYWRFbmQp
LCAiLCByZW1haW5pbmcgPSAiLCByZW1haW5pbmcsICIsIG9yaWdpbmFsU2l6ZSA9ICIsIG9yaWdp
bmFsU2l6ZSwgIn0iKTsKKyAgICBvdXQucHJpbnQoIntibG9jayA9ICIsIFJhd1BvaW50ZXIobV9i
bG9jayksICIsIGxpc3QgPSBbIik7CisgICAgQ29tbWFQcmludGVyIGNvbW1hOworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtX2luZGV4OyArK2kpCisgICAgICAgIG91dC5wcmludChjb21t
YSwgbV9saXN0W2ldKTsKKyAgICBvdXQucHJpbnQoIl0sIGluZGV4ID0gIiwgbV9pbmRleCwgIiwg
cGF5bG9hZEVuZCA9ICIsIFJhd1BvaW50ZXIobV9wYXlsb2FkRW5kKSwgIiwgcmVtYWluaW5nID0g
IiwgbV9yZW1haW5pbmcsICIsIG9yaWdpbmFsU2l6ZSA9ICIsIG1fb3JpZ2luYWxTaXplLCAifSIp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0ZyZWVMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
RnJlZUxpc3QuaAkocmV2aXNpb24gMjE3NjQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvRnJlZUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNjggKzI1LDY2IEBACiAKICNwcmFn
bWEgb25jZQogCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1By
aW50U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCi1zdHJ1Y3QgRnJlZUNlbGwgewotICAg
IEZyZWVDZWxsKiBuZXh0OwotfTsKLSAgICAgICAgCi0vLyBUaGlzIHJlcHJlc2VudGF0aW9uIG9m
IGEgRnJlZUxpc3QgaXMgY29udmVuaWVudCBmb3IgdGhlIE1hcmtlZEFsbG9jYXRvci4KLQotc3Ry
dWN0IEZyZWVMaXN0IHsKLSAgICBGcmVlQ2VsbCogaGVhZCB7IG51bGxwdHIgfTsKLSAgICBjaGFy
KiBwYXlsb2FkRW5kIHsgbnVsbHB0ciB9OwotICAgIHVuc2lnbmVkIHJlbWFpbmluZyB7IDAgfTsK
LSAgICB1bnNpZ25lZCBvcmlnaW5hbFNpemUgeyAwIH07Ci0gICAgCi0gICAgRnJlZUxpc3QoKQot
ICAgIHsKLSAgICB9Ci0gICAgCi0gICAgc3RhdGljIEZyZWVMaXN0IGxpc3QoRnJlZUNlbGwqIGhl
YWQsIHVuc2lnbmVkIGJ5dGVzKQotICAgIHsKLSAgICAgICAgRnJlZUxpc3QgcmVzdWx0OwotICAg
ICAgICByZXN1bHQuaGVhZCA9IGhlYWQ7Ci0gICAgICAgIHJlc3VsdC5yZW1haW5pbmcgPSAwOwot
ICAgICAgICByZXN1bHQub3JpZ2luYWxTaXplID0gYnl0ZXM7Ci0gICAgICAgIHJldHVybiByZXN1
bHQ7Ci0gICAgfQotICAgIAotICAgIHN0YXRpYyBGcmVlTGlzdCBidW1wKGNoYXIqIHBheWxvYWRF
bmQsIHVuc2lnbmVkIHJlbWFpbmluZykKLSAgICB7Ci0gICAgICAgIEZyZWVMaXN0IHJlc3VsdDsK
LSAgICAgICAgcmVzdWx0LnBheWxvYWRFbmQgPSBwYXlsb2FkRW5kOwotICAgICAgICByZXN1bHQu
cmVtYWluaW5nID0gcmVtYWluaW5nOwotICAgICAgICByZXN1bHQub3JpZ2luYWxTaXplID0gcmVt
YWluaW5nOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAKLSAgICBib29sIG9w
ZXJhdG9yPT0oY29uc3QgRnJlZUxpc3QmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0
dXJuIGhlYWQgPT0gb3RoZXIuaGVhZAotICAgICAgICAgICAgJiYgcGF5bG9hZEVuZCA9PSBvdGhl
ci5wYXlsb2FkRW5kCi0gICAgICAgICAgICAmJiByZW1haW5pbmcgPT0gb3RoZXIucmVtYWluaW5n
Ci0gICAgICAgICAgICAmJiBvcmlnaW5hbFNpemUgPT0gb3RoZXIub3JpZ2luYWxTaXplOwotICAg
IH0KLSAgICAKLSAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgRnJlZUxpc3QmIG90aGVyKSBjb25z
dAotICAgIHsKLSAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwotICAgIH0KLSAgICAK
LSAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVy
biAqdGhpcyAhPSBGcmVlTGlzdCgpOwotICAgIH0KK2NsYXNzIEhlYXBDZWxsOworY2xhc3MgTWFy
a2VkQmxvY2s7CiAKLSAgICBib29sIGNvbnRhaW5zKGNvbnN0IHZvaWQqIHRhcmdldCkgY29uc3Q7
Ci0KLSAgICBib29sIGFsbG9jYXRpb25XaWxsRmFpbCgpIGNvbnN0IHsgcmV0dXJuICFoZWFkICYm
ICFyZW1haW5pbmc7IH0KK2NsYXNzIEZyZWVMaXN0IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShGcmVlTGlzdCk7CisgICAgCitwdWJsaWM6CisgICAgdHlwZWRlZiB1aW50MTZfdCBGcmVlT2Zm
c2V0OworICAgIAorICAgIEZyZWVMaXN0KHVuc2lnbmVkIGNlbGxTaXplKTsKKyAgICB+RnJlZUxp
c3QoKTsKKyAgICAKKyAgICB2b2lkIGNsZWFyKCk7CisgICAgCisgICAgdm9pZCBpbml0aWFsaXpl
TGlzdChNYXJrZWRCbG9jayopOworICAgIHZvaWQgYWRkRnJlZUNlbGwoSGVhcENlbGwqKTsKKyAg
ICAKKyAgICB2b2lkIGluaXRpYWxpemVCdW1wKGNoYXIqIHBheWxvYWRFbmQsIHVuc2lnbmVkIHJl
bWFpbmluZyk7CisgICAgCisgICAgYm9vbCBhbGxvY2F0aW9uV2lsbEZhaWwoKSBjb25zdCB7IHJl
dHVybiAhbV9pbmRleCAmJiAhbV9yZW1haW5pbmc7IH0KICAgICBib29sIGFsbG9jYXRpb25XaWxs
U3VjY2VlZCgpIGNvbnN0IHsgcmV0dXJuICFhbGxvY2F0aW9uV2lsbEZhaWwoKTsgfQogICAgIAor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgSGVhcENlbGwqIGFsbG9jYXRlKGNvbnN0
IEZ1bmMmIHNsb3dQYXRoKTsKKyAgICAKKyAgICBib29sIGNvbnRhaW5zKEhlYXBDZWxsKikgY29u
c3Q7CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICB2b2lkIGZvckVhY2go
Y29uc3QgRnVuYyYpIGNvbnN0OworICAgIAorICAgIHVuc2lnbmVkIG9yaWdpbmFsU2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fb3JpZ2luYWxTaXplOyB9CisgICAgCisgICAgRnJlZU9mZnNldCogYWRk
cmVzc09mTGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdC5nZXQoKTsgfQorCisgICAgc3RhdGlj
IHB0cmRpZmZfdCBvZmZzZXRPZkJsb2NrKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZyZWVM
aXN0LCBtX2Jsb2NrKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZMaXN0KCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZyZWVMaXN0LCBtX2xpc3QpOyB9CisgICAgc3RhdGljIHB0
cmRpZmZfdCBvZmZzZXRPZkluZGV4KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZyZWVMaXN0
LCBtX2luZGV4KTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZQYXlsb2FkRW5kKCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZyZWVMaXN0LCBtX3BheWxvYWRFbmQpOyB9CisgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlJlbWFpbmluZygpIHsgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihGcmVlTGlzdCwgbV9yZW1haW5pbmcpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZz
ZXRPZk9yaWdpbmFsU2l6ZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihGcmVlTGlzdCwgbV9v
cmlnaW5hbFNpemUpOyB9CisgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7
CisgICAgCitwcml2YXRlOgorICAgIEZyZWVPZmZzZXQgdG9PZmZzZXQoSGVhcENlbGwqKSBjb25z
dDsKKyAgICBIZWFwQ2VsbCogZnJvbU9mZnNldChGcmVlT2Zmc2V0KSBjb25zdDsKKyAgICAKKyAg
ICB1bnNpZ25lZCBtX2NlbGxTaXplIHsgVUlOVF9NQVggfTsKKyAgICBNYXJrZWRCbG9jayogbV9i
bG9jayB7IG51bGxwdHIgfTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RnJlZU9mZnNldFtdPiBtX2xp
c3Q7CisgICAgdW5zaWduZWQgbV9saXN0U2l6ZSB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX2luZGV4
IHsgMCB9OworICAgIGNoYXIqIG1fcGF5bG9hZEVuZCB7IG51bGxwdHIgfTsKKyAgICB1bnNpZ25l
ZCBtX3JlbWFpbmluZyB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX29yaWdpbmFsU2l6ZSB7IDAgfTsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvRnJlZUxpc3RJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvRnJlZUxpc3RJbmxpbmVzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvRnJlZUxpc3RJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIkZyZWVMaXN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitp
bmxpbmUgdm9pZCBGcmVlTGlzdDo6YWRkRnJlZUNlbGwoSGVhcENlbGwqIGNlbGwpCit7CisgICAg
UkVMRUFTRV9BU1NFUlQobV9pbmRleCA8IG1fbGlzdFNpemUpOworICAgIG1fbGlzdFttX2luZGV4
KytdID0gdG9PZmZzZXQoY2VsbCk7CisgICAgbV9vcmlnaW5hbFNpemUgKz0gbV9jZWxsU2l6ZTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KK0hlYXBDZWxsKiBGcmVlTGlzdDo6YWxsb2Nh
dGUoY29uc3QgRnVuYyYgc2xvd1BhdGgpCit7CisgICAgdW5zaWduZWQgcmVtYWluaW5nID0gbV9y
ZW1haW5pbmc7CisgICAgaWYgKHJlbWFpbmluZykgeworICAgICAgICB1bnNpZ25lZCBjZWxsU2l6
ZSA9IG1fY2VsbFNpemU7CisgICAgICAgIHJlbWFpbmluZyAtPSBjZWxsU2l6ZTsKKyAgICAgICAg
bV9yZW1haW5pbmcgPSByZW1haW5pbmc7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8SGVh
cENlbGwqPihtX3BheWxvYWRFbmQgLSByZW1haW5pbmcgLSBjZWxsU2l6ZSk7CisgICAgfQorICAg
IAorICAgIHVuc2lnbmVkIGluZGV4ID0gbV9pbmRleDsKKyAgICBpZiAoVU5MSUtFTFkoIWluZGV4
KSkKKyAgICAgICAgcmV0dXJuIHNsb3dQYXRoKCk7CisgICAgCisgICAgLS1pbmRleDsKKyAgICBt
X2luZGV4ID0gaW5kZXg7CisgICAgcmV0dXJuIGZyb21PZmZzZXQobV9saXN0W2luZGV4XSk7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Cit2b2lkIEZyZWVMaXN0Ojpmb3JFYWNoKGNvbnN0
IEZ1bmMmIGZ1bmMpIGNvbnN0Cit7CisgICAgaWYgKG1fcmVtYWluaW5nKSB7CisgICAgICAgIGZv
ciAodW5zaWduZWQgcmVtYWluaW5nID0gbV9yZW1haW5pbmc7IHJlbWFpbmluZzsgcmVtYWluaW5n
IC09IG1fY2VsbFNpemUpCisgICAgICAgICAgICBmdW5jKGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+
KG1fcGF5bG9hZEVuZCAtIHJlbWFpbmluZykpOworICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IG1faW5kZXg7IGktLTspCisgICAgICAgICAgICBmdW5jKGZyb21PZmZzZXQo
bV9saXN0W2ldKSk7CisgICAgfQorfQorCitpbmxpbmUgRnJlZUxpc3Q6OkZyZWVPZmZzZXQgRnJl
ZUxpc3Q6OnRvT2Zmc2V0KEhlYXBDZWxsKiBjZWxsKSBjb25zdAoreworICAgIHVpbnRwdHJfdCBy
ZXN1bHQgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihjZWxsKSAtIGJpdHdpc2VfY2FzdDx1aW50
cHRyX3Q+KG1fYmxvY2spOworICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdCA8IE1hcmtlZEJsb2Nr
OjpibG9ja1NpemUpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxGcmVlT2Zmc2V0PihyZXN1bHQp
OworfQorCitpbmxpbmUgSGVhcENlbGwqIEZyZWVMaXN0Ojpmcm9tT2Zmc2V0KEZyZWVPZmZzZXQg
b2Zmc2V0KSBjb25zdAoreworICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPihzdGF0
aWNfY2FzdDx1aW50cHRyX3Q+KG9mZnNldCkgKyBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihtX2Js
b2NrKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5jcHAJKHJldmlzaW9uIDIxNzY0
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg3LDcgKzg3LDcgQEAgYm9vbCBJbmNyZW1lbnRhbFN3ZWVwZXI6
OnN3ZWVwTmV4dEJsb2NrKAogICAgIAogICAgIGlmIChibG9jaykgewogICAgICAgICBEZWZlckdD
Rm9yQVdoaWxlIGRlZmVyR0MobV92bS0+aGVhcCk7Ci0gICAgICAgIGJsb2NrLT5zd2VlcCgpOwor
ICAgICAgICBibG9jay0+c3dlZXAobnVsbHB0cik7CiAgICAgICAgIG1fdm0tPmhlYXAub2JqZWN0
U3BhY2UoKS5mcmVlT3JTaHJpbmtCbG9jayhibG9jayk7CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2Nh
dG9yLmNwcAkocmV2aXNpb24gMjE3NjQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2VkQWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsOCBAQAogbmFt
ZXNwYWNlIEpTQyB7CiAKIE1hcmtlZEFsbG9jYXRvcjo6TWFya2VkQWxsb2NhdG9yKEhlYXAqIGhl
YXAsIFN1YnNwYWNlKiBzdWJzcGFjZSwgc2l6ZV90IGNlbGxTaXplKQotICAgIDogbV9jdXJyZW50
QmxvY2soMCkKKyAgICA6IG1fZnJlZUxpc3QoY2VsbFNpemUpCisgICAgLCBtX2N1cnJlbnRCbG9j
aygwKQogICAgICwgbV9sYXN0QWN0aXZlQmxvY2soMCkKICAgICAsIG1fY2VsbFNpemUoc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KGNlbGxTaXplKSkKICAgICAsIG1fYXR0cmlidXRlcyhzdWJzcGFjZS0+
YXR0cmlidXRlcygpKQpAQCAtODgsNyArODksNyBAQCB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6ZGlk
Q29uc3VtZUZyZWVMaXN0CiAgICAgaWYgKG1fY3VycmVudEJsb2NrKQogICAgICAgICBtX2N1cnJl
bnRCbG9jay0+ZGlkQ29uc3VtZUZyZWVMaXN0KCk7CiAgICAgCi0gICAgc2V0RnJlZUxpc3QoRnJl
ZUxpc3QoKSk7CisgICAgbV9mcmVlTGlzdC5jbGVhcigpOwogICAgIG1fY3VycmVudEJsb2NrID0g
bnVsbHB0cjsKIH0KIApAQCAtOTcsNyArOTgsNyBAQCB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRy
eUFsbG9jYXRlV2l0aG91CiAgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUo
ZmFsc2UpOwogICAgIAogICAgIEFTU0VSVCghbV9jdXJyZW50QmxvY2spOwotICAgIEFTU0VSVCgh
bV9mcmVlTGlzdCk7CisgICAgQVNTRVJUKG1fZnJlZUxpc3QuYWxsb2NhdGlvbldpbGxGYWlsKCkp
OwogICAgIAogICAgIGZvciAoOzspIHsKICAgICAgICAgbV9hbGxvY2F0aW9uQ3Vyc29yID0gKG1f
Y2FuQWxsb2NhdGVCdXROb3RFbXB0eSB8IG1fZW1wdHkpLmZpbmRCaXQobV9hbGxvY2F0aW9uQ3Vy
c29yLCB0cnVlKTsKQEAgLTExMyw3ICsxMTQsNyBAQCB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRy
eUFsbG9jYXRlV2l0aG91CiAgICAgaWYgKE9wdGlvbnM6OnN0ZWFsRW1wdHlCbG9ja3NGcm9tT3Ro
ZXJBbGxvY2F0b3JzKCkKICAgICAgICAgJiYgc2hvdWxkU3RlYWxFbXB0eUJsb2Nrc0Zyb21PdGhl
ckFsbG9jYXRvcnMoKSkgewogICAgICAgICBpZiAoTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2sg
PSBtYXJrZWRTcGFjZSgpLmZpbmRFbXB0eUJsb2NrVG9TdGVhbCgpKSB7Ci0gICAgICAgICAgICBi
bG9jay0+c3dlZXAoKTsKKyAgICAgICAgICAgIGJsb2NrLT5zd2VlcChudWxscHRyKTsKICAgICAg
ICAgICAgIAogICAgICAgICAgICAgLy8gSXQncyBnb29kIHRoYXQgdGhpcyBjbGVhcnMgY2FuQWxs
b2NhdGVCdXROb3RFbXB0eSBhcyB3ZWxsIGFzIGFsbCBvdGhlciBiaXRzLAogICAgICAgICAgICAg
Ly8gYmVjYXVzZSB0aGVyZSBpcyBhIHJlbW90ZSBjaGFuY2UgdGhhdCBhIGJsb2NrIG1heSBoYXZl
IGJvdGggY2FuQWxsb2NhdGVCdXROb3RFbXB0eQpAQCAtMTM5LDExICsxNDAsMTEgQEAgdm9pZCog
TWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZUluKE1hcgogICAgIEFTU0VSVChibG9jayk7CiAg
ICAgQVNTRVJUKCFibG9jay0+aXNGcmVlTGlzdGVkKCkpOwogICAgIAotICAgIEZyZWVMaXN0IGZy
ZWVMaXN0ID0gYmxvY2stPnN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwVG9GcmVlTGlz
dCk7CisgICAgYmxvY2stPnN3ZWVwKCZtX2ZyZWVMaXN0KTsKICAgICAKICAgICAvLyBJdCdzIHBv
c3NpYmxlIHRvIHN0dW1ibGUgb24gYSBjb21wbGV0ZWx5IGZ1bGwgYmxvY2suIE1hcmtpbmcgdHJp
ZXMgdG8gcmV0aXJlIHRoZXNlLCBidXQKICAgICAvLyB0aGF0IGFsZ29yaXRobSBpcyByYWN5IGFu
ZCBtYXkgZm9yZ2V0IHRvIGRvIGl0IHNvbWV0aW1lcy4KLSAgICBpZiAoZnJlZUxpc3QuYWxsb2Nh
dGlvbldpbGxGYWlsKCkpIHsKKyAgICBpZiAobV9mcmVlTGlzdC5hbGxvY2F0aW9uV2lsbEZhaWwo
KSkgewogICAgICAgICBBU1NFUlQoYmxvY2stPmlzRnJlZUxpc3RlZCgpKTsKICAgICAgICAgYmxv
Y2stPnVuc3dlZXBXaXRoTm9OZXdseUFsbG9jYXRlZCgpOwogICAgICAgICBBU1NFUlQoIWJsb2Nr
LT5pc0ZyZWVMaXN0ZWQoKSk7CkBAIC0xNTMsMTkgKzE1NCw5IEBAIHZvaWQqIE1hcmtlZEFsbG9j
YXRvcjo6dHJ5QWxsb2NhdGVJbihNYXIKICAgICB9CiAgICAgCiAgICAgbV9jdXJyZW50QmxvY2sg
PSBibG9jazsKLSAgICBzZXRGcmVlTGlzdChmcmVlTGlzdCk7CiAgICAgCi0gICAgdm9pZCogcmVz
dWx0OwotICAgIGlmIChtX2ZyZWVMaXN0LnJlbWFpbmluZykgewotICAgICAgICB1bnNpZ25lZCBj
ZWxsU2l6ZSA9IG1fY2VsbFNpemU7Ci0gICAgICAgIG1fZnJlZUxpc3QucmVtYWluaW5nIC09IGNl
bGxTaXplOwotICAgICAgICByZXN1bHQgPSBtX2ZyZWVMaXN0LnBheWxvYWRFbmQgLSBtX2ZyZWVM
aXN0LnJlbWFpbmluZyAtIGNlbGxTaXplOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEZyZWVDZWxs
KiBoZWFkID0gbV9mcmVlTGlzdC5oZWFkOwotICAgICAgICBtX2ZyZWVMaXN0LmhlYWQgPSBoZWFk
LT5uZXh0OwotICAgICAgICByZXN1bHQgPSBoZWFkOwotICAgIH0KLSAgICBSRUxFQVNFX0FTU0VS
VChyZXN1bHQpOworICAgIHZvaWQqIHJlc3VsdCA9IG1fZnJlZUxpc3QuYWxsb2NhdGUoCisgICAg
ICAgIFtdICgpIC0+IEhlYXBDZWxsKiB7IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJl
dHVybiBudWxscHRyOyB9KTsKICAgICBzZXRJc0VkZW4oTm9Mb2NraW5nTmVjZXNzYXJ5LCBtX2N1
cnJlbnRCbG9jaywgdHJ1ZSk7CiAgICAgbWFya2VkU3BhY2UoKS5kaWRBbGxvY2F0ZUluQmxvY2so
bV9jdXJyZW50QmxvY2spOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC0yMDgsNyArMTk5LDcgQEAg
dm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3dDYXNlSQogICAgIGRvVGVzdENvbGxl
Y3Rpb25zSWZOZWVkZWQoZGVmZXJyYWxDb250ZXh0KTsKIAogICAgIEFTU0VSVCghbWFya2VkU3Bh
Y2UoKS5pc0l0ZXJhdGluZygpKTsKLSAgICBtX2hlYXAtPmRpZEFsbG9jYXRlKG1fZnJlZUxpc3Qu
b3JpZ2luYWxTaXplKTsKKyAgICBtX2hlYXAtPmRpZEFsbG9jYXRlKG1fZnJlZUxpc3Qub3JpZ2lu
YWxTaXplKCkpOwogICAgIAogICAgIGRpZENvbnN1bWVGcmVlTGlzdCgpOwogICAgIApAQCAtMzM0
LDIxICszMjUsMjEgQEAgdm9pZCBNYXJrZWRBbGxvY2F0b3I6OnN0b3BBbGxvY2F0aW5nKCkKICAg
ICAgICAgZGF0YUxvZyhSYXdQb2ludGVyKHRoaXMpLCAiOiBNYXJrZWRBbGxvY2F0b3I6OnN0b3BB
bGxvY2F0aW5nIVxuIik7CiAgICAgQVNTRVJUKCFtX2xhc3RBY3RpdmVCbG9jayk7CiAgICAgaWYg
KCFtX2N1cnJlbnRCbG9jaykgewotICAgICAgICBBU1NFUlQoIW1fZnJlZUxpc3QpOworICAgICAg
ICBBU1NFUlQobV9mcmVlTGlzdC5hbGxvY2F0aW9uV2lsbEZhaWwoKSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgCiAgICAgbV9jdXJyZW50QmxvY2stPnN0b3BBbGxvY2F0aW5nKG1fZnJl
ZUxpc3QpOwogICAgIG1fbGFzdEFjdGl2ZUJsb2NrID0gbV9jdXJyZW50QmxvY2s7CiAgICAgbV9j
dXJyZW50QmxvY2sgPSAwOwotICAgIG1fZnJlZUxpc3QgPSBGcmVlTGlzdCgpOworICAgIG1fZnJl
ZUxpc3QuY2xlYXIoKTsKIH0KIAogdm9pZCBNYXJrZWRBbGxvY2F0b3I6OnByZXBhcmVGb3JBbGxv
Y2F0aW9uKCkKIHsKICAgICBtX2xhc3RBY3RpdmVCbG9jayA9IG51bGxwdHI7CiAgICAgbV9jdXJy
ZW50QmxvY2sgPSBudWxscHRyOwotICAgIHNldEZyZWVMaXN0KEZyZWVMaXN0KCkpOworICAgIG1f
ZnJlZUxpc3QuY2xlYXIoKTsKIAogICAgIG1fYWxsb2NhdGlvbkN1cnNvciA9IDA7CiAgICAgbV9l
bXB0eUN1cnNvciA9IDA7CkBAIC0zNzEsMTcgKzM2MiwxMiBAQCB2b2lkIE1hcmtlZEFsbG9jYXRv
cjo6bGFzdENoYW5jZVRvRmluYWxpCiAgICAgICAgIH0pOwogfQogCi12b2lkIE1hcmtlZEFsbG9j
YXRvcjo6c2V0RnJlZUxpc3QoY29uc3QgRnJlZUxpc3QmIGZyZWVMaXN0KQotewotICAgIG1fZnJl
ZUxpc3QgPSBmcmVlTGlzdDsKLX0KLQogdm9pZCBNYXJrZWRBbGxvY2F0b3I6OnJlc3VtZUFsbG9j
YXRpbmcoKQogewogICAgIGlmICghbV9sYXN0QWN0aXZlQmxvY2spCiAgICAgICAgIHJldHVybjsK
IAotICAgIG1fZnJlZUxpc3QgPSBtX2xhc3RBY3RpdmVCbG9jay0+cmVzdW1lQWxsb2NhdGluZygp
OworICAgIG1fbGFzdEFjdGl2ZUJsb2NrLT5yZXN1bWVBbGxvY2F0aW5nKG1fZnJlZUxpc3QpOwog
ICAgIG1fY3VycmVudEJsb2NrID0gbV9sYXN0QWN0aXZlQmxvY2s7CiAgICAgbV9sYXN0QWN0aXZl
QmxvY2sgPSBudWxscHRyOwogfQpAQCAtNDQ1LDcgKzQzMSw3IEBAIHZvaWQgTWFya2VkQWxsb2Nh
dG9yOjpzd2VlcCgpCiAgICAgbV91bnN3ZXB0LmZvckVhY2hTZXRCaXQoCiAgICAgICAgIFsmXSAo
c2l6ZV90IGluZGV4KSB7CiAgICAgICAgICAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9jayA9
IG1fYmxvY2tzW2luZGV4XTsKLSAgICAgICAgICAgIGJsb2NrLT5zd2VlcCgpOworICAgICAgICAg
ICAgYmxvY2stPnN3ZWVwKG51bGxwdHIpOwogICAgICAgICB9KTsKIH0KIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgJKHJldmlzaW9uIDIxNzY0
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNTYsNyArMTU2LDcgQEAgcHVibGljOgogICAgIHZvaWQqIHRyeUFsbG9j
YXRlKEdDRGVmZXJyYWxDb250ZXh0KiA9IG51bGxwdHIpOwogICAgIEhlYXAqIGhlYXAoKSB7IHJl
dHVybiBtX2hlYXA7IH0KIAotICAgIGJvb2wgaXNGcmVlTGlzdGVkQ2VsbChjb25zdCB2b2lkKiB0
YXJnZXQpIGNvbnN0IHsgcmV0dXJuIG1fZnJlZUxpc3QuY29udGFpbnModGFyZ2V0KTsgfQorICAg
IGJvb2wgaXNGcmVlTGlzdGVkQ2VsbChjb25zdCB2b2lkKiB0YXJnZXQpIGNvbnN0OwogCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQmxvY2soY29uc3QgRnVuY3Rv
ciYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaE5vdEVtcHR5
QmxvY2soY29uc3QgRnVuY3RvciYpOwpAQCAtMjA5LDYgKzIwOSw4IEBAIHB1YmxpYzoKICAgICBT
dWJzcGFjZSogc3Vic3BhY2UoKSBjb25zdCB7IHJldHVybiBtX3N1YnNwYWNlOyB9CiAgICAgTWFy
a2VkU3BhY2UmIG1hcmtlZFNwYWNlKCkgY29uc3Q7CiAgICAgCisgICAgY29uc3QgRnJlZUxpc3Qm
IGZyZWVMaXN0KCkgY29uc3QgeyByZXR1cm4gbV9mcmVlTGlzdDsgfQorICAgIAogICAgIHZvaWQg
ZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgIHZvaWQgZHVtcEJpdHMoUHJpbnRTdHJlYW0m
ID0gV1RGOjpkYXRhRmlsZSgpKTsKICAgICAKQEAgLTIyNyw4ICsyMjksNiBAQCBwcml2YXRlOgog
ICAgIHZvaWQqIGFsbG9jYXRlSW4oTWFya2VkQmxvY2s6OkhhbmRsZSopOwogICAgIEFMV0FZU19J
TkxJTkUgdm9pZCBkb1Rlc3RDb2xsZWN0aW9uc0lmTmVlZGVkKEdDRGVmZXJyYWxDb250ZXh0Kik7
CiAgICAgCi0gICAgdm9pZCBzZXRGcmVlTGlzdChjb25zdCBGcmVlTGlzdCYpOwotICAgIAogICAg
IEZyZWVMaXN0IG1fZnJlZUxpc3Q7CiAgICAgCiAgICAgVmVjdG9yPE1hcmtlZEJsb2NrOjpIYW5k
bGUqPiBtX2Jsb2NrczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFs
bG9jYXRvcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmgJKHJldmlzaW9uIDIxNzY0NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvcklubGluZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMjUsNDQgKzI1LDMwIEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiRnJlZUxp
c3RJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTWFya2VkQWxsb2NhdG9yLmgiCiAKIG5hbWVzcGFjZSBK
U0MgewogCitpbmxpbmUgYm9vbCBNYXJrZWRBbGxvY2F0b3I6OmlzRnJlZUxpc3RlZENlbGwoY29u
c3Qgdm9pZCogdGFyZ2V0KSBjb25zdAoreworICAgIHJldHVybiBtX2ZyZWVMaXN0LmNvbnRhaW5z
KGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KHRhcmdldCkpOworfQorCiBBTFdBWVNfSU5MSU5FIHZv
aWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGUoR0NEZWZlcnJhbENvbnRleHQqIGRlZmVy
cmFsQ29udGV4dCkKIHsKLSAgICB1bnNpZ25lZCByZW1haW5pbmcgPSBtX2ZyZWVMaXN0LnJlbWFp
bmluZzsKLSAgICBpZiAocmVtYWluaW5nKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNlbGxTaXplID0g
bV9jZWxsU2l6ZTsKLSAgICAgICAgcmVtYWluaW5nIC09IGNlbGxTaXplOwotICAgICAgICBtX2Zy
ZWVMaXN0LnJlbWFpbmluZyA9IHJlbWFpbmluZzsKLSAgICAgICAgcmV0dXJuIG1fZnJlZUxpc3Qu
cGF5bG9hZEVuZCAtIHJlbWFpbmluZyAtIGNlbGxTaXplOwotICAgIH0KLSAgICAKLSAgICBGcmVl
Q2VsbCogaGVhZCA9IG1fZnJlZUxpc3QuaGVhZDsKLSAgICBpZiAoVU5MSUtFTFkoIWhlYWQpKQot
ICAgICAgICByZXR1cm4gdHJ5QWxsb2NhdGVTbG93Q2FzZShkZWZlcnJhbENvbnRleHQpOwotICAg
IAotICAgIG1fZnJlZUxpc3QuaGVhZCA9IGhlYWQtPm5leHQ7Ci0gICAgcmV0dXJuIGhlYWQ7Cisg
ICAgcmV0dXJuIG1fZnJlZUxpc3QuYWxsb2NhdGUoCisgICAgICAgIFsmXSAoKSAtPiBIZWFwQ2Vs
bCogeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhlYXBDZWxsKj4odHJ5QWxsb2Nh
dGVTbG93Q2FzZShkZWZlcnJhbENvbnRleHQpKTsKKyAgICAgICAgfSk7CiB9CiAKIEFMV0FZU19J
TkxJTkUgdm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZShHQ0RlZmVycmFsQ29udGV4dCog
ZGVmZXJyYWxDb250ZXh0KQogewotICAgIHVuc2lnbmVkIHJlbWFpbmluZyA9IG1fZnJlZUxpc3Qu
cmVtYWluaW5nOwotICAgIGlmIChyZW1haW5pbmcpIHsKLSAgICAgICAgdW5zaWduZWQgY2VsbFNp
emUgPSBtX2NlbGxTaXplOwotICAgICAgICByZW1haW5pbmcgLT0gY2VsbFNpemU7Ci0gICAgICAg
IG1fZnJlZUxpc3QucmVtYWluaW5nID0gcmVtYWluaW5nOwotICAgICAgICByZXR1cm4gbV9mcmVl
TGlzdC5wYXlsb2FkRW5kIC0gcmVtYWluaW5nIC0gY2VsbFNpemU7Ci0gICAgfQotICAgIAotICAg
IEZyZWVDZWxsKiBoZWFkID0gbV9mcmVlTGlzdC5oZWFkOwotICAgIGlmIChVTkxJS0VMWSghaGVh
ZCkpCi0gICAgICAgIHJldHVybiBhbGxvY2F0ZVNsb3dDYXNlKGRlZmVycmFsQ29udGV4dCk7Ci0g
ICAgCi0gICAgbV9mcmVlTGlzdC5oZWFkID0gaGVhZC0+bmV4dDsKLSAgICByZXR1cm4gaGVhZDsK
KyAgICByZXR1cm4gbV9mcmVlTGlzdC5hbGxvY2F0ZSgKKyAgICAgICAgWyZdICgpIC0+IEhlYXBD
ZWxsKiB7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SGVhcENlbGwqPihhbGxvY2F0
ZVNsb3dDYXNlKGRlZmVycmFsQ29udGV4dCkpOworICAgICAgICB9KTsKIH0KIAogdGVtcGxhdGUg
PHR5cGVuYW1lIEZ1bmN0b3I+IGlubGluZSB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6Zm9yRWFjaEJs
b2NrKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrZWRCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkQmxvY2suY3BwCShyZXZpc2lvbiAyMTc2NDYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDkgKzI2
LDExIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTWFya2VkQmxvY2suaCIKIAor
I2luY2x1ZGUgIkZyZWVMaXN0SW5saW5lcy5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1
ZGUgIkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2lu
Y2x1ZGUgIk1hcmtlZEFsbG9jYXRvcklubGluZXMuaCIKICNpbmNsdWRlICJNYXJrZWRCbG9ja0lu
bGluZXMuaCIKICNpbmNsdWRlICJTdXBlclNhbXBsZXIuaCIKICNpbmNsdWRlICJTd2VlcGluZ1Nj
b3BlLmgiCkBAIC0xMzQsOCArMTM2LDcgQEAgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzdG9w
QWxsb2NhdGluZwogICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7
CiAgICAgICAgIH0pOwogCi0gICAgZm9yRWFjaEZyZWVDZWxsKAotICAgICAgICBmcmVlTGlzdCwK
KyAgICBmcmVlTGlzdC5mb3JFYWNoKAogICAgICAgICBbJl0gKEhlYXBDZWxsKiBjZWxsKSB7CiAg
ICAgICAgICAgICBpZiAoZmFsc2UpCiAgICAgICAgICAgICAgICAgZGF0YUxvZygiRnJlZSBjZWxs
OiAiLCBSYXdQb2ludGVyKGNlbGwpLCAiXG4iKTsKQEAgLTE1NiwxMCArMTU3LDEwIEBAIHZvaWQg
TWFya2VkQmxvY2s6OkhhbmRsZTo6bGFzdENoYW5jZVRvRmkKICAgICBtX3dlYWtTZXQubGFzdENo
YW5jZVRvRmluYWxpemUoKTsKICAgICBtX25ld2x5QWxsb2NhdGVkLmNsZWFyQWxsKCk7CiAgICAg
bV9uZXdseUFsbG9jYXRlZFZlcnNpb24gPSBoZWFwKCktPm9iamVjdFNwYWNlKCkubmV3bHlBbGxv
Y2F0ZWRWZXJzaW9uKCk7Ci0gICAgc3dlZXAoKTsKKyAgICBzd2VlcChudWxscHRyKTsKIH0KIAot
RnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6cmVzdW1lQWxsb2NhdGluZygpCit2b2lkIE1h
cmtlZEJsb2NrOjpIYW5kbGU6OnJlc3VtZUFsbG9jYXRpbmcoRnJlZUxpc3QmIGZyZWVMaXN0KQog
ewogICAgIHsKICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhibG9jaygpLm1fbG9jayk7
CkBAIC0xNzMsNDAgKzE3NCwyNSBAQCBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpyZXN1
bWVBbGxvCiAgICAgICAgICAgICBpZiAoZmFsc2UpCiAgICAgICAgICAgICAgICAgZGF0YUxvZygi
VGhlcmUgYWluJ3Qgbm8gbmV3bHkgYWxsb2NhdGVkLlxuIik7CiAgICAgICAgICAgICAvLyBUaGlz
IG1lYW5zIHdlIGhhZCBhbHJlYWR5IGV4aGF1c3RlZCB0aGUgYmxvY2sgd2hlbiB3ZSBzdG9wcGVk
IGFsbG9jYXRpb24uCi0gICAgICAgICAgICByZXR1cm4gRnJlZUxpc3QoKTsKKyAgICAgICAgICAg
IGZyZWVMaXN0LmNsZWFyKCk7CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9
CiAKICAgICAvLyBSZS1jcmVhdGUgb3VyIGZyZWUgbGlzdCBmcm9tIGJlZm9yZSBzdG9wcGluZyBh
bGxvY2F0aW9uLiBOb3RlIHRoYXQgdGhpcyBtYXkgcmV0dXJuIGFuIGVtcHR5CiAgICAgLy8gZnJl
ZWxpc3QsIGluIHdoaWNoIGNhc2UgdGhlIGJsb2NrIHdpbGwgc3RpbGwgYmUgTWFya2VkIQotICAg
IHJldHVybiBzd2VlcChTd2VlcFRvRnJlZUxpc3QpOworICAgIHN3ZWVwKCZmcmVlTGlzdCk7CiB9
CiAKIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6emFwKGNvbnN0IEZyZWVMaXN0JiBmcmVlTGlz
dCkKIHsKLSAgICBmb3JFYWNoRnJlZUNlbGwoCi0gICAgICAgIGZyZWVMaXN0LAorICAgIGZyZWVM
aXN0LmZvckVhY2goCiAgICAgICAgIFsmXSAoSGVhcENlbGwqIGNlbGwpIHsKICAgICAgICAgICAg
IGlmIChtX2F0dHJpYnV0ZXMuZGVzdHJ1Y3Rpb24gPT0gTmVlZHNEZXN0cnVjdGlvbikKICAgICAg
ICAgICAgICAgICBjZWxsLT56YXAoKTsKICAgICAgICAgfSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmM+Ci12b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmZvckVhY2hGcmVlQ2VsbChjb25z
dCBGcmVlTGlzdCYgZnJlZUxpc3QsIGNvbnN0IEZ1bmMmIGZ1bmMpCi17Ci0gICAgaWYgKGZyZWVM
aXN0LnJlbWFpbmluZykgewotICAgICAgICBmb3IgKHVuc2lnbmVkIHJlbWFpbmluZyA9IGZyZWVM
aXN0LnJlbWFpbmluZzsgcmVtYWluaW5nOyByZW1haW5pbmcgLT0gY2VsbFNpemUoKSkKLSAgICAg
ICAgICAgIGZ1bmMoYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4oZnJlZUxpc3QucGF5bG9hZEVuZCAt
IHJlbWFpbmluZykpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZvciAoRnJlZUNlbGwqIGN1cnJl
bnQgPSBmcmVlTGlzdC5oZWFkOyBjdXJyZW50OykgewotICAgICAgICAgICAgRnJlZUNlbGwqIG5l
eHQgPSBjdXJyZW50LT5uZXh0OwotICAgICAgICAgICAgZnVuYyhiaXR3aXNlX2Nhc3Q8SGVhcENl
bGwqPihjdXJyZW50KSk7Ci0gICAgICAgICAgICBjdXJyZW50ID0gbmV4dDsKLSAgICAgICAgfQot
ICAgIH0KLX0KLQogdm9pZCBNYXJrZWRCbG9jazo6YWJvdXRUb01hcmtTbG93KEhlYXBWZXJzaW9u
IG1hcmtpbmdWZXJzaW9uKQogewogICAgIEFTU0VSVCh2bSgpLT5oZWFwLm9iamVjdFNwYWNlKCku
aXNNYXJraW5nKCkpOwpAQCAtNDA3LDIwICszOTMsMjIgQEAgU3Vic3BhY2UqIE1hcmtlZEJsb2Nr
OjpIYW5kbGU6OnN1YnNwYWNlKAogICAgIHJldHVybiBhbGxvY2F0b3IoKS0+c3Vic3BhY2UoKTsK
IH0KIAotRnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3dlZXAoU3dlZXBNb2RlIHN3ZWVw
TW9kZSkKK3ZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3dlZXAoRnJlZUxpc3QqIGZyZWVMaXN0
KQogewogICAgIFN3ZWVwaW5nU2NvcGUgc3dlZXBpbmdTY29wZSgqaGVhcCgpKTsKICAgICAKKyAg
ICBTd2VlcE1vZGUgc3dlZXBNb2RlID0gZnJlZUxpc3QgPyBTd2VlcFRvRnJlZUxpc3QgOiBTd2Vl
cE9ubHk7CisgICAgCiAgICAgbV9hbGxvY2F0b3ItPnNldElzVW5zd2VwdChOb0xvY2tpbmdOZWNl
c3NhcnksIHRoaXMsIGZhbHNlKTsKICAgICAKICAgICBtX3dlYWtTZXQuc3dlZXAoKTsKIAogICAg
IGlmIChzd2VlcE1vZGUgPT0gU3dlZXBPbmx5ICYmIG1fYXR0cmlidXRlcy5kZXN0cnVjdGlvbiA9
PSBEb2VzTm90TmVlZERlc3RydWN0aW9uKQotICAgICAgICByZXR1cm4gRnJlZUxpc3QoKTsKKyAg
ICAgICAgcmV0dXJuOwogCiAgICAgaWYgKFVOTElLRUxZKG1faXNGcmVlTGlzdGVkKSkgewogICAg
ICAgICBSRUxFQVNFX0FTU0VSVChzd2VlcE1vZGUgPT0gU3dlZXBUb0ZyZWVMaXN0KTsKLSAgICAg
ICAgcmV0dXJuIEZyZWVMaXN0KCk7CisgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCiAgICAg
QVNTRVJUKCFtX2FsbG9jYXRvci0+aXNBbGxvY2F0ZWQoTm9Mb2NraW5nTmVjZXNzYXJ5LCB0aGlz
KSk7CkBAIC00MjgsOCArNDE2LDEwIEBAIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN3
ZWVwKFN3ZWUKICAgICBpZiAoc3BhY2UoKS0+aXNNYXJraW5nKCkpCiAgICAgICAgIGJsb2NrKCku
bV9sb2NrLmxvY2soKTsKICAgICAKLSAgICBpZiAobV9hdHRyaWJ1dGVzLmRlc3RydWN0aW9uID09
IE5lZWRzRGVzdHJ1Y3Rpb24pCi0gICAgICAgIHJldHVybiBzdWJzcGFjZSgpLT5maW5pc2hTd2Vl
cCgqdGhpcywgc3dlZXBNb2RlKTsKKyAgICBpZiAobV9hdHRyaWJ1dGVzLmRlc3RydWN0aW9uID09
IE5lZWRzRGVzdHJ1Y3Rpb24pIHsKKyAgICAgICAgc3Vic3BhY2UoKS0+ZmluaXNoU3dlZXAoKnRo
aXMsIGZyZWVMaXN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICAKICAgICAvLyBIYW5k
bGUgdGhlIG5vLWRlc3RydWN0b3Igc3BlY2lhbGl6YXRpb25zIGhlcmUsIHNpbmNlIHdlIGhhdmUg
dGhlIG1vc3Qgb2YgdGhvc2UuIFRoaXMKICAgICAvLyBlbnN1cmVzIHRoYXQgdGhleSBkb24ndCBn
ZXQgcmUtc3BlY2lhbGl6ZWQgZm9yIGV2ZXJ5IGRlc3RydWN0b3Igc3BhY2UuCkBAIC00MzksNyAr
NDI5LDYgQEAgRnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3dlZXAoU3dlZQogICAgIE5l
d2x5QWxsb2NhdGVkTW9kZSBuZXdseUFsbG9jYXRlZE1vZGUgPSB0aGlzLT5uZXdseUFsbG9jYXRl
ZE1vZGUoKTsKICAgICBNYXJrc01vZGUgbWFya3NNb2RlID0gdGhpcy0+bWFya3NNb2RlKCk7CiAg
ICAgCi0gICAgRnJlZUxpc3QgcmVzdWx0OwogICAgIGF1dG8gdHJ5U3BlY2lhbGl6ZWQgPSBbJl0g
KCkgLT4gYm9vbCB7CiAgICAgICAgIGlmIChzd2VlcE1vZGUgIT0gU3dlZXBUb0ZyZWVMaXN0KQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNDUyLDIwICs0NDEsMjAgQEAgRnJlZUxpc3Qg
TWFya2VkQmxvY2s6OkhhbmRsZTo6c3dlZXAoU3dlZQogICAgICAgICBjYXNlIElzRW1wdHk6CiAg
ICAgICAgICAgICBzd2l0Y2ggKG1hcmtzTW9kZSkgewogICAgICAgICAgICAgY2FzZSBNYXJrc05v
dFN0YWxlOgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNwZWNpYWxpemVkU3dlZXA8dHJ1ZSwg
SXNFbXB0eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMsIERvbnRTY3Jp
YmJsZSwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCwgTWFya3NOb3RTdGFsZT4oSXNFbXB0eSwg
U3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9l
c05vdEhhdmVOZXdseUFsbG9jYXRlZCwgTWFya3NOb3RTdGFsZSwgW10gKFZNJiwgSlNDZWxsKikg
eyB9KTsKKyAgICAgICAgICAgICAgICBzcGVjaWFsaXplZFN3ZWVwPHRydWUsIElzRW1wdHksIFN3
ZWVwVG9GcmVlTGlzdCwgQmxvY2tIYXNOb0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUsIERvZXNO
b3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzTm90U3RhbGU+KGZyZWVMaXN0LCBJc0VtcHR5LCBT
d2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzTm9EZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBEb2Vz
Tm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBNYXJrc05vdFN0YWxlLCBbXSAoVk0mLCBKU0NlbGwqKSB7
IH0pOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgY2FzZSBNYXJr
c1N0YWxlOgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNwZWNpYWxpemVkU3dlZXA8dHJ1ZSwg
SXNFbXB0eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMsIERvbnRTY3Jp
YmJsZSwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCwgTWFya3NTdGFsZT4oSXNFbXB0eSwgU3dl
ZXBUb0ZyZWVMaXN0LCBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9lc05v
dEhhdmVOZXdseUFsbG9jYXRlZCwgTWFya3NTdGFsZSwgW10gKFZNJiwgSlNDZWxsKikgeyB9KTsK
KyAgICAgICAgICAgICAgICBzcGVjaWFsaXplZFN3ZWVwPHRydWUsIElzRW1wdHksIFN3ZWVwVG9G
cmVlTGlzdCwgQmxvY2tIYXNOb0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUsIERvZXNOb3RIYXZl
TmV3bHlBbGxvY2F0ZWQsIE1hcmtzU3RhbGU+KGZyZWVMaXN0LCBJc0VtcHR5LCBTd2VlcFRvRnJl
ZUxpc3QsIEJsb2NrSGFzTm9EZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5l
d2x5QWxsb2NhdGVkLCBNYXJrc1N0YWxlLCBbXSAoVk0mLCBKU0NlbGwqKSB7IH0pOwogICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgTm90RW1wdHk6CiAgICAgICAgICAgICBzd2l0Y2ggKG1hcmtzTW9kZSkg
ewogICAgICAgICAgICAgY2FzZSBNYXJrc05vdFN0YWxlOgotICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IHNwZWNpYWxpemVkU3dlZXA8dHJ1ZSwgTm90RW1wdHksIFN3ZWVwVG9GcmVlTGlzdCwgQmxv
Y2tIYXNOb0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUsIERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0
ZWQsIE1hcmtzTm90U3RhbGU+KElzRW1wdHksIFN3ZWVwVG9GcmVlTGlzdCwgQmxvY2tIYXNOb0Rl
c3RydWN0b3JzLCBEb250U2NyaWJibGUsIERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtz
Tm90U3RhbGUsIFtdIChWTSYsIEpTQ2VsbCopIHsgfSk7CisgICAgICAgICAgICAgICAgc3BlY2lh
bGl6ZWRTd2VlcDx0cnVlLCBOb3RFbXB0eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hhc05vRGVz
dHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCwgTWFya3NO
b3RTdGFsZT4oZnJlZUxpc3QsIElzRW1wdHksIFN3ZWVwVG9GcmVlTGlzdCwgQmxvY2tIYXNOb0Rl
c3RydWN0b3JzLCBEb250U2NyaWJibGUsIERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtz
Tm90U3RhbGUsIFtdIChWTSYsIEpTQ2VsbCopIHsgfSk7CiAgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgICAgICBjYXNlIE1hcmtzU3RhbGU6Ci0gICAgICAgICAgICAgICAgcmVz
dWx0ID0gc3BlY2lhbGl6ZWRTd2VlcDx0cnVlLCBOb3RFbXB0eSwgU3dlZXBUb0ZyZWVMaXN0LCBC
bG9ja0hhc05vRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9lc05vdEhhdmVOZXdseUFsbG9j
YXRlZCwgTWFya3NTdGFsZT4oSXNFbXB0eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hhc05vRGVz
dHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCwgTWFya3NT
dGFsZSwgW10gKFZNJiwgSlNDZWxsKikgeyB9KTsKKyAgICAgICAgICAgICAgICBzcGVjaWFsaXpl
ZFN3ZWVwPHRydWUsIE5vdEVtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzTm9EZXN0cnVj
dG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBNYXJrc1N0YWxl
PihmcmVlTGlzdCwgSXNFbXB0eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hhc05vRGVzdHJ1Y3Rv
cnMsIERvbnRTY3JpYmJsZSwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCwgTWFya3NTdGFsZSwg
W10gKFZNJiwgSlNDZWxsKikgeyB9KTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwpAQCAtNDc1LDEwICs0NjQsMTYgQEAgRnJl
ZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3dlZXAoU3dlZQogICAgIH07CiAgICAgCiAgICAg
aWYgKHRyeVNwZWNpYWxpemVkKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJl
dHVybjsKIAogICAgIC8vIFRoZSB0ZW1wbGF0ZSBhcmd1bWVudHMgZG9uJ3QgbWF0dGVyIGJlY2F1
c2UgdGhlIGZpcnN0IG9uZSBpcyBmYWxzZS4KLSAgICByZXR1cm4gc3BlY2lhbGl6ZWRTd2VlcDxm
YWxzZSwgSXNFbXB0eSwgU3dlZXBPbmx5LCBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMsIERvbnRTY3Jp
YmJsZSwgSGFzTmV3bHlBbGxvY2F0ZWQsIE1hcmtzU3RhbGU+KGVtcHR5TW9kZSwgc3dlZXBNb2Rl
LCBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMsIHNjcmliYmxlTW9kZSwgbmV3bHlBbGxvY2F0ZWRNb2Rl
LCBtYXJrc01vZGUsIFtdIChWTSYsIEpTQ2VsbCopIHsgfSk7CisgICAgc3BlY2lhbGl6ZWRTd2Vl
cDxmYWxzZSwgSXNFbXB0eSwgU3dlZXBPbmx5LCBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMsIERvbnRT
Y3JpYmJsZSwgSGFzTmV3bHlBbGxvY2F0ZWQsIE1hcmtzU3RhbGU+KGZyZWVMaXN0LCBlbXB0eU1v
ZGUsIHN3ZWVwTW9kZSwgQmxvY2tIYXNOb0Rlc3RydWN0b3JzLCBzY3JpYmJsZU1vZGUsIG5ld2x5
QWxsb2NhdGVkTW9kZSwgbWFya3NNb2RlLCBbXSAoVk0mLCBKU0NlbGwqKSB7IH0pOworfQorCiti
b29sIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmlzRnJlZUxpc3RlZENlbGwoY29uc3Qgdm9pZCogdGFy
Z2V0KSBjb25zdAoreworICAgIEFTU0VSVChpc0ZyZWVMaXN0ZWQoKSk7CisgICAgcmV0dXJuIG1f
YWxsb2NhdG9yLT5pc0ZyZWVMaXN0ZWRDZWxsKHRhcmdldCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCShyZXZp
c2lvbiAyMTc2NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMyw3ICsyMyw2IEBACiAKICNpbmNsdWRlICJBbGxvY2F0b3JB
dHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAiRGVzdHJ1Y3Rpb25Nb2RlLmgiCi0jaW5jbHVkZSAiRnJl
ZUxpc3QuaCIKICNpbmNsdWRlICJIZWFwQ2VsbC5oIgogI2luY2x1ZGUgIkl0ZXJhdGlvblN0YXR1
cy5oIgogI2luY2x1ZGUgIldlYWtTZXQuaCIKQEAgLTM2LDYgKzM1LDcgQEAKIAogbmFtZXNwYWNl
IEpTQyB7CiAgICAgCitjbGFzcyBGcmVlTGlzdDsKIGNsYXNzIEhlYXA7CiBjbGFzcyBKU0NlbGw7
CiBjbGFzcyBNYXJrZWRBbGxvY2F0b3I7CkBAIC0xMTcsMjEgKzExNywyMiBAQCBwdWJsaWM6CiAg
ICAgICAgIFZNKiB2bSgpIGNvbnN0OwogICAgICAgICBXZWFrU2V0JiB3ZWFrU2V0KCk7CiAgICAg
ICAgICAgICAKKyAgICAgICAgZW51bSBTd2VlcE1vZGUgeyBTd2VlcE9ubHksIFN3ZWVwVG9GcmVl
TGlzdCB9OworCiAgICAgICAgIC8vIFN3ZWVwaW5nIGVuc3VyZXMgdGhhdCBkZXN0cnVjdG9ycyBn
ZXQgY2FsbGVkIGFuZCByZW1vdmVzIHRoZSBibG9jayBmcm9tIHRoZSB1bnN3ZXB0CiAgICAgICAg
IC8vIHNldC4gU3dlZXBpbmcgdG8gZnJlZSBsaXN0IGFsc28gcmVtb3ZlcyB0aGUgYmxvY2sgZnJv
bSB0aGUgZW1wdHkgc2V0LCBpZiBpdCB3YXMgaW4gdGhhdAogICAgICAgICAvLyBzZXQuIFN3ZWVw
aW5nIHdpdGggU3dlZXBPbmx5IG1heSBhZGQgdGhpcyBibG9jayB0byB0aGUgZW1wdHkgc2V0LCBp
ZiB0aGUgYmxvY2sgaXMgZm91bmQKLSAgICAgICAgLy8gdG8gYmUgZW1wdHkuCisgICAgICAgIC8v
IHRvIGJlIGVtcHR5LiBUaGUgZnJlZS1saXN0IGJlaW5nIG51bGwgaW1wbGllcyBTd2VlcE9ubHku
CiAgICAgICAgIC8vCiAgICAgICAgIC8vIE5vdGUgdGhhdCB5b3UgbmVlZCB0byBtYWtlIHN1cmUg
dGhhdCB0aGUgZW1wdHkgYml0IHJlZmxlY3RzIHJlYWxpdHkuIElmIGl0J3Mgbm90IHNldAogICAg
ICAgICAvLyBhbmQgdGhlIGJsb2NrIGlzIGZyZXNobHkgY3JlYXRlZCwgdGhlbiB3ZSdsbCBtYWtl
IHRoZSBtaXN0YWtlIG9mIHJ1bm5pbmcgZGVzdHJ1Y3RvcnMgaW4KICAgICAgICAgLy8gdGhlIGJs
b2NrLiBJZiBpdCdzIG5vdCBzZXQgYW5kIHRoZSBibG9jayBoYXMgbm90aGluZyBtYXJrZWQsIHRo
ZW4gd2UnbGwgbWFrZSB0aGUKICAgICAgICAgLy8gbWlzdGFrZSBvZiBtYWtpbmcgYSBwb3AgZnJl
ZWxpc3QgcmF0aGVyIHRoYW4gYSBidW1wIGZyZWVsaXN0LgotICAgICAgICBlbnVtIFN3ZWVwTW9k
ZSB7IFN3ZWVwT25seSwgU3dlZXBUb0ZyZWVMaXN0IH07Ci0gICAgICAgIEZyZWVMaXN0IHN3ZWVw
KFN3ZWVwTW9kZSA9IFN3ZWVwT25seSk7CisgICAgICAgIHZvaWQgc3dlZXAoRnJlZUxpc3QqKTsK
ICAgICAgICAgCiAgICAgICAgIC8vIFRoaXMgaXMgdG8gYmUgY2FsbGVkIGJ5IFN1YnNwYWNlLgog
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBEZXN0cm95RnVuYz4KLSAgICAgICAgRnJlZUxpc3Qg
ZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2UoU3dlZXBNb2RlLCBjb25zdCBEZXN0cm95RnVuYyYp
OworICAgICAgICB2b2lkIGZpbmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlKEZyZWVMaXN0KiwgY29u
c3QgRGVzdHJveUZ1bmMmKTsKICAgICAgICAgCiAgICAgICAgIHZvaWQgdW5zd2VlcFdpdGhOb05l
d2x5QWxsb2NhdGVkKCk7CiAgICAgICAgIApAQCAtMTQ3LDcgKzE0OCw3IEBAIHB1YmxpYzoKICAg
ICAgICAgLy8gb2YgdGhlc2UgZnVuY3Rpb25zOgogICAgICAgICB2b2lkIGRpZENvbnN1bWVGcmVl
TGlzdCgpOyAvLyBDYWxsIHRoaXMgb25jZSB5b3UndmUgYWxsb2NhdGVkIGFsbCB0aGUgaXRlbXMg
aW4gdGhlIGZyZWUgbGlzdC4KICAgICAgICAgdm9pZCBzdG9wQWxsb2NhdGluZyhjb25zdCBGcmVl
TGlzdCYpOwotICAgICAgICBGcmVlTGlzdCByZXN1bWVBbGxvY2F0aW5nKCk7IC8vIENhbGwgdGhp
cyBpZiB5b3UgY2Fub25pY2FsaXplZCBhIGJsb2NrIGZvciBzb21lIG5vbi1jb2xsZWN0aW9uIHJl
bGF0ZWQgcHVycG9zZS4KKyAgICAgICAgdm9pZCByZXN1bWVBbGxvY2F0aW5nKEZyZWVMaXN0Jik7
IC8vIENhbGwgdGhpcyBpZiB5b3UgY2Fub25pY2FsaXplZCBhIGJsb2NrIGZvciBzb21lIG5vbi1j
b2xsZWN0aW9uIHJlbGF0ZWQgcHVycG9zZS4KICAgICAgICAgICAgIAogICAgICAgICBzaXplX3Qg
Y2VsbFNpemUoKTsKICAgICAgICAgaW5saW5lIHVuc2lnbmVkIGNlbGxzUGVyQmxvY2soKTsKQEAg
LTIxNSwxMCArMjE2LDcgQEAgcHVibGljOgogICAgICAgICBNYXJrc01vZGUgbWFya3NNb2RlKCk7
CiAgICAgICAgIAogICAgICAgICB0ZW1wbGF0ZTxib29sLCBFbXB0eU1vZGUsIFN3ZWVwTW9kZSwg
U3dlZXBEZXN0cnVjdGlvbk1vZGUsIFNjcmliYmxlTW9kZSwgTmV3bHlBbGxvY2F0ZWRNb2RlLCBN
YXJrc01vZGUsIHR5cGVuYW1lIERlc3Ryb3lGdW5jPgotICAgICAgICBGcmVlTGlzdCBzcGVjaWFs
aXplZFN3ZWVwKEVtcHR5TW9kZSwgU3dlZXBNb2RlLCBTd2VlcERlc3RydWN0aW9uTW9kZSwgU2Ny
aWJibGVNb2RlLCBOZXdseUFsbG9jYXRlZE1vZGUsIE1hcmtzTW9kZSwgY29uc3QgRGVzdHJveUZ1
bmMmKTsKLSAgICAgICAgCi0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci0gICAgICAg
IHZvaWQgZm9yRWFjaEZyZWVDZWxsKGNvbnN0IEZyZWVMaXN0JiwgY29uc3QgRnVuYyYpOworICAg
ICAgICB2b2lkIHNwZWNpYWxpemVkU3dlZXAoRnJlZUxpc3QqLCBFbXB0eU1vZGUsIFN3ZWVwTW9k
ZSwgU3dlZXBEZXN0cnVjdGlvbk1vZGUsIFNjcmliYmxlTW9kZSwgTmV3bHlBbGxvY2F0ZWRNb2Rl
LCBNYXJrc01vZGUsIGNvbnN0IERlc3Ryb3lGdW5jJik7CiAgICAgICAgIAogICAgICAgICB2b2lk
IHNldElzRnJlZUxpc3RlZCgpOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZEJsb2NrSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrSW5saW5lcy5oCShyZXZpc2lvbiAyMTc2NDYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9ja0lubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMTE3LDEyICsxMTcsNiBAQCBpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6SGFuZGxl
Ojppc0xpdmVDCiAgICAgcmV0dXJuIGlzTGl2ZShtYXJraW5nVmVyc2lvbiwgaXNNYXJraW5nLCBz
dGF0aWNfY2FzdDxjb25zdCBIZWFwQ2VsbCo+KHApKTsKIH0KIAotaW5saW5lIGJvb2wgTWFya2Vk
QmxvY2s6OkhhbmRsZTo6aXNGcmVlTGlzdGVkQ2VsbChjb25zdCB2b2lkKiB0YXJnZXQpIGNvbnN0
Ci17Ci0gICAgQVNTRVJUKGlzRnJlZUxpc3RlZCgpKTsKLSAgICByZXR1cm4gbV9hbGxvY2F0b3It
PmlzRnJlZUxpc3RlZENlbGwodGFyZ2V0KTsKLX0KLQogLy8gVGhlIGZvbGxvd2luZyBoYXMgdG8g
YmUgdHJ1ZSBmb3Igc3BlY2lhbGl6YXRpb24gdG8ga2ljayBpbjoKIC8vCiAvLyBzd2VlcE1vZGUg
PT0gU3dlZXBUb0ZyZWVMaXN0CkBAIC0xNDUsNyArMTM5LDcgQEAgaW5saW5lIGJvb2wgTWFya2Vk
QmxvY2s6OkhhbmRsZTo6aXNGcmVlTAogLy8gT25seSB0aGUgRG9lc05vdE5lZWREZXN0cnVjdGlv
biBvbmUgc2hvdWxkIGJlIHNwZWNpYWxpemVkIGJ5IE1hcmtlZEJsb2NrLgogCiB0ZW1wbGF0ZTxi
b29sIHNwZWNpYWxpemUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OkVtcHR5TW9kZSBzcGVjaWFsaXpl
ZEVtcHR5TW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBNb2RlIHNwZWNpYWxpemVkU3dl
ZXBNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcERlc3RydWN0aW9uTW9kZSBzcGVjaWFs
aXplZERlc3RydWN0aW9uTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U2NyaWJibGVNb2RlIHNw
ZWNpYWxpemVkU2NyaWJibGVNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpOZXdseUFsbG9jYXRl
ZE1vZGUgc3BlY2lhbGl6ZWROZXdseUFsbG9jYXRlZE1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6
Ok1hcmtzTW9kZSBzcGVjaWFsaXplZE1hcmtzTW9kZSwgdHlwZW5hbWUgRGVzdHJveUZ1bmM+Ci1G
cmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzcGVjaWFsaXplZFN3ZWVwKE1hcmtlZEJsb2Nr
OjpIYW5kbGU6OkVtcHR5TW9kZSBlbXB0eU1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVw
TW9kZSBzd2VlcE1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwRGVzdHJ1Y3Rpb25Nb2Rl
IGRlc3RydWN0aW9uTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U2NyaWJibGVNb2RlIHNjcmli
YmxlTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6TmV3bHlBbGxvY2F0ZWRNb2RlIG5ld2x5QWxs
b2NhdGVkTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6TWFya3NNb2RlIG1hcmtzTW9kZSwgY29u
c3QgRGVzdHJveUZ1bmMmIGRlc3Ryb3lGdW5jKQordm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpz
cGVjaWFsaXplZFN3ZWVwKEZyZWVMaXN0KiBmcmVlTGlzdCwgTWFya2VkQmxvY2s6OkhhbmRsZTo6
RW1wdHlNb2RlIGVtcHR5TW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBNb2RlIHN3ZWVw
TW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBEZXN0cnVjdGlvbk1vZGUgZGVzdHJ1Y3Rp
b25Nb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTY3JpYmJsZU1vZGUgc2NyaWJibGVNb2RlLCBN
YXJrZWRCbG9jazo6SGFuZGxlOjpOZXdseUFsbG9jYXRlZE1vZGUgbmV3bHlBbGxvY2F0ZWRNb2Rl
LCBNYXJrZWRCbG9jazo6SGFuZGxlOjpNYXJrc01vZGUgbWFya3NNb2RlLCBjb25zdCBEZXN0cm95
RnVuYyYgZGVzdHJveUZ1bmMpCiB7CiAgICAgaWYgKHNwZWNpYWxpemUpIHsKICAgICAgICAgZW1w
dHlNb2RlID0gc3BlY2lhbGl6ZWRFbXB0eU1vZGU7CkBAIC0xOTMsMTcgKzE4NywxOCBAQCBGcmVl
TGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzcGVjaWFsaXplCiAgICAgICAgICAgICBtX2FsbG9j
YXRvci0+c2V0SXNFbXB0eShOb0xvY2tpbmdOZWNlc3NhcnksIHRoaXMsIHRydWUpOwogICAgICAg
ICBpZiAoc3BhY2UoKS0+aXNNYXJraW5nKCkpCiAgICAgICAgICAgICBibG9jay5tX2xvY2sudW5s
b2NrKCk7Ci0gICAgICAgIEZyZWVMaXN0IHJlc3VsdCA9IEZyZWVMaXN0OjpidW1wKHBheWxvYWRF
bmQsIHBheWxvYWRFbmQgLSBwYXlsb2FkQmVnaW4pOworICAgICAgICBpZiAoc3dlZXBNb2RlID09
IFN3ZWVwVG9GcmVlTGlzdCkKKyAgICAgICAgICAgIGZyZWVMaXN0LT5pbml0aWFsaXplQnVtcChw
YXlsb2FkRW5kLCBwYXlsb2FkRW5kIC0gcGF5bG9hZEJlZ2luKTsKICAgICAgICAgaWYgKGZhbHNl
KQotICAgICAgICAgICAgZGF0YUxvZygiUXVpY2tseSBzd2VwdCBibG9jayAiLCBSYXdQb2ludGVy
KHRoaXMpLCAiIHdpdGggY2VsbCBzaXplICIsIGNlbGxTaXplKCksICIgYW5kIGF0dHJpYnV0ZXMg
IiwgbV9hdHRyaWJ1dGVzLCAiOiAiLCByZXN1bHQsICJcbiIpOwotICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgICAgICAgICAgZGF0YUxvZygiUXVpY2tseSBzd2VwdCBibG9jayAiLCBSYXdQb2lu
dGVyKHRoaXMpLCAiIHdpdGggY2VsbCBzaXplICIsIGNlbGxTaXplKCksICIgYW5kIGF0dHJpYnV0
ZXMgIiwgbV9hdHRyaWJ1dGVzLCAiOiAiLCBwb2ludGVyRHVtcChmcmVlTGlzdCksICJcbiIpOwor
ICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgLy8gVGhpcyBwcm9kdWNlcyBhIGZyZWUgbGlz
dCB0aGF0IGlzIG9yZGVyZWQgaW4gcmV2ZXJzZSB0aHJvdWdoIHRoZSBibG9jay4KICAgICAvLyBU
aGlzIGlzIGZpbmUsIHNpbmNlIHRoZSBhbGxvY2F0aW9uIGNvZGUgbWFrZXMgbm8gYXNzdW1wdGlv
bnMgYWJvdXQgdGhlCiAgICAgLy8gb3JkZXIgb2YgdGhlIGZyZWUgbGlzdC4KLSAgICBGcmVlQ2Vs
bCogaGVhZCA9IDA7Ci0gICAgc2l6ZV90IGNvdW50ID0gMDsKKyAgICBpZiAoc3dlZXBNb2RlID09
IFN3ZWVwVG9GcmVlTGlzdCkKKyAgICAgICAgZnJlZUxpc3QtPmluaXRpYWxpemVMaXN0KCZibG9j
ayk7CiAgICAgYm9vbCBpc0VtcHR5ID0gdHJ1ZTsKICAgICBWZWN0b3I8c2l6ZV90PiBkZWFkQ2Vs
bHM7CiAgICAgVk0mIHZtID0gKnRoaXMtPnZtKCk7CkBAIC0yMTksMTIgKzIxNCw5IEBAIEZyZWVM
aXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxpemUKICAgICAgICAgfQogCiAgICAgICAg
IGlmIChzd2VlcE1vZGUgPT0gU3dlZXBUb0ZyZWVMaXN0KSB7Ci0gICAgICAgICAgICBGcmVlQ2Vs
bCogZnJlZUNlbGwgPSByZWludGVycHJldF9jYXN0X3B0cjxGcmVlQ2VsbCo+KGNlbGwpOwogICAg
ICAgICAgICAgaWYgKHNjcmliYmxlTW9kZSA9PSBTY3JpYmJsZSkKLSAgICAgICAgICAgICAgICBz
Y3JpYmJsZShmcmVlQ2VsbCwgY2VsbFNpemUoKSk7Ci0gICAgICAgICAgICBmcmVlQ2VsbC0+bmV4
dCA9IGhlYWQ7Ci0gICAgICAgICAgICBoZWFkID0gZnJlZUNlbGw7Ci0gICAgICAgICAgICArK2Nv
dW50OworICAgICAgICAgICAgICAgIHNjcmliYmxlKGNlbGwsIGNlbGxTaXplKCkpOworICAgICAg
ICAgICAgZnJlZUxpc3QtPmFkZEZyZWVDZWxsKGNlbGwpOwogICAgICAgICB9CiAgICAgfTsKICAg
ICBmb3IgKHNpemVfdCBpID0gZmlyc3RBdG9tKCk7IGkgPCBtX2VuZEF0b207IGkgKz0gbV9hdG9t
c1BlckNlbGwpIHsKQEAgLTI1NCwyNiArMjQ2LDI0IEBAIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpI
YW5kbGU6OnNwZWNpYWxpemUKICAgICAgICAgICAgIGhhbmRsZURlYWRDZWxsKGkpOwogICAgIH0K
IAotICAgIEZyZWVMaXN0IHJlc3VsdCA9IEZyZWVMaXN0OjpsaXN0KGhlYWQsIGNvdW50ICogY2Vs
bFNpemUoKSk7CiAgICAgaWYgKHN3ZWVwTW9kZSA9PSBTd2VlcFRvRnJlZUxpc3QpCiAgICAgICAg
IHNldElzRnJlZUxpc3RlZCgpOwogICAgIGVsc2UgaWYgKGlzRW1wdHkpCiAgICAgICAgIG1fYWxs
b2NhdG9yLT5zZXRJc0VtcHR5KE5vTG9ja2luZ05lY2Vzc2FyeSwgdGhpcywgdHJ1ZSk7CiAgICAg
aWYgKGZhbHNlKQotICAgICAgICBkYXRhTG9nKCJTbG93bHkgc3dlcHQgYmxvY2sgIiwgUmF3UG9p
bnRlcigmYmxvY2spLCAiIHdpdGggY2VsbCBzaXplICIsIGNlbGxTaXplKCksICIgYW5kIGF0dHJp
YnV0ZXMgIiwgbV9hdHRyaWJ1dGVzLCAiOiAiLCByZXN1bHQsICJcbiIpOwotICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgICAgIGRhdGFMb2coIlNsb3dseSBzd2VwdCBibG9jayAiLCBSYXdQb2ludGVy
KCZibG9jayksICIgd2l0aCBjZWxsIHNpemUgIiwgY2VsbFNpemUoKSwgIiBhbmQgYXR0cmlidXRl
cyAiLCBtX2F0dHJpYnV0ZXMsICI6ICIsIHBvaW50ZXJEdW1wKGZyZWVMaXN0KSwgIlxuIik7CiB9
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIERlc3Ryb3lGdW5jPgotRnJlZUxpc3QgTWFya2VkQmxvY2s6
OkhhbmRsZTo6ZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2UoU3dlZXBNb2RlIHN3ZWVwTW9kZSwg
Y29uc3QgRGVzdHJveUZ1bmMmIGRlc3Ryb3lGdW5jKQordm9pZCBNYXJrZWRCbG9jazo6SGFuZGxl
OjpmaW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZShGcmVlTGlzdCogZnJlZUxpc3QsIGNvbnN0IERl
c3Ryb3lGdW5jJiBkZXN0cm95RnVuYykKIHsKKyAgICBTd2VlcE1vZGUgc3dlZXBNb2RlID0gZnJl
ZUxpc3QgPyBTd2VlcFRvRnJlZUxpc3QgOiBTd2VlcE9ubHk7CiAgICAgU3dlZXBEZXN0cnVjdGlv
bk1vZGUgZGVzdHJ1Y3Rpb25Nb2RlID0gdGhpcy0+c3dlZXBEZXN0cnVjdGlvbk1vZGUoKTsKICAg
ICBFbXB0eU1vZGUgZW1wdHlNb2RlID0gdGhpcy0+ZW1wdHlNb2RlKCk7CiAgICAgU2NyaWJibGVN
b2RlIHNjcmliYmxlTW9kZSA9IHRoaXMtPnNjcmliYmxlTW9kZSgpOwogICAgIE5ld2x5QWxsb2Nh
dGVkTW9kZSBuZXdseUFsbG9jYXRlZE1vZGUgPSB0aGlzLT5uZXdseUFsbG9jYXRlZE1vZGUoKTsK
ICAgICBNYXJrc01vZGUgbWFya3NNb2RlID0gdGhpcy0+bWFya3NNb2RlKCk7CiAKLSAgICBGcmVl
TGlzdCByZXN1bHQ7CiAgICAgYXV0byB0cnlTcGVjaWFsaXplZCA9IFsmXSAoKSAtPiBib29sIHsK
ICAgICAgICAgaWYgKHN3ZWVwTW9kZSAhPSBTd2VlcFRvRnJlZUxpc3QpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC0yODgsMTAgKzI3OCwxMCBAQCBGcmVlTGlzdCBNYXJrZWRCbG9jazo6
SGFuZGxlOjpmaW5pc2hTd2VlCiAgICAgICAgIAogICAgICAgICBzd2l0Y2ggKG1hcmtzTW9kZSkg
ewogICAgICAgICBjYXNlIE1hcmtzTm90U3RhbGU6Ci0gICAgICAgICAgICByZXN1bHQgPSBzcGVj
aWFsaXplZFN3ZWVwPHRydWUsIE5vdEVtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzRGVz
dHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCwgTWFya3NO
b3RTdGFsZT4oSXNFbXB0eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hhc0Rlc3RydWN0b3JzLCBE
b250U2NyaWJibGUsIERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzTm90U3RhbGUsIGRl
c3Ryb3lGdW5jKTsKKyAgICAgICAgICAgIHNwZWNpYWxpemVkU3dlZXA8dHJ1ZSwgTm90RW1wdHks
IFN3ZWVwVG9GcmVlTGlzdCwgQmxvY2tIYXNEZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBEb2Vz
Tm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBNYXJrc05vdFN0YWxlPihmcmVlTGlzdCwgSXNFbXB0eSwg
U3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hhc0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUsIERvZXNO
b3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzTm90U3RhbGUsIGRlc3Ryb3lGdW5jKTsKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBjYXNlIE1hcmtzU3RhbGU6Ci0gICAgICAgICAg
ICByZXN1bHQgPSBzcGVjaWFsaXplZFN3ZWVwPHRydWUsIE5vdEVtcHR5LCBTd2VlcFRvRnJlZUxp
c3QsIEJsb2NrSGFzRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9lc05vdEhhdmVOZXdseUFs
bG9jYXRlZCwgTWFya3NTdGFsZT4oSXNFbXB0eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hhc0Rl
c3RydWN0b3JzLCBEb250U2NyaWJibGUsIERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtz
U3RhbGUsIGRlc3Ryb3lGdW5jKTsKKyAgICAgICAgICAgIHNwZWNpYWxpemVkU3dlZXA8dHJ1ZSwg
Tm90RW1wdHksIFN3ZWVwVG9GcmVlTGlzdCwgQmxvY2tIYXNEZXN0cnVjdG9ycywgRG9udFNjcmli
YmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBNYXJrc1N0YWxlPihmcmVlTGlzdCwgSXNF
bXB0eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hhc0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUs
IERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzU3RhbGUsIGRlc3Ryb3lGdW5jKTsKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMjk5LDEwICsy
ODksMTAgQEAgRnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6ZmluaXNoU3dlZQogICAgIH07
CiAgICAgCiAgICAgaWYgKHRyeVNwZWNpYWxpemVkKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgICAgIHJldHVybjsKICAgICAKICAgICAvLyBUaGUgdGVtcGxhdGUgYXJndW1lbnRzIGRv
bid0IG1hdHRlciBiZWNhdXNlIHRoZSBmaXJzdCBvbmUgaXMgZmFsc2UuCi0gICAgcmV0dXJuIHNw
ZWNpYWxpemVkU3dlZXA8ZmFsc2UsIElzRW1wdHksIFN3ZWVwT25seSwgQmxvY2tIYXNOb0Rlc3Ry
dWN0b3JzLCBEb250U2NyaWJibGUsIEhhc05ld2x5QWxsb2NhdGVkLCBNYXJrc1N0YWxlPihlbXB0
eU1vZGUsIHN3ZWVwTW9kZSwgZGVzdHJ1Y3Rpb25Nb2RlLCBzY3JpYmJsZU1vZGUsIG5ld2x5QWxs
b2NhdGVkTW9kZSwgbWFya3NNb2RlLCBkZXN0cm95RnVuYyk7CisgICAgc3BlY2lhbGl6ZWRTd2Vl
cDxmYWxzZSwgSXNFbXB0eSwgU3dlZXBPbmx5LCBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMsIERvbnRT
Y3JpYmJsZSwgSGFzTmV3bHlBbGxvY2F0ZWQsIE1hcmtzU3RhbGU+KGZyZWVMaXN0LCBlbXB0eU1v
ZGUsIHN3ZWVwTW9kZSwgZGVzdHJ1Y3Rpb25Nb2RlLCBzY3JpYmJsZU1vZGUsIG5ld2x5QWxsb2Nh
dGVkTW9kZSwgbWFya3NNb2RlLCBkZXN0cm95RnVuYyk7CiB9CiAKIGlubGluZSBNYXJrZWRCbG9j
azo6SGFuZGxlOjpTd2VlcERlc3RydWN0aW9uTW9kZSBNYXJrZWRCbG9jazo6SGFuZGxlOjpzd2Vl
cERlc3RydWN0aW9uTW9kZSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJz
cGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3Bh
Y2UuY3BwCShyZXZpc2lvbiAyMTc2NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9T
dWJzcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDkgKzc3LDkgQEAgU3Vic3BhY2U6On5T
dWJzcGFjZSgpCiB7CiB9CiAKLUZyZWVMaXN0IFN1YnNwYWNlOjpmaW5pc2hTd2VlcChNYXJrZWRC
bG9jazo6SGFuZGxlJiBibG9jaywgTWFya2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBNb2RlIHN3ZWVw
TW9kZSkKK3ZvaWQgU3Vic3BhY2U6OmZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmIGJs
b2NrLCBGcmVlTGlzdCogZnJlZUxpc3QpCiB7Ci0gICAgcmV0dXJuIGJsb2NrLmZpbmlzaFN3ZWVw
S25vd2luZ1N1YnNwYWNlKHN3ZWVwTW9kZSwgRGVzdHJveUZ1bmMoKSk7CisgICAgYmxvY2suZmlu
aXNoU3dlZXBLbm93aW5nU3Vic3BhY2UoZnJlZUxpc3QsIERlc3Ryb3lGdW5jKCkpOwogfQogCiB2
b2lkIFN1YnNwYWNlOjpkZXN0cm95KFZNJiB2bSwgSlNDZWxsKiBjZWxsKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oCShyZXZpc2lvbiAyMTc2NDYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1
NCw3IEBAIHB1YmxpYzoKICAgICAKICAgICAvLyBUaGUgcHVycG9zZSBvZiBvdmVycmlkaW5nIHRo
aXMgaXMgdG8gc3BlY2lhbGl6ZSB0aGUgc3dlZXAgZm9yIHlvdXIgZGVzdHJ1Y3RvcnMuIFRoaXMg
d29uJ3QKICAgICAvLyBiZSBjYWxsZWQgZm9yIG5vLWRlc3RydWN0b3IgYmxvY2tzLiBUaGlzIG11
c3QgY2FsbCBNYXJrZWRCbG9jazo6ZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2UuCi0gICAgdmly
dHVhbCBGcmVlTGlzdCBmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiwgTWFya2VkQmxv
Y2s6OkhhbmRsZTo6U3dlZXBNb2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmluaXNoU3dlZXAoTWFy
a2VkQmxvY2s6OkhhbmRsZSYsIEZyZWVMaXN0Kik7CiAgICAgCiAgICAgLy8gVGhlc2UgZ2V0IGNh
bGxlZCBmb3IgbGFyZ2Ugb2JqZWN0cy4KICAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveShWTSYsIEpT
Q2VsbCopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVy
cy5oCShyZXZpc2lvbiAyMTc2NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2Vt
Ymx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDU4LDcgKzE0NTgsNyBAQCBwdWJsaWM6
CiAgICAgICAgIEp1bXAgcG9wUGF0aDsKICAgICAgICAgSnVtcCBkb25lOwogICAgICAgICAKLSAg
ICAgICAgbG9hZDMyKEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBNYXJrZWRBbGxvY2F0b3I6Om9mZnNl
dE9mRnJlZUxpc3QoKSArIE9CSkVDVF9PRkZTRVRPRihGcmVlTGlzdCwgcmVtYWluaW5nKSksIHJl
c3VsdEdQUik7CisgICAgICAgIGxvYWQzMihBZGRyZXNzKGFsbG9jYXRvckdQUiwgTWFya2VkQWxs
b2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZSZW1haW5pbmco
KSksIHJlc3VsdEdQUik7CiAgICAgICAgIHBvcFBhdGggPSBicmFuY2hUZXN0MzIoWmVybywgcmVz
dWx0R1BSKTsKICAgICAgICAgaWYgKGFsbG9jYXRvcikKICAgICAgICAgICAgIGFkZDMyKFRydXN0
ZWRJbW0zMigtYWxsb2NhdG9yLT5jZWxsU2l6ZSgpKSwgcmVzdWx0R1BSLCBzY3JhdGNoR1BSKTsK
QEAgLTE0NzIsOCArMTQ3Miw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgICAgICBuZWdQdHIocmVzdWx0R1BSKTsKLSAgICAgICAgc3RvcmUzMihzY3JhdGNoR1BSLCBB
ZGRyZXNzKGFsbG9jYXRvckdQUiwgTWFya2VkQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkg
KyBPQkpFQ1RfT0ZGU0VUT0YoRnJlZUxpc3QsIHJlbWFpbmluZykpKTsKLSAgICAgICAgQWRkcmVz
cyBwYXlsb2FkRW5kQWRkciA9IEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBNYXJrZWRBbGxvY2F0b3I6
Om9mZnNldE9mRnJlZUxpc3QoKSArIE9CSkVDVF9PRkZTRVRPRihGcmVlTGlzdCwgcGF5bG9hZEVu
ZCkpOworICAgICAgICBzdG9yZTMyKHNjcmF0Y2hHUFIsIEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBN
YXJrZWRBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZlJl
bWFpbmluZygpKSk7CisgICAgICAgIEFkZHJlc3MgcGF5bG9hZEVuZEFkZHIgPSBBZGRyZXNzKGFs
bG9jYXRvckdQUiwgTWFya2VkQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlz
dDo6b2Zmc2V0T2ZQYXlsb2FkRW5kKCkpOwogICAgICAgICBpZiAoaXNYODYoKSkKICAgICAgICAg
ICAgIGFkZFB0cihwYXlsb2FkRW5kQWRkciwgcmVzdWx0R1BSKTsKICAgICAgICAgZWxzZSB7CkBA
IC0xNDg1LDEzICsxNDg1LDIyIEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIHBvcFBhdGgu
bGluayh0aGlzKTsKICAgICAgICAgCi0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhhbGxvY2F0b3JH
UFIsIE1hcmtlZEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgT0JKRUNUX09GRlNFVE9G
KEZyZWVMaXN0LCBoZWFkKSksIHJlc3VsdEdQUik7Ci0gICAgICAgIHNsb3dQYXRoLmFwcGVuZChi
cmFuY2hUZXN0UHRyKFplcm8sIHJlc3VsdEdQUikpOwotICAgICAgICAKLSAgICAgICAgLy8gVGhl
IG9iamVjdCBpcyBoYWxmLWFsbG9jYXRlZDogd2UgaGF2ZSB3aGF0IHdlIGtub3cgaXMgYSBmcmVz
aCBvYmplY3QsIGJ1dAotICAgICAgICAvLyBpdCdzIHN0aWxsIG9uIHRoZSBHQydzIGZyZWUgbGlz
dC4KLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdEdQUiksIHNjcmF0Y2hHUFIpOwotICAg
ICAgICBzdG9yZVB0cihzY3JhdGNoR1BSLCBBZGRyZXNzKGFsbG9jYXRvckdQUiwgTWFya2VkQWxs
b2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRnJlZUxpc3QsIGhl
YWQpKSk7CisgICAgICAgIGlmIChhbGxvY2F0b3IpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoYWxsb2NhdG9yLT5mcmVlTGlzdCgpLmFkZHJlc3NPZkxpc3QoKSksIHNjcmF0Y2hHUFIp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYWxsb2NhdG9yR1BS
LCBNYXJrZWRBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRP
Zkxpc3QoKSksIHNjcmF0Y2hHUFIpOworCisgICAgICAgIGxvYWQzMihBZGRyZXNzKGFsbG9jYXRv
ckdQUiwgTWFya2VkQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zm
c2V0T2ZJbmRleCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5j
aFRlc3QzMihaZXJvLCByZXN1bHRHUFIpKTsKKyAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEp
LCByZXN1bHRHUFIpOworICAgICAgICBzdG9yZTMyKHJlc3VsdEdQUiwgQWRkcmVzcyhhbGxvY2F0
b3JHUFIsIE1hcmtlZEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9m
ZnNldE9mSW5kZXgoKSkpOworICAgICAgICBsb2FkMTYoQmFzZUluZGV4KHNjcmF0Y2hHUFIsIHJl
c3VsdEdQUiwgVGltZXNUd28pLCByZXN1bHRHUFIpOworICAgICAgICBpZiAoaXNYODYoKSkKKyAg
ICAgICAgICAgIGFkZFB0cihBZGRyZXNzKGFsbG9jYXRvckdQUiwgTWFya2VkQWxsb2NhdG9yOjpv
ZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZCbG9jaygpKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYWxsb2NhdG9y
R1BSLCBNYXJrZWRBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZz
ZXRPZkJsb2NrKCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZFB0cihzY3JhdGNoR1BS
LCByZXN1bHRHUFIpOworICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBkb25lLmxpbmsodGhp
cyk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVj
dGlibGVPYmplY3RTdWJzcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZS5jcHAJKHJldmlzaW9uIDIx
NzY0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0U3Vic3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw5ICs1Miw5IEBAIEpTRGVzdHJ1
Y3RpYmxlT2JqZWN0U3Vic3BhY2U6On5KU0Rlc3RydWMKIHsKIH0KIAotRnJlZUxpc3QgSlNEZXN0
cnVjdGlibGVPYmplY3RTdWJzcGFjZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYg
aGFuZGxlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcE1vZGUgc3dlZXBNb2RlKQordm9pZCBK
U0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlOjpmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFu
ZGxlJiBoYW5kbGUsIEZyZWVMaXN0KiBmcmVlTGlzdCkKIHsKLSAgICByZXR1cm4gaGFuZGxlLmZp
bmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlKHN3ZWVwTW9kZSwgRGVzdHJveUZ1bmMoKSk7CisgICAg
aGFuZGxlLmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlKGZyZWVMaXN0LCBEZXN0cm95RnVuYygp
KTsKIH0KIAogdm9pZCBKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlOjpkZXN0cm95KFZNJiB2
bSwgSlNDZWxsKiBjZWxsKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNE
ZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UuaAkocmV2aXNpb24g
MjE3NjQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVP
YmplY3RTdWJzcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIHB1YmxpYzoK
ICAgICBKU19FWFBPUlRfUFJJVkFURSBKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlKENTdHJp
bmcgbmFtZSwgSGVhcCYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgfkpTRGVzdHJ1
Y3RpYmxlT2JqZWN0U3Vic3BhY2UoKTsKICAgICAKLSAgICBGcmVlTGlzdCBmaW5pc2hTd2VlcChN
YXJrZWRCbG9jazo6SGFuZGxlJiwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBNb2RlKSBvdmVy
cmlkZTsKKyAgICB2b2lkIGZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmLCBGcmVlTGlz
dCopIG92ZXJyaWRlOwogICAgIHZvaWQgZGVzdHJveShWTSYsIEpTQ2VsbCopIG92ZXJyaWRlOwog
fTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJp
YWJsZU9iamVjdFN1YnNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UuY3BwCShyZXZpc2lv
biAyMTc2NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZh
cmlhYmxlT2JqZWN0U3Vic3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw5ICs1Miw5IEBA
IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZTo6fkpTU2UKIHsKIH0KIAotRnJlZUxp
c3QgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlOjpmaW5pc2hTd2VlcChNYXJrZWRC
bG9jazo6SGFuZGxlJiBoYW5kbGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwTW9kZSBzd2Vl
cE1vZGUpCit2b2lkIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZTo6ZmluaXNoU3dl
ZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYgaGFuZGxlLCBGcmVlTGlzdCogZnJlZUxpc3QpCiB7Ci0g
ICAgcmV0dXJuIGhhbmRsZS5maW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZShzd2VlcE1vZGUsIERl
c3Ryb3lGdW5jKCkpOworICAgIGhhbmRsZS5maW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZShmcmVl
TGlzdCwgRGVzdHJveUZ1bmMoKSk7CiB9CiAKIHZvaWQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVj
dFN1YnNwYWNlOjpkZXN0cm95KFZNJiB2bSwgSlNDZWxsKiBjZWxsKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRW
YXJpYWJsZU9iamVjdFN1YnNwYWNlLmgJKHJldmlzaW9uIDIxNzY0NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJ
VkFURSBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFw
Jik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+SlNTZWdtZW50ZWRWYXJpYWJsZU9i
amVjdFN1YnNwYWNlKCk7CiAgICAgCi0gICAgRnJlZUxpc3QgZmluaXNoU3dlZXAoTWFya2VkQmxv
Y2s6OkhhbmRsZSYsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwTW9kZSkgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiwgRnJlZUxpc3QqKSBvdmVy
cmlkZTsKICAgICB2b2lkIGRlc3Ryb3koVk0mLCBKU0NlbGwqKSBvdmVycmlkZTsKIH07CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nU3Vic3BhY2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nU3Vic3Bh
Y2UuY3BwCShyZXZpc2lvbiAyMTc2NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1N0cmluZ1N1YnNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsOSArNTIsOSBAQCBK
U1N0cmluZ1N1YnNwYWNlOjp+SlNTdHJpbmdTdWJzcGFjZSgpCiB7CiB9CiAKLUZyZWVMaXN0IEpT
U3RyaW5nU3Vic3BhY2U6OmZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmIGhhbmRsZSwg
TWFya2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBNb2RlIHN3ZWVwTW9kZSkKK3ZvaWQgSlNTdHJpbmdT
dWJzcGFjZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYgaGFuZGxlLCBGcmVlTGlz
dCogZnJlZUxpc3QpCiB7Ci0gICAgcmV0dXJuIGhhbmRsZS5maW5pc2hTd2VlcEtub3dpbmdTdWJz
cGFjZShzd2VlcE1vZGUsIERlc3Ryb3lGdW5jKCkpOworICAgIGhhbmRsZS5maW5pc2hTd2VlcEtu
b3dpbmdTdWJzcGFjZShmcmVlTGlzdCwgRGVzdHJveUZ1bmMoKSk7CiB9CiAKIHZvaWQgSlNTdHJp
bmdTdWJzcGFjZTo6ZGVzdHJveShWTSYgdm0sIEpTQ2VsbCogY2VsbCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nU3Vic3BhY2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ1N1YnNwYWNlLmgJKHJldmlzaW9u
IDIxNzY0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nU3Vic3Bh
Y2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQCBwdWJsaWM6CiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgSlNTdHJpbmdTdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmKTsKICAgICBK
U19FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIH5KU1N0cmluZ1N1YnNwYWNlKCk7CiAgICAgCi0gICAg
RnJlZUxpc3QgZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYsIE1hcmtlZEJsb2NrOjpI
YW5kbGU6OlN3ZWVwTW9kZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBmaW5pc2hTd2VlcChNYXJrZWRC
bG9jazo6SGFuZGxlJiwgRnJlZUxpc3QqKSBvdmVycmlkZTsKICAgICB2b2lkIGRlc3Ryb3koVk0m
LCBKU0NlbGwqKSBvdmVycmlkZTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNw
YWNlLmNwcAkocmV2aXNpb24gMjE3NjQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTYsOSArNTYsOSBAQCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2U6On5KU1dlYkFzCiB7
CiB9CiAKLUZyZWVMaXN0IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZTo6ZmluaXNoU3dl
ZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYgaGFuZGxlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2Vl
cE1vZGUgc3dlZXBNb2RlKQordm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2U6OmZp
bmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmIGhhbmRsZSwgRnJlZUxpc3QqIGZyZWVMaXN0
KQogewotICAgIHJldHVybiBoYW5kbGUuZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2Uoc3dlZXBN
b2RlLCBEZXN0cm95RnVuYygpKTsKKyAgICBoYW5kbGUuZmluaXNoU3dlZXBLbm93aW5nU3Vic3Bh
Y2UoZnJlZUxpc3QsIERlc3Ryb3lGdW5jKCkpOwogfQogCiB2b2lkIEpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2tTdWJzcGFjZTo6ZGVzdHJveShWTSYgdm0sIEpTQ2VsbCogY2VsbCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1i
bHlDb2RlQmxvY2tTdWJzcGFjZS5oCShyZXZpc2lvbiAyMTc2NDYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBwdWJsaWM6CiAgICAgSlNXZWJBc3NlbWJseUNvZGVC
bG9ja1N1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVhcCYpOwogICAgIHZpcnR1YWwgfkpTV2ViQXNz
ZW1ibHlDb2RlQmxvY2tTdWJzcGFjZSgpOwogICAgIAotICAgIEZyZWVMaXN0IGZpbmlzaFN3ZWVw
KE1hcmtlZEJsb2NrOjpIYW5kbGUmLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcE1vZGUpIG92
ZXJyaWRlOworICAgIHZvaWQgZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYsIEZyZWVM
aXN0Kikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkZXN0cm95KFZNJiwgSlNDZWxsKikgb3ZlcnJpZGU7
CiB9OwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>311724</attachid>
            <date>2017-06-01 10:41:53 -0700</date>
            <delta_ts>2017-06-01 11:05:46 -0700</delta_ts>
            <desc>release builds and seems to pass some tests</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>55687</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjE3NjYyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMCBA
QAorMjAxNy0wNi0wMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEdDIHNob3VsZCBrZWVwIGl0cyBmcmVlIGxpc3Qgb24gdGhlIHNpZGUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3Mjc5MworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgUHJldmlvdXNseSwgb3Vy
IGJ1bXAnbidwb3AgYWxsb2NhdG9yIHdvdWxkIHVzZSBhIGNvbnZlbnRpb25hbCBsaW5rZWQtbGlz
dCBmb3IgdGhlIGZyZWUtbGlzdC4KKyAgICAgICAgVGhlIGxpbmtlZC1saXN0IHdvdWxkIGJlIHRo
cmVhZGVkIHRocm91Z2ggZnJlZSBtZW1vcnksIGFzIGlzIHRoZSB1c3VhbCBjb252ZW50aW9uLgor
ICAgICAgICAKKyAgICAgICAgSG93ZXZlciwgaXQncyBxdWl0ZSBhIGJpdCBtb3JlIHNhbmUgdG8g
aGF2ZSB0aGUgZnJlZS1saXN0IHJlc2l6ZSBzb21ld2hlcmUgb3RoZXIgdGhhbiB0aGUgZnJlZQor
ICAgICAgICBtZW1vcnkuIFRoaXMgcHV0cyB0aGUgZnJlZS1saXN0IGluIGFuIGFycmF5LiBJdCdz
IGEgc3RhY2sgb2YgMTYtYml0IG9mZnNldHMgaW50byB0aGUgYmxvY2suCisgICAgICAgIFRoZSBh
bGxvY2F0b3IgcG9wcyBhbiBvZmZzZXQgb2ZmIHRoZSBzdGFjaywgYW5kIGFkZHMgaXQgdG8gdGhl
IGN1cnJlbnQgYmxvY2sgcG9pbnRlci4gVGhpcworICAgICAgICBpc24ndCBhbnkgc2xvd2VyIHRo
YW4gdGhlIG9sZCBsaW5rZWQtbGlzdCBmcmVlLWxpc3QsIGFuZCBpdCBtYWtlcyB3ZWlyZCBpc3N1
ZXMgZWFzaWVyIHRvIGRlYnVnLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBoZWFwL0ZyZWVMaXN0LmNwcDoKKyAgICAgICAg
KEpTQzo6RnJlZUxpc3Q6OkZyZWVMaXN0KToKKyAgICAgICAgKEpTQzo6RnJlZUxpc3Q6On5GcmVl
TGlzdCk6CisgICAgICAgIChKU0M6OkZyZWVMaXN0OjpjbGVhcik6CisgICAgICAgIChKU0M6OkZy
ZWVMaXN0Ojppbml0aWFsaXplTGlzdCk6CisgICAgICAgIChKU0M6OkZyZWVMaXN0Ojppbml0aWFs
aXplQnVtcCk6CisgICAgICAgIChKU0M6OkZyZWVMaXN0Ojpjb250YWlucyk6CisgICAgICAgIChK
U0M6OkZyZWVMaXN0OjpkdW1wKToKKyAgICAgICAgKiBoZWFwL0ZyZWVMaXN0Lmg6CisgICAgICAg
IChKU0M6OkZyZWVMaXN0OjphbGxvY2F0aW9uV2lsbEZhaWwpOgorICAgICAgICAoSlNDOjpGcmVl
TGlzdDo6b3JpZ2luYWxTaXplKToKKyAgICAgICAgKEpTQzo6RnJlZUxpc3Q6OmFkZHJlc3NPZkxp
c3QpOgorICAgICAgICAoSlNDOjpGcmVlTGlzdDo6b2Zmc2V0T2ZCbG9jayk6CisgICAgICAgIChK
U0M6OkZyZWVMaXN0OjpvZmZzZXRPZkxpc3QpOgorICAgICAgICAoSlNDOjpGcmVlTGlzdDo6b2Zm
c2V0T2ZJbmRleCk6CisgICAgICAgIChKU0M6OkZyZWVMaXN0OjpvZmZzZXRPZlBheWxvYWRFbmQp
OgorICAgICAgICAoSlNDOjpGcmVlTGlzdDo6b2Zmc2V0T2ZSZW1haW5pbmcpOgorICAgICAgICAo
SlNDOjpGcmVlTGlzdDo6b2Zmc2V0T2ZPcmlnaW5hbFNpemUpOgorICAgICAgICAoSlNDOjpGcmVl
TGlzdDo6RnJlZUxpc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpGcmVlTGlzdDo6bGlzdCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkZyZWVMaXN0OjpidW1wKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6RnJlZUxpc3Q6Om9wZXJhdG9yPT0pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpG
cmVlTGlzdDo6b3BlcmF0b3IhPSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkZyZWVMaXN0Ojpv
cGVyYXRvciBib29sKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL0ZyZWVMaXN0SW5saW5lcy5o
OiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RnJlZUxpc3Q6OmFkZEZyZWVDZWxsKToKKyAgICAgICAg
KEpTQzo6RnJlZUxpc3Q6OmFsbG9jYXRlKToKKyAgICAgICAgKEpTQzo6RnJlZUxpc3Q6OmZvckVh
Y2gpOgorICAgICAgICAoSlNDOjpGcmVlTGlzdDo6dG9PZmZzZXQpOgorICAgICAgICAoSlNDOjpG
cmVlTGlzdDo6ZnJvbU9mZnNldCk6CisgICAgICAgICogaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIu
Y3BwOgorICAgICAgICAoSlNDOjpJbmNyZW1lbnRhbFN3ZWVwZXI6OnN3ZWVwTmV4dEJsb2NrKToK
KyAgICAgICAgKiBoZWFwL01hcmtlZEFsbG9jYXRvci5jcHA6CisgICAgICAgIChKU0M6Ok1hcmtl
ZEFsbG9jYXRvcjo6TWFya2VkQWxsb2NhdG9yKToKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2Nh
dG9yOjpkaWRDb25zdW1lRnJlZUxpc3QpOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6
OnRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3RpbmcpOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxv
Y2F0b3I6OnRyeUFsbG9jYXRlSW4pOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OmFs
bG9jYXRlU2xvd0Nhc2VJbXBsKToKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjpzdG9w
QWxsb2NhdGluZyk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6cHJlcGFyZUZvckFs
bG9jYXRpb24pOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OnJlc3VtZUFsbG9jYXRp
bmcpOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OnN3ZWVwKToKKyAgICAgICAgKEpT
Qzo6TWFya2VkQWxsb2NhdG9yOjpzZXRGcmVlTGlzdCk6IERlbGV0ZWQuCisgICAgICAgICogaGVh
cC9NYXJrZWRBbGxvY2F0b3IuaDoKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjpmcmVl
TGlzdCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6aXNGcmVlTGlzdGVkQ2VsbCk6
IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9NYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmg6CisgICAg
ICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6aXNGcmVlTGlzdGVkQ2VsbCk6CisgICAgICAgIChK
U0M6Ok1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGUpOgorICAgICAgICAoSlNDOjpNYXJrZWRB
bGxvY2F0b3I6OmFsbG9jYXRlKToKKyAgICAgICAgKiBoZWFwL01hcmtlZEJsb2NrLmNwcDoKKyAg
ICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OkhhbmRsZTo6c3RvcEFsbG9jYXRpbmcpOgorICAgICAg
ICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjpsYXN0Q2hhbmNlVG9GaW5hbGl6ZSk6CisgICAg
ICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6OnJlc3VtZUFsbG9jYXRpbmcpOgorICAgICAg
ICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjp6YXApOgorICAgICAgICAoSlNDOjpNYXJrZWRC
bG9jazo6SGFuZGxlOjpzd2VlcCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6
OmlzRnJlZUxpc3RlZENlbGwpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjpm
b3JFYWNoRnJlZUNlbGwpOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvTWFya2VkQmxvY2suaDoK
KyAgICAgICAgKiBoZWFwL01hcmtlZEJsb2NrSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpNYXJr
ZWRCbG9jazo6SGFuZGxlOjpzcGVjaWFsaXplZFN3ZWVwKToKKyAgICAgICAgKEpTQzo6TWFya2Vk
QmxvY2s6OkhhbmRsZTo6ZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2UpOgorICAgICAgICAoSlND
OjpNYXJrZWRCbG9jazo6SGFuZGxlOjppc0ZyZWVMaXN0ZWRDZWxsKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBoZWFwL1N1YnNwYWNlLmNwcDoKKyAgICAgICAgKEpTQzo6U3Vic3BhY2U6OmZpbmlzaFN3
ZWVwKToKKyAgICAgICAgKiBoZWFwL1N1YnNwYWNlLmg6CisgICAgICAgICogaml0L0Fzc2VtYmx5
SGVscGVycy5oOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRBbGxvY2F0ZVdp
dGhOb25OdWxsQWxsb2NhdG9yKToKKyAgICAgICAgKiBydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0U3Vic3BhY2UuY3BwOgorICAgICAgICAoSlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNw
YWNlOjpmaW5pc2hTd2VlcCk6CisgICAgICAgICogcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVj
dFN1YnNwYWNlLmg6CisgICAgICAgICogcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0
U3Vic3BhY2UuY3BwOgorICAgICAgICAoSlNDOjpKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vi
c3BhY2U6OmZpbmlzaFN3ZWVwKToKKyAgICAgICAgKiBydW50aW1lL0pTU2VnbWVudGVkVmFyaWFi
bGVPYmplY3RTdWJzcGFjZS5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmdTdWJzcGFjZS5j
cHA6CisgICAgICAgIChKU0M6OkpTU3RyaW5nU3Vic3BhY2U6OmZpbmlzaFN3ZWVwKToKKyAgICAg
ICAgKiBydW50aW1lL0pTU3RyaW5nU3Vic3BhY2UuaDoKKyAgICAgICAgKiB3YXNtL2pzL0pTV2Vi
QXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5jcHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1i
bHlDb2RlQmxvY2tTdWJzcGFjZTo6ZmluaXNoU3dlZXApOgorICAgICAgICAqIHdhc20vanMvSlNX
ZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmg6CisKIDIwMTctMDYtMDEgIFRvbWFzIFBvcGVs
YSAgPHRwb3BlbGFAcmVkaGF0LmNvbT4sIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgog
CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCkgaW4gSW5mZXJyZWRUeXBlOjpr
aW5kRm9yRmxhZ3MoKSBvbiBCaWctRW5kaWFucwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDIxNzY0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01MDEs
NiArNTAxLDcgQEAKIAkJMEY2NEIyNzkxQTc5NTdCMjAwNkU0RTY2IC8qIENhbGxFZGdlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjRCMjc3MUE3
OTU3QjIwMDZFNEU2NiAvKiBDYWxsRWRnZS5jcHAgKi87IH07CiAJCTBGNjRCMjdBMUE3OTU3QjIw
MDZFNEU2NiAvKiBDYWxsRWRnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY2NEIyNzgxQTc5NTdCMjAwNkU0RTY2IC8qIENhbGxFZGdlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY2NEVBRjMxQzRF
Q0QwNjAwNjIxRTlCIC8qIEFpckFyZ0lubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjRFQUYyMUM0RUNEMDYwMDYyMUU5QiAvKiBBaXJBcmdJ
bmxpbmVzLmggKi87IH07CisJCTBGNjU4NUUxMUVFMDgwNUEwMDk1MTc2RCAvKiBGcmVlTGlzdElu
bGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NjU4NUUwMUVFMDgwNTcwMDk1MTc2RCAvKiBGcmVlTGlzdElubGluZXMuaCAqLzsgfTsKIAkJMEY2
NjBFMzcxRTA1MTdCOTAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjYwRTMzMUUwNTE3QjcwMDMx
NDYyQyAvKiBNYXJraW5nQ29uc3RyYWludC5jcHAgKi87IH07CiAJCTBGNjYwRTM4MUUwNTE3QkIw
MDMxNDYyQyAvKiBNYXJraW5nQ29uc3RyYWludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NjBFMzQxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdD
b25zdHJhaW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEY2NjBFMzkxRTA1MTdCRjAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50U2V0LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjYwRTM1
MUUwNTE3QjcwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3RyYWludFNldC5jcHAgKi87IH07CkBAIC0z
MDc3LDYgKzMwNzgsNyBAQAogCQkwRjY0QjI3NzFBNzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2Uu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FsbEVkZ2UuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY0QjI3ODFBNzk1N0IyMDA2RTRFNjYgLyog
Q2FsbEVkZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FsbEVkZ2UuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2NEVBRjIxQzRFQ0QwNjAwNjIxRTlCIC8q
IEFpckFyZ0lubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyQXJn
SW5saW5lcy5oOyBwYXRoID0gYjMvYWlyL0FpckFyZ0lubGluZXMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEY2NTg1RTAxRUUwODA1NzAwOTUxNzZEIC8qIEZyZWVMaXN0SW5saW5l
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGcmVlTGlzdElubGluZXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2NjBFMzMxRTA1MTdCNzAwMzE0NjJDIC8q
IE1hcmtpbmdDb25zdHJhaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IE1hcmtpbmdDb25zdHJhaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY2NjBFMzQxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hcmtpbmdDb25zdHJhaW50Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGNjYwRTM1MUUwNTE3QjcwMDMxNDYyQyAvKiBNYXJraW5nQ29u
c3RyYWludFNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYXJr
aW5nQ29uc3RyYWludFNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02MDE5
LDYgKzYwMjEsNyBAQAogCQkJCTJBODM2Mzg0MThEN0QwRUUwMDAwRUJDQyAvKiBFZGVuR0NBY3Rp
dml0eUNhbGxiYWNrLmggKi8sCiAJCQkJMEY1NTEzQTcxRDVBNjhDQjAwQzMyQkQ4IC8qIEZyZWVM
aXN0LmNwcCAqLywKIAkJCQkwRjU1MTNBNTFENUE2ODJBMDBDMzJCRDggLyogRnJlZUxpc3QuaCAq
LywKKwkJCQkwRjY1ODVFMDFFRTA4MDU3MDA5NTE3NkQgLyogRnJlZUxpc3RJbmxpbmVzLmggKi8s
CiAJCQkJMkE4MzYzODcxOEQ3RDBGRTAwMDBFQkNDIC8qIEZ1bGxHQ0FjdGl2aXR5Q2FsbGJhY2su
Y3BwICovLAogCQkJCTJBODM2Mzg4MThEN0QwRkUwMDAwRUJDQyAvKiBGdWxsR0NBY3Rpdml0eUNh
bGxiYWNrLmggKi8sCiAJCQkJMkFBQ0U2M0ExOENBNUEwMzAwRUQwMTkxIC8qIEdDQWN0aXZpdHlD
YWxsYmFjay5jcHAgKi8sCkBAIC04NjYxLDYgKzg2NjQsNyBAQAogCQkJCTBGMjM1QkVFMTcxNzhF
NzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0UHJlcGFyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGMkM2M0I3MUU2MzQzRUQwMEMxMzgzOSAvKiBCM0F0b21pY1ZhbHVlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjYyMzc5ODFBRTQ1Q0E3MDBENDAyRUEgLyogREZHUGhhbnRvbUluc2VydGlvblBo
YXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjY1ODVFMTFFRTA4MDVBMDA5NTE3NkQgLyogRnJl
ZUxpc3RJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZGQzk1QzE0RUY5MEFGMDBDNzI1
MzIgLyogREZHUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTM3QzczOEQyMUVEQjU2RTQwMDNG
MkIwQiAvKiBQYXJzZUludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjlDRUIxOUQwQkE3RDAw
QjFEMUI1IC8qIERGR1BoaUNoaWxkcmVuLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0ZyZWVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9GcmVlTGlzdC5jcHAJKHJldmlzaW9uIDIxNzY0NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0ZyZWVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYs
MjkgKzI2LDc0IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRnJlZUxpc3QuaCIK
IAorI2luY2x1ZGUgIkZyZWVMaXN0SW5saW5lcy5oIgorI2luY2x1ZGUgIk1hcmtlZEJsb2NrLmgi
CisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAotYm9v
bCBGcmVlTGlzdDo6Y29udGFpbnMoY29uc3Qgdm9pZCogdGFyZ2V0KSBjb25zdAorRnJlZUxpc3Q6
OkZyZWVMaXN0KHVuc2lnbmVkIGNlbGxTaXplKQorICAgIDogbV9jZWxsU2l6ZShjZWxsU2l6ZSkK
IHsKLSAgICBpZiAocmVtYWluaW5nKSB7Ci0gICAgICAgIGNvbnN0IHZvaWQqIHN0YXJ0ID0gKHBh
eWxvYWRFbmQgLSByZW1haW5pbmcpOwotICAgICAgICBjb25zdCB2b2lkKiBlbmQgPSBwYXlsb2Fk
RW5kOworICAgIHN0YXRpY19hc3NlcnQoTWFya2VkQmxvY2s6OmJsb2NrU2l6ZSA8PSAoMXUgPDwg
KHNpemVvZihGcmVlT2Zmc2V0KSAqIDgpKSwgIkZyZWVMaXN0IGFzc3VtZXMgdGhhdCBGcmVlT2Zm
c2V0IGlzIGJpZyBlbm91Z2ggdG8gZXhwcmVzcyBhbGwgcG9zc2libGUgYmxvY2sgb2Zmc2V0cyIp
OworICAgIAorICAgIG1fbGlzdFNpemUgPSBNYXJrZWRCbG9jazo6YmxvY2tTaXplIC8gY2VsbFNp
emU7CisgICAgbV9saXN0ID0gc3RkOjptYWtlX3VuaXF1ZTxGcmVlT2Zmc2V0W10+KG1fbGlzdFNp
emUpOworfQorCitGcmVlTGlzdDo6fkZyZWVMaXN0KCkKK3sKK30KKwordm9pZCBGcmVlTGlzdDo6
Y2xlYXIoKQoreworICAgIG1fYmxvY2sgPSBudWxscHRyOworICAgIG1faW5kZXggPSAwOworICAg
IG1fcGF5bG9hZEVuZCA9IG51bGxwdHI7CisgICAgbV9yZW1haW5pbmcgPSAwOworICAgIG1fb3Jp
Z2luYWxTaXplID0gMDsKK30KKwordm9pZCBGcmVlTGlzdDo6aW5pdGlhbGl6ZUxpc3QoTWFya2Vk
QmxvY2sqIGJsb2NrKQoreworICAgIG1fYmxvY2sgPSBibG9jazsKKyAgICBtX2luZGV4ID0gMDsK
KyAgICBtX3BheWxvYWRFbmQgPSBudWxscHRyOworICAgIG1fcmVtYWluaW5nID0gMDsKKyAgICBt
X29yaWdpbmFsU2l6ZSA9IDA7Cit9CisKK3ZvaWQgRnJlZUxpc3Q6OmluaXRpYWxpemVCdW1wKGNo
YXIqIHBheWxvYWRFbmQsIHVuc2lnbmVkIHJlbWFpbmluZykKK3sKKyAgICBtX2Jsb2NrID0gbnVs
bHB0cjsKKyAgICBtX2luZGV4ID0gMDsKKyAgICBtX3BheWxvYWRFbmQgPSBwYXlsb2FkRW5kOwor
ICAgIG1fcmVtYWluaW5nID0gcmVtYWluaW5nOworICAgIG1fb3JpZ2luYWxTaXplID0gcmVtYWlu
aW5nOworfQorCitib29sIEZyZWVMaXN0Ojpjb250YWlucyhIZWFwQ2VsbCogdGFyZ2V0KSBjb25z
dAoreworICAgIGlmIChtX3JlbWFpbmluZykgeworICAgICAgICBjb25zdCB2b2lkKiBzdGFydCA9
IChtX3BheWxvYWRFbmQgLSBtX3JlbWFpbmluZyk7CisgICAgICAgIGNvbnN0IHZvaWQqIGVuZCA9
IG1fcGF5bG9hZEVuZDsKICAgICAgICAgcmV0dXJuIChzdGFydCA8PSB0YXJnZXQpICYmICh0YXJn
ZXQgPCBlbmQpOwogICAgIH0KIAotICAgIEZyZWVDZWxsKiBjYW5kaWRhdGUgPSBoZWFkOwotICAg
IHdoaWxlIChjYW5kaWRhdGUpIHsKLSAgICAgICAgaWYgKGNhbmRpZGF0ZSA9PSB0YXJnZXQpCisg
ICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleDsgaS0tOykgeworICAgICAgICBpZiAoZnJvbU9m
ZnNldChtX2xpc3RbaV0pID09IHRhcmdldCkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICBjYW5kaWRhdGUgPSBjYW5kaWRhdGUtPm5leHQ7CiAgICAgfQotCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCiB2b2lkIEZyZWVMaXN0OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7
Ci0gICAgb3V0LnByaW50KCJ7aGVhZCA9ICIsIFJhd1BvaW50ZXIoaGVhZCksICIsIHBheWxvYWRF
bmQgPSAiLCBSYXdQb2ludGVyKHBheWxvYWRFbmQpLCAiLCByZW1haW5pbmcgPSAiLCByZW1haW5p
bmcsICIsIG9yaWdpbmFsU2l6ZSA9ICIsIG9yaWdpbmFsU2l6ZSwgIn0iKTsKKyAgICBvdXQucHJp
bnQoIntibG9jayA9ICIsIFJhd1BvaW50ZXIobV9ibG9jayksICIsIGxpc3QgPSBbIik7CisgICAg
Q29tbWFQcmludGVyIGNvbW1hOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2luZGV4
OyArK2kpCisgICAgICAgIG91dC5wcmludChjb21tYSwgbV9saXN0W2ldKTsKKyAgICBvdXQucHJp
bnQoIl0sIGluZGV4ID0gIiwgbV9pbmRleCwgIiwgcGF5bG9hZEVuZCA9ICIsIFJhd1BvaW50ZXIo
bV9wYXlsb2FkRW5kKSwgIiwgcmVtYWluaW5nID0gIiwgbV9yZW1haW5pbmcsICIsIG9yaWdpbmFs
U2l6ZSA9ICIsIG1fb3JpZ2luYWxTaXplLCAifSIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0ZyZWVMaXN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRnJlZUxpc3QuaAkocmV2aXNpb24gMjE3NjQ2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRnJlZUxpc3QuaAkod29ya2luZyBjb3B5
KQpAQCAtMjUsNjggKzI1LDY2IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSA8d3RmL05v
bmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBK
U0MgewogCi1zdHJ1Y3QgRnJlZUNlbGwgewotICAgIEZyZWVDZWxsKiBuZXh0OwotfTsKLSAgICAg
ICAgCi0vLyBUaGlzIHJlcHJlc2VudGF0aW9uIG9mIGEgRnJlZUxpc3QgaXMgY29udmVuaWVudCBm
b3IgdGhlIE1hcmtlZEFsbG9jYXRvci4KLQotc3RydWN0IEZyZWVMaXN0IHsKLSAgICBGcmVlQ2Vs
bCogaGVhZCB7IG51bGxwdHIgfTsKLSAgICBjaGFyKiBwYXlsb2FkRW5kIHsgbnVsbHB0ciB9Owot
ICAgIHVuc2lnbmVkIHJlbWFpbmluZyB7IDAgfTsKLSAgICB1bnNpZ25lZCBvcmlnaW5hbFNpemUg
eyAwIH07Ci0gICAgCi0gICAgRnJlZUxpc3QoKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgc3Rh
dGljIEZyZWVMaXN0IGxpc3QoRnJlZUNlbGwqIGhlYWQsIHVuc2lnbmVkIGJ5dGVzKQotICAgIHsK
LSAgICAgICAgRnJlZUxpc3QgcmVzdWx0OwotICAgICAgICByZXN1bHQuaGVhZCA9IGhlYWQ7Ci0g
ICAgICAgIHJlc3VsdC5yZW1haW5pbmcgPSAwOwotICAgICAgICByZXN1bHQub3JpZ2luYWxTaXpl
ID0gYnl0ZXM7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIAotICAgIHN0YXRp
YyBGcmVlTGlzdCBidW1wKGNoYXIqIHBheWxvYWRFbmQsIHVuc2lnbmVkIHJlbWFpbmluZykKLSAg
ICB7Ci0gICAgICAgIEZyZWVMaXN0IHJlc3VsdDsKLSAgICAgICAgcmVzdWx0LnBheWxvYWRFbmQg
PSBwYXlsb2FkRW5kOwotICAgICAgICByZXN1bHQucmVtYWluaW5nID0gcmVtYWluaW5nOwotICAg
ICAgICByZXN1bHQub3JpZ2luYWxTaXplID0gcmVtYWluaW5nOwotICAgICAgICByZXR1cm4gcmVz
dWx0OwotICAgIH0KLSAgICAKLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRnJlZUxpc3QmIG90
aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGhlYWQgPT0gb3RoZXIuaGVhZAotICAg
ICAgICAgICAgJiYgcGF5bG9hZEVuZCA9PSBvdGhlci5wYXlsb2FkRW5kCi0gICAgICAgICAgICAm
JiByZW1haW5pbmcgPT0gb3RoZXIucmVtYWluaW5nCi0gICAgICAgICAgICAmJiBvcmlnaW5hbFNp
emUgPT0gb3RoZXIub3JpZ2luYWxTaXplOwotICAgIH0KLSAgICAKLSAgICBib29sIG9wZXJhdG9y
IT0oY29uc3QgRnJlZUxpc3QmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuICEo
KnRoaXMgPT0gb3RoZXIpOwotICAgIH0KLSAgICAKLSAgICBleHBsaWNpdCBvcGVyYXRvciBib29s
KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiAqdGhpcyAhPSBGcmVlTGlzdCgpOwotICAg
IH0KK2NsYXNzIEhlYXBDZWxsOworY2xhc3MgTWFya2VkQmxvY2s7CiAKLSAgICBib29sIGNvbnRh
aW5zKGNvbnN0IHZvaWQqIHRhcmdldCkgY29uc3Q7Ci0KLSAgICBib29sIGFsbG9jYXRpb25XaWxs
RmFpbCgpIGNvbnN0IHsgcmV0dXJuICFoZWFkICYmICFyZW1haW5pbmc7IH0KK2NsYXNzIEZyZWVM
aXN0IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShGcmVlTGlzdCk7CisgICAgCitwdWJsaWM6
CisgICAgdHlwZWRlZiB1aW50MTZfdCBGcmVlT2Zmc2V0OworICAgIAorICAgIEZyZWVMaXN0KHVu
c2lnbmVkIGNlbGxTaXplKTsKKyAgICB+RnJlZUxpc3QoKTsKKyAgICAKKyAgICB2b2lkIGNsZWFy
KCk7CisgICAgCisgICAgdm9pZCBpbml0aWFsaXplTGlzdChNYXJrZWRCbG9jayopOworICAgIHZv
aWQgYWRkRnJlZUNlbGwoSGVhcENlbGwqKTsKKyAgICAKKyAgICB2b2lkIGluaXRpYWxpemVCdW1w
KGNoYXIqIHBheWxvYWRFbmQsIHVuc2lnbmVkIHJlbWFpbmluZyk7CisgICAgCisgICAgYm9vbCBh
bGxvY2F0aW9uV2lsbEZhaWwoKSBjb25zdCB7IHJldHVybiAhbV9pbmRleCAmJiAhbV9yZW1haW5p
bmc7IH0KICAgICBib29sIGFsbG9jYXRpb25XaWxsU3VjY2VlZCgpIGNvbnN0IHsgcmV0dXJuICFh
bGxvY2F0aW9uV2lsbEZhaWwoKTsgfQogICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+
CisgICAgSGVhcENlbGwqIGFsbG9jYXRlKGNvbnN0IEZ1bmMmIHNsb3dQYXRoKTsKKyAgICAKKyAg
ICBib29sIGNvbnRhaW5zKEhlYXBDZWxsKikgY29uc3Q7CisgICAgCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuYz4KKyAgICB2b2lkIGZvckVhY2goY29uc3QgRnVuYyYpIGNvbnN0OworICAgIAor
ICAgIHVuc2lnbmVkIG9yaWdpbmFsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luYWxTaXpl
OyB9CisgICAgCisgICAgRnJlZU9mZnNldCogYWRkcmVzc09mTGlzdCgpIGNvbnN0IHsgcmV0dXJu
IG1fbGlzdC5nZXQoKTsgfQorCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkJsb2NrKCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZyZWVMaXN0LCBtX2Jsb2NrKTsgfQorICAgIHN0YXRp
YyBwdHJkaWZmX3Qgb2Zmc2V0T2ZMaXN0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZyZWVM
aXN0LCBtX2xpc3QpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkluZGV4KCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZyZWVMaXN0LCBtX2luZGV4KTsgfQorICAgIHN0YXRpYyBw
dHJkaWZmX3Qgb2Zmc2V0T2ZQYXlsb2FkRW5kKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZy
ZWVMaXN0LCBtX3BheWxvYWRFbmQpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlJl
bWFpbmluZygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihGcmVlTGlzdCwgbV9yZW1haW5pbmcp
OyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk9yaWdpbmFsU2l6ZSgpIHsgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihGcmVlTGlzdCwgbV9vcmlnaW5hbFNpemUpOyB9CisgICAgCiAgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIEZyZWVP
ZmZzZXQgdG9PZmZzZXQoSGVhcENlbGwqKSBjb25zdDsKKyAgICBIZWFwQ2VsbCogZnJvbU9mZnNl
dChGcmVlT2Zmc2V0KSBjb25zdDsKKyAgICAKKyAgICB1bnNpZ25lZCBtX2NlbGxTaXplIHsgVUlO
VF9NQVggfTsKKyAgICBNYXJrZWRCbG9jayogbV9ibG9jayB7IG51bGxwdHIgfTsKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8RnJlZU9mZnNldFtdPiBtX2xpc3Q7CisgICAgdW5zaWduZWQgbV9saXN0U2l6
ZSB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX2luZGV4IHsgMCB9OworICAgIGNoYXIqIG1fcGF5bG9h
ZEVuZCB7IG51bGxwdHIgfTsKKyAgICB1bnNpZ25lZCBtX3JlbWFpbmluZyB7IDAgfTsKKyAgICB1
bnNpZ25lZCBtX29yaWdpbmFsU2l6ZSB7IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRnJlZUxpc3RJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRnJlZUxpc3RJbmxpbmVzLmgJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRnJlZUxpc3RJbmxpbmVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkZyZWVM
aXN0LmgiCisjaW5jbHVkZSAiTWFya2VkQmxvY2suaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2lu
bGluZSB2b2lkIEZyZWVMaXN0OjphZGRGcmVlQ2VsbChIZWFwQ2VsbCogY2VsbCkKK3sKKyAgICBS
RUxFQVNFX0FTU0VSVChtX2luZGV4IDwgbV9saXN0U2l6ZSk7CisgICAgbV9saXN0W21faW5kZXgr
K10gPSB0b09mZnNldChjZWxsKTsKKyAgICBtX29yaWdpbmFsU2l6ZSArPSBtX2NlbGxTaXplOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorSGVhcENlbGwqIEZyZWVMaXN0OjphbGxvY2F0
ZShjb25zdCBGdW5jJiBzbG93UGF0aCkKK3sKKyAgICB1bnNpZ25lZCByZW1haW5pbmcgPSBtX3Jl
bWFpbmluZzsKKyAgICBpZiAocmVtYWluaW5nKSB7CisgICAgICAgIHVuc2lnbmVkIGNlbGxTaXpl
ID0gbV9jZWxsU2l6ZTsKKyAgICAgICAgcmVtYWluaW5nIC09IGNlbGxTaXplOworICAgICAgICBt
X3JlbWFpbmluZyA9IHJlbWFpbmluZzsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxIZWFw
Q2VsbCo+KG1fcGF5bG9hZEVuZCAtIHJlbWFpbmluZyAtIGNlbGxTaXplKTsKKyAgICB9CisgICAg
CisgICAgdW5zaWduZWQgaW5kZXggPSBtX2luZGV4OworICAgIGlmIChVTkxJS0VMWSghaW5kZXgp
KQorICAgICAgICByZXR1cm4gc2xvd1BhdGgoKTsKKyAgICAKKyAgICAtLWluZGV4OworICAgIG1f
aW5kZXggPSBpbmRleDsKKyAgICByZXR1cm4gZnJvbU9mZnNldChtX2xpc3RbaW5kZXhdKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KK3ZvaWQgRnJlZUxpc3Q6OmZvckVhY2goY29uc3Qg
RnVuYyYgZnVuYykgY29uc3QKK3sKKyAgICBpZiAobV9yZW1haW5pbmcpIHsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCByZW1haW5pbmcgPSBtX3JlbWFpbmluZzsgcmVtYWluaW5nOyByZW1haW5pbmcg
LT0gbV9jZWxsU2l6ZSkKKyAgICAgICAgICAgIGZ1bmMoYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4o
bV9wYXlsb2FkRW5kIC0gcmVtYWluaW5nKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gbV9pbmRleDsgaS0tOykKKyAgICAgICAgICAgIGZ1bmMoZnJvbU9mZnNldCht
X2xpc3RbaV0pKTsKKyAgICB9Cit9CisKK2lubGluZSBGcmVlTGlzdDo6RnJlZU9mZnNldCBGcmVl
TGlzdDo6dG9PZmZzZXQoSGVhcENlbGwqIGNlbGwpIGNvbnN0Cit7CisgICAgdWludHB0cl90IHJl
c3VsdCA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGNlbGwpIC0gYml0d2lzZV9jYXN0PHVpbnRw
dHJfdD4obV9ibG9jayk7CisgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0IDwgTWFya2VkQmxvY2s6
OmJsb2NrU2l6ZSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEZyZWVPZmZzZXQ+KHJlc3VsdCk7
Cit9CisKK2lubGluZSBIZWFwQ2VsbCogRnJlZUxpc3Q6OmZyb21PZmZzZXQoRnJlZU9mZnNldCBv
ZmZzZXQpIGNvbnN0Cit7CisgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KHN0YXRp
Y19jYXN0PHVpbnRwdHJfdD4ob2Zmc2V0KSArIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG1fYmxv
Y2spKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmNwcAkocmV2aXNpb24gMjE3NjQ2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODcsNyArODcsNyBAQCBib29sIEluY3JlbWVudGFsU3dlZXBlcjo6
c3dlZXBOZXh0QmxvY2soCiAgICAgCiAgICAgaWYgKGJsb2NrKSB7CiAgICAgICAgIERlZmVyR0NG
b3JBV2hpbGUgZGVmZXJHQyhtX3ZtLT5oZWFwKTsKLSAgICAgICAgYmxvY2stPnN3ZWVwKCk7Cisg
ICAgICAgIGJsb2NrLT5zd2VlcChudWxscHRyKTsKICAgICAgICAgbV92bS0+aGVhcC5vYmplY3RT
cGFjZSgpLmZyZWVPclNocmlua0Jsb2NrKGJsb2NrKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0
b3IuY3BwCShyZXZpc2lvbiAyMTc2NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw4IEBACiBuYW1l
c3BhY2UgSlNDIHsKIAogTWFya2VkQWxsb2NhdG9yOjpNYXJrZWRBbGxvY2F0b3IoSGVhcCogaGVh
cCwgU3Vic3BhY2UqIHN1YnNwYWNlLCBzaXplX3QgY2VsbFNpemUpCi0gICAgOiBtX2N1cnJlbnRC
bG9jaygwKQorICAgIDogbV9mcmVlTGlzdChjZWxsU2l6ZSkKKyAgICAsIG1fY3VycmVudEJsb2Nr
KDApCiAgICAgLCBtX2xhc3RBY3RpdmVCbG9jaygwKQogICAgICwgbV9jZWxsU2l6ZShzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oY2VsbFNpemUpKQogICAgICwgbV9hdHRyaWJ1dGVzKHN1YnNwYWNlLT5h
dHRyaWJ1dGVzKCkpCkBAIC04OCw3ICs4OSw3IEBAIHZvaWQgTWFya2VkQWxsb2NhdG9yOjpkaWRD
b25zdW1lRnJlZUxpc3QKICAgICBpZiAobV9jdXJyZW50QmxvY2spCiAgICAgICAgIG1fY3VycmVu
dEJsb2NrLT5kaWRDb25zdW1lRnJlZUxpc3QoKTsKICAgICAKLSAgICBzZXRGcmVlTGlzdChGcmVl
TGlzdCgpKTsKKyAgICBtX2ZyZWVMaXN0LmNsZWFyKCk7CiAgICAgbV9jdXJyZW50QmxvY2sgPSBu
dWxscHRyOwogfQogCkBAIC05Nyw3ICs5OCw3IEBAIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5
QWxsb2NhdGVXaXRob3UKICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShm
YWxzZSk7CiAgICAgCiAgICAgQVNTRVJUKCFtX2N1cnJlbnRCbG9jayk7Ci0gICAgQVNTRVJUKCFt
X2ZyZWVMaXN0KTsKKyAgICBBU1NFUlQobV9mcmVlTGlzdC5hbGxvY2F0aW9uV2lsbEZhaWwoKSk7
CiAgICAgCiAgICAgZm9yICg7OykgewogICAgICAgICBtX2FsbG9jYXRpb25DdXJzb3IgPSAobV9j
YW5BbGxvY2F0ZUJ1dE5vdEVtcHR5IHwgbV9lbXB0eSkuZmluZEJpdChtX2FsbG9jYXRpb25DdXJz
b3IsIHRydWUpOwpAQCAtMTEzLDcgKzExNCw3IEBAIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5
QWxsb2NhdGVXaXRob3UKICAgICBpZiAoT3B0aW9uczo6c3RlYWxFbXB0eUJsb2Nrc0Zyb21PdGhl
ckFsbG9jYXRvcnMoKQogICAgICAgICAmJiBzaG91bGRTdGVhbEVtcHR5QmxvY2tzRnJvbU90aGVy
QWxsb2NhdG9ycygpKSB7CiAgICAgICAgIGlmIChNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9jayA9
IG1hcmtlZFNwYWNlKCkuZmluZEVtcHR5QmxvY2tUb1N0ZWFsKCkpIHsKLSAgICAgICAgICAgIGJs
b2NrLT5zd2VlcCgpOworICAgICAgICAgICAgYmxvY2stPnN3ZWVwKG51bGxwdHIpOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICAvLyBJdCdzIGdvb2QgdGhhdCB0aGlzIGNsZWFycyBjYW5BbGxv
Y2F0ZUJ1dE5vdEVtcHR5IGFzIHdlbGwgYXMgYWxsIG90aGVyIGJpdHMsCiAgICAgICAgICAgICAv
LyBiZWNhdXNlIHRoZXJlIGlzIGEgcmVtb3RlIGNoYW5jZSB0aGF0IGEgYmxvY2sgbWF5IGhhdmUg
Ym90aCBjYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5CkBAIC0xMzksMTEgKzE0MCwxMSBAQCB2b2lkKiBN
YXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlSW4oTWFyCiAgICAgQVNTRVJUKGJsb2NrKTsKICAg
ICBBU1NFUlQoIWJsb2NrLT5pc0ZyZWVMaXN0ZWQoKSk7CiAgICAgCi0gICAgRnJlZUxpc3QgZnJl
ZUxpc3QgPSBibG9jay0+c3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBUb0ZyZWVMaXN0
KTsKKyAgICBibG9jay0+c3dlZXAoJm1fZnJlZUxpc3QpOwogICAgIAogICAgIC8vIEl0J3MgcG9z
c2libGUgdG8gc3R1bWJsZSBvbiBhIGNvbXBsZXRlbHkgZnVsbCBibG9jay4gTWFya2luZyB0cmll
cyB0byByZXRpcmUgdGhlc2UsIGJ1dAogICAgIC8vIHRoYXQgYWxnb3JpdGhtIGlzIHJhY3kgYW5k
IG1heSBmb3JnZXQgdG8gZG8gaXQgc29tZXRpbWVzLgotICAgIGlmIChmcmVlTGlzdC5hbGxvY2F0
aW9uV2lsbEZhaWwoKSkgeworICAgIGlmIChtX2ZyZWVMaXN0LmFsbG9jYXRpb25XaWxsRmFpbCgp
KSB7CiAgICAgICAgIEFTU0VSVChibG9jay0+aXNGcmVlTGlzdGVkKCkpOwogICAgICAgICBibG9j
ay0+dW5zd2VlcFdpdGhOb05ld2x5QWxsb2NhdGVkKCk7CiAgICAgICAgIEFTU0VSVCghYmxvY2st
PmlzRnJlZUxpc3RlZCgpKTsKQEAgLTE1MywxOSArMTU0LDkgQEAgdm9pZCogTWFya2VkQWxsb2Nh
dG9yOjp0cnlBbGxvY2F0ZUluKE1hcgogICAgIH0KICAgICAKICAgICBtX2N1cnJlbnRCbG9jayA9
IGJsb2NrOwotICAgIHNldEZyZWVMaXN0KGZyZWVMaXN0KTsKICAgICAKLSAgICB2b2lkKiByZXN1
bHQ7Ci0gICAgaWYgKG1fZnJlZUxpc3QucmVtYWluaW5nKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNl
bGxTaXplID0gbV9jZWxsU2l6ZTsKLSAgICAgICAgbV9mcmVlTGlzdC5yZW1haW5pbmcgLT0gY2Vs
bFNpemU7Ci0gICAgICAgIHJlc3VsdCA9IG1fZnJlZUxpc3QucGF5bG9hZEVuZCAtIG1fZnJlZUxp
c3QucmVtYWluaW5nIC0gY2VsbFNpemU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgRnJlZUNlbGwq
IGhlYWQgPSBtX2ZyZWVMaXN0LmhlYWQ7Ci0gICAgICAgIG1fZnJlZUxpc3QuaGVhZCA9IGhlYWQt
Pm5leHQ7Ci0gICAgICAgIHJlc3VsdCA9IGhlYWQ7Ci0gICAgfQotICAgIFJFTEVBU0VfQVNTRVJU
KHJlc3VsdCk7CisgICAgdm9pZCogcmVzdWx0ID0gbV9mcmVlTGlzdC5hbGxvY2F0ZSgKKyAgICAg
ICAgW10gKCkgLT4gSGVhcENlbGwqIHsgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0
dXJuIG51bGxwdHI7IH0pOwogICAgIHNldElzRWRlbihOb0xvY2tpbmdOZWNlc3NhcnksIG1fY3Vy
cmVudEJsb2NrLCB0cnVlKTsKICAgICBtYXJrZWRTcGFjZSgpLmRpZEFsbG9jYXRlSW5CbG9jayht
X2N1cnJlbnRCbG9jayk7CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTIwOCw3ICsxOTksNyBAQCB2
b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlU2xvd0Nhc2VJCiAgICAgZG9UZXN0Q29sbGVj
dGlvbnNJZk5lZWRlZChkZWZlcnJhbENvbnRleHQpOwogCiAgICAgQVNTRVJUKCFtYXJrZWRTcGFj
ZSgpLmlzSXRlcmF0aW5nKCkpOwotICAgIG1faGVhcC0+ZGlkQWxsb2NhdGUobV9mcmVlTGlzdC5v
cmlnaW5hbFNpemUpOworICAgIG1faGVhcC0+ZGlkQWxsb2NhdGUobV9mcmVlTGlzdC5vcmlnaW5h
bFNpemUoKSk7CiAgICAgCiAgICAgZGlkQ29uc3VtZUZyZWVMaXN0KCk7CiAgICAgCkBAIC0zMzQs
MjEgKzMyNSwyMSBAQCB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6c3RvcEFsbG9jYXRpbmcoKQogICAg
ICAgICBkYXRhTG9nKFJhd1BvaW50ZXIodGhpcyksICI6IE1hcmtlZEFsbG9jYXRvcjo6c3RvcEFs
bG9jYXRpbmchXG4iKTsKICAgICBBU1NFUlQoIW1fbGFzdEFjdGl2ZUJsb2NrKTsKICAgICBpZiAo
IW1fY3VycmVudEJsb2NrKSB7Ci0gICAgICAgIEFTU0VSVCghbV9mcmVlTGlzdCk7CisgICAgICAg
IEFTU0VSVChtX2ZyZWVMaXN0LmFsbG9jYXRpb25XaWxsRmFpbCgpKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICAKICAgICBtX2N1cnJlbnRCbG9jay0+c3RvcEFsbG9jYXRpbmcobV9mcmVl
TGlzdCk7CiAgICAgbV9sYXN0QWN0aXZlQmxvY2sgPSBtX2N1cnJlbnRCbG9jazsKICAgICBtX2N1
cnJlbnRCbG9jayA9IDA7Ci0gICAgbV9mcmVlTGlzdCA9IEZyZWVMaXN0KCk7CisgICAgbV9mcmVl
TGlzdC5jbGVhcigpOwogfQogCiB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6cHJlcGFyZUZvckFsbG9j
YXRpb24oKQogewogICAgIG1fbGFzdEFjdGl2ZUJsb2NrID0gbnVsbHB0cjsKICAgICBtX2N1cnJl
bnRCbG9jayA9IG51bGxwdHI7Ci0gICAgc2V0RnJlZUxpc3QoRnJlZUxpc3QoKSk7CisgICAgbV9m
cmVlTGlzdC5jbGVhcigpOwogCiAgICAgbV9hbGxvY2F0aW9uQ3Vyc29yID0gMDsKICAgICBtX2Vt
cHR5Q3Vyc29yID0gMDsKQEAgLTM3MSwxNyArMzYyLDEyIEBAIHZvaWQgTWFya2VkQWxsb2NhdG9y
OjpsYXN0Q2hhbmNlVG9GaW5hbGkKICAgICAgICAgfSk7CiB9CiAKLXZvaWQgTWFya2VkQWxsb2Nh
dG9yOjpzZXRGcmVlTGlzdChjb25zdCBGcmVlTGlzdCYgZnJlZUxpc3QpCi17Ci0gICAgbV9mcmVl
TGlzdCA9IGZyZWVMaXN0OwotfQotCiB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6cmVzdW1lQWxsb2Nh
dGluZygpCiB7CiAgICAgaWYgKCFtX2xhc3RBY3RpdmVCbG9jaykKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgbV9mcmVlTGlzdCA9IG1fbGFzdEFjdGl2ZUJsb2NrLT5yZXN1bWVBbGxvY2F0aW5nKCk7
CisgICAgbV9sYXN0QWN0aXZlQmxvY2stPnJlc3VtZUFsbG9jYXRpbmcobV9mcmVlTGlzdCk7CiAg
ICAgbV9jdXJyZW50QmxvY2sgPSBtX2xhc3RBY3RpdmVCbG9jazsKICAgICBtX2xhc3RBY3RpdmVC
bG9jayA9IG51bGxwdHI7CiB9CkBAIC00NDUsNyArNDMxLDcgQEAgdm9pZCBNYXJrZWRBbGxvY2F0
b3I6OnN3ZWVwKCkKICAgICBtX3Vuc3dlcHQuZm9yRWFjaFNldEJpdCgKICAgICAgICAgWyZdIChz
aXplX3QgaW5kZXgpIHsKICAgICAgICAgICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrID0g
bV9ibG9ja3NbaW5kZXhdOwotICAgICAgICAgICAgYmxvY2stPnN3ZWVwKCk7CisgICAgICAgICAg
ICBibG9jay0+c3dlZXAobnVsbHB0cik7CiAgICAgICAgIH0pOwogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaAkocmV2aXNpb24gMjE3NjQ2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE1Niw3ICsxNTYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCogdHJ5QWxsb2Nh
dGUoR0NEZWZlcnJhbENvbnRleHQqID0gbnVsbHB0cik7CiAgICAgSGVhcCogaGVhcCgpIHsgcmV0
dXJuIG1faGVhcDsgfQogCi0gICAgYm9vbCBpc0ZyZWVMaXN0ZWRDZWxsKGNvbnN0IHZvaWQqIHRh
cmdldCkgY29uc3QgeyByZXR1cm4gbV9mcmVlTGlzdC5jb250YWlucyh0YXJnZXQpOyB9CisgICAg
Ym9vbCBpc0ZyZWVMaXN0ZWRDZWxsKGNvbnN0IHZvaWQqIHRhcmdldCkgY29uc3Q7CiAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hCbG9jayhjb25zdCBGdW5jdG9y
Jik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoTm90RW1wdHlC
bG9jayhjb25zdCBGdW5jdG9yJik7CkBAIC0yMDksNiArMjA5LDggQEAgcHVibGljOgogICAgIFN1
YnNwYWNlKiBzdWJzcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Vic3BhY2U7IH0KICAgICBNYXJr
ZWRTcGFjZSYgbWFya2VkU3BhY2UoKSBjb25zdDsKICAgICAKKyAgICBjb25zdCBGcmVlTGlzdCYg
ZnJlZUxpc3QoKSBjb25zdCB7IHJldHVybiBtX2ZyZWVMaXN0OyB9CisgICAgCiAgICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgdm9pZCBkdW1wQml0cyhQcmludFN0cmVhbSYg
PSBXVEY6OmRhdGFGaWxlKCkpOwogICAgIApAQCAtMjI3LDggKzIyOSw2IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCogYWxsb2NhdGVJbihNYXJrZWRCbG9jazo6SGFuZGxlKik7CiAgICAgQUxXQVlTX0lO
TElORSB2b2lkIGRvVGVzdENvbGxlY3Rpb25zSWZOZWVkZWQoR0NEZWZlcnJhbENvbnRleHQqKTsK
ICAgICAKLSAgICB2b2lkIHNldEZyZWVMaXN0KGNvbnN0IEZyZWVMaXN0Jik7Ci0gICAgCiAgICAg
RnJlZUxpc3QgbV9mcmVlTGlzdDsKICAgICAKICAgICBWZWN0b3I8TWFya2VkQmxvY2s6OkhhbmRs
ZSo+IG1fYmxvY2tzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxs
b2NhdG9ySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtlZEFsbG9jYXRvcklubGluZXMuaAkocmV2aXNpb24gMjE3NjQ2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNSw0NCArMjUsMzAgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJGcmVlTGlz
dElubGluZXMuaCIKICNpbmNsdWRlICJNYXJrZWRBbGxvY2F0b3IuaCIKIAogbmFtZXNwYWNlIEpT
QyB7CiAKK2lubGluZSBib29sIE1hcmtlZEFsbG9jYXRvcjo6aXNGcmVlTGlzdGVkQ2VsbChjb25z
dCB2b2lkKiB0YXJnZXQpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZnJlZUxpc3QuY29udGFpbnMo
Yml0d2lzZV9jYXN0PEhlYXBDZWxsKj4odGFyZ2V0KSk7Cit9CisKIEFMV0FZU19JTkxJTkUgdm9p
ZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZShHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJy
YWxDb250ZXh0KQogewotICAgIHVuc2lnbmVkIHJlbWFpbmluZyA9IG1fZnJlZUxpc3QucmVtYWlu
aW5nOwotICAgIGlmIChyZW1haW5pbmcpIHsKLSAgICAgICAgdW5zaWduZWQgY2VsbFNpemUgPSBt
X2NlbGxTaXplOwotICAgICAgICByZW1haW5pbmcgLT0gY2VsbFNpemU7Ci0gICAgICAgIG1fZnJl
ZUxpc3QucmVtYWluaW5nID0gcmVtYWluaW5nOwotICAgICAgICByZXR1cm4gbV9mcmVlTGlzdC5w
YXlsb2FkRW5kIC0gcmVtYWluaW5nIC0gY2VsbFNpemU7Ci0gICAgfQotICAgIAotICAgIEZyZWVD
ZWxsKiBoZWFkID0gbV9mcmVlTGlzdC5oZWFkOwotICAgIGlmIChVTkxJS0VMWSghaGVhZCkpCi0g
ICAgICAgIHJldHVybiB0cnlBbGxvY2F0ZVNsb3dDYXNlKGRlZmVycmFsQ29udGV4dCk7Ci0gICAg
Ci0gICAgbV9mcmVlTGlzdC5oZWFkID0gaGVhZC0+bmV4dDsKLSAgICByZXR1cm4gaGVhZDsKKyAg
ICByZXR1cm4gbV9mcmVlTGlzdC5hbGxvY2F0ZSgKKyAgICAgICAgWyZdICgpIC0+IEhlYXBDZWxs
KiB7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SGVhcENlbGwqPih0cnlBbGxvY2F0
ZVNsb3dDYXNlKGRlZmVycmFsQ29udGV4dCkpOworICAgICAgICB9KTsKIH0KIAogQUxXQVlTX0lO
TElORSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlKEdDRGVmZXJyYWxDb250ZXh0KiBk
ZWZlcnJhbENvbnRleHQpCiB7Ci0gICAgdW5zaWduZWQgcmVtYWluaW5nID0gbV9mcmVlTGlzdC5y
ZW1haW5pbmc7Ci0gICAgaWYgKHJlbWFpbmluZykgewotICAgICAgICB1bnNpZ25lZCBjZWxsU2l6
ZSA9IG1fY2VsbFNpemU7Ci0gICAgICAgIHJlbWFpbmluZyAtPSBjZWxsU2l6ZTsKLSAgICAgICAg
bV9mcmVlTGlzdC5yZW1haW5pbmcgPSByZW1haW5pbmc7Ci0gICAgICAgIHJldHVybiBtX2ZyZWVM
aXN0LnBheWxvYWRFbmQgLSByZW1haW5pbmcgLSBjZWxsU2l6ZTsKLSAgICB9Ci0gICAgCi0gICAg
RnJlZUNlbGwqIGhlYWQgPSBtX2ZyZWVMaXN0LmhlYWQ7Ci0gICAgaWYgKFVOTElLRUxZKCFoZWFk
KSkKLSAgICAgICAgcmV0dXJuIGFsbG9jYXRlU2xvd0Nhc2UoZGVmZXJyYWxDb250ZXh0KTsKLSAg
ICAKLSAgICBtX2ZyZWVMaXN0LmhlYWQgPSBoZWFkLT5uZXh0OwotICAgIHJldHVybiBoZWFkOwor
ICAgIHJldHVybiBtX2ZyZWVMaXN0LmFsbG9jYXRlKAorICAgICAgICBbJl0gKCkgLT4gSGVhcENl
bGwqIHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIZWFwQ2VsbCo+KGFsbG9jYXRl
U2xvd0Nhc2UoZGVmZXJyYWxDb250ZXh0KSk7CisgICAgICAgIH0pOwogfQogCiB0ZW1wbGF0ZSA8
dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHZvaWQgTWFya2VkQWxsb2NhdG9yOjpmb3JFYWNoQmxv
Y2soY29uc3QgRnVuY3RvciYgZnVuY3RvcikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtlZEJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrZWRCbG9jay5jcHAJKHJldmlzaW9uIDIxNzY0NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsOSArMjYs
MTEgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgogCisj
aW5jbHVkZSAiRnJlZUxpc3RJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVk
ZSAiSlNEZXN0cnVjdGlibGVPYmplY3QuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5j
bHVkZSAiTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIk1hcmtlZEJsb2NrSW5s
aW5lcy5oIgogI2luY2x1ZGUgIlN1cGVyU2FtcGxlci5oIgogI2luY2x1ZGUgIlN3ZWVwaW5nU2Nv
cGUuaCIKQEAgLTEzNCw4ICsxMzYsNyBAQCB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN0b3BB
bGxvY2F0aW5nCiAgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsK
ICAgICAgICAgfSk7CiAKLSAgICBmb3JFYWNoRnJlZUNlbGwoCi0gICAgICAgIGZyZWVMaXN0LAor
ICAgIGZyZWVMaXN0LmZvckVhY2goCiAgICAgICAgIFsmXSAoSGVhcENlbGwqIGNlbGwpIHsKICAg
ICAgICAgICAgIGlmIChmYWxzZSkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCJGcmVlIGNlbGw6
ICIsIFJhd1BvaW50ZXIoY2VsbCksICJcbiIpOwpAQCAtMTU2LDEwICsxNTcsMTAgQEAgdm9pZCBN
YXJrZWRCbG9jazo6SGFuZGxlOjpsYXN0Q2hhbmNlVG9GaQogICAgIG1fd2Vha1NldC5sYXN0Q2hh
bmNlVG9GaW5hbGl6ZSgpOwogICAgIG1fbmV3bHlBbGxvY2F0ZWQuY2xlYXJBbGwoKTsKICAgICBt
X25ld2x5QWxsb2NhdGVkVmVyc2lvbiA9IGhlYXAoKS0+b2JqZWN0U3BhY2UoKS5uZXdseUFsbG9j
YXRlZFZlcnNpb24oKTsKLSAgICBzd2VlcCgpOworICAgIHN3ZWVwKG51bGxwdHIpOwogfQogCi1G
cmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpyZXN1bWVBbGxvY2F0aW5nKCkKK3ZvaWQgTWFy
a2VkQmxvY2s6OkhhbmRsZTo6cmVzdW1lQWxsb2NhdGluZyhGcmVlTGlzdCYgZnJlZUxpc3QpCiB7
CiAgICAgewogICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGJsb2NrKCkubV9sb2NrKTsK
QEAgLTE3Myw0MCArMTc0LDI1IEBAIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnJlc3Vt
ZUFsbG8KICAgICAgICAgICAgIGlmIChmYWxzZSkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCJU
aGVyZSBhaW4ndCBubyBuZXdseSBhbGxvY2F0ZWQuXG4iKTsKICAgICAgICAgICAgIC8vIFRoaXMg
bWVhbnMgd2UgaGFkIGFscmVhZHkgZXhoYXVzdGVkIHRoZSBibG9jayB3aGVuIHdlIHN0b3BwZWQg
YWxsb2NhdGlvbi4KLSAgICAgICAgICAgIHJldHVybiBGcmVlTGlzdCgpOworICAgICAgICAgICAg
ZnJlZUxpc3QuY2xlYXIoKTsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0K
IAogICAgIC8vIFJlLWNyZWF0ZSBvdXIgZnJlZSBsaXN0IGZyb20gYmVmb3JlIHN0b3BwaW5nIGFs
bG9jYXRpb24uIE5vdGUgdGhhdCB0aGlzIG1heSByZXR1cm4gYW4gZW1wdHkKICAgICAvLyBmcmVl
bGlzdCwgaW4gd2hpY2ggY2FzZSB0aGUgYmxvY2sgd2lsbCBzdGlsbCBiZSBNYXJrZWQhCi0gICAg
cmV0dXJuIHN3ZWVwKFN3ZWVwVG9GcmVlTGlzdCk7CisgICAgc3dlZXAoJmZyZWVMaXN0KTsKIH0K
IAogdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjp6YXAoY29uc3QgRnJlZUxpc3QmIGZyZWVMaXN0
KQogewotICAgIGZvckVhY2hGcmVlQ2VsbCgKLSAgICAgICAgZnJlZUxpc3QsCisgICAgZnJlZUxp
c3QuZm9yRWFjaCgKICAgICAgICAgWyZdIChIZWFwQ2VsbCogY2VsbCkgewogICAgICAgICAgICAg
aWYgKG1fYXR0cmlidXRlcy5kZXN0cnVjdGlvbiA9PSBOZWVkc0Rlc3RydWN0aW9uKQogICAgICAg
ICAgICAgICAgIGNlbGwtPnphcCgpOwogICAgICAgICB9KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgRnVuYz4KLXZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6Zm9yRWFjaEZyZWVDZWxsKGNvbnN0
IEZyZWVMaXN0JiBmcmVlTGlzdCwgY29uc3QgRnVuYyYgZnVuYykKLXsKLSAgICBpZiAoZnJlZUxp
c3QucmVtYWluaW5nKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgcmVtYWluaW5nID0gZnJlZUxp
c3QucmVtYWluaW5nOyByZW1haW5pbmc7IHJlbWFpbmluZyAtPSBjZWxsU2l6ZSgpKQotICAgICAg
ICAgICAgZnVuYyhiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPihmcmVlTGlzdC5wYXlsb2FkRW5kIC0g
cmVtYWluaW5nKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZm9yIChGcmVlQ2VsbCogY3VycmVu
dCA9IGZyZWVMaXN0LmhlYWQ7IGN1cnJlbnQ7KSB7Ci0gICAgICAgICAgICBGcmVlQ2VsbCogbmV4
dCA9IGN1cnJlbnQtPm5leHQ7Ci0gICAgICAgICAgICBmdW5jKGJpdHdpc2VfY2FzdDxIZWFwQ2Vs
bCo+KGN1cnJlbnQpKTsKLSAgICAgICAgICAgIGN1cnJlbnQgPSBuZXh0OwotICAgICAgICB9Ci0g
ICAgfQotfQotCiB2b2lkIE1hcmtlZEJsb2NrOjphYm91dFRvTWFya1Nsb3coSGVhcFZlcnNpb24g
bWFya2luZ1ZlcnNpb24pCiB7CiAgICAgQVNTRVJUKHZtKCktPmhlYXAub2JqZWN0U3BhY2UoKS5p
c01hcmtpbmcoKSk7CkBAIC00MDcsMjAgKzM5MywyMiBAQCBTdWJzcGFjZSogTWFya2VkQmxvY2s6
OkhhbmRsZTo6c3Vic3BhY2UoCiAgICAgcmV0dXJuIGFsbG9jYXRvcigpLT5zdWJzcGFjZSgpOwog
fQogCi1GcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzd2VlcChTd2VlcE1vZGUgc3dlZXBN
b2RlKQordm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzd2VlcChGcmVlTGlzdCogZnJlZUxpc3Qp
CiB7CiAgICAgU3dlZXBpbmdTY29wZSBzd2VlcGluZ1Njb3BlKCpoZWFwKCkpOwogICAgIAorICAg
IFN3ZWVwTW9kZSBzd2VlcE1vZGUgPSBmcmVlTGlzdCA/IFN3ZWVwVG9GcmVlTGlzdCA6IFN3ZWVw
T25seTsKKyAgICAKICAgICBtX2FsbG9jYXRvci0+c2V0SXNVbnN3ZXB0KE5vTG9ja2luZ05lY2Vz
c2FyeSwgdGhpcywgZmFsc2UpOwogICAgIAogICAgIG1fd2Vha1NldC5zd2VlcCgpOwogCiAgICAg
aWYgKHN3ZWVwTW9kZSA9PSBTd2VlcE9ubHkgJiYgbV9hdHRyaWJ1dGVzLmRlc3RydWN0aW9uID09
IERvZXNOb3ROZWVkRGVzdHJ1Y3Rpb24pCi0gICAgICAgIHJldHVybiBGcmVlTGlzdCgpOworICAg
ICAgICByZXR1cm47CiAKICAgICBpZiAoVU5MSUtFTFkobV9pc0ZyZWVMaXN0ZWQpKSB7CiAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKHN3ZWVwTW9kZSA9PSBTd2VlcFRvRnJlZUxpc3QpOwotICAgICAg
ICByZXR1cm4gRnJlZUxpc3QoKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKICAgICBB
U1NFUlQoIW1fYWxsb2NhdG9yLT5pc0FsbG9jYXRlZChOb0xvY2tpbmdOZWNlc3NhcnksIHRoaXMp
KTsKQEAgLTQyOCw4ICs0MTYsMTAgQEAgRnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3dl
ZXAoU3dlZQogICAgIGlmIChzcGFjZSgpLT5pc01hcmtpbmcoKSkKICAgICAgICAgYmxvY2soKS5t
X2xvY2subG9jaygpOwogICAgIAotICAgIGlmIChtX2F0dHJpYnV0ZXMuZGVzdHJ1Y3Rpb24gPT0g
TmVlZHNEZXN0cnVjdGlvbikKLSAgICAgICAgcmV0dXJuIHN1YnNwYWNlKCktPmZpbmlzaFN3ZWVw
KCp0aGlzLCBzd2VlcE1vZGUpOworICAgIGlmIChtX2F0dHJpYnV0ZXMuZGVzdHJ1Y3Rpb24gPT0g
TmVlZHNEZXN0cnVjdGlvbikgeworICAgICAgICBzdWJzcGFjZSgpLT5maW5pc2hTd2VlcCgqdGhp
cywgZnJlZUxpc3QpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgIAogICAgIC8vIEhhbmRs
ZSB0aGUgbm8tZGVzdHJ1Y3RvciBzcGVjaWFsaXphdGlvbnMgaGVyZSwgc2luY2Ugd2UgaGF2ZSB0
aGUgbW9zdCBvZiB0aG9zZS4gVGhpcwogICAgIC8vIGVuc3VyZXMgdGhhdCB0aGV5IGRvbid0IGdl
dCByZS1zcGVjaWFsaXplZCBmb3IgZXZlcnkgZGVzdHJ1Y3RvciBzcGFjZS4KQEAgLTQzOSw3ICs0
MjksNiBAQCBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzd2VlcChTd2VlCiAgICAgTmV3
bHlBbGxvY2F0ZWRNb2RlIG5ld2x5QWxsb2NhdGVkTW9kZSA9IHRoaXMtPm5ld2x5QWxsb2NhdGVk
TW9kZSgpOwogICAgIE1hcmtzTW9kZSBtYXJrc01vZGUgPSB0aGlzLT5tYXJrc01vZGUoKTsKICAg
ICAKLSAgICBGcmVlTGlzdCByZXN1bHQ7CiAgICAgYXV0byB0cnlTcGVjaWFsaXplZCA9IFsmXSAo
KSAtPiBib29sIHsKICAgICAgICAgaWYgKHN3ZWVwTW9kZSAhPSBTd2VlcFRvRnJlZUxpc3QpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC00NTIsMjAgKzQ0MSwyMCBAQCBGcmVlTGlzdCBN
YXJrZWRCbG9jazo6SGFuZGxlOjpzd2VlcChTd2VlCiAgICAgICAgIGNhc2UgSXNFbXB0eToKICAg
ICAgICAgICAgIHN3aXRjaCAobWFya3NNb2RlKSB7CiAgICAgICAgICAgICBjYXNlIE1hcmtzTm90
U3RhbGU6Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gc3BlY2lhbGl6ZWRTd2VlcDx0cnVlLCBJ
c0VtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzTm9EZXN0cnVjdG9ycywgRG9udFNjcmli
YmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBNYXJrc05vdFN0YWxlPihJc0VtcHR5LCBT
d2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzTm9EZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBEb2Vz
Tm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBNYXJrc05vdFN0YWxlLCBbXSAoVk0mLCBKU0NlbGwqKSB7
IH0pOworICAgICAgICAgICAgICAgIHNwZWNpYWxpemVkU3dlZXA8dHJ1ZSwgSXNFbXB0eSwgU3dl
ZXBUb0ZyZWVMaXN0LCBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9lc05v
dEhhdmVOZXdseUFsbG9jYXRlZCwgTWFya3NOb3RTdGFsZT4oZnJlZUxpc3QsIElzRW1wdHksIFN3
ZWVwVG9GcmVlTGlzdCwgQmxvY2tIYXNOb0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUsIERvZXNO
b3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzTm90U3RhbGUsIFtdIChWTSYsIEpTQ2VsbCopIHsg
fSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICBjYXNlIE1hcmtz
U3RhbGU6Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gc3BlY2lhbGl6ZWRTd2VlcDx0cnVlLCBJ
c0VtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzTm9EZXN0cnVjdG9ycywgRG9udFNjcmli
YmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBNYXJrc1N0YWxlPihJc0VtcHR5LCBTd2Vl
cFRvRnJlZUxpc3QsIEJsb2NrSGFzTm9EZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90
SGF2ZU5ld2x5QWxsb2NhdGVkLCBNYXJrc1N0YWxlLCBbXSAoVk0mLCBKU0NlbGwqKSB7IH0pOwor
ICAgICAgICAgICAgICAgIHNwZWNpYWxpemVkU3dlZXA8dHJ1ZSwgSXNFbXB0eSwgU3dlZXBUb0Zy
ZWVMaXN0LCBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9lc05vdEhhdmVO
ZXdseUFsbG9jYXRlZCwgTWFya3NTdGFsZT4oZnJlZUxpc3QsIElzRW1wdHksIFN3ZWVwVG9GcmVl
TGlzdCwgQmxvY2tIYXNOb0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUsIERvZXNOb3RIYXZlTmV3
bHlBbGxvY2F0ZWQsIE1hcmtzU3RhbGUsIFtdIChWTSYsIEpTQ2VsbCopIHsgfSk7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBOb3RFbXB0eToKICAgICAgICAgICAgIHN3aXRjaCAobWFya3NNb2RlKSB7
CiAgICAgICAgICAgICBjYXNlIE1hcmtzTm90U3RhbGU6Ci0gICAgICAgICAgICAgICAgcmVzdWx0
ID0gc3BlY2lhbGl6ZWRTd2VlcDx0cnVlLCBOb3RFbXB0eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9j
a0hhc05vRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRl
ZCwgTWFya3NOb3RTdGFsZT4oSXNFbXB0eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hhc05vRGVz
dHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCwgTWFya3NO
b3RTdGFsZSwgW10gKFZNJiwgSlNDZWxsKikgeyB9KTsKKyAgICAgICAgICAgICAgICBzcGVjaWFs
aXplZFN3ZWVwPHRydWUsIE5vdEVtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzTm9EZXN0
cnVjdG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBNYXJrc05v
dFN0YWxlPihmcmVlTGlzdCwgSXNFbXB0eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hhc05vRGVz
dHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCwgTWFya3NO
b3RTdGFsZSwgW10gKFZNJiwgSlNDZWxsKikgeyB9KTsKICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgICAgIGNhc2UgTWFya3NTdGFsZToKLSAgICAgICAgICAgICAgICByZXN1
bHQgPSBzcGVjaWFsaXplZFN3ZWVwPHRydWUsIE5vdEVtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJs
b2NrSGFzTm9EZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2Nh
dGVkLCBNYXJrc1N0YWxlPihJc0VtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzTm9EZXN0
cnVjdG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBNYXJrc1N0
YWxlLCBbXSAoVk0mLCBKU0NlbGwqKSB7IH0pOworICAgICAgICAgICAgICAgIHNwZWNpYWxpemVk
U3dlZXA8dHJ1ZSwgTm90RW1wdHksIFN3ZWVwVG9GcmVlTGlzdCwgQmxvY2tIYXNOb0Rlc3RydWN0
b3JzLCBEb250U2NyaWJibGUsIERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzU3RhbGU+
KGZyZWVMaXN0LCBJc0VtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzTm9EZXN0cnVjdG9y
cywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBNYXJrc1N0YWxlLCBb
XSAoVk0mLCBKU0NlbGwqKSB7IH0pOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CkBAIC00NzUsMTAgKzQ2NCwxNiBAQCBGcmVl
TGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzd2VlcChTd2VlCiAgICAgfTsKICAgICAKICAgICBp
ZiAodHJ5U3BlY2lhbGl6ZWQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0
dXJuOwogCiAgICAgLy8gVGhlIHRlbXBsYXRlIGFyZ3VtZW50cyBkb24ndCBtYXR0ZXIgYmVjYXVz
ZSB0aGUgZmlyc3Qgb25lIGlzIGZhbHNlLgotICAgIHJldHVybiBzcGVjaWFsaXplZFN3ZWVwPGZh
bHNlLCBJc0VtcHR5LCBTd2VlcE9ubHksIEJsb2NrSGFzTm9EZXN0cnVjdG9ycywgRG9udFNjcmli
YmxlLCBIYXNOZXdseUFsbG9jYXRlZCwgTWFya3NTdGFsZT4oZW1wdHlNb2RlLCBzd2VlcE1vZGUs
IEJsb2NrSGFzTm9EZXN0cnVjdG9ycywgc2NyaWJibGVNb2RlLCBuZXdseUFsbG9jYXRlZE1vZGUs
IG1hcmtzTW9kZSwgW10gKFZNJiwgSlNDZWxsKikgeyB9KTsKKyAgICBzcGVjaWFsaXplZFN3ZWVw
PGZhbHNlLCBJc0VtcHR5LCBTd2VlcE9ubHksIEJsb2NrSGFzTm9EZXN0cnVjdG9ycywgRG9udFNj
cmliYmxlLCBIYXNOZXdseUFsbG9jYXRlZCwgTWFya3NTdGFsZT4oZnJlZUxpc3QsIGVtcHR5TW9k
ZSwgc3dlZXBNb2RlLCBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMsIHNjcmliYmxlTW9kZSwgbmV3bHlB
bGxvY2F0ZWRNb2RlLCBtYXJrc01vZGUsIFtdIChWTSYsIEpTQ2VsbCopIHsgfSk7Cit9CisKK2Jv
b2wgTWFya2VkQmxvY2s6OkhhbmRsZTo6aXNGcmVlTGlzdGVkQ2VsbChjb25zdCB2b2lkKiB0YXJn
ZXQpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlzRnJlZUxpc3RlZCgpKTsKKyAgICByZXR1cm4gbV9h
bGxvY2F0b3ItPmlzRnJlZUxpc3RlZENlbGwodGFyZ2V0KTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJKHJldmlz
aW9uIDIxNzY0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIzLDcgKzIzLDYgQEAKIAogI2luY2x1ZGUgIkFsbG9jYXRvckF0
dHJpYnV0ZXMuaCIKICNpbmNsdWRlICJEZXN0cnVjdGlvbk1vZGUuaCIKLSNpbmNsdWRlICJGcmVl
TGlzdC5oIgogI2luY2x1ZGUgIkhlYXBDZWxsLmgiCiAjaW5jbHVkZSAiSXRlcmF0aW9uU3RhdHVz
LmgiCiAjaW5jbHVkZSAiV2Vha1NldC5oIgpAQCAtMzYsNiArMzUsNyBAQAogCiBuYW1lc3BhY2Ug
SlNDIHsKICAgICAKK2NsYXNzIEZyZWVMaXN0OwogY2xhc3MgSGVhcDsKIGNsYXNzIEpTQ2VsbDsK
IGNsYXNzIE1hcmtlZEFsbG9jYXRvcjsKQEAgLTExNywyMSArMTE3LDIyIEBAIHB1YmxpYzoKICAg
ICAgICAgVk0qIHZtKCkgY29uc3Q7CiAgICAgICAgIFdlYWtTZXQmIHdlYWtTZXQoKTsKICAgICAg
ICAgICAgIAorICAgICAgICBlbnVtIFN3ZWVwTW9kZSB7IFN3ZWVwT25seSwgU3dlZXBUb0ZyZWVM
aXN0IH07CisKICAgICAgICAgLy8gU3dlZXBpbmcgZW5zdXJlcyB0aGF0IGRlc3RydWN0b3JzIGdl
dCBjYWxsZWQgYW5kIHJlbW92ZXMgdGhlIGJsb2NrIGZyb20gdGhlIHVuc3dlcHQKICAgICAgICAg
Ly8gc2V0LiBTd2VlcGluZyB0byBmcmVlIGxpc3QgYWxzbyByZW1vdmVzIHRoZSBibG9jayBmcm9t
IHRoZSBlbXB0eSBzZXQsIGlmIGl0IHdhcyBpbiB0aGF0CiAgICAgICAgIC8vIHNldC4gU3dlZXBp
bmcgd2l0aCBTd2VlcE9ubHkgbWF5IGFkZCB0aGlzIGJsb2NrIHRvIHRoZSBlbXB0eSBzZXQsIGlm
IHRoZSBibG9jayBpcyBmb3VuZAotICAgICAgICAvLyB0byBiZSBlbXB0eS4KKyAgICAgICAgLy8g
dG8gYmUgZW1wdHkuIFRoZSBmcmVlLWxpc3QgYmVpbmcgbnVsbCBpbXBsaWVzIFN3ZWVwT25seS4K
ICAgICAgICAgLy8KICAgICAgICAgLy8gTm90ZSB0aGF0IHlvdSBuZWVkIHRvIG1ha2Ugc3VyZSB0
aGF0IHRoZSBlbXB0eSBiaXQgcmVmbGVjdHMgcmVhbGl0eS4gSWYgaXQncyBub3Qgc2V0CiAgICAg
ICAgIC8vIGFuZCB0aGUgYmxvY2sgaXMgZnJlc2hseSBjcmVhdGVkLCB0aGVuIHdlJ2xsIG1ha2Ug
dGhlIG1pc3Rha2Ugb2YgcnVubmluZyBkZXN0cnVjdG9ycyBpbgogICAgICAgICAvLyB0aGUgYmxv
Y2suIElmIGl0J3Mgbm90IHNldCBhbmQgdGhlIGJsb2NrIGhhcyBub3RoaW5nIG1hcmtlZCwgdGhl
biB3ZSdsbCBtYWtlIHRoZQogICAgICAgICAvLyBtaXN0YWtlIG9mIG1ha2luZyBhIHBvcCBmcmVl
bGlzdCByYXRoZXIgdGhhbiBhIGJ1bXAgZnJlZWxpc3QuCi0gICAgICAgIGVudW0gU3dlZXBNb2Rl
IHsgU3dlZXBPbmx5LCBTd2VlcFRvRnJlZUxpc3QgfTsKLSAgICAgICAgRnJlZUxpc3Qgc3dlZXAo
U3dlZXBNb2RlID0gU3dlZXBPbmx5KTsKKyAgICAgICAgdm9pZCBzd2VlcChGcmVlTGlzdCopOwog
ICAgICAgICAKICAgICAgICAgLy8gVGhpcyBpcyB0byBiZSBjYWxsZWQgYnkgU3Vic3BhY2UuCiAg
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIERlc3Ryb3lGdW5jPgotICAgICAgICBGcmVlTGlzdCBm
aW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZShTd2VlcE1vZGUsIGNvbnN0IERlc3Ryb3lGdW5jJik7
CisgICAgICAgIHZvaWQgZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2UoRnJlZUxpc3QqLCBjb25z
dCBEZXN0cm95RnVuYyYpOwogICAgICAgICAKICAgICAgICAgdm9pZCB1bnN3ZWVwV2l0aE5vTmV3
bHlBbGxvY2F0ZWQoKTsKICAgICAgICAgCkBAIC0xNDcsNyArMTQ4LDcgQEAgcHVibGljOgogICAg
ICAgICAvLyBvZiB0aGVzZSBmdW5jdGlvbnM6CiAgICAgICAgIHZvaWQgZGlkQ29uc3VtZUZyZWVM
aXN0KCk7IC8vIENhbGwgdGhpcyBvbmNlIHlvdSd2ZSBhbGxvY2F0ZWQgYWxsIHRoZSBpdGVtcyBp
biB0aGUgZnJlZSBsaXN0LgogICAgICAgICB2b2lkIHN0b3BBbGxvY2F0aW5nKGNvbnN0IEZyZWVM
aXN0Jik7Ci0gICAgICAgIEZyZWVMaXN0IHJlc3VtZUFsbG9jYXRpbmcoKTsgLy8gQ2FsbCB0aGlz
IGlmIHlvdSBjYW5vbmljYWxpemVkIGEgYmxvY2sgZm9yIHNvbWUgbm9uLWNvbGxlY3Rpb24gcmVs
YXRlZCBwdXJwb3NlLgorICAgICAgICB2b2lkIHJlc3VtZUFsbG9jYXRpbmcoRnJlZUxpc3QmKTsg
Ly8gQ2FsbCB0aGlzIGlmIHlvdSBjYW5vbmljYWxpemVkIGEgYmxvY2sgZm9yIHNvbWUgbm9uLWNv
bGxlY3Rpb24gcmVsYXRlZCBwdXJwb3NlLgogICAgICAgICAgICAgCiAgICAgICAgIHNpemVfdCBj
ZWxsU2l6ZSgpOwogICAgICAgICBpbmxpbmUgdW5zaWduZWQgY2VsbHNQZXJCbG9jaygpOwpAQCAt
MjE1LDEwICsyMTYsNyBAQCBwdWJsaWM6CiAgICAgICAgIE1hcmtzTW9kZSBtYXJrc01vZGUoKTsK
ICAgICAgICAgCiAgICAgICAgIHRlbXBsYXRlPGJvb2wsIEVtcHR5TW9kZSwgU3dlZXBNb2RlLCBT
d2VlcERlc3RydWN0aW9uTW9kZSwgU2NyaWJibGVNb2RlLCBOZXdseUFsbG9jYXRlZE1vZGUsIE1h
cmtzTW9kZSwgdHlwZW5hbWUgRGVzdHJveUZ1bmM+Ci0gICAgICAgIEZyZWVMaXN0IHNwZWNpYWxp
emVkU3dlZXAoRW1wdHlNb2RlLCBTd2VlcE1vZGUsIFN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlLCBTY3Jp
YmJsZU1vZGUsIE5ld2x5QWxsb2NhdGVkTW9kZSwgTWFya3NNb2RlLCBjb25zdCBEZXN0cm95RnVu
YyYpOwotICAgICAgICAKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLSAgICAgICAg
dm9pZCBmb3JFYWNoRnJlZUNlbGwoY29uc3QgRnJlZUxpc3QmLCBjb25zdCBGdW5jJik7CisgICAg
ICAgIHZvaWQgc3BlY2lhbGl6ZWRTd2VlcChGcmVlTGlzdCosIEVtcHR5TW9kZSwgU3dlZXBNb2Rl
LCBTd2VlcERlc3RydWN0aW9uTW9kZSwgU2NyaWJibGVNb2RlLCBOZXdseUFsbG9jYXRlZE1vZGUs
IE1hcmtzTW9kZSwgY29uc3QgRGVzdHJveUZ1bmMmKTsKICAgICAgICAgCiAgICAgICAgIHZvaWQg
c2V0SXNGcmVlTGlzdGVkKCk7CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkQmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2VkQmxvY2tJbmxpbmVzLmgJKHJldmlzaW9uIDIxNzY0NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrSW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTcsMTIgKzExNyw2IEBAIGlubGluZSBib29sIE1hcmtlZEJsb2NrOjpIYW5kbGU6
OmlzTGl2ZUMKICAgICByZXR1cm4gaXNMaXZlKG1hcmtpbmdWZXJzaW9uLCBpc01hcmtpbmcsIHN0
YXRpY19jYXN0PGNvbnN0IEhlYXBDZWxsKj4ocCkpOwogfQogCi1pbmxpbmUgYm9vbCBNYXJrZWRC
bG9jazo6SGFuZGxlOjppc0ZyZWVMaXN0ZWRDZWxsKGNvbnN0IHZvaWQqIHRhcmdldCkgY29uc3QK
LXsKLSAgICBBU1NFUlQoaXNGcmVlTGlzdGVkKCkpOwotICAgIHJldHVybiBtX2FsbG9jYXRvci0+
aXNGcmVlTGlzdGVkQ2VsbCh0YXJnZXQpOwotfQotCiAvLyBUaGUgZm9sbG93aW5nIGhhcyB0byBi
ZSB0cnVlIGZvciBzcGVjaWFsaXphdGlvbiB0byBraWNrIGluOgogLy8KIC8vIHN3ZWVwTW9kZSA9
PSBTd2VlcFRvRnJlZUxpc3QKQEAgLTE0NSw3ICsxMzksNyBAQCBpbmxpbmUgYm9vbCBNYXJrZWRC
bG9jazo6SGFuZGxlOjppc0ZyZWVMCiAvLyBPbmx5IHRoZSBEb2VzTm90TmVlZERlc3RydWN0aW9u
IG9uZSBzaG91bGQgYmUgc3BlY2lhbGl6ZWQgYnkgTWFya2VkQmxvY2suCiAKIHRlbXBsYXRlPGJv
b2wgc3BlY2lhbGl6ZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6RW1wdHlNb2RlIHNwZWNpYWxpemVk
RW1wdHlNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcE1vZGUgc3BlY2lhbGl6ZWRTd2Vl
cE1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlIHNwZWNpYWxp
emVkRGVzdHJ1Y3Rpb25Nb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTY3JpYmJsZU1vZGUgc3Bl
Y2lhbGl6ZWRTY3JpYmJsZU1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6Ok5ld2x5QWxsb2NhdGVk
TW9kZSBzcGVjaWFsaXplZE5ld2x5QWxsb2NhdGVkTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6
TWFya3NNb2RlIHNwZWNpYWxpemVkTWFya3NNb2RlLCB0eXBlbmFtZSBEZXN0cm95RnVuYz4KLUZy
ZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxpemVkU3dlZXAoTWFya2VkQmxvY2s6
OkhhbmRsZTo6RW1wdHlNb2RlIGVtcHR5TW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBN
b2RlIHN3ZWVwTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBEZXN0cnVjdGlvbk1vZGUg
ZGVzdHJ1Y3Rpb25Nb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTY3JpYmJsZU1vZGUgc2NyaWJi
bGVNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpOZXdseUFsbG9jYXRlZE1vZGUgbmV3bHlBbGxv
Y2F0ZWRNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpNYXJrc01vZGUgbWFya3NNb2RlLCBjb25z
dCBEZXN0cm95RnVuYyYgZGVzdHJveUZ1bmMpCit2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OnNw
ZWNpYWxpemVkU3dlZXAoRnJlZUxpc3QqIGZyZWVMaXN0LCBNYXJrZWRCbG9jazo6SGFuZGxlOjpF
bXB0eU1vZGUgZW1wdHlNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcE1vZGUgc3dlZXBN
b2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlv
bk1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlNjcmliYmxlTW9kZSBzY3JpYmJsZU1vZGUsIE1h
cmtlZEJsb2NrOjpIYW5kbGU6Ok5ld2x5QWxsb2NhdGVkTW9kZSBuZXdseUFsbG9jYXRlZE1vZGUs
IE1hcmtlZEJsb2NrOjpIYW5kbGU6Ok1hcmtzTW9kZSBtYXJrc01vZGUsIGNvbnN0IERlc3Ryb3lG
dW5jJiBkZXN0cm95RnVuYykKIHsKICAgICBpZiAoc3BlY2lhbGl6ZSkgewogICAgICAgICBlbXB0
eU1vZGUgPSBzcGVjaWFsaXplZEVtcHR5TW9kZTsKQEAgLTE5MywxNyArMTg3LDE4IEBAIEZyZWVM
aXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxpemUKICAgICAgICAgICAgIG1fYWxsb2Nh
dG9yLT5zZXRJc0VtcHR5KE5vTG9ja2luZ05lY2Vzc2FyeSwgdGhpcywgdHJ1ZSk7CiAgICAgICAg
IGlmIChzcGFjZSgpLT5pc01hcmtpbmcoKSkKICAgICAgICAgICAgIGJsb2NrLm1fbG9jay51bmxv
Y2soKTsKLSAgICAgICAgRnJlZUxpc3QgcmVzdWx0ID0gRnJlZUxpc3Q6OmJ1bXAocGF5bG9hZEVu
ZCwgcGF5bG9hZEVuZCAtIHBheWxvYWRCZWdpbik7CisgICAgICAgIGlmIChzd2VlcE1vZGUgPT0g
U3dlZXBUb0ZyZWVMaXN0KQorICAgICAgICAgICAgZnJlZUxpc3QtPmluaXRpYWxpemVCdW1wKHBh
eWxvYWRFbmQsIHBheWxvYWRFbmQgLSBwYXlsb2FkQmVnaW4pOwogICAgICAgICBpZiAoZmFsc2Up
Ci0gICAgICAgICAgICBkYXRhTG9nKCJRdWlja2x5IHN3ZXB0IGJsb2NrICIsIFJhd1BvaW50ZXIo
dGhpcyksICIgd2l0aCBjZWxsIHNpemUgIiwgY2VsbFNpemUoKSwgIiBhbmQgYXR0cmlidXRlcyAi
LCBtX2F0dHJpYnV0ZXMsICI6ICIsIHJlc3VsdCwgIlxuIik7Ci0gICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgICAgICAgICBkYXRhTG9nKCJRdWlja2x5IHN3ZXB0IGJsb2NrICIsIFJhd1BvaW50
ZXIodGhpcyksICIgd2l0aCBjZWxsIHNpemUgIiwgY2VsbFNpemUoKSwgIiBhbmQgYXR0cmlidXRl
cyAiLCBtX2F0dHJpYnV0ZXMsICI6ICIsIHBvaW50ZXJEdW1wKGZyZWVMaXN0KSwgIlxuIik7Cisg
ICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICAvLyBUaGlzIHByb2R1Y2VzIGEgZnJlZSBsaXN0
IHRoYXQgaXMgb3JkZXJlZCBpbiByZXZlcnNlIHRocm91Z2ggdGhlIGJsb2NrLgogICAgIC8vIFRo
aXMgaXMgZmluZSwgc2luY2UgdGhlIGFsbG9jYXRpb24gY29kZSBtYWtlcyBubyBhc3N1bXB0aW9u
cyBhYm91dCB0aGUKICAgICAvLyBvcmRlciBvZiB0aGUgZnJlZSBsaXN0LgotICAgIEZyZWVDZWxs
KiBoZWFkID0gMDsKLSAgICBzaXplX3QgY291bnQgPSAwOworICAgIGlmIChzd2VlcE1vZGUgPT0g
U3dlZXBUb0ZyZWVMaXN0KQorICAgICAgICBmcmVlTGlzdC0+aW5pdGlhbGl6ZUxpc3QoJmJsb2Nr
KTsKICAgICBib29sIGlzRW1wdHkgPSB0cnVlOwogICAgIFZlY3RvcjxzaXplX3Q+IGRlYWRDZWxs
czsKICAgICBWTSYgdm0gPSAqdGhpcy0+dm0oKTsKQEAgLTIxOSwxMiArMjE0LDkgQEAgRnJlZUxp
c3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3BlY2lhbGl6ZQogICAgICAgICB9CiAKICAgICAgICAg
aWYgKHN3ZWVwTW9kZSA9PSBTd2VlcFRvRnJlZUxpc3QpIHsKLSAgICAgICAgICAgIEZyZWVDZWxs
KiBmcmVlQ2VsbCA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEZyZWVDZWxsKj4oY2VsbCk7CiAgICAg
ICAgICAgICBpZiAoc2NyaWJibGVNb2RlID09IFNjcmliYmxlKQotICAgICAgICAgICAgICAgIHNj
cmliYmxlKGZyZWVDZWxsLCBjZWxsU2l6ZSgpKTsKLSAgICAgICAgICAgIGZyZWVDZWxsLT5uZXh0
ID0gaGVhZDsKLSAgICAgICAgICAgIGhlYWQgPSBmcmVlQ2VsbDsKLSAgICAgICAgICAgICsrY291
bnQ7CisgICAgICAgICAgICAgICAgc2NyaWJibGUoY2VsbCwgY2VsbFNpemUoKSk7CisgICAgICAg
ICAgICBmcmVlTGlzdC0+YWRkRnJlZUNlbGwoY2VsbCk7CiAgICAgICAgIH0KICAgICB9OwogICAg
IGZvciAoc2l6ZV90IGkgPSBmaXJzdEF0b20oKTsgaSA8IG1fZW5kQXRvbTsgaSArPSBtX2F0b21z
UGVyQ2VsbCkgewpAQCAtMjU0LDI2ICsyNDYsMjQgQEAgRnJlZUxpc3QgTWFya2VkQmxvY2s6Okhh
bmRsZTo6c3BlY2lhbGl6ZQogICAgICAgICAgICAgaGFuZGxlRGVhZENlbGwoaSk7CiAgICAgfQog
Ci0gICAgRnJlZUxpc3QgcmVzdWx0ID0gRnJlZUxpc3Q6Omxpc3QoaGVhZCwgY291bnQgKiBjZWxs
U2l6ZSgpKTsKICAgICBpZiAoc3dlZXBNb2RlID09IFN3ZWVwVG9GcmVlTGlzdCkKICAgICAgICAg
c2V0SXNGcmVlTGlzdGVkKCk7CiAgICAgZWxzZSBpZiAoaXNFbXB0eSkKICAgICAgICAgbV9hbGxv
Y2F0b3ItPnNldElzRW1wdHkoTm9Mb2NraW5nTmVjZXNzYXJ5LCB0aGlzLCB0cnVlKTsKICAgICBp
ZiAoZmFsc2UpCi0gICAgICAgIGRhdGFMb2coIlNsb3dseSBzd2VwdCBibG9jayAiLCBSYXdQb2lu
dGVyKCZibG9jayksICIgd2l0aCBjZWxsIHNpemUgIiwgY2VsbFNpemUoKSwgIiBhbmQgYXR0cmli
dXRlcyAiLCBtX2F0dHJpYnV0ZXMsICI6ICIsIHJlc3VsdCwgIlxuIik7Ci0gICAgcmV0dXJuIHJl
c3VsdDsKKyAgICAgICAgZGF0YUxvZygiU2xvd2x5IHN3ZXB0IGJsb2NrICIsIFJhd1BvaW50ZXIo
JmJsb2NrKSwgIiB3aXRoIGNlbGwgc2l6ZSAiLCBjZWxsU2l6ZSgpLCAiIGFuZCBhdHRyaWJ1dGVz
ICIsIG1fYXR0cmlidXRlcywgIjogIiwgcG9pbnRlckR1bXAoZnJlZUxpc3QpLCAiXG4iKTsKIH0K
IAogdGVtcGxhdGU8dHlwZW5hbWUgRGVzdHJveUZ1bmM+Ci1GcmVlTGlzdCBNYXJrZWRCbG9jazo6
SGFuZGxlOjpmaW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZShTd2VlcE1vZGUgc3dlZXBNb2RlLCBj
b25zdCBEZXN0cm95RnVuYyYgZGVzdHJveUZ1bmMpCit2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6
OmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlKEZyZWVMaXN0KiBmcmVlTGlzdCwgY29uc3QgRGVz
dHJveUZ1bmMmIGRlc3Ryb3lGdW5jKQogeworICAgIFN3ZWVwTW9kZSBzd2VlcE1vZGUgPSBmcmVl
TGlzdCA/IFN3ZWVwVG9GcmVlTGlzdCA6IFN3ZWVwT25seTsKICAgICBTd2VlcERlc3RydWN0aW9u
TW9kZSBkZXN0cnVjdGlvbk1vZGUgPSB0aGlzLT5zd2VlcERlc3RydWN0aW9uTW9kZSgpOwogICAg
IEVtcHR5TW9kZSBlbXB0eU1vZGUgPSB0aGlzLT5lbXB0eU1vZGUoKTsKICAgICBTY3JpYmJsZU1v
ZGUgc2NyaWJibGVNb2RlID0gdGhpcy0+c2NyaWJibGVNb2RlKCk7CiAgICAgTmV3bHlBbGxvY2F0
ZWRNb2RlIG5ld2x5QWxsb2NhdGVkTW9kZSA9IHRoaXMtPm5ld2x5QWxsb2NhdGVkTW9kZSgpOwog
ICAgIE1hcmtzTW9kZSBtYXJrc01vZGUgPSB0aGlzLT5tYXJrc01vZGUoKTsKIAotICAgIEZyZWVM
aXN0IHJlc3VsdDsKICAgICBhdXRvIHRyeVNwZWNpYWxpemVkID0gWyZdICgpIC0+IGJvb2wgewog
ICAgICAgICBpZiAoc3dlZXBNb2RlICE9IFN3ZWVwVG9GcmVlTGlzdCkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKQEAgLTI4OCwxMCArMjc4LDEwIEBAIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpI
YW5kbGU6OmZpbmlzaFN3ZWUKICAgICAgICAgCiAgICAgICAgIHN3aXRjaCAobWFya3NNb2RlKSB7
CiAgICAgICAgIGNhc2UgTWFya3NOb3RTdGFsZToKLSAgICAgICAgICAgIHJlc3VsdCA9IHNwZWNp
YWxpemVkU3dlZXA8dHJ1ZSwgTm90RW1wdHksIFN3ZWVwVG9GcmVlTGlzdCwgQmxvY2tIYXNEZXN0
cnVjdG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBNYXJrc05v
dFN0YWxlPihJc0VtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzRGVzdHJ1Y3RvcnMsIERv
bnRTY3JpYmJsZSwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCwgTWFya3NOb3RTdGFsZSwgZGVz
dHJveUZ1bmMpOworICAgICAgICAgICAgc3BlY2lhbGl6ZWRTd2VlcDx0cnVlLCBOb3RFbXB0eSwg
U3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hhc0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUsIERvZXNO
b3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzTm90U3RhbGU+KGZyZWVMaXN0LCBJc0VtcHR5LCBT
d2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9lc05v
dEhhdmVOZXdseUFsbG9jYXRlZCwgTWFya3NOb3RTdGFsZSwgZGVzdHJveUZ1bmMpOwogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGNhc2UgTWFya3NTdGFsZToKLSAgICAgICAgICAg
IHJlc3VsdCA9IHNwZWNpYWxpemVkU3dlZXA8dHJ1ZSwgTm90RW1wdHksIFN3ZWVwVG9GcmVlTGlz
dCwgQmxvY2tIYXNEZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxs
b2NhdGVkLCBNYXJrc1N0YWxlPihJc0VtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzRGVz
dHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCwgTWFya3NT
dGFsZSwgZGVzdHJveUZ1bmMpOworICAgICAgICAgICAgc3BlY2lhbGl6ZWRTd2VlcDx0cnVlLCBO
b3RFbXB0eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hhc0Rlc3RydWN0b3JzLCBEb250U2NyaWJi
bGUsIERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzU3RhbGU+KGZyZWVMaXN0LCBJc0Vt
cHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwg
RG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCwgTWFya3NTdGFsZSwgZGVzdHJveUZ1bmMpOwogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0yOTksMTAgKzI4
OSwxMCBAQCBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpmaW5pc2hTd2VlCiAgICAgfTsK
ICAgICAKICAgICBpZiAodHJ5U3BlY2lhbGl6ZWQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICAgICAgcmV0dXJuOwogICAgIAogICAgIC8vIFRoZSB0ZW1wbGF0ZSBhcmd1bWVudHMgZG9u
J3QgbWF0dGVyIGJlY2F1c2UgdGhlIGZpcnN0IG9uZSBpcyBmYWxzZS4KLSAgICByZXR1cm4gc3Bl
Y2lhbGl6ZWRTd2VlcDxmYWxzZSwgSXNFbXB0eSwgU3dlZXBPbmx5LCBCbG9ja0hhc05vRGVzdHJ1
Y3RvcnMsIERvbnRTY3JpYmJsZSwgSGFzTmV3bHlBbGxvY2F0ZWQsIE1hcmtzU3RhbGU+KGVtcHR5
TW9kZSwgc3dlZXBNb2RlLCBkZXN0cnVjdGlvbk1vZGUsIHNjcmliYmxlTW9kZSwgbmV3bHlBbGxv
Y2F0ZWRNb2RlLCBtYXJrc01vZGUsIGRlc3Ryb3lGdW5jKTsKKyAgICBzcGVjaWFsaXplZFN3ZWVw
PGZhbHNlLCBJc0VtcHR5LCBTd2VlcE9ubHksIEJsb2NrSGFzTm9EZXN0cnVjdG9ycywgRG9udFNj
cmliYmxlLCBIYXNOZXdseUFsbG9jYXRlZCwgTWFya3NTdGFsZT4oZnJlZUxpc3QsIGVtcHR5TW9k
ZSwgc3dlZXBNb2RlLCBkZXN0cnVjdGlvbk1vZGUsIHNjcmliYmxlTW9kZSwgbmV3bHlBbGxvY2F0
ZWRNb2RlLCBtYXJrc01vZGUsIGRlc3Ryb3lGdW5jKTsKIH0KIAogaW5saW5lIE1hcmtlZEJsb2Nr
OjpIYW5kbGU6OlN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlIE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN3ZWVw
RGVzdHJ1Y3Rpb25Nb2RlKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNw
YWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFj
ZS5jcHAJKHJldmlzaW9uIDIxNzY0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1
YnNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsOSArNzcsOSBAQCBTdWJzcGFjZTo6flN1
YnNwYWNlKCkKIHsKIH0KIAotRnJlZUxpc3QgU3Vic3BhY2U6OmZpbmlzaFN3ZWVwKE1hcmtlZEJs
b2NrOjpIYW5kbGUmIGJsb2NrLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcE1vZGUgc3dlZXBN
b2RlKQordm9pZCBTdWJzcGFjZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYgYmxv
Y2ssIEZyZWVMaXN0KiBmcmVlTGlzdCkKIHsKLSAgICByZXR1cm4gYmxvY2suZmluaXNoU3dlZXBL
bm93aW5nU3Vic3BhY2Uoc3dlZXBNb2RlLCBEZXN0cm95RnVuYygpKTsKKyAgICBibG9jay5maW5p
c2hTd2VlcEtub3dpbmdTdWJzcGFjZShmcmVlTGlzdCwgRGVzdHJveUZ1bmMoKSk7CiB9CiAKIHZv
aWQgU3Vic3BhY2U6OmRlc3Ryb3koVk0mIHZtLCBKU0NlbGwqIGNlbGwpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgJKHJldmlzaW9uIDIxNzY0NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0
LDcgQEAgcHVibGljOgogICAgIAogICAgIC8vIFRoZSBwdXJwb3NlIG9mIG92ZXJyaWRpbmcgdGhp
cyBpcyB0byBzcGVjaWFsaXplIHRoZSBzd2VlcCBmb3IgeW91ciBkZXN0cnVjdG9ycy4gVGhpcyB3
b24ndAogICAgIC8vIGJlIGNhbGxlZCBmb3Igbm8tZGVzdHJ1Y3RvciBibG9ja3MuIFRoaXMgbXVz
dCBjYWxsIE1hcmtlZEJsb2NrOjpmaW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZS4KLSAgICB2aXJ0
dWFsIEZyZWVMaXN0IGZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmLCBNYXJrZWRCbG9j
azo6SGFuZGxlOjpTd2VlcE1vZGUpOworICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hTd2VlcChNYXJr
ZWRCbG9jazo6SGFuZGxlJiwgRnJlZUxpc3QqKTsKICAgICAKICAgICAvLyBUaGVzZSBnZXQgY2Fs
bGVkIGZvciBsYXJnZSBvYmplY3RzLgogICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KFZNJiwgSlND
ZWxsKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZUlubGluZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZUlubGlu
ZXMuaAkocmV2aXNpb24gMjE3NjQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vi
c3BhY2VJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNwcmFnbWEg
b25jZQogCiAjaW5jbHVkZSAiSlNDZWxsLmgiCi0jaW5jbHVkZSAiTWFya2VkQWxsb2NhdG9yLmgi
CisjaW5jbHVkZSAiTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIk1hcmtlZEJs
b2NrLmgiCiAjaW5jbHVkZSAiTWFya2VkU3BhY2UuaCIKICNpbmNsdWRlICJTdWJzcGFjZS5oIgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZp
c2lvbiAyMTc2NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVy
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDU4LDcgKzE0NTgsNyBAQCBwdWJsaWM6CiAgICAgICAg
IEp1bXAgcG9wUGF0aDsKICAgICAgICAgSnVtcCBkb25lOwogICAgICAgICAKLSAgICAgICAgbG9h
ZDMyKEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBNYXJrZWRBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxp
c3QoKSArIE9CSkVDVF9PRkZTRVRPRihGcmVlTGlzdCwgcmVtYWluaW5nKSksIHJlc3VsdEdQUik7
CisgICAgICAgIGxvYWQzMihBZGRyZXNzKGFsbG9jYXRvckdQUiwgTWFya2VkQWxsb2NhdG9yOjpv
ZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZSZW1haW5pbmcoKSksIHJlc3Vs
dEdQUik7CiAgICAgICAgIHBvcFBhdGggPSBicmFuY2hUZXN0MzIoWmVybywgcmVzdWx0R1BSKTsK
ICAgICAgICAgaWYgKGFsbG9jYXRvcikKICAgICAgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigt
YWxsb2NhdG9yLT5jZWxsU2l6ZSgpKSwgcmVzdWx0R1BSLCBzY3JhdGNoR1BSKTsKQEAgLTE0NzIs
OCArMTQ3Miw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBu
ZWdQdHIocmVzdWx0R1BSKTsKLSAgICAgICAgc3RvcmUzMihzY3JhdGNoR1BSLCBBZGRyZXNzKGFs
bG9jYXRvckdQUiwgTWFya2VkQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBPQkpFQ1Rf
T0ZGU0VUT0YoRnJlZUxpc3QsIHJlbWFpbmluZykpKTsKLSAgICAgICAgQWRkcmVzcyBwYXlsb2Fk
RW5kQWRkciA9IEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBNYXJrZWRBbGxvY2F0b3I6Om9mZnNldE9m
RnJlZUxpc3QoKSArIE9CSkVDVF9PRkZTRVRPRihGcmVlTGlzdCwgcGF5bG9hZEVuZCkpOworICAg
ICAgICBzdG9yZTMyKHNjcmF0Y2hHUFIsIEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBNYXJrZWRBbGxv
Y2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZlJlbWFpbmluZygp
KSk7CisgICAgICAgIEFkZHJlc3MgcGF5bG9hZEVuZEFkZHIgPSBBZGRyZXNzKGFsbG9jYXRvckdQ
UiwgTWFya2VkQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0
T2ZQYXlsb2FkRW5kKCkpOwogICAgICAgICBpZiAoaXNYODYoKSkKICAgICAgICAgICAgIGFkZFB0
cihwYXlsb2FkRW5kQWRkciwgcmVzdWx0R1BSKTsKICAgICAgICAgZWxzZSB7CkBAIC0xNDg1LDEz
ICsxNDg1LDIyIEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIHBvcFBhdGgubGluayh0aGlz
KTsKICAgICAgICAgCi0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhhbGxvY2F0b3JHUFIsIE1hcmtl
ZEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgT0JKRUNUX09GRlNFVE9GKEZyZWVMaXN0
LCBoZWFkKSksIHJlc3VsdEdQUik7Ci0gICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hUZXN0
UHRyKFplcm8sIHJlc3VsdEdQUikpOwotICAgICAgICAKLSAgICAgICAgLy8gVGhlIG9iamVjdCBp
cyBoYWxmLWFsbG9jYXRlZDogd2UgaGF2ZSB3aGF0IHdlIGtub3cgaXMgYSBmcmVzaCBvYmplY3Qs
IGJ1dAotICAgICAgICAvLyBpdCdzIHN0aWxsIG9uIHRoZSBHQydzIGZyZWUgbGlzdC4KLSAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdEdQUiksIHNjcmF0Y2hHUFIpOwotICAgICAgICBzdG9y
ZVB0cihzY3JhdGNoR1BSLCBBZGRyZXNzKGFsbG9jYXRvckdQUiwgTWFya2VkQWxsb2NhdG9yOjpv
ZmZzZXRPZkZyZWVMaXN0KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRnJlZUxpc3QsIGhlYWQpKSk7Cisg
ICAgICAgIGlmIChhbGxvY2F0b3IpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYWxs
b2NhdG9yLT5mcmVlTGlzdCgpLmFkZHJlc3NPZkxpc3QoKSksIHNjcmF0Y2hHUFIpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBNYXJrZWRB
bGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZkxpc3QoKSks
IHNjcmF0Y2hHUFIpOworCisgICAgICAgIGxvYWQzMihBZGRyZXNzKGFsbG9jYXRvckdQUiwgTWFy
a2VkQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZJbmRl
eCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaFRlc3QzMiha
ZXJvLCByZXN1bHRHUFIpKTsKKyAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRH
UFIpOworICAgICAgICBzdG9yZTMyKHJlc3VsdEdQUiwgQWRkcmVzcyhhbGxvY2F0b3JHUFIsIE1h
cmtlZEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mSW5k
ZXgoKSkpOworICAgICAgICBsb2FkMTYoQmFzZUluZGV4KHNjcmF0Y2hHUFIsIHJlc3VsdEdQUiwg
VGltZXNUd28pLCByZXN1bHRHUFIpOworICAgICAgICBpZiAoaXNYODYoKSkKKyAgICAgICAgICAg
IGFkZFB0cihBZGRyZXNzKGFsbG9jYXRvckdQUiwgTWFya2VkQWxsb2NhdG9yOjpvZmZzZXRPZkZy
ZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZCbG9jaygpKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBNYXJr
ZWRBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZkJsb2Nr
KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZFB0cihzY3JhdGNoR1BSLCByZXN1bHRH
UFIpOworICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBkb25lLmxpbmsodGhpcyk7CiAgICAg
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmpl
Y3RTdWJzcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZS5jcHAJKHJldmlzaW9uIDIxNzY0NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3Bh
Y2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw5ICs1Miw5IEBAIEpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0U3Vic3BhY2U6On5KU0Rlc3RydWMKIHsKIH0KIAotRnJlZUxpc3QgSlNEZXN0cnVjdGlibGVP
YmplY3RTdWJzcGFjZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYgaGFuZGxlLCBN
YXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcE1vZGUgc3dlZXBNb2RlKQordm9pZCBKU0Rlc3RydWN0
aWJsZU9iamVjdFN1YnNwYWNlOjpmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiBoYW5k
bGUsIEZyZWVMaXN0KiBmcmVlTGlzdCkKIHsKLSAgICByZXR1cm4gaGFuZGxlLmZpbmlzaFN3ZWVw
S25vd2luZ1N1YnNwYWNlKHN3ZWVwTW9kZSwgRGVzdHJveUZ1bmMoKSk7CisgICAgaGFuZGxlLmZp
bmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlKGZyZWVMaXN0LCBEZXN0cm95RnVuYygpKTsKIH0KIAog
dm9pZCBKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlOjpkZXN0cm95KFZNJiB2bSwgSlNDZWxs
KiBjZWxsKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVjdGli
bGVPYmplY3RTdWJzcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UuaAkocmV2aXNpb24gMjE3NjQ2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RTdWJz
cGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIHB1YmxpYzoKICAgICBKU19F
WFBPUlRfUFJJVkFURSBKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlKENTdHJpbmcgbmFtZSwg
SGVhcCYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgfkpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0U3Vic3BhY2UoKTsKICAgICAKLSAgICBGcmVlTGlzdCBmaW5pc2hTd2VlcChNYXJrZWRCbG9j
azo6SGFuZGxlJiwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBNb2RlKSBvdmVycmlkZTsKKyAg
ICB2b2lkIGZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmLCBGcmVlTGlzdCopIG92ZXJy
aWRlOwogICAgIHZvaWQgZGVzdHJveShWTSYsIEpTQ2VsbCopIG92ZXJyaWRlOwogfTsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVj
dFN1YnNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UuY3BwCShyZXZpc2lvbiAyMTc2NDYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2Jq
ZWN0U3Vic3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw5ICs1Miw5IEBAIEpTU2VnbWVu
dGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZTo6fkpTU2UKIHsKIH0KIAotRnJlZUxpc3QgSlNTZWdt
ZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlOjpmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFu
ZGxlJiBoYW5kbGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwTW9kZSBzd2VlcE1vZGUpCit2
b2lkIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZTo6ZmluaXNoU3dlZXAoTWFya2Vk
QmxvY2s6OkhhbmRsZSYgaGFuZGxlLCBGcmVlTGlzdCogZnJlZUxpc3QpCiB7Ci0gICAgcmV0dXJu
IGhhbmRsZS5maW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZShzd2VlcE1vZGUsIERlc3Ryb3lGdW5j
KCkpOworICAgIGhhbmRsZS5maW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZShmcmVlTGlzdCwgRGVz
dHJveUZ1bmMoKSk7CiB9CiAKIHZvaWQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNl
OjpkZXN0cm95KFZNJiB2bSwgSlNDZWxsKiBjZWxsKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9i
amVjdFN1YnNwYWNlLmgJKHJldmlzaW9uIDIxNzY0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNCw3ICszNCw3IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSBKU1Nl
Z21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJik7CiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNw
YWNlKCk7CiAgICAgCi0gICAgRnJlZUxpc3QgZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRs
ZSYsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwTW9kZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBm
aW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiwgRnJlZUxpc3QqKSBvdmVycmlkZTsKICAg
ICB2b2lkIGRlc3Ryb3koVk0mLCBKU0NlbGwqKSBvdmVycmlkZTsKIH07CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nU3Vic3BhY2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nU3Vic3BhY2UuY3BwCShy
ZXZpc2lvbiAyMTc2NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmlu
Z1N1YnNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsOSArNTIsOSBAQCBKU1N0cmluZ1N1
YnNwYWNlOjp+SlNTdHJpbmdTdWJzcGFjZSgpCiB7CiB9CiAKLUZyZWVMaXN0IEpTU3RyaW5nU3Vi
c3BhY2U6OmZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmIGhhbmRsZSwgTWFya2VkQmxv
Y2s6OkhhbmRsZTo6U3dlZXBNb2RlIHN3ZWVwTW9kZSkKK3ZvaWQgSlNTdHJpbmdTdWJzcGFjZTo6
ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYgaGFuZGxlLCBGcmVlTGlzdCogZnJlZUxp
c3QpCiB7Ci0gICAgcmV0dXJuIGhhbmRsZS5maW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZShzd2Vl
cE1vZGUsIERlc3Ryb3lGdW5jKCkpOworICAgIGhhbmRsZS5maW5pc2hTd2VlcEtub3dpbmdTdWJz
cGFjZShmcmVlTGlzdCwgRGVzdHJveUZ1bmMoKSk7CiB9CiAKIHZvaWQgSlNTdHJpbmdTdWJzcGFj
ZTo6ZGVzdHJveShWTSYgdm0sIEpTQ2VsbCogY2VsbCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU3RyaW5nU3Vic3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ1N1YnNwYWNlLmgJKHJldmlzaW9uIDIxNzY0NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nU3Vic3BhY2UuaAkod29y
a2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgSlNTdHJpbmdTdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmKTsKICAgICBKU19FWFBPUlRf
UFJJVkFURSB2aXJ0dWFsIH5KU1N0cmluZ1N1YnNwYWNlKCk7CiAgICAgCi0gICAgRnJlZUxpc3Qg
ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3
ZWVwTW9kZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFu
ZGxlJiwgRnJlZUxpc3QqKSBvdmVycmlkZTsKICAgICB2b2lkIGRlc3Ryb3koVk0mLCBKU0NlbGwq
KSBvdmVycmlkZTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmNwcAko
cmV2aXNpb24gMjE3NjQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsOSArNTYs
OSBAQCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2U6On5KU1dlYkFzCiB7CiB9CiAKLUZy
ZWVMaXN0IEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZTo6ZmluaXNoU3dlZXAoTWFya2Vk
QmxvY2s6OkhhbmRsZSYgaGFuZGxlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcE1vZGUgc3dl
ZXBNb2RlKQordm9pZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2U6OmZpbmlzaFN3ZWVw
KE1hcmtlZEJsb2NrOjpIYW5kbGUmIGhhbmRsZSwgRnJlZUxpc3QqIGZyZWVMaXN0KQogewotICAg
IHJldHVybiBoYW5kbGUuZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2Uoc3dlZXBNb2RlLCBEZXN0
cm95RnVuYygpKTsKKyAgICBoYW5kbGUuZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2UoZnJlZUxp
c3QsIERlc3Ryb3lGdW5jKCkpOwogfQogCiB2b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJz
cGFjZTo6ZGVzdHJveShWTSYgdm0sIEpTQ2VsbCogY2VsbCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxv
Y2tTdWJzcGFjZS5oCShyZXZpc2lvbiAyMTc2NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UuaAkod29ya2luZyBjb3B5KQpA
QCAtMzYsNyArMzYsNyBAQCBwdWJsaWM6CiAgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNw
YWNlKENTdHJpbmcgbmFtZSwgSGVhcCYpOwogICAgIHZpcnR1YWwgfkpTV2ViQXNzZW1ibHlDb2Rl
QmxvY2tTdWJzcGFjZSgpOwogICAgIAotICAgIEZyZWVMaXN0IGZpbmlzaFN3ZWVwKE1hcmtlZEJs
b2NrOjpIYW5kbGUmLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcE1vZGUpIG92ZXJyaWRlOwor
ICAgIHZvaWQgZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYsIEZyZWVMaXN0Kikgb3Zl
cnJpZGU7CiAgICAgdm9pZCBkZXN0cm95KFZNJiwgSlNDZWxsKikgb3ZlcnJpZGU7CiB9OwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>311728</attachid>
            <date>2017-06-01 11:05:46 -0700</date>
            <delta_ts>2017-06-01 11:22:54 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>55761</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjE3NjYyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMCBA
QAorMjAxNy0wNi0wMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEdDIHNob3VsZCBrZWVwIGl0cyBmcmVlIGxpc3Qgb24gdGhlIHNpZGUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3Mjc5MworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgUHJldmlvdXNseSwgb3Vy
IGJ1bXAnbidwb3AgYWxsb2NhdG9yIHdvdWxkIHVzZSBhIGNvbnZlbnRpb25hbCBsaW5rZWQtbGlz
dCBmb3IgdGhlIGZyZWUtbGlzdC4KKyAgICAgICAgVGhlIGxpbmtlZC1saXN0IHdvdWxkIGJlIHRo
cmVhZGVkIHRocm91Z2ggZnJlZSBtZW1vcnksIGFzIGlzIHRoZSB1c3VhbCBjb252ZW50aW9uLgor
ICAgICAgICAKKyAgICAgICAgSG93ZXZlciwgaXQncyBxdWl0ZSBhIGJpdCBtb3JlIHNhbmUgdG8g
aGF2ZSB0aGUgZnJlZS1saXN0IHJlc2lkZSBzb21ld2hlcmUgb3RoZXIgdGhhbiB0aGUgZnJlZQor
ICAgICAgICBtZW1vcnkuIFRoaXMgcHV0cyB0aGUgZnJlZS1saXN0IGluIGFuIGFycmF5LiBJdCdz
IGEgc3RhY2sgb2YgMTYtYml0IG9mZnNldHMgaW50byB0aGUgYmxvY2suCisgICAgICAgIFRoZSBh
bGxvY2F0b3IgcG9wcyBhbiBvZmZzZXQgb2ZmIHRoZSBzdGFjaywgYW5kIGFkZHMgaXQgdG8gdGhl
IGN1cnJlbnQgYmxvY2sgcG9pbnRlci4gVGhpcworICAgICAgICBpc24ndCBhbnkgc2xvd2VyIHRo
YW4gdGhlIG9sZCBsaW5rZWQtbGlzdCBmcmVlLWxpc3QsIGFuZCBpdCBtYWtlcyB3ZWlyZCBpc3N1
ZXMgZWFzaWVyIHRvIGRlYnVnLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBoZWFwL0ZyZWVMaXN0LmNwcDoKKyAgICAgICAg
KEpTQzo6RnJlZUxpc3Q6OkZyZWVMaXN0KToKKyAgICAgICAgKEpTQzo6RnJlZUxpc3Q6On5GcmVl
TGlzdCk6CisgICAgICAgIChKU0M6OkZyZWVMaXN0OjpjbGVhcik6CisgICAgICAgIChKU0M6OkZy
ZWVMaXN0Ojppbml0aWFsaXplTGlzdCk6CisgICAgICAgIChKU0M6OkZyZWVMaXN0Ojppbml0aWFs
aXplQnVtcCk6CisgICAgICAgIChKU0M6OkZyZWVMaXN0Ojpjb250YWlucyk6CisgICAgICAgIChK
U0M6OkZyZWVMaXN0OjpkdW1wKToKKyAgICAgICAgKiBoZWFwL0ZyZWVMaXN0Lmg6CisgICAgICAg
IChKU0M6OkZyZWVMaXN0OjphbGxvY2F0aW9uV2lsbEZhaWwpOgorICAgICAgICAoSlNDOjpGcmVl
TGlzdDo6b3JpZ2luYWxTaXplKToKKyAgICAgICAgKEpTQzo6RnJlZUxpc3Q6OmFkZHJlc3NPZkxp
c3QpOgorICAgICAgICAoSlNDOjpGcmVlTGlzdDo6b2Zmc2V0T2ZCbG9jayk6CisgICAgICAgIChK
U0M6OkZyZWVMaXN0OjpvZmZzZXRPZkxpc3QpOgorICAgICAgICAoSlNDOjpGcmVlTGlzdDo6b2Zm
c2V0T2ZJbmRleCk6CisgICAgICAgIChKU0M6OkZyZWVMaXN0OjpvZmZzZXRPZlBheWxvYWRFbmQp
OgorICAgICAgICAoSlNDOjpGcmVlTGlzdDo6b2Zmc2V0T2ZSZW1haW5pbmcpOgorICAgICAgICAo
SlNDOjpGcmVlTGlzdDo6b2Zmc2V0T2ZPcmlnaW5hbFNpemUpOgorICAgICAgICAoSlNDOjpGcmVl
TGlzdDo6RnJlZUxpc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpGcmVlTGlzdDo6bGlzdCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkZyZWVMaXN0OjpidW1wKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6RnJlZUxpc3Q6Om9wZXJhdG9yPT0pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpG
cmVlTGlzdDo6b3BlcmF0b3IhPSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkZyZWVMaXN0Ojpv
cGVyYXRvciBib29sKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL0ZyZWVMaXN0SW5saW5lcy5o
OiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RnJlZUxpc3Q6OmFkZEZyZWVDZWxsKToKKyAgICAgICAg
KEpTQzo6RnJlZUxpc3Q6OmFsbG9jYXRlKToKKyAgICAgICAgKEpTQzo6RnJlZUxpc3Q6OmZvckVh
Y2gpOgorICAgICAgICAoSlNDOjpGcmVlTGlzdDo6dG9PZmZzZXQpOgorICAgICAgICAoSlNDOjpG
cmVlTGlzdDo6ZnJvbU9mZnNldCk6CisgICAgICAgICogaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIu
Y3BwOgorICAgICAgICAoSlNDOjpJbmNyZW1lbnRhbFN3ZWVwZXI6OnN3ZWVwTmV4dEJsb2NrKToK
KyAgICAgICAgKiBoZWFwL01hcmtlZEFsbG9jYXRvci5jcHA6CisgICAgICAgIChKU0M6Ok1hcmtl
ZEFsbG9jYXRvcjo6TWFya2VkQWxsb2NhdG9yKToKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2Nh
dG9yOjpkaWRDb25zdW1lRnJlZUxpc3QpOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6
OnRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3RpbmcpOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxv
Y2F0b3I6OnRyeUFsbG9jYXRlSW4pOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OmFs
bG9jYXRlU2xvd0Nhc2VJbXBsKToKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjpzdG9w
QWxsb2NhdGluZyk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6cHJlcGFyZUZvckFs
bG9jYXRpb24pOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OnJlc3VtZUFsbG9jYXRp
bmcpOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OnN3ZWVwKToKKyAgICAgICAgKEpT
Qzo6TWFya2VkQWxsb2NhdG9yOjpzZXRGcmVlTGlzdCk6IERlbGV0ZWQuCisgICAgICAgICogaGVh
cC9NYXJrZWRBbGxvY2F0b3IuaDoKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjpmcmVl
TGlzdCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6aXNGcmVlTGlzdGVkQ2VsbCk6
IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9NYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmg6CisgICAg
ICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6aXNGcmVlTGlzdGVkQ2VsbCk6CisgICAgICAgIChK
U0M6Ok1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGUpOgorICAgICAgICAoSlNDOjpNYXJrZWRB
bGxvY2F0b3I6OmFsbG9jYXRlKToKKyAgICAgICAgKiBoZWFwL01hcmtlZEJsb2NrLmNwcDoKKyAg
ICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OkhhbmRsZTo6c3RvcEFsbG9jYXRpbmcpOgorICAgICAg
ICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjpsYXN0Q2hhbmNlVG9GaW5hbGl6ZSk6CisgICAg
ICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6OnJlc3VtZUFsbG9jYXRpbmcpOgorICAgICAg
ICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjp6YXApOgorICAgICAgICAoSlNDOjpNYXJrZWRC
bG9jazo6SGFuZGxlOjpzd2VlcCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6
OmlzRnJlZUxpc3RlZENlbGwpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjpm
b3JFYWNoRnJlZUNlbGwpOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvTWFya2VkQmxvY2suaDoK
KyAgICAgICAgKiBoZWFwL01hcmtlZEJsb2NrSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpNYXJr
ZWRCbG9jazo6SGFuZGxlOjpzcGVjaWFsaXplZFN3ZWVwKToKKyAgICAgICAgKEpTQzo6TWFya2Vk
QmxvY2s6OkhhbmRsZTo6ZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2UpOgorICAgICAgICAoSlND
OjpNYXJrZWRCbG9jazo6SGFuZGxlOjppc0ZyZWVMaXN0ZWRDZWxsKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBoZWFwL1N1YnNwYWNlLmNwcDoKKyAgICAgICAgKEpTQzo6U3Vic3BhY2U6OmZpbmlzaFN3
ZWVwKToKKyAgICAgICAgKiBoZWFwL1N1YnNwYWNlLmg6CisgICAgICAgICogaml0L0Fzc2VtYmx5
SGVscGVycy5oOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRBbGxvY2F0ZVdp
dGhOb25OdWxsQWxsb2NhdG9yKToKKyAgICAgICAgKiBydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0U3Vic3BhY2UuY3BwOgorICAgICAgICAoSlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNw
YWNlOjpmaW5pc2hTd2VlcCk6CisgICAgICAgICogcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVj
dFN1YnNwYWNlLmg6CisgICAgICAgICogcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0
U3Vic3BhY2UuY3BwOgorICAgICAgICAoSlNDOjpKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vi
c3BhY2U6OmZpbmlzaFN3ZWVwKToKKyAgICAgICAgKiBydW50aW1lL0pTU2VnbWVudGVkVmFyaWFi
bGVPYmplY3RTdWJzcGFjZS5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmdTdWJzcGFjZS5j
cHA6CisgICAgICAgIChKU0M6OkpTU3RyaW5nU3Vic3BhY2U6OmZpbmlzaFN3ZWVwKToKKyAgICAg
ICAgKiBydW50aW1lL0pTU3RyaW5nU3Vic3BhY2UuaDoKKyAgICAgICAgKiB3YXNtL2pzL0pTV2Vi
QXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5jcHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1i
bHlDb2RlQmxvY2tTdWJzcGFjZTo6ZmluaXNoU3dlZXApOgorICAgICAgICAqIHdhc20vanMvSlNX
ZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmg6CisKIDIwMTctMDYtMDEgIFRvbWFzIFBvcGVs
YSAgPHRwb3BlbGFAcmVkaGF0LmNvbT4sIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgog
CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCkgaW4gSW5mZXJyZWRUeXBlOjpr
aW5kRm9yRmxhZ3MoKSBvbiBCaWctRW5kaWFucwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDIxNzY0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01MDEs
NiArNTAxLDcgQEAKIAkJMEY2NEIyNzkxQTc5NTdCMjAwNkU0RTY2IC8qIENhbGxFZGdlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjRCMjc3MUE3
OTU3QjIwMDZFNEU2NiAvKiBDYWxsRWRnZS5jcHAgKi87IH07CiAJCTBGNjRCMjdBMUE3OTU3QjIw
MDZFNEU2NiAvKiBDYWxsRWRnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY2NEIyNzgxQTc5NTdCMjAwNkU0RTY2IC8qIENhbGxFZGdlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY2NEVBRjMxQzRF
Q0QwNjAwNjIxRTlCIC8qIEFpckFyZ0lubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjRFQUYyMUM0RUNEMDYwMDYyMUU5QiAvKiBBaXJBcmdJ
bmxpbmVzLmggKi87IH07CisJCTBGNjU4NUUxMUVFMDgwNUEwMDk1MTc2RCAvKiBGcmVlTGlzdElu
bGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NjU4NUUwMUVFMDgwNTcwMDk1MTc2RCAvKiBGcmVlTGlzdElubGluZXMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjY2MEUzNzFFMDUxN0I5MDAz
MTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NjBFMzMxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdD
b25zdHJhaW50LmNwcCAqLzsgfTsKIAkJMEY2NjBFMzgxRTA1MTdCQjAwMzE0NjJDIC8qIE1hcmtp
bmdDb25zdHJhaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjY2MEUzNDFFMDUxN0I3MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjY2MEUzOTFF
MDUxN0JGMDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnRTZXQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NjBFMzUxRTA1MTdCNzAwMzE0NjJD
IC8qIE1hcmtpbmdDb25zdHJhaW50U2V0LmNwcCAqLzsgfTsKQEAgLTMwNzcsNiArMzA3OCw3IEBA
CiAJCTBGNjRCMjc3MUE3OTU3QjIwMDZFNEU2NiAvKiBDYWxsRWRnZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWxsRWRnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGNjRCMjc4MUE3OTU3QjIwMDZFNEU2NiAvKiBDYWxsRWRnZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWxsRWRnZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjY0RUFGMjFDNEVDRDA2MDA2MjFFOUIgLyogQWlyQXJnSW5saW5lcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJBcmdJbmxpbmVzLmg7IHBhdGgg
PSBiMy9haXIvQWlyQXJnSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjY1ODVFMDFFRTA4MDU3MDA5NTE3NkQgLyogRnJlZUxpc3RJbmxpbmVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZyZWVMaXN0SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjY2MEUzMzFFMDUxN0I3MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFp
bnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFya2luZ0NvbnN0
cmFpbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY2MEUzNDFFMDUxN0I3
MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTWFya2luZ0NvbnN0cmFpbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY2NjBFMzUxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50U2V0LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hcmtpbmdDb25zdHJhaW50U2V0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTYwMTksNiArNjAyMSw3IEBACiAJ
CQkJMkE4MzYzODQxOEQ3RDBFRTAwMDBFQkNDIC8qIEVkZW5HQ0FjdGl2aXR5Q2FsbGJhY2suaCAq
LywKIAkJCQkwRjU1MTNBNzFENUE2OENCMDBDMzJCRDggLyogRnJlZUxpc3QuY3BwICovLAogCQkJ
CTBGNTUxM0E1MUQ1QTY4MkEwMEMzMkJEOCAvKiBGcmVlTGlzdC5oICovLAorCQkJCTBGNjU4NUUw
MUVFMDgwNTcwMDk1MTc2RCAvKiBGcmVlTGlzdElubGluZXMuaCAqLywKIAkJCQkyQTgzNjM4NzE4
RDdEMEZFMDAwMEVCQ0MgLyogRnVsbEdDQWN0aXZpdHlDYWxsYmFjay5jcHAgKi8sCiAJCQkJMkE4
MzYzODgxOEQ3RDBGRTAwMDBFQkNDIC8qIEZ1bGxHQ0FjdGl2aXR5Q2FsbGJhY2suaCAqLywKIAkJ
CQkyQUFDRTYzQTE4Q0E1QTAzMDBFRDAxOTEgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCAqLywK
QEAgLTg2NjEsNiArODY2NCw3IEBACiAJCQkJMEYyMzVCRUUxNzE3OEU3MzAwNjkwQzdGIC8qIERG
R09TUkV4aXRQcmVwYXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQzYzQjcxRTYzNDNF
RDAwQzEzODM5IC8qIEIzQXRvbWljVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjIzNzk4
MUFFNDVDQTcwMEQ0MDJFQSAvKiBERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2UuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGNjU4NUUxMUVFMDgwNUEwMDk1MTc2RCAvKiBGcmVlTGlzdElubGluZXMuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGRkZDOTVDMTRFRjkwQUYwMEM3MjUzMiAvKiBERkdQaGFzZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMzdDNzM4RDIxRURCNTZFNDAwM0YyQjBCIC8qIFBhcnNlSW50
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCOUNFQjE5RDBCQTdEMDBCMUQxQjUgLyogREZHUGhp
Q2hpbGRyZW4uaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvRnJlZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0ZyZWVMaXN0LmNwcAkocmV2aXNpb24gMjE3NjQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvRnJlZUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwyOSArMjYsNzQgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGcmVlTGlzdC5oIgogCisjaW5jbHVkZSAiRnJl
ZUxpc3RJbmxpbmVzLmgiCisjaW5jbHVkZSAiTWFya2VkQmxvY2suaCIKKyNpbmNsdWRlIDx3dGYv
Q29tbWFQcmludGVyLmg+CisKIG5hbWVzcGFjZSBKU0MgewogCi1ib29sIEZyZWVMaXN0Ojpjb250
YWlucyhjb25zdCB2b2lkKiB0YXJnZXQpIGNvbnN0CitGcmVlTGlzdDo6RnJlZUxpc3QodW5zaWdu
ZWQgY2VsbFNpemUpCisgICAgOiBtX2NlbGxTaXplKGNlbGxTaXplKQogewotICAgIGlmIChyZW1h
aW5pbmcpIHsKLSAgICAgICAgY29uc3Qgdm9pZCogc3RhcnQgPSAocGF5bG9hZEVuZCAtIHJlbWFp
bmluZyk7Ci0gICAgICAgIGNvbnN0IHZvaWQqIGVuZCA9IHBheWxvYWRFbmQ7CisgICAgc3RhdGlj
X2Fzc2VydChNYXJrZWRCbG9jazo6YmxvY2tTaXplIDw9ICgxdSA8PCAoc2l6ZW9mKEZyZWVPZmZz
ZXQpICogOCkpLCAiRnJlZUxpc3QgYXNzdW1lcyB0aGF0IEZyZWVPZmZzZXQgaXMgYmlnIGVub3Vn
aCB0byBleHByZXNzIGFsbCBwb3NzaWJsZSBibG9jayBvZmZzZXRzIik7CisgICAgCisgICAgbV9s
aXN0U2l6ZSA9IE1hcmtlZEJsb2NrOjpibG9ja1NpemUgLyBjZWxsU2l6ZTsKKyAgICBtX2xpc3Qg
PSBzdGQ6Om1ha2VfdW5pcXVlPEZyZWVPZmZzZXRbXT4obV9saXN0U2l6ZSk7Cit9CisKK0ZyZWVM
aXN0Ojp+RnJlZUxpc3QoKQoreworfQorCit2b2lkIEZyZWVMaXN0OjpjbGVhcigpCit7CisgICAg
bV9ibG9jayA9IG51bGxwdHI7CisgICAgbV9pbmRleCA9IDA7CisgICAgbV9wYXlsb2FkRW5kID0g
bnVsbHB0cjsKKyAgICBtX3JlbWFpbmluZyA9IDA7CisgICAgbV9vcmlnaW5hbFNpemUgPSAwOwor
fQorCit2b2lkIEZyZWVMaXN0Ojppbml0aWFsaXplTGlzdChNYXJrZWRCbG9jayogYmxvY2spCit7
CisgICAgbV9ibG9jayA9IGJsb2NrOworICAgIG1faW5kZXggPSAwOworICAgIG1fcGF5bG9hZEVu
ZCA9IG51bGxwdHI7CisgICAgbV9yZW1haW5pbmcgPSAwOworICAgIG1fb3JpZ2luYWxTaXplID0g
MDsKK30KKwordm9pZCBGcmVlTGlzdDo6aW5pdGlhbGl6ZUJ1bXAoY2hhciogcGF5bG9hZEVuZCwg
dW5zaWduZWQgcmVtYWluaW5nKQoreworICAgIG1fYmxvY2sgPSBudWxscHRyOworICAgIG1faW5k
ZXggPSAwOworICAgIG1fcGF5bG9hZEVuZCA9IHBheWxvYWRFbmQ7CisgICAgbV9yZW1haW5pbmcg
PSByZW1haW5pbmc7CisgICAgbV9vcmlnaW5hbFNpemUgPSByZW1haW5pbmc7Cit9CisKK2Jvb2wg
RnJlZUxpc3Q6OmNvbnRhaW5zKEhlYXBDZWxsKiB0YXJnZXQpIGNvbnN0Cit7CisgICAgaWYgKG1f
cmVtYWluaW5nKSB7CisgICAgICAgIGNvbnN0IHZvaWQqIHN0YXJ0ID0gKG1fcGF5bG9hZEVuZCAt
IG1fcmVtYWluaW5nKTsKKyAgICAgICAgY29uc3Qgdm9pZCogZW5kID0gbV9wYXlsb2FkRW5kOwog
ICAgICAgICByZXR1cm4gKHN0YXJ0IDw9IHRhcmdldCkgJiYgKHRhcmdldCA8IGVuZCk7CiAgICAg
fQogCi0gICAgRnJlZUNlbGwqIGNhbmRpZGF0ZSA9IGhlYWQ7Ci0gICAgd2hpbGUgKGNhbmRpZGF0
ZSkgewotICAgICAgICBpZiAoY2FuZGlkYXRlID09IHRhcmdldCkKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSBtX2luZGV4OyBpLS07KSB7CisgICAgICAgIGlmIChmcm9tT2Zmc2V0KG1fbGlzdFtpXSkg
PT0gdGFyZ2V0KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGNhbmRpZGF0ZSA9
IGNhbmRpZGF0ZS0+bmV4dDsKICAgICB9Ci0KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHZvaWQg
RnJlZUxpc3Q6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKLSAgICBvdXQucHJpbnQo
IntoZWFkID0gIiwgUmF3UG9pbnRlcihoZWFkKSwgIiwgcGF5bG9hZEVuZCA9ICIsIFJhd1BvaW50
ZXIocGF5bG9hZEVuZCksICIsIHJlbWFpbmluZyA9ICIsIHJlbWFpbmluZywgIiwgb3JpZ2luYWxT
aXplID0gIiwgb3JpZ2luYWxTaXplLCAifSIpOworICAgIG91dC5wcmludCgie2Jsb2NrID0gIiwg
UmF3UG9pbnRlcihtX2Jsb2NrKSwgIiwgbGlzdCA9IFsiKTsKKyAgICBDb21tYVByaW50ZXIgY29t
bWE7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1faW5kZXg7ICsraSkKKyAgICAgICAg
b3V0LnByaW50KGNvbW1hLCBtX2xpc3RbaV0pOworICAgIG91dC5wcmludCgiXSwgaW5kZXggPSAi
LCBtX2luZGV4LCAiLCBwYXlsb2FkRW5kID0gIiwgUmF3UG9pbnRlcihtX3BheWxvYWRFbmQpLCAi
LCByZW1haW5pbmcgPSAiLCBtX3JlbWFpbmluZywgIiwgb3JpZ2luYWxTaXplID0gIiwgbV9vcmln
aW5hbFNpemUsICJ9Iik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvRnJlZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9GcmVlTGlzdC5oCShyZXZpc2lvbiAyMTc2NDYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9GcmVlTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2OCArMjUs
NjcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNp
bmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+
CiAKIG5hbWVzcGFjZSBKU0MgewogCi1zdHJ1Y3QgRnJlZUNlbGwgewotICAgIEZyZWVDZWxsKiBu
ZXh0OwotfTsKLSAgICAgICAgCi0vLyBUaGlzIHJlcHJlc2VudGF0aW9uIG9mIGEgRnJlZUxpc3Qg
aXMgY29udmVuaWVudCBmb3IgdGhlIE1hcmtlZEFsbG9jYXRvci4KLQotc3RydWN0IEZyZWVMaXN0
IHsKLSAgICBGcmVlQ2VsbCogaGVhZCB7IG51bGxwdHIgfTsKLSAgICBjaGFyKiBwYXlsb2FkRW5k
IHsgbnVsbHB0ciB9OwotICAgIHVuc2lnbmVkIHJlbWFpbmluZyB7IDAgfTsKLSAgICB1bnNpZ25l
ZCBvcmlnaW5hbFNpemUgeyAwIH07Ci0gICAgCi0gICAgRnJlZUxpc3QoKQotICAgIHsKLSAgICB9
Ci0gICAgCi0gICAgc3RhdGljIEZyZWVMaXN0IGxpc3QoRnJlZUNlbGwqIGhlYWQsIHVuc2lnbmVk
IGJ5dGVzKQotICAgIHsKLSAgICAgICAgRnJlZUxpc3QgcmVzdWx0OwotICAgICAgICByZXN1bHQu
aGVhZCA9IGhlYWQ7Ci0gICAgICAgIHJlc3VsdC5yZW1haW5pbmcgPSAwOwotICAgICAgICByZXN1
bHQub3JpZ2luYWxTaXplID0gYnl0ZXM7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQot
ICAgIAotICAgIHN0YXRpYyBGcmVlTGlzdCBidW1wKGNoYXIqIHBheWxvYWRFbmQsIHVuc2lnbmVk
IHJlbWFpbmluZykKLSAgICB7Ci0gICAgICAgIEZyZWVMaXN0IHJlc3VsdDsKLSAgICAgICAgcmVz
dWx0LnBheWxvYWRFbmQgPSBwYXlsb2FkRW5kOwotICAgICAgICByZXN1bHQucmVtYWluaW5nID0g
cmVtYWluaW5nOwotICAgICAgICByZXN1bHQub3JpZ2luYWxTaXplID0gcmVtYWluaW5nOwotICAg
ICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAKLSAgICBib29sIG9wZXJhdG9yPT0oY29u
c3QgRnJlZUxpc3QmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGhlYWQgPT0g
b3RoZXIuaGVhZAotICAgICAgICAgICAgJiYgcGF5bG9hZEVuZCA9PSBvdGhlci5wYXlsb2FkRW5k
Ci0gICAgICAgICAgICAmJiByZW1haW5pbmcgPT0gb3RoZXIucmVtYWluaW5nCi0gICAgICAgICAg
ICAmJiBvcmlnaW5hbFNpemUgPT0gb3RoZXIub3JpZ2luYWxTaXplOwotICAgIH0KLSAgICAKLSAg
ICBib29sIG9wZXJhdG9yIT0oY29uc3QgRnJlZUxpc3QmIG90aGVyKSBjb25zdAotICAgIHsKLSAg
ICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwotICAgIH0KLSAgICAKLSAgICBleHBsaWNp
dCBvcGVyYXRvciBib29sKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiAqdGhpcyAhPSBG
cmVlTGlzdCgpOwotICAgIH0KK2NsYXNzIEhlYXBDZWxsOworY2xhc3MgTWFya2VkQmxvY2s7CiAK
LSAgICBib29sIGNvbnRhaW5zKGNvbnN0IHZvaWQqIHRhcmdldCkgY29uc3Q7Ci0KLSAgICBib29s
IGFsbG9jYXRpb25XaWxsRmFpbCgpIGNvbnN0IHsgcmV0dXJuICFoZWFkICYmICFyZW1haW5pbmc7
IH0KK2NsYXNzIEZyZWVMaXN0IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShGcmVlTGlzdCk7
CisgICAgCitwdWJsaWM6CisgICAgdHlwZWRlZiB1aW50MTZfdCBGcmVlT2Zmc2V0OworICAgIAor
ICAgIEZyZWVMaXN0KHVuc2lnbmVkIGNlbGxTaXplKTsKKyAgICB+RnJlZUxpc3QoKTsKKyAgICAK
KyAgICB2b2lkIGNsZWFyKCk7CisgICAgCisgICAgdm9pZCBpbml0aWFsaXplTGlzdChNYXJrZWRC
bG9jayopOworICAgIHZvaWQgYWRkRnJlZUNlbGwoSGVhcENlbGwqKTsKKyAgICAKKyAgICB2b2lk
IGluaXRpYWxpemVCdW1wKGNoYXIqIHBheWxvYWRFbmQsIHVuc2lnbmVkIHJlbWFpbmluZyk7Cisg
ICAgCisgICAgYm9vbCBhbGxvY2F0aW9uV2lsbEZhaWwoKSBjb25zdCB7IHJldHVybiAhbV9pbmRl
eCAmJiAhbV9yZW1haW5pbmc7IH0KICAgICBib29sIGFsbG9jYXRpb25XaWxsU3VjY2VlZCgpIGNv
bnN0IHsgcmV0dXJuICFhbGxvY2F0aW9uV2lsbEZhaWwoKTsgfQogICAgIAorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmM+CisgICAgSGVhcENlbGwqIGFsbG9jYXRlKGNvbnN0IEZ1bmMmIHNsb3dQ
YXRoKTsKKyAgICAKKyAgICBib29sIGNvbnRhaW5zKEhlYXBDZWxsKikgY29uc3Q7CisgICAgCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICB2b2lkIGZvckVhY2goY29uc3QgRnVuYyYp
IGNvbnN0OworICAgIAorICAgIHVuc2lnbmVkIG9yaWdpbmFsU2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fb3JpZ2luYWxTaXplOyB9CisgICAgCisgICAgRnJlZU9mZnNldCogYWRkcmVzc09mTGlzdCgp
IGNvbnN0IHsgcmV0dXJuIG1fbGlzdC5nZXQoKTsgfQorCisgICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZkJsb2NrKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZyZWVMaXN0LCBtX2Jsb2Nr
KTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZMaXN0KCkgeyByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKEZyZWVMaXN0LCBtX2xpc3QpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZz
ZXRPZkluZGV4KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZyZWVMaXN0LCBtX2luZGV4KTsg
fQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZQYXlsb2FkRW5kKCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKEZyZWVMaXN0LCBtX3BheWxvYWRFbmQpOyB9CisgICAgc3RhdGljIHB0cmRp
ZmZfdCBvZmZzZXRPZlJlbWFpbmluZygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihGcmVlTGlz
dCwgbV9yZW1haW5pbmcpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk9yaWdpbmFs
U2l6ZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihGcmVlTGlzdCwgbV9vcmlnaW5hbFNpemUp
OyB9CisgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCitwcml2
YXRlOgorICAgIEZyZWVPZmZzZXQgdG9PZmZzZXQoSGVhcENlbGwqKSBjb25zdDsKKyAgICBIZWFw
Q2VsbCogZnJvbU9mZnNldChGcmVlT2Zmc2V0KSBjb25zdDsKKyAgICAKKyAgICB1bnNpZ25lZCBt
X2NlbGxTaXplIHsgVUlOVF9NQVggfTsKKyAgICBNYXJrZWRCbG9jayogbV9ibG9jayB7IG51bGxw
dHIgfTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RnJlZU9mZnNldFtdPiBtX2xpc3Q7CisgICAgdW5z
aWduZWQgbV9saXN0U2l6ZSB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX2luZGV4IHsgMCB9OworICAg
IGNoYXIqIG1fcGF5bG9hZEVuZCB7IG51bGxwdHIgfTsKKyAgICB1bnNpZ25lZCBtX3JlbWFpbmlu
ZyB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX29yaWdpbmFsU2l6ZSB7IDAgfTsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRnJlZUxpc3RJ
bmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRnJlZUxp
c3RJbmxpbmVzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
RnJlZUxpc3RJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgIkZyZWVMaXN0LmgiCisjaW5jbHVkZSAiTWFya2VkQmxvY2suaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKK2lubGluZSB2b2lkIEZyZWVMaXN0OjphZGRGcmVlQ2VsbChIZWFwQ2VsbCog
Y2VsbCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX2luZGV4IDwgbV9saXN0U2l6ZSk7CisgICAg
bV9saXN0W21faW5kZXgrK10gPSB0b09mZnNldChjZWxsKTsKKyAgICBtX29yaWdpbmFsU2l6ZSAr
PSBtX2NlbGxTaXplOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorSGVhcENlbGwqIEZy
ZWVMaXN0OjphbGxvY2F0ZShjb25zdCBGdW5jJiBzbG93UGF0aCkKK3sKKyAgICB1bnNpZ25lZCBy
ZW1haW5pbmcgPSBtX3JlbWFpbmluZzsKKyAgICBpZiAocmVtYWluaW5nKSB7CisgICAgICAgIHVu
c2lnbmVkIGNlbGxTaXplID0gbV9jZWxsU2l6ZTsKKyAgICAgICAgcmVtYWluaW5nIC09IGNlbGxT
aXplOworICAgICAgICBtX3JlbWFpbmluZyA9IHJlbWFpbmluZzsKKyAgICAgICAgcmV0dXJuIGJp
dHdpc2VfY2FzdDxIZWFwQ2VsbCo+KG1fcGF5bG9hZEVuZCAtIHJlbWFpbmluZyAtIGNlbGxTaXpl
KTsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgaW5kZXggPSBtX2luZGV4OworICAgIGlmIChV
TkxJS0VMWSghaW5kZXgpKQorICAgICAgICByZXR1cm4gc2xvd1BhdGgoKTsKKyAgICAKKyAgICAt
LWluZGV4OworICAgIG1faW5kZXggPSBpbmRleDsKKyAgICByZXR1cm4gZnJvbU9mZnNldChtX2xp
c3RbaW5kZXhdKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KK3ZvaWQgRnJlZUxpc3Q6
OmZvckVhY2goY29uc3QgRnVuYyYgZnVuYykgY29uc3QKK3sKKyAgICBpZiAobV9yZW1haW5pbmcp
IHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCByZW1haW5pbmcgPSBtX3JlbWFpbmluZzsgcmVtYWlu
aW5nOyByZW1haW5pbmcgLT0gbV9jZWxsU2l6ZSkKKyAgICAgICAgICAgIGZ1bmMoYml0d2lzZV9j
YXN0PEhlYXBDZWxsKj4obV9wYXlsb2FkRW5kIC0gcmVtYWluaW5nKSk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleDsgaS0tOykKKyAgICAgICAgICAgIGZ1
bmMoZnJvbU9mZnNldChtX2xpc3RbaV0pKTsKKyAgICB9Cit9CisKK2lubGluZSBGcmVlTGlzdDo6
RnJlZU9mZnNldCBGcmVlTGlzdDo6dG9PZmZzZXQoSGVhcENlbGwqIGNlbGwpIGNvbnN0Cit7Cisg
ICAgdWludHB0cl90IHJlc3VsdCA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGNlbGwpIC0gYml0
d2lzZV9jYXN0PHVpbnRwdHJfdD4obV9ibG9jayk7CisgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0
IDwgTWFya2VkQmxvY2s6OmJsb2NrU2l6ZSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEZyZWVP
ZmZzZXQ+KHJlc3VsdCk7Cit9CisKK2lubGluZSBIZWFwQ2VsbCogRnJlZUxpc3Q6OmZyb21PZmZz
ZXQoRnJlZU9mZnNldCBvZmZzZXQpIGNvbnN0Cit7CisgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxI
ZWFwQ2VsbCo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4ob2Zmc2V0KSArIGJpdHdpc2VfY2FzdDx1
aW50cHRyX3Q+KG1fYmxvY2spKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmNwcAko
cmV2aXNpb24gMjE3NjQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSW5jcmVtZW50
YWxTd2VlcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsNyArODcsNyBAQCBib29sIEluY3Jl
bWVudGFsU3dlZXBlcjo6c3dlZXBOZXh0QmxvY2soCiAgICAgCiAgICAgaWYgKGJsb2NrKSB7CiAg
ICAgICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJHQyhtX3ZtLT5oZWFwKTsKLSAgICAgICAgYmxv
Y2stPnN3ZWVwKCk7CisgICAgICAgIGJsb2NrLT5zd2VlcChudWxscHRyKTsKICAgICAgICAgbV92
bS0+aGVhcC5vYmplY3RTcGFjZSgpLmZyZWVPclNocmlua0Jsb2NrKGJsb2NrKTsKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2VkQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrZWRBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAyMTc2NDYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3
ICs0MCw4IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogTWFya2VkQWxsb2NhdG9yOjpNYXJrZWRBbGxv
Y2F0b3IoSGVhcCogaGVhcCwgU3Vic3BhY2UqIHN1YnNwYWNlLCBzaXplX3QgY2VsbFNpemUpCi0g
ICAgOiBtX2N1cnJlbnRCbG9jaygwKQorICAgIDogbV9mcmVlTGlzdChjZWxsU2l6ZSkKKyAgICAs
IG1fY3VycmVudEJsb2NrKDApCiAgICAgLCBtX2xhc3RBY3RpdmVCbG9jaygwKQogICAgICwgbV9j
ZWxsU2l6ZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY2VsbFNpemUpKQogICAgICwgbV9hdHRyaWJ1
dGVzKHN1YnNwYWNlLT5hdHRyaWJ1dGVzKCkpCkBAIC04OCw3ICs4OSw3IEBAIHZvaWQgTWFya2Vk
QWxsb2NhdG9yOjpkaWRDb25zdW1lRnJlZUxpc3QKICAgICBpZiAobV9jdXJyZW50QmxvY2spCiAg
ICAgICAgIG1fY3VycmVudEJsb2NrLT5kaWRDb25zdW1lRnJlZUxpc3QoKTsKICAgICAKLSAgICBz
ZXRGcmVlTGlzdChGcmVlTGlzdCgpKTsKKyAgICBtX2ZyZWVMaXN0LmNsZWFyKCk7CiAgICAgbV9j
dXJyZW50QmxvY2sgPSBudWxscHRyOwogfQogCkBAIC05Nyw3ICs5OCw3IEBAIHZvaWQqIE1hcmtl
ZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVXaXRob3UKICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBl
clNhbXBsZXJTY29wZShmYWxzZSk7CiAgICAgCiAgICAgQVNTRVJUKCFtX2N1cnJlbnRCbG9jayk7
Ci0gICAgQVNTRVJUKCFtX2ZyZWVMaXN0KTsKKyAgICBBU1NFUlQobV9mcmVlTGlzdC5hbGxvY2F0
aW9uV2lsbEZhaWwoKSk7CiAgICAgCiAgICAgZm9yICg7OykgewogICAgICAgICBtX2FsbG9jYXRp
b25DdXJzb3IgPSAobV9jYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5IHwgbV9lbXB0eSkuZmluZEJpdCht
X2FsbG9jYXRpb25DdXJzb3IsIHRydWUpOwpAQCAtMTEzLDcgKzExNCw3IEBAIHZvaWQqIE1hcmtl
ZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVXaXRob3UKICAgICBpZiAoT3B0aW9uczo6c3RlYWxFbXB0
eUJsb2Nrc0Zyb21PdGhlckFsbG9jYXRvcnMoKQogICAgICAgICAmJiBzaG91bGRTdGVhbEVtcHR5
QmxvY2tzRnJvbU90aGVyQWxsb2NhdG9ycygpKSB7CiAgICAgICAgIGlmIChNYXJrZWRCbG9jazo6
SGFuZGxlKiBibG9jayA9IG1hcmtlZFNwYWNlKCkuZmluZEVtcHR5QmxvY2tUb1N0ZWFsKCkpIHsK
LSAgICAgICAgICAgIGJsb2NrLT5zd2VlcCgpOworICAgICAgICAgICAgYmxvY2stPnN3ZWVwKG51
bGxwdHIpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBJdCdzIGdvb2QgdGhhdCB0aGlz
IGNsZWFycyBjYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5IGFzIHdlbGwgYXMgYWxsIG90aGVyIGJpdHMs
CiAgICAgICAgICAgICAvLyBiZWNhdXNlIHRoZXJlIGlzIGEgcmVtb3RlIGNoYW5jZSB0aGF0IGEg
YmxvY2sgbWF5IGhhdmUgYm90aCBjYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5CkBAIC0xMzksMTEgKzE0
MCwxMSBAQCB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlSW4oTWFyCiAgICAgQVNT
RVJUKGJsb2NrKTsKICAgICBBU1NFUlQoIWJsb2NrLT5pc0ZyZWVMaXN0ZWQoKSk7CiAgICAgCi0g
ICAgRnJlZUxpc3QgZnJlZUxpc3QgPSBibG9jay0+c3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZTo6
U3dlZXBUb0ZyZWVMaXN0KTsKKyAgICBibG9jay0+c3dlZXAoJm1fZnJlZUxpc3QpOwogICAgIAog
ICAgIC8vIEl0J3MgcG9zc2libGUgdG8gc3R1bWJsZSBvbiBhIGNvbXBsZXRlbHkgZnVsbCBibG9j
ay4gTWFya2luZyB0cmllcyB0byByZXRpcmUgdGhlc2UsIGJ1dAogICAgIC8vIHRoYXQgYWxnb3Jp
dGhtIGlzIHJhY3kgYW5kIG1heSBmb3JnZXQgdG8gZG8gaXQgc29tZXRpbWVzLgotICAgIGlmIChm
cmVlTGlzdC5hbGxvY2F0aW9uV2lsbEZhaWwoKSkgeworICAgIGlmIChtX2ZyZWVMaXN0LmFsbG9j
YXRpb25XaWxsRmFpbCgpKSB7CiAgICAgICAgIEFTU0VSVChibG9jay0+aXNGcmVlTGlzdGVkKCkp
OwogICAgICAgICBibG9jay0+dW5zd2VlcFdpdGhOb05ld2x5QWxsb2NhdGVkKCk7CiAgICAgICAg
IEFTU0VSVCghYmxvY2stPmlzRnJlZUxpc3RlZCgpKTsKQEAgLTE1MywxOSArMTU0LDkgQEAgdm9p
ZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZUluKE1hcgogICAgIH0KICAgICAKICAgICBt
X2N1cnJlbnRCbG9jayA9IGJsb2NrOwotICAgIHNldEZyZWVMaXN0KGZyZWVMaXN0KTsKICAgICAK
LSAgICB2b2lkKiByZXN1bHQ7Ci0gICAgaWYgKG1fZnJlZUxpc3QucmVtYWluaW5nKSB7Ci0gICAg
ICAgIHVuc2lnbmVkIGNlbGxTaXplID0gbV9jZWxsU2l6ZTsKLSAgICAgICAgbV9mcmVlTGlzdC5y
ZW1haW5pbmcgLT0gY2VsbFNpemU7Ci0gICAgICAgIHJlc3VsdCA9IG1fZnJlZUxpc3QucGF5bG9h
ZEVuZCAtIG1fZnJlZUxpc3QucmVtYWluaW5nIC0gY2VsbFNpemU7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgRnJlZUNlbGwqIGhlYWQgPSBtX2ZyZWVMaXN0LmhlYWQ7Ci0gICAgICAgIG1fZnJlZUxp
c3QuaGVhZCA9IGhlYWQtPm5leHQ7Ci0gICAgICAgIHJlc3VsdCA9IGhlYWQ7Ci0gICAgfQotICAg
IFJFTEVBU0VfQVNTRVJUKHJlc3VsdCk7CisgICAgdm9pZCogcmVzdWx0ID0gbV9mcmVlTGlzdC5h
bGxvY2F0ZSgKKyAgICAgICAgW10gKCkgLT4gSGVhcENlbGwqIHsgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsgcmV0dXJuIG51bGxwdHI7IH0pOwogICAgIHNldElzRWRlbihOb0xvY2tpbmdO
ZWNlc3NhcnksIG1fY3VycmVudEJsb2NrLCB0cnVlKTsKICAgICBtYXJrZWRTcGFjZSgpLmRpZEFs
bG9jYXRlSW5CbG9jayhtX2N1cnJlbnRCbG9jayk7CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTIw
OCw3ICsxOTksNyBAQCB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlU2xvd0Nhc2VJCiAg
ICAgZG9UZXN0Q29sbGVjdGlvbnNJZk5lZWRlZChkZWZlcnJhbENvbnRleHQpOwogCiAgICAgQVNT
RVJUKCFtYXJrZWRTcGFjZSgpLmlzSXRlcmF0aW5nKCkpOwotICAgIG1faGVhcC0+ZGlkQWxsb2Nh
dGUobV9mcmVlTGlzdC5vcmlnaW5hbFNpemUpOworICAgIG1faGVhcC0+ZGlkQWxsb2NhdGUobV9m
cmVlTGlzdC5vcmlnaW5hbFNpemUoKSk7CiAgICAgCiAgICAgZGlkQ29uc3VtZUZyZWVMaXN0KCk7
CiAgICAgCkBAIC0zMzQsMjEgKzMyNSwyMSBAQCB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6c3RvcEFs
bG9jYXRpbmcoKQogICAgICAgICBkYXRhTG9nKFJhd1BvaW50ZXIodGhpcyksICI6IE1hcmtlZEFs
bG9jYXRvcjo6c3RvcEFsbG9jYXRpbmchXG4iKTsKICAgICBBU1NFUlQoIW1fbGFzdEFjdGl2ZUJs
b2NrKTsKICAgICBpZiAoIW1fY3VycmVudEJsb2NrKSB7Ci0gICAgICAgIEFTU0VSVCghbV9mcmVl
TGlzdCk7CisgICAgICAgIEFTU0VSVChtX2ZyZWVMaXN0LmFsbG9jYXRpb25XaWxsRmFpbCgpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKICAgICBtX2N1cnJlbnRCbG9jay0+c3RvcEFs
bG9jYXRpbmcobV9mcmVlTGlzdCk7CiAgICAgbV9sYXN0QWN0aXZlQmxvY2sgPSBtX2N1cnJlbnRC
bG9jazsKICAgICBtX2N1cnJlbnRCbG9jayA9IDA7Ci0gICAgbV9mcmVlTGlzdCA9IEZyZWVMaXN0
KCk7CisgICAgbV9mcmVlTGlzdC5jbGVhcigpOwogfQogCiB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6
cHJlcGFyZUZvckFsbG9jYXRpb24oKQogewogICAgIG1fbGFzdEFjdGl2ZUJsb2NrID0gbnVsbHB0
cjsKICAgICBtX2N1cnJlbnRCbG9jayA9IG51bGxwdHI7Ci0gICAgc2V0RnJlZUxpc3QoRnJlZUxp
c3QoKSk7CisgICAgbV9mcmVlTGlzdC5jbGVhcigpOwogCiAgICAgbV9hbGxvY2F0aW9uQ3Vyc29y
ID0gMDsKICAgICBtX2VtcHR5Q3Vyc29yID0gMDsKQEAgLTM3MSwxNyArMzYyLDEyIEBAIHZvaWQg
TWFya2VkQWxsb2NhdG9yOjpsYXN0Q2hhbmNlVG9GaW5hbGkKICAgICAgICAgfSk7CiB9CiAKLXZv
aWQgTWFya2VkQWxsb2NhdG9yOjpzZXRGcmVlTGlzdChjb25zdCBGcmVlTGlzdCYgZnJlZUxpc3Qp
Ci17Ci0gICAgbV9mcmVlTGlzdCA9IGZyZWVMaXN0OwotfQotCiB2b2lkIE1hcmtlZEFsbG9jYXRv
cjo6cmVzdW1lQWxsb2NhdGluZygpCiB7CiAgICAgaWYgKCFtX2xhc3RBY3RpdmVCbG9jaykKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgbV9mcmVlTGlzdCA9IG1fbGFzdEFjdGl2ZUJsb2NrLT5yZXN1
bWVBbGxvY2F0aW5nKCk7CisgICAgbV9sYXN0QWN0aXZlQmxvY2stPnJlc3VtZUFsbG9jYXRpbmco
bV9mcmVlTGlzdCk7CiAgICAgbV9jdXJyZW50QmxvY2sgPSBtX2xhc3RBY3RpdmVCbG9jazsKICAg
ICBtX2xhc3RBY3RpdmVCbG9jayA9IG51bGxwdHI7CiB9CkBAIC00NDUsNyArNDMxLDcgQEAgdm9p
ZCBNYXJrZWRBbGxvY2F0b3I6OnN3ZWVwKCkKICAgICBtX3Vuc3dlcHQuZm9yRWFjaFNldEJpdCgK
ICAgICAgICAgWyZdIChzaXplX3QgaW5kZXgpIHsKICAgICAgICAgICAgIE1hcmtlZEJsb2NrOjpI
YW5kbGUqIGJsb2NrID0gbV9ibG9ja3NbaW5kZXhdOwotICAgICAgICAgICAgYmxvY2stPnN3ZWVw
KCk7CisgICAgICAgICAgICBibG9jay0+c3dlZXAobnVsbHB0cik7CiAgICAgICAgIH0pOwogfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaAko
cmV2aXNpb24gMjE3NjQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxs
b2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1Niw3ICsxNTYsNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCogdHJ5QWxsb2NhdGUoR0NEZWZlcnJhbENvbnRleHQqID0gbnVsbHB0cik7CiAgICAgSGVh
cCogaGVhcCgpIHsgcmV0dXJuIG1faGVhcDsgfQogCi0gICAgYm9vbCBpc0ZyZWVMaXN0ZWRDZWxs
KGNvbnN0IHZvaWQqIHRhcmdldCkgY29uc3QgeyByZXR1cm4gbV9mcmVlTGlzdC5jb250YWlucyh0
YXJnZXQpOyB9CisgICAgYm9vbCBpc0ZyZWVMaXN0ZWRDZWxsKGNvbnN0IHZvaWQqIHRhcmdldCkg
Y29uc3Q7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hCbG9j
ayhjb25zdCBGdW5jdG9yJik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBm
b3JFYWNoTm90RW1wdHlCbG9jayhjb25zdCBGdW5jdG9yJik7CkBAIC0yMDksNiArMjA5LDggQEAg
cHVibGljOgogICAgIFN1YnNwYWNlKiBzdWJzcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Vic3Bh
Y2U7IH0KICAgICBNYXJrZWRTcGFjZSYgbWFya2VkU3BhY2UoKSBjb25zdDsKICAgICAKKyAgICBj
b25zdCBGcmVlTGlzdCYgZnJlZUxpc3QoKSBjb25zdCB7IHJldHVybiBtX2ZyZWVMaXN0OyB9Cisg
ICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgdm9pZCBkdW1wQml0
cyhQcmludFN0cmVhbSYgPSBXVEY6OmRhdGFGaWxlKCkpOwogICAgIApAQCAtMjI3LDggKzIyOSw2
IEBAIHByaXZhdGU6CiAgICAgdm9pZCogYWxsb2NhdGVJbihNYXJrZWRCbG9jazo6SGFuZGxlKik7
CiAgICAgQUxXQVlTX0lOTElORSB2b2lkIGRvVGVzdENvbGxlY3Rpb25zSWZOZWVkZWQoR0NEZWZl
cnJhbENvbnRleHQqKTsKICAgICAKLSAgICB2b2lkIHNldEZyZWVMaXN0KGNvbnN0IEZyZWVMaXN0
Jik7Ci0gICAgCiAgICAgRnJlZUxpc3QgbV9mcmVlTGlzdDsKICAgICAKICAgICBWZWN0b3I8TWFy
a2VkQmxvY2s6OkhhbmRsZSo+IG1fYmxvY2tzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvcklubGluZXMuaAkocmV2aXNpb24gMjE3NjQ2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9ySW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNSw0NCArMjUsMzAgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNp
bmNsdWRlICJGcmVlTGlzdElubGluZXMuaCIKICNpbmNsdWRlICJNYXJrZWRBbGxvY2F0b3IuaCIK
IAogbmFtZXNwYWNlIEpTQyB7CiAKK2lubGluZSBib29sIE1hcmtlZEFsbG9jYXRvcjo6aXNGcmVl
TGlzdGVkQ2VsbChjb25zdCB2b2lkKiB0YXJnZXQpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZnJl
ZUxpc3QuY29udGFpbnMoYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4odGFyZ2V0KSk7Cit9CisKIEFM
V0FZU19JTkxJTkUgdm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZShHQ0RlZmVycmFs
Q29udGV4dCogZGVmZXJyYWxDb250ZXh0KQogewotICAgIHVuc2lnbmVkIHJlbWFpbmluZyA9IG1f
ZnJlZUxpc3QucmVtYWluaW5nOwotICAgIGlmIChyZW1haW5pbmcpIHsKLSAgICAgICAgdW5zaWdu
ZWQgY2VsbFNpemUgPSBtX2NlbGxTaXplOwotICAgICAgICByZW1haW5pbmcgLT0gY2VsbFNpemU7
Ci0gICAgICAgIG1fZnJlZUxpc3QucmVtYWluaW5nID0gcmVtYWluaW5nOwotICAgICAgICByZXR1
cm4gbV9mcmVlTGlzdC5wYXlsb2FkRW5kIC0gcmVtYWluaW5nIC0gY2VsbFNpemU7Ci0gICAgfQot
ICAgIAotICAgIEZyZWVDZWxsKiBoZWFkID0gbV9mcmVlTGlzdC5oZWFkOwotICAgIGlmIChVTkxJ
S0VMWSghaGVhZCkpCi0gICAgICAgIHJldHVybiB0cnlBbGxvY2F0ZVNsb3dDYXNlKGRlZmVycmFs
Q29udGV4dCk7Ci0gICAgCi0gICAgbV9mcmVlTGlzdC5oZWFkID0gaGVhZC0+bmV4dDsKLSAgICBy
ZXR1cm4gaGVhZDsKKyAgICByZXR1cm4gbV9mcmVlTGlzdC5hbGxvY2F0ZSgKKyAgICAgICAgWyZd
ICgpIC0+IEhlYXBDZWxsKiB7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SGVhcENl
bGwqPih0cnlBbGxvY2F0ZVNsb3dDYXNlKGRlZmVycmFsQ29udGV4dCkpOworICAgICAgICB9KTsK
IH0KIAogQUxXQVlTX0lOTElORSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlKEdDRGVm
ZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQpCiB7Ci0gICAgdW5zaWduZWQgcmVtYWluaW5n
ID0gbV9mcmVlTGlzdC5yZW1haW5pbmc7Ci0gICAgaWYgKHJlbWFpbmluZykgewotICAgICAgICB1
bnNpZ25lZCBjZWxsU2l6ZSA9IG1fY2VsbFNpemU7Ci0gICAgICAgIHJlbWFpbmluZyAtPSBjZWxs
U2l6ZTsKLSAgICAgICAgbV9mcmVlTGlzdC5yZW1haW5pbmcgPSByZW1haW5pbmc7Ci0gICAgICAg
IHJldHVybiBtX2ZyZWVMaXN0LnBheWxvYWRFbmQgLSByZW1haW5pbmcgLSBjZWxsU2l6ZTsKLSAg
ICB9Ci0gICAgCi0gICAgRnJlZUNlbGwqIGhlYWQgPSBtX2ZyZWVMaXN0LmhlYWQ7Ci0gICAgaWYg
KFVOTElLRUxZKCFoZWFkKSkKLSAgICAgICAgcmV0dXJuIGFsbG9jYXRlU2xvd0Nhc2UoZGVmZXJy
YWxDb250ZXh0KTsKLSAgICAKLSAgICBtX2ZyZWVMaXN0LmhlYWQgPSBoZWFkLT5uZXh0OwotICAg
IHJldHVybiBoZWFkOworICAgIHJldHVybiBtX2ZyZWVMaXN0LmFsbG9jYXRlKAorICAgICAgICBb
Jl0gKCkgLT4gSGVhcENlbGwqIHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIZWFw
Q2VsbCo+KGFsbG9jYXRlU2xvd0Nhc2UoZGVmZXJyYWxDb250ZXh0KSk7CisgICAgICAgIH0pOwog
fQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHZvaWQgTWFya2VkQWxsb2Nh
dG9yOjpmb3JFYWNoQmxvY2soY29uc3QgRnVuY3RvciYgZnVuY3RvcikKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAJKHJldmlzaW9uIDIxNzY0NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjYsOSArMjYsMTEgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJNYXJr
ZWRCbG9jay5oIgogCisjaW5jbHVkZSAiRnJlZUxpc3RJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlND
ZWxsLmgiCiAjaW5jbHVkZSAiSlNEZXN0cnVjdGlibGVPYmplY3QuaCIKICNpbmNsdWRlICJKU0NJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oIgogI2luY2x1ZGUg
Ik1hcmtlZEJsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIlN1cGVyU2FtcGxlci5oIgogI2luY2x1
ZGUgIlN3ZWVwaW5nU2NvcGUuaCIKQEAgLTEzNCw4ICsxMzYsNyBAQCB2b2lkIE1hcmtlZEJsb2Nr
OjpIYW5kbGU6OnN0b3BBbGxvY2F0aW5nCiAgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3Rh
dHVzOjpDb250aW51ZTsKICAgICAgICAgfSk7CiAKLSAgICBmb3JFYWNoRnJlZUNlbGwoCi0gICAg
ICAgIGZyZWVMaXN0LAorICAgIGZyZWVMaXN0LmZvckVhY2goCiAgICAgICAgIFsmXSAoSGVhcENl
bGwqIGNlbGwpIHsKICAgICAgICAgICAgIGlmIChmYWxzZSkKICAgICAgICAgICAgICAgICBkYXRh
TG9nKCJGcmVlIGNlbGw6ICIsIFJhd1BvaW50ZXIoY2VsbCksICJcbiIpOwpAQCAtMTU2LDEwICsx
NTcsMTAgQEAgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpsYXN0Q2hhbmNlVG9GaQogICAgIG1f
d2Vha1NldC5sYXN0Q2hhbmNlVG9GaW5hbGl6ZSgpOwogICAgIG1fbmV3bHlBbGxvY2F0ZWQuY2xl
YXJBbGwoKTsKICAgICBtX25ld2x5QWxsb2NhdGVkVmVyc2lvbiA9IGhlYXAoKS0+b2JqZWN0U3Bh
Y2UoKS5uZXdseUFsbG9jYXRlZFZlcnNpb24oKTsKLSAgICBzd2VlcCgpOworICAgIHN3ZWVwKG51
bGxwdHIpOwogfQogCi1GcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpyZXN1bWVBbGxvY2F0
aW5nKCkKK3ZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6cmVzdW1lQWxsb2NhdGluZyhGcmVlTGlz
dCYgZnJlZUxpc3QpCiB7CiAgICAgewogICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGJs
b2NrKCkubV9sb2NrKTsKQEAgLTE3Myw0MCArMTc0LDI1IEBAIEZyZWVMaXN0IE1hcmtlZEJsb2Nr
OjpIYW5kbGU6OnJlc3VtZUFsbG8KICAgICAgICAgICAgIGlmIChmYWxzZSkKICAgICAgICAgICAg
ICAgICBkYXRhTG9nKCJUaGVyZSBhaW4ndCBubyBuZXdseSBhbGxvY2F0ZWQuXG4iKTsKICAgICAg
ICAgICAgIC8vIFRoaXMgbWVhbnMgd2UgaGFkIGFscmVhZHkgZXhoYXVzdGVkIHRoZSBibG9jayB3
aGVuIHdlIHN0b3BwZWQgYWxsb2NhdGlvbi4KLSAgICAgICAgICAgIHJldHVybiBGcmVlTGlzdCgp
OworICAgICAgICAgICAgZnJlZUxpc3QuY2xlYXIoKTsKKyAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogICAgIH0KIAogICAgIC8vIFJlLWNyZWF0ZSBvdXIgZnJlZSBsaXN0IGZyb20gYmVm
b3JlIHN0b3BwaW5nIGFsbG9jYXRpb24uIE5vdGUgdGhhdCB0aGlzIG1heSByZXR1cm4gYW4gZW1w
dHkKICAgICAvLyBmcmVlbGlzdCwgaW4gd2hpY2ggY2FzZSB0aGUgYmxvY2sgd2lsbCBzdGlsbCBi
ZSBNYXJrZWQhCi0gICAgcmV0dXJuIHN3ZWVwKFN3ZWVwVG9GcmVlTGlzdCk7CisgICAgc3dlZXAo
JmZyZWVMaXN0KTsKIH0KIAogdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjp6YXAoY29uc3QgRnJl
ZUxpc3QmIGZyZWVMaXN0KQogewotICAgIGZvckVhY2hGcmVlQ2VsbCgKLSAgICAgICAgZnJlZUxp
c3QsCisgICAgZnJlZUxpc3QuZm9yRWFjaCgKICAgICAgICAgWyZdIChIZWFwQ2VsbCogY2VsbCkg
ewogICAgICAgICAgICAgaWYgKG1fYXR0cmlidXRlcy5kZXN0cnVjdGlvbiA9PSBOZWVkc0Rlc3Ry
dWN0aW9uKQogICAgICAgICAgICAgICAgIGNlbGwtPnphcCgpOwogICAgICAgICB9KTsKIH0KIAot
dGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLXZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6Zm9yRWFj
aEZyZWVDZWxsKGNvbnN0IEZyZWVMaXN0JiBmcmVlTGlzdCwgY29uc3QgRnVuYyYgZnVuYykKLXsK
LSAgICBpZiAoZnJlZUxpc3QucmVtYWluaW5nKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgcmVt
YWluaW5nID0gZnJlZUxpc3QucmVtYWluaW5nOyByZW1haW5pbmc7IHJlbWFpbmluZyAtPSBjZWxs
U2l6ZSgpKQotICAgICAgICAgICAgZnVuYyhiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPihmcmVlTGlz
dC5wYXlsb2FkRW5kIC0gcmVtYWluaW5nKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZm9yIChG
cmVlQ2VsbCogY3VycmVudCA9IGZyZWVMaXN0LmhlYWQ7IGN1cnJlbnQ7KSB7Ci0gICAgICAgICAg
ICBGcmVlQ2VsbCogbmV4dCA9IGN1cnJlbnQtPm5leHQ7Ci0gICAgICAgICAgICBmdW5jKGJpdHdp
c2VfY2FzdDxIZWFwQ2VsbCo+KGN1cnJlbnQpKTsKLSAgICAgICAgICAgIGN1cnJlbnQgPSBuZXh0
OwotICAgICAgICB9Ci0gICAgfQotfQotCiB2b2lkIE1hcmtlZEJsb2NrOjphYm91dFRvTWFya1Ns
b3coSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24pCiB7CiAgICAgQVNTRVJUKHZtKCktPmhlYXAu
b2JqZWN0U3BhY2UoKS5pc01hcmtpbmcoKSk7CkBAIC00MDcsMjAgKzM5MywyMiBAQCBTdWJzcGFj
ZSogTWFya2VkQmxvY2s6OkhhbmRsZTo6c3Vic3BhY2UoCiAgICAgcmV0dXJuIGFsbG9jYXRvcigp
LT5zdWJzcGFjZSgpOwogfQogCi1GcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzd2VlcChT
d2VlcE1vZGUgc3dlZXBNb2RlKQordm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzd2VlcChGcmVl
TGlzdCogZnJlZUxpc3QpCiB7CiAgICAgU3dlZXBpbmdTY29wZSBzd2VlcGluZ1Njb3BlKCpoZWFw
KCkpOwogICAgIAorICAgIFN3ZWVwTW9kZSBzd2VlcE1vZGUgPSBmcmVlTGlzdCA/IFN3ZWVwVG9G
cmVlTGlzdCA6IFN3ZWVwT25seTsKKyAgICAKICAgICBtX2FsbG9jYXRvci0+c2V0SXNVbnN3ZXB0
KE5vTG9ja2luZ05lY2Vzc2FyeSwgdGhpcywgZmFsc2UpOwogICAgIAogICAgIG1fd2Vha1NldC5z
d2VlcCgpOwogCiAgICAgaWYgKHN3ZWVwTW9kZSA9PSBTd2VlcE9ubHkgJiYgbV9hdHRyaWJ1dGVz
LmRlc3RydWN0aW9uID09IERvZXNOb3ROZWVkRGVzdHJ1Y3Rpb24pCi0gICAgICAgIHJldHVybiBG
cmVlTGlzdCgpOworICAgICAgICByZXR1cm47CiAKICAgICBpZiAoVU5MSUtFTFkobV9pc0ZyZWVM
aXN0ZWQpKSB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN3ZWVwTW9kZSA9PSBTd2VlcFRvRnJl
ZUxpc3QpOwotICAgICAgICByZXR1cm4gRnJlZUxpc3QoKTsKKyAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICAKICAgICBBU1NFUlQoIW1fYWxsb2NhdG9yLT5pc0FsbG9jYXRlZChOb0xvY2tpbmdO
ZWNlc3NhcnksIHRoaXMpKTsKQEAgLTQyOCw4ICs0MTYsMTAgQEAgRnJlZUxpc3QgTWFya2VkQmxv
Y2s6OkhhbmRsZTo6c3dlZXAoU3dlZQogICAgIGlmIChzcGFjZSgpLT5pc01hcmtpbmcoKSkKICAg
ICAgICAgYmxvY2soKS5tX2xvY2subG9jaygpOwogICAgIAotICAgIGlmIChtX2F0dHJpYnV0ZXMu
ZGVzdHJ1Y3Rpb24gPT0gTmVlZHNEZXN0cnVjdGlvbikKLSAgICAgICAgcmV0dXJuIHN1YnNwYWNl
KCktPmZpbmlzaFN3ZWVwKCp0aGlzLCBzd2VlcE1vZGUpOworICAgIGlmIChtX2F0dHJpYnV0ZXMu
ZGVzdHJ1Y3Rpb24gPT0gTmVlZHNEZXN0cnVjdGlvbikgeworICAgICAgICBzdWJzcGFjZSgpLT5m
aW5pc2hTd2VlcCgqdGhpcywgZnJlZUxpc3QpOworICAgICAgICByZXR1cm47CisgICAgfQogICAg
IAogICAgIC8vIEhhbmRsZSB0aGUgbm8tZGVzdHJ1Y3RvciBzcGVjaWFsaXphdGlvbnMgaGVyZSwg
c2luY2Ugd2UgaGF2ZSB0aGUgbW9zdCBvZiB0aG9zZS4gVGhpcwogICAgIC8vIGVuc3VyZXMgdGhh
dCB0aGV5IGRvbid0IGdldCByZS1zcGVjaWFsaXplZCBmb3IgZXZlcnkgZGVzdHJ1Y3RvciBzcGFj
ZS4KQEAgLTQzOSw3ICs0MjksNiBAQCBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzd2Vl
cChTd2VlCiAgICAgTmV3bHlBbGxvY2F0ZWRNb2RlIG5ld2x5QWxsb2NhdGVkTW9kZSA9IHRoaXMt
Pm5ld2x5QWxsb2NhdGVkTW9kZSgpOwogICAgIE1hcmtzTW9kZSBtYXJrc01vZGUgPSB0aGlzLT5t
YXJrc01vZGUoKTsKICAgICAKLSAgICBGcmVlTGlzdCByZXN1bHQ7CiAgICAgYXV0byB0cnlTcGVj
aWFsaXplZCA9IFsmXSAoKSAtPiBib29sIHsKICAgICAgICAgaWYgKHN3ZWVwTW9kZSAhPSBTd2Vl
cFRvRnJlZUxpc3QpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC00NTIsMjAgKzQ0MSwy
MCBAQCBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzd2VlcChTd2VlCiAgICAgICAgIGNh
c2UgSXNFbXB0eToKICAgICAgICAgICAgIHN3aXRjaCAobWFya3NNb2RlKSB7CiAgICAgICAgICAg
ICBjYXNlIE1hcmtzTm90U3RhbGU6Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gc3BlY2lhbGl6
ZWRTd2VlcDx0cnVlLCBJc0VtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzTm9EZXN0cnVj
dG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBNYXJrc05vdFN0
YWxlPihJc0VtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzTm9EZXN0cnVjdG9ycywgRG9u
dFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBNYXJrc05vdFN0YWxlLCBbXSAo
Vk0mLCBKU0NlbGwqKSB7IH0pOworICAgICAgICAgICAgICAgIHNwZWNpYWxpemVkU3dlZXA8dHJ1
ZSwgSXNFbXB0eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMsIERvbnRT
Y3JpYmJsZSwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCwgTWFya3NOb3RTdGFsZT4oZnJlZUxp
c3QsIElzRW1wdHksIFN3ZWVwVG9GcmVlTGlzdCwgQmxvY2tIYXNOb0Rlc3RydWN0b3JzLCBEb250
U2NyaWJibGUsIERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzTm90U3RhbGUsIFtdIChW
TSYsIEpTQ2VsbCopIHsgfSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
ICAgICBjYXNlIE1hcmtzU3RhbGU6Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gc3BlY2lhbGl6
ZWRTd2VlcDx0cnVlLCBJc0VtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzTm9EZXN0cnVj
dG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBNYXJrc1N0YWxl
PihJc0VtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzTm9EZXN0cnVjdG9ycywgRG9udFNj
cmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBNYXJrc1N0YWxlLCBbXSAoVk0mLCBK
U0NlbGwqKSB7IH0pOworICAgICAgICAgICAgICAgIHNwZWNpYWxpemVkU3dlZXA8dHJ1ZSwgSXNF
bXB0eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJs
ZSwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCwgTWFya3NTdGFsZT4oZnJlZUxpc3QsIElzRW1w
dHksIFN3ZWVwVG9GcmVlTGlzdCwgQmxvY2tIYXNOb0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUs
IERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzU3RhbGUsIFtdIChWTSYsIEpTQ2VsbCop
IHsgfSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBOb3RFbXB0eToKICAgICAgICAgICAgIHN3aXRj
aCAobWFya3NNb2RlKSB7CiAgICAgICAgICAgICBjYXNlIE1hcmtzTm90U3RhbGU6Ci0gICAgICAg
ICAgICAgICAgcmVzdWx0ID0gc3BlY2lhbGl6ZWRTd2VlcDx0cnVlLCBOb3RFbXB0eSwgU3dlZXBU
b0ZyZWVMaXN0LCBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9lc05vdEhh
dmVOZXdseUFsbG9jYXRlZCwgTWFya3NOb3RTdGFsZT4oSXNFbXB0eSwgU3dlZXBUb0ZyZWVMaXN0
LCBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9lc05vdEhhdmVOZXdseUFs
bG9jYXRlZCwgTWFya3NOb3RTdGFsZSwgW10gKFZNJiwgSlNDZWxsKikgeyB9KTsKKyAgICAgICAg
ICAgICAgICBzcGVjaWFsaXplZFN3ZWVwPHRydWUsIE5vdEVtcHR5LCBTd2VlcFRvRnJlZUxpc3Qs
IEJsb2NrSGFzTm9EZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxs
b2NhdGVkLCBNYXJrc05vdFN0YWxlPihmcmVlTGlzdCwgSXNFbXB0eSwgU3dlZXBUb0ZyZWVMaXN0
LCBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9lc05vdEhhdmVOZXdseUFs
bG9jYXRlZCwgTWFya3NOb3RTdGFsZSwgW10gKFZNJiwgSlNDZWxsKikgeyB9KTsKICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIGNhc2UgTWFya3NTdGFsZToKLSAgICAg
ICAgICAgICAgICByZXN1bHQgPSBzcGVjaWFsaXplZFN3ZWVwPHRydWUsIE5vdEVtcHR5LCBTd2Vl
cFRvRnJlZUxpc3QsIEJsb2NrSGFzTm9EZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90
SGF2ZU5ld2x5QWxsb2NhdGVkLCBNYXJrc1N0YWxlPihJc0VtcHR5LCBTd2VlcFRvRnJlZUxpc3Qs
IEJsb2NrSGFzTm9EZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxs
b2NhdGVkLCBNYXJrc1N0YWxlLCBbXSAoVk0mLCBKU0NlbGwqKSB7IH0pOworICAgICAgICAgICAg
ICAgIHNwZWNpYWxpemVkU3dlZXA8dHJ1ZSwgTm90RW1wdHksIFN3ZWVwVG9GcmVlTGlzdCwgQmxv
Y2tIYXNOb0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUsIERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0
ZWQsIE1hcmtzU3RhbGU+KGZyZWVMaXN0LCBJc0VtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2Nr
SGFzTm9EZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVk
LCBNYXJrc1N0YWxlLCBbXSAoVk0mLCBKU0NlbGwqKSB7IH0pOwogICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CkBAIC00NzUsMTAg
KzQ2NCwxNiBAQCBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzd2VlcChTd2VlCiAgICAg
fTsKICAgICAKICAgICBpZiAodHJ5U3BlY2lhbGl6ZWQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gVGhlIHRlbXBsYXRlIGFyZ3VtZW50cyBkb24n
dCBtYXR0ZXIgYmVjYXVzZSB0aGUgZmlyc3Qgb25lIGlzIGZhbHNlLgotICAgIHJldHVybiBzcGVj
aWFsaXplZFN3ZWVwPGZhbHNlLCBJc0VtcHR5LCBTd2VlcE9ubHksIEJsb2NrSGFzTm9EZXN0cnVj
dG9ycywgRG9udFNjcmliYmxlLCBIYXNOZXdseUFsbG9jYXRlZCwgTWFya3NTdGFsZT4oZW1wdHlN
b2RlLCBzd2VlcE1vZGUsIEJsb2NrSGFzTm9EZXN0cnVjdG9ycywgc2NyaWJibGVNb2RlLCBuZXds
eUFsbG9jYXRlZE1vZGUsIG1hcmtzTW9kZSwgW10gKFZNJiwgSlNDZWxsKikgeyB9KTsKKyAgICBz
cGVjaWFsaXplZFN3ZWVwPGZhbHNlLCBJc0VtcHR5LCBTd2VlcE9ubHksIEJsb2NrSGFzTm9EZXN0
cnVjdG9ycywgRG9udFNjcmliYmxlLCBIYXNOZXdseUFsbG9jYXRlZCwgTWFya3NTdGFsZT4oZnJl
ZUxpc3QsIGVtcHR5TW9kZSwgc3dlZXBNb2RlLCBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMsIHNjcmli
YmxlTW9kZSwgbmV3bHlBbGxvY2F0ZWRNb2RlLCBtYXJrc01vZGUsIFtdIChWTSYsIEpTQ2VsbCop
IHsgfSk7Cit9CisKK2Jvb2wgTWFya2VkQmxvY2s6OkhhbmRsZTo6aXNGcmVlTGlzdGVkQ2VsbChj
b25zdCB2b2lkKiB0YXJnZXQpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlzRnJlZUxpc3RlZCgpKTsK
KyAgICByZXR1cm4gbV9hbGxvY2F0b3ItPmlzRnJlZUxpc3RlZENlbGwodGFyZ2V0KTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
ZWRCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtl
ZEJsb2NrLmgJKHJldmlzaW9uIDIxNzY0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtlZEJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDcgKzIzLDYgQEAKIAogI2luY2x1
ZGUgIkFsbG9jYXRvckF0dHJpYnV0ZXMuaCIKICNpbmNsdWRlICJEZXN0cnVjdGlvbk1vZGUuaCIK
LSNpbmNsdWRlICJGcmVlTGlzdC5oIgogI2luY2x1ZGUgIkhlYXBDZWxsLmgiCiAjaW5jbHVkZSAi
SXRlcmF0aW9uU3RhdHVzLmgiCiAjaW5jbHVkZSAiV2Vha1NldC5oIgpAQCAtMzYsNiArMzUsNyBA
QAogCiBuYW1lc3BhY2UgSlNDIHsKICAgICAKK2NsYXNzIEZyZWVMaXN0OwogY2xhc3MgSGVhcDsK
IGNsYXNzIEpTQ2VsbDsKIGNsYXNzIE1hcmtlZEFsbG9jYXRvcjsKQEAgLTExNywyMSArMTE3LDIy
IEBAIHB1YmxpYzoKICAgICAgICAgVk0qIHZtKCkgY29uc3Q7CiAgICAgICAgIFdlYWtTZXQmIHdl
YWtTZXQoKTsKICAgICAgICAgICAgIAorICAgICAgICBlbnVtIFN3ZWVwTW9kZSB7IFN3ZWVwT25s
eSwgU3dlZXBUb0ZyZWVMaXN0IH07CisKICAgICAgICAgLy8gU3dlZXBpbmcgZW5zdXJlcyB0aGF0
IGRlc3RydWN0b3JzIGdldCBjYWxsZWQgYW5kIHJlbW92ZXMgdGhlIGJsb2NrIGZyb20gdGhlIHVu
c3dlcHQKICAgICAgICAgLy8gc2V0LiBTd2VlcGluZyB0byBmcmVlIGxpc3QgYWxzbyByZW1vdmVz
IHRoZSBibG9jayBmcm9tIHRoZSBlbXB0eSBzZXQsIGlmIGl0IHdhcyBpbiB0aGF0CiAgICAgICAg
IC8vIHNldC4gU3dlZXBpbmcgd2l0aCBTd2VlcE9ubHkgbWF5IGFkZCB0aGlzIGJsb2NrIHRvIHRo
ZSBlbXB0eSBzZXQsIGlmIHRoZSBibG9jayBpcyBmb3VuZAotICAgICAgICAvLyB0byBiZSBlbXB0
eS4KKyAgICAgICAgLy8gdG8gYmUgZW1wdHkuIFRoZSBmcmVlLWxpc3QgYmVpbmcgbnVsbCBpbXBs
aWVzIFN3ZWVwT25seS4KICAgICAgICAgLy8KICAgICAgICAgLy8gTm90ZSB0aGF0IHlvdSBuZWVk
IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBlbXB0eSBiaXQgcmVmbGVjdHMgcmVhbGl0eS4gSWYgaXQn
cyBub3Qgc2V0CiAgICAgICAgIC8vIGFuZCB0aGUgYmxvY2sgaXMgZnJlc2hseSBjcmVhdGVkLCB0
aGVuIHdlJ2xsIG1ha2UgdGhlIG1pc3Rha2Ugb2YgcnVubmluZyBkZXN0cnVjdG9ycyBpbgogICAg
ICAgICAvLyB0aGUgYmxvY2suIElmIGl0J3Mgbm90IHNldCBhbmQgdGhlIGJsb2NrIGhhcyBub3Ro
aW5nIG1hcmtlZCwgdGhlbiB3ZSdsbCBtYWtlIHRoZQogICAgICAgICAvLyBtaXN0YWtlIG9mIG1h
a2luZyBhIHBvcCBmcmVlbGlzdCByYXRoZXIgdGhhbiBhIGJ1bXAgZnJlZWxpc3QuCi0gICAgICAg
IGVudW0gU3dlZXBNb2RlIHsgU3dlZXBPbmx5LCBTd2VlcFRvRnJlZUxpc3QgfTsKLSAgICAgICAg
RnJlZUxpc3Qgc3dlZXAoU3dlZXBNb2RlID0gU3dlZXBPbmx5KTsKKyAgICAgICAgdm9pZCBzd2Vl
cChGcmVlTGlzdCopOwogICAgICAgICAKICAgICAgICAgLy8gVGhpcyBpcyB0byBiZSBjYWxsZWQg
YnkgU3Vic3BhY2UuCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIERlc3Ryb3lGdW5jPgotICAg
ICAgICBGcmVlTGlzdCBmaW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZShTd2VlcE1vZGUsIGNvbnN0
IERlc3Ryb3lGdW5jJik7CisgICAgICAgIHZvaWQgZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2Uo
RnJlZUxpc3QqLCBjb25zdCBEZXN0cm95RnVuYyYpOwogICAgICAgICAKICAgICAgICAgdm9pZCB1
bnN3ZWVwV2l0aE5vTmV3bHlBbGxvY2F0ZWQoKTsKICAgICAgICAgCkBAIC0xNDcsNyArMTQ4LDcg
QEAgcHVibGljOgogICAgICAgICAvLyBvZiB0aGVzZSBmdW5jdGlvbnM6CiAgICAgICAgIHZvaWQg
ZGlkQ29uc3VtZUZyZWVMaXN0KCk7IC8vIENhbGwgdGhpcyBvbmNlIHlvdSd2ZSBhbGxvY2F0ZWQg
YWxsIHRoZSBpdGVtcyBpbiB0aGUgZnJlZSBsaXN0LgogICAgICAgICB2b2lkIHN0b3BBbGxvY2F0
aW5nKGNvbnN0IEZyZWVMaXN0Jik7Ci0gICAgICAgIEZyZWVMaXN0IHJlc3VtZUFsbG9jYXRpbmco
KTsgLy8gQ2FsbCB0aGlzIGlmIHlvdSBjYW5vbmljYWxpemVkIGEgYmxvY2sgZm9yIHNvbWUgbm9u
LWNvbGxlY3Rpb24gcmVsYXRlZCBwdXJwb3NlLgorICAgICAgICB2b2lkIHJlc3VtZUFsbG9jYXRp
bmcoRnJlZUxpc3QmKTsgLy8gQ2FsbCB0aGlzIGlmIHlvdSBjYW5vbmljYWxpemVkIGEgYmxvY2sg
Zm9yIHNvbWUgbm9uLWNvbGxlY3Rpb24gcmVsYXRlZCBwdXJwb3NlLgogICAgICAgICAgICAgCiAg
ICAgICAgIHNpemVfdCBjZWxsU2l6ZSgpOwogICAgICAgICBpbmxpbmUgdW5zaWduZWQgY2VsbHNQ
ZXJCbG9jaygpOwpAQCAtMjE1LDEwICsyMTYsNyBAQCBwdWJsaWM6CiAgICAgICAgIE1hcmtzTW9k
ZSBtYXJrc01vZGUoKTsKICAgICAgICAgCiAgICAgICAgIHRlbXBsYXRlPGJvb2wsIEVtcHR5TW9k
ZSwgU3dlZXBNb2RlLCBTd2VlcERlc3RydWN0aW9uTW9kZSwgU2NyaWJibGVNb2RlLCBOZXdseUFs
bG9jYXRlZE1vZGUsIE1hcmtzTW9kZSwgdHlwZW5hbWUgRGVzdHJveUZ1bmM+Ci0gICAgICAgIEZy
ZWVMaXN0IHNwZWNpYWxpemVkU3dlZXAoRW1wdHlNb2RlLCBTd2VlcE1vZGUsIFN3ZWVwRGVzdHJ1
Y3Rpb25Nb2RlLCBTY3JpYmJsZU1vZGUsIE5ld2x5QWxsb2NhdGVkTW9kZSwgTWFya3NNb2RlLCBj
b25zdCBEZXN0cm95RnVuYyYpOwotICAgICAgICAKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RnVuYz4KLSAgICAgICAgdm9pZCBmb3JFYWNoRnJlZUNlbGwoY29uc3QgRnJlZUxpc3QmLCBjb25z
dCBGdW5jJik7CisgICAgICAgIHZvaWQgc3BlY2lhbGl6ZWRTd2VlcChGcmVlTGlzdCosIEVtcHR5
TW9kZSwgU3dlZXBNb2RlLCBTd2VlcERlc3RydWN0aW9uTW9kZSwgU2NyaWJibGVNb2RlLCBOZXds
eUFsbG9jYXRlZE1vZGUsIE1hcmtzTW9kZSwgY29uc3QgRGVzdHJveUZ1bmMmKTsKICAgICAgICAg
CiAgICAgICAgIHZvaWQgc2V0SXNGcmVlTGlzdGVkKCk7CiAgICAgICAgIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2tJbmxpbmVzLmgJKHJldmlzaW9u
IDIxNzY0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrSW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcsMTIgKzExNyw2IEBAIGlubGluZSBib29sIE1hcmtl
ZEJsb2NrOjpIYW5kbGU6OmlzTGl2ZUMKICAgICByZXR1cm4gaXNMaXZlKG1hcmtpbmdWZXJzaW9u
LCBpc01hcmtpbmcsIHN0YXRpY19jYXN0PGNvbnN0IEhlYXBDZWxsKj4ocCkpOwogfQogCi1pbmxp
bmUgYm9vbCBNYXJrZWRCbG9jazo6SGFuZGxlOjppc0ZyZWVMaXN0ZWRDZWxsKGNvbnN0IHZvaWQq
IHRhcmdldCkgY29uc3QKLXsKLSAgICBBU1NFUlQoaXNGcmVlTGlzdGVkKCkpOwotICAgIHJldHVy
biBtX2FsbG9jYXRvci0+aXNGcmVlTGlzdGVkQ2VsbCh0YXJnZXQpOwotfQotCiAvLyBUaGUgZm9s
bG93aW5nIGhhcyB0byBiZSB0cnVlIGZvciBzcGVjaWFsaXphdGlvbiB0byBraWNrIGluOgogLy8K
IC8vIHN3ZWVwTW9kZSA9PSBTd2VlcFRvRnJlZUxpc3QKQEAgLTE0NSw3ICsxMzksNyBAQCBpbmxp
bmUgYm9vbCBNYXJrZWRCbG9jazo6SGFuZGxlOjppc0ZyZWVMCiAvLyBPbmx5IHRoZSBEb2VzTm90
TmVlZERlc3RydWN0aW9uIG9uZSBzaG91bGQgYmUgc3BlY2lhbGl6ZWQgYnkgTWFya2VkQmxvY2su
CiAKIHRlbXBsYXRlPGJvb2wgc3BlY2lhbGl6ZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6RW1wdHlN
b2RlIHNwZWNpYWxpemVkRW1wdHlNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcE1vZGUg
c3BlY2lhbGl6ZWRTd2VlcE1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwRGVzdHJ1Y3Rp
b25Nb2RlIHNwZWNpYWxpemVkRGVzdHJ1Y3Rpb25Nb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpT
Y3JpYmJsZU1vZGUgc3BlY2lhbGl6ZWRTY3JpYmJsZU1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6
Ok5ld2x5QWxsb2NhdGVkTW9kZSBzcGVjaWFsaXplZE5ld2x5QWxsb2NhdGVkTW9kZSwgTWFya2Vk
QmxvY2s6OkhhbmRsZTo6TWFya3NNb2RlIHNwZWNpYWxpemVkTWFya3NNb2RlLCB0eXBlbmFtZSBE
ZXN0cm95RnVuYz4KLUZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxpemVkU3dl
ZXAoTWFya2VkQmxvY2s6OkhhbmRsZTo6RW1wdHlNb2RlIGVtcHR5TW9kZSwgTWFya2VkQmxvY2s6
OkhhbmRsZTo6U3dlZXBNb2RlIHN3ZWVwTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBE
ZXN0cnVjdGlvbk1vZGUgZGVzdHJ1Y3Rpb25Nb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTY3Jp
YmJsZU1vZGUgc2NyaWJibGVNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpOZXdseUFsbG9jYXRl
ZE1vZGUgbmV3bHlBbGxvY2F0ZWRNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpNYXJrc01vZGUg
bWFya3NNb2RlLCBjb25zdCBEZXN0cm95RnVuYyYgZGVzdHJveUZ1bmMpCit2b2lkIE1hcmtlZEJs
b2NrOjpIYW5kbGU6OnNwZWNpYWxpemVkU3dlZXAoRnJlZUxpc3QqIGZyZWVMaXN0LCBNYXJrZWRC
bG9jazo6SGFuZGxlOjpFbXB0eU1vZGUgZW1wdHlNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpT
d2VlcE1vZGUgc3dlZXBNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcERlc3RydWN0aW9u
TW9kZSBkZXN0cnVjdGlvbk1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlNjcmliYmxlTW9kZSBz
Y3JpYmJsZU1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6Ok5ld2x5QWxsb2NhdGVkTW9kZSBuZXds
eUFsbG9jYXRlZE1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6Ok1hcmtzTW9kZSBtYXJrc01vZGUs
IGNvbnN0IERlc3Ryb3lGdW5jJiBkZXN0cm95RnVuYykKIHsKICAgICBpZiAoc3BlY2lhbGl6ZSkg
ewogICAgICAgICBlbXB0eU1vZGUgPSBzcGVjaWFsaXplZEVtcHR5TW9kZTsKQEAgLTE5MywxNyAr
MTg3LDE4IEBAIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxpemUKICAgICAg
ICAgICAgIG1fYWxsb2NhdG9yLT5zZXRJc0VtcHR5KE5vTG9ja2luZ05lY2Vzc2FyeSwgdGhpcywg
dHJ1ZSk7CiAgICAgICAgIGlmIChzcGFjZSgpLT5pc01hcmtpbmcoKSkKICAgICAgICAgICAgIGJs
b2NrLm1fbG9jay51bmxvY2soKTsKLSAgICAgICAgRnJlZUxpc3QgcmVzdWx0ID0gRnJlZUxpc3Q6
OmJ1bXAocGF5bG9hZEVuZCwgcGF5bG9hZEVuZCAtIHBheWxvYWRCZWdpbik7CisgICAgICAgIGlm
IChzd2VlcE1vZGUgPT0gU3dlZXBUb0ZyZWVMaXN0KQorICAgICAgICAgICAgZnJlZUxpc3QtPmlu
aXRpYWxpemVCdW1wKHBheWxvYWRFbmQsIHBheWxvYWRFbmQgLSBwYXlsb2FkQmVnaW4pOwogICAg
ICAgICBpZiAoZmFsc2UpCi0gICAgICAgICAgICBkYXRhTG9nKCJRdWlja2x5IHN3ZXB0IGJsb2Nr
ICIsIFJhd1BvaW50ZXIodGhpcyksICIgd2l0aCBjZWxsIHNpemUgIiwgY2VsbFNpemUoKSwgIiBh
bmQgYXR0cmlidXRlcyAiLCBtX2F0dHJpYnV0ZXMsICI6ICIsIHJlc3VsdCwgIlxuIik7Ci0gICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICBkYXRhTG9nKCJRdWlja2x5IHN3ZXB0IGJs
b2NrICIsIFJhd1BvaW50ZXIodGhpcyksICIgd2l0aCBjZWxsIHNpemUgIiwgY2VsbFNpemUoKSwg
IiBhbmQgYXR0cmlidXRlcyAiLCBtX2F0dHJpYnV0ZXMsICI6ICIsIHBvaW50ZXJEdW1wKGZyZWVM
aXN0KSwgIlxuIik7CisgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICAvLyBUaGlzIHByb2R1
Y2VzIGEgZnJlZSBsaXN0IHRoYXQgaXMgb3JkZXJlZCBpbiByZXZlcnNlIHRocm91Z2ggdGhlIGJs
b2NrLgogICAgIC8vIFRoaXMgaXMgZmluZSwgc2luY2UgdGhlIGFsbG9jYXRpb24gY29kZSBtYWtl
cyBubyBhc3N1bXB0aW9ucyBhYm91dCB0aGUKICAgICAvLyBvcmRlciBvZiB0aGUgZnJlZSBsaXN0
LgotICAgIEZyZWVDZWxsKiBoZWFkID0gMDsKLSAgICBzaXplX3QgY291bnQgPSAwOworICAgIGlm
IChzd2VlcE1vZGUgPT0gU3dlZXBUb0ZyZWVMaXN0KQorICAgICAgICBmcmVlTGlzdC0+aW5pdGlh
bGl6ZUxpc3QoJmJsb2NrKTsKICAgICBib29sIGlzRW1wdHkgPSB0cnVlOwogICAgIFZlY3Rvcjxz
aXplX3Q+IGRlYWRDZWxsczsKICAgICBWTSYgdm0gPSAqdGhpcy0+dm0oKTsKQEAgLTIxOSwxMiAr
MjE0LDkgQEAgRnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3BlY2lhbGl6ZQogICAgICAg
ICB9CiAKICAgICAgICAgaWYgKHN3ZWVwTW9kZSA9PSBTd2VlcFRvRnJlZUxpc3QpIHsKLSAgICAg
ICAgICAgIEZyZWVDZWxsKiBmcmVlQ2VsbCA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEZyZWVDZWxs
Kj4oY2VsbCk7CiAgICAgICAgICAgICBpZiAoc2NyaWJibGVNb2RlID09IFNjcmliYmxlKQotICAg
ICAgICAgICAgICAgIHNjcmliYmxlKGZyZWVDZWxsLCBjZWxsU2l6ZSgpKTsKLSAgICAgICAgICAg
IGZyZWVDZWxsLT5uZXh0ID0gaGVhZDsKLSAgICAgICAgICAgIGhlYWQgPSBmcmVlQ2VsbDsKLSAg
ICAgICAgICAgICsrY291bnQ7CisgICAgICAgICAgICAgICAgc2NyaWJibGUoY2VsbCwgY2VsbFNp
emUoKSk7CisgICAgICAgICAgICBmcmVlTGlzdC0+YWRkRnJlZUNlbGwoY2VsbCk7CiAgICAgICAg
IH0KICAgICB9OwogICAgIGZvciAoc2l6ZV90IGkgPSBmaXJzdEF0b20oKTsgaSA8IG1fZW5kQXRv
bTsgaSArPSBtX2F0b21zUGVyQ2VsbCkgewpAQCAtMjU0LDI2ICsyNDYsMjQgQEAgRnJlZUxpc3Qg
TWFya2VkQmxvY2s6OkhhbmRsZTo6c3BlY2lhbGl6ZQogICAgICAgICAgICAgaGFuZGxlRGVhZENl
bGwoaSk7CiAgICAgfQogCi0gICAgRnJlZUxpc3QgcmVzdWx0ID0gRnJlZUxpc3Q6Omxpc3QoaGVh
ZCwgY291bnQgKiBjZWxsU2l6ZSgpKTsKICAgICBpZiAoc3dlZXBNb2RlID09IFN3ZWVwVG9GcmVl
TGlzdCkKICAgICAgICAgc2V0SXNGcmVlTGlzdGVkKCk7CiAgICAgZWxzZSBpZiAoaXNFbXB0eSkK
ICAgICAgICAgbV9hbGxvY2F0b3ItPnNldElzRW1wdHkoTm9Mb2NraW5nTmVjZXNzYXJ5LCB0aGlz
LCB0cnVlKTsKICAgICBpZiAoZmFsc2UpCi0gICAgICAgIGRhdGFMb2coIlNsb3dseSBzd2VwdCBi
bG9jayAiLCBSYXdQb2ludGVyKCZibG9jayksICIgd2l0aCBjZWxsIHNpemUgIiwgY2VsbFNpemUo
KSwgIiBhbmQgYXR0cmlidXRlcyAiLCBtX2F0dHJpYnV0ZXMsICI6ICIsIHJlc3VsdCwgIlxuIik7
Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgZGF0YUxvZygiU2xvd2x5IHN3ZXB0IGJsb2Nr
ICIsIFJhd1BvaW50ZXIoJmJsb2NrKSwgIiB3aXRoIGNlbGwgc2l6ZSAiLCBjZWxsU2l6ZSgpLCAi
IGFuZCBhdHRyaWJ1dGVzICIsIG1fYXR0cmlidXRlcywgIjogIiwgcG9pbnRlckR1bXAoZnJlZUxp
c3QpLCAiXG4iKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRGVzdHJveUZ1bmM+Ci1GcmVlTGlz
dCBNYXJrZWRCbG9jazo6SGFuZGxlOjpmaW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZShTd2VlcE1v
ZGUgc3dlZXBNb2RlLCBjb25zdCBEZXN0cm95RnVuYyYgZGVzdHJveUZ1bmMpCit2b2lkIE1hcmtl
ZEJsb2NrOjpIYW5kbGU6OmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlKEZyZWVMaXN0KiBmcmVl
TGlzdCwgY29uc3QgRGVzdHJveUZ1bmMmIGRlc3Ryb3lGdW5jKQogeworICAgIFN3ZWVwTW9kZSBz
d2VlcE1vZGUgPSBmcmVlTGlzdCA/IFN3ZWVwVG9GcmVlTGlzdCA6IFN3ZWVwT25seTsKICAgICBT
d2VlcERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbk1vZGUgPSB0aGlzLT5zd2VlcERlc3RydWN0
aW9uTW9kZSgpOwogICAgIEVtcHR5TW9kZSBlbXB0eU1vZGUgPSB0aGlzLT5lbXB0eU1vZGUoKTsK
ICAgICBTY3JpYmJsZU1vZGUgc2NyaWJibGVNb2RlID0gdGhpcy0+c2NyaWJibGVNb2RlKCk7CiAg
ICAgTmV3bHlBbGxvY2F0ZWRNb2RlIG5ld2x5QWxsb2NhdGVkTW9kZSA9IHRoaXMtPm5ld2x5QWxs
b2NhdGVkTW9kZSgpOwogICAgIE1hcmtzTW9kZSBtYXJrc01vZGUgPSB0aGlzLT5tYXJrc01vZGUo
KTsKIAotICAgIEZyZWVMaXN0IHJlc3VsdDsKICAgICBhdXRvIHRyeVNwZWNpYWxpemVkID0gWyZd
ICgpIC0+IGJvb2wgewogICAgICAgICBpZiAoc3dlZXBNb2RlICE9IFN3ZWVwVG9GcmVlTGlzdCkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTI4OCwxMCArMjc4LDEwIEBAIEZyZWVMaXN0
IE1hcmtlZEJsb2NrOjpIYW5kbGU6OmZpbmlzaFN3ZWUKICAgICAgICAgCiAgICAgICAgIHN3aXRj
aCAobWFya3NNb2RlKSB7CiAgICAgICAgIGNhc2UgTWFya3NOb3RTdGFsZToKLSAgICAgICAgICAg
IHJlc3VsdCA9IHNwZWNpYWxpemVkU3dlZXA8dHJ1ZSwgTm90RW1wdHksIFN3ZWVwVG9GcmVlTGlz
dCwgQmxvY2tIYXNEZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxs
b2NhdGVkLCBNYXJrc05vdFN0YWxlPihJc0VtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFz
RGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCwgTWFy
a3NOb3RTdGFsZSwgZGVzdHJveUZ1bmMpOworICAgICAgICAgICAgc3BlY2lhbGl6ZWRTd2VlcDx0
cnVlLCBOb3RFbXB0eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hhc0Rlc3RydWN0b3JzLCBEb250
U2NyaWJibGUsIERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzTm90U3RhbGU+KGZyZWVM
aXN0LCBJc0VtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzRGVzdHJ1Y3RvcnMsIERvbnRT
Y3JpYmJsZSwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCwgTWFya3NOb3RTdGFsZSwgZGVzdHJv
eUZ1bmMpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGNhc2UgTWFya3NTdGFs
ZToKLSAgICAgICAgICAgIHJlc3VsdCA9IHNwZWNpYWxpemVkU3dlZXA8dHJ1ZSwgTm90RW1wdHks
IFN3ZWVwVG9GcmVlTGlzdCwgQmxvY2tIYXNEZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBEb2Vz
Tm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBNYXJrc1N0YWxlPihJc0VtcHR5LCBTd2VlcFRvRnJlZUxp
c3QsIEJsb2NrSGFzRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9lc05vdEhhdmVOZXdseUFs
bG9jYXRlZCwgTWFya3NTdGFsZSwgZGVzdHJveUZ1bmMpOworICAgICAgICAgICAgc3BlY2lhbGl6
ZWRTd2VlcDx0cnVlLCBOb3RFbXB0eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hhc0Rlc3RydWN0
b3JzLCBEb250U2NyaWJibGUsIERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzU3RhbGU+
KGZyZWVMaXN0LCBJc0VtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzRGVzdHJ1Y3RvcnMs
IERvbnRTY3JpYmJsZSwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCwgTWFya3NTdGFsZSwgZGVz
dHJveUZ1bmMpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAg
CkBAIC0yOTksMTAgKzI4OSwxMCBAQCBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpmaW5p
c2hTd2VlCiAgICAgfTsKICAgICAKICAgICBpZiAodHJ5U3BlY2lhbGl6ZWQoKSkKLSAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJuOwogICAgIAogICAgIC8vIFRoZSB0ZW1wbGF0
ZSBhcmd1bWVudHMgZG9uJ3QgbWF0dGVyIGJlY2F1c2UgdGhlIGZpcnN0IG9uZSBpcyBmYWxzZS4K
LSAgICByZXR1cm4gc3BlY2lhbGl6ZWRTd2VlcDxmYWxzZSwgSXNFbXB0eSwgU3dlZXBPbmx5LCBC
bG9ja0hhc05vRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgSGFzTmV3bHlBbGxvY2F0ZWQsIE1h
cmtzU3RhbGU+KGVtcHR5TW9kZSwgc3dlZXBNb2RlLCBkZXN0cnVjdGlvbk1vZGUsIHNjcmliYmxl
TW9kZSwgbmV3bHlBbGxvY2F0ZWRNb2RlLCBtYXJrc01vZGUsIGRlc3Ryb3lGdW5jKTsKKyAgICBz
cGVjaWFsaXplZFN3ZWVwPGZhbHNlLCBJc0VtcHR5LCBTd2VlcE9ubHksIEJsb2NrSGFzTm9EZXN0
cnVjdG9ycywgRG9udFNjcmliYmxlLCBIYXNOZXdseUFsbG9jYXRlZCwgTWFya3NTdGFsZT4oZnJl
ZUxpc3QsIGVtcHR5TW9kZSwgc3dlZXBNb2RlLCBkZXN0cnVjdGlvbk1vZGUsIHNjcmliYmxlTW9k
ZSwgbmV3bHlBbGxvY2F0ZWRNb2RlLCBtYXJrc01vZGUsIGRlc3Ryb3lGdW5jKTsKIH0KIAogaW5s
aW5lIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlIE1hcmtlZEJsb2Nr
OjpIYW5kbGU6OnN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1N1YnNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9TdWJzcGFjZS5jcHAJKHJldmlzaW9uIDIxNzY0NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1N1YnNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsOSArNzcsOSBA
QCBTdWJzcGFjZTo6flN1YnNwYWNlKCkKIHsKIH0KIAotRnJlZUxpc3QgU3Vic3BhY2U6OmZpbmlz
aFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmIGJsb2NrLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpT
d2VlcE1vZGUgc3dlZXBNb2RlKQordm9pZCBTdWJzcGFjZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxv
Y2s6OkhhbmRsZSYgYmxvY2ssIEZyZWVMaXN0KiBmcmVlTGlzdCkKIHsKLSAgICByZXR1cm4gYmxv
Y2suZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2Uoc3dlZXBNb2RlLCBEZXN0cm95RnVuYygpKTsK
KyAgICBibG9jay5maW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZShmcmVlTGlzdCwgRGVzdHJveUZ1
bmMoKSk7CiB9CiAKIHZvaWQgU3Vic3BhY2U6OmRlc3Ryb3koVk0mIHZtLCBKU0NlbGwqIGNlbGwp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgJKHJldmlzaW9uIDIxNzY0
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTU0LDcgKzU0LDcgQEAgcHVibGljOgogICAgIAogICAgIC8vIFRoZSBwdXJwb3NlIG9m
IG92ZXJyaWRpbmcgdGhpcyBpcyB0byBzcGVjaWFsaXplIHRoZSBzd2VlcCBmb3IgeW91ciBkZXN0
cnVjdG9ycy4gVGhpcyB3b24ndAogICAgIC8vIGJlIGNhbGxlZCBmb3Igbm8tZGVzdHJ1Y3RvciBi
bG9ja3MuIFRoaXMgbXVzdCBjYWxsIE1hcmtlZEJsb2NrOjpmaW5pc2hTd2VlcEtub3dpbmdTdWJz
cGFjZS4KLSAgICB2aXJ0dWFsIEZyZWVMaXN0IGZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5k
bGUmLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcE1vZGUpOworICAgIHZpcnR1YWwgdm9pZCBm
aW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiwgRnJlZUxpc3QqKTsKICAgICAKICAgICAv
LyBUaGVzZSBnZXQgY2FsbGVkIGZvciBsYXJnZSBvYmplY3RzLgogICAgIHZpcnR1YWwgdm9pZCBk
ZXN0cm95KFZNJiwgSlNDZWxsKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9T
dWJzcGFjZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TdWJzcGFjZUlubGluZXMuaAkocmV2aXNpb24gMjE3NjQ2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvU3Vic3BhY2VJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2
LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiSlNDZWxsLmgiCi0jaW5jbHVkZSAiTWFy
a2VkQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oIgogI2lu
Y2x1ZGUgIk1hcmtlZEJsb2NrLmgiCiAjaW5jbHVkZSAiTWFya2VkU3BhY2UuaCIKICNpbmNsdWRl
ICJTdWJzcGFjZS5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhl
bHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5
SGVscGVycy5oCShyZXZpc2lvbiAyMTc2NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDU4LDcgKzE0NTgsNyBAQCBw
dWJsaWM6CiAgICAgICAgIEp1bXAgcG9wUGF0aDsKICAgICAgICAgSnVtcCBkb25lOwogICAgICAg
ICAKLSAgICAgICAgbG9hZDMyKEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBNYXJrZWRBbGxvY2F0b3I6
Om9mZnNldE9mRnJlZUxpc3QoKSArIE9CSkVDVF9PRkZTRVRPRihGcmVlTGlzdCwgcmVtYWluaW5n
KSksIHJlc3VsdEdQUik7CisgICAgICAgIGxvYWQzMihBZGRyZXNzKGFsbG9jYXRvckdQUiwgTWFy
a2VkQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZSZW1h
aW5pbmcoKSksIHJlc3VsdEdQUik7CiAgICAgICAgIHBvcFBhdGggPSBicmFuY2hUZXN0MzIoWmVy
bywgcmVzdWx0R1BSKTsKICAgICAgICAgaWYgKGFsbG9jYXRvcikKICAgICAgICAgICAgIGFkZDMy
KFRydXN0ZWRJbW0zMigtYWxsb2NhdG9yLT5jZWxsU2l6ZSgpKSwgcmVzdWx0R1BSLCBzY3JhdGNo
R1BSKTsKQEAgLTE0NzIsOCArMTQ3Miw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogICAgICAgICBuZWdQdHIocmVzdWx0R1BSKTsKLSAgICAgICAgc3RvcmUzMihzY3JhdGNo
R1BSLCBBZGRyZXNzKGFsbG9jYXRvckdQUiwgTWFya2VkQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVM
aXN0KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRnJlZUxpc3QsIHJlbWFpbmluZykpKTsKLSAgICAgICAg
QWRkcmVzcyBwYXlsb2FkRW5kQWRkciA9IEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBNYXJrZWRBbGxv
Y2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIE9CSkVDVF9PRkZTRVRPRihGcmVlTGlzdCwgcGF5
bG9hZEVuZCkpOworICAgICAgICBzdG9yZTMyKHNjcmF0Y2hHUFIsIEFkZHJlc3MoYWxsb2NhdG9y
R1BSLCBNYXJrZWRBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZz
ZXRPZlJlbWFpbmluZygpKSk7CisgICAgICAgIEFkZHJlc3MgcGF5bG9hZEVuZEFkZHIgPSBBZGRy
ZXNzKGFsbG9jYXRvckdQUiwgTWFya2VkQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBG
cmVlTGlzdDo6b2Zmc2V0T2ZQYXlsb2FkRW5kKCkpOwogICAgICAgICBpZiAoaXNYODYoKSkKICAg
ICAgICAgICAgIGFkZFB0cihwYXlsb2FkRW5kQWRkciwgcmVzdWx0R1BSKTsKICAgICAgICAgZWxz
ZSB7CkBAIC0xNDg1LDEzICsxNDg1LDIzIEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIHBv
cFBhdGgubGluayh0aGlzKTsKICAgICAgICAgCi0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhhbGxv
Y2F0b3JHUFIsIE1hcmtlZEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgT0JKRUNUX09G
RlNFVE9GKEZyZWVMaXN0LCBoZWFkKSksIHJlc3VsdEdQUik7Ci0gICAgICAgIHNsb3dQYXRoLmFw
cGVuZChicmFuY2hUZXN0UHRyKFplcm8sIHJlc3VsdEdQUikpOwotICAgICAgICAKLSAgICAgICAg
Ly8gVGhlIG9iamVjdCBpcyBoYWxmLWFsbG9jYXRlZDogd2UgaGF2ZSB3aGF0IHdlIGtub3cgaXMg
YSBmcmVzaCBvYmplY3QsIGJ1dAotICAgICAgICAvLyBpdCdzIHN0aWxsIG9uIHRoZSBHQydzIGZy
ZWUgbGlzdC4KLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdEdQUiksIHNjcmF0Y2hHUFIp
OwotICAgICAgICBzdG9yZVB0cihzY3JhdGNoR1BSLCBBZGRyZXNzKGFsbG9jYXRvckdQUiwgTWFy
a2VkQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRnJlZUxp
c3QsIGhlYWQpKSk7CisgICAgICAgIGxvYWQzMihBZGRyZXNzKGFsbG9jYXRvckdQUiwgTWFya2Vk
QWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZJbmRleCgp
KSwgcmVzdWx0R1BSKTsKKworICAgICAgICBpZiAoYWxsb2NhdG9yKQorICAgICAgICAgICAgbW92
ZShUcnVzdGVkSW1tUHRyKGFsbG9jYXRvci0+ZnJlZUxpc3QoKS5hZGRyZXNzT2ZMaXN0KCkpLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGFs
bG9jYXRvckdQUiwgTWFya2VkQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlz
dDo6b2Zmc2V0T2ZMaXN0KCkpLCBzY3JhdGNoR1BSKTsKKworICAgICAgICBzbG93UGF0aC5hcHBl
bmQoYnJhbmNoVGVzdDMyKFplcm8sIHJlc3VsdEdQUikpOworICAgICAgICBzdWIzMihUcnVzdGVk
SW1tMzIoMSksIHJlc3VsdEdQUik7CisgICAgICAgIHN0b3JlMzIocmVzdWx0R1BSLCBBZGRyZXNz
KGFsbG9jYXRvckdQUiwgTWFya2VkQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVl
TGlzdDo6b2Zmc2V0T2ZJbmRleCgpKSk7CisgICAgICAgIGxvYWQxNihCYXNlSW5kZXgoc2NyYXRj
aEdQUiwgcmVzdWx0R1BSLCBUaW1lc1R3byksIHJlc3VsdEdQUik7CisgICAgICAgIGlmIChpc1g4
NigpKQorICAgICAgICAgICAgYWRkUHRyKEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBNYXJrZWRBbGxv
Y2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZkJsb2NrKCkpLCBy
ZXN1bHRHUFIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhh
bGxvY2F0b3JHUFIsIE1hcmtlZEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxp
c3Q6Om9mZnNldE9mQmxvY2soKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgYWRkUHRyKHNj
cmF0Y2hHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGRvbmUu
bGluayh0aGlzKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlLmNwcAkocmV2
aXNpb24gMjE3NjQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVj
dGlibGVPYmplY3RTdWJzcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDkgKzUyLDkgQEAg
SlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZTo6fkpTRGVzdHJ1YwogewogfQogCi1GcmVlTGlz
dCBKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlOjpmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6
SGFuZGxlJiBoYW5kbGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwTW9kZSBzd2VlcE1vZGUp
Cit2b2lkIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2U6OmZpbmlzaFN3ZWVwKE1hcmtlZEJs
b2NrOjpIYW5kbGUmIGhhbmRsZSwgRnJlZUxpc3QqIGZyZWVMaXN0KQogewotICAgIHJldHVybiBo
YW5kbGUuZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2Uoc3dlZXBNb2RlLCBEZXN0cm95RnVuYygp
KTsKKyAgICBoYW5kbGUuZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2UoZnJlZUxpc3QsIERlc3Ry
b3lGdW5jKCkpOwogfQogCiB2b2lkIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2U6OmRlc3Ry
b3koVk0mIHZtLCBKU0NlbGwqIGNlbGwpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZS5oCShy
ZXZpc2lvbiAyMTc2NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Rlc3Ry
dWN0aWJsZU9iamVjdFN1YnNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAg
cHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3Bh
Y2UoQ1N0cmluZyBuYW1lLCBIZWFwJik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+
SlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZSgpOwogICAgIAotICAgIEZyZWVMaXN0IGZpbmlz
aFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcE1v
ZGUpIG92ZXJyaWRlOworICAgIHZvaWQgZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYs
IEZyZWVMaXN0Kikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkZXN0cm95KFZNJiwgSlNDZWxsKikgb3Zl
cnJpZGU7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21l
bnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5jcHAJ
KHJldmlzaW9uIDIxNzY0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2Vn
bWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDkg
KzUyLDkgQEAgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlOjp+SlNTZQogewogfQog
Ci1GcmVlTGlzdCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2U6OmZpbmlzaFN3ZWVw
KE1hcmtlZEJsb2NrOjpIYW5kbGUmIGhhbmRsZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBN
b2RlIHN3ZWVwTW9kZSkKK3ZvaWQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlOjpm
aW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiBoYW5kbGUsIEZyZWVMaXN0KiBmcmVlTGlz
dCkKIHsKLSAgICByZXR1cm4gaGFuZGxlLmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlKHN3ZWVw
TW9kZSwgRGVzdHJveUZ1bmMoKSk7CisgICAgaGFuZGxlLmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNw
YWNlKGZyZWVMaXN0LCBEZXN0cm95RnVuYygpKTsKIH0KIAogdm9pZCBKU1NlZ21lbnRlZFZhcmlh
YmxlT2JqZWN0U3Vic3BhY2U6OmRlc3Ryb3koVk0mIHZtLCBKU0NlbGwqIGNlbGwpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vi
c3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Nl
Z21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UuaAkocmV2aXNpb24gMjE3NjQ2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNw
YWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgcHVibGljOgogICAgIEpTX0VY
UE9SVF9QUklWQVRFIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZShDU3RyaW5nIG5h
bWUsIEhlYXAmKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIH5KU1NlZ21lbnRlZFZh
cmlhYmxlT2JqZWN0U3Vic3BhY2UoKTsKICAgICAKLSAgICBGcmVlTGlzdCBmaW5pc2hTd2VlcChN
YXJrZWRCbG9jazo6SGFuZGxlJiwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBNb2RlKSBvdmVy
cmlkZTsKKyAgICB2b2lkIGZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmLCBGcmVlTGlz
dCopIG92ZXJyaWRlOwogICAgIHZvaWQgZGVzdHJveShWTSYsIEpTQ2VsbCopIG92ZXJyaWRlOwog
fTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdTdWJzcGFj
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJp
bmdTdWJzcGFjZS5jcHAJKHJldmlzaW9uIDIxNzY0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU3RyaW5nU3Vic3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw5ICs1
Miw5IEBAIEpTU3RyaW5nU3Vic3BhY2U6On5KU1N0cmluZ1N1YnNwYWNlKCkKIHsKIH0KIAotRnJl
ZUxpc3QgSlNTdHJpbmdTdWJzcGFjZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYg
aGFuZGxlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcE1vZGUgc3dlZXBNb2RlKQordm9pZCBK
U1N0cmluZ1N1YnNwYWNlOjpmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiBoYW5kbGUs
IEZyZWVMaXN0KiBmcmVlTGlzdCkKIHsKLSAgICByZXR1cm4gaGFuZGxlLmZpbmlzaFN3ZWVwS25v
d2luZ1N1YnNwYWNlKHN3ZWVwTW9kZSwgRGVzdHJveUZ1bmMoKSk7CisgICAgaGFuZGxlLmZpbmlz
aFN3ZWVwS25vd2luZ1N1YnNwYWNlKGZyZWVMaXN0LCBEZXN0cm95RnVuYygpKTsKIH0KIAogdm9p
ZCBKU1N0cmluZ1N1YnNwYWNlOjpkZXN0cm95KFZNJiB2bSwgSlNDZWxsKiBjZWxsKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdTdWJzcGFjZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nU3Vic3BhY2UuaAko
cmV2aXNpb24gMjE3NjQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJp
bmdTdWJzcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIHB1YmxpYzoKICAg
ICBKU19FWFBPUlRfUFJJVkFURSBKU1N0cmluZ1N1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVhcCYp
OwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgfkpTU3RyaW5nU3Vic3BhY2UoKTsKICAg
ICAKLSAgICBGcmVlTGlzdCBmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiwgTWFya2Vk
QmxvY2s6OkhhbmRsZTo6U3dlZXBNb2RlKSBvdmVycmlkZTsKKyAgICB2b2lkIGZpbmlzaFN3ZWVw
KE1hcmtlZEJsb2NrOjpIYW5kbGUmLCBGcmVlTGlzdCopIG92ZXJyaWRlOwogICAgIHZvaWQgZGVz
dHJveShWTSYsIEpTQ2VsbCopIG92ZXJyaWRlOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJs
b2NrU3Vic3BhY2UuY3BwCShyZXZpc2lvbiAyMTc2NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01Niw5ICs1Niw5IEBAIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZTo6fkpT
V2ViQXMKIHsKIH0KIAotRnJlZUxpc3QgSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlOjpm
aW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiBoYW5kbGUsIE1hcmtlZEJsb2NrOjpIYW5k
bGU6OlN3ZWVwTW9kZSBzd2VlcE1vZGUpCit2b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJz
cGFjZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYgaGFuZGxlLCBGcmVlTGlzdCog
ZnJlZUxpc3QpCiB7Ci0gICAgcmV0dXJuIGhhbmRsZS5maW5pc2hTd2VlcEtub3dpbmdTdWJzcGFj
ZShzd2VlcE1vZGUsIERlc3Ryb3lGdW5jKCkpOworICAgIGhhbmRsZS5maW5pc2hTd2VlcEtub3dp
bmdTdWJzcGFjZShmcmVlTGlzdCwgRGVzdHJveUZ1bmMoKSk7CiB9CiAKIHZvaWQgSlNXZWJBc3Nl
bWJseUNvZGVCbG9ja1N1YnNwYWNlOjpkZXN0cm95KFZNJiB2bSwgSlNDZWxsKiBjZWxsKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1
YnNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmgJKHJldmlzaW9uIDIxNzY0NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIHB1YmxpYzoKICAgICBKU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrU3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJik7CiAgICAgdmlydHVhbCB+
SlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlKCk7CiAgICAgCi0gICAgRnJlZUxpc3QgZmlu
aXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVw
TW9kZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxl
JiwgRnJlZUxpc3QqKSBvdmVycmlkZTsKICAgICB2b2lkIGRlc3Ryb3koVk0mLCBKU0NlbGwqKSBv
dmVycmlkZTsKIH07CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>311733</attachid>
            <date>2017-06-01 11:22:54 -0700</date>
            <delta_ts>2017-06-01 15:38:55 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>55723</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjE3NjYyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMCBA
QAorMjAxNy0wNi0wMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEdDIHNob3VsZCBrZWVwIGl0cyBmcmVlIGxpc3Qgb24gdGhlIHNpZGUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3Mjc5MworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgUHJldmlvdXNseSwgb3Vy
IGJ1bXAnbidwb3AgYWxsb2NhdG9yIHdvdWxkIHVzZSBhIGNvbnZlbnRpb25hbCBsaW5rZWQtbGlz
dCBmb3IgdGhlIGZyZWUtbGlzdC4KKyAgICAgICAgVGhlIGxpbmtlZC1saXN0IHdvdWxkIGJlIHRo
cmVhZGVkIHRocm91Z2ggZnJlZSBtZW1vcnksIGFzIGlzIHRoZSB1c3VhbCBjb252ZW50aW9uLgor
ICAgICAgICAKKyAgICAgICAgSG93ZXZlciwgaXQncyBxdWl0ZSBhIGJpdCBtb3JlIHNhbmUgdG8g
aGF2ZSB0aGUgZnJlZS1saXN0IHJlc2lkZSBzb21ld2hlcmUgb3RoZXIgdGhhbiB0aGUgZnJlZQor
ICAgICAgICBtZW1vcnkuIFRoaXMgcHV0cyB0aGUgZnJlZS1saXN0IGluIGFuIGFycmF5LiBJdCdz
IGEgc3RhY2sgb2YgMTYtYml0IG9mZnNldHMgaW50byB0aGUgYmxvY2suCisgICAgICAgIFRoZSBh
bGxvY2F0b3IgcG9wcyBhbiBvZmZzZXQgb2ZmIHRoZSBzdGFjaywgYW5kIGFkZHMgaXQgdG8gdGhl
IGN1cnJlbnQgYmxvY2sgcG9pbnRlci4gVGhpcworICAgICAgICBpc24ndCBhbnkgc2xvd2VyIHRo
YW4gdGhlIG9sZCBsaW5rZWQtbGlzdCBmcmVlLWxpc3QsIGFuZCBpdCBtYWtlcyB3ZWlyZCBpc3N1
ZXMgZWFzaWVyIHRvIGRlYnVnLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBoZWFwL0ZyZWVMaXN0LmNwcDoKKyAgICAgICAg
KEpTQzo6RnJlZUxpc3Q6OkZyZWVMaXN0KToKKyAgICAgICAgKEpTQzo6RnJlZUxpc3Q6On5GcmVl
TGlzdCk6CisgICAgICAgIChKU0M6OkZyZWVMaXN0OjpjbGVhcik6CisgICAgICAgIChKU0M6OkZy
ZWVMaXN0Ojppbml0aWFsaXplTGlzdCk6CisgICAgICAgIChKU0M6OkZyZWVMaXN0Ojppbml0aWFs
aXplQnVtcCk6CisgICAgICAgIChKU0M6OkZyZWVMaXN0Ojpjb250YWlucyk6CisgICAgICAgIChK
U0M6OkZyZWVMaXN0OjpkdW1wKToKKyAgICAgICAgKiBoZWFwL0ZyZWVMaXN0Lmg6CisgICAgICAg
IChKU0M6OkZyZWVMaXN0OjphbGxvY2F0aW9uV2lsbEZhaWwpOgorICAgICAgICAoSlNDOjpGcmVl
TGlzdDo6b3JpZ2luYWxTaXplKToKKyAgICAgICAgKEpTQzo6RnJlZUxpc3Q6OmFkZHJlc3NPZkxp
c3QpOgorICAgICAgICAoSlNDOjpGcmVlTGlzdDo6b2Zmc2V0T2ZCbG9jayk6CisgICAgICAgIChK
U0M6OkZyZWVMaXN0OjpvZmZzZXRPZkxpc3QpOgorICAgICAgICAoSlNDOjpGcmVlTGlzdDo6b2Zm
c2V0T2ZJbmRleCk6CisgICAgICAgIChKU0M6OkZyZWVMaXN0OjpvZmZzZXRPZlBheWxvYWRFbmQp
OgorICAgICAgICAoSlNDOjpGcmVlTGlzdDo6b2Zmc2V0T2ZSZW1haW5pbmcpOgorICAgICAgICAo
SlNDOjpGcmVlTGlzdDo6b2Zmc2V0T2ZPcmlnaW5hbFNpemUpOgorICAgICAgICAoSlNDOjpGcmVl
TGlzdDo6RnJlZUxpc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpGcmVlTGlzdDo6bGlzdCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkZyZWVMaXN0OjpidW1wKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6RnJlZUxpc3Q6Om9wZXJhdG9yPT0pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpG
cmVlTGlzdDo6b3BlcmF0b3IhPSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkZyZWVMaXN0Ojpv
cGVyYXRvciBib29sKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL0ZyZWVMaXN0SW5saW5lcy5o
OiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RnJlZUxpc3Q6OmFkZEZyZWVDZWxsKToKKyAgICAgICAg
KEpTQzo6RnJlZUxpc3Q6OmFsbG9jYXRlKToKKyAgICAgICAgKEpTQzo6RnJlZUxpc3Q6OmZvckVh
Y2gpOgorICAgICAgICAoSlNDOjpGcmVlTGlzdDo6dG9PZmZzZXQpOgorICAgICAgICAoSlNDOjpG
cmVlTGlzdDo6ZnJvbU9mZnNldCk6CisgICAgICAgICogaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIu
Y3BwOgorICAgICAgICAoSlNDOjpJbmNyZW1lbnRhbFN3ZWVwZXI6OnN3ZWVwTmV4dEJsb2NrKToK
KyAgICAgICAgKiBoZWFwL01hcmtlZEFsbG9jYXRvci5jcHA6CisgICAgICAgIChKU0M6Ok1hcmtl
ZEFsbG9jYXRvcjo6TWFya2VkQWxsb2NhdG9yKToKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2Nh
dG9yOjpkaWRDb25zdW1lRnJlZUxpc3QpOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6
OnRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3RpbmcpOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxv
Y2F0b3I6OnRyeUFsbG9jYXRlSW4pOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OmFs
bG9jYXRlU2xvd0Nhc2VJbXBsKToKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjpzdG9w
QWxsb2NhdGluZyk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6cHJlcGFyZUZvckFs
bG9jYXRpb24pOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OnJlc3VtZUFsbG9jYXRp
bmcpOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OnN3ZWVwKToKKyAgICAgICAgKEpT
Qzo6TWFya2VkQWxsb2NhdG9yOjpzZXRGcmVlTGlzdCk6IERlbGV0ZWQuCisgICAgICAgICogaGVh
cC9NYXJrZWRBbGxvY2F0b3IuaDoKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjpmcmVl
TGlzdCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6aXNGcmVlTGlzdGVkQ2VsbCk6
IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9NYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmg6CisgICAg
ICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6aXNGcmVlTGlzdGVkQ2VsbCk6CisgICAgICAgIChK
U0M6Ok1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGUpOgorICAgICAgICAoSlNDOjpNYXJrZWRB
bGxvY2F0b3I6OmFsbG9jYXRlKToKKyAgICAgICAgKiBoZWFwL01hcmtlZEJsb2NrLmNwcDoKKyAg
ICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OkhhbmRsZTo6c3RvcEFsbG9jYXRpbmcpOgorICAgICAg
ICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjpsYXN0Q2hhbmNlVG9GaW5hbGl6ZSk6CisgICAg
ICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6OnJlc3VtZUFsbG9jYXRpbmcpOgorICAgICAg
ICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjp6YXApOgorICAgICAgICAoSlNDOjpNYXJrZWRC
bG9jazo6SGFuZGxlOjpzd2VlcCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6
OmlzRnJlZUxpc3RlZENlbGwpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjpm
b3JFYWNoRnJlZUNlbGwpOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvTWFya2VkQmxvY2suaDoK
KyAgICAgICAgKiBoZWFwL01hcmtlZEJsb2NrSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpNYXJr
ZWRCbG9jazo6SGFuZGxlOjpzcGVjaWFsaXplZFN3ZWVwKToKKyAgICAgICAgKEpTQzo6TWFya2Vk
QmxvY2s6OkhhbmRsZTo6ZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2UpOgorICAgICAgICAoSlND
OjpNYXJrZWRCbG9jazo6SGFuZGxlOjppc0ZyZWVMaXN0ZWRDZWxsKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBoZWFwL1N1YnNwYWNlLmNwcDoKKyAgICAgICAgKEpTQzo6U3Vic3BhY2U6OmZpbmlzaFN3
ZWVwKToKKyAgICAgICAgKiBoZWFwL1N1YnNwYWNlLmg6CisgICAgICAgICogaml0L0Fzc2VtYmx5
SGVscGVycy5oOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRBbGxvY2F0ZVdp
dGhOb25OdWxsQWxsb2NhdG9yKToKKyAgICAgICAgKiBydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0U3Vic3BhY2UuY3BwOgorICAgICAgICAoSlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNw
YWNlOjpmaW5pc2hTd2VlcCk6CisgICAgICAgICogcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVj
dFN1YnNwYWNlLmg6CisgICAgICAgICogcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0
U3Vic3BhY2UuY3BwOgorICAgICAgICAoSlNDOjpKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vi
c3BhY2U6OmZpbmlzaFN3ZWVwKToKKyAgICAgICAgKiBydW50aW1lL0pTU2VnbWVudGVkVmFyaWFi
bGVPYmplY3RTdWJzcGFjZS5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmdTdWJzcGFjZS5j
cHA6CisgICAgICAgIChKU0M6OkpTU3RyaW5nU3Vic3BhY2U6OmZpbmlzaFN3ZWVwKToKKyAgICAg
ICAgKiBydW50aW1lL0pTU3RyaW5nU3Vic3BhY2UuaDoKKyAgICAgICAgKiB3YXNtL2pzL0pTV2Vi
QXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5jcHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1i
bHlDb2RlQmxvY2tTdWJzcGFjZTo6ZmluaXNoU3dlZXApOgorICAgICAgICAqIHdhc20vanMvSlNX
ZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmg6CisKIDIwMTctMDYtMDEgIFRvbWFzIFBvcGVs
YSAgPHRwb3BlbGFAcmVkaGF0LmNvbT4sIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgog
CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCkgaW4gSW5mZXJyZWRUeXBlOjpr
aW5kRm9yRmxhZ3MoKSBvbiBCaWctRW5kaWFucwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDIxNzY0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01MDEs
NiArNTAxLDcgQEAKIAkJMEY2NEIyNzkxQTc5NTdCMjAwNkU0RTY2IC8qIENhbGxFZGdlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjRCMjc3MUE3
OTU3QjIwMDZFNEU2NiAvKiBDYWxsRWRnZS5jcHAgKi87IH07CiAJCTBGNjRCMjdBMUE3OTU3QjIw
MDZFNEU2NiAvKiBDYWxsRWRnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY2NEIyNzgxQTc5NTdCMjAwNkU0RTY2IC8qIENhbGxFZGdlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY2NEVBRjMxQzRF
Q0QwNjAwNjIxRTlCIC8qIEFpckFyZ0lubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjRFQUYyMUM0RUNEMDYwMDYyMUU5QiAvKiBBaXJBcmdJ
bmxpbmVzLmggKi87IH07CisJCTBGNjU4NUUxMUVFMDgwNUEwMDk1MTc2RCAvKiBGcmVlTGlzdElu
bGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NjU4NUUwMUVFMDgwNTcwMDk1MTc2RCAvKiBGcmVlTGlzdElubGluZXMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjY2MEUzNzFFMDUxN0I5MDAz
MTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NjBFMzMxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdD
b25zdHJhaW50LmNwcCAqLzsgfTsKIAkJMEY2NjBFMzgxRTA1MTdCQjAwMzE0NjJDIC8qIE1hcmtp
bmdDb25zdHJhaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjY2MEUzNDFFMDUxN0I3MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjY2MEUzOTFF
MDUxN0JGMDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnRTZXQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NjBFMzUxRTA1MTdCNzAwMzE0NjJD
IC8qIE1hcmtpbmdDb25zdHJhaW50U2V0LmNwcCAqLzsgfTsKQEAgLTMwNzcsNiArMzA3OCw3IEBA
CiAJCTBGNjRCMjc3MUE3OTU3QjIwMDZFNEU2NiAvKiBDYWxsRWRnZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWxsRWRnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGNjRCMjc4MUE3OTU3QjIwMDZFNEU2NiAvKiBDYWxsRWRnZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWxsRWRnZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjY0RUFGMjFDNEVDRDA2MDA2MjFFOUIgLyogQWlyQXJnSW5saW5lcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJBcmdJbmxpbmVzLmg7IHBhdGgg
PSBiMy9haXIvQWlyQXJnSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjY1ODVFMDFFRTA4MDU3MDA5NTE3NkQgLyogRnJlZUxpc3RJbmxpbmVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZyZWVMaXN0SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjY2MEUzMzFFMDUxN0I3MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFp
bnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFya2luZ0NvbnN0
cmFpbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY2MEUzNDFFMDUxN0I3
MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTWFya2luZ0NvbnN0cmFpbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY2NjBFMzUxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50U2V0LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hcmtpbmdDb25zdHJhaW50U2V0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTYwMTksNiArNjAyMSw3IEBACiAJ
CQkJMkE4MzYzODQxOEQ3RDBFRTAwMDBFQkNDIC8qIEVkZW5HQ0FjdGl2aXR5Q2FsbGJhY2suaCAq
LywKIAkJCQkwRjU1MTNBNzFENUE2OENCMDBDMzJCRDggLyogRnJlZUxpc3QuY3BwICovLAogCQkJ
CTBGNTUxM0E1MUQ1QTY4MkEwMEMzMkJEOCAvKiBGcmVlTGlzdC5oICovLAorCQkJCTBGNjU4NUUw
MUVFMDgwNTcwMDk1MTc2RCAvKiBGcmVlTGlzdElubGluZXMuaCAqLywKIAkJCQkyQTgzNjM4NzE4
RDdEMEZFMDAwMEVCQ0MgLyogRnVsbEdDQWN0aXZpdHlDYWxsYmFjay5jcHAgKi8sCiAJCQkJMkE4
MzYzODgxOEQ3RDBGRTAwMDBFQkNDIC8qIEZ1bGxHQ0FjdGl2aXR5Q2FsbGJhY2suaCAqLywKIAkJ
CQkyQUFDRTYzQTE4Q0E1QTAzMDBFRDAxOTEgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCAqLywK
QEAgLTg2NjEsNiArODY2NCw3IEBACiAJCQkJMEYyMzVCRUUxNzE3OEU3MzAwNjkwQzdGIC8qIERG
R09TUkV4aXRQcmVwYXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQzYzQjcxRTYzNDNF
RDAwQzEzODM5IC8qIEIzQXRvbWljVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjIzNzk4
MUFFNDVDQTcwMEQ0MDJFQSAvKiBERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2UuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGNjU4NUUxMUVFMDgwNUEwMDk1MTc2RCAvKiBGcmVlTGlzdElubGluZXMuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGRkZDOTVDMTRFRjkwQUYwMEM3MjUzMiAvKiBERkdQaGFzZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMzdDNzM4RDIxRURCNTZFNDAwM0YyQjBCIC8qIFBhcnNlSW50
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCOUNFQjE5RDBCQTdEMDBCMUQxQjUgLyogREZHUGhp
Q2hpbGRyZW4uaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvRnJlZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0ZyZWVMaXN0LmNwcAkocmV2aXNpb24gMjE3NjQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvRnJlZUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwyOSArMjYsNzQgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGcmVlTGlzdC5oIgogCisjaW5jbHVkZSAiRnJl
ZUxpc3RJbmxpbmVzLmgiCisjaW5jbHVkZSAiTWFya2VkQmxvY2suaCIKKyNpbmNsdWRlIDx3dGYv
Q29tbWFQcmludGVyLmg+CisKIG5hbWVzcGFjZSBKU0MgewogCi1ib29sIEZyZWVMaXN0Ojpjb250
YWlucyhjb25zdCB2b2lkKiB0YXJnZXQpIGNvbnN0CitGcmVlTGlzdDo6RnJlZUxpc3QodW5zaWdu
ZWQgY2VsbFNpemUpCisgICAgOiBtX2NlbGxTaXplKGNlbGxTaXplKQogewotICAgIGlmIChyZW1h
aW5pbmcpIHsKLSAgICAgICAgY29uc3Qgdm9pZCogc3RhcnQgPSAocGF5bG9hZEVuZCAtIHJlbWFp
bmluZyk7Ci0gICAgICAgIGNvbnN0IHZvaWQqIGVuZCA9IHBheWxvYWRFbmQ7CisgICAgc3RhdGlj
X2Fzc2VydChNYXJrZWRCbG9jazo6YmxvY2tTaXplIDw9ICgxdSA8PCAoc2l6ZW9mKEZyZWVPZmZz
ZXQpICogOCkpLCAiRnJlZUxpc3QgYXNzdW1lcyB0aGF0IEZyZWVPZmZzZXQgaXMgYmlnIGVub3Vn
aCB0byBleHByZXNzIGFsbCBwb3NzaWJsZSBibG9jayBvZmZzZXRzIik7CisgICAgCisgICAgbV9s
aXN0U2l6ZSA9IE1hcmtlZEJsb2NrOjpibG9ja1NpemUgLyBjZWxsU2l6ZTsKKyAgICBtX2xpc3Qg
PSBzdGQ6Om1ha2VfdW5pcXVlPEZyZWVPZmZzZXRbXT4obV9saXN0U2l6ZSk7Cit9CisKK0ZyZWVM
aXN0Ojp+RnJlZUxpc3QoKQoreworfQorCit2b2lkIEZyZWVMaXN0OjpjbGVhcigpCit7CisgICAg
bV9ibG9jayA9IG51bGxwdHI7CisgICAgbV9pbmRleCA9IDA7CisgICAgbV9wYXlsb2FkRW5kID0g
bnVsbHB0cjsKKyAgICBtX3JlbWFpbmluZyA9IDA7CisgICAgbV9vcmlnaW5hbFNpemUgPSAwOwor
fQorCit2b2lkIEZyZWVMaXN0Ojppbml0aWFsaXplTGlzdChNYXJrZWRCbG9jayogYmxvY2spCit7
CisgICAgbV9ibG9jayA9IGJsb2NrOworICAgIG1faW5kZXggPSAwOworICAgIG1fcGF5bG9hZEVu
ZCA9IG51bGxwdHI7CisgICAgbV9yZW1haW5pbmcgPSAwOworICAgIG1fb3JpZ2luYWxTaXplID0g
MDsKK30KKwordm9pZCBGcmVlTGlzdDo6aW5pdGlhbGl6ZUJ1bXAoY2hhciogcGF5bG9hZEVuZCwg
dW5zaWduZWQgcmVtYWluaW5nKQoreworICAgIG1fYmxvY2sgPSBudWxscHRyOworICAgIG1faW5k
ZXggPSAwOworICAgIG1fcGF5bG9hZEVuZCA9IHBheWxvYWRFbmQ7CisgICAgbV9yZW1haW5pbmcg
PSByZW1haW5pbmc7CisgICAgbV9vcmlnaW5hbFNpemUgPSByZW1haW5pbmc7Cit9CisKK2Jvb2wg
RnJlZUxpc3Q6OmNvbnRhaW5zKEhlYXBDZWxsKiB0YXJnZXQpIGNvbnN0Cit7CisgICAgaWYgKG1f
cmVtYWluaW5nKSB7CisgICAgICAgIGNvbnN0IHZvaWQqIHN0YXJ0ID0gKG1fcGF5bG9hZEVuZCAt
IG1fcmVtYWluaW5nKTsKKyAgICAgICAgY29uc3Qgdm9pZCogZW5kID0gbV9wYXlsb2FkRW5kOwog
ICAgICAgICByZXR1cm4gKHN0YXJ0IDw9IHRhcmdldCkgJiYgKHRhcmdldCA8IGVuZCk7CiAgICAg
fQogCi0gICAgRnJlZUNlbGwqIGNhbmRpZGF0ZSA9IGhlYWQ7Ci0gICAgd2hpbGUgKGNhbmRpZGF0
ZSkgewotICAgICAgICBpZiAoY2FuZGlkYXRlID09IHRhcmdldCkKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSBtX2luZGV4OyBpLS07KSB7CisgICAgICAgIGlmIChmcm9tT2Zmc2V0KG1fbGlzdFtpXSkg
PT0gdGFyZ2V0KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGNhbmRpZGF0ZSA9
IGNhbmRpZGF0ZS0+bmV4dDsKICAgICB9Ci0KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHZvaWQg
RnJlZUxpc3Q6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKLSAgICBvdXQucHJpbnQo
IntoZWFkID0gIiwgUmF3UG9pbnRlcihoZWFkKSwgIiwgcGF5bG9hZEVuZCA9ICIsIFJhd1BvaW50
ZXIocGF5bG9hZEVuZCksICIsIHJlbWFpbmluZyA9ICIsIHJlbWFpbmluZywgIiwgb3JpZ2luYWxT
aXplID0gIiwgb3JpZ2luYWxTaXplLCAifSIpOworICAgIG91dC5wcmludCgie2Jsb2NrID0gIiwg
UmF3UG9pbnRlcihtX2Jsb2NrKSwgIiwgbGlzdCA9IFsiKTsKKyAgICBDb21tYVByaW50ZXIgY29t
bWE7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1faW5kZXg7ICsraSkKKyAgICAgICAg
b3V0LnByaW50KGNvbW1hLCBtX2xpc3RbaV0pOworICAgIG91dC5wcmludCgiXSwgaW5kZXggPSAi
LCBtX2luZGV4LCAiLCBwYXlsb2FkRW5kID0gIiwgUmF3UG9pbnRlcihtX3BheWxvYWRFbmQpLCAi
LCByZW1haW5pbmcgPSAiLCBtX3JlbWFpbmluZywgIiwgb3JpZ2luYWxTaXplID0gIiwgbV9vcmln
aW5hbFNpemUsICJ9Iik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvRnJlZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9GcmVlTGlzdC5oCShyZXZpc2lvbiAyMTc2NDYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9GcmVlTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2OCArMjUs
NjYgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNp
bmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKLXN0cnVjdCBG
cmVlQ2VsbCB7Ci0gICAgRnJlZUNlbGwqIG5leHQ7Ci19OwotICAgICAgICAKLS8vIFRoaXMgcmVw
cmVzZW50YXRpb24gb2YgYSBGcmVlTGlzdCBpcyBjb252ZW5pZW50IGZvciB0aGUgTWFya2VkQWxs
b2NhdG9yLgotCi1zdHJ1Y3QgRnJlZUxpc3QgewotICAgIEZyZWVDZWxsKiBoZWFkIHsgbnVsbHB0
ciB9OwotICAgIGNoYXIqIHBheWxvYWRFbmQgeyBudWxscHRyIH07Ci0gICAgdW5zaWduZWQgcmVt
YWluaW5nIHsgMCB9OwotICAgIHVuc2lnbmVkIG9yaWdpbmFsU2l6ZSB7IDAgfTsKLSAgICAKLSAg
ICBGcmVlTGlzdCgpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBzdGF0aWMgRnJlZUxpc3QgbGlz
dChGcmVlQ2VsbCogaGVhZCwgdW5zaWduZWQgYnl0ZXMpCi0gICAgewotICAgICAgICBGcmVlTGlz
dCByZXN1bHQ7Ci0gICAgICAgIHJlc3VsdC5oZWFkID0gaGVhZDsKLSAgICAgICAgcmVzdWx0LnJl
bWFpbmluZyA9IDA7Ci0gICAgICAgIHJlc3VsdC5vcmlnaW5hbFNpemUgPSBieXRlczsKLSAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgCi0gICAgc3RhdGljIEZyZWVMaXN0IGJ1bXAo
Y2hhciogcGF5bG9hZEVuZCwgdW5zaWduZWQgcmVtYWluaW5nKQotICAgIHsKLSAgICAgICAgRnJl
ZUxpc3QgcmVzdWx0OwotICAgICAgICByZXN1bHQucGF5bG9hZEVuZCA9IHBheWxvYWRFbmQ7Ci0g
ICAgICAgIHJlc3VsdC5yZW1haW5pbmcgPSByZW1haW5pbmc7Ci0gICAgICAgIHJlc3VsdC5vcmln
aW5hbFNpemUgPSByZW1haW5pbmc7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAg
IAotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGcmVlTGlzdCYgb3RoZXIpIGNvbnN0Ci0gICAg
ewotICAgICAgICByZXR1cm4gaGVhZCA9PSBvdGhlci5oZWFkCi0gICAgICAgICAgICAmJiBwYXls
b2FkRW5kID09IG90aGVyLnBheWxvYWRFbmQKLSAgICAgICAgICAgICYmIHJlbWFpbmluZyA9PSBv
dGhlci5yZW1haW5pbmcKLSAgICAgICAgICAgICYmIG9yaWdpbmFsU2l6ZSA9PSBvdGhlci5vcmln
aW5hbFNpemU7Ci0gICAgfQotICAgIAotICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGcmVlTGlz
dCYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7
Ci0gICAgfQotICAgIAotICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdAotICAgIHsK
LSAgICAgICAgcmV0dXJuICp0aGlzICE9IEZyZWVMaXN0KCk7Ci0gICAgfQorY2xhc3MgSGVhcENl
bGw7CitjbGFzcyBNYXJrZWRCbG9jazsKIAotICAgIGJvb2wgY29udGFpbnMoY29uc3Qgdm9pZCog
dGFyZ2V0KSBjb25zdDsKLQotICAgIGJvb2wgYWxsb2NhdGlvbldpbGxGYWlsKCkgY29uc3QgeyBy
ZXR1cm4gIWhlYWQgJiYgIXJlbWFpbmluZzsgfQorY2xhc3MgRnJlZUxpc3QgeworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKEZyZWVMaXN0KTsKKyAgICAKK3B1YmxpYzoKKyAgICB0eXBlZGVmIHVp
bnQxNl90IEZyZWVPZmZzZXQ7CisgICAgCisgICAgRnJlZUxpc3QodW5zaWduZWQgY2VsbFNpemUp
OworICAgIH5GcmVlTGlzdCgpOworICAgIAorICAgIHZvaWQgY2xlYXIoKTsKKyAgICAKKyAgICB2
b2lkIGluaXRpYWxpemVMaXN0KE1hcmtlZEJsb2NrKik7CisgICAgdm9pZCBhZGRGcmVlQ2VsbChI
ZWFwQ2VsbCopOworICAgIAorICAgIHZvaWQgaW5pdGlhbGl6ZUJ1bXAoY2hhciogcGF5bG9hZEVu
ZCwgdW5zaWduZWQgcmVtYWluaW5nKTsKKyAgICAKKyAgICBib29sIGFsbG9jYXRpb25XaWxsRmFp
bCgpIGNvbnN0IHsgcmV0dXJuICFtX2luZGV4ICYmICFtX3JlbWFpbmluZzsgfQogICAgIGJvb2wg
YWxsb2NhdGlvbldpbGxTdWNjZWVkKCkgY29uc3QgeyByZXR1cm4gIWFsbG9jYXRpb25XaWxsRmFp
bCgpOyB9CiAgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICBIZWFwQ2VsbCog
YWxsb2NhdGUoY29uc3QgRnVuYyYgc2xvd1BhdGgpOworICAgIAorICAgIGJvb2wgY29udGFpbnMo
SGVhcENlbGwqKSBjb25zdDsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAg
IHZvaWQgZm9yRWFjaChjb25zdCBGdW5jJikgY29uc3Q7CisgICAgCisgICAgdW5zaWduZWQgb3Jp
Z2luYWxTaXplKCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW5hbFNpemU7IH0KKyAgICAKKyAgICBG
cmVlT2Zmc2V0KiBhZGRyZXNzT2ZMaXN0KCkgY29uc3QgeyByZXR1cm4gbV9saXN0LmdldCgpOyB9
CisKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQmxvY2soKSB7IHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoRnJlZUxpc3QsIG1fYmxvY2spOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZz
ZXRPZkxpc3QoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRnJlZUxpc3QsIG1fbGlzdCk7IH0K
KyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW5kZXgoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoRnJlZUxpc3QsIG1faW5kZXgpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRP
ZlBheWxvYWRFbmQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRnJlZUxpc3QsIG1fcGF5bG9h
ZEVuZCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mUmVtYWluaW5nKCkgeyByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKEZyZWVMaXN0LCBtX3JlbWFpbmluZyk7IH0KKyAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mT3JpZ2luYWxTaXplKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KEZyZWVMaXN0LCBtX29yaWdpbmFsU2l6ZSk7IH0KKyAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgRnJlZU9mZnNldCB0b09mZnNldChI
ZWFwQ2VsbCopIGNvbnN0OworICAgIEhlYXBDZWxsKiBmcm9tT2Zmc2V0KEZyZWVPZmZzZXQpIGNv
bnN0OworICAgIAorICAgIHVuc2lnbmVkIG1fY2VsbFNpemUgeyAwIH07CisgICAgTWFya2VkQmxv
Y2sqIG1fYmxvY2sgeyBudWxscHRyIH07CisgICAgc3RkOjp1bmlxdWVfcHRyPEZyZWVPZmZzZXRb
XT4gbV9saXN0OworICAgIHVuc2lnbmVkIG1fbGlzdFNpemUgeyAwIH07CisgICAgdW5zaWduZWQg
bV9pbmRleCB7IDAgfTsKKyAgICBjaGFyKiBtX3BheWxvYWRFbmQgeyBudWxscHRyIH07CisgICAg
dW5zaWduZWQgbV9yZW1haW5pbmcgeyAwIH07CisgICAgdW5zaWduZWQgbV9vcmlnaW5hbFNpemUg
eyAwIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0ZyZWVMaXN0SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0ZyZWVMaXN0SW5saW5lcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0ZyZWVMaXN0SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJGcmVlTGlzdC5oIgorI2luY2x1ZGUgIk1hcmtl
ZEJsb2NrLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitpbmxpbmUgdm9pZCBGcmVlTGlzdDo6YWRk
RnJlZUNlbGwoSGVhcENlbGwqIGNlbGwpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9pbmRleCA8
IG1fbGlzdFNpemUpOworICAgIG1fbGlzdFttX2luZGV4KytdID0gdG9PZmZzZXQoY2VsbCk7Cisg
ICAgbV9vcmlnaW5hbFNpemUgKz0gbV9jZWxsU2l6ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
RnVuYz4KK0hlYXBDZWxsKiBGcmVlTGlzdDo6YWxsb2NhdGUoY29uc3QgRnVuYyYgc2xvd1BhdGgp
Cit7CisgICAgdW5zaWduZWQgcmVtYWluaW5nID0gbV9yZW1haW5pbmc7CisgICAgaWYgKHJlbWFp
bmluZykgeworICAgICAgICB1bnNpZ25lZCBjZWxsU2l6ZSA9IG1fY2VsbFNpemU7CisgICAgICAg
IHJlbWFpbmluZyAtPSBjZWxsU2l6ZTsKKyAgICAgICAgbV9yZW1haW5pbmcgPSByZW1haW5pbmc7
CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPihtX3BheWxvYWRFbmQgLSBy
ZW1haW5pbmcgLSBjZWxsU2l6ZSk7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGluZGV4ID0g
bV9pbmRleDsKKyAgICBpZiAoVU5MSUtFTFkoIWluZGV4KSkKKyAgICAgICAgcmV0dXJuIHNsb3dQ
YXRoKCk7CisgICAgCisgICAgLS1pbmRleDsKKyAgICBtX2luZGV4ID0gaW5kZXg7CisgICAgcmV0
dXJuIGZyb21PZmZzZXQobV9saXN0W2luZGV4XSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1
bmM+Cit2b2lkIEZyZWVMaXN0Ojpmb3JFYWNoKGNvbnN0IEZ1bmMmIGZ1bmMpIGNvbnN0Cit7Cisg
ICAgaWYgKG1fcmVtYWluaW5nKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgcmVtYWluaW5nID0g
bV9yZW1haW5pbmc7IHJlbWFpbmluZzsgcmVtYWluaW5nIC09IG1fY2VsbFNpemUpCisgICAgICAg
ICAgICBmdW5jKGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KG1fcGF5bG9hZEVuZCAtIHJlbWFpbmlu
ZykpOworICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXg7IGkt
LTspCisgICAgICAgICAgICBmdW5jKGZyb21PZmZzZXQobV9saXN0W2ldKSk7CisgICAgfQorfQor
CitpbmxpbmUgRnJlZUxpc3Q6OkZyZWVPZmZzZXQgRnJlZUxpc3Q6OnRvT2Zmc2V0KEhlYXBDZWxs
KiBjZWxsKSBjb25zdAoreworICAgIHVpbnRwdHJfdCByZXN1bHQgPSBiaXR3aXNlX2Nhc3Q8dWlu
dHB0cl90PihjZWxsKSAtIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG1fYmxvY2spOworICAgIFJF
TEVBU0VfQVNTRVJUKHJlc3VsdCA8IE1hcmtlZEJsb2NrOjpibG9ja1NpemUpOworICAgIHJldHVy
biBzdGF0aWNfY2FzdDxGcmVlT2Zmc2V0PihyZXN1bHQpOworfQorCitpbmxpbmUgSGVhcENlbGwq
IEZyZWVMaXN0Ojpmcm9tT2Zmc2V0KEZyZWVPZmZzZXQgb2Zmc2V0KSBjb25zdAoreworICAgIHJl
dHVybiBiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KG9mZnNl
dCkgKyBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihtX2Jsb2NrKSk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3
ZWVwZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0luY3Jl
bWVudGFsU3dlZXBlci5jcHAJKHJldmlzaW9uIDIxNzY0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDcg
Kzg3LDcgQEAgYm9vbCBJbmNyZW1lbnRhbFN3ZWVwZXI6OnN3ZWVwTmV4dEJsb2NrKAogICAgIAog
ICAgIGlmIChibG9jaykgewogICAgICAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0MobV92bS0+
aGVhcCk7Ci0gICAgICAgIGJsb2NrLT5zd2VlcCgpOworICAgICAgICBibG9jay0+c3dlZXAobnVs
bHB0cik7CiAgICAgICAgIG1fdm0tPmhlYXAub2JqZWN0U3BhY2UoKS5mcmVlT3JTaHJpbmtCbG9j
ayhibG9jayk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMjE3NjQ2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDAsNyArNDAsOCBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIE1hcmtlZEFs
bG9jYXRvcjo6TWFya2VkQWxsb2NhdG9yKEhlYXAqIGhlYXAsIFN1YnNwYWNlKiBzdWJzcGFjZSwg
c2l6ZV90IGNlbGxTaXplKQotICAgIDogbV9jdXJyZW50QmxvY2soMCkKKyAgICA6IG1fZnJlZUxp
c3QoY2VsbFNpemUpCisgICAgLCBtX2N1cnJlbnRCbG9jaygwKQogICAgICwgbV9sYXN0QWN0aXZl
QmxvY2soMCkKICAgICAsIG1fY2VsbFNpemUoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNlbGxTaXpl
KSkKICAgICAsIG1fYXR0cmlidXRlcyhzdWJzcGFjZS0+YXR0cmlidXRlcygpKQpAQCAtODgsNyAr
ODksNyBAQCB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6ZGlkQ29uc3VtZUZyZWVMaXN0CiAgICAgaWYg
KG1fY3VycmVudEJsb2NrKQogICAgICAgICBtX2N1cnJlbnRCbG9jay0+ZGlkQ29uc3VtZUZyZWVM
aXN0KCk7CiAgICAgCi0gICAgc2V0RnJlZUxpc3QoRnJlZUxpc3QoKSk7CisgICAgbV9mcmVlTGlz
dC5jbGVhcigpOwogICAgIG1fY3VycmVudEJsb2NrID0gbnVsbHB0cjsKIH0KIApAQCAtOTcsNyAr
OTgsNyBAQCB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlV2l0aG91CiAgICAgU3Vw
ZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogICAgIAogICAgIEFTU0VS
VCghbV9jdXJyZW50QmxvY2spOwotICAgIEFTU0VSVCghbV9mcmVlTGlzdCk7CisgICAgQVNTRVJU
KG1fZnJlZUxpc3QuYWxsb2NhdGlvbldpbGxGYWlsKCkpOwogICAgIAogICAgIGZvciAoOzspIHsK
ICAgICAgICAgbV9hbGxvY2F0aW9uQ3Vyc29yID0gKG1fY2FuQWxsb2NhdGVCdXROb3RFbXB0eSB8
IG1fZW1wdHkpLmZpbmRCaXQobV9hbGxvY2F0aW9uQ3Vyc29yLCB0cnVlKTsKQEAgLTExMyw3ICsx
MTQsNyBAQCB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlV2l0aG91CiAgICAgaWYg
KE9wdGlvbnM6OnN0ZWFsRW1wdHlCbG9ja3NGcm9tT3RoZXJBbGxvY2F0b3JzKCkKICAgICAgICAg
JiYgc2hvdWxkU3RlYWxFbXB0eUJsb2Nrc0Zyb21PdGhlckFsbG9jYXRvcnMoKSkgewogICAgICAg
ICBpZiAoTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2sgPSBtYXJrZWRTcGFjZSgpLmZpbmRFbXB0
eUJsb2NrVG9TdGVhbCgpKSB7Ci0gICAgICAgICAgICBibG9jay0+c3dlZXAoKTsKKyAgICAgICAg
ICAgIGJsb2NrLT5zd2VlcChudWxscHRyKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8g
SXQncyBnb29kIHRoYXQgdGhpcyBjbGVhcnMgY2FuQWxsb2NhdGVCdXROb3RFbXB0eSBhcyB3ZWxs
IGFzIGFsbCBvdGhlciBiaXRzLAogICAgICAgICAgICAgLy8gYmVjYXVzZSB0aGVyZSBpcyBhIHJl
bW90ZSBjaGFuY2UgdGhhdCBhIGJsb2NrIG1heSBoYXZlIGJvdGggY2FuQWxsb2NhdGVCdXROb3RF
bXB0eQpAQCAtMTM5LDExICsxNDAsMTEgQEAgdm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxv
Y2F0ZUluKE1hcgogICAgIEFTU0VSVChibG9jayk7CiAgICAgQVNTRVJUKCFibG9jay0+aXNGcmVl
TGlzdGVkKCkpOwogICAgIAotICAgIEZyZWVMaXN0IGZyZWVMaXN0ID0gYmxvY2stPnN3ZWVwKE1h
cmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwVG9GcmVlTGlzdCk7CisgICAgYmxvY2stPnN3ZWVwKCZt
X2ZyZWVMaXN0KTsKICAgICAKICAgICAvLyBJdCdzIHBvc3NpYmxlIHRvIHN0dW1ibGUgb24gYSBj
b21wbGV0ZWx5IGZ1bGwgYmxvY2suIE1hcmtpbmcgdHJpZXMgdG8gcmV0aXJlIHRoZXNlLCBidXQK
ICAgICAvLyB0aGF0IGFsZ29yaXRobSBpcyByYWN5IGFuZCBtYXkgZm9yZ2V0IHRvIGRvIGl0IHNv
bWV0aW1lcy4KLSAgICBpZiAoZnJlZUxpc3QuYWxsb2NhdGlvbldpbGxGYWlsKCkpIHsKKyAgICBp
ZiAobV9mcmVlTGlzdC5hbGxvY2F0aW9uV2lsbEZhaWwoKSkgewogICAgICAgICBBU1NFUlQoYmxv
Y2stPmlzRnJlZUxpc3RlZCgpKTsKICAgICAgICAgYmxvY2stPnVuc3dlZXBXaXRoTm9OZXdseUFs
bG9jYXRlZCgpOwogICAgICAgICBBU1NFUlQoIWJsb2NrLT5pc0ZyZWVMaXN0ZWQoKSk7CkBAIC0x
NTMsMTkgKzE1NCw5IEBAIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVJbihNYXIK
ICAgICB9CiAgICAgCiAgICAgbV9jdXJyZW50QmxvY2sgPSBibG9jazsKLSAgICBzZXRGcmVlTGlz
dChmcmVlTGlzdCk7CiAgICAgCi0gICAgdm9pZCogcmVzdWx0OwotICAgIGlmIChtX2ZyZWVMaXN0
LnJlbWFpbmluZykgewotICAgICAgICB1bnNpZ25lZCBjZWxsU2l6ZSA9IG1fY2VsbFNpemU7Ci0g
ICAgICAgIG1fZnJlZUxpc3QucmVtYWluaW5nIC09IGNlbGxTaXplOwotICAgICAgICByZXN1bHQg
PSBtX2ZyZWVMaXN0LnBheWxvYWRFbmQgLSBtX2ZyZWVMaXN0LnJlbWFpbmluZyAtIGNlbGxTaXpl
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEZyZWVDZWxsKiBoZWFkID0gbV9mcmVlTGlzdC5oZWFk
OwotICAgICAgICBtX2ZyZWVMaXN0LmhlYWQgPSBoZWFkLT5uZXh0OwotICAgICAgICByZXN1bHQg
PSBoZWFkOwotICAgIH0KLSAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQpOworICAgIHZvaWQqIHJl
c3VsdCA9IG1fZnJlZUxpc3QuYWxsb2NhdGUoCisgICAgICAgIFtdICgpIC0+IEhlYXBDZWxsKiB7
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBudWxscHRyOyB9KTsKICAgICBz
ZXRJc0VkZW4oTm9Mb2NraW5nTmVjZXNzYXJ5LCBtX2N1cnJlbnRCbG9jaywgdHJ1ZSk7CiAgICAg
bWFya2VkU3BhY2UoKS5kaWRBbGxvY2F0ZUluQmxvY2sobV9jdXJyZW50QmxvY2spOwogICAgIHJl
dHVybiByZXN1bHQ7CkBAIC0yMDgsNyArMTk5LDcgQEAgdm9pZCogTWFya2VkQWxsb2NhdG9yOjph
bGxvY2F0ZVNsb3dDYXNlSQogICAgIGRvVGVzdENvbGxlY3Rpb25zSWZOZWVkZWQoZGVmZXJyYWxD
b250ZXh0KTsKIAogICAgIEFTU0VSVCghbWFya2VkU3BhY2UoKS5pc0l0ZXJhdGluZygpKTsKLSAg
ICBtX2hlYXAtPmRpZEFsbG9jYXRlKG1fZnJlZUxpc3Qub3JpZ2luYWxTaXplKTsKKyAgICBtX2hl
YXAtPmRpZEFsbG9jYXRlKG1fZnJlZUxpc3Qub3JpZ2luYWxTaXplKCkpOwogICAgIAogICAgIGRp
ZENvbnN1bWVGcmVlTGlzdCgpOwogICAgIApAQCAtMzM0LDIxICszMjUsMjEgQEAgdm9pZCBNYXJr
ZWRBbGxvY2F0b3I6OnN0b3BBbGxvY2F0aW5nKCkKICAgICAgICAgZGF0YUxvZyhSYXdQb2ludGVy
KHRoaXMpLCAiOiBNYXJrZWRBbGxvY2F0b3I6OnN0b3BBbGxvY2F0aW5nIVxuIik7CiAgICAgQVNT
RVJUKCFtX2xhc3RBY3RpdmVCbG9jayk7CiAgICAgaWYgKCFtX2N1cnJlbnRCbG9jaykgewotICAg
ICAgICBBU1NFUlQoIW1fZnJlZUxpc3QpOworICAgICAgICBBU1NFUlQobV9mcmVlTGlzdC5hbGxv
Y2F0aW9uV2lsbEZhaWwoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCiAgICAgbV9j
dXJyZW50QmxvY2stPnN0b3BBbGxvY2F0aW5nKG1fZnJlZUxpc3QpOwogICAgIG1fbGFzdEFjdGl2
ZUJsb2NrID0gbV9jdXJyZW50QmxvY2s7CiAgICAgbV9jdXJyZW50QmxvY2sgPSAwOwotICAgIG1f
ZnJlZUxpc3QgPSBGcmVlTGlzdCgpOworICAgIG1fZnJlZUxpc3QuY2xlYXIoKTsKIH0KIAogdm9p
ZCBNYXJrZWRBbGxvY2F0b3I6OnByZXBhcmVGb3JBbGxvY2F0aW9uKCkKIHsKICAgICBtX2xhc3RB
Y3RpdmVCbG9jayA9IG51bGxwdHI7CiAgICAgbV9jdXJyZW50QmxvY2sgPSBudWxscHRyOwotICAg
IHNldEZyZWVMaXN0KEZyZWVMaXN0KCkpOworICAgIG1fZnJlZUxpc3QuY2xlYXIoKTsKIAogICAg
IG1fYWxsb2NhdGlvbkN1cnNvciA9IDA7CiAgICAgbV9lbXB0eUN1cnNvciA9IDA7CkBAIC0zNzEs
MTcgKzM2MiwxMiBAQCB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6bGFzdENoYW5jZVRvRmluYWxpCiAg
ICAgICAgIH0pOwogfQogCi12b2lkIE1hcmtlZEFsbG9jYXRvcjo6c2V0RnJlZUxpc3QoY29uc3Qg
RnJlZUxpc3QmIGZyZWVMaXN0KQotewotICAgIG1fZnJlZUxpc3QgPSBmcmVlTGlzdDsKLX0KLQog
dm9pZCBNYXJrZWRBbGxvY2F0b3I6OnJlc3VtZUFsbG9jYXRpbmcoKQogewogICAgIGlmICghbV9s
YXN0QWN0aXZlQmxvY2spCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZnJlZUxpc3QgPSBtX2xh
c3RBY3RpdmVCbG9jay0+cmVzdW1lQWxsb2NhdGluZygpOworICAgIG1fbGFzdEFjdGl2ZUJsb2Nr
LT5yZXN1bWVBbGxvY2F0aW5nKG1fZnJlZUxpc3QpOwogICAgIG1fY3VycmVudEJsb2NrID0gbV9s
YXN0QWN0aXZlQmxvY2s7CiAgICAgbV9sYXN0QWN0aXZlQmxvY2sgPSBudWxscHRyOwogfQpAQCAt
NDQ1LDcgKzQzMSw3IEBAIHZvaWQgTWFya2VkQWxsb2NhdG9yOjpzd2VlcCgpCiAgICAgbV91bnN3
ZXB0LmZvckVhY2hTZXRCaXQoCiAgICAgICAgIFsmXSAoc2l6ZV90IGluZGV4KSB7CiAgICAgICAg
ICAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9jayA9IG1fYmxvY2tzW2luZGV4XTsKLSAgICAg
ICAgICAgIGJsb2NrLT5zd2VlcCgpOworICAgICAgICAgICAgYmxvY2stPnN3ZWVwKG51bGxwdHIp
OwogICAgICAgICB9KTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2VkQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2VkQWxsb2NhdG9yLmgJKHJldmlzaW9uIDIxNzY0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTYsNyArMTU2
LDcgQEAgcHVibGljOgogICAgIHZvaWQqIHRyeUFsbG9jYXRlKEdDRGVmZXJyYWxDb250ZXh0KiA9
IG51bGxwdHIpOwogICAgIEhlYXAqIGhlYXAoKSB7IHJldHVybiBtX2hlYXA7IH0KIAotICAgIGJv
b2wgaXNGcmVlTGlzdGVkQ2VsbChjb25zdCB2b2lkKiB0YXJnZXQpIGNvbnN0IHsgcmV0dXJuIG1f
ZnJlZUxpc3QuY29udGFpbnModGFyZ2V0KTsgfQorICAgIGJvb2wgaXNGcmVlTGlzdGVkQ2VsbChj
b25zdCB2b2lkKiB0YXJnZXQpIGNvbnN0OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rv
cj4gdm9pZCBmb3JFYWNoQmxvY2soY29uc3QgRnVuY3RvciYpOwogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaE5vdEVtcHR5QmxvY2soY29uc3QgRnVuY3RvciYpOwpA
QCAtMjA5LDYgKzIwOSw4IEBAIHB1YmxpYzoKICAgICBTdWJzcGFjZSogc3Vic3BhY2UoKSBjb25z
dCB7IHJldHVybiBtX3N1YnNwYWNlOyB9CiAgICAgTWFya2VkU3BhY2UmIG1hcmtlZFNwYWNlKCkg
Y29uc3Q7CiAgICAgCisgICAgY29uc3QgRnJlZUxpc3QmIGZyZWVMaXN0KCkgY29uc3QgeyByZXR1
cm4gbV9mcmVlTGlzdDsgfQorICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0
OwogICAgIHZvaWQgZHVtcEJpdHMoUHJpbnRTdHJlYW0mID0gV1RGOjpkYXRhRmlsZSgpKTsKICAg
ICAKQEAgLTIyNyw4ICsyMjksNiBAQCBwcml2YXRlOgogICAgIHZvaWQqIGFsbG9jYXRlSW4oTWFy
a2VkQmxvY2s6OkhhbmRsZSopOwogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBkb1Rlc3RDb2xsZWN0
aW9uc0lmTmVlZGVkKEdDRGVmZXJyYWxDb250ZXh0Kik7CiAgICAgCi0gICAgdm9pZCBzZXRGcmVl
TGlzdChjb25zdCBGcmVlTGlzdCYpOwotICAgIAogICAgIEZyZWVMaXN0IG1fZnJlZUxpc3Q7CiAg
ICAgCiAgICAgVmVjdG9yPE1hcmtlZEJsb2NrOjpIYW5kbGUqPiBtX2Jsb2NrczsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvcklubGluZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3JJbmxpbmVz
LmgJKHJldmlzaW9uIDIxNzY0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtl
ZEFsbG9jYXRvcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNDQgKzI1LDMwIEBACiAK
ICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiRnJlZUxpc3RJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
TWFya2VkQWxsb2NhdG9yLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCitpbmxpbmUgYm9vbCBNYXJr
ZWRBbGxvY2F0b3I6OmlzRnJlZUxpc3RlZENlbGwoY29uc3Qgdm9pZCogdGFyZ2V0KSBjb25zdAor
eworICAgIHJldHVybiBtX2ZyZWVMaXN0LmNvbnRhaW5zKGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+
KHRhcmdldCkpOworfQorCiBBTFdBWVNfSU5MSU5FIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5
QWxsb2NhdGUoR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCkKIHsKLSAgICB1bnNp
Z25lZCByZW1haW5pbmcgPSBtX2ZyZWVMaXN0LnJlbWFpbmluZzsKLSAgICBpZiAocmVtYWluaW5n
KSB7Ci0gICAgICAgIHVuc2lnbmVkIGNlbGxTaXplID0gbV9jZWxsU2l6ZTsKLSAgICAgICAgcmVt
YWluaW5nIC09IGNlbGxTaXplOwotICAgICAgICBtX2ZyZWVMaXN0LnJlbWFpbmluZyA9IHJlbWFp
bmluZzsKLSAgICAgICAgcmV0dXJuIG1fZnJlZUxpc3QucGF5bG9hZEVuZCAtIHJlbWFpbmluZyAt
IGNlbGxTaXplOwotICAgIH0KLSAgICAKLSAgICBGcmVlQ2VsbCogaGVhZCA9IG1fZnJlZUxpc3Qu
aGVhZDsKLSAgICBpZiAoVU5MSUtFTFkoIWhlYWQpKQotICAgICAgICByZXR1cm4gdHJ5QWxsb2Nh
dGVTbG93Q2FzZShkZWZlcnJhbENvbnRleHQpOwotICAgIAotICAgIG1fZnJlZUxpc3QuaGVhZCA9
IGhlYWQtPm5leHQ7Ci0gICAgcmV0dXJuIGhlYWQ7CisgICAgcmV0dXJuIG1fZnJlZUxpc3QuYWxs
b2NhdGUoCisgICAgICAgIFsmXSAoKSAtPiBIZWFwQ2VsbCogeworICAgICAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PEhlYXBDZWxsKj4odHJ5QWxsb2NhdGVTbG93Q2FzZShkZWZlcnJhbENvbnRl
eHQpKTsKKyAgICAgICAgfSk7CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCogTWFya2VkQWxsb2Nh
dG9yOjphbGxvY2F0ZShHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0KQogewotICAg
IHVuc2lnbmVkIHJlbWFpbmluZyA9IG1fZnJlZUxpc3QucmVtYWluaW5nOwotICAgIGlmIChyZW1h
aW5pbmcpIHsKLSAgICAgICAgdW5zaWduZWQgY2VsbFNpemUgPSBtX2NlbGxTaXplOwotICAgICAg
ICByZW1haW5pbmcgLT0gY2VsbFNpemU7Ci0gICAgICAgIG1fZnJlZUxpc3QucmVtYWluaW5nID0g
cmVtYWluaW5nOwotICAgICAgICByZXR1cm4gbV9mcmVlTGlzdC5wYXlsb2FkRW5kIC0gcmVtYWlu
aW5nIC0gY2VsbFNpemU7Ci0gICAgfQotICAgIAotICAgIEZyZWVDZWxsKiBoZWFkID0gbV9mcmVl
TGlzdC5oZWFkOwotICAgIGlmIChVTkxJS0VMWSghaGVhZCkpCi0gICAgICAgIHJldHVybiBhbGxv
Y2F0ZVNsb3dDYXNlKGRlZmVycmFsQ29udGV4dCk7Ci0gICAgCi0gICAgbV9mcmVlTGlzdC5oZWFk
ID0gaGVhZC0+bmV4dDsKLSAgICByZXR1cm4gaGVhZDsKKyAgICByZXR1cm4gbV9mcmVlTGlzdC5h
bGxvY2F0ZSgKKyAgICAgICAgWyZdICgpIC0+IEhlYXBDZWxsKiB7CisgICAgICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8SGVhcENlbGwqPihhbGxvY2F0ZVNsb3dDYXNlKGRlZmVycmFsQ29udGV4
dCkpOworICAgICAgICB9KTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+IGlubGlu
ZSB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6Zm9yRWFjaEJsb2NrKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0
b3IpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCShy
ZXZpc2lvbiAyMTc2NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9j
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDkgKzI2LDExIEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiTWFya2VkQmxvY2suaCIKIAorI2luY2x1ZGUgIkZyZWVMaXN0SW5saW5l
cy5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgIkpTRGVzdHJ1Y3RpYmxlT2JqZWN0
LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIk1hcmtlZEFsbG9jYXRvcklu
bGluZXMuaCIKICNpbmNsdWRlICJNYXJrZWRCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJTdXBl
clNhbXBsZXIuaCIKICNpbmNsdWRlICJTd2VlcGluZ1Njb3BlLmgiCkBAIC0xMzQsOCArMTM2LDcg
QEAgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzdG9wQWxsb2NhdGluZwogICAgICAgICAgICAg
cmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7CiAgICAgICAgIH0pOwogCi0gICAgZm9y
RWFjaEZyZWVDZWxsKAotICAgICAgICBmcmVlTGlzdCwKKyAgICBmcmVlTGlzdC5mb3JFYWNoKAog
ICAgICAgICBbJl0gKEhlYXBDZWxsKiBjZWxsKSB7CiAgICAgICAgICAgICBpZiAoZmFsc2UpCiAg
ICAgICAgICAgICAgICAgZGF0YUxvZygiRnJlZSBjZWxsOiAiLCBSYXdQb2ludGVyKGNlbGwpLCAi
XG4iKTsKQEAgLTE1NiwxMCArMTU3LDEwIEBAIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6bGFz
dENoYW5jZVRvRmkKICAgICBtX3dlYWtTZXQubGFzdENoYW5jZVRvRmluYWxpemUoKTsKICAgICBt
X25ld2x5QWxsb2NhdGVkLmNsZWFyQWxsKCk7CiAgICAgbV9uZXdseUFsbG9jYXRlZFZlcnNpb24g
PSBoZWFwKCktPm9iamVjdFNwYWNlKCkubmV3bHlBbGxvY2F0ZWRWZXJzaW9uKCk7Ci0gICAgc3dl
ZXAoKTsKKyAgICBzd2VlcChudWxscHRyKTsKIH0KIAotRnJlZUxpc3QgTWFya2VkQmxvY2s6Okhh
bmRsZTo6cmVzdW1lQWxsb2NhdGluZygpCit2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OnJlc3Vt
ZUFsbG9jYXRpbmcoRnJlZUxpc3QmIGZyZWVMaXN0KQogewogICAgIHsKICAgICAgICAgYXV0byBs
b2NrZXIgPSBob2xkTG9jayhibG9jaygpLm1fbG9jayk7CkBAIC0xNzMsNDAgKzE3NCwyNSBAQCBG
cmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpyZXN1bWVBbGxvCiAgICAgICAgICAgICBpZiAo
ZmFsc2UpCiAgICAgICAgICAgICAgICAgZGF0YUxvZygiVGhlcmUgYWluJ3Qgbm8gbmV3bHkgYWxs
b2NhdGVkLlxuIik7CiAgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHdlIGhhZCBhbHJlYWR5IGV4
aGF1c3RlZCB0aGUgYmxvY2sgd2hlbiB3ZSBzdG9wcGVkIGFsbG9jYXRpb24uCi0gICAgICAgICAg
ICByZXR1cm4gRnJlZUxpc3QoKTsKKyAgICAgICAgICAgIGZyZWVMaXN0LmNsZWFyKCk7CisgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CiAKICAgICAvLyBSZS1jcmVhdGUgb3Vy
IGZyZWUgbGlzdCBmcm9tIGJlZm9yZSBzdG9wcGluZyBhbGxvY2F0aW9uLiBOb3RlIHRoYXQgdGhp
cyBtYXkgcmV0dXJuIGFuIGVtcHR5CiAgICAgLy8gZnJlZWxpc3QsIGluIHdoaWNoIGNhc2UgdGhl
IGJsb2NrIHdpbGwgc3RpbGwgYmUgTWFya2VkIQotICAgIHJldHVybiBzd2VlcChTd2VlcFRvRnJl
ZUxpc3QpOworICAgIHN3ZWVwKCZmcmVlTGlzdCk7CiB9CiAKIHZvaWQgTWFya2VkQmxvY2s6Okhh
bmRsZTo6emFwKGNvbnN0IEZyZWVMaXN0JiBmcmVlTGlzdCkKIHsKLSAgICBmb3JFYWNoRnJlZUNl
bGwoCi0gICAgICAgIGZyZWVMaXN0LAorICAgIGZyZWVMaXN0LmZvckVhY2goCiAgICAgICAgIFsm
XSAoSGVhcENlbGwqIGNlbGwpIHsKICAgICAgICAgICAgIGlmIChtX2F0dHJpYnV0ZXMuZGVzdHJ1
Y3Rpb24gPT0gTmVlZHNEZXN0cnVjdGlvbikKICAgICAgICAgICAgICAgICBjZWxsLT56YXAoKTsK
ICAgICAgICAgfSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci12b2lkIE1hcmtlZEJs
b2NrOjpIYW5kbGU6OmZvckVhY2hGcmVlQ2VsbChjb25zdCBGcmVlTGlzdCYgZnJlZUxpc3QsIGNv
bnN0IEZ1bmMmIGZ1bmMpCi17Ci0gICAgaWYgKGZyZWVMaXN0LnJlbWFpbmluZykgewotICAgICAg
ICBmb3IgKHVuc2lnbmVkIHJlbWFpbmluZyA9IGZyZWVMaXN0LnJlbWFpbmluZzsgcmVtYWluaW5n
OyByZW1haW5pbmcgLT0gY2VsbFNpemUoKSkKLSAgICAgICAgICAgIGZ1bmMoYml0d2lzZV9jYXN0
PEhlYXBDZWxsKj4oZnJlZUxpc3QucGF5bG9hZEVuZCAtIHJlbWFpbmluZykpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGZvciAoRnJlZUNlbGwqIGN1cnJlbnQgPSBmcmVlTGlzdC5oZWFkOyBjdXJy
ZW50OykgewotICAgICAgICAgICAgRnJlZUNlbGwqIG5leHQgPSBjdXJyZW50LT5uZXh0OwotICAg
ICAgICAgICAgZnVuYyhiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPihjdXJyZW50KSk7Ci0gICAgICAg
ICAgICBjdXJyZW50ID0gbmV4dDsKLSAgICAgICAgfQotICAgIH0KLX0KLQogdm9pZCBNYXJrZWRC
bG9jazo6YWJvdXRUb01hcmtTbG93KEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKQogewogICAg
IEFTU0VSVCh2bSgpLT5oZWFwLm9iamVjdFNwYWNlKCkuaXNNYXJraW5nKCkpOwpAQCAtNDA3LDIw
ICszOTMsMjIgQEAgU3Vic3BhY2UqIE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN1YnNwYWNlKAogICAg
IHJldHVybiBhbGxvY2F0b3IoKS0+c3Vic3BhY2UoKTsKIH0KIAotRnJlZUxpc3QgTWFya2VkQmxv
Y2s6OkhhbmRsZTo6c3dlZXAoU3dlZXBNb2RlIHN3ZWVwTW9kZSkKK3ZvaWQgTWFya2VkQmxvY2s6
OkhhbmRsZTo6c3dlZXAoRnJlZUxpc3QqIGZyZWVMaXN0KQogewogICAgIFN3ZWVwaW5nU2NvcGUg
c3dlZXBpbmdTY29wZSgqaGVhcCgpKTsKICAgICAKKyAgICBTd2VlcE1vZGUgc3dlZXBNb2RlID0g
ZnJlZUxpc3QgPyBTd2VlcFRvRnJlZUxpc3QgOiBTd2VlcE9ubHk7CisgICAgCiAgICAgbV9hbGxv
Y2F0b3ItPnNldElzVW5zd2VwdChOb0xvY2tpbmdOZWNlc3NhcnksIHRoaXMsIGZhbHNlKTsKICAg
ICAKICAgICBtX3dlYWtTZXQuc3dlZXAoKTsKIAogICAgIGlmIChzd2VlcE1vZGUgPT0gU3dlZXBP
bmx5ICYmIG1fYXR0cmlidXRlcy5kZXN0cnVjdGlvbiA9PSBEb2VzTm90TmVlZERlc3RydWN0aW9u
KQotICAgICAgICByZXR1cm4gRnJlZUxpc3QoKTsKKyAgICAgICAgcmV0dXJuOwogCiAgICAgaWYg
KFVOTElLRUxZKG1faXNGcmVlTGlzdGVkKSkgewogICAgICAgICBSRUxFQVNFX0FTU0VSVChzd2Vl
cE1vZGUgPT0gU3dlZXBUb0ZyZWVMaXN0KTsKLSAgICAgICAgcmV0dXJuIEZyZWVMaXN0KCk7Cisg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCiAgICAgQVNTRVJUKCFtX2FsbG9jYXRvci0+aXNB
bGxvY2F0ZWQoTm9Mb2NraW5nTmVjZXNzYXJ5LCB0aGlzKSk7CkBAIC00MjgsOCArNDE2LDEwIEBA
IEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN3ZWVwKFN3ZWUKICAgICBpZiAoc3BhY2Uo
KS0+aXNNYXJraW5nKCkpCiAgICAgICAgIGJsb2NrKCkubV9sb2NrLmxvY2soKTsKICAgICAKLSAg
ICBpZiAobV9hdHRyaWJ1dGVzLmRlc3RydWN0aW9uID09IE5lZWRzRGVzdHJ1Y3Rpb24pCi0gICAg
ICAgIHJldHVybiBzdWJzcGFjZSgpLT5maW5pc2hTd2VlcCgqdGhpcywgc3dlZXBNb2RlKTsKKyAg
ICBpZiAobV9hdHRyaWJ1dGVzLmRlc3RydWN0aW9uID09IE5lZWRzRGVzdHJ1Y3Rpb24pIHsKKyAg
ICAgICAgc3Vic3BhY2UoKS0+ZmluaXNoU3dlZXAoKnRoaXMsIGZyZWVMaXN0KTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KICAgICAKICAgICAvLyBIYW5kbGUgdGhlIG5vLWRlc3RydWN0b3Igc3Bl
Y2lhbGl6YXRpb25zIGhlcmUsIHNpbmNlIHdlIGhhdmUgdGhlIG1vc3Qgb2YgdGhvc2UuIFRoaXMK
ICAgICAvLyBlbnN1cmVzIHRoYXQgdGhleSBkb24ndCBnZXQgcmUtc3BlY2lhbGl6ZWQgZm9yIGV2
ZXJ5IGRlc3RydWN0b3Igc3BhY2UuCkBAIC00MzksNyArNDI5LDYgQEAgRnJlZUxpc3QgTWFya2Vk
QmxvY2s6OkhhbmRsZTo6c3dlZXAoU3dlZQogICAgIE5ld2x5QWxsb2NhdGVkTW9kZSBuZXdseUFs
bG9jYXRlZE1vZGUgPSB0aGlzLT5uZXdseUFsbG9jYXRlZE1vZGUoKTsKICAgICBNYXJrc01vZGUg
bWFya3NNb2RlID0gdGhpcy0+bWFya3NNb2RlKCk7CiAgICAgCi0gICAgRnJlZUxpc3QgcmVzdWx0
OwogICAgIGF1dG8gdHJ5U3BlY2lhbGl6ZWQgPSBbJl0gKCkgLT4gYm9vbCB7CiAgICAgICAgIGlm
IChzd2VlcE1vZGUgIT0gU3dlZXBUb0ZyZWVMaXN0KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwpAQCAtNDUyLDIwICs0NDEsMjAgQEAgRnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3dl
ZXAoU3dlZQogICAgICAgICBjYXNlIElzRW1wdHk6CiAgICAgICAgICAgICBzd2l0Y2ggKG1hcmtz
TW9kZSkgewogICAgICAgICAgICAgY2FzZSBNYXJrc05vdFN0YWxlOgotICAgICAgICAgICAgICAg
IHJlc3VsdCA9IHNwZWNpYWxpemVkU3dlZXA8dHJ1ZSwgSXNFbXB0eSwgU3dlZXBUb0ZyZWVMaXN0
LCBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9lc05vdEhhdmVOZXdseUFs
bG9jYXRlZCwgTWFya3NOb3RTdGFsZT4oSXNFbXB0eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hh
c05vRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCwg
TWFya3NOb3RTdGFsZSwgW10gKFZNJiwgSlNDZWxsKikgeyB9KTsKKyAgICAgICAgICAgICAgICBz
cGVjaWFsaXplZFN3ZWVwPHRydWUsIElzRW1wdHksIFN3ZWVwVG9GcmVlTGlzdCwgQmxvY2tIYXNO
b0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUsIERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1h
cmtzTm90U3RhbGU+KGZyZWVMaXN0LCBJc0VtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFz
Tm9EZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBN
YXJrc05vdFN0YWxlLCBbXSAoVk0mLCBKU0NlbGwqKSB7IH0pOwogICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICAgICAgY2FzZSBNYXJrc1N0YWxlOgotICAgICAgICAgICAgICAg
IHJlc3VsdCA9IHNwZWNpYWxpemVkU3dlZXA8dHJ1ZSwgSXNFbXB0eSwgU3dlZXBUb0ZyZWVMaXN0
LCBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9lc05vdEhhdmVOZXdseUFs
bG9jYXRlZCwgTWFya3NTdGFsZT4oSXNFbXB0eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hhc05v
RGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCwgTWFy
a3NTdGFsZSwgW10gKFZNJiwgSlNDZWxsKikgeyB9KTsKKyAgICAgICAgICAgICAgICBzcGVjaWFs
aXplZFN3ZWVwPHRydWUsIElzRW1wdHksIFN3ZWVwVG9GcmVlTGlzdCwgQmxvY2tIYXNOb0Rlc3Ry
dWN0b3JzLCBEb250U2NyaWJibGUsIERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzU3Rh
bGU+KGZyZWVMaXN0LCBJc0VtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzTm9EZXN0cnVj
dG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBNYXJrc1N0YWxl
LCBbXSAoVk0mLCBKU0NlbGwqKSB7IH0pOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTm90RW1wdHk6
CiAgICAgICAgICAgICBzd2l0Y2ggKG1hcmtzTW9kZSkgewogICAgICAgICAgICAgY2FzZSBNYXJr
c05vdFN0YWxlOgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNwZWNpYWxpemVkU3dlZXA8dHJ1
ZSwgTm90RW1wdHksIFN3ZWVwVG9GcmVlTGlzdCwgQmxvY2tIYXNOb0Rlc3RydWN0b3JzLCBEb250
U2NyaWJibGUsIERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzTm90U3RhbGU+KElzRW1w
dHksIFN3ZWVwVG9GcmVlTGlzdCwgQmxvY2tIYXNOb0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUs
IERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzTm90U3RhbGUsIFtdIChWTSYsIEpTQ2Vs
bCopIHsgfSk7CisgICAgICAgICAgICAgICAgc3BlY2lhbGl6ZWRTd2VlcDx0cnVlLCBOb3RFbXB0
eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwg
RG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCwgTWFya3NOb3RTdGFsZT4oZnJlZUxpc3QsIElzRW1w
dHksIFN3ZWVwVG9GcmVlTGlzdCwgQmxvY2tIYXNOb0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUs
IERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzTm90U3RhbGUsIFtdIChWTSYsIEpTQ2Vs
bCopIHsgfSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICBjYXNl
IE1hcmtzU3RhbGU6Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gc3BlY2lhbGl6ZWRTd2VlcDx0
cnVlLCBOb3RFbXB0eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMsIERv
bnRTY3JpYmJsZSwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCwgTWFya3NTdGFsZT4oSXNFbXB0
eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwg
RG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCwgTWFya3NTdGFsZSwgW10gKFZNJiwgSlNDZWxsKikg
eyB9KTsKKyAgICAgICAgICAgICAgICBzcGVjaWFsaXplZFN3ZWVwPHRydWUsIE5vdEVtcHR5LCBT
d2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzTm9EZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBEb2Vz
Tm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBNYXJrc1N0YWxlPihmcmVlTGlzdCwgSXNFbXB0eSwgU3dl
ZXBUb0ZyZWVMaXN0LCBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9lc05v
dEhhdmVOZXdseUFsbG9jYXRlZCwgTWFya3NTdGFsZSwgW10gKFZNJiwgSlNDZWxsKikgeyB9KTsK
ICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGJyZWFrOwpAQCAtNDc1LDEwICs0NjQsMTYgQEAgRnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRs
ZTo6c3dlZXAoU3dlZQogICAgIH07CiAgICAgCiAgICAgaWYgKHRyeVNwZWNpYWxpemVkKCkpCi0g
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybjsKIAogICAgIC8vIFRoZSB0ZW1w
bGF0ZSBhcmd1bWVudHMgZG9uJ3QgbWF0dGVyIGJlY2F1c2UgdGhlIGZpcnN0IG9uZSBpcyBmYWxz
ZS4KLSAgICByZXR1cm4gc3BlY2lhbGl6ZWRTd2VlcDxmYWxzZSwgSXNFbXB0eSwgU3dlZXBPbmx5
LCBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgSGFzTmV3bHlBbGxvY2F0ZWQs
IE1hcmtzU3RhbGU+KGVtcHR5TW9kZSwgc3dlZXBNb2RlLCBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMs
IHNjcmliYmxlTW9kZSwgbmV3bHlBbGxvY2F0ZWRNb2RlLCBtYXJrc01vZGUsIFtdIChWTSYsIEpT
Q2VsbCopIHsgfSk7CisgICAgc3BlY2lhbGl6ZWRTd2VlcDxmYWxzZSwgSXNFbXB0eSwgU3dlZXBP
bmx5LCBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgSGFzTmV3bHlBbGxvY2F0
ZWQsIE1hcmtzU3RhbGU+KGZyZWVMaXN0LCBlbXB0eU1vZGUsIHN3ZWVwTW9kZSwgQmxvY2tIYXNO
b0Rlc3RydWN0b3JzLCBzY3JpYmJsZU1vZGUsIG5ld2x5QWxsb2NhdGVkTW9kZSwgbWFya3NNb2Rl
LCBbXSAoVk0mLCBKU0NlbGwqKSB7IH0pOworfQorCitib29sIE1hcmtlZEJsb2NrOjpIYW5kbGU6
OmlzRnJlZUxpc3RlZENlbGwoY29uc3Qgdm9pZCogdGFyZ2V0KSBjb25zdAoreworICAgIEFTU0VS
VChpc0ZyZWVMaXN0ZWQoKSk7CisgICAgcmV0dXJuIG1fYWxsb2NhdG9yLT5pc0ZyZWVMaXN0ZWRD
ZWxsKHRhcmdldCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCShyZXZpc2lvbiAyMTc2NDYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw3
ICsyMyw2IEBACiAKICNpbmNsdWRlICJBbGxvY2F0b3JBdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAi
RGVzdHJ1Y3Rpb25Nb2RlLmgiCi0jaW5jbHVkZSAiRnJlZUxpc3QuaCIKICNpbmNsdWRlICJIZWFw
Q2VsbC5oIgogI2luY2x1ZGUgIkl0ZXJhdGlvblN0YXR1cy5oIgogI2luY2x1ZGUgIldlYWtTZXQu
aCIKQEAgLTM2LDYgKzM1LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAgICAgCitjbGFzcyBGcmVl
TGlzdDsKIGNsYXNzIEhlYXA7CiBjbGFzcyBKU0NlbGw7CiBjbGFzcyBNYXJrZWRBbGxvY2F0b3I7
CkBAIC0xMTcsMjEgKzExNywyMiBAQCBwdWJsaWM6CiAgICAgICAgIFZNKiB2bSgpIGNvbnN0Owog
ICAgICAgICBXZWFrU2V0JiB3ZWFrU2V0KCk7CiAgICAgICAgICAgICAKKyAgICAgICAgZW51bSBT
d2VlcE1vZGUgeyBTd2VlcE9ubHksIFN3ZWVwVG9GcmVlTGlzdCB9OworCiAgICAgICAgIC8vIFN3
ZWVwaW5nIGVuc3VyZXMgdGhhdCBkZXN0cnVjdG9ycyBnZXQgY2FsbGVkIGFuZCByZW1vdmVzIHRo
ZSBibG9jayBmcm9tIHRoZSB1bnN3ZXB0CiAgICAgICAgIC8vIHNldC4gU3dlZXBpbmcgdG8gZnJl
ZSBsaXN0IGFsc28gcmVtb3ZlcyB0aGUgYmxvY2sgZnJvbSB0aGUgZW1wdHkgc2V0LCBpZiBpdCB3
YXMgaW4gdGhhdAogICAgICAgICAvLyBzZXQuIFN3ZWVwaW5nIHdpdGggU3dlZXBPbmx5IG1heSBh
ZGQgdGhpcyBibG9jayB0byB0aGUgZW1wdHkgc2V0LCBpZiB0aGUgYmxvY2sgaXMgZm91bmQKLSAg
ICAgICAgLy8gdG8gYmUgZW1wdHkuCisgICAgICAgIC8vIHRvIGJlIGVtcHR5LiBUaGUgZnJlZS1s
aXN0IGJlaW5nIG51bGwgaW1wbGllcyBTd2VlcE9ubHkuCiAgICAgICAgIC8vCiAgICAgICAgIC8v
IE5vdGUgdGhhdCB5b3UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgZW1wdHkgYml0IHJlZmxl
Y3RzIHJlYWxpdHkuIElmIGl0J3Mgbm90IHNldAogICAgICAgICAvLyBhbmQgdGhlIGJsb2NrIGlz
IGZyZXNobHkgY3JlYXRlZCwgdGhlbiB3ZSdsbCBtYWtlIHRoZSBtaXN0YWtlIG9mIHJ1bm5pbmcg
ZGVzdHJ1Y3RvcnMgaW4KICAgICAgICAgLy8gdGhlIGJsb2NrLiBJZiBpdCdzIG5vdCBzZXQgYW5k
IHRoZSBibG9jayBoYXMgbm90aGluZyBtYXJrZWQsIHRoZW4gd2UnbGwgbWFrZSB0aGUKICAgICAg
ICAgLy8gbWlzdGFrZSBvZiBtYWtpbmcgYSBwb3AgZnJlZWxpc3QgcmF0aGVyIHRoYW4gYSBidW1w
IGZyZWVsaXN0LgotICAgICAgICBlbnVtIFN3ZWVwTW9kZSB7IFN3ZWVwT25seSwgU3dlZXBUb0Zy
ZWVMaXN0IH07Ci0gICAgICAgIEZyZWVMaXN0IHN3ZWVwKFN3ZWVwTW9kZSA9IFN3ZWVwT25seSk7
CisgICAgICAgIHZvaWQgc3dlZXAoRnJlZUxpc3QqKTsKICAgICAgICAgCiAgICAgICAgIC8vIFRo
aXMgaXMgdG8gYmUgY2FsbGVkIGJ5IFN1YnNwYWNlLgogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBEZXN0cm95RnVuYz4KLSAgICAgICAgRnJlZUxpc3QgZmluaXNoU3dlZXBLbm93aW5nU3Vic3Bh
Y2UoU3dlZXBNb2RlLCBjb25zdCBEZXN0cm95RnVuYyYpOworICAgICAgICB2b2lkIGZpbmlzaFN3
ZWVwS25vd2luZ1N1YnNwYWNlKEZyZWVMaXN0KiwgY29uc3QgRGVzdHJveUZ1bmMmKTsKICAgICAg
ICAgCiAgICAgICAgIHZvaWQgdW5zd2VlcFdpdGhOb05ld2x5QWxsb2NhdGVkKCk7CiAgICAgICAg
IApAQCAtMTQ3LDcgKzE0OCw3IEBAIHB1YmxpYzoKICAgICAgICAgLy8gb2YgdGhlc2UgZnVuY3Rp
b25zOgogICAgICAgICB2b2lkIGRpZENvbnN1bWVGcmVlTGlzdCgpOyAvLyBDYWxsIHRoaXMgb25j
ZSB5b3UndmUgYWxsb2NhdGVkIGFsbCB0aGUgaXRlbXMgaW4gdGhlIGZyZWUgbGlzdC4KICAgICAg
ICAgdm9pZCBzdG9wQWxsb2NhdGluZyhjb25zdCBGcmVlTGlzdCYpOwotICAgICAgICBGcmVlTGlz
dCByZXN1bWVBbGxvY2F0aW5nKCk7IC8vIENhbGwgdGhpcyBpZiB5b3UgY2Fub25pY2FsaXplZCBh
IGJsb2NrIGZvciBzb21lIG5vbi1jb2xsZWN0aW9uIHJlbGF0ZWQgcHVycG9zZS4KKyAgICAgICAg
dm9pZCByZXN1bWVBbGxvY2F0aW5nKEZyZWVMaXN0Jik7IC8vIENhbGwgdGhpcyBpZiB5b3UgY2Fu
b25pY2FsaXplZCBhIGJsb2NrIGZvciBzb21lIG5vbi1jb2xsZWN0aW9uIHJlbGF0ZWQgcHVycG9z
ZS4KICAgICAgICAgICAgIAogICAgICAgICBzaXplX3QgY2VsbFNpemUoKTsKICAgICAgICAgaW5s
aW5lIHVuc2lnbmVkIGNlbGxzUGVyQmxvY2soKTsKQEAgLTIxNSwxMCArMjE2LDcgQEAgcHVibGlj
OgogICAgICAgICBNYXJrc01vZGUgbWFya3NNb2RlKCk7CiAgICAgICAgIAogICAgICAgICB0ZW1w
bGF0ZTxib29sLCBFbXB0eU1vZGUsIFN3ZWVwTW9kZSwgU3dlZXBEZXN0cnVjdGlvbk1vZGUsIFNj
cmliYmxlTW9kZSwgTmV3bHlBbGxvY2F0ZWRNb2RlLCBNYXJrc01vZGUsIHR5cGVuYW1lIERlc3Ry
b3lGdW5jPgotICAgICAgICBGcmVlTGlzdCBzcGVjaWFsaXplZFN3ZWVwKEVtcHR5TW9kZSwgU3dl
ZXBNb2RlLCBTd2VlcERlc3RydWN0aW9uTW9kZSwgU2NyaWJibGVNb2RlLCBOZXdseUFsbG9jYXRl
ZE1vZGUsIE1hcmtzTW9kZSwgY29uc3QgRGVzdHJveUZ1bmMmKTsKLSAgICAgICAgCi0gICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci0gICAgICAgIHZvaWQgZm9yRWFjaEZyZWVDZWxsKGNv
bnN0IEZyZWVMaXN0JiwgY29uc3QgRnVuYyYpOworICAgICAgICB2b2lkIHNwZWNpYWxpemVkU3dl
ZXAoRnJlZUxpc3QqLCBFbXB0eU1vZGUsIFN3ZWVwTW9kZSwgU3dlZXBEZXN0cnVjdGlvbk1vZGUs
IFNjcmliYmxlTW9kZSwgTmV3bHlBbGxvY2F0ZWRNb2RlLCBNYXJrc01vZGUsIGNvbnN0IERlc3Ry
b3lGdW5jJik7CiAgICAgICAgIAogICAgICAgICB2b2lkIHNldElzRnJlZUxpc3RlZCgpOwogICAg
ICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrSW5saW5l
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2Nr
SW5saW5lcy5oCShyZXZpc2lvbiAyMTc2NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrZWRCbG9ja0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDEyICsxMTcsNiBA
QCBpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6SGFuZGxlOjppc0xpdmVDCiAgICAgcmV0dXJuIGlz
TGl2ZShtYXJraW5nVmVyc2lvbiwgaXNNYXJraW5nLCBzdGF0aWNfY2FzdDxjb25zdCBIZWFwQ2Vs
bCo+KHApKTsKIH0KIAotaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6OkhhbmRsZTo6aXNGcmVlTGlz
dGVkQ2VsbChjb25zdCB2b2lkKiB0YXJnZXQpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGlzRnJlZUxp
c3RlZCgpKTsKLSAgICByZXR1cm4gbV9hbGxvY2F0b3ItPmlzRnJlZUxpc3RlZENlbGwodGFyZ2V0
KTsKLX0KLQogLy8gVGhlIGZvbGxvd2luZyBoYXMgdG8gYmUgdHJ1ZSBmb3Igc3BlY2lhbGl6YXRp
b24gdG8ga2ljayBpbjoKIC8vCiAvLyBzd2VlcE1vZGUgPT0gU3dlZXBUb0ZyZWVMaXN0CkBAIC0x
NDUsNyArMTM5LDcgQEAgaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6OkhhbmRsZTo6aXNGcmVlTAog
Ly8gT25seSB0aGUgRG9lc05vdE5lZWREZXN0cnVjdGlvbiBvbmUgc2hvdWxkIGJlIHNwZWNpYWxp
emVkIGJ5IE1hcmtlZEJsb2NrLgogCiB0ZW1wbGF0ZTxib29sIHNwZWNpYWxpemUsIE1hcmtlZEJs
b2NrOjpIYW5kbGU6OkVtcHR5TW9kZSBzcGVjaWFsaXplZEVtcHR5TW9kZSwgTWFya2VkQmxvY2s6
OkhhbmRsZTo6U3dlZXBNb2RlIHNwZWNpYWxpemVkU3dlZXBNb2RlLCBNYXJrZWRCbG9jazo6SGFu
ZGxlOjpTd2VlcERlc3RydWN0aW9uTW9kZSBzcGVjaWFsaXplZERlc3RydWN0aW9uTW9kZSwgTWFy
a2VkQmxvY2s6OkhhbmRsZTo6U2NyaWJibGVNb2RlIHNwZWNpYWxpemVkU2NyaWJibGVNb2RlLCBN
YXJrZWRCbG9jazo6SGFuZGxlOjpOZXdseUFsbG9jYXRlZE1vZGUgc3BlY2lhbGl6ZWROZXdseUFs
bG9jYXRlZE1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6Ok1hcmtzTW9kZSBzcGVjaWFsaXplZE1h
cmtzTW9kZSwgdHlwZW5hbWUgRGVzdHJveUZ1bmM+Ci1GcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFu
ZGxlOjpzcGVjaWFsaXplZFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGU6OkVtcHR5TW9kZSBlbXB0
eU1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwTW9kZSBzd2VlcE1vZGUsIE1hcmtlZEJs
b2NrOjpIYW5kbGU6OlN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0aW9uTW9kZSwgTWFya2Vk
QmxvY2s6OkhhbmRsZTo6U2NyaWJibGVNb2RlIHNjcmliYmxlTW9kZSwgTWFya2VkQmxvY2s6Okhh
bmRsZTo6TmV3bHlBbGxvY2F0ZWRNb2RlIG5ld2x5QWxsb2NhdGVkTW9kZSwgTWFya2VkQmxvY2s6
OkhhbmRsZTo6TWFya3NNb2RlIG1hcmtzTW9kZSwgY29uc3QgRGVzdHJveUZ1bmMmIGRlc3Ryb3lG
dW5jKQordm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzcGVjaWFsaXplZFN3ZWVwKEZyZWVMaXN0
KiBmcmVlTGlzdCwgTWFya2VkQmxvY2s6OkhhbmRsZTo6RW1wdHlNb2RlIGVtcHR5TW9kZSwgTWFy
a2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBNb2RlIHN3ZWVwTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRs
ZTo6U3dlZXBEZXN0cnVjdGlvbk1vZGUgZGVzdHJ1Y3Rpb25Nb2RlLCBNYXJrZWRCbG9jazo6SGFu
ZGxlOjpTY3JpYmJsZU1vZGUgc2NyaWJibGVNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpOZXds
eUFsbG9jYXRlZE1vZGUgbmV3bHlBbGxvY2F0ZWRNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpN
YXJrc01vZGUgbWFya3NNb2RlLCBjb25zdCBEZXN0cm95RnVuYyYgZGVzdHJveUZ1bmMpCiB7CiAg
ICAgaWYgKHNwZWNpYWxpemUpIHsKICAgICAgICAgZW1wdHlNb2RlID0gc3BlY2lhbGl6ZWRFbXB0
eU1vZGU7CkBAIC0xOTMsMTcgKzE4NywxOCBAQCBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxl
OjpzcGVjaWFsaXplCiAgICAgICAgICAgICBtX2FsbG9jYXRvci0+c2V0SXNFbXB0eShOb0xvY2tp
bmdOZWNlc3NhcnksIHRoaXMsIHRydWUpOwogICAgICAgICBpZiAoc3BhY2UoKS0+aXNNYXJraW5n
KCkpCiAgICAgICAgICAgICBibG9jay5tX2xvY2sudW5sb2NrKCk7Ci0gICAgICAgIEZyZWVMaXN0
IHJlc3VsdCA9IEZyZWVMaXN0OjpidW1wKHBheWxvYWRFbmQsIHBheWxvYWRFbmQgLSBwYXlsb2Fk
QmVnaW4pOworICAgICAgICBpZiAoc3dlZXBNb2RlID09IFN3ZWVwVG9GcmVlTGlzdCkKKyAgICAg
ICAgICAgIGZyZWVMaXN0LT5pbml0aWFsaXplQnVtcChwYXlsb2FkRW5kLCBwYXlsb2FkRW5kIC0g
cGF5bG9hZEJlZ2luKTsKICAgICAgICAgaWYgKGZhbHNlKQotICAgICAgICAgICAgZGF0YUxvZygi
UXVpY2tseSBzd2VwdCBibG9jayAiLCBSYXdQb2ludGVyKHRoaXMpLCAiIHdpdGggY2VsbCBzaXpl
ICIsIGNlbGxTaXplKCksICIgYW5kIGF0dHJpYnV0ZXMgIiwgbV9hdHRyaWJ1dGVzLCAiOiAiLCBy
ZXN1bHQsICJcbiIpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgZGF0YUxv
ZygiUXVpY2tseSBzd2VwdCBibG9jayAiLCBSYXdQb2ludGVyKHRoaXMpLCAiIHdpdGggY2VsbCBz
aXplICIsIGNlbGxTaXplKCksICIgYW5kIGF0dHJpYnV0ZXMgIiwgbV9hdHRyaWJ1dGVzLCAiOiAi
LCBwb2ludGVyRHVtcChmcmVlTGlzdCksICJcbiIpOworICAgICAgICByZXR1cm47CiAgICAgfQog
CiAgICAgLy8gVGhpcyBwcm9kdWNlcyBhIGZyZWUgbGlzdCB0aGF0IGlzIG9yZGVyZWQgaW4gcmV2
ZXJzZSB0aHJvdWdoIHRoZSBibG9jay4KICAgICAvLyBUaGlzIGlzIGZpbmUsIHNpbmNlIHRoZSBh
bGxvY2F0aW9uIGNvZGUgbWFrZXMgbm8gYXNzdW1wdGlvbnMgYWJvdXQgdGhlCiAgICAgLy8gb3Jk
ZXIgb2YgdGhlIGZyZWUgbGlzdC4KLSAgICBGcmVlQ2VsbCogaGVhZCA9IDA7Ci0gICAgc2l6ZV90
IGNvdW50ID0gMDsKKyAgICBpZiAoc3dlZXBNb2RlID09IFN3ZWVwVG9GcmVlTGlzdCkKKyAgICAg
ICAgZnJlZUxpc3QtPmluaXRpYWxpemVMaXN0KCZibG9jayk7CiAgICAgYm9vbCBpc0VtcHR5ID0g
dHJ1ZTsKICAgICBWZWN0b3I8c2l6ZV90PiBkZWFkQ2VsbHM7CiAgICAgVk0mIHZtID0gKnRoaXMt
PnZtKCk7CkBAIC0yMTksMTIgKzIxNCw5IEBAIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6
OnNwZWNpYWxpemUKICAgICAgICAgfQogCiAgICAgICAgIGlmIChzd2VlcE1vZGUgPT0gU3dlZXBU
b0ZyZWVMaXN0KSB7Ci0gICAgICAgICAgICBGcmVlQ2VsbCogZnJlZUNlbGwgPSByZWludGVycHJl
dF9jYXN0X3B0cjxGcmVlQ2VsbCo+KGNlbGwpOwogICAgICAgICAgICAgaWYgKHNjcmliYmxlTW9k
ZSA9PSBTY3JpYmJsZSkKLSAgICAgICAgICAgICAgICBzY3JpYmJsZShmcmVlQ2VsbCwgY2VsbFNp
emUoKSk7Ci0gICAgICAgICAgICBmcmVlQ2VsbC0+bmV4dCA9IGhlYWQ7Ci0gICAgICAgICAgICBo
ZWFkID0gZnJlZUNlbGw7Ci0gICAgICAgICAgICArK2NvdW50OworICAgICAgICAgICAgICAgIHNj
cmliYmxlKGNlbGwsIGNlbGxTaXplKCkpOworICAgICAgICAgICAgZnJlZUxpc3QtPmFkZEZyZWVD
ZWxsKGNlbGwpOwogICAgICAgICB9CiAgICAgfTsKICAgICBmb3IgKHNpemVfdCBpID0gZmlyc3RB
dG9tKCk7IGkgPCBtX2VuZEF0b207IGkgKz0gbV9hdG9tc1BlckNlbGwpIHsKQEAgLTI1NCwyNiAr
MjQ2LDI0IEBAIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxpemUKICAgICAg
ICAgICAgIGhhbmRsZURlYWRDZWxsKGkpOwogICAgIH0KIAotICAgIEZyZWVMaXN0IHJlc3VsdCA9
IEZyZWVMaXN0OjpsaXN0KGhlYWQsIGNvdW50ICogY2VsbFNpemUoKSk7CiAgICAgaWYgKHN3ZWVw
TW9kZSA9PSBTd2VlcFRvRnJlZUxpc3QpCiAgICAgICAgIHNldElzRnJlZUxpc3RlZCgpOwogICAg
IGVsc2UgaWYgKGlzRW1wdHkpCiAgICAgICAgIG1fYWxsb2NhdG9yLT5zZXRJc0VtcHR5KE5vTG9j
a2luZ05lY2Vzc2FyeSwgdGhpcywgdHJ1ZSk7CiAgICAgaWYgKGZhbHNlKQotICAgICAgICBkYXRh
TG9nKCJTbG93bHkgc3dlcHQgYmxvY2sgIiwgUmF3UG9pbnRlcigmYmxvY2spLCAiIHdpdGggY2Vs
bCBzaXplICIsIGNlbGxTaXplKCksICIgYW5kIGF0dHJpYnV0ZXMgIiwgbV9hdHRyaWJ1dGVzLCAi
OiAiLCByZXN1bHQsICJcbiIpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIGRhdGFMb2co
IlNsb3dseSBzd2VwdCBibG9jayAiLCBSYXdQb2ludGVyKCZibG9jayksICIgd2l0aCBjZWxsIHNp
emUgIiwgY2VsbFNpemUoKSwgIiBhbmQgYXR0cmlidXRlcyAiLCBtX2F0dHJpYnV0ZXMsICI6ICIs
IHBvaW50ZXJEdW1wKGZyZWVMaXN0KSwgIlxuIik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIERl
c3Ryb3lGdW5jPgotRnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6ZmluaXNoU3dlZXBLbm93
aW5nU3Vic3BhY2UoU3dlZXBNb2RlIHN3ZWVwTW9kZSwgY29uc3QgRGVzdHJveUZ1bmMmIGRlc3Ry
b3lGdW5jKQordm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpmaW5pc2hTd2VlcEtub3dpbmdTdWJz
cGFjZShGcmVlTGlzdCogZnJlZUxpc3QsIGNvbnN0IERlc3Ryb3lGdW5jJiBkZXN0cm95RnVuYykK
IHsKKyAgICBTd2VlcE1vZGUgc3dlZXBNb2RlID0gZnJlZUxpc3QgPyBTd2VlcFRvRnJlZUxpc3Qg
OiBTd2VlcE9ubHk7CiAgICAgU3dlZXBEZXN0cnVjdGlvbk1vZGUgZGVzdHJ1Y3Rpb25Nb2RlID0g
dGhpcy0+c3dlZXBEZXN0cnVjdGlvbk1vZGUoKTsKICAgICBFbXB0eU1vZGUgZW1wdHlNb2RlID0g
dGhpcy0+ZW1wdHlNb2RlKCk7CiAgICAgU2NyaWJibGVNb2RlIHNjcmliYmxlTW9kZSA9IHRoaXMt
PnNjcmliYmxlTW9kZSgpOwogICAgIE5ld2x5QWxsb2NhdGVkTW9kZSBuZXdseUFsbG9jYXRlZE1v
ZGUgPSB0aGlzLT5uZXdseUFsbG9jYXRlZE1vZGUoKTsKICAgICBNYXJrc01vZGUgbWFya3NNb2Rl
ID0gdGhpcy0+bWFya3NNb2RlKCk7CiAKLSAgICBGcmVlTGlzdCByZXN1bHQ7CiAgICAgYXV0byB0
cnlTcGVjaWFsaXplZCA9IFsmXSAoKSAtPiBib29sIHsKICAgICAgICAgaWYgKHN3ZWVwTW9kZSAh
PSBTd2VlcFRvRnJlZUxpc3QpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yODgsMTAg
KzI3OCwxMCBAQCBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpmaW5pc2hTd2VlCiAgICAg
ICAgIAogICAgICAgICBzd2l0Y2ggKG1hcmtzTW9kZSkgewogICAgICAgICBjYXNlIE1hcmtzTm90
U3RhbGU6Ci0gICAgICAgICAgICByZXN1bHQgPSBzcGVjaWFsaXplZFN3ZWVwPHRydWUsIE5vdEVt
cHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwg
RG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCwgTWFya3NOb3RTdGFsZT4oSXNFbXB0eSwgU3dlZXBU
b0ZyZWVMaXN0LCBCbG9ja0hhc0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUsIERvZXNOb3RIYXZl
TmV3bHlBbGxvY2F0ZWQsIE1hcmtzTm90U3RhbGUsIGRlc3Ryb3lGdW5jKTsKKyAgICAgICAgICAg
IHNwZWNpYWxpemVkU3dlZXA8dHJ1ZSwgTm90RW1wdHksIFN3ZWVwVG9GcmVlTGlzdCwgQmxvY2tI
YXNEZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBN
YXJrc05vdFN0YWxlPihmcmVlTGlzdCwgSXNFbXB0eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hh
c0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUsIERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1h
cmtzTm90U3RhbGUsIGRlc3Ryb3lGdW5jKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICBjYXNlIE1hcmtzU3RhbGU6Ci0gICAgICAgICAgICByZXN1bHQgPSBzcGVjaWFsaXplZFN3
ZWVwPHRydWUsIE5vdEVtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzRGVzdHJ1Y3RvcnMs
IERvbnRTY3JpYmJsZSwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCwgTWFya3NTdGFsZT4oSXNF
bXB0eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hhc0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUs
IERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzU3RhbGUsIGRlc3Ryb3lGdW5jKTsKKyAg
ICAgICAgICAgIHNwZWNpYWxpemVkU3dlZXA8dHJ1ZSwgTm90RW1wdHksIFN3ZWVwVG9GcmVlTGlz
dCwgQmxvY2tIYXNEZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxs
b2NhdGVkLCBNYXJrc1N0YWxlPihmcmVlTGlzdCwgSXNFbXB0eSwgU3dlZXBUb0ZyZWVMaXN0LCBC
bG9ja0hhc0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUsIERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0
ZWQsIE1hcmtzU3RhbGUsIGRlc3Ryb3lGdW5jKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICB9CiAgICAgICAgIApAQCAtMjk5LDEwICsyODksMTAgQEAgRnJlZUxpc3QgTWFya2Vk
QmxvY2s6OkhhbmRsZTo6ZmluaXNoU3dlZQogICAgIH07CiAgICAgCiAgICAgaWYgKHRyeVNwZWNp
YWxpemVkKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybjsKICAgICAK
ICAgICAvLyBUaGUgdGVtcGxhdGUgYXJndW1lbnRzIGRvbid0IG1hdHRlciBiZWNhdXNlIHRoZSBm
aXJzdCBvbmUgaXMgZmFsc2UuCi0gICAgcmV0dXJuIHNwZWNpYWxpemVkU3dlZXA8ZmFsc2UsIElz
RW1wdHksIFN3ZWVwT25seSwgQmxvY2tIYXNOb0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUsIEhh
c05ld2x5QWxsb2NhdGVkLCBNYXJrc1N0YWxlPihlbXB0eU1vZGUsIHN3ZWVwTW9kZSwgZGVzdHJ1
Y3Rpb25Nb2RlLCBzY3JpYmJsZU1vZGUsIG5ld2x5QWxsb2NhdGVkTW9kZSwgbWFya3NNb2RlLCBk
ZXN0cm95RnVuYyk7CisgICAgc3BlY2lhbGl6ZWRTd2VlcDxmYWxzZSwgSXNFbXB0eSwgU3dlZXBP
bmx5LCBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgSGFzTmV3bHlBbGxvY2F0
ZWQsIE1hcmtzU3RhbGU+KGZyZWVMaXN0LCBlbXB0eU1vZGUsIHN3ZWVwTW9kZSwgZGVzdHJ1Y3Rp
b25Nb2RlLCBzY3JpYmJsZU1vZGUsIG5ld2x5QWxsb2NhdGVkTW9kZSwgbWFya3NNb2RlLCBkZXN0
cm95RnVuYyk7CiB9CiAKIGlubGluZSBNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcERlc3RydWN0
aW9uTW9kZSBNYXJrZWRCbG9jazo6SGFuZGxlOjpzd2VlcERlc3RydWN0aW9uTW9kZSgpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuY3BwCShyZXZpc2lvbiAyMTc2NDYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTc3LDkgKzc3LDkgQEAgU3Vic3BhY2U6On5TdWJzcGFjZSgpCiB7CiB9CiAKLUZyZWVM
aXN0IFN1YnNwYWNlOjpmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiBibG9jaywgTWFy
a2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBNb2RlIHN3ZWVwTW9kZSkKK3ZvaWQgU3Vic3BhY2U6OmZp
bmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmIGJsb2NrLCBGcmVlTGlzdCogZnJlZUxpc3Qp
CiB7Ci0gICAgcmV0dXJuIGJsb2NrLmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlKHN3ZWVwTW9k
ZSwgRGVzdHJveUZ1bmMoKSk7CisgICAgYmxvY2suZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2Uo
ZnJlZUxpc3QsIERlc3Ryb3lGdW5jKCkpOwogfQogCiB2b2lkIFN1YnNwYWNlOjpkZXN0cm95KFZN
JiB2bSwgSlNDZWxsKiBjZWxsKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vi
c3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFj
ZS5oCShyZXZpc2lvbiAyMTc2NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJz
cGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIHB1YmxpYzoKICAgICAKICAg
ICAvLyBUaGUgcHVycG9zZSBvZiBvdmVycmlkaW5nIHRoaXMgaXMgdG8gc3BlY2lhbGl6ZSB0aGUg
c3dlZXAgZm9yIHlvdXIgZGVzdHJ1Y3RvcnMuIFRoaXMgd29uJ3QKICAgICAvLyBiZSBjYWxsZWQg
Zm9yIG5vLWRlc3RydWN0b3IgYmxvY2tzLiBUaGlzIG11c3QgY2FsbCBNYXJrZWRCbG9jazo6Zmlu
aXNoU3dlZXBLbm93aW5nU3Vic3BhY2UuCi0gICAgdmlydHVhbCBGcmVlTGlzdCBmaW5pc2hTd2Vl
cChNYXJrZWRCbG9jazo6SGFuZGxlJiwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBNb2RlKTsK
KyAgICB2aXJ0dWFsIHZvaWQgZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYsIEZyZWVM
aXN0Kik7CiAgICAgCiAgICAgLy8gVGhlc2UgZ2V0IGNhbGxlZCBmb3IgbGFyZ2Ugb2JqZWN0cy4K
ICAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveShWTSYsIEpTQ2VsbCopOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2VJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2VJbmxpbmVzLmgJKHJldmlzaW9uIDIxNzY0NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlSW5saW5lcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkpTQ2Vs
bC5oIgotI2luY2x1ZGUgIk1hcmtlZEFsbG9jYXRvci5oIgorI2luY2x1ZGUgIk1hcmtlZEFsbG9j
YXRvcklubGluZXMuaCIKICNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgogI2luY2x1ZGUgIk1hcmtl
ZFNwYWNlLmgiCiAjaW5jbHVkZSAiU3Vic3BhY2UuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMjE3NjQ2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAt
MTQ1OCw3ICsxNDU4LDcgQEAgcHVibGljOgogICAgICAgICBKdW1wIHBvcFBhdGg7CiAgICAgICAg
IEp1bXAgZG9uZTsKICAgICAgICAgCi0gICAgICAgIGxvYWQzMihBZGRyZXNzKGFsbG9jYXRvckdQ
UiwgTWFya2VkQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBPQkpFQ1RfT0ZGU0VUT0Yo
RnJlZUxpc3QsIHJlbWFpbmluZykpLCByZXN1bHRHUFIpOworICAgICAgICBsb2FkMzIoQWRkcmVz
cyhhbGxvY2F0b3JHUFIsIE1hcmtlZEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJl
ZUxpc3Q6Om9mZnNldE9mUmVtYWluaW5nKCkpLCByZXN1bHRHUFIpOwogICAgICAgICBwb3BQYXRo
ID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlc3VsdEdQUik7CiAgICAgICAgIGlmIChhbGxvY2F0b3Ip
CiAgICAgICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoLWFsbG9jYXRvci0+Y2VsbFNpemUoKSks
IHJlc3VsdEdQUiwgc2NyYXRjaEdQUik7CkBAIC0xNDcyLDggKzE0NzIsOCBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgbmVnUHRyKHJlc3VsdEdQUik7Ci0gICAg
ICAgIHN0b3JlMzIoc2NyYXRjaEdQUiwgQWRkcmVzcyhhbGxvY2F0b3JHUFIsIE1hcmtlZEFsbG9j
YXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgT0JKRUNUX09GRlNFVE9GKEZyZWVMaXN0LCByZW1h
aW5pbmcpKSk7Ci0gICAgICAgIEFkZHJlc3MgcGF5bG9hZEVuZEFkZHIgPSBBZGRyZXNzKGFsbG9j
YXRvckdQUiwgTWFya2VkQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBPQkpFQ1RfT0ZG
U0VUT0YoRnJlZUxpc3QsIHBheWxvYWRFbmQpKTsKKyAgICAgICAgc3RvcmUzMihzY3JhdGNoR1BS
LCBBZGRyZXNzKGFsbG9jYXRvckdQUiwgTWFya2VkQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0
KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZSZW1haW5pbmcoKSkpOworICAgICAgICBBZGRyZXNzIHBh
eWxvYWRFbmRBZGRyID0gQWRkcmVzcyhhbGxvY2F0b3JHUFIsIE1hcmtlZEFsbG9jYXRvcjo6b2Zm
c2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mUGF5bG9hZEVuZCgpKTsKICAgICAg
ICAgaWYgKGlzWDg2KCkpCiAgICAgICAgICAgICBhZGRQdHIocGF5bG9hZEVuZEFkZHIsIHJlc3Vs
dEdQUik7CiAgICAgICAgIGVsc2UgewpAQCAtMTQ4NSwxMyArMTQ4NSwyMyBAQCBwdWJsaWM6CiAg
ICAgICAgIAogICAgICAgICBwb3BQYXRoLmxpbmsodGhpcyk7CiAgICAgICAgIAotICAgICAgICBs
b2FkUHRyKEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBNYXJrZWRBbGxvY2F0b3I6Om9mZnNldE9mRnJl
ZUxpc3QoKSArIE9CSkVDVF9PRkZTRVRPRihGcmVlTGlzdCwgaGVhZCkpLCByZXN1bHRHUFIpOwot
ICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoVGVzdFB0cihaZXJvLCByZXN1bHRHUFIpKTsK
LSAgICAgICAgCi0gICAgICAgIC8vIFRoZSBvYmplY3QgaXMgaGFsZi1hbGxvY2F0ZWQ6IHdlIGhh
dmUgd2hhdCB3ZSBrbm93IGlzIGEgZnJlc2ggb2JqZWN0LCBidXQKLSAgICAgICAgLy8gaXQncyBz
dGlsbCBvbiB0aGUgR0MncyBmcmVlIGxpc3QuCi0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1
bHRHUFIpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgc3RvcmVQdHIoc2NyYXRjaEdQUiwgQWRkcmVz
cyhhbGxvY2F0b3JHUFIsIE1hcmtlZEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgT0JK
RUNUX09GRlNFVE9GKEZyZWVMaXN0LCBoZWFkKSkpOworICAgICAgICBsb2FkMzIoQWRkcmVzcyhh
bGxvY2F0b3JHUFIsIE1hcmtlZEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxp
c3Q6Om9mZnNldE9mSW5kZXgoKSksIHJlc3VsdEdQUik7CisKKyAgICAgICAgaWYgKGFsbG9jYXRv
cikKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihhbGxvY2F0b3ItPmZyZWVMaXN0KCku
YWRkcmVzc09mTGlzdCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhhbGxvY2F0b3JHUFIsIE1hcmtlZEFsbG9jYXRvcjo6b2Zmc2V0T2ZG
cmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mTGlzdCgpKSwgc2NyYXRjaEdQUik7CisKKyAg
ICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaFRlc3QzMihaZXJvLCByZXN1bHRHUFIpKTsKKyAg
ICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOworICAgICAgICBzdG9yZTMy
KHJlc3VsdEdQUiwgQWRkcmVzcyhhbGxvY2F0b3JHUFIsIE1hcmtlZEFsbG9jYXRvcjo6b2Zmc2V0
T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mSW5kZXgoKSkpOworICAgICAgICBsb2Fk
MTYoQmFzZUluZGV4KHNjcmF0Y2hHUFIsIHJlc3VsdEdQUiwgVGltZXNUd28pLCByZXN1bHRHUFIp
OworICAgICAgICBpZiAoaXNYODYoKSkKKyAgICAgICAgICAgIGFkZFB0cihBZGRyZXNzKGFsbG9j
YXRvckdQUiwgTWFya2VkQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6
b2Zmc2V0T2ZCbG9jaygpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICBsb2FkUHRyKEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBNYXJrZWRBbGxvY2F0b3I6Om9mZnNldE9m
RnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZkJsb2NrKCkpLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgICAgIGFkZFB0cihzY3JhdGNoR1BSLCByZXN1bHRHUFIpOworICAgICAgICB9CiAgICAg
ICAgIAogICAgICAgICBkb25lLmxpbmsodGhpcyk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmpl
Y3RTdWJzcGFjZS5jcHAJKHJldmlzaW9uIDIxNzY0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01Miw5ICs1Miw5IEBAIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2U6On5KU0Rlc3Ry
dWMKIHsKIH0KIAotRnJlZUxpc3QgSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZTo6ZmluaXNo
U3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYgaGFuZGxlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpT
d2VlcE1vZGUgc3dlZXBNb2RlKQordm9pZCBKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlOjpm
aW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiBoYW5kbGUsIEZyZWVMaXN0KiBmcmVlTGlz
dCkKIHsKLSAgICByZXR1cm4gaGFuZGxlLmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlKHN3ZWVw
TW9kZSwgRGVzdHJveUZ1bmMoKSk7CisgICAgaGFuZGxlLmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNw
YWNlKGZyZWVMaXN0LCBEZXN0cm95RnVuYygpKTsKIH0KIAogdm9pZCBKU0Rlc3RydWN0aWJsZU9i
amVjdFN1YnNwYWNlOjpkZXN0cm95KFZNJiB2bSwgSlNDZWxsKiBjZWxsKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGVzdHJ1Y3RpYmxl
T2JqZWN0U3Vic3BhY2UuaAkocmV2aXNpb24gMjE3NjQ2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNCw3ICszNCw3IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSBKU0Rlc3Ry
dWN0aWJsZU9iamVjdFN1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVhcCYpOwogICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZpcnR1YWwgfkpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UoKTsKICAgICAK
LSAgICBGcmVlTGlzdCBmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiwgTWFya2VkQmxv
Y2s6OkhhbmRsZTo6U3dlZXBNb2RlKSBvdmVycmlkZTsKKyAgICB2b2lkIGZpbmlzaFN3ZWVwKE1h
cmtlZEJsb2NrOjpIYW5kbGUmLCBGcmVlTGlzdCopIG92ZXJyaWRlOwogICAgIHZvaWQgZGVzdHJv
eShWTSYsIEpTQ2VsbCopIG92ZXJyaWRlOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxl
T2JqZWN0U3Vic3BhY2UuY3BwCShyZXZpc2lvbiAyMTc2NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Miw5ICs1Miw5IEBAIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJz
cGFjZTo6fkpTU2UKIHsKIH0KIAotRnJlZUxpc3QgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1
YnNwYWNlOjpmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiBoYW5kbGUsIE1hcmtlZEJs
b2NrOjpIYW5kbGU6OlN3ZWVwTW9kZSBzd2VlcE1vZGUpCit2b2lkIEpTU2VnbWVudGVkVmFyaWFi
bGVPYmplY3RTdWJzcGFjZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYgaGFuZGxl
LCBGcmVlTGlzdCogZnJlZUxpc3QpCiB7Ci0gICAgcmV0dXJuIGhhbmRsZS5maW5pc2hTd2VlcEtu
b3dpbmdTdWJzcGFjZShzd2VlcE1vZGUsIERlc3Ryb3lGdW5jKCkpOworICAgIGhhbmRsZS5maW5p
c2hTd2VlcEtub3dpbmdTdWJzcGFjZShmcmVlTGlzdCwgRGVzdHJveUZ1bmMoKSk7CiB9CiAKIHZv
aWQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlOjpkZXN0cm95KFZNJiB2bSwgSlND
ZWxsKiBjZWxsKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50
ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlLmgJKHJldmlz
aW9uIDIxNzY0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVk
VmFyaWFibGVPYmplY3RTdWJzcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBA
IHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0
U3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdmly
dHVhbCB+SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlKCk7CiAgICAgCi0gICAgRnJl
ZUxpc3QgZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYsIE1hcmtlZEJsb2NrOjpIYW5k
bGU6OlN3ZWVwTW9kZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBmaW5pc2hTd2VlcChNYXJrZWRCbG9j
azo6SGFuZGxlJiwgRnJlZUxpc3QqKSBvdmVycmlkZTsKICAgICB2b2lkIGRlc3Ryb3koVk0mLCBK
U0NlbGwqKSBvdmVycmlkZTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU3RyaW5nU3Vic3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU3RyaW5nU3Vic3BhY2UuY3BwCShyZXZpc2lvbiAyMTc2NDYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ1N1YnNwYWNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTIsOSArNTIsOSBAQCBKU1N0cmluZ1N1YnNwYWNlOjp+SlNTdHJpbmdTdWJz
cGFjZSgpCiB7CiB9CiAKLUZyZWVMaXN0IEpTU3RyaW5nU3Vic3BhY2U6OmZpbmlzaFN3ZWVwKE1h
cmtlZEJsb2NrOjpIYW5kbGUmIGhhbmRsZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBNb2Rl
IHN3ZWVwTW9kZSkKK3ZvaWQgSlNTdHJpbmdTdWJzcGFjZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxv
Y2s6OkhhbmRsZSYgaGFuZGxlLCBGcmVlTGlzdCogZnJlZUxpc3QpCiB7Ci0gICAgcmV0dXJuIGhh
bmRsZS5maW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZShzd2VlcE1vZGUsIERlc3Ryb3lGdW5jKCkp
OworICAgIGhhbmRsZS5maW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZShmcmVlTGlzdCwgRGVzdHJv
eUZ1bmMoKSk7CiB9CiAKIHZvaWQgSlNTdHJpbmdTdWJzcGFjZTo6ZGVzdHJveShWTSYgdm0sIEpT
Q2VsbCogY2VsbCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5n
U3Vic3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1N0cmluZ1N1YnNwYWNlLmgJKHJldmlzaW9uIDIxNzY0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU3RyaW5nU3Vic3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyAr
MzQsNyBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNTdHJpbmdTdWJzcGFjZShD
U3RyaW5nIG5hbWUsIEhlYXAmKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIH5KU1N0
cmluZ1N1YnNwYWNlKCk7CiAgICAgCi0gICAgRnJlZUxpc3QgZmluaXNoU3dlZXAoTWFya2VkQmxv
Y2s6OkhhbmRsZSYsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwTW9kZSkgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiwgRnJlZUxpc3QqKSBvdmVy
cmlkZTsKICAgICB2b2lkIGRlc3Ryb3koVk0mLCBKU0NlbGwqKSBvdmVycmlkZTsKIH07CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tT
dWJzcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmNwcAkocmV2aXNpb24gMjE3NjQ2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNw
YWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsOSArNTYsOSBAQCBKU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrU3Vic3BhY2U6On5KU1dlYkFzCiB7CiB9CiAKLUZyZWVMaXN0IEpTV2ViQXNzZW1ibHlD
b2RlQmxvY2tTdWJzcGFjZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYgaGFuZGxl
LCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcE1vZGUgc3dlZXBNb2RlKQordm9pZCBKU1dlYkFz
c2VtYmx5Q29kZUJsb2NrU3Vic3BhY2U6OmZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUm
IGhhbmRsZSwgRnJlZUxpc3QqIGZyZWVMaXN0KQogewotICAgIHJldHVybiBoYW5kbGUuZmluaXNo
U3dlZXBLbm93aW5nU3Vic3BhY2Uoc3dlZXBNb2RlLCBEZXN0cm95RnVuYygpKTsKKyAgICBoYW5k
bGUuZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2UoZnJlZUxpc3QsIERlc3Ryb3lGdW5jKCkpOwog
fQogCiB2b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZTo6ZGVzdHJveShWTSYgdm0s
IEpTQ2VsbCogY2VsbCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5oCShyZXZpc2lv
biAyMTc2NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
Q29kZUJsb2NrU3Vic3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBwdWJs
aWM6CiAgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVh
cCYpOwogICAgIHZpcnR1YWwgfkpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZSgpOwogICAg
IAotICAgIEZyZWVMaXN0IGZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmLCBNYXJrZWRC
bG9jazo6SGFuZGxlOjpTd2VlcE1vZGUpIG92ZXJyaWRlOworICAgIHZvaWQgZmluaXNoU3dlZXAo
TWFya2VkQmxvY2s6OkhhbmRsZSYsIEZyZWVMaXN0Kikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkZXN0
cm95KFZNJiwgSlNDZWxsKikgb3ZlcnJpZGU7CiB9OwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>311747</attachid>
            <date>2017-06-01 13:12:19 -0700</date>
            <delta_ts>2017-06-01 15:38:55 -0700</delta_ts>
            <desc>removed some pointer chasing</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>56544</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjE3NjYyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMCBA
QAorMjAxNy0wNi0wMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEdDIHNob3VsZCBrZWVwIGl0cyBmcmVlIGxpc3Qgb24gdGhlIHNpZGUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3Mjc5MworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgUHJldmlvdXNseSwgb3Vy
IGJ1bXAnbidwb3AgYWxsb2NhdG9yIHdvdWxkIHVzZSBhIGNvbnZlbnRpb25hbCBsaW5rZWQtbGlz
dCBmb3IgdGhlIGZyZWUtbGlzdC4KKyAgICAgICAgVGhlIGxpbmtlZC1saXN0IHdvdWxkIGJlIHRo
cmVhZGVkIHRocm91Z2ggZnJlZSBtZW1vcnksIGFzIGlzIHRoZSB1c3VhbCBjb252ZW50aW9uLgor
ICAgICAgICAKKyAgICAgICAgSG93ZXZlciwgaXQncyBxdWl0ZSBhIGJpdCBtb3JlIHNhbmUgdG8g
aGF2ZSB0aGUgZnJlZS1saXN0IHJlc2lkZSBzb21ld2hlcmUgb3RoZXIgdGhhbiB0aGUgZnJlZQor
ICAgICAgICBtZW1vcnkuIFRoaXMgcHV0cyB0aGUgZnJlZS1saXN0IGluIGFuIGFycmF5LiBJdCdz
IGEgc3RhY2sgb2YgMTYtYml0IG9mZnNldHMgaW50byB0aGUgYmxvY2suCisgICAgICAgIFRoZSBh
bGxvY2F0b3IgcG9wcyBhbiBvZmZzZXQgb2ZmIHRoZSBzdGFjaywgYW5kIGFkZHMgaXQgdG8gdGhl
IGN1cnJlbnQgYmxvY2sgcG9pbnRlci4gVGhpcworICAgICAgICBpc24ndCBhbnkgc2xvd2VyIHRo
YW4gdGhlIG9sZCBsaW5rZWQtbGlzdCBmcmVlLWxpc3QsIGFuZCBpdCBtYWtlcyB3ZWlyZCBpc3N1
ZXMgZWFzaWVyIHRvIGRlYnVnLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBoZWFwL0ZyZWVMaXN0LmNwcDoKKyAgICAgICAg
KEpTQzo6RnJlZUxpc3Q6OkZyZWVMaXN0KToKKyAgICAgICAgKEpTQzo6RnJlZUxpc3Q6On5GcmVl
TGlzdCk6CisgICAgICAgIChKU0M6OkZyZWVMaXN0OjpjbGVhcik6CisgICAgICAgIChKU0M6OkZy
ZWVMaXN0Ojppbml0aWFsaXplTGlzdCk6CisgICAgICAgIChKU0M6OkZyZWVMaXN0Ojppbml0aWFs
aXplQnVtcCk6CisgICAgICAgIChKU0M6OkZyZWVMaXN0Ojpjb250YWlucyk6CisgICAgICAgIChK
U0M6OkZyZWVMaXN0OjpkdW1wKToKKyAgICAgICAgKiBoZWFwL0ZyZWVMaXN0Lmg6CisgICAgICAg
IChKU0M6OkZyZWVMaXN0OjphbGxvY2F0aW9uV2lsbEZhaWwpOgorICAgICAgICAoSlNDOjpGcmVl
TGlzdDo6b3JpZ2luYWxTaXplKToKKyAgICAgICAgKEpTQzo6RnJlZUxpc3Q6OmFkZHJlc3NPZkxp
c3QpOgorICAgICAgICAoSlNDOjpGcmVlTGlzdDo6b2Zmc2V0T2ZCbG9jayk6CisgICAgICAgIChK
U0M6OkZyZWVMaXN0OjpvZmZzZXRPZkxpc3QpOgorICAgICAgICAoSlNDOjpGcmVlTGlzdDo6b2Zm
c2V0T2ZJbmRleCk6CisgICAgICAgIChKU0M6OkZyZWVMaXN0OjpvZmZzZXRPZlBheWxvYWRFbmQp
OgorICAgICAgICAoSlNDOjpGcmVlTGlzdDo6b2Zmc2V0T2ZSZW1haW5pbmcpOgorICAgICAgICAo
SlNDOjpGcmVlTGlzdDo6b2Zmc2V0T2ZPcmlnaW5hbFNpemUpOgorICAgICAgICAoSlNDOjpGcmVl
TGlzdDo6RnJlZUxpc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpGcmVlTGlzdDo6bGlzdCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkZyZWVMaXN0OjpidW1wKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6RnJlZUxpc3Q6Om9wZXJhdG9yPT0pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpG
cmVlTGlzdDo6b3BlcmF0b3IhPSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkZyZWVMaXN0Ojpv
cGVyYXRvciBib29sKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL0ZyZWVMaXN0SW5saW5lcy5o
OiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RnJlZUxpc3Q6OmFkZEZyZWVDZWxsKToKKyAgICAgICAg
KEpTQzo6RnJlZUxpc3Q6OmFsbG9jYXRlKToKKyAgICAgICAgKEpTQzo6RnJlZUxpc3Q6OmZvckVh
Y2gpOgorICAgICAgICAoSlNDOjpGcmVlTGlzdDo6dG9PZmZzZXQpOgorICAgICAgICAoSlNDOjpG
cmVlTGlzdDo6ZnJvbU9mZnNldCk6CisgICAgICAgICogaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIu
Y3BwOgorICAgICAgICAoSlNDOjpJbmNyZW1lbnRhbFN3ZWVwZXI6OnN3ZWVwTmV4dEJsb2NrKToK
KyAgICAgICAgKiBoZWFwL01hcmtlZEFsbG9jYXRvci5jcHA6CisgICAgICAgIChKU0M6Ok1hcmtl
ZEFsbG9jYXRvcjo6TWFya2VkQWxsb2NhdG9yKToKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2Nh
dG9yOjpkaWRDb25zdW1lRnJlZUxpc3QpOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6
OnRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3RpbmcpOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxv
Y2F0b3I6OnRyeUFsbG9jYXRlSW4pOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OmFs
bG9jYXRlU2xvd0Nhc2VJbXBsKToKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjpzdG9w
QWxsb2NhdGluZyk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6cHJlcGFyZUZvckFs
bG9jYXRpb24pOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OnJlc3VtZUFsbG9jYXRp
bmcpOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OnN3ZWVwKToKKyAgICAgICAgKEpT
Qzo6TWFya2VkQWxsb2NhdG9yOjpzZXRGcmVlTGlzdCk6IERlbGV0ZWQuCisgICAgICAgICogaGVh
cC9NYXJrZWRBbGxvY2F0b3IuaDoKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjpmcmVl
TGlzdCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6aXNGcmVlTGlzdGVkQ2VsbCk6
IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9NYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmg6CisgICAg
ICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6aXNGcmVlTGlzdGVkQ2VsbCk6CisgICAgICAgIChK
U0M6Ok1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGUpOgorICAgICAgICAoSlNDOjpNYXJrZWRB
bGxvY2F0b3I6OmFsbG9jYXRlKToKKyAgICAgICAgKiBoZWFwL01hcmtlZEJsb2NrLmNwcDoKKyAg
ICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OkhhbmRsZTo6c3RvcEFsbG9jYXRpbmcpOgorICAgICAg
ICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjpsYXN0Q2hhbmNlVG9GaW5hbGl6ZSk6CisgICAg
ICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6OnJlc3VtZUFsbG9jYXRpbmcpOgorICAgICAg
ICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjp6YXApOgorICAgICAgICAoSlNDOjpNYXJrZWRC
bG9jazo6SGFuZGxlOjpzd2VlcCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6
OmlzRnJlZUxpc3RlZENlbGwpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjpm
b3JFYWNoRnJlZUNlbGwpOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvTWFya2VkQmxvY2suaDoK
KyAgICAgICAgKiBoZWFwL01hcmtlZEJsb2NrSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpNYXJr
ZWRCbG9jazo6SGFuZGxlOjpzcGVjaWFsaXplZFN3ZWVwKToKKyAgICAgICAgKEpTQzo6TWFya2Vk
QmxvY2s6OkhhbmRsZTo6ZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2UpOgorICAgICAgICAoSlND
OjpNYXJrZWRCbG9jazo6SGFuZGxlOjppc0ZyZWVMaXN0ZWRDZWxsKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBoZWFwL1N1YnNwYWNlLmNwcDoKKyAgICAgICAgKEpTQzo6U3Vic3BhY2U6OmZpbmlzaFN3
ZWVwKToKKyAgICAgICAgKiBoZWFwL1N1YnNwYWNlLmg6CisgICAgICAgICogaml0L0Fzc2VtYmx5
SGVscGVycy5oOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRBbGxvY2F0ZVdp
dGhOb25OdWxsQWxsb2NhdG9yKToKKyAgICAgICAgKiBydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0U3Vic3BhY2UuY3BwOgorICAgICAgICAoSlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNw
YWNlOjpmaW5pc2hTd2VlcCk6CisgICAgICAgICogcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVj
dFN1YnNwYWNlLmg6CisgICAgICAgICogcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0
U3Vic3BhY2UuY3BwOgorICAgICAgICAoSlNDOjpKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vi
c3BhY2U6OmZpbmlzaFN3ZWVwKToKKyAgICAgICAgKiBydW50aW1lL0pTU2VnbWVudGVkVmFyaWFi
bGVPYmplY3RTdWJzcGFjZS5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmdTdWJzcGFjZS5j
cHA6CisgICAgICAgIChKU0M6OkpTU3RyaW5nU3Vic3BhY2U6OmZpbmlzaFN3ZWVwKToKKyAgICAg
ICAgKiBydW50aW1lL0pTU3RyaW5nU3Vic3BhY2UuaDoKKyAgICAgICAgKiB3YXNtL2pzL0pTV2Vi
QXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5jcHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1i
bHlDb2RlQmxvY2tTdWJzcGFjZTo6ZmluaXNoU3dlZXApOgorICAgICAgICAqIHdhc20vanMvSlNX
ZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmg6CisKIDIwMTctMDYtMDEgIFRvbWFzIFBvcGVs
YSAgPHRwb3BlbGFAcmVkaGF0LmNvbT4sIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgog
CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCkgaW4gSW5mZXJyZWRUeXBlOjpr
aW5kRm9yRmxhZ3MoKSBvbiBCaWctRW5kaWFucwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDIxNzY0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01MDEs
NiArNTAxLDcgQEAKIAkJMEY2NEIyNzkxQTc5NTdCMjAwNkU0RTY2IC8qIENhbGxFZGdlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjRCMjc3MUE3
OTU3QjIwMDZFNEU2NiAvKiBDYWxsRWRnZS5jcHAgKi87IH07CiAJCTBGNjRCMjdBMUE3OTU3QjIw
MDZFNEU2NiAvKiBDYWxsRWRnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY2NEIyNzgxQTc5NTdCMjAwNkU0RTY2IC8qIENhbGxFZGdlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY2NEVBRjMxQzRF
Q0QwNjAwNjIxRTlCIC8qIEFpckFyZ0lubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjRFQUYyMUM0RUNEMDYwMDYyMUU5QiAvKiBBaXJBcmdJ
bmxpbmVzLmggKi87IH07CisJCTBGNjU4NUUxMUVFMDgwNUEwMDk1MTc2RCAvKiBGcmVlTGlzdElu
bGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NjU4NUUwMUVFMDgwNTcwMDk1MTc2RCAvKiBGcmVlTGlzdElubGluZXMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjY2MEUzNzFFMDUxN0I5MDAz
MTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NjBFMzMxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdD
b25zdHJhaW50LmNwcCAqLzsgfTsKIAkJMEY2NjBFMzgxRTA1MTdCQjAwMzE0NjJDIC8qIE1hcmtp
bmdDb25zdHJhaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjY2MEUzNDFFMDUxN0I3MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjY2MEUzOTFF
MDUxN0JGMDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnRTZXQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NjBFMzUxRTA1MTdCNzAwMzE0NjJD
IC8qIE1hcmtpbmdDb25zdHJhaW50U2V0LmNwcCAqLzsgfTsKQEAgLTMwNzcsNiArMzA3OCw3IEBA
CiAJCTBGNjRCMjc3MUE3OTU3QjIwMDZFNEU2NiAvKiBDYWxsRWRnZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWxsRWRnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGNjRCMjc4MUE3OTU3QjIwMDZFNEU2NiAvKiBDYWxsRWRnZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWxsRWRnZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjY0RUFGMjFDNEVDRDA2MDA2MjFFOUIgLyogQWlyQXJnSW5saW5lcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJBcmdJbmxpbmVzLmg7IHBhdGgg
PSBiMy9haXIvQWlyQXJnSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjY1ODVFMDFFRTA4MDU3MDA5NTE3NkQgLyogRnJlZUxpc3RJbmxpbmVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZyZWVMaXN0SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjY2MEUzMzFFMDUxN0I3MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFp
bnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFya2luZ0NvbnN0
cmFpbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY2MEUzNDFFMDUxN0I3
MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTWFya2luZ0NvbnN0cmFpbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY2NjBFMzUxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50U2V0LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hcmtpbmdDb25zdHJhaW50U2V0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTYwMTksNiArNjAyMSw3IEBACiAJ
CQkJMkE4MzYzODQxOEQ3RDBFRTAwMDBFQkNDIC8qIEVkZW5HQ0FjdGl2aXR5Q2FsbGJhY2suaCAq
LywKIAkJCQkwRjU1MTNBNzFENUE2OENCMDBDMzJCRDggLyogRnJlZUxpc3QuY3BwICovLAogCQkJ
CTBGNTUxM0E1MUQ1QTY4MkEwMEMzMkJEOCAvKiBGcmVlTGlzdC5oICovLAorCQkJCTBGNjU4NUUw
MUVFMDgwNTcwMDk1MTc2RCAvKiBGcmVlTGlzdElubGluZXMuaCAqLywKIAkJCQkyQTgzNjM4NzE4
RDdEMEZFMDAwMEVCQ0MgLyogRnVsbEdDQWN0aXZpdHlDYWxsYmFjay5jcHAgKi8sCiAJCQkJMkE4
MzYzODgxOEQ3RDBGRTAwMDBFQkNDIC8qIEZ1bGxHQ0FjdGl2aXR5Q2FsbGJhY2suaCAqLywKIAkJ
CQkyQUFDRTYzQTE4Q0E1QTAzMDBFRDAxOTEgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCAqLywK
QEAgLTg2NjEsNiArODY2NCw3IEBACiAJCQkJMEYyMzVCRUUxNzE3OEU3MzAwNjkwQzdGIC8qIERG
R09TUkV4aXRQcmVwYXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQzYzQjcxRTYzNDNF
RDAwQzEzODM5IC8qIEIzQXRvbWljVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjIzNzk4
MUFFNDVDQTcwMEQ0MDJFQSAvKiBERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2UuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGNjU4NUUxMUVFMDgwNUEwMDk1MTc2RCAvKiBGcmVlTGlzdElubGluZXMuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGRkZDOTVDMTRFRjkwQUYwMEM3MjUzMiAvKiBERkdQaGFzZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMzdDNzM4RDIxRURCNTZFNDAwM0YyQjBCIC8qIFBhcnNlSW50
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCOUNFQjE5RDBCQTdEMDBCMUQxQjUgLyogREZHUGhp
Q2hpbGRyZW4uaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvRnJlZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0ZyZWVMaXN0LmNwcAkocmV2aXNpb24gMjE3NjQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvRnJlZUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwyOSArMjYsNzEgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGcmVlTGlzdC5oIgogCisjaW5jbHVkZSAiRnJl
ZUxpc3RJbmxpbmVzLmgiCisjaW5jbHVkZSAiTWFya2VkQmxvY2suaCIKKyNpbmNsdWRlIDx3dGYv
Q29tbWFQcmludGVyLmg+CisKIG5hbWVzcGFjZSBKU0MgewogCi1ib29sIEZyZWVMaXN0Ojpjb250
YWlucyhjb25zdCB2b2lkKiB0YXJnZXQpIGNvbnN0CitGcmVlTGlzdDo6RnJlZUxpc3QodW5zaWdu
ZWQgY2VsbFNpemUpCisgICAgOiBtX2NlbGxTaXplKGNlbGxTaXplKQogewotICAgIGlmIChyZW1h
aW5pbmcpIHsKLSAgICAgICAgY29uc3Qgdm9pZCogc3RhcnQgPSAocGF5bG9hZEVuZCAtIHJlbWFp
bmluZyk7Ci0gICAgICAgIGNvbnN0IHZvaWQqIGVuZCA9IHBheWxvYWRFbmQ7CisgICAgc3RhdGlj
X2Fzc2VydChNYXJrZWRCbG9jazo6YmxvY2tTaXplIDw9ICgxdSA8PCAoc2l6ZW9mKEZyZWVPZmZz
ZXQpICogOCkpLCAiRnJlZUxpc3QgYXNzdW1lcyB0aGF0IEZyZWVPZmZzZXQgaXMgYmlnIGVub3Vn
aCB0byBleHByZXNzIGFsbCBwb3NzaWJsZSBibG9jayBvZmZzZXRzIik7Cit9CisKK0ZyZWVMaXN0
Ojp+RnJlZUxpc3QoKQoreworfQorCit2b2lkIEZyZWVMaXN0OjpjbGVhcigpCit7CisgICAgbV9i
bG9jayA9IG51bGxwdHI7CisgICAgbV9pbmRleCA9IDA7CisgICAgbV9wYXlsb2FkRW5kID0gbnVs
bHB0cjsKKyAgICBtX3JlbWFpbmluZyA9IDA7CisgICAgbV9vcmlnaW5hbFNpemUgPSAwOworfQor
Cit2b2lkIEZyZWVMaXN0Ojppbml0aWFsaXplTGlzdChNYXJrZWRCbG9jayogYmxvY2spCit7Cisg
ICAgbV9ibG9jayA9IGJsb2NrOworICAgIG1faW5kZXggPSAwOworICAgIG1fcGF5bG9hZEVuZCA9
IG51bGxwdHI7CisgICAgbV9yZW1haW5pbmcgPSAwOworICAgIG1fb3JpZ2luYWxTaXplID0gMDsK
K30KKwordm9pZCBGcmVlTGlzdDo6aW5pdGlhbGl6ZUJ1bXAoY2hhciogcGF5bG9hZEVuZCwgdW5z
aWduZWQgcmVtYWluaW5nKQoreworICAgIG1fYmxvY2sgPSBudWxscHRyOworICAgIG1faW5kZXgg
PSAwOworICAgIG1fcGF5bG9hZEVuZCA9IHBheWxvYWRFbmQ7CisgICAgbV9yZW1haW5pbmcgPSBy
ZW1haW5pbmc7CisgICAgbV9vcmlnaW5hbFNpemUgPSByZW1haW5pbmc7Cit9CisKK2Jvb2wgRnJl
ZUxpc3Q6OmNvbnRhaW5zKEhlYXBDZWxsKiB0YXJnZXQpIGNvbnN0Cit7CisgICAgaWYgKG1fcmVt
YWluaW5nKSB7CisgICAgICAgIGNvbnN0IHZvaWQqIHN0YXJ0ID0gKG1fcGF5bG9hZEVuZCAtIG1f
cmVtYWluaW5nKTsKKyAgICAgICAgY29uc3Qgdm9pZCogZW5kID0gbV9wYXlsb2FkRW5kOwogICAg
ICAgICByZXR1cm4gKHN0YXJ0IDw9IHRhcmdldCkgJiYgKHRhcmdldCA8IGVuZCk7CiAgICAgfQog
Ci0gICAgRnJlZUNlbGwqIGNhbmRpZGF0ZSA9IGhlYWQ7Ci0gICAgd2hpbGUgKGNhbmRpZGF0ZSkg
ewotICAgICAgICBpZiAoY2FuZGlkYXRlID09IHRhcmdldCkKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSBtX2luZGV4OyBpLS07KSB7CisgICAgICAgIGlmIChmcm9tT2Zmc2V0KG1fbGlzdFtpXSkgPT0g
dGFyZ2V0KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGNhbmRpZGF0ZSA9IGNh
bmRpZGF0ZS0+bmV4dDsKICAgICB9Ci0KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHZvaWQgRnJl
ZUxpc3Q6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKLSAgICBvdXQucHJpbnQoInto
ZWFkID0gIiwgUmF3UG9pbnRlcihoZWFkKSwgIiwgcGF5bG9hZEVuZCA9ICIsIFJhd1BvaW50ZXIo
cGF5bG9hZEVuZCksICIsIHJlbWFpbmluZyA9ICIsIHJlbWFpbmluZywgIiwgb3JpZ2luYWxTaXpl
ID0gIiwgb3JpZ2luYWxTaXplLCAifSIpOworICAgIG91dC5wcmludCgie2Jsb2NrID0gIiwgUmF3
UG9pbnRlcihtX2Jsb2NrKSwgIiwgbGlzdCA9IFsiKTsKKyAgICBDb21tYVByaW50ZXIgY29tbWE7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1faW5kZXg7ICsraSkKKyAgICAgICAgb3V0
LnByaW50KGNvbW1hLCBtX2xpc3RbaV0pOworICAgIG91dC5wcmludCgiXSwgaW5kZXggPSAiLCBt
X2luZGV4LCAiLCBwYXlsb2FkRW5kID0gIiwgUmF3UG9pbnRlcihtX3BheWxvYWRFbmQpLCAiLCBy
ZW1haW5pbmcgPSAiLCBtX3JlbWFpbmluZywgIiwgb3JpZ2luYWxTaXplID0gIiwgbV9vcmlnaW5h
bFNpemUsICJ9Iik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvRnJlZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9GcmVlTGlzdC5oCShyZXZpc2lvbiAyMTc2NDYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9GcmVlTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2OCArMjUsNjYg
QEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgorI2luY2x1ZGUg
PHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgogCiBuYW1l
c3BhY2UgSlNDIHsKIAotc3RydWN0IEZyZWVDZWxsIHsKLSAgICBGcmVlQ2VsbCogbmV4dDsKLX07
Ci0gICAgICAgIAotLy8gVGhpcyByZXByZXNlbnRhdGlvbiBvZiBhIEZyZWVMaXN0IGlzIGNvbnZl
bmllbnQgZm9yIHRoZSBNYXJrZWRBbGxvY2F0b3IuCi0KLXN0cnVjdCBGcmVlTGlzdCB7Ci0gICAg
RnJlZUNlbGwqIGhlYWQgeyBudWxscHRyIH07Ci0gICAgY2hhciogcGF5bG9hZEVuZCB7IG51bGxw
dHIgfTsKLSAgICB1bnNpZ25lZCByZW1haW5pbmcgeyAwIH07Ci0gICAgdW5zaWduZWQgb3JpZ2lu
YWxTaXplIHsgMCB9OwotICAgIAotICAgIEZyZWVMaXN0KCkKLSAgICB7Ci0gICAgfQotICAgIAot
ICAgIHN0YXRpYyBGcmVlTGlzdCBsaXN0KEZyZWVDZWxsKiBoZWFkLCB1bnNpZ25lZCBieXRlcykK
LSAgICB7Ci0gICAgICAgIEZyZWVMaXN0IHJlc3VsdDsKLSAgICAgICAgcmVzdWx0LmhlYWQgPSBo
ZWFkOwotICAgICAgICByZXN1bHQucmVtYWluaW5nID0gMDsKLSAgICAgICAgcmVzdWx0Lm9yaWdp
bmFsU2l6ZSA9IGJ5dGVzOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAKLSAg
ICBzdGF0aWMgRnJlZUxpc3QgYnVtcChjaGFyKiBwYXlsb2FkRW5kLCB1bnNpZ25lZCByZW1haW5p
bmcpCi0gICAgewotICAgICAgICBGcmVlTGlzdCByZXN1bHQ7Ci0gICAgICAgIHJlc3VsdC5wYXls
b2FkRW5kID0gcGF5bG9hZEVuZDsKLSAgICAgICAgcmVzdWx0LnJlbWFpbmluZyA9IHJlbWFpbmlu
ZzsKLSAgICAgICAgcmVzdWx0Lm9yaWdpbmFsU2l6ZSA9IHJlbWFpbmluZzsKLSAgICAgICAgcmV0
dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZyZWVM
aXN0JiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBoZWFkID09IG90aGVyLmhl
YWQKLSAgICAgICAgICAgICYmIHBheWxvYWRFbmQgPT0gb3RoZXIucGF5bG9hZEVuZAotICAgICAg
ICAgICAgJiYgcmVtYWluaW5nID09IG90aGVyLnJlbWFpbmluZwotICAgICAgICAgICAgJiYgb3Jp
Z2luYWxTaXplID09IG90aGVyLm9yaWdpbmFsU2l6ZTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IEZyZWVMaXN0JiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJl
dHVybiAhKCp0aGlzID09IG90aGVyKTsKLSAgICB9Ci0gICAgCi0gICAgZXhwbGljaXQgb3BlcmF0
b3IgYm9vbCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gKnRoaXMgIT0gRnJlZUxpc3Qo
KTsKLSAgICB9CitjbGFzcyBIZWFwQ2VsbDsKIAotICAgIGJvb2wgY29udGFpbnMoY29uc3Qgdm9p
ZCogdGFyZ2V0KSBjb25zdDsKLQotICAgIGJvb2wgYWxsb2NhdGlvbldpbGxGYWlsKCkgY29uc3Qg
eyByZXR1cm4gIWhlYWQgJiYgIXJlbWFpbmluZzsgfQorY2xhc3MgRnJlZUxpc3QgeworICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKEZyZWVMaXN0KTsKKyAgICAKK3B1YmxpYzoKKyAgICB0eXBlZGVm
IHVpbnQxNl90IEZyZWVPZmZzZXQ7CisgICAgdHlwZWRlZiBzdGQ6OmFycmF5PEZyZWVPZmZzZXQs
IE1hcmtlZEJsb2NrOjphdG9tc1BlckJsb2NrPiBGcmVlT2Zmc2V0TGlzdDsKKyAgICAKKyAgICBG
cmVlTGlzdCh1bnNpZ25lZCBjZWxsU2l6ZSk7CisgICAgfkZyZWVMaXN0KCk7CisgICAgCisgICAg
dm9pZCBjbGVhcigpOworICAgIAorICAgIHZvaWQgaW5pdGlhbGl6ZUxpc3QoTWFya2VkQmxvY2sq
KTsKKyAgICB2b2lkIGFkZEZyZWVDZWxsKEhlYXBDZWxsKik7CisgICAgCisgICAgdm9pZCBpbml0
aWFsaXplQnVtcChjaGFyKiBwYXlsb2FkRW5kLCB1bnNpZ25lZCByZW1haW5pbmcpOworICAgIAor
ICAgIGJvb2wgYWxsb2NhdGlvbldpbGxGYWlsKCkgY29uc3QgeyByZXR1cm4gIW1faW5kZXggJiYg
IW1fcmVtYWluaW5nOyB9CiAgICAgYm9vbCBhbGxvY2F0aW9uV2lsbFN1Y2NlZWQoKSBjb25zdCB7
IHJldHVybiAhYWxsb2NhdGlvbldpbGxGYWlsKCk7IH0KICAgICAKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jPgorICAgIEhlYXBDZWxsKiBhbGxvY2F0ZShjb25zdCBGdW5jJiBzbG93UGF0aCk7
CisgICAgCisgICAgYm9vbCBjb250YWlucyhIZWFwQ2VsbCopIGNvbnN0OworICAgIAorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgdm9pZCBmb3JFYWNoKGNvbnN0IEZ1bmMmKSBjb25z
dDsKKyAgICAKKyAgICB1bnNpZ25lZCBvcmlnaW5hbFNpemUoKSBjb25zdCB7IHJldHVybiBtX29y
aWdpbmFsU2l6ZTsgfQorCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkJsb2NrKCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZyZWVMaXN0LCBtX2Jsb2NrKTsgfQorICAgIHN0YXRpYyBw
dHJkaWZmX3Qgb2Zmc2V0T2ZMaXN0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZyZWVMaXN0
LCBtX2xpc3QpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkluZGV4KCkgeyByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKEZyZWVMaXN0LCBtX2luZGV4KTsgfQorICAgIHN0YXRpYyBwdHJk
aWZmX3Qgb2Zmc2V0T2ZQYXlsb2FkRW5kKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZyZWVM
aXN0LCBtX3BheWxvYWRFbmQpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlJlbWFp
bmluZygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihGcmVlTGlzdCwgbV9yZW1haW5pbmcpOyB9
CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk9yaWdpbmFsU2l6ZSgpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihGcmVlTGlzdCwgbV9vcmlnaW5hbFNpemUpOyB9CisgICAgCiAgICAgdm9p
ZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIEZyZWVPZmZz
ZXQgdG9PZmZzZXQoSGVhcENlbGwqKSBjb25zdDsKKyAgICBIZWFwQ2VsbCogZnJvbU9mZnNldChG
cmVlT2Zmc2V0KSBjb25zdDsKKyAgICAKKyAgICBNYXJrZWRCbG9jayogbV9ibG9jayB7IG51bGxw
dHIgfTsKKyAgICBjaGFyKiBtX3BheWxvYWRFbmQgeyBudWxscHRyIH07CisgICAgdW5zaWduZWQg
bV9pbmRleCB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX3JlbWFpbmluZyB7IDAgfTsKKyAgICB1bnNp
Z25lZCBtX29yaWdpbmFsU2l6ZSB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX2NlbGxTaXplIHsgMCB9
OworCisgICAgLy8gUHV0IHRoaXMgYXQgdGhlIGVuZCB0byBrZWVwIHRoZSBvZmZzZXRzIHRvIHRo
ZSBvdGhlciB0aGluZ3Mgc21hbGwuCisgICAgRnJlZU9mZnNldExpc3QgbV9saXN0OwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9GcmVl
TGlzdElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9G
cmVlTGlzdElubGluZXMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9GcmVlTGlzdElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgzIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSAiRnJlZUxpc3QuaCIKKyNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgorCitu
YW1lc3BhY2UgSlNDIHsKKworaW5saW5lIHZvaWQgRnJlZUxpc3Q6OmFkZEZyZWVDZWxsKEhlYXBD
ZWxsKiBjZWxsKQoreworICAgIG1fbGlzdFttX2luZGV4KytdID0gdG9PZmZzZXQoY2VsbCk7Cisg
ICAgbV9vcmlnaW5hbFNpemUgKz0gbV9jZWxsU2l6ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
RnVuYz4KK0hlYXBDZWxsKiBGcmVlTGlzdDo6YWxsb2NhdGUoY29uc3QgRnVuYyYgc2xvd1BhdGgp
Cit7CisgICAgdW5zaWduZWQgcmVtYWluaW5nID0gbV9yZW1haW5pbmc7CisgICAgaWYgKHJlbWFp
bmluZykgeworICAgICAgICB1bnNpZ25lZCBjZWxsU2l6ZSA9IG1fY2VsbFNpemU7CisgICAgICAg
IHJlbWFpbmluZyAtPSBjZWxsU2l6ZTsKKyAgICAgICAgbV9yZW1haW5pbmcgPSByZW1haW5pbmc7
CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPihtX3BheWxvYWRFbmQgLSBy
ZW1haW5pbmcgLSBjZWxsU2l6ZSk7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGluZGV4ID0g
bV9pbmRleDsKKyAgICBpZiAoVU5MSUtFTFkoIWluZGV4KSkKKyAgICAgICAgcmV0dXJuIHNsb3dQ
YXRoKCk7CisgICAgCisgICAgLS1pbmRleDsKKyAgICBtX2luZGV4ID0gaW5kZXg7CisgICAgcmV0
dXJuIGZyb21PZmZzZXQobV9saXN0W2luZGV4XSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1
bmM+Cit2b2lkIEZyZWVMaXN0Ojpmb3JFYWNoKGNvbnN0IEZ1bmMmIGZ1bmMpIGNvbnN0Cit7Cisg
ICAgaWYgKG1fcmVtYWluaW5nKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgcmVtYWluaW5nID0g
bV9yZW1haW5pbmc7IHJlbWFpbmluZzsgcmVtYWluaW5nIC09IG1fY2VsbFNpemUpCisgICAgICAg
ICAgICBmdW5jKGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KG1fcGF5bG9hZEVuZCAtIHJlbWFpbmlu
ZykpOworICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXg7IGkt
LTspCisgICAgICAgICAgICBmdW5jKGZyb21PZmZzZXQobV9saXN0W2ldKSk7CisgICAgfQorfQor
CitpbmxpbmUgRnJlZUxpc3Q6OkZyZWVPZmZzZXQgRnJlZUxpc3Q6OnRvT2Zmc2V0KEhlYXBDZWxs
KiBjZWxsKSBjb25zdAoreworICAgIHVpbnRwdHJfdCByZXN1bHQgPSBiaXR3aXNlX2Nhc3Q8dWlu
dHB0cl90PihjZWxsKSAtIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG1fYmxvY2spOworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxGcmVlT2Zmc2V0PihyZXN1bHQpOworfQorCitpbmxpbmUgSGVhcENl
bGwqIEZyZWVMaXN0Ojpmcm9tT2Zmc2V0KEZyZWVPZmZzZXQgb2Zmc2V0KSBjb25zdAoreworICAg
IHJldHVybiBiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KG9m
ZnNldCkgKyBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihtX2Jsb2NrKSk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRh
bFN3ZWVwZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lu
Y3JlbWVudGFsU3dlZXBlci5jcHAJKHJldmlzaW9uIDIxNzY0NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3
LDcgKzg3LDcgQEAgYm9vbCBJbmNyZW1lbnRhbFN3ZWVwZXI6OnN3ZWVwTmV4dEJsb2NrKAogICAg
IAogICAgIGlmIChibG9jaykgewogICAgICAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0MobV92
bS0+aGVhcCk7Ci0gICAgICAgIGJsb2NrLT5zd2VlcCgpOworICAgICAgICBibG9jay0+c3dlZXAo
bnVsbHB0cik7CiAgICAgICAgIG1fdm0tPmhlYXAub2JqZWN0U3BhY2UoKS5mcmVlT3JTaHJpbmtC
bG9jayhibG9jayk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMjE3
NjQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsOCBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIE1hcmtl
ZEFsbG9jYXRvcjo6TWFya2VkQWxsb2NhdG9yKEhlYXAqIGhlYXAsIFN1YnNwYWNlKiBzdWJzcGFj
ZSwgc2l6ZV90IGNlbGxTaXplKQotICAgIDogbV9jdXJyZW50QmxvY2soMCkKKyAgICA6IG1fZnJl
ZUxpc3QoY2VsbFNpemUpCisgICAgLCBtX2N1cnJlbnRCbG9jaygwKQogICAgICwgbV9sYXN0QWN0
aXZlQmxvY2soMCkKICAgICAsIG1fY2VsbFNpemUoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNlbGxT
aXplKSkKICAgICAsIG1fYXR0cmlidXRlcyhzdWJzcGFjZS0+YXR0cmlidXRlcygpKQpAQCAtODgs
NyArODksNyBAQCB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6ZGlkQ29uc3VtZUZyZWVMaXN0CiAgICAg
aWYgKG1fY3VycmVudEJsb2NrKQogICAgICAgICBtX2N1cnJlbnRCbG9jay0+ZGlkQ29uc3VtZUZy
ZWVMaXN0KCk7CiAgICAgCi0gICAgc2V0RnJlZUxpc3QoRnJlZUxpc3QoKSk7CisgICAgbV9mcmVl
TGlzdC5jbGVhcigpOwogICAgIG1fY3VycmVudEJsb2NrID0gbnVsbHB0cjsKIH0KIApAQCAtOTcs
NyArOTgsNyBAQCB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlV2l0aG91CiAgICAg
U3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogICAgIAogICAgIEFT
U0VSVCghbV9jdXJyZW50QmxvY2spOwotICAgIEFTU0VSVCghbV9mcmVlTGlzdCk7CisgICAgQVNT
RVJUKG1fZnJlZUxpc3QuYWxsb2NhdGlvbldpbGxGYWlsKCkpOwogICAgIAogICAgIGZvciAoOzsp
IHsKICAgICAgICAgbV9hbGxvY2F0aW9uQ3Vyc29yID0gKG1fY2FuQWxsb2NhdGVCdXROb3RFbXB0
eSB8IG1fZW1wdHkpLmZpbmRCaXQobV9hbGxvY2F0aW9uQ3Vyc29yLCB0cnVlKTsKQEAgLTExMyw3
ICsxMTQsNyBAQCB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlV2l0aG91CiAgICAg
aWYgKE9wdGlvbnM6OnN0ZWFsRW1wdHlCbG9ja3NGcm9tT3RoZXJBbGxvY2F0b3JzKCkKICAgICAg
ICAgJiYgc2hvdWxkU3RlYWxFbXB0eUJsb2Nrc0Zyb21PdGhlckFsbG9jYXRvcnMoKSkgewogICAg
ICAgICBpZiAoTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2sgPSBtYXJrZWRTcGFjZSgpLmZpbmRF
bXB0eUJsb2NrVG9TdGVhbCgpKSB7Ci0gICAgICAgICAgICBibG9jay0+c3dlZXAoKTsKKyAgICAg
ICAgICAgIGJsb2NrLT5zd2VlcChudWxscHRyKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAg
Ly8gSXQncyBnb29kIHRoYXQgdGhpcyBjbGVhcnMgY2FuQWxsb2NhdGVCdXROb3RFbXB0eSBhcyB3
ZWxsIGFzIGFsbCBvdGhlciBiaXRzLAogICAgICAgICAgICAgLy8gYmVjYXVzZSB0aGVyZSBpcyBh
IHJlbW90ZSBjaGFuY2UgdGhhdCBhIGJsb2NrIG1heSBoYXZlIGJvdGggY2FuQWxsb2NhdGVCdXRO
b3RFbXB0eQpAQCAtMTM5LDExICsxNDAsMTEgQEAgdm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlB
bGxvY2F0ZUluKE1hcgogICAgIEFTU0VSVChibG9jayk7CiAgICAgQVNTRVJUKCFibG9jay0+aXNG
cmVlTGlzdGVkKCkpOwogICAgIAotICAgIEZyZWVMaXN0IGZyZWVMaXN0ID0gYmxvY2stPnN3ZWVw
KE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwVG9GcmVlTGlzdCk7CisgICAgYmxvY2stPnN3ZWVw
KCZtX2ZyZWVMaXN0KTsKICAgICAKICAgICAvLyBJdCdzIHBvc3NpYmxlIHRvIHN0dW1ibGUgb24g
YSBjb21wbGV0ZWx5IGZ1bGwgYmxvY2suIE1hcmtpbmcgdHJpZXMgdG8gcmV0aXJlIHRoZXNlLCBi
dXQKICAgICAvLyB0aGF0IGFsZ29yaXRobSBpcyByYWN5IGFuZCBtYXkgZm9yZ2V0IHRvIGRvIGl0
IHNvbWV0aW1lcy4KLSAgICBpZiAoZnJlZUxpc3QuYWxsb2NhdGlvbldpbGxGYWlsKCkpIHsKKyAg
ICBpZiAobV9mcmVlTGlzdC5hbGxvY2F0aW9uV2lsbEZhaWwoKSkgewogICAgICAgICBBU1NFUlQo
YmxvY2stPmlzRnJlZUxpc3RlZCgpKTsKICAgICAgICAgYmxvY2stPnVuc3dlZXBXaXRoTm9OZXds
eUFsbG9jYXRlZCgpOwogICAgICAgICBBU1NFUlQoIWJsb2NrLT5pc0ZyZWVMaXN0ZWQoKSk7CkBA
IC0xNTMsMTkgKzE1NCw5IEBAIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVJbihN
YXIKICAgICB9CiAgICAgCiAgICAgbV9jdXJyZW50QmxvY2sgPSBibG9jazsKLSAgICBzZXRGcmVl
TGlzdChmcmVlTGlzdCk7CiAgICAgCi0gICAgdm9pZCogcmVzdWx0OwotICAgIGlmIChtX2ZyZWVM
aXN0LnJlbWFpbmluZykgewotICAgICAgICB1bnNpZ25lZCBjZWxsU2l6ZSA9IG1fY2VsbFNpemU7
Ci0gICAgICAgIG1fZnJlZUxpc3QucmVtYWluaW5nIC09IGNlbGxTaXplOwotICAgICAgICByZXN1
bHQgPSBtX2ZyZWVMaXN0LnBheWxvYWRFbmQgLSBtX2ZyZWVMaXN0LnJlbWFpbmluZyAtIGNlbGxT
aXplOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEZyZWVDZWxsKiBoZWFkID0gbV9mcmVlTGlzdC5o
ZWFkOwotICAgICAgICBtX2ZyZWVMaXN0LmhlYWQgPSBoZWFkLT5uZXh0OwotICAgICAgICByZXN1
bHQgPSBoZWFkOwotICAgIH0KLSAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQpOworICAgIHZvaWQq
IHJlc3VsdCA9IG1fZnJlZUxpc3QuYWxsb2NhdGUoCisgICAgICAgIFtdICgpIC0+IEhlYXBDZWxs
KiB7IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBudWxscHRyOyB9KTsKICAg
ICBzZXRJc0VkZW4oTm9Mb2NraW5nTmVjZXNzYXJ5LCBtX2N1cnJlbnRCbG9jaywgdHJ1ZSk7CiAg
ICAgbWFya2VkU3BhY2UoKS5kaWRBbGxvY2F0ZUluQmxvY2sobV9jdXJyZW50QmxvY2spOwogICAg
IHJldHVybiByZXN1bHQ7CkBAIC0yMDgsNyArMTk5LDcgQEAgdm9pZCogTWFya2VkQWxsb2NhdG9y
OjphbGxvY2F0ZVNsb3dDYXNlSQogICAgIGRvVGVzdENvbGxlY3Rpb25zSWZOZWVkZWQoZGVmZXJy
YWxDb250ZXh0KTsKIAogICAgIEFTU0VSVCghbWFya2VkU3BhY2UoKS5pc0l0ZXJhdGluZygpKTsK
LSAgICBtX2hlYXAtPmRpZEFsbG9jYXRlKG1fZnJlZUxpc3Qub3JpZ2luYWxTaXplKTsKKyAgICBt
X2hlYXAtPmRpZEFsbG9jYXRlKG1fZnJlZUxpc3Qub3JpZ2luYWxTaXplKCkpOwogICAgIAogICAg
IGRpZENvbnN1bWVGcmVlTGlzdCgpOwogICAgIApAQCAtMzM0LDIxICszMjUsMjEgQEAgdm9pZCBN
YXJrZWRBbGxvY2F0b3I6OnN0b3BBbGxvY2F0aW5nKCkKICAgICAgICAgZGF0YUxvZyhSYXdQb2lu
dGVyKHRoaXMpLCAiOiBNYXJrZWRBbGxvY2F0b3I6OnN0b3BBbGxvY2F0aW5nIVxuIik7CiAgICAg
QVNTRVJUKCFtX2xhc3RBY3RpdmVCbG9jayk7CiAgICAgaWYgKCFtX2N1cnJlbnRCbG9jaykgewot
ICAgICAgICBBU1NFUlQoIW1fZnJlZUxpc3QpOworICAgICAgICBBU1NFUlQobV9mcmVlTGlzdC5h
bGxvY2F0aW9uV2lsbEZhaWwoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCiAgICAg
bV9jdXJyZW50QmxvY2stPnN0b3BBbGxvY2F0aW5nKG1fZnJlZUxpc3QpOwogICAgIG1fbGFzdEFj
dGl2ZUJsb2NrID0gbV9jdXJyZW50QmxvY2s7CiAgICAgbV9jdXJyZW50QmxvY2sgPSAwOwotICAg
IG1fZnJlZUxpc3QgPSBGcmVlTGlzdCgpOworICAgIG1fZnJlZUxpc3QuY2xlYXIoKTsKIH0KIAog
dm9pZCBNYXJrZWRBbGxvY2F0b3I6OnByZXBhcmVGb3JBbGxvY2F0aW9uKCkKIHsKICAgICBtX2xh
c3RBY3RpdmVCbG9jayA9IG51bGxwdHI7CiAgICAgbV9jdXJyZW50QmxvY2sgPSBudWxscHRyOwot
ICAgIHNldEZyZWVMaXN0KEZyZWVMaXN0KCkpOworICAgIG1fZnJlZUxpc3QuY2xlYXIoKTsKIAog
ICAgIG1fYWxsb2NhdGlvbkN1cnNvciA9IDA7CiAgICAgbV9lbXB0eUN1cnNvciA9IDA7CkBAIC0z
NzEsMTcgKzM2MiwxMiBAQCB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6bGFzdENoYW5jZVRvRmluYWxp
CiAgICAgICAgIH0pOwogfQogCi12b2lkIE1hcmtlZEFsbG9jYXRvcjo6c2V0RnJlZUxpc3QoY29u
c3QgRnJlZUxpc3QmIGZyZWVMaXN0KQotewotICAgIG1fZnJlZUxpc3QgPSBmcmVlTGlzdDsKLX0K
LQogdm9pZCBNYXJrZWRBbGxvY2F0b3I6OnJlc3VtZUFsbG9jYXRpbmcoKQogewogICAgIGlmICgh
bV9sYXN0QWN0aXZlQmxvY2spCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZnJlZUxpc3QgPSBt
X2xhc3RBY3RpdmVCbG9jay0+cmVzdW1lQWxsb2NhdGluZygpOworICAgIG1fbGFzdEFjdGl2ZUJs
b2NrLT5yZXN1bWVBbGxvY2F0aW5nKG1fZnJlZUxpc3QpOwogICAgIG1fY3VycmVudEJsb2NrID0g
bV9sYXN0QWN0aXZlQmxvY2s7CiAgICAgbV9sYXN0QWN0aXZlQmxvY2sgPSBudWxscHRyOwogfQpA
QCAtNDQ1LDcgKzQzMSw3IEBAIHZvaWQgTWFya2VkQWxsb2NhdG9yOjpzd2VlcCgpCiAgICAgbV91
bnN3ZXB0LmZvckVhY2hTZXRCaXQoCiAgICAgICAgIFsmXSAoc2l6ZV90IGluZGV4KSB7CiAgICAg
ICAgICAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9jayA9IG1fYmxvY2tzW2luZGV4XTsKLSAg
ICAgICAgICAgIGJsb2NrLT5zd2VlcCgpOworICAgICAgICAgICAgYmxvY2stPnN3ZWVwKG51bGxw
dHIpOwogICAgICAgICB9KTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2VkQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkQWxsb2NhdG9yLmgJKHJldmlzaW9uIDIxNzY0NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTYsNyAr
MTU2LDcgQEAgcHVibGljOgogICAgIHZvaWQqIHRyeUFsbG9jYXRlKEdDRGVmZXJyYWxDb250ZXh0
KiA9IG51bGxwdHIpOwogICAgIEhlYXAqIGhlYXAoKSB7IHJldHVybiBtX2hlYXA7IH0KIAotICAg
IGJvb2wgaXNGcmVlTGlzdGVkQ2VsbChjb25zdCB2b2lkKiB0YXJnZXQpIGNvbnN0IHsgcmV0dXJu
IG1fZnJlZUxpc3QuY29udGFpbnModGFyZ2V0KTsgfQorICAgIGJvb2wgaXNGcmVlTGlzdGVkQ2Vs
bChjb25zdCB2b2lkKiB0YXJnZXQpIGNvbnN0OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVu
Y3Rvcj4gdm9pZCBmb3JFYWNoQmxvY2soY29uc3QgRnVuY3RvciYpOwogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaE5vdEVtcHR5QmxvY2soY29uc3QgRnVuY3RvciYp
OwpAQCAtMjA5LDYgKzIwOSw4IEBAIHB1YmxpYzoKICAgICBTdWJzcGFjZSogc3Vic3BhY2UoKSBj
b25zdCB7IHJldHVybiBtX3N1YnNwYWNlOyB9CiAgICAgTWFya2VkU3BhY2UmIG1hcmtlZFNwYWNl
KCkgY29uc3Q7CiAgICAgCisgICAgY29uc3QgRnJlZUxpc3QmIGZyZWVMaXN0KCkgY29uc3QgeyBy
ZXR1cm4gbV9mcmVlTGlzdDsgfQorICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNv
bnN0OwogICAgIHZvaWQgZHVtcEJpdHMoUHJpbnRTdHJlYW0mID0gV1RGOjpkYXRhRmlsZSgpKTsK
ICAgICAKQEAgLTIyNyw4ICsyMjksNiBAQCBwcml2YXRlOgogICAgIHZvaWQqIGFsbG9jYXRlSW4o
TWFya2VkQmxvY2s6OkhhbmRsZSopOwogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBkb1Rlc3RDb2xs
ZWN0aW9uc0lmTmVlZGVkKEdDRGVmZXJyYWxDb250ZXh0Kik7CiAgICAgCi0gICAgdm9pZCBzZXRG
cmVlTGlzdChjb25zdCBGcmVlTGlzdCYpOwotICAgIAogICAgIEZyZWVMaXN0IG1fZnJlZUxpc3Q7
CiAgICAgCiAgICAgVmVjdG9yPE1hcmtlZEJsb2NrOjpIYW5kbGUqPiBtX2Jsb2NrczsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvcklubGluZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3JJbmxp
bmVzLmgJKHJldmlzaW9uIDIxNzY0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtlZEFsbG9jYXRvcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNDQgKzI1LDMwIEBA
CiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiRnJlZUxpc3RJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiTWFya2VkQWxsb2NhdG9yLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCitpbmxpbmUgYm9vbCBN
YXJrZWRBbGxvY2F0b3I6OmlzRnJlZUxpc3RlZENlbGwoY29uc3Qgdm9pZCogdGFyZ2V0KSBjb25z
dAoreworICAgIHJldHVybiBtX2ZyZWVMaXN0LmNvbnRhaW5zKGJpdHdpc2VfY2FzdDxIZWFwQ2Vs
bCo+KHRhcmdldCkpOworfQorCiBBTFdBWVNfSU5MSU5FIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6
dHJ5QWxsb2NhdGUoR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCkKIHsKLSAgICB1
bnNpZ25lZCByZW1haW5pbmcgPSBtX2ZyZWVMaXN0LnJlbWFpbmluZzsKLSAgICBpZiAocmVtYWlu
aW5nKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNlbGxTaXplID0gbV9jZWxsU2l6ZTsKLSAgICAgICAg
cmVtYWluaW5nIC09IGNlbGxTaXplOwotICAgICAgICBtX2ZyZWVMaXN0LnJlbWFpbmluZyA9IHJl
bWFpbmluZzsKLSAgICAgICAgcmV0dXJuIG1fZnJlZUxpc3QucGF5bG9hZEVuZCAtIHJlbWFpbmlu
ZyAtIGNlbGxTaXplOwotICAgIH0KLSAgICAKLSAgICBGcmVlQ2VsbCogaGVhZCA9IG1fZnJlZUxp
c3QuaGVhZDsKLSAgICBpZiAoVU5MSUtFTFkoIWhlYWQpKQotICAgICAgICByZXR1cm4gdHJ5QWxs
b2NhdGVTbG93Q2FzZShkZWZlcnJhbENvbnRleHQpOwotICAgIAotICAgIG1fZnJlZUxpc3QuaGVh
ZCA9IGhlYWQtPm5leHQ7Ci0gICAgcmV0dXJuIGhlYWQ7CisgICAgcmV0dXJuIG1fZnJlZUxpc3Qu
YWxsb2NhdGUoCisgICAgICAgIFsmXSAoKSAtPiBIZWFwQ2VsbCogeworICAgICAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PEhlYXBDZWxsKj4odHJ5QWxsb2NhdGVTbG93Q2FzZShkZWZlcnJhbENv
bnRleHQpKTsKKyAgICAgICAgfSk7CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCogTWFya2VkQWxs
b2NhdG9yOjphbGxvY2F0ZShHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0KQogewot
ICAgIHVuc2lnbmVkIHJlbWFpbmluZyA9IG1fZnJlZUxpc3QucmVtYWluaW5nOwotICAgIGlmIChy
ZW1haW5pbmcpIHsKLSAgICAgICAgdW5zaWduZWQgY2VsbFNpemUgPSBtX2NlbGxTaXplOwotICAg
ICAgICByZW1haW5pbmcgLT0gY2VsbFNpemU7Ci0gICAgICAgIG1fZnJlZUxpc3QucmVtYWluaW5n
ID0gcmVtYWluaW5nOwotICAgICAgICByZXR1cm4gbV9mcmVlTGlzdC5wYXlsb2FkRW5kIC0gcmVt
YWluaW5nIC0gY2VsbFNpemU7Ci0gICAgfQotICAgIAotICAgIEZyZWVDZWxsKiBoZWFkID0gbV9m
cmVlTGlzdC5oZWFkOwotICAgIGlmIChVTkxJS0VMWSghaGVhZCkpCi0gICAgICAgIHJldHVybiBh
bGxvY2F0ZVNsb3dDYXNlKGRlZmVycmFsQ29udGV4dCk7Ci0gICAgCi0gICAgbV9mcmVlTGlzdC5o
ZWFkID0gaGVhZC0+bmV4dDsKLSAgICByZXR1cm4gaGVhZDsKKyAgICByZXR1cm4gbV9mcmVlTGlz
dC5hbGxvY2F0ZSgKKyAgICAgICAgWyZdICgpIC0+IEhlYXBDZWxsKiB7CisgICAgICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8SGVhcENlbGwqPihhbGxvY2F0ZVNsb3dDYXNlKGRlZmVycmFsQ29u
dGV4dCkpOworICAgICAgICB9KTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+IGlu
bGluZSB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6Zm9yRWFjaEJsb2NrKGNvbnN0IEZ1bmN0b3ImIGZ1
bmN0b3IpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3Bw
CShyZXZpc2lvbiAyMTc2NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRC
bG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDkgKzI2LDExIEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiTWFya2VkQmxvY2suaCIKIAorI2luY2x1ZGUgIkZyZWVMaXN0SW5s
aW5lcy5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgIkpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIk1hcmtlZEFsbG9jYXRv
cklubGluZXMuaCIKICNpbmNsdWRlICJNYXJrZWRCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJT
dXBlclNhbXBsZXIuaCIKICNpbmNsdWRlICJTd2VlcGluZ1Njb3BlLmgiCkBAIC0xMzQsOCArMTM2
LDcgQEAgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzdG9wQWxsb2NhdGluZwogICAgICAgICAg
ICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7CiAgICAgICAgIH0pOwogCi0gICAg
Zm9yRWFjaEZyZWVDZWxsKAotICAgICAgICBmcmVlTGlzdCwKKyAgICBmcmVlTGlzdC5mb3JFYWNo
KAogICAgICAgICBbJl0gKEhlYXBDZWxsKiBjZWxsKSB7CiAgICAgICAgICAgICBpZiAoZmFsc2Up
CiAgICAgICAgICAgICAgICAgZGF0YUxvZygiRnJlZSBjZWxsOiAiLCBSYXdQb2ludGVyKGNlbGwp
LCAiXG4iKTsKQEAgLTE1NiwxMCArMTU3LDEwIEBAIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6
bGFzdENoYW5jZVRvRmkKICAgICBtX3dlYWtTZXQubGFzdENoYW5jZVRvRmluYWxpemUoKTsKICAg
ICBtX25ld2x5QWxsb2NhdGVkLmNsZWFyQWxsKCk7CiAgICAgbV9uZXdseUFsbG9jYXRlZFZlcnNp
b24gPSBoZWFwKCktPm9iamVjdFNwYWNlKCkubmV3bHlBbGxvY2F0ZWRWZXJzaW9uKCk7Ci0gICAg
c3dlZXAoKTsKKyAgICBzd2VlcChudWxscHRyKTsKIH0KIAotRnJlZUxpc3QgTWFya2VkQmxvY2s6
OkhhbmRsZTo6cmVzdW1lQWxsb2NhdGluZygpCit2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OnJl
c3VtZUFsbG9jYXRpbmcoRnJlZUxpc3QmIGZyZWVMaXN0KQogewogICAgIHsKICAgICAgICAgYXV0
byBsb2NrZXIgPSBob2xkTG9jayhibG9jaygpLm1fbG9jayk7CkBAIC0xNzMsNDAgKzE3NCwyNSBA
QCBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpyZXN1bWVBbGxvCiAgICAgICAgICAgICBp
ZiAoZmFsc2UpCiAgICAgICAgICAgICAgICAgZGF0YUxvZygiVGhlcmUgYWluJ3Qgbm8gbmV3bHkg
YWxsb2NhdGVkLlxuIik7CiAgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHdlIGhhZCBhbHJlYWR5
IGV4aGF1c3RlZCB0aGUgYmxvY2sgd2hlbiB3ZSBzdG9wcGVkIGFsbG9jYXRpb24uCi0gICAgICAg
ICAgICByZXR1cm4gRnJlZUxpc3QoKTsKKyAgICAgICAgICAgIGZyZWVMaXN0LmNsZWFyKCk7Cisg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CiAKICAgICAvLyBSZS1jcmVhdGUg
b3VyIGZyZWUgbGlzdCBmcm9tIGJlZm9yZSBzdG9wcGluZyBhbGxvY2F0aW9uLiBOb3RlIHRoYXQg
dGhpcyBtYXkgcmV0dXJuIGFuIGVtcHR5CiAgICAgLy8gZnJlZWxpc3QsIGluIHdoaWNoIGNhc2Ug
dGhlIGJsb2NrIHdpbGwgc3RpbGwgYmUgTWFya2VkIQotICAgIHJldHVybiBzd2VlcChTd2VlcFRv
RnJlZUxpc3QpOworICAgIHN3ZWVwKCZmcmVlTGlzdCk7CiB9CiAKIHZvaWQgTWFya2VkQmxvY2s6
OkhhbmRsZTo6emFwKGNvbnN0IEZyZWVMaXN0JiBmcmVlTGlzdCkKIHsKLSAgICBmb3JFYWNoRnJl
ZUNlbGwoCi0gICAgICAgIGZyZWVMaXN0LAorICAgIGZyZWVMaXN0LmZvckVhY2goCiAgICAgICAg
IFsmXSAoSGVhcENlbGwqIGNlbGwpIHsKICAgICAgICAgICAgIGlmIChtX2F0dHJpYnV0ZXMuZGVz
dHJ1Y3Rpb24gPT0gTmVlZHNEZXN0cnVjdGlvbikKICAgICAgICAgICAgICAgICBjZWxsLT56YXAo
KTsKICAgICAgICAgfSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci12b2lkIE1hcmtl
ZEJsb2NrOjpIYW5kbGU6OmZvckVhY2hGcmVlQ2VsbChjb25zdCBGcmVlTGlzdCYgZnJlZUxpc3Qs
IGNvbnN0IEZ1bmMmIGZ1bmMpCi17Ci0gICAgaWYgKGZyZWVMaXN0LnJlbWFpbmluZykgewotICAg
ICAgICBmb3IgKHVuc2lnbmVkIHJlbWFpbmluZyA9IGZyZWVMaXN0LnJlbWFpbmluZzsgcmVtYWlu
aW5nOyByZW1haW5pbmcgLT0gY2VsbFNpemUoKSkKLSAgICAgICAgICAgIGZ1bmMoYml0d2lzZV9j
YXN0PEhlYXBDZWxsKj4oZnJlZUxpc3QucGF5bG9hZEVuZCAtIHJlbWFpbmluZykpOwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIGZvciAoRnJlZUNlbGwqIGN1cnJlbnQgPSBmcmVlTGlzdC5oZWFkOyBj
dXJyZW50OykgewotICAgICAgICAgICAgRnJlZUNlbGwqIG5leHQgPSBjdXJyZW50LT5uZXh0Owot
ICAgICAgICAgICAgZnVuYyhiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPihjdXJyZW50KSk7Ci0gICAg
ICAgICAgICBjdXJyZW50ID0gbmV4dDsKLSAgICAgICAgfQotICAgIH0KLX0KLQogdm9pZCBNYXJr
ZWRCbG9jazo6YWJvdXRUb01hcmtTbG93KEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKQogewog
ICAgIEFTU0VSVCh2bSgpLT5oZWFwLm9iamVjdFNwYWNlKCkuaXNNYXJraW5nKCkpOwpAQCAtNDA3
LDIwICszOTMsMjIgQEAgU3Vic3BhY2UqIE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN1YnNwYWNlKAog
ICAgIHJldHVybiBhbGxvY2F0b3IoKS0+c3Vic3BhY2UoKTsKIH0KIAotRnJlZUxpc3QgTWFya2Vk
QmxvY2s6OkhhbmRsZTo6c3dlZXAoU3dlZXBNb2RlIHN3ZWVwTW9kZSkKK3ZvaWQgTWFya2VkQmxv
Y2s6OkhhbmRsZTo6c3dlZXAoRnJlZUxpc3QqIGZyZWVMaXN0KQogewogICAgIFN3ZWVwaW5nU2Nv
cGUgc3dlZXBpbmdTY29wZSgqaGVhcCgpKTsKICAgICAKKyAgICBTd2VlcE1vZGUgc3dlZXBNb2Rl
ID0gZnJlZUxpc3QgPyBTd2VlcFRvRnJlZUxpc3QgOiBTd2VlcE9ubHk7CisgICAgCiAgICAgbV9h
bGxvY2F0b3ItPnNldElzVW5zd2VwdChOb0xvY2tpbmdOZWNlc3NhcnksIHRoaXMsIGZhbHNlKTsK
ICAgICAKICAgICBtX3dlYWtTZXQuc3dlZXAoKTsKIAogICAgIGlmIChzd2VlcE1vZGUgPT0gU3dl
ZXBPbmx5ICYmIG1fYXR0cmlidXRlcy5kZXN0cnVjdGlvbiA9PSBEb2VzTm90TmVlZERlc3RydWN0
aW9uKQotICAgICAgICByZXR1cm4gRnJlZUxpc3QoKTsKKyAgICAgICAgcmV0dXJuOwogCiAgICAg
aWYgKFVOTElLRUxZKG1faXNGcmVlTGlzdGVkKSkgewogICAgICAgICBSRUxFQVNFX0FTU0VSVChz
d2VlcE1vZGUgPT0gU3dlZXBUb0ZyZWVMaXN0KTsKLSAgICAgICAgcmV0dXJuIEZyZWVMaXN0KCk7
CisgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCiAgICAgQVNTRVJUKCFtX2FsbG9jYXRvci0+
aXNBbGxvY2F0ZWQoTm9Mb2NraW5nTmVjZXNzYXJ5LCB0aGlzKSk7CkBAIC00MjgsOCArNDE2LDEw
IEBAIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN3ZWVwKFN3ZWUKICAgICBpZiAoc3Bh
Y2UoKS0+aXNNYXJraW5nKCkpCiAgICAgICAgIGJsb2NrKCkubV9sb2NrLmxvY2soKTsKICAgICAK
LSAgICBpZiAobV9hdHRyaWJ1dGVzLmRlc3RydWN0aW9uID09IE5lZWRzRGVzdHJ1Y3Rpb24pCi0g
ICAgICAgIHJldHVybiBzdWJzcGFjZSgpLT5maW5pc2hTd2VlcCgqdGhpcywgc3dlZXBNb2RlKTsK
KyAgICBpZiAobV9hdHRyaWJ1dGVzLmRlc3RydWN0aW9uID09IE5lZWRzRGVzdHJ1Y3Rpb24pIHsK
KyAgICAgICAgc3Vic3BhY2UoKS0+ZmluaXNoU3dlZXAoKnRoaXMsIGZyZWVMaXN0KTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KICAgICAKICAgICAvLyBIYW5kbGUgdGhlIG5vLWRlc3RydWN0b3Ig
c3BlY2lhbGl6YXRpb25zIGhlcmUsIHNpbmNlIHdlIGhhdmUgdGhlIG1vc3Qgb2YgdGhvc2UuIFRo
aXMKICAgICAvLyBlbnN1cmVzIHRoYXQgdGhleSBkb24ndCBnZXQgcmUtc3BlY2lhbGl6ZWQgZm9y
IGV2ZXJ5IGRlc3RydWN0b3Igc3BhY2UuCkBAIC00MzksNyArNDI5LDYgQEAgRnJlZUxpc3QgTWFy
a2VkQmxvY2s6OkhhbmRsZTo6c3dlZXAoU3dlZQogICAgIE5ld2x5QWxsb2NhdGVkTW9kZSBuZXds
eUFsbG9jYXRlZE1vZGUgPSB0aGlzLT5uZXdseUFsbG9jYXRlZE1vZGUoKTsKICAgICBNYXJrc01v
ZGUgbWFya3NNb2RlID0gdGhpcy0+bWFya3NNb2RlKCk7CiAgICAgCi0gICAgRnJlZUxpc3QgcmVz
dWx0OwogICAgIGF1dG8gdHJ5U3BlY2lhbGl6ZWQgPSBbJl0gKCkgLT4gYm9vbCB7CiAgICAgICAg
IGlmIChzd2VlcE1vZGUgIT0gU3dlZXBUb0ZyZWVMaXN0KQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwpAQCAtNDUyLDIwICs0NDEsMjAgQEAgRnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6
c3dlZXAoU3dlZQogICAgICAgICBjYXNlIElzRW1wdHk6CiAgICAgICAgICAgICBzd2l0Y2ggKG1h
cmtzTW9kZSkgewogICAgICAgICAgICAgY2FzZSBNYXJrc05vdFN0YWxlOgotICAgICAgICAgICAg
ICAgIHJlc3VsdCA9IHNwZWNpYWxpemVkU3dlZXA8dHJ1ZSwgSXNFbXB0eSwgU3dlZXBUb0ZyZWVM
aXN0LCBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9lc05vdEhhdmVOZXds
eUFsbG9jYXRlZCwgTWFya3NOb3RTdGFsZT4oSXNFbXB0eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9j
a0hhc05vRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRl
ZCwgTWFya3NOb3RTdGFsZSwgW10gKFZNJiwgSlNDZWxsKikgeyB9KTsKKyAgICAgICAgICAgICAg
ICBzcGVjaWFsaXplZFN3ZWVwPHRydWUsIElzRW1wdHksIFN3ZWVwVG9GcmVlTGlzdCwgQmxvY2tI
YXNOb0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUsIERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQs
IE1hcmtzTm90U3RhbGU+KGZyZWVMaXN0LCBJc0VtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2Nr
SGFzTm9EZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVk
LCBNYXJrc05vdFN0YWxlLCBbXSAoVk0mLCBKU0NlbGwqKSB7IH0pOwogICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICAgICAgY2FzZSBNYXJrc1N0YWxlOgotICAgICAgICAgICAg
ICAgIHJlc3VsdCA9IHNwZWNpYWxpemVkU3dlZXA8dHJ1ZSwgSXNFbXB0eSwgU3dlZXBUb0ZyZWVM
aXN0LCBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9lc05vdEhhdmVOZXds
eUFsbG9jYXRlZCwgTWFya3NTdGFsZT4oSXNFbXB0eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hh
c05vRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCwg
TWFya3NTdGFsZSwgW10gKFZNJiwgSlNDZWxsKikgeyB9KTsKKyAgICAgICAgICAgICAgICBzcGVj
aWFsaXplZFN3ZWVwPHRydWUsIElzRW1wdHksIFN3ZWVwVG9GcmVlTGlzdCwgQmxvY2tIYXNOb0Rl
c3RydWN0b3JzLCBEb250U2NyaWJibGUsIERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtz
U3RhbGU+KGZyZWVMaXN0LCBJc0VtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzTm9EZXN0
cnVjdG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBNYXJrc1N0
YWxlLCBbXSAoVk0mLCBKU0NlbGwqKSB7IH0pOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTm90RW1w
dHk6CiAgICAgICAgICAgICBzd2l0Y2ggKG1hcmtzTW9kZSkgewogICAgICAgICAgICAgY2FzZSBN
YXJrc05vdFN0YWxlOgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNwZWNpYWxpemVkU3dlZXA8
dHJ1ZSwgTm90RW1wdHksIFN3ZWVwVG9GcmVlTGlzdCwgQmxvY2tIYXNOb0Rlc3RydWN0b3JzLCBE
b250U2NyaWJibGUsIERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzTm90U3RhbGU+KElz
RW1wdHksIFN3ZWVwVG9GcmVlTGlzdCwgQmxvY2tIYXNOb0Rlc3RydWN0b3JzLCBEb250U2NyaWJi
bGUsIERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzTm90U3RhbGUsIFtdIChWTSYsIEpT
Q2VsbCopIHsgfSk7CisgICAgICAgICAgICAgICAgc3BlY2lhbGl6ZWRTd2VlcDx0cnVlLCBOb3RF
bXB0eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJs
ZSwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCwgTWFya3NOb3RTdGFsZT4oZnJlZUxpc3QsIElz
RW1wdHksIFN3ZWVwVG9GcmVlTGlzdCwgQmxvY2tIYXNOb0Rlc3RydWN0b3JzLCBEb250U2NyaWJi
bGUsIERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzTm90U3RhbGUsIFtdIChWTSYsIEpT
Q2VsbCopIHsgfSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICBj
YXNlIE1hcmtzU3RhbGU6Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gc3BlY2lhbGl6ZWRTd2Vl
cDx0cnVlLCBOb3RFbXB0eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMs
IERvbnRTY3JpYmJsZSwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCwgTWFya3NTdGFsZT4oSXNF
bXB0eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJs
ZSwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCwgTWFya3NTdGFsZSwgW10gKFZNJiwgSlNDZWxs
KikgeyB9KTsKKyAgICAgICAgICAgICAgICBzcGVjaWFsaXplZFN3ZWVwPHRydWUsIE5vdEVtcHR5
LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzTm9EZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBE
b2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBNYXJrc1N0YWxlPihmcmVlTGlzdCwgSXNFbXB0eSwg
U3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9l
c05vdEhhdmVOZXdseUFsbG9jYXRlZCwgTWFya3NTdGFsZSwgW10gKFZNJiwgSlNDZWxsKikgeyB9
KTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGJyZWFrOwpAQCAtNDc1LDEwICs0NjQsMTYgQEAgRnJlZUxpc3QgTWFya2VkQmxvY2s6Okhh
bmRsZTo6c3dlZXAoU3dlZQogICAgIH07CiAgICAgCiAgICAgaWYgKHRyeVNwZWNpYWxpemVkKCkp
Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybjsKIAogICAgIC8vIFRoZSB0
ZW1wbGF0ZSBhcmd1bWVudHMgZG9uJ3QgbWF0dGVyIGJlY2F1c2UgdGhlIGZpcnN0IG9uZSBpcyBm
YWxzZS4KLSAgICByZXR1cm4gc3BlY2lhbGl6ZWRTd2VlcDxmYWxzZSwgSXNFbXB0eSwgU3dlZXBP
bmx5LCBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgSGFzTmV3bHlBbGxvY2F0
ZWQsIE1hcmtzU3RhbGU+KGVtcHR5TW9kZSwgc3dlZXBNb2RlLCBCbG9ja0hhc05vRGVzdHJ1Y3Rv
cnMsIHNjcmliYmxlTW9kZSwgbmV3bHlBbGxvY2F0ZWRNb2RlLCBtYXJrc01vZGUsIFtdIChWTSYs
IEpTQ2VsbCopIHsgfSk7CisgICAgc3BlY2lhbGl6ZWRTd2VlcDxmYWxzZSwgSXNFbXB0eSwgU3dl
ZXBPbmx5LCBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgSGFzTmV3bHlBbGxv
Y2F0ZWQsIE1hcmtzU3RhbGU+KGZyZWVMaXN0LCBlbXB0eU1vZGUsIHN3ZWVwTW9kZSwgQmxvY2tI
YXNOb0Rlc3RydWN0b3JzLCBzY3JpYmJsZU1vZGUsIG5ld2x5QWxsb2NhdGVkTW9kZSwgbWFya3NN
b2RlLCBbXSAoVk0mLCBKU0NlbGwqKSB7IH0pOworfQorCitib29sIE1hcmtlZEJsb2NrOjpIYW5k
bGU6OmlzRnJlZUxpc3RlZENlbGwoY29uc3Qgdm9pZCogdGFyZ2V0KSBjb25zdAoreworICAgIEFT
U0VSVChpc0ZyZWVMaXN0ZWQoKSk7CisgICAgcmV0dXJuIG1fYWxsb2NhdG9yLT5pc0ZyZWVMaXN0
ZWRDZWxsKHRhcmdldCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCShyZXZpc2lvbiAyMTc2NDYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
Myw3ICsyMyw2IEBACiAKICNpbmNsdWRlICJBbGxvY2F0b3JBdHRyaWJ1dGVzLmgiCiAjaW5jbHVk
ZSAiRGVzdHJ1Y3Rpb25Nb2RlLmgiCi0jaW5jbHVkZSAiRnJlZUxpc3QuaCIKICNpbmNsdWRlICJI
ZWFwQ2VsbC5oIgogI2luY2x1ZGUgIkl0ZXJhdGlvblN0YXR1cy5oIgogI2luY2x1ZGUgIldlYWtT
ZXQuaCIKQEAgLTM2LDYgKzM1LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAgICAgCitjbGFzcyBG
cmVlTGlzdDsKIGNsYXNzIEhlYXA7CiBjbGFzcyBKU0NlbGw7CiBjbGFzcyBNYXJrZWRBbGxvY2F0
b3I7CkBAIC0xMTcsMjEgKzExNywyMiBAQCBwdWJsaWM6CiAgICAgICAgIFZNKiB2bSgpIGNvbnN0
OwogICAgICAgICBXZWFrU2V0JiB3ZWFrU2V0KCk7CiAgICAgICAgICAgICAKKyAgICAgICAgZW51
bSBTd2VlcE1vZGUgeyBTd2VlcE9ubHksIFN3ZWVwVG9GcmVlTGlzdCB9OworCiAgICAgICAgIC8v
IFN3ZWVwaW5nIGVuc3VyZXMgdGhhdCBkZXN0cnVjdG9ycyBnZXQgY2FsbGVkIGFuZCByZW1vdmVz
IHRoZSBibG9jayBmcm9tIHRoZSB1bnN3ZXB0CiAgICAgICAgIC8vIHNldC4gU3dlZXBpbmcgdG8g
ZnJlZSBsaXN0IGFsc28gcmVtb3ZlcyB0aGUgYmxvY2sgZnJvbSB0aGUgZW1wdHkgc2V0LCBpZiBp
dCB3YXMgaW4gdGhhdAogICAgICAgICAvLyBzZXQuIFN3ZWVwaW5nIHdpdGggU3dlZXBPbmx5IG1h
eSBhZGQgdGhpcyBibG9jayB0byB0aGUgZW1wdHkgc2V0LCBpZiB0aGUgYmxvY2sgaXMgZm91bmQK
LSAgICAgICAgLy8gdG8gYmUgZW1wdHkuCisgICAgICAgIC8vIHRvIGJlIGVtcHR5LiBUaGUgZnJl
ZS1saXN0IGJlaW5nIG51bGwgaW1wbGllcyBTd2VlcE9ubHkuCiAgICAgICAgIC8vCiAgICAgICAg
IC8vIE5vdGUgdGhhdCB5b3UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgZW1wdHkgYml0IHJl
ZmxlY3RzIHJlYWxpdHkuIElmIGl0J3Mgbm90IHNldAogICAgICAgICAvLyBhbmQgdGhlIGJsb2Nr
IGlzIGZyZXNobHkgY3JlYXRlZCwgdGhlbiB3ZSdsbCBtYWtlIHRoZSBtaXN0YWtlIG9mIHJ1bm5p
bmcgZGVzdHJ1Y3RvcnMgaW4KICAgICAgICAgLy8gdGhlIGJsb2NrLiBJZiBpdCdzIG5vdCBzZXQg
YW5kIHRoZSBibG9jayBoYXMgbm90aGluZyBtYXJrZWQsIHRoZW4gd2UnbGwgbWFrZSB0aGUKICAg
ICAgICAgLy8gbWlzdGFrZSBvZiBtYWtpbmcgYSBwb3AgZnJlZWxpc3QgcmF0aGVyIHRoYW4gYSBi
dW1wIGZyZWVsaXN0LgotICAgICAgICBlbnVtIFN3ZWVwTW9kZSB7IFN3ZWVwT25seSwgU3dlZXBU
b0ZyZWVMaXN0IH07Ci0gICAgICAgIEZyZWVMaXN0IHN3ZWVwKFN3ZWVwTW9kZSA9IFN3ZWVwT25s
eSk7CisgICAgICAgIHZvaWQgc3dlZXAoRnJlZUxpc3QqKTsKICAgICAgICAgCiAgICAgICAgIC8v
IFRoaXMgaXMgdG8gYmUgY2FsbGVkIGJ5IFN1YnNwYWNlLgogICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBEZXN0cm95RnVuYz4KLSAgICAgICAgRnJlZUxpc3QgZmluaXNoU3dlZXBLbm93aW5nU3Vi
c3BhY2UoU3dlZXBNb2RlLCBjb25zdCBEZXN0cm95RnVuYyYpOworICAgICAgICB2b2lkIGZpbmlz
aFN3ZWVwS25vd2luZ1N1YnNwYWNlKEZyZWVMaXN0KiwgY29uc3QgRGVzdHJveUZ1bmMmKTsKICAg
ICAgICAgCiAgICAgICAgIHZvaWQgdW5zd2VlcFdpdGhOb05ld2x5QWxsb2NhdGVkKCk7CiAgICAg
ICAgIApAQCAtMTQ3LDcgKzE0OCw3IEBAIHB1YmxpYzoKICAgICAgICAgLy8gb2YgdGhlc2UgZnVu
Y3Rpb25zOgogICAgICAgICB2b2lkIGRpZENvbnN1bWVGcmVlTGlzdCgpOyAvLyBDYWxsIHRoaXMg
b25jZSB5b3UndmUgYWxsb2NhdGVkIGFsbCB0aGUgaXRlbXMgaW4gdGhlIGZyZWUgbGlzdC4KICAg
ICAgICAgdm9pZCBzdG9wQWxsb2NhdGluZyhjb25zdCBGcmVlTGlzdCYpOwotICAgICAgICBGcmVl
TGlzdCByZXN1bWVBbGxvY2F0aW5nKCk7IC8vIENhbGwgdGhpcyBpZiB5b3UgY2Fub25pY2FsaXpl
ZCBhIGJsb2NrIGZvciBzb21lIG5vbi1jb2xsZWN0aW9uIHJlbGF0ZWQgcHVycG9zZS4KKyAgICAg
ICAgdm9pZCByZXN1bWVBbGxvY2F0aW5nKEZyZWVMaXN0Jik7IC8vIENhbGwgdGhpcyBpZiB5b3Ug
Y2Fub25pY2FsaXplZCBhIGJsb2NrIGZvciBzb21lIG5vbi1jb2xsZWN0aW9uIHJlbGF0ZWQgcHVy
cG9zZS4KICAgICAgICAgICAgIAogICAgICAgICBzaXplX3QgY2VsbFNpemUoKTsKICAgICAgICAg
aW5saW5lIHVuc2lnbmVkIGNlbGxzUGVyQmxvY2soKTsKQEAgLTIxNSwxMCArMjE2LDcgQEAgcHVi
bGljOgogICAgICAgICBNYXJrc01vZGUgbWFya3NNb2RlKCk7CiAgICAgICAgIAogICAgICAgICB0
ZW1wbGF0ZTxib29sLCBFbXB0eU1vZGUsIFN3ZWVwTW9kZSwgU3dlZXBEZXN0cnVjdGlvbk1vZGUs
IFNjcmliYmxlTW9kZSwgTmV3bHlBbGxvY2F0ZWRNb2RlLCBNYXJrc01vZGUsIHR5cGVuYW1lIERl
c3Ryb3lGdW5jPgotICAgICAgICBGcmVlTGlzdCBzcGVjaWFsaXplZFN3ZWVwKEVtcHR5TW9kZSwg
U3dlZXBNb2RlLCBTd2VlcERlc3RydWN0aW9uTW9kZSwgU2NyaWJibGVNb2RlLCBOZXdseUFsbG9j
YXRlZE1vZGUsIE1hcmtzTW9kZSwgY29uc3QgRGVzdHJveUZ1bmMmKTsKLSAgICAgICAgCi0gICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci0gICAgICAgIHZvaWQgZm9yRWFjaEZyZWVDZWxs
KGNvbnN0IEZyZWVMaXN0JiwgY29uc3QgRnVuYyYpOworICAgICAgICB2b2lkIHNwZWNpYWxpemVk
U3dlZXAoRnJlZUxpc3QqLCBFbXB0eU1vZGUsIFN3ZWVwTW9kZSwgU3dlZXBEZXN0cnVjdGlvbk1v
ZGUsIFNjcmliYmxlTW9kZSwgTmV3bHlBbGxvY2F0ZWRNb2RlLCBNYXJrc01vZGUsIGNvbnN0IERl
c3Ryb3lGdW5jJik7CiAgICAgICAgIAogICAgICAgICB2b2lkIHNldElzRnJlZUxpc3RlZCgpOwog
ICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrSW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJs
b2NrSW5saW5lcy5oCShyZXZpc2lvbiAyMTc2NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrZWRCbG9ja0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDEyICsxMTcs
NiBAQCBpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6SGFuZGxlOjppc0xpdmVDCiAgICAgcmV0dXJu
IGlzTGl2ZShtYXJraW5nVmVyc2lvbiwgaXNNYXJraW5nLCBzdGF0aWNfY2FzdDxjb25zdCBIZWFw
Q2VsbCo+KHApKTsKIH0KIAotaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6OkhhbmRsZTo6aXNGcmVl
TGlzdGVkQ2VsbChjb25zdCB2b2lkKiB0YXJnZXQpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGlzRnJl
ZUxpc3RlZCgpKTsKLSAgICByZXR1cm4gbV9hbGxvY2F0b3ItPmlzRnJlZUxpc3RlZENlbGwodGFy
Z2V0KTsKLX0KLQogLy8gVGhlIGZvbGxvd2luZyBoYXMgdG8gYmUgdHJ1ZSBmb3Igc3BlY2lhbGl6
YXRpb24gdG8ga2ljayBpbjoKIC8vCiAvLyBzd2VlcE1vZGUgPT0gU3dlZXBUb0ZyZWVMaXN0CkBA
IC0xNDUsNyArMTM5LDcgQEAgaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6OkhhbmRsZTo6aXNGcmVl
TAogLy8gT25seSB0aGUgRG9lc05vdE5lZWREZXN0cnVjdGlvbiBvbmUgc2hvdWxkIGJlIHNwZWNp
YWxpemVkIGJ5IE1hcmtlZEJsb2NrLgogCiB0ZW1wbGF0ZTxib29sIHNwZWNpYWxpemUsIE1hcmtl
ZEJsb2NrOjpIYW5kbGU6OkVtcHR5TW9kZSBzcGVjaWFsaXplZEVtcHR5TW9kZSwgTWFya2VkQmxv
Y2s6OkhhbmRsZTo6U3dlZXBNb2RlIHNwZWNpYWxpemVkU3dlZXBNb2RlLCBNYXJrZWRCbG9jazo6
SGFuZGxlOjpTd2VlcERlc3RydWN0aW9uTW9kZSBzcGVjaWFsaXplZERlc3RydWN0aW9uTW9kZSwg
TWFya2VkQmxvY2s6OkhhbmRsZTo6U2NyaWJibGVNb2RlIHNwZWNpYWxpemVkU2NyaWJibGVNb2Rl
LCBNYXJrZWRCbG9jazo6SGFuZGxlOjpOZXdseUFsbG9jYXRlZE1vZGUgc3BlY2lhbGl6ZWROZXds
eUFsbG9jYXRlZE1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6Ok1hcmtzTW9kZSBzcGVjaWFsaXpl
ZE1hcmtzTW9kZSwgdHlwZW5hbWUgRGVzdHJveUZ1bmM+Ci1GcmVlTGlzdCBNYXJrZWRCbG9jazo6
SGFuZGxlOjpzcGVjaWFsaXplZFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGU6OkVtcHR5TW9kZSBl
bXB0eU1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwTW9kZSBzd2VlcE1vZGUsIE1hcmtl
ZEJsb2NrOjpIYW5kbGU6OlN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0aW9uTW9kZSwgTWFy
a2VkQmxvY2s6OkhhbmRsZTo6U2NyaWJibGVNb2RlIHNjcmliYmxlTW9kZSwgTWFya2VkQmxvY2s6
OkhhbmRsZTo6TmV3bHlBbGxvY2F0ZWRNb2RlIG5ld2x5QWxsb2NhdGVkTW9kZSwgTWFya2VkQmxv
Y2s6OkhhbmRsZTo6TWFya3NNb2RlIG1hcmtzTW9kZSwgY29uc3QgRGVzdHJveUZ1bmMmIGRlc3Ry
b3lGdW5jKQordm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzcGVjaWFsaXplZFN3ZWVwKEZyZWVM
aXN0KiBmcmVlTGlzdCwgTWFya2VkQmxvY2s6OkhhbmRsZTo6RW1wdHlNb2RlIGVtcHR5TW9kZSwg
TWFya2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBNb2RlIHN3ZWVwTW9kZSwgTWFya2VkQmxvY2s6Okhh
bmRsZTo6U3dlZXBEZXN0cnVjdGlvbk1vZGUgZGVzdHJ1Y3Rpb25Nb2RlLCBNYXJrZWRCbG9jazo6
SGFuZGxlOjpTY3JpYmJsZU1vZGUgc2NyaWJibGVNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpO
ZXdseUFsbG9jYXRlZE1vZGUgbmV3bHlBbGxvY2F0ZWRNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxl
OjpNYXJrc01vZGUgbWFya3NNb2RlLCBjb25zdCBEZXN0cm95RnVuYyYgZGVzdHJveUZ1bmMpCiB7
CiAgICAgaWYgKHNwZWNpYWxpemUpIHsKICAgICAgICAgZW1wdHlNb2RlID0gc3BlY2lhbGl6ZWRF
bXB0eU1vZGU7CkBAIC0xOTMsMTcgKzE4NywxOCBAQCBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFu
ZGxlOjpzcGVjaWFsaXplCiAgICAgICAgICAgICBtX2FsbG9jYXRvci0+c2V0SXNFbXB0eShOb0xv
Y2tpbmdOZWNlc3NhcnksIHRoaXMsIHRydWUpOwogICAgICAgICBpZiAoc3BhY2UoKS0+aXNNYXJr
aW5nKCkpCiAgICAgICAgICAgICBibG9jay5tX2xvY2sudW5sb2NrKCk7Ci0gICAgICAgIEZyZWVM
aXN0IHJlc3VsdCA9IEZyZWVMaXN0OjpidW1wKHBheWxvYWRFbmQsIHBheWxvYWRFbmQgLSBwYXls
b2FkQmVnaW4pOworICAgICAgICBpZiAoc3dlZXBNb2RlID09IFN3ZWVwVG9GcmVlTGlzdCkKKyAg
ICAgICAgICAgIGZyZWVMaXN0LT5pbml0aWFsaXplQnVtcChwYXlsb2FkRW5kLCBwYXlsb2FkRW5k
IC0gcGF5bG9hZEJlZ2luKTsKICAgICAgICAgaWYgKGZhbHNlKQotICAgICAgICAgICAgZGF0YUxv
ZygiUXVpY2tseSBzd2VwdCBibG9jayAiLCBSYXdQb2ludGVyKHRoaXMpLCAiIHdpdGggY2VsbCBz
aXplICIsIGNlbGxTaXplKCksICIgYW5kIGF0dHJpYnV0ZXMgIiwgbV9hdHRyaWJ1dGVzLCAiOiAi
LCByZXN1bHQsICJcbiIpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgZGF0
YUxvZygiUXVpY2tseSBzd2VwdCBibG9jayAiLCBSYXdQb2ludGVyKHRoaXMpLCAiIHdpdGggY2Vs
bCBzaXplICIsIGNlbGxTaXplKCksICIgYW5kIGF0dHJpYnV0ZXMgIiwgbV9hdHRyaWJ1dGVzLCAi
OiAiLCBwb2ludGVyRHVtcChmcmVlTGlzdCksICJcbiIpOworICAgICAgICByZXR1cm47CiAgICAg
fQogCiAgICAgLy8gVGhpcyBwcm9kdWNlcyBhIGZyZWUgbGlzdCB0aGF0IGlzIG9yZGVyZWQgaW4g
cmV2ZXJzZSB0aHJvdWdoIHRoZSBibG9jay4KICAgICAvLyBUaGlzIGlzIGZpbmUsIHNpbmNlIHRo
ZSBhbGxvY2F0aW9uIGNvZGUgbWFrZXMgbm8gYXNzdW1wdGlvbnMgYWJvdXQgdGhlCiAgICAgLy8g
b3JkZXIgb2YgdGhlIGZyZWUgbGlzdC4KLSAgICBGcmVlQ2VsbCogaGVhZCA9IDA7Ci0gICAgc2l6
ZV90IGNvdW50ID0gMDsKKyAgICBpZiAoc3dlZXBNb2RlID09IFN3ZWVwVG9GcmVlTGlzdCkKKyAg
ICAgICAgZnJlZUxpc3QtPmluaXRpYWxpemVMaXN0KCZibG9jayk7CiAgICAgYm9vbCBpc0VtcHR5
ID0gdHJ1ZTsKICAgICBWZWN0b3I8c2l6ZV90PiBkZWFkQ2VsbHM7CiAgICAgVk0mIHZtID0gKnRo
aXMtPnZtKCk7CkBAIC0yMTksMTIgKzIxNCw5IEBAIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5k
bGU6OnNwZWNpYWxpemUKICAgICAgICAgfQogCiAgICAgICAgIGlmIChzd2VlcE1vZGUgPT0gU3dl
ZXBUb0ZyZWVMaXN0KSB7Ci0gICAgICAgICAgICBGcmVlQ2VsbCogZnJlZUNlbGwgPSByZWludGVy
cHJldF9jYXN0X3B0cjxGcmVlQ2VsbCo+KGNlbGwpOwogICAgICAgICAgICAgaWYgKHNjcmliYmxl
TW9kZSA9PSBTY3JpYmJsZSkKLSAgICAgICAgICAgICAgICBzY3JpYmJsZShmcmVlQ2VsbCwgY2Vs
bFNpemUoKSk7Ci0gICAgICAgICAgICBmcmVlQ2VsbC0+bmV4dCA9IGhlYWQ7Ci0gICAgICAgICAg
ICBoZWFkID0gZnJlZUNlbGw7Ci0gICAgICAgICAgICArK2NvdW50OworICAgICAgICAgICAgICAg
IHNjcmliYmxlKGNlbGwsIGNlbGxTaXplKCkpOworICAgICAgICAgICAgZnJlZUxpc3QtPmFkZEZy
ZWVDZWxsKGNlbGwpOwogICAgICAgICB9CiAgICAgfTsKICAgICBmb3IgKHNpemVfdCBpID0gZmly
c3RBdG9tKCk7IGkgPCBtX2VuZEF0b207IGkgKz0gbV9hdG9tc1BlckNlbGwpIHsKQEAgLTI1NCwy
NiArMjQ2LDI0IEBAIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxpemUKICAg
ICAgICAgICAgIGhhbmRsZURlYWRDZWxsKGkpOwogICAgIH0KIAotICAgIEZyZWVMaXN0IHJlc3Vs
dCA9IEZyZWVMaXN0OjpsaXN0KGhlYWQsIGNvdW50ICogY2VsbFNpemUoKSk7CiAgICAgaWYgKHN3
ZWVwTW9kZSA9PSBTd2VlcFRvRnJlZUxpc3QpCiAgICAgICAgIHNldElzRnJlZUxpc3RlZCgpOwog
ICAgIGVsc2UgaWYgKGlzRW1wdHkpCiAgICAgICAgIG1fYWxsb2NhdG9yLT5zZXRJc0VtcHR5KE5v
TG9ja2luZ05lY2Vzc2FyeSwgdGhpcywgdHJ1ZSk7CiAgICAgaWYgKGZhbHNlKQotICAgICAgICBk
YXRhTG9nKCJTbG93bHkgc3dlcHQgYmxvY2sgIiwgUmF3UG9pbnRlcigmYmxvY2spLCAiIHdpdGgg
Y2VsbCBzaXplICIsIGNlbGxTaXplKCksICIgYW5kIGF0dHJpYnV0ZXMgIiwgbV9hdHRyaWJ1dGVz
LCAiOiAiLCByZXN1bHQsICJcbiIpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIGRhdGFM
b2coIlNsb3dseSBzd2VwdCBibG9jayAiLCBSYXdQb2ludGVyKCZibG9jayksICIgd2l0aCBjZWxs
IHNpemUgIiwgY2VsbFNpemUoKSwgIiBhbmQgYXR0cmlidXRlcyAiLCBtX2F0dHJpYnV0ZXMsICI6
ICIsIHBvaW50ZXJEdW1wKGZyZWVMaXN0KSwgIlxuIik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IERlc3Ryb3lGdW5jPgotRnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6ZmluaXNoU3dlZXBL
bm93aW5nU3Vic3BhY2UoU3dlZXBNb2RlIHN3ZWVwTW9kZSwgY29uc3QgRGVzdHJveUZ1bmMmIGRl
c3Ryb3lGdW5jKQordm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpmaW5pc2hTd2VlcEtub3dpbmdT
dWJzcGFjZShGcmVlTGlzdCogZnJlZUxpc3QsIGNvbnN0IERlc3Ryb3lGdW5jJiBkZXN0cm95RnVu
YykKIHsKKyAgICBTd2VlcE1vZGUgc3dlZXBNb2RlID0gZnJlZUxpc3QgPyBTd2VlcFRvRnJlZUxp
c3QgOiBTd2VlcE9ubHk7CiAgICAgU3dlZXBEZXN0cnVjdGlvbk1vZGUgZGVzdHJ1Y3Rpb25Nb2Rl
ID0gdGhpcy0+c3dlZXBEZXN0cnVjdGlvbk1vZGUoKTsKICAgICBFbXB0eU1vZGUgZW1wdHlNb2Rl
ID0gdGhpcy0+ZW1wdHlNb2RlKCk7CiAgICAgU2NyaWJibGVNb2RlIHNjcmliYmxlTW9kZSA9IHRo
aXMtPnNjcmliYmxlTW9kZSgpOwogICAgIE5ld2x5QWxsb2NhdGVkTW9kZSBuZXdseUFsbG9jYXRl
ZE1vZGUgPSB0aGlzLT5uZXdseUFsbG9jYXRlZE1vZGUoKTsKICAgICBNYXJrc01vZGUgbWFya3NN
b2RlID0gdGhpcy0+bWFya3NNb2RlKCk7CiAKLSAgICBGcmVlTGlzdCByZXN1bHQ7CiAgICAgYXV0
byB0cnlTcGVjaWFsaXplZCA9IFsmXSAoKSAtPiBib29sIHsKICAgICAgICAgaWYgKHN3ZWVwTW9k
ZSAhPSBTd2VlcFRvRnJlZUxpc3QpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yODgs
MTAgKzI3OCwxMCBAQCBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpmaW5pc2hTd2VlCiAg
ICAgICAgIAogICAgICAgICBzd2l0Y2ggKG1hcmtzTW9kZSkgewogICAgICAgICBjYXNlIE1hcmtz
Tm90U3RhbGU6Ci0gICAgICAgICAgICByZXN1bHQgPSBzcGVjaWFsaXplZFN3ZWVwPHRydWUsIE5v
dEVtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJs
ZSwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCwgTWFya3NOb3RTdGFsZT4oSXNFbXB0eSwgU3dl
ZXBUb0ZyZWVMaXN0LCBCbG9ja0hhc0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUsIERvZXNOb3RI
YXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzTm90U3RhbGUsIGRlc3Ryb3lGdW5jKTsKKyAgICAgICAg
ICAgIHNwZWNpYWxpemVkU3dlZXA8dHJ1ZSwgTm90RW1wdHksIFN3ZWVwVG9GcmVlTGlzdCwgQmxv
Y2tIYXNEZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVk
LCBNYXJrc05vdFN0YWxlPihmcmVlTGlzdCwgSXNFbXB0eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9j
a0hhc0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUsIERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQs
IE1hcmtzTm90U3RhbGUsIGRlc3Ryb3lGdW5jKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICBjYXNlIE1hcmtzU3RhbGU6Ci0gICAgICAgICAgICByZXN1bHQgPSBzcGVjaWFsaXpl
ZFN3ZWVwPHRydWUsIE5vdEVtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzRGVzdHJ1Y3Rv
cnMsIERvbnRTY3JpYmJsZSwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCwgTWFya3NTdGFsZT4o
SXNFbXB0eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hhc0Rlc3RydWN0b3JzLCBEb250U2NyaWJi
bGUsIERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzU3RhbGUsIGRlc3Ryb3lGdW5jKTsK
KyAgICAgICAgICAgIHNwZWNpYWxpemVkU3dlZXA8dHJ1ZSwgTm90RW1wdHksIFN3ZWVwVG9GcmVl
TGlzdCwgQmxvY2tIYXNEZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5
QWxsb2NhdGVkLCBNYXJrc1N0YWxlPihmcmVlTGlzdCwgSXNFbXB0eSwgU3dlZXBUb0ZyZWVMaXN0
LCBCbG9ja0hhc0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUsIERvZXNOb3RIYXZlTmV3bHlBbGxv
Y2F0ZWQsIE1hcmtzU3RhbGUsIGRlc3Ryb3lGdW5jKTsKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICB9CiAgICAgICAgIApAQCAtMjk5LDEwICsyODksMTAgQEAgRnJlZUxpc3QgTWFy
a2VkQmxvY2s6OkhhbmRsZTo6ZmluaXNoU3dlZQogICAgIH07CiAgICAgCiAgICAgaWYgKHRyeVNw
ZWNpYWxpemVkKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybjsKICAg
ICAKICAgICAvLyBUaGUgdGVtcGxhdGUgYXJndW1lbnRzIGRvbid0IG1hdHRlciBiZWNhdXNlIHRo
ZSBmaXJzdCBvbmUgaXMgZmFsc2UuCi0gICAgcmV0dXJuIHNwZWNpYWxpemVkU3dlZXA8ZmFsc2Us
IElzRW1wdHksIFN3ZWVwT25seSwgQmxvY2tIYXNOb0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUs
IEhhc05ld2x5QWxsb2NhdGVkLCBNYXJrc1N0YWxlPihlbXB0eU1vZGUsIHN3ZWVwTW9kZSwgZGVz
dHJ1Y3Rpb25Nb2RlLCBzY3JpYmJsZU1vZGUsIG5ld2x5QWxsb2NhdGVkTW9kZSwgbWFya3NNb2Rl
LCBkZXN0cm95RnVuYyk7CisgICAgc3BlY2lhbGl6ZWRTd2VlcDxmYWxzZSwgSXNFbXB0eSwgU3dl
ZXBPbmx5LCBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgSGFzTmV3bHlBbGxv
Y2F0ZWQsIE1hcmtzU3RhbGU+KGZyZWVMaXN0LCBlbXB0eU1vZGUsIHN3ZWVwTW9kZSwgZGVzdHJ1
Y3Rpb25Nb2RlLCBzY3JpYmJsZU1vZGUsIG5ld2x5QWxsb2NhdGVkTW9kZSwgbWFya3NNb2RlLCBk
ZXN0cm95RnVuYyk7CiB9CiAKIGlubGluZSBNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcERlc3Ry
dWN0aW9uTW9kZSBNYXJrZWRCbG9jazo6SGFuZGxlOjpzd2VlcERlc3RydWN0aW9uTW9kZSgpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuY3BwCShyZXZpc2lvbiAyMTc2
NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTc3LDkgKzc3LDkgQEAgU3Vic3BhY2U6On5TdWJzcGFjZSgpCiB7CiB9CiAKLUZy
ZWVMaXN0IFN1YnNwYWNlOjpmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiBibG9jaywg
TWFya2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBNb2RlIHN3ZWVwTW9kZSkKK3ZvaWQgU3Vic3BhY2U6
OmZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmIGJsb2NrLCBGcmVlTGlzdCogZnJlZUxp
c3QpCiB7Ci0gICAgcmV0dXJuIGJsb2NrLmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlKHN3ZWVw
TW9kZSwgRGVzdHJveUZ1bmMoKSk7CisgICAgYmxvY2suZmluaXNoU3dlZXBLbm93aW5nU3Vic3Bh
Y2UoZnJlZUxpc3QsIERlc3Ryb3lGdW5jKCkpOwogfQogCiB2b2lkIFN1YnNwYWNlOjpkZXN0cm95
KFZNJiB2bSwgSlNDZWxsKiBjZWxsKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U3Vic3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJz
cGFjZS5oCShyZXZpc2lvbiAyMTc2NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9T
dWJzcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIHB1YmxpYzoKICAgICAK
ICAgICAvLyBUaGUgcHVycG9zZSBvZiBvdmVycmlkaW5nIHRoaXMgaXMgdG8gc3BlY2lhbGl6ZSB0
aGUgc3dlZXAgZm9yIHlvdXIgZGVzdHJ1Y3RvcnMuIFRoaXMgd29uJ3QKICAgICAvLyBiZSBjYWxs
ZWQgZm9yIG5vLWRlc3RydWN0b3IgYmxvY2tzLiBUaGlzIG11c3QgY2FsbCBNYXJrZWRCbG9jazo6
ZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2UuCi0gICAgdmlydHVhbCBGcmVlTGlzdCBmaW5pc2hT
d2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBNb2Rl
KTsKKyAgICB2aXJ0dWFsIHZvaWQgZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYsIEZy
ZWVMaXN0Kik7CiAgICAgCiAgICAgLy8gVGhlc2UgZ2V0IGNhbGxlZCBmb3IgbGFyZ2Ugb2JqZWN0
cy4KICAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveShWTSYsIEpTQ2VsbCopOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2VJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2VJbmxpbmVzLmgJKHJldmlzaW9uIDIxNzY0
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlSW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkpT
Q2VsbC5oIgotI2luY2x1ZGUgIk1hcmtlZEFsbG9jYXRvci5oIgorI2luY2x1ZGUgIk1hcmtlZEFs
bG9jYXRvcklubGluZXMuaCIKICNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgogI2luY2x1ZGUgIk1h
cmtlZFNwYWNlLmgiCiAjaW5jbHVkZSAiU3Vic3BhY2UuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMjE3NjQ2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpA
QCAtMTQ1OCw3ICsxNDU4LDcgQEAgcHVibGljOgogICAgICAgICBKdW1wIHBvcFBhdGg7CiAgICAg
ICAgIEp1bXAgZG9uZTsKICAgICAgICAgCi0gICAgICAgIGxvYWQzMihBZGRyZXNzKGFsbG9jYXRv
ckdQUiwgTWFya2VkQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBPQkpFQ1RfT0ZGU0VU
T0YoRnJlZUxpc3QsIHJlbWFpbmluZykpLCByZXN1bHRHUFIpOworICAgICAgICBsb2FkMzIoQWRk
cmVzcyhhbGxvY2F0b3JHUFIsIE1hcmtlZEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsg
RnJlZUxpc3Q6Om9mZnNldE9mUmVtYWluaW5nKCkpLCByZXN1bHRHUFIpOwogICAgICAgICBwb3BQ
YXRoID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlc3VsdEdQUik7CiAgICAgICAgIGlmIChhbGxvY2F0
b3IpCiAgICAgICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoLWFsbG9jYXRvci0+Y2VsbFNpemUo
KSksIHJlc3VsdEdQUiwgc2NyYXRjaEdQUik7CkBAIC0xNDcyLDggKzE0NzIsOCBAQCBwdWJsaWM6
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgbmVnUHRyKHJlc3VsdEdQUik7Ci0g
ICAgICAgIHN0b3JlMzIoc2NyYXRjaEdQUiwgQWRkcmVzcyhhbGxvY2F0b3JHUFIsIE1hcmtlZEFs
bG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgT0JKRUNUX09GRlNFVE9GKEZyZWVMaXN0LCBy
ZW1haW5pbmcpKSk7Ci0gICAgICAgIEFkZHJlc3MgcGF5bG9hZEVuZEFkZHIgPSBBZGRyZXNzKGFs
bG9jYXRvckdQUiwgTWFya2VkQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBPQkpFQ1Rf
T0ZGU0VUT0YoRnJlZUxpc3QsIHBheWxvYWRFbmQpKTsKKyAgICAgICAgc3RvcmUzMihzY3JhdGNo
R1BSLCBBZGRyZXNzKGFsbG9jYXRvckdQUiwgTWFya2VkQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVM
aXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZSZW1haW5pbmcoKSkpOworICAgICAgICBBZGRyZXNz
IHBheWxvYWRFbmRBZGRyID0gQWRkcmVzcyhhbGxvY2F0b3JHUFIsIE1hcmtlZEFsbG9jYXRvcjo6
b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mUGF5bG9hZEVuZCgpKTsKICAg
ICAgICAgaWYgKGlzWDg2KCkpCiAgICAgICAgICAgICBhZGRQdHIocGF5bG9hZEVuZEFkZHIsIHJl
c3VsdEdQUik7CiAgICAgICAgIGVsc2UgewpAQCAtMTQ4NSwxMyArMTQ4NSwyMCBAQCBwdWJsaWM6
CiAgICAgICAgIAogICAgICAgICBwb3BQYXRoLmxpbmsodGhpcyk7CiAgICAgICAgIAotICAgICAg
ICBsb2FkUHRyKEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBNYXJrZWRBbGxvY2F0b3I6Om9mZnNldE9m
RnJlZUxpc3QoKSArIE9CSkVDVF9PRkZTRVRPRihGcmVlTGlzdCwgaGVhZCkpLCByZXN1bHRHUFIp
OwotICAgICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoVGVzdFB0cihaZXJvLCByZXN1bHRHUFIp
KTsKLSAgICAgICAgCi0gICAgICAgIC8vIFRoZSBvYmplY3QgaXMgaGFsZi1hbGxvY2F0ZWQ6IHdl
IGhhdmUgd2hhdCB3ZSBrbm93IGlzIGEgZnJlc2ggb2JqZWN0LCBidXQKLSAgICAgICAgLy8gaXQn
cyBzdGlsbCBvbiB0aGUgR0MncyBmcmVlIGxpc3QuCi0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZXN1bHRHUFIpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgc3RvcmVQdHIoc2NyYXRjaEdQUiwgQWRk
cmVzcyhhbGxvY2F0b3JHUFIsIE1hcmtlZEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsg
T0JKRUNUX09GRlNFVE9GKEZyZWVMaXN0LCBoZWFkKSkpOworICAgICAgICBsb2FkMzIoQWRkcmVz
cyhhbGxvY2F0b3JHUFIsIE1hcmtlZEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJl
ZUxpc3Q6Om9mZnNldE9mSW5kZXgoKSksIHJlc3VsdEdQUik7CisKKyAgICAgICAgc2xvd1BhdGgu
YXBwZW5kKGJyYW5jaFRlc3QzMihaZXJvLCByZXN1bHRHUFIpKTsKKyAgICAgICAgc3ViMzIoVHJ1
c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOworICAgICAgICBzdG9yZTMyKHJlc3VsdEdQUiwgQWRk
cmVzcyhhbGxvY2F0b3JHUFIsIE1hcmtlZEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsg
RnJlZUxpc3Q6Om9mZnNldE9mSW5kZXgoKSkpOworICAgICAgICBpZiAoaXNYODYoKSkgeworICAg
ICAgICAgICAgbG9hZDE2KEJhc2VJbmRleChhbGxvY2F0b3JHUFIsIHJlc3VsdEdQUiwgVGltZXNU
d28sIE1hcmtlZEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNl
dE9mTGlzdCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGFkZFB0cihBZGRyZXNzKGFsbG9j
YXRvckdQUiwgTWFya2VkQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6
b2Zmc2V0T2ZCbG9jaygpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoTWFya2VkQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0
KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZMaXN0KCkpLCBhbGxvY2F0b3JHUFIsIHNjcmF0Y2hHUFIp
OworICAgICAgICAgICAgbG9hZDE2KEJhc2VJbmRleChzY3JhdGNoR1BSLCByZXN1bHRHUFIsIFRp
bWVzVHdvKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY3JhdGNo
R1BSLCBNYXJrZWRBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZz
ZXRPZkJsb2NrKCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZFB0cihzY3JhdGNoR1BS
LCByZXN1bHRHUFIpOworICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBkb25lLmxpbmsodGhp
cyk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVj
dGlibGVPYmplY3RTdWJzcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZS5jcHAJKHJldmlzaW9uIDIx
NzY0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0U3Vic3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw5ICs1Miw5IEBAIEpTRGVzdHJ1
Y3RpYmxlT2JqZWN0U3Vic3BhY2U6On5KU0Rlc3RydWMKIHsKIH0KIAotRnJlZUxpc3QgSlNEZXN0
cnVjdGlibGVPYmplY3RTdWJzcGFjZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYg
aGFuZGxlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcE1vZGUgc3dlZXBNb2RlKQordm9pZCBK
U0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlOjpmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFu
ZGxlJiBoYW5kbGUsIEZyZWVMaXN0KiBmcmVlTGlzdCkKIHsKLSAgICByZXR1cm4gaGFuZGxlLmZp
bmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlKHN3ZWVwTW9kZSwgRGVzdHJveUZ1bmMoKSk7CisgICAg
aGFuZGxlLmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlKGZyZWVMaXN0LCBEZXN0cm95RnVuYygp
KTsKIH0KIAogdm9pZCBKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlOjpkZXN0cm95KFZNJiB2
bSwgSlNDZWxsKiBjZWxsKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNE
ZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UuaAkocmV2aXNpb24g
MjE3NjQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVP
YmplY3RTdWJzcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIHB1YmxpYzoK
ICAgICBKU19FWFBPUlRfUFJJVkFURSBKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlKENTdHJp
bmcgbmFtZSwgSGVhcCYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgfkpTRGVzdHJ1
Y3RpYmxlT2JqZWN0U3Vic3BhY2UoKTsKICAgICAKLSAgICBGcmVlTGlzdCBmaW5pc2hTd2VlcChN
YXJrZWRCbG9jazo6SGFuZGxlJiwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBNb2RlKSBvdmVy
cmlkZTsKKyAgICB2b2lkIGZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmLCBGcmVlTGlz
dCopIG92ZXJyaWRlOwogICAgIHZvaWQgZGVzdHJveShWTSYsIEpTQ2VsbCopIG92ZXJyaWRlOwog
fTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJp
YWJsZU9iamVjdFN1YnNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UuY3BwCShyZXZpc2lv
biAyMTc2NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZh
cmlhYmxlT2JqZWN0U3Vic3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw5ICs1Miw5IEBA
IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZTo6fkpTU2UKIHsKIH0KIAotRnJlZUxp
c3QgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlOjpmaW5pc2hTd2VlcChNYXJrZWRC
bG9jazo6SGFuZGxlJiBoYW5kbGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwTW9kZSBzd2Vl
cE1vZGUpCit2b2lkIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZTo6ZmluaXNoU3dl
ZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYgaGFuZGxlLCBGcmVlTGlzdCogZnJlZUxpc3QpCiB7Ci0g
ICAgcmV0dXJuIGhhbmRsZS5maW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZShzd2VlcE1vZGUsIERl
c3Ryb3lGdW5jKCkpOworICAgIGhhbmRsZS5maW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZShmcmVl
TGlzdCwgRGVzdHJveUZ1bmMoKSk7CiB9CiAKIHZvaWQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVj
dFN1YnNwYWNlOjpkZXN0cm95KFZNJiB2bSwgSlNDZWxsKiBjZWxsKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRW
YXJpYWJsZU9iamVjdFN1YnNwYWNlLmgJKHJldmlzaW9uIDIxNzY0NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJ
VkFURSBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFw
Jik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+SlNTZWdtZW50ZWRWYXJpYWJsZU9i
amVjdFN1YnNwYWNlKCk7CiAgICAgCi0gICAgRnJlZUxpc3QgZmluaXNoU3dlZXAoTWFya2VkQmxv
Y2s6OkhhbmRsZSYsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwTW9kZSkgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiwgRnJlZUxpc3QqKSBvdmVy
cmlkZTsKICAgICB2b2lkIGRlc3Ryb3koVk0mLCBKU0NlbGwqKSBvdmVycmlkZTsKIH07CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nU3Vic3BhY2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nU3Vic3Bh
Y2UuY3BwCShyZXZpc2lvbiAyMTc2NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1N0cmluZ1N1YnNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsOSArNTIsOSBAQCBK
U1N0cmluZ1N1YnNwYWNlOjp+SlNTdHJpbmdTdWJzcGFjZSgpCiB7CiB9CiAKLUZyZWVMaXN0IEpT
U3RyaW5nU3Vic3BhY2U6OmZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmIGhhbmRsZSwg
TWFya2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBNb2RlIHN3ZWVwTW9kZSkKK3ZvaWQgSlNTdHJpbmdT
dWJzcGFjZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYgaGFuZGxlLCBGcmVlTGlz
dCogZnJlZUxpc3QpCiB7Ci0gICAgcmV0dXJuIGhhbmRsZS5maW5pc2hTd2VlcEtub3dpbmdTdWJz
cGFjZShzd2VlcE1vZGUsIERlc3Ryb3lGdW5jKCkpOworICAgIGhhbmRsZS5maW5pc2hTd2VlcEtu
b3dpbmdTdWJzcGFjZShmcmVlTGlzdCwgRGVzdHJveUZ1bmMoKSk7CiB9CiAKIHZvaWQgSlNTdHJp
bmdTdWJzcGFjZTo6ZGVzdHJveShWTSYgdm0sIEpTQ2VsbCogY2VsbCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nU3Vic3BhY2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ1N1YnNwYWNlLmgJKHJldmlzaW9u
IDIxNzY0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nU3Vic3Bh
Y2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQCBwdWJsaWM6CiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgSlNTdHJpbmdTdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmKTsKICAgICBK
U19FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIH5KU1N0cmluZ1N1YnNwYWNlKCk7CiAgICAgCi0gICAg
RnJlZUxpc3QgZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYsIE1hcmtlZEJsb2NrOjpI
YW5kbGU6OlN3ZWVwTW9kZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBmaW5pc2hTd2VlcChNYXJrZWRC
bG9jazo6SGFuZGxlJiwgRnJlZUxpc3QqKSBvdmVycmlkZTsKICAgICB2b2lkIGRlc3Ryb3koVk0m
LCBKU0NlbGwqKSBvdmVycmlkZTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDIxNzY0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzYyLDcgKzM2Miw3IEBAIHR5
cGVkZWYgY29uc3QgY2hhciogb3B0aW9uU3RyaW5nOwogICAgIHYoZ2NMb2dMZXZlbCwgbG9nR0Ms
IEdDTG9nZ2luZzo6Tm9uZSwgTm9ybWFsLCAiZGVidWdnaW5nIG9wdGlvbiB0byBsb2cgR0MgYWN0
aXZpdHkgKDAgPSBOb25lLCAxID0gQmFzaWMsIDIgPSBWZXJib3NlKSIpIFwKICAgICB2KGJvb2ws
IHVzZUdDLCB0cnVlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIGdjQXRFbmQsIGZh
bHNlLCBOb3JtYWwsICJJZiB0cnVlLCB0aGUganNjIENMSSB3aWxsIGRvIGEgR0MgYmVmb3JlIGV4
aXRpbmciKSBcCi0gICAgdihib29sLCBmb3JjZUdDU2xvd1BhdGhzLCBmYWxzZSwgTm9ybWFsLCAi
SWYgdHJ1ZSwgd2Ugd2lsbCBmb3JjZSBhbGwgSklUIGZhc3QgYWxsb2NhdGlvbnMgZG93biB0aGVp
ciBzbG93IHBhdGhzLiIpXAorICAgIHYoYm9vbCwgZm9yY2VHQ1Nsb3dQYXRocywgZmFsc2UsIE5v
cm1hbCwgIklmIHRydWUsIHdlIHdpbGwgZm9yY2UgYWxsIEpJVCBmYXN0IGFsbG9jYXRpb25zIGRv
d24gdGhlaXIgc2xvdyBwYXRocy4iKSBcCiAgICAgdih1bnNpZ25lZCwgZ2NNYXhIZWFwU2l6ZSwg
MCwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdih1bnNpZ25lZCwgZm9yY2VSQU1TaXplLCAwLCBO
b3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIHJlY29yZEdDUGF1c2VUaW1lcywgZmFsc2Us
IE5vcm1hbCwgbnVsbHB0cikgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UuY3Bw
CShyZXZpc2lvbiAyMTc2NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw5ICs1
Niw5IEBAIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZTo6fkpTV2ViQXMKIHsKIH0KIAot
RnJlZUxpc3QgSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlOjpmaW5pc2hTd2VlcChNYXJr
ZWRCbG9jazo6SGFuZGxlJiBoYW5kbGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwTW9kZSBz
d2VlcE1vZGUpCit2b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZTo6ZmluaXNoU3dl
ZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYgaGFuZGxlLCBGcmVlTGlzdCogZnJlZUxpc3QpCiB7Ci0g
ICAgcmV0dXJuIGhhbmRsZS5maW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZShzd2VlcE1vZGUsIERl
c3Ryb3lGdW5jKCkpOworICAgIGhhbmRsZS5maW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZShmcmVl
TGlzdCwgRGVzdHJveUZ1bmMoKSk7CiB9CiAKIHZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1
YnNwYWNlOjpkZXN0cm95KFZNJiB2bSwgSlNDZWxsKiBjZWxsKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVC
bG9ja1N1YnNwYWNlLmgJKHJldmlzaW9uIDIxNzY0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNiw3ICszNiw3IEBAIHB1YmxpYzoKICAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vi
c3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJik7CiAgICAgdmlydHVhbCB+SlNXZWJBc3NlbWJseUNv
ZGVCbG9ja1N1YnNwYWNlKCk7CiAgICAgCi0gICAgRnJlZUxpc3QgZmluaXNoU3dlZXAoTWFya2Vk
QmxvY2s6OkhhbmRsZSYsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwTW9kZSkgb3ZlcnJpZGU7
CisgICAgdm9pZCBmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiwgRnJlZUxpc3QqKSBv
dmVycmlkZTsKICAgICB2b2lkIGRlc3Ryb3koVk0mLCBKU0NlbGwqKSBvdmVycmlkZTsKIH07CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>311752</attachid>
            <date>2017-06-01 13:41:06 -0700</date>
            <delta_ts>2017-06-01 15:38:55 -0700</delta_ts>
            <desc>switched to list-of-pointers instead of list-of-offsets</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>56188</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjE3NjYyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMCBA
QAorMjAxNy0wNi0wMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEdDIHNob3VsZCBrZWVwIGl0cyBmcmVlIGxpc3Qgb24gdGhlIHNpZGUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3Mjc5MworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgUHJldmlvdXNseSwgb3Vy
IGJ1bXAnbidwb3AgYWxsb2NhdG9yIHdvdWxkIHVzZSBhIGNvbnZlbnRpb25hbCBsaW5rZWQtbGlz
dCBmb3IgdGhlIGZyZWUtbGlzdC4KKyAgICAgICAgVGhlIGxpbmtlZC1saXN0IHdvdWxkIGJlIHRo
cmVhZGVkIHRocm91Z2ggZnJlZSBtZW1vcnksIGFzIGlzIHRoZSB1c3VhbCBjb252ZW50aW9uLgor
ICAgICAgICAKKyAgICAgICAgSG93ZXZlciwgaXQncyBxdWl0ZSBhIGJpdCBtb3JlIHNhbmUgdG8g
aGF2ZSB0aGUgZnJlZS1saXN0IHJlc2lkZSBzb21ld2hlcmUgb3RoZXIgdGhhbiB0aGUgZnJlZQor
ICAgICAgICBtZW1vcnkuIFRoaXMgcHV0cyB0aGUgZnJlZS1saXN0IGluIGFuIGFycmF5LiBJdCdz
IGEgc3RhY2sgb2YgMTYtYml0IG9mZnNldHMgaW50byB0aGUgYmxvY2suCisgICAgICAgIFRoZSBh
bGxvY2F0b3IgcG9wcyBhbiBvZmZzZXQgb2ZmIHRoZSBzdGFjaywgYW5kIGFkZHMgaXQgdG8gdGhl
IGN1cnJlbnQgYmxvY2sgcG9pbnRlci4gVGhpcworICAgICAgICBpc24ndCBhbnkgc2xvd2VyIHRo
YW4gdGhlIG9sZCBsaW5rZWQtbGlzdCBmcmVlLWxpc3QsIGFuZCBpdCBtYWtlcyB3ZWlyZCBpc3N1
ZXMgZWFzaWVyIHRvIGRlYnVnLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBoZWFwL0ZyZWVMaXN0LmNwcDoKKyAgICAgICAg
KEpTQzo6RnJlZUxpc3Q6OkZyZWVMaXN0KToKKyAgICAgICAgKEpTQzo6RnJlZUxpc3Q6On5GcmVl
TGlzdCk6CisgICAgICAgIChKU0M6OkZyZWVMaXN0OjpjbGVhcik6CisgICAgICAgIChKU0M6OkZy
ZWVMaXN0Ojppbml0aWFsaXplTGlzdCk6CisgICAgICAgIChKU0M6OkZyZWVMaXN0Ojppbml0aWFs
aXplQnVtcCk6CisgICAgICAgIChKU0M6OkZyZWVMaXN0Ojpjb250YWlucyk6CisgICAgICAgIChK
U0M6OkZyZWVMaXN0OjpkdW1wKToKKyAgICAgICAgKiBoZWFwL0ZyZWVMaXN0Lmg6CisgICAgICAg
IChKU0M6OkZyZWVMaXN0OjphbGxvY2F0aW9uV2lsbEZhaWwpOgorICAgICAgICAoSlNDOjpGcmVl
TGlzdDo6b3JpZ2luYWxTaXplKToKKyAgICAgICAgKEpTQzo6RnJlZUxpc3Q6OmFkZHJlc3NPZkxp
c3QpOgorICAgICAgICAoSlNDOjpGcmVlTGlzdDo6b2Zmc2V0T2ZCbG9jayk6CisgICAgICAgIChK
U0M6OkZyZWVMaXN0OjpvZmZzZXRPZkxpc3QpOgorICAgICAgICAoSlNDOjpGcmVlTGlzdDo6b2Zm
c2V0T2ZJbmRleCk6CisgICAgICAgIChKU0M6OkZyZWVMaXN0OjpvZmZzZXRPZlBheWxvYWRFbmQp
OgorICAgICAgICAoSlNDOjpGcmVlTGlzdDo6b2Zmc2V0T2ZSZW1haW5pbmcpOgorICAgICAgICAo
SlNDOjpGcmVlTGlzdDo6b2Zmc2V0T2ZPcmlnaW5hbFNpemUpOgorICAgICAgICAoSlNDOjpGcmVl
TGlzdDo6RnJlZUxpc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpGcmVlTGlzdDo6bGlzdCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkZyZWVMaXN0OjpidW1wKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6RnJlZUxpc3Q6Om9wZXJhdG9yPT0pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpG
cmVlTGlzdDo6b3BlcmF0b3IhPSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkZyZWVMaXN0Ojpv
cGVyYXRvciBib29sKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL0ZyZWVMaXN0SW5saW5lcy5o
OiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RnJlZUxpc3Q6OmFkZEZyZWVDZWxsKToKKyAgICAgICAg
KEpTQzo6RnJlZUxpc3Q6OmFsbG9jYXRlKToKKyAgICAgICAgKEpTQzo6RnJlZUxpc3Q6OmZvckVh
Y2gpOgorICAgICAgICAoSlNDOjpGcmVlTGlzdDo6dG9PZmZzZXQpOgorICAgICAgICAoSlNDOjpG
cmVlTGlzdDo6ZnJvbU9mZnNldCk6CisgICAgICAgICogaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIu
Y3BwOgorICAgICAgICAoSlNDOjpJbmNyZW1lbnRhbFN3ZWVwZXI6OnN3ZWVwTmV4dEJsb2NrKToK
KyAgICAgICAgKiBoZWFwL01hcmtlZEFsbG9jYXRvci5jcHA6CisgICAgICAgIChKU0M6Ok1hcmtl
ZEFsbG9jYXRvcjo6TWFya2VkQWxsb2NhdG9yKToKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2Nh
dG9yOjpkaWRDb25zdW1lRnJlZUxpc3QpOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6
OnRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3RpbmcpOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxv
Y2F0b3I6OnRyeUFsbG9jYXRlSW4pOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OmFs
bG9jYXRlU2xvd0Nhc2VJbXBsKToKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjpzdG9w
QWxsb2NhdGluZyk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6cHJlcGFyZUZvckFs
bG9jYXRpb24pOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OnJlc3VtZUFsbG9jYXRp
bmcpOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OnN3ZWVwKToKKyAgICAgICAgKEpT
Qzo6TWFya2VkQWxsb2NhdG9yOjpzZXRGcmVlTGlzdCk6IERlbGV0ZWQuCisgICAgICAgICogaGVh
cC9NYXJrZWRBbGxvY2F0b3IuaDoKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjpmcmVl
TGlzdCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6aXNGcmVlTGlzdGVkQ2VsbCk6
IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9NYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmg6CisgICAg
ICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6aXNGcmVlTGlzdGVkQ2VsbCk6CisgICAgICAgIChK
U0M6Ok1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGUpOgorICAgICAgICAoSlNDOjpNYXJrZWRB
bGxvY2F0b3I6OmFsbG9jYXRlKToKKyAgICAgICAgKiBoZWFwL01hcmtlZEJsb2NrLmNwcDoKKyAg
ICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OkhhbmRsZTo6c3RvcEFsbG9jYXRpbmcpOgorICAgICAg
ICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjpsYXN0Q2hhbmNlVG9GaW5hbGl6ZSk6CisgICAg
ICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6OnJlc3VtZUFsbG9jYXRpbmcpOgorICAgICAg
ICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjp6YXApOgorICAgICAgICAoSlNDOjpNYXJrZWRC
bG9jazo6SGFuZGxlOjpzd2VlcCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6
OmlzRnJlZUxpc3RlZENlbGwpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjpm
b3JFYWNoRnJlZUNlbGwpOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvTWFya2VkQmxvY2suaDoK
KyAgICAgICAgKiBoZWFwL01hcmtlZEJsb2NrSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpNYXJr
ZWRCbG9jazo6SGFuZGxlOjpzcGVjaWFsaXplZFN3ZWVwKToKKyAgICAgICAgKEpTQzo6TWFya2Vk
QmxvY2s6OkhhbmRsZTo6ZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2UpOgorICAgICAgICAoSlND
OjpNYXJrZWRCbG9jazo6SGFuZGxlOjppc0ZyZWVMaXN0ZWRDZWxsKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBoZWFwL1N1YnNwYWNlLmNwcDoKKyAgICAgICAgKEpTQzo6U3Vic3BhY2U6OmZpbmlzaFN3
ZWVwKToKKyAgICAgICAgKiBoZWFwL1N1YnNwYWNlLmg6CisgICAgICAgICogaml0L0Fzc2VtYmx5
SGVscGVycy5oOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRBbGxvY2F0ZVdp
dGhOb25OdWxsQWxsb2NhdG9yKToKKyAgICAgICAgKiBydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0U3Vic3BhY2UuY3BwOgorICAgICAgICAoSlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNw
YWNlOjpmaW5pc2hTd2VlcCk6CisgICAgICAgICogcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVj
dFN1YnNwYWNlLmg6CisgICAgICAgICogcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0
U3Vic3BhY2UuY3BwOgorICAgICAgICAoSlNDOjpKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vi
c3BhY2U6OmZpbmlzaFN3ZWVwKToKKyAgICAgICAgKiBydW50aW1lL0pTU2VnbWVudGVkVmFyaWFi
bGVPYmplY3RTdWJzcGFjZS5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmdTdWJzcGFjZS5j
cHA6CisgICAgICAgIChKU0M6OkpTU3RyaW5nU3Vic3BhY2U6OmZpbmlzaFN3ZWVwKToKKyAgICAg
ICAgKiBydW50aW1lL0pTU3RyaW5nU3Vic3BhY2UuaDoKKyAgICAgICAgKiB3YXNtL2pzL0pTV2Vi
QXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5jcHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1i
bHlDb2RlQmxvY2tTdWJzcGFjZTo6ZmluaXNoU3dlZXApOgorICAgICAgICAqIHdhc20vanMvSlNX
ZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmg6CisKIDIwMTctMDYtMDEgIFRvbWFzIFBvcGVs
YSAgPHRwb3BlbGFAcmVkaGF0LmNvbT4sIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgog
CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCkgaW4gSW5mZXJyZWRUeXBlOjpr
aW5kRm9yRmxhZ3MoKSBvbiBCaWctRW5kaWFucwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDIxNzY0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01MDEs
NiArNTAxLDcgQEAKIAkJMEY2NEIyNzkxQTc5NTdCMjAwNkU0RTY2IC8qIENhbGxFZGdlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjRCMjc3MUE3
OTU3QjIwMDZFNEU2NiAvKiBDYWxsRWRnZS5jcHAgKi87IH07CiAJCTBGNjRCMjdBMUE3OTU3QjIw
MDZFNEU2NiAvKiBDYWxsRWRnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY2NEIyNzgxQTc5NTdCMjAwNkU0RTY2IC8qIENhbGxFZGdlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY2NEVBRjMxQzRF
Q0QwNjAwNjIxRTlCIC8qIEFpckFyZ0lubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjRFQUYyMUM0RUNEMDYwMDYyMUU5QiAvKiBBaXJBcmdJ
bmxpbmVzLmggKi87IH07CisJCTBGNjU4NUUxMUVFMDgwNUEwMDk1MTc2RCAvKiBGcmVlTGlzdElu
bGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NjU4NUUwMUVFMDgwNTcwMDk1MTc2RCAvKiBGcmVlTGlzdElubGluZXMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjY2MEUzNzFFMDUxN0I5MDAz
MTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NjBFMzMxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdD
b25zdHJhaW50LmNwcCAqLzsgfTsKIAkJMEY2NjBFMzgxRTA1MTdCQjAwMzE0NjJDIC8qIE1hcmtp
bmdDb25zdHJhaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjY2MEUzNDFFMDUxN0I3MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjY2MEUzOTFF
MDUxN0JGMDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnRTZXQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NjBFMzUxRTA1MTdCNzAwMzE0NjJD
IC8qIE1hcmtpbmdDb25zdHJhaW50U2V0LmNwcCAqLzsgfTsKQEAgLTMwNzcsNiArMzA3OCw3IEBA
CiAJCTBGNjRCMjc3MUE3OTU3QjIwMDZFNEU2NiAvKiBDYWxsRWRnZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWxsRWRnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGNjRCMjc4MUE3OTU3QjIwMDZFNEU2NiAvKiBDYWxsRWRnZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWxsRWRnZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjY0RUFGMjFDNEVDRDA2MDA2MjFFOUIgLyogQWlyQXJnSW5saW5lcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJBcmdJbmxpbmVzLmg7IHBhdGgg
PSBiMy9haXIvQWlyQXJnSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjY1ODVFMDFFRTA4MDU3MDA5NTE3NkQgLyogRnJlZUxpc3RJbmxpbmVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZyZWVMaXN0SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjY2MEUzMzFFMDUxN0I3MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFp
bnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFya2luZ0NvbnN0
cmFpbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY2MEUzNDFFMDUxN0I3
MDAzMTQ2MkMgLyogTWFya2luZ0NvbnN0cmFpbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTWFya2luZ0NvbnN0cmFpbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY2NjBFMzUxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50U2V0LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hcmtpbmdDb25zdHJhaW50U2V0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTYwMTksNiArNjAyMSw3IEBACiAJ
CQkJMkE4MzYzODQxOEQ3RDBFRTAwMDBFQkNDIC8qIEVkZW5HQ0FjdGl2aXR5Q2FsbGJhY2suaCAq
LywKIAkJCQkwRjU1MTNBNzFENUE2OENCMDBDMzJCRDggLyogRnJlZUxpc3QuY3BwICovLAogCQkJ
CTBGNTUxM0E1MUQ1QTY4MkEwMEMzMkJEOCAvKiBGcmVlTGlzdC5oICovLAorCQkJCTBGNjU4NUUw
MUVFMDgwNTcwMDk1MTc2RCAvKiBGcmVlTGlzdElubGluZXMuaCAqLywKIAkJCQkyQTgzNjM4NzE4
RDdEMEZFMDAwMEVCQ0MgLyogRnVsbEdDQWN0aXZpdHlDYWxsYmFjay5jcHAgKi8sCiAJCQkJMkE4
MzYzODgxOEQ3RDBGRTAwMDBFQkNDIC8qIEZ1bGxHQ0FjdGl2aXR5Q2FsbGJhY2suaCAqLywKIAkJ
CQkyQUFDRTYzQTE4Q0E1QTAzMDBFRDAxOTEgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCAqLywK
QEAgLTg2NjEsNiArODY2NCw3IEBACiAJCQkJMEYyMzVCRUUxNzE3OEU3MzAwNjkwQzdGIC8qIERG
R09TUkV4aXRQcmVwYXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQzYzQjcxRTYzNDNF
RDAwQzEzODM5IC8qIEIzQXRvbWljVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjIzNzk4
MUFFNDVDQTcwMEQ0MDJFQSAvKiBERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2UuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGNjU4NUUxMUVFMDgwNUEwMDk1MTc2RCAvKiBGcmVlTGlzdElubGluZXMuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGRkZDOTVDMTRFRjkwQUYwMEM3MjUzMiAvKiBERkdQaGFzZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMzdDNzM4RDIxRURCNTZFNDAwM0YyQjBCIC8qIFBhcnNlSW50
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCOUNFQjE5RDBCQTdEMDBCMUQxQjUgLyogREZHUGhp
Q2hpbGRyZW4uaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvRnJlZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0ZyZWVMaXN0LmNwcAkocmV2aXNpb24gMjE3NjQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvRnJlZUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwyOSArMjYsNjcgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGcmVlTGlzdC5oIgogCisjaW5jbHVkZSAiRnJl
ZUxpc3RJbmxpbmVzLmgiCisjaW5jbHVkZSAiTWFya2VkQmxvY2suaCIKKyNpbmNsdWRlIDx3dGYv
Q29tbWFQcmludGVyLmg+CisKIG5hbWVzcGFjZSBKU0MgewogCi1ib29sIEZyZWVMaXN0Ojpjb250
YWlucyhjb25zdCB2b2lkKiB0YXJnZXQpIGNvbnN0CitGcmVlTGlzdDo6RnJlZUxpc3QodW5zaWdu
ZWQgY2VsbFNpemUpCisgICAgOiBtX2NlbGxTaXplKGNlbGxTaXplKQogewotICAgIGlmIChyZW1h
aW5pbmcpIHsKLSAgICAgICAgY29uc3Qgdm9pZCogc3RhcnQgPSAocGF5bG9hZEVuZCAtIHJlbWFp
bmluZyk7Ci0gICAgICAgIGNvbnN0IHZvaWQqIGVuZCA9IHBheWxvYWRFbmQ7Cit9CisKK0ZyZWVM
aXN0Ojp+RnJlZUxpc3QoKQoreworfQorCit2b2lkIEZyZWVMaXN0OjpjbGVhcigpCit7CisgICAg
bV9pbmRleCA9IDA7CisgICAgbV9wYXlsb2FkRW5kID0gbnVsbHB0cjsKKyAgICBtX3JlbWFpbmlu
ZyA9IDA7CisgICAgbV9vcmlnaW5hbFNpemUgPSAwOworfQorCit2b2lkIEZyZWVMaXN0Ojppbml0
aWFsaXplTGlzdCgpCit7CisgICAgbV9pbmRleCA9IDA7CisgICAgbV9wYXlsb2FkRW5kID0gbnVs
bHB0cjsKKyAgICBtX3JlbWFpbmluZyA9IDA7CisgICAgbV9vcmlnaW5hbFNpemUgPSAwOworfQor
Cit2b2lkIEZyZWVMaXN0Ojppbml0aWFsaXplQnVtcChjaGFyKiBwYXlsb2FkRW5kLCB1bnNpZ25l
ZCByZW1haW5pbmcpCit7CisgICAgbV9pbmRleCA9IDA7CisgICAgbV9wYXlsb2FkRW5kID0gcGF5
bG9hZEVuZDsKKyAgICBtX3JlbWFpbmluZyA9IHJlbWFpbmluZzsKKyAgICBtX29yaWdpbmFsU2l6
ZSA9IHJlbWFpbmluZzsKK30KKworYm9vbCBGcmVlTGlzdDo6Y29udGFpbnMoSGVhcENlbGwqIHRh
cmdldCkgY29uc3QKK3sKKyAgICBpZiAobV9yZW1haW5pbmcpIHsKKyAgICAgICAgY29uc3Qgdm9p
ZCogc3RhcnQgPSAobV9wYXlsb2FkRW5kIC0gbV9yZW1haW5pbmcpOworICAgICAgICBjb25zdCB2
b2lkKiBlbmQgPSBtX3BheWxvYWRFbmQ7CiAgICAgICAgIHJldHVybiAoc3RhcnQgPD0gdGFyZ2V0
KSAmJiAodGFyZ2V0IDwgZW5kKTsKICAgICB9CiAKLSAgICBGcmVlQ2VsbCogY2FuZGlkYXRlID0g
aGVhZDsKLSAgICB3aGlsZSAoY2FuZGlkYXRlKSB7Ci0gICAgICAgIGlmIChjYW5kaWRhdGUgPT0g
dGFyZ2V0KQorICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXg7IGktLTspIHsKKyAgICAgICAg
aWYgKG1fbGlzdFtpXSA9PSB0YXJnZXQpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgY2FuZGlkYXRlID0gY2FuZGlkYXRlLT5uZXh0OwogICAgIH0KLQogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAogdm9pZCBGcmVlTGlzdDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewot
ICAgIG91dC5wcmludCgie2hlYWQgPSAiLCBSYXdQb2ludGVyKGhlYWQpLCAiLCBwYXlsb2FkRW5k
ID0gIiwgUmF3UG9pbnRlcihwYXlsb2FkRW5kKSwgIiwgcmVtYWluaW5nID0gIiwgcmVtYWluaW5n
LCAiLCBvcmlnaW5hbFNpemUgPSAiLCBvcmlnaW5hbFNpemUsICJ9Iik7CisgICAgb3V0LnByaW50
KCJ7bGlzdCA9IFsiKTsKKyAgICBDb21tYVByaW50ZXIgY29tbWE7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1faW5kZXg7ICsraSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCBSYXdQ
b2ludGVyKG1fbGlzdFtpXSkpOworICAgIG91dC5wcmludCgiXSwgaW5kZXggPSAiLCBtX2luZGV4
LCAiLCBwYXlsb2FkRW5kID0gIiwgUmF3UG9pbnRlcihtX3BheWxvYWRFbmQpLCAiLCByZW1haW5p
bmcgPSAiLCBtX3JlbWFpbmluZywgIiwgb3JpZ2luYWxTaXplID0gIiwgbV9vcmlnaW5hbFNpemUs
ICJ9Iik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvRnJlZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9GcmVlTGlzdC5oCShyZXZpc2lvbiAyMTc2NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9GcmVlTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2OCArMjUsNjAgQEAKIAog
I3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgorI2luY2x1ZGUgPHd0Zi9O
b25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgogCiBuYW1lc3BhY2Ug
SlNDIHsKIAotc3RydWN0IEZyZWVDZWxsIHsKLSAgICBGcmVlQ2VsbCogbmV4dDsKLX07Ci0gICAg
ICAgIAotLy8gVGhpcyByZXByZXNlbnRhdGlvbiBvZiBhIEZyZWVMaXN0IGlzIGNvbnZlbmllbnQg
Zm9yIHRoZSBNYXJrZWRBbGxvY2F0b3IuCi0KLXN0cnVjdCBGcmVlTGlzdCB7Ci0gICAgRnJlZUNl
bGwqIGhlYWQgeyBudWxscHRyIH07Ci0gICAgY2hhciogcGF5bG9hZEVuZCB7IG51bGxwdHIgfTsK
LSAgICB1bnNpZ25lZCByZW1haW5pbmcgeyAwIH07Ci0gICAgdW5zaWduZWQgb3JpZ2luYWxTaXpl
IHsgMCB9OwotICAgIAotICAgIEZyZWVMaXN0KCkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIHN0
YXRpYyBGcmVlTGlzdCBsaXN0KEZyZWVDZWxsKiBoZWFkLCB1bnNpZ25lZCBieXRlcykKLSAgICB7
Ci0gICAgICAgIEZyZWVMaXN0IHJlc3VsdDsKLSAgICAgICAgcmVzdWx0LmhlYWQgPSBoZWFkOwot
ICAgICAgICByZXN1bHQucmVtYWluaW5nID0gMDsKLSAgICAgICAgcmVzdWx0Lm9yaWdpbmFsU2l6
ZSA9IGJ5dGVzOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAKLSAgICBzdGF0
aWMgRnJlZUxpc3QgYnVtcChjaGFyKiBwYXlsb2FkRW5kLCB1bnNpZ25lZCByZW1haW5pbmcpCi0g
ICAgewotICAgICAgICBGcmVlTGlzdCByZXN1bHQ7Ci0gICAgICAgIHJlc3VsdC5wYXlsb2FkRW5k
ID0gcGF5bG9hZEVuZDsKLSAgICAgICAgcmVzdWx0LnJlbWFpbmluZyA9IHJlbWFpbmluZzsKLSAg
ICAgICAgcmVzdWx0Lm9yaWdpbmFsU2l6ZSA9IHJlbWFpbmluZzsKLSAgICAgICAgcmV0dXJuIHJl
c3VsdDsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZyZWVMaXN0JiBv
dGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBoZWFkID09IG90aGVyLmhlYWQKLSAg
ICAgICAgICAgICYmIHBheWxvYWRFbmQgPT0gb3RoZXIucGF5bG9hZEVuZAotICAgICAgICAgICAg
JiYgcmVtYWluaW5nID09IG90aGVyLnJlbWFpbmluZwotICAgICAgICAgICAgJiYgb3JpZ2luYWxT
aXplID09IG90aGVyLm9yaWdpbmFsU2l6ZTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBvcGVyYXRv
ciE9KGNvbnN0IEZyZWVMaXN0JiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiAh
KCp0aGlzID09IG90aGVyKTsKLSAgICB9Ci0gICAgCi0gICAgZXhwbGljaXQgb3BlcmF0b3IgYm9v
bCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gKnRoaXMgIT0gRnJlZUxpc3QoKTsKLSAg
ICB9CitjbGFzcyBIZWFwQ2VsbDsKIAotICAgIGJvb2wgY29udGFpbnMoY29uc3Qgdm9pZCogdGFy
Z2V0KSBjb25zdDsKLQotICAgIGJvb2wgYWxsb2NhdGlvbldpbGxGYWlsKCkgY29uc3QgeyByZXR1
cm4gIWhlYWQgJiYgIXJlbWFpbmluZzsgfQorY2xhc3MgRnJlZUxpc3QgeworICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKEZyZWVMaXN0KTsKKyAgICAKK3B1YmxpYzoKKyAgICB0eXBlZGVmIHN0ZDo6
YXJyYXk8SGVhcENlbGwqLCBNYXJrZWRCbG9jazo6YXRvbXNQZXJCbG9jaz4gRnJlZUNlbGxMaXN0
OworICAgIAorICAgIEZyZWVMaXN0KHVuc2lnbmVkIGNlbGxTaXplKTsKKyAgICB+RnJlZUxpc3Qo
KTsKKyAgICAKKyAgICB2b2lkIGNsZWFyKCk7CisgICAgCisgICAgdm9pZCBpbml0aWFsaXplTGlz
dCgpOworICAgIHZvaWQgYWRkRnJlZUNlbGwoSGVhcENlbGwqLCB1bnNpZ25lZCBjZWxsU2l6ZSk7
CisgICAgCisgICAgdm9pZCBpbml0aWFsaXplQnVtcChjaGFyKiBwYXlsb2FkRW5kLCB1bnNpZ25l
ZCByZW1haW5pbmcpOworICAgIAorICAgIGJvb2wgYWxsb2NhdGlvbldpbGxGYWlsKCkgY29uc3Qg
eyByZXR1cm4gIW1faW5kZXggJiYgIW1fcmVtYWluaW5nOyB9CiAgICAgYm9vbCBhbGxvY2F0aW9u
V2lsbFN1Y2NlZWQoKSBjb25zdCB7IHJldHVybiAhYWxsb2NhdGlvbldpbGxGYWlsKCk7IH0KICAg
ICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIEhlYXBDZWxsKiBhbGxvY2F0ZShj
b25zdCBGdW5jJiBzbG93UGF0aCk7CisgICAgCisgICAgYm9vbCBjb250YWlucyhIZWFwQ2VsbCop
IGNvbnN0OworICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgdm9pZCBmb3JF
YWNoKGNvbnN0IEZ1bmMmKSBjb25zdDsKKyAgICAKKyAgICB1bnNpZ25lZCBvcmlnaW5hbFNpemUo
KSBjb25zdCB7IHJldHVybiBtX29yaWdpbmFsU2l6ZTsgfQorCisgICAgc3RhdGljIHB0cmRpZmZf
dCBvZmZzZXRPZkxpc3QoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRnJlZUxpc3QsIG1fbGlz
dCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW5kZXgoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoRnJlZUxpc3QsIG1faW5kZXgpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZlBheWxvYWRFbmQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRnJlZUxpc3QsIG1f
cGF5bG9hZEVuZCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mUmVtYWluaW5nKCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZyZWVMaXN0LCBtX3JlbWFpbmluZyk7IH0KKyAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mT3JpZ2luYWxTaXplKCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKEZyZWVMaXN0LCBtX29yaWdpbmFsU2l6ZSk7IH0KKyAgICAKICAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgY2hhciogbV9wYXlsb2Fk
RW5kIHsgbnVsbHB0ciB9OworICAgIHVuc2lnbmVkIG1faW5kZXggeyAwIH07CisgICAgdW5zaWdu
ZWQgbV9yZW1haW5pbmcgeyAwIH07CisgICAgdW5zaWduZWQgbV9vcmlnaW5hbFNpemUgeyAwIH07
CisgICAgdW5zaWduZWQgbV9jZWxsU2l6ZSB7IDAgfTsKKworICAgIC8vIFB1dCB0aGlzIGF0IHRo
ZSBlbmQgdG8ga2VlcCB0aGUgb2Zmc2V0cyB0byB0aGUgb3RoZXIgdGhpbmdzIHNtYWxsLgorICAg
IEZyZWVDZWxsTGlzdCBtX2xpc3Q7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0ZyZWVMaXN0SW5saW5lcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0ZyZWVMaXN0SW5saW5lcy5oCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0ZyZWVMaXN0SW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJGcmVlTGlzdC5oIgor
I2luY2x1ZGUgIk1hcmtlZEJsb2NrLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitpbmxpbmUgdm9p
ZCBGcmVlTGlzdDo6YWRkRnJlZUNlbGwoSGVhcENlbGwqIGNlbGwsIHVuc2lnbmVkIGNlbGxTaXpl
KQoreworICAgIG1fbGlzdFttX2luZGV4KytdID0gY2VsbDsKKyAgICBtX29yaWdpbmFsU2l6ZSAr
PSBjZWxsU2l6ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KK0hlYXBDZWxsKiBGcmVl
TGlzdDo6YWxsb2NhdGUoY29uc3QgRnVuYyYgc2xvd1BhdGgpCit7CisgICAgdW5zaWduZWQgcmVt
YWluaW5nID0gbV9yZW1haW5pbmc7CisgICAgaWYgKHJlbWFpbmluZykgeworICAgICAgICB1bnNp
Z25lZCBjZWxsU2l6ZSA9IG1fY2VsbFNpemU7CisgICAgICAgIHJlbWFpbmluZyAtPSBjZWxsU2l6
ZTsKKyAgICAgICAgbV9yZW1haW5pbmcgPSByZW1haW5pbmc7CisgICAgICAgIHJldHVybiBiaXR3
aXNlX2Nhc3Q8SGVhcENlbGwqPihtX3BheWxvYWRFbmQgLSByZW1haW5pbmcgLSBjZWxsU2l6ZSk7
CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGluZGV4ID0gbV9pbmRleDsKKyAgICBpZiAoVU5M
SUtFTFkoIWluZGV4KSkKKyAgICAgICAgcmV0dXJuIHNsb3dQYXRoKCk7CisgICAgCisgICAgLS1p
bmRleDsKKyAgICBtX2luZGV4ID0gaW5kZXg7CisgICAgcmV0dXJuIG1fbGlzdFtpbmRleF07Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Cit2b2lkIEZyZWVMaXN0Ojpmb3JFYWNoKGNvbnN0
IEZ1bmMmIGZ1bmMpIGNvbnN0Cit7CisgICAgaWYgKG1fcmVtYWluaW5nKSB7CisgICAgICAgIGZv
ciAodW5zaWduZWQgcmVtYWluaW5nID0gbV9yZW1haW5pbmc7IHJlbWFpbmluZzsgcmVtYWluaW5n
IC09IG1fY2VsbFNpemUpCisgICAgICAgICAgICBmdW5jKGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+
KG1fcGF5bG9hZEVuZCAtIHJlbWFpbmluZykpOworICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IG1faW5kZXg7IGktLTspCisgICAgICAgICAgICBmdW5jKG1fbGlzdFtpXSk7
CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuY3BwCShyZXZpc2lvbiAyMTc2
NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04Nyw3ICs4Nyw3IEBAIGJvb2wgSW5jcmVtZW50YWxTd2VlcGVy
Ojpzd2VlcE5leHRCbG9jaygKICAgICAKICAgICBpZiAoYmxvY2spIHsKICAgICAgICAgRGVmZXJH
Q0ZvckFXaGlsZSBkZWZlckdDKG1fdm0tPmhlYXApOwotICAgICAgICBibG9jay0+c3dlZXAoKTsK
KyAgICAgICAgYmxvY2stPnN3ZWVwKG51bGxwdHIpOwogICAgICAgICBtX3ZtLT5oZWFwLm9iamVj
dFNwYWNlKCkuZnJlZU9yU2hyaW5rQmxvY2soYmxvY2spOwogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9j
YXRvci5jcHAJKHJldmlzaW9uIDIxNzY0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtlZEFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDggQEAKIG5h
bWVzcGFjZSBKU0MgewogCiBNYXJrZWRBbGxvY2F0b3I6Ok1hcmtlZEFsbG9jYXRvcihIZWFwKiBo
ZWFwLCBTdWJzcGFjZSogc3Vic3BhY2UsIHNpemVfdCBjZWxsU2l6ZSkKLSAgICA6IG1fY3VycmVu
dEJsb2NrKDApCisgICAgOiBtX2ZyZWVMaXN0KGNlbGxTaXplKQorICAgICwgbV9jdXJyZW50Qmxv
Y2soMCkKICAgICAsIG1fbGFzdEFjdGl2ZUJsb2NrKDApCiAgICAgLCBtX2NlbGxTaXplKHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihjZWxsU2l6ZSkpCiAgICAgLCBtX2F0dHJpYnV0ZXMoc3Vic3BhY2Ut
PmF0dHJpYnV0ZXMoKSkKQEAgLTg4LDcgKzg5LDcgQEAgdm9pZCBNYXJrZWRBbGxvY2F0b3I6OmRp
ZENvbnN1bWVGcmVlTGlzdAogICAgIGlmIChtX2N1cnJlbnRCbG9jaykKICAgICAgICAgbV9jdXJy
ZW50QmxvY2stPmRpZENvbnN1bWVGcmVlTGlzdCgpOwogICAgIAotICAgIHNldEZyZWVMaXN0KEZy
ZWVMaXN0KCkpOworICAgIG1fZnJlZUxpc3QuY2xlYXIoKTsKICAgICBtX2N1cnJlbnRCbG9jayA9
IG51bGxwdHI7CiB9CiAKQEAgLTk3LDcgKzk4LDcgQEAgdm9pZCogTWFya2VkQWxsb2NhdG9yOjp0
cnlBbGxvY2F0ZVdpdGhvdQogICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3Bl
KGZhbHNlKTsKICAgICAKICAgICBBU1NFUlQoIW1fY3VycmVudEJsb2NrKTsKLSAgICBBU1NFUlQo
IW1fZnJlZUxpc3QpOworICAgIEFTU0VSVChtX2ZyZWVMaXN0LmFsbG9jYXRpb25XaWxsRmFpbCgp
KTsKICAgICAKICAgICBmb3IgKDs7KSB7CiAgICAgICAgIG1fYWxsb2NhdGlvbkN1cnNvciA9ICht
X2NhbkFsbG9jYXRlQnV0Tm90RW1wdHkgfCBtX2VtcHR5KS5maW5kQml0KG1fYWxsb2NhdGlvbkN1
cnNvciwgdHJ1ZSk7CkBAIC0xMTMsNyArMTE0LDcgQEAgdm9pZCogTWFya2VkQWxsb2NhdG9yOjp0
cnlBbGxvY2F0ZVdpdGhvdQogICAgIGlmIChPcHRpb25zOjpzdGVhbEVtcHR5QmxvY2tzRnJvbU90
aGVyQWxsb2NhdG9ycygpCiAgICAgICAgICYmIHNob3VsZFN0ZWFsRW1wdHlCbG9ja3NGcm9tT3Ro
ZXJBbGxvY2F0b3JzKCkpIHsKICAgICAgICAgaWYgKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2Nr
ID0gbWFya2VkU3BhY2UoKS5maW5kRW1wdHlCbG9ja1RvU3RlYWwoKSkgewotICAgICAgICAgICAg
YmxvY2stPnN3ZWVwKCk7CisgICAgICAgICAgICBibG9jay0+c3dlZXAobnVsbHB0cik7CiAgICAg
ICAgICAgICAKICAgICAgICAgICAgIC8vIEl0J3MgZ29vZCB0aGF0IHRoaXMgY2xlYXJzIGNhbkFs
bG9jYXRlQnV0Tm90RW1wdHkgYXMgd2VsbCBhcyBhbGwgb3RoZXIgYml0cywKICAgICAgICAgICAg
IC8vIGJlY2F1c2UgdGhlcmUgaXMgYSByZW1vdGUgY2hhbmNlIHRoYXQgYSBibG9jayBtYXkgaGF2
ZSBib3RoIGNhbkFsbG9jYXRlQnV0Tm90RW1wdHkKQEAgLTEzOSwxMSArMTQwLDExIEBAIHZvaWQq
IE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVJbihNYXIKICAgICBBU1NFUlQoYmxvY2spOwog
ICAgIEFTU0VSVCghYmxvY2stPmlzRnJlZUxpc3RlZCgpKTsKICAgICAKLSAgICBGcmVlTGlzdCBm
cmVlTGlzdCA9IGJsb2NrLT5zd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcFRvRnJlZUxp
c3QpOworICAgIGJsb2NrLT5zd2VlcCgmbV9mcmVlTGlzdCk7CiAgICAgCiAgICAgLy8gSXQncyBw
b3NzaWJsZSB0byBzdHVtYmxlIG9uIGEgY29tcGxldGVseSBmdWxsIGJsb2NrLiBNYXJraW5nIHRy
aWVzIHRvIHJldGlyZSB0aGVzZSwgYnV0CiAgICAgLy8gdGhhdCBhbGdvcml0aG0gaXMgcmFjeSBh
bmQgbWF5IGZvcmdldCB0byBkbyBpdCBzb21ldGltZXMuCi0gICAgaWYgKGZyZWVMaXN0LmFsbG9j
YXRpb25XaWxsRmFpbCgpKSB7CisgICAgaWYgKG1fZnJlZUxpc3QuYWxsb2NhdGlvbldpbGxGYWls
KCkpIHsKICAgICAgICAgQVNTRVJUKGJsb2NrLT5pc0ZyZWVMaXN0ZWQoKSk7CiAgICAgICAgIGJs
b2NrLT51bnN3ZWVwV2l0aE5vTmV3bHlBbGxvY2F0ZWQoKTsKICAgICAgICAgQVNTRVJUKCFibG9j
ay0+aXNGcmVlTGlzdGVkKCkpOwpAQCAtMTUzLDE5ICsxNTQsOSBAQCB2b2lkKiBNYXJrZWRBbGxv
Y2F0b3I6OnRyeUFsbG9jYXRlSW4oTWFyCiAgICAgfQogICAgIAogICAgIG1fY3VycmVudEJsb2Nr
ID0gYmxvY2s7Ci0gICAgc2V0RnJlZUxpc3QoZnJlZUxpc3QpOwogICAgIAotICAgIHZvaWQqIHJl
c3VsdDsKLSAgICBpZiAobV9mcmVlTGlzdC5yZW1haW5pbmcpIHsKLSAgICAgICAgdW5zaWduZWQg
Y2VsbFNpemUgPSBtX2NlbGxTaXplOwotICAgICAgICBtX2ZyZWVMaXN0LnJlbWFpbmluZyAtPSBj
ZWxsU2l6ZTsKLSAgICAgICAgcmVzdWx0ID0gbV9mcmVlTGlzdC5wYXlsb2FkRW5kIC0gbV9mcmVl
TGlzdC5yZW1haW5pbmcgLSBjZWxsU2l6ZTsKLSAgICB9IGVsc2UgewotICAgICAgICBGcmVlQ2Vs
bCogaGVhZCA9IG1fZnJlZUxpc3QuaGVhZDsKLSAgICAgICAgbV9mcmVlTGlzdC5oZWFkID0gaGVh
ZC0+bmV4dDsKLSAgICAgICAgcmVzdWx0ID0gaGVhZDsKLSAgICB9Ci0gICAgUkVMRUFTRV9BU1NF
UlQocmVzdWx0KTsKKyAgICB2b2lkKiByZXN1bHQgPSBtX2ZyZWVMaXN0LmFsbG9jYXRlKAorICAg
ICAgICBbXSAoKSAtPiBIZWFwQ2VsbCogeyBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyBy
ZXR1cm4gbnVsbHB0cjsgfSk7CiAgICAgc2V0SXNFZGVuKE5vTG9ja2luZ05lY2Vzc2FyeSwgbV9j
dXJyZW50QmxvY2ssIHRydWUpOwogICAgIG1hcmtlZFNwYWNlKCkuZGlkQWxsb2NhdGVJbkJsb2Nr
KG1fY3VycmVudEJsb2NrKTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMjA4LDcgKzE5OSw3IEBA
IHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZUkKICAgICBkb1Rlc3RDb2xs
ZWN0aW9uc0lmTmVlZGVkKGRlZmVycmFsQ29udGV4dCk7CiAKICAgICBBU1NFUlQoIW1hcmtlZFNw
YWNlKCkuaXNJdGVyYXRpbmcoKSk7Ci0gICAgbV9oZWFwLT5kaWRBbGxvY2F0ZShtX2ZyZWVMaXN0
Lm9yaWdpbmFsU2l6ZSk7CisgICAgbV9oZWFwLT5kaWRBbGxvY2F0ZShtX2ZyZWVMaXN0Lm9yaWdp
bmFsU2l6ZSgpKTsKICAgICAKICAgICBkaWRDb25zdW1lRnJlZUxpc3QoKTsKICAgICAKQEAgLTMz
NCwyMSArMzI1LDIxIEBAIHZvaWQgTWFya2VkQWxsb2NhdG9yOjpzdG9wQWxsb2NhdGluZygpCiAg
ICAgICAgIGRhdGFMb2coUmF3UG9pbnRlcih0aGlzKSwgIjogTWFya2VkQWxsb2NhdG9yOjpzdG9w
QWxsb2NhdGluZyFcbiIpOwogICAgIEFTU0VSVCghbV9sYXN0QWN0aXZlQmxvY2spOwogICAgIGlm
ICghbV9jdXJyZW50QmxvY2spIHsKLSAgICAgICAgQVNTRVJUKCFtX2ZyZWVMaXN0KTsKKyAgICAg
ICAgQVNTRVJUKG1fZnJlZUxpc3QuYWxsb2NhdGlvbldpbGxGYWlsKCkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogICAgIAogICAgIG1fY3VycmVudEJsb2NrLT5zdG9wQWxsb2NhdGluZyhtX2Zy
ZWVMaXN0KTsKICAgICBtX2xhc3RBY3RpdmVCbG9jayA9IG1fY3VycmVudEJsb2NrOwogICAgIG1f
Y3VycmVudEJsb2NrID0gMDsKLSAgICBtX2ZyZWVMaXN0ID0gRnJlZUxpc3QoKTsKKyAgICBtX2Zy
ZWVMaXN0LmNsZWFyKCk7CiB9CiAKIHZvaWQgTWFya2VkQWxsb2NhdG9yOjpwcmVwYXJlRm9yQWxs
b2NhdGlvbigpCiB7CiAgICAgbV9sYXN0QWN0aXZlQmxvY2sgPSBudWxscHRyOwogICAgIG1fY3Vy
cmVudEJsb2NrID0gbnVsbHB0cjsKLSAgICBzZXRGcmVlTGlzdChGcmVlTGlzdCgpKTsKKyAgICBt
X2ZyZWVMaXN0LmNsZWFyKCk7CiAKICAgICBtX2FsbG9jYXRpb25DdXJzb3IgPSAwOwogICAgIG1f
ZW1wdHlDdXJzb3IgPSAwOwpAQCAtMzcxLDE3ICszNjIsMTIgQEAgdm9pZCBNYXJrZWRBbGxvY2F0
b3I6Omxhc3RDaGFuY2VUb0ZpbmFsaQogICAgICAgICB9KTsKIH0KIAotdm9pZCBNYXJrZWRBbGxv
Y2F0b3I6OnNldEZyZWVMaXN0KGNvbnN0IEZyZWVMaXN0JiBmcmVlTGlzdCkKLXsKLSAgICBtX2Zy
ZWVMaXN0ID0gZnJlZUxpc3Q7Ci19Ci0KIHZvaWQgTWFya2VkQWxsb2NhdG9yOjpyZXN1bWVBbGxv
Y2F0aW5nKCkKIHsKICAgICBpZiAoIW1fbGFzdEFjdGl2ZUJsb2NrKQogICAgICAgICByZXR1cm47
CiAKLSAgICBtX2ZyZWVMaXN0ID0gbV9sYXN0QWN0aXZlQmxvY2stPnJlc3VtZUFsbG9jYXRpbmco
KTsKKyAgICBtX2xhc3RBY3RpdmVCbG9jay0+cmVzdW1lQWxsb2NhdGluZyhtX2ZyZWVMaXN0KTsK
ICAgICBtX2N1cnJlbnRCbG9jayA9IG1fbGFzdEFjdGl2ZUJsb2NrOwogICAgIG1fbGFzdEFjdGl2
ZUJsb2NrID0gbnVsbHB0cjsKIH0KQEAgLTQ0NSw3ICs0MzEsNyBAQCB2b2lkIE1hcmtlZEFsbG9j
YXRvcjo6c3dlZXAoKQogICAgIG1fdW5zd2VwdC5mb3JFYWNoU2V0Qml0KAogICAgICAgICBbJl0g
KHNpemVfdCBpbmRleCkgewogICAgICAgICAgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2sg
PSBtX2Jsb2Nrc1tpbmRleF07Ci0gICAgICAgICAgICBibG9jay0+c3dlZXAoKTsKKyAgICAgICAg
ICAgIGJsb2NrLT5zd2VlcChudWxscHRyKTsKICAgICAgICAgfSk7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCShyZXZpc2lvbiAyMTc2
NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaAkod29y
a2luZyBjb3B5KQpAQCAtMTU2LDcgKzE1Niw3IEBAIHB1YmxpYzoKICAgICB2b2lkKiB0cnlBbGxv
Y2F0ZShHQ0RlZmVycmFsQ29udGV4dCogPSBudWxscHRyKTsKICAgICBIZWFwKiBoZWFwKCkgeyBy
ZXR1cm4gbV9oZWFwOyB9CiAKLSAgICBib29sIGlzRnJlZUxpc3RlZENlbGwoY29uc3Qgdm9pZCog
dGFyZ2V0KSBjb25zdCB7IHJldHVybiBtX2ZyZWVMaXN0LmNvbnRhaW5zKHRhcmdldCk7IH0KKyAg
ICBib29sIGlzRnJlZUxpc3RlZENlbGwoY29uc3Qgdm9pZCogdGFyZ2V0KSBjb25zdDsKIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaEJsb2NrKGNvbnN0IEZ1bmN0
b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hOb3RFbXB0
eUJsb2NrKGNvbnN0IEZ1bmN0b3ImKTsKQEAgLTIwOSw2ICsyMDksOCBAQCBwdWJsaWM6CiAgICAg
U3Vic3BhY2UqIHN1YnNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9zdWJzcGFjZTsgfQogICAgIE1h
cmtlZFNwYWNlJiBtYXJrZWRTcGFjZSgpIGNvbnN0OwogICAgIAorICAgIGNvbnN0IEZyZWVMaXN0
JiBmcmVlTGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJlZUxpc3Q7IH0KKyAgICAKICAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICB2b2lkIGR1bXBCaXRzKFByaW50U3RyZWFt
JiA9IFdURjo6ZGF0YUZpbGUoKSk7CiAgICAgCkBAIC0yMjcsOCArMjI5LDYgQEAgcHJpdmF0ZToK
ICAgICB2b2lkKiBhbGxvY2F0ZUluKE1hcmtlZEJsb2NrOjpIYW5kbGUqKTsKICAgICBBTFdBWVNf
SU5MSU5FIHZvaWQgZG9UZXN0Q29sbGVjdGlvbnNJZk5lZWRlZChHQ0RlZmVycmFsQ29udGV4dCop
OwogICAgIAotICAgIHZvaWQgc2V0RnJlZUxpc3QoY29uc3QgRnJlZUxpc3QmKTsKLSAgICAKICAg
ICBGcmVlTGlzdCBtX2ZyZWVMaXN0OwogICAgIAogICAgIFZlY3RvcjxNYXJrZWRCbG9jazo6SGFu
ZGxlKj4gbV9ibG9ja3M7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRB
bGxvY2F0b3JJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oCShyZXZpc2lvbiAyMTc2NDYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI1LDQ0ICsyNSwzMCBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkZyZWVM
aXN0SW5saW5lcy5oIgogI2luY2x1ZGUgIk1hcmtlZEFsbG9jYXRvci5oIgogCiBuYW1lc3BhY2Ug
SlNDIHsKIAoraW5saW5lIGJvb2wgTWFya2VkQWxsb2NhdG9yOjppc0ZyZWVMaXN0ZWRDZWxsKGNv
bnN0IHZvaWQqIHRhcmdldCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9mcmVlTGlzdC5jb250YWlu
cyhiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPih0YXJnZXQpKTsKK30KKwogQUxXQVlTX0lOTElORSB2
b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlKEdDRGVmZXJyYWxDb250ZXh0KiBkZWZl
cnJhbENvbnRleHQpCiB7Ci0gICAgdW5zaWduZWQgcmVtYWluaW5nID0gbV9mcmVlTGlzdC5yZW1h
aW5pbmc7Ci0gICAgaWYgKHJlbWFpbmluZykgewotICAgICAgICB1bnNpZ25lZCBjZWxsU2l6ZSA9
IG1fY2VsbFNpemU7Ci0gICAgICAgIHJlbWFpbmluZyAtPSBjZWxsU2l6ZTsKLSAgICAgICAgbV9m
cmVlTGlzdC5yZW1haW5pbmcgPSByZW1haW5pbmc7Ci0gICAgICAgIHJldHVybiBtX2ZyZWVMaXN0
LnBheWxvYWRFbmQgLSByZW1haW5pbmcgLSBjZWxsU2l6ZTsKLSAgICB9Ci0gICAgCi0gICAgRnJl
ZUNlbGwqIGhlYWQgPSBtX2ZyZWVMaXN0LmhlYWQ7Ci0gICAgaWYgKFVOTElLRUxZKCFoZWFkKSkK
LSAgICAgICAgcmV0dXJuIHRyeUFsbG9jYXRlU2xvd0Nhc2UoZGVmZXJyYWxDb250ZXh0KTsKLSAg
ICAKLSAgICBtX2ZyZWVMaXN0LmhlYWQgPSBoZWFkLT5uZXh0OwotICAgIHJldHVybiBoZWFkOwor
ICAgIHJldHVybiBtX2ZyZWVMaXN0LmFsbG9jYXRlKAorICAgICAgICBbJl0gKCkgLT4gSGVhcENl
bGwqIHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIZWFwQ2VsbCo+KHRyeUFsbG9j
YXRlU2xvd0Nhc2UoZGVmZXJyYWxDb250ZXh0KSk7CisgICAgICAgIH0pOwogfQogCiBBTFdBWVNf
SU5MSU5FIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGUoR0NEZWZlcnJhbENvbnRleHQq
IGRlZmVycmFsQ29udGV4dCkKIHsKLSAgICB1bnNpZ25lZCByZW1haW5pbmcgPSBtX2ZyZWVMaXN0
LnJlbWFpbmluZzsKLSAgICBpZiAocmVtYWluaW5nKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNlbGxT
aXplID0gbV9jZWxsU2l6ZTsKLSAgICAgICAgcmVtYWluaW5nIC09IGNlbGxTaXplOwotICAgICAg
ICBtX2ZyZWVMaXN0LnJlbWFpbmluZyA9IHJlbWFpbmluZzsKLSAgICAgICAgcmV0dXJuIG1fZnJl
ZUxpc3QucGF5bG9hZEVuZCAtIHJlbWFpbmluZyAtIGNlbGxTaXplOwotICAgIH0KLSAgICAKLSAg
ICBGcmVlQ2VsbCogaGVhZCA9IG1fZnJlZUxpc3QuaGVhZDsKLSAgICBpZiAoVU5MSUtFTFkoIWhl
YWQpKQotICAgICAgICByZXR1cm4gYWxsb2NhdGVTbG93Q2FzZShkZWZlcnJhbENvbnRleHQpOwot
ICAgIAotICAgIG1fZnJlZUxpc3QuaGVhZCA9IGhlYWQtPm5leHQ7Ci0gICAgcmV0dXJuIGhlYWQ7
CisgICAgcmV0dXJuIG1fZnJlZUxpc3QuYWxsb2NhdGUoCisgICAgICAgIFsmXSAoKSAtPiBIZWFw
Q2VsbCogeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhlYXBDZWxsKj4oYWxsb2Nh
dGVTbG93Q2FzZShkZWZlcnJhbENvbnRleHQpKTsKKyAgICAgICAgfSk7CiB9CiAKIHRlbXBsYXRl
IDx0eXBlbmFtZSBGdW5jdG9yPiBpbmxpbmUgdm9pZCBNYXJrZWRBbGxvY2F0b3I6OmZvckVhY2hC
bG9jayhjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZEJsb2NrLmNwcAkocmV2aXNpb24gMjE3NjQ2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw5ICsy
NiwxMSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk1hcmtlZEJsb2NrLmgiCiAK
KyNpbmNsdWRlICJGcmVlTGlzdElubGluZXMuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIKICNpbmNs
dWRlICJKU0Rlc3RydWN0aWJsZU9iamVjdC5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNp
bmNsdWRlICJNYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTWFya2VkQmxvY2tJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiU3VwZXJTYW1wbGVyLmgiCiAjaW5jbHVkZSAiU3dlZXBpbmdT
Y29wZS5oIgpAQCAtMTM0LDggKzEzNiw3IEBAIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3Rv
cEFsbG9jYXRpbmcKICAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVl
OwogICAgICAgICB9KTsKIAotICAgIGZvckVhY2hGcmVlQ2VsbCgKLSAgICAgICAgZnJlZUxpc3Qs
CisgICAgZnJlZUxpc3QuZm9yRWFjaCgKICAgICAgICAgWyZdIChIZWFwQ2VsbCogY2VsbCkgewog
ICAgICAgICAgICAgaWYgKGZhbHNlKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIkZyZWUgY2Vs
bDogIiwgUmF3UG9pbnRlcihjZWxsKSwgIlxuIik7CkBAIC0xNTYsMTAgKzE1NywxMCBAQCB2b2lk
IE1hcmtlZEJsb2NrOjpIYW5kbGU6Omxhc3RDaGFuY2VUb0ZpCiAgICAgbV93ZWFrU2V0Lmxhc3RD
aGFuY2VUb0ZpbmFsaXplKCk7CiAgICAgbV9uZXdseUFsbG9jYXRlZC5jbGVhckFsbCgpOwogICAg
IG1fbmV3bHlBbGxvY2F0ZWRWZXJzaW9uID0gaGVhcCgpLT5vYmplY3RTcGFjZSgpLm5ld2x5QWxs
b2NhdGVkVmVyc2lvbigpOwotICAgIHN3ZWVwKCk7CisgICAgc3dlZXAobnVsbHB0cik7CiB9CiAK
LUZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnJlc3VtZUFsbG9jYXRpbmcoKQordm9pZCBN
YXJrZWRCbG9jazo6SGFuZGxlOjpyZXN1bWVBbGxvY2F0aW5nKEZyZWVMaXN0JiBmcmVlTGlzdCkK
IHsKICAgICB7CiAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soYmxvY2soKS5tX2xvY2sp
OwpAQCAtMTczLDQwICsxNzQsMjUgQEAgRnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6cmVz
dW1lQWxsbwogICAgICAgICAgICAgaWYgKGZhbHNlKQogICAgICAgICAgICAgICAgIGRhdGFMb2co
IlRoZXJlIGFpbid0IG5vIG5ld2x5IGFsbG9jYXRlZC5cbiIpOwogICAgICAgICAgICAgLy8gVGhp
cyBtZWFucyB3ZSBoYWQgYWxyZWFkeSBleGhhdXN0ZWQgdGhlIGJsb2NrIHdoZW4gd2Ugc3RvcHBl
ZCBhbGxvY2F0aW9uLgotICAgICAgICAgICAgcmV0dXJuIEZyZWVMaXN0KCk7CisgICAgICAgICAg
ICBmcmVlTGlzdC5jbGVhcigpOworICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAg
fQogCiAgICAgLy8gUmUtY3JlYXRlIG91ciBmcmVlIGxpc3QgZnJvbSBiZWZvcmUgc3RvcHBpbmcg
YWxsb2NhdGlvbi4gTm90ZSB0aGF0IHRoaXMgbWF5IHJldHVybiBhbiBlbXB0eQogICAgIC8vIGZy
ZWVsaXN0LCBpbiB3aGljaCBjYXNlIHRoZSBibG9jayB3aWxsIHN0aWxsIGJlIE1hcmtlZCEKLSAg
ICByZXR1cm4gc3dlZXAoU3dlZXBUb0ZyZWVMaXN0KTsKKyAgICBzd2VlcCgmZnJlZUxpc3QpOwog
fQogCiB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OnphcChjb25zdCBGcmVlTGlzdCYgZnJlZUxp
c3QpCiB7Ci0gICAgZm9yRWFjaEZyZWVDZWxsKAotICAgICAgICBmcmVlTGlzdCwKKyAgICBmcmVl
TGlzdC5mb3JFYWNoKAogICAgICAgICBbJl0gKEhlYXBDZWxsKiBjZWxsKSB7CiAgICAgICAgICAg
ICBpZiAobV9hdHRyaWJ1dGVzLmRlc3RydWN0aW9uID09IE5lZWRzRGVzdHJ1Y3Rpb24pCiAgICAg
ICAgICAgICAgICAgY2VsbC0+emFwKCk7CiAgICAgICAgIH0pOwogfQogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jPgotdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpmb3JFYWNoRnJlZUNlbGwoY29u
c3QgRnJlZUxpc3QmIGZyZWVMaXN0LCBjb25zdCBGdW5jJiBmdW5jKQotewotICAgIGlmIChmcmVl
TGlzdC5yZW1haW5pbmcpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCByZW1haW5pbmcgPSBmcmVl
TGlzdC5yZW1haW5pbmc7IHJlbWFpbmluZzsgcmVtYWluaW5nIC09IGNlbGxTaXplKCkpCi0gICAg
ICAgICAgICBmdW5jKGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KGZyZWVMaXN0LnBheWxvYWRFbmQg
LSByZW1haW5pbmcpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBmb3IgKEZyZWVDZWxsKiBjdXJy
ZW50ID0gZnJlZUxpc3QuaGVhZDsgY3VycmVudDspIHsKLSAgICAgICAgICAgIEZyZWVDZWxsKiBu
ZXh0ID0gY3VycmVudC0+bmV4dDsKLSAgICAgICAgICAgIGZ1bmMoYml0d2lzZV9jYXN0PEhlYXBD
ZWxsKj4oY3VycmVudCkpOwotICAgICAgICAgICAgY3VycmVudCA9IG5leHQ7Ci0gICAgICAgIH0K
LSAgICB9Ci19Ci0KIHZvaWQgTWFya2VkQmxvY2s6OmFib3V0VG9NYXJrU2xvdyhIZWFwVmVyc2lv
biBtYXJraW5nVmVyc2lvbikKIHsKICAgICBBU1NFUlQodm0oKS0+aGVhcC5vYmplY3RTcGFjZSgp
LmlzTWFya2luZygpKTsKQEAgLTQwNywyMCArMzkzLDIyIEBAIFN1YnNwYWNlKiBNYXJrZWRCbG9j
azo6SGFuZGxlOjpzdWJzcGFjZSgKICAgICByZXR1cm4gYWxsb2NhdG9yKCktPnN1YnNwYWNlKCk7
CiB9CiAKLUZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN3ZWVwKFN3ZWVwTW9kZSBzd2Vl
cE1vZGUpCit2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN3ZWVwKEZyZWVMaXN0KiBmcmVlTGlz
dCkKIHsKICAgICBTd2VlcGluZ1Njb3BlIHN3ZWVwaW5nU2NvcGUoKmhlYXAoKSk7CiAgICAgCisg
ICAgU3dlZXBNb2RlIHN3ZWVwTW9kZSA9IGZyZWVMaXN0ID8gU3dlZXBUb0ZyZWVMaXN0IDogU3dl
ZXBPbmx5OworICAgIAogICAgIG1fYWxsb2NhdG9yLT5zZXRJc1Vuc3dlcHQoTm9Mb2NraW5nTmVj
ZXNzYXJ5LCB0aGlzLCBmYWxzZSk7CiAgICAgCiAgICAgbV93ZWFrU2V0LnN3ZWVwKCk7CiAKICAg
ICBpZiAoc3dlZXBNb2RlID09IFN3ZWVwT25seSAmJiBtX2F0dHJpYnV0ZXMuZGVzdHJ1Y3Rpb24g
PT0gRG9lc05vdE5lZWREZXN0cnVjdGlvbikKLSAgICAgICAgcmV0dXJuIEZyZWVMaXN0KCk7Cisg
ICAgICAgIHJldHVybjsKIAogICAgIGlmIChVTkxJS0VMWShtX2lzRnJlZUxpc3RlZCkpIHsKICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoc3dlZXBNb2RlID09IFN3ZWVwVG9GcmVlTGlzdCk7Ci0gICAg
ICAgIHJldHVybiBGcmVlTGlzdCgpOworICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAogICAg
IEFTU0VSVCghbV9hbGxvY2F0b3ItPmlzQWxsb2NhdGVkKE5vTG9ja2luZ05lY2Vzc2FyeSwgdGhp
cykpOwpAQCAtNDI4LDggKzQxNiwxMCBAQCBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpz
d2VlcChTd2VlCiAgICAgaWYgKHNwYWNlKCktPmlzTWFya2luZygpKQogICAgICAgICBibG9jaygp
Lm1fbG9jay5sb2NrKCk7CiAgICAgCi0gICAgaWYgKG1fYXR0cmlidXRlcy5kZXN0cnVjdGlvbiA9
PSBOZWVkc0Rlc3RydWN0aW9uKQotICAgICAgICByZXR1cm4gc3Vic3BhY2UoKS0+ZmluaXNoU3dl
ZXAoKnRoaXMsIHN3ZWVwTW9kZSk7CisgICAgaWYgKG1fYXR0cmlidXRlcy5kZXN0cnVjdGlvbiA9
PSBOZWVkc0Rlc3RydWN0aW9uKSB7CisgICAgICAgIHN1YnNwYWNlKCktPmZpbmlzaFN3ZWVwKCp0
aGlzLCBmcmVlTGlzdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgCiAgICAgLy8gSGFu
ZGxlIHRoZSBuby1kZXN0cnVjdG9yIHNwZWNpYWxpemF0aW9ucyBoZXJlLCBzaW5jZSB3ZSBoYXZl
IHRoZSBtb3N0IG9mIHRob3NlLiBUaGlzCiAgICAgLy8gZW5zdXJlcyB0aGF0IHRoZXkgZG9uJ3Qg
Z2V0IHJlLXNwZWNpYWxpemVkIGZvciBldmVyeSBkZXN0cnVjdG9yIHNwYWNlLgpAQCAtNDM5LDcg
KzQyOSw2IEBAIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN3ZWVwKFN3ZWUKICAgICBO
ZXdseUFsbG9jYXRlZE1vZGUgbmV3bHlBbGxvY2F0ZWRNb2RlID0gdGhpcy0+bmV3bHlBbGxvY2F0
ZWRNb2RlKCk7CiAgICAgTWFya3NNb2RlIG1hcmtzTW9kZSA9IHRoaXMtPm1hcmtzTW9kZSgpOwog
ICAgIAotICAgIEZyZWVMaXN0IHJlc3VsdDsKICAgICBhdXRvIHRyeVNwZWNpYWxpemVkID0gWyZd
ICgpIC0+IGJvb2wgewogICAgICAgICBpZiAoc3dlZXBNb2RlICE9IFN3ZWVwVG9GcmVlTGlzdCkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTQ1MiwyMCArNDQxLDIwIEBAIEZyZWVMaXN0
IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN3ZWVwKFN3ZWUKICAgICAgICAgY2FzZSBJc0VtcHR5Ogog
ICAgICAgICAgICAgc3dpdGNoIChtYXJrc01vZGUpIHsKICAgICAgICAgICAgIGNhc2UgTWFya3NO
b3RTdGFsZToKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBzcGVjaWFsaXplZFN3ZWVwPHRydWUs
IElzRW1wdHksIFN3ZWVwVG9GcmVlTGlzdCwgQmxvY2tIYXNOb0Rlc3RydWN0b3JzLCBEb250U2Ny
aWJibGUsIERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzTm90U3RhbGU+KElzRW1wdHks
IFN3ZWVwVG9GcmVlTGlzdCwgQmxvY2tIYXNOb0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUsIERv
ZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzTm90U3RhbGUsIFtdIChWTSYsIEpTQ2VsbCop
IHsgfSk7CisgICAgICAgICAgICAgICAgc3BlY2lhbGl6ZWRTd2VlcDx0cnVlLCBJc0VtcHR5LCBT
d2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzTm9EZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBEb2Vz
Tm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBNYXJrc05vdFN0YWxlPihmcmVlTGlzdCwgSXNFbXB0eSwg
U3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9l
c05vdEhhdmVOZXdseUFsbG9jYXRlZCwgTWFya3NOb3RTdGFsZSwgW10gKFZNJiwgSlNDZWxsKikg
eyB9KTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIGNhc2UgTWFy
a3NTdGFsZToKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBzcGVjaWFsaXplZFN3ZWVwPHRydWUs
IElzRW1wdHksIFN3ZWVwVG9GcmVlTGlzdCwgQmxvY2tIYXNOb0Rlc3RydWN0b3JzLCBEb250U2Ny
aWJibGUsIERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzU3RhbGU+KElzRW1wdHksIFN3
ZWVwVG9GcmVlTGlzdCwgQmxvY2tIYXNOb0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUsIERvZXNO
b3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzU3RhbGUsIFtdIChWTSYsIEpTQ2VsbCopIHsgfSk7
CisgICAgICAgICAgICAgICAgc3BlY2lhbGl6ZWRTd2VlcDx0cnVlLCBJc0VtcHR5LCBTd2VlcFRv
RnJlZUxpc3QsIEJsb2NrSGFzTm9EZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2
ZU5ld2x5QWxsb2NhdGVkLCBNYXJrc1N0YWxlPihmcmVlTGlzdCwgSXNFbXB0eSwgU3dlZXBUb0Zy
ZWVMaXN0LCBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9lc05vdEhhdmVO
ZXdseUFsbG9jYXRlZCwgTWFya3NTdGFsZSwgW10gKFZNJiwgSlNDZWxsKikgeyB9KTsKICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIE5vdEVtcHR5OgogICAgICAgICAgICAgc3dpdGNoIChtYXJrc01vZGUp
IHsKICAgICAgICAgICAgIGNhc2UgTWFya3NOb3RTdGFsZToKLSAgICAgICAgICAgICAgICByZXN1
bHQgPSBzcGVjaWFsaXplZFN3ZWVwPHRydWUsIE5vdEVtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJs
b2NrSGFzTm9EZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2Nh
dGVkLCBNYXJrc05vdFN0YWxlPihJc0VtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzTm9E
ZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBNYXJr
c05vdFN0YWxlLCBbXSAoVk0mLCBKU0NlbGwqKSB7IH0pOworICAgICAgICAgICAgICAgIHNwZWNp
YWxpemVkU3dlZXA8dHJ1ZSwgTm90RW1wdHksIFN3ZWVwVG9GcmVlTGlzdCwgQmxvY2tIYXNOb0Rl
c3RydWN0b3JzLCBEb250U2NyaWJibGUsIERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtz
Tm90U3RhbGU+KGZyZWVMaXN0LCBJc0VtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzTm9E
ZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBNYXJr
c05vdFN0YWxlLCBbXSAoVk0mLCBKU0NlbGwqKSB7IH0pOwogICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICAgICAgY2FzZSBNYXJrc1N0YWxlOgotICAgICAgICAgICAgICAgIHJl
c3VsdCA9IHNwZWNpYWxpemVkU3dlZXA8dHJ1ZSwgTm90RW1wdHksIFN3ZWVwVG9GcmVlTGlzdCwg
QmxvY2tIYXNOb0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUsIERvZXNOb3RIYXZlTmV3bHlBbGxv
Y2F0ZWQsIE1hcmtzU3RhbGU+KElzRW1wdHksIFN3ZWVwVG9GcmVlTGlzdCwgQmxvY2tIYXNOb0Rl
c3RydWN0b3JzLCBEb250U2NyaWJibGUsIERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtz
U3RhbGUsIFtdIChWTSYsIEpTQ2VsbCopIHsgfSk7CisgICAgICAgICAgICAgICAgc3BlY2lhbGl6
ZWRTd2VlcDx0cnVlLCBOb3RFbXB0eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hhc05vRGVzdHJ1
Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCwgTWFya3NTdGFs
ZT4oZnJlZUxpc3QsIElzRW1wdHksIFN3ZWVwVG9GcmVlTGlzdCwgQmxvY2tIYXNOb0Rlc3RydWN0
b3JzLCBEb250U2NyaWJibGUsIERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzU3RhbGUs
IFtdIChWTSYsIEpTQ2VsbCopIHsgfSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKQEAgLTQ3NSwxMCArNDY0LDE2IEBAIEZy
ZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN3ZWVwKFN3ZWUKICAgICB9OwogICAgIAogICAg
IGlmICh0cnlTcGVjaWFsaXplZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICBy
ZXR1cm47CiAKICAgICAvLyBUaGUgdGVtcGxhdGUgYXJndW1lbnRzIGRvbid0IG1hdHRlciBiZWNh
dXNlIHRoZSBmaXJzdCBvbmUgaXMgZmFsc2UuCi0gICAgcmV0dXJuIHNwZWNpYWxpemVkU3dlZXA8
ZmFsc2UsIElzRW1wdHksIFN3ZWVwT25seSwgQmxvY2tIYXNOb0Rlc3RydWN0b3JzLCBEb250U2Ny
aWJibGUsIEhhc05ld2x5QWxsb2NhdGVkLCBNYXJrc1N0YWxlPihlbXB0eU1vZGUsIHN3ZWVwTW9k
ZSwgQmxvY2tIYXNOb0Rlc3RydWN0b3JzLCBzY3JpYmJsZU1vZGUsIG5ld2x5QWxsb2NhdGVkTW9k
ZSwgbWFya3NNb2RlLCBbXSAoVk0mLCBKU0NlbGwqKSB7IH0pOworICAgIHNwZWNpYWxpemVkU3dl
ZXA8ZmFsc2UsIElzRW1wdHksIFN3ZWVwT25seSwgQmxvY2tIYXNOb0Rlc3RydWN0b3JzLCBEb250
U2NyaWJibGUsIEhhc05ld2x5QWxsb2NhdGVkLCBNYXJrc1N0YWxlPihmcmVlTGlzdCwgZW1wdHlN
b2RlLCBzd2VlcE1vZGUsIEJsb2NrSGFzTm9EZXN0cnVjdG9ycywgc2NyaWJibGVNb2RlLCBuZXds
eUFsbG9jYXRlZE1vZGUsIG1hcmtzTW9kZSwgW10gKFZNJiwgSlNDZWxsKikgeyB9KTsKK30KKwor
Ym9vbCBNYXJrZWRCbG9jazo6SGFuZGxlOjppc0ZyZWVMaXN0ZWRDZWxsKGNvbnN0IHZvaWQqIHRh
cmdldCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaXNGcmVlTGlzdGVkKCkpOworICAgIHJldHVybiBt
X2FsbG9jYXRvci0+aXNGcmVlTGlzdGVkQ2VsbCh0YXJnZXQpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkocmV2
aXNpb24gMjE3NjQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2su
aAkod29ya2luZyBjb3B5KQpAQCAtMjMsNyArMjMsNiBAQAogCiAjaW5jbHVkZSAiQWxsb2NhdG9y
QXR0cmlidXRlcy5oIgogI2luY2x1ZGUgIkRlc3RydWN0aW9uTW9kZS5oIgotI2luY2x1ZGUgIkZy
ZWVMaXN0LmgiCiAjaW5jbHVkZSAiSGVhcENlbGwuaCIKICNpbmNsdWRlICJJdGVyYXRpb25TdGF0
dXMuaCIKICNpbmNsdWRlICJXZWFrU2V0LmgiCkBAIC0zNiw2ICszNSw3IEBACiAKIG5hbWVzcGFj
ZSBKU0MgewogICAgIAorY2xhc3MgRnJlZUxpc3Q7CiBjbGFzcyBIZWFwOwogY2xhc3MgSlNDZWxs
OwogY2xhc3MgTWFya2VkQWxsb2NhdG9yOwpAQCAtMTE3LDIxICsxMTcsMjIgQEAgcHVibGljOgog
ICAgICAgICBWTSogdm0oKSBjb25zdDsKICAgICAgICAgV2Vha1NldCYgd2Vha1NldCgpOwogICAg
ICAgICAgICAgCisgICAgICAgIGVudW0gU3dlZXBNb2RlIHsgU3dlZXBPbmx5LCBTd2VlcFRvRnJl
ZUxpc3QgfTsKKwogICAgICAgICAvLyBTd2VlcGluZyBlbnN1cmVzIHRoYXQgZGVzdHJ1Y3RvcnMg
Z2V0IGNhbGxlZCBhbmQgcmVtb3ZlcyB0aGUgYmxvY2sgZnJvbSB0aGUgdW5zd2VwdAogICAgICAg
ICAvLyBzZXQuIFN3ZWVwaW5nIHRvIGZyZWUgbGlzdCBhbHNvIHJlbW92ZXMgdGhlIGJsb2NrIGZy
b20gdGhlIGVtcHR5IHNldCwgaWYgaXQgd2FzIGluIHRoYXQKICAgICAgICAgLy8gc2V0LiBTd2Vl
cGluZyB3aXRoIFN3ZWVwT25seSBtYXkgYWRkIHRoaXMgYmxvY2sgdG8gdGhlIGVtcHR5IHNldCwg
aWYgdGhlIGJsb2NrIGlzIGZvdW5kCi0gICAgICAgIC8vIHRvIGJlIGVtcHR5LgorICAgICAgICAv
LyB0byBiZSBlbXB0eS4gVGhlIGZyZWUtbGlzdCBiZWluZyBudWxsIGltcGxpZXMgU3dlZXBPbmx5
LgogICAgICAgICAvLwogICAgICAgICAvLyBOb3RlIHRoYXQgeW91IG5lZWQgdG8gbWFrZSBzdXJl
IHRoYXQgdGhlIGVtcHR5IGJpdCByZWZsZWN0cyByZWFsaXR5LiBJZiBpdCdzIG5vdCBzZXQKICAg
ICAgICAgLy8gYW5kIHRoZSBibG9jayBpcyBmcmVzaGx5IGNyZWF0ZWQsIHRoZW4gd2UnbGwgbWFr
ZSB0aGUgbWlzdGFrZSBvZiBydW5uaW5nIGRlc3RydWN0b3JzIGluCiAgICAgICAgIC8vIHRoZSBi
bG9jay4gSWYgaXQncyBub3Qgc2V0IGFuZCB0aGUgYmxvY2sgaGFzIG5vdGhpbmcgbWFya2VkLCB0
aGVuIHdlJ2xsIG1ha2UgdGhlCiAgICAgICAgIC8vIG1pc3Rha2Ugb2YgbWFraW5nIGEgcG9wIGZy
ZWVsaXN0IHJhdGhlciB0aGFuIGEgYnVtcCBmcmVlbGlzdC4KLSAgICAgICAgZW51bSBTd2VlcE1v
ZGUgeyBTd2VlcE9ubHksIFN3ZWVwVG9GcmVlTGlzdCB9OwotICAgICAgICBGcmVlTGlzdCBzd2Vl
cChTd2VlcE1vZGUgPSBTd2VlcE9ubHkpOworICAgICAgICB2b2lkIHN3ZWVwKEZyZWVMaXN0Kik7
CiAgICAgICAgIAogICAgICAgICAvLyBUaGlzIGlzIHRvIGJlIGNhbGxlZCBieSBTdWJzcGFjZS4K
ICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRGVzdHJveUZ1bmM+Ci0gICAgICAgIEZyZWVMaXN0
IGZpbmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlKFN3ZWVwTW9kZSwgY29uc3QgRGVzdHJveUZ1bmMm
KTsKKyAgICAgICAgdm9pZCBmaW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZShGcmVlTGlzdCosIGNv
bnN0IERlc3Ryb3lGdW5jJik7CiAgICAgICAgIAogICAgICAgICB2b2lkIHVuc3dlZXBXaXRoTm9O
ZXdseUFsbG9jYXRlZCgpOwogICAgICAgICAKQEAgLTE0Nyw3ICsxNDgsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIC8vIG9mIHRoZXNlIGZ1bmN0aW9uczoKICAgICAgICAgdm9pZCBkaWRDb25zdW1lRnJl
ZUxpc3QoKTsgLy8gQ2FsbCB0aGlzIG9uY2UgeW91J3ZlIGFsbG9jYXRlZCBhbGwgdGhlIGl0ZW1z
IGluIHRoZSBmcmVlIGxpc3QuCiAgICAgICAgIHZvaWQgc3RvcEFsbG9jYXRpbmcoY29uc3QgRnJl
ZUxpc3QmKTsKLSAgICAgICAgRnJlZUxpc3QgcmVzdW1lQWxsb2NhdGluZygpOyAvLyBDYWxsIHRo
aXMgaWYgeW91IGNhbm9uaWNhbGl6ZWQgYSBibG9jayBmb3Igc29tZSBub24tY29sbGVjdGlvbiBy
ZWxhdGVkIHB1cnBvc2UuCisgICAgICAgIHZvaWQgcmVzdW1lQWxsb2NhdGluZyhGcmVlTGlzdCYp
OyAvLyBDYWxsIHRoaXMgaWYgeW91IGNhbm9uaWNhbGl6ZWQgYSBibG9jayBmb3Igc29tZSBub24t
Y29sbGVjdGlvbiByZWxhdGVkIHB1cnBvc2UuCiAgICAgICAgICAgICAKICAgICAgICAgc2l6ZV90
IGNlbGxTaXplKCk7CiAgICAgICAgIGlubGluZSB1bnNpZ25lZCBjZWxsc1BlckJsb2NrKCk7CkBA
IC0yMTUsMTAgKzIxNiw3IEBAIHB1YmxpYzoKICAgICAgICAgTWFya3NNb2RlIG1hcmtzTW9kZSgp
OwogICAgICAgICAKICAgICAgICAgdGVtcGxhdGU8Ym9vbCwgRW1wdHlNb2RlLCBTd2VlcE1vZGUs
IFN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlLCBTY3JpYmJsZU1vZGUsIE5ld2x5QWxsb2NhdGVkTW9kZSwg
TWFya3NNb2RlLCB0eXBlbmFtZSBEZXN0cm95RnVuYz4KLSAgICAgICAgRnJlZUxpc3Qgc3BlY2lh
bGl6ZWRTd2VlcChFbXB0eU1vZGUsIFN3ZWVwTW9kZSwgU3dlZXBEZXN0cnVjdGlvbk1vZGUsIFNj
cmliYmxlTW9kZSwgTmV3bHlBbGxvY2F0ZWRNb2RlLCBNYXJrc01vZGUsIGNvbnN0IERlc3Ryb3lG
dW5jJik7Ci0gICAgICAgIAotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotICAgICAg
ICB2b2lkIGZvckVhY2hGcmVlQ2VsbChjb25zdCBGcmVlTGlzdCYsIGNvbnN0IEZ1bmMmKTsKKyAg
ICAgICAgdm9pZCBzcGVjaWFsaXplZFN3ZWVwKEZyZWVMaXN0KiwgRW1wdHlNb2RlLCBTd2VlcE1v
ZGUsIFN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlLCBTY3JpYmJsZU1vZGUsIE5ld2x5QWxsb2NhdGVkTW9k
ZSwgTWFya3NNb2RlLCBjb25zdCBEZXN0cm95RnVuYyYpOwogICAgICAgICAKICAgICAgICAgdm9p
ZCBzZXRJc0ZyZWVMaXN0ZWQoKTsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrZWRCbG9ja0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrZWRCbG9ja0lubGluZXMuaAkocmV2aXNpb24gMjE3NjQ2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTExNywxMiArMTE3LDYgQEAgaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6OkhhbmRs
ZTo6aXNMaXZlQwogICAgIHJldHVybiBpc0xpdmUobWFya2luZ1ZlcnNpb24sIGlzTWFya2luZywg
c3RhdGljX2Nhc3Q8Y29uc3QgSGVhcENlbGwqPihwKSk7CiB9CiAKLWlubGluZSBib29sIE1hcmtl
ZEJsb2NrOjpIYW5kbGU6OmlzRnJlZUxpc3RlZENlbGwoY29uc3Qgdm9pZCogdGFyZ2V0KSBjb25z
dAotewotICAgIEFTU0VSVChpc0ZyZWVMaXN0ZWQoKSk7Ci0gICAgcmV0dXJuIG1fYWxsb2NhdG9y
LT5pc0ZyZWVMaXN0ZWRDZWxsKHRhcmdldCk7Ci19Ci0KIC8vIFRoZSBmb2xsb3dpbmcgaGFzIHRv
IGJlIHRydWUgZm9yIHNwZWNpYWxpemF0aW9uIHRvIGtpY2sgaW46CiAvLwogLy8gc3dlZXBNb2Rl
ID09IFN3ZWVwVG9GcmVlTGlzdApAQCAtMTQ1LDcgKzEzOSw3IEBAIGlubGluZSBib29sIE1hcmtl
ZEJsb2NrOjpIYW5kbGU6OmlzRnJlZUwKIC8vIE9ubHkgdGhlIERvZXNOb3ROZWVkRGVzdHJ1Y3Rp
b24gb25lIHNob3VsZCBiZSBzcGVjaWFsaXplZCBieSBNYXJrZWRCbG9jay4KIAogdGVtcGxhdGU8
Ym9vbCBzcGVjaWFsaXplLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpFbXB0eU1vZGUgc3BlY2lhbGl6
ZWRFbXB0eU1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwTW9kZSBzcGVjaWFsaXplZFN3
ZWVwTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBEZXN0cnVjdGlvbk1vZGUgc3BlY2lh
bGl6ZWREZXN0cnVjdGlvbk1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlNjcmliYmxlTW9kZSBz
cGVjaWFsaXplZFNjcmliYmxlTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6TmV3bHlBbGxvY2F0
ZWRNb2RlIHNwZWNpYWxpemVkTmV3bHlBbGxvY2F0ZWRNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxl
OjpNYXJrc01vZGUgc3BlY2lhbGl6ZWRNYXJrc01vZGUsIHR5cGVuYW1lIERlc3Ryb3lGdW5jPgot
RnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3BlY2lhbGl6ZWRTd2VlcChNYXJrZWRCbG9j
azo6SGFuZGxlOjpFbXB0eU1vZGUgZW1wdHlNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2Vl
cE1vZGUgc3dlZXBNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcERlc3RydWN0aW9uTW9k
ZSBkZXN0cnVjdGlvbk1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlNjcmliYmxlTW9kZSBzY3Jp
YmJsZU1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6Ok5ld2x5QWxsb2NhdGVkTW9kZSBuZXdseUFs
bG9jYXRlZE1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6Ok1hcmtzTW9kZSBtYXJrc01vZGUsIGNv
bnN0IERlc3Ryb3lGdW5jJiBkZXN0cm95RnVuYykKK3ZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6
c3BlY2lhbGl6ZWRTd2VlcChGcmVlTGlzdCogZnJlZUxpc3QsIE1hcmtlZEJsb2NrOjpIYW5kbGU6
OkVtcHR5TW9kZSBlbXB0eU1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwTW9kZSBzd2Vl
cE1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0
aW9uTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U2NyaWJibGVNb2RlIHNjcmliYmxlTW9kZSwg
TWFya2VkQmxvY2s6OkhhbmRsZTo6TmV3bHlBbGxvY2F0ZWRNb2RlIG5ld2x5QWxsb2NhdGVkTW9k
ZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6TWFya3NNb2RlIG1hcmtzTW9kZSwgY29uc3QgRGVzdHJv
eUZ1bmMmIGRlc3Ryb3lGdW5jKQogewogICAgIGlmIChzcGVjaWFsaXplKSB7CiAgICAgICAgIGVt
cHR5TW9kZSA9IHNwZWNpYWxpemVkRW1wdHlNb2RlOwpAQCAtMTY1LDYgKzE1OSw4IEBAIEZyZWVM
aXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxpemUKICAgICBpZiAoZmFsc2UpCiAgICAg
ICAgIGRhdGFMb2coUmF3UG9pbnRlcih0aGlzKSwgIi8iLCBSYXdQb2ludGVyKCZibG9jayksICI6
IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxpemVkU3dlZXAhXG4iKTsKICAgICAKKyAgICB1
bnNpZ25lZCBjZWxsU2l6ZSA9IHRoaXMtPmNlbGxTaXplKCk7CisgICAgCiAgICAgaWYgKE9wdGlv
bnM6OnVzZUJ1bXBBbGxvY2F0b3IoKQogICAgICAgICAmJiBlbXB0eU1vZGUgPT0gSXNFbXB0eQog
ICAgICAgICAmJiBuZXdseUFsbG9jYXRlZE1vZGUgPT0gRG9lc05vdEhhdmVOZXdseUFsbG9jYXRl
ZCkgewpAQCAtMTgyLDcgKzE3OCw3IEBAIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnNw
ZWNpYWxpemUKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgY2hhciogc3RhcnRPZkxhc3RD
ZWxsID0gc3RhdGljX2Nhc3Q8Y2hhcio+KGNlbGxBbGlnbihibG9jay5hdG9tcygpICsgbV9lbmRB
dG9tIC0gMSkpOwotICAgICAgICBjaGFyKiBwYXlsb2FkRW5kID0gc3RhcnRPZkxhc3RDZWxsICsg
Y2VsbFNpemUoKTsKKyAgICAgICAgY2hhciogcGF5bG9hZEVuZCA9IHN0YXJ0T2ZMYXN0Q2VsbCAr
IGNlbGxTaXplOwogICAgICAgICBSRUxFQVNFX0FTU0VSVChwYXlsb2FkRW5kIC0gTWFya2VkQmxv
Y2s6OmJsb2NrU2l6ZSA8PSBiaXR3aXNlX2Nhc3Q8Y2hhcio+KCZibG9jaykpOwogICAgICAgICBj
aGFyKiBwYXlsb2FkQmVnaW4gPSBiaXR3aXNlX2Nhc3Q8Y2hhcio+KGJsb2NrLmF0b21zKCkgKyBm
aXJzdEF0b20oKSk7CiAgICAgICAgIGlmIChzY3JpYmJsZU1vZGUgPT0gU2NyaWJibGUpCkBAIC0x
OTMsMTcgKzE4OSwxOCBAQCBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzcGVjaWFsaXpl
CiAgICAgICAgICAgICBtX2FsbG9jYXRvci0+c2V0SXNFbXB0eShOb0xvY2tpbmdOZWNlc3Nhcnks
IHRoaXMsIHRydWUpOwogICAgICAgICBpZiAoc3BhY2UoKS0+aXNNYXJraW5nKCkpCiAgICAgICAg
ICAgICBibG9jay5tX2xvY2sudW5sb2NrKCk7Ci0gICAgICAgIEZyZWVMaXN0IHJlc3VsdCA9IEZy
ZWVMaXN0OjpidW1wKHBheWxvYWRFbmQsIHBheWxvYWRFbmQgLSBwYXlsb2FkQmVnaW4pOworICAg
ICAgICBpZiAoc3dlZXBNb2RlID09IFN3ZWVwVG9GcmVlTGlzdCkKKyAgICAgICAgICAgIGZyZWVM
aXN0LT5pbml0aWFsaXplQnVtcChwYXlsb2FkRW5kLCBwYXlsb2FkRW5kIC0gcGF5bG9hZEJlZ2lu
KTsKICAgICAgICAgaWYgKGZhbHNlKQotICAgICAgICAgICAgZGF0YUxvZygiUXVpY2tseSBzd2Vw
dCBibG9jayAiLCBSYXdQb2ludGVyKHRoaXMpLCAiIHdpdGggY2VsbCBzaXplICIsIGNlbGxTaXpl
KCksICIgYW5kIGF0dHJpYnV0ZXMgIiwgbV9hdHRyaWJ1dGVzLCAiOiAiLCByZXN1bHQsICJcbiIp
OwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgZGF0YUxvZygiUXVpY2tseSBz
d2VwdCBibG9jayAiLCBSYXdQb2ludGVyKHRoaXMpLCAiIHdpdGggY2VsbCBzaXplICIsIGNlbGxT
aXplLCAiIGFuZCBhdHRyaWJ1dGVzICIsIG1fYXR0cmlidXRlcywgIjogIiwgcG9pbnRlckR1bXAo
ZnJlZUxpc3QpLCAiXG4iKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIC8vIFRoaXMg
cHJvZHVjZXMgYSBmcmVlIGxpc3QgdGhhdCBpcyBvcmRlcmVkIGluIHJldmVyc2UgdGhyb3VnaCB0
aGUgYmxvY2suCiAgICAgLy8gVGhpcyBpcyBmaW5lLCBzaW5jZSB0aGUgYWxsb2NhdGlvbiBjb2Rl
IG1ha2VzIG5vIGFzc3VtcHRpb25zIGFib3V0IHRoZQogICAgIC8vIG9yZGVyIG9mIHRoZSBmcmVl
IGxpc3QuCi0gICAgRnJlZUNlbGwqIGhlYWQgPSAwOwotICAgIHNpemVfdCBjb3VudCA9IDA7Cisg
ICAgaWYgKHN3ZWVwTW9kZSA9PSBTd2VlcFRvRnJlZUxpc3QpCisgICAgICAgIGZyZWVMaXN0LT5p
bml0aWFsaXplTGlzdCgpOwogICAgIGJvb2wgaXNFbXB0eSA9IHRydWU7CiAgICAgVmVjdG9yPHNp
emVfdD4gZGVhZENlbGxzOwogICAgIFZNJiB2bSA9ICp0aGlzLT52bSgpOwpAQCAtMjE5LDEyICsy
MTYsOSBAQCBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzcGVjaWFsaXplCiAgICAgICAg
IH0KIAogICAgICAgICBpZiAoc3dlZXBNb2RlID09IFN3ZWVwVG9GcmVlTGlzdCkgewotICAgICAg
ICAgICAgRnJlZUNlbGwqIGZyZWVDZWxsID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8RnJlZUNlbGwq
PihjZWxsKTsKICAgICAgICAgICAgIGlmIChzY3JpYmJsZU1vZGUgPT0gU2NyaWJibGUpCi0gICAg
ICAgICAgICAgICAgc2NyaWJibGUoZnJlZUNlbGwsIGNlbGxTaXplKCkpOwotICAgICAgICAgICAg
ZnJlZUNlbGwtPm5leHQgPSBoZWFkOwotICAgICAgICAgICAgaGVhZCA9IGZyZWVDZWxsOwotICAg
ICAgICAgICAgKytjb3VudDsKKyAgICAgICAgICAgICAgICBzY3JpYmJsZShjZWxsLCBjZWxsU2l6
ZSk7CisgICAgICAgICAgICBmcmVlTGlzdC0+YWRkRnJlZUNlbGwoY2VsbCwgY2VsbFNpemUpOwog
ICAgICAgICB9CiAgICAgfTsKICAgICBmb3IgKHNpemVfdCBpID0gZmlyc3RBdG9tKCk7IGkgPCBt
X2VuZEF0b207IGkgKz0gbV9hdG9tc1BlckNlbGwpIHsKQEAgLTI1NCwyNiArMjQ4LDI0IEBAIEZy
ZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxpemUKICAgICAgICAgICAgIGhhbmRs
ZURlYWRDZWxsKGkpOwogICAgIH0KIAotICAgIEZyZWVMaXN0IHJlc3VsdCA9IEZyZWVMaXN0Ojps
aXN0KGhlYWQsIGNvdW50ICogY2VsbFNpemUoKSk7CiAgICAgaWYgKHN3ZWVwTW9kZSA9PSBTd2Vl
cFRvRnJlZUxpc3QpCiAgICAgICAgIHNldElzRnJlZUxpc3RlZCgpOwogICAgIGVsc2UgaWYgKGlz
RW1wdHkpCiAgICAgICAgIG1fYWxsb2NhdG9yLT5zZXRJc0VtcHR5KE5vTG9ja2luZ05lY2Vzc2Fy
eSwgdGhpcywgdHJ1ZSk7CiAgICAgaWYgKGZhbHNlKQotICAgICAgICBkYXRhTG9nKCJTbG93bHkg
c3dlcHQgYmxvY2sgIiwgUmF3UG9pbnRlcigmYmxvY2spLCAiIHdpdGggY2VsbCBzaXplICIsIGNl
bGxTaXplKCksICIgYW5kIGF0dHJpYnV0ZXMgIiwgbV9hdHRyaWJ1dGVzLCAiOiAiLCByZXN1bHQs
ICJcbiIpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIGRhdGFMb2coIlNsb3dseSBzd2Vw
dCBibG9jayAiLCBSYXdQb2ludGVyKCZibG9jayksICIgd2l0aCBjZWxsIHNpemUgIiwgY2VsbFNp
emUsICIgYW5kIGF0dHJpYnV0ZXMgIiwgbV9hdHRyaWJ1dGVzLCAiOiAiLCBwb2ludGVyRHVtcChm
cmVlTGlzdCksICJcbiIpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBEZXN0cm95RnVuYz4KLUZy
ZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlKFN3
ZWVwTW9kZSBzd2VlcE1vZGUsIGNvbnN0IERlc3Ryb3lGdW5jJiBkZXN0cm95RnVuYykKK3ZvaWQg
TWFya2VkQmxvY2s6OkhhbmRsZTo6ZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2UoRnJlZUxpc3Qq
IGZyZWVMaXN0LCBjb25zdCBEZXN0cm95RnVuYyYgZGVzdHJveUZ1bmMpCiB7CisgICAgU3dlZXBN
b2RlIHN3ZWVwTW9kZSA9IGZyZWVMaXN0ID8gU3dlZXBUb0ZyZWVMaXN0IDogU3dlZXBPbmx5Owog
ICAgIFN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0aW9uTW9kZSA9IHRoaXMtPnN3ZWVwRGVz
dHJ1Y3Rpb25Nb2RlKCk7CiAgICAgRW1wdHlNb2RlIGVtcHR5TW9kZSA9IHRoaXMtPmVtcHR5TW9k
ZSgpOwogICAgIFNjcmliYmxlTW9kZSBzY3JpYmJsZU1vZGUgPSB0aGlzLT5zY3JpYmJsZU1vZGUo
KTsKICAgICBOZXdseUFsbG9jYXRlZE1vZGUgbmV3bHlBbGxvY2F0ZWRNb2RlID0gdGhpcy0+bmV3
bHlBbGxvY2F0ZWRNb2RlKCk7CiAgICAgTWFya3NNb2RlIG1hcmtzTW9kZSA9IHRoaXMtPm1hcmtz
TW9kZSgpOwogCi0gICAgRnJlZUxpc3QgcmVzdWx0OwogICAgIGF1dG8gdHJ5U3BlY2lhbGl6ZWQg
PSBbJl0gKCkgLT4gYm9vbCB7CiAgICAgICAgIGlmIChzd2VlcE1vZGUgIT0gU3dlZXBUb0ZyZWVM
aXN0KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjg4LDEwICsyODAsMTAgQEAgRnJl
ZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6ZmluaXNoU3dlZQogICAgICAgICAKICAgICAgICAg
c3dpdGNoIChtYXJrc01vZGUpIHsKICAgICAgICAgY2FzZSBNYXJrc05vdFN0YWxlOgotICAgICAg
ICAgICAgcmVzdWx0ID0gc3BlY2lhbGl6ZWRTd2VlcDx0cnVlLCBOb3RFbXB0eSwgU3dlZXBUb0Zy
ZWVMaXN0LCBCbG9ja0hhc0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUsIERvZXNOb3RIYXZlTmV3
bHlBbGxvY2F0ZWQsIE1hcmtzTm90U3RhbGU+KElzRW1wdHksIFN3ZWVwVG9GcmVlTGlzdCwgQmxv
Y2tIYXNEZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVk
LCBNYXJrc05vdFN0YWxlLCBkZXN0cm95RnVuYyk7CisgICAgICAgICAgICBzcGVjaWFsaXplZFN3
ZWVwPHRydWUsIE5vdEVtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzRGVzdHJ1Y3RvcnMs
IERvbnRTY3JpYmJsZSwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCwgTWFya3NOb3RTdGFsZT4o
ZnJlZUxpc3QsIElzRW1wdHksIFN3ZWVwVG9GcmVlTGlzdCwgQmxvY2tIYXNEZXN0cnVjdG9ycywg
RG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBNYXJrc05vdFN0YWxlLCBk
ZXN0cm95RnVuYyk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgY2FzZSBNYXJr
c1N0YWxlOgotICAgICAgICAgICAgcmVzdWx0ID0gc3BlY2lhbGl6ZWRTd2VlcDx0cnVlLCBOb3RF
bXB0eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hhc0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUs
IERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzU3RhbGU+KElzRW1wdHksIFN3ZWVwVG9G
cmVlTGlzdCwgQmxvY2tIYXNEZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5l
d2x5QWxsb2NhdGVkLCBNYXJrc1N0YWxlLCBkZXN0cm95RnVuYyk7CisgICAgICAgICAgICBzcGVj
aWFsaXplZFN3ZWVwPHRydWUsIE5vdEVtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzRGVz
dHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCwgTWFya3NT
dGFsZT4oZnJlZUxpc3QsIElzRW1wdHksIFN3ZWVwVG9GcmVlTGlzdCwgQmxvY2tIYXNEZXN0cnVj
dG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBNYXJrc1N0YWxl
LCBkZXN0cm95RnVuYyk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAg
ICAgICAKQEAgLTI5OSwxMCArMjkxLDEwIEBAIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6
OmZpbmlzaFN3ZWUKICAgICB9OwogICAgIAogICAgIGlmICh0cnlTcGVjaWFsaXplZCgpKQotICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm47CiAgICAgCiAgICAgLy8gVGhlIHRl
bXBsYXRlIGFyZ3VtZW50cyBkb24ndCBtYXR0ZXIgYmVjYXVzZSB0aGUgZmlyc3Qgb25lIGlzIGZh
bHNlLgotICAgIHJldHVybiBzcGVjaWFsaXplZFN3ZWVwPGZhbHNlLCBJc0VtcHR5LCBTd2VlcE9u
bHksIEJsb2NrSGFzTm9EZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBIYXNOZXdseUFsbG9jYXRl
ZCwgTWFya3NTdGFsZT4oZW1wdHlNb2RlLCBzd2VlcE1vZGUsIGRlc3RydWN0aW9uTW9kZSwgc2Ny
aWJibGVNb2RlLCBuZXdseUFsbG9jYXRlZE1vZGUsIG1hcmtzTW9kZSwgZGVzdHJveUZ1bmMpOwor
ICAgIHNwZWNpYWxpemVkU3dlZXA8ZmFsc2UsIElzRW1wdHksIFN3ZWVwT25seSwgQmxvY2tIYXNO
b0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUsIEhhc05ld2x5QWxsb2NhdGVkLCBNYXJrc1N0YWxl
PihmcmVlTGlzdCwgZW1wdHlNb2RlLCBzd2VlcE1vZGUsIGRlc3RydWN0aW9uTW9kZSwgc2NyaWJi
bGVNb2RlLCBuZXdseUFsbG9jYXRlZE1vZGUsIG1hcmtzTW9kZSwgZGVzdHJveUZ1bmMpOwogfQog
CiBpbmxpbmUgTWFya2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBEZXN0cnVjdGlvbk1vZGUgTWFya2Vk
QmxvY2s6OkhhbmRsZTo6c3dlZXBEZXN0cnVjdGlvbk1vZGUoKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1N1YnNwYWNlLmNwcAkocmV2aXNpb24gMjE3NjQ2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw5ICs3
Nyw5IEBAIFN1YnNwYWNlOjp+U3Vic3BhY2UoKQogewogfQogCi1GcmVlTGlzdCBTdWJzcGFjZTo6
ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYgYmxvY2ssIE1hcmtlZEJsb2NrOjpIYW5k
bGU6OlN3ZWVwTW9kZSBzd2VlcE1vZGUpCit2b2lkIFN1YnNwYWNlOjpmaW5pc2hTd2VlcChNYXJr
ZWRCbG9jazo6SGFuZGxlJiBibG9jaywgRnJlZUxpc3QqIGZyZWVMaXN0KQogewotICAgIHJldHVy
biBibG9jay5maW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZShzd2VlcE1vZGUsIERlc3Ryb3lGdW5j
KCkpOworICAgIGJsb2NrLmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlKGZyZWVMaXN0LCBEZXN0
cm95RnVuYygpKTsKIH0KIAogdm9pZCBTdWJzcGFjZTo6ZGVzdHJveShWTSYgdm0sIEpTQ2VsbCog
Y2VsbCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuaAkocmV2aXNpb24g
MjE3NjQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgLy8gVGhlIHB1cnBv
c2Ugb2Ygb3ZlcnJpZGluZyB0aGlzIGlzIHRvIHNwZWNpYWxpemUgdGhlIHN3ZWVwIGZvciB5b3Vy
IGRlc3RydWN0b3JzLiBUaGlzIHdvbid0CiAgICAgLy8gYmUgY2FsbGVkIGZvciBuby1kZXN0cnVj
dG9yIGJsb2Nrcy4gVGhpcyBtdXN0IGNhbGwgTWFya2VkQmxvY2s6OmZpbmlzaFN3ZWVwS25vd2lu
Z1N1YnNwYWNlLgotICAgIHZpcnR1YWwgRnJlZUxpc3QgZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6
OkhhbmRsZSYsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwTW9kZSk7CisgICAgdmlydHVhbCB2
b2lkIGZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmLCBGcmVlTGlzdCopOwogICAgIAog
ICAgIC8vIFRoZXNlIGdldCBjYWxsZWQgZm9yIGxhcmdlIG9iamVjdHMuCiAgICAgdmlydHVhbCB2
b2lkIGRlc3Ryb3koVk0mLCBKU0NlbGwqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1N1YnNwYWNlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1N1YnNwYWNlSW5saW5lcy5oCShyZXZpc2lvbiAyMTc2NDYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjYs
NyArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJKU0NlbGwuaCIKLSNpbmNsdWRl
ICJNYXJrZWRBbGxvY2F0b3IuaCIKKyNpbmNsdWRlICJNYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiTWFya2VkQmxvY2suaCIKICNpbmNsdWRlICJNYXJrZWRTcGFjZS5oIgogI2lu
Y2x1ZGUgIlN1YnNwYWNlLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2Vt
Ymx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNz
ZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDIxNzY0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0NTgsNyArMTQ1OCw3
IEBAIHB1YmxpYzoKICAgICAgICAgSnVtcCBwb3BQYXRoOwogICAgICAgICBKdW1wIGRvbmU7CiAg
ICAgICAgIAotICAgICAgICBsb2FkMzIoQWRkcmVzcyhhbGxvY2F0b3JHUFIsIE1hcmtlZEFsbG9j
YXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgT0JKRUNUX09GRlNFVE9GKEZyZWVMaXN0LCByZW1h
aW5pbmcpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MoYWxsb2NhdG9yR1BS
LCBNYXJrZWRBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRP
ZlJlbWFpbmluZygpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgcG9wUGF0aCA9IGJyYW5jaFRlc3Qz
MihaZXJvLCByZXN1bHRHUFIpOwogICAgICAgICBpZiAoYWxsb2NhdG9yKQogICAgICAgICAgICAg
YWRkMzIoVHJ1c3RlZEltbTMyKC1hbGxvY2F0b3ItPmNlbGxTaXplKCkpLCByZXN1bHRHUFIsIHNj
cmF0Y2hHUFIpOwpAQCAtMTQ3Miw4ICsxNDcyLDggQEAgcHVibGljOgogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgICAgIG5lZ1B0cihyZXN1bHRHUFIpOwotICAgICAgICBzdG9yZTMyKHNj
cmF0Y2hHUFIsIEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBNYXJrZWRBbGxvY2F0b3I6Om9mZnNldE9m
RnJlZUxpc3QoKSArIE9CSkVDVF9PRkZTRVRPRihGcmVlTGlzdCwgcmVtYWluaW5nKSkpOwotICAg
ICAgICBBZGRyZXNzIHBheWxvYWRFbmRBZGRyID0gQWRkcmVzcyhhbGxvY2F0b3JHUFIsIE1hcmtl
ZEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgT0JKRUNUX09GRlNFVE9GKEZyZWVMaXN0
LCBwYXlsb2FkRW5kKSk7CisgICAgICAgIHN0b3JlMzIoc2NyYXRjaEdQUiwgQWRkcmVzcyhhbGxv
Y2F0b3JHUFIsIE1hcmtlZEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6
Om9mZnNldE9mUmVtYWluaW5nKCkpKTsKKyAgICAgICAgQWRkcmVzcyBwYXlsb2FkRW5kQWRkciA9
IEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBNYXJrZWRBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3Qo
KSArIEZyZWVMaXN0OjpvZmZzZXRPZlBheWxvYWRFbmQoKSk7CiAgICAgICAgIGlmIChpc1g4Nigp
KQogICAgICAgICAgICAgYWRkUHRyKHBheWxvYWRFbmRBZGRyLCByZXN1bHRHUFIpOwogICAgICAg
ICBlbHNlIHsKQEAgLTE0ODUsMTMgKzE0ODUsMTcgQEAgcHVibGljOgogICAgICAgICAKICAgICAg
ICAgcG9wUGF0aC5saW5rKHRoaXMpOwogICAgICAgICAKLSAgICAgICAgbG9hZFB0cihBZGRyZXNz
KGFsbG9jYXRvckdQUiwgTWFya2VkQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBPQkpF
Q1RfT0ZGU0VUT0YoRnJlZUxpc3QsIGhlYWQpKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgc2xvd1Bh
dGguYXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywgcmVzdWx0R1BSKSk7Ci0gICAgICAgIAotICAg
ICAgICAvLyBUaGUgb2JqZWN0IGlzIGhhbGYtYWxsb2NhdGVkOiB3ZSBoYXZlIHdoYXQgd2Uga25v
dyBpcyBhIGZyZXNoIG9iamVjdCwgYnV0Ci0gICAgICAgIC8vIGl0J3Mgc3RpbGwgb24gdGhlIEdD
J3MgZnJlZSBsaXN0LgotICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0R1BSKSwgc2NyYXRj
aEdQUik7Ci0gICAgICAgIHN0b3JlUHRyKHNjcmF0Y2hHUFIsIEFkZHJlc3MoYWxsb2NhdG9yR1BS
LCBNYXJrZWRBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIE9CSkVDVF9PRkZTRVRPRihG
cmVlTGlzdCwgaGVhZCkpKTsKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBN
YXJrZWRBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZklu
ZGV4KCkpLCByZXN1bHRHUFIpOworCisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hUZXN0
MzIoWmVybywgcmVzdWx0R1BSKSk7CisgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgc3RvcmUzMihyZXN1bHRHUFIsIEFkZHJlc3MoYWxsb2NhdG9yR1BS
LCBNYXJrZWRBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRP
ZkluZGV4KCkpKTsKKyAgICAgICAgaWYgKGlzWDg2KCkpCisgICAgICAgICAgICBsb2FkUHRyKEJh
c2VJbmRleChhbGxvY2F0b3JHUFIsIHJlc3VsdEdQUiwgdGltZXNQdHIoKSwgTWFya2VkQWxsb2Nh
dG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZMaXN0KCkpLCByZXN1
bHRHUFIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIo
TWFya2VkQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZM
aXN0KCkpLCBhbGxvY2F0b3JHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgbG9hZFB0cihC
YXNlSW5kZXgoc2NyYXRjaEdQUiwgcmVzdWx0R1BSLCB0aW1lc1B0cigpKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgfQogICAgICAgICAKICAgICAgICAgZG9uZS5saW5rKHRoaXMpOwogICAgIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vi
c3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
RGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UuY3BwCShyZXZpc2lvbiAyMTc2NDYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTIsOSArNTIsOSBAQCBKU0Rlc3RydWN0aWJsZU9iamVjdFN1
YnNwYWNlOjp+SlNEZXN0cnVjCiB7CiB9CiAKLUZyZWVMaXN0IEpTRGVzdHJ1Y3RpYmxlT2JqZWN0
U3Vic3BhY2U6OmZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmIGhhbmRsZSwgTWFya2Vk
QmxvY2s6OkhhbmRsZTo6U3dlZXBNb2RlIHN3ZWVwTW9kZSkKK3ZvaWQgSlNEZXN0cnVjdGlibGVP
YmplY3RTdWJzcGFjZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYgaGFuZGxlLCBG
cmVlTGlzdCogZnJlZUxpc3QpCiB7Ci0gICAgcmV0dXJuIGhhbmRsZS5maW5pc2hTd2VlcEtub3dp
bmdTdWJzcGFjZShzd2VlcE1vZGUsIERlc3Ryb3lGdW5jKCkpOworICAgIGhhbmRsZS5maW5pc2hT
d2VlcEtub3dpbmdTdWJzcGFjZShmcmVlTGlzdCwgRGVzdHJveUZ1bmMoKSk7CiB9CiAKIHZvaWQg
SlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZTo6ZGVzdHJveShWTSYgdm0sIEpTQ2VsbCogY2Vs
bCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0U3Vic3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlLmgJKHJldmlzaW9uIDIxNzY0NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAm
KTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIH5KU0Rlc3RydWN0aWJsZU9iamVjdFN1
YnNwYWNlKCk7CiAgICAgCi0gICAgRnJlZUxpc3QgZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6Okhh
bmRsZSYsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwTW9kZSkgb3ZlcnJpZGU7CisgICAgdm9p
ZCBmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiwgRnJlZUxpc3QqKSBvdmVycmlkZTsK
ICAgICB2b2lkIGRlc3Ryb3koVk0mLCBKU0NlbGwqKSBvdmVycmlkZTsKIH07CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJz
cGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
ZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlLmNwcAkocmV2aXNpb24gMjE3NjQ2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1
YnNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsOSArNTIsOSBAQCBKU1NlZ21lbnRlZFZh
cmlhYmxlT2JqZWN0U3Vic3BhY2U6On5KU1NlCiB7CiB9CiAKLUZyZWVMaXN0IEpTU2VnbWVudGVk
VmFyaWFibGVPYmplY3RTdWJzcGFjZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYg
aGFuZGxlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcE1vZGUgc3dlZXBNb2RlKQordm9pZCBK
U1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2U6OmZpbmlzaFN3ZWVwKE1hcmtlZEJsb2Nr
OjpIYW5kbGUmIGhhbmRsZSwgRnJlZUxpc3QqIGZyZWVMaXN0KQogewotICAgIHJldHVybiBoYW5k
bGUuZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2Uoc3dlZXBNb2RlLCBEZXN0cm95RnVuYygpKTsK
KyAgICBoYW5kbGUuZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2UoZnJlZUxpc3QsIERlc3Ryb3lG
dW5jKCkpOwogfQogCiB2b2lkIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZTo6ZGVz
dHJveShWTSYgdm0sIEpTQ2VsbCogY2VsbCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RT
dWJzcGFjZS5oCShyZXZpc2lvbiAyMTc2NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UuaAkod29ya2luZyBjb3B5KQpA
QCAtMzQsNyArMzQsNyBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNTZWdtZW50
ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVhcCYpOwogICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZpcnR1YWwgfkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZSgp
OwogICAgIAotICAgIEZyZWVMaXN0IGZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmLCBN
YXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcE1vZGUpIG92ZXJyaWRlOworICAgIHZvaWQgZmluaXNo
U3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYsIEZyZWVMaXN0Kikgb3ZlcnJpZGU7CiAgICAgdm9p
ZCBkZXN0cm95KFZNJiwgSlNDZWxsKikgb3ZlcnJpZGU7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ1N1YnNwYWNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ1N1YnNwYWNlLmNwcAkocmV2aXNp
b24gMjE3NjQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdTdWJz
cGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDkgKzUyLDkgQEAgSlNTdHJpbmdTdWJzcGFj
ZTo6fkpTU3RyaW5nU3Vic3BhY2UoKQogewogfQogCi1GcmVlTGlzdCBKU1N0cmluZ1N1YnNwYWNl
OjpmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiBoYW5kbGUsIE1hcmtlZEJsb2NrOjpI
YW5kbGU6OlN3ZWVwTW9kZSBzd2VlcE1vZGUpCit2b2lkIEpTU3RyaW5nU3Vic3BhY2U6OmZpbmlz
aFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmIGhhbmRsZSwgRnJlZUxpc3QqIGZyZWVMaXN0KQog
ewotICAgIHJldHVybiBoYW5kbGUuZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2Uoc3dlZXBNb2Rl
LCBEZXN0cm95RnVuYygpKTsKKyAgICBoYW5kbGUuZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2Uo
ZnJlZUxpc3QsIERlc3Ryb3lGdW5jKCkpOwogfQogCiB2b2lkIEpTU3RyaW5nU3Vic3BhY2U6OmRl
c3Ryb3koVk0mIHZtLCBKU0NlbGwqIGNlbGwpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1N0cmluZ1N1YnNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdTdWJzcGFjZS5oCShyZXZpc2lvbiAyMTc2NDYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ1N1YnNwYWNlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM0LDcgKzM0LDcgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIEpT
U3RyaW5nU3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJik7CiAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgdmlydHVhbCB+SlNTdHJpbmdTdWJzcGFjZSgpOwogICAgIAotICAgIEZyZWVMaXN0IGZpbmlz
aFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcE1v
ZGUpIG92ZXJyaWRlOworICAgIHZvaWQgZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYs
IEZyZWVMaXN0Kikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkZXN0cm95KFZNJiwgSlNDZWxsKikgb3Zl
cnJpZGU7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25z
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5o
CShyZXZpc2lvbiAyMTc2NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRp
b25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2Miw3ICszNjIsNyBAQCB0eXBlZGVmIGNvbnN0IGNo
YXIqIG9wdGlvblN0cmluZzsKICAgICB2KGdjTG9nTGV2ZWwsIGxvZ0dDLCBHQ0xvZ2dpbmc6Ok5v
bmUsIE5vcm1hbCwgImRlYnVnZ2luZyBvcHRpb24gdG8gbG9nIEdDIGFjdGl2aXR5ICgwID0gTm9u
ZSwgMSA9IEJhc2ljLCAyID0gVmVyYm9zZSkiKSBcCiAgICAgdihib29sLCB1c2VHQywgdHJ1ZSwg
Tm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihib29sLCBnY0F0RW5kLCBmYWxzZSwgTm9ybWFsLCAi
SWYgdHJ1ZSwgdGhlIGpzYyBDTEkgd2lsbCBkbyBhIEdDIGJlZm9yZSBleGl0aW5nIikgXAotICAg
IHYoYm9vbCwgZm9yY2VHQ1Nsb3dQYXRocywgZmFsc2UsIE5vcm1hbCwgIklmIHRydWUsIHdlIHdp
bGwgZm9yY2UgYWxsIEpJVCBmYXN0IGFsbG9jYXRpb25zIGRvd24gdGhlaXIgc2xvdyBwYXRocy4i
KVwKKyAgICB2KGJvb2wsIGZvcmNlR0NTbG93UGF0aHMsIGZhbHNlLCBOb3JtYWwsICJJZiB0cnVl
LCB3ZSB3aWxsIGZvcmNlIGFsbCBKSVQgZmFzdCBhbGxvY2F0aW9ucyBkb3duIHRoZWlyIHNsb3cg
cGF0aHMuIikgXAogICAgIHYodW5zaWduZWQsIGdjTWF4SGVhcFNpemUsIDAsIE5vcm1hbCwgbnVs
bHB0cikgXAogICAgIHYodW5zaWduZWQsIGZvcmNlUkFNU2l6ZSwgMCwgTm9ybWFsLCBudWxscHRy
KSBcCiAgICAgdihib29sLCByZWNvcmRHQ1BhdXNlVGltZXMsIGZhbHNlLCBOb3JtYWwsIG51bGxw
dHIpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlD
b2RlQmxvY2tTdWJzcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmNwcAkocmV2aXNpb24gMjE3
NjQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVC
bG9ja1N1YnNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsOSArNTYsOSBAQCBKU1dlYkFz
c2VtYmx5Q29kZUJsb2NrU3Vic3BhY2U6On5KU1dlYkFzCiB7CiB9CiAKLUZyZWVMaXN0IEpTV2Vi
QXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRs
ZSYgaGFuZGxlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcE1vZGUgc3dlZXBNb2RlKQordm9p
ZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2U6OmZpbmlzaFN3ZWVwKE1hcmtlZEJsb2Nr
OjpIYW5kbGUmIGhhbmRsZSwgRnJlZUxpc3QqIGZyZWVMaXN0KQogewotICAgIHJldHVybiBoYW5k
bGUuZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2Uoc3dlZXBNb2RlLCBEZXN0cm95RnVuYygpKTsK
KyAgICBoYW5kbGUuZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2UoZnJlZUxpc3QsIERlc3Ryb3lG
dW5jKCkpOwogfQogCiB2b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZTo6ZGVzdHJv
eShWTSYgdm0sIEpTQ2VsbCogY2VsbCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5o
CShyZXZpc2lvbiAyMTc2NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYs
NyBAQCBwdWJsaWM6CiAgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlKENTdHJpbmcg
bmFtZSwgSGVhcCYpOwogICAgIHZpcnR1YWwgfkpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFj
ZSgpOwogICAgIAotICAgIEZyZWVMaXN0IGZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUm
LCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcE1vZGUpIG92ZXJyaWRlOworICAgIHZvaWQgZmlu
aXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYsIEZyZWVMaXN0Kikgb3ZlcnJpZGU7CiAgICAg
dm9pZCBkZXN0cm95KFZNJiwgSlNDZWxsKikgb3ZlcnJpZGU7CiB9OwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>311759</attachid>
            <date>2017-06-01 14:35:41 -0700</date>
            <delta_ts>2017-06-01 15:38:55 -0700</delta_ts>
            <desc>scrambled the free-list instead</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>58851</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjE3NjYyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMCBA
QAorMjAxNy0wNi0wMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEdDIHNob3VsZCB1c2UgYSBzY3JhbWJsZWQgZnJlZS1saXN0CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzI3OTMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFByZXZpb3VzbHksIG91ciBidW1w
J24ncG9wIGFsbG9jYXRvciB3b3VsZCB1c2UgYSBjb252ZW50aW9uYWwgbGlua2VkLWxpc3QgZm9y
IHRoZSBmcmVlLWxpc3QuCisgICAgICAgIFRoZSBsaW5rZWQtbGlzdCB3b3VsZCBiZSB0aHJlYWRl
ZCB0aHJvdWdoIGZyZWUgbWVtb3J5LCBhcyBpcyB0aGUgdXN1YWwgY29udmVudGlvbi4KKyAgICAg
ICAgCisgICAgICAgIFRoaXMgc2NyYW1ibGVzIHRoZSBuZXh0IHBvaW50ZXJzIG9mIHRoYXQgZnJl
ZS1saXN0LiBJdCBhbHNvIHNjcmFtYmxlcyB0aGUgaGVhZCBwb2ludGVyLCBiZWNhdXNlCisgICAg
ICAgIHRoaXMgbGVhZHMgdG8gYSBtb3JlIG5hdHVyYWwgZmFzdC1wYXRoIHN0cnVjdHVyZSBhbmQg
c2F2ZXMgb25lIHJlZ2lzdGVyIG9uIEFSTTY0LgorICAgICAgICAKKyAgICAgICAgVGhlIHNlY3Jl
dCB3aXRoIHdoaWNoIHBvaW50ZXJzIGFyZSBzY3JhbWJsZWQgaXMgcGVyLWFsbG9jYXRvci4gQWxs
b2NhdG9ycyBjaG9vc2UgYSBuZXcgc2VjcmV0CisgICAgICAgIGV2ZXJ5IHRpbWUgdGhleSBkbyBh
IHN3ZWVwLXRvLXBvcC4KKyAgICAgICAgCisgICAgICAgIFRoaXMgZG9lc24ndCBjaGFuZ2UgdGhl
IGJlaGF2aW9yIG9mIHRoZSBidW1wIHBhcnQgb2YgYnVtcCduJ3BvcCwgYnV0IGl0IGRvZXMgcmVm
YWN0b3IgdGhlIGNvZGUKKyAgICAgICAgcXVpdGUgYSBiaXQuIFByZXZpb3VzbHksIHRoZXJlIHdl
cmUgZm91ciBjb3BpZXMgb2YgdGhlIGFsbG9jYXRvciBmYXN0IHBhdGg6IHR3byBpbgorICAgICAg
ICBNYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmgsIG9uZSBpbiBNYXJrZWRBbGxvY2F0b3IuY3BwLCBh
bmQgb25lIGluIEFzc2VtYmx5SGVscGVycy5oLiBUaGUgSklUIG9uZQorICAgICAgICB3YXMgb2J2
aW91c2x5IGRpZmZlcmVudC1sb29raW5nLCBidXQgdGhlIG90aGVyIHRocmVlIHdlcmUgYWxtb3N0
IGlkZW50aWNhbC4gVGhpcyBtb3ZlcyBhbGwgb2YKKyAgICAgICAgdGhhdCBsb2dpYyBpbnRvIEZy
ZWVMaXN0LiBUaGVyZSBhcmUgbm93IGp1c3QgdHdvIGNvcGllcyBvZiB0aGUgYWxsb2NhdG9yOiBG
cmVlTGlzdElubGluZXMuaCBhbmQKKyAgICAgICAgQXNzZW1ibHlIZWxwZXJzLmguCisgICAgICAg
IAorICAgICAgICBUaGlzIGFwcGVhcnMgdG8gYmUganVzdCBhcyBmYXN0IGFzIG91ciBwcmV2aW91
c2x5IGFsbG9jYXRvci4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogaGVhcC9GcmVlTGlzdC5jcHA6CisgICAgICAgIChKU0M6
OkZyZWVMaXN0OjpGcmVlTGlzdCk6CisgICAgICAgIChKU0M6OkZyZWVMaXN0Ojp+RnJlZUxpc3Qp
OgorICAgICAgICAoSlNDOjpGcmVlTGlzdDo6Y2xlYXIpOgorICAgICAgICAoSlNDOjpGcmVlTGlz
dDo6aW5pdGlhbGl6ZUxpc3QpOgorICAgICAgICAoSlNDOjpGcmVlTGlzdDo6aW5pdGlhbGl6ZUJ1
bXApOgorICAgICAgICAoSlNDOjpGcmVlTGlzdDo6Y29udGFpbnMpOgorICAgICAgICAoSlNDOjpG
cmVlTGlzdDo6ZHVtcCk6CisgICAgICAgICogaGVhcC9GcmVlTGlzdC5oOgorICAgICAgICAoSlND
OjpGcmVlTGlzdDo6YWxsb2NhdGlvbldpbGxGYWlsKToKKyAgICAgICAgKEpTQzo6RnJlZUxpc3Q6
Om9yaWdpbmFsU2l6ZSk6CisgICAgICAgIChKU0M6OkZyZWVMaXN0OjphZGRyZXNzT2ZMaXN0KToK
KyAgICAgICAgKEpTQzo6RnJlZUxpc3Q6Om9mZnNldE9mQmxvY2spOgorICAgICAgICAoSlNDOjpG
cmVlTGlzdDo6b2Zmc2V0T2ZMaXN0KToKKyAgICAgICAgKEpTQzo6RnJlZUxpc3Q6Om9mZnNldE9m
SW5kZXgpOgorICAgICAgICAoSlNDOjpGcmVlTGlzdDo6b2Zmc2V0T2ZQYXlsb2FkRW5kKToKKyAg
ICAgICAgKEpTQzo6RnJlZUxpc3Q6Om9mZnNldE9mUmVtYWluaW5nKToKKyAgICAgICAgKEpTQzo6
RnJlZUxpc3Q6Om9mZnNldE9mT3JpZ2luYWxTaXplKToKKyAgICAgICAgKEpTQzo6RnJlZUxpc3Q6
OkZyZWVMaXN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6RnJlZUxpc3Q6Omxpc3QpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpGcmVlTGlzdDo6YnVtcCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkZyZWVMaXN0OjpvcGVyYXRvcj09KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6RnJlZUxp
c3Q6Om9wZXJhdG9yIT0pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpGcmVlTGlzdDo6b3BlcmF0
b3IgYm9vbCk6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9GcmVlTGlzdElubGluZXMuaDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkZyZWVMaXN0OjphZGRGcmVlQ2VsbCk6CisgICAgICAgIChKU0M6
OkZyZWVMaXN0OjphbGxvY2F0ZSk6CisgICAgICAgIChKU0M6OkZyZWVMaXN0Ojpmb3JFYWNoKToK
KyAgICAgICAgKEpTQzo6RnJlZUxpc3Q6OnRvT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6RnJlZUxp
c3Q6OmZyb21PZmZzZXQpOgorICAgICAgICAqIGhlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmNwcDoK
KyAgICAgICAgKEpTQzo6SW5jcmVtZW50YWxTd2VlcGVyOjpzd2VlcE5leHRCbG9jayk6CisgICAg
ICAgICogaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxv
Y2F0b3I6Ok1hcmtlZEFsbG9jYXRvcik6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6
ZGlkQ29uc3VtZUZyZWVMaXN0KToKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjp0cnlB
bGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKToKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9y
Ojp0cnlBbGxvY2F0ZUluKToKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjphbGxvY2F0
ZVNsb3dDYXNlSW1wbCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6c3RvcEFsbG9j
YXRpbmcpOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OnByZXBhcmVGb3JBbGxvY2F0
aW9uKToKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjpyZXN1bWVBbGxvY2F0aW5nKToK
KyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjpzd2VlcCk6CisgICAgICAgIChKU0M6Ok1h
cmtlZEFsbG9jYXRvcjo6c2V0RnJlZUxpc3QpOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvTWFy
a2VkQWxsb2NhdG9yLmg6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6ZnJlZUxpc3Qp
OgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OmlzRnJlZUxpc3RlZENlbGwpOiBEZWxl
dGVkLgorICAgICAgICAqIGhlYXAvTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oOgorICAgICAgICAo
SlNDOjpNYXJrZWRBbGxvY2F0b3I6OmlzRnJlZUxpc3RlZENlbGwpOgorICAgICAgICAoSlNDOjpN
YXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlKToKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2Nh
dG9yOjphbGxvY2F0ZSk6CisgICAgICAgICogaGVhcC9NYXJrZWRCbG9jay5jcHA6CisgICAgICAg
IChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6OnN0b3BBbGxvY2F0aW5nKToKKyAgICAgICAgKEpT
Qzo6TWFya2VkQmxvY2s6OkhhbmRsZTo6bGFzdENoYW5jZVRvRmluYWxpemUpOgorICAgICAgICAo
SlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjpyZXN1bWVBbGxvY2F0aW5nKToKKyAgICAgICAgKEpT
Qzo6TWFya2VkQmxvY2s6OkhhbmRsZTo6emFwKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6
OkhhbmRsZTo6c3dlZXApOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjppc0Zy
ZWVMaXN0ZWRDZWxsKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OkhhbmRsZTo6Zm9yRWFj
aEZyZWVDZWxsKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL01hcmtlZEJsb2NrLmg6CisgICAg
ICAgICogaGVhcC9NYXJrZWRCbG9ja0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6TWFya2VkQmxv
Y2s6OkhhbmRsZTo6c3BlY2lhbGl6ZWRTd2VlcCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2Nr
OjpIYW5kbGU6OmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlKToKKyAgICAgICAgKEpTQzo6TWFy
a2VkQmxvY2s6OkhhbmRsZTo6aXNGcmVlTGlzdGVkQ2VsbCk6IERlbGV0ZWQuCisgICAgICAgICog
aGVhcC9TdWJzcGFjZS5jcHA6CisgICAgICAgIChKU0M6OlN1YnNwYWNlOjpmaW5pc2hTd2VlcCk6
CisgICAgICAgICogaGVhcC9TdWJzcGFjZS5oOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBl
cnMuaDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0QWxsb2NhdGVXaXRoTm9u
TnVsbEFsbG9jYXRvcik6CisgICAgICAgICogcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdFN1
YnNwYWNlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZTo6
ZmluaXNoU3dlZXApOgorICAgICAgICAqIHJ1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RTdWJz
cGFjZS5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNw
YWNlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNl
OjpmaW5pc2hTd2VlcCk6CisgICAgICAgICogcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2Jq
ZWN0U3Vic3BhY2UuaDoKKyAgICAgICAgKiBydW50aW1lL0pTU3RyaW5nU3Vic3BhY2UuY3BwOgor
ICAgICAgICAoSlNDOjpKU1N0cmluZ1N1YnNwYWNlOjpmaW5pc2hTd2VlcCk6CisgICAgICAgICog
cnVudGltZS9KU1N0cmluZ1N1YnNwYWNlLmg6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrU3Vic3BhY2UuY3BwOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrU3Vic3BhY2U6OmZpbmlzaFN3ZWVwKToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNz
ZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5oOgorCiAyMDE3LTA2LTAxICBUb21hcyBQb3BlbGEgIDx0
cG9wZWxhQHJlZGhhdC5jb20+LCBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpIGluIEluZmVycmVkVHlwZTo6a2luZEZv
ckZsYWdzKCkgb24gQmlnLUVuZGlhbnMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CShyZXZpc2lvbiAyMTc2NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTAxLDYgKzUw
MSw3IEBACiAJCTBGNjRCMjc5MUE3OTU3QjIwMDZFNEU2NiAvKiBDYWxsRWRnZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY0QjI3NzFBNzk1N0Iy
MDA2RTRFNjYgLyogQ2FsbEVkZ2UuY3BwICovOyB9OwogCQkwRjY0QjI3QTFBNzk1N0IyMDA2RTRF
NjYgLyogQ2FsbEVkZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGNjRCMjc4MUE3OTU3QjIwMDZFNEU2NiAvKiBDYWxsRWRnZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNjRFQUYzMUM0RUNEMDYw
MDYyMUU5QiAvKiBBaXJBcmdJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjY0RUFGMjFDNEVDRDA2MDA2MjFFOUIgLyogQWlyQXJnSW5saW5l
cy5oICovOyB9OworCQkwRjY1ODVFMTFFRTA4MDVBMDA5NTE3NkQgLyogRnJlZUxpc3RJbmxpbmVz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY1ODVF
MDFFRTA4MDU3MDA5NTE3NkQgLyogRnJlZUxpc3RJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY2NjBFMzcxRTA1MTdCOTAwMzE0NjJD
IC8qIE1hcmtpbmdDb25zdHJhaW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNjYwRTMzMUUwNTE3QjcwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3Ry
YWludC5jcHAgKi87IH07CiAJCTBGNjYwRTM4MUUwNTE3QkIwMDMxNDYyQyAvKiBNYXJraW5nQ29u
c3RyYWludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY2NjBFMzQxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY2NjBFMzkxRTA1MTdC
RjAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50U2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjYwRTM1MUUwNTE3QjcwMDMxNDYyQyAvKiBN
YXJraW5nQ29uc3RyYWludFNldC5jcHAgKi87IH07CkBAIC0zMDc3LDYgKzMwNzgsNyBAQAogCQkw
RjY0QjI3NzFBNzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2UuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gQ2FsbEVkZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjY0QjI3ODFBNzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2UuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FsbEVkZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY2NEVBRjIxQzRFQ0QwNjAwNjIxRTlCIC8qIEFpckFyZ0lubGluZXMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyQXJnSW5saW5lcy5oOyBwYXRoID0gYjMv
YWlyL0FpckFyZ0lubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2NTg1
RTAxRUUwODA1NzAwOTUxNzZEIC8qIEZyZWVMaXN0SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBGcmVlTGlzdElubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY2NjBFMzMxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hcmtpbmdDb25zdHJhaW50
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2NjBFMzQxRTA1MTdCNzAwMzE0
NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IE1hcmtpbmdDb25zdHJhaW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
NjYwRTM1MUUwNTE3QjcwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3RyYWludFNldC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYXJraW5nQ29uc3RyYWludFNldC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02MDE5LDYgKzYwMjEsNyBAQAogCQkJCTJB
ODM2Mzg0MThEN0QwRUUwMDAwRUJDQyAvKiBFZGVuR0NBY3Rpdml0eUNhbGxiYWNrLmggKi8sCiAJ
CQkJMEY1NTEzQTcxRDVBNjhDQjAwQzMyQkQ4IC8qIEZyZWVMaXN0LmNwcCAqLywKIAkJCQkwRjU1
MTNBNTFENUE2ODJBMDBDMzJCRDggLyogRnJlZUxpc3QuaCAqLywKKwkJCQkwRjY1ODVFMDFFRTA4
MDU3MDA5NTE3NkQgLyogRnJlZUxpc3RJbmxpbmVzLmggKi8sCiAJCQkJMkE4MzYzODcxOEQ3RDBG
RTAwMDBFQkNDIC8qIEZ1bGxHQ0FjdGl2aXR5Q2FsbGJhY2suY3BwICovLAogCQkJCTJBODM2Mzg4
MThEN0QwRkUwMDAwRUJDQyAvKiBGdWxsR0NBY3Rpdml0eUNhbGxiYWNrLmggKi8sCiAJCQkJMkFB
Q0U2M0ExOENBNUEwMzAwRUQwMTkxIC8qIEdDQWN0aXZpdHlDYWxsYmFjay5jcHAgKi8sCkBAIC04
NjYxLDYgKzg2NjQsNyBAQAogCQkJCTBGMjM1QkVFMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JF
eGl0UHJlcGFyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkM2M0I3MUU2MzQzRUQwMEMx
MzgzOSAvKiBCM0F0b21pY1ZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjYyMzc5ODFBRTQ1
Q0E3MDBENDAyRUEgLyogREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRjY1ODVFMTFFRTA4MDVBMDA5NTE3NkQgLyogRnJlZUxpc3RJbmxpbmVzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkZGQzk1QzE0RUY5MEFGMDBDNzI1MzIgLyogREZHUGhhc2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTM3QzczOEQyMUVEQjU2RTQwMDNGMkIwQiAvKiBQYXJzZUludC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYyQjlDRUIxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1BoaUNoaWxk
cmVuLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDIxNzY0NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtNjQzLDYgKzY0MywxMCBAQCBwdWJsaWM6CiAgICAgICAgIHhvcjMyKGltbSwgc3JjRGVzdCk7
CiAgICAgfQogCisgICAgdm9pZCB4b3JQdHIoQWRkcmVzcyBzcmMsIFJlZ2lzdGVySUQgZGVzdCkK
KyAgICB7CisgICAgICAgIHhvcjMyKHNyYywgZGVzdCk7CisgICAgfQogCiAgICAgdm9pZCBsb2Fk
UHRyKEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewpAQCAt
OTUzLDYgKzk1NywxMSBAQCBwdWJsaWM6CiAgICAgICAgIHhvcjY0KHNyYywgZGVzdCk7CiAgICAg
fQogICAgIAorICAgIHZvaWQgeG9yUHRyKEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisg
ICAgeworICAgICAgICB4b3I2NChzcmMsIGRlc3QpOworICAgIH0KKyAgICAKICAgICB2b2lkIHhv
clB0cihSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBkZXN0KQogICAgIHsKICAgICAgICAgeG9yNjQo
c3JjLCBkZXN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXJBUk02NC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCShyZXZpc2lvbiAyMTc2NDYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAkod29ya2luZyBj
b3B5KQpAQCAtOTkxLDYgKzk5MSwxMiBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5lb3I8NjQ+KGRlc3QsIHNyYywgZGF0YVRlbXBSZWdpc3Rlcik7CiAgICAgICAgIH0KICAgICB9
CisgICAgCisgICAgdm9pZCB4b3I2NChBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAg
IHsKKyAgICAgICAgbG9hZDY0KHNyYywgZ2V0Q2FjaGVkRGF0YVRlbXB0UmVnaXN0ZXJJREFuZElu
dmFsaWRhdGUoKSk7CisgICAgICAgIHhvcjY0KGRhdGFUZW1wUmVnaXN0ZXIsIGRlc3QpOworICAg
IH0KIAogICAgIHZvaWQgbm90MzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKICAg
ICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9GcmVlTGlzdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRnJlZUxpc3QuY3BwCShyZXZpc2lv
biAyMTc2NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9GcmVlTGlzdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDIxICsyNiw2MiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIkZyZWVMaXN0LmgiCiAKKyNpbmNsdWRlICJGcmVlTGlzdElubGluZXMuaCIKKyNpbmNs
dWRlICJNYXJrZWRCbG9jay5oIgorI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KKwogbmFt
ZXNwYWNlIEpTQyB7CiAKLWJvb2wgRnJlZUxpc3Q6OmNvbnRhaW5zKGNvbnN0IHZvaWQqIHRhcmdl
dCkgY29uc3QKK0ZyZWVMaXN0OjpGcmVlTGlzdCh1bnNpZ25lZCBjZWxsU2l6ZSkKKyAgICA6IG1f
Y2VsbFNpemUoY2VsbFNpemUpCit7Cit9CisKK0ZyZWVMaXN0Ojp+RnJlZUxpc3QoKQoreworfQor
Cit2b2lkIEZyZWVMaXN0OjpjbGVhcigpCit7CisgICAgbV9zY3JhbWJsZWRIZWFkID0gMDsKKyAg
ICBtX3NlY3JldCA9IDA7CisgICAgbV9wYXlsb2FkRW5kID0gbnVsbHB0cjsKKyAgICBtX3JlbWFp
bmluZyA9IDA7CisgICAgbV9vcmlnaW5hbFNpemUgPSAwOworfQorCit2b2lkIEZyZWVMaXN0Ojpp
bml0aWFsaXplTGlzdChGcmVlQ2VsbCogaGVhZCwgdWludHB0cl90IHNlY3JldCwgdW5zaWduZWQg
Ynl0ZXMpCit7CisgICAgLy8gSXQncyAqc2xpZ2h0bHkqIG1vcmUgb3B0aW1hbCB0byB1c2UgYSBz
Y3JhbWJsZWQgaGVhZC4gSXQgc2F2ZXMgYSByZWdpc3RlciBvbiB0aGUgZmFzdCBwYXRoLgorICAg
IG1fc2NyYW1ibGVkSGVhZCA9IEZyZWVDZWxsOjpzY3JhbWJsZShoZWFkLCBzZWNyZXQpOworICAg
IG1fc2VjcmV0ID0gc2VjcmV0OworICAgIG1fcGF5bG9hZEVuZCA9IG51bGxwdHI7CisgICAgbV9y
ZW1haW5pbmcgPSAwOworICAgIG1fb3JpZ2luYWxTaXplID0gYnl0ZXM7Cit9CisKK3ZvaWQgRnJl
ZUxpc3Q6OmluaXRpYWxpemVCdW1wKGNoYXIqIHBheWxvYWRFbmQsIHVuc2lnbmVkIHJlbWFpbmlu
ZykKK3sKKyAgICBtX3NjcmFtYmxlZEhlYWQgPSAwOworICAgIG1fc2VjcmV0ID0gMDsKKyAgICBt
X3BheWxvYWRFbmQgPSBwYXlsb2FkRW5kOworICAgIG1fcmVtYWluaW5nID0gcmVtYWluaW5nOwor
ICAgIG1fb3JpZ2luYWxTaXplID0gcmVtYWluaW5nOworfQorCitib29sIEZyZWVMaXN0Ojpjb250
YWlucyhIZWFwQ2VsbCogdGFyZ2V0KSBjb25zdAogewotICAgIGlmIChyZW1haW5pbmcpIHsKLSAg
ICAgICAgY29uc3Qgdm9pZCogc3RhcnQgPSAocGF5bG9hZEVuZCAtIHJlbWFpbmluZyk7Ci0gICAg
ICAgIGNvbnN0IHZvaWQqIGVuZCA9IHBheWxvYWRFbmQ7CisgICAgaWYgKG1fcmVtYWluaW5nKSB7
CisgICAgICAgIGNvbnN0IHZvaWQqIHN0YXJ0ID0gKG1fcGF5bG9hZEVuZCAtIG1fcmVtYWluaW5n
KTsKKyAgICAgICAgY29uc3Qgdm9pZCogZW5kID0gbV9wYXlsb2FkRW5kOwogICAgICAgICByZXR1
cm4gKHN0YXJ0IDw9IHRhcmdldCkgJiYgKHRhcmdldCA8IGVuZCk7CiAgICAgfQogCi0gICAgRnJl
ZUNlbGwqIGNhbmRpZGF0ZSA9IGhlYWQ7CisgICAgRnJlZUNlbGwqIGNhbmRpZGF0ZSA9IGhlYWQo
KTsKICAgICB3aGlsZSAoY2FuZGlkYXRlKSB7Ci0gICAgICAgIGlmIChjYW5kaWRhdGUgPT0gdGFy
Z2V0KQorICAgICAgICBpZiAoYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4oY2FuZGlkYXRlKSA9PSB0
YXJnZXQpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgY2FuZGlkYXRlID0gY2Fu
ZGlkYXRlLT5uZXh0OworICAgICAgICBjYW5kaWRhdGUgPSBjYW5kaWRhdGUtPm5leHQobV9zZWNy
ZXQpOwogICAgIH0KIAogICAgIHJldHVybiBmYWxzZTsKQEAgLTQ4LDcgKzg5LDcgQEAgYm9vbCBG
cmVlTGlzdDo6Y29udGFpbnMoY29uc3Qgdm9pZCogdGFyZwogCiB2b2lkIEZyZWVMaXN0OjpkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7Ci0gICAgb3V0LnByaW50KCJ7aGVhZCA9ICIsIFJh
d1BvaW50ZXIoaGVhZCksICIsIHBheWxvYWRFbmQgPSAiLCBSYXdQb2ludGVyKHBheWxvYWRFbmQp
LCAiLCByZW1haW5pbmcgPSAiLCByZW1haW5pbmcsICIsIG9yaWdpbmFsU2l6ZSA9ICIsIG9yaWdp
bmFsU2l6ZSwgIn0iKTsKKyAgICBvdXQucHJpbnQoIntoZWFkID0gIiwgUmF3UG9pbnRlcihoZWFk
KCkpLCAiLCBzZWNyZXQgPSAiLCBtX3NlY3JldCwgIiwgcGF5bG9hZEVuZCA9ICIsIFJhd1BvaW50
ZXIobV9wYXlsb2FkRW5kKSwgIiwgcmVtYWluaW5nID0gIiwgbV9yZW1haW5pbmcsICIsIG9yaWdp
bmFsU2l6ZSA9ICIsIG1fb3JpZ2luYWxTaXplLCAifSIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0ZyZWVMaXN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRnJlZUxpc3QuaAkocmV2aXNpb24gMjE3
NjQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRnJlZUxpc3QuaAkod29ya2luZyBj
b3B5KQpAQCAtMjUsNjggKzI1LDc5IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAKIG5hbWVzcGFj
ZSBKU0MgewogCi1zdHJ1Y3QgRnJlZUNlbGwgewotICAgIEZyZWVDZWxsKiBuZXh0OwotfTsKLSAg
ICAgICAgCi0vLyBUaGlzIHJlcHJlc2VudGF0aW9uIG9mIGEgRnJlZUxpc3QgaXMgY29udmVuaWVu
dCBmb3IgdGhlIE1hcmtlZEFsbG9jYXRvci4KK2NsYXNzIEhlYXBDZWxsOwogCi1zdHJ1Y3QgRnJl
ZUxpc3QgewotICAgIEZyZWVDZWxsKiBoZWFkIHsgbnVsbHB0ciB9OwotICAgIGNoYXIqIHBheWxv
YWRFbmQgeyBudWxscHRyIH07Ci0gICAgdW5zaWduZWQgcmVtYWluaW5nIHsgMCB9OwotICAgIHVu
c2lnbmVkIG9yaWdpbmFsU2l6ZSB7IDAgfTsKLSAgICAKLSAgICBGcmVlTGlzdCgpCi0gICAgewot
ICAgIH0KLSAgICAKLSAgICBzdGF0aWMgRnJlZUxpc3QgbGlzdChGcmVlQ2VsbCogaGVhZCwgdW5z
aWduZWQgYnl0ZXMpCitzdHJ1Y3QgRnJlZUNlbGwgeworICAgIHN0YXRpYyB1aW50cHRyX3Qgc2Ny
YW1ibGUoRnJlZUNlbGwqIGNlbGwsIHVpbnRwdHJfdCBzZWNyZXQpCiAgICAgewotICAgICAgICBG
cmVlTGlzdCByZXN1bHQ7Ci0gICAgICAgIHJlc3VsdC5oZWFkID0gaGVhZDsKLSAgICAgICAgcmVz
dWx0LnJlbWFpbmluZyA9IDA7Ci0gICAgICAgIHJlc3VsdC5vcmlnaW5hbFNpemUgPSBieXRlczsK
LSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDx1aW50
cHRyX3Q+KGNlbGwpIF4gc2VjcmV0OwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgRnJlZUxpc3Qg
YnVtcChjaGFyKiBwYXlsb2FkRW5kLCB1bnNpZ25lZCByZW1haW5pbmcpCisgICAgc3RhdGljIEZy
ZWVDZWxsKiBkZXNjcmFtYmxlKHVpbnRwdHJfdCBjZWxsLCB1aW50cHRyX3Qgc2VjcmV0KQogICAg
IHsKLSAgICAgICAgRnJlZUxpc3QgcmVzdWx0OwotICAgICAgICByZXN1bHQucGF5bG9hZEVuZCA9
IHBheWxvYWRFbmQ7Ci0gICAgICAgIHJlc3VsdC5yZW1haW5pbmcgPSByZW1haW5pbmc7Ci0gICAg
ICAgIHJlc3VsdC5vcmlnaW5hbFNpemUgPSByZW1haW5pbmc7Ci0gICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8RnJlZUNlbGwqPihjZWxsIF4gc2VjcmV0
KTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZyZWVMaXN0JiBvdGhl
cikgY29uc3QKKyAgICB2b2lkIHNldE5leHQoRnJlZUNlbGwqIG5leHQsIHVpbnRwdHJfdCBzZWNy
ZXQpCiAgICAgewotICAgICAgICByZXR1cm4gaGVhZCA9PSBvdGhlci5oZWFkCi0gICAgICAgICAg
ICAmJiBwYXlsb2FkRW5kID09IG90aGVyLnBheWxvYWRFbmQKLSAgICAgICAgICAgICYmIHJlbWFp
bmluZyA9PSBvdGhlci5yZW1haW5pbmcKLSAgICAgICAgICAgICYmIG9yaWdpbmFsU2l6ZSA9PSBv
dGhlci5vcmlnaW5hbFNpemU7CisgICAgICAgIHNjcmFtYmxlZE5leHQgPSBzY3JhbWJsZShuZXh0
LCBzZWNyZXQpOwogICAgIH0KICAgICAKLSAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgRnJlZUxp
c3QmIG90aGVyKSBjb25zdAorICAgIEZyZWVDZWxsKiBuZXh0KHVpbnRwdHJfdCBzZWNyZXQpIGNv
bnN0CiAgICAgewotICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgIHJl
dHVybiBkZXNjcmFtYmxlKHNjcmFtYmxlZE5leHQsIHNlY3JldCk7CiAgICAgfQogICAgIAotICAg
IGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuICp0
aGlzICE9IEZyZWVMaXN0KCk7Ci0gICAgfQotCi0gICAgYm9vbCBjb250YWlucyhjb25zdCB2b2lk
KiB0YXJnZXQpIGNvbnN0OworICAgIHVpbnRwdHJfdCBzY3JhbWJsZWROZXh0OworfTsKIAotICAg
IGJvb2wgYWxsb2NhdGlvbldpbGxGYWlsKCkgY29uc3QgeyByZXR1cm4gIWhlYWQgJiYgIXJlbWFp
bmluZzsgfQorY2xhc3MgRnJlZUxpc3QgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEZyZWVM
aXN0KTsKKyAgICAKK3B1YmxpYzoKKyAgICBGcmVlTGlzdCh1bnNpZ25lZCBjZWxsU2l6ZSk7Cisg
ICAgfkZyZWVMaXN0KCk7CisgICAgCisgICAgdm9pZCBjbGVhcigpOworICAgIAorICAgIHZvaWQg
aW5pdGlhbGl6ZUxpc3QoRnJlZUNlbGwqIGhlYWQsIHVpbnRwdHJfdCBzZWNyZXQsIHVuc2lnbmVk
IGJ5dGVzKTsKKyAgICB2b2lkIGluaXRpYWxpemVCdW1wKGNoYXIqIHBheWxvYWRFbmQsIHVuc2ln
bmVkIHJlbWFpbmluZyk7CisgICAgCisgICAgYm9vbCBhbGxvY2F0aW9uV2lsbEZhaWwoKSBjb25z
dCB7IHJldHVybiAhaGVhZCgpICYmICFtX3JlbWFpbmluZzsgfQogICAgIGJvb2wgYWxsb2NhdGlv
bldpbGxTdWNjZWVkKCkgY29uc3QgeyByZXR1cm4gIWFsbG9jYXRpb25XaWxsRmFpbCgpOyB9CiAg
ICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICBIZWFwQ2VsbCogYWxsb2NhdGUo
Y29uc3QgRnVuYyYgc2xvd1BhdGgpOworICAgIAorICAgIGJvb2wgY29udGFpbnMoSGVhcENlbGwq
KSBjb25zdDsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIHZvaWQgZm9y
RWFjaChjb25zdCBGdW5jJikgY29uc3Q7CisgICAgCisgICAgdW5zaWduZWQgb3JpZ2luYWxTaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW5hbFNpemU7IH0KKworICAgIHN0YXRpYyBwdHJkaWZm
X3Qgb2Zmc2V0T2ZTY3JhbWJsZWRIZWFkKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZyZWVM
aXN0LCBtX3NjcmFtYmxlZEhlYWQpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNl
Y3JldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihGcmVlTGlzdCwgbV9zZWNyZXQpOyB9Cisg
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlBheWxvYWRFbmQoKSB7IHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoRnJlZUxpc3QsIG1fcGF5bG9hZEVuZCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90
IG9mZnNldE9mUmVtYWluaW5nKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZyZWVMaXN0LCBt
X3JlbWFpbmluZyk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mT3JpZ2luYWxTaXpl
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZyZWVMaXN0LCBtX29yaWdpbmFsU2l6ZSk7IH0K
KyAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6
CisgICAgRnJlZUNlbGwqIGhlYWQoKSBjb25zdCB7IHJldHVybiBGcmVlQ2VsbDo6ZGVzY3JhbWJs
ZShtX3NjcmFtYmxlZEhlYWQsIG1fc2VjcmV0KTsgfQorICAgIAorICAgIHVpbnRwdHJfdCBtX3Nj
cmFtYmxlZEhlYWQgeyAwIH07CisgICAgdWludHB0cl90IG1fc2VjcmV0IHsgMCB9OworICAgIGNo
YXIqIG1fcGF5bG9hZEVuZCB7IG51bGxwdHIgfTsKKyAgICB1bnNpZ25lZCBtX3JlbWFpbmluZyB7
IDAgfTsKKyAgICB1bnNpZ25lZCBtX29yaWdpbmFsU2l6ZSB7IDAgfTsKKyAgICB1bnNpZ25lZCBt
X2NlbGxTaXplIHsgMCB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9GcmVlTGlzdElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9GcmVlTGlzdElubGluZXMuaAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9GcmVlTGlzdElubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRnJlZUxpc3QuaCIKKyNpbmNs
dWRlICJNYXJrZWRCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8dHlwZW5h
bWUgRnVuYz4KK0hlYXBDZWxsKiBGcmVlTGlzdDo6YWxsb2NhdGUoY29uc3QgRnVuYyYgc2xvd1Bh
dGgpCit7CisgICAgdW5zaWduZWQgcmVtYWluaW5nID0gbV9yZW1haW5pbmc7CisgICAgaWYgKHJl
bWFpbmluZykgeworICAgICAgICB1bnNpZ25lZCBjZWxsU2l6ZSA9IG1fY2VsbFNpemU7CisgICAg
ICAgIHJlbWFpbmluZyAtPSBjZWxsU2l6ZTsKKyAgICAgICAgbV9yZW1haW5pbmcgPSByZW1haW5p
bmc7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPihtX3BheWxvYWRFbmQg
LSByZW1haW5pbmcgLSBjZWxsU2l6ZSk7CisgICAgfQorICAgIAorICAgIEZyZWVDZWxsKiByZXN1
bHQgPSBoZWFkKCk7CisgICAgaWYgKFVOTElLRUxZKCFyZXN1bHQpKQorICAgICAgICByZXR1cm4g
c2xvd1BhdGgoKTsKKyAgICAKKyAgICBtX3NjcmFtYmxlZEhlYWQgPSByZXN1bHQtPnNjcmFtYmxl
ZE5leHQ7CisgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KHJlc3VsdCk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Cit2b2lkIEZyZWVMaXN0Ojpmb3JFYWNoKGNvbnN0IEZ1
bmMmIGZ1bmMpIGNvbnN0Cit7CisgICAgaWYgKG1fcmVtYWluaW5nKSB7CisgICAgICAgIGZvciAo
dW5zaWduZWQgcmVtYWluaW5nID0gbV9yZW1haW5pbmc7IHJlbWFpbmluZzsgcmVtYWluaW5nIC09
IG1fY2VsbFNpemUpCisgICAgICAgICAgICBmdW5jKGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KG1f
cGF5bG9hZEVuZCAtIHJlbWFpbmluZykpOworICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAoRnJl
ZUNlbGwqIGNlbGwgPSBoZWFkKCk7IGNlbGw7KSB7CisgICAgICAgICAgICAvLyBXZSBjYW4gdXNl
IHRoaXMgdG8gb3ZlcndyaXRlIGZyZWUgb2JqZWN0cyBiZWZvcmUgZGVzdHJveWluZyB0aGUgZnJl
ZSBsaXN0LiBTbywgd2UgbmVlZAorICAgICAgICAgICAgLy8gdG8gZ2V0IG5leHQgYmVmb3JlIHBy
b2NlZWRpbmcgZnVydGhlci4KKyAgICAgICAgICAgIEZyZWVDZWxsKiBuZXh0ID0gY2VsbC0+bmV4
dChtX3NlY3JldCk7CisgICAgICAgICAgICBmdW5jKGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KGNl
bGwpKTsKKyAgICAgICAgICAgIGNlbGwgPSBuZXh0OworICAgICAgICB9CisgICAgfQorfQorCit9
IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSW5j
cmVtZW50YWxTd2VlcGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuY3BwCShyZXZpc2lvbiAyMTc2NDYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04Nyw3ICs4Nyw3IEBAIGJvb2wgSW5jcmVtZW50YWxTd2VlcGVyOjpzd2VlcE5leHRCbG9j
aygKICAgICAKICAgICBpZiAoYmxvY2spIHsKICAgICAgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZl
ckdDKG1fdm0tPmhlYXApOwotICAgICAgICBibG9jay0+c3dlZXAoKTsKKyAgICAgICAgYmxvY2st
PnN3ZWVwKG51bGxwdHIpOwogICAgICAgICBtX3ZtLT5oZWFwLm9iamVjdFNwYWNlKCkuZnJlZU9y
U2hyaW5rQmxvY2soYmxvY2spOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAJKHJldmlz
aW9uIDIxNzY0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDggQEAKIG5hbWVzcGFjZSBKU0Mgewog
CiBNYXJrZWRBbGxvY2F0b3I6Ok1hcmtlZEFsbG9jYXRvcihIZWFwKiBoZWFwLCBTdWJzcGFjZSog
c3Vic3BhY2UsIHNpemVfdCBjZWxsU2l6ZSkKLSAgICA6IG1fY3VycmVudEJsb2NrKDApCisgICAg
OiBtX2ZyZWVMaXN0KGNlbGxTaXplKQorICAgICwgbV9jdXJyZW50QmxvY2soMCkKICAgICAsIG1f
bGFzdEFjdGl2ZUJsb2NrKDApCiAgICAgLCBtX2NlbGxTaXplKHN0YXRpY19jYXN0PHVuc2lnbmVk
PihjZWxsU2l6ZSkpCiAgICAgLCBtX2F0dHJpYnV0ZXMoc3Vic3BhY2UtPmF0dHJpYnV0ZXMoKSkK
QEAgLTg4LDcgKzg5LDcgQEAgdm9pZCBNYXJrZWRBbGxvY2F0b3I6OmRpZENvbnN1bWVGcmVlTGlz
dAogICAgIGlmIChtX2N1cnJlbnRCbG9jaykKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmRpZENv
bnN1bWVGcmVlTGlzdCgpOwogICAgIAotICAgIHNldEZyZWVMaXN0KEZyZWVMaXN0KCkpOworICAg
IG1fZnJlZUxpc3QuY2xlYXIoKTsKICAgICBtX2N1cnJlbnRCbG9jayA9IG51bGxwdHI7CiB9CiAK
QEAgLTk3LDcgKzk4LDcgQEAgdm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZVdpdGhv
dQogICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKICAgICAK
ICAgICBBU1NFUlQoIW1fY3VycmVudEJsb2NrKTsKLSAgICBBU1NFUlQoIW1fZnJlZUxpc3QpOwor
ICAgIEFTU0VSVChtX2ZyZWVMaXN0LmFsbG9jYXRpb25XaWxsRmFpbCgpKTsKICAgICAKICAgICBm
b3IgKDs7KSB7CiAgICAgICAgIG1fYWxsb2NhdGlvbkN1cnNvciA9IChtX2NhbkFsbG9jYXRlQnV0
Tm90RW1wdHkgfCBtX2VtcHR5KS5maW5kQml0KG1fYWxsb2NhdGlvbkN1cnNvciwgdHJ1ZSk7CkBA
IC0xMTMsNyArMTE0LDcgQEAgdm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZVdpdGhv
dQogICAgIGlmIChPcHRpb25zOjpzdGVhbEVtcHR5QmxvY2tzRnJvbU90aGVyQWxsb2NhdG9ycygp
CiAgICAgICAgICYmIHNob3VsZFN0ZWFsRW1wdHlCbG9ja3NGcm9tT3RoZXJBbGxvY2F0b3JzKCkp
IHsKICAgICAgICAgaWYgKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrID0gbWFya2VkU3BhY2Uo
KS5maW5kRW1wdHlCbG9ja1RvU3RlYWwoKSkgewotICAgICAgICAgICAgYmxvY2stPnN3ZWVwKCk7
CisgICAgICAgICAgICBibG9jay0+c3dlZXAobnVsbHB0cik7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIC8vIEl0J3MgZ29vZCB0aGF0IHRoaXMgY2xlYXJzIGNhbkFsbG9jYXRlQnV0Tm90RW1w
dHkgYXMgd2VsbCBhcyBhbGwgb3RoZXIgYml0cywKICAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhl
cmUgaXMgYSByZW1vdGUgY2hhbmNlIHRoYXQgYSBibG9jayBtYXkgaGF2ZSBib3RoIGNhbkFsbG9j
YXRlQnV0Tm90RW1wdHkKQEAgLTEzOSwxMSArMTQwLDExIEBAIHZvaWQqIE1hcmtlZEFsbG9jYXRv
cjo6dHJ5QWxsb2NhdGVJbihNYXIKICAgICBBU1NFUlQoYmxvY2spOwogICAgIEFTU0VSVCghYmxv
Y2stPmlzRnJlZUxpc3RlZCgpKTsKICAgICAKLSAgICBGcmVlTGlzdCBmcmVlTGlzdCA9IGJsb2Nr
LT5zd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcFRvRnJlZUxpc3QpOworICAgIGJsb2Nr
LT5zd2VlcCgmbV9mcmVlTGlzdCk7CiAgICAgCiAgICAgLy8gSXQncyBwb3NzaWJsZSB0byBzdHVt
YmxlIG9uIGEgY29tcGxldGVseSBmdWxsIGJsb2NrLiBNYXJraW5nIHRyaWVzIHRvIHJldGlyZSB0
aGVzZSwgYnV0CiAgICAgLy8gdGhhdCBhbGdvcml0aG0gaXMgcmFjeSBhbmQgbWF5IGZvcmdldCB0
byBkbyBpdCBzb21ldGltZXMuCi0gICAgaWYgKGZyZWVMaXN0LmFsbG9jYXRpb25XaWxsRmFpbCgp
KSB7CisgICAgaWYgKG1fZnJlZUxpc3QuYWxsb2NhdGlvbldpbGxGYWlsKCkpIHsKICAgICAgICAg
QVNTRVJUKGJsb2NrLT5pc0ZyZWVMaXN0ZWQoKSk7CiAgICAgICAgIGJsb2NrLT51bnN3ZWVwV2l0
aE5vTmV3bHlBbGxvY2F0ZWQoKTsKICAgICAgICAgQVNTRVJUKCFibG9jay0+aXNGcmVlTGlzdGVk
KCkpOwpAQCAtMTUzLDE5ICsxNTQsOSBAQCB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9j
YXRlSW4oTWFyCiAgICAgfQogICAgIAogICAgIG1fY3VycmVudEJsb2NrID0gYmxvY2s7Ci0gICAg
c2V0RnJlZUxpc3QoZnJlZUxpc3QpOwogICAgIAotICAgIHZvaWQqIHJlc3VsdDsKLSAgICBpZiAo
bV9mcmVlTGlzdC5yZW1haW5pbmcpIHsKLSAgICAgICAgdW5zaWduZWQgY2VsbFNpemUgPSBtX2Nl
bGxTaXplOwotICAgICAgICBtX2ZyZWVMaXN0LnJlbWFpbmluZyAtPSBjZWxsU2l6ZTsKLSAgICAg
ICAgcmVzdWx0ID0gbV9mcmVlTGlzdC5wYXlsb2FkRW5kIC0gbV9mcmVlTGlzdC5yZW1haW5pbmcg
LSBjZWxsU2l6ZTsKLSAgICB9IGVsc2UgewotICAgICAgICBGcmVlQ2VsbCogaGVhZCA9IG1fZnJl
ZUxpc3QuaGVhZDsKLSAgICAgICAgbV9mcmVlTGlzdC5oZWFkID0gaGVhZC0+bmV4dDsKLSAgICAg
ICAgcmVzdWx0ID0gaGVhZDsKLSAgICB9Ci0gICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0KTsKKyAg
ICB2b2lkKiByZXN1bHQgPSBtX2ZyZWVMaXN0LmFsbG9jYXRlKAorICAgICAgICBbXSAoKSAtPiBI
ZWFwQ2VsbCogeyBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gbnVsbHB0cjsg
fSk7CiAgICAgc2V0SXNFZGVuKE5vTG9ja2luZ05lY2Vzc2FyeSwgbV9jdXJyZW50QmxvY2ssIHRy
dWUpOwogICAgIG1hcmtlZFNwYWNlKCkuZGlkQWxsb2NhdGVJbkJsb2NrKG1fY3VycmVudEJsb2Nr
KTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMjA4LDcgKzE5OSw3IEBAIHZvaWQqIE1hcmtlZEFs
bG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZUkKICAgICBkb1Rlc3RDb2xsZWN0aW9uc0lmTmVlZGVk
KGRlZmVycmFsQ29udGV4dCk7CiAKICAgICBBU1NFUlQoIW1hcmtlZFNwYWNlKCkuaXNJdGVyYXRp
bmcoKSk7Ci0gICAgbV9oZWFwLT5kaWRBbGxvY2F0ZShtX2ZyZWVMaXN0Lm9yaWdpbmFsU2l6ZSk7
CisgICAgbV9oZWFwLT5kaWRBbGxvY2F0ZShtX2ZyZWVMaXN0Lm9yaWdpbmFsU2l6ZSgpKTsKICAg
ICAKICAgICBkaWRDb25zdW1lRnJlZUxpc3QoKTsKICAgICAKQEAgLTMzNCwyMSArMzI1LDIxIEBA
IHZvaWQgTWFya2VkQWxsb2NhdG9yOjpzdG9wQWxsb2NhdGluZygpCiAgICAgICAgIGRhdGFMb2co
UmF3UG9pbnRlcih0aGlzKSwgIjogTWFya2VkQWxsb2NhdG9yOjpzdG9wQWxsb2NhdGluZyFcbiIp
OwogICAgIEFTU0VSVCghbV9sYXN0QWN0aXZlQmxvY2spOwogICAgIGlmICghbV9jdXJyZW50Qmxv
Y2spIHsKLSAgICAgICAgQVNTRVJUKCFtX2ZyZWVMaXN0KTsKKyAgICAgICAgQVNTRVJUKG1fZnJl
ZUxpc3QuYWxsb2NhdGlvbldpbGxGYWlsKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IAogICAgIG1fY3VycmVudEJsb2NrLT5zdG9wQWxsb2NhdGluZyhtX2ZyZWVMaXN0KTsKICAgICBt
X2xhc3RBY3RpdmVCbG9jayA9IG1fY3VycmVudEJsb2NrOwogICAgIG1fY3VycmVudEJsb2NrID0g
MDsKLSAgICBtX2ZyZWVMaXN0ID0gRnJlZUxpc3QoKTsKKyAgICBtX2ZyZWVMaXN0LmNsZWFyKCk7
CiB9CiAKIHZvaWQgTWFya2VkQWxsb2NhdG9yOjpwcmVwYXJlRm9yQWxsb2NhdGlvbigpCiB7CiAg
ICAgbV9sYXN0QWN0aXZlQmxvY2sgPSBudWxscHRyOwogICAgIG1fY3VycmVudEJsb2NrID0gbnVs
bHB0cjsKLSAgICBzZXRGcmVlTGlzdChGcmVlTGlzdCgpKTsKKyAgICBtX2ZyZWVMaXN0LmNsZWFy
KCk7CiAKICAgICBtX2FsbG9jYXRpb25DdXJzb3IgPSAwOwogICAgIG1fZW1wdHlDdXJzb3IgPSAw
OwpAQCAtMzcxLDE3ICszNjIsMTIgQEAgdm9pZCBNYXJrZWRBbGxvY2F0b3I6Omxhc3RDaGFuY2VU
b0ZpbmFsaQogICAgICAgICB9KTsKIH0KIAotdm9pZCBNYXJrZWRBbGxvY2F0b3I6OnNldEZyZWVM
aXN0KGNvbnN0IEZyZWVMaXN0JiBmcmVlTGlzdCkKLXsKLSAgICBtX2ZyZWVMaXN0ID0gZnJlZUxp
c3Q7Ci19Ci0KIHZvaWQgTWFya2VkQWxsb2NhdG9yOjpyZXN1bWVBbGxvY2F0aW5nKCkKIHsKICAg
ICBpZiAoIW1fbGFzdEFjdGl2ZUJsb2NrKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2ZyZWVM
aXN0ID0gbV9sYXN0QWN0aXZlQmxvY2stPnJlc3VtZUFsbG9jYXRpbmcoKTsKKyAgICBtX2xhc3RB
Y3RpdmVCbG9jay0+cmVzdW1lQWxsb2NhdGluZyhtX2ZyZWVMaXN0KTsKICAgICBtX2N1cnJlbnRC
bG9jayA9IG1fbGFzdEFjdGl2ZUJsb2NrOwogICAgIG1fbGFzdEFjdGl2ZUJsb2NrID0gbnVsbHB0
cjsKIH0KQEAgLTQ0NSw3ICs0MzEsNyBAQCB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6c3dlZXAoKQog
ICAgIG1fdW5zd2VwdC5mb3JFYWNoU2V0Qml0KAogICAgICAgICBbJl0gKHNpemVfdCBpbmRleCkg
ewogICAgICAgICAgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2sgPSBtX2Jsb2Nrc1tpbmRl
eF07Ci0gICAgICAgICAgICBibG9jay0+c3dlZXAoKTsKKyAgICAgICAgICAgIGJsb2NrLT5zd2Vl
cChudWxscHRyKTsKICAgICAgICAgfSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCShyZXZpc2lvbiAyMTc2NDYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
MTU2LDcgKzE1Niw3IEBAIHB1YmxpYzoKICAgICB2b2lkKiB0cnlBbGxvY2F0ZShHQ0RlZmVycmFs
Q29udGV4dCogPSBudWxscHRyKTsKICAgICBIZWFwKiBoZWFwKCkgeyByZXR1cm4gbV9oZWFwOyB9
CiAKLSAgICBib29sIGlzRnJlZUxpc3RlZENlbGwoY29uc3Qgdm9pZCogdGFyZ2V0KSBjb25zdCB7
IHJldHVybiBtX2ZyZWVMaXN0LmNvbnRhaW5zKHRhcmdldCk7IH0KKyAgICBib29sIGlzRnJlZUxp
c3RlZENlbGwoY29uc3Qgdm9pZCogdGFyZ2V0KSBjb25zdDsKIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaEJsb2NrKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hOb3RFbXB0eUJsb2NrKGNvbnN0IEZ1
bmN0b3ImKTsKQEAgLTIwOSw2ICsyMDksOCBAQCBwdWJsaWM6CiAgICAgU3Vic3BhY2UqIHN1YnNw
YWNlKCkgY29uc3QgeyByZXR1cm4gbV9zdWJzcGFjZTsgfQogICAgIE1hcmtlZFNwYWNlJiBtYXJr
ZWRTcGFjZSgpIGNvbnN0OwogICAgIAorICAgIGNvbnN0IEZyZWVMaXN0JiBmcmVlTGlzdCgpIGNv
bnN0IHsgcmV0dXJuIG1fZnJlZUxpc3Q7IH0KKyAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mKSBjb25zdDsKICAgICB2b2lkIGR1bXBCaXRzKFByaW50U3RyZWFtJiA9IFdURjo6ZGF0YUZp
bGUoKSk7CiAgICAgCkBAIC0yMjcsOCArMjI5LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkKiBhbGxv
Y2F0ZUluKE1hcmtlZEJsb2NrOjpIYW5kbGUqKTsKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgZG9U
ZXN0Q29sbGVjdGlvbnNJZk5lZWRlZChHQ0RlZmVycmFsQ29udGV4dCopOwogICAgIAotICAgIHZv
aWQgc2V0RnJlZUxpc3QoY29uc3QgRnJlZUxpc3QmKTsKLSAgICAKICAgICBGcmVlTGlzdCBtX2Zy
ZWVMaXN0OwogICAgIAogICAgIFZlY3RvcjxNYXJrZWRCbG9jazo6SGFuZGxlKj4gbV9ibG9ja3M7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3JJbmxpbmVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2Nh
dG9ySW5saW5lcy5oCShyZXZpc2lvbiAyMTc2NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDQ0ICsy
NSwzMCBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkZyZWVMaXN0SW5saW5lcy5oIgog
I2luY2x1ZGUgIk1hcmtlZEFsbG9jYXRvci5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAoraW5saW5l
IGJvb2wgTWFya2VkQWxsb2NhdG9yOjppc0ZyZWVMaXN0ZWRDZWxsKGNvbnN0IHZvaWQqIHRhcmdl
dCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9mcmVlTGlzdC5jb250YWlucyhiaXR3aXNlX2Nhc3Q8
SGVhcENlbGwqPih0YXJnZXQpKTsKK30KKwogQUxXQVlTX0lOTElORSB2b2lkKiBNYXJrZWRBbGxv
Y2F0b3I6OnRyeUFsbG9jYXRlKEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQpCiB7
Ci0gICAgdW5zaWduZWQgcmVtYWluaW5nID0gbV9mcmVlTGlzdC5yZW1haW5pbmc7Ci0gICAgaWYg
KHJlbWFpbmluZykgewotICAgICAgICB1bnNpZ25lZCBjZWxsU2l6ZSA9IG1fY2VsbFNpemU7Ci0g
ICAgICAgIHJlbWFpbmluZyAtPSBjZWxsU2l6ZTsKLSAgICAgICAgbV9mcmVlTGlzdC5yZW1haW5p
bmcgPSByZW1haW5pbmc7Ci0gICAgICAgIHJldHVybiBtX2ZyZWVMaXN0LnBheWxvYWRFbmQgLSBy
ZW1haW5pbmcgLSBjZWxsU2l6ZTsKLSAgICB9Ci0gICAgCi0gICAgRnJlZUNlbGwqIGhlYWQgPSBt
X2ZyZWVMaXN0LmhlYWQ7Ci0gICAgaWYgKFVOTElLRUxZKCFoZWFkKSkKLSAgICAgICAgcmV0dXJu
IHRyeUFsbG9jYXRlU2xvd0Nhc2UoZGVmZXJyYWxDb250ZXh0KTsKLSAgICAKLSAgICBtX2ZyZWVM
aXN0LmhlYWQgPSBoZWFkLT5uZXh0OwotICAgIHJldHVybiBoZWFkOworICAgIHJldHVybiBtX2Zy
ZWVMaXN0LmFsbG9jYXRlKAorICAgICAgICBbJl0gKCkgLT4gSGVhcENlbGwqIHsKKyAgICAgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxIZWFwQ2VsbCo+KHRyeUFsbG9jYXRlU2xvd0Nhc2UoZGVm
ZXJyYWxDb250ZXh0KSk7CisgICAgICAgIH0pOwogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQqIE1h
cmtlZEFsbG9jYXRvcjo6YWxsb2NhdGUoR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4
dCkKIHsKLSAgICB1bnNpZ25lZCByZW1haW5pbmcgPSBtX2ZyZWVMaXN0LnJlbWFpbmluZzsKLSAg
ICBpZiAocmVtYWluaW5nKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNlbGxTaXplID0gbV9jZWxsU2l6
ZTsKLSAgICAgICAgcmVtYWluaW5nIC09IGNlbGxTaXplOwotICAgICAgICBtX2ZyZWVMaXN0LnJl
bWFpbmluZyA9IHJlbWFpbmluZzsKLSAgICAgICAgcmV0dXJuIG1fZnJlZUxpc3QucGF5bG9hZEVu
ZCAtIHJlbWFpbmluZyAtIGNlbGxTaXplOwotICAgIH0KLSAgICAKLSAgICBGcmVlQ2VsbCogaGVh
ZCA9IG1fZnJlZUxpc3QuaGVhZDsKLSAgICBpZiAoVU5MSUtFTFkoIWhlYWQpKQotICAgICAgICBy
ZXR1cm4gYWxsb2NhdGVTbG93Q2FzZShkZWZlcnJhbENvbnRleHQpOwotICAgIAotICAgIG1fZnJl
ZUxpc3QuaGVhZCA9IGhlYWQtPm5leHQ7Ci0gICAgcmV0dXJuIGhlYWQ7CisgICAgcmV0dXJuIG1f
ZnJlZUxpc3QuYWxsb2NhdGUoCisgICAgICAgIFsmXSAoKSAtPiBIZWFwQ2VsbCogeworICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhlYXBDZWxsKj4oYWxsb2NhdGVTbG93Q2FzZShkZWZl
cnJhbENvbnRleHQpKTsKKyAgICAgICAgfSk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5j
dG9yPiBpbmxpbmUgdm9pZCBNYXJrZWRBbGxvY2F0b3I6OmZvckVhY2hCbG9jayhjb25zdCBGdW5j
dG9yJiBmdW5jdG9yKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxv
Y2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJs
b2NrLmNwcAkocmV2aXNpb24gMjE3NjQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2VkQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw5ICsyNiwxMSBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk1hcmtlZEJsb2NrLmgiCiAKKyNpbmNsdWRlICJGcmVl
TGlzdElubGluZXMuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIKICNpbmNsdWRlICJKU0Rlc3RydWN0
aWJsZU9iamVjdC5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJNYXJrZWRB
bGxvY2F0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiU3VwZXJTYW1wbGVyLmgiCiAjaW5jbHVkZSAiU3dlZXBpbmdTY29wZS5oIgpAQCAtMTM0
LDggKzEzNiw3IEBAIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3RvcEFsbG9jYXRpbmcKICAg
ICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOwogICAgICAgICB9KTsK
IAotICAgIGZvckVhY2hGcmVlQ2VsbCgKLSAgICAgICAgZnJlZUxpc3QsCisgICAgZnJlZUxpc3Qu
Zm9yRWFjaCgKICAgICAgICAgWyZdIChIZWFwQ2VsbCogY2VsbCkgewogICAgICAgICAgICAgaWYg
KGZhbHNlKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIkZyZWUgY2VsbDogIiwgUmF3UG9pbnRl
cihjZWxsKSwgIlxuIik7CkBAIC0xNTYsMTAgKzE1NywxMCBAQCB2b2lkIE1hcmtlZEJsb2NrOjpI
YW5kbGU6Omxhc3RDaGFuY2VUb0ZpCiAgICAgbV93ZWFrU2V0Lmxhc3RDaGFuY2VUb0ZpbmFsaXpl
KCk7CiAgICAgbV9uZXdseUFsbG9jYXRlZC5jbGVhckFsbCgpOwogICAgIG1fbmV3bHlBbGxvY2F0
ZWRWZXJzaW9uID0gaGVhcCgpLT5vYmplY3RTcGFjZSgpLm5ld2x5QWxsb2NhdGVkVmVyc2lvbigp
OwotICAgIHN3ZWVwKCk7CisgICAgc3dlZXAobnVsbHB0cik7CiB9CiAKLUZyZWVMaXN0IE1hcmtl
ZEJsb2NrOjpIYW5kbGU6OnJlc3VtZUFsbG9jYXRpbmcoKQordm9pZCBNYXJrZWRCbG9jazo6SGFu
ZGxlOjpyZXN1bWVBbGxvY2F0aW5nKEZyZWVMaXN0JiBmcmVlTGlzdCkKIHsKICAgICB7CiAgICAg
ICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soYmxvY2soKS5tX2xvY2spOwpAQCAtMTczLDQwICsx
NzQsMjUgQEAgRnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6cmVzdW1lQWxsbwogICAgICAg
ICAgICAgaWYgKGZhbHNlKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIlRoZXJlIGFpbid0IG5v
IG5ld2x5IGFsbG9jYXRlZC5cbiIpOwogICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB3ZSBoYWQg
YWxyZWFkeSBleGhhdXN0ZWQgdGhlIGJsb2NrIHdoZW4gd2Ugc3RvcHBlZCBhbGxvY2F0aW9uLgot
ICAgICAgICAgICAgcmV0dXJuIEZyZWVMaXN0KCk7CisgICAgICAgICAgICBmcmVlTGlzdC5jbGVh
cigpOworICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gUmUt
Y3JlYXRlIG91ciBmcmVlIGxpc3QgZnJvbSBiZWZvcmUgc3RvcHBpbmcgYWxsb2NhdGlvbi4gTm90
ZSB0aGF0IHRoaXMgbWF5IHJldHVybiBhbiBlbXB0eQogICAgIC8vIGZyZWVsaXN0LCBpbiB3aGlj
aCBjYXNlIHRoZSBibG9jayB3aWxsIHN0aWxsIGJlIE1hcmtlZCEKLSAgICByZXR1cm4gc3dlZXAo
U3dlZXBUb0ZyZWVMaXN0KTsKKyAgICBzd2VlcCgmZnJlZUxpc3QpOwogfQogCiB2b2lkIE1hcmtl
ZEJsb2NrOjpIYW5kbGU6OnphcChjb25zdCBGcmVlTGlzdCYgZnJlZUxpc3QpCiB7Ci0gICAgZm9y
RWFjaEZyZWVDZWxsKAotICAgICAgICBmcmVlTGlzdCwKKyAgICBmcmVlTGlzdC5mb3JFYWNoKAog
ICAgICAgICBbJl0gKEhlYXBDZWxsKiBjZWxsKSB7CiAgICAgICAgICAgICBpZiAobV9hdHRyaWJ1
dGVzLmRlc3RydWN0aW9uID09IE5lZWRzRGVzdHJ1Y3Rpb24pCiAgICAgICAgICAgICAgICAgY2Vs
bC0+emFwKCk7CiAgICAgICAgIH0pOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotdm9p
ZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpmb3JFYWNoRnJlZUNlbGwoY29uc3QgRnJlZUxpc3QmIGZy
ZWVMaXN0LCBjb25zdCBGdW5jJiBmdW5jKQotewotICAgIGlmIChmcmVlTGlzdC5yZW1haW5pbmcp
IHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCByZW1haW5pbmcgPSBmcmVlTGlzdC5yZW1haW5pbmc7
IHJlbWFpbmluZzsgcmVtYWluaW5nIC09IGNlbGxTaXplKCkpCi0gICAgICAgICAgICBmdW5jKGJp
dHdpc2VfY2FzdDxIZWFwQ2VsbCo+KGZyZWVMaXN0LnBheWxvYWRFbmQgLSByZW1haW5pbmcpKTsK
LSAgICB9IGVsc2UgewotICAgICAgICBmb3IgKEZyZWVDZWxsKiBjdXJyZW50ID0gZnJlZUxpc3Qu
aGVhZDsgY3VycmVudDspIHsKLSAgICAgICAgICAgIEZyZWVDZWxsKiBuZXh0ID0gY3VycmVudC0+
bmV4dDsKLSAgICAgICAgICAgIGZ1bmMoYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4oY3VycmVudCkp
OwotICAgICAgICAgICAgY3VycmVudCA9IG5leHQ7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KIHZv
aWQgTWFya2VkQmxvY2s6OmFib3V0VG9NYXJrU2xvdyhIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lv
bikKIHsKICAgICBBU1NFUlQodm0oKS0+aGVhcC5vYmplY3RTcGFjZSgpLmlzTWFya2luZygpKTsK
QEAgLTQwNywyMCArMzkzLDIyIEBAIFN1YnNwYWNlKiBNYXJrZWRCbG9jazo6SGFuZGxlOjpzdWJz
cGFjZSgKICAgICByZXR1cm4gYWxsb2NhdG9yKCktPnN1YnNwYWNlKCk7CiB9CiAKLUZyZWVMaXN0
IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN3ZWVwKFN3ZWVwTW9kZSBzd2VlcE1vZGUpCit2b2lkIE1h
cmtlZEJsb2NrOjpIYW5kbGU6OnN3ZWVwKEZyZWVMaXN0KiBmcmVlTGlzdCkKIHsKICAgICBTd2Vl
cGluZ1Njb3BlIHN3ZWVwaW5nU2NvcGUoKmhlYXAoKSk7CiAgICAgCisgICAgU3dlZXBNb2RlIHN3
ZWVwTW9kZSA9IGZyZWVMaXN0ID8gU3dlZXBUb0ZyZWVMaXN0IDogU3dlZXBPbmx5OworICAgIAog
ICAgIG1fYWxsb2NhdG9yLT5zZXRJc1Vuc3dlcHQoTm9Mb2NraW5nTmVjZXNzYXJ5LCB0aGlzLCBm
YWxzZSk7CiAgICAgCiAgICAgbV93ZWFrU2V0LnN3ZWVwKCk7CiAKICAgICBpZiAoc3dlZXBNb2Rl
ID09IFN3ZWVwT25seSAmJiBtX2F0dHJpYnV0ZXMuZGVzdHJ1Y3Rpb24gPT0gRG9lc05vdE5lZWRE
ZXN0cnVjdGlvbikKLSAgICAgICAgcmV0dXJuIEZyZWVMaXN0KCk7CisgICAgICAgIHJldHVybjsK
IAogICAgIGlmIChVTkxJS0VMWShtX2lzRnJlZUxpc3RlZCkpIHsKICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoc3dlZXBNb2RlID09IFN3ZWVwVG9GcmVlTGlzdCk7Ci0gICAgICAgIHJldHVybiBGcmVl
TGlzdCgpOworICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAogICAgIEFTU0VSVCghbV9hbGxv
Y2F0b3ItPmlzQWxsb2NhdGVkKE5vTG9ja2luZ05lY2Vzc2FyeSwgdGhpcykpOwpAQCAtNDI4LDgg
KzQxNiwxMCBAQCBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzd2VlcChTd2VlCiAgICAg
aWYgKHNwYWNlKCktPmlzTWFya2luZygpKQogICAgICAgICBibG9jaygpLm1fbG9jay5sb2NrKCk7
CiAgICAgCi0gICAgaWYgKG1fYXR0cmlidXRlcy5kZXN0cnVjdGlvbiA9PSBOZWVkc0Rlc3RydWN0
aW9uKQotICAgICAgICByZXR1cm4gc3Vic3BhY2UoKS0+ZmluaXNoU3dlZXAoKnRoaXMsIHN3ZWVw
TW9kZSk7CisgICAgaWYgKG1fYXR0cmlidXRlcy5kZXN0cnVjdGlvbiA9PSBOZWVkc0Rlc3RydWN0
aW9uKSB7CisgICAgICAgIHN1YnNwYWNlKCktPmZpbmlzaFN3ZWVwKCp0aGlzLCBmcmVlTGlzdCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgCiAgICAgLy8gSGFuZGxlIHRoZSBuby1kZXN0
cnVjdG9yIHNwZWNpYWxpemF0aW9ucyBoZXJlLCBzaW5jZSB3ZSBoYXZlIHRoZSBtb3N0IG9mIHRo
b3NlLiBUaGlzCiAgICAgLy8gZW5zdXJlcyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IHJlLXNwZWNpYWxp
emVkIGZvciBldmVyeSBkZXN0cnVjdG9yIHNwYWNlLgpAQCAtNDM5LDcgKzQyOSw2IEBAIEZyZWVM
aXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN3ZWVwKFN3ZWUKICAgICBOZXdseUFsbG9jYXRlZE1v
ZGUgbmV3bHlBbGxvY2F0ZWRNb2RlID0gdGhpcy0+bmV3bHlBbGxvY2F0ZWRNb2RlKCk7CiAgICAg
TWFya3NNb2RlIG1hcmtzTW9kZSA9IHRoaXMtPm1hcmtzTW9kZSgpOwogICAgIAotICAgIEZyZWVM
aXN0IHJlc3VsdDsKICAgICBhdXRvIHRyeVNwZWNpYWxpemVkID0gWyZdICgpIC0+IGJvb2wgewog
ICAgICAgICBpZiAoc3dlZXBNb2RlICE9IFN3ZWVwVG9GcmVlTGlzdCkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKQEAgLTQ1MiwyMCArNDQxLDIwIEBAIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpI
YW5kbGU6OnN3ZWVwKFN3ZWUKICAgICAgICAgY2FzZSBJc0VtcHR5OgogICAgICAgICAgICAgc3dp
dGNoIChtYXJrc01vZGUpIHsKICAgICAgICAgICAgIGNhc2UgTWFya3NOb3RTdGFsZToKLSAgICAg
ICAgICAgICAgICByZXN1bHQgPSBzcGVjaWFsaXplZFN3ZWVwPHRydWUsIElzRW1wdHksIFN3ZWVw
VG9GcmVlTGlzdCwgQmxvY2tIYXNOb0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUsIERvZXNOb3RI
YXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzTm90U3RhbGU+KElzRW1wdHksIFN3ZWVwVG9GcmVlTGlz
dCwgQmxvY2tIYXNOb0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUsIERvZXNOb3RIYXZlTmV3bHlB
bGxvY2F0ZWQsIE1hcmtzTm90U3RhbGUsIFtdIChWTSYsIEpTQ2VsbCopIHsgfSk7CisgICAgICAg
ICAgICAgICAgc3BlY2lhbGl6ZWRTd2VlcDx0cnVlLCBJc0VtcHR5LCBTd2VlcFRvRnJlZUxpc3Qs
IEJsb2NrSGFzTm9EZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxs
b2NhdGVkLCBNYXJrc05vdFN0YWxlPihmcmVlTGlzdCwgSXNFbXB0eSwgU3dlZXBUb0ZyZWVMaXN0
LCBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9lc05vdEhhdmVOZXdseUFs
bG9jYXRlZCwgTWFya3NOb3RTdGFsZSwgW10gKFZNJiwgSlNDZWxsKikgeyB9KTsKICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIGNhc2UgTWFya3NTdGFsZToKLSAgICAg
ICAgICAgICAgICByZXN1bHQgPSBzcGVjaWFsaXplZFN3ZWVwPHRydWUsIElzRW1wdHksIFN3ZWVw
VG9GcmVlTGlzdCwgQmxvY2tIYXNOb0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUsIERvZXNOb3RI
YXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzU3RhbGU+KElzRW1wdHksIFN3ZWVwVG9GcmVlTGlzdCwg
QmxvY2tIYXNOb0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUsIERvZXNOb3RIYXZlTmV3bHlBbGxv
Y2F0ZWQsIE1hcmtzU3RhbGUsIFtdIChWTSYsIEpTQ2VsbCopIHsgfSk7CisgICAgICAgICAgICAg
ICAgc3BlY2lhbGl6ZWRTd2VlcDx0cnVlLCBJc0VtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2Nr
SGFzTm9EZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVk
LCBNYXJrc1N0YWxlPihmcmVlTGlzdCwgSXNFbXB0eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hh
c05vRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCwg
TWFya3NTdGFsZSwgW10gKFZNJiwgSlNDZWxsKikgeyB9KTsKICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IE5vdEVtcHR5OgogICAgICAgICAgICAgc3dpdGNoIChtYXJrc01vZGUpIHsKICAgICAgICAgICAg
IGNhc2UgTWFya3NOb3RTdGFsZToKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBzcGVjaWFsaXpl
ZFN3ZWVwPHRydWUsIE5vdEVtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzTm9EZXN0cnVj
dG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBNYXJrc05vdFN0
YWxlPihJc0VtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzTm9EZXN0cnVjdG9ycywgRG9u
dFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBNYXJrc05vdFN0YWxlLCBbXSAo
Vk0mLCBKU0NlbGwqKSB7IH0pOworICAgICAgICAgICAgICAgIHNwZWNpYWxpemVkU3dlZXA8dHJ1
ZSwgTm90RW1wdHksIFN3ZWVwVG9GcmVlTGlzdCwgQmxvY2tIYXNOb0Rlc3RydWN0b3JzLCBEb250
U2NyaWJibGUsIERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzTm90U3RhbGU+KGZyZWVM
aXN0LCBJc0VtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzTm9EZXN0cnVjdG9ycywgRG9u
dFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBNYXJrc05vdFN0YWxlLCBbXSAo
Vk0mLCBKU0NlbGwqKSB7IH0pOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICAgICAgY2FzZSBNYXJrc1N0YWxlOgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNwZWNpYWxp
emVkU3dlZXA8dHJ1ZSwgTm90RW1wdHksIFN3ZWVwVG9GcmVlTGlzdCwgQmxvY2tIYXNOb0Rlc3Ry
dWN0b3JzLCBEb250U2NyaWJibGUsIERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzU3Rh
bGU+KElzRW1wdHksIFN3ZWVwVG9GcmVlTGlzdCwgQmxvY2tIYXNOb0Rlc3RydWN0b3JzLCBEb250
U2NyaWJibGUsIERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzU3RhbGUsIFtdIChWTSYs
IEpTQ2VsbCopIHsgfSk7CisgICAgICAgICAgICAgICAgc3BlY2lhbGl6ZWRTd2VlcDx0cnVlLCBO
b3RFbXB0eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMsIERvbnRTY3Jp
YmJsZSwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCwgTWFya3NTdGFsZT4oZnJlZUxpc3QsIElz
RW1wdHksIFN3ZWVwVG9GcmVlTGlzdCwgQmxvY2tIYXNOb0Rlc3RydWN0b3JzLCBEb250U2NyaWJi
bGUsIERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzU3RhbGUsIFtdIChWTSYsIEpTQ2Vs
bCopIHsgfSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBicmVhazsKQEAgLTQ3NSwxMCArNDY0LDE2IEBAIEZyZWVMaXN0IE1hcmtlZEJs
b2NrOjpIYW5kbGU6OnN3ZWVwKFN3ZWUKICAgICB9OwogICAgIAogICAgIGlmICh0cnlTcGVjaWFs
aXplZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm47CiAKICAgICAv
LyBUaGUgdGVtcGxhdGUgYXJndW1lbnRzIGRvbid0IG1hdHRlciBiZWNhdXNlIHRoZSBmaXJzdCBv
bmUgaXMgZmFsc2UuCi0gICAgcmV0dXJuIHNwZWNpYWxpemVkU3dlZXA8ZmFsc2UsIElzRW1wdHks
IFN3ZWVwT25seSwgQmxvY2tIYXNOb0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUsIEhhc05ld2x5
QWxsb2NhdGVkLCBNYXJrc1N0YWxlPihlbXB0eU1vZGUsIHN3ZWVwTW9kZSwgQmxvY2tIYXNOb0Rl
c3RydWN0b3JzLCBzY3JpYmJsZU1vZGUsIG5ld2x5QWxsb2NhdGVkTW9kZSwgbWFya3NNb2RlLCBb
XSAoVk0mLCBKU0NlbGwqKSB7IH0pOworICAgIHNwZWNpYWxpemVkU3dlZXA8ZmFsc2UsIElzRW1w
dHksIFN3ZWVwT25seSwgQmxvY2tIYXNOb0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUsIEhhc05l
d2x5QWxsb2NhdGVkLCBNYXJrc1N0YWxlPihmcmVlTGlzdCwgZW1wdHlNb2RlLCBzd2VlcE1vZGUs
IEJsb2NrSGFzTm9EZXN0cnVjdG9ycywgc2NyaWJibGVNb2RlLCBuZXdseUFsbG9jYXRlZE1vZGUs
IG1hcmtzTW9kZSwgW10gKFZNJiwgSlNDZWxsKikgeyB9KTsKK30KKworYm9vbCBNYXJrZWRCbG9j
azo6SGFuZGxlOjppc0ZyZWVMaXN0ZWRDZWxsKGNvbnN0IHZvaWQqIHRhcmdldCkgY29uc3QKK3sK
KyAgICBBU1NFUlQoaXNGcmVlTGlzdGVkKCkpOworICAgIHJldHVybiBtX2FsbG9jYXRvci0+aXNG
cmVlTGlzdGVkQ2VsbCh0YXJnZXQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkocmV2aXNpb24gMjE3NjQ2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkod29ya2luZyBjb3B5
KQpAQCAtMjMsNyArMjMsNiBAQAogCiAjaW5jbHVkZSAiQWxsb2NhdG9yQXR0cmlidXRlcy5oIgog
I2luY2x1ZGUgIkRlc3RydWN0aW9uTW9kZS5oIgotI2luY2x1ZGUgIkZyZWVMaXN0LmgiCiAjaW5j
bHVkZSAiSGVhcENlbGwuaCIKICNpbmNsdWRlICJJdGVyYXRpb25TdGF0dXMuaCIKICNpbmNsdWRl
ICJXZWFrU2V0LmgiCkBAIC0zNiw2ICszNSw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogICAgIAor
Y2xhc3MgRnJlZUxpc3Q7CiBjbGFzcyBIZWFwOwogY2xhc3MgSlNDZWxsOwogY2xhc3MgTWFya2Vk
QWxsb2NhdG9yOwpAQCAtMTE3LDIxICsxMTcsMjIgQEAgcHVibGljOgogICAgICAgICBWTSogdm0o
KSBjb25zdDsKICAgICAgICAgV2Vha1NldCYgd2Vha1NldCgpOwogICAgICAgICAgICAgCisgICAg
ICAgIGVudW0gU3dlZXBNb2RlIHsgU3dlZXBPbmx5LCBTd2VlcFRvRnJlZUxpc3QgfTsKKwogICAg
ICAgICAvLyBTd2VlcGluZyBlbnN1cmVzIHRoYXQgZGVzdHJ1Y3RvcnMgZ2V0IGNhbGxlZCBhbmQg
cmVtb3ZlcyB0aGUgYmxvY2sgZnJvbSB0aGUgdW5zd2VwdAogICAgICAgICAvLyBzZXQuIFN3ZWVw
aW5nIHRvIGZyZWUgbGlzdCBhbHNvIHJlbW92ZXMgdGhlIGJsb2NrIGZyb20gdGhlIGVtcHR5IHNl
dCwgaWYgaXQgd2FzIGluIHRoYXQKICAgICAgICAgLy8gc2V0LiBTd2VlcGluZyB3aXRoIFN3ZWVw
T25seSBtYXkgYWRkIHRoaXMgYmxvY2sgdG8gdGhlIGVtcHR5IHNldCwgaWYgdGhlIGJsb2NrIGlz
IGZvdW5kCi0gICAgICAgIC8vIHRvIGJlIGVtcHR5LgorICAgICAgICAvLyB0byBiZSBlbXB0eS4g
VGhlIGZyZWUtbGlzdCBiZWluZyBudWxsIGltcGxpZXMgU3dlZXBPbmx5LgogICAgICAgICAvLwog
ICAgICAgICAvLyBOb3RlIHRoYXQgeW91IG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGVtcHR5
IGJpdCByZWZsZWN0cyByZWFsaXR5LiBJZiBpdCdzIG5vdCBzZXQKICAgICAgICAgLy8gYW5kIHRo
ZSBibG9jayBpcyBmcmVzaGx5IGNyZWF0ZWQsIHRoZW4gd2UnbGwgbWFrZSB0aGUgbWlzdGFrZSBv
ZiBydW5uaW5nIGRlc3RydWN0b3JzIGluCiAgICAgICAgIC8vIHRoZSBibG9jay4gSWYgaXQncyBu
b3Qgc2V0IGFuZCB0aGUgYmxvY2sgaGFzIG5vdGhpbmcgbWFya2VkLCB0aGVuIHdlJ2xsIG1ha2Ug
dGhlCiAgICAgICAgIC8vIG1pc3Rha2Ugb2YgbWFraW5nIGEgcG9wIGZyZWVsaXN0IHJhdGhlciB0
aGFuIGEgYnVtcCBmcmVlbGlzdC4KLSAgICAgICAgZW51bSBTd2VlcE1vZGUgeyBTd2VlcE9ubHks
IFN3ZWVwVG9GcmVlTGlzdCB9OwotICAgICAgICBGcmVlTGlzdCBzd2VlcChTd2VlcE1vZGUgPSBT
d2VlcE9ubHkpOworICAgICAgICB2b2lkIHN3ZWVwKEZyZWVMaXN0Kik7CiAgICAgICAgIAogICAg
ICAgICAvLyBUaGlzIGlzIHRvIGJlIGNhbGxlZCBieSBTdWJzcGFjZS4KICAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRGVzdHJveUZ1bmM+Ci0gICAgICAgIEZyZWVMaXN0IGZpbmlzaFN3ZWVwS25v
d2luZ1N1YnNwYWNlKFN3ZWVwTW9kZSwgY29uc3QgRGVzdHJveUZ1bmMmKTsKKyAgICAgICAgdm9p
ZCBmaW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZShGcmVlTGlzdCosIGNvbnN0IERlc3Ryb3lGdW5j
Jik7CiAgICAgICAgIAogICAgICAgICB2b2lkIHVuc3dlZXBXaXRoTm9OZXdseUFsbG9jYXRlZCgp
OwogICAgICAgICAKQEAgLTE0Nyw3ICsxNDgsNyBAQCBwdWJsaWM6CiAgICAgICAgIC8vIG9mIHRo
ZXNlIGZ1bmN0aW9uczoKICAgICAgICAgdm9pZCBkaWRDb25zdW1lRnJlZUxpc3QoKTsgLy8gQ2Fs
bCB0aGlzIG9uY2UgeW91J3ZlIGFsbG9jYXRlZCBhbGwgdGhlIGl0ZW1zIGluIHRoZSBmcmVlIGxp
c3QuCiAgICAgICAgIHZvaWQgc3RvcEFsbG9jYXRpbmcoY29uc3QgRnJlZUxpc3QmKTsKLSAgICAg
ICAgRnJlZUxpc3QgcmVzdW1lQWxsb2NhdGluZygpOyAvLyBDYWxsIHRoaXMgaWYgeW91IGNhbm9u
aWNhbGl6ZWQgYSBibG9jayBmb3Igc29tZSBub24tY29sbGVjdGlvbiByZWxhdGVkIHB1cnBvc2Uu
CisgICAgICAgIHZvaWQgcmVzdW1lQWxsb2NhdGluZyhGcmVlTGlzdCYpOyAvLyBDYWxsIHRoaXMg
aWYgeW91IGNhbm9uaWNhbGl6ZWQgYSBibG9jayBmb3Igc29tZSBub24tY29sbGVjdGlvbiByZWxh
dGVkIHB1cnBvc2UuCiAgICAgICAgICAgICAKICAgICAgICAgc2l6ZV90IGNlbGxTaXplKCk7CiAg
ICAgICAgIGlubGluZSB1bnNpZ25lZCBjZWxsc1BlckJsb2NrKCk7CkBAIC0yMTUsMTAgKzIxNiw3
IEBAIHB1YmxpYzoKICAgICAgICAgTWFya3NNb2RlIG1hcmtzTW9kZSgpOwogICAgICAgICAKICAg
ICAgICAgdGVtcGxhdGU8Ym9vbCwgRW1wdHlNb2RlLCBTd2VlcE1vZGUsIFN3ZWVwRGVzdHJ1Y3Rp
b25Nb2RlLCBTY3JpYmJsZU1vZGUsIE5ld2x5QWxsb2NhdGVkTW9kZSwgTWFya3NNb2RlLCB0eXBl
bmFtZSBEZXN0cm95RnVuYz4KLSAgICAgICAgRnJlZUxpc3Qgc3BlY2lhbGl6ZWRTd2VlcChFbXB0
eU1vZGUsIFN3ZWVwTW9kZSwgU3dlZXBEZXN0cnVjdGlvbk1vZGUsIFNjcmliYmxlTW9kZSwgTmV3
bHlBbGxvY2F0ZWRNb2RlLCBNYXJrc01vZGUsIGNvbnN0IERlc3Ryb3lGdW5jJik7Ci0gICAgICAg
IAotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotICAgICAgICB2b2lkIGZvckVhY2hG
cmVlQ2VsbChjb25zdCBGcmVlTGlzdCYsIGNvbnN0IEZ1bmMmKTsKKyAgICAgICAgdm9pZCBzcGVj
aWFsaXplZFN3ZWVwKEZyZWVMaXN0KiwgRW1wdHlNb2RlLCBTd2VlcE1vZGUsIFN3ZWVwRGVzdHJ1
Y3Rpb25Nb2RlLCBTY3JpYmJsZU1vZGUsIE5ld2x5QWxsb2NhdGVkTW9kZSwgTWFya3NNb2RlLCBj
b25zdCBEZXN0cm95RnVuYyYpOwogICAgICAgICAKICAgICAgICAgdm9pZCBzZXRJc0ZyZWVMaXN0
ZWQoKTsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRC
bG9ja0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRCbG9ja0lubGluZXMuaAkocmV2aXNpb24gMjE3NjQ2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2VkQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNywx
MiArMTE3LDYgQEAgaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6OkhhbmRsZTo6aXNMaXZlQwogICAg
IHJldHVybiBpc0xpdmUobWFya2luZ1ZlcnNpb24sIGlzTWFya2luZywgc3RhdGljX2Nhc3Q8Y29u
c3QgSGVhcENlbGwqPihwKSk7CiB9CiAKLWlubGluZSBib29sIE1hcmtlZEJsb2NrOjpIYW5kbGU6
OmlzRnJlZUxpc3RlZENlbGwoY29uc3Qgdm9pZCogdGFyZ2V0KSBjb25zdAotewotICAgIEFTU0VS
VChpc0ZyZWVMaXN0ZWQoKSk7Ci0gICAgcmV0dXJuIG1fYWxsb2NhdG9yLT5pc0ZyZWVMaXN0ZWRD
ZWxsKHRhcmdldCk7Ci19Ci0KIC8vIFRoZSBmb2xsb3dpbmcgaGFzIHRvIGJlIHRydWUgZm9yIHNw
ZWNpYWxpemF0aW9uIHRvIGtpY2sgaW46CiAvLwogLy8gc3dlZXBNb2RlID09IFN3ZWVwVG9GcmVl
TGlzdApAQCAtMTQ1LDcgKzEzOSw3IEBAIGlubGluZSBib29sIE1hcmtlZEJsb2NrOjpIYW5kbGU6
OmlzRnJlZUwKIC8vIE9ubHkgdGhlIERvZXNOb3ROZWVkRGVzdHJ1Y3Rpb24gb25lIHNob3VsZCBi
ZSBzcGVjaWFsaXplZCBieSBNYXJrZWRCbG9jay4KIAogdGVtcGxhdGU8Ym9vbCBzcGVjaWFsaXpl
LCBNYXJrZWRCbG9jazo6SGFuZGxlOjpFbXB0eU1vZGUgc3BlY2lhbGl6ZWRFbXB0eU1vZGUsIE1h
cmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwTW9kZSBzcGVjaWFsaXplZFN3ZWVwTW9kZSwgTWFya2Vk
QmxvY2s6OkhhbmRsZTo6U3dlZXBEZXN0cnVjdGlvbk1vZGUgc3BlY2lhbGl6ZWREZXN0cnVjdGlv
bk1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlNjcmliYmxlTW9kZSBzcGVjaWFsaXplZFNjcmli
YmxlTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6TmV3bHlBbGxvY2F0ZWRNb2RlIHNwZWNpYWxp
emVkTmV3bHlBbGxvY2F0ZWRNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpNYXJrc01vZGUgc3Bl
Y2lhbGl6ZWRNYXJrc01vZGUsIHR5cGVuYW1lIERlc3Ryb3lGdW5jPgotRnJlZUxpc3QgTWFya2Vk
QmxvY2s6OkhhbmRsZTo6c3BlY2lhbGl6ZWRTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlOjpFbXB0
eU1vZGUgZW1wdHlNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcE1vZGUgc3dlZXBNb2Rl
LCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbk1v
ZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlNjcmliYmxlTW9kZSBzY3JpYmJsZU1vZGUsIE1hcmtl
ZEJsb2NrOjpIYW5kbGU6Ok5ld2x5QWxsb2NhdGVkTW9kZSBuZXdseUFsbG9jYXRlZE1vZGUsIE1h
cmtlZEJsb2NrOjpIYW5kbGU6Ok1hcmtzTW9kZSBtYXJrc01vZGUsIGNvbnN0IERlc3Ryb3lGdW5j
JiBkZXN0cm95RnVuYykKK3ZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3BlY2lhbGl6ZWRTd2Vl
cChGcmVlTGlzdCogZnJlZUxpc3QsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OkVtcHR5TW9kZSBlbXB0
eU1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwTW9kZSBzd2VlcE1vZGUsIE1hcmtlZEJs
b2NrOjpIYW5kbGU6OlN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0aW9uTW9kZSwgTWFya2Vk
QmxvY2s6OkhhbmRsZTo6U2NyaWJibGVNb2RlIHNjcmliYmxlTW9kZSwgTWFya2VkQmxvY2s6Okhh
bmRsZTo6TmV3bHlBbGxvY2F0ZWRNb2RlIG5ld2x5QWxsb2NhdGVkTW9kZSwgTWFya2VkQmxvY2s6
OkhhbmRsZTo6TWFya3NNb2RlIG1hcmtzTW9kZSwgY29uc3QgRGVzdHJveUZ1bmMmIGRlc3Ryb3lG
dW5jKQogewogICAgIGlmIChzcGVjaWFsaXplKSB7CiAgICAgICAgIGVtcHR5TW9kZSA9IHNwZWNp
YWxpemVkRW1wdHlNb2RlOwpAQCAtMTY1LDYgKzE1OSw4IEBAIEZyZWVMaXN0IE1hcmtlZEJsb2Nr
OjpIYW5kbGU6OnNwZWNpYWxpemUKICAgICBpZiAoZmFsc2UpCiAgICAgICAgIGRhdGFMb2coUmF3
UG9pbnRlcih0aGlzKSwgIi8iLCBSYXdQb2ludGVyKCZibG9jayksICI6IE1hcmtlZEJsb2NrOjpI
YW5kbGU6OnNwZWNpYWxpemVkU3dlZXAhXG4iKTsKICAgICAKKyAgICB1bnNpZ25lZCBjZWxsU2l6
ZSA9IHRoaXMtPmNlbGxTaXplKCk7CisgICAgCiAgICAgaWYgKE9wdGlvbnM6OnVzZUJ1bXBBbGxv
Y2F0b3IoKQogICAgICAgICAmJiBlbXB0eU1vZGUgPT0gSXNFbXB0eQogICAgICAgICAmJiBuZXds
eUFsbG9jYXRlZE1vZGUgPT0gRG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCkgewpAQCAtMTgyLDcg
KzE3OCw3IEBAIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxpemUKICAgICAg
ICAgfQogICAgICAgICAKICAgICAgICAgY2hhciogc3RhcnRPZkxhc3RDZWxsID0gc3RhdGljX2Nh
c3Q8Y2hhcio+KGNlbGxBbGlnbihibG9jay5hdG9tcygpICsgbV9lbmRBdG9tIC0gMSkpOwotICAg
ICAgICBjaGFyKiBwYXlsb2FkRW5kID0gc3RhcnRPZkxhc3RDZWxsICsgY2VsbFNpemUoKTsKKyAg
ICAgICAgY2hhciogcGF5bG9hZEVuZCA9IHN0YXJ0T2ZMYXN0Q2VsbCArIGNlbGxTaXplOwogICAg
ICAgICBSRUxFQVNFX0FTU0VSVChwYXlsb2FkRW5kIC0gTWFya2VkQmxvY2s6OmJsb2NrU2l6ZSA8
PSBiaXR3aXNlX2Nhc3Q8Y2hhcio+KCZibG9jaykpOwogICAgICAgICBjaGFyKiBwYXlsb2FkQmVn
aW4gPSBiaXR3aXNlX2Nhc3Q8Y2hhcio+KGJsb2NrLmF0b21zKCkgKyBmaXJzdEF0b20oKSk7CiAg
ICAgICAgIGlmIChzY3JpYmJsZU1vZGUgPT0gU2NyaWJibGUpCkBAIC0xOTMsMTAgKzE4OSwxMSBA
QCBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzcGVjaWFsaXplCiAgICAgICAgICAgICBt
X2FsbG9jYXRvci0+c2V0SXNFbXB0eShOb0xvY2tpbmdOZWNlc3NhcnksIHRoaXMsIHRydWUpOwog
ICAgICAgICBpZiAoc3BhY2UoKS0+aXNNYXJraW5nKCkpCiAgICAgICAgICAgICBibG9jay5tX2xv
Y2sudW5sb2NrKCk7Ci0gICAgICAgIEZyZWVMaXN0IHJlc3VsdCA9IEZyZWVMaXN0OjpidW1wKHBh
eWxvYWRFbmQsIHBheWxvYWRFbmQgLSBwYXlsb2FkQmVnaW4pOworICAgICAgICBpZiAoc3dlZXBN
b2RlID09IFN3ZWVwVG9GcmVlTGlzdCkKKyAgICAgICAgICAgIGZyZWVMaXN0LT5pbml0aWFsaXpl
QnVtcChwYXlsb2FkRW5kLCBwYXlsb2FkRW5kIC0gcGF5bG9hZEJlZ2luKTsKICAgICAgICAgaWYg
KGZhbHNlKQotICAgICAgICAgICAgZGF0YUxvZygiUXVpY2tseSBzd2VwdCBibG9jayAiLCBSYXdQ
b2ludGVyKHRoaXMpLCAiIHdpdGggY2VsbCBzaXplICIsIGNlbGxTaXplKCksICIgYW5kIGF0dHJp
YnV0ZXMgIiwgbV9hdHRyaWJ1dGVzLCAiOiAiLCByZXN1bHQsICJcbiIpOwotICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgICAgICAgICAgZGF0YUxvZygiUXVpY2tseSBzd2VwdCBibG9jayAiLCBS
YXdQb2ludGVyKHRoaXMpLCAiIHdpdGggY2VsbCBzaXplICIsIGNlbGxTaXplLCAiIGFuZCBhdHRy
aWJ1dGVzICIsIG1fYXR0cmlidXRlcywgIjogIiwgcG9pbnRlckR1bXAoZnJlZUxpc3QpLCAiXG4i
KTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIC8vIFRoaXMgcHJvZHVjZXMgYSBmcmVl
IGxpc3QgdGhhdCBpcyBvcmRlcmVkIGluIHJldmVyc2UgdGhyb3VnaCB0aGUgYmxvY2suCkBAIC0y
MDQsNiArMjAxLDggQEAgRnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3BlY2lhbGl6ZQog
ICAgIC8vIG9yZGVyIG9mIHRoZSBmcmVlIGxpc3QuCiAgICAgRnJlZUNlbGwqIGhlYWQgPSAwOwog
ICAgIHNpemVfdCBjb3VudCA9IDA7CisgICAgdWludHB0cl90IHNlY3JldDsKKyAgICBjcnlwdG9n
cmFwaGljYWxseVJhbmRvbVZhbHVlcygmc2VjcmV0LCBzaXplb2YodWludHB0cl90KSk7CiAgICAg
Ym9vbCBpc0VtcHR5ID0gdHJ1ZTsKICAgICBWZWN0b3I8c2l6ZV90PiBkZWFkQ2VsbHM7CiAgICAg
Vk0mIHZtID0gKnRoaXMtPnZtKCk7CkBAIC0yMjEsOCArMjIwLDggQEAgRnJlZUxpc3QgTWFya2Vk
QmxvY2s6OkhhbmRsZTo6c3BlY2lhbGl6ZQogICAgICAgICBpZiAoc3dlZXBNb2RlID09IFN3ZWVw
VG9GcmVlTGlzdCkgewogICAgICAgICAgICAgRnJlZUNlbGwqIGZyZWVDZWxsID0gcmVpbnRlcnBy
ZXRfY2FzdF9wdHI8RnJlZUNlbGwqPihjZWxsKTsKICAgICAgICAgICAgIGlmIChzY3JpYmJsZU1v
ZGUgPT0gU2NyaWJibGUpCi0gICAgICAgICAgICAgICAgc2NyaWJibGUoZnJlZUNlbGwsIGNlbGxT
aXplKCkpOwotICAgICAgICAgICAgZnJlZUNlbGwtPm5leHQgPSBoZWFkOworICAgICAgICAgICAg
ICAgIHNjcmliYmxlKGZyZWVDZWxsLCBjZWxsU2l6ZSk7CisgICAgICAgICAgICBmcmVlQ2VsbC0+
c2V0TmV4dChoZWFkLCBzZWNyZXQpOwogICAgICAgICAgICAgaGVhZCA9IGZyZWVDZWxsOwogICAg
ICAgICAgICAgKytjb3VudDsKICAgICAgICAgfQpAQCAtMjU0LDI2ICsyNTMsMjUgQEAgRnJlZUxp
c3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3BlY2lhbGl6ZQogICAgICAgICAgICAgaGFuZGxlRGVh
ZENlbGwoaSk7CiAgICAgfQogCi0gICAgRnJlZUxpc3QgcmVzdWx0ID0gRnJlZUxpc3Q6Omxpc3Qo
aGVhZCwgY291bnQgKiBjZWxsU2l6ZSgpKTsKLSAgICBpZiAoc3dlZXBNb2RlID09IFN3ZWVwVG9G
cmVlTGlzdCkKKyAgICBpZiAoc3dlZXBNb2RlID09IFN3ZWVwVG9GcmVlTGlzdCkgeworICAgICAg
ICBmcmVlTGlzdC0+aW5pdGlhbGl6ZUxpc3QoaGVhZCwgc2VjcmV0LCBjb3VudCAqIGNlbGxTaXpl
KTsKICAgICAgICAgc2V0SXNGcmVlTGlzdGVkKCk7Ci0gICAgZWxzZSBpZiAoaXNFbXB0eSkKKyAg
ICB9IGVsc2UgaWYgKGlzRW1wdHkpCiAgICAgICAgIG1fYWxsb2NhdG9yLT5zZXRJc0VtcHR5KE5v
TG9ja2luZ05lY2Vzc2FyeSwgdGhpcywgdHJ1ZSk7CiAgICAgaWYgKGZhbHNlKQotICAgICAgICBk
YXRhTG9nKCJTbG93bHkgc3dlcHQgYmxvY2sgIiwgUmF3UG9pbnRlcigmYmxvY2spLCAiIHdpdGgg
Y2VsbCBzaXplICIsIGNlbGxTaXplKCksICIgYW5kIGF0dHJpYnV0ZXMgIiwgbV9hdHRyaWJ1dGVz
LCAiOiAiLCByZXN1bHQsICJcbiIpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIGRhdGFM
b2coIlNsb3dseSBzd2VwdCBibG9jayAiLCBSYXdQb2ludGVyKCZibG9jayksICIgd2l0aCBjZWxs
IHNpemUgIiwgY2VsbFNpemUsICIgYW5kIGF0dHJpYnV0ZXMgIiwgbV9hdHRyaWJ1dGVzLCAiOiAi
LCBwb2ludGVyRHVtcChmcmVlTGlzdCksICJcbiIpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBE
ZXN0cm95RnVuYz4KLUZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OmZpbmlzaFN3ZWVwS25v
d2luZ1N1YnNwYWNlKFN3ZWVwTW9kZSBzd2VlcE1vZGUsIGNvbnN0IERlc3Ryb3lGdW5jJiBkZXN0
cm95RnVuYykKK3ZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6ZmluaXNoU3dlZXBLbm93aW5nU3Vi
c3BhY2UoRnJlZUxpc3QqIGZyZWVMaXN0LCBjb25zdCBEZXN0cm95RnVuYyYgZGVzdHJveUZ1bmMp
CiB7CisgICAgU3dlZXBNb2RlIHN3ZWVwTW9kZSA9IGZyZWVMaXN0ID8gU3dlZXBUb0ZyZWVMaXN0
IDogU3dlZXBPbmx5OwogICAgIFN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0aW9uTW9kZSA9
IHRoaXMtPnN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlKCk7CiAgICAgRW1wdHlNb2RlIGVtcHR5TW9kZSA9
IHRoaXMtPmVtcHR5TW9kZSgpOwogICAgIFNjcmliYmxlTW9kZSBzY3JpYmJsZU1vZGUgPSB0aGlz
LT5zY3JpYmJsZU1vZGUoKTsKICAgICBOZXdseUFsbG9jYXRlZE1vZGUgbmV3bHlBbGxvY2F0ZWRN
b2RlID0gdGhpcy0+bmV3bHlBbGxvY2F0ZWRNb2RlKCk7CiAgICAgTWFya3NNb2RlIG1hcmtzTW9k
ZSA9IHRoaXMtPm1hcmtzTW9kZSgpOwogCi0gICAgRnJlZUxpc3QgcmVzdWx0OwogICAgIGF1dG8g
dHJ5U3BlY2lhbGl6ZWQgPSBbJl0gKCkgLT4gYm9vbCB7CiAgICAgICAgIGlmIChzd2VlcE1vZGUg
IT0gU3dlZXBUb0ZyZWVMaXN0KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjg4LDEw
ICsyODYsMTAgQEAgRnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6ZmluaXNoU3dlZQogICAg
ICAgICAKICAgICAgICAgc3dpdGNoIChtYXJrc01vZGUpIHsKICAgICAgICAgY2FzZSBNYXJrc05v
dFN0YWxlOgotICAgICAgICAgICAgcmVzdWx0ID0gc3BlY2lhbGl6ZWRTd2VlcDx0cnVlLCBOb3RF
bXB0eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hhc0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUs
IERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzTm90U3RhbGU+KElzRW1wdHksIFN3ZWVw
VG9GcmVlTGlzdCwgQmxvY2tIYXNEZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2
ZU5ld2x5QWxsb2NhdGVkLCBNYXJrc05vdFN0YWxlLCBkZXN0cm95RnVuYyk7CisgICAgICAgICAg
ICBzcGVjaWFsaXplZFN3ZWVwPHRydWUsIE5vdEVtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2Nr
SGFzRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCwg
TWFya3NOb3RTdGFsZT4oZnJlZUxpc3QsIElzRW1wdHksIFN3ZWVwVG9GcmVlTGlzdCwgQmxvY2tI
YXNEZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBN
YXJrc05vdFN0YWxlLCBkZXN0cm95RnVuYyk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgY2FzZSBNYXJrc1N0YWxlOgotICAgICAgICAgICAgcmVzdWx0ID0gc3BlY2lhbGl6ZWRT
d2VlcDx0cnVlLCBOb3RFbXB0eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hhc0Rlc3RydWN0b3Jz
LCBEb250U2NyaWJibGUsIERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzU3RhbGU+KElz
RW1wdHksIFN3ZWVwVG9GcmVlTGlzdCwgQmxvY2tIYXNEZXN0cnVjdG9ycywgRG9udFNjcmliYmxl
LCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBNYXJrc1N0YWxlLCBkZXN0cm95RnVuYyk7Cisg
ICAgICAgICAgICBzcGVjaWFsaXplZFN3ZWVwPHRydWUsIE5vdEVtcHR5LCBTd2VlcFRvRnJlZUxp
c3QsIEJsb2NrSGFzRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9lc05vdEhhdmVOZXdseUFs
bG9jYXRlZCwgTWFya3NTdGFsZT4oZnJlZUxpc3QsIElzRW1wdHksIFN3ZWVwVG9GcmVlTGlzdCwg
QmxvY2tIYXNEZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2Nh
dGVkLCBNYXJrc1N0YWxlLCBkZXN0cm95RnVuYyk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgfQogICAgICAgICAKQEAgLTI5OSwxMCArMjk3LDEwIEBAIEZyZWVMaXN0IE1hcmtl
ZEJsb2NrOjpIYW5kbGU6OmZpbmlzaFN3ZWUKICAgICB9OwogICAgIAogICAgIGlmICh0cnlTcGVj
aWFsaXplZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm47CiAgICAg
CiAgICAgLy8gVGhlIHRlbXBsYXRlIGFyZ3VtZW50cyBkb24ndCBtYXR0ZXIgYmVjYXVzZSB0aGUg
Zmlyc3Qgb25lIGlzIGZhbHNlLgotICAgIHJldHVybiBzcGVjaWFsaXplZFN3ZWVwPGZhbHNlLCBJ
c0VtcHR5LCBTd2VlcE9ubHksIEJsb2NrSGFzTm9EZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBI
YXNOZXdseUFsbG9jYXRlZCwgTWFya3NTdGFsZT4oZW1wdHlNb2RlLCBzd2VlcE1vZGUsIGRlc3Ry
dWN0aW9uTW9kZSwgc2NyaWJibGVNb2RlLCBuZXdseUFsbG9jYXRlZE1vZGUsIG1hcmtzTW9kZSwg
ZGVzdHJveUZ1bmMpOworICAgIHNwZWNpYWxpemVkU3dlZXA8ZmFsc2UsIElzRW1wdHksIFN3ZWVw
T25seSwgQmxvY2tIYXNOb0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUsIEhhc05ld2x5QWxsb2Nh
dGVkLCBNYXJrc1N0YWxlPihmcmVlTGlzdCwgZW1wdHlNb2RlLCBzd2VlcE1vZGUsIGRlc3RydWN0
aW9uTW9kZSwgc2NyaWJibGVNb2RlLCBuZXdseUFsbG9jYXRlZE1vZGUsIG1hcmtzTW9kZSwgZGVz
dHJveUZ1bmMpOwogfQogCiBpbmxpbmUgTWFya2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBEZXN0cnVj
dGlvbk1vZGUgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3dlZXBEZXN0cnVjdGlvbk1vZGUoKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmNwcAkocmV2aXNpb24gMjE3NjQ2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03Nyw5ICs3Nyw5IEBAIFN1YnNwYWNlOjp+U3Vic3BhY2UoKQogewogfQogCi1GcmVl
TGlzdCBTdWJzcGFjZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYgYmxvY2ssIE1h
cmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwTW9kZSBzd2VlcE1vZGUpCit2b2lkIFN1YnNwYWNlOjpm
aW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiBibG9jaywgRnJlZUxpc3QqIGZyZWVMaXN0
KQogewotICAgIHJldHVybiBibG9jay5maW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZShzd2VlcE1v
ZGUsIERlc3Ryb3lGdW5jKCkpOworICAgIGJsb2NrLmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNl
KGZyZWVMaXN0LCBEZXN0cm95RnVuYygpKTsKIH0KIAogdm9pZCBTdWJzcGFjZTo6ZGVzdHJveShW
TSYgdm0sIEpTQ2VsbCogY2VsbCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1
YnNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3Bh
Y2UuaAkocmV2aXNpb24gMjE3NjQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vi
c3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCBwdWJsaWM6CiAgICAgCiAg
ICAgLy8gVGhlIHB1cnBvc2Ugb2Ygb3ZlcnJpZGluZyB0aGlzIGlzIHRvIHNwZWNpYWxpemUgdGhl
IHN3ZWVwIGZvciB5b3VyIGRlc3RydWN0b3JzLiBUaGlzIHdvbid0CiAgICAgLy8gYmUgY2FsbGVk
IGZvciBuby1kZXN0cnVjdG9yIGJsb2Nrcy4gVGhpcyBtdXN0IGNhbGwgTWFya2VkQmxvY2s6OmZp
bmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlLgotICAgIHZpcnR1YWwgRnJlZUxpc3QgZmluaXNoU3dl
ZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwTW9kZSk7
CisgICAgdmlydHVhbCB2b2lkIGZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmLCBGcmVl
TGlzdCopOwogICAgIAogICAgIC8vIFRoZXNlIGdldCBjYWxsZWQgZm9yIGxhcmdlIG9iamVjdHMu
CiAgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koVk0mLCBKU0NlbGwqKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlSW5saW5lcy5oCShyZXZpc2lvbiAyMTc2NDYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZUlubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJKU0Nl
bGwuaCIKLSNpbmNsdWRlICJNYXJrZWRBbGxvY2F0b3IuaCIKKyNpbmNsdWRlICJNYXJrZWRBbGxv
Y2F0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTWFya2VkQmxvY2suaCIKICNpbmNsdWRlICJNYXJr
ZWRTcGFjZS5oIgogI2luY2x1ZGUgIlN1YnNwYWNlLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDIxNzY0NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE0NTgsNyArMTQ1OCw3IEBAIHB1YmxpYzoKICAgICAgICAgSnVtcCBwb3BQYXRoOwogICAgICAg
ICBKdW1wIGRvbmU7CiAgICAgICAgIAotICAgICAgICBsb2FkMzIoQWRkcmVzcyhhbGxvY2F0b3JH
UFIsIE1hcmtlZEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgT0JKRUNUX09GRlNFVE9G
KEZyZWVMaXN0LCByZW1haW5pbmcpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgbG9hZDMyKEFkZHJl
c3MoYWxsb2NhdG9yR1BSLCBNYXJrZWRBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZy
ZWVMaXN0OjpvZmZzZXRPZlJlbWFpbmluZygpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgcG9wUGF0
aCA9IGJyYW5jaFRlc3QzMihaZXJvLCByZXN1bHRHUFIpOwogICAgICAgICBpZiAoYWxsb2NhdG9y
KQogICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKC1hbGxvY2F0b3ItPmNlbGxTaXplKCkp
LCByZXN1bHRHUFIsIHNjcmF0Y2hHUFIpOwpAQCAtMTQ3Miw4ICsxNDcyLDggQEAgcHVibGljOgog
ICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIG5lZ1B0cihyZXN1bHRHUFIpOwotICAg
ICAgICBzdG9yZTMyKHNjcmF0Y2hHUFIsIEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBNYXJrZWRBbGxv
Y2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIE9CSkVDVF9PRkZTRVRPRihGcmVlTGlzdCwgcmVt
YWluaW5nKSkpOwotICAgICAgICBBZGRyZXNzIHBheWxvYWRFbmRBZGRyID0gQWRkcmVzcyhhbGxv
Y2F0b3JHUFIsIE1hcmtlZEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgT0JKRUNUX09G
RlNFVE9GKEZyZWVMaXN0LCBwYXlsb2FkRW5kKSk7CisgICAgICAgIHN0b3JlMzIoc2NyYXRjaEdQ
UiwgQWRkcmVzcyhhbGxvY2F0b3JHUFIsIE1hcmtlZEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlz
dCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mUmVtYWluaW5nKCkpKTsKKyAgICAgICAgQWRkcmVzcyBw
YXlsb2FkRW5kQWRkciA9IEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBNYXJrZWRBbGxvY2F0b3I6Om9m
ZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZlBheWxvYWRFbmQoKSk7CiAgICAg
ICAgIGlmIChpc1g4NigpKQogICAgICAgICAgICAgYWRkUHRyKHBheWxvYWRFbmRBZGRyLCByZXN1
bHRHUFIpOwogICAgICAgICBlbHNlIHsKQEAgLTE0ODUsMTMgKzE0ODUsMTkgQEAgcHVibGljOgog
ICAgICAgICAKICAgICAgICAgcG9wUGF0aC5saW5rKHRoaXMpOwogICAgICAgICAKLSAgICAgICAg
bG9hZFB0cihBZGRyZXNzKGFsbG9jYXRvckdQUiwgTWFya2VkQWxsb2NhdG9yOjpvZmZzZXRPZkZy
ZWVMaXN0KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRnJlZUxpc3QsIGhlYWQpKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgbG9hZFB0cihBZGRyZXNzKGFsbG9jYXRvckdQUiwgTWFya2VkQWxsb2NhdG9yOjpv
ZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZTY3JhbWJsZWRIZWFkKCkpLCBy
ZXN1bHRHUFIpOworICAgICAgICBpZiAoaXNYODYoKSkKKyAgICAgICAgICAgIHhvclB0cihBZGRy
ZXNzKGFsbG9jYXRvckdQUiwgTWFya2VkQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBG
cmVlTGlzdDo6b2Zmc2V0T2ZTZWNyZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGFsbG9jYXRvckdQUiwgTWFya2VkQWxsb2NhdG9y
OjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZTZWNyZXQoKSksIHNjcmF0
Y2hHUFIpOworICAgICAgICAgICAgeG9yUHRyKHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7CisgICAg
ICAgIH0KICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywgcmVzdWx0
R1BSKSk7CiAgICAgICAgIAogICAgICAgICAvLyBUaGUgb2JqZWN0IGlzIGhhbGYtYWxsb2NhdGVk
OiB3ZSBoYXZlIHdoYXQgd2Uga25vdyBpcyBhIGZyZXNoIG9iamVjdCwgYnV0CiAgICAgICAgIC8v
IGl0J3Mgc3RpbGwgb24gdGhlIEdDJ3MgZnJlZSBsaXN0LgogICAgICAgICBsb2FkUHRyKEFkZHJl
c3MocmVzdWx0R1BSKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgIHN0b3JlUHRyKHNjcmF0Y2hHUFIs
IEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBNYXJrZWRBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3Qo
KSArIE9CSkVDVF9PRkZTRVRPRihGcmVlTGlzdCwgaGVhZCkpKTsKKyAgICAgICAgc3RvcmVQdHIo
c2NyYXRjaEdQUiwgQWRkcmVzcyhhbGxvY2F0b3JHUFIsIE1hcmtlZEFsbG9jYXRvcjo6b2Zmc2V0
T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mU2NyYW1ibGVkSGVhZCgpKSk7CiAgICAg
ICAgIAogICAgICAgICBkb25lLmxpbmsodGhpcyk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmpl
Y3RTdWJzcGFjZS5jcHAJKHJldmlzaW9uIDIxNzY0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01Miw5ICs1Miw5IEBAIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2U6On5KU0Rlc3Ry
dWMKIHsKIH0KIAotRnJlZUxpc3QgSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZTo6ZmluaXNo
U3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYgaGFuZGxlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpT
d2VlcE1vZGUgc3dlZXBNb2RlKQordm9pZCBKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlOjpm
aW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiBoYW5kbGUsIEZyZWVMaXN0KiBmcmVlTGlz
dCkKIHsKLSAgICByZXR1cm4gaGFuZGxlLmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlKHN3ZWVw
TW9kZSwgRGVzdHJveUZ1bmMoKSk7CisgICAgaGFuZGxlLmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNw
YWNlKGZyZWVMaXN0LCBEZXN0cm95RnVuYygpKTsKIH0KIAogdm9pZCBKU0Rlc3RydWN0aWJsZU9i
amVjdFN1YnNwYWNlOjpkZXN0cm95KFZNJiB2bSwgSlNDZWxsKiBjZWxsKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGVzdHJ1Y3RpYmxl
T2JqZWN0U3Vic3BhY2UuaAkocmV2aXNpb24gMjE3NjQ2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNCw3ICszNCw3IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSBKU0Rlc3Ry
dWN0aWJsZU9iamVjdFN1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVhcCYpOwogICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZpcnR1YWwgfkpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UoKTsKICAgICAK
LSAgICBGcmVlTGlzdCBmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiwgTWFya2VkQmxv
Y2s6OkhhbmRsZTo6U3dlZXBNb2RlKSBvdmVycmlkZTsKKyAgICB2b2lkIGZpbmlzaFN3ZWVwKE1h
cmtlZEJsb2NrOjpIYW5kbGUmLCBGcmVlTGlzdCopIG92ZXJyaWRlOwogICAgIHZvaWQgZGVzdHJv
eShWTSYsIEpTQ2VsbCopIG92ZXJyaWRlOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxl
T2JqZWN0U3Vic3BhY2UuY3BwCShyZXZpc2lvbiAyMTc2NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Miw5ICs1Miw5IEBAIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJz
cGFjZTo6fkpTU2UKIHsKIH0KIAotRnJlZUxpc3QgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1
YnNwYWNlOjpmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiBoYW5kbGUsIE1hcmtlZEJs
b2NrOjpIYW5kbGU6OlN3ZWVwTW9kZSBzd2VlcE1vZGUpCit2b2lkIEpTU2VnbWVudGVkVmFyaWFi
bGVPYmplY3RTdWJzcGFjZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYgaGFuZGxl
LCBGcmVlTGlzdCogZnJlZUxpc3QpCiB7Ci0gICAgcmV0dXJuIGhhbmRsZS5maW5pc2hTd2VlcEtu
b3dpbmdTdWJzcGFjZShzd2VlcE1vZGUsIERlc3Ryb3lGdW5jKCkpOworICAgIGhhbmRsZS5maW5p
c2hTd2VlcEtub3dpbmdTdWJzcGFjZShmcmVlTGlzdCwgRGVzdHJveUZ1bmMoKSk7CiB9CiAKIHZv
aWQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlOjpkZXN0cm95KFZNJiB2bSwgSlND
ZWxsKiBjZWxsKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50
ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlLmgJKHJldmlz
aW9uIDIxNzY0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVk
VmFyaWFibGVPYmplY3RTdWJzcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBA
IHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0
U3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdmly
dHVhbCB+SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlKCk7CiAgICAgCi0gICAgRnJl
ZUxpc3QgZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYsIE1hcmtlZEJsb2NrOjpIYW5k
bGU6OlN3ZWVwTW9kZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBmaW5pc2hTd2VlcChNYXJrZWRCbG9j
azo6SGFuZGxlJiwgRnJlZUxpc3QqKSBvdmVycmlkZTsKICAgICB2b2lkIGRlc3Ryb3koVk0mLCBK
U0NlbGwqKSBvdmVycmlkZTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU3RyaW5nU3Vic3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU3RyaW5nU3Vic3BhY2UuY3BwCShyZXZpc2lvbiAyMTc2NDYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ1N1YnNwYWNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTIsOSArNTIsOSBAQCBKU1N0cmluZ1N1YnNwYWNlOjp+SlNTdHJpbmdTdWJz
cGFjZSgpCiB7CiB9CiAKLUZyZWVMaXN0IEpTU3RyaW5nU3Vic3BhY2U6OmZpbmlzaFN3ZWVwKE1h
cmtlZEJsb2NrOjpIYW5kbGUmIGhhbmRsZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBNb2Rl
IHN3ZWVwTW9kZSkKK3ZvaWQgSlNTdHJpbmdTdWJzcGFjZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxv
Y2s6OkhhbmRsZSYgaGFuZGxlLCBGcmVlTGlzdCogZnJlZUxpc3QpCiB7Ci0gICAgcmV0dXJuIGhh
bmRsZS5maW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZShzd2VlcE1vZGUsIERlc3Ryb3lGdW5jKCkp
OworICAgIGhhbmRsZS5maW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZShmcmVlTGlzdCwgRGVzdHJv
eUZ1bmMoKSk7CiB9CiAKIHZvaWQgSlNTdHJpbmdTdWJzcGFjZTo6ZGVzdHJveShWTSYgdm0sIEpT
Q2VsbCogY2VsbCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5n
U3Vic3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1N0cmluZ1N1YnNwYWNlLmgJKHJldmlzaW9uIDIxNzY0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU3RyaW5nU3Vic3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyAr
MzQsNyBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNTdHJpbmdTdWJzcGFjZShD
U3RyaW5nIG5hbWUsIEhlYXAmKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIH5KU1N0
cmluZ1N1YnNwYWNlKCk7CiAgICAgCi0gICAgRnJlZUxpc3QgZmluaXNoU3dlZXAoTWFya2VkQmxv
Y2s6OkhhbmRsZSYsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwTW9kZSkgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiwgRnJlZUxpc3QqKSBvdmVy
cmlkZTsKICAgICB2b2lkIGRlc3Ryb3koVk0mLCBKU0NlbGwqKSBvdmVycmlkZTsKIH07CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDIxNzY0
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2luZyBj
b3B5KQpAQCAtMzYyLDcgKzM2Miw3IEBAIHR5cGVkZWYgY29uc3QgY2hhciogb3B0aW9uU3RyaW5n
OwogICAgIHYoZ2NMb2dMZXZlbCwgbG9nR0MsIEdDTG9nZ2luZzo6Tm9uZSwgTm9ybWFsLCAiZGVi
dWdnaW5nIG9wdGlvbiB0byBsb2cgR0MgYWN0aXZpdHkgKDAgPSBOb25lLCAxID0gQmFzaWMsIDIg
PSBWZXJib3NlKSIpIFwKICAgICB2KGJvb2wsIHVzZUdDLCB0cnVlLCBOb3JtYWwsIG51bGxwdHIp
IFwKICAgICB2KGJvb2wsIGdjQXRFbmQsIGZhbHNlLCBOb3JtYWwsICJJZiB0cnVlLCB0aGUganNj
IENMSSB3aWxsIGRvIGEgR0MgYmVmb3JlIGV4aXRpbmciKSBcCi0gICAgdihib29sLCBmb3JjZUdD
U2xvd1BhdGhzLCBmYWxzZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgd2Ugd2lsbCBmb3JjZSBhbGwgSklU
IGZhc3QgYWxsb2NhdGlvbnMgZG93biB0aGVpciBzbG93IHBhdGhzLiIpXAorICAgIHYoYm9vbCwg
Zm9yY2VHQ1Nsb3dQYXRocywgZmFsc2UsIE5vcm1hbCwgIklmIHRydWUsIHdlIHdpbGwgZm9yY2Ug
YWxsIEpJVCBmYXN0IGFsbG9jYXRpb25zIGRvd24gdGhlaXIgc2xvdyBwYXRocy4iKSBcCiAgICAg
dih1bnNpZ25lZCwgZ2NNYXhIZWFwU2l6ZSwgMCwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdih1
bnNpZ25lZCwgZm9yY2VSQU1TaXplLCAwLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGJvb2ws
IHJlY29yZEdDUGF1c2VUaW1lcywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UuY3BwCShyZXZpc2lvbiAyMTc2NDYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01Niw5ICs1Niw5IEBAIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tT
dWJzcGFjZTo6fkpTV2ViQXMKIHsKIH0KIAotRnJlZUxpc3QgSlNXZWJBc3NlbWJseUNvZGVCbG9j
a1N1YnNwYWNlOjpmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiBoYW5kbGUsIE1hcmtl
ZEJsb2NrOjpIYW5kbGU6OlN3ZWVwTW9kZSBzd2VlcE1vZGUpCit2b2lkIEpTV2ViQXNzZW1ibHlD
b2RlQmxvY2tTdWJzcGFjZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYgaGFuZGxl
LCBGcmVlTGlzdCogZnJlZUxpc3QpCiB7Ci0gICAgcmV0dXJuIGhhbmRsZS5maW5pc2hTd2VlcEtu
b3dpbmdTdWJzcGFjZShzd2VlcE1vZGUsIERlc3Ryb3lGdW5jKCkpOworICAgIGhhbmRsZS5maW5p
c2hTd2VlcEtub3dpbmdTdWJzcGFjZShmcmVlTGlzdCwgRGVzdHJveUZ1bmMoKSk7CiB9CiAKIHZv
aWQgSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlOjpkZXN0cm95KFZNJiB2bSwgSlNDZWxs
KiBjZWxsKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eUNvZGVCbG9ja1N1YnNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmgJKHJldmlzaW9uIDIxNzY0
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxv
Y2tTdWJzcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIHB1YmxpYzoKICAg
ICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJik7CiAg
ICAgdmlydHVhbCB+SlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlKCk7CiAgICAgCi0gICAg
RnJlZUxpc3QgZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYsIE1hcmtlZEJsb2NrOjpI
YW5kbGU6OlN3ZWVwTW9kZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBmaW5pc2hTd2VlcChNYXJrZWRC
bG9jazo6SGFuZGxlJiwgRnJlZUxpc3QqKSBvdmVycmlkZTsKICAgICB2b2lkIGRlc3Ryb3koVk0m
LCBKU0NlbGwqKSBvdmVycmlkZTsKIH07CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>311767</attachid>
            <date>2017-06-01 15:38:55 -0700</date>
            <delta_ts>2017-06-01 15:44:18 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>58851</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjE3NjYyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMCBA
QAorMjAxNy0wNi0wMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEdDIHNob3VsZCB1c2UgYSBzY3JhbWJsZWQgZnJlZS1saXN0CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzI3OTMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFByZXZpb3VzbHksIG91ciBidW1w
J24ncG9wIGFsbG9jYXRvciB3b3VsZCB1c2UgYSBjb252ZW50aW9uYWwgbGlua2VkLWxpc3QgZm9y
IHRoZSBmcmVlLWxpc3QuCisgICAgICAgIFRoZSBsaW5rZWQtbGlzdCB3b3VsZCBiZSB0aHJlYWRl
ZCB0aHJvdWdoIGZyZWUgbWVtb3J5LCBhcyBpcyB0aGUgdXN1YWwgY29udmVudGlvbi4KKyAgICAg
ICAgCisgICAgICAgIFRoaXMgc2NyYW1ibGVzIHRoZSBuZXh0IHBvaW50ZXJzIG9mIHRoYXQgZnJl
ZS1saXN0LiBJdCBhbHNvIHNjcmFtYmxlcyB0aGUgaGVhZCBwb2ludGVyLCBiZWNhdXNlCisgICAg
ICAgIHRoaXMgbGVhZHMgdG8gYSBtb3JlIG5hdHVyYWwgZmFzdC1wYXRoIHN0cnVjdHVyZSBhbmQg
c2F2ZXMgb25lIHJlZ2lzdGVyIG9uIEFSTTY0LgorICAgICAgICAKKyAgICAgICAgVGhlIHNlY3Jl
dCB3aXRoIHdoaWNoIHBvaW50ZXJzIGFyZSBzY3JhbWJsZWQgaXMgcGVyLWFsbG9jYXRvci4gQWxs
b2NhdG9ycyBjaG9vc2UgYSBuZXcgc2VjcmV0CisgICAgICAgIGV2ZXJ5IHRpbWUgdGhleSBkbyBh
IHN3ZWVwLXRvLXBvcC4KKyAgICAgICAgCisgICAgICAgIFRoaXMgZG9lc24ndCBjaGFuZ2UgdGhl
IGJlaGF2aW9yIG9mIHRoZSBidW1wIHBhcnQgb2YgYnVtcCduJ3BvcCwgYnV0IGl0IGRvZXMgcmVm
YWN0b3IgdGhlIGNvZGUKKyAgICAgICAgcXVpdGUgYSBiaXQuIFByZXZpb3VzbHksIHRoZXJlIHdl
cmUgZm91ciBjb3BpZXMgb2YgdGhlIGFsbG9jYXRvciBmYXN0IHBhdGg6IHR3byBpbgorICAgICAg
ICBNYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmgsIG9uZSBpbiBNYXJrZWRBbGxvY2F0b3IuY3BwLCBh
bmQgb25lIGluIEFzc2VtYmx5SGVscGVycy5oLiBUaGUgSklUIG9uZQorICAgICAgICB3YXMgb2J2
aW91c2x5IGRpZmZlcmVudC1sb29raW5nLCBidXQgdGhlIG90aGVyIHRocmVlIHdlcmUgYWxtb3N0
IGlkZW50aWNhbC4gVGhpcyBtb3ZlcyBhbGwgb2YKKyAgICAgICAgdGhhdCBsb2dpYyBpbnRvIEZy
ZWVMaXN0LiBUaGVyZSBhcmUgbm93IGp1c3QgdHdvIGNvcGllcyBvZiB0aGUgYWxsb2NhdG9yOiBG
cmVlTGlzdElubGluZXMuaCBhbmQKKyAgICAgICAgQXNzZW1ibHlIZWxwZXJzLmguCisgICAgICAg
IAorICAgICAgICBUaGlzIGFwcGVhcnMgdG8gYmUganVzdCBhcyBmYXN0IGFzIG91ciBwcmV2aW91
c2x5IGFsbG9jYXRvci4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogaGVhcC9GcmVlTGlzdC5jcHA6CisgICAgICAgIChKU0M6
OkZyZWVMaXN0OjpGcmVlTGlzdCk6CisgICAgICAgIChKU0M6OkZyZWVMaXN0Ojp+RnJlZUxpc3Qp
OgorICAgICAgICAoSlNDOjpGcmVlTGlzdDo6Y2xlYXIpOgorICAgICAgICAoSlNDOjpGcmVlTGlz
dDo6aW5pdGlhbGl6ZUxpc3QpOgorICAgICAgICAoSlNDOjpGcmVlTGlzdDo6aW5pdGlhbGl6ZUJ1
bXApOgorICAgICAgICAoSlNDOjpGcmVlTGlzdDo6Y29udGFpbnMpOgorICAgICAgICAoSlNDOjpG
cmVlTGlzdDo6ZHVtcCk6CisgICAgICAgICogaGVhcC9GcmVlTGlzdC5oOgorICAgICAgICAoSlND
OjpGcmVlTGlzdDo6YWxsb2NhdGlvbldpbGxGYWlsKToKKyAgICAgICAgKEpTQzo6RnJlZUxpc3Q6
Om9yaWdpbmFsU2l6ZSk6CisgICAgICAgIChKU0M6OkZyZWVMaXN0OjphZGRyZXNzT2ZMaXN0KToK
KyAgICAgICAgKEpTQzo6RnJlZUxpc3Q6Om9mZnNldE9mQmxvY2spOgorICAgICAgICAoSlNDOjpG
cmVlTGlzdDo6b2Zmc2V0T2ZMaXN0KToKKyAgICAgICAgKEpTQzo6RnJlZUxpc3Q6Om9mZnNldE9m
SW5kZXgpOgorICAgICAgICAoSlNDOjpGcmVlTGlzdDo6b2Zmc2V0T2ZQYXlsb2FkRW5kKToKKyAg
ICAgICAgKEpTQzo6RnJlZUxpc3Q6Om9mZnNldE9mUmVtYWluaW5nKToKKyAgICAgICAgKEpTQzo6
RnJlZUxpc3Q6Om9mZnNldE9mT3JpZ2luYWxTaXplKToKKyAgICAgICAgKEpTQzo6RnJlZUxpc3Q6
OkZyZWVMaXN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6RnJlZUxpc3Q6Omxpc3QpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpGcmVlTGlzdDo6YnVtcCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkZyZWVMaXN0OjpvcGVyYXRvcj09KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6RnJlZUxp
c3Q6Om9wZXJhdG9yIT0pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpGcmVlTGlzdDo6b3BlcmF0
b3IgYm9vbCk6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9GcmVlTGlzdElubGluZXMuaDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkZyZWVMaXN0OjphZGRGcmVlQ2VsbCk6CisgICAgICAgIChKU0M6
OkZyZWVMaXN0OjphbGxvY2F0ZSk6CisgICAgICAgIChKU0M6OkZyZWVMaXN0Ojpmb3JFYWNoKToK
KyAgICAgICAgKEpTQzo6RnJlZUxpc3Q6OnRvT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6RnJlZUxp
c3Q6OmZyb21PZmZzZXQpOgorICAgICAgICAqIGhlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmNwcDoK
KyAgICAgICAgKEpTQzo6SW5jcmVtZW50YWxTd2VlcGVyOjpzd2VlcE5leHRCbG9jayk6CisgICAg
ICAgICogaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxv
Y2F0b3I6Ok1hcmtlZEFsbG9jYXRvcik6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6
ZGlkQ29uc3VtZUZyZWVMaXN0KToKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjp0cnlB
bGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKToKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9y
Ojp0cnlBbGxvY2F0ZUluKToKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjphbGxvY2F0
ZVNsb3dDYXNlSW1wbCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6c3RvcEFsbG9j
YXRpbmcpOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OnByZXBhcmVGb3JBbGxvY2F0
aW9uKToKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjpyZXN1bWVBbGxvY2F0aW5nKToK
KyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjpzd2VlcCk6CisgICAgICAgIChKU0M6Ok1h
cmtlZEFsbG9jYXRvcjo6c2V0RnJlZUxpc3QpOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvTWFy
a2VkQWxsb2NhdG9yLmg6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6ZnJlZUxpc3Qp
OgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OmlzRnJlZUxpc3RlZENlbGwpOiBEZWxl
dGVkLgorICAgICAgICAqIGhlYXAvTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oOgorICAgICAgICAo
SlNDOjpNYXJrZWRBbGxvY2F0b3I6OmlzRnJlZUxpc3RlZENlbGwpOgorICAgICAgICAoSlNDOjpN
YXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlKToKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2Nh
dG9yOjphbGxvY2F0ZSk6CisgICAgICAgICogaGVhcC9NYXJrZWRCbG9jay5jcHA6CisgICAgICAg
IChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6OnN0b3BBbGxvY2F0aW5nKToKKyAgICAgICAgKEpT
Qzo6TWFya2VkQmxvY2s6OkhhbmRsZTo6bGFzdENoYW5jZVRvRmluYWxpemUpOgorICAgICAgICAo
SlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjpyZXN1bWVBbGxvY2F0aW5nKToKKyAgICAgICAgKEpT
Qzo6TWFya2VkQmxvY2s6OkhhbmRsZTo6emFwKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6
OkhhbmRsZTo6c3dlZXApOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjppc0Zy
ZWVMaXN0ZWRDZWxsKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OkhhbmRsZTo6Zm9yRWFj
aEZyZWVDZWxsKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL01hcmtlZEJsb2NrLmg6CisgICAg
ICAgICogaGVhcC9NYXJrZWRCbG9ja0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6TWFya2VkQmxv
Y2s6OkhhbmRsZTo6c3BlY2lhbGl6ZWRTd2VlcCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2Nr
OjpIYW5kbGU6OmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlKToKKyAgICAgICAgKEpTQzo6TWFy
a2VkQmxvY2s6OkhhbmRsZTo6aXNGcmVlTGlzdGVkQ2VsbCk6IERlbGV0ZWQuCisgICAgICAgICog
aGVhcC9TdWJzcGFjZS5jcHA6CisgICAgICAgIChKU0M6OlN1YnNwYWNlOjpmaW5pc2hTd2VlcCk6
CisgICAgICAgICogaGVhcC9TdWJzcGFjZS5oOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBl
cnMuaDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0QWxsb2NhdGVXaXRoTm9u
TnVsbEFsbG9jYXRvcik6CisgICAgICAgICogcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdFN1
YnNwYWNlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZTo6
ZmluaXNoU3dlZXApOgorICAgICAgICAqIHJ1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RTdWJz
cGFjZS5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNw
YWNlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNl
OjpmaW5pc2hTd2VlcCk6CisgICAgICAgICogcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2Jq
ZWN0U3Vic3BhY2UuaDoKKyAgICAgICAgKiBydW50aW1lL0pTU3RyaW5nU3Vic3BhY2UuY3BwOgor
ICAgICAgICAoSlNDOjpKU1N0cmluZ1N1YnNwYWNlOjpmaW5pc2hTd2VlcCk6CisgICAgICAgICog
cnVudGltZS9KU1N0cmluZ1N1YnNwYWNlLmg6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrU3Vic3BhY2UuY3BwOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrU3Vic3BhY2U6OmZpbmlzaFN3ZWVwKToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNz
ZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5oOgorCiAyMDE3LTA2LTAxICBUb21hcyBQb3BlbGEgIDx0
cG9wZWxhQHJlZGhhdC5jb20+LCBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpIGluIEluZmVycmVkVHlwZTo6a2luZEZv
ckZsYWdzKCkgb24gQmlnLUVuZGlhbnMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CShyZXZpc2lvbiAyMTc2NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTAxLDYgKzUw
MSw3IEBACiAJCTBGNjRCMjc5MUE3OTU3QjIwMDZFNEU2NiAvKiBDYWxsRWRnZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY0QjI3NzFBNzk1N0Iy
MDA2RTRFNjYgLyogQ2FsbEVkZ2UuY3BwICovOyB9OwogCQkwRjY0QjI3QTFBNzk1N0IyMDA2RTRF
NjYgLyogQ2FsbEVkZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGNjRCMjc4MUE3OTU3QjIwMDZFNEU2NiAvKiBDYWxsRWRnZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNjRFQUYzMUM0RUNEMDYw
MDYyMUU5QiAvKiBBaXJBcmdJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjY0RUFGMjFDNEVDRDA2MDA2MjFFOUIgLyogQWlyQXJnSW5saW5l
cy5oICovOyB9OworCQkwRjY1ODVFMTFFRTA4MDVBMDA5NTE3NkQgLyogRnJlZUxpc3RJbmxpbmVz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY1ODVF
MDFFRTA4MDU3MDA5NTE3NkQgLyogRnJlZUxpc3RJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY2NjBFMzcxRTA1MTdCOTAwMzE0NjJD
IC8qIE1hcmtpbmdDb25zdHJhaW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNjYwRTMzMUUwNTE3QjcwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3Ry
YWludC5jcHAgKi87IH07CiAJCTBGNjYwRTM4MUUwNTE3QkIwMDMxNDYyQyAvKiBNYXJraW5nQ29u
c3RyYWludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY2NjBFMzQxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY2NjBFMzkxRTA1MTdC
RjAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50U2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjYwRTM1MUUwNTE3QjcwMDMxNDYyQyAvKiBN
YXJraW5nQ29uc3RyYWludFNldC5jcHAgKi87IH07CkBAIC0zMDc3LDYgKzMwNzgsNyBAQAogCQkw
RjY0QjI3NzFBNzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2UuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gQ2FsbEVkZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjY0QjI3ODFBNzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2UuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FsbEVkZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY2NEVBRjIxQzRFQ0QwNjAwNjIxRTlCIC8qIEFpckFyZ0lubGluZXMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyQXJnSW5saW5lcy5oOyBwYXRoID0gYjMv
YWlyL0FpckFyZ0lubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2NTg1
RTAxRUUwODA1NzAwOTUxNzZEIC8qIEZyZWVMaXN0SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBGcmVlTGlzdElubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY2NjBFMzMxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hcmtpbmdDb25zdHJhaW50
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2NjBFMzQxRTA1MTdCNzAwMzE0
NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IE1hcmtpbmdDb25zdHJhaW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
NjYwRTM1MUUwNTE3QjcwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3RyYWludFNldC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYXJraW5nQ29uc3RyYWludFNldC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02MDE5LDYgKzYwMjEsNyBAQAogCQkJCTJB
ODM2Mzg0MThEN0QwRUUwMDAwRUJDQyAvKiBFZGVuR0NBY3Rpdml0eUNhbGxiYWNrLmggKi8sCiAJ
CQkJMEY1NTEzQTcxRDVBNjhDQjAwQzMyQkQ4IC8qIEZyZWVMaXN0LmNwcCAqLywKIAkJCQkwRjU1
MTNBNTFENUE2ODJBMDBDMzJCRDggLyogRnJlZUxpc3QuaCAqLywKKwkJCQkwRjY1ODVFMDFFRTA4
MDU3MDA5NTE3NkQgLyogRnJlZUxpc3RJbmxpbmVzLmggKi8sCiAJCQkJMkE4MzYzODcxOEQ3RDBG
RTAwMDBFQkNDIC8qIEZ1bGxHQ0FjdGl2aXR5Q2FsbGJhY2suY3BwICovLAogCQkJCTJBODM2Mzg4
MThEN0QwRkUwMDAwRUJDQyAvKiBGdWxsR0NBY3Rpdml0eUNhbGxiYWNrLmggKi8sCiAJCQkJMkFB
Q0U2M0ExOENBNUEwMzAwRUQwMTkxIC8qIEdDQWN0aXZpdHlDYWxsYmFjay5jcHAgKi8sCkBAIC04
NjYxLDYgKzg2NjQsNyBAQAogCQkJCTBGMjM1QkVFMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JF
eGl0UHJlcGFyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkM2M0I3MUU2MzQzRUQwMEMx
MzgzOSAvKiBCM0F0b21pY1ZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjYyMzc5ODFBRTQ1
Q0E3MDBENDAyRUEgLyogREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRjY1ODVFMTFFRTA4MDVBMDA5NTE3NkQgLyogRnJlZUxpc3RJbmxpbmVzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkZGQzk1QzE0RUY5MEFGMDBDNzI1MzIgLyogREZHUGhhc2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTM3QzczOEQyMUVEQjU2RTQwMDNGMkIwQiAvKiBQYXJzZUludC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYyQjlDRUIxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1BoaUNoaWxk
cmVuLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDIxNzY0NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtNjQzLDYgKzY0MywxMCBAQCBwdWJsaWM6CiAgICAgICAgIHhvcjMyKGltbSwgc3JjRGVzdCk7
CiAgICAgfQogCisgICAgdm9pZCB4b3JQdHIoQWRkcmVzcyBzcmMsIFJlZ2lzdGVySUQgZGVzdCkK
KyAgICB7CisgICAgICAgIHhvcjMyKHNyYywgZGVzdCk7CisgICAgfQogCiAgICAgdm9pZCBsb2Fk
UHRyKEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewpAQCAt
OTUzLDYgKzk1NywxMSBAQCBwdWJsaWM6CiAgICAgICAgIHhvcjY0KHNyYywgZGVzdCk7CiAgICAg
fQogICAgIAorICAgIHZvaWQgeG9yUHRyKEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisg
ICAgeworICAgICAgICB4b3I2NChzcmMsIGRlc3QpOworICAgIH0KKyAgICAKICAgICB2b2lkIHhv
clB0cihSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBkZXN0KQogICAgIHsKICAgICAgICAgeG9yNjQo
c3JjLCBkZXN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXJBUk02NC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCShyZXZpc2lvbiAyMTc2NDYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAkod29ya2luZyBj
b3B5KQpAQCAtOTkxLDYgKzk5MSwxMiBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5lb3I8NjQ+KGRlc3QsIHNyYywgZGF0YVRlbXBSZWdpc3Rlcik7CiAgICAgICAgIH0KICAgICB9
CisgICAgCisgICAgdm9pZCB4b3I2NChBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAg
IHsKKyAgICAgICAgbG9hZDY0KHNyYywgZ2V0Q2FjaGVkRGF0YVRlbXB0UmVnaXN0ZXJJREFuZElu
dmFsaWRhdGUoKSk7CisgICAgICAgIHhvcjY0KGRhdGFUZW1wUmVnaXN0ZXIsIGRlc3QpOworICAg
IH0KIAogICAgIHZvaWQgbm90MzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKICAg
ICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9GcmVlTGlzdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRnJlZUxpc3QuY3BwCShyZXZpc2lv
biAyMTc2NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9GcmVlTGlzdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDIxICsyNiw2MiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIkZyZWVMaXN0LmgiCiAKKyNpbmNsdWRlICJGcmVlTGlzdElubGluZXMuaCIKKyNpbmNs
dWRlICJNYXJrZWRCbG9jay5oIgorI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KKwogbmFt
ZXNwYWNlIEpTQyB7CiAKLWJvb2wgRnJlZUxpc3Q6OmNvbnRhaW5zKGNvbnN0IHZvaWQqIHRhcmdl
dCkgY29uc3QKK0ZyZWVMaXN0OjpGcmVlTGlzdCh1bnNpZ25lZCBjZWxsU2l6ZSkKKyAgICA6IG1f
Y2VsbFNpemUoY2VsbFNpemUpCit7Cit9CisKK0ZyZWVMaXN0Ojp+RnJlZUxpc3QoKQoreworfQor
Cit2b2lkIEZyZWVMaXN0OjpjbGVhcigpCit7CisgICAgbV9zY3JhbWJsZWRIZWFkID0gMDsKKyAg
ICBtX3NlY3JldCA9IDA7CisgICAgbV9wYXlsb2FkRW5kID0gbnVsbHB0cjsKKyAgICBtX3JlbWFp
bmluZyA9IDA7CisgICAgbV9vcmlnaW5hbFNpemUgPSAwOworfQorCit2b2lkIEZyZWVMaXN0Ojpp
bml0aWFsaXplTGlzdChGcmVlQ2VsbCogaGVhZCwgdWludHB0cl90IHNlY3JldCwgdW5zaWduZWQg
Ynl0ZXMpCit7CisgICAgLy8gSXQncyAqc2xpZ2h0bHkqIG1vcmUgb3B0aW1hbCB0byB1c2UgYSBz
Y3JhbWJsZWQgaGVhZC4gSXQgc2F2ZXMgYSByZWdpc3RlciBvbiB0aGUgZmFzdCBwYXRoLgorICAg
IG1fc2NyYW1ibGVkSGVhZCA9IEZyZWVDZWxsOjpzY3JhbWJsZShoZWFkLCBzZWNyZXQpOworICAg
IG1fc2VjcmV0ID0gc2VjcmV0OworICAgIG1fcGF5bG9hZEVuZCA9IG51bGxwdHI7CisgICAgbV9y
ZW1haW5pbmcgPSAwOworICAgIG1fb3JpZ2luYWxTaXplID0gYnl0ZXM7Cit9CisKK3ZvaWQgRnJl
ZUxpc3Q6OmluaXRpYWxpemVCdW1wKGNoYXIqIHBheWxvYWRFbmQsIHVuc2lnbmVkIHJlbWFpbmlu
ZykKK3sKKyAgICBtX3NjcmFtYmxlZEhlYWQgPSAwOworICAgIG1fc2VjcmV0ID0gMDsKKyAgICBt
X3BheWxvYWRFbmQgPSBwYXlsb2FkRW5kOworICAgIG1fcmVtYWluaW5nID0gcmVtYWluaW5nOwor
ICAgIG1fb3JpZ2luYWxTaXplID0gcmVtYWluaW5nOworfQorCitib29sIEZyZWVMaXN0Ojpjb250
YWlucyhIZWFwQ2VsbCogdGFyZ2V0KSBjb25zdAogewotICAgIGlmIChyZW1haW5pbmcpIHsKLSAg
ICAgICAgY29uc3Qgdm9pZCogc3RhcnQgPSAocGF5bG9hZEVuZCAtIHJlbWFpbmluZyk7Ci0gICAg
ICAgIGNvbnN0IHZvaWQqIGVuZCA9IHBheWxvYWRFbmQ7CisgICAgaWYgKG1fcmVtYWluaW5nKSB7
CisgICAgICAgIGNvbnN0IHZvaWQqIHN0YXJ0ID0gKG1fcGF5bG9hZEVuZCAtIG1fcmVtYWluaW5n
KTsKKyAgICAgICAgY29uc3Qgdm9pZCogZW5kID0gbV9wYXlsb2FkRW5kOwogICAgICAgICByZXR1
cm4gKHN0YXJ0IDw9IHRhcmdldCkgJiYgKHRhcmdldCA8IGVuZCk7CiAgICAgfQogCi0gICAgRnJl
ZUNlbGwqIGNhbmRpZGF0ZSA9IGhlYWQ7CisgICAgRnJlZUNlbGwqIGNhbmRpZGF0ZSA9IGhlYWQo
KTsKICAgICB3aGlsZSAoY2FuZGlkYXRlKSB7Ci0gICAgICAgIGlmIChjYW5kaWRhdGUgPT0gdGFy
Z2V0KQorICAgICAgICBpZiAoYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4oY2FuZGlkYXRlKSA9PSB0
YXJnZXQpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgY2FuZGlkYXRlID0gY2Fu
ZGlkYXRlLT5uZXh0OworICAgICAgICBjYW5kaWRhdGUgPSBjYW5kaWRhdGUtPm5leHQobV9zZWNy
ZXQpOwogICAgIH0KIAogICAgIHJldHVybiBmYWxzZTsKQEAgLTQ4LDcgKzg5LDcgQEAgYm9vbCBG
cmVlTGlzdDo6Y29udGFpbnMoY29uc3Qgdm9pZCogdGFyZwogCiB2b2lkIEZyZWVMaXN0OjpkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7Ci0gICAgb3V0LnByaW50KCJ7aGVhZCA9ICIsIFJh
d1BvaW50ZXIoaGVhZCksICIsIHBheWxvYWRFbmQgPSAiLCBSYXdQb2ludGVyKHBheWxvYWRFbmQp
LCAiLCByZW1haW5pbmcgPSAiLCByZW1haW5pbmcsICIsIG9yaWdpbmFsU2l6ZSA9ICIsIG9yaWdp
bmFsU2l6ZSwgIn0iKTsKKyAgICBvdXQucHJpbnQoIntoZWFkID0gIiwgUmF3UG9pbnRlcihoZWFk
KCkpLCAiLCBzZWNyZXQgPSAiLCBtX3NlY3JldCwgIiwgcGF5bG9hZEVuZCA9ICIsIFJhd1BvaW50
ZXIobV9wYXlsb2FkRW5kKSwgIiwgcmVtYWluaW5nID0gIiwgbV9yZW1haW5pbmcsICIsIG9yaWdp
bmFsU2l6ZSA9ICIsIG1fb3JpZ2luYWxTaXplLCAifSIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0ZyZWVMaXN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRnJlZUxpc3QuaAkocmV2aXNpb24gMjE3
NjQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRnJlZUxpc3QuaAkod29ya2luZyBj
b3B5KQpAQCAtMjUsNjggKzI1LDc5IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAKIG5hbWVzcGFj
ZSBKU0MgewogCi1zdHJ1Y3QgRnJlZUNlbGwgewotICAgIEZyZWVDZWxsKiBuZXh0OwotfTsKLSAg
ICAgICAgCi0vLyBUaGlzIHJlcHJlc2VudGF0aW9uIG9mIGEgRnJlZUxpc3QgaXMgY29udmVuaWVu
dCBmb3IgdGhlIE1hcmtlZEFsbG9jYXRvci4KK2NsYXNzIEhlYXBDZWxsOwogCi1zdHJ1Y3QgRnJl
ZUxpc3QgewotICAgIEZyZWVDZWxsKiBoZWFkIHsgbnVsbHB0ciB9OwotICAgIGNoYXIqIHBheWxv
YWRFbmQgeyBudWxscHRyIH07Ci0gICAgdW5zaWduZWQgcmVtYWluaW5nIHsgMCB9OwotICAgIHVu
c2lnbmVkIG9yaWdpbmFsU2l6ZSB7IDAgfTsKLSAgICAKLSAgICBGcmVlTGlzdCgpCi0gICAgewot
ICAgIH0KLSAgICAKLSAgICBzdGF0aWMgRnJlZUxpc3QgbGlzdChGcmVlQ2VsbCogaGVhZCwgdW5z
aWduZWQgYnl0ZXMpCitzdHJ1Y3QgRnJlZUNlbGwgeworICAgIHN0YXRpYyB1aW50cHRyX3Qgc2Ny
YW1ibGUoRnJlZUNlbGwqIGNlbGwsIHVpbnRwdHJfdCBzZWNyZXQpCiAgICAgewotICAgICAgICBG
cmVlTGlzdCByZXN1bHQ7Ci0gICAgICAgIHJlc3VsdC5oZWFkID0gaGVhZDsKLSAgICAgICAgcmVz
dWx0LnJlbWFpbmluZyA9IDA7Ci0gICAgICAgIHJlc3VsdC5vcmlnaW5hbFNpemUgPSBieXRlczsK
LSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDx1aW50
cHRyX3Q+KGNlbGwpIF4gc2VjcmV0OwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgRnJlZUxpc3Qg
YnVtcChjaGFyKiBwYXlsb2FkRW5kLCB1bnNpZ25lZCByZW1haW5pbmcpCisgICAgc3RhdGljIEZy
ZWVDZWxsKiBkZXNjcmFtYmxlKHVpbnRwdHJfdCBjZWxsLCB1aW50cHRyX3Qgc2VjcmV0KQogICAg
IHsKLSAgICAgICAgRnJlZUxpc3QgcmVzdWx0OwotICAgICAgICByZXN1bHQucGF5bG9hZEVuZCA9
IHBheWxvYWRFbmQ7Ci0gICAgICAgIHJlc3VsdC5yZW1haW5pbmcgPSByZW1haW5pbmc7Ci0gICAg
ICAgIHJlc3VsdC5vcmlnaW5hbFNpemUgPSByZW1haW5pbmc7Ci0gICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8RnJlZUNlbGwqPihjZWxsIF4gc2VjcmV0
KTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZyZWVMaXN0JiBvdGhl
cikgY29uc3QKKyAgICB2b2lkIHNldE5leHQoRnJlZUNlbGwqIG5leHQsIHVpbnRwdHJfdCBzZWNy
ZXQpCiAgICAgewotICAgICAgICByZXR1cm4gaGVhZCA9PSBvdGhlci5oZWFkCi0gICAgICAgICAg
ICAmJiBwYXlsb2FkRW5kID09IG90aGVyLnBheWxvYWRFbmQKLSAgICAgICAgICAgICYmIHJlbWFp
bmluZyA9PSBvdGhlci5yZW1haW5pbmcKLSAgICAgICAgICAgICYmIG9yaWdpbmFsU2l6ZSA9PSBv
dGhlci5vcmlnaW5hbFNpemU7CisgICAgICAgIHNjcmFtYmxlZE5leHQgPSBzY3JhbWJsZShuZXh0
LCBzZWNyZXQpOwogICAgIH0KICAgICAKLSAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgRnJlZUxp
c3QmIG90aGVyKSBjb25zdAorICAgIEZyZWVDZWxsKiBuZXh0KHVpbnRwdHJfdCBzZWNyZXQpIGNv
bnN0CiAgICAgewotICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgIHJl
dHVybiBkZXNjcmFtYmxlKHNjcmFtYmxlZE5leHQsIHNlY3JldCk7CiAgICAgfQogICAgIAotICAg
IGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuICp0
aGlzICE9IEZyZWVMaXN0KCk7Ci0gICAgfQotCi0gICAgYm9vbCBjb250YWlucyhjb25zdCB2b2lk
KiB0YXJnZXQpIGNvbnN0OworICAgIHVpbnRwdHJfdCBzY3JhbWJsZWROZXh0OworfTsKIAotICAg
IGJvb2wgYWxsb2NhdGlvbldpbGxGYWlsKCkgY29uc3QgeyByZXR1cm4gIWhlYWQgJiYgIXJlbWFp
bmluZzsgfQorY2xhc3MgRnJlZUxpc3QgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEZyZWVM
aXN0KTsKKyAgICAKK3B1YmxpYzoKKyAgICBGcmVlTGlzdCh1bnNpZ25lZCBjZWxsU2l6ZSk7Cisg
ICAgfkZyZWVMaXN0KCk7CisgICAgCisgICAgdm9pZCBjbGVhcigpOworICAgIAorICAgIHZvaWQg
aW5pdGlhbGl6ZUxpc3QoRnJlZUNlbGwqIGhlYWQsIHVpbnRwdHJfdCBzZWNyZXQsIHVuc2lnbmVk
IGJ5dGVzKTsKKyAgICB2b2lkIGluaXRpYWxpemVCdW1wKGNoYXIqIHBheWxvYWRFbmQsIHVuc2ln
bmVkIHJlbWFpbmluZyk7CisgICAgCisgICAgYm9vbCBhbGxvY2F0aW9uV2lsbEZhaWwoKSBjb25z
dCB7IHJldHVybiAhaGVhZCgpICYmICFtX3JlbWFpbmluZzsgfQogICAgIGJvb2wgYWxsb2NhdGlv
bldpbGxTdWNjZWVkKCkgY29uc3QgeyByZXR1cm4gIWFsbG9jYXRpb25XaWxsRmFpbCgpOyB9CiAg
ICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICBIZWFwQ2VsbCogYWxsb2NhdGUo
Y29uc3QgRnVuYyYgc2xvd1BhdGgpOworICAgIAorICAgIGJvb2wgY29udGFpbnMoSGVhcENlbGwq
KSBjb25zdDsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIHZvaWQgZm9y
RWFjaChjb25zdCBGdW5jJikgY29uc3Q7CisgICAgCisgICAgdW5zaWduZWQgb3JpZ2luYWxTaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW5hbFNpemU7IH0KKworICAgIHN0YXRpYyBwdHJkaWZm
X3Qgb2Zmc2V0T2ZTY3JhbWJsZWRIZWFkKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZyZWVM
aXN0LCBtX3NjcmFtYmxlZEhlYWQpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNl
Y3JldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihGcmVlTGlzdCwgbV9zZWNyZXQpOyB9Cisg
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlBheWxvYWRFbmQoKSB7IHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoRnJlZUxpc3QsIG1fcGF5bG9hZEVuZCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90
IG9mZnNldE9mUmVtYWluaW5nKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZyZWVMaXN0LCBt
X3JlbWFpbmluZyk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mT3JpZ2luYWxTaXpl
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZyZWVMaXN0LCBtX29yaWdpbmFsU2l6ZSk7IH0K
KyAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6
CisgICAgRnJlZUNlbGwqIGhlYWQoKSBjb25zdCB7IHJldHVybiBGcmVlQ2VsbDo6ZGVzY3JhbWJs
ZShtX3NjcmFtYmxlZEhlYWQsIG1fc2VjcmV0KTsgfQorICAgIAorICAgIHVpbnRwdHJfdCBtX3Nj
cmFtYmxlZEhlYWQgeyAwIH07CisgICAgdWludHB0cl90IG1fc2VjcmV0IHsgMCB9OworICAgIGNo
YXIqIG1fcGF5bG9hZEVuZCB7IG51bGxwdHIgfTsKKyAgICB1bnNpZ25lZCBtX3JlbWFpbmluZyB7
IDAgfTsKKyAgICB1bnNpZ25lZCBtX29yaWdpbmFsU2l6ZSB7IDAgfTsKKyAgICB1bnNpZ25lZCBt
X2NlbGxTaXplIHsgMCB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9GcmVlTGlzdElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9GcmVlTGlzdElubGluZXMuaAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9GcmVlTGlzdElubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRnJlZUxpc3QuaCIKKyNpbmNs
dWRlICJNYXJrZWRCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8dHlwZW5h
bWUgRnVuYz4KK0hlYXBDZWxsKiBGcmVlTGlzdDo6YWxsb2NhdGUoY29uc3QgRnVuYyYgc2xvd1Bh
dGgpCit7CisgICAgdW5zaWduZWQgcmVtYWluaW5nID0gbV9yZW1haW5pbmc7CisgICAgaWYgKHJl
bWFpbmluZykgeworICAgICAgICB1bnNpZ25lZCBjZWxsU2l6ZSA9IG1fY2VsbFNpemU7CisgICAg
ICAgIHJlbWFpbmluZyAtPSBjZWxsU2l6ZTsKKyAgICAgICAgbV9yZW1haW5pbmcgPSByZW1haW5p
bmc7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPihtX3BheWxvYWRFbmQg
LSByZW1haW5pbmcgLSBjZWxsU2l6ZSk7CisgICAgfQorICAgIAorICAgIEZyZWVDZWxsKiByZXN1
bHQgPSBoZWFkKCk7CisgICAgaWYgKFVOTElLRUxZKCFyZXN1bHQpKQorICAgICAgICByZXR1cm4g
c2xvd1BhdGgoKTsKKyAgICAKKyAgICBtX3NjcmFtYmxlZEhlYWQgPSByZXN1bHQtPnNjcmFtYmxl
ZE5leHQ7CisgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KHJlc3VsdCk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Cit2b2lkIEZyZWVMaXN0Ojpmb3JFYWNoKGNvbnN0IEZ1
bmMmIGZ1bmMpIGNvbnN0Cit7CisgICAgaWYgKG1fcmVtYWluaW5nKSB7CisgICAgICAgIGZvciAo
dW5zaWduZWQgcmVtYWluaW5nID0gbV9yZW1haW5pbmc7IHJlbWFpbmluZzsgcmVtYWluaW5nIC09
IG1fY2VsbFNpemUpCisgICAgICAgICAgICBmdW5jKGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KG1f
cGF5bG9hZEVuZCAtIHJlbWFpbmluZykpOworICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAoRnJl
ZUNlbGwqIGNlbGwgPSBoZWFkKCk7IGNlbGw7KSB7CisgICAgICAgICAgICAvLyBXZSBjYW4gdXNl
IHRoaXMgdG8gb3ZlcndyaXRlIGZyZWUgb2JqZWN0cyBiZWZvcmUgZGVzdHJveWluZyB0aGUgZnJl
ZSBsaXN0LiBTbywgd2UgbmVlZAorICAgICAgICAgICAgLy8gdG8gZ2V0IG5leHQgYmVmb3JlIHBy
b2NlZWRpbmcgZnVydGhlci4KKyAgICAgICAgICAgIEZyZWVDZWxsKiBuZXh0ID0gY2VsbC0+bmV4
dChtX3NlY3JldCk7CisgICAgICAgICAgICBmdW5jKGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KGNl
bGwpKTsKKyAgICAgICAgICAgIGNlbGwgPSBuZXh0OworICAgICAgICB9CisgICAgfQorfQorCit9
IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSW5j
cmVtZW50YWxTd2VlcGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuY3BwCShyZXZpc2lvbiAyMTc2NDYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04Nyw3ICs4Nyw3IEBAIGJvb2wgSW5jcmVtZW50YWxTd2VlcGVyOjpzd2VlcE5leHRCbG9j
aygKICAgICAKICAgICBpZiAoYmxvY2spIHsKICAgICAgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZl
ckdDKG1fdm0tPmhlYXApOwotICAgICAgICBibG9jay0+c3dlZXAoKTsKKyAgICAgICAgYmxvY2st
PnN3ZWVwKG51bGxwdHIpOwogICAgICAgICBtX3ZtLT5oZWFwLm9iamVjdFNwYWNlKCkuZnJlZU9y
U2hyaW5rQmxvY2soYmxvY2spOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAJKHJldmlz
aW9uIDIxNzY0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDggQEAKIG5hbWVzcGFjZSBKU0Mgewog
CiBNYXJrZWRBbGxvY2F0b3I6Ok1hcmtlZEFsbG9jYXRvcihIZWFwKiBoZWFwLCBTdWJzcGFjZSog
c3Vic3BhY2UsIHNpemVfdCBjZWxsU2l6ZSkKLSAgICA6IG1fY3VycmVudEJsb2NrKDApCisgICAg
OiBtX2ZyZWVMaXN0KGNlbGxTaXplKQorICAgICwgbV9jdXJyZW50QmxvY2soMCkKICAgICAsIG1f
bGFzdEFjdGl2ZUJsb2NrKDApCiAgICAgLCBtX2NlbGxTaXplKHN0YXRpY19jYXN0PHVuc2lnbmVk
PihjZWxsU2l6ZSkpCiAgICAgLCBtX2F0dHJpYnV0ZXMoc3Vic3BhY2UtPmF0dHJpYnV0ZXMoKSkK
QEAgLTg4LDcgKzg5LDcgQEAgdm9pZCBNYXJrZWRBbGxvY2F0b3I6OmRpZENvbnN1bWVGcmVlTGlz
dAogICAgIGlmIChtX2N1cnJlbnRCbG9jaykKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmRpZENv
bnN1bWVGcmVlTGlzdCgpOwogICAgIAotICAgIHNldEZyZWVMaXN0KEZyZWVMaXN0KCkpOworICAg
IG1fZnJlZUxpc3QuY2xlYXIoKTsKICAgICBtX2N1cnJlbnRCbG9jayA9IG51bGxwdHI7CiB9CiAK
QEAgLTk3LDcgKzk4LDcgQEAgdm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZVdpdGhv
dQogICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKICAgICAK
ICAgICBBU1NFUlQoIW1fY3VycmVudEJsb2NrKTsKLSAgICBBU1NFUlQoIW1fZnJlZUxpc3QpOwor
ICAgIEFTU0VSVChtX2ZyZWVMaXN0LmFsbG9jYXRpb25XaWxsRmFpbCgpKTsKICAgICAKICAgICBm
b3IgKDs7KSB7CiAgICAgICAgIG1fYWxsb2NhdGlvbkN1cnNvciA9IChtX2NhbkFsbG9jYXRlQnV0
Tm90RW1wdHkgfCBtX2VtcHR5KS5maW5kQml0KG1fYWxsb2NhdGlvbkN1cnNvciwgdHJ1ZSk7CkBA
IC0xMTMsNyArMTE0LDcgQEAgdm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZVdpdGhv
dQogICAgIGlmIChPcHRpb25zOjpzdGVhbEVtcHR5QmxvY2tzRnJvbU90aGVyQWxsb2NhdG9ycygp
CiAgICAgICAgICYmIHNob3VsZFN0ZWFsRW1wdHlCbG9ja3NGcm9tT3RoZXJBbGxvY2F0b3JzKCkp
IHsKICAgICAgICAgaWYgKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrID0gbWFya2VkU3BhY2Uo
KS5maW5kRW1wdHlCbG9ja1RvU3RlYWwoKSkgewotICAgICAgICAgICAgYmxvY2stPnN3ZWVwKCk7
CisgICAgICAgICAgICBibG9jay0+c3dlZXAobnVsbHB0cik7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIC8vIEl0J3MgZ29vZCB0aGF0IHRoaXMgY2xlYXJzIGNhbkFsbG9jYXRlQnV0Tm90RW1w
dHkgYXMgd2VsbCBhcyBhbGwgb3RoZXIgYml0cywKICAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhl
cmUgaXMgYSByZW1vdGUgY2hhbmNlIHRoYXQgYSBibG9jayBtYXkgaGF2ZSBib3RoIGNhbkFsbG9j
YXRlQnV0Tm90RW1wdHkKQEAgLTEzOSwxMSArMTQwLDExIEBAIHZvaWQqIE1hcmtlZEFsbG9jYXRv
cjo6dHJ5QWxsb2NhdGVJbihNYXIKICAgICBBU1NFUlQoYmxvY2spOwogICAgIEFTU0VSVCghYmxv
Y2stPmlzRnJlZUxpc3RlZCgpKTsKICAgICAKLSAgICBGcmVlTGlzdCBmcmVlTGlzdCA9IGJsb2Nr
LT5zd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcFRvRnJlZUxpc3QpOworICAgIGJsb2Nr
LT5zd2VlcCgmbV9mcmVlTGlzdCk7CiAgICAgCiAgICAgLy8gSXQncyBwb3NzaWJsZSB0byBzdHVt
YmxlIG9uIGEgY29tcGxldGVseSBmdWxsIGJsb2NrLiBNYXJraW5nIHRyaWVzIHRvIHJldGlyZSB0
aGVzZSwgYnV0CiAgICAgLy8gdGhhdCBhbGdvcml0aG0gaXMgcmFjeSBhbmQgbWF5IGZvcmdldCB0
byBkbyBpdCBzb21ldGltZXMuCi0gICAgaWYgKGZyZWVMaXN0LmFsbG9jYXRpb25XaWxsRmFpbCgp
KSB7CisgICAgaWYgKG1fZnJlZUxpc3QuYWxsb2NhdGlvbldpbGxGYWlsKCkpIHsKICAgICAgICAg
QVNTRVJUKGJsb2NrLT5pc0ZyZWVMaXN0ZWQoKSk7CiAgICAgICAgIGJsb2NrLT51bnN3ZWVwV2l0
aE5vTmV3bHlBbGxvY2F0ZWQoKTsKICAgICAgICAgQVNTRVJUKCFibG9jay0+aXNGcmVlTGlzdGVk
KCkpOwpAQCAtMTUzLDE5ICsxNTQsOSBAQCB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9j
YXRlSW4oTWFyCiAgICAgfQogICAgIAogICAgIG1fY3VycmVudEJsb2NrID0gYmxvY2s7Ci0gICAg
c2V0RnJlZUxpc3QoZnJlZUxpc3QpOwogICAgIAotICAgIHZvaWQqIHJlc3VsdDsKLSAgICBpZiAo
bV9mcmVlTGlzdC5yZW1haW5pbmcpIHsKLSAgICAgICAgdW5zaWduZWQgY2VsbFNpemUgPSBtX2Nl
bGxTaXplOwotICAgICAgICBtX2ZyZWVMaXN0LnJlbWFpbmluZyAtPSBjZWxsU2l6ZTsKLSAgICAg
ICAgcmVzdWx0ID0gbV9mcmVlTGlzdC5wYXlsb2FkRW5kIC0gbV9mcmVlTGlzdC5yZW1haW5pbmcg
LSBjZWxsU2l6ZTsKLSAgICB9IGVsc2UgewotICAgICAgICBGcmVlQ2VsbCogaGVhZCA9IG1fZnJl
ZUxpc3QuaGVhZDsKLSAgICAgICAgbV9mcmVlTGlzdC5oZWFkID0gaGVhZC0+bmV4dDsKLSAgICAg
ICAgcmVzdWx0ID0gaGVhZDsKLSAgICB9Ci0gICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0KTsKKyAg
ICB2b2lkKiByZXN1bHQgPSBtX2ZyZWVMaXN0LmFsbG9jYXRlKAorICAgICAgICBbXSAoKSAtPiBI
ZWFwQ2VsbCogeyBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gbnVsbHB0cjsg
fSk7CiAgICAgc2V0SXNFZGVuKE5vTG9ja2luZ05lY2Vzc2FyeSwgbV9jdXJyZW50QmxvY2ssIHRy
dWUpOwogICAgIG1hcmtlZFNwYWNlKCkuZGlkQWxsb2NhdGVJbkJsb2NrKG1fY3VycmVudEJsb2Nr
KTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMjA4LDcgKzE5OSw3IEBAIHZvaWQqIE1hcmtlZEFs
bG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZUkKICAgICBkb1Rlc3RDb2xsZWN0aW9uc0lmTmVlZGVk
KGRlZmVycmFsQ29udGV4dCk7CiAKICAgICBBU1NFUlQoIW1hcmtlZFNwYWNlKCkuaXNJdGVyYXRp
bmcoKSk7Ci0gICAgbV9oZWFwLT5kaWRBbGxvY2F0ZShtX2ZyZWVMaXN0Lm9yaWdpbmFsU2l6ZSk7
CisgICAgbV9oZWFwLT5kaWRBbGxvY2F0ZShtX2ZyZWVMaXN0Lm9yaWdpbmFsU2l6ZSgpKTsKICAg
ICAKICAgICBkaWRDb25zdW1lRnJlZUxpc3QoKTsKICAgICAKQEAgLTMzNCwyMSArMzI1LDIxIEBA
IHZvaWQgTWFya2VkQWxsb2NhdG9yOjpzdG9wQWxsb2NhdGluZygpCiAgICAgICAgIGRhdGFMb2co
UmF3UG9pbnRlcih0aGlzKSwgIjogTWFya2VkQWxsb2NhdG9yOjpzdG9wQWxsb2NhdGluZyFcbiIp
OwogICAgIEFTU0VSVCghbV9sYXN0QWN0aXZlQmxvY2spOwogICAgIGlmICghbV9jdXJyZW50Qmxv
Y2spIHsKLSAgICAgICAgQVNTRVJUKCFtX2ZyZWVMaXN0KTsKKyAgICAgICAgQVNTRVJUKG1fZnJl
ZUxpc3QuYWxsb2NhdGlvbldpbGxGYWlsKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IAogICAgIG1fY3VycmVudEJsb2NrLT5zdG9wQWxsb2NhdGluZyhtX2ZyZWVMaXN0KTsKICAgICBt
X2xhc3RBY3RpdmVCbG9jayA9IG1fY3VycmVudEJsb2NrOwogICAgIG1fY3VycmVudEJsb2NrID0g
MDsKLSAgICBtX2ZyZWVMaXN0ID0gRnJlZUxpc3QoKTsKKyAgICBtX2ZyZWVMaXN0LmNsZWFyKCk7
CiB9CiAKIHZvaWQgTWFya2VkQWxsb2NhdG9yOjpwcmVwYXJlRm9yQWxsb2NhdGlvbigpCiB7CiAg
ICAgbV9sYXN0QWN0aXZlQmxvY2sgPSBudWxscHRyOwogICAgIG1fY3VycmVudEJsb2NrID0gbnVs
bHB0cjsKLSAgICBzZXRGcmVlTGlzdChGcmVlTGlzdCgpKTsKKyAgICBtX2ZyZWVMaXN0LmNsZWFy
KCk7CiAKICAgICBtX2FsbG9jYXRpb25DdXJzb3IgPSAwOwogICAgIG1fZW1wdHlDdXJzb3IgPSAw
OwpAQCAtMzcxLDE3ICszNjIsMTIgQEAgdm9pZCBNYXJrZWRBbGxvY2F0b3I6Omxhc3RDaGFuY2VU
b0ZpbmFsaQogICAgICAgICB9KTsKIH0KIAotdm9pZCBNYXJrZWRBbGxvY2F0b3I6OnNldEZyZWVM
aXN0KGNvbnN0IEZyZWVMaXN0JiBmcmVlTGlzdCkKLXsKLSAgICBtX2ZyZWVMaXN0ID0gZnJlZUxp
c3Q7Ci19Ci0KIHZvaWQgTWFya2VkQWxsb2NhdG9yOjpyZXN1bWVBbGxvY2F0aW5nKCkKIHsKICAg
ICBpZiAoIW1fbGFzdEFjdGl2ZUJsb2NrKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2ZyZWVM
aXN0ID0gbV9sYXN0QWN0aXZlQmxvY2stPnJlc3VtZUFsbG9jYXRpbmcoKTsKKyAgICBtX2xhc3RB
Y3RpdmVCbG9jay0+cmVzdW1lQWxsb2NhdGluZyhtX2ZyZWVMaXN0KTsKICAgICBtX2N1cnJlbnRC
bG9jayA9IG1fbGFzdEFjdGl2ZUJsb2NrOwogICAgIG1fbGFzdEFjdGl2ZUJsb2NrID0gbnVsbHB0
cjsKIH0KQEAgLTQ0NSw3ICs0MzEsNyBAQCB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6c3dlZXAoKQog
ICAgIG1fdW5zd2VwdC5mb3JFYWNoU2V0Qml0KAogICAgICAgICBbJl0gKHNpemVfdCBpbmRleCkg
ewogICAgICAgICAgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2sgPSBtX2Jsb2Nrc1tpbmRl
eF07Ci0gICAgICAgICAgICBibG9jay0+c3dlZXAoKTsKKyAgICAgICAgICAgIGJsb2NrLT5zd2Vl
cChudWxscHRyKTsKICAgICAgICAgfSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCShyZXZpc2lvbiAyMTc2NDYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
MTU2LDcgKzE1Niw3IEBAIHB1YmxpYzoKICAgICB2b2lkKiB0cnlBbGxvY2F0ZShHQ0RlZmVycmFs
Q29udGV4dCogPSBudWxscHRyKTsKICAgICBIZWFwKiBoZWFwKCkgeyByZXR1cm4gbV9oZWFwOyB9
CiAKLSAgICBib29sIGlzRnJlZUxpc3RlZENlbGwoY29uc3Qgdm9pZCogdGFyZ2V0KSBjb25zdCB7
IHJldHVybiBtX2ZyZWVMaXN0LmNvbnRhaW5zKHRhcmdldCk7IH0KKyAgICBib29sIGlzRnJlZUxp
c3RlZENlbGwoY29uc3Qgdm9pZCogdGFyZ2V0KSBjb25zdDsKIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaEJsb2NrKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hOb3RFbXB0eUJsb2NrKGNvbnN0IEZ1
bmN0b3ImKTsKQEAgLTIwOSw2ICsyMDksOCBAQCBwdWJsaWM6CiAgICAgU3Vic3BhY2UqIHN1YnNw
YWNlKCkgY29uc3QgeyByZXR1cm4gbV9zdWJzcGFjZTsgfQogICAgIE1hcmtlZFNwYWNlJiBtYXJr
ZWRTcGFjZSgpIGNvbnN0OwogICAgIAorICAgIGNvbnN0IEZyZWVMaXN0JiBmcmVlTGlzdCgpIGNv
bnN0IHsgcmV0dXJuIG1fZnJlZUxpc3Q7IH0KKyAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mKSBjb25zdDsKICAgICB2b2lkIGR1bXBCaXRzKFByaW50U3RyZWFtJiA9IFdURjo6ZGF0YUZp
bGUoKSk7CiAgICAgCkBAIC0yMjcsOCArMjI5LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkKiBhbGxv
Y2F0ZUluKE1hcmtlZEJsb2NrOjpIYW5kbGUqKTsKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgZG9U
ZXN0Q29sbGVjdGlvbnNJZk5lZWRlZChHQ0RlZmVycmFsQ29udGV4dCopOwogICAgIAotICAgIHZv
aWQgc2V0RnJlZUxpc3QoY29uc3QgRnJlZUxpc3QmKTsKLSAgICAKICAgICBGcmVlTGlzdCBtX2Zy
ZWVMaXN0OwogICAgIAogICAgIFZlY3RvcjxNYXJrZWRCbG9jazo6SGFuZGxlKj4gbV9ibG9ja3M7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3JJbmxpbmVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2Nh
dG9ySW5saW5lcy5oCShyZXZpc2lvbiAyMTc2NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDQ0ICsy
NSwzMCBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkZyZWVMaXN0SW5saW5lcy5oIgog
I2luY2x1ZGUgIk1hcmtlZEFsbG9jYXRvci5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAoraW5saW5l
IGJvb2wgTWFya2VkQWxsb2NhdG9yOjppc0ZyZWVMaXN0ZWRDZWxsKGNvbnN0IHZvaWQqIHRhcmdl
dCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9mcmVlTGlzdC5jb250YWlucyhiaXR3aXNlX2Nhc3Q8
SGVhcENlbGwqPih0YXJnZXQpKTsKK30KKwogQUxXQVlTX0lOTElORSB2b2lkKiBNYXJrZWRBbGxv
Y2F0b3I6OnRyeUFsbG9jYXRlKEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQpCiB7
Ci0gICAgdW5zaWduZWQgcmVtYWluaW5nID0gbV9mcmVlTGlzdC5yZW1haW5pbmc7Ci0gICAgaWYg
KHJlbWFpbmluZykgewotICAgICAgICB1bnNpZ25lZCBjZWxsU2l6ZSA9IG1fY2VsbFNpemU7Ci0g
ICAgICAgIHJlbWFpbmluZyAtPSBjZWxsU2l6ZTsKLSAgICAgICAgbV9mcmVlTGlzdC5yZW1haW5p
bmcgPSByZW1haW5pbmc7Ci0gICAgICAgIHJldHVybiBtX2ZyZWVMaXN0LnBheWxvYWRFbmQgLSBy
ZW1haW5pbmcgLSBjZWxsU2l6ZTsKLSAgICB9Ci0gICAgCi0gICAgRnJlZUNlbGwqIGhlYWQgPSBt
X2ZyZWVMaXN0LmhlYWQ7Ci0gICAgaWYgKFVOTElLRUxZKCFoZWFkKSkKLSAgICAgICAgcmV0dXJu
IHRyeUFsbG9jYXRlU2xvd0Nhc2UoZGVmZXJyYWxDb250ZXh0KTsKLSAgICAKLSAgICBtX2ZyZWVM
aXN0LmhlYWQgPSBoZWFkLT5uZXh0OwotICAgIHJldHVybiBoZWFkOworICAgIHJldHVybiBtX2Zy
ZWVMaXN0LmFsbG9jYXRlKAorICAgICAgICBbJl0gKCkgLT4gSGVhcENlbGwqIHsKKyAgICAgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxIZWFwQ2VsbCo+KHRyeUFsbG9jYXRlU2xvd0Nhc2UoZGVm
ZXJyYWxDb250ZXh0KSk7CisgICAgICAgIH0pOwogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQqIE1h
cmtlZEFsbG9jYXRvcjo6YWxsb2NhdGUoR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4
dCkKIHsKLSAgICB1bnNpZ25lZCByZW1haW5pbmcgPSBtX2ZyZWVMaXN0LnJlbWFpbmluZzsKLSAg
ICBpZiAocmVtYWluaW5nKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNlbGxTaXplID0gbV9jZWxsU2l6
ZTsKLSAgICAgICAgcmVtYWluaW5nIC09IGNlbGxTaXplOwotICAgICAgICBtX2ZyZWVMaXN0LnJl
bWFpbmluZyA9IHJlbWFpbmluZzsKLSAgICAgICAgcmV0dXJuIG1fZnJlZUxpc3QucGF5bG9hZEVu
ZCAtIHJlbWFpbmluZyAtIGNlbGxTaXplOwotICAgIH0KLSAgICAKLSAgICBGcmVlQ2VsbCogaGVh
ZCA9IG1fZnJlZUxpc3QuaGVhZDsKLSAgICBpZiAoVU5MSUtFTFkoIWhlYWQpKQotICAgICAgICBy
ZXR1cm4gYWxsb2NhdGVTbG93Q2FzZShkZWZlcnJhbENvbnRleHQpOwotICAgIAotICAgIG1fZnJl
ZUxpc3QuaGVhZCA9IGhlYWQtPm5leHQ7Ci0gICAgcmV0dXJuIGhlYWQ7CisgICAgcmV0dXJuIG1f
ZnJlZUxpc3QuYWxsb2NhdGUoCisgICAgICAgIFsmXSAoKSAtPiBIZWFwQ2VsbCogeworICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhlYXBDZWxsKj4oYWxsb2NhdGVTbG93Q2FzZShkZWZl
cnJhbENvbnRleHQpKTsKKyAgICAgICAgfSk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5j
dG9yPiBpbmxpbmUgdm9pZCBNYXJrZWRBbGxvY2F0b3I6OmZvckVhY2hCbG9jayhjb25zdCBGdW5j
dG9yJiBmdW5jdG9yKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxv
Y2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJs
b2NrLmNwcAkocmV2aXNpb24gMjE3NjQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2VkQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw5ICsyNiwxMSBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk1hcmtlZEJsb2NrLmgiCiAKKyNpbmNsdWRlICJGcmVl
TGlzdElubGluZXMuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIKICNpbmNsdWRlICJKU0Rlc3RydWN0
aWJsZU9iamVjdC5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJNYXJrZWRB
bGxvY2F0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiU3VwZXJTYW1wbGVyLmgiCiAjaW5jbHVkZSAiU3dlZXBpbmdTY29wZS5oIgpAQCAtMTM0
LDggKzEzNiw3IEBAIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3RvcEFsbG9jYXRpbmcKICAg
ICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOwogICAgICAgICB9KTsK
IAotICAgIGZvckVhY2hGcmVlQ2VsbCgKLSAgICAgICAgZnJlZUxpc3QsCisgICAgZnJlZUxpc3Qu
Zm9yRWFjaCgKICAgICAgICAgWyZdIChIZWFwQ2VsbCogY2VsbCkgewogICAgICAgICAgICAgaWYg
KGZhbHNlKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIkZyZWUgY2VsbDogIiwgUmF3UG9pbnRl
cihjZWxsKSwgIlxuIik7CkBAIC0xNTYsMTAgKzE1NywxMCBAQCB2b2lkIE1hcmtlZEJsb2NrOjpI
YW5kbGU6Omxhc3RDaGFuY2VUb0ZpCiAgICAgbV93ZWFrU2V0Lmxhc3RDaGFuY2VUb0ZpbmFsaXpl
KCk7CiAgICAgbV9uZXdseUFsbG9jYXRlZC5jbGVhckFsbCgpOwogICAgIG1fbmV3bHlBbGxvY2F0
ZWRWZXJzaW9uID0gaGVhcCgpLT5vYmplY3RTcGFjZSgpLm5ld2x5QWxsb2NhdGVkVmVyc2lvbigp
OwotICAgIHN3ZWVwKCk7CisgICAgc3dlZXAobnVsbHB0cik7CiB9CiAKLUZyZWVMaXN0IE1hcmtl
ZEJsb2NrOjpIYW5kbGU6OnJlc3VtZUFsbG9jYXRpbmcoKQordm9pZCBNYXJrZWRCbG9jazo6SGFu
ZGxlOjpyZXN1bWVBbGxvY2F0aW5nKEZyZWVMaXN0JiBmcmVlTGlzdCkKIHsKICAgICB7CiAgICAg
ICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soYmxvY2soKS5tX2xvY2spOwpAQCAtMTczLDQwICsx
NzQsMjUgQEAgRnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6cmVzdW1lQWxsbwogICAgICAg
ICAgICAgaWYgKGZhbHNlKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIlRoZXJlIGFpbid0IG5v
IG5ld2x5IGFsbG9jYXRlZC5cbiIpOwogICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB3ZSBoYWQg
YWxyZWFkeSBleGhhdXN0ZWQgdGhlIGJsb2NrIHdoZW4gd2Ugc3RvcHBlZCBhbGxvY2F0aW9uLgot
ICAgICAgICAgICAgcmV0dXJuIEZyZWVMaXN0KCk7CisgICAgICAgICAgICBmcmVlTGlzdC5jbGVh
cigpOworICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gUmUt
Y3JlYXRlIG91ciBmcmVlIGxpc3QgZnJvbSBiZWZvcmUgc3RvcHBpbmcgYWxsb2NhdGlvbi4gTm90
ZSB0aGF0IHRoaXMgbWF5IHJldHVybiBhbiBlbXB0eQogICAgIC8vIGZyZWVsaXN0LCBpbiB3aGlj
aCBjYXNlIHRoZSBibG9jayB3aWxsIHN0aWxsIGJlIE1hcmtlZCEKLSAgICByZXR1cm4gc3dlZXAo
U3dlZXBUb0ZyZWVMaXN0KTsKKyAgICBzd2VlcCgmZnJlZUxpc3QpOwogfQogCiB2b2lkIE1hcmtl
ZEJsb2NrOjpIYW5kbGU6OnphcChjb25zdCBGcmVlTGlzdCYgZnJlZUxpc3QpCiB7Ci0gICAgZm9y
RWFjaEZyZWVDZWxsKAotICAgICAgICBmcmVlTGlzdCwKKyAgICBmcmVlTGlzdC5mb3JFYWNoKAog
ICAgICAgICBbJl0gKEhlYXBDZWxsKiBjZWxsKSB7CiAgICAgICAgICAgICBpZiAobV9hdHRyaWJ1
dGVzLmRlc3RydWN0aW9uID09IE5lZWRzRGVzdHJ1Y3Rpb24pCiAgICAgICAgICAgICAgICAgY2Vs
bC0+emFwKCk7CiAgICAgICAgIH0pOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotdm9p
ZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpmb3JFYWNoRnJlZUNlbGwoY29uc3QgRnJlZUxpc3QmIGZy
ZWVMaXN0LCBjb25zdCBGdW5jJiBmdW5jKQotewotICAgIGlmIChmcmVlTGlzdC5yZW1haW5pbmcp
IHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCByZW1haW5pbmcgPSBmcmVlTGlzdC5yZW1haW5pbmc7
IHJlbWFpbmluZzsgcmVtYWluaW5nIC09IGNlbGxTaXplKCkpCi0gICAgICAgICAgICBmdW5jKGJp
dHdpc2VfY2FzdDxIZWFwQ2VsbCo+KGZyZWVMaXN0LnBheWxvYWRFbmQgLSByZW1haW5pbmcpKTsK
LSAgICB9IGVsc2UgewotICAgICAgICBmb3IgKEZyZWVDZWxsKiBjdXJyZW50ID0gZnJlZUxpc3Qu
aGVhZDsgY3VycmVudDspIHsKLSAgICAgICAgICAgIEZyZWVDZWxsKiBuZXh0ID0gY3VycmVudC0+
bmV4dDsKLSAgICAgICAgICAgIGZ1bmMoYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4oY3VycmVudCkp
OwotICAgICAgICAgICAgY3VycmVudCA9IG5leHQ7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KIHZv
aWQgTWFya2VkQmxvY2s6OmFib3V0VG9NYXJrU2xvdyhIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lv
bikKIHsKICAgICBBU1NFUlQodm0oKS0+aGVhcC5vYmplY3RTcGFjZSgpLmlzTWFya2luZygpKTsK
QEAgLTQwNywyMCArMzkzLDIyIEBAIFN1YnNwYWNlKiBNYXJrZWRCbG9jazo6SGFuZGxlOjpzdWJz
cGFjZSgKICAgICByZXR1cm4gYWxsb2NhdG9yKCktPnN1YnNwYWNlKCk7CiB9CiAKLUZyZWVMaXN0
IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN3ZWVwKFN3ZWVwTW9kZSBzd2VlcE1vZGUpCit2b2lkIE1h
cmtlZEJsb2NrOjpIYW5kbGU6OnN3ZWVwKEZyZWVMaXN0KiBmcmVlTGlzdCkKIHsKICAgICBTd2Vl
cGluZ1Njb3BlIHN3ZWVwaW5nU2NvcGUoKmhlYXAoKSk7CiAgICAgCisgICAgU3dlZXBNb2RlIHN3
ZWVwTW9kZSA9IGZyZWVMaXN0ID8gU3dlZXBUb0ZyZWVMaXN0IDogU3dlZXBPbmx5OworICAgIAog
ICAgIG1fYWxsb2NhdG9yLT5zZXRJc1Vuc3dlcHQoTm9Mb2NraW5nTmVjZXNzYXJ5LCB0aGlzLCBm
YWxzZSk7CiAgICAgCiAgICAgbV93ZWFrU2V0LnN3ZWVwKCk7CiAKICAgICBpZiAoc3dlZXBNb2Rl
ID09IFN3ZWVwT25seSAmJiBtX2F0dHJpYnV0ZXMuZGVzdHJ1Y3Rpb24gPT0gRG9lc05vdE5lZWRE
ZXN0cnVjdGlvbikKLSAgICAgICAgcmV0dXJuIEZyZWVMaXN0KCk7CisgICAgICAgIHJldHVybjsK
IAogICAgIGlmIChVTkxJS0VMWShtX2lzRnJlZUxpc3RlZCkpIHsKICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoc3dlZXBNb2RlID09IFN3ZWVwVG9GcmVlTGlzdCk7Ci0gICAgICAgIHJldHVybiBGcmVl
TGlzdCgpOworICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAogICAgIEFTU0VSVCghbV9hbGxv
Y2F0b3ItPmlzQWxsb2NhdGVkKE5vTG9ja2luZ05lY2Vzc2FyeSwgdGhpcykpOwpAQCAtNDI4LDgg
KzQxNiwxMCBAQCBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzd2VlcChTd2VlCiAgICAg
aWYgKHNwYWNlKCktPmlzTWFya2luZygpKQogICAgICAgICBibG9jaygpLm1fbG9jay5sb2NrKCk7
CiAgICAgCi0gICAgaWYgKG1fYXR0cmlidXRlcy5kZXN0cnVjdGlvbiA9PSBOZWVkc0Rlc3RydWN0
aW9uKQotICAgICAgICByZXR1cm4gc3Vic3BhY2UoKS0+ZmluaXNoU3dlZXAoKnRoaXMsIHN3ZWVw
TW9kZSk7CisgICAgaWYgKG1fYXR0cmlidXRlcy5kZXN0cnVjdGlvbiA9PSBOZWVkc0Rlc3RydWN0
aW9uKSB7CisgICAgICAgIHN1YnNwYWNlKCktPmZpbmlzaFN3ZWVwKCp0aGlzLCBmcmVlTGlzdCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgCiAgICAgLy8gSGFuZGxlIHRoZSBuby1kZXN0
cnVjdG9yIHNwZWNpYWxpemF0aW9ucyBoZXJlLCBzaW5jZSB3ZSBoYXZlIHRoZSBtb3N0IG9mIHRo
b3NlLiBUaGlzCiAgICAgLy8gZW5zdXJlcyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IHJlLXNwZWNpYWxp
emVkIGZvciBldmVyeSBkZXN0cnVjdG9yIHNwYWNlLgpAQCAtNDM5LDcgKzQyOSw2IEBAIEZyZWVM
aXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN3ZWVwKFN3ZWUKICAgICBOZXdseUFsbG9jYXRlZE1v
ZGUgbmV3bHlBbGxvY2F0ZWRNb2RlID0gdGhpcy0+bmV3bHlBbGxvY2F0ZWRNb2RlKCk7CiAgICAg
TWFya3NNb2RlIG1hcmtzTW9kZSA9IHRoaXMtPm1hcmtzTW9kZSgpOwogICAgIAotICAgIEZyZWVM
aXN0IHJlc3VsdDsKICAgICBhdXRvIHRyeVNwZWNpYWxpemVkID0gWyZdICgpIC0+IGJvb2wgewog
ICAgICAgICBpZiAoc3dlZXBNb2RlICE9IFN3ZWVwVG9GcmVlTGlzdCkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKQEAgLTQ1MiwyMCArNDQxLDIwIEBAIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpI
YW5kbGU6OnN3ZWVwKFN3ZWUKICAgICAgICAgY2FzZSBJc0VtcHR5OgogICAgICAgICAgICAgc3dp
dGNoIChtYXJrc01vZGUpIHsKICAgICAgICAgICAgIGNhc2UgTWFya3NOb3RTdGFsZToKLSAgICAg
ICAgICAgICAgICByZXN1bHQgPSBzcGVjaWFsaXplZFN3ZWVwPHRydWUsIElzRW1wdHksIFN3ZWVw
VG9GcmVlTGlzdCwgQmxvY2tIYXNOb0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUsIERvZXNOb3RI
YXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzTm90U3RhbGU+KElzRW1wdHksIFN3ZWVwVG9GcmVlTGlz
dCwgQmxvY2tIYXNOb0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUsIERvZXNOb3RIYXZlTmV3bHlB
bGxvY2F0ZWQsIE1hcmtzTm90U3RhbGUsIFtdIChWTSYsIEpTQ2VsbCopIHsgfSk7CisgICAgICAg
ICAgICAgICAgc3BlY2lhbGl6ZWRTd2VlcDx0cnVlLCBJc0VtcHR5LCBTd2VlcFRvRnJlZUxpc3Qs
IEJsb2NrSGFzTm9EZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxs
b2NhdGVkLCBNYXJrc05vdFN0YWxlPihmcmVlTGlzdCwgSXNFbXB0eSwgU3dlZXBUb0ZyZWVMaXN0
LCBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9lc05vdEhhdmVOZXdseUFs
bG9jYXRlZCwgTWFya3NOb3RTdGFsZSwgW10gKFZNJiwgSlNDZWxsKikgeyB9KTsKICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIGNhc2UgTWFya3NTdGFsZToKLSAgICAg
ICAgICAgICAgICByZXN1bHQgPSBzcGVjaWFsaXplZFN3ZWVwPHRydWUsIElzRW1wdHksIFN3ZWVw
VG9GcmVlTGlzdCwgQmxvY2tIYXNOb0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUsIERvZXNOb3RI
YXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzU3RhbGU+KElzRW1wdHksIFN3ZWVwVG9GcmVlTGlzdCwg
QmxvY2tIYXNOb0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUsIERvZXNOb3RIYXZlTmV3bHlBbGxv
Y2F0ZWQsIE1hcmtzU3RhbGUsIFtdIChWTSYsIEpTQ2VsbCopIHsgfSk7CisgICAgICAgICAgICAg
ICAgc3BlY2lhbGl6ZWRTd2VlcDx0cnVlLCBJc0VtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2Nr
SGFzTm9EZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVk
LCBNYXJrc1N0YWxlPihmcmVlTGlzdCwgSXNFbXB0eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hh
c05vRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCwg
TWFya3NTdGFsZSwgW10gKFZNJiwgSlNDZWxsKikgeyB9KTsKICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IE5vdEVtcHR5OgogICAgICAgICAgICAgc3dpdGNoIChtYXJrc01vZGUpIHsKICAgICAgICAgICAg
IGNhc2UgTWFya3NOb3RTdGFsZToKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBzcGVjaWFsaXpl
ZFN3ZWVwPHRydWUsIE5vdEVtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzTm9EZXN0cnVj
dG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBNYXJrc05vdFN0
YWxlPihJc0VtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzTm9EZXN0cnVjdG9ycywgRG9u
dFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBNYXJrc05vdFN0YWxlLCBbXSAo
Vk0mLCBKU0NlbGwqKSB7IH0pOworICAgICAgICAgICAgICAgIHNwZWNpYWxpemVkU3dlZXA8dHJ1
ZSwgTm90RW1wdHksIFN3ZWVwVG9GcmVlTGlzdCwgQmxvY2tIYXNOb0Rlc3RydWN0b3JzLCBEb250
U2NyaWJibGUsIERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzTm90U3RhbGU+KGZyZWVM
aXN0LCBJc0VtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzTm9EZXN0cnVjdG9ycywgRG9u
dFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBNYXJrc05vdFN0YWxlLCBbXSAo
Vk0mLCBKU0NlbGwqKSB7IH0pOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICAgICAgY2FzZSBNYXJrc1N0YWxlOgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNwZWNpYWxp
emVkU3dlZXA8dHJ1ZSwgTm90RW1wdHksIFN3ZWVwVG9GcmVlTGlzdCwgQmxvY2tIYXNOb0Rlc3Ry
dWN0b3JzLCBEb250U2NyaWJibGUsIERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzU3Rh
bGU+KElzRW1wdHksIFN3ZWVwVG9GcmVlTGlzdCwgQmxvY2tIYXNOb0Rlc3RydWN0b3JzLCBEb250
U2NyaWJibGUsIERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzU3RhbGUsIFtdIChWTSYs
IEpTQ2VsbCopIHsgfSk7CisgICAgICAgICAgICAgICAgc3BlY2lhbGl6ZWRTd2VlcDx0cnVlLCBO
b3RFbXB0eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMsIERvbnRTY3Jp
YmJsZSwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCwgTWFya3NTdGFsZT4oZnJlZUxpc3QsIElz
RW1wdHksIFN3ZWVwVG9GcmVlTGlzdCwgQmxvY2tIYXNOb0Rlc3RydWN0b3JzLCBEb250U2NyaWJi
bGUsIERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzU3RhbGUsIFtdIChWTSYsIEpTQ2Vs
bCopIHsgfSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBicmVhazsKQEAgLTQ3NSwxMCArNDY0LDE2IEBAIEZyZWVMaXN0IE1hcmtlZEJs
b2NrOjpIYW5kbGU6OnN3ZWVwKFN3ZWUKICAgICB9OwogICAgIAogICAgIGlmICh0cnlTcGVjaWFs
aXplZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm47CiAKICAgICAv
LyBUaGUgdGVtcGxhdGUgYXJndW1lbnRzIGRvbid0IG1hdHRlciBiZWNhdXNlIHRoZSBmaXJzdCBv
bmUgaXMgZmFsc2UuCi0gICAgcmV0dXJuIHNwZWNpYWxpemVkU3dlZXA8ZmFsc2UsIElzRW1wdHks
IFN3ZWVwT25seSwgQmxvY2tIYXNOb0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUsIEhhc05ld2x5
QWxsb2NhdGVkLCBNYXJrc1N0YWxlPihlbXB0eU1vZGUsIHN3ZWVwTW9kZSwgQmxvY2tIYXNOb0Rl
c3RydWN0b3JzLCBzY3JpYmJsZU1vZGUsIG5ld2x5QWxsb2NhdGVkTW9kZSwgbWFya3NNb2RlLCBb
XSAoVk0mLCBKU0NlbGwqKSB7IH0pOworICAgIHNwZWNpYWxpemVkU3dlZXA8ZmFsc2UsIElzRW1w
dHksIFN3ZWVwT25seSwgQmxvY2tIYXNOb0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUsIEhhc05l
d2x5QWxsb2NhdGVkLCBNYXJrc1N0YWxlPihmcmVlTGlzdCwgZW1wdHlNb2RlLCBzd2VlcE1vZGUs
IEJsb2NrSGFzTm9EZXN0cnVjdG9ycywgc2NyaWJibGVNb2RlLCBuZXdseUFsbG9jYXRlZE1vZGUs
IG1hcmtzTW9kZSwgW10gKFZNJiwgSlNDZWxsKikgeyB9KTsKK30KKworYm9vbCBNYXJrZWRCbG9j
azo6SGFuZGxlOjppc0ZyZWVMaXN0ZWRDZWxsKGNvbnN0IHZvaWQqIHRhcmdldCkgY29uc3QKK3sK
KyAgICBBU1NFUlQoaXNGcmVlTGlzdGVkKCkpOworICAgIHJldHVybiBtX2FsbG9jYXRvci0+aXNG
cmVlTGlzdGVkQ2VsbCh0YXJnZXQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkocmV2aXNpb24gMjE3NjQ2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkod29ya2luZyBjb3B5
KQpAQCAtMjMsNyArMjMsNiBAQAogCiAjaW5jbHVkZSAiQWxsb2NhdG9yQXR0cmlidXRlcy5oIgog
I2luY2x1ZGUgIkRlc3RydWN0aW9uTW9kZS5oIgotI2luY2x1ZGUgIkZyZWVMaXN0LmgiCiAjaW5j
bHVkZSAiSGVhcENlbGwuaCIKICNpbmNsdWRlICJJdGVyYXRpb25TdGF0dXMuaCIKICNpbmNsdWRl
ICJXZWFrU2V0LmgiCkBAIC0zNiw2ICszNSw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogICAgIAor
Y2xhc3MgRnJlZUxpc3Q7CiBjbGFzcyBIZWFwOwogY2xhc3MgSlNDZWxsOwogY2xhc3MgTWFya2Vk
QWxsb2NhdG9yOwpAQCAtMTE3LDIxICsxMTcsMjIgQEAgcHVibGljOgogICAgICAgICBWTSogdm0o
KSBjb25zdDsKICAgICAgICAgV2Vha1NldCYgd2Vha1NldCgpOwogICAgICAgICAgICAgCisgICAg
ICAgIGVudW0gU3dlZXBNb2RlIHsgU3dlZXBPbmx5LCBTd2VlcFRvRnJlZUxpc3QgfTsKKwogICAg
ICAgICAvLyBTd2VlcGluZyBlbnN1cmVzIHRoYXQgZGVzdHJ1Y3RvcnMgZ2V0IGNhbGxlZCBhbmQg
cmVtb3ZlcyB0aGUgYmxvY2sgZnJvbSB0aGUgdW5zd2VwdAogICAgICAgICAvLyBzZXQuIFN3ZWVw
aW5nIHRvIGZyZWUgbGlzdCBhbHNvIHJlbW92ZXMgdGhlIGJsb2NrIGZyb20gdGhlIGVtcHR5IHNl
dCwgaWYgaXQgd2FzIGluIHRoYXQKICAgICAgICAgLy8gc2V0LiBTd2VlcGluZyB3aXRoIFN3ZWVw
T25seSBtYXkgYWRkIHRoaXMgYmxvY2sgdG8gdGhlIGVtcHR5IHNldCwgaWYgdGhlIGJsb2NrIGlz
IGZvdW5kCi0gICAgICAgIC8vIHRvIGJlIGVtcHR5LgorICAgICAgICAvLyB0byBiZSBlbXB0eS4g
VGhlIGZyZWUtbGlzdCBiZWluZyBudWxsIGltcGxpZXMgU3dlZXBPbmx5LgogICAgICAgICAvLwog
ICAgICAgICAvLyBOb3RlIHRoYXQgeW91IG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGVtcHR5
IGJpdCByZWZsZWN0cyByZWFsaXR5LiBJZiBpdCdzIG5vdCBzZXQKICAgICAgICAgLy8gYW5kIHRo
ZSBibG9jayBpcyBmcmVzaGx5IGNyZWF0ZWQsIHRoZW4gd2UnbGwgbWFrZSB0aGUgbWlzdGFrZSBv
ZiBydW5uaW5nIGRlc3RydWN0b3JzIGluCiAgICAgICAgIC8vIHRoZSBibG9jay4gSWYgaXQncyBu
b3Qgc2V0IGFuZCB0aGUgYmxvY2sgaGFzIG5vdGhpbmcgbWFya2VkLCB0aGVuIHdlJ2xsIG1ha2Ug
dGhlCiAgICAgICAgIC8vIG1pc3Rha2Ugb2YgbWFraW5nIGEgcG9wIGZyZWVsaXN0IHJhdGhlciB0
aGFuIGEgYnVtcCBmcmVlbGlzdC4KLSAgICAgICAgZW51bSBTd2VlcE1vZGUgeyBTd2VlcE9ubHks
IFN3ZWVwVG9GcmVlTGlzdCB9OwotICAgICAgICBGcmVlTGlzdCBzd2VlcChTd2VlcE1vZGUgPSBT
d2VlcE9ubHkpOworICAgICAgICB2b2lkIHN3ZWVwKEZyZWVMaXN0Kik7CiAgICAgICAgIAogICAg
ICAgICAvLyBUaGlzIGlzIHRvIGJlIGNhbGxlZCBieSBTdWJzcGFjZS4KICAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRGVzdHJveUZ1bmM+Ci0gICAgICAgIEZyZWVMaXN0IGZpbmlzaFN3ZWVwS25v
d2luZ1N1YnNwYWNlKFN3ZWVwTW9kZSwgY29uc3QgRGVzdHJveUZ1bmMmKTsKKyAgICAgICAgdm9p
ZCBmaW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZShGcmVlTGlzdCosIGNvbnN0IERlc3Ryb3lGdW5j
Jik7CiAgICAgICAgIAogICAgICAgICB2b2lkIHVuc3dlZXBXaXRoTm9OZXdseUFsbG9jYXRlZCgp
OwogICAgICAgICAKQEAgLTE0Nyw3ICsxNDgsNyBAQCBwdWJsaWM6CiAgICAgICAgIC8vIG9mIHRo
ZXNlIGZ1bmN0aW9uczoKICAgICAgICAgdm9pZCBkaWRDb25zdW1lRnJlZUxpc3QoKTsgLy8gQ2Fs
bCB0aGlzIG9uY2UgeW91J3ZlIGFsbG9jYXRlZCBhbGwgdGhlIGl0ZW1zIGluIHRoZSBmcmVlIGxp
c3QuCiAgICAgICAgIHZvaWQgc3RvcEFsbG9jYXRpbmcoY29uc3QgRnJlZUxpc3QmKTsKLSAgICAg
ICAgRnJlZUxpc3QgcmVzdW1lQWxsb2NhdGluZygpOyAvLyBDYWxsIHRoaXMgaWYgeW91IGNhbm9u
aWNhbGl6ZWQgYSBibG9jayBmb3Igc29tZSBub24tY29sbGVjdGlvbiByZWxhdGVkIHB1cnBvc2Uu
CisgICAgICAgIHZvaWQgcmVzdW1lQWxsb2NhdGluZyhGcmVlTGlzdCYpOyAvLyBDYWxsIHRoaXMg
aWYgeW91IGNhbm9uaWNhbGl6ZWQgYSBibG9jayBmb3Igc29tZSBub24tY29sbGVjdGlvbiByZWxh
dGVkIHB1cnBvc2UuCiAgICAgICAgICAgICAKICAgICAgICAgc2l6ZV90IGNlbGxTaXplKCk7CiAg
ICAgICAgIGlubGluZSB1bnNpZ25lZCBjZWxsc1BlckJsb2NrKCk7CkBAIC0yMTUsMTAgKzIxNiw3
IEBAIHB1YmxpYzoKICAgICAgICAgTWFya3NNb2RlIG1hcmtzTW9kZSgpOwogICAgICAgICAKICAg
ICAgICAgdGVtcGxhdGU8Ym9vbCwgRW1wdHlNb2RlLCBTd2VlcE1vZGUsIFN3ZWVwRGVzdHJ1Y3Rp
b25Nb2RlLCBTY3JpYmJsZU1vZGUsIE5ld2x5QWxsb2NhdGVkTW9kZSwgTWFya3NNb2RlLCB0eXBl
bmFtZSBEZXN0cm95RnVuYz4KLSAgICAgICAgRnJlZUxpc3Qgc3BlY2lhbGl6ZWRTd2VlcChFbXB0
eU1vZGUsIFN3ZWVwTW9kZSwgU3dlZXBEZXN0cnVjdGlvbk1vZGUsIFNjcmliYmxlTW9kZSwgTmV3
bHlBbGxvY2F0ZWRNb2RlLCBNYXJrc01vZGUsIGNvbnN0IERlc3Ryb3lGdW5jJik7Ci0gICAgICAg
IAotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotICAgICAgICB2b2lkIGZvckVhY2hG
cmVlQ2VsbChjb25zdCBGcmVlTGlzdCYsIGNvbnN0IEZ1bmMmKTsKKyAgICAgICAgdm9pZCBzcGVj
aWFsaXplZFN3ZWVwKEZyZWVMaXN0KiwgRW1wdHlNb2RlLCBTd2VlcE1vZGUsIFN3ZWVwRGVzdHJ1
Y3Rpb25Nb2RlLCBTY3JpYmJsZU1vZGUsIE5ld2x5QWxsb2NhdGVkTW9kZSwgTWFya3NNb2RlLCBj
b25zdCBEZXN0cm95RnVuYyYpOwogICAgICAgICAKICAgICAgICAgdm9pZCBzZXRJc0ZyZWVMaXN0
ZWQoKTsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRC
bG9ja0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRCbG9ja0lubGluZXMuaAkocmV2aXNpb24gMjE3NjQ2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2VkQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNywx
MiArMTE3LDYgQEAgaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6OkhhbmRsZTo6aXNMaXZlQwogICAg
IHJldHVybiBpc0xpdmUobWFya2luZ1ZlcnNpb24sIGlzTWFya2luZywgc3RhdGljX2Nhc3Q8Y29u
c3QgSGVhcENlbGwqPihwKSk7CiB9CiAKLWlubGluZSBib29sIE1hcmtlZEJsb2NrOjpIYW5kbGU6
OmlzRnJlZUxpc3RlZENlbGwoY29uc3Qgdm9pZCogdGFyZ2V0KSBjb25zdAotewotICAgIEFTU0VS
VChpc0ZyZWVMaXN0ZWQoKSk7Ci0gICAgcmV0dXJuIG1fYWxsb2NhdG9yLT5pc0ZyZWVMaXN0ZWRD
ZWxsKHRhcmdldCk7Ci19Ci0KIC8vIFRoZSBmb2xsb3dpbmcgaGFzIHRvIGJlIHRydWUgZm9yIHNw
ZWNpYWxpemF0aW9uIHRvIGtpY2sgaW46CiAvLwogLy8gc3dlZXBNb2RlID09IFN3ZWVwVG9GcmVl
TGlzdApAQCAtMTQ1LDcgKzEzOSw3IEBAIGlubGluZSBib29sIE1hcmtlZEJsb2NrOjpIYW5kbGU6
OmlzRnJlZUwKIC8vIE9ubHkgdGhlIERvZXNOb3ROZWVkRGVzdHJ1Y3Rpb24gb25lIHNob3VsZCBi
ZSBzcGVjaWFsaXplZCBieSBNYXJrZWRCbG9jay4KIAogdGVtcGxhdGU8Ym9vbCBzcGVjaWFsaXpl
LCBNYXJrZWRCbG9jazo6SGFuZGxlOjpFbXB0eU1vZGUgc3BlY2lhbGl6ZWRFbXB0eU1vZGUsIE1h
cmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwTW9kZSBzcGVjaWFsaXplZFN3ZWVwTW9kZSwgTWFya2Vk
QmxvY2s6OkhhbmRsZTo6U3dlZXBEZXN0cnVjdGlvbk1vZGUgc3BlY2lhbGl6ZWREZXN0cnVjdGlv
bk1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlNjcmliYmxlTW9kZSBzcGVjaWFsaXplZFNjcmli
YmxlTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6TmV3bHlBbGxvY2F0ZWRNb2RlIHNwZWNpYWxp
emVkTmV3bHlBbGxvY2F0ZWRNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpNYXJrc01vZGUgc3Bl
Y2lhbGl6ZWRNYXJrc01vZGUsIHR5cGVuYW1lIERlc3Ryb3lGdW5jPgotRnJlZUxpc3QgTWFya2Vk
QmxvY2s6OkhhbmRsZTo6c3BlY2lhbGl6ZWRTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlOjpFbXB0
eU1vZGUgZW1wdHlNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcE1vZGUgc3dlZXBNb2Rl
LCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbk1v
ZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlNjcmliYmxlTW9kZSBzY3JpYmJsZU1vZGUsIE1hcmtl
ZEJsb2NrOjpIYW5kbGU6Ok5ld2x5QWxsb2NhdGVkTW9kZSBuZXdseUFsbG9jYXRlZE1vZGUsIE1h
cmtlZEJsb2NrOjpIYW5kbGU6Ok1hcmtzTW9kZSBtYXJrc01vZGUsIGNvbnN0IERlc3Ryb3lGdW5j
JiBkZXN0cm95RnVuYykKK3ZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3BlY2lhbGl6ZWRTd2Vl
cChGcmVlTGlzdCogZnJlZUxpc3QsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OkVtcHR5TW9kZSBlbXB0
eU1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwTW9kZSBzd2VlcE1vZGUsIE1hcmtlZEJs
b2NrOjpIYW5kbGU6OlN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0aW9uTW9kZSwgTWFya2Vk
QmxvY2s6OkhhbmRsZTo6U2NyaWJibGVNb2RlIHNjcmliYmxlTW9kZSwgTWFya2VkQmxvY2s6Okhh
bmRsZTo6TmV3bHlBbGxvY2F0ZWRNb2RlIG5ld2x5QWxsb2NhdGVkTW9kZSwgTWFya2VkQmxvY2s6
OkhhbmRsZTo6TWFya3NNb2RlIG1hcmtzTW9kZSwgY29uc3QgRGVzdHJveUZ1bmMmIGRlc3Ryb3lG
dW5jKQogewogICAgIGlmIChzcGVjaWFsaXplKSB7CiAgICAgICAgIGVtcHR5TW9kZSA9IHNwZWNp
YWxpemVkRW1wdHlNb2RlOwpAQCAtMTY1LDYgKzE1OSw4IEBAIEZyZWVMaXN0IE1hcmtlZEJsb2Nr
OjpIYW5kbGU6OnNwZWNpYWxpemUKICAgICBpZiAoZmFsc2UpCiAgICAgICAgIGRhdGFMb2coUmF3
UG9pbnRlcih0aGlzKSwgIi8iLCBSYXdQb2ludGVyKCZibG9jayksICI6IE1hcmtlZEJsb2NrOjpI
YW5kbGU6OnNwZWNpYWxpemVkU3dlZXAhXG4iKTsKICAgICAKKyAgICB1bnNpZ25lZCBjZWxsU2l6
ZSA9IHRoaXMtPmNlbGxTaXplKCk7CisgICAgCiAgICAgaWYgKE9wdGlvbnM6OnVzZUJ1bXBBbGxv
Y2F0b3IoKQogICAgICAgICAmJiBlbXB0eU1vZGUgPT0gSXNFbXB0eQogICAgICAgICAmJiBuZXds
eUFsbG9jYXRlZE1vZGUgPT0gRG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCkgewpAQCAtMTgyLDcg
KzE3OCw3IEBAIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxpemUKICAgICAg
ICAgfQogICAgICAgICAKICAgICAgICAgY2hhciogc3RhcnRPZkxhc3RDZWxsID0gc3RhdGljX2Nh
c3Q8Y2hhcio+KGNlbGxBbGlnbihibG9jay5hdG9tcygpICsgbV9lbmRBdG9tIC0gMSkpOwotICAg
ICAgICBjaGFyKiBwYXlsb2FkRW5kID0gc3RhcnRPZkxhc3RDZWxsICsgY2VsbFNpemUoKTsKKyAg
ICAgICAgY2hhciogcGF5bG9hZEVuZCA9IHN0YXJ0T2ZMYXN0Q2VsbCArIGNlbGxTaXplOwogICAg
ICAgICBSRUxFQVNFX0FTU0VSVChwYXlsb2FkRW5kIC0gTWFya2VkQmxvY2s6OmJsb2NrU2l6ZSA8
PSBiaXR3aXNlX2Nhc3Q8Y2hhcio+KCZibG9jaykpOwogICAgICAgICBjaGFyKiBwYXlsb2FkQmVn
aW4gPSBiaXR3aXNlX2Nhc3Q8Y2hhcio+KGJsb2NrLmF0b21zKCkgKyBmaXJzdEF0b20oKSk7CiAg
ICAgICAgIGlmIChzY3JpYmJsZU1vZGUgPT0gU2NyaWJibGUpCkBAIC0xOTMsMTAgKzE4OSwxMSBA
QCBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzcGVjaWFsaXplCiAgICAgICAgICAgICBt
X2FsbG9jYXRvci0+c2V0SXNFbXB0eShOb0xvY2tpbmdOZWNlc3NhcnksIHRoaXMsIHRydWUpOwog
ICAgICAgICBpZiAoc3BhY2UoKS0+aXNNYXJraW5nKCkpCiAgICAgICAgICAgICBibG9jay5tX2xv
Y2sudW5sb2NrKCk7Ci0gICAgICAgIEZyZWVMaXN0IHJlc3VsdCA9IEZyZWVMaXN0OjpidW1wKHBh
eWxvYWRFbmQsIHBheWxvYWRFbmQgLSBwYXlsb2FkQmVnaW4pOworICAgICAgICBpZiAoc3dlZXBN
b2RlID09IFN3ZWVwVG9GcmVlTGlzdCkKKyAgICAgICAgICAgIGZyZWVMaXN0LT5pbml0aWFsaXpl
QnVtcChwYXlsb2FkRW5kLCBwYXlsb2FkRW5kIC0gcGF5bG9hZEJlZ2luKTsKICAgICAgICAgaWYg
KGZhbHNlKQotICAgICAgICAgICAgZGF0YUxvZygiUXVpY2tseSBzd2VwdCBibG9jayAiLCBSYXdQ
b2ludGVyKHRoaXMpLCAiIHdpdGggY2VsbCBzaXplICIsIGNlbGxTaXplKCksICIgYW5kIGF0dHJp
YnV0ZXMgIiwgbV9hdHRyaWJ1dGVzLCAiOiAiLCByZXN1bHQsICJcbiIpOwotICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgICAgICAgICAgZGF0YUxvZygiUXVpY2tseSBzd2VwdCBibG9jayAiLCBS
YXdQb2ludGVyKHRoaXMpLCAiIHdpdGggY2VsbCBzaXplICIsIGNlbGxTaXplLCAiIGFuZCBhdHRy
aWJ1dGVzICIsIG1fYXR0cmlidXRlcywgIjogIiwgcG9pbnRlckR1bXAoZnJlZUxpc3QpLCAiXG4i
KTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIC8vIFRoaXMgcHJvZHVjZXMgYSBmcmVl
IGxpc3QgdGhhdCBpcyBvcmRlcmVkIGluIHJldmVyc2UgdGhyb3VnaCB0aGUgYmxvY2suCkBAIC0y
MDQsNiArMjAxLDggQEAgRnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3BlY2lhbGl6ZQog
ICAgIC8vIG9yZGVyIG9mIHRoZSBmcmVlIGxpc3QuCiAgICAgRnJlZUNlbGwqIGhlYWQgPSAwOwog
ICAgIHNpemVfdCBjb3VudCA9IDA7CisgICAgdWludHB0cl90IHNlY3JldDsKKyAgICBjcnlwdG9n
cmFwaGljYWxseVJhbmRvbVZhbHVlcygmc2VjcmV0LCBzaXplb2YodWludHB0cl90KSk7CiAgICAg
Ym9vbCBpc0VtcHR5ID0gdHJ1ZTsKICAgICBWZWN0b3I8c2l6ZV90PiBkZWFkQ2VsbHM7CiAgICAg
Vk0mIHZtID0gKnRoaXMtPnZtKCk7CkBAIC0yMjEsOCArMjIwLDggQEAgRnJlZUxpc3QgTWFya2Vk
QmxvY2s6OkhhbmRsZTo6c3BlY2lhbGl6ZQogICAgICAgICBpZiAoc3dlZXBNb2RlID09IFN3ZWVw
VG9GcmVlTGlzdCkgewogICAgICAgICAgICAgRnJlZUNlbGwqIGZyZWVDZWxsID0gcmVpbnRlcnBy
ZXRfY2FzdF9wdHI8RnJlZUNlbGwqPihjZWxsKTsKICAgICAgICAgICAgIGlmIChzY3JpYmJsZU1v
ZGUgPT0gU2NyaWJibGUpCi0gICAgICAgICAgICAgICAgc2NyaWJibGUoZnJlZUNlbGwsIGNlbGxT
aXplKCkpOwotICAgICAgICAgICAgZnJlZUNlbGwtPm5leHQgPSBoZWFkOworICAgICAgICAgICAg
ICAgIHNjcmliYmxlKGZyZWVDZWxsLCBjZWxsU2l6ZSk7CisgICAgICAgICAgICBmcmVlQ2VsbC0+
c2V0TmV4dChoZWFkLCBzZWNyZXQpOwogICAgICAgICAgICAgaGVhZCA9IGZyZWVDZWxsOwogICAg
ICAgICAgICAgKytjb3VudDsKICAgICAgICAgfQpAQCAtMjU0LDI2ICsyNTMsMjUgQEAgRnJlZUxp
c3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3BlY2lhbGl6ZQogICAgICAgICAgICAgaGFuZGxlRGVh
ZENlbGwoaSk7CiAgICAgfQogCi0gICAgRnJlZUxpc3QgcmVzdWx0ID0gRnJlZUxpc3Q6Omxpc3Qo
aGVhZCwgY291bnQgKiBjZWxsU2l6ZSgpKTsKLSAgICBpZiAoc3dlZXBNb2RlID09IFN3ZWVwVG9G
cmVlTGlzdCkKKyAgICBpZiAoc3dlZXBNb2RlID09IFN3ZWVwVG9GcmVlTGlzdCkgeworICAgICAg
ICBmcmVlTGlzdC0+aW5pdGlhbGl6ZUxpc3QoaGVhZCwgc2VjcmV0LCBjb3VudCAqIGNlbGxTaXpl
KTsKICAgICAgICAgc2V0SXNGcmVlTGlzdGVkKCk7Ci0gICAgZWxzZSBpZiAoaXNFbXB0eSkKKyAg
ICB9IGVsc2UgaWYgKGlzRW1wdHkpCiAgICAgICAgIG1fYWxsb2NhdG9yLT5zZXRJc0VtcHR5KE5v
TG9ja2luZ05lY2Vzc2FyeSwgdGhpcywgdHJ1ZSk7CiAgICAgaWYgKGZhbHNlKQotICAgICAgICBk
YXRhTG9nKCJTbG93bHkgc3dlcHQgYmxvY2sgIiwgUmF3UG9pbnRlcigmYmxvY2spLCAiIHdpdGgg
Y2VsbCBzaXplICIsIGNlbGxTaXplKCksICIgYW5kIGF0dHJpYnV0ZXMgIiwgbV9hdHRyaWJ1dGVz
LCAiOiAiLCByZXN1bHQsICJcbiIpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIGRhdGFM
b2coIlNsb3dseSBzd2VwdCBibG9jayAiLCBSYXdQb2ludGVyKCZibG9jayksICIgd2l0aCBjZWxs
IHNpemUgIiwgY2VsbFNpemUsICIgYW5kIGF0dHJpYnV0ZXMgIiwgbV9hdHRyaWJ1dGVzLCAiOiAi
LCBwb2ludGVyRHVtcChmcmVlTGlzdCksICJcbiIpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBE
ZXN0cm95RnVuYz4KLUZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OmZpbmlzaFN3ZWVwS25v
d2luZ1N1YnNwYWNlKFN3ZWVwTW9kZSBzd2VlcE1vZGUsIGNvbnN0IERlc3Ryb3lGdW5jJiBkZXN0
cm95RnVuYykKK3ZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6ZmluaXNoU3dlZXBLbm93aW5nU3Vi
c3BhY2UoRnJlZUxpc3QqIGZyZWVMaXN0LCBjb25zdCBEZXN0cm95RnVuYyYgZGVzdHJveUZ1bmMp
CiB7CisgICAgU3dlZXBNb2RlIHN3ZWVwTW9kZSA9IGZyZWVMaXN0ID8gU3dlZXBUb0ZyZWVMaXN0
IDogU3dlZXBPbmx5OwogICAgIFN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0aW9uTW9kZSA9
IHRoaXMtPnN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlKCk7CiAgICAgRW1wdHlNb2RlIGVtcHR5TW9kZSA9
IHRoaXMtPmVtcHR5TW9kZSgpOwogICAgIFNjcmliYmxlTW9kZSBzY3JpYmJsZU1vZGUgPSB0aGlz
LT5zY3JpYmJsZU1vZGUoKTsKICAgICBOZXdseUFsbG9jYXRlZE1vZGUgbmV3bHlBbGxvY2F0ZWRN
b2RlID0gdGhpcy0+bmV3bHlBbGxvY2F0ZWRNb2RlKCk7CiAgICAgTWFya3NNb2RlIG1hcmtzTW9k
ZSA9IHRoaXMtPm1hcmtzTW9kZSgpOwogCi0gICAgRnJlZUxpc3QgcmVzdWx0OwogICAgIGF1dG8g
dHJ5U3BlY2lhbGl6ZWQgPSBbJl0gKCkgLT4gYm9vbCB7CiAgICAgICAgIGlmIChzd2VlcE1vZGUg
IT0gU3dlZXBUb0ZyZWVMaXN0KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjg4LDEw
ICsyODYsMTAgQEAgRnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6ZmluaXNoU3dlZQogICAg
ICAgICAKICAgICAgICAgc3dpdGNoIChtYXJrc01vZGUpIHsKICAgICAgICAgY2FzZSBNYXJrc05v
dFN0YWxlOgotICAgICAgICAgICAgcmVzdWx0ID0gc3BlY2lhbGl6ZWRTd2VlcDx0cnVlLCBOb3RF
bXB0eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hhc0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUs
IERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzTm90U3RhbGU+KElzRW1wdHksIFN3ZWVw
VG9GcmVlTGlzdCwgQmxvY2tIYXNEZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2
ZU5ld2x5QWxsb2NhdGVkLCBNYXJrc05vdFN0YWxlLCBkZXN0cm95RnVuYyk7CisgICAgICAgICAg
ICBzcGVjaWFsaXplZFN3ZWVwPHRydWUsIE5vdEVtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2Nr
SGFzRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCwg
TWFya3NOb3RTdGFsZT4oZnJlZUxpc3QsIElzRW1wdHksIFN3ZWVwVG9GcmVlTGlzdCwgQmxvY2tI
YXNEZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBN
YXJrc05vdFN0YWxlLCBkZXN0cm95RnVuYyk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgY2FzZSBNYXJrc1N0YWxlOgotICAgICAgICAgICAgcmVzdWx0ID0gc3BlY2lhbGl6ZWRT
d2VlcDx0cnVlLCBOb3RFbXB0eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hhc0Rlc3RydWN0b3Jz
LCBEb250U2NyaWJibGUsIERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzU3RhbGU+KElz
RW1wdHksIFN3ZWVwVG9GcmVlTGlzdCwgQmxvY2tIYXNEZXN0cnVjdG9ycywgRG9udFNjcmliYmxl
LCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBNYXJrc1N0YWxlLCBkZXN0cm95RnVuYyk7Cisg
ICAgICAgICAgICBzcGVjaWFsaXplZFN3ZWVwPHRydWUsIE5vdEVtcHR5LCBTd2VlcFRvRnJlZUxp
c3QsIEJsb2NrSGFzRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9lc05vdEhhdmVOZXdseUFs
bG9jYXRlZCwgTWFya3NTdGFsZT4oZnJlZUxpc3QsIElzRW1wdHksIFN3ZWVwVG9GcmVlTGlzdCwg
QmxvY2tIYXNEZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2Nh
dGVkLCBNYXJrc1N0YWxlLCBkZXN0cm95RnVuYyk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgfQogICAgICAgICAKQEAgLTI5OSwxMCArMjk3LDEwIEBAIEZyZWVMaXN0IE1hcmtl
ZEJsb2NrOjpIYW5kbGU6OmZpbmlzaFN3ZWUKICAgICB9OwogICAgIAogICAgIGlmICh0cnlTcGVj
aWFsaXplZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm47CiAgICAg
CiAgICAgLy8gVGhlIHRlbXBsYXRlIGFyZ3VtZW50cyBkb24ndCBtYXR0ZXIgYmVjYXVzZSB0aGUg
Zmlyc3Qgb25lIGlzIGZhbHNlLgotICAgIHJldHVybiBzcGVjaWFsaXplZFN3ZWVwPGZhbHNlLCBJ
c0VtcHR5LCBTd2VlcE9ubHksIEJsb2NrSGFzTm9EZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBI
YXNOZXdseUFsbG9jYXRlZCwgTWFya3NTdGFsZT4oZW1wdHlNb2RlLCBzd2VlcE1vZGUsIGRlc3Ry
dWN0aW9uTW9kZSwgc2NyaWJibGVNb2RlLCBuZXdseUFsbG9jYXRlZE1vZGUsIG1hcmtzTW9kZSwg
ZGVzdHJveUZ1bmMpOworICAgIHNwZWNpYWxpemVkU3dlZXA8ZmFsc2UsIElzRW1wdHksIFN3ZWVw
T25seSwgQmxvY2tIYXNOb0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUsIEhhc05ld2x5QWxsb2Nh
dGVkLCBNYXJrc1N0YWxlPihmcmVlTGlzdCwgZW1wdHlNb2RlLCBzd2VlcE1vZGUsIGRlc3RydWN0
aW9uTW9kZSwgc2NyaWJibGVNb2RlLCBuZXdseUFsbG9jYXRlZE1vZGUsIG1hcmtzTW9kZSwgZGVz
dHJveUZ1bmMpOwogfQogCiBpbmxpbmUgTWFya2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBEZXN0cnVj
dGlvbk1vZGUgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3dlZXBEZXN0cnVjdGlvbk1vZGUoKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmNwcAkocmV2aXNpb24gMjE3NjQ2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03Nyw5ICs3Nyw5IEBAIFN1YnNwYWNlOjp+U3Vic3BhY2UoKQogewogfQogCi1GcmVl
TGlzdCBTdWJzcGFjZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYgYmxvY2ssIE1h
cmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwTW9kZSBzd2VlcE1vZGUpCit2b2lkIFN1YnNwYWNlOjpm
aW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiBibG9jaywgRnJlZUxpc3QqIGZyZWVMaXN0
KQogewotICAgIHJldHVybiBibG9jay5maW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZShzd2VlcE1v
ZGUsIERlc3Ryb3lGdW5jKCkpOworICAgIGJsb2NrLmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNl
KGZyZWVMaXN0LCBEZXN0cm95RnVuYygpKTsKIH0KIAogdm9pZCBTdWJzcGFjZTo6ZGVzdHJveShW
TSYgdm0sIEpTQ2VsbCogY2VsbCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1
YnNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3Bh
Y2UuaAkocmV2aXNpb24gMjE3NjQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vi
c3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCBwdWJsaWM6CiAgICAgCiAg
ICAgLy8gVGhlIHB1cnBvc2Ugb2Ygb3ZlcnJpZGluZyB0aGlzIGlzIHRvIHNwZWNpYWxpemUgdGhl
IHN3ZWVwIGZvciB5b3VyIGRlc3RydWN0b3JzLiBUaGlzIHdvbid0CiAgICAgLy8gYmUgY2FsbGVk
IGZvciBuby1kZXN0cnVjdG9yIGJsb2Nrcy4gVGhpcyBtdXN0IGNhbGwgTWFya2VkQmxvY2s6OmZp
bmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlLgotICAgIHZpcnR1YWwgRnJlZUxpc3QgZmluaXNoU3dl
ZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwTW9kZSk7
CisgICAgdmlydHVhbCB2b2lkIGZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmLCBGcmVl
TGlzdCopOwogICAgIAogICAgIC8vIFRoZXNlIGdldCBjYWxsZWQgZm9yIGxhcmdlIG9iamVjdHMu
CiAgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koVk0mLCBKU0NlbGwqKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlSW5saW5lcy5oCShyZXZpc2lvbiAyMTc2NDYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZUlubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJKU0Nl
bGwuaCIKLSNpbmNsdWRlICJNYXJrZWRBbGxvY2F0b3IuaCIKKyNpbmNsdWRlICJNYXJrZWRBbGxv
Y2F0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTWFya2VkQmxvY2suaCIKICNpbmNsdWRlICJNYXJr
ZWRTcGFjZS5oIgogI2luY2x1ZGUgIlN1YnNwYWNlLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDIxNzY0NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE0NTgsNyArMTQ1OCw3IEBAIHB1YmxpYzoKICAgICAgICAgSnVtcCBwb3BQYXRoOwogICAgICAg
ICBKdW1wIGRvbmU7CiAgICAgICAgIAotICAgICAgICBsb2FkMzIoQWRkcmVzcyhhbGxvY2F0b3JH
UFIsIE1hcmtlZEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgT0JKRUNUX09GRlNFVE9G
KEZyZWVMaXN0LCByZW1haW5pbmcpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgbG9hZDMyKEFkZHJl
c3MoYWxsb2NhdG9yR1BSLCBNYXJrZWRBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZy
ZWVMaXN0OjpvZmZzZXRPZlJlbWFpbmluZygpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgcG9wUGF0
aCA9IGJyYW5jaFRlc3QzMihaZXJvLCByZXN1bHRHUFIpOwogICAgICAgICBpZiAoYWxsb2NhdG9y
KQogICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKC1hbGxvY2F0b3ItPmNlbGxTaXplKCkp
LCByZXN1bHRHUFIsIHNjcmF0Y2hHUFIpOwpAQCAtMTQ3Miw4ICsxNDcyLDggQEAgcHVibGljOgog
ICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIG5lZ1B0cihyZXN1bHRHUFIpOwotICAg
ICAgICBzdG9yZTMyKHNjcmF0Y2hHUFIsIEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBNYXJrZWRBbGxv
Y2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIE9CSkVDVF9PRkZTRVRPRihGcmVlTGlzdCwgcmVt
YWluaW5nKSkpOwotICAgICAgICBBZGRyZXNzIHBheWxvYWRFbmRBZGRyID0gQWRkcmVzcyhhbGxv
Y2F0b3JHUFIsIE1hcmtlZEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgT0JKRUNUX09G
RlNFVE9GKEZyZWVMaXN0LCBwYXlsb2FkRW5kKSk7CisgICAgICAgIHN0b3JlMzIoc2NyYXRjaEdQ
UiwgQWRkcmVzcyhhbGxvY2F0b3JHUFIsIE1hcmtlZEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlz
dCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mUmVtYWluaW5nKCkpKTsKKyAgICAgICAgQWRkcmVzcyBw
YXlsb2FkRW5kQWRkciA9IEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBNYXJrZWRBbGxvY2F0b3I6Om9m
ZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZlBheWxvYWRFbmQoKSk7CiAgICAg
ICAgIGlmIChpc1g4NigpKQogICAgICAgICAgICAgYWRkUHRyKHBheWxvYWRFbmRBZGRyLCByZXN1
bHRHUFIpOwogICAgICAgICBlbHNlIHsKQEAgLTE0ODUsMTMgKzE0ODUsMTkgQEAgcHVibGljOgog
ICAgICAgICAKICAgICAgICAgcG9wUGF0aC5saW5rKHRoaXMpOwogICAgICAgICAKLSAgICAgICAg
bG9hZFB0cihBZGRyZXNzKGFsbG9jYXRvckdQUiwgTWFya2VkQWxsb2NhdG9yOjpvZmZzZXRPZkZy
ZWVMaXN0KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRnJlZUxpc3QsIGhlYWQpKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgbG9hZFB0cihBZGRyZXNzKGFsbG9jYXRvckdQUiwgTWFya2VkQWxsb2NhdG9yOjpv
ZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZTY3JhbWJsZWRIZWFkKCkpLCBy
ZXN1bHRHUFIpOworICAgICAgICBpZiAoaXNYODYoKSkKKyAgICAgICAgICAgIHhvclB0cihBZGRy
ZXNzKGFsbG9jYXRvckdQUiwgTWFya2VkQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBG
cmVlTGlzdDo6b2Zmc2V0T2ZTZWNyZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGFsbG9jYXRvckdQUiwgTWFya2VkQWxsb2NhdG9y
OjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZTZWNyZXQoKSksIHNjcmF0
Y2hHUFIpOworICAgICAgICAgICAgeG9yUHRyKHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7CisgICAg
ICAgIH0KICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywgcmVzdWx0
R1BSKSk7CiAgICAgICAgIAogICAgICAgICAvLyBUaGUgb2JqZWN0IGlzIGhhbGYtYWxsb2NhdGVk
OiB3ZSBoYXZlIHdoYXQgd2Uga25vdyBpcyBhIGZyZXNoIG9iamVjdCwgYnV0CiAgICAgICAgIC8v
IGl0J3Mgc3RpbGwgb24gdGhlIEdDJ3MgZnJlZSBsaXN0LgogICAgICAgICBsb2FkUHRyKEFkZHJl
c3MocmVzdWx0R1BSKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgIHN0b3JlUHRyKHNjcmF0Y2hHUFIs
IEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBNYXJrZWRBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3Qo
KSArIE9CSkVDVF9PRkZTRVRPRihGcmVlTGlzdCwgaGVhZCkpKTsKKyAgICAgICAgc3RvcmVQdHIo
c2NyYXRjaEdQUiwgQWRkcmVzcyhhbGxvY2F0b3JHUFIsIE1hcmtlZEFsbG9jYXRvcjo6b2Zmc2V0
T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mU2NyYW1ibGVkSGVhZCgpKSk7CiAgICAg
ICAgIAogICAgICAgICBkb25lLmxpbmsodGhpcyk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmpl
Y3RTdWJzcGFjZS5jcHAJKHJldmlzaW9uIDIxNzY0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01Miw5ICs1Miw5IEBAIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2U6On5KU0Rlc3Ry
dWMKIHsKIH0KIAotRnJlZUxpc3QgSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZTo6ZmluaXNo
U3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYgaGFuZGxlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpT
d2VlcE1vZGUgc3dlZXBNb2RlKQordm9pZCBKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlOjpm
aW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiBoYW5kbGUsIEZyZWVMaXN0KiBmcmVlTGlz
dCkKIHsKLSAgICByZXR1cm4gaGFuZGxlLmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlKHN3ZWVw
TW9kZSwgRGVzdHJveUZ1bmMoKSk7CisgICAgaGFuZGxlLmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNw
YWNlKGZyZWVMaXN0LCBEZXN0cm95RnVuYygpKTsKIH0KIAogdm9pZCBKU0Rlc3RydWN0aWJsZU9i
amVjdFN1YnNwYWNlOjpkZXN0cm95KFZNJiB2bSwgSlNDZWxsKiBjZWxsKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGVzdHJ1Y3RpYmxl
T2JqZWN0U3Vic3BhY2UuaAkocmV2aXNpb24gMjE3NjQ2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNCw3ICszNCw3IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSBKU0Rlc3Ry
dWN0aWJsZU9iamVjdFN1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVhcCYpOwogICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZpcnR1YWwgfkpTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UoKTsKICAgICAK
LSAgICBGcmVlTGlzdCBmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiwgTWFya2VkQmxv
Y2s6OkhhbmRsZTo6U3dlZXBNb2RlKSBvdmVycmlkZTsKKyAgICB2b2lkIGZpbmlzaFN3ZWVwKE1h
cmtlZEJsb2NrOjpIYW5kbGUmLCBGcmVlTGlzdCopIG92ZXJyaWRlOwogICAgIHZvaWQgZGVzdHJv
eShWTSYsIEpTQ2VsbCopIG92ZXJyaWRlOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxl
T2JqZWN0U3Vic3BhY2UuY3BwCShyZXZpc2lvbiAyMTc2NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Miw5ICs1Miw5IEBAIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJz
cGFjZTo6fkpTU2UKIHsKIH0KIAotRnJlZUxpc3QgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1
YnNwYWNlOjpmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiBoYW5kbGUsIE1hcmtlZEJs
b2NrOjpIYW5kbGU6OlN3ZWVwTW9kZSBzd2VlcE1vZGUpCit2b2lkIEpTU2VnbWVudGVkVmFyaWFi
bGVPYmplY3RTdWJzcGFjZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYgaGFuZGxl
LCBGcmVlTGlzdCogZnJlZUxpc3QpCiB7Ci0gICAgcmV0dXJuIGhhbmRsZS5maW5pc2hTd2VlcEtu
b3dpbmdTdWJzcGFjZShzd2VlcE1vZGUsIERlc3Ryb3lGdW5jKCkpOworICAgIGhhbmRsZS5maW5p
c2hTd2VlcEtub3dpbmdTdWJzcGFjZShmcmVlTGlzdCwgRGVzdHJveUZ1bmMoKSk7CiB9CiAKIHZv
aWQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlOjpkZXN0cm95KFZNJiB2bSwgSlND
ZWxsKiBjZWxsKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50
ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlLmgJKHJldmlz
aW9uIDIxNzY0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVk
VmFyaWFibGVPYmplY3RTdWJzcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBA
IHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0
U3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdmly
dHVhbCB+SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlKCk7CiAgICAgCi0gICAgRnJl
ZUxpc3QgZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYsIE1hcmtlZEJsb2NrOjpIYW5k
bGU6OlN3ZWVwTW9kZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBmaW5pc2hTd2VlcChNYXJrZWRCbG9j
azo6SGFuZGxlJiwgRnJlZUxpc3QqKSBvdmVycmlkZTsKICAgICB2b2lkIGRlc3Ryb3koVk0mLCBK
U0NlbGwqKSBvdmVycmlkZTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU3RyaW5nU3Vic3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU3RyaW5nU3Vic3BhY2UuY3BwCShyZXZpc2lvbiAyMTc2NDYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ1N1YnNwYWNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTIsOSArNTIsOSBAQCBKU1N0cmluZ1N1YnNwYWNlOjp+SlNTdHJpbmdTdWJz
cGFjZSgpCiB7CiB9CiAKLUZyZWVMaXN0IEpTU3RyaW5nU3Vic3BhY2U6OmZpbmlzaFN3ZWVwKE1h
cmtlZEJsb2NrOjpIYW5kbGUmIGhhbmRsZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBNb2Rl
IHN3ZWVwTW9kZSkKK3ZvaWQgSlNTdHJpbmdTdWJzcGFjZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxv
Y2s6OkhhbmRsZSYgaGFuZGxlLCBGcmVlTGlzdCogZnJlZUxpc3QpCiB7Ci0gICAgcmV0dXJuIGhh
bmRsZS5maW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZShzd2VlcE1vZGUsIERlc3Ryb3lGdW5jKCkp
OworICAgIGhhbmRsZS5maW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZShmcmVlTGlzdCwgRGVzdHJv
eUZ1bmMoKSk7CiB9CiAKIHZvaWQgSlNTdHJpbmdTdWJzcGFjZTo6ZGVzdHJveShWTSYgdm0sIEpT
Q2VsbCogY2VsbCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5n
U3Vic3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1N0cmluZ1N1YnNwYWNlLmgJKHJldmlzaW9uIDIxNzY0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU3RyaW5nU3Vic3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyAr
MzQsNyBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNTdHJpbmdTdWJzcGFjZShD
U3RyaW5nIG5hbWUsIEhlYXAmKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIH5KU1N0
cmluZ1N1YnNwYWNlKCk7CiAgICAgCi0gICAgRnJlZUxpc3QgZmluaXNoU3dlZXAoTWFya2VkQmxv
Y2s6OkhhbmRsZSYsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwTW9kZSkgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiwgRnJlZUxpc3QqKSBvdmVy
cmlkZTsKICAgICB2b2lkIGRlc3Ryb3koVk0mLCBKU0NlbGwqKSBvdmVycmlkZTsKIH07CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDIxNzY0
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2luZyBj
b3B5KQpAQCAtMzYyLDcgKzM2Miw3IEBAIHR5cGVkZWYgY29uc3QgY2hhciogb3B0aW9uU3RyaW5n
OwogICAgIHYoZ2NMb2dMZXZlbCwgbG9nR0MsIEdDTG9nZ2luZzo6Tm9uZSwgTm9ybWFsLCAiZGVi
dWdnaW5nIG9wdGlvbiB0byBsb2cgR0MgYWN0aXZpdHkgKDAgPSBOb25lLCAxID0gQmFzaWMsIDIg
PSBWZXJib3NlKSIpIFwKICAgICB2KGJvb2wsIHVzZUdDLCB0cnVlLCBOb3JtYWwsIG51bGxwdHIp
IFwKICAgICB2KGJvb2wsIGdjQXRFbmQsIGZhbHNlLCBOb3JtYWwsICJJZiB0cnVlLCB0aGUganNj
IENMSSB3aWxsIGRvIGEgR0MgYmVmb3JlIGV4aXRpbmciKSBcCi0gICAgdihib29sLCBmb3JjZUdD
U2xvd1BhdGhzLCBmYWxzZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgd2Ugd2lsbCBmb3JjZSBhbGwgSklU
IGZhc3QgYWxsb2NhdGlvbnMgZG93biB0aGVpciBzbG93IHBhdGhzLiIpXAorICAgIHYoYm9vbCwg
Zm9yY2VHQ1Nsb3dQYXRocywgZmFsc2UsIE5vcm1hbCwgIklmIHRydWUsIHdlIHdpbGwgZm9yY2Ug
YWxsIEpJVCBmYXN0IGFsbG9jYXRpb25zIGRvd24gdGhlaXIgc2xvdyBwYXRocy4iKSBcCiAgICAg
dih1bnNpZ25lZCwgZ2NNYXhIZWFwU2l6ZSwgMCwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdih1
bnNpZ25lZCwgZm9yY2VSQU1TaXplLCAwLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGJvb2ws
IHJlY29yZEdDUGF1c2VUaW1lcywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UuY3BwCShyZXZpc2lvbiAyMTc2NDYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01Niw5ICs1Niw5IEBAIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tT
dWJzcGFjZTo6fkpTV2ViQXMKIHsKIH0KIAotRnJlZUxpc3QgSlNXZWJBc3NlbWJseUNvZGVCbG9j
a1N1YnNwYWNlOjpmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiBoYW5kbGUsIE1hcmtl
ZEJsb2NrOjpIYW5kbGU6OlN3ZWVwTW9kZSBzd2VlcE1vZGUpCit2b2lkIEpTV2ViQXNzZW1ibHlD
b2RlQmxvY2tTdWJzcGFjZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYgaGFuZGxl
LCBGcmVlTGlzdCogZnJlZUxpc3QpCiB7Ci0gICAgcmV0dXJuIGhhbmRsZS5maW5pc2hTd2VlcEtu
b3dpbmdTdWJzcGFjZShzd2VlcE1vZGUsIERlc3Ryb3lGdW5jKCkpOworICAgIGhhbmRsZS5maW5p
c2hTd2VlcEtub3dpbmdTdWJzcGFjZShmcmVlTGlzdCwgRGVzdHJveUZ1bmMoKSk7CiB9CiAKIHZv
aWQgSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlOjpkZXN0cm95KFZNJiB2bSwgSlNDZWxs
KiBjZWxsKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eUNvZGVCbG9ja1N1YnNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmgJKHJldmlzaW9uIDIxNzY0
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxv
Y2tTdWJzcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIHB1YmxpYzoKICAg
ICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJik7CiAg
ICAgdmlydHVhbCB+SlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlKCk7CiAgICAgCi0gICAg
RnJlZUxpc3QgZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYsIE1hcmtlZEJsb2NrOjpI
YW5kbGU6OlN3ZWVwTW9kZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBmaW5pc2hTd2VlcChNYXJrZWRC
bG9jazo6SGFuZGxlJiwgRnJlZUxpc3QqKSBvdmVycmlkZTsKICAgICB2b2lkIGRlc3Ryb3koVk0m
LCBKU0NlbGwqKSBvdmVycmlkZTsKIH07CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>311769</attachid>
            <date>2017-06-01 15:44:18 -0700</date>
            <delta_ts>2017-06-01 17:03:22 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>59209</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjE3NjYyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMCBA
QAorMjAxNy0wNi0wMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEdDIHNob3VsZCB1c2UgYSBzY3JhbWJsZWQgZnJlZS1saXN0CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzI3OTMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFByZXZpb3VzbHksIG91ciBidW1w
J24ncG9wIGFsbG9jYXRvciB3b3VsZCB1c2UgYSBjb252ZW50aW9uYWwgbGlua2VkLWxpc3QgZm9y
IHRoZSBmcmVlLWxpc3QuCisgICAgICAgIFRoZSBsaW5rZWQtbGlzdCB3b3VsZCBiZSB0aHJlYWRl
ZCB0aHJvdWdoIGZyZWUgbWVtb3J5LCBhcyBpcyB0aGUgdXN1YWwgY29udmVudGlvbi4KKyAgICAg
ICAgCisgICAgICAgIFRoaXMgc2NyYW1ibGVzIHRoZSBuZXh0IHBvaW50ZXJzIG9mIHRoYXQgZnJl
ZS1saXN0LiBJdCBhbHNvIHNjcmFtYmxlcyB0aGUgaGVhZCBwb2ludGVyLCBiZWNhdXNlCisgICAg
ICAgIHRoaXMgbGVhZHMgdG8gYSBtb3JlIG5hdHVyYWwgZmFzdC1wYXRoIHN0cnVjdHVyZSBhbmQg
c2F2ZXMgb25lIHJlZ2lzdGVyIG9uIEFSTTY0LgorICAgICAgICAKKyAgICAgICAgVGhlIHNlY3Jl
dCB3aXRoIHdoaWNoIHBvaW50ZXJzIGFyZSBzY3JhbWJsZWQgaXMgcGVyLWFsbG9jYXRvci4gQWxs
b2NhdG9ycyBjaG9vc2UgYSBuZXcgc2VjcmV0CisgICAgICAgIGV2ZXJ5IHRpbWUgdGhleSBkbyBh
IHN3ZWVwLXRvLXBvcC4KKyAgICAgICAgCisgICAgICAgIFRoaXMgZG9lc24ndCBjaGFuZ2UgdGhl
IGJlaGF2aW9yIG9mIHRoZSBidW1wIHBhcnQgb2YgYnVtcCduJ3BvcCwgYnV0IGl0IGRvZXMgcmVm
YWN0b3IgdGhlIGNvZGUKKyAgICAgICAgcXVpdGUgYSBiaXQuIFByZXZpb3VzbHksIHRoZXJlIHdl
cmUgZm91ciBjb3BpZXMgb2YgdGhlIGFsbG9jYXRvciBmYXN0IHBhdGg6IHR3byBpbgorICAgICAg
ICBNYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmgsIG9uZSBpbiBNYXJrZWRBbGxvY2F0b3IuY3BwLCBh
bmQgb25lIGluIEFzc2VtYmx5SGVscGVycy5oLiBUaGUgSklUIG9uZQorICAgICAgICB3YXMgb2J2
aW91c2x5IGRpZmZlcmVudC1sb29raW5nLCBidXQgdGhlIG90aGVyIHRocmVlIHdlcmUgYWxtb3N0
IGlkZW50aWNhbC4gVGhpcyBtb3ZlcyBhbGwgb2YKKyAgICAgICAgdGhhdCBsb2dpYyBpbnRvIEZy
ZWVMaXN0LiBUaGVyZSBhcmUgbm93IGp1c3QgdHdvIGNvcGllcyBvZiB0aGUgYWxsb2NhdG9yOiBG
cmVlTGlzdElubGluZXMuaCBhbmQKKyAgICAgICAgQXNzZW1ibHlIZWxwZXJzLmguCisgICAgICAg
IAorICAgICAgICBUaGlzIGFwcGVhcnMgdG8gYmUganVzdCBhcyBmYXN0IGFzIG91ciBwcmV2aW91
c2x5IGFsbG9jYXRvci4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogaGVhcC9GcmVlTGlzdC5jcHA6CisgICAgICAgIChKU0M6
OkZyZWVMaXN0OjpGcmVlTGlzdCk6CisgICAgICAgIChKU0M6OkZyZWVMaXN0Ojp+RnJlZUxpc3Qp
OgorICAgICAgICAoSlNDOjpGcmVlTGlzdDo6Y2xlYXIpOgorICAgICAgICAoSlNDOjpGcmVlTGlz
dDo6aW5pdGlhbGl6ZUxpc3QpOgorICAgICAgICAoSlNDOjpGcmVlTGlzdDo6aW5pdGlhbGl6ZUJ1
bXApOgorICAgICAgICAoSlNDOjpGcmVlTGlzdDo6Y29udGFpbnMpOgorICAgICAgICAoSlNDOjpG
cmVlTGlzdDo6ZHVtcCk6CisgICAgICAgICogaGVhcC9GcmVlTGlzdC5oOgorICAgICAgICAoSlND
OjpGcmVlTGlzdDo6YWxsb2NhdGlvbldpbGxGYWlsKToKKyAgICAgICAgKEpTQzo6RnJlZUxpc3Q6
Om9yaWdpbmFsU2l6ZSk6CisgICAgICAgIChKU0M6OkZyZWVMaXN0OjphZGRyZXNzT2ZMaXN0KToK
KyAgICAgICAgKEpTQzo6RnJlZUxpc3Q6Om9mZnNldE9mQmxvY2spOgorICAgICAgICAoSlNDOjpG
cmVlTGlzdDo6b2Zmc2V0T2ZMaXN0KToKKyAgICAgICAgKEpTQzo6RnJlZUxpc3Q6Om9mZnNldE9m
SW5kZXgpOgorICAgICAgICAoSlNDOjpGcmVlTGlzdDo6b2Zmc2V0T2ZQYXlsb2FkRW5kKToKKyAg
ICAgICAgKEpTQzo6RnJlZUxpc3Q6Om9mZnNldE9mUmVtYWluaW5nKToKKyAgICAgICAgKEpTQzo6
RnJlZUxpc3Q6Om9mZnNldE9mT3JpZ2luYWxTaXplKToKKyAgICAgICAgKEpTQzo6RnJlZUxpc3Q6
OkZyZWVMaXN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6RnJlZUxpc3Q6Omxpc3QpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpGcmVlTGlzdDo6YnVtcCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkZyZWVMaXN0OjpvcGVyYXRvcj09KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6RnJlZUxp
c3Q6Om9wZXJhdG9yIT0pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpGcmVlTGlzdDo6b3BlcmF0
b3IgYm9vbCk6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9GcmVlTGlzdElubGluZXMuaDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkZyZWVMaXN0OjphZGRGcmVlQ2VsbCk6CisgICAgICAgIChKU0M6
OkZyZWVMaXN0OjphbGxvY2F0ZSk6CisgICAgICAgIChKU0M6OkZyZWVMaXN0Ojpmb3JFYWNoKToK
KyAgICAgICAgKEpTQzo6RnJlZUxpc3Q6OnRvT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6RnJlZUxp
c3Q6OmZyb21PZmZzZXQpOgorICAgICAgICAqIGhlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmNwcDoK
KyAgICAgICAgKEpTQzo6SW5jcmVtZW50YWxTd2VlcGVyOjpzd2VlcE5leHRCbG9jayk6CisgICAg
ICAgICogaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxv
Y2F0b3I6Ok1hcmtlZEFsbG9jYXRvcik6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6
ZGlkQ29uc3VtZUZyZWVMaXN0KToKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjp0cnlB
bGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKToKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9y
Ojp0cnlBbGxvY2F0ZUluKToKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjphbGxvY2F0
ZVNsb3dDYXNlSW1wbCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6c3RvcEFsbG9j
YXRpbmcpOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OnByZXBhcmVGb3JBbGxvY2F0
aW9uKToKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjpyZXN1bWVBbGxvY2F0aW5nKToK
KyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjpzd2VlcCk6CisgICAgICAgIChKU0M6Ok1h
cmtlZEFsbG9jYXRvcjo6c2V0RnJlZUxpc3QpOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvTWFy
a2VkQWxsb2NhdG9yLmg6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6ZnJlZUxpc3Qp
OgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OmlzRnJlZUxpc3RlZENlbGwpOiBEZWxl
dGVkLgorICAgICAgICAqIGhlYXAvTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oOgorICAgICAgICAo
SlNDOjpNYXJrZWRBbGxvY2F0b3I6OmlzRnJlZUxpc3RlZENlbGwpOgorICAgICAgICAoSlNDOjpN
YXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlKToKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2Nh
dG9yOjphbGxvY2F0ZSk6CisgICAgICAgICogaGVhcC9NYXJrZWRCbG9jay5jcHA6CisgICAgICAg
IChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6OnN0b3BBbGxvY2F0aW5nKToKKyAgICAgICAgKEpT
Qzo6TWFya2VkQmxvY2s6OkhhbmRsZTo6bGFzdENoYW5jZVRvRmluYWxpemUpOgorICAgICAgICAo
SlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjpyZXN1bWVBbGxvY2F0aW5nKToKKyAgICAgICAgKEpT
Qzo6TWFya2VkQmxvY2s6OkhhbmRsZTo6emFwKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6
OkhhbmRsZTo6c3dlZXApOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjppc0Zy
ZWVMaXN0ZWRDZWxsKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OkhhbmRsZTo6Zm9yRWFj
aEZyZWVDZWxsKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL01hcmtlZEJsb2NrLmg6CisgICAg
ICAgICogaGVhcC9NYXJrZWRCbG9ja0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6TWFya2VkQmxv
Y2s6OkhhbmRsZTo6c3BlY2lhbGl6ZWRTd2VlcCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2Nr
OjpIYW5kbGU6OmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlKToKKyAgICAgICAgKEpTQzo6TWFy
a2VkQmxvY2s6OkhhbmRsZTo6aXNGcmVlTGlzdGVkQ2VsbCk6IERlbGV0ZWQuCisgICAgICAgICog
aGVhcC9TdWJzcGFjZS5jcHA6CisgICAgICAgIChKU0M6OlN1YnNwYWNlOjpmaW5pc2hTd2VlcCk6
CisgICAgICAgICogaGVhcC9TdWJzcGFjZS5oOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBl
cnMuaDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0QWxsb2NhdGVXaXRoTm9u
TnVsbEFsbG9jYXRvcik6CisgICAgICAgICogcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdFN1
YnNwYWNlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZTo6
ZmluaXNoU3dlZXApOgorICAgICAgICAqIHJ1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RTdWJz
cGFjZS5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNw
YWNlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNl
OjpmaW5pc2hTd2VlcCk6CisgICAgICAgICogcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2Jq
ZWN0U3Vic3BhY2UuaDoKKyAgICAgICAgKiBydW50aW1lL0pTU3RyaW5nU3Vic3BhY2UuY3BwOgor
ICAgICAgICAoSlNDOjpKU1N0cmluZ1N1YnNwYWNlOjpmaW5pc2hTd2VlcCk6CisgICAgICAgICog
cnVudGltZS9KU1N0cmluZ1N1YnNwYWNlLmg6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrU3Vic3BhY2UuY3BwOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrU3Vic3BhY2U6OmZpbmlzaFN3ZWVwKToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNz
ZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5oOgorCiAyMDE3LTA2LTAxICBUb21hcyBQb3BlbGEgIDx0
cG9wZWxhQHJlZGhhdC5jb20+LCBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpIGluIEluZmVycmVkVHlwZTo6a2luZEZv
ckZsYWdzKCkgb24gQmlnLUVuZGlhbnMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CShyZXZpc2lvbiAyMTc2NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTAxLDYgKzUw
MSw3IEBACiAJCTBGNjRCMjc5MUE3OTU3QjIwMDZFNEU2NiAvKiBDYWxsRWRnZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY0QjI3NzFBNzk1N0Iy
MDA2RTRFNjYgLyogQ2FsbEVkZ2UuY3BwICovOyB9OwogCQkwRjY0QjI3QTFBNzk1N0IyMDA2RTRF
NjYgLyogQ2FsbEVkZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGNjRCMjc4MUE3OTU3QjIwMDZFNEU2NiAvKiBDYWxsRWRnZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNjRFQUYzMUM0RUNEMDYw
MDYyMUU5QiAvKiBBaXJBcmdJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjY0RUFGMjFDNEVDRDA2MDA2MjFFOUIgLyogQWlyQXJnSW5saW5l
cy5oICovOyB9OworCQkwRjY1ODVFMTFFRTA4MDVBMDA5NTE3NkQgLyogRnJlZUxpc3RJbmxpbmVz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY1ODVF
MDFFRTA4MDU3MDA5NTE3NkQgLyogRnJlZUxpc3RJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY2NjBFMzcxRTA1MTdCOTAwMzE0NjJD
IC8qIE1hcmtpbmdDb25zdHJhaW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNjYwRTMzMUUwNTE3QjcwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3Ry
YWludC5jcHAgKi87IH07CiAJCTBGNjYwRTM4MUUwNTE3QkIwMDMxNDYyQyAvKiBNYXJraW5nQ29u
c3RyYWludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY2NjBFMzQxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY2NjBFMzkxRTA1MTdC
RjAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50U2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjYwRTM1MUUwNTE3QjcwMDMxNDYyQyAvKiBN
YXJraW5nQ29uc3RyYWludFNldC5jcHAgKi87IH07CkBAIC0zMDc3LDYgKzMwNzgsNyBAQAogCQkw
RjY0QjI3NzFBNzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2UuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gQ2FsbEVkZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjY0QjI3ODFBNzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2UuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FsbEVkZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY2NEVBRjIxQzRFQ0QwNjAwNjIxRTlCIC8qIEFpckFyZ0lubGluZXMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyQXJnSW5saW5lcy5oOyBwYXRoID0gYjMv
YWlyL0FpckFyZ0lubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2NTg1
RTAxRUUwODA1NzAwOTUxNzZEIC8qIEZyZWVMaXN0SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBGcmVlTGlzdElubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY2NjBFMzMxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hcmtpbmdDb25zdHJhaW50
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2NjBFMzQxRTA1MTdCNzAwMzE0
NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IE1hcmtpbmdDb25zdHJhaW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
NjYwRTM1MUUwNTE3QjcwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3RyYWludFNldC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYXJraW5nQ29uc3RyYWludFNldC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02MDE5LDYgKzYwMjEsNyBAQAogCQkJCTJB
ODM2Mzg0MThEN0QwRUUwMDAwRUJDQyAvKiBFZGVuR0NBY3Rpdml0eUNhbGxiYWNrLmggKi8sCiAJ
CQkJMEY1NTEzQTcxRDVBNjhDQjAwQzMyQkQ4IC8qIEZyZWVMaXN0LmNwcCAqLywKIAkJCQkwRjU1
MTNBNTFENUE2ODJBMDBDMzJCRDggLyogRnJlZUxpc3QuaCAqLywKKwkJCQkwRjY1ODVFMDFFRTA4
MDU3MDA5NTE3NkQgLyogRnJlZUxpc3RJbmxpbmVzLmggKi8sCiAJCQkJMkE4MzYzODcxOEQ3RDBG
RTAwMDBFQkNDIC8qIEZ1bGxHQ0FjdGl2aXR5Q2FsbGJhY2suY3BwICovLAogCQkJCTJBODM2Mzg4
MThEN0QwRkUwMDAwRUJDQyAvKiBGdWxsR0NBY3Rpdml0eUNhbGxiYWNrLmggKi8sCiAJCQkJMkFB
Q0U2M0ExOENBNUEwMzAwRUQwMTkxIC8qIEdDQWN0aXZpdHlDYWxsYmFjay5jcHAgKi8sCkBAIC04
NjYxLDYgKzg2NjQsNyBAQAogCQkJCTBGMjM1QkVFMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JF
eGl0UHJlcGFyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkM2M0I3MUU2MzQzRUQwMEMx
MzgzOSAvKiBCM0F0b21pY1ZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjYyMzc5ODFBRTQ1
Q0E3MDBENDAyRUEgLyogREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRjY1ODVFMTFFRTA4MDVBMDA5NTE3NkQgLyogRnJlZUxpc3RJbmxpbmVzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkZGQzk1QzE0RUY5MEFGMDBDNzI1MzIgLyogREZHUGhhc2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTM3QzczOEQyMUVEQjU2RTQwMDNGMkIwQiAvKiBQYXJzZUludC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYyQjlDRUIxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1BoaUNoaWxk
cmVuLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDIxNzY0NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtNjQzLDYgKzY0MywxMCBAQCBwdWJsaWM6CiAgICAgICAgIHhvcjMyKGltbSwgc3JjRGVzdCk7
CiAgICAgfQogCisgICAgdm9pZCB4b3JQdHIoQWRkcmVzcyBzcmMsIFJlZ2lzdGVySUQgZGVzdCkK
KyAgICB7CisgICAgICAgIHhvcjMyKHNyYywgZGVzdCk7CisgICAgfQogCiAgICAgdm9pZCBsb2Fk
UHRyKEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewpAQCAt
OTUzLDYgKzk1NywxMSBAQCBwdWJsaWM6CiAgICAgICAgIHhvcjY0KHNyYywgZGVzdCk7CiAgICAg
fQogICAgIAorICAgIHZvaWQgeG9yUHRyKEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisg
ICAgeworICAgICAgICB4b3I2NChzcmMsIGRlc3QpOworICAgIH0KKyAgICAKICAgICB2b2lkIHhv
clB0cihSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBkZXN0KQogICAgIHsKICAgICAgICAgeG9yNjQo
c3JjLCBkZXN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXJBUk02NC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCShyZXZpc2lvbiAyMTc2NDYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAkod29ya2luZyBj
b3B5KQpAQCAtOTA5LDYgKzkwOSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIHhvcjMyKGRlc3QsIHNy
YywgZGVzdCk7CiAgICAgfQogCisgICAgdm9pZCB4b3IzMihBZGRyZXNzIHNyYywgUmVnaXN0ZXJJ
RCBkZXN0KQorICAgIHsKKyAgICAgICAgbG9hZDMyKHNyYywgZ2V0Q2FjaGVkRGF0YVRlbXB0UmVn
aXN0ZXJJREFuZEludmFsaWRhdGUoKSk7CisgICAgICAgIHhvcjMyKGRhdGFUZW1wUmVnaXN0ZXIs
IGRlc3QpOworICAgIH0KKwogICAgIHZvaWQgeG9yMzIoUmVnaXN0ZXJJRCBvcDEsIFJlZ2lzdGVy
SUQgb3AyLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5lb3I8
MzI+KGRlc3QsIG9wMSwgb3AyKTsKQEAgLTk5MSw2ICs5OTcsMTIgQEAgcHVibGljOgogICAgICAg
ICAgICAgbV9hc3NlbWJsZXIuZW9yPDY0PihkZXN0LCBzcmMsIGRhdGFUZW1wUmVnaXN0ZXIpOwog
ICAgICAgICB9CiAgICAgfQorICAgIAorICAgIHZvaWQgeG9yNjQoQWRkcmVzcyBzcmMsIFJlZ2lz
dGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGxvYWQ2NChzcmMsIGdldENhY2hlZERhdGFUZW1w
dFJlZ2lzdGVySURBbmRJbnZhbGlkYXRlKCkpOworICAgICAgICB4b3I2NChkYXRhVGVtcFJlZ2lz
dGVyLCBkZXN0KTsKKyAgICB9CiAKICAgICB2b2lkIG5vdDMyKFJlZ2lzdGVySUQgc3JjLCBSZWdp
c3RlcklEIGRlc3QpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRnJl
ZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0ZyZWVM
aXN0LmNwcAkocmV2aXNpb24gMjE3NjQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
RnJlZUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwyMSArMjYsNjIgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJGcmVlTGlzdC5oIgogCisjaW5jbHVkZSAiRnJlZUxpc3RJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiTWFya2VkQmxvY2suaCIKKyNpbmNsdWRlIDx3dGYvQ29tbWFQ
cmludGVyLmg+CisKIG5hbWVzcGFjZSBKU0MgewogCi1ib29sIEZyZWVMaXN0Ojpjb250YWlucyhj
b25zdCB2b2lkKiB0YXJnZXQpIGNvbnN0CitGcmVlTGlzdDo6RnJlZUxpc3QodW5zaWduZWQgY2Vs
bFNpemUpCisgICAgOiBtX2NlbGxTaXplKGNlbGxTaXplKQoreworfQorCitGcmVlTGlzdDo6fkZy
ZWVMaXN0KCkKK3sKK30KKwordm9pZCBGcmVlTGlzdDo6Y2xlYXIoKQoreworICAgIG1fc2NyYW1i
bGVkSGVhZCA9IDA7CisgICAgbV9zZWNyZXQgPSAwOworICAgIG1fcGF5bG9hZEVuZCA9IG51bGxw
dHI7CisgICAgbV9yZW1haW5pbmcgPSAwOworICAgIG1fb3JpZ2luYWxTaXplID0gMDsKK30KKwor
dm9pZCBGcmVlTGlzdDo6aW5pdGlhbGl6ZUxpc3QoRnJlZUNlbGwqIGhlYWQsIHVpbnRwdHJfdCBz
ZWNyZXQsIHVuc2lnbmVkIGJ5dGVzKQoreworICAgIC8vIEl0J3MgKnNsaWdodGx5KiBtb3JlIG9w
dGltYWwgdG8gdXNlIGEgc2NyYW1ibGVkIGhlYWQuIEl0IHNhdmVzIGEgcmVnaXN0ZXIgb24gdGhl
IGZhc3QgcGF0aC4KKyAgICBtX3NjcmFtYmxlZEhlYWQgPSBGcmVlQ2VsbDo6c2NyYW1ibGUoaGVh
ZCwgc2VjcmV0KTsKKyAgICBtX3NlY3JldCA9IHNlY3JldDsKKyAgICBtX3BheWxvYWRFbmQgPSBu
dWxscHRyOworICAgIG1fcmVtYWluaW5nID0gMDsKKyAgICBtX29yaWdpbmFsU2l6ZSA9IGJ5dGVz
OworfQorCit2b2lkIEZyZWVMaXN0Ojppbml0aWFsaXplQnVtcChjaGFyKiBwYXlsb2FkRW5kLCB1
bnNpZ25lZCByZW1haW5pbmcpCit7CisgICAgbV9zY3JhbWJsZWRIZWFkID0gMDsKKyAgICBtX3Nl
Y3JldCA9IDA7CisgICAgbV9wYXlsb2FkRW5kID0gcGF5bG9hZEVuZDsKKyAgICBtX3JlbWFpbmlu
ZyA9IHJlbWFpbmluZzsKKyAgICBtX29yaWdpbmFsU2l6ZSA9IHJlbWFpbmluZzsKK30KKworYm9v
bCBGcmVlTGlzdDo6Y29udGFpbnMoSGVhcENlbGwqIHRhcmdldCkgY29uc3QKIHsKLSAgICBpZiAo
cmVtYWluaW5nKSB7Ci0gICAgICAgIGNvbnN0IHZvaWQqIHN0YXJ0ID0gKHBheWxvYWRFbmQgLSBy
ZW1haW5pbmcpOwotICAgICAgICBjb25zdCB2b2lkKiBlbmQgPSBwYXlsb2FkRW5kOworICAgIGlm
IChtX3JlbWFpbmluZykgeworICAgICAgICBjb25zdCB2b2lkKiBzdGFydCA9IChtX3BheWxvYWRF
bmQgLSBtX3JlbWFpbmluZyk7CisgICAgICAgIGNvbnN0IHZvaWQqIGVuZCA9IG1fcGF5bG9hZEVu
ZDsKICAgICAgICAgcmV0dXJuIChzdGFydCA8PSB0YXJnZXQpICYmICh0YXJnZXQgPCBlbmQpOwog
ICAgIH0KIAotICAgIEZyZWVDZWxsKiBjYW5kaWRhdGUgPSBoZWFkOworICAgIEZyZWVDZWxsKiBj
YW5kaWRhdGUgPSBoZWFkKCk7CiAgICAgd2hpbGUgKGNhbmRpZGF0ZSkgewotICAgICAgICBpZiAo
Y2FuZGlkYXRlID09IHRhcmdldCkKKyAgICAgICAgaWYgKGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+
KGNhbmRpZGF0ZSkgPT0gdGFyZ2V0KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IGNhbmRpZGF0ZSA9IGNhbmRpZGF0ZS0+bmV4dDsKKyAgICAgICAgY2FuZGlkYXRlID0gY2FuZGlk
YXRlLT5uZXh0KG1fc2VjcmV0KTsKICAgICB9CiAKICAgICByZXR1cm4gZmFsc2U7CkBAIC00OCw3
ICs4OSw3IEBAIGJvb2wgRnJlZUxpc3Q6OmNvbnRhaW5zKGNvbnN0IHZvaWQqIHRhcmcKIAogdm9p
ZCBGcmVlTGlzdDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewotICAgIG91dC5wcmlu
dCgie2hlYWQgPSAiLCBSYXdQb2ludGVyKGhlYWQpLCAiLCBwYXlsb2FkRW5kID0gIiwgUmF3UG9p
bnRlcihwYXlsb2FkRW5kKSwgIiwgcmVtYWluaW5nID0gIiwgcmVtYWluaW5nLCAiLCBvcmlnaW5h
bFNpemUgPSAiLCBvcmlnaW5hbFNpemUsICJ9Iik7CisgICAgb3V0LnByaW50KCJ7aGVhZCA9ICIs
IFJhd1BvaW50ZXIoaGVhZCgpKSwgIiwgc2VjcmV0ID0gIiwgbV9zZWNyZXQsICIsIHBheWxvYWRF
bmQgPSAiLCBSYXdQb2ludGVyKG1fcGF5bG9hZEVuZCksICIsIHJlbWFpbmluZyA9ICIsIG1fcmVt
YWluaW5nLCAiLCBvcmlnaW5hbFNpemUgPSAiLCBtX29yaWdpbmFsU2l6ZSwgIn0iKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9GcmVl
TGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0ZyZWVMaXN0
LmgJKHJldmlzaW9uIDIxNzY0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0ZyZWVM
aXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDY4ICsyNSw3OSBAQAogCiAjcHJhZ21hIG9uY2UK
IAorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVh
bS5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAotc3RydWN0IEZyZWVDZWxsIHsKLSAgICBGcmVlQ2Vs
bCogbmV4dDsKLX07Ci0gICAgICAgIAotLy8gVGhpcyByZXByZXNlbnRhdGlvbiBvZiBhIEZyZWVM
aXN0IGlzIGNvbnZlbmllbnQgZm9yIHRoZSBNYXJrZWRBbGxvY2F0b3IuCitjbGFzcyBIZWFwQ2Vs
bDsKIAotc3RydWN0IEZyZWVMaXN0IHsKLSAgICBGcmVlQ2VsbCogaGVhZCB7IG51bGxwdHIgfTsK
LSAgICBjaGFyKiBwYXlsb2FkRW5kIHsgbnVsbHB0ciB9OwotICAgIHVuc2lnbmVkIHJlbWFpbmlu
ZyB7IDAgfTsKLSAgICB1bnNpZ25lZCBvcmlnaW5hbFNpemUgeyAwIH07Ci0gICAgCi0gICAgRnJl
ZUxpc3QoKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgc3RhdGljIEZyZWVMaXN0IGxpc3QoRnJl
ZUNlbGwqIGhlYWQsIHVuc2lnbmVkIGJ5dGVzKQorc3RydWN0IEZyZWVDZWxsIHsKKyAgICBzdGF0
aWMgdWludHB0cl90IHNjcmFtYmxlKEZyZWVDZWxsKiBjZWxsLCB1aW50cHRyX3Qgc2VjcmV0KQog
ICAgIHsKLSAgICAgICAgRnJlZUxpc3QgcmVzdWx0OwotICAgICAgICByZXN1bHQuaGVhZCA9IGhl
YWQ7Ci0gICAgICAgIHJlc3VsdC5yZW1haW5pbmcgPSAwOwotICAgICAgICByZXN1bHQub3JpZ2lu
YWxTaXplID0gYnl0ZXM7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiBi
aXR3aXNlX2Nhc3Q8dWludHB0cl90PihjZWxsKSBeIHNlY3JldDsKICAgICB9CiAgICAgCi0gICAg
c3RhdGljIEZyZWVMaXN0IGJ1bXAoY2hhciogcGF5bG9hZEVuZCwgdW5zaWduZWQgcmVtYWluaW5n
KQorICAgIHN0YXRpYyBGcmVlQ2VsbCogZGVzY3JhbWJsZSh1aW50cHRyX3QgY2VsbCwgdWludHB0
cl90IHNlY3JldCkKICAgICB7Ci0gICAgICAgIEZyZWVMaXN0IHJlc3VsdDsKLSAgICAgICAgcmVz
dWx0LnBheWxvYWRFbmQgPSBwYXlsb2FkRW5kOwotICAgICAgICByZXN1bHQucmVtYWluaW5nID0g
cmVtYWluaW5nOwotICAgICAgICByZXN1bHQub3JpZ2luYWxTaXplID0gcmVtYWluaW5nOwotICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEZyZWVDZWxs
Kj4oY2VsbCBeIHNlY3JldCk7CiAgICAgfQogICAgIAotICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBGcmVlTGlzdCYgb3RoZXIpIGNvbnN0CisgICAgdm9pZCBzZXROZXh0KEZyZWVDZWxsKiBuZXh0
LCB1aW50cHRyX3Qgc2VjcmV0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGhlYWQgPT0gb3RoZXIu
aGVhZAotICAgICAgICAgICAgJiYgcGF5bG9hZEVuZCA9PSBvdGhlci5wYXlsb2FkRW5kCi0gICAg
ICAgICAgICAmJiByZW1haW5pbmcgPT0gb3RoZXIucmVtYWluaW5nCi0gICAgICAgICAgICAmJiBv
cmlnaW5hbFNpemUgPT0gb3RoZXIub3JpZ2luYWxTaXplOworICAgICAgICBzY3JhbWJsZWROZXh0
ID0gc2NyYW1ibGUobmV4dCwgc2VjcmV0KTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBvcGVyYXRv
ciE9KGNvbnN0IEZyZWVMaXN0JiBvdGhlcikgY29uc3QKKyAgICBGcmVlQ2VsbCogbmV4dCh1aW50
cHRyX3Qgc2VjcmV0KSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3Ro
ZXIpOworICAgICAgICByZXR1cm4gZGVzY3JhbWJsZShzY3JhbWJsZWROZXh0LCBzZWNyZXQpOwog
ICAgIH0KICAgICAKLSAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIHJldHVybiAqdGhpcyAhPSBGcmVlTGlzdCgpOwotICAgIH0KLQotICAgIGJvb2wgY29u
dGFpbnMoY29uc3Qgdm9pZCogdGFyZ2V0KSBjb25zdDsKKyAgICB1aW50cHRyX3Qgc2NyYW1ibGVk
TmV4dDsKK307CiAKLSAgICBib29sIGFsbG9jYXRpb25XaWxsRmFpbCgpIGNvbnN0IHsgcmV0dXJu
ICFoZWFkICYmICFyZW1haW5pbmc7IH0KK2NsYXNzIEZyZWVMaXN0IHsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShGcmVlTGlzdCk7CisgICAgCitwdWJsaWM6CisgICAgRnJlZUxpc3QodW5zaWdu
ZWQgY2VsbFNpemUpOworICAgIH5GcmVlTGlzdCgpOworICAgIAorICAgIHZvaWQgY2xlYXIoKTsK
KyAgICAKKyAgICB2b2lkIGluaXRpYWxpemVMaXN0KEZyZWVDZWxsKiBoZWFkLCB1aW50cHRyX3Qg
c2VjcmV0LCB1bnNpZ25lZCBieXRlcyk7CisgICAgdm9pZCBpbml0aWFsaXplQnVtcChjaGFyKiBw
YXlsb2FkRW5kLCB1bnNpZ25lZCByZW1haW5pbmcpOworICAgIAorICAgIGJvb2wgYWxsb2NhdGlv
bldpbGxGYWlsKCkgY29uc3QgeyByZXR1cm4gIWhlYWQoKSAmJiAhbV9yZW1haW5pbmc7IH0KICAg
ICBib29sIGFsbG9jYXRpb25XaWxsU3VjY2VlZCgpIGNvbnN0IHsgcmV0dXJuICFhbGxvY2F0aW9u
V2lsbEZhaWwoKTsgfQogICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgSGVh
cENlbGwqIGFsbG9jYXRlKGNvbnN0IEZ1bmMmIHNsb3dQYXRoKTsKKyAgICAKKyAgICBib29sIGNv
bnRhaW5zKEhlYXBDZWxsKikgY29uc3Q7CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVu
Yz4KKyAgICB2b2lkIGZvckVhY2goY29uc3QgRnVuYyYpIGNvbnN0OworICAgIAorICAgIHVuc2ln
bmVkIG9yaWdpbmFsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luYWxTaXplOyB9CisKKyAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2NyYW1ibGVkSGVhZCgpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihGcmVlTGlzdCwgbV9zY3JhbWJsZWRIZWFkKTsgfQorICAgIHN0YXRpYyBwdHJk
aWZmX3Qgb2Zmc2V0T2ZTZWNyZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRnJlZUxpc3Qs
IG1fc2VjcmV0KTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZQYXlsb2FkRW5kKCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZyZWVMaXN0LCBtX3BheWxvYWRFbmQpOyB9CisgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlJlbWFpbmluZygpIHsgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihGcmVlTGlzdCwgbV9yZW1haW5pbmcpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZz
ZXRPZk9yaWdpbmFsU2l6ZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihGcmVlTGlzdCwgbV9v
cmlnaW5hbFNpemUpOyB9CisgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7
CisgICAgCitwcml2YXRlOgorICAgIEZyZWVDZWxsKiBoZWFkKCkgY29uc3QgeyByZXR1cm4gRnJl
ZUNlbGw6OmRlc2NyYW1ibGUobV9zY3JhbWJsZWRIZWFkLCBtX3NlY3JldCk7IH0KKyAgICAKKyAg
ICB1aW50cHRyX3QgbV9zY3JhbWJsZWRIZWFkIHsgMCB9OworICAgIHVpbnRwdHJfdCBtX3NlY3Jl
dCB7IDAgfTsKKyAgICBjaGFyKiBtX3BheWxvYWRFbmQgeyBudWxscHRyIH07CisgICAgdW5zaWdu
ZWQgbV9yZW1haW5pbmcgeyAwIH07CisgICAgdW5zaWduZWQgbV9vcmlnaW5hbFNpemUgeyAwIH07
CisgICAgdW5zaWduZWQgbV9jZWxsU2l6ZSB7IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpT
QwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRnJlZUxpc3RJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRnJlZUxpc3RJbmxpbmVzLmgJ
KG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRnJlZUxpc3RJbmxp
bmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkZy
ZWVMaXN0LmgiCisjaW5jbHVkZSAiTWFya2VkQmxvY2suaCIKKworbmFtZXNwYWNlIEpTQyB7CisK
K3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CitIZWFwQ2VsbCogRnJlZUxpc3Q6OmFsbG9jYXRlKGNv
bnN0IEZ1bmMmIHNsb3dQYXRoKQoreworICAgIHVuc2lnbmVkIHJlbWFpbmluZyA9IG1fcmVtYWlu
aW5nOworICAgIGlmIChyZW1haW5pbmcpIHsKKyAgICAgICAgdW5zaWduZWQgY2VsbFNpemUgPSBt
X2NlbGxTaXplOworICAgICAgICByZW1haW5pbmcgLT0gY2VsbFNpemU7CisgICAgICAgIG1fcmVt
YWluaW5nID0gcmVtYWluaW5nOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEhlYXBDZWxs
Kj4obV9wYXlsb2FkRW5kIC0gcmVtYWluaW5nIC0gY2VsbFNpemUpOworICAgIH0KKyAgICAKKyAg
ICBGcmVlQ2VsbCogcmVzdWx0ID0gaGVhZCgpOworICAgIGlmIChVTkxJS0VMWSghcmVzdWx0KSkK
KyAgICAgICAgcmV0dXJuIHNsb3dQYXRoKCk7CisgICAgCisgICAgbV9zY3JhbWJsZWRIZWFkID0g
cmVzdWx0LT5zY3JhbWJsZWROZXh0OworICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8SGVhcENlbGwq
PihyZXN1bHQpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgordm9pZCBGcmVlTGlzdDo6
Zm9yRWFjaChjb25zdCBGdW5jJiBmdW5jKSBjb25zdAoreworICAgIGlmIChtX3JlbWFpbmluZykg
eworICAgICAgICBmb3IgKHVuc2lnbmVkIHJlbWFpbmluZyA9IG1fcmVtYWluaW5nOyByZW1haW5p
bmc7IHJlbWFpbmluZyAtPSBtX2NlbGxTaXplKQorICAgICAgICAgICAgZnVuYyhiaXR3aXNlX2Nh
c3Q8SGVhcENlbGwqPihtX3BheWxvYWRFbmQgLSByZW1haW5pbmcpKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBmb3IgKEZyZWVDZWxsKiBjZWxsID0gaGVhZCgpOyBjZWxsOykgeworICAgICAgICAg
ICAgLy8gV2UgY2FuIHVzZSB0aGlzIHRvIG92ZXJ3cml0ZSBmcmVlIG9iamVjdHMgYmVmb3JlIGRl
c3Ryb3lpbmcgdGhlIGZyZWUgbGlzdC4gU28sIHdlIG5lZWQKKyAgICAgICAgICAgIC8vIHRvIGdl
dCBuZXh0IGJlZm9yZSBwcm9jZWVkaW5nIGZ1cnRoZXIuCisgICAgICAgICAgICBGcmVlQ2VsbCog
bmV4dCA9IGNlbGwtPm5leHQobV9zZWNyZXQpOworICAgICAgICAgICAgZnVuYyhiaXR3aXNlX2Nh
c3Q8SGVhcENlbGwqPihjZWxsKSk7CisgICAgICAgICAgICBjZWxsID0gbmV4dDsKKyAgICAgICAg
fQorICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmNwcAkocmV2aXNpb24gMjE3
NjQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODcsNyArODcsNyBAQCBib29sIEluY3JlbWVudGFsU3dlZXBl
cjo6c3dlZXBOZXh0QmxvY2soCiAgICAgCiAgICAgaWYgKGJsb2NrKSB7CiAgICAgICAgIERlZmVy
R0NGb3JBV2hpbGUgZGVmZXJHQyhtX3ZtLT5oZWFwKTsKLSAgICAgICAgYmxvY2stPnN3ZWVwKCk7
CisgICAgICAgIGJsb2NrLT5zd2VlcChudWxscHRyKTsKICAgICAgICAgbV92bS0+aGVhcC5vYmpl
Y3RTcGFjZSgpLmZyZWVPclNocmlua0Jsb2NrKGJsb2NrKTsKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxv
Y2F0b3IuY3BwCShyZXZpc2lvbiAyMTc2NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrZWRBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw4IEBACiBu
YW1lc3BhY2UgSlNDIHsKIAogTWFya2VkQWxsb2NhdG9yOjpNYXJrZWRBbGxvY2F0b3IoSGVhcCog
aGVhcCwgU3Vic3BhY2UqIHN1YnNwYWNlLCBzaXplX3QgY2VsbFNpemUpCi0gICAgOiBtX2N1cnJl
bnRCbG9jaygwKQorICAgIDogbV9mcmVlTGlzdChjZWxsU2l6ZSkKKyAgICAsIG1fY3VycmVudEJs
b2NrKDApCiAgICAgLCBtX2xhc3RBY3RpdmVCbG9jaygwKQogICAgICwgbV9jZWxsU2l6ZShzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oY2VsbFNpemUpKQogICAgICwgbV9hdHRyaWJ1dGVzKHN1YnNwYWNl
LT5hdHRyaWJ1dGVzKCkpCkBAIC04OCw3ICs4OSw3IEBAIHZvaWQgTWFya2VkQWxsb2NhdG9yOjpk
aWRDb25zdW1lRnJlZUxpc3QKICAgICBpZiAobV9jdXJyZW50QmxvY2spCiAgICAgICAgIG1fY3Vy
cmVudEJsb2NrLT5kaWRDb25zdW1lRnJlZUxpc3QoKTsKICAgICAKLSAgICBzZXRGcmVlTGlzdChG
cmVlTGlzdCgpKTsKKyAgICBtX2ZyZWVMaXN0LmNsZWFyKCk7CiAgICAgbV9jdXJyZW50QmxvY2sg
PSBudWxscHRyOwogfQogCkBAIC05Nyw3ICs5OCw3IEBAIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6
dHJ5QWxsb2NhdGVXaXRob3UKICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29w
ZShmYWxzZSk7CiAgICAgCiAgICAgQVNTRVJUKCFtX2N1cnJlbnRCbG9jayk7Ci0gICAgQVNTRVJU
KCFtX2ZyZWVMaXN0KTsKKyAgICBBU1NFUlQobV9mcmVlTGlzdC5hbGxvY2F0aW9uV2lsbEZhaWwo
KSk7CiAgICAgCiAgICAgZm9yICg7OykgewogICAgICAgICBtX2FsbG9jYXRpb25DdXJzb3IgPSAo
bV9jYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5IHwgbV9lbXB0eSkuZmluZEJpdChtX2FsbG9jYXRpb25D
dXJzb3IsIHRydWUpOwpAQCAtMTEzLDcgKzExNCw3IEBAIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6
dHJ5QWxsb2NhdGVXaXRob3UKICAgICBpZiAoT3B0aW9uczo6c3RlYWxFbXB0eUJsb2Nrc0Zyb21P
dGhlckFsbG9jYXRvcnMoKQogICAgICAgICAmJiBzaG91bGRTdGVhbEVtcHR5QmxvY2tzRnJvbU90
aGVyQWxsb2NhdG9ycygpKSB7CiAgICAgICAgIGlmIChNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9j
ayA9IG1hcmtlZFNwYWNlKCkuZmluZEVtcHR5QmxvY2tUb1N0ZWFsKCkpIHsKLSAgICAgICAgICAg
IGJsb2NrLT5zd2VlcCgpOworICAgICAgICAgICAgYmxvY2stPnN3ZWVwKG51bGxwdHIpOwogICAg
ICAgICAgICAgCiAgICAgICAgICAgICAvLyBJdCdzIGdvb2QgdGhhdCB0aGlzIGNsZWFycyBjYW5B
bGxvY2F0ZUJ1dE5vdEVtcHR5IGFzIHdlbGwgYXMgYWxsIG90aGVyIGJpdHMsCiAgICAgICAgICAg
ICAvLyBiZWNhdXNlIHRoZXJlIGlzIGEgcmVtb3RlIGNoYW5jZSB0aGF0IGEgYmxvY2sgbWF5IGhh
dmUgYm90aCBjYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5CkBAIC0xMzksMTEgKzE0MCwxMSBAQCB2b2lk
KiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlSW4oTWFyCiAgICAgQVNTRVJUKGJsb2NrKTsK
ICAgICBBU1NFUlQoIWJsb2NrLT5pc0ZyZWVMaXN0ZWQoKSk7CiAgICAgCi0gICAgRnJlZUxpc3Qg
ZnJlZUxpc3QgPSBibG9jay0+c3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBUb0ZyZWVM
aXN0KTsKKyAgICBibG9jay0+c3dlZXAoJm1fZnJlZUxpc3QpOwogICAgIAogICAgIC8vIEl0J3Mg
cG9zc2libGUgdG8gc3R1bWJsZSBvbiBhIGNvbXBsZXRlbHkgZnVsbCBibG9jay4gTWFya2luZyB0
cmllcyB0byByZXRpcmUgdGhlc2UsIGJ1dAogICAgIC8vIHRoYXQgYWxnb3JpdGhtIGlzIHJhY3kg
YW5kIG1heSBmb3JnZXQgdG8gZG8gaXQgc29tZXRpbWVzLgotICAgIGlmIChmcmVlTGlzdC5hbGxv
Y2F0aW9uV2lsbEZhaWwoKSkgeworICAgIGlmIChtX2ZyZWVMaXN0LmFsbG9jYXRpb25XaWxsRmFp
bCgpKSB7CiAgICAgICAgIEFTU0VSVChibG9jay0+aXNGcmVlTGlzdGVkKCkpOwogICAgICAgICBi
bG9jay0+dW5zd2VlcFdpdGhOb05ld2x5QWxsb2NhdGVkKCk7CiAgICAgICAgIEFTU0VSVCghYmxv
Y2stPmlzRnJlZUxpc3RlZCgpKTsKQEAgLTE1MywxOSArMTU0LDkgQEAgdm9pZCogTWFya2VkQWxs
b2NhdG9yOjp0cnlBbGxvY2F0ZUluKE1hcgogICAgIH0KICAgICAKICAgICBtX2N1cnJlbnRCbG9j
ayA9IGJsb2NrOwotICAgIHNldEZyZWVMaXN0KGZyZWVMaXN0KTsKICAgICAKLSAgICB2b2lkKiBy
ZXN1bHQ7Ci0gICAgaWYgKG1fZnJlZUxpc3QucmVtYWluaW5nKSB7Ci0gICAgICAgIHVuc2lnbmVk
IGNlbGxTaXplID0gbV9jZWxsU2l6ZTsKLSAgICAgICAgbV9mcmVlTGlzdC5yZW1haW5pbmcgLT0g
Y2VsbFNpemU7Ci0gICAgICAgIHJlc3VsdCA9IG1fZnJlZUxpc3QucGF5bG9hZEVuZCAtIG1fZnJl
ZUxpc3QucmVtYWluaW5nIC0gY2VsbFNpemU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgRnJlZUNl
bGwqIGhlYWQgPSBtX2ZyZWVMaXN0LmhlYWQ7Ci0gICAgICAgIG1fZnJlZUxpc3QuaGVhZCA9IGhl
YWQtPm5leHQ7Ci0gICAgICAgIHJlc3VsdCA9IGhlYWQ7Ci0gICAgfQotICAgIFJFTEVBU0VfQVNT
RVJUKHJlc3VsdCk7CisgICAgdm9pZCogcmVzdWx0ID0gbV9mcmVlTGlzdC5hbGxvY2F0ZSgKKyAg
ICAgICAgW10gKCkgLT4gSGVhcENlbGwqIHsgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsg
cmV0dXJuIG51bGxwdHI7IH0pOwogICAgIHNldElzRWRlbihOb0xvY2tpbmdOZWNlc3NhcnksIG1f
Y3VycmVudEJsb2NrLCB0cnVlKTsKICAgICBtYXJrZWRTcGFjZSgpLmRpZEFsbG9jYXRlSW5CbG9j
ayhtX2N1cnJlbnRCbG9jayk7CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTIwOCw3ICsxOTksNyBA
QCB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlU2xvd0Nhc2VJCiAgICAgZG9UZXN0Q29s
bGVjdGlvbnNJZk5lZWRlZChkZWZlcnJhbENvbnRleHQpOwogCiAgICAgQVNTRVJUKCFtYXJrZWRT
cGFjZSgpLmlzSXRlcmF0aW5nKCkpOwotICAgIG1faGVhcC0+ZGlkQWxsb2NhdGUobV9mcmVlTGlz
dC5vcmlnaW5hbFNpemUpOworICAgIG1faGVhcC0+ZGlkQWxsb2NhdGUobV9mcmVlTGlzdC5vcmln
aW5hbFNpemUoKSk7CiAgICAgCiAgICAgZGlkQ29uc3VtZUZyZWVMaXN0KCk7CiAgICAgCkBAIC0z
MzQsMjEgKzMyNSwyMSBAQCB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6c3RvcEFsbG9jYXRpbmcoKQog
ICAgICAgICBkYXRhTG9nKFJhd1BvaW50ZXIodGhpcyksICI6IE1hcmtlZEFsbG9jYXRvcjo6c3Rv
cEFsbG9jYXRpbmchXG4iKTsKICAgICBBU1NFUlQoIW1fbGFzdEFjdGl2ZUJsb2NrKTsKICAgICBp
ZiAoIW1fY3VycmVudEJsb2NrKSB7Ci0gICAgICAgIEFTU0VSVCghbV9mcmVlTGlzdCk7CisgICAg
ICAgIEFTU0VSVChtX2ZyZWVMaXN0LmFsbG9jYXRpb25XaWxsRmFpbCgpKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICAKICAgICBtX2N1cnJlbnRCbG9jay0+c3RvcEFsbG9jYXRpbmcobV9m
cmVlTGlzdCk7CiAgICAgbV9sYXN0QWN0aXZlQmxvY2sgPSBtX2N1cnJlbnRCbG9jazsKICAgICBt
X2N1cnJlbnRCbG9jayA9IDA7Ci0gICAgbV9mcmVlTGlzdCA9IEZyZWVMaXN0KCk7CisgICAgbV9m
cmVlTGlzdC5jbGVhcigpOwogfQogCiB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6cHJlcGFyZUZvckFs
bG9jYXRpb24oKQogewogICAgIG1fbGFzdEFjdGl2ZUJsb2NrID0gbnVsbHB0cjsKICAgICBtX2N1
cnJlbnRCbG9jayA9IG51bGxwdHI7Ci0gICAgc2V0RnJlZUxpc3QoRnJlZUxpc3QoKSk7CisgICAg
bV9mcmVlTGlzdC5jbGVhcigpOwogCiAgICAgbV9hbGxvY2F0aW9uQ3Vyc29yID0gMDsKICAgICBt
X2VtcHR5Q3Vyc29yID0gMDsKQEAgLTM3MSwxNyArMzYyLDEyIEBAIHZvaWQgTWFya2VkQWxsb2Nh
dG9yOjpsYXN0Q2hhbmNlVG9GaW5hbGkKICAgICAgICAgfSk7CiB9CiAKLXZvaWQgTWFya2VkQWxs
b2NhdG9yOjpzZXRGcmVlTGlzdChjb25zdCBGcmVlTGlzdCYgZnJlZUxpc3QpCi17Ci0gICAgbV9m
cmVlTGlzdCA9IGZyZWVMaXN0OwotfQotCiB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6cmVzdW1lQWxs
b2NhdGluZygpCiB7CiAgICAgaWYgKCFtX2xhc3RBY3RpdmVCbG9jaykKICAgICAgICAgcmV0dXJu
OwogCi0gICAgbV9mcmVlTGlzdCA9IG1fbGFzdEFjdGl2ZUJsb2NrLT5yZXN1bWVBbGxvY2F0aW5n
KCk7CisgICAgbV9sYXN0QWN0aXZlQmxvY2stPnJlc3VtZUFsbG9jYXRpbmcobV9mcmVlTGlzdCk7
CiAgICAgbV9jdXJyZW50QmxvY2sgPSBtX2xhc3RBY3RpdmVCbG9jazsKICAgICBtX2xhc3RBY3Rp
dmVCbG9jayA9IG51bGxwdHI7CiB9CkBAIC00NDUsNyArNDMxLDcgQEAgdm9pZCBNYXJrZWRBbGxv
Y2F0b3I6OnN3ZWVwKCkKICAgICBtX3Vuc3dlcHQuZm9yRWFjaFNldEJpdCgKICAgICAgICAgWyZd
IChzaXplX3QgaW5kZXgpIHsKICAgICAgICAgICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2Nr
ID0gbV9ibG9ja3NbaW5kZXhdOwotICAgICAgICAgICAgYmxvY2stPnN3ZWVwKCk7CisgICAgICAg
ICAgICBibG9jay0+c3dlZXAobnVsbHB0cik7CiAgICAgICAgIH0pOwogfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaAkocmV2aXNpb24gMjE3
NjQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgJKHdv
cmtpbmcgY29weSkKQEAgLTE1Niw3ICsxNTYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCogdHJ5QWxs
b2NhdGUoR0NEZWZlcnJhbENvbnRleHQqID0gbnVsbHB0cik7CiAgICAgSGVhcCogaGVhcCgpIHsg
cmV0dXJuIG1faGVhcDsgfQogCi0gICAgYm9vbCBpc0ZyZWVMaXN0ZWRDZWxsKGNvbnN0IHZvaWQq
IHRhcmdldCkgY29uc3QgeyByZXR1cm4gbV9mcmVlTGlzdC5jb250YWlucyh0YXJnZXQpOyB9Cisg
ICAgYm9vbCBpc0ZyZWVMaXN0ZWRDZWxsKGNvbnN0IHZvaWQqIHRhcmdldCkgY29uc3Q7CiAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hCbG9jayhjb25zdCBGdW5j
dG9yJik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoTm90RW1w
dHlCbG9jayhjb25zdCBGdW5jdG9yJik7CkBAIC0yMDksNiArMjA5LDggQEAgcHVibGljOgogICAg
IFN1YnNwYWNlKiBzdWJzcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Vic3BhY2U7IH0KICAgICBN
YXJrZWRTcGFjZSYgbWFya2VkU3BhY2UoKSBjb25zdDsKICAgICAKKyAgICBjb25zdCBGcmVlTGlz
dCYgZnJlZUxpc3QoKSBjb25zdCB7IHJldHVybiBtX2ZyZWVMaXN0OyB9CisgICAgCiAgICAgdm9p
ZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgdm9pZCBkdW1wQml0cyhQcmludFN0cmVh
bSYgPSBXVEY6OmRhdGFGaWxlKCkpOwogICAgIApAQCAtMjI3LDggKzIyOSw2IEBAIHByaXZhdGU6
CiAgICAgdm9pZCogYWxsb2NhdGVJbihNYXJrZWRCbG9jazo6SGFuZGxlKik7CiAgICAgQUxXQVlT
X0lOTElORSB2b2lkIGRvVGVzdENvbGxlY3Rpb25zSWZOZWVkZWQoR0NEZWZlcnJhbENvbnRleHQq
KTsKICAgICAKLSAgICB2b2lkIHNldEZyZWVMaXN0KGNvbnN0IEZyZWVMaXN0Jik7Ci0gICAgCiAg
ICAgRnJlZUxpc3QgbV9mcmVlTGlzdDsKICAgICAKICAgICBWZWN0b3I8TWFya2VkQmxvY2s6Okhh
bmRsZSo+IG1fYmxvY2tzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2Vk
QWxsb2NhdG9ySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtlZEFsbG9jYXRvcklubGluZXMuaAkocmV2aXNpb24gMjE3NjQ2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNSw0NCArMjUsMzAgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJGcmVl
TGlzdElubGluZXMuaCIKICNpbmNsdWRlICJNYXJrZWRBbGxvY2F0b3IuaCIKIAogbmFtZXNwYWNl
IEpTQyB7CiAKK2lubGluZSBib29sIE1hcmtlZEFsbG9jYXRvcjo6aXNGcmVlTGlzdGVkQ2VsbChj
b25zdCB2b2lkKiB0YXJnZXQpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZnJlZUxpc3QuY29udGFp
bnMoYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4odGFyZ2V0KSk7Cit9CisKIEFMV0FZU19JTkxJTkUg
dm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZShHQ0RlZmVycmFsQ29udGV4dCogZGVm
ZXJyYWxDb250ZXh0KQogewotICAgIHVuc2lnbmVkIHJlbWFpbmluZyA9IG1fZnJlZUxpc3QucmVt
YWluaW5nOwotICAgIGlmIChyZW1haW5pbmcpIHsKLSAgICAgICAgdW5zaWduZWQgY2VsbFNpemUg
PSBtX2NlbGxTaXplOwotICAgICAgICByZW1haW5pbmcgLT0gY2VsbFNpemU7Ci0gICAgICAgIG1f
ZnJlZUxpc3QucmVtYWluaW5nID0gcmVtYWluaW5nOwotICAgICAgICByZXR1cm4gbV9mcmVlTGlz
dC5wYXlsb2FkRW5kIC0gcmVtYWluaW5nIC0gY2VsbFNpemU7Ci0gICAgfQotICAgIAotICAgIEZy
ZWVDZWxsKiBoZWFkID0gbV9mcmVlTGlzdC5oZWFkOwotICAgIGlmIChVTkxJS0VMWSghaGVhZCkp
Ci0gICAgICAgIHJldHVybiB0cnlBbGxvY2F0ZVNsb3dDYXNlKGRlZmVycmFsQ29udGV4dCk7Ci0g
ICAgCi0gICAgbV9mcmVlTGlzdC5oZWFkID0gaGVhZC0+bmV4dDsKLSAgICByZXR1cm4gaGVhZDsK
KyAgICByZXR1cm4gbV9mcmVlTGlzdC5hbGxvY2F0ZSgKKyAgICAgICAgWyZdICgpIC0+IEhlYXBD
ZWxsKiB7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SGVhcENlbGwqPih0cnlBbGxv
Y2F0ZVNsb3dDYXNlKGRlZmVycmFsQ29udGV4dCkpOworICAgICAgICB9KTsKIH0KIAogQUxXQVlT
X0lOTElORSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlKEdDRGVmZXJyYWxDb250ZXh0
KiBkZWZlcnJhbENvbnRleHQpCiB7Ci0gICAgdW5zaWduZWQgcmVtYWluaW5nID0gbV9mcmVlTGlz
dC5yZW1haW5pbmc7Ci0gICAgaWYgKHJlbWFpbmluZykgewotICAgICAgICB1bnNpZ25lZCBjZWxs
U2l6ZSA9IG1fY2VsbFNpemU7Ci0gICAgICAgIHJlbWFpbmluZyAtPSBjZWxsU2l6ZTsKLSAgICAg
ICAgbV9mcmVlTGlzdC5yZW1haW5pbmcgPSByZW1haW5pbmc7Ci0gICAgICAgIHJldHVybiBtX2Zy
ZWVMaXN0LnBheWxvYWRFbmQgLSByZW1haW5pbmcgLSBjZWxsU2l6ZTsKLSAgICB9Ci0gICAgCi0g
ICAgRnJlZUNlbGwqIGhlYWQgPSBtX2ZyZWVMaXN0LmhlYWQ7Ci0gICAgaWYgKFVOTElLRUxZKCFo
ZWFkKSkKLSAgICAgICAgcmV0dXJuIGFsbG9jYXRlU2xvd0Nhc2UoZGVmZXJyYWxDb250ZXh0KTsK
LSAgICAKLSAgICBtX2ZyZWVMaXN0LmhlYWQgPSBoZWFkLT5uZXh0OwotICAgIHJldHVybiBoZWFk
OworICAgIHJldHVybiBtX2ZyZWVMaXN0LmFsbG9jYXRlKAorICAgICAgICBbJl0gKCkgLT4gSGVh
cENlbGwqIHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIZWFwQ2VsbCo+KGFsbG9j
YXRlU2xvd0Nhc2UoZGVmZXJyYWxDb250ZXh0KSk7CisgICAgICAgIH0pOwogfQogCiB0ZW1wbGF0
ZSA8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHZvaWQgTWFya2VkQWxsb2NhdG9yOjpmb3JFYWNo
QmxvY2soY29uc3QgRnVuY3RvciYgZnVuY3RvcikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZEJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrZWRCbG9jay5jcHAJKHJldmlzaW9uIDIxNzY0NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsOSAr
MjYsMTEgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgog
CisjaW5jbHVkZSAiRnJlZUxpc3RJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5j
bHVkZSAiSlNEZXN0cnVjdGlibGVPYmplY3QuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisj
aW5jbHVkZSAiTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIk1hcmtlZEJsb2Nr
SW5saW5lcy5oIgogI2luY2x1ZGUgIlN1cGVyU2FtcGxlci5oIgogI2luY2x1ZGUgIlN3ZWVwaW5n
U2NvcGUuaCIKQEAgLTEzNCw4ICsxMzYsNyBAQCB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN0
b3BBbGxvY2F0aW5nCiAgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51
ZTsKICAgICAgICAgfSk7CiAKLSAgICBmb3JFYWNoRnJlZUNlbGwoCi0gICAgICAgIGZyZWVMaXN0
LAorICAgIGZyZWVMaXN0LmZvckVhY2goCiAgICAgICAgIFsmXSAoSGVhcENlbGwqIGNlbGwpIHsK
ICAgICAgICAgICAgIGlmIChmYWxzZSkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCJGcmVlIGNl
bGw6ICIsIFJhd1BvaW50ZXIoY2VsbCksICJcbiIpOwpAQCAtMTU2LDEwICsxNTcsMTAgQEAgdm9p
ZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpsYXN0Q2hhbmNlVG9GaQogICAgIG1fd2Vha1NldC5sYXN0
Q2hhbmNlVG9GaW5hbGl6ZSgpOwogICAgIG1fbmV3bHlBbGxvY2F0ZWQuY2xlYXJBbGwoKTsKICAg
ICBtX25ld2x5QWxsb2NhdGVkVmVyc2lvbiA9IGhlYXAoKS0+b2JqZWN0U3BhY2UoKS5uZXdseUFs
bG9jYXRlZFZlcnNpb24oKTsKLSAgICBzd2VlcCgpOworICAgIHN3ZWVwKG51bGxwdHIpOwogfQog
Ci1GcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpyZXN1bWVBbGxvY2F0aW5nKCkKK3ZvaWQg
TWFya2VkQmxvY2s6OkhhbmRsZTo6cmVzdW1lQWxsb2NhdGluZyhGcmVlTGlzdCYgZnJlZUxpc3Qp
CiB7CiAgICAgewogICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGJsb2NrKCkubV9sb2Nr
KTsKQEAgLTE3Myw0MCArMTc0LDI1IEBAIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnJl
c3VtZUFsbG8KICAgICAgICAgICAgIGlmIChmYWxzZSkKICAgICAgICAgICAgICAgICBkYXRhTG9n
KCJUaGVyZSBhaW4ndCBubyBuZXdseSBhbGxvY2F0ZWQuXG4iKTsKICAgICAgICAgICAgIC8vIFRo
aXMgbWVhbnMgd2UgaGFkIGFscmVhZHkgZXhoYXVzdGVkIHRoZSBibG9jayB3aGVuIHdlIHN0b3Bw
ZWQgYWxsb2NhdGlvbi4KLSAgICAgICAgICAgIHJldHVybiBGcmVlTGlzdCgpOworICAgICAgICAg
ICAgZnJlZUxpc3QuY2xlYXIoKTsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAg
IH0KIAogICAgIC8vIFJlLWNyZWF0ZSBvdXIgZnJlZSBsaXN0IGZyb20gYmVmb3JlIHN0b3BwaW5n
IGFsbG9jYXRpb24uIE5vdGUgdGhhdCB0aGlzIG1heSByZXR1cm4gYW4gZW1wdHkKICAgICAvLyBm
cmVlbGlzdCwgaW4gd2hpY2ggY2FzZSB0aGUgYmxvY2sgd2lsbCBzdGlsbCBiZSBNYXJrZWQhCi0g
ICAgcmV0dXJuIHN3ZWVwKFN3ZWVwVG9GcmVlTGlzdCk7CisgICAgc3dlZXAoJmZyZWVMaXN0KTsK
IH0KIAogdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjp6YXAoY29uc3QgRnJlZUxpc3QmIGZyZWVM
aXN0KQogewotICAgIGZvckVhY2hGcmVlQ2VsbCgKLSAgICAgICAgZnJlZUxpc3QsCisgICAgZnJl
ZUxpc3QuZm9yRWFjaCgKICAgICAgICAgWyZdIChIZWFwQ2VsbCogY2VsbCkgewogICAgICAgICAg
ICAgaWYgKG1fYXR0cmlidXRlcy5kZXN0cnVjdGlvbiA9PSBOZWVkc0Rlc3RydWN0aW9uKQogICAg
ICAgICAgICAgICAgIGNlbGwtPnphcCgpOwogICAgICAgICB9KTsKIH0KIAotdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuYz4KLXZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6Zm9yRWFjaEZyZWVDZWxsKGNv
bnN0IEZyZWVMaXN0JiBmcmVlTGlzdCwgY29uc3QgRnVuYyYgZnVuYykKLXsKLSAgICBpZiAoZnJl
ZUxpc3QucmVtYWluaW5nKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgcmVtYWluaW5nID0gZnJl
ZUxpc3QucmVtYWluaW5nOyByZW1haW5pbmc7IHJlbWFpbmluZyAtPSBjZWxsU2l6ZSgpKQotICAg
ICAgICAgICAgZnVuYyhiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPihmcmVlTGlzdC5wYXlsb2FkRW5k
IC0gcmVtYWluaW5nKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZm9yIChGcmVlQ2VsbCogY3Vy
cmVudCA9IGZyZWVMaXN0LmhlYWQ7IGN1cnJlbnQ7KSB7Ci0gICAgICAgICAgICBGcmVlQ2VsbCog
bmV4dCA9IGN1cnJlbnQtPm5leHQ7Ci0gICAgICAgICAgICBmdW5jKGJpdHdpc2VfY2FzdDxIZWFw
Q2VsbCo+KGN1cnJlbnQpKTsKLSAgICAgICAgICAgIGN1cnJlbnQgPSBuZXh0OwotICAgICAgICB9
Ci0gICAgfQotfQotCiB2b2lkIE1hcmtlZEJsb2NrOjphYm91dFRvTWFya1Nsb3coSGVhcFZlcnNp
b24gbWFya2luZ1ZlcnNpb24pCiB7CiAgICAgQVNTRVJUKHZtKCktPmhlYXAub2JqZWN0U3BhY2Uo
KS5pc01hcmtpbmcoKSk7CkBAIC00MDcsMjAgKzM5MywyMiBAQCBTdWJzcGFjZSogTWFya2VkQmxv
Y2s6OkhhbmRsZTo6c3Vic3BhY2UoCiAgICAgcmV0dXJuIGFsbG9jYXRvcigpLT5zdWJzcGFjZSgp
OwogfQogCi1GcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzd2VlcChTd2VlcE1vZGUgc3dl
ZXBNb2RlKQordm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzd2VlcChGcmVlTGlzdCogZnJlZUxp
c3QpCiB7CiAgICAgU3dlZXBpbmdTY29wZSBzd2VlcGluZ1Njb3BlKCpoZWFwKCkpOwogICAgIAor
ICAgIFN3ZWVwTW9kZSBzd2VlcE1vZGUgPSBmcmVlTGlzdCA/IFN3ZWVwVG9GcmVlTGlzdCA6IFN3
ZWVwT25seTsKKyAgICAKICAgICBtX2FsbG9jYXRvci0+c2V0SXNVbnN3ZXB0KE5vTG9ja2luZ05l
Y2Vzc2FyeSwgdGhpcywgZmFsc2UpOwogICAgIAogICAgIG1fd2Vha1NldC5zd2VlcCgpOwogCiAg
ICAgaWYgKHN3ZWVwTW9kZSA9PSBTd2VlcE9ubHkgJiYgbV9hdHRyaWJ1dGVzLmRlc3RydWN0aW9u
ID09IERvZXNOb3ROZWVkRGVzdHJ1Y3Rpb24pCi0gICAgICAgIHJldHVybiBGcmVlTGlzdCgpOwor
ICAgICAgICByZXR1cm47CiAKICAgICBpZiAoVU5MSUtFTFkobV9pc0ZyZWVMaXN0ZWQpKSB7CiAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKHN3ZWVwTW9kZSA9PSBTd2VlcFRvRnJlZUxpc3QpOwotICAg
ICAgICByZXR1cm4gRnJlZUxpc3QoKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKICAg
ICBBU1NFUlQoIW1fYWxsb2NhdG9yLT5pc0FsbG9jYXRlZChOb0xvY2tpbmdOZWNlc3NhcnksIHRo
aXMpKTsKQEAgLTQyOCw4ICs0MTYsMTAgQEAgRnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6
c3dlZXAoU3dlZQogICAgIGlmIChzcGFjZSgpLT5pc01hcmtpbmcoKSkKICAgICAgICAgYmxvY2so
KS5tX2xvY2subG9jaygpOwogICAgIAotICAgIGlmIChtX2F0dHJpYnV0ZXMuZGVzdHJ1Y3Rpb24g
PT0gTmVlZHNEZXN0cnVjdGlvbikKLSAgICAgICAgcmV0dXJuIHN1YnNwYWNlKCktPmZpbmlzaFN3
ZWVwKCp0aGlzLCBzd2VlcE1vZGUpOworICAgIGlmIChtX2F0dHJpYnV0ZXMuZGVzdHJ1Y3Rpb24g
PT0gTmVlZHNEZXN0cnVjdGlvbikgeworICAgICAgICBzdWJzcGFjZSgpLT5maW5pc2hTd2VlcCgq
dGhpcywgZnJlZUxpc3QpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgIAogICAgIC8vIEhh
bmRsZSB0aGUgbm8tZGVzdHJ1Y3RvciBzcGVjaWFsaXphdGlvbnMgaGVyZSwgc2luY2Ugd2UgaGF2
ZSB0aGUgbW9zdCBvZiB0aG9zZS4gVGhpcwogICAgIC8vIGVuc3VyZXMgdGhhdCB0aGV5IGRvbid0
IGdldCByZS1zcGVjaWFsaXplZCBmb3IgZXZlcnkgZGVzdHJ1Y3RvciBzcGFjZS4KQEAgLTQzOSw3
ICs0MjksNiBAQCBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzd2VlcChTd2VlCiAgICAg
TmV3bHlBbGxvY2F0ZWRNb2RlIG5ld2x5QWxsb2NhdGVkTW9kZSA9IHRoaXMtPm5ld2x5QWxsb2Nh
dGVkTW9kZSgpOwogICAgIE1hcmtzTW9kZSBtYXJrc01vZGUgPSB0aGlzLT5tYXJrc01vZGUoKTsK
ICAgICAKLSAgICBGcmVlTGlzdCByZXN1bHQ7CiAgICAgYXV0byB0cnlTcGVjaWFsaXplZCA9IFsm
XSAoKSAtPiBib29sIHsKICAgICAgICAgaWYgKHN3ZWVwTW9kZSAhPSBTd2VlcFRvRnJlZUxpc3Qp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC00NTIsMjAgKzQ0MSwyMCBAQCBGcmVlTGlz
dCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzd2VlcChTd2VlCiAgICAgICAgIGNhc2UgSXNFbXB0eToK
ICAgICAgICAgICAgIHN3aXRjaCAobWFya3NNb2RlKSB7CiAgICAgICAgICAgICBjYXNlIE1hcmtz
Tm90U3RhbGU6Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gc3BlY2lhbGl6ZWRTd2VlcDx0cnVl
LCBJc0VtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzTm9EZXN0cnVjdG9ycywgRG9udFNj
cmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBNYXJrc05vdFN0YWxlPihJc0VtcHR5
LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzTm9EZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBE
b2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBNYXJrc05vdFN0YWxlLCBbXSAoVk0mLCBKU0NlbGwq
KSB7IH0pOworICAgICAgICAgICAgICAgIHNwZWNpYWxpemVkU3dlZXA8dHJ1ZSwgSXNFbXB0eSwg
U3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9l
c05vdEhhdmVOZXdseUFsbG9jYXRlZCwgTWFya3NOb3RTdGFsZT4oZnJlZUxpc3QsIElzRW1wdHks
IFN3ZWVwVG9GcmVlTGlzdCwgQmxvY2tIYXNOb0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUsIERv
ZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzTm90U3RhbGUsIFtdIChWTSYsIEpTQ2VsbCop
IHsgfSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICBjYXNlIE1h
cmtzU3RhbGU6Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gc3BlY2lhbGl6ZWRTd2VlcDx0cnVl
LCBJc0VtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzTm9EZXN0cnVjdG9ycywgRG9udFNj
cmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBNYXJrc1N0YWxlPihJc0VtcHR5LCBT
d2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzTm9EZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBEb2Vz
Tm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBNYXJrc1N0YWxlLCBbXSAoVk0mLCBKU0NlbGwqKSB7IH0p
OworICAgICAgICAgICAgICAgIHNwZWNpYWxpemVkU3dlZXA8dHJ1ZSwgSXNFbXB0eSwgU3dlZXBU
b0ZyZWVMaXN0LCBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9lc05vdEhh
dmVOZXdseUFsbG9jYXRlZCwgTWFya3NTdGFsZT4oZnJlZUxpc3QsIElzRW1wdHksIFN3ZWVwVG9G
cmVlTGlzdCwgQmxvY2tIYXNOb0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUsIERvZXNOb3RIYXZl
TmV3bHlBbGxvY2F0ZWQsIE1hcmtzU3RhbGUsIFtdIChWTSYsIEpTQ2VsbCopIHsgfSk7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBOb3RFbXB0eToKICAgICAgICAgICAgIHN3aXRjaCAobWFya3NNb2Rl
KSB7CiAgICAgICAgICAgICBjYXNlIE1hcmtzTm90U3RhbGU6Ci0gICAgICAgICAgICAgICAgcmVz
dWx0ID0gc3BlY2lhbGl6ZWRTd2VlcDx0cnVlLCBOb3RFbXB0eSwgU3dlZXBUb0ZyZWVMaXN0LCBC
bG9ja0hhc05vRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9lc05vdEhhdmVOZXdseUFsbG9j
YXRlZCwgTWFya3NOb3RTdGFsZT4oSXNFbXB0eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hhc05v
RGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCwgTWFy
a3NOb3RTdGFsZSwgW10gKFZNJiwgSlNDZWxsKikgeyB9KTsKKyAgICAgICAgICAgICAgICBzcGVj
aWFsaXplZFN3ZWVwPHRydWUsIE5vdEVtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzTm9E
ZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBNYXJr
c05vdFN0YWxlPihmcmVlTGlzdCwgSXNFbXB0eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hhc05v
RGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCwgTWFy
a3NOb3RTdGFsZSwgW10gKFZNJiwgSlNDZWxsKikgeyB9KTsKICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgICAgIGNhc2UgTWFya3NTdGFsZToKLSAgICAgICAgICAgICAgICBy
ZXN1bHQgPSBzcGVjaWFsaXplZFN3ZWVwPHRydWUsIE5vdEVtcHR5LCBTd2VlcFRvRnJlZUxpc3Qs
IEJsb2NrSGFzTm9EZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxs
b2NhdGVkLCBNYXJrc1N0YWxlPihJc0VtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzTm9E
ZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBNYXJr
c1N0YWxlLCBbXSAoVk0mLCBKU0NlbGwqKSB7IH0pOworICAgICAgICAgICAgICAgIHNwZWNpYWxp
emVkU3dlZXA8dHJ1ZSwgTm90RW1wdHksIFN3ZWVwVG9GcmVlTGlzdCwgQmxvY2tIYXNOb0Rlc3Ry
dWN0b3JzLCBEb250U2NyaWJibGUsIERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzU3Rh
bGU+KGZyZWVMaXN0LCBJc0VtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzTm9EZXN0cnVj
dG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBNYXJrc1N0YWxl
LCBbXSAoVk0mLCBKU0NlbGwqKSB7IH0pOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CkBAIC00NzUsMTAgKzQ2NCwxNiBAQCBG
cmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzd2VlcChTd2VlCiAgICAgfTsKICAgICAKICAg
ICBpZiAodHJ5U3BlY2lhbGl6ZWQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAg
cmV0dXJuOwogCiAgICAgLy8gVGhlIHRlbXBsYXRlIGFyZ3VtZW50cyBkb24ndCBtYXR0ZXIgYmVj
YXVzZSB0aGUgZmlyc3Qgb25lIGlzIGZhbHNlLgotICAgIHJldHVybiBzcGVjaWFsaXplZFN3ZWVw
PGZhbHNlLCBJc0VtcHR5LCBTd2VlcE9ubHksIEJsb2NrSGFzTm9EZXN0cnVjdG9ycywgRG9udFNj
cmliYmxlLCBIYXNOZXdseUFsbG9jYXRlZCwgTWFya3NTdGFsZT4oZW1wdHlNb2RlLCBzd2VlcE1v
ZGUsIEJsb2NrSGFzTm9EZXN0cnVjdG9ycywgc2NyaWJibGVNb2RlLCBuZXdseUFsbG9jYXRlZE1v
ZGUsIG1hcmtzTW9kZSwgW10gKFZNJiwgSlNDZWxsKikgeyB9KTsKKyAgICBzcGVjaWFsaXplZFN3
ZWVwPGZhbHNlLCBJc0VtcHR5LCBTd2VlcE9ubHksIEJsb2NrSGFzTm9EZXN0cnVjdG9ycywgRG9u
dFNjcmliYmxlLCBIYXNOZXdseUFsbG9jYXRlZCwgTWFya3NTdGFsZT4oZnJlZUxpc3QsIGVtcHR5
TW9kZSwgc3dlZXBNb2RlLCBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMsIHNjcmliYmxlTW9kZSwgbmV3
bHlBbGxvY2F0ZWRNb2RlLCBtYXJrc01vZGUsIFtdIChWTSYsIEpTQ2VsbCopIHsgfSk7Cit9CisK
K2Jvb2wgTWFya2VkQmxvY2s6OkhhbmRsZTo6aXNGcmVlTGlzdGVkQ2VsbChjb25zdCB2b2lkKiB0
YXJnZXQpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlzRnJlZUxpc3RlZCgpKTsKKyAgICByZXR1cm4g
bV9hbGxvY2F0b3ItPmlzRnJlZUxpc3RlZENlbGwodGFyZ2V0KTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJKHJl
dmlzaW9uIDIxNzY0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2Nr
LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDcgKzIzLDYgQEAKIAogI2luY2x1ZGUgIkFsbG9jYXRv
ckF0dHJpYnV0ZXMuaCIKICNpbmNsdWRlICJEZXN0cnVjdGlvbk1vZGUuaCIKLSNpbmNsdWRlICJG
cmVlTGlzdC5oIgogI2luY2x1ZGUgIkhlYXBDZWxsLmgiCiAjaW5jbHVkZSAiSXRlcmF0aW9uU3Rh
dHVzLmgiCiAjaW5jbHVkZSAiV2Vha1NldC5oIgpAQCAtMzYsNiArMzUsNyBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAKK2NsYXNzIEZyZWVMaXN0OwogY2xhc3MgSGVhcDsKIGNsYXNzIEpTQ2Vs
bDsKIGNsYXNzIE1hcmtlZEFsbG9jYXRvcjsKQEAgLTExNywyMSArMTE3LDIyIEBAIHB1YmxpYzoK
ICAgICAgICAgVk0qIHZtKCkgY29uc3Q7CiAgICAgICAgIFdlYWtTZXQmIHdlYWtTZXQoKTsKICAg
ICAgICAgICAgIAorICAgICAgICBlbnVtIFN3ZWVwTW9kZSB7IFN3ZWVwT25seSwgU3dlZXBUb0Zy
ZWVMaXN0IH07CisKICAgICAgICAgLy8gU3dlZXBpbmcgZW5zdXJlcyB0aGF0IGRlc3RydWN0b3Jz
IGdldCBjYWxsZWQgYW5kIHJlbW92ZXMgdGhlIGJsb2NrIGZyb20gdGhlIHVuc3dlcHQKICAgICAg
ICAgLy8gc2V0LiBTd2VlcGluZyB0byBmcmVlIGxpc3QgYWxzbyByZW1vdmVzIHRoZSBibG9jayBm
cm9tIHRoZSBlbXB0eSBzZXQsIGlmIGl0IHdhcyBpbiB0aGF0CiAgICAgICAgIC8vIHNldC4gU3dl
ZXBpbmcgd2l0aCBTd2VlcE9ubHkgbWF5IGFkZCB0aGlzIGJsb2NrIHRvIHRoZSBlbXB0eSBzZXQs
IGlmIHRoZSBibG9jayBpcyBmb3VuZAotICAgICAgICAvLyB0byBiZSBlbXB0eS4KKyAgICAgICAg
Ly8gdG8gYmUgZW1wdHkuIFRoZSBmcmVlLWxpc3QgYmVpbmcgbnVsbCBpbXBsaWVzIFN3ZWVwT25s
eS4KICAgICAgICAgLy8KICAgICAgICAgLy8gTm90ZSB0aGF0IHlvdSBuZWVkIHRvIG1ha2Ugc3Vy
ZSB0aGF0IHRoZSBlbXB0eSBiaXQgcmVmbGVjdHMgcmVhbGl0eS4gSWYgaXQncyBub3Qgc2V0CiAg
ICAgICAgIC8vIGFuZCB0aGUgYmxvY2sgaXMgZnJlc2hseSBjcmVhdGVkLCB0aGVuIHdlJ2xsIG1h
a2UgdGhlIG1pc3Rha2Ugb2YgcnVubmluZyBkZXN0cnVjdG9ycyBpbgogICAgICAgICAvLyB0aGUg
YmxvY2suIElmIGl0J3Mgbm90IHNldCBhbmQgdGhlIGJsb2NrIGhhcyBub3RoaW5nIG1hcmtlZCwg
dGhlbiB3ZSdsbCBtYWtlIHRoZQogICAgICAgICAvLyBtaXN0YWtlIG9mIG1ha2luZyBhIHBvcCBm
cmVlbGlzdCByYXRoZXIgdGhhbiBhIGJ1bXAgZnJlZWxpc3QuCi0gICAgICAgIGVudW0gU3dlZXBN
b2RlIHsgU3dlZXBPbmx5LCBTd2VlcFRvRnJlZUxpc3QgfTsKLSAgICAgICAgRnJlZUxpc3Qgc3dl
ZXAoU3dlZXBNb2RlID0gU3dlZXBPbmx5KTsKKyAgICAgICAgdm9pZCBzd2VlcChGcmVlTGlzdCop
OwogICAgICAgICAKICAgICAgICAgLy8gVGhpcyBpcyB0byBiZSBjYWxsZWQgYnkgU3Vic3BhY2Uu
CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIERlc3Ryb3lGdW5jPgotICAgICAgICBGcmVlTGlz
dCBmaW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZShTd2VlcE1vZGUsIGNvbnN0IERlc3Ryb3lGdW5j
Jik7CisgICAgICAgIHZvaWQgZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2UoRnJlZUxpc3QqLCBj
b25zdCBEZXN0cm95RnVuYyYpOwogICAgICAgICAKICAgICAgICAgdm9pZCB1bnN3ZWVwV2l0aE5v
TmV3bHlBbGxvY2F0ZWQoKTsKICAgICAgICAgCkBAIC0xNDcsNyArMTQ4LDcgQEAgcHVibGljOgog
ICAgICAgICAvLyBvZiB0aGVzZSBmdW5jdGlvbnM6CiAgICAgICAgIHZvaWQgZGlkQ29uc3VtZUZy
ZWVMaXN0KCk7IC8vIENhbGwgdGhpcyBvbmNlIHlvdSd2ZSBhbGxvY2F0ZWQgYWxsIHRoZSBpdGVt
cyBpbiB0aGUgZnJlZSBsaXN0LgogICAgICAgICB2b2lkIHN0b3BBbGxvY2F0aW5nKGNvbnN0IEZy
ZWVMaXN0Jik7Ci0gICAgICAgIEZyZWVMaXN0IHJlc3VtZUFsbG9jYXRpbmcoKTsgLy8gQ2FsbCB0
aGlzIGlmIHlvdSBjYW5vbmljYWxpemVkIGEgYmxvY2sgZm9yIHNvbWUgbm9uLWNvbGxlY3Rpb24g
cmVsYXRlZCBwdXJwb3NlLgorICAgICAgICB2b2lkIHJlc3VtZUFsbG9jYXRpbmcoRnJlZUxpc3Qm
KTsgLy8gQ2FsbCB0aGlzIGlmIHlvdSBjYW5vbmljYWxpemVkIGEgYmxvY2sgZm9yIHNvbWUgbm9u
LWNvbGxlY3Rpb24gcmVsYXRlZCBwdXJwb3NlLgogICAgICAgICAgICAgCiAgICAgICAgIHNpemVf
dCBjZWxsU2l6ZSgpOwogICAgICAgICBpbmxpbmUgdW5zaWduZWQgY2VsbHNQZXJCbG9jaygpOwpA
QCAtMjE1LDEwICsyMTYsNyBAQCBwdWJsaWM6CiAgICAgICAgIE1hcmtzTW9kZSBtYXJrc01vZGUo
KTsKICAgICAgICAgCiAgICAgICAgIHRlbXBsYXRlPGJvb2wsIEVtcHR5TW9kZSwgU3dlZXBNb2Rl
LCBTd2VlcERlc3RydWN0aW9uTW9kZSwgU2NyaWJibGVNb2RlLCBOZXdseUFsbG9jYXRlZE1vZGUs
IE1hcmtzTW9kZSwgdHlwZW5hbWUgRGVzdHJveUZ1bmM+Ci0gICAgICAgIEZyZWVMaXN0IHNwZWNp
YWxpemVkU3dlZXAoRW1wdHlNb2RlLCBTd2VlcE1vZGUsIFN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlLCBT
Y3JpYmJsZU1vZGUsIE5ld2x5QWxsb2NhdGVkTW9kZSwgTWFya3NNb2RlLCBjb25zdCBEZXN0cm95
RnVuYyYpOwotICAgICAgICAKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLSAgICAg
ICAgdm9pZCBmb3JFYWNoRnJlZUNlbGwoY29uc3QgRnJlZUxpc3QmLCBjb25zdCBGdW5jJik7Cisg
ICAgICAgIHZvaWQgc3BlY2lhbGl6ZWRTd2VlcChGcmVlTGlzdCosIEVtcHR5TW9kZSwgU3dlZXBN
b2RlLCBTd2VlcERlc3RydWN0aW9uTW9kZSwgU2NyaWJibGVNb2RlLCBOZXdseUFsbG9jYXRlZE1v
ZGUsIE1hcmtzTW9kZSwgY29uc3QgRGVzdHJveUZ1bmMmKTsKICAgICAgICAgCiAgICAgICAgIHZv
aWQgc2V0SXNGcmVlTGlzdGVkKCk7CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya2VkQmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2tJbmxpbmVzLmgJKHJldmlzaW9uIDIxNzY0NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrSW5saW5lcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTcsMTIgKzExNyw2IEBAIGlubGluZSBib29sIE1hcmtlZEJsb2NrOjpIYW5k
bGU6OmlzTGl2ZUMKICAgICByZXR1cm4gaXNMaXZlKG1hcmtpbmdWZXJzaW9uLCBpc01hcmtpbmcs
IHN0YXRpY19jYXN0PGNvbnN0IEhlYXBDZWxsKj4ocCkpOwogfQogCi1pbmxpbmUgYm9vbCBNYXJr
ZWRCbG9jazo6SGFuZGxlOjppc0ZyZWVMaXN0ZWRDZWxsKGNvbnN0IHZvaWQqIHRhcmdldCkgY29u
c3QKLXsKLSAgICBBU1NFUlQoaXNGcmVlTGlzdGVkKCkpOwotICAgIHJldHVybiBtX2FsbG9jYXRv
ci0+aXNGcmVlTGlzdGVkQ2VsbCh0YXJnZXQpOwotfQotCiAvLyBUaGUgZm9sbG93aW5nIGhhcyB0
byBiZSB0cnVlIGZvciBzcGVjaWFsaXphdGlvbiB0byBraWNrIGluOgogLy8KIC8vIHN3ZWVwTW9k
ZSA9PSBTd2VlcFRvRnJlZUxpc3QKQEAgLTE0NSw3ICsxMzksNyBAQCBpbmxpbmUgYm9vbCBNYXJr
ZWRCbG9jazo6SGFuZGxlOjppc0ZyZWVMCiAvLyBPbmx5IHRoZSBEb2VzTm90TmVlZERlc3RydWN0
aW9uIG9uZSBzaG91bGQgYmUgc3BlY2lhbGl6ZWQgYnkgTWFya2VkQmxvY2suCiAKIHRlbXBsYXRl
PGJvb2wgc3BlY2lhbGl6ZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6RW1wdHlNb2RlIHNwZWNpYWxp
emVkRW1wdHlNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcE1vZGUgc3BlY2lhbGl6ZWRT
d2VlcE1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlIHNwZWNp
YWxpemVkRGVzdHJ1Y3Rpb25Nb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTY3JpYmJsZU1vZGUg
c3BlY2lhbGl6ZWRTY3JpYmJsZU1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6Ok5ld2x5QWxsb2Nh
dGVkTW9kZSBzcGVjaWFsaXplZE5ld2x5QWxsb2NhdGVkTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRs
ZTo6TWFya3NNb2RlIHNwZWNpYWxpemVkTWFya3NNb2RlLCB0eXBlbmFtZSBEZXN0cm95RnVuYz4K
LUZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxpemVkU3dlZXAoTWFya2VkQmxv
Y2s6OkhhbmRsZTo6RW1wdHlNb2RlIGVtcHR5TW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U3dl
ZXBNb2RlIHN3ZWVwTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBEZXN0cnVjdGlvbk1v
ZGUgZGVzdHJ1Y3Rpb25Nb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTY3JpYmJsZU1vZGUgc2Ny
aWJibGVNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpOZXdseUFsbG9jYXRlZE1vZGUgbmV3bHlB
bGxvY2F0ZWRNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpNYXJrc01vZGUgbWFya3NNb2RlLCBj
b25zdCBEZXN0cm95RnVuYyYgZGVzdHJveUZ1bmMpCit2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6
OnNwZWNpYWxpemVkU3dlZXAoRnJlZUxpc3QqIGZyZWVMaXN0LCBNYXJrZWRCbG9jazo6SGFuZGxl
OjpFbXB0eU1vZGUgZW1wdHlNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcE1vZGUgc3dl
ZXBNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcERlc3RydWN0aW9uTW9kZSBkZXN0cnVj
dGlvbk1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlNjcmliYmxlTW9kZSBzY3JpYmJsZU1vZGUs
IE1hcmtlZEJsb2NrOjpIYW5kbGU6Ok5ld2x5QWxsb2NhdGVkTW9kZSBuZXdseUFsbG9jYXRlZE1v
ZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6Ok1hcmtzTW9kZSBtYXJrc01vZGUsIGNvbnN0IERlc3Ry
b3lGdW5jJiBkZXN0cm95RnVuYykKIHsKICAgICBpZiAoc3BlY2lhbGl6ZSkgewogICAgICAgICBl
bXB0eU1vZGUgPSBzcGVjaWFsaXplZEVtcHR5TW9kZTsKQEAgLTE2NSw2ICsxNTksOCBAQCBGcmVl
TGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzcGVjaWFsaXplCiAgICAgaWYgKGZhbHNlKQogICAg
ICAgICBkYXRhTG9nKFJhd1BvaW50ZXIodGhpcyksICIvIiwgUmF3UG9pbnRlcigmYmxvY2spLCAi
OiBNYXJrZWRCbG9jazo6SGFuZGxlOjpzcGVjaWFsaXplZFN3ZWVwIVxuIik7CiAgICAgCisgICAg
dW5zaWduZWQgY2VsbFNpemUgPSB0aGlzLT5jZWxsU2l6ZSgpOworICAgIAogICAgIGlmIChPcHRp
b25zOjp1c2VCdW1wQWxsb2NhdG9yKCkKICAgICAgICAgJiYgZW1wdHlNb2RlID09IElzRW1wdHkK
ICAgICAgICAgJiYgbmV3bHlBbGxvY2F0ZWRNb2RlID09IERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0
ZWQpIHsKQEAgLTE4Miw3ICsxNzgsNyBAQCBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpz
cGVjaWFsaXplCiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGNoYXIqIHN0YXJ0T2ZMYXN0
Q2VsbCA9IHN0YXRpY19jYXN0PGNoYXIqPihjZWxsQWxpZ24oYmxvY2suYXRvbXMoKSArIG1fZW5k
QXRvbSAtIDEpKTsKLSAgICAgICAgY2hhciogcGF5bG9hZEVuZCA9IHN0YXJ0T2ZMYXN0Q2VsbCAr
IGNlbGxTaXplKCk7CisgICAgICAgIGNoYXIqIHBheWxvYWRFbmQgPSBzdGFydE9mTGFzdENlbGwg
KyBjZWxsU2l6ZTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQocGF5bG9hZEVuZCAtIE1hcmtlZEJs
b2NrOjpibG9ja1NpemUgPD0gYml0d2lzZV9jYXN0PGNoYXIqPigmYmxvY2spKTsKICAgICAgICAg
Y2hhciogcGF5bG9hZEJlZ2luID0gYml0d2lzZV9jYXN0PGNoYXIqPihibG9jay5hdG9tcygpICsg
Zmlyc3RBdG9tKCkpOwogICAgICAgICBpZiAoc2NyaWJibGVNb2RlID09IFNjcmliYmxlKQpAQCAt
MTkzLDEwICsxODksMTEgQEAgRnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3BlY2lhbGl6
ZQogICAgICAgICAgICAgbV9hbGxvY2F0b3ItPnNldElzRW1wdHkoTm9Mb2NraW5nTmVjZXNzYXJ5
LCB0aGlzLCB0cnVlKTsKICAgICAgICAgaWYgKHNwYWNlKCktPmlzTWFya2luZygpKQogICAgICAg
ICAgICAgYmxvY2subV9sb2NrLnVubG9jaygpOwotICAgICAgICBGcmVlTGlzdCByZXN1bHQgPSBG
cmVlTGlzdDo6YnVtcChwYXlsb2FkRW5kLCBwYXlsb2FkRW5kIC0gcGF5bG9hZEJlZ2luKTsKKyAg
ICAgICAgaWYgKHN3ZWVwTW9kZSA9PSBTd2VlcFRvRnJlZUxpc3QpCisgICAgICAgICAgICBmcmVl
TGlzdC0+aW5pdGlhbGl6ZUJ1bXAocGF5bG9hZEVuZCwgcGF5bG9hZEVuZCAtIHBheWxvYWRCZWdp
bik7CiAgICAgICAgIGlmIChmYWxzZSkKLSAgICAgICAgICAgIGRhdGFMb2coIlF1aWNrbHkgc3dl
cHQgYmxvY2sgIiwgUmF3UG9pbnRlcih0aGlzKSwgIiB3aXRoIGNlbGwgc2l6ZSAiLCBjZWxsU2l6
ZSgpLCAiIGFuZCBhdHRyaWJ1dGVzICIsIG1fYXR0cmlidXRlcywgIjogIiwgcmVzdWx0LCAiXG4i
KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIGRhdGFMb2coIlF1aWNrbHkg
c3dlcHQgYmxvY2sgIiwgUmF3UG9pbnRlcih0aGlzKSwgIiB3aXRoIGNlbGwgc2l6ZSAiLCBjZWxs
U2l6ZSwgIiBhbmQgYXR0cmlidXRlcyAiLCBtX2F0dHJpYnV0ZXMsICI6ICIsIHBvaW50ZXJEdW1w
KGZyZWVMaXN0KSwgIlxuIik7CisgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICAvLyBUaGlz
IHByb2R1Y2VzIGEgZnJlZSBsaXN0IHRoYXQgaXMgb3JkZXJlZCBpbiByZXZlcnNlIHRocm91Z2gg
dGhlIGJsb2NrLgpAQCAtMjA0LDYgKzIwMSw4IEBAIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5k
bGU6OnNwZWNpYWxpemUKICAgICAvLyBvcmRlciBvZiB0aGUgZnJlZSBsaXN0LgogICAgIEZyZWVD
ZWxsKiBoZWFkID0gMDsKICAgICBzaXplX3QgY291bnQgPSAwOworICAgIHVpbnRwdHJfdCBzZWNy
ZXQ7CisgICAgY3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21WYWx1ZXMoJnNlY3JldCwgc2l6ZW9mKHVp
bnRwdHJfdCkpOwogICAgIGJvb2wgaXNFbXB0eSA9IHRydWU7CiAgICAgVmVjdG9yPHNpemVfdD4g
ZGVhZENlbGxzOwogICAgIFZNJiB2bSA9ICp0aGlzLT52bSgpOwpAQCAtMjIxLDggKzIyMCw4IEBA
IEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxpemUKICAgICAgICAgaWYgKHN3
ZWVwTW9kZSA9PSBTd2VlcFRvRnJlZUxpc3QpIHsKICAgICAgICAgICAgIEZyZWVDZWxsKiBmcmVl
Q2VsbCA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEZyZWVDZWxsKj4oY2VsbCk7CiAgICAgICAgICAg
ICBpZiAoc2NyaWJibGVNb2RlID09IFNjcmliYmxlKQotICAgICAgICAgICAgICAgIHNjcmliYmxl
KGZyZWVDZWxsLCBjZWxsU2l6ZSgpKTsKLSAgICAgICAgICAgIGZyZWVDZWxsLT5uZXh0ID0gaGVh
ZDsKKyAgICAgICAgICAgICAgICBzY3JpYmJsZShmcmVlQ2VsbCwgY2VsbFNpemUpOworICAgICAg
ICAgICAgZnJlZUNlbGwtPnNldE5leHQoaGVhZCwgc2VjcmV0KTsKICAgICAgICAgICAgIGhlYWQg
PSBmcmVlQ2VsbDsKICAgICAgICAgICAgICsrY291bnQ7CiAgICAgICAgIH0KQEAgLTI1NCwyNiAr
MjUzLDI1IEBAIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxpemUKICAgICAg
ICAgICAgIGhhbmRsZURlYWRDZWxsKGkpOwogICAgIH0KIAotICAgIEZyZWVMaXN0IHJlc3VsdCA9
IEZyZWVMaXN0OjpsaXN0KGhlYWQsIGNvdW50ICogY2VsbFNpemUoKSk7Ci0gICAgaWYgKHN3ZWVw
TW9kZSA9PSBTd2VlcFRvRnJlZUxpc3QpCisgICAgaWYgKHN3ZWVwTW9kZSA9PSBTd2VlcFRvRnJl
ZUxpc3QpIHsKKyAgICAgICAgZnJlZUxpc3QtPmluaXRpYWxpemVMaXN0KGhlYWQsIHNlY3JldCwg
Y291bnQgKiBjZWxsU2l6ZSk7CiAgICAgICAgIHNldElzRnJlZUxpc3RlZCgpOwotICAgIGVsc2Ug
aWYgKGlzRW1wdHkpCisgICAgfSBlbHNlIGlmIChpc0VtcHR5KQogICAgICAgICBtX2FsbG9jYXRv
ci0+c2V0SXNFbXB0eShOb0xvY2tpbmdOZWNlc3NhcnksIHRoaXMsIHRydWUpOwogICAgIGlmIChm
YWxzZSkKLSAgICAgICAgZGF0YUxvZygiU2xvd2x5IHN3ZXB0IGJsb2NrICIsIFJhd1BvaW50ZXIo
JmJsb2NrKSwgIiB3aXRoIGNlbGwgc2l6ZSAiLCBjZWxsU2l6ZSgpLCAiIGFuZCBhdHRyaWJ1dGVz
ICIsIG1fYXR0cmlidXRlcywgIjogIiwgcmVzdWx0LCAiXG4iKTsKLSAgICByZXR1cm4gcmVzdWx0
OworICAgICAgICBkYXRhTG9nKCJTbG93bHkgc3dlcHQgYmxvY2sgIiwgUmF3UG9pbnRlcigmYmxv
Y2spLCAiIHdpdGggY2VsbCBzaXplICIsIGNlbGxTaXplLCAiIGFuZCBhdHRyaWJ1dGVzICIsIG1f
YXR0cmlidXRlcywgIjogIiwgcG9pbnRlckR1bXAoZnJlZUxpc3QpLCAiXG4iKTsKIH0KIAogdGVt
cGxhdGU8dHlwZW5hbWUgRGVzdHJveUZ1bmM+Ci1GcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxl
OjpmaW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZShTd2VlcE1vZGUgc3dlZXBNb2RlLCBjb25zdCBE
ZXN0cm95RnVuYyYgZGVzdHJveUZ1bmMpCit2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmZpbmlz
aFN3ZWVwS25vd2luZ1N1YnNwYWNlKEZyZWVMaXN0KiBmcmVlTGlzdCwgY29uc3QgRGVzdHJveUZ1
bmMmIGRlc3Ryb3lGdW5jKQogeworICAgIFN3ZWVwTW9kZSBzd2VlcE1vZGUgPSBmcmVlTGlzdCA/
IFN3ZWVwVG9GcmVlTGlzdCA6IFN3ZWVwT25seTsKICAgICBTd2VlcERlc3RydWN0aW9uTW9kZSBk
ZXN0cnVjdGlvbk1vZGUgPSB0aGlzLT5zd2VlcERlc3RydWN0aW9uTW9kZSgpOwogICAgIEVtcHR5
TW9kZSBlbXB0eU1vZGUgPSB0aGlzLT5lbXB0eU1vZGUoKTsKICAgICBTY3JpYmJsZU1vZGUgc2Ny
aWJibGVNb2RlID0gdGhpcy0+c2NyaWJibGVNb2RlKCk7CiAgICAgTmV3bHlBbGxvY2F0ZWRNb2Rl
IG5ld2x5QWxsb2NhdGVkTW9kZSA9IHRoaXMtPm5ld2x5QWxsb2NhdGVkTW9kZSgpOwogICAgIE1h
cmtzTW9kZSBtYXJrc01vZGUgPSB0aGlzLT5tYXJrc01vZGUoKTsKIAotICAgIEZyZWVMaXN0IHJl
c3VsdDsKICAgICBhdXRvIHRyeVNwZWNpYWxpemVkID0gWyZdICgpIC0+IGJvb2wgewogICAgICAg
ICBpZiAoc3dlZXBNb2RlICE9IFN3ZWVwVG9GcmVlTGlzdCkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKQEAgLTI4OCwxMCArMjg2LDEwIEBAIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6
OmZpbmlzaFN3ZWUKICAgICAgICAgCiAgICAgICAgIHN3aXRjaCAobWFya3NNb2RlKSB7CiAgICAg
ICAgIGNhc2UgTWFya3NOb3RTdGFsZToKLSAgICAgICAgICAgIHJlc3VsdCA9IHNwZWNpYWxpemVk
U3dlZXA8dHJ1ZSwgTm90RW1wdHksIFN3ZWVwVG9GcmVlTGlzdCwgQmxvY2tIYXNEZXN0cnVjdG9y
cywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBNYXJrc05vdFN0YWxl
PihJc0VtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzRGVzdHJ1Y3RvcnMsIERvbnRTY3Jp
YmJsZSwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCwgTWFya3NOb3RTdGFsZSwgZGVzdHJveUZ1
bmMpOworICAgICAgICAgICAgc3BlY2lhbGl6ZWRTd2VlcDx0cnVlLCBOb3RFbXB0eSwgU3dlZXBU
b0ZyZWVMaXN0LCBCbG9ja0hhc0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUsIERvZXNOb3RIYXZl
TmV3bHlBbGxvY2F0ZWQsIE1hcmtzTm90U3RhbGU+KGZyZWVMaXN0LCBJc0VtcHR5LCBTd2VlcFRv
RnJlZUxpc3QsIEJsb2NrSGFzRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9lc05vdEhhdmVO
ZXdseUFsbG9jYXRlZCwgTWFya3NOb3RTdGFsZSwgZGVzdHJveUZ1bmMpOwogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIGNhc2UgTWFya3NTdGFsZToKLSAgICAgICAgICAgIHJlc3Vs
dCA9IHNwZWNpYWxpemVkU3dlZXA8dHJ1ZSwgTm90RW1wdHksIFN3ZWVwVG9GcmVlTGlzdCwgQmxv
Y2tIYXNEZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVk
LCBNYXJrc1N0YWxlPihJc0VtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzRGVzdHJ1Y3Rv
cnMsIERvbnRTY3JpYmJsZSwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCwgTWFya3NTdGFsZSwg
ZGVzdHJveUZ1bmMpOworICAgICAgICAgICAgc3BlY2lhbGl6ZWRTd2VlcDx0cnVlLCBOb3RFbXB0
eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hhc0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUsIERv
ZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzU3RhbGU+KGZyZWVMaXN0LCBJc0VtcHR5LCBT
d2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9lc05v
dEhhdmVOZXdseUFsbG9jYXRlZCwgTWFya3NTdGFsZSwgZGVzdHJveUZ1bmMpOwogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0yOTksMTAgKzI5NywxMCBA
QCBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpmaW5pc2hTd2VlCiAgICAgfTsKICAgICAK
ICAgICBpZiAodHJ5U3BlY2lhbGl6ZWQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgcmV0dXJuOwogICAgIAogICAgIC8vIFRoZSB0ZW1wbGF0ZSBhcmd1bWVudHMgZG9uJ3QgbWF0
dGVyIGJlY2F1c2UgdGhlIGZpcnN0IG9uZSBpcyBmYWxzZS4KLSAgICByZXR1cm4gc3BlY2lhbGl6
ZWRTd2VlcDxmYWxzZSwgSXNFbXB0eSwgU3dlZXBPbmx5LCBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMs
IERvbnRTY3JpYmJsZSwgSGFzTmV3bHlBbGxvY2F0ZWQsIE1hcmtzU3RhbGU+KGVtcHR5TW9kZSwg
c3dlZXBNb2RlLCBkZXN0cnVjdGlvbk1vZGUsIHNjcmliYmxlTW9kZSwgbmV3bHlBbGxvY2F0ZWRN
b2RlLCBtYXJrc01vZGUsIGRlc3Ryb3lGdW5jKTsKKyAgICBzcGVjaWFsaXplZFN3ZWVwPGZhbHNl
LCBJc0VtcHR5LCBTd2VlcE9ubHksIEJsb2NrSGFzTm9EZXN0cnVjdG9ycywgRG9udFNjcmliYmxl
LCBIYXNOZXdseUFsbG9jYXRlZCwgTWFya3NTdGFsZT4oZnJlZUxpc3QsIGVtcHR5TW9kZSwgc3dl
ZXBNb2RlLCBkZXN0cnVjdGlvbk1vZGUsIHNjcmliYmxlTW9kZSwgbmV3bHlBbGxvY2F0ZWRNb2Rl
LCBtYXJrc01vZGUsIGRlc3Ryb3lGdW5jKTsKIH0KIAogaW5saW5lIE1hcmtlZEJsb2NrOjpIYW5k
bGU6OlN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlIE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN3ZWVwRGVzdHJ1
Y3Rpb25Nb2RlKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5jcHAJ
KHJldmlzaW9uIDIxNzY0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsOSArNzcsOSBAQCBTdWJzcGFjZTo6flN1YnNwYWNl
KCkKIHsKIH0KIAotRnJlZUxpc3QgU3Vic3BhY2U6OmZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpI
YW5kbGUmIGJsb2NrLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcE1vZGUgc3dlZXBNb2RlKQor
dm9pZCBTdWJzcGFjZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYgYmxvY2ssIEZy
ZWVMaXN0KiBmcmVlTGlzdCkKIHsKLSAgICByZXR1cm4gYmxvY2suZmluaXNoU3dlZXBLbm93aW5n
U3Vic3BhY2Uoc3dlZXBNb2RlLCBEZXN0cm95RnVuYygpKTsKKyAgICBibG9jay5maW5pc2hTd2Vl
cEtub3dpbmdTdWJzcGFjZShmcmVlTGlzdCwgRGVzdHJveUZ1bmMoKSk7CiB9CiAKIHZvaWQgU3Vi
c3BhY2U6OmRlc3Ryb3koVk0mIHZtLCBKU0NlbGwqIGNlbGwpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1N1YnNwYWNlLmgJKHJldmlzaW9uIDIxNzY0NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAg
cHVibGljOgogICAgIAogICAgIC8vIFRoZSBwdXJwb3NlIG9mIG92ZXJyaWRpbmcgdGhpcyBpcyB0
byBzcGVjaWFsaXplIHRoZSBzd2VlcCBmb3IgeW91ciBkZXN0cnVjdG9ycy4gVGhpcyB3b24ndAog
ICAgIC8vIGJlIGNhbGxlZCBmb3Igbm8tZGVzdHJ1Y3RvciBibG9ja3MuIFRoaXMgbXVzdCBjYWxs
IE1hcmtlZEJsb2NrOjpmaW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZS4KLSAgICB2aXJ0dWFsIEZy
ZWVMaXN0IGZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmLCBNYXJrZWRCbG9jazo6SGFu
ZGxlOjpTd2VlcE1vZGUpOworICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hTd2VlcChNYXJrZWRCbG9j
azo6SGFuZGxlJiwgRnJlZUxpc3QqKTsKICAgICAKICAgICAvLyBUaGVzZSBnZXQgY2FsbGVkIGZv
ciBsYXJnZSBvYmplY3RzLgogICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KFZNJiwgSlNDZWxsKik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZUlubGluZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZUlubGluZXMuaAko
cmV2aXNpb24gMjE3NjQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2VJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNwcmFnbWEgb25jZQog
CiAjaW5jbHVkZSAiSlNDZWxsLmgiCi0jaW5jbHVkZSAiTWFya2VkQWxsb2NhdG9yLmgiCisjaW5j
bHVkZSAiTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIk1hcmtlZEJsb2NrLmgi
CiAjaW5jbHVkZSAiTWFya2VkU3BhY2UuaCIKICNpbmNsdWRlICJTdWJzcGFjZS5oIgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAy
MTc2NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNDU4LDcgKzE0NTgsNyBAQCBwdWJsaWM6CiAgICAgICAgIEp1bXAg
cG9wUGF0aDsKICAgICAgICAgSnVtcCBkb25lOwogICAgICAgICAKLSAgICAgICAgbG9hZDMyKEFk
ZHJlc3MoYWxsb2NhdG9yR1BSLCBNYXJrZWRBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKSAr
IE9CSkVDVF9PRkZTRVRPRihGcmVlTGlzdCwgcmVtYWluaW5nKSksIHJlc3VsdEdQUik7CisgICAg
ICAgIGxvYWQzMihBZGRyZXNzKGFsbG9jYXRvckdQUiwgTWFya2VkQWxsb2NhdG9yOjpvZmZzZXRP
ZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZSZW1haW5pbmcoKSksIHJlc3VsdEdQUik7
CiAgICAgICAgIHBvcFBhdGggPSBicmFuY2hUZXN0MzIoWmVybywgcmVzdWx0R1BSKTsKICAgICAg
ICAgaWYgKGFsbG9jYXRvcikKICAgICAgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigtYWxsb2Nh
dG9yLT5jZWxsU2l6ZSgpKSwgcmVzdWx0R1BSLCBzY3JhdGNoR1BSKTsKQEAgLTE0NzIsOCArMTQ3
Miw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBuZWdQdHIo
cmVzdWx0R1BSKTsKLSAgICAgICAgc3RvcmUzMihzY3JhdGNoR1BSLCBBZGRyZXNzKGFsbG9jYXRv
ckdQUiwgTWFya2VkQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBPQkpFQ1RfT0ZGU0VU
T0YoRnJlZUxpc3QsIHJlbWFpbmluZykpKTsKLSAgICAgICAgQWRkcmVzcyBwYXlsb2FkRW5kQWRk
ciA9IEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBNYXJrZWRBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxp
c3QoKSArIE9CSkVDVF9PRkZTRVRPRihGcmVlTGlzdCwgcGF5bG9hZEVuZCkpOworICAgICAgICBz
dG9yZTMyKHNjcmF0Y2hHUFIsIEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBNYXJrZWRBbGxvY2F0b3I6
Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZlJlbWFpbmluZygpKSk7Cisg
ICAgICAgIEFkZHJlc3MgcGF5bG9hZEVuZEFkZHIgPSBBZGRyZXNzKGFsbG9jYXRvckdQUiwgTWFy
a2VkQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZQYXls
b2FkRW5kKCkpOwogICAgICAgICBpZiAoaXNYODYoKSkKICAgICAgICAgICAgIGFkZFB0cihwYXls
b2FkRW5kQWRkciwgcmVzdWx0R1BSKTsKICAgICAgICAgZWxzZSB7CkBAIC0xNDg1LDEzICsxNDg1
LDE5IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIHBvcFBhdGgubGluayh0aGlzKTsKICAg
ICAgICAgCi0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhhbGxvY2F0b3JHUFIsIE1hcmtlZEFsbG9j
YXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgT0JKRUNUX09GRlNFVE9GKEZyZWVMaXN0LCBoZWFk
KSksIHJlc3VsdEdQUik7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhhbGxvY2F0b3JHUFIsIE1h
cmtlZEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mU2Ny
YW1ibGVkSGVhZCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgaWYgKGlzWDg2KCkpCisgICAgICAg
ICAgICB4b3JQdHIoQWRkcmVzcyhhbGxvY2F0b3JHUFIsIE1hcmtlZEFsbG9jYXRvcjo6b2Zmc2V0
T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mU2VjcmV0KCkpLCByZXN1bHRHUFIpOwor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhhbGxvY2F0b3JHUFIs
IE1hcmtlZEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9m
U2VjcmV0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIHhvclB0cihzY3JhdGNoR1BSLCBy
ZXN1bHRHUFIpOworICAgICAgICB9CiAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hUZXN0
UHRyKFplcm8sIHJlc3VsdEdQUikpOwogICAgICAgICAKICAgICAgICAgLy8gVGhlIG9iamVjdCBp
cyBoYWxmLWFsbG9jYXRlZDogd2UgaGF2ZSB3aGF0IHdlIGtub3cgaXMgYSBmcmVzaCBvYmplY3Qs
IGJ1dAogICAgICAgICAvLyBpdCdzIHN0aWxsIG9uIHRoZSBHQydzIGZyZWUgbGlzdC4KICAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdEdQUiksIHNjcmF0Y2hHUFIpOwotICAgICAgICBzdG9y
ZVB0cihzY3JhdGNoR1BSLCBBZGRyZXNzKGFsbG9jYXRvckdQUiwgTWFya2VkQWxsb2NhdG9yOjpv
ZmZzZXRPZkZyZWVMaXN0KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRnJlZUxpc3QsIGhlYWQpKSk7Cisg
ICAgICAgIHN0b3JlUHRyKHNjcmF0Y2hHUFIsIEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBNYXJrZWRB
bGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZlNjcmFtYmxl
ZEhlYWQoKSkpOwogICAgICAgICAKICAgICAgICAgZG9uZS5saW5rKHRoaXMpOwogICAgIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vi
c3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
RGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UuY3BwCShyZXZpc2lvbiAyMTc2NDYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTIsOSArNTIsOSBAQCBKU0Rlc3RydWN0aWJsZU9iamVjdFN1
YnNwYWNlOjp+SlNEZXN0cnVjCiB7CiB9CiAKLUZyZWVMaXN0IEpTRGVzdHJ1Y3RpYmxlT2JqZWN0
U3Vic3BhY2U6OmZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmIGhhbmRsZSwgTWFya2Vk
QmxvY2s6OkhhbmRsZTo6U3dlZXBNb2RlIHN3ZWVwTW9kZSkKK3ZvaWQgSlNEZXN0cnVjdGlibGVP
YmplY3RTdWJzcGFjZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYgaGFuZGxlLCBG
cmVlTGlzdCogZnJlZUxpc3QpCiB7Ci0gICAgcmV0dXJuIGhhbmRsZS5maW5pc2hTd2VlcEtub3dp
bmdTdWJzcGFjZShzd2VlcE1vZGUsIERlc3Ryb3lGdW5jKCkpOworICAgIGhhbmRsZS5maW5pc2hT
d2VlcEtub3dpbmdTdWJzcGFjZShmcmVlTGlzdCwgRGVzdHJveUZ1bmMoKSk7CiB9CiAKIHZvaWQg
SlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZTo6ZGVzdHJveShWTSYgdm0sIEpTQ2VsbCogY2Vs
bCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0U3Vic3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlLmgJKHJldmlzaW9uIDIxNzY0NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAm
KTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIH5KU0Rlc3RydWN0aWJsZU9iamVjdFN1
YnNwYWNlKCk7CiAgICAgCi0gICAgRnJlZUxpc3QgZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6Okhh
bmRsZSYsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwTW9kZSkgb3ZlcnJpZGU7CisgICAgdm9p
ZCBmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiwgRnJlZUxpc3QqKSBvdmVycmlkZTsK
ICAgICB2b2lkIGRlc3Ryb3koVk0mLCBKU0NlbGwqKSBvdmVycmlkZTsKIH07CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJz
cGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
ZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlLmNwcAkocmV2aXNpb24gMjE3NjQ2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1
YnNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsOSArNTIsOSBAQCBKU1NlZ21lbnRlZFZh
cmlhYmxlT2JqZWN0U3Vic3BhY2U6On5KU1NlCiB7CiB9CiAKLUZyZWVMaXN0IEpTU2VnbWVudGVk
VmFyaWFibGVPYmplY3RTdWJzcGFjZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYg
aGFuZGxlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcE1vZGUgc3dlZXBNb2RlKQordm9pZCBK
U1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2U6OmZpbmlzaFN3ZWVwKE1hcmtlZEJsb2Nr
OjpIYW5kbGUmIGhhbmRsZSwgRnJlZUxpc3QqIGZyZWVMaXN0KQogewotICAgIHJldHVybiBoYW5k
bGUuZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2Uoc3dlZXBNb2RlLCBEZXN0cm95RnVuYygpKTsK
KyAgICBoYW5kbGUuZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2UoZnJlZUxpc3QsIERlc3Ryb3lG
dW5jKCkpOwogfQogCiB2b2lkIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZTo6ZGVz
dHJveShWTSYgdm0sIEpTQ2VsbCogY2VsbCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RT
dWJzcGFjZS5oCShyZXZpc2lvbiAyMTc2NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UuaAkod29ya2luZyBjb3B5KQpA
QCAtMzQsNyArMzQsNyBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNTZWdtZW50
ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlKENTdHJpbmcgbmFtZSwgSGVhcCYpOwogICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZpcnR1YWwgfkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZSgp
OwogICAgIAotICAgIEZyZWVMaXN0IGZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmLCBN
YXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcE1vZGUpIG92ZXJyaWRlOworICAgIHZvaWQgZmluaXNo
U3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYsIEZyZWVMaXN0Kikgb3ZlcnJpZGU7CiAgICAgdm9p
ZCBkZXN0cm95KFZNJiwgSlNDZWxsKikgb3ZlcnJpZGU7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ1N1YnNwYWNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ1N1YnNwYWNlLmNwcAkocmV2aXNp
b24gMjE3NjQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdTdWJz
cGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDkgKzUyLDkgQEAgSlNTdHJpbmdTdWJzcGFj
ZTo6fkpTU3RyaW5nU3Vic3BhY2UoKQogewogfQogCi1GcmVlTGlzdCBKU1N0cmluZ1N1YnNwYWNl
OjpmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiBoYW5kbGUsIE1hcmtlZEJsb2NrOjpI
YW5kbGU6OlN3ZWVwTW9kZSBzd2VlcE1vZGUpCit2b2lkIEpTU3RyaW5nU3Vic3BhY2U6OmZpbmlz
aFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmIGhhbmRsZSwgRnJlZUxpc3QqIGZyZWVMaXN0KQog
ewotICAgIHJldHVybiBoYW5kbGUuZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2Uoc3dlZXBNb2Rl
LCBEZXN0cm95RnVuYygpKTsKKyAgICBoYW5kbGUuZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2Uo
ZnJlZUxpc3QsIERlc3Ryb3lGdW5jKCkpOwogfQogCiB2b2lkIEpTU3RyaW5nU3Vic3BhY2U6OmRl
c3Ryb3koVk0mIHZtLCBKU0NlbGwqIGNlbGwpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1N0cmluZ1N1YnNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdTdWJzcGFjZS5oCShyZXZpc2lvbiAyMTc2NDYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ1N1YnNwYWNlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM0LDcgKzM0LDcgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIEpT
U3RyaW5nU3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJik7CiAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgdmlydHVhbCB+SlNTdHJpbmdTdWJzcGFjZSgpOwogICAgIAotICAgIEZyZWVMaXN0IGZpbmlz
aFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcE1v
ZGUpIG92ZXJyaWRlOworICAgIHZvaWQgZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYs
IEZyZWVMaXN0Kikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkZXN0cm95KFZNJiwgSlNDZWxsKikgb3Zl
cnJpZGU7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25z
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5o
CShyZXZpc2lvbiAyMTc2NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRp
b25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2Miw3ICszNjIsNyBAQCB0eXBlZGVmIGNvbnN0IGNo
YXIqIG9wdGlvblN0cmluZzsKICAgICB2KGdjTG9nTGV2ZWwsIGxvZ0dDLCBHQ0xvZ2dpbmc6Ok5v
bmUsIE5vcm1hbCwgImRlYnVnZ2luZyBvcHRpb24gdG8gbG9nIEdDIGFjdGl2aXR5ICgwID0gTm9u
ZSwgMSA9IEJhc2ljLCAyID0gVmVyYm9zZSkiKSBcCiAgICAgdihib29sLCB1c2VHQywgdHJ1ZSwg
Tm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihib29sLCBnY0F0RW5kLCBmYWxzZSwgTm9ybWFsLCAi
SWYgdHJ1ZSwgdGhlIGpzYyBDTEkgd2lsbCBkbyBhIEdDIGJlZm9yZSBleGl0aW5nIikgXAotICAg
IHYoYm9vbCwgZm9yY2VHQ1Nsb3dQYXRocywgZmFsc2UsIE5vcm1hbCwgIklmIHRydWUsIHdlIHdp
bGwgZm9yY2UgYWxsIEpJVCBmYXN0IGFsbG9jYXRpb25zIGRvd24gdGhlaXIgc2xvdyBwYXRocy4i
KVwKKyAgICB2KGJvb2wsIGZvcmNlR0NTbG93UGF0aHMsIGZhbHNlLCBOb3JtYWwsICJJZiB0cnVl
LCB3ZSB3aWxsIGZvcmNlIGFsbCBKSVQgZmFzdCBhbGxvY2F0aW9ucyBkb3duIHRoZWlyIHNsb3cg
cGF0aHMuIikgXAogICAgIHYodW5zaWduZWQsIGdjTWF4SGVhcFNpemUsIDAsIE5vcm1hbCwgbnVs
bHB0cikgXAogICAgIHYodW5zaWduZWQsIGZvcmNlUkFNU2l6ZSwgMCwgTm9ybWFsLCBudWxscHRy
KSBcCiAgICAgdihib29sLCByZWNvcmRHQ1BhdXNlVGltZXMsIGZhbHNlLCBOb3JtYWwsIG51bGxw
dHIpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlD
b2RlQmxvY2tTdWJzcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmNwcAkocmV2aXNpb24gMjE3
NjQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVC
bG9ja1N1YnNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsOSArNTYsOSBAQCBKU1dlYkFz
c2VtYmx5Q29kZUJsb2NrU3Vic3BhY2U6On5KU1dlYkFzCiB7CiB9CiAKLUZyZWVMaXN0IEpTV2Vi
QXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRs
ZSYgaGFuZGxlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcE1vZGUgc3dlZXBNb2RlKQordm9p
ZCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2U6OmZpbmlzaFN3ZWVwKE1hcmtlZEJsb2Nr
OjpIYW5kbGUmIGhhbmRsZSwgRnJlZUxpc3QqIGZyZWVMaXN0KQogewotICAgIHJldHVybiBoYW5k
bGUuZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2Uoc3dlZXBNb2RlLCBEZXN0cm95RnVuYygpKTsK
KyAgICBoYW5kbGUuZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2UoZnJlZUxpc3QsIERlc3Ryb3lG
dW5jKCkpOwogfQogCiB2b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZTo6ZGVzdHJv
eShWTSYgdm0sIEpTQ2VsbCogY2VsbCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5o
CShyZXZpc2lvbiAyMTc2NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYs
NyBAQCBwdWJsaWM6CiAgICAgSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlKENTdHJpbmcg
bmFtZSwgSGVhcCYpOwogICAgIHZpcnR1YWwgfkpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFj
ZSgpOwogICAgIAotICAgIEZyZWVMaXN0IGZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUm
LCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcE1vZGUpIG92ZXJyaWRlOworICAgIHZvaWQgZmlu
aXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYsIEZyZWVMaXN0Kikgb3ZlcnJpZGU7CiAgICAg
dm9pZCBkZXN0cm95KFZNJiwgSlNDZWxsKikgb3ZlcnJpZGU7CiB9OwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>311783</attachid>
            <date>2017-06-01 17:03:22 -0700</date>
            <delta_ts>2017-06-01 17:13:52 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>59790</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjE3NjYyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMCBA
QAorMjAxNy0wNi0wMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEdDIHNob3VsZCB1c2UgYSBzY3JhbWJsZWQgZnJlZS1saXN0CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzI3OTMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFByZXZpb3VzbHksIG91ciBidW1w
J24ncG9wIGFsbG9jYXRvciB3b3VsZCB1c2UgYSBjb252ZW50aW9uYWwgbGlua2VkLWxpc3QgZm9y
IHRoZSBmcmVlLWxpc3QuCisgICAgICAgIFRoZSBsaW5rZWQtbGlzdCB3b3VsZCBiZSB0aHJlYWRl
ZCB0aHJvdWdoIGZyZWUgbWVtb3J5LCBhcyBpcyB0aGUgdXN1YWwgY29udmVudGlvbi4KKyAgICAg
ICAgCisgICAgICAgIFRoaXMgc2NyYW1ibGVzIHRoZSBuZXh0IHBvaW50ZXJzIG9mIHRoYXQgZnJl
ZS1saXN0LiBJdCBhbHNvIHNjcmFtYmxlcyB0aGUgaGVhZCBwb2ludGVyLCBiZWNhdXNlCisgICAg
ICAgIHRoaXMgbGVhZHMgdG8gYSBtb3JlIG5hdHVyYWwgZmFzdC1wYXRoIHN0cnVjdHVyZSBhbmQg
c2F2ZXMgb25lIHJlZ2lzdGVyIG9uIEFSTTY0LgorICAgICAgICAKKyAgICAgICAgVGhlIHNlY3Jl
dCB3aXRoIHdoaWNoIHBvaW50ZXJzIGFyZSBzY3JhbWJsZWQgaXMgcGVyLWFsbG9jYXRvci4gQWxs
b2NhdG9ycyBjaG9vc2UgYSBuZXcgc2VjcmV0CisgICAgICAgIGV2ZXJ5IHRpbWUgdGhleSBkbyBh
IHN3ZWVwLXRvLXBvcC4KKyAgICAgICAgCisgICAgICAgIFRoaXMgZG9lc24ndCBjaGFuZ2UgdGhl
IGJlaGF2aW9yIG9mIHRoZSBidW1wIHBhcnQgb2YgYnVtcCduJ3BvcCwgYnV0IGl0IGRvZXMgcmVm
YWN0b3IgdGhlIGNvZGUKKyAgICAgICAgcXVpdGUgYSBiaXQuIFByZXZpb3VzbHksIHRoZXJlIHdl
cmUgZm91ciBjb3BpZXMgb2YgdGhlIGFsbG9jYXRvciBmYXN0IHBhdGg6IHR3byBpbgorICAgICAg
ICBNYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmgsIG9uZSBpbiBNYXJrZWRBbGxvY2F0b3IuY3BwLCBh
bmQgb25lIGluIEFzc2VtYmx5SGVscGVycy5oLiBUaGUgSklUIG9uZQorICAgICAgICB3YXMgb2J2
aW91c2x5IGRpZmZlcmVudC1sb29raW5nLCBidXQgdGhlIG90aGVyIHRocmVlIHdlcmUgYWxtb3N0
IGlkZW50aWNhbC4gVGhpcyBtb3ZlcyBhbGwgb2YKKyAgICAgICAgdGhhdCBsb2dpYyBpbnRvIEZy
ZWVMaXN0LiBUaGVyZSBhcmUgbm93IGp1c3QgdHdvIGNvcGllcyBvZiB0aGUgYWxsb2NhdG9yOiBG
cmVlTGlzdElubGluZXMuaCBhbmQKKyAgICAgICAgQXNzZW1ibHlIZWxwZXJzLmguCisgICAgICAg
IAorICAgICAgICBUaGlzIGFwcGVhcnMgdG8gYmUganVzdCBhcyBmYXN0IGFzIG91ciBwcmV2aW91
c2x5IGFsbG9jYXRvci4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogaGVhcC9GcmVlTGlzdC5jcHA6CisgICAgICAgIChKU0M6
OkZyZWVMaXN0OjpGcmVlTGlzdCk6CisgICAgICAgIChKU0M6OkZyZWVMaXN0Ojp+RnJlZUxpc3Qp
OgorICAgICAgICAoSlNDOjpGcmVlTGlzdDo6Y2xlYXIpOgorICAgICAgICAoSlNDOjpGcmVlTGlz
dDo6aW5pdGlhbGl6ZUxpc3QpOgorICAgICAgICAoSlNDOjpGcmVlTGlzdDo6aW5pdGlhbGl6ZUJ1
bXApOgorICAgICAgICAoSlNDOjpGcmVlTGlzdDo6Y29udGFpbnMpOgorICAgICAgICAoSlNDOjpG
cmVlTGlzdDo6ZHVtcCk6CisgICAgICAgICogaGVhcC9GcmVlTGlzdC5oOgorICAgICAgICAoSlND
OjpGcmVlTGlzdDo6YWxsb2NhdGlvbldpbGxGYWlsKToKKyAgICAgICAgKEpTQzo6RnJlZUxpc3Q6
Om9yaWdpbmFsU2l6ZSk6CisgICAgICAgIChKU0M6OkZyZWVMaXN0OjphZGRyZXNzT2ZMaXN0KToK
KyAgICAgICAgKEpTQzo6RnJlZUxpc3Q6Om9mZnNldE9mQmxvY2spOgorICAgICAgICAoSlNDOjpG
cmVlTGlzdDo6b2Zmc2V0T2ZMaXN0KToKKyAgICAgICAgKEpTQzo6RnJlZUxpc3Q6Om9mZnNldE9m
SW5kZXgpOgorICAgICAgICAoSlNDOjpGcmVlTGlzdDo6b2Zmc2V0T2ZQYXlsb2FkRW5kKToKKyAg
ICAgICAgKEpTQzo6RnJlZUxpc3Q6Om9mZnNldE9mUmVtYWluaW5nKToKKyAgICAgICAgKEpTQzo6
RnJlZUxpc3Q6Om9mZnNldE9mT3JpZ2luYWxTaXplKToKKyAgICAgICAgKEpTQzo6RnJlZUxpc3Q6
OkZyZWVMaXN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6RnJlZUxpc3Q6Omxpc3QpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpGcmVlTGlzdDo6YnVtcCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkZyZWVMaXN0OjpvcGVyYXRvcj09KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6RnJlZUxp
c3Q6Om9wZXJhdG9yIT0pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpGcmVlTGlzdDo6b3BlcmF0
b3IgYm9vbCk6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9GcmVlTGlzdElubGluZXMuaDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkZyZWVMaXN0OjphZGRGcmVlQ2VsbCk6CisgICAgICAgIChKU0M6
OkZyZWVMaXN0OjphbGxvY2F0ZSk6CisgICAgICAgIChKU0M6OkZyZWVMaXN0Ojpmb3JFYWNoKToK
KyAgICAgICAgKEpTQzo6RnJlZUxpc3Q6OnRvT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6RnJlZUxp
c3Q6OmZyb21PZmZzZXQpOgorICAgICAgICAqIGhlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmNwcDoK
KyAgICAgICAgKEpTQzo6SW5jcmVtZW50YWxTd2VlcGVyOjpzd2VlcE5leHRCbG9jayk6CisgICAg
ICAgICogaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxv
Y2F0b3I6Ok1hcmtlZEFsbG9jYXRvcik6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6
ZGlkQ29uc3VtZUZyZWVMaXN0KToKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjp0cnlB
bGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKToKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9y
Ojp0cnlBbGxvY2F0ZUluKToKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjphbGxvY2F0
ZVNsb3dDYXNlSW1wbCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6c3RvcEFsbG9j
YXRpbmcpOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OnByZXBhcmVGb3JBbGxvY2F0
aW9uKToKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjpyZXN1bWVBbGxvY2F0aW5nKToK
KyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjpzd2VlcCk6CisgICAgICAgIChKU0M6Ok1h
cmtlZEFsbG9jYXRvcjo6c2V0RnJlZUxpc3QpOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvTWFy
a2VkQWxsb2NhdG9yLmg6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6ZnJlZUxpc3Qp
OgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OmlzRnJlZUxpc3RlZENlbGwpOiBEZWxl
dGVkLgorICAgICAgICAqIGhlYXAvTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oOgorICAgICAgICAo
SlNDOjpNYXJrZWRBbGxvY2F0b3I6OmlzRnJlZUxpc3RlZENlbGwpOgorICAgICAgICAoSlNDOjpN
YXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlKToKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2Nh
dG9yOjphbGxvY2F0ZSk6CisgICAgICAgICogaGVhcC9NYXJrZWRCbG9jay5jcHA6CisgICAgICAg
IChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6OnN0b3BBbGxvY2F0aW5nKToKKyAgICAgICAgKEpT
Qzo6TWFya2VkQmxvY2s6OkhhbmRsZTo6bGFzdENoYW5jZVRvRmluYWxpemUpOgorICAgICAgICAo
SlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjpyZXN1bWVBbGxvY2F0aW5nKToKKyAgICAgICAgKEpT
Qzo6TWFya2VkQmxvY2s6OkhhbmRsZTo6emFwKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6
OkhhbmRsZTo6c3dlZXApOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjppc0Zy
ZWVMaXN0ZWRDZWxsKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OkhhbmRsZTo6Zm9yRWFj
aEZyZWVDZWxsKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL01hcmtlZEJsb2NrLmg6CisgICAg
ICAgICogaGVhcC9NYXJrZWRCbG9ja0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6TWFya2VkQmxv
Y2s6OkhhbmRsZTo6c3BlY2lhbGl6ZWRTd2VlcCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2Nr
OjpIYW5kbGU6OmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlKToKKyAgICAgICAgKEpTQzo6TWFy
a2VkQmxvY2s6OkhhbmRsZTo6aXNGcmVlTGlzdGVkQ2VsbCk6IERlbGV0ZWQuCisgICAgICAgICog
aGVhcC9TdWJzcGFjZS5jcHA6CisgICAgICAgIChKU0M6OlN1YnNwYWNlOjpmaW5pc2hTd2VlcCk6
CisgICAgICAgICogaGVhcC9TdWJzcGFjZS5oOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBl
cnMuaDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0QWxsb2NhdGVXaXRoTm9u
TnVsbEFsbG9jYXRvcik6CisgICAgICAgICogcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdFN1
YnNwYWNlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZTo6
ZmluaXNoU3dlZXApOgorICAgICAgICAqIHJ1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RTdWJz
cGFjZS5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNw
YWNlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNl
OjpmaW5pc2hTd2VlcCk6CisgICAgICAgICogcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2Jq
ZWN0U3Vic3BhY2UuaDoKKyAgICAgICAgKiBydW50aW1lL0pTU3RyaW5nU3Vic3BhY2UuY3BwOgor
ICAgICAgICAoSlNDOjpKU1N0cmluZ1N1YnNwYWNlOjpmaW5pc2hTd2VlcCk6CisgICAgICAgICog
cnVudGltZS9KU1N0cmluZ1N1YnNwYWNlLmg6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrU3Vic3BhY2UuY3BwOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Q29k
ZUJsb2NrU3Vic3BhY2U6OmZpbmlzaFN3ZWVwKToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNz
ZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5oOgorCiAyMDE3LTA2LTAxICBUb21hcyBQb3BlbGEgIDx0
cG9wZWxhQHJlZGhhdC5jb20+LCBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpIGluIEluZmVycmVkVHlwZTo6a2luZEZv
ckZsYWdzKCkgb24gQmlnLUVuZGlhbnMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CShyZXZpc2lvbiAyMTc2NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTAxLDYgKzUw
MSw3IEBACiAJCTBGNjRCMjc5MUE3OTU3QjIwMDZFNEU2NiAvKiBDYWxsRWRnZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY0QjI3NzFBNzk1N0Iy
MDA2RTRFNjYgLyogQ2FsbEVkZ2UuY3BwICovOyB9OwogCQkwRjY0QjI3QTFBNzk1N0IyMDA2RTRF
NjYgLyogQ2FsbEVkZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGNjRCMjc4MUE3OTU3QjIwMDZFNEU2NiAvKiBDYWxsRWRnZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNjRFQUYzMUM0RUNEMDYw
MDYyMUU5QiAvKiBBaXJBcmdJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjY0RUFGMjFDNEVDRDA2MDA2MjFFOUIgLyogQWlyQXJnSW5saW5l
cy5oICovOyB9OworCQkwRjY1ODVFMTFFRTA4MDVBMDA5NTE3NkQgLyogRnJlZUxpc3RJbmxpbmVz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY1ODVF
MDFFRTA4MDU3MDA5NTE3NkQgLyogRnJlZUxpc3RJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY2NjBFMzcxRTA1MTdCOTAwMzE0NjJD
IC8qIE1hcmtpbmdDb25zdHJhaW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNjYwRTMzMUUwNTE3QjcwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3Ry
YWludC5jcHAgKi87IH07CiAJCTBGNjYwRTM4MUUwNTE3QkIwMDMxNDYyQyAvKiBNYXJraW5nQ29u
c3RyYWludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY2NjBFMzQxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY2NjBFMzkxRTA1MTdC
RjAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50U2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjYwRTM1MUUwNTE3QjcwMDMxNDYyQyAvKiBN
YXJraW5nQ29uc3RyYWludFNldC5jcHAgKi87IH07CkBAIC0zMDc3LDYgKzMwNzgsNyBAQAogCQkw
RjY0QjI3NzFBNzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2UuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gQ2FsbEVkZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjY0QjI3ODFBNzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2UuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FsbEVkZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY2NEVBRjIxQzRFQ0QwNjAwNjIxRTlCIC8qIEFpckFyZ0lubGluZXMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyQXJnSW5saW5lcy5oOyBwYXRoID0gYjMv
YWlyL0FpckFyZ0lubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2NTg1
RTAxRUUwODA1NzAwOTUxNzZEIC8qIEZyZWVMaXN0SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBGcmVlTGlzdElubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY2NjBFMzMxRTA1MTdCNzAwMzE0NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hcmtpbmdDb25zdHJhaW50
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2NjBFMzQxRTA1MTdCNzAwMzE0
NjJDIC8qIE1hcmtpbmdDb25zdHJhaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IE1hcmtpbmdDb25zdHJhaW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
NjYwRTM1MUUwNTE3QjcwMDMxNDYyQyAvKiBNYXJraW5nQ29uc3RyYWludFNldC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYXJraW5nQ29uc3RyYWludFNldC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02MDE5LDYgKzYwMjEsNyBAQAogCQkJCTJB
ODM2Mzg0MThEN0QwRUUwMDAwRUJDQyAvKiBFZGVuR0NBY3Rpdml0eUNhbGxiYWNrLmggKi8sCiAJ
CQkJMEY1NTEzQTcxRDVBNjhDQjAwQzMyQkQ4IC8qIEZyZWVMaXN0LmNwcCAqLywKIAkJCQkwRjU1
MTNBNTFENUE2ODJBMDBDMzJCRDggLyogRnJlZUxpc3QuaCAqLywKKwkJCQkwRjY1ODVFMDFFRTA4
MDU3MDA5NTE3NkQgLyogRnJlZUxpc3RJbmxpbmVzLmggKi8sCiAJCQkJMkE4MzYzODcxOEQ3RDBG
RTAwMDBFQkNDIC8qIEZ1bGxHQ0FjdGl2aXR5Q2FsbGJhY2suY3BwICovLAogCQkJCTJBODM2Mzg4
MThEN0QwRkUwMDAwRUJDQyAvKiBGdWxsR0NBY3Rpdml0eUNhbGxiYWNrLmggKi8sCiAJCQkJMkFB
Q0U2M0ExOENBNUEwMzAwRUQwMTkxIC8qIEdDQWN0aXZpdHlDYWxsYmFjay5jcHAgKi8sCkBAIC04
NjYxLDYgKzg2NjQsNyBAQAogCQkJCTBGMjM1QkVFMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JF
eGl0UHJlcGFyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkM2M0I3MUU2MzQzRUQwMEMx
MzgzOSAvKiBCM0F0b21pY1ZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjYyMzc5ODFBRTQ1
Q0E3MDBENDAyRUEgLyogREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRjY1ODVFMTFFRTA4MDVBMDA5NTE3NkQgLyogRnJlZUxpc3RJbmxpbmVzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkZGQzk1QzE0RUY5MEFGMDBDNzI1MzIgLyogREZHUGhhc2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTM3QzczOEQyMUVEQjU2RTQwMDNGMkIwQiAvKiBQYXJzZUludC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYyQjlDRUIxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1BoaUNoaWxk
cmVuLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDIxNzY0NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtNjQzLDYgKzY0MywxMCBAQCBwdWJsaWM6CiAgICAgICAgIHhvcjMyKGltbSwgc3JjRGVzdCk7
CiAgICAgfQogCisgICAgdm9pZCB4b3JQdHIoQWRkcmVzcyBzcmMsIFJlZ2lzdGVySUQgZGVzdCkK
KyAgICB7CisgICAgICAgIHhvcjMyKHNyYywgZGVzdCk7CisgICAgfQogCiAgICAgdm9pZCBsb2Fk
UHRyKEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewpAQCAt
OTUzLDYgKzk1NywxMSBAQCBwdWJsaWM6CiAgICAgICAgIHhvcjY0KHNyYywgZGVzdCk7CiAgICAg
fQogICAgIAorICAgIHZvaWQgeG9yUHRyKEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisg
ICAgeworICAgICAgICB4b3I2NChzcmMsIGRlc3QpOworICAgIH0KKyAgICAKICAgICB2b2lkIHhv
clB0cihSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBkZXN0KQogICAgIHsKICAgICAgICAgeG9yNjQo
c3JjLCBkZXN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXJBUk02NC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCShyZXZpc2lvbiAyMTc2NDYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAkod29ya2luZyBj
b3B5KQpAQCAtOTA5LDYgKzkwOSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIHhvcjMyKGRlc3QsIHNy
YywgZGVzdCk7CiAgICAgfQogCisgICAgdm9pZCB4b3IzMihBZGRyZXNzIHNyYywgUmVnaXN0ZXJJ
RCBkZXN0KQorICAgIHsKKyAgICAgICAgbG9hZDMyKHNyYywgZ2V0Q2FjaGVkRGF0YVRlbXB0UmVn
aXN0ZXJJREFuZEludmFsaWRhdGUoKSk7CisgICAgICAgIHhvcjMyKGRhdGFUZW1wUmVnaXN0ZXIs
IGRlc3QpOworICAgIH0KKwogICAgIHZvaWQgeG9yMzIoUmVnaXN0ZXJJRCBvcDEsIFJlZ2lzdGVy
SUQgb3AyLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5lb3I8
MzI+KGRlc3QsIG9wMSwgb3AyKTsKQEAgLTk5MSw2ICs5OTcsMTIgQEAgcHVibGljOgogICAgICAg
ICAgICAgbV9hc3NlbWJsZXIuZW9yPDY0PihkZXN0LCBzcmMsIGRhdGFUZW1wUmVnaXN0ZXIpOwog
ICAgICAgICB9CiAgICAgfQorICAgIAorICAgIHZvaWQgeG9yNjQoQWRkcmVzcyBzcmMsIFJlZ2lz
dGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGxvYWQ2NChzcmMsIGdldENhY2hlZERhdGFUZW1w
dFJlZ2lzdGVySURBbmRJbnZhbGlkYXRlKCkpOworICAgICAgICB4b3I2NChkYXRhVGVtcFJlZ2lz
dGVyLCBkZXN0KTsKKyAgICB9CiAKICAgICB2b2lkIG5vdDMyKFJlZ2lzdGVySUQgc3JjLCBSZWdp
c3RlcklEIGRlc3QpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlckFSTXY3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3LmgJKHJldmlzaW9uIDIxNzY0NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk12Ny5oCSh3
b3JraW5nIGNvcHkpCkBAIC01NDMsNiArNTQzLDEyIEBAIHB1YmxpYzoKICAgICAgICAgeG9yMzIo
ZGVzdCwgc3JjLCBkZXN0KTsKICAgICB9CiAKKyAgICB2b2lkIHhvcjMyKEFkZHJlc3Mgc3JjLCBS
ZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBsb2FkMzIoc3JjLCBkYXRhVGVtcFJlZ2lz
dGVyKTsKKyAgICAgICAgeG9yMzIoZGF0YVRlbXBSZWdpc3RlciwgZGVzdCk7CisgICAgfQorCiAg
ICAgdm9pZCB4b3IzMihUcnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewog
ICAgICAgICBpZiAoaW1tLm1fdmFsdWUgPT0gLTEpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9GcmVlTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvRnJlZUxpc3QuY3BwCShyZXZpc2lvbiAyMTc2NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9GcmVlTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDIxICsyNiw2MiBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZyZWVMaXN0LmgiCiAKKyNpbmNsdWRl
ICJGcmVlTGlzdElubGluZXMuaCIKKyNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgorI2luY2x1ZGUg
PHd0Zi9Db21tYVByaW50ZXIuaD4KKwogbmFtZXNwYWNlIEpTQyB7CiAKLWJvb2wgRnJlZUxpc3Q6
OmNvbnRhaW5zKGNvbnN0IHZvaWQqIHRhcmdldCkgY29uc3QKK0ZyZWVMaXN0OjpGcmVlTGlzdCh1
bnNpZ25lZCBjZWxsU2l6ZSkKKyAgICA6IG1fY2VsbFNpemUoY2VsbFNpemUpCit7Cit9CisKK0Zy
ZWVMaXN0Ojp+RnJlZUxpc3QoKQoreworfQorCit2b2lkIEZyZWVMaXN0OjpjbGVhcigpCit7Cisg
ICAgbV9zY3JhbWJsZWRIZWFkID0gMDsKKyAgICBtX3NlY3JldCA9IDA7CisgICAgbV9wYXlsb2Fk
RW5kID0gbnVsbHB0cjsKKyAgICBtX3JlbWFpbmluZyA9IDA7CisgICAgbV9vcmlnaW5hbFNpemUg
PSAwOworfQorCit2b2lkIEZyZWVMaXN0Ojppbml0aWFsaXplTGlzdChGcmVlQ2VsbCogaGVhZCwg
dWludHB0cl90IHNlY3JldCwgdW5zaWduZWQgYnl0ZXMpCit7CisgICAgLy8gSXQncyAqc2xpZ2h0
bHkqIG1vcmUgb3B0aW1hbCB0byB1c2UgYSBzY3JhbWJsZWQgaGVhZC4gSXQgc2F2ZXMgYSByZWdp
c3RlciBvbiB0aGUgZmFzdCBwYXRoLgorICAgIG1fc2NyYW1ibGVkSGVhZCA9IEZyZWVDZWxsOjpz
Y3JhbWJsZShoZWFkLCBzZWNyZXQpOworICAgIG1fc2VjcmV0ID0gc2VjcmV0OworICAgIG1fcGF5
bG9hZEVuZCA9IG51bGxwdHI7CisgICAgbV9yZW1haW5pbmcgPSAwOworICAgIG1fb3JpZ2luYWxT
aXplID0gYnl0ZXM7Cit9CisKK3ZvaWQgRnJlZUxpc3Q6OmluaXRpYWxpemVCdW1wKGNoYXIqIHBh
eWxvYWRFbmQsIHVuc2lnbmVkIHJlbWFpbmluZykKK3sKKyAgICBtX3NjcmFtYmxlZEhlYWQgPSAw
OworICAgIG1fc2VjcmV0ID0gMDsKKyAgICBtX3BheWxvYWRFbmQgPSBwYXlsb2FkRW5kOworICAg
IG1fcmVtYWluaW5nID0gcmVtYWluaW5nOworICAgIG1fb3JpZ2luYWxTaXplID0gcmVtYWluaW5n
OworfQorCitib29sIEZyZWVMaXN0Ojpjb250YWlucyhIZWFwQ2VsbCogdGFyZ2V0KSBjb25zdAog
ewotICAgIGlmIChyZW1haW5pbmcpIHsKLSAgICAgICAgY29uc3Qgdm9pZCogc3RhcnQgPSAocGF5
bG9hZEVuZCAtIHJlbWFpbmluZyk7Ci0gICAgICAgIGNvbnN0IHZvaWQqIGVuZCA9IHBheWxvYWRF
bmQ7CisgICAgaWYgKG1fcmVtYWluaW5nKSB7CisgICAgICAgIGNvbnN0IHZvaWQqIHN0YXJ0ID0g
KG1fcGF5bG9hZEVuZCAtIG1fcmVtYWluaW5nKTsKKyAgICAgICAgY29uc3Qgdm9pZCogZW5kID0g
bV9wYXlsb2FkRW5kOwogICAgICAgICByZXR1cm4gKHN0YXJ0IDw9IHRhcmdldCkgJiYgKHRhcmdl
dCA8IGVuZCk7CiAgICAgfQogCi0gICAgRnJlZUNlbGwqIGNhbmRpZGF0ZSA9IGhlYWQ7CisgICAg
RnJlZUNlbGwqIGNhbmRpZGF0ZSA9IGhlYWQoKTsKICAgICB3aGlsZSAoY2FuZGlkYXRlKSB7Ci0g
ICAgICAgIGlmIChjYW5kaWRhdGUgPT0gdGFyZ2V0KQorICAgICAgICBpZiAoYml0d2lzZV9jYXN0
PEhlYXBDZWxsKj4oY2FuZGlkYXRlKSA9PSB0YXJnZXQpCiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgY2FuZGlkYXRlID0gY2FuZGlkYXRlLT5uZXh0OworICAgICAgICBjYW5kaWRh
dGUgPSBjYW5kaWRhdGUtPm5leHQobV9zZWNyZXQpOwogICAgIH0KIAogICAgIHJldHVybiBmYWxz
ZTsKQEAgLTQ4LDcgKzg5LDcgQEAgYm9vbCBGcmVlTGlzdDo6Y29udGFpbnMoY29uc3Qgdm9pZCog
dGFyZwogCiB2b2lkIEZyZWVMaXN0OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7Ci0g
ICAgb3V0LnByaW50KCJ7aGVhZCA9ICIsIFJhd1BvaW50ZXIoaGVhZCksICIsIHBheWxvYWRFbmQg
PSAiLCBSYXdQb2ludGVyKHBheWxvYWRFbmQpLCAiLCByZW1haW5pbmcgPSAiLCByZW1haW5pbmcs
ICIsIG9yaWdpbmFsU2l6ZSA9ICIsIG9yaWdpbmFsU2l6ZSwgIn0iKTsKKyAgICBvdXQucHJpbnQo
IntoZWFkID0gIiwgUmF3UG9pbnRlcihoZWFkKCkpLCAiLCBzZWNyZXQgPSAiLCBtX3NlY3JldCwg
IiwgcGF5bG9hZEVuZCA9ICIsIFJhd1BvaW50ZXIobV9wYXlsb2FkRW5kKSwgIiwgcmVtYWluaW5n
ID0gIiwgbV9yZW1haW5pbmcsICIsIG9yaWdpbmFsU2l6ZSA9ICIsIG1fb3JpZ2luYWxTaXplLCAi
fSIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0ZyZWVMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvRnJlZUxpc3QuaAkocmV2aXNpb24gMjE3NjQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvRnJlZUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNjggKzI1LDc5IEBACiAKICNw
cmFnbWEgb25jZQogCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3Rm
L1ByaW50U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCi1zdHJ1Y3QgRnJlZUNlbGwgewot
ICAgIEZyZWVDZWxsKiBuZXh0OwotfTsKLSAgICAgICAgCi0vLyBUaGlzIHJlcHJlc2VudGF0aW9u
IG9mIGEgRnJlZUxpc3QgaXMgY29udmVuaWVudCBmb3IgdGhlIE1hcmtlZEFsbG9jYXRvci4KK2Ns
YXNzIEhlYXBDZWxsOwogCi1zdHJ1Y3QgRnJlZUxpc3QgewotICAgIEZyZWVDZWxsKiBoZWFkIHsg
bnVsbHB0ciB9OwotICAgIGNoYXIqIHBheWxvYWRFbmQgeyBudWxscHRyIH07Ci0gICAgdW5zaWdu
ZWQgcmVtYWluaW5nIHsgMCB9OwotICAgIHVuc2lnbmVkIG9yaWdpbmFsU2l6ZSB7IDAgfTsKLSAg
ICAKLSAgICBGcmVlTGlzdCgpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBzdGF0aWMgRnJlZUxp
c3QgbGlzdChGcmVlQ2VsbCogaGVhZCwgdW5zaWduZWQgYnl0ZXMpCitzdHJ1Y3QgRnJlZUNlbGwg
eworICAgIHN0YXRpYyB1aW50cHRyX3Qgc2NyYW1ibGUoRnJlZUNlbGwqIGNlbGwsIHVpbnRwdHJf
dCBzZWNyZXQpCiAgICAgewotICAgICAgICBGcmVlTGlzdCByZXN1bHQ7Ci0gICAgICAgIHJlc3Vs
dC5oZWFkID0gaGVhZDsKLSAgICAgICAgcmVzdWx0LnJlbWFpbmluZyA9IDA7Ci0gICAgICAgIHJl
c3VsdC5vcmlnaW5hbFNpemUgPSBieXRlczsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgcmV0dXJuIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGNlbGwpIF4gc2VjcmV0OwogICAgIH0K
ICAgICAKLSAgICBzdGF0aWMgRnJlZUxpc3QgYnVtcChjaGFyKiBwYXlsb2FkRW5kLCB1bnNpZ25l
ZCByZW1haW5pbmcpCisgICAgc3RhdGljIEZyZWVDZWxsKiBkZXNjcmFtYmxlKHVpbnRwdHJfdCBj
ZWxsLCB1aW50cHRyX3Qgc2VjcmV0KQogICAgIHsKLSAgICAgICAgRnJlZUxpc3QgcmVzdWx0Owot
ICAgICAgICByZXN1bHQucGF5bG9hZEVuZCA9IHBheWxvYWRFbmQ7Ci0gICAgICAgIHJlc3VsdC5y
ZW1haW5pbmcgPSByZW1haW5pbmc7Ci0gICAgICAgIHJlc3VsdC5vcmlnaW5hbFNpemUgPSByZW1h
aW5pbmc7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nh
c3Q8RnJlZUNlbGwqPihjZWxsIF4gc2VjcmV0KTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IEZyZWVMaXN0JiBvdGhlcikgY29uc3QKKyAgICB2b2lkIHNldE5leHQoRnJl
ZUNlbGwqIG5leHQsIHVpbnRwdHJfdCBzZWNyZXQpCiAgICAgewotICAgICAgICByZXR1cm4gaGVh
ZCA9PSBvdGhlci5oZWFkCi0gICAgICAgICAgICAmJiBwYXlsb2FkRW5kID09IG90aGVyLnBheWxv
YWRFbmQKLSAgICAgICAgICAgICYmIHJlbWFpbmluZyA9PSBvdGhlci5yZW1haW5pbmcKLSAgICAg
ICAgICAgICYmIG9yaWdpbmFsU2l6ZSA9PSBvdGhlci5vcmlnaW5hbFNpemU7CisgICAgICAgIHNj
cmFtYmxlZE5leHQgPSBzY3JhbWJsZShuZXh0LCBzZWNyZXQpOwogICAgIH0KICAgICAKLSAgICBi
b29sIG9wZXJhdG9yIT0oY29uc3QgRnJlZUxpc3QmIG90aGVyKSBjb25zdAorICAgIEZyZWVDZWxs
KiBuZXh0KHVpbnRwdHJfdCBzZWNyZXQpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gISgq
dGhpcyA9PSBvdGhlcik7CisgICAgICAgIHJldHVybiBkZXNjcmFtYmxlKHNjcmFtYmxlZE5leHQs
IHNlY3JldCk7CiAgICAgfQogICAgIAotICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25z
dAotICAgIHsKLSAgICAgICAgcmV0dXJuICp0aGlzICE9IEZyZWVMaXN0KCk7Ci0gICAgfQotCi0g
ICAgYm9vbCBjb250YWlucyhjb25zdCB2b2lkKiB0YXJnZXQpIGNvbnN0OworICAgIHVpbnRwdHJf
dCBzY3JhbWJsZWROZXh0OworfTsKIAotICAgIGJvb2wgYWxsb2NhdGlvbldpbGxGYWlsKCkgY29u
c3QgeyByZXR1cm4gIWhlYWQgJiYgIXJlbWFpbmluZzsgfQorY2xhc3MgRnJlZUxpc3QgeworICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKEZyZWVMaXN0KTsKKyAgICAKK3B1YmxpYzoKKyAgICBGcmVl
TGlzdCh1bnNpZ25lZCBjZWxsU2l6ZSk7CisgICAgfkZyZWVMaXN0KCk7CisgICAgCisgICAgdm9p
ZCBjbGVhcigpOworICAgIAorICAgIHZvaWQgaW5pdGlhbGl6ZUxpc3QoRnJlZUNlbGwqIGhlYWQs
IHVpbnRwdHJfdCBzZWNyZXQsIHVuc2lnbmVkIGJ5dGVzKTsKKyAgICB2b2lkIGluaXRpYWxpemVC
dW1wKGNoYXIqIHBheWxvYWRFbmQsIHVuc2lnbmVkIHJlbWFpbmluZyk7CisgICAgCisgICAgYm9v
bCBhbGxvY2F0aW9uV2lsbEZhaWwoKSBjb25zdCB7IHJldHVybiAhaGVhZCgpICYmICFtX3JlbWFp
bmluZzsgfQogICAgIGJvb2wgYWxsb2NhdGlvbldpbGxTdWNjZWVkKCkgY29uc3QgeyByZXR1cm4g
IWFsbG9jYXRpb25XaWxsRmFpbCgpOyB9CiAgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVu
Yz4KKyAgICBIZWFwQ2VsbCogYWxsb2NhdGUoY29uc3QgRnVuYyYgc2xvd1BhdGgpOworICAgIAor
ICAgIGJvb2wgY29udGFpbnMoSGVhcENlbGwqKSBjb25zdDsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jPgorICAgIHZvaWQgZm9yRWFjaChjb25zdCBGdW5jJikgY29uc3Q7CisgICAg
CisgICAgdW5zaWduZWQgb3JpZ2luYWxTaXplKCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW5hbFNp
emU7IH0KKworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTY3JhbWJsZWRIZWFkKCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZyZWVMaXN0LCBtX3NjcmFtYmxlZEhlYWQpOyB9CisgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNlY3JldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihGcmVlTGlzdCwgbV9zZWNyZXQpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlBh
eWxvYWRFbmQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRnJlZUxpc3QsIG1fcGF5bG9hZEVu
ZCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mUmVtYWluaW5nKCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKEZyZWVMaXN0LCBtX3JlbWFpbmluZyk7IH0KKyAgICBzdGF0aWMgcHRy
ZGlmZl90IG9mZnNldE9mT3JpZ2luYWxTaXplKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZy
ZWVMaXN0LCBtX29yaWdpbmFsU2l6ZSk7IH0KKyAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgRnJlZUNlbGwqIGhlYWQoKSBjb25zdCB7
IHJldHVybiBGcmVlQ2VsbDo6ZGVzY3JhbWJsZShtX3NjcmFtYmxlZEhlYWQsIG1fc2VjcmV0KTsg
fQorICAgIAorICAgIHVpbnRwdHJfdCBtX3NjcmFtYmxlZEhlYWQgeyAwIH07CisgICAgdWludHB0
cl90IG1fc2VjcmV0IHsgMCB9OworICAgIGNoYXIqIG1fcGF5bG9hZEVuZCB7IG51bGxwdHIgfTsK
KyAgICB1bnNpZ25lZCBtX3JlbWFpbmluZyB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX29yaWdpbmFs
U2l6ZSB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX2NlbGxTaXplIHsgMCB9OwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9GcmVlTGlzdElu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9GcmVlTGlz
dElubGluZXMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9G
cmVlTGlzdElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcwIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiRnJlZUxpc3QuaCIKKyNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgorCituYW1lc3Bh
Y2UgSlNDIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KK0hlYXBDZWxsKiBGcmVlTGlzdDo6
YWxsb2NhdGUoY29uc3QgRnVuYyYgc2xvd1BhdGgpCit7CisgICAgdW5zaWduZWQgcmVtYWluaW5n
ID0gbV9yZW1haW5pbmc7CisgICAgaWYgKHJlbWFpbmluZykgeworICAgICAgICB1bnNpZ25lZCBj
ZWxsU2l6ZSA9IG1fY2VsbFNpemU7CisgICAgICAgIHJlbWFpbmluZyAtPSBjZWxsU2l6ZTsKKyAg
ICAgICAgbV9yZW1haW5pbmcgPSByZW1haW5pbmc7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nh
c3Q8SGVhcENlbGwqPihtX3BheWxvYWRFbmQgLSByZW1haW5pbmcgLSBjZWxsU2l6ZSk7CisgICAg
fQorICAgIAorICAgIEZyZWVDZWxsKiByZXN1bHQgPSBoZWFkKCk7CisgICAgaWYgKFVOTElLRUxZ
KCFyZXN1bHQpKQorICAgICAgICByZXR1cm4gc2xvd1BhdGgoKTsKKyAgICAKKyAgICBtX3NjcmFt
YmxlZEhlYWQgPSByZXN1bHQtPnNjcmFtYmxlZE5leHQ7CisgICAgcmV0dXJuIGJpdHdpc2VfY2Fz
dDxIZWFwQ2VsbCo+KHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Cit2b2lk
IEZyZWVMaXN0Ojpmb3JFYWNoKGNvbnN0IEZ1bmMmIGZ1bmMpIGNvbnN0Cit7CisgICAgaWYgKG1f
cmVtYWluaW5nKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgcmVtYWluaW5nID0gbV9yZW1haW5p
bmc7IHJlbWFpbmluZzsgcmVtYWluaW5nIC09IG1fY2VsbFNpemUpCisgICAgICAgICAgICBmdW5j
KGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KG1fcGF5bG9hZEVuZCAtIHJlbWFpbmluZykpOworICAg
IH0gZWxzZSB7CisgICAgICAgIGZvciAoRnJlZUNlbGwqIGNlbGwgPSBoZWFkKCk7IGNlbGw7KSB7
CisgICAgICAgICAgICAvLyBXZSBjYW4gdXNlIHRoaXMgdG8gb3ZlcndyaXRlIGZyZWUgb2JqZWN0
cyBiZWZvcmUgZGVzdHJveWluZyB0aGUgZnJlZSBsaXN0LiBTbywgd2UgbmVlZAorICAgICAgICAg
ICAgLy8gdG8gZ2V0IG5leHQgYmVmb3JlIHByb2NlZWRpbmcgZnVydGhlci4KKyAgICAgICAgICAg
IEZyZWVDZWxsKiBuZXh0ID0gY2VsbC0+bmV4dChtX3NlY3JldCk7CisgICAgICAgICAgICBmdW5j
KGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KGNlbGwpKTsKKyAgICAgICAgICAgIGNlbGwgPSBuZXh0
OworICAgICAgICB9CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuY3BwCShy
ZXZpc2lvbiAyMTc2NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRh
bFN3ZWVwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw3ICs4Nyw3IEBAIGJvb2wgSW5jcmVt
ZW50YWxTd2VlcGVyOjpzd2VlcE5leHRCbG9jaygKICAgICAKICAgICBpZiAoYmxvY2spIHsKICAg
ICAgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKG1fdm0tPmhlYXApOwotICAgICAgICBibG9j
ay0+c3dlZXAoKTsKKyAgICAgICAgYmxvY2stPnN3ZWVwKG51bGxwdHIpOwogICAgICAgICBtX3Zt
LT5oZWFwLm9iamVjdFNwYWNlKCkuZnJlZU9yU2hyaW5rQmxvY2soYmxvY2spOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
ZWRBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtlZEFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDIxNzY0NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcg
KzQwLDggQEAKIG5hbWVzcGFjZSBKU0MgewogCiBNYXJrZWRBbGxvY2F0b3I6Ok1hcmtlZEFsbG9j
YXRvcihIZWFwKiBoZWFwLCBTdWJzcGFjZSogc3Vic3BhY2UsIHNpemVfdCBjZWxsU2l6ZSkKLSAg
ICA6IG1fY3VycmVudEJsb2NrKDApCisgICAgOiBtX2ZyZWVMaXN0KGNlbGxTaXplKQorICAgICwg
bV9jdXJyZW50QmxvY2soMCkKICAgICAsIG1fbGFzdEFjdGl2ZUJsb2NrKDApCiAgICAgLCBtX2Nl
bGxTaXplKHN0YXRpY19jYXN0PHVuc2lnbmVkPihjZWxsU2l6ZSkpCiAgICAgLCBtX2F0dHJpYnV0
ZXMoc3Vic3BhY2UtPmF0dHJpYnV0ZXMoKSkKQEAgLTg4LDcgKzg5LDcgQEAgdm9pZCBNYXJrZWRB
bGxvY2F0b3I6OmRpZENvbnN1bWVGcmVlTGlzdAogICAgIGlmIChtX2N1cnJlbnRCbG9jaykKICAg
ICAgICAgbV9jdXJyZW50QmxvY2stPmRpZENvbnN1bWVGcmVlTGlzdCgpOwogICAgIAotICAgIHNl
dEZyZWVMaXN0KEZyZWVMaXN0KCkpOworICAgIG1fZnJlZUxpc3QuY2xlYXIoKTsKICAgICBtX2N1
cnJlbnRCbG9jayA9IG51bGxwdHI7CiB9CiAKQEAgLTk3LDcgKzk4LDcgQEAgdm9pZCogTWFya2Vk
QWxsb2NhdG9yOjp0cnlBbGxvY2F0ZVdpdGhvdQogICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVy
U2FtcGxlclNjb3BlKGZhbHNlKTsKICAgICAKICAgICBBU1NFUlQoIW1fY3VycmVudEJsb2NrKTsK
LSAgICBBU1NFUlQoIW1fZnJlZUxpc3QpOworICAgIEFTU0VSVChtX2ZyZWVMaXN0LmFsbG9jYXRp
b25XaWxsRmFpbCgpKTsKICAgICAKICAgICBmb3IgKDs7KSB7CiAgICAgICAgIG1fYWxsb2NhdGlv
bkN1cnNvciA9IChtX2NhbkFsbG9jYXRlQnV0Tm90RW1wdHkgfCBtX2VtcHR5KS5maW5kQml0KG1f
YWxsb2NhdGlvbkN1cnNvciwgdHJ1ZSk7CkBAIC0xMTMsNyArMTE0LDcgQEAgdm9pZCogTWFya2Vk
QWxsb2NhdG9yOjp0cnlBbGxvY2F0ZVdpdGhvdQogICAgIGlmIChPcHRpb25zOjpzdGVhbEVtcHR5
QmxvY2tzRnJvbU90aGVyQWxsb2NhdG9ycygpCiAgICAgICAgICYmIHNob3VsZFN0ZWFsRW1wdHlC
bG9ja3NGcm9tT3RoZXJBbGxvY2F0b3JzKCkpIHsKICAgICAgICAgaWYgKE1hcmtlZEJsb2NrOjpI
YW5kbGUqIGJsb2NrID0gbWFya2VkU3BhY2UoKS5maW5kRW1wdHlCbG9ja1RvU3RlYWwoKSkgewot
ICAgICAgICAgICAgYmxvY2stPnN3ZWVwKCk7CisgICAgICAgICAgICBibG9jay0+c3dlZXAobnVs
bHB0cik7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIEl0J3MgZ29vZCB0aGF0IHRoaXMg
Y2xlYXJzIGNhbkFsbG9jYXRlQnV0Tm90RW1wdHkgYXMgd2VsbCBhcyBhbGwgb3RoZXIgYml0cywK
ICAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhlcmUgaXMgYSByZW1vdGUgY2hhbmNlIHRoYXQgYSBi
bG9jayBtYXkgaGF2ZSBib3RoIGNhbkFsbG9jYXRlQnV0Tm90RW1wdHkKQEAgLTEzOSwxMSArMTQw
LDExIEBAIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVJbihNYXIKICAgICBBU1NF
UlQoYmxvY2spOwogICAgIEFTU0VSVCghYmxvY2stPmlzRnJlZUxpc3RlZCgpKTsKICAgICAKLSAg
ICBGcmVlTGlzdCBmcmVlTGlzdCA9IGJsb2NrLT5zd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlOjpT
d2VlcFRvRnJlZUxpc3QpOworICAgIGJsb2NrLT5zd2VlcCgmbV9mcmVlTGlzdCk7CiAgICAgCiAg
ICAgLy8gSXQncyBwb3NzaWJsZSB0byBzdHVtYmxlIG9uIGEgY29tcGxldGVseSBmdWxsIGJsb2Nr
LiBNYXJraW5nIHRyaWVzIHRvIHJldGlyZSB0aGVzZSwgYnV0CiAgICAgLy8gdGhhdCBhbGdvcml0
aG0gaXMgcmFjeSBhbmQgbWF5IGZvcmdldCB0byBkbyBpdCBzb21ldGltZXMuCi0gICAgaWYgKGZy
ZWVMaXN0LmFsbG9jYXRpb25XaWxsRmFpbCgpKSB7CisgICAgaWYgKG1fZnJlZUxpc3QuYWxsb2Nh
dGlvbldpbGxGYWlsKCkpIHsKICAgICAgICAgQVNTRVJUKGJsb2NrLT5pc0ZyZWVMaXN0ZWQoKSk7
CiAgICAgICAgIGJsb2NrLT51bnN3ZWVwV2l0aE5vTmV3bHlBbGxvY2F0ZWQoKTsKICAgICAgICAg
QVNTRVJUKCFibG9jay0+aXNGcmVlTGlzdGVkKCkpOwpAQCAtMTUzLDE5ICsxNTQsOSBAQCB2b2lk
KiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlSW4oTWFyCiAgICAgfQogICAgIAogICAgIG1f
Y3VycmVudEJsb2NrID0gYmxvY2s7Ci0gICAgc2V0RnJlZUxpc3QoZnJlZUxpc3QpOwogICAgIAot
ICAgIHZvaWQqIHJlc3VsdDsKLSAgICBpZiAobV9mcmVlTGlzdC5yZW1haW5pbmcpIHsKLSAgICAg
ICAgdW5zaWduZWQgY2VsbFNpemUgPSBtX2NlbGxTaXplOwotICAgICAgICBtX2ZyZWVMaXN0LnJl
bWFpbmluZyAtPSBjZWxsU2l6ZTsKLSAgICAgICAgcmVzdWx0ID0gbV9mcmVlTGlzdC5wYXlsb2Fk
RW5kIC0gbV9mcmVlTGlzdC5yZW1haW5pbmcgLSBjZWxsU2l6ZTsKLSAgICB9IGVsc2UgewotICAg
ICAgICBGcmVlQ2VsbCogaGVhZCA9IG1fZnJlZUxpc3QuaGVhZDsKLSAgICAgICAgbV9mcmVlTGlz
dC5oZWFkID0gaGVhZC0+bmV4dDsKLSAgICAgICAgcmVzdWx0ID0gaGVhZDsKLSAgICB9Ci0gICAg
UkVMRUFTRV9BU1NFUlQocmVzdWx0KTsKKyAgICB2b2lkKiByZXN1bHQgPSBtX2ZyZWVMaXN0LmFs
bG9jYXRlKAorICAgICAgICBbXSAoKSAtPiBIZWFwQ2VsbCogeyBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOyByZXR1cm4gbnVsbHB0cjsgfSk7CiAgICAgc2V0SXNFZGVuKE5vTG9ja2luZ05l
Y2Vzc2FyeSwgbV9jdXJyZW50QmxvY2ssIHRydWUpOwogICAgIG1hcmtlZFNwYWNlKCkuZGlkQWxs
b2NhdGVJbkJsb2NrKG1fY3VycmVudEJsb2NrKTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMjA4
LDcgKzE5OSw3IEBAIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZUkKICAg
ICBkb1Rlc3RDb2xsZWN0aW9uc0lmTmVlZGVkKGRlZmVycmFsQ29udGV4dCk7CiAKICAgICBBU1NF
UlQoIW1hcmtlZFNwYWNlKCkuaXNJdGVyYXRpbmcoKSk7Ci0gICAgbV9oZWFwLT5kaWRBbGxvY2F0
ZShtX2ZyZWVMaXN0Lm9yaWdpbmFsU2l6ZSk7CisgICAgbV9oZWFwLT5kaWRBbGxvY2F0ZShtX2Zy
ZWVMaXN0Lm9yaWdpbmFsU2l6ZSgpKTsKICAgICAKICAgICBkaWRDb25zdW1lRnJlZUxpc3QoKTsK
ICAgICAKQEAgLTMzNCwyMSArMzI1LDIxIEBAIHZvaWQgTWFya2VkQWxsb2NhdG9yOjpzdG9wQWxs
b2NhdGluZygpCiAgICAgICAgIGRhdGFMb2coUmF3UG9pbnRlcih0aGlzKSwgIjogTWFya2VkQWxs
b2NhdG9yOjpzdG9wQWxsb2NhdGluZyFcbiIpOwogICAgIEFTU0VSVCghbV9sYXN0QWN0aXZlQmxv
Y2spOwogICAgIGlmICghbV9jdXJyZW50QmxvY2spIHsKLSAgICAgICAgQVNTRVJUKCFtX2ZyZWVM
aXN0KTsKKyAgICAgICAgQVNTRVJUKG1fZnJlZUxpc3QuYWxsb2NhdGlvbldpbGxGYWlsKCkpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAogICAgIG1fY3VycmVudEJsb2NrLT5zdG9wQWxs
b2NhdGluZyhtX2ZyZWVMaXN0KTsKICAgICBtX2xhc3RBY3RpdmVCbG9jayA9IG1fY3VycmVudEJs
b2NrOwogICAgIG1fY3VycmVudEJsb2NrID0gMDsKLSAgICBtX2ZyZWVMaXN0ID0gRnJlZUxpc3Qo
KTsKKyAgICBtX2ZyZWVMaXN0LmNsZWFyKCk7CiB9CiAKIHZvaWQgTWFya2VkQWxsb2NhdG9yOjpw
cmVwYXJlRm9yQWxsb2NhdGlvbigpCiB7CiAgICAgbV9sYXN0QWN0aXZlQmxvY2sgPSBudWxscHRy
OwogICAgIG1fY3VycmVudEJsb2NrID0gbnVsbHB0cjsKLSAgICBzZXRGcmVlTGlzdChGcmVlTGlz
dCgpKTsKKyAgICBtX2ZyZWVMaXN0LmNsZWFyKCk7CiAKICAgICBtX2FsbG9jYXRpb25DdXJzb3Ig
PSAwOwogICAgIG1fZW1wdHlDdXJzb3IgPSAwOwpAQCAtMzcxLDE3ICszNjIsMTIgQEAgdm9pZCBN
YXJrZWRBbGxvY2F0b3I6Omxhc3RDaGFuY2VUb0ZpbmFsaQogICAgICAgICB9KTsKIH0KIAotdm9p
ZCBNYXJrZWRBbGxvY2F0b3I6OnNldEZyZWVMaXN0KGNvbnN0IEZyZWVMaXN0JiBmcmVlTGlzdCkK
LXsKLSAgICBtX2ZyZWVMaXN0ID0gZnJlZUxpc3Q7Ci19Ci0KIHZvaWQgTWFya2VkQWxsb2NhdG9y
OjpyZXN1bWVBbGxvY2F0aW5nKCkKIHsKICAgICBpZiAoIW1fbGFzdEFjdGl2ZUJsb2NrKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBtX2ZyZWVMaXN0ID0gbV9sYXN0QWN0aXZlQmxvY2stPnJlc3Vt
ZUFsbG9jYXRpbmcoKTsKKyAgICBtX2xhc3RBY3RpdmVCbG9jay0+cmVzdW1lQWxsb2NhdGluZyht
X2ZyZWVMaXN0KTsKICAgICBtX2N1cnJlbnRCbG9jayA9IG1fbGFzdEFjdGl2ZUJsb2NrOwogICAg
IG1fbGFzdEFjdGl2ZUJsb2NrID0gbnVsbHB0cjsKIH0KQEAgLTQ0NSw3ICs0MzEsNyBAQCB2b2lk
IE1hcmtlZEFsbG9jYXRvcjo6c3dlZXAoKQogICAgIG1fdW5zd2VwdC5mb3JFYWNoU2V0Qml0KAog
ICAgICAgICBbJl0gKHNpemVfdCBpbmRleCkgewogICAgICAgICAgICAgTWFya2VkQmxvY2s6Okhh
bmRsZSogYmxvY2sgPSBtX2Jsb2Nrc1tpbmRleF07Ci0gICAgICAgICAgICBibG9jay0+c3dlZXAo
KTsKKyAgICAgICAgICAgIGJsb2NrLT5zd2VlcChudWxscHRyKTsKICAgICAgICAgfSk7CiB9CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCShy
ZXZpc2lvbiAyMTc2NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxv
Y2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTU2LDcgKzE1Niw3IEBAIHB1YmxpYzoKICAgICB2
b2lkKiB0cnlBbGxvY2F0ZShHQ0RlZmVycmFsQ29udGV4dCogPSBudWxscHRyKTsKICAgICBIZWFw
KiBoZWFwKCkgeyByZXR1cm4gbV9oZWFwOyB9CiAKLSAgICBib29sIGlzRnJlZUxpc3RlZENlbGwo
Y29uc3Qgdm9pZCogdGFyZ2V0KSBjb25zdCB7IHJldHVybiBtX2ZyZWVMaXN0LmNvbnRhaW5zKHRh
cmdldCk7IH0KKyAgICBib29sIGlzRnJlZUxpc3RlZENlbGwoY29uc3Qgdm9pZCogdGFyZ2V0KSBj
b25zdDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaEJsb2Nr
KGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZv
ckVhY2hOb3RFbXB0eUJsb2NrKGNvbnN0IEZ1bmN0b3ImKTsKQEAgLTIwOSw2ICsyMDksOCBAQCBw
dWJsaWM6CiAgICAgU3Vic3BhY2UqIHN1YnNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9zdWJzcGFj
ZTsgfQogICAgIE1hcmtlZFNwYWNlJiBtYXJrZWRTcGFjZSgpIGNvbnN0OwogICAgIAorICAgIGNv
bnN0IEZyZWVMaXN0JiBmcmVlTGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJlZUxpc3Q7IH0KKyAg
ICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICB2b2lkIGR1bXBCaXRz
KFByaW50U3RyZWFtJiA9IFdURjo6ZGF0YUZpbGUoKSk7CiAgICAgCkBAIC0yMjcsOCArMjI5LDYg
QEAgcHJpdmF0ZToKICAgICB2b2lkKiBhbGxvY2F0ZUluKE1hcmtlZEJsb2NrOjpIYW5kbGUqKTsK
ICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgZG9UZXN0Q29sbGVjdGlvbnNJZk5lZWRlZChHQ0RlZmVy
cmFsQ29udGV4dCopOwogICAgIAotICAgIHZvaWQgc2V0RnJlZUxpc3QoY29uc3QgRnJlZUxpc3Qm
KTsKLSAgICAKICAgICBGcmVlTGlzdCBtX2ZyZWVMaXN0OwogICAgIAogICAgIFZlY3RvcjxNYXJr
ZWRCbG9jazo6SGFuZGxlKj4gbV9ibG9ja3M7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9ySW5saW5lcy5oCShyZXZpc2lvbiAyMTc2NDYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI1LDQ0ICsyNSwzMCBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2lu
Y2x1ZGUgIkZyZWVMaXN0SW5saW5lcy5oIgogI2luY2x1ZGUgIk1hcmtlZEFsbG9jYXRvci5oIgog
CiBuYW1lc3BhY2UgSlNDIHsKIAoraW5saW5lIGJvb2wgTWFya2VkQWxsb2NhdG9yOjppc0ZyZWVM
aXN0ZWRDZWxsKGNvbnN0IHZvaWQqIHRhcmdldCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9mcmVl
TGlzdC5jb250YWlucyhiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPih0YXJnZXQpKTsKK30KKwogQUxX
QVlTX0lOTElORSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlKEdDRGVmZXJyYWxD
b250ZXh0KiBkZWZlcnJhbENvbnRleHQpCiB7Ci0gICAgdW5zaWduZWQgcmVtYWluaW5nID0gbV9m
cmVlTGlzdC5yZW1haW5pbmc7Ci0gICAgaWYgKHJlbWFpbmluZykgewotICAgICAgICB1bnNpZ25l
ZCBjZWxsU2l6ZSA9IG1fY2VsbFNpemU7Ci0gICAgICAgIHJlbWFpbmluZyAtPSBjZWxsU2l6ZTsK
LSAgICAgICAgbV9mcmVlTGlzdC5yZW1haW5pbmcgPSByZW1haW5pbmc7Ci0gICAgICAgIHJldHVy
biBtX2ZyZWVMaXN0LnBheWxvYWRFbmQgLSByZW1haW5pbmcgLSBjZWxsU2l6ZTsKLSAgICB9Ci0g
ICAgCi0gICAgRnJlZUNlbGwqIGhlYWQgPSBtX2ZyZWVMaXN0LmhlYWQ7Ci0gICAgaWYgKFVOTElL
RUxZKCFoZWFkKSkKLSAgICAgICAgcmV0dXJuIHRyeUFsbG9jYXRlU2xvd0Nhc2UoZGVmZXJyYWxD
b250ZXh0KTsKLSAgICAKLSAgICBtX2ZyZWVMaXN0LmhlYWQgPSBoZWFkLT5uZXh0OwotICAgIHJl
dHVybiBoZWFkOworICAgIHJldHVybiBtX2ZyZWVMaXN0LmFsbG9jYXRlKAorICAgICAgICBbJl0g
KCkgLT4gSGVhcENlbGwqIHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIZWFwQ2Vs
bCo+KHRyeUFsbG9jYXRlU2xvd0Nhc2UoZGVmZXJyYWxDb250ZXh0KSk7CisgICAgICAgIH0pOwog
fQogCiBBTFdBWVNfSU5MSU5FIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGUoR0NEZWZl
cnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCkKIHsKLSAgICB1bnNpZ25lZCByZW1haW5pbmcg
PSBtX2ZyZWVMaXN0LnJlbWFpbmluZzsKLSAgICBpZiAocmVtYWluaW5nKSB7Ci0gICAgICAgIHVu
c2lnbmVkIGNlbGxTaXplID0gbV9jZWxsU2l6ZTsKLSAgICAgICAgcmVtYWluaW5nIC09IGNlbGxT
aXplOwotICAgICAgICBtX2ZyZWVMaXN0LnJlbWFpbmluZyA9IHJlbWFpbmluZzsKLSAgICAgICAg
cmV0dXJuIG1fZnJlZUxpc3QucGF5bG9hZEVuZCAtIHJlbWFpbmluZyAtIGNlbGxTaXplOwotICAg
IH0KLSAgICAKLSAgICBGcmVlQ2VsbCogaGVhZCA9IG1fZnJlZUxpc3QuaGVhZDsKLSAgICBpZiAo
VU5MSUtFTFkoIWhlYWQpKQotICAgICAgICByZXR1cm4gYWxsb2NhdGVTbG93Q2FzZShkZWZlcnJh
bENvbnRleHQpOwotICAgIAotICAgIG1fZnJlZUxpc3QuaGVhZCA9IGhlYWQtPm5leHQ7Ci0gICAg
cmV0dXJuIGhlYWQ7CisgICAgcmV0dXJuIG1fZnJlZUxpc3QuYWxsb2NhdGUoCisgICAgICAgIFsm
XSAoKSAtPiBIZWFwQ2VsbCogeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhlYXBD
ZWxsKj4oYWxsb2NhdGVTbG93Q2FzZShkZWZlcnJhbENvbnRleHQpKTsKKyAgICAgICAgfSk7CiB9
CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPiBpbmxpbmUgdm9pZCBNYXJrZWRBbGxvY2F0
b3I6OmZvckVhY2hCbG9jayhjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAkocmV2aXNpb24gMjE3NjQ2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNiw5ICsyNiwxMSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk1hcmtl
ZEJsb2NrLmgiCiAKKyNpbmNsdWRlICJGcmVlTGlzdElubGluZXMuaCIKICNpbmNsdWRlICJKU0Nl
bGwuaCIKICNpbmNsdWRlICJKU0Rlc3RydWN0aWJsZU9iamVjdC5oIgogI2luY2x1ZGUgIkpTQ0lu
bGluZXMuaCIKKyNpbmNsdWRlICJNYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
TWFya2VkQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU3VwZXJTYW1wbGVyLmgiCiAjaW5jbHVk
ZSAiU3dlZXBpbmdTY29wZS5oIgpAQCAtMTM0LDggKzEzNiw3IEBAIHZvaWQgTWFya2VkQmxvY2s6
OkhhbmRsZTo6c3RvcEFsbG9jYXRpbmcKICAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0
dXM6OkNvbnRpbnVlOwogICAgICAgICB9KTsKIAotICAgIGZvckVhY2hGcmVlQ2VsbCgKLSAgICAg
ICAgZnJlZUxpc3QsCisgICAgZnJlZUxpc3QuZm9yRWFjaCgKICAgICAgICAgWyZdIChIZWFwQ2Vs
bCogY2VsbCkgewogICAgICAgICAgICAgaWYgKGZhbHNlKQogICAgICAgICAgICAgICAgIGRhdGFM
b2coIkZyZWUgY2VsbDogIiwgUmF3UG9pbnRlcihjZWxsKSwgIlxuIik7CkBAIC0xNTYsMTAgKzE1
NywxMCBAQCB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6Omxhc3RDaGFuY2VUb0ZpCiAgICAgbV93
ZWFrU2V0Lmxhc3RDaGFuY2VUb0ZpbmFsaXplKCk7CiAgICAgbV9uZXdseUFsbG9jYXRlZC5jbGVh
ckFsbCgpOwogICAgIG1fbmV3bHlBbGxvY2F0ZWRWZXJzaW9uID0gaGVhcCgpLT5vYmplY3RTcGFj
ZSgpLm5ld2x5QWxsb2NhdGVkVmVyc2lvbigpOwotICAgIHN3ZWVwKCk7CisgICAgc3dlZXAobnVs
bHB0cik7CiB9CiAKLUZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnJlc3VtZUFsbG9jYXRp
bmcoKQordm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpyZXN1bWVBbGxvY2F0aW5nKEZyZWVMaXN0
JiBmcmVlTGlzdCkKIHsKICAgICB7CiAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soYmxv
Y2soKS5tX2xvY2spOwpAQCAtMTczLDQwICsxNzQsMjUgQEAgRnJlZUxpc3QgTWFya2VkQmxvY2s6
OkhhbmRsZTo6cmVzdW1lQWxsbwogICAgICAgICAgICAgaWYgKGZhbHNlKQogICAgICAgICAgICAg
ICAgIGRhdGFMb2coIlRoZXJlIGFpbid0IG5vIG5ld2x5IGFsbG9jYXRlZC5cbiIpOwogICAgICAg
ICAgICAgLy8gVGhpcyBtZWFucyB3ZSBoYWQgYWxyZWFkeSBleGhhdXN0ZWQgdGhlIGJsb2NrIHdo
ZW4gd2Ugc3RvcHBlZCBhbGxvY2F0aW9uLgotICAgICAgICAgICAgcmV0dXJuIEZyZWVMaXN0KCk7
CisgICAgICAgICAgICBmcmVlTGlzdC5jbGVhcigpOworICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAgICAgfQogCiAgICAgLy8gUmUtY3JlYXRlIG91ciBmcmVlIGxpc3QgZnJvbSBiZWZv
cmUgc3RvcHBpbmcgYWxsb2NhdGlvbi4gTm90ZSB0aGF0IHRoaXMgbWF5IHJldHVybiBhbiBlbXB0
eQogICAgIC8vIGZyZWVsaXN0LCBpbiB3aGljaCBjYXNlIHRoZSBibG9jayB3aWxsIHN0aWxsIGJl
IE1hcmtlZCEKLSAgICByZXR1cm4gc3dlZXAoU3dlZXBUb0ZyZWVMaXN0KTsKKyAgICBzd2VlcCgm
ZnJlZUxpc3QpOwogfQogCiB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OnphcChjb25zdCBGcmVl
TGlzdCYgZnJlZUxpc3QpCiB7Ci0gICAgZm9yRWFjaEZyZWVDZWxsKAotICAgICAgICBmcmVlTGlz
dCwKKyAgICBmcmVlTGlzdC5mb3JFYWNoKAogICAgICAgICBbJl0gKEhlYXBDZWxsKiBjZWxsKSB7
CiAgICAgICAgICAgICBpZiAobV9hdHRyaWJ1dGVzLmRlc3RydWN0aW9uID09IE5lZWRzRGVzdHJ1
Y3Rpb24pCiAgICAgICAgICAgICAgICAgY2VsbC0+emFwKCk7CiAgICAgICAgIH0pOwogfQogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpmb3JFYWNo
RnJlZUNlbGwoY29uc3QgRnJlZUxpc3QmIGZyZWVMaXN0LCBjb25zdCBGdW5jJiBmdW5jKQotewot
ICAgIGlmIChmcmVlTGlzdC5yZW1haW5pbmcpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCByZW1h
aW5pbmcgPSBmcmVlTGlzdC5yZW1haW5pbmc7IHJlbWFpbmluZzsgcmVtYWluaW5nIC09IGNlbGxT
aXplKCkpCi0gICAgICAgICAgICBmdW5jKGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KGZyZWVMaXN0
LnBheWxvYWRFbmQgLSByZW1haW5pbmcpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBmb3IgKEZy
ZWVDZWxsKiBjdXJyZW50ID0gZnJlZUxpc3QuaGVhZDsgY3VycmVudDspIHsKLSAgICAgICAgICAg
IEZyZWVDZWxsKiBuZXh0ID0gY3VycmVudC0+bmV4dDsKLSAgICAgICAgICAgIGZ1bmMoYml0d2lz
ZV9jYXN0PEhlYXBDZWxsKj4oY3VycmVudCkpOwotICAgICAgICAgICAgY3VycmVudCA9IG5leHQ7
Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KIHZvaWQgTWFya2VkQmxvY2s6OmFib3V0VG9NYXJrU2xv
dyhIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbikKIHsKICAgICBBU1NFUlQodm0oKS0+aGVhcC5v
YmplY3RTcGFjZSgpLmlzTWFya2luZygpKTsKQEAgLTQwNywyMCArMzkzLDIyIEBAIFN1YnNwYWNl
KiBNYXJrZWRCbG9jazo6SGFuZGxlOjpzdWJzcGFjZSgKICAgICByZXR1cm4gYWxsb2NhdG9yKCkt
PnN1YnNwYWNlKCk7CiB9CiAKLUZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN3ZWVwKFN3
ZWVwTW9kZSBzd2VlcE1vZGUpCit2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN3ZWVwKEZyZWVM
aXN0KiBmcmVlTGlzdCkKIHsKICAgICBTd2VlcGluZ1Njb3BlIHN3ZWVwaW5nU2NvcGUoKmhlYXAo
KSk7CiAgICAgCisgICAgU3dlZXBNb2RlIHN3ZWVwTW9kZSA9IGZyZWVMaXN0ID8gU3dlZXBUb0Zy
ZWVMaXN0IDogU3dlZXBPbmx5OworICAgIAogICAgIG1fYWxsb2NhdG9yLT5zZXRJc1Vuc3dlcHQo
Tm9Mb2NraW5nTmVjZXNzYXJ5LCB0aGlzLCBmYWxzZSk7CiAgICAgCiAgICAgbV93ZWFrU2V0LnN3
ZWVwKCk7CiAKICAgICBpZiAoc3dlZXBNb2RlID09IFN3ZWVwT25seSAmJiBtX2F0dHJpYnV0ZXMu
ZGVzdHJ1Y3Rpb24gPT0gRG9lc05vdE5lZWREZXN0cnVjdGlvbikKLSAgICAgICAgcmV0dXJuIEZy
ZWVMaXN0KCk7CisgICAgICAgIHJldHVybjsKIAogICAgIGlmIChVTkxJS0VMWShtX2lzRnJlZUxp
c3RlZCkpIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3dlZXBNb2RlID09IFN3ZWVwVG9GcmVl
TGlzdCk7Ci0gICAgICAgIHJldHVybiBGcmVlTGlzdCgpOworICAgICAgICByZXR1cm47CiAgICAg
fQogICAgIAogICAgIEFTU0VSVCghbV9hbGxvY2F0b3ItPmlzQWxsb2NhdGVkKE5vTG9ja2luZ05l
Y2Vzc2FyeSwgdGhpcykpOwpAQCAtNDI4LDggKzQxNiwxMCBAQCBGcmVlTGlzdCBNYXJrZWRCbG9j
azo6SGFuZGxlOjpzd2VlcChTd2VlCiAgICAgaWYgKHNwYWNlKCktPmlzTWFya2luZygpKQogICAg
ICAgICBibG9jaygpLm1fbG9jay5sb2NrKCk7CiAgICAgCi0gICAgaWYgKG1fYXR0cmlidXRlcy5k
ZXN0cnVjdGlvbiA9PSBOZWVkc0Rlc3RydWN0aW9uKQotICAgICAgICByZXR1cm4gc3Vic3BhY2Uo
KS0+ZmluaXNoU3dlZXAoKnRoaXMsIHN3ZWVwTW9kZSk7CisgICAgaWYgKG1fYXR0cmlidXRlcy5k
ZXN0cnVjdGlvbiA9PSBOZWVkc0Rlc3RydWN0aW9uKSB7CisgICAgICAgIHN1YnNwYWNlKCktPmZp
bmlzaFN3ZWVwKCp0aGlzLCBmcmVlTGlzdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAg
CiAgICAgLy8gSGFuZGxlIHRoZSBuby1kZXN0cnVjdG9yIHNwZWNpYWxpemF0aW9ucyBoZXJlLCBz
aW5jZSB3ZSBoYXZlIHRoZSBtb3N0IG9mIHRob3NlLiBUaGlzCiAgICAgLy8gZW5zdXJlcyB0aGF0
IHRoZXkgZG9uJ3QgZ2V0IHJlLXNwZWNpYWxpemVkIGZvciBldmVyeSBkZXN0cnVjdG9yIHNwYWNl
LgpAQCAtNDM5LDcgKzQyOSw2IEBAIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN3ZWVw
KFN3ZWUKICAgICBOZXdseUFsbG9jYXRlZE1vZGUgbmV3bHlBbGxvY2F0ZWRNb2RlID0gdGhpcy0+
bmV3bHlBbGxvY2F0ZWRNb2RlKCk7CiAgICAgTWFya3NNb2RlIG1hcmtzTW9kZSA9IHRoaXMtPm1h
cmtzTW9kZSgpOwogICAgIAotICAgIEZyZWVMaXN0IHJlc3VsdDsKICAgICBhdXRvIHRyeVNwZWNp
YWxpemVkID0gWyZdICgpIC0+IGJvb2wgewogICAgICAgICBpZiAoc3dlZXBNb2RlICE9IFN3ZWVw
VG9GcmVlTGlzdCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTQ1MiwyMCArNDQxLDIw
IEBAIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN3ZWVwKFN3ZWUKICAgICAgICAgY2Fz
ZSBJc0VtcHR5OgogICAgICAgICAgICAgc3dpdGNoIChtYXJrc01vZGUpIHsKICAgICAgICAgICAg
IGNhc2UgTWFya3NOb3RTdGFsZToKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBzcGVjaWFsaXpl
ZFN3ZWVwPHRydWUsIElzRW1wdHksIFN3ZWVwVG9GcmVlTGlzdCwgQmxvY2tIYXNOb0Rlc3RydWN0
b3JzLCBEb250U2NyaWJibGUsIERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzTm90U3Rh
bGU+KElzRW1wdHksIFN3ZWVwVG9GcmVlTGlzdCwgQmxvY2tIYXNOb0Rlc3RydWN0b3JzLCBEb250
U2NyaWJibGUsIERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzTm90U3RhbGUsIFtdIChW
TSYsIEpTQ2VsbCopIHsgfSk7CisgICAgICAgICAgICAgICAgc3BlY2lhbGl6ZWRTd2VlcDx0cnVl
LCBJc0VtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzTm9EZXN0cnVjdG9ycywgRG9udFNj
cmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBNYXJrc05vdFN0YWxlPihmcmVlTGlz
dCwgSXNFbXB0eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMsIERvbnRT
Y3JpYmJsZSwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCwgTWFya3NOb3RTdGFsZSwgW10gKFZN
JiwgSlNDZWxsKikgeyB9KTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg
ICAgIGNhc2UgTWFya3NTdGFsZToKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBzcGVjaWFsaXpl
ZFN3ZWVwPHRydWUsIElzRW1wdHksIFN3ZWVwVG9GcmVlTGlzdCwgQmxvY2tIYXNOb0Rlc3RydWN0
b3JzLCBEb250U2NyaWJibGUsIERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzU3RhbGU+
KElzRW1wdHksIFN3ZWVwVG9GcmVlTGlzdCwgQmxvY2tIYXNOb0Rlc3RydWN0b3JzLCBEb250U2Ny
aWJibGUsIERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzU3RhbGUsIFtdIChWTSYsIEpT
Q2VsbCopIHsgfSk7CisgICAgICAgICAgICAgICAgc3BlY2lhbGl6ZWRTd2VlcDx0cnVlLCBJc0Vt
cHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzTm9EZXN0cnVjdG9ycywgRG9udFNjcmliYmxl
LCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBNYXJrc1N0YWxlPihmcmVlTGlzdCwgSXNFbXB0
eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwg
RG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCwgTWFya3NTdGFsZSwgW10gKFZNJiwgSlNDZWxsKikg
eyB9KTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE5vdEVtcHR5OgogICAgICAgICAgICAgc3dpdGNo
IChtYXJrc01vZGUpIHsKICAgICAgICAgICAgIGNhc2UgTWFya3NOb3RTdGFsZToKLSAgICAgICAg
ICAgICAgICByZXN1bHQgPSBzcGVjaWFsaXplZFN3ZWVwPHRydWUsIE5vdEVtcHR5LCBTd2VlcFRv
RnJlZUxpc3QsIEJsb2NrSGFzTm9EZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2
ZU5ld2x5QWxsb2NhdGVkLCBNYXJrc05vdFN0YWxlPihJc0VtcHR5LCBTd2VlcFRvRnJlZUxpc3Qs
IEJsb2NrSGFzTm9EZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxs
b2NhdGVkLCBNYXJrc05vdFN0YWxlLCBbXSAoVk0mLCBKU0NlbGwqKSB7IH0pOworICAgICAgICAg
ICAgICAgIHNwZWNpYWxpemVkU3dlZXA8dHJ1ZSwgTm90RW1wdHksIFN3ZWVwVG9GcmVlTGlzdCwg
QmxvY2tIYXNOb0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUsIERvZXNOb3RIYXZlTmV3bHlBbGxv
Y2F0ZWQsIE1hcmtzTm90U3RhbGU+KGZyZWVMaXN0LCBJc0VtcHR5LCBTd2VlcFRvRnJlZUxpc3Qs
IEJsb2NrSGFzTm9EZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxs
b2NhdGVkLCBNYXJrc05vdFN0YWxlLCBbXSAoVk0mLCBKU0NlbGwqKSB7IH0pOwogICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgY2FzZSBNYXJrc1N0YWxlOgotICAgICAg
ICAgICAgICAgIHJlc3VsdCA9IHNwZWNpYWxpemVkU3dlZXA8dHJ1ZSwgTm90RW1wdHksIFN3ZWVw
VG9GcmVlTGlzdCwgQmxvY2tIYXNOb0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUsIERvZXNOb3RI
YXZlTmV3bHlBbGxvY2F0ZWQsIE1hcmtzU3RhbGU+KElzRW1wdHksIFN3ZWVwVG9GcmVlTGlzdCwg
QmxvY2tIYXNOb0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUsIERvZXNOb3RIYXZlTmV3bHlBbGxv
Y2F0ZWQsIE1hcmtzU3RhbGUsIFtdIChWTSYsIEpTQ2VsbCopIHsgfSk7CisgICAgICAgICAgICAg
ICAgc3BlY2lhbGl6ZWRTd2VlcDx0cnVlLCBOb3RFbXB0eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9j
a0hhc05vRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRl
ZCwgTWFya3NTdGFsZT4oZnJlZUxpc3QsIElzRW1wdHksIFN3ZWVwVG9GcmVlTGlzdCwgQmxvY2tI
YXNOb0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUsIERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQs
IE1hcmtzU3RhbGUsIFtdIChWTSYsIEpTQ2VsbCopIHsgfSk7CiAgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKQEAgLTQ3NSwxMCAr
NDY0LDE2IEBAIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN3ZWVwKFN3ZWUKICAgICB9
OwogICAgIAogICAgIGlmICh0cnlTcGVjaWFsaXplZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgICAgICByZXR1cm47CiAKICAgICAvLyBUaGUgdGVtcGxhdGUgYXJndW1lbnRzIGRvbid0
IG1hdHRlciBiZWNhdXNlIHRoZSBmaXJzdCBvbmUgaXMgZmFsc2UuCi0gICAgcmV0dXJuIHNwZWNp
YWxpemVkU3dlZXA8ZmFsc2UsIElzRW1wdHksIFN3ZWVwT25seSwgQmxvY2tIYXNOb0Rlc3RydWN0
b3JzLCBEb250U2NyaWJibGUsIEhhc05ld2x5QWxsb2NhdGVkLCBNYXJrc1N0YWxlPihlbXB0eU1v
ZGUsIHN3ZWVwTW9kZSwgQmxvY2tIYXNOb0Rlc3RydWN0b3JzLCBzY3JpYmJsZU1vZGUsIG5ld2x5
QWxsb2NhdGVkTW9kZSwgbWFya3NNb2RlLCBbXSAoVk0mLCBKU0NlbGwqKSB7IH0pOworICAgIHNw
ZWNpYWxpemVkU3dlZXA8ZmFsc2UsIElzRW1wdHksIFN3ZWVwT25seSwgQmxvY2tIYXNOb0Rlc3Ry
dWN0b3JzLCBEb250U2NyaWJibGUsIEhhc05ld2x5QWxsb2NhdGVkLCBNYXJrc1N0YWxlPihmcmVl
TGlzdCwgZW1wdHlNb2RlLCBzd2VlcE1vZGUsIEJsb2NrSGFzTm9EZXN0cnVjdG9ycywgc2NyaWJi
bGVNb2RlLCBuZXdseUFsbG9jYXRlZE1vZGUsIG1hcmtzTW9kZSwgW10gKFZNJiwgSlNDZWxsKikg
eyB9KTsKK30KKworYm9vbCBNYXJrZWRCbG9jazo6SGFuZGxlOjppc0ZyZWVMaXN0ZWRDZWxsKGNv
bnN0IHZvaWQqIHRhcmdldCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaXNGcmVlTGlzdGVkKCkpOwor
ICAgIHJldHVybiBtX2FsbG9jYXRvci0+aXNGcmVlTGlzdGVkQ2VsbCh0YXJnZXQpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtl
ZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2Vk
QmxvY2suaAkocmV2aXNpb24gMjE3NjQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2VkQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjMsNyArMjMsNiBAQAogCiAjaW5jbHVk
ZSAiQWxsb2NhdG9yQXR0cmlidXRlcy5oIgogI2luY2x1ZGUgIkRlc3RydWN0aW9uTW9kZS5oIgot
I2luY2x1ZGUgIkZyZWVMaXN0LmgiCiAjaW5jbHVkZSAiSGVhcENlbGwuaCIKICNpbmNsdWRlICJJ
dGVyYXRpb25TdGF0dXMuaCIKICNpbmNsdWRlICJXZWFrU2V0LmgiCkBAIC0zNiw2ICszNSw3IEBA
CiAKIG5hbWVzcGFjZSBKU0MgewogICAgIAorY2xhc3MgRnJlZUxpc3Q7CiBjbGFzcyBIZWFwOwog
Y2xhc3MgSlNDZWxsOwogY2xhc3MgTWFya2VkQWxsb2NhdG9yOwpAQCAtMTE3LDIxICsxMTcsMjIg
QEAgcHVibGljOgogICAgICAgICBWTSogdm0oKSBjb25zdDsKICAgICAgICAgV2Vha1NldCYgd2Vh
a1NldCgpOwogICAgICAgICAgICAgCisgICAgICAgIGVudW0gU3dlZXBNb2RlIHsgU3dlZXBPbmx5
LCBTd2VlcFRvRnJlZUxpc3QgfTsKKwogICAgICAgICAvLyBTd2VlcGluZyBlbnN1cmVzIHRoYXQg
ZGVzdHJ1Y3RvcnMgZ2V0IGNhbGxlZCBhbmQgcmVtb3ZlcyB0aGUgYmxvY2sgZnJvbSB0aGUgdW5z
d2VwdAogICAgICAgICAvLyBzZXQuIFN3ZWVwaW5nIHRvIGZyZWUgbGlzdCBhbHNvIHJlbW92ZXMg
dGhlIGJsb2NrIGZyb20gdGhlIGVtcHR5IHNldCwgaWYgaXQgd2FzIGluIHRoYXQKICAgICAgICAg
Ly8gc2V0LiBTd2VlcGluZyB3aXRoIFN3ZWVwT25seSBtYXkgYWRkIHRoaXMgYmxvY2sgdG8gdGhl
IGVtcHR5IHNldCwgaWYgdGhlIGJsb2NrIGlzIGZvdW5kCi0gICAgICAgIC8vIHRvIGJlIGVtcHR5
LgorICAgICAgICAvLyB0byBiZSBlbXB0eS4gVGhlIGZyZWUtbGlzdCBiZWluZyBudWxsIGltcGxp
ZXMgU3dlZXBPbmx5LgogICAgICAgICAvLwogICAgICAgICAvLyBOb3RlIHRoYXQgeW91IG5lZWQg
dG8gbWFrZSBzdXJlIHRoYXQgdGhlIGVtcHR5IGJpdCByZWZsZWN0cyByZWFsaXR5LiBJZiBpdCdz
IG5vdCBzZXQKICAgICAgICAgLy8gYW5kIHRoZSBibG9jayBpcyBmcmVzaGx5IGNyZWF0ZWQsIHRo
ZW4gd2UnbGwgbWFrZSB0aGUgbWlzdGFrZSBvZiBydW5uaW5nIGRlc3RydWN0b3JzIGluCiAgICAg
ICAgIC8vIHRoZSBibG9jay4gSWYgaXQncyBub3Qgc2V0IGFuZCB0aGUgYmxvY2sgaGFzIG5vdGhp
bmcgbWFya2VkLCB0aGVuIHdlJ2xsIG1ha2UgdGhlCiAgICAgICAgIC8vIG1pc3Rha2Ugb2YgbWFr
aW5nIGEgcG9wIGZyZWVsaXN0IHJhdGhlciB0aGFuIGEgYnVtcCBmcmVlbGlzdC4KLSAgICAgICAg
ZW51bSBTd2VlcE1vZGUgeyBTd2VlcE9ubHksIFN3ZWVwVG9GcmVlTGlzdCB9OwotICAgICAgICBG
cmVlTGlzdCBzd2VlcChTd2VlcE1vZGUgPSBTd2VlcE9ubHkpOworICAgICAgICB2b2lkIHN3ZWVw
KEZyZWVMaXN0Kik7CiAgICAgICAgIAogICAgICAgICAvLyBUaGlzIGlzIHRvIGJlIGNhbGxlZCBi
eSBTdWJzcGFjZS4KICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRGVzdHJveUZ1bmM+Ci0gICAg
ICAgIEZyZWVMaXN0IGZpbmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlKFN3ZWVwTW9kZSwgY29uc3Qg
RGVzdHJveUZ1bmMmKTsKKyAgICAgICAgdm9pZCBmaW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZShG
cmVlTGlzdCosIGNvbnN0IERlc3Ryb3lGdW5jJik7CiAgICAgICAgIAogICAgICAgICB2b2lkIHVu
c3dlZXBXaXRoTm9OZXdseUFsbG9jYXRlZCgpOwogICAgICAgICAKQEAgLTE0Nyw3ICsxNDgsNyBA
QCBwdWJsaWM6CiAgICAgICAgIC8vIG9mIHRoZXNlIGZ1bmN0aW9uczoKICAgICAgICAgdm9pZCBk
aWRDb25zdW1lRnJlZUxpc3QoKTsgLy8gQ2FsbCB0aGlzIG9uY2UgeW91J3ZlIGFsbG9jYXRlZCBh
bGwgdGhlIGl0ZW1zIGluIHRoZSBmcmVlIGxpc3QuCiAgICAgICAgIHZvaWQgc3RvcEFsbG9jYXRp
bmcoY29uc3QgRnJlZUxpc3QmKTsKLSAgICAgICAgRnJlZUxpc3QgcmVzdW1lQWxsb2NhdGluZygp
OyAvLyBDYWxsIHRoaXMgaWYgeW91IGNhbm9uaWNhbGl6ZWQgYSBibG9jayBmb3Igc29tZSBub24t
Y29sbGVjdGlvbiByZWxhdGVkIHB1cnBvc2UuCisgICAgICAgIHZvaWQgcmVzdW1lQWxsb2NhdGlu
ZyhGcmVlTGlzdCYpOyAvLyBDYWxsIHRoaXMgaWYgeW91IGNhbm9uaWNhbGl6ZWQgYSBibG9jayBm
b3Igc29tZSBub24tY29sbGVjdGlvbiByZWxhdGVkIHB1cnBvc2UuCiAgICAgICAgICAgICAKICAg
ICAgICAgc2l6ZV90IGNlbGxTaXplKCk7CiAgICAgICAgIGlubGluZSB1bnNpZ25lZCBjZWxsc1Bl
ckJsb2NrKCk7CkBAIC0yMTUsMTAgKzIxNiw3IEBAIHB1YmxpYzoKICAgICAgICAgTWFya3NNb2Rl
IG1hcmtzTW9kZSgpOwogICAgICAgICAKICAgICAgICAgdGVtcGxhdGU8Ym9vbCwgRW1wdHlNb2Rl
LCBTd2VlcE1vZGUsIFN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlLCBTY3JpYmJsZU1vZGUsIE5ld2x5QWxs
b2NhdGVkTW9kZSwgTWFya3NNb2RlLCB0eXBlbmFtZSBEZXN0cm95RnVuYz4KLSAgICAgICAgRnJl
ZUxpc3Qgc3BlY2lhbGl6ZWRTd2VlcChFbXB0eU1vZGUsIFN3ZWVwTW9kZSwgU3dlZXBEZXN0cnVj
dGlvbk1vZGUsIFNjcmliYmxlTW9kZSwgTmV3bHlBbGxvY2F0ZWRNb2RlLCBNYXJrc01vZGUsIGNv
bnN0IERlc3Ryb3lGdW5jJik7Ci0gICAgICAgIAotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jPgotICAgICAgICB2b2lkIGZvckVhY2hGcmVlQ2VsbChjb25zdCBGcmVlTGlzdCYsIGNvbnN0
IEZ1bmMmKTsKKyAgICAgICAgdm9pZCBzcGVjaWFsaXplZFN3ZWVwKEZyZWVMaXN0KiwgRW1wdHlN
b2RlLCBTd2VlcE1vZGUsIFN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlLCBTY3JpYmJsZU1vZGUsIE5ld2x5
QWxsb2NhdGVkTW9kZSwgTWFya3NNb2RlLCBjb25zdCBEZXN0cm95RnVuYyYpOwogICAgICAgICAK
ICAgICAgICAgdm9pZCBzZXRJc0ZyZWVMaXN0ZWQoKTsKICAgICAgICAgCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9ja0lubGluZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9ja0lubGluZXMuaAkocmV2aXNpb24g
MjE3NjQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2tJbmxpbmVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTExNywxMiArMTE3LDYgQEAgaW5saW5lIGJvb2wgTWFya2Vk
QmxvY2s6OkhhbmRsZTo6aXNMaXZlQwogICAgIHJldHVybiBpc0xpdmUobWFya2luZ1ZlcnNpb24s
IGlzTWFya2luZywgc3RhdGljX2Nhc3Q8Y29uc3QgSGVhcENlbGwqPihwKSk7CiB9CiAKLWlubGlu
ZSBib29sIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmlzRnJlZUxpc3RlZENlbGwoY29uc3Qgdm9pZCog
dGFyZ2V0KSBjb25zdAotewotICAgIEFTU0VSVChpc0ZyZWVMaXN0ZWQoKSk7Ci0gICAgcmV0dXJu
IG1fYWxsb2NhdG9yLT5pc0ZyZWVMaXN0ZWRDZWxsKHRhcmdldCk7Ci19Ci0KIC8vIFRoZSBmb2xs
b3dpbmcgaGFzIHRvIGJlIHRydWUgZm9yIHNwZWNpYWxpemF0aW9uIHRvIGtpY2sgaW46CiAvLwog
Ly8gc3dlZXBNb2RlID09IFN3ZWVwVG9GcmVlTGlzdApAQCAtMTQ1LDcgKzEzOSw3IEBAIGlubGlu
ZSBib29sIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmlzRnJlZUwKIC8vIE9ubHkgdGhlIERvZXNOb3RO
ZWVkRGVzdHJ1Y3Rpb24gb25lIHNob3VsZCBiZSBzcGVjaWFsaXplZCBieSBNYXJrZWRCbG9jay4K
IAogdGVtcGxhdGU8Ym9vbCBzcGVjaWFsaXplLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpFbXB0eU1v
ZGUgc3BlY2lhbGl6ZWRFbXB0eU1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwTW9kZSBz
cGVjaWFsaXplZFN3ZWVwTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBEZXN0cnVjdGlv
bk1vZGUgc3BlY2lhbGl6ZWREZXN0cnVjdGlvbk1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlNj
cmliYmxlTW9kZSBzcGVjaWFsaXplZFNjcmliYmxlTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6
TmV3bHlBbGxvY2F0ZWRNb2RlIHNwZWNpYWxpemVkTmV3bHlBbGxvY2F0ZWRNb2RlLCBNYXJrZWRC
bG9jazo6SGFuZGxlOjpNYXJrc01vZGUgc3BlY2lhbGl6ZWRNYXJrc01vZGUsIHR5cGVuYW1lIERl
c3Ryb3lGdW5jPgotRnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3BlY2lhbGl6ZWRTd2Vl
cChNYXJrZWRCbG9jazo6SGFuZGxlOjpFbXB0eU1vZGUgZW1wdHlNb2RlLCBNYXJrZWRCbG9jazo6
SGFuZGxlOjpTd2VlcE1vZGUgc3dlZXBNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcERl
c3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbk1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlNjcmli
YmxlTW9kZSBzY3JpYmJsZU1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6Ok5ld2x5QWxsb2NhdGVk
TW9kZSBuZXdseUFsbG9jYXRlZE1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6Ok1hcmtzTW9kZSBt
YXJrc01vZGUsIGNvbnN0IERlc3Ryb3lGdW5jJiBkZXN0cm95RnVuYykKK3ZvaWQgTWFya2VkQmxv
Y2s6OkhhbmRsZTo6c3BlY2lhbGl6ZWRTd2VlcChGcmVlTGlzdCogZnJlZUxpc3QsIE1hcmtlZEJs
b2NrOjpIYW5kbGU6OkVtcHR5TW9kZSBlbXB0eU1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3
ZWVwTW9kZSBzd2VlcE1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwRGVzdHJ1Y3Rpb25N
b2RlIGRlc3RydWN0aW9uTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U2NyaWJibGVNb2RlIHNj
cmliYmxlTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6TmV3bHlBbGxvY2F0ZWRNb2RlIG5ld2x5
QWxsb2NhdGVkTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6TWFya3NNb2RlIG1hcmtzTW9kZSwg
Y29uc3QgRGVzdHJveUZ1bmMmIGRlc3Ryb3lGdW5jKQogewogICAgIGlmIChzcGVjaWFsaXplKSB7
CiAgICAgICAgIGVtcHR5TW9kZSA9IHNwZWNpYWxpemVkRW1wdHlNb2RlOwpAQCAtMTY1LDYgKzE1
OSw4IEBAIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxpemUKICAgICBpZiAo
ZmFsc2UpCiAgICAgICAgIGRhdGFMb2coUmF3UG9pbnRlcih0aGlzKSwgIi8iLCBSYXdQb2ludGVy
KCZibG9jayksICI6IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxpemVkU3dlZXAhXG4iKTsK
ICAgICAKKyAgICB1bnNpZ25lZCBjZWxsU2l6ZSA9IHRoaXMtPmNlbGxTaXplKCk7CisgICAgCiAg
ICAgaWYgKE9wdGlvbnM6OnVzZUJ1bXBBbGxvY2F0b3IoKQogICAgICAgICAmJiBlbXB0eU1vZGUg
PT0gSXNFbXB0eQogICAgICAgICAmJiBuZXdseUFsbG9jYXRlZE1vZGUgPT0gRG9lc05vdEhhdmVO
ZXdseUFsbG9jYXRlZCkgewpAQCAtMTgyLDcgKzE3OCw3IEBAIEZyZWVMaXN0IE1hcmtlZEJsb2Nr
OjpIYW5kbGU6OnNwZWNpYWxpemUKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgY2hhciog
c3RhcnRPZkxhc3RDZWxsID0gc3RhdGljX2Nhc3Q8Y2hhcio+KGNlbGxBbGlnbihibG9jay5hdG9t
cygpICsgbV9lbmRBdG9tIC0gMSkpOwotICAgICAgICBjaGFyKiBwYXlsb2FkRW5kID0gc3RhcnRP
Zkxhc3RDZWxsICsgY2VsbFNpemUoKTsKKyAgICAgICAgY2hhciogcGF5bG9hZEVuZCA9IHN0YXJ0
T2ZMYXN0Q2VsbCArIGNlbGxTaXplOwogICAgICAgICBSRUxFQVNFX0FTU0VSVChwYXlsb2FkRW5k
IC0gTWFya2VkQmxvY2s6OmJsb2NrU2l6ZSA8PSBiaXR3aXNlX2Nhc3Q8Y2hhcio+KCZibG9jaykp
OwogICAgICAgICBjaGFyKiBwYXlsb2FkQmVnaW4gPSBiaXR3aXNlX2Nhc3Q8Y2hhcio+KGJsb2Nr
LmF0b21zKCkgKyBmaXJzdEF0b20oKSk7CiAgICAgICAgIGlmIChzY3JpYmJsZU1vZGUgPT0gU2Ny
aWJibGUpCkBAIC0xOTMsMTAgKzE4OSwxMSBAQCBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxl
OjpzcGVjaWFsaXplCiAgICAgICAgICAgICBtX2FsbG9jYXRvci0+c2V0SXNFbXB0eShOb0xvY2tp
bmdOZWNlc3NhcnksIHRoaXMsIHRydWUpOwogICAgICAgICBpZiAoc3BhY2UoKS0+aXNNYXJraW5n
KCkpCiAgICAgICAgICAgICBibG9jay5tX2xvY2sudW5sb2NrKCk7Ci0gICAgICAgIEZyZWVMaXN0
IHJlc3VsdCA9IEZyZWVMaXN0OjpidW1wKHBheWxvYWRFbmQsIHBheWxvYWRFbmQgLSBwYXlsb2Fk
QmVnaW4pOworICAgICAgICBpZiAoc3dlZXBNb2RlID09IFN3ZWVwVG9GcmVlTGlzdCkKKyAgICAg
ICAgICAgIGZyZWVMaXN0LT5pbml0aWFsaXplQnVtcChwYXlsb2FkRW5kLCBwYXlsb2FkRW5kIC0g
cGF5bG9hZEJlZ2luKTsKICAgICAgICAgaWYgKGZhbHNlKQotICAgICAgICAgICAgZGF0YUxvZygi
UXVpY2tseSBzd2VwdCBibG9jayAiLCBSYXdQb2ludGVyKHRoaXMpLCAiIHdpdGggY2VsbCBzaXpl
ICIsIGNlbGxTaXplKCksICIgYW5kIGF0dHJpYnV0ZXMgIiwgbV9hdHRyaWJ1dGVzLCAiOiAiLCBy
ZXN1bHQsICJcbiIpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgZGF0YUxv
ZygiUXVpY2tseSBzd2VwdCBibG9jayAiLCBSYXdQb2ludGVyKHRoaXMpLCAiIHdpdGggY2VsbCBz
aXplICIsIGNlbGxTaXplLCAiIGFuZCBhdHRyaWJ1dGVzICIsIG1fYXR0cmlidXRlcywgIjogIiwg
cG9pbnRlckR1bXAoZnJlZUxpc3QpLCAiXG4iKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAog
ICAgIC8vIFRoaXMgcHJvZHVjZXMgYSBmcmVlIGxpc3QgdGhhdCBpcyBvcmRlcmVkIGluIHJldmVy
c2UgdGhyb3VnaCB0aGUgYmxvY2suCkBAIC0yMDQsNiArMjAxLDggQEAgRnJlZUxpc3QgTWFya2Vk
QmxvY2s6OkhhbmRsZTo6c3BlY2lhbGl6ZQogICAgIC8vIG9yZGVyIG9mIHRoZSBmcmVlIGxpc3Qu
CiAgICAgRnJlZUNlbGwqIGhlYWQgPSAwOwogICAgIHNpemVfdCBjb3VudCA9IDA7CisgICAgdWlu
dHB0cl90IHNlY3JldDsKKyAgICBjcnlwdG9ncmFwaGljYWxseVJhbmRvbVZhbHVlcygmc2VjcmV0
LCBzaXplb2YodWludHB0cl90KSk7CiAgICAgYm9vbCBpc0VtcHR5ID0gdHJ1ZTsKICAgICBWZWN0
b3I8c2l6ZV90PiBkZWFkQ2VsbHM7CiAgICAgVk0mIHZtID0gKnRoaXMtPnZtKCk7CkBAIC0yMjEs
OCArMjIwLDggQEAgRnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3BlY2lhbGl6ZQogICAg
ICAgICBpZiAoc3dlZXBNb2RlID09IFN3ZWVwVG9GcmVlTGlzdCkgewogICAgICAgICAgICAgRnJl
ZUNlbGwqIGZyZWVDZWxsID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8RnJlZUNlbGwqPihjZWxsKTsK
ICAgICAgICAgICAgIGlmIChzY3JpYmJsZU1vZGUgPT0gU2NyaWJibGUpCi0gICAgICAgICAgICAg
ICAgc2NyaWJibGUoZnJlZUNlbGwsIGNlbGxTaXplKCkpOwotICAgICAgICAgICAgZnJlZUNlbGwt
Pm5leHQgPSBoZWFkOworICAgICAgICAgICAgICAgIHNjcmliYmxlKGZyZWVDZWxsLCBjZWxsU2l6
ZSk7CisgICAgICAgICAgICBmcmVlQ2VsbC0+c2V0TmV4dChoZWFkLCBzZWNyZXQpOwogICAgICAg
ICAgICAgaGVhZCA9IGZyZWVDZWxsOwogICAgICAgICAgICAgKytjb3VudDsKICAgICAgICAgfQpA
QCAtMjU0LDI2ICsyNTMsMjUgQEAgRnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3BlY2lh
bGl6ZQogICAgICAgICAgICAgaGFuZGxlRGVhZENlbGwoaSk7CiAgICAgfQogCi0gICAgRnJlZUxp
c3QgcmVzdWx0ID0gRnJlZUxpc3Q6Omxpc3QoaGVhZCwgY291bnQgKiBjZWxsU2l6ZSgpKTsKLSAg
ICBpZiAoc3dlZXBNb2RlID09IFN3ZWVwVG9GcmVlTGlzdCkKKyAgICBpZiAoc3dlZXBNb2RlID09
IFN3ZWVwVG9GcmVlTGlzdCkgeworICAgICAgICBmcmVlTGlzdC0+aW5pdGlhbGl6ZUxpc3QoaGVh
ZCwgc2VjcmV0LCBjb3VudCAqIGNlbGxTaXplKTsKICAgICAgICAgc2V0SXNGcmVlTGlzdGVkKCk7
Ci0gICAgZWxzZSBpZiAoaXNFbXB0eSkKKyAgICB9IGVsc2UgaWYgKGlzRW1wdHkpCiAgICAgICAg
IG1fYWxsb2NhdG9yLT5zZXRJc0VtcHR5KE5vTG9ja2luZ05lY2Vzc2FyeSwgdGhpcywgdHJ1ZSk7
CiAgICAgaWYgKGZhbHNlKQotICAgICAgICBkYXRhTG9nKCJTbG93bHkgc3dlcHQgYmxvY2sgIiwg
UmF3UG9pbnRlcigmYmxvY2spLCAiIHdpdGggY2VsbCBzaXplICIsIGNlbGxTaXplKCksICIgYW5k
IGF0dHJpYnV0ZXMgIiwgbV9hdHRyaWJ1dGVzLCAiOiAiLCByZXN1bHQsICJcbiIpOwotICAgIHJl
dHVybiByZXN1bHQ7CisgICAgICAgIGRhdGFMb2coIlNsb3dseSBzd2VwdCBibG9jayAiLCBSYXdQ
b2ludGVyKCZibG9jayksICIgd2l0aCBjZWxsIHNpemUgIiwgY2VsbFNpemUsICIgYW5kIGF0dHJp
YnV0ZXMgIiwgbV9hdHRyaWJ1dGVzLCAiOiAiLCBwb2ludGVyRHVtcChmcmVlTGlzdCksICJcbiIp
OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBEZXN0cm95RnVuYz4KLUZyZWVMaXN0IE1hcmtlZEJs
b2NrOjpIYW5kbGU6OmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlKFN3ZWVwTW9kZSBzd2VlcE1v
ZGUsIGNvbnN0IERlc3Ryb3lGdW5jJiBkZXN0cm95RnVuYykKK3ZvaWQgTWFya2VkQmxvY2s6Okhh
bmRsZTo6ZmluaXNoU3dlZXBLbm93aW5nU3Vic3BhY2UoRnJlZUxpc3QqIGZyZWVMaXN0LCBjb25z
dCBEZXN0cm95RnVuYyYgZGVzdHJveUZ1bmMpCiB7CisgICAgU3dlZXBNb2RlIHN3ZWVwTW9kZSA9
IGZyZWVMaXN0ID8gU3dlZXBUb0ZyZWVMaXN0IDogU3dlZXBPbmx5OwogICAgIFN3ZWVwRGVzdHJ1
Y3Rpb25Nb2RlIGRlc3RydWN0aW9uTW9kZSA9IHRoaXMtPnN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlKCk7
CiAgICAgRW1wdHlNb2RlIGVtcHR5TW9kZSA9IHRoaXMtPmVtcHR5TW9kZSgpOwogICAgIFNjcmli
YmxlTW9kZSBzY3JpYmJsZU1vZGUgPSB0aGlzLT5zY3JpYmJsZU1vZGUoKTsKICAgICBOZXdseUFs
bG9jYXRlZE1vZGUgbmV3bHlBbGxvY2F0ZWRNb2RlID0gdGhpcy0+bmV3bHlBbGxvY2F0ZWRNb2Rl
KCk7CiAgICAgTWFya3NNb2RlIG1hcmtzTW9kZSA9IHRoaXMtPm1hcmtzTW9kZSgpOwogCi0gICAg
RnJlZUxpc3QgcmVzdWx0OwogICAgIGF1dG8gdHJ5U3BlY2lhbGl6ZWQgPSBbJl0gKCkgLT4gYm9v
bCB7CiAgICAgICAgIGlmIChzd2VlcE1vZGUgIT0gU3dlZXBUb0ZyZWVMaXN0KQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwpAQCAtMjg4LDEwICsyODYsMTAgQEAgRnJlZUxpc3QgTWFya2VkQmxv
Y2s6OkhhbmRsZTo6ZmluaXNoU3dlZQogICAgICAgICAKICAgICAgICAgc3dpdGNoIChtYXJrc01v
ZGUpIHsKICAgICAgICAgY2FzZSBNYXJrc05vdFN0YWxlOgotICAgICAgICAgICAgcmVzdWx0ID0g
c3BlY2lhbGl6ZWRTd2VlcDx0cnVlLCBOb3RFbXB0eSwgU3dlZXBUb0ZyZWVMaXN0LCBCbG9ja0hh
c0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUsIERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQsIE1h
cmtzTm90U3RhbGU+KElzRW1wdHksIFN3ZWVwVG9GcmVlTGlzdCwgQmxvY2tIYXNEZXN0cnVjdG9y
cywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBNYXJrc05vdFN0YWxl
LCBkZXN0cm95RnVuYyk7CisgICAgICAgICAgICBzcGVjaWFsaXplZFN3ZWVwPHRydWUsIE5vdEVt
cHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzRGVzdHJ1Y3RvcnMsIERvbnRTY3JpYmJsZSwg
RG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCwgTWFya3NOb3RTdGFsZT4oZnJlZUxpc3QsIElzRW1w
dHksIFN3ZWVwVG9GcmVlTGlzdCwgQmxvY2tIYXNEZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBE
b2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBNYXJrc05vdFN0YWxlLCBkZXN0cm95RnVuYyk7CiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgY2FzZSBNYXJrc1N0YWxlOgotICAgICAg
ICAgICAgcmVzdWx0ID0gc3BlY2lhbGl6ZWRTd2VlcDx0cnVlLCBOb3RFbXB0eSwgU3dlZXBUb0Zy
ZWVMaXN0LCBCbG9ja0hhc0Rlc3RydWN0b3JzLCBEb250U2NyaWJibGUsIERvZXNOb3RIYXZlTmV3
bHlBbGxvY2F0ZWQsIE1hcmtzU3RhbGU+KElzRW1wdHksIFN3ZWVwVG9GcmVlTGlzdCwgQmxvY2tI
YXNEZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBN
YXJrc1N0YWxlLCBkZXN0cm95RnVuYyk7CisgICAgICAgICAgICBzcGVjaWFsaXplZFN3ZWVwPHRy
dWUsIE5vdEVtcHR5LCBTd2VlcFRvRnJlZUxpc3QsIEJsb2NrSGFzRGVzdHJ1Y3RvcnMsIERvbnRT
Y3JpYmJsZSwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCwgTWFya3NTdGFsZT4oZnJlZUxpc3Qs
IElzRW1wdHksIFN3ZWVwVG9GcmVlTGlzdCwgQmxvY2tIYXNEZXN0cnVjdG9ycywgRG9udFNjcmli
YmxlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkLCBNYXJrc1N0YWxlLCBkZXN0cm95RnVuYyk7
CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTI5OSwx
MCArMjk3LDEwIEBAIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OmZpbmlzaFN3ZWUKICAg
ICB9OwogICAgIAogICAgIGlmICh0cnlTcGVjaWFsaXplZCgpKQotICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgICAgICByZXR1cm47CiAgICAgCiAgICAgLy8gVGhlIHRlbXBsYXRlIGFyZ3VtZW50
cyBkb24ndCBtYXR0ZXIgYmVjYXVzZSB0aGUgZmlyc3Qgb25lIGlzIGZhbHNlLgotICAgIHJldHVy
biBzcGVjaWFsaXplZFN3ZWVwPGZhbHNlLCBJc0VtcHR5LCBTd2VlcE9ubHksIEJsb2NrSGFzTm9E
ZXN0cnVjdG9ycywgRG9udFNjcmliYmxlLCBIYXNOZXdseUFsbG9jYXRlZCwgTWFya3NTdGFsZT4o
ZW1wdHlNb2RlLCBzd2VlcE1vZGUsIGRlc3RydWN0aW9uTW9kZSwgc2NyaWJibGVNb2RlLCBuZXds
eUFsbG9jYXRlZE1vZGUsIG1hcmtzTW9kZSwgZGVzdHJveUZ1bmMpOworICAgIHNwZWNpYWxpemVk
U3dlZXA8ZmFsc2UsIElzRW1wdHksIFN3ZWVwT25seSwgQmxvY2tIYXNOb0Rlc3RydWN0b3JzLCBE
b250U2NyaWJibGUsIEhhc05ld2x5QWxsb2NhdGVkLCBNYXJrc1N0YWxlPihmcmVlTGlzdCwgZW1w
dHlNb2RlLCBzd2VlcE1vZGUsIGRlc3RydWN0aW9uTW9kZSwgc2NyaWJibGVNb2RlLCBuZXdseUFs
bG9jYXRlZE1vZGUsIG1hcmtzTW9kZSwgZGVzdHJveUZ1bmMpOwogfQogCiBpbmxpbmUgTWFya2Vk
QmxvY2s6OkhhbmRsZTo6U3dlZXBEZXN0cnVjdGlvbk1vZGUgTWFya2VkQmxvY2s6OkhhbmRsZTo6
c3dlZXBEZXN0cnVjdGlvbk1vZGUoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U3Vic3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1
YnNwYWNlLmNwcAkocmV2aXNpb24gMjE3NjQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU3Vic3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw5ICs3Nyw5IEBAIFN1YnNwYWNl
Ojp+U3Vic3BhY2UoKQogewogfQogCi1GcmVlTGlzdCBTdWJzcGFjZTo6ZmluaXNoU3dlZXAoTWFy
a2VkQmxvY2s6OkhhbmRsZSYgYmxvY2ssIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwTW9kZSBz
d2VlcE1vZGUpCit2b2lkIFN1YnNwYWNlOjpmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxl
JiBibG9jaywgRnJlZUxpc3QqIGZyZWVMaXN0KQogewotICAgIHJldHVybiBibG9jay5maW5pc2hT
d2VlcEtub3dpbmdTdWJzcGFjZShzd2VlcE1vZGUsIERlc3Ryb3lGdW5jKCkpOworICAgIGJsb2Nr
LmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlKGZyZWVMaXN0LCBEZXN0cm95RnVuYygpKTsKIH0K
IAogdm9pZCBTdWJzcGFjZTo6ZGVzdHJveShWTSYgdm0sIEpTQ2VsbCogY2VsbCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuaAkocmV2aXNpb24gMjE3NjQ2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTQs
NyArNTQsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgLy8gVGhlIHB1cnBvc2Ugb2Ygb3ZlcnJpZGlu
ZyB0aGlzIGlzIHRvIHNwZWNpYWxpemUgdGhlIHN3ZWVwIGZvciB5b3VyIGRlc3RydWN0b3JzLiBU
aGlzIHdvbid0CiAgICAgLy8gYmUgY2FsbGVkIGZvciBuby1kZXN0cnVjdG9yIGJsb2Nrcy4gVGhp
cyBtdXN0IGNhbGwgTWFya2VkQmxvY2s6OmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlLgotICAg
IHZpcnR1YWwgRnJlZUxpc3QgZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYsIE1hcmtl
ZEJsb2NrOjpIYW5kbGU6OlN3ZWVwTW9kZSk7CisgICAgdmlydHVhbCB2b2lkIGZpbmlzaFN3ZWVw
KE1hcmtlZEJsb2NrOjpIYW5kbGUmLCBGcmVlTGlzdCopOwogICAgIAogICAgIC8vIFRoZXNlIGdl
dCBjYWxsZWQgZm9yIGxhcmdlIG9iamVjdHMuCiAgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koVk0m
LCBKU0NlbGwqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlSW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNl
SW5saW5lcy5oCShyZXZpc2lvbiAyMTc2NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TdWJzcGFjZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI3By
YWdtYSBvbmNlCiAKICNpbmNsdWRlICJKU0NlbGwuaCIKLSNpbmNsdWRlICJNYXJrZWRBbGxvY2F0
b3IuaCIKKyNpbmNsdWRlICJNYXJrZWRBbGxvY2F0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTWFy
a2VkQmxvY2suaCIKICNpbmNsdWRlICJNYXJrZWRTcGFjZS5oIgogI2luY2x1ZGUgIlN1YnNwYWNl
LmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJ
KHJldmlzaW9uIDIxNzY0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlI
ZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0NTgsNyArMTQ1OCw3IEBAIHB1YmxpYzoKICAg
ICAgICAgSnVtcCBwb3BQYXRoOwogICAgICAgICBKdW1wIGRvbmU7CiAgICAgICAgIAotICAgICAg
ICBsb2FkMzIoQWRkcmVzcyhhbGxvY2F0b3JHUFIsIE1hcmtlZEFsbG9jYXRvcjo6b2Zmc2V0T2ZG
cmVlTGlzdCgpICsgT0JKRUNUX09GRlNFVE9GKEZyZWVMaXN0LCByZW1haW5pbmcpKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBNYXJrZWRBbGxvY2F0
b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZlJlbWFpbmluZygpKSwg
cmVzdWx0R1BSKTsKICAgICAgICAgcG9wUGF0aCA9IGJyYW5jaFRlc3QzMihaZXJvLCByZXN1bHRH
UFIpOwogICAgICAgICBpZiAoYWxsb2NhdG9yKQogICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZElt
bTMyKC1hbGxvY2F0b3ItPmNlbGxTaXplKCkpLCByZXN1bHRHUFIsIHNjcmF0Y2hHUFIpOwpAQCAt
MTQ3Miw4ICsxNDcyLDggQEAgcHVibGljOgogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAg
ICAgIG5lZ1B0cihyZXN1bHRHUFIpOwotICAgICAgICBzdG9yZTMyKHNjcmF0Y2hHUFIsIEFkZHJl
c3MoYWxsb2NhdG9yR1BSLCBNYXJrZWRBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIE9C
SkVDVF9PRkZTRVRPRihGcmVlTGlzdCwgcmVtYWluaW5nKSkpOwotICAgICAgICBBZGRyZXNzIHBh
eWxvYWRFbmRBZGRyID0gQWRkcmVzcyhhbGxvY2F0b3JHUFIsIE1hcmtlZEFsbG9jYXRvcjo6b2Zm
c2V0T2ZGcmVlTGlzdCgpICsgT0JKRUNUX09GRlNFVE9GKEZyZWVMaXN0LCBwYXlsb2FkRW5kKSk7
CisgICAgICAgIHN0b3JlMzIoc2NyYXRjaEdQUiwgQWRkcmVzcyhhbGxvY2F0b3JHUFIsIE1hcmtl
ZEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mUmVtYWlu
aW5nKCkpKTsKKyAgICAgICAgQWRkcmVzcyBwYXlsb2FkRW5kQWRkciA9IEFkZHJlc3MoYWxsb2Nh
dG9yR1BSLCBNYXJrZWRBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0Ojpv
ZmZzZXRPZlBheWxvYWRFbmQoKSk7CiAgICAgICAgIGlmIChpc1g4NigpKQogICAgICAgICAgICAg
YWRkUHRyKHBheWxvYWRFbmRBZGRyLCByZXN1bHRHUFIpOwogICAgICAgICBlbHNlIHsKQEAgLTE0
ODUsMTMgKzE0ODUsMTkgQEAgcHVibGljOgogICAgICAgICAKICAgICAgICAgcG9wUGF0aC5saW5r
KHRoaXMpOwogICAgICAgICAKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKGFsbG9jYXRvckdQUiwg
TWFya2VkQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRnJl
ZUxpc3QsIGhlYWQpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKGFsbG9j
YXRvckdQUiwgTWFya2VkQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6
b2Zmc2V0T2ZTY3JhbWJsZWRIZWFkKCkpLCByZXN1bHRHUFIpOworICAgICAgICBpZiAoaXNYODYo
KSkKKyAgICAgICAgICAgIHhvclB0cihBZGRyZXNzKGFsbG9jYXRvckdQUiwgTWFya2VkQWxsb2Nh
dG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZTZWNyZXQoKSksIHJl
c3VsdEdQUik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGFs
bG9jYXRvckdQUiwgTWFya2VkQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlz
dDo6b2Zmc2V0T2ZTZWNyZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgeG9yUHRyKHNj
cmF0Y2hHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIH0KICAgICAgICAgc2xvd1BhdGguYXBwZW5k
KGJyYW5jaFRlc3RQdHIoWmVybywgcmVzdWx0R1BSKSk7CiAgICAgICAgIAogICAgICAgICAvLyBU
aGUgb2JqZWN0IGlzIGhhbGYtYWxsb2NhdGVkOiB3ZSBoYXZlIHdoYXQgd2Uga25vdyBpcyBhIGZy
ZXNoIG9iamVjdCwgYnV0CiAgICAgICAgIC8vIGl0J3Mgc3RpbGwgb24gdGhlIEdDJ3MgZnJlZSBs
aXN0LgogICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0R1BSKSwgc2NyYXRjaEdQUik7Ci0g
ICAgICAgIHN0b3JlUHRyKHNjcmF0Y2hHUFIsIEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBNYXJrZWRB
bGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIE9CSkVDVF9PRkZTRVRPRihGcmVlTGlzdCwg
aGVhZCkpKTsKKyAgICAgICAgc3RvcmVQdHIoc2NyYXRjaEdQUiwgQWRkcmVzcyhhbGxvY2F0b3JH
UFIsIE1hcmtlZEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNl
dE9mU2NyYW1ibGVkSGVhZCgpKSk7CiAgICAgICAgIAogICAgICAgICBkb25lLmxpbmsodGhpcyk7
CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVjdGli
bGVPYmplY3RTdWJzcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3RTdWJzcGFjZS5jcHAJKHJldmlzaW9uIDIxNzY0
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0
U3Vic3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw5ICs1Miw5IEBAIEpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0U3Vic3BhY2U6On5KU0Rlc3RydWMKIHsKIH0KIAotRnJlZUxpc3QgSlNEZXN0cnVj
dGlibGVPYmplY3RTdWJzcGFjZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYgaGFu
ZGxlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcE1vZGUgc3dlZXBNb2RlKQordm9pZCBKU0Rl
c3RydWN0aWJsZU9iamVjdFN1YnNwYWNlOjpmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxl
JiBoYW5kbGUsIEZyZWVMaXN0KiBmcmVlTGlzdCkKIHsKLSAgICByZXR1cm4gaGFuZGxlLmZpbmlz
aFN3ZWVwS25vd2luZ1N1YnNwYWNlKHN3ZWVwTW9kZSwgRGVzdHJveUZ1bmMoKSk7CisgICAgaGFu
ZGxlLmZpbmlzaFN3ZWVwS25vd2luZ1N1YnNwYWNlKGZyZWVMaXN0LCBEZXN0cm95RnVuYygpKTsK
IH0KIAogdm9pZCBKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlOjpkZXN0cm95KFZNJiB2bSwg
SlNDZWxsKiBjZWxsKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0
cnVjdGlibGVPYmplY3RTdWJzcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0U3Vic3BhY2UuaAkocmV2aXNpb24gMjE3
NjQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmpl
Y3RTdWJzcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIHB1YmxpYzoKICAg
ICBKU19FWFBPUlRfUFJJVkFURSBKU0Rlc3RydWN0aWJsZU9iamVjdFN1YnNwYWNlKENTdHJpbmcg
bmFtZSwgSGVhcCYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgfkpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0U3Vic3BhY2UoKTsKICAgICAKLSAgICBGcmVlTGlzdCBmaW5pc2hTd2VlcChNYXJr
ZWRCbG9jazo6SGFuZGxlJiwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBNb2RlKSBvdmVycmlk
ZTsKKyAgICB2b2lkIGZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmLCBGcmVlTGlzdCop
IG92ZXJyaWRlOwogICAgIHZvaWQgZGVzdHJveShWTSYsIEpTQ2VsbCopIG92ZXJyaWRlOwogfTsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJs
ZU9iamVjdFN1YnNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UuY3BwCShyZXZpc2lvbiAy
MTc2NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlh
YmxlT2JqZWN0U3Vic3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw5ICs1Miw5IEBAIEpT
U2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZTo6fkpTU2UKIHsKIH0KIAotRnJlZUxpc3Qg
SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlOjpmaW5pc2hTd2VlcChNYXJrZWRCbG9j
azo6SGFuZGxlJiBoYW5kbGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwTW9kZSBzd2VlcE1v
ZGUpCit2b2lkIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZTo6ZmluaXNoU3dlZXAo
TWFya2VkQmxvY2s6OkhhbmRsZSYgaGFuZGxlLCBGcmVlTGlzdCogZnJlZUxpc3QpCiB7Ci0gICAg
cmV0dXJuIGhhbmRsZS5maW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZShzd2VlcE1vZGUsIERlc3Ry
b3lGdW5jKCkpOworICAgIGhhbmRsZS5maW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZShmcmVlTGlz
dCwgRGVzdHJveUZ1bmMoKSk7CiB9CiAKIHZvaWQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1
YnNwYWNlOjpkZXN0cm95KFZNJiB2bSwgSlNDZWxsKiBjZWxsKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdFN1YnNwYWNlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJp
YWJsZU9iamVjdFN1YnNwYWNlLmgJKHJldmlzaW9uIDIxNzY0NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3RTdWJzcGFjZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFU
RSBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0U3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJik7
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVj
dFN1YnNwYWNlKCk7CiAgICAgCi0gICAgRnJlZUxpc3QgZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6
OkhhbmRsZSYsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwTW9kZSkgb3ZlcnJpZGU7CisgICAg
dm9pZCBmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiwgRnJlZUxpc3QqKSBvdmVycmlk
ZTsKICAgICB2b2lkIGRlc3Ryb3koVk0mLCBKU0NlbGwqKSBvdmVycmlkZTsKIH07CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nU3Vic3BhY2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nU3Vic3BhY2Uu
Y3BwCShyZXZpc2lvbiAyMTc2NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1N0cmluZ1N1YnNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsOSArNTIsOSBAQCBKU1N0
cmluZ1N1YnNwYWNlOjp+SlNTdHJpbmdTdWJzcGFjZSgpCiB7CiB9CiAKLUZyZWVMaXN0IEpTU3Ry
aW5nU3Vic3BhY2U6OmZpbmlzaFN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGUmIGhhbmRsZSwgTWFy
a2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBNb2RlIHN3ZWVwTW9kZSkKK3ZvaWQgSlNTdHJpbmdTdWJz
cGFjZTo6ZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYgaGFuZGxlLCBGcmVlTGlzdCog
ZnJlZUxpc3QpCiB7Ci0gICAgcmV0dXJuIGhhbmRsZS5maW5pc2hTd2VlcEtub3dpbmdTdWJzcGFj
ZShzd2VlcE1vZGUsIERlc3Ryb3lGdW5jKCkpOworICAgIGhhbmRsZS5maW5pc2hTd2VlcEtub3dp
bmdTdWJzcGFjZShmcmVlTGlzdCwgRGVzdHJveUZ1bmMoKSk7CiB9CiAKIHZvaWQgSlNTdHJpbmdT
dWJzcGFjZTo6ZGVzdHJveShWTSYgdm0sIEpTQ2VsbCogY2VsbCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nU3Vic3BhY2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ1N1YnNwYWNlLmgJKHJldmlzaW9uIDIx
NzY0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nU3Vic3BhY2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgSlNTdHJpbmdTdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmKTsKICAgICBKU19F
WFBPUlRfUFJJVkFURSB2aXJ0dWFsIH5KU1N0cmluZ1N1YnNwYWNlKCk7CiAgICAgCi0gICAgRnJl
ZUxpc3QgZmluaXNoU3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZSYsIE1hcmtlZEJsb2NrOjpIYW5k
bGU6OlN3ZWVwTW9kZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBmaW5pc2hTd2VlcChNYXJrZWRCbG9j
azo6SGFuZGxlJiwgRnJlZUxpc3QqKSBvdmVycmlkZTsKICAgICB2b2lkIGRlc3Ryb3koVk0mLCBK
U0NlbGwqKSBvdmVycmlkZTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9PcHRpb25zLmgJKHJldmlzaW9uIDIxNzY0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzYyLDcgKzM2Miw3IEBAIHR5cGVk
ZWYgY29uc3QgY2hhciogb3B0aW9uU3RyaW5nOwogICAgIHYoZ2NMb2dMZXZlbCwgbG9nR0MsIEdD
TG9nZ2luZzo6Tm9uZSwgTm9ybWFsLCAiZGVidWdnaW5nIG9wdGlvbiB0byBsb2cgR0MgYWN0aXZp
dHkgKDAgPSBOb25lLCAxID0gQmFzaWMsIDIgPSBWZXJib3NlKSIpIFwKICAgICB2KGJvb2wsIHVz
ZUdDLCB0cnVlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIGdjQXRFbmQsIGZhbHNl
LCBOb3JtYWwsICJJZiB0cnVlLCB0aGUganNjIENMSSB3aWxsIGRvIGEgR0MgYmVmb3JlIGV4aXRp
bmciKSBcCi0gICAgdihib29sLCBmb3JjZUdDU2xvd1BhdGhzLCBmYWxzZSwgTm9ybWFsLCAiSWYg
dHJ1ZSwgd2Ugd2lsbCBmb3JjZSBhbGwgSklUIGZhc3QgYWxsb2NhdGlvbnMgZG93biB0aGVpciBz
bG93IHBhdGhzLiIpXAorICAgIHYoYm9vbCwgZm9yY2VHQ1Nsb3dQYXRocywgZmFsc2UsIE5vcm1h
bCwgIklmIHRydWUsIHdlIHdpbGwgZm9yY2UgYWxsIEpJVCBmYXN0IGFsbG9jYXRpb25zIGRvd24g
dGhlaXIgc2xvdyBwYXRocy4iKSBcCiAgICAgdih1bnNpZ25lZCwgZ2NNYXhIZWFwU2l6ZSwgMCwg
Tm9ybWFsLCBudWxscHRyKSBcCiAgICAgdih1bnNpZ25lZCwgZm9yY2VSQU1TaXplLCAwLCBOb3Jt
YWwsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIHJlY29yZEdDUGF1c2VUaW1lcywgZmFsc2UsIE5v
cm1hbCwgbnVsbHB0cikgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UuY3BwCShy
ZXZpc2lvbiAyMTc2NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5Q29kZUJsb2NrU3Vic3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw5ICs1Niw5
IEBAIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZTo6fkpTV2ViQXMKIHsKIH0KIAotRnJl
ZUxpc3QgSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlOjpmaW5pc2hTd2VlcChNYXJrZWRC
bG9jazo6SGFuZGxlJiBoYW5kbGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwTW9kZSBzd2Vl
cE1vZGUpCit2b2lkIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZTo6ZmluaXNoU3dlZXAo
TWFya2VkQmxvY2s6OkhhbmRsZSYgaGFuZGxlLCBGcmVlTGlzdCogZnJlZUxpc3QpCiB7Ci0gICAg
cmV0dXJuIGhhbmRsZS5maW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZShzd2VlcE1vZGUsIERlc3Ry
b3lGdW5jKCkpOworICAgIGhhbmRsZS5maW5pc2hTd2VlcEtub3dpbmdTdWJzcGFjZShmcmVlTGlz
dCwgRGVzdHJveUZ1bmMoKSk7CiB9CiAKIHZvaWQgSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNw
YWNlOjpkZXN0cm95KFZNJiB2bSwgSlNDZWxsKiBjZWxsKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9ja1N1YnNwYWNlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNvZGVCbG9j
a1N1YnNwYWNlLmgJKHJldmlzaW9uIDIxNzY0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlDb2RlQmxvY2tTdWJzcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNiw3ICszNiw3IEBAIHB1YmxpYzoKICAgICBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrU3Vic3Bh
Y2UoQ1N0cmluZyBuYW1lLCBIZWFwJik7CiAgICAgdmlydHVhbCB+SlNXZWJBc3NlbWJseUNvZGVC
bG9ja1N1YnNwYWNlKCk7CiAgICAgCi0gICAgRnJlZUxpc3QgZmluaXNoU3dlZXAoTWFya2VkQmxv
Y2s6OkhhbmRsZSYsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwTW9kZSkgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiwgRnJlZUxpc3QqKSBvdmVy
cmlkZTsKICAgICB2b2lkIGRlc3Ryb3koVk0mLCBKU0NlbGwqKSBvdmVycmlkZTsKIH07CiAK
</data>
<flag name="review"
          id="332740"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
      

    </bug>

</bugzilla>