<?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>89608</bug_id>
          
          <creation_ts>2012-06-20 15:38:34 -0700</creation_ts>
          <short_desc>FastMalloc.cpp needs to have its style updated</short_desc>
          <delta_ts>2013-06-21 16:50:10 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Windows 7</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P3</priority>
          <bug_severity>Minor</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>89366</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">alex.christensen</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>ap</cc>
    
    <cc>bfulgham</cc>
    
    <cc>darin</cc>
    
    <cc>eric</cc>
    
    <cc>fishd</cc>
    
    <cc>ggaren</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>mjs</cc>
    
    <cc>mrowe</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>653946</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">alex.christensen</who>
    <bug_when>2012-06-20 15:38:34 -0700</bug_when>
    <thetext>Source/WTF/wtf/FastMalloc.cpp does not conform to webkit coding style.  This is causing problems with reordering the definitions so I can fix a 0-length array compile error.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>653955</commentid>
    <comment_count>1</comment_count>
      <attachid>148670</attachid>
    <who name="Alex Christensen">alex.christensen</who>
    <bug_when>2012-06-20 15:50:21 -0700</bug_when>
    <thetext>Created attachment 148670
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>653972</commentid>
    <comment_count>2</comment_count>
      <attachid>148670</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-06-20 16:12:18 -0700</bug_when>
    <thetext>Comment on attachment 148670
Patch

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

&gt; Source/WTF/wtf/FastMalloc.cpp:246
&gt; -    header-&gt;m_size = n;
&gt; +    header-&gt;msize = n;

m_size is a member, right? In that case, it&apos;s correct that it&apos;s prefixed by m_.

&gt; Source/WTF/wtf/FastMalloc.cpp:682
&gt; -// Mapping from size to size_class and vice versa
&gt; +// Mapping from size to sizeclass and vice versa

It should probably be sizeClass instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>653974</commentid>
    <comment_count>3</comment_count>
      <attachid>148670</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-06-20 16:13:58 -0700</bug_when>
    <thetext>Comment on attachment 148670
Patch

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

&gt; Source/WTF/wtf/FastMalloc.cpp:246
&gt; -    header-&gt;m_size = n;
&gt; +    header-&gt;msize = n;

m_size is a member, right? In that case, it&apos;s correct that it&apos;s prefixed by m_.

&gt; Source/WTF/wtf/FastMalloc.cpp:682
&gt; -// Mapping from size to size_class and vice versa
&gt; +// Mapping from size to sizeclass and vice versa

It should probably be sizeClass instead.

&gt; Source/WTF/wtf/FastMalloc.cpp:1040
&gt; +                char* newallocation = reinterpret_cast&lt;char*&gt;(MetaDataAlloc(kAllocIncrement));

newAllocation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>654142</commentid>
    <comment_count>4</comment_count>
      <attachid>148670</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-06-20 19:00:35 -0700</bug_when>
    <thetext>Comment on attachment 148670
Patch

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

&gt; Source/WTF/wtf/FastMalloc.cpp:1409
&gt; +    PageMap pagemap;
&gt; +    mutable PageMapCache pagemapcache;

pageMap, pageMapCache.

&gt; Source/WTF/wtf/FastMalloc.cpp:1727
&gt; +        } else
&gt; +            // Keep looking in larger classes
&gt; +            continue;
&gt; +

These two lines should have curly brackets.

&gt; Source/WTF/wtf/FastMalloc.cpp:1768
&gt; +    for (Span* span = large.normal.next;
&gt; +            span != &amp;large.normal;
&gt; +            span = span-&gt;next) {

It seems like this can all fit in one line.

&gt; Source/WTF/wtf/FastMalloc.cpp:1782
&gt; +    for (Span* span = large.returned.next;
&gt; +            span != &amp;large.returned;
&gt; +            span = span-&gt;next) {

Ditto.

&gt; Source/WTF/wtf/FastMalloc.cpp:1995
&gt; +                                    static_cast&lt;size_t&gt;(s-&gt;length &lt;&lt; kPageShift));

Wrong indentation. It should be indented 4 spaces to the right of TCMalloc_SystemRelease.
(i.e. we don&apos;t align subsequent indentations).

&gt; Source/WTF/wtf/FastMalloc.cpp:2230
&gt; +                                static_cast&lt;size_t&gt;(s-&gt;length &lt;&lt; kPageShift));

Ditto about wrong indentation.

&gt; Source/WTF/wtf/FastMalloc.cpp:2297
&gt; +    void PushRange(int N, void *start, void *end)

Nit: void* instead of void *.

&gt; Source/WTF/wtf/FastMalloc.cpp:2303
&gt; +    void PopRange(int N, void **start, void **end)

Ditto.

&gt; Source/WTF/wtf/FastMalloc.cpp:2370
&gt; +    int freelistlength(size_t cl) const
&gt; +    {
&gt; +        return list[cl].length();
&gt; +    }

You can keep this a one-line function. We allow f() { return ~ }. In fact, it&apos;s probably preferable here because the definition is so trivial.

&gt; Source/WTF/wtf/FastMalloc.cpp:2379
&gt; +    void Deallocate(void* ptr, size_t sizeclass);

Useless argument name ptr.

&gt; Source/WTF/wtf/FastMalloc.cpp:2388
&gt; +    bool SampleAllocation(size_t k);

Ditto about k.

&gt; Source/WTF/wtf/FastMalloc.cpp:2391
&gt; +    void PickNextSample(size_t k);

Ditto.

&gt; Source/WTF/wtf/FastMalloc.cpp:2425
&gt; +    void InsertRange(void *start, void *end, int);

Nit: void* instead of void *.

&gt; Source/WTF/wtf/FastMalloc.cpp:2428
&gt; +    void RemoveRange(void **start, void **end, int*);

Ditto.

&gt; Source/WTF/wtf/FastMalloc.cpp:2962
&gt; +         ptr = nptr;

Nit: extra space.

&gt; Source/WTF/wtf/FastMalloc.cpp:3011
&gt; +    for (size_t cl = 0; cl &lt; kNumClasses; ++cl)
&gt; +        if (list[cl].length() &gt; 0)
&gt; +            ReleaseToCentralCache(cl, list[cl].length());

This &quot;for&quot; needs curly brackets because it contains two lines.

&gt; Source/WTF/wtf/FastMalloc.cpp:3113
&gt; +    // increment is &quot;sample_period/2&quot;.

Nit: spaces around /.

&gt; Source/WTF/wtf/FastMalloc.cpp:3122
&gt; +        for (i = 0; i &lt; (static_cast&lt;int&gt;(sizeof(primesList) / sizeof(primesList[0])) - 1); i++)
&gt; +            if (primesList[i] &gt;= flagValue)
&gt; +                break;

Ditto about curly brackets.

&gt; Source/WTF/wtf/FastMalloc.cpp:3332
&gt; +    if (GetThreadHeap() == heap)
&gt; +        // Somehow heap got reinstated by a recursive call to malloc
&gt; +        // from pthread_setspecific. We give up in this case.
&gt; +        return;

We need to keep curly brackets for this. In WebKit style, we decide whether we use curly brackets or not based on the number of physical lines, not the number of statements.

&gt; Source/WTF/wtf/FastMalloc.cpp:3429
&gt; +            if (classCount)
&gt; +                for (size_t cl = 0; cl &lt; kNumClasses; ++cl)
&gt; +                    classCount[cl] += h-&gt;freelistlength(cl);

Ditto about curly brackets.

&gt; Source/WTF/wtf/FastMalloc.cpp:3579
&gt; +                    - stats.threadBytes
&gt; +                    - stats.centralBytes
&gt; +                    - stats.pageheapBytes;

Wrong indentation. &quot;- stats.&quot; should be 4 spaces to the right of &quot;*value&quot;.

&gt; Source/WTF/wtf/FastMalloc.cpp:3593
&gt; +            SpinLockHolder ll(&amp;pageheapLock);

Why did you rename l to ll?

&gt; Source/WTF/wtf/FastMalloc.cpp:3625
&gt; +            SpinLockHolder ll(&amp;pageheapLock);

Ditto.

&gt; Source/WTF/wtf/FastMalloc.cpp:3785
&gt; +    } else
&gt; +        // The common case, and also the simplest. This just pops the
&gt; +        // size-appropriate freelist, afer replenishing it if it&apos;s empty.
&gt; +        ret = CheckedMallocResult(heap-&gt;Allocate(size));

Keep the curly brackets here as well.

&gt; Source/WTF/wtf/FastMalloc.cpp:-3687
&gt; +    if (!ret)
&gt;  #ifdef WTF_CHANGES
&gt; -    if (crashOnFailure) // This branch should be optimized out by the compiler.
&gt; -        CRASH();
&gt; +        if (crashOnFailure) // This branch should be optimized out by the compiler.
&gt; +            CRASH();
&gt;  #else
&gt; -    errno = ENOMEM;
&gt; +        errno = ENOMEM;
&gt;  #endif
&gt; -  }
&gt; -  return ret;

Ditto.

&gt; Source/WTF/wtf/FastMalloc.cpp:3864
&gt; +        cl++;

Missing indentation.

&gt; Source/WTF/wtf/FastMalloc.cpp:3939
&gt; +    info.fsmblks   = static_cast&lt;int&gt;(stats.threadBytes
&gt; +                                    + stats.centralBytes
&gt; +                                    + stats.transferBytes);

Wrong indentation.

&gt; Source/WTF/wtf/FastMalloc.cpp:3946
&gt; +                                    - stats.threadBytes
&gt; +                                    - stats.centralBytes
&gt; +                                    - stats.transferBytes
&gt; +                                    - stats.pageheapBytes);
&gt; +

Ditto.

&gt; Source/WTF/wtf/FastMalloc.cpp:4033
&gt; +void* fastCalloc(size_t n, size_t elemsize)

Should be elemSize instead.

&gt; Source/WTF/wtf/FastMalloc.cpp:4042
&gt; +TryMallocReturnValue tryFastCalloc(size_t n, size_t elemsize)

Dotto.

&gt; Source/WTF/wtf/FastMalloc.cpp:4054
&gt; +void* calloc(size_t n, size_t elemsize)

Ditto.

&gt; Source/WTF/wtf/FastMalloc.cpp:4100
&gt; +void* fastRealloc(void* oldptr, size_t newSize)

Nit: s/oldptr/oldPtr/

&gt; Source/WTF/wtf/FastMalloc.cpp:4112
&gt; +TryMallocReturnValue tryFastRealloc(void* oldptr, size_t newSize)

Ditto.

&gt; Source/WTF/wtf/FastMalloc.cpp:4127
&gt; +void* realloc(void* oldptr, size_t newSize)

Ditto.

&gt; Source/WTF/wtf/FastMalloc.cpp:4179
&gt; +        void* newptr = doMalloc(newSize);

Nit: s/newptr/newPtr/

&gt; Source/WTF/wtf/FastMalloc.cpp:4315
&gt; +extern &quot;C&quot; int posix_memalign(void** resultptr, size_t align, size_t size)

Nit: s/resultptr/resultPtr/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>654580</commentid>
    <comment_count>5</comment_count>
      <attachid>148814</attachid>
    <who name="Alex Christensen">alex.christensen</who>
    <bug_when>2012-06-21 09:04:19 -0700</bug_when>
    <thetext>Created attachment 148814
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>654728</commentid>
    <comment_count>6</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-06-21 11:23:08 -0700</bug_when>
    <thetext>It is intentional that FastMalloc retains its original style. Perhaps we no longer need that, but someone who actively maintains this file needs to make the call whether it&apos;s OK to update the style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>693234</commentid>
    <comment_count>7</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-08-12 04:21:24 -0700</bug_when>
    <thetext>My understanding is our version of fastmalloc is now a very old fork of tcmalloc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>693774</commentid>
    <comment_count>8</comment_count>
    <who name="Alex Christensen">alex.christensen</who>
    <bug_when>2012-08-13 10:12:16 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; My understanding is our version of fastmalloc is now a very old fork of tcmalloc.

If it&apos;s a very old fork, is there any reason we shouldn&apos;t update the style?  64-bit Windows won&apos;t work until this is resolved.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>765853</commentid>
    <comment_count>9</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2012-11-13 11:36:29 -0800</bug_when>
    <thetext>I would like to see this patch landed, in support of getting 64-bit Windows builds working.  Who is responsible for this file?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>765855</commentid>
    <comment_count>10</comment_count>
      <attachid>148814</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-11-13 11:38:31 -0800</bug_when>
    <thetext>Comment on attachment 148814
Patch

I&apos;d say we should go ahead and land this. If it becomes a problem, we can always roll them back.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>765866</commentid>
    <comment_count>11</comment_count>
      <attachid>148814</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-13 11:45:11 -0800</bug_when>
    <thetext>Comment on attachment 148814
Patch

Rejecting attachment 148814 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2

Last 500 characters of output:
 (offset 30 lines).
Hunk #64 succeeded at 4720 (offset 28 lines).
Hunk #65 succeeded at 4742 (offset 28 lines).
Hunk #66 succeeded at 4770 (offset 28 lines).
Hunk #67 succeeded at 4800 (offset 28 lines).
Hunk #68 succeeded at 4824 (offset 28 lines).
3 out of 68 hunks FAILED -- saving rejects to file Source/WTF/wtf/FastMalloc.cpp.rej

Failed to run &quot;[u&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/svn-apply&apos;, u&apos;--force&apos;, u&apos;--reviewer&apos;, u&apos;Ryosuke Ni...&quot; exit_code: 1 cwd: /mnt/git/webkit-commit-queue

Full output: http://queues.webkit.org/results/14828093</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>765875</commentid>
    <comment_count>12</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2012-11-13 11:47:33 -0800</bug_when>
    <thetext>Alex e-mailed me a while ago that he was not doing more WebKit work, and was abandoning these changes.  I&apos;ll revise this patch and resubmit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>765930</commentid>
    <comment_count>13</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-11-13 12:28:26 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; 64-bit Windows won&apos;t work until this is resolved.

Why tie that to a style change?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>765958</commentid>
    <comment_count>14</comment_count>
      <attachid>173960</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2012-11-13 13:00:46 -0800</bug_when>
    <thetext>Created attachment 173960
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>765960</commentid>
    <comment_count>15</comment_count>
      <attachid>173960</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-11-13 13:02:22 -0800</bug_when>
    <thetext>Comment on attachment 173960
Patch

Why is the 64-bit Windows support mixed in with this style change to the entire file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>765963</commentid>
    <comment_count>16</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2012-11-13 13:05:08 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 173960 [details])
&gt; Why is the 64-bit Windows support mixed in with this style change to the entire file.

It isn&apos;t.  This change is only style modifications.

The original bug report (see https://bugs.webkit.org/show_bug.cgi?id=89366) indicated that the changes to support a 64-bit build could not be done cleanly due to style bot rejecting the necessary reordering of the file.

Another option would be to willfully ignore the style bot and just push the reordering change through.  Then we could close this issue as WONTFIX.

But is there a downside to making this file match our expected style, assuming the tests pass?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>765967</commentid>
    <comment_count>17</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2012-11-13 13:09:03 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; (In reply to comment #15)
&gt; &gt; (From update of attachment 173960 [details] [details])
&gt; &gt; Why is the 64-bit Windows support mixed in with this style change to the entire file.
&gt; 
&gt; It isn&apos;t.  This change is only style modifications.
&gt; 
&gt; The original bug report (see https://bugs.webkit.org/show_bug.cgi?id=89366) indicated that the changes to support a 64-bit build could not be done cleanly due to style bot rejecting the necessary reordering of the file.
&gt; 
&gt; Another option would be to willfully ignore the style bot and just push the reordering change through.  Then we could close this issue as WONTFIX.
&gt; 
&gt; But is there a downside to making this file match our expected style, assuming the tests pass?

You should ignore the stylebot for &lt;https://bugs.webkit.org/show_bug.cgi?id=89366&gt;. Stylebot should not be an obstacle to reordering.

This style change may or may not be a good idea. But it would be good to ask people who have recently or frequently worked with FastMalloc what they think.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>766006</commentid>
    <comment_count>18</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2012-11-13 13:38:12 -0800</bug_when>
    <thetext>I have updated https://bugs.webkit.org/show_bug.cgi?id=89366 to work against ToT.  This is a reordering-only change that is necessary to support the template specialization to be landed as part of https://bugs.webkit.org/show_bug.cgi?id=88344.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>900164</commentid>
    <comment_count>19</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2013-06-13 10:11:49 -0700</bug_when>
    <thetext>I&apos;m closing this bug as WONTFIX.  The maintenance burden of tracking this separately from upstream just to satisfy the stylebot seems like a waste of time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>901280</commentid>
    <comment_count>20</comment_count>
      <attachid>173960</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2013-06-17 23:35:48 -0700</bug_when>
    <thetext>Comment on attachment 173960
Patch

Clear flags to get rid of this in the queue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>901426</commentid>
    <comment_count>21</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2013-06-18 09:25:51 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; I&apos;m closing this bug as WONTFIX.  The maintenance burden of tracking this separately from upstream just to satisfy the stylebot seems like a waste of time.

Honestly i think at this point we&apos;ve diverged so much, and upstream is now completely different I think we may as well bring fastmalloc up to webkit style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>902715</commentid>
    <comment_count>22</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2013-06-21 16:50:10 -0700</bug_when>
    <thetext>Yeah, I&apos;m not sure upstream is relevant to us, but there would still be a cost when trying to SVN annotate.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>148670</attachid>
            <date>2012-06-20 15:50:21 -0700</date>
            <delta_ts>2012-06-21 09:04:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89608-20120620164923.patch</filename>
            <type>text/plain</type>
            <size>233007</size>
            <attacher name="Alex Christensen">alex.christensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxMjA4NzUpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE0MyBAQAorMjAxMi0wNi0yMCAgQWxleCBDaHJpc3RlbnNlbiAg
PGFsZXguY2hyaXN0ZW5zZW5AZmxleHNpbS5jb20+CisKKyAgICAgICAgRmFzdE1hbGxvYy5jcHAg
bmVlZHMgdG8gaGF2ZSBpdHMgc3R5bGUgdXBkYXRlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODk2MDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9GYXN0TWFsbG9jLmNwcDoKKyAgICAgICAgTWFk
ZSB0aGUgZmlsZSBzdHlsZSBjb25mb3JtYW50LgorICAgICAgICAoV1RGOjp0cnlGYXN0TWFsbG9j
KToKKyAgICAgICAgKFdURjo6dHJ5RmFzdENhbGxvYyk6CisgICAgICAgIChXVEY6OmZhc3RDYWxs
b2MpOgorICAgICAgICAoV1RGOjpmYXN0RnJlZSk6CisgICAgICAgIChXVEY6OnRyeUZhc3RSZWFs
bG9jKToKKyAgICAgICAgKFdURjo6ZmFzdE1hbGxvY1NpemUpOgorICAgICAgICAoV1RGKToKKyAg
ICAgICAgKEZhc3RNYWxsb2Nab25lKToKKyAgICAgICAgKFdURjo6S2VybmVsU3VwcG9ydHNUTFMp
OgorICAgICAgICAoV1RGOjpDaGVja0lmS2VybmVsU3VwcG9ydHNUTFMpOgorICAgICAgICAoV1RG
OjpDbGFzc0luZGV4KToKKyAgICAgICAgKFRDRW50cnkpOgorICAgICAgICAoV1RGOjpTTExfTmV4
dCk6CisgICAgICAgIChXVEY6OlNMTFNldE5leHQpOgorICAgICAgICAoV1RGOjpTTExQdXNoKToK
KyAgICAgICAgKFdURjo6U0xMUG9wKToKKyAgICAgICAgKFdURjo6U0xMUG9wUmFuZ2UpOgorICAg
ICAgICAoV1RGOjpTTExQdXNoUmFuZ2UpOgorICAgICAgICAoV1RGOjpTTExTaXplKToKKyAgICAg
ICAgKFdURjo6U2l6ZUNsYXNzKToKKyAgICAgICAgKFdURjo6Qnl0ZVNpemVGb3JDbGFzcyk6Cisg
ICAgICAgIChXVEY6Ok51bU1vdmVTaXplKToKKyAgICAgICAgKFdURjo6SW5pdFNpemVDbGFzc2Vz
KToKKyAgICAgICAgKFdURjo6TWV0YURhdGFBbGxvYyk6CisgICAgICAgIChQYWdlSGVhcEFsbG9j
YXRvcik6CisgICAgICAgIChXVEY6OlBhZ2VIZWFwQWxsb2NhdG9yOjpJbml0KToKKyAgICAgICAg
KFdURjo6UGFnZUhlYXBBbGxvY2F0b3I6Ok5ldyk6CisgICAgICAgIChXVEY6OlBhZ2VIZWFwQWxs
b2NhdG9yOjpEZWxldGUpOgorICAgICAgICAoV1RGOjpQYWdlSGVhcEFsbG9jYXRvcjo6aW51c2Up
OgorICAgICAgICAoV1RGOjpQYWdlSGVhcEFsbG9jYXRvcjo6cmVjb3JkQWRtaW5pc3RyYXRpdmVS
ZWdpb25zKToKKyAgICAgICAgKFdURjo6cGFnZXMpOgorICAgICAgICAoV1RGOjpBbGxvY2F0aW9u
U2l6ZSk6CisgICAgICAgIChTcGFuKToKKyAgICAgICAgKFdURjo6RXZlbnQpOgorICAgICAgICAo
V1RGOjpOZXdTcGFuKToKKyAgICAgICAgKFdURjo6RGVsZXRlU3Bhbik6CisgICAgICAgIChXVEY6
OkRMTEluaXQpOgorICAgICAgICAoV1RGOjpETExSZW1vdmUpOgorICAgICAgICAoV1RGOjpETExf
SXNFbXB0eSk6CisgICAgICAgIChXVEY6OkRMTExlbmd0aCk6CisgICAgICAgIChXVEY6OkRMTFBy
aW50KToKKyAgICAgICAgKFdURjo6RExMUHJlcGVuZCk6CisgICAgICAgIChTdGFja1RyYWNlKToK
KyAgICAgICAgKE1hcFNlbGVjdG9yKToKKyAgICAgICAgKFRDTWFsbG9jUGFnZUhlYXApOgorICAg
ICAgICAoV1RGOjpUQ01hbGxvY1BhZ2VIZWFwOjpHZXREZXNjcmlwdG9yKToKKyAgICAgICAgKFdU
Rjo6VENNYWxsb2NQYWdlSGVhcDo6R2V0RGVzY3JpcHRvckVuc3VyZVNhZmUpOgorICAgICAgICAo
V1RGOjpUQ01hbGxvY1BhZ2VIZWFwOjpTeXN0ZW1CeXRlcyk6CisgICAgICAgIChXVEY6OlRDTWFs
bG9jUGFnZUhlYXA6OkZyZWVCeXRlcyk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jUGFnZUhlYXA6
OkdldFNpemVDbGFzc0lmQ2FjaGVkKToKKyAgICAgICAgKFdURjo6VENNYWxsb2NQYWdlSGVhcDo6
Q2FjaGVTaXplQ2xhc3MpOgorICAgICAgICAoU3Bhbkxpc3QpOgorICAgICAgICAoV1RGOjpUQ01h
bGxvY1BhZ2VIZWFwOjpSZWNvcmRTcGFuKToKKyAgICAgICAgKFdURjo6VENNYWxsb2NQYWdlSGVh
cDo6aW5pdCk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jUGFnZUhlYXA6OmluaXRpYWxpemVTY2F2
ZW5nZXIpOgorICAgICAgICAoV1RGOjpUQ01hbGxvY1BhZ2VIZWFwOjppc1NjYXZlbmdlclN1c3Bl
bmRlZCk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jUGFnZUhlYXA6OnNjaGVkdWxlU2NhdmVuZ2Vy
KToKKyAgICAgICAgKFdURjo6VENNYWxsb2NQYWdlSGVhcDo6cmVzY2hlZHVsZVNjYXZlbmdlcik6
CisgICAgICAgIChXVEY6OlRDTWFsbG9jUGFnZUhlYXA6OnN1c3BlbmRTY2F2ZW5nZXIpOgorICAg
ICAgICAoV1RGOjpUQ01hbGxvY1BhZ2VIZWFwOjpzY2F2ZW5nZXJUaW1lckZpcmVkKToKKyAgICAg
ICAgKFdURjo6VENNYWxsb2NQYWdlSGVhcDo6cnVuU2NhdmVuZ2VyVGhyZWFkKToKKyAgICAgICAg
KFdURjo6VENNYWxsb2NQYWdlSGVhcDo6c2lnbmFsU2NhdmVuZ2VyKToKKyAgICAgICAgKFdURjo6
VENNYWxsb2NQYWdlSGVhcDo6c2NhdmVuZ2UpOgorICAgICAgICAoV1RGOjpUQ01hbGxvY1BhZ2VI
ZWFwOjpzaG91bGRTY2F2ZW5nZSk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jUGFnZUhlYXA6Ok5l
dyk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jUGFnZUhlYXA6OkFsbG9jTGFyZ2UpOgorICAgICAg
ICAoV1RGOjpUQ01hbGxvY1BhZ2VIZWFwOjpTcGxpdCk6CisgICAgICAgIChXVEY6OlRDTWFsbG9j
UGFnZUhlYXA6OkNhcnZlKToKKyAgICAgICAgKFdURjo6VENNYWxsb2NQYWdlSGVhcDo6RGVsZXRl
KToKKyAgICAgICAgKFdURjo6VENNYWxsb2NQYWdlSGVhcDo6SW5jcmVtZW50YWxTY2F2ZW5nZSk6
CisgICAgICAgIChXVEY6OlRDTWFsbG9jUGFnZUhlYXA6OlJlZ2lzdGVyU2l6ZUNsYXNzKToKKyAg
ICAgICAgKFdURjo6VENNYWxsb2NQYWdlSGVhcDo6UmV0dXJuZWRCeXRlcyk6CisgICAgICAgIChX
VEY6OlBhZ2VzVG9NQik6CisgICAgICAgIChXVEY6OlRDTWFsbG9jUGFnZUhlYXA6OkR1bXApOgor
ICAgICAgICAoV1RGOjpUQ01hbGxvY1BhZ2VIZWFwOjpHcm93SGVhcCk6CisgICAgICAgIChXVEY6
OlRDTWFsbG9jUGFnZUhlYXA6OkNoZWNrKToKKyAgICAgICAgKFdURjo6VENNYWxsb2NQYWdlSGVh
cDo6Q2hlY2tMaXN0KToKKyAgICAgICAgKFdURjo6VENNYWxsb2NQYWdlSGVhcDo6UmVsZWFzZUZy
ZWVMaXN0KToKKyAgICAgICAgKFdURjo6VENNYWxsb2NQYWdlSGVhcDo6UmVsZWFzZUZyZWVQYWdl
cyk6CisgICAgICAgIChUQ01hbGxvY1RocmVhZENhY2hlRnJlZUxpc3QpOgorICAgICAgICAoV1RG
OjpUQ01hbGxvY1RocmVhZENhY2hlRnJlZUxpc3Q6OkluaXQpOgorICAgICAgICAoV1RGOjpUQ01h
bGxvY1RocmVhZENhY2hlRnJlZUxpc3Q6Omxlbmd0aCk6CisgICAgICAgIChXVEY6OlRDTWFsbG9j
VGhyZWFkQ2FjaGVGcmVlTGlzdDo6ZW1wdHkpOgorICAgICAgICAoV1RGOjpUQ01hbGxvY1RocmVh
ZENhY2hlRnJlZUxpc3Q6Omxvd3dhdGVybWFyayk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jVGhy
ZWFkQ2FjaGVGcmVlTGlzdDo6Y2xlYXJMb3d3YXRlcm1hcmspOgorICAgICAgICAoV1RGOjpUQ01h
bGxvY1RocmVhZENhY2hlRnJlZUxpc3Q6OlB1c2gpOgorICAgICAgICAoV1RGOjpUQ01hbGxvY1Ro
cmVhZENhY2hlRnJlZUxpc3Q6OlB1c2hSYW5nZSk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jVGhy
ZWFkQ2FjaGVGcmVlTGlzdDo6UG9wUmFuZ2UpOgorICAgICAgICAoV1RGOjpUQ01hbGxvY1RocmVh
ZENhY2hlRnJlZUxpc3Q6OlBvcCk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jVGhyZWFkQ2FjaGVG
cmVlTGlzdDo6ZW51bWVyYXRlRnJlZU9iamVjdHMpOgorICAgICAgICAoVENNYWxsb2NUaHJlYWRD
YWNoZSk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jVGhyZWFkQ2FjaGU6OmZyZWVsaXN0bGVuZ3Ro
KToKKyAgICAgICAgKFdURjo6VENNYWxsb2NUaHJlYWRDYWNoZTo6U2l6ZSk6CisgICAgICAgIChX
VEY6OlRDTWFsbG9jVGhyZWFkQ2FjaGU6OmVudW1lcmF0ZUZyZWVPYmplY3RzKToKKyAgICAgICAg
KFRDTWFsbG9jQ2VudHJhbEZyZWVMaXN0KToKKyAgICAgICAgKFdURjo6VENNYWxsb2NDZW50cmFs
RnJlZUxpc3Q6Omxlbmd0aCk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jQ2VudHJhbEZyZWVMaXN0
Ojp0Y0xlbmd0aCk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jQ2VudHJhbEZyZWVMaXN0OjplbnVt
ZXJhdGVGcmVlT2JqZWN0cyk6CisgICAgICAgIChUQ01hbGxvY0NlbnRyYWxGcmVlTGlzdFBhZGRl
ZCk6CisgICAgICAgIChXVEY6OmdldFBhZ2VIZWFwKToKKyAgICAgICAgKFdURjo6VENNYWxsb2NQ
YWdlSGVhcDo6cGVyaW9kaWNTY2F2ZW5nZSk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jUGFnZUhl
YXA6OnNjYXZlbmdlclRocmVhZCk6CisgICAgICAgIChXVEY6OnNldFRocmVhZEhlYXApOgorICAg
ICAgICAoV1RGOjpUQ01hbGxvY0NlbnRyYWxGcmVlTGlzdDo6SW5pdCk6CisgICAgICAgIChXVEY6
OlRDTWFsbG9jQ2VudHJhbEZyZWVMaXN0OjpSZWxlYXNlTGlzdFRvU3BhbnMpOgorICAgICAgICAo
V1RGOjpUQ01hbGxvY0NlbnRyYWxGcmVlTGlzdDo6UmVsZWFzZVRvU3BhbnMpOgorICAgICAgICAo
V1RGOjpUQ01hbGxvY0NlbnRyYWxGcmVlTGlzdDo6RXZpY3RSYW5kb21TaXplQ2xhc3MpOgorICAg
ICAgICAoV1RGOjpUQ01hbGxvY0NlbnRyYWxGcmVlTGlzdDo6TWFrZUNhY2hlU3BhY2UpOgorICAg
ICAgICAoV1RGOjpUQ01hbGxvY0NlbnRyYWxGcmVlTGlzdDo6U2hyaW5rQ2FjaGUpOgorICAgICAg
ICAoV1RGOjpUQ01hbGxvY0NlbnRyYWxGcmVlTGlzdDo6SW5zZXJ0UmFuZ2UpOgorICAgICAgICAo
V1RGOjpUQ01hbGxvY0NlbnRyYWxGcmVlTGlzdDo6UmVtb3ZlUmFuZ2UpOgorICAgICAgICAoV1RG
OjpUQ01hbGxvY0NlbnRyYWxGcmVlTGlzdDo6RmV0Y2hGcm9tU3BhbnNTYWZlKToKKyAgICAgICAg
KFdURjo6VENNYWxsb2NDZW50cmFsRnJlZUxpc3Q6OkZldGNoRnJvbVNwYW5zKToKKyAgICAgICAg
KFdURjo6VENNYWxsb2NDZW50cmFsRnJlZUxpc3Q6OlBvcHVsYXRlKToKKyAgICAgICAgKFdURjo6
VENNYWxsb2NUaHJlYWRDYWNoZTo6U2FtcGxlQWxsb2NhdGlvbik6CisgICAgICAgIChXVEY6OlRD
TWFsbG9jVGhyZWFkQ2FjaGU6OkluaXQpOgorICAgICAgICAoV1RGOjpUQ01hbGxvY1RocmVhZENh
Y2hlOjpDbGVhbnVwKToKKyAgICAgICAgKFdURjo6VENNYWxsb2NUaHJlYWRDYWNoZTo6QWxsb2Nh
dGUpOgorICAgICAgICAoV1RGOjpUQ01hbGxvY1RocmVhZENhY2hlOjpEZWFsbG9jYXRlKToKKyAg
ICAgICAgKFdURjo6VENNYWxsb2NUaHJlYWRDYWNoZTo6RmV0Y2hGcm9tQ2VudHJhbENhY2hlKToK
KyAgICAgICAgKFdURjo6VENNYWxsb2NUaHJlYWRDYWNoZTo6UmVsZWFzZVRvQ2VudHJhbENhY2hl
KToKKyAgICAgICAgKFdURjo6VENNYWxsb2NUaHJlYWRDYWNoZTo6U2NhdmVuZ2UpOgorICAgICAg
ICAoV1RGOjpUQ01hbGxvY1RocmVhZENhY2hlOjpQaWNrTmV4dFNhbXBsZSk6CisgICAgICAgIChX
VEY6OlRDTWFsbG9jVGhyZWFkQ2FjaGU6OkluaXRNb2R1bGUpOgorICAgICAgICAoV1RGOjpUQ01h
bGxvY1RocmVhZENhY2hlOjpOZXdIZWFwKToKKyAgICAgICAgKFdURjo6VENNYWxsb2NUaHJlYWRD
YWNoZTo6R2V0VGhyZWFkSGVhcCk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jVGhyZWFkQ2FjaGU6
OkdldENhY2hlKToKKyAgICAgICAgKFdURjo6VENNYWxsb2NUaHJlYWRDYWNoZTo6R2V0Q2FjaGVJ
ZlByZXNlbnQpOgorICAgICAgICAoV1RGOjpUQ01hbGxvY1RocmVhZENhY2hlOjpJbml0VFNEKToK
KyAgICAgICAgKFdURjo6VENNYWxsb2NUaHJlYWRDYWNoZTo6Q3JlYXRlQ2FjaGVJZk5lY2Vzc2Fy
eSk6CisKIDIwMTItMDYtMTcgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAg
ICAgICBJdCBzaG91bGQgYmUgcG9zc2libGUgdG8gbG9vayBhdCBkaXNhc3NlbWJseQpJbmRleDog
U291cmNlL1dURi93dGYvRmFzdE1hbGxvYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvRmFzdE1hbGxvYy5jcHAJKHJldmlzaW9uIDEyMDgyMCkKKysrIFNvdXJjZS9XVEYvd3RmL0Zh
c3RNYWxsb2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MiwyOCArNDIsMjggQEAKIC8vICAgICBU
aGlzIGlzIHNhZmUgYmVjYXVzZSBlYWNoIHN1Y2ggbGlzdCBpcyBvbmx5IGFjY2Vzc2VkIGJ5IG9u
ZSB0aHJlYWQuCiAvLyAgMi4gV2UgaGF2ZSBhIGxvY2sgcGVyIGNlbnRyYWwgZnJlZS1saXN0LCBh
bmQgaG9sZCBpdCB3aGlsZSBtYW5pcHVsYXRpbmcKIC8vICAgICB0aGUgY2VudHJhbCBmcmVlIGxp
c3QgZm9yIGEgcGFydGljdWxhciBzaXplLgotLy8gIDMuIFRoZSBjZW50cmFsIHBhZ2UgYWxsb2Nh
dG9yIGlzIHByb3RlY3RlZCBieSAicGFnZWhlYXBfbG9jayIuCisvLyAgMy4gVGhlIGNlbnRyYWwg
cGFnZSBhbGxvY2F0b3IgaXMgcHJvdGVjdGVkIGJ5ICJwYWdlaGVhcExvY2siLgogLy8gIDQuIFRo
ZSBwYWdlbWFwICh3aGljaCBtYXBzIGZyb20gcGFnZS1udW1iZXIgdG8gZGVzY3JpcHRvciksCiAv
LyAgICAgY2FuIGJlIHJlYWQgd2l0aG91dCBob2xkaW5nIGFueSBsb2NrcywgYW5kIHdyaXR0ZW4g
d2hpbGUgaG9sZGluZwotLy8gICAgIHRoZSAicGFnZWhlYXBfbG9jayIuCisvLyAgICAgdGhlICJw
YWdlaGVhcExvY2siLgogLy8gIDUuIFRvIGltcHJvdmUgcGVyZm9ybWFuY2UsIGEgc3Vic2V0IG9m
IHRoZSBpbmZvcm1hdGlvbiBvbmUgY2FuIGdldAotLy8gICAgIGZyb20gdGhlIHBhZ2VtYXAgaXMg
Y2FjaGVkIGluIGEgZGF0YSBzdHJ1Y3R1cmUsIHBhZ2VtYXBfY2FjaGVfLAotLy8gICAgIHRoYXQg
YXRvbWljYWxseSByZWFkcyBhbmQgd3JpdGVzIGl0cyBlbnRyaWVzLiAgVGhpcyBjYWNoZSBjYW4g
YmUKKy8vICAgICBmcm9tIHRoZSBwYWdlbWFwIGlzIGNhY2hlZCBpbiBhIGRhdGEgc3RydWN0dXJl
LCBwYWdlbWFwY2FjaGUsCisvLyAgICAgdGhhdCBhdG9taWNhbGx5IHJlYWRzIGFuZCB3cml0ZXMg
aXRzIGVudHJpZXMuIFRoaXMgY2FjaGUgY2FuIGJlCiAvLyAgICAgcmVhZCBhbmQgd3JpdHRlbiB3
aXRob3V0IGxvY2tpbmcuCiAvLwogLy8gICAgIFRoaXMgbXVsdGktdGhyZWFkZWQgYWNjZXNzIHRv
IHRoZSBwYWdlbWFwIGlzIHNhZmUgZm9yIGZhaXJseQotLy8gICAgIHN1YnRsZSByZWFzb25zLiAg
V2UgYmFzaWNhbGx5IGFzc3VtZSB0aGF0IHdoZW4gYW4gb2JqZWN0IFggaXMKKy8vICAgICBzdWJ0
bGUgcmVhc29ucy4gV2UgYmFzaWNhbGx5IGFzc3VtZSB0aGF0IHdoZW4gYW4gb2JqZWN0IFggaXMK
IC8vICAgICBhbGxvY2F0ZWQgYnkgdGhyZWFkIEEgYW5kIGRlYWxsb2NhdGVkIGJ5IHRocmVhZCBC
LCB0aGVyZSBtdXN0CiAvLyAgICAgaGF2ZSBiZWVuIGFwcHJvcHJpYXRlIHN5bmNocm9uaXphdGlv
biBpbiB0aGUgaGFuZG9mZiBvZiBvYmplY3QKLS8vICAgICBYIGZyb20gdGhyZWFkIEEgdG8gdGhy
ZWFkIEIuICBUaGUgc2FtZSBsb2dpYyBhcHBsaWVzIHRvIHBhZ2VtYXBfY2FjaGVfLgorLy8gICAg
IFggZnJvbSB0aHJlYWQgQSB0byB0aHJlYWQgQi4gVGhlIHNhbWUgbG9naWMgYXBwbGllcyB0byBw
YWdlbWFwY2FjaGUuCiAvLwogLy8gVEhFIFBBR0VJRC1UTy1TSVpFQ0xBU1MgQ0FDSEUKLS8vIEhv
dCBQYWdlSUQtdG8tc2l6ZWNsYXNzIG1hcHBpbmdzIGFyZSBoZWxkIGJ5IHBhZ2VtYXBfY2FjaGVf
LiAgSWYgdGhpcyBjYWNoZQorLy8gSG90IFBhZ2VJRC10by1zaXplY2xhc3MgbWFwcGluZ3MgYXJl
IGhlbGQgYnkgcGFnZW1hcGNhY2hlLiBJZiB0aGlzIGNhY2hlCiAvLyByZXR1cm5zIDAgZm9yIGEg
cGFydGljdWxhciBQYWdlSUQgdGhlbiB0aGF0IG1lYW5zICJubyBpbmZvcm1hdGlvbiwiIG5vdCB0
aGF0Ci0vLyB0aGUgc2l6ZWNsYXNzIGlzIDAuICBUaGUgY2FjaGUgbWF5IGhhdmUgc3RhbGUgaW5m
b3JtYXRpb24gZm9yIHBhZ2VzIHRoYXQgZG8KLS8vIG5vdCBob2xkIHRoZSBiZWdpbm5pbmcgb2Yg
YW55IGZyZWUoKSdhYmxlIG9iamVjdC4gIFN0YWxlbmVzcyBpcyBlbGltaW5hdGVkCi0vLyBpbiBQ
b3B1bGF0ZSgpIGZvciBwYWdlcyB3aXRoIHNpemVjbGFzcyA+IDAgb2JqZWN0cywgYW5kIGluIGRv
X21hbGxvYygpIGFuZAotLy8gZG9fbWVtYWxpZ24oKSBmb3IgYWxsIG90aGVyIHJlbGV2YW50IHBh
Z2VzLgorLy8gdGhlIHNpemVjbGFzcyBpcyAwLiBUaGUgY2FjaGUgbWF5IGhhdmUgc3RhbGUgaW5m
b3JtYXRpb24gZm9yIHBhZ2VzIHRoYXQgZG8KKy8vIG5vdCBob2xkIHRoZSBiZWdpbm5pbmcgb2Yg
YW55IGZyZWUoKSdhYmxlIG9iamVjdC4gU3RhbGVuZXNzIGlzIGVsaW1pbmF0ZWQKKy8vIGluIFBv
cHVsYXRlKCkgZm9yIHBhZ2VzIHdpdGggc2l6ZWNsYXNzID4gMCBvYmplY3RzLCBhbmQgaW4gZG9N
YWxsb2MoKSBhbmQKKy8vIGRvTWVtYWxpZ24oKSBmb3IgYWxsIG90aGVyIHJlbGV2YW50IHBhZ2Vz
LgogLy8KIC8vIFRPRE86IEJpYXMgcmVjbGFtYXRpb24gdG8gbGFyZ2VyIGFkZHJlc3NlcwogLy8g
VE9ETzogaW1wbGVtZW50IG1hbGxpbmZvL21hbGxvcHQKQEAgLTI0Myw3ICsyNDMsNyBAQCBUcnlN
YWxsb2NSZXR1cm5WYWx1ZSB0cnlGYXN0TWFsbG9jKHNpemVfCiAgICAgaWYgKCFyZXN1bHQpCiAg
ICAgICAgIHJldHVybiAwOwogICAgIEludGVybmFsOjpWYWxpZGF0aW9uSGVhZGVyKiBoZWFkZXIg
PSBzdGF0aWNfY2FzdDxJbnRlcm5hbDo6VmFsaWRhdGlvbkhlYWRlcio+KHJlc3VsdCk7Ci0gICAg
aGVhZGVyLT5tX3NpemUgPSBuOworICAgIGhlYWRlci0+bXNpemUgPSBuOwogICAgIGhlYWRlci0+
bV90eXBlID0gSW50ZXJuYWw6OkFsbG9jVHlwZU1hbGxvYzsKICAgICBoZWFkZXItPm1fcHJlZml4
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEludGVybmFsOjpWYWxpZGF0aW9uUHJlZml4KTsKICAg
ICByZXN1bHQgPSBoZWFkZXIgKyAxOwpAQCAtMjc0LDEzICsyNzQsMTMgQEAgdm9pZCogZmFzdE1h
bGxvYyhzaXplX3QgbikKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1UcnlNYWxsb2NSZXR1cm5W
YWx1ZSB0cnlGYXN0Q2FsbG9jKHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3QgZWxlbWVudF9zaXpl
KQorVHJ5TWFsbG9jUmV0dXJuVmFsdWUgdHJ5RmFzdENhbGxvYyhzaXplX3QgbkVsZW1lbnRzLCBz
aXplX3QgZWxlbWVudHNpemUpCiB7CiAgICAgQVNTRVJUKCFpc0ZvcmJpZGRlbigpKTsKIAogI2lm
IEVOQUJMRShXVEZfTUFMTE9DX1ZBTElEQVRJT04pCi0gICAgc2l6ZV90IHRvdGFsQnl0ZXMgPSBu
X2VsZW1lbnRzICogZWxlbWVudF9zaXplOwotICAgIGlmIChuX2VsZW1lbnRzID4gMSAmJiBlbGVt
ZW50X3NpemUgJiYgKHRvdGFsQnl0ZXMgLyBlbGVtZW50X3NpemUpICE9IG5fZWxlbWVudHMpCisg
ICAgc2l6ZV90IHRvdGFsQnl0ZXMgPSBuRWxlbWVudHMgKiBlbGVtZW50c2l6ZTsKKyAgICBpZiAo
bkVsZW1lbnRzID4gMSAmJiBlbGVtZW50c2l6ZSAmJiAodG90YWxCeXRlcyAvIGVsZW1lbnRzaXpl
KSAhPSBuRWxlbWVudHMpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgVHJ5TWFsbG9jUmV0dXJu
VmFsdWUgcmV0dXJuVmFsdWUgPSB0cnlGYXN0TWFsbG9jKHRvdGFsQnl0ZXMpOwpAQCAtMjkxLDIx
ICsyOTEsMjEgQEAgVHJ5TWFsbG9jUmV0dXJuVmFsdWUgdHJ5RmFzdENhbGxvYyhzaXplXwogICAg
IGZhc3RNYWxsb2NWYWxpZGF0ZShyZXN1bHQpOwogICAgIHJldHVybiByZXN1bHQ7CiAjZWxzZQot
ICAgIHJldHVybiBjYWxsb2Mobl9lbGVtZW50cywgZWxlbWVudF9zaXplKTsKKyAgICByZXR1cm4g
Y2FsbG9jKG5FbGVtZW50cywgZWxlbWVudHNpemUpOwogI2VuZGlmCiB9CiAKLXZvaWQqIGZhc3RD
YWxsb2Moc2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBlbGVtZW50X3NpemUpCit2b2lkKiBmYXN0
Q2FsbG9jKHNpemVfdCBuRWxlbWVudHMsIHNpemVfdCBlbGVtZW50c2l6ZSkKIHsKICAgICBBU1NF
UlQoIWlzRm9yYmlkZGVuKCkpOwogCiAjaWYgRU5BQkxFKFdURl9NQUxMT0NfVkFMSURBVElPTikK
LSAgICBUcnlNYWxsb2NSZXR1cm5WYWx1ZSByZXR1cm5WYWx1ZSA9IHRyeUZhc3RDYWxsb2Mobl9l
bGVtZW50cywgZWxlbWVudF9zaXplKTsKKyAgICBUcnlNYWxsb2NSZXR1cm5WYWx1ZSByZXR1cm5W
YWx1ZSA9IHRyeUZhc3RDYWxsb2MobkVsZW1lbnRzLCBlbGVtZW50c2l6ZSk7CiAgICAgdm9pZCog
cmVzdWx0OwogICAgIGlmICghcmV0dXJuVmFsdWUuZ2V0VmFsdWUocmVzdWx0KSkKICAgICAgICAg
Q1JBU0goKTsKICNlbHNlCi0gICAgdm9pZCogcmVzdWx0ID0gY2FsbG9jKG5fZWxlbWVudHMsIGVs
ZW1lbnRfc2l6ZSk7CisgICAgdm9pZCogcmVzdWx0ID0gY2FsbG9jKG5FbGVtZW50cywgZWxlbWVu
dHNpemUpOwogI2VuZGlmCiAKICAgICBpZiAoIXJlc3VsdCkKQEAgLTMyNCw3ICszMjQsNyBAQCB2
b2lkIGZhc3RGcmVlKHZvaWQqIHApCiAgICAgCiAgICAgZmFzdE1hbGxvY01hdGNoVmFsaWRhdGVG
cmVlKHAsIEludGVybmFsOjpBbGxvY1R5cGVNYWxsb2MpOwogICAgIEludGVybmFsOjpWYWxpZGF0
aW9uSGVhZGVyKiBoZWFkZXIgPSBJbnRlcm5hbDo6ZmFzdE1hbGxvY1ZhbGlkYXRpb25IZWFkZXIo
cCk7Ci0gICAgbWVtc2V0KHAsIDB4Q0MsIGhlYWRlci0+bV9zaXplKTsKKyAgICBtZW1zZXQocCwg
MHhDQywgaGVhZGVyLT5tc2l6ZSk7CiAgICAgZnJlZShoZWFkZXIpOwogI2Vsc2UKICAgICBmcmVl
KHApOwpAQCAtMzQzLDcgKzM0Myw3IEBAIFRyeU1hbGxvY1JldHVyblZhbHVlIHRyeUZhc3RSZWFs
bG9jKHZvaWQKICAgICAgICAgSW50ZXJuYWw6OlZhbGlkYXRpb25IZWFkZXIqIHJlc3VsdCA9IHN0
YXRpY19jYXN0PEludGVybmFsOjpWYWxpZGF0aW9uSGVhZGVyKj4ocmVhbGxvYyhJbnRlcm5hbDo6
ZmFzdE1hbGxvY1ZhbGlkYXRpb25IZWFkZXIocCksIG4gKyBJbnRlcm5hbDo6VmFsaWRhdGlvbkJ1
ZmZlclNpemUpKTsKICAgICAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgICAgICByZXR1cm4gMDsK
LSAgICAgICAgcmVzdWx0LT5tX3NpemUgPSBuOworICAgICAgICByZXN1bHQtPm1zaXplID0gbjsK
ICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICsgMTsKICAgICAgICAgKmZhc3RNYWxsb2NWYWxpZGF0
aW9uU3VmZml4KHJlc3VsdCkgPSBJbnRlcm5hbDo6VmFsaWRhdGlvblN1ZmZpeDsKICAgICAgICAg
ZmFzdE1hbGxvY1ZhbGlkYXRlKHJlc3VsdCk7CkBAIC0zODUsOSArMzg1LDkgQEAgRmFzdE1hbGxv
Y1N0YXRpc3RpY3MgZmFzdE1hbGxvY1N0YXRpc3RpYwogc2l6ZV90IGZhc3RNYWxsb2NTaXplKGNv
bnN0IHZvaWQqIHApCiB7CiAjaWYgRU5BQkxFKFdURl9NQUxMT0NfVkFMSURBVElPTikKLSAgICBy
ZXR1cm4gSW50ZXJuYWw6OmZhc3RNYWxsb2NWYWxpZGF0aW9uSGVhZGVyKGNvbnN0X2Nhc3Q8dm9p
ZCo+KHApKS0+bV9zaXplOworICAgIHJldHVybiBJbnRlcm5hbDo6ZmFzdE1hbGxvY1ZhbGlkYXRp
b25IZWFkZXIoY29uc3RfY2FzdDx2b2lkKj4ocCkpLT5tc2l6ZTsKICNlbGlmIE9TKERBUldJTikK
LSAgICByZXR1cm4gbWFsbG9jX3NpemUocCk7CisgICAgcmV0dXJuIG1hbGxvY1NpemUocCk7CiAj
ZWxpZiBPUyhXSU5ET1dTKQogICAgIHJldHVybiBfbXNpemUoY29uc3RfY2FzdDx2b2lkKj4ocCkp
OwogI2Vsc2UKQEAgLTQ3MiwxNyArNDcyLDE3IEBAIHN0YXRpYyB2b2lkKiAoKnB0aHJlYWRfZ2V0
c3BlY2lmaWNfZnVuY3QKICNlbmRpZgogCiAjZGVmaW5lIERFRklORV9WQVJJQUJMRSh0eXBlLCBu
YW1lLCB2YWx1ZSwgbWVhbmluZykgXAotICBuYW1lc3BhY2UgRkxBR19fbmFtZXNwYWNlX2RvX25v
dF91c2VfZGlyZWN0bHlfdXNlX0RFQ0xBUkVfIyN0eXBlIyNfaW5zdGVhZCB7ICBcCi0gIHR5cGUg
RkxBR1NfIyNuYW1lKHZhbHVlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
Y2hhciBGTEFHU19ubyMjbmFtZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgdXNpbmcgRkxB
R19fbmFtZXNwYWNlX2RvX25vdF91c2VfZGlyZWN0bHlfdXNlX0RFQ0xBUkVfIyN0eXBlIyNfaW5z
dGVhZDo6RkxBR1NfIyNuYW1lCisgICAgbmFtZXNwYWNlIEZMQUdfX25hbWVzcGFjZV9kb19ub3Rf
dXNlX2RpcmVjdGx5X3VzZV9ERUNMQVJFXyMjdHlwZSMjX2luc3RlYWQgeyAgXAorICAgIHR5cGUg
RkxBR1NfIyNuYW1lKHZhbHVlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICBjaGFyIEZMQUdTX25vIyNuYW1lOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdXNp
bmcgRkxBR19fbmFtZXNwYWNlX2RvX25vdF91c2VfZGlyZWN0bHlfdXNlX0RFQ0xBUkVfIyN0eXBl
IyNfaW5zdGVhZDo6RkxBR1NfIyNuYW1lCiAgIAogI2RlZmluZSBERUZJTkVfaW50NjQobmFtZSwg
dmFsdWUsIG1lYW5pbmcpIFwKLSAgREVGSU5FX1ZBUklBQkxFKGludDY0X3QsIG5hbWUsIHZhbHVl
LCBtZWFuaW5nKQorICAgIERFRklORV9WQVJJQUJMRShpbnQ2NF90LCBuYW1lLCB2YWx1ZSwgbWVh
bmluZykKICAgCiAjZGVmaW5lIERFRklORV9kb3VibGUobmFtZSwgdmFsdWUsIG1lYW5pbmcpIFwK
LSAgREVGSU5FX1ZBUklBQkxFKGRvdWJsZSwgbmFtZSwgdmFsdWUsIG1lYW5pbmcpCisgICAgREVG
SU5FX1ZBUklBQkxFKGRvdWJsZSwgbmFtZSwgdmFsdWUsIG1lYW5pbmcpCiAKIG5hbWVzcGFjZSBX
VEYgewogCkBAIC00OTYsOSArNDk2LDkgQEAgbmFtZXNwYWNlIFdURiB7CiAKICNpZiBPUyhEQVJX
SU4pCiBzdHJ1Y3QgU3BhbjsKLWNsYXNzIFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3RQYWRkZWQ7
Ci1jbGFzcyBUQ01hbGxvY19QYWdlSGVhcDsKLWNsYXNzIFRDTWFsbG9jX1RocmVhZENhY2hlOwor
Y2xhc3MgVENNYWxsb2NDZW50cmFsRnJlZUxpc3RQYWRkZWQ7CitjbGFzcyBUQ01hbGxvY1BhZ2VI
ZWFwOworY2xhc3MgVENNYWxsb2NUaHJlYWRDYWNoZTsKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBj
bGFzcyBQYWdlSGVhcEFsbG9jYXRvcjsKIAogY2xhc3MgRmFzdE1hbGxvY1pvbmUgewpAQCAtNTE1
LDIxICs1MTUsMjEgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHN0YXRpc3RpY3MobWFsbG9j
X3pvbmVfdCosIG1hbGxvY19zdGF0aXN0aWNzX3QqIHN0YXRzKSB7IG1lbXNldChzdGF0cywgMCwg
c2l6ZW9mKG1hbGxvY19zdGF0aXN0aWNzX3QpKTsgfQogCiBwcml2YXRlOgotICAgIEZhc3RNYWxs
b2Nab25lKFRDTWFsbG9jX1BhZ2VIZWFwKiwgVENNYWxsb2NfVGhyZWFkQ2FjaGUqKiwgVENNYWxs
b2NfQ2VudHJhbF9GcmVlTGlzdFBhZGRlZCosIFBhZ2VIZWFwQWxsb2NhdG9yPFNwYW4+KiwgUGFn
ZUhlYXBBbGxvY2F0b3I8VENNYWxsb2NfVGhyZWFkQ2FjaGU+Kik7CisgICAgRmFzdE1hbGxvY1pv
bmUoVENNYWxsb2NQYWdlSGVhcCosIFRDTWFsbG9jVGhyZWFkQ2FjaGUqKiwgVENNYWxsb2NDZW50
cmFsRnJlZUxpc3RQYWRkZWQqLCBQYWdlSGVhcEFsbG9jYXRvcjxTcGFuPiosIFBhZ2VIZWFwQWxs
b2NhdG9yPFRDTWFsbG9jVGhyZWFkQ2FjaGU+Kik7CiAgICAgc3RhdGljIHNpemVfdCBzaXplKG1h
bGxvY196b25lX3QqLCBjb25zdCB2b2lkKik7CiAgICAgc3RhdGljIHZvaWQqIHpvbmVNYWxsb2Mo
bWFsbG9jX3pvbmVfdCosIHNpemVfdCk7Ci0gICAgc3RhdGljIHZvaWQqIHpvbmVDYWxsb2MobWFs
bG9jX3pvbmVfdCosIHNpemVfdCBudW1JdGVtcywgc2l6ZV90IHNpemUpOworICAgIHN0YXRpYyB2
b2lkKiB6b25lQ2FsbG9jKG1hbGxvY196b25lX3QqLCBzaXplX3QgbnVtSXRlbXMsIHNpemVfdCk7
CiAgICAgc3RhdGljIHZvaWQgem9uZUZyZWUobWFsbG9jX3pvbmVfdCosIHZvaWQqKTsKICAgICBz
dGF0aWMgdm9pZCogem9uZVJlYWxsb2MobWFsbG9jX3pvbmVfdCosIHZvaWQqLCBzaXplX3QpOwog
ICAgIHN0YXRpYyB2b2lkKiB6b25lVmFsbG9jKG1hbGxvY196b25lX3QqLCBzaXplX3QpIHsgTE9H
X0VSUk9SKCJ2YWxsb2MgaXMgbm90IHN1cHBvcnRlZCIpOyByZXR1cm4gMDsgfQogICAgIHN0YXRp
YyB2b2lkIHpvbmVEZXN0cm95KG1hbGxvY196b25lX3QqKSB7IH0KIAogICAgIG1hbGxvY196b25l
X3QgbV96b25lOwotICAgIFRDTWFsbG9jX1BhZ2VIZWFwKiBtX3BhZ2VIZWFwOwotICAgIFRDTWFs
bG9jX1RocmVhZENhY2hlKiogbV90aHJlYWRIZWFwczsKLSAgICBUQ01hbGxvY19DZW50cmFsX0Zy
ZWVMaXN0UGFkZGVkKiBtX2NlbnRyYWxDYWNoZXM7CisgICAgVENNYWxsb2NQYWdlSGVhcCogbV9w
YWdlSGVhcDsKKyAgICBUQ01hbGxvY1RocmVhZENhY2hlKiogbV90aHJlYWRIZWFwczsKKyAgICBU
Q01hbGxvY0NlbnRyYWxGcmVlTGlzdFBhZGRlZCogbV9jZW50cmFsQ2FjaGVzOwogICAgIFBhZ2VI
ZWFwQWxsb2NhdG9yPFNwYW4+KiBtX3NwYW5BbGxvY2F0b3I7Ci0gICAgUGFnZUhlYXBBbGxvY2F0
b3I8VENNYWxsb2NfVGhyZWFkQ2FjaGU+KiBtX3BhZ2VIZWFwQWxsb2NhdG9yOworICAgIFBhZ2VI
ZWFwQWxsb2NhdG9yPFRDTWFsbG9jVGhyZWFkQ2FjaGU+KiBtX3BhZ2VIZWFwQWxsb2NhdG9yOwog
fTsKIAogI2VuZGlmCkBAIC01MzcsNyArNTM3LDcgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAjaWZu
ZGVmIFdURl9DSEFOR0VTCi0vLyBUaGlzICNpZmRlZiBzaG91bGQgYWxtb3N0IG5ldmVyIGJlIHNl
dC4gIFNldCBOT19UQ01BTExPQ19TQU1QTEVTIGlmCisvLyBUaGlzICNpZmRlZiBzaG91bGQgYWxt
b3N0IG5ldmVyIGJlIHNldC4gU2V0IE5PX1RDTUFMTE9DX1NBTVBMRVMgaWYKIC8vIHlvdSdyZSBw
b3J0aW5nIHRvIGEgc3lzdGVtIHdoZXJlIHlvdSByZWFsbHkgY2FuJ3QgZ2V0IGEgc3RhY2t0cmFj
ZS4KICNpZmRlZiBOT19UQ01BTExPQ19TQU1QTEVTCiAvLyBXZSB1c2UgI2RlZmluZSBzbyBjb2Rl
IGNvbXBpbGVzIGV2ZW4gaWYgeW91ICNpbmNsdWRlIHN0YWNrdHJhY2UuaCBzb21laG93LgpAQCAt
NTQ4LDQ3ICs1NDgsNDkgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAvLyBFdmVuIGlmIHdlIGhhdmUg
c3VwcG9ydCBmb3IgdGhyZWFkLWxvY2FsIHN0b3JhZ2UgaW4gdGhlIGNvbXBpbGVyCi0vLyBhbmQg
bGlua2VyLCB0aGUgT1MgbWF5IG5vdCBzdXBwb3J0IGl0LiAgV2UgbmVlZCB0byBjaGVjayB0aGF0
IGF0Ci0vLyBydW50aW1lLiAgUmlnaHQgbm93LCB3ZSBoYXZlIHRvIGtlZXAgYSBtYW51YWwgc2V0
IG9mICJiYWQiIE9TZXMuCisvLyBhbmQgbGlua2VyLCB0aGUgT1MgbWF5IG5vdCBzdXBwb3J0IGl0
LiBXZSBuZWVkIHRvIGNoZWNrIHRoYXQgYXQKKy8vIHJ1bnRpbWUuIFJpZ2h0IG5vdywgd2UgaGF2
ZSB0byBrZWVwIGEgbWFudWFsIHNldCBvZiAiYmFkIiBPU2VzLgogI2lmIGRlZmluZWQoSEFWRV9U
TFMpCi0gIHN0YXRpYyBib29sIGtlcm5lbF9zdXBwb3J0c190bHMgPSBmYWxzZTsgICAgICAvLyBi
ZSBjb25zZXJ2YXRpdmUKLSAgc3RhdGljIGlubGluZSBib29sIEtlcm5lbFN1cHBvcnRzVExTKCkg
ewotICAgIHJldHVybiBrZXJuZWxfc3VwcG9ydHNfdGxzOwotICB9Ci0jIGlmICFIQVZFX0RFQ0xf
VU5BTUUgICAvLyBpZiB0b28gb2xkIGZvciB1bmFtZSwgcHJvYmFibHkgdG9vIG9sZCBmb3IgVExT
Ci0gICAgc3RhdGljIHZvaWQgQ2hlY2tJZktlcm5lbFN1cHBvcnRzVExTKCkgewotICAgICAga2Vy
bmVsX3N1cHBvcnRzX3RscyA9IGZhbHNlOwotICAgIH0KK3N0YXRpYyBib29sIGtlcm5lbFN1cHBv
cnRzVGxzID0gZmFsc2U7IC8vIGJlIGNvbnNlcnZhdGl2ZQorc3RhdGljIGlubGluZSBib29sIEtl
cm5lbFN1cHBvcnRzVExTKCkKK3sKKyAgICByZXR1cm4ga2VybmVsU3VwcG9ydHNUbHM7Cit9Cisj
IGlmICFIQVZFX0RFQ0xfVU5BTUUgLy8gaWYgdG9vIG9sZCBmb3IgdW5hbWUsIHByb2JhYmx5IHRv
byBvbGQgZm9yIFRMUworc3RhdGljIHZvaWQgQ2hlY2tJZktlcm5lbFN1cHBvcnRzVExTKCkKK3sK
KyAgICBrZXJuZWxTdXBwb3J0c1RscyA9IGZhbHNlOworfQogIyBlbHNlCi0jICAgaW5jbHVkZSA8
c3lzL3V0c25hbWUuaD4gICAgLy8gREVDTF9VTkFNRSBjaGVja2VkIGZvciA8c3lzL3V0c25hbWUu
aD4gdG9vCi0gICAgc3RhdGljIHZvaWQgQ2hlY2tJZktlcm5lbFN1cHBvcnRzVExTKCkgewotICAg
ICAgc3RydWN0IHV0c25hbWUgYnVmOwotICAgICAgaWYgKHVuYW1lKCZidWYpICE9IDApIHsgICAv
LyBzaG91bGQgYmUgaW1wb3NzaWJsZQorIyBpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPiAvLyBERUNM
X1VOQU1FIGNoZWNrZWQgZm9yIDxzeXMvdXRzbmFtZS5oPiB0b28KK3N0YXRpYyB2b2lkIENoZWNr
SWZLZXJuZWxTdXBwb3J0c1RMUygpCit7CisgICAgc3RydWN0IHV0c25hbWUgYnVmOworICAgIGlm
ICh1bmFtZSgmYnVmKSkgeyAvLyBzaG91bGQgYmUgaW1wb3NzaWJsZQogICAgICAgICBNRVNTQUdF
KCJ1bmFtZSBmYWlsZWQgYXNzdW1pbmcgbm8gVExTIHN1cHBvcnQgKGVycm5vPSVkKVxuIiwgZXJy
bm8pOwotICAgICAgICBrZXJuZWxfc3VwcG9ydHNfdGxzID0gZmFsc2U7Ci0gICAgICB9IGVsc2Ug
aWYgKHN0cmNhc2VjbXAoYnVmLnN5c25hbWUsICJsaW51eCIpID09IDApIHsKKyAgICAgICAga2Vy
bmVsU3VwcG9ydHNUbHMgPSBmYWxzZTsKKyAgICB9IGVsc2UgaWYgKCFzdHJjYXNlY21wKGJ1Zi5z
eXNuYW1lLCAibGludXgiKSkgewogICAgICAgICAvLyBUaGUgbGludXggY2FzZTogdGhlIGZpcnN0
IGtlcm5lbCB0byBzdXBwb3J0IFRMUyB3YXMgMi42LjAKLSAgICAgICAgaWYgKGJ1Zi5yZWxlYXNl
WzBdIDwgJzInICYmIGJ1Zi5yZWxlYXNlWzFdID09ICcuJykgICAgLy8gMC54IG9yIDEueAotICAg
ICAgICAgIGtlcm5lbF9zdXBwb3J0c190bHMgPSBmYWxzZTsKLSAgICAgICAgZWxzZSBpZiAoYnVm
LnJlbGVhc2VbMF0gPT0gJzInICYmIGJ1Zi5yZWxlYXNlWzFdID09ICcuJyAmJgotICAgICAgICAg
ICAgICAgICBidWYucmVsZWFzZVsyXSA+PSAnMCcgJiYgYnVmLnJlbGVhc2VbMl0gPCAnNicgJiYK
LSAgICAgICAgICAgICAgICAgYnVmLnJlbGVhc2VbM10gPT0gJy4nKSAgICAgICAgICAgICAgICAg
ICAgICAgLy8gMi4wIC0gMi41Ci0gICAgICAgICAga2VybmVsX3N1cHBvcnRzX3RscyA9IGZhbHNl
OworICAgICAgICBpZiAoYnVmLnJlbGVhc2VbMF0gPCAnMicgJiYgYnVmLnJlbGVhc2VbMV0gPT0g
Jy4nKSAvLyAwLnggb3IgMS54CisgICAgICAgICAgICBrZXJuZWxTdXBwb3J0c1RscyA9IGZhbHNl
OworICAgICAgICBlbHNlIGlmIChidWYucmVsZWFzZVswXSA9PSAnMicgJiYgYnVmLnJlbGVhc2Vb
MV0gPT0gJy4nCisgICAgICAgICAgICAgICAgJiYgYnVmLnJlbGVhc2VbMl0gPj0gJzAnICYmIGJ1
Zi5yZWxlYXNlWzJdIDwgJzYnCisgICAgICAgICAgICAgICAgJiYgYnVmLnJlbGVhc2VbM10gPT0g
Jy4nKSAvLyAyLjAgLSAyLjUKKyAgICAgICAgICAgIGtlcm5lbFN1cHBvcnRzVGxzID0gZmFsc2U7
CiAgICAgICAgIGVsc2UKLSAgICAgICAgICBrZXJuZWxfc3VwcG9ydHNfdGxzID0gdHJ1ZTsKLSAg
ICAgIH0gZWxzZSB7ICAgICAgICAvLyBzb21lIG90aGVyIGtlcm5lbCwgd2UnbGwgYmUgb3B0aW1p
c2l0aWMKLSAgICAgICAga2VybmVsX3N1cHBvcnRzX3RscyA9IHRydWU7Ci0gICAgICB9Ci0gICAg
ICAvLyBUT0RPKGNzaWx2ZXJzKTogVkxPRygxKSB0aGUgdGxzIHN0YXR1cyBvbmNlIHdlIHN1cHBv
cnQgUkFXX1ZMT0cKLSAgICB9Ci0jICBlbmRpZiAgLy8gSEFWRV9ERUNMX1VOQU1FCi0jZW5kaWYg
ICAgLy8gSEFWRV9UTFMKKyAgICAgICAgICAgIGtlcm5lbFN1cHBvcnRzVGxzID0gdHJ1ZTsKKyAg
ICB9IGVsc2UgLy8gc29tZSBvdGhlciBrZXJuZWwsIHdlJ2xsIGJlIG9wdGltaXNpdGljCisgICAg
ICAgIGtlcm5lbFN1cHBvcnRzVGxzID0gdHJ1ZTsKKyAgICAvLyBUT0RPKGNzaWx2ZXJzKTogVkxP
RygxKSB0aGUgdGxzIHN0YXR1cyBvbmNlIHdlIHN1cHBvcnQgUkFXX1ZMT0cKK30KKyNlbmRpZiAv
LyBIQVZFX0RFQ0xfVU5BTUUKKyNlbmRpZiAvLyBIQVZFX1RMUwogCi0vLyBfX1RIUk9XIGlzIGRl
ZmluZWQgaW4gZ2xpYmMgc3lzdGVtcy4gIEl0IG1lYW5zLCBjb3VudGVyLWludHVpdGl2ZWx5LAot
Ly8gIlRoaXMgZnVuY3Rpb24gd2lsbCBuZXZlciB0aHJvdyBhbiBleGNlcHRpb24uIiAgSXQncyBh
biBvcHRpb25hbAorLy8gX19USFJPVyBpcyBkZWZpbmVkIGluIGdsaWJjIHN5c3RlbXMuIEl0IG1l
YW5zLCBjb3VudGVyLWludHVpdGl2ZWx5LAorLy8gIlRoaXMgZnVuY3Rpb24gd2lsbCBuZXZlciB0
aHJvdyBhbiBleGNlcHRpb24uIiBJdCdzIGFuIG9wdGlvbmFsCiAvLyBvcHRpbWl6YXRpb24gdG9v
bCwgYnV0IHdlIG1heSBuZWVkIHRvIHVzZSBpdCB0byBtYXRjaCBnbGliYyBwcm90b3R5cGVzLgot
I2lmbmRlZiBfX1RIUk9XICAgIC8vIEkgZ3Vlc3Mgd2UncmUgbm90IG9uIGEgZ2xpYmMgc3lzdGVt
Ci0jIGRlZmluZSBfX1RIUk9XICAgLy8gX19USFJPVyBpcyBqdXN0IGFuIG9wdGltaXphdGlvbiwg
c28gb2sgdG8gbWFrZSBpdCAiIgorI2lmbmRlZiBfX1RIUk9XIC8vIEkgZ3Vlc3Mgd2UncmUgbm90
IG9uIGEgZ2xpYmMgc3lzdGVtCisjZGVmaW5lIF9fVEhST1cgLy8gX19USFJPVyBpcyBqdXN0IGFu
IG9wdGltaXphdGlvbiwgc28gb2sgdG8gbWFrZSBpdCAiIgogI2VuZGlmCiAKIC8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQpAQCAtNTk2LDcgKzU5OCw3IEBAIHByaXZhdGU6CiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogLy8gTm90IGFs
bCBwb3NzaWJsZSBjb21iaW5hdGlvbnMgb2YgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzIG1ha2UK
LS8vIHNlbnNlLiAgSW4gcGFydGljdWxhciwgaWYga01heFNpemUgaW5jcmVhc2VzLCB5b3UgbWF5
IGhhdmUgdG8KKy8vIHNlbnNlLiBJbiBwYXJ0aWN1bGFyLCBpZiBrTWF4U2l6ZSBpbmNyZWFzZXMs
IHlvdSBtYXkgaGF2ZSB0bwogLy8gaW5jcmVhc2Uga051bUNsYXNzZXMgYXMgd2VsbC4KIHN0YXRp
YyBjb25zdCBzaXplX3Qga1BhZ2VTaGlmdCAgPSAxMjsKIHN0YXRpYyBjb25zdCBzaXplX3Qga1Bh
Z2VTaXplICAgPSAxIDw8IGtQYWdlU2hpZnQ7CkBAIC02MDksMjQgKzYxMSwyNCBAQCBzdGF0aWMg
Y29uc3Qgc2l6ZV90IGtOdW1DbGFzc2VzID0gNjg7CiAvLyAxMjhNQgogc3RhdGljIGNvbnN0IHNp
emVfdCBrUGFnZU1hcEJpZ0FsbG9jYXRpb25UaHJlc2hvbGQgPSAxMjggPDwgMjA7CiAKLS8vIE1p
bmltdW0gbnVtYmVyIG9mIHBhZ2VzIHRvIGZldGNoIGZyb20gc3lzdGVtIGF0IGEgdGltZS4gIE11
c3QgYmUKKy8vIE1pbmltdW0gbnVtYmVyIG9mIHBhZ2VzIHRvIGZldGNoIGZyb20gc3lzdGVtIGF0
IGEgdGltZS4gTXVzdCBiZQogLy8gc2lnbmlmaWNhbnRseSBiaWdnZXIgdGhhbiBrUGFnZVNpemUg
dG8gYW1vcnRpemUgc3lzdGVtLWNhbGwKLS8vIG92ZXJoZWFkLCBhbmQgYWxzbyB0byByZWR1Y2Ug
ZXh0ZXJuYWwgZnJhZ2VtZW50YXRpb24uICBBbHNvLCB3ZQorLy8gb3ZlcmhlYWQsIGFuZCBhbHNv
IHRvIHJlZHVjZSBleHRlcm5hbCBmcmFnZW1lbnRhdGlvbi4gQWxzbywgd2UKIC8vIHNob3VsZCBr
ZWVwIHRoaXMgdmFsdWUgYmlnIGJlY2F1c2UgdmFyaW91cyBpbmNhcm5hdGlvbnMgb2YgTGludXgK
IC8vIGhhdmUgc21hbGwgbGltaXRzIG9uIHRoZSBudW1iZXIgb2YgbW1hcCgpIHJlZ2lvbnMgcGVy
CiAvLyBhZGRyZXNzLXNwYWNlLgogc3RhdGljIGNvbnN0IHNpemVfdCBrTWluU3lzdGVtQWxsb2Mg
PSAxIDw8ICgyMCAtIGtQYWdlU2hpZnQpOwogCiAvLyBOdW1iZXIgb2Ygb2JqZWN0cyB0byBtb3Zl
IGJldHdlZW4gYSBwZXItdGhyZWFkIGxpc3QgYW5kIGEgY2VudHJhbAotLy8gbGlzdCBpbiBvbmUg
c2hvdC4gIFdlIHdhbnQgdGhpcyB0byBiZSBub3QgdG9vIHNtYWxsIHNvIHdlIGNhbgotLy8gYW1v
cnRpemUgdGhlIGxvY2sgb3ZlcmhlYWQgZm9yIGFjY2Vzc2luZyB0aGUgY2VudHJhbCBsaXN0LiAg
TWFraW5nCisvLyBsaXN0IGluIG9uZSBzaG90LiBXZSB3YW50IHRoaXMgdG8gYmUgbm90IHRvbyBz
bWFsbCBzbyB3ZSBjYW4KKy8vIGFtb3J0aXplIHRoZSBsb2NrIG92ZXJoZWFkIGZvciBhY2Nlc3Np
bmcgdGhlIGNlbnRyYWwgbGlzdC4gTWFraW5nCiAvLyBpdCB0b28gYmlnIG1heSB0ZW1wb3Jhcmls
eSBjYXVzZSB1bm5lY2Vzc2FyeSBtZW1vcnkgd2FzdGFnZSBpbiB0aGUKIC8vIHBlci10aHJlYWQg
ZnJlZSBsaXN0IHVudGlsIHRoZSBzY2F2ZW5nZXIgY2xlYW5zIHVwIHRoZSBsaXN0Lgotc3RhdGlj
IGludCBudW1fb2JqZWN0c190b19tb3ZlW2tOdW1DbGFzc2VzXTsKK3N0YXRpYyBpbnQgbnVtT2Jq
ZWN0c1RvTW92ZVtrTnVtQ2xhc3Nlc107CiAKIC8vIE1heGltdW0gbGVuZ3RoIHdlIGFsbG93IGEg
cGVyLXRocmVhZCBmcmVlLWxpc3QgdG8gaGF2ZSBiZWZvcmUgd2UKLS8vIG1vdmUgb2JqZWN0cyBm
cm9tIGl0IGludG8gdGhlIGNvcnJlc3BvbmRpbmcgY2VudHJhbCBmcmVlLWxpc3QuICBXZQotLy8g
d2FudCB0aGlzIGJpZyB0byBhdm9pZCBsb2NraW5nIHRoZSBjZW50cmFsIGZyZWUtbGlzdCB0b28g
b2Z0ZW4uICBJdAorLy8gbW92ZSBvYmplY3RzIGZyb20gaXQgaW50byB0aGUgY29ycmVzcG9uZGlu
ZyBjZW50cmFsIGZyZWUtbGlzdC4gV2UKKy8vIHdhbnQgdGhpcyBiaWcgdG8gYXZvaWQgbG9ja2lu
ZyB0aGUgY2VudHJhbCBmcmVlLWxpc3QgdG9vIG9mdGVuLiBJdAogLy8gc2hvdWxkIG5vdCBodXJ0
IHRvIG1ha2UgdGhpcyBsaXN0IHNvbWV3aGF0IGJpZyBiZWNhdXNlIHRoZQogLy8gc2NhdmVuZ2lu
ZyBjb2RlIHdpbGwgc2hyaW5rIGl0IGRvd24gd2hlbiBpdHMgY29udGVudHMgYXJlIG5vdCBpbiB1
c2UuCiBzdGF0aWMgY29uc3QgaW50IGtNYXhGcmVlTGlzdExlbmd0aCA9IDI1NjsKQEAgLTY0Nyw3
ICs2NDksNyBAQCBzdGF0aWMgY29uc3Qgc2l6ZV90IGtEZWZhdWx0T3ZlcmFsbFRocmVhCiBzdGF0
aWMgY29uc3Qgc2l6ZV90IGtNYXhQYWdlcyA9IGtNaW5TeXN0ZW1BbGxvYzsKIAogLyogVGhlIHNt
YWxsZXN0IHByaW1lID4gMl5uICovCi1zdGF0aWMgaW50IHByaW1lc19saXN0W10gPSB7CitzdGF0
aWMgaW50IHByaW1lc0xpc3RbXSA9IHsKICAgICAvLyBTbWFsbCB2YWx1ZXMgbWlnaHQgY2F1c2Ug
aGlnaCByYXRlcyBvZiBzYW1wbGluZwogICAgIC8vIGFuZCBoZW5jZSBjb21tZW50ZWQgb3V0Lgog
ICAgIC8vIDIsIDUsIDExLCAxNywgMzcsIDY3LCAxMzEsIDI1NywKQEAgLTY2NSwxMCArNjY3LDcg
QEAgREVGSU5FX2ludDY0KHRjbWFsbG9jX3NhbXBsZV9wYXJhbWV0ZXIsCiAgICAgICAgICAgICAg
IlVudXNlZDogY29kZSBpcyBjb21waWxlZCB3aXRoIE5PX1RDTUFMTE9DX1NBTVBMRVMiKTsKIHN0
YXRpYyBzaXplX3Qgc2FtcGxlX3BlcmlvZCA9IDA7CiAjZWxzZQotREVGSU5FX2ludDY0KHRjbWFs
bG9jX3NhbXBsZV9wYXJhbWV0ZXIsIDI2MjE0NywKLSAgICAgICAgICJUd2ljZSB0aGUgYXBwcm94
aW1hdGUgZ2FwIGJldHdlZW4gc2FtcGxpbmcgYWN0aW9ucy4iCi0gICAgICAgICAiIE11c3QgYmUg
YSBwcmltZSBudW1iZXIuIE90aGVyd2lzZSB3aWxsIGJlIHJvdW5kZWQgdXAgdG8gYSAiCi0gICAg
ICAgICAiIGxhcmdlciBwcmltZSBudW1iZXIiKTsKK0RFRklORV9pbnQ2NCh0Y21hbGxvY19zYW1w
bGVfcGFyYW1ldGVyLCAyNjIxNDcsICJUd2ljZSB0aGUgYXBwcm94aW1hdGUgZ2FwIGJldHdlZW4g
c2FtcGxpbmcgYWN0aW9ucy4gTXVzdCBiZSBhIHByaW1lIG51bWJlci4gT3RoZXJ3aXNlIHdpbGwg
YmUgcm91bmRlZCB1cCB0byBhIGxhcmdlciBwcmltZSBudW1iZXIiKTsKIHN0YXRpYyBzaXplX3Qg
c2FtcGxlX3BlcmlvZCA9IDI2MjE0NzsKICNlbmRpZgogCkBAIC02NzcsMjMgKzY3NiwxOCBAQCBz
dGF0aWMgU3BpbkxvY2sgc2FtcGxlX3BlcmlvZF9sb2NrID0gU1BJCiAKIC8vIFBhcmFtZXRlcnMg
Zm9yIGNvbnRyb2xsaW5nIGhvdyBmYXN0IG1lbW9yeSBpcyByZXR1cm5lZCB0byB0aGUgT1MuCiAK
LURFRklORV9kb3VibGUodGNtYWxsb2NfcmVsZWFzZV9yYXRlLCAxLAotICAgICAgICAgICAgICAi
UmF0ZSBhdCB3aGljaCB3ZSByZWxlYXNlIHVudXNlZCBtZW1vcnkgdG8gdGhlIHN5c3RlbS4gICIK
LSAgICAgICAgICAgICAgIlplcm8gbWVhbnMgd2UgbmV2ZXIgcmVsZWFzZSBtZW1vcnkgYmFjayB0
byB0aGUgc3lzdGVtLiAgIgotICAgICAgICAgICAgICAiSW5jcmVhc2UgdGhpcyBmbGFnIHRvIHJl
dHVybiBtZW1vcnkgZmFzdGVyOyBkZWNyZWFzZSBpdCAiCi0gICAgICAgICAgICAgICJ0byByZXR1
cm4gbWVtb3J5IHNsb3dlci4gIFJlYXNvbmFibGUgcmF0ZXMgYXJlIGluIHRoZSAiCi0gICAgICAg
ICAgICAgICJyYW5nZSBbMCwxMF0iKTsKK0RFRklORV9kb3VibGUodGNtYWxsb2NfcmVsZWFzZV9y
YXRlLCAxLCAiUmF0ZSBhdCB3aGljaCB3ZSByZWxlYXNlIHVudXNlZCBtZW1vcnkgdG8gdGhlIHN5
c3RlbS4gWmVybyBtZWFucyB3ZSBuZXZlciByZWxlYXNlIG1lbW9yeSBiYWNrIHRvIHRoZSBzeXN0
ZW0uIEluY3JlYXNlIHRoaXMgZmxhZyB0byByZXR1cm4gbWVtb3J5IGZhc3RlcjsgZGVjcmVhc2Ug
aXQgdG8gcmV0dXJuIG1lbW9yeSBzbG93ZXIuIFJlYXNvbmFibGUgcmF0ZXMgYXJlIGluIHRoZSBy
YW5nZSBbMCwxMF0iKTsKIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBNYXBwaW5nIGZyb20gc2l6ZSB0byBz
aXplX2NsYXNzIGFuZCB2aWNlIHZlcnNhCisvLyBNYXBwaW5nIGZyb20gc2l6ZSB0byBzaXplY2xh
c3MgYW5kIHZpY2UgdmVyc2EKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0vLyBTaXplcyA8PSAxMDI0IGhhdmUg
YW4gYWxpZ25tZW50ID49IDguICBTbyBmb3Igc3VjaCBzaXplcyB3ZSBoYXZlIGFuCi0vLyBhcnJh
eSBpbmRleGVkIGJ5IGNlaWwoc2l6ZS84KS4gIFNpemVzID4gMTAyNCBoYXZlIGFuIGFsaWdubWVu
dCA+PSAxMjguCisvLyBTaXplcyA8PSAxMDI0IGhhdmUgYW4gYWxpZ25tZW50ID49IDguIFNvIGZv
ciBzdWNoIHNpemVzIHdlIGhhdmUgYW4KKy8vIGFycmF5IGluZGV4ZWQgYnkgY2VpbChzaXplLzgp
LiBTaXplcyA+IDEwMjQgaGF2ZSBhbiBhbGlnbm1lbnQgPj0gMTI4LgogLy8gU28gZm9yIHRoZXNl
IGxhcmdlciBzaXplcyB3ZSBoYXZlIGFuIGFycmF5IGluZGV4ZWQgYnkgY2VpbChzaXplLzEyOCku
CiAvLwogLy8gV2UgZmxhdHRlbiBib3RoIGxvZ2ljYWwgYXJyYXlzIGludG8gb25lIHBoeXNpY2Fs
IGFycmF5IGFuZCB1c2UKLS8vIGFyaXRobWV0aWMgdG8gY29tcHV0ZSBhbiBhcHByb3ByaWF0ZSBp
bmRleC4gIFRoZSBjb25zdGFudHMgdXNlZCBieQorLy8gYXJpdGhtZXRpYyB0byBjb21wdXRlIGFu
IGFwcHJvcHJpYXRlIGluZGV4LiBUaGUgY29uc3RhbnRzIHVzZWQgYnkKIC8vIENsYXNzSW5kZXgo
KSB3ZXJlIHNlbGVjdGVkIHRvIG1ha2UgdGhlIGZsYXR0ZW5pbmcgd29yay4KIC8vCiAvLyBFeGFt
cGxlczoKQEAgLTcwOSwzMCArNzAzLDMxIEBAIERFRklORV9kb3VibGUodGNtYWxsb2NfcmVsZWFz
ZV9yYXRlLCAxLAogc3RhdGljIGNvbnN0IHNpemVfdCBrTWF4U21hbGxTaXplID0gMTAyNDsKIHN0
YXRpYyBjb25zdCBpbnQgc2hpZnRfYW1vdW50WzJdID0geyAzLCA3IH07ICAvLyBGb3IgZGl2aWRl
cyBieSA4IG9yIDEyOAogc3RhdGljIGNvbnN0IGludCBhZGRfYW1vdW50WzJdID0geyA3LCAxMjcg
KyAoMTIwIDw8IDcpIH07Ci1zdGF0aWMgdW5zaWduZWQgY2hhciBjbGFzc19hcnJheVszNzddOwor
c3RhdGljIHVuc2lnbmVkIGNoYXIgY2xhc3NBcnJheVszNzddOwogCi0vLyBDb21wdXRlIGluZGV4
IG9mIHRoZSBjbGFzc19hcnJheVtdIGVudHJ5IGZvciBhIGdpdmVuIHNpemUKLXN0YXRpYyBpbmxp
bmUgaW50IENsYXNzSW5kZXgoc2l6ZV90IHMpIHsKLSAgY29uc3QgaW50IGkgPSAocyA+IGtNYXhT
bWFsbFNpemUpOwotICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PigocyArIGFkZF9hbW91bnRbaV0p
ID4+IHNoaWZ0X2Ftb3VudFtpXSk7CisvLyBDb21wdXRlIGluZGV4IG9mIHRoZSBjbGFzc0FycmF5
W10gZW50cnkgZm9yIGEgZ2l2ZW4gc2l6ZQorc3RhdGljIGlubGluZSBpbnQgQ2xhc3NJbmRleChz
aXplX3QgcykKK3sKKyAgICBjb25zdCBpbnQgaSA9IChzID4ga01heFNtYWxsU2l6ZSk7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PGludD4oKHMgKyBhZGRfYW1vdW50W2ldKSA+PiBzaGlmdF9hbW91
bnRbaV0pOwogfQogCiAvLyBNYXBwaW5nIGZyb20gc2l6ZSBjbGFzcyB0byBtYXggc2l6ZSBzdG9y
YWJsZSBpbiB0aGF0IGNsYXNzCi1zdGF0aWMgc2l6ZV90IGNsYXNzX3RvX3NpemVba051bUNsYXNz
ZXNdOworc3RhdGljIHNpemVfdCBjbGFzc1Rvc2l6ZVtrTnVtQ2xhc3Nlc107CiAKIC8vIE1hcHBp
bmcgZnJvbSBzaXplIGNsYXNzIHRvIG51bWJlciBvZiBwYWdlcyB0byBhbGxvY2F0ZSBhdCBhIHRp
bWUKIHN0YXRpYyBzaXplX3QgY2xhc3NfdG9fcGFnZXNba051bUNsYXNzZXNdOwogCi0vLyBUcmFu
c2ZlckNhY2hlIGlzIHVzZWQgdG8gY2FjaGUgdHJhbnNmZXJzIG9mIG51bV9vYmplY3RzX3RvX21v
dmVbc2l6ZV9jbGFzc10KKy8vIFRyYW5zZmVyQ2FjaGUgaXMgdXNlZCB0byBjYWNoZSB0cmFuc2Zl
cnMgb2YgbnVtT2JqZWN0c1RvTW92ZVtzaXplY2xhc3NdCiAvLyBiYWNrIGFuZCBmb3J0aCBiZXR3
ZWVuIHRocmVhZCBjYWNoZXMgYW5kIHRoZSBjZW50cmFsIGNhY2hlIGZvciBhIGdpdmVuIHNpemUK
IC8vIGNsYXNzLgogc3RydWN0IFRDRW50cnkgewotICB2b2lkICpoZWFkOyAgLy8gSGVhZCBvZiBj
aGFpbiBvZiBvYmplY3RzLgotICB2b2lkICp0YWlsOyAgLy8gVGFpbCBvZiBjaGFpbiBvZiBvYmpl
Y3RzLgorICAgIHZvaWQqIGhlYWQ7IC8vIEhlYWQgb2YgY2hhaW4gb2Ygb2JqZWN0cy4KKyAgICB2
b2lkKiB0YWlsOyAvLyBUYWlsIG9mIGNoYWluIG9mIG9iamVjdHMuCiB9OwogLy8gQSBjZW50cmFs
IGNhY2hlIGZyZWVsaXN0IGNhbiBoYXZlIGFueXdoZXJlIGZyb20gMCB0byBrTnVtVHJhbnNmZXJF
bnRyaWVzCi0vLyBzbG90cyB0byBwdXQgbGluayBsaXN0IGNoYWlucyBpbnRvLiAgVG8ga2VlcCBt
ZW1vcnkgdXNhZ2UgYm91bmRlZCB0aGUgdG90YWwKLS8vIG51bWJlciBvZiBUQ0VudHJpZXMgYWNy
b3NzIHNpemUgY2xhc3NlcyBpcyBmaXhlZC4gIEN1cnJlbnRseSBlYWNoIHNpemUKKy8vIHNsb3Rz
IHRvIHB1dCBsaW5rIGxpc3QgY2hhaW5zIGludG8uIFRvIGtlZXAgbWVtb3J5IHVzYWdlIGJvdW5k
ZWQgdGhlIHRvdGFsCisvLyBudW1iZXIgb2YgVENFbnRyaWVzIGFjcm9zcyBzaXplIGNsYXNzZXMg
aXMgZml4ZWQuIEN1cnJlbnRseSBlYWNoIHNpemUKIC8vIGNsYXNzIGlzIGluaXRpYWxseSBnaXZl
biBvbmUgVENFbnRyeSB3aGljaCBhbHNvIG1lYW5zIHRoYXQgdGhlIG1heGltdW0gYW55CiAvLyBv
bmUgY2xhc3MgY2FuIGhhdmUgaXMga051bUNsYXNzZXMuCiBzdGF0aWMgY29uc3QgaW50IGtOdW1U
cmFuc2ZlckVudHJpZXMgPSBrTnVtQ2xhc3NlczsKQEAgLTc1NiwzMTIgKzc1MSwzMjggQEAgc3Rh
dGljIGlubGluZSBpbnQgTGdGbG9vcihzaXplX3QgbikgewogLy8gU29tZSB2ZXJ5IGJhc2ljIGxp
bmtlZCBsaXN0IGZ1bmN0aW9ucyBmb3IgZGVhbGluZyB3aXRoIHVzaW5nIHZvaWQgKiBhcwogLy8g
c3RvcmFnZS4KIAotc3RhdGljIGlubGluZSB2b2lkICpTTExfTmV4dCh2b2lkICp0KSB7Ci0gIHJl
dHVybiAqKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPih0KSk7CitzdGF0aWMgaW5saW5lIHZvaWQg
KlNMTF9OZXh0KHZvaWQgKnQpCit7CisgICAgcmV0dXJuICoocmVpbnRlcnByZXRfY2FzdDx2b2lk
Kio+KHQpKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIFNMTF9TZXROZXh0KHZvaWQgKnQsIHZv
aWQgKm4pIHsKLSAgKihyZWludGVycHJldF9jYXN0PHZvaWQqKj4odCkpID0gbjsKK3N0YXRpYyBp
bmxpbmUgdm9pZCBTTExTZXROZXh0KHZvaWQgKnQsIHZvaWQgKm4pCit7CisgICAgKihyZWludGVy
cHJldF9jYXN0PHZvaWQqKj4odCkpID0gbjsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIFNMTF9Q
dXNoKHZvaWQgKipsaXN0LCB2b2lkICplbGVtZW50KSB7Ci0gIFNMTF9TZXROZXh0KGVsZW1lbnQs
ICpsaXN0KTsKLSAgKmxpc3QgPSBlbGVtZW50Oworc3RhdGljIGlubGluZSB2b2lkIFNMTFB1c2go
dm9pZCAqKmxpc3QsIHZvaWQgKmVsZW1lbnQpCit7CisgICAgU0xMU2V0TmV4dChlbGVtZW50LCAq
bGlzdCk7CisgICAgKmxpc3QgPSBlbGVtZW50OwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgKlNM
TF9Qb3Aodm9pZCAqKmxpc3QpIHsKLSAgdm9pZCAqcmVzdWx0ID0gKmxpc3Q7Ci0gICpsaXN0ID0g
U0xMX05leHQoKmxpc3QpOwotICByZXR1cm4gcmVzdWx0Oworc3RhdGljIGlubGluZSB2b2lkICpT
TExQb3Aodm9pZCAqKmxpc3QpCit7CisgICAgdm9pZCogcmVzdWx0ID0gKmxpc3Q7CisgICAgKmxp
c3QgPSBTTExfTmV4dCgqbGlzdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCi0vLyBSZW1v
dmUgTiBlbGVtZW50cyBmcm9tIGEgbGlua2VkIGxpc3QgdG8gd2hpY2ggaGVhZCBwb2ludHMuICBo
ZWFkIHdpbGwgYmUKLS8vIG1vZGlmaWVkIHRvIHBvaW50IHRvIHRoZSBuZXcgaGVhZC4gIHN0YXJ0
IGFuZCBlbmQgd2lsbCBwb2ludCB0byB0aGUgZmlyc3QKLS8vIGFuZCBsYXN0IG5vZGVzIG9mIHRo
ZSByYW5nZS4gIE5vdGUgdGhhdCBlbmQgd2lsbCBwb2ludCB0byBOVUxMIGFmdGVyIHRoaXMKKy8v
IFJlbW92ZSBOIGVsZW1lbnRzIGZyb20gYSBsaW5rZWQgbGlzdCB0byB3aGljaCBoZWFkIHBvaW50
cy4gaGVhZCB3aWxsIGJlCisvLyBtb2RpZmllZCB0byBwb2ludCB0byB0aGUgbmV3IGhlYWQuIHN0
YXJ0IGFuZCBlbmQgd2lsbCBwb2ludCB0byB0aGUgZmlyc3QKKy8vIGFuZCBsYXN0IG5vZGVzIG9m
IHRoZSByYW5nZS4gTm90ZSB0aGF0IGVuZCB3aWxsIHBvaW50IHRvIDAgYWZ0ZXIgdGhpcwogLy8g
ZnVuY3Rpb24gaXMgY2FsbGVkLgotc3RhdGljIGlubGluZSB2b2lkIFNMTF9Qb3BSYW5nZSh2b2lk
ICoqaGVhZCwgaW50IE4sIHZvaWQgKipzdGFydCwgdm9pZCAqKmVuZCkgewotICBpZiAoTiA9PSAw
KSB7Ci0gICAgKnN0YXJ0ID0gTlVMTDsKLSAgICAqZW5kID0gTlVMTDsKLSAgICByZXR1cm47Ci0g
IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBTTExQb3BSYW5nZSh2b2lkICoqaGVhZCwgaW50IE4sIHZv
aWQgKipzdGFydCwgdm9pZCAqKmVuZCkKK3sKKyAgICBpZiAoIU4pIHsKKyAgICAgICAgKnN0YXJ0
ID0gMDsKKyAgICAgICAgKmVuZCA9IDA7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgdm9p
ZCAqdG1wID0gKmhlYWQ7Ci0gIGZvciAoaW50IGkgPSAxOyBpIDwgTjsgKytpKSB7Ci0gICAgdG1w
ID0gU0xMX05leHQodG1wKTsKLSAgfQorICAgIHZvaWQqIHRtcCA9ICpoZWFkOworICAgIGZvciAo
aW50IGkgPSAxOyBpIDwgTjsgKytpKQorICAgICAgICB0bXAgPSBTTExfTmV4dCh0bXApOwogCi0g
ICpzdGFydCA9ICpoZWFkOwotICAqZW5kID0gdG1wOwotICAqaGVhZCA9IFNMTF9OZXh0KHRtcCk7
Ci0gIC8vIFVubGluayByYW5nZSBmcm9tIGxpc3QuCi0gIFNMTF9TZXROZXh0KHRtcCwgTlVMTCk7
Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBTTExfUHVzaFJhbmdlKHZvaWQgKipoZWFkLCB2b2lk
ICpzdGFydCwgdm9pZCAqZW5kKSB7Ci0gIGlmICghc3RhcnQpIHJldHVybjsKLSAgU0xMX1NldE5l
eHQoZW5kLCAqaGVhZCk7Ci0gICpoZWFkID0gc3RhcnQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc2l6
ZV90IFNMTF9TaXplKHZvaWQgKmhlYWQpIHsKLSAgaW50IGNvdW50ID0gMDsKLSAgd2hpbGUgKGhl
YWQpIHsKLSAgICBjb3VudCsrOwotICAgIGhlYWQgPSBTTExfTmV4dChoZWFkKTsKLSAgfQotICBy
ZXR1cm4gY291bnQ7CisgICAgKnN0YXJ0ID0gKmhlYWQ7CisgICAgKmVuZCA9IHRtcDsKKyAgICAq
aGVhZCA9IFNMTF9OZXh0KHRtcCk7CisgICAgLy8gVW5saW5rIHJhbmdlIGZyb20gbGlzdC4KKyAg
ICBTTExTZXROZXh0KHRtcCwgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBTTExQdXNoUmFu
Z2Uodm9pZCAqKmhlYWQsIHZvaWQgKnN0YXJ0LCB2b2lkICplbmQpCit7CisgICAgaWYgKCFzdGFy
dCkKKyAgICAgICAgcmV0dXJuOworICAgIFNMTFNldE5leHQoZW5kLCAqaGVhZCk7CisgICAgKmhl
YWQgPSBzdGFydDsKK30KKworc3RhdGljIGlubGluZSBzaXplX3QgU0xMU2l6ZSh2b2lkICpoZWFk
KQoreworICAgIGludCBjb3VudCA9IDA7CisgICAgd2hpbGUgKGhlYWQpIHsKKyAgICAgICAgY291
bnQrKzsKKyAgICAgICAgaGVhZCA9IFNMTF9OZXh0KGhlYWQpOworICAgIH0KKyAgICByZXR1cm4g
Y291bnQ7CiB9CiAKIC8vIFNldHVwIGhlbHBlciBmdW5jdGlvbnMuCiAKLXN0YXRpYyBBTFdBWVNf
SU5MSU5FIHNpemVfdCBTaXplQ2xhc3Moc2l6ZV90IHNpemUpIHsKLSAgcmV0dXJuIGNsYXNzX2Fy
cmF5W0NsYXNzSW5kZXgoc2l6ZSldOworc3RhdGljIEFMV0FZU19JTkxJTkUgc2l6ZV90IFNpemVD
bGFzcyhzaXplX3Qgc2l6ZSkKK3sKKyAgICByZXR1cm4gY2xhc3NBcnJheVtDbGFzc0luZGV4KHNp
emUpXTsKIH0KIAogLy8gR2V0IHRoZSBieXRlLXNpemUgZm9yIGEgc3BlY2lmaWVkIGNsYXNzCi1z
dGF0aWMgQUxXQVlTX0lOTElORSBzaXplX3QgQnl0ZVNpemVGb3JDbGFzcyhzaXplX3QgY2wpIHsK
LSAgcmV0dXJuIGNsYXNzX3RvX3NpemVbY2xdOworc3RhdGljIEFMV0FZU19JTkxJTkUgc2l6ZV90
IEJ5dGVTaXplRm9yQ2xhc3Moc2l6ZV90IGNsKQoreworICAgIHJldHVybiBjbGFzc1Rvc2l6ZVtj
bF07CiB9Ci1zdGF0aWMgaW50IE51bU1vdmVTaXplKHNpemVfdCBzaXplKSB7Ci0gIGlmIChzaXpl
ID09IDApIHJldHVybiAwOwotICAvLyBVc2UgYXBwcm94IDY0ayB0cmFuc2ZlcnMgYmV0d2VlbiB0
aHJlYWQgYW5kIGNlbnRyYWwgY2FjaGVzLgotICBpbnQgbnVtID0gc3RhdGljX2Nhc3Q8aW50Pig2
NC4wICogMTAyNC4wIC8gc2l6ZSk7Ci0gIGlmIChudW0gPCAyKSBudW0gPSAyOwotICAvLyBDbGFt
cCB3ZWxsIGJlbG93IGtNYXhGcmVlTGlzdExlbmd0aCB0byBhdm9pZCBwaW5nIHBvbmcgYmV0d2Vl
biBjZW50cmFsCi0gIC8vIGFuZCB0aHJlYWQgY2FjaGVzLgotICBpZiAobnVtID4gc3RhdGljX2Nh
c3Q8aW50PigwLjggKiBrTWF4RnJlZUxpc3RMZW5ndGgpKQotICAgIG51bSA9IHN0YXRpY19jYXN0
PGludD4oMC44ICoga01heEZyZWVMaXN0TGVuZ3RoKTsKLQotICAvLyBBbHNvLCBhdm9pZCBicmlu
Z2luZyBpbiB0b28gbWFueSBvYmplY3RzIGludG8gc21hbGwgb2JqZWN0IGZyZWUKLSAgLy8gbGlz
dHMuICBUaGVyZSBhcmUgbG90cyBvZiBzdWNoIGxpc3RzLCBhbmQgaWYgd2UgYWxsb3cgZWFjaCBv
bmUgdG8KLSAgLy8gZmV0Y2ggdG9vIG1hbnkgYXQgYSB0aW1lLCB3ZSBlbmQgdXAgaGF2aW5nIHRv
IHNjYXZlbmdlIHRvbyBvZnRlbgotICAvLyAoZXNwZWNpYWxseSB3aGVuIHRoZXJlIGFyZSBsb3Rz
IG9mIHRocmVhZHMgYW5kIGVhY2ggdGhyZWFkIGdldHMgYQotICAvLyBzbWFsbCBhbGxvd2FuY2Ug
Zm9yIGl0cyB0aHJlYWQgY2FjaGUpLgotICAvLwotICAvLyBUT0RPOiBNYWtlIHRocmVhZCBjYWNo
ZSBmcmVlIGxpc3Qgc2l6ZXMgZHluYW1pYyBzbyB0aGF0IHdlIGRvIG5vdAotICAvLyBoYXZlIHRv
IGVxdWFsbHkgZGl2aWRlIGEgZml4ZWQgcmVzb3VyY2UgYW1vbmdzdCBsb3RzIG9mIHRocmVhZHMu
Ci0gIGlmIChudW0gPiAzMikgbnVtID0gMzI7CitzdGF0aWMgaW50IE51bU1vdmVTaXplKHNpemVf
dCBzaXplKQoreworICAgIGlmICghc2l6ZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgLy8gVXNl
IGFwcHJveCA2NGsgdHJhbnNmZXJzIGJldHdlZW4gdGhyZWFkIGFuZCBjZW50cmFsIGNhY2hlcy4K
KyAgICBpbnQgbnVtID0gc3RhdGljX2Nhc3Q8aW50Pig2NC4wICogMTAyNC4wIC8gc2l6ZSk7Cisg
ICAgaWYgKG51bSA8IDIpCisgICAgICAgIG51bSA9IDI7CisgICAgLy8gQ2xhbXAgd2VsbCBiZWxv
dyBrTWF4RnJlZUxpc3RMZW5ndGggdG8gYXZvaWQgcGluZyBwb25nIGJldHdlZW4gY2VudHJhbAor
ICAgIC8vIGFuZCB0aHJlYWQgY2FjaGVzLgorICAgIGlmIChudW0gPiBzdGF0aWNfY2FzdDxpbnQ+
KDAuOCAqIGtNYXhGcmVlTGlzdExlbmd0aCkpCisgICAgICAgIG51bSA9IHN0YXRpY19jYXN0PGlu
dD4oMC44ICoga01heEZyZWVMaXN0TGVuZ3RoKTsKKworICAgIC8vIEFsc28sIGF2b2lkIGJyaW5n
aW5nIGluIHRvbyBtYW55IG9iamVjdHMgaW50byBzbWFsbCBvYmplY3QgZnJlZQorICAgIC8vIGxp
c3RzLiBUaGVyZSBhcmUgbG90cyBvZiBzdWNoIGxpc3RzLCBhbmQgaWYgd2UgYWxsb3cgZWFjaCBv
bmUgdG8KKyAgICAvLyBmZXRjaCB0b28gbWFueSBhdCBhIHRpbWUsIHdlIGVuZCB1cCBoYXZpbmcg
dG8gc2NhdmVuZ2UgdG9vIG9mdGVuCisgICAgLy8gKGVzcGVjaWFsbHkgd2hlbiB0aGVyZSBhcmUg
bG90cyBvZiB0aHJlYWRzIGFuZCBlYWNoIHRocmVhZCBnZXRzIGEKKyAgICAvLyBzbWFsbCBhbGxv
d2FuY2UgZm9yIGl0cyB0aHJlYWQgY2FjaGUpLgorICAgIC8vCisgICAgLy8gVE9ETzogTWFrZSB0
aHJlYWQgY2FjaGUgZnJlZSBsaXN0IHNpemVzIGR5bmFtaWMgc28gdGhhdCB3ZSBkbyBub3QKKyAg
ICAvLyBoYXZlIHRvIGVxdWFsbHkgZGl2aWRlIGEgZml4ZWQgcmVzb3VyY2UgYW1vbmdzdCBsb3Rz
IG9mIHRocmVhZHMuCisgICAgaWYgKG51bSA+IDMyKQorICAgICAgICBudW0gPSAzMjsKIAotICBy
ZXR1cm4gbnVtOworICAgIHJldHVybiBudW07CiB9CiAKIC8vIEluaXRpYWxpemUgdGhlIG1hcHBp
bmcgYXJyYXlzCi1zdGF0aWMgdm9pZCBJbml0U2l6ZUNsYXNzZXMoKSB7Ci0gIC8vIERvIHNvbWUg
c2FuaXR5IGNoZWNraW5nIG9uIGFkZF9hbW91bnRbXS9zaGlmdF9hbW91bnRbXS9jbGFzc19hcnJh
eVtdCi0gIGlmIChDbGFzc0luZGV4KDApIDwgMCkgewotICAgIE1FU1NBR0UoIkludmFsaWQgY2xh
c3MgaW5kZXggJWQgZm9yIHNpemUgMFxuIiwgQ2xhc3NJbmRleCgwKSk7Ci0gICAgQ1JBU0goKTsK
LSAgfQotICBpZiAoc3RhdGljX2Nhc3Q8c2l6ZV90PihDbGFzc0luZGV4KGtNYXhTaXplKSkgPj0g
c2l6ZW9mKGNsYXNzX2FycmF5KSkgewotICAgIE1FU1NBR0UoIkludmFsaWQgY2xhc3MgaW5kZXgg
JWQgZm9yIGtNYXhTaXplXG4iLCBDbGFzc0luZGV4KGtNYXhTaXplKSk7Ci0gICAgQ1JBU0goKTsK
LSAgfQotCi0gIC8vIENvbXB1dGUgdGhlIHNpemUgY2xhc3NlcyB3ZSB3YW50IHRvIHVzZQotICBz
aXplX3Qgc2MgPSAxOyAgIC8vIE5leHQgc2l6ZSBjbGFzcyB0byBhc3NpZ24KLSAgdW5zaWduZWQg
Y2hhciBhbGlnbnNoaWZ0ID0ga0FsaWduU2hpZnQ7Ci0gIGludCBsYXN0X2xnID0gLTE7Ci0gIGZv
ciAoc2l6ZV90IHNpemUgPSBrQWxpZ25tZW50OyBzaXplIDw9IGtNYXhTaXplOyBzaXplICs9ICgx
IDw8IGFsaWduc2hpZnQpKSB7Ci0gICAgaW50IGxnID0gTGdGbG9vcihzaXplKTsKLSAgICBpZiAo
bGcgPiBsYXN0X2xnKSB7Ci0gICAgICAvLyBJbmNyZWFzZSBhbGlnbm1lbnQgZXZlcnkgc28gb2Z0
ZW4uCi0gICAgICAvLwotICAgICAgLy8gU2luY2Ugd2UgZG91YmxlIHRoZSBhbGlnbm1lbnQgZXZl
cnkgdGltZSBzaXplIGRvdWJsZXMgYW5kCi0gICAgICAvLyBzaXplID49IDEyOCwgdGhpcyBtZWFu
cyB0aGF0IHNwYWNlIHdhc3RlZCBkdWUgdG8gYWxpZ25tZW50IGlzCi0gICAgICAvLyBhdCBtb3N0
IDE2LzEyOCBpLmUuLCAxMi41JS4gIFBsdXMgd2UgY2FwIHRoZSBhbGlnbm1lbnQgYXQgMjU2Ci0g
ICAgICAvLyBieXRlcywgc28gdGhlIHNwYWNlIHdhc3RlZCBhcyBhIHBlcmNlbnRhZ2Ugc3RhcnRz
IGZhbGxpbmcgZm9yCi0gICAgICAvLyBzaXplcyA+IDJLLgotICAgICAgaWYgKChsZyA+PSA3KSAm
JiAoYWxpZ25zaGlmdCA8IDgpKSB7Ci0gICAgICAgIGFsaWduc2hpZnQrKzsKLSAgICAgIH0KLSAg
ICAgIGxhc3RfbGcgPSBsZzsKK3N0YXRpYyB2b2lkIEluaXRTaXplQ2xhc3NlcygpCit7CisgICAg
Ly8gRG8gc29tZSBzYW5pdHkgY2hlY2tpbmcgb24gYWRkX2Ftb3VudFtdL3NoaWZ0X2Ftb3VudFtd
L2NsYXNzQXJyYXlbXQorICAgIGlmIChDbGFzc0luZGV4KDApIDwgMCkgeworICAgICAgICBNRVNT
QUdFKCJJbnZhbGlkIGNsYXNzIGluZGV4ICVkIGZvciBzaXplIDBcbiIsIENsYXNzSW5kZXgoMCkp
OworICAgICAgICBDUkFTSCgpOwogICAgIH0KLQotICAgIC8vIEFsbG9jYXRlIGVub3VnaCBwYWdl
cyBzbyBsZWZ0b3ZlciBpcyBsZXNzIHRoYW4gMS84IG9mIHRvdGFsLgotICAgIC8vIFRoaXMgYm91
bmRzIHdhc3RlZCBzcGFjZSB0byBhdCBtb3N0IDEyLjUlLgotICAgIHNpemVfdCBwc2l6ZSA9IGtQ
YWdlU2l6ZTsKLSAgICB3aGlsZSAoKHBzaXplICUgc2l6ZSkgPiAocHNpemUgPj4gMykpIHsKLSAg
ICAgIHBzaXplICs9IGtQYWdlU2l6ZTsKLSAgICB9Ci0gICAgY29uc3Qgc2l6ZV90IG15X3BhZ2Vz
ID0gcHNpemUgPj4ga1BhZ2VTaGlmdDsKLQotICAgIGlmIChzYyA+IDEgJiYgbXlfcGFnZXMgPT0g
Y2xhc3NfdG9fcGFnZXNbc2MtMV0pIHsKLSAgICAgIC8vIFNlZSBpZiB3ZSBjYW4gbWVyZ2UgdGhp
cyBpbnRvIHRoZSBwcmV2aW91cyBjbGFzcyB3aXRob3V0Ci0gICAgICAvLyBpbmNyZWFzaW5nIHRo
ZSBmcmFnbWVudGF0aW9uIG9mIHRoZSBwcmV2aW91cyBjbGFzcy4KLSAgICAgIGNvbnN0IHNpemVf
dCBteV9vYmplY3RzID0gKG15X3BhZ2VzIDw8IGtQYWdlU2hpZnQpIC8gc2l6ZTsKLSAgICAgIGNv
bnN0IHNpemVfdCBwcmV2X29iamVjdHMgPSAoY2xhc3NfdG9fcGFnZXNbc2MtMV0gPDwga1BhZ2VT
aGlmdCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIGNsYXNzX3RvX3NpemVb
c2MtMV07Ci0gICAgICBpZiAobXlfb2JqZWN0cyA9PSBwcmV2X29iamVjdHMpIHsKLSAgICAgICAg
Ly8gQWRqdXN0IGxhc3QgY2xhc3MgdG8gaW5jbHVkZSB0aGlzIHNpemUKLSAgICAgICAgY2xhc3Nf
dG9fc2l6ZVtzYy0xXSA9IHNpemU7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfQorICAgIGlm
IChzdGF0aWNfY2FzdDxzaXplX3Q+KENsYXNzSW5kZXgoa01heFNpemUpKSA+PSBzaXplb2YoY2xh
c3NBcnJheSkpIHsKKyAgICAgICAgTUVTU0FHRSgiSW52YWxpZCBjbGFzcyBpbmRleCAlZCBmb3Ig
a01heFNpemVcbiIsIENsYXNzSW5kZXgoa01heFNpemUpKTsKKyAgICAgICAgQ1JBU0goKTsKICAg
ICB9CiAKLSAgICAvLyBBZGQgbmV3IGNsYXNzCi0gICAgY2xhc3NfdG9fcGFnZXNbc2NdID0gbXlf
cGFnZXM7Ci0gICAgY2xhc3NfdG9fc2l6ZVtzY10gPSBzaXplOwotICAgIHNjKys7Ci0gIH0KLSAg
aWYgKHNjICE9IGtOdW1DbGFzc2VzKSB7Ci0gICAgTUVTU0FHRSgid3JvbmcgbnVtYmVyIG9mIHNp
emUgY2xhc3NlczogZm91bmQgJSIgUFJJdVMgIiBpbnN0ZWFkIG9mICVkXG4iLAorICAgIC8vIENv
bXB1dGUgdGhlIHNpemUgY2xhc3NlcyB3ZSB3YW50IHRvIHVzZQorICAgIHNpemVfdCBzYyA9IDE7
IC8vIE5leHQgc2l6ZSBjbGFzcyB0byBhc3NpZ24KKyAgICB1bnNpZ25lZCBjaGFyIGFsaWduc2hp
ZnQgPSBrQWxpZ25TaGlmdDsKKyAgICBpbnQgbGFzdExnID0gLTE7CisgICAgZm9yIChzaXplX3Qg
c2l6ZSA9IGtBbGlnbm1lbnQ7IHNpemUgPD0ga01heFNpemU7IHNpemUgKz0gKDEgPDwgYWxpZ25z
aGlmdCkpIHsKKyAgICAgICAgaW50IGxnID0gTGdGbG9vcihzaXplKTsKKyAgICAgICAgaWYgKGxn
ID4gbGFzdExnKSB7CisgICAgICAgICAgICAvLyBJbmNyZWFzZSBhbGlnbm1lbnQgZXZlcnkgc28g
b2Z0ZW4uCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gU2luY2Ugd2UgZG91YmxlIHRo
ZSBhbGlnbm1lbnQgZXZlcnkgdGltZSBzaXplIGRvdWJsZXMgYW5kCisgICAgICAgICAgICAvLyBz
aXplID49IDEyOCwgdGhpcyBtZWFucyB0aGF0IHNwYWNlIHdhc3RlZCBkdWUgdG8gYWxpZ25tZW50
IGlzCisgICAgICAgICAgICAvLyBhdCBtb3N0IDE2LzEyOCBpLmUuLCAxMi41JS4gUGx1cyB3ZSBj
YXAgdGhlIGFsaWdubWVudCBhdCAyNTYKKyAgICAgICAgICAgIC8vIGJ5dGVzLCBzbyB0aGUgc3Bh
Y2Ugd2FzdGVkIGFzIGEgcGVyY2VudGFnZSBzdGFydHMgZmFsbGluZyBmb3IKKyAgICAgICAgICAg
IC8vIHNpemVzID4gMksuCisgICAgICAgICAgICBpZiAoKGxnID49IDcpICYmIChhbGlnbnNoaWZ0
IDwgOCkpCisgICAgICAgICAgICAgICAgYWxpZ25zaGlmdCsrOworICAgICAgICAgICAgbGFzdExn
ID0gbGc7CisgICAgICAgIH0KKworICAgICAgICAvLyBBbGxvY2F0ZSBlbm91Z2ggcGFnZXMgc28g
bGVmdG92ZXIgaXMgbGVzcyB0aGFuIDEvOCBvZiB0b3RhbC4KKyAgICAgICAgLy8gVGhpcyBib3Vu
ZHMgd2FzdGVkIHNwYWNlIHRvIGF0IG1vc3QgMTIuNSUuCisgICAgICAgIHNpemVfdCBwc2l6ZSA9
IGtQYWdlU2l6ZTsKKyAgICAgICAgd2hpbGUgKChwc2l6ZSAlIHNpemUpID4gKHBzaXplID4+IDMp
KQorICAgICAgICAgICAgcHNpemUgKz0ga1BhZ2VTaXplOworICAgICAgICBjb25zdCBzaXplX3Qg
bXlQYWdlcyA9IHBzaXplID4+IGtQYWdlU2hpZnQ7CisKKyAgICAgICAgaWYgKHNjID4gMSAmJiBt
eVBhZ2VzID09IGNsYXNzX3RvX3BhZ2VzW3NjLTFdKSB7CisgICAgICAgICAgICAvLyBTZWUgaWYg
d2UgY2FuIG1lcmdlIHRoaXMgaW50byB0aGUgcHJldmlvdXMgY2xhc3Mgd2l0aG91dAorICAgICAg
ICAgICAgLy8gaW5jcmVhc2luZyB0aGUgZnJhZ21lbnRhdGlvbiBvZiB0aGUgcHJldmlvdXMgY2xh
c3MuCisgICAgICAgICAgICBjb25zdCBzaXplX3QgbXlPYmplY3RzID0gKG15UGFnZXMgPDwga1Bh
Z2VTaGlmdCkgLyBzaXplOworICAgICAgICAgICAgY29uc3Qgc2l6ZV90IHByZXZvYmplY3RzID0g
KGNsYXNzX3RvX3BhZ2VzW3NjLTFdIDw8IGtQYWdlU2hpZnQpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLyBjbGFzc1Rvc2l6ZVtzYy0xXTsKKyAgICAgICAgICAgIGlm
IChteU9iamVjdHMgPT0gcHJldm9iamVjdHMpIHsKKyAgICAgICAgICAgICAgICAvLyBBZGp1c3Qg
bGFzdCBjbGFzcyB0byBpbmNsdWRlIHRoaXMgc2l6ZQorICAgICAgICAgICAgICAgIGNsYXNzVG9z
aXplW3NjLTFdID0gc2l6ZTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIEFkZCBuZXcgY2xhc3MKKyAgICAgICAgY2xhc3Nf
dG9fcGFnZXNbc2NdID0gbXlQYWdlczsKKyAgICAgICAgY2xhc3NUb3NpemVbc2NdID0gc2l6ZTsK
KyAgICAgICAgc2MrKzsKKyAgICB9CisgICAgaWYgKHNjICE9IGtOdW1DbGFzc2VzKSB7CisgICAg
ICAgIE1FU1NBR0UoIndyb25nIG51bWJlciBvZiBzaXplIGNsYXNzZXM6IGZvdW5kICUiIFBSSXVT
ICIgaW5zdGVhZCBvZiAlZFxuIiwKICAgICAgICAgICAgIHNjLCBpbnQoa051bUNsYXNzZXMpKTsK
LSAgICBDUkFTSCgpOwotICB9CisgICAgICAgIENSQVNIKCk7CisgICAgfQogCi0gIC8vIEluaXRp
YWxpemUgdGhlIG1hcHBpbmcgYXJyYXlzCi0gIGludCBuZXh0X3NpemUgPSAwOwotICBmb3IgKHVu
c2lnbmVkIGNoYXIgYyA9IDE7IGMgPCBrTnVtQ2xhc3NlczsgYysrKSB7Ci0gICAgY29uc3Qgc2l6
ZV90IG1heF9zaXplX2luX2NsYXNzID0gY2xhc3NfdG9fc2l6ZVtjXTsKLSAgICBmb3IgKHNpemVf
dCBzID0gbmV4dF9zaXplOyBzIDw9IG1heF9zaXplX2luX2NsYXNzOyBzICs9IGtBbGlnbm1lbnQp
IHsKLSAgICAgIGNsYXNzX2FycmF5W0NsYXNzSW5kZXgocyldID0gYzsKKyAgICAvLyBJbml0aWFs
aXplIHRoZSBtYXBwaW5nIGFycmF5cworICAgIGludCBuZXh0c2l6ZSA9IDA7CisgICAgZm9yICh1
bnNpZ25lZCBjaGFyIGMgPSAxOyBjIDwga051bUNsYXNzZXM7IGMrKykgeworICAgICAgICBjb25z
dCBzaXplX3QgbWF4U2l6ZWluQ2xhc3MgPSBjbGFzc1Rvc2l6ZVtjXTsKKyAgICAgICAgZm9yIChz
aXplX3QgcyA9IG5leHRzaXplOyBzIDw9IG1heFNpemVpbkNsYXNzOyBzICs9IGtBbGlnbm1lbnQp
CisgICAgICAgICAgICBjbGFzc0FycmF5W0NsYXNzSW5kZXgocyldID0gYzsKKyAgICAgICAgbmV4
dHNpemUgPSBzdGF0aWNfY2FzdDxpbnQ+KG1heFNpemVpbkNsYXNzICsga0FsaWdubWVudCk7CiAg
ICAgfQotICAgIG5leHRfc2l6ZSA9IHN0YXRpY19jYXN0PGludD4obWF4X3NpemVfaW5fY2xhc3Mg
KyBrQWxpZ25tZW50KTsKLSAgfQogCi0gIC8vIERvdWJsZS1jaGVjayBzaXplcyBqdXN0IHRvIGJl
IHNhZmUKLSAgZm9yIChzaXplX3Qgc2l6ZSA9IDA7IHNpemUgPD0ga01heFNpemU7IHNpemUrKykg
ewotICAgIGNvbnN0IHNpemVfdCBzYyA9IFNpemVDbGFzcyhzaXplKTsKLSAgICBpZiAoc2MgPT0g
MCkgewotICAgICAgTUVTU0FHRSgiQmFkIHNpemUgY2xhc3MgJSIgUFJJdVMgIiBmb3IgJSIgUFJJ
dVMgIlxuIiwgc2MsIHNpemUpOwotICAgICAgQ1JBU0goKTsKLSAgICB9Ci0gICAgaWYgKHNjID4g
MSAmJiBzaXplIDw9IGNsYXNzX3RvX3NpemVbc2MtMV0pIHsKLSAgICAgIE1FU1NBR0UoIkFsbG9j
YXRpbmcgdW5uZWNlc3NhcmlseSBsYXJnZSBjbGFzcyAlIiBQUkl1UyAiIGZvciAlIiBQUkl1Uwot
ICAgICAgICAgICAgICAiXG4iLCBzYywgc2l6ZSk7Ci0gICAgICBDUkFTSCgpOwotICAgIH0KLSAg
ICBpZiAoc2MgPj0ga051bUNsYXNzZXMpIHsKLSAgICAgIE1FU1NBR0UoIkJhZCBzaXplIGNsYXNz
ICUiIFBSSXVTICIgZm9yICUiIFBSSXVTICJcbiIsIHNjLCBzaXplKTsKLSAgICAgIENSQVNIKCk7
Ci0gICAgfQotICAgIGNvbnN0IHNpemVfdCBzID0gY2xhc3NfdG9fc2l6ZVtzY107Ci0gICAgaWYg
KHNpemUgPiBzKSB7Ci0gICAgIE1FU1NBR0UoIkJhZCBzaXplICUiIFBSSXVTICIgZm9yICUiIFBS
SXVTICIgKHNjID0gJSIgUFJJdVMgIilcbiIsIHMsIHNpemUsIHNjKTsKLSAgICAgIENSQVNIKCk7
Ci0gICAgfQotICAgIGlmIChzID09IDApIHsKLSAgICAgIE1FU1NBR0UoIkJhZCBzaXplICUiIFBS
SXVTICIgZm9yICUiIFBSSXVTICIgKHNjID0gJSIgUFJJdVMgIilcbiIsIHMsIHNpemUsIHNjKTsK
LSAgICAgIENSQVNIKCk7CisgICAgLy8gRG91YmxlLWNoZWNrIHNpemVzIGp1c3QgdG8gYmUgc2Fm
ZQorICAgIGZvciAoc2l6ZV90IHNpemUgPSAwOyBzaXplIDw9IGtNYXhTaXplOyBzaXplKyspIHsK
KyAgICAgICAgY29uc3Qgc2l6ZV90IHNjID0gU2l6ZUNsYXNzKHNpemUpOworICAgICAgICBpZiAo
IXNjKSB7CisgICAgICAgICAgICBNRVNTQUdFKCJCYWQgc2l6ZSBjbGFzcyAlIiBQUkl1UyAiIGZv
ciAlIiBQUkl1UyAiXG4iLCBzYywgc2l6ZSk7CisgICAgICAgICAgICBDUkFTSCgpOworICAgICAg
ICB9CisgICAgICAgIGlmIChzYyA+IDEgJiYgc2l6ZSA8PSBjbGFzc1Rvc2l6ZVtzYy0xXSkgewor
ICAgICAgICAgICAgTUVTU0FHRSgiQWxsb2NhdGluZyB1bm5lY2Vzc2FyaWx5IGxhcmdlIGNsYXNz
ICUiIFBSSXVTICIgZm9yICUiIFBSSXVTCisgICAgICAgICAgICAgICAgICAgICJcbiIsIHNjLCBz
aXplKTsKKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNjID49
IGtOdW1DbGFzc2VzKSB7CisgICAgICAgICAgICBNRVNTQUdFKCJCYWQgc2l6ZSBjbGFzcyAlIiBQ
Ukl1UyAiIGZvciAlIiBQUkl1UyAiXG4iLCBzYywgc2l6ZSk7CisgICAgICAgICAgICBDUkFTSCgp
OworICAgICAgICB9CisgICAgICAgIGNvbnN0IHNpemVfdCBzID0gY2xhc3NUb3NpemVbc2NdOwor
ICAgICAgICBpZiAoc2l6ZSA+IHMpIHsKKyAgICAgICAgICAgIE1FU1NBR0UoIkJhZCBzaXplICUi
IFBSSXVTICIgZm9yICUiIFBSSXVTICIgKHNjID0gJSIgUFJJdVMgIilcbiIsIHMsIHNpemUsIHNj
KTsKKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFzKSB7Cisg
ICAgICAgICAgICBNRVNTQUdFKCJCYWQgc2l6ZSAlIiBQUkl1UyAiIGZvciAlIiBQUkl1UyAiIChz
YyA9ICUiIFBSSXVTICIpXG4iLCBzLCBzaXplLCBzYyk7CisgICAgICAgICAgICBDUkFTSCgpOwor
ICAgICAgICB9CiAgICAgfQotICB9CiAKLSAgLy8gSW5pdGlhbGl6ZSB0aGUgbnVtX29iamVjdHNf
dG9fbW92ZSBhcnJheS4KLSAgZm9yIChzaXplX3QgY2wgPSAxOyBjbCAgPCBrTnVtQ2xhc3Nlczsg
KytjbCkgewotICAgIG51bV9vYmplY3RzX3RvX21vdmVbY2xdID0gTnVtTW92ZVNpemUoQnl0ZVNp
emVGb3JDbGFzcyhjbCkpOwotICB9CisgICAgLy8gSW5pdGlhbGl6ZSB0aGUgbnVtT2JqZWN0c1Rv
TW92ZSBhcnJheS4KKyAgICBmb3IgKHNpemVfdCBjbCA9IDE7IGNsICA8IGtOdW1DbGFzc2VzOyAr
K2NsKQorICAgICAgICBudW1PYmplY3RzVG9Nb3ZlW2NsXSA9IE51bU1vdmVTaXplKEJ5dGVTaXpl
Rm9yQ2xhc3MoY2wpKTsKIAogI2lmbmRlZiBXVEZfQ0hBTkdFUwotICBpZiAoZmFsc2UpIHsKLSAg
ICAvLyBEdW1wIGNsYXNzIHNpemVzIGFuZCBtYXhpbXVtIGV4dGVybmFsIHdhc3RhZ2UgcGVyIHNp
emUgY2xhc3MKLSAgICBmb3IgKHNpemVfdCBjbCA9IDE7IGNsICA8IGtOdW1DbGFzc2VzOyArK2Ns
KSB7Ci0gICAgICBjb25zdCBpbnQgYWxsb2Nfc2l6ZSA9IGNsYXNzX3RvX3BhZ2VzW2NsXSA8PCBr
UGFnZVNoaWZ0OwotICAgICAgY29uc3QgaW50IGFsbG9jX29ianMgPSBhbGxvY19zaXplIC8gY2xh
c3NfdG9fc2l6ZVtjbF07Ci0gICAgICBjb25zdCBpbnQgbWluX3VzZWQgPSAoY2xhc3NfdG9fc2l6
ZVtjbC0xXSArIDEpICogYWxsb2Nfb2JqczsKLSAgICAgIGNvbnN0IGludCBtYXhfd2FzdGUgPSBh
bGxvY19zaXplIC0gbWluX3VzZWQ7Ci0gICAgICBNRVNTQUdFKCJTQyAlM2QgWyAlOGQgLi4gJThk
IF0gZnJvbSAlOGQgOyAlMi4wZiUlIG1heHdhc3RlXG4iLAotICAgICAgICAgICAgICBpbnQoY2wp
LAotICAgICAgICAgICAgICBpbnQoY2xhc3NfdG9fc2l6ZVtjbC0xXSArIDEpLAotICAgICAgICAg
ICAgICBpbnQoY2xhc3NfdG9fc2l6ZVtjbF0pLAotICAgICAgICAgICAgICBpbnQoY2xhc3NfdG9f
cGFnZXNbY2xdIDw8IGtQYWdlU2hpZnQpLAotICAgICAgICAgICAgICBtYXhfd2FzdGUgKiAxMDAu
MCAvIGFsbG9jX3NpemUKLSAgICAgICAgICAgICAgKTsKKyAgICBpZiAoZmFsc2UpIHsKKyAgICAg
ICAgLy8gRHVtcCBjbGFzcyBzaXplcyBhbmQgbWF4aW11bSBleHRlcm5hbCB3YXN0YWdlIHBlciBz
aXplIGNsYXNzCisgICAgICAgIGZvciAoc2l6ZV90IGNsID0gMTsgY2wgIDwga051bUNsYXNzZXM7
ICsrY2wpIHsKKyAgICAgICAgICAgIGNvbnN0IGludCBhbGxvY1NpemUgPSBjbGFzc190b19wYWdl
c1tjbF0gPDwga1BhZ2VTaGlmdDsKKyAgICAgICAgICAgIGNvbnN0IGludCBhbGxvY09ianMgPSBh
bGxvY1NpemUgLyBjbGFzc1Rvc2l6ZVtjbF07CisgICAgICAgICAgICBjb25zdCBpbnQgbWluVXNl
ZCA9IChjbGFzc1Rvc2l6ZVtjbC0xXSArIDEpICogYWxsb2NPYmpzOworICAgICAgICAgICAgY29u
c3QgaW50IG1heFdhc3RlID0gYWxsb2NTaXplIC0gbWluVXNlZDsKKyAgICAgICAgICAgIE1FU1NB
R0UoIlNDICUzZCBbICU4ZCAuLiAlOGQgXSBmcm9tICU4ZCA7ICUyLjBmJSUgbWF4d2FzdGVcbiIs
CisgICAgICAgICAgICAgICAgICAgIGludChjbCksCisgICAgICAgICAgICAgICAgICAgIGludChj
bGFzc1Rvc2l6ZVtjbC0xXSArIDEpLAorICAgICAgICAgICAgICAgICAgICBpbnQoY2xhc3NUb3Np
emVbY2xdKSwKKyAgICAgICAgICAgICAgICAgICAgaW50KGNsYXNzX3RvX3BhZ2VzW2NsXSA8PCBr
UGFnZVNoaWZ0KSwKKyAgICAgICAgICAgICAgICAgICAgbWF4V2FzdGUgKiAxMDAuMCAvIGFsbG9j
U2l6ZQorICAgICAgICAgICAgICAgICAgICApOworICAgICAgICB9CiAgICAgfQotICB9CiAjZW5k
aWYKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gU2ltcGxlIGFsbG9jYXRvciBmb3Igb2Jq
ZWN0cyBvZiBhIHNwZWNpZmllZCB0eXBlLiAgRXh0ZXJuYWwgbG9ja2luZworLy8gU2ltcGxlIGFs
bG9jYXRvciBmb3Igb2JqZWN0cyBvZiBhIHNwZWNpZmllZCB0eXBlLiBFeHRlcm5hbCBsb2NraW5n
CiAvLyBpcyByZXF1aXJlZCBiZWZvcmUgYWNjZXNzaW5nIG9uZSBvZiB0aGVzZSBvYmplY3RzLgog
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogCiAvLyBNZXRhZGF0YSBhbGxvY2F0b3IgLS0ga2VlcHMgc3Rh
dHMgYWJvdXQgaG93IG1hbnkgYnl0ZXMgYWxsb2NhdGVkCi1zdGF0aWMgdWludDY0X3QgbWV0YWRh
dGFfc3lzdGVtX2J5dGVzID0gMDsKLXN0YXRpYyB2b2lkKiBNZXRhRGF0YUFsbG9jKHNpemVfdCBi
eXRlcykgewotICB2b2lkKiByZXN1bHQgPSBUQ01hbGxvY19TeXN0ZW1BbGxvYyhieXRlcywgMCk7
Ci0gIGlmIChyZXN1bHQgIT0gTlVMTCkgewotICAgIG1ldGFkYXRhX3N5c3RlbV9ieXRlcyArPSBi
eXRlczsKLSAgfQotICByZXR1cm4gcmVzdWx0Oworc3RhdGljIHVpbnQ2NF90IG1ldGFkYXRhU3lz
dGVtQnl0ZXMgPSAwOworc3RhdGljIHZvaWQqIE1ldGFEYXRhQWxsb2Moc2l6ZV90IGJ5dGVzKQor
eworICAgIHZvaWQqIHJlc3VsdCA9IFRDTWFsbG9jX1N5c3RlbUFsbG9jKGJ5dGVzLCAwKTsKKyAg
ICBpZiAocmVzdWx0KSAKKyAgICAgICAgbWV0YWRhdGFTeXN0ZW1CeXRlcyArPSBieXRlczsKKyAg
ICByZXR1cm4gcmVzdWx0OwogfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgVD4KIGNsYXNzIFBhZ2VIZWFw
QWxsb2NhdG9yIHsKLSBwcml2YXRlOgotICAvLyBIb3cgbXVjaCB0byBhbGxvY2F0ZSBmcm9tIHN5
c3RlbSBhdCBhIHRpbWUKLSAgc3RhdGljIGNvbnN0IHNpemVfdCBrQWxsb2NJbmNyZW1lbnQgPSAz
MiA8PCAxMDsKK3ByaXZhdGU6CisgICAgLy8gSG93IG11Y2ggdG8gYWxsb2NhdGUgZnJvbSBzeXN0
ZW0gYXQgYSB0aW1lCisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBrQWxsb2NJbmNyZW1lbnQgPSAz
MiA8PCAxMDsKIAotICAvLyBBbGlnbmVkIHNpemUgb2YgVAotICBzdGF0aWMgY29uc3Qgc2l6ZV90
IGtBbGlnbmVkU2l6ZQotICA9ICgoKHNpemVvZihUKSArIGtBbGlnbm1lbnQgLSAxKSAvIGtBbGln
bm1lbnQpICoga0FsaWdubWVudCk7CisgICAgLy8gQWxpZ25lZCBzaXplIG9mIFQKKyAgICBzdGF0
aWMgY29uc3Qgc2l6ZV90IGtBbGlnbmVkU2l6ZQorICAgID0gKCgoc2l6ZW9mKFQpICsga0FsaWdu
bWVudCAtIDEpIC8ga0FsaWdubWVudCkgKiBrQWxpZ25tZW50KTsKIAotICAvLyBGcmVlIGFyZWEg
ZnJvbSB3aGljaCB0byBjYXJ2ZSBuZXcgb2JqZWN0cwotICBjaGFyKiBmcmVlX2FyZWFfOwotICBz
aXplX3QgZnJlZV9hdmFpbF87CisgICAgLy8gRnJlZSBhcmVhIGZyb20gd2hpY2ggdG8gY2FydmUg
bmV3IG9iamVjdHMKKyAgICBjaGFyKiBmcmVlQXJlYTsKKyAgICBzaXplX3QgZnJlZUF2YWlsOwog
Ci0gIC8vIExpbmtlZCBsaXN0IG9mIGFsbCByZWdpb25zIGFsbG9jYXRlZCBieSB0aGlzIGFsbG9j
YXRvcgotICB2b2lkKiBhbGxvY2F0ZWRfcmVnaW9uc187CisgICAgLy8gTGlua2VkIGxpc3Qgb2Yg
YWxsIHJlZ2lvbnMgYWxsb2NhdGVkIGJ5IHRoaXMgYWxsb2NhdG9yCisgICAgdm9pZCogYWxsb2Nh
dGVkUmVnaW9uczsKIAotICAvLyBGcmVlIGxpc3Qgb2YgYWxyZWFkeSBjYXJ2ZWQgb2JqZWN0cwot
ICB2b2lkKiBmcmVlX2xpc3RfOworICAgIC8vIEZyZWUgbGlzdCBvZiBhbHJlYWR5IGNhcnZlZCBv
YmplY3RzCisgICAgdm9pZCogZnJlZUxpc3Q7CiAKLSAgLy8gTnVtYmVyIG9mIGFsbG9jYXRlZCBi
dXQgdW5mcmVlZCBvYmplY3RzCi0gIGludCBpbnVzZV87CisgICAgLy8gTnVtYmVyIG9mIGFsbG9j
YXRlZCBidXQgdW5mcmVlZCBvYmplY3RzCisgICAgaW50IGluVXNlOwogCi0gcHVibGljOgotICB2
b2lkIEluaXQoKSB7Ci0gICAgQVNTRVJUKGtBbGlnbmVkU2l6ZSA8PSBrQWxsb2NJbmNyZW1lbnQp
OwotICAgIGludXNlXyA9IDA7Ci0gICAgYWxsb2NhdGVkX3JlZ2lvbnNfID0gMDsKLSAgICBmcmVl
X2FyZWFfID0gTlVMTDsKLSAgICBmcmVlX2F2YWlsXyA9IDA7Ci0gICAgZnJlZV9saXN0XyA9IE5V
TEw7Ci0gIH0KK3B1YmxpYzoKKyAgICB2b2lkIEluaXQoKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KGtBbGlnbmVkU2l6ZSA8PSBrQWxsb2NJbmNyZW1lbnQpOworICAgICAgICBpblVzZSA9IDA7Cisg
ICAgICAgIGFsbG9jYXRlZFJlZ2lvbnMgPSAwOworICAgICAgICBmcmVlQXJlYSA9IDA7CisgICAg
ICAgIGZyZWVBdmFpbCA9IDA7CisgICAgICAgIGZyZWVMaXN0ID0gMDsKKyAgICB9CiAKLSAgVCog
TmV3KCkgewotICAgIC8vIENvbnN1bHQgZnJlZSBsaXN0Ci0gICAgdm9pZCogcmVzdWx0OwotICAg
IGlmIChmcmVlX2xpc3RfICE9IE5VTEwpIHsKLSAgICAgIHJlc3VsdCA9IGZyZWVfbGlzdF87Ci0g
ICAgICBmcmVlX2xpc3RfID0gKihyZWludGVycHJldF9jYXN0PHZvaWQqKj4ocmVzdWx0KSk7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgIGlmIChmcmVlX2F2YWlsXyA8IGtBbGlnbmVkU2l6ZSkgewotICAg
ICAgICAvLyBOZWVkIG1vcmUgcm9vbQotICAgICAgICBjaGFyKiBuZXdfYWxsb2NhdGlvbiA9IHJl
aW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KE1ldGFEYXRhQWxsb2Moa0FsbG9jSW5jcmVtZW50KSk7Ci0g
ICAgICAgIGlmICghbmV3X2FsbG9jYXRpb24pCi0gICAgICAgICAgQ1JBU0goKTsKLQotICAgICAg
ICAqcmVpbnRlcnByZXRfY2FzdF9wdHI8dm9pZCoqPihuZXdfYWxsb2NhdGlvbikgPSBhbGxvY2F0
ZWRfcmVnaW9uc187Ci0gICAgICAgIGFsbG9jYXRlZF9yZWdpb25zXyA9IG5ld19hbGxvY2F0aW9u
OwotICAgICAgICBmcmVlX2FyZWFfID0gbmV3X2FsbG9jYXRpb24gKyBrQWxpZ25lZFNpemU7Ci0g
ICAgICAgIGZyZWVfYXZhaWxfID0ga0FsbG9jSW5jcmVtZW50IC0ga0FsaWduZWRTaXplOwotICAg
ICAgfQotICAgICAgcmVzdWx0ID0gZnJlZV9hcmVhXzsKLSAgICAgIGZyZWVfYXJlYV8gKz0ga0Fs
aWduZWRTaXplOwotICAgICAgZnJlZV9hdmFpbF8gLT0ga0FsaWduZWRTaXplOworICAgIFQqIE5l
dygpCisgICAgeworICAgICAgICAvLyBDb25zdWx0IGZyZWUgbGlzdAorICAgICAgICB2b2lkKiBy
ZXN1bHQ7CisgICAgICAgIGlmIChmcmVlTGlzdCkgeworICAgICAgICAgICAgcmVzdWx0ID0gZnJl
ZUxpc3Q7CisgICAgICAgICAgICBmcmVlTGlzdCA9ICoocmVpbnRlcnByZXRfY2FzdDx2b2lkKio+
KHJlc3VsdCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGZyZWVBdmFpbCA8
IGtBbGlnbmVkU2l6ZSkgeworICAgICAgICAgICAgICAgIC8vIE5lZWQgbW9yZSByb29tCisgICAg
ICAgICAgICAgICAgY2hhciogbmV3YWxsb2NhdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+
KE1ldGFEYXRhQWxsb2Moa0FsbG9jSW5jcmVtZW50KSk7CisgICAgICAgICAgICAgICAgaWYgKCFu
ZXdhbGxvY2F0aW9uKQorICAgICAgICAgICAgICAgICAgICBDUkFTSCgpOworCisgICAgICAgICAg
ICAgICAgKnJlaW50ZXJwcmV0X2Nhc3RfcHRyPHZvaWQqKj4obmV3YWxsb2NhdGlvbikgPSBhbGxv
Y2F0ZWRSZWdpb25zOworICAgICAgICAgICAgICAgICBhbGxvY2F0ZWRSZWdpb25zID0gbmV3YWxs
b2NhdGlvbjsKKyAgICAgICAgICAgICAgICBmcmVlQXJlYSA9IG5ld2FsbG9jYXRpb24gKyBrQWxp
Z25lZFNpemU7CisgICAgICAgICAgICAgICAgZnJlZUF2YWlsID0ga0FsbG9jSW5jcmVtZW50IC0g
a0FsaWduZWRTaXplOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmVzdWx0ID0gZnJlZUFy
ZWE7CisgICAgICAgICAgICBmcmVlQXJlYSArPSBrQWxpZ25lZFNpemU7CisgICAgICAgICAgICBm
cmVlQXZhaWwgLT0ga0FsaWduZWRTaXplOworICAgICAgICB9CisgICAgICAgIGluVXNlKys7Cisg
ICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFQqPihyZXN1bHQpOwogICAgIH0KLSAgICBp
bnVzZV8rKzsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUKj4ocmVzdWx0KTsKLSAgfQog
Ci0gIHZvaWQgRGVsZXRlKFQqIHApIHsKLSAgICAqKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPihw
KSkgPSBmcmVlX2xpc3RfOwotICAgIGZyZWVfbGlzdF8gPSBwOwotICAgIGludXNlXy0tOwotICB9
CisgICAgdm9pZCBEZWxldGUoVCogcCkKKyAgICB7CisgICAgICAgICoocmVpbnRlcnByZXRfY2Fz
dDx2b2lkKio+KHApKSA9IGZyZWVMaXN0OworICAgICAgICBmcmVlTGlzdCA9IHA7CisgICAgICAg
IGluVXNlLS07CisgICAgfQogCi0gIGludCBpbnVzZSgpIGNvbnN0IHsgcmV0dXJuIGludXNlXzsg
fQorICAgIGludCBpbnVzZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaW5Vc2U7Cisg
ICAgfQogCiAjaWYgZGVmaW5lZChXVEZfQ0hBTkdFUykgJiYgT1MoREFSV0lOKQotICB0ZW1wbGF0
ZSA8Y2xhc3MgUmVjb3JkZXI+Ci0gIHZvaWQgcmVjb3JkQWRtaW5pc3RyYXRpdmVSZWdpb25zKFJl
Y29yZGVyJiByZWNvcmRlciwgY29uc3QgUmVtb3RlTWVtb3J5UmVhZGVyJiByZWFkZXIpCi0gIHsK
LSAgICAgIGZvciAodm9pZCogYWRtaW5BbGxvY2F0aW9uID0gYWxsb2NhdGVkX3JlZ2lvbnNfOyBh
ZG1pbkFsbG9jYXRpb247IGFkbWluQWxsb2NhdGlvbiA9IHJlYWRlci5uZXh0RW50cnlJbkxpbmtl
ZExpc3QocmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KGFkbWluQWxsb2NhdGlvbikpKQotICAgICAg
ICAgIHJlY29yZGVyLnJlY29yZFJlZ2lvbihyZWludGVycHJldF9jYXN0PHZtX2FkZHJlc3NfdD4o
YWRtaW5BbGxvY2F0aW9uKSwga0FsbG9jSW5jcmVtZW50KTsKLSAgfQorICAgIHRlbXBsYXRlIDxj
bGFzcyBSZWNvcmRlcj4KKyAgICB2b2lkIHJlY29yZEFkbWluaXN0cmF0aXZlUmVnaW9ucyhSZWNv
cmRlciYgcmVjb3JkZXIsIGNvbnN0IFJlbW90ZU1lbW9yeVJlYWRlciYgcmVhZGVyKQorICAgIHsK
KyAgICAgICAgZm9yICh2b2lkKiBhZG1pbkFsbG9jYXRpb24gPSBhbGxvY2F0ZWRSZWdpb25zOyBh
ZG1pbkFsbG9jYXRpb247IGFkbWluQWxsb2NhdGlvbiA9IHJlYWRlci5uZXh0RW50cnlJbkxpbmtl
ZExpc3QocmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KGFkbWluQWxsb2NhdGlvbikpKQorICAgICAg
ICAgICAgcmVjb3JkZXIucmVjb3JkUmVnaW9uKHJlaW50ZXJwcmV0X2Nhc3Q8dm1fYWRkcmVzc190
PihhZG1pbkFsbG9jYXRpb24pLCBrQWxsb2NJbmNyZW1lbnQpOworICAgIH0KICNlbmRpZgogfTsK
IApAQCAtMTA3NywxNDYgKzEwODgsMTU0IEBAIHR5cGVkZWYgdWludHB0cl90IExlbmd0aDsKIAog
c3RhdGljIGNvbnN0IExlbmd0aCBrTWF4VmFsaWRQYWdlcyA9ICh+c3RhdGljX2Nhc3Q8TGVuZ3Ro
PigwKSkgPj4ga1BhZ2VTaGlmdDsKIAotLy8gQ29udmVydCBieXRlIHNpemUgaW50byBwYWdlcy4g
IFRoaXMgd29uJ3Qgb3ZlcmZsb3csIGJ1dCBtYXkgcmV0dXJuCisvLyBDb252ZXJ0IGJ5dGUgc2l6
ZSBpbnRvIHBhZ2VzLiBUaGlzIHdvbid0IG92ZXJmbG93LCBidXQgbWF5IHJldHVybgogLy8gYW4g
dW5yZWFzb25hYmx5IGxhcmdlIHZhbHVlIGlmIGJ5dGVzIGlzIGh1Z2UgZW5vdWdoLgotc3RhdGlj
IGlubGluZSBMZW5ndGggcGFnZXMoc2l6ZV90IGJ5dGVzKSB7Ci0gIHJldHVybiAoYnl0ZXMgPj4g
a1BhZ2VTaGlmdCkgKwotICAgICAgKChieXRlcyAmIChrUGFnZVNpemUgLSAxKSkgPiAwID8gMSA6
IDApOworc3RhdGljIGlubGluZSBMZW5ndGggcGFnZXMoc2l6ZV90IGJ5dGVzKQoreworICAgIHJl
dHVybiAoYnl0ZXMgPj4ga1BhZ2VTaGlmdCkgKyAoKGJ5dGVzICYgKGtQYWdlU2l6ZSAtIDEpKSA+
IDAgPyAxIDogMCk7CiB9CiAKIC8vIENvbnZlcnQgYSB1c2VyIHNpemUgaW50byB0aGUgbnVtYmVy
IG9mIGJ5dGVzIHRoYXQgd2lsbCBhY3R1YWxseSBiZQogLy8gYWxsb2NhdGVkCi1zdGF0aWMgc2l6
ZV90IEFsbG9jYXRpb25TaXplKHNpemVfdCBieXRlcykgewotICBpZiAoYnl0ZXMgPiBrTWF4U2l6
ZSkgewotICAgIC8vIExhcmdlIG9iamVjdDogd2UgYWxsb2NhdGUgYW4gaW50ZWdyYWwgbnVtYmVy
IG9mIHBhZ2VzCi0gICAgQVNTRVJUKGJ5dGVzIDw9IChrTWF4VmFsaWRQYWdlcyA8PCBrUGFnZVNo
aWZ0KSk7Ci0gICAgcmV0dXJuIHBhZ2VzKGJ5dGVzKSA8PCBrUGFnZVNoaWZ0OwotICB9IGVsc2Ug
eworc3RhdGljIHNpemVfdCBBbGxvY2F0aW9uU2l6ZShzaXplX3QgYnl0ZXMpCit7CisgICAgaWYg
KGJ5dGVzID4ga01heFNpemUpIHsKKyAgICAgICAgLy8gTGFyZ2Ugb2JqZWN0OiB3ZSBhbGxvY2F0
ZSBhbiBpbnRlZ3JhbCBudW1iZXIgb2YgcGFnZXMKKyAgICAgICAgQVNTRVJUKGJ5dGVzIDw9IChr
TWF4VmFsaWRQYWdlcyA8PCBrUGFnZVNoaWZ0KSk7CisgICAgICAgIHJldHVybiBwYWdlcyhieXRl
cykgPDwga1BhZ2VTaGlmdDsKKyAgICB9CiAgICAgLy8gU21hbGwgb2JqZWN0OiBmaW5kIHRoZSBz
aXplIGNsYXNzIHRvIHdoaWNoIGl0IGJlbG9uZ3MKICAgICByZXR1cm4gQnl0ZVNpemVGb3JDbGFz
cyhTaXplQ2xhc3MoYnl0ZXMpKTsKLSAgfQogfQogCiAvLyBJbmZvcm1hdGlvbiBrZXB0IGZvciBh
IHNwYW4gKGEgY29udGlndW91cyBydW4gb2YgcGFnZXMpLgogc3RydWN0IFNwYW4gewotICBQYWdl
SUQgICAgICAgIHN0YXJ0OyAgICAgICAgICAvLyBTdGFydGluZyBwYWdlIG51bWJlcgotICBMZW5n
dGggICAgICAgIGxlbmd0aDsgICAgICAgICAvLyBOdW1iZXIgb2YgcGFnZXMgaW4gc3BhbgotICBT
cGFuKiAgICAgICAgIG5leHQ7ICAgICAgICAgICAvLyBVc2VkIHdoZW4gaW4gbGluayBsaXN0Ci0g
IFNwYW4qICAgICAgICAgcHJldjsgICAgICAgICAgIC8vIFVzZWQgd2hlbiBpbiBsaW5rIGxpc3QK
LSAgdm9pZCogICAgICAgICBvYmplY3RzOyAgICAgICAgLy8gTGlua2VkIGxpc3Qgb2YgZnJlZSBv
YmplY3RzCi0gIHVuc2lnbmVkIGludCAgZnJlZSA6IDE7ICAgICAgIC8vIElzIHRoZSBzcGFuIGZy
ZWUKKyAgICBQYWdlSUQgc3RhcnQ7IC8vIFN0YXJ0aW5nIHBhZ2UgbnVtYmVyCisgICAgTGVuZ3Ro
IGxlbmd0aDsgLy8gTnVtYmVyIG9mIHBhZ2VzIGluIHNwYW4KKyAgICBTcGFuKiBuZXh0OyAvLyBV
c2VkIHdoZW4gaW4gbGluayBsaXN0CisgICAgU3BhbiogcHJldjsgLy8gVXNlZCB3aGVuIGluIGxp
bmsgbGlzdAorICAgIHZvaWQqIG9iamVjdHM7IC8vIExpbmtlZCBsaXN0IG9mIGZyZWUgb2JqZWN0
cworICAgIHVuc2lnbmVkIGludCBmcmVlIDogMTsgLy8gSXMgdGhlIHNwYW4gZnJlZQogI2lmbmRl
ZiBOT19UQ01BTExPQ19TQU1QTEVTCi0gIHVuc2lnbmVkIGludCAgc2FtcGxlIDogMTsgICAgIC8v
IFNhbXBsZWQgb2JqZWN0PworICAgIHVuc2lnbmVkIGludCBzYW1wbGUgOiAxOyAvLyBTYW1wbGVk
IG9iamVjdD8KICNlbmRpZgotICB1bnNpZ25lZCBpbnQgIHNpemVjbGFzcyA6IDg7ICAvLyBTaXpl
LWNsYXNzIGZvciBzbWFsbCBvYmplY3RzIChvciAwKQotICB1bnNpZ25lZCBpbnQgIHJlZmNvdW50
IDogMTE7ICAvLyBOdW1iZXIgb2Ygbm9uLWZyZWUgb2JqZWN0cwotICBib29sIGRlY29tbWl0dGVk
IDogMTsKKyAgICB1bnNpZ25lZCBpbnQgc2l6ZWNsYXNzIDogODsgLy8gU2l6ZS1jbGFzcyBmb3Ig
c21hbGwgb2JqZWN0cyAob3IgMCkKKyAgICB1bnNpZ25lZCBpbnQgcmVmY291bnQgOiAxMTsgLy8g
TnVtYmVyIG9mIG5vbi1mcmVlIG9iamVjdHMKKyAgICBib29sIGRlY29tbWl0dGVkIDogMTsKIAog
I3VuZGVmIFNQQU5fSElTVE9SWQogI2lmZGVmIFNQQU5fSElTVE9SWQotICAvLyBGb3IgZGVidWdn
aW5nLCB3ZSBjYW4ga2VlcCBhIGxvZyBldmVudHMgcGVyIHNwYW4KLSAgaW50IG5leHRoaXN0b3J5
OwotICBjaGFyIGhpc3RvcnlbNjRdOwotICBpbnQgdmFsdWVbNjRdOworICAgIC8vIEZvciBkZWJ1
Z2dpbmcsIHdlIGNhbiBrZWVwIGEgbG9nIGV2ZW50cyBwZXIgc3BhbgorICAgIGludCBuZXh0aGlz
dG9yeTsKKyAgICBjaGFyIGhpc3RvcnlbNjRdOworICAgIGludCB2YWx1ZVs2NF07CiAjZW5kaWYK
IH07CiAKICNkZWZpbmUgQVNTRVJUX1NQQU5fQ09NTUlUVEVEKHNwYW4pIEFTU0VSVCghc3Bhbi0+
ZGVjb21taXR0ZWQpCiAKICNpZmRlZiBTUEFOX0hJU1RPUlkKLXZvaWQgRXZlbnQoU3Bhbiogc3Bh
biwgY2hhciBvcCwgaW50IHYgPSAwKSB7Ci0gIHNwYW4tPmhpc3Rvcnlbc3Bhbi0+bmV4dGhpc3Rv
cnldID0gb3A7Ci0gIHNwYW4tPnZhbHVlW3NwYW4tPm5leHRoaXN0b3J5XSA9IHY7Ci0gIHNwYW4t
Pm5leHRoaXN0b3J5Kys7Ci0gIGlmIChzcGFuLT5uZXh0aGlzdG9yeSA9PSBzaXplb2Yoc3Bhbi0+
aGlzdG9yeSkpIHNwYW4tPm5leHRoaXN0b3J5ID0gMDsKK3ZvaWQgRXZlbnQoU3Bhbiogc3Bhbiwg
Y2hhciBvcCwgaW50IHYgPSAwKQoreworICAgIHNwYW4tPmhpc3Rvcnlbc3Bhbi0+bmV4dGhpc3Rv
cnldID0gb3A7CisgICAgc3Bhbi0+dmFsdWVbc3Bhbi0+bmV4dGhpc3RvcnldID0gdjsKKyAgICBz
cGFuLT5uZXh0aGlzdG9yeSsrOworICAgIGlmIChzcGFuLT5uZXh0aGlzdG9yeSA9PSBzaXplb2Yo
c3Bhbi0+aGlzdG9yeSkpCisgICAgICAgIHNwYW4tPm5leHRoaXN0b3J5ID0gMDsKIH0KICNlbHNl
CiAjZGVmaW5lIEV2ZW50KHMsbyx2KSAoKHZvaWQpIDApCiAjZW5kaWYKIAogLy8gQWxsb2NhdG9y
L2RlYWxsb2NhdG9yIGZvciBzcGFucwotc3RhdGljIFBhZ2VIZWFwQWxsb2NhdG9yPFNwYW4+IHNw
YW5fYWxsb2NhdG9yOwotc3RhdGljIFNwYW4qIE5ld1NwYW4oUGFnZUlEIHAsIExlbmd0aCBsZW4p
IHsKLSAgU3BhbiogcmVzdWx0ID0gc3Bhbl9hbGxvY2F0b3IuTmV3KCk7Ci0gIG1lbXNldChyZXN1
bHQsIDAsIHNpemVvZigqcmVzdWx0KSk7Ci0gIHJlc3VsdC0+c3RhcnQgPSBwOwotICByZXN1bHQt
Pmxlbmd0aCA9IGxlbjsKK3N0YXRpYyBQYWdlSGVhcEFsbG9jYXRvcjxTcGFuPiBzcGFuQWxsb2Nh
dG9yOworc3RhdGljIFNwYW4qIE5ld1NwYW4oUGFnZUlEIHAsIExlbmd0aCBsZW4pCit7CisgICAg
U3BhbiogcmVzdWx0ID0gc3BhbkFsbG9jYXRvci5OZXcoKTsKKyAgICBtZW1zZXQocmVzdWx0LCAw
LCBzaXplb2YoKnJlc3VsdCkpOworICAgIHJlc3VsdC0+c3RhcnQgPSBwOworICAgIHJlc3VsdC0+
bGVuZ3RoID0gbGVuOwogI2lmZGVmIFNQQU5fSElTVE9SWQotICByZXN1bHQtPm5leHRoaXN0b3J5
ID0gMDsKKyAgICByZXN1bHQtPm5leHRoaXN0b3J5ID0gMDsKICNlbmRpZgotICByZXR1cm4gcmVz
dWx0OworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBEZWxldGVT
cGFuKFNwYW4qIHNwYW4pIHsKK3N0YXRpYyBpbmxpbmUgdm9pZCBEZWxldGVTcGFuKFNwYW4qIHNw
YW4pCit7CiAjaWZuZGVmIE5ERUJVRwotICAvLyBJbiBkZWJ1ZyBtb2RlLCB0cmFzaCB0aGUgY29u
dGVudHMgb2YgZGVsZXRlZCBTcGFucwotICBtZW1zZXQoc3BhbiwgMHgzZiwgc2l6ZW9mKCpzcGFu
KSk7CisgICAgLy8gSW4gZGVidWcgbW9kZSwgdHJhc2ggdGhlIGNvbnRlbnRzIG9mIGRlbGV0ZWQg
U3BhbnMKKyAgICBtZW1zZXQoc3BhbiwgMHgzZiwgc2l6ZW9mKCpzcGFuKSk7CiAjZW5kaWYKLSAg
c3Bhbl9hbGxvY2F0b3IuRGVsZXRlKHNwYW4pOworICAgIHNwYW5BbGxvY2F0b3IuRGVsZXRlKHNw
YW4pOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyBEb3VibHkgbGlua2VkIGxpc3Qgb2Yg
c3BhbnMuCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBETExfSW5p
dChTcGFuKiBsaXN0KSB7Ci0gIGxpc3QtPm5leHQgPSBsaXN0OwotICBsaXN0LT5wcmV2ID0gbGlz
dDsKK3N0YXRpYyBpbmxpbmUgdm9pZCBETExJbml0KFNwYW4qIGxpc3QpCit7CisgICAgbGlzdC0+
bmV4dCA9IGxpc3Q7CisgICAgbGlzdC0+cHJldiA9IGxpc3Q7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
dm9pZCBETExfUmVtb3ZlKFNwYW4qIHNwYW4pIHsKLSAgc3Bhbi0+cHJldi0+bmV4dCA9IHNwYW4t
Pm5leHQ7Ci0gIHNwYW4tPm5leHQtPnByZXYgPSBzcGFuLT5wcmV2OwotICBzcGFuLT5wcmV2ID0g
TlVMTDsKLSAgc3Bhbi0+bmV4dCA9IE5VTEw7CitzdGF0aWMgaW5saW5lIHZvaWQgRExMUmVtb3Zl
KFNwYW4qIHNwYW4pCit7CisgICAgc3Bhbi0+cHJldi0+bmV4dCA9IHNwYW4tPm5leHQ7CisgICAg
c3Bhbi0+bmV4dC0+cHJldiA9IHNwYW4tPnByZXY7CisgICAgc3Bhbi0+cHJldiA9IDA7CisgICAg
c3Bhbi0+bmV4dCA9IDA7CiB9CiAKLXN0YXRpYyBBTFdBWVNfSU5MSU5FIGJvb2wgRExMX0lzRW1w
dHkoY29uc3QgU3BhbiogbGlzdCkgewotICByZXR1cm4gbGlzdC0+bmV4dCA9PSBsaXN0Oworc3Rh
dGljIEFMV0FZU19JTkxJTkUgYm9vbCBETExfSXNFbXB0eShjb25zdCBTcGFuKiBsaXN0KQorewor
ICAgIHJldHVybiBsaXN0LT5uZXh0ID09IGxpc3Q7CiB9CiAKLXN0YXRpYyBpbnQgRExMX0xlbmd0
aChjb25zdCBTcGFuKiBsaXN0KSB7Ci0gIGludCByZXN1bHQgPSAwOwotICBmb3IgKFNwYW4qIHMg
PSBsaXN0LT5uZXh0OyBzICE9IGxpc3Q7IHMgPSBzLT5uZXh0KSB7Ci0gICAgcmVzdWx0Kys7Ci0g
IH0KLSAgcmV0dXJuIHJlc3VsdDsKK3N0YXRpYyBpbnQgRExMTGVuZ3RoKGNvbnN0IFNwYW4qIGxp
c3QpCit7CisgICAgaW50IHJlc3VsdCA9IDA7CisgICAgZm9yIChTcGFuKiBzID0gbGlzdC0+bmV4
dDsgcyAhPSBsaXN0OyBzID0gcy0+bmV4dCkKKyAgICAgICAgcmVzdWx0Kys7CisgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAogI2lmIDAgLyogTm90IG5lZWRlZCBhdCB0aGUgbW9tZW50IC0tIGNhdXNl
cyBjb21waWxlciB3YXJuaW5ncyBpZiBub3QgdXNlZCAqLwotc3RhdGljIHZvaWQgRExMX1ByaW50
KGNvbnN0IGNoYXIqIGxhYmVsLCBjb25zdCBTcGFuKiBsaXN0KSB7Ci0gIE1FU1NBR0UoIiUtMTBz
ICVwOiIsIGxhYmVsLCBsaXN0KTsKLSAgZm9yIChjb25zdCBTcGFuKiBzID0gbGlzdC0+bmV4dDsg
cyAhPSBsaXN0OyBzID0gcy0+bmV4dCkgewotICAgIE1FU1NBR0UoIiA8JXAsJXUsJXU+Iiwgcywg
cy0+c3RhcnQsIHMtPmxlbmd0aCk7Ci0gIH0KLSAgTUVTU0FHRSgiXG4iKTsKK3N0YXRpYyB2b2lk
IERMTFByaW50KGNvbnN0IGNoYXIqIGxhYmVsLCBjb25zdCBTcGFuKiBsaXN0KQoreworICAgIE1F
U1NBR0UoIiUtMTBzICVwOiIsIGxhYmVsLCBsaXN0KTsKKyAgICBmb3IgKGNvbnN0IFNwYW4qIHMg
PSBsaXN0LT5uZXh0OyBzICE9IGxpc3Q7IHMgPSBzLT5uZXh0KQorICAgICAgICBNRVNTQUdFKCIg
PCVwLCV1LCV1PiIsIHMsIHMtPnN0YXJ0LCBzLT5sZW5ndGgpOworICAgIE1FU1NBR0UoIlxuIik7
CiB9CiAjZW5kaWYKIAotc3RhdGljIGlubGluZSB2b2lkIERMTF9QcmVwZW5kKFNwYW4qIGxpc3Qs
IFNwYW4qIHNwYW4pIHsKLSAgQVNTRVJUKHNwYW4tPm5leHQgPT0gTlVMTCk7Ci0gIEFTU0VSVChz
cGFuLT5wcmV2ID09IE5VTEwpOwotICBzcGFuLT5uZXh0ID0gbGlzdC0+bmV4dDsKLSAgc3Bhbi0+
cHJldiA9IGxpc3Q7Ci0gIGxpc3QtPm5leHQtPnByZXYgPSBzcGFuOwotICBsaXN0LT5uZXh0ID0g
c3BhbjsKK3N0YXRpYyBpbmxpbmUgdm9pZCBETExQcmVwZW5kKFNwYW4qIGxpc3QsIFNwYW4qIHNw
YW4pCit7CisgICAgQVNTRVJUKCFzcGFuLT5uZXh0KTsKKyAgICBBU1NFUlQoIXNwYW4tPnByZXYp
OworICAgIHNwYW4tPm5leHQgPSBsaXN0LT5uZXh0OworICAgIHNwYW4tPnByZXYgPSBsaXN0Owor
ICAgIGxpc3QtPm5leHQtPnByZXYgPSBzcGFuOworICAgIGxpc3QtPm5leHQgPSBzcGFuOwogfQog
CiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyBTdGFjayB0cmFjZXMga2VwdCBmb3Igc2FtcGxlZCBh
bGxvY2F0aW9ucwotLy8gICBUaGUgZm9sbG93aW5nIHN0YXRlIGlzIHByb3RlY3RlZCBieSBwYWdl
aGVhcF9sb2NrXy4KKy8vICAgVGhlIGZvbGxvd2luZyBzdGF0ZSBpcyBwcm90ZWN0ZWQgYnkgcGFn
ZWhlYXBMb2NrLgogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAvLyBzaXplL2RlcHRoIGFyZSBtYWRl
IHRoZSBzYW1lIHNpemUgYXMgYSBwb2ludGVyIHNvIHRoYXQgc29tZSBnZW5lcmljCiAvLyBjb2Rl
IGJlbG93IGNhbiBjb252ZW5pZW50bHkgY2FzdCB0aGVtIGJhY2sgYW5kIGZvcnRoIHRvIHZvaWQq
Lgogc3RhdGljIGNvbnN0IGludCBrTWF4U3RhY2tEZXB0aCA9IDMxOwogc3RydWN0IFN0YWNrVHJh
Y2UgewotICB1aW50cHRyX3Qgc2l6ZTsgICAgICAgICAgLy8gU2l6ZSBvZiBvYmplY3QKLSAgdWlu
dHB0cl90IGRlcHRoOyAgICAgICAgIC8vIE51bWJlciBvZiBQQyB2YWx1ZXMgc3RvcmVkIGluIGFy
cmF5IGJlbG93Ci0gIHZvaWQqICAgICBzdGFja1trTWF4U3RhY2tEZXB0aF07CisgICAgdWludHB0
cl90IHNpemU7IC8vIFNpemUgb2Ygb2JqZWN0CisgICAgdWludHB0cl90IGRlcHRoOyAvLyBOdW1i
ZXIgb2YgUEMgdmFsdWVzIHN0b3JlZCBpbiBhcnJheSBiZWxvdworICAgIHZvaWQqIHN0YWNrW2tN
YXhTdGFja0RlcHRoXTsKIH07CiBzdGF0aWMgUGFnZUhlYXBBbGxvY2F0b3I8U3RhY2tUcmFjZT4g
c3RhY2t0cmFjZV9hbGxvY2F0b3I7Ci1zdGF0aWMgU3BhbiBzYW1wbGVkX29iamVjdHM7CitzdGF0
aWMgU3BhbiBzYW1wbGVkT2JqZWN0czsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gTWFwIGZy
b20gcGFnZS1pZCB0byBwZXItcGFnZSBkYXRhCkBAIC0xMjI4LDkgKzEyNDcsOSBAQCBzdGF0aWMg
U3BhbiBzYW1wbGVkX29iamVjdHM7CiAKIC8vIFNlbGVjdG9yIGNsYXNzIC0tIGdlbmVyYWwgc2Vs
ZWN0b3IgdXNlcyAzLWxldmVsIG1hcAogdGVtcGxhdGUgPGludCBCSVRTPiBjbGFzcyBNYXBTZWxl
Y3RvciB7Ci0gcHVibGljOgotICB0eXBlZGVmIFRDTWFsbG9jX1BhZ2VNYXAzPEJJVFMta1BhZ2VT
aGlmdD4gVHlwZTsKLSAgdHlwZWRlZiBQYWNrZWRDYWNoZTxCSVRTLCB1aW50NjRfdD4gQ2FjaGVU
eXBlOworcHVibGljOgorICAgIHR5cGVkZWYgVENNYWxsb2NfUGFnZU1hcDM8QklUUy1rUGFnZVNo
aWZ0PiBUeXBlOworICAgIHR5cGVkZWYgUGFja2VkQ2FjaGU8QklUUywgdWludDY0X3Q+IENhY2hl
VHlwZTsKIH07CiAKICNpZiBkZWZpbmVkKFdURl9DSEFOR0VTKQpAQCAtMTI0NiwyNCArMTI2NSwy
NCBAQCBzdGF0aWMgY29uc3Qgc2l6ZV90IGtCaXRzVW51c2VkT242NEJpdCA9CiAKIC8vIEEgdGhy
ZWUtbGV2ZWwgbWFwIGZvciA2NC1iaXQgbWFjaGluZXMKIHRlbXBsYXRlIDw+IGNsYXNzIE1hcFNl
bGVjdG9yPDY0PiB7Ci0gcHVibGljOgotICB0eXBlZGVmIFRDTWFsbG9jX1BhZ2VNYXAzPDY0IC0g
a1BhZ2VTaGlmdCAtIGtCaXRzVW51c2VkT242NEJpdD4gVHlwZTsKLSAgdHlwZWRlZiBQYWNrZWRD
YWNoZTw2NCwgdWludDY0X3Q+IENhY2hlVHlwZTsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFRDTWFs
bG9jX1BhZ2VNYXAzPDY0IC0ga1BhZ2VTaGlmdCAtIGtCaXRzVW51c2VkT242NEJpdD4gVHlwZTsK
KyAgICB0eXBlZGVmIFBhY2tlZENhY2hlPDY0LCB1aW50NjRfdD4gQ2FjaGVUeXBlOwogfTsKICNl
bmRpZgogCiAvLyBBIHR3by1sZXZlbCBtYXAgZm9yIDMyLWJpdCBtYWNoaW5lcwogdGVtcGxhdGUg
PD4gY2xhc3MgTWFwU2VsZWN0b3I8MzI+IHsKLSBwdWJsaWM6Ci0gIHR5cGVkZWYgVENNYWxsb2Nf
UGFnZU1hcDI8MzIgLSBrUGFnZVNoaWZ0PiBUeXBlOwotICB0eXBlZGVmIFBhY2tlZENhY2hlPDMy
IC0ga1BhZ2VTaGlmdCwgdWludDE2X3Q+IENhY2hlVHlwZTsKK3B1YmxpYzoKKyAgICB0eXBlZGVm
IFRDTWFsbG9jX1BhZ2VNYXAyPDMyIC0ga1BhZ2VTaGlmdD4gVHlwZTsKKyAgICB0eXBlZGVmIFBh
Y2tlZENhY2hlPDMyIC0ga1BhZ2VTaGlmdCwgdWludDE2X3Q+IENhY2hlVHlwZTsKIH07CiAKIC8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KIC8vIFBhZ2UtbGV2ZWwgYWxsb2NhdG9yCiAvLyAgKiBFYWdlciBj
b2FsZXNjaW5nCiAvLwotLy8gSGVhcCBmb3IgcGFnZS1sZXZlbCBhbGxvY2F0aW9uLiAgV2UgYWxs
b3cgYWxsb2NhdGluZyBhbmQgZnJlZWluZyBhCisvLyBIZWFwIGZvciBwYWdlLWxldmVsIGFsbG9j
YXRpb24uIFdlIGFsbG93IGFsbG9jYXRpbmcgYW5kIGZyZWVpbmcgYQogLy8gY29udGlndW91cyBy
dW5zIG9mIHBhZ2VzIChjYWxsZWQgYSAic3BhbiIpLgogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBA
IC0xMjcyLDEyICsxMjkxLDEyIEBAIHRlbXBsYXRlIDw+IGNsYXNzIE1hcFNlbGVjdG9yPDMyPiB7
CiAvLyB0aGUgY2VudHJhbCBjYWNoZSBvciBhbnkgdGhyZWFkIGNhY2hlcy4gV2UgdXNlIGEgYmFj
a2dyb3VuZCB0aHJlYWQgdG8KIC8vIHBlcmlvZGljYWxseSBzY2FuIHRoZSBmcmVlIGxpc3QgYW5k
IHJlbGVhc2UgYSBwZXJjZW50YWdlIG9mIGl0IGJhY2sgdG8gdGhlIE9TLgogCi0vLyBJZiBmcmVl
X2NvbW1pdHRlZF9wYWdlc18gZXhjZWVkcyBrTWluaW11bUZyZWVDb21taXR0ZWRQYWdlQ291bnQs
IHRoZQorLy8gSWYgZnJlZUNvbW1pdHRlZFBhZ2VzIGV4Y2VlZHMga01pbmltdW1GcmVlQ29tbWl0
dGVkUGFnZUNvdW50LCB0aGUKIC8vIGJhY2tncm91bmQgdGhyZWFkOgogLy8gICAgIC0gd2FrZXMg
dXAKIC8vICAgICAtIHBhdXNlcyBmb3Iga1NjYXZlbmdlRGVsYXlJblNlY29uZHMKIC8vICAgICAt
IHJldHVybnMgdG8gdGhlIE9TIGEgcGVyY2VudGFnZSBvZiB0aGUgbWVtb3J5IHRoYXQgcmVtYWlu
ZWQgdW51c2VkIGR1cmluZwotLy8gICAgICAgdGhhdCBwYXVzZSAoa1NjYXZlbmdlUGVyY2VudGFn
ZSAqIG1pbl9mcmVlX2NvbW1pdHRlZF9wYWdlc19zaW5jZV9sYXN0X3NjYXZlbmdlXykKKy8vICAg
ICAgIHRoYXQgcGF1c2UgKGtTY2F2ZW5nZVBlcmNlbnRhZ2UgKiBtaW5GcmVlQ29tbWl0dGVkUGFn
ZXNTaW5jZUxhc3RTY2F2ZW5nZSkKIC8vIFRoZSBnb2FsIG9mIHRoaXMgc3RyYXRlZ3kgaXMgdG8g
cmVkdWNlIG1lbW9yeSBwcmVzc3VyZSBpbiBhIHRpbWVseSBmYXNoaW9uCiAvLyB3aGlsZSBhdm9p
ZGluZyB0aHJhc2hpbmcgdGhlIE9TIGFsbG9jYXRvci4KIApAQCAtMTI5MiwyMzIgKzEzMTEsMjQx
IEBAIHN0YXRpYyBjb25zdCBmbG9hdCBrU2NhdmVuZ2VQZXJjZW50YWdlID0KIC8vIG51bWJlciBv
ZiBzcGFuIGxpc3RzIHRvIGtlZXAgc3BhbnMgaW4gd2hlbiBtZW1vcnkgaXMgcmV0dXJuZWQuCiBz
dGF0aWMgY29uc3QgaW50IGtNaW5TcGFuTGlzdHNXaXRoU3BhbnMgPSAzMjsKIAotLy8gTnVtYmVy
IG9mIGZyZWUgY29tbWl0dGVkIHBhZ2VzIHRoYXQgd2Ugd2FudCB0byBrZWVwIGFyb3VuZC4gIFRo
ZSBtaW5pbXVtIG51bWJlciBvZiBwYWdlcyB1c2VkIHdoZW4gdGhlcmUKLS8vIGlzIDEgc3BhbiBp
biBlYWNoIG9mIHRoZSBmaXJzdCBrTWluU3Bhbkxpc3RzV2l0aFNwYW5zIHNwYW5saXN0cy4gIEN1
cnJlbnRseSA1MjggcGFnZXMuCisvLyBOdW1iZXIgb2YgZnJlZSBjb21taXR0ZWQgcGFnZXMgdGhh
dCB3ZSB3YW50IHRvIGtlZXAgYXJvdW5kLiBUaGUgbWluaW11bSBudW1iZXIgb2YgcGFnZXMgdXNl
ZCB3aGVuIHRoZXJlCisvLyBpcyAxIHNwYW4gaW4gZWFjaCBvZiB0aGUgZmlyc3Qga01pblNwYW5M
aXN0c1dpdGhTcGFucyBzcGFubGlzdHMuIEN1cnJlbnRseSA1MjggcGFnZXMuCiBzdGF0aWMgY29u
c3Qgc2l6ZV90IGtNaW5pbXVtRnJlZUNvbW1pdHRlZFBhZ2VDb3VudCA9IGtNaW5TcGFuTGlzdHNX
aXRoU3BhbnMgKiAoKDEuMGYra01pblNwYW5MaXN0c1dpdGhTcGFucykgLyAyLjBmKTsKIAogI2Vu
ZGlmCiAKLXN0YXRpYyBTcGluTG9jayBwYWdlaGVhcF9sb2NrID0gU1BJTkxPQ0tfSU5JVElBTEla
RVI7CitzdGF0aWMgU3BpbkxvY2sgcGFnZWhlYXBMb2NrID0gU1BJTkxPQ0tfSU5JVElBTElaRVI7
CiAKLWNsYXNzIFRDTWFsbG9jX1BhZ2VIZWFwIHsKLSBwdWJsaWM6Ci0gIHZvaWQgaW5pdCgpOwor
Y2xhc3MgVENNYWxsb2NQYWdlSGVhcCB7CitwdWJsaWM6CisgICAgdm9pZCBpbml0KCk7CiAKLSAg
Ly8gQWxsb2NhdGUgYSBydW4gb2YgIm4iIHBhZ2VzLiAgUmV0dXJucyB6ZXJvIGlmIG91dCBvZiBt
ZW1vcnkuCi0gIFNwYW4qIE5ldyhMZW5ndGggbik7CisgICAgLy8gQWxsb2NhdGUgYSBydW4gb2Yg
Im4iIHBhZ2VzLiBSZXR1cm5zIHplcm8gaWYgb3V0IG9mIG1lbW9yeS4KKyAgICBTcGFuKiBOZXco
TGVuZ3RoKTsKIAotICAvLyBEZWxldGUgdGhlIHNwYW4gIltwLCBwK24tMV0iLgotICAvLyBSRVFV
SVJFUzogc3BhbiB3YXMgcmV0dXJuZWQgYnkgZWFybGllciBjYWxsIHRvIE5ldygpIGFuZAotICAv
LyAgICAgICAgICAgaGFzIG5vdCB5ZXQgYmVlbiBkZWxldGVkLgotICB2b2lkIERlbGV0ZShTcGFu
KiBzcGFuKTsKLQotICAvLyBNYXJrIGFuIGFsbG9jYXRlZCBzcGFuIGFzIGJlaW5nIHVzZWQgZm9y
IHNtYWxsIG9iamVjdHMgb2YgdGhlCi0gIC8vIHNwZWNpZmllZCBzaXplLWNsYXNzLgotICAvLyBS
RVFVSVJFUzogc3BhbiB3YXMgcmV0dXJuZWQgYnkgYW4gZWFybGllciBjYWxsIHRvIE5ldygpCi0g
IC8vICAgICAgICAgICBhbmQgaGFzIG5vdCB5ZXQgYmVlbiBkZWxldGVkLgotICB2b2lkIFJlZ2lz
dGVyU2l6ZUNsYXNzKFNwYW4qIHNwYW4sIHNpemVfdCBzYyk7Ci0KLSAgLy8gU3BsaXQgYW4gYWxs
b2NhdGVkIHNwYW4gaW50byB0d28gc3BhbnM6IG9uZSBvZiBsZW5ndGggIm4iIHBhZ2VzCi0gIC8v
IGZvbGxvd2VkIGJ5IGFub3RoZXIgc3BhbiBvZiBsZW5ndGggInNwYW4tPmxlbmd0aCAtIG4iIHBh
Z2VzLgotICAvLyBNb2RpZmllcyAiKnNwYW4iIHRvIHBvaW50IHRvIHRoZSBmaXJzdCBzcGFuIG9m
IGxlbmd0aCAibiIgcGFnZXMuCi0gIC8vIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBzZWNvbmQg
c3Bhbi4KLSAgLy8KLSAgLy8gUkVRVUlSRVM6ICIwIDwgbiA8IHNwYW4tPmxlbmd0aCIKLSAgLy8g
UkVRVUlSRVM6ICFzcGFuLT5mcmVlCi0gIC8vIFJFUVVJUkVTOiBzcGFuLT5zaXplY2xhc3MgPT0g
MAotICBTcGFuKiBTcGxpdChTcGFuKiBzcGFuLCBMZW5ndGggbik7Ci0KLSAgLy8gUmV0dXJuIHRo
ZSBkZXNjcmlwdG9yIGZvciB0aGUgc3BlY2lmaWVkIHBhZ2UuCi0gIGlubGluZSBTcGFuKiBHZXRE
ZXNjcmlwdG9yKFBhZ2VJRCBwKSBjb25zdCB7Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
U3Bhbio+KHBhZ2VtYXBfLmdldChwKSk7Ci0gIH0KKyAgICAvLyBEZWxldGUgdGhlIHNwYW4gIltw
LCBwK24tMV0iLgorICAgIC8vIFJFUVVJUkVTOiBzcGFuIHdhcyByZXR1cm5lZCBieSBlYXJsaWVy
IGNhbGwgdG8gTmV3KCkgYW5kCisgICAgLy8gICAgICAgICAgIGhhcyBub3QgeWV0IGJlZW4gZGVs
ZXRlZC4KKyAgICB2b2lkIERlbGV0ZShTcGFuKik7CisKKyAgICAvLyBNYXJrIGFuIGFsbG9jYXRl
ZCBzcGFuIGFzIGJlaW5nIHVzZWQgZm9yIHNtYWxsIG9iamVjdHMgb2YgdGhlCisgICAgLy8gc3Bl
Y2lmaWVkIHNpemUtY2xhc3MuCisgICAgLy8gUkVRVUlSRVM6IHNwYW4gd2FzIHJldHVybmVkIGJ5
IGFuIGVhcmxpZXIgY2FsbCB0byBOZXcoKQorICAgIC8vICAgICAgICAgICBhbmQgaGFzIG5vdCB5
ZXQgYmVlbiBkZWxldGVkLgorICAgIHZvaWQgUmVnaXN0ZXJTaXplQ2xhc3MoU3BhbiosIHNpemVf
dCBzYyk7CisKKyAgICAvLyBTcGxpdCBhbiBhbGxvY2F0ZWQgc3BhbiBpbnRvIHR3byBzcGFuczog
b25lIG9mIGxlbmd0aCAibiIgcGFnZXMKKyAgICAvLyBmb2xsb3dlZCBieSBhbm90aGVyIHNwYW4g
b2YgbGVuZ3RoICJzcGFuLT5sZW5ndGggLSBuIiBwYWdlcy4KKyAgICAvLyBNb2RpZmllcyAiKnNw
YW4iIHRvIHBvaW50IHRvIHRoZSBmaXJzdCBzcGFuIG9mIGxlbmd0aCAibiIgcGFnZXMuCisgICAg
Ly8gUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIHNlY29uZCBzcGFuLgorICAgIC8vCisgICAgLy8g
UkVRVUlSRVM6ICIwIDwgbiA8IHNwYW4tPmxlbmd0aCIKKyAgICAvLyBSRVFVSVJFUzogIXNwYW4t
PmZyZWUKKyAgICAvLyBSRVFVSVJFUzogc3Bhbi0+c2l6ZWNsYXNzID09IDAKKyAgICBTcGFuKiBT
cGxpdChTcGFuKiwgTGVuZ3RoKTsKKworICAgIC8vIFJldHVybiB0aGUgZGVzY3JpcHRvciBmb3Ig
dGhlIHNwZWNpZmllZCBwYWdlLgorICAgIGlubGluZSBTcGFuKiBHZXREZXNjcmlwdG9yKFBhZ2VJ
RCBwKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8U3Bhbio+
KHBhZ2VtYXAuZ2V0KHApKTsKKyAgICB9CiAKICNpZmRlZiBXVEZfQ0hBTkdFUwotICBpbmxpbmUg
U3BhbiogR2V0RGVzY3JpcHRvckVuc3VyZVNhZmUoUGFnZUlEIHApCi0gIHsKLSAgICAgIHBhZ2Vt
YXBfLkVuc3VyZShwLCAxKTsKLSAgICAgIHJldHVybiBHZXREZXNjcmlwdG9yKHApOwotICB9Cisg
ICAgaW5saW5lIFNwYW4qIEdldERlc2NyaXB0b3JFbnN1cmVTYWZlKFBhZ2VJRCBwKQorICAgIHsK
KyAgICAgICAgcGFnZW1hcC5FbnN1cmUocCwgMSk7CisgICAgICAgIHJldHVybiBHZXREZXNjcmlw
dG9yKHApOworICAgIH0KICAgICAKLSAgc2l6ZV90IFJldHVybmVkQnl0ZXMoKSBjb25zdDsKKyAg
ICBzaXplX3QgUmV0dXJuZWRCeXRlcygpIGNvbnN0OwogI2VuZGlmCiAKLSAgLy8gRHVtcCBzdGF0
ZSB0byBzdGRlcnIKKyAgICAvLyBEdW1wIHN0YXRlIHRvIHN0ZGVycgogI2lmbmRlZiBXVEZfQ0hB
TkdFUwotICB2b2lkIER1bXAoVENNYWxsb2NfUHJpbnRlciogb3V0KTsKKyAgICB2b2lkIER1bXAo
VENNYWxsb2NfUHJpbnRlciogb3V0KTsKICNlbmRpZgogCi0gIC8vIFJldHVybiBudW1iZXIgb2Yg
Ynl0ZXMgYWxsb2NhdGVkIGZyb20gc3lzdGVtCi0gIGlubGluZSB1aW50NjRfdCBTeXN0ZW1CeXRl
cygpIGNvbnN0IHsgcmV0dXJuIHN5c3RlbV9ieXRlc187IH0KKyAgICAvLyBSZXR1cm4gbnVtYmVy
IG9mIGJ5dGVzIGFsbG9jYXRlZCBmcm9tIHN5c3RlbQorICAgIGlubGluZSB1aW50NjRfdCBTeXN0
ZW1CeXRlcygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gc3lzdGVtQnl0ZXM7CisgICAg
fQogCi0gIC8vIFJldHVybiBudW1iZXIgb2YgZnJlZSBieXRlcyBpbiBoZWFwCi0gIHVpbnQ2NF90
IEZyZWVCeXRlcygpIGNvbnN0IHsKLSAgICByZXR1cm4gKHN0YXRpY19jYXN0PHVpbnQ2NF90Pihm
cmVlX3BhZ2VzXykgPDwga1BhZ2VTaGlmdCk7Ci0gIH0KKyAgICAvLyBSZXR1cm4gbnVtYmVyIG9m
IGZyZWUgYnl0ZXMgaW4gaGVhcAorICAgIHVpbnQ2NF90IEZyZWVCeXRlcygpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gKHN0YXRpY19jYXN0PHVpbnQ2NF90PihmcmVlUGFnZXMpIDw8IGtQ
YWdlU2hpZnQpOworICAgIH0KIAotICBib29sIENoZWNrKCk7Ci0gIHNpemVfdCBDaGVja0xpc3Qo
U3BhbiogbGlzdCwgTGVuZ3RoIG1pbl9wYWdlcywgTGVuZ3RoIG1heF9wYWdlcywgYm9vbCBkZWNv
bW1pdHRlZCk7CisgICAgYm9vbCBDaGVjaygpOworICAgIHNpemVfdCBDaGVja0xpc3QoU3Bhbiog
bGlzdCwgTGVuZ3RoIG1pblBhZ2VzLCBMZW5ndGggbWF4UGFnZXMsIGJvb2wgZGVjb21taXR0ZWQp
OwogCi0gIC8vIFJlbGVhc2UgYWxsIHBhZ2VzIG9uIHRoZSBmcmVlIGxpc3QgZm9yIHJldXNlIGJ5
IHRoZSBPUzoKLSAgdm9pZCBSZWxlYXNlRnJlZVBhZ2VzKCk7Ci0gIHZvaWQgUmVsZWFzZUZyZWVM
aXN0KFNwYW4qLCBTcGFuKik7Ci0KLSAgLy8gUmV0dXJuIDAgaWYgd2UgaGF2ZSBubyBpbmZvcm1h
dGlvbiwgb3IgZWxzZSB0aGUgY29ycmVjdCBzaXplY2xhc3MgZm9yIHAuCi0gIC8vIFJlYWRzIGFu
ZCB3cml0ZXMgdG8gcGFnZW1hcF9jYWNoZV8gZG8gbm90IHJlcXVpcmUgbG9ja2luZy4KLSAgLy8g
VGhlIGVudHJpZXMgYXJlIDY0IGJpdHMgb24gNjQtYml0IGhhcmR3YXJlIGFuZCAxNiBiaXRzIG9u
Ci0gIC8vIDMyLWJpdCBoYXJkd2FyZSwgYW5kIHdlIGRvbid0IG1pbmQgcmFjaW5lc3MgYXMgbG9u
ZyBhcyBlYWNoIHJlYWQgb2YKLSAgLy8gYW4gZW50cnkgeWllbGRzIGEgdmFsaWQgZW50cnksIG5v
dCBhIHBhcnRpYWxseSB1cGRhdGVkIGVudHJ5LgotICBzaXplX3QgR2V0U2l6ZUNsYXNzSWZDYWNo
ZWQoUGFnZUlEIHApIGNvbnN0IHsKLSAgICByZXR1cm4gcGFnZW1hcF9jYWNoZV8uR2V0T3JEZWZh
dWx0KHAsIDApOwotICB9Ci0gIHZvaWQgQ2FjaGVTaXplQ2xhc3MoUGFnZUlEIHAsIHNpemVfdCBj
bCkgY29uc3QgeyBwYWdlbWFwX2NhY2hlXy5QdXQocCwgY2wpOyB9CisgICAgLy8gUmVsZWFzZSBh
bGwgcGFnZXMgb24gdGhlIGZyZWUgbGlzdCBmb3IgcmV1c2UgYnkgdGhlIE9TOgorICAgIHZvaWQg
UmVsZWFzZUZyZWVQYWdlcygpOworICAgIHZvaWQgUmVsZWFzZUZyZWVMaXN0KFNwYW4qLCBTcGFu
Kik7CisKKyAgICAvLyBSZXR1cm4gMCBpZiB3ZSBoYXZlIG5vIGluZm9ybWF0aW9uLCBvciBlbHNl
IHRoZSBjb3JyZWN0IHNpemVjbGFzcyBmb3IgcC4KKyAgICAvLyBSZWFkcyBhbmQgd3JpdGVzIHRv
IHBhZ2VtYXBjYWNoZSBkbyBub3QgcmVxdWlyZSBsb2NraW5nLgorICAgIC8vIFRoZSBlbnRyaWVz
IGFyZSA2NCBiaXRzIG9uIDY0LWJpdCBoYXJkd2FyZSBhbmQgMTYgYml0cyBvbgorICAgIC8vIDMy
LWJpdCBoYXJkd2FyZSwgYW5kIHdlIGRvbid0IG1pbmQgcmFjaW5lc3MgYXMgbG9uZyBhcyBlYWNo
IHJlYWQgb2YKKyAgICAvLyBhbiBlbnRyeSB5aWVsZHMgYSB2YWxpZCBlbnRyeSwgbm90IGEgcGFy
dGlhbGx5IHVwZGF0ZWQgZW50cnkuCisgICAgc2l6ZV90IEdldFNpemVDbGFzc0lmQ2FjaGVkKFBh
Z2VJRCBwKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHBhZ2VtYXBjYWNoZS5HZXRPckRl
ZmF1bHQocCwgMCk7CisgICAgfQorICAgIHZvaWQgQ2FjaGVTaXplQ2xhc3MoUGFnZUlEIHAsIHNp
emVfdCBjbCkgY29uc3QKKyAgICB7CisgICAgICAgIHBhZ2VtYXBjYWNoZS5QdXQocCwgY2wpOwor
ICAgIH0KIAotIHByaXZhdGU6Ci0gIC8vIFBpY2sgdGhlIGFwcHJvcHJpYXRlIG1hcCBhbmQgY2Fj
aGUgdHlwZXMgYmFzZWQgb24gcG9pbnRlciBzaXplCi0gIHR5cGVkZWYgTWFwU2VsZWN0b3I8OCpz
aXplb2YodWludHB0cl90KT46OlR5cGUgUGFnZU1hcDsKLSAgdHlwZWRlZiBNYXBTZWxlY3Rvcjw4
KnNpemVvZih1aW50cHRyX3QpPjo6Q2FjaGVUeXBlIFBhZ2VNYXBDYWNoZTsKLSAgUGFnZU1hcCBw
YWdlbWFwXzsKLSAgbXV0YWJsZSBQYWdlTWFwQ2FjaGUgcGFnZW1hcF9jYWNoZV87Ci0KLSAgLy8g
V2Ugc2VncmVnYXRlIHNwYW5zIG9mIGEgZ2l2ZW4gc2l6ZSBpbnRvIHR3byBjaXJjdWxhciBsaW5r
ZWQKLSAgLy8gbGlzdHM6IG9uZSBmb3Igbm9ybWFsIHNwYW5zLCBhbmQgb25lIGZvciBzcGFucyB3
aG9zZSBtZW1vcnkKLSAgLy8gaGFzIGJlZW4gcmV0dXJuZWQgdG8gdGhlIHN5c3RlbS4KLSAgc3Ry
dWN0IFNwYW5MaXN0IHsKLSAgICBTcGFuICAgICAgICBub3JtYWw7Ci0gICAgU3BhbiAgICAgICAg
cmV0dXJuZWQ7Ci0gIH07Ci0KLSAgLy8gTGlzdCBvZiBmcmVlIHNwYW5zIG9mIGxlbmd0aCA+PSBr
TWF4UGFnZXMKLSAgU3Bhbkxpc3QgbGFyZ2VfOworcHJpdmF0ZToKKyAgICAvLyBQaWNrIHRoZSBh
cHByb3ByaWF0ZSBtYXAgYW5kIGNhY2hlIHR5cGVzIGJhc2VkIG9uIHBvaW50ZXIgc2l6ZQorICAg
IHR5cGVkZWYgTWFwU2VsZWN0b3I8OCpzaXplb2YodWludHB0cl90KT46OlR5cGUgUGFnZU1hcDsK
KyAgICB0eXBlZGVmIE1hcFNlbGVjdG9yPDgqc2l6ZW9mKHVpbnRwdHJfdCk+OjpDYWNoZVR5cGUg
UGFnZU1hcENhY2hlOworICAgIFBhZ2VNYXAgcGFnZW1hcDsKKyAgICBtdXRhYmxlIFBhZ2VNYXBD
YWNoZSBwYWdlbWFwY2FjaGU7CisKKyAgICAvLyBXZSBzZWdyZWdhdGUgc3BhbnMgb2YgYSBnaXZl
biBzaXplIGludG8gdHdvIGNpcmN1bGFyIGxpbmtlZAorICAgIC8vIGxpc3RzOiBvbmUgZm9yIG5v
cm1hbCBzcGFucywgYW5kIG9uZSBmb3Igc3BhbnMgd2hvc2UgbWVtb3J5CisgICAgLy8gaGFzIGJl
ZW4gcmV0dXJuZWQgdG8gdGhlIHN5c3RlbS4KKyAgICBzdHJ1Y3QgU3Bhbkxpc3QgeworICAgICAg
ICBTcGFuIG5vcm1hbDsKKyAgICAgICAgU3BhbiByZXR1cm5lZDsKKyAgICB9OwogCi0gIC8vIEFy
cmF5IG1hcHBpbmcgZnJvbSBzcGFuIGxlbmd0aCB0byBhIGRvdWJseSBsaW5rZWQgbGlzdCBvZiBm
cmVlIHNwYW5zCi0gIFNwYW5MaXN0IGZyZWVfW2tNYXhQYWdlc107CisgICAgLy8gTGlzdCBvZiBm
cmVlIHNwYW5zIG9mIGxlbmd0aCA+PSBrTWF4UGFnZXMKKyAgICBTcGFuTGlzdCBsYXJnZTsKIAot
ICAvLyBOdW1iZXIgb2YgcGFnZXMga2VwdCBpbiBmcmVlIGxpc3RzCi0gIHVpbnRwdHJfdCBmcmVl
X3BhZ2VzXzsKKyAgICAvLyBBcnJheSBtYXBwaW5nIGZyb20gc3BhbiBsZW5ndGggdG8gYSBkb3Vi
bHkgbGlua2VkIGxpc3Qgb2YgZnJlZSBzcGFucworICAgIFNwYW5MaXN0IGZyZWVTcGFuTGlzdFtr
TWF4UGFnZXNdOwogCi0gIC8vIEJ5dGVzIGFsbG9jYXRlZCBmcm9tIHN5c3RlbQotICB1aW50NjRf
dCBzeXN0ZW1fYnl0ZXNfOworICAgIC8vIE51bWJlciBvZiBwYWdlcyBrZXB0IGluIGZyZWUgbGlz
dHMKKyAgICB1aW50cHRyX3QgZnJlZVBhZ2VzOworCisgICAgLy8gQnl0ZXMgYWxsb2NhdGVkIGZy
b20gc3lzdGVtCisgICAgdWludDY0X3Qgc3lzdGVtQnl0ZXM7CiAKICNpZiBVU0VfQkFDS0dST1VO
RF9USFJFQURfVE9fU0NBVkVOR0VfTUVNT1JZCi0gIC8vIE51bWJlciBvZiBwYWdlcyBrZXB0IGlu
IGZyZWUgbGlzdHMgdGhhdCBhcmUgc3RpbGwgY29tbWl0dGVkLgotICBMZW5ndGggZnJlZV9jb21t
aXR0ZWRfcGFnZXNfOworICAgIC8vIE51bWJlciBvZiBwYWdlcyBrZXB0IGluIGZyZWUgbGlzdHMg
dGhhdCBhcmUgc3RpbGwgY29tbWl0dGVkLgorICAgIExlbmd0aCBmcmVlQ29tbWl0dGVkUGFnZXM7
CisKKyAgICAvLyBNaW5pbXVtIG51bWJlciBvZiBmcmVlIGNvbW1pdHRlZCBwYWdlcyBzaW5jZSBs
YXN0IHNjYXZlbmdlLiAoQ2FuIGJlIDAgaWYKKyAgICAvLyB3ZSd2ZSBjb21taXR0ZWQgbmV3IHBh
Z2VzIHNpbmNlIHRoZSBsYXN0IHNjYXZlbmdlLikKKyAgICBMZW5ndGggbWluRnJlZUNvbW1pdHRl
ZFBhZ2VzU2luY2VMYXN0U2NhdmVuZ2U7CisjZW5kaWYKIAotICAvLyBNaW5pbXVtIG51bWJlciBv
ZiBmcmVlIGNvbW1pdHRlZCBwYWdlcyBzaW5jZSBsYXN0IHNjYXZlbmdlLiAoQ2FuIGJlIDAgaWYK
LSAgLy8gd2UndmUgY29tbWl0dGVkIG5ldyBwYWdlcyBzaW5jZSB0aGUgbGFzdCBzY2F2ZW5nZS4p
Ci0gIExlbmd0aCBtaW5fZnJlZV9jb21taXR0ZWRfcGFnZXNfc2luY2VfbGFzdF9zY2F2ZW5nZV87
Ci0jZW5kaWYKLQotICBib29sIEdyb3dIZWFwKExlbmd0aCBuKTsKLQotICAvLyBSRVFVSVJFUyAg
IHNwYW4tPmxlbmd0aCA+PSBuCi0gIC8vIFJlbW92ZSBzcGFuIGZyb20gaXRzIGZyZWUgbGlzdCwg
YW5kIG1vdmUgYW55IGxlZnRvdmVyIHBhcnQgb2YKLSAgLy8gc3BhbiBpbnRvIGFwcHJvcHJpYXRl
IGZyZWUgbGlzdHMuICBBbHNvIHVwZGF0ZSAic3BhbiIgdG8gaGF2ZQotICAvLyBsZW5ndGggZXhh
Y3RseSAibiIgYW5kIG1hcmsgaXQgYXMgbm9uLWZyZWUgc28gaXQgY2FuIGJlIHJldHVybmVkCi0g
IC8vIHRvIHRoZSBjbGllbnQuCi0gIC8vCi0gIC8vICJyZWxlYXNlZCIgaXMgdHJ1ZSBpZmYgInNw
YW4iIHdhcyBmb3VuZCBvbiBhICJyZXR1cm5lZCIgbGlzdC4KLSAgdm9pZCBDYXJ2ZShTcGFuKiBz
cGFuLCBMZW5ndGggbiwgYm9vbCByZWxlYXNlZCk7Ci0KLSAgdm9pZCBSZWNvcmRTcGFuKFNwYW4q
IHNwYW4pIHsKLSAgICBwYWdlbWFwXy5zZXQoc3Bhbi0+c3RhcnQsIHNwYW4pOwotICAgIGlmIChz
cGFuLT5sZW5ndGggPiAxKSB7Ci0gICAgICBwYWdlbWFwXy5zZXQoc3Bhbi0+c3RhcnQgKyBzcGFu
LT5sZW5ndGggLSAxLCBzcGFuKTsKKyAgICBib29sIEdyb3dIZWFwKExlbmd0aCk7CisKKyAgICAv
LyBSRVFVSVJFUyAgIHNwYW4tPmxlbmd0aCA+PSBuCisgICAgLy8gUmVtb3ZlIHNwYW4gZnJvbSBp
dHMgZnJlZSBsaXN0LCBhbmQgbW92ZSBhbnkgbGVmdG92ZXIgcGFydCBvZgorICAgIC8vIHNwYW4g
aW50byBhcHByb3ByaWF0ZSBmcmVlIGxpc3RzLiBBbHNvIHVwZGF0ZSAic3BhbiIgdG8gaGF2ZQor
ICAgIC8vIGxlbmd0aCBleGFjdGx5ICJuIiBhbmQgbWFyayBpdCBhcyBub24tZnJlZSBzbyBpdCBj
YW4gYmUgcmV0dXJuZWQKKyAgICAvLyB0byB0aGUgY2xpZW50LgorICAgIC8vCisgICAgLy8gInJl
bGVhc2VkIiBpcyB0cnVlIGlmZiAic3BhbiIgd2FzIGZvdW5kIG9uIGEgInJldHVybmVkIiBsaXN0
LgorICAgIHZvaWQgQ2FydmUoU3BhbiosIExlbmd0aCwgYm9vbCByZWxlYXNlZCk7CisKKyAgICB2
b2lkIFJlY29yZFNwYW4oU3Bhbiogc3BhbikKKyAgICB7CisgICAgICAgIHBhZ2VtYXAuc2V0KHNw
YW4tPnN0YXJ0LCBzcGFuKTsKKyAgICAgICAgaWYgKHNwYW4tPmxlbmd0aCA+IDEpCisgICAgICAg
ICAgICBwYWdlbWFwLnNldChzcGFuLT5zdGFydCArIHNwYW4tPmxlbmd0aCAtIDEsIHNwYW4pOwog
ICAgIH0KLSAgfQogICAKLSAgICAvLyBBbGxvY2F0ZSBhIGxhcmdlIHNwYW4gb2YgbGVuZ3RoID09
IG4uICBJZiBzdWNjZXNzZnVsLCByZXR1cm5zIGEKLSAgLy8gc3BhbiBvZiBleGFjdGx5IHRoZSBz
cGVjaWZpZWQgbGVuZ3RoLiAgRWxzZSwgcmV0dXJucyBOVUxMLgotICBTcGFuKiBBbGxvY0xhcmdl
KExlbmd0aCBuKTsKKyAgICAvLyBBbGxvY2F0ZSBhIGxhcmdlIHNwYW4gb2YgbGVuZ3RoID09IG4u
IElmIHN1Y2Nlc3NmdWwsIHJldHVybnMgYQorICAgIC8vIHNwYW4gb2YgZXhhY3RseSB0aGUgc3Bl
Y2lmaWVkIGxlbmd0aC4gRWxzZSwgcmV0dXJucyAwLgorICAgIFNwYW4qIEFsbG9jTGFyZ2UoTGVu
Z3RoKTsKIAogI2lmICFVU0VfQkFDS0dST1VORF9USFJFQURfVE9fU0NBVkVOR0VfTUVNT1JZCi0g
IC8vIEluY3JlbWVudGFsbHkgcmVsZWFzZSBzb21lIG1lbW9yeSB0byB0aGUgc3lzdGVtLgotICAv
LyBJbmNyZW1lbnRhbFNjYXZlbmdlKG4pIGlzIGNhbGxlZCB3aGVuZXZlciBuIHBhZ2VzIGFyZSBm
cmVlZC4KLSAgdm9pZCBJbmNyZW1lbnRhbFNjYXZlbmdlKExlbmd0aCBuKTsKKyAgICAvLyBJbmNy
ZW1lbnRhbGx5IHJlbGVhc2Ugc29tZSBtZW1vcnkgdG8gdGhlIHN5c3RlbS4KKyAgICAvLyBJbmNy
ZW1lbnRhbFNjYXZlbmdlKG4pIGlzIGNhbGxlZCB3aGVuZXZlciBuIHBhZ2VzIGFyZSBmcmVlZC4K
KyAgICB2b2lkIEluY3JlbWVudGFsU2NhdmVuZ2UoTGVuZ3RoKTsKICNlbmRpZgogCi0gIC8vIE51
bWJlciBvZiBwYWdlcyB0byBkZWFsbG9jYXRlIGJlZm9yZSBkb2luZyBtb3JlIHNjYXZlbmdpbmcK
LSAgaW50NjRfdCBzY2F2ZW5nZV9jb3VudGVyXzsKKyAgICAvLyBOdW1iZXIgb2YgcGFnZXMgdG8g
ZGVhbGxvY2F0ZSBiZWZvcmUgZG9pbmcgbW9yZSBzY2F2ZW5naW5nCisgICAgaW50NjRfdCBzY2F2
ZW5nZUNvdW50ZXI7CiAKLSAgLy8gSW5kZXggb2YgbGFzdCBmcmVlIGxpc3Qgd2Ugc2NhdmVuZ2Vk
Ci0gIHNpemVfdCBzY2F2ZW5nZV9pbmRleF87CisgICAgLy8gSW5kZXggb2YgbGFzdCBmcmVlIGxp
c3Qgd2Ugc2NhdmVuZ2VkCisgICAgc2l6ZV90IHNjYXZlbmdlSW5kZXg7CiAgIAogI2lmIGRlZmlu
ZWQoV1RGX0NIQU5HRVMpICYmIE9TKERBUldJTikKLSAgZnJpZW5kIGNsYXNzIEZhc3RNYWxsb2Na
b25lOworICAgIGZyaWVuZCBjbGFzcyBGYXN0TWFsbG9jWm9uZTsKICNlbmRpZgogCiAjaWYgVVNF
X0JBQ0tHUk9VTkRfVEhSRUFEX1RPX1NDQVZFTkdFX01FTU9SWQotICB2b2lkIGluaXRpYWxpemVT
Y2F2ZW5nZXIoKTsKLSAgQUxXQVlTX0lOTElORSB2b2lkIHNpZ25hbFNjYXZlbmdlcigpOwotICB2
b2lkIHNjYXZlbmdlKCk7Ci0gIEFMV0FZU19JTkxJTkUgYm9vbCBzaG91bGRTY2F2ZW5nZSgpIGNv
bnN0OworICAgIHZvaWQgaW5pdGlhbGl6ZVNjYXZlbmdlcigpOworICAgIEFMV0FZU19JTkxJTkUg
dm9pZCBzaWduYWxTY2F2ZW5nZXIoKTsKKyAgICB2b2lkIHNjYXZlbmdlKCk7CisgICAgQUxXQVlT
X0lOTElORSBib29sIHNob3VsZFNjYXZlbmdlKCkgY29uc3Q7CiAKICNpZiBIQVZFKERJU1BBVENI
X0gpIHx8IE9TKFdJTkRPV1MpCi0gIHZvaWQgcGVyaW9kaWNTY2F2ZW5nZSgpOwotICBBTFdBWVNf
SU5MSU5FIGJvb2wgaXNTY2F2ZW5nZXJTdXNwZW5kZWQoKTsKLSAgQUxXQVlTX0lOTElORSB2b2lk
IHNjaGVkdWxlU2NhdmVuZ2VyKCk7Ci0gIEFMV0FZU19JTkxJTkUgdm9pZCByZXNjaGVkdWxlU2Nh
dmVuZ2VyKCk7Ci0gIEFMV0FZU19JTkxJTkUgdm9pZCBzdXNwZW5kU2NhdmVuZ2VyKCk7CisgICAg
dm9pZCBwZXJpb2RpY1NjYXZlbmdlKCk7CisgICAgQUxXQVlTX0lOTElORSBib29sIGlzU2NhdmVu
Z2VyU3VzcGVuZGVkKCk7CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNjaGVkdWxlU2NhdmVuZ2Vy
KCk7CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHJlc2NoZWR1bGVTY2F2ZW5nZXIoKTsKKyAgICBB
TFdBWVNfSU5MSU5FIHZvaWQgc3VzcGVuZFNjYXZlbmdlcigpOwogI2VuZGlmCiAKICNpZiBIQVZF
KERJU1BBVENIX0gpCi0gIGRpc3BhdGNoX3F1ZXVlX3QgbV9zY2F2ZW5nZVF1ZXVlOwotICBkaXNw
YXRjaF9zb3VyY2VfdCBtX3NjYXZlbmdlVGltZXI7Ci0gIGJvb2wgbV9zY2F2ZW5naW5nU3VzcGVu
ZGVkOworICAgIGRpc3BhdGNoX3F1ZXVlX3QgbV9zY2F2ZW5nZVF1ZXVlOworICAgIGRpc3BhdGNo
X3NvdXJjZV90IG1fc2NhdmVuZ2VUaW1lcjsKKyAgICBib29sIG1fc2NhdmVuZ2luZ1N1c3BlbmRl
ZDsKICNlbGlmIE9TKFdJTkRPV1MpCi0gIHN0YXRpYyB2b2lkIENBTExCQUNLIHNjYXZlbmdlclRp
bWVyRmlyZWQodm9pZCosIEJPT0xFQU4pOwotICBIQU5ETEUgbV9zY2F2ZW5nZVF1ZXVlVGltZXI7
CisgICAgc3RhdGljIHZvaWQgQ0FMTEJBQ0sgc2NhdmVuZ2VyVGltZXJGaXJlZCh2b2lkKiwgQk9P
TEVBTik7CisgICAgSEFORExFIG1fc2NhdmVuZ2VRdWV1ZVRpbWVyOwogI2Vsc2UgCi0gIHN0YXRp
YyBOT19SRVRVUk5fV0lUSF9WQUxVRSB2b2lkKiBydW5TY2F2ZW5nZXJUaHJlYWQodm9pZCopOwot
ICBOT19SRVRVUk4gdm9pZCBzY2F2ZW5nZXJUaHJlYWQoKTsKKyAgICBzdGF0aWMgTk9fUkVUVVJO
X1dJVEhfVkFMVUUgdm9pZCogcnVuU2NhdmVuZ2VyVGhyZWFkKHZvaWQqKTsKKyAgICBOT19SRVRV
Uk4gdm9pZCBzY2F2ZW5nZXJUaHJlYWQoKTsKIAotICAvLyBLZWVwcyB0cmFjayBvZiB3aGV0aGVy
IHRoZSBiYWNrZ3JvdW5kIHRocmVhZCBpcyBhY3RpdmVseSBzY2F2ZW5naW5nIG1lbW9yeSBldmVy
eSBrU2NhdmVuZ2VEZWxheUluU2Vjb25kcywgb3IKLSAgLy8gaXQncyBibG9ja2VkIHdhaXRpbmcg
Zm9yIG1vcmUgcGFnZXMgdG8gYmUgZGVsZXRlZC4KLSAgYm9vbCBtX3NjYXZlbmdlVGhyZWFkQWN0
aXZlOworICAgIC8vIEtlZXBzIHRyYWNrIG9mIHdoZXRoZXIgdGhlIGJhY2tncm91bmQgdGhyZWFk
IGlzIGFjdGl2ZWx5IHNjYXZlbmdpbmcgbWVtb3J5IGV2ZXJ5IGtTY2F2ZW5nZURlbGF5SW5TZWNv
bmRzLCBvcgorICAgIC8vIGl0J3MgYmxvY2tlZCB3YWl0aW5nIGZvciBtb3JlIHBhZ2VzIHRvIGJl
IGRlbGV0ZWQuCisgICAgYm9vbCBtX3NjYXZlbmdlVGhyZWFkQWN0aXZlOwogCi0gIHB0aHJlYWRf
bXV0ZXhfdCBtX3NjYXZlbmdlTXV0ZXg7Ci0gIHB0aHJlYWRfY29uZF90IG1fc2NhdmVuZ2VDb25k
aXRpb247CisgICAgcHRocmVhZF9tdXRleF90IG1fc2NhdmVuZ2VNdXRleDsKKyAgICBwdGhyZWFk
X2NvbmRfdCBtX3NjYXZlbmdlQ29uZGl0aW9uOwogI2VuZGlmCiAKLSNlbmRpZiAgLy8gVVNFX0JB
Q0tHUk9VTkRfVEhSRUFEX1RPX1NDQVZFTkdFX01FTU9SWQorI2VuZGlmIC8vIFVTRV9CQUNLR1JP
VU5EX1RIUkVBRF9UT19TQ0FWRU5HRV9NRU1PUlkKIH07CiAKLXZvaWQgVENNYWxsb2NfUGFnZUhl
YXA6OmluaXQoKQordm9pZCBUQ01hbGxvY1BhZ2VIZWFwOjppbml0KCkKIHsKLSAgcGFnZW1hcF8u
aW5pdChNZXRhRGF0YUFsbG9jKTsKLSAgcGFnZW1hcF9jYWNoZV8gPSBQYWdlTWFwQ2FjaGUoMCk7
Ci0gIGZyZWVfcGFnZXNfID0gMDsKLSAgc3lzdGVtX2J5dGVzXyA9IDA7CisgICAgcGFnZW1hcC5p
bml0KE1ldGFEYXRhQWxsb2MpOworICAgIHBhZ2VtYXBjYWNoZSA9IFBhZ2VNYXBDYWNoZSgwKTsK
KyAgICBmcmVlUGFnZXMgPSAwOworICAgIHN5c3RlbUJ5dGVzID0gMDsKIAogI2lmIFVTRV9CQUNL
R1JPVU5EX1RIUkVBRF9UT19TQ0FWRU5HRV9NRU1PUlkKLSAgZnJlZV9jb21taXR0ZWRfcGFnZXNf
ID0gMDsKLSAgbWluX2ZyZWVfY29tbWl0dGVkX3BhZ2VzX3NpbmNlX2xhc3Rfc2NhdmVuZ2VfID0g
MDsKLSNlbmRpZiAgLy8gVVNFX0JBQ0tHUk9VTkRfVEhSRUFEX1RPX1NDQVZFTkdFX01FTU9SWQot
Ci0gIHNjYXZlbmdlX2NvdW50ZXJfID0gMDsKLSAgLy8gU3RhcnQgc2NhdmVuZ2luZyBhdCBrTWF4
UGFnZXMgbGlzdAotICBzY2F2ZW5nZV9pbmRleF8gPSBrTWF4UGFnZXMtMTsKLSAgQ09NUElMRV9B
U1NFUlQoa051bUNsYXNzZXMgPD0gKDEgPDwgUGFnZU1hcENhY2hlOjprVmFsdWViaXRzKSwgdmFs
dWViaXRzKTsKLSAgRExMX0luaXQoJmxhcmdlXy5ub3JtYWwpOwotICBETExfSW5pdCgmbGFyZ2Vf
LnJldHVybmVkKTsKLSAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrTWF4UGFnZXM7IGkrKykgewot
ICAgIERMTF9Jbml0KCZmcmVlX1tpXS5ub3JtYWwpOwotICAgIERMTF9Jbml0KCZmcmVlX1tpXS5y
ZXR1cm5lZCk7Ci0gIH0KKyAgICBmcmVlQ29tbWl0dGVkUGFnZXMgPSAwOworICAgIG1pbkZyZWVD
b21taXR0ZWRQYWdlc1NpbmNlTGFzdFNjYXZlbmdlID0gMDsKKyNlbmRpZiAvLyBVU0VfQkFDS0dS
T1VORF9USFJFQURfVE9fU0NBVkVOR0VfTUVNT1JZCisKKyAgICBzY2F2ZW5nZUNvdW50ZXIgPSAw
OworICAgIC8vIFN0YXJ0IHNjYXZlbmdpbmcgYXQga01heFBhZ2VzIGxpc3QKKyAgICBzY2F2ZW5n
ZUluZGV4ID0ga01heFBhZ2VzLTE7CisgICAgQ09NUElMRV9BU1NFUlQoa051bUNsYXNzZXMgPD0g
KDEgPDwgUGFnZU1hcENhY2hlOjprVmFsdWViaXRzKSwgdmFsdWViaXRzKTsKKyAgICBETExJbml0
KCZsYXJnZS5ub3JtYWwpOworICAgIERMTEluaXQoJmxhcmdlLnJldHVybmVkKTsKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGtNYXhQYWdlczsgaSsrKSB7CisgICAgICAgIERMTEluaXQoJmZy
ZWVTcGFuTGlzdFtpXS5ub3JtYWwpOworICAgICAgICBETExJbml0KCZmcmVlU3Bhbkxpc3RbaV0u
cmV0dXJuZWQpOworICAgIH0KIAogI2lmIFVTRV9CQUNLR1JPVU5EX1RIUkVBRF9UT19TQ0FWRU5H
RV9NRU1PUlkKLSAgaW5pdGlhbGl6ZVNjYXZlbmdlcigpOwotI2VuZGlmICAvLyBVU0VfQkFDS0dS
T1VORF9USFJFQURfVE9fU0NBVkVOR0VfTUVNT1JZCisgICAgaW5pdGlhbGl6ZVNjYXZlbmdlcigp
OworI2VuZGlmIC8vIFVTRV9CQUNLR1JPVU5EX1RIUkVBRF9UT19TQ0FWRU5HRV9NRU1PUlkKIH0K
IAogI2lmIFVTRV9CQUNLR1JPVU5EX1RIUkVBRF9UT19TQ0FWRU5HRV9NRU1PUlkKIAogI2lmIEhB
VkUoRElTUEFUQ0hfSCkKIAotdm9pZCBUQ01hbGxvY19QYWdlSGVhcDo6aW5pdGlhbGl6ZVNjYXZl
bmdlcigpCit2b2lkIFRDTWFsbG9jUGFnZUhlYXA6OmluaXRpYWxpemVTY2F2ZW5nZXIoKQogewot
ICAgIG1fc2NhdmVuZ2VRdWV1ZSA9IGRpc3BhdGNoX3F1ZXVlX2NyZWF0ZSgiY29tLmFwcGxlLkph
dmFTY3JpcHRDb3JlLkZhc3RNYWxsb2NTYXZlbmdlciIsIE5VTEwpOworICAgIG1fc2NhdmVuZ2VR
dWV1ZSA9IGRpc3BhdGNoX3F1ZXVlX2NyZWF0ZSgiY29tLmFwcGxlLkphdmFTY3JpcHRDb3JlLkZh
c3RNYWxsb2NTYXZlbmdlciIsIDApOwogICAgIG1fc2NhdmVuZ2VUaW1lciA9IGRpc3BhdGNoX3Nv
dXJjZV9jcmVhdGUoRElTUEFUQ0hfU09VUkNFX1RZUEVfVElNRVIsIDAsIDAsIG1fc2NhdmVuZ2VR
dWV1ZSk7CiAgICAgZGlzcGF0Y2hfdGltZV90IHN0YXJ0VGltZSA9IGRpc3BhdGNoX3RpbWUoRElT
UEFUQ0hfVElNRV9OT1csIGtTY2F2ZW5nZURlbGF5SW5TZWNvbmRzICogTlNFQ19QRVJfU0VDKTsK
ICAgICBkaXNwYXRjaF9zb3VyY2Vfc2V0X3RpbWVyKG1fc2NhdmVuZ2VUaW1lciwgc3RhcnRUaW1l
LCBrU2NhdmVuZ2VEZWxheUluU2Vjb25kcyAqIE5TRUNfUEVSX1NFQywgMTAwMCAqIE5TRUNfUEVS
X1VTRUMpOwpAQCAtMTUyNSw2NyArMTU1Myw2NyBAQCB2b2lkIFRDTWFsbG9jX1BhZ2VIZWFwOjpp
bml0aWFsaXplU2NhdmVuCiAgICAgbV9zY2F2ZW5naW5nU3VzcGVuZGVkID0gdHJ1ZTsKIH0KIAot
QUxXQVlTX0lOTElORSBib29sIFRDTWFsbG9jX1BhZ2VIZWFwOjppc1NjYXZlbmdlclN1c3BlbmRl
ZCgpCitBTFdBWVNfSU5MSU5FIGJvb2wgVENNYWxsb2NQYWdlSGVhcDo6aXNTY2F2ZW5nZXJTdXNw
ZW5kZWQoKQogewotICAgIEFTU0VSVChwYWdlaGVhcF9sb2NrLklzSGVsZCgpKTsKKyAgICBBU1NF
UlQocGFnZWhlYXBMb2NrLklzSGVsZCgpKTsKICAgICByZXR1cm4gbV9zY2F2ZW5naW5nU3VzcGVu
ZGVkOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgVENNYWxsb2NfUGFnZUhlYXA6OnNjaGVkdWxl
U2NhdmVuZ2VyKCkKK0FMV0FZU19JTkxJTkUgdm9pZCBUQ01hbGxvY1BhZ2VIZWFwOjpzY2hlZHVs
ZVNjYXZlbmdlcigpCiB7Ci0gICAgQVNTRVJUKHBhZ2VoZWFwX2xvY2suSXNIZWxkKCkpOworICAg
IEFTU0VSVChwYWdlaGVhcExvY2suSXNIZWxkKCkpOwogICAgIG1fc2NhdmVuZ2luZ1N1c3BlbmRl
ZCA9IGZhbHNlOwogICAgIGRpc3BhdGNoX3Jlc3VtZShtX3NjYXZlbmdlVGltZXIpOwogfQogCi1B
TFdBWVNfSU5MSU5FIHZvaWQgVENNYWxsb2NfUGFnZUhlYXA6OnJlc2NoZWR1bGVTY2F2ZW5nZXIo
KQorQUxXQVlTX0lOTElORSB2b2lkIFRDTWFsbG9jUGFnZUhlYXA6OnJlc2NoZWR1bGVTY2F2ZW5n
ZXIoKQogewogICAgIC8vIE5vdGhpbmcgdG8gZG8gaGVyZSBmb3IgbGliZGlzcGF0Y2guCiB9CiAK
LUFMV0FZU19JTkxJTkUgdm9pZCBUQ01hbGxvY19QYWdlSGVhcDo6c3VzcGVuZFNjYXZlbmdlcigp
CitBTFdBWVNfSU5MSU5FIHZvaWQgVENNYWxsb2NQYWdlSGVhcDo6c3VzcGVuZFNjYXZlbmdlcigp
CiB7Ci0gICAgQVNTRVJUKHBhZ2VoZWFwX2xvY2suSXNIZWxkKCkpOworICAgIEFTU0VSVChwYWdl
aGVhcExvY2suSXNIZWxkKCkpOwogICAgIG1fc2NhdmVuZ2luZ1N1c3BlbmRlZCA9IHRydWU7CiAg
ICAgZGlzcGF0Y2hfc3VzcGVuZChtX3NjYXZlbmdlVGltZXIpOwogfQogCiAjZWxpZiBPUyhXSU5E
T1dTKQogCi12b2lkIFRDTWFsbG9jX1BhZ2VIZWFwOjpzY2F2ZW5nZXJUaW1lckZpcmVkKHZvaWQq
IGNvbnRleHQsIEJPT0xFQU4pCit2b2lkIFRDTWFsbG9jUGFnZUhlYXA6OnNjYXZlbmdlclRpbWVy
RmlyZWQodm9pZCogY29udGV4dCwgQk9PTEVBTikKIHsKLSAgICBzdGF0aWNfY2FzdDxUQ01hbGxv
Y19QYWdlSGVhcCo+KGNvbnRleHQpLT5wZXJpb2RpY1NjYXZlbmdlKCk7CisgICAgc3RhdGljX2Nh
c3Q8VENNYWxsb2NQYWdlSGVhcCo+KGNvbnRleHQpLT5wZXJpb2RpY1NjYXZlbmdlKCk7CiB9CiAK
LXZvaWQgVENNYWxsb2NfUGFnZUhlYXA6OmluaXRpYWxpemVTY2F2ZW5nZXIoKQordm9pZCBUQ01h
bGxvY1BhZ2VIZWFwOjppbml0aWFsaXplU2NhdmVuZ2VyKCkKIHsKICAgICBtX3NjYXZlbmdlUXVl
dWVUaW1lciA9IDA7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBUQ01hbGxvY19QYWdlSGVhcDo6
aXNTY2F2ZW5nZXJTdXNwZW5kZWQoKQorQUxXQVlTX0lOTElORSBib29sIFRDTWFsbG9jUGFnZUhl
YXA6OmlzU2NhdmVuZ2VyU3VzcGVuZGVkKCkKIHsKLSAgICBBU1NFUlQoSXNIZWxkKHBhZ2VoZWFw
X2xvY2spKTsKKyAgICBBU1NFUlQoSXNIZWxkKHBhZ2VoZWFwTG9jaykpOwogICAgIHJldHVybiAh
bV9zY2F2ZW5nZVF1ZXVlVGltZXI7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBUQ01hbGxvY19Q
YWdlSGVhcDo6c2NoZWR1bGVTY2F2ZW5nZXIoKQorQUxXQVlTX0lOTElORSB2b2lkIFRDTWFsbG9j
UGFnZUhlYXA6OnNjaGVkdWxlU2NhdmVuZ2VyKCkKIHsKICAgICAvLyBXZSBuZWVkIHRvIHVzZSBX
VF9FWEVDVVRFT05MWU9OQ0UgaGVyZSBhbmQgcmVzY2hlZHVsZSB0aGUgdGltZXIsIGJlY2F1c2UK
ICAgICAvLyBXaW5kb3dzIHdpbGwgZmlyZSB0aGUgdGltZXIgZXZlbnQgZXZlbiB3aGVuIHRoZSBm
dW5jdGlvbiBpcyBhbHJlYWR5IHJ1bm5pbmcuCi0gICAgQVNTRVJUKElzSGVsZChwYWdlaGVhcF9s
b2NrKSk7CisgICAgQVNTRVJUKElzSGVsZChwYWdlaGVhcExvY2spKTsKICAgICBDcmVhdGVUaW1l
clF1ZXVlVGltZXIoJm1fc2NhdmVuZ2VRdWV1ZVRpbWVyLCAwLCBzY2F2ZW5nZXJUaW1lckZpcmVk
LCB0aGlzLCBrU2NhdmVuZ2VEZWxheUluU2Vjb25kcyAqIDEwMDAsIDAsIFdUX0VYRUNVVEVPTkxZ
T05DRSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBUQ01hbGxvY19QYWdlSGVhcDo6cmVzY2hl
ZHVsZVNjYXZlbmdlcigpCitBTFdBWVNfSU5MSU5FIHZvaWQgVENNYWxsb2NQYWdlSGVhcDo6cmVz
Y2hlZHVsZVNjYXZlbmdlcigpCiB7CiAgICAgLy8gV2UgbXVzdCBkZWxldGUgdGhlIHRpbWVyIGFu
ZCBjcmVhdGUgaXQgYWdhaW4sIGJlY2F1c2UgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHJldHJpZ2dl
ciBhIHRpbWVyIG9uIFdpbmRvd3MuCiAgICAgc3VzcGVuZFNjYXZlbmdlcigpOwogICAgIHNjaGVk
dWxlU2NhdmVuZ2VyKCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBUQ01hbGxvY19QYWdlSGVh
cDo6c3VzcGVuZFNjYXZlbmdlcigpCitBTFdBWVNfSU5MSU5FIHZvaWQgVENNYWxsb2NQYWdlSGVh
cDo6c3VzcGVuZFNjYXZlbmdlcigpCiB7Ci0gICAgQVNTRVJUKElzSGVsZChwYWdlaGVhcF9sb2Nr
KSk7CisgICAgQVNTRVJUKElzSGVsZChwYWdlaGVhcExvY2spKTsKICAgICBIQU5ETEUgc2NhdmVu
Z2VRdWV1ZVRpbWVyID0gbV9zY2F2ZW5nZVF1ZXVlVGltZXI7CiAgICAgbV9zY2F2ZW5nZVF1ZXVl
VGltZXIgPSAwOwogICAgIERlbGV0ZVRpbWVyUXVldWVUaW1lcigwLCBzY2F2ZW5nZVF1ZXVlVGlt
ZXIsIDApOwpAQCAtMTU5Myw3ICsxNjIxLDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIFRDTWFsbG9j
X1BhZ2VIZWFwOjpzdQogCiAjZWxzZQogCi12b2lkIFRDTWFsbG9jX1BhZ2VIZWFwOjppbml0aWFs
aXplU2NhdmVuZ2VyKCkKK3ZvaWQgVENNYWxsb2NQYWdlSGVhcDo6aW5pdGlhbGl6ZVNjYXZlbmdl
cigpCiB7CiAgICAgLy8gQ3JlYXRlIGEgbm9uLXJlY3Vyc2l2ZSBtdXRleC4KICNpZiAhZGVmaW5l
ZChQVEhSRUFEX01VVEVYX05PUk1BTCkgfHwgUFRIUkVBRF9NVVRFWF9OT1JNQUwgPT0gUFRIUkVB
RF9NVVRFWF9ERUZBVUxUCkBAIC0xNjE0LDE2ICsxNjQyLDE2IEBAIHZvaWQgVENNYWxsb2NfUGFn
ZUhlYXA6OmluaXRpYWxpemVTY2F2ZW4KICAgICBwdGhyZWFkX2NyZWF0ZSgmdGhyZWFkLCAwLCBy
dW5TY2F2ZW5nZXJUaHJlYWQsIHRoaXMpOwogfQogCi12b2lkKiBUQ01hbGxvY19QYWdlSGVhcDo6
cnVuU2NhdmVuZ2VyVGhyZWFkKHZvaWQqIGNvbnRleHQpCit2b2lkKiBUQ01hbGxvY1BhZ2VIZWFw
OjpydW5TY2F2ZW5nZXJUaHJlYWQodm9pZCogY29udGV4dCkKIHsKLSAgICBzdGF0aWNfY2FzdDxU
Q01hbGxvY19QYWdlSGVhcCo+KGNvbnRleHQpLT5zY2F2ZW5nZXJUaHJlYWQoKTsKKyAgICBzdGF0
aWNfY2FzdDxUQ01hbGxvY1BhZ2VIZWFwKj4oY29udGV4dCktPnNjYXZlbmdlclRocmVhZCgpOwog
I2lmIChDT01QSUxFUihNU1ZDKSB8fCBDT01QSUxFUihTVU5DQykpCiAgICAgLy8gV2l0aG91dCB0
aGlzLCBWaXN1YWwgU3R1ZGlvIGFuZCBTdW4gU3R1ZGlvIHdpbGwgY29tcGxhaW4gdGhhdCB0aGlz
IG1ldGhvZCBkb2VzIG5vdCByZXR1cm4gYSB2YWx1ZS4KICAgICByZXR1cm4gMDsKICNlbmRpZgog
fQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgVENNYWxsb2NfUGFnZUhlYXA6OnNpZ25hbFNjYXZlbmdl
cigpCitBTFdBWVNfSU5MSU5FIHZvaWQgVENNYWxsb2NQYWdlSGVhcDo6c2lnbmFsU2NhdmVuZ2Vy
KCkKIHsKICAgICAvLyBtX3NjYXZlbmdlTXV0ZXggc2hvdWxkIGJlIGhlbGQgYmVmb3JlIGFjY2Vz
c2luZyBtX3NjYXZlbmdlVGhyZWFkQWN0aXZlLgogICAgIEFTU0VSVChwdGhyZWFkX211dGV4X3Ry
eWxvY2sobV9zY2F2ZW5nZU11dGV4KSk7CkBAIC0xNjMzLDIwMSArMTY2MSwyMDQgQEAgQUxXQVlT
X0lOTElORSB2b2lkIFRDTWFsbG9jX1BhZ2VIZWFwOjpzaQogCiAjZW5kaWYKIAotdm9pZCBUQ01h
bGxvY19QYWdlSGVhcDo6c2NhdmVuZ2UoKQordm9pZCBUQ01hbGxvY1BhZ2VIZWFwOjpzY2F2ZW5n
ZSgpCiB7Ci0gICAgc2l6ZV90IHBhZ2VzVG9SZWxlYXNlID0gbWluX2ZyZWVfY29tbWl0dGVkX3Bh
Z2VzX3NpbmNlX2xhc3Rfc2NhdmVuZ2VfICoga1NjYXZlbmdlUGVyY2VudGFnZTsKLSAgICBzaXpl
X3QgdGFyZ2V0UGFnZUNvdW50ID0gc3RkOjptYXg8c2l6ZV90PihrTWluaW11bUZyZWVDb21taXR0
ZWRQYWdlQ291bnQsIGZyZWVfY29tbWl0dGVkX3BhZ2VzXyAtIHBhZ2VzVG9SZWxlYXNlKTsKKyAg
ICBzaXplX3QgcGFnZXNUb1JlbGVhc2UgPSBtaW5GcmVlQ29tbWl0dGVkUGFnZXNTaW5jZUxhc3RT
Y2F2ZW5nZSAqIGtTY2F2ZW5nZVBlcmNlbnRhZ2U7CisgICAgc2l6ZV90IHRhcmdldFBhZ2VDb3Vu
dCA9IHN0ZDo6bWF4PHNpemVfdD4oa01pbmltdW1GcmVlQ29tbWl0dGVkUGFnZUNvdW50LCBmcmVl
Q29tbWl0dGVkUGFnZXMgLSBwYWdlc1RvUmVsZWFzZSk7CiAKLSAgICBMZW5ndGggbGFzdEZyZWVD
b21taXR0ZWRQYWdlcyA9IGZyZWVfY29tbWl0dGVkX3BhZ2VzXzsKLSAgICB3aGlsZSAoZnJlZV9j
b21taXR0ZWRfcGFnZXNfID4gdGFyZ2V0UGFnZUNvdW50KSB7CisgICAgTGVuZ3RoIGxhc3RGcmVl
Q29tbWl0dGVkUGFnZXMgPSBmcmVlQ29tbWl0dGVkUGFnZXM7CisgICAgd2hpbGUgKGZyZWVDb21t
aXR0ZWRQYWdlcyA+IHRhcmdldFBhZ2VDb3VudCkgewogICAgICAgICBBU1NFUlQoQ2hlY2soKSk7
Ci0gICAgICAgIGZvciAoaW50IGkgPSBrTWF4UGFnZXM7IGkgPiAwICYmIGZyZWVfY29tbWl0dGVk
X3BhZ2VzXyA+PSB0YXJnZXRQYWdlQ291bnQ7IGktLSkgewotICAgICAgICAgICAgU3Bhbkxpc3Qq
IHNsaXN0ID0gKHN0YXRpY19jYXN0PHNpemVfdD4oaSkgPT0ga01heFBhZ2VzKSA/ICZsYXJnZV8g
OiAmZnJlZV9baV07Ci0gICAgICAgICAgICAvLyBJZiB0aGUgc3BhbiBzaXplIGlzIGJpZ2dlciB0
aGFuIGtNaW5TcGFuTGlzdHNXaXRoU3BhbnMgcGFnZXMgcmV0dXJuIGFsbCB0aGUgc3BhbnMgaW4g
dGhlIGxpc3QsIGVsc2UgcmV0dXJuIGFsbCBidXQgMSBzcGFuLiAgCisgICAgICAgIGZvciAoaW50
IGkgPSBrTWF4UGFnZXM7IGkgPiAwICYmIGZyZWVDb21taXR0ZWRQYWdlcyA+PSB0YXJnZXRQYWdl
Q291bnQ7IGktLSkgeworICAgICAgICAgICAgU3Bhbkxpc3QqIHNsaXN0ID0gKHN0YXRpY19jYXN0
PHNpemVfdD4oaSkgPT0ga01heFBhZ2VzKSA/ICZsYXJnZSA6ICZmcmVlU3Bhbkxpc3RbaV07Cisg
ICAgICAgICAgICAvLyBJZiB0aGUgc3BhbiBzaXplIGlzIGJpZ2dlciB0aGFuIGtNaW5TcGFuTGlz
dHNXaXRoU3BhbnMgcGFnZXMgcmV0dXJuIGFsbCB0aGUgc3BhbnMgaW4gdGhlIGxpc3QsIGVsc2Ug
cmV0dXJuIGFsbCBidXQgMSBzcGFuLiAKICAgICAgICAgICAgIC8vIFJldHVybiBvbmx5IDUwJSBv
ZiBhIHNwYW5saXN0IGF0IGEgdGltZSBzbyBzcGFucyBvZiBzaXplIDEgYXJlIG5vdCB0aGUgb25s
eSBvbmVzIGxlZnQuCi0gICAgICAgICAgICBzaXplX3QgbGVuZ3RoID0gRExMX0xlbmd0aCgmc2xp
c3QtPm5vcm1hbCk7CisgICAgICAgICAgICBzaXplX3QgbGVuZ3RoID0gRExMTGVuZ3RoKCZzbGlz
dC0+bm9ybWFsKTsKICAgICAgICAgICAgIHNpemVfdCBudW1TcGFuc1RvUmV0dXJuID0gKGkgPiBr
TWluU3Bhbkxpc3RzV2l0aFNwYW5zKSA/IGxlbmd0aCA6IGxlbmd0aCAvIDI7Ci0gICAgICAgICAg
ICBmb3IgKGludCBqID0gMDsgc3RhdGljX2Nhc3Q8c2l6ZV90PihqKSA8IG51bVNwYW5zVG9SZXR1
cm4gJiYgIURMTF9Jc0VtcHR5KCZzbGlzdC0+bm9ybWFsKSAmJiBmcmVlX2NvbW1pdHRlZF9wYWdl
c18gPiB0YXJnZXRQYWdlQ291bnQ7IGorKykgeworICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7
IHN0YXRpY19jYXN0PHNpemVfdD4oaikgPCBudW1TcGFuc1RvUmV0dXJuICYmICFETExfSXNFbXB0
eSgmc2xpc3QtPm5vcm1hbCkgJiYgZnJlZUNvbW1pdHRlZFBhZ2VzID4gdGFyZ2V0UGFnZUNvdW50
OyBqKyspIHsKICAgICAgICAgICAgICAgICBTcGFuKiBzID0gc2xpc3QtPm5vcm1hbC5wcmV2OyAK
LSAgICAgICAgICAgICAgICBETExfUmVtb3ZlKHMpOworICAgICAgICAgICAgICAgIERMTFJlbW92
ZShzKTsKICAgICAgICAgICAgICAgICBBU1NFUlQoIXMtPmRlY29tbWl0dGVkKTsKICAgICAgICAg
ICAgICAgICBpZiAoIXMtPmRlY29tbWl0dGVkKSB7CiAgICAgICAgICAgICAgICAgICAgIFRDTWFs
bG9jX1N5c3RlbVJlbGVhc2UocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocy0+c3RhcnQgPDwga1Bh
Z2VTaGlmdCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8c2l6ZV90PihzLT5sZW5ndGggPDwga1BhZ2VTaGlmdCkpOwotICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQoZnJlZV9jb21taXR0ZWRfcGFnZXNfID49IHMtPmxlbmd0aCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGZyZWVfY29tbWl0dGVkX3BhZ2VzXyAtPSBzLT5sZW5ndGg7CisgICAg
ICAgICAgICAgICAgICAgIEFTU0VSVChmcmVlQ29tbWl0dGVkUGFnZXMgPj0gcy0+bGVuZ3RoKTsK
KyAgICAgICAgICAgICAgICAgICAgZnJlZUNvbW1pdHRlZFBhZ2VzIC09IHMtPmxlbmd0aDsKICAg
ICAgICAgICAgICAgICAgICAgcy0+ZGVjb21taXR0ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBETExfUHJlcGVuZCgmc2xpc3QtPnJldHVybmVkLCBzKTsKKyAg
ICAgICAgICAgICAgICBETExQcmVwZW5kKCZzbGlzdC0+cmV0dXJuZWQsIHMpOwogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGxhc3RGcmVlQ29tbWl0dGVkUGFnZXMgPT0g
ZnJlZV9jb21taXR0ZWRfcGFnZXNfKQorICAgICAgICBpZiAobGFzdEZyZWVDb21taXR0ZWRQYWdl
cyA9PSBmcmVlQ29tbWl0dGVkUGFnZXMpCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgbGFz
dEZyZWVDb21taXR0ZWRQYWdlcyA9IGZyZWVfY29tbWl0dGVkX3BhZ2VzXzsKKyAgICAgICAgbGFz
dEZyZWVDb21taXR0ZWRQYWdlcyA9IGZyZWVDb21taXR0ZWRQYWdlczsKICAgICB9CiAKLSAgICBt
aW5fZnJlZV9jb21taXR0ZWRfcGFnZXNfc2luY2VfbGFzdF9zY2F2ZW5nZV8gPSBmcmVlX2NvbW1p
dHRlZF9wYWdlc187CisgICAgbWluRnJlZUNvbW1pdHRlZFBhZ2VzU2luY2VMYXN0U2NhdmVuZ2Ug
PSBmcmVlQ29tbWl0dGVkUGFnZXM7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBUQ01hbGxvY19Q
YWdlSGVhcDo6c2hvdWxkU2NhdmVuZ2UoKSBjb25zdCAKK0FMV0FZU19JTkxJTkUgYm9vbCBUQ01h
bGxvY1BhZ2VIZWFwOjpzaG91bGRTY2F2ZW5nZSgpIGNvbnN0IAogewotICAgIHJldHVybiBmcmVl
X2NvbW1pdHRlZF9wYWdlc18gPiBrTWluaW11bUZyZWVDb21taXR0ZWRQYWdlQ291bnQ7IAorICAg
IHJldHVybiBmcmVlQ29tbWl0dGVkUGFnZXMgPiBrTWluaW11bUZyZWVDb21taXR0ZWRQYWdlQ291
bnQ7IAogfQogCiAjZW5kaWYgIC8vIFVTRV9CQUNLR1JPVU5EX1RIUkVBRF9UT19TQ0FWRU5HRV9N
RU1PUlkKIAotaW5saW5lIFNwYW4qIFRDTWFsbG9jX1BhZ2VIZWFwOjpOZXcoTGVuZ3RoIG4pIHsK
LSAgQVNTRVJUKENoZWNrKCkpOwotICBBU1NFUlQobiA+IDApOwotCi0gIC8vIEZpbmQgZmlyc3Qg
c2l6ZSA+PSBuIHRoYXQgaGFzIGEgbm9uLWVtcHR5IGxpc3QKLSAgZm9yIChMZW5ndGggcyA9IG47
IHMgPCBrTWF4UGFnZXM7IHMrKykgewotICAgIFNwYW4qIGxsID0gTlVMTDsKLSAgICBib29sIHJl
bGVhc2VkID0gZmFsc2U7Ci0gICAgaWYgKCFETExfSXNFbXB0eSgmZnJlZV9bc10ubm9ybWFsKSkg
ewotICAgICAgLy8gRm91bmQgbm9ybWFsIHNwYW4KLSAgICAgIGxsID0gJmZyZWVfW3NdLm5vcm1h
bDsKLSAgICB9IGVsc2UgaWYgKCFETExfSXNFbXB0eSgmZnJlZV9bc10ucmV0dXJuZWQpKSB7Ci0g
ICAgICAvLyBGb3VuZCByZXR1cm5lZCBzcGFuOyByZWFsbG9jYXRlIGl0Ci0gICAgICBsbCA9ICZm
cmVlX1tzXS5yZXR1cm5lZDsKLSAgICAgIHJlbGVhc2VkID0gdHJ1ZTsKLSAgICB9IGVsc2Ugewot
ICAgICAgLy8gS2VlcCBsb29raW5nIGluIGxhcmdlciBjbGFzc2VzCi0gICAgICBjb250aW51ZTsK
LSAgICB9CitpbmxpbmUgU3BhbiogVENNYWxsb2NQYWdlSGVhcDo6TmV3KExlbmd0aCBuKQorewor
ICAgIEFTU0VSVChDaGVjaygpKTsKKyAgICBBU1NFUlQobiA+IDApOwogCi0gICAgU3BhbiogcmVz
dWx0ID0gbGwtPm5leHQ7Ci0gICAgQ2FydmUocmVzdWx0LCBuLCByZWxlYXNlZCk7CisgICAgLy8g
RmluZCBmaXJzdCBzaXplID49IG4gdGhhdCBoYXMgYSBub24tZW1wdHkgbGlzdAorICAgIGZvciAo
TGVuZ3RoIHMgPSBuOyBzIDwga01heFBhZ2VzOyBzKyspIHsKKyAgICAgICAgU3BhbiogbGwgPSAw
OworICAgICAgICBib29sIHJlbGVhc2VkID0gZmFsc2U7CisgICAgICAgIGlmICghRExMX0lzRW1w
dHkoJmZyZWVTcGFuTGlzdFtzXS5ub3JtYWwpKSB7CisgICAgICAgICAgICAvLyBGb3VuZCBub3Jt
YWwgc3BhbgorICAgICAgICAgICAgbGwgPSAmZnJlZVNwYW5MaXN0W3NdLm5vcm1hbDsKKyAgICAg
ICAgfSBlbHNlIGlmICghRExMX0lzRW1wdHkoJmZyZWVTcGFuTGlzdFtzXS5yZXR1cm5lZCkpIHsK
KyAgICAgICAgICAgIC8vIEZvdW5kIHJldHVybmVkIHNwYW47IHJlYWxsb2NhdGUgaXQKKyAgICAg
ICAgICAgIGxsID0gJmZyZWVTcGFuTGlzdFtzXS5yZXR1cm5lZDsKKyAgICAgICAgICAgIHJlbGVh
c2VkID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAvLyBLZWVwIGxvb2tpbmcg
aW4gbGFyZ2VyIGNsYXNzZXMKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIFNwYW4q
IHJlc3VsdCA9IGxsLT5uZXh0OworICAgICAgICBDYXJ2ZShyZXN1bHQsIG4sIHJlbGVhc2VkKTsK
ICNpZiBVU0VfQkFDS0dST1VORF9USFJFQURfVE9fU0NBVkVOR0VfTUVNT1JZCi0gICAgLy8gVGhl
IG5ld2x5IGFsbG9jYXRlZCBtZW1vcnkgaXMgZnJvbSBhIHNwYW4gdGhhdCdzIGluIHRoZSBub3Jt
YWwgc3BhbiBsaXN0IChhbHJlYWR5IGNvbW1pdHRlZCkuICBVcGRhdGUgdGhlCi0gICAgLy8gZnJl
ZSBjb21taXR0ZWQgcGFnZXMgY291bnQuCi0gICAgQVNTRVJUKGZyZWVfY29tbWl0dGVkX3BhZ2Vz
XyA+PSBuKTsKLSAgICBmcmVlX2NvbW1pdHRlZF9wYWdlc18gLT0gbjsKLSAgICBpZiAoZnJlZV9j
b21taXR0ZWRfcGFnZXNfIDwgbWluX2ZyZWVfY29tbWl0dGVkX3BhZ2VzX3NpbmNlX2xhc3Rfc2Nh
dmVuZ2VfKSAKLSAgICAgIG1pbl9mcmVlX2NvbW1pdHRlZF9wYWdlc19zaW5jZV9sYXN0X3NjYXZl
bmdlXyA9IGZyZWVfY29tbWl0dGVkX3BhZ2VzXzsKKyAgICAgICAgLy8gVGhlIG5ld2x5IGFsbG9j
YXRlZCBtZW1vcnkgaXMgZnJvbSBhIHNwYW4gdGhhdCdzIGluIHRoZSBub3JtYWwgc3BhbiBsaXN0
IChhbHJlYWR5IGNvbW1pdHRlZCkuIFVwZGF0ZSB0aGUKKyAgICAgICAgLy8gZnJlZSBjb21taXR0
ZWQgcGFnZXMgY291bnQuCisgICAgICAgIEFTU0VSVChmcmVlQ29tbWl0dGVkUGFnZXMgPj0gbik7
CisgICAgICAgIGZyZWVDb21taXR0ZWRQYWdlcyAtPSBuOworICAgICAgICBpZiAoZnJlZUNvbW1p
dHRlZFBhZ2VzIDwgbWluRnJlZUNvbW1pdHRlZFBhZ2VzU2luY2VMYXN0U2NhdmVuZ2UpIAorICAg
ICAgICAgICAgbWluRnJlZUNvbW1pdHRlZFBhZ2VzU2luY2VMYXN0U2NhdmVuZ2UgPSBmcmVlQ29t
bWl0dGVkUGFnZXM7CiAjZW5kaWYgIC8vIFVTRV9CQUNLR1JPVU5EX1RIUkVBRF9UT19TQ0FWRU5H
RV9NRU1PUlkKLSAgICBBU1NFUlQoQ2hlY2soKSk7Ci0gICAgZnJlZV9wYWdlc18gLT0gbjsKLSAg
ICByZXR1cm4gcmVzdWx0OwotICB9CisgICAgICAgIEFTU0VSVChDaGVjaygpKTsKKyAgICAgICAg
ZnJlZVBhZ2VzIC09IG47CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQogCi0gIFNwYW4q
IHJlc3VsdCA9IEFsbG9jTGFyZ2Uobik7Ci0gIGlmIChyZXN1bHQgIT0gTlVMTCkgewotICAgICAg
QVNTRVJUX1NQQU5fQ09NTUlUVEVEKHJlc3VsdCk7Ci0gICAgICByZXR1cm4gcmVzdWx0OwotICB9
CisgICAgU3BhbiogcmVzdWx0ID0gQWxsb2NMYXJnZShuKTsKKyAgICBpZiAocmVzdWx0KSB7Cisg
ICAgICAgIEFTU0VSVF9TUEFOX0NPTU1JVFRFRChyZXN1bHQpOworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KIAotICAvLyBHcm93IHRoZSBoZWFwIGFuZCB0cnkgYWdhaW4KLSAgaWYgKCFH
cm93SGVhcChuKSkgewotICAgIEFTU0VSVChDaGVjaygpKTsKLSAgICByZXR1cm4gTlVMTDsKLSAg
fQorICAgIC8vIEdyb3cgdGhlIGhlYXAgYW5kIHRyeSBhZ2FpbgorICAgIGlmICghR3Jvd0hlYXAo
bikpIHsKKyAgICAgICAgQVNTRVJUKENoZWNrKCkpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9
CiAKLSAgcmV0dXJuIE5ldyhuKTsKKyAgICByZXR1cm4gTmV3KG4pOwogfQogCi1TcGFuKiBUQ01h
bGxvY19QYWdlSGVhcDo6QWxsb2NMYXJnZShMZW5ndGggbikgewotICAvLyBmaW5kIHRoZSBiZXN0
IHNwYW4gKGNsb3Nlc3QgdG8gbiBpbiBzaXplKS4KLSAgLy8gVGhlIGZvbGxvd2luZyBsb29wcyBp
bXBsZW1lbnRzIGFkZHJlc3Mtb3JkZXJlZCBiZXN0LWZpdC4KLSAgYm9vbCBmcm9tX3JlbGVhc2Vk
ID0gZmFsc2U7Ci0gIFNwYW4gKmJlc3QgPSBOVUxMOwotCi0gIC8vIFNlYXJjaCB0aHJvdWdoIG5v
cm1hbCBsaXN0Ci0gIGZvciAoU3Bhbiogc3BhbiA9IGxhcmdlXy5ub3JtYWwubmV4dDsKLSAgICAg
ICBzcGFuICE9ICZsYXJnZV8ubm9ybWFsOwotICAgICAgIHNwYW4gPSBzcGFuLT5uZXh0KSB7Ci0g
ICAgaWYgKHNwYW4tPmxlbmd0aCA+PSBuKSB7Ci0gICAgICBpZiAoKGJlc3QgPT0gTlVMTCkKLSAg
ICAgICAgICB8fCAoc3Bhbi0+bGVuZ3RoIDwgYmVzdC0+bGVuZ3RoKQotICAgICAgICAgIHx8ICgo
c3Bhbi0+bGVuZ3RoID09IGJlc3QtPmxlbmd0aCkgJiYgKHNwYW4tPnN0YXJ0IDwgYmVzdC0+c3Rh
cnQpKSkgewotICAgICAgICBiZXN0ID0gc3BhbjsKLSAgICAgICAgZnJvbV9yZWxlYXNlZCA9IGZh
bHNlOwotICAgICAgfQorU3BhbiogVENNYWxsb2NQYWdlSGVhcDo6QWxsb2NMYXJnZShMZW5ndGgg
bikKK3sKKyAgICAvLyBmaW5kIHRoZSBiZXN0IHNwYW4gKGNsb3Nlc3QgdG8gbiBpbiBzaXplKS4K
KyAgICAvLyBUaGUgZm9sbG93aW5nIGxvb3BzIGltcGxlbWVudHMgYWRkcmVzcy1vcmRlcmVkIGJl
c3QtZml0LgorICAgIGJvb2wgZnJvbVJlbGVhc2VkID0gZmFsc2U7CisgICAgU3BhbiogYmVzdCA9
IDA7CisKKyAgICAvLyBTZWFyY2ggdGhyb3VnaCBub3JtYWwgbGlzdAorICAgIGZvciAoU3Bhbiog
c3BhbiA9IGxhcmdlLm5vcm1hbC5uZXh0OworICAgICAgICAgICAgc3BhbiAhPSAmbGFyZ2Uubm9y
bWFsOworICAgICAgICAgICAgc3BhbiA9IHNwYW4tPm5leHQpIHsKKyAgICAgICAgaWYgKHNwYW4t
Pmxlbmd0aCA+PSBuKSB7CisgICAgICAgICAgICBpZiAoIWJlc3QKKyAgICAgICAgICAgICAgICB8
fCAoc3Bhbi0+bGVuZ3RoIDwgYmVzdC0+bGVuZ3RoKQorICAgICAgICAgICAgICAgIHx8ICgoc3Bh
bi0+bGVuZ3RoID09IGJlc3QtPmxlbmd0aCkgJiYgKHNwYW4tPnN0YXJ0IDwgYmVzdC0+c3RhcnQp
KSkgeworICAgICAgICAgICAgICAgIGJlc3QgPSBzcGFuOworICAgICAgICAgICAgICAgZnJvbVJl
bGVhc2VkID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9Ci0gIH0KIAot
ICAvLyBTZWFyY2ggdGhyb3VnaCByZWxlYXNlZCBsaXN0IGluIGNhc2UgaXQgaGFzIGEgYmV0dGVy
IGZpdAotICBmb3IgKFNwYW4qIHNwYW4gPSBsYXJnZV8ucmV0dXJuZWQubmV4dDsKLSAgICAgICBz
cGFuICE9ICZsYXJnZV8ucmV0dXJuZWQ7Ci0gICAgICAgc3BhbiA9IHNwYW4tPm5leHQpIHsKLSAg
ICBpZiAoc3Bhbi0+bGVuZ3RoID49IG4pIHsKLSAgICAgIGlmICgoYmVzdCA9PSBOVUxMKQotICAg
ICAgICAgIHx8IChzcGFuLT5sZW5ndGggPCBiZXN0LT5sZW5ndGgpCi0gICAgICAgICAgfHwgKChz
cGFuLT5sZW5ndGggPT0gYmVzdC0+bGVuZ3RoKSAmJiAoc3Bhbi0+c3RhcnQgPCBiZXN0LT5zdGFy
dCkpKSB7Ci0gICAgICAgIGJlc3QgPSBzcGFuOwotICAgICAgICBmcm9tX3JlbGVhc2VkID0gdHJ1
ZTsKLSAgICAgIH0KKyAgICAvLyBTZWFyY2ggdGhyb3VnaCByZWxlYXNlZCBsaXN0IGluIGNhc2Ug
aXQgaGFzIGEgYmV0dGVyIGZpdAorICAgIGZvciAoU3Bhbiogc3BhbiA9IGxhcmdlLnJldHVybmVk
Lm5leHQ7CisgICAgICAgICAgICBzcGFuICE9ICZsYXJnZS5yZXR1cm5lZDsKKyAgICAgICAgICAg
IHNwYW4gPSBzcGFuLT5uZXh0KSB7CisgICAgICAgIGlmIChzcGFuLT5sZW5ndGggPj0gbikgewor
ICAgICAgICAgICAgaWYgKCFiZXN0CisgICAgICAgICAgICAgICAgfHwgKHNwYW4tPmxlbmd0aCA8
IGJlc3QtPmxlbmd0aCkKKyAgICAgICAgICAgICAgICB8fCAoKHNwYW4tPmxlbmd0aCA9PSBiZXN0
LT5sZW5ndGgpICYmIChzcGFuLT5zdGFydCA8IGJlc3QtPnN0YXJ0KSkpIHsKKyAgICAgICAgICAg
ICAgICBiZXN0ID0gc3BhbjsKKyAgICAgICAgICAgICAgICBmcm9tUmVsZWFzZWQgPSB0cnVlOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQotICB9CiAKLSAgaWYgKGJlc3QgIT0gTlVM
TCkgewotICAgIENhcnZlKGJlc3QsIG4sIGZyb21fcmVsZWFzZWQpOworICAgIGlmIChiZXN0KSB7
CisgICAgICAgIENhcnZlKGJlc3QsIG4sIGZyb21SZWxlYXNlZCk7CiAjaWYgVVNFX0JBQ0tHUk9V
TkRfVEhSRUFEX1RPX1NDQVZFTkdFX01FTU9SWQotICAgIC8vIFRoZSBuZXdseSBhbGxvY2F0ZWQg
bWVtb3J5IGlzIGZyb20gYSBzcGFuIHRoYXQncyBpbiB0aGUgbm9ybWFsIHNwYW4gbGlzdCAoYWxy
ZWFkeSBjb21taXR0ZWQpLiAgVXBkYXRlIHRoZQotICAgIC8vIGZyZWUgY29tbWl0dGVkIHBhZ2Vz
IGNvdW50LgotICAgIEFTU0VSVChmcmVlX2NvbW1pdHRlZF9wYWdlc18gPj0gbik7Ci0gICAgZnJl
ZV9jb21taXR0ZWRfcGFnZXNfIC09IG47Ci0gICAgaWYgKGZyZWVfY29tbWl0dGVkX3BhZ2VzXyA8
IG1pbl9mcmVlX2NvbW1pdHRlZF9wYWdlc19zaW5jZV9sYXN0X3NjYXZlbmdlXykKLSAgICAgIG1p
bl9mcmVlX2NvbW1pdHRlZF9wYWdlc19zaW5jZV9sYXN0X3NjYXZlbmdlXyA9IGZyZWVfY29tbWl0
dGVkX3BhZ2VzXzsKLSNlbmRpZiAgLy8gVVNFX0JBQ0tHUk9VTkRfVEhSRUFEX1RPX1NDQVZFTkdF
X01FTU9SWQotICAgIEFTU0VSVChDaGVjaygpKTsKLSAgICBmcmVlX3BhZ2VzXyAtPSBuOwotICAg
IHJldHVybiBiZXN0OwotICB9Ci0gIHJldHVybiBOVUxMOworICAgICAgICAvLyBUaGUgbmV3bHkg
YWxsb2NhdGVkIG1lbW9yeSBpcyBmcm9tIGEgc3BhbiB0aGF0J3MgaW4gdGhlIG5vcm1hbCBzcGFu
IGxpc3QgKGFscmVhZHkgY29tbWl0dGVkKS4gVXBkYXRlIHRoZQorICAgICAgICAvLyBmcmVlIGNv
bW1pdHRlZCBwYWdlcyBjb3VudC4KKyAgICAgICAgQVNTRVJUKGZyZWVDb21taXR0ZWRQYWdlcyA+
PSBuKTsKKyAgICAgICAgZnJlZUNvbW1pdHRlZFBhZ2VzIC09IG47CisgICAgICAgIGlmIChmcmVl
Q29tbWl0dGVkUGFnZXMgPCBtaW5GcmVlQ29tbWl0dGVkUGFnZXNTaW5jZUxhc3RTY2F2ZW5nZSkK
KyAgICAgICAgICAgIG1pbkZyZWVDb21taXR0ZWRQYWdlc1NpbmNlTGFzdFNjYXZlbmdlID0gZnJl
ZUNvbW1pdHRlZFBhZ2VzOworI2VuZGlmIC8vIFVTRV9CQUNLR1JPVU5EX1RIUkVBRF9UT19TQ0FW
RU5HRV9NRU1PUlkKKyAgICAgICAgQVNTRVJUKENoZWNrKCkpOworICAgICAgICBmcmVlUGFnZXMg
LT0gbjsKKyAgICAgICAgcmV0dXJuIGJlc3Q7CisgICAgfQorICAgIHJldHVybiAwOwogfQogCi1T
cGFuKiBUQ01hbGxvY19QYWdlSGVhcDo6U3BsaXQoU3Bhbiogc3BhbiwgTGVuZ3RoIG4pIHsKLSAg
QVNTRVJUKDAgPCBuKTsKLSAgQVNTRVJUKG4gPCBzcGFuLT5sZW5ndGgpOwotICBBU1NFUlQoIXNw
YW4tPmZyZWUpOwotICBBU1NFUlQoc3Bhbi0+c2l6ZWNsYXNzID09IDApOwotICBFdmVudChzcGFu
LCAnVCcsIG4pOwotCi0gIGNvbnN0IExlbmd0aCBleHRyYSA9IHNwYW4tPmxlbmd0aCAtIG47Ci0g
IFNwYW4qIGxlZnRvdmVyID0gTmV3U3BhbihzcGFuLT5zdGFydCArIG4sIGV4dHJhKTsKLSAgRXZl
bnQobGVmdG92ZXIsICdVJywgZXh0cmEpOwotICBSZWNvcmRTcGFuKGxlZnRvdmVyKTsKLSAgcGFn
ZW1hcF8uc2V0KHNwYW4tPnN0YXJ0ICsgbiAtIDEsIHNwYW4pOyAvLyBVcGRhdGUgbWFwIGZyb20g
cGFnZWlkIHRvIHNwYW4KLSAgc3Bhbi0+bGVuZ3RoID0gbjsKLQotICByZXR1cm4gbGVmdG92ZXI7
Ci19Ci0KLWlubGluZSB2b2lkIFRDTWFsbG9jX1BhZ2VIZWFwOjpDYXJ2ZShTcGFuKiBzcGFuLCBM
ZW5ndGggbiwgYm9vbCByZWxlYXNlZCkgewotICBBU1NFUlQobiA+IDApOwotICBETExfUmVtb3Zl
KHNwYW4pOwotICBzcGFuLT5mcmVlID0gMDsKLSAgRXZlbnQoc3BhbiwgJ0EnLCBuKTsKLQotICBp
ZiAocmVsZWFzZWQpIHsKLSAgICAvLyBJZiB0aGUgc3BhbiBjaG9zZW4gdG8gY2FydmUgZnJvbSBp
cyBkZWNvbW1pdGVkLCBjb21taXQgdGhlIGVudGlyZSBzcGFuIGF0IG9uY2UgdG8gYXZvaWQgY29t
bWl0dGluZyBzcGFucyAxIHBhZ2UgYXQgYSB0aW1lLgotICAgIEFTU0VSVChzcGFuLT5kZWNvbW1p
dHRlZCk7Ci0gICAgVENNYWxsb2NfU3lzdGVtQ29tbWl0KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KHNwYW4tPnN0YXJ0IDw8IGtQYWdlU2hpZnQpLCBzdGF0aWNfY2FzdDxzaXplX3Q+KHNwYW4tPmxl
bmd0aCA8PCBrUGFnZVNoaWZ0KSk7Ci0gICAgc3Bhbi0+ZGVjb21taXR0ZWQgPSBmYWxzZTsKLSNp
ZiBVU0VfQkFDS0dST1VORF9USFJFQURfVE9fU0NBVkVOR0VfTUVNT1JZCi0gICAgZnJlZV9jb21t
aXR0ZWRfcGFnZXNfICs9IHNwYW4tPmxlbmd0aDsKLSNlbmRpZgotICB9Ci0gIAotICBjb25zdCBp
bnQgZXh0cmEgPSBzdGF0aWNfY2FzdDxpbnQ+KHNwYW4tPmxlbmd0aCAtIG4pOwotICBBU1NFUlQo
ZXh0cmEgPj0gMCk7Ci0gIGlmIChleHRyYSA+IDApIHsKK1NwYW4qIFRDTWFsbG9jUGFnZUhlYXA6
OlNwbGl0KFNwYW4qIHNwYW4sIExlbmd0aCBuKQoreworICAgIEFTU0VSVCgwIDwgbik7CisgICAg
QVNTRVJUKG4gPCBzcGFuLT5sZW5ndGgpOworICAgIEFTU0VSVCghc3Bhbi0+ZnJlZSk7CisgICAg
QVNTRVJUKCFzcGFuLT5zaXplY2xhc3MpOworICAgIEV2ZW50KHNwYW4sICdUJywgbik7CisKKyAg
ICBjb25zdCBMZW5ndGggZXh0cmEgPSBzcGFuLT5sZW5ndGggLSBuOwogICAgIFNwYW4qIGxlZnRv
dmVyID0gTmV3U3BhbihzcGFuLT5zdGFydCArIG4sIGV4dHJhKTsKLSAgICBsZWZ0b3Zlci0+ZnJl
ZSA9IDE7Ci0gICAgbGVmdG92ZXItPmRlY29tbWl0dGVkID0gZmFsc2U7Ci0gICAgRXZlbnQobGVm
dG92ZXIsICdTJywgZXh0cmEpOworICAgIEV2ZW50KGxlZnRvdmVyLCAnVScsIGV4dHJhKTsKICAg
ICBSZWNvcmRTcGFuKGxlZnRvdmVyKTsKKyAgICBwYWdlbWFwLnNldChzcGFuLT5zdGFydCArIG4g
LSAxLCBzcGFuKTsgLy8gVXBkYXRlIG1hcCBmcm9tIHBhZ2VpZCB0byBzcGFuCisgICAgc3Bhbi0+
bGVuZ3RoID0gbjsKIAotICAgIC8vIFBsYWNlIGxlZnRvdmVyIHNwYW4gb24gYXBwcm9wcmlhdGUg
ZnJlZSBsaXN0Ci0gICAgU3Bhbkxpc3QqIGxpc3RwYWlyID0gKHN0YXRpY19jYXN0PHNpemVfdD4o
ZXh0cmEpIDwga01heFBhZ2VzKSA/ICZmcmVlX1tleHRyYV0gOiAmbGFyZ2VfOwotICAgIFNwYW4q
IGRzdCA9ICZsaXN0cGFpci0+bm9ybWFsOwotICAgIERMTF9QcmVwZW5kKGRzdCwgbGVmdG92ZXIp
OworICAgIHJldHVybiBsZWZ0b3ZlcjsKK30KIAotICAgIHNwYW4tPmxlbmd0aCA9IG47Ci0gICAg
cGFnZW1hcF8uc2V0KHNwYW4tPnN0YXJ0ICsgbiAtIDEsIHNwYW4pOwotICB9CitpbmxpbmUgdm9p
ZCBUQ01hbGxvY1BhZ2VIZWFwOjpDYXJ2ZShTcGFuKiBzcGFuLCBMZW5ndGggbiwgYm9vbCByZWxl
YXNlZCkKK3sKKyAgICBBU1NFUlQobiA+IDApOworICAgIERMTFJlbW92ZShzcGFuKTsKKyAgICBz
cGFuLT5mcmVlID0gMDsKKyAgICBFdmVudChzcGFuLCAnQScsIG4pOworCisgICAgaWYgKHJlbGVh
c2VkKSB7CisgICAgICAgIC8vIElmIHRoZSBzcGFuIGNob3NlbiB0byBjYXJ2ZSBmcm9tIGlzIGRl
Y29tbWl0ZWQsIGNvbW1pdCB0aGUgZW50aXJlIHNwYW4gYXQgb25jZSB0byBhdm9pZCBjb21taXR0
aW5nIHNwYW5zIDEgcGFnZSBhdCBhIHRpbWUuCisgICAgICAgIEFTU0VSVChzcGFuLT5kZWNvbW1p
dHRlZCk7CisgICAgICAgIFRDTWFsbG9jX1N5c3RlbUNvbW1pdChyZWludGVycHJldF9jYXN0PHZv
aWQqPihzcGFuLT5zdGFydCA8PCBrUGFnZVNoaWZ0KSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihzcGFu
LT5sZW5ndGggPDwga1BhZ2VTaGlmdCkpOworICAgICAgICBzcGFuLT5kZWNvbW1pdHRlZCA9IGZh
bHNlOworI2lmIFVTRV9CQUNLR1JPVU5EX1RIUkVBRF9UT19TQ0FWRU5HRV9NRU1PUlkKKyAgICAg
ICAgZnJlZUNvbW1pdHRlZFBhZ2VzICs9IHNwYW4tPmxlbmd0aDsKKyNlbmRpZgorICAgIH0KKyAg
CisgICAgY29uc3QgaW50IGV4dHJhID0gc3RhdGljX2Nhc3Q8aW50PihzcGFuLT5sZW5ndGggLSBu
KTsKKyAgICBBU1NFUlQoZXh0cmEgPj0gMCk7CisgICAgaWYgKGV4dHJhID4gMCkgeworICAgICAg
ICBTcGFuKiBsZWZ0b3ZlciA9IE5ld1NwYW4oc3Bhbi0+c3RhcnQgKyBuLCBleHRyYSk7CisgICAg
ICAgIGxlZnRvdmVyLT5mcmVlID0gMTsKKyAgICAgICAgbGVmdG92ZXItPmRlY29tbWl0dGVkID0g
ZmFsc2U7CisgICAgICAgIEV2ZW50KGxlZnRvdmVyLCAnUycsIGV4dHJhKTsKKyAgICAgICAgUmVj
b3JkU3BhbihsZWZ0b3Zlcik7CisKKyAgICAgICAgLy8gUGxhY2UgbGVmdG92ZXIgc3BhbiBvbiBh
cHByb3ByaWF0ZSBmcmVlIGxpc3QKKyAgICAgICAgU3Bhbkxpc3QqIGxpc3RwYWlyID0gKHN0YXRp
Y19jYXN0PHNpemVfdD4oZXh0cmEpIDwga01heFBhZ2VzKSA/ICZmcmVlU3Bhbkxpc3RbZXh0cmFd
IDogJmxhcmdlOworICAgICAgICBTcGFuKiBkc3QgPSAmbGlzdHBhaXItPm5vcm1hbDsKKyAgICAg
ICAgRExMUHJlcGVuZChkc3QsIGxlZnRvdmVyKTsKKworICAgICAgICBzcGFuLT5sZW5ndGggPSBu
OworICAgICAgICBwYWdlbWFwLnNldChzcGFuLT5zdGFydCArIG4gLSAxLCBzcGFuKTsKKyAgICB9
CiB9CiAKIHN0YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQgbWVyZ2VEZWNvbW1pdHRlZFN0YXRlcyhT
cGFuKiBkZXN0aW5hdGlvbiwgU3Bhbiogb3RoZXIpCkBAIC0xODQyLDQzMiArMTg3Myw0NTggQEAg
c3RhdGljIEFMV0FZU19JTkxJTkUgdm9pZCBtZXJnZURlY29tbWl0dAogICAgIH0KIH0KIAotaW5s
aW5lIHZvaWQgVENNYWxsb2NfUGFnZUhlYXA6OkRlbGV0ZShTcGFuKiBzcGFuKSB7Ci0gIEFTU0VS
VChDaGVjaygpKTsKLSAgQVNTRVJUKCFzcGFuLT5mcmVlKTsKLSAgQVNTRVJUKHNwYW4tPmxlbmd0
aCA+IDApOwotICBBU1NFUlQoR2V0RGVzY3JpcHRvcihzcGFuLT5zdGFydCkgPT0gc3Bhbik7Ci0g
IEFTU0VSVChHZXREZXNjcmlwdG9yKHNwYW4tPnN0YXJ0ICsgc3Bhbi0+bGVuZ3RoIC0gMSkgPT0g
c3Bhbik7Ci0gIHNwYW4tPnNpemVjbGFzcyA9IDA7CitpbmxpbmUgdm9pZCBUQ01hbGxvY1BhZ2VI
ZWFwOjpEZWxldGUoU3Bhbiogc3BhbikKK3sKKyAgICBBU1NFUlQoQ2hlY2soKSk7CisgICAgQVNT
RVJUKCFzcGFuLT5mcmVlKTsKKyAgICBBU1NFUlQoc3Bhbi0+bGVuZ3RoID4gMCk7CisgICAgQVNT
RVJUKEdldERlc2NyaXB0b3Ioc3Bhbi0+c3RhcnQpID09IHNwYW4pOworICAgIEFTU0VSVChHZXRE
ZXNjcmlwdG9yKHNwYW4tPnN0YXJ0ICsgc3Bhbi0+bGVuZ3RoIC0gMSkgPT0gc3Bhbik7CisgICAg
c3Bhbi0+c2l6ZWNsYXNzID0gMDsKICNpZm5kZWYgTk9fVENNQUxMT0NfU0FNUExFUwotICBzcGFu
LT5zYW1wbGUgPSAwOworICAgIHNwYW4tPnNhbXBsZSA9IDA7CiAjZW5kaWYKIAotICAvLyBDb2Fs
ZXNjZSAtLSB3ZSBndWFyYW50ZWUgdGhhdCAicCIgIT0gMCwgc28gbm8gYm91bmRzIGNoZWNraW5n
Ci0gIC8vIG5lY2Vzc2FyeS4gIFdlIGRvIG5vdCBib3RoZXIgcmVzZXR0aW5nIHRoZSBzdGFsZSBw
YWdlbWFwCi0gIC8vIGVudHJpZXMgZm9yIHRoZSBwaWVjZXMgd2UgYXJlIG1lcmdpbmcgdG9nZXRo
ZXIgYmVjYXVzZSB3ZSBvbmx5Ci0gIC8vIGNhcmUgYWJvdXQgdGhlIHBhZ2VtYXAgZW50cmllcyBm
b3IgdGhlIGJvdW5kYXJpZXMuCisgICAgLy8gQ29hbGVzY2UgLS0gd2UgZ3VhcmFudGVlIHRoYXQg
InAiICE9IDAsIHNvIG5vIGJvdW5kcyBjaGVja2luZworICAgIC8vIG5lY2Vzc2FyeS4gV2UgZG8g
bm90IGJvdGhlciByZXNldHRpbmcgdGhlIHN0YWxlIHBhZ2VtYXAKKyAgICAvLyBlbnRyaWVzIGZv
ciB0aGUgcGllY2VzIHdlIGFyZSBtZXJnaW5nIHRvZ2V0aGVyIGJlY2F1c2Ugd2Ugb25seQorICAg
IC8vIGNhcmUgYWJvdXQgdGhlIHBhZ2VtYXAgZW50cmllcyBmb3IgdGhlIGJvdW5kYXJpZXMuCiAj
aWYgVVNFX0JBQ0tHUk9VTkRfVEhSRUFEX1RPX1NDQVZFTkdFX01FTU9SWQotICAvLyBUcmFjayB0
aGUgdG90YWwgc2l6ZSBvZiB0aGUgbmVpZ2hib3JpbmcgZnJlZSBzcGFucyB0aGF0IGFyZSBjb21t
aXR0ZWQuCi0gIExlbmd0aCBuZWlnaGJvcmluZ0NvbW1pdHRlZFNwYW5zTGVuZ3RoID0gMDsKKyAg
ICAvLyBUcmFjayB0aGUgdG90YWwgc2l6ZSBvZiB0aGUgbmVpZ2hib3JpbmcgZnJlZSBzcGFucyB0
aGF0IGFyZSBjb21taXR0ZWQuCisgICAgTGVuZ3RoIG5laWdoYm9yaW5nQ29tbWl0dGVkU3BhbnNM
ZW5ndGggPSAwOwogI2VuZGlmCi0gIGNvbnN0IFBhZ2VJRCBwID0gc3Bhbi0+c3RhcnQ7Ci0gIGNv
bnN0IExlbmd0aCBuID0gc3Bhbi0+bGVuZ3RoOwotICBTcGFuKiBwcmV2ID0gR2V0RGVzY3JpcHRv
cihwLTEpOwotICBpZiAocHJldiAhPSBOVUxMICYmIHByZXYtPmZyZWUpIHsKLSAgICAvLyBNZXJn
ZSBwcmVjZWRpbmcgc3BhbiBpbnRvIHRoaXMgc3BhbgotICAgIEFTU0VSVChwcmV2LT5zdGFydCAr
IHByZXYtPmxlbmd0aCA9PSBwKTsKLSAgICBjb25zdCBMZW5ndGggbGVuID0gcHJldi0+bGVuZ3Ro
OworICAgIGNvbnN0IFBhZ2VJRCBwID0gc3Bhbi0+c3RhcnQ7CisgICAgY29uc3QgTGVuZ3RoIG4g
PSBzcGFuLT5sZW5ndGg7CisgICAgU3BhbiogcHJldiA9IEdldERlc2NyaXB0b3IocC0xKTsKKyAg
ICBpZiAocHJldiAmJiBwcmV2LT5mcmVlKSB7CisgICAgICAgIC8vIE1lcmdlIHByZWNlZGluZyBz
cGFuIGludG8gdGhpcyBzcGFuCisgICAgICAgIEFTU0VSVChwcmV2LT5zdGFydCArIHByZXYtPmxl
bmd0aCA9PSBwKTsKKyAgICAgICAgY29uc3QgTGVuZ3RoIGxlbiA9IHByZXYtPmxlbmd0aDsKICNp
ZiBVU0VfQkFDS0dST1VORF9USFJFQURfVE9fU0NBVkVOR0VfTUVNT1JZCi0gICAgaWYgKCFwcmV2
LT5kZWNvbW1pdHRlZCkKLSAgICAgICAgbmVpZ2hib3JpbmdDb21taXR0ZWRTcGFuc0xlbmd0aCAr
PSBsZW47CisgICAgICAgIGlmICghcHJldi0+ZGVjb21taXR0ZWQpCisgICAgICAgICAgICBuZWln
aGJvcmluZ0NvbW1pdHRlZFNwYW5zTGVuZ3RoICs9IGxlbjsKICNlbmRpZgotICAgIG1lcmdlRGVj
b21taXR0ZWRTdGF0ZXMoc3BhbiwgcHJldik7Ci0gICAgRExMX1JlbW92ZShwcmV2KTsKLSAgICBE
ZWxldGVTcGFuKHByZXYpOwotICAgIHNwYW4tPnN0YXJ0IC09IGxlbjsKLSAgICBzcGFuLT5sZW5n
dGggKz0gbGVuOwotICAgIHBhZ2VtYXBfLnNldChzcGFuLT5zdGFydCwgc3Bhbik7Ci0gICAgRXZl
bnQoc3BhbiwgJ0wnLCBsZW4pOwotICB9Ci0gIFNwYW4qIG5leHQgPSBHZXREZXNjcmlwdG9yKHAr
bik7Ci0gIGlmIChuZXh0ICE9IE5VTEwgJiYgbmV4dC0+ZnJlZSkgewotICAgIC8vIE1lcmdlIG5l
eHQgc3BhbiBpbnRvIHRoaXMgc3BhbgotICAgIEFTU0VSVChuZXh0LT5zdGFydCA9PSBwK24pOwot
ICAgIGNvbnN0IExlbmd0aCBsZW4gPSBuZXh0LT5sZW5ndGg7CisgICAgICAgIG1lcmdlRGVjb21t
aXR0ZWRTdGF0ZXMoc3BhbiwgcHJldik7CisgICAgICAgIERMTFJlbW92ZShwcmV2KTsKKyAgICAg
ICAgRGVsZXRlU3BhbihwcmV2KTsKKyAgICAgICAgc3Bhbi0+c3RhcnQgLT0gbGVuOworICAgICAg
ICBzcGFuLT5sZW5ndGggKz0gbGVuOworICAgICAgICBwYWdlbWFwLnNldChzcGFuLT5zdGFydCwg
c3Bhbik7CisgICAgICAgIEV2ZW50KHNwYW4sICdMJywgbGVuKTsKKyAgICB9CisgICAgU3Bhbiog
bmV4dCA9IEdldERlc2NyaXB0b3IocCtuKTsKKyAgICBpZiAobmV4dCAmJiBuZXh0LT5mcmVlKSB7
CisgICAgICAgIC8vIE1lcmdlIG5leHQgc3BhbiBpbnRvIHRoaXMgc3BhbgorICAgICAgICBBU1NF
UlQobmV4dC0+c3RhcnQgPT0gcCtuKTsKKyAgICAgICAgY29uc3QgTGVuZ3RoIGxlbiA9IG5leHQt
Pmxlbmd0aDsKICNpZiBVU0VfQkFDS0dST1VORF9USFJFQURfVE9fU0NBVkVOR0VfTUVNT1JZCi0g
ICAgaWYgKCFuZXh0LT5kZWNvbW1pdHRlZCkKLSAgICAgICAgbmVpZ2hib3JpbmdDb21taXR0ZWRT
cGFuc0xlbmd0aCArPSBsZW47CisgICAgICAgIGlmICghbmV4dC0+ZGVjb21taXR0ZWQpCisgICAg
ICAgICAgICBuZWlnaGJvcmluZ0NvbW1pdHRlZFNwYW5zTGVuZ3RoICs9IGxlbjsKICNlbmRpZgot
ICAgIG1lcmdlRGVjb21taXR0ZWRTdGF0ZXMoc3BhbiwgbmV4dCk7Ci0gICAgRExMX1JlbW92ZShu
ZXh0KTsKLSAgICBEZWxldGVTcGFuKG5leHQpOwotICAgIHNwYW4tPmxlbmd0aCArPSBsZW47Ci0g
ICAgcGFnZW1hcF8uc2V0KHNwYW4tPnN0YXJ0ICsgc3Bhbi0+bGVuZ3RoIC0gMSwgc3Bhbik7Ci0g
ICAgRXZlbnQoc3BhbiwgJ1InLCBsZW4pOwotICB9Ci0KLSAgRXZlbnQoc3BhbiwgJ0QnLCBzcGFu
LT5sZW5ndGgpOwotICBzcGFuLT5mcmVlID0gMTsKLSAgaWYgKHNwYW4tPmRlY29tbWl0dGVkKSB7
Ci0gICAgaWYgKHNwYW4tPmxlbmd0aCA8IGtNYXhQYWdlcykKLSAgICAgIERMTF9QcmVwZW5kKCZm
cmVlX1tzcGFuLT5sZW5ndGhdLnJldHVybmVkLCBzcGFuKTsKLSAgICBlbHNlCi0gICAgICBETExf
UHJlcGVuZCgmbGFyZ2VfLnJldHVybmVkLCBzcGFuKTsKLSAgfSBlbHNlIHsKLSAgICBpZiAoc3Bh
bi0+bGVuZ3RoIDwga01heFBhZ2VzKQotICAgICAgRExMX1ByZXBlbmQoJmZyZWVfW3NwYW4tPmxl
bmd0aF0ubm9ybWFsLCBzcGFuKTsKLSAgICBlbHNlCi0gICAgICBETExfUHJlcGVuZCgmbGFyZ2Vf
Lm5vcm1hbCwgc3Bhbik7Ci0gIH0KLSAgZnJlZV9wYWdlc18gKz0gbjsKKyAgICAgICAgbWVyZ2VE
ZWNvbW1pdHRlZFN0YXRlcyhzcGFuLCBuZXh0KTsKKyAgICAgICAgRExMUmVtb3ZlKG5leHQpOwor
ICAgICAgICBEZWxldGVTcGFuKG5leHQpOworICAgICAgICBzcGFuLT5sZW5ndGggKz0gbGVuOwor
ICAgICAgICBwYWdlbWFwLnNldChzcGFuLT5zdGFydCArIHNwYW4tPmxlbmd0aCAtIDEsIHNwYW4p
OworICAgICAgICBFdmVudChzcGFuLCAnUicsIGxlbik7CisgICAgfQorCisgICAgRXZlbnQoc3Bh
biwgJ0QnLCBzcGFuLT5sZW5ndGgpOworICAgIHNwYW4tPmZyZWUgPSAxOworICAgIGlmIChzcGFu
LT5kZWNvbW1pdHRlZCkgeworICAgICAgICBpZiAoc3Bhbi0+bGVuZ3RoIDwga01heFBhZ2VzKQor
ICAgICAgICAgICAgRExMUHJlcGVuZCgmZnJlZVNwYW5MaXN0W3NwYW4tPmxlbmd0aF0ucmV0dXJu
ZWQsIHNwYW4pOworICAgICAgICBlbHNlCisgICAgICAgICAgICBETExQcmVwZW5kKCZsYXJnZS5y
ZXR1cm5lZCwgc3Bhbik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHNwYW4tPmxlbmd0aCA8
IGtNYXhQYWdlcykKKyAgICAgICAgICAgIERMTFByZXBlbmQoJmZyZWVTcGFuTGlzdFtzcGFuLT5s
ZW5ndGhdLm5vcm1hbCwgc3Bhbik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIERMTFByZXBl
bmQoJmxhcmdlLm5vcm1hbCwgc3Bhbik7CisgICAgfQorICAgIGZyZWVQYWdlcyArPSBuOwogCiAj
aWYgVVNFX0JBQ0tHUk9VTkRfVEhSRUFEX1RPX1NDQVZFTkdFX01FTU9SWQotICBpZiAoc3Bhbi0+
ZGVjb21taXR0ZWQpIHsKLSAgICAgIC8vIElmIHRoZSBtZXJnZWQgc3BhbiBpcyBkZWNvbW1pdHRl
ZCwgdGhhdCBtZWFucyB3ZSBkZWNvbW1pdHRlZCBhbnkgbmVpZ2hib3Jpbmcgc3BhbnMgdGhhdCB3
ZXJlCi0gICAgICAvLyBjb21taXR0ZWQuICBVcGRhdGUgdGhlIGZyZWUgY29tbWl0dGVkIHBhZ2Vz
IGNvdW50LgotICAgICAgZnJlZV9jb21taXR0ZWRfcGFnZXNfIC09IG5laWdoYm9yaW5nQ29tbWl0
dGVkU3BhbnNMZW5ndGg7Ci0gICAgICBpZiAoZnJlZV9jb21taXR0ZWRfcGFnZXNfIDwgbWluX2Zy
ZWVfY29tbWl0dGVkX3BhZ2VzX3NpbmNlX2xhc3Rfc2NhdmVuZ2VfKQotICAgICAgICAgICAgbWlu
X2ZyZWVfY29tbWl0dGVkX3BhZ2VzX3NpbmNlX2xhc3Rfc2NhdmVuZ2VfID0gZnJlZV9jb21taXR0
ZWRfcGFnZXNfOwotICB9IGVsc2UgewotICAgICAgLy8gSWYgdGhlIG1lcmdlZCBzcGFuIHJlbWFp
bnMgY29tbWl0dGVkLCBhZGQgdGhlIGRlbGV0ZWQgc3BhbidzIHNpemUgdG8gdGhlIGZyZWUgY29t
bWl0dGVkIHBhZ2VzIGNvdW50LgotICAgICAgZnJlZV9jb21taXR0ZWRfcGFnZXNfICs9IG47Ci0g
IH0KKyAgICBpZiAoc3Bhbi0+ZGVjb21taXR0ZWQpIHsKKyAgICAgICAgLy8gSWYgdGhlIG1lcmdl
ZCBzcGFuIGlzIGRlY29tbWl0dGVkLCB0aGF0IG1lYW5zIHdlIGRlY29tbWl0dGVkIGFueSBuZWln
aGJvcmluZyBzcGFucyB0aGF0IHdlcmUKKyAgICAgICAgLy8gY29tbWl0dGVkLiBVcGRhdGUgdGhl
IGZyZWUgY29tbWl0dGVkIHBhZ2VzIGNvdW50LgorICAgICAgICBmcmVlQ29tbWl0dGVkUGFnZXMg
LT0gbmVpZ2hib3JpbmdDb21taXR0ZWRTcGFuc0xlbmd0aDsKKyAgICAgICAgaWYgKGZyZWVDb21t
aXR0ZWRQYWdlcyA8IG1pbkZyZWVDb21taXR0ZWRQYWdlc1NpbmNlTGFzdFNjYXZlbmdlKQorICAg
ICAgICAgICAgbWluRnJlZUNvbW1pdHRlZFBhZ2VzU2luY2VMYXN0U2NhdmVuZ2UgPSBmcmVlQ29t
bWl0dGVkUGFnZXM7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gSWYgdGhlIG1lcmdlZCBzcGFu
IHJlbWFpbnMgY29tbWl0dGVkLCBhZGQgdGhlIGRlbGV0ZWQgc3BhbidzIHNpemUgdG8gdGhlIGZy
ZWUgY29tbWl0dGVkIHBhZ2VzIGNvdW50LgorICAgICAgICBmcmVlQ29tbWl0dGVkUGFnZXMgKz0g
bjsKKyAgICB9CiAKLSAgLy8gTWFrZSBzdXJlIHRoZSBzY2F2ZW5nZSB0aHJlYWQgYmVjb21lcyBh
Y3RpdmUgaWYgd2UgaGF2ZSBlbm91Z2ggZnJlZWQgcGFnZXMgdG8gcmVsZWFzZSBzb21lIGJhY2sg
dG8gdGhlIHN5c3RlbS4KLSAgc2lnbmFsU2NhdmVuZ2VyKCk7CisgICAgLy8gTWFrZSBzdXJlIHRo
ZSBzY2F2ZW5nZSB0aHJlYWQgYmVjb21lcyBhY3RpdmUgaWYgd2UgaGF2ZSBlbm91Z2ggZnJlZWQg
cGFnZXMgdG8gcmVsZWFzZSBzb21lIGJhY2sgdG8gdGhlIHN5c3RlbS4KKyAgICBzaWduYWxTY2F2
ZW5nZXIoKTsKICNlbHNlCi0gIEluY3JlbWVudGFsU2NhdmVuZ2Uobik7CisgICAgSW5jcmVtZW50
YWxTY2F2ZW5nZShuKTsKICNlbmRpZgogCi0gIEFTU0VSVChDaGVjaygpKTsKKyAgICBBU1NFUlQo
Q2hlY2soKSk7CiB9CiAKICNpZiAhVVNFX0JBQ0tHUk9VTkRfVEhSRUFEX1RPX1NDQVZFTkdFX01F
TU9SWQotdm9pZCBUQ01hbGxvY19QYWdlSGVhcDo6SW5jcmVtZW50YWxTY2F2ZW5nZShMZW5ndGgg
bikgewotICAvLyBGYXN0IHBhdGg7IG5vdCB5ZXQgdGltZSB0byByZWxlYXNlIG1lbW9yeQotICBz
Y2F2ZW5nZV9jb3VudGVyXyAtPSBuOwotICBpZiAoc2NhdmVuZ2VfY291bnRlcl8gPj0gMCkgcmV0
dXJuOyAgLy8gTm90IHlldCB0aW1lIHRvIHNjYXZlbmdlCit2b2lkIFRDTWFsbG9jUGFnZUhlYXA6
OkluY3JlbWVudGFsU2NhdmVuZ2UoTGVuZ3RoIG4pCit7CisgICAgLy8gRmFzdCBwYXRoOyBub3Qg
eWV0IHRpbWUgdG8gcmVsZWFzZSBtZW1vcnkKKyAgICBzY2F2ZW5nZUNvdW50ZXIgLT0gbjsKKyAg
ICBpZiAoc2NhdmVuZ2VDb3VudGVyID49IDApCisgICAgICAgIHJldHVybjsgLy8gTm90IHlldCB0
aW1lIHRvIHNjYXZlbmdlCiAKICNpZiBQTEFURk9STShJT1MpCi0gIHN0YXRpYyBjb25zdCBzaXpl
X3Qga0RlZmF1bHRSZWxlYXNlRGVsYXkgPSA2NDsKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGtE
ZWZhdWx0UmVsZWFzZURlbGF5ID0gNjQ7CiAjZWxzZQotICAvLyBJZiB0aGVyZSBpcyBub3RoaW5n
IHRvIHJlbGVhc2UsIHdhaXQgZm9yIHNvIG1hbnkgcGFnZXMgYmVmb3JlCi0gIC8vIHNjYXZlbmdp
bmcgYWdhaW4uICBXaXRoIDRLIHBhZ2VzLCB0aGlzIGNvbWVzIHRvIDE2TUIgb2YgbWVtb3J5Lgot
ICBzdGF0aWMgY29uc3Qgc2l6ZV90IGtEZWZhdWx0UmVsZWFzZURlbGF5ID0gMSA8PCA4OwotI2Vu
ZGlmCi0KLSAgLy8gRmluZCBpbmRleCBvZiBmcmVlIGxpc3QgdG8gc2NhdmVuZ2UKLSAgc2l6ZV90
IGluZGV4ID0gc2NhdmVuZ2VfaW5kZXhfICsgMTsKLSAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBr
TWF4UGFnZXMrMTsgaSsrKSB7Ci0gICAgaWYgKGluZGV4ID4ga01heFBhZ2VzKSBpbmRleCA9IDA7
Ci0gICAgU3Bhbkxpc3QqIHNsaXN0ID0gKGluZGV4ID09IGtNYXhQYWdlcykgPyAmbGFyZ2VfIDog
JmZyZWVfW2luZGV4XTsKLSAgICBpZiAoIURMTF9Jc0VtcHR5KCZzbGlzdC0+bm9ybWFsKSkgewot
ICAgICAgLy8gUmVsZWFzZSB0aGUgbGFzdCBzcGFuIG9uIHRoZSBub3JtYWwgcG9ydGlvbiBvZiB0
aGlzIGxpc3QKLSAgICAgIFNwYW4qIHMgPSBzbGlzdC0+bm9ybWFsLnByZXY7Ci0gICAgICBETExf
UmVtb3ZlKHMpOwotICAgICAgVENNYWxsb2NfU3lzdGVtUmVsZWFzZShyZWludGVycHJldF9jYXN0
PHZvaWQqPihzLT5zdGFydCA8PCBrUGFnZVNoaWZ0KSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8c2l6ZV90PihzLT5sZW5ndGggPDwga1BhZ2VTaGlmdCkpOwotICAg
ICAgcy0+ZGVjb21taXR0ZWQgPSB0cnVlOwotICAgICAgRExMX1ByZXBlbmQoJnNsaXN0LT5yZXR1
cm5lZCwgcyk7CisgICAgLy8gSWYgdGhlcmUgaXMgbm90aGluZyB0byByZWxlYXNlLCB3YWl0IGZv
ciBzbyBtYW55IHBhZ2VzIGJlZm9yZQorICAgIC8vIHNjYXZlbmdpbmcgYWdhaW4uIFdpdGggNEsg
cGFnZXMsIHRoaXMgY29tZXMgdG8gMTZNQiBvZiBtZW1vcnkuCisgICAgc3RhdGljIGNvbnN0IHNp
emVfdCBrRGVmYXVsdFJlbGVhc2VEZWxheSA9IDEgPDwgODsKKyNlbmRpZgorCisgICAgLy8gRmlu
ZCBpbmRleCBvZiBmcmVlIGxpc3QgdG8gc2NhdmVuZ2UKKyAgICBzaXplX3QgaW5kZXggPSBzY2F2
ZW5nZUluZGV4ICsgMTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtNYXhQYWdlcysxOyBp
KyspIHsKKyAgICAgICAgaWYgKGluZGV4ID4ga01heFBhZ2VzKQorICAgICAgICAgICAgaW5kZXgg
PSAwOworICAgICAgICBTcGFuTGlzdCogc2xpc3QgPSAoaW5kZXggPT0ga01heFBhZ2VzKSA/ICZs
YXJnZSA6ICZmcmVlU3Bhbkxpc3RbaW5kZXhdOworICAgICAgICBpZiAoIURMTF9Jc0VtcHR5KCZz
bGlzdC0+bm9ybWFsKSkgeworICAgICAgICAgICAgLy8gUmVsZWFzZSB0aGUgbGFzdCBzcGFuIG9u
IHRoZSBub3JtYWwgcG9ydGlvbiBvZiB0aGlzIGxpc3QKKyAgICAgICAgICAgIFNwYW4qIHMgPSBz
bGlzdC0+bm9ybWFsLnByZXY7CisgICAgICAgICAgICBETExSZW1vdmUocyk7CisgICAgICAgICAg
ICBUQ01hbGxvY19TeXN0ZW1SZWxlYXNlKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHMtPnN0YXJ0
IDw8IGtQYWdlU2hpZnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8c2l6ZV90PihzLT5sZW5ndGggPDwga1BhZ2VTaGlmdCkpOworICAgICAgICAgICAg
cy0+ZGVjb21taXR0ZWQgPSB0cnVlOworICAgICAgICAgICAgRExMUHJlcGVuZCgmc2xpc3QtPnJl
dHVybmVkLCBzKTsKIAogI2lmIFBMQVRGT1JNKElPUykKLSAgICAgIHNjYXZlbmdlX2NvdW50ZXJf
ID0gc3RkOjptYXg8c2l6ZV90PigxNlVMLCBzdGQ6Om1pbjxzaXplX3Q+KGtEZWZhdWx0UmVsZWFz
ZURlbGF5LCBrRGVmYXVsdFJlbGVhc2VEZWxheSAtIChmcmVlX3BhZ2VzXyAvIGtEZWZhdWx0UmVs
ZWFzZURlbGF5KSkpOworICAgICAgICAgICAgc2NhdmVuZ2VDb3VudGVyID0gc3RkOjptYXg8c2l6
ZV90PigxNlVMLCBzdGQ6Om1pbjxzaXplX3Q+KGtEZWZhdWx0UmVsZWFzZURlbGF5LCBrRGVmYXVs
dFJlbGVhc2VEZWxheSAtIChmcmVlUGFnZXMgLyBrRGVmYXVsdFJlbGVhc2VEZWxheSkpKTsKICNl
bHNlCi0gICAgICBzY2F2ZW5nZV9jb3VudGVyXyA9IHN0ZDo6bWF4PHNpemVfdD4oNjRVTCwgc3Rk
OjptaW48c2l6ZV90PihrRGVmYXVsdFJlbGVhc2VEZWxheSwga0RlZmF1bHRSZWxlYXNlRGVsYXkg
LSAoZnJlZV9wYWdlc18gLyBrRGVmYXVsdFJlbGVhc2VEZWxheSkpKTsKKyAgICAgICAgICAgIHNj
YXZlbmdlQ291bnRlciA9IHN0ZDo6bWF4PHNpemVfdD4oNjRVTCwgc3RkOjptaW48c2l6ZV90Pihr
RGVmYXVsdFJlbGVhc2VEZWxheSwga0RlZmF1bHRSZWxlYXNlRGVsYXkgLSAoZnJlZVBhZ2VzIC8g
a0RlZmF1bHRSZWxlYXNlRGVsYXkpKSk7CiAjZW5kaWYKIAotICAgICAgaWYgKGluZGV4ID09IGtN
YXhQYWdlcyAmJiAhRExMX0lzRW1wdHkoJnNsaXN0LT5ub3JtYWwpKQotICAgICAgICBzY2F2ZW5n
ZV9pbmRleF8gPSBpbmRleCAtIDE7Ci0gICAgICBlbHNlCi0gICAgICAgIHNjYXZlbmdlX2luZGV4
XyA9IGluZGV4OwotICAgICAgcmV0dXJuOworICAgICAgICAgICAgaWYgKGluZGV4ID09IGtNYXhQ
YWdlcyAmJiAhRExMX0lzRW1wdHkoJnNsaXN0LT5ub3JtYWwpKQorICAgICAgICAgICAgICAgIHNj
YXZlbmdlSW5kZXggPSBpbmRleCAtIDE7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgc2NhdmVuZ2VJbmRleCA9IGluZGV4OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIGluZGV4Kys7CiAgICAgfQotICAgIGluZGV4Kys7Ci0gIH0KIAotICAvLyBOb3Ro
aW5nIHRvIHNjYXZlbmdlLCBkZWxheSBmb3IgYSB3aGlsZQotICBzY2F2ZW5nZV9jb3VudGVyXyA9
IGtEZWZhdWx0UmVsZWFzZURlbGF5OworICAgIC8vIE5vdGhpbmcgdG8gc2NhdmVuZ2UsIGRlbGF5
IGZvciBhIHdoaWxlCisgICAgc2NhdmVuZ2VDb3VudGVyID0ga0RlZmF1bHRSZWxlYXNlRGVsYXk7
CiB9CiAjZW5kaWYKIAotdm9pZCBUQ01hbGxvY19QYWdlSGVhcDo6UmVnaXN0ZXJTaXplQ2xhc3Mo
U3Bhbiogc3Bhbiwgc2l6ZV90IHNjKSB7Ci0gIC8vIEFzc29jaWF0ZSBzcGFuIG9iamVjdCB3aXRo
IGFsbCBpbnRlcmlvciBwYWdlcyBhcyB3ZWxsCi0gIEFTU0VSVCghc3Bhbi0+ZnJlZSk7Ci0gIEFT
U0VSVChHZXREZXNjcmlwdG9yKHNwYW4tPnN0YXJ0KSA9PSBzcGFuKTsKLSAgQVNTRVJUKEdldERl
c2NyaXB0b3Ioc3Bhbi0+c3RhcnQrc3Bhbi0+bGVuZ3RoLTEpID09IHNwYW4pOwotICBFdmVudChz
cGFuLCAnQycsIHNjKTsKLSAgc3Bhbi0+c2l6ZWNsYXNzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQg
aW50PihzYyk7Ci0gIGZvciAoTGVuZ3RoIGkgPSAxOyBpIDwgc3Bhbi0+bGVuZ3RoLTE7IGkrKykg
ewotICAgIHBhZ2VtYXBfLnNldChzcGFuLT5zdGFydCtpLCBzcGFuKTsKLSAgfQordm9pZCBUQ01h
bGxvY1BhZ2VIZWFwOjpSZWdpc3RlclNpemVDbGFzcyhTcGFuKiBzcGFuLCBzaXplX3Qgc2MpCit7
CisgICAgLy8gQXNzb2NpYXRlIHNwYW4gb2JqZWN0IHdpdGggYWxsIGludGVyaW9yIHBhZ2VzIGFz
IHdlbGwKKyAgICBBU1NFUlQoIXNwYW4tPmZyZWUpOworICAgIEFTU0VSVChHZXREZXNjcmlwdG9y
KHNwYW4tPnN0YXJ0KSA9PSBzcGFuKTsKKyAgICBBU1NFUlQoR2V0RGVzY3JpcHRvcihzcGFuLT5z
dGFydCtzcGFuLT5sZW5ndGgtMSkgPT0gc3Bhbik7CisgICAgRXZlbnQoc3BhbiwgJ0MnLCBzYyk7
CisgICAgc3Bhbi0+c2l6ZWNsYXNzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihzYyk7Cisg
ICAgZm9yIChMZW5ndGggaSA9IDE7IGkgPCBzcGFuLT5sZW5ndGgtMTsgaSsrKQorICAgICAgICBw
YWdlbWFwLnNldChzcGFuLT5zdGFydCtpLCBzcGFuKTsKIH0KICAgICAKICNpZmRlZiBXVEZfQ0hB
TkdFUwotc2l6ZV90IFRDTWFsbG9jX1BhZ2VIZWFwOjpSZXR1cm5lZEJ5dGVzKCkgY29uc3Qgewor
c2l6ZV90IFRDTWFsbG9jUGFnZUhlYXA6OlJldHVybmVkQnl0ZXMoKSBjb25zdAorewogICAgIHNp
emVfdCByZXN1bHQgPSAwOwogICAgIGZvciAodW5zaWduZWQgcyA9IDA7IHMgPCBrTWF4UGFnZXM7
IHMrKykgewotICAgICAgICBjb25zdCBpbnQgcl9sZW5ndGggPSBETExfTGVuZ3RoKCZmcmVlX1tz
XS5yZXR1cm5lZCk7Ci0gICAgICAgIHVuc2lnbmVkIHJfcGFnZXMgPSBzICogcl9sZW5ndGg7Ci0g
ICAgICAgIHJlc3VsdCArPSByX3BhZ2VzIDw8IGtQYWdlU2hpZnQ7CisgICAgICAgIGNvbnN0IGlu
dCByTGVuZ3RoID0gRExMTGVuZ3RoKCZmcmVlU3Bhbkxpc3Rbc10ucmV0dXJuZWQpOworICAgICAg
ICB1bnNpZ25lZCByUGFnZXMgPSBzICogckxlbmd0aDsKKyAgICAgICAgcmVzdWx0ICs9IHJQYWdl
cyA8PCBrUGFnZVNoaWZ0OwogICAgIH0KICAgICAKLSAgICBmb3IgKFNwYW4qIHMgPSBsYXJnZV8u
cmV0dXJuZWQubmV4dDsgcyAhPSAmbGFyZ2VfLnJldHVybmVkOyBzID0gcy0+bmV4dCkKKyAgICBm
b3IgKFNwYW4qIHMgPSBsYXJnZS5yZXR1cm5lZC5uZXh0OyBzICE9ICZsYXJnZS5yZXR1cm5lZDsg
cyA9IHMtPm5leHQpCiAgICAgICAgIHJlc3VsdCArPSBzLT5sZW5ndGggPDwga1BhZ2VTaGlmdDsK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogI2VuZGlmCiAKICNpZm5kZWYgV1RGX0NIQU5HRVMKLXN0
YXRpYyBkb3VibGUgUGFnZXNUb01CKHVpbnQ2NF90IHBhZ2VzKSB7CitzdGF0aWMgZG91YmxlIFBh
Z2VzVG9NQih1aW50NjRfdCBwYWdlcykKK3sKICAgcmV0dXJuIChwYWdlcyA8PCBrUGFnZVNoaWZ0
KSAvIDEwNDg1NzYuMDsKIH0KIAotdm9pZCBUQ01hbGxvY19QYWdlSGVhcDo6RHVtcChUQ01hbGxv
Y19QcmludGVyKiBvdXQpIHsKLSAgaW50IG5vbmVtcHR5X3NpemVzID0gMDsKLSAgZm9yIChpbnQg
cyA9IDA7IHMgPCBrTWF4UGFnZXM7IHMrKykgewotICAgIGlmICghRExMX0lzRW1wdHkoJmZyZWVf
W3NdLm5vcm1hbCkgfHwgIURMTF9Jc0VtcHR5KCZmcmVlX1tzXS5yZXR1cm5lZCkpIHsKLSAgICAg
IG5vbmVtcHR5X3NpemVzKys7Ci0gICAgfQotICB9Ci0gIG91dC0+cHJpbnRmKCItLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwotICBvdXQtPnByaW50
ZigiUGFnZUhlYXA6ICVkIHNpemVzOyAlNi4xZiBNQiBmcmVlXG4iLAotICAgICAgICAgICAgICBu
b25lbXB0eV9zaXplcywgUGFnZXNUb01CKGZyZWVfcGFnZXNfKSk7Ci0gIG91dC0+cHJpbnRmKCIt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwotICB1
aW50NjRfdCB0b3RhbF9ub3JtYWwgPSAwOwotICB1aW50NjRfdCB0b3RhbF9yZXR1cm5lZCA9IDA7
Ci0gIGZvciAoaW50IHMgPSAwOyBzIDwga01heFBhZ2VzOyBzKyspIHsKLSAgICBjb25zdCBpbnQg
bl9sZW5ndGggPSBETExfTGVuZ3RoKCZmcmVlX1tzXS5ub3JtYWwpOwotICAgIGNvbnN0IGludCBy
X2xlbmd0aCA9IERMTF9MZW5ndGgoJmZyZWVfW3NdLnJldHVybmVkKTsKLSAgICBpZiAobl9sZW5n
dGggKyByX2xlbmd0aCA+IDApIHsKLSAgICAgIHVpbnQ2NF90IG5fcGFnZXMgPSBzICogbl9sZW5n
dGg7Ci0gICAgICB1aW50NjRfdCByX3BhZ2VzID0gcyAqIHJfbGVuZ3RoOwotICAgICAgdG90YWxf
bm9ybWFsICs9IG5fcGFnZXM7Ci0gICAgICB0b3RhbF9yZXR1cm5lZCArPSByX3BhZ2VzOwotICAg
ICAgb3V0LT5wcmludGYoIiU2dSBwYWdlcyAqICU2dSBzcGFucyB+ICU2LjFmIE1COyAlNi4xZiBN
QiBjdW0iCi0gICAgICAgICAgICAgICAgICAiOyB1bm1hcHBlZDogJTYuMWYgTUI7ICU2LjFmIE1C
IGN1bVxuIiwKLSAgICAgICAgICAgICAgICAgIHMsCi0gICAgICAgICAgICAgICAgICAobl9sZW5n
dGggKyByX2xlbmd0aCksCi0gICAgICAgICAgICAgICAgICBQYWdlc1RvTUIobl9wYWdlcyArIHJf
cGFnZXMpLAotICAgICAgICAgICAgICAgICAgUGFnZXNUb01CKHRvdGFsX25vcm1hbCArIHRvdGFs
X3JldHVybmVkKSwKLSAgICAgICAgICAgICAgICAgIFBhZ2VzVG9NQihyX3BhZ2VzKSwKLSAgICAg
ICAgICAgICAgICAgIFBhZ2VzVG9NQih0b3RhbF9yZXR1cm5lZCkpOwordm9pZCBUQ01hbGxvY1Bh
Z2VIZWFwOjpEdW1wKFRDTWFsbG9jX1ByaW50ZXIqIG91dCkKK3sKKyAgICBpbnQgbm9uZW1wdHlT
aXplcyA9IDA7CisgICAgZm9yIChpbnQgcyA9IDA7IHMgPCBrTWF4UGFnZXM7IHMrKykKKyAgICAg
ICAgaWYgKCFETExfSXNFbXB0eSgmZnJlZVNwYW5MaXN0W3NdLm5vcm1hbCkgfHwgIURMTF9Jc0Vt
cHR5KCZmcmVlU3Bhbkxpc3Rbc10ucmV0dXJuZWQpKQorICAgICAgICAgICAgbm9uZW1wdHlTaXpl
cysrOworICAgIG91dC0+cHJpbnRmKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS1cbiIpOworICAgIG91dC0+cHJpbnRmKCJQYWdlSGVhcDogJWQgc2l6ZXM7
ICU2LjFmIE1CIGZyZWVcbiIsCisgICAgICAgICAgICAgICAgbm9uZW1wdHlTaXplcywgUGFnZXNU
b01CKGZyZWVQYWdlcykpOworICAgIG91dC0+cHJpbnRmKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworICAgIHVpbnQ2NF90IHRvdGFsTm9ybWFs
ID0gMDsKKyAgICB1aW50NjRfdCB0b3RhbFJldHVybmVkID0gMDsKKyAgICBmb3IgKGludCBzID0g
MDsgcyA8IGtNYXhQYWdlczsgcysrKSB7CisgICAgICAgIGNvbnN0IGludCBuTGVuZ3RoID0gRExM
TGVuZ3RoKCZmcmVlU3Bhbkxpc3Rbc10ubm9ybWFsKTsKKyAgICAgICAgY29uc3QgaW50IHJMZW5n
dGggPSBETExMZW5ndGgoJmZyZWVTcGFuTGlzdFtzXS5yZXR1cm5lZCk7CisgICAgICAgIGlmIChu
TGVuZ3RoICsgckxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgIHVpbnQ2NF90IG5QYWdlcyA9IHMg
KiBuTGVuZ3RoOworICAgICAgICAgICAgdWludDY0X3QgclBhZ2VzID0gcyAqIHJMZW5ndGg7Cisg
ICAgICAgICAgICB0b3RhbE5vcm1hbCArPSBuUGFnZXM7CisgICAgICAgICAgICB0b3RhbFJldHVy
bmVkICs9IHJQYWdlczsKKyAgICAgICAgICAgIG91dC0+cHJpbnRmKCIlNnUgcGFnZXMgKiAlNnUg
c3BhbnMgfiAlNi4xZiBNQjsgJTYuMWYgTUIgY3VtIgorICAgICAgICAgICAgICAgICAgICAgICAg
IjsgdW5tYXBwZWQ6ICU2LjFmIE1COyAlNi4xZiBNQiBjdW1cbiIsCisgICAgICAgICAgICAgICAg
ICAgICAgICBzLAorICAgICAgICAgICAgICAgICAgICAgICAgKG5MZW5ndGggKyByTGVuZ3RoKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgIFBhZ2VzVG9NQihuUGFnZXMgKyByUGFnZXMpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgUGFnZXNUb01CKHRvdGFsTm9ybWFsICsgdG90YWxSZXR1cm5l
ZCksCisgICAgICAgICAgICAgICAgICAgICAgICBQYWdlc1RvTUIoclBhZ2VzKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIFBhZ2VzVG9NQih0b3RhbFJldHVybmVkKSk7CisgICAgICAgIH0KICAg
ICB9Ci0gIH0KIAotICB1aW50NjRfdCBuX3BhZ2VzID0gMDsKLSAgdWludDY0X3Qgcl9wYWdlcyA9
IDA7Ci0gIGludCBuX3NwYW5zID0gMDsKLSAgaW50IHJfc3BhbnMgPSAwOwotICBvdXQtPnByaW50
ZigiTm9ybWFsIGxhcmdlIHNwYW5zOlxuIik7Ci0gIGZvciAoU3BhbiogcyA9IGxhcmdlXy5ub3Jt
YWwubmV4dDsgcyAhPSAmbGFyZ2VfLm5vcm1hbDsgcyA9IHMtPm5leHQpIHsKLSAgICBvdXQtPnBy
aW50ZigiICAgWyAlNiIgUFJJdVMgIiBwYWdlcyBdICU2LjFmIE1CXG4iLAotICAgICAgICAgICAg
ICAgIHMtPmxlbmd0aCwgUGFnZXNUb01CKHMtPmxlbmd0aCkpOwotICAgIG5fcGFnZXMgKz0gcy0+
bGVuZ3RoOwotICAgIG5fc3BhbnMrKzsKLSAgfQotICBvdXQtPnByaW50ZigiVW5tYXBwZWQgbGFy
Z2Ugc3BhbnM6XG4iKTsKLSAgZm9yIChTcGFuKiBzID0gbGFyZ2VfLnJldHVybmVkLm5leHQ7IHMg
IT0gJmxhcmdlXy5yZXR1cm5lZDsgcyA9IHMtPm5leHQpIHsKLSAgICBvdXQtPnByaW50ZigiICAg
WyAlNiIgUFJJdVMgIiBwYWdlcyBdICU2LjFmIE1CXG4iLAotICAgICAgICAgICAgICAgIHMtPmxl
bmd0aCwgUGFnZXNUb01CKHMtPmxlbmd0aCkpOwotICAgIHJfcGFnZXMgKz0gcy0+bGVuZ3RoOwot
ICAgIHJfc3BhbnMrKzsKLSAgfQotICB0b3RhbF9ub3JtYWwgKz0gbl9wYWdlczsKLSAgdG90YWxf
cmV0dXJuZWQgKz0gcl9wYWdlczsKLSAgb3V0LT5wcmludGYoIj4yNTUgICBsYXJnZSAqICU2dSBz
cGFucyB+ICU2LjFmIE1COyAlNi4xZiBNQiBjdW0iCi0gICAgICAgICAgICAgICI7IHVubWFwcGVk
OiAlNi4xZiBNQjsgJTYuMWYgTUIgY3VtXG4iLAotICAgICAgICAgICAgICAobl9zcGFucyArIHJf
c3BhbnMpLAotICAgICAgICAgICAgICBQYWdlc1RvTUIobl9wYWdlcyArIHJfcGFnZXMpLAotICAg
ICAgICAgICAgICBQYWdlc1RvTUIodG90YWxfbm9ybWFsICsgdG90YWxfcmV0dXJuZWQpLAotICAg
ICAgICAgICAgICBQYWdlc1RvTUIocl9wYWdlcyksCi0gICAgICAgICAgICAgIFBhZ2VzVG9NQih0
b3RhbF9yZXR1cm5lZCkpOworICAgIHVpbnQ2NF90IG5QYWdlcyA9IDA7CisgICAgdWludDY0X3Qg
clBhZ2VzID0gMDsKKyAgICBpbnQgblNwYW5zID0gMDsKKyAgICBpbnQgclNwYW5zID0gMDsKKyAg
ICBvdXQtPnByaW50ZigiTm9ybWFsIGxhcmdlIHNwYW5zOlxuIik7CisgICAgZm9yIChTcGFuKiBz
ID0gbGFyZ2Uubm9ybWFsLm5leHQ7IHMgIT0gJmxhcmdlLm5vcm1hbDsgcyA9IHMtPm5leHQpIHsK
KyAgICAgICAgb3V0LT5wcmludGYoIiAgIFsgJTYiIFBSSXVTICIgcGFnZXMgXSAlNi4xZiBNQlxu
IiwKKyAgICAgICAgICAgICAgICAgICAgcy0+bGVuZ3RoLCBQYWdlc1RvTUIocy0+bGVuZ3RoKSk7
CisgICAgICAgIG5QYWdlcyArPSBzLT5sZW5ndGg7CisgICAgICAgIG5TcGFucysrOworICAgIH0K
KyAgICBvdXQtPnByaW50ZigiVW5tYXBwZWQgbGFyZ2Ugc3BhbnM6XG4iKTsKKyAgICBmb3IgKFNw
YW4qIHMgPSBsYXJnZS5yZXR1cm5lZC5uZXh0OyBzICE9ICZsYXJnZS5yZXR1cm5lZDsgcyA9IHMt
Pm5leHQpIHsKKyAgICAgICAgb3V0LT5wcmludGYoIiAgIFsgJTYiIFBSSXVTICIgcGFnZXMgXSAl
Ni4xZiBNQlxuIiwKKyAgICAgICAgICAgICAgICAgICAgcy0+bGVuZ3RoLCBQYWdlc1RvTUIocy0+
bGVuZ3RoKSk7CisgICAgICAgIHJQYWdlcyArPSBzLT5sZW5ndGg7CisgICAgICAgIHJTcGFucysr
OworICAgIH0KKyAgICB0b3RhbE5vcm1hbCArPSBuUGFnZXM7CisgICAgdG90YWxSZXR1cm5lZCAr
PSByUGFnZXM7CisgICAgb3V0LT5wcmludGYoIj4yNTUgICBsYXJnZSAqICU2dSBzcGFucyB+ICU2
LjFmIE1COyAlNi4xZiBNQiBjdW0iCisgICAgICAgICAgICAgICAgIjsgdW5tYXBwZWQ6ICU2LjFm
IE1COyAlNi4xZiBNQiBjdW1cbiIsCisgICAgICAgICAgICAgICAgKG5TcGFucyArIHJTcGFucyks
CisgICAgICAgICAgICAgICAgUGFnZXNUb01CKG5QYWdlcyArIHJQYWdlcyksCisgICAgICAgICAg
ICAgICAgUGFnZXNUb01CKHRvdGFsTm9ybWFsICsgdG90YWxSZXR1cm5lZCksCisgICAgICAgICAg
ICAgICAgUGFnZXNUb01CKHJQYWdlcyksCisgICAgICAgICAgICAgICAgUGFnZXNUb01CKHRvdGFs
UmV0dXJuZWQpKTsKIH0KICNlbmRpZgogCi1ib29sIFRDTWFsbG9jX1BhZ2VIZWFwOjpHcm93SGVh
cChMZW5ndGggbikgewotICBBU1NFUlQoa01heFBhZ2VzID49IGtNaW5TeXN0ZW1BbGxvYyk7Ci0g
IGlmIChuID4ga01heFZhbGlkUGFnZXMpIHJldHVybiBmYWxzZTsKLSAgTGVuZ3RoIGFzayA9IChu
PmtNaW5TeXN0ZW1BbGxvYykgPyBuIDogc3RhdGljX2Nhc3Q8TGVuZ3RoPihrTWluU3lzdGVtQWxs
b2MpOwotICBzaXplX3QgYWN0dWFsX3NpemU7Ci0gIHZvaWQqIHB0ciA9IFRDTWFsbG9jX1N5c3Rl
bUFsbG9jKGFzayA8PCBrUGFnZVNoaWZ0LCAmYWN0dWFsX3NpemUsIGtQYWdlU2l6ZSk7Ci0gIGlm
IChwdHIgPT0gTlVMTCkgewotICAgIGlmIChuIDwgYXNrKSB7Ci0gICAgICAvLyBUcnkgZ3Jvd2lu
ZyBqdXN0ICJuIiBwYWdlcwotICAgICAgYXNrID0gbjsKLSAgICAgIHB0ciA9IFRDTWFsbG9jX1N5
c3RlbUFsbG9jKGFzayA8PCBrUGFnZVNoaWZ0LCAmYWN0dWFsX3NpemUsIGtQYWdlU2l6ZSk7Citi
b29sIFRDTWFsbG9jUGFnZUhlYXA6Okdyb3dIZWFwKExlbmd0aCBuKQoreworICAgIEFTU0VSVChr
TWF4UGFnZXMgPj0ga01pblN5c3RlbUFsbG9jKTsKKyAgICBpZiAobiA+IGtNYXhWYWxpZFBhZ2Vz
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgTGVuZ3RoIGFzayA9IChuPmtNaW5TeXN0ZW1B
bGxvYykgPyBuIDogc3RhdGljX2Nhc3Q8TGVuZ3RoPihrTWluU3lzdGVtQWxsb2MpOworICAgIHNp
emVfdCBhY3R1YWxTaXplOworICAgIHZvaWQqIHB0ciA9IFRDTWFsbG9jX1N5c3RlbUFsbG9jKGFz
ayA8PCBrUGFnZVNoaWZ0LCAmYWN0dWFsU2l6ZSwga1BhZ2VTaXplKTsKKyAgICBpZiAoIXB0cikg
eworICAgICAgICBpZiAobiA8IGFzaykgeworICAgICAgICAgICAgLy8gVHJ5IGdyb3dpbmcganVz
dCAibiIgcGFnZXMKKyAgICAgICAgICAgIGFzayA9IG47CisgICAgICAgICAgICBwdHIgPSBUQ01h
bGxvY19TeXN0ZW1BbGxvYyhhc2sgPDwga1BhZ2VTaGlmdCwgJmFjdHVhbFNpemUsIGtQYWdlU2l6
ZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFwdHIpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQotICAgIGlmIChwdHIgPT0gTlVMTCkgcmV0dXJuIGZhbHNlOwotICB9Ci0gIGFz
ayA9IGFjdHVhbF9zaXplID4+IGtQYWdlU2hpZnQ7CisgICAgYXNrID0gYWN0dWFsU2l6ZSA+PiBr
UGFnZVNoaWZ0OwogCi0gIHVpbnQ2NF90IG9sZF9zeXN0ZW1fYnl0ZXMgPSBzeXN0ZW1fYnl0ZXNf
OwotICBzeXN0ZW1fYnl0ZXNfICs9IChhc2sgPDwga1BhZ2VTaGlmdCk7Ci0gIGNvbnN0IFBhZ2VJ
RCBwID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHB0cikgPj4ga1BhZ2VTaGlmdDsKLSAg
QVNTRVJUKHAgPiAwKTsKKyAgICB1aW50NjRfdCBvbGRTeXN0ZW1CeXRlcyA9IHN5c3RlbUJ5dGVz
OworICAgIHN5c3RlbUJ5dGVzICs9IChhc2sgPDwga1BhZ2VTaGlmdCk7CisgICAgY29uc3QgUGFn
ZUlEIHAgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocHRyKSA+PiBrUGFnZVNoaWZ0Owor
ICAgIEFTU0VSVChwID4gMCk7CiAKLSAgLy8gSWYgd2UgaGF2ZSBhbHJlYWR5IGEgbG90IG9mIHBh
Z2VzIGFsbG9jYXRlZCwganVzdCBwcmUgYWxsb2NhdGUgYSBidW5jaCBvZgotICAvLyBtZW1vcnkg
Zm9yIHRoZSBwYWdlIG1hcC4gVGhpcyBwcmV2ZW50cyBmcmFnbWVudGF0aW9uIGJ5IHBhZ2VtYXAg
bWV0YWRhdGEKLSAgLy8gd2hlbiBhIHByb2dyYW0ga2VlcHMgYWxsb2NhdGluZyBhbmQgZnJlZWlu
ZyBsYXJnZSBibG9ja3MuCi0KLSAgaWYgKG9sZF9zeXN0ZW1fYnl0ZXMgPCBrUGFnZU1hcEJpZ0Fs
bG9jYXRpb25UaHJlc2hvbGQKLSAgICAgICYmIHN5c3RlbV9ieXRlc18gPj0ga1BhZ2VNYXBCaWdB
bGxvY2F0aW9uVGhyZXNob2xkKSB7Ci0gICAgcGFnZW1hcF8uUHJlYWxsb2NhdGVNb3JlTWVtb3J5
KCk7Ci0gIH0KKyAgICAvLyBJZiB3ZSBoYXZlIGFscmVhZHkgYSBsb3Qgb2YgcGFnZXMgYWxsb2Nh
dGVkLCBqdXN0IHByZSBhbGxvY2F0ZSBhIGJ1bmNoIG9mCisgICAgLy8gbWVtb3J5IGZvciB0aGUg
cGFnZSBtYXAuIFRoaXMgcHJldmVudHMgZnJhZ21lbnRhdGlvbiBieSBwYWdlbWFwIG1ldGFkYXRh
CisgICAgLy8gd2hlbiBhIHByb2dyYW0ga2VlcHMgYWxsb2NhdGluZyBhbmQgZnJlZWluZyBsYXJn
ZSBibG9ja3MuCisKKyAgICBpZiAob2xkU3lzdGVtQnl0ZXMgPCBrUGFnZU1hcEJpZ0FsbG9jYXRp
b25UaHJlc2hvbGQKKyAgICAgICAgJiYgc3lzdGVtQnl0ZXMgPj0ga1BhZ2VNYXBCaWdBbGxvY2F0
aW9uVGhyZXNob2xkKQorICAgICAgICBwYWdlbWFwLlByZWFsbG9jYXRlTW9yZU1lbW9yeSgpOwor
CisgICAgLy8gTWFrZSBzdXJlIHBhZ2VtYXAgaGFzIGVudHJpZXMgZm9yIGFsbCBvZiB0aGUgbmV3
IHBhZ2VzLgorICAgIC8vIFBsdXMgZW5zdXJlIG9uZSBiZWZvcmUgYW5kIG9uZSBhZnRlciBzbyBj
b2FsZXNjaW5nIGNvZGUKKyAgICAvLyBkb2VzIG5vdCBuZWVkIGJvdW5kcy1jaGVja2luZy4KKyAg
ICBpZiAocGFnZW1hcC5FbnN1cmUocC0xLCBhc2srMikpIHsKKyAgICAgICAgLy8gUHJldGVuZCB0
aGUgbmV3IGFyZWEgaXMgYWxsb2NhdGVkIGFuZCB0aGVuIERlbGV0ZSgpIGl0IHRvCisgICAgICAg
IC8vIGNhdXNlIGFueSBuZWNlc3NhcnkgY29hbGVzY2luZyB0byBvY2N1ci4KKyAgICAgICAgLy8K
KyAgICAgICAgLy8gV2UgZG8gbm90IGFkanVzdCBmcmVlUGFnZXMgaGVyZSBzaW5jZSBEZWxldGUo
KSB3aWxsIGRvIGl0IGZvciB1cy4KKyAgICAgICAgU3Bhbiogc3BhbiA9IE5ld1NwYW4ocCwgYXNr
KTsKKyAgICAgICAgUmVjb3JkU3BhbihzcGFuKTsKKyAgICAgICAgRGVsZXRlKHNwYW4pOworICAg
ICAgICBBU1NFUlQoQ2hlY2soKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KIAotICAv
LyBNYWtlIHN1cmUgcGFnZW1hcF8gaGFzIGVudHJpZXMgZm9yIGFsbCBvZiB0aGUgbmV3IHBhZ2Vz
LgotICAvLyBQbHVzIGVuc3VyZSBvbmUgYmVmb3JlIGFuZCBvbmUgYWZ0ZXIgc28gY29hbGVzY2lu
ZyBjb2RlCi0gIC8vIGRvZXMgbm90IG5lZWQgYm91bmRzLWNoZWNraW5nLgotICBpZiAocGFnZW1h
cF8uRW5zdXJlKHAtMSwgYXNrKzIpKSB7Ci0gICAgLy8gUHJldGVuZCB0aGUgbmV3IGFyZWEgaXMg
YWxsb2NhdGVkIGFuZCB0aGVuIERlbGV0ZSgpIGl0IHRvCi0gICAgLy8gY2F1c2UgYW55IG5lY2Vz
c2FyeSBjb2FsZXNjaW5nIHRvIG9jY3VyLgotICAgIC8vCi0gICAgLy8gV2UgZG8gbm90IGFkanVz
dCBmcmVlX3BhZ2VzXyBoZXJlIHNpbmNlIERlbGV0ZSgpIHdpbGwgZG8gaXQgZm9yIHVzLgotICAg
IFNwYW4qIHNwYW4gPSBOZXdTcGFuKHAsIGFzayk7Ci0gICAgUmVjb3JkU3BhbihzcGFuKTsKLSAg
ICBEZWxldGUoc3Bhbik7Ci0gICAgQVNTRVJUKENoZWNrKCkpOwotICAgIHJldHVybiB0cnVlOwot
ICB9IGVsc2UgewotICAgIC8vIFdlIGNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgd2l0aGluICJw
YWdlbWFwXyIKKyAgICAvLyBXZSBjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IHdpdGhpbiAicGFn
ZW1hcCIKICAgICAvLyBUT0RPOiBPbmNlIHdlIGNhbiByZXR1cm4gbWVtb3J5IHRvIHRoZSBzeXN0
ZW0sIHJldHVybiB0aGUgbmV3IHNwYW4KICAgICByZXR1cm4gZmFsc2U7Ci0gIH0KIH0KIAotYm9v
bCBUQ01hbGxvY19QYWdlSGVhcDo6Q2hlY2soKSB7Citib29sIFRDTWFsbG9jUGFnZUhlYXA6OkNo
ZWNrKCkKK3sKICNpZiBVU0VfQkFDS0dST1VORF9USFJFQURfVE9fU0NBVkVOR0VfTUVNT1JZCi0g
IHNpemVfdCB0b3RhbEZyZWVDb21taXR0ZWQgPSAwOworICAgIHNpemVfdCB0b3RhbEZyZWVDb21t
aXR0ZWQgPSAwOwogI2VuZGlmCi0gIEFTU0VSVChmcmVlX1swXS5ub3JtYWwubmV4dCA9PSAmZnJl
ZV9bMF0ubm9ybWFsKTsKLSAgQVNTRVJUKGZyZWVfWzBdLnJldHVybmVkLm5leHQgPT0gJmZyZWVf
WzBdLnJldHVybmVkKTsKKyAgICBBU1NFUlQoZnJlZVNwYW5MaXN0WzBdLm5vcm1hbC5uZXh0ID09
ICZmcmVlU3Bhbkxpc3RbMF0ubm9ybWFsKTsKKyAgICBBU1NFUlQoZnJlZVNwYW5MaXN0WzBdLnJl
dHVybmVkLm5leHQgPT0gJmZyZWVTcGFuTGlzdFswXS5yZXR1cm5lZCk7CiAjaWYgVVNFX0JBQ0tH
Uk9VTkRfVEhSRUFEX1RPX1NDQVZFTkdFX01FTU9SWQotICB0b3RhbEZyZWVDb21taXR0ZWQgPSBD
aGVja0xpc3QoJmxhcmdlXy5ub3JtYWwsIGtNYXhQYWdlcywgMTAwMDAwMDAwMCwgZmFsc2UpOwor
ICAgIHRvdGFsRnJlZUNvbW1pdHRlZCA9IENoZWNrTGlzdCgmbGFyZ2Uubm9ybWFsLCBrTWF4UGFn
ZXMsIDEwMDAwMDAwMDAsIGZhbHNlKTsKICNlbHNlCi0gIENoZWNrTGlzdCgmbGFyZ2VfLm5vcm1h
bCwga01heFBhZ2VzLCAxMDAwMDAwMDAwLCBmYWxzZSk7CisgICAgQ2hlY2tMaXN0KCZsYXJnZS5u
b3JtYWwsIGtNYXhQYWdlcywgMTAwMDAwMDAwMCwgZmFsc2UpOwogI2VuZGlmCi0gICAgQ2hlY2tM
aXN0KCZsYXJnZV8ucmV0dXJuZWQsIGtNYXhQYWdlcywgMTAwMDAwMDAwMCwgdHJ1ZSk7Ci0gIGZv
ciAoTGVuZ3RoIHMgPSAxOyBzIDwga01heFBhZ2VzOyBzKyspIHsKKyAgICBDaGVja0xpc3QoJmxh
cmdlLnJldHVybmVkLCBrTWF4UGFnZXMsIDEwMDAwMDAwMDAsIHRydWUpOworICAgIGZvciAoTGVu
Z3RoIHMgPSAxOyBzIDwga01heFBhZ2VzOyBzKyspIHsKICNpZiBVU0VfQkFDS0dST1VORF9USFJF
QURfVE9fU0NBVkVOR0VfTUVNT1JZCi0gICAgdG90YWxGcmVlQ29tbWl0dGVkICs9IENoZWNrTGlz
dCgmZnJlZV9bc10ubm9ybWFsLCBzLCBzLCBmYWxzZSk7CisgICAgICAgIHRvdGFsRnJlZUNvbW1p
dHRlZCArPSBDaGVja0xpc3QoJmZyZWVTcGFuTGlzdFtzXS5ub3JtYWwsIHMsIHMsIGZhbHNlKTsK
ICNlbHNlCi0gICAgQ2hlY2tMaXN0KCZmcmVlX1tzXS5ub3JtYWwsIHMsIHMsIGZhbHNlKTsKKyAg
ICAgICAgQ2hlY2tMaXN0KCZmcmVlU3Bhbkxpc3Rbc10ubm9ybWFsLCBzLCBzLCBmYWxzZSk7CiAj
ZW5kaWYKLSAgICBDaGVja0xpc3QoJmZyZWVfW3NdLnJldHVybmVkLCBzLCBzLCB0cnVlKTsKLSAg
fQorICAgICAgICBDaGVja0xpc3QoJmZyZWVTcGFuTGlzdFtzXS5yZXR1cm5lZCwgcywgcywgdHJ1
ZSk7CisgICAgfQogI2lmIFVTRV9CQUNLR1JPVU5EX1RIUkVBRF9UT19TQ0FWRU5HRV9NRU1PUlkK
LSAgQVNTRVJUKHRvdGFsRnJlZUNvbW1pdHRlZCA9PSBmcmVlX2NvbW1pdHRlZF9wYWdlc18pOwor
ICAgIEFTU0VSVCh0b3RhbEZyZWVDb21taXR0ZWQgPT0gZnJlZUNvbW1pdHRlZFBhZ2VzKTsKICNl
bmRpZgotICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogI2lmIEFTU0VSVF9E
SVNBQkxFRAotc2l6ZV90IFRDTWFsbG9jX1BhZ2VIZWFwOjpDaGVja0xpc3QoU3BhbiosIExlbmd0
aCwgTGVuZ3RoLCBib29sKSB7Ci0gIHJldHVybiAwOworc2l6ZV90IFRDTWFsbG9jUGFnZUhlYXA6
OkNoZWNrTGlzdChTcGFuKiwgTGVuZ3RoLCBMZW5ndGgsIGJvb2wpCit7CisgICAgcmV0dXJuIDA7
CiB9CiAjZWxzZQotc2l6ZV90IFRDTWFsbG9jX1BhZ2VIZWFwOjpDaGVja0xpc3QoU3BhbiogbGlz
dCwgTGVuZ3RoIG1pbl9wYWdlcywgTGVuZ3RoIG1heF9wYWdlcywgYm9vbCBkZWNvbW1pdHRlZCkg
ewotICBzaXplX3QgZnJlZUNvdW50ID0gMDsKLSAgZm9yIChTcGFuKiBzID0gbGlzdC0+bmV4dDsg
cyAhPSBsaXN0OyBzID0gcy0+bmV4dCkgewotICAgIENIRUNLX0NPTkRJVElPTihzLT5mcmVlKTsK
LSAgICBDSEVDS19DT05ESVRJT04ocy0+bGVuZ3RoID49IG1pbl9wYWdlcyk7Ci0gICAgQ0hFQ0tf
Q09ORElUSU9OKHMtPmxlbmd0aCA8PSBtYXhfcGFnZXMpOwotICAgIENIRUNLX0NPTkRJVElPTihH
ZXREZXNjcmlwdG9yKHMtPnN0YXJ0KSA9PSBzKTsKLSAgICBDSEVDS19DT05ESVRJT04oR2V0RGVz
Y3JpcHRvcihzLT5zdGFydCtzLT5sZW5ndGgtMSkgPT0gcyk7Ci0gICAgQ0hFQ0tfQ09ORElUSU9O
KHMtPmRlY29tbWl0dGVkID09IGRlY29tbWl0dGVkKTsKLSAgICBmcmVlQ291bnQgKz0gcy0+bGVu
Z3RoOwotICB9Ci0gIHJldHVybiBmcmVlQ291bnQ7CitzaXplX3QgVENNYWxsb2NQYWdlSGVhcDo6
Q2hlY2tMaXN0KFNwYW4qIGxpc3QsIExlbmd0aCBtaW5QYWdlcywgTGVuZ3RoIG1heFBhZ2VzLCBi
b29sIGRlY29tbWl0dGVkKQoreworICAgIHNpemVfdCBmcmVlQ291bnQgPSAwOworICAgIGZvciAo
U3BhbiogcyA9IGxpc3QtPm5leHQ7IHMgIT0gbGlzdDsgcyA9IHMtPm5leHQpIHsKKyAgICAgICAg
Q0hFQ0tfQ09ORElUSU9OKHMtPmZyZWUpOworICAgICAgICBDSEVDS19DT05ESVRJT04ocy0+bGVu
Z3RoID49IG1pblBhZ2VzKTsKKyAgICAgICAgQ0hFQ0tfQ09ORElUSU9OKHMtPmxlbmd0aCA8PSBt
YXhQYWdlcyk7CisgICAgICAgIENIRUNLX0NPTkRJVElPTihHZXREZXNjcmlwdG9yKHMtPnN0YXJ0
KSA9PSBzKTsKKyAgICAgICAgQ0hFQ0tfQ09ORElUSU9OKEdldERlc2NyaXB0b3Iocy0+c3RhcnQr
cy0+bGVuZ3RoLTEpID09IHMpOworICAgICAgICBDSEVDS19DT05ESVRJT04ocy0+ZGVjb21taXR0
ZWQgPT0gZGVjb21taXR0ZWQpOworICAgICAgICBmcmVlQ291bnQgKz0gcy0+bGVuZ3RoOworICAg
IH0KKyAgICByZXR1cm4gZnJlZUNvdW50OwogfQogI2VuZGlmCiAKLXZvaWQgVENNYWxsb2NfUGFn
ZUhlYXA6OlJlbGVhc2VGcmVlTGlzdChTcGFuKiBsaXN0LCBTcGFuKiByZXR1cm5lZCkgewotICAv
LyBXYWxrIGJhY2t3YXJkcyB0aHJvdWdoIGxpc3Qgc28gdGhhdCB3aGVuIHdlIHB1c2ggdGhlc2UK
LSAgLy8gc3BhbnMgb24gdGhlICJyZXR1cm5lZCIgbGlzdCwgd2UgcHJlc2VydmUgdGhlIG9yZGVy
Lgordm9pZCBUQ01hbGxvY1BhZ2VIZWFwOjpSZWxlYXNlRnJlZUxpc3QoU3BhbiogbGlzdCwgU3Bh
biogcmV0dXJuZWQpCit7CisgICAgLy8gV2FsayBiYWNrd2FyZHMgdGhyb3VnaCBsaXN0IHNvIHRo
YXQgd2hlbiB3ZSBwdXNoIHRoZXNlCisgICAgLy8gc3BhbnMgb24gdGhlICJyZXR1cm5lZCIgbGlz
dCwgd2UgcHJlc2VydmUgdGhlIG9yZGVyLgogI2lmIFVTRV9CQUNLR1JPVU5EX1RIUkVBRF9UT19T
Q0FWRU5HRV9NRU1PUlkKLSAgc2l6ZV90IGZyZWVQYWdlUmVkdWN0aW9uID0gMDsKKyAgICBzaXpl
X3QgZnJlZVBhZ2VSZWR1Y3Rpb24gPSAwOwogI2VuZGlmCiAKLSAgd2hpbGUgKCFETExfSXNFbXB0
eShsaXN0KSkgewotICAgIFNwYW4qIHMgPSBsaXN0LT5wcmV2OworICAgIHdoaWxlICghRExMX0lz
RW1wdHkobGlzdCkpIHsKKyAgICAgICAgU3BhbiogcyA9IGxpc3QtPnByZXY7CiAKLSAgICBETExf
UmVtb3ZlKHMpOwotICAgIHMtPmRlY29tbWl0dGVkID0gdHJ1ZTsKLSAgICBETExfUHJlcGVuZChy
ZXR1cm5lZCwgcyk7Ci0gICAgVENNYWxsb2NfU3lzdGVtUmVsZWFzZShyZWludGVycHJldF9jYXN0
PHZvaWQqPihzLT5zdGFydCA8PCBrUGFnZVNoaWZ0KSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0YXRpY19jYXN0PHNpemVfdD4ocy0+bGVuZ3RoIDw8IGtQYWdlU2hpZnQpKTsKKyAgICAg
ICAgRExMUmVtb3ZlKHMpOworICAgICAgICBzLT5kZWNvbW1pdHRlZCA9IHRydWU7CisgICAgICAg
IERMTFByZXBlbmQocmV0dXJuZWQsIHMpOworICAgICAgICBUQ01hbGxvY19TeXN0ZW1SZWxlYXNl
KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHMtPnN0YXJ0IDw8IGtQYWdlU2hpZnQpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxzaXplX3Q+KHMtPmxlbmd0aCA8
PCBrUGFnZVNoaWZ0KSk7CiAjaWYgVVNFX0JBQ0tHUk9VTkRfVEhSRUFEX1RPX1NDQVZFTkdFX01F
TU9SWQotICAgIGZyZWVQYWdlUmVkdWN0aW9uICs9IHMtPmxlbmd0aDsKKyAgICAgICAgZnJlZVBh
Z2VSZWR1Y3Rpb24gKz0gcy0+bGVuZ3RoOwogI2VuZGlmCi0gIH0KKyAgICB9CiAKICNpZiBVU0Vf
QkFDS0dST1VORF9USFJFQURfVE9fU0NBVkVOR0VfTUVNT1JZCi0gICAgZnJlZV9jb21taXR0ZWRf
cGFnZXNfIC09IGZyZWVQYWdlUmVkdWN0aW9uOwotICAgIGlmIChmcmVlX2NvbW1pdHRlZF9wYWdl
c18gPCBtaW5fZnJlZV9jb21taXR0ZWRfcGFnZXNfc2luY2VfbGFzdF9zY2F2ZW5nZV8pIAotICAg
ICAgICBtaW5fZnJlZV9jb21taXR0ZWRfcGFnZXNfc2luY2VfbGFzdF9zY2F2ZW5nZV8gPSBmcmVl
X2NvbW1pdHRlZF9wYWdlc187CisgICAgZnJlZUNvbW1pdHRlZFBhZ2VzIC09IGZyZWVQYWdlUmVk
dWN0aW9uOworICAgIGlmIChmcmVlQ29tbWl0dGVkUGFnZXMgPCBtaW5GcmVlQ29tbWl0dGVkUGFn
ZXNTaW5jZUxhc3RTY2F2ZW5nZSkgCisgICAgICAgIG1pbkZyZWVDb21taXR0ZWRQYWdlc1NpbmNl
TGFzdFNjYXZlbmdlID0gZnJlZUNvbW1pdHRlZFBhZ2VzOwogI2VuZGlmCiB9CiAKLXZvaWQgVENN
YWxsb2NfUGFnZUhlYXA6OlJlbGVhc2VGcmVlUGFnZXMoKSB7Ci0gIGZvciAoTGVuZ3RoIHMgPSAw
OyBzIDwga01heFBhZ2VzOyBzKyspIHsKLSAgICBSZWxlYXNlRnJlZUxpc3QoJmZyZWVfW3NdLm5v
cm1hbCwgJmZyZWVfW3NdLnJldHVybmVkKTsKLSAgfQotICBSZWxlYXNlRnJlZUxpc3QoJmxhcmdl
Xy5ub3JtYWwsICZsYXJnZV8ucmV0dXJuZWQpOwotICBBU1NFUlQoQ2hlY2soKSk7Cit2b2lkIFRD
TWFsbG9jUGFnZUhlYXA6OlJlbGVhc2VGcmVlUGFnZXMoKQoreworICAgIGZvciAoTGVuZ3RoIHMg
PSAwOyBzIDwga01heFBhZ2VzOyBzKyspCisgICAgICAgIFJlbGVhc2VGcmVlTGlzdCgmZnJlZVNw
YW5MaXN0W3NdLm5vcm1hbCwgJmZyZWVTcGFuTGlzdFtzXS5yZXR1cm5lZCk7CisgICAgUmVsZWFz
ZUZyZWVMaXN0KCZsYXJnZS5ub3JtYWwsICZsYXJnZS5yZXR1cm5lZCk7CisgICAgQVNTRVJUKENo
ZWNrKCkpOwogfQogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vIEZyZWUgbGlzdAogLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAK
LWNsYXNzIFRDTWFsbG9jX1RocmVhZENhY2hlX0ZyZWVMaXN0IHsKLSBwcml2YXRlOgotICB2b2lk
KiAgICBsaXN0XzsgICAgICAgLy8gTGlua2VkIGxpc3Qgb2Ygbm9kZXMKLSAgdWludDE2X3QgbGVu
Z3RoXzsgICAgIC8vIEN1cnJlbnQgbGVuZ3RoCi0gIHVpbnQxNl90IGxvd2F0ZXJfOyAgICAvLyBM
b3cgd2F0ZXIgbWFyayBmb3IgbGlzdCBsZW5ndGgKK2NsYXNzIFRDTWFsbG9jVGhyZWFkQ2FjaGVG
cmVlTGlzdCB7Citwcml2YXRlOgorICAgIHZvaWQqIGxpc3Q7IC8vIExpbmtlZCBsaXN0IG9mIG5v
ZGVzCisgICAgdWludDE2X3QgY3VycmVudExlbmd0aDsgLy8gQ3VycmVudCBsZW5ndGgKKyAgICB1
aW50MTZfdCBsb3dhdGVyOyAvLyBMb3cgd2F0ZXIgbWFyayBmb3IgbGlzdCBsZW5ndGgKIAotIHB1
YmxpYzoKLSAgdm9pZCBJbml0KCkgewotICAgIGxpc3RfID0gTlVMTDsKLSAgICBsZW5ndGhfID0g
MDsKLSAgICBsb3dhdGVyXyA9IDA7Ci0gIH0KK3B1YmxpYzoKKyAgICB2b2lkIEluaXQoKQorICAg
IHsKKyAgICAgICAgbGlzdCA9IDA7CisgICAgICAgIGN1cnJlbnRMZW5ndGggPSAwOworICAgICAg
ICBsb3dhdGVyID0gMDsKKyAgICB9CiAKLSAgLy8gUmV0dXJuIGN1cnJlbnQgbGVuZ3RoIG9mIGxp
c3QKLSAgaW50IGxlbmd0aCgpIGNvbnN0IHsKLSAgICByZXR1cm4gbGVuZ3RoXzsKLSAgfQorICAg
IC8vIFJldHVybiBjdXJyZW50IGxlbmd0aCBvZiBsaXN0CisgICAgaW50IGxlbmd0aCgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gY3VycmVudExlbmd0aDsKKyAgICB9CiAKLSAgLy8gSXMg
bGlzdCBlbXB0eT8KLSAgYm9vbCBlbXB0eSgpIGNvbnN0IHsKLSAgICByZXR1cm4gbGlzdF8gPT0g
TlVMTDsKLSAgfQorICAgIC8vIElzIGxpc3QgZW1wdHk/CisgICAgYm9vbCBlbXB0eSgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gIWxpc3Q7CisgICAgfQogCi0gIC8vIExvdy13YXRlciBt
YXJrIG1hbmFnZW1lbnQKLSAgaW50IGxvd3dhdGVybWFyaygpIGNvbnN0IHsgcmV0dXJuIGxvd2F0
ZXJfOyB9Ci0gIHZvaWQgY2xlYXJfbG93d2F0ZXJtYXJrKCkgeyBsb3dhdGVyXyA9IGxlbmd0aF87
IH0KLQotICBBTFdBWVNfSU5MSU5FIHZvaWQgUHVzaCh2b2lkKiBwdHIpIHsKLSAgICBTTExfUHVz
aCgmbGlzdF8sIHB0cik7Ci0gICAgbGVuZ3RoXysrOwotICB9CisgICAgLy8gTG93LXdhdGVyIG1h
cmsgbWFuYWdlbWVudAorICAgIGludCBsb3d3YXRlcm1hcmsoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGxvd2F0ZXI7CisgICAgfQorICAgIHZvaWQgY2xlYXJMb3d3YXRlcm1hcmsoKQor
ICAgIHsKKyAgICAgICAgbG93YXRlciA9IGN1cnJlbnRMZW5ndGg7CisgICAgfQogCi0gIHZvaWQg
UHVzaFJhbmdlKGludCBOLCB2b2lkICpzdGFydCwgdm9pZCAqZW5kKSB7Ci0gICAgU0xMX1B1c2hS
YW5nZSgmbGlzdF8sIHN0YXJ0LCBlbmQpOwotICAgIGxlbmd0aF8gPSBsZW5ndGhfICsgc3RhdGlj
X2Nhc3Q8dWludDE2X3Q+KE4pOwotICB9CisgICAgQUxXQVlTX0lOTElORSB2b2lkIFB1c2godm9p
ZCogcHRyKQorICAgIHsKKyAgICAgICAgU0xMUHVzaCgmbGlzdCwgcHRyKTsKKyAgICAgICAgY3Vy
cmVudExlbmd0aCsrOworICAgIH0KIAotICB2b2lkIFBvcFJhbmdlKGludCBOLCB2b2lkICoqc3Rh
cnQsIHZvaWQgKiplbmQpIHsKLSAgICBTTExfUG9wUmFuZ2UoJmxpc3RfLCBOLCBzdGFydCwgZW5k
KTsKLSAgICBBU1NFUlQobGVuZ3RoXyA+PSBOKTsKLSAgICBsZW5ndGhfID0gbGVuZ3RoXyAtIHN0
YXRpY19jYXN0PHVpbnQxNl90PihOKTsKLSAgICBpZiAobGVuZ3RoXyA8IGxvd2F0ZXJfKSBsb3dh
dGVyXyA9IGxlbmd0aF87Ci0gIH0KKyAgICB2b2lkIFB1c2hSYW5nZShpbnQgTiwgdm9pZCAqc3Rh
cnQsIHZvaWQgKmVuZCkKKyAgICB7CisgICAgICAgIFNMTFB1c2hSYW5nZSgmbGlzdCwgc3RhcnQs
IGVuZCk7CisgICAgICAgIGN1cnJlbnRMZW5ndGggPSBjdXJyZW50TGVuZ3RoICsgc3RhdGljX2Nh
c3Q8dWludDE2X3Q+KE4pOworICAgIH0KIAotICBBTFdBWVNfSU5MSU5FIHZvaWQqIFBvcCgpIHsK
LSAgICBBU1NFUlQobGlzdF8gIT0gTlVMTCk7Ci0gICAgbGVuZ3RoXy0tOwotICAgIGlmIChsZW5n
dGhfIDwgbG93YXRlcl8pIGxvd2F0ZXJfID0gbGVuZ3RoXzsKLSAgICByZXR1cm4gU0xMX1BvcCgm
bGlzdF8pOwotICB9CisgICAgdm9pZCBQb3BSYW5nZShpbnQgTiwgdm9pZCAqKnN0YXJ0LCB2b2lk
ICoqZW5kKQorICAgIHsKKyAgICAgICAgU0xMUG9wUmFuZ2UoJmxpc3QsIE4sIHN0YXJ0LCBlbmQp
OworICAgICAgICBBU1NFUlQoY3VycmVudExlbmd0aCA+PSBOKTsKKyAgICAgICAgY3VycmVudExl
bmd0aCA9IGN1cnJlbnRMZW5ndGggLSBzdGF0aWNfY2FzdDx1aW50MTZfdD4oTik7CisgICAgICAg
IGlmIChjdXJyZW50TGVuZ3RoIDwgbG93YXRlcikKKyAgICAgICAgICAgIGxvd2F0ZXIgPSBjdXJy
ZW50TGVuZ3RoOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCogUG9wKCkKKyAgICB7
CisgICAgICAgIEFTU0VSVChsaXN0KTsKKyAgICAgICAgY3VycmVudExlbmd0aC0tOworICAgICAg
ICBpZiAoY3VycmVudExlbmd0aCA8IGxvd2F0ZXIpCisgICAgICAgICAgICBsb3dhdGVyID0gY3Vy
cmVudExlbmd0aDsKKyAgICAgICAgcmV0dXJuIFNMTFBvcCgmbGlzdCk7CisgICAgfQogCiAjaWZk
ZWYgV1RGX0NIQU5HRVMKLSAgdGVtcGxhdGUgPGNsYXNzIEZpbmRlciwgY2xhc3MgUmVhZGVyPgot
ICB2b2lkIGVudW1lcmF0ZUZyZWVPYmplY3RzKEZpbmRlciYgZmluZGVyLCBjb25zdCBSZWFkZXIm
IHJlYWRlcikKLSAgewotICAgICAgZm9yICh2b2lkKiBuZXh0T2JqZWN0ID0gbGlzdF87IG5leHRP
YmplY3Q7IG5leHRPYmplY3QgPSByZWFkZXIubmV4dEVudHJ5SW5MaW5rZWRMaXN0KHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCoqPihuZXh0T2JqZWN0KSkpCi0gICAgICAgICAgZmluZGVyLnZpc2l0KG5l
eHRPYmplY3QpOwotICB9CisgICAgdGVtcGxhdGUgPGNsYXNzIEZpbmRlciwgY2xhc3MgUmVhZGVy
PgorICAgIHZvaWQgZW51bWVyYXRlRnJlZU9iamVjdHMoRmluZGVyJiBmaW5kZXIsIGNvbnN0IFJl
YWRlciYgcmVhZGVyKQorICAgIHsKKyAgICAgICAgZm9yICh2b2lkKiBuZXh0T2JqZWN0ID0gbGlz
dDsgbmV4dE9iamVjdDsgbmV4dE9iamVjdCA9IHJlYWRlci5uZXh0RW50cnlJbkxpbmtlZExpc3Qo
cmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KG5leHRPYmplY3QpKSkKKyAgICAgICAgICAgIGZpbmRl
ci52aXNpdChuZXh0T2JqZWN0KTsKKyAgICB9CiAjZW5kaWYKIH07CiAKQEAgLTIyNzUsNzUgKzIz
MzIsODEgQEAgY2xhc3MgVENNYWxsb2NfVGhyZWFkQ2FjaGVfRnJlZUxpc3QgewogLy8gRGF0YSBr
ZXB0IHBlciB0aHJlYWQKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1jbGFzcyBUQ01hbGxvY19UaHJlYWRDYWNo
ZSB7Ci0gcHJpdmF0ZToKLSAgdHlwZWRlZiBUQ01hbGxvY19UaHJlYWRDYWNoZV9GcmVlTGlzdCBG
cmVlTGlzdDsKK2NsYXNzIFRDTWFsbG9jVGhyZWFkQ2FjaGUgeworcHJpdmF0ZToKKyAgICB0eXBl
ZGVmIFRDTWFsbG9jVGhyZWFkQ2FjaGVGcmVlTGlzdCBGcmVlTGlzdDsKICNpZiBPUyhXSU5ET1dT
KQotICB0eXBlZGVmIERXT1JEIFRocmVhZElkZW50aWZpZXI7CisgICAgdHlwZWRlZiBEV09SRCBU
aHJlYWRJZGVudGlmaWVyOwogI2Vsc2UKLSAgdHlwZWRlZiBwdGhyZWFkX3QgVGhyZWFkSWRlbnRp
ZmllcjsKKyAgICB0eXBlZGVmIHB0aHJlYWRfdCBUaHJlYWRJZGVudGlmaWVyOwogI2VuZGlmCiAK
LSAgc2l6ZV90ICAgICAgICBzaXplXzsgICAgICAgICAgICAgICAgICAvLyBDb21iaW5lZCBzaXpl
IG9mIGRhdGEKLSAgVGhyZWFkSWRlbnRpZmllciB0aWRfOyAgICAgICAgICAgICAgICAvLyBXaGlj
aCB0aHJlYWQgb3ducyBpdAotICBib29sICAgICAgICAgIGluX3NldHNwZWNpZmljXzsgICAgICAg
ICAgIC8vIENhbGxlZCBwdGhyZWFkX3NldHNwZWNpZmljPwotICBGcmVlTGlzdCAgICAgIGxpc3Rf
W2tOdW1DbGFzc2VzXTsgICAgIC8vIEFycmF5IGluZGV4ZWQgYnkgc2l6ZS1jbGFzcworICAgIHNp
emVfdCBzaXplOyAvLyBDb21iaW5lZCBzaXplIG9mIGRhdGEKKyAgICBUaHJlYWRJZGVudGlmaWVy
IHRpZDsgLy8gV2hpY2ggdGhyZWFkIG93bnMgaXQKKyAgICBib29sIGluU2V0c3BlY2lmaWM7IC8v
IENhbGxlZCBwdGhyZWFkX3NldHNwZWNpZmljPworICAgIEZyZWVMaXN0IGxpc3Rba051bUNsYXNz
ZXNdOyAvLyBBcnJheSBpbmRleGVkIGJ5IHNpemUtY2xhc3MKIAotICAvLyBXZSBzYW1wbGUgYWxs
b2NhdGlvbnMsIGJpYXNlZCBieSB0aGUgc2l6ZSBvZiB0aGUgYWxsb2NhdGlvbgotICB1aW50MzJf
dCAgICAgIHJuZF87ICAgICAgICAgICAgICAgICAgIC8vIENoZWFwIHJhbmRvbSBudW1iZXIgZ2Vu
ZXJhdG9yCi0gIHNpemVfdCAgICAgICAgYnl0ZXNfdW50aWxfc2FtcGxlXzsgICAgLy8gQnl0ZXMg
dW50aWwgd2Ugc2FtcGxlIG5leHQKKyAgICAvLyBXZSBzYW1wbGUgYWxsb2NhdGlvbnMsIGJpYXNl
ZCBieSB0aGUgc2l6ZSBvZiB0aGUgYWxsb2NhdGlvbgorICAgIHVpbnQzMl90IHJuZDsgLy8gQ2hl
YXAgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IKKyAgICBzaXplX3QgYnl0ZXNVbnRpbFNhbXBsZTsg
Ly8gQnl0ZXMgdW50aWwgd2Ugc2FtcGxlIG5leHQKIAotICAvLyBBbGxvY2F0ZSBhIG5ldyBoZWFw
LiBSRVFVSVJFUzogcGFnZWhlYXBfbG9jayBpcyBoZWxkLgotICBzdGF0aWMgaW5saW5lIFRDTWFs
bG9jX1RocmVhZENhY2hlKiBOZXdIZWFwKFRocmVhZElkZW50aWZpZXIgdGlkKTsKKyAgICAvLyBB
bGxvY2F0ZSBhIG5ldyBoZWFwLiBSRVFVSVJFUzogcGFnZWhlYXBMb2NrIGlzIGhlbGQuCisgICAg
c3RhdGljIGlubGluZSBUQ01hbGxvY1RocmVhZENhY2hlKiBOZXdIZWFwKFRocmVhZElkZW50aWZp
ZXIgdGlkKTsKIAotICAvLyBVc2Ugb25seSBhcyBwdGhyZWFkIHRocmVhZC1zcGVjaWZpYyBkZXN0
cnVjdG9yIGZ1bmN0aW9uLgotICBzdGF0aWMgdm9pZCBEZXN0cm95VGhyZWFkQ2FjaGUodm9pZCog
cHRyKTsKLSBwdWJsaWM6Ci0gIC8vIEFsbCBUaHJlYWRDYWNoZSBvYmplY3RzIGFyZSBrZXB0IGlu
IGEgbGlua2VkIGxpc3QgKGZvciBzdGF0cyBjb2xsZWN0aW9uKQotICBUQ01hbGxvY19UaHJlYWRD
YWNoZSogbmV4dF87Ci0gIFRDTWFsbG9jX1RocmVhZENhY2hlKiBwcmV2XzsKLQotICB2b2lkIElu
aXQoVGhyZWFkSWRlbnRpZmllciB0aWQpOwotICB2b2lkIENsZWFudXAoKTsKLQotICAvLyBBY2Nl
c3NvcnMgKG1vc3RseSBqdXN0IGZvciBwcmludGluZyBzdGF0cykKLSAgaW50IGZyZWVsaXN0X2xl
bmd0aChzaXplX3QgY2wpIGNvbnN0IHsgcmV0dXJuIGxpc3RfW2NsXS5sZW5ndGgoKTsgfQotCi0g
IC8vIFRvdGFsIGJ5dGUgc2l6ZSBpbiBjYWNoZQotICBzaXplX3QgU2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIHNpemVfOyB9Ci0KLSAgQUxXQVlTX0lOTElORSB2b2lkKiBBbGxvY2F0ZShzaXplX3Qgc2l6
ZSk7Ci0gIHZvaWQgRGVhbGxvY2F0ZSh2b2lkKiBwdHIsIHNpemVfdCBzaXplX2NsYXNzKTsKLQot
ICBBTFdBWVNfSU5MSU5FIHZvaWQgRmV0Y2hGcm9tQ2VudHJhbENhY2hlKHNpemVfdCBjbCwgc2l6
ZV90IGFsbG9jYXRpb25TaXplKTsKLSAgdm9pZCBSZWxlYXNlVG9DZW50cmFsQ2FjaGUoc2l6ZV90
IGNsLCBpbnQgTik7Ci0gIHZvaWQgU2NhdmVuZ2UoKTsKLSAgdm9pZCBQcmludCgpIGNvbnN0Owot
Ci0gIC8vIFJlY29yZCBhbGxvY2F0aW9uIG9mICJrIiBieXRlcy4gIFJldHVybiB0cnVlIGlmZiBh
bGxvY2F0aW9uCi0gIC8vIHNob3VsZCBiZSBzYW1wbGVkCi0gIGJvb2wgU2FtcGxlQWxsb2NhdGlv
bihzaXplX3Qgayk7Ci0KLSAgLy8gUGljayBuZXh0IHNhbXBsaW5nIHBvaW50Ci0gIHZvaWQgUGlj
a05leHRTYW1wbGUoc2l6ZV90IGspOwotCi0gIHN0YXRpYyB2b2lkICAgICAgICAgICAgICAgICAg
SW5pdE1vZHVsZSgpOwotICBzdGF0aWMgdm9pZCAgICAgICAgICAgICAgICAgIEluaXRUU0QoKTsK
LSAgc3RhdGljIFRDTWFsbG9jX1RocmVhZENhY2hlKiBHZXRUaHJlYWRIZWFwKCk7Ci0gIHN0YXRp
YyBUQ01hbGxvY19UaHJlYWRDYWNoZSogR2V0Q2FjaGUoKTsKLSAgc3RhdGljIFRDTWFsbG9jX1Ro
cmVhZENhY2hlKiBHZXRDYWNoZUlmUHJlc2VudCgpOwotICBzdGF0aWMgVENNYWxsb2NfVGhyZWFk
Q2FjaGUqIENyZWF0ZUNhY2hlSWZOZWNlc3NhcnkoKTsKLSAgc3RhdGljIHZvaWQgICAgICAgICAg
ICAgICAgICBEZWxldGVDYWNoZShUQ01hbGxvY19UaHJlYWRDYWNoZSogaGVhcCk7Ci0gIHN0YXRp
YyB2b2lkICAgICAgICAgICAgICAgICAgQmVjb21lSWRsZSgpOwotICBzdGF0aWMgdm9pZCAgICAg
ICAgICAgICAgICAgIFJlY29tcHV0ZVRocmVhZENhY2hlU2l6ZSgpOworICAgIC8vIFVzZSBvbmx5
IGFzIHB0aHJlYWQgdGhyZWFkLXNwZWNpZmljIGRlc3RydWN0b3IgZnVuY3Rpb24uCisgICAgc3Rh
dGljIHZvaWQgRGVzdHJveVRocmVhZENhY2hlKHZvaWQqIHB0cik7CitwdWJsaWM6CisgICAgLy8g
QWxsIFRocmVhZENhY2hlIG9iamVjdHMgYXJlIGtlcHQgaW4gYSBsaW5rZWQgbGlzdCAoZm9yIHN0
YXRzIGNvbGxlY3Rpb24pCisgICAgVENNYWxsb2NUaHJlYWRDYWNoZSogbmV4dDsKKyAgICBUQ01h
bGxvY1RocmVhZENhY2hlKiBwcmV2OworCisgICAgdm9pZCBJbml0KFRocmVhZElkZW50aWZpZXIg
dGlkKTsKKyAgICB2b2lkIENsZWFudXAoKTsKKworICAgIC8vIEFjY2Vzc29ycyAobW9zdGx5IGp1
c3QgZm9yIHByaW50aW5nIHN0YXRzKQorICAgIGludCBmcmVlbGlzdGxlbmd0aChzaXplX3QgY2wp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbGlzdFtjbF0ubGVuZ3RoKCk7CisgICAgfQor
CisgICAgLy8gVG90YWwgYnl0ZSBzaXplIGluIGNhY2hlCisgICAgc2l6ZV90IFNpemUoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIHNpemU7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElO
RSB2b2lkKiBBbGxvY2F0ZShzaXplX3QpOworICAgIHZvaWQgRGVhbGxvY2F0ZSh2b2lkKiBwdHIs
IHNpemVfdCBzaXplY2xhc3MpOworCisgICAgQUxXQVlTX0lOTElORSB2b2lkIEZldGNoRnJvbUNl
bnRyYWxDYWNoZShzaXplX3QgY2wsIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSk7CisgICAgdm9pZCBS
ZWxlYXNlVG9DZW50cmFsQ2FjaGUoc2l6ZV90IGNsLCBpbnQpOworICAgIHZvaWQgU2NhdmVuZ2Uo
KTsKKyAgICB2b2lkIFByaW50KCkgY29uc3Q7CisKKyAgICAvLyBSZWNvcmQgYWxsb2NhdGlvbiBv
ZiAiayIgYnl0ZXMuIFJldHVybiB0cnVlIGlmZiBhbGxvY2F0aW9uCisgICAgLy8gc2hvdWxkIGJl
IHNhbXBsZWQKKyAgICBib29sIFNhbXBsZUFsbG9jYXRpb24oc2l6ZV90IGspOworCisgICAgLy8g
UGljayBuZXh0IHNhbXBsaW5nIHBvaW50CisgICAgdm9pZCBQaWNrTmV4dFNhbXBsZShzaXplX3Qg
ayk7CisKKyAgICBzdGF0aWMgdm9pZCBJbml0TW9kdWxlKCk7CisgICAgc3RhdGljIHZvaWQgSW5p
dFRTRCgpOworICAgIHN0YXRpYyBUQ01hbGxvY1RocmVhZENhY2hlKiBHZXRUaHJlYWRIZWFwKCk7
CisgICAgc3RhdGljIFRDTWFsbG9jVGhyZWFkQ2FjaGUqIEdldENhY2hlKCk7CisgICAgc3RhdGlj
IFRDTWFsbG9jVGhyZWFkQ2FjaGUqIEdldENhY2hlSWZQcmVzZW50KCk7CisgICAgc3RhdGljIFRD
TWFsbG9jVGhyZWFkQ2FjaGUqIENyZWF0ZUNhY2hlSWZOZWNlc3NhcnkoKTsKKyAgICBzdGF0aWMg
dm9pZCBEZWxldGVDYWNoZShUQ01hbGxvY1RocmVhZENhY2hlKiBoZWFwKTsKKyAgICBzdGF0aWMg
dm9pZCBCZWNvbWVJZGxlKCk7CisgICAgc3RhdGljIHZvaWQgUmVjb21wdXRlVGhyZWFkQ2FjaGVT
aXplKCk7CiAKICNpZmRlZiBXVEZfQ0hBTkdFUwotICB0ZW1wbGF0ZSA8Y2xhc3MgRmluZGVyLCBj
bGFzcyBSZWFkZXI+Ci0gIHZvaWQgZW51bWVyYXRlRnJlZU9iamVjdHMoRmluZGVyJiBmaW5kZXIs
IGNvbnN0IFJlYWRlciYgcmVhZGVyKQotICB7Ci0gICAgICBmb3IgKHVuc2lnbmVkIHNpemVDbGFz
cyA9IDA7IHNpemVDbGFzcyA8IGtOdW1DbGFzc2VzOyBzaXplQ2xhc3MrKykKLSAgICAgICAgICBs
aXN0X1tzaXplQ2xhc3NdLmVudW1lcmF0ZUZyZWVPYmplY3RzKGZpbmRlciwgcmVhZGVyKTsKLSAg
fQorICAgIHRlbXBsYXRlIDxjbGFzcyBGaW5kZXIsIGNsYXNzIFJlYWRlcj4KKyAgICB2b2lkIGVu
dW1lcmF0ZUZyZWVPYmplY3RzKEZpbmRlciYgZmluZGVyLCBjb25zdCBSZWFkZXImIHJlYWRlcikK
KyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgc2l6ZUNsYXNzID0gMDsgc2l6ZUNsYXNzIDwg
a051bUNsYXNzZXM7IHNpemVDbGFzcysrKQorICAgICAgICAgICAgbGlzdFtzaXplQ2xhc3NdLmVu
dW1lcmF0ZUZyZWVPYmplY3RzKGZpbmRlciwgcmVhZGVyKTsKKyAgICB9CiAjZW5kaWYKIH07CiAK
QEAgLTIzNTEsMTI4ICsyNDE0LDEzMCBAQCBjbGFzcyBUQ01hbGxvY19UaHJlYWRDYWNoZSB7CiAv
LyBEYXRhIGtlcHQgcGVyIHNpemUtY2xhc3MgaW4gY2VudHJhbCBjYWNoZQogLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CiAKLWNsYXNzIFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3QgewotIHB1YmxpYzoKLSAgdm9pZCBJ
bml0KHNpemVfdCBjbCk7CitjbGFzcyBUQ01hbGxvY0NlbnRyYWxGcmVlTGlzdCB7CitwdWJsaWM6
CisgICAgdm9pZCBJbml0KHNpemVfdCBjbCk7CiAKLSAgLy8gVGhlc2UgbWV0aG9kcyBhbGwgZG8g
aW50ZXJuYWwgbG9ja2luZy4KKyAgICAvLyBUaGVzZSBtZXRob2RzIGFsbCBkbyBpbnRlcm5hbCBs
b2NraW5nLgogCi0gIC8vIEluc2VydCB0aGUgc3BlY2lmaWVkIHJhbmdlIGludG8gdGhlIGNlbnRy
YWwgZnJlZWxpc3QuICBOIGlzIHRoZSBudW1iZXIgb2YKLSAgLy8gZWxlbWVudHMgaW4gdGhlIHJh
bmdlLgotICB2b2lkIEluc2VydFJhbmdlKHZvaWQgKnN0YXJ0LCB2b2lkICplbmQsIGludCBOKTsK
KyAgICAvLyBJbnNlcnQgdGhlIHNwZWNpZmllZCByYW5nZSBpbnRvIHRoZSBjZW50cmFsIGZyZWVs
aXN0LiBOIGlzIHRoZSBudW1iZXIgb2YKKyAgICAvLyBlbGVtZW50cyBpbiB0aGUgcmFuZ2UuCisg
ICAgdm9pZCBJbnNlcnRSYW5nZSh2b2lkICpzdGFydCwgdm9pZCAqZW5kLCBpbnQpOwogCi0gIC8v
IFJldHVybnMgdGhlIGFjdHVhbCBudW1iZXIgb2YgZmV0Y2hlZCBlbGVtZW50cyBpbnRvIE4uCi0g
IHZvaWQgUmVtb3ZlUmFuZ2Uodm9pZCAqKnN0YXJ0LCB2b2lkICoqZW5kLCBpbnQgKk4pOworICAg
IC8vIFJldHVybnMgdGhlIGFjdHVhbCBudW1iZXIgb2YgZmV0Y2hlZCBlbGVtZW50cyBpbnRvIE4u
CisgICAgdm9pZCBSZW1vdmVSYW5nZSh2b2lkICoqc3RhcnQsIHZvaWQgKiplbmQsIGludCopOwog
Ci0gIC8vIFJldHVybnMgdGhlIG51bWJlciBvZiBmcmVlIG9iamVjdHMgaW4gY2FjaGUuCi0gIHNp
emVfdCBsZW5ndGgoKSB7Ci0gICAgU3BpbkxvY2tIb2xkZXIgaCgmbG9ja18pOwotICAgIHJldHVy
biBjb3VudGVyXzsKLSAgfQorICAgIC8vIFJldHVybnMgdGhlIG51bWJlciBvZiBmcmVlIG9iamVj
dHMgaW4gY2FjaGUuCisgICAgc2l6ZV90IGxlbmd0aCgpCisgICAgeworICAgICAgICBTcGluTG9j
a0hvbGRlciBoKCZsb2NrKTsKKyAgICAgICAgcmV0dXJuIGNvdW50ZXI7CisgICAgfQogCi0gIC8v
IFJldHVybnMgdGhlIG51bWJlciBvZiBmcmVlIG9iamVjdHMgaW4gdGhlIHRyYW5zZmVyIGNhY2hl
LgotICBpbnQgdGNfbGVuZ3RoKCkgewotICAgIFNwaW5Mb2NrSG9sZGVyIGgoJmxvY2tfKTsKLSAg
ICByZXR1cm4gdXNlZF9zbG90c18gKiBudW1fb2JqZWN0c190b19tb3ZlW3NpemVfY2xhc3NfXTsK
LSAgfQorICAgIC8vIFJldHVybnMgdGhlIG51bWJlciBvZiBmcmVlIG9iamVjdHMgaW4gdGhlIHRy
YW5zZmVyIGNhY2hlLgorICAgIGludCB0Y0xlbmd0aCgpCisgICAgeworICAgICAgICBTcGluTG9j
a0hvbGRlciBoKCZsb2NrKTsKKyAgICAgICAgcmV0dXJuIHVzZWRTbG90cyAqIG51bU9iamVjdHNU
b01vdmVbc2l6ZUNsYXNzXTsKKyAgICB9CiAKICNpZmRlZiBXVEZfQ0hBTkdFUwotICB0ZW1wbGF0
ZSA8Y2xhc3MgRmluZGVyLCBjbGFzcyBSZWFkZXI+Ci0gIHZvaWQgZW51bWVyYXRlRnJlZU9iamVj
dHMoRmluZGVyJiBmaW5kZXIsIGNvbnN0IFJlYWRlciYgcmVhZGVyLCBUQ01hbGxvY19DZW50cmFs
X0ZyZWVMaXN0KiByZW1vdGVDZW50cmFsRnJlZUxpc3QpCi0gIHsKLSAgICBmb3IgKFNwYW4qIHNw
YW4gPSAmZW1wdHlfOyBzcGFuICYmIHNwYW4gIT0gJmVtcHR5Xzsgc3BhbiA9IChzcGFuLT5uZXh0
ID8gcmVhZGVyKHNwYW4tPm5leHQpIDogMCkpCi0gICAgICBBU1NFUlQoIXNwYW4tPm9iamVjdHMp
OwotCi0gICAgQVNTRVJUKCFub25lbXB0eV8ub2JqZWN0cyk7Ci0gICAgc3RhdGljIGNvbnN0IHB0
cmRpZmZfdCBub25lbXB0eU9mZnNldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KCZu
b25lbXB0eV8pIC0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4odGhpcyk7Ci0KLSAgICBT
cGFuKiByZW1vdGVOb25lbXB0eSA9IHJlaW50ZXJwcmV0X2Nhc3Q8U3Bhbio+KHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhcio+KHJlbW90ZUNlbnRyYWxGcmVlTGlzdCkgKyBub25lbXB0eU9mZnNldCk7Ci0g
ICAgU3BhbiogcmVtb3RlU3BhbiA9IG5vbmVtcHR5Xy5uZXh0OwotCi0gICAgZm9yIChTcGFuKiBz
cGFuID0gcmVhZGVyKHJlbW90ZVNwYW4pOyBzcGFuICYmIHJlbW90ZVNwYW4gIT0gcmVtb3RlTm9u
ZW1wdHk7IHJlbW90ZVNwYW4gPSBzcGFuLT5uZXh0LCBzcGFuID0gKHNwYW4tPm5leHQgPyByZWFk
ZXIoc3Bhbi0+bmV4dCkgOiAwKSkgewotICAgICAgZm9yICh2b2lkKiBuZXh0T2JqZWN0ID0gc3Bh
bi0+b2JqZWN0czsgbmV4dE9iamVjdDsgbmV4dE9iamVjdCA9IHJlYWRlci5uZXh0RW50cnlJbkxp
bmtlZExpc3QocmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KG5leHRPYmplY3QpKSkKLSAgICAgICAg
ZmluZGVyLnZpc2l0KG5leHRPYmplY3QpOworICAgIHRlbXBsYXRlIDxjbGFzcyBGaW5kZXIsIGNs
YXNzIFJlYWRlcj4KKyAgICB2b2lkIGVudW1lcmF0ZUZyZWVPYmplY3RzKEZpbmRlciYgZmluZGVy
LCBjb25zdCBSZWFkZXImIHJlYWRlciwgVENNYWxsb2NDZW50cmFsRnJlZUxpc3QqIHJlbW90ZUNl
bnRyYWxGcmVlTGlzdCkKKyAgICB7CisgICAgICAgIGZvciAoU3Bhbiogc3BhbiA9ICZlbXB0eTsg
c3BhbiAmJiBzcGFuICE9ICZlbXB0eTsgc3BhbiA9IChzcGFuLT5uZXh0ID8gcmVhZGVyKHNwYW4t
Pm5leHQpIDogMCkpCisgICAgICAgICAgICBBU1NFUlQoIXNwYW4tPm9iamVjdHMpOworCisgICAg
ICAgIEFTU0VSVCghbm9uZW1wdHkub2JqZWN0cyk7CisgICAgICAgIHN0YXRpYyBjb25zdCBwdHJk
aWZmX3Qgbm9uZW1wdHlPZmZzZXQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPigmbm9u
ZW1wdHkpIC0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4odGhpcyk7CisKKyAgICAgICAg
U3BhbiogcmVtb3RlTm9uZW1wdHkgPSByZWludGVycHJldF9jYXN0PFNwYW4qPihyZWludGVycHJl
dF9jYXN0PGNoYXIqPihyZW1vdGVDZW50cmFsRnJlZUxpc3QpICsgbm9uZW1wdHlPZmZzZXQpOwor
ICAgICAgICBTcGFuKiByZW1vdGVTcGFuID0gbm9uZW1wdHkubmV4dDsKKworICAgICAgICBmb3Ig
KFNwYW4qIHNwYW4gPSByZWFkZXIocmVtb3RlU3Bhbik7IHNwYW4gJiYgcmVtb3RlU3BhbiAhPSBy
ZW1vdGVOb25lbXB0eTsgcmVtb3RlU3BhbiA9IHNwYW4tPm5leHQsIHNwYW4gPSAoc3Bhbi0+bmV4
dCA/IHJlYWRlcihzcGFuLT5uZXh0KSA6IDApKSB7CisgICAgICAgICAgICBmb3IgKHZvaWQqIG5l
eHRPYmplY3QgPSBzcGFuLT5vYmplY3RzOyBuZXh0T2JqZWN0OyBuZXh0T2JqZWN0ID0gcmVhZGVy
Lm5leHRFbnRyeUluTGlua2VkTGlzdChyZWludGVycHJldF9jYXN0PHZvaWQqKj4obmV4dE9iamVj
dCkpKQorICAgICAgICAgICAgICAgIGZpbmRlci52aXNpdChuZXh0T2JqZWN0KTsKKyAgICAgICAg
fQogICAgIH0KLSAgfQogI2VuZGlmCiAKLSBwcml2YXRlOgotICAvLyBSRVFVSVJFUzogbG9ja18g
aXMgaGVsZAotICAvLyBSZW1vdmUgb2JqZWN0IGZyb20gY2FjaGUgYW5kIHJldHVybi4KLSAgLy8g
UmV0dXJuIE5VTEwgaWYgbm8gZnJlZSBlbnRyaWVzIGluIGNhY2hlLgotICB2b2lkKiBGZXRjaEZy
b21TcGFucygpOwotCi0gIC8vIFJFUVVJUkVTOiBsb2NrXyBpcyBoZWxkCi0gIC8vIFJlbW92ZSBv
YmplY3QgZnJvbSBjYWNoZSBhbmQgcmV0dXJuLiAgRmV0Y2hlcwotICAvLyBmcm9tIHBhZ2VoZWFw
IGlmIGNhY2hlIGlzIGVtcHR5LiAgT25seSByZXR1cm5zCi0gIC8vIE5VTEwgb24gYWxsb2NhdGlv
biBmYWlsdXJlLgotICB2b2lkKiBGZXRjaEZyb21TcGFuc1NhZmUoKTsKLQotICAvLyBSRVFVSVJF
UzogbG9ja18gaXMgaGVsZAotICAvLyBSZWxlYXNlIGEgbGlua2VkIGxpc3Qgb2Ygb2JqZWN0cyB0
byBzcGFucy4KLSAgLy8gTWF5IHRlbXBvcmFyaWx5IHJlbGVhc2UgbG9ja18uCi0gIHZvaWQgUmVs
ZWFzZUxpc3RUb1NwYW5zKHZvaWQgKnN0YXJ0KTsKLQotICAvLyBSRVFVSVJFUzogbG9ja18gaXMg
aGVsZAotICAvLyBSZWxlYXNlIGFuIG9iamVjdCB0byBzcGFucy4KLSAgLy8gTWF5IHRlbXBvcmFy
aWx5IHJlbGVhc2UgbG9ja18uCi0gIEFMV0FZU19JTkxJTkUgdm9pZCBSZWxlYXNlVG9TcGFucyh2
b2lkKiBvYmplY3QpOwotCi0gIC8vIFJFUVVJUkVTOiBsb2NrXyBpcyBoZWxkCi0gIC8vIFBvcHVs
YXRlIGNhY2hlIGJ5IGZldGNoaW5nIGZyb20gdGhlIHBhZ2UgaGVhcC4KLSAgLy8gTWF5IHRlbXBv
cmFyaWx5IHJlbGVhc2UgbG9ja18uCi0gIEFMV0FZU19JTkxJTkUgdm9pZCBQb3B1bGF0ZSgpOwot
Ci0gIC8vIFJFUVVJUkVTOiBsb2NrIGlzIGhlbGQuCi0gIC8vIFRyaWVzIHRvIG1ha2Ugcm9vbSBm
b3IgYSBUQ0VudHJ5LiAgSWYgdGhlIGNhY2hlIGlzIGZ1bGwgaXQgd2lsbCB0cnkgdG8KLSAgLy8g
ZXhwYW5kIGl0IGF0IHRoZSBjb3N0IG9mIHNvbWUgb3RoZXIgY2FjaGUgc2l6ZS4gIFJldHVybiBm
YWxzZSBpZiB0aGVyZSBpcwotICAvLyBubyBzcGFjZS4KLSAgYm9vbCBNYWtlQ2FjaGVTcGFjZSgp
OwotCi0gIC8vIFJFUVVJUkVTOiBsb2NrXyBmb3IgbG9ja2VkX3NpemVfY2xhc3MgaXMgaGVsZC4K
LSAgLy8gUGlja3MgYSAicmFuZG9tIiBzaXplIGNsYXNzIHRvIHN0ZWFsIFRDRW50cnkgc2xvdCBm
cm9tLiAgSW4gcmVhbGl0eSBpdAotICAvLyBqdXN0IGl0ZXJhdGVzIG92ZXIgdGhlIHNpemVjbGFz
c2VzIGJ1dCBkb2VzIHNvIHdpdGhvdXQgdGFraW5nIGEgbG9jay4KLSAgLy8gUmV0dXJucyB0cnVl
IG9uIHN1Y2Nlc3MuCi0gIC8vIE1heSB0ZW1wb3JhcmlseSBsb2NrIGEgInJhbmRvbSIgc2l6ZSBj
bGFzcy4KLSAgc3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCBFdmljdFJhbmRvbVNpemVDbGFzcyhz
aXplX3QgbG9ja2VkX3NpemVfY2xhc3MsIGJvb2wgZm9yY2UpOwotCi0gIC8vIFJFUVVJUkVTOiBs
b2NrXyBpcyAqbm90KiBoZWxkLgotICAvLyBUcmllcyB0byBzaHJpbmsgdGhlIENhY2hlLiAgSWYg
Zm9yY2UgaXMgdHJ1ZSBpdCB3aWxsIHJlbGFzZSBvYmplY3RzIHRvCi0gIC8vIHNwYW5zIGlmIGl0
IGFsbG93cyBpdCB0byBzaHJpbmsgdGhlIGNhY2hlLiAgUmV0dXJuIGZhbHNlIGlmIGl0IGZhaWxl
ZCB0bwotICAvLyBzaHJpbmsgdGhlIGNhY2hlLiAgRGVjcmVtZW50cyBjYWNoZV9zaXplXyBvbiBz
dWNjZWVzcy4KLSAgLy8gTWF5IHRlbXBvcmFyaWx5IHRha2UgbG9ja18uICBJZiBpdCB0YWtlcyBs
b2NrXywgdGhlIGxvY2tlZF9zaXplX2NsYXNzCi0gIC8vIGxvY2sgaXMgcmVsZWFzZWQgdG8gdGhl
IHRocmVhZCBmcm9tIGhvbGRpbmcgdHdvIHNpemUgY2xhc3MgbG9ja3MKLSAgLy8gY29uY3VycmVu
dGx5IHdoaWNoIGNvdWxkIGxlYWQgdG8gYSBkZWFkbG9jay4KLSAgYm9vbCBTaHJpbmtDYWNoZShp
bnQgbG9ja2VkX3NpemVfY2xhc3MsIGJvb2wgZm9yY2UpOwotCi0gIC8vIFRoaXMgbG9jayBwcm90
ZWN0cyBhbGwgdGhlIGRhdGEgbWVtYmVycy4gIGNhY2hlZF9lbnRyaWVzIGFuZCBjYWNoZV9zaXpl
XwotICAvLyBtYXkgYmUgbG9va2VkIGF0IHdpdGhvdXQgaG9sZGluZyB0aGUgbG9jay4KLSAgU3Bp
bkxvY2sgbG9ja187Ci0KLSAgLy8gV2Uga2VlcCBsaW5rZWQgbGlzdHMgb2YgZW1wdHkgYW5kIG5v
bi1lbXB0eSBzcGFucy4KLSAgc2l6ZV90ICAgc2l6ZV9jbGFzc187ICAgICAvLyBNeSBzaXplIGNs
YXNzCi0gIFNwYW4gICAgIGVtcHR5XzsgICAgICAgICAgLy8gRHVtbXkgaGVhZGVyIGZvciBsaXN0
IG9mIGVtcHR5IHNwYW5zCi0gIFNwYW4gICAgIG5vbmVtcHR5XzsgICAgICAgLy8gRHVtbXkgaGVh
ZGVyIGZvciBsaXN0IG9mIG5vbi1lbXB0eSBzcGFucwotICBzaXplX3QgICBjb3VudGVyXzsgICAg
ICAgIC8vIE51bWJlciBvZiBmcmVlIG9iamVjdHMgaW4gY2FjaGUgZW50cnkKLQotICAvLyBIZXJl
IHdlIHJlc2VydmUgc3BhY2UgZm9yIFRDRW50cnkgY2FjaGUgc2xvdHMuICBTaW5jZSBvbmUgc2l6
ZSBjbGFzcyBjYW4KLSAgLy8gZW5kIHVwIGdldHRpbmcgYWxsIHRoZSBUQ0VudHJpZXMgcXVvdGEg
aW4gdGhlIHN5c3RlbSB3ZSBqdXN0IHByZWFsbG9jYXRlCi0gIC8vIHN1ZmZpY2llbnQgbnVtYmVy
IG9mIGVudHJpZXMgaGVyZS4KLSAgVENFbnRyeSB0Y19zbG90c19ba051bVRyYW5zZmVyRW50cmll
c107Ci0KLSAgLy8gTnVtYmVyIG9mIGN1cnJlbnRseSB1c2VkIGNhY2hlZCBlbnRyaWVzIGluIHRj
X3Nsb3RzXy4gIFRoaXMgdmFyaWFibGUgaXMKLSAgLy8gdXBkYXRlZCB1bmRlciBhIGxvY2sgYnV0
IGNhbiBiZSByZWFkIHdpdGhvdXQgb25lLgotICBpbnQzMl90IHVzZWRfc2xvdHNfOwotICAvLyBU
aGUgY3VycmVudCBudW1iZXIgb2Ygc2xvdHMgZm9yIHRoaXMgc2l6ZSBjbGFzcy4gIFRoaXMgaXMg
YW4KLSAgLy8gYWRhcHRpdmUgdmFsdWUgdGhhdCBpcyBpbmNyZWFzZWQgaWYgdGhlcmUgaXMgbG90
cyBvZiB0cmFmZmljCi0gIC8vIG9uIGEgZ2l2ZW4gc2l6ZSBjbGFzcy4KLSAgaW50MzJfdCBjYWNo
ZV9zaXplXzsKK3ByaXZhdGU6CisgICAgLy8gUkVRVUlSRVM6IGxvY2sgaXMgaGVsZAorICAgIC8v
IFJlbW92ZSBvYmplY3QgZnJvbSBjYWNoZSBhbmQgcmV0dXJuLgorICAgIC8vIFJldHVybiAwIGlm
IG5vIGZyZWUgZW50cmllcyBpbiBjYWNoZS4KKyAgICB2b2lkKiBGZXRjaEZyb21TcGFucygpOwor
CisgICAgLy8gUkVRVUlSRVM6IGxvY2sgaXMgaGVsZAorICAgIC8vIFJlbW92ZSBvYmplY3QgZnJv
bSBjYWNoZSBhbmQgcmV0dXJuLiBGZXRjaGVzCisgICAgLy8gZnJvbSBwYWdlaGVhcCBpZiBjYWNo
ZSBpcyBlbXB0eS4gT25seSByZXR1cm5zCisgICAgLy8gMCBvbiBhbGxvY2F0aW9uIGZhaWx1cmUu
CisgICAgdm9pZCogRmV0Y2hGcm9tU3BhbnNTYWZlKCk7CisKKyAgICAvLyBSRVFVSVJFUzogbG9j
ayBpcyBoZWxkCisgICAgLy8gUmVsZWFzZSBhIGxpbmtlZCBsaXN0IG9mIG9iamVjdHMgdG8gc3Bh
bnMuCisgICAgLy8gTWF5IHRlbXBvcmFyaWx5IHJlbGVhc2UgbG9jay4KKyAgICB2b2lkIFJlbGVh
c2VMaXN0VG9TcGFucyh2b2lkICpzdGFydCk7CisKKyAgICAvLyBSRVFVSVJFUzogbG9jayBpcyBo
ZWxkCisgICAgLy8gUmVsZWFzZSBhbiBvYmplY3QgdG8gc3BhbnMuCisgICAgLy8gTWF5IHRlbXBv
cmFyaWx5IHJlbGVhc2UgbG9jay4KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgUmVsZWFzZVRvU3Bh
bnModm9pZCopOworCisgICAgLy8gUkVRVUlSRVM6IGxvY2sgaXMgaGVsZAorICAgIC8vIFBvcHVs
YXRlIGNhY2hlIGJ5IGZldGNoaW5nIGZyb20gdGhlIHBhZ2UgaGVhcC4KKyAgICAvLyBNYXkgdGVt
cG9yYXJpbHkgcmVsZWFzZSBsb2NrLgorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBQb3B1bGF0ZSgp
OworCisgICAgLy8gUkVRVUlSRVM6IGxvY2sgaXMgaGVsZC4KKyAgICAvLyBUcmllcyB0byBtYWtl
IHJvb20gZm9yIGEgVENFbnRyeS4gSWYgdGhlIGNhY2hlIGlzIGZ1bGwgaXQgd2lsbCB0cnkgdG8K
KyAgICAvLyBleHBhbmQgaXQgYXQgdGhlIGNvc3Qgb2Ygc29tZSBvdGhlciBjYWNoZSBzaXplLiBS
ZXR1cm4gZmFsc2UgaWYgdGhlcmUgaXMKKyAgICAvLyBubyBzcGFjZS4KKyAgICBib29sIE1ha2VD
YWNoZVNwYWNlKCk7CisKKyAgICAvLyBSRVFVSVJFUzogbG9jayBmb3IgbG9ja2VkU2l6ZUNsYXNz
IGlzIGhlbGQuCisgICAgLy8gUGlja3MgYSAicmFuZG9tIiBzaXplIGNsYXNzIHRvIHN0ZWFsIFRD
RW50cnkgc2xvdCBmcm9tLiBJbiByZWFsaXR5IGl0CisgICAgLy8ganVzdCBpdGVyYXRlcyBvdmVy
IHRoZSBzaXplY2xhc3NlcyBidXQgZG9lcyBzbyB3aXRob3V0IHRha2luZyBhIGxvY2suCisgICAg
Ly8gUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MuCisgICAgLy8gTWF5IHRlbXBvcmFyaWx5IGxvY2sg
YSAicmFuZG9tIiBzaXplIGNsYXNzLgorICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGJvb2wgRXZp
Y3RSYW5kb21TaXplQ2xhc3Moc2l6ZV90IGxvY2tlZFNpemVDbGFzcywgYm9vbCBmb3JjZSk7CisK
KyAgICAvLyBSRVFVSVJFUzogbG9jayBpcyAqbm90KiBoZWxkLgorICAgIC8vIFRyaWVzIHRvIHNo
cmluayB0aGUgQ2FjaGUuIElmIGZvcmNlIGlzIHRydWUgaXQgd2lsbCByZWxhc2Ugb2JqZWN0cyB0
bworICAgIC8vIHNwYW5zIGlmIGl0IGFsbG93cyBpdCB0byBzaHJpbmsgdGhlIGNhY2hlLiBSZXR1
cm4gZmFsc2UgaWYgaXQgZmFpbGVkIHRvCisgICAgLy8gc2hyaW5rIHRoZSBjYWNoZS4gRGVjcmVt
ZW50cyBjYWNoZVNpemUgb24gc3VjY2Vlc3MuCisgICAgLy8gTWF5IHRlbXBvcmFyaWx5IHRha2Ug
bG9jay4gSWYgaXQgdGFrZXMgbG9jaywgdGhlIGxvY2tlZFNpemVDbGFzcworICAgIC8vIGxvY2sg
aXMgcmVsZWFzZWQgdG8gdGhlIHRocmVhZCBmcm9tIGhvbGRpbmcgdHdvIHNpemUgY2xhc3MgbG9j
a3MKKyAgICAvLyBjb25jdXJyZW50bHkgd2hpY2ggY291bGQgbGVhZCB0byBhIGRlYWRsb2NrLgor
ICAgIGJvb2wgU2hyaW5rQ2FjaGUoaW50IGxvY2tlZFNpemVDbGFzcywgYm9vbCBmb3JjZSk7CisK
KyAgICAvLyBUaGlzIGxvY2sgcHJvdGVjdHMgYWxsIHRoZSBkYXRhIG1lbWJlcnMuIGNhY2hlZF9l
bnRyaWVzIGFuZCBjYWNoZVNpemUKKyAgICAvLyBtYXkgYmUgbG9va2VkIGF0IHdpdGhvdXQgaG9s
ZGluZyB0aGUgbG9jay4KKyAgICBTcGluTG9jayBsb2NrOworCisgICAgLy8gV2Uga2VlcCBsaW5r
ZWQgbGlzdHMgb2YgZW1wdHkgYW5kIG5vbi1lbXB0eSBzcGFucy4KKyAgICBzaXplX3Qgc2l6ZUNs
YXNzOyAvLyBNeSBzaXplIGNsYXNzCisgICAgU3BhbiBlbXB0eTsgLy8gRHVtbXkgaGVhZGVyIGZv
ciBsaXN0IG9mIGVtcHR5IHNwYW5zCisgICAgU3BhbiBub25lbXB0eTsgLy8gRHVtbXkgaGVhZGVy
IGZvciBsaXN0IG9mIG5vbi1lbXB0eSBzcGFucworICAgIHNpemVfdCBjb3VudGVyOyAvLyBOdW1i
ZXIgb2YgZnJlZSBvYmplY3RzIGluIGNhY2hlIGVudHJ5CisKKyAgICAvLyBIZXJlIHdlIHJlc2Vy
dmUgc3BhY2UgZm9yIFRDRW50cnkgY2FjaGUgc2xvdHMuIFNpbmNlIG9uZSBzaXplIGNsYXNzIGNh
bgorICAgIC8vIGVuZCB1cCBnZXR0aW5nIGFsbCB0aGUgVENFbnRyaWVzIHF1b3RhIGluIHRoZSBz
eXN0ZW0gd2UganVzdCBwcmVhbGxvY2F0ZQorICAgIC8vIHN1ZmZpY2llbnQgbnVtYmVyIG9mIGVu
dHJpZXMgaGVyZS4KKyAgICBUQ0VudHJ5IHRjU2xvdHNba051bVRyYW5zZmVyRW50cmllc107CisK
KyAgICAvLyBOdW1iZXIgb2YgY3VycmVudGx5IHVzZWQgY2FjaGVkIGVudHJpZXMgaW4gdGNTbG90
cy4gVGhpcyB2YXJpYWJsZSBpcworICAgIC8vIHVwZGF0ZWQgdW5kZXIgYSBsb2NrIGJ1dCBjYW4g
YmUgcmVhZCB3aXRob3V0IG9uZS4KKyAgICBpbnQzMl90IHVzZWRTbG90czsKKyAgICAvLyBUaGUg
Y3VycmVudCBudW1iZXIgb2Ygc2xvdHMgZm9yIHRoaXMgc2l6ZSBjbGFzcy4gVGhpcyBpcyBhbgor
ICAgIC8vIGFkYXB0aXZlIHZhbHVlIHRoYXQgaXMgaW5jcmVhc2VkIGlmIHRoZXJlIGlzIGxvdHMg
b2YgdHJhZmZpYworICAgIC8vIG9uIGEgZ2l2ZW4gc2l6ZSBjbGFzcy4KKyAgICBpbnQzMl90IGNh
Y2hlU2l6ZTsKIH07CiAKIC8vIFBhZCBlYWNoIENlbnRyYWxDYWNoZSBvYmplY3QgdG8gbXVsdGlw
bGUgb2YgNjQgYnl0ZXMKLWNsYXNzIFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3RQYWRkZWQgOiBw
dWJsaWMgVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdCB7Ci0gcHJpdmF0ZToKLSAgY2hhciBwYWRf
Wyg2NCAtIChzaXplb2YoVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdCkgJSA2NCkpICUgNjRdOwor
Y2xhc3MgVENNYWxsb2NDZW50cmFsRnJlZUxpc3RQYWRkZWQgOiBwdWJsaWMgVENNYWxsb2NDZW50
cmFsRnJlZUxpc3QgeworcHJpdmF0ZToKKyAgICBjaGFyIHBhZFsoNjQgLSAoc2l6ZW9mKFRDTWFs
bG9jQ2VudHJhbEZyZWVMaXN0KSAlIDY0KSkgJSA2NF07CiB9OwogCiAvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAg
LTI0ODEsMjIgKzI1NDYsMjIgQEAgY2xhc3MgVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdFBhZGRl
ZCA6CiAKIC8vIENlbnRyYWwgY2FjaGUgLS0gYSBjb2xsZWN0aW9uIG9mIGZyZWUtbGlzdHMsIG9u
ZSBwZXIgc2l6ZS1jbGFzcy4KIC8vIFdlIGhhdmUgYSBzZXBhcmF0ZSBsb2NrIHBlciBmcmVlLWxp
c3QgdG8gcmVkdWNlIGNvbnRlbnRpb24uCi1zdGF0aWMgVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlz
dFBhZGRlZCBjZW50cmFsX2NhY2hlW2tOdW1DbGFzc2VzXTsKK3N0YXRpYyBUQ01hbGxvY0NlbnRy
YWxGcmVlTGlzdFBhZGRlZCBjZW50cmFsQ2FjaGVba051bUNsYXNzZXNdOwogCiAvLyBQYWdlLWxl
dmVsIGFsbG9jYXRvcgotc3RhdGljIEFsbG9jQWxpZ25tZW50SW50ZWdlciBwYWdlaGVhcF9tZW1v
cnlbKHNpemVvZihUQ01hbGxvY19QYWdlSGVhcCkgKyBzaXplb2YoQWxsb2NBbGlnbm1lbnRJbnRl
Z2VyKSAtIDEpIC8gc2l6ZW9mKEFsbG9jQWxpZ25tZW50SW50ZWdlcildOworc3RhdGljIEFsbG9j
QWxpZ25tZW50SW50ZWdlciBwYWdlaGVhcE1lbW9yeVsoc2l6ZW9mKFRDTWFsbG9jUGFnZUhlYXAp
ICsgc2l6ZW9mKEFsbG9jQWxpZ25tZW50SW50ZWdlcikgLSAxKSAvIHNpemVvZihBbGxvY0FsaWdu
bWVudEludGVnZXIpXTsKIHN0YXRpYyBib29sIHBoaW5pdGVkID0gZmFsc2U7CiAKIC8vIEF2b2lk
IGV4dHJhIGxldmVsIG9mIGluZGlyZWN0aW9uIGJ5IG1ha2luZyAicGFnZWhlYXAiIGJlIGp1c3Qg
YW4gYWxpYXMKLS8vIG9mIHBhZ2VoZWFwX21lbW9yeS4KKy8vIG9mIHBhZ2VoZWFwTWVtb3J5Lgog
dHlwZWRlZiB1bmlvbiB7CiAgICAgdm9pZCogbV9tZW1vcnk7Ci0gICAgVENNYWxsb2NfUGFnZUhl
YXAqIG1fcGFnZUhlYXA7CisgICAgVENNYWxsb2NQYWdlSGVhcCogbV9wYWdlSGVhcDsKIH0gUGFn
ZUhlYXBVbmlvbjsKIAotc3RhdGljIGlubGluZSBUQ01hbGxvY19QYWdlSGVhcCogZ2V0UGFnZUhl
YXAoKQorc3RhdGljIGlubGluZSBUQ01hbGxvY1BhZ2VIZWFwKiBnZXRQYWdlSGVhcCgpCiB7Ci0g
ICAgUGFnZUhlYXBVbmlvbiB1ID0geyAmcGFnZWhlYXBfbWVtb3J5WzBdIH07CisgICAgUGFnZUhl
YXBVbmlvbiB1ID0geyAmcGFnZWhlYXBNZW1vcnlbMF0gfTsKICAgICByZXR1cm4gdS5tX3BhZ2VI
ZWFwOwogfQogCkBAIC0yNTA2LDkgKzI1NzEsOSBAQCBzdGF0aWMgaW5saW5lIFRDTWFsbG9jX1Bh
Z2VIZWFwKiBnZXRQYWdlCiAKICNpZiBIQVZFKERJU1BBVENIX0gpIHx8IE9TKFdJTkRPV1MpCiAK
LXZvaWQgVENNYWxsb2NfUGFnZUhlYXA6OnBlcmlvZGljU2NhdmVuZ2UoKQordm9pZCBUQ01hbGxv
Y1BhZ2VIZWFwOjpwZXJpb2RpY1NjYXZlbmdlKCkKIHsKLSAgICBTcGluTG9ja0hvbGRlciBoKCZw
YWdlaGVhcF9sb2NrKTsKKyAgICBTcGluTG9ja0hvbGRlciBoKCZwYWdlaGVhcExvY2spOwogICAg
IHBhZ2VoZWFwLT5zY2F2ZW5nZSgpOwogCiAgICAgaWYgKHNob3VsZFNjYXZlbmdlKCkpIHsKQEAg
LTI1MTksMzYgKzI1ODQsMzYgQEAgdm9pZCBUQ01hbGxvY19QYWdlSGVhcDo6cGVyaW9kaWNTY2F2
ZW5nZQogICAgIHN1c3BlbmRTY2F2ZW5nZXIoKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIFRD
TWFsbG9jX1BhZ2VIZWFwOjpzaWduYWxTY2F2ZW5nZXIoKQorQUxXQVlTX0lOTElORSB2b2lkIFRD
TWFsbG9jUGFnZUhlYXA6OnNpZ25hbFNjYXZlbmdlcigpCiB7Ci0gICAgQVNTRVJUKHBhZ2VoZWFw
X2xvY2suSXNIZWxkKCkpOworICAgIEFTU0VSVChwYWdlaGVhcExvY2suSXNIZWxkKCkpOwogICAg
IGlmIChpc1NjYXZlbmdlclN1c3BlbmRlZCgpICYmIHNob3VsZFNjYXZlbmdlKCkpCiAgICAgICAg
IHNjaGVkdWxlU2NhdmVuZ2VyKCk7CiB9CiAKICNlbHNlCiAKLXZvaWQgVENNYWxsb2NfUGFnZUhl
YXA6OnNjYXZlbmdlclRocmVhZCgpCit2b2lkIFRDTWFsbG9jUGFnZUhlYXA6OnNjYXZlbmdlclRo
cmVhZCgpCiB7CiAjaWYgSEFWRShQVEhSRUFEX1NFVE5BTUVfTlApCi0gIHB0aHJlYWRfc2V0bmFt
ZV9ucCgiSmF2YVNjcmlwdENvcmU6IEZhc3RNYWxsb2Mgc2NhdmVuZ2VyIik7CisgICAgcHRocmVh
ZF9zZXRuYW1lX25wKCJKYXZhU2NyaXB0Q29yZTogRmFzdE1hbGxvYyBzY2F2ZW5nZXIiKTsKICNl
bmRpZgogCi0gIHdoaWxlICgxKSB7Ci0gICAgICBpZiAoIXNob3VsZFNjYXZlbmdlKCkpIHsKLSAg
ICAgICAgICBwdGhyZWFkX211dGV4X2xvY2soJm1fc2NhdmVuZ2VNdXRleCk7Ci0gICAgICAgICAg
bV9zY2F2ZW5nZVRocmVhZEFjdGl2ZSA9IGZhbHNlOwotICAgICAgICAgIC8vIEJsb2NrIHVudGls
IHRoZXJlIGFyZSBlbm91Z2ggZnJlZSBjb21taXR0ZWQgcGFnZXMgdG8gcmVsZWFzZSBiYWNrIHRv
IHRoZSBzeXN0ZW0uCi0gICAgICAgICAgcHRocmVhZF9jb25kX3dhaXQoJm1fc2NhdmVuZ2VDb25k
aXRpb24sICZtX3NjYXZlbmdlTXV0ZXgpOwotICAgICAgICAgIG1fc2NhdmVuZ2VUaHJlYWRBY3Rp
dmUgPSB0cnVlOwotICAgICAgICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZtX3NjYXZlbmdlTXV0
ZXgpOwotICAgICAgfQotICAgICAgc2xlZXAoa1NjYXZlbmdlRGVsYXlJblNlY29uZHMpOwotICAg
ICAgewotICAgICAgICAgIFNwaW5Mb2NrSG9sZGVyIGgoJnBhZ2VoZWFwX2xvY2spOwotICAgICAg
ICAgIHBhZ2VoZWFwLT5zY2F2ZW5nZSgpOwotICAgICAgfQotICB9CisgICAgd2hpbGUgKDEpIHsK
KyAgICAgICAgaWYgKCFzaG91bGRTY2F2ZW5nZSgpKSB7CisgICAgICAgICAgICBwdGhyZWFkX211
dGV4X2xvY2soJm1fc2NhdmVuZ2VNdXRleCk7CisgICAgICAgICAgICBtX3NjYXZlbmdlVGhyZWFk
QWN0aXZlID0gZmFsc2U7CisgICAgICAgICAgICAvLyBCbG9jayB1bnRpbCB0aGVyZSBhcmUgZW5v
dWdoIGZyZWUgY29tbWl0dGVkIHBhZ2VzIHRvIHJlbGVhc2UgYmFjayB0byB0aGUgc3lzdGVtLgor
ICAgICAgICAgICAgcHRocmVhZF9jb25kX3dhaXQoJm1fc2NhdmVuZ2VDb25kaXRpb24sICZtX3Nj
YXZlbmdlTXV0ZXgpOworICAgICAgICAgICAgbV9zY2F2ZW5nZVRocmVhZEFjdGl2ZSA9IHRydWU7
CisgICAgICAgICAgICBwdGhyZWFkX211dGV4X3VubG9jaygmbV9zY2F2ZW5nZU11dGV4KTsKKyAg
ICAgICAgfQorICAgICAgICBzbGVlcChrU2NhdmVuZ2VEZWxheUluU2Vjb25kcyk7CisgICAgICAg
IHsKKyAgICAgICAgICAgIFNwaW5Mb2NrSG9sZGVyIGgoJnBhZ2VoZWFwTG9jayk7CisgICAgICAg
ICAgICBwYWdlaGVhcC0+c2NhdmVuZ2UoKTsKKyAgICAgICAgfQorICAgIH0KIH0KIAogI2VuZGlm
CkBAIC0yNTU4LDE5ICsyNjIzLDE5IEBAIHZvaWQgVENNYWxsb2NfUGFnZUhlYXA6OnNjYXZlbmdl
clRocmVhZCgKIC8vIElmIFRMUyBpcyBhdmFpbGFibGUsIHdlIGFsc28gc3RvcmUgYSBjb3B5CiAv
LyBvZiB0aGUgcGVyLXRocmVhZCBvYmplY3QgaW4gYSBfX3RocmVhZCB2YXJpYWJsZQogLy8gc2lu
Y2UgX190aHJlYWQgdmFyaWFibGVzIGFyZSBmYXN0ZXIgdG8gcmVhZAotLy8gdGhhbiBwdGhyZWFk
X2dldHNwZWNpZmljKCkuICBXZSBzdGlsbCBuZWVkCisvLyB0aGFuIHB0aHJlYWRfZ2V0c3BlY2lm
aWMoKS4gV2Ugc3RpbGwgbmVlZAogLy8gcHRocmVhZF9zZXRzcGVjaWZpYygpIGJlY2F1c2UgX190
aHJlYWQKIC8vIHZhcmlhYmxlcyBwcm92aWRlIG5vIHdheSB0byBydW4gY2xlYW51cAogLy8gY29k
ZSB3aGVuIGEgdGhyZWFkIGlzIGRlc3Ryb3llZC4KICNpZmRlZiBIQVZFX1RMUwotc3RhdGljIF9f
dGhyZWFkIFRDTWFsbG9jX1RocmVhZENhY2hlICp0aHJlYWRsb2NhbF9oZWFwOworc3RhdGljIF9f
dGhyZWFkIFRDTWFsbG9jVGhyZWFkQ2FjaGUgKnRocmVhZGxvY2FsSGVhcDsKICNlbmRpZgotLy8g
VGhyZWFkLXNwZWNpZmljIGtleS4gIEluaXRpYWxpemF0aW9uIGhlcmUgaXMgc29tZXdoYXQgdHJp
Y2t5CisvLyBUaHJlYWQtc3BlY2lmaWMga2V5LiBJbml0aWFsaXphdGlvbiBoZXJlIGlzIHNvbWV3
aGF0IHRyaWNreQogLy8gYmVjYXVzZSBzb21lIExpbnV4IHN0YXJ0dXAgY29kZSBpbnZva2VzIG1h
bGxvYygpIGJlZm9yZSBpdAogLy8gaXMgaW4gYSBnb29kIGVub3VnaCBzdGF0ZSB0byBoYW5kbGUg
cHRocmVhZF9rZXljcmVhdGUoKS4KLS8vIFRoZXJlZm9yZSwgd2UgdXNlIFRTRCBrZXlzIG9ubHkg
YWZ0ZXIgdHNkX2luaXRlZCBpcyBzZXQgdG8gdHJ1ZS4KKy8vIFRoZXJlZm9yZSwgd2UgdXNlIFRT
RCBrZXlzIG9ubHkgYWZ0ZXIgdHNkSW5pdGVkIGlzIHNldCB0byB0cnVlLgogLy8gVW50aWwgdGhl
biwgd2UgdXNlIGEgc2xvdyBwYXRoIHRvIGdldCB0aGUgaGVhcCBvYmplY3QuCi1zdGF0aWMgYm9v
bCB0c2RfaW5pdGVkID0gZmFsc2U7CitzdGF0aWMgYm9vbCB0c2RJbml0ZWQgPSBmYWxzZTsKICNp
ZiBVU0UoUFRIUkVBRF9HRVRTUEVDSUZJQ19ESVJFQ1QpCiBzdGF0aWMgY29uc3QgcHRocmVhZF9r
ZXlfdCBoZWFwX2tleSA9IF9fUFRLX0ZSQU1FV09SS19KQVZBU0NSSVBUQ09SRV9LRVkwOwogI2Vs
c2UKQEAgLTI1ODAsNyArMjY0NSw3IEBAIHN0YXRpYyBwdGhyZWFkX2tleV90IGhlYXBfa2V5Owog
RFdPUkQgdGxzSW5kZXggPSBUTFNfT1VUX09GX0lOREVYRVM7CiAjZW5kaWYKIAotc3RhdGljIEFM
V0FZU19JTkxJTkUgdm9pZCBzZXRUaHJlYWRIZWFwKFRDTWFsbG9jX1RocmVhZENhY2hlKiBoZWFw
KQorc3RhdGljIEFMV0FZU19JTkxJTkUgdm9pZCBzZXRUaHJlYWRIZWFwKFRDTWFsbG9jVGhyZWFk
Q2FjaGUqIGhlYXApCiB7CiAjaWYgVVNFKFBUSFJFQURfR0VUU1BFQ0lGSUNfRElSRUNUKQogICAg
IC8vIENhbid0IGhhdmUgdHdvIGxpYnJhcmllcyBib3RoIGRvaW5nIHRoaXMgaW4gdGhlIHNhbWUg
cHJvY2VzcywKQEAgLTI1OTksMTE5ICsyNjY0LDEyNSBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSB2
b2lkIHNldFRocmVhZEhlYXAoCiB9CiAKIC8vIEFsbG9jYXRvciBmb3IgdGhyZWFkIGhlYXBzCi1z
dGF0aWMgUGFnZUhlYXBBbGxvY2F0b3I8VENNYWxsb2NfVGhyZWFkQ2FjaGU+IHRocmVhZGhlYXBf
YWxsb2NhdG9yOworc3RhdGljIFBhZ2VIZWFwQWxsb2NhdG9yPFRDTWFsbG9jVGhyZWFkQ2FjaGU+
IHRocmVhZGhlYXBBbGxvY2F0b3I7CiAKLS8vIExpbmtlZCBsaXN0IG9mIGhlYXAgb2JqZWN0cy4g
IFByb3RlY3RlZCBieSBwYWdlaGVhcF9sb2NrLgotc3RhdGljIFRDTWFsbG9jX1RocmVhZENhY2hl
KiB0aHJlYWRfaGVhcHMgPSBOVUxMOworLy8gTGlua2VkIGxpc3Qgb2YgaGVhcCBvYmplY3RzLiBQ
cm90ZWN0ZWQgYnkgcGFnZWhlYXBMb2NrLgorc3RhdGljIFRDTWFsbG9jVGhyZWFkQ2FjaGUqIHRo
cmVhZEhlYXBzID0gMDsKIHN0YXRpYyBpbnQgdGhyZWFkX2hlYXBfY291bnQgPSAwOwogCi0vLyBP
dmVyYWxsIHRocmVhZCBjYWNoZSBzaXplLiAgUHJvdGVjdGVkIGJ5IHBhZ2VoZWFwX2xvY2suCi1z
dGF0aWMgc2l6ZV90IG92ZXJhbGxfdGhyZWFkX2NhY2hlX3NpemUgPSBrRGVmYXVsdE92ZXJhbGxU
aHJlYWRDYWNoZVNpemU7CisvLyBPdmVyYWxsIHRocmVhZCBjYWNoZSBzaXplLiBQcm90ZWN0ZWQg
YnkgcGFnZWhlYXBMb2NrLgorc3RhdGljIHNpemVfdCBvdmVyYWxsVGhyZWFkQ2FjaGVzaXplID0g
a0RlZmF1bHRPdmVyYWxsVGhyZWFkQ2FjaGVTaXplOwogCi0vLyBHbG9iYWwgcGVyLXRocmVhZCBj
YWNoZSBzaXplLiAgV3JpdGVzIGFyZSBwcm90ZWN0ZWQgYnkKLS8vIHBhZ2VoZWFwX2xvY2suICBS
ZWFkcyBhcmUgZG9uZSB3aXRob3V0IGFueSBsb2NraW5nLCB3aGljaCBzaG91bGQgYmUKKy8vIEds
b2JhbCBwZXItdGhyZWFkIGNhY2hlIHNpemUuIFdyaXRlcyBhcmUgcHJvdGVjdGVkIGJ5CisvLyBw
YWdlaGVhcExvY2suIFJlYWRzIGFyZSBkb25lIHdpdGhvdXQgYW55IGxvY2tpbmcsIHdoaWNoIHNo
b3VsZCBiZQogLy8gZmluZSBhcyBsb25nIGFzIHNpemVfdCBjYW4gYmUgd3JpdHRlbiBhdG9taWNh
bGx5IGFuZCB3ZSBkb24ndCBwbGFjZQogLy8gaW52YXJpYW50cyBiZXR3ZWVuIHRoaXMgdmFyaWFi
bGUgYW5kIG90aGVyIHBpZWNlcyBvZiBzdGF0ZS4KLXN0YXRpYyB2b2xhdGlsZSBzaXplX3QgcGVy
X3RocmVhZF9jYWNoZV9zaXplID0ga01heFRocmVhZENhY2hlU2l6ZTsKK3N0YXRpYyB2b2xhdGls
ZSBzaXplX3QgcGVyVGhyZWFkQ2FjaGVTaXplID0ga01heFRocmVhZENhY2hlU2l6ZTsKIAogLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAvLyBDZW50cmFsIGNhY2hlIGltcGxlbWVudGF0aW9uCiAvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
IAotdm9pZCBUQ01hbGxvY19DZW50cmFsX0ZyZWVMaXN0OjpJbml0KHNpemVfdCBjbCkgewotICBs
b2NrXy5Jbml0KCk7Ci0gIHNpemVfY2xhc3NfID0gY2w7Ci0gIERMTF9Jbml0KCZlbXB0eV8pOwot
ICBETExfSW5pdCgmbm9uZW1wdHlfKTsKLSAgY291bnRlcl8gPSAwOwotCi0gIGNhY2hlX3NpemVf
ID0gMTsKLSAgdXNlZF9zbG90c18gPSAwOwotICBBU1NFUlQoY2FjaGVfc2l6ZV8gPD0ga051bVRy
YW5zZmVyRW50cmllcyk7Ci19Ci0KLXZvaWQgVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdDo6UmVs
ZWFzZUxpc3RUb1NwYW5zKHZvaWQqIHN0YXJ0KSB7Ci0gIHdoaWxlIChzdGFydCkgewotICAgIHZv
aWQgKm5leHQgPSBTTExfTmV4dChzdGFydCk7Ci0gICAgUmVsZWFzZVRvU3BhbnMoc3RhcnQpOwot
ICAgIHN0YXJ0ID0gbmV4dDsKLSAgfQordm9pZCBUQ01hbGxvY0NlbnRyYWxGcmVlTGlzdDo6SW5p
dChzaXplX3QgY2wpCit7CisgICAgbG9jay5Jbml0KCk7CisgICAgc2l6ZUNsYXNzID0gY2w7Cisg
ICAgRExMSW5pdCgmZW1wdHkpOworICAgIERMTEluaXQoJm5vbmVtcHR5KTsKKyAgICBjb3VudGVy
ID0gMDsKKworICAgIGNhY2hlU2l6ZSA9IDE7CisgICAgdXNlZFNsb3RzID0gMDsKKyAgICBBU1NF
UlQoY2FjaGVTaXplIDw9IGtOdW1UcmFuc2ZlckVudHJpZXMpOwogfQogCi1BTFdBWVNfSU5MSU5F
IHZvaWQgVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdDo6UmVsZWFzZVRvU3BhbnModm9pZCogb2Jq
ZWN0KSB7Ci0gIGNvbnN0IFBhZ2VJRCBwID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG9i
amVjdCkgPj4ga1BhZ2VTaGlmdDsKLSAgU3Bhbiogc3BhbiA9IHBhZ2VoZWFwLT5HZXREZXNjcmlw
dG9yKHApOwotICBBU1NFUlQoc3BhbiAhPSBOVUxMKTsKLSAgQVNTRVJUKHNwYW4tPnJlZmNvdW50
ID4gMCk7Ci0KLSAgLy8gSWYgc3BhbiBpcyBlbXB0eSwgbW92ZSBpdCB0byBub24tZW1wdHkgbGlz
dAotICBpZiAoc3Bhbi0+b2JqZWN0cyA9PSBOVUxMKSB7Ci0gICAgRExMX1JlbW92ZShzcGFuKTsK
LSAgICBETExfUHJlcGVuZCgmbm9uZW1wdHlfLCBzcGFuKTsKLSAgICBFdmVudChzcGFuLCAnTics
IDApOwotICB9Cit2b2lkIFRDTWFsbG9jQ2VudHJhbEZyZWVMaXN0OjpSZWxlYXNlTGlzdFRvU3Bh
bnModm9pZCogc3RhcnQpCit7CisgICAgd2hpbGUgKHN0YXJ0KSB7CisgICAgICAgIHZvaWQqIG5l
eHQgPSBTTExfTmV4dChzdGFydCk7CisgICAgICAgIFJlbGVhc2VUb1NwYW5zKHN0YXJ0KTsKKyAg
ICAgICAgc3RhcnQgPSBuZXh0OworICAgIH0KK30KKworQUxXQVlTX0lOTElORSB2b2lkIFRDTWFs
bG9jQ2VudHJhbEZyZWVMaXN0OjpSZWxlYXNlVG9TcGFucyh2b2lkKiBvYmplY3QpCit7CisgICAg
Y29uc3QgUGFnZUlEIHAgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ob2JqZWN0KSA+PiBr
UGFnZVNoaWZ0OworICAgIFNwYW4qIHNwYW4gPSBwYWdlaGVhcC0+R2V0RGVzY3JpcHRvcihwKTsK
KyAgICBBU1NFUlQoc3Bhbik7CisgICAgQVNTRVJUKHNwYW4tPnJlZmNvdW50ID4gMCk7CiAKLSAg
Ly8gVGhlIGZvbGxvd2luZyBjaGVjayBpcyBleHBlbnNpdmUsIHNvIGl0IGlzIGRpc2FibGVkIGJ5
IGRlZmF1bHQKLSAgaWYgKGZhbHNlKSB7Ci0gICAgLy8gQ2hlY2sgdGhhdCBvYmplY3QgZG9lcyBu
b3Qgb2NjdXIgaW4gbGlzdAotICAgIHVuc2lnbmVkIGdvdCA9IDA7Ci0gICAgZm9yICh2b2lkKiBw
ID0gc3Bhbi0+b2JqZWN0czsgcCAhPSBOVUxMOyBwID0gKigodm9pZCoqKSBwKSkgewotICAgICAg
QVNTRVJUKHAgIT0gb2JqZWN0KTsKLSAgICAgIGdvdCsrOworICAgIC8vIElmIHNwYW4gaXMgZW1w
dHksIG1vdmUgaXQgdG8gbm9uLWVtcHR5IGxpc3QKKyAgICBpZiAoIXNwYW4tPm9iamVjdHMpIHsK
KyAgICAgICAgRExMUmVtb3ZlKHNwYW4pOworICAgICAgICBETExQcmVwZW5kKCZub25lbXB0eSwg
c3Bhbik7CisgICAgICAgIEV2ZW50KHNwYW4sICdOJywgMCk7CiAgICAgfQotICAgIEFTU0VSVChn
b3QgKyBzcGFuLT5yZWZjb3VudCA9PQotICAgICAgICAgICAoc3Bhbi0+bGVuZ3RoPDxrUGFnZVNo
aWZ0KS9CeXRlU2l6ZUZvckNsYXNzKHNwYW4tPnNpemVjbGFzcykpOwotICB9CiAKLSAgY291bnRl
cl8rKzsKLSAgc3Bhbi0+cmVmY291bnQtLTsKLSAgaWYgKHNwYW4tPnJlZmNvdW50ID09IDApIHsK
LSAgICBFdmVudChzcGFuLCAnIycsIDApOwotICAgIGNvdW50ZXJfIC09IChzcGFuLT5sZW5ndGg8
PGtQYWdlU2hpZnQpIC8gQnl0ZVNpemVGb3JDbGFzcyhzcGFuLT5zaXplY2xhc3MpOwotICAgIERM
TF9SZW1vdmUoc3Bhbik7CisgICAgLy8gVGhlIGZvbGxvd2luZyBjaGVjayBpcyBleHBlbnNpdmUs
IHNvIGl0IGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQKKyAgICBpZiAoZmFsc2UpIHsKKyAgICAgICAg
Ly8gQ2hlY2sgdGhhdCBvYmplY3QgZG9lcyBub3Qgb2NjdXIgaW4gbGlzdAorICAgICAgICB1bnNp
Z25lZCBnb3QgPSAwOworICAgICAgICBmb3IgKHZvaWQqIHAgPSBzcGFuLT5vYmplY3RzOyBwOyBw
ID0gKigodm9pZCoqKSBwKSkgeworICAgICAgICAgICAgQVNTRVJUKHAgIT0gb2JqZWN0KTsKKyAg
ICAgICAgICAgIGdvdCsrOworICAgICAgICB9CisgICAgICAgIEFTU0VSVChnb3QgKyBzcGFuLT5y
ZWZjb3VudCA9PQorICAgICAgICAgICAgICAgIChzcGFuLT5sZW5ndGggPDwga1BhZ2VTaGlmdCkg
LyBCeXRlU2l6ZUZvckNsYXNzKHNwYW4tPnNpemVjbGFzcykpOworICAgIH0KIAotICAgIC8vIFJl
bGVhc2UgY2VudHJhbCBsaXN0IGxvY2sgd2hpbGUgb3BlcmF0aW5nIG9uIHBhZ2VoZWFwCi0gICAg
bG9ja18uVW5sb2NrKCk7Ci0gICAgewotICAgICAgU3BpbkxvY2tIb2xkZXIgaCgmcGFnZWhlYXBf
bG9jayk7Ci0gICAgICBwYWdlaGVhcC0+RGVsZXRlKHNwYW4pOworICAgIGNvdW50ZXIrKzsKKyAg
ICBzcGFuLT5yZWZjb3VudC0tOworICAgIGlmICghc3Bhbi0+cmVmY291bnQpIHsKKyAgICAgICAg
RXZlbnQoc3BhbiwgJyMnLCAwKTsKKyAgICAgICAgY291bnRlciAtPSAoc3Bhbi0+bGVuZ3RoIDw8
IGtQYWdlU2hpZnQpIC8gQnl0ZVNpemVGb3JDbGFzcyhzcGFuLT5zaXplY2xhc3MpOworICAgICAg
ICBETExSZW1vdmUoc3Bhbik7CisKKyAgICAgICAgLy8gUmVsZWFzZSBjZW50cmFsIGxpc3QgbG9j
ayB3aGlsZSBvcGVyYXRpbmcgb24gcGFnZWhlYXAKKyAgICAgICAgbG9jay5VbmxvY2soKTsKKyAg
ICAgICAgeworICAgICAgICAgICAgU3BpbkxvY2tIb2xkZXIgaCgmcGFnZWhlYXBMb2NrKTsKKyAg
ICAgICAgICAgIHBhZ2VoZWFwLT5EZWxldGUoc3Bhbik7CisgICAgICAgIH0KKyAgICAgICAgbG9j
ay5Mb2NrKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgKihyZWludGVycHJldF9jYXN0PHZvaWQq
Kj4ob2JqZWN0KSkgPSBzcGFuLT5vYmplY3RzOworICAgICAgICBzcGFuLT5vYmplY3RzID0gb2Jq
ZWN0OwogICAgIH0KLSAgICBsb2NrXy5Mb2NrKCk7Ci0gIH0gZWxzZSB7Ci0gICAgKihyZWludGVy
cHJldF9jYXN0PHZvaWQqKj4ob2JqZWN0KSkgPSBzcGFuLT5vYmplY3RzOwotICAgIHNwYW4tPm9i
amVjdHMgPSBvYmplY3Q7Ci0gIH0KIH0KIAotQUxXQVlTX0lOTElORSBib29sIFRDTWFsbG9jX0Nl
bnRyYWxfRnJlZUxpc3Q6OkV2aWN0UmFuZG9tU2l6ZUNsYXNzKAotICAgIHNpemVfdCBsb2NrZWRf
c2l6ZV9jbGFzcywgYm9vbCBmb3JjZSkgewotICBzdGF0aWMgaW50IHJhY2VfY291bnRlciA9IDA7
Ci0gIGludCB0ID0gcmFjZV9jb3VudGVyKys7ICAvLyBVcGRhdGVkIHdpdGhvdXQgYSBsb2NrLCBi
dXQgd2hvIGNhcmVzLgotICBpZiAodCA+PSBzdGF0aWNfY2FzdDxpbnQ+KGtOdW1DbGFzc2VzKSkg
ewotICAgIHdoaWxlICh0ID49IHN0YXRpY19jYXN0PGludD4oa051bUNsYXNzZXMpKSB7Ci0gICAg
ICB0IC09IGtOdW1DbGFzc2VzOworQUxXQVlTX0lOTElORSBib29sIFRDTWFsbG9jQ2VudHJhbEZy
ZWVMaXN0OjpFdmljdFJhbmRvbVNpemVDbGFzcyhzaXplX3QgbG9ja2VkU2l6ZUNsYXNzLCBib29s
IGZvcmNlKQoreworICAgIHN0YXRpYyBpbnQgcmFjZUNvdW50ZXIgPSAwOworICAgIGludCB0ID0g
cmFjZUNvdW50ZXIrKzsgLy8gVXBkYXRlZCB3aXRob3V0IGEgbG9jaywgYnV0IHdobyBjYXJlcy4K
KyAgICBpZiAodCA+PSBzdGF0aWNfY2FzdDxpbnQ+KGtOdW1DbGFzc2VzKSkgeworICAgICAgICB3
aGlsZSAodCA+PSBzdGF0aWNfY2FzdDxpbnQ+KGtOdW1DbGFzc2VzKSkKKyAgICAgICAgICAgIHQg
LT0ga051bUNsYXNzZXM7CisgICAgICAgIHJhY2VDb3VudGVyID0gdDsKKyAgICB9CisgICAgQVNT
RVJUKHQgPj0gMCk7CisgICAgQVNTRVJUKHQgPCBzdGF0aWNfY2FzdDxpbnQ+KGtOdW1DbGFzc2Vz
KSk7CisgICAgaWYgKHQgPT0gc3RhdGljX2Nhc3Q8aW50Pihsb2NrZWRTaXplQ2xhc3MpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGNlbnRyYWxDYWNoZVt0XS5TaHJpbmtDYWNo
ZShzdGF0aWNfY2FzdDxpbnQ+KGxvY2tlZFNpemVDbGFzcyksIGZvcmNlKTsKK30KKworYm9vbCBU
Q01hbGxvY0NlbnRyYWxGcmVlTGlzdDo6TWFrZUNhY2hlU3BhY2UoKQoreworICAgIC8vIElzIHRo
ZXJlIHJvb20gaW4gdGhlIGNhY2hlPworICAgIGlmICh1c2VkU2xvdHMgPCBjYWNoZVNpemUpCisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIC8vIENoZWNrIGlmIHdlIGNhbiBleHBhbmQgdGhpcyBj
YWNoZT8KKyAgICBpZiAoY2FjaGVTaXplID09IGtOdW1UcmFuc2ZlckVudHJpZXMpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAvLyBPaywgd2UnbGwgdHJ5IHRvIGdyYWIgYW4gZW50cnkgZnJv
bSBzb21lIG90aGVyIHNpemUgY2xhc3MuCisgICAgaWYgKEV2aWN0UmFuZG9tU2l6ZUNsYXNzKHNp
emVDbGFzcywgZmFsc2UpCisgICAgICAgIHx8IEV2aWN0UmFuZG9tU2l6ZUNsYXNzKHNpemVDbGFz
cywgdHJ1ZSkpIHsKKyAgICAgICAgLy8gU3VjY2VlZGVkIGluIGV2aWN0aW5nLCB3ZSdyZSBnb2lu
ZyB0byBtYWtlIG91ciBjYWNoZSBsYXJnZXIuCisgICAgICAgIGNhY2hlU2l6ZSsrOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgcmFjZV9jb3VudGVyID0gdDsKLSAgfQotICBBU1NF
UlQodCA+PSAwKTsKLSAgQVNTRVJUKHQgPCBzdGF0aWNfY2FzdDxpbnQ+KGtOdW1DbGFzc2VzKSk7
Ci0gIGlmICh0ID09IHN0YXRpY19jYXN0PGludD4obG9ja2VkX3NpemVfY2xhc3MpKSByZXR1cm4g
ZmFsc2U7Ci0gIHJldHVybiBjZW50cmFsX2NhY2hlW3RdLlNocmlua0NhY2hlKHN0YXRpY19jYXN0
PGludD4obG9ja2VkX3NpemVfY2xhc3MpLCBmb3JjZSk7Ci19Ci0KLWJvb2wgVENNYWxsb2NfQ2Vu
dHJhbF9GcmVlTGlzdDo6TWFrZUNhY2hlU3BhY2UoKSB7Ci0gIC8vIElzIHRoZXJlIHJvb20gaW4g
dGhlIGNhY2hlPwotICBpZiAodXNlZF9zbG90c18gPCBjYWNoZV9zaXplXykgcmV0dXJuIHRydWU7
Ci0gIC8vIENoZWNrIGlmIHdlIGNhbiBleHBhbmQgdGhpcyBjYWNoZT8KLSAgaWYgKGNhY2hlX3Np
emVfID09IGtOdW1UcmFuc2ZlckVudHJpZXMpIHJldHVybiBmYWxzZTsKLSAgLy8gT2ssIHdlJ2xs
IHRyeSB0byBncmFiIGFuIGVudHJ5IGZyb20gc29tZSBvdGhlciBzaXplIGNsYXNzLgotICBpZiAo
RXZpY3RSYW5kb21TaXplQ2xhc3Moc2l6ZV9jbGFzc18sIGZhbHNlKSB8fAotICAgICAgRXZpY3RS
YW5kb21TaXplQ2xhc3Moc2l6ZV9jbGFzc18sIHRydWUpKSB7Ci0gICAgLy8gU3VjY2VlZGVkIGlu
IGV2aWN0aW5nLCB3ZSdyZSBnb2luZyB0byBtYWtlIG91ciBjYWNoZSBsYXJnZXIuCi0gICAgY2Fj
aGVfc2l6ZV8rKzsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICByZXR1cm4gZmFsc2U7CisgICAg
cmV0dXJuIGZhbHNlOwogfQogCiAKQEAgLTI3MjYsNjQ5ICsyNzk3LDY4MiBAQCBjbGFzcyBMb2Nr
SW52ZXJ0ZXIgewogfTsKIH0KIAotYm9vbCBUQ01hbGxvY19DZW50cmFsX0ZyZWVMaXN0OjpTaHJp
bmtDYWNoZShpbnQgbG9ja2VkX3NpemVfY2xhc3MsIGJvb2wgZm9yY2UpIHsKLSAgLy8gU3RhcnQg
d2l0aCBhIHF1aWNrIGNoZWNrIHdpdGhvdXQgdGFraW5nIGEgbG9jay4KLSAgaWYgKGNhY2hlX3Np
emVfID09IDApIHJldHVybiBmYWxzZTsKLSAgLy8gV2UgZG9uJ3QgZXZpY3QgZnJvbSBhIGZ1bGwg
Y2FjaGUgdW5sZXNzIHdlIGFyZSAnZm9yY2luZycuCi0gIGlmIChmb3JjZSA9PSBmYWxzZSAmJiB1
c2VkX3Nsb3RzXyA9PSBjYWNoZV9zaXplXykgcmV0dXJuIGZhbHNlOwotCi0gIC8vIEdyYWIgbG9j
aywgYnV0IGZpcnN0IHJlbGVhc2UgdGhlIG90aGVyIGxvY2sgaGVsZCBieSB0aGlzIHRocmVhZC4g
IFdlIHVzZQotICAvLyB0aGUgbG9jayBpbnZlcnRlciB0byBlbnN1cmUgdGhhdCB3ZSBuZXZlciBo
b2xkIHR3byBzaXplIGNsYXNzIGxvY2tzCi0gIC8vIGNvbmN1cnJlbnRseS4gIFRoYXQgY2FuIGNy
ZWF0ZSBhIGRlYWRsb2NrIGJlY2F1c2UgdGhlcmUgaXMgbm8gd2VsbAotICAvLyBkZWZpbmVkIG5l
c3Rpbmcgb3JkZXIuCi0gIExvY2tJbnZlcnRlciBsaSgmY2VudHJhbF9jYWNoZVtsb2NrZWRfc2l6
ZV9jbGFzc10ubG9ja18sICZsb2NrXyk7Ci0gIEFTU0VSVCh1c2VkX3Nsb3RzXyA8PSBjYWNoZV9z
aXplXyk7Ci0gIEFTU0VSVCgwIDw9IGNhY2hlX3NpemVfKTsKLSAgaWYgKGNhY2hlX3NpemVfID09
IDApIHJldHVybiBmYWxzZTsKLSAgaWYgKHVzZWRfc2xvdHNfID09IGNhY2hlX3NpemVfKSB7Ci0g
ICAgaWYgKGZvcmNlID09IGZhbHNlKSByZXR1cm4gZmFsc2U7Ci0gICAgLy8gUmVsZWFzZUxpc3RU
b1NwYW5zIHJlbGVhc2VzIHRoZSBsb2NrLCBzbyB3ZSBoYXZlIHRvIG1ha2UgYWxsIHRoZQotICAg
IC8vIHVwZGF0ZXMgdG8gdGhlIGNlbnRyYWwgbGlzdCBiZWZvcmUgY2FsbGluZyBpdC4KLSAgICBj
YWNoZV9zaXplXy0tOwotICAgIHVzZWRfc2xvdHNfLS07Ci0gICAgUmVsZWFzZUxpc3RUb1NwYW5z
KHRjX3Nsb3RzX1t1c2VkX3Nsb3RzX10uaGVhZCk7Citib29sIFRDTWFsbG9jQ2VudHJhbEZyZWVM
aXN0OjpTaHJpbmtDYWNoZShpbnQgbG9ja2VkU2l6ZUNsYXNzLCBib29sIGZvcmNlKQoreworICAg
IC8vIFN0YXJ0IHdpdGggYSBxdWljayBjaGVjayB3aXRob3V0IHRha2luZyBhIGxvY2suCisgICAg
aWYgKCFjYWNoZVNpemUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAvLyBXZSBkb24ndCBl
dmljdCBmcm9tIGEgZnVsbCBjYWNoZSB1bmxlc3Mgd2UgYXJlICdmb3JjaW5nJy4KKyAgICBpZiAo
IWZvcmNlICYmIHVzZWRTbG90cyA9PSBjYWNoZVNpemUpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIC8vIEdyYWIgbG9jaywgYnV0IGZpcnN0IHJlbGVhc2UgdGhlIG90aGVyIGxvY2sgaGVs
ZCBieSB0aGlzIHRocmVhZC4gV2UgdXNlCisgICAgLy8gdGhlIGxvY2sgaW52ZXJ0ZXIgdG8gZW5z
dXJlIHRoYXQgd2UgbmV2ZXIgaG9sZCB0d28gc2l6ZSBjbGFzcyBsb2NrcworICAgIC8vIGNvbmN1
cnJlbnRseS4gVGhhdCBjYW4gY3JlYXRlIGEgZGVhZGxvY2sgYmVjYXVzZSB0aGVyZSBpcyBubyB3
ZWxsCisgICAgLy8gZGVmaW5lZCBuZXN0aW5nIG9yZGVyLgorICAgIExvY2tJbnZlcnRlciBsaSgm
Y2VudHJhbENhY2hlW2xvY2tlZFNpemVDbGFzc10ubG9jaywgJmxvY2spOworICAgIEFTU0VSVCh1
c2VkU2xvdHMgPD0gY2FjaGVTaXplKTsKKyAgICBBU1NFUlQoMCA8PSBjYWNoZVNpemUpOworICAg
IGlmICghY2FjaGVTaXplKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHVzZWRTbG90
cyA9PSBjYWNoZVNpemUpIHsKKyAgICAgICAgaWYgKCFmb3JjZSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgLy8gUmVsZWFzZUxpc3RUb1NwYW5zIHJlbGVhc2VzIHRoZSBsb2Nr
LCBzbyB3ZSBoYXZlIHRvIG1ha2UgYWxsIHRoZQorICAgICAgICAvLyB1cGRhdGVzIHRvIHRoZSBj
ZW50cmFsIGxpc3QgYmVmb3JlIGNhbGxpbmcgaXQuCisgICAgICAgIGNhY2hlU2l6ZS0tOworICAg
ICAgICB1c2VkU2xvdHMtLTsKKyAgICAgICAgUmVsZWFzZUxpc3RUb1NwYW5zKHRjU2xvdHNbdXNl
ZFNsb3RzXS5oZWFkKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGNhY2hlU2l6
ZS0tOwogICAgIHJldHVybiB0cnVlOwotICB9Ci0gIGNhY2hlX3NpemVfLS07Ci0gIHJldHVybiB0
cnVlOwogfQogCi12b2lkIFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3Q6Okluc2VydFJhbmdlKHZv
aWQgKnN0YXJ0LCB2b2lkICplbmQsIGludCBOKSB7Ci0gIFNwaW5Mb2NrSG9sZGVyIGgoJmxvY2tf
KTsKLSAgaWYgKE4gPT0gbnVtX29iamVjdHNfdG9fbW92ZVtzaXplX2NsYXNzX10gJiYKLSAgICBN
YWtlQ2FjaGVTcGFjZSgpKSB7Ci0gICAgaW50IHNsb3QgPSB1c2VkX3Nsb3RzXysrOwotICAgIEFT
U0VSVChzbG90ID49MCk7Ci0gICAgQVNTRVJUKHNsb3QgPCBrTnVtVHJhbnNmZXJFbnRyaWVzKTsK
LSAgICBUQ0VudHJ5ICplbnRyeSA9ICZ0Y19zbG90c19bc2xvdF07Ci0gICAgZW50cnktPmhlYWQg
PSBzdGFydDsKLSAgICBlbnRyeS0+dGFpbCA9IGVuZDsKLSAgICByZXR1cm47Ci0gIH0KLSAgUmVs
ZWFzZUxpc3RUb1NwYW5zKHN0YXJ0KTsKK3ZvaWQgVENNYWxsb2NDZW50cmFsRnJlZUxpc3Q6Oklu
c2VydFJhbmdlKHZvaWQgKnN0YXJ0LCB2b2lkICplbmQsIGludCBOKQoreworICAgIFNwaW5Mb2Nr
SG9sZGVyIGgoJmxvY2spOworICAgIGlmIChOID09IG51bU9iamVjdHNUb01vdmVbc2l6ZUNsYXNz
XQorICAgICAgICAmJiBNYWtlQ2FjaGVTcGFjZSgpKSB7CisgICAgICAgIGludCBzbG90ID0gdXNl
ZFNsb3RzKys7CisgICAgICAgIEFTU0VSVChzbG90ID49MCk7CisgICAgICAgIEFTU0VSVChzbG90
IDwga051bVRyYW5zZmVyRW50cmllcyk7CisgICAgICAgIFRDRW50cnkqIGVudHJ5ID0gJnRjU2xv
dHNbc2xvdF07CisgICAgICAgIGVudHJ5LT5oZWFkID0gc3RhcnQ7CisgICAgICAgIGVudHJ5LT50
YWlsID0gZW5kOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJlbGVhc2VMaXN0VG9TcGFu
cyhzdGFydCk7CiB9CiAKLXZvaWQgVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdDo6UmVtb3ZlUmFu
Z2Uodm9pZCAqKnN0YXJ0LCB2b2lkICoqZW5kLCBpbnQgKk4pIHsKLSAgaW50IG51bSA9ICpOOwot
ICBBU1NFUlQobnVtID4gMCk7Ci0KLSAgU3BpbkxvY2tIb2xkZXIgaCgmbG9ja18pOwotICBpZiAo
bnVtID09IG51bV9vYmplY3RzX3RvX21vdmVbc2l6ZV9jbGFzc19dICYmIHVzZWRfc2xvdHNfID4g
MCkgewotICAgIGludCBzbG90ID0gLS11c2VkX3Nsb3RzXzsKLSAgICBBU1NFUlQoc2xvdCA+PSAw
KTsKLSAgICBUQ0VudHJ5ICplbnRyeSA9ICZ0Y19zbG90c19bc2xvdF07Ci0gICAgKnN0YXJ0ID0g
ZW50cnktPmhlYWQ7Ci0gICAgKmVuZCA9IGVudHJ5LT50YWlsOwotICAgIHJldHVybjsKLSAgfQor
dm9pZCBUQ01hbGxvY0NlbnRyYWxGcmVlTGlzdDo6UmVtb3ZlUmFuZ2Uodm9pZCAqKnN0YXJ0LCB2
b2lkICoqZW5kLCBpbnQgKk4pCit7CisgICAgaW50IG51bSA9ICpOOworICAgIEFTU0VSVChudW0g
PiAwKTsKIAotICAvLyBUT0RPOiBQcmVmZXRjaCBtdWx0aXBsZSBUQ0VudHJpZXM/Ci0gIHZvaWQg
KnRhaWwgPSBGZXRjaEZyb21TcGFuc1NhZmUoKTsKLSAgaWYgKCF0YWlsKSB7Ci0gICAgLy8gV2Ug
YXJlIGNvbXBsZXRlbHkgb3V0IG9mIG1lbW9yeS4KLSAgICAqc3RhcnQgPSAqZW5kID0gTlVMTDsK
LSAgICAqTiA9IDA7Ci0gICAgcmV0dXJuOwotICB9CisgICAgU3BpbkxvY2tIb2xkZXIgaCgmbG9j
ayk7CisgICAgaWYgKG51bSA9PSBudW1PYmplY3RzVG9Nb3ZlW3NpemVDbGFzc10gJiYgdXNlZFNs
b3RzID4gMCkgeworICAgICAgICBpbnQgc2xvdCA9IC0tdXNlZFNsb3RzOworICAgICAgICBBU1NF
UlQoc2xvdCA+PSAwKTsKKyAgICAgICAgVENFbnRyeSogZW50cnkgPSAmdGNTbG90c1tzbG90XTsK
KyAgICAgICAgKnN0YXJ0ID0gZW50cnktPmhlYWQ7CisgICAgICAgICplbmQgPSBlbnRyeS0+dGFp
bDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICBTTExfU2V0TmV4dCh0YWlsLCBOVUxMKTsK
LSAgdm9pZCAqaGVhZCA9IHRhaWw7Ci0gIGludCBjb3VudCA9IDE7Ci0gIHdoaWxlIChjb3VudCA8
IG51bSkgewotICAgIHZvaWQgKnQgPSBGZXRjaEZyb21TcGFucygpOwotICAgIGlmICghdCkgYnJl
YWs7Ci0gICAgU0xMX1B1c2goJmhlYWQsIHQpOwotICAgIGNvdW50Kys7Ci0gIH0KLSAgKnN0YXJ0
ID0gaGVhZDsKLSAgKmVuZCA9IHRhaWw7Ci0gICpOID0gY291bnQ7Ci19CisgICAgLy8gVE9ETzog
UHJlZmV0Y2ggbXVsdGlwbGUgVENFbnRyaWVzPworICAgIHZvaWQqIHRhaWwgPSBGZXRjaEZyb21T
cGFuc1NhZmUoKTsKKyAgICBpZiAoIXRhaWwpIHsKKyAgICAgICAgLy8gV2UgYXJlIGNvbXBsZXRl
bHkgb3V0IG9mIG1lbW9yeS4KKyAgICAgICAgKnN0YXJ0ID0gKmVuZCA9IDA7CisgICAgICAgICpO
ID0gMDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAorICAgIFNMTFNldE5leHQodGFpbCwgMCk7
CisgICAgdm9pZCogaGVhZCA9IHRhaWw7CisgICAgaW50IGNvdW50ID0gMTsKKyAgICB3aGlsZSAo
Y291bnQgPCBudW0pIHsKKyAgICAgICAgdm9pZCogdCA9IEZldGNoRnJvbVNwYW5zKCk7CisgICAg
ICAgIGlmICghdCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBTTExQdXNoKCZoZWFkLCB0
KTsKKyAgICAgICAgY291bnQrKzsKKyAgICB9CisgICAgKnN0YXJ0ID0gaGVhZDsKKyAgICAqZW5k
ID0gdGFpbDsKKyAgICAqTiA9IGNvdW50OworfQogCi12b2lkKiBUQ01hbGxvY19DZW50cmFsX0Zy
ZWVMaXN0OjpGZXRjaEZyb21TcGFuc1NhZmUoKSB7Ci0gIHZvaWQgKnQgPSBGZXRjaEZyb21TcGFu
cygpOwotICBpZiAoIXQpIHsKLSAgICBQb3B1bGF0ZSgpOwotICAgIHQgPSBGZXRjaEZyb21TcGFu
cygpOwotICB9Ci0gIHJldHVybiB0Owordm9pZCogVENNYWxsb2NDZW50cmFsRnJlZUxpc3Q6OkZl
dGNoRnJvbVNwYW5zU2FmZSgpCit7CisgICAgdm9pZCogdCA9IEZldGNoRnJvbVNwYW5zKCk7Cisg
ICAgaWYgKCF0KSB7CisgICAgICAgIFBvcHVsYXRlKCk7CisgICAgICAgIHQgPSBGZXRjaEZyb21T
cGFucygpOworICAgIH0KKyAgICByZXR1cm4gdDsKIH0KIAotdm9pZCogVENNYWxsb2NfQ2VudHJh
bF9GcmVlTGlzdDo6RmV0Y2hGcm9tU3BhbnMoKSB7Ci0gIGlmIChETExfSXNFbXB0eSgmbm9uZW1w
dHlfKSkgcmV0dXJuIE5VTEw7Ci0gIFNwYW4qIHNwYW4gPSBub25lbXB0eV8ubmV4dDsKK3ZvaWQq
IFRDTWFsbG9jQ2VudHJhbEZyZWVMaXN0OjpGZXRjaEZyb21TcGFucygpCit7CisgICAgaWYgKERM
TF9Jc0VtcHR5KCZub25lbXB0eSkpCisgICAgICAgIHJldHVybiAwOworICAgIFNwYW4qIHNwYW4g
PSBub25lbXB0eS5uZXh0OwogCi0gIEFTU0VSVChzcGFuLT5vYmplY3RzICE9IE5VTEwpOwotICBB
U1NFUlRfU1BBTl9DT01NSVRURUQoc3Bhbik7Ci0gIHNwYW4tPnJlZmNvdW50Kys7Ci0gIHZvaWQq
IHJlc3VsdCA9IHNwYW4tPm9iamVjdHM7Ci0gIHNwYW4tPm9iamVjdHMgPSAqKHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCoqPihyZXN1bHQpKTsKLSAgaWYgKHNwYW4tPm9iamVjdHMgPT0gTlVMTCkgewot
ICAgIC8vIE1vdmUgdG8gZW1wdHkgbGlzdAotICAgIERMTF9SZW1vdmUoc3Bhbik7Ci0gICAgRExM
X1ByZXBlbmQoJmVtcHR5Xywgc3Bhbik7Ci0gICAgRXZlbnQoc3BhbiwgJ0UnLCAwKTsKLSAgfQot
ICBjb3VudGVyXy0tOwotICByZXR1cm4gcmVzdWx0OworICAgIEFTU0VSVChzcGFuLT5vYmplY3Rz
KTsKKyAgICBBU1NFUlRfU1BBTl9DT01NSVRURUQoc3Bhbik7CisgICAgc3Bhbi0+cmVmY291bnQr
KzsKKyAgICB2b2lkKiByZXN1bHQgPSBzcGFuLT5vYmplY3RzOworICAgIHNwYW4tPm9iamVjdHMg
PSAqKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPihyZXN1bHQpKTsKKyAgICBpZiAoIXNwYW4tPm9i
amVjdHMpIHsKKyAgICAgICAgLy8gTW92ZSB0byBlbXB0eSBsaXN0CisgICAgICAgIERMTFJlbW92
ZShzcGFuKTsKKyAgICAgICAgRExMUHJlcGVuZCgmZW1wdHksIHNwYW4pOworICAgICAgICBFdmVu
dChzcGFuLCAnRScsIDApOworICAgIH0KKyAgICBjb3VudGVyLS07CisgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAogLy8gRmV0Y2ggbWVtb3J5IGZyb20gdGhlIHN5c3RlbSBhbmQgYWRkIHRvIHRoZSBj
ZW50cmFsIGNhY2hlIGZyZWVsaXN0LgotQUxXQVlTX0lOTElORSB2b2lkIFRDTWFsbG9jX0NlbnRy
YWxfRnJlZUxpc3Q6OlBvcHVsYXRlKCkgewotICAvLyBSZWxlYXNlIGNlbnRyYWwgbGlzdCBsb2Nr
IHdoaWxlIG9wZXJhdGluZyBvbiBwYWdlaGVhcAotICBsb2NrXy5VbmxvY2soKTsKLSAgY29uc3Qg
c2l6ZV90IG5wYWdlcyA9IGNsYXNzX3RvX3BhZ2VzW3NpemVfY2xhc3NfXTsKLQotICBTcGFuKiBz
cGFuOwotICB7Ci0gICAgU3BpbkxvY2tIb2xkZXIgaCgmcGFnZWhlYXBfbG9jayk7Ci0gICAgc3Bh
biA9IHBhZ2VoZWFwLT5OZXcobnBhZ2VzKTsKLSAgICBpZiAoc3BhbikgcGFnZWhlYXAtPlJlZ2lz
dGVyU2l6ZUNsYXNzKHNwYW4sIHNpemVfY2xhc3NfKTsKLSAgfQotICBpZiAoc3BhbiA9PSBOVUxM
KSB7CitBTFdBWVNfSU5MSU5FIHZvaWQgVENNYWxsb2NDZW50cmFsRnJlZUxpc3Q6OlBvcHVsYXRl
KCkKK3sKKyAgICAvLyBSZWxlYXNlIGNlbnRyYWwgbGlzdCBsb2NrIHdoaWxlIG9wZXJhdGluZyBv
biBwYWdlaGVhcAorICAgIGxvY2suVW5sb2NrKCk7CisgICAgY29uc3Qgc2l6ZV90IG5wYWdlcyA9
IGNsYXNzX3RvX3BhZ2VzW3NpemVDbGFzc107CisKKyAgICBTcGFuKiBzcGFuOworICAgIHsKKyAg
ICAgICAgU3BpbkxvY2tIb2xkZXIgaCgmcGFnZWhlYXBMb2NrKTsKKyAgICAgICAgc3BhbiA9IHBh
Z2VoZWFwLT5OZXcobnBhZ2VzKTsKKyAgICAgICAgaWYgKHNwYW4pCisgICAgICAgICAgICBwYWdl
aGVhcC0+UmVnaXN0ZXJTaXplQ2xhc3Moc3Bhbiwgc2l6ZUNsYXNzKTsKKyAgICB9CisgICAgaWYg
KCFzcGFuKSB7CiAjaWYgSEFWRShFUlJOT19IKQotICAgIE1FU1NBR0UoImFsbG9jYXRpb24gZmFp
bGVkOiAlZFxuIiwgZXJybm8pOworICAgICAgICBNRVNTQUdFKCJhbGxvY2F0aW9uIGZhaWxlZDog
JWRcbiIsIGVycm5vKTsKICNlbGlmIE9TKFdJTkRPV1MpCi0gICAgTUVTU0FHRSgiYWxsb2NhdGlv
biBmYWlsZWQ6ICVkXG4iLCA6OkdldExhc3RFcnJvcigpKTsKKyAgICAgICAgTUVTU0FHRSgiYWxs
b2NhdGlvbiBmYWlsZWQ6ICVkXG4iLCA6OkdldExhc3RFcnJvcigpKTsKICNlbHNlCi0gICAgTUVT
U0FHRSgiYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworICAgICAgICBNRVNTQUdFKCJhbGxvY2F0aW9u
IGZhaWxlZFxuIik7CiAjZW5kaWYKLSAgICBsb2NrXy5Mb2NrKCk7Ci0gICAgcmV0dXJuOwotICB9
Ci0gIEFTU0VSVF9TUEFOX0NPTU1JVFRFRChzcGFuKTsKLSAgQVNTRVJUKHNwYW4tPmxlbmd0aCA9
PSBucGFnZXMpOwotICAvLyBDYWNoZSBzaXplY2xhc3MgaW5mbyBlYWdlcmx5LiAgTG9ja2luZyBp
cyBub3QgbmVjZXNzYXJ5LgotICAvLyAoSW5zdGVhZCBvZiBiZWluZyBlYWdlciwgd2UgY291bGQg
anVzdCByZXBsYWNlIGFueSBzdGFsZSBpbmZvCi0gIC8vIGFib3V0IHRoaXMgc3BhbiwgYnV0IHRo
YXQgc2VlbXMgdG8gYmUgbm8gYmV0dGVyIGluIHByYWN0aWNlLikKLSAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBucGFnZXM7IGkrKykgewotICAgIHBhZ2VoZWFwLT5DYWNoZVNpemVDbGFzcyhzcGFu
LT5zdGFydCArIGksIHNpemVfY2xhc3NfKTsKLSAgfQotCi0gIC8vIFNwbGl0IHRoZSBibG9jayBp
bnRvIHBpZWNlcyBhbmQgYWRkIHRvIHRoZSBmcmVlLWxpc3QKLSAgLy8gVE9ETzogY29sb3Jpbmcg
b2Ygb2JqZWN0cyB0byBhdm9pZCBjYWNoZSBjb25mbGljdHM/Ci0gIHZvaWQqKiB0YWlsID0gJnNw
YW4tPm9iamVjdHM7Ci0gIGNoYXIqIHB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNwYW4t
PnN0YXJ0IDw8IGtQYWdlU2hpZnQpOwotICBjaGFyKiBsaW1pdCA9IHB0ciArIChucGFnZXMgPDwg
a1BhZ2VTaGlmdCk7Ci0gIGNvbnN0IHNpemVfdCBzaXplID0gQnl0ZVNpemVGb3JDbGFzcyhzaXpl
X2NsYXNzXyk7Ci0gIGludCBudW0gPSAwOwotICBjaGFyKiBucHRyOwotICB3aGlsZSAoKG5wdHIg
PSBwdHIgKyBzaXplKSA8PSBsaW1pdCkgewotICAgICp0YWlsID0gcHRyOwotICAgIHRhaWwgPSBy
ZWludGVycHJldF9jYXN0X3B0cjx2b2lkKio+KHB0cik7Ci0gICAgcHRyID0gbnB0cjsKLSAgICBu
dW0rKzsKLSAgfQotICBBU1NFUlQocHRyIDw9IGxpbWl0KTsKLSAgKnRhaWwgPSBOVUxMOwotICBz
cGFuLT5yZWZjb3VudCA9IDA7IC8vIE5vIHN1Yi1vYmplY3QgaW4gdXNlIHlldAotCi0gIC8vIEFk
ZCBzcGFuIHRvIGxpc3Qgb2Ygbm9uLWVtcHR5IHNwYW5zCi0gIGxvY2tfLkxvY2soKTsKLSAgRExM
X1ByZXBlbmQoJm5vbmVtcHR5Xywgc3Bhbik7Ci0gIGNvdW50ZXJfICs9IG51bTsKKyAgICAgICAg
bG9jay5Mb2NrKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQVNTRVJUX1NQQU5fQ09N
TUlUVEVEKHNwYW4pOworICAgIEFTU0VSVChzcGFuLT5sZW5ndGggPT0gbnBhZ2VzKTsKKyAgICAv
LyBDYWNoZSBzaXplY2xhc3MgaW5mbyBlYWdlcmx5LiBMb2NraW5nIGlzIG5vdCBuZWNlc3Nhcnku
CisgICAgLy8gKEluc3RlYWQgb2YgYmVpbmcgZWFnZXIsIHdlIGNvdWxkIGp1c3QgcmVwbGFjZSBh
bnkgc3RhbGUgaW5mbworICAgIC8vIGFib3V0IHRoaXMgc3BhbiwgYnV0IHRoYXQgc2VlbXMgdG8g
YmUgbm8gYmV0dGVyIGluIHByYWN0aWNlLikKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5w
YWdlczsgaSsrKQorICAgICAgICBwYWdlaGVhcC0+Q2FjaGVTaXplQ2xhc3Moc3Bhbi0+c3RhcnQg
KyBpLCBzaXplQ2xhc3MpOworCisgICAgLy8gU3BsaXQgdGhlIGJsb2NrIGludG8gcGllY2VzIGFu
ZCBhZGQgdG8gdGhlIGZyZWUtbGlzdAorICAgIC8vIFRPRE86IGNvbG9yaW5nIG9mIG9iamVjdHMg
dG8gYXZvaWQgY2FjaGUgY29uZmxpY3RzPworICAgIHZvaWQqKiB0YWlsID0gJnNwYW4tPm9iamVj
dHM7CisgICAgY2hhciogcHRyID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc3Bhbi0+c3RhcnQg
PDwga1BhZ2VTaGlmdCk7CisgICAgY2hhciogbGltaXQgPSBwdHIgKyAobnBhZ2VzIDw8IGtQYWdl
U2hpZnQpOworICAgIGNvbnN0IHNpemVfdCBzaXplID0gQnl0ZVNpemVGb3JDbGFzcyhzaXplQ2xh
c3MpOworICAgIGludCBudW0gPSAwOworICAgIGNoYXIqIG5wdHI7CisgICAgd2hpbGUgKChucHRy
ID0gcHRyICsgc2l6ZSkgPD0gbGltaXQpIHsKKyAgICAgICAgKnRhaWwgPSBwdHI7CisgICAgICAg
IHRhaWwgPSByZWludGVycHJldF9jYXN0X3B0cjx2b2lkKio+KHB0cik7CisgICAgICAgICBwdHIg
PSBucHRyOworICAgICAgICBudW0rKzsKKyAgICB9CisgICAgQVNTRVJUKHB0ciA8PSBsaW1pdCk7
CisgICAgKnRhaWwgPSAwOworICAgIHNwYW4tPnJlZmNvdW50ID0gMDsgLy8gTm8gc3ViLW9iamVj
dCBpbiB1c2UgeWV0CisKKyAgICAvLyBBZGQgc3BhbiB0byBsaXN0IG9mIG5vbi1lbXB0eSBzcGFu
cworICAgIGxvY2suTG9jaygpOworICAgIERMTFByZXBlbmQoJm5vbmVtcHR5LCBzcGFuKTsKKyAg
ICBjb3VudGVyICs9IG51bTsKIH0KIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBUQ01hbGxvY19UaHJlYWRD
YWNoZSBpbXBsZW1lbnRhdGlvbgorLy8gVENNYWxsb2NUaHJlYWRDYWNoZSBpbXBsZW1lbnRhdGlv
bgogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCiAKLWlubGluZSBib29sIFRDTWFsbG9jX1RocmVhZENhY2hlOjpTYW1w
bGVBbGxvY2F0aW9uKHNpemVfdCBrKSB7Ci0gIGlmIChieXRlc191bnRpbF9zYW1wbGVfIDwgaykg
ewotICAgIFBpY2tOZXh0U2FtcGxlKGspOwotICAgIHJldHVybiB0cnVlOwotICB9IGVsc2Ugewot
ICAgIGJ5dGVzX3VudGlsX3NhbXBsZV8gLT0gazsKK2lubGluZSBib29sIFRDTWFsbG9jVGhyZWFk
Q2FjaGU6OlNhbXBsZUFsbG9jYXRpb24oc2l6ZV90IGspCit7CisgICAgaWYgKGJ5dGVzVW50aWxT
YW1wbGUgPCBrKSB7CisgICAgICAgIFBpY2tOZXh0U2FtcGxlKGspOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisgICAgYnl0ZXNVbnRpbFNhbXBsZSAtPSBrOwogICAgIHJldHVybiBmYWxz
ZTsKLSAgfQotfQotCi12b2lkIFRDTWFsbG9jX1RocmVhZENhY2hlOjpJbml0KFRocmVhZElkZW50
aWZpZXIgdGlkKSB7Ci0gIHNpemVfID0gMDsKLSAgbmV4dF8gPSBOVUxMOwotICBwcmV2XyA9IE5V
TEw7Ci0gIHRpZF8gID0gdGlkOwotICBpbl9zZXRzcGVjaWZpY18gPSBmYWxzZTsKLSAgZm9yIChz
aXplX3QgY2wgPSAwOyBjbCA8IGtOdW1DbGFzc2VzOyArK2NsKSB7Ci0gICAgbGlzdF9bY2xdLklu
aXQoKTsKLSAgfQotCi0gIC8vIEluaXRpYWxpemUgUk5HIC0tIHJ1biBpdCBmb3IgYSBiaXQgdG8g
Z2V0IHRvIGdvb2QgdmFsdWVzCi0gIGJ5dGVzX3VudGlsX3NhbXBsZV8gPSAwOwotICBybmRfID0g
c3RhdGljX2Nhc3Q8dWludDMyX3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pih0aGlzKSk7
Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKLSAgICBQaWNrTmV4dFNhbXBsZShz
dGF0aWNfY2FzdDxzaXplX3Q+KEZMQUdTX3RjbWFsbG9jX3NhbXBsZV9wYXJhbWV0ZXIgKiAyKSk7
Ci0gIH0KIH0KIAotdm9pZCBUQ01hbGxvY19UaHJlYWRDYWNoZTo6Q2xlYW51cCgpIHsKLSAgLy8g
UHV0IHVudXNlZCBtZW1vcnkgYmFjayBpbnRvIGNlbnRyYWwgY2FjaGUKLSAgZm9yIChzaXplX3Qg
Y2wgPSAwOyBjbCA8IGtOdW1DbGFzc2VzOyArK2NsKSB7Ci0gICAgaWYgKGxpc3RfW2NsXS5sZW5n
dGgoKSA+IDApIHsKLSAgICAgIFJlbGVhc2VUb0NlbnRyYWxDYWNoZShjbCwgbGlzdF9bY2xdLmxl
bmd0aCgpKTsKK3ZvaWQgVENNYWxsb2NUaHJlYWRDYWNoZTo6SW5pdChUaHJlYWRJZGVudGlmaWVy
IHRpZCkKK3sKKyAgICBzaXplID0gMDsKKyAgICBuZXh0ID0gMDsKKyAgICBwcmV2ID0gMDsKKyAg
ICB0aWQgID0gdGlkOworICAgIGluU2V0c3BlY2lmaWMgPSBmYWxzZTsKKyAgICBmb3IgKHNpemVf
dCBjbCA9IDA7IGNsIDwga051bUNsYXNzZXM7ICsrY2wpCisgICAgICAgIGxpc3RbY2xdLkluaXQo
KTsKKworICAgIC8vIEluaXRpYWxpemUgUk5HIC0tIHJ1biBpdCBmb3IgYSBiaXQgdG8gZ2V0IHRv
IGdvb2QgdmFsdWVzCisgICAgYnl0ZXNVbnRpbFNhbXBsZSA9IDA7CisgICAgcm5kID0gc3RhdGlj
X2Nhc3Q8dWludDMyX3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pih0aGlzKSk7CisgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCAxMDA7IGkrKykKKyAgICAgICAgUGlja05leHRTYW1wbGUoc3Rh
dGljX2Nhc3Q8c2l6ZV90PihGTEFHU190Y21hbGxvY19zYW1wbGVfcGFyYW1ldGVyICogMikpOwor
fQorCit2b2lkIFRDTWFsbG9jVGhyZWFkQ2FjaGU6OkNsZWFudXAoKQoreworICAgIC8vIFB1dCB1
bnVzZWQgbWVtb3J5IGJhY2sgaW50byBjZW50cmFsIGNhY2hlCisgICAgZm9yIChzaXplX3QgY2wg
PSAwOyBjbCA8IGtOdW1DbGFzc2VzOyArK2NsKQorICAgICAgICBpZiAobGlzdFtjbF0ubGVuZ3Ro
KCkgPiAwKQorICAgICAgICAgICAgUmVsZWFzZVRvQ2VudHJhbENhY2hlKGNsLCBsaXN0W2NsXS5s
ZW5ndGgoKSk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCogVENNYWxsb2NUaHJlYWRDYWNoZTo6
QWxsb2NhdGUoc2l6ZV90IHNpemUpCit7CisgICAgQVNTRVJUKHNpemUgPD0ga01heFNpemUpOwor
ICAgIGNvbnN0IHNpemVfdCBjbCA9IFNpemVDbGFzcyhzaXplKTsKKyAgICBGcmVlTGlzdCogcExp
c3QgPSAmbGlzdFtjbF07CisgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gQnl0ZVNpemVGb3JD
bGFzcyhjbCk7CisgICAgaWYgKHBMaXN0LT5lbXB0eSgpKSB7CisgICAgICAgIEZldGNoRnJvbUNl
bnRyYWxDYWNoZShjbCwgYWxsb2NhdGlvblNpemUpOworICAgICAgICBpZiAocExpc3QtPmVtcHR5
KCkpCisgICAgICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gIH0KLX0KLQotQUxXQVlTX0lOTElO
RSB2b2lkKiBUQ01hbGxvY19UaHJlYWRDYWNoZTo6QWxsb2NhdGUoc2l6ZV90IHNpemUpIHsKLSAg
QVNTRVJUKHNpemUgPD0ga01heFNpemUpOwotICBjb25zdCBzaXplX3QgY2wgPSBTaXplQ2xhc3Mo
c2l6ZSk7Ci0gIEZyZWVMaXN0KiBsaXN0ID0gJmxpc3RfW2NsXTsKLSAgc2l6ZV90IGFsbG9jYXRp
b25TaXplID0gQnl0ZVNpemVGb3JDbGFzcyhjbCk7Ci0gIGlmIChsaXN0LT5lbXB0eSgpKSB7Ci0g
ICAgRmV0Y2hGcm9tQ2VudHJhbENhY2hlKGNsLCBhbGxvY2F0aW9uU2l6ZSk7Ci0gICAgaWYgKGxp
c3QtPmVtcHR5KCkpIHJldHVybiBOVUxMOwotICB9Ci0gIHNpemVfIC09IGFsbG9jYXRpb25TaXpl
OwotICByZXR1cm4gbGlzdC0+UG9wKCk7CisgICAgc2l6ZSAtPSBhbGxvY2F0aW9uU2l6ZTsKKyAg
ICByZXR1cm4gcExpc3QtPlBvcCgpOwogfQogCi1pbmxpbmUgdm9pZCBUQ01hbGxvY19UaHJlYWRD
YWNoZTo6RGVhbGxvY2F0ZSh2b2lkKiBwdHIsIHNpemVfdCBjbCkgewotICBzaXplXyArPSBCeXRl
U2l6ZUZvckNsYXNzKGNsKTsKLSAgRnJlZUxpc3QqIGxpc3QgPSAmbGlzdF9bY2xdOwotICBsaXN0
LT5QdXNoKHB0cik7Ci0gIC8vIElmIGVub3VnaCBkYXRhIGlzIGZyZWUsIHB1dCBiYWNrIGludG8g
Y2VudHJhbCBjYWNoZQotICBpZiAobGlzdC0+bGVuZ3RoKCkgPiBrTWF4RnJlZUxpc3RMZW5ndGgp
IHsKLSAgICBSZWxlYXNlVG9DZW50cmFsQ2FjaGUoY2wsIG51bV9vYmplY3RzX3RvX21vdmVbY2xd
KTsKLSAgfQotICBpZiAoc2l6ZV8gPj0gcGVyX3RocmVhZF9jYWNoZV9zaXplKSBTY2F2ZW5nZSgp
OworaW5saW5lIHZvaWQgVENNYWxsb2NUaHJlYWRDYWNoZTo6RGVhbGxvY2F0ZSh2b2lkKiBwdHIs
IHNpemVfdCBjbCkKK3sKKyAgICBzaXplICs9IEJ5dGVTaXplRm9yQ2xhc3MoY2wpOworICAgIEZy
ZWVMaXN0KiBwTGlzdCA9ICZsaXN0W2NsXTsKKyAgICBwTGlzdC0+UHVzaChwdHIpOworICAgIC8v
IElmIGVub3VnaCBkYXRhIGlzIGZyZWUsIHB1dCBiYWNrIGludG8gY2VudHJhbCBjYWNoZQorICAg
IGlmIChwTGlzdC0+bGVuZ3RoKCkgPiBrTWF4RnJlZUxpc3RMZW5ndGgpCisgICAgICAgIFJlbGVh
c2VUb0NlbnRyYWxDYWNoZShjbCwgbnVtT2JqZWN0c1RvTW92ZVtjbF0pOworICAgIGlmIChzaXpl
ID49IHBlclRocmVhZENhY2hlU2l6ZSkKKyAgICAgICAgU2NhdmVuZ2UoKTsKIH0KIAogLy8gUmVt
b3ZlIHNvbWUgb2JqZWN0cyBvZiBjbGFzcyAiY2wiIGZyb20gY2VudHJhbCBjYWNoZSBhbmQgYWRk
IHRvIHRocmVhZCBoZWFwCi1BTFdBWVNfSU5MSU5FIHZvaWQgVENNYWxsb2NfVGhyZWFkQ2FjaGU6
OkZldGNoRnJvbUNlbnRyYWxDYWNoZShzaXplX3QgY2wsIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSkg
ewotICBpbnQgZmV0Y2hfY291bnQgPSBudW1fb2JqZWN0c190b19tb3ZlW2NsXTsKLSAgdm9pZCAq
c3RhcnQsICplbmQ7Ci0gIGNlbnRyYWxfY2FjaGVbY2xdLlJlbW92ZVJhbmdlKCZzdGFydCwgJmVu
ZCwgJmZldGNoX2NvdW50KTsKLSAgbGlzdF9bY2xdLlB1c2hSYW5nZShmZXRjaF9jb3VudCwgc3Rh
cnQsIGVuZCk7Ci0gIHNpemVfICs9IGFsbG9jYXRpb25TaXplICogZmV0Y2hfY291bnQ7CitBTFdB
WVNfSU5MSU5FIHZvaWQgVENNYWxsb2NUaHJlYWRDYWNoZTo6RmV0Y2hGcm9tQ2VudHJhbENhY2hl
KHNpemVfdCBjbCwgc2l6ZV90IGFsbG9jYXRpb25TaXplKQoreworICAgIGludCBmZXRjaENvdW50
ID0gbnVtT2JqZWN0c1RvTW92ZVtjbF07CisgICAgdm9pZCogc3RhcnQ7CisgICAgdm9pZCogZW5k
OworICAgIGNlbnRyYWxDYWNoZVtjbF0uUmVtb3ZlUmFuZ2UoJnN0YXJ0LCAmZW5kLCAmZmV0Y2hD
b3VudCk7CisgICAgbGlzdFtjbF0uUHVzaFJhbmdlKGZldGNoQ291bnQsIHN0YXJ0LCBlbmQpOwor
ICAgIHNpemUgKz0gYWxsb2NhdGlvblNpemUgKiBmZXRjaENvdW50OwogfQogCiAvLyBSZW1vdmUg
c29tZSBvYmplY3RzIG9mIGNsYXNzICJjbCIgZnJvbSB0aHJlYWQgaGVhcCBhbmQgYWRkIHRvIGNl
bnRyYWwgY2FjaGUKLWlubGluZSB2b2lkIFRDTWFsbG9jX1RocmVhZENhY2hlOjpSZWxlYXNlVG9D
ZW50cmFsQ2FjaGUoc2l6ZV90IGNsLCBpbnQgTikgewotICBBU1NFUlQoTiA+IDApOwotICBGcmVl
TGlzdCogc3JjID0gJmxpc3RfW2NsXTsKLSAgaWYgKE4gPiBzcmMtPmxlbmd0aCgpKSBOID0gc3Jj
LT5sZW5ndGgoKTsKLSAgc2l6ZV8gLT0gTipCeXRlU2l6ZUZvckNsYXNzKGNsKTsKLQotICAvLyBX
ZSByZXR1cm4gcHJlcGFja2FnZWQgY2hhaW5zIG9mIHRoZSBjb3JyZWN0IHNpemUgdG8gdGhlIGNl
bnRyYWwgY2FjaGUuCi0gIC8vIFRPRE86IFVzZSB0aGUgc2FtZSBmb3JtYXQgaW50ZXJuYWxseSBp
biB0aGUgdGhyZWFkIGNhY2hlcz8KLSAgaW50IGJhdGNoX3NpemUgPSBudW1fb2JqZWN0c190b19t
b3ZlW2NsXTsKLSAgd2hpbGUgKE4gPiBiYXRjaF9zaXplKSB7Ci0gICAgdm9pZCAqdGFpbCwgKmhl
YWQ7Ci0gICAgc3JjLT5Qb3BSYW5nZShiYXRjaF9zaXplLCAmaGVhZCwgJnRhaWwpOwotICAgIGNl
bnRyYWxfY2FjaGVbY2xdLkluc2VydFJhbmdlKGhlYWQsIHRhaWwsIGJhdGNoX3NpemUpOwotICAg
IE4gLT0gYmF0Y2hfc2l6ZTsKLSAgfQotICB2b2lkICp0YWlsLCAqaGVhZDsKLSAgc3JjLT5Qb3BS
YW5nZShOLCAmaGVhZCwgJnRhaWwpOwotICBjZW50cmFsX2NhY2hlW2NsXS5JbnNlcnRSYW5nZSho
ZWFkLCB0YWlsLCBOKTsKK2lubGluZSB2b2lkIFRDTWFsbG9jVGhyZWFkQ2FjaGU6OlJlbGVhc2VU
b0NlbnRyYWxDYWNoZShzaXplX3QgY2wsIGludCBOKQoreworICAgIEFTU0VSVChOID4gMCk7Cisg
ICAgRnJlZUxpc3QqIHNyYyA9ICZsaXN0W2NsXTsKKyAgICBpZiAoTiA+IHNyYy0+bGVuZ3RoKCkp
CisgICAgICAgIE4gPSBzcmMtPmxlbmd0aCgpOworICAgIHNpemUgLT0gTipCeXRlU2l6ZUZvckNs
YXNzKGNsKTsKKworICAgIC8vIFdlIHJldHVybiBwcmVwYWNrYWdlZCBjaGFpbnMgb2YgdGhlIGNv
cnJlY3Qgc2l6ZSB0byB0aGUgY2VudHJhbCBjYWNoZS4KKyAgICAvLyBUT0RPOiBVc2UgdGhlIHNh
bWUgZm9ybWF0IGludGVybmFsbHkgaW4gdGhlIHRocmVhZCBjYWNoZXM/CisgICAgaW50IGJhdGNo
U2l6ZSA9IG51bU9iamVjdHNUb01vdmVbY2xdOworICAgIHdoaWxlIChOID4gYmF0Y2hTaXplKSB7
CisgICAgICAgIHZvaWQqIHRhaWw7CisgICAgICAgIHZvaWQqIGhlYWQ7CisgICAgICAgIHNyYy0+
UG9wUmFuZ2UoYmF0Y2hTaXplLCAmaGVhZCwgJnRhaWwpOworICAgICAgICBjZW50cmFsQ2FjaGVb
Y2xdLkluc2VydFJhbmdlKGhlYWQsIHRhaWwsIGJhdGNoU2l6ZSk7CisgICAgICAgIE4gLT0gYmF0
Y2hTaXplOworICAgIH0KKyAgICB2b2lkKiB0YWlsOworICAgIHZvaWQqIGhlYWQ7CisgICAgc3Jj
LT5Qb3BSYW5nZShOLCAmaGVhZCwgJnRhaWwpOworICAgIGNlbnRyYWxDYWNoZVtjbF0uSW5zZXJ0
UmFuZ2UoaGVhZCwgdGFpbCwgTik7CiB9CiAKIC8vIFJlbGVhc2UgaWRsZSBtZW1vcnkgdG8gdGhl
IGNlbnRyYWwgY2FjaGUKLWlubGluZSB2b2lkIFRDTWFsbG9jX1RocmVhZENhY2hlOjpTY2F2ZW5n
ZSgpIHsKLSAgLy8gSWYgdGhlIGxvdy13YXRlciBtYXJrIGZvciB0aGUgZnJlZSBsaXN0IGlzIEws
IGl0IG1lYW5zIHdlIHdvdWxkCi0gIC8vIG5vdCBoYXZlIGhhZCB0byBhbGxvY2F0ZSBhbnl0aGlu
ZyBmcm9tIHRoZSBjZW50cmFsIGNhY2hlIGV2ZW4gaWYKLSAgLy8gd2UgaGFkIHJlZHVjZWQgdGhl
IGZyZWUgbGlzdCBzaXplIGJ5IEwuICBXZSBhaW0gdG8gZ2V0IGNsb3NlciB0bwotICAvLyB0aGF0
IHNpdHVhdGlvbiBieSBkcm9wcGluZyBMLzIgbm9kZXMgZnJvbSB0aGUgZnJlZSBsaXN0LiAgVGhp
cwotICAvLyBtYXkgbm90IHJlbGVhc2UgbXVjaCBtZW1vcnksIGJ1dCBpZiBzbyB3ZSB3aWxsIGNh
bGwgc2NhdmVuZ2UgYWdhaW4KLSAgLy8gcHJldHR5IHNvb24gYW5kIHRoZSBsb3ctd2F0ZXIgbWFy
a3Mgd2lsbCBiZSBoaWdoIG9uIHRoYXQgY2FsbC4KLSAgLy9pbnQ2NCBzdGFydCA9IEN5Y2xlQ2xv
Y2s6Ok5vdygpOwotCi0gIGZvciAoc2l6ZV90IGNsID0gMDsgY2wgPCBrTnVtQ2xhc3NlczsgY2wr
KykgewotICAgIEZyZWVMaXN0KiBsaXN0ID0gJmxpc3RfW2NsXTsKLSAgICBjb25zdCBpbnQgbG93
bWFyayA9IGxpc3QtPmxvd3dhdGVybWFyaygpOwotICAgIGlmIChsb3dtYXJrID4gMCkgewotICAg
ICAgY29uc3QgaW50IGRyb3AgPSAobG93bWFyayA+IDEpID8gbG93bWFyay8yIDogMTsKLSAgICAg
IFJlbGVhc2VUb0NlbnRyYWxDYWNoZShjbCwgZHJvcCk7Ci0gICAgfQotICAgIGxpc3QtPmNsZWFy
X2xvd3dhdGVybWFyaygpOwotICB9Ci0KLSAgLy9pbnQ2NCBmaW5pc2ggPSBDeWNsZUNsb2NrOjpO
b3coKTsKLSAgLy9DeWNsZVRpbWVyIGN0OwotICAvL01FU1NBR0UoIkdDOiAlLjBmIG5zXG4iLCBj
dC5DeWNsZXNUb1VzZWMoZmluaXNoLXN0YXJ0KSoxMDAwLjApOwotfQotCi12b2lkIFRDTWFsbG9j
X1RocmVhZENhY2hlOjpQaWNrTmV4dFNhbXBsZShzaXplX3QgaykgewotICAvLyBNYWtlIG5leHQg
InJhbmRvbSIgbnVtYmVyCi0gIC8vIHheMzIreF4yMit4XjIreF4xKzEgaXMgYSBwcmltaXRpdmUg
cG9seW5vbWlhbCBmb3IgcmFuZG9tIG51bWJlcnMKLSAgc3RhdGljIGNvbnN0IHVpbnQzMl90IGtQ
b2x5ID0gKDEgPDwgMjIpIHwgKDEgPDwgMikgfCAoMSA8PCAxKSB8ICgxIDw8IDApOwotICB1aW50
MzJfdCByID0gcm5kXzsKLSAgcm5kXyA9IChyIDw8IDEpIF4gKChzdGF0aWNfY2FzdDxpbnQzMl90
PihyKSA+PiAzMSkgJiBrUG9seSk7Ci0KLSAgLy8gTmV4dCBwb2ludCBpcyAicm5kXyAlIChzYW1w
bGVfcGVyaW9kKSIuICBJLmUuLCBhdmVyYWdlCi0gIC8vIGluY3JlbWVudCBpcyAic2FtcGxlX3Bl
cmlvZC8yIi4KLSAgY29uc3QgaW50IGZsYWdfdmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ+KEZMQUdT
X3RjbWFsbG9jX3NhbXBsZV9wYXJhbWV0ZXIpOwotICBzdGF0aWMgaW50IGxhc3RfZmxhZ192YWx1
ZSA9IC0xOwotCi0gIGlmIChmbGFnX3ZhbHVlICE9IGxhc3RfZmxhZ192YWx1ZSkgewotICAgIFNw
aW5Mb2NrSG9sZGVyIGgoJnNhbXBsZV9wZXJpb2RfbG9jayk7Ci0gICAgaW50IGk7Ci0gICAgZm9y
IChpID0gMDsgaSA8IChzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihwcmltZXNfbGlzdCkvc2l6ZW9m
KHByaW1lc19saXN0WzBdKSkgLSAxKTsgaSsrKSB7Ci0gICAgICBpZiAocHJpbWVzX2xpc3RbaV0g
Pj0gZmxhZ192YWx1ZSkgewotICAgICAgICBicmVhazsKLSAgICAgIH0KK2lubGluZSB2b2lkIFRD
TWFsbG9jVGhyZWFkQ2FjaGU6OlNjYXZlbmdlKCkKK3sKKyAgICAvLyBJZiB0aGUgbG93LXdhdGVy
IG1hcmsgZm9yIHRoZSBmcmVlIGxpc3QgaXMgTCwgaXQgbWVhbnMgd2Ugd291bGQKKyAgICAvLyBu
b3QgaGF2ZSBoYWQgdG8gYWxsb2NhdGUgYW55dGhpbmcgZnJvbSB0aGUgY2VudHJhbCBjYWNoZSBl
dmVuIGlmCisgICAgLy8gd2UgaGFkIHJlZHVjZWQgdGhlIGZyZWUgbGlzdCBzaXplIGJ5IEwuIFdl
IGFpbSB0byBnZXQgY2xvc2VyIHRvCisgICAgLy8gdGhhdCBzaXR1YXRpb24gYnkgZHJvcHBpbmcg
TC8yIG5vZGVzIGZyb20gdGhlIGZyZWUgbGlzdC4gVGhpcworICAgIC8vIG1heSBub3QgcmVsZWFz
ZSBtdWNoIG1lbW9yeSwgYnV0IGlmIHNvIHdlIHdpbGwgY2FsbCBzY2F2ZW5nZSBhZ2FpbgorICAg
IC8vIHByZXR0eSBzb29uIGFuZCB0aGUgbG93LXdhdGVyIG1hcmtzIHdpbGwgYmUgaGlnaCBvbiB0
aGF0IGNhbGwuCisKKyAgICAvLyBpbnQ2NCBzdGFydCA9IEN5Y2xlQ2xvY2s6Ok5vdygpOworCisg
ICAgZm9yIChzaXplX3QgY2wgPSAwOyBjbCA8IGtOdW1DbGFzc2VzOyBjbCsrKSB7CisgICAgICAg
IEZyZWVMaXN0KiBwTGlzdCA9ICZsaXN0W2NsXTsKKyAgICAgICAgY29uc3QgaW50IGxvd21hcmsg
PSBwTGlzdC0+bG93d2F0ZXJtYXJrKCk7CisgICAgICAgIGlmIChsb3dtYXJrID4gMCkgeworICAg
ICAgICAgICAgY29uc3QgaW50IGRyb3AgPSAobG93bWFyayA+IDEpID8gbG93bWFyayAvIDIgOiAx
OworICAgICAgICAgICAgUmVsZWFzZVRvQ2VudHJhbENhY2hlKGNsLCBkcm9wKTsKKyAgICAgICAg
fQorICAgICAgICBwTGlzdC0+Y2xlYXJMb3d3YXRlcm1hcmsoKTsKICAgICB9Ci0gICAgc2FtcGxl
X3BlcmlvZCA9IHByaW1lc19saXN0W2ldOwotICAgIGxhc3RfZmxhZ192YWx1ZSA9IGZsYWdfdmFs
dWU7Ci0gIH0KLQotICBieXRlc191bnRpbF9zYW1wbGVfICs9IHJuZF8gJSBzYW1wbGVfcGVyaW9k
OwotCi0gIGlmIChrID4gKHN0YXRpY19jYXN0PHNpemVfdD4oLTEpID4+IDIpKSB7Ci0gICAgLy8g
SWYgdGhlIHVzZXIgaGFzIGFza2VkIGZvciBhIGh1Z2UgYWxsb2NhdGlvbiB0aGVuIGl0IGlzIHBv
c3NpYmxlCi0gICAgLy8gZm9yIHRoZSBjb2RlIGJlbG93IHRvIGxvb3AgaW5maW5pdGVseS4gIEp1
c3QgcmV0dXJuIChub3RlIHRoYXQKLSAgICAvLyB0aGlzIHRocm93cyBvZmYgdGhlIHNhbXBsaW5n
IGFjY3VyYWN5IHNvbWV3aGF0LCBidXQgYSB1c2VyIHdobwotICAgIC8vIGlzIGFsbG9jYXRpbmcg
bW9yZSB0aGFuIDFHIG9mIG1lbW9yeSBhdCBhIHRpbWUgY2FuIGxpdmUgd2l0aCBhCi0gICAgLy8g
bWlub3IgaW5hY2N1cmFjeSBpbiBwcm9maWxpbmcgb2Ygc21hbGwgYWxsb2NhdGlvbnMsIGFuZCBh
bHNvCi0gICAgLy8gd291bGQgcmF0aGVyIG5vdCB3YWl0IGZvciB0aGUgbG9vcCBiZWxvdyB0byB0
ZXJtaW5hdGUpLgotICAgIHJldHVybjsKLSAgfQogCi0gIHdoaWxlIChieXRlc191bnRpbF9zYW1w
bGVfIDwgaykgewotICAgIC8vIEluY3JlYXNlIGJ5dGVzX3VudGlsX3NhbXBsZV8gYnkgZW5vdWdo
IGF2ZXJhZ2Ugc2FtcGxpbmcgcGVyaW9kcwotICAgIC8vIChzYW1wbGVfcGVyaW9kID4+IDEpIHRv
IGFsbG93IHVzIHRvIHNhbXBsZSBwYXN0IHRoZSBjdXJyZW50Ci0gICAgLy8gYWxsb2NhdGlvbi4K
LSAgICBieXRlc191bnRpbF9zYW1wbGVfICs9IChzYW1wbGVfcGVyaW9kID4+IDEpOwotICB9Ci0K
LSAgYnl0ZXNfdW50aWxfc2FtcGxlXyAtPSBrOwotfQorICAgIC8vIGludDY0IGZpbmlzaCA9IEN5
Y2xlQ2xvY2s6Ok5vdygpOworICAgIC8vIEN5Y2xlVGltZXIgY3Q7CisgICAgLy8gTUVTU0FHRSgi
R0M6ICUuMGYgbnNcbiIsIGN0LkN5Y2xlc1RvVXNlYyhmaW5pc2gtc3RhcnQpKjEwMDAuMCk7Cit9
CisKK3ZvaWQgVENNYWxsb2NUaHJlYWRDYWNoZTo6UGlja05leHRTYW1wbGUoc2l6ZV90IGspCit7
CisgICAgLy8gTWFrZSBuZXh0ICJyYW5kb20iIG51bWJlcgorICAgIC8vIHheMzIreF4yMit4XjIr
eF4xKzEgaXMgYSBwcmltaXRpdmUgcG9seW5vbWlhbCBmb3IgcmFuZG9tIG51bWJlcnMKKyAgICBz
dGF0aWMgY29uc3QgdWludDMyX3Qga1BvbHkgPSAoMSA8PCAyMikgfCAoMSA8PCAyKSB8ICgxIDw8
IDEpIHwgKDEgPDwgMCk7CisgICAgdWludDMyX3QgciA9IHJuZDsKKyAgICBybmQgPSAociA8PCAx
KSBeICgoc3RhdGljX2Nhc3Q8aW50MzJfdD4ocikgPj4gMzEpICYga1BvbHkpOworCisgICAgLy8g
TmV4dCBwb2ludCBpcyAicm5kICUgKHNhbXBsZV9wZXJpb2QpIi4gSS5lLiwgYXZlcmFnZQorICAg
IC8vIGluY3JlbWVudCBpcyAic2FtcGxlX3BlcmlvZC8yIi4KKyAgICBjb25zdCBpbnQgZmxhZ1Zh
bHVlID0gc3RhdGljX2Nhc3Q8aW50PihGTEFHU190Y21hbGxvY19zYW1wbGVfcGFyYW1ldGVyKTsK
KyAgICBzdGF0aWMgaW50IGxhc3RGbGFnVmFsdWUgPSAtMTsKKworICAgIGlmIChmbGFnVmFsdWUg
IT0gbGFzdEZsYWdWYWx1ZSkgeworICAgICAgICBTcGluTG9ja0hvbGRlciBoKCZzYW1wbGVfcGVy
aW9kX2xvY2spOworICAgICAgICBpbnQgaTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IChzdGF0
aWNfY2FzdDxpbnQ+KHNpemVvZihwcmltZXNMaXN0KSAvIHNpemVvZihwcmltZXNMaXN0WzBdKSkg
LSAxKTsgaSsrKQorICAgICAgICAgICAgaWYgKHByaW1lc0xpc3RbaV0gPj0gZmxhZ1ZhbHVlKQor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBzYW1wbGVfcGVyaW9kID0gcHJpbWVzTGlz
dFtpXTsKKyAgICAgICAgbGFzdEZsYWdWYWx1ZSA9IGZsYWdWYWx1ZTsKKyAgICB9CisKKyAgICBi
eXRlc1VudGlsU2FtcGxlICs9IHJuZCAlIHNhbXBsZV9wZXJpb2Q7CisKKyAgICBpZiAoayA+IChz
dGF0aWNfY2FzdDxzaXplX3Q+KC0xKSA+PiAyKSkKKyAgICAgICAgLy8gSWYgdGhlIHVzZXIgaGFz
IGFza2VkIGZvciBhIGh1Z2UgYWxsb2NhdGlvbiB0aGVuIGl0IGlzIHBvc3NpYmxlCisgICAgICAg
IC8vIGZvciB0aGUgY29kZSBiZWxvdyB0byBsb29wIGluZmluaXRlbHkuIEp1c3QgcmV0dXJuIChu
b3RlIHRoYXQKKyAgICAgICAgLy8gdGhpcyB0aHJvd3Mgb2ZmIHRoZSBzYW1wbGluZyBhY2N1cmFj
eSBzb21ld2hhdCwgYnV0IGEgdXNlciB3aG8KKyAgICAgICAgLy8gaXMgYWxsb2NhdGluZyBtb3Jl
IHRoYW4gMUcgb2YgbWVtb3J5IGF0IGEgdGltZSBjYW4gbGl2ZSB3aXRoIGEKKyAgICAgICAgLy8g
bWlub3IgaW5hY2N1cmFjeSBpbiBwcm9maWxpbmcgb2Ygc21hbGwgYWxsb2NhdGlvbnMsIGFuZCBh
bHNvCisgICAgICAgIC8vIHdvdWxkIHJhdGhlciBub3Qgd2FpdCBmb3IgdGhlIGxvb3AgYmVsb3cg
dG8gdGVybWluYXRlKS4KKyAgICAgICAgcmV0dXJuOwogCi12b2lkIFRDTWFsbG9jX1RocmVhZENh
Y2hlOjpJbml0TW9kdWxlKCkgewotICAvLyBUaGVyZSBpcyBhIHNsaWdodCBwb3RlbnRpYWwgcmFj
ZSBoZXJlIGJlY2F1c2Ugb2YgZG91YmxlLWNoZWNrZWQKLSAgLy8gbG9ja2luZyBpZGlvbS4gIEhv
d2V2ZXIsIGFzIGxvbmcgYXMgdGhlIHByb2dyYW0gZG9lcyBhIHNtYWxsCi0gIC8vIGFsbG9jYXRp
b24gYmVmb3JlIHN3aXRjaGluZyB0byBtdWx0aS10aHJlYWRlZCBtb2RlLCB3ZSB3aWxsIGJlCi0g
IC8vIGZpbmUuICBXZSBpbmNyZWFzZSB0aGUgY2hhbmNlcyBvZiBkb2luZyBzdWNoIGEgc21hbGwg
YWxsb2NhdGlvbgotICAvLyBieSBkb2luZyBvbmUgaW4gdGhlIGNvbnN0cnVjdG9yIG9mIHRoZSBt
b2R1bGVfZW50ZXJfZXhpdF9ob29rCi0gIC8vIG9iamVjdCBkZWNsYXJlZCBiZWxvdy4KLSAgU3Bp
bkxvY2tIb2xkZXIgaCgmcGFnZWhlYXBfbG9jayk7Ci0gIGlmICghcGhpbml0ZWQpIHsKKyAgICB3
aGlsZSAoYnl0ZXNVbnRpbFNhbXBsZSA8IGspCisgICAgICAgIC8vIEluY3JlYXNlIGJ5dGVzVW50
aWxTYW1wbGUgYnkgZW5vdWdoIGF2ZXJhZ2Ugc2FtcGxpbmcgcGVyaW9kcworICAgICAgICAvLyAo
c2FtcGxlX3BlcmlvZCA+PiAxKSB0byBhbGxvdyB1cyB0byBzYW1wbGUgcGFzdCB0aGUgY3VycmVu
dAorICAgICAgICAvLyBhbGxvY2F0aW9uLgorICAgICAgICBieXRlc1VudGlsU2FtcGxlICs9IChz
YW1wbGVfcGVyaW9kID4+IDEpOworCisgICAgYnl0ZXNVbnRpbFNhbXBsZSAtPSBrOworfQorCit2
b2lkIFRDTWFsbG9jVGhyZWFkQ2FjaGU6OkluaXRNb2R1bGUoKQoreworICAgIC8vIFRoZXJlIGlz
IGEgc2xpZ2h0IHBvdGVudGlhbCByYWNlIGhlcmUgYmVjYXVzZSBvZiBkb3VibGUtY2hlY2tlZAor
ICAgIC8vIGxvY2tpbmcgaWRpb20uIEhvd2V2ZXIsIGFzIGxvbmcgYXMgdGhlIHByb2dyYW0gZG9l
cyBhIHNtYWxsCisgICAgLy8gYWxsb2NhdGlvbiBiZWZvcmUgc3dpdGNoaW5nIHRvIG11bHRpLXRo
cmVhZGVkIG1vZGUsIHdlIHdpbGwgYmUKKyAgICAvLyBmaW5lLiBXZSBpbmNyZWFzZSB0aGUgY2hh
bmNlcyBvZiBkb2luZyBzdWNoIGEgc21hbGwgYWxsb2NhdGlvbgorICAgIC8vIGJ5IGRvaW5nIG9u
ZSBpbiB0aGUgY29uc3RydWN0b3Igb2YgdGhlIG1vZHVsZV9lbnRlcl9leGl0X2hvb2sKKyAgICAv
LyBvYmplY3QgZGVjbGFyZWQgYmVsb3cuCisgICAgU3BpbkxvY2tIb2xkZXIgaCgmcGFnZWhlYXBM
b2NrKTsKKyAgICBpZiAoIXBoaW5pdGVkKSB7CiAjaWZkZWYgV1RGX0NIQU5HRVMKLSAgICBJbml0
VFNEKCk7CisgICAgICAgIEluaXRUU0QoKTsKICNlbmRpZgotICAgIEluaXRTaXplQ2xhc3Nlcygp
OwotICAgIHRocmVhZGhlYXBfYWxsb2NhdG9yLkluaXQoKTsKLSAgICBzcGFuX2FsbG9jYXRvci5J
bml0KCk7Ci0gICAgc3Bhbl9hbGxvY2F0b3IuTmV3KCk7IC8vIFJlZHVjZSBjYWNoZSBjb25mbGlj
dHMKLSAgICBzcGFuX2FsbG9jYXRvci5OZXcoKTsgLy8gUmVkdWNlIGNhY2hlIGNvbmZsaWN0cwot
ICAgIHN0YWNrdHJhY2VfYWxsb2NhdG9yLkluaXQoKTsKLSAgICBETExfSW5pdCgmc2FtcGxlZF9v
YmplY3RzKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtOdW1DbGFzc2VzOyArK2kpIHsK
LSAgICAgIGNlbnRyYWxfY2FjaGVbaV0uSW5pdChpKTsKLSAgICB9Ci0gICAgcGFnZWhlYXAtPmlu
aXQoKTsKLSAgICBwaGluaXRlZCA9IDE7CisgICAgICAgIEluaXRTaXplQ2xhc3NlcygpOworICAg
ICAgICB0aHJlYWRoZWFwQWxsb2NhdG9yLkluaXQoKTsKKyAgICAgICAgc3BhbkFsbG9jYXRvci5J
bml0KCk7CisgICAgICAgIHNwYW5BbGxvY2F0b3IuTmV3KCk7IC8vIFJlZHVjZSBjYWNoZSBjb25m
bGljdHMKKyAgICAgICAgc3BhbkFsbG9jYXRvci5OZXcoKTsgLy8gUmVkdWNlIGNhY2hlIGNvbmZs
aWN0cworICAgICAgICBzdGFja3RyYWNlX2FsbG9jYXRvci5Jbml0KCk7CisgICAgICAgIERMTElu
aXQoJnNhbXBsZWRPYmplY3RzKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrTnVt
Q2xhc3NlczsgKytpKQorICAgICAgICAgICAgY2VudHJhbENhY2hlW2ldLkluaXQoaSk7CisgICAg
ICAgIHBhZ2VoZWFwLT5pbml0KCk7CisgICAgICAgIHBoaW5pdGVkID0gMTsKICNpZiBkZWZpbmVk
KFdURl9DSEFOR0VTKSAmJiBPUyhEQVJXSU4pCi0gICAgRmFzdE1hbGxvY1pvbmU6OmluaXQoKTsK
KyAgICAgICAgRmFzdE1hbGxvY1pvbmU6OmluaXQoKTsKICNlbmRpZgotICB9CisgICAgfQogfQog
Ci1pbmxpbmUgVENNYWxsb2NfVGhyZWFkQ2FjaGUqIFRDTWFsbG9jX1RocmVhZENhY2hlOjpOZXdI
ZWFwKFRocmVhZElkZW50aWZpZXIgdGlkKSB7Ci0gIC8vIENyZWF0ZSB0aGUgaGVhcCBhbmQgYWRk
IGl0IHRvIHRoZSBsaW5rZWQgbGlzdAotICBUQ01hbGxvY19UaHJlYWRDYWNoZSAqaGVhcCA9IHRo
cmVhZGhlYXBfYWxsb2NhdG9yLk5ldygpOwotICBoZWFwLT5Jbml0KHRpZCk7Ci0gIGhlYXAtPm5l
eHRfID0gdGhyZWFkX2hlYXBzOwotICBoZWFwLT5wcmV2XyA9IE5VTEw7Ci0gIGlmICh0aHJlYWRf
aGVhcHMgIT0gTlVMTCkgdGhyZWFkX2hlYXBzLT5wcmV2XyA9IGhlYXA7Ci0gIHRocmVhZF9oZWFw
cyA9IGhlYXA7Ci0gIHRocmVhZF9oZWFwX2NvdW50Kys7Ci0gIFJlY29tcHV0ZVRocmVhZENhY2hl
U2l6ZSgpOwotICByZXR1cm4gaGVhcDsKK2lubGluZSBUQ01hbGxvY1RocmVhZENhY2hlKiBUQ01h
bGxvY1RocmVhZENhY2hlOjpOZXdIZWFwKFRocmVhZElkZW50aWZpZXIgdGlkKQoreworICAgIC8v
IENyZWF0ZSB0aGUgaGVhcCBhbmQgYWRkIGl0IHRvIHRoZSBsaW5rZWQgbGlzdAorICAgIFRDTWFs
bG9jVGhyZWFkQ2FjaGUqIGhlYXAgPSB0aHJlYWRoZWFwQWxsb2NhdG9yLk5ldygpOworICAgIGhl
YXAtPkluaXQodGlkKTsKKyAgICBoZWFwLT5uZXh0ID0gdGhyZWFkSGVhcHM7CisgICAgaGVhcC0+
cHJldiA9IDA7CisgICAgaWYgKHRocmVhZEhlYXBzKQorICAgICAgICB0aHJlYWRIZWFwcy0+cHJl
diA9IGhlYXA7CisgICAgdGhyZWFkSGVhcHMgPSBoZWFwOworICAgIHRocmVhZF9oZWFwX2NvdW50
Kys7CisgICAgUmVjb21wdXRlVGhyZWFkQ2FjaGVTaXplKCk7CisgICAgcmV0dXJuIGhlYXA7CiB9
CiAKLWlubGluZSBUQ01hbGxvY19UaHJlYWRDYWNoZSogVENNYWxsb2NfVGhyZWFkQ2FjaGU6Okdl
dFRocmVhZEhlYXAoKSB7CitpbmxpbmUgVENNYWxsb2NUaHJlYWRDYWNoZSogVENNYWxsb2NUaHJl
YWRDYWNoZTo6R2V0VGhyZWFkSGVhcCgpCit7CiAjaWZkZWYgSEFWRV9UTFMKICAgICAvLyBfX3Ro
cmVhZCBpcyBmYXN0ZXIsIGJ1dCBvbmx5IHdoZW4gdGhlIGtlcm5lbCBzdXBwb3J0cyBpdAotICBp
ZiAoS2VybmVsU3VwcG9ydHNUTFMoKSkKLSAgICByZXR1cm4gdGhyZWFkbG9jYWxfaGVhcDsKKyAg
ICBpZiAoS2VybmVsU3VwcG9ydHNUTFMoKSkKKyAgICAgICAgcmV0dXJuIHRocmVhZGxvY2FsSGVh
cDsKICNlbGlmIE9TKFdJTkRPV1MpCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFRDTWFsbG9jX1Ro
cmVhZENhY2hlKj4oVGxzR2V0VmFsdWUodGxzSW5kZXgpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8VENNYWxsb2NUaHJlYWRDYWNoZSo+KFRsc0dldFZhbHVlKHRsc0luZGV4KSk7CiAjZWxzZQot
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxUQ01hbGxvY19UaHJlYWRDYWNoZSo+KHB0aHJlYWRfZ2V0
c3BlY2lmaWMoaGVhcF9rZXkpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VENNYWxsb2NUaHJl
YWRDYWNoZSo+KHB0aHJlYWRfZ2V0c3BlY2lmaWMoaGVhcF9rZXkpKTsKICNlbmRpZgogfQogCi1p
bmxpbmUgVENNYWxsb2NfVGhyZWFkQ2FjaGUqIFRDTWFsbG9jX1RocmVhZENhY2hlOjpHZXRDYWNo
ZSgpIHsKLSAgVENNYWxsb2NfVGhyZWFkQ2FjaGUqIHB0ciA9IE5VTEw7Ci0gIGlmICghdHNkX2lu
aXRlZCkgewotICAgIEluaXRNb2R1bGUoKTsKLSAgfSBlbHNlIHsKLSAgICBwdHIgPSBHZXRUaHJl
YWRIZWFwKCk7Ci0gIH0KLSAgaWYgKHB0ciA9PSBOVUxMKSBwdHIgPSBDcmVhdGVDYWNoZUlmTmVj
ZXNzYXJ5KCk7Ci0gIHJldHVybiBwdHI7CitpbmxpbmUgVENNYWxsb2NUaHJlYWRDYWNoZSogVENN
YWxsb2NUaHJlYWRDYWNoZTo6R2V0Q2FjaGUoKQoreworICAgIFRDTWFsbG9jVGhyZWFkQ2FjaGUq
IHB0ciA9IDA7CisgICAgaWYgKCF0c2RJbml0ZWQpCisgICAgICAgIEluaXRNb2R1bGUoKTsKKyAg
ICBlbHNlCisgICAgICAgIHB0ciA9IEdldFRocmVhZEhlYXAoKTsKKyAgICBpZiAoIXB0cikKKyAg
ICAgICAgcHRyID0gQ3JlYXRlQ2FjaGVJZk5lY2Vzc2FyeSgpOworICAgIHJldHVybiBwdHI7CiB9
CiAKLS8vIEluIGRlbGV0aW9uIHBhdGhzLCB3ZSBkbyBub3QgdHJ5IHRvIGNyZWF0ZSBhIHRocmVh
ZC1jYWNoZS4gIFRoaXMgaXMKKy8vIEluIGRlbGV0aW9uIHBhdGhzLCB3ZSBkbyBub3QgdHJ5IHRv
IGNyZWF0ZSBhIHRocmVhZC1jYWNoZS4gVGhpcyBpcwogLy8gYmVjYXVzZSB3ZSBtYXkgYmUgaW4g
dGhlIHRocmVhZCBkZXN0cnVjdGlvbiBjb2RlIGFuZCBtYXkgaGF2ZQogLy8gYWxyZWFkeSBjbGVh
bmVkIHVwIHRoZSBjYWNoZSBmb3IgdGhpcyB0aHJlYWQuCi1pbmxpbmUgVENNYWxsb2NfVGhyZWFk
Q2FjaGUqIFRDTWFsbG9jX1RocmVhZENhY2hlOjpHZXRDYWNoZUlmUHJlc2VudCgpIHsKLSAgaWYg
KCF0c2RfaW5pdGVkKSByZXR1cm4gTlVMTDsKLSAgdm9pZCogY29uc3QgcCA9IEdldFRocmVhZEhl
YXAoKTsKLSAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VENNYWxsb2NfVGhyZWFkQ2FjaGUqPihw
KTsKK2lubGluZSBUQ01hbGxvY1RocmVhZENhY2hlKiBUQ01hbGxvY1RocmVhZENhY2hlOjpHZXRD
YWNoZUlmUHJlc2VudCgpCit7CisgICAgaWYgKCF0c2RJbml0ZWQpCisgICAgICAgIHJldHVybiAw
OworICAgIHZvaWQqIGNvbnN0IHAgPSBHZXRUaHJlYWRIZWFwKCk7CisgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8VENNYWxsb2NUaHJlYWRDYWNoZSo+KHApOwogfQogCi12b2lkIFRDTWFsbG9j
X1RocmVhZENhY2hlOjpJbml0VFNEKCkgewotICBBU1NFUlQoIXRzZF9pbml0ZWQpOwordm9pZCBU
Q01hbGxvY1RocmVhZENhY2hlOjpJbml0VFNEKCkKK3sKKyAgICBBU1NFUlQoIXRzZEluaXRlZCk7
CiAjaWYgVVNFKFBUSFJFQURfR0VUU1BFQ0lGSUNfRElSRUNUKQotICBwdGhyZWFkX2tleV9pbml0
X25wKGhlYXBfa2V5LCBEZXN0cm95VGhyZWFkQ2FjaGUpOworICAgIHB0aHJlYWRfa2V5X2luaXRf
bnAoaGVhcF9rZXksIERlc3Ryb3lUaHJlYWRDYWNoZSk7CiAjZWxzZQotICBwdGhyZWFkX2tleV9j
cmVhdGUoJmhlYXBfa2V5LCBEZXN0cm95VGhyZWFkQ2FjaGUpOworICAgIHB0aHJlYWRfa2V5X2Ny
ZWF0ZSgmaGVhcF9rZXksIERlc3Ryb3lUaHJlYWRDYWNoZSk7CiAjZW5kaWYKICNpZiBPUyhXSU5E
T1dTKQotICB0bHNJbmRleCA9IFRsc0FsbG9jKCk7CisgICAgdGxzSW5kZXggPSBUbHNBbGxvYygp
OwogI2VuZGlmCi0gIHRzZF9pbml0ZWQgPSB0cnVlOworICAgIHRzZEluaXRlZCA9IHRydWU7CiAg
ICAgCiAjaWYgIU9TKFdJTkRPV1MpCi0gIC8vIFdlIG1heSBoYXZlIHVzZWQgYSBmYWtlIHB0aHJl
YWRfdCBmb3IgdGhlIG1haW4gdGhyZWFkLiAgRml4IGl0LgotICBwdGhyZWFkX3QgemVybzsKLSAg
bWVtc2V0KCZ6ZXJvLCAwLCBzaXplb2YoemVybykpOworICAgIC8vIFdlIG1heSBoYXZlIHVzZWQg
YSBmYWtlIHB0aHJlYWRfdCBmb3IgdGhlIG1haW4gdGhyZWFkLiBGaXggaXQuCisgICAgcHRocmVh
ZF90IHplcm87CisgICAgbWVtc2V0KCZ6ZXJvLCAwLCBzaXplb2YoemVybykpOwogI2VuZGlmCiAj
aWZuZGVmIFdURl9DSEFOR0VTCi0gIFNwaW5Mb2NrSG9sZGVyIGgoJnBhZ2VoZWFwX2xvY2spOwor
ICAgIFNwaW5Mb2NrSG9sZGVyIGgoJnBhZ2VoZWFwTG9jayk7CiAjZWxzZQotICBBU1NFUlQocGFn
ZWhlYXBfbG9jay5Jc0hlbGQoKSk7CisgICAgQVNTRVJUKHBhZ2VoZWFwTG9jay5Jc0hlbGQoKSk7
CiAjZW5kaWYKLSAgZm9yIChUQ01hbGxvY19UaHJlYWRDYWNoZSogaCA9IHRocmVhZF9oZWFwczsg
aCAhPSBOVUxMOyBoID0gaC0+bmV4dF8pIHsKKyAgICBmb3IgKFRDTWFsbG9jVGhyZWFkQ2FjaGUq
IGggPSB0aHJlYWRIZWFwczsgaDsgaCA9IGgtPm5leHQpCiAjaWYgT1MoV0lORE9XUykKLSAgICBp
ZiAoaC0+dGlkXyA9PSAwKSB7Ci0gICAgICBoLT50aWRfID0gR2V0Q3VycmVudFRocmVhZElkKCk7
Ci0gICAgfQorICAgICAgICBpZiAoIWgtPnRpZCkKKyAgICAgICAgICAgIGgtPnRpZCA9IEdldEN1
cnJlbnRUaHJlYWRJZCgpOwogI2Vsc2UKLSAgICBpZiAocHRocmVhZF9lcXVhbChoLT50aWRfLCB6
ZXJvKSkgewotICAgICAgaC0+dGlkXyA9IHB0aHJlYWRfc2VsZigpOwotICAgIH0KKyAgICAgICAg
aWYgKHB0aHJlYWRfZXF1YWwoaC0+dGlkLCB6ZXJvKSkKKyAgICAgICAgICAgIGgtPnRpZCA9IHB0
aHJlYWRfc2VsZigpOwogI2VuZGlmCi0gIH0KIH0KIAotVENNYWxsb2NfVGhyZWFkQ2FjaGUqIFRD
TWFsbG9jX1RocmVhZENhY2hlOjpDcmVhdGVDYWNoZUlmTmVjZXNzYXJ5KCkgewotICAvLyBJbml0
aWFsaXplIHBlci10aHJlYWQgZGF0YSBpZiBuZWNlc3NhcnkKLSAgVENNYWxsb2NfVGhyZWFkQ2Fj
aGUqIGhlYXAgPSBOVUxMOwotICB7Ci0gICAgU3BpbkxvY2tIb2xkZXIgaCgmcGFnZWhlYXBfbG9j
ayk7CitUQ01hbGxvY1RocmVhZENhY2hlKiBUQ01hbGxvY1RocmVhZENhY2hlOjpDcmVhdGVDYWNo
ZUlmTmVjZXNzYXJ5KCkKK3sKKyAgICAvLyBJbml0aWFsaXplIHBlci10aHJlYWQgZGF0YSBpZiBu
ZWNlc3NhcnkKKyAgICBUQ01hbGxvY1RocmVhZENhY2hlKiBoZWFwID0gMDsKKyAgICB7CisgICAg
ICAgIFNwaW5Mb2NrSG9sZGVyIGgoJnBhZ2VoZWFwTG9jayk7CiAKICNpZiBPUyhXSU5ET1dTKQot
ICAgIERXT1JEIG1lOwotICAgIGlmICghdHNkX2luaXRlZCkgewotICAgICAgbWUgPSAwOwotICAg
IH0gZWxzZSB7Ci0gICAgICBtZSA9IEdldEN1cnJlbnRUaHJlYWRJZCgpOwotICAgIH0KKyAgICAg
ICAgRFdPUkQgbWU7CisgICAgICAgIGlmICghdHNkSW5pdGVkKQorICAgICAgICAgICAgbWUgPSAw
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBtZSA9IEdldEN1cnJlbnRUaHJlYWRJZCgpOwog
I2Vsc2UKLSAgICAvLyBFYXJseSBvbiBpbiBnbGliYydzIGxpZmUsIHdlIGNhbm5vdCBldmVuIGNh
bGwgcHRocmVhZF9zZWxmKCkKLSAgICBwdGhyZWFkX3QgbWU7Ci0gICAgaWYgKCF0c2RfaW5pdGVk
KSB7Ci0gICAgICBtZW1zZXQoJm1lLCAwLCBzaXplb2YobWUpKTsKLSAgICB9IGVsc2UgewotICAg
ICAgbWUgPSBwdGhyZWFkX3NlbGYoKTsKLSAgICB9CisgICAgICAgIC8vIEVhcmx5IG9uIGluIGds
aWJjJ3MgbGlmZSwgd2UgY2Fubm90IGV2ZW4gY2FsbCBwdGhyZWFkX3NlbGYoKQorICAgICAgICBw
dGhyZWFkX3QgbWU7CisgICAgICAgIGlmICghdHNkSW5pdGVkKQorICAgICAgICAgICAgbWVtc2V0
KCZtZSwgMCwgc2l6ZW9mKG1lKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1lID0gcHRo
cmVhZF9zZWxmKCk7CiAjZW5kaWYKIAotICAgIC8vIFRoaXMgbWF5IGJlIGEgcmVjdXJzaXZlIG1h
bGxvYyBjYWxsIGZyb20gcHRocmVhZF9zZXRzcGVjaWZpYygpCi0gICAgLy8gSW4gdGhhdCBjYXNl
LCB0aGUgaGVhcCBmb3IgdGhpcyB0aHJlYWQgaGFzIGFscmVhZHkgYmVlbiBjcmVhdGVkCi0gICAg
Ly8gYW5kIGFkZGVkIHRvIHRoZSBsaW5rZWQgbGlzdC4gIFNvIHdlIHNlYXJjaCBmb3IgdGhhdCBm
aXJzdC4KLSAgICBmb3IgKFRDTWFsbG9jX1RocmVhZENhY2hlKiBoID0gdGhyZWFkX2hlYXBzOyBo
ICE9IE5VTEw7IGggPSBoLT5uZXh0XykgeworICAgICAgICAvLyBUaGlzIG1heSBiZSBhIHJlY3Vy
c2l2ZSBtYWxsb2MgY2FsbCBmcm9tIHB0aHJlYWRfc2V0c3BlY2lmaWMoKQorICAgICAgICAvLyBJ
biB0aGF0IGNhc2UsIHRoZSBoZWFwIGZvciB0aGlzIHRocmVhZCBoYXMgYWxyZWFkeSBiZWVuIGNy
ZWF0ZWQKKyAgICAgICAgLy8gYW5kIGFkZGVkIHRvIHRoZSBsaW5rZWQgbGlzdC4gU28gd2Ugc2Vh
cmNoIGZvciB0aGF0IGZpcnN0LgorICAgICAgICBmb3IgKFRDTWFsbG9jVGhyZWFkQ2FjaGUqIGgg
PSB0aHJlYWRIZWFwczsgaDsgaCA9IGgtPm5leHQpIHsKICNpZiBPUyhXSU5ET1dTKQotICAgICAg
aWYgKGgtPnRpZF8gPT0gbWUpIHsKKyAgICAgICAgICAgIGlmIChoLT50aWQgPT0gbWUpIHsKICNl
bHNlCi0gICAgICBpZiAocHRocmVhZF9lcXVhbChoLT50aWRfLCBtZSkpIHsKKyAgICAgICAgICAg
IGlmIChwdGhyZWFkX2VxdWFsKGgtPnRpZCwgbWUpKSB7CiAjZW5kaWYKLSAgICAgICAgaGVhcCA9
IGg7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KKyAgICAgICAgICAgICAgICBoZWFw
ID0gaDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQog
Ci0gICAgaWYgKGhlYXAgPT0gTlVMTCkgaGVhcCA9IE5ld0hlYXAobWUpOwotICB9CisgICAgICAg
IGlmICghaGVhcCkKKyAgICAgICAgICAgIGhlYXAgPSBOZXdIZWFwKG1lKTsKKyAgICB9CiAKLSAg
Ly8gV2UgY2FsbCBwdGhyZWFkX3NldHNwZWNpZmljKCkgb3V0c2lkZSB0aGUgbG9jayBiZWNhdXNl
IGl0IG1heQotICAvLyBjYWxsIG1hbGxvYygpIHJlY3Vyc2l2ZWx5LiAgVGhlIHJlY3Vyc2l2ZSBj
YWxsIHdpbGwgbmV2ZXIgZ2V0Ci0gIC8vIGhlcmUgYWdhaW4gYmVjYXVzZSBpdCB3aWxsIGZpbmQg
dGhlIGFscmVhZHkgYWxsb2NhdGVkIGhlYXAgaW4gdGhlCi0gIC8vIGxpbmtlZCBsaXN0IG9mIGhl
YXBzLgotICBpZiAoIWhlYXAtPmluX3NldHNwZWNpZmljXyAmJiB0c2RfaW5pdGVkKSB7Ci0gICAg
aGVhcC0+aW5fc2V0c3BlY2lmaWNfID0gdHJ1ZTsKLSAgICBzZXRUaHJlYWRIZWFwKGhlYXApOwot
ICB9Ci0gIHJldHVybiBoZWFwOworICAgIC8vIFdlIGNhbGwgcHRocmVhZF9zZXRzcGVjaWZpYygp
IG91dHNpZGUgdGhlIGxvY2sgYmVjYXVzZSBpdCBtYXkKKyAgICAvLyBjYWxsIG1hbGxvYygpIHJl
Y3Vyc2l2ZWx5LiBUaGUgcmVjdXJzaXZlIGNhbGwgd2lsbCBuZXZlciBnZXQKKyAgICAvLyBoZXJl
IGFnYWluIGJlY2F1c2UgaXQgd2lsbCBmaW5kIHRoZSBhbHJlYWR5IGFsbG9jYXRlZCBoZWFwIGlu
IHRoZQorICAgIC8vIGxpbmtlZCBsaXN0IG9mIGhlYXBzLgorICAgIGlmICghaGVhcC0+aW5TZXRz
cGVjaWZpYyAmJiB0c2RJbml0ZWQpIHsKKyAgICAgICAgaGVhcC0+aW5TZXRzcGVjaWZpYyA9IHRy
dWU7CisgICAgICAgIHNldFRocmVhZEhlYXAoaGVhcCk7CisgICAgfQorICAgIHJldHVybiBoZWFw
OwogfQogCi12b2lkIFRDTWFsbG9jX1RocmVhZENhY2hlOjpCZWNvbWVJZGxlKCkgewotICBpZiAo
IXRzZF9pbml0ZWQpIHJldHVybjsgICAgICAgICAgICAgIC8vIE5vIGNhY2hlcyB5ZXQKLSAgVENN
YWxsb2NfVGhyZWFkQ2FjaGUqIGhlYXAgPSBHZXRUaHJlYWRIZWFwKCk7Ci0gIGlmIChoZWFwID09
IE5VTEwpIHJldHVybjsgICAgICAgICAgICAgLy8gTm8gdGhyZWFkIGNhY2hlIHRvIHJlbW92ZQot
ICBpZiAoaGVhcC0+aW5fc2V0c3BlY2lmaWNfKSByZXR1cm47ICAgIC8vIERvIG5vdCBkaXN0dXJi
IHRoZSBhY3RpdmUgY2FsbGVyCit2b2lkIFRDTWFsbG9jVGhyZWFkQ2FjaGU6OkJlY29tZUlkbGUo
KQoreworICAgIGlmICghdHNkSW5pdGVkKQorICAgICAgICByZXR1cm47IC8vIE5vIGNhY2hlcyB5
ZXQKKyAgICBUQ01hbGxvY1RocmVhZENhY2hlKiBoZWFwID0gR2V0VGhyZWFkSGVhcCgpOworICAg
IGlmICghaGVhcCkKKyAgICAgICAgcmV0dXJuOyAvLyBObyB0aHJlYWQgY2FjaGUgdG8gcmVtb3Zl
CisgICAgaWYgKGhlYXAtPmluU2V0c3BlY2lmaWMpCisgICAgICAgIHJldHVybjsgLy8gRG8gbm90
IGRpc3R1cmIgdGhlIGFjdGl2ZSBjYWxsZXIKIAotICBoZWFwLT5pbl9zZXRzcGVjaWZpY18gPSB0
cnVlOwotICBzZXRUaHJlYWRIZWFwKE5VTEwpOworICAgIGhlYXAtPmluU2V0c3BlY2lmaWMgPSB0
cnVlOworICAgIHNldFRocmVhZEhlYXAoMCk7CiAjaWZkZWYgSEFWRV9UTFMKLSAgLy8gQWxzbyB1
cGRhdGUgdGhlIGNvcHkgaW4gX190aHJlYWQKLSAgdGhyZWFkbG9jYWxfaGVhcCA9IE5VTEw7Cisg
ICAgLy8gQWxzbyB1cGRhdGUgdGhlIGNvcHkgaW4gX190aHJlYWQKKyAgICB0aHJlYWRsb2NhbEhl
YXAgPSAwOwogI2VuZGlmCi0gIGhlYXAtPmluX3NldHNwZWNpZmljXyA9IGZhbHNlOwotICBpZiAo
R2V0VGhyZWFkSGVhcCgpID09IGhlYXApIHsKLSAgICAvLyBTb21laG93IGhlYXAgZ290IHJlaW5z
dGF0ZWQgYnkgYSByZWN1cnNpdmUgY2FsbCB0byBtYWxsb2MKLSAgICAvLyBmcm9tIHB0aHJlYWRf
c2V0c3BlY2lmaWMuICBXZSBnaXZlIHVwIGluIHRoaXMgY2FzZS4KLSAgICByZXR1cm47Ci0gIH0K
KyAgICBoZWFwLT5pblNldHNwZWNpZmljID0gZmFsc2U7CisgICAgaWYgKEdldFRocmVhZEhlYXAo
KSA9PSBoZWFwKQorICAgICAgICAvLyBTb21laG93IGhlYXAgZ290IHJlaW5zdGF0ZWQgYnkgYSBy
ZWN1cnNpdmUgY2FsbCB0byBtYWxsb2MKKyAgICAgICAgLy8gZnJvbSBwdGhyZWFkX3NldHNwZWNp
ZmljLiBXZSBnaXZlIHVwIGluIHRoaXMgY2FzZS4KKyAgICAgICAgcmV0dXJuOwogCi0gIC8vIFdl
IGNhbiBub3cgZ2V0IHJpZCBvZiB0aGUgaGVhcAotICBEZWxldGVDYWNoZShoZWFwKTsKKyAgICAv
LyBXZSBjYW4gbm93IGdldCByaWQgb2YgdGhlIGhlYXAKKyAgICBEZWxldGVDYWNoZShoZWFwKTsK
IH0KIAotdm9pZCBUQ01hbGxvY19UaHJlYWRDYWNoZTo6RGVzdHJveVRocmVhZENhY2hlKHZvaWQq
IHB0cikgewotICAvLyBOb3RlIHRoYXQgInB0ciIgY2Fubm90IGJlIE5VTEwgc2luY2UgcHRocmVh
ZCBwcm9taXNlcyBub3QKLSAgLy8gdG8gaW52b2tlIHRoZSBkZXN0cnVjdG9yIG9uIE5VTEwgdmFs
dWVzLCBidXQgZm9yIHNhZmV0eSwKLSAgLy8gd2UgY2hlY2sgYW55d2F5LgotICBpZiAocHRyID09
IE5VTEwpIHJldHVybjsKK3ZvaWQgVENNYWxsb2NUaHJlYWRDYWNoZTo6RGVzdHJveVRocmVhZENh
Y2hlKHZvaWQqIHB0cikKK3sKKyAgICAvLyBOb3RlIHRoYXQgInB0ciIgY2Fubm90IGJlIDAgc2lu
Y2UgcHRocmVhZCBwcm9taXNlcyBub3QKKyAgICAvLyB0byBpbnZva2UgdGhlIGRlc3RydWN0b3Ig
b24gMCB2YWx1ZXMsIGJ1dCBmb3Igc2FmZXR5LAorICAgIC8vIHdlIGNoZWNrIGFueXdheS4KKyAg
ICBpZiAoIXB0cikKKyAgICAgICAgcmV0dXJuOwogI2lmZGVmIEhBVkVfVExTCi0gIC8vIFByZXZl
bnQgZmFzdCBwYXRoIG9mIEdldFRocmVhZEhlYXAoKSBmcm9tIHJldHVybmluZyBoZWFwLgotICB0
aHJlYWRsb2NhbF9oZWFwID0gTlVMTDsKKyAgICAvLyBQcmV2ZW50IGZhc3QgcGF0aCBvZiBHZXRU
aHJlYWRIZWFwKCkgZnJvbSByZXR1cm5pbmcgaGVhcC4KKyAgICB0aHJlYWRsb2NhbEhlYXAgPSAw
OwogI2VuZGlmCi0gIERlbGV0ZUNhY2hlKHJlaW50ZXJwcmV0X2Nhc3Q8VENNYWxsb2NfVGhyZWFk
Q2FjaGUqPihwdHIpKTsKKyAgICBEZWxldGVDYWNoZShyZWludGVycHJldF9jYXN0PFRDTWFsbG9j
VGhyZWFkQ2FjaGUqPihwdHIpKTsKIH0KIAotdm9pZCBUQ01hbGxvY19UaHJlYWRDYWNoZTo6RGVs
ZXRlQ2FjaGUoVENNYWxsb2NfVGhyZWFkQ2FjaGUqIGhlYXApIHsKLSAgLy8gUmVtb3ZlIGFsbCBt
ZW1vcnkgZnJvbSBoZWFwCi0gIGhlYXAtPkNsZWFudXAoKTsKK3ZvaWQgVENNYWxsb2NUaHJlYWRD
YWNoZTo6RGVsZXRlQ2FjaGUoVENNYWxsb2NUaHJlYWRDYWNoZSogaGVhcCkKK3sKKyAgICAvLyBS
ZW1vdmUgYWxsIG1lbW9yeSBmcm9tIGhlYXAKKyAgICBoZWFwLT5DbGVhbnVwKCk7CiAKLSAgLy8g
UmVtb3ZlIGZyb20gbGlua2VkIGxpc3QKLSAgU3BpbkxvY2tIb2xkZXIgaCgmcGFnZWhlYXBfbG9j
ayk7Ci0gIGlmIChoZWFwLT5uZXh0XyAhPSBOVUxMKSBoZWFwLT5uZXh0Xy0+cHJldl8gPSBoZWFw
LT5wcmV2XzsKLSAgaWYgKGhlYXAtPnByZXZfICE9IE5VTEwpIGhlYXAtPnByZXZfLT5uZXh0XyA9
IGhlYXAtPm5leHRfOwotICBpZiAodGhyZWFkX2hlYXBzID09IGhlYXApIHRocmVhZF9oZWFwcyA9
IGhlYXAtPm5leHRfOwotICB0aHJlYWRfaGVhcF9jb3VudC0tOwotICBSZWNvbXB1dGVUaHJlYWRD
YWNoZVNpemUoKTsKKyAgICAvLyBSZW1vdmUgZnJvbSBsaW5rZWQgbGlzdAorICAgIFNwaW5Mb2Nr
SG9sZGVyIGgoJnBhZ2VoZWFwTG9jayk7CisgICAgaWYgKGhlYXAtPm5leHQpCisgICAgICAgIGhl
YXAtPm5leHQtPnByZXYgPSBoZWFwLT5wcmV2OworICAgIGlmIChoZWFwLT5wcmV2KQorICAgICAg
ICBoZWFwLT5wcmV2LT5uZXh0ID0gaGVhcC0+bmV4dDsKKyAgICBpZiAodGhyZWFkSGVhcHMgPT0g
aGVhcCkKKyAgICAgICAgdGhyZWFkSGVhcHMgPSBoZWFwLT5uZXh0OworICAgIHRocmVhZF9oZWFw
X2NvdW50LS07CisgICAgUmVjb21wdXRlVGhyZWFkQ2FjaGVTaXplKCk7CiAKLSAgdGhyZWFkaGVh
cF9hbGxvY2F0b3IuRGVsZXRlKGhlYXApOworICAgIHRocmVhZGhlYXBBbGxvY2F0b3IuRGVsZXRl
KGhlYXApOwogfQogCi12b2lkIFRDTWFsbG9jX1RocmVhZENhY2hlOjpSZWNvbXB1dGVUaHJlYWRD
YWNoZVNpemUoKSB7Ci0gIC8vIERpdmlkZSBhdmFpbGFibGUgc3BhY2UgYWNyb3NzIHRocmVhZHMK
LSAgaW50IG4gPSB0aHJlYWRfaGVhcF9jb3VudCA+IDAgPyB0aHJlYWRfaGVhcF9jb3VudCA6IDE7
Ci0gIHNpemVfdCBzcGFjZSA9IG92ZXJhbGxfdGhyZWFkX2NhY2hlX3NpemUgLyBuOwordm9pZCBU
Q01hbGxvY1RocmVhZENhY2hlOjpSZWNvbXB1dGVUaHJlYWRDYWNoZVNpemUoKQoreworICAgIC8v
IERpdmlkZSBhdmFpbGFibGUgc3BhY2UgYWNyb3NzIHRocmVhZHMKKyAgICBpbnQgbiA9IHRocmVh
ZF9oZWFwX2NvdW50ID4gMCA/IHRocmVhZF9oZWFwX2NvdW50IDogMTsKKyAgICBzaXplX3Qgc3Bh
Y2UgPSBvdmVyYWxsVGhyZWFkQ2FjaGVzaXplIC8gbjsKIAotICAvLyBMaW1pdCB0byBhbGxvd2Vk
IHJhbmdlCi0gIGlmIChzcGFjZSA8IGtNaW5UaHJlYWRDYWNoZVNpemUpIHNwYWNlID0ga01pblRo
cmVhZENhY2hlU2l6ZTsKLSAgaWYgKHNwYWNlID4ga01heFRocmVhZENhY2hlU2l6ZSkgc3BhY2Ug
PSBrTWF4VGhyZWFkQ2FjaGVTaXplOworICAgIC8vIExpbWl0IHRvIGFsbG93ZWQgcmFuZ2UKKyAg
ICBpZiAoc3BhY2UgPCBrTWluVGhyZWFkQ2FjaGVTaXplKQorICAgICAgICBzcGFjZSA9IGtNaW5U
aHJlYWRDYWNoZVNpemU7CisgICAgaWYgKHNwYWNlID4ga01heFRocmVhZENhY2hlU2l6ZSkKKyAg
ICAgICAgc3BhY2UgPSBrTWF4VGhyZWFkQ2FjaGVTaXplOwogCi0gIHBlcl90aHJlYWRfY2FjaGVf
c2l6ZSA9IHNwYWNlOworICAgIHBlclRocmVhZENhY2hlU2l6ZSA9IHNwYWNlOwogfQogCi12b2lk
IFRDTWFsbG9jX1RocmVhZENhY2hlOjpQcmludCgpIGNvbnN0IHsKLSAgZm9yIChzaXplX3QgY2wg
PSAwOyBjbCA8IGtOdW1DbGFzc2VzOyArK2NsKSB7Ci0gICAgTUVTU0FHRSgiICAgICAgJTUiIFBS
SXVTICIgOiAlNGQgbGVuOyAlNGQgbG9cbiIsCit2b2lkIFRDTWFsbG9jVGhyZWFkQ2FjaGU6OlBy
aW50KCkgY29uc3QKK3sKKyAgICBmb3IgKHNpemVfdCBjbCA9IDA7IGNsIDwga051bUNsYXNzZXM7
ICsrY2wpIHsKKyAgICAgICAgTUVTU0FHRSgiICAgICAgJTUiIFBSSXVTICIgOiAlNGQgbGVuOyAl
NGQgbG9cbiIsCiAgICAgICAgICAgICBCeXRlU2l6ZUZvckNsYXNzKGNsKSwKLSAgICAgICAgICAg
IGxpc3RfW2NsXS5sZW5ndGgoKSwKLSAgICAgICAgICAgIGxpc3RfW2NsXS5sb3d3YXRlcm1hcmso
KSk7Ci0gIH0KKyAgICAgICAgICAgIGxpc3RbY2xdLmxlbmd0aCgpLAorICAgICAgICAgICAgbGlz
dFtjbF0ubG93d2F0ZXJtYXJrKCkpOworICAgIH0KIH0KIAogLy8gRXh0cmFjdCBpbnRlcmVzdGlu
ZyBzdGF0cwogc3RydWN0IFRDTWFsbG9jU3RhdHMgewotICB1aW50NjRfdCBzeXN0ZW1fYnl0ZXM7
ICAgICAgICAvLyBCeXRlcyBhbGxvY2VkIGZyb20gc3lzdGVtCi0gIHVpbnQ2NF90IHRocmVhZF9i
eXRlczsgICAgICAgIC8vIEJ5dGVzIGluIHRocmVhZCBjYWNoZXMKLSAgdWludDY0X3QgY2VudHJh
bF9ieXRlczsgICAgICAgLy8gQnl0ZXMgaW4gY2VudHJhbCBjYWNoZQotICB1aW50NjRfdCB0cmFu
c2Zlcl9ieXRlczsgICAgICAvLyBCeXRlcyBpbiBjZW50cmFsIHRyYW5zZmVyIGNhY2hlCi0gIHVp
bnQ2NF90IHBhZ2VoZWFwX2J5dGVzOyAgICAgIC8vIEJ5dGVzIGluIHBhZ2UgaGVhcAotICB1aW50
NjRfdCBtZXRhZGF0YV9ieXRlczsgICAgICAvLyBCeXRlcyBhbGxvY2VkIGZvciBtZXRhZGF0YQor
ICAgIHVpbnQ2NF90IHN5c3RlbUJ5dGVzOyAvLyBCeXRlcyBhbGxvY2VkIGZyb20gc3lzdGVtCisg
ICAgdWludDY0X3QgdGhyZWFkQnl0ZXM7IC8vIEJ5dGVzIGluIHRocmVhZCBjYWNoZXMKKyAgICB1
aW50NjRfdCBjZW50cmFsQnl0ZXM7IC8vIEJ5dGVzIGluIGNlbnRyYWwgY2FjaGUKKyAgICB1aW50
NjRfdCB0cmFuc2ZlckJ5dGVzOyAvLyBCeXRlcyBpbiBjZW50cmFsIHRyYW5zZmVyIGNhY2hlCisg
ICAgdWludDY0X3QgcGFnZWhlYXBCeXRlczsgLy8gQnl0ZXMgaW4gcGFnZSBoZWFwCisgICAgdWlu
dDY0X3QgbWV0YWRhdGFCeXRlczsgLy8gQnl0ZXMgYWxsb2NlZCBmb3IgbWV0YWRhdGEKIH07CiAK
ICNpZm5kZWYgV1RGX0NIQU5HRVMKLS8vIEdldCBzdGF0cyBpbnRvICJyIi4gIEFsc28gZ2V0IHBl
ci1zaXplLWNsYXNzIGNvdW50cyBpZiBjbGFzc19jb3VudCAhPSBOVUxMCi1zdGF0aWMgdm9pZCBF
eHRyYWN0U3RhdHMoVENNYWxsb2NTdGF0cyogciwgdWludDY0X3QqIGNsYXNzX2NvdW50KSB7Ci0g
IHItPmNlbnRyYWxfYnl0ZXMgPSAwOwotICByLT50cmFuc2Zlcl9ieXRlcyA9IDA7Ci0gIGZvciAo
aW50IGNsID0gMDsgY2wgPCBrTnVtQ2xhc3NlczsgKytjbCkgewotICAgIGNvbnN0IGludCBsZW5n
dGggPSBjZW50cmFsX2NhY2hlW2NsXS5sZW5ndGgoKTsKLSAgICBjb25zdCBpbnQgdGNfbGVuZ3Ro
ID0gY2VudHJhbF9jYWNoZVtjbF0udGNfbGVuZ3RoKCk7Ci0gICAgci0+Y2VudHJhbF9ieXRlcyAr
PSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oQnl0ZVNpemVGb3JDbGFzcyhjbCkpICogbGVuZ3RoOwot
ICAgIHItPnRyYW5zZmVyX2J5dGVzICs9Ci0gICAgICBzdGF0aWNfY2FzdDx1aW50NjRfdD4oQnl0
ZVNpemVGb3JDbGFzcyhjbCkpICogdGNfbGVuZ3RoOwotICAgIGlmIChjbGFzc19jb3VudCkgY2xh
c3NfY291bnRbY2xdID0gbGVuZ3RoICsgdGNfbGVuZ3RoOwotICB9Ci0KLSAgLy8gQWRkIHN0YXRz
IGZyb20gcGVyLXRocmVhZCBoZWFwcwotICByLT50aHJlYWRfYnl0ZXMgPSAwOwotICB7IC8vIHNj
b3BlCi0gICAgU3BpbkxvY2tIb2xkZXIgaCgmcGFnZWhlYXBfbG9jayk7Ci0gICAgZm9yIChUQ01h
bGxvY19UaHJlYWRDYWNoZSogaCA9IHRocmVhZF9oZWFwczsgaCAhPSBOVUxMOyBoID0gaC0+bmV4
dF8pIHsKLSAgICAgIHItPnRocmVhZF9ieXRlcyArPSBoLT5TaXplKCk7Ci0gICAgICBpZiAoY2xh
c3NfY291bnQpIHsKLSAgICAgICAgZm9yIChzaXplX3QgY2wgPSAwOyBjbCA8IGtOdW1DbGFzc2Vz
OyArK2NsKSB7Ci0gICAgICAgICAgY2xhc3NfY291bnRbY2xdICs9IGgtPmZyZWVsaXN0X2xlbmd0
aChjbCk7CisvLyBHZXQgc3RhdHMgaW50byAiciIuIEFsc28gZ2V0IHBlci1zaXplLWNsYXNzIGNv
dW50cyBpZiBjbGFzc0NvdW50ICE9IDAKK3N0YXRpYyB2b2lkIEV4dHJhY3RTdGF0cyhUQ01hbGxv
Y1N0YXRzKiByLCB1aW50NjRfdCogY2xhc3NDb3VudCkKK3sKKyAgICByLT5jZW50cmFsQnl0ZXMg
PSAwOworICAgIHItPnRyYW5zZmVyQnl0ZXMgPSAwOworICAgIGZvciAoaW50IGNsID0gMDsgY2wg
PCBrTnVtQ2xhc3NlczsgKytjbCkgeworICAgICAgICBjb25zdCBpbnQgbGVuZ3RoID0gY2VudHJh
bENhY2hlW2NsXS5sZW5ndGgoKTsKKyAgICAgICAgY29uc3QgaW50IHRjTGVuZ3RoID0gY2VudHJh
bENhY2hlW2NsXS50Y0xlbmd0aCgpOworICAgICAgICByLT5jZW50cmFsQnl0ZXMgKz0gc3RhdGlj
X2Nhc3Q8dWludDY0X3Q+KEJ5dGVTaXplRm9yQ2xhc3MoY2wpKSAqIGxlbmd0aDsKKyAgICAgICAg
ci0+dHJhbnNmZXJCeXRlcyArPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oQnl0ZVNpemVGb3JDbGFz
cyhjbCkpICogdGNMZW5ndGg7CisgICAgICAgIGlmIChjbGFzc0NvdW50KQorICAgICAgICAgICAg
Y2xhc3NDb3VudFtjbF0gPSBsZW5ndGggKyB0Y0xlbmd0aDsKKyAgICB9CisKKyAgICAvLyBBZGQg
c3RhdHMgZnJvbSBwZXItdGhyZWFkIGhlYXBzCisgICAgci0+dGhyZWFkQnl0ZXMgPSAwOworICAg
IHsgLy8gc2NvcGUKKyAgICAgICAgU3BpbkxvY2tIb2xkZXIgaCgmcGFnZWhlYXBMb2NrKTsKKyAg
ICAgICAgZm9yIChUQ01hbGxvY1RocmVhZENhY2hlKiBoID0gdGhyZWFkSGVhcHM7IGg7IGggPSBo
LT5uZXh0KSB7CisgICAgICAgICAgICByLT50aHJlYWRCeXRlcyArPSBoLT5TaXplKCk7CisgICAg
ICAgICAgICBpZiAoY2xhc3NDb3VudCkKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBjbCA9
IDA7IGNsIDwga051bUNsYXNzZXM7ICsrY2wpCisgICAgICAgICAgICAgICAgICAgIGNsYXNzQ291
bnRbY2xdICs9IGgtPmZyZWVsaXN0bGVuZ3RoKGNsKTsKICAgICAgICAgfQotICAgICAgfQogICAg
IH0KLSAgfQogCi0gIHsgLy9zY29wZQotICAgIFNwaW5Mb2NrSG9sZGVyIGgoJnBhZ2VoZWFwX2xv
Y2spOwotICAgIHItPnN5c3RlbV9ieXRlcyA9IHBhZ2VoZWFwLT5TeXN0ZW1CeXRlcygpOwotICAg
IHItPm1ldGFkYXRhX2J5dGVzID0gbWV0YWRhdGFfc3lzdGVtX2J5dGVzOwotICAgIHItPnBhZ2Vo
ZWFwX2J5dGVzID0gcGFnZWhlYXAtPkZyZWVCeXRlcygpOwotICB9CisgICAgeyAvLyBzY29wZQor
ICAgICAgICBTcGluTG9ja0hvbGRlciBoKCZwYWdlaGVhcExvY2spOworICAgICAgICByLT5zeXN0
ZW1CeXRlcyA9IHBhZ2VoZWFwLT5TeXN0ZW1CeXRlcygpOworICAgICAgICByLT5tZXRhZGF0YUJ5
dGVzID0gbWV0YWRhdGFTeXN0ZW1CeXRlczsKKyAgICAgICAgci0+cGFnZWhlYXBCeXRlcyA9IHBh
Z2VoZWFwLT5GcmVlQnl0ZXMoKTsKKyAgICB9CiB9CiAjZW5kaWYKIAogI2lmbmRlZiBXVEZfQ0hB
TkdFUwogLy8gV1JJVEUgc3RhdHMgdG8gIm91dCIKIHN0YXRpYyB2b2lkIER1bXBTdGF0cyhUQ01h
bGxvY19QcmludGVyKiBvdXQsIGludCBsZXZlbCkgewotICBUQ01hbGxvY1N0YXRzIHN0YXRzOwot
ICB1aW50NjRfdCBjbGFzc19jb3VudFtrTnVtQ2xhc3Nlc107Ci0gIEV4dHJhY3RTdGF0cygmc3Rh
dHMsIChsZXZlbCA+PSAyID8gY2xhc3NfY291bnQgOiBOVUxMKSk7CisgICAgVENNYWxsb2NTdGF0
cyBzdGF0czsKKyAgICB1aW50NjRfdCBjbGFzc0NvdW50W2tOdW1DbGFzc2VzXTsKKyAgICBFeHRy
YWN0U3RhdHMoJnN0YXRzLCAobGV2ZWwgPj0gMiA/IGNsYXNzQ291bnQgOiAwKSk7CisKKyAgICBp
ZiAobGV2ZWwgPj0gMikgeworICAgICAgICBvdXQtPnByaW50ZigiLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKyAgICAgICAgdWludDY0X3QgY3Vt
dWxhdGl2ZSA9IDA7CisgICAgICAgIGZvciAoaW50IGNsID0gMDsgY2wgPCBrTnVtQ2xhc3Nlczsg
KytjbCkgeworICAgICAgICAgICAgaWYgKGNsYXNzQ291bnRbY2xdID4gMCkgeworICAgICAgICAg
ICAgICAgIHVpbnQ2NF90IGNsYXNzQnl0ZXMgPSBjbGFzc0NvdW50W2NsXSAqIEJ5dGVTaXplRm9y
Q2xhc3MoY2wpOworICAgICAgICAgICAgICAgIGN1bXVsYXRpdmUgKz0gY2xhc3NCeXRlczsKKyAg
ICAgICAgICAgICAgICBvdXQtPnByaW50ZigiY2xhc3MgJTNkIFsgJTgiIFBSSXVTICIgYnl0ZXMg
XSA6ICIKKyAgICAgICAgICAgICAgICAgICAgIiU4IiBQUkl1NjQgIiBvYmpzOyAlNS4xZiBNQjsg
JTUuMWYgY3VtIE1CXG4iLAorICAgICAgICAgICAgICAgICAgICBjbCwgQnl0ZVNpemVGb3JDbGFz
cyhjbCksCisgICAgICAgICAgICAgICAgICAgIGNsYXNzQ291bnRbY2xdLAorICAgICAgICAgICAg
ICAgICAgICBjbGFzc0J5dGVzIC8gMTA0ODU3Ni4wLAorICAgICAgICAgICAgICAgICAgICBjdW11
bGF0aXZlIC8gMTA0ODU3Ni4wKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogCi0gIGlmIChs
ZXZlbCA+PSAyKSB7Ci0gICAgb3V0LT5wcmludGYoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7Ci0gICAgdWludDY0X3QgY3VtdWxhdGl2ZSA9IDA7
Ci0gICAgZm9yIChpbnQgY2wgPSAwOyBjbCA8IGtOdW1DbGFzc2VzOyArK2NsKSB7Ci0gICAgICBp
ZiAoY2xhc3NfY291bnRbY2xdID4gMCkgewotICAgICAgICB1aW50NjRfdCBjbGFzc19ieXRlcyA9
IGNsYXNzX2NvdW50W2NsXSAqIEJ5dGVTaXplRm9yQ2xhc3MoY2wpOwotICAgICAgICBjdW11bGF0
aXZlICs9IGNsYXNzX2J5dGVzOwotICAgICAgICBvdXQtPnByaW50ZigiY2xhc3MgJTNkIFsgJTgi
IFBSSXVTICIgYnl0ZXMgXSA6ICIKLSAgICAgICAgICAgICAgICAiJTgiIFBSSXU2NCAiIG9ianM7
ICU1LjFmIE1COyAlNS4xZiBjdW0gTUJcbiIsCi0gICAgICAgICAgICAgICAgY2wsIEJ5dGVTaXpl
Rm9yQ2xhc3MoY2wpLAotICAgICAgICAgICAgICAgIGNsYXNzX2NvdW50W2NsXSwKLSAgICAgICAg
ICAgICAgICBjbGFzc19ieXRlcyAvIDEwNDg1NzYuMCwKLSAgICAgICAgICAgICAgICBjdW11bGF0
aXZlIC8gMTA0ODU3Ni4wKTsKLSAgICAgIH0KKyAgICAgICAgU3BpbkxvY2tIb2xkZXIgaCgmcGFn
ZWhlYXBMb2NrKTsKKyAgICAgICAgcGFnZWhlYXAtPkR1bXAob3V0KTsKICAgICB9CiAKLSAgICBT
cGluTG9ja0hvbGRlciBoKCZwYWdlaGVhcF9sb2NrKTsKLSAgICBwYWdlaGVhcC0+RHVtcChvdXQp
OwotICB9Ci0KLSAgY29uc3QgdWludDY0X3QgYnl0ZXNfaW5fdXNlID0gc3RhdHMuc3lzdGVtX2J5
dGVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gc3RhdHMucGFnZWhlYXBfYnl0
ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBzdGF0cy5jZW50cmFsX2J5dGVz
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gc3RhdHMudHJhbnNmZXJfYnl0ZXMK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBzdGF0cy50aHJlYWRfYnl0ZXM7Cisg
ICAgY29uc3QgdWludDY0X3QgYnl0ZXNJblVzZSA9IHN0YXRzLnN5c3RlbUJ5dGVzCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC0gc3RhdHMucGFnZWhlYXBCeXRlcworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAtIHN0YXRzLmNlbnRyYWxCeXRlcworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAtIHN0YXRzLnRyYW5zZmVyQnl0ZXMKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLSBzdGF0cy50aHJlYWRCeXRlczsKIAotICBvdXQtPnByaW50Zigi
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCisgICAg
b3V0LT5wcmludGYoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLVxuIgogICAgICAgICAgICAgICAiTUFMTE9DOiAlMTIiIFBSSXU2NCAiIEhlYXAgc2l6ZVxu
IgogICAgICAgICAgICAgICAiTUFMTE9DOiAlMTIiIFBSSXU2NCAiIEJ5dGVzIGluIHVzZSBieSBh
cHBsaWNhdGlvblxuIgogICAgICAgICAgICAgICAiTUFMTE9DOiAlMTIiIFBSSXU2NCAiIEJ5dGVz
IGZyZWUgaW4gcGFnZSBoZWFwXG4iCkBAIC0zMzc5LDE1ICszNDgzLDE1IEBAIHN0YXRpYyB2b2lk
IER1bXBTdGF0cyhUQ01hbGxvY19QcmludGVyKgogICAgICAgICAgICAgICAiTUFMTE9DOiAlMTIi
IFBSSXU2NCAiIFRocmVhZCBoZWFwcyBpbiB1c2VcbiIKICAgICAgICAgICAgICAgIk1BTExPQzog
JTEyIiBQUkl1NjQgIiBNZXRhZGF0YSBhbGxvY2F0ZWRcbiIKICAgICAgICAgICAgICAgIi0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIiwKLSAgICAgICAg
ICAgICAgc3RhdHMuc3lzdGVtX2J5dGVzLAotICAgICAgICAgICAgICBieXRlc19pbl91c2UsCi0g
ICAgICAgICAgICAgIHN0YXRzLnBhZ2VoZWFwX2J5dGVzLAotICAgICAgICAgICAgICBzdGF0cy5j
ZW50cmFsX2J5dGVzLAotICAgICAgICAgICAgICBzdGF0cy50cmFuc2Zlcl9ieXRlcywKLSAgICAg
ICAgICAgICAgc3RhdHMudGhyZWFkX2J5dGVzLAotICAgICAgICAgICAgICB1aW50NjRfdChzcGFu
X2FsbG9jYXRvci5pbnVzZSgpKSwKLSAgICAgICAgICAgICAgdWludDY0X3QodGhyZWFkaGVhcF9h
bGxvY2F0b3IuaW51c2UoKSksCi0gICAgICAgICAgICAgIHN0YXRzLm1ldGFkYXRhX2J5dGVzKTsK
KyAgICAgICAgICAgICAgc3RhdHMuc3lzdGVtQnl0ZXMsCisgICAgICAgICAgICAgIGJ5dGVzSW5V
c2UsCisgICAgICAgICAgICAgIHN0YXRzLnBhZ2VoZWFwQnl0ZXMsCisgICAgICAgICAgICAgIHN0
YXRzLmNlbnRyYWxCeXRlcywKKyAgICAgICAgICAgICAgc3RhdHMudHJhbnNmZXJCeXRlcywKKyAg
ICAgICAgICAgICAgc3RhdHMudGhyZWFkQnl0ZXMsCisgICAgICAgICAgICAgIHVpbnQ2NF90KHNw
YW5BbGxvY2F0b3IuaW51c2UoKSksCisgICAgICAgICAgICAgIHVpbnQ2NF90KHRocmVhZGhlYXBB
bGxvY2F0b3IuaW51c2UoKSksCisgICAgICAgICAgICAgIHN0YXRzLm1ldGFkYXRhQnl0ZXMpOwog
fQogCiBzdGF0aWMgdm9pZCBQcmludFN0YXRzKGludCBsZXZlbCkgewpAQCAtMzQwMCw0NSArMzUw
NCw0MyBAQCBzdGF0aWMgdm9pZCBQcmludFN0YXRzKGludCBsZXZlbCkgewogfQogCiBzdGF0aWMg
dm9pZCoqIER1bXBTdGFja1RyYWNlcygpIHsKLSAgLy8gQ291bnQgaG93IG11Y2ggc3BhY2Ugd2Ug
bmVlZAotICBpbnQgbmVlZGVkX3Nsb3RzID0gMDsKLSAgewotICAgIFNwaW5Mb2NrSG9sZGVyIGgo
JnBhZ2VoZWFwX2xvY2spOwotICAgIGZvciAoU3BhbiogcyA9IHNhbXBsZWRfb2JqZWN0cy5uZXh0
OyBzICE9ICZzYW1wbGVkX29iamVjdHM7IHMgPSBzLT5uZXh0KSB7Ci0gICAgICBTdGFja1RyYWNl
KiBzdGFjayA9IHJlaW50ZXJwcmV0X2Nhc3Q8U3RhY2tUcmFjZSo+KHMtPm9iamVjdHMpOwotICAg
ICAgbmVlZGVkX3Nsb3RzICs9IDMgKyBzdGFjay0+ZGVwdGg7CisgICAgLy8gQ291bnQgaG93IG11
Y2ggc3BhY2Ugd2UgbmVlZAorICAgIGludCBuZWVkZWRTbG90cyA9IDA7CisgICAgeworICAgICAg
ICBTcGluTG9ja0hvbGRlciBoKCZwYWdlaGVhcExvY2spOworICAgICAgICBmb3IgKFNwYW4qIHMg
PSBzYW1wbGVkT2JqZWN0cy5uZXh0OyBzICE9ICZzYW1wbGVkT2JqZWN0czsgcyA9IHMtPm5leHQp
IHsKKyAgICAgICAgICAgIFN0YWNrVHJhY2UqIHN0YWNrID0gcmVpbnRlcnByZXRfY2FzdDxTdGFj
a1RyYWNlKj4ocy0+b2JqZWN0cyk7CisgICAgICAgICAgICBuZWVkZWRTbG90cyArPSAzICsgc3Rh
Y2stPmRlcHRoOworICAgICAgICB9CisgICAgICAgIG5lZWRlZFNsb3RzICs9IDEwMDsgLy8gU2xv
cCBpbiBjYXNlIHNhbXBsZSBncm93cworICAgICAgICBuZWVkZWRTbG90cyArPSBuZWVkZWRTbG90
cyAvIDg7IC8vIEFuIGV4dHJhIDEyLjUlIHNsb3AKICAgICB9Ci0gICAgbmVlZGVkX3Nsb3RzICs9
IDEwMDsgICAgICAgICAgICAvLyBTbG9wIGluIGNhc2Ugc2FtcGxlIGdyb3dzCi0gICAgbmVlZGVk
X3Nsb3RzICs9IG5lZWRlZF9zbG90cy84OyAvLyBBbiBleHRyYSAxMi41JSBzbG9wCi0gIH0KIAot
ICB2b2lkKiogcmVzdWx0ID0gbmV3IHZvaWQqW25lZWRlZF9zbG90c107Ci0gIGlmIChyZXN1bHQg
PT0gTlVMTCkgewotICAgIE1FU1NBR0UoInRjbWFsbG9jOiBjb3VsZCBub3QgYWxsb2NhdGUgJWQg
c2xvdHMgZm9yIHN0YWNrIHRyYWNlc1xuIiwKLSAgICAgICAgICAgIG5lZWRlZF9zbG90cyk7Ci0g
ICAgcmV0dXJuIE5VTEw7Ci0gIH0KKyAgICB2b2lkKiogcmVzdWx0ID0gbmV3IHZvaWQqW25lZWRl
ZFNsb3RzXTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBNRVNTQUdFKCJ0Y21hbGxvYzog
Y291bGQgbm90IGFsbG9jYXRlICVkIHNsb3RzIGZvciBzdGFjayB0cmFjZXNcbiIsCisgICAgICAg
ICAgICBuZWVkZWRTbG90cyk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIFNwaW5M
b2NrSG9sZGVyIGgoJnBhZ2VoZWFwTG9jayk7CisgICAgaW50IHVzZWRTbG90cyA9IDA7CisgICAg
Zm9yIChTcGFuKiBzID0gc2FtcGxlZE9iamVjdHMubmV4dDsgcyAhPSAmc2FtcGxlZE9iamVjdHM7
IHMgPSBzLT5uZXh0KSB7CisgICAgICAgIEFTU0VSVCh1c2VkU2xvdHMgPCBuZWVkZWRTbG90cyk7
IC8vIE5lZWQgdG8gbGVhdmUgcm9vbSBmb3IgdGVybWluYXRvcgorICAgICAgICBTdGFja1RyYWNl
KiBzdGFjayA9IHJlaW50ZXJwcmV0X2Nhc3Q8U3RhY2tUcmFjZSo+KHMtPm9iamVjdHMpOworICAg
ICAgICBpZiAodXNlZFNsb3RzICsgMyArIHN0YWNrLT5kZXB0aCA+PSBuZWVkZWRTbG90cykKKyAg
ICAgICAgICAgIC8vIE5vIG1vcmUgcm9vbQorICAgICAgICAgICAgYnJlYWs7CiAKLSAgU3Bpbkxv
Y2tIb2xkZXIgaCgmcGFnZWhlYXBfbG9jayk7Ci0gIGludCB1c2VkX3Nsb3RzID0gMDsKLSAgZm9y
IChTcGFuKiBzID0gc2FtcGxlZF9vYmplY3RzLm5leHQ7IHMgIT0gJnNhbXBsZWRfb2JqZWN0czsg
cyA9IHMtPm5leHQpIHsKLSAgICBBU1NFUlQodXNlZF9zbG90cyA8IG5lZWRlZF9zbG90cyk7ICAv
LyBOZWVkIHRvIGxlYXZlIHJvb20gZm9yIHRlcm1pbmF0b3IKLSAgICBTdGFja1RyYWNlKiBzdGFj
ayA9IHJlaW50ZXJwcmV0X2Nhc3Q8U3RhY2tUcmFjZSo+KHMtPm9iamVjdHMpOwotICAgIGlmICh1
c2VkX3Nsb3RzICsgMyArIHN0YWNrLT5kZXB0aCA+PSBuZWVkZWRfc2xvdHMpIHsKLSAgICAgIC8v
IE5vIG1vcmUgcm9vbQotICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmVzdWx0W3VzZWRfc2xv
dHMrMF0gPSByZWludGVycHJldF9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEp
KTsKLSAgICByZXN1bHRbdXNlZF9zbG90cysxXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN0
YWNrLT5zaXplKTsKLSAgICByZXN1bHRbdXNlZF9zbG90cysyXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KHN0YWNrLT5kZXB0aCk7Ci0gICAgZm9yIChpbnQgZCA9IDA7IGQgPCBzdGFjay0+ZGVw
dGg7IGQrKykgewotICAgICAgcmVzdWx0W3VzZWRfc2xvdHMrMytkXSA9IHN0YWNrLT5zdGFja1tk
XTsKKyAgICAgICAgcmVzdWx0W3VzZWRTbG90cyswXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMSkpOworICAgICAgICByZXN1bHRbdXNlZFNsb3RzKzFd
ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc3RhY2stPnNpemUpOworICAgICAgICByZXN1bHRb
dXNlZFNsb3RzKzJdID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc3RhY2stPmRlcHRoKTsKKyAg
ICAgICAgZm9yIChpbnQgZCA9IDA7IGQgPCBzdGFjay0+ZGVwdGg7IGQrKykKKyAgICAgICAgICAg
IHJlc3VsdFt1c2VkU2xvdHMrMytkXSA9IHN0YWNrLT5zdGFja1tkXTsKKyAgICAgICAgdXNlZFNs
b3RzICs9IDMgKyBzdGFjay0+ZGVwdGg7CiAgICAgfQotICAgIHVzZWRfc2xvdHMgKz0gMyArIHN0
YWNrLT5kZXB0aDsKLSAgfQotICByZXN1bHRbdXNlZF9zbG90c10gPSByZWludGVycHJldF9jYXN0
PHZvaWQqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDApKTsKLSAgcmV0dXJuIHJlc3VsdDsKKyAg
ICByZXN1bHRbdXNlZFNsb3RzXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0
PHVpbnRwdHJfdD4oMCkpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAjZW5kaWYKIApAQCAtMzQ0
NiwxMDMgKzM1NDgsMTEwIEBAIHN0YXRpYyB2b2lkKiogRHVtcFN0YWNrVHJhY2VzKCkgewogCiAv
LyBUQ01hbGxvYydzIHN1cHBvcnQgZm9yIGV4dHJhIG1hbGxvYyBpbnRlcmZhY2VzCiBjbGFzcyBU
Q01hbGxvY0ltcGxlbWVudGF0aW9uIDogcHVibGljIE1hbGxvY0V4dGVuc2lvbiB7Ci0gcHVibGlj
OgotICB2aXJ0dWFsIHZvaWQgR2V0U3RhdHMoY2hhciogYnVmZmVyLCBpbnQgYnVmZmVyX2xlbmd0
aCkgewotICAgIEFTU0VSVChidWZmZXJfbGVuZ3RoID4gMCk7Ci0gICAgVENNYWxsb2NfUHJpbnRl
ciBwcmludGVyKGJ1ZmZlciwgYnVmZmVyX2xlbmd0aCk7Ci0KLSAgICAvLyBQcmludCBsZXZlbCBv
bmUgc3RhdHMgdW5sZXNzIGxvdHMgb2Ygc3BhY2UgaXMgYXZhaWxhYmxlCi0gICAgaWYgKGJ1ZmZl
cl9sZW5ndGggPCAxMDAwMCkgewotICAgICAgRHVtcFN0YXRzKCZwcmludGVyLCAxKTsKLSAgICB9
IGVsc2UgewotICAgICAgRHVtcFN0YXRzKCZwcmludGVyLCAyKTsKK3B1YmxpYzoKKyAgICB2aXJ0
dWFsIHZvaWQgR2V0U3RhdHMoY2hhciogYnVmZmVyLCBpbnQgYnVmZmVyTGVuZ3RoKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKGJ1ZmZlckxlbmd0aCA+IDApOworICAgICAgICBUQ01hbGxvY19Qcmlu
dGVyIHByaW50ZXIoYnVmZmVyLCBidWZmZXJMZW5ndGgpOworCisgICAgICAgIC8vIFByaW50IGxl
dmVsIG9uZSBzdGF0cyB1bmxlc3MgbG90cyBvZiBzcGFjZSBpcyBhdmFpbGFibGUKKyAgICAgICAg
aWYgKGJ1ZmZlckxlbmd0aCA8IDEwMDAwKQorICAgICAgICAgICAgRHVtcFN0YXRzKCZwcmludGVy
LCAxKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgRHVtcFN0YXRzKCZwcmludGVyLCAyKTsK
ICAgICB9Ci0gIH0KIAotICB2aXJ0dWFsIHZvaWQqKiBSZWFkU3RhY2tUcmFjZXMoKSB7Ci0gICAg
cmV0dXJuIER1bXBTdGFja1RyYWNlcygpOwotICB9CisgICAgdmlydHVhbCB2b2lkKiogUmVhZFN0
YWNrVHJhY2VzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBEdW1wU3RhY2tUcmFjZXMoKTsKKyAg
ICB9CiAKLSAgdmlydHVhbCBib29sIEdldE51bWVyaWNQcm9wZXJ0eShjb25zdCBjaGFyKiBuYW1l
LCBzaXplX3QqIHZhbHVlKSB7Ci0gICAgQVNTRVJUKG5hbWUgIT0gTlVMTCk7CisgICAgdmlydHVh
bCBib29sIEdldE51bWVyaWNQcm9wZXJ0eShjb25zdCBjaGFyKiBuYW1lLCBzaXplX3QqIHZhbHVl
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKG5hbWUpOwogCi0gICAgaWYgKHN0cmNtcChuYW1lLCAi
Z2VuZXJpYy5jdXJyZW50X2FsbG9jYXRlZF9ieXRlcyIpID09IDApIHsKLSAgICAgIFRDTWFsbG9j
U3RhdHMgc3RhdHM7Ci0gICAgICBFeHRyYWN0U3RhdHMoJnN0YXRzLCBOVUxMKTsKLSAgICAgICp2
YWx1ZSA9IHN0YXRzLnN5c3RlbV9ieXRlcwotICAgICAgICAgICAgICAgLSBzdGF0cy50aHJlYWRf
Ynl0ZXMKLSAgICAgICAgICAgICAgIC0gc3RhdHMuY2VudHJhbF9ieXRlcwotICAgICAgICAgICAg
ICAgLSBzdGF0cy5wYWdlaGVhcF9ieXRlczsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQot
ICAgIGlmIChzdHJjbXAobmFtZSwgImdlbmVyaWMuaGVhcF9zaXplIikgPT0gMCkgewotICAgICAg
VENNYWxsb2NTdGF0cyBzdGF0czsKLSAgICAgIEV4dHJhY3RTdGF0cygmc3RhdHMsIE5VTEwpOwot
ICAgICAgKnZhbHVlID0gc3RhdHMuc3lzdGVtX2J5dGVzOwotICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQotCi0gICAgaWYgKHN0cmNtcChuYW1lLCAidGNtYWxsb2Muc2xhY2tfYnl0ZXMiKSA9PSAw
KSB7Ci0gICAgICAvLyBXZSBhc3N1bWUgdGhhdCBieXRlcyBpbiB0aGUgcGFnZSBoZWFwIGFyZSBu
b3QgZnJhZ21lbnRlZCB0b28KLSAgICAgIC8vIGJhZGx5LCBhbmQgYXJlIHRoZXJlZm9yZSBhdmFp
bGFibGUgZm9yIGFsbG9jYXRpb24uCi0gICAgICBTcGluTG9ja0hvbGRlciBsKCZwYWdlaGVhcF9s
b2NrKTsKLSAgICAgICp2YWx1ZSA9IHBhZ2VoZWFwLT5GcmVlQnl0ZXMoKTsKLSAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLQotICAgIGlmIChzdHJjbXAobmFtZSwgInRjbWFsbG9jLm1heF90b3Rh
bF90aHJlYWRfY2FjaGVfYnl0ZXMiKSA9PSAwKSB7Ci0gICAgICBTcGluTG9ja0hvbGRlciBsKCZw
YWdlaGVhcF9sb2NrKTsKLSAgICAgICp2YWx1ZSA9IG92ZXJhbGxfdGhyZWFkX2NhY2hlX3NpemU7
Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoc3RyY21wKG5hbWUsICJ0Y21h
bGxvYy5jdXJyZW50X3RvdGFsX3RocmVhZF9jYWNoZV9ieXRlcyIpID09IDApIHsKLSAgICAgIFRD
TWFsbG9jU3RhdHMgc3RhdHM7Ci0gICAgICBFeHRyYWN0U3RhdHMoJnN0YXRzLCBOVUxMKTsKLSAg
ICAgICp2YWx1ZSA9IHN0YXRzLnRocmVhZF9ieXRlczsKLSAgICAgIHJldHVybiB0cnVlOwotICAg
IH0KKyAgICAgICAgaWYgKCFzdHJjbXAobmFtZSwgImdlbmVyaWMuY3VycmVudF9hbGxvY2F0ZWRf
Ynl0ZXMiKSkgeworICAgICAgICAgICAgVENNYWxsb2NTdGF0cyBzdGF0czsKKyAgICAgICAgICAg
IEV4dHJhY3RTdGF0cygmc3RhdHMsIDApOworICAgICAgICAgICAgKnZhbHVlID0gc3RhdHMuc3lz
dGVtQnl0ZXMKKyAgICAgICAgICAgICAgICAgICAgLSBzdGF0cy50aHJlYWRCeXRlcworICAgICAg
ICAgICAgICAgICAgICAtIHN0YXRzLmNlbnRyYWxCeXRlcworICAgICAgICAgICAgICAgICAgICAt
IHN0YXRzLnBhZ2VoZWFwQnl0ZXM7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
fQogCi0gICAgcmV0dXJuIGZhbHNlOwotICB9CisgICAgICAgIGlmICghc3RyY21wKG5hbWUsICJn
ZW5lcmljLmhlYXBzaXplIikpIHsKKyAgICAgICAgICAgIFRDTWFsbG9jU3RhdHMgc3RhdHM7Cisg
ICAgICAgICAgICBFeHRyYWN0U3RhdHMoJnN0YXRzLCAwKTsKKyAgICAgICAgICAgICp2YWx1ZSA9
IHN0YXRzLnN5c3RlbUJ5dGVzOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
KworICAgICAgICBpZiAoIXN0cmNtcChuYW1lLCAidGNtYWxsb2Muc2xhY2tfYnl0ZXMiKSkgewor
ICAgICAgICAgICAgLy8gV2UgYXNzdW1lIHRoYXQgYnl0ZXMgaW4gdGhlIHBhZ2UgaGVhcCBhcmUg
bm90IGZyYWdtZW50ZWQgdG9vCisgICAgICAgICAgICAvLyBiYWRseSwgYW5kIGFyZSB0aGVyZWZv
cmUgYXZhaWxhYmxlIGZvciBhbGxvY2F0aW9uLgorICAgICAgICAgICAgU3BpbkxvY2tIb2xkZXIg
bGwoJnBhZ2VoZWFwTG9jayk7CisgICAgICAgICAgICAqdmFsdWUgPSBwYWdlaGVhcC0+RnJlZUJ5
dGVzKCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
ICghc3RyY21wKG5hbWUsICJ0Y21hbGxvYy5tYXhfdG90YWxfdGhyZWFkX2NhY2hlX2J5dGVzIikp
IHsKKyAgICAgICAgICAgIFNwaW5Mb2NrSG9sZGVyIGxsKCZwYWdlaGVhcExvY2spOworICAgICAg
ICAgICAgKnZhbHVlID0gb3ZlcmFsbFRocmVhZENhY2hlc2l6ZTsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CiAKLSAgdmlydHVhbCBib29sIFNldE51bWVyaWNQcm9wZXJ0eShj
b25zdCBjaGFyKiBuYW1lLCBzaXplX3QgdmFsdWUpIHsKLSAgICBBU1NFUlQobmFtZSAhPSBOVUxM
KTsKKyAgICAgICAgaWYgKCFzdHJjbXAobmFtZSwgInRjbWFsbG9jLmN1cnJlbnRfdG90YWxfdGhy
ZWFkX2NhY2hlX2J5dGVzIikpIHsKKyAgICAgICAgICAgIFRDTWFsbG9jU3RhdHMgc3RhdHM7Cisg
ICAgICAgICAgICBFeHRyYWN0U3RhdHMoJnN0YXRzLCAwKTsKKyAgICAgICAgICAgICp2YWx1ZSA9
IHN0YXRzLnRocmVhZEJ5dGVzOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
IAotICAgIGlmIChzdHJjbXAobmFtZSwgInRjbWFsbG9jLm1heF90b3RhbF90aHJlYWRfY2FjaGVf
Ynl0ZXMiKSA9PSAwKSB7Ci0gICAgICAvLyBDbGlwIHRoZSB2YWx1ZSB0byBhIHJlYXNvbmFibGUg
cmFuZ2UKLSAgICAgIGlmICh2YWx1ZSA8IGtNaW5UaHJlYWRDYWNoZVNpemUpIHZhbHVlID0ga01p
blRocmVhZENhY2hlU2l6ZTsKLSAgICAgIGlmICh2YWx1ZSA+ICgxPDwzMCkpIHZhbHVlID0gKDE8
PDMwKTsgICAgIC8vIExpbWl0IHRvIDFHQgotCi0gICAgICBTcGluTG9ja0hvbGRlciBsKCZwYWdl
aGVhcF9sb2NrKTsKLSAgICAgIG92ZXJhbGxfdGhyZWFkX2NhY2hlX3NpemUgPSBzdGF0aWNfY2Fz
dDxzaXplX3Q+KHZhbHVlKTsKLSAgICAgIFRDTWFsbG9jX1RocmVhZENhY2hlOjpSZWNvbXB1dGVU
aHJlYWRDYWNoZVNpemUoKTsKLSAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogCi0gICAgcmV0dXJuIGZhbHNlOwotICB9CisgICAgdmlydHVhbCBib29sIFNl
dE51bWVyaWNQcm9wZXJ0eShjb25zdCBjaGFyKiBuYW1lLCBzaXplX3QgdmFsdWUpCisgICAgewor
ICAgICAgICBBU1NFUlQobmFtZSk7CiAKLSAgdmlydHVhbCB2b2lkIE1hcmtUaHJlYWRJZGxlKCkg
ewotICAgIFRDTWFsbG9jX1RocmVhZENhY2hlOjpCZWNvbWVJZGxlKCk7Ci0gIH0KKyAgICAgICAg
aWYgKCFzdHJjbXAobmFtZSwgInRjbWFsbG9jLm1heF90b3RhbF90aHJlYWRfY2FjaGVfYnl0ZXMi
KSkgeworICAgICAgICAgICAgLy8gQ2xpcCB0aGUgdmFsdWUgdG8gYSByZWFzb25hYmxlIHJhbmdl
CisgICAgICAgICAgICBpZiAodmFsdWUgPCBrTWluVGhyZWFkQ2FjaGVTaXplKQorICAgICAgICAg
ICAgICAgIHZhbHVlID0ga01pblRocmVhZENhY2hlU2l6ZTsKKyAgICAgICAgICAgIGlmICh2YWx1
ZSA+ICgxIDw8IDMwKSkKKyAgICAgICAgICAgICAgICB2YWx1ZSA9ICgxIDw8IDMwKTsgLy8gTGlt
aXQgdG8gMUdCCisKKyAgICAgICAgICAgIFNwaW5Mb2NrSG9sZGVyIGxsKCZwYWdlaGVhcExvY2sp
OworICAgICAgICAgICAgb3ZlcmFsbFRocmVhZENhY2hlc2l6ZSA9IHN0YXRpY19jYXN0PHNpemVf
dD4odmFsdWUpOworICAgICAgICAgICAgVENNYWxsb2NUaHJlYWRDYWNoZTo6UmVjb21wdXRlVGhy
ZWFkQ2FjaGVTaXplKCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQogCi0g
IHZpcnR1YWwgdm9pZCBSZWxlYXNlRnJlZU1lbW9yeSgpIHsKLSAgICBTcGluTG9ja0hvbGRlciBo
KCZwYWdlaGVhcF9sb2NrKTsKLSAgICBwYWdlaGVhcC0+UmVsZWFzZUZyZWVQYWdlcygpOwotICB9
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgTWFya1Ro
cmVhZElkbGUoKQorICAgIHsKKyAgICAgICAgVENNYWxsb2NUaHJlYWRDYWNoZTo6QmVjb21lSWRs
ZSgpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBSZWxlYXNlRnJlZU1lbW9yeSgpCisgICAg
eworICAgICAgICBTcGluTG9ja0hvbGRlciBoKCZwYWdlaGVhcExvY2spOworICAgICAgICBwYWdl
aGVhcC0+UmVsZWFzZUZyZWVQYWdlcygpOworICAgIH0KIH07CiAjZW5kaWYKIAogLy8gVGhlIGNv
bnN0cnVjdG9yIGFsbG9jYXRlcyBhbiBvYmplY3QgdG8gZW5zdXJlIHRoYXQgaW5pdGlhbGl6YXRp
b24KIC8vIHJ1bnMgYmVmb3JlIG1haW4oKSwgYW5kIHRoZXJlZm9yZSB3ZSBkbyBub3QgaGF2ZSBh
IGNoYW5jZSB0byBiZWNvbWUKLS8vIG11bHRpLXRocmVhZGVkIGJlZm9yZSBpbml0aWFsaXphdGlv
bi4gIFdlIGFsc28gY3JlYXRlIHRoZSBUU0Qga2V5Ci0vLyBoZXJlLiAgUHJlc3VtYWJseSBieSB0
aGUgdGltZSB0aGlzIGNvbnN0cnVjdG9yIHJ1bnMsIGdsaWJjIGlzIGluCisvLyBtdWx0aS10aHJl
YWRlZCBiZWZvcmUgaW5pdGlhbGl6YXRpb24uIFdlIGFsc28gY3JlYXRlIHRoZSBUU0Qga2V5Cisv
LyBoZXJlLiBQcmVzdW1hYmx5IGJ5IHRoZSB0aW1lIHRoaXMgY29uc3RydWN0b3IgcnVucywgZ2xp
YmMgaXMgaW4KIC8vIGdvb2QgZW5vdWdoIHNoYXBlIHRvIGhhbmRsZSBwdGhyZWFkX2tleV9jcmVh
dGUoKS4KIC8vCiAvLyBUaGUgY29uc3RydWN0b3IgYWxzbyB0YWtlcyB0aGUgb3Bwb3J0dW5pdHkg
dG8gdGVsbCBTVEwgdG8gdXNlCi0vLyB0Y21hbGxvYy4gIFdlIHdhbnQgdG8gZG8gdGhpcyBlYXJs
eSwgYmVmb3JlIGNvbnN0cnVjdCB0aW1lLCBzbworLy8gdGNtYWxsb2MuIFdlIHdhbnQgdG8gZG8g
dGhpcyBlYXJseSwgYmVmb3JlIGNvbnN0cnVjdCB0aW1lLCBzbwogLy8gYWxsIHVzZXIgU1RMIGFs
bG9jYXRpb25zIGdvIHRocm91Z2ggdGNtYWxsb2MgKHdoaWNoIHdvcmtzIHJlYWxseQogLy8gd2Vs
bCBmb3IgU1RMKS4KIC8vCkBAIC0zNTYxLDcgKzM2NzAsNyBAQCBjbGFzcyBUQ01hbGxvY0d1YXJk
IHsKICNlbmRpZgogI2VuZGlmCiAgICAgZnJlZShtYWxsb2MoMSkpOwotICAgIFRDTWFsbG9jX1Ro
cmVhZENhY2hlOjpJbml0VFNEKCk7CisgICAgVENNYWxsb2NUaHJlYWRDYWNoZTo6SW5pdFRTRCgp
OwogICAgIGZyZWUobWFsbG9jKDEpKTsKICNpZm5kZWYgV1RGX0NIQU5HRVMKICAgICBNYWxsb2NF
eHRlbnNpb246OlJlZ2lzdGVyKG5ldyBUQ01hbGxvY0ltcGxlbWVudGF0aW9uKTsKQEAgLTM1NzEs
NyArMzY4MCw3IEBAIGNsYXNzIFRDTWFsbG9jR3VhcmQgewogI2lmbmRlZiBXVEZfQ0hBTkdFUwog
ICB+VENNYWxsb2NHdWFyZCgpIHsKICAgICBjb25zdCBjaGFyKiBlbnYgPSBnZXRlbnYoIk1BTExP
Q1NUQVRTIik7Ci0gICAgaWYgKGVudiAhPSBOVUxMKSB7CisgICAgaWYgKGVudikgewogICAgICAg
aW50IGxldmVsID0gYXRvaShlbnYpOwogICAgICAgaWYgKGxldmVsIDwgMSkgbGV2ZWwgPSAxOwog
ICAgICAgUHJpbnRTdGF0cyhsZXZlbCk7CkBAIC0zNTk0LDMzICszNzAzLDMyIEBAIHN0YXRpYyBU
Q01hbGxvY0d1YXJkIG1vZHVsZV9lbnRlcl9leGl0X2gKIAogI2lmbmRlZiBXVEZfQ0hBTkdFUwog
Ci1zdGF0aWMgU3BhbiogRG9TYW1wbGVkQWxsb2NhdGlvbihzaXplX3Qgc2l6ZSkgewotCi0gIC8v
IEdyYWIgdGhlIHN0YWNrIHRyYWNlIG91dHNpZGUgdGhlIGhlYXAgbG9jawotICBTdGFja1RyYWNl
IHRtcDsKLSAgdG1wLmRlcHRoID0gR2V0U3RhY2tUcmFjZSh0bXAuc3RhY2ssIGtNYXhTdGFja0Rl
cHRoLCAxKTsKLSAgdG1wLnNpemUgPSBzaXplOwotCi0gIFNwaW5Mb2NrSG9sZGVyIGgoJnBhZ2Vo
ZWFwX2xvY2spOwotICAvLyBBbGxvY2F0ZSBzcGFuCi0gIFNwYW4gKnNwYW4gPSBwYWdlaGVhcC0+
TmV3KHBhZ2VzKHNpemUgPT0gMCA/IDEgOiBzaXplKSk7Ci0gIGlmIChzcGFuID09IE5VTEwpIHsK
LSAgICByZXR1cm4gTlVMTDsKLSAgfQorc3RhdGljIFNwYW4qIERvU2FtcGxlZEFsbG9jYXRpb24o
c2l6ZV90IHNpemUpCit7CiAKLSAgLy8gQWxsb2NhdGUgc3RhY2sgdHJhY2UKLSAgU3RhY2tUcmFj
ZSAqc3RhY2sgPSBzdGFja3RyYWNlX2FsbG9jYXRvci5OZXcoKTsKLSAgaWYgKHN0YWNrID09IE5V
TEwpIHsKLSAgICAvLyBTYW1wbGluZyBmYWlsZWQgYmVjYXVzZSBvZiBsYWNrIG9mIG1lbW9yeQot
ICAgIHJldHVybiBzcGFuOwotICB9CisgICAgLy8gR3JhYiB0aGUgc3RhY2sgdHJhY2Ugb3V0c2lk
ZSB0aGUgaGVhcCBsb2NrCisgICAgU3RhY2tUcmFjZSB0bXA7CisgICAgdG1wLmRlcHRoID0gR2V0
U3RhY2tUcmFjZSh0bXAuc3RhY2ssIGtNYXhTdGFja0RlcHRoLCAxKTsKKyAgICB0bXAuc2l6ZSA9
IHNpemU7CisKKyAgICBTcGluTG9ja0hvbGRlciBoKCZwYWdlaGVhcExvY2spOworICAgIC8vIEFs
bG9jYXRlIHNwYW4KKyAgICBTcGFuKiBzcGFuID0gcGFnZWhlYXAtPk5ldyhwYWdlcyghc2l6ZSA/
IDEgOiBzaXplKSk7CisgICAgaWYgKCFzcGFuKQorICAgICAgICByZXR1cm4gMDsKIAotICAqc3Rh
Y2sgPSB0bXA7Ci0gIHNwYW4tPnNhbXBsZSA9IDE7Ci0gIHNwYW4tPm9iamVjdHMgPSBzdGFjazsK
LSAgRExMX1ByZXBlbmQoJnNhbXBsZWRfb2JqZWN0cywgc3Bhbik7CisgICAgLy8gQWxsb2NhdGUg
c3RhY2sgdHJhY2UKKyAgICBTdGFja1RyYWNlKiBzdGFjayA9IHN0YWNrdHJhY2VfYWxsb2NhdG9y
Lk5ldygpOworICAgIGlmICghc3RhY2spCisgICAgICAgIC8vIFNhbXBsaW5nIGZhaWxlZCBiZWNh
dXNlIG9mIGxhY2sgb2YgbWVtb3J5CisgICAgICAgIHJldHVybiBzcGFuOworCisgICAgKnN0YWNr
ID0gdG1wOworICAgIHNwYW4tPnNhbXBsZSA9IDE7CisgICAgc3Bhbi0+b2JqZWN0cyA9IHN0YWNr
OworICAgIERMTFByZXBlbmQoJnNhbXBsZWRPYmplY3RzLCBzcGFuKTsKIAotICByZXR1cm4gc3Bh
bjsKKyAgICByZXR1cm4gc3BhbjsKIH0KICNlbmRpZgogCkBAIC0zNjM3LDcgKzM3NDUsOCBAQCBz
dGF0aWMgaW5saW5lIHZvaWQqIENoZWNrZWRNYWxsb2NSZXN1bHQoCiAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCogU3BhblRvTWFsbG9jUmVzdWx0KFNwYW4gKnNwYW4p
IHsKK3N0YXRpYyBpbmxpbmUgdm9pZCogU3BhblRvTWFsbG9jUmVzdWx0KFNwYW4qIHNwYW4pCit7
CiAgIEFTU0VSVF9TUEFOX0NPTU1JVFRFRChzcGFuKTsKICAgcGFnZWhlYXAtPkNhY2hlU2l6ZUNs
YXNzKHNwYW4tPnN0YXJ0LCAwKTsKICAgcmV0dXJuCkBAIC0zNjQ3LDQ3ICszNzU2LDQ1IEBAIHN0
YXRpYyBpbmxpbmUgdm9pZCogU3BhblRvTWFsbG9jUmVzdWx0KFMKICNpZmRlZiBXVEZfQ0hBTkdF
UwogdGVtcGxhdGUgPGJvb2wgY3Jhc2hPbkZhaWx1cmU+CiAjZW5kaWYKLXN0YXRpYyBBTFdBWVNf
SU5MSU5FIHZvaWQqIGRvX21hbGxvYyhzaXplX3Qgc2l6ZSkgewotICB2b2lkKiByZXQgPSBOVUxM
Oworc3RhdGljIEFMV0FZU19JTkxJTkUgdm9pZCogZG9NYWxsb2Moc2l6ZV90IHNpemUpCit7Cisg
ICAgdm9pZCogcmV0ID0gMDsKIAogI2lmZGVmIFdURl9DSEFOR0VTCiAgICAgQVNTRVJUKCFpc0Zv
cmJpZGRlbigpKTsKICNlbmRpZgogCi0gIC8vIFRoZSBmb2xsb3dpbmcgY2FsbCBmb3JjZXMgbW9k
dWxlIGluaXRpYWxpemF0aW9uCi0gIFRDTWFsbG9jX1RocmVhZENhY2hlKiBoZWFwID0gVENNYWxs
b2NfVGhyZWFkQ2FjaGU6OkdldENhY2hlKCk7CisgICAgLy8gVGhlIGZvbGxvd2luZyBjYWxsIGZv
cmNlcyBtb2R1bGUgaW5pdGlhbGl6YXRpb24KKyAgICBUQ01hbGxvY1RocmVhZENhY2hlKiBoZWFw
ID0gVENNYWxsb2NUaHJlYWRDYWNoZTo6R2V0Q2FjaGUoKTsKICNpZm5kZWYgV1RGX0NIQU5HRVMK
LSAgaWYgKChGTEFHU190Y21hbGxvY19zYW1wbGVfcGFyYW1ldGVyID4gMCkgJiYgaGVhcC0+U2Ft
cGxlQWxsb2NhdGlvbihzaXplKSkgewotICAgIFNwYW4qIHNwYW4gPSBEb1NhbXBsZWRBbGxvY2F0
aW9uKHNpemUpOwotICAgIGlmIChzcGFuICE9IE5VTEwpIHsKLSAgICAgIHJldCA9IFNwYW5Ub01h
bGxvY1Jlc3VsdChzcGFuKTsKLSAgICB9Ci0gIH0gZWxzZQotI2VuZGlmCi0gIGlmIChzaXplID4g
a01heFNpemUpIHsKLSAgICAvLyBVc2UgcGFnZS1sZXZlbCBhbGxvY2F0b3IKLSAgICBTcGluTG9j
a0hvbGRlciBoKCZwYWdlaGVhcF9sb2NrKTsKLSAgICBTcGFuKiBzcGFuID0gcGFnZWhlYXAtPk5l
dyhwYWdlcyhzaXplKSk7Ci0gICAgaWYgKHNwYW4gIT0gTlVMTCkgewotICAgICAgcmV0ID0gU3Bh
blRvTWFsbG9jUmVzdWx0KHNwYW4pOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICAvLyBUaGUgY29t
bW9uIGNhc2UsIGFuZCBhbHNvIHRoZSBzaW1wbGVzdC4gIFRoaXMganVzdCBwb3BzIHRoZQotICAg
IC8vIHNpemUtYXBwcm9wcmlhdGUgZnJlZWxpc3QsIGFmZXIgcmVwbGVuaXNoaW5nIGl0IGlmIGl0
J3MgZW1wdHkuCi0gICAgcmV0ID0gQ2hlY2tlZE1hbGxvY1Jlc3VsdChoZWFwLT5BbGxvY2F0ZShz
aXplKSk7Ci0gIH0KLSAgaWYgKCFyZXQpIHsKKyAgICBpZiAoKEZMQUdTX3RjbWFsbG9jX3NhbXBs
ZV9wYXJhbWV0ZXIgPiAwKSAmJiBoZWFwLT5TYW1wbGVBbGxvY2F0aW9uKHNpemUpKSB7CisgICAg
ICAgIFNwYW4qIHNwYW4gPSBEb1NhbXBsZWRBbGxvY2F0aW9uKHNpemUpOworICAgICAgICBpZiAo
c3BhbikKKyAgICAgICAgICAgIHJldCA9IFNwYW5Ub01hbGxvY1Jlc3VsdChzcGFuKTsKKyAgICB9
IGVsc2UKKyNlbmRpZgorICAgIGlmIChzaXplID4ga01heFNpemUpIHsKKyAgICAgICAgLy8gVXNl
IHBhZ2UtbGV2ZWwgYWxsb2NhdG9yCisgICAgICAgIFNwaW5Mb2NrSG9sZGVyIGgoJnBhZ2VoZWFw
TG9jayk7CisgICAgICAgIFNwYW4qIHNwYW4gPSBwYWdlaGVhcC0+TmV3KHBhZ2VzKHNpemUpKTsK
KyAgICAgICAgaWYgKHNwYW4pCisgICAgICAgICAgICByZXQgPSBTcGFuVG9NYWxsb2NSZXN1bHQo
c3Bhbik7CisgICAgfSBlbHNlCisgICAgICAgIC8vIFRoZSBjb21tb24gY2FzZSwgYW5kIGFsc28g
dGhlIHNpbXBsZXN0LiBUaGlzIGp1c3QgcG9wcyB0aGUKKyAgICAgICAgLy8gc2l6ZS1hcHByb3By
aWF0ZSBmcmVlbGlzdCwgYWZlciByZXBsZW5pc2hpbmcgaXQgaWYgaXQncyBlbXB0eS4KKyAgICAg
ICAgcmV0ID0gQ2hlY2tlZE1hbGxvY1Jlc3VsdChoZWFwLT5BbGxvY2F0ZShzaXplKSk7CisgICAg
aWYgKCFyZXQpCiAjaWZkZWYgV1RGX0NIQU5HRVMKLSAgICBpZiAoY3Jhc2hPbkZhaWx1cmUpIC8v
IFRoaXMgYnJhbmNoIHNob3VsZCBiZSBvcHRpbWl6ZWQgb3V0IGJ5IHRoZSBjb21waWxlci4KLSAg
ICAgICAgQ1JBU0goKTsKKyAgICAgICAgaWYgKGNyYXNoT25GYWlsdXJlKSAvLyBUaGlzIGJyYW5j
aCBzaG91bGQgYmUgb3B0aW1pemVkIG91dCBieSB0aGUgY29tcGlsZXIuCisgICAgICAgICAgICBD
UkFTSCgpOwogI2Vsc2UKLSAgICBlcnJubyA9IEVOT01FTTsKKyAgICAgICAgZXJybm8gPSBFTk9N
RU07CiAjZW5kaWYKLSAgfQotICByZXR1cm4gcmV0OworICAgIHJldHVybiByZXQ7CiB9CiAKLXN0
YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQgZG9fZnJlZSh2b2lkKiBwdHIpIHsKK3N0YXRpYyBBTFdB
WVNfSU5MSU5FIHZvaWQgZG9GcmVlKHZvaWQqIHB0cikKK3sKICAgaWYgKHB0ciA9PSBOVUxMKSBy
ZXR1cm47CiAgIEFTU0VSVChwYWdlaGVhcCAhPSBOVUxMKTsgIC8vIFNob3VsZCBub3QgY2FsbCBm
cmVlKCkgYmVmb3JlIG1hbGxvYygpCiAgIGNvbnN0IFBhZ2VJRCBwID0gcmVpbnRlcnByZXRfY2Fz
dDx1aW50cHRyX3Q+KHB0cikgPj4ga1BhZ2VTaGlmdDsKQEAgLTM3MDMsMjEgKzM4MTAsMjEgQEAg
c3RhdGljIEFMV0FZU19JTkxJTkUgdm9pZCBkb19mcmVlKHZvaWQqCiAjaWZuZGVmIE5PX1RDTUFM
TE9DX1NBTVBMRVMKICAgICBBU1NFUlQoIXBhZ2VoZWFwLT5HZXREZXNjcmlwdG9yKHApLT5zYW1w
bGUpOwogI2VuZGlmCi0gICAgVENNYWxsb2NfVGhyZWFkQ2FjaGUqIGhlYXAgPSBUQ01hbGxvY19U
aHJlYWRDYWNoZTo6R2V0Q2FjaGVJZlByZXNlbnQoKTsKKyAgICBUQ01hbGxvY1RocmVhZENhY2hl
KiBoZWFwID0gVENNYWxsb2NUaHJlYWRDYWNoZTo6R2V0Q2FjaGVJZlByZXNlbnQoKTsKICAgICBp
ZiAoaGVhcCAhPSBOVUxMKSB7CiAgICAgICBoZWFwLT5EZWFsbG9jYXRlKHB0ciwgY2wpOwogICAg
IH0gZWxzZSB7CiAgICAgICAvLyBEZWxldGUgZGlyZWN0bHkgaW50byBjZW50cmFsIGNhY2hlCi0g
ICAgICBTTExfU2V0TmV4dChwdHIsIE5VTEwpOwotICAgICAgY2VudHJhbF9jYWNoZVtjbF0uSW5z
ZXJ0UmFuZ2UocHRyLCBwdHIsIDEpOworICAgICAgU0xMU2V0TmV4dChwdHIsIDApOworICAgICAg
Y2VudHJhbENhY2hlW2NsXS5JbnNlcnRSYW5nZShwdHIsIHB0ciwgMSk7CiAgICAgfQogICB9IGVs
c2UgewotICAgIFNwaW5Mb2NrSG9sZGVyIGgoJnBhZ2VoZWFwX2xvY2spOworICAgIFNwaW5Mb2Nr
SG9sZGVyIGgoJnBhZ2VoZWFwTG9jayk7CiAgICAgQVNTRVJUKHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dHB0cl90PihwdHIpICUga1BhZ2VTaXplID09IDApOwogICAgIEFTU0VSVChzcGFuICE9IE5VTEwg
JiYgc3Bhbi0+c3RhcnQgPT0gcCk7CiAjaWZuZGVmIE5PX1RDTUFMTE9DX1NBTVBMRVMKICAgICBp
ZiAoc3Bhbi0+c2FtcGxlKSB7Ci0gICAgICBETExfUmVtb3ZlKHNwYW4pOworICAgICAgRExMUmVt
b3ZlKHNwYW4pOwogICAgICAgc3RhY2t0cmFjZV9hbGxvY2F0b3IuRGVsZXRlKHJlaW50ZXJwcmV0
X2Nhc3Q8U3RhY2tUcmFjZSo+KHNwYW4tPm9iamVjdHMpKTsKICAgICAgIHNwYW4tPm9iamVjdHMg
PSBOVUxMOwogICAgIH0KQEAgLTM3MzEsMTA4ICszODM4LDExMyBAQCBzdGF0aWMgQUxXQVlTX0lO
TElORSB2b2lkIGRvX2ZyZWUodm9pZCoKIC8vCiAvLyBOb3RlOiB0aGlzIGNvZGUgY2FuIGJlIHNs
b3csIGFuZCBjYW4gc2lnbmlmaWNhbnRseSBmcmFnbWVudCBtZW1vcnkuCiAvLyBUaGUgZXhwZWN0
YXRpb24gaXMgdGhhdCBtZW1hbGlnbi9wb3NpeF9tZW1hbGlnbi92YWxsb2MvcHZhbGxvYyB3aWxs
Ci0vLyBub3QgYmUgaW52b2tlZCB2ZXJ5IG9mdGVuLiAgVGhpcyByZXF1aXJlbWVudCBzaW1wbGlm
aWVzIG91cgorLy8gbm90IGJlIGludm9rZWQgdmVyeSBvZnRlbi4gVGhpcyByZXF1aXJlbWVudCBz
aW1wbGlmaWVzIG91cgogLy8gaW1wbGVtZW50YXRpb24gYW5kIGFsbG93cyB1cyB0byB0dW5lIGZv
ciBleHBlY3RlZCBhbGxvY2F0aW9uCiAvLyBwYXR0ZXJucy4KLXN0YXRpYyB2b2lkKiBkb19tZW1h
bGlnbihzaXplX3QgYWxpZ24sIHNpemVfdCBzaXplKSB7Ci0gIEFTU0VSVCgoYWxpZ24gJiAoYWxp
Z24gLSAxKSkgPT0gMCk7Ci0gIEFTU0VSVChhbGlnbiA+IDApOwotICBpZiAocGFnZWhlYXAgPT0g
TlVMTCkgVENNYWxsb2NfVGhyZWFkQ2FjaGU6OkluaXRNb2R1bGUoKTsKLQotICAvLyBBbGxvY2F0
ZSBhdCBsZWFzdCBvbmUgYnl0ZSB0byBhdm9pZCBib3VuZGFyeSBjb25kaXRpb25zIGJlbG93Ci0g
IGlmIChzaXplID09IDApIHNpemUgPSAxOwotCi0gIGlmIChzaXplIDw9IGtNYXhTaXplICYmIGFs
aWduIDwga1BhZ2VTaXplKSB7Ci0gICAgLy8gU2VhcmNoIHRocm91Z2ggYWNjZXB0YWJsZSBzaXpl
IGNsYXNzZXMgbG9va2luZyBmb3Igb25lIHdpdGgKLSAgICAvLyBlbm91Z2ggYWxpZ25tZW50LiAg
VGhpcyBkZXBlbmRzIG9uIHRoZSBmYWN0IHRoYXQKLSAgICAvLyBJbml0U2l6ZUNsYXNzZXMoKSBj
dXJyZW50bHkgcHJvZHVjZXMgc2V2ZXJhbCBzaXplIGNsYXNzZXMgdGhhdAotICAgIC8vIGFyZSBh
bGlnbmVkIGF0IHBvd2VycyBvZiB0d28uICBXZSB3aWxsIHdhc3RlIHRpbWUgYW5kIHNwYWNlIGlm
Ci0gICAgLy8gd2UgbWlzcyBpbiB0aGUgc2l6ZSBjbGFzcyBhcnJheSwgYnV0IHRoYXQgaXMgZGVl
bWVkIGFjY2VwdGFibGUKLSAgICAvLyBzaW5jZSBtZW1hbGlnbigpIHNob3VsZCBiZSB1c2VkIHJh
cmVseS4KLSAgICBzaXplX3QgY2wgPSBTaXplQ2xhc3Moc2l6ZSk7Ci0gICAgd2hpbGUgKGNsIDwg
a051bUNsYXNzZXMgJiYgKChjbGFzc190b19zaXplW2NsXSAmIChhbGlnbiAtIDEpKSAhPSAwKSkg
ewotICAgICAgY2wrKzsKLSAgICB9Ci0gICAgaWYgKGNsIDwga051bUNsYXNzZXMpIHsKLSAgICAg
IFRDTWFsbG9jX1RocmVhZENhY2hlKiBoZWFwID0gVENNYWxsb2NfVGhyZWFkQ2FjaGU6OkdldENh
Y2hlKCk7Ci0gICAgICByZXR1cm4gQ2hlY2tlZE1hbGxvY1Jlc3VsdChoZWFwLT5BbGxvY2F0ZShj
bGFzc190b19zaXplW2NsXSkpOworc3RhdGljIHZvaWQqIGRvTWVtYWxpZ24oc2l6ZV90IGFsaWdu
LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBBU1NFUlQoIShhbGlnbiAmIChhbGlnbiAtIDEpKSk7Cisg
ICAgQVNTRVJUKGFsaWduID4gMCk7CisgICAgaWYgKCFwYWdlaGVhcCkKKyAgICAgICAgVENNYWxs
b2NUaHJlYWRDYWNoZTo6SW5pdE1vZHVsZSgpOworCisgICAgLy8gQWxsb2NhdGUgYXQgbGVhc3Qg
b25lIGJ5dGUgdG8gYXZvaWQgYm91bmRhcnkgY29uZGl0aW9ucyBiZWxvdworICAgIGlmICghc2l6
ZSkKKyAgICAgICAgc2l6ZSA9IDE7CisKKyAgICBpZiAoc2l6ZSA8PSBrTWF4U2l6ZSAmJiBhbGln
biA8IGtQYWdlU2l6ZSkgeworICAgICAgICAvLyBTZWFyY2ggdGhyb3VnaCBhY2NlcHRhYmxlIHNp
emUgY2xhc3NlcyBsb29raW5nIGZvciBvbmUgd2l0aAorICAgICAgICAvLyBlbm91Z2ggYWxpZ25t
ZW50LiBUaGlzIGRlcGVuZHMgb24gdGhlIGZhY3QgdGhhdAorICAgICAgICAvLyBJbml0U2l6ZUNs
YXNzZXMoKSBjdXJyZW50bHkgcHJvZHVjZXMgc2V2ZXJhbCBzaXplIGNsYXNzZXMgdGhhdAorICAg
ICAgICAvLyBhcmUgYWxpZ25lZCBhdCBwb3dlcnMgb2YgdHdvLiBXZSB3aWxsIHdhc3RlIHRpbWUg
YW5kIHNwYWNlIGlmCisgICAgICAgIC8vIHdlIG1pc3MgaW4gdGhlIHNpemUgY2xhc3MgYXJyYXks
IGJ1dCB0aGF0IGlzIGRlZW1lZCBhY2NlcHRhYmxlCisgICAgICAgIC8vIHNpbmNlIG1lbWFsaWdu
KCkgc2hvdWxkIGJlIHVzZWQgcmFyZWx5LgorICAgICAgICBzaXplX3QgY2wgPSBTaXplQ2xhc3Mo
c2l6ZSk7CisgICAgICAgIHdoaWxlIChjbCA8IGtOdW1DbGFzc2VzICYmIChjbGFzc1Rvc2l6ZVtj
bF0gJiAoYWxpZ24gLSAxKSkpCisgICAgICAgIGNsKys7CisgICAgICAgIGlmIChjbCA8IGtOdW1D
bGFzc2VzKSB7CisgICAgICAgICAgICBUQ01hbGxvY1RocmVhZENhY2hlKiBoZWFwID0gVENNYWxs
b2NUaHJlYWRDYWNoZTo6R2V0Q2FjaGUoKTsKKyAgICAgICAgICAgIHJldHVybiBDaGVja2VkTWFs
bG9jUmVzdWx0KGhlYXAtPkFsbG9jYXRlKGNsYXNzVG9zaXplW2NsXSkpOworICAgICAgICB9CiAg
ICAgfQotICB9CiAKLSAgLy8gV2Ugd2lsbCBhbGxvY2F0ZSBkaXJlY3RseSBmcm9tIHRoZSBwYWdl
IGhlYXAKLSAgU3BpbkxvY2tIb2xkZXIgaCgmcGFnZWhlYXBfbG9jayk7CisgICAgLy8gV2Ugd2ls
bCBhbGxvY2F0ZSBkaXJlY3RseSBmcm9tIHRoZSBwYWdlIGhlYXAKKyAgICBTcGluTG9ja0hvbGRl
ciBoKCZwYWdlaGVhcExvY2spOwogCi0gIGlmIChhbGlnbiA8PSBrUGFnZVNpemUpIHsKLSAgICAv
LyBBbnkgcGFnZS1sZXZlbCBhbGxvY2F0aW9uIHdpbGwgYmUgZmluZQotICAgIC8vIFRPRE86IFdl
IGNvdWxkIHB1dCB0aGUgcmVzdCBvZiB0aGlzIHBhZ2UgaW4gdGhlIGFwcHJvcHJpYXRlCi0gICAg
Ly8gVE9ETzogY2FjaGUgYnV0IGl0IGRvZXMgbm90IHNlZW0gd29ydGggaXQuCi0gICAgU3Bhbiog
c3BhbiA9IHBhZ2VoZWFwLT5OZXcocGFnZXMoc2l6ZSkpOwotICAgIHJldHVybiBzcGFuID09IE5V
TEwgPyBOVUxMIDogU3BhblRvTWFsbG9jUmVzdWx0KHNwYW4pOwotICB9CisgICAgaWYgKGFsaWdu
IDw9IGtQYWdlU2l6ZSkgeworICAgICAgICAvLyBBbnkgcGFnZS1sZXZlbCBhbGxvY2F0aW9uIHdp
bGwgYmUgZmluZQorICAgICAgICAvLyBUT0RPOiBXZSBjb3VsZCBwdXQgdGhlIHJlc3Qgb2YgdGhp
cyBwYWdlIGluIHRoZSBhcHByb3ByaWF0ZQorICAgICAgICAvLyBUT0RPOiBjYWNoZSBidXQgaXQg
ZG9lcyBub3Qgc2VlbSB3b3J0aCBpdC4KKyAgICAgICAgU3Bhbiogc3BhbiA9IHBhZ2VoZWFwLT5O
ZXcocGFnZXMoc2l6ZSkpOworICAgICAgICByZXR1cm4gIXNwYW4gPyAwIDogU3BhblRvTWFsbG9j
UmVzdWx0KHNwYW4pOworICAgIH0KIAotICAvLyBBbGxvY2F0ZSBleHRyYSBwYWdlcyBhbmQgY2Fy
dmUgb2ZmIGFuIGFsaWduZWQgcG9ydGlvbgotICBjb25zdCBMZW5ndGggYWxsb2MgPSBwYWdlcyhz
aXplICsgYWxpZ24pOwotICBTcGFuKiBzcGFuID0gcGFnZWhlYXAtPk5ldyhhbGxvYyk7Ci0gIGlm
IChzcGFuID09IE5VTEwpIHJldHVybiBOVUxMOwotCi0gIC8vIFNraXAgc3RhcnRpbmcgcG9ydGlv
biBzbyB0aGF0IHdlIGVuZCB1cCBhbGlnbmVkCi0gIExlbmd0aCBza2lwID0gMDsKLSAgd2hpbGUg
KCgoKHNwYW4tPnN0YXJ0K3NraXApIDw8IGtQYWdlU2hpZnQpICYgKGFsaWduIC0gMSkpICE9IDAp
IHsKLSAgICBza2lwKys7Ci0gIH0KLSAgQVNTRVJUKHNraXAgPCBhbGxvYyk7Ci0gIGlmIChza2lw
ID4gMCkgewotICAgIFNwYW4qIHJlc3QgPSBwYWdlaGVhcC0+U3BsaXQoc3Bhbiwgc2tpcCk7Ci0g
ICAgcGFnZWhlYXAtPkRlbGV0ZShzcGFuKTsKLSAgICBzcGFuID0gcmVzdDsKLSAgfQorICAgIC8v
IEFsbG9jYXRlIGV4dHJhIHBhZ2VzIGFuZCBjYXJ2ZSBvZmYgYW4gYWxpZ25lZCBwb3J0aW9uCisg
ICAgY29uc3QgTGVuZ3RoIGFsbG9jID0gcGFnZXMoc2l6ZSArIGFsaWduKTsKKyAgICBTcGFuKiBz
cGFuID0gcGFnZWhlYXAtPk5ldyhhbGxvYyk7CisgICAgaWYgKCFzcGFuKQorICAgICAgICByZXR1
cm4gMDsKIAotICAvLyBTa2lwIHRyYWlsaW5nIHBvcnRpb24gdGhhdCB3ZSBkbyBub3QgbmVlZCB0
byByZXR1cm4KLSAgY29uc3QgTGVuZ3RoIG5lZWRlZCA9IHBhZ2VzKHNpemUpOwotICBBU1NFUlQo
c3Bhbi0+bGVuZ3RoID49IG5lZWRlZCk7Ci0gIGlmIChzcGFuLT5sZW5ndGggPiBuZWVkZWQpIHsK
LSAgICBTcGFuKiB0cmFpbGVyID0gcGFnZWhlYXAtPlNwbGl0KHNwYW4sIG5lZWRlZCk7Ci0gICAg
cGFnZWhlYXAtPkRlbGV0ZSh0cmFpbGVyKTsKLSAgfQotICByZXR1cm4gU3BhblRvTWFsbG9jUmVz
dWx0KHNwYW4pOworICAgIC8vIFNraXAgc3RhcnRpbmcgcG9ydGlvbiBzbyB0aGF0IHdlIGVuZCB1
cCBhbGlnbmVkCisgICAgTGVuZ3RoIHNraXAgPSAwOworICAgIHdoaWxlICgoKHNwYW4tPnN0YXJ0
K3NraXApIDw8IGtQYWdlU2hpZnQpICYgKGFsaWduIC0gMSkpCisgICAgICAgIHNraXArKzsKKyAg
ICBBU1NFUlQoc2tpcCA8IGFsbG9jKTsKKyAgICBpZiAoc2tpcCA+IDApIHsKKyAgICAgICAgU3Bh
biogcmVzdCA9IHBhZ2VoZWFwLT5TcGxpdChzcGFuLCBza2lwKTsKKyAgICAgICAgcGFnZWhlYXAt
PkRlbGV0ZShzcGFuKTsKKyAgICAgICAgc3BhbiA9IHJlc3Q7CisgICAgfQorCisgICAgLy8gU2tp
cCB0cmFpbGluZyBwb3J0aW9uIHRoYXQgd2UgZG8gbm90IG5lZWQgdG8gcmV0dXJuCisgICAgY29u
c3QgTGVuZ3RoIG5lZWRlZCA9IHBhZ2VzKHNpemUpOworICAgIEFTU0VSVChzcGFuLT5sZW5ndGgg
Pj0gbmVlZGVkKTsKKyAgICBpZiAoc3Bhbi0+bGVuZ3RoID4gbmVlZGVkKSB7CisgICAgICAgIFNw
YW4qIHRyYWlsZXIgPSBwYWdlaGVhcC0+U3BsaXQoc3BhbiwgbmVlZGVkKTsKKyAgICAgICAgcGFn
ZWhlYXAtPkRlbGV0ZSh0cmFpbGVyKTsKKyAgICB9CisgICAgcmV0dXJuIFNwYW5Ub01hbGxvY1Jl
c3VsdChzcGFuKTsKIH0KICNlbmRpZgogCiAvLyBIZWxwZXJzIGZvciB1c2UgYnkgZXhwb3J0ZWQg
cm91dGluZXMgYmVsb3c6CiAKICNpZm5kZWYgV1RGX0NIQU5HRVMKLXN0YXRpYyBpbmxpbmUgdm9p
ZCBkb19tYWxsb2Nfc3RhdHMoKSB7Ci0gIFByaW50U3RhdHMoMSk7CitzdGF0aWMgaW5saW5lIHZv
aWQgZG9NYWxsb2NTdGF0cygpCit7CisgICAgUHJpbnRTdGF0cygxKTsKIH0KICNlbmRpZgogCi1z
dGF0aWMgaW5saW5lIGludCBkb19tYWxsb3B0KGludCwgaW50KSB7Ci0gIHJldHVybiAxOyAgICAg
Ly8gSW5kaWNhdGVzIGVycm9yCitzdGF0aWMgaW5saW5lIGludCBkb01hbGxvcHQoaW50LCBpbnQp
Cit7CisgICAgcmV0dXJuIDE7IC8vIEluZGljYXRlcyBlcnJvcgogfQogCi0jaWZkZWYgSEFWRV9T
VFJVQ1RfTUFMTElORk8gIC8vIG1hbGxpbmZvIGlzbid0IGRlZmluZWQgb24gZnJlZWJzZCwgZm9y
IGluc3RhbmNlCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtYWxsaW5mbyBkb19tYWxsaW5mbygpIHsK
LSAgVENNYWxsb2NTdGF0cyBzdGF0czsKLSAgRXh0cmFjdFN0YXRzKCZzdGF0cywgTlVMTCk7Ci0K
LSAgLy8gSnVzdCBzb21lIG9mIHRoZSBmaWVsZHMgYXJlIGZpbGxlZCBpbi4KLSAgc3RydWN0IG1h
bGxpbmZvIGluZm87Ci0gIG1lbXNldCgmaW5mbywgMCwgc2l6ZW9mKGluZm8pKTsKLQotICAvLyBV
bmZvcnR1bmF0ZWx5LCB0aGUgc3RydWN0IGNvbnRhaW5zICJpbnQiIGZpZWxkLCBzbyBzb21lIG9m
IHRoZQotICAvLyBzaXplIHZhbHVlcyB3aWxsIGJlIHRydW5jYXRlZC4KLSAgaW5mby5hcmVuYSAg
ICAgPSBzdGF0aWNfY2FzdDxpbnQ+KHN0YXRzLnN5c3RlbV9ieXRlcyk7Ci0gIGluZm8uZnNtYmxr
cyAgID0gc3RhdGljX2Nhc3Q8aW50PihzdGF0cy50aHJlYWRfYnl0ZXMKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICsgc3RhdHMuY2VudHJhbF9ieXRlcwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKyBzdGF0cy50cmFuc2Zlcl9ieXRlcyk7Ci0gIGluZm8u
Zm9yZGJsa3MgID0gc3RhdGljX2Nhc3Q8aW50PihzdGF0cy5wYWdlaGVhcF9ieXRlcyk7Ci0gIGlu
Zm8udW9yZGJsa3MgID0gc3RhdGljX2Nhc3Q8aW50PihzdGF0cy5zeXN0ZW1fYnl0ZXMKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gc3RhdHMudGhyZWFkX2J5dGVzCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIHN0YXRzLmNlbnRyYWxfYnl0ZXMKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gc3RhdHMudHJhbnNmZXJfYnl0ZXMK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gc3RhdHMucGFnZWhlYXBfYnl0
ZXMpOworI2lmZGVmIEhBVkVfU1RSVUNUX01BTExJTkZPIC8vIG1hbGxpbmZvIGlzbid0IGRlZmlu
ZWQgb24gZnJlZWJzZCwgZm9yIGluc3RhbmNlCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtYWxsaW5m
byBkb01hbGxpbmZvKCkKK3sKKyAgICBUQ01hbGxvY1N0YXRzIHN0YXRzOworICAgIEV4dHJhY3RT
dGF0cygmc3RhdHMsIDApOworCisgICAgLy8gSnVzdCBzb21lIG9mIHRoZSBmaWVsZHMgYXJlIGZp
bGxlZCBpbi4KKyAgICBzdHJ1Y3QgbWFsbGluZm8gaW5mbzsKKyAgICBtZW1zZXQoJmluZm8sIDAs
IHNpemVvZihpbmZvKSk7CiAKLSAgcmV0dXJuIGluZm87CisgICAgLy8gVW5mb3J0dW5hdGVseSwg
dGhlIHN0cnVjdCBjb250YWlucyAiaW50IiBmaWVsZCwgc28gc29tZSBvZiB0aGUKKyAgICAvLyBz
aXplIHZhbHVlcyB3aWxsIGJlIHRydW5jYXRlZC4KKyAgICBpbmZvLmFyZW5hICAgICA9IHN0YXRp
Y19jYXN0PGludD4oc3RhdHMuc3lzdGVtQnl0ZXMpOworICAgIGluZm8uZnNtYmxrcyAgID0gc3Rh
dGljX2Nhc3Q8aW50PihzdGF0cy50aHJlYWRCeXRlcworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKyBzdGF0cy5jZW50cmFsQnl0ZXMKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICsgc3RhdHMudHJhbnNmZXJCeXRlcyk7CisgICAgaW5mby5mb3JkYmxrcyAg
PSBzdGF0aWNfY2FzdDxpbnQ+KHN0YXRzLnBhZ2VoZWFwQnl0ZXMpOworICAgIGluZm8udW9yZGJs
a3MgID0gc3RhdGljX2Nhc3Q8aW50PihzdGF0cy5zeXN0ZW1CeXRlcworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLSBzdGF0cy50aHJlYWRCeXRlcworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLSBzdGF0cy5jZW50cmFsQnl0ZXMKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC0gc3RhdHMudHJhbnNmZXJCeXRlcworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLSBzdGF0cy5wYWdlaGVhcEJ5dGVzKTsKKworICAgIHJl
dHVybiBpbmZvOwogfQogI2VuZGlmCiAKQEAgLTM4NDgsNyArMzk2MCw3IEBAIHN0YXRpYyBpbmxp
bmUgc3RydWN0IG1hbGxpbmZvIGRvX21hbGxpbmYKICNpZm5kZWYgV1RGX0NIQU5HRVMKIGV4dGVy
biAiQyIgCiAjZWxzZQotI2RlZmluZSBkb19tYWxsb2MgZG9fbWFsbG9jPGNyYXNoT25GYWlsdXJl
PgorI2RlZmluZSBkb01hbGxvYyBkb01hbGxvYzxjcmFzaE9uRmFpbHVyZT4KIAogdGVtcGxhdGUg
PGJvb2wgY3Jhc2hPbkZhaWx1cmU+CiBBTFdBWVNfSU5MSU5FIHZvaWQqIG1hbGxvYyhzaXplX3Qp
OwpAQCAtMzg3MCwxOSArMzk4MiwxOSBAQCB2b2lkKiBtYWxsb2Moc2l6ZV90IHNpemUpIHsKICNp
ZiBFTkFCTEUoV1RGX01BTExPQ19WQUxJREFUSU9OKQogICAgIGlmIChzdGQ6Om51bWVyaWNfbGlt
aXRzPHNpemVfdD46Om1heCgpIC0gSW50ZXJuYWw6OlZhbGlkYXRpb25CdWZmZXJTaXplIDw9IHNp
emUpICAvLyBJZiBvdmVyZmxvdyB3b3VsZCBvY2N1ci4uLgogICAgICAgICByZXR1cm4gMDsKLSAg
ICB2b2lkKiByZXN1bHQgPSBkb19tYWxsb2Moc2l6ZSArIEludGVybmFsOjpWYWxpZGF0aW9uQnVm
ZmVyU2l6ZSk7CisgICAgdm9pZCogcmVzdWx0ID0gZG9NYWxsb2Moc2l6ZSArIEludGVybmFsOjpW
YWxpZGF0aW9uQnVmZmVyU2l6ZSk7CiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiAw
OwogCiAgICAgSW50ZXJuYWw6OlZhbGlkYXRpb25IZWFkZXIqIGhlYWRlciA9IHN0YXRpY19jYXN0
PEludGVybmFsOjpWYWxpZGF0aW9uSGVhZGVyKj4ocmVzdWx0KTsKLSAgICBoZWFkZXItPm1fc2l6
ZSA9IHNpemU7CisgICAgaGVhZGVyLT5tc2l6ZSA9IHNpemU7CiAgICAgaGVhZGVyLT5tX3R5cGUg
PSBJbnRlcm5hbDo6QWxsb2NUeXBlTWFsbG9jOwogICAgIGhlYWRlci0+bV9wcmVmaXggPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oSW50ZXJuYWw6OlZhbGlkYXRpb25QcmVmaXgpOwogICAgIHJlc3Vs
dCA9IGhlYWRlciArIDE7CiAgICAgKkludGVybmFsOjpmYXN0TWFsbG9jVmFsaWRhdGlvblN1ZmZp
eChyZXN1bHQpID0gSW50ZXJuYWw6OlZhbGlkYXRpb25TdWZmaXg7CiAgICAgZmFzdE1hbGxvY1Zh
bGlkYXRlKHJlc3VsdCk7CiAjZWxzZQotICAgIHZvaWQqIHJlc3VsdCA9IGRvX21hbGxvYyhzaXpl
KTsKKyAgICB2b2lkKiByZXN1bHQgPSBkb01hbGxvYyhzaXplKTsKICNlbmRpZgogCiAjaWZuZGVm
IFdURl9DSEFOR0VTCkBAIC0zOTA1LDEwICs0MDE3LDEwIEBAIHZvaWQgZnJlZSh2b2lkKiBwdHIp
IHsKIAogICAgIGZhc3RNYWxsb2NWYWxpZGF0ZShwdHIpOwogICAgIEludGVybmFsOjpWYWxpZGF0
aW9uSGVhZGVyKiBoZWFkZXIgPSBJbnRlcm5hbDo6ZmFzdE1hbGxvY1ZhbGlkYXRpb25IZWFkZXIo
cHRyKTsKLSAgICBtZW1zZXQocHRyLCAweENDLCBoZWFkZXItPm1fc2l6ZSk7Ci0gICAgZG9fZnJl
ZShoZWFkZXIpOworICAgIG1lbXNldChwdHIsIDB4Q0MsIGhlYWRlci0+bXNpemUpOworICAgIGRv
RnJlZShoZWFkZXIpOwogI2Vsc2UKLSAgICBkb19mcmVlKHB0cik7CisgICAgZG9GcmVlKHB0cik7
CiAjZW5kaWYKIH0KIApAQCAtMzkxOCwxOCArNDAzMCwxOCBAQCBleHRlcm4gIkMiCiB0ZW1wbGF0
ZSA8Ym9vbCBjcmFzaE9uRmFpbHVyZT4KIEFMV0FZU19JTkxJTkUgdm9pZCogY2FsbG9jKHNpemVf
dCwgc2l6ZV90KTsKIAotdm9pZCogZmFzdENhbGxvYyhzaXplX3Qgbiwgc2l6ZV90IGVsZW1fc2l6
ZSkKK3ZvaWQqIGZhc3RDYWxsb2Moc2l6ZV90IG4sIHNpemVfdCBlbGVtc2l6ZSkKIHsKLSAgICB2
b2lkKiByZXN1bHQgPSBjYWxsb2M8dHJ1ZT4obiwgZWxlbV9zaXplKTsKKyAgICB2b2lkKiByZXN1
bHQgPSBjYWxsb2M8dHJ1ZT4obiwgZWxlbXNpemUpOwogI2lmIEVOQUJMRShXVEZfTUFMTE9DX1ZB
TElEQVRJT04pCiAgICAgZmFzdE1hbGxvY1ZhbGlkYXRlKHJlc3VsdCk7CiAjZW5kaWYKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi1UcnlNYWxsb2NSZXR1cm5WYWx1ZSB0cnlGYXN0Q2FsbG9jKHNp
emVfdCBuLCBzaXplX3QgZWxlbV9zaXplKQorVHJ5TWFsbG9jUmV0dXJuVmFsdWUgdHJ5RmFzdENh
bGxvYyhzaXplX3Qgbiwgc2l6ZV90IGVsZW1zaXplKQogewotICAgIHZvaWQqIHJlc3VsdCA9IGNh
bGxvYzxmYWxzZT4obiwgZWxlbV9zaXplKTsKKyAgICB2b2lkKiByZXN1bHQgPSBjYWxsb2M8ZmFs
c2U+KG4sIGVsZW1zaXplKTsKICNpZiBFTkFCTEUoV1RGX01BTExPQ19WQUxJREFUSU9OKQogICAg
IGZhc3RNYWxsb2NWYWxpZGF0ZShyZXN1bHQpOwogI2VuZGlmCkBAIC0zOTM5LDEyICs0MDUxLDEz
IEBAIFRyeU1hbGxvY1JldHVyblZhbHVlIHRyeUZhc3RDYWxsb2Moc2l6ZV8KIHRlbXBsYXRlIDxi
b29sIGNyYXNoT25GYWlsdXJlPgogQUxXQVlTX0lOTElORQogI2VuZGlmCi12b2lkKiBjYWxsb2Mo
c2l6ZV90IG4sIHNpemVfdCBlbGVtX3NpemUpIHsKLSAgc2l6ZV90IHRvdGFsQnl0ZXMgPSBuICog
ZWxlbV9zaXplOwordm9pZCogY2FsbG9jKHNpemVfdCBuLCBzaXplX3QgZWxlbXNpemUpCit7Cisg
ICAgc2l6ZV90IHRvdGFsQnl0ZXMgPSBuICogZWxlbXNpemU7CiAgICAgCi0gIC8vIFByb3RlY3Qg
YWdhaW5zdCBvdmVyZmxvdwotICBpZiAobiA+IDEgJiYgZWxlbV9zaXplICYmICh0b3RhbEJ5dGVz
IC8gZWxlbV9zaXplKSAhPSBuKQotICAgIHJldHVybiAwOworICAgIC8vIFByb3RlY3QgYWdhaW5z
dCBvdmVyZmxvdworICAgIGlmIChuID4gMSAmJiBlbGVtc2l6ZSAmJiAodG90YWxCeXRlcyAvIGVs
ZW1zaXplKSAhPSBuKQorICAgICAgICByZXR1cm4gMDsKIAogI2lmIEVOQUJMRShXVEZfTUFMTE9D
X1ZBTElEQVRJT04pCiAgICAgdm9pZCogcmVzdWx0ID0gbWFsbG9jPGNyYXNoT25GYWlsdXJlPih0
b3RhbEJ5dGVzKTsKQEAgLTM5NTQsMTYgKzQwNjcsMTUgQEAgdm9pZCogY2FsbG9jKHNpemVfdCBu
LCBzaXplX3QgZWxlbV9zaXplKQogICAgIG1lbXNldChyZXN1bHQsIDAsIHRvdGFsQnl0ZXMpOwog
ICAgIGZhc3RNYWxsb2NWYWxpZGF0ZShyZXN1bHQpOwogI2Vsc2UKLSAgICB2b2lkKiByZXN1bHQg
PSBkb19tYWxsb2ModG90YWxCeXRlcyk7Ci0gICAgaWYgKHJlc3VsdCAhPSBOVUxMKSB7CisgICAg
dm9pZCogcmVzdWx0ID0gZG9NYWxsb2ModG90YWxCeXRlcyk7CisgICAgaWYgKHJlc3VsdCkKICAg
ICAgICAgbWVtc2V0KHJlc3VsdCwgMCwgdG90YWxCeXRlcyk7Ci0gICAgfQogI2VuZGlmCiAKICNp
Zm5kZWYgV1RGX0NIQU5HRVMKLSAgTWFsbG9jSG9vazo6SW52b2tlTmV3SG9vayhyZXN1bHQsIHRv
dGFsQnl0ZXMpOworICAgIE1hbGxvY0hvb2s6Okludm9rZU5ld0hvb2socmVzdWx0LCB0b3RhbEJ5
dGVzKTsKICNlbmRpZgotICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
IC8vIFNpbmNlIGNmcmVlIGlzbid0IHVzZWQgYW55d2hlcmUsIHdlIGRvbid0IGNvbXBpbGUgaXQg
aW4uCkBAIC0zOTc1LDcgKzQwODcsNyBAQCB2b2lkIGNmcmVlKHZvaWQqIHB0cikgewogI2lmbmRl
ZiBXVEZfQ0hBTkdFUwogICAgIE1hbGxvY0hvb2s6Okludm9rZURlbGV0ZUhvb2socHRyKTsKICNl
bmRpZgotICBkb19mcmVlKHB0cik7CisgICAgZG9GcmVlKHB0cik7CiB9CiAjZW5kaWYKIApAQCAt
Mzk4NSwyNCArNDA5NywyNCBAQCBleHRlcm4gIkMiCiB0ZW1wbGF0ZSA8Ym9vbCBjcmFzaE9uRmFp
bHVyZT4KIEFMV0FZU19JTkxJTkUgdm9pZCogcmVhbGxvYyh2b2lkKiwgc2l6ZV90KTsKIAotdm9p
ZCogZmFzdFJlYWxsb2Modm9pZCogb2xkX3B0ciwgc2l6ZV90IG5ld19zaXplKQordm9pZCogZmFz
dFJlYWxsb2Modm9pZCogb2xkcHRyLCBzaXplX3QgbmV3U2l6ZSkKIHsKICNpZiBFTkFCTEUoV1RG
X01BTExPQ19WQUxJREFUSU9OKQotICAgIGZhc3RNYWxsb2NWYWxpZGF0ZShvbGRfcHRyKTsKKyAg
ICBmYXN0TWFsbG9jVmFsaWRhdGUob2xkcHRyKTsKICNlbmRpZgotICAgIHZvaWQqIHJlc3VsdCA9
IHJlYWxsb2M8dHJ1ZT4ob2xkX3B0ciwgbmV3X3NpemUpOworICAgIHZvaWQqIHJlc3VsdCA9IHJl
YWxsb2M8dHJ1ZT4ob2xkcHRyLCBuZXdTaXplKTsKICNpZiBFTkFCTEUoV1RGX01BTExPQ19WQUxJ
REFUSU9OKQogICAgIGZhc3RNYWxsb2NWYWxpZGF0ZShyZXN1bHQpOwogI2VuZGlmCiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAotVHJ5TWFsbG9jUmV0dXJuVmFsdWUgdHJ5RmFzdFJlYWxsb2Modm9p
ZCogb2xkX3B0ciwgc2l6ZV90IG5ld19zaXplKQorVHJ5TWFsbG9jUmV0dXJuVmFsdWUgdHJ5RmFz
dFJlYWxsb2Modm9pZCogb2xkcHRyLCBzaXplX3QgbmV3U2l6ZSkKIHsKICNpZiBFTkFCTEUoV1RG
X01BTExPQ19WQUxJREFUSU9OKQotICAgIGZhc3RNYWxsb2NWYWxpZGF0ZShvbGRfcHRyKTsKKyAg
ICBmYXN0TWFsbG9jVmFsaWRhdGUob2xkcHRyKTsKICNlbmRpZgotICAgIHZvaWQqIHJlc3VsdCA9
IHJlYWxsb2M8ZmFsc2U+KG9sZF9wdHIsIG5ld19zaXplKTsKKyAgICB2b2lkKiByZXN1bHQgPSBy
ZWFsbG9jPGZhbHNlPihvbGRwdHIsIG5ld1NpemUpOwogI2lmIEVOQUJMRShXVEZfTUFMTE9DX1ZB
TElEQVRJT04pCiAgICAgZmFzdE1hbGxvY1ZhbGlkYXRlKHJlc3VsdCk7CiAjZW5kaWYKQEAgLTQw
MTIsMTA5ICs0MTI0LDEwOCBAQCBUcnlNYWxsb2NSZXR1cm5WYWx1ZSB0cnlGYXN0UmVhbGxvYyh2
b2lkCiB0ZW1wbGF0ZSA8Ym9vbCBjcmFzaE9uRmFpbHVyZT4KIEFMV0FZU19JTkxJTkUKICNlbmRp
Zgotdm9pZCogcmVhbGxvYyh2b2lkKiBvbGRfcHRyLCBzaXplX3QgbmV3X3NpemUpIHsKLSAgaWYg
KG9sZF9wdHIgPT0gTlVMTCkgewordm9pZCogcmVhbGxvYyh2b2lkKiBvbGRwdHIsIHNpemVfdCBu
ZXdTaXplKQoreworICAgIGlmICghb2xkcHRyKSB7CiAjaWYgRU5BQkxFKFdURl9NQUxMT0NfVkFM
SURBVElPTikKLSAgICB2b2lkKiByZXN1bHQgPSBtYWxsb2M8Y3Jhc2hPbkZhaWx1cmU+KG5ld19z
aXplKTsKKyAgICAgICAgdm9pZCogcmVzdWx0ID0gbWFsbG9jPGNyYXNoT25GYWlsdXJlPihuZXdT
aXplKTsKICNlbHNlCi0gICAgdm9pZCogcmVzdWx0ID0gZG9fbWFsbG9jKG5ld19zaXplKTsKKyAg
ICAgICAgdm9pZCogcmVzdWx0ID0gZG9NYWxsb2MobmV3U2l6ZSk7CiAjaWZuZGVmIFdURl9DSEFO
R0VTCi0gICAgTWFsbG9jSG9vazo6SW52b2tlTmV3SG9vayhyZXN1bHQsIG5ld19zaXplKTsKKyAg
ICAgICAgTWFsbG9jSG9vazo6SW52b2tlTmV3SG9vayhyZXN1bHQsIG5ld1NpemUpOwogI2VuZGlm
CiAjZW5kaWYKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0gIGlmIChuZXdfc2l6ZSA9PSAwKSB7
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIGlmICghbmV3U2l6ZSkgewogI2lm
bmRlZiBXVEZfQ0hBTkdFUwotICAgIE1hbGxvY0hvb2s6Okludm9rZURlbGV0ZUhvb2sob2xkX3B0
cik7CisgICAgICAgIE1hbGxvY0hvb2s6Okludm9rZURlbGV0ZUhvb2sob2xkcHRyKTsKICNlbmRp
ZgotICAgIGZyZWUob2xkX3B0cik7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KKyAgICAgICAgZnJl
ZShvbGRwdHIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CiAKICNpZiBFTkFCTEUoV1RGX01B
TExPQ19WQUxJREFUSU9OKQotICAgIGlmIChzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1h
eCgpIC0gSW50ZXJuYWw6OlZhbGlkYXRpb25CdWZmZXJTaXplIDw9IG5ld19zaXplKSAgLy8gSWYg
b3ZlcmZsb3cgd291bGQgb2NjdXIuLi4KKyAgICBpZiAoc3RkOjpudW1lcmljX2xpbWl0czxzaXpl
X3Q+OjptYXgoKSAtIEludGVybmFsOjpWYWxpZGF0aW9uQnVmZmVyU2l6ZSA8PSBuZXdTaXplKSAv
LyBJZiBvdmVyZmxvdyB3b3VsZCBvY2N1ci4uLgogICAgICAgICByZXR1cm4gMDsKLSAgICBJbnRl
cm5hbDo6VmFsaWRhdGlvbkhlYWRlciogaGVhZGVyID0gSW50ZXJuYWw6OmZhc3RNYWxsb2NWYWxp
ZGF0aW9uSGVhZGVyKG9sZF9wdHIpOwotICAgIGZhc3RNYWxsb2NWYWxpZGF0ZShvbGRfcHRyKTsK
LSAgICBvbGRfcHRyID0gaGVhZGVyOwotICAgIGhlYWRlci0+bV9zaXplID0gbmV3X3NpemU7Ci0g
ICAgbmV3X3NpemUgKz0gSW50ZXJuYWw6OlZhbGlkYXRpb25CdWZmZXJTaXplOwotI2VuZGlmCi0K
LSAgLy8gR2V0IHRoZSBzaXplIG9mIHRoZSBvbGQgZW50cnkKLSAgY29uc3QgUGFnZUlEIHAgPSBy
ZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ob2xkX3B0cikgPj4ga1BhZ2VTaGlmdDsKLSAgc2l6
ZV90IGNsID0gcGFnZWhlYXAtPkdldFNpemVDbGFzc0lmQ2FjaGVkKHApOwotICBTcGFuICpzcGFu
ID0gTlVMTDsKLSAgc2l6ZV90IG9sZF9zaXplOwotICBpZiAoY2wgPT0gMCkgewotICAgIHNwYW4g
PSBwYWdlaGVhcC0+R2V0RGVzY3JpcHRvcihwKTsKLSAgICBjbCA9IHNwYW4tPnNpemVjbGFzczsK
LSAgICBwYWdlaGVhcC0+Q2FjaGVTaXplQ2xhc3MocCwgY2wpOwotICB9Ci0gIGlmIChjbCAhPSAw
KSB7Ci0gICAgb2xkX3NpemUgPSBCeXRlU2l6ZUZvckNsYXNzKGNsKTsKLSAgfSBlbHNlIHsKLSAg
ICBBU1NFUlQoc3BhbiAhPSBOVUxMKTsKLSAgICBvbGRfc2l6ZSA9IHNwYW4tPmxlbmd0aCA8PCBr
UGFnZVNoaWZ0OwotICB9Ci0KLSAgLy8gUmVhbGxvY2F0ZSBpZiB0aGUgbmV3IHNpemUgaXMgbGFy
Z2VyIHRoYW4gdGhlIG9sZCBzaXplLAotICAvLyBvciBpZiB0aGUgbmV3IHNpemUgaXMgc2lnbmlm
aWNhbnRseSBzbWFsbGVyIHRoYW4gdGhlIG9sZCBzaXplLgotICBpZiAoKG5ld19zaXplID4gb2xk
X3NpemUpIHx8IChBbGxvY2F0aW9uU2l6ZShuZXdfc2l6ZSkgPCBvbGRfc2l6ZSkpIHsKLSAgICAv
LyBOZWVkIHRvIHJlYWxsb2NhdGUKLSAgICB2b2lkKiBuZXdfcHRyID0gZG9fbWFsbG9jKG5ld19z
aXplKTsKLSAgICBpZiAobmV3X3B0ciA9PSBOVUxMKSB7Ci0gICAgICByZXR1cm4gTlVMTDsKLSAg
ICB9CisgICAgSW50ZXJuYWw6OlZhbGlkYXRpb25IZWFkZXIqIGhlYWRlciA9IEludGVybmFsOjpm
YXN0TWFsbG9jVmFsaWRhdGlvbkhlYWRlcihvbGRwdHIpOworICAgIGZhc3RNYWxsb2NWYWxpZGF0
ZShvbGRwdHIpOworICAgIG9sZHB0ciA9IGhlYWRlcjsKKyAgICBoZWFkZXItPm1zaXplID0gbmV3
U2l6ZTsKKyAgICBuZXdTaXplICs9IEludGVybmFsOjpWYWxpZGF0aW9uQnVmZmVyU2l6ZTsKKyNl
bmRpZgorCisgICAgLy8gR2V0IHRoZSBzaXplIG9mIHRoZSBvbGQgZW50cnkKKyAgICBjb25zdCBQ
YWdlSUQgcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihvbGRwdHIpID4+IGtQYWdlU2hp
ZnQ7CisgICAgc2l6ZV90IGNsID0gcGFnZWhlYXAtPkdldFNpemVDbGFzc0lmQ2FjaGVkKHApOwor
ICAgIFNwYW4qIHNwYW4gPSAwOworICAgIHNpemVfdCBvbGRzaXplOworICAgIGlmICghY2wpIHsK
KyAgICAgICAgc3BhbiA9IHBhZ2VoZWFwLT5HZXREZXNjcmlwdG9yKHApOworICAgICAgICBjbCA9
IHNwYW4tPnNpemVjbGFzczsKKyAgICAgICAgcGFnZWhlYXAtPkNhY2hlU2l6ZUNsYXNzKHAsIGNs
KTsKKyAgICB9CisgICAgaWYgKGNsKQorICAgICAgICBvbGRzaXplID0gQnl0ZVNpemVGb3JDbGFz
cyhjbCk7CisgICAgZWxzZSB7CisgICAgICAgIEFTU0VSVChzcGFuKTsKKyAgICAgICAgb2xkc2l6
ZSA9IHNwYW4tPmxlbmd0aCA8PCBrUGFnZVNoaWZ0OworICAgIH0KKworICAgIC8vIFJlYWxsb2Nh
dGUgaWYgdGhlIG5ldyBzaXplIGlzIGxhcmdlciB0aGFuIHRoZSBvbGQgc2l6ZSwKKyAgICAvLyBv
ciBpZiB0aGUgbmV3IHNpemUgaXMgc2lnbmlmaWNhbnRseSBzbWFsbGVyIHRoYW4gdGhlIG9sZCBz
aXplLgorICAgIGlmICgobmV3U2l6ZSA+IG9sZHNpemUpIHx8IChBbGxvY2F0aW9uU2l6ZShuZXdT
aXplKSA8IG9sZHNpemUpKSB7CisgICAgICAgIC8vIE5lZWQgdG8gcmVhbGxvY2F0ZQorICAgICAg
ICB2b2lkKiBuZXdwdHIgPSBkb01hbGxvYyhuZXdTaXplKTsKKyAgICAgICAgaWYgKCFuZXdwdHIp
CisgICAgICAgICAgICByZXR1cm4gMDsKICNpZm5kZWYgV1RGX0NIQU5HRVMKLSAgICBNYWxsb2NI
b29rOjpJbnZva2VOZXdIb29rKG5ld19wdHIsIG5ld19zaXplKTsKKyAgICAgICAgTWFsbG9jSG9v
azo6SW52b2tlTmV3SG9vayhuZXdwdHIsIG5ld1NpemUpOwogI2VuZGlmCi0gICAgbWVtY3B5KG5l
d19wdHIsIG9sZF9wdHIsICgob2xkX3NpemUgPCBuZXdfc2l6ZSkgPyBvbGRfc2l6ZSA6IG5ld19z
aXplKSk7CisgICAgICAgIG1lbWNweShuZXdwdHIsIG9sZHB0ciwgKChvbGRzaXplIDwgbmV3U2l6
ZSkgPyBvbGRzaXplIDogbmV3U2l6ZSkpOwogI2lmbmRlZiBXVEZfQ0hBTkdFUwotICAgIE1hbGxv
Y0hvb2s6Okludm9rZURlbGV0ZUhvb2sob2xkX3B0cik7CisgICAgICAgIE1hbGxvY0hvb2s6Oklu
dm9rZURlbGV0ZUhvb2sob2xkcHRyKTsKICNlbmRpZgotICAgIC8vIFdlIGNvdWxkIHVzZSBhIHZh
cmlhbnQgb2YgZG9fZnJlZSgpIHRoYXQgbGV2ZXJhZ2VzIHRoZSBmYWN0Ci0gICAgLy8gdGhhdCB3
ZSBhbHJlYWR5IGtub3cgdGhlIHNpemVjbGFzcyBvZiBvbGRfcHRyLiAgVGhlIGJlbmVmaXQKLSAg
ICAvLyB3b3VsZCBiZSBzbWFsbCwgc28gZG9uJ3QgYm90aGVyLgotICAgIGRvX2ZyZWUob2xkX3B0
cik7CisgICAgICAgIC8vIFdlIGNvdWxkIHVzZSBhIHZhcmlhbnQgb2YgZG9GcmVlKCkgdGhhdCBs
ZXZlcmFnZXMgdGhlIGZhY3QKKyAgICAgICAgLy8gdGhhdCB3ZSBhbHJlYWR5IGtub3cgdGhlIHNp
emVjbGFzcyBvZiBvbGRwdHIuIFRoZSBiZW5lZml0CisgICAgICAgIC8vIHdvdWxkIGJlIHNtYWxs
LCBzbyBkb24ndCBib3RoZXIuCisgICAgICAgIGRvRnJlZShvbGRwdHIpOwogI2lmIEVOQUJMRShX
VEZfTUFMTE9DX1ZBTElEQVRJT04pCi0gICAgbmV3X3B0ciA9IHN0YXRpY19jYXN0PEludGVybmFs
OjpWYWxpZGF0aW9uSGVhZGVyKj4obmV3X3B0cikgKyAxOwotICAgICpJbnRlcm5hbDo6ZmFzdE1h
bGxvY1ZhbGlkYXRpb25TdWZmaXgobmV3X3B0cikgPSBJbnRlcm5hbDo6VmFsaWRhdGlvblN1ZmZp
eDsKKyAgICAgICAgbmV3cHRyID0gc3RhdGljX2Nhc3Q8SW50ZXJuYWw6OlZhbGlkYXRpb25IZWFk
ZXIqPihuZXdwdHIpICsgMTsKKyAgICAgICAgKkludGVybmFsOjpmYXN0TWFsbG9jVmFsaWRhdGlv
blN1ZmZpeChuZXdwdHIpID0gSW50ZXJuYWw6OlZhbGlkYXRpb25TdWZmaXg7CiAjZW5kaWYKLSAg
ICByZXR1cm4gbmV3X3B0cjsKLSAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIG5ld3B0cjsKKyAg
ICB9CiAjaWYgRU5BQkxFKFdURl9NQUxMT0NfVkFMSURBVElPTikKLSAgICBvbGRfcHRyID0gc3Rh
dGljX2Nhc3Q8SW50ZXJuYWw6OlZhbGlkYXRpb25IZWFkZXIqPihvbGRfcHRyKSArIDE7IC8vIFNl
dCBvbGRfcHRyIGJhY2sgdG8gdGhlIHVzZXIgcG9pbnRlci4KLSAgICAqSW50ZXJuYWw6OmZhc3RN
YWxsb2NWYWxpZGF0aW9uU3VmZml4KG9sZF9wdHIpID0gSW50ZXJuYWw6OlZhbGlkYXRpb25TdWZm
aXg7CisgICAgb2xkcHRyID0gc3RhdGljX2Nhc3Q8SW50ZXJuYWw6OlZhbGlkYXRpb25IZWFkZXIq
PihvbGRwdHIpICsgMTsgLy8gU2V0IG9sZHB0ciBiYWNrIHRvIHRoZSB1c2VyIHBvaW50ZXIuCisg
ICAgKkludGVybmFsOjpmYXN0TWFsbG9jVmFsaWRhdGlvblN1ZmZpeChvbGRwdHIpID0gSW50ZXJu
YWw6OlZhbGlkYXRpb25TdWZmaXg7CiAjZW5kaWYKLSAgICByZXR1cm4gb2xkX3B0cjsKLSAgfQor
ICAgIHJldHVybiBvbGRwdHI7CiB9CiAKICNpZmRlZiBXVEZfQ0hBTkdFUwotI3VuZGVmIGRvX21h
bGxvYworI3VuZGVmIGRvTWFsbG9jCiAjZWxzZQogCiBzdGF0aWMgU3BpbkxvY2sgc2V0X25ld19o
YW5kbGVyX2xvY2sgPSBTUElOTE9DS19JTklUSUFMSVpFUjsKIAogc3RhdGljIGlubGluZSB2b2lk
KiBjcHBfYWxsb2Moc2l6ZV90IHNpemUsIGJvb2wgbm90aHJvdykgewotICBmb3IgKDs7KSB7Ci0g
ICAgdm9pZCogcCA9IGRvX21hbGxvYyhzaXplKTsKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIHZv
aWQqIHAgPSBkb01hbGxvYyhzaXplKTsKICNpZmRlZiBQUkVBTlNJTkVXCi0gICAgcmV0dXJuIHA7
CisgICAgICAgIHJldHVybiBwOwogI2Vsc2UKLSAgICBpZiAocCA9PSBOVUxMKSB7ICAvLyBhbGxv
Y2F0aW9uIGZhaWxlZAotICAgICAgLy8gR2V0IHRoZSBjdXJyZW50IG5ldyBoYW5kbGVyLiAgTkI6
IHRoaXMgZnVuY3Rpb24gaXMgbm90Ci0gICAgICAvLyB0aHJlYWQtc2FmZS4gIFdlIG1ha2UgYSBm
ZWVibGUgc3RhYiBhdCBtYWtpbmcgaXQgc28gaGVyZSwgYnV0Ci0gICAgICAvLyB0aGlzIGxvY2sg
b25seSBwcm90ZWN0cyBhZ2FpbnN0IHRjbWFsbG9jIGludGVyZmVyaW5nIHdpdGgKLSAgICAgIC8v
IGl0c2VsZiwgbm90IHdpdGggb3RoZXIgbGlicmFyaWVzIGNhbGxpbmcgc2V0X25ld19oYW5kbGVy
LgotICAgICAgc3RkOjpuZXdfaGFuZGxlciBuaDsKLSAgICAgIHsKLSAgICAgICAgU3BpbkxvY2tI
b2xkZXIgaCgmc2V0X25ld19oYW5kbGVyX2xvY2spOwotICAgICAgICBuaCA9IHN0ZDo6c2V0X25l
d19oYW5kbGVyKDApOwotICAgICAgICAodm9pZCkgc3RkOjpzZXRfbmV3X2hhbmRsZXIobmgpOwot
ICAgICAgfQorICAgICAgICBpZiAoIXApIHsgLy8gYWxsb2NhdGlvbiBmYWlsZWQKKyAgICAgICAg
ICAgIC8vIEdldCB0aGUgY3VycmVudCBuZXcgaGFuZGxlci4gTkI6IHRoaXMgZnVuY3Rpb24gaXMg
bm90CisgICAgICAgICAgICAvLyB0aHJlYWQtc2FmZS4gV2UgbWFrZSBhIGZlZWJsZSBzdGFiIGF0
IG1ha2luZyBpdCBzbyBoZXJlLCBidXQKKyAgICAgICAgICAgIC8vIHRoaXMgbG9jayBvbmx5IHBy
b3RlY3RzIGFnYWluc3QgdGNtYWxsb2MgaW50ZXJmZXJpbmcgd2l0aAorICAgICAgICAgICAgLy8g
aXRzZWxmLCBub3Qgd2l0aCBvdGhlciBsaWJyYXJpZXMgY2FsbGluZyBzZXRfbmV3X2hhbmRsZXIu
CisgICAgICAgICAgICBzdGQ6Om5ld19oYW5kbGVyIG5oOworICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIFNwaW5Mb2NrSG9sZGVyIGgoJnNldF9uZXdfaGFuZGxlcl9sb2NrKTsKKyAgICAg
ICAgICAgICAgICBuaCA9IHN0ZDo6c2V0X25ld19oYW5kbGVyKDApOworICAgICAgICAgICAgICAg
ICh2b2lkKSBzdGQ6OnNldF9uZXdfaGFuZGxlcihuaCk7CisgICAgICAgICAgICB9CiAgICAgICAv
LyBJZiBubyBuZXdfaGFuZGxlciBpcyBlc3RhYmxpc2hlZCwgdGhlIGFsbG9jYXRpb24gZmFpbGVk
LgogICAgICAgaWYgKCFuaCkgewogICAgICAgICBpZiAobm90aHJvdykgcmV0dXJuIDA7CkBAIC00
MTMzLDEyNyArNDI0NCwxMzAgQEAgc3RhdGljIGlubGluZSB2b2lkKiBjcHBfYWxsb2Moc2l6ZV90
IHNpegogICAgICAgcmV0dXJuIHA7CiAgICAgfQogI2VuZGlmCi0gIH0KKworICAgIH0KIH0KIAog
I2lmIEVOQUJMRShHTE9CQUxfRkFTVE1BTExPQ19ORVcpCiAKIHZvaWQqIG9wZXJhdG9yIG5ldyhz
aXplX3Qgc2l6ZSkgewotICB2b2lkKiBwID0gY3BwX2FsbG9jKHNpemUsIGZhbHNlKTsKLSAgLy8g
V2Uga2VlcCB0aGlzIG5leHQgaW5zdHJ1Y3Rpb24gb3V0IG9mIGNwcF9hbGxvYyBmb3IgYSByZWFz
b246IHdoZW4KLSAgLy8gaXQncyBpbiwgYW5kIG5ldyBqdXN0IGNhbGxzIGNwcF9hbGxvYywgdGhl
IG9wdGltaXplciBtYXkgZm9sZCB0aGUKLSAgLy8gbmV3IGNhbGwgaW50byBjcHBfYWxsb2MsIHdo
aWNoIG1lc3NlcyB1cCBvdXIgd2hvbGUgc2VjdGlvbi1iYXNlZAotICAvLyBzdGFja3RyYWNpbmcg
KHNlZSBBVFRSSUJVVEVfU0VDVElPTiwgYWJvdmUpLiAgVGhpcyBlbnN1cmVzIGNwcF9hbGxvYwot
ICAvLyBpc24ndCB0aGUgbGFzdCB0aGluZyB0aGlzIGZuIGNhbGxzLCBhbmQgcHJldmVudHMgdGhl
IGZvbGRpbmcuCi0gIE1hbGxvY0hvb2s6Okludm9rZU5ld0hvb2socCwgc2l6ZSk7Ci0gIHJldHVy
biBwOworICAgIHZvaWQqIHAgPSBjcHBfYWxsb2Moc2l6ZSwgZmFsc2UpOworICAgIC8vIFdlIGtl
ZXAgdGhpcyBuZXh0IGluc3RydWN0aW9uIG91dCBvZiBjcHBfYWxsb2MgZm9yIGEgcmVhc29uOiB3
aGVuCisgICAgLy8gaXQncyBpbiwgYW5kIG5ldyBqdXN0IGNhbGxzIGNwcF9hbGxvYywgdGhlIG9w
dGltaXplciBtYXkgZm9sZCB0aGUKKyAgICAvLyBuZXcgY2FsbCBpbnRvIGNwcF9hbGxvYywgd2hp
Y2ggbWVzc2VzIHVwIG91ciB3aG9sZSBzZWN0aW9uLWJhc2VkCisgICAgLy8gc3RhY2t0cmFjaW5n
IChzZWUgQVRUUklCVVRFX1NFQ1RJT04sIGFib3ZlKS4gVGhpcyBlbnN1cmVzIGNwcF9hbGxvYwor
ICAgIC8vIGlzbid0IHRoZSBsYXN0IHRoaW5nIHRoaXMgZm4gY2FsbHMsIGFuZCBwcmV2ZW50cyB0
aGUgZm9sZGluZy4KKyAgICBNYWxsb2NIb29rOjpJbnZva2VOZXdIb29rKHAsIHNpemUpOworICAg
IHJldHVybiBwOwogfQogCiB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90IHNpemUsIGNvbnN0IHN0
ZDo6bm90aHJvd190JikgX19USFJPVyB7Ci0gIHZvaWQqIHAgPSBjcHBfYWxsb2Moc2l6ZSwgdHJ1
ZSk7Ci0gIE1hbGxvY0hvb2s6Okludm9rZU5ld0hvb2socCwgc2l6ZSk7Ci0gIHJldHVybiBwOwor
ICAgIHZvaWQqIHAgPSBjcHBfYWxsb2Moc2l6ZSwgdHJ1ZSk7CisgICAgTWFsbG9jSG9vazo6SW52
b2tlTmV3SG9vayhwLCBzaXplKTsKKyAgICByZXR1cm4gcDsKIH0KIAogdm9pZCBvcGVyYXRvciBk
ZWxldGUodm9pZCogcCkgX19USFJPVyB7Ci0gIE1hbGxvY0hvb2s6Okludm9rZURlbGV0ZUhvb2so
cCk7Ci0gIGRvX2ZyZWUocCk7CisgICAgTWFsbG9jSG9vazo6SW52b2tlRGVsZXRlSG9vayhwKTsK
KyAgICBkb0ZyZWUocCk7CiB9CiAKIHZvaWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQqIHAsIGNvbnN0
IHN0ZDo6bm90aHJvd190JikgX19USFJPVyB7Ci0gIE1hbGxvY0hvb2s6Okludm9rZURlbGV0ZUhv
b2socCk7Ci0gIGRvX2ZyZWUocCk7CisgICAgTWFsbG9jSG9vazo6SW52b2tlRGVsZXRlSG9vayhw
KTsKKyAgICBkb0ZyZWUocCk7CiB9CiAKIHZvaWQqIG9wZXJhdG9yIG5ld1tdKHNpemVfdCBzaXpl
KSB7Ci0gIHZvaWQqIHAgPSBjcHBfYWxsb2Moc2l6ZSwgZmFsc2UpOwotICAvLyBXZSBrZWVwIHRo
aXMgbmV4dCBpbnN0cnVjdGlvbiBvdXQgb2YgY3BwX2FsbG9jIGZvciBhIHJlYXNvbjogd2hlbgot
ICAvLyBpdCdzIGluLCBhbmQgbmV3IGp1c3QgY2FsbHMgY3BwX2FsbG9jLCB0aGUgb3B0aW1pemVy
IG1heSBmb2xkIHRoZQotICAvLyBuZXcgY2FsbCBpbnRvIGNwcF9hbGxvYywgd2hpY2ggbWVzc2Vz
IHVwIG91ciB3aG9sZSBzZWN0aW9uLWJhc2VkCi0gIC8vIHN0YWNrdHJhY2luZyAoc2VlIEFUVFJJ
QlVURV9TRUNUSU9OLCBhYm92ZSkuICBUaGlzIGVuc3VyZXMgY3BwX2FsbG9jCi0gIC8vIGlzbid0
IHRoZSBsYXN0IHRoaW5nIHRoaXMgZm4gY2FsbHMsIGFuZCBwcmV2ZW50cyB0aGUgZm9sZGluZy4K
LSAgTWFsbG9jSG9vazo6SW52b2tlTmV3SG9vayhwLCBzaXplKTsKLSAgcmV0dXJuIHA7CisgICAg
dm9pZCogcCA9IGNwcF9hbGxvYyhzaXplLCBmYWxzZSk7CisgICAgLy8gV2Uga2VlcCB0aGlzIG5l
eHQgaW5zdHJ1Y3Rpb24gb3V0IG9mIGNwcF9hbGxvYyBmb3IgYSByZWFzb246IHdoZW4KKyAgICAv
LyBpdCdzIGluLCBhbmQgbmV3IGp1c3QgY2FsbHMgY3BwX2FsbG9jLCB0aGUgb3B0aW1pemVyIG1h
eSBmb2xkIHRoZQorICAgIC8vIG5ldyBjYWxsIGludG8gY3BwX2FsbG9jLCB3aGljaCBtZXNzZXMg
dXAgb3VyIHdob2xlIHNlY3Rpb24tYmFzZWQKKyAgICAvLyBzdGFja3RyYWNpbmcgKHNlZSBBVFRS
SUJVVEVfU0VDVElPTiwgYWJvdmUpLiBUaGlzIGVuc3VyZXMgY3BwX2FsbG9jCisgICAgLy8gaXNu
J3QgdGhlIGxhc3QgdGhpbmcgdGhpcyBmbiBjYWxscywgYW5kIHByZXZlbnRzIHRoZSBmb2xkaW5n
LgorICAgIE1hbGxvY0hvb2s6Okludm9rZU5ld0hvb2socCwgc2l6ZSk7CisgICAgcmV0dXJuIHA7
CiB9CiAKIHZvaWQqIG9wZXJhdG9yIG5ld1tdKHNpemVfdCBzaXplLCBjb25zdCBzdGQ6Om5vdGhy
b3dfdCYpIF9fVEhST1cgewotICB2b2lkKiBwID0gY3BwX2FsbG9jKHNpemUsIHRydWUpOwotICBN
YWxsb2NIb29rOjpJbnZva2VOZXdIb29rKHAsIHNpemUpOwotICByZXR1cm4gcDsKKyAgICB2b2lk
KiBwID0gY3BwX2FsbG9jKHNpemUsIHRydWUpOworICAgIE1hbGxvY0hvb2s6Okludm9rZU5ld0hv
b2socCwgc2l6ZSk7CisgICAgcmV0dXJuIHA7CiB9CiAKIHZvaWQgb3BlcmF0b3IgZGVsZXRlW10o
dm9pZCogcCkgX19USFJPVyB7Ci0gIE1hbGxvY0hvb2s6Okludm9rZURlbGV0ZUhvb2socCk7Ci0g
IGRvX2ZyZWUocCk7CisgICAgTWFsbG9jSG9vazo6SW52b2tlRGVsZXRlSG9vayhwKTsKKyAgICBk
b0ZyZWUocCk7CiB9CiAKIHZvaWQgb3BlcmF0b3IgZGVsZXRlW10odm9pZCogcCwgY29uc3Qgc3Rk
Ojpub3Rocm93X3QmKSBfX1RIUk9XIHsKLSAgTWFsbG9jSG9vazo6SW52b2tlRGVsZXRlSG9vayhw
KTsKLSAgZG9fZnJlZShwKTsKKyAgICBNYWxsb2NIb29rOjpJbnZva2VEZWxldGVIb29rKHApOwor
ICAgIGRvRnJlZShwKTsKIH0KIAogI2VuZGlmCiAKIGV4dGVybiAiQyIgdm9pZCogbWVtYWxpZ24o
c2l6ZV90IGFsaWduLCBzaXplX3Qgc2l6ZSkgX19USFJPVyB7Ci0gIHZvaWQqIHJlc3VsdCA9IGRv
X21lbWFsaWduKGFsaWduLCBzaXplKTsKLSAgTWFsbG9jSG9vazo6SW52b2tlTmV3SG9vayhyZXN1
bHQsIHNpemUpOwotICByZXR1cm4gcmVzdWx0OworICAgIHZvaWQqIHJlc3VsdCA9IGRvTWVtYWxp
Z24oYWxpZ24sIHNpemUpOworICAgIE1hbGxvY0hvb2s6Okludm9rZU5ld0hvb2socmVzdWx0LCBz
aXplKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi1leHRlcm4gIkMiIGludCBwb3NpeF9tZW1h
bGlnbih2b2lkKiogcmVzdWx0X3B0ciwgc2l6ZV90IGFsaWduLCBzaXplX3Qgc2l6ZSkKK2V4dGVy
biAiQyIgaW50IHBvc2l4X21lbWFsaWduKHZvaWQqKiByZXN1bHRwdHIsIHNpemVfdCBhbGlnbiwg
c2l6ZV90IHNpemUpCiAgICAgX19USFJPVyB7Ci0gIGlmICgoKGFsaWduICUgc2l6ZW9mKHZvaWQq
KSkgIT0gMCkgfHwKLSAgICAgICgoYWxpZ24gJiAoYWxpZ24gLSAxKSkgIT0gMCkgfHwKLSAgICAg
IChhbGlnbiA9PSAwKSkgewotICAgIHJldHVybiBFSU5WQUw7Ci0gIH0KKyAgICBpZiAoKGFsaWdu
ICUgc2l6ZW9mKHZvaWQqKSkKKyAgICAgICAgfHwgKGFsaWduICYgKGFsaWduIC0gMSkpCisgICAg
ICAgIHx8ICghYWxpZ24pKQorICAgICAgICByZXR1cm4gRUlOVkFMOwogCi0gIHZvaWQqIHJlc3Vs
dCA9IGRvX21lbWFsaWduKGFsaWduLCBzaXplKTsKLSAgTWFsbG9jSG9vazo6SW52b2tlTmV3SG9v
ayhyZXN1bHQsIHNpemUpOwotICBpZiAocmVzdWx0ID09IE5VTEwpIHsKLSAgICByZXR1cm4gRU5P
TUVNOwotICB9IGVsc2UgewotICAgICpyZXN1bHRfcHRyID0gcmVzdWx0OworICAgIHZvaWQqIHJl
c3VsdCA9IGRvTWVtYWxpZ24oYWxpZ24sIHNpemUpOworICAgIE1hbGxvY0hvb2s6Okludm9rZU5l
d0hvb2socmVzdWx0LCBzaXplKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIEVO
T01FTTsKKyAgICAqcmVzdWx0cHRyID0gcmVzdWx0OwogICAgIHJldHVybiAwOwotICB9CiB9CiAK
IHN0YXRpYyBzaXplX3QgcGFnZXNpemUgPSAwOwogCiBleHRlcm4gIkMiIHZvaWQqIHZhbGxvYyhz
aXplX3Qgc2l6ZSkgX19USFJPVyB7Ci0gIC8vIEFsbG9jYXRlIHBhZ2UtYWxpZ25lZCBvYmplY3Qg
b2YgbGVuZ3RoID49IHNpemUgYnl0ZXMKLSAgaWYgKHBhZ2VzaXplID09IDApIHBhZ2VzaXplID0g
Z2V0cGFnZXNpemUoKTsKLSAgdm9pZCogcmVzdWx0ID0gZG9fbWVtYWxpZ24ocGFnZXNpemUsIHNp
emUpOwotICBNYWxsb2NIb29rOjpJbnZva2VOZXdIb29rKHJlc3VsdCwgc2l6ZSk7Ci0gIHJldHVy
biByZXN1bHQ7CisgICAgLy8gQWxsb2NhdGUgcGFnZS1hbGlnbmVkIG9iamVjdCBvZiBsZW5ndGgg
Pj0gc2l6ZSBieXRlcworICAgIGlmICghcGFnZXNpemUpCisgICAgICAgIHBhZ2VzaXplID0gZ2V0
cGFnZXNpemUoKTsKKyAgICB2b2lkKiByZXN1bHQgPSBkb01lbWFsaWduKHBhZ2VzaXplLCBzaXpl
KTsKKyAgICBNYWxsb2NIb29rOjpJbnZva2VOZXdIb29rKHJlc3VsdCwgc2l6ZSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAogZXh0ZXJuICJDIiB2b2lkKiBwdmFsbG9jKHNpemVfdCBzaXplKSBf
X1RIUk9XIHsKLSAgLy8gUm91bmQgdXAgc2l6ZSB0byBhIG11bHRpcGxlIG9mIHBhZ2VzaXplCi0g
IGlmIChwYWdlc2l6ZSA9PSAwKSBwYWdlc2l6ZSA9IGdldHBhZ2VzaXplKCk7Ci0gIHNpemUgPSAo
c2l6ZSArIHBhZ2VzaXplIC0gMSkgJiB+KHBhZ2VzaXplIC0gMSk7Ci0gIHZvaWQqIHJlc3VsdCA9
IGRvX21lbWFsaWduKHBhZ2VzaXplLCBzaXplKTsKLSAgTWFsbG9jSG9vazo6SW52b2tlTmV3SG9v
ayhyZXN1bHQsIHNpemUpOwotICByZXR1cm4gcmVzdWx0OworICAgIC8vIFJvdW5kIHVwIHNpemUg
dG8gYSBtdWx0aXBsZSBvZiBwYWdlc2l6ZQorICAgIGlmICghcGFnZXNpemUpCisgICAgICAgIHBh
Z2VzaXplID0gZ2V0cGFnZXNpemUoKTsKKyAgICBzaXplID0gKHNpemUgKyBwYWdlc2l6ZSAtIDEp
ICYgfihwYWdlc2l6ZSAtIDEpOworICAgIHZvaWQqIHJlc3VsdCA9IGRvTWVtYWxpZ24ocGFnZXNp
emUsIHNpemUpOworICAgIE1hbGxvY0hvb2s6Okludm9rZU5ld0hvb2socmVzdWx0LCBzaXplKTsK
KyAgICByZXR1cm4gcmVzdWx0OwogfQogCi1leHRlcm4gIkMiIHZvaWQgbWFsbG9jX3N0YXRzKHZv
aWQpIHsKLSAgZG9fbWFsbG9jX3N0YXRzKCk7CitleHRlcm4gIkMiIHZvaWQgbWFsbG9jX3N0YXRz
KHZvaWQpCit7CisgICAgZG9NYWxsb2NTdGF0cygpOwogfQogCi1leHRlcm4gIkMiIGludCBtYWxs
b3B0KGludCBjbWQsIGludCB2YWx1ZSkgewotICByZXR1cm4gZG9fbWFsbG9wdChjbWQsIHZhbHVl
KTsKK2V4dGVybiAiQyIgaW50IG1hbGxvcHQoaW50IGNtZCwgaW50IHZhbHVlKQoreworICAgIHJl
dHVybiBkb01hbGxvcHQoY21kLCB2YWx1ZSk7CiB9CiAKICNpZmRlZiBIQVZFX1NUUlVDVF9NQUxM
SU5GTwotZXh0ZXJuICJDIiBzdHJ1Y3QgbWFsbGluZm8gbWFsbGluZm8odm9pZCkgewotICByZXR1
cm4gZG9fbWFsbGluZm8oKTsKK2V4dGVybiAiQyIgc3RydWN0IG1hbGxpbmZvIG1hbGxpbmZvKHZv
aWQpCit7CisgICAgcmV0dXJuIGRvTWFsbGluZm8oKTsKIH0KICNlbmRpZgogCiAvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KIC8vIFNvbWUgbGlicmFyeSByb3V0aW5lcyBvbiBSZWRIYXQgOSBhbGxvY2F0ZSBtZW1vcnkg
dXNpbmcgbWFsbG9jKCkKLS8vIGFuZCBmcmVlIGl0IHVzaW5nIF9fbGliY19mcmVlKCkgKG9yIHZp
Y2UtdmVyc2EpLiAgU2luY2Ugd2UgcHJvdmlkZQorLy8gYW5kIGZyZWUgaXQgdXNpbmcgX19saWJj
X2ZyZWUoKSAob3IgdmljZS12ZXJzYSkuIFNpbmNlIHdlIHByb3ZpZGUKIC8vIG91ciBvd24gaW1w
bGVtZW50YXRpb25zIG9mIG1hbGxvYy9mcmVlLCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0CiAv
LyB0aGUgX19saWJjX1hYWCB2YXJpYW50cyAoZGVmaW5lZCBhcyBwYXJ0IG9mIGdsaWJjKSBhbHNv
IHBvaW50IHRvCiAvLyB0aGUgc2FtZSBpbXBsZW1lbnRhdGlvbnMuCkBAIC00Mjk5LDExICs0NDEz
LDEwIEBAIGV4dGVybiAiQyIgewogLy8gVGhpcyBmdW5jdGlvbiBpcyBhbiBleGNlcHRpb24gdG8g
dGhlIHJ1bGUgb2YgY2FsbGluZyBNYWxsb2NIb29rIG1ldGhvZAogLy8gZnJvbSB0aGUgc3RhY2sg
ZnJhbWUgb2YgdGhlIGFsbG9jYXRpb24gZnVuY3Rpb247CiAvLyBoZWFwLWNoZWNrZXIgaGFuZGxl
cyB0aGlzIHNwZWNpYWwgY2FzZSBleHBsaWNpdGx5Lgotc3RhdGljIHZvaWQgKk1lbWFsaWduT3Zl
cnJpZGUoc2l6ZV90IGFsaWduLCBzaXplX3Qgc2l6ZSwgY29uc3Qgdm9pZCAqY2FsbGVyKQotICAg
IF9fVEhST1cgewotICB2b2lkKiByZXN1bHQgPSBkb19tZW1hbGlnbihhbGlnbiwgc2l6ZSk7Ci0g
IE1hbGxvY0hvb2s6Okludm9rZU5ld0hvb2socmVzdWx0LCBzaXplKTsKLSAgcmV0dXJuIHJlc3Vs
dDsKK3N0YXRpYyB2b2lkICpNZW1hbGlnbk92ZXJyaWRlKHNpemVfdCBhbGlnbiwgc2l6ZV90IHNp
emUsIGNvbnN0IHZvaWQgKmNhbGxlcikgX19USFJPVyB7CisgICAgdm9pZCogcmVzdWx0ID0gZG9N
ZW1hbGlnbihhbGlnbiwgc2l6ZSk7CisgICAgTWFsbG9jSG9vazo6SW52b2tlTmV3SG9vayhyZXN1
bHQsIHNpemUpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiB2b2lkICooKl9fbWVtYWxpZ25faG9v
aykoc2l6ZV90LCBzaXplX3QsIGNvbnN0IHZvaWQgKikgPSBNZW1hbGlnbk92ZXJyaWRlOwogCkBA
IC00MzE1LDEyICs0NDI4LDEyIEBAIHZvaWQgcmVsZWFzZUZhc3RNYWxsb2NGcmVlTWVtb3J5KCkK
ICAgICAvLyBGbHVzaCBmcmVlIHBhZ2VzIGluIHRoZSBjdXJyZW50IHRocmVhZCBjYWNoZSBiYWNr
IHRvIHRoZSBwYWdlIGhlYXAuCiAgICAgLy8gTG93IHdhdGVybWFyayBtZWNoYW5pc20gaW4gU2Nh
dmVuZ2UoKSBwcmV2ZW50cyBmdWxsIHJldHVybiBvbiB0aGUgZmlyc3QgcGFzcy4KICAgICAvLyBU
aGUgc2Vjb25kIHBhc3MgZmx1c2hlcyBldmVyeXRoaW5nLgotICAgIGlmIChUQ01hbGxvY19UaHJl
YWRDYWNoZSogdGhyZWFkQ2FjaGUgPSBUQ01hbGxvY19UaHJlYWRDYWNoZTo6R2V0Q2FjaGVJZlBy
ZXNlbnQoKSkgeworICAgIGlmIChUQ01hbGxvY1RocmVhZENhY2hlKiB0aHJlYWRDYWNoZSA9IFRD
TWFsbG9jVGhyZWFkQ2FjaGU6OkdldENhY2hlSWZQcmVzZW50KCkpIHsKICAgICAgICAgdGhyZWFk
Q2FjaGUtPlNjYXZlbmdlKCk7CiAgICAgICAgIHRocmVhZENhY2hlLT5TY2F2ZW5nZSgpOwogICAg
IH0KIAotICAgIFNwaW5Mb2NrSG9sZGVyIGgoJnBhZ2VoZWFwX2xvY2spOworICAgIFNwaW5Mb2Nr
SG9sZGVyIGgoJnBhZ2VoZWFwTG9jayk7CiAgICAgcGFnZWhlYXAtPlJlbGVhc2VGcmVlUGFnZXMo
KTsKIH0KICAgICAKQEAgLTQzMjgsMTggKzQ0NDEsMTggQEAgRmFzdE1hbGxvY1N0YXRpc3RpY3Mg
ZmFzdE1hbGxvY1N0YXRpc3RpYwogewogICAgIEZhc3RNYWxsb2NTdGF0aXN0aWNzIHN0YXRpc3Rp
Y3M7CiAKLSAgICBTcGluTG9ja0hvbGRlciBsb2NrSG9sZGVyKCZwYWdlaGVhcF9sb2NrKTsKKyAg
ICBTcGluTG9ja0hvbGRlciBsb2NrSG9sZGVyKCZwYWdlaGVhcExvY2spOwogICAgIHN0YXRpc3Rp
Y3MucmVzZXJ2ZWRWTUJ5dGVzID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihwYWdlaGVhcC0+U3lzdGVt
Qnl0ZXMoKSk7CiAgICAgc3RhdGlzdGljcy5jb21taXR0ZWRWTUJ5dGVzID0gc3RhdGlzdGljcy5y
ZXNlcnZlZFZNQnl0ZXMgLSBwYWdlaGVhcC0+UmV0dXJuZWRCeXRlcygpOwogCiAgICAgc3RhdGlz
dGljcy5mcmVlTGlzdEJ5dGVzID0gMDsKICAgICBmb3IgKHVuc2lnbmVkIGNsID0gMDsgY2wgPCBr
TnVtQ2xhc3NlczsgKytjbCkgewotICAgICAgICBjb25zdCBpbnQgbGVuZ3RoID0gY2VudHJhbF9j
YWNoZVtjbF0ubGVuZ3RoKCk7Ci0gICAgICAgIGNvbnN0IGludCB0Y19sZW5ndGggPSBjZW50cmFs
X2NhY2hlW2NsXS50Y19sZW5ndGgoKTsKKyAgICAgICAgY29uc3QgaW50IGxlbmd0aCA9IGNlbnRy
YWxDYWNoZVtjbF0ubGVuZ3RoKCk7CisgICAgICAgIGNvbnN0IGludCB0Y0xlbmd0aCA9IGNlbnRy
YWxDYWNoZVtjbF0udGNMZW5ndGgoKTsKIAotICAgICAgICBzdGF0aXN0aWNzLmZyZWVMaXN0Qnl0
ZXMgKz0gQnl0ZVNpemVGb3JDbGFzcyhjbCkgKiAobGVuZ3RoICsgdGNfbGVuZ3RoKTsKKyAgICAg
ICAgc3RhdGlzdGljcy5mcmVlTGlzdEJ5dGVzICs9IEJ5dGVTaXplRm9yQ2xhc3MoY2wpICogKGxl
bmd0aCArIHRjTGVuZ3RoKTsKICAgICB9Ci0gICAgZm9yIChUQ01hbGxvY19UaHJlYWRDYWNoZSog
dGhyZWFkQ2FjaGUgPSB0aHJlYWRfaGVhcHM7IHRocmVhZENhY2hlIDsgdGhyZWFkQ2FjaGUgPSB0
aHJlYWRDYWNoZS0+bmV4dF8pCisgICAgZm9yIChUQ01hbGxvY1RocmVhZENhY2hlKiB0aHJlYWRD
YWNoZSA9IHRocmVhZEhlYXBzOyB0aHJlYWRDYWNoZSA7IHRocmVhZENhY2hlID0gdGhyZWFkQ2Fj
aGUtPm5leHQpCiAgICAgICAgIHN0YXRpc3RpY3MuZnJlZUxpc3RCeXRlcyArPSB0aHJlYWRDYWNo
ZS0+U2l6ZSgpOwogCiAgICAgcmV0dXJuIHN0YXRpc3RpY3M7CkBAIC00MzQ4LDcgKzQ0NjEsNyBA
QCBGYXN0TWFsbG9jU3RhdGlzdGljcyBmYXN0TWFsbG9jU3RhdGlzdGljCiBzaXplX3QgZmFzdE1h
bGxvY1NpemUoY29uc3Qgdm9pZCogcHRyKQogewogI2lmIEVOQUJMRShXVEZfTUFMTE9DX1ZBTElE
QVRJT04pCi0gICAgcmV0dXJuIEludGVybmFsOjpmYXN0TWFsbG9jVmFsaWRhdGlvbkhlYWRlcihj
b25zdF9jYXN0PHZvaWQqPihwdHIpKS0+bV9zaXplOworICAgIHJldHVybiBJbnRlcm5hbDo6ZmFz
dE1hbGxvY1ZhbGlkYXRpb25IZWFkZXIoY29uc3RfY2FzdDx2b2lkKj4ocHRyKSktPm1zaXplOwog
I2Vsc2UKICAgICBjb25zdCBQYWdlSUQgcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihw
dHIpID4+IGtQYWdlU2hpZnQ7CiAgICAgU3Bhbiogc3BhbiA9IHBhZ2VoZWFwLT5HZXREZXNjcmlw
dG9yRW5zdXJlU2FmZShwKTsKQEAgLTQzNTYsNyArNDQ2OSw3IEBAIHNpemVfdCBmYXN0TWFsbG9j
U2l6ZShjb25zdCB2b2lkKiBwdHIpCiAgICAgaWYgKCFzcGFuIHx8IHNwYW4tPmZyZWUpCiAgICAg
ICAgIHJldHVybiAwOwogCi0gICAgZm9yICh2b2lkKiBmcmVlID0gc3Bhbi0+b2JqZWN0czsgZnJl
ZSAhPSBOVUxMOyBmcmVlID0gKigodm9pZCoqKSBmcmVlKSkgeworICAgIGZvciAodm9pZCogZnJl
ZSA9IHNwYW4tPm9iamVjdHM7IGZyZWU7IGZyZWUgPSAqKCh2b2lkKiopIGZyZWUpKSB7CiAgICAg
ICAgIGlmIChwdHIgPT0gZnJlZSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgIH0KQEAgLTQz
ODIsMTMgKzQ0OTUsMTMgQEAgcHVibGljOgogICAgIGJvb2wgaXNGcmVlT2JqZWN0KHZtX2FkZHJl
c3NfdCBwdHIpIGNvbnN0IHsgcmV0dXJuIGlzRnJlZU9iamVjdChyZWludGVycHJldF9jYXN0PHZv
aWQqPihwdHIpKTsgfQogICAgIHNpemVfdCBmcmVlT2JqZWN0Q291bnQoKSBjb25zdCB7IHJldHVy
biBtX2ZyZWVPYmplY3RzLnNpemUoKTsgfQogCi0gICAgdm9pZCBmaW5kRnJlZU9iamVjdHMoVENN
YWxsb2NfVGhyZWFkQ2FjaGUqIHRocmVhZENhY2hlKQorICAgIHZvaWQgZmluZEZyZWVPYmplY3Rz
KFRDTWFsbG9jVGhyZWFkQ2FjaGUqIHRocmVhZENhY2hlKQogICAgIHsKLSAgICAgICAgZm9yICg7
IHRocmVhZENhY2hlOyB0aHJlYWRDYWNoZSA9ICh0aHJlYWRDYWNoZS0+bmV4dF8gPyBtX3JlYWRl
cih0aHJlYWRDYWNoZS0+bmV4dF8pIDogMCkpCisgICAgICAgIGZvciAoOyB0aHJlYWRDYWNoZTsg
dGhyZWFkQ2FjaGUgPSAodGhyZWFkQ2FjaGUtPm5leHQgPyBtX3JlYWRlcih0aHJlYWRDYWNoZS0+
bmV4dCkgOiAwKSkKICAgICAgICAgICAgIHRocmVhZENhY2hlLT5lbnVtZXJhdGVGcmVlT2JqZWN0
cygqdGhpcywgbV9yZWFkZXIpOwogICAgIH0KIAotICAgIHZvaWQgZmluZEZyZWVPYmplY3RzKFRD
TWFsbG9jX0NlbnRyYWxfRnJlZUxpc3RQYWRkZWQqIGNlbnRyYWxGcmVlTGlzdCwgc2l6ZV90IG51
bVNpemVzLCBUQ01hbGxvY19DZW50cmFsX0ZyZWVMaXN0UGFkZGVkKiByZW1vdGVDZW50cmFsRnJl
ZUxpc3QpCisgICAgdm9pZCBmaW5kRnJlZU9iamVjdHMoVENNYWxsb2NDZW50cmFsRnJlZUxpc3RQ
YWRkZWQqIGNlbnRyYWxGcmVlTGlzdCwgc2l6ZV90IG51bVNpemVzLCBUQ01hbGxvY0NlbnRyYWxG
cmVlTGlzdFBhZGRlZCogcmVtb3RlQ2VudHJhbEZyZWVMaXN0KQogICAgIHsKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVNpemVzOyBpKyspCiAgICAgICAgICAgICBjZW50cmFs
RnJlZUxpc3RbaV0uZW51bWVyYXRlRnJlZU9iamVjdHMoKnRoaXMsIG1fcmVhZGVyLCByZW1vdGVD
ZW50cmFsRnJlZUxpc3QgKyBpKTsKQEAgLTQ0NjksNyArNDU4Miw3IEBAIHB1YmxpYzoKIAogICAg
ICAgICBWZWN0b3I8dm1fcmFuZ2VfdCwgMTAyND4gYWxsb2NhdGVkUG9pbnRlcnM7CiAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jb2FsZXNjZWRTcGFucy5zaXplKCk7ICsraSkgewot
ICAgICAgICAgICAgU3BhbiAqdGhlU3BhbiA9IG1fY29hbGVzY2VkU3BhbnNbaV07CisgICAgICAg
ICAgICBTcGFuKiB0aGVTcGFuID0gbV9jb2FsZXNjZWRTcGFuc1tpXTsKICAgICAgICAgICAgIGlm
ICh0aGVTcGFuLT5mcmVlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCkBAIC00NTg0LDE3
ICs0Njk3LDE3IEBAIGtlcm5fcmV0dXJuX3QgRmFzdE1hbGxvY1pvbmU6OmVudW1lcmF0ZSgKICAg
ICBJbml0U2l6ZUNsYXNzZXMoKTsKIAogICAgIEZhc3RNYWxsb2Nab25lKiBtem9uZSA9IG1lbW9y
eVJlYWRlcihyZWludGVycHJldF9jYXN0PEZhc3RNYWxsb2Nab25lKj4oem9uZUFkZHJlc3MpKTsK
LSAgICBUQ01hbGxvY19QYWdlSGVhcCogcGFnZUhlYXAgPSBtZW1vcnlSZWFkZXIobXpvbmUtPm1f
cGFnZUhlYXApOwotICAgIFRDTWFsbG9jX1RocmVhZENhY2hlKiogdGhyZWFkSGVhcHNQb2ludGVy
ID0gbWVtb3J5UmVhZGVyKG16b25lLT5tX3RocmVhZEhlYXBzKTsKLSAgICBUQ01hbGxvY19UaHJl
YWRDYWNoZSogdGhyZWFkSGVhcHMgPSBtZW1vcnlSZWFkZXIoKnRocmVhZEhlYXBzUG9pbnRlcik7
CisgICAgVENNYWxsb2NQYWdlSGVhcCogcGFnZUhlYXAgPSBtZW1vcnlSZWFkZXIobXpvbmUtPm1f
cGFnZUhlYXApOworICAgIFRDTWFsbG9jVGhyZWFkQ2FjaGUqKiB0aHJlYWRIZWFwc1BvaW50ZXIg
PSBtZW1vcnlSZWFkZXIobXpvbmUtPm1fdGhyZWFkSGVhcHMpOworICAgIFRDTWFsbG9jVGhyZWFk
Q2FjaGUqIHRocmVhZEhlYXBzID0gbWVtb3J5UmVhZGVyKCp0aHJlYWRIZWFwc1BvaW50ZXIpOwog
Ci0gICAgVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdFBhZGRlZCogY2VudHJhbENhY2hlcyA9IG1l
bW9yeVJlYWRlcihtem9uZS0+bV9jZW50cmFsQ2FjaGVzLCBzaXplb2YoVENNYWxsb2NfQ2VudHJh
bF9GcmVlTGlzdFBhZGRlZCkgKiBrTnVtQ2xhc3Nlcyk7CisgICAgVENNYWxsb2NDZW50cmFsRnJl
ZUxpc3RQYWRkZWQqIGNlbnRyYWxDYWNoZXMgPSBtZW1vcnlSZWFkZXIobXpvbmUtPm1fY2VudHJh
bENhY2hlcywgc2l6ZW9mKFRDTWFsbG9jQ2VudHJhbEZyZWVMaXN0UGFkZGVkKSAqIGtOdW1DbGFz
c2VzKTsKIAogICAgIEZyZWVPYmplY3RGaW5kZXIgZmluZGVyKG1lbW9yeVJlYWRlcik7CiAgICAg
ZmluZGVyLmZpbmRGcmVlT2JqZWN0cyh0aHJlYWRIZWFwcyk7CiAgICAgZmluZGVyLmZpbmRGcmVl
T2JqZWN0cyhjZW50cmFsQ2FjaGVzLCBrTnVtQ2xhc3NlcywgbXpvbmUtPm1fY2VudHJhbENhY2hl
cyk7CiAKLSAgICBUQ01hbGxvY19QYWdlSGVhcDo6UGFnZU1hcCogcGFnZU1hcCA9ICZwYWdlSGVh
cC0+cGFnZW1hcF87CisgICAgVENNYWxsb2NQYWdlSGVhcDo6UGFnZU1hcCogcGFnZU1hcCA9ICZw
YWdlSGVhcC0+cGFnZW1hcDsKICAgICBQYWdlTWFwRnJlZU9iamVjdEZpbmRlciBwYWdlTWFwRmlu
ZGVyKG1lbW9yeVJlYWRlciwgZmluZGVyKTsKICAgICBwYWdlTWFwLT52aXNpdFZhbHVlcyhwYWdl
TWFwRmluZGVyLCBtZW1vcnlSZWFkZXIpOwogCkBAIC00NjA2LDcgKzQ3MTksNyBAQCBrZXJuX3Jl
dHVybl90IEZhc3RNYWxsb2Nab25lOjplbnVtZXJhdGUoCiAgICAgcGFnZU1hcC0+dmlzaXRBbGxv
Y2F0aW9ucyhhZG1pblJlZ2lvblJlY29yZGVyLCBtZW1vcnlSZWFkZXIpOwogCiAgICAgUGFnZUhl
YXBBbGxvY2F0b3I8U3Bhbj4qIHNwYW5BbGxvY2F0b3IgPSBtZW1vcnlSZWFkZXIobXpvbmUtPm1f
c3BhbkFsbG9jYXRvcik7Ci0gICAgUGFnZUhlYXBBbGxvY2F0b3I8VENNYWxsb2NfVGhyZWFkQ2Fj
aGU+KiBwYWdlSGVhcEFsbG9jYXRvciA9IG1lbW9yeVJlYWRlcihtem9uZS0+bV9wYWdlSGVhcEFs
bG9jYXRvcik7CisgICAgUGFnZUhlYXBBbGxvY2F0b3I8VENNYWxsb2NUaHJlYWRDYWNoZT4qIHBh
Z2VIZWFwQWxsb2NhdG9yID0gbWVtb3J5UmVhZGVyKG16b25lLT5tX3BhZ2VIZWFwQWxsb2NhdG9y
KTsKIAogICAgIHNwYW5BbGxvY2F0b3ItPnJlY29yZEFkbWluaXN0cmF0aXZlUmVnaW9ucyhhZG1p
blJlZ2lvblJlY29yZGVyLCBtZW1vcnlSZWFkZXIpOwogICAgIHBhZ2VIZWFwQWxsb2NhdG9yLT5y
ZWNvcmRBZG1pbmlzdHJhdGl2ZVJlZ2lvbnMoYWRtaW5SZWdpb25SZWNvcmRlciwgbWVtb3J5UmVh
ZGVyKTsKQEAgLTQ2MzQsNyArNDc0Nyw3IEBAIHZvaWQqIEZhc3RNYWxsb2Nab25lOjp6b25lQ2Fs
bG9jKG1hbGxvY18KIHZvaWQgRmFzdE1hbGxvY1pvbmU6OnpvbmVGcmVlKG1hbGxvY196b25lX3Qq
LCB2b2lkKiBwdHIpCiB7CiAgICAgLy8gRHVlIHRvIDxyZGFyOi8vcHJvYmxlbS81NjcxMzU3PiB6
b25lRnJlZSBtYXkgYmUgY2FsbGVkIGJ5IHRoZSBzeXN0ZW0gZnJlZSBldmVuIGlmIHRoZSBwb2lu
dGVyCi0gICAgLy8gaXMgbm90IGluIHRoaXMgem9uZS4gIFdoZW4gdGhpcyBoYXBwZW5zLCB0aGUg
cG9pbnRlciBiZWluZyBmcmVlZCB3YXMgbm90IGFsbG9jYXRlZCBieSBhbnkKKyAgICAvLyBpcyBu
b3QgaW4gdGhpcyB6b25lLiBXaGVuIHRoaXMgaGFwcGVucywgdGhlIHBvaW50ZXIgYmVpbmcgZnJl
ZWQgd2FzIG5vdCBhbGxvY2F0ZWQgYnkgYW55CiAgICAgLy8gem9uZSBzbyB3ZSBuZWVkIHRvIHBy
aW50IGEgdXNlZnVsIGVycm9yIGZvciB0aGUgYXBwbGljYXRpb24gZGV2ZWxvcGVyLgogICAgIG1h
bGxvY19wcmludGYoIioqKiBlcnJvciBmb3Igb2JqZWN0ICVwOiBwb2ludGVyIGJlaW5nIGZyZWVk
IHdhcyBub3QgYWxsb2NhdGVkXG4iLCBwdHIpOwogfQpAQCAtNDY2NCw3ICs0Nzc3LDcgQEAgbWFs
bG9jX2ludHJvc3BlY3Rpb25fdCBqc2NvcmVfZmFzdG1hbGxvYwogICAgIH07CiB9CiAKLUZhc3RN
YWxsb2Nab25lOjpGYXN0TWFsbG9jWm9uZShUQ01hbGxvY19QYWdlSGVhcCogcGFnZUhlYXAsIFRD
TWFsbG9jX1RocmVhZENhY2hlKiogdGhyZWFkSGVhcHMsIFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxp
c3RQYWRkZWQqIGNlbnRyYWxDYWNoZXMsIFBhZ2VIZWFwQWxsb2NhdG9yPFNwYW4+KiBzcGFuQWxs
b2NhdG9yLCBQYWdlSGVhcEFsbG9jYXRvcjxUQ01hbGxvY19UaHJlYWRDYWNoZT4qIHBhZ2VIZWFw
QWxsb2NhdG9yKQorRmFzdE1hbGxvY1pvbmU6OkZhc3RNYWxsb2Nab25lKFRDTWFsbG9jUGFnZUhl
YXAqIHBhZ2VIZWFwLCBUQ01hbGxvY1RocmVhZENhY2hlKiogdGhyZWFkSGVhcHMsIFRDTWFsbG9j
Q2VudHJhbEZyZWVMaXN0UGFkZGVkKiBjZW50cmFsQ2FjaGVzLCBQYWdlSGVhcEFsbG9jYXRvcjxT
cGFuPiogc3BhbkFsbG9jYXRvciwgUGFnZUhlYXBBbGxvY2F0b3I8VENNYWxsb2NUaHJlYWRDYWNo
ZT4qIHBhZ2VIZWFwQWxsb2NhdG9yKQogICAgIDogbV9wYWdlSGVhcChwYWdlSGVhcCkKICAgICAs
IG1fdGhyZWFkSGVhcHModGhyZWFkSGVhcHMpCiAgICAgLCBtX2NlbnRyYWxDYWNoZXMoY2VudHJh
bENhY2hlcykKQEAgLTQ2ODgsNyArNDgwMSw3IEBAIEZhc3RNYWxsb2Nab25lOjpGYXN0TWFsbG9j
Wm9uZShUQ01hbGxvY18KIAogdm9pZCBGYXN0TWFsbG9jWm9uZTo6aW5pdCgpCiB7Ci0gICAgc3Rh
dGljIEZhc3RNYWxsb2Nab25lIHpvbmUocGFnZWhlYXAsICZ0aHJlYWRfaGVhcHMsIHN0YXRpY19j
YXN0PFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3RQYWRkZWQqPihjZW50cmFsX2NhY2hlKSwgJnNw
YW5fYWxsb2NhdG9yLCAmdGhyZWFkaGVhcF9hbGxvY2F0b3IpOworICAgIHN0YXRpYyBGYXN0TWFs
bG9jWm9uZSB6b25lKHBhZ2VoZWFwLCAmdGhyZWFkSGVhcHMsIHN0YXRpY19jYXN0PFRDTWFsbG9j
Q2VudHJhbEZyZWVMaXN0UGFkZGVkKj4oY2VudHJhbENhY2hlKSwgJnNwYW5BbGxvY2F0b3IsICZ0
aHJlYWRoZWFwQWxsb2NhdG9yKTsKIH0KIAogI2VuZGlmIC8vIE9TKERBUldJTikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>148814</attachid>
            <date>2012-06-21 09:04:19 -0700</date>
            <delta_ts>2012-11-13 13:00:36 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89608-20120621100320.patch</filename>
            <type>text/plain</type>
            <size>233613</size>
            <attacher name="Alex Christensen">alex.christensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxMjA4NzkpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE0MyBAQAorMjAxMi0wNi0yMCAgQWxleCBDaHJpc3RlbnNlbiAg
PGFsZXguY2hyaXN0ZW5zZW5AZmxleHNpbS5jb20+CisKKyAgICAgICAgRmFzdE1hbGxvYy5jcHAg
bmVlZHMgdG8gaGF2ZSBpdHMgc3R5bGUgdXBkYXRlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODk2MDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9GYXN0TWFsbG9jLmNwcDoKKyAgICAgICAgTWFk
ZSB0aGUgZmlsZSBzdHlsZSBjb25mb3JtYW50LgorICAgICAgICAoV1RGOjp0cnlGYXN0TWFsbG9j
KToKKyAgICAgICAgKFdURjo6dHJ5RmFzdENhbGxvYyk6CisgICAgICAgIChXVEY6OmZhc3RDYWxs
b2MpOgorICAgICAgICAoV1RGOjpmYXN0RnJlZSk6CisgICAgICAgIChXVEY6OnRyeUZhc3RSZWFs
bG9jKToKKyAgICAgICAgKFdURjo6ZmFzdE1hbGxvY1NpemUpOgorICAgICAgICAoV1RGKToKKyAg
ICAgICAgKEZhc3RNYWxsb2Nab25lKToKKyAgICAgICAgKFdURjo6S2VybmVsU3VwcG9ydHNUTFMp
OgorICAgICAgICAoV1RGOjpDaGVja0lmS2VybmVsU3VwcG9ydHNUTFMpOgorICAgICAgICAoV1RG
OjpDbGFzc0luZGV4KToKKyAgICAgICAgKFRDRW50cnkpOgorICAgICAgICAoV1RGOjpTTExfTmV4
dCk6CisgICAgICAgIChXVEY6OlNMTFNldE5leHQpOgorICAgICAgICAoV1RGOjpTTExQdXNoKToK
KyAgICAgICAgKFdURjo6U0xMUG9wKToKKyAgICAgICAgKFdURjo6U0xMUG9wUmFuZ2UpOgorICAg
ICAgICAoV1RGOjpTTExQdXNoUmFuZ2UpOgorICAgICAgICAoV1RGOjpTTExTaXplKToKKyAgICAg
ICAgKFdURjo6U2l6ZUNsYXNzKToKKyAgICAgICAgKFdURjo6Qnl0ZVNpemVGb3JDbGFzcyk6Cisg
ICAgICAgIChXVEY6Ok51bU1vdmVTaXplKToKKyAgICAgICAgKFdURjo6SW5pdFNpemVDbGFzc2Vz
KToKKyAgICAgICAgKFdURjo6TWV0YURhdGFBbGxvYyk6CisgICAgICAgIChQYWdlSGVhcEFsbG9j
YXRvcik6CisgICAgICAgIChXVEY6OlBhZ2VIZWFwQWxsb2NhdG9yOjpJbml0KToKKyAgICAgICAg
KFdURjo6UGFnZUhlYXBBbGxvY2F0b3I6Ok5ldyk6CisgICAgICAgIChXVEY6OlBhZ2VIZWFwQWxs
b2NhdG9yOjpEZWxldGUpOgorICAgICAgICAoV1RGOjpQYWdlSGVhcEFsbG9jYXRvcjo6aW51c2Up
OgorICAgICAgICAoV1RGOjpQYWdlSGVhcEFsbG9jYXRvcjo6cmVjb3JkQWRtaW5pc3RyYXRpdmVS
ZWdpb25zKToKKyAgICAgICAgKFdURjo6cGFnZXMpOgorICAgICAgICAoV1RGOjpBbGxvY2F0aW9u
U2l6ZSk6CisgICAgICAgIChTcGFuKToKKyAgICAgICAgKFdURjo6RXZlbnQpOgorICAgICAgICAo
V1RGOjpOZXdTcGFuKToKKyAgICAgICAgKFdURjo6RGVsZXRlU3Bhbik6CisgICAgICAgIChXVEY6
OkRMTEluaXQpOgorICAgICAgICAoV1RGOjpETExSZW1vdmUpOgorICAgICAgICAoV1RGOjpETExf
SXNFbXB0eSk6CisgICAgICAgIChXVEY6OkRMTExlbmd0aCk6CisgICAgICAgIChXVEY6OkRMTFBy
aW50KToKKyAgICAgICAgKFdURjo6RExMUHJlcGVuZCk6CisgICAgICAgIChTdGFja1RyYWNlKToK
KyAgICAgICAgKE1hcFNlbGVjdG9yKToKKyAgICAgICAgKFRDTWFsbG9jUGFnZUhlYXApOgorICAg
ICAgICAoV1RGOjpUQ01hbGxvY1BhZ2VIZWFwOjpHZXREZXNjcmlwdG9yKToKKyAgICAgICAgKFdU
Rjo6VENNYWxsb2NQYWdlSGVhcDo6R2V0RGVzY3JpcHRvckVuc3VyZVNhZmUpOgorICAgICAgICAo
V1RGOjpUQ01hbGxvY1BhZ2VIZWFwOjpTeXN0ZW1CeXRlcyk6CisgICAgICAgIChXVEY6OlRDTWFs
bG9jUGFnZUhlYXA6OkZyZWVCeXRlcyk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jUGFnZUhlYXA6
OkdldFNpemVDbGFzc0lmQ2FjaGVkKToKKyAgICAgICAgKFdURjo6VENNYWxsb2NQYWdlSGVhcDo6
Q2FjaGVTaXplQ2xhc3MpOgorICAgICAgICAoU3Bhbkxpc3QpOgorICAgICAgICAoV1RGOjpUQ01h
bGxvY1BhZ2VIZWFwOjpSZWNvcmRTcGFuKToKKyAgICAgICAgKFdURjo6VENNYWxsb2NQYWdlSGVh
cDo6aW5pdCk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jUGFnZUhlYXA6OmluaXRpYWxpemVTY2F2
ZW5nZXIpOgorICAgICAgICAoV1RGOjpUQ01hbGxvY1BhZ2VIZWFwOjppc1NjYXZlbmdlclN1c3Bl
bmRlZCk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jUGFnZUhlYXA6OnNjaGVkdWxlU2NhdmVuZ2Vy
KToKKyAgICAgICAgKFdURjo6VENNYWxsb2NQYWdlSGVhcDo6cmVzY2hlZHVsZVNjYXZlbmdlcik6
CisgICAgICAgIChXVEY6OlRDTWFsbG9jUGFnZUhlYXA6OnN1c3BlbmRTY2F2ZW5nZXIpOgorICAg
ICAgICAoV1RGOjpUQ01hbGxvY1BhZ2VIZWFwOjpzY2F2ZW5nZXJUaW1lckZpcmVkKToKKyAgICAg
ICAgKFdURjo6VENNYWxsb2NQYWdlSGVhcDo6cnVuU2NhdmVuZ2VyVGhyZWFkKToKKyAgICAgICAg
KFdURjo6VENNYWxsb2NQYWdlSGVhcDo6c2lnbmFsU2NhdmVuZ2VyKToKKyAgICAgICAgKFdURjo6
VENNYWxsb2NQYWdlSGVhcDo6c2NhdmVuZ2UpOgorICAgICAgICAoV1RGOjpUQ01hbGxvY1BhZ2VI
ZWFwOjpzaG91bGRTY2F2ZW5nZSk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jUGFnZUhlYXA6Ok5l
dyk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jUGFnZUhlYXA6OkFsbG9jTGFyZ2UpOgorICAgICAg
ICAoV1RGOjpUQ01hbGxvY1BhZ2VIZWFwOjpTcGxpdCk6CisgICAgICAgIChXVEY6OlRDTWFsbG9j
UGFnZUhlYXA6OkNhcnZlKToKKyAgICAgICAgKFdURjo6VENNYWxsb2NQYWdlSGVhcDo6RGVsZXRl
KToKKyAgICAgICAgKFdURjo6VENNYWxsb2NQYWdlSGVhcDo6SW5jcmVtZW50YWxTY2F2ZW5nZSk6
CisgICAgICAgIChXVEY6OlRDTWFsbG9jUGFnZUhlYXA6OlJlZ2lzdGVyU2l6ZUNsYXNzKToKKyAg
ICAgICAgKFdURjo6VENNYWxsb2NQYWdlSGVhcDo6UmV0dXJuZWRCeXRlcyk6CisgICAgICAgIChX
VEY6OlBhZ2VzVG9NQik6CisgICAgICAgIChXVEY6OlRDTWFsbG9jUGFnZUhlYXA6OkR1bXApOgor
ICAgICAgICAoV1RGOjpUQ01hbGxvY1BhZ2VIZWFwOjpHcm93SGVhcCk6CisgICAgICAgIChXVEY6
OlRDTWFsbG9jUGFnZUhlYXA6OkNoZWNrKToKKyAgICAgICAgKFdURjo6VENNYWxsb2NQYWdlSGVh
cDo6Q2hlY2tMaXN0KToKKyAgICAgICAgKFdURjo6VENNYWxsb2NQYWdlSGVhcDo6UmVsZWFzZUZy
ZWVMaXN0KToKKyAgICAgICAgKFdURjo6VENNYWxsb2NQYWdlSGVhcDo6UmVsZWFzZUZyZWVQYWdl
cyk6CisgICAgICAgIChUQ01hbGxvY1RocmVhZENhY2hlRnJlZUxpc3QpOgorICAgICAgICAoV1RG
OjpUQ01hbGxvY1RocmVhZENhY2hlRnJlZUxpc3Q6OkluaXQpOgorICAgICAgICAoV1RGOjpUQ01h
bGxvY1RocmVhZENhY2hlRnJlZUxpc3Q6Omxlbmd0aCk6CisgICAgICAgIChXVEY6OlRDTWFsbG9j
VGhyZWFkQ2FjaGVGcmVlTGlzdDo6ZW1wdHkpOgorICAgICAgICAoV1RGOjpUQ01hbGxvY1RocmVh
ZENhY2hlRnJlZUxpc3Q6Omxvd3dhdGVybWFyayk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jVGhy
ZWFkQ2FjaGVGcmVlTGlzdDo6Y2xlYXJMb3d3YXRlcm1hcmspOgorICAgICAgICAoV1RGOjpUQ01h
bGxvY1RocmVhZENhY2hlRnJlZUxpc3Q6OlB1c2gpOgorICAgICAgICAoV1RGOjpUQ01hbGxvY1Ro
cmVhZENhY2hlRnJlZUxpc3Q6OlB1c2hSYW5nZSk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jVGhy
ZWFkQ2FjaGVGcmVlTGlzdDo6UG9wUmFuZ2UpOgorICAgICAgICAoV1RGOjpUQ01hbGxvY1RocmVh
ZENhY2hlRnJlZUxpc3Q6OlBvcCk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jVGhyZWFkQ2FjaGVG
cmVlTGlzdDo6ZW51bWVyYXRlRnJlZU9iamVjdHMpOgorICAgICAgICAoVENNYWxsb2NUaHJlYWRD
YWNoZSk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jVGhyZWFkQ2FjaGU6OmZyZWVsaXN0bGVuZ3Ro
KToKKyAgICAgICAgKFdURjo6VENNYWxsb2NUaHJlYWRDYWNoZTo6U2l6ZSk6CisgICAgICAgIChX
VEY6OlRDTWFsbG9jVGhyZWFkQ2FjaGU6OmVudW1lcmF0ZUZyZWVPYmplY3RzKToKKyAgICAgICAg
KFRDTWFsbG9jQ2VudHJhbEZyZWVMaXN0KToKKyAgICAgICAgKFdURjo6VENNYWxsb2NDZW50cmFs
RnJlZUxpc3Q6Omxlbmd0aCk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jQ2VudHJhbEZyZWVMaXN0
Ojp0Y0xlbmd0aCk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jQ2VudHJhbEZyZWVMaXN0OjplbnVt
ZXJhdGVGcmVlT2JqZWN0cyk6CisgICAgICAgIChUQ01hbGxvY0NlbnRyYWxGcmVlTGlzdFBhZGRl
ZCk6CisgICAgICAgIChXVEY6OmdldFBhZ2VIZWFwKToKKyAgICAgICAgKFdURjo6VENNYWxsb2NQ
YWdlSGVhcDo6cGVyaW9kaWNTY2F2ZW5nZSk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jUGFnZUhl
YXA6OnNjYXZlbmdlclRocmVhZCk6CisgICAgICAgIChXVEY6OnNldFRocmVhZEhlYXApOgorICAg
ICAgICAoV1RGOjpUQ01hbGxvY0NlbnRyYWxGcmVlTGlzdDo6SW5pdCk6CisgICAgICAgIChXVEY6
OlRDTWFsbG9jQ2VudHJhbEZyZWVMaXN0OjpSZWxlYXNlTGlzdFRvU3BhbnMpOgorICAgICAgICAo
V1RGOjpUQ01hbGxvY0NlbnRyYWxGcmVlTGlzdDo6UmVsZWFzZVRvU3BhbnMpOgorICAgICAgICAo
V1RGOjpUQ01hbGxvY0NlbnRyYWxGcmVlTGlzdDo6RXZpY3RSYW5kb21TaXplQ2xhc3MpOgorICAg
ICAgICAoV1RGOjpUQ01hbGxvY0NlbnRyYWxGcmVlTGlzdDo6TWFrZUNhY2hlU3BhY2UpOgorICAg
ICAgICAoV1RGOjpUQ01hbGxvY0NlbnRyYWxGcmVlTGlzdDo6U2hyaW5rQ2FjaGUpOgorICAgICAg
ICAoV1RGOjpUQ01hbGxvY0NlbnRyYWxGcmVlTGlzdDo6SW5zZXJ0UmFuZ2UpOgorICAgICAgICAo
V1RGOjpUQ01hbGxvY0NlbnRyYWxGcmVlTGlzdDo6UmVtb3ZlUmFuZ2UpOgorICAgICAgICAoV1RG
OjpUQ01hbGxvY0NlbnRyYWxGcmVlTGlzdDo6RmV0Y2hGcm9tU3BhbnNTYWZlKToKKyAgICAgICAg
KFdURjo6VENNYWxsb2NDZW50cmFsRnJlZUxpc3Q6OkZldGNoRnJvbVNwYW5zKToKKyAgICAgICAg
KFdURjo6VENNYWxsb2NDZW50cmFsRnJlZUxpc3Q6OlBvcHVsYXRlKToKKyAgICAgICAgKFdURjo6
VENNYWxsb2NUaHJlYWRDYWNoZTo6U2FtcGxlQWxsb2NhdGlvbik6CisgICAgICAgIChXVEY6OlRD
TWFsbG9jVGhyZWFkQ2FjaGU6OkluaXQpOgorICAgICAgICAoV1RGOjpUQ01hbGxvY1RocmVhZENh
Y2hlOjpDbGVhbnVwKToKKyAgICAgICAgKFdURjo6VENNYWxsb2NUaHJlYWRDYWNoZTo6QWxsb2Nh
dGUpOgorICAgICAgICAoV1RGOjpUQ01hbGxvY1RocmVhZENhY2hlOjpEZWFsbG9jYXRlKToKKyAg
ICAgICAgKFdURjo6VENNYWxsb2NUaHJlYWRDYWNoZTo6RmV0Y2hGcm9tQ2VudHJhbENhY2hlKToK
KyAgICAgICAgKFdURjo6VENNYWxsb2NUaHJlYWRDYWNoZTo6UmVsZWFzZVRvQ2VudHJhbENhY2hl
KToKKyAgICAgICAgKFdURjo6VENNYWxsb2NUaHJlYWRDYWNoZTo6U2NhdmVuZ2UpOgorICAgICAg
ICAoV1RGOjpUQ01hbGxvY1RocmVhZENhY2hlOjpQaWNrTmV4dFNhbXBsZSk6CisgICAgICAgIChX
VEY6OlRDTWFsbG9jVGhyZWFkQ2FjaGU6OkluaXRNb2R1bGUpOgorICAgICAgICAoV1RGOjpUQ01h
bGxvY1RocmVhZENhY2hlOjpOZXdIZWFwKToKKyAgICAgICAgKFdURjo6VENNYWxsb2NUaHJlYWRD
YWNoZTo6R2V0VGhyZWFkSGVhcCk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jVGhyZWFkQ2FjaGU6
OkdldENhY2hlKToKKyAgICAgICAgKFdURjo6VENNYWxsb2NUaHJlYWRDYWNoZTo6R2V0Q2FjaGVJ
ZlByZXNlbnQpOgorICAgICAgICAoV1RGOjpUQ01hbGxvY1RocmVhZENhY2hlOjpJbml0VFNEKToK
KyAgICAgICAgKFdURjo6VENNYWxsb2NUaHJlYWRDYWNoZTo6Q3JlYXRlQ2FjaGVJZk5lY2Vzc2Fy
eSk6CisKIDIwMTItMDYtMTcgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAg
ICAgICBJdCBzaG91bGQgYmUgcG9zc2libGUgdG8gbG9vayBhdCBkaXNhc3NlbWJseQpJbmRleDog
U291cmNlL1dURi93dGYvRmFzdE1hbGxvYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvRmFzdE1hbGxvYy5jcHAJKHJldmlzaW9uIDEyMDg3OSkKKysrIFNvdXJjZS9XVEYvd3RmL0Zh
c3RNYWxsb2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MiwyOCArNDIsMjggQEAKIC8vICAgICBU
aGlzIGlzIHNhZmUgYmVjYXVzZSBlYWNoIHN1Y2ggbGlzdCBpcyBvbmx5IGFjY2Vzc2VkIGJ5IG9u
ZSB0aHJlYWQuCiAvLyAgMi4gV2UgaGF2ZSBhIGxvY2sgcGVyIGNlbnRyYWwgZnJlZS1saXN0LCBh
bmQgaG9sZCBpdCB3aGlsZSBtYW5pcHVsYXRpbmcKIC8vICAgICB0aGUgY2VudHJhbCBmcmVlIGxp
c3QgZm9yIGEgcGFydGljdWxhciBzaXplLgotLy8gIDMuIFRoZSBjZW50cmFsIHBhZ2UgYWxsb2Nh
dG9yIGlzIHByb3RlY3RlZCBieSAicGFnZWhlYXBfbG9jayIuCi0vLyAgNC4gVGhlIHBhZ2VtYXAg
KHdoaWNoIG1hcHMgZnJvbSBwYWdlLW51bWJlciB0byBkZXNjcmlwdG9yKSwKKy8vICAzLiBUaGUg
Y2VudHJhbCBwYWdlIGFsbG9jYXRvciBpcyBwcm90ZWN0ZWQgYnkgInBhZ2VoZWFwTG9jayIuCisv
LyAgNC4gVGhlIHBhZ2VNYXAgKHdoaWNoIG1hcHMgZnJvbSBwYWdlLW51bWJlciB0byBkZXNjcmlw
dG9yKSwKIC8vICAgICBjYW4gYmUgcmVhZCB3aXRob3V0IGhvbGRpbmcgYW55IGxvY2tzLCBhbmQg
d3JpdHRlbiB3aGlsZSBob2xkaW5nCi0vLyAgICAgdGhlICJwYWdlaGVhcF9sb2NrIi4KKy8vICAg
ICB0aGUgInBhZ2VoZWFwTG9jayIuCiAvLyAgNS4gVG8gaW1wcm92ZSBwZXJmb3JtYW5jZSwgYSBz
dWJzZXQgb2YgdGhlIGluZm9ybWF0aW9uIG9uZSBjYW4gZ2V0Ci0vLyAgICAgZnJvbSB0aGUgcGFn
ZW1hcCBpcyBjYWNoZWQgaW4gYSBkYXRhIHN0cnVjdHVyZSwgcGFnZW1hcF9jYWNoZV8sCi0vLyAg
ICAgdGhhdCBhdG9taWNhbGx5IHJlYWRzIGFuZCB3cml0ZXMgaXRzIGVudHJpZXMuICBUaGlzIGNh
Y2hlIGNhbiBiZQorLy8gICAgIGZyb20gdGhlIHBhZ2VNYXAgaXMgY2FjaGVkIGluIGEgZGF0YSBz
dHJ1Y3R1cmUsIHBhZ2VNYXBDYWNoZSwKKy8vICAgICB0aGF0IGF0b21pY2FsbHkgcmVhZHMgYW5k
IHdyaXRlcyBpdHMgZW50cmllcy4gVGhpcyBjYWNoZSBjYW4gYmUKIC8vICAgICByZWFkIGFuZCB3
cml0dGVuIHdpdGhvdXQgbG9ja2luZy4KIC8vCi0vLyAgICAgVGhpcyBtdWx0aS10aHJlYWRlZCBh
Y2Nlc3MgdG8gdGhlIHBhZ2VtYXAgaXMgc2FmZSBmb3IgZmFpcmx5Ci0vLyAgICAgc3VidGxlIHJl
YXNvbnMuICBXZSBiYXNpY2FsbHkgYXNzdW1lIHRoYXQgd2hlbiBhbiBvYmplY3QgWCBpcworLy8g
ICAgIFRoaXMgbXVsdGktdGhyZWFkZWQgYWNjZXNzIHRvIHRoZSBwYWdlTWFwIGlzIHNhZmUgZm9y
IGZhaXJseQorLy8gICAgIHN1YnRsZSByZWFzb25zLiBXZSBiYXNpY2FsbHkgYXNzdW1lIHRoYXQg
d2hlbiBhbiBvYmplY3QgWCBpcwogLy8gICAgIGFsbG9jYXRlZCBieSB0aHJlYWQgQSBhbmQgZGVh
bGxvY2F0ZWQgYnkgdGhyZWFkIEIsIHRoZXJlIG11c3QKIC8vICAgICBoYXZlIGJlZW4gYXBwcm9w
cmlhdGUgc3luY2hyb25pemF0aW9uIGluIHRoZSBoYW5kb2ZmIG9mIG9iamVjdAotLy8gICAgIFgg
ZnJvbSB0aHJlYWQgQSB0byB0aHJlYWQgQi4gIFRoZSBzYW1lIGxvZ2ljIGFwcGxpZXMgdG8gcGFn
ZW1hcF9jYWNoZV8uCisvLyAgICAgWCBmcm9tIHRocmVhZCBBIHRvIHRocmVhZCBCLiBUaGUgc2Ft
ZSBsb2dpYyBhcHBsaWVzIHRvIHBhZ2VNYXBDYWNoZS4KIC8vCiAvLyBUSEUgUEFHRUlELVRPLVNJ
WkVDTEFTUyBDQUNIRQotLy8gSG90IFBhZ2VJRC10by1zaXplY2xhc3MgbWFwcGluZ3MgYXJlIGhl
bGQgYnkgcGFnZW1hcF9jYWNoZV8uICBJZiB0aGlzIGNhY2hlCisvLyBIb3QgUGFnZUlELXRvLXNp
emVDbGFzcyBtYXBwaW5ncyBhcmUgaGVsZCBieSBwYWdlTWFwQ2FjaGUuIElmIHRoaXMgY2FjaGUK
IC8vIHJldHVybnMgMCBmb3IgYSBwYXJ0aWN1bGFyIFBhZ2VJRCB0aGVuIHRoYXQgbWVhbnMgIm5v
IGluZm9ybWF0aW9uLCIgbm90IHRoYXQKLS8vIHRoZSBzaXplY2xhc3MgaXMgMC4gIFRoZSBjYWNo
ZSBtYXkgaGF2ZSBzdGFsZSBpbmZvcm1hdGlvbiBmb3IgcGFnZXMgdGhhdCBkbwotLy8gbm90IGhv
bGQgdGhlIGJlZ2lubmluZyBvZiBhbnkgZnJlZSgpJ2FibGUgb2JqZWN0LiAgU3RhbGVuZXNzIGlz
IGVsaW1pbmF0ZWQKLS8vIGluIFBvcHVsYXRlKCkgZm9yIHBhZ2VzIHdpdGggc2l6ZWNsYXNzID4g
MCBvYmplY3RzLCBhbmQgaW4gZG9fbWFsbG9jKCkgYW5kCi0vLyBkb19tZW1hbGlnbigpIGZvciBh
bGwgb3RoZXIgcmVsZXZhbnQgcGFnZXMuCisvLyB0aGUgc2l6ZUNsYXNzIGlzIDAuIFRoZSBjYWNo
ZSBtYXkgaGF2ZSBzdGFsZSBpbmZvcm1hdGlvbiBmb3IgcGFnZXMgdGhhdCBkbworLy8gbm90IGhv
bGQgdGhlIGJlZ2lubmluZyBvZiBhbnkgZnJlZSgpJ2FibGUgb2JqZWN0LiBTdGFsZW5lc3MgaXMg
ZWxpbWluYXRlZAorLy8gaW4gUG9wdWxhdGUoKSBmb3IgcGFnZXMgd2l0aCBzaXplQ2xhc3MgPiAw
IG9iamVjdHMsIGFuZCBpbiBkb01hbGxvYygpIGFuZAorLy8gZG9NZW1hbGlnbigpIGZvciBhbGwg
b3RoZXIgcmVsZXZhbnQgcGFnZXMuCiAvLwogLy8gVE9ETzogQmlhcyByZWNsYW1hdGlvbiB0byBs
YXJnZXIgYWRkcmVzc2VzCiAvLyBUT0RPOiBpbXBsZW1lbnQgbWFsbGluZm8vbWFsbG9wdApAQCAt
Mjc0LDEzICsyNzQsMTMgQEAgdm9pZCogZmFzdE1hbGxvYyhzaXplX3QgbikKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCi1UcnlNYWxsb2NSZXR1cm5WYWx1ZSB0cnlGYXN0Q2FsbG9jKHNpemVfdCBu
X2VsZW1lbnRzLCBzaXplX3QgZWxlbWVudF9zaXplKQorVHJ5TWFsbG9jUmV0dXJuVmFsdWUgdHJ5
RmFzdENhbGxvYyhzaXplX3QgbkVsZW1lbnRzLCBzaXplX3QgZWxlbWVudHNpemUpCiB7CiAgICAg
QVNTRVJUKCFpc0ZvcmJpZGRlbigpKTsKIAogI2lmIEVOQUJMRShXVEZfTUFMTE9DX1ZBTElEQVRJ
T04pCi0gICAgc2l6ZV90IHRvdGFsQnl0ZXMgPSBuX2VsZW1lbnRzICogZWxlbWVudF9zaXplOwot
ICAgIGlmIChuX2VsZW1lbnRzID4gMSAmJiBlbGVtZW50X3NpemUgJiYgKHRvdGFsQnl0ZXMgLyBl
bGVtZW50X3NpemUpICE9IG5fZWxlbWVudHMpCisgICAgc2l6ZV90IHRvdGFsQnl0ZXMgPSBuRWxl
bWVudHMgKiBlbGVtZW50c2l6ZTsKKyAgICBpZiAobkVsZW1lbnRzID4gMSAmJiBlbGVtZW50c2l6
ZSAmJiAodG90YWxCeXRlcyAvIGVsZW1lbnRzaXplKSAhPSBuRWxlbWVudHMpCiAgICAgICAgIHJl
dHVybiAwOwogCiAgICAgVHJ5TWFsbG9jUmV0dXJuVmFsdWUgcmV0dXJuVmFsdWUgPSB0cnlGYXN0
TWFsbG9jKHRvdGFsQnl0ZXMpOwpAQCAtMjkxLDIxICsyOTEsMjEgQEAgVHJ5TWFsbG9jUmV0dXJu
VmFsdWUgdHJ5RmFzdENhbGxvYyhzaXplXwogICAgIGZhc3RNYWxsb2NWYWxpZGF0ZShyZXN1bHQp
OwogICAgIHJldHVybiByZXN1bHQ7CiAjZWxzZQotICAgIHJldHVybiBjYWxsb2Mobl9lbGVtZW50
cywgZWxlbWVudF9zaXplKTsKKyAgICByZXR1cm4gY2FsbG9jKG5FbGVtZW50cywgZWxlbWVudHNp
emUpOwogI2VuZGlmCiB9CiAKLXZvaWQqIGZhc3RDYWxsb2Moc2l6ZV90IG5fZWxlbWVudHMsIHNp
emVfdCBlbGVtZW50X3NpemUpCit2b2lkKiBmYXN0Q2FsbG9jKHNpemVfdCBuRWxlbWVudHMsIHNp
emVfdCBlbGVtZW50c2l6ZSkKIHsKICAgICBBU1NFUlQoIWlzRm9yYmlkZGVuKCkpOwogCiAjaWYg
RU5BQkxFKFdURl9NQUxMT0NfVkFMSURBVElPTikKLSAgICBUcnlNYWxsb2NSZXR1cm5WYWx1ZSBy
ZXR1cm5WYWx1ZSA9IHRyeUZhc3RDYWxsb2Mobl9lbGVtZW50cywgZWxlbWVudF9zaXplKTsKKyAg
ICBUcnlNYWxsb2NSZXR1cm5WYWx1ZSByZXR1cm5WYWx1ZSA9IHRyeUZhc3RDYWxsb2MobkVsZW1l
bnRzLCBlbGVtZW50c2l6ZSk7CiAgICAgdm9pZCogcmVzdWx0OwogICAgIGlmICghcmV0dXJuVmFs
dWUuZ2V0VmFsdWUocmVzdWx0KSkKICAgICAgICAgQ1JBU0goKTsKICNlbHNlCi0gICAgdm9pZCog
cmVzdWx0ID0gY2FsbG9jKG5fZWxlbWVudHMsIGVsZW1lbnRfc2l6ZSk7CisgICAgdm9pZCogcmVz
dWx0ID0gY2FsbG9jKG5FbGVtZW50cywgZWxlbWVudHNpemUpOwogI2VuZGlmCiAKICAgICBpZiAo
IXJlc3VsdCkKQEAgLTM4Nyw3ICszODcsNyBAQCBzaXplX3QgZmFzdE1hbGxvY1NpemUoY29uc3Qg
dm9pZCogcCkKICNpZiBFTkFCTEUoV1RGX01BTExPQ19WQUxJREFUSU9OKQogICAgIHJldHVybiBJ
bnRlcm5hbDo6ZmFzdE1hbGxvY1ZhbGlkYXRpb25IZWFkZXIoY29uc3RfY2FzdDx2b2lkKj4ocCkp
LT5tX3NpemU7CiAjZWxpZiBPUyhEQVJXSU4pCi0gICAgcmV0dXJuIG1hbGxvY19zaXplKHApOwor
ICAgIHJldHVybiBtYWxsb2NTaXplKHApOwogI2VsaWYgT1MoV0lORE9XUykKICAgICByZXR1cm4g
X21zaXplKGNvbnN0X2Nhc3Q8dm9pZCo+KHApKTsKICNlbHNlCkBAIC00NzIsMTcgKzQ3MiwxNyBA
QCBzdGF0aWMgdm9pZCogKCpwdGhyZWFkX2dldHNwZWNpZmljX2Z1bmN0CiAjZW5kaWYKIAogI2Rl
ZmluZSBERUZJTkVfVkFSSUFCTEUodHlwZSwgbmFtZSwgdmFsdWUsIG1lYW5pbmcpIFwKLSAgbmFt
ZXNwYWNlIEZMQUdfX25hbWVzcGFjZV9kb19ub3RfdXNlX2RpcmVjdGx5X3VzZV9ERUNMQVJFXyMj
dHlwZSMjX2luc3RlYWQgeyAgXAotICB0eXBlIEZMQUdTXyMjbmFtZSh2YWx1ZSk7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGNoYXIgRkxBR1Nfbm8jI25hbWU7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gIHVzaW5nIEZMQUdfX25hbWVzcGFjZV9kb19ub3RfdXNlX2RpcmVj
dGx5X3VzZV9ERUNMQVJFXyMjdHlwZSMjX2luc3RlYWQ6OkZMQUdTXyMjbmFtZQorICAgIG5hbWVz
cGFjZSBGTEFHX19uYW1lc3BhY2VfZG9fbm90X3VzZV9kaXJlY3RseV91c2VfREVDTEFSRV8jI3R5
cGUjI19pbnN0ZWFkIHsgIFwKKyAgICB0eXBlIEZMQUdTXyMjbmFtZSh2YWx1ZSk7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2hhciBGTEFHU19ubyMjbmFtZTsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgIHVzaW5nIEZMQUdfX25hbWVzcGFjZV9kb19ub3RfdXNl
X2RpcmVjdGx5X3VzZV9ERUNMQVJFXyMjdHlwZSMjX2luc3RlYWQ6OkZMQUdTXyMjbmFtZQogICAK
ICNkZWZpbmUgREVGSU5FX2ludDY0KG5hbWUsIHZhbHVlLCBtZWFuaW5nKSBcCi0gIERFRklORV9W
QVJJQUJMRShpbnQ2NF90LCBuYW1lLCB2YWx1ZSwgbWVhbmluZykKKyAgICBERUZJTkVfVkFSSUFC
TEUoaW50NjRfdCwgbmFtZSwgdmFsdWUsIG1lYW5pbmcpCiAgIAogI2RlZmluZSBERUZJTkVfZG91
YmxlKG5hbWUsIHZhbHVlLCBtZWFuaW5nKSBcCi0gIERFRklORV9WQVJJQUJMRShkb3VibGUsIG5h
bWUsIHZhbHVlLCBtZWFuaW5nKQorICAgIERFRklORV9WQVJJQUJMRShkb3VibGUsIG5hbWUsIHZh
bHVlLCBtZWFuaW5nKQogCiBuYW1lc3BhY2UgV1RGIHsKIApAQCAtNDk2LDkgKzQ5Niw5IEBAIG5h
bWVzcGFjZSBXVEYgewogCiAjaWYgT1MoREFSV0lOKQogc3RydWN0IFNwYW47Ci1jbGFzcyBUQ01h
bGxvY19DZW50cmFsX0ZyZWVMaXN0UGFkZGVkOwotY2xhc3MgVENNYWxsb2NfUGFnZUhlYXA7Ci1j
bGFzcyBUQ01hbGxvY19UaHJlYWRDYWNoZTsKK2NsYXNzIFRDTWFsbG9jQ2VudHJhbEZyZWVMaXN0
UGFkZGVkOworY2xhc3MgVENNYWxsb2NQYWdlSGVhcDsKK2NsYXNzIFRDTWFsbG9jVGhyZWFkQ2Fj
aGU7CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgUGFnZUhlYXBBbGxvY2F0b3I7CiAKIGNs
YXNzIEZhc3RNYWxsb2Nab25lIHsKQEAgLTUxNSwyMSArNTE1LDIxIEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgdm9pZCBzdGF0aXN0aWNzKG1hbGxvY196b25lX3QqLCBtYWxsb2Nfc3RhdGlzdGljc190
KiBzdGF0cykgeyBtZW1zZXQoc3RhdHMsIDAsIHNpemVvZihtYWxsb2Nfc3RhdGlzdGljc190KSk7
IH0KIAogcHJpdmF0ZToKLSAgICBGYXN0TWFsbG9jWm9uZShUQ01hbGxvY19QYWdlSGVhcCosIFRD
TWFsbG9jX1RocmVhZENhY2hlKiosIFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3RQYWRkZWQqLCBQ
YWdlSGVhcEFsbG9jYXRvcjxTcGFuPiosIFBhZ2VIZWFwQWxsb2NhdG9yPFRDTWFsbG9jX1RocmVh
ZENhY2hlPiopOworICAgIEZhc3RNYWxsb2Nab25lKFRDTWFsbG9jUGFnZUhlYXAqLCBUQ01hbGxv
Y1RocmVhZENhY2hlKiosIFRDTWFsbG9jQ2VudHJhbEZyZWVMaXN0UGFkZGVkKiwgUGFnZUhlYXBB
bGxvY2F0b3I8U3Bhbj4qLCBQYWdlSGVhcEFsbG9jYXRvcjxUQ01hbGxvY1RocmVhZENhY2hlPiop
OwogICAgIHN0YXRpYyBzaXplX3Qgc2l6ZShtYWxsb2Nfem9uZV90KiwgY29uc3Qgdm9pZCopOwog
ICAgIHN0YXRpYyB2b2lkKiB6b25lTWFsbG9jKG1hbGxvY196b25lX3QqLCBzaXplX3QpOwotICAg
IHN0YXRpYyB2b2lkKiB6b25lQ2FsbG9jKG1hbGxvY196b25lX3QqLCBzaXplX3QgbnVtSXRlbXMs
IHNpemVfdCBzaXplKTsKKyAgICBzdGF0aWMgdm9pZCogem9uZUNhbGxvYyhtYWxsb2Nfem9uZV90
Kiwgc2l6ZV90IG51bUl0ZW1zLCBzaXplX3QpOwogICAgIHN0YXRpYyB2b2lkIHpvbmVGcmVlKG1h
bGxvY196b25lX3QqLCB2b2lkKik7CiAgICAgc3RhdGljIHZvaWQqIHpvbmVSZWFsbG9jKG1hbGxv
Y196b25lX3QqLCB2b2lkKiwgc2l6ZV90KTsKICAgICBzdGF0aWMgdm9pZCogem9uZVZhbGxvYyht
YWxsb2Nfem9uZV90Kiwgc2l6ZV90KSB7IExPR19FUlJPUigidmFsbG9jIGlzIG5vdCBzdXBwb3J0
ZWQiKTsgcmV0dXJuIDA7IH0KICAgICBzdGF0aWMgdm9pZCB6b25lRGVzdHJveShtYWxsb2Nfem9u
ZV90KikgeyB9CiAKICAgICBtYWxsb2Nfem9uZV90IG1fem9uZTsKLSAgICBUQ01hbGxvY19QYWdl
SGVhcCogbV9wYWdlSGVhcDsKLSAgICBUQ01hbGxvY19UaHJlYWRDYWNoZSoqIG1fdGhyZWFkSGVh
cHM7Ci0gICAgVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdFBhZGRlZCogbV9jZW50cmFsQ2FjaGVz
OworICAgIFRDTWFsbG9jUGFnZUhlYXAqIG1fcGFnZUhlYXA7CisgICAgVENNYWxsb2NUaHJlYWRD
YWNoZSoqIG1fdGhyZWFkSGVhcHM7CisgICAgVENNYWxsb2NDZW50cmFsRnJlZUxpc3RQYWRkZWQq
IG1fY2VudHJhbENhY2hlczsKICAgICBQYWdlSGVhcEFsbG9jYXRvcjxTcGFuPiogbV9zcGFuQWxs
b2NhdG9yOwotICAgIFBhZ2VIZWFwQWxsb2NhdG9yPFRDTWFsbG9jX1RocmVhZENhY2hlPiogbV9w
YWdlSGVhcEFsbG9jYXRvcjsKKyAgICBQYWdlSGVhcEFsbG9jYXRvcjxUQ01hbGxvY1RocmVhZENh
Y2hlPiogbV9wYWdlSGVhcEFsbG9jYXRvcjsKIH07CiAKICNlbmRpZgpAQCAtNTM3LDcgKzUzNyw3
IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogI2lmbmRlZiBXVEZfQ0hBTkdFUwotLy8gVGhpcyAjaWZk
ZWYgc2hvdWxkIGFsbW9zdCBuZXZlciBiZSBzZXQuICBTZXQgTk9fVENNQUxMT0NfU0FNUExFUyBp
ZgorLy8gVGhpcyAjaWZkZWYgc2hvdWxkIGFsbW9zdCBuZXZlciBiZSBzZXQuIFNldCBOT19UQ01B
TExPQ19TQU1QTEVTIGlmCiAvLyB5b3UncmUgcG9ydGluZyB0byBhIHN5c3RlbSB3aGVyZSB5b3Ug
cmVhbGx5IGNhbid0IGdldCBhIHN0YWNrdHJhY2UuCiAjaWZkZWYgTk9fVENNQUxMT0NfU0FNUExF
UwogLy8gV2UgdXNlICNkZWZpbmUgc28gY29kZSBjb21waWxlcyBldmVuIGlmIHlvdSAjaW5jbHVk
ZSBzdGFja3RyYWNlLmggc29tZWhvdy4KQEAgLTU0OCw0NyArNTQ4LDQ5IEBAIHByaXZhdGU6CiAj
ZW5kaWYKIAogLy8gRXZlbiBpZiB3ZSBoYXZlIHN1cHBvcnQgZm9yIHRocmVhZC1sb2NhbCBzdG9y
YWdlIGluIHRoZSBjb21waWxlcgotLy8gYW5kIGxpbmtlciwgdGhlIE9TIG1heSBub3Qgc3VwcG9y
dCBpdC4gIFdlIG5lZWQgdG8gY2hlY2sgdGhhdCBhdAotLy8gcnVudGltZS4gIFJpZ2h0IG5vdywg
d2UgaGF2ZSB0byBrZWVwIGEgbWFudWFsIHNldCBvZiAiYmFkIiBPU2VzLgorLy8gYW5kIGxpbmtl
ciwgdGhlIE9TIG1heSBub3Qgc3VwcG9ydCBpdC4gV2UgbmVlZCB0byBjaGVjayB0aGF0IGF0Cisv
LyBydW50aW1lLiBSaWdodCBub3csIHdlIGhhdmUgdG8ga2VlcCBhIG1hbnVhbCBzZXQgb2YgImJh
ZCIgT1Nlcy4KICNpZiBkZWZpbmVkKEhBVkVfVExTKQotICBzdGF0aWMgYm9vbCBrZXJuZWxfc3Vw
cG9ydHNfdGxzID0gZmFsc2U7ICAgICAgLy8gYmUgY29uc2VydmF0aXZlCi0gIHN0YXRpYyBpbmxp
bmUgYm9vbCBLZXJuZWxTdXBwb3J0c1RMUygpIHsKLSAgICByZXR1cm4ga2VybmVsX3N1cHBvcnRz
X3RsczsKLSAgfQotIyBpZiAhSEFWRV9ERUNMX1VOQU1FICAgLy8gaWYgdG9vIG9sZCBmb3IgdW5h
bWUsIHByb2JhYmx5IHRvbyBvbGQgZm9yIFRMUwotICAgIHN0YXRpYyB2b2lkIENoZWNrSWZLZXJu
ZWxTdXBwb3J0c1RMUygpIHsKLSAgICAgIGtlcm5lbF9zdXBwb3J0c190bHMgPSBmYWxzZTsKLSAg
ICB9CitzdGF0aWMgYm9vbCBrZXJuZWxTdXBwb3J0c1RscyA9IGZhbHNlOyAvLyBiZSBjb25zZXJ2
YXRpdmUKK3N0YXRpYyBpbmxpbmUgYm9vbCBLZXJuZWxTdXBwb3J0c1RMUygpCit7CisgICAgcmV0
dXJuIGtlcm5lbFN1cHBvcnRzVGxzOworfQorIyBpZiAhSEFWRV9ERUNMX1VOQU1FIC8vIGlmIHRv
byBvbGQgZm9yIHVuYW1lLCBwcm9iYWJseSB0b28gb2xkIGZvciBUTFMKK3N0YXRpYyB2b2lkIENo
ZWNrSWZLZXJuZWxTdXBwb3J0c1RMUygpCit7CisgICAga2VybmVsU3VwcG9ydHNUbHMgPSBmYWxz
ZTsKK30KICMgZWxzZQotIyAgIGluY2x1ZGUgPHN5cy91dHNuYW1lLmg+ICAgIC8vIERFQ0xfVU5B
TUUgY2hlY2tlZCBmb3IgPHN5cy91dHNuYW1lLmg+IHRvbwotICAgIHN0YXRpYyB2b2lkIENoZWNr
SWZLZXJuZWxTdXBwb3J0c1RMUygpIHsKLSAgICAgIHN0cnVjdCB1dHNuYW1lIGJ1ZjsKLSAgICAg
IGlmICh1bmFtZSgmYnVmKSAhPSAwKSB7ICAgLy8gc2hvdWxkIGJlIGltcG9zc2libGUKKyMgaW5j
bHVkZSA8c3lzL3V0c25hbWUuaD4gLy8gREVDTF9VTkFNRSBjaGVja2VkIGZvciA8c3lzL3V0c25h
bWUuaD4gdG9vCitzdGF0aWMgdm9pZCBDaGVja0lmS2VybmVsU3VwcG9ydHNUTFMoKQoreworICAg
IHN0cnVjdCB1dHNuYW1lIGJ1ZjsKKyAgICBpZiAodW5hbWUoJmJ1ZikpIHsgLy8gc2hvdWxkIGJl
IGltcG9zc2libGUKICAgICAgICAgTUVTU0FHRSgidW5hbWUgZmFpbGVkIGFzc3VtaW5nIG5vIFRM
UyBzdXBwb3J0IChlcnJubz0lZClcbiIsIGVycm5vKTsKLSAgICAgICAga2VybmVsX3N1cHBvcnRz
X3RscyA9IGZhbHNlOwotICAgICAgfSBlbHNlIGlmIChzdHJjYXNlY21wKGJ1Zi5zeXNuYW1lLCAi
bGludXgiKSA9PSAwKSB7CisgICAgICAgIGtlcm5lbFN1cHBvcnRzVGxzID0gZmFsc2U7CisgICAg
fSBlbHNlIGlmICghc3RyY2FzZWNtcChidWYuc3lzbmFtZSwgImxpbnV4IikpIHsKICAgICAgICAg
Ly8gVGhlIGxpbnV4IGNhc2U6IHRoZSBmaXJzdCBrZXJuZWwgdG8gc3VwcG9ydCBUTFMgd2FzIDIu
Ni4wCi0gICAgICAgIGlmIChidWYucmVsZWFzZVswXSA8ICcyJyAmJiBidWYucmVsZWFzZVsxXSA9
PSAnLicpICAgIC8vIDAueCBvciAxLngKLSAgICAgICAgICBrZXJuZWxfc3VwcG9ydHNfdGxzID0g
ZmFsc2U7Ci0gICAgICAgIGVsc2UgaWYgKGJ1Zi5yZWxlYXNlWzBdID09ICcyJyAmJiBidWYucmVs
ZWFzZVsxXSA9PSAnLicgJiYKLSAgICAgICAgICAgICAgICAgYnVmLnJlbGVhc2VbMl0gPj0gJzAn
ICYmIGJ1Zi5yZWxlYXNlWzJdIDwgJzYnICYmCi0gICAgICAgICAgICAgICAgIGJ1Zi5yZWxlYXNl
WzNdID09ICcuJykgICAgICAgICAgICAgICAgICAgICAgIC8vIDIuMCAtIDIuNQotICAgICAgICAg
IGtlcm5lbF9zdXBwb3J0c190bHMgPSBmYWxzZTsKKyAgICAgICAgaWYgKGJ1Zi5yZWxlYXNlWzBd
IDwgJzInICYmIGJ1Zi5yZWxlYXNlWzFdID09ICcuJykgLy8gMC54IG9yIDEueAorICAgICAgICAg
ICAga2VybmVsU3VwcG9ydHNUbHMgPSBmYWxzZTsKKyAgICAgICAgZWxzZSBpZiAoYnVmLnJlbGVh
c2VbMF0gPT0gJzInICYmIGJ1Zi5yZWxlYXNlWzFdID09ICcuJworICAgICAgICAgICAgICAgICYm
IGJ1Zi5yZWxlYXNlWzJdID49ICcwJyAmJiBidWYucmVsZWFzZVsyXSA8ICc2JworICAgICAgICAg
ICAgICAgICYmIGJ1Zi5yZWxlYXNlWzNdID09ICcuJykgLy8gMi4wIC0gMi41CisgICAgICAgICAg
ICBrZXJuZWxTdXBwb3J0c1RscyA9IGZhbHNlOwogICAgICAgICBlbHNlCi0gICAgICAgICAga2Vy
bmVsX3N1cHBvcnRzX3RscyA9IHRydWU7Ci0gICAgICB9IGVsc2UgeyAgICAgICAgLy8gc29tZSBv
dGhlciBrZXJuZWwsIHdlJ2xsIGJlIG9wdGltaXNpdGljCi0gICAgICAgIGtlcm5lbF9zdXBwb3J0
c190bHMgPSB0cnVlOwotICAgICAgfQotICAgICAgLy8gVE9ETyhjc2lsdmVycyk6IFZMT0coMSkg
dGhlIHRscyBzdGF0dXMgb25jZSB3ZSBzdXBwb3J0IFJBV19WTE9HCi0gICAgfQotIyAgZW5kaWYg
IC8vIEhBVkVfREVDTF9VTkFNRQotI2VuZGlmICAgIC8vIEhBVkVfVExTCisgICAgICAgICAgICBr
ZXJuZWxTdXBwb3J0c1RscyA9IHRydWU7CisgICAgfSBlbHNlIC8vIHNvbWUgb3RoZXIga2VybmVs
LCB3ZSdsbCBiZSBvcHRpbWlzaXRpYworICAgICAgICBrZXJuZWxTdXBwb3J0c1RscyA9IHRydWU7
CisgICAgLy8gVE9ETyhjc2lsdmVycyk6IFZMT0coMSkgdGhlIHRscyBzdGF0dXMgb25jZSB3ZSBz
dXBwb3J0IFJBV19WTE9HCit9CisjZW5kaWYgLy8gSEFWRV9ERUNMX1VOQU1FCisjZW5kaWYgLy8g
SEFWRV9UTFMKIAotLy8gX19USFJPVyBpcyBkZWZpbmVkIGluIGdsaWJjIHN5c3RlbXMuICBJdCBt
ZWFucywgY291bnRlci1pbnR1aXRpdmVseSwKLS8vICJUaGlzIGZ1bmN0aW9uIHdpbGwgbmV2ZXIg
dGhyb3cgYW4gZXhjZXB0aW9uLiIgIEl0J3MgYW4gb3B0aW9uYWwKKy8vIF9fVEhST1cgaXMgZGVm
aW5lZCBpbiBnbGliYyBzeXN0ZW1zLiBJdCBtZWFucywgY291bnRlci1pbnR1aXRpdmVseSwKKy8v
ICJUaGlzIGZ1bmN0aW9uIHdpbGwgbmV2ZXIgdGhyb3cgYW4gZXhjZXB0aW9uLiIgSXQncyBhbiBv
cHRpb25hbAogLy8gb3B0aW1pemF0aW9uIHRvb2wsIGJ1dCB3ZSBtYXkgbmVlZCB0byB1c2UgaXQg
dG8gbWF0Y2ggZ2xpYmMgcHJvdG90eXBlcy4KLSNpZm5kZWYgX19USFJPVyAgICAvLyBJIGd1ZXNz
IHdlJ3JlIG5vdCBvbiBhIGdsaWJjIHN5c3RlbQotIyBkZWZpbmUgX19USFJPVyAgIC8vIF9fVEhS
T1cgaXMganVzdCBhbiBvcHRpbWl6YXRpb24sIHNvIG9rIHRvIG1ha2UgaXQgIiIKKyNpZm5kZWYg
X19USFJPVyAvLyBJIGd1ZXNzIHdlJ3JlIG5vdCBvbiBhIGdsaWJjIHN5c3RlbQorI2RlZmluZSBf
X1RIUk9XIC8vIF9fVEhST1cgaXMganVzdCBhbiBvcHRpbWl6YXRpb24sIHNvIG9rIHRvIG1ha2Ug
aXQgIiIKICNlbmRpZgogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTU5Niw3ICs1OTgsNyBAQCBwcml2YXRl
OgogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCiAKIC8vIE5vdCBhbGwgcG9zc2libGUgY29tYmluYXRpb25zIG9mIHRo
ZSBmb2xsb3dpbmcgcGFyYW1ldGVycyBtYWtlCi0vLyBzZW5zZS4gIEluIHBhcnRpY3VsYXIsIGlm
IGtNYXhTaXplIGluY3JlYXNlcywgeW91IG1heSBoYXZlIHRvCisvLyBzZW5zZS4gSW4gcGFydGlj
dWxhciwgaWYga01heFNpemUgaW5jcmVhc2VzLCB5b3UgbWF5IGhhdmUgdG8KIC8vIGluY3JlYXNl
IGtOdW1DbGFzc2VzIGFzIHdlbGwuCiBzdGF0aWMgY29uc3Qgc2l6ZV90IGtQYWdlU2hpZnQgID0g
MTI7CiBzdGF0aWMgY29uc3Qgc2l6ZV90IGtQYWdlU2l6ZSAgID0gMSA8PCBrUGFnZVNoaWZ0OwpA
QCAtNjA1LDI4ICs2MDcsMjggQEAgc3RhdGljIGNvbnN0IHNpemVfdCBrQWxpZ25TaGlmdCA9IDM7
CiBzdGF0aWMgY29uc3Qgc2l6ZV90IGtBbGlnbm1lbnQgID0gMSA8PCBrQWxpZ25TaGlmdDsKIHN0
YXRpYyBjb25zdCBzaXplX3Qga051bUNsYXNzZXMgPSA2ODsKIAotLy8gQWxsb2NhdGVzIGEgYmln
IGJsb2NrIG9mIG1lbW9yeSBmb3IgdGhlIHBhZ2VtYXAgb25jZSB3ZSByZWFjaCBtb3JlIHRoYW4K
Ky8vIEFsbG9jYXRlcyBhIGJpZyBibG9jayBvZiBtZW1vcnkgZm9yIHRoZSBwYWdlTWFwIG9uY2Ug
d2UgcmVhY2ggbW9yZSB0aGFuCiAvLyAxMjhNQgogc3RhdGljIGNvbnN0IHNpemVfdCBrUGFnZU1h
cEJpZ0FsbG9jYXRpb25UaHJlc2hvbGQgPSAxMjggPDwgMjA7CiAKLS8vIE1pbmltdW0gbnVtYmVy
IG9mIHBhZ2VzIHRvIGZldGNoIGZyb20gc3lzdGVtIGF0IGEgdGltZS4gIE11c3QgYmUKKy8vIE1p
bmltdW0gbnVtYmVyIG9mIHBhZ2VzIHRvIGZldGNoIGZyb20gc3lzdGVtIGF0IGEgdGltZS4gTXVz
dCBiZQogLy8gc2lnbmlmaWNhbnRseSBiaWdnZXIgdGhhbiBrUGFnZVNpemUgdG8gYW1vcnRpemUg
c3lzdGVtLWNhbGwKLS8vIG92ZXJoZWFkLCBhbmQgYWxzbyB0byByZWR1Y2UgZXh0ZXJuYWwgZnJh
Z2VtZW50YXRpb24uICBBbHNvLCB3ZQorLy8gb3ZlcmhlYWQsIGFuZCBhbHNvIHRvIHJlZHVjZSBl
eHRlcm5hbCBmcmFnZW1lbnRhdGlvbi4gQWxzbywgd2UKIC8vIHNob3VsZCBrZWVwIHRoaXMgdmFs
dWUgYmlnIGJlY2F1c2UgdmFyaW91cyBpbmNhcm5hdGlvbnMgb2YgTGludXgKIC8vIGhhdmUgc21h
bGwgbGltaXRzIG9uIHRoZSBudW1iZXIgb2YgbW1hcCgpIHJlZ2lvbnMgcGVyCiAvLyBhZGRyZXNz
LXNwYWNlLgogc3RhdGljIGNvbnN0IHNpemVfdCBrTWluU3lzdGVtQWxsb2MgPSAxIDw8ICgyMCAt
IGtQYWdlU2hpZnQpOwogCiAvLyBOdW1iZXIgb2Ygb2JqZWN0cyB0byBtb3ZlIGJldHdlZW4gYSBw
ZXItdGhyZWFkIGxpc3QgYW5kIGEgY2VudHJhbAotLy8gbGlzdCBpbiBvbmUgc2hvdC4gIFdlIHdh
bnQgdGhpcyB0byBiZSBub3QgdG9vIHNtYWxsIHNvIHdlIGNhbgotLy8gYW1vcnRpemUgdGhlIGxv
Y2sgb3ZlcmhlYWQgZm9yIGFjY2Vzc2luZyB0aGUgY2VudHJhbCBsaXN0LiAgTWFraW5nCisvLyBs
aXN0IGluIG9uZSBzaG90LiBXZSB3YW50IHRoaXMgdG8gYmUgbm90IHRvbyBzbWFsbCBzbyB3ZSBj
YW4KKy8vIGFtb3J0aXplIHRoZSBsb2NrIG92ZXJoZWFkIGZvciBhY2Nlc3NpbmcgdGhlIGNlbnRy
YWwgbGlzdC4gTWFraW5nCiAvLyBpdCB0b28gYmlnIG1heSB0ZW1wb3JhcmlseSBjYXVzZSB1bm5l
Y2Vzc2FyeSBtZW1vcnkgd2FzdGFnZSBpbiB0aGUKIC8vIHBlci10aHJlYWQgZnJlZSBsaXN0IHVu
dGlsIHRoZSBzY2F2ZW5nZXIgY2xlYW5zIHVwIHRoZSBsaXN0Lgotc3RhdGljIGludCBudW1fb2Jq
ZWN0c190b19tb3ZlW2tOdW1DbGFzc2VzXTsKK3N0YXRpYyBpbnQgbnVtT2JqZWN0c1RvTW92ZVtr
TnVtQ2xhc3Nlc107CiAKIC8vIE1heGltdW0gbGVuZ3RoIHdlIGFsbG93IGEgcGVyLXRocmVhZCBm
cmVlLWxpc3QgdG8gaGF2ZSBiZWZvcmUgd2UKLS8vIG1vdmUgb2JqZWN0cyBmcm9tIGl0IGludG8g
dGhlIGNvcnJlc3BvbmRpbmcgY2VudHJhbCBmcmVlLWxpc3QuICBXZQotLy8gd2FudCB0aGlzIGJp
ZyB0byBhdm9pZCBsb2NraW5nIHRoZSBjZW50cmFsIGZyZWUtbGlzdCB0b28gb2Z0ZW4uICBJdAor
Ly8gbW92ZSBvYmplY3RzIGZyb20gaXQgaW50byB0aGUgY29ycmVzcG9uZGluZyBjZW50cmFsIGZy
ZWUtbGlzdC4gV2UKKy8vIHdhbnQgdGhpcyBiaWcgdG8gYXZvaWQgbG9ja2luZyB0aGUgY2VudHJh
bCBmcmVlLWxpc3QgdG9vIG9mdGVuLiBJdAogLy8gc2hvdWxkIG5vdCBodXJ0IHRvIG1ha2UgdGhp
cyBsaXN0IHNvbWV3aGF0IGJpZyBiZWNhdXNlIHRoZQogLy8gc2NhdmVuZ2luZyBjb2RlIHdpbGwg
c2hyaW5rIGl0IGRvd24gd2hlbiBpdHMgY29udGVudHMgYXJlIG5vdCBpbiB1c2UuCiBzdGF0aWMg
Y29uc3QgaW50IGtNYXhGcmVlTGlzdExlbmd0aCA9IDI1NjsKQEAgLTY0Nyw3ICs2NDksNyBAQCBz
dGF0aWMgY29uc3Qgc2l6ZV90IGtEZWZhdWx0T3ZlcmFsbFRocmVhCiBzdGF0aWMgY29uc3Qgc2l6
ZV90IGtNYXhQYWdlcyA9IGtNaW5TeXN0ZW1BbGxvYzsKIAogLyogVGhlIHNtYWxsZXN0IHByaW1l
ID4gMl5uICovCi1zdGF0aWMgaW50IHByaW1lc19saXN0W10gPSB7CitzdGF0aWMgaW50IHByaW1l
c0xpc3RbXSA9IHsKICAgICAvLyBTbWFsbCB2YWx1ZXMgbWlnaHQgY2F1c2UgaGlnaCByYXRlcyBv
ZiBzYW1wbGluZwogICAgIC8vIGFuZCBoZW5jZSBjb21tZW50ZWQgb3V0LgogICAgIC8vIDIsIDUs
IDExLCAxNywgMzcsIDY3LCAxMzEsIDI1NywKQEAgLTY2NSwxMCArNjY3LDcgQEAgREVGSU5FX2lu
dDY0KHRjbWFsbG9jX3NhbXBsZV9wYXJhbWV0ZXIsCiAgICAgICAgICAgICAgIlVudXNlZDogY29k
ZSBpcyBjb21waWxlZCB3aXRoIE5PX1RDTUFMTE9DX1NBTVBMRVMiKTsKIHN0YXRpYyBzaXplX3Qg
c2FtcGxlX3BlcmlvZCA9IDA7CiAjZWxzZQotREVGSU5FX2ludDY0KHRjbWFsbG9jX3NhbXBsZV9w
YXJhbWV0ZXIsIDI2MjE0NywKLSAgICAgICAgICJUd2ljZSB0aGUgYXBwcm94aW1hdGUgZ2FwIGJl
dHdlZW4gc2FtcGxpbmcgYWN0aW9ucy4iCi0gICAgICAgICAiIE11c3QgYmUgYSBwcmltZSBudW1i
ZXIuIE90aGVyd2lzZSB3aWxsIGJlIHJvdW5kZWQgdXAgdG8gYSAiCi0gICAgICAgICAiIGxhcmdl
ciBwcmltZSBudW1iZXIiKTsKK0RFRklORV9pbnQ2NCh0Y21hbGxvY19zYW1wbGVfcGFyYW1ldGVy
LCAyNjIxNDcsICJUd2ljZSB0aGUgYXBwcm94aW1hdGUgZ2FwIGJldHdlZW4gc2FtcGxpbmcgYWN0
aW9ucy4gTXVzdCBiZSBhIHByaW1lIG51bWJlci4gT3RoZXJ3aXNlIHdpbGwgYmUgcm91bmRlZCB1
cCB0byBhIGxhcmdlciBwcmltZSBudW1iZXIiKTsKIHN0YXRpYyBzaXplX3Qgc2FtcGxlX3Blcmlv
ZCA9IDI2MjE0NzsKICNlbmRpZgogCkBAIC02NzcsMjMgKzY3NiwxOCBAQCBzdGF0aWMgU3Bpbkxv
Y2sgc2FtcGxlX3BlcmlvZF9sb2NrID0gU1BJCiAKIC8vIFBhcmFtZXRlcnMgZm9yIGNvbnRyb2xs
aW5nIGhvdyBmYXN0IG1lbW9yeSBpcyByZXR1cm5lZCB0byB0aGUgT1MuCiAKLURFRklORV9kb3Vi
bGUodGNtYWxsb2NfcmVsZWFzZV9yYXRlLCAxLAotICAgICAgICAgICAgICAiUmF0ZSBhdCB3aGlj
aCB3ZSByZWxlYXNlIHVudXNlZCBtZW1vcnkgdG8gdGhlIHN5c3RlbS4gICIKLSAgICAgICAgICAg
ICAgIlplcm8gbWVhbnMgd2UgbmV2ZXIgcmVsZWFzZSBtZW1vcnkgYmFjayB0byB0aGUgc3lzdGVt
LiAgIgotICAgICAgICAgICAgICAiSW5jcmVhc2UgdGhpcyBmbGFnIHRvIHJldHVybiBtZW1vcnkg
ZmFzdGVyOyBkZWNyZWFzZSBpdCAiCi0gICAgICAgICAgICAgICJ0byByZXR1cm4gbWVtb3J5IHNs
b3dlci4gIFJlYXNvbmFibGUgcmF0ZXMgYXJlIGluIHRoZSAiCi0gICAgICAgICAgICAgICJyYW5n
ZSBbMCwxMF0iKTsKK0RFRklORV9kb3VibGUodGNtYWxsb2NfcmVsZWFzZV9yYXRlLCAxLCAiUmF0
ZSBhdCB3aGljaCB3ZSByZWxlYXNlIHVudXNlZCBtZW1vcnkgdG8gdGhlIHN5c3RlbS4gWmVybyBt
ZWFucyB3ZSBuZXZlciByZWxlYXNlIG1lbW9yeSBiYWNrIHRvIHRoZSBzeXN0ZW0uIEluY3JlYXNl
IHRoaXMgZmxhZyB0byByZXR1cm4gbWVtb3J5IGZhc3RlcjsgZGVjcmVhc2UgaXQgdG8gcmV0dXJu
IG1lbW9yeSBzbG93ZXIuIFJlYXNvbmFibGUgcmF0ZXMgYXJlIGluIHRoZSByYW5nZSBbMCwxMF0i
KTsKIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBNYXBwaW5nIGZyb20gc2l6ZSB0byBzaXplX2NsYXNzIGFu
ZCB2aWNlIHZlcnNhCisvLyBNYXBwaW5nIGZyb20gc2l6ZSB0byBzaXplQ2xhc3MgYW5kIHZpY2Ug
dmVyc2EKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogCi0vLyBTaXplcyA8PSAxMDI0IGhhdmUgYW4gYWxpZ25tZW50
ID49IDguICBTbyBmb3Igc3VjaCBzaXplcyB3ZSBoYXZlIGFuCi0vLyBhcnJheSBpbmRleGVkIGJ5
IGNlaWwoc2l6ZS84KS4gIFNpemVzID4gMTAyNCBoYXZlIGFuIGFsaWdubWVudCA+PSAxMjguCisv
LyBTaXplcyA8PSAxMDI0IGhhdmUgYW4gYWxpZ25tZW50ID49IDguIFNvIGZvciBzdWNoIHNpemVz
IHdlIGhhdmUgYW4KKy8vIGFycmF5IGluZGV4ZWQgYnkgY2VpbChzaXplLzgpLiBTaXplcyA+IDEw
MjQgaGF2ZSBhbiBhbGlnbm1lbnQgPj0gMTI4LgogLy8gU28gZm9yIHRoZXNlIGxhcmdlciBzaXpl
cyB3ZSBoYXZlIGFuIGFycmF5IGluZGV4ZWQgYnkgY2VpbChzaXplLzEyOCkuCiAvLwogLy8gV2Ug
ZmxhdHRlbiBib3RoIGxvZ2ljYWwgYXJyYXlzIGludG8gb25lIHBoeXNpY2FsIGFycmF5IGFuZCB1
c2UKLS8vIGFyaXRobWV0aWMgdG8gY29tcHV0ZSBhbiBhcHByb3ByaWF0ZSBpbmRleC4gIFRoZSBj
b25zdGFudHMgdXNlZCBieQorLy8gYXJpdGhtZXRpYyB0byBjb21wdXRlIGFuIGFwcHJvcHJpYXRl
IGluZGV4LiBUaGUgY29uc3RhbnRzIHVzZWQgYnkKIC8vIENsYXNzSW5kZXgoKSB3ZXJlIHNlbGVj
dGVkIHRvIG1ha2UgdGhlIGZsYXR0ZW5pbmcgd29yay4KIC8vCiAvLyBFeGFtcGxlczoKQEAgLTcw
OSwzMCArNzAzLDMxIEBAIERFRklORV9kb3VibGUodGNtYWxsb2NfcmVsZWFzZV9yYXRlLCAxLAog
c3RhdGljIGNvbnN0IHNpemVfdCBrTWF4U21hbGxTaXplID0gMTAyNDsKIHN0YXRpYyBjb25zdCBp
bnQgc2hpZnRfYW1vdW50WzJdID0geyAzLCA3IH07ICAvLyBGb3IgZGl2aWRlcyBieSA4IG9yIDEy
OAogc3RhdGljIGNvbnN0IGludCBhZGRfYW1vdW50WzJdID0geyA3LCAxMjcgKyAoMTIwIDw8IDcp
IH07Ci1zdGF0aWMgdW5zaWduZWQgY2hhciBjbGFzc19hcnJheVszNzddOworc3RhdGljIHVuc2ln
bmVkIGNoYXIgY2xhc3NBcnJheVszNzddOwogCi0vLyBDb21wdXRlIGluZGV4IG9mIHRoZSBjbGFz
c19hcnJheVtdIGVudHJ5IGZvciBhIGdpdmVuIHNpemUKLXN0YXRpYyBpbmxpbmUgaW50IENsYXNz
SW5kZXgoc2l6ZV90IHMpIHsKLSAgY29uc3QgaW50IGkgPSAocyA+IGtNYXhTbWFsbFNpemUpOwot
ICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PigocyArIGFkZF9hbW91bnRbaV0pID4+IHNoaWZ0X2Ft
b3VudFtpXSk7CisvLyBDb21wdXRlIGluZGV4IG9mIHRoZSBjbGFzc0FycmF5W10gZW50cnkgZm9y
IGEgZ2l2ZW4gc2l6ZQorc3RhdGljIGlubGluZSBpbnQgQ2xhc3NJbmRleChzaXplX3QgcykKK3sK
KyAgICBjb25zdCBpbnQgaSA9IChzID4ga01heFNtYWxsU2l6ZSk7CisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGludD4oKHMgKyBhZGRfYW1vdW50W2ldKSA+PiBzaGlmdF9hbW91bnRbaV0pOwogfQog
CiAvLyBNYXBwaW5nIGZyb20gc2l6ZSBjbGFzcyB0byBtYXggc2l6ZSBzdG9yYWJsZSBpbiB0aGF0
IGNsYXNzCi1zdGF0aWMgc2l6ZV90IGNsYXNzX3RvX3NpemVba051bUNsYXNzZXNdOworc3RhdGlj
IHNpemVfdCBjbGFzc1Rvc2l6ZVtrTnVtQ2xhc3Nlc107CiAKIC8vIE1hcHBpbmcgZnJvbSBzaXpl
IGNsYXNzIHRvIG51bWJlciBvZiBwYWdlcyB0byBhbGxvY2F0ZSBhdCBhIHRpbWUKIHN0YXRpYyBz
aXplX3QgY2xhc3NfdG9fcGFnZXNba051bUNsYXNzZXNdOwogCi0vLyBUcmFuc2ZlckNhY2hlIGlz
IHVzZWQgdG8gY2FjaGUgdHJhbnNmZXJzIG9mIG51bV9vYmplY3RzX3RvX21vdmVbc2l6ZV9jbGFz
c10KKy8vIFRyYW5zZmVyQ2FjaGUgaXMgdXNlZCB0byBjYWNoZSB0cmFuc2ZlcnMgb2YgbnVtT2Jq
ZWN0c1RvTW92ZVtzaXplQ2xhc3NdCiAvLyBiYWNrIGFuZCBmb3J0aCBiZXR3ZWVuIHRocmVhZCBj
YWNoZXMgYW5kIHRoZSBjZW50cmFsIGNhY2hlIGZvciBhIGdpdmVuIHNpemUKIC8vIGNsYXNzLgog
c3RydWN0IFRDRW50cnkgewotICB2b2lkICpoZWFkOyAgLy8gSGVhZCBvZiBjaGFpbiBvZiBvYmpl
Y3RzLgotICB2b2lkICp0YWlsOyAgLy8gVGFpbCBvZiBjaGFpbiBvZiBvYmplY3RzLgorICAgIHZv
aWQqIGhlYWQ7IC8vIEhlYWQgb2YgY2hhaW4gb2Ygb2JqZWN0cy4KKyAgICB2b2lkKiB0YWlsOyAv
LyBUYWlsIG9mIGNoYWluIG9mIG9iamVjdHMuCiB9OwogLy8gQSBjZW50cmFsIGNhY2hlIGZyZWVs
aXN0IGNhbiBoYXZlIGFueXdoZXJlIGZyb20gMCB0byBrTnVtVHJhbnNmZXJFbnRyaWVzCi0vLyBz
bG90cyB0byBwdXQgbGluayBsaXN0IGNoYWlucyBpbnRvLiAgVG8ga2VlcCBtZW1vcnkgdXNhZ2Ug
Ym91bmRlZCB0aGUgdG90YWwKLS8vIG51bWJlciBvZiBUQ0VudHJpZXMgYWNyb3NzIHNpemUgY2xh
c3NlcyBpcyBmaXhlZC4gIEN1cnJlbnRseSBlYWNoIHNpemUKKy8vIHNsb3RzIHRvIHB1dCBsaW5r
IGxpc3QgY2hhaW5zIGludG8uIFRvIGtlZXAgbWVtb3J5IHVzYWdlIGJvdW5kZWQgdGhlIHRvdGFs
CisvLyBudW1iZXIgb2YgVENFbnRyaWVzIGFjcm9zcyBzaXplIGNsYXNzZXMgaXMgZml4ZWQuIEN1
cnJlbnRseSBlYWNoIHNpemUKIC8vIGNsYXNzIGlzIGluaXRpYWxseSBnaXZlbiBvbmUgVENFbnRy
eSB3aGljaCBhbHNvIG1lYW5zIHRoYXQgdGhlIG1heGltdW0gYW55CiAvLyBvbmUgY2xhc3MgY2Fu
IGhhdmUgaXMga051bUNsYXNzZXMuCiBzdGF0aWMgY29uc3QgaW50IGtOdW1UcmFuc2ZlckVudHJp
ZXMgPSBrTnVtQ2xhc3NlczsKQEAgLTc1NiwzMTIgKzc1MSwzMjggQEAgc3RhdGljIGlubGluZSBp
bnQgTGdGbG9vcihzaXplX3QgbikgewogLy8gU29tZSB2ZXJ5IGJhc2ljIGxpbmtlZCBsaXN0IGZ1
bmN0aW9ucyBmb3IgZGVhbGluZyB3aXRoIHVzaW5nIHZvaWQgKiBhcwogLy8gc3RvcmFnZS4KIAot
c3RhdGljIGlubGluZSB2b2lkICpTTExfTmV4dCh2b2lkICp0KSB7Ci0gIHJldHVybiAqKHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCoqPih0KSk7CitzdGF0aWMgaW5saW5lIHZvaWQgKlNMTF9OZXh0KHZv
aWQgKnQpCit7CisgICAgcmV0dXJuICoocmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KHQpKTsKIH0K
IAotc3RhdGljIGlubGluZSB2b2lkIFNMTF9TZXROZXh0KHZvaWQgKnQsIHZvaWQgKm4pIHsKLSAg
KihyZWludGVycHJldF9jYXN0PHZvaWQqKj4odCkpID0gbjsKK3N0YXRpYyBpbmxpbmUgdm9pZCBT
TExTZXROZXh0KHZvaWQgKnQsIHZvaWQgKm4pCit7CisgICAgKihyZWludGVycHJldF9jYXN0PHZv
aWQqKj4odCkpID0gbjsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIFNMTF9QdXNoKHZvaWQgKips
aXN0LCB2b2lkICplbGVtZW50KSB7Ci0gIFNMTF9TZXROZXh0KGVsZW1lbnQsICpsaXN0KTsKLSAg
Kmxpc3QgPSBlbGVtZW50Oworc3RhdGljIGlubGluZSB2b2lkIFNMTFB1c2godm9pZCAqKmxpc3Qs
IHZvaWQgKmVsZW1lbnQpCit7CisgICAgU0xMU2V0TmV4dChlbGVtZW50LCAqbGlzdCk7CisgICAg
Kmxpc3QgPSBlbGVtZW50OwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgKlNMTF9Qb3Aodm9pZCAq
Kmxpc3QpIHsKLSAgdm9pZCAqcmVzdWx0ID0gKmxpc3Q7Ci0gICpsaXN0ID0gU0xMX05leHQoKmxp
c3QpOwotICByZXR1cm4gcmVzdWx0Oworc3RhdGljIGlubGluZSB2b2lkICpTTExQb3Aodm9pZCAq
Kmxpc3QpCit7CisgICAgdm9pZCogcmVzdWx0ID0gKmxpc3Q7CisgICAgKmxpc3QgPSBTTExfTmV4
dCgqbGlzdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCi0vLyBSZW1vdmUgTiBlbGVtZW50
cyBmcm9tIGEgbGlua2VkIGxpc3QgdG8gd2hpY2ggaGVhZCBwb2ludHMuICBoZWFkIHdpbGwgYmUK
LS8vIG1vZGlmaWVkIHRvIHBvaW50IHRvIHRoZSBuZXcgaGVhZC4gIHN0YXJ0IGFuZCBlbmQgd2ls
bCBwb2ludCB0byB0aGUgZmlyc3QKLS8vIGFuZCBsYXN0IG5vZGVzIG9mIHRoZSByYW5nZS4gIE5v
dGUgdGhhdCBlbmQgd2lsbCBwb2ludCB0byBOVUxMIGFmdGVyIHRoaXMKKy8vIFJlbW92ZSBOIGVs
ZW1lbnRzIGZyb20gYSBsaW5rZWQgbGlzdCB0byB3aGljaCBoZWFkIHBvaW50cy4gaGVhZCB3aWxs
IGJlCisvLyBtb2RpZmllZCB0byBwb2ludCB0byB0aGUgbmV3IGhlYWQuIHN0YXJ0IGFuZCBlbmQg
d2lsbCBwb2ludCB0byB0aGUgZmlyc3QKKy8vIGFuZCBsYXN0IG5vZGVzIG9mIHRoZSByYW5nZS4g
Tm90ZSB0aGF0IGVuZCB3aWxsIHBvaW50IHRvIDAgYWZ0ZXIgdGhpcwogLy8gZnVuY3Rpb24gaXMg
Y2FsbGVkLgotc3RhdGljIGlubGluZSB2b2lkIFNMTF9Qb3BSYW5nZSh2b2lkICoqaGVhZCwgaW50
IE4sIHZvaWQgKipzdGFydCwgdm9pZCAqKmVuZCkgewotICBpZiAoTiA9PSAwKSB7Ci0gICAgKnN0
YXJ0ID0gTlVMTDsKLSAgICAqZW5kID0gTlVMTDsKLSAgICByZXR1cm47Ci0gIH0KK3N0YXRpYyBp
bmxpbmUgdm9pZCBTTExQb3BSYW5nZSh2b2lkICoqaGVhZCwgaW50IE4sIHZvaWQgKipzdGFydCwg
dm9pZCAqKmVuZCkKK3sKKyAgICBpZiAoIU4pIHsKKyAgICAgICAgKnN0YXJ0ID0gMDsKKyAgICAg
ICAgKmVuZCA9IDA7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgdm9pZCAqdG1wID0gKmhl
YWQ7Ci0gIGZvciAoaW50IGkgPSAxOyBpIDwgTjsgKytpKSB7Ci0gICAgdG1wID0gU0xMX05leHQo
dG1wKTsKLSAgfQorICAgIHZvaWQqIHRtcCA9ICpoZWFkOworICAgIGZvciAoaW50IGkgPSAxOyBp
IDwgTjsgKytpKQorICAgICAgICB0bXAgPSBTTExfTmV4dCh0bXApOwogCi0gICpzdGFydCA9ICpo
ZWFkOwotICAqZW5kID0gdG1wOwotICAqaGVhZCA9IFNMTF9OZXh0KHRtcCk7Ci0gIC8vIFVubGlu
ayByYW5nZSBmcm9tIGxpc3QuCi0gIFNMTF9TZXROZXh0KHRtcCwgTlVMTCk7Ci19Ci0KLXN0YXRp
YyBpbmxpbmUgdm9pZCBTTExfUHVzaFJhbmdlKHZvaWQgKipoZWFkLCB2b2lkICpzdGFydCwgdm9p
ZCAqZW5kKSB7Ci0gIGlmICghc3RhcnQpIHJldHVybjsKLSAgU0xMX1NldE5leHQoZW5kLCAqaGVh
ZCk7Ci0gICpoZWFkID0gc3RhcnQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc2l6ZV90IFNMTF9TaXpl
KHZvaWQgKmhlYWQpIHsKLSAgaW50IGNvdW50ID0gMDsKLSAgd2hpbGUgKGhlYWQpIHsKLSAgICBj
b3VudCsrOwotICAgIGhlYWQgPSBTTExfTmV4dChoZWFkKTsKLSAgfQotICByZXR1cm4gY291bnQ7
CisgICAgKnN0YXJ0ID0gKmhlYWQ7CisgICAgKmVuZCA9IHRtcDsKKyAgICAqaGVhZCA9IFNMTF9O
ZXh0KHRtcCk7CisgICAgLy8gVW5saW5rIHJhbmdlIGZyb20gbGlzdC4KKyAgICBTTExTZXROZXh0
KHRtcCwgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBTTExQdXNoUmFuZ2Uodm9pZCAqKmhl
YWQsIHZvaWQgKnN0YXJ0LCB2b2lkICplbmQpCit7CisgICAgaWYgKCFzdGFydCkKKyAgICAgICAg
cmV0dXJuOworICAgIFNMTFNldE5leHQoZW5kLCAqaGVhZCk7CisgICAgKmhlYWQgPSBzdGFydDsK
K30KKworc3RhdGljIGlubGluZSBzaXplX3QgU0xMU2l6ZSh2b2lkICpoZWFkKQoreworICAgIGlu
dCBjb3VudCA9IDA7CisgICAgd2hpbGUgKGhlYWQpIHsKKyAgICAgICAgY291bnQrKzsKKyAgICAg
ICAgaGVhZCA9IFNMTF9OZXh0KGhlYWQpOworICAgIH0KKyAgICByZXR1cm4gY291bnQ7CiB9CiAK
IC8vIFNldHVwIGhlbHBlciBmdW5jdGlvbnMuCiAKLXN0YXRpYyBBTFdBWVNfSU5MSU5FIHNpemVf
dCBTaXplQ2xhc3Moc2l6ZV90IHNpemUpIHsKLSAgcmV0dXJuIGNsYXNzX2FycmF5W0NsYXNzSW5k
ZXgoc2l6ZSldOworc3RhdGljIEFMV0FZU19JTkxJTkUgc2l6ZV90IFNpemVDbGFzcyhzaXplX3Qg
c2l6ZSkKK3sKKyAgICByZXR1cm4gY2xhc3NBcnJheVtDbGFzc0luZGV4KHNpemUpXTsKIH0KIAog
Ly8gR2V0IHRoZSBieXRlLXNpemUgZm9yIGEgc3BlY2lmaWVkIGNsYXNzCi1zdGF0aWMgQUxXQVlT
X0lOTElORSBzaXplX3QgQnl0ZVNpemVGb3JDbGFzcyhzaXplX3QgY2wpIHsKLSAgcmV0dXJuIGNs
YXNzX3RvX3NpemVbY2xdOworc3RhdGljIEFMV0FZU19JTkxJTkUgc2l6ZV90IEJ5dGVTaXplRm9y
Q2xhc3Moc2l6ZV90IGNsKQoreworICAgIHJldHVybiBjbGFzc1Rvc2l6ZVtjbF07CiB9Ci1zdGF0
aWMgaW50IE51bU1vdmVTaXplKHNpemVfdCBzaXplKSB7Ci0gIGlmIChzaXplID09IDApIHJldHVy
biAwOwotICAvLyBVc2UgYXBwcm94IDY0ayB0cmFuc2ZlcnMgYmV0d2VlbiB0aHJlYWQgYW5kIGNl
bnRyYWwgY2FjaGVzLgotICBpbnQgbnVtID0gc3RhdGljX2Nhc3Q8aW50Pig2NC4wICogMTAyNC4w
IC8gc2l6ZSk7Ci0gIGlmIChudW0gPCAyKSBudW0gPSAyOwotICAvLyBDbGFtcCB3ZWxsIGJlbG93
IGtNYXhGcmVlTGlzdExlbmd0aCB0byBhdm9pZCBwaW5nIHBvbmcgYmV0d2VlbiBjZW50cmFsCi0g
IC8vIGFuZCB0aHJlYWQgY2FjaGVzLgotICBpZiAobnVtID4gc3RhdGljX2Nhc3Q8aW50PigwLjgg
KiBrTWF4RnJlZUxpc3RMZW5ndGgpKQotICAgIG51bSA9IHN0YXRpY19jYXN0PGludD4oMC44ICog
a01heEZyZWVMaXN0TGVuZ3RoKTsKLQotICAvLyBBbHNvLCBhdm9pZCBicmluZ2luZyBpbiB0b28g
bWFueSBvYmplY3RzIGludG8gc21hbGwgb2JqZWN0IGZyZWUKLSAgLy8gbGlzdHMuICBUaGVyZSBh
cmUgbG90cyBvZiBzdWNoIGxpc3RzLCBhbmQgaWYgd2UgYWxsb3cgZWFjaCBvbmUgdG8KLSAgLy8g
ZmV0Y2ggdG9vIG1hbnkgYXQgYSB0aW1lLCB3ZSBlbmQgdXAgaGF2aW5nIHRvIHNjYXZlbmdlIHRv
byBvZnRlbgotICAvLyAoZXNwZWNpYWxseSB3aGVuIHRoZXJlIGFyZSBsb3RzIG9mIHRocmVhZHMg
YW5kIGVhY2ggdGhyZWFkIGdldHMgYQotICAvLyBzbWFsbCBhbGxvd2FuY2UgZm9yIGl0cyB0aHJl
YWQgY2FjaGUpLgotICAvLwotICAvLyBUT0RPOiBNYWtlIHRocmVhZCBjYWNoZSBmcmVlIGxpc3Qg
c2l6ZXMgZHluYW1pYyBzbyB0aGF0IHdlIGRvIG5vdAotICAvLyBoYXZlIHRvIGVxdWFsbHkgZGl2
aWRlIGEgZml4ZWQgcmVzb3VyY2UgYW1vbmdzdCBsb3RzIG9mIHRocmVhZHMuCi0gIGlmIChudW0g
PiAzMikgbnVtID0gMzI7CitzdGF0aWMgaW50IE51bU1vdmVTaXplKHNpemVfdCBzaXplKQorewor
ICAgIGlmICghc2l6ZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgLy8gVXNlIGFwcHJveCA2NGsg
dHJhbnNmZXJzIGJldHdlZW4gdGhyZWFkIGFuZCBjZW50cmFsIGNhY2hlcy4KKyAgICBpbnQgbnVt
ID0gc3RhdGljX2Nhc3Q8aW50Pig2NC4wICogMTAyNC4wIC8gc2l6ZSk7CisgICAgaWYgKG51bSA8
IDIpCisgICAgICAgIG51bSA9IDI7CisgICAgLy8gQ2xhbXAgd2VsbCBiZWxvdyBrTWF4RnJlZUxp
c3RMZW5ndGggdG8gYXZvaWQgcGluZyBwb25nIGJldHdlZW4gY2VudHJhbAorICAgIC8vIGFuZCB0
aHJlYWQgY2FjaGVzLgorICAgIGlmIChudW0gPiBzdGF0aWNfY2FzdDxpbnQ+KDAuOCAqIGtNYXhG
cmVlTGlzdExlbmd0aCkpCisgICAgICAgIG51bSA9IHN0YXRpY19jYXN0PGludD4oMC44ICoga01h
eEZyZWVMaXN0TGVuZ3RoKTsKKworICAgIC8vIEFsc28sIGF2b2lkIGJyaW5naW5nIGluIHRvbyBt
YW55IG9iamVjdHMgaW50byBzbWFsbCBvYmplY3QgZnJlZQorICAgIC8vIGxpc3RzLiBUaGVyZSBh
cmUgbG90cyBvZiBzdWNoIGxpc3RzLCBhbmQgaWYgd2UgYWxsb3cgZWFjaCBvbmUgdG8KKyAgICAv
LyBmZXRjaCB0b28gbWFueSBhdCBhIHRpbWUsIHdlIGVuZCB1cCBoYXZpbmcgdG8gc2NhdmVuZ2Ug
dG9vIG9mdGVuCisgICAgLy8gKGVzcGVjaWFsbHkgd2hlbiB0aGVyZSBhcmUgbG90cyBvZiB0aHJl
YWRzIGFuZCBlYWNoIHRocmVhZCBnZXRzIGEKKyAgICAvLyBzbWFsbCBhbGxvd2FuY2UgZm9yIGl0
cyB0aHJlYWQgY2FjaGUpLgorICAgIC8vCisgICAgLy8gVE9ETzogTWFrZSB0aHJlYWQgY2FjaGUg
ZnJlZSBsaXN0IHNpemVzIGR5bmFtaWMgc28gdGhhdCB3ZSBkbyBub3QKKyAgICAvLyBoYXZlIHRv
IGVxdWFsbHkgZGl2aWRlIGEgZml4ZWQgcmVzb3VyY2UgYW1vbmdzdCBsb3RzIG9mIHRocmVhZHMu
CisgICAgaWYgKG51bSA+IDMyKQorICAgICAgICBudW0gPSAzMjsKIAotICByZXR1cm4gbnVtOwor
ICAgIHJldHVybiBudW07CiB9CiAKIC8vIEluaXRpYWxpemUgdGhlIG1hcHBpbmcgYXJyYXlzCi1z
dGF0aWMgdm9pZCBJbml0U2l6ZUNsYXNzZXMoKSB7Ci0gIC8vIERvIHNvbWUgc2FuaXR5IGNoZWNr
aW5nIG9uIGFkZF9hbW91bnRbXS9zaGlmdF9hbW91bnRbXS9jbGFzc19hcnJheVtdCi0gIGlmIChD
bGFzc0luZGV4KDApIDwgMCkgewotICAgIE1FU1NBR0UoIkludmFsaWQgY2xhc3MgaW5kZXggJWQg
Zm9yIHNpemUgMFxuIiwgQ2xhc3NJbmRleCgwKSk7Ci0gICAgQ1JBU0goKTsKLSAgfQotICBpZiAo
c3RhdGljX2Nhc3Q8c2l6ZV90PihDbGFzc0luZGV4KGtNYXhTaXplKSkgPj0gc2l6ZW9mKGNsYXNz
X2FycmF5KSkgewotICAgIE1FU1NBR0UoIkludmFsaWQgY2xhc3MgaW5kZXggJWQgZm9yIGtNYXhT
aXplXG4iLCBDbGFzc0luZGV4KGtNYXhTaXplKSk7Ci0gICAgQ1JBU0goKTsKLSAgfQotCi0gIC8v
IENvbXB1dGUgdGhlIHNpemUgY2xhc3NlcyB3ZSB3YW50IHRvIHVzZQotICBzaXplX3Qgc2MgPSAx
OyAgIC8vIE5leHQgc2l6ZSBjbGFzcyB0byBhc3NpZ24KLSAgdW5zaWduZWQgY2hhciBhbGlnbnNo
aWZ0ID0ga0FsaWduU2hpZnQ7Ci0gIGludCBsYXN0X2xnID0gLTE7Ci0gIGZvciAoc2l6ZV90IHNp
emUgPSBrQWxpZ25tZW50OyBzaXplIDw9IGtNYXhTaXplOyBzaXplICs9ICgxIDw8IGFsaWduc2hp
ZnQpKSB7Ci0gICAgaW50IGxnID0gTGdGbG9vcihzaXplKTsKLSAgICBpZiAobGcgPiBsYXN0X2xn
KSB7Ci0gICAgICAvLyBJbmNyZWFzZSBhbGlnbm1lbnQgZXZlcnkgc28gb2Z0ZW4uCi0gICAgICAv
LwotICAgICAgLy8gU2luY2Ugd2UgZG91YmxlIHRoZSBhbGlnbm1lbnQgZXZlcnkgdGltZSBzaXpl
IGRvdWJsZXMgYW5kCi0gICAgICAvLyBzaXplID49IDEyOCwgdGhpcyBtZWFucyB0aGF0IHNwYWNl
IHdhc3RlZCBkdWUgdG8gYWxpZ25tZW50IGlzCi0gICAgICAvLyBhdCBtb3N0IDE2LzEyOCBpLmUu
LCAxMi41JS4gIFBsdXMgd2UgY2FwIHRoZSBhbGlnbm1lbnQgYXQgMjU2Ci0gICAgICAvLyBieXRl
cywgc28gdGhlIHNwYWNlIHdhc3RlZCBhcyBhIHBlcmNlbnRhZ2Ugc3RhcnRzIGZhbGxpbmcgZm9y
Ci0gICAgICAvLyBzaXplcyA+IDJLLgotICAgICAgaWYgKChsZyA+PSA3KSAmJiAoYWxpZ25zaGlm
dCA8IDgpKSB7Ci0gICAgICAgIGFsaWduc2hpZnQrKzsKLSAgICAgIH0KLSAgICAgIGxhc3RfbGcg
PSBsZzsKK3N0YXRpYyB2b2lkIEluaXRTaXplQ2xhc3NlcygpCit7CisgICAgLy8gRG8gc29tZSBz
YW5pdHkgY2hlY2tpbmcgb24gYWRkX2Ftb3VudFtdL3NoaWZ0X2Ftb3VudFtdL2NsYXNzQXJyYXlb
XQorICAgIGlmIChDbGFzc0luZGV4KDApIDwgMCkgeworICAgICAgICBNRVNTQUdFKCJJbnZhbGlk
IGNsYXNzIGluZGV4ICVkIGZvciBzaXplIDBcbiIsIENsYXNzSW5kZXgoMCkpOworICAgICAgICBD
UkFTSCgpOwogICAgIH0KLQotICAgIC8vIEFsbG9jYXRlIGVub3VnaCBwYWdlcyBzbyBsZWZ0b3Zl
ciBpcyBsZXNzIHRoYW4gMS84IG9mIHRvdGFsLgotICAgIC8vIFRoaXMgYm91bmRzIHdhc3RlZCBz
cGFjZSB0byBhdCBtb3N0IDEyLjUlLgotICAgIHNpemVfdCBwc2l6ZSA9IGtQYWdlU2l6ZTsKLSAg
ICB3aGlsZSAoKHBzaXplICUgc2l6ZSkgPiAocHNpemUgPj4gMykpIHsKLSAgICAgIHBzaXplICs9
IGtQYWdlU2l6ZTsKLSAgICB9Ci0gICAgY29uc3Qgc2l6ZV90IG15X3BhZ2VzID0gcHNpemUgPj4g
a1BhZ2VTaGlmdDsKLQotICAgIGlmIChzYyA+IDEgJiYgbXlfcGFnZXMgPT0gY2xhc3NfdG9fcGFn
ZXNbc2MtMV0pIHsKLSAgICAgIC8vIFNlZSBpZiB3ZSBjYW4gbWVyZ2UgdGhpcyBpbnRvIHRoZSBw
cmV2aW91cyBjbGFzcyB3aXRob3V0Ci0gICAgICAvLyBpbmNyZWFzaW5nIHRoZSBmcmFnbWVudGF0
aW9uIG9mIHRoZSBwcmV2aW91cyBjbGFzcy4KLSAgICAgIGNvbnN0IHNpemVfdCBteV9vYmplY3Rz
ID0gKG15X3BhZ2VzIDw8IGtQYWdlU2hpZnQpIC8gc2l6ZTsKLSAgICAgIGNvbnN0IHNpemVfdCBw
cmV2X29iamVjdHMgPSAoY2xhc3NfdG9fcGFnZXNbc2MtMV0gPDwga1BhZ2VTaGlmdCkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIGNsYXNzX3RvX3NpemVbc2MtMV07Ci0gICAg
ICBpZiAobXlfb2JqZWN0cyA9PSBwcmV2X29iamVjdHMpIHsKLSAgICAgICAgLy8gQWRqdXN0IGxh
c3QgY2xhc3MgdG8gaW5jbHVkZSB0aGlzIHNpemUKLSAgICAgICAgY2xhc3NfdG9fc2l6ZVtzYy0x
XSA9IHNpemU7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfQorICAgIGlmIChzdGF0aWNfY2Fz
dDxzaXplX3Q+KENsYXNzSW5kZXgoa01heFNpemUpKSA+PSBzaXplb2YoY2xhc3NBcnJheSkpIHsK
KyAgICAgICAgTUVTU0FHRSgiSW52YWxpZCBjbGFzcyBpbmRleCAlZCBmb3Iga01heFNpemVcbiIs
IENsYXNzSW5kZXgoa01heFNpemUpKTsKKyAgICAgICAgQ1JBU0goKTsKICAgICB9CiAKLSAgICAv
LyBBZGQgbmV3IGNsYXNzCi0gICAgY2xhc3NfdG9fcGFnZXNbc2NdID0gbXlfcGFnZXM7Ci0gICAg
Y2xhc3NfdG9fc2l6ZVtzY10gPSBzaXplOwotICAgIHNjKys7Ci0gIH0KLSAgaWYgKHNjICE9IGtO
dW1DbGFzc2VzKSB7Ci0gICAgTUVTU0FHRSgid3JvbmcgbnVtYmVyIG9mIHNpemUgY2xhc3Nlczog
Zm91bmQgJSIgUFJJdVMgIiBpbnN0ZWFkIG9mICVkXG4iLAorICAgIC8vIENvbXB1dGUgdGhlIHNp
emUgY2xhc3NlcyB3ZSB3YW50IHRvIHVzZQorICAgIHNpemVfdCBzYyA9IDE7IC8vIE5leHQgc2l6
ZSBjbGFzcyB0byBhc3NpZ24KKyAgICB1bnNpZ25lZCBjaGFyIGFsaWduc2hpZnQgPSBrQWxpZ25T
aGlmdDsKKyAgICBpbnQgbGFzdExnID0gLTE7CisgICAgZm9yIChzaXplX3Qgc2l6ZSA9IGtBbGln
bm1lbnQ7IHNpemUgPD0ga01heFNpemU7IHNpemUgKz0gKDEgPDwgYWxpZ25zaGlmdCkpIHsKKyAg
ICAgICAgaW50IGxnID0gTGdGbG9vcihzaXplKTsKKyAgICAgICAgaWYgKGxnID4gbGFzdExnKSB7
CisgICAgICAgICAgICAvLyBJbmNyZWFzZSBhbGlnbm1lbnQgZXZlcnkgc28gb2Z0ZW4uCisgICAg
ICAgICAgICAvLworICAgICAgICAgICAgLy8gU2luY2Ugd2UgZG91YmxlIHRoZSBhbGlnbm1lbnQg
ZXZlcnkgdGltZSBzaXplIGRvdWJsZXMgYW5kCisgICAgICAgICAgICAvLyBzaXplID49IDEyOCwg
dGhpcyBtZWFucyB0aGF0IHNwYWNlIHdhc3RlZCBkdWUgdG8gYWxpZ25tZW50IGlzCisgICAgICAg
ICAgICAvLyBhdCBtb3N0IDE2LzEyOCBpLmUuLCAxMi41JS4gUGx1cyB3ZSBjYXAgdGhlIGFsaWdu
bWVudCBhdCAyNTYKKyAgICAgICAgICAgIC8vIGJ5dGVzLCBzbyB0aGUgc3BhY2Ugd2FzdGVkIGFz
IGEgcGVyY2VudGFnZSBzdGFydHMgZmFsbGluZyBmb3IKKyAgICAgICAgICAgIC8vIHNpemVzID4g
MksuCisgICAgICAgICAgICBpZiAoKGxnID49IDcpICYmIChhbGlnbnNoaWZ0IDwgOCkpCisgICAg
ICAgICAgICAgICAgYWxpZ25zaGlmdCsrOworICAgICAgICAgICAgbGFzdExnID0gbGc7CisgICAg
ICAgIH0KKworICAgICAgICAvLyBBbGxvY2F0ZSBlbm91Z2ggcGFnZXMgc28gbGVmdG92ZXIgaXMg
bGVzcyB0aGFuIDEvOCBvZiB0b3RhbC4KKyAgICAgICAgLy8gVGhpcyBib3VuZHMgd2FzdGVkIHNw
YWNlIHRvIGF0IG1vc3QgMTIuNSUuCisgICAgICAgIHNpemVfdCBwc2l6ZSA9IGtQYWdlU2l6ZTsK
KyAgICAgICAgd2hpbGUgKChwc2l6ZSAlIHNpemUpID4gKHBzaXplID4+IDMpKQorICAgICAgICAg
ICAgcHNpemUgKz0ga1BhZ2VTaXplOworICAgICAgICBjb25zdCBzaXplX3QgbXlQYWdlcyA9IHBz
aXplID4+IGtQYWdlU2hpZnQ7CisKKyAgICAgICAgaWYgKHNjID4gMSAmJiBteVBhZ2VzID09IGNs
YXNzX3RvX3BhZ2VzW3NjLTFdKSB7CisgICAgICAgICAgICAvLyBTZWUgaWYgd2UgY2FuIG1lcmdl
IHRoaXMgaW50byB0aGUgcHJldmlvdXMgY2xhc3Mgd2l0aG91dAorICAgICAgICAgICAgLy8gaW5j
cmVhc2luZyB0aGUgZnJhZ21lbnRhdGlvbiBvZiB0aGUgcHJldmlvdXMgY2xhc3MuCisgICAgICAg
ICAgICBjb25zdCBzaXplX3QgbXlPYmplY3RzID0gKG15UGFnZXMgPDwga1BhZ2VTaGlmdCkgLyBz
aXplOworICAgICAgICAgICAgY29uc3Qgc2l6ZV90IHByZXZvYmplY3RzID0gKGNsYXNzX3RvX3Bh
Z2VzW3NjLTFdIDw8IGtQYWdlU2hpZnQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLyBjbGFzc1Rvc2l6ZVtzYy0xXTsKKyAgICAgICAgICAgIGlmIChteU9iamVjdHMg
PT0gcHJldm9iamVjdHMpIHsKKyAgICAgICAgICAgICAgICAvLyBBZGp1c3QgbGFzdCBjbGFzcyB0
byBpbmNsdWRlIHRoaXMgc2l6ZQorICAgICAgICAgICAgICAgIGNsYXNzVG9zaXplW3NjLTFdID0g
c2l6ZTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIC8vIEFkZCBuZXcgY2xhc3MKKyAgICAgICAgY2xhc3NfdG9fcGFnZXNbc2Nd
ID0gbXlQYWdlczsKKyAgICAgICAgY2xhc3NUb3NpemVbc2NdID0gc2l6ZTsKKyAgICAgICAgc2Mr
KzsKKyAgICB9CisgICAgaWYgKHNjICE9IGtOdW1DbGFzc2VzKSB7CisgICAgICAgIE1FU1NBR0Uo
Indyb25nIG51bWJlciBvZiBzaXplIGNsYXNzZXM6IGZvdW5kICUiIFBSSXVTICIgaW5zdGVhZCBv
ZiAlZFxuIiwKICAgICAgICAgICAgIHNjLCBpbnQoa051bUNsYXNzZXMpKTsKLSAgICBDUkFTSCgp
OwotICB9CisgICAgICAgIENSQVNIKCk7CisgICAgfQogCi0gIC8vIEluaXRpYWxpemUgdGhlIG1h
cHBpbmcgYXJyYXlzCi0gIGludCBuZXh0X3NpemUgPSAwOwotICBmb3IgKHVuc2lnbmVkIGNoYXIg
YyA9IDE7IGMgPCBrTnVtQ2xhc3NlczsgYysrKSB7Ci0gICAgY29uc3Qgc2l6ZV90IG1heF9zaXpl
X2luX2NsYXNzID0gY2xhc3NfdG9fc2l6ZVtjXTsKLSAgICBmb3IgKHNpemVfdCBzID0gbmV4dF9z
aXplOyBzIDw9IG1heF9zaXplX2luX2NsYXNzOyBzICs9IGtBbGlnbm1lbnQpIHsKLSAgICAgIGNs
YXNzX2FycmF5W0NsYXNzSW5kZXgocyldID0gYzsKKyAgICAvLyBJbml0aWFsaXplIHRoZSBtYXBw
aW5nIGFycmF5cworICAgIGludCBuZXh0c2l6ZSA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBjaGFy
IGMgPSAxOyBjIDwga051bUNsYXNzZXM7IGMrKykgeworICAgICAgICBjb25zdCBzaXplX3QgbWF4
U2l6ZWluQ2xhc3MgPSBjbGFzc1Rvc2l6ZVtjXTsKKyAgICAgICAgZm9yIChzaXplX3QgcyA9IG5l
eHRzaXplOyBzIDw9IG1heFNpemVpbkNsYXNzOyBzICs9IGtBbGlnbm1lbnQpCisgICAgICAgICAg
ICBjbGFzc0FycmF5W0NsYXNzSW5kZXgocyldID0gYzsKKyAgICAgICAgbmV4dHNpemUgPSBzdGF0
aWNfY2FzdDxpbnQ+KG1heFNpemVpbkNsYXNzICsga0FsaWdubWVudCk7CiAgICAgfQotICAgIG5l
eHRfc2l6ZSA9IHN0YXRpY19jYXN0PGludD4obWF4X3NpemVfaW5fY2xhc3MgKyBrQWxpZ25tZW50
KTsKLSAgfQogCi0gIC8vIERvdWJsZS1jaGVjayBzaXplcyBqdXN0IHRvIGJlIHNhZmUKLSAgZm9y
IChzaXplX3Qgc2l6ZSA9IDA7IHNpemUgPD0ga01heFNpemU7IHNpemUrKykgewotICAgIGNvbnN0
IHNpemVfdCBzYyA9IFNpemVDbGFzcyhzaXplKTsKLSAgICBpZiAoc2MgPT0gMCkgewotICAgICAg
TUVTU0FHRSgiQmFkIHNpemUgY2xhc3MgJSIgUFJJdVMgIiBmb3IgJSIgUFJJdVMgIlxuIiwgc2Ms
IHNpemUpOwotICAgICAgQ1JBU0goKTsKLSAgICB9Ci0gICAgaWYgKHNjID4gMSAmJiBzaXplIDw9
IGNsYXNzX3RvX3NpemVbc2MtMV0pIHsKLSAgICAgIE1FU1NBR0UoIkFsbG9jYXRpbmcgdW5uZWNl
c3NhcmlseSBsYXJnZSBjbGFzcyAlIiBQUkl1UyAiIGZvciAlIiBQUkl1UwotICAgICAgICAgICAg
ICAiXG4iLCBzYywgc2l6ZSk7Ci0gICAgICBDUkFTSCgpOwotICAgIH0KLSAgICBpZiAoc2MgPj0g
a051bUNsYXNzZXMpIHsKLSAgICAgIE1FU1NBR0UoIkJhZCBzaXplIGNsYXNzICUiIFBSSXVTICIg
Zm9yICUiIFBSSXVTICJcbiIsIHNjLCBzaXplKTsKLSAgICAgIENSQVNIKCk7Ci0gICAgfQotICAg
IGNvbnN0IHNpemVfdCBzID0gY2xhc3NfdG9fc2l6ZVtzY107Ci0gICAgaWYgKHNpemUgPiBzKSB7
Ci0gICAgIE1FU1NBR0UoIkJhZCBzaXplICUiIFBSSXVTICIgZm9yICUiIFBSSXVTICIgKHNjID0g
JSIgUFJJdVMgIilcbiIsIHMsIHNpemUsIHNjKTsKLSAgICAgIENSQVNIKCk7Ci0gICAgfQotICAg
IGlmIChzID09IDApIHsKLSAgICAgIE1FU1NBR0UoIkJhZCBzaXplICUiIFBSSXVTICIgZm9yICUi
IFBSSXVTICIgKHNjID0gJSIgUFJJdVMgIilcbiIsIHMsIHNpemUsIHNjKTsKLSAgICAgIENSQVNI
KCk7CisgICAgLy8gRG91YmxlLWNoZWNrIHNpemVzIGp1c3QgdG8gYmUgc2FmZQorICAgIGZvciAo
c2l6ZV90IHNpemUgPSAwOyBzaXplIDw9IGtNYXhTaXplOyBzaXplKyspIHsKKyAgICAgICAgY29u
c3Qgc2l6ZV90IHNjID0gU2l6ZUNsYXNzKHNpemUpOworICAgICAgICBpZiAoIXNjKSB7CisgICAg
ICAgICAgICBNRVNTQUdFKCJCYWQgc2l6ZSBjbGFzcyAlIiBQUkl1UyAiIGZvciAlIiBQUkl1UyAi
XG4iLCBzYywgc2l6ZSk7CisgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICB9CisgICAgICAg
IGlmIChzYyA+IDEgJiYgc2l6ZSA8PSBjbGFzc1Rvc2l6ZVtzYy0xXSkgeworICAgICAgICAgICAg
TUVTU0FHRSgiQWxsb2NhdGluZyB1bm5lY2Vzc2FyaWx5IGxhcmdlIGNsYXNzICUiIFBSSXVTICIg
Zm9yICUiIFBSSXVTCisgICAgICAgICAgICAgICAgICAgICJcbiIsIHNjLCBzaXplKTsKKyAgICAg
ICAgICAgIENSQVNIKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNjID49IGtOdW1DbGFzc2Vz
KSB7CisgICAgICAgICAgICBNRVNTQUdFKCJCYWQgc2l6ZSBjbGFzcyAlIiBQUkl1UyAiIGZvciAl
IiBQUkl1UyAiXG4iLCBzYywgc2l6ZSk7CisgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICB9
CisgICAgICAgIGNvbnN0IHNpemVfdCBzID0gY2xhc3NUb3NpemVbc2NdOworICAgICAgICBpZiAo
c2l6ZSA+IHMpIHsKKyAgICAgICAgICAgIE1FU1NBR0UoIkJhZCBzaXplICUiIFBSSXVTICIgZm9y
ICUiIFBSSXVTICIgKHNjID0gJSIgUFJJdVMgIilcbiIsIHMsIHNpemUsIHNjKTsKKyAgICAgICAg
ICAgIENSQVNIKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFzKSB7CisgICAgICAgICAgICBN
RVNTQUdFKCJCYWQgc2l6ZSAlIiBQUkl1UyAiIGZvciAlIiBQUkl1UyAiIChzYyA9ICUiIFBSSXVT
ICIpXG4iLCBzLCBzaXplLCBzYyk7CisgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICB9CiAg
ICAgfQotICB9CiAKLSAgLy8gSW5pdGlhbGl6ZSB0aGUgbnVtX29iamVjdHNfdG9fbW92ZSBhcnJh
eS4KLSAgZm9yIChzaXplX3QgY2wgPSAxOyBjbCAgPCBrTnVtQ2xhc3NlczsgKytjbCkgewotICAg
IG51bV9vYmplY3RzX3RvX21vdmVbY2xdID0gTnVtTW92ZVNpemUoQnl0ZVNpemVGb3JDbGFzcyhj
bCkpOwotICB9CisgICAgLy8gSW5pdGlhbGl6ZSB0aGUgbnVtT2JqZWN0c1RvTW92ZSBhcnJheS4K
KyAgICBmb3IgKHNpemVfdCBjbCA9IDE7IGNsICA8IGtOdW1DbGFzc2VzOyArK2NsKQorICAgICAg
ICBudW1PYmplY3RzVG9Nb3ZlW2NsXSA9IE51bU1vdmVTaXplKEJ5dGVTaXplRm9yQ2xhc3MoY2wp
KTsKIAogI2lmbmRlZiBXVEZfQ0hBTkdFUwotICBpZiAoZmFsc2UpIHsKLSAgICAvLyBEdW1wIGNs
YXNzIHNpemVzIGFuZCBtYXhpbXVtIGV4dGVybmFsIHdhc3RhZ2UgcGVyIHNpemUgY2xhc3MKLSAg
ICBmb3IgKHNpemVfdCBjbCA9IDE7IGNsICA8IGtOdW1DbGFzc2VzOyArK2NsKSB7Ci0gICAgICBj
b25zdCBpbnQgYWxsb2Nfc2l6ZSA9IGNsYXNzX3RvX3BhZ2VzW2NsXSA8PCBrUGFnZVNoaWZ0Owot
ICAgICAgY29uc3QgaW50IGFsbG9jX29ianMgPSBhbGxvY19zaXplIC8gY2xhc3NfdG9fc2l6ZVtj
bF07Ci0gICAgICBjb25zdCBpbnQgbWluX3VzZWQgPSAoY2xhc3NfdG9fc2l6ZVtjbC0xXSArIDEp
ICogYWxsb2Nfb2JqczsKLSAgICAgIGNvbnN0IGludCBtYXhfd2FzdGUgPSBhbGxvY19zaXplIC0g
bWluX3VzZWQ7Ci0gICAgICBNRVNTQUdFKCJTQyAlM2QgWyAlOGQgLi4gJThkIF0gZnJvbSAlOGQg
OyAlMi4wZiUlIG1heHdhc3RlXG4iLAotICAgICAgICAgICAgICBpbnQoY2wpLAotICAgICAgICAg
ICAgICBpbnQoY2xhc3NfdG9fc2l6ZVtjbC0xXSArIDEpLAotICAgICAgICAgICAgICBpbnQoY2xh
c3NfdG9fc2l6ZVtjbF0pLAotICAgICAgICAgICAgICBpbnQoY2xhc3NfdG9fcGFnZXNbY2xdIDw8
IGtQYWdlU2hpZnQpLAotICAgICAgICAgICAgICBtYXhfd2FzdGUgKiAxMDAuMCAvIGFsbG9jX3Np
emUKLSAgICAgICAgICAgICAgKTsKKyAgICBpZiAoZmFsc2UpIHsKKyAgICAgICAgLy8gRHVtcCBj
bGFzcyBzaXplcyBhbmQgbWF4aW11bSBleHRlcm5hbCB3YXN0YWdlIHBlciBzaXplIGNsYXNzCisg
ICAgICAgIGZvciAoc2l6ZV90IGNsID0gMTsgY2wgIDwga051bUNsYXNzZXM7ICsrY2wpIHsKKyAg
ICAgICAgICAgIGNvbnN0IGludCBhbGxvY1NpemUgPSBjbGFzc190b19wYWdlc1tjbF0gPDwga1Bh
Z2VTaGlmdDsKKyAgICAgICAgICAgIGNvbnN0IGludCBhbGxvY09ianMgPSBhbGxvY1NpemUgLyBj
bGFzc1Rvc2l6ZVtjbF07CisgICAgICAgICAgICBjb25zdCBpbnQgbWluVXNlZCA9IChjbGFzc1Rv
c2l6ZVtjbC0xXSArIDEpICogYWxsb2NPYmpzOworICAgICAgICAgICAgY29uc3QgaW50IG1heFdh
c3RlID0gYWxsb2NTaXplIC0gbWluVXNlZDsKKyAgICAgICAgICAgIE1FU1NBR0UoIlNDICUzZCBb
ICU4ZCAuLiAlOGQgXSBmcm9tICU4ZCA7ICUyLjBmJSUgbWF4d2FzdGVcbiIsCisgICAgICAgICAg
ICAgICAgICAgIGludChjbCksCisgICAgICAgICAgICAgICAgICAgIGludChjbGFzc1Rvc2l6ZVtj
bC0xXSArIDEpLAorICAgICAgICAgICAgICAgICAgICBpbnQoY2xhc3NUb3NpemVbY2xdKSwKKyAg
ICAgICAgICAgICAgICAgICAgaW50KGNsYXNzX3RvX3BhZ2VzW2NsXSA8PCBrUGFnZVNoaWZ0KSwK
KyAgICAgICAgICAgICAgICAgICAgbWF4V2FzdGUgKiAxMDAuMCAvIGFsbG9jU2l6ZQorICAgICAg
ICAgICAgICAgICAgICApOworICAgICAgICB9CiAgICAgfQotICB9CiAjZW5kaWYKIH0KIAogLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotLy8gU2ltcGxlIGFsbG9jYXRvciBmb3Igb2JqZWN0cyBvZiBhIHNw
ZWNpZmllZCB0eXBlLiAgRXh0ZXJuYWwgbG9ja2luZworLy8gU2ltcGxlIGFsbG9jYXRvciBmb3Ig
b2JqZWN0cyBvZiBhIHNwZWNpZmllZCB0eXBlLiBFeHRlcm5hbCBsb2NraW5nCiAvLyBpcyByZXF1
aXJlZCBiZWZvcmUgYWNjZXNzaW5nIG9uZSBvZiB0aGVzZSBvYmplY3RzLgogLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQogCiAvLyBNZXRhZGF0YSBhbGxvY2F0b3IgLS0ga2VlcHMgc3RhdHMgYWJvdXQgaG93
IG1hbnkgYnl0ZXMgYWxsb2NhdGVkCi1zdGF0aWMgdWludDY0X3QgbWV0YWRhdGFfc3lzdGVtX2J5
dGVzID0gMDsKLXN0YXRpYyB2b2lkKiBNZXRhRGF0YUFsbG9jKHNpemVfdCBieXRlcykgewotICB2
b2lkKiByZXN1bHQgPSBUQ01hbGxvY19TeXN0ZW1BbGxvYyhieXRlcywgMCk7Ci0gIGlmIChyZXN1
bHQgIT0gTlVMTCkgewotICAgIG1ldGFkYXRhX3N5c3RlbV9ieXRlcyArPSBieXRlczsKLSAgfQot
ICByZXR1cm4gcmVzdWx0Oworc3RhdGljIHVpbnQ2NF90IG1ldGFkYXRhU3lzdGVtQnl0ZXMgPSAw
Oworc3RhdGljIHZvaWQqIE1ldGFEYXRhQWxsb2Moc2l6ZV90IGJ5dGVzKQoreworICAgIHZvaWQq
IHJlc3VsdCA9IFRDTWFsbG9jX1N5c3RlbUFsbG9jKGJ5dGVzLCAwKTsKKyAgICBpZiAocmVzdWx0
KSAKKyAgICAgICAgbWV0YWRhdGFTeXN0ZW1CeXRlcyArPSBieXRlczsKKyAgICByZXR1cm4gcmVz
dWx0OwogfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgVD4KIGNsYXNzIFBhZ2VIZWFwQWxsb2NhdG9yIHsK
LSBwcml2YXRlOgotICAvLyBIb3cgbXVjaCB0byBhbGxvY2F0ZSBmcm9tIHN5c3RlbSBhdCBhIHRp
bWUKLSAgc3RhdGljIGNvbnN0IHNpemVfdCBrQWxsb2NJbmNyZW1lbnQgPSAzMiA8PCAxMDsKK3By
aXZhdGU6CisgICAgLy8gSG93IG11Y2ggdG8gYWxsb2NhdGUgZnJvbSBzeXN0ZW0gYXQgYSB0aW1l
CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBrQWxsb2NJbmNyZW1lbnQgPSAzMiA8PCAxMDsKIAot
ICAvLyBBbGlnbmVkIHNpemUgb2YgVAotICBzdGF0aWMgY29uc3Qgc2l6ZV90IGtBbGlnbmVkU2l6
ZQotICA9ICgoKHNpemVvZihUKSArIGtBbGlnbm1lbnQgLSAxKSAvIGtBbGlnbm1lbnQpICoga0Fs
aWdubWVudCk7CisgICAgLy8gQWxpZ25lZCBzaXplIG9mIFQKKyAgICBzdGF0aWMgY29uc3Qgc2l6
ZV90IGtBbGlnbmVkU2l6ZQorICAgID0gKCgoc2l6ZW9mKFQpICsga0FsaWdubWVudCAtIDEpIC8g
a0FsaWdubWVudCkgKiBrQWxpZ25tZW50KTsKIAotICAvLyBGcmVlIGFyZWEgZnJvbSB3aGljaCB0
byBjYXJ2ZSBuZXcgb2JqZWN0cwotICBjaGFyKiBmcmVlX2FyZWFfOwotICBzaXplX3QgZnJlZV9h
dmFpbF87CisgICAgLy8gRnJlZSBhcmVhIGZyb20gd2hpY2ggdG8gY2FydmUgbmV3IG9iamVjdHMK
KyAgICBjaGFyKiBmcmVlQXJlYTsKKyAgICBzaXplX3QgZnJlZUF2YWlsOwogCi0gIC8vIExpbmtl
ZCBsaXN0IG9mIGFsbCByZWdpb25zIGFsbG9jYXRlZCBieSB0aGlzIGFsbG9jYXRvcgotICB2b2lk
KiBhbGxvY2F0ZWRfcmVnaW9uc187CisgICAgLy8gTGlua2VkIGxpc3Qgb2YgYWxsIHJlZ2lvbnMg
YWxsb2NhdGVkIGJ5IHRoaXMgYWxsb2NhdG9yCisgICAgdm9pZCogYWxsb2NhdGVkUmVnaW9uczsK
IAotICAvLyBGcmVlIGxpc3Qgb2YgYWxyZWFkeSBjYXJ2ZWQgb2JqZWN0cwotICB2b2lkKiBmcmVl
X2xpc3RfOworICAgIC8vIEZyZWUgbGlzdCBvZiBhbHJlYWR5IGNhcnZlZCBvYmplY3RzCisgICAg
dm9pZCogZnJlZUxpc3Q7CiAKLSAgLy8gTnVtYmVyIG9mIGFsbG9jYXRlZCBidXQgdW5mcmVlZCBv
YmplY3RzCi0gIGludCBpbnVzZV87CisgICAgLy8gTnVtYmVyIG9mIGFsbG9jYXRlZCBidXQgdW5m
cmVlZCBvYmplY3RzCisgICAgaW50IGluVXNlOwogCi0gcHVibGljOgotICB2b2lkIEluaXQoKSB7
Ci0gICAgQVNTRVJUKGtBbGlnbmVkU2l6ZSA8PSBrQWxsb2NJbmNyZW1lbnQpOwotICAgIGludXNl
XyA9IDA7Ci0gICAgYWxsb2NhdGVkX3JlZ2lvbnNfID0gMDsKLSAgICBmcmVlX2FyZWFfID0gTlVM
TDsKLSAgICBmcmVlX2F2YWlsXyA9IDA7Ci0gICAgZnJlZV9saXN0XyA9IE5VTEw7Ci0gIH0KK3B1
YmxpYzoKKyAgICB2b2lkIEluaXQoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGtBbGlnbmVkU2l6
ZSA8PSBrQWxsb2NJbmNyZW1lbnQpOworICAgICAgICBpblVzZSA9IDA7CisgICAgICAgIGFsbG9j
YXRlZFJlZ2lvbnMgPSAwOworICAgICAgICBmcmVlQXJlYSA9IDA7CisgICAgICAgIGZyZWVBdmFp
bCA9IDA7CisgICAgICAgIGZyZWVMaXN0ID0gMDsKKyAgICB9CiAKLSAgVCogTmV3KCkgewotICAg
IC8vIENvbnN1bHQgZnJlZSBsaXN0Ci0gICAgdm9pZCogcmVzdWx0OwotICAgIGlmIChmcmVlX2xp
c3RfICE9IE5VTEwpIHsKLSAgICAgIHJlc3VsdCA9IGZyZWVfbGlzdF87Ci0gICAgICBmcmVlX2xp
c3RfID0gKihyZWludGVycHJldF9jYXN0PHZvaWQqKj4ocmVzdWx0KSk7Ci0gICAgfSBlbHNlIHsK
LSAgICAgIGlmIChmcmVlX2F2YWlsXyA8IGtBbGlnbmVkU2l6ZSkgewotICAgICAgICAvLyBOZWVk
IG1vcmUgcm9vbQotICAgICAgICBjaGFyKiBuZXdfYWxsb2NhdGlvbiA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KE1ldGFEYXRhQWxsb2Moa0FsbG9jSW5jcmVtZW50KSk7Ci0gICAgICAgIGlmICgh
bmV3X2FsbG9jYXRpb24pCi0gICAgICAgICAgQ1JBU0goKTsKLQotICAgICAgICAqcmVpbnRlcnBy
ZXRfY2FzdF9wdHI8dm9pZCoqPihuZXdfYWxsb2NhdGlvbikgPSBhbGxvY2F0ZWRfcmVnaW9uc187
Ci0gICAgICAgIGFsbG9jYXRlZF9yZWdpb25zXyA9IG5ld19hbGxvY2F0aW9uOwotICAgICAgICBm
cmVlX2FyZWFfID0gbmV3X2FsbG9jYXRpb24gKyBrQWxpZ25lZFNpemU7Ci0gICAgICAgIGZyZWVf
YXZhaWxfID0ga0FsbG9jSW5jcmVtZW50IC0ga0FsaWduZWRTaXplOwotICAgICAgfQotICAgICAg
cmVzdWx0ID0gZnJlZV9hcmVhXzsKLSAgICAgIGZyZWVfYXJlYV8gKz0ga0FsaWduZWRTaXplOwot
ICAgICAgZnJlZV9hdmFpbF8gLT0ga0FsaWduZWRTaXplOworICAgIFQqIE5ldygpCisgICAgewor
ICAgICAgICAvLyBDb25zdWx0IGZyZWUgbGlzdAorICAgICAgICB2b2lkKiByZXN1bHQ7CisgICAg
ICAgIGlmIChmcmVlTGlzdCkgeworICAgICAgICAgICAgcmVzdWx0ID0gZnJlZUxpc3Q7CisgICAg
ICAgICAgICBmcmVlTGlzdCA9ICoocmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KHJlc3VsdCkpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGZyZWVBdmFpbCA8IGtBbGlnbmVkU2l6
ZSkgeworICAgICAgICAgICAgICAgIC8vIE5lZWQgbW9yZSByb29tCisgICAgICAgICAgICAgICAg
Y2hhciogbmV3QWxsb2NhdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KE1ldGFEYXRhQWxs
b2Moa0FsbG9jSW5jcmVtZW50KSk7CisgICAgICAgICAgICAgICAgaWYgKCFuZXdBbGxvY2F0aW9u
KQorICAgICAgICAgICAgICAgICAgICBDUkFTSCgpOworCisgICAgICAgICAgICAgICAgKnJlaW50
ZXJwcmV0X2Nhc3RfcHRyPHZvaWQqKj4obmV3QWxsb2NhdGlvbikgPSBhbGxvY2F0ZWRSZWdpb25z
OworICAgICAgICAgICAgICAgICBhbGxvY2F0ZWRSZWdpb25zID0gbmV3QWxsb2NhdGlvbjsKKyAg
ICAgICAgICAgICAgICBmcmVlQXJlYSA9IG5ld0FsbG9jYXRpb24gKyBrQWxpZ25lZFNpemU7Cisg
ICAgICAgICAgICAgICAgZnJlZUF2YWlsID0ga0FsbG9jSW5jcmVtZW50IC0ga0FsaWduZWRTaXpl
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmVzdWx0ID0gZnJlZUFyZWE7CisgICAgICAg
ICAgICBmcmVlQXJlYSArPSBrQWxpZ25lZFNpemU7CisgICAgICAgICAgICBmcmVlQXZhaWwgLT0g
a0FsaWduZWRTaXplOworICAgICAgICB9CisgICAgICAgIGluVXNlKys7CisgICAgICAgIHJldHVy
biByZWludGVycHJldF9jYXN0PFQqPihyZXN1bHQpOwogICAgIH0KLSAgICBpbnVzZV8rKzsKLSAg
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUKj4ocmVzdWx0KTsKLSAgfQogCi0gIHZvaWQgRGVs
ZXRlKFQqIHApIHsKLSAgICAqKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPihwKSkgPSBmcmVlX2xp
c3RfOwotICAgIGZyZWVfbGlzdF8gPSBwOwotICAgIGludXNlXy0tOwotICB9CisgICAgdm9pZCBE
ZWxldGUoVCogcCkKKyAgICB7CisgICAgICAgICoocmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KHAp
KSA9IGZyZWVMaXN0OworICAgICAgICBmcmVlTGlzdCA9IHA7CisgICAgICAgIGluVXNlLS07Cisg
ICAgfQogCi0gIGludCBpbnVzZSgpIGNvbnN0IHsgcmV0dXJuIGludXNlXzsgfQorICAgIGludCBp
bnVzZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaW5Vc2U7CisgICAgfQogCiAjaWYg
ZGVmaW5lZChXVEZfQ0hBTkdFUykgJiYgT1MoREFSV0lOKQotICB0ZW1wbGF0ZSA8Y2xhc3MgUmVj
b3JkZXI+Ci0gIHZvaWQgcmVjb3JkQWRtaW5pc3RyYXRpdmVSZWdpb25zKFJlY29yZGVyJiByZWNv
cmRlciwgY29uc3QgUmVtb3RlTWVtb3J5UmVhZGVyJiByZWFkZXIpCi0gIHsKLSAgICAgIGZvciAo
dm9pZCogYWRtaW5BbGxvY2F0aW9uID0gYWxsb2NhdGVkX3JlZ2lvbnNfOyBhZG1pbkFsbG9jYXRp
b247IGFkbWluQWxsb2NhdGlvbiA9IHJlYWRlci5uZXh0RW50cnlJbkxpbmtlZExpc3QocmVpbnRl
cnByZXRfY2FzdDx2b2lkKio+KGFkbWluQWxsb2NhdGlvbikpKQotICAgICAgICAgIHJlY29yZGVy
LnJlY29yZFJlZ2lvbihyZWludGVycHJldF9jYXN0PHZtX2FkZHJlc3NfdD4oYWRtaW5BbGxvY2F0
aW9uKSwga0FsbG9jSW5jcmVtZW50KTsKLSAgfQorICAgIHRlbXBsYXRlIDxjbGFzcyBSZWNvcmRl
cj4KKyAgICB2b2lkIHJlY29yZEFkbWluaXN0cmF0aXZlUmVnaW9ucyhSZWNvcmRlciYgcmVjb3Jk
ZXIsIGNvbnN0IFJlbW90ZU1lbW9yeVJlYWRlciYgcmVhZGVyKQorICAgIHsKKyAgICAgICAgZm9y
ICh2b2lkKiBhZG1pbkFsbG9jYXRpb24gPSBhbGxvY2F0ZWRSZWdpb25zOyBhZG1pbkFsbG9jYXRp
b247IGFkbWluQWxsb2NhdGlvbiA9IHJlYWRlci5uZXh0RW50cnlJbkxpbmtlZExpc3QocmVpbnRl
cnByZXRfY2FzdDx2b2lkKio+KGFkbWluQWxsb2NhdGlvbikpKQorICAgICAgICAgICAgcmVjb3Jk
ZXIucmVjb3JkUmVnaW9uKHJlaW50ZXJwcmV0X2Nhc3Q8dm1fYWRkcmVzc190PihhZG1pbkFsbG9j
YXRpb24pLCBrQWxsb2NJbmNyZW1lbnQpOworICAgIH0KICNlbmRpZgogfTsKIApAQCAtMTA3Nywx
NjAgKzEwODgsMTY4IEBAIHR5cGVkZWYgdWludHB0cl90IExlbmd0aDsKIAogc3RhdGljIGNvbnN0
IExlbmd0aCBrTWF4VmFsaWRQYWdlcyA9ICh+c3RhdGljX2Nhc3Q8TGVuZ3RoPigwKSkgPj4ga1Bh
Z2VTaGlmdDsKIAotLy8gQ29udmVydCBieXRlIHNpemUgaW50byBwYWdlcy4gIFRoaXMgd29uJ3Qg
b3ZlcmZsb3csIGJ1dCBtYXkgcmV0dXJuCisvLyBDb252ZXJ0IGJ5dGUgc2l6ZSBpbnRvIHBhZ2Vz
LiBUaGlzIHdvbid0IG92ZXJmbG93LCBidXQgbWF5IHJldHVybgogLy8gYW4gdW5yZWFzb25hYmx5
IGxhcmdlIHZhbHVlIGlmIGJ5dGVzIGlzIGh1Z2UgZW5vdWdoLgotc3RhdGljIGlubGluZSBMZW5n
dGggcGFnZXMoc2l6ZV90IGJ5dGVzKSB7Ci0gIHJldHVybiAoYnl0ZXMgPj4ga1BhZ2VTaGlmdCkg
KwotICAgICAgKChieXRlcyAmIChrUGFnZVNpemUgLSAxKSkgPiAwID8gMSA6IDApOworc3RhdGlj
IGlubGluZSBMZW5ndGggcGFnZXMoc2l6ZV90IGJ5dGVzKQoreworICAgIHJldHVybiAoYnl0ZXMg
Pj4ga1BhZ2VTaGlmdCkgKyAoKGJ5dGVzICYgKGtQYWdlU2l6ZSAtIDEpKSA+IDAgPyAxIDogMCk7
CiB9CiAKIC8vIENvbnZlcnQgYSB1c2VyIHNpemUgaW50byB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRo
YXQgd2lsbCBhY3R1YWxseSBiZQogLy8gYWxsb2NhdGVkCi1zdGF0aWMgc2l6ZV90IEFsbG9jYXRp
b25TaXplKHNpemVfdCBieXRlcykgewotICBpZiAoYnl0ZXMgPiBrTWF4U2l6ZSkgewotICAgIC8v
IExhcmdlIG9iamVjdDogd2UgYWxsb2NhdGUgYW4gaW50ZWdyYWwgbnVtYmVyIG9mIHBhZ2VzCi0g
ICAgQVNTRVJUKGJ5dGVzIDw9IChrTWF4VmFsaWRQYWdlcyA8PCBrUGFnZVNoaWZ0KSk7Ci0gICAg
cmV0dXJuIHBhZ2VzKGJ5dGVzKSA8PCBrUGFnZVNoaWZ0OwotICB9IGVsc2Ugeworc3RhdGljIHNp
emVfdCBBbGxvY2F0aW9uU2l6ZShzaXplX3QgYnl0ZXMpCit7CisgICAgaWYgKGJ5dGVzID4ga01h
eFNpemUpIHsKKyAgICAgICAgLy8gTGFyZ2Ugb2JqZWN0OiB3ZSBhbGxvY2F0ZSBhbiBpbnRlZ3Jh
bCBudW1iZXIgb2YgcGFnZXMKKyAgICAgICAgQVNTRVJUKGJ5dGVzIDw9IChrTWF4VmFsaWRQYWdl
cyA8PCBrUGFnZVNoaWZ0KSk7CisgICAgICAgIHJldHVybiBwYWdlcyhieXRlcykgPDwga1BhZ2VT
aGlmdDsKKyAgICB9CiAgICAgLy8gU21hbGwgb2JqZWN0OiBmaW5kIHRoZSBzaXplIGNsYXNzIHRv
IHdoaWNoIGl0IGJlbG9uZ3MKICAgICByZXR1cm4gQnl0ZVNpemVGb3JDbGFzcyhTaXplQ2xhc3Mo
Ynl0ZXMpKTsKLSAgfQogfQogCiAvLyBJbmZvcm1hdGlvbiBrZXB0IGZvciBhIHNwYW4gKGEgY29u
dGlndW91cyBydW4gb2YgcGFnZXMpLgogc3RydWN0IFNwYW4gewotICBQYWdlSUQgICAgICAgIHN0
YXJ0OyAgICAgICAgICAvLyBTdGFydGluZyBwYWdlIG51bWJlcgotICBMZW5ndGggICAgICAgIGxl
bmd0aDsgICAgICAgICAvLyBOdW1iZXIgb2YgcGFnZXMgaW4gc3BhbgotICBTcGFuKiAgICAgICAg
IG5leHQ7ICAgICAgICAgICAvLyBVc2VkIHdoZW4gaW4gbGluayBsaXN0Ci0gIFNwYW4qICAgICAg
ICAgcHJldjsgICAgICAgICAgIC8vIFVzZWQgd2hlbiBpbiBsaW5rIGxpc3QKLSAgdm9pZCogICAg
ICAgICBvYmplY3RzOyAgICAgICAgLy8gTGlua2VkIGxpc3Qgb2YgZnJlZSBvYmplY3RzCi0gIHVu
c2lnbmVkIGludCAgZnJlZSA6IDE7ICAgICAgIC8vIElzIHRoZSBzcGFuIGZyZWUKKyAgICBQYWdl
SUQgc3RhcnQ7IC8vIFN0YXJ0aW5nIHBhZ2UgbnVtYmVyCisgICAgTGVuZ3RoIGxlbmd0aDsgLy8g
TnVtYmVyIG9mIHBhZ2VzIGluIHNwYW4KKyAgICBTcGFuKiBuZXh0OyAvLyBVc2VkIHdoZW4gaW4g
bGluayBsaXN0CisgICAgU3BhbiogcHJldjsgLy8gVXNlZCB3aGVuIGluIGxpbmsgbGlzdAorICAg
IHZvaWQqIG9iamVjdHM7IC8vIExpbmtlZCBsaXN0IG9mIGZyZWUgb2JqZWN0cworICAgIHVuc2ln
bmVkIGludCBmcmVlIDogMTsgLy8gSXMgdGhlIHNwYW4gZnJlZQogI2lmbmRlZiBOT19UQ01BTExP
Q19TQU1QTEVTCi0gIHVuc2lnbmVkIGludCAgc2FtcGxlIDogMTsgICAgIC8vIFNhbXBsZWQgb2Jq
ZWN0PworICAgIHVuc2lnbmVkIGludCBzYW1wbGUgOiAxOyAvLyBTYW1wbGVkIG9iamVjdD8KICNl
bmRpZgotICB1bnNpZ25lZCBpbnQgIHNpemVjbGFzcyA6IDg7ICAvLyBTaXplLWNsYXNzIGZvciBz
bWFsbCBvYmplY3RzIChvciAwKQotICB1bnNpZ25lZCBpbnQgIHJlZmNvdW50IDogMTE7ICAvLyBO
dW1iZXIgb2Ygbm9uLWZyZWUgb2JqZWN0cwotICBib29sIGRlY29tbWl0dGVkIDogMTsKKyAgICB1
bnNpZ25lZCBpbnQgc2l6ZUNsYXNzIDogODsgLy8gU2l6ZS1jbGFzcyBmb3Igc21hbGwgb2JqZWN0
cyAob3IgMCkKKyAgICB1bnNpZ25lZCBpbnQgcmVmY291bnQgOiAxMTsgLy8gTnVtYmVyIG9mIG5v
bi1mcmVlIG9iamVjdHMKKyAgICBib29sIGRlY29tbWl0dGVkIDogMTsKIAogI3VuZGVmIFNQQU5f
SElTVE9SWQogI2lmZGVmIFNQQU5fSElTVE9SWQotICAvLyBGb3IgZGVidWdnaW5nLCB3ZSBjYW4g
a2VlcCBhIGxvZyBldmVudHMgcGVyIHNwYW4KLSAgaW50IG5leHRoaXN0b3J5OwotICBjaGFyIGhp
c3RvcnlbNjRdOwotICBpbnQgdmFsdWVbNjRdOworICAgIC8vIEZvciBkZWJ1Z2dpbmcsIHdlIGNh
biBrZWVwIGEgbG9nIGV2ZW50cyBwZXIgc3BhbgorICAgIGludCBuZXh0aGlzdG9yeTsKKyAgICBj
aGFyIGhpc3RvcnlbNjRdOworICAgIGludCB2YWx1ZVs2NF07CiAjZW5kaWYKIH07CiAKICNkZWZp
bmUgQVNTRVJUX1NQQU5fQ09NTUlUVEVEKHNwYW4pIEFTU0VSVCghc3Bhbi0+ZGVjb21taXR0ZWQp
CiAKICNpZmRlZiBTUEFOX0hJU1RPUlkKLXZvaWQgRXZlbnQoU3Bhbiogc3BhbiwgY2hhciBvcCwg
aW50IHYgPSAwKSB7Ci0gIHNwYW4tPmhpc3Rvcnlbc3Bhbi0+bmV4dGhpc3RvcnldID0gb3A7Ci0g
IHNwYW4tPnZhbHVlW3NwYW4tPm5leHRoaXN0b3J5XSA9IHY7Ci0gIHNwYW4tPm5leHRoaXN0b3J5
Kys7Ci0gIGlmIChzcGFuLT5uZXh0aGlzdG9yeSA9PSBzaXplb2Yoc3Bhbi0+aGlzdG9yeSkpIHNw
YW4tPm5leHRoaXN0b3J5ID0gMDsKK3ZvaWQgRXZlbnQoU3Bhbiogc3BhbiwgY2hhciBvcCwgaW50
IHYgPSAwKQoreworICAgIHNwYW4tPmhpc3Rvcnlbc3Bhbi0+bmV4dGhpc3RvcnldID0gb3A7Cisg
ICAgc3Bhbi0+dmFsdWVbc3Bhbi0+bmV4dGhpc3RvcnldID0gdjsKKyAgICBzcGFuLT5uZXh0aGlz
dG9yeSsrOworICAgIGlmIChzcGFuLT5uZXh0aGlzdG9yeSA9PSBzaXplb2Yoc3Bhbi0+aGlzdG9y
eSkpCisgICAgICAgIHNwYW4tPm5leHRoaXN0b3J5ID0gMDsKIH0KICNlbHNlCiAjZGVmaW5lIEV2
ZW50KHMsbyx2KSAoKHZvaWQpIDApCiAjZW5kaWYKIAogLy8gQWxsb2NhdG9yL2RlYWxsb2NhdG9y
IGZvciBzcGFucwotc3RhdGljIFBhZ2VIZWFwQWxsb2NhdG9yPFNwYW4+IHNwYW5fYWxsb2NhdG9y
Owotc3RhdGljIFNwYW4qIE5ld1NwYW4oUGFnZUlEIHAsIExlbmd0aCBsZW4pIHsKLSAgU3Bhbiog
cmVzdWx0ID0gc3Bhbl9hbGxvY2F0b3IuTmV3KCk7Ci0gIG1lbXNldChyZXN1bHQsIDAsIHNpemVv
ZigqcmVzdWx0KSk7Ci0gIHJlc3VsdC0+c3RhcnQgPSBwOwotICByZXN1bHQtPmxlbmd0aCA9IGxl
bjsKK3N0YXRpYyBQYWdlSGVhcEFsbG9jYXRvcjxTcGFuPiBzcGFuQWxsb2NhdG9yOworc3RhdGlj
IFNwYW4qIE5ld1NwYW4oUGFnZUlEIHAsIExlbmd0aCBsZW4pCit7CisgICAgU3BhbiogcmVzdWx0
ID0gc3BhbkFsbG9jYXRvci5OZXcoKTsKKyAgICBtZW1zZXQocmVzdWx0LCAwLCBzaXplb2YoKnJl
c3VsdCkpOworICAgIHJlc3VsdC0+c3RhcnQgPSBwOworICAgIHJlc3VsdC0+bGVuZ3RoID0gbGVu
OwogI2lmZGVmIFNQQU5fSElTVE9SWQotICByZXN1bHQtPm5leHRoaXN0b3J5ID0gMDsKKyAgICBy
ZXN1bHQtPm5leHRoaXN0b3J5ID0gMDsKICNlbmRpZgotICByZXR1cm4gcmVzdWx0OworICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBEZWxldGVTcGFuKFNwYW4qIHNw
YW4pIHsKK3N0YXRpYyBpbmxpbmUgdm9pZCBEZWxldGVTcGFuKFNwYW4qIHNwYW4pCit7CiAjaWZu
ZGVmIE5ERUJVRwotICAvLyBJbiBkZWJ1ZyBtb2RlLCB0cmFzaCB0aGUgY29udGVudHMgb2YgZGVs
ZXRlZCBTcGFucwotICBtZW1zZXQoc3BhbiwgMHgzZiwgc2l6ZW9mKCpzcGFuKSk7CisgICAgLy8g
SW4gZGVidWcgbW9kZSwgdHJhc2ggdGhlIGNvbnRlbnRzIG9mIGRlbGV0ZWQgU3BhbnMKKyAgICBt
ZW1zZXQoc3BhbiwgMHgzZiwgc2l6ZW9mKCpzcGFuKSk7CiAjZW5kaWYKLSAgc3Bhbl9hbGxvY2F0
b3IuRGVsZXRlKHNwYW4pOworICAgIHNwYW5BbGxvY2F0b3IuRGVsZXRlKHNwYW4pOwogfQogCiAv
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCiAvLyBEb3VibHkgbGlua2VkIGxpc3Qgb2Ygc3BhbnMuCiAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBETExfSW5pdChTcGFuKiBsaXN0
KSB7Ci0gIGxpc3QtPm5leHQgPSBsaXN0OwotICBsaXN0LT5wcmV2ID0gbGlzdDsKK3N0YXRpYyBp
bmxpbmUgdm9pZCBETExJbml0KFNwYW4qIGxpc3QpCit7CisgICAgbGlzdC0+bmV4dCA9IGxpc3Q7
CisgICAgbGlzdC0+cHJldiA9IGxpc3Q7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBETExfUmVt
b3ZlKFNwYW4qIHNwYW4pIHsKLSAgc3Bhbi0+cHJldi0+bmV4dCA9IHNwYW4tPm5leHQ7Ci0gIHNw
YW4tPm5leHQtPnByZXYgPSBzcGFuLT5wcmV2OwotICBzcGFuLT5wcmV2ID0gTlVMTDsKLSAgc3Bh
bi0+bmV4dCA9IE5VTEw7CitzdGF0aWMgaW5saW5lIHZvaWQgRExMUmVtb3ZlKFNwYW4qIHNwYW4p
Cit7CisgICAgc3Bhbi0+cHJldi0+bmV4dCA9IHNwYW4tPm5leHQ7CisgICAgc3Bhbi0+bmV4dC0+
cHJldiA9IHNwYW4tPnByZXY7CisgICAgc3Bhbi0+cHJldiA9IDA7CisgICAgc3Bhbi0+bmV4dCA9
IDA7CiB9CiAKLXN0YXRpYyBBTFdBWVNfSU5MSU5FIGJvb2wgRExMX0lzRW1wdHkoY29uc3QgU3Bh
biogbGlzdCkgewotICByZXR1cm4gbGlzdC0+bmV4dCA9PSBsaXN0Oworc3RhdGljIEFMV0FZU19J
TkxJTkUgYm9vbCBETExfSXNFbXB0eShjb25zdCBTcGFuKiBsaXN0KQoreworICAgIHJldHVybiBs
aXN0LT5uZXh0ID09IGxpc3Q7CiB9CiAKLXN0YXRpYyBpbnQgRExMX0xlbmd0aChjb25zdCBTcGFu
KiBsaXN0KSB7Ci0gIGludCByZXN1bHQgPSAwOwotICBmb3IgKFNwYW4qIHMgPSBsaXN0LT5uZXh0
OyBzICE9IGxpc3Q7IHMgPSBzLT5uZXh0KSB7Ci0gICAgcmVzdWx0Kys7Ci0gIH0KLSAgcmV0dXJu
IHJlc3VsdDsKK3N0YXRpYyBpbnQgRExMTGVuZ3RoKGNvbnN0IFNwYW4qIGxpc3QpCit7CisgICAg
aW50IHJlc3VsdCA9IDA7CisgICAgZm9yIChTcGFuKiBzID0gbGlzdC0+bmV4dDsgcyAhPSBsaXN0
OyBzID0gcy0+bmV4dCkKKyAgICAgICAgcmVzdWx0Kys7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAogI2lmIDAgLyogTm90IG5lZWRlZCBhdCB0aGUgbW9tZW50IC0tIGNhdXNlcyBjb21waWxlciB3
YXJuaW5ncyBpZiBub3QgdXNlZCAqLwotc3RhdGljIHZvaWQgRExMX1ByaW50KGNvbnN0IGNoYXIq
IGxhYmVsLCBjb25zdCBTcGFuKiBsaXN0KSB7Ci0gIE1FU1NBR0UoIiUtMTBzICVwOiIsIGxhYmVs
LCBsaXN0KTsKLSAgZm9yIChjb25zdCBTcGFuKiBzID0gbGlzdC0+bmV4dDsgcyAhPSBsaXN0OyBz
ID0gcy0+bmV4dCkgewotICAgIE1FU1NBR0UoIiA8JXAsJXUsJXU+Iiwgcywgcy0+c3RhcnQsIHMt
Pmxlbmd0aCk7Ci0gIH0KLSAgTUVTU0FHRSgiXG4iKTsKK3N0YXRpYyB2b2lkIERMTFByaW50KGNv
bnN0IGNoYXIqIGxhYmVsLCBjb25zdCBTcGFuKiBsaXN0KQoreworICAgIE1FU1NBR0UoIiUtMTBz
ICVwOiIsIGxhYmVsLCBsaXN0KTsKKyAgICBmb3IgKGNvbnN0IFNwYW4qIHMgPSBsaXN0LT5uZXh0
OyBzICE9IGxpc3Q7IHMgPSBzLT5uZXh0KQorICAgICAgICBNRVNTQUdFKCIgPCVwLCV1LCV1PiIs
IHMsIHMtPnN0YXJ0LCBzLT5sZW5ndGgpOworICAgIE1FU1NBR0UoIlxuIik7CiB9CiAjZW5kaWYK
IAotc3RhdGljIGlubGluZSB2b2lkIERMTF9QcmVwZW5kKFNwYW4qIGxpc3QsIFNwYW4qIHNwYW4p
IHsKLSAgQVNTRVJUKHNwYW4tPm5leHQgPT0gTlVMTCk7Ci0gIEFTU0VSVChzcGFuLT5wcmV2ID09
IE5VTEwpOwotICBzcGFuLT5uZXh0ID0gbGlzdC0+bmV4dDsKLSAgc3Bhbi0+cHJldiA9IGxpc3Q7
Ci0gIGxpc3QtPm5leHQtPnByZXYgPSBzcGFuOwotICBsaXN0LT5uZXh0ID0gc3BhbjsKK3N0YXRp
YyBpbmxpbmUgdm9pZCBETExQcmVwZW5kKFNwYW4qIGxpc3QsIFNwYW4qIHNwYW4pCit7CisgICAg
QVNTRVJUKCFzcGFuLT5uZXh0KTsKKyAgICBBU1NFUlQoIXNwYW4tPnByZXYpOworICAgIHNwYW4t
Pm5leHQgPSBsaXN0LT5uZXh0OworICAgIHNwYW4tPnByZXYgPSBsaXN0OworICAgIGxpc3QtPm5l
eHQtPnByZXYgPSBzcGFuOworICAgIGxpc3QtPm5leHQgPSBzcGFuOwogfQogCiAvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAvLyBTdGFjayB0cmFjZXMga2VwdCBmb3Igc2FtcGxlZCBhbGxvY2F0aW9ucwot
Ly8gICBUaGUgZm9sbG93aW5nIHN0YXRlIGlzIHByb3RlY3RlZCBieSBwYWdlaGVhcF9sb2NrXy4K
Ky8vICAgVGhlIGZvbGxvd2luZyBzdGF0ZSBpcyBwcm90ZWN0ZWQgYnkgcGFnZWhlYXBMb2NrLgog
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogCiAvLyBzaXplL2RlcHRoIGFyZSBtYWRlIHRoZSBzYW1lIHNp
emUgYXMgYSBwb2ludGVyIHNvIHRoYXQgc29tZSBnZW5lcmljCiAvLyBjb2RlIGJlbG93IGNhbiBj
b252ZW5pZW50bHkgY2FzdCB0aGVtIGJhY2sgYW5kIGZvcnRoIHRvIHZvaWQqLgogc3RhdGljIGNv
bnN0IGludCBrTWF4U3RhY2tEZXB0aCA9IDMxOwogc3RydWN0IFN0YWNrVHJhY2UgewotICB1aW50
cHRyX3Qgc2l6ZTsgICAgICAgICAgLy8gU2l6ZSBvZiBvYmplY3QKLSAgdWludHB0cl90IGRlcHRo
OyAgICAgICAgIC8vIE51bWJlciBvZiBQQyB2YWx1ZXMgc3RvcmVkIGluIGFycmF5IGJlbG93Ci0g
IHZvaWQqICAgICBzdGFja1trTWF4U3RhY2tEZXB0aF07CisgICAgdWludHB0cl90IHNpemU7IC8v
IFNpemUgb2Ygb2JqZWN0CisgICAgdWludHB0cl90IGRlcHRoOyAvLyBOdW1iZXIgb2YgUEMgdmFs
dWVzIHN0b3JlZCBpbiBhcnJheSBiZWxvdworICAgIHZvaWQqIHN0YWNrW2tNYXhTdGFja0RlcHRo
XTsKIH07CiBzdGF0aWMgUGFnZUhlYXBBbGxvY2F0b3I8U3RhY2tUcmFjZT4gc3RhY2t0cmFjZV9h
bGxvY2F0b3I7Ci1zdGF0aWMgU3BhbiBzYW1wbGVkX29iamVjdHM7CitzdGF0aWMgU3BhbiBzYW1w
bGVkT2JqZWN0czsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gTWFwIGZyb20gcGFnZS1pZCB0
byBwZXItcGFnZSBkYXRhCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIC8vIFdlIHVzZSBQYWdlTWFw
Mjw+IGZvciAzMi1iaXQgYW5kIFBhZ2VNYXAzPD4gZm9yIDY0LWJpdCBtYWNoaW5lcy4KLS8vIFdl
IGFsc28gdXNlIGEgc2ltcGxlIG9uZS1sZXZlbCBjYWNoZSBmb3IgaG90IFBhZ2VJRC10by1zaXpl
Y2xhc3MgbWFwcGluZ3MsCi0vLyBiZWNhdXNlIHNvbWV0aW1lcyB0aGUgc2l6ZWNsYXNzIGlzIGFs
bCB0aGUgaW5mb3JtYXRpb24gd2UgbmVlZC4KKy8vIFdlIGFsc28gdXNlIGEgc2ltcGxlIG9uZS1s
ZXZlbCBjYWNoZSBmb3IgaG90IFBhZ2VJRC10by1zaXplQ2xhc3MgbWFwcGluZ3MsCisvLyBiZWNh
dXNlIHNvbWV0aW1lcyB0aGUgc2l6ZUNsYXNzIGlzIGFsbCB0aGUgaW5mb3JtYXRpb24gd2UgbmVl
ZC4KIAogLy8gU2VsZWN0b3IgY2xhc3MgLS0gZ2VuZXJhbCBzZWxlY3RvciB1c2VzIDMtbGV2ZWwg
bWFwCiB0ZW1wbGF0ZSA8aW50IEJJVFM+IGNsYXNzIE1hcFNlbGVjdG9yIHsKLSBwdWJsaWM6Ci0g
IHR5cGVkZWYgVENNYWxsb2NfUGFnZU1hcDM8QklUUy1rUGFnZVNoaWZ0PiBUeXBlOwotICB0eXBl
ZGVmIFBhY2tlZENhY2hlPEJJVFMsIHVpbnQ2NF90PiBDYWNoZVR5cGU7CitwdWJsaWM6CisgICAg
dHlwZWRlZiBUQ01hbGxvY19QYWdlTWFwMzxCSVRTLWtQYWdlU2hpZnQ+IFR5cGU7CisgICAgdHlw
ZWRlZiBQYWNrZWRDYWNoZTxCSVRTLCB1aW50NjRfdD4gQ2FjaGVUeXBlOwogfTsKIAogI2lmIGRl
ZmluZWQoV1RGX0NIQU5HRVMpCkBAIC0xMjQ2LDI0ICsxMjY1LDI0IEBAIHN0YXRpYyBjb25zdCBz
aXplX3Qga0JpdHNVbnVzZWRPbjY0Qml0ID0KIAogLy8gQSB0aHJlZS1sZXZlbCBtYXAgZm9yIDY0
LWJpdCBtYWNoaW5lcwogdGVtcGxhdGUgPD4gY2xhc3MgTWFwU2VsZWN0b3I8NjQ+IHsKLSBwdWJs
aWM6Ci0gIHR5cGVkZWYgVENNYWxsb2NfUGFnZU1hcDM8NjQgLSBrUGFnZVNoaWZ0IC0ga0JpdHNV
bnVzZWRPbjY0Qml0PiBUeXBlOwotICB0eXBlZGVmIFBhY2tlZENhY2hlPDY0LCB1aW50NjRfdD4g
Q2FjaGVUeXBlOworcHVibGljOgorICAgIHR5cGVkZWYgVENNYWxsb2NfUGFnZU1hcDM8NjQgLSBr
UGFnZVNoaWZ0IC0ga0JpdHNVbnVzZWRPbjY0Qml0PiBUeXBlOworICAgIHR5cGVkZWYgUGFja2Vk
Q2FjaGU8NjQsIHVpbnQ2NF90PiBDYWNoZVR5cGU7CiB9OwogI2VuZGlmCiAKIC8vIEEgdHdvLWxl
dmVsIG1hcCBmb3IgMzItYml0IG1hY2hpbmVzCiB0ZW1wbGF0ZSA8PiBjbGFzcyBNYXBTZWxlY3Rv
cjwzMj4gewotIHB1YmxpYzoKLSAgdHlwZWRlZiBUQ01hbGxvY19QYWdlTWFwMjwzMiAtIGtQYWdl
U2hpZnQ+IFR5cGU7Ci0gIHR5cGVkZWYgUGFja2VkQ2FjaGU8MzIgLSBrUGFnZVNoaWZ0LCB1aW50
MTZfdD4gQ2FjaGVUeXBlOworcHVibGljOgorICAgIHR5cGVkZWYgVENNYWxsb2NfUGFnZU1hcDI8
MzIgLSBrUGFnZVNoaWZ0PiBUeXBlOworICAgIHR5cGVkZWYgUGFja2VkQ2FjaGU8MzIgLSBrUGFn
ZVNoaWZ0LCB1aW50MTZfdD4gQ2FjaGVUeXBlOwogfTsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog
Ly8gUGFnZS1sZXZlbCBhbGxvY2F0b3IKIC8vICAqIEVhZ2VyIGNvYWxlc2NpbmcKIC8vCi0vLyBI
ZWFwIGZvciBwYWdlLWxldmVsIGFsbG9jYXRpb24uICBXZSBhbGxvdyBhbGxvY2F0aW5nIGFuZCBm
cmVlaW5nIGEKKy8vIEhlYXAgZm9yIHBhZ2UtbGV2ZWwgYWxsb2NhdGlvbi4gV2UgYWxsb3cgYWxs
b2NhdGluZyBhbmQgZnJlZWluZyBhCiAvLyBjb250aWd1b3VzIHJ1bnMgb2YgcGFnZXMgKGNhbGxl
ZCBhICJzcGFuIikuCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTEyNzIsMTIgKzEyOTEsMTIg
QEAgdGVtcGxhdGUgPD4gY2xhc3MgTWFwU2VsZWN0b3I8MzI+IHsKIC8vIHRoZSBjZW50cmFsIGNh
Y2hlIG9yIGFueSB0aHJlYWQgY2FjaGVzLiBXZSB1c2UgYSBiYWNrZ3JvdW5kIHRocmVhZCB0bwog
Ly8gcGVyaW9kaWNhbGx5IHNjYW4gdGhlIGZyZWUgbGlzdCBhbmQgcmVsZWFzZSBhIHBlcmNlbnRh
Z2Ugb2YgaXQgYmFjayB0byB0aGUgT1MuCiAKLS8vIElmIGZyZWVfY29tbWl0dGVkX3BhZ2VzXyBl
eGNlZWRzIGtNaW5pbXVtRnJlZUNvbW1pdHRlZFBhZ2VDb3VudCwgdGhlCisvLyBJZiBmcmVlQ29t
bWl0dGVkUGFnZXMgZXhjZWVkcyBrTWluaW11bUZyZWVDb21taXR0ZWRQYWdlQ291bnQsIHRoZQog
Ly8gYmFja2dyb3VuZCB0aHJlYWQ6CiAvLyAgICAgLSB3YWtlcyB1cAogLy8gICAgIC0gcGF1c2Vz
IGZvciBrU2NhdmVuZ2VEZWxheUluU2Vjb25kcwogLy8gICAgIC0gcmV0dXJucyB0byB0aGUgT1Mg
YSBwZXJjZW50YWdlIG9mIHRoZSBtZW1vcnkgdGhhdCByZW1haW5lZCB1bnVzZWQgZHVyaW5nCi0v
LyAgICAgICB0aGF0IHBhdXNlIChrU2NhdmVuZ2VQZXJjZW50YWdlICogbWluX2ZyZWVfY29tbWl0
dGVkX3BhZ2VzX3NpbmNlX2xhc3Rfc2NhdmVuZ2VfKQorLy8gICAgICAgdGhhdCBwYXVzZSAoa1Nj
YXZlbmdlUGVyY2VudGFnZSAqIG1pbkZyZWVDb21taXR0ZWRQYWdlc1NpbmNlTGFzdFNjYXZlbmdl
KQogLy8gVGhlIGdvYWwgb2YgdGhpcyBzdHJhdGVneSBpcyB0byByZWR1Y2UgbWVtb3J5IHByZXNz
dXJlIGluIGEgdGltZWx5IGZhc2hpb24KIC8vIHdoaWxlIGF2b2lkaW5nIHRocmFzaGluZyB0aGUg
T1MgYWxsb2NhdG9yLgogCkBAIC0xMjkyLDIzMiArMTMxMSwyNDEgQEAgc3RhdGljIGNvbnN0IGZs
b2F0IGtTY2F2ZW5nZVBlcmNlbnRhZ2UgPQogLy8gbnVtYmVyIG9mIHNwYW4gbGlzdHMgdG8ga2Vl
cCBzcGFucyBpbiB3aGVuIG1lbW9yeSBpcyByZXR1cm5lZC4KIHN0YXRpYyBjb25zdCBpbnQga01p
blNwYW5MaXN0c1dpdGhTcGFucyA9IDMyOwogCi0vLyBOdW1iZXIgb2YgZnJlZSBjb21taXR0ZWQg
cGFnZXMgdGhhdCB3ZSB3YW50IHRvIGtlZXAgYXJvdW5kLiAgVGhlIG1pbmltdW0gbnVtYmVyIG9m
IHBhZ2VzIHVzZWQgd2hlbiB0aGVyZQotLy8gaXMgMSBzcGFuIGluIGVhY2ggb2YgdGhlIGZpcnN0
IGtNaW5TcGFuTGlzdHNXaXRoU3BhbnMgc3Bhbmxpc3RzLiAgQ3VycmVudGx5IDUyOCBwYWdlcy4K
Ky8vIE51bWJlciBvZiBmcmVlIGNvbW1pdHRlZCBwYWdlcyB0aGF0IHdlIHdhbnQgdG8ga2VlcCBh
cm91bmQuIFRoZSBtaW5pbXVtIG51bWJlciBvZiBwYWdlcyB1c2VkIHdoZW4gdGhlcmUKKy8vIGlz
IDEgc3BhbiBpbiBlYWNoIG9mIHRoZSBmaXJzdCBrTWluU3Bhbkxpc3RzV2l0aFNwYW5zIHNwYW5s
aXN0cy4gQ3VycmVudGx5IDUyOCBwYWdlcy4KIHN0YXRpYyBjb25zdCBzaXplX3Qga01pbmltdW1G
cmVlQ29tbWl0dGVkUGFnZUNvdW50ID0ga01pblNwYW5MaXN0c1dpdGhTcGFucyAqICgoMS4wZitr
TWluU3Bhbkxpc3RzV2l0aFNwYW5zKSAvIDIuMGYpOwogCiAjZW5kaWYKIAotc3RhdGljIFNwaW5M
b2NrIHBhZ2VoZWFwX2xvY2sgPSBTUElOTE9DS19JTklUSUFMSVpFUjsKK3N0YXRpYyBTcGluTG9j
ayBwYWdlaGVhcExvY2sgPSBTUElOTE9DS19JTklUSUFMSVpFUjsKIAotY2xhc3MgVENNYWxsb2Nf
UGFnZUhlYXAgewotIHB1YmxpYzoKLSAgdm9pZCBpbml0KCk7CitjbGFzcyBUQ01hbGxvY1BhZ2VI
ZWFwIHsKK3B1YmxpYzoKKyAgICB2b2lkIGluaXQoKTsKIAotICAvLyBBbGxvY2F0ZSBhIHJ1biBv
ZiAibiIgcGFnZXMuICBSZXR1cm5zIHplcm8gaWYgb3V0IG9mIG1lbW9yeS4KLSAgU3BhbiogTmV3
KExlbmd0aCBuKTsKKyAgICAvLyBBbGxvY2F0ZSBhIHJ1biBvZiAibiIgcGFnZXMuIFJldHVybnMg
emVybyBpZiBvdXQgb2YgbWVtb3J5LgorICAgIFNwYW4qIE5ldyhMZW5ndGgpOwogCi0gIC8vIERl
bGV0ZSB0aGUgc3BhbiAiW3AsIHArbi0xXSIuCi0gIC8vIFJFUVVJUkVTOiBzcGFuIHdhcyByZXR1
cm5lZCBieSBlYXJsaWVyIGNhbGwgdG8gTmV3KCkgYW5kCi0gIC8vICAgICAgICAgICBoYXMgbm90
IHlldCBiZWVuIGRlbGV0ZWQuCi0gIHZvaWQgRGVsZXRlKFNwYW4qIHNwYW4pOwotCi0gIC8vIE1h
cmsgYW4gYWxsb2NhdGVkIHNwYW4gYXMgYmVpbmcgdXNlZCBmb3Igc21hbGwgb2JqZWN0cyBvZiB0
aGUKLSAgLy8gc3BlY2lmaWVkIHNpemUtY2xhc3MuCi0gIC8vIFJFUVVJUkVTOiBzcGFuIHdhcyBy
ZXR1cm5lZCBieSBhbiBlYXJsaWVyIGNhbGwgdG8gTmV3KCkKLSAgLy8gICAgICAgICAgIGFuZCBo
YXMgbm90IHlldCBiZWVuIGRlbGV0ZWQuCi0gIHZvaWQgUmVnaXN0ZXJTaXplQ2xhc3MoU3Bhbiog
c3Bhbiwgc2l6ZV90IHNjKTsKLQotICAvLyBTcGxpdCBhbiBhbGxvY2F0ZWQgc3BhbiBpbnRvIHR3
byBzcGFuczogb25lIG9mIGxlbmd0aCAibiIgcGFnZXMKLSAgLy8gZm9sbG93ZWQgYnkgYW5vdGhl
ciBzcGFuIG9mIGxlbmd0aCAic3Bhbi0+bGVuZ3RoIC0gbiIgcGFnZXMuCi0gIC8vIE1vZGlmaWVz
ICIqc3BhbiIgdG8gcG9pbnQgdG8gdGhlIGZpcnN0IHNwYW4gb2YgbGVuZ3RoICJuIiBwYWdlcy4K
LSAgLy8gUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIHNlY29uZCBzcGFuLgotICAvLwotICAvLyBS
RVFVSVJFUzogIjAgPCBuIDwgc3Bhbi0+bGVuZ3RoIgotICAvLyBSRVFVSVJFUzogIXNwYW4tPmZy
ZWUKLSAgLy8gUkVRVUlSRVM6IHNwYW4tPnNpemVjbGFzcyA9PSAwCi0gIFNwYW4qIFNwbGl0KFNw
YW4qIHNwYW4sIExlbmd0aCBuKTsKLQotICAvLyBSZXR1cm4gdGhlIGRlc2NyaXB0b3IgZm9yIHRo
ZSBzcGVjaWZpZWQgcGFnZS4KLSAgaW5saW5lIFNwYW4qIEdldERlc2NyaXB0b3IoUGFnZUlEIHAp
IGNvbnN0IHsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxTcGFuKj4ocGFnZW1hcF8uZ2V0
KHApKTsKLSAgfQorICAgIC8vIERlbGV0ZSB0aGUgc3BhbiAiW3AsIHArbi0xXSIuCisgICAgLy8g
UkVRVUlSRVM6IHNwYW4gd2FzIHJldHVybmVkIGJ5IGVhcmxpZXIgY2FsbCB0byBOZXcoKSBhbmQK
KyAgICAvLyAgICAgICAgICAgaGFzIG5vdCB5ZXQgYmVlbiBkZWxldGVkLgorICAgIHZvaWQgRGVs
ZXRlKFNwYW4qKTsKKworICAgIC8vIE1hcmsgYW4gYWxsb2NhdGVkIHNwYW4gYXMgYmVpbmcgdXNl
ZCBmb3Igc21hbGwgb2JqZWN0cyBvZiB0aGUKKyAgICAvLyBzcGVjaWZpZWQgc2l6ZS1jbGFzcy4K
KyAgICAvLyBSRVFVSVJFUzogc3BhbiB3YXMgcmV0dXJuZWQgYnkgYW4gZWFybGllciBjYWxsIHRv
IE5ldygpCisgICAgLy8gICAgICAgICAgIGFuZCBoYXMgbm90IHlldCBiZWVuIGRlbGV0ZWQuCisg
ICAgdm9pZCBSZWdpc3RlclNpemVDbGFzcyhTcGFuKiwgc2l6ZV90IHNjKTsKKworICAgIC8vIFNw
bGl0IGFuIGFsbG9jYXRlZCBzcGFuIGludG8gdHdvIHNwYW5zOiBvbmUgb2YgbGVuZ3RoICJuIiBw
YWdlcworICAgIC8vIGZvbGxvd2VkIGJ5IGFub3RoZXIgc3BhbiBvZiBsZW5ndGggInNwYW4tPmxl
bmd0aCAtIG4iIHBhZ2VzLgorICAgIC8vIE1vZGlmaWVzICIqc3BhbiIgdG8gcG9pbnQgdG8gdGhl
IGZpcnN0IHNwYW4gb2YgbGVuZ3RoICJuIiBwYWdlcy4KKyAgICAvLyBSZXR1cm5zIGEgcG9pbnRl
ciB0byB0aGUgc2Vjb25kIHNwYW4uCisgICAgLy8KKyAgICAvLyBSRVFVSVJFUzogIjAgPCBuIDwg
c3Bhbi0+bGVuZ3RoIgorICAgIC8vIFJFUVVJUkVTOiAhc3Bhbi0+ZnJlZQorICAgIC8vIFJFUVVJ
UkVTOiBzcGFuLT5zaXplQ2xhc3MgPT0gMAorICAgIFNwYW4qIFNwbGl0KFNwYW4qLCBMZW5ndGgp
OworCisgICAgLy8gUmV0dXJuIHRoZSBkZXNjcmlwdG9yIGZvciB0aGUgc3BlY2lmaWVkIHBhZ2Uu
CisgICAgaW5saW5lIFNwYW4qIEdldERlc2NyaXB0b3IoUGFnZUlEIHApIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxTcGFuKj4ocGFnZU1hcC5nZXQocCkpOwor
ICAgIH0KIAogI2lmZGVmIFdURl9DSEFOR0VTCi0gIGlubGluZSBTcGFuKiBHZXREZXNjcmlwdG9y
RW5zdXJlU2FmZShQYWdlSUQgcCkKLSAgewotICAgICAgcGFnZW1hcF8uRW5zdXJlKHAsIDEpOwot
ICAgICAgcmV0dXJuIEdldERlc2NyaXB0b3IocCk7Ci0gIH0KKyAgICBpbmxpbmUgU3BhbiogR2V0
RGVzY3JpcHRvckVuc3VyZVNhZmUoUGFnZUlEIHApCisgICAgeworICAgICAgICBwYWdlTWFwLkVu
c3VyZShwLCAxKTsKKyAgICAgICAgcmV0dXJuIEdldERlc2NyaXB0b3IocCk7CisgICAgfQogICAg
IAotICBzaXplX3QgUmV0dXJuZWRCeXRlcygpIGNvbnN0OworICAgIHNpemVfdCBSZXR1cm5lZEJ5
dGVzKCkgY29uc3Q7CiAjZW5kaWYKIAotICAvLyBEdW1wIHN0YXRlIHRvIHN0ZGVycgorICAgIC8v
IER1bXAgc3RhdGUgdG8gc3RkZXJyCiAjaWZuZGVmIFdURl9DSEFOR0VTCi0gIHZvaWQgRHVtcChU
Q01hbGxvY19QcmludGVyKiBvdXQpOworICAgIHZvaWQgRHVtcChUQ01hbGxvY19QcmludGVyKiBv
dXQpOwogI2VuZGlmCiAKLSAgLy8gUmV0dXJuIG51bWJlciBvZiBieXRlcyBhbGxvY2F0ZWQgZnJv
bSBzeXN0ZW0KLSAgaW5saW5lIHVpbnQ2NF90IFN5c3RlbUJ5dGVzKCkgY29uc3QgeyByZXR1cm4g
c3lzdGVtX2J5dGVzXzsgfQorICAgIC8vIFJldHVybiBudW1iZXIgb2YgYnl0ZXMgYWxsb2NhdGVk
IGZyb20gc3lzdGVtCisgICAgaW5saW5lIHVpbnQ2NF90IFN5c3RlbUJ5dGVzKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBzeXN0ZW1CeXRlczsKKyAgICB9CiAKLSAgLy8gUmV0dXJuIG51
bWJlciBvZiBmcmVlIGJ5dGVzIGluIGhlYXAKLSAgdWludDY0X3QgRnJlZUJ5dGVzKCkgY29uc3Qg
ewotICAgIHJldHVybiAoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGZyZWVfcGFnZXNfKSA8PCBrUGFn
ZVNoaWZ0KTsKLSAgfQorICAgIC8vIFJldHVybiBudW1iZXIgb2YgZnJlZSBieXRlcyBpbiBoZWFw
CisgICAgdWludDY0X3QgRnJlZUJ5dGVzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAo
c3RhdGljX2Nhc3Q8dWludDY0X3Q+KGZyZWVQYWdlcykgPDwga1BhZ2VTaGlmdCk7CisgICAgfQog
Ci0gIGJvb2wgQ2hlY2soKTsKLSAgc2l6ZV90IENoZWNrTGlzdChTcGFuKiBsaXN0LCBMZW5ndGgg
bWluX3BhZ2VzLCBMZW5ndGggbWF4X3BhZ2VzLCBib29sIGRlY29tbWl0dGVkKTsKKyAgICBib29s
IENoZWNrKCk7CisgICAgc2l6ZV90IENoZWNrTGlzdChTcGFuKiBsaXN0LCBMZW5ndGggbWluUGFn
ZXMsIExlbmd0aCBtYXhQYWdlcywgYm9vbCBkZWNvbW1pdHRlZCk7CiAKLSAgLy8gUmVsZWFzZSBh
bGwgcGFnZXMgb24gdGhlIGZyZWUgbGlzdCBmb3IgcmV1c2UgYnkgdGhlIE9TOgotICB2b2lkIFJl
bGVhc2VGcmVlUGFnZXMoKTsKLSAgdm9pZCBSZWxlYXNlRnJlZUxpc3QoU3BhbiosIFNwYW4qKTsK
LQotICAvLyBSZXR1cm4gMCBpZiB3ZSBoYXZlIG5vIGluZm9ybWF0aW9uLCBvciBlbHNlIHRoZSBj
b3JyZWN0IHNpemVjbGFzcyBmb3IgcC4KLSAgLy8gUmVhZHMgYW5kIHdyaXRlcyB0byBwYWdlbWFw
X2NhY2hlXyBkbyBub3QgcmVxdWlyZSBsb2NraW5nLgotICAvLyBUaGUgZW50cmllcyBhcmUgNjQg
Yml0cyBvbiA2NC1iaXQgaGFyZHdhcmUgYW5kIDE2IGJpdHMgb24KLSAgLy8gMzItYml0IGhhcmR3
YXJlLCBhbmQgd2UgZG9uJ3QgbWluZCByYWNpbmVzcyBhcyBsb25nIGFzIGVhY2ggcmVhZCBvZgot
ICAvLyBhbiBlbnRyeSB5aWVsZHMgYSB2YWxpZCBlbnRyeSwgbm90IGEgcGFydGlhbGx5IHVwZGF0
ZWQgZW50cnkuCi0gIHNpemVfdCBHZXRTaXplQ2xhc3NJZkNhY2hlZChQYWdlSUQgcCkgY29uc3Qg
ewotICAgIHJldHVybiBwYWdlbWFwX2NhY2hlXy5HZXRPckRlZmF1bHQocCwgMCk7Ci0gIH0KLSAg
dm9pZCBDYWNoZVNpemVDbGFzcyhQYWdlSUQgcCwgc2l6ZV90IGNsKSBjb25zdCB7IHBhZ2VtYXBf
Y2FjaGVfLlB1dChwLCBjbCk7IH0KKyAgICAvLyBSZWxlYXNlIGFsbCBwYWdlcyBvbiB0aGUgZnJl
ZSBsaXN0IGZvciByZXVzZSBieSB0aGUgT1M6CisgICAgdm9pZCBSZWxlYXNlRnJlZVBhZ2VzKCk7
CisgICAgdm9pZCBSZWxlYXNlRnJlZUxpc3QoU3BhbiosIFNwYW4qKTsKKworICAgIC8vIFJldHVy
biAwIGlmIHdlIGhhdmUgbm8gaW5mb3JtYXRpb24sIG9yIGVsc2UgdGhlIGNvcnJlY3Qgc2l6ZUNs
YXNzIGZvciBwLgorICAgIC8vIFJlYWRzIGFuZCB3cml0ZXMgdG8gcGFnZU1hcENhY2hlIGRvIG5v
dCByZXF1aXJlIGxvY2tpbmcuCisgICAgLy8gVGhlIGVudHJpZXMgYXJlIDY0IGJpdHMgb24gNjQt
Yml0IGhhcmR3YXJlIGFuZCAxNiBiaXRzIG9uCisgICAgLy8gMzItYml0IGhhcmR3YXJlLCBhbmQg
d2UgZG9uJ3QgbWluZCByYWNpbmVzcyBhcyBsb25nIGFzIGVhY2ggcmVhZCBvZgorICAgIC8vIGFu
IGVudHJ5IHlpZWxkcyBhIHZhbGlkIGVudHJ5LCBub3QgYSBwYXJ0aWFsbHkgdXBkYXRlZCBlbnRy
eS4KKyAgICBzaXplX3QgR2V0U2l6ZUNsYXNzSWZDYWNoZWQoUGFnZUlEIHApIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gcGFnZU1hcENhY2hlLkdldE9yRGVmYXVsdChwLCAwKTsKKyAgICB9
CisgICAgdm9pZCBDYWNoZVNpemVDbGFzcyhQYWdlSUQgcCwgc2l6ZV90IGNsKSBjb25zdAorICAg
IHsKKyAgICAgICAgcGFnZU1hcENhY2hlLlB1dChwLCBjbCk7CisgICAgfQogCi0gcHJpdmF0ZToK
LSAgLy8gUGljayB0aGUgYXBwcm9wcmlhdGUgbWFwIGFuZCBjYWNoZSB0eXBlcyBiYXNlZCBvbiBw
b2ludGVyIHNpemUKLSAgdHlwZWRlZiBNYXBTZWxlY3Rvcjw4KnNpemVvZih1aW50cHRyX3QpPjo6
VHlwZSBQYWdlTWFwOwotICB0eXBlZGVmIE1hcFNlbGVjdG9yPDgqc2l6ZW9mKHVpbnRwdHJfdCk+
OjpDYWNoZVR5cGUgUGFnZU1hcENhY2hlOwotICBQYWdlTWFwIHBhZ2VtYXBfOwotICBtdXRhYmxl
IFBhZ2VNYXBDYWNoZSBwYWdlbWFwX2NhY2hlXzsKLQotICAvLyBXZSBzZWdyZWdhdGUgc3BhbnMg
b2YgYSBnaXZlbiBzaXplIGludG8gdHdvIGNpcmN1bGFyIGxpbmtlZAotICAvLyBsaXN0czogb25l
IGZvciBub3JtYWwgc3BhbnMsIGFuZCBvbmUgZm9yIHNwYW5zIHdob3NlIG1lbW9yeQotICAvLyBo
YXMgYmVlbiByZXR1cm5lZCB0byB0aGUgc3lzdGVtLgotICBzdHJ1Y3QgU3Bhbkxpc3QgewotICAg
IFNwYW4gICAgICAgIG5vcm1hbDsKLSAgICBTcGFuICAgICAgICByZXR1cm5lZDsKLSAgfTsKLQot
ICAvLyBMaXN0IG9mIGZyZWUgc3BhbnMgb2YgbGVuZ3RoID49IGtNYXhQYWdlcwotICBTcGFuTGlz
dCBsYXJnZV87Citwcml2YXRlOgorICAgIC8vIFBpY2sgdGhlIGFwcHJvcHJpYXRlIG1hcCBhbmQg
Y2FjaGUgdHlwZXMgYmFzZWQgb24gcG9pbnRlciBzaXplCisgICAgdHlwZWRlZiBNYXBTZWxlY3Rv
cjw4KnNpemVvZih1aW50cHRyX3QpPjo6VHlwZSBQYWdlTWFwOworICAgIHR5cGVkZWYgTWFwU2Vs
ZWN0b3I8OCpzaXplb2YodWludHB0cl90KT46OkNhY2hlVHlwZSBQYWdlTWFwQ2FjaGU7CisgICAg
UGFnZU1hcCBwYWdlTWFwOworICAgIG11dGFibGUgUGFnZU1hcENhY2hlIHBhZ2VNYXBDYWNoZTsK
KworICAgIC8vIFdlIHNlZ3JlZ2F0ZSBzcGFucyBvZiBhIGdpdmVuIHNpemUgaW50byB0d28gY2ly
Y3VsYXIgbGlua2VkCisgICAgLy8gbGlzdHM6IG9uZSBmb3Igbm9ybWFsIHNwYW5zLCBhbmQgb25l
IGZvciBzcGFucyB3aG9zZSBtZW1vcnkKKyAgICAvLyBoYXMgYmVlbiByZXR1cm5lZCB0byB0aGUg
c3lzdGVtLgorICAgIHN0cnVjdCBTcGFuTGlzdCB7CisgICAgICAgIFNwYW4gbm9ybWFsOworICAg
ICAgICBTcGFuIHJldHVybmVkOworICAgIH07CiAKLSAgLy8gQXJyYXkgbWFwcGluZyBmcm9tIHNw
YW4gbGVuZ3RoIHRvIGEgZG91Ymx5IGxpbmtlZCBsaXN0IG9mIGZyZWUgc3BhbnMKLSAgU3Bhbkxp
c3QgZnJlZV9ba01heFBhZ2VzXTsKKyAgICAvLyBMaXN0IG9mIGZyZWUgc3BhbnMgb2YgbGVuZ3Ro
ID49IGtNYXhQYWdlcworICAgIFNwYW5MaXN0IGxhcmdlOwogCi0gIC8vIE51bWJlciBvZiBwYWdl
cyBrZXB0IGluIGZyZWUgbGlzdHMKLSAgdWludHB0cl90IGZyZWVfcGFnZXNfOworICAgIC8vIEFy
cmF5IG1hcHBpbmcgZnJvbSBzcGFuIGxlbmd0aCB0byBhIGRvdWJseSBsaW5rZWQgbGlzdCBvZiBm
cmVlIHNwYW5zCisgICAgU3Bhbkxpc3QgZnJlZVNwYW5MaXN0W2tNYXhQYWdlc107CiAKLSAgLy8g
Qnl0ZXMgYWxsb2NhdGVkIGZyb20gc3lzdGVtCi0gIHVpbnQ2NF90IHN5c3RlbV9ieXRlc187Cisg
ICAgLy8gTnVtYmVyIG9mIHBhZ2VzIGtlcHQgaW4gZnJlZSBsaXN0cworICAgIHVpbnRwdHJfdCBm
cmVlUGFnZXM7CisKKyAgICAvLyBCeXRlcyBhbGxvY2F0ZWQgZnJvbSBzeXN0ZW0KKyAgICB1aW50
NjRfdCBzeXN0ZW1CeXRlczsKIAogI2lmIFVTRV9CQUNLR1JPVU5EX1RIUkVBRF9UT19TQ0FWRU5H
RV9NRU1PUlkKLSAgLy8gTnVtYmVyIG9mIHBhZ2VzIGtlcHQgaW4gZnJlZSBsaXN0cyB0aGF0IGFy
ZSBzdGlsbCBjb21taXR0ZWQuCi0gIExlbmd0aCBmcmVlX2NvbW1pdHRlZF9wYWdlc187CisgICAg
Ly8gTnVtYmVyIG9mIHBhZ2VzIGtlcHQgaW4gZnJlZSBsaXN0cyB0aGF0IGFyZSBzdGlsbCBjb21t
aXR0ZWQuCisgICAgTGVuZ3RoIGZyZWVDb21taXR0ZWRQYWdlczsKKworICAgIC8vIE1pbmltdW0g
bnVtYmVyIG9mIGZyZWUgY29tbWl0dGVkIHBhZ2VzIHNpbmNlIGxhc3Qgc2NhdmVuZ2UuIChDYW4g
YmUgMCBpZgorICAgIC8vIHdlJ3ZlIGNvbW1pdHRlZCBuZXcgcGFnZXMgc2luY2UgdGhlIGxhc3Qg
c2NhdmVuZ2UuKQorICAgIExlbmd0aCBtaW5GcmVlQ29tbWl0dGVkUGFnZXNTaW5jZUxhc3RTY2F2
ZW5nZTsKKyNlbmRpZgorCisgICAgYm9vbCBHcm93SGVhcChMZW5ndGgpOworCisgICAgLy8gUkVR
VUlSRVMgICBzcGFuLT5sZW5ndGggPj0gbgorICAgIC8vIFJlbW92ZSBzcGFuIGZyb20gaXRzIGZy
ZWUgbGlzdCwgYW5kIG1vdmUgYW55IGxlZnRvdmVyIHBhcnQgb2YKKyAgICAvLyBzcGFuIGludG8g
YXBwcm9wcmlhdGUgZnJlZSBsaXN0cy4gQWxzbyB1cGRhdGUgInNwYW4iIHRvIGhhdmUKKyAgICAv
LyBsZW5ndGggZXhhY3RseSAibiIgYW5kIG1hcmsgaXQgYXMgbm9uLWZyZWUgc28gaXQgY2FuIGJl
IHJldHVybmVkCisgICAgLy8gdG8gdGhlIGNsaWVudC4KKyAgICAvLworICAgIC8vICJyZWxlYXNl
ZCIgaXMgdHJ1ZSBpZmYgInNwYW4iIHdhcyBmb3VuZCBvbiBhICJyZXR1cm5lZCIgbGlzdC4KKyAg
ICB2b2lkIENhcnZlKFNwYW4qLCBMZW5ndGgsIGJvb2wgcmVsZWFzZWQpOwogCi0gIC8vIE1pbmlt
dW0gbnVtYmVyIG9mIGZyZWUgY29tbWl0dGVkIHBhZ2VzIHNpbmNlIGxhc3Qgc2NhdmVuZ2UuIChD
YW4gYmUgMCBpZgotICAvLyB3ZSd2ZSBjb21taXR0ZWQgbmV3IHBhZ2VzIHNpbmNlIHRoZSBsYXN0
IHNjYXZlbmdlLikKLSAgTGVuZ3RoIG1pbl9mcmVlX2NvbW1pdHRlZF9wYWdlc19zaW5jZV9sYXN0
X3NjYXZlbmdlXzsKLSNlbmRpZgotCi0gIGJvb2wgR3Jvd0hlYXAoTGVuZ3RoIG4pOwotCi0gIC8v
IFJFUVVJUkVTICAgc3Bhbi0+bGVuZ3RoID49IG4KLSAgLy8gUmVtb3ZlIHNwYW4gZnJvbSBpdHMg
ZnJlZSBsaXN0LCBhbmQgbW92ZSBhbnkgbGVmdG92ZXIgcGFydCBvZgotICAvLyBzcGFuIGludG8g
YXBwcm9wcmlhdGUgZnJlZSBsaXN0cy4gIEFsc28gdXBkYXRlICJzcGFuIiB0byBoYXZlCi0gIC8v
IGxlbmd0aCBleGFjdGx5ICJuIiBhbmQgbWFyayBpdCBhcyBub24tZnJlZSBzbyBpdCBjYW4gYmUg
cmV0dXJuZWQKLSAgLy8gdG8gdGhlIGNsaWVudC4KLSAgLy8KLSAgLy8gInJlbGVhc2VkIiBpcyB0
cnVlIGlmZiAic3BhbiIgd2FzIGZvdW5kIG9uIGEgInJldHVybmVkIiBsaXN0LgotICB2b2lkIENh
cnZlKFNwYW4qIHNwYW4sIExlbmd0aCBuLCBib29sIHJlbGVhc2VkKTsKLQotICB2b2lkIFJlY29y
ZFNwYW4oU3Bhbiogc3BhbikgewotICAgIHBhZ2VtYXBfLnNldChzcGFuLT5zdGFydCwgc3Bhbik7
Ci0gICAgaWYgKHNwYW4tPmxlbmd0aCA+IDEpIHsKLSAgICAgIHBhZ2VtYXBfLnNldChzcGFuLT5z
dGFydCArIHNwYW4tPmxlbmd0aCAtIDEsIHNwYW4pOworICAgIHZvaWQgUmVjb3JkU3BhbihTcGFu
KiBzcGFuKQorICAgIHsKKyAgICAgICAgcGFnZU1hcC5zZXQoc3Bhbi0+c3RhcnQsIHNwYW4pOwor
ICAgICAgICBpZiAoc3Bhbi0+bGVuZ3RoID4gMSkKKyAgICAgICAgICAgIHBhZ2VNYXAuc2V0KHNw
YW4tPnN0YXJ0ICsgc3Bhbi0+bGVuZ3RoIC0gMSwgc3Bhbik7CiAgICAgfQotICB9CiAgIAotICAg
IC8vIEFsbG9jYXRlIGEgbGFyZ2Ugc3BhbiBvZiBsZW5ndGggPT0gbi4gIElmIHN1Y2Nlc3NmdWws
IHJldHVybnMgYQotICAvLyBzcGFuIG9mIGV4YWN0bHkgdGhlIHNwZWNpZmllZCBsZW5ndGguICBF
bHNlLCByZXR1cm5zIE5VTEwuCi0gIFNwYW4qIEFsbG9jTGFyZ2UoTGVuZ3RoIG4pOworICAgIC8v
IEFsbG9jYXRlIGEgbGFyZ2Ugc3BhbiBvZiBsZW5ndGggPT0gbi4gSWYgc3VjY2Vzc2Z1bCwgcmV0
dXJucyBhCisgICAgLy8gc3BhbiBvZiBleGFjdGx5IHRoZSBzcGVjaWZpZWQgbGVuZ3RoLiBFbHNl
LCByZXR1cm5zIDAuCisgICAgU3BhbiogQWxsb2NMYXJnZShMZW5ndGgpOwogCiAjaWYgIVVTRV9C
QUNLR1JPVU5EX1RIUkVBRF9UT19TQ0FWRU5HRV9NRU1PUlkKLSAgLy8gSW5jcmVtZW50YWxseSBy
ZWxlYXNlIHNvbWUgbWVtb3J5IHRvIHRoZSBzeXN0ZW0uCi0gIC8vIEluY3JlbWVudGFsU2NhdmVu
Z2UobikgaXMgY2FsbGVkIHdoZW5ldmVyIG4gcGFnZXMgYXJlIGZyZWVkLgotICB2b2lkIEluY3Jl
bWVudGFsU2NhdmVuZ2UoTGVuZ3RoIG4pOworICAgIC8vIEluY3JlbWVudGFsbHkgcmVsZWFzZSBz
b21lIG1lbW9yeSB0byB0aGUgc3lzdGVtLgorICAgIC8vIEluY3JlbWVudGFsU2NhdmVuZ2Uobikg
aXMgY2FsbGVkIHdoZW5ldmVyIG4gcGFnZXMgYXJlIGZyZWVkLgorICAgIHZvaWQgSW5jcmVtZW50
YWxTY2F2ZW5nZShMZW5ndGgpOwogI2VuZGlmCiAKLSAgLy8gTnVtYmVyIG9mIHBhZ2VzIHRvIGRl
YWxsb2NhdGUgYmVmb3JlIGRvaW5nIG1vcmUgc2NhdmVuZ2luZwotICBpbnQ2NF90IHNjYXZlbmdl
X2NvdW50ZXJfOworICAgIC8vIE51bWJlciBvZiBwYWdlcyB0byBkZWFsbG9jYXRlIGJlZm9yZSBk
b2luZyBtb3JlIHNjYXZlbmdpbmcKKyAgICBpbnQ2NF90IHNjYXZlbmdlQ291bnRlcjsKIAotICAv
LyBJbmRleCBvZiBsYXN0IGZyZWUgbGlzdCB3ZSBzY2F2ZW5nZWQKLSAgc2l6ZV90IHNjYXZlbmdl
X2luZGV4XzsKKyAgICAvLyBJbmRleCBvZiBsYXN0IGZyZWUgbGlzdCB3ZSBzY2F2ZW5nZWQKKyAg
ICBzaXplX3Qgc2NhdmVuZ2VJbmRleDsKICAgCiAjaWYgZGVmaW5lZChXVEZfQ0hBTkdFUykgJiYg
T1MoREFSV0lOKQotICBmcmllbmQgY2xhc3MgRmFzdE1hbGxvY1pvbmU7CisgICAgZnJpZW5kIGNs
YXNzIEZhc3RNYWxsb2Nab25lOwogI2VuZGlmCiAKICNpZiBVU0VfQkFDS0dST1VORF9USFJFQURf
VE9fU0NBVkVOR0VfTUVNT1JZCi0gIHZvaWQgaW5pdGlhbGl6ZVNjYXZlbmdlcigpOwotICBBTFdB
WVNfSU5MSU5FIHZvaWQgc2lnbmFsU2NhdmVuZ2VyKCk7Ci0gIHZvaWQgc2NhdmVuZ2UoKTsKLSAg
QUxXQVlTX0lOTElORSBib29sIHNob3VsZFNjYXZlbmdlKCkgY29uc3Q7CisgICAgdm9pZCBpbml0
aWFsaXplU2NhdmVuZ2VyKCk7CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNpZ25hbFNjYXZlbmdl
cigpOworICAgIHZvaWQgc2NhdmVuZ2UoKTsKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgc2hvdWxk
U2NhdmVuZ2UoKSBjb25zdDsKIAogI2lmIEhBVkUoRElTUEFUQ0hfSCkgfHwgT1MoV0lORE9XUykK
LSAgdm9pZCBwZXJpb2RpY1NjYXZlbmdlKCk7Ci0gIEFMV0FZU19JTkxJTkUgYm9vbCBpc1NjYXZl
bmdlclN1c3BlbmRlZCgpOwotICBBTFdBWVNfSU5MSU5FIHZvaWQgc2NoZWR1bGVTY2F2ZW5nZXIo
KTsKLSAgQUxXQVlTX0lOTElORSB2b2lkIHJlc2NoZWR1bGVTY2F2ZW5nZXIoKTsKLSAgQUxXQVlT
X0lOTElORSB2b2lkIHN1c3BlbmRTY2F2ZW5nZXIoKTsKKyAgICB2b2lkIHBlcmlvZGljU2NhdmVu
Z2UoKTsKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNTY2F2ZW5nZXJTdXNwZW5kZWQoKTsKKyAg
ICBBTFdBWVNfSU5MSU5FIHZvaWQgc2NoZWR1bGVTY2F2ZW5nZXIoKTsKKyAgICBBTFdBWVNfSU5M
SU5FIHZvaWQgcmVzY2hlZHVsZVNjYXZlbmdlcigpOworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBz
dXNwZW5kU2NhdmVuZ2VyKCk7CiAjZW5kaWYKIAogI2lmIEhBVkUoRElTUEFUQ0hfSCkKLSAgZGlz
cGF0Y2hfcXVldWVfdCBtX3NjYXZlbmdlUXVldWU7Ci0gIGRpc3BhdGNoX3NvdXJjZV90IG1fc2Nh
dmVuZ2VUaW1lcjsKLSAgYm9vbCBtX3NjYXZlbmdpbmdTdXNwZW5kZWQ7CisgICAgZGlzcGF0Y2hf
cXVldWVfdCBtX3NjYXZlbmdlUXVldWU7CisgICAgZGlzcGF0Y2hfc291cmNlX3QgbV9zY2F2ZW5n
ZVRpbWVyOworICAgIGJvb2wgbV9zY2F2ZW5naW5nU3VzcGVuZGVkOwogI2VsaWYgT1MoV0lORE9X
UykKLSAgc3RhdGljIHZvaWQgQ0FMTEJBQ0sgc2NhdmVuZ2VyVGltZXJGaXJlZCh2b2lkKiwgQk9P
TEVBTik7Ci0gIEhBTkRMRSBtX3NjYXZlbmdlUXVldWVUaW1lcjsKKyAgICBzdGF0aWMgdm9pZCBD
QUxMQkFDSyBzY2F2ZW5nZXJUaW1lckZpcmVkKHZvaWQqLCBCT09MRUFOKTsKKyAgICBIQU5ETEUg
bV9zY2F2ZW5nZVF1ZXVlVGltZXI7CiAjZWxzZSAKLSAgc3RhdGljIE5PX1JFVFVSTl9XSVRIX1ZB
TFVFIHZvaWQqIHJ1blNjYXZlbmdlclRocmVhZCh2b2lkKik7Ci0gIE5PX1JFVFVSTiB2b2lkIHNj
YXZlbmdlclRocmVhZCgpOworICAgIHN0YXRpYyBOT19SRVRVUk5fV0lUSF9WQUxVRSB2b2lkKiBy
dW5TY2F2ZW5nZXJUaHJlYWQodm9pZCopOworICAgIE5PX1JFVFVSTiB2b2lkIHNjYXZlbmdlclRo
cmVhZCgpOwogCi0gIC8vIEtlZXBzIHRyYWNrIG9mIHdoZXRoZXIgdGhlIGJhY2tncm91bmQgdGhy
ZWFkIGlzIGFjdGl2ZWx5IHNjYXZlbmdpbmcgbWVtb3J5IGV2ZXJ5IGtTY2F2ZW5nZURlbGF5SW5T
ZWNvbmRzLCBvcgotICAvLyBpdCdzIGJsb2NrZWQgd2FpdGluZyBmb3IgbW9yZSBwYWdlcyB0byBi
ZSBkZWxldGVkLgotICBib29sIG1fc2NhdmVuZ2VUaHJlYWRBY3RpdmU7CisgICAgLy8gS2VlcHMg
dHJhY2sgb2Ygd2hldGhlciB0aGUgYmFja2dyb3VuZCB0aHJlYWQgaXMgYWN0aXZlbHkgc2NhdmVu
Z2luZyBtZW1vcnkgZXZlcnkga1NjYXZlbmdlRGVsYXlJblNlY29uZHMsIG9yCisgICAgLy8gaXQn
cyBibG9ja2VkIHdhaXRpbmcgZm9yIG1vcmUgcGFnZXMgdG8gYmUgZGVsZXRlZC4KKyAgICBib29s
IG1fc2NhdmVuZ2VUaHJlYWRBY3RpdmU7CiAKLSAgcHRocmVhZF9tdXRleF90IG1fc2NhdmVuZ2VN
dXRleDsKLSAgcHRocmVhZF9jb25kX3QgbV9zY2F2ZW5nZUNvbmRpdGlvbjsKKyAgICBwdGhyZWFk
X211dGV4X3QgbV9zY2F2ZW5nZU11dGV4OworICAgIHB0aHJlYWRfY29uZF90IG1fc2NhdmVuZ2VD
b25kaXRpb247CiAjZW5kaWYKIAotI2VuZGlmICAvLyBVU0VfQkFDS0dST1VORF9USFJFQURfVE9f
U0NBVkVOR0VfTUVNT1JZCisjZW5kaWYgLy8gVVNFX0JBQ0tHUk9VTkRfVEhSRUFEX1RPX1NDQVZF
TkdFX01FTU9SWQogfTsKIAotdm9pZCBUQ01hbGxvY19QYWdlSGVhcDo6aW5pdCgpCit2b2lkIFRD
TWFsbG9jUGFnZUhlYXA6OmluaXQoKQogewotICBwYWdlbWFwXy5pbml0KE1ldGFEYXRhQWxsb2Mp
OwotICBwYWdlbWFwX2NhY2hlXyA9IFBhZ2VNYXBDYWNoZSgwKTsKLSAgZnJlZV9wYWdlc18gPSAw
OwotICBzeXN0ZW1fYnl0ZXNfID0gMDsKKyAgICBwYWdlTWFwLmluaXQoTWV0YURhdGFBbGxvYyk7
CisgICAgcGFnZU1hcENhY2hlID0gUGFnZU1hcENhY2hlKDApOworICAgIGZyZWVQYWdlcyA9IDA7
CisgICAgc3lzdGVtQnl0ZXMgPSAwOwogCiAjaWYgVVNFX0JBQ0tHUk9VTkRfVEhSRUFEX1RPX1ND
QVZFTkdFX01FTU9SWQotICBmcmVlX2NvbW1pdHRlZF9wYWdlc18gPSAwOwotICBtaW5fZnJlZV9j
b21taXR0ZWRfcGFnZXNfc2luY2VfbGFzdF9zY2F2ZW5nZV8gPSAwOwotI2VuZGlmICAvLyBVU0Vf
QkFDS0dST1VORF9USFJFQURfVE9fU0NBVkVOR0VfTUVNT1JZCi0KLSAgc2NhdmVuZ2VfY291bnRl
cl8gPSAwOwotICAvLyBTdGFydCBzY2F2ZW5naW5nIGF0IGtNYXhQYWdlcyBsaXN0Ci0gIHNjYXZl
bmdlX2luZGV4XyA9IGtNYXhQYWdlcy0xOwotICBDT01QSUxFX0FTU0VSVChrTnVtQ2xhc3NlcyA8
PSAoMSA8PCBQYWdlTWFwQ2FjaGU6OmtWYWx1ZWJpdHMpLCB2YWx1ZWJpdHMpOwotICBETExfSW5p
dCgmbGFyZ2VfLm5vcm1hbCk7Ci0gIERMTF9Jbml0KCZsYXJnZV8ucmV0dXJuZWQpOwotICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGtNYXhQYWdlczsgaSsrKSB7Ci0gICAgRExMX0luaXQoJmZyZWVf
W2ldLm5vcm1hbCk7Ci0gICAgRExMX0luaXQoJmZyZWVfW2ldLnJldHVybmVkKTsKLSAgfQorICAg
IGZyZWVDb21taXR0ZWRQYWdlcyA9IDA7CisgICAgbWluRnJlZUNvbW1pdHRlZFBhZ2VzU2luY2VM
YXN0U2NhdmVuZ2UgPSAwOworI2VuZGlmIC8vIFVTRV9CQUNLR1JPVU5EX1RIUkVBRF9UT19TQ0FW
RU5HRV9NRU1PUlkKKworICAgIHNjYXZlbmdlQ291bnRlciA9IDA7CisgICAgLy8gU3RhcnQgc2Nh
dmVuZ2luZyBhdCBrTWF4UGFnZXMgbGlzdAorICAgIHNjYXZlbmdlSW5kZXggPSBrTWF4UGFnZXMt
MTsKKyAgICBDT01QSUxFX0FTU0VSVChrTnVtQ2xhc3NlcyA8PSAoMSA8PCBQYWdlTWFwQ2FjaGU6
OmtWYWx1ZWJpdHMpLCB2YWx1ZWJpdHMpOworICAgIERMTEluaXQoJmxhcmdlLm5vcm1hbCk7Cisg
ICAgRExMSW5pdCgmbGFyZ2UucmV0dXJuZWQpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
a01heFBhZ2VzOyBpKyspIHsKKyAgICAgICAgRExMSW5pdCgmZnJlZVNwYW5MaXN0W2ldLm5vcm1h
bCk7CisgICAgICAgIERMTEluaXQoJmZyZWVTcGFuTGlzdFtpXS5yZXR1cm5lZCk7CisgICAgfQog
CiAjaWYgVVNFX0JBQ0tHUk9VTkRfVEhSRUFEX1RPX1NDQVZFTkdFX01FTU9SWQotICBpbml0aWFs
aXplU2NhdmVuZ2VyKCk7Ci0jZW5kaWYgIC8vIFVTRV9CQUNLR1JPVU5EX1RIUkVBRF9UT19TQ0FW
RU5HRV9NRU1PUlkKKyAgICBpbml0aWFsaXplU2NhdmVuZ2VyKCk7CisjZW5kaWYgLy8gVVNFX0JB
Q0tHUk9VTkRfVEhSRUFEX1RPX1NDQVZFTkdFX01FTU9SWQogfQogCiAjaWYgVVNFX0JBQ0tHUk9V
TkRfVEhSRUFEX1RPX1NDQVZFTkdFX01FTU9SWQogCiAjaWYgSEFWRShESVNQQVRDSF9IKQogCi12
b2lkIFRDTWFsbG9jX1BhZ2VIZWFwOjppbml0aWFsaXplU2NhdmVuZ2VyKCkKK3ZvaWQgVENNYWxs
b2NQYWdlSGVhcDo6aW5pdGlhbGl6ZVNjYXZlbmdlcigpCiB7Ci0gICAgbV9zY2F2ZW5nZVF1ZXVl
ID0gZGlzcGF0Y2hfcXVldWVfY3JlYXRlKCJjb20uYXBwbGUuSmF2YVNjcmlwdENvcmUuRmFzdE1h
bGxvY1NhdmVuZ2VyIiwgTlVMTCk7CisgICAgbV9zY2F2ZW5nZVF1ZXVlID0gZGlzcGF0Y2hfcXVl
dWVfY3JlYXRlKCJjb20uYXBwbGUuSmF2YVNjcmlwdENvcmUuRmFzdE1hbGxvY1NhdmVuZ2VyIiwg
MCk7CiAgICAgbV9zY2F2ZW5nZVRpbWVyID0gZGlzcGF0Y2hfc291cmNlX2NyZWF0ZShESVNQQVRD
SF9TT1VSQ0VfVFlQRV9USU1FUiwgMCwgMCwgbV9zY2F2ZW5nZVF1ZXVlKTsKICAgICBkaXNwYXRj
aF90aW1lX3Qgc3RhcnRUaW1lID0gZGlzcGF0Y2hfdGltZShESVNQQVRDSF9USU1FX05PVywga1Nj
YXZlbmdlRGVsYXlJblNlY29uZHMgKiBOU0VDX1BFUl9TRUMpOwogICAgIGRpc3BhdGNoX3NvdXJj
ZV9zZXRfdGltZXIobV9zY2F2ZW5nZVRpbWVyLCBzdGFydFRpbWUsIGtTY2F2ZW5nZURlbGF5SW5T
ZWNvbmRzICogTlNFQ19QRVJfU0VDLCAxMDAwICogTlNFQ19QRVJfVVNFQyk7CkBAIC0xNTI1LDY3
ICsxNTUzLDY3IEBAIHZvaWQgVENNYWxsb2NfUGFnZUhlYXA6OmluaXRpYWxpemVTY2F2ZW4KICAg
ICBtX3NjYXZlbmdpbmdTdXNwZW5kZWQgPSB0cnVlOwogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wg
VENNYWxsb2NfUGFnZUhlYXA6OmlzU2NhdmVuZ2VyU3VzcGVuZGVkKCkKK0FMV0FZU19JTkxJTkUg
Ym9vbCBUQ01hbGxvY1BhZ2VIZWFwOjppc1NjYXZlbmdlclN1c3BlbmRlZCgpCiB7Ci0gICAgQVNT
RVJUKHBhZ2VoZWFwX2xvY2suSXNIZWxkKCkpOworICAgIEFTU0VSVChwYWdlaGVhcExvY2suSXNI
ZWxkKCkpOwogICAgIHJldHVybiBtX3NjYXZlbmdpbmdTdXNwZW5kZWQ7CiB9CiAKLUFMV0FZU19J
TkxJTkUgdm9pZCBUQ01hbGxvY19QYWdlSGVhcDo6c2NoZWR1bGVTY2F2ZW5nZXIoKQorQUxXQVlT
X0lOTElORSB2b2lkIFRDTWFsbG9jUGFnZUhlYXA6OnNjaGVkdWxlU2NhdmVuZ2VyKCkKIHsKLSAg
ICBBU1NFUlQocGFnZWhlYXBfbG9jay5Jc0hlbGQoKSk7CisgICAgQVNTRVJUKHBhZ2VoZWFwTG9j
ay5Jc0hlbGQoKSk7CiAgICAgbV9zY2F2ZW5naW5nU3VzcGVuZGVkID0gZmFsc2U7CiAgICAgZGlz
cGF0Y2hfcmVzdW1lKG1fc2NhdmVuZ2VUaW1lcik7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBU
Q01hbGxvY19QYWdlSGVhcDo6cmVzY2hlZHVsZVNjYXZlbmdlcigpCitBTFdBWVNfSU5MSU5FIHZv
aWQgVENNYWxsb2NQYWdlSGVhcDo6cmVzY2hlZHVsZVNjYXZlbmdlcigpCiB7CiAgICAgLy8gTm90
aGluZyB0byBkbyBoZXJlIGZvciBsaWJkaXNwYXRjaC4KIH0KIAotQUxXQVlTX0lOTElORSB2b2lk
IFRDTWFsbG9jX1BhZ2VIZWFwOjpzdXNwZW5kU2NhdmVuZ2VyKCkKK0FMV0FZU19JTkxJTkUgdm9p
ZCBUQ01hbGxvY1BhZ2VIZWFwOjpzdXNwZW5kU2NhdmVuZ2VyKCkKIHsKLSAgICBBU1NFUlQocGFn
ZWhlYXBfbG9jay5Jc0hlbGQoKSk7CisgICAgQVNTRVJUKHBhZ2VoZWFwTG9jay5Jc0hlbGQoKSk7
CiAgICAgbV9zY2F2ZW5naW5nU3VzcGVuZGVkID0gdHJ1ZTsKICAgICBkaXNwYXRjaF9zdXNwZW5k
KG1fc2NhdmVuZ2VUaW1lcik7CiB9CiAKICNlbGlmIE9TKFdJTkRPV1MpCiAKLXZvaWQgVENNYWxs
b2NfUGFnZUhlYXA6OnNjYXZlbmdlclRpbWVyRmlyZWQodm9pZCogY29udGV4dCwgQk9PTEVBTikK
K3ZvaWQgVENNYWxsb2NQYWdlSGVhcDo6c2NhdmVuZ2VyVGltZXJGaXJlZCh2b2lkKiBjb250ZXh0
LCBCT09MRUFOKQogewotICAgIHN0YXRpY19jYXN0PFRDTWFsbG9jX1BhZ2VIZWFwKj4oY29udGV4
dCktPnBlcmlvZGljU2NhdmVuZ2UoKTsKKyAgICBzdGF0aWNfY2FzdDxUQ01hbGxvY1BhZ2VIZWFw
Kj4oY29udGV4dCktPnBlcmlvZGljU2NhdmVuZ2UoKTsKIH0KIAotdm9pZCBUQ01hbGxvY19QYWdl
SGVhcDo6aW5pdGlhbGl6ZVNjYXZlbmdlcigpCit2b2lkIFRDTWFsbG9jUGFnZUhlYXA6OmluaXRp
YWxpemVTY2F2ZW5nZXIoKQogewogICAgIG1fc2NhdmVuZ2VRdWV1ZVRpbWVyID0gMDsKIH0KIAot
QUxXQVlTX0lOTElORSBib29sIFRDTWFsbG9jX1BhZ2VIZWFwOjppc1NjYXZlbmdlclN1c3BlbmRl
ZCgpCitBTFdBWVNfSU5MSU5FIGJvb2wgVENNYWxsb2NQYWdlSGVhcDo6aXNTY2F2ZW5nZXJTdXNw
ZW5kZWQoKQogewotICAgIEFTU0VSVChJc0hlbGQocGFnZWhlYXBfbG9jaykpOworICAgIEFTU0VS
VChJc0hlbGQocGFnZWhlYXBMb2NrKSk7CiAgICAgcmV0dXJuICFtX3NjYXZlbmdlUXVldWVUaW1l
cjsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIFRDTWFsbG9jX1BhZ2VIZWFwOjpzY2hlZHVsZVNj
YXZlbmdlcigpCitBTFdBWVNfSU5MSU5FIHZvaWQgVENNYWxsb2NQYWdlSGVhcDo6c2NoZWR1bGVT
Y2F2ZW5nZXIoKQogewogICAgIC8vIFdlIG5lZWQgdG8gdXNlIFdUX0VYRUNVVEVPTkxZT05DRSBo
ZXJlIGFuZCByZXNjaGVkdWxlIHRoZSB0aW1lciwgYmVjYXVzZQogICAgIC8vIFdpbmRvd3Mgd2ls
bCBmaXJlIHRoZSB0aW1lciBldmVudCBldmVuIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGFscmVhZHkg
cnVubmluZy4KLSAgICBBU1NFUlQoSXNIZWxkKHBhZ2VoZWFwX2xvY2spKTsKKyAgICBBU1NFUlQo
SXNIZWxkKHBhZ2VoZWFwTG9jaykpOwogICAgIENyZWF0ZVRpbWVyUXVldWVUaW1lcigmbV9zY2F2
ZW5nZVF1ZXVlVGltZXIsIDAsIHNjYXZlbmdlclRpbWVyRmlyZWQsIHRoaXMsIGtTY2F2ZW5nZURl
bGF5SW5TZWNvbmRzICogMTAwMCwgMCwgV1RfRVhFQ1VURU9OTFlPTkNFKTsKIH0KIAotQUxXQVlT
X0lOTElORSB2b2lkIFRDTWFsbG9jX1BhZ2VIZWFwOjpyZXNjaGVkdWxlU2NhdmVuZ2VyKCkKK0FM
V0FZU19JTkxJTkUgdm9pZCBUQ01hbGxvY1BhZ2VIZWFwOjpyZXNjaGVkdWxlU2NhdmVuZ2VyKCkK
IHsKICAgICAvLyBXZSBtdXN0IGRlbGV0ZSB0aGUgdGltZXIgYW5kIGNyZWF0ZSBpdCBhZ2Fpbiwg
YmVjYXVzZSBpdCBpcyBub3QgcG9zc2libGUgdG8gcmV0cmlnZ2VyIGEgdGltZXIgb24gV2luZG93
cy4KICAgICBzdXNwZW5kU2NhdmVuZ2VyKCk7CiAgICAgc2NoZWR1bGVTY2F2ZW5nZXIoKTsKIH0K
IAotQUxXQVlTX0lOTElORSB2b2lkIFRDTWFsbG9jX1BhZ2VIZWFwOjpzdXNwZW5kU2NhdmVuZ2Vy
KCkKK0FMV0FZU19JTkxJTkUgdm9pZCBUQ01hbGxvY1BhZ2VIZWFwOjpzdXNwZW5kU2NhdmVuZ2Vy
KCkKIHsKLSAgICBBU1NFUlQoSXNIZWxkKHBhZ2VoZWFwX2xvY2spKTsKKyAgICBBU1NFUlQoSXNI
ZWxkKHBhZ2VoZWFwTG9jaykpOwogICAgIEhBTkRMRSBzY2F2ZW5nZVF1ZXVlVGltZXIgPSBtX3Nj
YXZlbmdlUXVldWVUaW1lcjsKICAgICBtX3NjYXZlbmdlUXVldWVUaW1lciA9IDA7CiAgICAgRGVs
ZXRlVGltZXJRdWV1ZVRpbWVyKDAsIHNjYXZlbmdlUXVldWVUaW1lciwgMCk7CkBAIC0xNTkzLDcg
KzE2MjEsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgVENNYWxsb2NfUGFnZUhlYXA6OnN1CiAKICNl
bHNlCiAKLXZvaWQgVENNYWxsb2NfUGFnZUhlYXA6OmluaXRpYWxpemVTY2F2ZW5nZXIoKQordm9p
ZCBUQ01hbGxvY1BhZ2VIZWFwOjppbml0aWFsaXplU2NhdmVuZ2VyKCkKIHsKICAgICAvLyBDcmVh
dGUgYSBub24tcmVjdXJzaXZlIG11dGV4LgogI2lmICFkZWZpbmVkKFBUSFJFQURfTVVURVhfTk9S
TUFMKSB8fCBQVEhSRUFEX01VVEVYX05PUk1BTCA9PSBQVEhSRUFEX01VVEVYX0RFRkFVTFQKQEAg
LTE2MTQsMTYgKzE2NDIsMTYgQEAgdm9pZCBUQ01hbGxvY19QYWdlSGVhcDo6aW5pdGlhbGl6ZVNj
YXZlbgogICAgIHB0aHJlYWRfY3JlYXRlKCZ0aHJlYWQsIDAsIHJ1blNjYXZlbmdlclRocmVhZCwg
dGhpcyk7CiB9CiAKLXZvaWQqIFRDTWFsbG9jX1BhZ2VIZWFwOjpydW5TY2F2ZW5nZXJUaHJlYWQo
dm9pZCogY29udGV4dCkKK3ZvaWQqIFRDTWFsbG9jUGFnZUhlYXA6OnJ1blNjYXZlbmdlclRocmVh
ZCh2b2lkKiBjb250ZXh0KQogewotICAgIHN0YXRpY19jYXN0PFRDTWFsbG9jX1BhZ2VIZWFwKj4o
Y29udGV4dCktPnNjYXZlbmdlclRocmVhZCgpOworICAgIHN0YXRpY19jYXN0PFRDTWFsbG9jUGFn
ZUhlYXAqPihjb250ZXh0KS0+c2NhdmVuZ2VyVGhyZWFkKCk7CiAjaWYgKENPTVBJTEVSKE1TVkMp
IHx8IENPTVBJTEVSKFNVTkNDKSkKICAgICAvLyBXaXRob3V0IHRoaXMsIFZpc3VhbCBTdHVkaW8g
YW5kIFN1biBTdHVkaW8gd2lsbCBjb21wbGFpbiB0aGF0IHRoaXMgbWV0aG9kIGRvZXMgbm90IHJl
dHVybiBhIHZhbHVlLgogICAgIHJldHVybiAwOwogI2VuZGlmCiB9CiAKLUFMV0FZU19JTkxJTkUg
dm9pZCBUQ01hbGxvY19QYWdlSGVhcDo6c2lnbmFsU2NhdmVuZ2VyKCkKK0FMV0FZU19JTkxJTkUg
dm9pZCBUQ01hbGxvY1BhZ2VIZWFwOjpzaWduYWxTY2F2ZW5nZXIoKQogewogICAgIC8vIG1fc2Nh
dmVuZ2VNdXRleCBzaG91bGQgYmUgaGVsZCBiZWZvcmUgYWNjZXNzaW5nIG1fc2NhdmVuZ2VUaHJl
YWRBY3RpdmUuCiAgICAgQVNTRVJUKHB0aHJlYWRfbXV0ZXhfdHJ5bG9jayhtX3NjYXZlbmdlTXV0
ZXgpKTsKQEAgLTE2MzMsMjAxICsxNjYxLDIwMSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgVENNYWxs
b2NfUGFnZUhlYXA6OnNpCiAKICNlbmRpZgogCi12b2lkIFRDTWFsbG9jX1BhZ2VIZWFwOjpzY2F2
ZW5nZSgpCit2b2lkIFRDTWFsbG9jUGFnZUhlYXA6OnNjYXZlbmdlKCkKIHsKLSAgICBzaXplX3Qg
cGFnZXNUb1JlbGVhc2UgPSBtaW5fZnJlZV9jb21taXR0ZWRfcGFnZXNfc2luY2VfbGFzdF9zY2F2
ZW5nZV8gKiBrU2NhdmVuZ2VQZXJjZW50YWdlOwotICAgIHNpemVfdCB0YXJnZXRQYWdlQ291bnQg
PSBzdGQ6Om1heDxzaXplX3Q+KGtNaW5pbXVtRnJlZUNvbW1pdHRlZFBhZ2VDb3VudCwgZnJlZV9j
b21taXR0ZWRfcGFnZXNfIC0gcGFnZXNUb1JlbGVhc2UpOworICAgIHNpemVfdCBwYWdlc1RvUmVs
ZWFzZSA9IG1pbkZyZWVDb21taXR0ZWRQYWdlc1NpbmNlTGFzdFNjYXZlbmdlICoga1NjYXZlbmdl
UGVyY2VudGFnZTsKKyAgICBzaXplX3QgdGFyZ2V0UGFnZUNvdW50ID0gc3RkOjptYXg8c2l6ZV90
PihrTWluaW11bUZyZWVDb21taXR0ZWRQYWdlQ291bnQsIGZyZWVDb21taXR0ZWRQYWdlcyAtIHBh
Z2VzVG9SZWxlYXNlKTsKIAotICAgIExlbmd0aCBsYXN0RnJlZUNvbW1pdHRlZFBhZ2VzID0gZnJl
ZV9jb21taXR0ZWRfcGFnZXNfOwotICAgIHdoaWxlIChmcmVlX2NvbW1pdHRlZF9wYWdlc18gPiB0
YXJnZXRQYWdlQ291bnQpIHsKKyAgICBMZW5ndGggbGFzdEZyZWVDb21taXR0ZWRQYWdlcyA9IGZy
ZWVDb21taXR0ZWRQYWdlczsKKyAgICB3aGlsZSAoZnJlZUNvbW1pdHRlZFBhZ2VzID4gdGFyZ2V0
UGFnZUNvdW50KSB7CiAgICAgICAgIEFTU0VSVChDaGVjaygpKTsKLSAgICAgICAgZm9yIChpbnQg
aSA9IGtNYXhQYWdlczsgaSA+IDAgJiYgZnJlZV9jb21taXR0ZWRfcGFnZXNfID49IHRhcmdldFBh
Z2VDb3VudDsgaS0tKSB7Ci0gICAgICAgICAgICBTcGFuTGlzdCogc2xpc3QgPSAoc3RhdGljX2Nh
c3Q8c2l6ZV90PihpKSA9PSBrTWF4UGFnZXMpID8gJmxhcmdlXyA6ICZmcmVlX1tpXTsKLSAgICAg
ICAgICAgIC8vIElmIHRoZSBzcGFuIHNpemUgaXMgYmlnZ2VyIHRoYW4ga01pblNwYW5MaXN0c1dp
dGhTcGFucyBwYWdlcyByZXR1cm4gYWxsIHRoZSBzcGFucyBpbiB0aGUgbGlzdCwgZWxzZSByZXR1
cm4gYWxsIGJ1dCAxIHNwYW4uICAKKyAgICAgICAgZm9yIChpbnQgaSA9IGtNYXhQYWdlczsgaSA+
IDAgJiYgZnJlZUNvbW1pdHRlZFBhZ2VzID49IHRhcmdldFBhZ2VDb3VudDsgaS0tKSB7CisgICAg
ICAgICAgICBTcGFuTGlzdCogc2xpc3QgPSAoc3RhdGljX2Nhc3Q8c2l6ZV90PihpKSA9PSBrTWF4
UGFnZXMpID8gJmxhcmdlIDogJmZyZWVTcGFuTGlzdFtpXTsKKyAgICAgICAgICAgIC8vIElmIHRo
ZSBzcGFuIHNpemUgaXMgYmlnZ2VyIHRoYW4ga01pblNwYW5MaXN0c1dpdGhTcGFucyBwYWdlcyBy
ZXR1cm4gYWxsIHRoZSBzcGFucyBpbiB0aGUgbGlzdCwgZWxzZSByZXR1cm4gYWxsIGJ1dCAxIHNw
YW4uIAogICAgICAgICAgICAgLy8gUmV0dXJuIG9ubHkgNTAlIG9mIGEgc3Bhbmxpc3QgYXQgYSB0
aW1lIHNvIHNwYW5zIG9mIHNpemUgMSBhcmUgbm90IHRoZSBvbmx5IG9uZXMgbGVmdC4KLSAgICAg
ICAgICAgIHNpemVfdCBsZW5ndGggPSBETExfTGVuZ3RoKCZzbGlzdC0+bm9ybWFsKTsKKyAgICAg
ICAgICAgIHNpemVfdCBsZW5ndGggPSBETExMZW5ndGgoJnNsaXN0LT5ub3JtYWwpOwogICAgICAg
ICAgICAgc2l6ZV90IG51bVNwYW5zVG9SZXR1cm4gPSAoaSA+IGtNaW5TcGFuTGlzdHNXaXRoU3Bh
bnMpID8gbGVuZ3RoIDogbGVuZ3RoIC8gMjsKLSAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBz
dGF0aWNfY2FzdDxzaXplX3Q+KGopIDwgbnVtU3BhbnNUb1JldHVybiAmJiAhRExMX0lzRW1wdHko
JnNsaXN0LT5ub3JtYWwpICYmIGZyZWVfY29tbWl0dGVkX3BhZ2VzXyA+IHRhcmdldFBhZ2VDb3Vu
dDsgaisrKSB7CisgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgc3RhdGljX2Nhc3Q8c2l6ZV90
PihqKSA8IG51bVNwYW5zVG9SZXR1cm4gJiYgIURMTF9Jc0VtcHR5KCZzbGlzdC0+bm9ybWFsKSAm
JiBmcmVlQ29tbWl0dGVkUGFnZXMgPiB0YXJnZXRQYWdlQ291bnQ7IGorKykgewogICAgICAgICAg
ICAgICAgIFNwYW4qIHMgPSBzbGlzdC0+bm9ybWFsLnByZXY7IAotICAgICAgICAgICAgICAgIERM
TF9SZW1vdmUocyk7CisgICAgICAgICAgICAgICAgRExMUmVtb3ZlKHMpOwogICAgICAgICAgICAg
ICAgIEFTU0VSVCghcy0+ZGVjb21taXR0ZWQpOwogICAgICAgICAgICAgICAgIGlmICghcy0+ZGVj
b21taXR0ZWQpIHsKICAgICAgICAgICAgICAgICAgICAgVENNYWxsb2NfU3lzdGVtUmVsZWFzZShy
ZWludGVycHJldF9jYXN0PHZvaWQqPihzLT5zdGFydCA8PCBrUGFnZVNoaWZ0KSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxzaXplX3Q+KHMt
Pmxlbmd0aCA8PCBrUGFnZVNoaWZ0KSk7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChmcmVl
X2NvbW1pdHRlZF9wYWdlc18gPj0gcy0+bGVuZ3RoKTsKLSAgICAgICAgICAgICAgICAgICAgZnJl
ZV9jb21taXR0ZWRfcGFnZXNfIC09IHMtPmxlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKGZyZWVDb21taXR0ZWRQYWdlcyA+PSBzLT5sZW5ndGgpOworICAgICAgICAgICAgICAgICAg
ICBmcmVlQ29tbWl0dGVkUGFnZXMgLT0gcy0+bGVuZ3RoOwogICAgICAgICAgICAgICAgICAgICBz
LT5kZWNvbW1pdHRlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IERMTF9QcmVwZW5kKCZzbGlzdC0+cmV0dXJuZWQsIHMpOworICAgICAgICAgICAgICAgIERMTFBy
ZXBlbmQoJnNsaXN0LT5yZXR1cm5lZCwgcyk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAot
ICAgICAgICBpZiAobGFzdEZyZWVDb21taXR0ZWRQYWdlcyA9PSBmcmVlX2NvbW1pdHRlZF9wYWdl
c18pCisgICAgICAgIGlmIChsYXN0RnJlZUNvbW1pdHRlZFBhZ2VzID09IGZyZWVDb21taXR0ZWRQ
YWdlcykKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBsYXN0RnJlZUNvbW1pdHRlZFBhZ2Vz
ID0gZnJlZV9jb21taXR0ZWRfcGFnZXNfOworICAgICAgICBsYXN0RnJlZUNvbW1pdHRlZFBhZ2Vz
ID0gZnJlZUNvbW1pdHRlZFBhZ2VzOwogICAgIH0KIAotICAgIG1pbl9mcmVlX2NvbW1pdHRlZF9w
YWdlc19zaW5jZV9sYXN0X3NjYXZlbmdlXyA9IGZyZWVfY29tbWl0dGVkX3BhZ2VzXzsKKyAgICBt
aW5GcmVlQ29tbWl0dGVkUGFnZXNTaW5jZUxhc3RTY2F2ZW5nZSA9IGZyZWVDb21taXR0ZWRQYWdl
czsKIH0KIAotQUxXQVlTX0lOTElORSBib29sIFRDTWFsbG9jX1BhZ2VIZWFwOjpzaG91bGRTY2F2
ZW5nZSgpIGNvbnN0IAorQUxXQVlTX0lOTElORSBib29sIFRDTWFsbG9jUGFnZUhlYXA6OnNob3Vs
ZFNjYXZlbmdlKCkgY29uc3QgCiB7Ci0gICAgcmV0dXJuIGZyZWVfY29tbWl0dGVkX3BhZ2VzXyA+
IGtNaW5pbXVtRnJlZUNvbW1pdHRlZFBhZ2VDb3VudDsgCisgICAgcmV0dXJuIGZyZWVDb21taXR0
ZWRQYWdlcyA+IGtNaW5pbXVtRnJlZUNvbW1pdHRlZFBhZ2VDb3VudDsgCiB9CiAKICNlbmRpZiAg
Ly8gVVNFX0JBQ0tHUk9VTkRfVEhSRUFEX1RPX1NDQVZFTkdFX01FTU9SWQogCi1pbmxpbmUgU3Bh
biogVENNYWxsb2NfUGFnZUhlYXA6Ok5ldyhMZW5ndGggbikgewotICBBU1NFUlQoQ2hlY2soKSk7
Ci0gIEFTU0VSVChuID4gMCk7Ci0KLSAgLy8gRmluZCBmaXJzdCBzaXplID49IG4gdGhhdCBoYXMg
YSBub24tZW1wdHkgbGlzdAotICBmb3IgKExlbmd0aCBzID0gbjsgcyA8IGtNYXhQYWdlczsgcysr
KSB7Ci0gICAgU3BhbiogbGwgPSBOVUxMOwotICAgIGJvb2wgcmVsZWFzZWQgPSBmYWxzZTsKLSAg
ICBpZiAoIURMTF9Jc0VtcHR5KCZmcmVlX1tzXS5ub3JtYWwpKSB7Ci0gICAgICAvLyBGb3VuZCBu
b3JtYWwgc3BhbgotICAgICAgbGwgPSAmZnJlZV9bc10ubm9ybWFsOwotICAgIH0gZWxzZSBpZiAo
IURMTF9Jc0VtcHR5KCZmcmVlX1tzXS5yZXR1cm5lZCkpIHsKLSAgICAgIC8vIEZvdW5kIHJldHVy
bmVkIHNwYW47IHJlYWxsb2NhdGUgaXQKLSAgICAgIGxsID0gJmZyZWVfW3NdLnJldHVybmVkOwot
ICAgICAgcmVsZWFzZWQgPSB0cnVlOwotICAgIH0gZWxzZSB7Ci0gICAgICAvLyBLZWVwIGxvb2tp
bmcgaW4gbGFyZ2VyIGNsYXNzZXMKLSAgICAgIGNvbnRpbnVlOwotICAgIH0KK2lubGluZSBTcGFu
KiBUQ01hbGxvY1BhZ2VIZWFwOjpOZXcoTGVuZ3RoIG4pCit7CisgICAgQVNTRVJUKENoZWNrKCkp
OworICAgIEFTU0VSVChuID4gMCk7CiAKLSAgICBTcGFuKiByZXN1bHQgPSBsbC0+bmV4dDsKLSAg
ICBDYXJ2ZShyZXN1bHQsIG4sIHJlbGVhc2VkKTsKKyAgICAvLyBGaW5kIGZpcnN0IHNpemUgPj0g
biB0aGF0IGhhcyBhIG5vbi1lbXB0eSBsaXN0CisgICAgZm9yIChMZW5ndGggcyA9IG47IHMgPCBr
TWF4UGFnZXM7IHMrKykgeworICAgICAgICBTcGFuKiBsaXN0ID0gMDsKKyAgICAgICAgYm9vbCBy
ZWxlYXNlZCA9IGZhbHNlOworICAgICAgICBpZiAoIURMTF9Jc0VtcHR5KCZmcmVlU3Bhbkxpc3Rb
c10ubm9ybWFsKSkgeworICAgICAgICAgICAgLy8gRm91bmQgbm9ybWFsIHNwYW4KKyAgICAgICAg
ICAgIGxpc3QgPSAmZnJlZVNwYW5MaXN0W3NdLm5vcm1hbDsKKyAgICAgICAgfSBlbHNlIGlmICgh
RExMX0lzRW1wdHkoJmZyZWVTcGFuTGlzdFtzXS5yZXR1cm5lZCkpIHsKKyAgICAgICAgICAgIC8v
IEZvdW5kIHJldHVybmVkIHNwYW47IHJlYWxsb2NhdGUgaXQKKyAgICAgICAgICAgIGxpc3QgPSAm
ZnJlZVNwYW5MaXN0W3NdLnJldHVybmVkOworICAgICAgICAgICAgcmVsZWFzZWQgPSB0cnVlOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gS2VlcCBsb29raW5nIGluIGxhcmdlciBj
bGFzc2VzCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIFNwYW4q
IHJlc3VsdCA9IGxpc3QtPm5leHQ7CisgICAgICAgIENhcnZlKHJlc3VsdCwgbiwgcmVsZWFzZWQp
OwogI2lmIFVTRV9CQUNLR1JPVU5EX1RIUkVBRF9UT19TQ0FWRU5HRV9NRU1PUlkKLSAgICAvLyBU
aGUgbmV3bHkgYWxsb2NhdGVkIG1lbW9yeSBpcyBmcm9tIGEgc3BhbiB0aGF0J3MgaW4gdGhlIG5v
cm1hbCBzcGFuIGxpc3QgKGFscmVhZHkgY29tbWl0dGVkKS4gIFVwZGF0ZSB0aGUKLSAgICAvLyBm
cmVlIGNvbW1pdHRlZCBwYWdlcyBjb3VudC4KLSAgICBBU1NFUlQoZnJlZV9jb21taXR0ZWRfcGFn
ZXNfID49IG4pOwotICAgIGZyZWVfY29tbWl0dGVkX3BhZ2VzXyAtPSBuOwotICAgIGlmIChmcmVl
X2NvbW1pdHRlZF9wYWdlc18gPCBtaW5fZnJlZV9jb21taXR0ZWRfcGFnZXNfc2luY2VfbGFzdF9z
Y2F2ZW5nZV8pIAotICAgICAgbWluX2ZyZWVfY29tbWl0dGVkX3BhZ2VzX3NpbmNlX2xhc3Rfc2Nh
dmVuZ2VfID0gZnJlZV9jb21taXR0ZWRfcGFnZXNfOworICAgICAgICAvLyBUaGUgbmV3bHkgYWxs
b2NhdGVkIG1lbW9yeSBpcyBmcm9tIGEgc3BhbiB0aGF0J3MgaW4gdGhlIG5vcm1hbCBzcGFuIGxp
c3QgKGFscmVhZHkgY29tbWl0dGVkKS4gVXBkYXRlIHRoZQorICAgICAgICAvLyBmcmVlIGNvbW1p
dHRlZCBwYWdlcyBjb3VudC4KKyAgICAgICAgQVNTRVJUKGZyZWVDb21taXR0ZWRQYWdlcyA+PSBu
KTsKKyAgICAgICAgZnJlZUNvbW1pdHRlZFBhZ2VzIC09IG47CisgICAgICAgIGlmIChmcmVlQ29t
bWl0dGVkUGFnZXMgPCBtaW5GcmVlQ29tbWl0dGVkUGFnZXNTaW5jZUxhc3RTY2F2ZW5nZSkgCisg
ICAgICAgICAgICBtaW5GcmVlQ29tbWl0dGVkUGFnZXNTaW5jZUxhc3RTY2F2ZW5nZSA9IGZyZWVD
b21taXR0ZWRQYWdlczsKICNlbmRpZiAgLy8gVVNFX0JBQ0tHUk9VTkRfVEhSRUFEX1RPX1NDQVZF
TkdFX01FTU9SWQotICAgIEFTU0VSVChDaGVjaygpKTsKLSAgICBmcmVlX3BhZ2VzXyAtPSBuOwot
ICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KKyAgICAgICAgQVNTRVJUKENoZWNrKCkpOworICAgICAg
ICBmcmVlUGFnZXMgLT0gbjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CiAKLSAgU3Bh
biogcmVzdWx0ID0gQWxsb2NMYXJnZShuKTsKLSAgaWYgKHJlc3VsdCAhPSBOVUxMKSB7Ci0gICAg
ICBBU1NFUlRfU1BBTl9DT01NSVRURUQocmVzdWx0KTsKLSAgICAgIHJldHVybiByZXN1bHQ7Ci0g
IH0KKyAgICBTcGFuKiByZXN1bHQgPSBBbGxvY0xhcmdlKG4pOworICAgIGlmIChyZXN1bHQpIHsK
KyAgICAgICAgQVNTRVJUX1NQQU5fQ09NTUlUVEVEKHJlc3VsdCk7CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQogCi0gIC8vIEdyb3cgdGhlIGhlYXAgYW5kIHRyeSBhZ2FpbgotICBpZiAo
IUdyb3dIZWFwKG4pKSB7Ci0gICAgQVNTRVJUKENoZWNrKCkpOwotICAgIHJldHVybiBOVUxMOwot
ICB9CisgICAgLy8gR3JvdyB0aGUgaGVhcCBhbmQgdHJ5IGFnYWluCisgICAgaWYgKCFHcm93SGVh
cChuKSkgeworICAgICAgICBBU1NFUlQoQ2hlY2soKSk7CisgICAgICAgIHJldHVybiAwOworICAg
IH0KIAotICByZXR1cm4gTmV3KG4pOworICAgIHJldHVybiBOZXcobik7CiB9CiAKLVNwYW4qIFRD
TWFsbG9jX1BhZ2VIZWFwOjpBbGxvY0xhcmdlKExlbmd0aCBuKSB7Ci0gIC8vIGZpbmQgdGhlIGJl
c3Qgc3BhbiAoY2xvc2VzdCB0byBuIGluIHNpemUpLgotICAvLyBUaGUgZm9sbG93aW5nIGxvb3Bz
IGltcGxlbWVudHMgYWRkcmVzcy1vcmRlcmVkIGJlc3QtZml0LgotICBib29sIGZyb21fcmVsZWFz
ZWQgPSBmYWxzZTsKLSAgU3BhbiAqYmVzdCA9IE5VTEw7Ci0KLSAgLy8gU2VhcmNoIHRocm91Z2gg
bm9ybWFsIGxpc3QKLSAgZm9yIChTcGFuKiBzcGFuID0gbGFyZ2VfLm5vcm1hbC5uZXh0OwotICAg
ICAgIHNwYW4gIT0gJmxhcmdlXy5ub3JtYWw7Ci0gICAgICAgc3BhbiA9IHNwYW4tPm5leHQpIHsK
LSAgICBpZiAoc3Bhbi0+bGVuZ3RoID49IG4pIHsKLSAgICAgIGlmICgoYmVzdCA9PSBOVUxMKQot
ICAgICAgICAgIHx8IChzcGFuLT5sZW5ndGggPCBiZXN0LT5sZW5ndGgpCi0gICAgICAgICAgfHwg
KChzcGFuLT5sZW5ndGggPT0gYmVzdC0+bGVuZ3RoKSAmJiAoc3Bhbi0+c3RhcnQgPCBiZXN0LT5z
dGFydCkpKSB7Ci0gICAgICAgIGJlc3QgPSBzcGFuOwotICAgICAgICBmcm9tX3JlbGVhc2VkID0g
ZmFsc2U7Ci0gICAgICB9CitTcGFuKiBUQ01hbGxvY1BhZ2VIZWFwOjpBbGxvY0xhcmdlKExlbmd0
aCBuKQoreworICAgIC8vIGZpbmQgdGhlIGJlc3Qgc3BhbiAoY2xvc2VzdCB0byBuIGluIHNpemUp
LgorICAgIC8vIFRoZSBmb2xsb3dpbmcgbG9vcHMgaW1wbGVtZW50cyBhZGRyZXNzLW9yZGVyZWQg
YmVzdC1maXQuCisgICAgYm9vbCBmcm9tUmVsZWFzZWQgPSBmYWxzZTsKKyAgICBTcGFuKiBiZXN0
ID0gMDsKKworICAgIC8vIFNlYXJjaCB0aHJvdWdoIG5vcm1hbCBsaXN0CisgICAgZm9yIChTcGFu
KiBzcGFuID0gbGFyZ2Uubm9ybWFsLm5leHQ7IHNwYW4gIT0gJmxhcmdlLm5vcm1hbDsgc3BhbiA9
IHNwYW4tPm5leHQpIHsKKyAgICAgICAgaWYgKHNwYW4tPmxlbmd0aCA+PSBuKSB7CisgICAgICAg
ICAgICBpZiAoIWJlc3QKKyAgICAgICAgICAgICAgICB8fCAoc3Bhbi0+bGVuZ3RoIDwgYmVzdC0+
bGVuZ3RoKQorICAgICAgICAgICAgICAgIHx8ICgoc3Bhbi0+bGVuZ3RoID09IGJlc3QtPmxlbmd0
aCkgJiYgKHNwYW4tPnN0YXJ0IDwgYmVzdC0+c3RhcnQpKSkgeworICAgICAgICAgICAgICAgIGJl
c3QgPSBzcGFuOworICAgICAgICAgICAgICAgZnJvbVJlbGVhc2VkID0gZmFsc2U7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KICAgICB9Ci0gIH0KIAotICAvLyBTZWFyY2ggdGhyb3VnaCByZWxl
YXNlZCBsaXN0IGluIGNhc2UgaXQgaGFzIGEgYmV0dGVyIGZpdAotICBmb3IgKFNwYW4qIHNwYW4g
PSBsYXJnZV8ucmV0dXJuZWQubmV4dDsKLSAgICAgICBzcGFuICE9ICZsYXJnZV8ucmV0dXJuZWQ7
Ci0gICAgICAgc3BhbiA9IHNwYW4tPm5leHQpIHsKLSAgICBpZiAoc3Bhbi0+bGVuZ3RoID49IG4p
IHsKLSAgICAgIGlmICgoYmVzdCA9PSBOVUxMKQotICAgICAgICAgIHx8IChzcGFuLT5sZW5ndGgg
PCBiZXN0LT5sZW5ndGgpCi0gICAgICAgICAgfHwgKChzcGFuLT5sZW5ndGggPT0gYmVzdC0+bGVu
Z3RoKSAmJiAoc3Bhbi0+c3RhcnQgPCBiZXN0LT5zdGFydCkpKSB7Ci0gICAgICAgIGJlc3QgPSBz
cGFuOwotICAgICAgICBmcm9tX3JlbGVhc2VkID0gdHJ1ZTsKLSAgICAgIH0KKyAgICAvLyBTZWFy
Y2ggdGhyb3VnaCByZWxlYXNlZCBsaXN0IGluIGNhc2UgaXQgaGFzIGEgYmV0dGVyIGZpdAorICAg
IGZvciAoU3Bhbiogc3BhbiA9IGxhcmdlLnJldHVybmVkLm5leHQ7IHNwYW4gIT0gJmxhcmdlLnJl
dHVybmVkOyBzcGFuID0gc3Bhbi0+bmV4dCkgeworICAgICAgICBpZiAoc3Bhbi0+bGVuZ3RoID49
IG4pIHsKKyAgICAgICAgICAgIGlmICghYmVzdAorICAgICAgICAgICAgICAgIHx8IChzcGFuLT5s
ZW5ndGggPCBiZXN0LT5sZW5ndGgpCisgICAgICAgICAgICAgICAgfHwgKChzcGFuLT5sZW5ndGgg
PT0gYmVzdC0+bGVuZ3RoKSAmJiAoc3Bhbi0+c3RhcnQgPCBiZXN0LT5zdGFydCkpKSB7CisgICAg
ICAgICAgICAgICAgYmVzdCA9IHNwYW47CisgICAgICAgICAgICAgICAgZnJvbVJlbGVhc2VkID0g
dHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KLSAgfQogCi0gIGlmIChiZXN0
ICE9IE5VTEwpIHsKLSAgICBDYXJ2ZShiZXN0LCBuLCBmcm9tX3JlbGVhc2VkKTsKKyAgICBpZiAo
YmVzdCkgeworICAgICAgICBDYXJ2ZShiZXN0LCBuLCBmcm9tUmVsZWFzZWQpOwogI2lmIFVTRV9C
QUNLR1JPVU5EX1RIUkVBRF9UT19TQ0FWRU5HRV9NRU1PUlkKLSAgICAvLyBUaGUgbmV3bHkgYWxs
b2NhdGVkIG1lbW9yeSBpcyBmcm9tIGEgc3BhbiB0aGF0J3MgaW4gdGhlIG5vcm1hbCBzcGFuIGxp
c3QgKGFscmVhZHkgY29tbWl0dGVkKS4gIFVwZGF0ZSB0aGUKLSAgICAvLyBmcmVlIGNvbW1pdHRl
ZCBwYWdlcyBjb3VudC4KLSAgICBBU1NFUlQoZnJlZV9jb21taXR0ZWRfcGFnZXNfID49IG4pOwot
ICAgIGZyZWVfY29tbWl0dGVkX3BhZ2VzXyAtPSBuOwotICAgIGlmIChmcmVlX2NvbW1pdHRlZF9w
YWdlc18gPCBtaW5fZnJlZV9jb21taXR0ZWRfcGFnZXNfc2luY2VfbGFzdF9zY2F2ZW5nZV8pCi0g
ICAgICBtaW5fZnJlZV9jb21taXR0ZWRfcGFnZXNfc2luY2VfbGFzdF9zY2F2ZW5nZV8gPSBmcmVl
X2NvbW1pdHRlZF9wYWdlc187Ci0jZW5kaWYgIC8vIFVTRV9CQUNLR1JPVU5EX1RIUkVBRF9UT19T
Q0FWRU5HRV9NRU1PUlkKLSAgICBBU1NFUlQoQ2hlY2soKSk7Ci0gICAgZnJlZV9wYWdlc18gLT0g
bjsKLSAgICByZXR1cm4gYmVzdDsKLSAgfQotICByZXR1cm4gTlVMTDsKKyAgICAgICAgLy8gVGhl
IG5ld2x5IGFsbG9jYXRlZCBtZW1vcnkgaXMgZnJvbSBhIHNwYW4gdGhhdCdzIGluIHRoZSBub3Jt
YWwgc3BhbiBsaXN0IChhbHJlYWR5IGNvbW1pdHRlZCkuIFVwZGF0ZSB0aGUKKyAgICAgICAgLy8g
ZnJlZSBjb21taXR0ZWQgcGFnZXMgY291bnQuCisgICAgICAgIEFTU0VSVChmcmVlQ29tbWl0dGVk
UGFnZXMgPj0gbik7CisgICAgICAgIGZyZWVDb21taXR0ZWRQYWdlcyAtPSBuOworICAgICAgICBp
ZiAoZnJlZUNvbW1pdHRlZFBhZ2VzIDwgbWluRnJlZUNvbW1pdHRlZFBhZ2VzU2luY2VMYXN0U2Nh
dmVuZ2UpCisgICAgICAgICAgICBtaW5GcmVlQ29tbWl0dGVkUGFnZXNTaW5jZUxhc3RTY2F2ZW5n
ZSA9IGZyZWVDb21taXR0ZWRQYWdlczsKKyNlbmRpZiAvLyBVU0VfQkFDS0dST1VORF9USFJFQURf
VE9fU0NBVkVOR0VfTUVNT1JZCisgICAgICAgIEFTU0VSVChDaGVjaygpKTsKKyAgICAgICAgZnJl
ZVBhZ2VzIC09IG47CisgICAgICAgIHJldHVybiBiZXN0OworICAgIH0KKyAgICByZXR1cm4gMDsK
IH0KIAotU3BhbiogVENNYWxsb2NfUGFnZUhlYXA6OlNwbGl0KFNwYW4qIHNwYW4sIExlbmd0aCBu
KSB7Ci0gIEFTU0VSVCgwIDwgbik7Ci0gIEFTU0VSVChuIDwgc3Bhbi0+bGVuZ3RoKTsKLSAgQVNT
RVJUKCFzcGFuLT5mcmVlKTsKLSAgQVNTRVJUKHNwYW4tPnNpemVjbGFzcyA9PSAwKTsKLSAgRXZl
bnQoc3BhbiwgJ1QnLCBuKTsKLQotICBjb25zdCBMZW5ndGggZXh0cmEgPSBzcGFuLT5sZW5ndGgg
LSBuOwotICBTcGFuKiBsZWZ0b3ZlciA9IE5ld1NwYW4oc3Bhbi0+c3RhcnQgKyBuLCBleHRyYSk7
Ci0gIEV2ZW50KGxlZnRvdmVyLCAnVScsIGV4dHJhKTsKLSAgUmVjb3JkU3BhbihsZWZ0b3Zlcik7
Ci0gIHBhZ2VtYXBfLnNldChzcGFuLT5zdGFydCArIG4gLSAxLCBzcGFuKTsgLy8gVXBkYXRlIG1h
cCBmcm9tIHBhZ2VpZCB0byBzcGFuCi0gIHNwYW4tPmxlbmd0aCA9IG47Ci0KLSAgcmV0dXJuIGxl
ZnRvdmVyOwotfQotCi1pbmxpbmUgdm9pZCBUQ01hbGxvY19QYWdlSGVhcDo6Q2FydmUoU3Bhbiog
c3BhbiwgTGVuZ3RoIG4sIGJvb2wgcmVsZWFzZWQpIHsKLSAgQVNTRVJUKG4gPiAwKTsKLSAgRExM
X1JlbW92ZShzcGFuKTsKLSAgc3Bhbi0+ZnJlZSA9IDA7Ci0gIEV2ZW50KHNwYW4sICdBJywgbik7
Ci0KLSAgaWYgKHJlbGVhc2VkKSB7Ci0gICAgLy8gSWYgdGhlIHNwYW4gY2hvc2VuIHRvIGNhcnZl
IGZyb20gaXMgZGVjb21taXRlZCwgY29tbWl0IHRoZSBlbnRpcmUgc3BhbiBhdCBvbmNlIHRvIGF2
b2lkIGNvbW1pdHRpbmcgc3BhbnMgMSBwYWdlIGF0IGEgdGltZS4KLSAgICBBU1NFUlQoc3Bhbi0+
ZGVjb21taXR0ZWQpOwotICAgIFRDTWFsbG9jX1N5c3RlbUNvbW1pdChyZWludGVycHJldF9jYXN0
PHZvaWQqPihzcGFuLT5zdGFydCA8PCBrUGFnZVNoaWZ0KSwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihz
cGFuLT5sZW5ndGggPDwga1BhZ2VTaGlmdCkpOwotICAgIHNwYW4tPmRlY29tbWl0dGVkID0gZmFs
c2U7Ci0jaWYgVVNFX0JBQ0tHUk9VTkRfVEhSRUFEX1RPX1NDQVZFTkdFX01FTU9SWQotICAgIGZy
ZWVfY29tbWl0dGVkX3BhZ2VzXyArPSBzcGFuLT5sZW5ndGg7Ci0jZW5kaWYKLSAgfQotICAKLSAg
Y29uc3QgaW50IGV4dHJhID0gc3RhdGljX2Nhc3Q8aW50PihzcGFuLT5sZW5ndGggLSBuKTsKLSAg
QVNTRVJUKGV4dHJhID49IDApOwotICBpZiAoZXh0cmEgPiAwKSB7CitTcGFuKiBUQ01hbGxvY1Bh
Z2VIZWFwOjpTcGxpdChTcGFuKiBzcGFuLCBMZW5ndGggbikKK3sKKyAgICBBU1NFUlQoMCA8IG4p
OworICAgIEFTU0VSVChuIDwgc3Bhbi0+bGVuZ3RoKTsKKyAgICBBU1NFUlQoIXNwYW4tPmZyZWUp
OworICAgIEFTU0VSVCghc3Bhbi0+c2l6ZUNsYXNzKTsKKyAgICBFdmVudChzcGFuLCAnVCcsIG4p
OworCisgICAgY29uc3QgTGVuZ3RoIGV4dHJhID0gc3Bhbi0+bGVuZ3RoIC0gbjsKICAgICBTcGFu
KiBsZWZ0b3ZlciA9IE5ld1NwYW4oc3Bhbi0+c3RhcnQgKyBuLCBleHRyYSk7Ci0gICAgbGVmdG92
ZXItPmZyZWUgPSAxOwotICAgIGxlZnRvdmVyLT5kZWNvbW1pdHRlZCA9IGZhbHNlOwotICAgIEV2
ZW50KGxlZnRvdmVyLCAnUycsIGV4dHJhKTsKKyAgICBFdmVudChsZWZ0b3ZlciwgJ1UnLCBleHRy
YSk7CiAgICAgUmVjb3JkU3BhbihsZWZ0b3Zlcik7CisgICAgcGFnZU1hcC5zZXQoc3Bhbi0+c3Rh
cnQgKyBuIC0gMSwgc3Bhbik7IC8vIFVwZGF0ZSBtYXAgZnJvbSBwYWdlaWQgdG8gc3BhbgorICAg
IHNwYW4tPmxlbmd0aCA9IG47CiAKLSAgICAvLyBQbGFjZSBsZWZ0b3ZlciBzcGFuIG9uIGFwcHJv
cHJpYXRlIGZyZWUgbGlzdAotICAgIFNwYW5MaXN0KiBsaXN0cGFpciA9IChzdGF0aWNfY2FzdDxz
aXplX3Q+KGV4dHJhKSA8IGtNYXhQYWdlcykgPyAmZnJlZV9bZXh0cmFdIDogJmxhcmdlXzsKLSAg
ICBTcGFuKiBkc3QgPSAmbGlzdHBhaXItPm5vcm1hbDsKLSAgICBETExfUHJlcGVuZChkc3QsIGxl
ZnRvdmVyKTsKKyAgICByZXR1cm4gbGVmdG92ZXI7Cit9CiAKLSAgICBzcGFuLT5sZW5ndGggPSBu
OwotICAgIHBhZ2VtYXBfLnNldChzcGFuLT5zdGFydCArIG4gLSAxLCBzcGFuKTsKLSAgfQoraW5s
aW5lIHZvaWQgVENNYWxsb2NQYWdlSGVhcDo6Q2FydmUoU3Bhbiogc3BhbiwgTGVuZ3RoIG4sIGJv
b2wgcmVsZWFzZWQpCit7CisgICAgQVNTRVJUKG4gPiAwKTsKKyAgICBETExSZW1vdmUoc3Bhbik7
CisgICAgc3Bhbi0+ZnJlZSA9IDA7CisgICAgRXZlbnQoc3BhbiwgJ0EnLCBuKTsKKworICAgIGlm
IChyZWxlYXNlZCkgeworICAgICAgICAvLyBJZiB0aGUgc3BhbiBjaG9zZW4gdG8gY2FydmUgZnJv
bSBpcyBkZWNvbW1pdGVkLCBjb21taXQgdGhlIGVudGlyZSBzcGFuIGF0IG9uY2UgdG8gYXZvaWQg
Y29tbWl0dGluZyBzcGFucyAxIHBhZ2UgYXQgYSB0aW1lLgorICAgICAgICBBU1NFUlQoc3Bhbi0+
ZGVjb21taXR0ZWQpOworICAgICAgICBUQ01hbGxvY19TeXN0ZW1Db21taXQocmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4oc3Bhbi0+c3RhcnQgPDwga1BhZ2VTaGlmdCksIHN0YXRpY19jYXN0PHNpemVf
dD4oc3Bhbi0+bGVuZ3RoIDw8IGtQYWdlU2hpZnQpKTsKKyAgICAgICAgc3Bhbi0+ZGVjb21taXR0
ZWQgPSBmYWxzZTsKKyNpZiBVU0VfQkFDS0dST1VORF9USFJFQURfVE9fU0NBVkVOR0VfTUVNT1JZ
CisgICAgICAgIGZyZWVDb21taXR0ZWRQYWdlcyArPSBzcGFuLT5sZW5ndGg7CisjZW5kaWYKKyAg
ICB9CisgIAorICAgIGNvbnN0IGludCBleHRyYSA9IHN0YXRpY19jYXN0PGludD4oc3Bhbi0+bGVu
Z3RoIC0gbik7CisgICAgQVNTRVJUKGV4dHJhID49IDApOworICAgIGlmIChleHRyYSA+IDApIHsK
KyAgICAgICAgU3BhbiogbGVmdG92ZXIgPSBOZXdTcGFuKHNwYW4tPnN0YXJ0ICsgbiwgZXh0cmEp
OworICAgICAgICBsZWZ0b3Zlci0+ZnJlZSA9IDE7CisgICAgICAgIGxlZnRvdmVyLT5kZWNvbW1p
dHRlZCA9IGZhbHNlOworICAgICAgICBFdmVudChsZWZ0b3ZlciwgJ1MnLCBleHRyYSk7CisgICAg
ICAgIFJlY29yZFNwYW4obGVmdG92ZXIpOworCisgICAgICAgIC8vIFBsYWNlIGxlZnRvdmVyIHNw
YW4gb24gYXBwcm9wcmlhdGUgZnJlZSBsaXN0CisgICAgICAgIFNwYW5MaXN0KiBsaXN0cGFpciA9
IChzdGF0aWNfY2FzdDxzaXplX3Q+KGV4dHJhKSA8IGtNYXhQYWdlcykgPyAmZnJlZVNwYW5MaXN0
W2V4dHJhXSA6ICZsYXJnZTsKKyAgICAgICAgU3BhbiogZHN0ID0gJmxpc3RwYWlyLT5ub3JtYWw7
CisgICAgICAgIERMTFByZXBlbmQoZHN0LCBsZWZ0b3Zlcik7CisKKyAgICAgICAgc3Bhbi0+bGVu
Z3RoID0gbjsKKyAgICAgICAgcGFnZU1hcC5zZXQoc3Bhbi0+c3RhcnQgKyBuIC0gMSwgc3Bhbik7
CisgICAgfQogfQogCiBzdGF0aWMgQUxXQVlTX0lOTElORSB2b2lkIG1lcmdlRGVjb21taXR0ZWRT
dGF0ZXMoU3BhbiogZGVzdGluYXRpb24sIFNwYW4qIG90aGVyKQpAQCAtMTg0Miw0MzIgKzE4NzAs
NDU4IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQgbWVyZ2VEZWNvbW1pdHQKICAgICB9CiB9
CiAKLWlubGluZSB2b2lkIFRDTWFsbG9jX1BhZ2VIZWFwOjpEZWxldGUoU3Bhbiogc3Bhbikgewot
ICBBU1NFUlQoQ2hlY2soKSk7Ci0gIEFTU0VSVCghc3Bhbi0+ZnJlZSk7Ci0gIEFTU0VSVChzcGFu
LT5sZW5ndGggPiAwKTsKLSAgQVNTRVJUKEdldERlc2NyaXB0b3Ioc3Bhbi0+c3RhcnQpID09IHNw
YW4pOwotICBBU1NFUlQoR2V0RGVzY3JpcHRvcihzcGFuLT5zdGFydCArIHNwYW4tPmxlbmd0aCAt
IDEpID09IHNwYW4pOwotICBzcGFuLT5zaXplY2xhc3MgPSAwOworaW5saW5lIHZvaWQgVENNYWxs
b2NQYWdlSGVhcDo6RGVsZXRlKFNwYW4qIHNwYW4pCit7CisgICAgQVNTRVJUKENoZWNrKCkpOwor
ICAgIEFTU0VSVCghc3Bhbi0+ZnJlZSk7CisgICAgQVNTRVJUKHNwYW4tPmxlbmd0aCA+IDApOwor
ICAgIEFTU0VSVChHZXREZXNjcmlwdG9yKHNwYW4tPnN0YXJ0KSA9PSBzcGFuKTsKKyAgICBBU1NF
UlQoR2V0RGVzY3JpcHRvcihzcGFuLT5zdGFydCArIHNwYW4tPmxlbmd0aCAtIDEpID09IHNwYW4p
OworICAgIHNwYW4tPnNpemVDbGFzcyA9IDA7CiAjaWZuZGVmIE5PX1RDTUFMTE9DX1NBTVBMRVMK
LSAgc3Bhbi0+c2FtcGxlID0gMDsKKyAgICBzcGFuLT5zYW1wbGUgPSAwOwogI2VuZGlmCiAKLSAg
Ly8gQ29hbGVzY2UgLS0gd2UgZ3VhcmFudGVlIHRoYXQgInAiICE9IDAsIHNvIG5vIGJvdW5kcyBj
aGVja2luZwotICAvLyBuZWNlc3NhcnkuICBXZSBkbyBub3QgYm90aGVyIHJlc2V0dGluZyB0aGUg
c3RhbGUgcGFnZW1hcAotICAvLyBlbnRyaWVzIGZvciB0aGUgcGllY2VzIHdlIGFyZSBtZXJnaW5n
IHRvZ2V0aGVyIGJlY2F1c2Ugd2Ugb25seQotICAvLyBjYXJlIGFib3V0IHRoZSBwYWdlbWFwIGVu
dHJpZXMgZm9yIHRoZSBib3VuZGFyaWVzLgorICAgIC8vIENvYWxlc2NlIC0tIHdlIGd1YXJhbnRl
ZSB0aGF0ICJwIiAhPSAwLCBzbyBubyBib3VuZHMgY2hlY2tpbmcKKyAgICAvLyBuZWNlc3Nhcnku
IFdlIGRvIG5vdCBib3RoZXIgcmVzZXR0aW5nIHRoZSBzdGFsZSBwYWdlTWFwCisgICAgLy8gZW50
cmllcyBmb3IgdGhlIHBpZWNlcyB3ZSBhcmUgbWVyZ2luZyB0b2dldGhlciBiZWNhdXNlIHdlIG9u
bHkKKyAgICAvLyBjYXJlIGFib3V0IHRoZSBwYWdlTWFwIGVudHJpZXMgZm9yIHRoZSBib3VuZGFy
aWVzLgogI2lmIFVTRV9CQUNLR1JPVU5EX1RIUkVBRF9UT19TQ0FWRU5HRV9NRU1PUlkKLSAgLy8g
VHJhY2sgdGhlIHRvdGFsIHNpemUgb2YgdGhlIG5laWdoYm9yaW5nIGZyZWUgc3BhbnMgdGhhdCBh
cmUgY29tbWl0dGVkLgotICBMZW5ndGggbmVpZ2hib3JpbmdDb21taXR0ZWRTcGFuc0xlbmd0aCA9
IDA7CisgICAgLy8gVHJhY2sgdGhlIHRvdGFsIHNpemUgb2YgdGhlIG5laWdoYm9yaW5nIGZyZWUg
c3BhbnMgdGhhdCBhcmUgY29tbWl0dGVkLgorICAgIExlbmd0aCBuZWlnaGJvcmluZ0NvbW1pdHRl
ZFNwYW5zTGVuZ3RoID0gMDsKICNlbmRpZgotICBjb25zdCBQYWdlSUQgcCA9IHNwYW4tPnN0YXJ0
OwotICBjb25zdCBMZW5ndGggbiA9IHNwYW4tPmxlbmd0aDsKLSAgU3BhbiogcHJldiA9IEdldERl
c2NyaXB0b3IocC0xKTsKLSAgaWYgKHByZXYgIT0gTlVMTCAmJiBwcmV2LT5mcmVlKSB7Ci0gICAg
Ly8gTWVyZ2UgcHJlY2VkaW5nIHNwYW4gaW50byB0aGlzIHNwYW4KLSAgICBBU1NFUlQocHJldi0+
c3RhcnQgKyBwcmV2LT5sZW5ndGggPT0gcCk7Ci0gICAgY29uc3QgTGVuZ3RoIGxlbiA9IHByZXYt
Pmxlbmd0aDsKKyAgICBjb25zdCBQYWdlSUQgcCA9IHNwYW4tPnN0YXJ0OworICAgIGNvbnN0IExl
bmd0aCBuID0gc3Bhbi0+bGVuZ3RoOworICAgIFNwYW4qIHByZXYgPSBHZXREZXNjcmlwdG9yKHAt
MSk7CisgICAgaWYgKHByZXYgJiYgcHJldi0+ZnJlZSkgeworICAgICAgICAvLyBNZXJnZSBwcmVj
ZWRpbmcgc3BhbiBpbnRvIHRoaXMgc3BhbgorICAgICAgICBBU1NFUlQocHJldi0+c3RhcnQgKyBw
cmV2LT5sZW5ndGggPT0gcCk7CisgICAgICAgIGNvbnN0IExlbmd0aCBsZW4gPSBwcmV2LT5sZW5n
dGg7CiAjaWYgVVNFX0JBQ0tHUk9VTkRfVEhSRUFEX1RPX1NDQVZFTkdFX01FTU9SWQotICAgIGlm
ICghcHJldi0+ZGVjb21taXR0ZWQpCi0gICAgICAgIG5laWdoYm9yaW5nQ29tbWl0dGVkU3BhbnNM
ZW5ndGggKz0gbGVuOworICAgICAgICBpZiAoIXByZXYtPmRlY29tbWl0dGVkKQorICAgICAgICAg
ICAgbmVpZ2hib3JpbmdDb21taXR0ZWRTcGFuc0xlbmd0aCArPSBsZW47CiAjZW5kaWYKLSAgICBt
ZXJnZURlY29tbWl0dGVkU3RhdGVzKHNwYW4sIHByZXYpOwotICAgIERMTF9SZW1vdmUocHJldik7
Ci0gICAgRGVsZXRlU3BhbihwcmV2KTsKLSAgICBzcGFuLT5zdGFydCAtPSBsZW47Ci0gICAgc3Bh
bi0+bGVuZ3RoICs9IGxlbjsKLSAgICBwYWdlbWFwXy5zZXQoc3Bhbi0+c3RhcnQsIHNwYW4pOwot
ICAgIEV2ZW50KHNwYW4sICdMJywgbGVuKTsKLSAgfQotICBTcGFuKiBuZXh0ID0gR2V0RGVzY3Jp
cHRvcihwK24pOwotICBpZiAobmV4dCAhPSBOVUxMICYmIG5leHQtPmZyZWUpIHsKLSAgICAvLyBN
ZXJnZSBuZXh0IHNwYW4gaW50byB0aGlzIHNwYW4KLSAgICBBU1NFUlQobmV4dC0+c3RhcnQgPT0g
cCtuKTsKLSAgICBjb25zdCBMZW5ndGggbGVuID0gbmV4dC0+bGVuZ3RoOworICAgICAgICBtZXJn
ZURlY29tbWl0dGVkU3RhdGVzKHNwYW4sIHByZXYpOworICAgICAgICBETExSZW1vdmUocHJldik7
CisgICAgICAgIERlbGV0ZVNwYW4ocHJldik7CisgICAgICAgIHNwYW4tPnN0YXJ0IC09IGxlbjsK
KyAgICAgICAgc3Bhbi0+bGVuZ3RoICs9IGxlbjsKKyAgICAgICAgcGFnZU1hcC5zZXQoc3Bhbi0+
c3RhcnQsIHNwYW4pOworICAgICAgICBFdmVudChzcGFuLCAnTCcsIGxlbik7CisgICAgfQorICAg
IFNwYW4qIG5leHQgPSBHZXREZXNjcmlwdG9yKHArbik7CisgICAgaWYgKG5leHQgJiYgbmV4dC0+
ZnJlZSkgeworICAgICAgICAvLyBNZXJnZSBuZXh0IHNwYW4gaW50byB0aGlzIHNwYW4KKyAgICAg
ICAgQVNTRVJUKG5leHQtPnN0YXJ0ID09IHArbik7CisgICAgICAgIGNvbnN0IExlbmd0aCBsZW4g
PSBuZXh0LT5sZW5ndGg7CiAjaWYgVVNFX0JBQ0tHUk9VTkRfVEhSRUFEX1RPX1NDQVZFTkdFX01F
TU9SWQotICAgIGlmICghbmV4dC0+ZGVjb21taXR0ZWQpCi0gICAgICAgIG5laWdoYm9yaW5nQ29t
bWl0dGVkU3BhbnNMZW5ndGggKz0gbGVuOworICAgICAgICBpZiAoIW5leHQtPmRlY29tbWl0dGVk
KQorICAgICAgICAgICAgbmVpZ2hib3JpbmdDb21taXR0ZWRTcGFuc0xlbmd0aCArPSBsZW47CiAj
ZW5kaWYKLSAgICBtZXJnZURlY29tbWl0dGVkU3RhdGVzKHNwYW4sIG5leHQpOwotICAgIERMTF9S
ZW1vdmUobmV4dCk7Ci0gICAgRGVsZXRlU3BhbihuZXh0KTsKLSAgICBzcGFuLT5sZW5ndGggKz0g
bGVuOwotICAgIHBhZ2VtYXBfLnNldChzcGFuLT5zdGFydCArIHNwYW4tPmxlbmd0aCAtIDEsIHNw
YW4pOwotICAgIEV2ZW50KHNwYW4sICdSJywgbGVuKTsKLSAgfQotCi0gIEV2ZW50KHNwYW4sICdE
Jywgc3Bhbi0+bGVuZ3RoKTsKLSAgc3Bhbi0+ZnJlZSA9IDE7Ci0gIGlmIChzcGFuLT5kZWNvbW1p
dHRlZCkgewotICAgIGlmIChzcGFuLT5sZW5ndGggPCBrTWF4UGFnZXMpCi0gICAgICBETExfUHJl
cGVuZCgmZnJlZV9bc3Bhbi0+bGVuZ3RoXS5yZXR1cm5lZCwgc3Bhbik7Ci0gICAgZWxzZQotICAg
ICAgRExMX1ByZXBlbmQoJmxhcmdlXy5yZXR1cm5lZCwgc3Bhbik7Ci0gIH0gZWxzZSB7Ci0gICAg
aWYgKHNwYW4tPmxlbmd0aCA8IGtNYXhQYWdlcykKLSAgICAgIERMTF9QcmVwZW5kKCZmcmVlX1tz
cGFuLT5sZW5ndGhdLm5vcm1hbCwgc3Bhbik7Ci0gICAgZWxzZQotICAgICAgRExMX1ByZXBlbmQo
JmxhcmdlXy5ub3JtYWwsIHNwYW4pOwotICB9Ci0gIGZyZWVfcGFnZXNfICs9IG47CisgICAgICAg
IG1lcmdlRGVjb21taXR0ZWRTdGF0ZXMoc3BhbiwgbmV4dCk7CisgICAgICAgIERMTFJlbW92ZShu
ZXh0KTsKKyAgICAgICAgRGVsZXRlU3BhbihuZXh0KTsKKyAgICAgICAgc3Bhbi0+bGVuZ3RoICs9
IGxlbjsKKyAgICAgICAgcGFnZU1hcC5zZXQoc3Bhbi0+c3RhcnQgKyBzcGFuLT5sZW5ndGggLSAx
LCBzcGFuKTsKKyAgICAgICAgRXZlbnQoc3BhbiwgJ1InLCBsZW4pOworICAgIH0KKworICAgIEV2
ZW50KHNwYW4sICdEJywgc3Bhbi0+bGVuZ3RoKTsKKyAgICBzcGFuLT5mcmVlID0gMTsKKyAgICBp
ZiAoc3Bhbi0+ZGVjb21taXR0ZWQpIHsKKyAgICAgICAgaWYgKHNwYW4tPmxlbmd0aCA8IGtNYXhQ
YWdlcykKKyAgICAgICAgICAgIERMTFByZXBlbmQoJmZyZWVTcGFuTGlzdFtzcGFuLT5sZW5ndGhd
LnJldHVybmVkLCBzcGFuKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgRExMUHJlcGVuZCgm
bGFyZ2UucmV0dXJuZWQsIHNwYW4pOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChzcGFuLT5s
ZW5ndGggPCBrTWF4UGFnZXMpCisgICAgICAgICAgICBETExQcmVwZW5kKCZmcmVlU3Bhbkxpc3Rb
c3Bhbi0+bGVuZ3RoXS5ub3JtYWwsIHNwYW4pOworICAgICAgICBlbHNlCisgICAgICAgICAgICBE
TExQcmVwZW5kKCZsYXJnZS5ub3JtYWwsIHNwYW4pOworICAgIH0KKyAgICBmcmVlUGFnZXMgKz0g
bjsKIAogI2lmIFVTRV9CQUNLR1JPVU5EX1RIUkVBRF9UT19TQ0FWRU5HRV9NRU1PUlkKLSAgaWYg
KHNwYW4tPmRlY29tbWl0dGVkKSB7Ci0gICAgICAvLyBJZiB0aGUgbWVyZ2VkIHNwYW4gaXMgZGVj
b21taXR0ZWQsIHRoYXQgbWVhbnMgd2UgZGVjb21taXR0ZWQgYW55IG5laWdoYm9yaW5nIHNwYW5z
IHRoYXQgd2VyZQotICAgICAgLy8gY29tbWl0dGVkLiAgVXBkYXRlIHRoZSBmcmVlIGNvbW1pdHRl
ZCBwYWdlcyBjb3VudC4KLSAgICAgIGZyZWVfY29tbWl0dGVkX3BhZ2VzXyAtPSBuZWlnaGJvcmlu
Z0NvbW1pdHRlZFNwYW5zTGVuZ3RoOwotICAgICAgaWYgKGZyZWVfY29tbWl0dGVkX3BhZ2VzXyA8
IG1pbl9mcmVlX2NvbW1pdHRlZF9wYWdlc19zaW5jZV9sYXN0X3NjYXZlbmdlXykKLSAgICAgICAg
ICAgIG1pbl9mcmVlX2NvbW1pdHRlZF9wYWdlc19zaW5jZV9sYXN0X3NjYXZlbmdlXyA9IGZyZWVf
Y29tbWl0dGVkX3BhZ2VzXzsKLSAgfSBlbHNlIHsKLSAgICAgIC8vIElmIHRoZSBtZXJnZWQgc3Bh
biByZW1haW5zIGNvbW1pdHRlZCwgYWRkIHRoZSBkZWxldGVkIHNwYW4ncyBzaXplIHRvIHRoZSBm
cmVlIGNvbW1pdHRlZCBwYWdlcyBjb3VudC4KLSAgICAgIGZyZWVfY29tbWl0dGVkX3BhZ2VzXyAr
PSBuOwotICB9CisgICAgaWYgKHNwYW4tPmRlY29tbWl0dGVkKSB7CisgICAgICAgIC8vIElmIHRo
ZSBtZXJnZWQgc3BhbiBpcyBkZWNvbW1pdHRlZCwgdGhhdCBtZWFucyB3ZSBkZWNvbW1pdHRlZCBh
bnkgbmVpZ2hib3Jpbmcgc3BhbnMgdGhhdCB3ZXJlCisgICAgICAgIC8vIGNvbW1pdHRlZC4gVXBk
YXRlIHRoZSBmcmVlIGNvbW1pdHRlZCBwYWdlcyBjb3VudC4KKyAgICAgICAgZnJlZUNvbW1pdHRl
ZFBhZ2VzIC09IG5laWdoYm9yaW5nQ29tbWl0dGVkU3BhbnNMZW5ndGg7CisgICAgICAgIGlmIChm
cmVlQ29tbWl0dGVkUGFnZXMgPCBtaW5GcmVlQ29tbWl0dGVkUGFnZXNTaW5jZUxhc3RTY2F2ZW5n
ZSkKKyAgICAgICAgICAgIG1pbkZyZWVDb21taXR0ZWRQYWdlc1NpbmNlTGFzdFNjYXZlbmdlID0g
ZnJlZUNvbW1pdHRlZFBhZ2VzOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIElmIHRoZSBtZXJn
ZWQgc3BhbiByZW1haW5zIGNvbW1pdHRlZCwgYWRkIHRoZSBkZWxldGVkIHNwYW4ncyBzaXplIHRv
IHRoZSBmcmVlIGNvbW1pdHRlZCBwYWdlcyBjb3VudC4KKyAgICAgICAgZnJlZUNvbW1pdHRlZFBh
Z2VzICs9IG47CisgICAgfQogCi0gIC8vIE1ha2Ugc3VyZSB0aGUgc2NhdmVuZ2UgdGhyZWFkIGJl
Y29tZXMgYWN0aXZlIGlmIHdlIGhhdmUgZW5vdWdoIGZyZWVkIHBhZ2VzIHRvIHJlbGVhc2Ugc29t
ZSBiYWNrIHRvIHRoZSBzeXN0ZW0uCi0gIHNpZ25hbFNjYXZlbmdlcigpOworICAgIC8vIE1ha2Ug
c3VyZSB0aGUgc2NhdmVuZ2UgdGhyZWFkIGJlY29tZXMgYWN0aXZlIGlmIHdlIGhhdmUgZW5vdWdo
IGZyZWVkIHBhZ2VzIHRvIHJlbGVhc2Ugc29tZSBiYWNrIHRvIHRoZSBzeXN0ZW0uCisgICAgc2ln
bmFsU2NhdmVuZ2VyKCk7CiAjZWxzZQotICBJbmNyZW1lbnRhbFNjYXZlbmdlKG4pOworICAgIElu
Y3JlbWVudGFsU2NhdmVuZ2Uobik7CiAjZW5kaWYKIAotICBBU1NFUlQoQ2hlY2soKSk7CisgICAg
QVNTRVJUKENoZWNrKCkpOwogfQogCiAjaWYgIVVTRV9CQUNLR1JPVU5EX1RIUkVBRF9UT19TQ0FW
RU5HRV9NRU1PUlkKLXZvaWQgVENNYWxsb2NfUGFnZUhlYXA6OkluY3JlbWVudGFsU2NhdmVuZ2Uo
TGVuZ3RoIG4pIHsKLSAgLy8gRmFzdCBwYXRoOyBub3QgeWV0IHRpbWUgdG8gcmVsZWFzZSBtZW1v
cnkKLSAgc2NhdmVuZ2VfY291bnRlcl8gLT0gbjsKLSAgaWYgKHNjYXZlbmdlX2NvdW50ZXJfID49
IDApIHJldHVybjsgIC8vIE5vdCB5ZXQgdGltZSB0byBzY2F2ZW5nZQordm9pZCBUQ01hbGxvY1Bh
Z2VIZWFwOjpJbmNyZW1lbnRhbFNjYXZlbmdlKExlbmd0aCBuKQoreworICAgIC8vIEZhc3QgcGF0
aDsgbm90IHlldCB0aW1lIHRvIHJlbGVhc2UgbWVtb3J5CisgICAgc2NhdmVuZ2VDb3VudGVyIC09
IG47CisgICAgaWYgKHNjYXZlbmdlQ291bnRlciA+PSAwKQorICAgICAgICByZXR1cm47IC8vIE5v
dCB5ZXQgdGltZSB0byBzY2F2ZW5nZQogCiAjaWYgUExBVEZPUk0oSU9TKQotICBzdGF0aWMgY29u
c3Qgc2l6ZV90IGtEZWZhdWx0UmVsZWFzZURlbGF5ID0gNjQ7CisgICAgc3RhdGljIGNvbnN0IHNp
emVfdCBrRGVmYXVsdFJlbGVhc2VEZWxheSA9IDY0OwogI2Vsc2UKLSAgLy8gSWYgdGhlcmUgaXMg
bm90aGluZyB0byByZWxlYXNlLCB3YWl0IGZvciBzbyBtYW55IHBhZ2VzIGJlZm9yZQotICAvLyBz
Y2F2ZW5naW5nIGFnYWluLiAgV2l0aCA0SyBwYWdlcywgdGhpcyBjb21lcyB0byAxNk1CIG9mIG1l
bW9yeS4KLSAgc3RhdGljIGNvbnN0IHNpemVfdCBrRGVmYXVsdFJlbGVhc2VEZWxheSA9IDEgPDwg
ODsKLSNlbmRpZgotCi0gIC8vIEZpbmQgaW5kZXggb2YgZnJlZSBsaXN0IHRvIHNjYXZlbmdlCi0g
IHNpemVfdCBpbmRleCA9IHNjYXZlbmdlX2luZGV4XyArIDE7Ci0gIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwga01heFBhZ2VzKzE7IGkrKykgewotICAgIGlmIChpbmRleCA+IGtNYXhQYWdlcykgaW5k
ZXggPSAwOwotICAgIFNwYW5MaXN0KiBzbGlzdCA9IChpbmRleCA9PSBrTWF4UGFnZXMpID8gJmxh
cmdlXyA6ICZmcmVlX1tpbmRleF07Ci0gICAgaWYgKCFETExfSXNFbXB0eSgmc2xpc3QtPm5vcm1h
bCkpIHsKLSAgICAgIC8vIFJlbGVhc2UgdGhlIGxhc3Qgc3BhbiBvbiB0aGUgbm9ybWFsIHBvcnRp
b24gb2YgdGhpcyBsaXN0Ci0gICAgICBTcGFuKiBzID0gc2xpc3QtPm5vcm1hbC5wcmV2OwotICAg
ICAgRExMX1JlbW92ZShzKTsKLSAgICAgIFRDTWFsbG9jX1N5c3RlbVJlbGVhc2UocmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4ocy0+c3RhcnQgPDwga1BhZ2VTaGlmdCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0YXRpY19jYXN0PHNpemVfdD4ocy0+bGVuZ3RoIDw8IGtQYWdlU2hpZnQp
KTsKLSAgICAgIHMtPmRlY29tbWl0dGVkID0gdHJ1ZTsKLSAgICAgIERMTF9QcmVwZW5kKCZzbGlz
dC0+cmV0dXJuZWQsIHMpOworICAgIC8vIElmIHRoZXJlIGlzIG5vdGhpbmcgdG8gcmVsZWFzZSwg
d2FpdCBmb3Igc28gbWFueSBwYWdlcyBiZWZvcmUKKyAgICAvLyBzY2F2ZW5naW5nIGFnYWluLiBX
aXRoIDRLIHBhZ2VzLCB0aGlzIGNvbWVzIHRvIDE2TUIgb2YgbWVtb3J5LgorICAgIHN0YXRpYyBj
b25zdCBzaXplX3Qga0RlZmF1bHRSZWxlYXNlRGVsYXkgPSAxIDw8IDg7CisjZW5kaWYKKworICAg
IC8vIEZpbmQgaW5kZXggb2YgZnJlZSBsaXN0IHRvIHNjYXZlbmdlCisgICAgc2l6ZV90IGluZGV4
ID0gc2NhdmVuZ2VJbmRleCArIDE7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrTWF4UGFn
ZXMrMTsgaSsrKSB7CisgICAgICAgIGlmIChpbmRleCA+IGtNYXhQYWdlcykKKyAgICAgICAgICAg
IGluZGV4ID0gMDsKKyAgICAgICAgU3Bhbkxpc3QqIHNsaXN0ID0gKGluZGV4ID09IGtNYXhQYWdl
cykgPyAmbGFyZ2UgOiAmZnJlZVNwYW5MaXN0W2luZGV4XTsKKyAgICAgICAgaWYgKCFETExfSXNF
bXB0eSgmc2xpc3QtPm5vcm1hbCkpIHsKKyAgICAgICAgICAgIC8vIFJlbGVhc2UgdGhlIGxhc3Qg
c3BhbiBvbiB0aGUgbm9ybWFsIHBvcnRpb24gb2YgdGhpcyBsaXN0CisgICAgICAgICAgICBTcGFu
KiBzID0gc2xpc3QtPm5vcm1hbC5wcmV2OworICAgICAgICAgICAgRExMUmVtb3ZlKHMpOworICAg
ICAgICAgICAgVENNYWxsb2NfU3lzdGVtUmVsZWFzZShyZWludGVycHJldF9jYXN0PHZvaWQqPihz
LT5zdGFydCA8PCBrUGFnZVNoaWZ0KSwKKyAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxzaXpl
X3Q+KHMtPmxlbmd0aCA8PCBrUGFnZVNoaWZ0KSk7CisgICAgICAgICAgICBzLT5kZWNvbW1pdHRl
ZCA9IHRydWU7CisgICAgICAgICAgICBETExQcmVwZW5kKCZzbGlzdC0+cmV0dXJuZWQsIHMpOwog
CiAjaWYgUExBVEZPUk0oSU9TKQotICAgICAgc2NhdmVuZ2VfY291bnRlcl8gPSBzdGQ6Om1heDxz
aXplX3Q+KDE2VUwsIHN0ZDo6bWluPHNpemVfdD4oa0RlZmF1bHRSZWxlYXNlRGVsYXksIGtEZWZh
dWx0UmVsZWFzZURlbGF5IC0gKGZyZWVfcGFnZXNfIC8ga0RlZmF1bHRSZWxlYXNlRGVsYXkpKSk7
CisgICAgICAgICAgICBzY2F2ZW5nZUNvdW50ZXIgPSBzdGQ6Om1heDxzaXplX3Q+KDE2VUwsIHN0
ZDo6bWluPHNpemVfdD4oa0RlZmF1bHRSZWxlYXNlRGVsYXksIGtEZWZhdWx0UmVsZWFzZURlbGF5
IC0gKGZyZWVQYWdlcyAvIGtEZWZhdWx0UmVsZWFzZURlbGF5KSkpOwogI2Vsc2UKLSAgICAgIHNj
YXZlbmdlX2NvdW50ZXJfID0gc3RkOjptYXg8c2l6ZV90Pig2NFVMLCBzdGQ6Om1pbjxzaXplX3Q+
KGtEZWZhdWx0UmVsZWFzZURlbGF5LCBrRGVmYXVsdFJlbGVhc2VEZWxheSAtIChmcmVlX3BhZ2Vz
XyAvIGtEZWZhdWx0UmVsZWFzZURlbGF5KSkpOworICAgICAgICAgICAgc2NhdmVuZ2VDb3VudGVy
ID0gc3RkOjptYXg8c2l6ZV90Pig2NFVMLCBzdGQ6Om1pbjxzaXplX3Q+KGtEZWZhdWx0UmVsZWFz
ZURlbGF5LCBrRGVmYXVsdFJlbGVhc2VEZWxheSAtIChmcmVlUGFnZXMgLyBrRGVmYXVsdFJlbGVh
c2VEZWxheSkpKTsKICNlbmRpZgogCi0gICAgICBpZiAoaW5kZXggPT0ga01heFBhZ2VzICYmICFE
TExfSXNFbXB0eSgmc2xpc3QtPm5vcm1hbCkpCi0gICAgICAgIHNjYXZlbmdlX2luZGV4XyA9IGlu
ZGV4IC0gMTsKLSAgICAgIGVsc2UKLSAgICAgICAgc2NhdmVuZ2VfaW5kZXhfID0gaW5kZXg7Ci0g
ICAgICByZXR1cm47CisgICAgICAgICAgICBpZiAoaW5kZXggPT0ga01heFBhZ2VzICYmICFETExf
SXNFbXB0eSgmc2xpc3QtPm5vcm1hbCkpCisgICAgICAgICAgICAgICAgc2NhdmVuZ2VJbmRleCA9
IGluZGV4IC0gMTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzY2F2ZW5nZUlu
ZGV4ID0gaW5kZXg7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaW5k
ZXgrKzsKICAgICB9Ci0gICAgaW5kZXgrKzsKLSAgfQogCi0gIC8vIE5vdGhpbmcgdG8gc2NhdmVu
Z2UsIGRlbGF5IGZvciBhIHdoaWxlCi0gIHNjYXZlbmdlX2NvdW50ZXJfID0ga0RlZmF1bHRSZWxl
YXNlRGVsYXk7CisgICAgLy8gTm90aGluZyB0byBzY2F2ZW5nZSwgZGVsYXkgZm9yIGEgd2hpbGUK
KyAgICBzY2F2ZW5nZUNvdW50ZXIgPSBrRGVmYXVsdFJlbGVhc2VEZWxheTsKIH0KICNlbmRpZgog
Ci12b2lkIFRDTWFsbG9jX1BhZ2VIZWFwOjpSZWdpc3RlclNpemVDbGFzcyhTcGFuKiBzcGFuLCBz
aXplX3Qgc2MpIHsKLSAgLy8gQXNzb2NpYXRlIHNwYW4gb2JqZWN0IHdpdGggYWxsIGludGVyaW9y
IHBhZ2VzIGFzIHdlbGwKLSAgQVNTRVJUKCFzcGFuLT5mcmVlKTsKLSAgQVNTRVJUKEdldERlc2Ny
aXB0b3Ioc3Bhbi0+c3RhcnQpID09IHNwYW4pOwotICBBU1NFUlQoR2V0RGVzY3JpcHRvcihzcGFu
LT5zdGFydCtzcGFuLT5sZW5ndGgtMSkgPT0gc3Bhbik7Ci0gIEV2ZW50KHNwYW4sICdDJywgc2Mp
OwotICBzcGFuLT5zaXplY2xhc3MgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHNjKTsKLSAg
Zm9yIChMZW5ndGggaSA9IDE7IGkgPCBzcGFuLT5sZW5ndGgtMTsgaSsrKSB7Ci0gICAgcGFnZW1h
cF8uc2V0KHNwYW4tPnN0YXJ0K2ksIHNwYW4pOwotICB9Cit2b2lkIFRDTWFsbG9jUGFnZUhlYXA6
OlJlZ2lzdGVyU2l6ZUNsYXNzKFNwYW4qIHNwYW4sIHNpemVfdCBzYykKK3sKKyAgICAvLyBBc3Nv
Y2lhdGUgc3BhbiBvYmplY3Qgd2l0aCBhbGwgaW50ZXJpb3IgcGFnZXMgYXMgd2VsbAorICAgIEFT
U0VSVCghc3Bhbi0+ZnJlZSk7CisgICAgQVNTRVJUKEdldERlc2NyaXB0b3Ioc3Bhbi0+c3RhcnQp
ID09IHNwYW4pOworICAgIEFTU0VSVChHZXREZXNjcmlwdG9yKHNwYW4tPnN0YXJ0K3NwYW4tPmxl
bmd0aC0xKSA9PSBzcGFuKTsKKyAgICBFdmVudChzcGFuLCAnQycsIHNjKTsKKyAgICBzcGFuLT5z
aXplQ2xhc3MgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHNjKTsKKyAgICBmb3IgKExlbmd0
aCBpID0gMTsgaSA8IHNwYW4tPmxlbmd0aC0xOyBpKyspCisgICAgICAgIHBhZ2VNYXAuc2V0KHNw
YW4tPnN0YXJ0K2ksIHNwYW4pOwogfQogICAgIAogI2lmZGVmIFdURl9DSEFOR0VTCi1zaXplX3Qg
VENNYWxsb2NfUGFnZUhlYXA6OlJldHVybmVkQnl0ZXMoKSBjb25zdCB7CitzaXplX3QgVENNYWxs
b2NQYWdlSGVhcDo6UmV0dXJuZWRCeXRlcygpIGNvbnN0Cit7CiAgICAgc2l6ZV90IHJlc3VsdCA9
IDA7CiAgICAgZm9yICh1bnNpZ25lZCBzID0gMDsgcyA8IGtNYXhQYWdlczsgcysrKSB7Ci0gICAg
ICAgIGNvbnN0IGludCByX2xlbmd0aCA9IERMTF9MZW5ndGgoJmZyZWVfW3NdLnJldHVybmVkKTsK
LSAgICAgICAgdW5zaWduZWQgcl9wYWdlcyA9IHMgKiByX2xlbmd0aDsKLSAgICAgICAgcmVzdWx0
ICs9IHJfcGFnZXMgPDwga1BhZ2VTaGlmdDsKKyAgICAgICAgY29uc3QgaW50IHJMZW5ndGggPSBE
TExMZW5ndGgoJmZyZWVTcGFuTGlzdFtzXS5yZXR1cm5lZCk7CisgICAgICAgIHVuc2lnbmVkIHJQ
YWdlcyA9IHMgKiByTGVuZ3RoOworICAgICAgICByZXN1bHQgKz0gclBhZ2VzIDw8IGtQYWdlU2hp
ZnQ7CiAgICAgfQogICAgIAotICAgIGZvciAoU3BhbiogcyA9IGxhcmdlXy5yZXR1cm5lZC5uZXh0
OyBzICE9ICZsYXJnZV8ucmV0dXJuZWQ7IHMgPSBzLT5uZXh0KQorICAgIGZvciAoU3BhbiogcyA9
IGxhcmdlLnJldHVybmVkLm5leHQ7IHMgIT0gJmxhcmdlLnJldHVybmVkOyBzID0gcy0+bmV4dCkK
ICAgICAgICAgcmVzdWx0ICs9IHMtPmxlbmd0aCA8PCBrUGFnZVNoaWZ0OwogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAjZW5kaWYKIAogI2lmbmRlZiBXVEZfQ0hBTkdFUwotc3RhdGljIGRvdWJsZSBQ
YWdlc1RvTUIodWludDY0X3QgcGFnZXMpIHsKK3N0YXRpYyBkb3VibGUgUGFnZXNUb01CKHVpbnQ2
NF90IHBhZ2VzKQorewogICByZXR1cm4gKHBhZ2VzIDw8IGtQYWdlU2hpZnQpIC8gMTA0ODU3Ni4w
OwogfQogCi12b2lkIFRDTWFsbG9jX1BhZ2VIZWFwOjpEdW1wKFRDTWFsbG9jX1ByaW50ZXIqIG91
dCkgewotICBpbnQgbm9uZW1wdHlfc2l6ZXMgPSAwOwotICBmb3IgKGludCBzID0gMDsgcyA8IGtN
YXhQYWdlczsgcysrKSB7Ci0gICAgaWYgKCFETExfSXNFbXB0eSgmZnJlZV9bc10ubm9ybWFsKSB8
fCAhRExMX0lzRW1wdHkoJmZyZWVfW3NdLnJldHVybmVkKSkgewotICAgICAgbm9uZW1wdHlfc2l6
ZXMrKzsKLSAgICB9Ci0gIH0KLSAgb3V0LT5wcmludGYoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7Ci0gIG91dC0+cHJpbnRmKCJQYWdlSGVhcDog
JWQgc2l6ZXM7ICU2LjFmIE1CIGZyZWVcbiIsCi0gICAgICAgICAgICAgIG5vbmVtcHR5X3NpemVz
LCBQYWdlc1RvTUIoZnJlZV9wYWdlc18pKTsKLSAgb3V0LT5wcmludGYoIi0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7Ci0gIHVpbnQ2NF90IHRvdGFs
X25vcm1hbCA9IDA7Ci0gIHVpbnQ2NF90IHRvdGFsX3JldHVybmVkID0gMDsKLSAgZm9yIChpbnQg
cyA9IDA7IHMgPCBrTWF4UGFnZXM7IHMrKykgewotICAgIGNvbnN0IGludCBuX2xlbmd0aCA9IERM
TF9MZW5ndGgoJmZyZWVfW3NdLm5vcm1hbCk7Ci0gICAgY29uc3QgaW50IHJfbGVuZ3RoID0gRExM
X0xlbmd0aCgmZnJlZV9bc10ucmV0dXJuZWQpOwotICAgIGlmIChuX2xlbmd0aCArIHJfbGVuZ3Ro
ID4gMCkgewotICAgICAgdWludDY0X3Qgbl9wYWdlcyA9IHMgKiBuX2xlbmd0aDsKLSAgICAgIHVp
bnQ2NF90IHJfcGFnZXMgPSBzICogcl9sZW5ndGg7Ci0gICAgICB0b3RhbF9ub3JtYWwgKz0gbl9w
YWdlczsKLSAgICAgIHRvdGFsX3JldHVybmVkICs9IHJfcGFnZXM7Ci0gICAgICBvdXQtPnByaW50
ZigiJTZ1IHBhZ2VzICogJTZ1IHNwYW5zIH4gJTYuMWYgTUI7ICU2LjFmIE1CIGN1bSIKLSAgICAg
ICAgICAgICAgICAgICI7IHVubWFwcGVkOiAlNi4xZiBNQjsgJTYuMWYgTUIgY3VtXG4iLAotICAg
ICAgICAgICAgICAgICAgcywKLSAgICAgICAgICAgICAgICAgIChuX2xlbmd0aCArIHJfbGVuZ3Ro
KSwKLSAgICAgICAgICAgICAgICAgIFBhZ2VzVG9NQihuX3BhZ2VzICsgcl9wYWdlcyksCi0gICAg
ICAgICAgICAgICAgICBQYWdlc1RvTUIodG90YWxfbm9ybWFsICsgdG90YWxfcmV0dXJuZWQpLAot
ICAgICAgICAgICAgICAgICAgUGFnZXNUb01CKHJfcGFnZXMpLAotICAgICAgICAgICAgICAgICAg
UGFnZXNUb01CKHRvdGFsX3JldHVybmVkKSk7Cit2b2lkIFRDTWFsbG9jUGFnZUhlYXA6OkR1bXAo
VENNYWxsb2NfUHJpbnRlciogb3V0KQoreworICAgIGludCBub25lbXB0eVNpemVzID0gMDsKKyAg
ICBmb3IgKGludCBzID0gMDsgcyA8IGtNYXhQYWdlczsgcysrKQorICAgICAgICBpZiAoIURMTF9J
c0VtcHR5KCZmcmVlU3Bhbkxpc3Rbc10ubm9ybWFsKSB8fCAhRExMX0lzRW1wdHkoJmZyZWVTcGFu
TGlzdFtzXS5yZXR1cm5lZCkpCisgICAgICAgICAgICBub25lbXB0eVNpemVzKys7CisgICAgb3V0
LT5wcmludGYoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LVxuIik7CisgICAgb3V0LT5wcmludGYoIlBhZ2VIZWFwOiAlZCBzaXplczsgJTYuMWYgTUIgZnJl
ZVxuIiwKKyAgICAgICAgICAgICAgICBub25lbXB0eVNpemVzLCBQYWdlc1RvTUIoZnJlZVBhZ2Vz
KSk7CisgICAgb3V0LT5wcmludGYoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLVxuIik7CisgICAgdWludDY0X3QgdG90YWxOb3JtYWwgPSAwOworICAgIHVp
bnQ2NF90IHRvdGFsUmV0dXJuZWQgPSAwOworICAgIGZvciAoaW50IHMgPSAwOyBzIDwga01heFBh
Z2VzOyBzKyspIHsKKyAgICAgICAgY29uc3QgaW50IG5MZW5ndGggPSBETExMZW5ndGgoJmZyZWVT
cGFuTGlzdFtzXS5ub3JtYWwpOworICAgICAgICBjb25zdCBpbnQgckxlbmd0aCA9IERMTExlbmd0
aCgmZnJlZVNwYW5MaXN0W3NdLnJldHVybmVkKTsKKyAgICAgICAgaWYgKG5MZW5ndGggKyByTGVu
Z3RoID4gMCkgeworICAgICAgICAgICAgdWludDY0X3QgblBhZ2VzID0gcyAqIG5MZW5ndGg7Cisg
ICAgICAgICAgICB1aW50NjRfdCByUGFnZXMgPSBzICogckxlbmd0aDsKKyAgICAgICAgICAgIHRv
dGFsTm9ybWFsICs9IG5QYWdlczsKKyAgICAgICAgICAgIHRvdGFsUmV0dXJuZWQgKz0gclBhZ2Vz
OworICAgICAgICAgICAgb3V0LT5wcmludGYoIiU2dSBwYWdlcyAqICU2dSBzcGFucyB+ICU2LjFm
IE1COyAlNi4xZiBNQiBjdW0iCisgICAgICAgICAgICAgICAgICAgICAgICAiOyB1bm1hcHBlZDog
JTYuMWYgTUI7ICU2LjFmIE1CIGN1bVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHMsCisg
ICAgICAgICAgICAgICAgICAgICAgICAobkxlbmd0aCArIHJMZW5ndGgpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgUGFnZXNUb01CKG5QYWdlcyArIHJQYWdlcyksCisgICAgICAgICAgICAgICAg
ICAgICAgICBQYWdlc1RvTUIodG90YWxOb3JtYWwgKyB0b3RhbFJldHVybmVkKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIFBhZ2VzVG9NQihyUGFnZXMpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgUGFnZXNUb01CKHRvdGFsUmV0dXJuZWQpKTsKKyAgICAgICAgfQogICAgIH0KLSAgfQogCi0g
IHVpbnQ2NF90IG5fcGFnZXMgPSAwOwotICB1aW50NjRfdCByX3BhZ2VzID0gMDsKLSAgaW50IG5f
c3BhbnMgPSAwOwotICBpbnQgcl9zcGFucyA9IDA7Ci0gIG91dC0+cHJpbnRmKCJOb3JtYWwgbGFy
Z2Ugc3BhbnM6XG4iKTsKLSAgZm9yIChTcGFuKiBzID0gbGFyZ2VfLm5vcm1hbC5uZXh0OyBzICE9
ICZsYXJnZV8ubm9ybWFsOyBzID0gcy0+bmV4dCkgewotICAgIG91dC0+cHJpbnRmKCIgICBbICU2
IiBQUkl1UyAiIHBhZ2VzIF0gJTYuMWYgTUJcbiIsCi0gICAgICAgICAgICAgICAgcy0+bGVuZ3Ro
LCBQYWdlc1RvTUIocy0+bGVuZ3RoKSk7Ci0gICAgbl9wYWdlcyArPSBzLT5sZW5ndGg7Ci0gICAg
bl9zcGFucysrOwotICB9Ci0gIG91dC0+cHJpbnRmKCJVbm1hcHBlZCBsYXJnZSBzcGFuczpcbiIp
OwotICBmb3IgKFNwYW4qIHMgPSBsYXJnZV8ucmV0dXJuZWQubmV4dDsgcyAhPSAmbGFyZ2VfLnJl
dHVybmVkOyBzID0gcy0+bmV4dCkgewotICAgIG91dC0+cHJpbnRmKCIgICBbICU2IiBQUkl1UyAi
IHBhZ2VzIF0gJTYuMWYgTUJcbiIsCi0gICAgICAgICAgICAgICAgcy0+bGVuZ3RoLCBQYWdlc1Rv
TUIocy0+bGVuZ3RoKSk7Ci0gICAgcl9wYWdlcyArPSBzLT5sZW5ndGg7Ci0gICAgcl9zcGFucysr
OwotICB9Ci0gIHRvdGFsX25vcm1hbCArPSBuX3BhZ2VzOwotICB0b3RhbF9yZXR1cm5lZCArPSBy
X3BhZ2VzOwotICBvdXQtPnByaW50ZigiPjI1NSAgIGxhcmdlICogJTZ1IHNwYW5zIH4gJTYuMWYg
TUI7ICU2LjFmIE1CIGN1bSIKLSAgICAgICAgICAgICAgIjsgdW5tYXBwZWQ6ICU2LjFmIE1COyAl
Ni4xZiBNQiBjdW1cbiIsCi0gICAgICAgICAgICAgIChuX3NwYW5zICsgcl9zcGFucyksCi0gICAg
ICAgICAgICAgIFBhZ2VzVG9NQihuX3BhZ2VzICsgcl9wYWdlcyksCi0gICAgICAgICAgICAgIFBh
Z2VzVG9NQih0b3RhbF9ub3JtYWwgKyB0b3RhbF9yZXR1cm5lZCksCi0gICAgICAgICAgICAgIFBh
Z2VzVG9NQihyX3BhZ2VzKSwKLSAgICAgICAgICAgICAgUGFnZXNUb01CKHRvdGFsX3JldHVybmVk
KSk7CisgICAgdWludDY0X3QgblBhZ2VzID0gMDsKKyAgICB1aW50NjRfdCByUGFnZXMgPSAwOwor
ICAgIGludCBuU3BhbnMgPSAwOworICAgIGludCByU3BhbnMgPSAwOworICAgIG91dC0+cHJpbnRm
KCJOb3JtYWwgbGFyZ2Ugc3BhbnM6XG4iKTsKKyAgICBmb3IgKFNwYW4qIHMgPSBsYXJnZS5ub3Jt
YWwubmV4dDsgcyAhPSAmbGFyZ2Uubm9ybWFsOyBzID0gcy0+bmV4dCkgeworICAgICAgICBvdXQt
PnByaW50ZigiICAgWyAlNiIgUFJJdVMgIiBwYWdlcyBdICU2LjFmIE1CXG4iLAorICAgICAgICAg
ICAgICAgICAgICBzLT5sZW5ndGgsIFBhZ2VzVG9NQihzLT5sZW5ndGgpKTsKKyAgICAgICAgblBh
Z2VzICs9IHMtPmxlbmd0aDsKKyAgICAgICAgblNwYW5zKys7CisgICAgfQorICAgIG91dC0+cHJp
bnRmKCJVbm1hcHBlZCBsYXJnZSBzcGFuczpcbiIpOworICAgIGZvciAoU3BhbiogcyA9IGxhcmdl
LnJldHVybmVkLm5leHQ7IHMgIT0gJmxhcmdlLnJldHVybmVkOyBzID0gcy0+bmV4dCkgeworICAg
ICAgICBvdXQtPnByaW50ZigiICAgWyAlNiIgUFJJdVMgIiBwYWdlcyBdICU2LjFmIE1CXG4iLAor
ICAgICAgICAgICAgICAgICAgICBzLT5sZW5ndGgsIFBhZ2VzVG9NQihzLT5sZW5ndGgpKTsKKyAg
ICAgICAgclBhZ2VzICs9IHMtPmxlbmd0aDsKKyAgICAgICAgclNwYW5zKys7CisgICAgfQorICAg
IHRvdGFsTm9ybWFsICs9IG5QYWdlczsKKyAgICB0b3RhbFJldHVybmVkICs9IHJQYWdlczsKKyAg
ICBvdXQtPnByaW50ZigiPjI1NSAgIGxhcmdlICogJTZ1IHNwYW5zIH4gJTYuMWYgTUI7ICU2LjFm
IE1CIGN1bSIKKyAgICAgICAgICAgICAgICAiOyB1bm1hcHBlZDogJTYuMWYgTUI7ICU2LjFmIE1C
IGN1bVxuIiwKKyAgICAgICAgICAgICAgICAoblNwYW5zICsgclNwYW5zKSwKKyAgICAgICAgICAg
ICAgICBQYWdlc1RvTUIoblBhZ2VzICsgclBhZ2VzKSwKKyAgICAgICAgICAgICAgICBQYWdlc1Rv
TUIodG90YWxOb3JtYWwgKyB0b3RhbFJldHVybmVkKSwKKyAgICAgICAgICAgICAgICBQYWdlc1Rv
TUIoclBhZ2VzKSwKKyAgICAgICAgICAgICAgICBQYWdlc1RvTUIodG90YWxSZXR1cm5lZCkpOwog
fQogI2VuZGlmCiAKLWJvb2wgVENNYWxsb2NfUGFnZUhlYXA6Okdyb3dIZWFwKExlbmd0aCBuKSB7
Ci0gIEFTU0VSVChrTWF4UGFnZXMgPj0ga01pblN5c3RlbUFsbG9jKTsKLSAgaWYgKG4gPiBrTWF4
VmFsaWRQYWdlcykgcmV0dXJuIGZhbHNlOwotICBMZW5ndGggYXNrID0gKG4+a01pblN5c3RlbUFs
bG9jKSA/IG4gOiBzdGF0aWNfY2FzdDxMZW5ndGg+KGtNaW5TeXN0ZW1BbGxvYyk7Ci0gIHNpemVf
dCBhY3R1YWxfc2l6ZTsKLSAgdm9pZCogcHRyID0gVENNYWxsb2NfU3lzdGVtQWxsb2MoYXNrIDw8
IGtQYWdlU2hpZnQsICZhY3R1YWxfc2l6ZSwga1BhZ2VTaXplKTsKLSAgaWYgKHB0ciA9PSBOVUxM
KSB7Ci0gICAgaWYgKG4gPCBhc2spIHsKLSAgICAgIC8vIFRyeSBncm93aW5nIGp1c3QgIm4iIHBh
Z2VzCi0gICAgICBhc2sgPSBuOwotICAgICAgcHRyID0gVENNYWxsb2NfU3lzdGVtQWxsb2MoYXNr
IDw8IGtQYWdlU2hpZnQsICZhY3R1YWxfc2l6ZSwga1BhZ2VTaXplKTsKK2Jvb2wgVENNYWxsb2NQ
YWdlSGVhcDo6R3Jvd0hlYXAoTGVuZ3RoIG4pCit7CisgICAgQVNTRVJUKGtNYXhQYWdlcyA+PSBr
TWluU3lzdGVtQWxsb2MpOworICAgIGlmIChuID4ga01heFZhbGlkUGFnZXMpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBMZW5ndGggYXNrID0gKG4+a01pblN5c3RlbUFsbG9jKSA/IG4gOiBz
dGF0aWNfY2FzdDxMZW5ndGg+KGtNaW5TeXN0ZW1BbGxvYyk7CisgICAgc2l6ZV90IGFjdHVhbFNp
emU7CisgICAgdm9pZCogcHRyID0gVENNYWxsb2NfU3lzdGVtQWxsb2MoYXNrIDw8IGtQYWdlU2hp
ZnQsICZhY3R1YWxTaXplLCBrUGFnZVNpemUpOworICAgIGlmICghcHRyKSB7CisgICAgICAgIGlm
IChuIDwgYXNrKSB7CisgICAgICAgICAgICAvLyBUcnkgZ3Jvd2luZyBqdXN0ICJuIiBwYWdlcwor
ICAgICAgICAgICAgYXNrID0gbjsKKyAgICAgICAgICAgIHB0ciA9IFRDTWFsbG9jX1N5c3RlbUFs
bG9jKGFzayA8PCBrUGFnZVNoaWZ0LCAmYWN0dWFsU2l6ZSwga1BhZ2VTaXplKTsKKyAgICAgICAg
fQorICAgICAgICBpZiAoIXB0cikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0g
ICAgaWYgKHB0ciA9PSBOVUxMKSByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgYXNrID0gYWN0dWFsX3Np
emUgPj4ga1BhZ2VTaGlmdDsKKyAgICBhc2sgPSBhY3R1YWxTaXplID4+IGtQYWdlU2hpZnQ7CiAK
LSAgdWludDY0X3Qgb2xkX3N5c3RlbV9ieXRlcyA9IHN5c3RlbV9ieXRlc187Ci0gIHN5c3RlbV9i
eXRlc18gKz0gKGFzayA8PCBrUGFnZVNoaWZ0KTsKLSAgY29uc3QgUGFnZUlEIHAgPSByZWludGVy
cHJldF9jYXN0PHVpbnRwdHJfdD4ocHRyKSA+PiBrUGFnZVNoaWZ0OwotICBBU1NFUlQocCA+IDAp
OworICAgIHVpbnQ2NF90IG9sZFN5c3RlbUJ5dGVzID0gc3lzdGVtQnl0ZXM7CisgICAgc3lzdGVt
Qnl0ZXMgKz0gKGFzayA8PCBrUGFnZVNoaWZ0KTsKKyAgICBjb25zdCBQYWdlSUQgcCA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihwdHIpID4+IGtQYWdlU2hpZnQ7CisgICAgQVNTRVJUKHAg
PiAwKTsKIAotICAvLyBJZiB3ZSBoYXZlIGFscmVhZHkgYSBsb3Qgb2YgcGFnZXMgYWxsb2NhdGVk
LCBqdXN0IHByZSBhbGxvY2F0ZSBhIGJ1bmNoIG9mCi0gIC8vIG1lbW9yeSBmb3IgdGhlIHBhZ2Ug
bWFwLiBUaGlzIHByZXZlbnRzIGZyYWdtZW50YXRpb24gYnkgcGFnZW1hcCBtZXRhZGF0YQotICAv
LyB3aGVuIGEgcHJvZ3JhbSBrZWVwcyBhbGxvY2F0aW5nIGFuZCBmcmVlaW5nIGxhcmdlIGJsb2Nr
cy4KLQotICBpZiAob2xkX3N5c3RlbV9ieXRlcyA8IGtQYWdlTWFwQmlnQWxsb2NhdGlvblRocmVz
aG9sZAotICAgICAgJiYgc3lzdGVtX2J5dGVzXyA+PSBrUGFnZU1hcEJpZ0FsbG9jYXRpb25UaHJl
c2hvbGQpIHsKLSAgICBwYWdlbWFwXy5QcmVhbGxvY2F0ZU1vcmVNZW1vcnkoKTsKLSAgfQorICAg
IC8vIElmIHdlIGhhdmUgYWxyZWFkeSBhIGxvdCBvZiBwYWdlcyBhbGxvY2F0ZWQsIGp1c3QgcHJl
IGFsbG9jYXRlIGEgYnVuY2ggb2YKKyAgICAvLyBtZW1vcnkgZm9yIHRoZSBwYWdlIG1hcC4gVGhp
cyBwcmV2ZW50cyBmcmFnbWVudGF0aW9uIGJ5IHBhZ2VNYXAgbWV0YWRhdGEKKyAgICAvLyB3aGVu
IGEgcHJvZ3JhbSBrZWVwcyBhbGxvY2F0aW5nIGFuZCBmcmVlaW5nIGxhcmdlIGJsb2Nrcy4KKwor
ICAgIGlmIChvbGRTeXN0ZW1CeXRlcyA8IGtQYWdlTWFwQmlnQWxsb2NhdGlvblRocmVzaG9sZAor
ICAgICAgICAmJiBzeXN0ZW1CeXRlcyA+PSBrUGFnZU1hcEJpZ0FsbG9jYXRpb25UaHJlc2hvbGQp
CisgICAgICAgIHBhZ2VNYXAuUHJlYWxsb2NhdGVNb3JlTWVtb3J5KCk7CisKKyAgICAvLyBNYWtl
IHN1cmUgcGFnZU1hcCBoYXMgZW50cmllcyBmb3IgYWxsIG9mIHRoZSBuZXcgcGFnZXMuCisgICAg
Ly8gUGx1cyBlbnN1cmUgb25lIGJlZm9yZSBhbmQgb25lIGFmdGVyIHNvIGNvYWxlc2NpbmcgY29k
ZQorICAgIC8vIGRvZXMgbm90IG5lZWQgYm91bmRzLWNoZWNraW5nLgorICAgIGlmIChwYWdlTWFw
LkVuc3VyZShwLTEsIGFzaysyKSkgeworICAgICAgICAvLyBQcmV0ZW5kIHRoZSBuZXcgYXJlYSBp
cyBhbGxvY2F0ZWQgYW5kIHRoZW4gRGVsZXRlKCkgaXQgdG8KKyAgICAgICAgLy8gY2F1c2UgYW55
IG5lY2Vzc2FyeSBjb2FsZXNjaW5nIHRvIG9jY3VyLgorICAgICAgICAvLworICAgICAgICAvLyBX
ZSBkbyBub3QgYWRqdXN0IGZyZWVQYWdlcyBoZXJlIHNpbmNlIERlbGV0ZSgpIHdpbGwgZG8gaXQg
Zm9yIHVzLgorICAgICAgICBTcGFuKiBzcGFuID0gTmV3U3BhbihwLCBhc2spOworICAgICAgICBS
ZWNvcmRTcGFuKHNwYW4pOworICAgICAgICBEZWxldGUoc3Bhbik7CisgICAgICAgIEFTU0VSVChD
aGVjaygpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogCi0gIC8vIE1ha2Ugc3VyZSBw
YWdlbWFwXyBoYXMgZW50cmllcyBmb3IgYWxsIG9mIHRoZSBuZXcgcGFnZXMuCi0gIC8vIFBsdXMg
ZW5zdXJlIG9uZSBiZWZvcmUgYW5kIG9uZSBhZnRlciBzbyBjb2FsZXNjaW5nIGNvZGUKLSAgLy8g
ZG9lcyBub3QgbmVlZCBib3VuZHMtY2hlY2tpbmcuCi0gIGlmIChwYWdlbWFwXy5FbnN1cmUocC0x
LCBhc2srMikpIHsKLSAgICAvLyBQcmV0ZW5kIHRoZSBuZXcgYXJlYSBpcyBhbGxvY2F0ZWQgYW5k
IHRoZW4gRGVsZXRlKCkgaXQgdG8KLSAgICAvLyBjYXVzZSBhbnkgbmVjZXNzYXJ5IGNvYWxlc2Np
bmcgdG8gb2NjdXIuCi0gICAgLy8KLSAgICAvLyBXZSBkbyBub3QgYWRqdXN0IGZyZWVfcGFnZXNf
IGhlcmUgc2luY2UgRGVsZXRlKCkgd2lsbCBkbyBpdCBmb3IgdXMuCi0gICAgU3Bhbiogc3BhbiA9
IE5ld1NwYW4ocCwgYXNrKTsKLSAgICBSZWNvcmRTcGFuKHNwYW4pOwotICAgIERlbGV0ZShzcGFu
KTsKLSAgICBBU1NFUlQoQ2hlY2soKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0gZWxzZSB7Ci0g
ICAgLy8gV2UgY291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSB3aXRoaW4gInBhZ2VtYXBfIgorICAg
IC8vIFdlIGNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgd2l0aGluICJwYWdlTWFwIgogICAgIC8v
IFRPRE86IE9uY2Ugd2UgY2FuIHJldHVybiBtZW1vcnkgdG8gdGhlIHN5c3RlbSwgcmV0dXJuIHRo
ZSBuZXcgc3BhbgogICAgIHJldHVybiBmYWxzZTsKLSAgfQogfQogCi1ib29sIFRDTWFsbG9jX1Bh
Z2VIZWFwOjpDaGVjaygpIHsKK2Jvb2wgVENNYWxsb2NQYWdlSGVhcDo6Q2hlY2soKQorewogI2lm
IFVTRV9CQUNLR1JPVU5EX1RIUkVBRF9UT19TQ0FWRU5HRV9NRU1PUlkKLSAgc2l6ZV90IHRvdGFs
RnJlZUNvbW1pdHRlZCA9IDA7CisgICAgc2l6ZV90IHRvdGFsRnJlZUNvbW1pdHRlZCA9IDA7CiAj
ZW5kaWYKLSAgQVNTRVJUKGZyZWVfWzBdLm5vcm1hbC5uZXh0ID09ICZmcmVlX1swXS5ub3JtYWwp
OwotICBBU1NFUlQoZnJlZV9bMF0ucmV0dXJuZWQubmV4dCA9PSAmZnJlZV9bMF0ucmV0dXJuZWQp
OworICAgIEFTU0VSVChmcmVlU3Bhbkxpc3RbMF0ubm9ybWFsLm5leHQgPT0gJmZyZWVTcGFuTGlz
dFswXS5ub3JtYWwpOworICAgIEFTU0VSVChmcmVlU3Bhbkxpc3RbMF0ucmV0dXJuZWQubmV4dCA9
PSAmZnJlZVNwYW5MaXN0WzBdLnJldHVybmVkKTsKICNpZiBVU0VfQkFDS0dST1VORF9USFJFQURf
VE9fU0NBVkVOR0VfTUVNT1JZCi0gIHRvdGFsRnJlZUNvbW1pdHRlZCA9IENoZWNrTGlzdCgmbGFy
Z2VfLm5vcm1hbCwga01heFBhZ2VzLCAxMDAwMDAwMDAwLCBmYWxzZSk7CisgICAgdG90YWxGcmVl
Q29tbWl0dGVkID0gQ2hlY2tMaXN0KCZsYXJnZS5ub3JtYWwsIGtNYXhQYWdlcywgMTAwMDAwMDAw
MCwgZmFsc2UpOwogI2Vsc2UKLSAgQ2hlY2tMaXN0KCZsYXJnZV8ubm9ybWFsLCBrTWF4UGFnZXMs
IDEwMDAwMDAwMDAsIGZhbHNlKTsKKyAgICBDaGVja0xpc3QoJmxhcmdlLm5vcm1hbCwga01heFBh
Z2VzLCAxMDAwMDAwMDAwLCBmYWxzZSk7CiAjZW5kaWYKLSAgICBDaGVja0xpc3QoJmxhcmdlXy5y
ZXR1cm5lZCwga01heFBhZ2VzLCAxMDAwMDAwMDAwLCB0cnVlKTsKLSAgZm9yIChMZW5ndGggcyA9
IDE7IHMgPCBrTWF4UGFnZXM7IHMrKykgeworICAgIENoZWNrTGlzdCgmbGFyZ2UucmV0dXJuZWQs
IGtNYXhQYWdlcywgMTAwMDAwMDAwMCwgdHJ1ZSk7CisgICAgZm9yIChMZW5ndGggcyA9IDE7IHMg
PCBrTWF4UGFnZXM7IHMrKykgewogI2lmIFVTRV9CQUNLR1JPVU5EX1RIUkVBRF9UT19TQ0FWRU5H
RV9NRU1PUlkKLSAgICB0b3RhbEZyZWVDb21taXR0ZWQgKz0gQ2hlY2tMaXN0KCZmcmVlX1tzXS5u
b3JtYWwsIHMsIHMsIGZhbHNlKTsKKyAgICAgICAgdG90YWxGcmVlQ29tbWl0dGVkICs9IENoZWNr
TGlzdCgmZnJlZVNwYW5MaXN0W3NdLm5vcm1hbCwgcywgcywgZmFsc2UpOwogI2Vsc2UKLSAgICBD
aGVja0xpc3QoJmZyZWVfW3NdLm5vcm1hbCwgcywgcywgZmFsc2UpOworICAgICAgICBDaGVja0xp
c3QoJmZyZWVTcGFuTGlzdFtzXS5ub3JtYWwsIHMsIHMsIGZhbHNlKTsKICNlbmRpZgotICAgIENo
ZWNrTGlzdCgmZnJlZV9bc10ucmV0dXJuZWQsIHMsIHMsIHRydWUpOwotICB9CisgICAgICAgIENo
ZWNrTGlzdCgmZnJlZVNwYW5MaXN0W3NdLnJldHVybmVkLCBzLCBzLCB0cnVlKTsKKyAgICB9CiAj
aWYgVVNFX0JBQ0tHUk9VTkRfVEhSRUFEX1RPX1NDQVZFTkdFX01FTU9SWQotICBBU1NFUlQodG90
YWxGcmVlQ29tbWl0dGVkID09IGZyZWVfY29tbWl0dGVkX3BhZ2VzXyk7CisgICAgQVNTRVJUKHRv
dGFsRnJlZUNvbW1pdHRlZCA9PSBmcmVlQ29tbWl0dGVkUGFnZXMpOwogI2VuZGlmCi0gIHJldHVy
biB0cnVlOworICAgIHJldHVybiB0cnVlOwogfQogCiAjaWYgQVNTRVJUX0RJU0FCTEVECi1zaXpl
X3QgVENNYWxsb2NfUGFnZUhlYXA6OkNoZWNrTGlzdChTcGFuKiwgTGVuZ3RoLCBMZW5ndGgsIGJv
b2wpIHsKLSAgcmV0dXJuIDA7CitzaXplX3QgVENNYWxsb2NQYWdlSGVhcDo6Q2hlY2tMaXN0KFNw
YW4qLCBMZW5ndGgsIExlbmd0aCwgYm9vbCkKK3sKKyAgICByZXR1cm4gMDsKIH0KICNlbHNlCi1z
aXplX3QgVENNYWxsb2NfUGFnZUhlYXA6OkNoZWNrTGlzdChTcGFuKiBsaXN0LCBMZW5ndGggbWlu
X3BhZ2VzLCBMZW5ndGggbWF4X3BhZ2VzLCBib29sIGRlY29tbWl0dGVkKSB7Ci0gIHNpemVfdCBm
cmVlQ291bnQgPSAwOwotICBmb3IgKFNwYW4qIHMgPSBsaXN0LT5uZXh0OyBzICE9IGxpc3Q7IHMg
PSBzLT5uZXh0KSB7Ci0gICAgQ0hFQ0tfQ09ORElUSU9OKHMtPmZyZWUpOwotICAgIENIRUNLX0NP
TkRJVElPTihzLT5sZW5ndGggPj0gbWluX3BhZ2VzKTsKLSAgICBDSEVDS19DT05ESVRJT04ocy0+
bGVuZ3RoIDw9IG1heF9wYWdlcyk7Ci0gICAgQ0hFQ0tfQ09ORElUSU9OKEdldERlc2NyaXB0b3Io
cy0+c3RhcnQpID09IHMpOwotICAgIENIRUNLX0NPTkRJVElPTihHZXREZXNjcmlwdG9yKHMtPnN0
YXJ0K3MtPmxlbmd0aC0xKSA9PSBzKTsKLSAgICBDSEVDS19DT05ESVRJT04ocy0+ZGVjb21taXR0
ZWQgPT0gZGVjb21taXR0ZWQpOwotICAgIGZyZWVDb3VudCArPSBzLT5sZW5ndGg7Ci0gIH0KLSAg
cmV0dXJuIGZyZWVDb3VudDsKK3NpemVfdCBUQ01hbGxvY1BhZ2VIZWFwOjpDaGVja0xpc3QoU3Bh
biogbGlzdCwgTGVuZ3RoIG1pblBhZ2VzLCBMZW5ndGggbWF4UGFnZXMsIGJvb2wgZGVjb21taXR0
ZWQpCit7CisgICAgc2l6ZV90IGZyZWVDb3VudCA9IDA7CisgICAgZm9yIChTcGFuKiBzID0gbGlz
dC0+bmV4dDsgcyAhPSBsaXN0OyBzID0gcy0+bmV4dCkgeworICAgICAgICBDSEVDS19DT05ESVRJ
T04ocy0+ZnJlZSk7CisgICAgICAgIENIRUNLX0NPTkRJVElPTihzLT5sZW5ndGggPj0gbWluUGFn
ZXMpOworICAgICAgICBDSEVDS19DT05ESVRJT04ocy0+bGVuZ3RoIDw9IG1heFBhZ2VzKTsKKyAg
ICAgICAgQ0hFQ0tfQ09ORElUSU9OKEdldERlc2NyaXB0b3Iocy0+c3RhcnQpID09IHMpOworICAg
ICAgICBDSEVDS19DT05ESVRJT04oR2V0RGVzY3JpcHRvcihzLT5zdGFydCtzLT5sZW5ndGgtMSkg
PT0gcyk7CisgICAgICAgIENIRUNLX0NPTkRJVElPTihzLT5kZWNvbW1pdHRlZCA9PSBkZWNvbW1p
dHRlZCk7CisgICAgICAgIGZyZWVDb3VudCArPSBzLT5sZW5ndGg7CisgICAgfQorICAgIHJldHVy
biBmcmVlQ291bnQ7CiB9CiAjZW5kaWYKIAotdm9pZCBUQ01hbGxvY19QYWdlSGVhcDo6UmVsZWFz
ZUZyZWVMaXN0KFNwYW4qIGxpc3QsIFNwYW4qIHJldHVybmVkKSB7Ci0gIC8vIFdhbGsgYmFja3dh
cmRzIHRocm91Z2ggbGlzdCBzbyB0aGF0IHdoZW4gd2UgcHVzaCB0aGVzZQotICAvLyBzcGFucyBv
biB0aGUgInJldHVybmVkIiBsaXN0LCB3ZSBwcmVzZXJ2ZSB0aGUgb3JkZXIuCit2b2lkIFRDTWFs
bG9jUGFnZUhlYXA6OlJlbGVhc2VGcmVlTGlzdChTcGFuKiBsaXN0LCBTcGFuKiByZXR1cm5lZCkK
K3sKKyAgICAvLyBXYWxrIGJhY2t3YXJkcyB0aHJvdWdoIGxpc3Qgc28gdGhhdCB3aGVuIHdlIHB1
c2ggdGhlc2UKKyAgICAvLyBzcGFucyBvbiB0aGUgInJldHVybmVkIiBsaXN0LCB3ZSBwcmVzZXJ2
ZSB0aGUgb3JkZXIuCiAjaWYgVVNFX0JBQ0tHUk9VTkRfVEhSRUFEX1RPX1NDQVZFTkdFX01FTU9S
WQotICBzaXplX3QgZnJlZVBhZ2VSZWR1Y3Rpb24gPSAwOworICAgIHNpemVfdCBmcmVlUGFnZVJl
ZHVjdGlvbiA9IDA7CiAjZW5kaWYKIAotICB3aGlsZSAoIURMTF9Jc0VtcHR5KGxpc3QpKSB7Ci0g
ICAgU3BhbiogcyA9IGxpc3QtPnByZXY7CisgICAgd2hpbGUgKCFETExfSXNFbXB0eShsaXN0KSkg
eworICAgICAgICBTcGFuKiBzID0gbGlzdC0+cHJldjsKIAotICAgIERMTF9SZW1vdmUocyk7Ci0g
ICAgcy0+ZGVjb21taXR0ZWQgPSB0cnVlOwotICAgIERMTF9QcmVwZW5kKHJldHVybmVkLCBzKTsK
LSAgICBUQ01hbGxvY19TeXN0ZW1SZWxlYXNlKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHMtPnN0
YXJ0IDw8IGtQYWdlU2hpZnQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8c2l6ZV90PihzLT5sZW5ndGggPDwga1BhZ2VTaGlmdCkpOworICAgICAgICBETExSZW1vdmUo
cyk7CisgICAgICAgIHMtPmRlY29tbWl0dGVkID0gdHJ1ZTsKKyAgICAgICAgRExMUHJlcGVuZChy
ZXR1cm5lZCwgcyk7CisgICAgICAgIFRDTWFsbG9jX1N5c3RlbVJlbGVhc2UocmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4ocy0+c3RhcnQgPDwga1BhZ2VTaGlmdCksCisgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxzaXplX3Q+KHMtPmxlbmd0aCA8PCBrUGFnZVNoaWZ0KSk7CiAjaWYgVVNFX0JBQ0tHUk9V
TkRfVEhSRUFEX1RPX1NDQVZFTkdFX01FTU9SWQotICAgIGZyZWVQYWdlUmVkdWN0aW9uICs9IHMt
Pmxlbmd0aDsKKyAgICAgICAgZnJlZVBhZ2VSZWR1Y3Rpb24gKz0gcy0+bGVuZ3RoOwogI2VuZGlm
Ci0gIH0KKyAgICB9CiAKICNpZiBVU0VfQkFDS0dST1VORF9USFJFQURfVE9fU0NBVkVOR0VfTUVN
T1JZCi0gICAgZnJlZV9jb21taXR0ZWRfcGFnZXNfIC09IGZyZWVQYWdlUmVkdWN0aW9uOwotICAg
IGlmIChmcmVlX2NvbW1pdHRlZF9wYWdlc18gPCBtaW5fZnJlZV9jb21taXR0ZWRfcGFnZXNfc2lu
Y2VfbGFzdF9zY2F2ZW5nZV8pIAotICAgICAgICBtaW5fZnJlZV9jb21taXR0ZWRfcGFnZXNfc2lu
Y2VfbGFzdF9zY2F2ZW5nZV8gPSBmcmVlX2NvbW1pdHRlZF9wYWdlc187CisgICAgZnJlZUNvbW1p
dHRlZFBhZ2VzIC09IGZyZWVQYWdlUmVkdWN0aW9uOworICAgIGlmIChmcmVlQ29tbWl0dGVkUGFn
ZXMgPCBtaW5GcmVlQ29tbWl0dGVkUGFnZXNTaW5jZUxhc3RTY2F2ZW5nZSkgCisgICAgICAgIG1p
bkZyZWVDb21taXR0ZWRQYWdlc1NpbmNlTGFzdFNjYXZlbmdlID0gZnJlZUNvbW1pdHRlZFBhZ2Vz
OwogI2VuZGlmCiB9CiAKLXZvaWQgVENNYWxsb2NfUGFnZUhlYXA6OlJlbGVhc2VGcmVlUGFnZXMo
KSB7Ci0gIGZvciAoTGVuZ3RoIHMgPSAwOyBzIDwga01heFBhZ2VzOyBzKyspIHsKLSAgICBSZWxl
YXNlRnJlZUxpc3QoJmZyZWVfW3NdLm5vcm1hbCwgJmZyZWVfW3NdLnJldHVybmVkKTsKLSAgfQot
ICBSZWxlYXNlRnJlZUxpc3QoJmxhcmdlXy5ub3JtYWwsICZsYXJnZV8ucmV0dXJuZWQpOwotICBB
U1NFUlQoQ2hlY2soKSk7Cit2b2lkIFRDTWFsbG9jUGFnZUhlYXA6OlJlbGVhc2VGcmVlUGFnZXMo
KQoreworICAgIGZvciAoTGVuZ3RoIHMgPSAwOyBzIDwga01heFBhZ2VzOyBzKyspCisgICAgICAg
IFJlbGVhc2VGcmVlTGlzdCgmZnJlZVNwYW5MaXN0W3NdLm5vcm1hbCwgJmZyZWVTcGFuTGlzdFtz
XS5yZXR1cm5lZCk7CisgICAgUmVsZWFzZUZyZWVMaXN0KCZsYXJnZS5ub3JtYWwsICZsYXJnZS5y
ZXR1cm5lZCk7CisgICAgQVNTRVJUKENoZWNrKCkpOwogfQogCiAvLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vIEZy
ZWUgbGlzdAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLWNsYXNzIFRDTWFsbG9jX1RocmVhZENhY2hlX0ZyZWVM
aXN0IHsKLSBwcml2YXRlOgotICB2b2lkKiAgICBsaXN0XzsgICAgICAgLy8gTGlua2VkIGxpc3Qg
b2Ygbm9kZXMKLSAgdWludDE2X3QgbGVuZ3RoXzsgICAgIC8vIEN1cnJlbnQgbGVuZ3RoCi0gIHVp
bnQxNl90IGxvd2F0ZXJfOyAgICAvLyBMb3cgd2F0ZXIgbWFyayBmb3IgbGlzdCBsZW5ndGgKK2Ns
YXNzIFRDTWFsbG9jVGhyZWFkQ2FjaGVGcmVlTGlzdCB7Citwcml2YXRlOgorICAgIHZvaWQqIGxp
c3Q7IC8vIExpbmtlZCBsaXN0IG9mIG5vZGVzCisgICAgdWludDE2X3QgY3VycmVudExlbmd0aDsg
Ly8gQ3VycmVudCBsZW5ndGgKKyAgICB1aW50MTZfdCBsb3dhdGVyOyAvLyBMb3cgd2F0ZXIgbWFy
ayBmb3IgbGlzdCBsZW5ndGgKIAotIHB1YmxpYzoKLSAgdm9pZCBJbml0KCkgewotICAgIGxpc3Rf
ID0gTlVMTDsKLSAgICBsZW5ndGhfID0gMDsKLSAgICBsb3dhdGVyXyA9IDA7Ci0gIH0KK3B1Ymxp
YzoKKyAgICB2b2lkIEluaXQoKQorICAgIHsKKyAgICAgICAgbGlzdCA9IDA7CisgICAgICAgIGN1
cnJlbnRMZW5ndGggPSAwOworICAgICAgICBsb3dhdGVyID0gMDsKKyAgICB9CiAKLSAgLy8gUmV0
dXJuIGN1cnJlbnQgbGVuZ3RoIG9mIGxpc3QKLSAgaW50IGxlbmd0aCgpIGNvbnN0IHsKLSAgICBy
ZXR1cm4gbGVuZ3RoXzsKLSAgfQorICAgIC8vIFJldHVybiBjdXJyZW50IGxlbmd0aCBvZiBsaXN0
CisgICAgaW50IGxlbmd0aCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gY3VycmVudExl
bmd0aDsKKyAgICB9CiAKLSAgLy8gSXMgbGlzdCBlbXB0eT8KLSAgYm9vbCBlbXB0eSgpIGNvbnN0
IHsKLSAgICByZXR1cm4gbGlzdF8gPT0gTlVMTDsKLSAgfQorICAgIC8vIElzIGxpc3QgZW1wdHk/
CisgICAgYm9vbCBlbXB0eSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIWxpc3Q7Cisg
ICAgfQogCi0gIC8vIExvdy13YXRlciBtYXJrIG1hbmFnZW1lbnQKLSAgaW50IGxvd3dhdGVybWFy
aygpIGNvbnN0IHsgcmV0dXJuIGxvd2F0ZXJfOyB9Ci0gIHZvaWQgY2xlYXJfbG93d2F0ZXJtYXJr
KCkgeyBsb3dhdGVyXyA9IGxlbmd0aF87IH0KLQotICBBTFdBWVNfSU5MSU5FIHZvaWQgUHVzaCh2
b2lkKiBwdHIpIHsKLSAgICBTTExfUHVzaCgmbGlzdF8sIHB0cik7Ci0gICAgbGVuZ3RoXysrOwot
ICB9CisgICAgLy8gTG93LXdhdGVyIG1hcmsgbWFuYWdlbWVudAorICAgIGludCBsb3d3YXRlcm1h
cmsoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGxvd2F0ZXI7CisgICAgfQorICAgIHZv
aWQgY2xlYXJMb3d3YXRlcm1hcmsoKQorICAgIHsKKyAgICAgICAgbG93YXRlciA9IGN1cnJlbnRM
ZW5ndGg7CisgICAgfQogCi0gIHZvaWQgUHVzaFJhbmdlKGludCBOLCB2b2lkICpzdGFydCwgdm9p
ZCAqZW5kKSB7Ci0gICAgU0xMX1B1c2hSYW5nZSgmbGlzdF8sIHN0YXJ0LCBlbmQpOwotICAgIGxl
bmd0aF8gPSBsZW5ndGhfICsgc3RhdGljX2Nhc3Q8dWludDE2X3Q+KE4pOwotICB9CisgICAgQUxX
QVlTX0lOTElORSB2b2lkIFB1c2godm9pZCogcHRyKQorICAgIHsKKyAgICAgICAgU0xMUHVzaCgm
bGlzdCwgcHRyKTsKKyAgICAgICAgY3VycmVudExlbmd0aCsrOworICAgIH0KIAotICB2b2lkIFBv
cFJhbmdlKGludCBOLCB2b2lkICoqc3RhcnQsIHZvaWQgKiplbmQpIHsKLSAgICBTTExfUG9wUmFu
Z2UoJmxpc3RfLCBOLCBzdGFydCwgZW5kKTsKLSAgICBBU1NFUlQobGVuZ3RoXyA+PSBOKTsKLSAg
ICBsZW5ndGhfID0gbGVuZ3RoXyAtIHN0YXRpY19jYXN0PHVpbnQxNl90PihOKTsKLSAgICBpZiAo
bGVuZ3RoXyA8IGxvd2F0ZXJfKSBsb3dhdGVyXyA9IGxlbmd0aF87Ci0gIH0KKyAgICB2b2lkIFB1
c2hSYW5nZShpbnQgTiwgdm9pZCogc3RhcnQsIHZvaWQqIGVuZCkKKyAgICB7CisgICAgICAgIFNM
TFB1c2hSYW5nZSgmbGlzdCwgc3RhcnQsIGVuZCk7CisgICAgICAgIGN1cnJlbnRMZW5ndGggPSBj
dXJyZW50TGVuZ3RoICsgc3RhdGljX2Nhc3Q8dWludDE2X3Q+KE4pOworICAgIH0KIAotICBBTFdB
WVNfSU5MSU5FIHZvaWQqIFBvcCgpIHsKLSAgICBBU1NFUlQobGlzdF8gIT0gTlVMTCk7Ci0gICAg
bGVuZ3RoXy0tOwotICAgIGlmIChsZW5ndGhfIDwgbG93YXRlcl8pIGxvd2F0ZXJfID0gbGVuZ3Ro
XzsKLSAgICByZXR1cm4gU0xMX1BvcCgmbGlzdF8pOwotICB9CisgICAgdm9pZCBQb3BSYW5nZShp
bnQgTiwgdm9pZCoqIHN0YXJ0LCB2b2lkKiogZW5kKQorICAgIHsKKyAgICAgICAgU0xMUG9wUmFu
Z2UoJmxpc3QsIE4sIHN0YXJ0LCBlbmQpOworICAgICAgICBBU1NFUlQoY3VycmVudExlbmd0aCA+
PSBOKTsKKyAgICAgICAgY3VycmVudExlbmd0aCA9IGN1cnJlbnRMZW5ndGggLSBzdGF0aWNfY2Fz
dDx1aW50MTZfdD4oTik7CisgICAgICAgIGlmIChjdXJyZW50TGVuZ3RoIDwgbG93YXRlcikKKyAg
ICAgICAgICAgIGxvd2F0ZXIgPSBjdXJyZW50TGVuZ3RoOworICAgIH0KKworICAgIEFMV0FZU19J
TkxJTkUgdm9pZCogUG9wKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChsaXN0KTsKKyAgICAgICAg
Y3VycmVudExlbmd0aC0tOworICAgICAgICBpZiAoY3VycmVudExlbmd0aCA8IGxvd2F0ZXIpCisg
ICAgICAgICAgICBsb3dhdGVyID0gY3VycmVudExlbmd0aDsKKyAgICAgICAgcmV0dXJuIFNMTFBv
cCgmbGlzdCk7CisgICAgfQogCiAjaWZkZWYgV1RGX0NIQU5HRVMKLSAgdGVtcGxhdGUgPGNsYXNz
IEZpbmRlciwgY2xhc3MgUmVhZGVyPgotICB2b2lkIGVudW1lcmF0ZUZyZWVPYmplY3RzKEZpbmRl
ciYgZmluZGVyLCBjb25zdCBSZWFkZXImIHJlYWRlcikKLSAgewotICAgICAgZm9yICh2b2lkKiBu
ZXh0T2JqZWN0ID0gbGlzdF87IG5leHRPYmplY3Q7IG5leHRPYmplY3QgPSByZWFkZXIubmV4dEVu
dHJ5SW5MaW5rZWRMaXN0KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPihuZXh0T2JqZWN0KSkpCi0g
ICAgICAgICAgZmluZGVyLnZpc2l0KG5leHRPYmplY3QpOwotICB9CisgICAgdGVtcGxhdGUgPGNs
YXNzIEZpbmRlciwgY2xhc3MgUmVhZGVyPgorICAgIHZvaWQgZW51bWVyYXRlRnJlZU9iamVjdHMo
RmluZGVyJiBmaW5kZXIsIGNvbnN0IFJlYWRlciYgcmVhZGVyKQorICAgIHsKKyAgICAgICAgZm9y
ICh2b2lkKiBuZXh0T2JqZWN0ID0gbGlzdDsgbmV4dE9iamVjdDsgbmV4dE9iamVjdCA9IHJlYWRl
ci5uZXh0RW50cnlJbkxpbmtlZExpc3QocmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KG5leHRPYmpl
Y3QpKSkKKyAgICAgICAgICAgIGZpbmRlci52aXNpdChuZXh0T2JqZWN0KTsKKyAgICB9CiAjZW5k
aWYKIH07CiAKQEAgLTIyNzUsNzUgKzIzMjksNzUgQEAgY2xhc3MgVENNYWxsb2NfVGhyZWFkQ2Fj
aGVfRnJlZUxpc3QgewogLy8gRGF0YSBrZXB0IHBlciB0aHJlYWQKIC8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1j
bGFzcyBUQ01hbGxvY19UaHJlYWRDYWNoZSB7Ci0gcHJpdmF0ZToKLSAgdHlwZWRlZiBUQ01hbGxv
Y19UaHJlYWRDYWNoZV9GcmVlTGlzdCBGcmVlTGlzdDsKK2NsYXNzIFRDTWFsbG9jVGhyZWFkQ2Fj
aGUgeworcHJpdmF0ZToKKyAgICB0eXBlZGVmIFRDTWFsbG9jVGhyZWFkQ2FjaGVGcmVlTGlzdCBG
cmVlTGlzdDsKICNpZiBPUyhXSU5ET1dTKQotICB0eXBlZGVmIERXT1JEIFRocmVhZElkZW50aWZp
ZXI7CisgICAgdHlwZWRlZiBEV09SRCBUaHJlYWRJZGVudGlmaWVyOwogI2Vsc2UKLSAgdHlwZWRl
ZiBwdGhyZWFkX3QgVGhyZWFkSWRlbnRpZmllcjsKKyAgICB0eXBlZGVmIHB0aHJlYWRfdCBUaHJl
YWRJZGVudGlmaWVyOwogI2VuZGlmCiAKLSAgc2l6ZV90ICAgICAgICBzaXplXzsgICAgICAgICAg
ICAgICAgICAvLyBDb21iaW5lZCBzaXplIG9mIGRhdGEKLSAgVGhyZWFkSWRlbnRpZmllciB0aWRf
OyAgICAgICAgICAgICAgICAvLyBXaGljaCB0aHJlYWQgb3ducyBpdAotICBib29sICAgICAgICAg
IGluX3NldHNwZWNpZmljXzsgICAgICAgICAgIC8vIENhbGxlZCBwdGhyZWFkX3NldHNwZWNpZmlj
PwotICBGcmVlTGlzdCAgICAgIGxpc3RfW2tOdW1DbGFzc2VzXTsgICAgIC8vIEFycmF5IGluZGV4
ZWQgYnkgc2l6ZS1jbGFzcworICAgIHNpemVfdCBzaXplOyAvLyBDb21iaW5lZCBzaXplIG9mIGRh
dGEKKyAgICBUaHJlYWRJZGVudGlmaWVyIHRpZDsgLy8gV2hpY2ggdGhyZWFkIG93bnMgaXQKKyAg
ICBib29sIGluU2V0c3BlY2lmaWM7IC8vIENhbGxlZCBwdGhyZWFkX3NldHNwZWNpZmljPworICAg
IEZyZWVMaXN0IGxpc3Rba051bUNsYXNzZXNdOyAvLyBBcnJheSBpbmRleGVkIGJ5IHNpemUtY2xh
c3MKIAotICAvLyBXZSBzYW1wbGUgYWxsb2NhdGlvbnMsIGJpYXNlZCBieSB0aGUgc2l6ZSBvZiB0
aGUgYWxsb2NhdGlvbgotICB1aW50MzJfdCAgICAgIHJuZF87ICAgICAgICAgICAgICAgICAgIC8v
IENoZWFwIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yCi0gIHNpemVfdCAgICAgICAgYnl0ZXNfdW50
aWxfc2FtcGxlXzsgICAgLy8gQnl0ZXMgdW50aWwgd2Ugc2FtcGxlIG5leHQKKyAgICAvLyBXZSBz
YW1wbGUgYWxsb2NhdGlvbnMsIGJpYXNlZCBieSB0aGUgc2l6ZSBvZiB0aGUgYWxsb2NhdGlvbgor
ICAgIHVpbnQzMl90IHJuZDsgLy8gQ2hlYXAgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IKKyAgICBz
aXplX3QgYnl0ZXNVbnRpbFNhbXBsZTsgLy8gQnl0ZXMgdW50aWwgd2Ugc2FtcGxlIG5leHQKIAot
ICAvLyBBbGxvY2F0ZSBhIG5ldyBoZWFwLiBSRVFVSVJFUzogcGFnZWhlYXBfbG9jayBpcyBoZWxk
LgotICBzdGF0aWMgaW5saW5lIFRDTWFsbG9jX1RocmVhZENhY2hlKiBOZXdIZWFwKFRocmVhZElk
ZW50aWZpZXIgdGlkKTsKKyAgICAvLyBBbGxvY2F0ZSBhIG5ldyBoZWFwLiBSRVFVSVJFUzogcGFn
ZWhlYXBMb2NrIGlzIGhlbGQuCisgICAgc3RhdGljIGlubGluZSBUQ01hbGxvY1RocmVhZENhY2hl
KiBOZXdIZWFwKFRocmVhZElkZW50aWZpZXIgdGlkKTsKIAotICAvLyBVc2Ugb25seSBhcyBwdGhy
ZWFkIHRocmVhZC1zcGVjaWZpYyBkZXN0cnVjdG9yIGZ1bmN0aW9uLgotICBzdGF0aWMgdm9pZCBE
ZXN0cm95VGhyZWFkQ2FjaGUodm9pZCogcHRyKTsKLSBwdWJsaWM6Ci0gIC8vIEFsbCBUaHJlYWRD
YWNoZSBvYmplY3RzIGFyZSBrZXB0IGluIGEgbGlua2VkIGxpc3QgKGZvciBzdGF0cyBjb2xsZWN0
aW9uKQotICBUQ01hbGxvY19UaHJlYWRDYWNoZSogbmV4dF87Ci0gIFRDTWFsbG9jX1RocmVhZENh
Y2hlKiBwcmV2XzsKLQotICB2b2lkIEluaXQoVGhyZWFkSWRlbnRpZmllciB0aWQpOwotICB2b2lk
IENsZWFudXAoKTsKLQotICAvLyBBY2Nlc3NvcnMgKG1vc3RseSBqdXN0IGZvciBwcmludGluZyBz
dGF0cykKLSAgaW50IGZyZWVsaXN0X2xlbmd0aChzaXplX3QgY2wpIGNvbnN0IHsgcmV0dXJuIGxp
c3RfW2NsXS5sZW5ndGgoKTsgfQotCi0gIC8vIFRvdGFsIGJ5dGUgc2l6ZSBpbiBjYWNoZQotICBz
aXplX3QgU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemVfOyB9Ci0KLSAgQUxXQVlTX0lOTElORSB2
b2lkKiBBbGxvY2F0ZShzaXplX3Qgc2l6ZSk7Ci0gIHZvaWQgRGVhbGxvY2F0ZSh2b2lkKiBwdHIs
IHNpemVfdCBzaXplX2NsYXNzKTsKLQotICBBTFdBWVNfSU5MSU5FIHZvaWQgRmV0Y2hGcm9tQ2Vu
dHJhbENhY2hlKHNpemVfdCBjbCwgc2l6ZV90IGFsbG9jYXRpb25TaXplKTsKLSAgdm9pZCBSZWxl
YXNlVG9DZW50cmFsQ2FjaGUoc2l6ZV90IGNsLCBpbnQgTik7Ci0gIHZvaWQgU2NhdmVuZ2UoKTsK
LSAgdm9pZCBQcmludCgpIGNvbnN0OwotCi0gIC8vIFJlY29yZCBhbGxvY2F0aW9uIG9mICJrIiBi
eXRlcy4gIFJldHVybiB0cnVlIGlmZiBhbGxvY2F0aW9uCi0gIC8vIHNob3VsZCBiZSBzYW1wbGVk
Ci0gIGJvb2wgU2FtcGxlQWxsb2NhdGlvbihzaXplX3Qgayk7Ci0KLSAgLy8gUGljayBuZXh0IHNh
bXBsaW5nIHBvaW50Ci0gIHZvaWQgUGlja05leHRTYW1wbGUoc2l6ZV90IGspOwotCi0gIHN0YXRp
YyB2b2lkICAgICAgICAgICAgICAgICAgSW5pdE1vZHVsZSgpOwotICBzdGF0aWMgdm9pZCAgICAg
ICAgICAgICAgICAgIEluaXRUU0QoKTsKLSAgc3RhdGljIFRDTWFsbG9jX1RocmVhZENhY2hlKiBH
ZXRUaHJlYWRIZWFwKCk7Ci0gIHN0YXRpYyBUQ01hbGxvY19UaHJlYWRDYWNoZSogR2V0Q2FjaGUo
KTsKLSAgc3RhdGljIFRDTWFsbG9jX1RocmVhZENhY2hlKiBHZXRDYWNoZUlmUHJlc2VudCgpOwot
ICBzdGF0aWMgVENNYWxsb2NfVGhyZWFkQ2FjaGUqIENyZWF0ZUNhY2hlSWZOZWNlc3NhcnkoKTsK
LSAgc3RhdGljIHZvaWQgICAgICAgICAgICAgICAgICBEZWxldGVDYWNoZShUQ01hbGxvY19UaHJl
YWRDYWNoZSogaGVhcCk7Ci0gIHN0YXRpYyB2b2lkICAgICAgICAgICAgICAgICAgQmVjb21lSWRs
ZSgpOwotICBzdGF0aWMgdm9pZCAgICAgICAgICAgICAgICAgIFJlY29tcHV0ZVRocmVhZENhY2hl
U2l6ZSgpOworICAgIC8vIFVzZSBvbmx5IGFzIHB0aHJlYWQgdGhyZWFkLXNwZWNpZmljIGRlc3Ry
dWN0b3IgZnVuY3Rpb24uCisgICAgc3RhdGljIHZvaWQgRGVzdHJveVRocmVhZENhY2hlKHZvaWQq
IHB0cik7CitwdWJsaWM6CisgICAgLy8gQWxsIFRocmVhZENhY2hlIG9iamVjdHMgYXJlIGtlcHQg
aW4gYSBsaW5rZWQgbGlzdCAoZm9yIHN0YXRzIGNvbGxlY3Rpb24pCisgICAgVENNYWxsb2NUaHJl
YWRDYWNoZSogbmV4dDsKKyAgICBUQ01hbGxvY1RocmVhZENhY2hlKiBwcmV2OworCisgICAgdm9p
ZCBJbml0KFRocmVhZElkZW50aWZpZXIgdGlkKTsKKyAgICB2b2lkIENsZWFudXAoKTsKKworICAg
IC8vIEFjY2Vzc29ycyAobW9zdGx5IGp1c3QgZm9yIHByaW50aW5nIHN0YXRzKQorICAgIGludCBm
cmVlbGlzdGxlbmd0aChzaXplX3QgY2wpIGNvbnN0IHsgcmV0dXJuIGxpc3RbY2xdLmxlbmd0aCgp
OyB9CisKKyAgICAvLyBUb3RhbCBieXRlIHNpemUgaW4gY2FjaGUKKyAgICBzaXplX3QgU2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIHNpemU7IH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCogQWxsb2Nh
dGUoc2l6ZV90KTsKKyAgICB2b2lkIERlYWxsb2NhdGUodm9pZCosIHNpemVfdCBzaXplQ2xhc3Mp
OworCisgICAgQUxXQVlTX0lOTElORSB2b2lkIEZldGNoRnJvbUNlbnRyYWxDYWNoZShzaXplX3Qg
Y2wsIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSk7CisgICAgdm9pZCBSZWxlYXNlVG9DZW50cmFsQ2Fj
aGUoc2l6ZV90IGNsLCBpbnQpOworICAgIHZvaWQgU2NhdmVuZ2UoKTsKKyAgICB2b2lkIFByaW50
KCkgY29uc3Q7CisKKyAgICAvLyBSZWNvcmQgYWxsb2NhdGlvbiBvZiAiayIgYnl0ZXMuIFJldHVy
biB0cnVlIGlmZiBhbGxvY2F0aW9uCisgICAgLy8gc2hvdWxkIGJlIHNhbXBsZWQKKyAgICBib29s
IFNhbXBsZUFsbG9jYXRpb24oc2l6ZV90KTsKKworICAgIC8vIFBpY2sgbmV4dCBzYW1wbGluZyBw
b2ludAorICAgIHZvaWQgUGlja05leHRTYW1wbGUoc2l6ZV90KTsKKworICAgIHN0YXRpYyB2b2lk
IEluaXRNb2R1bGUoKTsKKyAgICBzdGF0aWMgdm9pZCBJbml0VFNEKCk7CisgICAgc3RhdGljIFRD
TWFsbG9jVGhyZWFkQ2FjaGUqIEdldFRocmVhZEhlYXAoKTsKKyAgICBzdGF0aWMgVENNYWxsb2NU
aHJlYWRDYWNoZSogR2V0Q2FjaGUoKTsKKyAgICBzdGF0aWMgVENNYWxsb2NUaHJlYWRDYWNoZSog
R2V0Q2FjaGVJZlByZXNlbnQoKTsKKyAgICBzdGF0aWMgVENNYWxsb2NUaHJlYWRDYWNoZSogQ3Jl
YXRlQ2FjaGVJZk5lY2Vzc2FyeSgpOworICAgIHN0YXRpYyB2b2lkIERlbGV0ZUNhY2hlKFRDTWFs
bG9jVGhyZWFkQ2FjaGUqIGhlYXApOworICAgIHN0YXRpYyB2b2lkIEJlY29tZUlkbGUoKTsKKyAg
ICBzdGF0aWMgdm9pZCBSZWNvbXB1dGVUaHJlYWRDYWNoZVNpemUoKTsKIAogI2lmZGVmIFdURl9D
SEFOR0VTCi0gIHRlbXBsYXRlIDxjbGFzcyBGaW5kZXIsIGNsYXNzIFJlYWRlcj4KLSAgdm9pZCBl
bnVtZXJhdGVGcmVlT2JqZWN0cyhGaW5kZXImIGZpbmRlciwgY29uc3QgUmVhZGVyJiByZWFkZXIp
Ci0gIHsKLSAgICAgIGZvciAodW5zaWduZWQgc2l6ZUNsYXNzID0gMDsgc2l6ZUNsYXNzIDwga051
bUNsYXNzZXM7IHNpemVDbGFzcysrKQotICAgICAgICAgIGxpc3RfW3NpemVDbGFzc10uZW51bWVy
YXRlRnJlZU9iamVjdHMoZmluZGVyLCByZWFkZXIpOwotICB9CisgICAgdGVtcGxhdGUgPGNsYXNz
IEZpbmRlciwgY2xhc3MgUmVhZGVyPgorICAgIHZvaWQgZW51bWVyYXRlRnJlZU9iamVjdHMoRmlu
ZGVyJiBmaW5kZXIsIGNvbnN0IFJlYWRlciYgcmVhZGVyKQorICAgIHsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBzaXplQ2xhc3MgPSAwOyBzaXplQ2xhc3MgPCBrTnVtQ2xhc3Nlczsgc2l6ZUNsYXNz
KyspCisgICAgICAgICAgICBsaXN0W3NpemVDbGFzc10uZW51bWVyYXRlRnJlZU9iamVjdHMoZmlu
ZGVyLCByZWFkZXIpOworICAgIH0KICNlbmRpZgogfTsKIApAQCAtMjM1MSwxMjggKzI0MDUsMTMw
IEBAIGNsYXNzIFRDTWFsbG9jX1RocmVhZENhY2hlIHsKIC8vIERhdGEga2VwdCBwZXIgc2l6ZS1j
bGFzcyBpbiBjZW50cmFsIGNhY2hlCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotY2xhc3MgVENNYWxsb2NfQ2Vu
dHJhbF9GcmVlTGlzdCB7Ci0gcHVibGljOgotICB2b2lkIEluaXQoc2l6ZV90IGNsKTsKK2NsYXNz
IFRDTWFsbG9jQ2VudHJhbEZyZWVMaXN0IHsKK3B1YmxpYzoKKyAgICB2b2lkIEluaXQoc2l6ZV90
IGNsKTsKIAotICAvLyBUaGVzZSBtZXRob2RzIGFsbCBkbyBpbnRlcm5hbCBsb2NraW5nLgorICAg
IC8vIFRoZXNlIG1ldGhvZHMgYWxsIGRvIGludGVybmFsIGxvY2tpbmcuCiAKLSAgLy8gSW5zZXJ0
IHRoZSBzcGVjaWZpZWQgcmFuZ2UgaW50byB0aGUgY2VudHJhbCBmcmVlbGlzdC4gIE4gaXMgdGhl
IG51bWJlciBvZgotICAvLyBlbGVtZW50cyBpbiB0aGUgcmFuZ2UuCi0gIHZvaWQgSW5zZXJ0UmFu
Z2Uodm9pZCAqc3RhcnQsIHZvaWQgKmVuZCwgaW50IE4pOworICAgIC8vIEluc2VydCB0aGUgc3Bl
Y2lmaWVkIHJhbmdlIGludG8gdGhlIGNlbnRyYWwgZnJlZWxpc3QuIE4gaXMgdGhlIG51bWJlciBv
ZgorICAgIC8vIGVsZW1lbnRzIGluIHRoZSByYW5nZS4KKyAgICB2b2lkIEluc2VydFJhbmdlKHZv
aWQqIHN0YXJ0LCB2b2lkKiBlbmQsIGludCk7CiAKLSAgLy8gUmV0dXJucyB0aGUgYWN0dWFsIG51
bWJlciBvZiBmZXRjaGVkIGVsZW1lbnRzIGludG8gTi4KLSAgdm9pZCBSZW1vdmVSYW5nZSh2b2lk
ICoqc3RhcnQsIHZvaWQgKiplbmQsIGludCAqTik7CisgICAgLy8gUmV0dXJucyB0aGUgYWN0dWFs
IG51bWJlciBvZiBmZXRjaGVkIGVsZW1lbnRzIGludG8gTi4KKyAgICB2b2lkIFJlbW92ZVJhbmdl
KHZvaWQqKiBzdGFydCwgdm9pZCoqIGVuZCwgaW50Kik7CiAKLSAgLy8gUmV0dXJucyB0aGUgbnVt
YmVyIG9mIGZyZWUgb2JqZWN0cyBpbiBjYWNoZS4KLSAgc2l6ZV90IGxlbmd0aCgpIHsKLSAgICBT
cGluTG9ja0hvbGRlciBoKCZsb2NrXyk7Ci0gICAgcmV0dXJuIGNvdW50ZXJfOwotICB9CisgICAg
Ly8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIGZyZWUgb2JqZWN0cyBpbiBjYWNoZS4KKyAgICBzaXpl
X3QgbGVuZ3RoKCkKKyAgICB7CisgICAgICAgIFNwaW5Mb2NrSG9sZGVyIGgoJmxvY2spOworICAg
ICAgICByZXR1cm4gY291bnRlcjsKKyAgICB9CiAKLSAgLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9m
IGZyZWUgb2JqZWN0cyBpbiB0aGUgdHJhbnNmZXIgY2FjaGUuCi0gIGludCB0Y19sZW5ndGgoKSB7
Ci0gICAgU3BpbkxvY2tIb2xkZXIgaCgmbG9ja18pOwotICAgIHJldHVybiB1c2VkX3Nsb3RzXyAq
IG51bV9vYmplY3RzX3RvX21vdmVbc2l6ZV9jbGFzc19dOwotICB9CisgICAgLy8gUmV0dXJucyB0
aGUgbnVtYmVyIG9mIGZyZWUgb2JqZWN0cyBpbiB0aGUgdHJhbnNmZXIgY2FjaGUuCisgICAgaW50
IHRjTGVuZ3RoKCkKKyAgICB7CisgICAgICAgIFNwaW5Mb2NrSG9sZGVyIGgoJmxvY2spOworICAg
ICAgICByZXR1cm4gdXNlZFNsb3RzICogbnVtT2JqZWN0c1RvTW92ZVtzaXplQ2xhc3NdOworICAg
IH0KIAogI2lmZGVmIFdURl9DSEFOR0VTCi0gIHRlbXBsYXRlIDxjbGFzcyBGaW5kZXIsIGNsYXNz
IFJlYWRlcj4KLSAgdm9pZCBlbnVtZXJhdGVGcmVlT2JqZWN0cyhGaW5kZXImIGZpbmRlciwgY29u
c3QgUmVhZGVyJiByZWFkZXIsIFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3QqIHJlbW90ZUNlbnRy
YWxGcmVlTGlzdCkKLSAgewotICAgIGZvciAoU3Bhbiogc3BhbiA9ICZlbXB0eV87IHNwYW4gJiYg
c3BhbiAhPSAmZW1wdHlfOyBzcGFuID0gKHNwYW4tPm5leHQgPyByZWFkZXIoc3Bhbi0+bmV4dCkg
OiAwKSkKLSAgICAgIEFTU0VSVCghc3Bhbi0+b2JqZWN0cyk7Ci0KLSAgICBBU1NFUlQoIW5vbmVt
cHR5Xy5vYmplY3RzKTsKLSAgICBzdGF0aWMgY29uc3QgcHRyZGlmZl90IG5vbmVtcHR5T2Zmc2V0
ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oJm5vbmVtcHR5XykgLSByZWludGVycHJl
dF9jYXN0PGNvbnN0IGNoYXIqPih0aGlzKTsKLQotICAgIFNwYW4qIHJlbW90ZU5vbmVtcHR5ID0g
cmVpbnRlcnByZXRfY2FzdDxTcGFuKj4ocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocmVtb3RlQ2Vu
dHJhbEZyZWVMaXN0KSArIG5vbmVtcHR5T2Zmc2V0KTsKLSAgICBTcGFuKiByZW1vdGVTcGFuID0g
bm9uZW1wdHlfLm5leHQ7Ci0KLSAgICBmb3IgKFNwYW4qIHNwYW4gPSByZWFkZXIocmVtb3RlU3Bh
bik7IHNwYW4gJiYgcmVtb3RlU3BhbiAhPSByZW1vdGVOb25lbXB0eTsgcmVtb3RlU3BhbiA9IHNw
YW4tPm5leHQsIHNwYW4gPSAoc3Bhbi0+bmV4dCA/IHJlYWRlcihzcGFuLT5uZXh0KSA6IDApKSB7
Ci0gICAgICBmb3IgKHZvaWQqIG5leHRPYmplY3QgPSBzcGFuLT5vYmplY3RzOyBuZXh0T2JqZWN0
OyBuZXh0T2JqZWN0ID0gcmVhZGVyLm5leHRFbnRyeUluTGlua2VkTGlzdChyZWludGVycHJldF9j
YXN0PHZvaWQqKj4obmV4dE9iamVjdCkpKQotICAgICAgICBmaW5kZXIudmlzaXQobmV4dE9iamVj
dCk7CisgICAgdGVtcGxhdGUgPGNsYXNzIEZpbmRlciwgY2xhc3MgUmVhZGVyPgorICAgIHZvaWQg
ZW51bWVyYXRlRnJlZU9iamVjdHMoRmluZGVyJiBmaW5kZXIsIGNvbnN0IFJlYWRlciYgcmVhZGVy
LCBUQ01hbGxvY0NlbnRyYWxGcmVlTGlzdCogcmVtb3RlQ2VudHJhbEZyZWVMaXN0KQorICAgIHsK
KyAgICAgICAgZm9yIChTcGFuKiBzcGFuID0gJmVtcHR5OyBzcGFuICYmIHNwYW4gIT0gJmVtcHR5
OyBzcGFuID0gKHNwYW4tPm5leHQgPyByZWFkZXIoc3Bhbi0+bmV4dCkgOiAwKSkKKyAgICAgICAg
ICAgIEFTU0VSVCghc3Bhbi0+b2JqZWN0cyk7CisKKyAgICAgICAgQVNTRVJUKCFub25lbXB0eS5v
YmplY3RzKTsKKyAgICAgICAgc3RhdGljIGNvbnN0IHB0cmRpZmZfdCBub25lbXB0eU9mZnNldCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KCZub25lbXB0eSkgLSByZWludGVycHJldF9j
YXN0PGNvbnN0IGNoYXIqPih0aGlzKTsKKworICAgICAgICBTcGFuKiByZW1vdGVOb25lbXB0eSA9
IHJlaW50ZXJwcmV0X2Nhc3Q8U3Bhbio+KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlbW90ZUNl
bnRyYWxGcmVlTGlzdCkgKyBub25lbXB0eU9mZnNldCk7CisgICAgICAgIFNwYW4qIHJlbW90ZVNw
YW4gPSBub25lbXB0eS5uZXh0OworCisgICAgICAgIGZvciAoU3Bhbiogc3BhbiA9IHJlYWRlcihy
ZW1vdGVTcGFuKTsgc3BhbiAmJiByZW1vdGVTcGFuICE9IHJlbW90ZU5vbmVtcHR5OyByZW1vdGVT
cGFuID0gc3Bhbi0+bmV4dCwgc3BhbiA9IChzcGFuLT5uZXh0ID8gcmVhZGVyKHNwYW4tPm5leHQp
IDogMCkpIHsKKyAgICAgICAgICAgIGZvciAodm9pZCogbmV4dE9iamVjdCA9IHNwYW4tPm9iamVj
dHM7IG5leHRPYmplY3Q7IG5leHRPYmplY3QgPSByZWFkZXIubmV4dEVudHJ5SW5MaW5rZWRMaXN0
KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPihuZXh0T2JqZWN0KSkpCisgICAgICAgICAgICAgICAg
ZmluZGVyLnZpc2l0KG5leHRPYmplY3QpOworICAgICAgICB9CiAgICAgfQotICB9CiAjZW5kaWYK
IAotIHByaXZhdGU6Ci0gIC8vIFJFUVVJUkVTOiBsb2NrXyBpcyBoZWxkCi0gIC8vIFJlbW92ZSBv
YmplY3QgZnJvbSBjYWNoZSBhbmQgcmV0dXJuLgotICAvLyBSZXR1cm4gTlVMTCBpZiBubyBmcmVl
IGVudHJpZXMgaW4gY2FjaGUuCi0gIHZvaWQqIEZldGNoRnJvbVNwYW5zKCk7Ci0KLSAgLy8gUkVR
VUlSRVM6IGxvY2tfIGlzIGhlbGQKLSAgLy8gUmVtb3ZlIG9iamVjdCBmcm9tIGNhY2hlIGFuZCBy
ZXR1cm4uICBGZXRjaGVzCi0gIC8vIGZyb20gcGFnZWhlYXAgaWYgY2FjaGUgaXMgZW1wdHkuICBP
bmx5IHJldHVybnMKLSAgLy8gTlVMTCBvbiBhbGxvY2F0aW9uIGZhaWx1cmUuCi0gIHZvaWQqIEZl
dGNoRnJvbVNwYW5zU2FmZSgpOwotCi0gIC8vIFJFUVVJUkVTOiBsb2NrXyBpcyBoZWxkCi0gIC8v
IFJlbGVhc2UgYSBsaW5rZWQgbGlzdCBvZiBvYmplY3RzIHRvIHNwYW5zLgotICAvLyBNYXkgdGVt
cG9yYXJpbHkgcmVsZWFzZSBsb2NrXy4KLSAgdm9pZCBSZWxlYXNlTGlzdFRvU3BhbnModm9pZCAq
c3RhcnQpOwotCi0gIC8vIFJFUVVJUkVTOiBsb2NrXyBpcyBoZWxkCi0gIC8vIFJlbGVhc2UgYW4g
b2JqZWN0IHRvIHNwYW5zLgotICAvLyBNYXkgdGVtcG9yYXJpbHkgcmVsZWFzZSBsb2NrXy4KLSAg
QUxXQVlTX0lOTElORSB2b2lkIFJlbGVhc2VUb1NwYW5zKHZvaWQqIG9iamVjdCk7Ci0KLSAgLy8g
UkVRVUlSRVM6IGxvY2tfIGlzIGhlbGQKLSAgLy8gUG9wdWxhdGUgY2FjaGUgYnkgZmV0Y2hpbmcg
ZnJvbSB0aGUgcGFnZSBoZWFwLgotICAvLyBNYXkgdGVtcG9yYXJpbHkgcmVsZWFzZSBsb2NrXy4K
LSAgQUxXQVlTX0lOTElORSB2b2lkIFBvcHVsYXRlKCk7Ci0KLSAgLy8gUkVRVUlSRVM6IGxvY2sg
aXMgaGVsZC4KLSAgLy8gVHJpZXMgdG8gbWFrZSByb29tIGZvciBhIFRDRW50cnkuICBJZiB0aGUg
Y2FjaGUgaXMgZnVsbCBpdCB3aWxsIHRyeSB0bwotICAvLyBleHBhbmQgaXQgYXQgdGhlIGNvc3Qg
b2Ygc29tZSBvdGhlciBjYWNoZSBzaXplLiAgUmV0dXJuIGZhbHNlIGlmIHRoZXJlIGlzCi0gIC8v
IG5vIHNwYWNlLgotICBib29sIE1ha2VDYWNoZVNwYWNlKCk7Ci0KLSAgLy8gUkVRVUlSRVM6IGxv
Y2tfIGZvciBsb2NrZWRfc2l6ZV9jbGFzcyBpcyBoZWxkLgotICAvLyBQaWNrcyBhICJyYW5kb20i
IHNpemUgY2xhc3MgdG8gc3RlYWwgVENFbnRyeSBzbG90IGZyb20uICBJbiByZWFsaXR5IGl0Ci0g
IC8vIGp1c3QgaXRlcmF0ZXMgb3ZlciB0aGUgc2l6ZWNsYXNzZXMgYnV0IGRvZXMgc28gd2l0aG91
dCB0YWtpbmcgYSBsb2NrLgotICAvLyBSZXR1cm5zIHRydWUgb24gc3VjY2Vzcy4KLSAgLy8gTWF5
IHRlbXBvcmFyaWx5IGxvY2sgYSAicmFuZG9tIiBzaXplIGNsYXNzLgotICBzdGF0aWMgQUxXQVlT
X0lOTElORSBib29sIEV2aWN0UmFuZG9tU2l6ZUNsYXNzKHNpemVfdCBsb2NrZWRfc2l6ZV9jbGFz
cywgYm9vbCBmb3JjZSk7Ci0KLSAgLy8gUkVRVUlSRVM6IGxvY2tfIGlzICpub3QqIGhlbGQuCi0g
IC8vIFRyaWVzIHRvIHNocmluayB0aGUgQ2FjaGUuICBJZiBmb3JjZSBpcyB0cnVlIGl0IHdpbGwg
cmVsYXNlIG9iamVjdHMgdG8KLSAgLy8gc3BhbnMgaWYgaXQgYWxsb3dzIGl0IHRvIHNocmluayB0
aGUgY2FjaGUuICBSZXR1cm4gZmFsc2UgaWYgaXQgZmFpbGVkIHRvCi0gIC8vIHNocmluayB0aGUg
Y2FjaGUuICBEZWNyZW1lbnRzIGNhY2hlX3NpemVfIG9uIHN1Y2NlZXNzLgotICAvLyBNYXkgdGVt
cG9yYXJpbHkgdGFrZSBsb2NrXy4gIElmIGl0IHRha2VzIGxvY2tfLCB0aGUgbG9ja2VkX3NpemVf
Y2xhc3MKLSAgLy8gbG9jayBpcyByZWxlYXNlZCB0byB0aGUgdGhyZWFkIGZyb20gaG9sZGluZyB0
d28gc2l6ZSBjbGFzcyBsb2NrcwotICAvLyBjb25jdXJyZW50bHkgd2hpY2ggY291bGQgbGVhZCB0
byBhIGRlYWRsb2NrLgotICBib29sIFNocmlua0NhY2hlKGludCBsb2NrZWRfc2l6ZV9jbGFzcywg
Ym9vbCBmb3JjZSk7Ci0KLSAgLy8gVGhpcyBsb2NrIHByb3RlY3RzIGFsbCB0aGUgZGF0YSBtZW1i
ZXJzLiAgY2FjaGVkX2VudHJpZXMgYW5kIGNhY2hlX3NpemVfCi0gIC8vIG1heSBiZSBsb29rZWQg
YXQgd2l0aG91dCBob2xkaW5nIHRoZSBsb2NrLgotICBTcGluTG9jayBsb2NrXzsKLQotICAvLyBX
ZSBrZWVwIGxpbmtlZCBsaXN0cyBvZiBlbXB0eSBhbmQgbm9uLWVtcHR5IHNwYW5zLgotICBzaXpl
X3QgICBzaXplX2NsYXNzXzsgICAgIC8vIE15IHNpemUgY2xhc3MKLSAgU3BhbiAgICAgZW1wdHlf
OyAgICAgICAgICAvLyBEdW1teSBoZWFkZXIgZm9yIGxpc3Qgb2YgZW1wdHkgc3BhbnMKLSAgU3Bh
biAgICAgbm9uZW1wdHlfOyAgICAgICAvLyBEdW1teSBoZWFkZXIgZm9yIGxpc3Qgb2Ygbm9uLWVt
cHR5IHNwYW5zCi0gIHNpemVfdCAgIGNvdW50ZXJfOyAgICAgICAgLy8gTnVtYmVyIG9mIGZyZWUg
b2JqZWN0cyBpbiBjYWNoZSBlbnRyeQotCi0gIC8vIEhlcmUgd2UgcmVzZXJ2ZSBzcGFjZSBmb3Ig
VENFbnRyeSBjYWNoZSBzbG90cy4gIFNpbmNlIG9uZSBzaXplIGNsYXNzIGNhbgotICAvLyBlbmQg
dXAgZ2V0dGluZyBhbGwgdGhlIFRDRW50cmllcyBxdW90YSBpbiB0aGUgc3lzdGVtIHdlIGp1c3Qg
cHJlYWxsb2NhdGUKLSAgLy8gc3VmZmljaWVudCBudW1iZXIgb2YgZW50cmllcyBoZXJlLgotICBU
Q0VudHJ5IHRjX3Nsb3RzX1trTnVtVHJhbnNmZXJFbnRyaWVzXTsKLQotICAvLyBOdW1iZXIgb2Yg
Y3VycmVudGx5IHVzZWQgY2FjaGVkIGVudHJpZXMgaW4gdGNfc2xvdHNfLiAgVGhpcyB2YXJpYWJs
ZSBpcwotICAvLyB1cGRhdGVkIHVuZGVyIGEgbG9jayBidXQgY2FuIGJlIHJlYWQgd2l0aG91dCBv
bmUuCi0gIGludDMyX3QgdXNlZF9zbG90c187Ci0gIC8vIFRoZSBjdXJyZW50IG51bWJlciBvZiBz
bG90cyBmb3IgdGhpcyBzaXplIGNsYXNzLiAgVGhpcyBpcyBhbgotICAvLyBhZGFwdGl2ZSB2YWx1
ZSB0aGF0IGlzIGluY3JlYXNlZCBpZiB0aGVyZSBpcyBsb3RzIG9mIHRyYWZmaWMKLSAgLy8gb24g
YSBnaXZlbiBzaXplIGNsYXNzLgotICBpbnQzMl90IGNhY2hlX3NpemVfOworcHJpdmF0ZToKKyAg
ICAvLyBSRVFVSVJFUzogbG9jayBpcyBoZWxkCisgICAgLy8gUmVtb3ZlIG9iamVjdCBmcm9tIGNh
Y2hlIGFuZCByZXR1cm4uCisgICAgLy8gUmV0dXJuIDAgaWYgbm8gZnJlZSBlbnRyaWVzIGluIGNh
Y2hlLgorICAgIHZvaWQqIEZldGNoRnJvbVNwYW5zKCk7CisKKyAgICAvLyBSRVFVSVJFUzogbG9j
ayBpcyBoZWxkCisgICAgLy8gUmVtb3ZlIG9iamVjdCBmcm9tIGNhY2hlIGFuZCByZXR1cm4uIEZl
dGNoZXMKKyAgICAvLyBmcm9tIHBhZ2VoZWFwIGlmIGNhY2hlIGlzIGVtcHR5LiBPbmx5IHJldHVy
bnMKKyAgICAvLyAwIG9uIGFsbG9jYXRpb24gZmFpbHVyZS4KKyAgICB2b2lkKiBGZXRjaEZyb21T
cGFuc1NhZmUoKTsKKworICAgIC8vIFJFUVVJUkVTOiBsb2NrIGlzIGhlbGQKKyAgICAvLyBSZWxl
YXNlIGEgbGlua2VkIGxpc3Qgb2Ygb2JqZWN0cyB0byBzcGFucy4KKyAgICAvLyBNYXkgdGVtcG9y
YXJpbHkgcmVsZWFzZSBsb2NrLgorICAgIHZvaWQgUmVsZWFzZUxpc3RUb1NwYW5zKHZvaWQgKnN0
YXJ0KTsKKworICAgIC8vIFJFUVVJUkVTOiBsb2NrIGlzIGhlbGQKKyAgICAvLyBSZWxlYXNlIGFu
IG9iamVjdCB0byBzcGFucy4KKyAgICAvLyBNYXkgdGVtcG9yYXJpbHkgcmVsZWFzZSBsb2NrLgor
ICAgIEFMV0FZU19JTkxJTkUgdm9pZCBSZWxlYXNlVG9TcGFucyh2b2lkKik7CisKKyAgICAvLyBS
RVFVSVJFUzogbG9jayBpcyBoZWxkCisgICAgLy8gUG9wdWxhdGUgY2FjaGUgYnkgZmV0Y2hpbmcg
ZnJvbSB0aGUgcGFnZSBoZWFwLgorICAgIC8vIE1heSB0ZW1wb3JhcmlseSByZWxlYXNlIGxvY2su
CisgICAgQUxXQVlTX0lOTElORSB2b2lkIFBvcHVsYXRlKCk7CisKKyAgICAvLyBSRVFVSVJFUzog
bG9jayBpcyBoZWxkLgorICAgIC8vIFRyaWVzIHRvIG1ha2Ugcm9vbSBmb3IgYSBUQ0VudHJ5LiBJ
ZiB0aGUgY2FjaGUgaXMgZnVsbCBpdCB3aWxsIHRyeSB0bworICAgIC8vIGV4cGFuZCBpdCBhdCB0
aGUgY29zdCBvZiBzb21lIG90aGVyIGNhY2hlIHNpemUuIFJldHVybiBmYWxzZSBpZiB0aGVyZSBp
cworICAgIC8vIG5vIHNwYWNlLgorICAgIGJvb2wgTWFrZUNhY2hlU3BhY2UoKTsKKworICAgIC8v
IFJFUVVJUkVTOiBsb2NrIGZvciBsb2NrZWRTaXplQ2xhc3MgaXMgaGVsZC4KKyAgICAvLyBQaWNr
cyBhICJyYW5kb20iIHNpemUgY2xhc3MgdG8gc3RlYWwgVENFbnRyeSBzbG90IGZyb20uIEluIHJl
YWxpdHkgaXQKKyAgICAvLyBqdXN0IGl0ZXJhdGVzIG92ZXIgdGhlIHNpemVDbGFzc2VzIGJ1dCBk
b2VzIHNvIHdpdGhvdXQgdGFraW5nIGEgbG9jay4KKyAgICAvLyBSZXR1cm5zIHRydWUgb24gc3Vj
Y2Vzcy4KKyAgICAvLyBNYXkgdGVtcG9yYXJpbHkgbG9jayBhICJyYW5kb20iIHNpemUgY2xhc3Mu
CisgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCBFdmljdFJhbmRvbVNpemVDbGFzcyhzaXpl
X3QgbG9ja2VkU2l6ZUNsYXNzLCBib29sIGZvcmNlKTsKKworICAgIC8vIFJFUVVJUkVTOiBsb2Nr
IGlzICpub3QqIGhlbGQuCisgICAgLy8gVHJpZXMgdG8gc2hyaW5rIHRoZSBDYWNoZS4gSWYgZm9y
Y2UgaXMgdHJ1ZSBpdCB3aWxsIHJlbGFzZSBvYmplY3RzIHRvCisgICAgLy8gc3BhbnMgaWYgaXQg
YWxsb3dzIGl0IHRvIHNocmluayB0aGUgY2FjaGUuIFJldHVybiBmYWxzZSBpZiBpdCBmYWlsZWQg
dG8KKyAgICAvLyBzaHJpbmsgdGhlIGNhY2hlLiBEZWNyZW1lbnRzIGNhY2hlU2l6ZSBvbiBzdWNj
ZWVzcy4KKyAgICAvLyBNYXkgdGVtcG9yYXJpbHkgdGFrZSBsb2NrLiBJZiBpdCB0YWtlcyBsb2Nr
LCB0aGUgbG9ja2VkU2l6ZUNsYXNzCisgICAgLy8gbG9jayBpcyByZWxlYXNlZCB0byB0aGUgdGhy
ZWFkIGZyb20gaG9sZGluZyB0d28gc2l6ZSBjbGFzcyBsb2NrcworICAgIC8vIGNvbmN1cnJlbnRs
eSB3aGljaCBjb3VsZCBsZWFkIHRvIGEgZGVhZGxvY2suCisgICAgYm9vbCBTaHJpbmtDYWNoZShp
bnQgbG9ja2VkU2l6ZUNsYXNzLCBib29sIGZvcmNlKTsKKworICAgIC8vIFRoaXMgbG9jayBwcm90
ZWN0cyBhbGwgdGhlIGRhdGEgbWVtYmVycy4gY2FjaGVkX2VudHJpZXMgYW5kIGNhY2hlU2l6ZQor
ICAgIC8vIG1heSBiZSBsb29rZWQgYXQgd2l0aG91dCBob2xkaW5nIHRoZSBsb2NrLgorICAgIFNw
aW5Mb2NrIGxvY2s7CisKKyAgICAvLyBXZSBrZWVwIGxpbmtlZCBsaXN0cyBvZiBlbXB0eSBhbmQg
bm9uLWVtcHR5IHNwYW5zLgorICAgIHNpemVfdCBzaXplQ2xhc3M7IC8vIE15IHNpemUgY2xhc3MK
KyAgICBTcGFuIGVtcHR5OyAvLyBEdW1teSBoZWFkZXIgZm9yIGxpc3Qgb2YgZW1wdHkgc3BhbnMK
KyAgICBTcGFuIG5vbmVtcHR5OyAvLyBEdW1teSBoZWFkZXIgZm9yIGxpc3Qgb2Ygbm9uLWVtcHR5
IHNwYW5zCisgICAgc2l6ZV90IGNvdW50ZXI7IC8vIE51bWJlciBvZiBmcmVlIG9iamVjdHMgaW4g
Y2FjaGUgZW50cnkKKworICAgIC8vIEhlcmUgd2UgcmVzZXJ2ZSBzcGFjZSBmb3IgVENFbnRyeSBj
YWNoZSBzbG90cy4gU2luY2Ugb25lIHNpemUgY2xhc3MgY2FuCisgICAgLy8gZW5kIHVwIGdldHRp
bmcgYWxsIHRoZSBUQ0VudHJpZXMgcXVvdGEgaW4gdGhlIHN5c3RlbSB3ZSBqdXN0IHByZWFsbG9j
YXRlCisgICAgLy8gc3VmZmljaWVudCBudW1iZXIgb2YgZW50cmllcyBoZXJlLgorICAgIFRDRW50
cnkgdGNTbG90c1trTnVtVHJhbnNmZXJFbnRyaWVzXTsKKworICAgIC8vIE51bWJlciBvZiBjdXJy
ZW50bHkgdXNlZCBjYWNoZWQgZW50cmllcyBpbiB0Y1Nsb3RzLiBUaGlzIHZhcmlhYmxlIGlzCisg
ICAgLy8gdXBkYXRlZCB1bmRlciBhIGxvY2sgYnV0IGNhbiBiZSByZWFkIHdpdGhvdXQgb25lLgor
ICAgIGludDMyX3QgdXNlZFNsb3RzOworICAgIC8vIFRoZSBjdXJyZW50IG51bWJlciBvZiBzbG90
cyBmb3IgdGhpcyBzaXplIGNsYXNzLiBUaGlzIGlzIGFuCisgICAgLy8gYWRhcHRpdmUgdmFsdWUg
dGhhdCBpcyBpbmNyZWFzZWQgaWYgdGhlcmUgaXMgbG90cyBvZiB0cmFmZmljCisgICAgLy8gb24g
YSBnaXZlbiBzaXplIGNsYXNzLgorICAgIGludDMyX3QgY2FjaGVTaXplOwogfTsKIAogLy8gUGFk
IGVhY2ggQ2VudHJhbENhY2hlIG9iamVjdCB0byBtdWx0aXBsZSBvZiA2NCBieXRlcwotY2xhc3Mg
VENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdFBhZGRlZCA6IHB1YmxpYyBUQ01hbGxvY19DZW50cmFs
X0ZyZWVMaXN0IHsKLSBwcml2YXRlOgotICBjaGFyIHBhZF9bKDY0IC0gKHNpemVvZihUQ01hbGxv
Y19DZW50cmFsX0ZyZWVMaXN0KSAlIDY0KSkgJSA2NF07CitjbGFzcyBUQ01hbGxvY0NlbnRyYWxG
cmVlTGlzdFBhZGRlZCA6IHB1YmxpYyBUQ01hbGxvY0NlbnRyYWxGcmVlTGlzdCB7Citwcml2YXRl
OgorICAgIGNoYXIgcGFkWyg2NCAtIChzaXplb2YoVENNYWxsb2NDZW50cmFsRnJlZUxpc3QpICUg
NjQpKSAlIDY0XTsKIH07CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMjQ4MSwyMiArMjUzNywyMiBAQCBj
bGFzcyBUQ01hbGxvY19DZW50cmFsX0ZyZWVMaXN0UGFkZGVkIDoKIAogLy8gQ2VudHJhbCBjYWNo
ZSAtLSBhIGNvbGxlY3Rpb24gb2YgZnJlZS1saXN0cywgb25lIHBlciBzaXplLWNsYXNzLgogLy8g
V2UgaGF2ZSBhIHNlcGFyYXRlIGxvY2sgcGVyIGZyZWUtbGlzdCB0byByZWR1Y2UgY29udGVudGlv
bi4KLXN0YXRpYyBUQ01hbGxvY19DZW50cmFsX0ZyZWVMaXN0UGFkZGVkIGNlbnRyYWxfY2FjaGVb
a051bUNsYXNzZXNdOworc3RhdGljIFRDTWFsbG9jQ2VudHJhbEZyZWVMaXN0UGFkZGVkIGNlbnRy
YWxDYWNoZVtrTnVtQ2xhc3Nlc107CiAKIC8vIFBhZ2UtbGV2ZWwgYWxsb2NhdG9yCi1zdGF0aWMg
QWxsb2NBbGlnbm1lbnRJbnRlZ2VyIHBhZ2VoZWFwX21lbW9yeVsoc2l6ZW9mKFRDTWFsbG9jX1Bh
Z2VIZWFwKSArIHNpemVvZihBbGxvY0FsaWdubWVudEludGVnZXIpIC0gMSkgLyBzaXplb2YoQWxs
b2NBbGlnbm1lbnRJbnRlZ2VyKV07CitzdGF0aWMgQWxsb2NBbGlnbm1lbnRJbnRlZ2VyIHBhZ2Vo
ZWFwTWVtb3J5WyhzaXplb2YoVENNYWxsb2NQYWdlSGVhcCkgKyBzaXplb2YoQWxsb2NBbGlnbm1l
bnRJbnRlZ2VyKSAtIDEpIC8gc2l6ZW9mKEFsbG9jQWxpZ25tZW50SW50ZWdlcildOwogc3RhdGlj
IGJvb2wgcGhpbml0ZWQgPSBmYWxzZTsKIAogLy8gQXZvaWQgZXh0cmEgbGV2ZWwgb2YgaW5kaXJl
Y3Rpb24gYnkgbWFraW5nICJwYWdlaGVhcCIgYmUganVzdCBhbiBhbGlhcwotLy8gb2YgcGFnZWhl
YXBfbWVtb3J5LgorLy8gb2YgcGFnZWhlYXBNZW1vcnkuCiB0eXBlZGVmIHVuaW9uIHsKICAgICB2
b2lkKiBtX21lbW9yeTsKLSAgICBUQ01hbGxvY19QYWdlSGVhcCogbV9wYWdlSGVhcDsKKyAgICBU
Q01hbGxvY1BhZ2VIZWFwKiBtX3BhZ2VIZWFwOwogfSBQYWdlSGVhcFVuaW9uOwogCi1zdGF0aWMg
aW5saW5lIFRDTWFsbG9jX1BhZ2VIZWFwKiBnZXRQYWdlSGVhcCgpCitzdGF0aWMgaW5saW5lIFRD
TWFsbG9jUGFnZUhlYXAqIGdldFBhZ2VIZWFwKCkKIHsKLSAgICBQYWdlSGVhcFVuaW9uIHUgPSB7
ICZwYWdlaGVhcF9tZW1vcnlbMF0gfTsKKyAgICBQYWdlSGVhcFVuaW9uIHUgPSB7ICZwYWdlaGVh
cE1lbW9yeVswXSB9OwogICAgIHJldHVybiB1Lm1fcGFnZUhlYXA7CiB9CiAKQEAgLTI1MDYsOSAr
MjU2Miw5IEBAIHN0YXRpYyBpbmxpbmUgVENNYWxsb2NfUGFnZUhlYXAqIGdldFBhZ2UKIAogI2lm
IEhBVkUoRElTUEFUQ0hfSCkgfHwgT1MoV0lORE9XUykKIAotdm9pZCBUQ01hbGxvY19QYWdlSGVh
cDo6cGVyaW9kaWNTY2F2ZW5nZSgpCit2b2lkIFRDTWFsbG9jUGFnZUhlYXA6OnBlcmlvZGljU2Nh
dmVuZ2UoKQogewotICAgIFNwaW5Mb2NrSG9sZGVyIGgoJnBhZ2VoZWFwX2xvY2spOworICAgIFNw
aW5Mb2NrSG9sZGVyIGgoJnBhZ2VoZWFwTG9jayk7CiAgICAgcGFnZWhlYXAtPnNjYXZlbmdlKCk7
CiAKICAgICBpZiAoc2hvdWxkU2NhdmVuZ2UoKSkgewpAQCAtMjUxOSwzNiArMjU3NSwzNiBAQCB2
b2lkIFRDTWFsbG9jX1BhZ2VIZWFwOjpwZXJpb2RpY1NjYXZlbmdlCiAgICAgc3VzcGVuZFNjYXZl
bmdlcigpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgVENNYWxsb2NfUGFnZUhlYXA6OnNpZ25h
bFNjYXZlbmdlcigpCitBTFdBWVNfSU5MSU5FIHZvaWQgVENNYWxsb2NQYWdlSGVhcDo6c2lnbmFs
U2NhdmVuZ2VyKCkKIHsKLSAgICBBU1NFUlQocGFnZWhlYXBfbG9jay5Jc0hlbGQoKSk7CisgICAg
QVNTRVJUKHBhZ2VoZWFwTG9jay5Jc0hlbGQoKSk7CiAgICAgaWYgKGlzU2NhdmVuZ2VyU3VzcGVu
ZGVkKCkgJiYgc2hvdWxkU2NhdmVuZ2UoKSkKICAgICAgICAgc2NoZWR1bGVTY2F2ZW5nZXIoKTsK
IH0KIAogI2Vsc2UKIAotdm9pZCBUQ01hbGxvY19QYWdlSGVhcDo6c2NhdmVuZ2VyVGhyZWFkKCkK
K3ZvaWQgVENNYWxsb2NQYWdlSGVhcDo6c2NhdmVuZ2VyVGhyZWFkKCkKIHsKICNpZiBIQVZFKFBU
SFJFQURfU0VUTkFNRV9OUCkKLSAgcHRocmVhZF9zZXRuYW1lX25wKCJKYXZhU2NyaXB0Q29yZTog
RmFzdE1hbGxvYyBzY2F2ZW5nZXIiKTsKKyAgICBwdGhyZWFkX3NldG5hbWVfbnAoIkphdmFTY3Jp
cHRDb3JlOiBGYXN0TWFsbG9jIHNjYXZlbmdlciIpOwogI2VuZGlmCiAKLSAgd2hpbGUgKDEpIHsK
LSAgICAgIGlmICghc2hvdWxkU2NhdmVuZ2UoKSkgewotICAgICAgICAgIHB0aHJlYWRfbXV0ZXhf
bG9jaygmbV9zY2F2ZW5nZU11dGV4KTsKLSAgICAgICAgICBtX3NjYXZlbmdlVGhyZWFkQWN0aXZl
ID0gZmFsc2U7Ci0gICAgICAgICAgLy8gQmxvY2sgdW50aWwgdGhlcmUgYXJlIGVub3VnaCBmcmVl
IGNvbW1pdHRlZCBwYWdlcyB0byByZWxlYXNlIGJhY2sgdG8gdGhlIHN5c3RlbS4KLSAgICAgICAg
ICBwdGhyZWFkX2NvbmRfd2FpdCgmbV9zY2F2ZW5nZUNvbmRpdGlvbiwgJm1fc2NhdmVuZ2VNdXRl
eCk7Ci0gICAgICAgICAgbV9zY2F2ZW5nZVRocmVhZEFjdGl2ZSA9IHRydWU7Ci0gICAgICAgICAg
cHRocmVhZF9tdXRleF91bmxvY2soJm1fc2NhdmVuZ2VNdXRleCk7Ci0gICAgICB9Ci0gICAgICBz
bGVlcChrU2NhdmVuZ2VEZWxheUluU2Vjb25kcyk7Ci0gICAgICB7Ci0gICAgICAgICAgU3Bpbkxv
Y2tIb2xkZXIgaCgmcGFnZWhlYXBfbG9jayk7Ci0gICAgICAgICAgcGFnZWhlYXAtPnNjYXZlbmdl
KCk7Ci0gICAgICB9Ci0gIH0KKyAgICB3aGlsZSAoMSkgeworICAgICAgICBpZiAoIXNob3VsZFNj
YXZlbmdlKCkpIHsKKyAgICAgICAgICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmbV9zY2F2ZW5nZU11
dGV4KTsKKyAgICAgICAgICAgIG1fc2NhdmVuZ2VUaHJlYWRBY3RpdmUgPSBmYWxzZTsKKyAgICAg
ICAgICAgIC8vIEJsb2NrIHVudGlsIHRoZXJlIGFyZSBlbm91Z2ggZnJlZSBjb21taXR0ZWQgcGFn
ZXMgdG8gcmVsZWFzZSBiYWNrIHRvIHRoZSBzeXN0ZW0uCisgICAgICAgICAgICBwdGhyZWFkX2Nv
bmRfd2FpdCgmbV9zY2F2ZW5nZUNvbmRpdGlvbiwgJm1fc2NhdmVuZ2VNdXRleCk7CisgICAgICAg
ICAgICBtX3NjYXZlbmdlVGhyZWFkQWN0aXZlID0gdHJ1ZTsKKyAgICAgICAgICAgIHB0aHJlYWRf
bXV0ZXhfdW5sb2NrKCZtX3NjYXZlbmdlTXV0ZXgpOworICAgICAgICB9CisgICAgICAgIHNsZWVw
KGtTY2F2ZW5nZURlbGF5SW5TZWNvbmRzKTsKKyAgICAgICAgeworICAgICAgICAgICAgU3Bpbkxv
Y2tIb2xkZXIgaCgmcGFnZWhlYXBMb2NrKTsKKyAgICAgICAgICAgIHBhZ2VoZWFwLT5zY2F2ZW5n
ZSgpOworICAgICAgICB9CisgICAgfQogfQogCiAjZW5kaWYKQEAgLTI1NTgsMTkgKzI2MTQsMTkg
QEAgdm9pZCBUQ01hbGxvY19QYWdlSGVhcDo6c2NhdmVuZ2VyVGhyZWFkKAogLy8gSWYgVExTIGlz
IGF2YWlsYWJsZSwgd2UgYWxzbyBzdG9yZSBhIGNvcHkKIC8vIG9mIHRoZSBwZXItdGhyZWFkIG9i
amVjdCBpbiBhIF9fdGhyZWFkIHZhcmlhYmxlCiAvLyBzaW5jZSBfX3RocmVhZCB2YXJpYWJsZXMg
YXJlIGZhc3RlciB0byByZWFkCi0vLyB0aGFuIHB0aHJlYWRfZ2V0c3BlY2lmaWMoKS4gIFdlIHN0
aWxsIG5lZWQKKy8vIHRoYW4gcHRocmVhZF9nZXRzcGVjaWZpYygpLiBXZSBzdGlsbCBuZWVkCiAv
LyBwdGhyZWFkX3NldHNwZWNpZmljKCkgYmVjYXVzZSBfX3RocmVhZAogLy8gdmFyaWFibGVzIHBy
b3ZpZGUgbm8gd2F5IHRvIHJ1biBjbGVhbnVwCiAvLyBjb2RlIHdoZW4gYSB0aHJlYWQgaXMgZGVz
dHJveWVkLgogI2lmZGVmIEhBVkVfVExTCi1zdGF0aWMgX190aHJlYWQgVENNYWxsb2NfVGhyZWFk
Q2FjaGUgKnRocmVhZGxvY2FsX2hlYXA7CitzdGF0aWMgX190aHJlYWQgVENNYWxsb2NUaHJlYWRD
YWNoZSAqdGhyZWFkbG9jYWxIZWFwOwogI2VuZGlmCi0vLyBUaHJlYWQtc3BlY2lmaWMga2V5LiAg
SW5pdGlhbGl6YXRpb24gaGVyZSBpcyBzb21ld2hhdCB0cmlja3kKKy8vIFRocmVhZC1zcGVjaWZp
YyBrZXkuIEluaXRpYWxpemF0aW9uIGhlcmUgaXMgc29tZXdoYXQgdHJpY2t5CiAvLyBiZWNhdXNl
IHNvbWUgTGludXggc3RhcnR1cCBjb2RlIGludm9rZXMgbWFsbG9jKCkgYmVmb3JlIGl0CiAvLyBp
cyBpbiBhIGdvb2QgZW5vdWdoIHN0YXRlIHRvIGhhbmRsZSBwdGhyZWFkX2tleWNyZWF0ZSgpLgot
Ly8gVGhlcmVmb3JlLCB3ZSB1c2UgVFNEIGtleXMgb25seSBhZnRlciB0c2RfaW5pdGVkIGlzIHNl
dCB0byB0cnVlLgorLy8gVGhlcmVmb3JlLCB3ZSB1c2UgVFNEIGtleXMgb25seSBhZnRlciB0c2RJ
bml0ZWQgaXMgc2V0IHRvIHRydWUuCiAvLyBVbnRpbCB0aGVuLCB3ZSB1c2UgYSBzbG93IHBhdGgg
dG8gZ2V0IHRoZSBoZWFwIG9iamVjdC4KLXN0YXRpYyBib29sIHRzZF9pbml0ZWQgPSBmYWxzZTsK
K3N0YXRpYyBib29sIHRzZEluaXRlZCA9IGZhbHNlOwogI2lmIFVTRShQVEhSRUFEX0dFVFNQRUNJ
RklDX0RJUkVDVCkKIHN0YXRpYyBjb25zdCBwdGhyZWFkX2tleV90IGhlYXBfa2V5ID0gX19QVEtf
RlJBTUVXT1JLX0pBVkFTQ1JJUFRDT1JFX0tFWTA7CiAjZWxzZQpAQCAtMjU4MCw3ICsyNjM2LDcg
QEAgc3RhdGljIHB0aHJlYWRfa2V5X3QgaGVhcF9rZXk7CiBEV09SRCB0bHNJbmRleCA9IFRMU19P
VVRfT0ZfSU5ERVhFUzsKICNlbmRpZgogCi1zdGF0aWMgQUxXQVlTX0lOTElORSB2b2lkIHNldFRo
cmVhZEhlYXAoVENNYWxsb2NfVGhyZWFkQ2FjaGUqIGhlYXApCitzdGF0aWMgQUxXQVlTX0lOTElO
RSB2b2lkIHNldFRocmVhZEhlYXAoVENNYWxsb2NUaHJlYWRDYWNoZSogaGVhcCkKIHsKICNpZiBV
U0UoUFRIUkVBRF9HRVRTUEVDSUZJQ19ESVJFQ1QpCiAgICAgLy8gQ2FuJ3QgaGF2ZSB0d28gbGli
cmFyaWVzIGJvdGggZG9pbmcgdGhpcyBpbiB0aGUgc2FtZSBwcm9jZXNzLApAQCAtMjU5OSwxMTkg
KzI2NTUsMTI1IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0VGhyZWFkSGVhcCgKIH0K
IAogLy8gQWxsb2NhdG9yIGZvciB0aHJlYWQgaGVhcHMKLXN0YXRpYyBQYWdlSGVhcEFsbG9jYXRv
cjxUQ01hbGxvY19UaHJlYWRDYWNoZT4gdGhyZWFkaGVhcF9hbGxvY2F0b3I7CitzdGF0aWMgUGFn
ZUhlYXBBbGxvY2F0b3I8VENNYWxsb2NUaHJlYWRDYWNoZT4gdGhyZWFkaGVhcEFsbG9jYXRvcjsK
IAotLy8gTGlua2VkIGxpc3Qgb2YgaGVhcCBvYmplY3RzLiAgUHJvdGVjdGVkIGJ5IHBhZ2VoZWFw
X2xvY2suCi1zdGF0aWMgVENNYWxsb2NfVGhyZWFkQ2FjaGUqIHRocmVhZF9oZWFwcyA9IE5VTEw7
CisvLyBMaW5rZWQgbGlzdCBvZiBoZWFwIG9iamVjdHMuIFByb3RlY3RlZCBieSBwYWdlaGVhcExv
Y2suCitzdGF0aWMgVENNYWxsb2NUaHJlYWRDYWNoZSogdGhyZWFkSGVhcHMgPSAwOwogc3RhdGlj
IGludCB0aHJlYWRfaGVhcF9jb3VudCA9IDA7CiAKLS8vIE92ZXJhbGwgdGhyZWFkIGNhY2hlIHNp
emUuICBQcm90ZWN0ZWQgYnkgcGFnZWhlYXBfbG9jay4KLXN0YXRpYyBzaXplX3Qgb3ZlcmFsbF90
aHJlYWRfY2FjaGVfc2l6ZSA9IGtEZWZhdWx0T3ZlcmFsbFRocmVhZENhY2hlU2l6ZTsKKy8vIE92
ZXJhbGwgdGhyZWFkIGNhY2hlIHNpemUuIFByb3RlY3RlZCBieSBwYWdlaGVhcExvY2suCitzdGF0
aWMgc2l6ZV90IG92ZXJhbGxUaHJlYWRDYWNoZXNpemUgPSBrRGVmYXVsdE92ZXJhbGxUaHJlYWRD
YWNoZVNpemU7CiAKLS8vIEdsb2JhbCBwZXItdGhyZWFkIGNhY2hlIHNpemUuICBXcml0ZXMgYXJl
IHByb3RlY3RlZCBieQotLy8gcGFnZWhlYXBfbG9jay4gIFJlYWRzIGFyZSBkb25lIHdpdGhvdXQg
YW55IGxvY2tpbmcsIHdoaWNoIHNob3VsZCBiZQorLy8gR2xvYmFsIHBlci10aHJlYWQgY2FjaGUg
c2l6ZS4gV3JpdGVzIGFyZSBwcm90ZWN0ZWQgYnkKKy8vIHBhZ2VoZWFwTG9jay4gUmVhZHMgYXJl
IGRvbmUgd2l0aG91dCBhbnkgbG9ja2luZywgd2hpY2ggc2hvdWxkIGJlCiAvLyBmaW5lIGFzIGxv
bmcgYXMgc2l6ZV90IGNhbiBiZSB3cml0dGVuIGF0b21pY2FsbHkgYW5kIHdlIGRvbid0IHBsYWNl
CiAvLyBpbnZhcmlhbnRzIGJldHdlZW4gdGhpcyB2YXJpYWJsZSBhbmQgb3RoZXIgcGllY2VzIG9m
IHN0YXRlLgotc3RhdGljIHZvbGF0aWxlIHNpemVfdCBwZXJfdGhyZWFkX2NhY2hlX3NpemUgPSBr
TWF4VGhyZWFkQ2FjaGVTaXplOworc3RhdGljIHZvbGF0aWxlIHNpemVfdCBwZXJUaHJlYWRDYWNo
ZVNpemUgPSBrTWF4VGhyZWFkQ2FjaGVTaXplOwogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vIENlbnRyYWwg
Y2FjaGUgaW1wbGVtZW50YXRpb24KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi12b2lkIFRDTWFsbG9jX0NlbnRy
YWxfRnJlZUxpc3Q6OkluaXQoc2l6ZV90IGNsKSB7Ci0gIGxvY2tfLkluaXQoKTsKLSAgc2l6ZV9j
bGFzc18gPSBjbDsKLSAgRExMX0luaXQoJmVtcHR5Xyk7Ci0gIERMTF9Jbml0KCZub25lbXB0eV8p
OwotICBjb3VudGVyXyA9IDA7Ci0KLSAgY2FjaGVfc2l6ZV8gPSAxOwotICB1c2VkX3Nsb3RzXyA9
IDA7Ci0gIEFTU0VSVChjYWNoZV9zaXplXyA8PSBrTnVtVHJhbnNmZXJFbnRyaWVzKTsKLX0KLQot
dm9pZCBUQ01hbGxvY19DZW50cmFsX0ZyZWVMaXN0OjpSZWxlYXNlTGlzdFRvU3BhbnModm9pZCog
c3RhcnQpIHsKLSAgd2hpbGUgKHN0YXJ0KSB7Ci0gICAgdm9pZCAqbmV4dCA9IFNMTF9OZXh0KHN0
YXJ0KTsKLSAgICBSZWxlYXNlVG9TcGFucyhzdGFydCk7Ci0gICAgc3RhcnQgPSBuZXh0OwotICB9
Cit2b2lkIFRDTWFsbG9jQ2VudHJhbEZyZWVMaXN0OjpJbml0KHNpemVfdCBjbCkKK3sKKyAgICBs
b2NrLkluaXQoKTsKKyAgICBzaXplQ2xhc3MgPSBjbDsKKyAgICBETExJbml0KCZlbXB0eSk7Cisg
ICAgRExMSW5pdCgmbm9uZW1wdHkpOworICAgIGNvdW50ZXIgPSAwOworCisgICAgY2FjaGVTaXpl
ID0gMTsKKyAgICB1c2VkU2xvdHMgPSAwOworICAgIEFTU0VSVChjYWNoZVNpemUgPD0ga051bVRy
YW5zZmVyRW50cmllcyk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBUQ01hbGxvY19DZW50cmFs
X0ZyZWVMaXN0OjpSZWxlYXNlVG9TcGFucyh2b2lkKiBvYmplY3QpIHsKLSAgY29uc3QgUGFnZUlE
IHAgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ob2JqZWN0KSA+PiBrUGFnZVNoaWZ0Owot
ICBTcGFuKiBzcGFuID0gcGFnZWhlYXAtPkdldERlc2NyaXB0b3IocCk7Ci0gIEFTU0VSVChzcGFu
ICE9IE5VTEwpOwotICBBU1NFUlQoc3Bhbi0+cmVmY291bnQgPiAwKTsKLQotICAvLyBJZiBzcGFu
IGlzIGVtcHR5LCBtb3ZlIGl0IHRvIG5vbi1lbXB0eSBsaXN0Ci0gIGlmIChzcGFuLT5vYmplY3Rz
ID09IE5VTEwpIHsKLSAgICBETExfUmVtb3ZlKHNwYW4pOwotICAgIERMTF9QcmVwZW5kKCZub25l
bXB0eV8sIHNwYW4pOwotICAgIEV2ZW50KHNwYW4sICdOJywgMCk7Ci0gIH0KK3ZvaWQgVENNYWxs
b2NDZW50cmFsRnJlZUxpc3Q6OlJlbGVhc2VMaXN0VG9TcGFucyh2b2lkKiBzdGFydCkKK3sKKyAg
ICB3aGlsZSAoc3RhcnQpIHsKKyAgICAgICAgdm9pZCogbmV4dCA9IFNMTF9OZXh0KHN0YXJ0KTsK
KyAgICAgICAgUmVsZWFzZVRvU3BhbnMoc3RhcnQpOworICAgICAgICBzdGFydCA9IG5leHQ7Cisg
ICAgfQorfQogCi0gIC8vIFRoZSBmb2xsb3dpbmcgY2hlY2sgaXMgZXhwZW5zaXZlLCBzbyBpdCBp
cyBkaXNhYmxlZCBieSBkZWZhdWx0Ci0gIGlmIChmYWxzZSkgewotICAgIC8vIENoZWNrIHRoYXQg
b2JqZWN0IGRvZXMgbm90IG9jY3VyIGluIGxpc3QKLSAgICB1bnNpZ25lZCBnb3QgPSAwOwotICAg
IGZvciAodm9pZCogcCA9IHNwYW4tPm9iamVjdHM7IHAgIT0gTlVMTDsgcCA9ICooKHZvaWQqKikg
cCkpIHsKLSAgICAgIEFTU0VSVChwICE9IG9iamVjdCk7Ci0gICAgICBnb3QrKzsKK0FMV0FZU19J
TkxJTkUgdm9pZCBUQ01hbGxvY0NlbnRyYWxGcmVlTGlzdDo6UmVsZWFzZVRvU3BhbnModm9pZCog
b2JqZWN0KQoreworICAgIGNvbnN0IFBhZ2VJRCBwID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRy
X3Q+KG9iamVjdCkgPj4ga1BhZ2VTaGlmdDsKKyAgICBTcGFuKiBzcGFuID0gcGFnZWhlYXAtPkdl
dERlc2NyaXB0b3IocCk7CisgICAgQVNTRVJUKHNwYW4pOworICAgIEFTU0VSVChzcGFuLT5yZWZj
b3VudCA+IDApOworCisgICAgLy8gSWYgc3BhbiBpcyBlbXB0eSwgbW92ZSBpdCB0byBub24tZW1w
dHkgbGlzdAorICAgIGlmICghc3Bhbi0+b2JqZWN0cykgeworICAgICAgICBETExSZW1vdmUoc3Bh
bik7CisgICAgICAgIERMTFByZXBlbmQoJm5vbmVtcHR5LCBzcGFuKTsKKyAgICAgICAgRXZlbnQo
c3BhbiwgJ04nLCAwKTsKICAgICB9Ci0gICAgQVNTRVJUKGdvdCArIHNwYW4tPnJlZmNvdW50ID09
Ci0gICAgICAgICAgIChzcGFuLT5sZW5ndGg8PGtQYWdlU2hpZnQpL0J5dGVTaXplRm9yQ2xhc3Mo
c3Bhbi0+c2l6ZWNsYXNzKSk7Ci0gIH0KIAotICBjb3VudGVyXysrOwotICBzcGFuLT5yZWZjb3Vu
dC0tOwotICBpZiAoc3Bhbi0+cmVmY291bnQgPT0gMCkgewotICAgIEV2ZW50KHNwYW4sICcjJywg
MCk7Ci0gICAgY291bnRlcl8gLT0gKHNwYW4tPmxlbmd0aDw8a1BhZ2VTaGlmdCkgLyBCeXRlU2l6
ZUZvckNsYXNzKHNwYW4tPnNpemVjbGFzcyk7Ci0gICAgRExMX1JlbW92ZShzcGFuKTsKKyAgICAv
LyBUaGUgZm9sbG93aW5nIGNoZWNrIGlzIGV4cGVuc2l2ZSwgc28gaXQgaXMgZGlzYWJsZWQgYnkg
ZGVmYXVsdAorICAgIGlmIChmYWxzZSkgeworICAgICAgICAvLyBDaGVjayB0aGF0IG9iamVjdCBk
b2VzIG5vdCBvY2N1ciBpbiBsaXN0CisgICAgICAgIHVuc2lnbmVkIGdvdCA9IDA7CisgICAgICAg
IGZvciAodm9pZCogcCA9IHNwYW4tPm9iamVjdHM7IHA7IHAgPSAqKCh2b2lkKiopIHApKSB7Cisg
ICAgICAgICAgICBBU1NFUlQocCAhPSBvYmplY3QpOworICAgICAgICAgICAgZ290Kys7CisgICAg
ICAgIH0KKyAgICAgICAgQVNTRVJUKGdvdCArIHNwYW4tPnJlZmNvdW50ID09CisgICAgICAgICAg
ICAgICAgKHNwYW4tPmxlbmd0aCA8PCBrUGFnZVNoaWZ0KSAvIEJ5dGVTaXplRm9yQ2xhc3Moc3Bh
bi0+c2l6ZUNsYXNzKSk7CisgICAgfQogCi0gICAgLy8gUmVsZWFzZSBjZW50cmFsIGxpc3QgbG9j
ayB3aGlsZSBvcGVyYXRpbmcgb24gcGFnZWhlYXAKLSAgICBsb2NrXy5VbmxvY2soKTsKLSAgICB7
Ci0gICAgICBTcGluTG9ja0hvbGRlciBoKCZwYWdlaGVhcF9sb2NrKTsKLSAgICAgIHBhZ2VoZWFw
LT5EZWxldGUoc3Bhbik7CisgICAgY291bnRlcisrOworICAgIHNwYW4tPnJlZmNvdW50LS07Cisg
ICAgaWYgKCFzcGFuLT5yZWZjb3VudCkgeworICAgICAgICBFdmVudChzcGFuLCAnIycsIDApOwor
ICAgICAgICBjb3VudGVyIC09IChzcGFuLT5sZW5ndGggPDwga1BhZ2VTaGlmdCkgLyBCeXRlU2l6
ZUZvckNsYXNzKHNwYW4tPnNpemVDbGFzcyk7CisgICAgICAgIERMTFJlbW92ZShzcGFuKTsKKwor
ICAgICAgICAvLyBSZWxlYXNlIGNlbnRyYWwgbGlzdCBsb2NrIHdoaWxlIG9wZXJhdGluZyBvbiBw
YWdlaGVhcAorICAgICAgICBsb2NrLlVubG9jaygpOworICAgICAgICB7CisgICAgICAgICAgICBT
cGluTG9ja0hvbGRlciBoKCZwYWdlaGVhcExvY2spOworICAgICAgICAgICAgcGFnZWhlYXAtPkRl
bGV0ZShzcGFuKTsKKyAgICAgICAgfQorICAgICAgICBsb2NrLkxvY2soKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICAqKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPihvYmplY3QpKSA9IHNwYW4tPm9i
amVjdHM7CisgICAgICAgIHNwYW4tPm9iamVjdHMgPSBvYmplY3Q7CiAgICAgfQotICAgIGxvY2tf
LkxvY2soKTsKLSAgfSBlbHNlIHsKLSAgICAqKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPihvYmpl
Y3QpKSA9IHNwYW4tPm9iamVjdHM7Ci0gICAgc3Bhbi0+b2JqZWN0cyA9IG9iamVjdDsKLSAgfQog
fQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdDo6RXZpY3RS
YW5kb21TaXplQ2xhc3MoCi0gICAgc2l6ZV90IGxvY2tlZF9zaXplX2NsYXNzLCBib29sIGZvcmNl
KSB7Ci0gIHN0YXRpYyBpbnQgcmFjZV9jb3VudGVyID0gMDsKLSAgaW50IHQgPSByYWNlX2NvdW50
ZXIrKzsgIC8vIFVwZGF0ZWQgd2l0aG91dCBhIGxvY2ssIGJ1dCB3aG8gY2FyZXMuCi0gIGlmICh0
ID49IHN0YXRpY19jYXN0PGludD4oa051bUNsYXNzZXMpKSB7Ci0gICAgd2hpbGUgKHQgPj0gc3Rh
dGljX2Nhc3Q8aW50PihrTnVtQ2xhc3NlcykpIHsKLSAgICAgIHQgLT0ga051bUNsYXNzZXM7CitB
TFdBWVNfSU5MSU5FIGJvb2wgVENNYWxsb2NDZW50cmFsRnJlZUxpc3Q6OkV2aWN0UmFuZG9tU2l6
ZUNsYXNzKHNpemVfdCBsb2NrZWRTaXplQ2xhc3MsIGJvb2wgZm9yY2UpCit7CisgICAgc3RhdGlj
IGludCByYWNlQ291bnRlciA9IDA7CisgICAgaW50IHQgPSByYWNlQ291bnRlcisrOyAvLyBVcGRh
dGVkIHdpdGhvdXQgYSBsb2NrLCBidXQgd2hvIGNhcmVzLgorICAgIGlmICh0ID49IHN0YXRpY19j
YXN0PGludD4oa051bUNsYXNzZXMpKSB7CisgICAgICAgIHdoaWxlICh0ID49IHN0YXRpY19jYXN0
PGludD4oa051bUNsYXNzZXMpKQorICAgICAgICAgICAgdCAtPSBrTnVtQ2xhc3NlczsKKyAgICAg
ICAgcmFjZUNvdW50ZXIgPSB0OworICAgIH0KKyAgICBBU1NFUlQodCA+PSAwKTsKKyAgICBBU1NF
UlQodCA8IHN0YXRpY19jYXN0PGludD4oa051bUNsYXNzZXMpKTsKKyAgICBpZiAodCA9PSBzdGF0
aWNfY2FzdDxpbnQ+KGxvY2tlZFNpemVDbGFzcykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICByZXR1cm4gY2VudHJhbENhY2hlW3RdLlNocmlua0NhY2hlKHN0YXRpY19jYXN0PGludD4obG9j
a2VkU2l6ZUNsYXNzKSwgZm9yY2UpOworfQorCitib29sIFRDTWFsbG9jQ2VudHJhbEZyZWVMaXN0
OjpNYWtlQ2FjaGVTcGFjZSgpCit7CisgICAgLy8gSXMgdGhlcmUgcm9vbSBpbiB0aGUgY2FjaGU/
CisgICAgaWYgKHVzZWRTbG90cyA8IGNhY2hlU2l6ZSkKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgLy8gQ2hlY2sgaWYgd2UgY2FuIGV4cGFuZCB0aGlzIGNhY2hlPworICAgIGlmIChjYWNoZVNp
emUgPT0ga051bVRyYW5zZmVyRW50cmllcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIC8v
IE9rLCB3ZSdsbCB0cnkgdG8gZ3JhYiBhbiBlbnRyeSBmcm9tIHNvbWUgb3RoZXIgc2l6ZSBjbGFz
cy4KKyAgICBpZiAoRXZpY3RSYW5kb21TaXplQ2xhc3Moc2l6ZUNsYXNzLCBmYWxzZSkKKyAgICAg
ICAgfHwgRXZpY3RSYW5kb21TaXplQ2xhc3Moc2l6ZUNsYXNzLCB0cnVlKSkgeworICAgICAgICAv
LyBTdWNjZWVkZWQgaW4gZXZpY3RpbmcsIHdlJ3JlIGdvaW5nIHRvIG1ha2Ugb3VyIGNhY2hlIGxh
cmdlci4KKyAgICAgICAgY2FjaGVTaXplKys7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
LSAgICByYWNlX2NvdW50ZXIgPSB0OwotICB9Ci0gIEFTU0VSVCh0ID49IDApOwotICBBU1NFUlQo
dCA8IHN0YXRpY19jYXN0PGludD4oa051bUNsYXNzZXMpKTsKLSAgaWYgKHQgPT0gc3RhdGljX2Nh
c3Q8aW50Pihsb2NrZWRfc2l6ZV9jbGFzcykpIHJldHVybiBmYWxzZTsKLSAgcmV0dXJuIGNlbnRy
YWxfY2FjaGVbdF0uU2hyaW5rQ2FjaGUoc3RhdGljX2Nhc3Q8aW50Pihsb2NrZWRfc2l6ZV9jbGFz
cyksIGZvcmNlKTsKLX0KLQotYm9vbCBUQ01hbGxvY19DZW50cmFsX0ZyZWVMaXN0OjpNYWtlQ2Fj
aGVTcGFjZSgpIHsKLSAgLy8gSXMgdGhlcmUgcm9vbSBpbiB0aGUgY2FjaGU/Ci0gIGlmICh1c2Vk
X3Nsb3RzXyA8IGNhY2hlX3NpemVfKSByZXR1cm4gdHJ1ZTsKLSAgLy8gQ2hlY2sgaWYgd2UgY2Fu
IGV4cGFuZCB0aGlzIGNhY2hlPwotICBpZiAoY2FjaGVfc2l6ZV8gPT0ga051bVRyYW5zZmVyRW50
cmllcykgcmV0dXJuIGZhbHNlOwotICAvLyBPaywgd2UnbGwgdHJ5IHRvIGdyYWIgYW4gZW50cnkg
ZnJvbSBzb21lIG90aGVyIHNpemUgY2xhc3MuCi0gIGlmIChFdmljdFJhbmRvbVNpemVDbGFzcyhz
aXplX2NsYXNzXywgZmFsc2UpIHx8Ci0gICAgICBFdmljdFJhbmRvbVNpemVDbGFzcyhzaXplX2Ns
YXNzXywgdHJ1ZSkpIHsKLSAgICAvLyBTdWNjZWVkZWQgaW4gZXZpY3RpbmcsIHdlJ3JlIGdvaW5n
IHRvIG1ha2Ugb3VyIGNhY2hlIGxhcmdlci4KLSAgICBjYWNoZV9zaXplXysrOwotICAgIHJldHVy
biB0cnVlOwotICB9Ci0gIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIApA
QCAtMjcyNiw2NDkgKzI3ODgsNjg2IEBAIGNsYXNzIExvY2tJbnZlcnRlciB7CiB9OwogfQogCi1i
b29sIFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3Q6OlNocmlua0NhY2hlKGludCBsb2NrZWRfc2l6
ZV9jbGFzcywgYm9vbCBmb3JjZSkgewotICAvLyBTdGFydCB3aXRoIGEgcXVpY2sgY2hlY2sgd2l0
aG91dCB0YWtpbmcgYSBsb2NrLgotICBpZiAoY2FjaGVfc2l6ZV8gPT0gMCkgcmV0dXJuIGZhbHNl
OwotICAvLyBXZSBkb24ndCBldmljdCBmcm9tIGEgZnVsbCBjYWNoZSB1bmxlc3Mgd2UgYXJlICdm
b3JjaW5nJy4KLSAgaWYgKGZvcmNlID09IGZhbHNlICYmIHVzZWRfc2xvdHNfID09IGNhY2hlX3Np
emVfKSByZXR1cm4gZmFsc2U7Ci0KLSAgLy8gR3JhYiBsb2NrLCBidXQgZmlyc3QgcmVsZWFzZSB0
aGUgb3RoZXIgbG9jayBoZWxkIGJ5IHRoaXMgdGhyZWFkLiAgV2UgdXNlCi0gIC8vIHRoZSBsb2Nr
IGludmVydGVyIHRvIGVuc3VyZSB0aGF0IHdlIG5ldmVyIGhvbGQgdHdvIHNpemUgY2xhc3MgbG9j
a3MKLSAgLy8gY29uY3VycmVudGx5LiAgVGhhdCBjYW4gY3JlYXRlIGEgZGVhZGxvY2sgYmVjYXVz
ZSB0aGVyZSBpcyBubyB3ZWxsCi0gIC8vIGRlZmluZWQgbmVzdGluZyBvcmRlci4KLSAgTG9ja0lu
dmVydGVyIGxpKCZjZW50cmFsX2NhY2hlW2xvY2tlZF9zaXplX2NsYXNzXS5sb2NrXywgJmxvY2tf
KTsKLSAgQVNTRVJUKHVzZWRfc2xvdHNfIDw9IGNhY2hlX3NpemVfKTsKLSAgQVNTRVJUKDAgPD0g
Y2FjaGVfc2l6ZV8pOwotICBpZiAoY2FjaGVfc2l6ZV8gPT0gMCkgcmV0dXJuIGZhbHNlOwotICBp
ZiAodXNlZF9zbG90c18gPT0gY2FjaGVfc2l6ZV8pIHsKLSAgICBpZiAoZm9yY2UgPT0gZmFsc2Up
IHJldHVybiBmYWxzZTsKLSAgICAvLyBSZWxlYXNlTGlzdFRvU3BhbnMgcmVsZWFzZXMgdGhlIGxv
Y2ssIHNvIHdlIGhhdmUgdG8gbWFrZSBhbGwgdGhlCi0gICAgLy8gdXBkYXRlcyB0byB0aGUgY2Vu
dHJhbCBsaXN0IGJlZm9yZSBjYWxsaW5nIGl0LgotICAgIGNhY2hlX3NpemVfLS07Ci0gICAgdXNl
ZF9zbG90c18tLTsKLSAgICBSZWxlYXNlTGlzdFRvU3BhbnModGNfc2xvdHNfW3VzZWRfc2xvdHNf
XS5oZWFkKTsKK2Jvb2wgVENNYWxsb2NDZW50cmFsRnJlZUxpc3Q6OlNocmlua0NhY2hlKGludCBs
b2NrZWRTaXplQ2xhc3MsIGJvb2wgZm9yY2UpCit7CisgICAgLy8gU3RhcnQgd2l0aCBhIHF1aWNr
IGNoZWNrIHdpdGhvdXQgdGFraW5nIGEgbG9jay4KKyAgICBpZiAoIWNhY2hlU2l6ZSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIC8vIFdlIGRvbid0IGV2aWN0IGZyb20gYSBmdWxsIGNhY2hl
IHVubGVzcyB3ZSBhcmUgJ2ZvcmNpbmcnLgorICAgIGlmICghZm9yY2UgJiYgdXNlZFNsb3RzID09
IGNhY2hlU2l6ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gR3JhYiBsb2NrLCBi
dXQgZmlyc3QgcmVsZWFzZSB0aGUgb3RoZXIgbG9jayBoZWxkIGJ5IHRoaXMgdGhyZWFkLiBXZSB1
c2UKKyAgICAvLyB0aGUgbG9jayBpbnZlcnRlciB0byBlbnN1cmUgdGhhdCB3ZSBuZXZlciBob2xk
IHR3byBzaXplIGNsYXNzIGxvY2tzCisgICAgLy8gY29uY3VycmVudGx5LiBUaGF0IGNhbiBjcmVh
dGUgYSBkZWFkbG9jayBiZWNhdXNlIHRoZXJlIGlzIG5vIHdlbGwKKyAgICAvLyBkZWZpbmVkIG5l
c3Rpbmcgb3JkZXIuCisgICAgTG9ja0ludmVydGVyIGxpKCZjZW50cmFsQ2FjaGVbbG9ja2VkU2l6
ZUNsYXNzXS5sb2NrLCAmbG9jayk7CisgICAgQVNTRVJUKHVzZWRTbG90cyA8PSBjYWNoZVNpemUp
OworICAgIEFTU0VSVCgwIDw9IGNhY2hlU2l6ZSk7CisgICAgaWYgKCFjYWNoZVNpemUpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAodXNlZFNsb3RzID09IGNhY2hlU2l6ZSkgeworICAg
ICAgICBpZiAoIWZvcmNlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAvLyBS
ZWxlYXNlTGlzdFRvU3BhbnMgcmVsZWFzZXMgdGhlIGxvY2ssIHNvIHdlIGhhdmUgdG8gbWFrZSBh
bGwgdGhlCisgICAgICAgIC8vIHVwZGF0ZXMgdG8gdGhlIGNlbnRyYWwgbGlzdCBiZWZvcmUgY2Fs
bGluZyBpdC4KKyAgICAgICAgY2FjaGVTaXplLS07CisgICAgICAgIHVzZWRTbG90cy0tOworICAg
ICAgICBSZWxlYXNlTGlzdFRvU3BhbnModGNTbG90c1t1c2VkU2xvdHNdLmhlYWQpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgY2FjaGVTaXplLS07CiAgICAgcmV0dXJuIHRydWU7
Ci0gIH0KLSAgY2FjaGVfc2l6ZV8tLTsKLSAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgVENNYWxs
b2NfQ2VudHJhbF9GcmVlTGlzdDo6SW5zZXJ0UmFuZ2Uodm9pZCAqc3RhcnQsIHZvaWQgKmVuZCwg
aW50IE4pIHsKLSAgU3BpbkxvY2tIb2xkZXIgaCgmbG9ja18pOwotICBpZiAoTiA9PSBudW1fb2Jq
ZWN0c190b19tb3ZlW3NpemVfY2xhc3NfXSAmJgotICAgIE1ha2VDYWNoZVNwYWNlKCkpIHsKLSAg
ICBpbnQgc2xvdCA9IHVzZWRfc2xvdHNfKys7Ci0gICAgQVNTRVJUKHNsb3QgPj0wKTsKLSAgICBB
U1NFUlQoc2xvdCA8IGtOdW1UcmFuc2ZlckVudHJpZXMpOwotICAgIFRDRW50cnkgKmVudHJ5ID0g
JnRjX3Nsb3RzX1tzbG90XTsKLSAgICBlbnRyeS0+aGVhZCA9IHN0YXJ0OwotICAgIGVudHJ5LT50
YWlsID0gZW5kOwotICAgIHJldHVybjsKLSAgfQotICBSZWxlYXNlTGlzdFRvU3BhbnMoc3RhcnQp
Owordm9pZCBUQ01hbGxvY0NlbnRyYWxGcmVlTGlzdDo6SW5zZXJ0UmFuZ2Uodm9pZCAqc3RhcnQs
IHZvaWQgKmVuZCwgaW50IE4pCit7CisgICAgU3BpbkxvY2tIb2xkZXIgaCgmbG9jayk7CisgICAg
aWYgKE4gPT0gbnVtT2JqZWN0c1RvTW92ZVtzaXplQ2xhc3NdCisgICAgICAgICYmIE1ha2VDYWNo
ZVNwYWNlKCkpIHsKKyAgICAgICAgaW50IHNsb3QgPSB1c2VkU2xvdHMrKzsKKyAgICAgICAgQVNT
RVJUKHNsb3QgPj0wKTsKKyAgICAgICAgQVNTRVJUKHNsb3QgPCBrTnVtVHJhbnNmZXJFbnRyaWVz
KTsKKyAgICAgICAgVENFbnRyeSogZW50cnkgPSAmdGNTbG90c1tzbG90XTsKKyAgICAgICAgZW50
cnktPmhlYWQgPSBzdGFydDsKKyAgICAgICAgZW50cnktPnRhaWwgPSBlbmQ7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgUmVsZWFzZUxpc3RUb1NwYW5zKHN0YXJ0KTsKIH0KIAotdm9pZCBU
Q01hbGxvY19DZW50cmFsX0ZyZWVMaXN0OjpSZW1vdmVSYW5nZSh2b2lkICoqc3RhcnQsIHZvaWQg
KiplbmQsIGludCAqTikgewotICBpbnQgbnVtID0gKk47Ci0gIEFTU0VSVChudW0gPiAwKTsKLQot
ICBTcGluTG9ja0hvbGRlciBoKCZsb2NrXyk7Ci0gIGlmIChudW0gPT0gbnVtX29iamVjdHNfdG9f
bW92ZVtzaXplX2NsYXNzX10gJiYgdXNlZF9zbG90c18gPiAwKSB7Ci0gICAgaW50IHNsb3QgPSAt
LXVzZWRfc2xvdHNfOwotICAgIEFTU0VSVChzbG90ID49IDApOwotICAgIFRDRW50cnkgKmVudHJ5
ID0gJnRjX3Nsb3RzX1tzbG90XTsKLSAgICAqc3RhcnQgPSBlbnRyeS0+aGVhZDsKLSAgICAqZW5k
ID0gZW50cnktPnRhaWw7Ci0gICAgcmV0dXJuOwotICB9Cit2b2lkIFRDTWFsbG9jQ2VudHJhbEZy
ZWVMaXN0OjpSZW1vdmVSYW5nZSh2b2lkICoqc3RhcnQsIHZvaWQgKiplbmQsIGludCAqTikKK3sK
KyAgICBpbnQgbnVtID0gKk47CisgICAgQVNTRVJUKG51bSA+IDApOwogCi0gIC8vIFRPRE86IFBy
ZWZldGNoIG11bHRpcGxlIFRDRW50cmllcz8KLSAgdm9pZCAqdGFpbCA9IEZldGNoRnJvbVNwYW5z
U2FmZSgpOwotICBpZiAoIXRhaWwpIHsKLSAgICAvLyBXZSBhcmUgY29tcGxldGVseSBvdXQgb2Yg
bWVtb3J5LgotICAgICpzdGFydCA9ICplbmQgPSBOVUxMOwotICAgICpOID0gMDsKLSAgICByZXR1
cm47Ci0gIH0KKyAgICBTcGluTG9ja0hvbGRlciBoKCZsb2NrKTsKKyAgICBpZiAobnVtID09IG51
bU9iamVjdHNUb01vdmVbc2l6ZUNsYXNzXSAmJiB1c2VkU2xvdHMgPiAwKSB7CisgICAgICAgIGlu
dCBzbG90ID0gLS11c2VkU2xvdHM7CisgICAgICAgIEFTU0VSVChzbG90ID49IDApOworICAgICAg
ICBUQ0VudHJ5KiBlbnRyeSA9ICZ0Y1Nsb3RzW3Nsb3RdOworICAgICAgICAqc3RhcnQgPSBlbnRy
eS0+aGVhZDsKKyAgICAgICAgKmVuZCA9IGVudHJ5LT50YWlsOworICAgICAgICByZXR1cm47Cisg
ICAgfQogCi0gIFNMTF9TZXROZXh0KHRhaWwsIE5VTEwpOwotICB2b2lkICpoZWFkID0gdGFpbDsK
LSAgaW50IGNvdW50ID0gMTsKLSAgd2hpbGUgKGNvdW50IDwgbnVtKSB7Ci0gICAgdm9pZCAqdCA9
IEZldGNoRnJvbVNwYW5zKCk7Ci0gICAgaWYgKCF0KSBicmVhazsKLSAgICBTTExfUHVzaCgmaGVh
ZCwgdCk7Ci0gICAgY291bnQrKzsKLSAgfQotICAqc3RhcnQgPSBoZWFkOwotICAqZW5kID0gdGFp
bDsKLSAgKk4gPSBjb3VudDsKLX0KKyAgICAvLyBUT0RPOiBQcmVmZXRjaCBtdWx0aXBsZSBUQ0Vu
dHJpZXM/CisgICAgdm9pZCogdGFpbCA9IEZldGNoRnJvbVNwYW5zU2FmZSgpOworICAgIGlmICgh
dGFpbCkgeworICAgICAgICAvLyBXZSBhcmUgY29tcGxldGVseSBvdXQgb2YgbWVtb3J5LgorICAg
ICAgICAqc3RhcnQgPSAqZW5kID0gMDsKKyAgICAgICAgKk4gPSAwOworICAgICAgICByZXR1cm47
CisgICAgfQogCisgICAgU0xMU2V0TmV4dCh0YWlsLCAwKTsKKyAgICB2b2lkKiBoZWFkID0gdGFp
bDsKKyAgICBpbnQgY291bnQgPSAxOworICAgIHdoaWxlIChjb3VudCA8IG51bSkgeworICAgICAg
ICB2b2lkKiB0ID0gRmV0Y2hGcm9tU3BhbnMoKTsKKyAgICAgICAgaWYgKCF0KQorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIFNMTFB1c2goJmhlYWQsIHQpOworICAgICAgICBjb3VudCsrOwor
ICAgIH0KKyAgICAqc3RhcnQgPSBoZWFkOworICAgICplbmQgPSB0YWlsOworICAgICpOID0gY291
bnQ7Cit9CiAKLXZvaWQqIFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3Q6OkZldGNoRnJvbVNwYW5z
U2FmZSgpIHsKLSAgdm9pZCAqdCA9IEZldGNoRnJvbVNwYW5zKCk7Ci0gIGlmICghdCkgewotICAg
IFBvcHVsYXRlKCk7Ci0gICAgdCA9IEZldGNoRnJvbVNwYW5zKCk7Ci0gIH0KLSAgcmV0dXJuIHQ7
Cit2b2lkKiBUQ01hbGxvY0NlbnRyYWxGcmVlTGlzdDo6RmV0Y2hGcm9tU3BhbnNTYWZlKCkKK3sK
KyAgICB2b2lkKiB0ID0gRmV0Y2hGcm9tU3BhbnMoKTsKKyAgICBpZiAoIXQpIHsKKyAgICAgICAg
UG9wdWxhdGUoKTsKKyAgICAgICAgdCA9IEZldGNoRnJvbVNwYW5zKCk7CisgICAgfQorICAgIHJl
dHVybiB0OwogfQogCi12b2lkKiBUQ01hbGxvY19DZW50cmFsX0ZyZWVMaXN0OjpGZXRjaEZyb21T
cGFucygpIHsKLSAgaWYgKERMTF9Jc0VtcHR5KCZub25lbXB0eV8pKSByZXR1cm4gTlVMTDsKLSAg
U3Bhbiogc3BhbiA9IG5vbmVtcHR5Xy5uZXh0Owordm9pZCogVENNYWxsb2NDZW50cmFsRnJlZUxp
c3Q6OkZldGNoRnJvbVNwYW5zKCkKK3sKKyAgICBpZiAoRExMX0lzRW1wdHkoJm5vbmVtcHR5KSkK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgU3Bhbiogc3BhbiA9IG5vbmVtcHR5Lm5leHQ7CiAKLSAg
QVNTRVJUKHNwYW4tPm9iamVjdHMgIT0gTlVMTCk7Ci0gIEFTU0VSVF9TUEFOX0NPTU1JVFRFRChz
cGFuKTsKLSAgc3Bhbi0+cmVmY291bnQrKzsKLSAgdm9pZCogcmVzdWx0ID0gc3Bhbi0+b2JqZWN0
czsKLSAgc3Bhbi0+b2JqZWN0cyA9ICoocmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KHJlc3VsdCkp
OwotICBpZiAoc3Bhbi0+b2JqZWN0cyA9PSBOVUxMKSB7Ci0gICAgLy8gTW92ZSB0byBlbXB0eSBs
aXN0Ci0gICAgRExMX1JlbW92ZShzcGFuKTsKLSAgICBETExfUHJlcGVuZCgmZW1wdHlfLCBzcGFu
KTsKLSAgICBFdmVudChzcGFuLCAnRScsIDApOwotICB9Ci0gIGNvdW50ZXJfLS07Ci0gIHJldHVy
biByZXN1bHQ7CisgICAgQVNTRVJUKHNwYW4tPm9iamVjdHMpOworICAgIEFTU0VSVF9TUEFOX0NP
TU1JVFRFRChzcGFuKTsKKyAgICBzcGFuLT5yZWZjb3VudCsrOworICAgIHZvaWQqIHJlc3VsdCA9
IHNwYW4tPm9iamVjdHM7CisgICAgc3Bhbi0+b2JqZWN0cyA9ICoocmVpbnRlcnByZXRfY2FzdDx2
b2lkKio+KHJlc3VsdCkpOworICAgIGlmICghc3Bhbi0+b2JqZWN0cykgeworICAgICAgICAvLyBN
b3ZlIHRvIGVtcHR5IGxpc3QKKyAgICAgICAgRExMUmVtb3ZlKHNwYW4pOworICAgICAgICBETExQ
cmVwZW5kKCZlbXB0eSwgc3Bhbik7CisgICAgICAgIEV2ZW50KHNwYW4sICdFJywgMCk7CisgICAg
fQorICAgIGNvdW50ZXItLTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAvLyBGZXRjaCBtZW1v
cnkgZnJvbSB0aGUgc3lzdGVtIGFuZCBhZGQgdG8gdGhlIGNlbnRyYWwgY2FjaGUgZnJlZWxpc3Qu
Ci1BTFdBWVNfSU5MSU5FIHZvaWQgVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdDo6UG9wdWxhdGUo
KSB7Ci0gIC8vIFJlbGVhc2UgY2VudHJhbCBsaXN0IGxvY2sgd2hpbGUgb3BlcmF0aW5nIG9uIHBh
Z2VoZWFwCi0gIGxvY2tfLlVubG9jaygpOwotICBjb25zdCBzaXplX3QgbnBhZ2VzID0gY2xhc3Nf
dG9fcGFnZXNbc2l6ZV9jbGFzc19dOwotCi0gIFNwYW4qIHNwYW47Ci0gIHsKLSAgICBTcGluTG9j
a0hvbGRlciBoKCZwYWdlaGVhcF9sb2NrKTsKLSAgICBzcGFuID0gcGFnZWhlYXAtPk5ldyhucGFn
ZXMpOwotICAgIGlmIChzcGFuKSBwYWdlaGVhcC0+UmVnaXN0ZXJTaXplQ2xhc3Moc3Bhbiwgc2l6
ZV9jbGFzc18pOwotICB9Ci0gIGlmIChzcGFuID09IE5VTEwpIHsKK0FMV0FZU19JTkxJTkUgdm9p
ZCBUQ01hbGxvY0NlbnRyYWxGcmVlTGlzdDo6UG9wdWxhdGUoKQoreworICAgIC8vIFJlbGVhc2Ug
Y2VudHJhbCBsaXN0IGxvY2sgd2hpbGUgb3BlcmF0aW5nIG9uIHBhZ2VoZWFwCisgICAgbG9jay5V
bmxvY2soKTsKKyAgICBjb25zdCBzaXplX3QgbnBhZ2VzID0gY2xhc3NfdG9fcGFnZXNbc2l6ZUNs
YXNzXTsKKworICAgIFNwYW4qIHNwYW47CisgICAgeworICAgICAgICBTcGluTG9ja0hvbGRlciBo
KCZwYWdlaGVhcExvY2spOworICAgICAgICBzcGFuID0gcGFnZWhlYXAtPk5ldyhucGFnZXMpOwor
ICAgICAgICBpZiAoc3BhbikKKyAgICAgICAgICAgIHBhZ2VoZWFwLT5SZWdpc3RlclNpemVDbGFz
cyhzcGFuLCBzaXplQ2xhc3MpOworICAgIH0KKyAgICBpZiAoIXNwYW4pIHsKICNpZiBIQVZFKEVS
Uk5PX0gpCi0gICAgTUVTU0FHRSgiYWxsb2NhdGlvbiBmYWlsZWQ6ICVkXG4iLCBlcnJubyk7Cisg
ICAgICAgIE1FU1NBR0UoImFsbG9jYXRpb24gZmFpbGVkOiAlZFxuIiwgZXJybm8pOwogI2VsaWYg
T1MoV0lORE9XUykKLSAgICBNRVNTQUdFKCJhbGxvY2F0aW9uIGZhaWxlZDogJWRcbiIsIDo6R2V0
TGFzdEVycm9yKCkpOworICAgICAgICBNRVNTQUdFKCJhbGxvY2F0aW9uIGZhaWxlZDogJWRcbiIs
IDo6R2V0TGFzdEVycm9yKCkpOwogI2Vsc2UKLSAgICBNRVNTQUdFKCJhbGxvY2F0aW9uIGZhaWxl
ZFxuIik7CisgICAgICAgIE1FU1NBR0UoImFsbG9jYXRpb24gZmFpbGVkXG4iKTsKICNlbmRpZgot
ICAgIGxvY2tfLkxvY2soKTsKLSAgICByZXR1cm47Ci0gIH0KLSAgQVNTRVJUX1NQQU5fQ09NTUlU
VEVEKHNwYW4pOwotICBBU1NFUlQoc3Bhbi0+bGVuZ3RoID09IG5wYWdlcyk7Ci0gIC8vIENhY2hl
IHNpemVjbGFzcyBpbmZvIGVhZ2VybHkuICBMb2NraW5nIGlzIG5vdCBuZWNlc3NhcnkuCi0gIC8v
IChJbnN0ZWFkIG9mIGJlaW5nIGVhZ2VyLCB3ZSBjb3VsZCBqdXN0IHJlcGxhY2UgYW55IHN0YWxl
IGluZm8KLSAgLy8gYWJvdXQgdGhpcyBzcGFuLCBidXQgdGhhdCBzZWVtcyB0byBiZSBubyBiZXR0
ZXIgaW4gcHJhY3RpY2UuKQotICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5wYWdlczsgaSsrKSB7
Ci0gICAgcGFnZWhlYXAtPkNhY2hlU2l6ZUNsYXNzKHNwYW4tPnN0YXJ0ICsgaSwgc2l6ZV9jbGFz
c18pOwotICB9Ci0KLSAgLy8gU3BsaXQgdGhlIGJsb2NrIGludG8gcGllY2VzIGFuZCBhZGQgdG8g
dGhlIGZyZWUtbGlzdAotICAvLyBUT0RPOiBjb2xvcmluZyBvZiBvYmplY3RzIHRvIGF2b2lkIGNh
Y2hlIGNvbmZsaWN0cz8KLSAgdm9pZCoqIHRhaWwgPSAmc3Bhbi0+b2JqZWN0czsKLSAgY2hhciog
cHRyID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc3Bhbi0+c3RhcnQgPDwga1BhZ2VTaGlmdCk7
Ci0gIGNoYXIqIGxpbWl0ID0gcHRyICsgKG5wYWdlcyA8PCBrUGFnZVNoaWZ0KTsKLSAgY29uc3Qg
c2l6ZV90IHNpemUgPSBCeXRlU2l6ZUZvckNsYXNzKHNpemVfY2xhc3NfKTsKLSAgaW50IG51bSA9
IDA7Ci0gIGNoYXIqIG5wdHI7Ci0gIHdoaWxlICgobnB0ciA9IHB0ciArIHNpemUpIDw9IGxpbWl0
KSB7Ci0gICAgKnRhaWwgPSBwdHI7Ci0gICAgdGFpbCA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPHZv
aWQqKj4ocHRyKTsKLSAgICBwdHIgPSBucHRyOwotICAgIG51bSsrOwotICB9Ci0gIEFTU0VSVChw
dHIgPD0gbGltaXQpOwotICAqdGFpbCA9IE5VTEw7Ci0gIHNwYW4tPnJlZmNvdW50ID0gMDsgLy8g
Tm8gc3ViLW9iamVjdCBpbiB1c2UgeWV0Ci0KLSAgLy8gQWRkIHNwYW4gdG8gbGlzdCBvZiBub24t
ZW1wdHkgc3BhbnMKLSAgbG9ja18uTG9jaygpOwotICBETExfUHJlcGVuZCgmbm9uZW1wdHlfLCBz
cGFuKTsKLSAgY291bnRlcl8gKz0gbnVtOworICAgICAgICBsb2NrLkxvY2soKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBBU1NFUlRfU1BBTl9DT01NSVRURUQoc3Bhbik7CisgICAgQVNT
RVJUKHNwYW4tPmxlbmd0aCA9PSBucGFnZXMpOworICAgIC8vIENhY2hlIHNpemVDbGFzcyBpbmZv
IGVhZ2VybHkuIExvY2tpbmcgaXMgbm90IG5lY2Vzc2FyeS4KKyAgICAvLyAoSW5zdGVhZCBvZiBi
ZWluZyBlYWdlciwgd2UgY291bGQganVzdCByZXBsYWNlIGFueSBzdGFsZSBpbmZvCisgICAgLy8g
YWJvdXQgdGhpcyBzcGFuLCBidXQgdGhhdCBzZWVtcyB0byBiZSBubyBiZXR0ZXIgaW4gcHJhY3Rp
Y2UuKQorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnBhZ2VzOyBpKyspCisgICAgICAgIHBh
Z2VoZWFwLT5DYWNoZVNpemVDbGFzcyhzcGFuLT5zdGFydCArIGksIHNpemVDbGFzcyk7CisKKyAg
ICAvLyBTcGxpdCB0aGUgYmxvY2sgaW50byBwaWVjZXMgYW5kIGFkZCB0byB0aGUgZnJlZS1saXN0
CisgICAgLy8gVE9ETzogY29sb3Jpbmcgb2Ygb2JqZWN0cyB0byBhdm9pZCBjYWNoZSBjb25mbGlj
dHM/CisgICAgdm9pZCoqIHRhaWwgPSAmc3Bhbi0+b2JqZWN0czsKKyAgICBjaGFyKiBwdHIgPSBy
ZWludGVycHJldF9jYXN0PGNoYXIqPihzcGFuLT5zdGFydCA8PCBrUGFnZVNoaWZ0KTsKKyAgICBj
aGFyKiBsaW1pdCA9IHB0ciArIChucGFnZXMgPDwga1BhZ2VTaGlmdCk7CisgICAgY29uc3Qgc2l6
ZV90IHNpemUgPSBCeXRlU2l6ZUZvckNsYXNzKHNpemVDbGFzcyk7CisgICAgaW50IG51bSA9IDA7
CisgICAgY2hhciogbnB0cjsKKyAgICB3aGlsZSAoKG5wdHIgPSBwdHIgKyBzaXplKSA8PSBsaW1p
dCkgeworICAgICAgICAqdGFpbCA9IHB0cjsKKyAgICAgICAgdGFpbCA9IHJlaW50ZXJwcmV0X2Nh
c3RfcHRyPHZvaWQqKj4ocHRyKTsKKyAgICAgICAgcHRyID0gbnB0cjsKKyAgICAgICAgbnVtKys7
CisgICAgfQorICAgIEFTU0VSVChwdHIgPD0gbGltaXQpOworICAgICp0YWlsID0gMDsKKyAgICBz
cGFuLT5yZWZjb3VudCA9IDA7IC8vIE5vIHN1Yi1vYmplY3QgaW4gdXNlIHlldAorCisgICAgLy8g
QWRkIHNwYW4gdG8gbGlzdCBvZiBub24tZW1wdHkgc3BhbnMKKyAgICBsb2NrLkxvY2soKTsKKyAg
ICBETExQcmVwZW5kKCZub25lbXB0eSwgc3Bhbik7CisgICAgY291bnRlciArPSBudW07CiB9CiAK
IC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotLy8gVENNYWxsb2NfVGhyZWFkQ2FjaGUgaW1wbGVtZW50YXRpb24KKy8v
IFRDTWFsbG9jVGhyZWFkQ2FjaGUgaW1wbGVtZW50YXRpb24KIC8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1pbmxp
bmUgYm9vbCBUQ01hbGxvY19UaHJlYWRDYWNoZTo6U2FtcGxlQWxsb2NhdGlvbihzaXplX3Qgaykg
ewotICBpZiAoYnl0ZXNfdW50aWxfc2FtcGxlXyA8IGspIHsKLSAgICBQaWNrTmV4dFNhbXBsZShr
KTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfSBlbHNlIHsKLSAgICBieXRlc191bnRpbF9zYW1wbGVf
IC09IGs7CitpbmxpbmUgYm9vbCBUQ01hbGxvY1RocmVhZENhY2hlOjpTYW1wbGVBbGxvY2F0aW9u
KHNpemVfdCBrKQoreworICAgIGlmIChieXRlc1VudGlsU2FtcGxlIDwgaykgeworICAgICAgICBQ
aWNrTmV4dFNhbXBsZShrKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGJ5dGVz
VW50aWxTYW1wbGUgLT0gazsKICAgICByZXR1cm4gZmFsc2U7Ci0gIH0KIH0KIAotdm9pZCBUQ01h
bGxvY19UaHJlYWRDYWNoZTo6SW5pdChUaHJlYWRJZGVudGlmaWVyIHRpZCkgewotICBzaXplXyA9
IDA7Ci0gIG5leHRfID0gTlVMTDsKLSAgcHJldl8gPSBOVUxMOwotICB0aWRfICA9IHRpZDsKLSAg
aW5fc2V0c3BlY2lmaWNfID0gZmFsc2U7Ci0gIGZvciAoc2l6ZV90IGNsID0gMDsgY2wgPCBrTnVt
Q2xhc3NlczsgKytjbCkgewotICAgIGxpc3RfW2NsXS5Jbml0KCk7Ci0gIH0KK3ZvaWQgVENNYWxs
b2NUaHJlYWRDYWNoZTo6SW5pdChUaHJlYWRJZGVudGlmaWVyIHRpZCkKK3sKKyAgICBzaXplID0g
MDsKKyAgICBuZXh0ID0gMDsKKyAgICBwcmV2ID0gMDsKKyAgICB0aWQgID0gdGlkOworICAgIGlu
U2V0c3BlY2lmaWMgPSBmYWxzZTsKKyAgICBmb3IgKHNpemVfdCBjbCA9IDA7IGNsIDwga051bUNs
YXNzZXM7ICsrY2wpCisgICAgICAgIGxpc3RbY2xdLkluaXQoKTsKIAotICAvLyBJbml0aWFsaXpl
IFJORyAtLSBydW4gaXQgZm9yIGEgYml0IHRvIGdldCB0byBnb29kIHZhbHVlcwotICBieXRlc191
bnRpbF9zYW1wbGVfID0gMDsKLSAgcm5kXyA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihyZWludGVy
cHJldF9jYXN0PHVpbnRwdHJfdD4odGhpcykpOwotICBmb3IgKGludCBpID0gMDsgaSA8IDEwMDsg
aSsrKSB7Ci0gICAgUGlja05leHRTYW1wbGUoc3RhdGljX2Nhc3Q8c2l6ZV90PihGTEFHU190Y21h
bGxvY19zYW1wbGVfcGFyYW1ldGVyICogMikpOwotICB9CisgICAgLy8gSW5pdGlhbGl6ZSBSTkcg
LS0gcnVuIGl0IGZvciBhIGJpdCB0byBnZXQgdG8gZ29vZCB2YWx1ZXMKKyAgICBieXRlc1VudGls
U2FtcGxlID0gMDsKKyAgICBybmQgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4ocmVpbnRlcnByZXRf
Y2FzdDx1aW50cHRyX3Q+KHRoaXMpKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDEwMDsgaSsr
KQorICAgICAgICBQaWNrTmV4dFNhbXBsZShzdGF0aWNfY2FzdDxzaXplX3Q+KEZMQUdTX3RjbWFs
bG9jX3NhbXBsZV9wYXJhbWV0ZXIgKiAyKSk7CiB9CiAKLXZvaWQgVENNYWxsb2NfVGhyZWFkQ2Fj
aGU6OkNsZWFudXAoKSB7Ci0gIC8vIFB1dCB1bnVzZWQgbWVtb3J5IGJhY2sgaW50byBjZW50cmFs
IGNhY2hlCi0gIGZvciAoc2l6ZV90IGNsID0gMDsgY2wgPCBrTnVtQ2xhc3NlczsgKytjbCkgewot
ICAgIGlmIChsaXN0X1tjbF0ubGVuZ3RoKCkgPiAwKSB7Ci0gICAgICBSZWxlYXNlVG9DZW50cmFs
Q2FjaGUoY2wsIGxpc3RfW2NsXS5sZW5ndGgoKSk7Cit2b2lkIFRDTWFsbG9jVGhyZWFkQ2FjaGU6
OkNsZWFudXAoKQoreworICAgIC8vIFB1dCB1bnVzZWQgbWVtb3J5IGJhY2sgaW50byBjZW50cmFs
IGNhY2hlCisgICAgZm9yIChzaXplX3QgY2wgPSAwOyBjbCA8IGtOdW1DbGFzc2VzOyArK2NsKSB7
CisgICAgICAgIGlmIChsaXN0W2NsXS5sZW5ndGgoKSA+IDApCisgICAgICAgICAgICBSZWxlYXNl
VG9DZW50cmFsQ2FjaGUoY2wsIGxpc3RbY2xdLmxlbmd0aCgpKTsKICAgICB9Ci0gIH0KIH0KIAot
QUxXQVlTX0lOTElORSB2b2lkKiBUQ01hbGxvY19UaHJlYWRDYWNoZTo6QWxsb2NhdGUoc2l6ZV90
IHNpemUpIHsKLSAgQVNTRVJUKHNpemUgPD0ga01heFNpemUpOwotICBjb25zdCBzaXplX3QgY2wg
PSBTaXplQ2xhc3Moc2l6ZSk7Ci0gIEZyZWVMaXN0KiBsaXN0ID0gJmxpc3RfW2NsXTsKLSAgc2l6
ZV90IGFsbG9jYXRpb25TaXplID0gQnl0ZVNpemVGb3JDbGFzcyhjbCk7Ci0gIGlmIChsaXN0LT5l
bXB0eSgpKSB7Ci0gICAgRmV0Y2hGcm9tQ2VudHJhbENhY2hlKGNsLCBhbGxvY2F0aW9uU2l6ZSk7
Ci0gICAgaWYgKGxpc3QtPmVtcHR5KCkpIHJldHVybiBOVUxMOwotICB9Ci0gIHNpemVfIC09IGFs
bG9jYXRpb25TaXplOwotICByZXR1cm4gbGlzdC0+UG9wKCk7CitBTFdBWVNfSU5MSU5FIHZvaWQq
IFRDTWFsbG9jVGhyZWFkQ2FjaGU6OkFsbG9jYXRlKHNpemVfdCBzaXplKQoreworICAgIEFTU0VS
VChzaXplIDw9IGtNYXhTaXplKTsKKyAgICBjb25zdCBzaXplX3QgY2wgPSBTaXplQ2xhc3Moc2l6
ZSk7CisgICAgRnJlZUxpc3QqIHBMaXN0ID0gJmxpc3RbY2xdOworICAgIHNpemVfdCBhbGxvY2F0
aW9uU2l6ZSA9IEJ5dGVTaXplRm9yQ2xhc3MoY2wpOworICAgIGlmIChwTGlzdC0+ZW1wdHkoKSkg
eworICAgICAgICBGZXRjaEZyb21DZW50cmFsQ2FjaGUoY2wsIGFsbG9jYXRpb25TaXplKTsKKyAg
ICAgICAgaWYgKHBMaXN0LT5lbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQor
ICAgIHNpemUgLT0gYWxsb2NhdGlvblNpemU7CisgICAgcmV0dXJuIHBMaXN0LT5Qb3AoKTsKIH0K
IAotaW5saW5lIHZvaWQgVENNYWxsb2NfVGhyZWFkQ2FjaGU6OkRlYWxsb2NhdGUodm9pZCogcHRy
LCBzaXplX3QgY2wpIHsKLSAgc2l6ZV8gKz0gQnl0ZVNpemVGb3JDbGFzcyhjbCk7Ci0gIEZyZWVM
aXN0KiBsaXN0ID0gJmxpc3RfW2NsXTsKLSAgbGlzdC0+UHVzaChwdHIpOwotICAvLyBJZiBlbm91
Z2ggZGF0YSBpcyBmcmVlLCBwdXQgYmFjayBpbnRvIGNlbnRyYWwgY2FjaGUKLSAgaWYgKGxpc3Qt
Pmxlbmd0aCgpID4ga01heEZyZWVMaXN0TGVuZ3RoKSB7Ci0gICAgUmVsZWFzZVRvQ2VudHJhbENh
Y2hlKGNsLCBudW1fb2JqZWN0c190b19tb3ZlW2NsXSk7Ci0gIH0KLSAgaWYgKHNpemVfID49IHBl
cl90aHJlYWRfY2FjaGVfc2l6ZSkgU2NhdmVuZ2UoKTsKK2lubGluZSB2b2lkIFRDTWFsbG9jVGhy
ZWFkQ2FjaGU6OkRlYWxsb2NhdGUodm9pZCogcHRyLCBzaXplX3QgY2wpCit7CisgICAgc2l6ZSAr
PSBCeXRlU2l6ZUZvckNsYXNzKGNsKTsKKyAgICBGcmVlTGlzdCogcExpc3QgPSAmbGlzdFtjbF07
CisgICAgcExpc3QtPlB1c2gocHRyKTsKKyAgICAvLyBJZiBlbm91Z2ggZGF0YSBpcyBmcmVlLCBw
dXQgYmFjayBpbnRvIGNlbnRyYWwgY2FjaGUKKyAgICBpZiAocExpc3QtPmxlbmd0aCgpID4ga01h
eEZyZWVMaXN0TGVuZ3RoKQorICAgICAgICBSZWxlYXNlVG9DZW50cmFsQ2FjaGUoY2wsIG51bU9i
amVjdHNUb01vdmVbY2xdKTsKKyAgICBpZiAoc2l6ZSA+PSBwZXJUaHJlYWRDYWNoZVNpemUpCisg
ICAgICAgIFNjYXZlbmdlKCk7CiB9CiAKIC8vIFJlbW92ZSBzb21lIG9iamVjdHMgb2YgY2xhc3Mg
ImNsIiBmcm9tIGNlbnRyYWwgY2FjaGUgYW5kIGFkZCB0byB0aHJlYWQgaGVhcAotQUxXQVlTX0lO
TElORSB2b2lkIFRDTWFsbG9jX1RocmVhZENhY2hlOjpGZXRjaEZyb21DZW50cmFsQ2FjaGUoc2l6
ZV90IGNsLCBzaXplX3QgYWxsb2NhdGlvblNpemUpIHsKLSAgaW50IGZldGNoX2NvdW50ID0gbnVt
X29iamVjdHNfdG9fbW92ZVtjbF07Ci0gIHZvaWQgKnN0YXJ0LCAqZW5kOwotICBjZW50cmFsX2Nh
Y2hlW2NsXS5SZW1vdmVSYW5nZSgmc3RhcnQsICZlbmQsICZmZXRjaF9jb3VudCk7Ci0gIGxpc3Rf
W2NsXS5QdXNoUmFuZ2UoZmV0Y2hfY291bnQsIHN0YXJ0LCBlbmQpOwotICBzaXplXyArPSBhbGxv
Y2F0aW9uU2l6ZSAqIGZldGNoX2NvdW50OworQUxXQVlTX0lOTElORSB2b2lkIFRDTWFsbG9jVGhy
ZWFkQ2FjaGU6OkZldGNoRnJvbUNlbnRyYWxDYWNoZShzaXplX3QgY2wsIHNpemVfdCBhbGxvY2F0
aW9uU2l6ZSkKK3sKKyAgICBpbnQgZmV0Y2hDb3VudCA9IG51bU9iamVjdHNUb01vdmVbY2xdOwor
ICAgIHZvaWQqIHN0YXJ0OworICAgIHZvaWQqIGVuZDsKKyAgICBjZW50cmFsQ2FjaGVbY2xdLlJl
bW92ZVJhbmdlKCZzdGFydCwgJmVuZCwgJmZldGNoQ291bnQpOworICAgIGxpc3RbY2xdLlB1c2hS
YW5nZShmZXRjaENvdW50LCBzdGFydCwgZW5kKTsKKyAgICBzaXplICs9IGFsbG9jYXRpb25TaXpl
ICogZmV0Y2hDb3VudDsKIH0KIAogLy8gUmVtb3ZlIHNvbWUgb2JqZWN0cyBvZiBjbGFzcyAiY2wi
IGZyb20gdGhyZWFkIGhlYXAgYW5kIGFkZCB0byBjZW50cmFsIGNhY2hlCi1pbmxpbmUgdm9pZCBU
Q01hbGxvY19UaHJlYWRDYWNoZTo6UmVsZWFzZVRvQ2VudHJhbENhY2hlKHNpemVfdCBjbCwgaW50
IE4pIHsKLSAgQVNTRVJUKE4gPiAwKTsKLSAgRnJlZUxpc3QqIHNyYyA9ICZsaXN0X1tjbF07Ci0g
IGlmIChOID4gc3JjLT5sZW5ndGgoKSkgTiA9IHNyYy0+bGVuZ3RoKCk7Ci0gIHNpemVfIC09IE4q
Qnl0ZVNpemVGb3JDbGFzcyhjbCk7Ci0KLSAgLy8gV2UgcmV0dXJuIHByZXBhY2thZ2VkIGNoYWlu
cyBvZiB0aGUgY29ycmVjdCBzaXplIHRvIHRoZSBjZW50cmFsIGNhY2hlLgotICAvLyBUT0RPOiBV
c2UgdGhlIHNhbWUgZm9ybWF0IGludGVybmFsbHkgaW4gdGhlIHRocmVhZCBjYWNoZXM/Ci0gIGlu
dCBiYXRjaF9zaXplID0gbnVtX29iamVjdHNfdG9fbW92ZVtjbF07Ci0gIHdoaWxlIChOID4gYmF0
Y2hfc2l6ZSkgewotICAgIHZvaWQgKnRhaWwsICpoZWFkOwotICAgIHNyYy0+UG9wUmFuZ2UoYmF0
Y2hfc2l6ZSwgJmhlYWQsICZ0YWlsKTsKLSAgICBjZW50cmFsX2NhY2hlW2NsXS5JbnNlcnRSYW5n
ZShoZWFkLCB0YWlsLCBiYXRjaF9zaXplKTsKLSAgICBOIC09IGJhdGNoX3NpemU7Ci0gIH0KLSAg
dm9pZCAqdGFpbCwgKmhlYWQ7Ci0gIHNyYy0+UG9wUmFuZ2UoTiwgJmhlYWQsICZ0YWlsKTsKLSAg
Y2VudHJhbF9jYWNoZVtjbF0uSW5zZXJ0UmFuZ2UoaGVhZCwgdGFpbCwgTik7CitpbmxpbmUgdm9p
ZCBUQ01hbGxvY1RocmVhZENhY2hlOjpSZWxlYXNlVG9DZW50cmFsQ2FjaGUoc2l6ZV90IGNsLCBp
bnQgTikKK3sKKyAgICBBU1NFUlQoTiA+IDApOworICAgIEZyZWVMaXN0KiBzcmMgPSAmbGlzdFtj
bF07CisgICAgaWYgKE4gPiBzcmMtPmxlbmd0aCgpKQorICAgICAgICBOID0gc3JjLT5sZW5ndGgo
KTsKKyAgICBzaXplIC09IE4qQnl0ZVNpemVGb3JDbGFzcyhjbCk7CisKKyAgICAvLyBXZSByZXR1
cm4gcHJlcGFja2FnZWQgY2hhaW5zIG9mIHRoZSBjb3JyZWN0IHNpemUgdG8gdGhlIGNlbnRyYWwg
Y2FjaGUuCisgICAgLy8gVE9ETzogVXNlIHRoZSBzYW1lIGZvcm1hdCBpbnRlcm5hbGx5IGluIHRo
ZSB0aHJlYWQgY2FjaGVzPworICAgIGludCBiYXRjaFNpemUgPSBudW1PYmplY3RzVG9Nb3ZlW2Ns
XTsKKyAgICB3aGlsZSAoTiA+IGJhdGNoU2l6ZSkgeworICAgICAgICB2b2lkKiB0YWlsOworICAg
ICAgICB2b2lkKiBoZWFkOworICAgICAgICBzcmMtPlBvcFJhbmdlKGJhdGNoU2l6ZSwgJmhlYWQs
ICZ0YWlsKTsKKyAgICAgICAgY2VudHJhbENhY2hlW2NsXS5JbnNlcnRSYW5nZShoZWFkLCB0YWls
LCBiYXRjaFNpemUpOworICAgICAgICBOIC09IGJhdGNoU2l6ZTsKKyAgICB9CisgICAgdm9pZCog
dGFpbDsKKyAgICB2b2lkKiBoZWFkOworICAgIHNyYy0+UG9wUmFuZ2UoTiwgJmhlYWQsICZ0YWls
KTsKKyAgICBjZW50cmFsQ2FjaGVbY2xdLkluc2VydFJhbmdlKGhlYWQsIHRhaWwsIE4pOwogfQog
CiAvLyBSZWxlYXNlIGlkbGUgbWVtb3J5IHRvIHRoZSBjZW50cmFsIGNhY2hlCi1pbmxpbmUgdm9p
ZCBUQ01hbGxvY19UaHJlYWRDYWNoZTo6U2NhdmVuZ2UoKSB7Ci0gIC8vIElmIHRoZSBsb3ctd2F0
ZXIgbWFyayBmb3IgdGhlIGZyZWUgbGlzdCBpcyBMLCBpdCBtZWFucyB3ZSB3b3VsZAotICAvLyBu
b3QgaGF2ZSBoYWQgdG8gYWxsb2NhdGUgYW55dGhpbmcgZnJvbSB0aGUgY2VudHJhbCBjYWNoZSBl
dmVuIGlmCi0gIC8vIHdlIGhhZCByZWR1Y2VkIHRoZSBmcmVlIGxpc3Qgc2l6ZSBieSBMLiAgV2Ug
YWltIHRvIGdldCBjbG9zZXIgdG8KLSAgLy8gdGhhdCBzaXR1YXRpb24gYnkgZHJvcHBpbmcgTC8y
IG5vZGVzIGZyb20gdGhlIGZyZWUgbGlzdC4gIFRoaXMKLSAgLy8gbWF5IG5vdCByZWxlYXNlIG11
Y2ggbWVtb3J5LCBidXQgaWYgc28gd2Ugd2lsbCBjYWxsIHNjYXZlbmdlIGFnYWluCi0gIC8vIHBy
ZXR0eSBzb29uIGFuZCB0aGUgbG93LXdhdGVyIG1hcmtzIHdpbGwgYmUgaGlnaCBvbiB0aGF0IGNh
bGwuCi0gIC8vaW50NjQgc3RhcnQgPSBDeWNsZUNsb2NrOjpOb3coKTsKLQotICBmb3IgKHNpemVf
dCBjbCA9IDA7IGNsIDwga051bUNsYXNzZXM7IGNsKyspIHsKLSAgICBGcmVlTGlzdCogbGlzdCA9
ICZsaXN0X1tjbF07Ci0gICAgY29uc3QgaW50IGxvd21hcmsgPSBsaXN0LT5sb3d3YXRlcm1hcmso
KTsKLSAgICBpZiAobG93bWFyayA+IDApIHsKLSAgICAgIGNvbnN0IGludCBkcm9wID0gKGxvd21h
cmsgPiAxKSA/IGxvd21hcmsvMiA6IDE7Ci0gICAgICBSZWxlYXNlVG9DZW50cmFsQ2FjaGUoY2ws
IGRyb3ApOworaW5saW5lIHZvaWQgVENNYWxsb2NUaHJlYWRDYWNoZTo6U2NhdmVuZ2UoKQorewor
ICAgIC8vIElmIHRoZSBsb3ctd2F0ZXIgbWFyayBmb3IgdGhlIGZyZWUgbGlzdCBpcyBMLCBpdCBt
ZWFucyB3ZSB3b3VsZAorICAgIC8vIG5vdCBoYXZlIGhhZCB0byBhbGxvY2F0ZSBhbnl0aGluZyBm
cm9tIHRoZSBjZW50cmFsIGNhY2hlIGV2ZW4gaWYKKyAgICAvLyB3ZSBoYWQgcmVkdWNlZCB0aGUg
ZnJlZSBsaXN0IHNpemUgYnkgTC4gV2UgYWltIHRvIGdldCBjbG9zZXIgdG8KKyAgICAvLyB0aGF0
IHNpdHVhdGlvbiBieSBkcm9wcGluZyBMLzIgbm9kZXMgZnJvbSB0aGUgZnJlZSBsaXN0LiBUaGlz
CisgICAgLy8gbWF5IG5vdCByZWxlYXNlIG11Y2ggbWVtb3J5LCBidXQgaWYgc28gd2Ugd2lsbCBj
YWxsIHNjYXZlbmdlIGFnYWluCisgICAgLy8gcHJldHR5IHNvb24gYW5kIHRoZSBsb3ctd2F0ZXIg
bWFya3Mgd2lsbCBiZSBoaWdoIG9uIHRoYXQgY2FsbC4KKworICAgIC8vIGludDY0IHN0YXJ0ID0g
Q3ljbGVDbG9jazo6Tm93KCk7CisKKyAgICBmb3IgKHNpemVfdCBjbCA9IDA7IGNsIDwga051bUNs
YXNzZXM7IGNsKyspIHsKKyAgICAgICAgRnJlZUxpc3QqIHBMaXN0ID0gJmxpc3RbY2xdOworICAg
ICAgICBjb25zdCBpbnQgbG93bWFyayA9IHBMaXN0LT5sb3d3YXRlcm1hcmsoKTsKKyAgICAgICAg
aWYgKGxvd21hcmsgPiAwKSB7CisgICAgICAgICAgICBjb25zdCBpbnQgZHJvcCA9IChsb3dtYXJr
ID4gMSkgPyBsb3dtYXJrIC8gMiA6IDE7CisgICAgICAgICAgICBSZWxlYXNlVG9DZW50cmFsQ2Fj
aGUoY2wsIGRyb3ApOworICAgICAgICB9CisgICAgICAgIHBMaXN0LT5jbGVhckxvd3dhdGVybWFy
aygpOwogICAgIH0KLSAgICBsaXN0LT5jbGVhcl9sb3d3YXRlcm1hcmsoKTsKLSAgfQogCi0gIC8v
aW50NjQgZmluaXNoID0gQ3ljbGVDbG9jazo6Tm93KCk7Ci0gIC8vQ3ljbGVUaW1lciBjdDsKLSAg
Ly9NRVNTQUdFKCJHQzogJS4wZiBuc1xuIiwgY3QuQ3ljbGVzVG9Vc2VjKGZpbmlzaC1zdGFydCkq
MTAwMC4wKTsKLX0KLQotdm9pZCBUQ01hbGxvY19UaHJlYWRDYWNoZTo6UGlja05leHRTYW1wbGUo
c2l6ZV90IGspIHsKLSAgLy8gTWFrZSBuZXh0ICJyYW5kb20iIG51bWJlcgotICAvLyB4XjMyK3he
MjIreF4yK3heMSsxIGlzIGEgcHJpbWl0aXZlIHBvbHlub21pYWwgZm9yIHJhbmRvbSBudW1iZXJz
Ci0gIHN0YXRpYyBjb25zdCB1aW50MzJfdCBrUG9seSA9ICgxIDw8IDIyKSB8ICgxIDw8IDIpIHwg
KDEgPDwgMSkgfCAoMSA8PCAwKTsKLSAgdWludDMyX3QgciA9IHJuZF87Ci0gIHJuZF8gPSAociA8
PCAxKSBeICgoc3RhdGljX2Nhc3Q8aW50MzJfdD4ocikgPj4gMzEpICYga1BvbHkpOwotCi0gIC8v
IE5leHQgcG9pbnQgaXMgInJuZF8gJSAoc2FtcGxlX3BlcmlvZCkiLiAgSS5lLiwgYXZlcmFnZQot
ICAvLyBpbmNyZW1lbnQgaXMgInNhbXBsZV9wZXJpb2QvMiIuCi0gIGNvbnN0IGludCBmbGFnX3Zh
bHVlID0gc3RhdGljX2Nhc3Q8aW50PihGTEFHU190Y21hbGxvY19zYW1wbGVfcGFyYW1ldGVyKTsK
LSAgc3RhdGljIGludCBsYXN0X2ZsYWdfdmFsdWUgPSAtMTsKLQotICBpZiAoZmxhZ192YWx1ZSAh
PSBsYXN0X2ZsYWdfdmFsdWUpIHsKLSAgICBTcGluTG9ja0hvbGRlciBoKCZzYW1wbGVfcGVyaW9k
X2xvY2spOwotICAgIGludCBpOwotICAgIGZvciAoaSA9IDA7IGkgPCAoc3RhdGljX2Nhc3Q8aW50
PihzaXplb2YocHJpbWVzX2xpc3QpL3NpemVvZihwcmltZXNfbGlzdFswXSkpIC0gMSk7IGkrKykg
ewotICAgICAgaWYgKHByaW1lc19saXN0W2ldID49IGZsYWdfdmFsdWUpIHsKLSAgICAgICAgYnJl
YWs7Ci0gICAgICB9Ci0gICAgfQotICAgIHNhbXBsZV9wZXJpb2QgPSBwcmltZXNfbGlzdFtpXTsK
LSAgICBsYXN0X2ZsYWdfdmFsdWUgPSBmbGFnX3ZhbHVlOwotICB9CisgICAgLy8gaW50NjQgZmlu
aXNoID0gQ3ljbGVDbG9jazo6Tm93KCk7CisgICAgLy8gQ3ljbGVUaW1lciBjdDsKKyAgICAvLyBN
RVNTQUdFKCJHQzogJS4wZiBuc1xuIiwgY3QuQ3ljbGVzVG9Vc2VjKGZpbmlzaC1zdGFydCkqMTAw
MC4wKTsKK30KIAotICBieXRlc191bnRpbF9zYW1wbGVfICs9IHJuZF8gJSBzYW1wbGVfcGVyaW9k
Owordm9pZCBUQ01hbGxvY1RocmVhZENhY2hlOjpQaWNrTmV4dFNhbXBsZShzaXplX3QgaykKK3sK
KyAgICAvLyBNYWtlIG5leHQgInJhbmRvbSIgbnVtYmVyCisgICAgLy8geF4zMit4XjIyK3heMit4
XjErMSBpcyBhIHByaW1pdGl2ZSBwb2x5bm9taWFsIGZvciByYW5kb20gbnVtYmVycworICAgIHN0
YXRpYyBjb25zdCB1aW50MzJfdCBrUG9seSA9ICgxIDw8IDIyKSB8ICgxIDw8IDIpIHwgKDEgPDwg
MSkgfCAoMSA8PCAwKTsKKyAgICB1aW50MzJfdCByID0gcm5kOworICAgIHJuZCA9IChyIDw8IDEp
IF4gKChzdGF0aWNfY2FzdDxpbnQzMl90PihyKSA+PiAzMSkgJiBrUG9seSk7CiAKLSAgaWYgKGsg
PiAoc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSkgPj4gMikpIHsKLSAgICAvLyBJZiB0aGUgdXNlciBo
YXMgYXNrZWQgZm9yIGEgaHVnZSBhbGxvY2F0aW9uIHRoZW4gaXQgaXMgcG9zc2libGUKLSAgICAv
LyBmb3IgdGhlIGNvZGUgYmVsb3cgdG8gbG9vcCBpbmZpbml0ZWx5LiAgSnVzdCByZXR1cm4gKG5v
dGUgdGhhdAotICAgIC8vIHRoaXMgdGhyb3dzIG9mZiB0aGUgc2FtcGxpbmcgYWNjdXJhY3kgc29t
ZXdoYXQsIGJ1dCBhIHVzZXIgd2hvCi0gICAgLy8gaXMgYWxsb2NhdGluZyBtb3JlIHRoYW4gMUcg
b2YgbWVtb3J5IGF0IGEgdGltZSBjYW4gbGl2ZSB3aXRoIGEKLSAgICAvLyBtaW5vciBpbmFjY3Vy
YWN5IGluIHByb2ZpbGluZyBvZiBzbWFsbCBhbGxvY2F0aW9ucywgYW5kIGFsc28KLSAgICAvLyB3
b3VsZCByYXRoZXIgbm90IHdhaXQgZm9yIHRoZSBsb29wIGJlbG93IHRvIHRlcm1pbmF0ZSkuCi0g
ICAgcmV0dXJuOwotICB9CisgICAgLy8gTmV4dCBwb2ludCBpcyAicm5kICUgKHNhbXBsZV9wZXJp
b2QpIi4gSS5lLiwgYXZlcmFnZQorICAgIC8vIGluY3JlbWVudCBpcyAic2FtcGxlX3BlcmlvZCAv
IDIiLgorICAgIGNvbnN0IGludCBmbGFnVmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ+KEZMQUdTX3Rj
bWFsbG9jX3NhbXBsZV9wYXJhbWV0ZXIpOworICAgIHN0YXRpYyBpbnQgbGFzdEZsYWdWYWx1ZSA9
IC0xOwogCi0gIHdoaWxlIChieXRlc191bnRpbF9zYW1wbGVfIDwgaykgewotICAgIC8vIEluY3Jl
YXNlIGJ5dGVzX3VudGlsX3NhbXBsZV8gYnkgZW5vdWdoIGF2ZXJhZ2Ugc2FtcGxpbmcgcGVyaW9k
cwotICAgIC8vIChzYW1wbGVfcGVyaW9kID4+IDEpIHRvIGFsbG93IHVzIHRvIHNhbXBsZSBwYXN0
IHRoZSBjdXJyZW50Ci0gICAgLy8gYWxsb2NhdGlvbi4KLSAgICBieXRlc191bnRpbF9zYW1wbGVf
ICs9IChzYW1wbGVfcGVyaW9kID4+IDEpOwotICB9CisgICAgaWYgKGZsYWdWYWx1ZSAhPSBsYXN0
RmxhZ1ZhbHVlKSB7CisgICAgICAgIFNwaW5Mb2NrSG9sZGVyIGgoJnNhbXBsZV9wZXJpb2RfbG9j
ayk7CisgICAgICAgIGludCBpOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgKHN0YXRpY19jYXN0
PGludD4oc2l6ZW9mKHByaW1lc0xpc3QpIC8gc2l6ZW9mKHByaW1lc0xpc3RbMF0pKSAtIDEpOyBp
KyspIHsKKyAgICAgICAgICAgIGlmIChwcmltZXNMaXN0W2ldID49IGZsYWdWYWx1ZSkKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBzYW1wbGVfcGVyaW9kID0gcHJp
bWVzTGlzdFtpXTsKKyAgICAgICAgbGFzdEZsYWdWYWx1ZSA9IGZsYWdWYWx1ZTsKKyAgICB9CiAK
LSAgYnl0ZXNfdW50aWxfc2FtcGxlXyAtPSBrOwotfQorICAgIGJ5dGVzVW50aWxTYW1wbGUgKz0g
cm5kICUgc2FtcGxlX3BlcmlvZDsKIAotdm9pZCBUQ01hbGxvY19UaHJlYWRDYWNoZTo6SW5pdE1v
ZHVsZSgpIHsKLSAgLy8gVGhlcmUgaXMgYSBzbGlnaHQgcG90ZW50aWFsIHJhY2UgaGVyZSBiZWNh
dXNlIG9mIGRvdWJsZS1jaGVja2VkCi0gIC8vIGxvY2tpbmcgaWRpb20uICBIb3dldmVyLCBhcyBs
b25nIGFzIHRoZSBwcm9ncmFtIGRvZXMgYSBzbWFsbAotICAvLyBhbGxvY2F0aW9uIGJlZm9yZSBz
d2l0Y2hpbmcgdG8gbXVsdGktdGhyZWFkZWQgbW9kZSwgd2Ugd2lsbCBiZQotICAvLyBmaW5lLiAg
V2UgaW5jcmVhc2UgdGhlIGNoYW5jZXMgb2YgZG9pbmcgc3VjaCBhIHNtYWxsIGFsbG9jYXRpb24K
LSAgLy8gYnkgZG9pbmcgb25lIGluIHRoZSBjb25zdHJ1Y3RvciBvZiB0aGUgbW9kdWxlX2VudGVy
X2V4aXRfaG9vawotICAvLyBvYmplY3QgZGVjbGFyZWQgYmVsb3cuCi0gIFNwaW5Mb2NrSG9sZGVy
IGgoJnBhZ2VoZWFwX2xvY2spOwotICBpZiAoIXBoaW5pdGVkKSB7CisgICAgaWYgKGsgPiAoc3Rh
dGljX2Nhc3Q8c2l6ZV90PigtMSkgPj4gMikpCisgICAgICAgIC8vIElmIHRoZSB1c2VyIGhhcyBh
c2tlZCBmb3IgYSBodWdlIGFsbG9jYXRpb24gdGhlbiBpdCBpcyBwb3NzaWJsZQorICAgICAgICAv
LyBmb3IgdGhlIGNvZGUgYmVsb3cgdG8gbG9vcCBpbmZpbml0ZWx5LiBKdXN0IHJldHVybiAobm90
ZSB0aGF0CisgICAgICAgIC8vIHRoaXMgdGhyb3dzIG9mZiB0aGUgc2FtcGxpbmcgYWNjdXJhY3kg
c29tZXdoYXQsIGJ1dCBhIHVzZXIgd2hvCisgICAgICAgIC8vIGlzIGFsbG9jYXRpbmcgbW9yZSB0
aGFuIDFHIG9mIG1lbW9yeSBhdCBhIHRpbWUgY2FuIGxpdmUgd2l0aCBhCisgICAgICAgIC8vIG1p
bm9yIGluYWNjdXJhY3kgaW4gcHJvZmlsaW5nIG9mIHNtYWxsIGFsbG9jYXRpb25zLCBhbmQgYWxz
bworICAgICAgICAvLyB3b3VsZCByYXRoZXIgbm90IHdhaXQgZm9yIHRoZSBsb29wIGJlbG93IHRv
IHRlcm1pbmF0ZSkuCisgICAgICAgIHJldHVybjsKKworICAgIHdoaWxlIChieXRlc1VudGlsU2Ft
cGxlIDwgaykKKyAgICAgICAgLy8gSW5jcmVhc2UgYnl0ZXNVbnRpbFNhbXBsZSBieSBlbm91Z2gg
YXZlcmFnZSBzYW1wbGluZyBwZXJpb2RzCisgICAgICAgIC8vIChzYW1wbGVfcGVyaW9kID4+IDEp
IHRvIGFsbG93IHVzIHRvIHNhbXBsZSBwYXN0IHRoZSBjdXJyZW50CisgICAgICAgIC8vIGFsbG9j
YXRpb24uCisgICAgICAgIGJ5dGVzVW50aWxTYW1wbGUgKz0gKHNhbXBsZV9wZXJpb2QgPj4gMSk7
CisKKyAgICBieXRlc1VudGlsU2FtcGxlIC09IGs7Cit9CisKK3ZvaWQgVENNYWxsb2NUaHJlYWRD
YWNoZTo6SW5pdE1vZHVsZSgpCit7CisgICAgLy8gVGhlcmUgaXMgYSBzbGlnaHQgcG90ZW50aWFs
IHJhY2UgaGVyZSBiZWNhdXNlIG9mIGRvdWJsZS1jaGVja2VkCisgICAgLy8gbG9ja2luZyBpZGlv
bS4gSG93ZXZlciwgYXMgbG9uZyBhcyB0aGUgcHJvZ3JhbSBkb2VzIGEgc21hbGwKKyAgICAvLyBh
bGxvY2F0aW9uIGJlZm9yZSBzd2l0Y2hpbmcgdG8gbXVsdGktdGhyZWFkZWQgbW9kZSwgd2Ugd2ls
bCBiZQorICAgIC8vIGZpbmUuIFdlIGluY3JlYXNlIHRoZSBjaGFuY2VzIG9mIGRvaW5nIHN1Y2gg
YSBzbWFsbCBhbGxvY2F0aW9uCisgICAgLy8gYnkgZG9pbmcgb25lIGluIHRoZSBjb25zdHJ1Y3Rv
ciBvZiB0aGUgbW9kdWxlX2VudGVyX2V4aXRfaG9vaworICAgIC8vIG9iamVjdCBkZWNsYXJlZCBi
ZWxvdy4KKyAgICBTcGluTG9ja0hvbGRlciBoKCZwYWdlaGVhcExvY2spOworICAgIGlmICghcGhp
bml0ZWQpIHsKICNpZmRlZiBXVEZfQ0hBTkdFUwotICAgIEluaXRUU0QoKTsKKyAgICAgICAgSW5p
dFRTRCgpOwogI2VuZGlmCi0gICAgSW5pdFNpemVDbGFzc2VzKCk7Ci0gICAgdGhyZWFkaGVhcF9h
bGxvY2F0b3IuSW5pdCgpOwotICAgIHNwYW5fYWxsb2NhdG9yLkluaXQoKTsKLSAgICBzcGFuX2Fs
bG9jYXRvci5OZXcoKTsgLy8gUmVkdWNlIGNhY2hlIGNvbmZsaWN0cwotICAgIHNwYW5fYWxsb2Nh
dG9yLk5ldygpOyAvLyBSZWR1Y2UgY2FjaGUgY29uZmxpY3RzCi0gICAgc3RhY2t0cmFjZV9hbGxv
Y2F0b3IuSW5pdCgpOwotICAgIERMTF9Jbml0KCZzYW1wbGVkX29iamVjdHMpOwotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwga051bUNsYXNzZXM7ICsraSkgewotICAgICAgY2VudHJhbF9jYWNo
ZVtpXS5Jbml0KGkpOwotICAgIH0KLSAgICBwYWdlaGVhcC0+aW5pdCgpOwotICAgIHBoaW5pdGVk
ID0gMTsKKyAgICAgICAgSW5pdFNpemVDbGFzc2VzKCk7CisgICAgICAgIHRocmVhZGhlYXBBbGxv
Y2F0b3IuSW5pdCgpOworICAgICAgICBzcGFuQWxsb2NhdG9yLkluaXQoKTsKKyAgICAgICAgc3Bh
bkFsbG9jYXRvci5OZXcoKTsgLy8gUmVkdWNlIGNhY2hlIGNvbmZsaWN0cworICAgICAgICBzcGFu
QWxsb2NhdG9yLk5ldygpOyAvLyBSZWR1Y2UgY2FjaGUgY29uZmxpY3RzCisgICAgICAgIHN0YWNr
dHJhY2VfYWxsb2NhdG9yLkluaXQoKTsKKyAgICAgICAgRExMSW5pdCgmc2FtcGxlZE9iamVjdHMp
OworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtOdW1DbGFzc2VzOyArK2kpCisgICAg
ICAgICAgICBjZW50cmFsQ2FjaGVbaV0uSW5pdChpKTsKKyAgICAgICAgcGFnZWhlYXAtPmluaXQo
KTsKKyAgICAgICAgcGhpbml0ZWQgPSAxOwogI2lmIGRlZmluZWQoV1RGX0NIQU5HRVMpICYmIE9T
KERBUldJTikKLSAgICBGYXN0TWFsbG9jWm9uZTo6aW5pdCgpOworICAgICAgICBGYXN0TWFsbG9j
Wm9uZTo6aW5pdCgpOwogI2VuZGlmCi0gIH0KKyAgICB9CiB9CiAKLWlubGluZSBUQ01hbGxvY19U
aHJlYWRDYWNoZSogVENNYWxsb2NfVGhyZWFkQ2FjaGU6Ok5ld0hlYXAoVGhyZWFkSWRlbnRpZmll
ciB0aWQpIHsKLSAgLy8gQ3JlYXRlIHRoZSBoZWFwIGFuZCBhZGQgaXQgdG8gdGhlIGxpbmtlZCBs
aXN0Ci0gIFRDTWFsbG9jX1RocmVhZENhY2hlICpoZWFwID0gdGhyZWFkaGVhcF9hbGxvY2F0b3Iu
TmV3KCk7Ci0gIGhlYXAtPkluaXQodGlkKTsKLSAgaGVhcC0+bmV4dF8gPSB0aHJlYWRfaGVhcHM7
Ci0gIGhlYXAtPnByZXZfID0gTlVMTDsKLSAgaWYgKHRocmVhZF9oZWFwcyAhPSBOVUxMKSB0aHJl
YWRfaGVhcHMtPnByZXZfID0gaGVhcDsKLSAgdGhyZWFkX2hlYXBzID0gaGVhcDsKLSAgdGhyZWFk
X2hlYXBfY291bnQrKzsKLSAgUmVjb21wdXRlVGhyZWFkQ2FjaGVTaXplKCk7Ci0gIHJldHVybiBo
ZWFwOworaW5saW5lIFRDTWFsbG9jVGhyZWFkQ2FjaGUqIFRDTWFsbG9jVGhyZWFkQ2FjaGU6Ok5l
d0hlYXAoVGhyZWFkSWRlbnRpZmllciB0aWQpCit7CisgICAgLy8gQ3JlYXRlIHRoZSBoZWFwIGFu
ZCBhZGQgaXQgdG8gdGhlIGxpbmtlZCBsaXN0CisgICAgVENNYWxsb2NUaHJlYWRDYWNoZSogaGVh
cCA9IHRocmVhZGhlYXBBbGxvY2F0b3IuTmV3KCk7CisgICAgaGVhcC0+SW5pdCh0aWQpOworICAg
IGhlYXAtPm5leHQgPSB0aHJlYWRIZWFwczsKKyAgICBoZWFwLT5wcmV2ID0gMDsKKyAgICBpZiAo
dGhyZWFkSGVhcHMpCisgICAgICAgIHRocmVhZEhlYXBzLT5wcmV2ID0gaGVhcDsKKyAgICB0aHJl
YWRIZWFwcyA9IGhlYXA7CisgICAgdGhyZWFkX2hlYXBfY291bnQrKzsKKyAgICBSZWNvbXB1dGVU
aHJlYWRDYWNoZVNpemUoKTsKKyAgICByZXR1cm4gaGVhcDsKIH0KIAotaW5saW5lIFRDTWFsbG9j
X1RocmVhZENhY2hlKiBUQ01hbGxvY19UaHJlYWRDYWNoZTo6R2V0VGhyZWFkSGVhcCgpIHsKK2lu
bGluZSBUQ01hbGxvY1RocmVhZENhY2hlKiBUQ01hbGxvY1RocmVhZENhY2hlOjpHZXRUaHJlYWRI
ZWFwKCkKK3sKICNpZmRlZiBIQVZFX1RMUwogICAgIC8vIF9fdGhyZWFkIGlzIGZhc3RlciwgYnV0
IG9ubHkgd2hlbiB0aGUga2VybmVsIHN1cHBvcnRzIGl0Ci0gIGlmIChLZXJuZWxTdXBwb3J0c1RM
UygpKQotICAgIHJldHVybiB0aHJlYWRsb2NhbF9oZWFwOworICAgIGlmIChLZXJuZWxTdXBwb3J0
c1RMUygpKQorICAgICAgICByZXR1cm4gdGhyZWFkbG9jYWxIZWFwOwogI2VsaWYgT1MoV0lORE9X
UykKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VENNYWxsb2NfVGhyZWFkQ2FjaGUqPihUbHNHZXRW
YWx1ZSh0bHNJbmRleCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxUQ01hbGxvY1RocmVhZENh
Y2hlKj4oVGxzR2V0VmFsdWUodGxzSW5kZXgpKTsKICNlbHNlCi0gICAgcmV0dXJuIHN0YXRpY19j
YXN0PFRDTWFsbG9jX1RocmVhZENhY2hlKj4ocHRocmVhZF9nZXRzcGVjaWZpYyhoZWFwX2tleSkp
OworICAgIHJldHVybiBzdGF0aWNfY2FzdDxUQ01hbGxvY1RocmVhZENhY2hlKj4ocHRocmVhZF9n
ZXRzcGVjaWZpYyhoZWFwX2tleSkpOwogI2VuZGlmCiB9CiAKLWlubGluZSBUQ01hbGxvY19UaHJl
YWRDYWNoZSogVENNYWxsb2NfVGhyZWFkQ2FjaGU6OkdldENhY2hlKCkgewotICBUQ01hbGxvY19U
aHJlYWRDYWNoZSogcHRyID0gTlVMTDsKLSAgaWYgKCF0c2RfaW5pdGVkKSB7Ci0gICAgSW5pdE1v
ZHVsZSgpOwotICB9IGVsc2UgewotICAgIHB0ciA9IEdldFRocmVhZEhlYXAoKTsKLSAgfQotICBp
ZiAocHRyID09IE5VTEwpIHB0ciA9IENyZWF0ZUNhY2hlSWZOZWNlc3NhcnkoKTsKLSAgcmV0dXJu
IHB0cjsKK2lubGluZSBUQ01hbGxvY1RocmVhZENhY2hlKiBUQ01hbGxvY1RocmVhZENhY2hlOjpH
ZXRDYWNoZSgpCit7CisgICAgVENNYWxsb2NUaHJlYWRDYWNoZSogcHRyID0gMDsKKyAgICBpZiAo
IXRzZEluaXRlZCkKKyAgICAgICAgSW5pdE1vZHVsZSgpOworICAgIGVsc2UKKyAgICAgICAgcHRy
ID0gR2V0VGhyZWFkSGVhcCgpOworICAgIGlmICghcHRyKQorICAgICAgICBwdHIgPSBDcmVhdGVD
YWNoZUlmTmVjZXNzYXJ5KCk7CisgICAgcmV0dXJuIHB0cjsKIH0KIAotLy8gSW4gZGVsZXRpb24g
cGF0aHMsIHdlIGRvIG5vdCB0cnkgdG8gY3JlYXRlIGEgdGhyZWFkLWNhY2hlLiAgVGhpcyBpcwor
Ly8gSW4gZGVsZXRpb24gcGF0aHMsIHdlIGRvIG5vdCB0cnkgdG8gY3JlYXRlIGEgdGhyZWFkLWNh
Y2hlLiBUaGlzIGlzCiAvLyBiZWNhdXNlIHdlIG1heSBiZSBpbiB0aGUgdGhyZWFkIGRlc3RydWN0
aW9uIGNvZGUgYW5kIG1heSBoYXZlCiAvLyBhbHJlYWR5IGNsZWFuZWQgdXAgdGhlIGNhY2hlIGZv
ciB0aGlzIHRocmVhZC4KLWlubGluZSBUQ01hbGxvY19UaHJlYWRDYWNoZSogVENNYWxsb2NfVGhy
ZWFkQ2FjaGU6OkdldENhY2hlSWZQcmVzZW50KCkgewotICBpZiAoIXRzZF9pbml0ZWQpIHJldHVy
biBOVUxMOwotICB2b2lkKiBjb25zdCBwID0gR2V0VGhyZWFkSGVhcCgpOwotICByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDxUQ01hbGxvY19UaHJlYWRDYWNoZSo+KHApOworaW5saW5lIFRDTWFsbG9j
VGhyZWFkQ2FjaGUqIFRDTWFsbG9jVGhyZWFkQ2FjaGU6OkdldENhY2hlSWZQcmVzZW50KCkKK3sK
KyAgICBpZiAoIXRzZEluaXRlZCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgdm9pZCogY29uc3Qg
cCA9IEdldFRocmVhZEhlYXAoKTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUQ01hbGxv
Y1RocmVhZENhY2hlKj4ocCk7CiB9CiAKLXZvaWQgVENNYWxsb2NfVGhyZWFkQ2FjaGU6OkluaXRU
U0QoKSB7Ci0gIEFTU0VSVCghdHNkX2luaXRlZCk7Cit2b2lkIFRDTWFsbG9jVGhyZWFkQ2FjaGU6
OkluaXRUU0QoKQoreworICAgIEFTU0VSVCghdHNkSW5pdGVkKTsKICNpZiBVU0UoUFRIUkVBRF9H
RVRTUEVDSUZJQ19ESVJFQ1QpCi0gIHB0aHJlYWRfa2V5X2luaXRfbnAoaGVhcF9rZXksIERlc3Ry
b3lUaHJlYWRDYWNoZSk7CisgICAgcHRocmVhZF9rZXlfaW5pdF9ucChoZWFwX2tleSwgRGVzdHJv
eVRocmVhZENhY2hlKTsKICNlbHNlCi0gIHB0aHJlYWRfa2V5X2NyZWF0ZSgmaGVhcF9rZXksIERl
c3Ryb3lUaHJlYWRDYWNoZSk7CisgICAgcHRocmVhZF9rZXlfY3JlYXRlKCZoZWFwX2tleSwgRGVz
dHJveVRocmVhZENhY2hlKTsKICNlbmRpZgogI2lmIE9TKFdJTkRPV1MpCi0gIHRsc0luZGV4ID0g
VGxzQWxsb2MoKTsKKyAgICB0bHNJbmRleCA9IFRsc0FsbG9jKCk7CiAjZW5kaWYKLSAgdHNkX2lu
aXRlZCA9IHRydWU7CisgICAgdHNkSW5pdGVkID0gdHJ1ZTsKICAgICAKICNpZiAhT1MoV0lORE9X
UykKLSAgLy8gV2UgbWF5IGhhdmUgdXNlZCBhIGZha2UgcHRocmVhZF90IGZvciB0aGUgbWFpbiB0
aHJlYWQuICBGaXggaXQuCi0gIHB0aHJlYWRfdCB6ZXJvOwotICBtZW1zZXQoJnplcm8sIDAsIHNp
emVvZih6ZXJvKSk7CisgICAgLy8gV2UgbWF5IGhhdmUgdXNlZCBhIGZha2UgcHRocmVhZF90IGZv
ciB0aGUgbWFpbiB0aHJlYWQuIEZpeCBpdC4KKyAgICBwdGhyZWFkX3QgemVybzsKKyAgICBtZW1z
ZXQoJnplcm8sIDAsIHNpemVvZih6ZXJvKSk7CiAjZW5kaWYKICNpZm5kZWYgV1RGX0NIQU5HRVMK
LSAgU3BpbkxvY2tIb2xkZXIgaCgmcGFnZWhlYXBfbG9jayk7CisgICAgU3BpbkxvY2tIb2xkZXIg
aCgmcGFnZWhlYXBMb2NrKTsKICNlbHNlCi0gIEFTU0VSVChwYWdlaGVhcF9sb2NrLklzSGVsZCgp
KTsKKyAgICBBU1NFUlQocGFnZWhlYXBMb2NrLklzSGVsZCgpKTsKICNlbmRpZgotICBmb3IgKFRD
TWFsbG9jX1RocmVhZENhY2hlKiBoID0gdGhyZWFkX2hlYXBzOyBoICE9IE5VTEw7IGggPSBoLT5u
ZXh0XykgeworICAgIGZvciAoVENNYWxsb2NUaHJlYWRDYWNoZSogaCA9IHRocmVhZEhlYXBzOyBo
OyBoID0gaC0+bmV4dCkKICNpZiBPUyhXSU5ET1dTKQotICAgIGlmIChoLT50aWRfID09IDApIHsK
LSAgICAgIGgtPnRpZF8gPSBHZXRDdXJyZW50VGhyZWFkSWQoKTsKLSAgICB9CisgICAgICAgIGlm
ICghaC0+dGlkKQorICAgICAgICAgICAgaC0+dGlkID0gR2V0Q3VycmVudFRocmVhZElkKCk7CiAj
ZWxzZQotICAgIGlmIChwdGhyZWFkX2VxdWFsKGgtPnRpZF8sIHplcm8pKSB7Ci0gICAgICBoLT50
aWRfID0gcHRocmVhZF9zZWxmKCk7Ci0gICAgfQorICAgICAgICBpZiAocHRocmVhZF9lcXVhbCho
LT50aWQsIHplcm8pKQorICAgICAgICAgICAgaC0+dGlkID0gcHRocmVhZF9zZWxmKCk7CiAjZW5k
aWYKLSAgfQogfQogCi1UQ01hbGxvY19UaHJlYWRDYWNoZSogVENNYWxsb2NfVGhyZWFkQ2FjaGU6
OkNyZWF0ZUNhY2hlSWZOZWNlc3NhcnkoKSB7Ci0gIC8vIEluaXRpYWxpemUgcGVyLXRocmVhZCBk
YXRhIGlmIG5lY2Vzc2FyeQotICBUQ01hbGxvY19UaHJlYWRDYWNoZSogaGVhcCA9IE5VTEw7Ci0g
IHsKLSAgICBTcGluTG9ja0hvbGRlciBoKCZwYWdlaGVhcF9sb2NrKTsKK1RDTWFsbG9jVGhyZWFk
Q2FjaGUqIFRDTWFsbG9jVGhyZWFkQ2FjaGU6OkNyZWF0ZUNhY2hlSWZOZWNlc3NhcnkoKQorewor
ICAgIC8vIEluaXRpYWxpemUgcGVyLXRocmVhZCBkYXRhIGlmIG5lY2Vzc2FyeQorICAgIFRDTWFs
bG9jVGhyZWFkQ2FjaGUqIGhlYXAgPSAwOworICAgIHsKKyAgICAgICAgU3BpbkxvY2tIb2xkZXIg
aCgmcGFnZWhlYXBMb2NrKTsKIAogI2lmIE9TKFdJTkRPV1MpCi0gICAgRFdPUkQgbWU7Ci0gICAg
aWYgKCF0c2RfaW5pdGVkKSB7Ci0gICAgICBtZSA9IDA7Ci0gICAgfSBlbHNlIHsKLSAgICAgIG1l
ID0gR2V0Q3VycmVudFRocmVhZElkKCk7Ci0gICAgfQorICAgICAgICBEV09SRCBtZTsKKyAgICAg
ICAgaWYgKCF0c2RJbml0ZWQpCisgICAgICAgICAgICBtZSA9IDA7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIG1lID0gR2V0Q3VycmVudFRocmVhZElkKCk7CiAjZWxzZQotICAgIC8vIEVhcmx5
IG9uIGluIGdsaWJjJ3MgbGlmZSwgd2UgY2Fubm90IGV2ZW4gY2FsbCBwdGhyZWFkX3NlbGYoKQot
ICAgIHB0aHJlYWRfdCBtZTsKLSAgICBpZiAoIXRzZF9pbml0ZWQpIHsKLSAgICAgIG1lbXNldCgm
bWUsIDAsIHNpemVvZihtZSkpOwotICAgIH0gZWxzZSB7Ci0gICAgICBtZSA9IHB0aHJlYWRfc2Vs
ZigpOwotICAgIH0KKyAgICAgICAgLy8gRWFybHkgb24gaW4gZ2xpYmMncyBsaWZlLCB3ZSBjYW5u
b3QgZXZlbiBjYWxsIHB0aHJlYWRfc2VsZigpCisgICAgICAgIHB0aHJlYWRfdCBtZTsKKyAgICAg
ICAgaWYgKCF0c2RJbml0ZWQpCisgICAgICAgICAgICBtZW1zZXQoJm1lLCAwLCBzaXplb2YobWUp
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbWUgPSBwdGhyZWFkX3NlbGYoKTsKICNlbmRp
ZgogCi0gICAgLy8gVGhpcyBtYXkgYmUgYSByZWN1cnNpdmUgbWFsbG9jIGNhbGwgZnJvbSBwdGhy
ZWFkX3NldHNwZWNpZmljKCkKLSAgICAvLyBJbiB0aGF0IGNhc2UsIHRoZSBoZWFwIGZvciB0aGlz
IHRocmVhZCBoYXMgYWxyZWFkeSBiZWVuIGNyZWF0ZWQKLSAgICAvLyBhbmQgYWRkZWQgdG8gdGhl
IGxpbmtlZCBsaXN0LiAgU28gd2Ugc2VhcmNoIGZvciB0aGF0IGZpcnN0LgotICAgIGZvciAoVENN
YWxsb2NfVGhyZWFkQ2FjaGUqIGggPSB0aHJlYWRfaGVhcHM7IGggIT0gTlVMTDsgaCA9IGgtPm5l
eHRfKSB7CisgICAgICAgIC8vIFRoaXMgbWF5IGJlIGEgcmVjdXJzaXZlIG1hbGxvYyBjYWxsIGZy
b20gcHRocmVhZF9zZXRzcGVjaWZpYygpCisgICAgICAgIC8vIEluIHRoYXQgY2FzZSwgdGhlIGhl
YXAgZm9yIHRoaXMgdGhyZWFkIGhhcyBhbHJlYWR5IGJlZW4gY3JlYXRlZAorICAgICAgICAvLyBh
bmQgYWRkZWQgdG8gdGhlIGxpbmtlZCBsaXN0LiBTbyB3ZSBzZWFyY2ggZm9yIHRoYXQgZmlyc3Qu
CisgICAgICAgIGZvciAoVENNYWxsb2NUaHJlYWRDYWNoZSogaCA9IHRocmVhZEhlYXBzOyBoOyBo
ID0gaC0+bmV4dCkgewogI2lmIE9TKFdJTkRPV1MpCi0gICAgICBpZiAoaC0+dGlkXyA9PSBtZSkg
eworICAgICAgICAgICAgaWYgKGgtPnRpZCA9PSBtZSkgewogI2Vsc2UKLSAgICAgIGlmIChwdGhy
ZWFkX2VxdWFsKGgtPnRpZF8sIG1lKSkgeworICAgICAgICAgICAgaWYgKHB0aHJlYWRfZXF1YWwo
aC0+dGlkLCBtZSkpIHsKICNlbmRpZgotICAgICAgICBoZWFwID0gaDsKLSAgICAgICAgYnJlYWs7
Ci0gICAgICB9Ci0gICAgfQorICAgICAgICAgICAgICAgIGhlYXAgPSBoOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CiAKLSAgICBpZiAoaGVhcCA9PSBO
VUxMKSBoZWFwID0gTmV3SGVhcChtZSk7Ci0gIH0KKyAgICAgICAgaWYgKCFoZWFwKQorICAgICAg
ICAgICAgaGVhcCA9IE5ld0hlYXAobWUpOworICAgIH0KIAotICAvLyBXZSBjYWxsIHB0aHJlYWRf
c2V0c3BlY2lmaWMoKSBvdXRzaWRlIHRoZSBsb2NrIGJlY2F1c2UgaXQgbWF5Ci0gIC8vIGNhbGwg
bWFsbG9jKCkgcmVjdXJzaXZlbHkuICBUaGUgcmVjdXJzaXZlIGNhbGwgd2lsbCBuZXZlciBnZXQK
LSAgLy8gaGVyZSBhZ2FpbiBiZWNhdXNlIGl0IHdpbGwgZmluZCB0aGUgYWxyZWFkeSBhbGxvY2F0
ZWQgaGVhcCBpbiB0aGUKLSAgLy8gbGlua2VkIGxpc3Qgb2YgaGVhcHMuCi0gIGlmICghaGVhcC0+
aW5fc2V0c3BlY2lmaWNfICYmIHRzZF9pbml0ZWQpIHsKLSAgICBoZWFwLT5pbl9zZXRzcGVjaWZp
Y18gPSB0cnVlOwotICAgIHNldFRocmVhZEhlYXAoaGVhcCk7Ci0gIH0KLSAgcmV0dXJuIGhlYXA7
CisgICAgLy8gV2UgY2FsbCBwdGhyZWFkX3NldHNwZWNpZmljKCkgb3V0c2lkZSB0aGUgbG9jayBi
ZWNhdXNlIGl0IG1heQorICAgIC8vIGNhbGwgbWFsbG9jKCkgcmVjdXJzaXZlbHkuIFRoZSByZWN1
cnNpdmUgY2FsbCB3aWxsIG5ldmVyIGdldAorICAgIC8vIGhlcmUgYWdhaW4gYmVjYXVzZSBpdCB3
aWxsIGZpbmQgdGhlIGFscmVhZHkgYWxsb2NhdGVkIGhlYXAgaW4gdGhlCisgICAgLy8gbGlua2Vk
IGxpc3Qgb2YgaGVhcHMuCisgICAgaWYgKCFoZWFwLT5pblNldHNwZWNpZmljICYmIHRzZEluaXRl
ZCkgeworICAgICAgICBoZWFwLT5pblNldHNwZWNpZmljID0gdHJ1ZTsKKyAgICAgICAgc2V0VGhy
ZWFkSGVhcChoZWFwKTsKKyAgICB9CisgICAgcmV0dXJuIGhlYXA7CiB9CiAKLXZvaWQgVENNYWxs
b2NfVGhyZWFkQ2FjaGU6OkJlY29tZUlkbGUoKSB7Ci0gIGlmICghdHNkX2luaXRlZCkgcmV0dXJu
OyAgICAgICAgICAgICAgLy8gTm8gY2FjaGVzIHlldAotICBUQ01hbGxvY19UaHJlYWRDYWNoZSog
aGVhcCA9IEdldFRocmVhZEhlYXAoKTsKLSAgaWYgKGhlYXAgPT0gTlVMTCkgcmV0dXJuOyAgICAg
ICAgICAgICAvLyBObyB0aHJlYWQgY2FjaGUgdG8gcmVtb3ZlCi0gIGlmIChoZWFwLT5pbl9zZXRz
cGVjaWZpY18pIHJldHVybjsgICAgLy8gRG8gbm90IGRpc3R1cmIgdGhlIGFjdGl2ZSBjYWxsZXIK
K3ZvaWQgVENNYWxsb2NUaHJlYWRDYWNoZTo6QmVjb21lSWRsZSgpCit7CisgICAgaWYgKCF0c2RJ
bml0ZWQpCisgICAgICAgIHJldHVybjsgLy8gTm8gY2FjaGVzIHlldAorICAgIFRDTWFsbG9jVGhy
ZWFkQ2FjaGUqIGhlYXAgPSBHZXRUaHJlYWRIZWFwKCk7CisgICAgaWYgKCFoZWFwKQorICAgICAg
ICByZXR1cm47IC8vIE5vIHRocmVhZCBjYWNoZSB0byByZW1vdmUKKyAgICBpZiAoaGVhcC0+aW5T
ZXRzcGVjaWZpYykKKyAgICAgICAgcmV0dXJuOyAvLyBEbyBub3QgZGlzdHVyYiB0aGUgYWN0aXZl
IGNhbGxlcgogCi0gIGhlYXAtPmluX3NldHNwZWNpZmljXyA9IHRydWU7Ci0gIHNldFRocmVhZEhl
YXAoTlVMTCk7CisgICAgaGVhcC0+aW5TZXRzcGVjaWZpYyA9IHRydWU7CisgICAgc2V0VGhyZWFk
SGVhcCgwKTsKICNpZmRlZiBIQVZFX1RMUwotICAvLyBBbHNvIHVwZGF0ZSB0aGUgY29weSBpbiBf
X3RocmVhZAotICB0aHJlYWRsb2NhbF9oZWFwID0gTlVMTDsKKyAgICAvLyBBbHNvIHVwZGF0ZSB0
aGUgY29weSBpbiBfX3RocmVhZAorICAgIHRocmVhZGxvY2FsSGVhcCA9IDA7CiAjZW5kaWYKLSAg
aGVhcC0+aW5fc2V0c3BlY2lmaWNfID0gZmFsc2U7Ci0gIGlmIChHZXRUaHJlYWRIZWFwKCkgPT0g
aGVhcCkgewotICAgIC8vIFNvbWVob3cgaGVhcCBnb3QgcmVpbnN0YXRlZCBieSBhIHJlY3Vyc2l2
ZSBjYWxsIHRvIG1hbGxvYwotICAgIC8vIGZyb20gcHRocmVhZF9zZXRzcGVjaWZpYy4gIFdlIGdp
dmUgdXAgaW4gdGhpcyBjYXNlLgotICAgIHJldHVybjsKLSAgfQorICAgIGhlYXAtPmluU2V0c3Bl
Y2lmaWMgPSBmYWxzZTsKKyAgICBpZiAoR2V0VGhyZWFkSGVhcCgpID09IGhlYXApIHsKKyAgICAg
ICAgLy8gU29tZWhvdyBoZWFwIGdvdCByZWluc3RhdGVkIGJ5IGEgcmVjdXJzaXZlIGNhbGwgdG8g
bWFsbG9jCisgICAgICAgIC8vIGZyb20gcHRocmVhZF9zZXRzcGVjaWZpYy4gV2UgZ2l2ZSB1cCBp
biB0aGlzIGNhc2UuCisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgLy8gV2UgY2FuIG5vdyBn
ZXQgcmlkIG9mIHRoZSBoZWFwCi0gIERlbGV0ZUNhY2hlKGhlYXApOworICAgIC8vIFdlIGNhbiBu
b3cgZ2V0IHJpZCBvZiB0aGUgaGVhcAorICAgIERlbGV0ZUNhY2hlKGhlYXApOwogfQogCi12b2lk
IFRDTWFsbG9jX1RocmVhZENhY2hlOjpEZXN0cm95VGhyZWFkQ2FjaGUodm9pZCogcHRyKSB7Ci0g
IC8vIE5vdGUgdGhhdCAicHRyIiBjYW5ub3QgYmUgTlVMTCBzaW5jZSBwdGhyZWFkIHByb21pc2Vz
IG5vdAotICAvLyB0byBpbnZva2UgdGhlIGRlc3RydWN0b3Igb24gTlVMTCB2YWx1ZXMsIGJ1dCBm
b3Igc2FmZXR5LAotICAvLyB3ZSBjaGVjayBhbnl3YXkuCi0gIGlmIChwdHIgPT0gTlVMTCkgcmV0
dXJuOwordm9pZCBUQ01hbGxvY1RocmVhZENhY2hlOjpEZXN0cm95VGhyZWFkQ2FjaGUodm9pZCog
cHRyKQoreworICAgIC8vIE5vdGUgdGhhdCAicHRyIiBjYW5ub3QgYmUgMCBzaW5jZSBwdGhyZWFk
IHByb21pc2VzIG5vdAorICAgIC8vIHRvIGludm9rZSB0aGUgZGVzdHJ1Y3RvciBvbiAwIHZhbHVl
cywgYnV0IGZvciBzYWZldHksCisgICAgLy8gd2UgY2hlY2sgYW55d2F5LgorICAgIGlmICghcHRy
KQorICAgICAgICByZXR1cm47CiAjaWZkZWYgSEFWRV9UTFMKLSAgLy8gUHJldmVudCBmYXN0IHBh
dGggb2YgR2V0VGhyZWFkSGVhcCgpIGZyb20gcmV0dXJuaW5nIGhlYXAuCi0gIHRocmVhZGxvY2Fs
X2hlYXAgPSBOVUxMOworICAgIC8vIFByZXZlbnQgZmFzdCBwYXRoIG9mIEdldFRocmVhZEhlYXAo
KSBmcm9tIHJldHVybmluZyBoZWFwLgorICAgIHRocmVhZGxvY2FsSGVhcCA9IDA7CiAjZW5kaWYK
LSAgRGVsZXRlQ2FjaGUocmVpbnRlcnByZXRfY2FzdDxUQ01hbGxvY19UaHJlYWRDYWNoZSo+KHB0
cikpOworICAgIERlbGV0ZUNhY2hlKHJlaW50ZXJwcmV0X2Nhc3Q8VENNYWxsb2NUaHJlYWRDYWNo
ZSo+KHB0cikpOwogfQogCi12b2lkIFRDTWFsbG9jX1RocmVhZENhY2hlOjpEZWxldGVDYWNoZShU
Q01hbGxvY19UaHJlYWRDYWNoZSogaGVhcCkgewotICAvLyBSZW1vdmUgYWxsIG1lbW9yeSBmcm9t
IGhlYXAKLSAgaGVhcC0+Q2xlYW51cCgpOwordm9pZCBUQ01hbGxvY1RocmVhZENhY2hlOjpEZWxl
dGVDYWNoZShUQ01hbGxvY1RocmVhZENhY2hlKiBoZWFwKQoreworICAgIC8vIFJlbW92ZSBhbGwg
bWVtb3J5IGZyb20gaGVhcAorICAgIGhlYXAtPkNsZWFudXAoKTsKIAotICAvLyBSZW1vdmUgZnJv
bSBsaW5rZWQgbGlzdAotICBTcGluTG9ja0hvbGRlciBoKCZwYWdlaGVhcF9sb2NrKTsKLSAgaWYg
KGhlYXAtPm5leHRfICE9IE5VTEwpIGhlYXAtPm5leHRfLT5wcmV2XyA9IGhlYXAtPnByZXZfOwot
ICBpZiAoaGVhcC0+cHJldl8gIT0gTlVMTCkgaGVhcC0+cHJldl8tPm5leHRfID0gaGVhcC0+bmV4
dF87Ci0gIGlmICh0aHJlYWRfaGVhcHMgPT0gaGVhcCkgdGhyZWFkX2hlYXBzID0gaGVhcC0+bmV4
dF87Ci0gIHRocmVhZF9oZWFwX2NvdW50LS07Ci0gIFJlY29tcHV0ZVRocmVhZENhY2hlU2l6ZSgp
OworICAgIC8vIFJlbW92ZSBmcm9tIGxpbmtlZCBsaXN0CisgICAgU3BpbkxvY2tIb2xkZXIgaCgm
cGFnZWhlYXBMb2NrKTsKKyAgICBpZiAoaGVhcC0+bmV4dCkKKyAgICAgICAgaGVhcC0+bmV4dC0+
cHJldiA9IGhlYXAtPnByZXY7CisgICAgaWYgKGhlYXAtPnByZXYpCisgICAgICAgIGhlYXAtPnBy
ZXYtPm5leHQgPSBoZWFwLT5uZXh0OworICAgIGlmICh0aHJlYWRIZWFwcyA9PSBoZWFwKQorICAg
ICAgICB0aHJlYWRIZWFwcyA9IGhlYXAtPm5leHQ7CisgICAgdGhyZWFkX2hlYXBfY291bnQtLTsK
KyAgICBSZWNvbXB1dGVUaHJlYWRDYWNoZVNpemUoKTsKIAotICB0aHJlYWRoZWFwX2FsbG9jYXRv
ci5EZWxldGUoaGVhcCk7CisgICAgdGhyZWFkaGVhcEFsbG9jYXRvci5EZWxldGUoaGVhcCk7CiB9
CiAKLXZvaWQgVENNYWxsb2NfVGhyZWFkQ2FjaGU6OlJlY29tcHV0ZVRocmVhZENhY2hlU2l6ZSgp
IHsKLSAgLy8gRGl2aWRlIGF2YWlsYWJsZSBzcGFjZSBhY3Jvc3MgdGhyZWFkcwotICBpbnQgbiA9
IHRocmVhZF9oZWFwX2NvdW50ID4gMCA/IHRocmVhZF9oZWFwX2NvdW50IDogMTsKLSAgc2l6ZV90
IHNwYWNlID0gb3ZlcmFsbF90aHJlYWRfY2FjaGVfc2l6ZSAvIG47Cit2b2lkIFRDTWFsbG9jVGhy
ZWFkQ2FjaGU6OlJlY29tcHV0ZVRocmVhZENhY2hlU2l6ZSgpCit7CisgICAgLy8gRGl2aWRlIGF2
YWlsYWJsZSBzcGFjZSBhY3Jvc3MgdGhyZWFkcworICAgIGludCBuID0gdGhyZWFkX2hlYXBfY291
bnQgPiAwID8gdGhyZWFkX2hlYXBfY291bnQgOiAxOworICAgIHNpemVfdCBzcGFjZSA9IG92ZXJh
bGxUaHJlYWRDYWNoZXNpemUgLyBuOwogCi0gIC8vIExpbWl0IHRvIGFsbG93ZWQgcmFuZ2UKLSAg
aWYgKHNwYWNlIDwga01pblRocmVhZENhY2hlU2l6ZSkgc3BhY2UgPSBrTWluVGhyZWFkQ2FjaGVT
aXplOwotICBpZiAoc3BhY2UgPiBrTWF4VGhyZWFkQ2FjaGVTaXplKSBzcGFjZSA9IGtNYXhUaHJl
YWRDYWNoZVNpemU7CisgICAgLy8gTGltaXQgdG8gYWxsb3dlZCByYW5nZQorICAgIGlmIChzcGFj
ZSA8IGtNaW5UaHJlYWRDYWNoZVNpemUpCisgICAgICAgIHNwYWNlID0ga01pblRocmVhZENhY2hl
U2l6ZTsKKyAgICBpZiAoc3BhY2UgPiBrTWF4VGhyZWFkQ2FjaGVTaXplKQorICAgICAgICBzcGFj
ZSA9IGtNYXhUaHJlYWRDYWNoZVNpemU7CiAKLSAgcGVyX3RocmVhZF9jYWNoZV9zaXplID0gc3Bh
Y2U7CisgICAgcGVyVGhyZWFkQ2FjaGVTaXplID0gc3BhY2U7CiB9CiAKLXZvaWQgVENNYWxsb2Nf
VGhyZWFkQ2FjaGU6OlByaW50KCkgY29uc3QgewotICBmb3IgKHNpemVfdCBjbCA9IDA7IGNsIDwg
a051bUNsYXNzZXM7ICsrY2wpIHsKLSAgICBNRVNTQUdFKCIgICAgICAlNSIgUFJJdVMgIiA6ICU0
ZCBsZW47ICU0ZCBsb1xuIiwKK3ZvaWQgVENNYWxsb2NUaHJlYWRDYWNoZTo6UHJpbnQoKSBjb25z
dAoreworICAgIGZvciAoc2l6ZV90IGNsID0gMDsgY2wgPCBrTnVtQ2xhc3NlczsgKytjbCkgewor
ICAgICAgICBNRVNTQUdFKCIgICAgICAlNSIgUFJJdVMgIiA6ICU0ZCBsZW47ICU0ZCBsb1xuIiwK
ICAgICAgICAgICAgIEJ5dGVTaXplRm9yQ2xhc3MoY2wpLAotICAgICAgICAgICAgbGlzdF9bY2xd
Lmxlbmd0aCgpLAotICAgICAgICAgICAgbGlzdF9bY2xdLmxvd3dhdGVybWFyaygpKTsKLSAgfQor
ICAgICAgICAgICAgbGlzdFtjbF0ubGVuZ3RoKCksCisgICAgICAgICAgICBsaXN0W2NsXS5sb3d3
YXRlcm1hcmsoKSk7CisgICAgfQogfQogCiAvLyBFeHRyYWN0IGludGVyZXN0aW5nIHN0YXRzCiBz
dHJ1Y3QgVENNYWxsb2NTdGF0cyB7Ci0gIHVpbnQ2NF90IHN5c3RlbV9ieXRlczsgICAgICAgIC8v
IEJ5dGVzIGFsbG9jZWQgZnJvbSBzeXN0ZW0KLSAgdWludDY0X3QgdGhyZWFkX2J5dGVzOyAgICAg
ICAgLy8gQnl0ZXMgaW4gdGhyZWFkIGNhY2hlcwotICB1aW50NjRfdCBjZW50cmFsX2J5dGVzOyAg
ICAgICAvLyBCeXRlcyBpbiBjZW50cmFsIGNhY2hlCi0gIHVpbnQ2NF90IHRyYW5zZmVyX2J5dGVz
OyAgICAgIC8vIEJ5dGVzIGluIGNlbnRyYWwgdHJhbnNmZXIgY2FjaGUKLSAgdWludDY0X3QgcGFn
ZWhlYXBfYnl0ZXM7ICAgICAgLy8gQnl0ZXMgaW4gcGFnZSBoZWFwCi0gIHVpbnQ2NF90IG1ldGFk
YXRhX2J5dGVzOyAgICAgIC8vIEJ5dGVzIGFsbG9jZWQgZm9yIG1ldGFkYXRhCisgICAgdWludDY0
X3Qgc3lzdGVtQnl0ZXM7IC8vIEJ5dGVzIGFsbG9jZWQgZnJvbSBzeXN0ZW0KKyAgICB1aW50NjRf
dCB0aHJlYWRCeXRlczsgLy8gQnl0ZXMgaW4gdGhyZWFkIGNhY2hlcworICAgIHVpbnQ2NF90IGNl
bnRyYWxCeXRlczsgLy8gQnl0ZXMgaW4gY2VudHJhbCBjYWNoZQorICAgIHVpbnQ2NF90IHRyYW5z
ZmVyQnl0ZXM7IC8vIEJ5dGVzIGluIGNlbnRyYWwgdHJhbnNmZXIgY2FjaGUKKyAgICB1aW50NjRf
dCBwYWdlaGVhcEJ5dGVzOyAvLyBCeXRlcyBpbiBwYWdlIGhlYXAKKyAgICB1aW50NjRfdCBtZXRh
ZGF0YUJ5dGVzOyAvLyBCeXRlcyBhbGxvY2VkIGZvciBtZXRhZGF0YQogfTsKIAogI2lmbmRlZiBX
VEZfQ0hBTkdFUwotLy8gR2V0IHN0YXRzIGludG8gInIiLiAgQWxzbyBnZXQgcGVyLXNpemUtY2xh
c3MgY291bnRzIGlmIGNsYXNzX2NvdW50ICE9IE5VTEwKLXN0YXRpYyB2b2lkIEV4dHJhY3RTdGF0
cyhUQ01hbGxvY1N0YXRzKiByLCB1aW50NjRfdCogY2xhc3NfY291bnQpIHsKLSAgci0+Y2VudHJh
bF9ieXRlcyA9IDA7Ci0gIHItPnRyYW5zZmVyX2J5dGVzID0gMDsKLSAgZm9yIChpbnQgY2wgPSAw
OyBjbCA8IGtOdW1DbGFzc2VzOyArK2NsKSB7Ci0gICAgY29uc3QgaW50IGxlbmd0aCA9IGNlbnRy
YWxfY2FjaGVbY2xdLmxlbmd0aCgpOwotICAgIGNvbnN0IGludCB0Y19sZW5ndGggPSBjZW50cmFs
X2NhY2hlW2NsXS50Y19sZW5ndGgoKTsKLSAgICByLT5jZW50cmFsX2J5dGVzICs9IHN0YXRpY19j
YXN0PHVpbnQ2NF90PihCeXRlU2l6ZUZvckNsYXNzKGNsKSkgKiBsZW5ndGg7Ci0gICAgci0+dHJh
bnNmZXJfYnl0ZXMgKz0KLSAgICAgIHN0YXRpY19jYXN0PHVpbnQ2NF90PihCeXRlU2l6ZUZvckNs
YXNzKGNsKSkgKiB0Y19sZW5ndGg7Ci0gICAgaWYgKGNsYXNzX2NvdW50KSBjbGFzc19jb3VudFtj
bF0gPSBsZW5ndGggKyB0Y19sZW5ndGg7Ci0gIH0KLQotICAvLyBBZGQgc3RhdHMgZnJvbSBwZXIt
dGhyZWFkIGhlYXBzCi0gIHItPnRocmVhZF9ieXRlcyA9IDA7Ci0gIHsgLy8gc2NvcGUKLSAgICBT
cGluTG9ja0hvbGRlciBoKCZwYWdlaGVhcF9sb2NrKTsKLSAgICBmb3IgKFRDTWFsbG9jX1RocmVh
ZENhY2hlKiBoID0gdGhyZWFkX2hlYXBzOyBoICE9IE5VTEw7IGggPSBoLT5uZXh0XykgewotICAg
ICAgci0+dGhyZWFkX2J5dGVzICs9IGgtPlNpemUoKTsKLSAgICAgIGlmIChjbGFzc19jb3VudCkg
ewotICAgICAgICBmb3IgKHNpemVfdCBjbCA9IDA7IGNsIDwga051bUNsYXNzZXM7ICsrY2wpIHsK
LSAgICAgICAgICBjbGFzc19jb3VudFtjbF0gKz0gaC0+ZnJlZWxpc3RfbGVuZ3RoKGNsKTsKKy8v
IEdldCBzdGF0cyBpbnRvICJyIi4gQWxzbyBnZXQgcGVyLXNpemUtY2xhc3MgY291bnRzIGlmIGNs
YXNzQ291bnQgIT0gMAorc3RhdGljIHZvaWQgRXh0cmFjdFN0YXRzKFRDTWFsbG9jU3RhdHMqIHIs
IHVpbnQ2NF90KiBjbGFzc0NvdW50KQoreworICAgIHItPmNlbnRyYWxCeXRlcyA9IDA7CisgICAg
ci0+dHJhbnNmZXJCeXRlcyA9IDA7CisgICAgZm9yIChpbnQgY2wgPSAwOyBjbCA8IGtOdW1DbGFz
c2VzOyArK2NsKSB7CisgICAgICAgIGNvbnN0IGludCBsZW5ndGggPSBjZW50cmFsQ2FjaGVbY2xd
Lmxlbmd0aCgpOworICAgICAgICBjb25zdCBpbnQgdGNMZW5ndGggPSBjZW50cmFsQ2FjaGVbY2xd
LnRjTGVuZ3RoKCk7CisgICAgICAgIHItPmNlbnRyYWxCeXRlcyArPSBzdGF0aWNfY2FzdDx1aW50
NjRfdD4oQnl0ZVNpemVGb3JDbGFzcyhjbCkpICogbGVuZ3RoOworICAgICAgICByLT50cmFuc2Zl
ckJ5dGVzICs9IHN0YXRpY19jYXN0PHVpbnQ2NF90PihCeXRlU2l6ZUZvckNsYXNzKGNsKSkgKiB0
Y0xlbmd0aDsKKyAgICAgICAgaWYgKGNsYXNzQ291bnQpCisgICAgICAgICAgICBjbGFzc0NvdW50
W2NsXSA9IGxlbmd0aCArIHRjTGVuZ3RoOworICAgIH0KKworICAgIC8vIEFkZCBzdGF0cyBmcm9t
IHBlci10aHJlYWQgaGVhcHMKKyAgICByLT50aHJlYWRCeXRlcyA9IDA7CisgICAgeyAvLyBzY29w
ZQorICAgICAgICBTcGluTG9ja0hvbGRlciBoKCZwYWdlaGVhcExvY2spOworICAgICAgICBmb3Ig
KFRDTWFsbG9jVGhyZWFkQ2FjaGUqIGggPSB0aHJlYWRIZWFwczsgaDsgaCA9IGgtPm5leHQpIHsK
KyAgICAgICAgICAgIHItPnRocmVhZEJ5dGVzICs9IGgtPlNpemUoKTsKKyAgICAgICAgICAgIGlm
IChjbGFzc0NvdW50KSB7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgY2wgPSAwOyBjbCA8
IGtOdW1DbGFzc2VzOyArK2NsKQorICAgICAgICAgICAgICAgICAgICBjbGFzc0NvdW50W2NsXSAr
PSBoLT5mcmVlbGlzdGxlbmd0aChjbCk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAg
IH0KICAgICB9Ci0gIH0KIAotICB7IC8vc2NvcGUKLSAgICBTcGluTG9ja0hvbGRlciBoKCZwYWdl
aGVhcF9sb2NrKTsKLSAgICByLT5zeXN0ZW1fYnl0ZXMgPSBwYWdlaGVhcC0+U3lzdGVtQnl0ZXMo
KTsKLSAgICByLT5tZXRhZGF0YV9ieXRlcyA9IG1ldGFkYXRhX3N5c3RlbV9ieXRlczsKLSAgICBy
LT5wYWdlaGVhcF9ieXRlcyA9IHBhZ2VoZWFwLT5GcmVlQnl0ZXMoKTsKLSAgfQorICAgIHsgLy8g
c2NvcGUKKyAgICAgICAgU3BpbkxvY2tIb2xkZXIgaCgmcGFnZWhlYXBMb2NrKTsKKyAgICAgICAg
ci0+c3lzdGVtQnl0ZXMgPSBwYWdlaGVhcC0+U3lzdGVtQnl0ZXMoKTsKKyAgICAgICAgci0+bWV0
YWRhdGFCeXRlcyA9IG1ldGFkYXRhU3lzdGVtQnl0ZXM7CisgICAgICAgIHItPnBhZ2VoZWFwQnl0
ZXMgPSBwYWdlaGVhcC0+RnJlZUJ5dGVzKCk7CisgICAgfQogfQogI2VuZGlmCiAKICNpZm5kZWYg
V1RGX0NIQU5HRVMKIC8vIFdSSVRFIHN0YXRzIHRvICJvdXQiCiBzdGF0aWMgdm9pZCBEdW1wU3Rh
dHMoVENNYWxsb2NfUHJpbnRlciogb3V0LCBpbnQgbGV2ZWwpIHsKLSAgVENNYWxsb2NTdGF0cyBz
dGF0czsKLSAgdWludDY0X3QgY2xhc3NfY291bnRba051bUNsYXNzZXNdOwotICBFeHRyYWN0U3Rh
dHMoJnN0YXRzLCAobGV2ZWwgPj0gMiA/IGNsYXNzX2NvdW50IDogTlVMTCkpOworICAgIFRDTWFs
bG9jU3RhdHMgc3RhdHM7CisgICAgdWludDY0X3QgY2xhc3NDb3VudFtrTnVtQ2xhc3Nlc107Cisg
ICAgRXh0cmFjdFN0YXRzKCZzdGF0cywgKGxldmVsID49IDIgPyBjbGFzc0NvdW50IDogMCkpOwor
CisgICAgaWYgKGxldmVsID49IDIpIHsKKyAgICAgICAgb3V0LT5wcmludGYoIi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CisgICAgICAgIHVpbnQ2
NF90IGN1bXVsYXRpdmUgPSAwOworICAgICAgICBmb3IgKGludCBjbCA9IDA7IGNsIDwga051bUNs
YXNzZXM7ICsrY2wpIHsKKyAgICAgICAgICAgIGlmIChjbGFzc0NvdW50W2NsXSA+IDApIHsKKyAg
ICAgICAgICAgICAgICB1aW50NjRfdCBjbGFzc0J5dGVzID0gY2xhc3NDb3VudFtjbF0gKiBCeXRl
U2l6ZUZvckNsYXNzKGNsKTsKKyAgICAgICAgICAgICAgICBjdW11bGF0aXZlICs9IGNsYXNzQnl0
ZXM7CisgICAgICAgICAgICAgICAgb3V0LT5wcmludGYoImNsYXNzICUzZCBbICU4IiBQUkl1UyAi
IGJ5dGVzIF0gOiAiCisgICAgICAgICAgICAgICAgICAgICIlOCIgUFJJdTY0ICIgb2JqczsgJTUu
MWYgTUI7ICU1LjFmIGN1bSBNQlxuIiwKKyAgICAgICAgICAgICAgICAgICAgY2wsIEJ5dGVTaXpl
Rm9yQ2xhc3MoY2wpLAorICAgICAgICAgICAgICAgICAgICBjbGFzc0NvdW50W2NsXSwKKyAgICAg
ICAgICAgICAgICAgICAgY2xhc3NCeXRlcyAvIDEwNDg1NzYuMCwKKyAgICAgICAgICAgICAgICAg
ICAgY3VtdWxhdGl2ZSAvIDEwNDg1NzYuMCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KIAot
ICBpZiAobGV2ZWwgPj0gMikgewotICAgIG91dC0+cHJpbnRmKCItLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwotICAgIHVpbnQ2NF90IGN1bXVsYXRp
dmUgPSAwOwotICAgIGZvciAoaW50IGNsID0gMDsgY2wgPCBrTnVtQ2xhc3NlczsgKytjbCkgewot
ICAgICAgaWYgKGNsYXNzX2NvdW50W2NsXSA+IDApIHsKLSAgICAgICAgdWludDY0X3QgY2xhc3Nf
Ynl0ZXMgPSBjbGFzc19jb3VudFtjbF0gKiBCeXRlU2l6ZUZvckNsYXNzKGNsKTsKLSAgICAgICAg
Y3VtdWxhdGl2ZSArPSBjbGFzc19ieXRlczsKLSAgICAgICAgb3V0LT5wcmludGYoImNsYXNzICUz
ZCBbICU4IiBQUkl1UyAiIGJ5dGVzIF0gOiAiCi0gICAgICAgICAgICAgICAgIiU4IiBQUkl1NjQg
IiBvYmpzOyAlNS4xZiBNQjsgJTUuMWYgY3VtIE1CXG4iLAotICAgICAgICAgICAgICAgIGNsLCBC
eXRlU2l6ZUZvckNsYXNzKGNsKSwKLSAgICAgICAgICAgICAgICBjbGFzc19jb3VudFtjbF0sCi0g
ICAgICAgICAgICAgICAgY2xhc3NfYnl0ZXMgLyAxMDQ4NTc2LjAsCi0gICAgICAgICAgICAgICAg
Y3VtdWxhdGl2ZSAvIDEwNDg1NzYuMCk7Ci0gICAgICB9CisgICAgICAgIFNwaW5Mb2NrSG9sZGVy
IGgoJnBhZ2VoZWFwTG9jayk7CisgICAgICAgIHBhZ2VoZWFwLT5EdW1wKG91dCk7CiAgICAgfQog
Ci0gICAgU3BpbkxvY2tIb2xkZXIgaCgmcGFnZWhlYXBfbG9jayk7Ci0gICAgcGFnZWhlYXAtPkR1
bXAob3V0KTsKLSAgfQotCi0gIGNvbnN0IHVpbnQ2NF90IGJ5dGVzX2luX3VzZSA9IHN0YXRzLnN5
c3RlbV9ieXRlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIHN0YXRzLnBhZ2Vo
ZWFwX2J5dGVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gc3RhdHMuY2VudHJh
bF9ieXRlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIHN0YXRzLnRyYW5zZmVy
X2J5dGVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gc3RhdHMudGhyZWFkX2J5
dGVzOworICAgIGNvbnN0IHVpbnQ2NF90IGJ5dGVzSW5Vc2UgPSBzdGF0cy5zeXN0ZW1CeXRlcwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIHN0YXRzLnBhZ2VoZWFwQnl0ZXMKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBzdGF0cy5jZW50cmFsQnl0ZXMKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBzdGF0cy50cmFuc2ZlckJ5dGVzCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC0gc3RhdHMudGhyZWFkQnl0ZXM7CiAKLSAgb3V0LT5w
cmludGYoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxu
IgorICAgIG91dC0+cHJpbnRmKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS1cbiIKICAgICAgICAgICAgICAgIk1BTExPQzogJTEyIiBQUkl1NjQgIiBIZWFw
IHNpemVcbiIKICAgICAgICAgICAgICAgIk1BTExPQzogJTEyIiBQUkl1NjQgIiBCeXRlcyBpbiB1
c2UgYnkgYXBwbGljYXRpb25cbiIKICAgICAgICAgICAgICAgIk1BTExPQzogJTEyIiBQUkl1NjQg
IiBCeXRlcyBmcmVlIGluIHBhZ2UgaGVhcFxuIgpAQCAtMzM3OSwxNSArMzQ3OCwxNSBAQCBzdGF0
aWMgdm9pZCBEdW1wU3RhdHMoVENNYWxsb2NfUHJpbnRlcioKICAgICAgICAgICAgICAgIk1BTExP
QzogJTEyIiBQUkl1NjQgIiBUaHJlYWQgaGVhcHMgaW4gdXNlXG4iCiAgICAgICAgICAgICAgICJN
QUxMT0M6ICUxMiIgUFJJdTY0ICIgTWV0YWRhdGEgYWxsb2NhdGVkXG4iCiAgICAgICAgICAgICAg
ICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIsCi0g
ICAgICAgICAgICAgIHN0YXRzLnN5c3RlbV9ieXRlcywKLSAgICAgICAgICAgICAgYnl0ZXNfaW5f
dXNlLAotICAgICAgICAgICAgICBzdGF0cy5wYWdlaGVhcF9ieXRlcywKLSAgICAgICAgICAgICAg
c3RhdHMuY2VudHJhbF9ieXRlcywKLSAgICAgICAgICAgICAgc3RhdHMudHJhbnNmZXJfYnl0ZXMs
Ci0gICAgICAgICAgICAgIHN0YXRzLnRocmVhZF9ieXRlcywKLSAgICAgICAgICAgICAgdWludDY0
X3Qoc3Bhbl9hbGxvY2F0b3IuaW51c2UoKSksCi0gICAgICAgICAgICAgIHVpbnQ2NF90KHRocmVh
ZGhlYXBfYWxsb2NhdG9yLmludXNlKCkpLAotICAgICAgICAgICAgICBzdGF0cy5tZXRhZGF0YV9i
eXRlcyk7CisgICAgICAgICAgICAgIHN0YXRzLnN5c3RlbUJ5dGVzLAorICAgICAgICAgICAgICBi
eXRlc0luVXNlLAorICAgICAgICAgICAgICBzdGF0cy5wYWdlaGVhcEJ5dGVzLAorICAgICAgICAg
ICAgICBzdGF0cy5jZW50cmFsQnl0ZXMsCisgICAgICAgICAgICAgIHN0YXRzLnRyYW5zZmVyQnl0
ZXMsCisgICAgICAgICAgICAgIHN0YXRzLnRocmVhZEJ5dGVzLAorICAgICAgICAgICAgICB1aW50
NjRfdChzcGFuQWxsb2NhdG9yLmludXNlKCkpLAorICAgICAgICAgICAgICB1aW50NjRfdCh0aHJl
YWRoZWFwQWxsb2NhdG9yLmludXNlKCkpLAorICAgICAgICAgICAgICBzdGF0cy5tZXRhZGF0YUJ5
dGVzKTsKIH0KIAogc3RhdGljIHZvaWQgUHJpbnRTdGF0cyhpbnQgbGV2ZWwpIHsKQEAgLTM0MDAs
NDUgKzM0OTksNDMgQEAgc3RhdGljIHZvaWQgUHJpbnRTdGF0cyhpbnQgbGV2ZWwpIHsKIH0KIAog
c3RhdGljIHZvaWQqKiBEdW1wU3RhY2tUcmFjZXMoKSB7Ci0gIC8vIENvdW50IGhvdyBtdWNoIHNw
YWNlIHdlIG5lZWQKLSAgaW50IG5lZWRlZF9zbG90cyA9IDA7Ci0gIHsKLSAgICBTcGluTG9ja0hv
bGRlciBoKCZwYWdlaGVhcF9sb2NrKTsKLSAgICBmb3IgKFNwYW4qIHMgPSBzYW1wbGVkX29iamVj
dHMubmV4dDsgcyAhPSAmc2FtcGxlZF9vYmplY3RzOyBzID0gcy0+bmV4dCkgewotICAgICAgU3Rh
Y2tUcmFjZSogc3RhY2sgPSByZWludGVycHJldF9jYXN0PFN0YWNrVHJhY2UqPihzLT5vYmplY3Rz
KTsKLSAgICAgIG5lZWRlZF9zbG90cyArPSAzICsgc3RhY2stPmRlcHRoOworICAgIC8vIENvdW50
IGhvdyBtdWNoIHNwYWNlIHdlIG5lZWQKKyAgICBpbnQgbmVlZGVkU2xvdHMgPSAwOworICAgIHsK
KyAgICAgICAgU3BpbkxvY2tIb2xkZXIgaCgmcGFnZWhlYXBMb2NrKTsKKyAgICAgICAgZm9yIChT
cGFuKiBzID0gc2FtcGxlZE9iamVjdHMubmV4dDsgcyAhPSAmc2FtcGxlZE9iamVjdHM7IHMgPSBz
LT5uZXh0KSB7CisgICAgICAgICAgICBTdGFja1RyYWNlKiBzdGFjayA9IHJlaW50ZXJwcmV0X2Nh
c3Q8U3RhY2tUcmFjZSo+KHMtPm9iamVjdHMpOworICAgICAgICAgICAgbmVlZGVkU2xvdHMgKz0g
MyArIHN0YWNrLT5kZXB0aDsKKyAgICAgICAgfQorICAgICAgICBuZWVkZWRTbG90cyArPSAxMDA7
IC8vIFNsb3AgaW4gY2FzZSBzYW1wbGUgZ3Jvd3MKKyAgICAgICAgbmVlZGVkU2xvdHMgKz0gbmVl
ZGVkU2xvdHMgLyA4OyAvLyBBbiBleHRyYSAxMi41JSBzbG9wCiAgICAgfQotICAgIG5lZWRlZF9z
bG90cyArPSAxMDA7ICAgICAgICAgICAgLy8gU2xvcCBpbiBjYXNlIHNhbXBsZSBncm93cwotICAg
IG5lZWRlZF9zbG90cyArPSBuZWVkZWRfc2xvdHMvODsgLy8gQW4gZXh0cmEgMTIuNSUgc2xvcAot
ICB9CiAKLSAgdm9pZCoqIHJlc3VsdCA9IG5ldyB2b2lkKltuZWVkZWRfc2xvdHNdOwotICBpZiAo
cmVzdWx0ID09IE5VTEwpIHsKLSAgICBNRVNTQUdFKCJ0Y21hbGxvYzogY291bGQgbm90IGFsbG9j
YXRlICVkIHNsb3RzIGZvciBzdGFjayB0cmFjZXNcbiIsCi0gICAgICAgICAgICBuZWVkZWRfc2xv
dHMpOwotICAgIHJldHVybiBOVUxMOwotICB9CisgICAgdm9pZCoqIHJlc3VsdCA9IG5ldyB2b2lk
KltuZWVkZWRTbG90c107CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgTUVTU0FHRSgidGNt
YWxsb2M6IGNvdWxkIG5vdCBhbGxvY2F0ZSAlZCBzbG90cyBmb3Igc3RhY2sgdHJhY2VzXG4iLAor
ICAgICAgICAgICAgbmVlZGVkU2xvdHMpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAg
ICBTcGluTG9ja0hvbGRlciBoKCZwYWdlaGVhcExvY2spOworICAgIGludCB1c2VkU2xvdHMgPSAw
OworICAgIGZvciAoU3BhbiogcyA9IHNhbXBsZWRPYmplY3RzLm5leHQ7IHMgIT0gJnNhbXBsZWRP
YmplY3RzOyBzID0gcy0+bmV4dCkgeworICAgICAgICBBU1NFUlQodXNlZFNsb3RzIDwgbmVlZGVk
U2xvdHMpOyAvLyBOZWVkIHRvIGxlYXZlIHJvb20gZm9yIHRlcm1pbmF0b3IKKyAgICAgICAgU3Rh
Y2tUcmFjZSogc3RhY2sgPSByZWludGVycHJldF9jYXN0PFN0YWNrVHJhY2UqPihzLT5vYmplY3Rz
KTsKKyAgICAgICAgaWYgKHVzZWRTbG90cyArIDMgKyBzdGFjay0+ZGVwdGggPj0gbmVlZGVkU2xv
dHMpCisgICAgICAgICAgICAvLyBObyBtb3JlIHJvb20KKyAgICAgICAgICAgIGJyZWFrOwogCi0g
IFNwaW5Mb2NrSG9sZGVyIGgoJnBhZ2VoZWFwX2xvY2spOwotICBpbnQgdXNlZF9zbG90cyA9IDA7
Ci0gIGZvciAoU3BhbiogcyA9IHNhbXBsZWRfb2JqZWN0cy5uZXh0OyBzICE9ICZzYW1wbGVkX29i
amVjdHM7IHMgPSBzLT5uZXh0KSB7Ci0gICAgQVNTRVJUKHVzZWRfc2xvdHMgPCBuZWVkZWRfc2xv
dHMpOyAgLy8gTmVlZCB0byBsZWF2ZSByb29tIGZvciB0ZXJtaW5hdG9yCi0gICAgU3RhY2tUcmFj
ZSogc3RhY2sgPSByZWludGVycHJldF9jYXN0PFN0YWNrVHJhY2UqPihzLT5vYmplY3RzKTsKLSAg
ICBpZiAodXNlZF9zbG90cyArIDMgKyBzdGFjay0+ZGVwdGggPj0gbmVlZGVkX3Nsb3RzKSB7Ci0g
ICAgICAvLyBObyBtb3JlIHJvb20KLSAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJlc3VsdFt1
c2VkX3Nsb3RzKzBdID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0
cl90PigxKSk7Ci0gICAgcmVzdWx0W3VzZWRfc2xvdHMrMV0gPSByZWludGVycHJldF9jYXN0PHZv
aWQqPihzdGFjay0+c2l6ZSk7Ci0gICAgcmVzdWx0W3VzZWRfc2xvdHMrMl0gPSByZWludGVycHJl
dF9jYXN0PHZvaWQqPihzdGFjay0+ZGVwdGgpOwotICAgIGZvciAoaW50IGQgPSAwOyBkIDwgc3Rh
Y2stPmRlcHRoOyBkKyspIHsKLSAgICAgIHJlc3VsdFt1c2VkX3Nsb3RzKzMrZF0gPSBzdGFjay0+
c3RhY2tbZF07CisgICAgICAgIHJlc3VsdFt1c2VkU2xvdHMrMF0gPSByZWludGVycHJldF9jYXN0
PHZvaWQqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEpKTsKKyAgICAgICAgcmVzdWx0W3VzZWRT
bG90cysxXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN0YWNrLT5zaXplKTsKKyAgICAgICAg
cmVzdWx0W3VzZWRTbG90cysyXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN0YWNrLT5kZXB0
aCk7CisgICAgICAgIGZvciAoaW50IGQgPSAwOyBkIDwgc3RhY2stPmRlcHRoOyBkKyspCisgICAg
ICAgICAgICByZXN1bHRbdXNlZFNsb3RzKzMrZF0gPSBzdGFjay0+c3RhY2tbZF07CisgICAgICAg
IHVzZWRTbG90cyArPSAzICsgc3RhY2stPmRlcHRoOwogICAgIH0KLSAgICB1c2VkX3Nsb3RzICs9
IDMgKyBzdGFjay0+ZGVwdGg7Ci0gIH0KLSAgcmVzdWx0W3VzZWRfc2xvdHNdID0gcmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PigwKSk7Ci0gIHJldHVybiByZXN1
bHQ7CisgICAgcmVzdWx0W3VzZWRTbG90c10gPSByZWludGVycHJldF9jYXN0PHZvaWQqPihzdGF0
aWNfY2FzdDx1aW50cHRyX3Q+KDApKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogI2VuZGlmCiAK
QEAgLTM0NDYsMTAzICszNTQzLDExMCBAQCBzdGF0aWMgdm9pZCoqIER1bXBTdGFja1RyYWNlcygp
IHsKIAogLy8gVENNYWxsb2MncyBzdXBwb3J0IGZvciBleHRyYSBtYWxsb2MgaW50ZXJmYWNlcwog
Y2xhc3MgVENNYWxsb2NJbXBsZW1lbnRhdGlvbiA6IHB1YmxpYyBNYWxsb2NFeHRlbnNpb24gewot
IHB1YmxpYzoKLSAgdmlydHVhbCB2b2lkIEdldFN0YXRzKGNoYXIqIGJ1ZmZlciwgaW50IGJ1ZmZl
cl9sZW5ndGgpIHsKLSAgICBBU1NFUlQoYnVmZmVyX2xlbmd0aCA+IDApOwotICAgIFRDTWFsbG9j
X1ByaW50ZXIgcHJpbnRlcihidWZmZXIsIGJ1ZmZlcl9sZW5ndGgpOwotCi0gICAgLy8gUHJpbnQg
bGV2ZWwgb25lIHN0YXRzIHVubGVzcyBsb3RzIG9mIHNwYWNlIGlzIGF2YWlsYWJsZQotICAgIGlm
IChidWZmZXJfbGVuZ3RoIDwgMTAwMDApIHsKLSAgICAgIER1bXBTdGF0cygmcHJpbnRlciwgMSk7
Ci0gICAgfSBlbHNlIHsKLSAgICAgIER1bXBTdGF0cygmcHJpbnRlciwgMik7CitwdWJsaWM6Cisg
ICAgdmlydHVhbCB2b2lkIEdldFN0YXRzKGNoYXIqIGJ1ZmZlciwgaW50IGJ1ZmZlckxlbmd0aCkK
KyAgICB7CisgICAgICAgIEFTU0VSVChidWZmZXJMZW5ndGggPiAwKTsKKyAgICAgICAgVENNYWxs
b2NfUHJpbnRlciBwcmludGVyKGJ1ZmZlciwgYnVmZmVyTGVuZ3RoKTsKKworICAgICAgICAvLyBQ
cmludCBsZXZlbCBvbmUgc3RhdHMgdW5sZXNzIGxvdHMgb2Ygc3BhY2UgaXMgYXZhaWxhYmxlCisg
ICAgICAgIGlmIChidWZmZXJMZW5ndGggPCAxMDAwMCkKKyAgICAgICAgICAgIER1bXBTdGF0cygm
cHJpbnRlciwgMSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIER1bXBTdGF0cygmcHJpbnRl
ciwgMik7CiAgICAgfQotICB9CiAKLSAgdmlydHVhbCB2b2lkKiogUmVhZFN0YWNrVHJhY2VzKCkg
ewotICAgIHJldHVybiBEdW1wU3RhY2tUcmFjZXMoKTsKLSAgfQorICAgIHZpcnR1YWwgdm9pZCoq
IFJlYWRTdGFja1RyYWNlcygpCisgICAgeworICAgICAgICByZXR1cm4gRHVtcFN0YWNrVHJhY2Vz
KCk7CisgICAgfQogCi0gIHZpcnR1YWwgYm9vbCBHZXROdW1lcmljUHJvcGVydHkoY29uc3QgY2hh
ciogbmFtZSwgc2l6ZV90KiB2YWx1ZSkgewotICAgIEFTU0VSVChuYW1lICE9IE5VTEwpOworICAg
IHZpcnR1YWwgYm9vbCBHZXROdW1lcmljUHJvcGVydHkoY29uc3QgY2hhciogbmFtZSwgc2l6ZV90
KiB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChuYW1lKTsKIAotICAgIGlmIChzdHJjbXAo
bmFtZSwgImdlbmVyaWMuY3VycmVudF9hbGxvY2F0ZWRfYnl0ZXMiKSA9PSAwKSB7Ci0gICAgICBU
Q01hbGxvY1N0YXRzIHN0YXRzOwotICAgICAgRXh0cmFjdFN0YXRzKCZzdGF0cywgTlVMTCk7Ci0g
ICAgICAqdmFsdWUgPSBzdGF0cy5zeXN0ZW1fYnl0ZXMKLSAgICAgICAgICAgICAgIC0gc3RhdHMu
dGhyZWFkX2J5dGVzCi0gICAgICAgICAgICAgICAtIHN0YXRzLmNlbnRyYWxfYnl0ZXMKLSAgICAg
ICAgICAgICAgIC0gc3RhdHMucGFnZWhlYXBfYnl0ZXM7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICBpZiAoc3RyY21wKG5hbWUsICJnZW5lcmljLmhlYXBfc2l6ZSIpID09IDApIHsK
LSAgICAgIFRDTWFsbG9jU3RhdHMgc3RhdHM7Ci0gICAgICBFeHRyYWN0U3RhdHMoJnN0YXRzLCBO
VUxMKTsKLSAgICAgICp2YWx1ZSA9IHN0YXRzLnN5c3RlbV9ieXRlczsKLSAgICAgIHJldHVybiB0
cnVlOwotICAgIH0KLQotICAgIGlmIChzdHJjbXAobmFtZSwgInRjbWFsbG9jLnNsYWNrX2J5dGVz
IikgPT0gMCkgewotICAgICAgLy8gV2UgYXNzdW1lIHRoYXQgYnl0ZXMgaW4gdGhlIHBhZ2UgaGVh
cCBhcmUgbm90IGZyYWdtZW50ZWQgdG9vCi0gICAgICAvLyBiYWRseSwgYW5kIGFyZSB0aGVyZWZv
cmUgYXZhaWxhYmxlIGZvciBhbGxvY2F0aW9uLgotICAgICAgU3BpbkxvY2tIb2xkZXIgbCgmcGFn
ZWhlYXBfbG9jayk7Ci0gICAgICAqdmFsdWUgPSBwYWdlaGVhcC0+RnJlZUJ5dGVzKCk7Ci0gICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoc3RyY21wKG5hbWUsICJ0Y21hbGxvYy5t
YXhfdG90YWxfdGhyZWFkX2NhY2hlX2J5dGVzIikgPT0gMCkgewotICAgICAgU3BpbkxvY2tIb2xk
ZXIgbCgmcGFnZWhlYXBfbG9jayk7Ci0gICAgICAqdmFsdWUgPSBvdmVyYWxsX3RocmVhZF9jYWNo
ZV9zaXplOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKHN0cmNtcChuYW1l
LCAidGNtYWxsb2MuY3VycmVudF90b3RhbF90aHJlYWRfY2FjaGVfYnl0ZXMiKSA9PSAwKSB7Ci0g
ICAgICBUQ01hbGxvY1N0YXRzIHN0YXRzOwotICAgICAgRXh0cmFjdFN0YXRzKCZzdGF0cywgTlVM
TCk7Ci0gICAgICAqdmFsdWUgPSBzdGF0cy50aHJlYWRfYnl0ZXM7Ci0gICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9CisgICAgICAgIGlmICghc3RyY21wKG5hbWUsICJnZW5lcmljLmN1cnJlbnRfYWxs
b2NhdGVkX2J5dGVzIikpIHsKKyAgICAgICAgICAgIFRDTWFsbG9jU3RhdHMgc3RhdHM7CisgICAg
ICAgICAgICBFeHRyYWN0U3RhdHMoJnN0YXRzLCAwKTsKKyAgICAgICAgICAgICp2YWx1ZSA9IHN0
YXRzLnN5c3RlbUJ5dGVzCisgICAgICAgICAgICAgICAgLSBzdGF0cy50aHJlYWRCeXRlcworICAg
ICAgICAgICAgICAgIC0gc3RhdHMuY2VudHJhbEJ5dGVzCisgICAgICAgICAgICAgICAgLSBzdGF0
cy5wYWdlaGVhcEJ5dGVzOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KIAot
ICAgIHJldHVybiBmYWxzZTsKLSAgfQorICAgICAgICBpZiAoIXN0cmNtcChuYW1lLCAiZ2VuZXJp
Yy5oZWFwc2l6ZSIpKSB7CisgICAgICAgICAgICBUQ01hbGxvY1N0YXRzIHN0YXRzOworICAgICAg
ICAgICAgRXh0cmFjdFN0YXRzKCZzdGF0cywgMCk7CisgICAgICAgICAgICAqdmFsdWUgPSBzdGF0
cy5zeXN0ZW1CeXRlczsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKCFzdHJjbXAobmFtZSwgInRjbWFsbG9jLnNsYWNrX2J5dGVzIikpIHsKKyAgICAg
ICAgICAgIC8vIFdlIGFzc3VtZSB0aGF0IGJ5dGVzIGluIHRoZSBwYWdlIGhlYXAgYXJlIG5vdCBm
cmFnbWVudGVkIHRvbworICAgICAgICAgICAgLy8gYmFkbHksIGFuZCBhcmUgdGhlcmVmb3JlIGF2
YWlsYWJsZSBmb3IgYWxsb2NhdGlvbi4KKyAgICAgICAgICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2so
JnBhZ2VoZWFwTG9jayk7CisgICAgICAgICAgICAqdmFsdWUgPSBwYWdlaGVhcC0+RnJlZUJ5dGVz
KCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgh
c3RyY21wKG5hbWUsICJ0Y21hbGxvYy5tYXhfdG90YWxfdGhyZWFkX2NhY2hlX2J5dGVzIikpIHsK
KyAgICAgICAgICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2soJnBhZ2VoZWFwTG9jayk7CisgICAgICAg
ICAgICAqdmFsdWUgPSBvdmVyYWxsVGhyZWFkQ2FjaGVzaXplOworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KIAotICB2aXJ0dWFsIGJvb2wgU2V0TnVtZXJpY1Byb3BlcnR5KGNv
bnN0IGNoYXIqIG5hbWUsIHNpemVfdCB2YWx1ZSkgewotICAgIEFTU0VSVChuYW1lICE9IE5VTEwp
OworICAgICAgICBpZiAoIXN0cmNtcChuYW1lLCAidGNtYWxsb2MuY3VycmVudF90b3RhbF90aHJl
YWRfY2FjaGVfYnl0ZXMiKSkgeworICAgICAgICAgICAgVENNYWxsb2NTdGF0cyBzdGF0czsKKyAg
ICAgICAgICAgIEV4dHJhY3RTdGF0cygmc3RhdHMsIDApOworICAgICAgICAgICAgKnZhbHVlID0g
c3RhdHMudGhyZWFkQnl0ZXM7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQog
Ci0gICAgaWYgKHN0cmNtcChuYW1lLCAidGNtYWxsb2MubWF4X3RvdGFsX3RocmVhZF9jYWNoZV9i
eXRlcyIpID09IDApIHsKLSAgICAgIC8vIENsaXAgdGhlIHZhbHVlIHRvIGEgcmVhc29uYWJsZSBy
YW5nZQotICAgICAgaWYgKHZhbHVlIDwga01pblRocmVhZENhY2hlU2l6ZSkgdmFsdWUgPSBrTWlu
VGhyZWFkQ2FjaGVTaXplOwotICAgICAgaWYgKHZhbHVlID4gKDE8PDMwKSkgdmFsdWUgPSAoMTw8
MzApOyAgICAgLy8gTGltaXQgdG8gMUdCCi0KLSAgICAgIFNwaW5Mb2NrSG9sZGVyIGwoJnBhZ2Vo
ZWFwX2xvY2spOwotICAgICAgb3ZlcmFsbF90aHJlYWRfY2FjaGVfc2l6ZSA9IHN0YXRpY19jYXN0
PHNpemVfdD4odmFsdWUpOwotICAgICAgVENNYWxsb2NfVGhyZWFkQ2FjaGU6OlJlY29tcHV0ZVRo
cmVhZENhY2hlU2l6ZSgpOwotICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KKyAgICB2aXJ0dWFsIGJvb2wgU2V0
TnVtZXJpY1Byb3BlcnR5KGNvbnN0IGNoYXIqIG5hbWUsIHNpemVfdCB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChuYW1lKTsKIAotICB2aXJ0dWFsIHZvaWQgTWFya1RocmVhZElkbGUoKSB7
Ci0gICAgVENNYWxsb2NfVGhyZWFkQ2FjaGU6OkJlY29tZUlkbGUoKTsKLSAgfQorICAgICAgICBp
ZiAoIXN0cmNtcChuYW1lLCAidGNtYWxsb2MubWF4X3RvdGFsX3RocmVhZF9jYWNoZV9ieXRlcyIp
KSB7CisgICAgICAgICAgICAvLyBDbGlwIHRoZSB2YWx1ZSB0byBhIHJlYXNvbmFibGUgcmFuZ2UK
KyAgICAgICAgICAgIGlmICh2YWx1ZSA8IGtNaW5UaHJlYWRDYWNoZVNpemUpCisgICAgICAgICAg
ICAgICAgdmFsdWUgPSBrTWluVGhyZWFkQ2FjaGVTaXplOworICAgICAgICAgICAgaWYgKHZhbHVl
ID4gKDEgPDwgMzApKQorICAgICAgICAgICAgICAgIHZhbHVlID0gKDEgPDwgMzApOyAvLyBMaW1p
dCB0byAxR0IKKworICAgICAgICAgICAgU3BpbkxvY2tIb2xkZXIgbG9jaygmcGFnZWhlYXBMb2Nr
KTsKKyAgICAgICAgICAgIG92ZXJhbGxUaHJlYWRDYWNoZXNpemUgPSBzdGF0aWNfY2FzdDxzaXpl
X3Q+KHZhbHVlKTsKKyAgICAgICAgICAgIFRDTWFsbG9jVGhyZWFkQ2FjaGU6OlJlY29tcHV0ZVRo
cmVhZENhY2hlU2l6ZSgpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KIAot
ICB2aXJ0dWFsIHZvaWQgUmVsZWFzZUZyZWVNZW1vcnkoKSB7Ci0gICAgU3BpbkxvY2tIb2xkZXIg
aCgmcGFnZWhlYXBfbG9jayk7Ci0gICAgcGFnZWhlYXAtPlJlbGVhc2VGcmVlUGFnZXMoKTsKLSAg
fQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIE1hcmtU
aHJlYWRJZGxlKCkKKyAgICB7CisgICAgICAgIFRDTWFsbG9jVGhyZWFkQ2FjaGU6OkJlY29tZUlk
bGUoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgUmVsZWFzZUZyZWVNZW1vcnkoKQorICAg
IHsKKyAgICAgICAgU3BpbkxvY2tIb2xkZXIgaCgmcGFnZWhlYXBMb2NrKTsKKyAgICAgICAgcGFn
ZWhlYXAtPlJlbGVhc2VGcmVlUGFnZXMoKTsKKyAgICB9CiB9OwogI2VuZGlmCiAKIC8vIFRoZSBj
b25zdHJ1Y3RvciBhbGxvY2F0ZXMgYW4gb2JqZWN0IHRvIGVuc3VyZSB0aGF0IGluaXRpYWxpemF0
aW9uCiAvLyBydW5zIGJlZm9yZSBtYWluKCksIGFuZCB0aGVyZWZvcmUgd2UgZG8gbm90IGhhdmUg
YSBjaGFuY2UgdG8gYmVjb21lCi0vLyBtdWx0aS10aHJlYWRlZCBiZWZvcmUgaW5pdGlhbGl6YXRp
b24uICBXZSBhbHNvIGNyZWF0ZSB0aGUgVFNEIGtleQotLy8gaGVyZS4gIFByZXN1bWFibHkgYnkg
dGhlIHRpbWUgdGhpcyBjb25zdHJ1Y3RvciBydW5zLCBnbGliYyBpcyBpbgorLy8gbXVsdGktdGhy
ZWFkZWQgYmVmb3JlIGluaXRpYWxpemF0aW9uLiBXZSBhbHNvIGNyZWF0ZSB0aGUgVFNEIGtleQor
Ly8gaGVyZS4gUHJlc3VtYWJseSBieSB0aGUgdGltZSB0aGlzIGNvbnN0cnVjdG9yIHJ1bnMsIGds
aWJjIGlzIGluCiAvLyBnb29kIGVub3VnaCBzaGFwZSB0byBoYW5kbGUgcHRocmVhZF9rZXlfY3Jl
YXRlKCkuCiAvLwogLy8gVGhlIGNvbnN0cnVjdG9yIGFsc28gdGFrZXMgdGhlIG9wcG9ydHVuaXR5
IHRvIHRlbGwgU1RMIHRvIHVzZQotLy8gdGNtYWxsb2MuICBXZSB3YW50IHRvIGRvIHRoaXMgZWFy
bHksIGJlZm9yZSBjb25zdHJ1Y3QgdGltZSwgc28KKy8vIHRjbWFsbG9jLiBXZSB3YW50IHRvIGRv
IHRoaXMgZWFybHksIGJlZm9yZSBjb25zdHJ1Y3QgdGltZSwgc28KIC8vIGFsbCB1c2VyIFNUTCBh
bGxvY2F0aW9ucyBnbyB0aHJvdWdoIHRjbWFsbG9jICh3aGljaCB3b3JrcyByZWFsbHkKIC8vIHdl
bGwgZm9yIFNUTCkuCiAvLwpAQCAtMzU2MSw3ICszNjY1LDcgQEAgY2xhc3MgVENNYWxsb2NHdWFy
ZCB7CiAjZW5kaWYKICNlbmRpZgogICAgIGZyZWUobWFsbG9jKDEpKTsKLSAgICBUQ01hbGxvY19U
aHJlYWRDYWNoZTo6SW5pdFRTRCgpOworICAgIFRDTWFsbG9jVGhyZWFkQ2FjaGU6OkluaXRUU0Qo
KTsKICAgICBmcmVlKG1hbGxvYygxKSk7CiAjaWZuZGVmIFdURl9DSEFOR0VTCiAgICAgTWFsbG9j
RXh0ZW5zaW9uOjpSZWdpc3RlcihuZXcgVENNYWxsb2NJbXBsZW1lbnRhdGlvbik7CkBAIC0zNTcx
LDcgKzM2NzUsNyBAQCBjbGFzcyBUQ01hbGxvY0d1YXJkIHsKICNpZm5kZWYgV1RGX0NIQU5HRVMK
ICAgflRDTWFsbG9jR3VhcmQoKSB7CiAgICAgY29uc3QgY2hhciogZW52ID0gZ2V0ZW52KCJNQUxM
T0NTVEFUUyIpOwotICAgIGlmIChlbnYgIT0gTlVMTCkgeworICAgIGlmIChlbnYpIHsKICAgICAg
IGludCBsZXZlbCA9IGF0b2koZW52KTsKICAgICAgIGlmIChsZXZlbCA8IDEpIGxldmVsID0gMTsK
ICAgICAgIFByaW50U3RhdHMobGV2ZWwpOwpAQCAtMzU5NCwzMyArMzY5OCwzMiBAQCBzdGF0aWMg
VENNYWxsb2NHdWFyZCBtb2R1bGVfZW50ZXJfZXhpdF9oCiAKICNpZm5kZWYgV1RGX0NIQU5HRVMK
IAotc3RhdGljIFNwYW4qIERvU2FtcGxlZEFsbG9jYXRpb24oc2l6ZV90IHNpemUpIHsKLQotICAv
LyBHcmFiIHRoZSBzdGFjayB0cmFjZSBvdXRzaWRlIHRoZSBoZWFwIGxvY2sKLSAgU3RhY2tUcmFj
ZSB0bXA7Ci0gIHRtcC5kZXB0aCA9IEdldFN0YWNrVHJhY2UodG1wLnN0YWNrLCBrTWF4U3RhY2tE
ZXB0aCwgMSk7Ci0gIHRtcC5zaXplID0gc2l6ZTsKLQotICBTcGluTG9ja0hvbGRlciBoKCZwYWdl
aGVhcF9sb2NrKTsKLSAgLy8gQWxsb2NhdGUgc3BhbgotICBTcGFuICpzcGFuID0gcGFnZWhlYXAt
Pk5ldyhwYWdlcyhzaXplID09IDAgPyAxIDogc2l6ZSkpOwotICBpZiAoc3BhbiA9PSBOVUxMKSB7
Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KK3N0YXRpYyBTcGFuKiBEb1NhbXBsZWRBbGxvY2F0aW9u
KHNpemVfdCBzaXplKQorewogCi0gIC8vIEFsbG9jYXRlIHN0YWNrIHRyYWNlCi0gIFN0YWNrVHJh
Y2UgKnN0YWNrID0gc3RhY2t0cmFjZV9hbGxvY2F0b3IuTmV3KCk7Ci0gIGlmIChzdGFjayA9PSBO
VUxMKSB7Ci0gICAgLy8gU2FtcGxpbmcgZmFpbGVkIGJlY2F1c2Ugb2YgbGFjayBvZiBtZW1vcnkK
LSAgICByZXR1cm4gc3BhbjsKLSAgfQorICAgIC8vIEdyYWIgdGhlIHN0YWNrIHRyYWNlIG91dHNp
ZGUgdGhlIGhlYXAgbG9jaworICAgIFN0YWNrVHJhY2UgdG1wOworICAgIHRtcC5kZXB0aCA9IEdl
dFN0YWNrVHJhY2UodG1wLnN0YWNrLCBrTWF4U3RhY2tEZXB0aCwgMSk7CisgICAgdG1wLnNpemUg
PSBzaXplOworCisgICAgU3BpbkxvY2tIb2xkZXIgaCgmcGFnZWhlYXBMb2NrKTsKKyAgICAvLyBB
bGxvY2F0ZSBzcGFuCisgICAgU3Bhbiogc3BhbiA9IHBhZ2VoZWFwLT5OZXcocGFnZXMoIXNpemUg
PyAxIDogc2l6ZSkpOworICAgIGlmICghc3BhbikKKyAgICAgICAgcmV0dXJuIDA7CiAKLSAgKnN0
YWNrID0gdG1wOwotICBzcGFuLT5zYW1wbGUgPSAxOwotICBzcGFuLT5vYmplY3RzID0gc3RhY2s7
Ci0gIERMTF9QcmVwZW5kKCZzYW1wbGVkX29iamVjdHMsIHNwYW4pOworICAgIC8vIEFsbG9jYXRl
IHN0YWNrIHRyYWNlCisgICAgU3RhY2tUcmFjZSogc3RhY2sgPSBzdGFja3RyYWNlX2FsbG9jYXRv
ci5OZXcoKTsKKyAgICBpZiAoIXN0YWNrKQorICAgICAgICAvLyBTYW1wbGluZyBmYWlsZWQgYmVj
YXVzZSBvZiBsYWNrIG9mIG1lbW9yeQorICAgICAgICByZXR1cm4gc3BhbjsKKworICAgICpzdGFj
ayA9IHRtcDsKKyAgICBzcGFuLT5zYW1wbGUgPSAxOworICAgIHNwYW4tPm9iamVjdHMgPSBzdGFj
azsKKyAgICBETExQcmVwZW5kKCZzYW1wbGVkT2JqZWN0cywgc3Bhbik7CiAKLSAgcmV0dXJuIHNw
YW47CisgICAgcmV0dXJuIHNwYW47CiB9CiAjZW5kaWYKIApAQCAtMzYyOCw3ICszNzMxLDcgQEAg
c3RhdGljIGlubGluZSBib29sIENoZWNrQ2FjaGVkU2l6ZUNsYXNzKAogICBQYWdlSUQgcCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihwdHIpID4+IGtQYWdlU2hpZnQ7CiAgIHNpemVfdCBj
YWNoZWRfdmFsdWUgPSBwYWdlaGVhcC0+R2V0U2l6ZUNsYXNzSWZDYWNoZWQocCk7CiAgIHJldHVy
biBjYWNoZWRfdmFsdWUgPT0gMCB8fAotICAgICAgY2FjaGVkX3ZhbHVlID09IHBhZ2VoZWFwLT5H
ZXREZXNjcmlwdG9yKHApLT5zaXplY2xhc3M7CisgICAgICBjYWNoZWRfdmFsdWUgPT0gcGFnZWhl
YXAtPkdldERlc2NyaXB0b3IocCktPnNpemVDbGFzczsKIH0KIAogc3RhdGljIGlubGluZSB2b2lk
KiBDaGVja2VkTWFsbG9jUmVzdWx0KHZvaWQgKnJlc3VsdCkKQEAgLTM2MzcsNyArMzc0MCw4IEBA
IHN0YXRpYyBpbmxpbmUgdm9pZCogQ2hlY2tlZE1hbGxvY1Jlc3VsdCgKICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkKiBTcGFuVG9NYWxsb2NSZXN1bHQoU3BhbiAqc3Bh
bikgeworc3RhdGljIGlubGluZSB2b2lkKiBTcGFuVG9NYWxsb2NSZXN1bHQoU3Bhbiogc3BhbikK
K3sKICAgQVNTRVJUX1NQQU5fQ09NTUlUVEVEKHNwYW4pOwogICBwYWdlaGVhcC0+Q2FjaGVTaXpl
Q2xhc3Moc3Bhbi0+c3RhcnQsIDApOwogICByZXR1cm4KQEAgLTM2NDcsNDcgKzM3NTEsNDcgQEAg
c3RhdGljIGlubGluZSB2b2lkKiBTcGFuVG9NYWxsb2NSZXN1bHQoUwogI2lmZGVmIFdURl9DSEFO
R0VTCiB0ZW1wbGF0ZSA8Ym9vbCBjcmFzaE9uRmFpbHVyZT4KICNlbmRpZgotc3RhdGljIEFMV0FZ
U19JTkxJTkUgdm9pZCogZG9fbWFsbG9jKHNpemVfdCBzaXplKSB7Ci0gIHZvaWQqIHJldCA9IE5V
TEw7CitzdGF0aWMgQUxXQVlTX0lOTElORSB2b2lkKiBkb01hbGxvYyhzaXplX3Qgc2l6ZSkKK3sK
KyAgICB2b2lkKiByZXQgPSAwOwogCiAjaWZkZWYgV1RGX0NIQU5HRVMKICAgICBBU1NFUlQoIWlz
Rm9yYmlkZGVuKCkpOwogI2VuZGlmCiAKLSAgLy8gVGhlIGZvbGxvd2luZyBjYWxsIGZvcmNlcyBt
b2R1bGUgaW5pdGlhbGl6YXRpb24KLSAgVENNYWxsb2NfVGhyZWFkQ2FjaGUqIGhlYXAgPSBUQ01h
bGxvY19UaHJlYWRDYWNoZTo6R2V0Q2FjaGUoKTsKKyAgICAvLyBUaGUgZm9sbG93aW5nIGNhbGwg
Zm9yY2VzIG1vZHVsZSBpbml0aWFsaXphdGlvbgorICAgIFRDTWFsbG9jVGhyZWFkQ2FjaGUqIGhl
YXAgPSBUQ01hbGxvY1RocmVhZENhY2hlOjpHZXRDYWNoZSgpOwogI2lmbmRlZiBXVEZfQ0hBTkdF
UwotICBpZiAoKEZMQUdTX3RjbWFsbG9jX3NhbXBsZV9wYXJhbWV0ZXIgPiAwKSAmJiBoZWFwLT5T
YW1wbGVBbGxvY2F0aW9uKHNpemUpKSB7Ci0gICAgU3Bhbiogc3BhbiA9IERvU2FtcGxlZEFsbG9j
YXRpb24oc2l6ZSk7Ci0gICAgaWYgKHNwYW4gIT0gTlVMTCkgewotICAgICAgcmV0ID0gU3BhblRv
TWFsbG9jUmVzdWx0KHNwYW4pOwotICAgIH0KLSAgfSBlbHNlCi0jZW5kaWYKLSAgaWYgKHNpemUg
PiBrTWF4U2l6ZSkgewotICAgIC8vIFVzZSBwYWdlLWxldmVsIGFsbG9jYXRvcgotICAgIFNwaW5M
b2NrSG9sZGVyIGgoJnBhZ2VoZWFwX2xvY2spOwotICAgIFNwYW4qIHNwYW4gPSBwYWdlaGVhcC0+
TmV3KHBhZ2VzKHNpemUpKTsKLSAgICBpZiAoc3BhbiAhPSBOVUxMKSB7Ci0gICAgICByZXQgPSBT
cGFuVG9NYWxsb2NSZXN1bHQoc3Bhbik7CisgICAgaWYgKChGTEFHU190Y21hbGxvY19zYW1wbGVf
cGFyYW1ldGVyID4gMCkgJiYgaGVhcC0+U2FtcGxlQWxsb2NhdGlvbihzaXplKSkgeworICAgICAg
ICBTcGFuKiBzcGFuID0gRG9TYW1wbGVkQWxsb2NhdGlvbihzaXplKTsKKyAgICAgICAgaWYgKHNw
YW4pCisgICAgICAgICAgICByZXQgPSBTcGFuVG9NYWxsb2NSZXN1bHQoc3Bhbik7CisgICAgfSBl
bHNlCisjZW5kaWYKKyAgICBpZiAoc2l6ZSA+IGtNYXhTaXplKSB7CisgICAgICAgIC8vIFVzZSBw
YWdlLWxldmVsIGFsbG9jYXRvcgorICAgICAgICBTcGluTG9ja0hvbGRlciBoKCZwYWdlaGVhcExv
Y2spOworICAgICAgICBTcGFuKiBzcGFuID0gcGFnZWhlYXAtPk5ldyhwYWdlcyhzaXplKSk7Cisg
ICAgICAgIGlmIChzcGFuKQorICAgICAgICAgICAgcmV0ID0gU3BhblRvTWFsbG9jUmVzdWx0KHNw
YW4pOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFRoZSBjb21tb24gY2FzZSwgYW5kIGFsc28g
dGhlIHNpbXBsZXN0LiBUaGlzIGp1c3QgcG9wcyB0aGUKKyAgICAgICAgLy8gc2l6ZS1hcHByb3By
aWF0ZSBmcmVlbGlzdCwgYWZlciByZXBsZW5pc2hpbmcgaXQgaWYgaXQncyBlbXB0eS4KKyAgICAg
ICAgcmV0ID0gQ2hlY2tlZE1hbGxvY1Jlc3VsdChoZWFwLT5BbGxvY2F0ZShzaXplKSk7CiAgICAg
fQotICB9IGVsc2UgewotICAgIC8vIFRoZSBjb21tb24gY2FzZSwgYW5kIGFsc28gdGhlIHNpbXBs
ZXN0LiAgVGhpcyBqdXN0IHBvcHMgdGhlCi0gICAgLy8gc2l6ZS1hcHByb3ByaWF0ZSBmcmVlbGlz
dCwgYWZlciByZXBsZW5pc2hpbmcgaXQgaWYgaXQncyBlbXB0eS4KLSAgICByZXQgPSBDaGVja2Vk
TWFsbG9jUmVzdWx0KGhlYXAtPkFsbG9jYXRlKHNpemUpKTsKLSAgfQotICBpZiAoIXJldCkgewor
ICAgIGlmICghcmV0KSB7CiAjaWZkZWYgV1RGX0NIQU5HRVMKLSAgICBpZiAoY3Jhc2hPbkZhaWx1
cmUpIC8vIFRoaXMgYnJhbmNoIHNob3VsZCBiZSBvcHRpbWl6ZWQgb3V0IGJ5IHRoZSBjb21waWxl
ci4KLSAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgaWYgKGNyYXNoT25GYWlsdXJlKSAvLyBUaGlz
IGJyYW5jaCBzaG91bGQgYmUgb3B0aW1pemVkIG91dCBieSB0aGUgY29tcGlsZXIuCisgICAgICAg
ICAgICBDUkFTSCgpOwogI2Vsc2UKLSAgICBlcnJubyA9IEVOT01FTTsKKyAgICAgICAgZXJybm8g
PSBFTk9NRU07CiAjZW5kaWYKLSAgfQotICByZXR1cm4gcmV0OworICAgIH0KKyAgICByZXR1cm4g
cmV0OwogfQogCi1zdGF0aWMgQUxXQVlTX0lOTElORSB2b2lkIGRvX2ZyZWUodm9pZCogcHRyKSB7
CitzdGF0aWMgQUxXQVlTX0lOTElORSB2b2lkIGRvRnJlZSh2b2lkKiBwdHIpCit7CiAgIGlmIChw
dHIgPT0gTlVMTCkgcmV0dXJuOwogICBBU1NFUlQocGFnZWhlYXAgIT0gTlVMTCk7ICAvLyBTaG91
bGQgbm90IGNhbGwgZnJlZSgpIGJlZm9yZSBtYWxsb2MoKQogICBjb25zdCBQYWdlSUQgcCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihwdHIpID4+IGtQYWdlU2hpZnQ7CkBAIC0zNjk2LDI4
ICszODAwLDI4IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQgZG9fZnJlZSh2b2lkKgogCiAg
IGlmIChjbCA9PSAwKSB7CiAgICAgc3BhbiA9IHBhZ2VoZWFwLT5HZXREZXNjcmlwdG9yKHApOwot
ICAgIGNsID0gc3Bhbi0+c2l6ZWNsYXNzOworICAgIGNsID0gc3Bhbi0+c2l6ZUNsYXNzOwogICAg
IHBhZ2VoZWFwLT5DYWNoZVNpemVDbGFzcyhwLCBjbCk7CiAgIH0KICAgaWYgKGNsICE9IDApIHsK
ICNpZm5kZWYgTk9fVENNQUxMT0NfU0FNUExFUwogICAgIEFTU0VSVCghcGFnZWhlYXAtPkdldERl
c2NyaXB0b3IocCktPnNhbXBsZSk7CiAjZW5kaWYKLSAgICBUQ01hbGxvY19UaHJlYWRDYWNoZSog
aGVhcCA9IFRDTWFsbG9jX1RocmVhZENhY2hlOjpHZXRDYWNoZUlmUHJlc2VudCgpOworICAgIFRD
TWFsbG9jVGhyZWFkQ2FjaGUqIGhlYXAgPSBUQ01hbGxvY1RocmVhZENhY2hlOjpHZXRDYWNoZUlm
UHJlc2VudCgpOwogICAgIGlmIChoZWFwICE9IE5VTEwpIHsKICAgICAgIGhlYXAtPkRlYWxsb2Nh
dGUocHRyLCBjbCk7CiAgICAgfSBlbHNlIHsKICAgICAgIC8vIERlbGV0ZSBkaXJlY3RseSBpbnRv
IGNlbnRyYWwgY2FjaGUKLSAgICAgIFNMTF9TZXROZXh0KHB0ciwgTlVMTCk7Ci0gICAgICBjZW50
cmFsX2NhY2hlW2NsXS5JbnNlcnRSYW5nZShwdHIsIHB0ciwgMSk7CisgICAgICBTTExTZXROZXh0
KHB0ciwgMCk7CisgICAgICBjZW50cmFsQ2FjaGVbY2xdLkluc2VydFJhbmdlKHB0ciwgcHRyLCAx
KTsKICAgICB9CiAgIH0gZWxzZSB7Ci0gICAgU3BpbkxvY2tIb2xkZXIgaCgmcGFnZWhlYXBfbG9j
ayk7CisgICAgU3BpbkxvY2tIb2xkZXIgaCgmcGFnZWhlYXBMb2NrKTsKICAgICBBU1NFUlQocmVp
bnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHB0cikgJSBrUGFnZVNpemUgPT0gMCk7CiAgICAgQVNT
RVJUKHNwYW4gIT0gTlVMTCAmJiBzcGFuLT5zdGFydCA9PSBwKTsKICNpZm5kZWYgTk9fVENNQUxM
T0NfU0FNUExFUwogICAgIGlmIChzcGFuLT5zYW1wbGUpIHsKLSAgICAgIERMTF9SZW1vdmUoc3Bh
bik7CisgICAgICBETExSZW1vdmUoc3Bhbik7CiAgICAgICBzdGFja3RyYWNlX2FsbG9jYXRvci5E
ZWxldGUocmVpbnRlcnByZXRfY2FzdDxTdGFja1RyYWNlKj4oc3Bhbi0+b2JqZWN0cykpOwogICAg
ICAgc3Bhbi0+b2JqZWN0cyA9IE5VTEw7CiAgICAgfQpAQCAtMzczMSwxMDggKzM4MzUsMTEzIEBA
IHN0YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQgZG9fZnJlZSh2b2lkKgogLy8KIC8vIE5vdGU6IHRo
aXMgY29kZSBjYW4gYmUgc2xvdywgYW5kIGNhbiBzaWduaWZpY2FudGx5IGZyYWdtZW50IG1lbW9y
eS4KIC8vIFRoZSBleHBlY3RhdGlvbiBpcyB0aGF0IG1lbWFsaWduL3Bvc2l4X21lbWFsaWduL3Zh
bGxvYy9wdmFsbG9jIHdpbGwKLS8vIG5vdCBiZSBpbnZva2VkIHZlcnkgb2Z0ZW4uICBUaGlzIHJl
cXVpcmVtZW50IHNpbXBsaWZpZXMgb3VyCisvLyBub3QgYmUgaW52b2tlZCB2ZXJ5IG9mdGVuLiBU
aGlzIHJlcXVpcmVtZW50IHNpbXBsaWZpZXMgb3VyCiAvLyBpbXBsZW1lbnRhdGlvbiBhbmQgYWxs
b3dzIHVzIHRvIHR1bmUgZm9yIGV4cGVjdGVkIGFsbG9jYXRpb24KIC8vIHBhdHRlcm5zLgotc3Rh
dGljIHZvaWQqIGRvX21lbWFsaWduKHNpemVfdCBhbGlnbiwgc2l6ZV90IHNpemUpIHsKLSAgQVNT
RVJUKChhbGlnbiAmIChhbGlnbiAtIDEpKSA9PSAwKTsKLSAgQVNTRVJUKGFsaWduID4gMCk7Ci0g
IGlmIChwYWdlaGVhcCA9PSBOVUxMKSBUQ01hbGxvY19UaHJlYWRDYWNoZTo6SW5pdE1vZHVsZSgp
OwotCi0gIC8vIEFsbG9jYXRlIGF0IGxlYXN0IG9uZSBieXRlIHRvIGF2b2lkIGJvdW5kYXJ5IGNv
bmRpdGlvbnMgYmVsb3cKLSAgaWYgKHNpemUgPT0gMCkgc2l6ZSA9IDE7Ci0KLSAgaWYgKHNpemUg
PD0ga01heFNpemUgJiYgYWxpZ24gPCBrUGFnZVNpemUpIHsKLSAgICAvLyBTZWFyY2ggdGhyb3Vn
aCBhY2NlcHRhYmxlIHNpemUgY2xhc3NlcyBsb29raW5nIGZvciBvbmUgd2l0aAotICAgIC8vIGVu
b3VnaCBhbGlnbm1lbnQuICBUaGlzIGRlcGVuZHMgb24gdGhlIGZhY3QgdGhhdAotICAgIC8vIElu
aXRTaXplQ2xhc3NlcygpIGN1cnJlbnRseSBwcm9kdWNlcyBzZXZlcmFsIHNpemUgY2xhc3NlcyB0
aGF0Ci0gICAgLy8gYXJlIGFsaWduZWQgYXQgcG93ZXJzIG9mIHR3by4gIFdlIHdpbGwgd2FzdGUg
dGltZSBhbmQgc3BhY2UgaWYKLSAgICAvLyB3ZSBtaXNzIGluIHRoZSBzaXplIGNsYXNzIGFycmF5
LCBidXQgdGhhdCBpcyBkZWVtZWQgYWNjZXB0YWJsZQotICAgIC8vIHNpbmNlIG1lbWFsaWduKCkg
c2hvdWxkIGJlIHVzZWQgcmFyZWx5LgotICAgIHNpemVfdCBjbCA9IFNpemVDbGFzcyhzaXplKTsK
LSAgICB3aGlsZSAoY2wgPCBrTnVtQ2xhc3NlcyAmJiAoKGNsYXNzX3RvX3NpemVbY2xdICYgKGFs
aWduIC0gMSkpICE9IDApKSB7Ci0gICAgICBjbCsrOwotICAgIH0KLSAgICBpZiAoY2wgPCBrTnVt
Q2xhc3NlcykgewotICAgICAgVENNYWxsb2NfVGhyZWFkQ2FjaGUqIGhlYXAgPSBUQ01hbGxvY19U
aHJlYWRDYWNoZTo6R2V0Q2FjaGUoKTsKLSAgICAgIHJldHVybiBDaGVja2VkTWFsbG9jUmVzdWx0
KGhlYXAtPkFsbG9jYXRlKGNsYXNzX3RvX3NpemVbY2xdKSk7CitzdGF0aWMgdm9pZCogZG9NZW1h
bGlnbihzaXplX3QgYWxpZ24sIHNpemVfdCBzaXplKQoreworICAgIEFTU0VSVCghKGFsaWduICYg
KGFsaWduIC0gMSkpKTsKKyAgICBBU1NFUlQoYWxpZ24gPiAwKTsKKyAgICBpZiAoIXBhZ2VoZWFw
KQorICAgICAgICBUQ01hbGxvY1RocmVhZENhY2hlOjpJbml0TW9kdWxlKCk7CisKKyAgICAvLyBB
bGxvY2F0ZSBhdCBsZWFzdCBvbmUgYnl0ZSB0byBhdm9pZCBib3VuZGFyeSBjb25kaXRpb25zIGJl
bG93CisgICAgaWYgKCFzaXplKQorICAgICAgICBzaXplID0gMTsKKworICAgIGlmIChzaXplIDw9
IGtNYXhTaXplICYmIGFsaWduIDwga1BhZ2VTaXplKSB7CisgICAgICAgIC8vIFNlYXJjaCB0aHJv
dWdoIGFjY2VwdGFibGUgc2l6ZSBjbGFzc2VzIGxvb2tpbmcgZm9yIG9uZSB3aXRoCisgICAgICAg
IC8vIGVub3VnaCBhbGlnbm1lbnQuIFRoaXMgZGVwZW5kcyBvbiB0aGUgZmFjdCB0aGF0CisgICAg
ICAgIC8vIEluaXRTaXplQ2xhc3NlcygpIGN1cnJlbnRseSBwcm9kdWNlcyBzZXZlcmFsIHNpemUg
Y2xhc3NlcyB0aGF0CisgICAgICAgIC8vIGFyZSBhbGlnbmVkIGF0IHBvd2VycyBvZiB0d28uIFdl
IHdpbGwgd2FzdGUgdGltZSBhbmQgc3BhY2UgaWYKKyAgICAgICAgLy8gd2UgbWlzcyBpbiB0aGUg
c2l6ZSBjbGFzcyBhcnJheSwgYnV0IHRoYXQgaXMgZGVlbWVkIGFjY2VwdGFibGUKKyAgICAgICAg
Ly8gc2luY2UgbWVtYWxpZ24oKSBzaG91bGQgYmUgdXNlZCByYXJlbHkuCisgICAgICAgIHNpemVf
dCBjbCA9IFNpemVDbGFzcyhzaXplKTsKKyAgICAgICAgd2hpbGUgKGNsIDwga051bUNsYXNzZXMg
JiYgKGNsYXNzVG9zaXplW2NsXSAmIChhbGlnbiAtIDEpKSkKKyAgICAgICAgICAgIGNsKys7Cisg
ICAgICAgIGlmIChjbCA8IGtOdW1DbGFzc2VzKSB7CisgICAgICAgICAgICBUQ01hbGxvY1RocmVh
ZENhY2hlKiBoZWFwID0gVENNYWxsb2NUaHJlYWRDYWNoZTo6R2V0Q2FjaGUoKTsKKyAgICAgICAg
ICAgIHJldHVybiBDaGVja2VkTWFsbG9jUmVzdWx0KGhlYXAtPkFsbG9jYXRlKGNsYXNzVG9zaXpl
W2NsXSkpOworICAgICAgICB9CiAgICAgfQotICB9CiAKLSAgLy8gV2Ugd2lsbCBhbGxvY2F0ZSBk
aXJlY3RseSBmcm9tIHRoZSBwYWdlIGhlYXAKLSAgU3BpbkxvY2tIb2xkZXIgaCgmcGFnZWhlYXBf
bG9jayk7CisgICAgLy8gV2Ugd2lsbCBhbGxvY2F0ZSBkaXJlY3RseSBmcm9tIHRoZSBwYWdlIGhl
YXAKKyAgICBTcGluTG9ja0hvbGRlciBoKCZwYWdlaGVhcExvY2spOwogCi0gIGlmIChhbGlnbiA8
PSBrUGFnZVNpemUpIHsKLSAgICAvLyBBbnkgcGFnZS1sZXZlbCBhbGxvY2F0aW9uIHdpbGwgYmUg
ZmluZQotICAgIC8vIFRPRE86IFdlIGNvdWxkIHB1dCB0aGUgcmVzdCBvZiB0aGlzIHBhZ2UgaW4g
dGhlIGFwcHJvcHJpYXRlCi0gICAgLy8gVE9ETzogY2FjaGUgYnV0IGl0IGRvZXMgbm90IHNlZW0g
d29ydGggaXQuCi0gICAgU3Bhbiogc3BhbiA9IHBhZ2VoZWFwLT5OZXcocGFnZXMoc2l6ZSkpOwot
ICAgIHJldHVybiBzcGFuID09IE5VTEwgPyBOVUxMIDogU3BhblRvTWFsbG9jUmVzdWx0KHNwYW4p
OwotICB9CisgICAgaWYgKGFsaWduIDw9IGtQYWdlU2l6ZSkgeworICAgICAgICAvLyBBbnkgcGFn
ZS1sZXZlbCBhbGxvY2F0aW9uIHdpbGwgYmUgZmluZQorICAgICAgICAvLyBUT0RPOiBXZSBjb3Vs
ZCBwdXQgdGhlIHJlc3Qgb2YgdGhpcyBwYWdlIGluIHRoZSBhcHByb3ByaWF0ZQorICAgICAgICAv
LyBUT0RPOiBjYWNoZSBidXQgaXQgZG9lcyBub3Qgc2VlbSB3b3J0aCBpdC4KKyAgICAgICAgU3Bh
biogc3BhbiA9IHBhZ2VoZWFwLT5OZXcocGFnZXMoc2l6ZSkpOworICAgICAgICByZXR1cm4gIXNw
YW4gPyAwIDogU3BhblRvTWFsbG9jUmVzdWx0KHNwYW4pOworICAgIH0KIAotICAvLyBBbGxvY2F0
ZSBleHRyYSBwYWdlcyBhbmQgY2FydmUgb2ZmIGFuIGFsaWduZWQgcG9ydGlvbgotICBjb25zdCBM
ZW5ndGggYWxsb2MgPSBwYWdlcyhzaXplICsgYWxpZ24pOwotICBTcGFuKiBzcGFuID0gcGFnZWhl
YXAtPk5ldyhhbGxvYyk7Ci0gIGlmIChzcGFuID09IE5VTEwpIHJldHVybiBOVUxMOwotCi0gIC8v
IFNraXAgc3RhcnRpbmcgcG9ydGlvbiBzbyB0aGF0IHdlIGVuZCB1cCBhbGlnbmVkCi0gIExlbmd0
aCBza2lwID0gMDsKLSAgd2hpbGUgKCgoKHNwYW4tPnN0YXJ0K3NraXApIDw8IGtQYWdlU2hpZnQp
ICYgKGFsaWduIC0gMSkpICE9IDApIHsKLSAgICBza2lwKys7Ci0gIH0KLSAgQVNTRVJUKHNraXAg
PCBhbGxvYyk7Ci0gIGlmIChza2lwID4gMCkgewotICAgIFNwYW4qIHJlc3QgPSBwYWdlaGVhcC0+
U3BsaXQoc3Bhbiwgc2tpcCk7Ci0gICAgcGFnZWhlYXAtPkRlbGV0ZShzcGFuKTsKLSAgICBzcGFu
ID0gcmVzdDsKLSAgfQorICAgIC8vIEFsbG9jYXRlIGV4dHJhIHBhZ2VzIGFuZCBjYXJ2ZSBvZmYg
YW4gYWxpZ25lZCBwb3J0aW9uCisgICAgY29uc3QgTGVuZ3RoIGFsbG9jID0gcGFnZXMoc2l6ZSAr
IGFsaWduKTsKKyAgICBTcGFuKiBzcGFuID0gcGFnZWhlYXAtPk5ldyhhbGxvYyk7CisgICAgaWYg
KCFzcGFuKQorICAgICAgICByZXR1cm4gMDsKIAotICAvLyBTa2lwIHRyYWlsaW5nIHBvcnRpb24g
dGhhdCB3ZSBkbyBub3QgbmVlZCB0byByZXR1cm4KLSAgY29uc3QgTGVuZ3RoIG5lZWRlZCA9IHBh
Z2VzKHNpemUpOwotICBBU1NFUlQoc3Bhbi0+bGVuZ3RoID49IG5lZWRlZCk7Ci0gIGlmIChzcGFu
LT5sZW5ndGggPiBuZWVkZWQpIHsKLSAgICBTcGFuKiB0cmFpbGVyID0gcGFnZWhlYXAtPlNwbGl0
KHNwYW4sIG5lZWRlZCk7Ci0gICAgcGFnZWhlYXAtPkRlbGV0ZSh0cmFpbGVyKTsKLSAgfQotICBy
ZXR1cm4gU3BhblRvTWFsbG9jUmVzdWx0KHNwYW4pOworICAgIC8vIFNraXAgc3RhcnRpbmcgcG9y
dGlvbiBzbyB0aGF0IHdlIGVuZCB1cCBhbGlnbmVkCisgICAgTGVuZ3RoIHNraXAgPSAwOworICAg
IHdoaWxlICgoKHNwYW4tPnN0YXJ0K3NraXApIDw8IGtQYWdlU2hpZnQpICYgKGFsaWduIC0gMSkp
CisgICAgICAgIHNraXArKzsKKyAgICBBU1NFUlQoc2tpcCA8IGFsbG9jKTsKKyAgICBpZiAoc2tp
cCA+IDApIHsKKyAgICAgICAgU3BhbiogcmVzdCA9IHBhZ2VoZWFwLT5TcGxpdChzcGFuLCBza2lw
KTsKKyAgICAgICAgcGFnZWhlYXAtPkRlbGV0ZShzcGFuKTsKKyAgICAgICAgc3BhbiA9IHJlc3Q7
CisgICAgfQorCisgICAgLy8gU2tpcCB0cmFpbGluZyBwb3J0aW9uIHRoYXQgd2UgZG8gbm90IG5l
ZWQgdG8gcmV0dXJuCisgICAgY29uc3QgTGVuZ3RoIG5lZWRlZCA9IHBhZ2VzKHNpemUpOworICAg
IEFTU0VSVChzcGFuLT5sZW5ndGggPj0gbmVlZGVkKTsKKyAgICBpZiAoc3Bhbi0+bGVuZ3RoID4g
bmVlZGVkKSB7CisgICAgICAgIFNwYW4qIHRyYWlsZXIgPSBwYWdlaGVhcC0+U3BsaXQoc3Bhbiwg
bmVlZGVkKTsKKyAgICAgICAgcGFnZWhlYXAtPkRlbGV0ZSh0cmFpbGVyKTsKKyAgICB9CisgICAg
cmV0dXJuIFNwYW5Ub01hbGxvY1Jlc3VsdChzcGFuKTsKIH0KICNlbmRpZgogCiAvLyBIZWxwZXJz
IGZvciB1c2UgYnkgZXhwb3J0ZWQgcm91dGluZXMgYmVsb3c6CiAKICNpZm5kZWYgV1RGX0NIQU5H
RVMKLXN0YXRpYyBpbmxpbmUgdm9pZCBkb19tYWxsb2Nfc3RhdHMoKSB7Ci0gIFByaW50U3RhdHMo
MSk7CitzdGF0aWMgaW5saW5lIHZvaWQgZG9NYWxsb2NTdGF0cygpCit7CisgICAgUHJpbnRTdGF0
cygxKTsKIH0KICNlbmRpZgogCi1zdGF0aWMgaW5saW5lIGludCBkb19tYWxsb3B0KGludCwgaW50
KSB7Ci0gIHJldHVybiAxOyAgICAgLy8gSW5kaWNhdGVzIGVycm9yCitzdGF0aWMgaW5saW5lIGlu
dCBkb01hbGxvcHQoaW50LCBpbnQpCit7CisgICAgcmV0dXJuIDE7IC8vIEluZGljYXRlcyBlcnJv
cgogfQogCi0jaWZkZWYgSEFWRV9TVFJVQ1RfTUFMTElORk8gIC8vIG1hbGxpbmZvIGlzbid0IGRl
ZmluZWQgb24gZnJlZWJzZCwgZm9yIGluc3RhbmNlCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtYWxs
aW5mbyBkb19tYWxsaW5mbygpIHsKLSAgVENNYWxsb2NTdGF0cyBzdGF0czsKLSAgRXh0cmFjdFN0
YXRzKCZzdGF0cywgTlVMTCk7Ci0KLSAgLy8gSnVzdCBzb21lIG9mIHRoZSBmaWVsZHMgYXJlIGZp
bGxlZCBpbi4KLSAgc3RydWN0IG1hbGxpbmZvIGluZm87Ci0gIG1lbXNldCgmaW5mbywgMCwgc2l6
ZW9mKGluZm8pKTsKLQotICAvLyBVbmZvcnR1bmF0ZWx5LCB0aGUgc3RydWN0IGNvbnRhaW5zICJp
bnQiIGZpZWxkLCBzbyBzb21lIG9mIHRoZQotICAvLyBzaXplIHZhbHVlcyB3aWxsIGJlIHRydW5j
YXRlZC4KLSAgaW5mby5hcmVuYSAgICAgPSBzdGF0aWNfY2FzdDxpbnQ+KHN0YXRzLnN5c3RlbV9i
eXRlcyk7Ci0gIGluZm8uZnNtYmxrcyAgID0gc3RhdGljX2Nhc3Q8aW50PihzdGF0cy50aHJlYWRf
Ynl0ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgc3RhdHMuY2VudHJh
bF9ieXRlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBzdGF0cy50cmFu
c2Zlcl9ieXRlcyk7Ci0gIGluZm8uZm9yZGJsa3MgID0gc3RhdGljX2Nhc3Q8aW50PihzdGF0cy5w
YWdlaGVhcF9ieXRlcyk7Ci0gIGluZm8udW9yZGJsa3MgID0gc3RhdGljX2Nhc3Q8aW50PihzdGF0
cy5zeXN0ZW1fYnl0ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gc3Rh
dHMudGhyZWFkX2J5dGVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIHN0
YXRzLmNlbnRyYWxfYnl0ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0g
c3RhdHMudHJhbnNmZXJfYnl0ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC0gc3RhdHMucGFnZWhlYXBfYnl0ZXMpOworI2lmZGVmIEhBVkVfU1RSVUNUX01BTExJTkZPIC8v
IG1hbGxpbmZvIGlzbid0IGRlZmluZWQgb24gZnJlZWJzZCwgZm9yIGluc3RhbmNlCitzdGF0aWMg
aW5saW5lIHN0cnVjdCBtYWxsaW5mbyBkb01hbGxpbmZvKCkKK3sKKyAgICBUQ01hbGxvY1N0YXRz
IHN0YXRzOworICAgIEV4dHJhY3RTdGF0cygmc3RhdHMsIDApOworCisgICAgLy8gSnVzdCBzb21l
IG9mIHRoZSBmaWVsZHMgYXJlIGZpbGxlZCBpbi4KKyAgICBzdHJ1Y3QgbWFsbGluZm8gaW5mbzsK
KyAgICBtZW1zZXQoJmluZm8sIDAsIHNpemVvZihpbmZvKSk7CisKKyAgICAvLyBVbmZvcnR1bmF0
ZWx5LCB0aGUgc3RydWN0IGNvbnRhaW5zICJpbnQiIGZpZWxkLCBzbyBzb21lIG9mIHRoZQorICAg
IC8vIHNpemUgdmFsdWVzIHdpbGwgYmUgdHJ1bmNhdGVkLgorICAgIGluZm8uYXJlbmEgICAgID0g
c3RhdGljX2Nhc3Q8aW50PihzdGF0cy5zeXN0ZW1CeXRlcyk7CisgICAgaW5mby5mc21ibGtzICAg
PSBzdGF0aWNfY2FzdDxpbnQ+KHN0YXRzLnRocmVhZEJ5dGVzCisgICAgICAgICsgc3RhdHMuY2Vu
dHJhbEJ5dGVzCisgICAgICAgICsgc3RhdHMudHJhbnNmZXJCeXRlcyk7CisgICAgaW5mby5mb3Jk
YmxrcyAgPSBzdGF0aWNfY2FzdDxpbnQ+KHN0YXRzLnBhZ2VoZWFwQnl0ZXMpOworICAgIGluZm8u
dW9yZGJsa3MgID0gc3RhdGljX2Nhc3Q8aW50PihzdGF0cy5zeXN0ZW1CeXRlcworICAgICAgICAt
IHN0YXRzLnRocmVhZEJ5dGVzCisgICAgICAgIC0gc3RhdHMuY2VudHJhbEJ5dGVzCisgICAgICAg
IC0gc3RhdHMudHJhbnNmZXJCeXRlcworICAgICAgICAtIHN0YXRzLnBhZ2VoZWFwQnl0ZXMpOwog
Ci0gIHJldHVybiBpbmZvOworICAgIHJldHVybiBpbmZvOwogfQogI2VuZGlmCiAKQEAgLTM4NDgs
NyArMzk1Nyw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IG1hbGxpbmZvIGRvX21hbGxpbmYKICNp
Zm5kZWYgV1RGX0NIQU5HRVMKIGV4dGVybiAiQyIgCiAjZWxzZQotI2RlZmluZSBkb19tYWxsb2Mg
ZG9fbWFsbG9jPGNyYXNoT25GYWlsdXJlPgorI2RlZmluZSBkb01hbGxvYyBkb01hbGxvYzxjcmFz
aE9uRmFpbHVyZT4KIAogdGVtcGxhdGUgPGJvb2wgY3Jhc2hPbkZhaWx1cmU+CiBBTFdBWVNfSU5M
SU5FIHZvaWQqIG1hbGxvYyhzaXplX3QpOwpAQCAtMzg3MCw3ICszOTc5LDcgQEAgdm9pZCogbWFs
bG9jKHNpemVfdCBzaXplKSB7CiAjaWYgRU5BQkxFKFdURl9NQUxMT0NfVkFMSURBVElPTikKICAg
ICBpZiAoc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSAtIEludGVybmFsOjpWYWxp
ZGF0aW9uQnVmZmVyU2l6ZSA8PSBzaXplKSAgLy8gSWYgb3ZlcmZsb3cgd291bGQgb2NjdXIuLi4K
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgdm9pZCogcmVzdWx0ID0gZG9fbWFsbG9jKHNpemUgKyBJ
bnRlcm5hbDo6VmFsaWRhdGlvbkJ1ZmZlclNpemUpOworICAgIHZvaWQqIHJlc3VsdCA9IGRvTWFs
bG9jKHNpemUgKyBJbnRlcm5hbDo6VmFsaWRhdGlvbkJ1ZmZlclNpemUpOwogICAgIGlmICghcmVz
dWx0KQogICAgICAgICByZXR1cm4gMDsKIApAQCAtMzg4Miw3ICszOTkxLDcgQEAgdm9pZCogbWFs
bG9jKHNpemVfdCBzaXplKSB7CiAgICAgKkludGVybmFsOjpmYXN0TWFsbG9jVmFsaWRhdGlvblN1
ZmZpeChyZXN1bHQpID0gSW50ZXJuYWw6OlZhbGlkYXRpb25TdWZmaXg7CiAgICAgZmFzdE1hbGxv
Y1ZhbGlkYXRlKHJlc3VsdCk7CiAjZWxzZQotICAgIHZvaWQqIHJlc3VsdCA9IGRvX21hbGxvYyhz
aXplKTsKKyAgICB2b2lkKiByZXN1bHQgPSBkb01hbGxvYyhzaXplKTsKICNlbmRpZgogCiAjaWZu
ZGVmIFdURl9DSEFOR0VTCkBAIC0zOTA2LDkgKzQwMTUsOSBAQCB2b2lkIGZyZWUodm9pZCogcHRy
KSB7CiAgICAgZmFzdE1hbGxvY1ZhbGlkYXRlKHB0cik7CiAgICAgSW50ZXJuYWw6OlZhbGlkYXRp
b25IZWFkZXIqIGhlYWRlciA9IEludGVybmFsOjpmYXN0TWFsbG9jVmFsaWRhdGlvbkhlYWRlcihw
dHIpOwogICAgIG1lbXNldChwdHIsIDB4Q0MsIGhlYWRlci0+bV9zaXplKTsKLSAgICBkb19mcmVl
KGhlYWRlcik7CisgICAgZG9GcmVlKGhlYWRlcik7CiAjZWxzZQotICAgIGRvX2ZyZWUocHRyKTsK
KyAgICBkb0ZyZWUocHRyKTsKICNlbmRpZgogfQogCkBAIC0zOTE4LDE4ICs0MDI3LDE4IEBAIGV4
dGVybiAiQyIKIHRlbXBsYXRlIDxib29sIGNyYXNoT25GYWlsdXJlPgogQUxXQVlTX0lOTElORSB2
b2lkKiBjYWxsb2Moc2l6ZV90LCBzaXplX3QpOwogCi12b2lkKiBmYXN0Q2FsbG9jKHNpemVfdCBu
LCBzaXplX3QgZWxlbV9zaXplKQordm9pZCogZmFzdENhbGxvYyhzaXplX3Qgbiwgc2l6ZV90IGVs
ZW1TaXplKQogewotICAgIHZvaWQqIHJlc3VsdCA9IGNhbGxvYzx0cnVlPihuLCBlbGVtX3NpemUp
OworICAgIHZvaWQqIHJlc3VsdCA9IGNhbGxvYzx0cnVlPihuLCBlbGVtU2l6ZSk7CiAjaWYgRU5B
QkxFKFdURl9NQUxMT0NfVkFMSURBVElPTikKICAgICBmYXN0TWFsbG9jVmFsaWRhdGUocmVzdWx0
KTsKICNlbmRpZgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVRyeU1hbGxvY1JldHVyblZhbHVl
IHRyeUZhc3RDYWxsb2Moc2l6ZV90IG4sIHNpemVfdCBlbGVtX3NpemUpCitUcnlNYWxsb2NSZXR1
cm5WYWx1ZSB0cnlGYXN0Q2FsbG9jKHNpemVfdCBuLCBzaXplX3QgZWxlbVNpemUpCiB7Ci0gICAg
dm9pZCogcmVzdWx0ID0gY2FsbG9jPGZhbHNlPihuLCBlbGVtX3NpemUpOworICAgIHZvaWQqIHJl
c3VsdCA9IGNhbGxvYzxmYWxzZT4obiwgZWxlbVNpemUpOwogI2lmIEVOQUJMRShXVEZfTUFMTE9D
X1ZBTElEQVRJT04pCiAgICAgZmFzdE1hbGxvY1ZhbGlkYXRlKHJlc3VsdCk7CiAjZW5kaWYKQEAg
LTM5MzksMTIgKzQwNDgsMTMgQEAgVHJ5TWFsbG9jUmV0dXJuVmFsdWUgdHJ5RmFzdENhbGxvYyhz
aXplXwogdGVtcGxhdGUgPGJvb2wgY3Jhc2hPbkZhaWx1cmU+CiBBTFdBWVNfSU5MSU5FCiAjZW5k
aWYKLXZvaWQqIGNhbGxvYyhzaXplX3Qgbiwgc2l6ZV90IGVsZW1fc2l6ZSkgewotICBzaXplX3Qg
dG90YWxCeXRlcyA9IG4gKiBlbGVtX3NpemU7Cit2b2lkKiBjYWxsb2Moc2l6ZV90IG4sIHNpemVf
dCBlbGVtU2l6ZSkKK3sKKyAgICBzaXplX3QgdG90YWxCeXRlcyA9IG4gKiBlbGVtU2l6ZTsKICAg
ICAKLSAgLy8gUHJvdGVjdCBhZ2FpbnN0IG92ZXJmbG93Ci0gIGlmIChuID4gMSAmJiBlbGVtX3Np
emUgJiYgKHRvdGFsQnl0ZXMgLyBlbGVtX3NpemUpICE9IG4pCi0gICAgcmV0dXJuIDA7CisgICAg
Ly8gUHJvdGVjdCBhZ2FpbnN0IG92ZXJmbG93CisgICAgaWYgKG4gPiAxICYmIGVsZW1TaXplICYm
ICh0b3RhbEJ5dGVzIC8gZWxlbVNpemUpICE9IG4pCisgICAgICAgIHJldHVybiAwOwogCiAjaWYg
RU5BQkxFKFdURl9NQUxMT0NfVkFMSURBVElPTikKICAgICB2b2lkKiByZXN1bHQgPSBtYWxsb2M8
Y3Jhc2hPbkZhaWx1cmU+KHRvdGFsQnl0ZXMpOwpAQCAtMzk1NCwxNiArNDA2NCwxNSBAQCB2b2lk
KiBjYWxsb2Moc2l6ZV90IG4sIHNpemVfdCBlbGVtX3NpemUpCiAgICAgbWVtc2V0KHJlc3VsdCwg
MCwgdG90YWxCeXRlcyk7CiAgICAgZmFzdE1hbGxvY1ZhbGlkYXRlKHJlc3VsdCk7CiAjZWxzZQot
ICAgIHZvaWQqIHJlc3VsdCA9IGRvX21hbGxvYyh0b3RhbEJ5dGVzKTsKLSAgICBpZiAocmVzdWx0
ICE9IE5VTEwpIHsKKyAgICB2b2lkKiByZXN1bHQgPSBkb01hbGxvYyh0b3RhbEJ5dGVzKTsKKyAg
ICBpZiAocmVzdWx0KQogICAgICAgICBtZW1zZXQocmVzdWx0LCAwLCB0b3RhbEJ5dGVzKTsKLSAg
ICB9CiAjZW5kaWYKIAogI2lmbmRlZiBXVEZfQ0hBTkdFUwotICBNYWxsb2NIb29rOjpJbnZva2VO
ZXdIb29rKHJlc3VsdCwgdG90YWxCeXRlcyk7CisgICAgTWFsbG9jSG9vazo6SW52b2tlTmV3SG9v
ayhyZXN1bHQsIHRvdGFsQnl0ZXMpOwogI2VuZGlmCi0gIHJldHVybiByZXN1bHQ7CisgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAogLy8gU2luY2UgY2ZyZWUgaXNuJ3QgdXNlZCBhbnl3aGVyZSwgd2Ug
ZG9uJ3QgY29tcGlsZSBpdCBpbi4KQEAgLTM5NzUsNyArNDA4NCw3IEBAIHZvaWQgY2ZyZWUodm9p
ZCogcHRyKSB7CiAjaWZuZGVmIFdURl9DSEFOR0VTCiAgICAgTWFsbG9jSG9vazo6SW52b2tlRGVs
ZXRlSG9vayhwdHIpOwogI2VuZGlmCi0gIGRvX2ZyZWUocHRyKTsKKyAgICBkb0ZyZWUocHRyKTsK
IH0KICNlbmRpZgogCkBAIC0zOTg1LDI0ICs0MDk0LDI0IEBAIGV4dGVybiAiQyIKIHRlbXBsYXRl
IDxib29sIGNyYXNoT25GYWlsdXJlPgogQUxXQVlTX0lOTElORSB2b2lkKiByZWFsbG9jKHZvaWQq
LCBzaXplX3QpOwogCi12b2lkKiBmYXN0UmVhbGxvYyh2b2lkKiBvbGRfcHRyLCBzaXplX3QgbmV3
X3NpemUpCit2b2lkKiBmYXN0UmVhbGxvYyh2b2lkKiBvbGRQdHIsIHNpemVfdCBuZXdTaXplKQog
ewogI2lmIEVOQUJMRShXVEZfTUFMTE9DX1ZBTElEQVRJT04pCi0gICAgZmFzdE1hbGxvY1ZhbGlk
YXRlKG9sZF9wdHIpOworICAgIGZhc3RNYWxsb2NWYWxpZGF0ZShvbGRQdHIpOwogI2VuZGlmCi0g
ICAgdm9pZCogcmVzdWx0ID0gcmVhbGxvYzx0cnVlPihvbGRfcHRyLCBuZXdfc2l6ZSk7CisgICAg
dm9pZCogcmVzdWx0ID0gcmVhbGxvYzx0cnVlPihvbGRQdHIsIG5ld1NpemUpOwogI2lmIEVOQUJM
RShXVEZfTUFMTE9DX1ZBTElEQVRJT04pCiAgICAgZmFzdE1hbGxvY1ZhbGlkYXRlKHJlc3VsdCk7
CiAjZW5kaWYKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1UcnlNYWxsb2NSZXR1cm5WYWx1ZSB0
cnlGYXN0UmVhbGxvYyh2b2lkKiBvbGRfcHRyLCBzaXplX3QgbmV3X3NpemUpCitUcnlNYWxsb2NS
ZXR1cm5WYWx1ZSB0cnlGYXN0UmVhbGxvYyh2b2lkKiBvbGRQdHIsIHNpemVfdCBuZXdTaXplKQog
ewogI2lmIEVOQUJMRShXVEZfTUFMTE9DX1ZBTElEQVRJT04pCi0gICAgZmFzdE1hbGxvY1ZhbGlk
YXRlKG9sZF9wdHIpOworICAgIGZhc3RNYWxsb2NWYWxpZGF0ZShvbGRQdHIpOwogI2VuZGlmCi0g
ICAgdm9pZCogcmVzdWx0ID0gcmVhbGxvYzxmYWxzZT4ob2xkX3B0ciwgbmV3X3NpemUpOworICAg
IHZvaWQqIHJlc3VsdCA9IHJlYWxsb2M8ZmFsc2U+KG9sZFB0ciwgbmV3U2l6ZSk7CiAjaWYgRU5B
QkxFKFdURl9NQUxMT0NfVkFMSURBVElPTikKICAgICBmYXN0TWFsbG9jVmFsaWRhdGUocmVzdWx0
KTsKICNlbmRpZgpAQCAtNDAxMiwxMDkgKzQxMjEsMTA4IEBAIFRyeU1hbGxvY1JldHVyblZhbHVl
IHRyeUZhc3RSZWFsbG9jKHZvaWQKIHRlbXBsYXRlIDxib29sIGNyYXNoT25GYWlsdXJlPgogQUxX
QVlTX0lOTElORQogI2VuZGlmCi12b2lkKiByZWFsbG9jKHZvaWQqIG9sZF9wdHIsIHNpemVfdCBu
ZXdfc2l6ZSkgewotICBpZiAob2xkX3B0ciA9PSBOVUxMKSB7Cit2b2lkKiByZWFsbG9jKHZvaWQq
IG9sZFB0ciwgc2l6ZV90IG5ld1NpemUpCit7CisgICAgaWYgKCFvbGRQdHIpIHsKICNpZiBFTkFC
TEUoV1RGX01BTExPQ19WQUxJREFUSU9OKQotICAgIHZvaWQqIHJlc3VsdCA9IG1hbGxvYzxjcmFz
aE9uRmFpbHVyZT4obmV3X3NpemUpOworICAgICAgICB2b2lkKiByZXN1bHQgPSBtYWxsb2M8Y3Jh
c2hPbkZhaWx1cmU+KG5ld1NpemUpOwogI2Vsc2UKLSAgICB2b2lkKiByZXN1bHQgPSBkb19tYWxs
b2MobmV3X3NpemUpOworICAgICAgICB2b2lkKiByZXN1bHQgPSBkb01hbGxvYyhuZXdTaXplKTsK
ICNpZm5kZWYgV1RGX0NIQU5HRVMKLSAgICBNYWxsb2NIb29rOjpJbnZva2VOZXdIb29rKHJlc3Vs
dCwgbmV3X3NpemUpOworICAgICAgICBNYWxsb2NIb29rOjpJbnZva2VOZXdIb29rKHJlc3VsdCwg
bmV3U2l6ZSk7CiAjZW5kaWYKICNlbmRpZgotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLSAgaWYg
KG5ld19zaXplID09IDApIHsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgaWYg
KCFuZXdTaXplKSB7CiAjaWZuZGVmIFdURl9DSEFOR0VTCi0gICAgTWFsbG9jSG9vazo6SW52b2tl
RGVsZXRlSG9vayhvbGRfcHRyKTsKKyAgICAgICAgTWFsbG9jSG9vazo6SW52b2tlRGVsZXRlSG9v
ayhvbGRQdHIpOwogI2VuZGlmCi0gICAgZnJlZShvbGRfcHRyKTsKLSAgICByZXR1cm4gTlVMTDsK
LSAgfQorICAgICAgICBmcmVlKG9sZFB0cik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KIAog
I2lmIEVOQUJMRShXVEZfTUFMTE9DX1ZBTElEQVRJT04pCi0gICAgaWYgKHN0ZDo6bnVtZXJpY19s
aW1pdHM8c2l6ZV90Pjo6bWF4KCkgLSBJbnRlcm5hbDo6VmFsaWRhdGlvbkJ1ZmZlclNpemUgPD0g
bmV3X3NpemUpICAvLyBJZiBvdmVyZmxvdyB3b3VsZCBvY2N1ci4uLgorICAgIGlmIChzdGQ6Om51
bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpIC0gSW50ZXJuYWw6OlZhbGlkYXRpb25CdWZmZXJT
aXplIDw9IG5ld1NpemUpIC8vIElmIG92ZXJmbG93IHdvdWxkIG9jY3VyLi4uCiAgICAgICAgIHJl
dHVybiAwOwotICAgIEludGVybmFsOjpWYWxpZGF0aW9uSGVhZGVyKiBoZWFkZXIgPSBJbnRlcm5h
bDo6ZmFzdE1hbGxvY1ZhbGlkYXRpb25IZWFkZXIob2xkX3B0cik7Ci0gICAgZmFzdE1hbGxvY1Zh
bGlkYXRlKG9sZF9wdHIpOwotICAgIG9sZF9wdHIgPSBoZWFkZXI7Ci0gICAgaGVhZGVyLT5tX3Np
emUgPSBuZXdfc2l6ZTsKLSAgICBuZXdfc2l6ZSArPSBJbnRlcm5hbDo6VmFsaWRhdGlvbkJ1ZmZl
clNpemU7Ci0jZW5kaWYKLQotICAvLyBHZXQgdGhlIHNpemUgb2YgdGhlIG9sZCBlbnRyeQotICBj
b25zdCBQYWdlSUQgcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihvbGRfcHRyKSA+PiBr
UGFnZVNoaWZ0OwotICBzaXplX3QgY2wgPSBwYWdlaGVhcC0+R2V0U2l6ZUNsYXNzSWZDYWNoZWQo
cCk7Ci0gIFNwYW4gKnNwYW4gPSBOVUxMOwotICBzaXplX3Qgb2xkX3NpemU7Ci0gIGlmIChjbCA9
PSAwKSB7Ci0gICAgc3BhbiA9IHBhZ2VoZWFwLT5HZXREZXNjcmlwdG9yKHApOwotICAgIGNsID0g
c3Bhbi0+c2l6ZWNsYXNzOwotICAgIHBhZ2VoZWFwLT5DYWNoZVNpemVDbGFzcyhwLCBjbCk7Ci0g
IH0KLSAgaWYgKGNsICE9IDApIHsKLSAgICBvbGRfc2l6ZSA9IEJ5dGVTaXplRm9yQ2xhc3MoY2wp
OwotICB9IGVsc2UgewotICAgIEFTU0VSVChzcGFuICE9IE5VTEwpOwotICAgIG9sZF9zaXplID0g
c3Bhbi0+bGVuZ3RoIDw8IGtQYWdlU2hpZnQ7Ci0gIH0KLQotICAvLyBSZWFsbG9jYXRlIGlmIHRo
ZSBuZXcgc2l6ZSBpcyBsYXJnZXIgdGhhbiB0aGUgb2xkIHNpemUsCi0gIC8vIG9yIGlmIHRoZSBu
ZXcgc2l6ZSBpcyBzaWduaWZpY2FudGx5IHNtYWxsZXIgdGhhbiB0aGUgb2xkIHNpemUuCi0gIGlm
ICgobmV3X3NpemUgPiBvbGRfc2l6ZSkgfHwgKEFsbG9jYXRpb25TaXplKG5ld19zaXplKSA8IG9s
ZF9zaXplKSkgewotICAgIC8vIE5lZWQgdG8gcmVhbGxvY2F0ZQotICAgIHZvaWQqIG5ld19wdHIg
PSBkb19tYWxsb2MobmV3X3NpemUpOwotICAgIGlmIChuZXdfcHRyID09IE5VTEwpIHsKLSAgICAg
IHJldHVybiBOVUxMOwotICAgIH0KKyAgICBJbnRlcm5hbDo6VmFsaWRhdGlvbkhlYWRlciogaGVh
ZGVyID0gSW50ZXJuYWw6OmZhc3RNYWxsb2NWYWxpZGF0aW9uSGVhZGVyKG9sZFB0cik7CisgICAg
ZmFzdE1hbGxvY1ZhbGlkYXRlKG9sZFB0cik7CisgICAgb2xkUHRyID0gaGVhZGVyOworICAgIGhl
YWRlci0+bV9zaXplID0gbmV3U2l6ZTsKKyAgICBuZXdTaXplICs9IEludGVybmFsOjpWYWxpZGF0
aW9uQnVmZmVyU2l6ZTsKKyNlbmRpZgorCisgICAgLy8gR2V0IHRoZSBzaXplIG9mIHRoZSBvbGQg
ZW50cnkKKyAgICBjb25zdCBQYWdlSUQgcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihv
bGRQdHIpID4+IGtQYWdlU2hpZnQ7CisgICAgc2l6ZV90IGNsID0gcGFnZWhlYXAtPkdldFNpemVD
bGFzc0lmQ2FjaGVkKHApOworICAgIFNwYW4qIHNwYW4gPSAwOworICAgIHNpemVfdCBvbGRzaXpl
OworICAgIGlmICghY2wpIHsKKyAgICAgICAgc3BhbiA9IHBhZ2VoZWFwLT5HZXREZXNjcmlwdG9y
KHApOworICAgICAgICBjbCA9IHNwYW4tPnNpemVDbGFzczsKKyAgICAgICAgcGFnZWhlYXAtPkNh
Y2hlU2l6ZUNsYXNzKHAsIGNsKTsKKyAgICB9CisgICAgaWYgKGNsKQorICAgICAgICBvbGRzaXpl
ID0gQnl0ZVNpemVGb3JDbGFzcyhjbCk7CisgICAgZWxzZSB7CisgICAgICAgIEFTU0VSVChzcGFu
KTsKKyAgICAgICAgb2xkc2l6ZSA9IHNwYW4tPmxlbmd0aCA8PCBrUGFnZVNoaWZ0OworICAgIH0K
KworICAgIC8vIFJlYWxsb2NhdGUgaWYgdGhlIG5ldyBzaXplIGlzIGxhcmdlciB0aGFuIHRoZSBv
bGQgc2l6ZSwKKyAgICAvLyBvciBpZiB0aGUgbmV3IHNpemUgaXMgc2lnbmlmaWNhbnRseSBzbWFs
bGVyIHRoYW4gdGhlIG9sZCBzaXplLgorICAgIGlmICgobmV3U2l6ZSA+IG9sZHNpemUpIHx8IChB
bGxvY2F0aW9uU2l6ZShuZXdTaXplKSA8IG9sZHNpemUpKSB7CisgICAgICAgIC8vIE5lZWQgdG8g
cmVhbGxvY2F0ZQorICAgICAgICB2b2lkKiBuZXdQdHIgPSBkb01hbGxvYyhuZXdTaXplKTsKKyAg
ICAgICAgaWYgKCFuZXdQdHIpCisgICAgICAgICAgICByZXR1cm4gMDsKICNpZm5kZWYgV1RGX0NI
QU5HRVMKLSAgICBNYWxsb2NIb29rOjpJbnZva2VOZXdIb29rKG5ld19wdHIsIG5ld19zaXplKTsK
KyAgICAgICAgTWFsbG9jSG9vazo6SW52b2tlTmV3SG9vayhuZXdQdHIsIG5ld1NpemUpOwogI2Vu
ZGlmCi0gICAgbWVtY3B5KG5ld19wdHIsIG9sZF9wdHIsICgob2xkX3NpemUgPCBuZXdfc2l6ZSkg
PyBvbGRfc2l6ZSA6IG5ld19zaXplKSk7CisgICAgICAgIG1lbWNweShuZXdQdHIsIG9sZFB0ciwg
KChvbGRzaXplIDwgbmV3U2l6ZSkgPyBvbGRzaXplIDogbmV3U2l6ZSkpOwogI2lmbmRlZiBXVEZf
Q0hBTkdFUwotICAgIE1hbGxvY0hvb2s6Okludm9rZURlbGV0ZUhvb2sob2xkX3B0cik7CisgICAg
ICAgIE1hbGxvY0hvb2s6Okludm9rZURlbGV0ZUhvb2sob2xkUHRyKTsKICNlbmRpZgotICAgIC8v
IFdlIGNvdWxkIHVzZSBhIHZhcmlhbnQgb2YgZG9fZnJlZSgpIHRoYXQgbGV2ZXJhZ2VzIHRoZSBm
YWN0Ci0gICAgLy8gdGhhdCB3ZSBhbHJlYWR5IGtub3cgdGhlIHNpemVjbGFzcyBvZiBvbGRfcHRy
LiAgVGhlIGJlbmVmaXQKLSAgICAvLyB3b3VsZCBiZSBzbWFsbCwgc28gZG9uJ3QgYm90aGVyLgot
ICAgIGRvX2ZyZWUob2xkX3B0cik7CisgICAgICAgIC8vIFdlIGNvdWxkIHVzZSBhIHZhcmlhbnQg
b2YgZG9GcmVlKCkgdGhhdCBsZXZlcmFnZXMgdGhlIGZhY3QKKyAgICAgICAgLy8gdGhhdCB3ZSBh
bHJlYWR5IGtub3cgdGhlIHNpemVDbGFzcyBvZiBvbGRQdHIuIFRoZSBiZW5lZml0CisgICAgICAg
IC8vIHdvdWxkIGJlIHNtYWxsLCBzbyBkb24ndCBib3RoZXIuCisgICAgICAgIGRvRnJlZShvbGRQ
dHIpOwogI2lmIEVOQUJMRShXVEZfTUFMTE9DX1ZBTElEQVRJT04pCi0gICAgbmV3X3B0ciA9IHN0
YXRpY19jYXN0PEludGVybmFsOjpWYWxpZGF0aW9uSGVhZGVyKj4obmV3X3B0cikgKyAxOwotICAg
ICpJbnRlcm5hbDo6ZmFzdE1hbGxvY1ZhbGlkYXRpb25TdWZmaXgobmV3X3B0cikgPSBJbnRlcm5h
bDo6VmFsaWRhdGlvblN1ZmZpeDsKKyAgICAgICAgbmV3UHRyID0gc3RhdGljX2Nhc3Q8SW50ZXJu
YWw6OlZhbGlkYXRpb25IZWFkZXIqPihuZXdQdHIpICsgMTsKKyAgICAgICAgKkludGVybmFsOjpm
YXN0TWFsbG9jVmFsaWRhdGlvblN1ZmZpeChuZXdQdHIpID0gSW50ZXJuYWw6OlZhbGlkYXRpb25T
dWZmaXg7CiAjZW5kaWYKLSAgICByZXR1cm4gbmV3X3B0cjsKLSAgfSBlbHNlIHsKKyAgICAgICAg
cmV0dXJuIG5ld1B0cjsKKyAgICB9CiAjaWYgRU5BQkxFKFdURl9NQUxMT0NfVkFMSURBVElPTikK
LSAgICBvbGRfcHRyID0gc3RhdGljX2Nhc3Q8SW50ZXJuYWw6OlZhbGlkYXRpb25IZWFkZXIqPihv
bGRfcHRyKSArIDE7IC8vIFNldCBvbGRfcHRyIGJhY2sgdG8gdGhlIHVzZXIgcG9pbnRlci4KLSAg
ICAqSW50ZXJuYWw6OmZhc3RNYWxsb2NWYWxpZGF0aW9uU3VmZml4KG9sZF9wdHIpID0gSW50ZXJu
YWw6OlZhbGlkYXRpb25TdWZmaXg7CisgICAgb2xkUHRyID0gc3RhdGljX2Nhc3Q8SW50ZXJuYWw6
OlZhbGlkYXRpb25IZWFkZXIqPihvbGRQdHIpICsgMTsgLy8gU2V0IG9sZFB0ciBiYWNrIHRvIHRo
ZSB1c2VyIHBvaW50ZXIuCisgICAgKkludGVybmFsOjpmYXN0TWFsbG9jVmFsaWRhdGlvblN1ZmZp
eChvbGRQdHIpID0gSW50ZXJuYWw6OlZhbGlkYXRpb25TdWZmaXg7CiAjZW5kaWYKLSAgICByZXR1
cm4gb2xkX3B0cjsKLSAgfQorICAgIHJldHVybiBvbGRQdHI7CiB9CiAKICNpZmRlZiBXVEZfQ0hB
TkdFUwotI3VuZGVmIGRvX21hbGxvYworI3VuZGVmIGRvTWFsbG9jCiAjZWxzZQogCiBzdGF0aWMg
U3BpbkxvY2sgc2V0X25ld19oYW5kbGVyX2xvY2sgPSBTUElOTE9DS19JTklUSUFMSVpFUjsKIAog
c3RhdGljIGlubGluZSB2b2lkKiBjcHBfYWxsb2Moc2l6ZV90IHNpemUsIGJvb2wgbm90aHJvdykg
ewotICBmb3IgKDs7KSB7Ci0gICAgdm9pZCogcCA9IGRvX21hbGxvYyhzaXplKTsKKyAgICBmb3Ig
KDs7KSB7CisgICAgICAgIHZvaWQqIHAgPSBkb01hbGxvYyhzaXplKTsKICNpZmRlZiBQUkVBTlNJ
TkVXCi0gICAgcmV0dXJuIHA7CisgICAgICAgIHJldHVybiBwOwogI2Vsc2UKLSAgICBpZiAocCA9
PSBOVUxMKSB7ICAvLyBhbGxvY2F0aW9uIGZhaWxlZAotICAgICAgLy8gR2V0IHRoZSBjdXJyZW50
IG5ldyBoYW5kbGVyLiAgTkI6IHRoaXMgZnVuY3Rpb24gaXMgbm90Ci0gICAgICAvLyB0aHJlYWQt
c2FmZS4gIFdlIG1ha2UgYSBmZWVibGUgc3RhYiBhdCBtYWtpbmcgaXQgc28gaGVyZSwgYnV0Ci0g
ICAgICAvLyB0aGlzIGxvY2sgb25seSBwcm90ZWN0cyBhZ2FpbnN0IHRjbWFsbG9jIGludGVyZmVy
aW5nIHdpdGgKLSAgICAgIC8vIGl0c2VsZiwgbm90IHdpdGggb3RoZXIgbGlicmFyaWVzIGNhbGxp
bmcgc2V0X25ld19oYW5kbGVyLgotICAgICAgc3RkOjpuZXdfaGFuZGxlciBuaDsKLSAgICAgIHsK
LSAgICAgICAgU3BpbkxvY2tIb2xkZXIgaCgmc2V0X25ld19oYW5kbGVyX2xvY2spOwotICAgICAg
ICBuaCA9IHN0ZDo6c2V0X25ld19oYW5kbGVyKDApOwotICAgICAgICAodm9pZCkgc3RkOjpzZXRf
bmV3X2hhbmRsZXIobmgpOwotICAgICAgfQorICAgICAgICBpZiAoIXApIHsgLy8gYWxsb2NhdGlv
biBmYWlsZWQKKyAgICAgICAgICAgIC8vIEdldCB0aGUgY3VycmVudCBuZXcgaGFuZGxlci4gTkI6
IHRoaXMgZnVuY3Rpb24gaXMgbm90CisgICAgICAgICAgICAvLyB0aHJlYWQtc2FmZS4gV2UgbWFr
ZSBhIGZlZWJsZSBzdGFiIGF0IG1ha2luZyBpdCBzbyBoZXJlLCBidXQKKyAgICAgICAgICAgIC8v
IHRoaXMgbG9jayBvbmx5IHByb3RlY3RzIGFnYWluc3QgdGNtYWxsb2MgaW50ZXJmZXJpbmcgd2l0
aAorICAgICAgICAgICAgLy8gaXRzZWxmLCBub3Qgd2l0aCBvdGhlciBsaWJyYXJpZXMgY2FsbGlu
ZyBzZXRfbmV3X2hhbmRsZXIuCisgICAgICAgICAgICBzdGQ6Om5ld19oYW5kbGVyIG5oOworICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIFNwaW5Mb2NrSG9sZGVyIGgoJnNldF9uZXdfaGFu
ZGxlcl9sb2NrKTsKKyAgICAgICAgICAgICAgICBuaCA9IHN0ZDo6c2V0X25ld19oYW5kbGVyKDAp
OworICAgICAgICAgICAgICAgICh2b2lkKSBzdGQ6OnNldF9uZXdfaGFuZGxlcihuaCk7CisgICAg
ICAgICAgICB9CiAgICAgICAvLyBJZiBubyBuZXdfaGFuZGxlciBpcyBlc3RhYmxpc2hlZCwgdGhl
IGFsbG9jYXRpb24gZmFpbGVkLgogICAgICAgaWYgKCFuaCkgewogICAgICAgICBpZiAobm90aHJv
dykgcmV0dXJuIDA7CkBAIC00MTMzLDEyNyArNDI0MSwxMzAgQEAgc3RhdGljIGlubGluZSB2b2lk
KiBjcHBfYWxsb2Moc2l6ZV90IHNpegogICAgICAgcmV0dXJuIHA7CiAgICAgfQogI2VuZGlmCi0g
IH0KKworICAgIH0KIH0KIAogI2lmIEVOQUJMRShHTE9CQUxfRkFTVE1BTExPQ19ORVcpCiAKIHZv
aWQqIG9wZXJhdG9yIG5ldyhzaXplX3Qgc2l6ZSkgewotICB2b2lkKiBwID0gY3BwX2FsbG9jKHNp
emUsIGZhbHNlKTsKLSAgLy8gV2Uga2VlcCB0aGlzIG5leHQgaW5zdHJ1Y3Rpb24gb3V0IG9mIGNw
cF9hbGxvYyBmb3IgYSByZWFzb246IHdoZW4KLSAgLy8gaXQncyBpbiwgYW5kIG5ldyBqdXN0IGNh
bGxzIGNwcF9hbGxvYywgdGhlIG9wdGltaXplciBtYXkgZm9sZCB0aGUKLSAgLy8gbmV3IGNhbGwg
aW50byBjcHBfYWxsb2MsIHdoaWNoIG1lc3NlcyB1cCBvdXIgd2hvbGUgc2VjdGlvbi1iYXNlZAot
ICAvLyBzdGFja3RyYWNpbmcgKHNlZSBBVFRSSUJVVEVfU0VDVElPTiwgYWJvdmUpLiAgVGhpcyBl
bnN1cmVzIGNwcF9hbGxvYwotICAvLyBpc24ndCB0aGUgbGFzdCB0aGluZyB0aGlzIGZuIGNhbGxz
LCBhbmQgcHJldmVudHMgdGhlIGZvbGRpbmcuCi0gIE1hbGxvY0hvb2s6Okludm9rZU5ld0hvb2so
cCwgc2l6ZSk7Ci0gIHJldHVybiBwOworICAgIHZvaWQqIHAgPSBjcHBfYWxsb2Moc2l6ZSwgZmFs
c2UpOworICAgIC8vIFdlIGtlZXAgdGhpcyBuZXh0IGluc3RydWN0aW9uIG91dCBvZiBjcHBfYWxs
b2MgZm9yIGEgcmVhc29uOiB3aGVuCisgICAgLy8gaXQncyBpbiwgYW5kIG5ldyBqdXN0IGNhbGxz
IGNwcF9hbGxvYywgdGhlIG9wdGltaXplciBtYXkgZm9sZCB0aGUKKyAgICAvLyBuZXcgY2FsbCBp
bnRvIGNwcF9hbGxvYywgd2hpY2ggbWVzc2VzIHVwIG91ciB3aG9sZSBzZWN0aW9uLWJhc2VkCisg
ICAgLy8gc3RhY2t0cmFjaW5nIChzZWUgQVRUUklCVVRFX1NFQ1RJT04sIGFib3ZlKS4gVGhpcyBl
bnN1cmVzIGNwcF9hbGxvYworICAgIC8vIGlzbid0IHRoZSBsYXN0IHRoaW5nIHRoaXMgZm4gY2Fs
bHMsIGFuZCBwcmV2ZW50cyB0aGUgZm9sZGluZy4KKyAgICBNYWxsb2NIb29rOjpJbnZva2VOZXdI
b29rKHAsIHNpemUpOworICAgIHJldHVybiBwOwogfQogCiB2b2lkKiBvcGVyYXRvciBuZXcoc2l6
ZV90IHNpemUsIGNvbnN0IHN0ZDo6bm90aHJvd190JikgX19USFJPVyB7Ci0gIHZvaWQqIHAgPSBj
cHBfYWxsb2Moc2l6ZSwgdHJ1ZSk7Ci0gIE1hbGxvY0hvb2s6Okludm9rZU5ld0hvb2socCwgc2l6
ZSk7Ci0gIHJldHVybiBwOworICAgIHZvaWQqIHAgPSBjcHBfYWxsb2Moc2l6ZSwgdHJ1ZSk7Cisg
ICAgTWFsbG9jSG9vazo6SW52b2tlTmV3SG9vayhwLCBzaXplKTsKKyAgICByZXR1cm4gcDsKIH0K
IAogdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCogcCkgX19USFJPVyB7Ci0gIE1hbGxvY0hvb2s6
Okludm9rZURlbGV0ZUhvb2socCk7Ci0gIGRvX2ZyZWUocCk7CisgICAgTWFsbG9jSG9vazo6SW52
b2tlRGVsZXRlSG9vayhwKTsKKyAgICBkb0ZyZWUocCk7CiB9CiAKIHZvaWQgb3BlcmF0b3IgZGVs
ZXRlKHZvaWQqIHAsIGNvbnN0IHN0ZDo6bm90aHJvd190JikgX19USFJPVyB7Ci0gIE1hbGxvY0hv
b2s6Okludm9rZURlbGV0ZUhvb2socCk7Ci0gIGRvX2ZyZWUocCk7CisgICAgTWFsbG9jSG9vazo6
SW52b2tlRGVsZXRlSG9vayhwKTsKKyAgICBkb0ZyZWUocCk7CiB9CiAKIHZvaWQqIG9wZXJhdG9y
IG5ld1tdKHNpemVfdCBzaXplKSB7Ci0gIHZvaWQqIHAgPSBjcHBfYWxsb2Moc2l6ZSwgZmFsc2Up
OwotICAvLyBXZSBrZWVwIHRoaXMgbmV4dCBpbnN0cnVjdGlvbiBvdXQgb2YgY3BwX2FsbG9jIGZv
ciBhIHJlYXNvbjogd2hlbgotICAvLyBpdCdzIGluLCBhbmQgbmV3IGp1c3QgY2FsbHMgY3BwX2Fs
bG9jLCB0aGUgb3B0aW1pemVyIG1heSBmb2xkIHRoZQotICAvLyBuZXcgY2FsbCBpbnRvIGNwcF9h
bGxvYywgd2hpY2ggbWVzc2VzIHVwIG91ciB3aG9sZSBzZWN0aW9uLWJhc2VkCi0gIC8vIHN0YWNr
dHJhY2luZyAoc2VlIEFUVFJJQlVURV9TRUNUSU9OLCBhYm92ZSkuICBUaGlzIGVuc3VyZXMgY3Bw
X2FsbG9jCi0gIC8vIGlzbid0IHRoZSBsYXN0IHRoaW5nIHRoaXMgZm4gY2FsbHMsIGFuZCBwcmV2
ZW50cyB0aGUgZm9sZGluZy4KLSAgTWFsbG9jSG9vazo6SW52b2tlTmV3SG9vayhwLCBzaXplKTsK
LSAgcmV0dXJuIHA7CisgICAgdm9pZCogcCA9IGNwcF9hbGxvYyhzaXplLCBmYWxzZSk7CisgICAg
Ly8gV2Uga2VlcCB0aGlzIG5leHQgaW5zdHJ1Y3Rpb24gb3V0IG9mIGNwcF9hbGxvYyBmb3IgYSBy
ZWFzb246IHdoZW4KKyAgICAvLyBpdCdzIGluLCBhbmQgbmV3IGp1c3QgY2FsbHMgY3BwX2FsbG9j
LCB0aGUgb3B0aW1pemVyIG1heSBmb2xkIHRoZQorICAgIC8vIG5ldyBjYWxsIGludG8gY3BwX2Fs
bG9jLCB3aGljaCBtZXNzZXMgdXAgb3VyIHdob2xlIHNlY3Rpb24tYmFzZWQKKyAgICAvLyBzdGFj
a3RyYWNpbmcgKHNlZSBBVFRSSUJVVEVfU0VDVElPTiwgYWJvdmUpLiBUaGlzIGVuc3VyZXMgY3Bw
X2FsbG9jCisgICAgLy8gaXNuJ3QgdGhlIGxhc3QgdGhpbmcgdGhpcyBmbiBjYWxscywgYW5kIHBy
ZXZlbnRzIHRoZSBmb2xkaW5nLgorICAgIE1hbGxvY0hvb2s6Okludm9rZU5ld0hvb2socCwgc2l6
ZSk7CisgICAgcmV0dXJuIHA7CiB9CiAKIHZvaWQqIG9wZXJhdG9yIG5ld1tdKHNpemVfdCBzaXpl
LCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIF9fVEhST1cgewotICB2b2lkKiBwID0gY3BwX2FsbG9j
KHNpemUsIHRydWUpOwotICBNYWxsb2NIb29rOjpJbnZva2VOZXdIb29rKHAsIHNpemUpOwotICBy
ZXR1cm4gcDsKKyAgICB2b2lkKiBwID0gY3BwX2FsbG9jKHNpemUsIHRydWUpOworICAgIE1hbGxv
Y0hvb2s6Okludm9rZU5ld0hvb2socCwgc2l6ZSk7CisgICAgcmV0dXJuIHA7CiB9CiAKIHZvaWQg
b3BlcmF0b3IgZGVsZXRlW10odm9pZCogcCkgX19USFJPVyB7Ci0gIE1hbGxvY0hvb2s6Okludm9r
ZURlbGV0ZUhvb2socCk7Ci0gIGRvX2ZyZWUocCk7CisgICAgTWFsbG9jSG9vazo6SW52b2tlRGVs
ZXRlSG9vayhwKTsKKyAgICBkb0ZyZWUocCk7CiB9CiAKIHZvaWQgb3BlcmF0b3IgZGVsZXRlW10o
dm9pZCogcCwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSBfX1RIUk9XIHsKLSAgTWFsbG9jSG9vazo6
SW52b2tlRGVsZXRlSG9vayhwKTsKLSAgZG9fZnJlZShwKTsKKyAgICBNYWxsb2NIb29rOjpJbnZv
a2VEZWxldGVIb29rKHApOworICAgIGRvRnJlZShwKTsKIH0KIAogI2VuZGlmCiAKIGV4dGVybiAi
QyIgdm9pZCogbWVtYWxpZ24oc2l6ZV90IGFsaWduLCBzaXplX3Qgc2l6ZSkgX19USFJPVyB7Ci0g
IHZvaWQqIHJlc3VsdCA9IGRvX21lbWFsaWduKGFsaWduLCBzaXplKTsKLSAgTWFsbG9jSG9vazo6
SW52b2tlTmV3SG9vayhyZXN1bHQsIHNpemUpOwotICByZXR1cm4gcmVzdWx0OworICAgIHZvaWQq
IHJlc3VsdCA9IGRvTWVtYWxpZ24oYWxpZ24sIHNpemUpOworICAgIE1hbGxvY0hvb2s6Okludm9r
ZU5ld0hvb2socmVzdWx0LCBzaXplKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi1leHRlcm4g
IkMiIGludCBwb3NpeF9tZW1hbGlnbih2b2lkKiogcmVzdWx0X3B0ciwgc2l6ZV90IGFsaWduLCBz
aXplX3Qgc2l6ZSkKK2V4dGVybiAiQyIgaW50IHBvc2l4X21lbWFsaWduKHZvaWQqKiByZXN1bHRQ
dHIsIHNpemVfdCBhbGlnbiwgc2l6ZV90IHNpemUpCiAgICAgX19USFJPVyB7Ci0gIGlmICgoKGFs
aWduICUgc2l6ZW9mKHZvaWQqKSkgIT0gMCkgfHwKLSAgICAgICgoYWxpZ24gJiAoYWxpZ24gLSAx
KSkgIT0gMCkgfHwKLSAgICAgIChhbGlnbiA9PSAwKSkgewotICAgIHJldHVybiBFSU5WQUw7Ci0g
IH0KKyAgICBpZiAoKGFsaWduICUgc2l6ZW9mKHZvaWQqKSkKKyAgICAgICAgfHwgKGFsaWduICYg
KGFsaWduIC0gMSkpCisgICAgICAgIHx8ICghYWxpZ24pKQorICAgICAgICByZXR1cm4gRUlOVkFM
OwogCi0gIHZvaWQqIHJlc3VsdCA9IGRvX21lbWFsaWduKGFsaWduLCBzaXplKTsKLSAgTWFsbG9j
SG9vazo6SW52b2tlTmV3SG9vayhyZXN1bHQsIHNpemUpOwotICBpZiAocmVzdWx0ID09IE5VTEwp
IHsKLSAgICByZXR1cm4gRU5PTUVNOwotICB9IGVsc2UgewotICAgICpyZXN1bHRfcHRyID0gcmVz
dWx0OworICAgIHZvaWQqIHJlc3VsdCA9IGRvTWVtYWxpZ24oYWxpZ24sIHNpemUpOworICAgIE1h
bGxvY0hvb2s6Okludm9rZU5ld0hvb2socmVzdWx0LCBzaXplKTsKKyAgICBpZiAoIXJlc3VsdCkK
KyAgICAgICAgcmV0dXJuIEVOT01FTTsKKyAgICAqcmVzdWx0UHRyID0gcmVzdWx0OwogICAgIHJl
dHVybiAwOwotICB9CiB9CiAKIHN0YXRpYyBzaXplX3QgcGFnZXNpemUgPSAwOwogCiBleHRlcm4g
IkMiIHZvaWQqIHZhbGxvYyhzaXplX3Qgc2l6ZSkgX19USFJPVyB7Ci0gIC8vIEFsbG9jYXRlIHBh
Z2UtYWxpZ25lZCBvYmplY3Qgb2YgbGVuZ3RoID49IHNpemUgYnl0ZXMKLSAgaWYgKHBhZ2VzaXpl
ID09IDApIHBhZ2VzaXplID0gZ2V0cGFnZXNpemUoKTsKLSAgdm9pZCogcmVzdWx0ID0gZG9fbWVt
YWxpZ24ocGFnZXNpemUsIHNpemUpOwotICBNYWxsb2NIb29rOjpJbnZva2VOZXdIb29rKHJlc3Vs
dCwgc2l6ZSk7Ci0gIHJldHVybiByZXN1bHQ7CisgICAgLy8gQWxsb2NhdGUgcGFnZS1hbGlnbmVk
IG9iamVjdCBvZiBsZW5ndGggPj0gc2l6ZSBieXRlcworICAgIGlmICghcGFnZXNpemUpCisgICAg
ICAgIHBhZ2VzaXplID0gZ2V0cGFnZXNpemUoKTsKKyAgICB2b2lkKiByZXN1bHQgPSBkb01lbWFs
aWduKHBhZ2VzaXplLCBzaXplKTsKKyAgICBNYWxsb2NIb29rOjpJbnZva2VOZXdIb29rKHJlc3Vs
dCwgc2l6ZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogZXh0ZXJuICJDIiB2b2lkKiBwdmFs
bG9jKHNpemVfdCBzaXplKSBfX1RIUk9XIHsKLSAgLy8gUm91bmQgdXAgc2l6ZSB0byBhIG11bHRp
cGxlIG9mIHBhZ2VzaXplCi0gIGlmIChwYWdlc2l6ZSA9PSAwKSBwYWdlc2l6ZSA9IGdldHBhZ2Vz
aXplKCk7Ci0gIHNpemUgPSAoc2l6ZSArIHBhZ2VzaXplIC0gMSkgJiB+KHBhZ2VzaXplIC0gMSk7
Ci0gIHZvaWQqIHJlc3VsdCA9IGRvX21lbWFsaWduKHBhZ2VzaXplLCBzaXplKTsKLSAgTWFsbG9j
SG9vazo6SW52b2tlTmV3SG9vayhyZXN1bHQsIHNpemUpOwotICByZXR1cm4gcmVzdWx0OworICAg
IC8vIFJvdW5kIHVwIHNpemUgdG8gYSBtdWx0aXBsZSBvZiBwYWdlc2l6ZQorICAgIGlmICghcGFn
ZXNpemUpCisgICAgICAgIHBhZ2VzaXplID0gZ2V0cGFnZXNpemUoKTsKKyAgICBzaXplID0gKHNp
emUgKyBwYWdlc2l6ZSAtIDEpICYgfihwYWdlc2l6ZSAtIDEpOworICAgIHZvaWQqIHJlc3VsdCA9
IGRvTWVtYWxpZ24ocGFnZXNpemUsIHNpemUpOworICAgIE1hbGxvY0hvb2s6Okludm9rZU5ld0hv
b2socmVzdWx0LCBzaXplKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi1leHRlcm4gIkMiIHZv
aWQgbWFsbG9jX3N0YXRzKHZvaWQpIHsKLSAgZG9fbWFsbG9jX3N0YXRzKCk7CitleHRlcm4gIkMi
IHZvaWQgbWFsbG9jX3N0YXRzKHZvaWQpCit7CisgICAgZG9NYWxsb2NTdGF0cygpOwogfQogCi1l
eHRlcm4gIkMiIGludCBtYWxsb3B0KGludCBjbWQsIGludCB2YWx1ZSkgewotICByZXR1cm4gZG9f
bWFsbG9wdChjbWQsIHZhbHVlKTsKK2V4dGVybiAiQyIgaW50IG1hbGxvcHQoaW50IGNtZCwgaW50
IHZhbHVlKQoreworICAgIHJldHVybiBkb01hbGxvcHQoY21kLCB2YWx1ZSk7CiB9CiAKICNpZmRl
ZiBIQVZFX1NUUlVDVF9NQUxMSU5GTwotZXh0ZXJuICJDIiBzdHJ1Y3QgbWFsbGluZm8gbWFsbGlu
Zm8odm9pZCkgewotICByZXR1cm4gZG9fbWFsbGluZm8oKTsKK2V4dGVybiAiQyIgc3RydWN0IG1h
bGxpbmZvIG1hbGxpbmZvKHZvaWQpCit7CisgICAgcmV0dXJuIGRvTWFsbGluZm8oKTsKIH0KICNl
bmRpZgogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vIFNvbWUgbGlicmFyeSByb3V0aW5lcyBvbiBSZWRIYXQg
OSBhbGxvY2F0ZSBtZW1vcnkgdXNpbmcgbWFsbG9jKCkKLS8vIGFuZCBmcmVlIGl0IHVzaW5nIF9f
bGliY19mcmVlKCkgKG9yIHZpY2UtdmVyc2EpLiAgU2luY2Ugd2UgcHJvdmlkZQorLy8gYW5kIGZy
ZWUgaXQgdXNpbmcgX19saWJjX2ZyZWUoKSAob3IgdmljZS12ZXJzYSkuIFNpbmNlIHdlIHByb3Zp
ZGUKIC8vIG91ciBvd24gaW1wbGVtZW50YXRpb25zIG9mIG1hbGxvYy9mcmVlLCB3ZSBuZWVkIHRv
IG1ha2Ugc3VyZSB0aGF0CiAvLyB0aGUgX19saWJjX1hYWCB2YXJpYW50cyAoZGVmaW5lZCBhcyBw
YXJ0IG9mIGdsaWJjKSBhbHNvIHBvaW50IHRvCiAvLyB0aGUgc2FtZSBpbXBsZW1lbnRhdGlvbnMu
CkBAIC00Mjk5LDExICs0NDEwLDEwIEBAIGV4dGVybiAiQyIgewogLy8gVGhpcyBmdW5jdGlvbiBp
cyBhbiBleGNlcHRpb24gdG8gdGhlIHJ1bGUgb2YgY2FsbGluZyBNYWxsb2NIb29rIG1ldGhvZAog
Ly8gZnJvbSB0aGUgc3RhY2sgZnJhbWUgb2YgdGhlIGFsbG9jYXRpb24gZnVuY3Rpb247CiAvLyBo
ZWFwLWNoZWNrZXIgaGFuZGxlcyB0aGlzIHNwZWNpYWwgY2FzZSBleHBsaWNpdGx5Lgotc3RhdGlj
IHZvaWQgKk1lbWFsaWduT3ZlcnJpZGUoc2l6ZV90IGFsaWduLCBzaXplX3Qgc2l6ZSwgY29uc3Qg
dm9pZCAqY2FsbGVyKQotICAgIF9fVEhST1cgewotICB2b2lkKiByZXN1bHQgPSBkb19tZW1hbGln
bihhbGlnbiwgc2l6ZSk7Ci0gIE1hbGxvY0hvb2s6Okludm9rZU5ld0hvb2socmVzdWx0LCBzaXpl
KTsKLSAgcmV0dXJuIHJlc3VsdDsKK3N0YXRpYyB2b2lkICpNZW1hbGlnbk92ZXJyaWRlKHNpemVf
dCBhbGlnbiwgc2l6ZV90IHNpemUsIGNvbnN0IHZvaWQgKmNhbGxlcikgX19USFJPVyB7CisgICAg
dm9pZCogcmVzdWx0ID0gZG9NZW1hbGlnbihhbGlnbiwgc2l6ZSk7CisgICAgTWFsbG9jSG9vazo6
SW52b2tlTmV3SG9vayhyZXN1bHQsIHNpemUpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiB2b2lk
ICooKl9fbWVtYWxpZ25faG9vaykoc2l6ZV90LCBzaXplX3QsIGNvbnN0IHZvaWQgKikgPSBNZW1h
bGlnbk92ZXJyaWRlOwogCkBAIC00MzE1LDEyICs0NDI1LDEyIEBAIHZvaWQgcmVsZWFzZUZhc3RN
YWxsb2NGcmVlTWVtb3J5KCkKICAgICAvLyBGbHVzaCBmcmVlIHBhZ2VzIGluIHRoZSBjdXJyZW50
IHRocmVhZCBjYWNoZSBiYWNrIHRvIHRoZSBwYWdlIGhlYXAuCiAgICAgLy8gTG93IHdhdGVybWFy
ayBtZWNoYW5pc20gaW4gU2NhdmVuZ2UoKSBwcmV2ZW50cyBmdWxsIHJldHVybiBvbiB0aGUgZmly
c3QgcGFzcy4KICAgICAvLyBUaGUgc2Vjb25kIHBhc3MgZmx1c2hlcyBldmVyeXRoaW5nLgotICAg
IGlmIChUQ01hbGxvY19UaHJlYWRDYWNoZSogdGhyZWFkQ2FjaGUgPSBUQ01hbGxvY19UaHJlYWRD
YWNoZTo6R2V0Q2FjaGVJZlByZXNlbnQoKSkgeworICAgIGlmIChUQ01hbGxvY1RocmVhZENhY2hl
KiB0aHJlYWRDYWNoZSA9IFRDTWFsbG9jVGhyZWFkQ2FjaGU6OkdldENhY2hlSWZQcmVzZW50KCkp
IHsKICAgICAgICAgdGhyZWFkQ2FjaGUtPlNjYXZlbmdlKCk7CiAgICAgICAgIHRocmVhZENhY2hl
LT5TY2F2ZW5nZSgpOwogICAgIH0KIAotICAgIFNwaW5Mb2NrSG9sZGVyIGgoJnBhZ2VoZWFwX2xv
Y2spOworICAgIFNwaW5Mb2NrSG9sZGVyIGgoJnBhZ2VoZWFwTG9jayk7CiAgICAgcGFnZWhlYXAt
PlJlbGVhc2VGcmVlUGFnZXMoKTsKIH0KICAgICAKQEAgLTQzMjgsMTggKzQ0MzgsMTggQEAgRmFz
dE1hbGxvY1N0YXRpc3RpY3MgZmFzdE1hbGxvY1N0YXRpc3RpYwogewogICAgIEZhc3RNYWxsb2NT
dGF0aXN0aWNzIHN0YXRpc3RpY3M7CiAKLSAgICBTcGluTG9ja0hvbGRlciBsb2NrSG9sZGVyKCZw
YWdlaGVhcF9sb2NrKTsKKyAgICBTcGluTG9ja0hvbGRlciBsb2NrSG9sZGVyKCZwYWdlaGVhcExv
Y2spOwogICAgIHN0YXRpc3RpY3MucmVzZXJ2ZWRWTUJ5dGVzID0gc3RhdGljX2Nhc3Q8c2l6ZV90
PihwYWdlaGVhcC0+U3lzdGVtQnl0ZXMoKSk7CiAgICAgc3RhdGlzdGljcy5jb21taXR0ZWRWTUJ5
dGVzID0gc3RhdGlzdGljcy5yZXNlcnZlZFZNQnl0ZXMgLSBwYWdlaGVhcC0+UmV0dXJuZWRCeXRl
cygpOwogCiAgICAgc3RhdGlzdGljcy5mcmVlTGlzdEJ5dGVzID0gMDsKICAgICBmb3IgKHVuc2ln
bmVkIGNsID0gMDsgY2wgPCBrTnVtQ2xhc3NlczsgKytjbCkgewotICAgICAgICBjb25zdCBpbnQg
bGVuZ3RoID0gY2VudHJhbF9jYWNoZVtjbF0ubGVuZ3RoKCk7Ci0gICAgICAgIGNvbnN0IGludCB0
Y19sZW5ndGggPSBjZW50cmFsX2NhY2hlW2NsXS50Y19sZW5ndGgoKTsKKyAgICAgICAgY29uc3Qg
aW50IGxlbmd0aCA9IGNlbnRyYWxDYWNoZVtjbF0ubGVuZ3RoKCk7CisgICAgICAgIGNvbnN0IGlu
dCB0Y0xlbmd0aCA9IGNlbnRyYWxDYWNoZVtjbF0udGNMZW5ndGgoKTsKIAotICAgICAgICBzdGF0
aXN0aWNzLmZyZWVMaXN0Qnl0ZXMgKz0gQnl0ZVNpemVGb3JDbGFzcyhjbCkgKiAobGVuZ3RoICsg
dGNfbGVuZ3RoKTsKKyAgICAgICAgc3RhdGlzdGljcy5mcmVlTGlzdEJ5dGVzICs9IEJ5dGVTaXpl
Rm9yQ2xhc3MoY2wpICogKGxlbmd0aCArIHRjTGVuZ3RoKTsKICAgICB9Ci0gICAgZm9yIChUQ01h
bGxvY19UaHJlYWRDYWNoZSogdGhyZWFkQ2FjaGUgPSB0aHJlYWRfaGVhcHM7IHRocmVhZENhY2hl
IDsgdGhyZWFkQ2FjaGUgPSB0aHJlYWRDYWNoZS0+bmV4dF8pCisgICAgZm9yIChUQ01hbGxvY1Ro
cmVhZENhY2hlKiB0aHJlYWRDYWNoZSA9IHRocmVhZEhlYXBzOyB0aHJlYWRDYWNoZSA7IHRocmVh
ZENhY2hlID0gdGhyZWFkQ2FjaGUtPm5leHQpCiAgICAgICAgIHN0YXRpc3RpY3MuZnJlZUxpc3RC
eXRlcyArPSB0aHJlYWRDYWNoZS0+U2l6ZSgpOwogCiAgICAgcmV0dXJuIHN0YXRpc3RpY3M7CkBA
IC00MzU2LDEyICs0NDY2LDEyIEBAIHNpemVfdCBmYXN0TWFsbG9jU2l6ZShjb25zdCB2b2lkKiBw
dHIpCiAgICAgaWYgKCFzcGFuIHx8IHNwYW4tPmZyZWUpCiAgICAgICAgIHJldHVybiAwOwogCi0g
ICAgZm9yICh2b2lkKiBmcmVlID0gc3Bhbi0+b2JqZWN0czsgZnJlZSAhPSBOVUxMOyBmcmVlID0g
Kigodm9pZCoqKSBmcmVlKSkgeworICAgIGZvciAodm9pZCogZnJlZSA9IHNwYW4tPm9iamVjdHM7
IGZyZWU7IGZyZWUgPSAqKCh2b2lkKiopIGZyZWUpKSB7CiAgICAgICAgIGlmIChwdHIgPT0gZnJl
ZSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIGlmIChzaXplX3QgY2wgPSBz
cGFuLT5zaXplY2xhc3MpCisgICAgaWYgKHNpemVfdCBjbCA9IHNwYW4tPnNpemVDbGFzcykKICAg
ICAgICAgcmV0dXJuIEJ5dGVTaXplRm9yQ2xhc3MoY2wpOwogCiAgICAgcmV0dXJuIHNwYW4tPmxl
bmd0aCA8PCBrUGFnZVNoaWZ0OwpAQCAtNDM4MiwxMyArNDQ5MiwxMyBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBpc0ZyZWVPYmplY3Qodm1fYWRkcmVzc190IHB0cikgY29uc3QgeyByZXR1cm4gaXNGcmVl
T2JqZWN0KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHB0cikpOyB9CiAgICAgc2l6ZV90IGZyZWVP
YmplY3RDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJlZU9iamVjdHMuc2l6ZSgpOyB9CiAKLSAg
ICB2b2lkIGZpbmRGcmVlT2JqZWN0cyhUQ01hbGxvY19UaHJlYWRDYWNoZSogdGhyZWFkQ2FjaGUp
CisgICAgdm9pZCBmaW5kRnJlZU9iamVjdHMoVENNYWxsb2NUaHJlYWRDYWNoZSogdGhyZWFkQ2Fj
aGUpCiAgICAgewotICAgICAgICBmb3IgKDsgdGhyZWFkQ2FjaGU7IHRocmVhZENhY2hlID0gKHRo
cmVhZENhY2hlLT5uZXh0XyA/IG1fcmVhZGVyKHRocmVhZENhY2hlLT5uZXh0XykgOiAwKSkKKyAg
ICAgICAgZm9yICg7IHRocmVhZENhY2hlOyB0aHJlYWRDYWNoZSA9ICh0aHJlYWRDYWNoZS0+bmV4
dCA/IG1fcmVhZGVyKHRocmVhZENhY2hlLT5uZXh0KSA6IDApKQogICAgICAgICAgICAgdGhyZWFk
Q2FjaGUtPmVudW1lcmF0ZUZyZWVPYmplY3RzKCp0aGlzLCBtX3JlYWRlcik7CiAgICAgfQogCi0g
ICAgdm9pZCBmaW5kRnJlZU9iamVjdHMoVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdFBhZGRlZCog
Y2VudHJhbEZyZWVMaXN0LCBzaXplX3QgbnVtU2l6ZXMsIFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxp
c3RQYWRkZWQqIHJlbW90ZUNlbnRyYWxGcmVlTGlzdCkKKyAgICB2b2lkIGZpbmRGcmVlT2JqZWN0
cyhUQ01hbGxvY0NlbnRyYWxGcmVlTGlzdFBhZGRlZCogY2VudHJhbEZyZWVMaXN0LCBzaXplX3Qg
bnVtU2l6ZXMsIFRDTWFsbG9jQ2VudHJhbEZyZWVMaXN0UGFkZGVkKiByZW1vdGVDZW50cmFsRnJl
ZUxpc3QpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtU2l6ZXM7
IGkrKykKICAgICAgICAgICAgIGNlbnRyYWxGcmVlTGlzdFtpXS5lbnVtZXJhdGVGcmVlT2JqZWN0
cygqdGhpcywgbV9yZWFkZXIsIHJlbW90ZUNlbnRyYWxGcmVlTGlzdCArIGkpOwpAQCAtNDQxNyw3
ICs0NTI3LDcgQEAgcHVibGljOgogICAgICAgICBpZiAoc3Bhbi0+ZnJlZSkgewogICAgICAgICAg
ICAgdm9pZCogcHRyID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc3Bhbi0+c3RhcnQgPDwga1Bh
Z2VTaGlmdCk7CiAgICAgICAgICAgICBtX2ZyZWVPYmplY3RGaW5kZXIudmlzaXQocHRyKTsKLSAg
ICAgICAgfSBlbHNlIGlmIChzcGFuLT5zaXplY2xhc3MpIHsKKyAgICAgICAgfSBlbHNlIGlmIChz
cGFuLT5zaXplQ2xhc3MpIHsKICAgICAgICAgICAgIC8vIFdhbGsgdGhlIGZyZWUgbGlzdCBvZiB0
aGUgc21hbGwtb2JqZWN0IHNwYW4sIGtlZXBpbmcgdHJhY2sgb2YgZWFjaCBvYmplY3Qgc2Vlbgog
ICAgICAgICAgICAgZm9yICh2b2lkKiBuZXh0T2JqZWN0ID0gc3Bhbi0+b2JqZWN0czsgbmV4dE9i
amVjdDsgbmV4dE9iamVjdCA9IG1fcmVhZGVyLm5leHRFbnRyeUluTGlua2VkTGlzdChyZWludGVy
cHJldF9jYXN0PHZvaWQqKj4obmV4dE9iamVjdCkpKQogICAgICAgICAgICAgICAgIG1fZnJlZU9i
amVjdEZpbmRlci52aXNpdChuZXh0T2JqZWN0KTsKQEAgLTQ0NjksMTkgKzQ1NzksMTkgQEAgcHVi
bGljOgogCiAgICAgICAgIFZlY3Rvcjx2bV9yYW5nZV90LCAxMDI0PiBhbGxvY2F0ZWRQb2ludGVy
czsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2NvYWxlc2NlZFNwYW5zLnNpemUo
KTsgKytpKSB7Ci0gICAgICAgICAgICBTcGFuICp0aGVTcGFuID0gbV9jb2FsZXNjZWRTcGFuc1tp
XTsKKyAgICAgICAgICAgIFNwYW4qIHRoZVNwYW4gPSBtX2NvYWxlc2NlZFNwYW5zW2ldOwogICAg
ICAgICAgICAgaWYgKHRoZVNwYW4tPmZyZWUpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAK
ICAgICAgICAgICAgIHZtX2FkZHJlc3NfdCBzcGFuU3RhcnRBZGRyZXNzID0gdGhlU3Bhbi0+c3Rh
cnQgPDwga1BhZ2VTaGlmdDsKICAgICAgICAgICAgIHZtX3NpemVfdCBzcGFuU2l6ZUluQnl0ZXMg
PSB0aGVTcGFuLT5sZW5ndGggKiBrUGFnZVNpemU7CiAKLSAgICAgICAgICAgIGlmICghdGhlU3Bh
bi0+c2l6ZWNsYXNzKSB7CisgICAgICAgICAgICBpZiAoIXRoZVNwYW4tPnNpemVDbGFzcykgewog
ICAgICAgICAgICAgICAgIC8vIElmIGl0J3MgYW4gYWxsb2NhdGVkIGxhcmdlIG9iamVjdCBzcGFu
LCBtYXJrIGl0IGFzIGluIHVzZQogICAgICAgICAgICAgICAgIGlmICghbV9mcmVlT2JqZWN0Rmlu
ZGVyLmlzRnJlZU9iamVjdChzcGFuU3RhcnRBZGRyZXNzKSkKICAgICAgICAgICAgICAgICAgICAg
YWxsb2NhdGVkUG9pbnRlcnMuYXBwZW5kKCh2bV9yYW5nZV90KXtzcGFuU3RhcnRBZGRyZXNzLCBz
cGFuU2l6ZUluQnl0ZXN9KTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
Y29uc3Qgc2l6ZV90IG9iamVjdFNpemUgPSBCeXRlU2l6ZUZvckNsYXNzKHRoZVNwYW4tPnNpemVj
bGFzcyk7CisgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IG9iamVjdFNpemUgPSBCeXRlU2l6
ZUZvckNsYXNzKHRoZVNwYW4tPnNpemVDbGFzcyk7CiAKICAgICAgICAgICAgICAgICAvLyBNYXJr
IGVhY2ggYWxsb2NhdGVkIHNtYWxsIG9iamVjdCB3aXRoaW4gdGhlIHNwYW4gYXMgaW4gdXNlCiAg
ICAgICAgICAgICAgICAgY29uc3Qgdm1fYWRkcmVzc190IGVuZE9mU3BhbiA9IHNwYW5TdGFydEFk
ZHJlc3MgKyBzcGFuU2l6ZUluQnl0ZXM7CkBAIC00NTg0LDE3ICs0Njk0LDE3IEBAIGtlcm5fcmV0
dXJuX3QgRmFzdE1hbGxvY1pvbmU6OmVudW1lcmF0ZSgKICAgICBJbml0U2l6ZUNsYXNzZXMoKTsK
IAogICAgIEZhc3RNYWxsb2Nab25lKiBtem9uZSA9IG1lbW9yeVJlYWRlcihyZWludGVycHJldF9j
YXN0PEZhc3RNYWxsb2Nab25lKj4oem9uZUFkZHJlc3MpKTsKLSAgICBUQ01hbGxvY19QYWdlSGVh
cCogcGFnZUhlYXAgPSBtZW1vcnlSZWFkZXIobXpvbmUtPm1fcGFnZUhlYXApOwotICAgIFRDTWFs
bG9jX1RocmVhZENhY2hlKiogdGhyZWFkSGVhcHNQb2ludGVyID0gbWVtb3J5UmVhZGVyKG16b25l
LT5tX3RocmVhZEhlYXBzKTsKLSAgICBUQ01hbGxvY19UaHJlYWRDYWNoZSogdGhyZWFkSGVhcHMg
PSBtZW1vcnlSZWFkZXIoKnRocmVhZEhlYXBzUG9pbnRlcik7CisgICAgVENNYWxsb2NQYWdlSGVh
cCogcGFnZUhlYXAgPSBtZW1vcnlSZWFkZXIobXpvbmUtPm1fcGFnZUhlYXApOworICAgIFRDTWFs
bG9jVGhyZWFkQ2FjaGUqKiB0aHJlYWRIZWFwc1BvaW50ZXIgPSBtZW1vcnlSZWFkZXIobXpvbmUt
Pm1fdGhyZWFkSGVhcHMpOworICAgIFRDTWFsbG9jVGhyZWFkQ2FjaGUqIHRocmVhZEhlYXBzID0g
bWVtb3J5UmVhZGVyKCp0aHJlYWRIZWFwc1BvaW50ZXIpOwogCi0gICAgVENNYWxsb2NfQ2VudHJh
bF9GcmVlTGlzdFBhZGRlZCogY2VudHJhbENhY2hlcyA9IG1lbW9yeVJlYWRlcihtem9uZS0+bV9j
ZW50cmFsQ2FjaGVzLCBzaXplb2YoVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdFBhZGRlZCkgKiBr
TnVtQ2xhc3Nlcyk7CisgICAgVENNYWxsb2NDZW50cmFsRnJlZUxpc3RQYWRkZWQqIGNlbnRyYWxD
YWNoZXMgPSBtZW1vcnlSZWFkZXIobXpvbmUtPm1fY2VudHJhbENhY2hlcywgc2l6ZW9mKFRDTWFs
bG9jQ2VudHJhbEZyZWVMaXN0UGFkZGVkKSAqIGtOdW1DbGFzc2VzKTsKIAogICAgIEZyZWVPYmpl
Y3RGaW5kZXIgZmluZGVyKG1lbW9yeVJlYWRlcik7CiAgICAgZmluZGVyLmZpbmRGcmVlT2JqZWN0
cyh0aHJlYWRIZWFwcyk7CiAgICAgZmluZGVyLmZpbmRGcmVlT2JqZWN0cyhjZW50cmFsQ2FjaGVz
LCBrTnVtQ2xhc3NlcywgbXpvbmUtPm1fY2VudHJhbENhY2hlcyk7CiAKLSAgICBUQ01hbGxvY19Q
YWdlSGVhcDo6UGFnZU1hcCogcGFnZU1hcCA9ICZwYWdlSGVhcC0+cGFnZW1hcF87CisgICAgVENN
YWxsb2NQYWdlSGVhcDo6UGFnZU1hcCogcGFnZU1hcCA9ICZwYWdlSGVhcC0+cGFnZU1hcDsKICAg
ICBQYWdlTWFwRnJlZU9iamVjdEZpbmRlciBwYWdlTWFwRmluZGVyKG1lbW9yeVJlYWRlciwgZmlu
ZGVyKTsKICAgICBwYWdlTWFwLT52aXNpdFZhbHVlcyhwYWdlTWFwRmluZGVyLCBtZW1vcnlSZWFk
ZXIpOwogCkBAIC00NjA2LDcgKzQ3MTYsNyBAQCBrZXJuX3JldHVybl90IEZhc3RNYWxsb2Nab25l
OjplbnVtZXJhdGUoCiAgICAgcGFnZU1hcC0+dmlzaXRBbGxvY2F0aW9ucyhhZG1pblJlZ2lvblJl
Y29yZGVyLCBtZW1vcnlSZWFkZXIpOwogCiAgICAgUGFnZUhlYXBBbGxvY2F0b3I8U3Bhbj4qIHNw
YW5BbGxvY2F0b3IgPSBtZW1vcnlSZWFkZXIobXpvbmUtPm1fc3BhbkFsbG9jYXRvcik7Ci0gICAg
UGFnZUhlYXBBbGxvY2F0b3I8VENNYWxsb2NfVGhyZWFkQ2FjaGU+KiBwYWdlSGVhcEFsbG9jYXRv
ciA9IG1lbW9yeVJlYWRlcihtem9uZS0+bV9wYWdlSGVhcEFsbG9jYXRvcik7CisgICAgUGFnZUhl
YXBBbGxvY2F0b3I8VENNYWxsb2NUaHJlYWRDYWNoZT4qIHBhZ2VIZWFwQWxsb2NhdG9yID0gbWVt
b3J5UmVhZGVyKG16b25lLT5tX3BhZ2VIZWFwQWxsb2NhdG9yKTsKIAogICAgIHNwYW5BbGxvY2F0
b3ItPnJlY29yZEFkbWluaXN0cmF0aXZlUmVnaW9ucyhhZG1pblJlZ2lvblJlY29yZGVyLCBtZW1v
cnlSZWFkZXIpOwogICAgIHBhZ2VIZWFwQWxsb2NhdG9yLT5yZWNvcmRBZG1pbmlzdHJhdGl2ZVJl
Z2lvbnMoYWRtaW5SZWdpb25SZWNvcmRlciwgbWVtb3J5UmVhZGVyKTsKQEAgLTQ2MzQsNyArNDc0
NCw3IEBAIHZvaWQqIEZhc3RNYWxsb2Nab25lOjp6b25lQ2FsbG9jKG1hbGxvY18KIHZvaWQgRmFz
dE1hbGxvY1pvbmU6OnpvbmVGcmVlKG1hbGxvY196b25lX3QqLCB2b2lkKiBwdHIpCiB7CiAgICAg
Ly8gRHVlIHRvIDxyZGFyOi8vcHJvYmxlbS81NjcxMzU3PiB6b25lRnJlZSBtYXkgYmUgY2FsbGVk
IGJ5IHRoZSBzeXN0ZW0gZnJlZSBldmVuIGlmIHRoZSBwb2ludGVyCi0gICAgLy8gaXMgbm90IGlu
IHRoaXMgem9uZS4gIFdoZW4gdGhpcyBoYXBwZW5zLCB0aGUgcG9pbnRlciBiZWluZyBmcmVlZCB3
YXMgbm90IGFsbG9jYXRlZCBieSBhbnkKKyAgICAvLyBpcyBub3QgaW4gdGhpcyB6b25lLiBXaGVu
IHRoaXMgaGFwcGVucywgdGhlIHBvaW50ZXIgYmVpbmcgZnJlZWQgd2FzIG5vdCBhbGxvY2F0ZWQg
YnkgYW55CiAgICAgLy8gem9uZSBzbyB3ZSBuZWVkIHRvIHByaW50IGEgdXNlZnVsIGVycm9yIGZv
ciB0aGUgYXBwbGljYXRpb24gZGV2ZWxvcGVyLgogICAgIG1hbGxvY19wcmludGYoIioqKiBlcnJv
ciBmb3Igb2JqZWN0ICVwOiBwb2ludGVyIGJlaW5nIGZyZWVkIHdhcyBub3QgYWxsb2NhdGVkXG4i
LCBwdHIpOwogfQpAQCAtNDY2NCw3ICs0Nzc0LDcgQEAgbWFsbG9jX2ludHJvc3BlY3Rpb25fdCBq
c2NvcmVfZmFzdG1hbGxvYwogICAgIH07CiB9CiAKLUZhc3RNYWxsb2Nab25lOjpGYXN0TWFsbG9j
Wm9uZShUQ01hbGxvY19QYWdlSGVhcCogcGFnZUhlYXAsIFRDTWFsbG9jX1RocmVhZENhY2hlKiog
dGhyZWFkSGVhcHMsIFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3RQYWRkZWQqIGNlbnRyYWxDYWNo
ZXMsIFBhZ2VIZWFwQWxsb2NhdG9yPFNwYW4+KiBzcGFuQWxsb2NhdG9yLCBQYWdlSGVhcEFsbG9j
YXRvcjxUQ01hbGxvY19UaHJlYWRDYWNoZT4qIHBhZ2VIZWFwQWxsb2NhdG9yKQorRmFzdE1hbGxv
Y1pvbmU6OkZhc3RNYWxsb2Nab25lKFRDTWFsbG9jUGFnZUhlYXAqIHBhZ2VIZWFwLCBUQ01hbGxv
Y1RocmVhZENhY2hlKiogdGhyZWFkSGVhcHMsIFRDTWFsbG9jQ2VudHJhbEZyZWVMaXN0UGFkZGVk
KiBjZW50cmFsQ2FjaGVzLCBQYWdlSGVhcEFsbG9jYXRvcjxTcGFuPiogc3BhbkFsbG9jYXRvciwg
UGFnZUhlYXBBbGxvY2F0b3I8VENNYWxsb2NUaHJlYWRDYWNoZT4qIHBhZ2VIZWFwQWxsb2NhdG9y
KQogICAgIDogbV9wYWdlSGVhcChwYWdlSGVhcCkKICAgICAsIG1fdGhyZWFkSGVhcHModGhyZWFk
SGVhcHMpCiAgICAgLCBtX2NlbnRyYWxDYWNoZXMoY2VudHJhbENhY2hlcykKQEAgLTQ2ODgsNyAr
NDc5OCw3IEBAIEZhc3RNYWxsb2Nab25lOjpGYXN0TWFsbG9jWm9uZShUQ01hbGxvY18KIAogdm9p
ZCBGYXN0TWFsbG9jWm9uZTo6aW5pdCgpCiB7Ci0gICAgc3RhdGljIEZhc3RNYWxsb2Nab25lIHpv
bmUocGFnZWhlYXAsICZ0aHJlYWRfaGVhcHMsIHN0YXRpY19jYXN0PFRDTWFsbG9jX0NlbnRyYWxf
RnJlZUxpc3RQYWRkZWQqPihjZW50cmFsX2NhY2hlKSwgJnNwYW5fYWxsb2NhdG9yLCAmdGhyZWFk
aGVhcF9hbGxvY2F0b3IpOworICAgIHN0YXRpYyBGYXN0TWFsbG9jWm9uZSB6b25lKHBhZ2VoZWFw
LCAmdGhyZWFkSGVhcHMsIHN0YXRpY19jYXN0PFRDTWFsbG9jQ2VudHJhbEZyZWVMaXN0UGFkZGVk
Kj4oY2VudHJhbENhY2hlKSwgJnNwYW5BbGxvY2F0b3IsICZ0aHJlYWRoZWFwQWxsb2NhdG9yKTsK
IH0KIAogI2VuZGlmIC8vIE9TKERBUldJTikK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>173960</attachid>
            <date>2012-11-13 13:00:46 -0800</date>
            <delta_ts>2013-06-17 23:35:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89608-20121113125902.patch</filename>
            <type>text/plain</type>
            <size>235611</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxMzQ0NjApCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE0MyBAQAorMjAxMi0xMS0xMyAgQnJlbnQgRnVsZ2hhbSA8YmZ1
bGdoYW1Ad2Via2l0Lm9yZz4gYW5kIEFsZXggQ2hyaXN0ZW5zZW4gIDxhbGV4LmNocmlzdGVuc2Vu
QGZsZXhzaW0uY29tPgorCisgICAgICAgIEZhc3RNYWxsb2MuY3BwIG5lZWRzIHRvIGhhdmUgaXRz
IHN0eWxlIHVwZGF0ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTg5NjA4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgUnlvc3VrZSBOaXdhLgorCisgICAg
ICAgICogd3RmL0Zhc3RNYWxsb2MuY3BwOgorICAgICAgICBNYWRlIHRoZSBmaWxlIHN0eWxlIGNv
bmZvcm1hbnQuCisgICAgICAgIChXVEY6OnRyeUZhc3RNYWxsb2MpOgorICAgICAgICAoV1RGOjp0
cnlGYXN0Q2FsbG9jKToKKyAgICAgICAgKFdURjo6ZmFzdENhbGxvYyk6CisgICAgICAgIChXVEY6
OmZhc3RGcmVlKToKKyAgICAgICAgKFdURjo6dHJ5RmFzdFJlYWxsb2MpOgorICAgICAgICAoV1RG
OjpmYXN0TWFsbG9jU2l6ZSk6CisgICAgICAgIChXVEYpOgorICAgICAgICAoRmFzdE1hbGxvY1pv
bmUpOgorICAgICAgICAoV1RGOjpLZXJuZWxTdXBwb3J0c1RMUyk6CisgICAgICAgIChXVEY6OkNo
ZWNrSWZLZXJuZWxTdXBwb3J0c1RMUyk6CisgICAgICAgIChXVEY6OkNsYXNzSW5kZXgpOgorICAg
ICAgICAoVENFbnRyeSk6CisgICAgICAgIChXVEY6OlNMTF9OZXh0KToKKyAgICAgICAgKFdURjo6
U0xMU2V0TmV4dCk6CisgICAgICAgIChXVEY6OlNMTFB1c2gpOgorICAgICAgICAoV1RGOjpTTExQ
b3ApOgorICAgICAgICAoV1RGOjpTTExQb3BSYW5nZSk6CisgICAgICAgIChXVEY6OlNMTFB1c2hS
YW5nZSk6CisgICAgICAgIChXVEY6OlNMTFNpemUpOgorICAgICAgICAoV1RGOjpTaXplQ2xhc3Mp
OgorICAgICAgICAoV1RGOjpCeXRlU2l6ZUZvckNsYXNzKToKKyAgICAgICAgKFdURjo6TnVtTW92
ZVNpemUpOgorICAgICAgICAoV1RGOjpJbml0U2l6ZUNsYXNzZXMpOgorICAgICAgICAoV1RGOjpN
ZXRhRGF0YUFsbG9jKToKKyAgICAgICAgKFBhZ2VIZWFwQWxsb2NhdG9yKToKKyAgICAgICAgKFdU
Rjo6UGFnZUhlYXBBbGxvY2F0b3I6OkluaXQpOgorICAgICAgICAoV1RGOjpQYWdlSGVhcEFsbG9j
YXRvcjo6TmV3KToKKyAgICAgICAgKFdURjo6UGFnZUhlYXBBbGxvY2F0b3I6OkRlbGV0ZSk6Cisg
ICAgICAgIChXVEY6OlBhZ2VIZWFwQWxsb2NhdG9yOjppbnVzZSk6CisgICAgICAgIChXVEY6OlBh
Z2VIZWFwQWxsb2NhdG9yOjpyZWNvcmRBZG1pbmlzdHJhdGl2ZVJlZ2lvbnMpOgorICAgICAgICAo
V1RGOjpwYWdlcyk6CisgICAgICAgIChXVEY6OkFsbG9jYXRpb25TaXplKToKKyAgICAgICAgKFNw
YW4pOgorICAgICAgICAoV1RGOjpFdmVudCk6CisgICAgICAgIChXVEY6Ok5ld1NwYW4pOgorICAg
ICAgICAoV1RGOjpEZWxldGVTcGFuKToKKyAgICAgICAgKFdURjo6RExMSW5pdCk6CisgICAgICAg
IChXVEY6OkRMTFJlbW92ZSk6CisgICAgICAgIChXVEY6OkRMTF9Jc0VtcHR5KToKKyAgICAgICAg
KFdURjo6RExMTGVuZ3RoKToKKyAgICAgICAgKFdURjo6RExMUHJpbnQpOgorICAgICAgICAoV1RG
OjpETExQcmVwZW5kKToKKyAgICAgICAgKFN0YWNrVHJhY2UpOgorICAgICAgICAoTWFwU2VsZWN0
b3IpOgorICAgICAgICAoVENNYWxsb2NQYWdlSGVhcCk6CisgICAgICAgIChXVEY6OlRDTWFsbG9j
UGFnZUhlYXA6OkdldERlc2NyaXB0b3IpOgorICAgICAgICAoV1RGOjpUQ01hbGxvY1BhZ2VIZWFw
OjpHZXREZXNjcmlwdG9yRW5zdXJlU2FmZSk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jUGFnZUhl
YXA6OlN5c3RlbUJ5dGVzKToKKyAgICAgICAgKFdURjo6VENNYWxsb2NQYWdlSGVhcDo6RnJlZUJ5
dGVzKToKKyAgICAgICAgKFdURjo6VENNYWxsb2NQYWdlSGVhcDo6R2V0U2l6ZUNsYXNzSWZDYWNo
ZWQpOgorICAgICAgICAoV1RGOjpUQ01hbGxvY1BhZ2VIZWFwOjpDYWNoZVNpemVDbGFzcyk6Cisg
ICAgICAgIChTcGFuTGlzdCk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jUGFnZUhlYXA6OlJlY29y
ZFNwYW4pOgorICAgICAgICAoV1RGOjpUQ01hbGxvY1BhZ2VIZWFwOjppbml0KToKKyAgICAgICAg
KFdURjo6VENNYWxsb2NQYWdlSGVhcDo6aW5pdGlhbGl6ZVNjYXZlbmdlcik6CisgICAgICAgIChX
VEY6OlRDTWFsbG9jUGFnZUhlYXA6OmlzU2NhdmVuZ2VyU3VzcGVuZGVkKToKKyAgICAgICAgKFdU
Rjo6VENNYWxsb2NQYWdlSGVhcDo6c2NoZWR1bGVTY2F2ZW5nZXIpOgorICAgICAgICAoV1RGOjpU
Q01hbGxvY1BhZ2VIZWFwOjpyZXNjaGVkdWxlU2NhdmVuZ2VyKToKKyAgICAgICAgKFdURjo6VENN
YWxsb2NQYWdlSGVhcDo6c3VzcGVuZFNjYXZlbmdlcik6CisgICAgICAgIChXVEY6OlRDTWFsbG9j
UGFnZUhlYXA6OnNjYXZlbmdlclRpbWVyRmlyZWQpOgorICAgICAgICAoV1RGOjpUQ01hbGxvY1Bh
Z2VIZWFwOjpydW5TY2F2ZW5nZXJUaHJlYWQpOgorICAgICAgICAoV1RGOjpUQ01hbGxvY1BhZ2VI
ZWFwOjpzaWduYWxTY2F2ZW5nZXIpOgorICAgICAgICAoV1RGOjpUQ01hbGxvY1BhZ2VIZWFwOjpz
Y2F2ZW5nZSk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jUGFnZUhlYXA6OnNob3VsZFNjYXZlbmdl
KToKKyAgICAgICAgKFdURjo6VENNYWxsb2NQYWdlSGVhcDo6TmV3KToKKyAgICAgICAgKFdURjo6
VENNYWxsb2NQYWdlSGVhcDo6QWxsb2NMYXJnZSk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jUGFn
ZUhlYXA6OlNwbGl0KToKKyAgICAgICAgKFdURjo6VENNYWxsb2NQYWdlSGVhcDo6Q2FydmUpOgor
ICAgICAgICAoV1RGOjpUQ01hbGxvY1BhZ2VIZWFwOjpEZWxldGUpOgorICAgICAgICAoV1RGOjpU
Q01hbGxvY1BhZ2VIZWFwOjpJbmNyZW1lbnRhbFNjYXZlbmdlKToKKyAgICAgICAgKFdURjo6VENN
YWxsb2NQYWdlSGVhcDo6UmVnaXN0ZXJTaXplQ2xhc3MpOgorICAgICAgICAoV1RGOjpUQ01hbGxv
Y1BhZ2VIZWFwOjpSZXR1cm5lZEJ5dGVzKToKKyAgICAgICAgKFdURjo6UGFnZXNUb01CKToKKyAg
ICAgICAgKFdURjo6VENNYWxsb2NQYWdlSGVhcDo6RHVtcCk6CisgICAgICAgIChXVEY6OlRDTWFs
bG9jUGFnZUhlYXA6Okdyb3dIZWFwKToKKyAgICAgICAgKFdURjo6VENNYWxsb2NQYWdlSGVhcDo6
Q2hlY2spOgorICAgICAgICAoV1RGOjpUQ01hbGxvY1BhZ2VIZWFwOjpDaGVja0xpc3QpOgorICAg
ICAgICAoV1RGOjpUQ01hbGxvY1BhZ2VIZWFwOjpSZWxlYXNlRnJlZUxpc3QpOgorICAgICAgICAo
V1RGOjpUQ01hbGxvY1BhZ2VIZWFwOjpSZWxlYXNlRnJlZVBhZ2VzKToKKyAgICAgICAgKFRDTWFs
bG9jVGhyZWFkQ2FjaGVGcmVlTGlzdCk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jVGhyZWFkQ2Fj
aGVGcmVlTGlzdDo6SW5pdCk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jVGhyZWFkQ2FjaGVGcmVl
TGlzdDo6bGVuZ3RoKToKKyAgICAgICAgKFdURjo6VENNYWxsb2NUaHJlYWRDYWNoZUZyZWVMaXN0
OjplbXB0eSk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jVGhyZWFkQ2FjaGVGcmVlTGlzdDo6bG93
d2F0ZXJtYXJrKToKKyAgICAgICAgKFdURjo6VENNYWxsb2NUaHJlYWRDYWNoZUZyZWVMaXN0Ojpj
bGVhckxvd3dhdGVybWFyayk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jVGhyZWFkQ2FjaGVGcmVl
TGlzdDo6UHVzaCk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jVGhyZWFkQ2FjaGVGcmVlTGlzdDo6
UHVzaFJhbmdlKToKKyAgICAgICAgKFdURjo6VENNYWxsb2NUaHJlYWRDYWNoZUZyZWVMaXN0OjpQ
b3BSYW5nZSk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jVGhyZWFkQ2FjaGVGcmVlTGlzdDo6UG9w
KToKKyAgICAgICAgKFdURjo6VENNYWxsb2NUaHJlYWRDYWNoZUZyZWVMaXN0OjplbnVtZXJhdGVG
cmVlT2JqZWN0cyk6CisgICAgICAgIChUQ01hbGxvY1RocmVhZENhY2hlKToKKyAgICAgICAgKFdU
Rjo6VENNYWxsb2NUaHJlYWRDYWNoZTo6ZnJlZWxpc3RsZW5ndGgpOgorICAgICAgICAoV1RGOjpU
Q01hbGxvY1RocmVhZENhY2hlOjpTaXplKToKKyAgICAgICAgKFdURjo6VENNYWxsb2NUaHJlYWRD
YWNoZTo6ZW51bWVyYXRlRnJlZU9iamVjdHMpOgorICAgICAgICAoVENNYWxsb2NDZW50cmFsRnJl
ZUxpc3QpOgorICAgICAgICAoV1RGOjpUQ01hbGxvY0NlbnRyYWxGcmVlTGlzdDo6bGVuZ3RoKToK
KyAgICAgICAgKFdURjo6VENNYWxsb2NDZW50cmFsRnJlZUxpc3Q6OnRjTGVuZ3RoKToKKyAgICAg
ICAgKFdURjo6VENNYWxsb2NDZW50cmFsRnJlZUxpc3Q6OmVudW1lcmF0ZUZyZWVPYmplY3RzKToK
KyAgICAgICAgKFRDTWFsbG9jQ2VudHJhbEZyZWVMaXN0UGFkZGVkKToKKyAgICAgICAgKFdURjo6
Z2V0UGFnZUhlYXApOgorICAgICAgICAoV1RGOjpUQ01hbGxvY1BhZ2VIZWFwOjpwZXJpb2RpY1Nj
YXZlbmdlKToKKyAgICAgICAgKFdURjo6VENNYWxsb2NQYWdlSGVhcDo6c2NhdmVuZ2VyVGhyZWFk
KToKKyAgICAgICAgKFdURjo6c2V0VGhyZWFkSGVhcCk6CisgICAgICAgIChXVEY6OlRDTWFsbG9j
Q2VudHJhbEZyZWVMaXN0OjpJbml0KToKKyAgICAgICAgKFdURjo6VENNYWxsb2NDZW50cmFsRnJl
ZUxpc3Q6OlJlbGVhc2VMaXN0VG9TcGFucyk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jQ2VudHJh
bEZyZWVMaXN0OjpSZWxlYXNlVG9TcGFucyk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jQ2VudHJh
bEZyZWVMaXN0OjpFdmljdFJhbmRvbVNpemVDbGFzcyk6CisgICAgICAgIChXVEY6OlRDTWFsbG9j
Q2VudHJhbEZyZWVMaXN0OjpNYWtlQ2FjaGVTcGFjZSk6CisgICAgICAgIChXVEY6OlRDTWFsbG9j
Q2VudHJhbEZyZWVMaXN0OjpTaHJpbmtDYWNoZSk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jQ2Vu
dHJhbEZyZWVMaXN0OjpJbnNlcnRSYW5nZSk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jQ2VudHJh
bEZyZWVMaXN0OjpSZW1vdmVSYW5nZSk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jQ2VudHJhbEZy
ZWVMaXN0OjpGZXRjaEZyb21TcGFuc1NhZmUpOgorICAgICAgICAoV1RGOjpUQ01hbGxvY0NlbnRy
YWxGcmVlTGlzdDo6RmV0Y2hGcm9tU3BhbnMpOgorICAgICAgICAoV1RGOjpUQ01hbGxvY0NlbnRy
YWxGcmVlTGlzdDo6UG9wdWxhdGUpOgorICAgICAgICAoV1RGOjpUQ01hbGxvY1RocmVhZENhY2hl
OjpTYW1wbGVBbGxvY2F0aW9uKToKKyAgICAgICAgKFdURjo6VENNYWxsb2NUaHJlYWRDYWNoZTo6
SW5pdCk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jVGhyZWFkQ2FjaGU6OkNsZWFudXApOgorICAg
ICAgICAoV1RGOjpUQ01hbGxvY1RocmVhZENhY2hlOjpBbGxvY2F0ZSk6CisgICAgICAgIChXVEY6
OlRDTWFsbG9jVGhyZWFkQ2FjaGU6OkRlYWxsb2NhdGUpOgorICAgICAgICAoV1RGOjpUQ01hbGxv
Y1RocmVhZENhY2hlOjpGZXRjaEZyb21DZW50cmFsQ2FjaGUpOgorICAgICAgICAoV1RGOjpUQ01h
bGxvY1RocmVhZENhY2hlOjpSZWxlYXNlVG9DZW50cmFsQ2FjaGUpOgorICAgICAgICAoV1RGOjpU
Q01hbGxvY1RocmVhZENhY2hlOjpTY2F2ZW5nZSk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jVGhy
ZWFkQ2FjaGU6OlBpY2tOZXh0U2FtcGxlKToKKyAgICAgICAgKFdURjo6VENNYWxsb2NUaHJlYWRD
YWNoZTo6SW5pdE1vZHVsZSk6CisgICAgICAgIChXVEY6OlRDTWFsbG9jVGhyZWFkQ2FjaGU6Ok5l
d0hlYXApOgorICAgICAgICAoV1RGOjpUQ01hbGxvY1RocmVhZENhY2hlOjpHZXRUaHJlYWRIZWFw
KToKKyAgICAgICAgKFdURjo6VENNYWxsb2NUaHJlYWRDYWNoZTo6R2V0Q2FjaGUpOgorICAgICAg
ICAoV1RGOjpUQ01hbGxvY1RocmVhZENhY2hlOjpHZXRDYWNoZUlmUHJlc2VudCk6CisgICAgICAg
IChXVEY6OlRDTWFsbG9jVGhyZWFkQ2FjaGU6OkluaXRUU0QpOgorICAgICAgICAoV1RGOjpUQ01h
bGxvY1RocmVhZENhY2hlOjpDcmVhdGVDYWNoZUlmTmVjZXNzYXJ5KToKKwogMjAxMi0xMS0xMSAg
S2VuaWNoaSBJc2hpYmFzaGkgIDxiYXNoaUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV1RGU3Ry
aW5nOjp1dGY4KCkgc2hvdWxkIGhhdmUgYSBtb2RlIG9mIGNvbnZlcnNpb24gdG8gdXNlIHJlcGxh
Y2VtZW50IGNoYXJhY3RlcgpJbmRleDogU291cmNlL1dURi93dGYvRmFzdE1hbGxvYy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvRmFzdE1hbGxvYy5jcHAJKHJldmlzaW9uIDEzNDQ2
MCkKKysrIFNvdXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MiwyOCArNDIsMjggQEAKIC8vICAgICBUaGlzIGlzIHNhZmUgYmVjYXVzZSBlYWNoIHN1Y2ggbGlz
dCBpcyBvbmx5IGFjY2Vzc2VkIGJ5IG9uZSB0aHJlYWQuCiAvLyAgMi4gV2UgaGF2ZSBhIGxvY2sg
cGVyIGNlbnRyYWwgZnJlZS1saXN0LCBhbmQgaG9sZCBpdCB3aGlsZSBtYW5pcHVsYXRpbmcKIC8v
ICAgICB0aGUgY2VudHJhbCBmcmVlIGxpc3QgZm9yIGEgcGFydGljdWxhciBzaXplLgotLy8gIDMu
IFRoZSBjZW50cmFsIHBhZ2UgYWxsb2NhdG9yIGlzIHByb3RlY3RlZCBieSAicGFnZWhlYXBfbG9j
ayIuCi0vLyAgNC4gVGhlIHBhZ2VtYXAgKHdoaWNoIG1hcHMgZnJvbSBwYWdlLW51bWJlciB0byBk
ZXNjcmlwdG9yKSwKKy8vICAzLiBUaGUgY2VudHJhbCBwYWdlIGFsbG9jYXRvciBpcyBwcm90ZWN0
ZWQgYnkgInBhZ2VoZWFwTG9jayIuCisvLyAgNC4gVGhlIHBhZ2VNYXAgKHdoaWNoIG1hcHMgZnJv
bSBwYWdlLW51bWJlciB0byBkZXNjcmlwdG9yKSwKIC8vICAgICBjYW4gYmUgcmVhZCB3aXRob3V0
IGhvbGRpbmcgYW55IGxvY2tzLCBhbmQgd3JpdHRlbiB3aGlsZSBob2xkaW5nCi0vLyAgICAgdGhl
ICJwYWdlaGVhcF9sb2NrIi4KKy8vICAgICB0aGUgInBhZ2VoZWFwTG9jayIuCiAvLyAgNS4gVG8g
aW1wcm92ZSBwZXJmb3JtYW5jZSwgYSBzdWJzZXQgb2YgdGhlIGluZm9ybWF0aW9uIG9uZSBjYW4g
Z2V0Ci0vLyAgICAgZnJvbSB0aGUgcGFnZW1hcCBpcyBjYWNoZWQgaW4gYSBkYXRhIHN0cnVjdHVy
ZSwgcGFnZW1hcF9jYWNoZV8sCi0vLyAgICAgdGhhdCBhdG9taWNhbGx5IHJlYWRzIGFuZCB3cml0
ZXMgaXRzIGVudHJpZXMuICBUaGlzIGNhY2hlIGNhbiBiZQorLy8gICAgIGZyb20gdGhlIHBhZ2VN
YXAgaXMgY2FjaGVkIGluIGEgZGF0YSBzdHJ1Y3R1cmUsIHBhZ2VNYXBDYWNoZSwKKy8vICAgICB0
aGF0IGF0b21pY2FsbHkgcmVhZHMgYW5kIHdyaXRlcyBpdHMgZW50cmllcy4gVGhpcyBjYWNoZSBj
YW4gYmUKIC8vICAgICByZWFkIGFuZCB3cml0dGVuIHdpdGhvdXQgbG9ja2luZy4KIC8vCi0vLyAg
ICAgVGhpcyBtdWx0aS10aHJlYWRlZCBhY2Nlc3MgdG8gdGhlIHBhZ2VtYXAgaXMgc2FmZSBmb3Ig
ZmFpcmx5Ci0vLyAgICAgc3VidGxlIHJlYXNvbnMuICBXZSBiYXNpY2FsbHkgYXNzdW1lIHRoYXQg
d2hlbiBhbiBvYmplY3QgWCBpcworLy8gICAgIFRoaXMgbXVsdGktdGhyZWFkZWQgYWNjZXNzIHRv
IHRoZSBwYWdlTWFwIGlzIHNhZmUgZm9yIGZhaXJseQorLy8gICAgIHN1YnRsZSByZWFzb25zLiBX
ZSBiYXNpY2FsbHkgYXNzdW1lIHRoYXQgd2hlbiBhbiBvYmplY3QgWCBpcwogLy8gICAgIGFsbG9j
YXRlZCBieSB0aHJlYWQgQSBhbmQgZGVhbGxvY2F0ZWQgYnkgdGhyZWFkIEIsIHRoZXJlIG11c3QK
IC8vICAgICBoYXZlIGJlZW4gYXBwcm9wcmlhdGUgc3luY2hyb25pemF0aW9uIGluIHRoZSBoYW5k
b2ZmIG9mIG9iamVjdAotLy8gICAgIFggZnJvbSB0aHJlYWQgQSB0byB0aHJlYWQgQi4gIFRoZSBz
YW1lIGxvZ2ljIGFwcGxpZXMgdG8gcGFnZW1hcF9jYWNoZV8uCisvLyAgICAgWCBmcm9tIHRocmVh
ZCBBIHRvIHRocmVhZCBCLiBUaGUgc2FtZSBsb2dpYyBhcHBsaWVzIHRvIHBhZ2VNYXBDYWNoZS4K
IC8vCiAvLyBUSEUgUEFHRUlELVRPLVNJWkVDTEFTUyBDQUNIRQotLy8gSG90IFBhZ2VJRC10by1z
aXplY2xhc3MgbWFwcGluZ3MgYXJlIGhlbGQgYnkgcGFnZW1hcF9jYWNoZV8uICBJZiB0aGlzIGNh
Y2hlCisvLyBIb3QgUGFnZUlELXRvLXNpemVDbGFzcyBtYXBwaW5ncyBhcmUgaGVsZCBieSBwYWdl
TWFwQ2FjaGUuIElmIHRoaXMgY2FjaGUKIC8vIHJldHVybnMgMCBmb3IgYSBwYXJ0aWN1bGFyIFBh
Z2VJRCB0aGVuIHRoYXQgbWVhbnMgIm5vIGluZm9ybWF0aW9uLCIgbm90IHRoYXQKLS8vIHRoZSBz
aXplY2xhc3MgaXMgMC4gIFRoZSBjYWNoZSBtYXkgaGF2ZSBzdGFsZSBpbmZvcm1hdGlvbiBmb3Ig
cGFnZXMgdGhhdCBkbwotLy8gbm90IGhvbGQgdGhlIGJlZ2lubmluZyBvZiBhbnkgZnJlZSgpJ2Fi
bGUgb2JqZWN0LiAgU3RhbGVuZXNzIGlzIGVsaW1pbmF0ZWQKLS8vIGluIFBvcHVsYXRlKCkgZm9y
IHBhZ2VzIHdpdGggc2l6ZWNsYXNzID4gMCBvYmplY3RzLCBhbmQgaW4gZG9fbWFsbG9jKCkgYW5k
Ci0vLyBkb19tZW1hbGlnbigpIGZvciBhbGwgb3RoZXIgcmVsZXZhbnQgcGFnZXMuCisvLyB0aGUg
c2l6ZUNsYXNzIGlzIDAuIFRoZSBjYWNoZSBtYXkgaGF2ZSBzdGFsZSBpbmZvcm1hdGlvbiBmb3Ig
cGFnZXMgdGhhdCBkbworLy8gbm90IGhvbGQgdGhlIGJlZ2lubmluZyBvZiBhbnkgZnJlZSgpJ2Fi
bGUgb2JqZWN0LiBTdGFsZW5lc3MgaXMgZWxpbWluYXRlZAorLy8gaW4gUG9wdWxhdGUoKSBmb3Ig
cGFnZXMgd2l0aCBzaXplQ2xhc3MgPiAwIG9iamVjdHMsIGFuZCBpbiBkb01hbGxvYygpIGFuZAor
Ly8gZG9NZW1hbGlnbigpIGZvciBhbGwgb3RoZXIgcmVsZXZhbnQgcGFnZXMuCiAvLwogLy8gVE9E
TzogQmlhcyByZWNsYW1hdGlvbiB0byBsYXJnZXIgYWRkcmVzc2VzCiAvLyBUT0RPOiBpbXBsZW1l
bnQgbWFsbGluZm8vbWFsbG9wdApAQCAtMjc1LDEzICsyNzUsMTMgQEAgdm9pZCogZmFzdE1hbGxv
YyhzaXplX3QgbikKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1UcnlNYWxsb2NSZXR1cm5WYWx1
ZSB0cnlGYXN0Q2FsbG9jKHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3QgZWxlbWVudF9zaXplKQor
VHJ5TWFsbG9jUmV0dXJuVmFsdWUgdHJ5RmFzdENhbGxvYyhzaXplX3QgbkVsZW1lbnRzLCBzaXpl
X3QgZWxlbWVudHNpemUpCiB7CiAgICAgQVNTRVJUKCFpc0ZvcmJpZGRlbigpKTsKIAogI2lmIEVO
QUJMRShXVEZfTUFMTE9DX1ZBTElEQVRJT04pCi0gICAgc2l6ZV90IHRvdGFsQnl0ZXMgPSBuX2Vs
ZW1lbnRzICogZWxlbWVudF9zaXplOwotICAgIGlmIChuX2VsZW1lbnRzID4gMSAmJiBlbGVtZW50
X3NpemUgJiYgKHRvdGFsQnl0ZXMgLyBlbGVtZW50X3NpemUpICE9IG5fZWxlbWVudHMpCisgICAg
c2l6ZV90IHRvdGFsQnl0ZXMgPSBuRWxlbWVudHMgKiBlbGVtZW50c2l6ZTsKKyAgICBpZiAobkVs
ZW1lbnRzID4gMSAmJiBlbGVtZW50c2l6ZSAmJiAodG90YWxCeXRlcyAvIGVsZW1lbnRzaXplKSAh
PSBuRWxlbWVudHMpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgVHJ5TWFsbG9jUmV0dXJuVmFs
dWUgcmV0dXJuVmFsdWUgPSB0cnlGYXN0TWFsbG9jKHRvdGFsQnl0ZXMpOwpAQCAtMjkyLDIxICsy
OTIsMjEgQEAgVHJ5TWFsbG9jUmV0dXJuVmFsdWUgdHJ5RmFzdENhbGxvYyhzaXplXwogICAgIGZh
c3RNYWxsb2NWYWxpZGF0ZShyZXN1bHQpOwogICAgIHJldHVybiByZXN1bHQ7CiAjZWxzZQotICAg
IHJldHVybiBjYWxsb2Mobl9lbGVtZW50cywgZWxlbWVudF9zaXplKTsKKyAgICByZXR1cm4gY2Fs
bG9jKG5FbGVtZW50cywgZWxlbWVudHNpemUpOwogI2VuZGlmCiB9CiAKLXZvaWQqIGZhc3RDYWxs
b2Moc2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBlbGVtZW50X3NpemUpCit2b2lkKiBmYXN0Q2Fs
bG9jKHNpemVfdCBuRWxlbWVudHMsIHNpemVfdCBlbGVtZW50c2l6ZSkKIHsKICAgICBBU1NFUlQo
IWlzRm9yYmlkZGVuKCkpOwogCiAjaWYgRU5BQkxFKFdURl9NQUxMT0NfVkFMSURBVElPTikKLSAg
ICBUcnlNYWxsb2NSZXR1cm5WYWx1ZSByZXR1cm5WYWx1ZSA9IHRyeUZhc3RDYWxsb2Mobl9lbGVt
ZW50cywgZWxlbWVudF9zaXplKTsKKyAgICBUcnlNYWxsb2NSZXR1cm5WYWx1ZSByZXR1cm5WYWx1
ZSA9IHRyeUZhc3RDYWxsb2MobkVsZW1lbnRzLCBlbGVtZW50c2l6ZSk7CiAgICAgdm9pZCogcmVz
dWx0OwogICAgIGlmICghcmV0dXJuVmFsdWUuZ2V0VmFsdWUocmVzdWx0KSkKICAgICAgICAgQ1JB
U0goKTsKICNlbHNlCi0gICAgdm9pZCogcmVzdWx0ID0gY2FsbG9jKG5fZWxlbWVudHMsIGVsZW1l
bnRfc2l6ZSk7CisgICAgdm9pZCogcmVzdWx0ID0gY2FsbG9jKG5FbGVtZW50cywgZWxlbWVudHNp
emUpOwogI2VuZGlmCiAKICAgICBpZiAoIXJlc3VsdCkKQEAgLTM4OCw3ICszODgsNyBAQCBzaXpl
X3QgZmFzdE1hbGxvY1NpemUoY29uc3Qgdm9pZCogcCkKICNpZiBFTkFCTEUoV1RGX01BTExPQ19W
QUxJREFUSU9OKQogICAgIHJldHVybiBJbnRlcm5hbDo6ZmFzdE1hbGxvY1ZhbGlkYXRpb25IZWFk
ZXIoY29uc3RfY2FzdDx2b2lkKj4ocCkpLT5tX3NpemU7CiAjZWxpZiBPUyhEQVJXSU4pCi0gICAg
cmV0dXJuIG1hbGxvY19zaXplKHApOworICAgIHJldHVybiBtYWxsb2NTaXplKHApOwogI2VsaWYg
T1MoV0lORE9XUykKICAgICByZXR1cm4gX21zaXplKGNvbnN0X2Nhc3Q8dm9pZCo+KHApKTsKICNl
bHNlCkBAIC00NzQsMTcgKzQ3NCwxNyBAQCBzdGF0aWMgdm9pZCogKCpwdGhyZWFkX2dldHNwZWNp
ZmljX2Z1bmN0CiAjZW5kaWYKIAogI2RlZmluZSBERUZJTkVfVkFSSUFCTEUodHlwZSwgbmFtZSwg
dmFsdWUsIG1lYW5pbmcpIFwKLSAgbmFtZXNwYWNlIEZMQUdfX25hbWVzcGFjZV9kb19ub3RfdXNl
X2RpcmVjdGx5X3VzZV9ERUNMQVJFXyMjdHlwZSMjX2luc3RlYWQgeyAgXAotICB0eXBlIEZMQUdT
XyMjbmFtZSh2YWx1ZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGNoYXIg
RkxBR1Nfbm8jI25hbWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHVzaW5nIEZMQUdfX25h
bWVzcGFjZV9kb19ub3RfdXNlX2RpcmVjdGx5X3VzZV9ERUNMQVJFXyMjdHlwZSMjX2luc3RlYWQ6
OkZMQUdTXyMjbmFtZQorICAgIG5hbWVzcGFjZSBGTEFHX19uYW1lc3BhY2VfZG9fbm90X3VzZV9k
aXJlY3RseV91c2VfREVDTEFSRV8jI3R5cGUjI19pbnN0ZWFkIHsgIFwKKyAgICB0eXBlIEZMQUdT
XyMjbmFtZSh2YWx1ZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2hh
ciBGTEFHU19ubyMjbmFtZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHVzaW5nIEZM
QUdfX25hbWVzcGFjZV9kb19ub3RfdXNlX2RpcmVjdGx5X3VzZV9ERUNMQVJFXyMjdHlwZSMjX2lu
c3RlYWQ6OkZMQUdTXyMjbmFtZQogICAKICNkZWZpbmUgREVGSU5FX2ludDY0KG5hbWUsIHZhbHVl
LCBtZWFuaW5nKSBcCi0gIERFRklORV9WQVJJQUJMRShpbnQ2NF90LCBuYW1lLCB2YWx1ZSwgbWVh
bmluZykKKyAgICBERUZJTkVfVkFSSUFCTEUoaW50NjRfdCwgbmFtZSwgdmFsdWUsIG1lYW5pbmcp
CiAgIAogI2RlZmluZSBERUZJTkVfZG91YmxlKG5hbWUsIHZhbHVlLCBtZWFuaW5nKSBcCi0gIERF
RklORV9WQVJJQUJMRShkb3VibGUsIG5hbWUsIHZhbHVlLCBtZWFuaW5nKQorICAgIERFRklORV9W
QVJJQUJMRShkb3VibGUsIG5hbWUsIHZhbHVlLCBtZWFuaW5nKQogCiBuYW1lc3BhY2UgV1RGIHsK
IApAQCAtNDk4LDkgKzQ5OCw5IEBAIG5hbWVzcGFjZSBXVEYgewogCiAjaWYgT1MoREFSV0lOKQog
c3RydWN0IFNwYW47Ci1jbGFzcyBUQ01hbGxvY19DZW50cmFsX0ZyZWVMaXN0UGFkZGVkOwotY2xh
c3MgVENNYWxsb2NfUGFnZUhlYXA7Ci1jbGFzcyBUQ01hbGxvY19UaHJlYWRDYWNoZTsKK2NsYXNz
IFRDTWFsbG9jQ2VudHJhbEZyZWVMaXN0UGFkZGVkOworY2xhc3MgVENNYWxsb2NQYWdlSGVhcDsK
K2NsYXNzIFRDTWFsbG9jVGhyZWFkQ2FjaGU7CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3Mg
UGFnZUhlYXBBbGxvY2F0b3I7CiAKIGNsYXNzIEZhc3RNYWxsb2Nab25lIHsKQEAgLTUxNywyMSAr
NTE3LDIxIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzdGF0aXN0aWNzKG1hbGxvY196b25l
X3QqLCBtYWxsb2Nfc3RhdGlzdGljc190KiBzdGF0cykgeyBtZW1zZXQoc3RhdHMsIDAsIHNpemVv
ZihtYWxsb2Nfc3RhdGlzdGljc190KSk7IH0KIAogcHJpdmF0ZToKLSAgICBGYXN0TWFsbG9jWm9u
ZShUQ01hbGxvY19QYWdlSGVhcCosIFRDTWFsbG9jX1RocmVhZENhY2hlKiosIFRDTWFsbG9jX0Nl
bnRyYWxfRnJlZUxpc3RQYWRkZWQqLCBQYWdlSGVhcEFsbG9jYXRvcjxTcGFuPiosIFBhZ2VIZWFw
QWxsb2NhdG9yPFRDTWFsbG9jX1RocmVhZENhY2hlPiopOworICAgIEZhc3RNYWxsb2Nab25lKFRD
TWFsbG9jUGFnZUhlYXAqLCBUQ01hbGxvY1RocmVhZENhY2hlKiosIFRDTWFsbG9jQ2VudHJhbEZy
ZWVMaXN0UGFkZGVkKiwgUGFnZUhlYXBBbGxvY2F0b3I8U3Bhbj4qLCBQYWdlSGVhcEFsbG9jYXRv
cjxUQ01hbGxvY1RocmVhZENhY2hlPiopOwogICAgIHN0YXRpYyBzaXplX3Qgc2l6ZShtYWxsb2Nf
em9uZV90KiwgY29uc3Qgdm9pZCopOwogICAgIHN0YXRpYyB2b2lkKiB6b25lTWFsbG9jKG1hbGxv
Y196b25lX3QqLCBzaXplX3QpOwotICAgIHN0YXRpYyB2b2lkKiB6b25lQ2FsbG9jKG1hbGxvY196
b25lX3QqLCBzaXplX3QgbnVtSXRlbXMsIHNpemVfdCBzaXplKTsKKyAgICBzdGF0aWMgdm9pZCog
em9uZUNhbGxvYyhtYWxsb2Nfem9uZV90Kiwgc2l6ZV90IG51bUl0ZW1zLCBzaXplX3QpOwogICAg
IHN0YXRpYyB2b2lkIHpvbmVGcmVlKG1hbGxvY196b25lX3QqLCB2b2lkKik7CiAgICAgc3RhdGlj
IHZvaWQqIHpvbmVSZWFsbG9jKG1hbGxvY196b25lX3QqLCB2b2lkKiwgc2l6ZV90KTsKICAgICBz
dGF0aWMgdm9pZCogem9uZVZhbGxvYyhtYWxsb2Nfem9uZV90Kiwgc2l6ZV90KSB7IExPR19FUlJP
UigidmFsbG9jIGlzIG5vdCBzdXBwb3J0ZWQiKTsgcmV0dXJuIDA7IH0KICAgICBzdGF0aWMgdm9p
ZCB6b25lRGVzdHJveShtYWxsb2Nfem9uZV90KikgeyB9CiAKICAgICBtYWxsb2Nfem9uZV90IG1f
em9uZTsKLSAgICBUQ01hbGxvY19QYWdlSGVhcCogbV9wYWdlSGVhcDsKLSAgICBUQ01hbGxvY19U
aHJlYWRDYWNoZSoqIG1fdGhyZWFkSGVhcHM7Ci0gICAgVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlz
dFBhZGRlZCogbV9jZW50cmFsQ2FjaGVzOworICAgIFRDTWFsbG9jUGFnZUhlYXAqIG1fcGFnZUhl
YXA7CisgICAgVENNYWxsb2NUaHJlYWRDYWNoZSoqIG1fdGhyZWFkSGVhcHM7CisgICAgVENNYWxs
b2NDZW50cmFsRnJlZUxpc3RQYWRkZWQqIG1fY2VudHJhbENhY2hlczsKICAgICBQYWdlSGVhcEFs
bG9jYXRvcjxTcGFuPiogbV9zcGFuQWxsb2NhdG9yOwotICAgIFBhZ2VIZWFwQWxsb2NhdG9yPFRD
TWFsbG9jX1RocmVhZENhY2hlPiogbV9wYWdlSGVhcEFsbG9jYXRvcjsKKyAgICBQYWdlSGVhcEFs
bG9jYXRvcjxUQ01hbGxvY1RocmVhZENhY2hlPiogbV9wYWdlSGVhcEFsbG9jYXRvcjsKIH07CiAK
ICNlbmRpZgpAQCAtNTM5LDcgKzUzOSw3IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogI2lmbmRlZiBX
VEZfQ0hBTkdFUwotLy8gVGhpcyAjaWZkZWYgc2hvdWxkIGFsbW9zdCBuZXZlciBiZSBzZXQuICBT
ZXQgTk9fVENNQUxMT0NfU0FNUExFUyBpZgorLy8gVGhpcyAjaWZkZWYgc2hvdWxkIGFsbW9zdCBu
ZXZlciBiZSBzZXQuIFNldCBOT19UQ01BTExPQ19TQU1QTEVTIGlmCiAvLyB5b3UncmUgcG9ydGlu
ZyB0byBhIHN5c3RlbSB3aGVyZSB5b3UgcmVhbGx5IGNhbid0IGdldCBhIHN0YWNrdHJhY2UuCiAj
aWZkZWYgTk9fVENNQUxMT0NfU0FNUExFUwogLy8gV2UgdXNlICNkZWZpbmUgc28gY29kZSBjb21w
aWxlcyBldmVuIGlmIHlvdSAjaW5jbHVkZSBzdGFja3RyYWNlLmggc29tZWhvdy4KQEAgLTU1MCw0
NyArNTUwLDQ5IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogLy8gRXZlbiBpZiB3ZSBoYXZlIHN1cHBv
cnQgZm9yIHRocmVhZC1sb2NhbCBzdG9yYWdlIGluIHRoZSBjb21waWxlcgotLy8gYW5kIGxpbmtl
ciwgdGhlIE9TIG1heSBub3Qgc3VwcG9ydCBpdC4gIFdlIG5lZWQgdG8gY2hlY2sgdGhhdCBhdAot
Ly8gcnVudGltZS4gIFJpZ2h0IG5vdywgd2UgaGF2ZSB0byBrZWVwIGEgbWFudWFsIHNldCBvZiAi
YmFkIiBPU2VzLgorLy8gYW5kIGxpbmtlciwgdGhlIE9TIG1heSBub3Qgc3VwcG9ydCBpdC4gV2Ug
bmVlZCB0byBjaGVjayB0aGF0IGF0CisvLyBydW50aW1lLiBSaWdodCBub3csIHdlIGhhdmUgdG8g
a2VlcCBhIG1hbnVhbCBzZXQgb2YgImJhZCIgT1Nlcy4KICNpZiBkZWZpbmVkKEhBVkVfVExTKQot
ICBzdGF0aWMgYm9vbCBrZXJuZWxfc3VwcG9ydHNfdGxzID0gZmFsc2U7ICAgICAgLy8gYmUgY29u
c2VydmF0aXZlCi0gIHN0YXRpYyBpbmxpbmUgYm9vbCBLZXJuZWxTdXBwb3J0c1RMUygpIHsKLSAg
ICByZXR1cm4ga2VybmVsX3N1cHBvcnRzX3RsczsKLSAgfQotIyBpZiAhSEFWRV9ERUNMX1VOQU1F
ICAgLy8gaWYgdG9vIG9sZCBmb3IgdW5hbWUsIHByb2JhYmx5IHRvbyBvbGQgZm9yIFRMUwotICAg
IHN0YXRpYyB2b2lkIENoZWNrSWZLZXJuZWxTdXBwb3J0c1RMUygpIHsKLSAgICAgIGtlcm5lbF9z
dXBwb3J0c190bHMgPSBmYWxzZTsKLSAgICB9CitzdGF0aWMgYm9vbCBrZXJuZWxTdXBwb3J0c1Rs
cyA9IGZhbHNlOyAvLyBiZSBjb25zZXJ2YXRpdmUKK3N0YXRpYyBpbmxpbmUgYm9vbCBLZXJuZWxT
dXBwb3J0c1RMUygpCit7CisgICAgcmV0dXJuIGtlcm5lbFN1cHBvcnRzVGxzOworfQorIyBpZiAh
SEFWRV9ERUNMX1VOQU1FIC8vIGlmIHRvbyBvbGQgZm9yIHVuYW1lLCBwcm9iYWJseSB0b28gb2xk
IGZvciBUTFMKK3N0YXRpYyB2b2lkIENoZWNrSWZLZXJuZWxTdXBwb3J0c1RMUygpCit7CisgICAg
a2VybmVsU3VwcG9ydHNUbHMgPSBmYWxzZTsKK30KICMgZWxzZQotIyAgIGluY2x1ZGUgPHN5cy91
dHNuYW1lLmg+ICAgIC8vIERFQ0xfVU5BTUUgY2hlY2tlZCBmb3IgPHN5cy91dHNuYW1lLmg+IHRv
bwotICAgIHN0YXRpYyB2b2lkIENoZWNrSWZLZXJuZWxTdXBwb3J0c1RMUygpIHsKLSAgICAgIHN0
cnVjdCB1dHNuYW1lIGJ1ZjsKLSAgICAgIGlmICh1bmFtZSgmYnVmKSAhPSAwKSB7ICAgLy8gc2hv
dWxkIGJlIGltcG9zc2libGUKKyMgaW5jbHVkZSA8c3lzL3V0c25hbWUuaD4gLy8gREVDTF9VTkFN
RSBjaGVja2VkIGZvciA8c3lzL3V0c25hbWUuaD4gdG9vCitzdGF0aWMgdm9pZCBDaGVja0lmS2Vy
bmVsU3VwcG9ydHNUTFMoKQoreworICAgIHN0cnVjdCB1dHNuYW1lIGJ1ZjsKKyAgICBpZiAodW5h
bWUoJmJ1ZikpIHsgLy8gc2hvdWxkIGJlIGltcG9zc2libGUKICAgICAgICAgTUVTU0FHRSgidW5h
bWUgZmFpbGVkIGFzc3VtaW5nIG5vIFRMUyBzdXBwb3J0IChlcnJubz0lZClcbiIsIGVycm5vKTsK
LSAgICAgICAga2VybmVsX3N1cHBvcnRzX3RscyA9IGZhbHNlOwotICAgICAgfSBlbHNlIGlmIChz
dHJjYXNlY21wKGJ1Zi5zeXNuYW1lLCAibGludXgiKSA9PSAwKSB7CisgICAgICAgIGtlcm5lbFN1
cHBvcnRzVGxzID0gZmFsc2U7CisgICAgfSBlbHNlIGlmICghc3RyY2FzZWNtcChidWYuc3lzbmFt
ZSwgImxpbnV4IikpIHsKICAgICAgICAgLy8gVGhlIGxpbnV4IGNhc2U6IHRoZSBmaXJzdCBrZXJu
ZWwgdG8gc3VwcG9ydCBUTFMgd2FzIDIuNi4wCi0gICAgICAgIGlmIChidWYucmVsZWFzZVswXSA8
ICcyJyAmJiBidWYucmVsZWFzZVsxXSA9PSAnLicpICAgIC8vIDAueCBvciAxLngKLSAgICAgICAg
ICBrZXJuZWxfc3VwcG9ydHNfdGxzID0gZmFsc2U7Ci0gICAgICAgIGVsc2UgaWYgKGJ1Zi5yZWxl
YXNlWzBdID09ICcyJyAmJiBidWYucmVsZWFzZVsxXSA9PSAnLicgJiYKLSAgICAgICAgICAgICAg
ICAgYnVmLnJlbGVhc2VbMl0gPj0gJzAnICYmIGJ1Zi5yZWxlYXNlWzJdIDwgJzYnICYmCi0gICAg
ICAgICAgICAgICAgIGJ1Zi5yZWxlYXNlWzNdID09ICcuJykgICAgICAgICAgICAgICAgICAgICAg
IC8vIDIuMCAtIDIuNQotICAgICAgICAgIGtlcm5lbF9zdXBwb3J0c190bHMgPSBmYWxzZTsKKyAg
ICAgICAgaWYgKGJ1Zi5yZWxlYXNlWzBdIDwgJzInICYmIGJ1Zi5yZWxlYXNlWzFdID09ICcuJykg
Ly8gMC54IG9yIDEueAorICAgICAgICAgICAga2VybmVsU3VwcG9ydHNUbHMgPSBmYWxzZTsKKyAg
ICAgICAgZWxzZSBpZiAoYnVmLnJlbGVhc2VbMF0gPT0gJzInICYmIGJ1Zi5yZWxlYXNlWzFdID09
ICcuJworICAgICAgICAgICAgJiYgYnVmLnJlbGVhc2VbMl0gPj0gJzAnICYmIGJ1Zi5yZWxlYXNl
WzJdIDwgJzYnCisgICAgICAgICAgICAmJiBidWYucmVsZWFzZVszXSA9PSAnLicpIC8vIDIuMCAt
IDIuNQorICAgICAgICAgICAga2VybmVsU3VwcG9ydHNUbHMgPSBmYWxzZTsKICAgICAgICAgZWxz
ZQotICAgICAgICAgIGtlcm5lbF9zdXBwb3J0c190bHMgPSB0cnVlOwotICAgICAgfSBlbHNlIHsg
ICAgICAgIC8vIHNvbWUgb3RoZXIga2VybmVsLCB3ZSdsbCBiZSBvcHRpbWlzaXRpYwotICAgICAg
ICBrZXJuZWxfc3VwcG9ydHNfdGxzID0gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIC8vIFRPRE8oY3Np
bHZlcnMpOiBWTE9HKDEpIHRoZSB0bHMgc3RhdHVzIG9uY2Ugd2Ugc3VwcG9ydCBSQVdfVkxPRwot
ICAgIH0KLSMgIGVuZGlmICAvLyBIQVZFX0RFQ0xfVU5BTUUKLSNlbmRpZiAgICAvLyBIQVZFX1RM
UworICAgICAgICAgICAga2VybmVsU3VwcG9ydHNUbHMgPSB0cnVlOworICAgIH0gZWxzZSAvLyBz
b21lIG90aGVyIGtlcm5lbCwgd2UnbGwgYmUgb3B0aW1pc2l0aWMKKyAgICAgICAga2VybmVsU3Vw
cG9ydHNUbHMgPSB0cnVlOworICAgIC8vIFRPRE8oY3NpbHZlcnMpOiBWTE9HKDEpIHRoZSB0bHMg
c3RhdHVzIG9uY2Ugd2Ugc3VwcG9ydCBSQVdfVkxPRworfQorI2VuZGlmIC8vIEhBVkVfREVDTF9V
TkFNRQorI2VuZGlmIC8vIEhBVkVfVExTCiAKLS8vIF9fVEhST1cgaXMgZGVmaW5lZCBpbiBnbGli
YyBzeXN0ZW1zLiAgSXQgbWVhbnMsIGNvdW50ZXItaW50dWl0aXZlbHksCi0vLyAiVGhpcyBmdW5j
dGlvbiB3aWxsIG5ldmVyIHRocm93IGFuIGV4Y2VwdGlvbi4iICBJdCdzIGFuIG9wdGlvbmFsCisv
LyBfX1RIUk9XIGlzIGRlZmluZWQgaW4gZ2xpYmMgc3lzdGVtcy4gSXQgbWVhbnMsIGNvdW50ZXIt
aW50dWl0aXZlbHksCisvLyAiVGhpcyBmdW5jdGlvbiB3aWxsIG5ldmVyIHRocm93IGFuIGV4Y2Vw
dGlvbi4iIEl0J3MgYW4gb3B0aW9uYWwKIC8vIG9wdGltaXphdGlvbiB0b29sLCBidXQgd2UgbWF5
IG5lZWQgdG8gdXNlIGl0IHRvIG1hdGNoIGdsaWJjIHByb3RvdHlwZXMuCi0jaWZuZGVmIF9fVEhS
T1cgICAgLy8gSSBndWVzcyB3ZSdyZSBub3Qgb24gYSBnbGliYyBzeXN0ZW0KLSMgZGVmaW5lIF9f
VEhST1cgICAvLyBfX1RIUk9XIGlzIGp1c3QgYW4gb3B0aW1pemF0aW9uLCBzbyBvayB0byBtYWtl
IGl0ICIiCisjaWZuZGVmIF9fVEhST1cgLy8gSSBndWVzcyB3ZSdyZSBub3Qgb24gYSBnbGliYyBz
eXN0ZW0KKyNkZWZpbmUgX19USFJPVyAvLyBfX1RIUk9XIGlzIGp1c3QgYW4gb3B0aW1pemF0aW9u
LCBzbyBvayB0byBtYWtlIGl0ICIiCiAjZW5kaWYKIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC01OTgsNyAr
NjAwLDcgQEAgcHJpdmF0ZToKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAvLyBOb3QgYWxsIHBvc3NpYmxlIGNv
bWJpbmF0aW9ucyBvZiB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnMgbWFrZQotLy8gc2Vuc2UuICBJ
biBwYXJ0aWN1bGFyLCBpZiBrTWF4U2l6ZSBpbmNyZWFzZXMsIHlvdSBtYXkgaGF2ZSB0bworLy8g
c2Vuc2UuIEluIHBhcnRpY3VsYXIsIGlmIGtNYXhTaXplIGluY3JlYXNlcywgeW91IG1heSBoYXZl
IHRvCiAvLyBpbmNyZWFzZSBrTnVtQ2xhc3NlcyBhcyB3ZWxsLgogc3RhdGljIGNvbnN0IHNpemVf
dCBrUGFnZVNoaWZ0ICA9IDEyOwogc3RhdGljIGNvbnN0IHNpemVfdCBrUGFnZVNpemUgICA9IDEg
PDwga1BhZ2VTaGlmdDsKQEAgLTYwNywyOCArNjA5LDI4IEBAIHN0YXRpYyBjb25zdCBzaXplX3Qg
a0FsaWduU2hpZnQgPSAzOwogc3RhdGljIGNvbnN0IHNpemVfdCBrQWxpZ25tZW50ICA9IDEgPDwg
a0FsaWduU2hpZnQ7CiBzdGF0aWMgY29uc3Qgc2l6ZV90IGtOdW1DbGFzc2VzID0gNjg7CiAKLS8v
IEFsbG9jYXRlcyBhIGJpZyBibG9jayBvZiBtZW1vcnkgZm9yIHRoZSBwYWdlbWFwIG9uY2Ugd2Ug
cmVhY2ggbW9yZSB0aGFuCisvLyBBbGxvY2F0ZXMgYSBiaWcgYmxvY2sgb2YgbWVtb3J5IGZvciB0
aGUgcGFnZU1hcCBvbmNlIHdlIHJlYWNoIG1vcmUgdGhhbgogLy8gMTI4TUIKIHN0YXRpYyBjb25z
dCBzaXplX3Qga1BhZ2VNYXBCaWdBbGxvY2F0aW9uVGhyZXNob2xkID0gMTI4IDw8IDIwOwogCi0v
LyBNaW5pbXVtIG51bWJlciBvZiBwYWdlcyB0byBmZXRjaCBmcm9tIHN5c3RlbSBhdCBhIHRpbWUu
ICBNdXN0IGJlCisvLyBNaW5pbXVtIG51bWJlciBvZiBwYWdlcyB0byBmZXRjaCBmcm9tIHN5c3Rl
bSBhdCBhIHRpbWUuIE11c3QgYmUKIC8vIHNpZ25pZmljYW50bHkgYmlnZ2VyIHRoYW4ga1BhZ2VT
aXplIHRvIGFtb3J0aXplIHN5c3RlbS1jYWxsCi0vLyBvdmVyaGVhZCwgYW5kIGFsc28gdG8gcmVk
dWNlIGV4dGVybmFsIGZyYWdlbWVudGF0aW9uLiAgQWxzbywgd2UKKy8vIG92ZXJoZWFkLCBhbmQg
YWxzbyB0byByZWR1Y2UgZXh0ZXJuYWwgZnJhZ2VtZW50YXRpb24uIEFsc28sIHdlCiAvLyBzaG91
bGQga2VlcCB0aGlzIHZhbHVlIGJpZyBiZWNhdXNlIHZhcmlvdXMgaW5jYXJuYXRpb25zIG9mIExp
bnV4CiAvLyBoYXZlIHNtYWxsIGxpbWl0cyBvbiB0aGUgbnVtYmVyIG9mIG1tYXAoKSByZWdpb25z
IHBlcgogLy8gYWRkcmVzcy1zcGFjZS4KIHN0YXRpYyBjb25zdCBzaXplX3Qga01pblN5c3RlbUFs
bG9jID0gMSA8PCAoMjAgLSBrUGFnZVNoaWZ0KTsKIAogLy8gTnVtYmVyIG9mIG9iamVjdHMgdG8g
bW92ZSBiZXR3ZWVuIGEgcGVyLXRocmVhZCBsaXN0IGFuZCBhIGNlbnRyYWwKLS8vIGxpc3QgaW4g
b25lIHNob3QuICBXZSB3YW50IHRoaXMgdG8gYmUgbm90IHRvbyBzbWFsbCBzbyB3ZSBjYW4KLS8v
IGFtb3J0aXplIHRoZSBsb2NrIG92ZXJoZWFkIGZvciBhY2Nlc3NpbmcgdGhlIGNlbnRyYWwgbGlz
dC4gIE1ha2luZworLy8gbGlzdCBpbiBvbmUgc2hvdC4gV2Ugd2FudCB0aGlzIHRvIGJlIG5vdCB0
b28gc21hbGwgc28gd2UgY2FuCisvLyBhbW9ydGl6ZSB0aGUgbG9jayBvdmVyaGVhZCBmb3IgYWNj
ZXNzaW5nIHRoZSBjZW50cmFsIGxpc3QuIE1ha2luZwogLy8gaXQgdG9vIGJpZyBtYXkgdGVtcG9y
YXJpbHkgY2F1c2UgdW5uZWNlc3NhcnkgbWVtb3J5IHdhc3RhZ2UgaW4gdGhlCiAvLyBwZXItdGhy
ZWFkIGZyZWUgbGlzdCB1bnRpbCB0aGUgc2NhdmVuZ2VyIGNsZWFucyB1cCB0aGUgbGlzdC4KLXN0
YXRpYyBpbnQgbnVtX29iamVjdHNfdG9fbW92ZVtrTnVtQ2xhc3Nlc107CitzdGF0aWMgaW50IG51
bU9iamVjdHNUb01vdmVba051bUNsYXNzZXNdOwogCiAvLyBNYXhpbXVtIGxlbmd0aCB3ZSBhbGxv
dyBhIHBlci10aHJlYWQgZnJlZS1saXN0IHRvIGhhdmUgYmVmb3JlIHdlCi0vLyBtb3ZlIG9iamVj
dHMgZnJvbSBpdCBpbnRvIHRoZSBjb3JyZXNwb25kaW5nIGNlbnRyYWwgZnJlZS1saXN0LiAgV2UK
LS8vIHdhbnQgdGhpcyBiaWcgdG8gYXZvaWQgbG9ja2luZyB0aGUgY2VudHJhbCBmcmVlLWxpc3Qg
dG9vIG9mdGVuLiAgSXQKKy8vIG1vdmUgb2JqZWN0cyBmcm9tIGl0IGludG8gdGhlIGNvcnJlc3Bv
bmRpbmcgY2VudHJhbCBmcmVlLWxpc3QuIFdlCisvLyB3YW50IHRoaXMgYmlnIHRvIGF2b2lkIGxv
Y2tpbmcgdGhlIGNlbnRyYWwgZnJlZS1saXN0IHRvbyBvZnRlbi4gSXQKIC8vIHNob3VsZCBub3Qg
aHVydCB0byBtYWtlIHRoaXMgbGlzdCBzb21ld2hhdCBiaWcgYmVjYXVzZSB0aGUKIC8vIHNjYXZl
bmdpbmcgY29kZSB3aWxsIHNocmluayBpdCBkb3duIHdoZW4gaXRzIGNvbnRlbnRzIGFyZSBub3Qg
aW4gdXNlLgogc3RhdGljIGNvbnN0IGludCBrTWF4RnJlZUxpc3RMZW5ndGggPSAyNTY7CkBAIC02
NDksNyArNjUxLDcgQEAgc3RhdGljIGNvbnN0IHNpemVfdCBrRGVmYXVsdE92ZXJhbGxUaHJlYQog
c3RhdGljIGNvbnN0IHNpemVfdCBrTWF4UGFnZXMgPSBrTWluU3lzdGVtQWxsb2M7CiAKIC8qIFRo
ZSBzbWFsbGVzdCBwcmltZSA+IDJebiAqLwotc3RhdGljIGludCBwcmltZXNfbGlzdFtdID0gewor
c3RhdGljIGludCBwcmltZXNMaXN0W10gPSB7CiAgICAgLy8gU21hbGwgdmFsdWVzIG1pZ2h0IGNh
dXNlIGhpZ2ggcmF0ZXMgb2Ygc2FtcGxpbmcKICAgICAvLyBhbmQgaGVuY2UgY29tbWVudGVkIG91
dC4KICAgICAvLyAyLCA1LCAxMSwgMTcsIDM3LCA2NywgMTMxLCAyNTcsCkBAIC02NjcsMTAgKzY2
OSw3IEBAIERFRklORV9pbnQ2NCh0Y21hbGxvY19zYW1wbGVfcGFyYW1ldGVyLAogICAgICAgICAg
ICAgICJVbnVzZWQ6IGNvZGUgaXMgY29tcGlsZWQgd2l0aCBOT19UQ01BTExPQ19TQU1QTEVTIik7
CiBzdGF0aWMgc2l6ZV90IHNhbXBsZV9wZXJpb2QgPSAwOwogI2Vsc2UKLURFRklORV9pbnQ2NCh0
Y21hbGxvY19zYW1wbGVfcGFyYW1ldGVyLCAyNjIxNDcsCi0gICAgICAgICAiVHdpY2UgdGhlIGFw
cHJveGltYXRlIGdhcCBiZXR3ZWVuIHNhbXBsaW5nIGFjdGlvbnMuIgotICAgICAgICAgIiBNdXN0
IGJlIGEgcHJpbWUgbnVtYmVyLiBPdGhlcndpc2Ugd2lsbCBiZSByb3VuZGVkIHVwIHRvIGEgIgot
ICAgICAgICAgIiBsYXJnZXIgcHJpbWUgbnVtYmVyIik7CitERUZJTkVfaW50NjQodGNtYWxsb2Nf
c2FtcGxlX3BhcmFtZXRlciwgMjYyMTQ3LCAiVHdpY2UgdGhlIGFwcHJveGltYXRlIGdhcCBiZXR3
ZWVuIHNhbXBsaW5nIGFjdGlvbnMuIE11c3QgYmUgYSBwcmltZSBudW1iZXIuIE90aGVyd2lzZSB3
aWxsIGJlIHJvdW5kZWQgdXAgdG8gYSBsYXJnZXIgcHJpbWUgbnVtYmVyIik7CiBzdGF0aWMgc2l6
ZV90IHNhbXBsZV9wZXJpb2QgPSAyNjIxNDc7CiAjZW5kaWYKIApAQCAtNjc5LDIzICs2NzgsMTgg
QEAgc3RhdGljIFNwaW5Mb2NrIHNhbXBsZV9wZXJpb2RfbG9jayA9IFNQSQogCiAvLyBQYXJhbWV0
ZXJzIGZvciBjb250cm9sbGluZyBob3cgZmFzdCBtZW1vcnkgaXMgcmV0dXJuZWQgdG8gdGhlIE9T
LgogCi1ERUZJTkVfZG91YmxlKHRjbWFsbG9jX3JlbGVhc2VfcmF0ZSwgMSwKLSAgICAgICAgICAg
ICAgIlJhdGUgYXQgd2hpY2ggd2UgcmVsZWFzZSB1bnVzZWQgbWVtb3J5IHRvIHRoZSBzeXN0ZW0u
ICAiCi0gICAgICAgICAgICAgICJaZXJvIG1lYW5zIHdlIG5ldmVyIHJlbGVhc2UgbWVtb3J5IGJh
Y2sgdG8gdGhlIHN5c3RlbS4gICIKLSAgICAgICAgICAgICAgIkluY3JlYXNlIHRoaXMgZmxhZyB0
byByZXR1cm4gbWVtb3J5IGZhc3RlcjsgZGVjcmVhc2UgaXQgIgotICAgICAgICAgICAgICAidG8g
cmV0dXJuIG1lbW9yeSBzbG93ZXIuICBSZWFzb25hYmxlIHJhdGVzIGFyZSBpbiB0aGUgIgotICAg
ICAgICAgICAgICAicmFuZ2UgWzAsMTBdIik7CitERUZJTkVfZG91YmxlKHRjbWFsbG9jX3JlbGVh
c2VfcmF0ZSwgMSwgIlJhdGUgYXQgd2hpY2ggd2UgcmVsZWFzZSB1bnVzZWQgbWVtb3J5IHRvIHRo
ZSBzeXN0ZW0uIFplcm8gbWVhbnMgd2UgbmV2ZXIgcmVsZWFzZSBtZW1vcnkgYmFjayB0byB0aGUg
c3lzdGVtLiBJbmNyZWFzZSB0aGlzIGZsYWcgdG8gcmV0dXJuIG1lbW9yeSBmYXN0ZXI7IGRlY3Jl
YXNlIGl0IHRvIHJldHVybiBtZW1vcnkgc2xvd2VyLiBSZWFzb25hYmxlIHJhdGVzIGFyZSBpbiB0
aGUgcmFuZ2UgWzAsMTBdIik7CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gTWFwcGluZyBmcm9tIHNpemUg
dG8gc2l6ZV9jbGFzcyBhbmQgdmljZSB2ZXJzYQorLy8gTWFwcGluZyBmcm9tIHNpemUgdG8gc2l6
ZUNsYXNzIGFuZCB2aWNlIHZlcnNhCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotLy8gU2l6ZXMgPD0gMTAyNCBo
YXZlIGFuIGFsaWdubWVudCA+PSA4LiAgU28gZm9yIHN1Y2ggc2l6ZXMgd2UgaGF2ZSBhbgotLy8g
YXJyYXkgaW5kZXhlZCBieSBjZWlsKHNpemUvOCkuICBTaXplcyA+IDEwMjQgaGF2ZSBhbiBhbGln
bm1lbnQgPj0gMTI4LgorLy8gU2l6ZXMgPD0gMTAyNCBoYXZlIGFuIGFsaWdubWVudCA+PSA4LiBT
byBmb3Igc3VjaCBzaXplcyB3ZSBoYXZlIGFuCisvLyBhcnJheSBpbmRleGVkIGJ5IGNlaWwoc2l6
ZS84KS4gU2l6ZXMgPiAxMDI0IGhhdmUgYW4gYWxpZ25tZW50ID49IDEyOC4KIC8vIFNvIGZvciB0
aGVzZSBsYXJnZXIgc2l6ZXMgd2UgaGF2ZSBhbiBhcnJheSBpbmRleGVkIGJ5IGNlaWwoc2l6ZS8x
MjgpLgogLy8KIC8vIFdlIGZsYXR0ZW4gYm90aCBsb2dpY2FsIGFycmF5cyBpbnRvIG9uZSBwaHlz
aWNhbCBhcnJheSBhbmQgdXNlCi0vLyBhcml0aG1ldGljIHRvIGNvbXB1dGUgYW4gYXBwcm9wcmlh
dGUgaW5kZXguICBUaGUgY29uc3RhbnRzIHVzZWQgYnkKKy8vIGFyaXRobWV0aWMgdG8gY29tcHV0
ZSBhbiBhcHByb3ByaWF0ZSBpbmRleC4gVGhlIGNvbnN0YW50cyB1c2VkIGJ5CiAvLyBDbGFzc0lu
ZGV4KCkgd2VyZSBzZWxlY3RlZCB0byBtYWtlIHRoZSBmbGF0dGVuaW5nIHdvcmsuCiAvLwogLy8g
RXhhbXBsZXM6CkBAIC03MTEsMzAgKzcwNSwzMSBAQCBERUZJTkVfZG91YmxlKHRjbWFsbG9jX3Jl
bGVhc2VfcmF0ZSwgMSwKIHN0YXRpYyBjb25zdCBzaXplX3Qga01heFNtYWxsU2l6ZSA9IDEwMjQ7
CiBzdGF0aWMgY29uc3QgaW50IHNoaWZ0X2Ftb3VudFsyXSA9IHsgMywgNyB9OyAgLy8gRm9yIGRp
dmlkZXMgYnkgOCBvciAxMjgKIHN0YXRpYyBjb25zdCBpbnQgYWRkX2Ftb3VudFsyXSA9IHsgNywg
MTI3ICsgKDEyMCA8PCA3KSB9Owotc3RhdGljIHVuc2lnbmVkIGNoYXIgY2xhc3NfYXJyYXlbMzc3
XTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGNsYXNzQXJyYXlbMzc3XTsKIAotLy8gQ29tcHV0ZSBp
bmRleCBvZiB0aGUgY2xhc3NfYXJyYXlbXSBlbnRyeSBmb3IgYSBnaXZlbiBzaXplCi1zdGF0aWMg
aW5saW5lIGludCBDbGFzc0luZGV4KHNpemVfdCBzKSB7Ci0gIGNvbnN0IGludCBpID0gKHMgPiBr
TWF4U21hbGxTaXplKTsKLSAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oKHMgKyBhZGRfYW1vdW50
W2ldKSA+PiBzaGlmdF9hbW91bnRbaV0pOworLy8gQ29tcHV0ZSBpbmRleCBvZiB0aGUgY2xhc3NB
cnJheVtdIGVudHJ5IGZvciBhIGdpdmVuIHNpemUKK3N0YXRpYyBpbmxpbmUgaW50IENsYXNzSW5k
ZXgoc2l6ZV90IHMpCit7CisgICAgY29uc3QgaW50IGkgPSAocyA+IGtNYXhTbWFsbFNpemUpOwor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KChzICsgYWRkX2Ftb3VudFtpXSkgPj4gc2hpZnRf
YW1vdW50W2ldKTsKIH0KIAogLy8gTWFwcGluZyBmcm9tIHNpemUgY2xhc3MgdG8gbWF4IHNpemUg
c3RvcmFibGUgaW4gdGhhdCBjbGFzcwotc3RhdGljIHNpemVfdCBjbGFzc190b19zaXplW2tOdW1D
bGFzc2VzXTsKK3N0YXRpYyBzaXplX3QgY2xhc3NUb3NpemVba051bUNsYXNzZXNdOwogCiAvLyBN
YXBwaW5nIGZyb20gc2l6ZSBjbGFzcyB0byBudW1iZXIgb2YgcGFnZXMgdG8gYWxsb2NhdGUgYXQg
YSB0aW1lCiBzdGF0aWMgc2l6ZV90IGNsYXNzX3RvX3BhZ2VzW2tOdW1DbGFzc2VzXTsKIAotLy8g
VHJhbnNmZXJDYWNoZSBpcyB1c2VkIHRvIGNhY2hlIHRyYW5zZmVycyBvZiBudW1fb2JqZWN0c190
b19tb3ZlW3NpemVfY2xhc3NdCisvLyBUcmFuc2ZlckNhY2hlIGlzIHVzZWQgdG8gY2FjaGUgdHJh
bnNmZXJzIG9mIG51bU9iamVjdHNUb01vdmVbc2l6ZUNsYXNzXQogLy8gYmFjayBhbmQgZm9ydGgg
YmV0d2VlbiB0aHJlYWQgY2FjaGVzIGFuZCB0aGUgY2VudHJhbCBjYWNoZSBmb3IgYSBnaXZlbiBz
aXplCiAvLyBjbGFzcy4KIHN0cnVjdCBUQ0VudHJ5IHsKLSAgdm9pZCAqaGVhZDsgIC8vIEhlYWQg
b2YgY2hhaW4gb2Ygb2JqZWN0cy4KLSAgdm9pZCAqdGFpbDsgIC8vIFRhaWwgb2YgY2hhaW4gb2Yg
b2JqZWN0cy4KKyAgICB2b2lkKiBoZWFkOyAvLyBIZWFkIG9mIGNoYWluIG9mIG9iamVjdHMuCisg
ICAgdm9pZCogdGFpbDsgLy8gVGFpbCBvZiBjaGFpbiBvZiBvYmplY3RzLgogfTsKIC8vIEEgY2Vu
dHJhbCBjYWNoZSBmcmVlbGlzdCBjYW4gaGF2ZSBhbnl3aGVyZSBmcm9tIDAgdG8ga051bVRyYW5z
ZmVyRW50cmllcwotLy8gc2xvdHMgdG8gcHV0IGxpbmsgbGlzdCBjaGFpbnMgaW50by4gIFRvIGtl
ZXAgbWVtb3J5IHVzYWdlIGJvdW5kZWQgdGhlIHRvdGFsCi0vLyBudW1iZXIgb2YgVENFbnRyaWVz
IGFjcm9zcyBzaXplIGNsYXNzZXMgaXMgZml4ZWQuICBDdXJyZW50bHkgZWFjaCBzaXplCisvLyBz
bG90cyB0byBwdXQgbGluayBsaXN0IGNoYWlucyBpbnRvLiBUbyBrZWVwIG1lbW9yeSB1c2FnZSBi
b3VuZGVkIHRoZSB0b3RhbAorLy8gbnVtYmVyIG9mIFRDRW50cmllcyBhY3Jvc3Mgc2l6ZSBjbGFz
c2VzIGlzIGZpeGVkLiBDdXJyZW50bHkgZWFjaCBzaXplCiAvLyBjbGFzcyBpcyBpbml0aWFsbHkg
Z2l2ZW4gb25lIFRDRW50cnkgd2hpY2ggYWxzbyBtZWFucyB0aGF0IHRoZSBtYXhpbXVtIGFueQog
Ly8gb25lIGNsYXNzIGNhbiBoYXZlIGlzIGtOdW1DbGFzc2VzLgogc3RhdGljIGNvbnN0IGludCBr
TnVtVHJhbnNmZXJFbnRyaWVzID0ga051bUNsYXNzZXM7CkBAIC03NTgsMzEyICs3NTMsMzI1IEBA
IHN0YXRpYyBpbmxpbmUgaW50IExnRmxvb3Ioc2l6ZV90IG4pIHsKIC8vIFNvbWUgdmVyeSBiYXNp
YyBsaW5rZWQgbGlzdCBmdW5jdGlvbnMgZm9yIGRlYWxpbmcgd2l0aCB1c2luZyB2b2lkICogYXMK
IC8vIHN0b3JhZ2UuCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCAqU0xMX05leHQodm9pZCAqdCkgewot
ICByZXR1cm4gKihyZWludGVycHJldF9jYXN0PHZvaWQqKj4odCkpOworc3RhdGljIGlubGluZSB2
b2lkKiBTTExOZXh0KHZvaWQqIHQpCit7CisgICAgcmV0dXJuICoocmVpbnRlcnByZXRfY2FzdDx2
b2lkKio+KHQpKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIFNMTF9TZXROZXh0KHZvaWQgKnQs
IHZvaWQgKm4pIHsKLSAgKihyZWludGVycHJldF9jYXN0PHZvaWQqKj4odCkpID0gbjsKK3N0YXRp
YyBpbmxpbmUgdm9pZCBTTExTZXROZXh0KHZvaWQqIHQsIHZvaWQqIG4pCit7CisgICAgKihyZWlu
dGVycHJldF9jYXN0PHZvaWQqKj4odCkpID0gbjsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIFNM
TF9QdXNoKHZvaWQgKipsaXN0LCB2b2lkICplbGVtZW50KSB7Ci0gIFNMTF9TZXROZXh0KGVsZW1l
bnQsICpsaXN0KTsKLSAgKmxpc3QgPSBlbGVtZW50Oworc3RhdGljIGlubGluZSB2b2lkIFNMTFB1
c2godm9pZCoqIGxpc3QsIHZvaWQqIGVsZW1lbnQpCit7CisgICAgU0xMU2V0TmV4dChlbGVtZW50
LCAqbGlzdCk7CisgICAgKmxpc3QgPSBlbGVtZW50OwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQg
KlNMTF9Qb3Aodm9pZCAqKmxpc3QpIHsKLSAgdm9pZCAqcmVzdWx0ID0gKmxpc3Q7Ci0gICpsaXN0
ID0gU0xMX05leHQoKmxpc3QpOwotICByZXR1cm4gcmVzdWx0Oworc3RhdGljIGlubGluZSB2b2lk
KiBTTExQb3Aodm9pZCoqIGxpc3QpCit7CisgICAgdm9pZCogcmVzdWx0ID0gKmxpc3Q7CisgICAg
Kmxpc3QgPSBTTExOZXh0KCpsaXN0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKLS8vIFJl
bW92ZSBOIGVsZW1lbnRzIGZyb20gYSBsaW5rZWQgbGlzdCB0byB3aGljaCBoZWFkIHBvaW50cy4g
IGhlYWQgd2lsbCBiZQotLy8gbW9kaWZpZWQgdG8gcG9pbnQgdG8gdGhlIG5ldyBoZWFkLiAgc3Rh
cnQgYW5kIGVuZCB3aWxsIHBvaW50IHRvIHRoZSBmaXJzdAotLy8gYW5kIGxhc3Qgbm9kZXMgb2Yg
dGhlIHJhbmdlLiAgTm90ZSB0aGF0IGVuZCB3aWxsIHBvaW50IHRvIE5VTEwgYWZ0ZXIgdGhpcwor
Ly8gUmVtb3ZlIE4gZWxlbWVudHMgZnJvbSBhIGxpbmtlZCBsaXN0IHRvIHdoaWNoIGhlYWQgcG9p
bnRzLiBoZWFkIHdpbGwgYmUKKy8vIG1vZGlmaWVkIHRvIHBvaW50IHRvIHRoZSBuZXcgaGVhZC4g
c3RhcnQgYW5kIGVuZCB3aWxsIHBvaW50IHRvIHRoZSBmaXJzdAorLy8gYW5kIGxhc3Qgbm9kZXMg
b2YgdGhlIHJhbmdlLiBOb3RlIHRoYXQgZW5kIHdpbGwgcG9pbnQgdG8gMCBhZnRlciB0aGlzCiAv
LyBmdW5jdGlvbiBpcyBjYWxsZWQuCi1zdGF0aWMgaW5saW5lIHZvaWQgU0xMX1BvcFJhbmdlKHZv
aWQgKipoZWFkLCBpbnQgTiwgdm9pZCAqKnN0YXJ0LCB2b2lkICoqZW5kKSB7Ci0gIGlmIChOID09
IDApIHsKLSAgICAqc3RhcnQgPSBOVUxMOwotICAgICplbmQgPSBOVUxMOwotICAgIHJldHVybjsK
LSAgfQorc3RhdGljIGlubGluZSB2b2lkIFNMTFBvcFJhbmdlKHZvaWQqKiBoZWFkLCBpbnQgTiwg
dm9pZCoqIHN0YXJ0LCB2b2lkKiogZW5kKQoreworICAgIGlmICghTikgeworICAgICAgICAqc3Rh
cnQgPSAwOworICAgICAgICAqZW5kID0gMDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICB2
b2lkICp0bXAgPSAqaGVhZDsKLSAgZm9yIChpbnQgaSA9IDE7IGkgPCBOOyArK2kpIHsKLSAgICB0
bXAgPSBTTExfTmV4dCh0bXApOwotICB9CisgICAgdm9pZCogdG1wID0gKmhlYWQ7CisgICAgZm9y
IChpbnQgaSA9IDE7IGkgPCBOOyArK2kpCisgICAgICAgIHRtcCA9IFNMTE5leHQodG1wKTsKIAot
ICAqc3RhcnQgPSAqaGVhZDsKLSAgKmVuZCA9IHRtcDsKLSAgKmhlYWQgPSBTTExfTmV4dCh0bXAp
OwotICAvLyBVbmxpbmsgcmFuZ2UgZnJvbSBsaXN0LgotICBTTExfU2V0TmV4dCh0bXAsIE5VTEwp
OwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgU0xMX1B1c2hSYW5nZSh2b2lkICoqaGVhZCwgdm9p
ZCAqc3RhcnQsIHZvaWQgKmVuZCkgewotICBpZiAoIXN0YXJ0KSByZXR1cm47Ci0gIFNMTF9TZXRO
ZXh0KGVuZCwgKmhlYWQpOwotICAqaGVhZCA9IHN0YXJ0OwotfQotCi1zdGF0aWMgaW5saW5lIHNp
emVfdCBTTExfU2l6ZSh2b2lkICpoZWFkKSB7Ci0gIGludCBjb3VudCA9IDA7Ci0gIHdoaWxlICho
ZWFkKSB7Ci0gICAgY291bnQrKzsKLSAgICBoZWFkID0gU0xMX05leHQoaGVhZCk7Ci0gIH0KLSAg
cmV0dXJuIGNvdW50OworICAgICpzdGFydCA9ICpoZWFkOworICAgICplbmQgPSB0bXA7CisgICAg
KmhlYWQgPSBTTExOZXh0KHRtcCk7CisgICAgLy8gVW5saW5rIHJhbmdlIGZyb20gbGlzdC4KKyAg
ICBTTExTZXROZXh0KHRtcCwgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBTTExQdXNoUmFu
Z2Uodm9pZCoqIGhlYWQsIHZvaWQqIHN0YXJ0LCB2b2lkKiBlbmQpCit7CisgICAgaWYgKCFzdGFy
dCkKKyAgICAgICAgcmV0dXJuOworICAgIFNMTFNldE5leHQoZW5kLCAqaGVhZCk7CisgICAgKmhl
YWQgPSBzdGFydDsKK30KKworc3RhdGljIGlubGluZSBzaXplX3QgU0xMU2l6ZSh2b2lkKiBoZWFk
KQoreworICAgIGludCBjb3VudCA9IDA7CisgICAgd2hpbGUgKGhlYWQpIHsKKyAgICAgICAgY291
bnQrKzsKKyAgICAgICAgaGVhZCA9IFNMTE5leHQoaGVhZCk7CisgICAgfQorICAgIHJldHVybiBj
b3VudDsKIH0KIAogLy8gU2V0dXAgaGVscGVyIGZ1bmN0aW9ucy4KIAotc3RhdGljIEFMV0FZU19J
TkxJTkUgc2l6ZV90IFNpemVDbGFzcyhzaXplX3Qgc2l6ZSkgewotICByZXR1cm4gY2xhc3NfYXJy
YXlbQ2xhc3NJbmRleChzaXplKV07CitzdGF0aWMgQUxXQVlTX0lOTElORSBzaXplX3QgU2l6ZUNs
YXNzKHNpemVfdCBzaXplKQoreworICAgIHJldHVybiBjbGFzc0FycmF5W0NsYXNzSW5kZXgoc2l6
ZSldOwogfQogCiAvLyBHZXQgdGhlIGJ5dGUtc2l6ZSBmb3IgYSBzcGVjaWZpZWQgY2xhc3MKLXN0
YXRpYyBBTFdBWVNfSU5MSU5FIHNpemVfdCBCeXRlU2l6ZUZvckNsYXNzKHNpemVfdCBjbCkgewot
ICByZXR1cm4gY2xhc3NfdG9fc2l6ZVtjbF07CitzdGF0aWMgQUxXQVlTX0lOTElORSBzaXplX3Qg
Qnl0ZVNpemVGb3JDbGFzcyhzaXplX3QgY2wpCit7CisgICAgcmV0dXJuIGNsYXNzVG9zaXplW2Ns
XTsKIH0KLXN0YXRpYyBpbnQgTnVtTW92ZVNpemUoc2l6ZV90IHNpemUpIHsKLSAgaWYgKHNpemUg
PT0gMCkgcmV0dXJuIDA7Ci0gIC8vIFVzZSBhcHByb3ggNjRrIHRyYW5zZmVycyBiZXR3ZWVuIHRo
cmVhZCBhbmQgY2VudHJhbCBjYWNoZXMuCi0gIGludCBudW0gPSBzdGF0aWNfY2FzdDxpbnQ+KDY0
LjAgKiAxMDI0LjAgLyBzaXplKTsKLSAgaWYgKG51bSA8IDIpIG51bSA9IDI7Ci0gIC8vIENsYW1w
IHdlbGwgYmVsb3cga01heEZyZWVMaXN0TGVuZ3RoIHRvIGF2b2lkIHBpbmcgcG9uZyBiZXR3ZWVu
IGNlbnRyYWwKLSAgLy8gYW5kIHRocmVhZCBjYWNoZXMuCi0gIGlmIChudW0gPiBzdGF0aWNfY2Fz
dDxpbnQ+KDAuOCAqIGtNYXhGcmVlTGlzdExlbmd0aCkpCi0gICAgbnVtID0gc3RhdGljX2Nhc3Q8
aW50PigwLjggKiBrTWF4RnJlZUxpc3RMZW5ndGgpOwotCi0gIC8vIEFsc28sIGF2b2lkIGJyaW5n
aW5nIGluIHRvbyBtYW55IG9iamVjdHMgaW50byBzbWFsbCBvYmplY3QgZnJlZQotICAvLyBsaXN0
cy4gIFRoZXJlIGFyZSBsb3RzIG9mIHN1Y2ggbGlzdHMsIGFuZCBpZiB3ZSBhbGxvdyBlYWNoIG9u
ZSB0bwotICAvLyBmZXRjaCB0b28gbWFueSBhdCBhIHRpbWUsIHdlIGVuZCB1cCBoYXZpbmcgdG8g
c2NhdmVuZ2UgdG9vIG9mdGVuCi0gIC8vIChlc3BlY2lhbGx5IHdoZW4gdGhlcmUgYXJlIGxvdHMg
b2YgdGhyZWFkcyBhbmQgZWFjaCB0aHJlYWQgZ2V0cyBhCi0gIC8vIHNtYWxsIGFsbG93YW5jZSBm
b3IgaXRzIHRocmVhZCBjYWNoZSkuCi0gIC8vCi0gIC8vIFRPRE86IE1ha2UgdGhyZWFkIGNhY2hl
IGZyZWUgbGlzdCBzaXplcyBkeW5hbWljIHNvIHRoYXQgd2UgZG8gbm90Ci0gIC8vIGhhdmUgdG8g
ZXF1YWxseSBkaXZpZGUgYSBmaXhlZCByZXNvdXJjZSBhbW9uZ3N0IGxvdHMgb2YgdGhyZWFkcy4K
LSAgaWYgKG51bSA+IDMyKSBudW0gPSAzMjsKK3N0YXRpYyBpbnQgTnVtTW92ZVNpemUoc2l6ZV90
IHNpemUpCit7CisgICAgaWYgKCFzaXplKQorICAgICAgICByZXR1cm4gMDsKKyAgICAvLyBVc2Ug
YXBwcm94IDY0ayB0cmFuc2ZlcnMgYmV0d2VlbiB0aHJlYWQgYW5kIGNlbnRyYWwgY2FjaGVzLgor
ICAgIGludCBudW0gPSBzdGF0aWNfY2FzdDxpbnQ+KDY0LjAgKiAxMDI0LjAgLyBzaXplKTsKKyAg
ICBpZiAobnVtIDwgMikKKyAgICAgICAgbnVtID0gMjsKKyAgICAvLyBDbGFtcCB3ZWxsIGJlbG93
IGtNYXhGcmVlTGlzdExlbmd0aCB0byBhdm9pZCBwaW5nIHBvbmcgYmV0d2VlbiBjZW50cmFsCisg
ICAgLy8gYW5kIHRocmVhZCBjYWNoZXMuCisgICAgaWYgKG51bSA+IHN0YXRpY19jYXN0PGludD4o
MC44ICoga01heEZyZWVMaXN0TGVuZ3RoKSkKKyAgICAgICAgbnVtID0gc3RhdGljX2Nhc3Q8aW50
PigwLjggKiBrTWF4RnJlZUxpc3RMZW5ndGgpOworCisgICAgLy8gQWxzbywgYXZvaWQgYnJpbmdp
bmcgaW4gdG9vIG1hbnkgb2JqZWN0cyBpbnRvIHNtYWxsIG9iamVjdCBmcmVlCisgICAgLy8gbGlz
dHMuIFRoZXJlIGFyZSBsb3RzIG9mIHN1Y2ggbGlzdHMsIGFuZCBpZiB3ZSBhbGxvdyBlYWNoIG9u
ZSB0bworICAgIC8vIGZldGNoIHRvbyBtYW55IGF0IGEgdGltZSwgd2UgZW5kIHVwIGhhdmluZyB0
byBzY2F2ZW5nZSB0b28gb2Z0ZW4KKyAgICAvLyAoZXNwZWNpYWxseSB3aGVuIHRoZXJlIGFyZSBs
b3RzIG9mIHRocmVhZHMgYW5kIGVhY2ggdGhyZWFkIGdldHMgYQorICAgIC8vIHNtYWxsIGFsbG93
YW5jZSBmb3IgaXRzIHRocmVhZCBjYWNoZSkuCisgICAgLy8KKyAgICAvLyBUT0RPOiBNYWtlIHRo
cmVhZCBjYWNoZSBmcmVlIGxpc3Qgc2l6ZXMgZHluYW1pYyBzbyB0aGF0IHdlIGRvIG5vdAorICAg
IC8vIGhhdmUgdG8gZXF1YWxseSBkaXZpZGUgYSBmaXhlZCByZXNvdXJjZSBhbW9uZ3N0IGxvdHMg
b2YgdGhyZWFkcy4KKyAgICBpZiAobnVtID4gMzIpCisgICAgICAgIG51bSA9IDMyOwogCi0gIHJl
dHVybiBudW07CisgICAgcmV0dXJuIG51bTsKIH0KIAogLy8gSW5pdGlhbGl6ZSB0aGUgbWFwcGlu
ZyBhcnJheXMKLXN0YXRpYyB2b2lkIEluaXRTaXplQ2xhc3NlcygpIHsKLSAgLy8gRG8gc29tZSBz
YW5pdHkgY2hlY2tpbmcgb24gYWRkX2Ftb3VudFtdL3NoaWZ0X2Ftb3VudFtdL2NsYXNzX2FycmF5
W10KLSAgaWYgKENsYXNzSW5kZXgoMCkgPCAwKSB7Ci0gICAgTUVTU0FHRSgiSW52YWxpZCBjbGFz
cyBpbmRleCAlZCBmb3Igc2l6ZSAwXG4iLCBDbGFzc0luZGV4KDApKTsKLSAgICBDUkFTSCgpOwot
ICB9Ci0gIGlmIChzdGF0aWNfY2FzdDxzaXplX3Q+KENsYXNzSW5kZXgoa01heFNpemUpKSA+PSBz
aXplb2YoY2xhc3NfYXJyYXkpKSB7Ci0gICAgTUVTU0FHRSgiSW52YWxpZCBjbGFzcyBpbmRleCAl
ZCBmb3Iga01heFNpemVcbiIsIENsYXNzSW5kZXgoa01heFNpemUpKTsKLSAgICBDUkFTSCgpOwot
ICB9Ci0KLSAgLy8gQ29tcHV0ZSB0aGUgc2l6ZSBjbGFzc2VzIHdlIHdhbnQgdG8gdXNlCi0gIHNp
emVfdCBzYyA9IDE7ICAgLy8gTmV4dCBzaXplIGNsYXNzIHRvIGFzc2lnbgotICB1bnNpZ25lZCBj
aGFyIGFsaWduc2hpZnQgPSBrQWxpZ25TaGlmdDsKLSAgaW50IGxhc3RfbGcgPSAtMTsKLSAgZm9y
IChzaXplX3Qgc2l6ZSA9IGtBbGlnbm1lbnQ7IHNpemUgPD0ga01heFNpemU7IHNpemUgKz0gKDEg
PDwgYWxpZ25zaGlmdCkpIHsKLSAgICBpbnQgbGcgPSBMZ0Zsb29yKHNpemUpOwotICAgIGlmIChs
ZyA+IGxhc3RfbGcpIHsKLSAgICAgIC8vIEluY3JlYXNlIGFsaWdubWVudCBldmVyeSBzbyBvZnRl
bi4KLSAgICAgIC8vCi0gICAgICAvLyBTaW5jZSB3ZSBkb3VibGUgdGhlIGFsaWdubWVudCBldmVy
eSB0aW1lIHNpemUgZG91YmxlcyBhbmQKLSAgICAgIC8vIHNpemUgPj0gMTI4LCB0aGlzIG1lYW5z
IHRoYXQgc3BhY2Ugd2FzdGVkIGR1ZSB0byBhbGlnbm1lbnQgaXMKLSAgICAgIC8vIGF0IG1vc3Qg
MTYvMTI4IGkuZS4sIDEyLjUlLiAgUGx1cyB3ZSBjYXAgdGhlIGFsaWdubWVudCBhdCAyNTYKLSAg
ICAgIC8vIGJ5dGVzLCBzbyB0aGUgc3BhY2Ugd2FzdGVkIGFzIGEgcGVyY2VudGFnZSBzdGFydHMg
ZmFsbGluZyBmb3IKLSAgICAgIC8vIHNpemVzID4gMksuCi0gICAgICBpZiAoKGxnID49IDcpICYm
IChhbGlnbnNoaWZ0IDwgOCkpIHsKLSAgICAgICAgYWxpZ25zaGlmdCsrOwotICAgICAgfQotICAg
ICAgbGFzdF9sZyA9IGxnOworc3RhdGljIHZvaWQgSW5pdFNpemVDbGFzc2VzKCkKK3sKKyAgICAv
LyBEbyBzb21lIHNhbml0eSBjaGVja2luZyBvbiBhZGRfYW1vdW50W10vc2hpZnRfYW1vdW50W10v
Y2xhc3NBcnJheVtdCisgICAgaWYgKENsYXNzSW5kZXgoMCkgPCAwKSB7CisgICAgICAgIE1FU1NB
R0UoIkludmFsaWQgY2xhc3MgaW5kZXggJWQgZm9yIHNpemUgMFxuIiwgQ2xhc3NJbmRleCgwKSk7
CisgICAgICAgIENSQVNIKCk7CiAgICAgfQotCi0gICAgLy8gQWxsb2NhdGUgZW5vdWdoIHBhZ2Vz
IHNvIGxlZnRvdmVyIGlzIGxlc3MgdGhhbiAxLzggb2YgdG90YWwuCi0gICAgLy8gVGhpcyBib3Vu
ZHMgd2FzdGVkIHNwYWNlIHRvIGF0IG1vc3QgMTIuNSUuCi0gICAgc2l6ZV90IHBzaXplID0ga1Bh
Z2VTaXplOwotICAgIHdoaWxlICgocHNpemUgJSBzaXplKSA+IChwc2l6ZSA+PiAzKSkgewotICAg
ICAgcHNpemUgKz0ga1BhZ2VTaXplOwotICAgIH0KLSAgICBjb25zdCBzaXplX3QgbXlfcGFnZXMg
PSBwc2l6ZSA+PiBrUGFnZVNoaWZ0OwotCi0gICAgaWYgKHNjID4gMSAmJiBteV9wYWdlcyA9PSBj
bGFzc190b19wYWdlc1tzYy0xXSkgewotICAgICAgLy8gU2VlIGlmIHdlIGNhbiBtZXJnZSB0aGlz
IGludG8gdGhlIHByZXZpb3VzIGNsYXNzIHdpdGhvdXQKLSAgICAgIC8vIGluY3JlYXNpbmcgdGhl
IGZyYWdtZW50YXRpb24gb2YgdGhlIHByZXZpb3VzIGNsYXNzLgotICAgICAgY29uc3Qgc2l6ZV90
IG15X29iamVjdHMgPSAobXlfcGFnZXMgPDwga1BhZ2VTaGlmdCkgLyBzaXplOwotICAgICAgY29u
c3Qgc2l6ZV90IHByZXZfb2JqZWN0cyA9IChjbGFzc190b19wYWdlc1tzYy0xXSA8PCBrUGFnZVNo
aWZ0KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gY2xhc3NfdG9fc2l6ZVtz
Yy0xXTsKLSAgICAgIGlmIChteV9vYmplY3RzID09IHByZXZfb2JqZWN0cykgewotICAgICAgICAv
LyBBZGp1c3QgbGFzdCBjbGFzcyB0byBpbmNsdWRlIHRoaXMgc2l6ZQotICAgICAgICBjbGFzc190
b19zaXplW3NjLTFdID0gc2l6ZTsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9CisgICAgaWYg
KHN0YXRpY19jYXN0PHNpemVfdD4oQ2xhc3NJbmRleChrTWF4U2l6ZSkpID49IHNpemVvZihjbGFz
c0FycmF5KSkgeworICAgICAgICBNRVNTQUdFKCJJbnZhbGlkIGNsYXNzIGluZGV4ICVkIGZvciBr
TWF4U2l6ZVxuIiwgQ2xhc3NJbmRleChrTWF4U2l6ZSkpOworICAgICAgICBDUkFTSCgpOwogICAg
IH0KIAotICAgIC8vIEFkZCBuZXcgY2xhc3MKLSAgICBjbGFzc190b19wYWdlc1tzY10gPSBteV9w
YWdlczsKLSAgICBjbGFzc190b19zaXplW3NjXSA9IHNpemU7Ci0gICAgc2MrKzsKLSAgfQotICBp
ZiAoc2MgIT0ga051bUNsYXNzZXMpIHsKLSAgICBNRVNTQUdFKCJ3cm9uZyBudW1iZXIgb2Ygc2l6
ZSBjbGFzc2VzOiBmb3VuZCAlIiBQUkl1UyAiIGluc3RlYWQgb2YgJWRcbiIsCisgICAgLy8gQ29t
cHV0ZSB0aGUgc2l6ZSBjbGFzc2VzIHdlIHdhbnQgdG8gdXNlCisgICAgc2l6ZV90IHNjID0gMTsg
Ly8gTmV4dCBzaXplIGNsYXNzIHRvIGFzc2lnbgorICAgIHVuc2lnbmVkIGNoYXIgYWxpZ25zaGlm
dCA9IGtBbGlnblNoaWZ0OworICAgIGludCBsYXN0TGcgPSAtMTsKKyAgICBmb3IgKHNpemVfdCBz
aXplID0ga0FsaWdubWVudDsgc2l6ZSA8PSBrTWF4U2l6ZTsgc2l6ZSArPSAoMSA8PCBhbGlnbnNo
aWZ0KSkgeworICAgICAgICBpbnQgbGcgPSBMZ0Zsb29yKHNpemUpOworICAgICAgICBpZiAobGcg
PiBsYXN0TGcpIHsKKyAgICAgICAgICAgIC8vIEluY3JlYXNlIGFsaWdubWVudCBldmVyeSBzbyBv
ZnRlbi4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBTaW5jZSB3ZSBkb3VibGUgdGhl
IGFsaWdubWVudCBldmVyeSB0aW1lIHNpemUgZG91YmxlcyBhbmQKKyAgICAgICAgICAgIC8vIHNp
emUgPj0gMTI4LCB0aGlzIG1lYW5zIHRoYXQgc3BhY2Ugd2FzdGVkIGR1ZSB0byBhbGlnbm1lbnQg
aXMKKyAgICAgICAgICAgIC8vIGF0IG1vc3QgMTYvMTI4IGkuZS4sIDEyLjUlLiBQbHVzIHdlIGNh
cCB0aGUgYWxpZ25tZW50IGF0IDI1NgorICAgICAgICAgICAgLy8gYnl0ZXMsIHNvIHRoZSBzcGFj
ZSB3YXN0ZWQgYXMgYSBwZXJjZW50YWdlIHN0YXJ0cyBmYWxsaW5nIGZvcgorICAgICAgICAgICAg
Ly8gc2l6ZXMgPiAySy4KKyAgICAgICAgICAgIGlmICgobGcgPj0gNykgJiYgKGFsaWduc2hpZnQg
PCA4KSkKKyAgICAgICAgICAgICAgICBhbGlnbnNoaWZ0Kys7CisgICAgICAgICAgICBsYXN0TGcg
PSBsZzsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEFsbG9jYXRlIGVub3VnaCBwYWdlcyBzbyBs
ZWZ0b3ZlciBpcyBsZXNzIHRoYW4gMS84IG9mIHRvdGFsLgorICAgICAgICAvLyBUaGlzIGJvdW5k
cyB3YXN0ZWQgc3BhY2UgdG8gYXQgbW9zdCAxMi41JS4KKyAgICAgICAgc2l6ZV90IHBzaXplID0g
a1BhZ2VTaXplOworICAgICAgICB3aGlsZSAoKHBzaXplICUgc2l6ZSkgPiAocHNpemUgPj4gMykp
CisgICAgICAgICAgICBwc2l6ZSArPSBrUGFnZVNpemU7CisgICAgICAgIGNvbnN0IHNpemVfdCBt
eVBhZ2VzID0gcHNpemUgPj4ga1BhZ2VTaGlmdDsKKworICAgICAgICBpZiAoc2MgPiAxICYmIG15
UGFnZXMgPT0gY2xhc3NfdG9fcGFnZXNbc2MtMV0pIHsKKyAgICAgICAgICAgIC8vIFNlZSBpZiB3
ZSBjYW4gbWVyZ2UgdGhpcyBpbnRvIHRoZSBwcmV2aW91cyBjbGFzcyB3aXRob3V0CisgICAgICAg
ICAgICAvLyBpbmNyZWFzaW5nIHRoZSBmcmFnbWVudGF0aW9uIG9mIHRoZSBwcmV2aW91cyBjbGFz
cy4KKyAgICAgICAgICAgIGNvbnN0IHNpemVfdCBteU9iamVjdHMgPSAobXlQYWdlcyA8PCBrUGFn
ZVNoaWZ0KSAvIHNpemU7CisgICAgICAgICAgICBjb25zdCBzaXplX3QgcHJldm9iamVjdHMgPSAo
Y2xhc3NfdG9fcGFnZXNbc2MtMV0gPDwga1BhZ2VTaGlmdCkgLyBjbGFzc1Rvc2l6ZVtzYy0xXTsK
KyAgICAgICAgICAgIGlmIChteU9iamVjdHMgPT0gcHJldm9iamVjdHMpIHsKKyAgICAgICAgICAg
ICAgICAvLyBBZGp1c3QgbGFzdCBjbGFzcyB0byBpbmNsdWRlIHRoaXMgc2l6ZQorICAgICAgICAg
ICAgICAgIGNsYXNzVG9zaXplW3NjLTFdID0gc2l6ZTsKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIEFkZCBuZXcgY2xhc3MK
KyAgICAgICAgY2xhc3NfdG9fcGFnZXNbc2NdID0gbXlQYWdlczsKKyAgICAgICAgY2xhc3NUb3Np
emVbc2NdID0gc2l6ZTsKKyAgICAgICAgc2MrKzsKKyAgICB9CisgICAgaWYgKHNjICE9IGtOdW1D
bGFzc2VzKSB7CisgICAgICAgIE1FU1NBR0UoIndyb25nIG51bWJlciBvZiBzaXplIGNsYXNzZXM6
IGZvdW5kICUiIFBSSXVTICIgaW5zdGVhZCBvZiAlZFxuIiwKICAgICAgICAgICAgIHNjLCBpbnQo
a051bUNsYXNzZXMpKTsKLSAgICBDUkFTSCgpOwotICB9CisgICAgICAgIENSQVNIKCk7CisgICAg
fQogCi0gIC8vIEluaXRpYWxpemUgdGhlIG1hcHBpbmcgYXJyYXlzCi0gIGludCBuZXh0X3NpemUg
PSAwOwotICBmb3IgKHVuc2lnbmVkIGNoYXIgYyA9IDE7IGMgPCBrTnVtQ2xhc3NlczsgYysrKSB7
Ci0gICAgY29uc3Qgc2l6ZV90IG1heF9zaXplX2luX2NsYXNzID0gY2xhc3NfdG9fc2l6ZVtjXTsK
LSAgICBmb3IgKHNpemVfdCBzID0gbmV4dF9zaXplOyBzIDw9IG1heF9zaXplX2luX2NsYXNzOyBz
ICs9IGtBbGlnbm1lbnQpIHsKLSAgICAgIGNsYXNzX2FycmF5W0NsYXNzSW5kZXgocyldID0gYzsK
KyAgICAvLyBJbml0aWFsaXplIHRoZSBtYXBwaW5nIGFycmF5cworICAgIGludCBuZXh0c2l6ZSA9
IDA7CisgICAgZm9yICh1bnNpZ25lZCBjaGFyIGMgPSAxOyBjIDwga051bUNsYXNzZXM7IGMrKykg
eworICAgICAgICBjb25zdCBzaXplX3QgbWF4U2l6ZWluQ2xhc3MgPSBjbGFzc1Rvc2l6ZVtjXTsK
KyAgICAgICAgZm9yIChzaXplX3QgcyA9IG5leHRzaXplOyBzIDw9IG1heFNpemVpbkNsYXNzOyBz
ICs9IGtBbGlnbm1lbnQpCisgICAgICAgICAgICBjbGFzc0FycmF5W0NsYXNzSW5kZXgocyldID0g
YzsKKyAgICAgICAgbmV4dHNpemUgPSBzdGF0aWNfY2FzdDxpbnQ+KG1heFNpemVpbkNsYXNzICsg
a0FsaWdubWVudCk7CiAgICAgfQotICAgIG5leHRfc2l6ZSA9IHN0YXRpY19jYXN0PGludD4obWF4
X3NpemVfaW5fY2xhc3MgKyBrQWxpZ25tZW50KTsKLSAgfQogCi0gIC8vIERvdWJsZS1jaGVjayBz
aXplcyBqdXN0IHRvIGJlIHNhZmUKLSAgZm9yIChzaXplX3Qgc2l6ZSA9IDA7IHNpemUgPD0ga01h
eFNpemU7IHNpemUrKykgewotICAgIGNvbnN0IHNpemVfdCBzYyA9IFNpemVDbGFzcyhzaXplKTsK
LSAgICBpZiAoc2MgPT0gMCkgewotICAgICAgTUVTU0FHRSgiQmFkIHNpemUgY2xhc3MgJSIgUFJJ
dVMgIiBmb3IgJSIgUFJJdVMgIlxuIiwgc2MsIHNpemUpOwotICAgICAgQ1JBU0goKTsKLSAgICB9
Ci0gICAgaWYgKHNjID4gMSAmJiBzaXplIDw9IGNsYXNzX3RvX3NpemVbc2MtMV0pIHsKLSAgICAg
IE1FU1NBR0UoIkFsbG9jYXRpbmcgdW5uZWNlc3NhcmlseSBsYXJnZSBjbGFzcyAlIiBQUkl1UyAi
IGZvciAlIiBQUkl1UwotICAgICAgICAgICAgICAiXG4iLCBzYywgc2l6ZSk7Ci0gICAgICBDUkFT
SCgpOwotICAgIH0KLSAgICBpZiAoc2MgPj0ga051bUNsYXNzZXMpIHsKLSAgICAgIE1FU1NBR0Uo
IkJhZCBzaXplIGNsYXNzICUiIFBSSXVTICIgZm9yICUiIFBSSXVTICJcbiIsIHNjLCBzaXplKTsK
LSAgICAgIENSQVNIKCk7Ci0gICAgfQotICAgIGNvbnN0IHNpemVfdCBzID0gY2xhc3NfdG9fc2l6
ZVtzY107Ci0gICAgaWYgKHNpemUgPiBzKSB7Ci0gICAgIE1FU1NBR0UoIkJhZCBzaXplICUiIFBS
SXVTICIgZm9yICUiIFBSSXVTICIgKHNjID0gJSIgUFJJdVMgIilcbiIsIHMsIHNpemUsIHNjKTsK
LSAgICAgIENSQVNIKCk7Ci0gICAgfQotICAgIGlmIChzID09IDApIHsKLSAgICAgIE1FU1NBR0Uo
IkJhZCBzaXplICUiIFBSSXVTICIgZm9yICUiIFBSSXVTICIgKHNjID0gJSIgUFJJdVMgIilcbiIs
IHMsIHNpemUsIHNjKTsKLSAgICAgIENSQVNIKCk7CisgICAgLy8gRG91YmxlLWNoZWNrIHNpemVz
IGp1c3QgdG8gYmUgc2FmZQorICAgIGZvciAoc2l6ZV90IHNpemUgPSAwOyBzaXplIDw9IGtNYXhT
aXplOyBzaXplKyspIHsKKyAgICAgICAgY29uc3Qgc2l6ZV90IHNjID0gU2l6ZUNsYXNzKHNpemUp
OworICAgICAgICBpZiAoIXNjKSB7CisgICAgICAgICAgICBNRVNTQUdFKCJCYWQgc2l6ZSBjbGFz
cyAlIiBQUkl1UyAiIGZvciAlIiBQUkl1UyAiXG4iLCBzYywgc2l6ZSk7CisgICAgICAgICAgICBD
UkFTSCgpOworICAgICAgICB9CisgICAgICAgIGlmIChzYyA+IDEgJiYgc2l6ZSA8PSBjbGFzc1Rv
c2l6ZVtzYy0xXSkgeworICAgICAgICAgICAgTUVTU0FHRSgiQWxsb2NhdGluZyB1bm5lY2Vzc2Fy
aWx5IGxhcmdlIGNsYXNzICUiIFBSSXVTICIgZm9yICUiIFBSSXVTICJcbiIsIHNjLCBzaXplKTsK
KyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNjID49IGtOdW1D
bGFzc2VzKSB7CisgICAgICAgICAgICBNRVNTQUdFKCJCYWQgc2l6ZSBjbGFzcyAlIiBQUkl1UyAi
IGZvciAlIiBQUkl1UyAiXG4iLCBzYywgc2l6ZSk7CisgICAgICAgICAgICBDUkFTSCgpOworICAg
ICAgICB9CisgICAgICAgIGNvbnN0IHNpemVfdCBzID0gY2xhc3NUb3NpemVbc2NdOworICAgICAg
ICBpZiAoc2l6ZSA+IHMpIHsKKyAgICAgICAgICAgIE1FU1NBR0UoIkJhZCBzaXplICUiIFBSSXVT
ICIgZm9yICUiIFBSSXVTICIgKHNjID0gJSIgUFJJdVMgIilcbiIsIHMsIHNpemUsIHNjKTsKKyAg
ICAgICAgICAgIENSQVNIKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFzKSB7CisgICAgICAg
ICAgICBNRVNTQUdFKCJCYWQgc2l6ZSAlIiBQUkl1UyAiIGZvciAlIiBQUkl1UyAiIChzYyA9ICUi
IFBSSXVTICIpXG4iLCBzLCBzaXplLCBzYyk7CisgICAgICAgICAgICBDUkFTSCgpOworICAgICAg
ICB9CiAgICAgfQotICB9CiAKLSAgLy8gSW5pdGlhbGl6ZSB0aGUgbnVtX29iamVjdHNfdG9fbW92
ZSBhcnJheS4KLSAgZm9yIChzaXplX3QgY2wgPSAxOyBjbCAgPCBrTnVtQ2xhc3NlczsgKytjbCkg
ewotICAgIG51bV9vYmplY3RzX3RvX21vdmVbY2xdID0gTnVtTW92ZVNpemUoQnl0ZVNpemVGb3JD
bGFzcyhjbCkpOwotICB9CisgICAgLy8gSW5pdGlhbGl6ZSB0aGUgbnVtT2JqZWN0c1RvTW92ZSBh
cnJheS4KKyAgICBmb3IgKHNpemVfdCBjbCA9IDE7IGNsICA8IGtOdW1DbGFzc2VzOyArK2NsKQor
ICAgICAgICBudW1PYmplY3RzVG9Nb3ZlW2NsXSA9IE51bU1vdmVTaXplKEJ5dGVTaXplRm9yQ2xh
c3MoY2wpKTsKIAogI2lmbmRlZiBXVEZfQ0hBTkdFUwotICBpZiAoZmFsc2UpIHsKLSAgICAvLyBE
dW1wIGNsYXNzIHNpemVzIGFuZCBtYXhpbXVtIGV4dGVybmFsIHdhc3RhZ2UgcGVyIHNpemUgY2xh
c3MKLSAgICBmb3IgKHNpemVfdCBjbCA9IDE7IGNsICA8IGtOdW1DbGFzc2VzOyArK2NsKSB7Ci0g
ICAgICBjb25zdCBpbnQgYWxsb2Nfc2l6ZSA9IGNsYXNzX3RvX3BhZ2VzW2NsXSA8PCBrUGFnZVNo
aWZ0OwotICAgICAgY29uc3QgaW50IGFsbG9jX29ianMgPSBhbGxvY19zaXplIC8gY2xhc3NfdG9f
c2l6ZVtjbF07Ci0gICAgICBjb25zdCBpbnQgbWluX3VzZWQgPSAoY2xhc3NfdG9fc2l6ZVtjbC0x
XSArIDEpICogYWxsb2Nfb2JqczsKLSAgICAgIGNvbnN0IGludCBtYXhfd2FzdGUgPSBhbGxvY19z
aXplIC0gbWluX3VzZWQ7Ci0gICAgICBNRVNTQUdFKCJTQyAlM2QgWyAlOGQgLi4gJThkIF0gZnJv
bSAlOGQgOyAlMi4wZiUlIG1heHdhc3RlXG4iLAotICAgICAgICAgICAgICBpbnQoY2wpLAotICAg
ICAgICAgICAgICBpbnQoY2xhc3NfdG9fc2l6ZVtjbC0xXSArIDEpLAotICAgICAgICAgICAgICBp
bnQoY2xhc3NfdG9fc2l6ZVtjbF0pLAotICAgICAgICAgICAgICBpbnQoY2xhc3NfdG9fcGFnZXNb
Y2xdIDw8IGtQYWdlU2hpZnQpLAotICAgICAgICAgICAgICBtYXhfd2FzdGUgKiAxMDAuMCAvIGFs
bG9jX3NpemUKLSAgICAgICAgICAgICAgKTsKKyAgICBpZiAoZmFsc2UpIHsKKyAgICAgICAgLy8g
RHVtcCBjbGFzcyBzaXplcyBhbmQgbWF4aW11bSBleHRlcm5hbCB3YXN0YWdlIHBlciBzaXplIGNs
YXNzCisgICAgICAgIGZvciAoc2l6ZV90IGNsID0gMTsgY2wgIDwga051bUNsYXNzZXM7ICsrY2wp
IHsKKyAgICAgICAgICAgIGNvbnN0IGludCBhbGxvY1NpemUgPSBjbGFzc190b19wYWdlc1tjbF0g
PDwga1BhZ2VTaGlmdDsKKyAgICAgICAgICAgIGNvbnN0IGludCBhbGxvY09ianMgPSBhbGxvY1Np
emUgLyBjbGFzc1Rvc2l6ZVtjbF07CisgICAgICAgICAgICBjb25zdCBpbnQgbWluVXNlZCA9IChj
bGFzc1Rvc2l6ZVtjbC0xXSArIDEpICogYWxsb2NPYmpzOworICAgICAgICAgICAgY29uc3QgaW50
IG1heFdhc3RlID0gYWxsb2NTaXplIC0gbWluVXNlZDsKKyAgICAgICAgICAgIE1FU1NBR0UoIlND
ICUzZCBbICU4ZCAuLiAlOGQgXSBmcm9tICU4ZCA7ICUyLjBmJSUgbWF4d2FzdGVcbiIsCisgICAg
ICAgICAgICAgICAgaW50KGNsKSwKKyAgICAgICAgICAgICAgICBpbnQoY2xhc3NUb3NpemVbY2wt
MV0gKyAxKSwKKyAgICAgICAgICAgICAgICBpbnQoY2xhc3NUb3NpemVbY2xdKSwKKyAgICAgICAg
ICAgICAgICBpbnQoY2xhc3NfdG9fcGFnZXNbY2xdIDw8IGtQYWdlU2hpZnQpLAorICAgICAgICAg
ICAgICAgIG1heFdhc3RlICogMTAwLjAgLyBhbGxvY1NpemUpOworICAgICAgICB9CiAgICAgfQot
ICB9CiAjZW5kaWYKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gU2ltcGxlIGFsbG9jYXRv
ciBmb3Igb2JqZWN0cyBvZiBhIHNwZWNpZmllZCB0eXBlLiAgRXh0ZXJuYWwgbG9ja2luZworLy8g
U2ltcGxlIGFsbG9jYXRvciBmb3Igb2JqZWN0cyBvZiBhIHNwZWNpZmllZCB0eXBlLiBFeHRlcm5h
bCBsb2NraW5nCiAvLyBpcyByZXF1aXJlZCBiZWZvcmUgYWNjZXNzaW5nIG9uZSBvZiB0aGVzZSBv
YmplY3RzLgogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAvLyBNZXRhZGF0YSBhbGxvY2F0b3IgLS0g
a2VlcHMgc3RhdHMgYWJvdXQgaG93IG1hbnkgYnl0ZXMgYWxsb2NhdGVkCi1zdGF0aWMgdWludDY0
X3QgbWV0YWRhdGFfc3lzdGVtX2J5dGVzID0gMDsKLXN0YXRpYyB2b2lkKiBNZXRhRGF0YUFsbG9j
KHNpemVfdCBieXRlcykgewotICB2b2lkKiByZXN1bHQgPSBUQ01hbGxvY19TeXN0ZW1BbGxvYyhi
eXRlcywgMCk7Ci0gIGlmIChyZXN1bHQgIT0gTlVMTCkgewotICAgIG1ldGFkYXRhX3N5c3RlbV9i
eXRlcyArPSBieXRlczsKLSAgfQotICByZXR1cm4gcmVzdWx0Oworc3RhdGljIHVpbnQ2NF90IG1l
dGFkYXRhU3lzdGVtQnl0ZXMgPSAwOworc3RhdGljIHZvaWQqIE1ldGFEYXRhQWxsb2Moc2l6ZV90
IGJ5dGVzKQoreworICAgIHZvaWQqIHJlc3VsdCA9IFRDTWFsbG9jX1N5c3RlbUFsbG9jKGJ5dGVz
LCAwKTsKKyAgICBpZiAocmVzdWx0KSAKKyAgICAgICAgbWV0YWRhdGFTeXN0ZW1CeXRlcyArPSBi
eXRlczsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgVD4KIGNsYXNz
IFBhZ2VIZWFwQWxsb2NhdG9yIHsKLSBwcml2YXRlOgotICAvLyBIb3cgbXVjaCB0byBhbGxvY2F0
ZSBmcm9tIHN5c3RlbSBhdCBhIHRpbWUKLSAgc3RhdGljIGNvbnN0IHNpemVfdCBrQWxsb2NJbmNy
ZW1lbnQgPSAzMiA8PCAxMDsKK3ByaXZhdGU6CisgICAgLy8gSG93IG11Y2ggdG8gYWxsb2NhdGUg
ZnJvbSBzeXN0ZW0gYXQgYSB0aW1lCisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBrQWxsb2NJbmNy
ZW1lbnQgPSAzMiA8PCAxMDsKIAotICAvLyBBbGlnbmVkIHNpemUgb2YgVAotICBzdGF0aWMgY29u
c3Qgc2l6ZV90IGtBbGlnbmVkU2l6ZQotICA9ICgoKHNpemVvZihUKSArIGtBbGlnbm1lbnQgLSAx
KSAvIGtBbGlnbm1lbnQpICoga0FsaWdubWVudCk7CisgICAgLy8gQWxpZ25lZCBzaXplIG9mIFQK
KyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGtBbGlnbmVkU2l6ZQorICAgID0gKCgoc2l6ZW9mKFQp
ICsga0FsaWdubWVudCAtIDEpIC8ga0FsaWdubWVudCkgKiBrQWxpZ25tZW50KTsKIAotICAvLyBG
cmVlIGFyZWEgZnJvbSB3aGljaCB0byBjYXJ2ZSBuZXcgb2JqZWN0cwotICBjaGFyKiBmcmVlX2Fy
ZWFfOwotICBzaXplX3QgZnJlZV9hdmFpbF87CisgICAgLy8gRnJlZSBhcmVhIGZyb20gd2hpY2gg
dG8gY2FydmUgbmV3IG9iamVjdHMKKyAgICBjaGFyKiBmcmVlQXJlYTsKKyAgICBzaXplX3QgZnJl
ZUF2YWlsOwogCi0gIC8vIExpbmtlZCBsaXN0IG9mIGFsbCByZWdpb25zIGFsbG9jYXRlZCBieSB0
aGlzIGFsbG9jYXRvcgotICB2b2lkKiBhbGxvY2F0ZWRfcmVnaW9uc187CisgICAgLy8gTGlua2Vk
IGxpc3Qgb2YgYWxsIHJlZ2lvbnMgYWxsb2NhdGVkIGJ5IHRoaXMgYWxsb2NhdG9yCisgICAgdm9p
ZCogYWxsb2NhdGVkUmVnaW9uczsKIAotICAvLyBGcmVlIGxpc3Qgb2YgYWxyZWFkeSBjYXJ2ZWQg
b2JqZWN0cwotICB2b2lkKiBmcmVlX2xpc3RfOworICAgIC8vIEZyZWUgbGlzdCBvZiBhbHJlYWR5
IGNhcnZlZCBvYmplY3RzCisgICAgdm9pZCogZnJlZUxpc3Q7CiAKLSAgLy8gTnVtYmVyIG9mIGFs
bG9jYXRlZCBidXQgdW5mcmVlZCBvYmplY3RzCi0gIGludCBpbnVzZV87CisgICAgLy8gTnVtYmVy
IG9mIGFsbG9jYXRlZCBidXQgdW5mcmVlZCBvYmplY3RzCisgICAgaW50IGluVXNlOwogCi0gcHVi
bGljOgotICB2b2lkIEluaXQoKSB7Ci0gICAgQVNTRVJUKGtBbGlnbmVkU2l6ZSA8PSBrQWxsb2NJ
bmNyZW1lbnQpOwotICAgIGludXNlXyA9IDA7Ci0gICAgYWxsb2NhdGVkX3JlZ2lvbnNfID0gMDsK
LSAgICBmcmVlX2FyZWFfID0gTlVMTDsKLSAgICBmcmVlX2F2YWlsXyA9IDA7Ci0gICAgZnJlZV9s
aXN0XyA9IE5VTEw7Ci0gIH0KK3B1YmxpYzoKKyAgICB2b2lkIEluaXQoKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGtBbGlnbmVkU2l6ZSA8PSBrQWxsb2NJbmNyZW1lbnQpOworICAgICAgICBpblVz
ZSA9IDA7CisgICAgICAgIGFsbG9jYXRlZFJlZ2lvbnMgPSAwOworICAgICAgICBmcmVlQXJlYSA9
IDA7CisgICAgICAgIGZyZWVBdmFpbCA9IDA7CisgICAgICAgIGZyZWVMaXN0ID0gMDsKKyAgICB9
CiAKLSAgVCogTmV3KCkgewotICAgIC8vIENvbnN1bHQgZnJlZSBsaXN0Ci0gICAgdm9pZCogcmVz
dWx0OwotICAgIGlmIChmcmVlX2xpc3RfICE9IE5VTEwpIHsKLSAgICAgIHJlc3VsdCA9IGZyZWVf
bGlzdF87Ci0gICAgICBmcmVlX2xpc3RfID0gKihyZWludGVycHJldF9jYXN0PHZvaWQqKj4ocmVz
dWx0KSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGlmIChmcmVlX2F2YWlsXyA8IGtBbGlnbmVkU2l6
ZSkgewotICAgICAgICAvLyBOZWVkIG1vcmUgcm9vbQotICAgICAgICBjaGFyKiBuZXdfYWxsb2Nh
dGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KE1ldGFEYXRhQWxsb2Moa0FsbG9jSW5jcmVt
ZW50KSk7Ci0gICAgICAgIGlmICghbmV3X2FsbG9jYXRpb24pCi0gICAgICAgICAgQ1JBU0goKTsK
LQotICAgICAgICAqcmVpbnRlcnByZXRfY2FzdF9wdHI8dm9pZCoqPihuZXdfYWxsb2NhdGlvbikg
PSBhbGxvY2F0ZWRfcmVnaW9uc187Ci0gICAgICAgIGFsbG9jYXRlZF9yZWdpb25zXyA9IG5ld19h
bGxvY2F0aW9uOwotICAgICAgICBmcmVlX2FyZWFfID0gbmV3X2FsbG9jYXRpb24gKyBrQWxpZ25l
ZFNpemU7Ci0gICAgICAgIGZyZWVfYXZhaWxfID0ga0FsbG9jSW5jcmVtZW50IC0ga0FsaWduZWRT
aXplOwotICAgICAgfQotICAgICAgcmVzdWx0ID0gZnJlZV9hcmVhXzsKLSAgICAgIGZyZWVfYXJl
YV8gKz0ga0FsaWduZWRTaXplOwotICAgICAgZnJlZV9hdmFpbF8gLT0ga0FsaWduZWRTaXplOwor
ICAgIFQqIE5ldygpCisgICAgeworICAgICAgICAvLyBDb25zdWx0IGZyZWUgbGlzdAorICAgICAg
ICB2b2lkKiByZXN1bHQ7CisgICAgICAgIGlmIChmcmVlTGlzdCkgeworICAgICAgICAgICAgcmVz
dWx0ID0gZnJlZUxpc3Q7CisgICAgICAgICAgICBmcmVlTGlzdCA9ICoocmVpbnRlcnByZXRfY2Fz
dDx2b2lkKio+KHJlc3VsdCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGZy
ZWVBdmFpbCA8IGtBbGlnbmVkU2l6ZSkgeworICAgICAgICAgICAgICAgIC8vIE5lZWQgbW9yZSBy
b29tCisgICAgICAgICAgICAgICAgY2hhciogbmV3QWxsb2NhdGlvbiA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KE1ldGFEYXRhQWxsb2Moa0FsbG9jSW5jcmVtZW50KSk7CisgICAgICAgICAgICAg
ICAgaWYgKCFuZXdBbGxvY2F0aW9uKQorICAgICAgICAgICAgICAgICAgICBDUkFTSCgpOworCisg
ICAgICAgICAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3RfcHRyPHZvaWQqKj4obmV3QWxsb2NhdGlv
bikgPSBhbGxvY2F0ZWRSZWdpb25zOworICAgICAgICAgICAgICAgIGFsbG9jYXRlZFJlZ2lvbnMg
PSBuZXdBbGxvY2F0aW9uOworICAgICAgICAgICAgICAgIGZyZWVBcmVhID0gbmV3QWxsb2NhdGlv
biArIGtBbGlnbmVkU2l6ZTsKKyAgICAgICAgICAgICAgICBmcmVlQXZhaWwgPSBrQWxsb2NJbmNy
ZW1lbnQgLSBrQWxpZ25lZFNpemU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXN1bHQg
PSBmcmVlQXJlYTsKKyAgICAgICAgICAgIGZyZWVBcmVhICs9IGtBbGlnbmVkU2l6ZTsKKyAgICAg
ICAgICAgIGZyZWVBdmFpbCAtPSBrQWxpZ25lZFNpemU7CisgICAgICAgIH0KKyAgICAgICAgaW5V
c2UrKzsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KHJlc3VsdCk7CiAgICAg
fQotICAgIGludXNlXysrOwotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFQqPihyZXN1bHQp
OwotICB9CiAKLSAgdm9pZCBEZWxldGUoVCogcCkgewotICAgICoocmVpbnRlcnByZXRfY2FzdDx2
b2lkKio+KHApKSA9IGZyZWVfbGlzdF87Ci0gICAgZnJlZV9saXN0XyA9IHA7Ci0gICAgaW51c2Vf
LS07Ci0gIH0KKyAgICB2b2lkIERlbGV0ZShUKiBwKQorICAgIHsKKyAgICAgICAgKihyZWludGVy
cHJldF9jYXN0PHZvaWQqKj4ocCkpID0gZnJlZUxpc3Q7CisgICAgICAgIGZyZWVMaXN0ID0gcDsK
KyAgICAgICAgaW5Vc2UtLTsKKyAgICB9CiAKLSAgaW50IGludXNlKCkgY29uc3QgeyByZXR1cm4g
aW51c2VfOyB9CisgICAgaW50IGludXNlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBp
blVzZTsKKyAgICB9CiAKICNpZiBkZWZpbmVkKFdURl9DSEFOR0VTKSAmJiBPUyhEQVJXSU4pCi0g
IHRlbXBsYXRlIDxjbGFzcyBSZWNvcmRlcj4KLSAgdm9pZCByZWNvcmRBZG1pbmlzdHJhdGl2ZVJl
Z2lvbnMoUmVjb3JkZXImIHJlY29yZGVyLCBjb25zdCBSZW1vdGVNZW1vcnlSZWFkZXImIHJlYWRl
cikKLSAgewotICAgICAgZm9yICh2b2lkKiBhZG1pbkFsbG9jYXRpb24gPSBhbGxvY2F0ZWRfcmVn
aW9uc187IGFkbWluQWxsb2NhdGlvbjsgYWRtaW5BbGxvY2F0aW9uID0gcmVhZGVyLm5leHRFbnRy
eUluTGlua2VkTGlzdChyZWludGVycHJldF9jYXN0PHZvaWQqKj4oYWRtaW5BbGxvY2F0aW9uKSkp
Ci0gICAgICAgICAgcmVjb3JkZXIucmVjb3JkUmVnaW9uKHJlaW50ZXJwcmV0X2Nhc3Q8dm1fYWRk
cmVzc190PihhZG1pbkFsbG9jYXRpb24pLCBrQWxsb2NJbmNyZW1lbnQpOwotICB9CisgICAgdGVt
cGxhdGUgPGNsYXNzIFJlY29yZGVyPgorICAgIHZvaWQgcmVjb3JkQWRtaW5pc3RyYXRpdmVSZWdp
b25zKFJlY29yZGVyJiByZWNvcmRlciwgY29uc3QgUmVtb3RlTWVtb3J5UmVhZGVyJiByZWFkZXIp
CisgICAgeworICAgICAgICBmb3IgKHZvaWQqIGFkbWluQWxsb2NhdGlvbiA9IGFsbG9jYXRlZFJl
Z2lvbnM7IGFkbWluQWxsb2NhdGlvbjsgYWRtaW5BbGxvY2F0aW9uID0gcmVhZGVyLm5leHRFbnRy
eUluTGlua2VkTGlzdChyZWludGVycHJldF9jYXN0PHZvaWQqKj4oYWRtaW5BbGxvY2F0aW9uKSkp
CisgICAgICAgICAgICByZWNvcmRlci5yZWNvcmRSZWdpb24ocmVpbnRlcnByZXRfY2FzdDx2bV9h
ZGRyZXNzX3Q+KGFkbWluQWxsb2NhdGlvbiksIGtBbGxvY0luY3JlbWVudCk7CisgICAgfQogI2Vu
ZGlmCiB9OwogCkBAIC0xMDc5LDE2MCArMTA4NywxNjggQEAgdHlwZWRlZiB1aW50cHRyX3QgTGVu
Z3RoOwogCiBzdGF0aWMgY29uc3QgTGVuZ3RoIGtNYXhWYWxpZFBhZ2VzID0gKH5zdGF0aWNfY2Fz
dDxMZW5ndGg+KDApKSA+PiBrUGFnZVNoaWZ0OwogCi0vLyBDb252ZXJ0IGJ5dGUgc2l6ZSBpbnRv
IHBhZ2VzLiAgVGhpcyB3b24ndCBvdmVyZmxvdywgYnV0IG1heSByZXR1cm4KKy8vIENvbnZlcnQg
Ynl0ZSBzaXplIGludG8gcGFnZXMuIFRoaXMgd29uJ3Qgb3ZlcmZsb3csIGJ1dCBtYXkgcmV0dXJu
CiAvLyBhbiB1bnJlYXNvbmFibHkgbGFyZ2UgdmFsdWUgaWYgYnl0ZXMgaXMgaHVnZSBlbm91Z2gu
Ci1zdGF0aWMgaW5saW5lIExlbmd0aCBwYWdlcyhzaXplX3QgYnl0ZXMpIHsKLSAgcmV0dXJuIChi
eXRlcyA+PiBrUGFnZVNoaWZ0KSArCi0gICAgICAoKGJ5dGVzICYgKGtQYWdlU2l6ZSAtIDEpKSA+
IDAgPyAxIDogMCk7CitzdGF0aWMgaW5saW5lIExlbmd0aCBwYWdlcyhzaXplX3QgYnl0ZXMpCit7
CisgICAgcmV0dXJuIChieXRlcyA+PiBrUGFnZVNoaWZ0KSArICgoYnl0ZXMgJiAoa1BhZ2VTaXpl
IC0gMSkpID4gMCA/IDEgOiAwKTsKIH0KIAogLy8gQ29udmVydCBhIHVzZXIgc2l6ZSBpbnRvIHRo
ZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB3aWxsIGFjdHVhbGx5IGJlCiAvLyBhbGxvY2F0ZWQKLXN0
YXRpYyBzaXplX3QgQWxsb2NhdGlvblNpemUoc2l6ZV90IGJ5dGVzKSB7Ci0gIGlmIChieXRlcyA+
IGtNYXhTaXplKSB7Ci0gICAgLy8gTGFyZ2Ugb2JqZWN0OiB3ZSBhbGxvY2F0ZSBhbiBpbnRlZ3Jh
bCBudW1iZXIgb2YgcGFnZXMKLSAgICBBU1NFUlQoYnl0ZXMgPD0gKGtNYXhWYWxpZFBhZ2VzIDw8
IGtQYWdlU2hpZnQpKTsKLSAgICByZXR1cm4gcGFnZXMoYnl0ZXMpIDw8IGtQYWdlU2hpZnQ7Ci0g
IH0gZWxzZSB7CitzdGF0aWMgc2l6ZV90IEFsbG9jYXRpb25TaXplKHNpemVfdCBieXRlcykKK3sK
KyAgICBpZiAoYnl0ZXMgPiBrTWF4U2l6ZSkgeworICAgICAgICAvLyBMYXJnZSBvYmplY3Q6IHdl
IGFsbG9jYXRlIGFuIGludGVncmFsIG51bWJlciBvZiBwYWdlcworICAgICAgICBBU1NFUlQoYnl0
ZXMgPD0gKGtNYXhWYWxpZFBhZ2VzIDw8IGtQYWdlU2hpZnQpKTsKKyAgICAgICAgcmV0dXJuIHBh
Z2VzKGJ5dGVzKSA8PCBrUGFnZVNoaWZ0OworICAgIH0KICAgICAvLyBTbWFsbCBvYmplY3Q6IGZp
bmQgdGhlIHNpemUgY2xhc3MgdG8gd2hpY2ggaXQgYmVsb25ncwogICAgIHJldHVybiBCeXRlU2l6
ZUZvckNsYXNzKFNpemVDbGFzcyhieXRlcykpOwotICB9CiB9CiAKIC8vIEluZm9ybWF0aW9uIGtl
cHQgZm9yIGEgc3BhbiAoYSBjb250aWd1b3VzIHJ1biBvZiBwYWdlcykuCiBzdHJ1Y3QgU3BhbiB7
Ci0gIFBhZ2VJRCAgICAgICAgc3RhcnQ7ICAgICAgICAgIC8vIFN0YXJ0aW5nIHBhZ2UgbnVtYmVy
Ci0gIExlbmd0aCAgICAgICAgbGVuZ3RoOyAgICAgICAgIC8vIE51bWJlciBvZiBwYWdlcyBpbiBz
cGFuCi0gIFNwYW4qICAgICAgICAgbmV4dDsgICAgICAgICAgIC8vIFVzZWQgd2hlbiBpbiBsaW5r
IGxpc3QKLSAgU3BhbiogICAgICAgICBwcmV2OyAgICAgICAgICAgLy8gVXNlZCB3aGVuIGluIGxp
bmsgbGlzdAotICB2b2lkKiAgICAgICAgIG9iamVjdHM7ICAgICAgICAvLyBMaW5rZWQgbGlzdCBv
ZiBmcmVlIG9iamVjdHMKLSAgdW5zaWduZWQgaW50ICBmcmVlIDogMTsgICAgICAgLy8gSXMgdGhl
IHNwYW4gZnJlZQorICAgIFBhZ2VJRCBzdGFydDsgLy8gU3RhcnRpbmcgcGFnZSBudW1iZXIKKyAg
ICBMZW5ndGggbGVuZ3RoOyAvLyBOdW1iZXIgb2YgcGFnZXMgaW4gc3BhbgorICAgIFNwYW4qIG5l
eHQ7IC8vIFVzZWQgd2hlbiBpbiBsaW5rIGxpc3QKKyAgICBTcGFuKiBwcmV2OyAvLyBVc2VkIHdo
ZW4gaW4gbGluayBsaXN0CisgICAgdm9pZCogb2JqZWN0czsgLy8gTGlua2VkIGxpc3Qgb2YgZnJl
ZSBvYmplY3RzCisgICAgdW5zaWduZWQgZnJlZSA6IDE7IC8vIElzIHRoZSBzcGFuIGZyZWUKICNp
Zm5kZWYgTk9fVENNQUxMT0NfU0FNUExFUwotICB1bnNpZ25lZCBpbnQgIHNhbXBsZSA6IDE7ICAg
ICAvLyBTYW1wbGVkIG9iamVjdD8KKyAgICB1bnNpZ25lZCBzYW1wbGUgOiAxOyAvLyBTYW1wbGVk
IG9iamVjdD8KICNlbmRpZgotICB1bnNpZ25lZCBpbnQgIHNpemVjbGFzcyA6IDg7ICAvLyBTaXpl
LWNsYXNzIGZvciBzbWFsbCBvYmplY3RzIChvciAwKQotICB1bnNpZ25lZCBpbnQgIHJlZmNvdW50
IDogMTE7ICAvLyBOdW1iZXIgb2Ygbm9uLWZyZWUgb2JqZWN0cwotICBib29sIGRlY29tbWl0dGVk
IDogMTsKKyAgICB1bnNpZ25lZCBzaXplQ2xhc3MgOiA4OyAvLyBTaXplLWNsYXNzIGZvciBzbWFs
bCBvYmplY3RzIChvciAwKQorICAgIHVuc2lnbmVkIHJlZmNvdW50IDogMTE7IC8vIE51bWJlciBv
ZiBub24tZnJlZSBvYmplY3RzCisgICAgYm9vbCBkZWNvbW1pdHRlZCA6IDE7CiAKICN1bmRlZiBT
UEFOX0hJU1RPUlkKICNpZmRlZiBTUEFOX0hJU1RPUlkKLSAgLy8gRm9yIGRlYnVnZ2luZywgd2Ug
Y2FuIGtlZXAgYSBsb2cgZXZlbnRzIHBlciBzcGFuCi0gIGludCBuZXh0aGlzdG9yeTsKLSAgY2hh
ciBoaXN0b3J5WzY0XTsKLSAgaW50IHZhbHVlWzY0XTsKKyAgICAvLyBGb3IgZGVidWdnaW5nLCB3
ZSBjYW4ga2VlcCBhIGxvZyBldmVudHMgcGVyIHNwYW4KKyAgICBpbnQgbmV4dGhpc3Rvcnk7Cisg
ICAgY2hhciBoaXN0b3J5WzY0XTsKKyAgICBpbnQgdmFsdWVbNjRdOwogI2VuZGlmCiB9OwogCiAj
ZGVmaW5lIEFTU0VSVF9TUEFOX0NPTU1JVFRFRChzcGFuKSBBU1NFUlQoIXNwYW4tPmRlY29tbWl0
dGVkKQogCiAjaWZkZWYgU1BBTl9ISVNUT1JZCi12b2lkIEV2ZW50KFNwYW4qIHNwYW4sIGNoYXIg
b3AsIGludCB2ID0gMCkgewotICBzcGFuLT5oaXN0b3J5W3NwYW4tPm5leHRoaXN0b3J5XSA9IG9w
OwotICBzcGFuLT52YWx1ZVtzcGFuLT5uZXh0aGlzdG9yeV0gPSB2OwotICBzcGFuLT5uZXh0aGlz
dG9yeSsrOwotICBpZiAoc3Bhbi0+bmV4dGhpc3RvcnkgPT0gc2l6ZW9mKHNwYW4tPmhpc3Rvcnkp
KSBzcGFuLT5uZXh0aGlzdG9yeSA9IDA7Cit2b2lkIEV2ZW50KFNwYW4qIHNwYW4sIGNoYXIgb3As
IGludCB2ID0gMCkKK3sKKyAgICBzcGFuLT5oaXN0b3J5W3NwYW4tPm5leHRoaXN0b3J5XSA9IG9w
OworICAgIHNwYW4tPnZhbHVlW3NwYW4tPm5leHRoaXN0b3J5XSA9IHY7CisgICAgc3Bhbi0+bmV4
dGhpc3RvcnkrKzsKKyAgICBpZiAoc3Bhbi0+bmV4dGhpc3RvcnkgPT0gc2l6ZW9mKHNwYW4tPmhp
c3RvcnkpKQorICAgICAgICBzcGFuLT5uZXh0aGlzdG9yeSA9IDA7CiB9CiAjZWxzZQogI2RlZmlu
ZSBFdmVudChzLG8sdikgKCh2b2lkKSAwKQogI2VuZGlmCiAKIC8vIEFsbG9jYXRvci9kZWFsbG9j
YXRvciBmb3Igc3BhbnMKLXN0YXRpYyBQYWdlSGVhcEFsbG9jYXRvcjxTcGFuPiBzcGFuX2FsbG9j
YXRvcjsKLXN0YXRpYyBTcGFuKiBOZXdTcGFuKFBhZ2VJRCBwLCBMZW5ndGggbGVuKSB7Ci0gIFNw
YW4qIHJlc3VsdCA9IHNwYW5fYWxsb2NhdG9yLk5ldygpOwotICBtZW1zZXQocmVzdWx0LCAwLCBz
aXplb2YoKnJlc3VsdCkpOwotICByZXN1bHQtPnN0YXJ0ID0gcDsKLSAgcmVzdWx0LT5sZW5ndGgg
PSBsZW47CitzdGF0aWMgUGFnZUhlYXBBbGxvY2F0b3I8U3Bhbj4gc3BhbkFsbG9jYXRvcjsKK3N0
YXRpYyBTcGFuKiBOZXdTcGFuKFBhZ2VJRCBwLCBMZW5ndGggbGVuKQoreworICAgIFNwYW4qIHJl
c3VsdCA9IHNwYW5BbGxvY2F0b3IuTmV3KCk7CisgICAgbWVtc2V0KHJlc3VsdCwgMCwgc2l6ZW9m
KCpyZXN1bHQpKTsKKyAgICByZXN1bHQtPnN0YXJ0ID0gcDsKKyAgICByZXN1bHQtPmxlbmd0aCA9
IGxlbjsKICNpZmRlZiBTUEFOX0hJU1RPUlkKLSAgcmVzdWx0LT5uZXh0aGlzdG9yeSA9IDA7Cisg
ICAgcmVzdWx0LT5uZXh0aGlzdG9yeSA9IDA7CiAjZW5kaWYKLSAgcmV0dXJuIHJlc3VsdDsKKyAg
ICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgRGVsZXRlU3BhbihTcGFu
KiBzcGFuKSB7CitzdGF0aWMgaW5saW5lIHZvaWQgRGVsZXRlU3BhbihTcGFuKiBzcGFuKQorewog
I2lmbmRlZiBOREVCVUcKLSAgLy8gSW4gZGVidWcgbW9kZSwgdHJhc2ggdGhlIGNvbnRlbnRzIG9m
IGRlbGV0ZWQgU3BhbnMKLSAgbWVtc2V0KHNwYW4sIDB4M2YsIHNpemVvZigqc3BhbikpOworICAg
IC8vIEluIGRlYnVnIG1vZGUsIHRyYXNoIHRoZSBjb250ZW50cyBvZiBkZWxldGVkIFNwYW5zCisg
ICAgbWVtc2V0KHNwYW4sIDB4M2YsIHNpemVvZigqc3BhbikpOwogI2VuZGlmCi0gIHNwYW5fYWxs
b2NhdG9yLkRlbGV0ZShzcGFuKTsKKyAgICBzcGFuQWxsb2NhdG9yLkRlbGV0ZShzcGFuKTsKIH0K
IAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gRG91Ymx5IGxpbmtlZCBsaXN0IG9mIHNwYW5zLgog
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogCi1zdGF0aWMgaW5saW5lIHZvaWQgRExMX0luaXQoU3Bhbiog
bGlzdCkgewotICBsaXN0LT5uZXh0ID0gbGlzdDsKLSAgbGlzdC0+cHJldiA9IGxpc3Q7CitzdGF0
aWMgaW5saW5lIHZvaWQgRExMSW5pdChTcGFuKiBsaXN0KQoreworICAgIGxpc3QtPm5leHQgPSBs
aXN0OworICAgIGxpc3QtPnByZXYgPSBsaXN0OwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgRExM
X1JlbW92ZShTcGFuKiBzcGFuKSB7Ci0gIHNwYW4tPnByZXYtPm5leHQgPSBzcGFuLT5uZXh0Owot
ICBzcGFuLT5uZXh0LT5wcmV2ID0gc3Bhbi0+cHJldjsKLSAgc3Bhbi0+cHJldiA9IE5VTEw7Ci0g
IHNwYW4tPm5leHQgPSBOVUxMOworc3RhdGljIGlubGluZSB2b2lkIERMTFJlbW92ZShTcGFuKiBz
cGFuKQoreworICAgIHNwYW4tPnByZXYtPm5leHQgPSBzcGFuLT5uZXh0OworICAgIHNwYW4tPm5l
eHQtPnByZXYgPSBzcGFuLT5wcmV2OworICAgIHNwYW4tPnByZXYgPSAwOworICAgIHNwYW4tPm5l
eHQgPSAwOwogfQogCi1zdGF0aWMgQUxXQVlTX0lOTElORSBib29sIERMTF9Jc0VtcHR5KGNvbnN0
IFNwYW4qIGxpc3QpIHsKLSAgcmV0dXJuIGxpc3QtPm5leHQgPT0gbGlzdDsKK3N0YXRpYyBBTFdB
WVNfSU5MSU5FIGJvb2wgRExMX0lzRW1wdHkoY29uc3QgU3BhbiogbGlzdCkKK3sKKyAgICByZXR1
cm4gbGlzdC0+bmV4dCA9PSBsaXN0OwogfQogCi1zdGF0aWMgaW50IERMTF9MZW5ndGgoY29uc3Qg
U3BhbiogbGlzdCkgewotICBpbnQgcmVzdWx0ID0gMDsKLSAgZm9yIChTcGFuKiBzID0gbGlzdC0+
bmV4dDsgcyAhPSBsaXN0OyBzID0gcy0+bmV4dCkgewotICAgIHJlc3VsdCsrOwotICB9Ci0gIHJl
dHVybiByZXN1bHQ7CitzdGF0aWMgaW50IERMTExlbmd0aChjb25zdCBTcGFuKiBsaXN0KQorewor
ICAgIGludCByZXN1bHQgPSAwOworICAgIGZvciAoU3BhbiogcyA9IGxpc3QtPm5leHQ7IHMgIT0g
bGlzdDsgcyA9IHMtPm5leHQpCisgICAgICAgIHJlc3VsdCsrOworICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKICNpZiAwIC8qIE5vdCBuZWVkZWQgYXQgdGhlIG1vbWVudCAtLSBjYXVzZXMgY29tcGls
ZXIgd2FybmluZ3MgaWYgbm90IHVzZWQgKi8KLXN0YXRpYyB2b2lkIERMTF9QcmludChjb25zdCBj
aGFyKiBsYWJlbCwgY29uc3QgU3BhbiogbGlzdCkgewotICBNRVNTQUdFKCIlLTEwcyAlcDoiLCBs
YWJlbCwgbGlzdCk7Ci0gIGZvciAoY29uc3QgU3BhbiogcyA9IGxpc3QtPm5leHQ7IHMgIT0gbGlz
dDsgcyA9IHMtPm5leHQpIHsKLSAgICBNRVNTQUdFKCIgPCVwLCV1LCV1PiIsIHMsIHMtPnN0YXJ0
LCBzLT5sZW5ndGgpOwotICB9Ci0gIE1FU1NBR0UoIlxuIik7CitzdGF0aWMgdm9pZCBETExQcmlu
dChjb25zdCBjaGFyKiBsYWJlbCwgY29uc3QgU3BhbiogbGlzdCkKK3sKKyAgICBNRVNTQUdFKCIl
LTEwcyAlcDoiLCBsYWJlbCwgbGlzdCk7CisgICAgZm9yIChjb25zdCBTcGFuKiBzID0gbGlzdC0+
bmV4dDsgcyAhPSBsaXN0OyBzID0gcy0+bmV4dCkKKyAgICAgICAgTUVTU0FHRSgiIDwlcCwldSwl
dT4iLCBzLCBzLT5zdGFydCwgcy0+bGVuZ3RoKTsKKyAgICBNRVNTQUdFKCJcbiIpOwogfQogI2Vu
ZGlmCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBETExfUHJlcGVuZChTcGFuKiBsaXN0LCBTcGFuKiBz
cGFuKSB7Ci0gIEFTU0VSVChzcGFuLT5uZXh0ID09IE5VTEwpOwotICBBU1NFUlQoc3Bhbi0+cHJl
diA9PSBOVUxMKTsKLSAgc3Bhbi0+bmV4dCA9IGxpc3QtPm5leHQ7Ci0gIHNwYW4tPnByZXYgPSBs
aXN0OwotICBsaXN0LT5uZXh0LT5wcmV2ID0gc3BhbjsKLSAgbGlzdC0+bmV4dCA9IHNwYW47Citz
dGF0aWMgaW5saW5lIHZvaWQgRExMUHJlcGVuZChTcGFuKiBsaXN0LCBTcGFuKiBzcGFuKQorewor
ICAgIEFTU0VSVCghc3Bhbi0+bmV4dCk7CisgICAgQVNTRVJUKCFzcGFuLT5wcmV2KTsKKyAgICBz
cGFuLT5uZXh0ID0gbGlzdC0+bmV4dDsKKyAgICBzcGFuLT5wcmV2ID0gbGlzdDsKKyAgICBsaXN0
LT5uZXh0LT5wcmV2ID0gc3BhbjsKKyAgICBsaXN0LT5uZXh0ID0gc3BhbjsKIH0KIAogLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQogLy8gU3RhY2sgdHJhY2VzIGtlcHQgZm9yIHNhbXBsZWQgYWxsb2NhdGlv
bnMKLS8vICAgVGhlIGZvbGxvd2luZyBzdGF0ZSBpcyBwcm90ZWN0ZWQgYnkgcGFnZWhlYXBfbG9j
a18uCisvLyAgIFRoZSBmb2xsb3dpbmcgc3RhdGUgaXMgcHJvdGVjdGVkIGJ5IHBhZ2VoZWFwTG9j
ay4KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogLy8gc2l6ZS9kZXB0aCBhcmUgbWFkZSB0aGUgc2Ft
ZSBzaXplIGFzIGEgcG9pbnRlciBzbyB0aGF0IHNvbWUgZ2VuZXJpYwogLy8gY29kZSBiZWxvdyBj
YW4gY29udmVuaWVudGx5IGNhc3QgdGhlbSBiYWNrIGFuZCBmb3J0aCB0byB2b2lkKi4KIHN0YXRp
YyBjb25zdCBpbnQga01heFN0YWNrRGVwdGggPSAzMTsKIHN0cnVjdCBTdGFja1RyYWNlIHsKLSAg
dWludHB0cl90IHNpemU7ICAgICAgICAgIC8vIFNpemUgb2Ygb2JqZWN0Ci0gIHVpbnRwdHJfdCBk
ZXB0aDsgICAgICAgICAvLyBOdW1iZXIgb2YgUEMgdmFsdWVzIHN0b3JlZCBpbiBhcnJheSBiZWxv
dwotICB2b2lkKiAgICAgc3RhY2tba01heFN0YWNrRGVwdGhdOworICAgIHVpbnRwdHJfdCBzaXpl
OyAvLyBTaXplIG9mIG9iamVjdAorICAgIHVpbnRwdHJfdCBkZXB0aDsgLy8gTnVtYmVyIG9mIFBD
IHZhbHVlcyBzdG9yZWQgaW4gYXJyYXkgYmVsb3cKKyAgICB2b2lkKiBzdGFja1trTWF4U3RhY2tE
ZXB0aF07CiB9Owotc3RhdGljIFBhZ2VIZWFwQWxsb2NhdG9yPFN0YWNrVHJhY2U+IHN0YWNrdHJh
Y2VfYWxsb2NhdG9yOwotc3RhdGljIFNwYW4gc2FtcGxlZF9vYmplY3RzOworc3RhdGljIFBhZ2VI
ZWFwQWxsb2NhdG9yPFN0YWNrVHJhY2U+IHN0YWNrdHJhY2VBbGxvY2F0b3I7CitzdGF0aWMgU3Bh
biBzYW1wbGVkT2JqZWN0czsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gTWFwIGZyb20gcGFn
ZS1pZCB0byBwZXItcGFnZSBkYXRhCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIC8vIFdlIHVzZSBQ
YWdlTWFwMjw+IGZvciAzMi1iaXQgYW5kIFBhZ2VNYXAzPD4gZm9yIDY0LWJpdCBtYWNoaW5lcy4K
LS8vIFdlIGFsc28gdXNlIGEgc2ltcGxlIG9uZS1sZXZlbCBjYWNoZSBmb3IgaG90IFBhZ2VJRC10
by1zaXplY2xhc3MgbWFwcGluZ3MsCi0vLyBiZWNhdXNlIHNvbWV0aW1lcyB0aGUgc2l6ZWNsYXNz
IGlzIGFsbCB0aGUgaW5mb3JtYXRpb24gd2UgbmVlZC4KKy8vIFdlIGFsc28gdXNlIGEgc2ltcGxl
IG9uZS1sZXZlbCBjYWNoZSBmb3IgaG90IFBhZ2VJRC10by1zaXplQ2xhc3MgbWFwcGluZ3MsCisv
LyBiZWNhdXNlIHNvbWV0aW1lcyB0aGUgc2l6ZUNsYXNzIGlzIGFsbCB0aGUgaW5mb3JtYXRpb24g
d2UgbmVlZC4KIAogLy8gU2VsZWN0b3IgY2xhc3MgLS0gZ2VuZXJhbCBzZWxlY3RvciB1c2VzIDMt
bGV2ZWwgbWFwCiB0ZW1wbGF0ZSA8aW50IEJJVFM+IGNsYXNzIE1hcFNlbGVjdG9yIHsKLSBwdWJs
aWM6Ci0gIHR5cGVkZWYgVENNYWxsb2NfUGFnZU1hcDM8QklUUy1rUGFnZVNoaWZ0PiBUeXBlOwot
ICB0eXBlZGVmIFBhY2tlZENhY2hlPEJJVFMsIHVpbnQ2NF90PiBDYWNoZVR5cGU7CitwdWJsaWM6
CisgICAgdHlwZWRlZiBUQ01hbGxvY19QYWdlTWFwMzxCSVRTLWtQYWdlU2hpZnQ+IFR5cGU7Cisg
ICAgdHlwZWRlZiBQYWNrZWRDYWNoZTxCSVRTLCB1aW50NjRfdD4gQ2FjaGVUeXBlOwogfTsKIAog
I2lmIGRlZmluZWQoV1RGX0NIQU5HRVMpCkBAIC0xMjQ4LDI0ICsxMjY0LDI0IEBAIHN0YXRpYyBj
b25zdCBzaXplX3Qga0JpdHNVbnVzZWRPbjY0Qml0ID0KIAogLy8gQSB0aHJlZS1sZXZlbCBtYXAg
Zm9yIDY0LWJpdCBtYWNoaW5lcwogdGVtcGxhdGUgPD4gY2xhc3MgTWFwU2VsZWN0b3I8NjQ+IHsK
LSBwdWJsaWM6Ci0gIHR5cGVkZWYgVENNYWxsb2NfUGFnZU1hcDM8NjQgLSBrUGFnZVNoaWZ0IC0g
a0JpdHNVbnVzZWRPbjY0Qml0PiBUeXBlOwotICB0eXBlZGVmIFBhY2tlZENhY2hlPDY0LCB1aW50
NjRfdD4gQ2FjaGVUeXBlOworcHVibGljOgorICAgIHR5cGVkZWYgVENNYWxsb2NfUGFnZU1hcDM8
NjQgLSBrUGFnZVNoaWZ0IC0ga0JpdHNVbnVzZWRPbjY0Qml0PiBUeXBlOworICAgIHR5cGVkZWYg
UGFja2VkQ2FjaGU8NjQsIHVpbnQ2NF90PiBDYWNoZVR5cGU7CiB9OwogI2VuZGlmCiAKIC8vIEEg
dHdvLWxldmVsIG1hcCBmb3IgMzItYml0IG1hY2hpbmVzCiB0ZW1wbGF0ZSA8PiBjbGFzcyBNYXBT
ZWxlY3RvcjwzMj4gewotIHB1YmxpYzoKLSAgdHlwZWRlZiBUQ01hbGxvY19QYWdlTWFwMjwzMiAt
IGtQYWdlU2hpZnQ+IFR5cGU7Ci0gIHR5cGVkZWYgUGFja2VkQ2FjaGU8MzIgLSBrUGFnZVNoaWZ0
LCB1aW50MTZfdD4gQ2FjaGVUeXBlOworcHVibGljOgorICAgIHR5cGVkZWYgVENNYWxsb2NfUGFn
ZU1hcDI8MzIgLSBrUGFnZVNoaWZ0PiBUeXBlOworICAgIHR5cGVkZWYgUGFja2VkQ2FjaGU8MzIg
LSBrUGFnZVNoaWZ0LCB1aW50MTZfdD4gQ2FjaGVUeXBlOwogfTsKIAogLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogLy8gUGFnZS1sZXZlbCBhbGxvY2F0b3IKIC8vICAqIEVhZ2VyIGNvYWxlc2NpbmcKIC8v
Ci0vLyBIZWFwIGZvciBwYWdlLWxldmVsIGFsbG9jYXRpb24uICBXZSBhbGxvdyBhbGxvY2F0aW5n
IGFuZCBmcmVlaW5nIGEKKy8vIEhlYXAgZm9yIHBhZ2UtbGV2ZWwgYWxsb2NhdGlvbi4gV2UgYWxs
b3cgYWxsb2NhdGluZyBhbmQgZnJlZWluZyBhCiAvLyBjb250aWd1b3VzIHJ1bnMgb2YgcGFnZXMg
KGNhbGxlZCBhICJzcGFuIikuCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTEyNzQsMTIgKzEy
OTAsMTIgQEAgdGVtcGxhdGUgPD4gY2xhc3MgTWFwU2VsZWN0b3I8MzI+IHsKIC8vIHRoZSBjZW50
cmFsIGNhY2hlIG9yIGFueSB0aHJlYWQgY2FjaGVzLiBXZSB1c2UgYSBiYWNrZ3JvdW5kIHRocmVh
ZCB0bwogLy8gcGVyaW9kaWNhbGx5IHNjYW4gdGhlIGZyZWUgbGlzdCBhbmQgcmVsZWFzZSBhIHBl
cmNlbnRhZ2Ugb2YgaXQgYmFjayB0byB0aGUgT1MuCiAKLS8vIElmIGZyZWVfY29tbWl0dGVkX3Bh
Z2VzXyBleGNlZWRzIGtNaW5pbXVtRnJlZUNvbW1pdHRlZFBhZ2VDb3VudCwgdGhlCisvLyBJZiBm
cmVlQ29tbWl0dGVkUGFnZXMgZXhjZWVkcyBrTWluaW11bUZyZWVDb21taXR0ZWRQYWdlQ291bnQs
IHRoZQogLy8gYmFja2dyb3VuZCB0aHJlYWQ6CiAvLyAgICAgLSB3YWtlcyB1cAogLy8gICAgIC0g
cGF1c2VzIGZvciBrU2NhdmVuZ2VEZWxheUluU2Vjb25kcwogLy8gICAgIC0gcmV0dXJucyB0byB0
aGUgT1MgYSBwZXJjZW50YWdlIG9mIHRoZSBtZW1vcnkgdGhhdCByZW1haW5lZCB1bnVzZWQgZHVy
aW5nCi0vLyAgICAgICB0aGF0IHBhdXNlIChrU2NhdmVuZ2VQZXJjZW50YWdlICogbWluX2ZyZWVf
Y29tbWl0dGVkX3BhZ2VzX3NpbmNlX2xhc3Rfc2NhdmVuZ2VfKQorLy8gICAgICAgdGhhdCBwYXVz
ZSAoa1NjYXZlbmdlUGVyY2VudGFnZSAqIG1pbkZyZWVDb21taXR0ZWRQYWdlc1NpbmNlTGFzdFNj
YXZlbmdlKQogLy8gVGhlIGdvYWwgb2YgdGhpcyBzdHJhdGVneSBpcyB0byByZWR1Y2UgbWVtb3J5
IHByZXNzdXJlIGluIGEgdGltZWx5IGZhc2hpb24KIC8vIHdoaWxlIGF2b2lkaW5nIHRocmFzaGlu
ZyB0aGUgT1MgYWxsb2NhdG9yLgogCkBAIC0xMjk0LDIzMiArMTMxMCwyNDEgQEAgc3RhdGljIGNv
bnN0IGZsb2F0IGtTY2F2ZW5nZVBlcmNlbnRhZ2UgPQogLy8gbnVtYmVyIG9mIHNwYW4gbGlzdHMg
dG8ga2VlcCBzcGFucyBpbiB3aGVuIG1lbW9yeSBpcyByZXR1cm5lZC4KIHN0YXRpYyBjb25zdCBp
bnQga01pblNwYW5MaXN0c1dpdGhTcGFucyA9IDMyOwogCi0vLyBOdW1iZXIgb2YgZnJlZSBjb21t
aXR0ZWQgcGFnZXMgdGhhdCB3ZSB3YW50IHRvIGtlZXAgYXJvdW5kLiAgVGhlIG1pbmltdW0gbnVt
YmVyIG9mIHBhZ2VzIHVzZWQgd2hlbiB0aGVyZQotLy8gaXMgMSBzcGFuIGluIGVhY2ggb2YgdGhl
IGZpcnN0IGtNaW5TcGFuTGlzdHNXaXRoU3BhbnMgc3Bhbmxpc3RzLiAgQ3VycmVudGx5IDUyOCBw
YWdlcy4KKy8vIE51bWJlciBvZiBmcmVlIGNvbW1pdHRlZCBwYWdlcyB0aGF0IHdlIHdhbnQgdG8g
a2VlcCBhcm91bmQuIFRoZSBtaW5pbXVtIG51bWJlciBvZiBwYWdlcyB1c2VkIHdoZW4gdGhlcmUK
Ky8vIGlzIDEgc3BhbiBpbiBlYWNoIG9mIHRoZSBmaXJzdCBrTWluU3Bhbkxpc3RzV2l0aFNwYW5z
IHNwYW5saXN0cy4gQ3VycmVudGx5IDUyOCBwYWdlcy4KIHN0YXRpYyBjb25zdCBzaXplX3Qga01p
bmltdW1GcmVlQ29tbWl0dGVkUGFnZUNvdW50ID0ga01pblNwYW5MaXN0c1dpdGhTcGFucyAqICgo
MS4wZitrTWluU3Bhbkxpc3RzV2l0aFNwYW5zKSAvIDIuMGYpOwogCiAjZW5kaWYKIAotc3RhdGlj
IFNwaW5Mb2NrIHBhZ2VoZWFwX2xvY2sgPSBTUElOTE9DS19JTklUSUFMSVpFUjsKK3N0YXRpYyBT
cGluTG9jayBwYWdlaGVhcExvY2sgPSBTUElOTE9DS19JTklUSUFMSVpFUjsKIAotY2xhc3MgVENN
YWxsb2NfUGFnZUhlYXAgewotIHB1YmxpYzoKLSAgdm9pZCBpbml0KCk7CitjbGFzcyBUQ01hbGxv
Y1BhZ2VIZWFwIHsKK3B1YmxpYzoKKyAgICB2b2lkIGluaXQoKTsKIAotICAvLyBBbGxvY2F0ZSBh
IHJ1biBvZiAibiIgcGFnZXMuICBSZXR1cm5zIHplcm8gaWYgb3V0IG9mIG1lbW9yeS4KLSAgU3Bh
biogTmV3KExlbmd0aCBuKTsKKyAgICAvLyBBbGxvY2F0ZSBhIHJ1biBvZiAibiIgcGFnZXMuIFJl
dHVybnMgemVybyBpZiBvdXQgb2YgbWVtb3J5LgorICAgIFNwYW4qIE5ldyhMZW5ndGgpOwogCi0g
IC8vIERlbGV0ZSB0aGUgc3BhbiAiW3AsIHArbi0xXSIuCi0gIC8vIFJFUVVJUkVTOiBzcGFuIHdh
cyByZXR1cm5lZCBieSBlYXJsaWVyIGNhbGwgdG8gTmV3KCkgYW5kCi0gIC8vICAgICAgICAgICBo
YXMgbm90IHlldCBiZWVuIGRlbGV0ZWQuCi0gIHZvaWQgRGVsZXRlKFNwYW4qIHNwYW4pOwotCi0g
IC8vIE1hcmsgYW4gYWxsb2NhdGVkIHNwYW4gYXMgYmVpbmcgdXNlZCBmb3Igc21hbGwgb2JqZWN0
cyBvZiB0aGUKLSAgLy8gc3BlY2lmaWVkIHNpemUtY2xhc3MuCi0gIC8vIFJFUVVJUkVTOiBzcGFu
IHdhcyByZXR1cm5lZCBieSBhbiBlYXJsaWVyIGNhbGwgdG8gTmV3KCkKLSAgLy8gICAgICAgICAg
IGFuZCBoYXMgbm90IHlldCBiZWVuIGRlbGV0ZWQuCi0gIHZvaWQgUmVnaXN0ZXJTaXplQ2xhc3Mo
U3Bhbiogc3Bhbiwgc2l6ZV90IHNjKTsKLQotICAvLyBTcGxpdCBhbiBhbGxvY2F0ZWQgc3BhbiBp
bnRvIHR3byBzcGFuczogb25lIG9mIGxlbmd0aCAibiIgcGFnZXMKLSAgLy8gZm9sbG93ZWQgYnkg
YW5vdGhlciBzcGFuIG9mIGxlbmd0aCAic3Bhbi0+bGVuZ3RoIC0gbiIgcGFnZXMuCi0gIC8vIE1v
ZGlmaWVzICIqc3BhbiIgdG8gcG9pbnQgdG8gdGhlIGZpcnN0IHNwYW4gb2YgbGVuZ3RoICJuIiBw
YWdlcy4KLSAgLy8gUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIHNlY29uZCBzcGFuLgotICAvLwot
ICAvLyBSRVFVSVJFUzogIjAgPCBuIDwgc3Bhbi0+bGVuZ3RoIgotICAvLyBSRVFVSVJFUzogIXNw
YW4tPmZyZWUKLSAgLy8gUkVRVUlSRVM6IHNwYW4tPnNpemVjbGFzcyA9PSAwCi0gIFNwYW4qIFNw
bGl0KFNwYW4qIHNwYW4sIExlbmd0aCBuKTsKLQotICAvLyBSZXR1cm4gdGhlIGRlc2NyaXB0b3Ig
Zm9yIHRoZSBzcGVjaWZpZWQgcGFnZS4KLSAgaW5saW5lIFNwYW4qIEdldERlc2NyaXB0b3IoUGFn
ZUlEIHApIGNvbnN0IHsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxTcGFuKj4ocGFnZW1h
cF8uZ2V0KHApKTsKLSAgfQorICAgIC8vIERlbGV0ZSB0aGUgc3BhbiAiW3AsIHArbi0xXSIuCisg
ICAgLy8gUkVRVUlSRVM6IHNwYW4gd2FzIHJldHVybmVkIGJ5IGVhcmxpZXIgY2FsbCB0byBOZXco
KSBhbmQKKyAgICAvLyAgICAgICAgICAgaGFzIG5vdCB5ZXQgYmVlbiBkZWxldGVkLgorICAgIHZv
aWQgRGVsZXRlKFNwYW4qKTsKKworICAgIC8vIE1hcmsgYW4gYWxsb2NhdGVkIHNwYW4gYXMgYmVp
bmcgdXNlZCBmb3Igc21hbGwgb2JqZWN0cyBvZiB0aGUKKyAgICAvLyBzcGVjaWZpZWQgc2l6ZS1j
bGFzcy4KKyAgICAvLyBSRVFVSVJFUzogc3BhbiB3YXMgcmV0dXJuZWQgYnkgYW4gZWFybGllciBj
YWxsIHRvIE5ldygpCisgICAgLy8gICAgICAgICAgIGFuZCBoYXMgbm90IHlldCBiZWVuIGRlbGV0
ZWQuCisgICAgdm9pZCBSZWdpc3RlclNpemVDbGFzcyhTcGFuKiwgc2l6ZV90IHNjKTsKKworICAg
IC8vIFNwbGl0IGFuIGFsbG9jYXRlZCBzcGFuIGludG8gdHdvIHNwYW5zOiBvbmUgb2YgbGVuZ3Ro
ICJuIiBwYWdlcworICAgIC8vIGZvbGxvd2VkIGJ5IGFub3RoZXIgc3BhbiBvZiBsZW5ndGggInNw
YW4tPmxlbmd0aCAtIG4iIHBhZ2VzLgorICAgIC8vIE1vZGlmaWVzICIqc3BhbiIgdG8gcG9pbnQg
dG8gdGhlIGZpcnN0IHNwYW4gb2YgbGVuZ3RoICJuIiBwYWdlcy4KKyAgICAvLyBSZXR1cm5zIGEg
cG9pbnRlciB0byB0aGUgc2Vjb25kIHNwYW4uCisgICAgLy8KKyAgICAvLyBSRVFVSVJFUzogIjAg
PCBuIDwgc3Bhbi0+bGVuZ3RoIgorICAgIC8vIFJFUVVJUkVTOiAhc3Bhbi0+ZnJlZQorICAgIC8v
IFJFUVVJUkVTOiBzcGFuLT5zaXplQ2xhc3MgPT0gMAorICAgIFNwYW4qIFNwbGl0KFNwYW4qLCBM
ZW5ndGgpOworCisgICAgLy8gUmV0dXJuIHRoZSBkZXNjcmlwdG9yIGZvciB0aGUgc3BlY2lmaWVk
IHBhZ2UuCisgICAgaW5saW5lIFNwYW4qIEdldERlc2NyaXB0b3IoUGFnZUlEIHApIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxTcGFuKj4ocGFnZU1hcC5nZXQo
cCkpOworICAgIH0KIAogI2lmZGVmIFdURl9DSEFOR0VTCi0gIGlubGluZSBTcGFuKiBHZXREZXNj
cmlwdG9yRW5zdXJlU2FmZShQYWdlSUQgcCkKLSAgewotICAgICAgcGFnZW1hcF8uRW5zdXJlKHAs
IDEpOwotICAgICAgcmV0dXJuIEdldERlc2NyaXB0b3IocCk7Ci0gIH0KKyAgICBpbmxpbmUgU3Bh
biogR2V0RGVzY3JpcHRvckVuc3VyZVNhZmUoUGFnZUlEIHApCisgICAgeworICAgICAgICBwYWdl
TWFwLkVuc3VyZShwLCAxKTsKKyAgICAgICAgcmV0dXJuIEdldERlc2NyaXB0b3IocCk7CisgICAg
fQogICAgIAotICBzaXplX3QgUmV0dXJuZWRCeXRlcygpIGNvbnN0OworICAgIHNpemVfdCBSZXR1
cm5lZEJ5dGVzKCkgY29uc3Q7CiAjZW5kaWYKIAotICAvLyBEdW1wIHN0YXRlIHRvIHN0ZGVycgor
ICAgIC8vIER1bXAgc3RhdGUgdG8gc3RkZXJyCiAjaWZuZGVmIFdURl9DSEFOR0VTCi0gIHZvaWQg
RHVtcChUQ01hbGxvY19QcmludGVyKiBvdXQpOworICAgIHZvaWQgRHVtcChUQ01hbGxvY19Qcmlu
dGVyKiBvdXQpOwogI2VuZGlmCiAKLSAgLy8gUmV0dXJuIG51bWJlciBvZiBieXRlcyBhbGxvY2F0
ZWQgZnJvbSBzeXN0ZW0KLSAgaW5saW5lIHVpbnQ2NF90IFN5c3RlbUJ5dGVzKCkgY29uc3QgeyBy
ZXR1cm4gc3lzdGVtX2J5dGVzXzsgfQorICAgIC8vIFJldHVybiBudW1iZXIgb2YgYnl0ZXMgYWxs
b2NhdGVkIGZyb20gc3lzdGVtCisgICAgaW5saW5lIHVpbnQ2NF90IFN5c3RlbUJ5dGVzKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBzeXN0ZW1CeXRlczsKKyAgICB9CiAKLSAgLy8gUmV0
dXJuIG51bWJlciBvZiBmcmVlIGJ5dGVzIGluIGhlYXAKLSAgdWludDY0X3QgRnJlZUJ5dGVzKCkg
Y29uc3QgewotICAgIHJldHVybiAoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGZyZWVfcGFnZXNfKSA8
PCBrUGFnZVNoaWZ0KTsKLSAgfQorICAgIC8vIFJldHVybiBudW1iZXIgb2YgZnJlZSBieXRlcyBp
biBoZWFwCisgICAgdWludDY0X3QgRnJlZUJ5dGVzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiAoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGZyZWVQYWdlcykgPDwga1BhZ2VTaGlmdCk7Cisg
ICAgfQogCi0gIGJvb2wgQ2hlY2soKTsKLSAgc2l6ZV90IENoZWNrTGlzdChTcGFuKiBsaXN0LCBM
ZW5ndGggbWluX3BhZ2VzLCBMZW5ndGggbWF4X3BhZ2VzLCBib29sIGRlY29tbWl0dGVkKTsKKyAg
ICBib29sIENoZWNrKCk7CisgICAgc2l6ZV90IENoZWNrTGlzdChTcGFuKiBsaXN0LCBMZW5ndGgg
bWluUGFnZXMsIExlbmd0aCBtYXhQYWdlcywgYm9vbCBkZWNvbW1pdHRlZCk7CiAKLSAgLy8gUmVs
ZWFzZSBhbGwgcGFnZXMgb24gdGhlIGZyZWUgbGlzdCBmb3IgcmV1c2UgYnkgdGhlIE9TOgotICB2
b2lkIFJlbGVhc2VGcmVlUGFnZXMoKTsKLSAgdm9pZCBSZWxlYXNlRnJlZUxpc3QoU3BhbiosIFNw
YW4qKTsKLQotICAvLyBSZXR1cm4gMCBpZiB3ZSBoYXZlIG5vIGluZm9ybWF0aW9uLCBvciBlbHNl
IHRoZSBjb3JyZWN0IHNpemVjbGFzcyBmb3IgcC4KLSAgLy8gUmVhZHMgYW5kIHdyaXRlcyB0byBw
YWdlbWFwX2NhY2hlXyBkbyBub3QgcmVxdWlyZSBsb2NraW5nLgotICAvLyBUaGUgZW50cmllcyBh
cmUgNjQgYml0cyBvbiA2NC1iaXQgaGFyZHdhcmUgYW5kIDE2IGJpdHMgb24KLSAgLy8gMzItYml0
IGhhcmR3YXJlLCBhbmQgd2UgZG9uJ3QgbWluZCByYWNpbmVzcyBhcyBsb25nIGFzIGVhY2ggcmVh
ZCBvZgotICAvLyBhbiBlbnRyeSB5aWVsZHMgYSB2YWxpZCBlbnRyeSwgbm90IGEgcGFydGlhbGx5
IHVwZGF0ZWQgZW50cnkuCi0gIHNpemVfdCBHZXRTaXplQ2xhc3NJZkNhY2hlZChQYWdlSUQgcCkg
Y29uc3QgewotICAgIHJldHVybiBwYWdlbWFwX2NhY2hlXy5HZXRPckRlZmF1bHQocCwgMCk7Ci0g
IH0KLSAgdm9pZCBDYWNoZVNpemVDbGFzcyhQYWdlSUQgcCwgc2l6ZV90IGNsKSBjb25zdCB7IHBh
Z2VtYXBfY2FjaGVfLlB1dChwLCBjbCk7IH0KKyAgICAvLyBSZWxlYXNlIGFsbCBwYWdlcyBvbiB0
aGUgZnJlZSBsaXN0IGZvciByZXVzZSBieSB0aGUgT1M6CisgICAgdm9pZCBSZWxlYXNlRnJlZVBh
Z2VzKCk7CisgICAgdm9pZCBSZWxlYXNlRnJlZUxpc3QoU3BhbiosIFNwYW4qKTsKKworICAgIC8v
IFJldHVybiAwIGlmIHdlIGhhdmUgbm8gaW5mb3JtYXRpb24sIG9yIGVsc2UgdGhlIGNvcnJlY3Qg
c2l6ZUNsYXNzIGZvciBwLgorICAgIC8vIFJlYWRzIGFuZCB3cml0ZXMgdG8gcGFnZU1hcENhY2hl
IGRvIG5vdCByZXF1aXJlIGxvY2tpbmcuCisgICAgLy8gVGhlIGVudHJpZXMgYXJlIDY0IGJpdHMg
b24gNjQtYml0IGhhcmR3YXJlIGFuZCAxNiBiaXRzIG9uCisgICAgLy8gMzItYml0IGhhcmR3YXJl
LCBhbmQgd2UgZG9uJ3QgbWluZCByYWNpbmVzcyBhcyBsb25nIGFzIGVhY2ggcmVhZCBvZgorICAg
IC8vIGFuIGVudHJ5IHlpZWxkcyBhIHZhbGlkIGVudHJ5LCBub3QgYSBwYXJ0aWFsbHkgdXBkYXRl
ZCBlbnRyeS4KKyAgICBzaXplX3QgR2V0U2l6ZUNsYXNzSWZDYWNoZWQoUGFnZUlEIHApIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gcGFnZU1hcENhY2hlLkdldE9yRGVmYXVsdChwLCAwKTsK
KyAgICB9CisgICAgdm9pZCBDYWNoZVNpemVDbGFzcyhQYWdlSUQgcCwgc2l6ZV90IGNsKSBjb25z
dAorICAgIHsKKyAgICAgICAgcGFnZU1hcENhY2hlLlB1dChwLCBjbCk7CisgICAgfQogCi0gcHJp
dmF0ZToKLSAgLy8gUGljayB0aGUgYXBwcm9wcmlhdGUgbWFwIGFuZCBjYWNoZSB0eXBlcyBiYXNl
ZCBvbiBwb2ludGVyIHNpemUKLSAgdHlwZWRlZiBNYXBTZWxlY3Rvcjw4KnNpemVvZih1aW50cHRy
X3QpPjo6VHlwZSBQYWdlTWFwOwotICB0eXBlZGVmIE1hcFNlbGVjdG9yPDgqc2l6ZW9mKHVpbnRw
dHJfdCk+OjpDYWNoZVR5cGUgUGFnZU1hcENhY2hlOwotICBQYWdlTWFwIHBhZ2VtYXBfOwotICBt
dXRhYmxlIFBhZ2VNYXBDYWNoZSBwYWdlbWFwX2NhY2hlXzsKLQotICAvLyBXZSBzZWdyZWdhdGUg
c3BhbnMgb2YgYSBnaXZlbiBzaXplIGludG8gdHdvIGNpcmN1bGFyIGxpbmtlZAotICAvLyBsaXN0
czogb25lIGZvciBub3JtYWwgc3BhbnMsIGFuZCBvbmUgZm9yIHNwYW5zIHdob3NlIG1lbW9yeQot
ICAvLyBoYXMgYmVlbiByZXR1cm5lZCB0byB0aGUgc3lzdGVtLgotICBzdHJ1Y3QgU3Bhbkxpc3Qg
ewotICAgIFNwYW4gICAgICAgIG5vcm1hbDsKLSAgICBTcGFuICAgICAgICByZXR1cm5lZDsKLSAg
fTsKLQotICAvLyBMaXN0IG9mIGZyZWUgc3BhbnMgb2YgbGVuZ3RoID49IGtNYXhQYWdlcwotICBT
cGFuTGlzdCBsYXJnZV87Citwcml2YXRlOgorICAgIC8vIFBpY2sgdGhlIGFwcHJvcHJpYXRlIG1h
cCBhbmQgY2FjaGUgdHlwZXMgYmFzZWQgb24gcG9pbnRlciBzaXplCisgICAgdHlwZWRlZiBNYXBT
ZWxlY3Rvcjw4KnNpemVvZih1aW50cHRyX3QpPjo6VHlwZSBQYWdlTWFwOworICAgIHR5cGVkZWYg
TWFwU2VsZWN0b3I8OCpzaXplb2YodWludHB0cl90KT46OkNhY2hlVHlwZSBQYWdlTWFwQ2FjaGU7
CisgICAgUGFnZU1hcCBwYWdlTWFwOworICAgIG11dGFibGUgUGFnZU1hcENhY2hlIHBhZ2VNYXBD
YWNoZTsKKworICAgIC8vIFdlIHNlZ3JlZ2F0ZSBzcGFucyBvZiBhIGdpdmVuIHNpemUgaW50byB0
d28gY2lyY3VsYXIgbGlua2VkCisgICAgLy8gbGlzdHM6IG9uZSBmb3Igbm9ybWFsIHNwYW5zLCBh
bmQgb25lIGZvciBzcGFucyB3aG9zZSBtZW1vcnkKKyAgICAvLyBoYXMgYmVlbiByZXR1cm5lZCB0
byB0aGUgc3lzdGVtLgorICAgIHN0cnVjdCBTcGFuTGlzdCB7CisgICAgICAgIFNwYW4gbm9ybWFs
OworICAgICAgICBTcGFuIHJldHVybmVkOworICAgIH07CisKKyAgICAvLyBMaXN0IG9mIGZyZWUg
c3BhbnMgb2YgbGVuZ3RoID49IGtNYXhQYWdlcworICAgIFNwYW5MaXN0IGxhcmdlOwogCi0gIC8v
IEFycmF5IG1hcHBpbmcgZnJvbSBzcGFuIGxlbmd0aCB0byBhIGRvdWJseSBsaW5rZWQgbGlzdCBv
ZiBmcmVlIHNwYW5zCi0gIFNwYW5MaXN0IGZyZWVfW2tNYXhQYWdlc107CisgICAgLy8gQXJyYXkg
bWFwcGluZyBmcm9tIHNwYW4gbGVuZ3RoIHRvIGEgZG91Ymx5IGxpbmtlZCBsaXN0IG9mIGZyZWUg
c3BhbnMKKyAgICBTcGFuTGlzdCBmcmVlU3Bhbkxpc3Rba01heFBhZ2VzXTsKIAotICAvLyBOdW1i
ZXIgb2YgcGFnZXMga2VwdCBpbiBmcmVlIGxpc3RzCi0gIHVpbnRwdHJfdCBmcmVlX3BhZ2VzXzsK
KyAgICAvLyBOdW1iZXIgb2YgcGFnZXMga2VwdCBpbiBmcmVlIGxpc3RzCisgICAgdWludHB0cl90
IGZyZWVQYWdlczsKIAotICAvLyBCeXRlcyBhbGxvY2F0ZWQgZnJvbSBzeXN0ZW0KLSAgdWludDY0
X3Qgc3lzdGVtX2J5dGVzXzsKKyAgICAvLyBCeXRlcyBhbGxvY2F0ZWQgZnJvbSBzeXN0ZW0KKyAg
ICB1aW50NjRfdCBzeXN0ZW1CeXRlczsKIAogI2lmIFVTRV9CQUNLR1JPVU5EX1RIUkVBRF9UT19T
Q0FWRU5HRV9NRU1PUlkKLSAgLy8gTnVtYmVyIG9mIHBhZ2VzIGtlcHQgaW4gZnJlZSBsaXN0cyB0
aGF0IGFyZSBzdGlsbCBjb21taXR0ZWQuCi0gIExlbmd0aCBmcmVlX2NvbW1pdHRlZF9wYWdlc187
CisgICAgLy8gTnVtYmVyIG9mIHBhZ2VzIGtlcHQgaW4gZnJlZSBsaXN0cyB0aGF0IGFyZSBzdGls
bCBjb21taXR0ZWQuCisgICAgTGVuZ3RoIGZyZWVDb21taXR0ZWRQYWdlczsKIAotICAvLyBNaW5p
bXVtIG51bWJlciBvZiBmcmVlIGNvbW1pdHRlZCBwYWdlcyBzaW5jZSBsYXN0IHNjYXZlbmdlLiAo
Q2FuIGJlIDAgaWYKLSAgLy8gd2UndmUgY29tbWl0dGVkIG5ldyBwYWdlcyBzaW5jZSB0aGUgbGFz
dCBzY2F2ZW5nZS4pCi0gIExlbmd0aCBtaW5fZnJlZV9jb21taXR0ZWRfcGFnZXNfc2luY2VfbGFz
dF9zY2F2ZW5nZV87Ci0jZW5kaWYKLQotICBib29sIEdyb3dIZWFwKExlbmd0aCBuKTsKLQotICAv
LyBSRVFVSVJFUyAgIHNwYW4tPmxlbmd0aCA+PSBuCi0gIC8vIFJlbW92ZSBzcGFuIGZyb20gaXRz
IGZyZWUgbGlzdCwgYW5kIG1vdmUgYW55IGxlZnRvdmVyIHBhcnQgb2YKLSAgLy8gc3BhbiBpbnRv
IGFwcHJvcHJpYXRlIGZyZWUgbGlzdHMuICBBbHNvIHVwZGF0ZSAic3BhbiIgdG8gaGF2ZQotICAv
LyBsZW5ndGggZXhhY3RseSAibiIgYW5kIG1hcmsgaXQgYXMgbm9uLWZyZWUgc28gaXQgY2FuIGJl
IHJldHVybmVkCi0gIC8vIHRvIHRoZSBjbGllbnQuCi0gIC8vCi0gIC8vICJyZWxlYXNlZCIgaXMg
dHJ1ZSBpZmYgInNwYW4iIHdhcyBmb3VuZCBvbiBhICJyZXR1cm5lZCIgbGlzdC4KLSAgdm9pZCBD
YXJ2ZShTcGFuKiBzcGFuLCBMZW5ndGggbiwgYm9vbCByZWxlYXNlZCk7Ci0KLSAgdm9pZCBSZWNv
cmRTcGFuKFNwYW4qIHNwYW4pIHsKLSAgICBwYWdlbWFwXy5zZXQoc3Bhbi0+c3RhcnQsIHNwYW4p
OwotICAgIGlmIChzcGFuLT5sZW5ndGggPiAxKSB7Ci0gICAgICBwYWdlbWFwXy5zZXQoc3Bhbi0+
c3RhcnQgKyBzcGFuLT5sZW5ndGggLSAxLCBzcGFuKTsKKyAgICAvLyBNaW5pbXVtIG51bWJlciBv
ZiBmcmVlIGNvbW1pdHRlZCBwYWdlcyBzaW5jZSBsYXN0IHNjYXZlbmdlLiAoQ2FuIGJlIDAgaWYK
KyAgICAvLyB3ZSd2ZSBjb21taXR0ZWQgbmV3IHBhZ2VzIHNpbmNlIHRoZSBsYXN0IHNjYXZlbmdl
LikKKyAgICBMZW5ndGggbWluRnJlZUNvbW1pdHRlZFBhZ2VzU2luY2VMYXN0U2NhdmVuZ2U7Cisj
ZW5kaWYKKworICAgIGJvb2wgR3Jvd0hlYXAoTGVuZ3RoKTsKKworICAgIC8vIFJFUVVJUkVTICAg
c3Bhbi0+bGVuZ3RoID49IG4KKyAgICAvLyBSZW1vdmUgc3BhbiBmcm9tIGl0cyBmcmVlIGxpc3Qs
IGFuZCBtb3ZlIGFueSBsZWZ0b3ZlciBwYXJ0IG9mCisgICAgLy8gc3BhbiBpbnRvIGFwcHJvcHJp
YXRlIGZyZWUgbGlzdHMuIEFsc28gdXBkYXRlICJzcGFuIiB0byBoYXZlCisgICAgLy8gbGVuZ3Ro
IGV4YWN0bHkgIm4iIGFuZCBtYXJrIGl0IGFzIG5vbi1mcmVlIHNvIGl0IGNhbiBiZSByZXR1cm5l
ZAorICAgIC8vIHRvIHRoZSBjbGllbnQuCisgICAgLy8KKyAgICAvLyAicmVsZWFzZWQiIGlzIHRy
dWUgaWZmICJzcGFuIiB3YXMgZm91bmQgb24gYSAicmV0dXJuZWQiIGxpc3QuCisgICAgdm9pZCBD
YXJ2ZShTcGFuKiwgTGVuZ3RoLCBib29sIHJlbGVhc2VkKTsKKworICAgIHZvaWQgUmVjb3JkU3Bh
bihTcGFuKiBzcGFuKQorICAgIHsKKyAgICAgICAgcGFnZU1hcC5zZXQoc3Bhbi0+c3RhcnQsIHNw
YW4pOworICAgICAgICBpZiAoc3Bhbi0+bGVuZ3RoID4gMSkKKyAgICAgICAgICAgIHBhZ2VNYXAu
c2V0KHNwYW4tPnN0YXJ0ICsgc3Bhbi0+bGVuZ3RoIC0gMSwgc3Bhbik7CiAgICAgfQotICB9CiAg
IAotICAgIC8vIEFsbG9jYXRlIGEgbGFyZ2Ugc3BhbiBvZiBsZW5ndGggPT0gbi4gIElmIHN1Y2Nl
c3NmdWwsIHJldHVybnMgYQotICAvLyBzcGFuIG9mIGV4YWN0bHkgdGhlIHNwZWNpZmllZCBsZW5n
dGguICBFbHNlLCByZXR1cm5zIE5VTEwuCi0gIFNwYW4qIEFsbG9jTGFyZ2UoTGVuZ3RoIG4pOwor
ICAgIC8vIEFsbG9jYXRlIGEgbGFyZ2Ugc3BhbiBvZiBsZW5ndGggPT0gbi4gSWYgc3VjY2Vzc2Z1
bCwgcmV0dXJucyBhCisgICAgLy8gc3BhbiBvZiBleGFjdGx5IHRoZSBzcGVjaWZpZWQgbGVuZ3Ro
LiBFbHNlLCByZXR1cm5zIDAuCisgICAgU3BhbiogQWxsb2NMYXJnZShMZW5ndGgpOwogCiAjaWYg
IVVTRV9CQUNLR1JPVU5EX1RIUkVBRF9UT19TQ0FWRU5HRV9NRU1PUlkKLSAgLy8gSW5jcmVtZW50
YWxseSByZWxlYXNlIHNvbWUgbWVtb3J5IHRvIHRoZSBzeXN0ZW0uCi0gIC8vIEluY3JlbWVudGFs
U2NhdmVuZ2UobikgaXMgY2FsbGVkIHdoZW5ldmVyIG4gcGFnZXMgYXJlIGZyZWVkLgotICB2b2lk
IEluY3JlbWVudGFsU2NhdmVuZ2UoTGVuZ3RoIG4pOworICAgIC8vIEluY3JlbWVudGFsbHkgcmVs
ZWFzZSBzb21lIG1lbW9yeSB0byB0aGUgc3lzdGVtLgorICAgIC8vIEluY3JlbWVudGFsU2NhdmVu
Z2UobikgaXMgY2FsbGVkIHdoZW5ldmVyIG4gcGFnZXMgYXJlIGZyZWVkLgorICAgIHZvaWQgSW5j
cmVtZW50YWxTY2F2ZW5nZShMZW5ndGgpOwogI2VuZGlmCiAKLSAgLy8gTnVtYmVyIG9mIHBhZ2Vz
IHRvIGRlYWxsb2NhdGUgYmVmb3JlIGRvaW5nIG1vcmUgc2NhdmVuZ2luZwotICBpbnQ2NF90IHNj
YXZlbmdlX2NvdW50ZXJfOworICAgIC8vIE51bWJlciBvZiBwYWdlcyB0byBkZWFsbG9jYXRlIGJl
Zm9yZSBkb2luZyBtb3JlIHNjYXZlbmdpbmcKKyAgICBpbnQ2NF90IHNjYXZlbmdlQ291bnRlcjsK
IAotICAvLyBJbmRleCBvZiBsYXN0IGZyZWUgbGlzdCB3ZSBzY2F2ZW5nZWQKLSAgc2l6ZV90IHNj
YXZlbmdlX2luZGV4XzsKKyAgICAvLyBJbmRleCBvZiBsYXN0IGZyZWUgbGlzdCB3ZSBzY2F2ZW5n
ZWQKKyAgICBzaXplX3Qgc2NhdmVuZ2VJbmRleDsKICAgCiAjaWYgZGVmaW5lZChXVEZfQ0hBTkdF
UykgJiYgT1MoREFSV0lOKQotICBmcmllbmQgY2xhc3MgRmFzdE1hbGxvY1pvbmU7CisgICAgZnJp
ZW5kIGNsYXNzIEZhc3RNYWxsb2Nab25lOwogI2VuZGlmCiAKICNpZiBVU0VfQkFDS0dST1VORF9U
SFJFQURfVE9fU0NBVkVOR0VfTUVNT1JZCi0gIHZvaWQgaW5pdGlhbGl6ZVNjYXZlbmdlcigpOwot
ICBBTFdBWVNfSU5MSU5FIHZvaWQgc2lnbmFsU2NhdmVuZ2VyKCk7Ci0gIHZvaWQgc2NhdmVuZ2Uo
KTsKLSAgQUxXQVlTX0lOTElORSBib29sIHNob3VsZFNjYXZlbmdlKCkgY29uc3Q7CisgICAgdm9p
ZCBpbml0aWFsaXplU2NhdmVuZ2VyKCk7CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNpZ25hbFNj
YXZlbmdlcigpOworICAgIHZvaWQgc2NhdmVuZ2UoKTsKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wg
c2hvdWxkU2NhdmVuZ2UoKSBjb25zdDsKIAogI2lmIEhBVkUoRElTUEFUQ0hfSCkgfHwgT1MoV0lO
RE9XUykKLSAgdm9pZCBwZXJpb2RpY1NjYXZlbmdlKCk7Ci0gIEFMV0FZU19JTkxJTkUgYm9vbCBp
c1NjYXZlbmdlclN1c3BlbmRlZCgpOwotICBBTFdBWVNfSU5MSU5FIHZvaWQgc2NoZWR1bGVTY2F2
ZW5nZXIoKTsKLSAgQUxXQVlTX0lOTElORSB2b2lkIHJlc2NoZWR1bGVTY2F2ZW5nZXIoKTsKLSAg
QUxXQVlTX0lOTElORSB2b2lkIHN1c3BlbmRTY2F2ZW5nZXIoKTsKKyAgICB2b2lkIHBlcmlvZGlj
U2NhdmVuZ2UoKTsKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNTY2F2ZW5nZXJTdXNwZW5kZWQo
KTsKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2NoZWR1bGVTY2F2ZW5nZXIoKTsKKyAgICBBTFdB
WVNfSU5MSU5FIHZvaWQgcmVzY2hlZHVsZVNjYXZlbmdlcigpOworICAgIEFMV0FZU19JTkxJTkUg
dm9pZCBzdXNwZW5kU2NhdmVuZ2VyKCk7CiAjZW5kaWYKIAogI2lmIEhBVkUoRElTUEFUQ0hfSCkK
LSAgZGlzcGF0Y2hfcXVldWVfdCBtX3NjYXZlbmdlUXVldWU7Ci0gIGRpc3BhdGNoX3NvdXJjZV90
IG1fc2NhdmVuZ2VUaW1lcjsKLSAgYm9vbCBtX3NjYXZlbmdpbmdTdXNwZW5kZWQ7CisgICAgZGlz
cGF0Y2hfcXVldWVfdCBtX3NjYXZlbmdlUXVldWU7CisgICAgZGlzcGF0Y2hfc291cmNlX3QgbV9z
Y2F2ZW5nZVRpbWVyOworICAgIGJvb2wgbV9zY2F2ZW5naW5nU3VzcGVuZGVkOwogI2VsaWYgT1Mo
V0lORE9XUykKLSAgc3RhdGljIHZvaWQgQ0FMTEJBQ0sgc2NhdmVuZ2VyVGltZXJGaXJlZCh2b2lk
KiwgQk9PTEVBTik7Ci0gIEhBTkRMRSBtX3NjYXZlbmdlUXVldWVUaW1lcjsKKyAgICBzdGF0aWMg
dm9pZCBDQUxMQkFDSyBzY2F2ZW5nZXJUaW1lckZpcmVkKHZvaWQqLCBCT09MRUFOKTsKKyAgICBI
QU5ETEUgbV9zY2F2ZW5nZVF1ZXVlVGltZXI7CiAjZWxzZSAKLSAgc3RhdGljIE5PX1JFVFVSTl9X
SVRIX1ZBTFVFIHZvaWQqIHJ1blNjYXZlbmdlclRocmVhZCh2b2lkKik7Ci0gIE5PX1JFVFVSTiB2
b2lkIHNjYXZlbmdlclRocmVhZCgpOworICAgIHN0YXRpYyBOT19SRVRVUk5fV0lUSF9WQUxVRSB2
b2lkKiBydW5TY2F2ZW5nZXJUaHJlYWQodm9pZCopOworICAgIE5PX1JFVFVSTiB2b2lkIHNjYXZl
bmdlclRocmVhZCgpOwogCi0gIC8vIEtlZXBzIHRyYWNrIG9mIHdoZXRoZXIgdGhlIGJhY2tncm91
bmQgdGhyZWFkIGlzIGFjdGl2ZWx5IHNjYXZlbmdpbmcgbWVtb3J5IGV2ZXJ5IGtTY2F2ZW5nZURl
bGF5SW5TZWNvbmRzLCBvcgotICAvLyBpdCdzIGJsb2NrZWQgd2FpdGluZyBmb3IgbW9yZSBwYWdl
cyB0byBiZSBkZWxldGVkLgotICBib29sIG1fc2NhdmVuZ2VUaHJlYWRBY3RpdmU7CisgICAgLy8g
S2VlcHMgdHJhY2sgb2Ygd2hldGhlciB0aGUgYmFja2dyb3VuZCB0aHJlYWQgaXMgYWN0aXZlbHkg
c2NhdmVuZ2luZyBtZW1vcnkgZXZlcnkga1NjYXZlbmdlRGVsYXlJblNlY29uZHMsIG9yCisgICAg
Ly8gaXQncyBibG9ja2VkIHdhaXRpbmcgZm9yIG1vcmUgcGFnZXMgdG8gYmUgZGVsZXRlZC4KKyAg
ICBib29sIG1fc2NhdmVuZ2VUaHJlYWRBY3RpdmU7CiAKLSAgcHRocmVhZF9tdXRleF90IG1fc2Nh
dmVuZ2VNdXRleDsKLSAgcHRocmVhZF9jb25kX3QgbV9zY2F2ZW5nZUNvbmRpdGlvbjsKKyAgICBw
dGhyZWFkX211dGV4X3QgbV9zY2F2ZW5nZU11dGV4OworICAgIHB0aHJlYWRfY29uZF90IG1fc2Nh
dmVuZ2VDb25kaXRpb247CiAjZW5kaWYKIAotI2VuZGlmICAvLyBVU0VfQkFDS0dST1VORF9USFJF
QURfVE9fU0NBVkVOR0VfTUVNT1JZCisjZW5kaWYgLy8gVVNFX0JBQ0tHUk9VTkRfVEhSRUFEX1RP
X1NDQVZFTkdFX01FTU9SWQogfTsKIAotdm9pZCBUQ01hbGxvY19QYWdlSGVhcDo6aW5pdCgpCit2
b2lkIFRDTWFsbG9jUGFnZUhlYXA6OmluaXQoKQogewotICBwYWdlbWFwXy5pbml0KE1ldGFEYXRh
QWxsb2MpOwotICBwYWdlbWFwX2NhY2hlXyA9IFBhZ2VNYXBDYWNoZSgwKTsKLSAgZnJlZV9wYWdl
c18gPSAwOwotICBzeXN0ZW1fYnl0ZXNfID0gMDsKKyAgICBwYWdlTWFwLmluaXQoTWV0YURhdGFB
bGxvYyk7CisgICAgcGFnZU1hcENhY2hlID0gUGFnZU1hcENhY2hlKDApOworICAgIGZyZWVQYWdl
cyA9IDA7CisgICAgc3lzdGVtQnl0ZXMgPSAwOwogCiAjaWYgVVNFX0JBQ0tHUk9VTkRfVEhSRUFE
X1RPX1NDQVZFTkdFX01FTU9SWQotICBmcmVlX2NvbW1pdHRlZF9wYWdlc18gPSAwOwotICBtaW5f
ZnJlZV9jb21taXR0ZWRfcGFnZXNfc2luY2VfbGFzdF9zY2F2ZW5nZV8gPSAwOwotI2VuZGlmICAv
LyBVU0VfQkFDS0dST1VORF9USFJFQURfVE9fU0NBVkVOR0VfTUVNT1JZCi0KLSAgc2NhdmVuZ2Vf
Y291bnRlcl8gPSAwOwotICAvLyBTdGFydCBzY2F2ZW5naW5nIGF0IGtNYXhQYWdlcyBsaXN0Ci0g
IHNjYXZlbmdlX2luZGV4XyA9IGtNYXhQYWdlcy0xOwotICBDT01QSUxFX0FTU0VSVChrTnVtQ2xh
c3NlcyA8PSAoMSA8PCBQYWdlTWFwQ2FjaGU6OmtWYWx1ZWJpdHMpLCB2YWx1ZWJpdHMpOwotICBE
TExfSW5pdCgmbGFyZ2VfLm5vcm1hbCk7Ci0gIERMTF9Jbml0KCZsYXJnZV8ucmV0dXJuZWQpOwot
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtNYXhQYWdlczsgaSsrKSB7Ci0gICAgRExMX0luaXQo
JmZyZWVfW2ldLm5vcm1hbCk7Ci0gICAgRExMX0luaXQoJmZyZWVfW2ldLnJldHVybmVkKTsKLSAg
fQorICAgIGZyZWVDb21taXR0ZWRQYWdlcyA9IDA7CisgICAgbWluRnJlZUNvbW1pdHRlZFBhZ2Vz
U2luY2VMYXN0U2NhdmVuZ2UgPSAwOworI2VuZGlmIC8vIFVTRV9CQUNLR1JPVU5EX1RIUkVBRF9U
T19TQ0FWRU5HRV9NRU1PUlkKKworICAgIHNjYXZlbmdlQ291bnRlciA9IDA7CisgICAgLy8gU3Rh
cnQgc2NhdmVuZ2luZyBhdCBrTWF4UGFnZXMgbGlzdAorICAgIHNjYXZlbmdlSW5kZXggPSBrTWF4
UGFnZXMtMTsKKyAgICBDT01QSUxFX0FTU0VSVChrTnVtQ2xhc3NlcyA8PSAoMSA8PCBQYWdlTWFw
Q2FjaGU6OmtWYWx1ZWJpdHMpLCB2YWx1ZWJpdHMpOworICAgIERMTEluaXQoJmxhcmdlLm5vcm1h
bCk7CisgICAgRExMSW5pdCgmbGFyZ2UucmV0dXJuZWQpOworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwga01heFBhZ2VzOyBpKyspIHsKKyAgICAgICAgRExMSW5pdCgmZnJlZVNwYW5MaXN0W2ld
Lm5vcm1hbCk7CisgICAgICAgIERMTEluaXQoJmZyZWVTcGFuTGlzdFtpXS5yZXR1cm5lZCk7Cisg
ICAgfQogCiAjaWYgVVNFX0JBQ0tHUk9VTkRfVEhSRUFEX1RPX1NDQVZFTkdFX01FTU9SWQotICBp
bml0aWFsaXplU2NhdmVuZ2VyKCk7Ci0jZW5kaWYgIC8vIFVTRV9CQUNLR1JPVU5EX1RIUkVBRF9U
T19TQ0FWRU5HRV9NRU1PUlkKKyAgICBpbml0aWFsaXplU2NhdmVuZ2VyKCk7CisjZW5kaWYgLy8g
VVNFX0JBQ0tHUk9VTkRfVEhSRUFEX1RPX1NDQVZFTkdFX01FTU9SWQogfQogCiAjaWYgVVNFX0JB
Q0tHUk9VTkRfVEhSRUFEX1RPX1NDQVZFTkdFX01FTU9SWQogCiAjaWYgSEFWRShESVNQQVRDSF9I
KQogCi12b2lkIFRDTWFsbG9jX1BhZ2VIZWFwOjppbml0aWFsaXplU2NhdmVuZ2VyKCkKK3ZvaWQg
VENNYWxsb2NQYWdlSGVhcDo6aW5pdGlhbGl6ZVNjYXZlbmdlcigpCiB7Ci0gICAgbV9zY2F2ZW5n
ZVF1ZXVlID0gZGlzcGF0Y2hfcXVldWVfY3JlYXRlKCJjb20uYXBwbGUuSmF2YVNjcmlwdENvcmUu
RmFzdE1hbGxvY1NhdmVuZ2VyIiwgTlVMTCk7CisgICAgbV9zY2F2ZW5nZVF1ZXVlID0gZGlzcGF0
Y2hfcXVldWVfY3JlYXRlKCJjb20uYXBwbGUuSmF2YVNjcmlwdENvcmUuRmFzdE1hbGxvY1NhdmVu
Z2VyIiwgMCk7CiAgICAgbV9zY2F2ZW5nZVRpbWVyID0gZGlzcGF0Y2hfc291cmNlX2NyZWF0ZShE
SVNQQVRDSF9TT1VSQ0VfVFlQRV9USU1FUiwgMCwgMCwgbV9zY2F2ZW5nZVF1ZXVlKTsKICAgICBk
aXNwYXRjaF90aW1lX3Qgc3RhcnRUaW1lID0gZGlzcGF0Y2hfdGltZShESVNQQVRDSF9USU1FX05P
Vywga1NjYXZlbmdlRGVsYXlJblNlY29uZHMgKiBOU0VDX1BFUl9TRUMpOwogICAgIGRpc3BhdGNo
X3NvdXJjZV9zZXRfdGltZXIobV9zY2F2ZW5nZVRpbWVyLCBzdGFydFRpbWUsIGtTY2F2ZW5nZURl
bGF5SW5TZWNvbmRzICogTlNFQ19QRVJfU0VDLCAxMDAwICogTlNFQ19QRVJfVVNFQyk7CkBAIC0x
NTI3LDY3ICsxNTUyLDY3IEBAIHZvaWQgVENNYWxsb2NfUGFnZUhlYXA6OmluaXRpYWxpemVTY2F2
ZW4KICAgICBtX3NjYXZlbmdpbmdTdXNwZW5kZWQgPSB0cnVlOwogfQogCi1BTFdBWVNfSU5MSU5F
IGJvb2wgVENNYWxsb2NfUGFnZUhlYXA6OmlzU2NhdmVuZ2VyU3VzcGVuZGVkKCkKK0FMV0FZU19J
TkxJTkUgYm9vbCBUQ01hbGxvY1BhZ2VIZWFwOjppc1NjYXZlbmdlclN1c3BlbmRlZCgpCiB7CiAg
ICAgQVNTRVJUKHBhZ2VoZWFwX2xvY2suSXNIZWxkKCkpOwogICAgIHJldHVybiBtX3NjYXZlbmdp
bmdTdXNwZW5kZWQ7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBUQ01hbGxvY19QYWdlSGVhcDo6
c2NoZWR1bGVTY2F2ZW5nZXIoKQorQUxXQVlTX0lOTElORSB2b2lkIFRDTWFsbG9jUGFnZUhlYXA6
OnNjaGVkdWxlU2NhdmVuZ2VyKCkKIHsKLSAgICBBU1NFUlQocGFnZWhlYXBfbG9jay5Jc0hlbGQo
KSk7CisgICAgQVNTRVJUKHBhZ2VoZWFwTG9jay5Jc0hlbGQoKSk7CiAgICAgbV9zY2F2ZW5naW5n
U3VzcGVuZGVkID0gZmFsc2U7CiAgICAgZGlzcGF0Y2hfcmVzdW1lKG1fc2NhdmVuZ2VUaW1lcik7
CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBUQ01hbGxvY19QYWdlSGVhcDo6cmVzY2hlZHVsZVNj
YXZlbmdlcigpCitBTFdBWVNfSU5MSU5FIHZvaWQgVENNYWxsb2NQYWdlSGVhcDo6cmVzY2hlZHVs
ZVNjYXZlbmdlcigpCiB7CiAgICAgLy8gTm90aGluZyB0byBkbyBoZXJlIGZvciBsaWJkaXNwYXRj
aC4KIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIFRDTWFsbG9jX1BhZ2VIZWFwOjpzdXNwZW5kU2Nh
dmVuZ2VyKCkKK0FMV0FZU19JTkxJTkUgdm9pZCBUQ01hbGxvY1BhZ2VIZWFwOjpzdXNwZW5kU2Nh
dmVuZ2VyKCkKIHsKLSAgICBBU1NFUlQocGFnZWhlYXBfbG9jay5Jc0hlbGQoKSk7CisgICAgQVNT
RVJUKHBhZ2VoZWFwTG9jay5Jc0hlbGQoKSk7CiAgICAgbV9zY2F2ZW5naW5nU3VzcGVuZGVkID0g
dHJ1ZTsKICAgICBkaXNwYXRjaF9zdXNwZW5kKG1fc2NhdmVuZ2VUaW1lcik7CiB9CiAKICNlbGlm
IE9TKFdJTkRPV1MpCiAKLXZvaWQgVENNYWxsb2NfUGFnZUhlYXA6OnNjYXZlbmdlclRpbWVyRmly
ZWQodm9pZCogY29udGV4dCwgQk9PTEVBTikKK3ZvaWQgVENNYWxsb2NQYWdlSGVhcDo6c2NhdmVu
Z2VyVGltZXJGaXJlZCh2b2lkKiBjb250ZXh0LCBCT09MRUFOKQogewotICAgIHN0YXRpY19jYXN0
PFRDTWFsbG9jX1BhZ2VIZWFwKj4oY29udGV4dCktPnBlcmlvZGljU2NhdmVuZ2UoKTsKKyAgICBz
dGF0aWNfY2FzdDxUQ01hbGxvY1BhZ2VIZWFwKj4oY29udGV4dCktPnBlcmlvZGljU2NhdmVuZ2Uo
KTsKIH0KIAotdm9pZCBUQ01hbGxvY19QYWdlSGVhcDo6aW5pdGlhbGl6ZVNjYXZlbmdlcigpCit2
b2lkIFRDTWFsbG9jUGFnZUhlYXA6OmluaXRpYWxpemVTY2F2ZW5nZXIoKQogewogICAgIG1fc2Nh
dmVuZ2VRdWV1ZVRpbWVyID0gMDsKIH0KIAotQUxXQVlTX0lOTElORSBib29sIFRDTWFsbG9jX1Bh
Z2VIZWFwOjppc1NjYXZlbmdlclN1c3BlbmRlZCgpCitBTFdBWVNfSU5MSU5FIGJvb2wgVENNYWxs
b2NQYWdlSGVhcDo6aXNTY2F2ZW5nZXJTdXNwZW5kZWQoKQogewotICAgIEFTU0VSVChwYWdlaGVh
cF9sb2NrLklzSGVsZCgpKTsKKyAgICBBU1NFUlQocGFnZWhlYXBMb2NrLklzSGVsZCgpKTsKICAg
ICByZXR1cm4gIW1fc2NhdmVuZ2VRdWV1ZVRpbWVyOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQg
VENNYWxsb2NfUGFnZUhlYXA6OnNjaGVkdWxlU2NhdmVuZ2VyKCkKK0FMV0FZU19JTkxJTkUgdm9p
ZCBUQ01hbGxvY1BhZ2VIZWFwOjpzY2hlZHVsZVNjYXZlbmdlcigpCiB7CiAgICAgLy8gV2UgbmVl
ZCB0byB1c2UgV1RfRVhFQ1VURU9OTFlPTkNFIGhlcmUgYW5kIHJlc2NoZWR1bGUgdGhlIHRpbWVy
LCBiZWNhdXNlCiAgICAgLy8gV2luZG93cyB3aWxsIGZpcmUgdGhlIHRpbWVyIGV2ZW50IGV2ZW4g
d2hlbiB0aGUgZnVuY3Rpb24gaXMgYWxyZWFkeSBydW5uaW5nLgotICAgIEFTU0VSVChwYWdlaGVh
cF9sb2NrLklzSGVsZCgpKTsKKyAgICBBU1NFUlQocGFnZWhlYXBMb2NrLklzSGVsZCgpKTsKICAg
ICBDcmVhdGVUaW1lclF1ZXVlVGltZXIoJm1fc2NhdmVuZ2VRdWV1ZVRpbWVyLCAwLCBzY2F2ZW5n
ZXJUaW1lckZpcmVkLCB0aGlzLCBrU2NhdmVuZ2VEZWxheUluU2Vjb25kcyAqIDEwMDAsIDAsIFdU
X0VYRUNVVEVPTkxZT05DRSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBUQ01hbGxvY19QYWdl
SGVhcDo6cmVzY2hlZHVsZVNjYXZlbmdlcigpCitBTFdBWVNfSU5MSU5FIHZvaWQgVENNYWxsb2NQ
YWdlSGVhcDo6cmVzY2hlZHVsZVNjYXZlbmdlcigpCiB7CiAgICAgLy8gV2UgbXVzdCBkZWxldGUg
dGhlIHRpbWVyIGFuZCBjcmVhdGUgaXQgYWdhaW4sIGJlY2F1c2UgaXQgaXMgbm90IHBvc3NpYmxl
IHRvIHJldHJpZ2dlciBhIHRpbWVyIG9uIFdpbmRvd3MuCiAgICAgc3VzcGVuZFNjYXZlbmdlcigp
OwogICAgIHNjaGVkdWxlU2NhdmVuZ2VyKCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBUQ01h
bGxvY19QYWdlSGVhcDo6c3VzcGVuZFNjYXZlbmdlcigpCitBTFdBWVNfSU5MSU5FIHZvaWQgVENN
YWxsb2NQYWdlSGVhcDo6c3VzcGVuZFNjYXZlbmdlcigpCiB7Ci0gICAgQVNTRVJUKHBhZ2VoZWFw
X2xvY2suSXNIZWxkKCkpOworICAgIEFTU0VSVChwYWdlaGVhcExvY2suSXNIZWxkKCkpOwogICAg
IEhBTkRMRSBzY2F2ZW5nZVF1ZXVlVGltZXIgPSBtX3NjYXZlbmdlUXVldWVUaW1lcjsKICAgICBt
X3NjYXZlbmdlUXVldWVUaW1lciA9IDA7CiAgICAgRGVsZXRlVGltZXJRdWV1ZVRpbWVyKDAsIHNj
YXZlbmdlUXVldWVUaW1lciwgMCk7CkBAIC0xNTk1LDcgKzE2MjAsNyBAQCBBTFdBWVNfSU5MSU5F
IHZvaWQgVENNYWxsb2NfUGFnZUhlYXA6OnN1CiAKICNlbHNlCiAKLXZvaWQgVENNYWxsb2NfUGFn
ZUhlYXA6OmluaXRpYWxpemVTY2F2ZW5nZXIoKQordm9pZCBUQ01hbGxvY1BhZ2VIZWFwOjppbml0
aWFsaXplU2NhdmVuZ2VyKCkKIHsKICAgICAvLyBDcmVhdGUgYSBub24tcmVjdXJzaXZlIG11dGV4
LgogI2lmICFkZWZpbmVkKFBUSFJFQURfTVVURVhfTk9STUFMKSB8fCBQVEhSRUFEX01VVEVYX05P
Uk1BTCA9PSBQVEhSRUFEX01VVEVYX0RFRkFVTFQKQEAgLTE2MTYsMTYgKzE2NDEsMTYgQEAgdm9p
ZCBUQ01hbGxvY19QYWdlSGVhcDo6aW5pdGlhbGl6ZVNjYXZlbgogICAgIHB0aHJlYWRfY3JlYXRl
KCZ0aHJlYWQsIDAsIHJ1blNjYXZlbmdlclRocmVhZCwgdGhpcyk7CiB9CiAKLXZvaWQqIFRDTWFs
bG9jX1BhZ2VIZWFwOjpydW5TY2F2ZW5nZXJUaHJlYWQodm9pZCogY29udGV4dCkKK3ZvaWQqIFRD
TWFsbG9jUGFnZUhlYXA6OnJ1blNjYXZlbmdlclRocmVhZCh2b2lkKiBjb250ZXh0KQogewotICAg
IHN0YXRpY19jYXN0PFRDTWFsbG9jX1BhZ2VIZWFwKj4oY29udGV4dCktPnNjYXZlbmdlclRocmVh
ZCgpOworICAgIHN0YXRpY19jYXN0PFRDTWFsbG9jUGFnZUhlYXAqPihjb250ZXh0KS0+c2NhdmVu
Z2VyVGhyZWFkKCk7CiAjaWYgKENPTVBJTEVSKE1TVkMpIHx8IENPTVBJTEVSKFNVTkNDKSkKICAg
ICAvLyBXaXRob3V0IHRoaXMsIFZpc3VhbCBTdHVkaW8gYW5kIFN1biBTdHVkaW8gd2lsbCBjb21w
bGFpbiB0aGF0IHRoaXMgbWV0aG9kIGRvZXMgbm90IHJldHVybiBhIHZhbHVlLgogICAgIHJldHVy
biAwOwogI2VuZGlmCiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBUQ01hbGxvY19QYWdlSGVhcDo6
c2lnbmFsU2NhdmVuZ2VyKCkKK0FMV0FZU19JTkxJTkUgdm9pZCBUQ01hbGxvY1BhZ2VIZWFwOjpz
aWduYWxTY2F2ZW5nZXIoKQogewogICAgIC8vIHNob3VsZFNjYXZlbmdlKCkgc2hvdWxkIGJlIGNh
bGxlZCBvbmx5IHdoZW4gdGhlIHBhZ2VoZWFwX2xvY2sgc3BpbmxvY2sgaXMgaGVsZCwgYWRkaXRp
b25hbGx5LCAKICAgICAvLyBtX3NjYXZlbmdlVGhyZWFkQWN0aXZlIGlzIG9ubHkgc2V0IHRvIGZh
bHNlIHdoaWxzdCBwYWdlaGVhcF9sb2NrIGlzIGhlbGQuIFRoZSBjYWxsZXIgbXVzdCBlbnN1cmUg
dGhpcyBpcwpAQCAtMTYzOCwyMDEgKzE2NjMsMjAxIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBUQ01h
bGxvY19QYWdlSGVhcDo6c2kKIAogI2VuZGlmCiAKLXZvaWQgVENNYWxsb2NfUGFnZUhlYXA6OnNj
YXZlbmdlKCkKK3ZvaWQgVENNYWxsb2NQYWdlSGVhcDo6c2NhdmVuZ2UoKQogewotICAgIHNpemVf
dCBwYWdlc1RvUmVsZWFzZSA9IG1pbl9mcmVlX2NvbW1pdHRlZF9wYWdlc19zaW5jZV9sYXN0X3Nj
YXZlbmdlXyAqIGtTY2F2ZW5nZVBlcmNlbnRhZ2U7Ci0gICAgc2l6ZV90IHRhcmdldFBhZ2VDb3Vu
dCA9IHN0ZDo6bWF4PHNpemVfdD4oa01pbmltdW1GcmVlQ29tbWl0dGVkUGFnZUNvdW50LCBmcmVl
X2NvbW1pdHRlZF9wYWdlc18gLSBwYWdlc1RvUmVsZWFzZSk7CisgICAgc2l6ZV90IHBhZ2VzVG9S
ZWxlYXNlID0gbWluRnJlZUNvbW1pdHRlZFBhZ2VzU2luY2VMYXN0U2NhdmVuZ2UgKiBrU2NhdmVu
Z2VQZXJjZW50YWdlOworICAgIHNpemVfdCB0YXJnZXRQYWdlQ291bnQgPSBzdGQ6Om1heDxzaXpl
X3Q+KGtNaW5pbXVtRnJlZUNvbW1pdHRlZFBhZ2VDb3VudCwgZnJlZUNvbW1pdHRlZFBhZ2VzIC0g
cGFnZXNUb1JlbGVhc2UpOwogCi0gICAgTGVuZ3RoIGxhc3RGcmVlQ29tbWl0dGVkUGFnZXMgPSBm
cmVlX2NvbW1pdHRlZF9wYWdlc187Ci0gICAgd2hpbGUgKGZyZWVfY29tbWl0dGVkX3BhZ2VzXyA+
IHRhcmdldFBhZ2VDb3VudCkgeworICAgIExlbmd0aCBsYXN0RnJlZUNvbW1pdHRlZFBhZ2VzID0g
ZnJlZUNvbW1pdHRlZFBhZ2VzOworICAgIHdoaWxlIChmcmVlQ29tbWl0dGVkUGFnZXMgPiB0YXJn
ZXRQYWdlQ291bnQpIHsKICAgICAgICAgQVNTRVJUKENoZWNrKCkpOwotICAgICAgICBmb3IgKGlu
dCBpID0ga01heFBhZ2VzOyBpID4gMCAmJiBmcmVlX2NvbW1pdHRlZF9wYWdlc18gPj0gdGFyZ2V0
UGFnZUNvdW50OyBpLS0pIHsKLSAgICAgICAgICAgIFNwYW5MaXN0KiBzbGlzdCA9IChzdGF0aWNf
Y2FzdDxzaXplX3Q+KGkpID09IGtNYXhQYWdlcykgPyAmbGFyZ2VfIDogJmZyZWVfW2ldOwotICAg
ICAgICAgICAgLy8gSWYgdGhlIHNwYW4gc2l6ZSBpcyBiaWdnZXIgdGhhbiBrTWluU3Bhbkxpc3Rz
V2l0aFNwYW5zIHBhZ2VzIHJldHVybiBhbGwgdGhlIHNwYW5zIGluIHRoZSBsaXN0LCBlbHNlIHJl
dHVybiBhbGwgYnV0IDEgc3Bhbi4gIAorICAgICAgICBmb3IgKGludCBpID0ga01heFBhZ2VzOyBp
ID4gMCAmJiBmcmVlQ29tbWl0dGVkUGFnZXMgPj0gdGFyZ2V0UGFnZUNvdW50OyBpLS0pIHsKKyAg
ICAgICAgICAgIFNwYW5MaXN0KiBzbGlzdCA9IChzdGF0aWNfY2FzdDxzaXplX3Q+KGkpID09IGtN
YXhQYWdlcykgPyAmbGFyZ2UgOiAmZnJlZVNwYW5MaXN0W2ldOworICAgICAgICAgICAgLy8gSWYg
dGhlIHNwYW4gc2l6ZSBpcyBiaWdnZXIgdGhhbiBrTWluU3Bhbkxpc3RzV2l0aFNwYW5zIHBhZ2Vz
IHJldHVybiBhbGwgdGhlIHNwYW5zIGluIHRoZSBsaXN0LCBlbHNlIHJldHVybiBhbGwgYnV0IDEg
c3Bhbi4gCiAgICAgICAgICAgICAvLyBSZXR1cm4gb25seSA1MCUgb2YgYSBzcGFubGlzdCBhdCBh
IHRpbWUgc28gc3BhbnMgb2Ygc2l6ZSAxIGFyZSBub3QgdGhlIG9ubHkgb25lcyBsZWZ0LgotICAg
ICAgICAgICAgc2l6ZV90IGxlbmd0aCA9IERMTF9MZW5ndGgoJnNsaXN0LT5ub3JtYWwpOworICAg
ICAgICAgICAgc2l6ZV90IGxlbmd0aCA9IERMTExlbmd0aCgmc2xpc3QtPm5vcm1hbCk7CiAgICAg
ICAgICAgICBzaXplX3QgbnVtU3BhbnNUb1JldHVybiA9IChpID4ga01pblNwYW5MaXN0c1dpdGhT
cGFucykgPyBsZW5ndGggOiBsZW5ndGggLyAyOwotICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7
IHN0YXRpY19jYXN0PHNpemVfdD4oaikgPCBudW1TcGFuc1RvUmV0dXJuICYmICFETExfSXNFbXB0
eSgmc2xpc3QtPm5vcm1hbCkgJiYgZnJlZV9jb21taXR0ZWRfcGFnZXNfID4gdGFyZ2V0UGFnZUNv
dW50OyBqKyspIHsKKyAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBzdGF0aWNfY2FzdDxzaXpl
X3Q+KGopIDwgbnVtU3BhbnNUb1JldHVybiAmJiAhRExMX0lzRW1wdHkoJnNsaXN0LT5ub3JtYWwp
ICYmIGZyZWVDb21taXR0ZWRQYWdlcyA+IHRhcmdldFBhZ2VDb3VudDsgaisrKSB7CiAgICAgICAg
ICAgICAgICAgU3BhbiogcyA9IHNsaXN0LT5ub3JtYWwucHJldjsgCi0gICAgICAgICAgICAgICAg
RExMX1JlbW92ZShzKTsKKyAgICAgICAgICAgICAgICBETExSZW1vdmUocyk7CiAgICAgICAgICAg
ICAgICAgQVNTRVJUKCFzLT5kZWNvbW1pdHRlZCk7CiAgICAgICAgICAgICAgICAgaWYgKCFzLT5k
ZWNvbW1pdHRlZCkgewogICAgICAgICAgICAgICAgICAgICBUQ01hbGxvY19TeXN0ZW1SZWxlYXNl
KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHMtPnN0YXJ0IDw8IGtQYWdlU2hpZnQpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHNpemVfdD4o
cy0+bGVuZ3RoIDw8IGtQYWdlU2hpZnQpKTsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGZy
ZWVfY29tbWl0dGVkX3BhZ2VzXyA+PSBzLT5sZW5ndGgpOwotICAgICAgICAgICAgICAgICAgICBm
cmVlX2NvbW1pdHRlZF9wYWdlc18gLT0gcy0+bGVuZ3RoOworICAgICAgICAgICAgICAgICAgICBB
U1NFUlQoZnJlZUNvbW1pdHRlZFBhZ2VzID49IHMtPmxlbmd0aCk7CisgICAgICAgICAgICAgICAg
ICAgIGZyZWVDb21taXR0ZWRQYWdlcyAtPSBzLT5sZW5ndGg7CiAgICAgICAgICAgICAgICAgICAg
IHMtPmRlY29tbWl0dGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgRExMX1ByZXBlbmQoJnNsaXN0LT5yZXR1cm5lZCwgcyk7CisgICAgICAgICAgICAgICAgRExM
UHJlcGVuZCgmc2xpc3QtPnJldHVybmVkLCBzKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
Ci0gICAgICAgIGlmIChsYXN0RnJlZUNvbW1pdHRlZFBhZ2VzID09IGZyZWVfY29tbWl0dGVkX3Bh
Z2VzXykKKyAgICAgICAgaWYgKGxhc3RGcmVlQ29tbWl0dGVkUGFnZXMgPT0gZnJlZUNvbW1pdHRl
ZFBhZ2VzKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGxhc3RGcmVlQ29tbWl0dGVkUGFn
ZXMgPSBmcmVlX2NvbW1pdHRlZF9wYWdlc187CisgICAgICAgIGxhc3RGcmVlQ29tbWl0dGVkUGFn
ZXMgPSBmcmVlQ29tbWl0dGVkUGFnZXM7CiAgICAgfQogCi0gICAgbWluX2ZyZWVfY29tbWl0dGVk
X3BhZ2VzX3NpbmNlX2xhc3Rfc2NhdmVuZ2VfID0gZnJlZV9jb21taXR0ZWRfcGFnZXNfOworICAg
IG1pbkZyZWVDb21taXR0ZWRQYWdlc1NpbmNlTGFzdFNjYXZlbmdlID0gZnJlZUNvbW1pdHRlZFBh
Z2VzOwogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgVENNYWxsb2NfUGFnZUhlYXA6OnNob3VsZFNj
YXZlbmdlKCkgY29uc3QgCitBTFdBWVNfSU5MSU5FIGJvb2wgVENNYWxsb2NQYWdlSGVhcDo6c2hv
dWxkU2NhdmVuZ2UoKSBjb25zdCAKIHsKLSAgICByZXR1cm4gZnJlZV9jb21taXR0ZWRfcGFnZXNf
ID4ga01pbmltdW1GcmVlQ29tbWl0dGVkUGFnZUNvdW50OyAKKyAgICByZXR1cm4gZnJlZUNvbW1p
dHRlZFBhZ2VzID4ga01pbmltdW1GcmVlQ29tbWl0dGVkUGFnZUNvdW50OyAKIH0KIAogI2VuZGlm
ICAvLyBVU0VfQkFDS0dST1VORF9USFJFQURfVE9fU0NBVkVOR0VfTUVNT1JZCiAKLWlubGluZSBT
cGFuKiBUQ01hbGxvY19QYWdlSGVhcDo6TmV3KExlbmd0aCBuKSB7Ci0gIEFTU0VSVChDaGVjaygp
KTsKLSAgQVNTRVJUKG4gPiAwKTsKLQotICAvLyBGaW5kIGZpcnN0IHNpemUgPj0gbiB0aGF0IGhh
cyBhIG5vbi1lbXB0eSBsaXN0Ci0gIGZvciAoTGVuZ3RoIHMgPSBuOyBzIDwga01heFBhZ2VzOyBz
KyspIHsKLSAgICBTcGFuKiBsbCA9IE5VTEw7Ci0gICAgYm9vbCByZWxlYXNlZCA9IGZhbHNlOwot
ICAgIGlmICghRExMX0lzRW1wdHkoJmZyZWVfW3NdLm5vcm1hbCkpIHsKLSAgICAgIC8vIEZvdW5k
IG5vcm1hbCBzcGFuCi0gICAgICBsbCA9ICZmcmVlX1tzXS5ub3JtYWw7Ci0gICAgfSBlbHNlIGlm
ICghRExMX0lzRW1wdHkoJmZyZWVfW3NdLnJldHVybmVkKSkgewotICAgICAgLy8gRm91bmQgcmV0
dXJuZWQgc3BhbjsgcmVhbGxvY2F0ZSBpdAotICAgICAgbGwgPSAmZnJlZV9bc10ucmV0dXJuZWQ7
Ci0gICAgICByZWxlYXNlZCA9IHRydWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8vIEtlZXAgbG9v
a2luZyBpbiBsYXJnZXIgY2xhc3NlcwotICAgICAgY29udGludWU7Ci0gICAgfQoraW5saW5lIFNw
YW4qIFRDTWFsbG9jUGFnZUhlYXA6Ok5ldyhMZW5ndGggbikKK3sKKyAgICBBU1NFUlQoQ2hlY2so
KSk7CisgICAgQVNTRVJUKG4gPiAwKTsKKworICAgIC8vIEZpbmQgZmlyc3Qgc2l6ZSA+PSBuIHRo
YXQgaGFzIGEgbm9uLWVtcHR5IGxpc3QKKyAgICBmb3IgKExlbmd0aCBzID0gbjsgcyA8IGtNYXhQ
YWdlczsgcysrKSB7CisgICAgICAgIFNwYW4qIGxpc3QgPSAwOworICAgICAgICBib29sIHJlbGVh
c2VkID0gZmFsc2U7CisgICAgICAgIGlmICghRExMX0lzRW1wdHkoJmZyZWVTcGFuTGlzdFtzXS5u
b3JtYWwpKSB7CisgICAgICAgICAgICAvLyBGb3VuZCBub3JtYWwgc3BhbgorICAgICAgICAgICAg
bGlzdCA9ICZmcmVlU3Bhbkxpc3Rbc10ubm9ybWFsOworICAgICAgICB9IGVsc2UgaWYgKCFETExf
SXNFbXB0eSgmZnJlZVNwYW5MaXN0W3NdLnJldHVybmVkKSkgeworICAgICAgICAgICAgLy8gRm91
bmQgcmV0dXJuZWQgc3BhbjsgcmVhbGxvY2F0ZSBpdAorICAgICAgICAgICAgbGlzdCA9ICZmcmVl
U3Bhbkxpc3Rbc10ucmV0dXJuZWQ7CisgICAgICAgICAgICByZWxlYXNlZCA9IHRydWU7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBLZWVwIGxvb2tpbmcgaW4gbGFyZ2VyIGNsYXNz
ZXMKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CiAKLSAgICBTcGFuKiByZXN1bHQg
PSBsbC0+bmV4dDsKLSAgICBDYXJ2ZShyZXN1bHQsIG4sIHJlbGVhc2VkKTsKKyAgICAgICAgU3Bh
biogcmVzdWx0ID0gbGlzdC0+bmV4dDsKKyAgICAgICAgQ2FydmUocmVzdWx0LCBuLCByZWxlYXNl
ZCk7CiAjaWYgVVNFX0JBQ0tHUk9VTkRfVEhSRUFEX1RPX1NDQVZFTkdFX01FTU9SWQotICAgIC8v
IFRoZSBuZXdseSBhbGxvY2F0ZWQgbWVtb3J5IGlzIGZyb20gYSBzcGFuIHRoYXQncyBpbiB0aGUg
bm9ybWFsIHNwYW4gbGlzdCAoYWxyZWFkeSBjb21taXR0ZWQpLiAgVXBkYXRlIHRoZQotICAgIC8v
IGZyZWUgY29tbWl0dGVkIHBhZ2VzIGNvdW50LgotICAgIEFTU0VSVChmcmVlX2NvbW1pdHRlZF9w
YWdlc18gPj0gbik7Ci0gICAgZnJlZV9jb21taXR0ZWRfcGFnZXNfIC09IG47Ci0gICAgaWYgKGZy
ZWVfY29tbWl0dGVkX3BhZ2VzXyA8IG1pbl9mcmVlX2NvbW1pdHRlZF9wYWdlc19zaW5jZV9sYXN0
X3NjYXZlbmdlXykgCi0gICAgICBtaW5fZnJlZV9jb21taXR0ZWRfcGFnZXNfc2luY2VfbGFzdF9z
Y2F2ZW5nZV8gPSBmcmVlX2NvbW1pdHRlZF9wYWdlc187CisgICAgICAgIC8vIFRoZSBuZXdseSBh
bGxvY2F0ZWQgbWVtb3J5IGlzIGZyb20gYSBzcGFuIHRoYXQncyBpbiB0aGUgbm9ybWFsIHNwYW4g
bGlzdCAoYWxyZWFkeSBjb21taXR0ZWQpLiBVcGRhdGUgdGhlCisgICAgICAgIC8vIGZyZWUgY29t
bWl0dGVkIHBhZ2VzIGNvdW50LgorICAgICAgICBBU1NFUlQoZnJlZUNvbW1pdHRlZFBhZ2VzID49
IG4pOworICAgICAgICBmcmVlQ29tbWl0dGVkUGFnZXMgLT0gbjsKKyAgICAgICAgaWYgKGZyZWVD
b21taXR0ZWRQYWdlcyA8IG1pbkZyZWVDb21taXR0ZWRQYWdlc1NpbmNlTGFzdFNjYXZlbmdlKSAK
KyAgICAgICAgICAgIG1pbkZyZWVDb21taXR0ZWRQYWdlc1NpbmNlTGFzdFNjYXZlbmdlID0gZnJl
ZUNvbW1pdHRlZFBhZ2VzOwogI2VuZGlmICAvLyBVU0VfQkFDS0dST1VORF9USFJFQURfVE9fU0NB
VkVOR0VfTUVNT1JZCi0gICAgQVNTRVJUKENoZWNrKCkpOwotICAgIGZyZWVfcGFnZXNfIC09IG47
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQorICAgICAgICBBU1NFUlQoQ2hlY2soKSk7CisgICAg
ICAgIGZyZWVQYWdlcyAtPSBuOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KIAotICBT
cGFuKiByZXN1bHQgPSBBbGxvY0xhcmdlKG4pOwotICBpZiAocmVzdWx0ICE9IE5VTEwpIHsKLSAg
ICAgIEFTU0VSVF9TUEFOX0NPTU1JVFRFRChyZXN1bHQpOwotICAgICAgcmV0dXJuIHJlc3VsdDsK
LSAgfQorICAgIFNwYW4qIHJlc3VsdCA9IEFsbG9jTGFyZ2Uobik7CisgICAgaWYgKHJlc3VsdCkg
eworICAgICAgICBBU1NFUlRfU1BBTl9DT01NSVRURUQocmVzdWx0KTsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9CiAKLSAgLy8gR3JvdyB0aGUgaGVhcCBhbmQgdHJ5IGFnYWluCi0gIGlm
ICghR3Jvd0hlYXAobikpIHsKLSAgICBBU1NFUlQoQ2hlY2soKSk7Ci0gICAgcmV0dXJuIE5VTEw7
Ci0gIH0KKyAgICAvLyBHcm93IHRoZSBoZWFwIGFuZCB0cnkgYWdhaW4KKyAgICBpZiAoIUdyb3dI
ZWFwKG4pKSB7CisgICAgICAgIEFTU0VSVChDaGVjaygpKTsKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgfQogCi0gIHJldHVybiBOZXcobik7CisgICAgcmV0dXJuIE5ldyhuKTsKIH0KIAotU3Bhbiog
VENNYWxsb2NfUGFnZUhlYXA6OkFsbG9jTGFyZ2UoTGVuZ3RoIG4pIHsKLSAgLy8gZmluZCB0aGUg
YmVzdCBzcGFuIChjbG9zZXN0IHRvIG4gaW4gc2l6ZSkuCi0gIC8vIFRoZSBmb2xsb3dpbmcgbG9v
cHMgaW1wbGVtZW50cyBhZGRyZXNzLW9yZGVyZWQgYmVzdC1maXQuCi0gIGJvb2wgZnJvbV9yZWxl
YXNlZCA9IGZhbHNlOwotICBTcGFuICpiZXN0ID0gTlVMTDsKLQotICAvLyBTZWFyY2ggdGhyb3Vn
aCBub3JtYWwgbGlzdAotICBmb3IgKFNwYW4qIHNwYW4gPSBsYXJnZV8ubm9ybWFsLm5leHQ7Ci0g
ICAgICAgc3BhbiAhPSAmbGFyZ2VfLm5vcm1hbDsKLSAgICAgICBzcGFuID0gc3Bhbi0+bmV4dCkg
ewotICAgIGlmIChzcGFuLT5sZW5ndGggPj0gbikgewotICAgICAgaWYgKChiZXN0ID09IE5VTEwp
Ci0gICAgICAgICAgfHwgKHNwYW4tPmxlbmd0aCA8IGJlc3QtPmxlbmd0aCkKLSAgICAgICAgICB8
fCAoKHNwYW4tPmxlbmd0aCA9PSBiZXN0LT5sZW5ndGgpICYmIChzcGFuLT5zdGFydCA8IGJlc3Qt
PnN0YXJ0KSkpIHsKLSAgICAgICAgYmVzdCA9IHNwYW47Ci0gICAgICAgIGZyb21fcmVsZWFzZWQg
PSBmYWxzZTsKLSAgICAgIH0KK1NwYW4qIFRDTWFsbG9jUGFnZUhlYXA6OkFsbG9jTGFyZ2UoTGVu
Z3RoIG4pCit7CisgICAgLy8gZmluZCB0aGUgYmVzdCBzcGFuIChjbG9zZXN0IHRvIG4gaW4gc2l6
ZSkuCisgICAgLy8gVGhlIGZvbGxvd2luZyBsb29wcyBpbXBsZW1lbnRzIGFkZHJlc3Mtb3JkZXJl
ZCBiZXN0LWZpdC4KKyAgICBib29sIGZyb21SZWxlYXNlZCA9IGZhbHNlOworICAgIFNwYW4qIGJl
c3QgPSAwOworCisgICAgLy8gU2VhcmNoIHRocm91Z2ggbm9ybWFsIGxpc3QKKyAgICBmb3IgKFNw
YW4qIHNwYW4gPSBsYXJnZS5ub3JtYWwubmV4dDsgc3BhbiAhPSAmbGFyZ2Uubm9ybWFsOyBzcGFu
ID0gc3Bhbi0+bmV4dCkgeworICAgICAgICBpZiAoc3Bhbi0+bGVuZ3RoID49IG4pIHsKKyAgICAg
ICAgICAgIGlmICghYmVzdAorICAgICAgICAgICAgICAgIHx8IChzcGFuLT5sZW5ndGggPCBiZXN0
LT5sZW5ndGgpCisgICAgICAgICAgICAgICAgfHwgKChzcGFuLT5sZW5ndGggPT0gYmVzdC0+bGVu
Z3RoKSAmJiAoc3Bhbi0+c3RhcnQgPCBiZXN0LT5zdGFydCkpKSB7CisgICAgICAgICAgICAgICAg
YmVzdCA9IHNwYW47CisgICAgICAgICAgICAgICAgZnJvbVJlbGVhc2VkID0gZmFsc2U7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KICAgICB9Ci0gIH0KIAotICAvLyBTZWFyY2ggdGhyb3VnaCBy
ZWxlYXNlZCBsaXN0IGluIGNhc2UgaXQgaGFzIGEgYmV0dGVyIGZpdAotICBmb3IgKFNwYW4qIHNw
YW4gPSBsYXJnZV8ucmV0dXJuZWQubmV4dDsKLSAgICAgICBzcGFuICE9ICZsYXJnZV8ucmV0dXJu
ZWQ7Ci0gICAgICAgc3BhbiA9IHNwYW4tPm5leHQpIHsKLSAgICBpZiAoc3Bhbi0+bGVuZ3RoID49
IG4pIHsKLSAgICAgIGlmICgoYmVzdCA9PSBOVUxMKQotICAgICAgICAgIHx8IChzcGFuLT5sZW5n
dGggPCBiZXN0LT5sZW5ndGgpCi0gICAgICAgICAgfHwgKChzcGFuLT5sZW5ndGggPT0gYmVzdC0+
bGVuZ3RoKSAmJiAoc3Bhbi0+c3RhcnQgPCBiZXN0LT5zdGFydCkpKSB7Ci0gICAgICAgIGJlc3Qg
PSBzcGFuOwotICAgICAgICBmcm9tX3JlbGVhc2VkID0gdHJ1ZTsKLSAgICAgIH0KKyAgICAvLyBT
ZWFyY2ggdGhyb3VnaCByZWxlYXNlZCBsaXN0IGluIGNhc2UgaXQgaGFzIGEgYmV0dGVyIGZpdAor
ICAgIGZvciAoU3Bhbiogc3BhbiA9IGxhcmdlLnJldHVybmVkLm5leHQ7IHNwYW4gIT0gJmxhcmdl
LnJldHVybmVkOyBzcGFuID0gc3Bhbi0+bmV4dCkgeworICAgICAgICBpZiAoc3Bhbi0+bGVuZ3Ro
ID49IG4pIHsKKyAgICAgICAgICAgIGlmICghYmVzdAorICAgICAgICAgICAgICAgIHx8IChzcGFu
LT5sZW5ndGggPCBiZXN0LT5sZW5ndGgpCisgICAgICAgICAgICAgICAgfHwgKChzcGFuLT5sZW5n
dGggPT0gYmVzdC0+bGVuZ3RoKSAmJiAoc3Bhbi0+c3RhcnQgPCBiZXN0LT5zdGFydCkpKSB7Cisg
ICAgICAgICAgICAgICAgYmVzdCA9IHNwYW47CisgICAgICAgICAgICAgICAgZnJvbVJlbGVhc2Vk
ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KLSAgfQogCi0gIGlmIChi
ZXN0ICE9IE5VTEwpIHsKLSAgICBDYXJ2ZShiZXN0LCBuLCBmcm9tX3JlbGVhc2VkKTsKKyAgICBp
ZiAoYmVzdCkgeworICAgICAgICBDYXJ2ZShiZXN0LCBuLCBmcm9tUmVsZWFzZWQpOwogI2lmIFVT
RV9CQUNLR1JPVU5EX1RIUkVBRF9UT19TQ0FWRU5HRV9NRU1PUlkKLSAgICAvLyBUaGUgbmV3bHkg
YWxsb2NhdGVkIG1lbW9yeSBpcyBmcm9tIGEgc3BhbiB0aGF0J3MgaW4gdGhlIG5vcm1hbCBzcGFu
IGxpc3QgKGFscmVhZHkgY29tbWl0dGVkKS4gIFVwZGF0ZSB0aGUKLSAgICAvLyBmcmVlIGNvbW1p
dHRlZCBwYWdlcyBjb3VudC4KLSAgICBBU1NFUlQoZnJlZV9jb21taXR0ZWRfcGFnZXNfID49IG4p
OwotICAgIGZyZWVfY29tbWl0dGVkX3BhZ2VzXyAtPSBuOwotICAgIGlmIChmcmVlX2NvbW1pdHRl
ZF9wYWdlc18gPCBtaW5fZnJlZV9jb21taXR0ZWRfcGFnZXNfc2luY2VfbGFzdF9zY2F2ZW5nZV8p
Ci0gICAgICBtaW5fZnJlZV9jb21taXR0ZWRfcGFnZXNfc2luY2VfbGFzdF9zY2F2ZW5nZV8gPSBm
cmVlX2NvbW1pdHRlZF9wYWdlc187Ci0jZW5kaWYgIC8vIFVTRV9CQUNLR1JPVU5EX1RIUkVBRF9U
T19TQ0FWRU5HRV9NRU1PUlkKLSAgICBBU1NFUlQoQ2hlY2soKSk7Ci0gICAgZnJlZV9wYWdlc18g
LT0gbjsKLSAgICByZXR1cm4gYmVzdDsKLSAgfQotICByZXR1cm4gTlVMTDsKKyAgICAgICAgLy8g
VGhlIG5ld2x5IGFsbG9jYXRlZCBtZW1vcnkgaXMgZnJvbSBhIHNwYW4gdGhhdCdzIGluIHRoZSBu
b3JtYWwgc3BhbiBsaXN0IChhbHJlYWR5IGNvbW1pdHRlZCkuIFVwZGF0ZSB0aGUKKyAgICAgICAg
Ly8gZnJlZSBjb21taXR0ZWQgcGFnZXMgY291bnQuCisgICAgICAgIEFTU0VSVChmcmVlQ29tbWl0
dGVkUGFnZXMgPj0gbik7CisgICAgICAgIGZyZWVDb21taXR0ZWRQYWdlcyAtPSBuOworICAgICAg
ICBpZiAoZnJlZUNvbW1pdHRlZFBhZ2VzIDwgbWluRnJlZUNvbW1pdHRlZFBhZ2VzU2luY2VMYXN0
U2NhdmVuZ2UpCisgICAgICAgICAgICBtaW5GcmVlQ29tbWl0dGVkUGFnZXNTaW5jZUxhc3RTY2F2
ZW5nZSA9IGZyZWVDb21taXR0ZWRQYWdlczsKKyNlbmRpZiAvLyBVU0VfQkFDS0dST1VORF9USFJF
QURfVE9fU0NBVkVOR0VfTUVNT1JZCisgICAgICAgIEFTU0VSVChDaGVjaygpKTsKKyAgICAgICAg
ZnJlZVBhZ2VzIC09IG47CisgICAgICAgIHJldHVybiBiZXN0OworICAgIH0KKyAgICByZXR1cm4g
MDsKIH0KIAotU3BhbiogVENNYWxsb2NfUGFnZUhlYXA6OlNwbGl0KFNwYW4qIHNwYW4sIExlbmd0
aCBuKSB7Ci0gIEFTU0VSVCgwIDwgbik7Ci0gIEFTU0VSVChuIDwgc3Bhbi0+bGVuZ3RoKTsKLSAg
QVNTRVJUKCFzcGFuLT5mcmVlKTsKLSAgQVNTRVJUKHNwYW4tPnNpemVjbGFzcyA9PSAwKTsKLSAg
RXZlbnQoc3BhbiwgJ1QnLCBuKTsKLQotICBjb25zdCBMZW5ndGggZXh0cmEgPSBzcGFuLT5sZW5n
dGggLSBuOwotICBTcGFuKiBsZWZ0b3ZlciA9IE5ld1NwYW4oc3Bhbi0+c3RhcnQgKyBuLCBleHRy
YSk7Ci0gIEV2ZW50KGxlZnRvdmVyLCAnVScsIGV4dHJhKTsKLSAgUmVjb3JkU3BhbihsZWZ0b3Zl
cik7Ci0gIHBhZ2VtYXBfLnNldChzcGFuLT5zdGFydCArIG4gLSAxLCBzcGFuKTsgLy8gVXBkYXRl
IG1hcCBmcm9tIHBhZ2VpZCB0byBzcGFuCi0gIHNwYW4tPmxlbmd0aCA9IG47Ci0KLSAgcmV0dXJu
IGxlZnRvdmVyOwotfQotCi1pbmxpbmUgdm9pZCBUQ01hbGxvY19QYWdlSGVhcDo6Q2FydmUoU3Bh
biogc3BhbiwgTGVuZ3RoIG4sIGJvb2wgcmVsZWFzZWQpIHsKLSAgQVNTRVJUKG4gPiAwKTsKLSAg
RExMX1JlbW92ZShzcGFuKTsKLSAgc3Bhbi0+ZnJlZSA9IDA7Ci0gIEV2ZW50KHNwYW4sICdBJywg
bik7Ci0KLSAgaWYgKHJlbGVhc2VkKSB7Ci0gICAgLy8gSWYgdGhlIHNwYW4gY2hvc2VuIHRvIGNh
cnZlIGZyb20gaXMgZGVjb21taXRlZCwgY29tbWl0IHRoZSBlbnRpcmUgc3BhbiBhdCBvbmNlIHRv
IGF2b2lkIGNvbW1pdHRpbmcgc3BhbnMgMSBwYWdlIGF0IGEgdGltZS4KLSAgICBBU1NFUlQoc3Bh
bi0+ZGVjb21taXR0ZWQpOwotICAgIFRDTWFsbG9jX1N5c3RlbUNvbW1pdChyZWludGVycHJldF9j
YXN0PHZvaWQqPihzcGFuLT5zdGFydCA8PCBrUGFnZVNoaWZ0KSwgc3RhdGljX2Nhc3Q8c2l6ZV90
PihzcGFuLT5sZW5ndGggPDwga1BhZ2VTaGlmdCkpOwotICAgIHNwYW4tPmRlY29tbWl0dGVkID0g
ZmFsc2U7Ci0jaWYgVVNFX0JBQ0tHUk9VTkRfVEhSRUFEX1RPX1NDQVZFTkdFX01FTU9SWQotICAg
IGZyZWVfY29tbWl0dGVkX3BhZ2VzXyArPSBzcGFuLT5sZW5ndGg7Ci0jZW5kaWYKLSAgfQotICAK
LSAgY29uc3QgaW50IGV4dHJhID0gc3RhdGljX2Nhc3Q8aW50PihzcGFuLT5sZW5ndGggLSBuKTsK
LSAgQVNTRVJUKGV4dHJhID49IDApOwotICBpZiAoZXh0cmEgPiAwKSB7CitTcGFuKiBUQ01hbGxv
Y1BhZ2VIZWFwOjpTcGxpdChTcGFuKiBzcGFuLCBMZW5ndGggbikKK3sKKyAgICBBU1NFUlQoMCA8
IG4pOworICAgIEFTU0VSVChuIDwgc3Bhbi0+bGVuZ3RoKTsKKyAgICBBU1NFUlQoIXNwYW4tPmZy
ZWUpOworICAgIEFTU0VSVCghc3Bhbi0+c2l6ZUNsYXNzKTsKKyAgICBFdmVudChzcGFuLCAnVCcs
IG4pOworCisgICAgY29uc3QgTGVuZ3RoIGV4dHJhID0gc3Bhbi0+bGVuZ3RoIC0gbjsKICAgICBT
cGFuKiBsZWZ0b3ZlciA9IE5ld1NwYW4oc3Bhbi0+c3RhcnQgKyBuLCBleHRyYSk7Ci0gICAgbGVm
dG92ZXItPmZyZWUgPSAxOwotICAgIGxlZnRvdmVyLT5kZWNvbW1pdHRlZCA9IGZhbHNlOwotICAg
IEV2ZW50KGxlZnRvdmVyLCAnUycsIGV4dHJhKTsKKyAgICBFdmVudChsZWZ0b3ZlciwgJ1UnLCBl
eHRyYSk7CiAgICAgUmVjb3JkU3BhbihsZWZ0b3Zlcik7CisgICAgcGFnZU1hcC5zZXQoc3Bhbi0+
c3RhcnQgKyBuIC0gMSwgc3Bhbik7IC8vIFVwZGF0ZSBtYXAgZnJvbSBwYWdlaWQgdG8gc3Bhbgor
ICAgIHNwYW4tPmxlbmd0aCA9IG47CiAKLSAgICAvLyBQbGFjZSBsZWZ0b3ZlciBzcGFuIG9uIGFw
cHJvcHJpYXRlIGZyZWUgbGlzdAotICAgIFNwYW5MaXN0KiBsaXN0cGFpciA9IChzdGF0aWNfY2Fz
dDxzaXplX3Q+KGV4dHJhKSA8IGtNYXhQYWdlcykgPyAmZnJlZV9bZXh0cmFdIDogJmxhcmdlXzsK
LSAgICBTcGFuKiBkc3QgPSAmbGlzdHBhaXItPm5vcm1hbDsKLSAgICBETExfUHJlcGVuZChkc3Qs
IGxlZnRvdmVyKTsKKyAgICByZXR1cm4gbGVmdG92ZXI7Cit9CiAKLSAgICBzcGFuLT5sZW5ndGgg
PSBuOwotICAgIHBhZ2VtYXBfLnNldChzcGFuLT5zdGFydCArIG4gLSAxLCBzcGFuKTsKLSAgfQor
aW5saW5lIHZvaWQgVENNYWxsb2NQYWdlSGVhcDo6Q2FydmUoU3Bhbiogc3BhbiwgTGVuZ3RoIG4s
IGJvb2wgcmVsZWFzZWQpCit7CisgICAgQVNTRVJUKG4gPiAwKTsKKyAgICBETExSZW1vdmUoc3Bh
bik7CisgICAgc3Bhbi0+ZnJlZSA9IDA7CisgICAgRXZlbnQoc3BhbiwgJ0EnLCBuKTsKKworICAg
IGlmIChyZWxlYXNlZCkgeworICAgICAgICAvLyBJZiB0aGUgc3BhbiBjaG9zZW4gdG8gY2FydmUg
ZnJvbSBpcyBkZWNvbW1pdGVkLCBjb21taXQgdGhlIGVudGlyZSBzcGFuIGF0IG9uY2UgdG8gYXZv
aWQgY29tbWl0dGluZyBzcGFucyAxIHBhZ2UgYXQgYSB0aW1lLgorICAgICAgICBBU1NFUlQoc3Bh
bi0+ZGVjb21taXR0ZWQpOworICAgICAgICBUQ01hbGxvY19TeXN0ZW1Db21taXQocmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4oc3Bhbi0+c3RhcnQgPDwga1BhZ2VTaGlmdCksIHN0YXRpY19jYXN0PHNp
emVfdD4oc3Bhbi0+bGVuZ3RoIDw8IGtQYWdlU2hpZnQpKTsKKyAgICAgICAgc3Bhbi0+ZGVjb21t
aXR0ZWQgPSBmYWxzZTsKKyNpZiBVU0VfQkFDS0dST1VORF9USFJFQURfVE9fU0NBVkVOR0VfTUVN
T1JZCisgICAgICAgIGZyZWVDb21taXR0ZWRQYWdlcyArPSBzcGFuLT5sZW5ndGg7CisjZW5kaWYK
KyAgICB9CisKKyAgICBjb25zdCBpbnQgZXh0cmEgPSBzdGF0aWNfY2FzdDxpbnQ+KHNwYW4tPmxl
bmd0aCAtIG4pOworICAgIEFTU0VSVChleHRyYSA+PSAwKTsKKyAgICBpZiAoZXh0cmEgPiAwKSB7
CisgICAgICAgIFNwYW4qIGxlZnRvdmVyID0gTmV3U3BhbihzcGFuLT5zdGFydCArIG4sIGV4dHJh
KTsKKyAgICAgICAgbGVmdG92ZXItPmZyZWUgPSAxOworICAgICAgICBsZWZ0b3Zlci0+ZGVjb21t
aXR0ZWQgPSBmYWxzZTsKKyAgICAgICAgRXZlbnQobGVmdG92ZXIsICdTJywgZXh0cmEpOworICAg
ICAgICBSZWNvcmRTcGFuKGxlZnRvdmVyKTsKKworICAgICAgICAvLyBQbGFjZSBsZWZ0b3ZlciBz
cGFuIG9uIGFwcHJvcHJpYXRlIGZyZWUgbGlzdAorICAgICAgICBTcGFuTGlzdCogbGlzdHBhaXIg
PSAoc3RhdGljX2Nhc3Q8c2l6ZV90PihleHRyYSkgPCBrTWF4UGFnZXMpID8gJmZyZWVTcGFuTGlz
dFtleHRyYV0gOiAmbGFyZ2U7CisgICAgICAgIFNwYW4qIGRzdCA9ICZsaXN0cGFpci0+bm9ybWFs
OworICAgICAgICBETExQcmVwZW5kKGRzdCwgbGVmdG92ZXIpOworCisgICAgICAgIHNwYW4tPmxl
bmd0aCA9IG47CisgICAgICAgIHBhZ2VNYXAuc2V0KHNwYW4tPnN0YXJ0ICsgbiAtIDEsIHNwYW4p
OworICAgIH0KIH0KIAogc3RhdGljIEFMV0FZU19JTkxJTkUgdm9pZCBtZXJnZURlY29tbWl0dGVk
U3RhdGVzKFNwYW4qIGRlc3RpbmF0aW9uLCBTcGFuKiBvdGhlcikKQEAgLTE4NDcsNDMyICsxODcy
LDQ1NSBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSB2b2lkIG1lcmdlRGVjb21taXR0CiAgICAgfQog
fQogCi1pbmxpbmUgdm9pZCBUQ01hbGxvY19QYWdlSGVhcDo6RGVsZXRlKFNwYW4qIHNwYW4pIHsK
LSAgQVNTRVJUKENoZWNrKCkpOwotICBBU1NFUlQoIXNwYW4tPmZyZWUpOwotICBBU1NFUlQoc3Bh
bi0+bGVuZ3RoID4gMCk7Ci0gIEFTU0VSVChHZXREZXNjcmlwdG9yKHNwYW4tPnN0YXJ0KSA9PSBz
cGFuKTsKLSAgQVNTRVJUKEdldERlc2NyaXB0b3Ioc3Bhbi0+c3RhcnQgKyBzcGFuLT5sZW5ndGgg
LSAxKSA9PSBzcGFuKTsKLSAgc3Bhbi0+c2l6ZWNsYXNzID0gMDsKK2lubGluZSB2b2lkIFRDTWFs
bG9jUGFnZUhlYXA6OkRlbGV0ZShTcGFuKiBzcGFuKQoreworICAgIEFTU0VSVChDaGVjaygpKTsK
KyAgICBBU1NFUlQoIXNwYW4tPmZyZWUpOworICAgIEFTU0VSVChzcGFuLT5sZW5ndGggPiAwKTsK
KyAgICBBU1NFUlQoR2V0RGVzY3JpcHRvcihzcGFuLT5zdGFydCkgPT0gc3Bhbik7CisgICAgQVNT
RVJUKEdldERlc2NyaXB0b3Ioc3Bhbi0+c3RhcnQgKyBzcGFuLT5sZW5ndGggLSAxKSA9PSBzcGFu
KTsKKyAgICBzcGFuLT5zaXplQ2xhc3MgPSAwOwogI2lmbmRlZiBOT19UQ01BTExPQ19TQU1QTEVT
Ci0gIHNwYW4tPnNhbXBsZSA9IDA7CisgICAgc3Bhbi0+c2FtcGxlID0gMDsKICNlbmRpZgogCi0g
IC8vIENvYWxlc2NlIC0tIHdlIGd1YXJhbnRlZSB0aGF0ICJwIiAhPSAwLCBzbyBubyBib3VuZHMg
Y2hlY2tpbmcKLSAgLy8gbmVjZXNzYXJ5LiAgV2UgZG8gbm90IGJvdGhlciByZXNldHRpbmcgdGhl
IHN0YWxlIHBhZ2VtYXAKLSAgLy8gZW50cmllcyBmb3IgdGhlIHBpZWNlcyB3ZSBhcmUgbWVyZ2lu
ZyB0b2dldGhlciBiZWNhdXNlIHdlIG9ubHkKLSAgLy8gY2FyZSBhYm91dCB0aGUgcGFnZW1hcCBl
bnRyaWVzIGZvciB0aGUgYm91bmRhcmllcy4KKyAgICAvLyBDb2FsZXNjZSAtLSB3ZSBndWFyYW50
ZWUgdGhhdCAicCIgIT0gMCwgc28gbm8gYm91bmRzIGNoZWNraW5nCisgICAgLy8gbmVjZXNzYXJ5
LiBXZSBkbyBub3QgYm90aGVyIHJlc2V0dGluZyB0aGUgc3RhbGUgcGFnZU1hcAorICAgIC8vIGVu
dHJpZXMgZm9yIHRoZSBwaWVjZXMgd2UgYXJlIG1lcmdpbmcgdG9nZXRoZXIgYmVjYXVzZSB3ZSBv
bmx5CisgICAgLy8gY2FyZSBhYm91dCB0aGUgcGFnZU1hcCBlbnRyaWVzIGZvciB0aGUgYm91bmRh
cmllcy4KICNpZiBVU0VfQkFDS0dST1VORF9USFJFQURfVE9fU0NBVkVOR0VfTUVNT1JZCi0gIC8v
IFRyYWNrIHRoZSB0b3RhbCBzaXplIG9mIHRoZSBuZWlnaGJvcmluZyBmcmVlIHNwYW5zIHRoYXQg
YXJlIGNvbW1pdHRlZC4KLSAgTGVuZ3RoIG5laWdoYm9yaW5nQ29tbWl0dGVkU3BhbnNMZW5ndGgg
PSAwOworICAgIC8vIFRyYWNrIHRoZSB0b3RhbCBzaXplIG9mIHRoZSBuZWlnaGJvcmluZyBmcmVl
IHNwYW5zIHRoYXQgYXJlIGNvbW1pdHRlZC4KKyAgICBMZW5ndGggbmVpZ2hib3JpbmdDb21taXR0
ZWRTcGFuc0xlbmd0aCA9IDA7CiAjZW5kaWYKLSAgY29uc3QgUGFnZUlEIHAgPSBzcGFuLT5zdGFy
dDsKLSAgY29uc3QgTGVuZ3RoIG4gPSBzcGFuLT5sZW5ndGg7Ci0gIFNwYW4qIHByZXYgPSBHZXRE
ZXNjcmlwdG9yKHAtMSk7Ci0gIGlmIChwcmV2ICE9IE5VTEwgJiYgcHJldi0+ZnJlZSkgewotICAg
IC8vIE1lcmdlIHByZWNlZGluZyBzcGFuIGludG8gdGhpcyBzcGFuCi0gICAgQVNTRVJUKHByZXYt
PnN0YXJ0ICsgcHJldi0+bGVuZ3RoID09IHApOwotICAgIGNvbnN0IExlbmd0aCBsZW4gPSBwcmV2
LT5sZW5ndGg7CisgICAgY29uc3QgUGFnZUlEIHAgPSBzcGFuLT5zdGFydDsKKyAgICBjb25zdCBM
ZW5ndGggbiA9IHNwYW4tPmxlbmd0aDsKKyAgICBTcGFuKiBwcmV2ID0gR2V0RGVzY3JpcHRvcihw
LTEpOworICAgIGlmIChwcmV2ICYmIHByZXYtPmZyZWUpIHsKKyAgICAgICAgLy8gTWVyZ2UgcHJl
Y2VkaW5nIHNwYW4gaW50byB0aGlzIHNwYW4KKyAgICAgICAgQVNTRVJUKHByZXYtPnN0YXJ0ICsg
cHJldi0+bGVuZ3RoID09IHApOworICAgICAgICBjb25zdCBMZW5ndGggbGVuID0gcHJldi0+bGVu
Z3RoOwogI2lmIFVTRV9CQUNLR1JPVU5EX1RIUkVBRF9UT19TQ0FWRU5HRV9NRU1PUlkKLSAgICBp
ZiAoIXByZXYtPmRlY29tbWl0dGVkKQotICAgICAgICBuZWlnaGJvcmluZ0NvbW1pdHRlZFNwYW5z
TGVuZ3RoICs9IGxlbjsKKyAgICAgICAgaWYgKCFwcmV2LT5kZWNvbW1pdHRlZCkKKyAgICAgICAg
ICAgIG5laWdoYm9yaW5nQ29tbWl0dGVkU3BhbnNMZW5ndGggKz0gbGVuOwogI2VuZGlmCi0gICAg
bWVyZ2VEZWNvbW1pdHRlZFN0YXRlcyhzcGFuLCBwcmV2KTsKLSAgICBETExfUmVtb3ZlKHByZXYp
OwotICAgIERlbGV0ZVNwYW4ocHJldik7Ci0gICAgc3Bhbi0+c3RhcnQgLT0gbGVuOwotICAgIHNw
YW4tPmxlbmd0aCArPSBsZW47Ci0gICAgcGFnZW1hcF8uc2V0KHNwYW4tPnN0YXJ0LCBzcGFuKTsK
LSAgICBFdmVudChzcGFuLCAnTCcsIGxlbik7Ci0gIH0KLSAgU3BhbiogbmV4dCA9IEdldERlc2Ny
aXB0b3IocCtuKTsKLSAgaWYgKG5leHQgIT0gTlVMTCAmJiBuZXh0LT5mcmVlKSB7Ci0gICAgLy8g
TWVyZ2UgbmV4dCBzcGFuIGludG8gdGhpcyBzcGFuCi0gICAgQVNTRVJUKG5leHQtPnN0YXJ0ID09
IHArbik7Ci0gICAgY29uc3QgTGVuZ3RoIGxlbiA9IG5leHQtPmxlbmd0aDsKKyAgICAgICAgbWVy
Z2VEZWNvbW1pdHRlZFN0YXRlcyhzcGFuLCBwcmV2KTsKKyAgICAgICAgRExMUmVtb3ZlKHByZXYp
OworICAgICAgICBEZWxldGVTcGFuKHByZXYpOworICAgICAgICBzcGFuLT5zdGFydCAtPSBsZW47
CisgICAgICAgIHNwYW4tPmxlbmd0aCArPSBsZW47CisgICAgICAgIHBhZ2VNYXAuc2V0KHNwYW4t
PnN0YXJ0LCBzcGFuKTsKKyAgICAgICAgRXZlbnQoc3BhbiwgJ0wnLCBsZW4pOworICAgIH0KKyAg
ICBTcGFuKiBuZXh0ID0gR2V0RGVzY3JpcHRvcihwK24pOworICAgIGlmIChuZXh0ICYmIG5leHQt
PmZyZWUpIHsKKyAgICAgICAgLy8gTWVyZ2UgbmV4dCBzcGFuIGludG8gdGhpcyBzcGFuCisgICAg
ICAgIEFTU0VSVChuZXh0LT5zdGFydCA9PSBwK24pOworICAgICAgICBjb25zdCBMZW5ndGggbGVu
ID0gbmV4dC0+bGVuZ3RoOwogI2lmIFVTRV9CQUNLR1JPVU5EX1RIUkVBRF9UT19TQ0FWRU5HRV9N
RU1PUlkKLSAgICBpZiAoIW5leHQtPmRlY29tbWl0dGVkKQotICAgICAgICBuZWlnaGJvcmluZ0Nv
bW1pdHRlZFNwYW5zTGVuZ3RoICs9IGxlbjsKKyAgICAgICAgaWYgKCFuZXh0LT5kZWNvbW1pdHRl
ZCkKKyAgICAgICAgICAgIG5laWdoYm9yaW5nQ29tbWl0dGVkU3BhbnNMZW5ndGggKz0gbGVuOwog
I2VuZGlmCi0gICAgbWVyZ2VEZWNvbW1pdHRlZFN0YXRlcyhzcGFuLCBuZXh0KTsKLSAgICBETExf
UmVtb3ZlKG5leHQpOwotICAgIERlbGV0ZVNwYW4obmV4dCk7Ci0gICAgc3Bhbi0+bGVuZ3RoICs9
IGxlbjsKLSAgICBwYWdlbWFwXy5zZXQoc3Bhbi0+c3RhcnQgKyBzcGFuLT5sZW5ndGggLSAxLCBz
cGFuKTsKLSAgICBFdmVudChzcGFuLCAnUicsIGxlbik7Ci0gIH0KLQotICBFdmVudChzcGFuLCAn
RCcsIHNwYW4tPmxlbmd0aCk7Ci0gIHNwYW4tPmZyZWUgPSAxOwotICBpZiAoc3Bhbi0+ZGVjb21t
aXR0ZWQpIHsKLSAgICBpZiAoc3Bhbi0+bGVuZ3RoIDwga01heFBhZ2VzKQotICAgICAgRExMX1By
ZXBlbmQoJmZyZWVfW3NwYW4tPmxlbmd0aF0ucmV0dXJuZWQsIHNwYW4pOwotICAgIGVsc2UKLSAg
ICAgIERMTF9QcmVwZW5kKCZsYXJnZV8ucmV0dXJuZWQsIHNwYW4pOwotICB9IGVsc2UgewotICAg
IGlmIChzcGFuLT5sZW5ndGggPCBrTWF4UGFnZXMpCi0gICAgICBETExfUHJlcGVuZCgmZnJlZV9b
c3Bhbi0+bGVuZ3RoXS5ub3JtYWwsIHNwYW4pOwotICAgIGVsc2UKLSAgICAgIERMTF9QcmVwZW5k
KCZsYXJnZV8ubm9ybWFsLCBzcGFuKTsKLSAgfQotICBmcmVlX3BhZ2VzXyArPSBuOworICAgICAg
ICBtZXJnZURlY29tbWl0dGVkU3RhdGVzKHNwYW4sIG5leHQpOworICAgICAgICBETExSZW1vdmUo
bmV4dCk7CisgICAgICAgIERlbGV0ZVNwYW4obmV4dCk7CisgICAgICAgIHNwYW4tPmxlbmd0aCAr
PSBsZW47CisgICAgICAgIHBhZ2VNYXAuc2V0KHNwYW4tPnN0YXJ0ICsgc3Bhbi0+bGVuZ3RoIC0g
MSwgc3Bhbik7CisgICAgICAgIEV2ZW50KHNwYW4sICdSJywgbGVuKTsKKyAgICB9CisKKyAgICBF
dmVudChzcGFuLCAnRCcsIHNwYW4tPmxlbmd0aCk7CisgICAgc3Bhbi0+ZnJlZSA9IDE7CisgICAg
aWYgKHNwYW4tPmRlY29tbWl0dGVkKSB7CisgICAgICAgIGlmIChzcGFuLT5sZW5ndGggPCBrTWF4
UGFnZXMpCisgICAgICAgICAgICBETExQcmVwZW5kKCZmcmVlU3Bhbkxpc3Rbc3Bhbi0+bGVuZ3Ro
XS5yZXR1cm5lZCwgc3Bhbik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIERMTFByZXBlbmQo
JmxhcmdlLnJldHVybmVkLCBzcGFuKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoc3Bhbi0+
bGVuZ3RoIDwga01heFBhZ2VzKQorICAgICAgICAgICAgRExMUHJlcGVuZCgmZnJlZVNwYW5MaXN0
W3NwYW4tPmxlbmd0aF0ubm9ybWFsLCBzcGFuKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
RExMUHJlcGVuZCgmbGFyZ2Uubm9ybWFsLCBzcGFuKTsKKyAgICB9CisgICAgZnJlZVBhZ2VzICs9
IG47CiAKICNpZiBVU0VfQkFDS0dST1VORF9USFJFQURfVE9fU0NBVkVOR0VfTUVNT1JZCi0gIGlm
IChzcGFuLT5kZWNvbW1pdHRlZCkgewotICAgICAgLy8gSWYgdGhlIG1lcmdlZCBzcGFuIGlzIGRl
Y29tbWl0dGVkLCB0aGF0IG1lYW5zIHdlIGRlY29tbWl0dGVkIGFueSBuZWlnaGJvcmluZyBzcGFu
cyB0aGF0IHdlcmUKLSAgICAgIC8vIGNvbW1pdHRlZC4gIFVwZGF0ZSB0aGUgZnJlZSBjb21taXR0
ZWQgcGFnZXMgY291bnQuCi0gICAgICBmcmVlX2NvbW1pdHRlZF9wYWdlc18gLT0gbmVpZ2hib3Jp
bmdDb21taXR0ZWRTcGFuc0xlbmd0aDsKLSAgICAgIGlmIChmcmVlX2NvbW1pdHRlZF9wYWdlc18g
PCBtaW5fZnJlZV9jb21taXR0ZWRfcGFnZXNfc2luY2VfbGFzdF9zY2F2ZW5nZV8pCi0gICAgICAg
ICAgICBtaW5fZnJlZV9jb21taXR0ZWRfcGFnZXNfc2luY2VfbGFzdF9zY2F2ZW5nZV8gPSBmcmVl
X2NvbW1pdHRlZF9wYWdlc187Ci0gIH0gZWxzZSB7Ci0gICAgICAvLyBJZiB0aGUgbWVyZ2VkIHNw
YW4gcmVtYWlucyBjb21taXR0ZWQsIGFkZCB0aGUgZGVsZXRlZCBzcGFuJ3Mgc2l6ZSB0byB0aGUg
ZnJlZSBjb21taXR0ZWQgcGFnZXMgY291bnQuCi0gICAgICBmcmVlX2NvbW1pdHRlZF9wYWdlc18g
Kz0gbjsKLSAgfQorICAgIGlmIChzcGFuLT5kZWNvbW1pdHRlZCkgeworICAgICAgICAvLyBJZiB0
aGUgbWVyZ2VkIHNwYW4gaXMgZGVjb21taXR0ZWQsIHRoYXQgbWVhbnMgd2UgZGVjb21taXR0ZWQg
YW55IG5laWdoYm9yaW5nIHNwYW5zIHRoYXQgd2VyZQorICAgICAgICAvLyBjb21taXR0ZWQuIFVw
ZGF0ZSB0aGUgZnJlZSBjb21taXR0ZWQgcGFnZXMgY291bnQuCisgICAgICAgIGZyZWVDb21taXR0
ZWRQYWdlcyAtPSBuZWlnaGJvcmluZ0NvbW1pdHRlZFNwYW5zTGVuZ3RoOworICAgICAgICBpZiAo
ZnJlZUNvbW1pdHRlZFBhZ2VzIDwgbWluRnJlZUNvbW1pdHRlZFBhZ2VzU2luY2VMYXN0U2NhdmVu
Z2UpCisgICAgICAgICAgICBtaW5GcmVlQ29tbWl0dGVkUGFnZXNTaW5jZUxhc3RTY2F2ZW5nZSA9
IGZyZWVDb21taXR0ZWRQYWdlczsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBJZiB0aGUgbWVy
Z2VkIHNwYW4gcmVtYWlucyBjb21taXR0ZWQsIGFkZCB0aGUgZGVsZXRlZCBzcGFuJ3Mgc2l6ZSB0
byB0aGUgZnJlZSBjb21taXR0ZWQgcGFnZXMgY291bnQuCisgICAgICAgIGZyZWVDb21taXR0ZWRQ
YWdlcyArPSBuOworICAgIH0KIAotICAvLyBNYWtlIHN1cmUgdGhlIHNjYXZlbmdlIHRocmVhZCBi
ZWNvbWVzIGFjdGl2ZSBpZiB3ZSBoYXZlIGVub3VnaCBmcmVlZCBwYWdlcyB0byByZWxlYXNlIHNv
bWUgYmFjayB0byB0aGUgc3lzdGVtLgotICBzaWduYWxTY2F2ZW5nZXIoKTsKKyAgICAvLyBNYWtl
IHN1cmUgdGhlIHNjYXZlbmdlIHRocmVhZCBiZWNvbWVzIGFjdGl2ZSBpZiB3ZSBoYXZlIGVub3Vn
aCBmcmVlZCBwYWdlcyB0byByZWxlYXNlIHNvbWUgYmFjayB0byB0aGUgc3lzdGVtLgorICAgIHNp
Z25hbFNjYXZlbmdlcigpOwogI2Vsc2UKLSAgSW5jcmVtZW50YWxTY2F2ZW5nZShuKTsKKyAgICBJ
bmNyZW1lbnRhbFNjYXZlbmdlKG4pOwogI2VuZGlmCiAKLSAgQVNTRVJUKENoZWNrKCkpOworICAg
IEFTU0VSVChDaGVjaygpKTsKIH0KIAogI2lmICFVU0VfQkFDS0dST1VORF9USFJFQURfVE9fU0NB
VkVOR0VfTUVNT1JZCi12b2lkIFRDTWFsbG9jX1BhZ2VIZWFwOjpJbmNyZW1lbnRhbFNjYXZlbmdl
KExlbmd0aCBuKSB7Ci0gIC8vIEZhc3QgcGF0aDsgbm90IHlldCB0aW1lIHRvIHJlbGVhc2UgbWVt
b3J5Ci0gIHNjYXZlbmdlX2NvdW50ZXJfIC09IG47Ci0gIGlmIChzY2F2ZW5nZV9jb3VudGVyXyA+
PSAwKSByZXR1cm47ICAvLyBOb3QgeWV0IHRpbWUgdG8gc2NhdmVuZ2UKK3ZvaWQgVENNYWxsb2NQ
YWdlSGVhcDo6SW5jcmVtZW50YWxTY2F2ZW5nZShMZW5ndGggbikKK3sKKyAgICAvLyBGYXN0IHBh
dGg7IG5vdCB5ZXQgdGltZSB0byByZWxlYXNlIG1lbW9yeQorICAgIHNjYXZlbmdlQ291bnRlciAt
PSBuOworICAgIGlmIChzY2F2ZW5nZUNvdW50ZXIgPj0gMCkKKyAgICAgICAgcmV0dXJuOyAvLyBO
b3QgeWV0IHRpbWUgdG8gc2NhdmVuZ2UKIAogI2lmIFBMQVRGT1JNKElPUykKLSAgc3RhdGljIGNv
bnN0IHNpemVfdCBrRGVmYXVsdFJlbGVhc2VEZWxheSA9IDY0OworICAgIHN0YXRpYyBjb25zdCBz
aXplX3Qga0RlZmF1bHRSZWxlYXNlRGVsYXkgPSA2NDsKICNlbHNlCi0gIC8vIElmIHRoZXJlIGlz
IG5vdGhpbmcgdG8gcmVsZWFzZSwgd2FpdCBmb3Igc28gbWFueSBwYWdlcyBiZWZvcmUKLSAgLy8g
c2NhdmVuZ2luZyBhZ2Fpbi4gIFdpdGggNEsgcGFnZXMsIHRoaXMgY29tZXMgdG8gMTZNQiBvZiBt
ZW1vcnkuCi0gIHN0YXRpYyBjb25zdCBzaXplX3Qga0RlZmF1bHRSZWxlYXNlRGVsYXkgPSAxIDw8
IDg7Ci0jZW5kaWYKLQotICAvLyBGaW5kIGluZGV4IG9mIGZyZWUgbGlzdCB0byBzY2F2ZW5nZQot
ICBzaXplX3QgaW5kZXggPSBzY2F2ZW5nZV9pbmRleF8gKyAxOwotICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGtNYXhQYWdlcysxOyBpKyspIHsKLSAgICBpZiAoaW5kZXggPiBrTWF4UGFnZXMpIGlu
ZGV4ID0gMDsKLSAgICBTcGFuTGlzdCogc2xpc3QgPSAoaW5kZXggPT0ga01heFBhZ2VzKSA/ICZs
YXJnZV8gOiAmZnJlZV9baW5kZXhdOwotICAgIGlmICghRExMX0lzRW1wdHkoJnNsaXN0LT5ub3Jt
YWwpKSB7Ci0gICAgICAvLyBSZWxlYXNlIHRoZSBsYXN0IHNwYW4gb24gdGhlIG5vcm1hbCBwb3J0
aW9uIG9mIHRoaXMgbGlzdAotICAgICAgU3BhbiogcyA9IHNsaXN0LT5ub3JtYWwucHJldjsKLSAg
ICAgIERMTF9SZW1vdmUocyk7Ci0gICAgICBUQ01hbGxvY19TeXN0ZW1SZWxlYXNlKHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KHMtPnN0YXJ0IDw8IGtQYWdlU2hpZnQpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxzaXplX3Q+KHMtPmxlbmd0aCA8PCBrUGFnZVNoaWZ0
KSk7Ci0gICAgICBzLT5kZWNvbW1pdHRlZCA9IHRydWU7Ci0gICAgICBETExfUHJlcGVuZCgmc2xp
c3QtPnJldHVybmVkLCBzKTsKKyAgICAvLyBJZiB0aGVyZSBpcyBub3RoaW5nIHRvIHJlbGVhc2Us
IHdhaXQgZm9yIHNvIG1hbnkgcGFnZXMgYmVmb3JlCisgICAgLy8gc2NhdmVuZ2luZyBhZ2Fpbi4g
V2l0aCA0SyBwYWdlcywgdGhpcyBjb21lcyB0byAxNk1CIG9mIG1lbW9yeS4KKyAgICBzdGF0aWMg
Y29uc3Qgc2l6ZV90IGtEZWZhdWx0UmVsZWFzZURlbGF5ID0gMSA8PCA4OworI2VuZGlmCisKKyAg
ICAvLyBGaW5kIGluZGV4IG9mIGZyZWUgbGlzdCB0byBzY2F2ZW5nZQorICAgIHNpemVfdCBpbmRl
eCA9IHNjYXZlbmdlSW5kZXggKyAxOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga01heFBh
Z2VzKzE7IGkrKykgeworICAgICAgICBpZiAoaW5kZXggPiBrTWF4UGFnZXMpCisgICAgICAgICAg
ICBpbmRleCA9IDA7CisgICAgICAgIFNwYW5MaXN0KiBzbGlzdCA9IChpbmRleCA9PSBrTWF4UGFn
ZXMpID8gJmxhcmdlIDogJmZyZWVTcGFuTGlzdFtpbmRleF07CisgICAgICAgIGlmICghRExMX0lz
RW1wdHkoJnNsaXN0LT5ub3JtYWwpKSB7CisgICAgICAgICAgICAvLyBSZWxlYXNlIHRoZSBsYXN0
IHNwYW4gb24gdGhlIG5vcm1hbCBwb3J0aW9uIG9mIHRoaXMgbGlzdAorICAgICAgICAgICAgU3Bh
biogcyA9IHNsaXN0LT5ub3JtYWwucHJldjsKKyAgICAgICAgICAgIERMTFJlbW92ZShzKTsKKyAg
ICAgICAgICAgIFRDTWFsbG9jX1N5c3RlbVJlbGVhc2UocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
cy0+c3RhcnQgPDwga1BhZ2VTaGlmdCksCisgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8c2l6
ZV90PihzLT5sZW5ndGggPDwga1BhZ2VTaGlmdCkpOworICAgICAgICAgICAgcy0+ZGVjb21taXR0
ZWQgPSB0cnVlOworICAgICAgICAgICAgRExMUHJlcGVuZCgmc2xpc3QtPnJldHVybmVkLCBzKTsK
IAogI2lmIFBMQVRGT1JNKElPUykKLSAgICAgIHNjYXZlbmdlX2NvdW50ZXJfID0gc3RkOjptYXg8
c2l6ZV90PigxNlVMLCBzdGQ6Om1pbjxzaXplX3Q+KGtEZWZhdWx0UmVsZWFzZURlbGF5LCBrRGVm
YXVsdFJlbGVhc2VEZWxheSAtIChmcmVlX3BhZ2VzXyAvIGtEZWZhdWx0UmVsZWFzZURlbGF5KSkp
OworICAgICAgICAgICAgc2NhdmVuZ2VDb3VudGVyID0gc3RkOjptYXg8c2l6ZV90PigxNlVMLCBz
dGQ6Om1pbjxzaXplX3Q+KGtEZWZhdWx0UmVsZWFzZURlbGF5LCBrRGVmYXVsdFJlbGVhc2VEZWxh
eSAtIChmcmVlUGFnZXMgLyBrRGVmYXVsdFJlbGVhc2VEZWxheSkpKTsKICNlbHNlCi0gICAgICBz
Y2F2ZW5nZV9jb3VudGVyXyA9IHN0ZDo6bWF4PHNpemVfdD4oNjRVTCwgc3RkOjptaW48c2l6ZV90
PihrRGVmYXVsdFJlbGVhc2VEZWxheSwga0RlZmF1bHRSZWxlYXNlRGVsYXkgLSAoZnJlZV9wYWdl
c18gLyBrRGVmYXVsdFJlbGVhc2VEZWxheSkpKTsKKyAgICAgICAgICAgIHNjYXZlbmdlQ291bnRl
ciA9IHN0ZDo6bWF4PHNpemVfdD4oNjRVTCwgc3RkOjptaW48c2l6ZV90PihrRGVmYXVsdFJlbGVh
c2VEZWxheSwga0RlZmF1bHRSZWxlYXNlRGVsYXkgLSAoZnJlZVBhZ2VzIC8ga0RlZmF1bHRSZWxl
YXNlRGVsYXkpKSk7CiAjZW5kaWYKIAotICAgICAgaWYgKGluZGV4ID09IGtNYXhQYWdlcyAmJiAh
RExMX0lzRW1wdHkoJnNsaXN0LT5ub3JtYWwpKQotICAgICAgICBzY2F2ZW5nZV9pbmRleF8gPSBp
bmRleCAtIDE7Ci0gICAgICBlbHNlCi0gICAgICAgIHNjYXZlbmdlX2luZGV4XyA9IGluZGV4Owot
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgaWYgKGluZGV4ID09IGtNYXhQYWdlcyAmJiAhRExM
X0lzRW1wdHkoJnNsaXN0LT5ub3JtYWwpKQorICAgICAgICAgICAgICAgIHNjYXZlbmdlSW5kZXgg
PSBpbmRleCAtIDE7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc2NhdmVuZ2VJ
bmRleCA9IGluZGV4OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlu
ZGV4Kys7CiAgICAgfQotICAgIGluZGV4Kys7Ci0gIH0KIAotICAvLyBOb3RoaW5nIHRvIHNjYXZl
bmdlLCBkZWxheSBmb3IgYSB3aGlsZQotICBzY2F2ZW5nZV9jb3VudGVyXyA9IGtEZWZhdWx0UmVs
ZWFzZURlbGF5OworICAgIC8vIE5vdGhpbmcgdG8gc2NhdmVuZ2UsIGRlbGF5IGZvciBhIHdoaWxl
CisgICAgc2NhdmVuZ2VDb3VudGVyID0ga0RlZmF1bHRSZWxlYXNlRGVsYXk7CiB9CiAjZW5kaWYK
IAotdm9pZCBUQ01hbGxvY19QYWdlSGVhcDo6UmVnaXN0ZXJTaXplQ2xhc3MoU3Bhbiogc3Bhbiwg
c2l6ZV90IHNjKSB7Ci0gIC8vIEFzc29jaWF0ZSBzcGFuIG9iamVjdCB3aXRoIGFsbCBpbnRlcmlv
ciBwYWdlcyBhcyB3ZWxsCi0gIEFTU0VSVCghc3Bhbi0+ZnJlZSk7Ci0gIEFTU0VSVChHZXREZXNj
cmlwdG9yKHNwYW4tPnN0YXJ0KSA9PSBzcGFuKTsKLSAgQVNTRVJUKEdldERlc2NyaXB0b3Ioc3Bh
bi0+c3RhcnQrc3Bhbi0+bGVuZ3RoLTEpID09IHNwYW4pOwotICBFdmVudChzcGFuLCAnQycsIHNj
KTsKLSAgc3Bhbi0+c2l6ZWNsYXNzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihzYyk7Ci0g
IGZvciAoTGVuZ3RoIGkgPSAxOyBpIDwgc3Bhbi0+bGVuZ3RoLTE7IGkrKykgewotICAgIHBhZ2Vt
YXBfLnNldChzcGFuLT5zdGFydCtpLCBzcGFuKTsKLSAgfQordm9pZCBUQ01hbGxvY1BhZ2VIZWFw
OjpSZWdpc3RlclNpemVDbGFzcyhTcGFuKiBzcGFuLCBzaXplX3Qgc2MpCit7CisgICAgLy8gQXNz
b2NpYXRlIHNwYW4gb2JqZWN0IHdpdGggYWxsIGludGVyaW9yIHBhZ2VzIGFzIHdlbGwKKyAgICBB
U1NFUlQoIXNwYW4tPmZyZWUpOworICAgIEFTU0VSVChHZXREZXNjcmlwdG9yKHNwYW4tPnN0YXJ0
KSA9PSBzcGFuKTsKKyAgICBBU1NFUlQoR2V0RGVzY3JpcHRvcihzcGFuLT5zdGFydCtzcGFuLT5s
ZW5ndGgtMSkgPT0gc3Bhbik7CisgICAgRXZlbnQoc3BhbiwgJ0MnLCBzYyk7CisgICAgc3Bhbi0+
c2l6ZUNsYXNzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHNjKTsKKyAgICBmb3IgKExlbmd0aCBp
ID0gMTsgaSA8IHNwYW4tPmxlbmd0aC0xOyBpKyspCisgICAgICAgIHBhZ2VNYXAuc2V0KHNwYW4t
PnN0YXJ0K2ksIHNwYW4pOwogfQogICAgIAogI2lmZGVmIFdURl9DSEFOR0VTCi1zaXplX3QgVENN
YWxsb2NfUGFnZUhlYXA6OlJldHVybmVkQnl0ZXMoKSBjb25zdCB7CitzaXplX3QgVENNYWxsb2NQ
YWdlSGVhcDo6UmV0dXJuZWRCeXRlcygpIGNvbnN0Cit7CiAgICAgc2l6ZV90IHJlc3VsdCA9IDA7
CiAgICAgZm9yICh1bnNpZ25lZCBzID0gMDsgcyA8IGtNYXhQYWdlczsgcysrKSB7Ci0gICAgICAg
IGNvbnN0IGludCByX2xlbmd0aCA9IERMTF9MZW5ndGgoJmZyZWVfW3NdLnJldHVybmVkKTsKLSAg
ICAgICAgdW5zaWduZWQgcl9wYWdlcyA9IHMgKiByX2xlbmd0aDsKLSAgICAgICAgcmVzdWx0ICs9
IHJfcGFnZXMgPDwga1BhZ2VTaGlmdDsKKyAgICAgICAgY29uc3QgaW50IHJMZW5ndGggPSBETExM
ZW5ndGgoJmZyZWVTcGFuTGlzdFtzXS5yZXR1cm5lZCk7CisgICAgICAgIHVuc2lnbmVkIHJQYWdl
cyA9IHMgKiByTGVuZ3RoOworICAgICAgICByZXN1bHQgKz0gclBhZ2VzIDw8IGtQYWdlU2hpZnQ7
CiAgICAgfQogICAgIAotICAgIGZvciAoU3BhbiogcyA9IGxhcmdlXy5yZXR1cm5lZC5uZXh0OyBz
ICE9ICZsYXJnZV8ucmV0dXJuZWQ7IHMgPSBzLT5uZXh0KQorICAgIGZvciAoU3BhbiogcyA9IGxh
cmdlLnJldHVybmVkLm5leHQ7IHMgIT0gJmxhcmdlLnJldHVybmVkOyBzID0gcy0+bmV4dCkKICAg
ICAgICAgcmVzdWx0ICs9IHMtPmxlbmd0aCA8PCBrUGFnZVNoaWZ0OwogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAjZW5kaWYKIAogI2lmbmRlZiBXVEZfQ0hBTkdFUwotc3RhdGljIGRvdWJsZSBQYWdl
c1RvTUIodWludDY0X3QgcGFnZXMpIHsKK3N0YXRpYyBkb3VibGUgUGFnZXNUb01CKHVpbnQ2NF90
IHBhZ2VzKQorewogICByZXR1cm4gKHBhZ2VzIDw8IGtQYWdlU2hpZnQpIC8gMTA0ODU3Ni4wOwog
fQogCi12b2lkIFRDTWFsbG9jX1BhZ2VIZWFwOjpEdW1wKFRDTWFsbG9jX1ByaW50ZXIqIG91dCkg
ewotICBpbnQgbm9uZW1wdHlfc2l6ZXMgPSAwOwotICBmb3IgKGludCBzID0gMDsgcyA8IGtNYXhQ
YWdlczsgcysrKSB7Ci0gICAgaWYgKCFETExfSXNFbXB0eSgmZnJlZV9bc10ubm9ybWFsKSB8fCAh
RExMX0lzRW1wdHkoJmZyZWVfW3NdLnJldHVybmVkKSkgewotICAgICAgbm9uZW1wdHlfc2l6ZXMr
KzsKLSAgICB9Ci0gIH0KLSAgb3V0LT5wcmludGYoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7Ci0gIG91dC0+cHJpbnRmKCJQYWdlSGVhcDogJWQg
c2l6ZXM7ICU2LjFmIE1CIGZyZWVcbiIsCi0gICAgICAgICAgICAgIG5vbmVtcHR5X3NpemVzLCBQ
YWdlc1RvTUIoZnJlZV9wYWdlc18pKTsKLSAgb3V0LT5wcmludGYoIi0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7Ci0gIHVpbnQ2NF90IHRvdGFsX25v
cm1hbCA9IDA7Ci0gIHVpbnQ2NF90IHRvdGFsX3JldHVybmVkID0gMDsKLSAgZm9yIChpbnQgcyA9
IDA7IHMgPCBrTWF4UGFnZXM7IHMrKykgewotICAgIGNvbnN0IGludCBuX2xlbmd0aCA9IERMTF9M
ZW5ndGgoJmZyZWVfW3NdLm5vcm1hbCk7Ci0gICAgY29uc3QgaW50IHJfbGVuZ3RoID0gRExMX0xl
bmd0aCgmZnJlZV9bc10ucmV0dXJuZWQpOwotICAgIGlmIChuX2xlbmd0aCArIHJfbGVuZ3RoID4g
MCkgewotICAgICAgdWludDY0X3Qgbl9wYWdlcyA9IHMgKiBuX2xlbmd0aDsKLSAgICAgIHVpbnQ2
NF90IHJfcGFnZXMgPSBzICogcl9sZW5ndGg7Ci0gICAgICB0b3RhbF9ub3JtYWwgKz0gbl9wYWdl
czsKLSAgICAgIHRvdGFsX3JldHVybmVkICs9IHJfcGFnZXM7Ci0gICAgICBvdXQtPnByaW50Zigi
JTZ1IHBhZ2VzICogJTZ1IHNwYW5zIH4gJTYuMWYgTUI7ICU2LjFmIE1CIGN1bSIKLSAgICAgICAg
ICAgICAgICAgICI7IHVubWFwcGVkOiAlNi4xZiBNQjsgJTYuMWYgTUIgY3VtXG4iLAotICAgICAg
ICAgICAgICAgICAgcywKLSAgICAgICAgICAgICAgICAgIChuX2xlbmd0aCArIHJfbGVuZ3RoKSwK
LSAgICAgICAgICAgICAgICAgIFBhZ2VzVG9NQihuX3BhZ2VzICsgcl9wYWdlcyksCi0gICAgICAg
ICAgICAgICAgICBQYWdlc1RvTUIodG90YWxfbm9ybWFsICsgdG90YWxfcmV0dXJuZWQpLAotICAg
ICAgICAgICAgICAgICAgUGFnZXNUb01CKHJfcGFnZXMpLAotICAgICAgICAgICAgICAgICAgUGFn
ZXNUb01CKHRvdGFsX3JldHVybmVkKSk7Cit2b2lkIFRDTWFsbG9jUGFnZUhlYXA6OkR1bXAoVENN
YWxsb2NfUHJpbnRlciogb3V0KQoreworICAgIGludCBub25lbXB0eVNpemVzID0gMDsKKyAgICBm
b3IgKGludCBzID0gMDsgcyA8IGtNYXhQYWdlczsgcysrKQorICAgICAgICBpZiAoIURMTF9Jc0Vt
cHR5KCZmcmVlU3Bhbkxpc3Rbc10ubm9ybWFsKSB8fCAhRExMX0lzRW1wdHkoJmZyZWVTcGFuTGlz
dFtzXS5yZXR1cm5lZCkpCisgICAgICAgICAgICBub25lbXB0eVNpemVzKys7CisgICAgb3V0LT5w
cmludGYoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxu
Iik7CisgICAgb3V0LT5wcmludGYoIlBhZ2VIZWFwOiAlZCBzaXplczsgJTYuMWYgTUIgZnJlZVxu
Iiwgbm9uZW1wdHlTaXplcywgUGFnZXNUb01CKGZyZWVQYWdlcykpOworICAgIG91dC0+cHJpbnRm
KCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwor
ICAgIHVpbnQ2NF90IHRvdGFsTm9ybWFsID0gMDsKKyAgICB1aW50NjRfdCB0b3RhbFJldHVybmVk
ID0gMDsKKyAgICBmb3IgKGludCBzID0gMDsgcyA8IGtNYXhQYWdlczsgcysrKSB7CisgICAgICAg
IGNvbnN0IGludCBuTGVuZ3RoID0gRExMTGVuZ3RoKCZmcmVlU3Bhbkxpc3Rbc10ubm9ybWFsKTsK
KyAgICAgICAgY29uc3QgaW50IHJMZW5ndGggPSBETExMZW5ndGgoJmZyZWVTcGFuTGlzdFtzXS5y
ZXR1cm5lZCk7CisgICAgICAgIGlmIChuTGVuZ3RoICsgckxlbmd0aCA+IDApIHsKKyAgICAgICAg
ICAgIHVpbnQ2NF90IG5QYWdlcyA9IHMgKiBuTGVuZ3RoOworICAgICAgICAgICAgdWludDY0X3Qg
clBhZ2VzID0gcyAqIHJMZW5ndGg7CisgICAgICAgICAgICB0b3RhbE5vcm1hbCArPSBuUGFnZXM7
CisgICAgICAgICAgICB0b3RhbFJldHVybmVkICs9IHJQYWdlczsKKyAgICAgICAgICAgIG91dC0+
cHJpbnRmKCIlNnUgcGFnZXMgKiAlNnUgc3BhbnMgfiAlNi4xZiBNQjsgJTYuMWYgTUIgY3VtIgor
ICAgICAgICAgICAgICAgICI7IHVubWFwcGVkOiAlNi4xZiBNQjsgJTYuMWYgTUIgY3VtXG4iLAor
ICAgICAgICAgICAgICAgIHMsCisgICAgICAgICAgICAgICAgKG5MZW5ndGggKyByTGVuZ3RoKSwK
KyAgICAgICAgICAgICAgICBQYWdlc1RvTUIoblBhZ2VzICsgclBhZ2VzKSwKKyAgICAgICAgICAg
ICAgICBQYWdlc1RvTUIodG90YWxOb3JtYWwgKyB0b3RhbFJldHVybmVkKSwKKyAgICAgICAgICAg
ICAgICBQYWdlc1RvTUIoclBhZ2VzKSwKKyAgICAgICAgICAgICAgICBQYWdlc1RvTUIodG90YWxS
ZXR1cm5lZCkpOworICAgICAgICB9CiAgICAgfQotICB9CiAKLSAgdWludDY0X3Qgbl9wYWdlcyA9
IDA7Ci0gIHVpbnQ2NF90IHJfcGFnZXMgPSAwOwotICBpbnQgbl9zcGFucyA9IDA7Ci0gIGludCBy
X3NwYW5zID0gMDsKLSAgb3V0LT5wcmludGYoIk5vcm1hbCBsYXJnZSBzcGFuczpcbiIpOwotICBm
b3IgKFNwYW4qIHMgPSBsYXJnZV8ubm9ybWFsLm5leHQ7IHMgIT0gJmxhcmdlXy5ub3JtYWw7IHMg
PSBzLT5uZXh0KSB7Ci0gICAgb3V0LT5wcmludGYoIiAgIFsgJTYiIFBSSXVTICIgcGFnZXMgXSAl
Ni4xZiBNQlxuIiwKLSAgICAgICAgICAgICAgICBzLT5sZW5ndGgsIFBhZ2VzVG9NQihzLT5sZW5n
dGgpKTsKLSAgICBuX3BhZ2VzICs9IHMtPmxlbmd0aDsKLSAgICBuX3NwYW5zKys7Ci0gIH0KLSAg
b3V0LT5wcmludGYoIlVubWFwcGVkIGxhcmdlIHNwYW5zOlxuIik7Ci0gIGZvciAoU3BhbiogcyA9
IGxhcmdlXy5yZXR1cm5lZC5uZXh0OyBzICE9ICZsYXJnZV8ucmV0dXJuZWQ7IHMgPSBzLT5uZXh0
KSB7Ci0gICAgb3V0LT5wcmludGYoIiAgIFsgJTYiIFBSSXVTICIgcGFnZXMgXSAlNi4xZiBNQlxu
IiwKLSAgICAgICAgICAgICAgICBzLT5sZW5ndGgsIFBhZ2VzVG9NQihzLT5sZW5ndGgpKTsKLSAg
ICByX3BhZ2VzICs9IHMtPmxlbmd0aDsKLSAgICByX3NwYW5zKys7Ci0gIH0KLSAgdG90YWxfbm9y
bWFsICs9IG5fcGFnZXM7Ci0gIHRvdGFsX3JldHVybmVkICs9IHJfcGFnZXM7Ci0gIG91dC0+cHJp
bnRmKCI+MjU1ICAgbGFyZ2UgKiAlNnUgc3BhbnMgfiAlNi4xZiBNQjsgJTYuMWYgTUIgY3VtIgot
ICAgICAgICAgICAgICAiOyB1bm1hcHBlZDogJTYuMWYgTUI7ICU2LjFmIE1CIGN1bVxuIiwKLSAg
ICAgICAgICAgICAgKG5fc3BhbnMgKyByX3NwYW5zKSwKLSAgICAgICAgICAgICAgUGFnZXNUb01C
KG5fcGFnZXMgKyByX3BhZ2VzKSwKLSAgICAgICAgICAgICAgUGFnZXNUb01CKHRvdGFsX25vcm1h
bCArIHRvdGFsX3JldHVybmVkKSwKLSAgICAgICAgICAgICAgUGFnZXNUb01CKHJfcGFnZXMpLAot
ICAgICAgICAgICAgICBQYWdlc1RvTUIodG90YWxfcmV0dXJuZWQpKTsKKyAgICB1aW50NjRfdCBu
UGFnZXMgPSAwOworICAgIHVpbnQ2NF90IHJQYWdlcyA9IDA7CisgICAgaW50IG5TcGFucyA9IDA7
CisgICAgaW50IHJTcGFucyA9IDA7CisgICAgb3V0LT5wcmludGYoIk5vcm1hbCBsYXJnZSBzcGFu
czpcbiIpOworICAgIGZvciAoU3BhbiogcyA9IGxhcmdlLm5vcm1hbC5uZXh0OyBzICE9ICZsYXJn
ZS5ub3JtYWw7IHMgPSBzLT5uZXh0KSB7CisgICAgICAgIG91dC0+cHJpbnRmKCIgICBbICU2IiBQ
Ukl1UyAiIHBhZ2VzIF0gJTYuMWYgTUJcbiIsIHMtPmxlbmd0aCwgUGFnZXNUb01CKHMtPmxlbmd0
aCkpOworICAgICAgICBuUGFnZXMgKz0gcy0+bGVuZ3RoOworICAgICAgICBuU3BhbnMrKzsKKyAg
ICB9CisgICAgb3V0LT5wcmludGYoIlVubWFwcGVkIGxhcmdlIHNwYW5zOlxuIik7CisgICAgZm9y
IChTcGFuKiBzID0gbGFyZ2UucmV0dXJuZWQubmV4dDsgcyAhPSAmbGFyZ2UucmV0dXJuZWQ7IHMg
PSBzLT5uZXh0KSB7CisgICAgICAgIG91dC0+cHJpbnRmKCIgICBbICU2IiBQUkl1UyAiIHBhZ2Vz
IF0gJTYuMWYgTUJcbiIsIHMtPmxlbmd0aCwgUGFnZXNUb01CKHMtPmxlbmd0aCkpOworICAgICAg
ICByUGFnZXMgKz0gcy0+bGVuZ3RoOworICAgICAgICByU3BhbnMrKzsKKyAgICB9CisgICAgdG90
YWxOb3JtYWwgKz0gblBhZ2VzOworICAgIHRvdGFsUmV0dXJuZWQgKz0gclBhZ2VzOworICAgIG91
dC0+cHJpbnRmKCI+MjU1ICAgbGFyZ2UgKiAlNnUgc3BhbnMgfiAlNi4xZiBNQjsgJTYuMWYgTUIg
Y3VtIgorICAgICAgICAiOyB1bm1hcHBlZDogJTYuMWYgTUI7ICU2LjFmIE1CIGN1bVxuIiwKKyAg
ICAgICAgKG5TcGFucyArIHJTcGFucyksCisgICAgICAgIFBhZ2VzVG9NQihuUGFnZXMgKyByUGFn
ZXMpLAorICAgICAgICBQYWdlc1RvTUIodG90YWxOb3JtYWwgKyB0b3RhbFJldHVybmVkKSwKKyAg
ICAgICAgUGFnZXNUb01CKHJQYWdlcyksCisgICAgICAgIFBhZ2VzVG9NQih0b3RhbFJldHVybmVk
KSk7CiB9CiAjZW5kaWYKIAotYm9vbCBUQ01hbGxvY19QYWdlSGVhcDo6R3Jvd0hlYXAoTGVuZ3Ro
IG4pIHsKLSAgQVNTRVJUKGtNYXhQYWdlcyA+PSBrTWluU3lzdGVtQWxsb2MpOwotICBpZiAobiA+
IGtNYXhWYWxpZFBhZ2VzKSByZXR1cm4gZmFsc2U7Ci0gIExlbmd0aCBhc2sgPSAobj5rTWluU3lz
dGVtQWxsb2MpID8gbiA6IHN0YXRpY19jYXN0PExlbmd0aD4oa01pblN5c3RlbUFsbG9jKTsKLSAg
c2l6ZV90IGFjdHVhbF9zaXplOwotICB2b2lkKiBwdHIgPSBUQ01hbGxvY19TeXN0ZW1BbGxvYyhh
c2sgPDwga1BhZ2VTaGlmdCwgJmFjdHVhbF9zaXplLCBrUGFnZVNpemUpOwotICBpZiAocHRyID09
IE5VTEwpIHsKLSAgICBpZiAobiA8IGFzaykgewotICAgICAgLy8gVHJ5IGdyb3dpbmcganVzdCAi
biIgcGFnZXMKLSAgICAgIGFzayA9IG47Ci0gICAgICBwdHIgPSBUQ01hbGxvY19TeXN0ZW1BbGxv
Yyhhc2sgPDwga1BhZ2VTaGlmdCwgJmFjdHVhbF9zaXplLCBrUGFnZVNpemUpOworYm9vbCBUQ01h
bGxvY1BhZ2VIZWFwOjpHcm93SGVhcChMZW5ndGggbikKK3sKKyAgICBBU1NFUlQoa01heFBhZ2Vz
ID49IGtNaW5TeXN0ZW1BbGxvYyk7CisgICAgaWYgKG4gPiBrTWF4VmFsaWRQYWdlcykKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIExlbmd0aCBhc2sgPSAobj5rTWluU3lzdGVtQWxsb2MpID8g
biA6IHN0YXRpY19jYXN0PExlbmd0aD4oa01pblN5c3RlbUFsbG9jKTsKKyAgICBzaXplX3QgYWN0
dWFsU2l6ZTsKKyAgICB2b2lkKiBwdHIgPSBUQ01hbGxvY19TeXN0ZW1BbGxvYyhhc2sgPDwga1Bh
Z2VTaGlmdCwgJmFjdHVhbFNpemUsIGtQYWdlU2l6ZSk7CisgICAgaWYgKCFwdHIpIHsKKyAgICAg
ICAgaWYgKG4gPCBhc2spIHsKKyAgICAgICAgICAgIC8vIFRyeSBncm93aW5nIGp1c3QgIm4iIHBh
Z2VzCisgICAgICAgICAgICBhc2sgPSBuOworICAgICAgICAgICAgcHRyID0gVENNYWxsb2NfU3lz
dGVtQWxsb2MoYXNrIDw8IGtQYWdlU2hpZnQsICZhY3R1YWxTaXplLCBrUGFnZVNpemUpOworICAg
ICAgICB9CisgICAgICAgIGlmICghcHRyKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KLSAgICBpZiAocHRyID09IE5VTEwpIHJldHVybiBmYWxzZTsKLSAgfQotICBhc2sgPSBhY3R1
YWxfc2l6ZSA+PiBrUGFnZVNoaWZ0OworICAgIGFzayA9IGFjdHVhbFNpemUgPj4ga1BhZ2VTaGlm
dDsKIAotICB1aW50NjRfdCBvbGRfc3lzdGVtX2J5dGVzID0gc3lzdGVtX2J5dGVzXzsKLSAgc3lz
dGVtX2J5dGVzXyArPSAoYXNrIDw8IGtQYWdlU2hpZnQpOwotICBjb25zdCBQYWdlSUQgcCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihwdHIpID4+IGtQYWdlU2hpZnQ7Ci0gIEFTU0VSVChw
ID4gMCk7Ci0KLSAgLy8gSWYgd2UgaGF2ZSBhbHJlYWR5IGEgbG90IG9mIHBhZ2VzIGFsbG9jYXRl
ZCwganVzdCBwcmUgYWxsb2NhdGUgYSBidW5jaCBvZgotICAvLyBtZW1vcnkgZm9yIHRoZSBwYWdl
IG1hcC4gVGhpcyBwcmV2ZW50cyBmcmFnbWVudGF0aW9uIGJ5IHBhZ2VtYXAgbWV0YWRhdGEKLSAg
Ly8gd2hlbiBhIHByb2dyYW0ga2VlcHMgYWxsb2NhdGluZyBhbmQgZnJlZWluZyBsYXJnZSBibG9j
a3MuCi0KLSAgaWYgKG9sZF9zeXN0ZW1fYnl0ZXMgPCBrUGFnZU1hcEJpZ0FsbG9jYXRpb25UaHJl
c2hvbGQKLSAgICAgICYmIHN5c3RlbV9ieXRlc18gPj0ga1BhZ2VNYXBCaWdBbGxvY2F0aW9uVGhy
ZXNob2xkKSB7Ci0gICAgcGFnZW1hcF8uUHJlYWxsb2NhdGVNb3JlTWVtb3J5KCk7Ci0gIH0KKyAg
ICB1aW50NjRfdCBvbGRTeXN0ZW1CeXRlcyA9IHN5c3RlbUJ5dGVzOworICAgIHN5c3RlbUJ5dGVz
ICs9IChhc2sgPDwga1BhZ2VTaGlmdCk7CisgICAgY29uc3QgUGFnZUlEIHAgPSByZWludGVycHJl
dF9jYXN0PHVpbnRwdHJfdD4ocHRyKSA+PiBrUGFnZVNoaWZ0OworICAgIEFTU0VSVChwID4gMCk7
CiAKLSAgLy8gTWFrZSBzdXJlIHBhZ2VtYXBfIGhhcyBlbnRyaWVzIGZvciBhbGwgb2YgdGhlIG5l
dyBwYWdlcy4KLSAgLy8gUGx1cyBlbnN1cmUgb25lIGJlZm9yZSBhbmQgb25lIGFmdGVyIHNvIGNv
YWxlc2NpbmcgY29kZQotICAvLyBkb2VzIG5vdCBuZWVkIGJvdW5kcy1jaGVja2luZy4KLSAgaWYg
KHBhZ2VtYXBfLkVuc3VyZShwLTEsIGFzaysyKSkgewotICAgIC8vIFByZXRlbmQgdGhlIG5ldyBh
cmVhIGlzIGFsbG9jYXRlZCBhbmQgdGhlbiBEZWxldGUoKSBpdCB0bwotICAgIC8vIGNhdXNlIGFu
eSBuZWNlc3NhcnkgY29hbGVzY2luZyB0byBvY2N1ci4KLSAgICAvLwotICAgIC8vIFdlIGRvIG5v
dCBhZGp1c3QgZnJlZV9wYWdlc18gaGVyZSBzaW5jZSBEZWxldGUoKSB3aWxsIGRvIGl0IGZvciB1
cy4KLSAgICBTcGFuKiBzcGFuID0gTmV3U3BhbihwLCBhc2spOwotICAgIFJlY29yZFNwYW4oc3Bh
bik7Ci0gICAgRGVsZXRlKHNwYW4pOwotICAgIEFTU0VSVChDaGVjaygpKTsKLSAgICByZXR1cm4g
dHJ1ZTsKLSAgfSBlbHNlIHsKLSAgICAvLyBXZSBjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IHdp
dGhpbiAicGFnZW1hcF8iCisgICAgLy8gSWYgd2UgaGF2ZSBhbHJlYWR5IGEgbG90IG9mIHBhZ2Vz
IGFsbG9jYXRlZCwganVzdCBwcmUgYWxsb2NhdGUgYSBidW5jaCBvZgorICAgIC8vIG1lbW9yeSBm
b3IgdGhlIHBhZ2UgbWFwLiBUaGlzIHByZXZlbnRzIGZyYWdtZW50YXRpb24gYnkgcGFnZU1hcCBt
ZXRhZGF0YQorICAgIC8vIHdoZW4gYSBwcm9ncmFtIGtlZXBzIGFsbG9jYXRpbmcgYW5kIGZyZWVp
bmcgbGFyZ2UgYmxvY2tzLgorCisgICAgaWYgKG9sZFN5c3RlbUJ5dGVzIDwga1BhZ2VNYXBCaWdB
bGxvY2F0aW9uVGhyZXNob2xkCisgICAgICAgICYmIHN5c3RlbUJ5dGVzID49IGtQYWdlTWFwQmln
QWxsb2NhdGlvblRocmVzaG9sZCkKKyAgICAgICAgcGFnZU1hcC5QcmVhbGxvY2F0ZU1vcmVNZW1v
cnkoKTsKKworICAgIC8vIE1ha2Ugc3VyZSBwYWdlTWFwIGhhcyBlbnRyaWVzIGZvciBhbGwgb2Yg
dGhlIG5ldyBwYWdlcy4KKyAgICAvLyBQbHVzIGVuc3VyZSBvbmUgYmVmb3JlIGFuZCBvbmUgYWZ0
ZXIgc28gY29hbGVzY2luZyBjb2RlCisgICAgLy8gZG9lcyBub3QgbmVlZCBib3VuZHMtY2hlY2tp
bmcuCisgICAgaWYgKHBhZ2VNYXAuRW5zdXJlKHAtMSwgYXNrKzIpKSB7CisgICAgICAgIC8vIFBy
ZXRlbmQgdGhlIG5ldyBhcmVhIGlzIGFsbG9jYXRlZCBhbmQgdGhlbiBEZWxldGUoKSBpdCB0bwor
ICAgICAgICAvLyBjYXVzZSBhbnkgbmVjZXNzYXJ5IGNvYWxlc2NpbmcgdG8gb2NjdXIuCisgICAg
ICAgIC8vCisgICAgICAgIC8vIFdlIGRvIG5vdCBhZGp1c3QgZnJlZVBhZ2VzIGhlcmUgc2luY2Ug
RGVsZXRlKCkgd2lsbCBkbyBpdCBmb3IgdXMuCisgICAgICAgIFNwYW4qIHNwYW4gPSBOZXdTcGFu
KHAsIGFzayk7CisgICAgICAgIFJlY29yZFNwYW4oc3Bhbik7CisgICAgICAgIERlbGV0ZShzcGFu
KTsKKyAgICAgICAgQVNTRVJUKENoZWNrKCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKKyAgICAvLyBXZSBjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IHdpdGhpbiAicGFnZU1hcCIK
ICAgICAvLyBUT0RPOiBPbmNlIHdlIGNhbiByZXR1cm4gbWVtb3J5IHRvIHRoZSBzeXN0ZW0sIHJl
dHVybiB0aGUgbmV3IHNwYW4KICAgICByZXR1cm4gZmFsc2U7Ci0gIH0KIH0KIAotYm9vbCBUQ01h
bGxvY19QYWdlSGVhcDo6Q2hlY2soKSB7Citib29sIFRDTWFsbG9jUGFnZUhlYXA6OkNoZWNrKCkK
K3sKICNpZiBVU0VfQkFDS0dST1VORF9USFJFQURfVE9fU0NBVkVOR0VfTUVNT1JZCi0gIHNpemVf
dCB0b3RhbEZyZWVDb21taXR0ZWQgPSAwOworICAgIHNpemVfdCB0b3RhbEZyZWVDb21taXR0ZWQg
PSAwOwogI2VuZGlmCi0gIEFTU0VSVChmcmVlX1swXS5ub3JtYWwubmV4dCA9PSAmZnJlZV9bMF0u
bm9ybWFsKTsKLSAgQVNTRVJUKGZyZWVfWzBdLnJldHVybmVkLm5leHQgPT0gJmZyZWVfWzBdLnJl
dHVybmVkKTsKKyAgICBBU1NFUlQoZnJlZVNwYW5MaXN0WzBdLm5vcm1hbC5uZXh0ID09ICZmcmVl
U3Bhbkxpc3RbMF0ubm9ybWFsKTsKKyAgICBBU1NFUlQoZnJlZVNwYW5MaXN0WzBdLnJldHVybmVk
Lm5leHQgPT0gJmZyZWVTcGFuTGlzdFswXS5yZXR1cm5lZCk7CiAjaWYgVVNFX0JBQ0tHUk9VTkRf
VEhSRUFEX1RPX1NDQVZFTkdFX01FTU9SWQotICB0b3RhbEZyZWVDb21taXR0ZWQgPSBDaGVja0xp
c3QoJmxhcmdlXy5ub3JtYWwsIGtNYXhQYWdlcywgMTAwMDAwMDAwMCwgZmFsc2UpOworICAgIHRv
dGFsRnJlZUNvbW1pdHRlZCA9IENoZWNrTGlzdCgmbGFyZ2Uubm9ybWFsLCBrTWF4UGFnZXMsIDEw
MDAwMDAwMDAsIGZhbHNlKTsKICNlbHNlCi0gIENoZWNrTGlzdCgmbGFyZ2VfLm5vcm1hbCwga01h
eFBhZ2VzLCAxMDAwMDAwMDAwLCBmYWxzZSk7CisgICAgQ2hlY2tMaXN0KCZsYXJnZS5ub3JtYWws
IGtNYXhQYWdlcywgMTAwMDAwMDAwMCwgZmFsc2UpOwogI2VuZGlmCi0gICAgQ2hlY2tMaXN0KCZs
YXJnZV8ucmV0dXJuZWQsIGtNYXhQYWdlcywgMTAwMDAwMDAwMCwgdHJ1ZSk7Ci0gIGZvciAoTGVu
Z3RoIHMgPSAxOyBzIDwga01heFBhZ2VzOyBzKyspIHsKKyAgICBDaGVja0xpc3QoJmxhcmdlLnJl
dHVybmVkLCBrTWF4UGFnZXMsIDEwMDAwMDAwMDAsIHRydWUpOworICAgIGZvciAoTGVuZ3RoIHMg
PSAxOyBzIDwga01heFBhZ2VzOyBzKyspIHsKICNpZiBVU0VfQkFDS0dST1VORF9USFJFQURfVE9f
U0NBVkVOR0VfTUVNT1JZCi0gICAgdG90YWxGcmVlQ29tbWl0dGVkICs9IENoZWNrTGlzdCgmZnJl
ZV9bc10ubm9ybWFsLCBzLCBzLCBmYWxzZSk7CisgICAgICAgIHRvdGFsRnJlZUNvbW1pdHRlZCAr
PSBDaGVja0xpc3QoJmZyZWVTcGFuTGlzdFtzXS5ub3JtYWwsIHMsIHMsIGZhbHNlKTsKICNlbHNl
Ci0gICAgQ2hlY2tMaXN0KCZmcmVlX1tzXS5ub3JtYWwsIHMsIHMsIGZhbHNlKTsKKyAgICAgICAg
Q2hlY2tMaXN0KCZmcmVlU3Bhbkxpc3Rbc10ubm9ybWFsLCBzLCBzLCBmYWxzZSk7CiAjZW5kaWYK
LSAgICBDaGVja0xpc3QoJmZyZWVfW3NdLnJldHVybmVkLCBzLCBzLCB0cnVlKTsKLSAgfQorICAg
ICAgICBDaGVja0xpc3QoJmZyZWVTcGFuTGlzdFtzXS5yZXR1cm5lZCwgcywgcywgdHJ1ZSk7Cisg
ICAgfQogI2lmIFVTRV9CQUNLR1JPVU5EX1RIUkVBRF9UT19TQ0FWRU5HRV9NRU1PUlkKLSAgQVNT
RVJUKHRvdGFsRnJlZUNvbW1pdHRlZCA9PSBmcmVlX2NvbW1pdHRlZF9wYWdlc18pOworICAgIEFT
U0VSVCh0b3RhbEZyZWVDb21taXR0ZWQgPT0gZnJlZUNvbW1pdHRlZFBhZ2VzKTsKICNlbmRpZgot
ICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogI2lmIEFTU0VSVF9ESVNBQkxF
RAotc2l6ZV90IFRDTWFsbG9jX1BhZ2VIZWFwOjpDaGVja0xpc3QoU3BhbiosIExlbmd0aCwgTGVu
Z3RoLCBib29sKSB7Ci0gIHJldHVybiAwOworc2l6ZV90IFRDTWFsbG9jUGFnZUhlYXA6OkNoZWNr
TGlzdChTcGFuKiwgTGVuZ3RoLCBMZW5ndGgsIGJvb2wpCit7CisgICAgcmV0dXJuIDA7CiB9CiAj
ZWxzZQotc2l6ZV90IFRDTWFsbG9jX1BhZ2VIZWFwOjpDaGVja0xpc3QoU3BhbiogbGlzdCwgTGVu
Z3RoIG1pbl9wYWdlcywgTGVuZ3RoIG1heF9wYWdlcywgYm9vbCBkZWNvbW1pdHRlZCkgewotICBz
aXplX3QgZnJlZUNvdW50ID0gMDsKLSAgZm9yIChTcGFuKiBzID0gbGlzdC0+bmV4dDsgcyAhPSBs
aXN0OyBzID0gcy0+bmV4dCkgewotICAgIENIRUNLX0NPTkRJVElPTihzLT5mcmVlKTsKLSAgICBD
SEVDS19DT05ESVRJT04ocy0+bGVuZ3RoID49IG1pbl9wYWdlcyk7Ci0gICAgQ0hFQ0tfQ09ORElU
SU9OKHMtPmxlbmd0aCA8PSBtYXhfcGFnZXMpOwotICAgIENIRUNLX0NPTkRJVElPTihHZXREZXNj
cmlwdG9yKHMtPnN0YXJ0KSA9PSBzKTsKLSAgICBDSEVDS19DT05ESVRJT04oR2V0RGVzY3JpcHRv
cihzLT5zdGFydCtzLT5sZW5ndGgtMSkgPT0gcyk7Ci0gICAgQ0hFQ0tfQ09ORElUSU9OKHMtPmRl
Y29tbWl0dGVkID09IGRlY29tbWl0dGVkKTsKLSAgICBmcmVlQ291bnQgKz0gcy0+bGVuZ3RoOwot
ICB9Ci0gIHJldHVybiBmcmVlQ291bnQ7CitzaXplX3QgVENNYWxsb2NQYWdlSGVhcDo6Q2hlY2tM
aXN0KFNwYW4qIGxpc3QsIExlbmd0aCBtaW5QYWdlcywgTGVuZ3RoIG1heFBhZ2VzLCBib29sIGRl
Y29tbWl0dGVkKQoreworICAgIHNpemVfdCBmcmVlQ291bnQgPSAwOworICAgIGZvciAoU3Bhbiog
cyA9IGxpc3QtPm5leHQ7IHMgIT0gbGlzdDsgcyA9IHMtPm5leHQpIHsKKyAgICAgICAgQ0hFQ0tf
Q09ORElUSU9OKHMtPmZyZWUpOworICAgICAgICBDSEVDS19DT05ESVRJT04ocy0+bGVuZ3RoID49
IG1pblBhZ2VzKTsKKyAgICAgICAgQ0hFQ0tfQ09ORElUSU9OKHMtPmxlbmd0aCA8PSBtYXhQYWdl
cyk7CisgICAgICAgIENIRUNLX0NPTkRJVElPTihHZXREZXNjcmlwdG9yKHMtPnN0YXJ0KSA9PSBz
KTsKKyAgICAgICAgQ0hFQ0tfQ09ORElUSU9OKEdldERlc2NyaXB0b3Iocy0+c3RhcnQrcy0+bGVu
Z3RoLTEpID09IHMpOworICAgICAgICBDSEVDS19DT05ESVRJT04ocy0+ZGVjb21taXR0ZWQgPT0g
ZGVjb21taXR0ZWQpOworICAgICAgICBmcmVlQ291bnQgKz0gcy0+bGVuZ3RoOworICAgIH0KKyAg
ICByZXR1cm4gZnJlZUNvdW50OwogfQogI2VuZGlmCiAKLXZvaWQgVENNYWxsb2NfUGFnZUhlYXA6
OlJlbGVhc2VGcmVlTGlzdChTcGFuKiBsaXN0LCBTcGFuKiByZXR1cm5lZCkgewotICAvLyBXYWxr
IGJhY2t3YXJkcyB0aHJvdWdoIGxpc3Qgc28gdGhhdCB3aGVuIHdlIHB1c2ggdGhlc2UKLSAgLy8g
c3BhbnMgb24gdGhlICJyZXR1cm5lZCIgbGlzdCwgd2UgcHJlc2VydmUgdGhlIG9yZGVyLgordm9p
ZCBUQ01hbGxvY1BhZ2VIZWFwOjpSZWxlYXNlRnJlZUxpc3QoU3BhbiogbGlzdCwgU3BhbiogcmV0
dXJuZWQpCit7CisgICAgLy8gV2FsayBiYWNrd2FyZHMgdGhyb3VnaCBsaXN0IHNvIHRoYXQgd2hl
biB3ZSBwdXNoIHRoZXNlCisgICAgLy8gc3BhbnMgb24gdGhlICJyZXR1cm5lZCIgbGlzdCwgd2Ug
cHJlc2VydmUgdGhlIG9yZGVyLgogI2lmIFVTRV9CQUNLR1JPVU5EX1RIUkVBRF9UT19TQ0FWRU5H
RV9NRU1PUlkKLSAgc2l6ZV90IGZyZWVQYWdlUmVkdWN0aW9uID0gMDsKKyAgICBzaXplX3QgZnJl
ZVBhZ2VSZWR1Y3Rpb24gPSAwOwogI2VuZGlmCiAKLSAgd2hpbGUgKCFETExfSXNFbXB0eShsaXN0
KSkgewotICAgIFNwYW4qIHMgPSBsaXN0LT5wcmV2OworICAgIHdoaWxlICghRExMX0lzRW1wdHko
bGlzdCkpIHsKKyAgICAgICAgU3BhbiogcyA9IGxpc3QtPnByZXY7CiAKLSAgICBETExfUmVtb3Zl
KHMpOwotICAgIHMtPmRlY29tbWl0dGVkID0gdHJ1ZTsKLSAgICBETExfUHJlcGVuZChyZXR1cm5l
ZCwgcyk7Ci0gICAgVENNYWxsb2NfU3lzdGVtUmVsZWFzZShyZWludGVycHJldF9jYXN0PHZvaWQq
PihzLT5zdGFydCA8PCBrUGFnZVNoaWZ0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
YXRpY19jYXN0PHNpemVfdD4ocy0+bGVuZ3RoIDw8IGtQYWdlU2hpZnQpKTsKKyAgICAgICAgRExM
UmVtb3ZlKHMpOworICAgICAgICBzLT5kZWNvbW1pdHRlZCA9IHRydWU7CisgICAgICAgIERMTFBy
ZXBlbmQocmV0dXJuZWQsIHMpOworICAgICAgICBUQ01hbGxvY19TeXN0ZW1SZWxlYXNlKHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KHMtPnN0YXJ0IDw8IGtQYWdlU2hpZnQpLAorICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8c2l6ZV90PihzLT5sZW5ndGggPDwga1BhZ2VTaGlmdCkpOwogI2lmIFVTRV9C
QUNLR1JPVU5EX1RIUkVBRF9UT19TQ0FWRU5HRV9NRU1PUlkKLSAgICBmcmVlUGFnZVJlZHVjdGlv
biArPSBzLT5sZW5ndGg7CisgICAgICAgIGZyZWVQYWdlUmVkdWN0aW9uICs9IHMtPmxlbmd0aDsK
ICNlbmRpZgotICB9CisgICAgfQogCiAjaWYgVVNFX0JBQ0tHUk9VTkRfVEhSRUFEX1RPX1NDQVZF
TkdFX01FTU9SWQotICAgIGZyZWVfY29tbWl0dGVkX3BhZ2VzXyAtPSBmcmVlUGFnZVJlZHVjdGlv
bjsKLSAgICBpZiAoZnJlZV9jb21taXR0ZWRfcGFnZXNfIDwgbWluX2ZyZWVfY29tbWl0dGVkX3Bh
Z2VzX3NpbmNlX2xhc3Rfc2NhdmVuZ2VfKSAKLSAgICAgICAgbWluX2ZyZWVfY29tbWl0dGVkX3Bh
Z2VzX3NpbmNlX2xhc3Rfc2NhdmVuZ2VfID0gZnJlZV9jb21taXR0ZWRfcGFnZXNfOworICAgIGZy
ZWVDb21taXR0ZWRQYWdlcyAtPSBmcmVlUGFnZVJlZHVjdGlvbjsKKyAgICBpZiAoZnJlZUNvbW1p
dHRlZFBhZ2VzIDwgbWluRnJlZUNvbW1pdHRlZFBhZ2VzU2luY2VMYXN0U2NhdmVuZ2UpIAorICAg
ICAgICBtaW5GcmVlQ29tbWl0dGVkUGFnZXNTaW5jZUxhc3RTY2F2ZW5nZSA9IGZyZWVDb21taXR0
ZWRQYWdlczsKICNlbmRpZgogfQogCi12b2lkIFRDTWFsbG9jX1BhZ2VIZWFwOjpSZWxlYXNlRnJl
ZVBhZ2VzKCkgewotICBmb3IgKExlbmd0aCBzID0gMDsgcyA8IGtNYXhQYWdlczsgcysrKSB7Ci0g
ICAgUmVsZWFzZUZyZWVMaXN0KCZmcmVlX1tzXS5ub3JtYWwsICZmcmVlX1tzXS5yZXR1cm5lZCk7
Ci0gIH0KLSAgUmVsZWFzZUZyZWVMaXN0KCZsYXJnZV8ubm9ybWFsLCAmbGFyZ2VfLnJldHVybmVk
KTsKLSAgQVNTRVJUKENoZWNrKCkpOwordm9pZCBUQ01hbGxvY1BhZ2VIZWFwOjpSZWxlYXNlRnJl
ZVBhZ2VzKCkKK3sKKyAgICBmb3IgKExlbmd0aCBzID0gMDsgcyA8IGtNYXhQYWdlczsgcysrKQor
ICAgICAgICBSZWxlYXNlRnJlZUxpc3QoJmZyZWVTcGFuTGlzdFtzXS5ub3JtYWwsICZmcmVlU3Bh
bkxpc3Rbc10ucmV0dXJuZWQpOworICAgIFJlbGVhc2VGcmVlTGlzdCgmbGFyZ2Uubm9ybWFsLCAm
bGFyZ2UucmV0dXJuZWQpOworICAgIEFTU0VSVChDaGVjaygpKTsKIH0KIAogLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CiAvLyBGcmVlIGxpc3QKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1jbGFzcyBUQ01hbGxvY19UaHJlYWRDYWNo
ZV9GcmVlTGlzdCB7Ci0gcHJpdmF0ZToKLSAgdm9pZCogICAgbGlzdF87ICAgICAgIC8vIExpbmtl
ZCBsaXN0IG9mIG5vZGVzCi0gIHVpbnQxNl90IGxlbmd0aF87ICAgICAvLyBDdXJyZW50IGxlbmd0
aAotICB1aW50MTZfdCBsb3dhdGVyXzsgICAgLy8gTG93IHdhdGVyIG1hcmsgZm9yIGxpc3QgbGVu
Z3RoCitjbGFzcyBUQ01hbGxvY1RocmVhZENhY2hlRnJlZUxpc3QgeworcHJpdmF0ZToKKyAgICB2
b2lkKiBsaXN0OyAvLyBMaW5rZWQgbGlzdCBvZiBub2RlcworICAgIHVpbnQxNl90IGN1cnJlbnRM
ZW5ndGg7IC8vIEN1cnJlbnQgbGVuZ3RoCisgICAgdWludDE2X3QgbG93YXRlcjsgLy8gTG93IHdh
dGVyIG1hcmsgZm9yIGxpc3QgbGVuZ3RoCiAKLSBwdWJsaWM6Ci0gIHZvaWQgSW5pdCgpIHsKLSAg
ICBsaXN0XyA9IE5VTEw7Ci0gICAgbGVuZ3RoXyA9IDA7Ci0gICAgbG93YXRlcl8gPSAwOwotICB9
CitwdWJsaWM6CisgICAgdm9pZCBJbml0KCkKKyAgICB7CisgICAgICAgIGxpc3QgPSAwOworICAg
ICAgICBjdXJyZW50TGVuZ3RoID0gMDsKKyAgICAgICAgbG93YXRlciA9IDA7CisgICAgfQogCi0g
IC8vIFJldHVybiBjdXJyZW50IGxlbmd0aCBvZiBsaXN0Ci0gIGludCBsZW5ndGgoKSBjb25zdCB7
Ci0gICAgcmV0dXJuIGxlbmd0aF87Ci0gIH0KKyAgICAvLyBSZXR1cm4gY3VycmVudCBsZW5ndGgg
b2YgbGlzdAorICAgIGludCBsZW5ndGgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGN1
cnJlbnRMZW5ndGg7CisgICAgfQogCi0gIC8vIElzIGxpc3QgZW1wdHk/Ci0gIGJvb2wgZW1wdHko
KSBjb25zdCB7Ci0gICAgcmV0dXJuIGxpc3RfID09IE5VTEw7Ci0gIH0KKyAgICAvLyBJcyBsaXN0
IGVtcHR5PworICAgIGJvb2wgZW1wdHkoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFs
aXN0OworICAgIH0KIAotICAvLyBMb3ctd2F0ZXIgbWFyayBtYW5hZ2VtZW50Ci0gIGludCBsb3d3
YXRlcm1hcmsoKSBjb25zdCB7IHJldHVybiBsb3dhdGVyXzsgfQotICB2b2lkIGNsZWFyX2xvd3dh
dGVybWFyaygpIHsgbG93YXRlcl8gPSBsZW5ndGhfOyB9Ci0KLSAgQUxXQVlTX0lOTElORSB2b2lk
IFB1c2godm9pZCogcHRyKSB7Ci0gICAgU0xMX1B1c2goJmxpc3RfLCBwdHIpOwotICAgIGxlbmd0
aF8rKzsKLSAgfQorICAgIC8vIExvdy13YXRlciBtYXJrIG1hbmFnZW1lbnQKKyAgICBpbnQgbG93
d2F0ZXJtYXJrKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBsb3dhdGVyOworICAgIH0K
KyAgICB2b2lkIGNsZWFyTG93d2F0ZXJtYXJrKCkKKyAgICB7CisgICAgICAgIGxvd2F0ZXIgPSBj
dXJyZW50TGVuZ3RoOworICAgIH0KIAotICB2b2lkIFB1c2hSYW5nZShpbnQgTiwgdm9pZCAqc3Rh
cnQsIHZvaWQgKmVuZCkgewotICAgIFNMTF9QdXNoUmFuZ2UoJmxpc3RfLCBzdGFydCwgZW5kKTsK
LSAgICBsZW5ndGhfID0gbGVuZ3RoXyArIHN0YXRpY19jYXN0PHVpbnQxNl90PihOKTsKLSAgfQor
ICAgIEFMV0FZU19JTkxJTkUgdm9pZCBQdXNoKHZvaWQqIHB0cikKKyAgICB7CisgICAgICAgIFNM
TFB1c2goJmxpc3QsIHB0cik7CisgICAgICAgIGN1cnJlbnRMZW5ndGgrKzsKKyAgICB9CiAKLSAg
dm9pZCBQb3BSYW5nZShpbnQgTiwgdm9pZCAqKnN0YXJ0LCB2b2lkICoqZW5kKSB7Ci0gICAgU0xM
X1BvcFJhbmdlKCZsaXN0XywgTiwgc3RhcnQsIGVuZCk7Ci0gICAgQVNTRVJUKGxlbmd0aF8gPj0g
Tik7Ci0gICAgbGVuZ3RoXyA9IGxlbmd0aF8gLSBzdGF0aWNfY2FzdDx1aW50MTZfdD4oTik7Ci0g
ICAgaWYgKGxlbmd0aF8gPCBsb3dhdGVyXykgbG93YXRlcl8gPSBsZW5ndGhfOwotICB9CisgICAg
dm9pZCBQdXNoUmFuZ2UoaW50IE4sIHZvaWQqIHN0YXJ0LCB2b2lkKiBlbmQpCisgICAgeworICAg
ICAgICBTTExQdXNoUmFuZ2UoJmxpc3QsIHN0YXJ0LCBlbmQpOworICAgICAgICBjdXJyZW50TGVu
Z3RoID0gY3VycmVudExlbmd0aCArIHN0YXRpY19jYXN0PHVpbnQxNl90PihOKTsKKyAgICB9CiAK
LSAgQUxXQVlTX0lOTElORSB2b2lkKiBQb3AoKSB7Ci0gICAgQVNTRVJUKGxpc3RfICE9IE5VTEwp
OwotICAgIGxlbmd0aF8tLTsKLSAgICBpZiAobGVuZ3RoXyA8IGxvd2F0ZXJfKSBsb3dhdGVyXyA9
IGxlbmd0aF87Ci0gICAgcmV0dXJuIFNMTF9Qb3AoJmxpc3RfKTsKLSAgfQorICAgIHZvaWQgUG9w
UmFuZ2UoaW50IE4sIHZvaWQqKiBzdGFydCwgdm9pZCoqIGVuZCkKKyAgICB7CisgICAgICAgIFNM
TFBvcFJhbmdlKCZsaXN0LCBOLCBzdGFydCwgZW5kKTsKKyAgICAgICAgQVNTRVJUKGN1cnJlbnRM
ZW5ndGggPj0gTik7CisgICAgICAgIGN1cnJlbnRMZW5ndGggPSBjdXJyZW50TGVuZ3RoIC0gc3Rh
dGljX2Nhc3Q8dWludDE2X3Q+KE4pOworICAgICAgICBpZiAoY3VycmVudExlbmd0aCA8IGxvd2F0
ZXIpCisgICAgICAgICAgICBsb3dhdGVyID0gY3VycmVudExlbmd0aDsKKyAgICB9CisKKyAgICBB
TFdBWVNfSU5MSU5FIHZvaWQqIFBvcCgpCisgICAgeworICAgICAgICBBU1NFUlQobGlzdCk7Cisg
ICAgICAgIGN1cnJlbnRMZW5ndGgtLTsKKyAgICAgICAgaWYgKGN1cnJlbnRMZW5ndGggPCBsb3dh
dGVyKQorICAgICAgICAgICAgbG93YXRlciA9IGN1cnJlbnRMZW5ndGg7CisgICAgICAgIHJldHVy
biBTTExQb3AoJmxpc3QpOworICAgIH0KIAogI2lmZGVmIFdURl9DSEFOR0VTCi0gIHRlbXBsYXRl
IDxjbGFzcyBGaW5kZXIsIGNsYXNzIFJlYWRlcj4KLSAgdm9pZCBlbnVtZXJhdGVGcmVlT2JqZWN0
cyhGaW5kZXImIGZpbmRlciwgY29uc3QgUmVhZGVyJiByZWFkZXIpCi0gIHsKLSAgICAgIGZvciAo
dm9pZCogbmV4dE9iamVjdCA9IGxpc3RfOyBuZXh0T2JqZWN0OyBuZXh0T2JqZWN0ID0gcmVhZGVy
Lm5leHRFbnRyeUluTGlua2VkTGlzdChyZWludGVycHJldF9jYXN0PHZvaWQqKj4obmV4dE9iamVj
dCkpKQotICAgICAgICAgIGZpbmRlci52aXNpdChuZXh0T2JqZWN0KTsKLSAgfQorICAgIHRlbXBs
YXRlIDxjbGFzcyBGaW5kZXIsIGNsYXNzIFJlYWRlcj4KKyAgICB2b2lkIGVudW1lcmF0ZUZyZWVP
YmplY3RzKEZpbmRlciYgZmluZGVyLCBjb25zdCBSZWFkZXImIHJlYWRlcikKKyAgICB7CisgICAg
ICAgIGZvciAodm9pZCogbmV4dE9iamVjdCA9IGxpc3Q7IG5leHRPYmplY3Q7IG5leHRPYmplY3Qg
PSByZWFkZXIubmV4dEVudHJ5SW5MaW5rZWRMaXN0KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPihu
ZXh0T2JqZWN0KSkpCisgICAgICAgICAgICBmaW5kZXIudmlzaXQobmV4dE9iamVjdCk7CisgICAg
fQogI2VuZGlmCiB9OwogCkBAIC0yMjgwLDc1ICsyMzI4LDc1IEBAIGNsYXNzIFRDTWFsbG9jX1Ro
cmVhZENhY2hlX0ZyZWVMaXN0IHsKIC8vIERhdGEga2VwdCBwZXIgdGhyZWFkCiAvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KIAotY2xhc3MgVENNYWxsb2NfVGhyZWFkQ2FjaGUgewotIHByaXZhdGU6Ci0gIHR5cGVkZWYg
VENNYWxsb2NfVGhyZWFkQ2FjaGVfRnJlZUxpc3QgRnJlZUxpc3Q7CitjbGFzcyBUQ01hbGxvY1Ro
cmVhZENhY2hlIHsKK3ByaXZhdGU6CisgICAgdHlwZWRlZiBUQ01hbGxvY1RocmVhZENhY2hlRnJl
ZUxpc3QgRnJlZUxpc3Q7CiAjaWYgT1MoV0lORE9XUykKLSAgdHlwZWRlZiBEV09SRCBUaHJlYWRJ
ZGVudGlmaWVyOworICAgIHR5cGVkZWYgRFdPUkQgVGhyZWFkSWRlbnRpZmllcjsKICNlbHNlCi0g
IHR5cGVkZWYgcHRocmVhZF90IFRocmVhZElkZW50aWZpZXI7CisgICAgdHlwZWRlZiBwdGhyZWFk
X3QgVGhyZWFkSWRlbnRpZmllcjsKICNlbmRpZgogCi0gIHNpemVfdCAgICAgICAgc2l6ZV87ICAg
ICAgICAgICAgICAgICAgLy8gQ29tYmluZWQgc2l6ZSBvZiBkYXRhCi0gIFRocmVhZElkZW50aWZp
ZXIgdGlkXzsgICAgICAgICAgICAgICAgLy8gV2hpY2ggdGhyZWFkIG93bnMgaXQKLSAgYm9vbCAg
ICAgICAgICBpbl9zZXRzcGVjaWZpY187ICAgICAgICAgICAvLyBDYWxsZWQgcHRocmVhZF9zZXRz
cGVjaWZpYz8KLSAgRnJlZUxpc3QgICAgICBsaXN0X1trTnVtQ2xhc3Nlc107ICAgICAvLyBBcnJh
eSBpbmRleGVkIGJ5IHNpemUtY2xhc3MKKyAgICBzaXplX3Qgc2l6ZTsgLy8gQ29tYmluZWQgc2l6
ZSBvZiBkYXRhCisgICAgVGhyZWFkSWRlbnRpZmllciB0aWQ7IC8vIFdoaWNoIHRocmVhZCBvd25z
IGl0CisgICAgYm9vbCBpblNldHNwZWNpZmljOyAvLyBDYWxsZWQgcHRocmVhZF9zZXRzcGVjaWZp
Yz8KKyAgICBGcmVlTGlzdCBsaXN0W2tOdW1DbGFzc2VzXTsgLy8gQXJyYXkgaW5kZXhlZCBieSBz
aXplLWNsYXNzCiAKLSAgLy8gV2Ugc2FtcGxlIGFsbG9jYXRpb25zLCBiaWFzZWQgYnkgdGhlIHNp
emUgb2YgdGhlIGFsbG9jYXRpb24KLSAgdWludDMyX3QgICAgICBybmRfOyAgICAgICAgICAgICAg
ICAgICAvLyBDaGVhcCByYW5kb20gbnVtYmVyIGdlbmVyYXRvcgotICBzaXplX3QgICAgICAgIGJ5
dGVzX3VudGlsX3NhbXBsZV87ICAgIC8vIEJ5dGVzIHVudGlsIHdlIHNhbXBsZSBuZXh0CisgICAg
Ly8gV2Ugc2FtcGxlIGFsbG9jYXRpb25zLCBiaWFzZWQgYnkgdGhlIHNpemUgb2YgdGhlIGFsbG9j
YXRpb24KKyAgICB1aW50MzJfdCBybmQ7IC8vIENoZWFwIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9y
CisgICAgc2l6ZV90IGJ5dGVzVW50aWxTYW1wbGU7IC8vIEJ5dGVzIHVudGlsIHdlIHNhbXBsZSBu
ZXh0CiAKLSAgLy8gQWxsb2NhdGUgYSBuZXcgaGVhcC4gUkVRVUlSRVM6IHBhZ2VoZWFwX2xvY2sg
aXMgaGVsZC4KLSAgc3RhdGljIGlubGluZSBUQ01hbGxvY19UaHJlYWRDYWNoZSogTmV3SGVhcChU
aHJlYWRJZGVudGlmaWVyIHRpZCk7CisgICAgLy8gQWxsb2NhdGUgYSBuZXcgaGVhcC4gUkVRVUlS
RVM6IHBhZ2VoZWFwTG9jayBpcyBoZWxkLgorICAgIHN0YXRpYyBpbmxpbmUgVENNYWxsb2NUaHJl
YWRDYWNoZSogTmV3SGVhcChUaHJlYWRJZGVudGlmaWVyIHRpZCk7CiAKLSAgLy8gVXNlIG9ubHkg
YXMgcHRocmVhZCB0aHJlYWQtc3BlY2lmaWMgZGVzdHJ1Y3RvciBmdW5jdGlvbi4KLSAgc3RhdGlj
IHZvaWQgRGVzdHJveVRocmVhZENhY2hlKHZvaWQqIHB0cik7Ci0gcHVibGljOgotICAvLyBBbGwg
VGhyZWFkQ2FjaGUgb2JqZWN0cyBhcmUga2VwdCBpbiBhIGxpbmtlZCBsaXN0IChmb3Igc3RhdHMg
Y29sbGVjdGlvbikKLSAgVENNYWxsb2NfVGhyZWFkQ2FjaGUqIG5leHRfOwotICBUQ01hbGxvY19U
aHJlYWRDYWNoZSogcHJldl87Ci0KLSAgdm9pZCBJbml0KFRocmVhZElkZW50aWZpZXIgdGlkKTsK
LSAgdm9pZCBDbGVhbnVwKCk7Ci0KLSAgLy8gQWNjZXNzb3JzIChtb3N0bHkganVzdCBmb3IgcHJp
bnRpbmcgc3RhdHMpCi0gIGludCBmcmVlbGlzdF9sZW5ndGgoc2l6ZV90IGNsKSBjb25zdCB7IHJl
dHVybiBsaXN0X1tjbF0ubGVuZ3RoKCk7IH0KLQotICAvLyBUb3RhbCBieXRlIHNpemUgaW4gY2Fj
aGUKLSAgc2l6ZV90IFNpemUoKSBjb25zdCB7IHJldHVybiBzaXplXzsgfQotCi0gIEFMV0FZU19J
TkxJTkUgdm9pZCogQWxsb2NhdGUoc2l6ZV90IHNpemUpOwotICB2b2lkIERlYWxsb2NhdGUodm9p
ZCogcHRyLCBzaXplX3Qgc2l6ZV9jbGFzcyk7Ci0KLSAgQUxXQVlTX0lOTElORSB2b2lkIEZldGNo
RnJvbUNlbnRyYWxDYWNoZShzaXplX3QgY2wsIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSk7Ci0gIHZv
aWQgUmVsZWFzZVRvQ2VudHJhbENhY2hlKHNpemVfdCBjbCwgaW50IE4pOwotICB2b2lkIFNjYXZl
bmdlKCk7Ci0gIHZvaWQgUHJpbnQoKSBjb25zdDsKLQotICAvLyBSZWNvcmQgYWxsb2NhdGlvbiBv
ZiAiayIgYnl0ZXMuICBSZXR1cm4gdHJ1ZSBpZmYgYWxsb2NhdGlvbgotICAvLyBzaG91bGQgYmUg
c2FtcGxlZAotICBib29sIFNhbXBsZUFsbG9jYXRpb24oc2l6ZV90IGspOwotCi0gIC8vIFBpY2sg
bmV4dCBzYW1wbGluZyBwb2ludAotICB2b2lkIFBpY2tOZXh0U2FtcGxlKHNpemVfdCBrKTsKLQot
ICBzdGF0aWMgdm9pZCAgICAgICAgICAgICAgICAgIEluaXRNb2R1bGUoKTsKLSAgc3RhdGljIHZv
aWQgICAgICAgICAgICAgICAgICBJbml0VFNEKCk7Ci0gIHN0YXRpYyBUQ01hbGxvY19UaHJlYWRD
YWNoZSogR2V0VGhyZWFkSGVhcCgpOwotICBzdGF0aWMgVENNYWxsb2NfVGhyZWFkQ2FjaGUqIEdl
dENhY2hlKCk7Ci0gIHN0YXRpYyBUQ01hbGxvY19UaHJlYWRDYWNoZSogR2V0Q2FjaGVJZlByZXNl
bnQoKTsKLSAgc3RhdGljIFRDTWFsbG9jX1RocmVhZENhY2hlKiBDcmVhdGVDYWNoZUlmTmVjZXNz
YXJ5KCk7Ci0gIHN0YXRpYyB2b2lkICAgICAgICAgICAgICAgICAgRGVsZXRlQ2FjaGUoVENNYWxs
b2NfVGhyZWFkQ2FjaGUqIGhlYXApOwotICBzdGF0aWMgdm9pZCAgICAgICAgICAgICAgICAgIEJl
Y29tZUlkbGUoKTsKLSAgc3RhdGljIHZvaWQgICAgICAgICAgICAgICAgICBSZWNvbXB1dGVUaHJl
YWRDYWNoZVNpemUoKTsKKyAgICAvLyBVc2Ugb25seSBhcyBwdGhyZWFkIHRocmVhZC1zcGVjaWZp
YyBkZXN0cnVjdG9yIGZ1bmN0aW9uLgorICAgIHN0YXRpYyB2b2lkIERlc3Ryb3lUaHJlYWRDYWNo
ZSh2b2lkKiBwdHIpOworcHVibGljOgorICAgIC8vIEFsbCBUaHJlYWRDYWNoZSBvYmplY3RzIGFy
ZSBrZXB0IGluIGEgbGlua2VkIGxpc3QgKGZvciBzdGF0cyBjb2xsZWN0aW9uKQorICAgIFRDTWFs
bG9jVGhyZWFkQ2FjaGUqIG5leHQ7CisgICAgVENNYWxsb2NUaHJlYWRDYWNoZSogcHJldjsKKwor
ICAgIHZvaWQgSW5pdChUaHJlYWRJZGVudGlmaWVyIHRpZCk7CisgICAgdm9pZCBDbGVhbnVwKCk7
CisKKyAgICAvLyBBY2Nlc3NvcnMgKG1vc3RseSBqdXN0IGZvciBwcmludGluZyBzdGF0cykKKyAg
ICBpbnQgZnJlZWxpc3RsZW5ndGgoc2l6ZV90IGNsKSBjb25zdCB7IHJldHVybiBsaXN0W2NsXS5s
ZW5ndGgoKTsgfQorCisgICAgLy8gVG90YWwgYnl0ZSBzaXplIGluIGNhY2hlCisgICAgc2l6ZV90
IFNpemUoKSBjb25zdCB7IHJldHVybiBzaXplOyB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQq
IEFsbG9jYXRlKHNpemVfdCk7CisgICAgdm9pZCBEZWFsbG9jYXRlKHZvaWQqLCBzaXplX3Qgc2l6
ZUNsYXNzKTsKKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBGZXRjaEZyb21DZW50cmFsQ2FjaGUo
c2l6ZV90IGNsLCBzaXplX3QgYWxsb2NhdGlvblNpemUpOworICAgIHZvaWQgUmVsZWFzZVRvQ2Vu
dHJhbENhY2hlKHNpemVfdCBjbCwgaW50KTsKKyAgICB2b2lkIFNjYXZlbmdlKCk7CisgICAgdm9p
ZCBQcmludCgpIGNvbnN0OworCisgICAgLy8gUmVjb3JkIGFsbG9jYXRpb24gb2YgImsiIGJ5dGVz
LiBSZXR1cm4gdHJ1ZSBpZmYgYWxsb2NhdGlvbgorICAgIC8vIHNob3VsZCBiZSBzYW1wbGVkCisg
ICAgYm9vbCBTYW1wbGVBbGxvY2F0aW9uKHNpemVfdCk7CisKKyAgICAvLyBQaWNrIG5leHQgc2Ft
cGxpbmcgcG9pbnQKKyAgICB2b2lkIFBpY2tOZXh0U2FtcGxlKHNpemVfdCk7CisKKyAgICBzdGF0
aWMgdm9pZCBJbml0TW9kdWxlKCk7CisgICAgc3RhdGljIHZvaWQgSW5pdFRTRCgpOworICAgIHN0
YXRpYyBUQ01hbGxvY1RocmVhZENhY2hlKiBHZXRUaHJlYWRIZWFwKCk7CisgICAgc3RhdGljIFRD
TWFsbG9jVGhyZWFkQ2FjaGUqIEdldENhY2hlKCk7CisgICAgc3RhdGljIFRDTWFsbG9jVGhyZWFk
Q2FjaGUqIEdldENhY2hlSWZQcmVzZW50KCk7CisgICAgc3RhdGljIFRDTWFsbG9jVGhyZWFkQ2Fj
aGUqIENyZWF0ZUNhY2hlSWZOZWNlc3NhcnkoKTsKKyAgICBzdGF0aWMgdm9pZCBEZWxldGVDYWNo
ZShUQ01hbGxvY1RocmVhZENhY2hlKiBoZWFwKTsKKyAgICBzdGF0aWMgdm9pZCBCZWNvbWVJZGxl
KCk7CisgICAgc3RhdGljIHZvaWQgUmVjb21wdXRlVGhyZWFkQ2FjaGVTaXplKCk7CiAKICNpZmRl
ZiBXVEZfQ0hBTkdFUwotICB0ZW1wbGF0ZSA8Y2xhc3MgRmluZGVyLCBjbGFzcyBSZWFkZXI+Ci0g
IHZvaWQgZW51bWVyYXRlRnJlZU9iamVjdHMoRmluZGVyJiBmaW5kZXIsIGNvbnN0IFJlYWRlciYg
cmVhZGVyKQotICB7Ci0gICAgICBmb3IgKHVuc2lnbmVkIHNpemVDbGFzcyA9IDA7IHNpemVDbGFz
cyA8IGtOdW1DbGFzc2VzOyBzaXplQ2xhc3MrKykKLSAgICAgICAgICBsaXN0X1tzaXplQ2xhc3Nd
LmVudW1lcmF0ZUZyZWVPYmplY3RzKGZpbmRlciwgcmVhZGVyKTsKLSAgfQorICAgIHRlbXBsYXRl
IDxjbGFzcyBGaW5kZXIsIGNsYXNzIFJlYWRlcj4KKyAgICB2b2lkIGVudW1lcmF0ZUZyZWVPYmpl
Y3RzKEZpbmRlciYgZmluZGVyLCBjb25zdCBSZWFkZXImIHJlYWRlcikKKyAgICB7CisgICAgICAg
IGZvciAodW5zaWduZWQgc2l6ZUNsYXNzID0gMDsgc2l6ZUNsYXNzIDwga051bUNsYXNzZXM7IHNp
emVDbGFzcysrKQorICAgICAgICAgICAgbGlzdFtzaXplQ2xhc3NdLmVudW1lcmF0ZUZyZWVPYmpl
Y3RzKGZpbmRlciwgcmVhZGVyKTsKKyAgICB9CiAjZW5kaWYKIH07CiAKQEAgLTIzNTYsMTIyICsy
NDA0LDEyNCBAQCBjbGFzcyBUQ01hbGxvY19UaHJlYWRDYWNoZSB7CiAvLyBEYXRhIGtlcHQgcGVy
IHNpemUtY2xhc3MgaW4gY2VudHJhbCBjYWNoZQogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLWNsYXNzIFRDTWFs
bG9jX0NlbnRyYWxfRnJlZUxpc3QgewotIHB1YmxpYzoKLSAgdm9pZCBJbml0KHNpemVfdCBjbCk7
CitjbGFzcyBUQ01hbGxvY0NlbnRyYWxGcmVlTGlzdCB7CitwdWJsaWM6CisgICAgdm9pZCBJbml0
KHNpemVfdCBjbCk7CiAKLSAgLy8gVGhlc2UgbWV0aG9kcyBhbGwgZG8gaW50ZXJuYWwgbG9ja2lu
Zy4KKyAgICAvLyBUaGVzZSBtZXRob2RzIGFsbCBkbyBpbnRlcm5hbCBsb2NraW5nLgogCi0gIC8v
IEluc2VydCB0aGUgc3BlY2lmaWVkIHJhbmdlIGludG8gdGhlIGNlbnRyYWwgZnJlZWxpc3QuICBO
IGlzIHRoZSBudW1iZXIgb2YKLSAgLy8gZWxlbWVudHMgaW4gdGhlIHJhbmdlLgotICB2b2lkIElu
c2VydFJhbmdlKHZvaWQgKnN0YXJ0LCB2b2lkICplbmQsIGludCBOKTsKKyAgICAvLyBJbnNlcnQg
dGhlIHNwZWNpZmllZCByYW5nZSBpbnRvIHRoZSBjZW50cmFsIGZyZWVsaXN0LiBudW1JblJhbmdl
IGlzIHRoZSBudW1iZXIgb2YKKyAgICAvLyBlbGVtZW50cyBpbiB0aGUgcmFuZ2UuCisgICAgdm9p
ZCBJbnNlcnRSYW5nZSh2b2lkKiBzdGFydCwgdm9pZCogZW5kLCBpbnQgbnVtSW5SYW5nZSk7CiAK
LSAgLy8gUmV0dXJucyB0aGUgYWN0dWFsIG51bWJlciBvZiBmZXRjaGVkIGVsZW1lbnRzIGludG8g
Ti4KLSAgdm9pZCBSZW1vdmVSYW5nZSh2b2lkICoqc3RhcnQsIHZvaWQgKiplbmQsIGludCAqTik7
CisgICAgLy8gUmV0dXJucyB0aGUgYWN0dWFsIG51bWJlciBvZiBmZXRjaGVkIGVsZW1lbnRzIGlu
dG8gdGhlIGZpbmFsIGFyZ3VtZW50LgorICAgIHZvaWQgUmVtb3ZlUmFuZ2Uodm9pZCoqIHN0YXJ0
LCB2b2lkKiogZW5kLCBpbnQqKTsKIAotICAvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZnJlZSBv
YmplY3RzIGluIGNhY2hlLgotICBzaXplX3QgbGVuZ3RoKCkgewotICAgIFNwaW5Mb2NrSG9sZGVy
IGgoJmxvY2tfKTsKLSAgICByZXR1cm4gY291bnRlcl87Ci0gIH0KKyAgICAvLyBSZXR1cm5zIHRo
ZSBudW1iZXIgb2YgZnJlZSBvYmplY3RzIGluIGNhY2hlLgorICAgIHNpemVfdCBsZW5ndGgoKQor
ICAgIHsKKyAgICAgICAgU3BpbkxvY2tIb2xkZXIgaCgmbG9jayk7CisgICAgICAgIHJldHVybiBj
b3VudGVyOworICAgIH0KIAotICAvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZnJlZSBvYmplY3Rz
IGluIHRoZSB0cmFuc2ZlciBjYWNoZS4KLSAgaW50IHRjX2xlbmd0aCgpIHsKLSAgICBTcGluTG9j
a0hvbGRlciBoKCZsb2NrXyk7Ci0gICAgcmV0dXJuIHVzZWRfc2xvdHNfICogbnVtX29iamVjdHNf
dG9fbW92ZVtzaXplX2NsYXNzX107Ci0gIH0KKyAgICAvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2Yg
ZnJlZSBvYmplY3RzIGluIHRoZSB0cmFuc2ZlciBjYWNoZS4KKyAgICBpbnQgdGNMZW5ndGgoKQor
ICAgIHsKKyAgICAgICAgU3BpbkxvY2tIb2xkZXIgaCgmbG9jayk7CisgICAgICAgIHJldHVybiB1
c2VkU2xvdHMgKiBudW1PYmplY3RzVG9Nb3ZlW3NpemVDbGFzc107CisgICAgfQogCiAjaWZkZWYg
V1RGX0NIQU5HRVMKLSAgdGVtcGxhdGUgPGNsYXNzIEZpbmRlciwgY2xhc3MgUmVhZGVyPgotICB2
b2lkIGVudW1lcmF0ZUZyZWVPYmplY3RzKEZpbmRlciYgZmluZGVyLCBjb25zdCBSZWFkZXImIHJl
YWRlciwgVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdCogcmVtb3RlQ2VudHJhbEZyZWVMaXN0KQot
ICB7Ci0gICAgZm9yIChTcGFuKiBzcGFuID0gJmVtcHR5Xzsgc3BhbiAmJiBzcGFuICE9ICZlbXB0
eV87IHNwYW4gPSAoc3Bhbi0+bmV4dCA/IHJlYWRlcihzcGFuLT5uZXh0KSA6IDApKQotICAgICAg
QVNTRVJUKCFzcGFuLT5vYmplY3RzKTsKLQotICAgIEFTU0VSVCghbm9uZW1wdHlfLm9iamVjdHMp
OwotICAgIHN0YXRpYyBjb25zdCBwdHJkaWZmX3Qgbm9uZW1wdHlPZmZzZXQgPSByZWludGVycHJl
dF9jYXN0PGNvbnN0IGNoYXIqPigmbm9uZW1wdHlfKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
Y2hhcio+KHRoaXMpOwotCi0gICAgU3BhbiogcmVtb3RlTm9uZW1wdHkgPSByZWludGVycHJldF9j
YXN0PFNwYW4qPihyZWludGVycHJldF9jYXN0PGNoYXIqPihyZW1vdGVDZW50cmFsRnJlZUxpc3Qp
ICsgbm9uZW1wdHlPZmZzZXQpOwotICAgIFNwYW4qIHJlbW90ZVNwYW4gPSBub25lbXB0eV8ubmV4
dDsKLQotICAgIGZvciAoU3Bhbiogc3BhbiA9IHJlYWRlcihyZW1vdGVTcGFuKTsgc3BhbiAmJiBy
ZW1vdGVTcGFuICE9IHJlbW90ZU5vbmVtcHR5OyByZW1vdGVTcGFuID0gc3Bhbi0+bmV4dCwgc3Bh
biA9IChzcGFuLT5uZXh0ID8gcmVhZGVyKHNwYW4tPm5leHQpIDogMCkpIHsKLSAgICAgIGZvciAo
dm9pZCogbmV4dE9iamVjdCA9IHNwYW4tPm9iamVjdHM7IG5leHRPYmplY3Q7IG5leHRPYmplY3Qg
PSByZWFkZXIubmV4dEVudHJ5SW5MaW5rZWRMaXN0KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPihu
ZXh0T2JqZWN0KSkpCi0gICAgICAgIGZpbmRlci52aXNpdChuZXh0T2JqZWN0KTsKKyAgICB0ZW1w
bGF0ZSA8Y2xhc3MgRmluZGVyLCBjbGFzcyBSZWFkZXI+CisgICAgdm9pZCBlbnVtZXJhdGVGcmVl
T2JqZWN0cyhGaW5kZXImIGZpbmRlciwgY29uc3QgUmVhZGVyJiByZWFkZXIsIFRDTWFsbG9jQ2Vu
dHJhbEZyZWVMaXN0KiByZW1vdGVDZW50cmFsRnJlZUxpc3QpCisgICAgeworICAgICAgICBmb3Ig
KFNwYW4qIHNwYW4gPSAmZW1wdHk7IHNwYW4gJiYgc3BhbiAhPSAmZW1wdHk7IHNwYW4gPSAoc3Bh
bi0+bmV4dCA/IHJlYWRlcihzcGFuLT5uZXh0KSA6IDApKQorICAgICAgICAgICAgQVNTRVJUKCFz
cGFuLT5vYmplY3RzKTsKKworICAgICAgICBBU1NFUlQoIW5vbmVtcHR5Lm9iamVjdHMpOworICAg
ICAgICBzdGF0aWMgY29uc3QgcHRyZGlmZl90IG5vbmVtcHR5T2Zmc2V0ID0gcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBjaGFyKj4oJm5vbmVtcHR5KSAtIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hh
cio+KHRoaXMpOworCisgICAgICAgIFNwYW4qIHJlbW90ZU5vbmVtcHR5ID0gcmVpbnRlcnByZXRf
Y2FzdDxTcGFuKj4ocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocmVtb3RlQ2VudHJhbEZyZWVMaXN0
KSArIG5vbmVtcHR5T2Zmc2V0KTsKKyAgICAgICAgU3BhbiogcmVtb3RlU3BhbiA9IG5vbmVtcHR5
Lm5leHQ7CisKKyAgICAgICAgZm9yIChTcGFuKiBzcGFuID0gcmVhZGVyKHJlbW90ZVNwYW4pOyBz
cGFuICYmIHJlbW90ZVNwYW4gIT0gcmVtb3RlTm9uZW1wdHk7IHJlbW90ZVNwYW4gPSBzcGFuLT5u
ZXh0LCBzcGFuID0gKHNwYW4tPm5leHQgPyByZWFkZXIoc3Bhbi0+bmV4dCkgOiAwKSkgeworICAg
ICAgICAgICAgZm9yICh2b2lkKiBuZXh0T2JqZWN0ID0gc3Bhbi0+b2JqZWN0czsgbmV4dE9iamVj
dDsgbmV4dE9iamVjdCA9IHJlYWRlci5uZXh0RW50cnlJbkxpbmtlZExpc3QocmVpbnRlcnByZXRf
Y2FzdDx2b2lkKio+KG5leHRPYmplY3QpKSkKKyAgICAgICAgICAgICAgICBmaW5kZXIudmlzaXQo
bmV4dE9iamVjdCk7CisgICAgICAgIH0KICAgICB9Ci0gIH0KICNlbmRpZgogCi0gcHJpdmF0ZToK
LSAgLy8gUkVRVUlSRVM6IGxvY2tfIGlzIGhlbGQKLSAgLy8gUmVtb3ZlIG9iamVjdCBmcm9tIGNh
Y2hlIGFuZCByZXR1cm4uCi0gIC8vIFJldHVybiBOVUxMIGlmIG5vIGZyZWUgZW50cmllcyBpbiBj
YWNoZS4KLSAgdm9pZCogRmV0Y2hGcm9tU3BhbnMoKTsKLQotICAvLyBSRVFVSVJFUzogbG9ja18g
aXMgaGVsZAotICAvLyBSZW1vdmUgb2JqZWN0IGZyb20gY2FjaGUgYW5kIHJldHVybi4gIEZldGNo
ZXMKLSAgLy8gZnJvbSBwYWdlaGVhcCBpZiBjYWNoZSBpcyBlbXB0eS4gIE9ubHkgcmV0dXJucwot
ICAvLyBOVUxMIG9uIGFsbG9jYXRpb24gZmFpbHVyZS4KLSAgdm9pZCogRmV0Y2hGcm9tU3BhbnNT
YWZlKCk7Ci0KLSAgLy8gUkVRVUlSRVM6IGxvY2tfIGlzIGhlbGQKLSAgLy8gUmVsZWFzZSBhIGxp
bmtlZCBsaXN0IG9mIG9iamVjdHMgdG8gc3BhbnMuCi0gIC8vIE1heSB0ZW1wb3JhcmlseSByZWxl
YXNlIGxvY2tfLgotICB2b2lkIFJlbGVhc2VMaXN0VG9TcGFucyh2b2lkICpzdGFydCk7Ci0KLSAg
Ly8gUkVRVUlSRVM6IGxvY2tfIGlzIGhlbGQKLSAgLy8gUmVsZWFzZSBhbiBvYmplY3QgdG8gc3Bh
bnMuCi0gIC8vIE1heSB0ZW1wb3JhcmlseSByZWxlYXNlIGxvY2tfLgotICBBTFdBWVNfSU5MSU5F
IHZvaWQgUmVsZWFzZVRvU3BhbnModm9pZCogb2JqZWN0KTsKLQotICAvLyBSRVFVSVJFUzogbG9j
a18gaXMgaGVsZAotICAvLyBQb3B1bGF0ZSBjYWNoZSBieSBmZXRjaGluZyBmcm9tIHRoZSBwYWdl
IGhlYXAuCi0gIC8vIE1heSB0ZW1wb3JhcmlseSByZWxlYXNlIGxvY2tfLgotICBBTFdBWVNfSU5M
SU5FIHZvaWQgUG9wdWxhdGUoKTsKLQotICAvLyBSRVFVSVJFUzogbG9jayBpcyBoZWxkLgotICAv
LyBUcmllcyB0byBtYWtlIHJvb20gZm9yIGEgVENFbnRyeS4gIElmIHRoZSBjYWNoZSBpcyBmdWxs
IGl0IHdpbGwgdHJ5IHRvCi0gIC8vIGV4cGFuZCBpdCBhdCB0aGUgY29zdCBvZiBzb21lIG90aGVy
IGNhY2hlIHNpemUuICBSZXR1cm4gZmFsc2UgaWYgdGhlcmUgaXMKLSAgLy8gbm8gc3BhY2UuCi0g
IGJvb2wgTWFrZUNhY2hlU3BhY2UoKTsKLQotICAvLyBSRVFVSVJFUzogbG9ja18gZm9yIGxvY2tl
ZF9zaXplX2NsYXNzIGlzIGhlbGQuCi0gIC8vIFBpY2tzIGEgInJhbmRvbSIgc2l6ZSBjbGFzcyB0
byBzdGVhbCBUQ0VudHJ5IHNsb3QgZnJvbS4gIEluIHJlYWxpdHkgaXQKLSAgLy8ganVzdCBpdGVy
YXRlcyBvdmVyIHRoZSBzaXplY2xhc3NlcyBidXQgZG9lcyBzbyB3aXRob3V0IHRha2luZyBhIGxv
Y2suCi0gIC8vIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLgotICAvLyBNYXkgdGVtcG9yYXJpbHkg
bG9jayBhICJyYW5kb20iIHNpemUgY2xhc3MuCi0gIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGJvb2wg
RXZpY3RSYW5kb21TaXplQ2xhc3Moc2l6ZV90IGxvY2tlZF9zaXplX2NsYXNzLCBib29sIGZvcmNl
KTsKLQotICAvLyBSRVFVSVJFUzogbG9ja18gaXMgKm5vdCogaGVsZC4KLSAgLy8gVHJpZXMgdG8g
c2hyaW5rIHRoZSBDYWNoZS4gIElmIGZvcmNlIGlzIHRydWUgaXQgd2lsbCByZWxhc2Ugb2JqZWN0
cyB0bwotICAvLyBzcGFucyBpZiBpdCBhbGxvd3MgaXQgdG8gc2hyaW5rIHRoZSBjYWNoZS4gIFJl
dHVybiBmYWxzZSBpZiBpdCBmYWlsZWQgdG8KLSAgLy8gc2hyaW5rIHRoZSBjYWNoZS4gIERlY3Jl
bWVudHMgY2FjaGVfc2l6ZV8gb24gc3VjY2Vlc3MuCi0gIC8vIE1heSB0ZW1wb3JhcmlseSB0YWtl
IGxvY2tfLiAgSWYgaXQgdGFrZXMgbG9ja18sIHRoZSBsb2NrZWRfc2l6ZV9jbGFzcwotICAvLyBs
b2NrIGlzIHJlbGVhc2VkIHRvIHRoZSB0aHJlYWQgZnJvbSBob2xkaW5nIHR3byBzaXplIGNsYXNz
IGxvY2tzCi0gIC8vIGNvbmN1cnJlbnRseSB3aGljaCBjb3VsZCBsZWFkIHRvIGEgZGVhZGxvY2su
Ci0gIGJvb2wgU2hyaW5rQ2FjaGUoaW50IGxvY2tlZF9zaXplX2NsYXNzLCBib29sIGZvcmNlKTsK
LQotICAvLyBUaGlzIGxvY2sgcHJvdGVjdHMgYWxsIHRoZSBkYXRhIG1lbWJlcnMuICBjYWNoZWRf
ZW50cmllcyBhbmQgY2FjaGVfc2l6ZV8KLSAgLy8gbWF5IGJlIGxvb2tlZCBhdCB3aXRob3V0IGhv
bGRpbmcgdGhlIGxvY2suCi0gIFNwaW5Mb2NrIGxvY2tfOwotCi0gIC8vIFdlIGtlZXAgbGlua2Vk
IGxpc3RzIG9mIGVtcHR5IGFuZCBub24tZW1wdHkgc3BhbnMuCi0gIHNpemVfdCAgIHNpemVfY2xh
c3NfOyAgICAgLy8gTXkgc2l6ZSBjbGFzcwotICBTcGFuICAgICBlbXB0eV87ICAgICAgICAgIC8v
IER1bW15IGhlYWRlciBmb3IgbGlzdCBvZiBlbXB0eSBzcGFucwotICBTcGFuICAgICBub25lbXB0
eV87ICAgICAgIC8vIER1bW15IGhlYWRlciBmb3IgbGlzdCBvZiBub24tZW1wdHkgc3BhbnMKLSAg
c2l6ZV90ICAgY291bnRlcl87ICAgICAgICAvLyBOdW1iZXIgb2YgZnJlZSBvYmplY3RzIGluIGNh
Y2hlIGVudHJ5Ci0KLSAgLy8gSGVyZSB3ZSByZXNlcnZlIHNwYWNlIGZvciBUQ0VudHJ5IGNhY2hl
IHNsb3RzLiAgU2luY2Ugb25lIHNpemUgY2xhc3MgY2FuCi0gIC8vIGVuZCB1cCBnZXR0aW5nIGFs
bCB0aGUgVENFbnRyaWVzIHF1b3RhIGluIHRoZSBzeXN0ZW0gd2UganVzdCBwcmVhbGxvY2F0ZQot
ICAvLyBzdWZmaWNpZW50IG51bWJlciBvZiBlbnRyaWVzIGhlcmUuCi0gIFRDRW50cnkgdGNfc2xv
dHNfW2tOdW1UcmFuc2ZlckVudHJpZXNdOwotCi0gIC8vIE51bWJlciBvZiBjdXJyZW50bHkgdXNl
ZCBjYWNoZWQgZW50cmllcyBpbiB0Y19zbG90c18uICBUaGlzIHZhcmlhYmxlIGlzCi0gIC8vIHVw
ZGF0ZWQgdW5kZXIgYSBsb2NrIGJ1dCBjYW4gYmUgcmVhZCB3aXRob3V0IG9uZS4KLSAgaW50MzJf
dCB1c2VkX3Nsb3RzXzsKLSAgLy8gVGhlIGN1cnJlbnQgbnVtYmVyIG9mIHNsb3RzIGZvciB0aGlz
IHNpemUgY2xhc3MuICBUaGlzIGlzIGFuCi0gIC8vIGFkYXB0aXZlIHZhbHVlIHRoYXQgaXMgaW5j
cmVhc2VkIGlmIHRoZXJlIGlzIGxvdHMgb2YgdHJhZmZpYwotICAvLyBvbiBhIGdpdmVuIHNpemUg
Y2xhc3MuCi0gIGludDMyX3QgY2FjaGVfc2l6ZV87Citwcml2YXRlOgorICAgIC8vIFJFUVVJUkVT
OiBsb2NrIGlzIGhlbGQKKyAgICAvLyBSZW1vdmUgb2JqZWN0IGZyb20gY2FjaGUgYW5kIHJldHVy
bi4KKyAgICAvLyBSZXR1cm4gbnVsbCBpZiBubyBmcmVlIGVudHJpZXMgaW4gY2FjaGUuCisgICAg
dm9pZCogRmV0Y2hGcm9tU3BhbnMoKTsKKworICAgIC8vIFJFUVVJUkVTOiBsb2NrIGlzIGhlbGQK
KyAgICAvLyBSZW1vdmUgb2JqZWN0IGZyb20gY2FjaGUgYW5kIHJldHVybi4gRmV0Y2hlcworICAg
IC8vIGZyb20gcGFnZWhlYXAgaWYgY2FjaGUgaXMgZW1wdHkuIE9ubHkgcmV0dXJucworICAgIC8v
IG51bGwgb24gYWxsb2NhdGlvbiBmYWlsdXJlLgorICAgIHZvaWQqIEZldGNoRnJvbVNwYW5zU2Fm
ZSgpOworCisgICAgLy8gUkVRVUlSRVM6IGxvY2sgaXMgaGVsZAorICAgIC8vIFJlbGVhc2UgYSBs
aW5rZWQgbGlzdCBvZiBvYmplY3RzIHRvIHNwYW5zLgorICAgIC8vIE1heSB0ZW1wb3JhcmlseSBy
ZWxlYXNlIGxvY2suCisgICAgdm9pZCBSZWxlYXNlTGlzdFRvU3BhbnModm9pZCogc3RhcnQpOwor
CisgICAgLy8gUkVRVUlSRVM6IGxvY2sgaXMgaGVsZAorICAgIC8vIFJlbGVhc2UgYW4gb2JqZWN0
IHRvIHNwYW5zLgorICAgIC8vIE1heSB0ZW1wb3JhcmlseSByZWxlYXNlIGxvY2suCisgICAgQUxX
QVlTX0lOTElORSB2b2lkIFJlbGVhc2VUb1NwYW5zKHZvaWQqIG9iamVjdFRvUmVsZWFzZSk7CisK
KyAgICAvLyBSRVFVSVJFUzogbG9jayBpcyBoZWxkCisgICAgLy8gUG9wdWxhdGUgY2FjaGUgYnkg
ZmV0Y2hpbmcgZnJvbSB0aGUgcGFnZSBoZWFwLgorICAgIC8vIE1heSB0ZW1wb3JhcmlseSByZWxl
YXNlIGxvY2suCisgICAgQUxXQVlTX0lOTElORSB2b2lkIFBvcHVsYXRlKCk7CisKKyAgICAvLyBS
RVFVSVJFUzogbG9jayBpcyBoZWxkLgorICAgIC8vIFRyaWVzIHRvIG1ha2Ugcm9vbSBmb3IgYSBU
Q0VudHJ5LiBJZiB0aGUgY2FjaGUgaXMgZnVsbCBpdCB3aWxsIHRyeSB0bworICAgIC8vIGV4cGFu
ZCBpdCBhdCB0aGUgY29zdCBvZiBzb21lIG90aGVyIGNhY2hlIHNpemUuIFJldHVybiBmYWxzZSBp
ZiB0aGVyZSBpcworICAgIC8vIG5vIHNwYWNlLgorICAgIGJvb2wgTWFrZUNhY2hlU3BhY2UoKTsK
KworICAgIC8vIFJFUVVJUkVTOiBsb2NrIGZvciBsb2NrZWRTaXplQ2xhc3MgaXMgaGVsZC4KKyAg
ICAvLyBQaWNrcyBhICJyYW5kb20iIHNpemUgY2xhc3MgdG8gc3RlYWwgVENFbnRyeSBzbG90IGZy
b20uIEluIHJlYWxpdHkgaXQKKyAgICAvLyBqdXN0IGl0ZXJhdGVzIG92ZXIgdGhlIHNpemVDbGFz
c2VzIGJ1dCBkb2VzIHNvIHdpdGhvdXQgdGFraW5nIGEgbG9jay4KKyAgICAvLyBSZXR1cm5zIHRy
dWUgb24gc3VjY2Vzcy4KKyAgICAvLyBNYXkgdGVtcG9yYXJpbHkgbG9jayBhICJyYW5kb20iIHNp
emUgY2xhc3MuCisgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCBFdmljdFJhbmRvbVNpemVD
bGFzcyhzaXplX3QgbG9ja2VkU2l6ZUNsYXNzLCBib29sIGZvcmNlKTsKKworICAgIC8vIFJFUVVJ
UkVTOiBsb2NrIGlzICpub3QqIGhlbGQuCisgICAgLy8gVHJpZXMgdG8gc2hyaW5rIHRoZSBDYWNo
ZS4gSWYgZm9yY2UgaXMgdHJ1ZSBpdCB3aWxsIHJlbGFzZSBvYmplY3RzIHRvCisgICAgLy8gc3Bh
bnMgaWYgaXQgYWxsb3dzIGl0IHRvIHNocmluayB0aGUgY2FjaGUuIFJldHVybiBmYWxzZSBpZiBp
dCBmYWlsZWQgdG8KKyAgICAvLyBzaHJpbmsgdGhlIGNhY2hlLiBEZWNyZW1lbnRzIGNhY2hlU2l6
ZSBvbiBzdWNjZWVzcy4KKyAgICAvLyBNYXkgdGVtcG9yYXJpbHkgdGFrZSBsb2NrLiBJZiBpdCB0
YWtlcyBsb2NrLCB0aGUgbG9ja2VkU2l6ZUNsYXNzCisgICAgLy8gbG9jayBpcyByZWxlYXNlZCB0
byB0aGUgdGhyZWFkIGZyb20gaG9sZGluZyB0d28gc2l6ZSBjbGFzcyBsb2NrcworICAgIC8vIGNv
bmN1cnJlbnRseSB3aGljaCBjb3VsZCBsZWFkIHRvIGEgZGVhZGxvY2suCisgICAgYm9vbCBTaHJp
bmtDYWNoZShpbnQgbG9ja2VkU2l6ZUNsYXNzLCBib29sIGZvcmNlKTsKKworICAgIC8vIFRoaXMg
bG9jayBwcm90ZWN0cyBhbGwgdGhlIGRhdGEgbWVtYmVycy4gY2FjaGVkRW50cmllcyBhbmQgY2Fj
aGVTaXplCisgICAgLy8gbWF5IGJlIGxvb2tlZCBhdCB3aXRob3V0IGhvbGRpbmcgdGhlIGxvY2su
CisgICAgU3BpbkxvY2sgbG9jazsKKworICAgIC8vIFdlIGtlZXAgbGlua2VkIGxpc3RzIG9mIGVt
cHR5IGFuZCBub24tZW1wdHkgc3BhbnMuCisgICAgc2l6ZV90IHNpemVDbGFzczsgLy8gTXkgc2l6
ZSBjbGFzcworICAgIFNwYW4gZW1wdHk7IC8vIER1bW15IGhlYWRlciBmb3IgbGlzdCBvZiBlbXB0
eSBzcGFucworICAgIFNwYW4gbm9uZW1wdHk7IC8vIER1bW15IGhlYWRlciBmb3IgbGlzdCBvZiBu
b24tZW1wdHkgc3BhbnMKKyAgICBzaXplX3QgY291bnRlcjsgLy8gTnVtYmVyIG9mIGZyZWUgb2Jq
ZWN0cyBpbiBjYWNoZSBlbnRyeQorCisgICAgLy8gSGVyZSB3ZSByZXNlcnZlIHNwYWNlIGZvciBU
Q0VudHJ5IGNhY2hlIHNsb3RzLiBTaW5jZSBvbmUgc2l6ZSBjbGFzcyBjYW4KKyAgICAvLyBlbmQg
dXAgZ2V0dGluZyBhbGwgdGhlIFRDRW50cmllcyBxdW90YSBpbiB0aGUgc3lzdGVtIHdlIGp1c3Qg
cHJlYWxsb2NhdGUKKyAgICAvLyBzdWZmaWNpZW50IG51bWJlciBvZiBlbnRyaWVzIGhlcmUuCisg
ICAgVENFbnRyeSB0Y1Nsb3RzW2tOdW1UcmFuc2ZlckVudHJpZXNdOworCisgICAgLy8gTnVtYmVy
IG9mIGN1cnJlbnRseSB1c2VkIGNhY2hlZCBlbnRyaWVzIGluIHRjU2xvdHMuIFRoaXMgdmFyaWFi
bGUgaXMKKyAgICAvLyB1cGRhdGVkIHVuZGVyIGEgbG9jayBidXQgY2FuIGJlIHJlYWQgd2l0aG91
dCBvbmUuCisgICAgaW50MzJfdCB1c2VkU2xvdHM7CisgICAgLy8gVGhlIGN1cnJlbnQgbnVtYmVy
IG9mIHNsb3RzIGZvciB0aGlzIHNpemUgY2xhc3MuIFRoaXMgaXMgYW4KKyAgICAvLyBhZGFwdGl2
ZSB2YWx1ZSB0aGF0IGlzIGluY3JlYXNlZCBpZiB0aGVyZSBpcyBsb3RzIG9mIHRyYWZmaWMKKyAg
ICAvLyBvbiBhIGdpdmVuIHNpemUgY2xhc3MuCisgICAgaW50MzJfdCBjYWNoZVNpemU7CiB9Owog
CiAjaWYgQ09NUElMRVIoQ0xBTkcpICYmIGRlZmluZWQoX19oYXNfd2FybmluZykKQEAgLTI0ODIs
OSArMjUzMiw5IEBAIGNsYXNzIFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3QgewogI2VuZGlmCiAK
IC8vIFBhZCBlYWNoIENlbnRyYWxDYWNoZSBvYmplY3QgdG8gbXVsdGlwbGUgb2YgNjQgYnl0ZXMK
LWNsYXNzIFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3RQYWRkZWQgOiBwdWJsaWMgVENNYWxsb2Nf
Q2VudHJhbF9GcmVlTGlzdCB7Ci0gcHJpdmF0ZToKLSAgY2hhciBwYWRfWyg2NCAtIChzaXplb2Yo
VENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdCkgJSA2NCkpICUgNjRdOworY2xhc3MgVENNYWxsb2ND
ZW50cmFsRnJlZUxpc3RQYWRkZWQgOiBwdWJsaWMgVENNYWxsb2NDZW50cmFsRnJlZUxpc3Qgewor
cHJpdmF0ZToKKyAgICBjaGFyIHBhZFsoNjQgLSAoc2l6ZW9mKFRDTWFsbG9jQ2VudHJhbEZyZWVM
aXN0KSAlIDY0KSkgJSA2NF07CiB9OwogCiAjaWYgQ09NUElMRVIoQ0xBTkcpICYmIGRlZmluZWQo
X19oYXNfd2FybmluZykKQEAgLTI0OTcsMjIgKzI1NDcsMjIgQEAgY2xhc3MgVENNYWxsb2NfQ2Vu
dHJhbF9GcmVlTGlzdFBhZGRlZCA6CiAKIC8vIENlbnRyYWwgY2FjaGUgLS0gYSBjb2xsZWN0aW9u
IG9mIGZyZWUtbGlzdHMsIG9uZSBwZXIgc2l6ZS1jbGFzcy4KIC8vIFdlIGhhdmUgYSBzZXBhcmF0
ZSBsb2NrIHBlciBmcmVlLWxpc3QgdG8gcmVkdWNlIGNvbnRlbnRpb24uCi1zdGF0aWMgVENNYWxs
b2NfQ2VudHJhbF9GcmVlTGlzdFBhZGRlZCBjZW50cmFsX2NhY2hlW2tOdW1DbGFzc2VzXTsKK3N0
YXRpYyBUQ01hbGxvY0NlbnRyYWxGcmVlTGlzdFBhZGRlZCBjZW50cmFsQ2FjaGVba051bUNsYXNz
ZXNdOwogCiAvLyBQYWdlLWxldmVsIGFsbG9jYXRvcgotc3RhdGljIEFsbG9jQWxpZ25tZW50SW50
ZWdlciBwYWdlaGVhcF9tZW1vcnlbKHNpemVvZihUQ01hbGxvY19QYWdlSGVhcCkgKyBzaXplb2Yo
QWxsb2NBbGlnbm1lbnRJbnRlZ2VyKSAtIDEpIC8gc2l6ZW9mKEFsbG9jQWxpZ25tZW50SW50ZWdl
cildOworc3RhdGljIEFsbG9jQWxpZ25tZW50SW50ZWdlciBwYWdlaGVhcE1lbW9yeVsoc2l6ZW9m
KFRDTWFsbG9jUGFnZUhlYXApICsgc2l6ZW9mKEFsbG9jQWxpZ25tZW50SW50ZWdlcikgLSAxKSAv
IHNpemVvZihBbGxvY0FsaWdubWVudEludGVnZXIpXTsKIHN0YXRpYyBib29sIHBoaW5pdGVkID0g
ZmFsc2U7CiAKIC8vIEF2b2lkIGV4dHJhIGxldmVsIG9mIGluZGlyZWN0aW9uIGJ5IG1ha2luZyAi
cGFnZWhlYXAiIGJlIGp1c3QgYW4gYWxpYXMKLS8vIG9mIHBhZ2VoZWFwX21lbW9yeS4KKy8vIG9m
IHBhZ2VoZWFwTWVtb3J5LgogdHlwZWRlZiB1bmlvbiB7CiAgICAgdm9pZCogbV9tZW1vcnk7Ci0g
ICAgVENNYWxsb2NfUGFnZUhlYXAqIG1fcGFnZUhlYXA7CisgICAgVENNYWxsb2NQYWdlSGVhcCog
bV9wYWdlSGVhcDsKIH0gUGFnZUhlYXBVbmlvbjsKIAotc3RhdGljIGlubGluZSBUQ01hbGxvY19Q
YWdlSGVhcCogZ2V0UGFnZUhlYXAoKQorc3RhdGljIGlubGluZSBUQ01hbGxvY1BhZ2VIZWFwKiBn
ZXRQYWdlSGVhcCgpCiB7Ci0gICAgUGFnZUhlYXBVbmlvbiB1ID0geyAmcGFnZWhlYXBfbWVtb3J5
WzBdIH07CisgICAgUGFnZUhlYXBVbmlvbiB1ID0geyAmcGFnZWhlYXBNZW1vcnlbMF0gfTsKICAg
ICByZXR1cm4gdS5tX3BhZ2VIZWFwOwogfQogCkBAIC0yNTIyLDkgKzI1NzIsOSBAQCBzdGF0aWMg
aW5saW5lIFRDTWFsbG9jX1BhZ2VIZWFwKiBnZXRQYWdlCiAKICNpZiBIQVZFKERJU1BBVENIX0gp
IHx8IE9TKFdJTkRPV1MpCiAKLXZvaWQgVENNYWxsb2NfUGFnZUhlYXA6OnBlcmlvZGljU2NhdmVu
Z2UoKQordm9pZCBUQ01hbGxvY1BhZ2VIZWFwOjpwZXJpb2RpY1NjYXZlbmdlKCkKIHsKLSAgICBT
cGluTG9ja0hvbGRlciBoKCZwYWdlaGVhcF9sb2NrKTsKKyAgICBTcGluTG9ja0hvbGRlciBoKCZw
YWdlaGVhcExvY2spOwogICAgIHBhZ2VoZWFwLT5zY2F2ZW5nZSgpOwogCiAgICAgaWYgKHNob3Vs
ZFNjYXZlbmdlKCkpIHsKQEAgLTI1MzUsMjkgKzI1ODUsMjkgQEAgdm9pZCBUQ01hbGxvY19QYWdl
SGVhcDo6cGVyaW9kaWNTY2F2ZW5nZQogICAgIHN1c3BlbmRTY2F2ZW5nZXIoKTsKIH0KIAotQUxX
QVlTX0lOTElORSB2b2lkIFRDTWFsbG9jX1BhZ2VIZWFwOjpzaWduYWxTY2F2ZW5nZXIoKQorQUxX
QVlTX0lOTElORSB2b2lkIFRDTWFsbG9jUGFnZUhlYXA6OnNpZ25hbFNjYXZlbmdlcigpCiB7Ci0g
ICAgQVNTRVJUKHBhZ2VoZWFwX2xvY2suSXNIZWxkKCkpOworICAgIEFTU0VSVChwYWdlaGVhcExv
Y2suSXNIZWxkKCkpOwogICAgIGlmIChpc1NjYXZlbmdlclN1c3BlbmRlZCgpICYmIHNob3VsZFNj
YXZlbmdlKCkpCiAgICAgICAgIHNjaGVkdWxlU2NhdmVuZ2VyKCk7CiB9CiAKICNlbHNlCiAKLXZv
aWQgVENNYWxsb2NfUGFnZUhlYXA6OnNjYXZlbmdlclRocmVhZCgpCit2b2lkIFRDTWFsbG9jUGFn
ZUhlYXA6OnNjYXZlbmdlclRocmVhZCgpCiB7CiAjaWYgSEFWRShQVEhSRUFEX1NFVE5BTUVfTlAp
CiAgICAgcHRocmVhZF9zZXRuYW1lX25wKCJKYXZhU2NyaXB0Q29yZTogRmFzdE1hbGxvYyBzY2F2
ZW5nZXIiKTsKICNlbmRpZgogCiAgICAgd2hpbGUgKDEpIHsKLSAgICAgICAgcGFnZWhlYXBfbG9j
ay5Mb2NrKCk7CisgICAgICAgIHBhZ2VoZWFwTG9jay5Mb2NrKCk7CiAgICAgICAgIGlmICghc2hv
dWxkU2NhdmVuZ2UoKSkgewogICAgICAgICAgICAgLy8gU2V0IHRvIGZhbHNlIHNvIHRoYXQgc2ln
bmFsU2NhdmVuZ2VyKCkgd2lsbCBjaGVjayB3aGV0aGVyIHdlIG5lZWQgdG8gYmUgc2lnYW5sbGVk
LgogICAgICAgICAgICAgbV9zY2F2ZW5nZVRocmVhZEFjdGl2ZSA9IGZhbHNlOwogCiAgICAgICAg
ICAgICAvLyBXZSBuZWVkIHRvIHVubG9jayBub3csIGFzIHRoaXMgdGhyZWFkIHdpbGwgYmxvY2sg
b24gdGhlIGNvbmR2YXIgdW50aWwgc2NhdmVuZ2luZyBpcyByZXF1aXJlZC4KLSAgICAgICAgICAg
IHBhZ2VoZWFwX2xvY2suVW5sb2NrKCk7CisgICAgICAgICAgICBwYWdlaGVhcExvY2suVW5sb2Nr
KCk7CiAKICAgICAgICAgICAgIC8vIEJsb2NrIHVudGlsIHRoZXJlIGFyZSBlbm91Z2ggZnJlZSBj
b21taXR0ZWQgcGFnZXMgdG8gcmVsZWFzZSBiYWNrIHRvIHRoZSBzeXN0ZW0uCiAgICAgICAgICAg
ICBwdGhyZWFkX211dGV4X2xvY2soJm1fc2NhdmVuZ2VNdXRleCk7CkBAIC0yNTY5LDEzICsyNjE5
LDEzIEBAIHZvaWQgVENNYWxsb2NfUGFnZUhlYXA6OnNjYXZlbmdlclRocmVhZCgKICAgICAgICAg
ICAgIC8vIFNldCB0byB0cnVlIHRvIHByZXZlbnQgdW5uZWNlc3Nhcnkgc2lnbmFsbGluZyBvZiB0
aGUgY29uZHZhci4KICAgICAgICAgICAgIG1fc2NhdmVuZ2VUaHJlYWRBY3RpdmUgPSB0cnVlOwog
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHBhZ2VoZWFwX2xvY2suVW5sb2NrKCk7CisgICAg
ICAgICAgICBwYWdlaGVhcExvY2suVW5sb2NrKCk7CiAKICAgICAgICAgLy8gV2FpdCBmb3IgYSB3
aGlsZSB0byBjYWxjdWxhdGUgaG93IG11Y2ggbWVtb3J5IHJlbWFpbnMgdW51c2VkIGR1cmluZyB0
aGlzIHBhdXNlLgogICAgICAgICBzbGVlcChrU2NhdmVuZ2VEZWxheUluU2Vjb25kcyk7CiAKICAg
ICAgICAgewotICAgICAgICAgICAgU3BpbkxvY2tIb2xkZXIgaCgmcGFnZWhlYXBfbG9jayk7Cisg
ICAgICAgICAgICBTcGluTG9ja0hvbGRlciBoKCZwYWdlaGVhcExvY2spOwogICAgICAgICAgICAg
cGFnZWhlYXAtPnNjYXZlbmdlKCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0yNTg4LDE5ICsyNjM4
LDE5IEBAIHZvaWQgVENNYWxsb2NfUGFnZUhlYXA6OnNjYXZlbmdlclRocmVhZCgKIC8vIElmIFRM
UyBpcyBhdmFpbGFibGUsIHdlIGFsc28gc3RvcmUgYSBjb3B5CiAvLyBvZiB0aGUgcGVyLXRocmVh
ZCBvYmplY3QgaW4gYSBfX3RocmVhZCB2YXJpYWJsZQogLy8gc2luY2UgX190aHJlYWQgdmFyaWFi
bGVzIGFyZSBmYXN0ZXIgdG8gcmVhZAotLy8gdGhhbiBwdGhyZWFkX2dldHNwZWNpZmljKCkuICBX
ZSBzdGlsbCBuZWVkCisvLyB0aGFuIHB0aHJlYWRfZ2V0c3BlY2lmaWMoKS4gV2Ugc3RpbGwgbmVl
ZAogLy8gcHRocmVhZF9zZXRzcGVjaWZpYygpIGJlY2F1c2UgX190aHJlYWQKIC8vIHZhcmlhYmxl
cyBwcm92aWRlIG5vIHdheSB0byBydW4gY2xlYW51cAogLy8gY29kZSB3aGVuIGEgdGhyZWFkIGlz
IGRlc3Ryb3llZC4KICNpZmRlZiBIQVZFX1RMUwotc3RhdGljIF9fdGhyZWFkIFRDTWFsbG9jX1Ro
cmVhZENhY2hlICp0aHJlYWRsb2NhbF9oZWFwOworc3RhdGljIF9fdGhyZWFkIFRDTWFsbG9jVGhy
ZWFkQ2FjaGUgKnRocmVhZGxvY2FsSGVhcDsKICNlbmRpZgotLy8gVGhyZWFkLXNwZWNpZmljIGtl
eS4gIEluaXRpYWxpemF0aW9uIGhlcmUgaXMgc29tZXdoYXQgdHJpY2t5CisvLyBUaHJlYWQtc3Bl
Y2lmaWMga2V5LiBJbml0aWFsaXphdGlvbiBoZXJlIGlzIHNvbWV3aGF0IHRyaWNreQogLy8gYmVj
YXVzZSBzb21lIExpbnV4IHN0YXJ0dXAgY29kZSBpbnZva2VzIG1hbGxvYygpIGJlZm9yZSBpdAog
Ly8gaXMgaW4gYSBnb29kIGVub3VnaCBzdGF0ZSB0byBoYW5kbGUgcHRocmVhZF9rZXljcmVhdGUo
KS4KLS8vIFRoZXJlZm9yZSwgd2UgdXNlIFRTRCBrZXlzIG9ubHkgYWZ0ZXIgdHNkX2luaXRlZCBp
cyBzZXQgdG8gdHJ1ZS4KKy8vIFRoZXJlZm9yZSwgd2UgdXNlIFRTRCBrZXlzIG9ubHkgYWZ0ZXIg
dHNkSW5pdGVkIGlzIHNldCB0byB0cnVlLgogLy8gVW50aWwgdGhlbiwgd2UgdXNlIGEgc2xvdyBw
YXRoIHRvIGdldCB0aGUgaGVhcCBvYmplY3QuCi1zdGF0aWMgYm9vbCB0c2RfaW5pdGVkID0gZmFs
c2U7CitzdGF0aWMgYm9vbCB0c2RJbml0ZWQgPSBmYWxzZTsKICNpZiBVU0UoUFRIUkVBRF9HRVRT
UEVDSUZJQ19ESVJFQ1QpCiBzdGF0aWMgY29uc3QgcHRocmVhZF9rZXlfdCBoZWFwX2tleSA9IF9f
UFRLX0ZSQU1FV09SS19KQVZBU0NSSVBUQ09SRV9LRVkwOwogI2Vsc2UKQEAgLTI2MTAsNyArMjY2
MCw3IEBAIHN0YXRpYyBwdGhyZWFkX2tleV90IGhlYXBfa2V5OwogRFdPUkQgdGxzSW5kZXggPSBU
TFNfT1VUX09GX0lOREVYRVM7CiAjZW5kaWYKIAotc3RhdGljIEFMV0FZU19JTkxJTkUgdm9pZCBz
ZXRUaHJlYWRIZWFwKFRDTWFsbG9jX1RocmVhZENhY2hlKiBoZWFwKQorc3RhdGljIEFMV0FZU19J
TkxJTkUgdm9pZCBzZXRUaHJlYWRIZWFwKFRDTWFsbG9jVGhyZWFkQ2FjaGUqIGhlYXApCiB7CiAj
aWYgVVNFKFBUSFJFQURfR0VUU1BFQ0lGSUNfRElSRUNUKQogICAgIC8vIENhbid0IGhhdmUgdHdv
IGxpYnJhcmllcyBib3RoIGRvaW5nIHRoaXMgaW4gdGhlIHNhbWUgcHJvY2VzcywKQEAgLTI2Mjks
MTE5ICsyNjc5LDEyNSBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSB2b2lkIHNldFRocmVhZEhlYXAo
CiB9CiAKIC8vIEFsbG9jYXRvciBmb3IgdGhyZWFkIGhlYXBzCi1zdGF0aWMgUGFnZUhlYXBBbGxv
Y2F0b3I8VENNYWxsb2NfVGhyZWFkQ2FjaGU+IHRocmVhZGhlYXBfYWxsb2NhdG9yOworc3RhdGlj
IFBhZ2VIZWFwQWxsb2NhdG9yPFRDTWFsbG9jVGhyZWFkQ2FjaGU+IHRocmVhZGhlYXBBbGxvY2F0
b3I7CiAKLS8vIExpbmtlZCBsaXN0IG9mIGhlYXAgb2JqZWN0cy4gIFByb3RlY3RlZCBieSBwYWdl
aGVhcF9sb2NrLgotc3RhdGljIFRDTWFsbG9jX1RocmVhZENhY2hlKiB0aHJlYWRfaGVhcHMgPSBO
VUxMOworLy8gTGlua2VkIGxpc3Qgb2YgaGVhcCBvYmplY3RzLiBQcm90ZWN0ZWQgYnkgcGFnZWhl
YXBMb2NrLgorc3RhdGljIFRDTWFsbG9jVGhyZWFkQ2FjaGUqIHRocmVhZEhlYXBzID0gMDsKIHN0
YXRpYyBpbnQgdGhyZWFkX2hlYXBfY291bnQgPSAwOwogCi0vLyBPdmVyYWxsIHRocmVhZCBjYWNo
ZSBzaXplLiAgUHJvdGVjdGVkIGJ5IHBhZ2VoZWFwX2xvY2suCi1zdGF0aWMgc2l6ZV90IG92ZXJh
bGxfdGhyZWFkX2NhY2hlX3NpemUgPSBrRGVmYXVsdE92ZXJhbGxUaHJlYWRDYWNoZVNpemU7Cisv
LyBPdmVyYWxsIHRocmVhZCBjYWNoZSBzaXplLiBQcm90ZWN0ZWQgYnkgcGFnZWhlYXBMb2NrLgor
c3RhdGljIHNpemVfdCBvdmVyYWxsVGhyZWFkQ2FjaGVzaXplID0ga0RlZmF1bHRPdmVyYWxsVGhy
ZWFkQ2FjaGVTaXplOwogCi0vLyBHbG9iYWwgcGVyLXRocmVhZCBjYWNoZSBzaXplLiAgV3JpdGVz
IGFyZSBwcm90ZWN0ZWQgYnkKLS8vIHBhZ2VoZWFwX2xvY2suICBSZWFkcyBhcmUgZG9uZSB3aXRo
b3V0IGFueSBsb2NraW5nLCB3aGljaCBzaG91bGQgYmUKKy8vIEdsb2JhbCBwZXItdGhyZWFkIGNh
Y2hlIHNpemUuIFdyaXRlcyBhcmUgcHJvdGVjdGVkIGJ5CisvLyBwYWdlaGVhcExvY2suIFJlYWRz
IGFyZSBkb25lIHdpdGhvdXQgYW55IGxvY2tpbmcsIHdoaWNoIHNob3VsZCBiZQogLy8gZmluZSBh
cyBsb25nIGFzIHNpemVfdCBjYW4gYmUgd3JpdHRlbiBhdG9taWNhbGx5IGFuZCB3ZSBkb24ndCBw
bGFjZQogLy8gaW52YXJpYW50cyBiZXR3ZWVuIHRoaXMgdmFyaWFibGUgYW5kIG90aGVyIHBpZWNl
cyBvZiBzdGF0ZS4KLXN0YXRpYyB2b2xhdGlsZSBzaXplX3QgcGVyX3RocmVhZF9jYWNoZV9zaXpl
ID0ga01heFRocmVhZENhY2hlU2l6ZTsKK3N0YXRpYyB2b2xhdGlsZSBzaXplX3QgcGVyVGhyZWFk
Q2FjaGVTaXplID0ga01heFRocmVhZENhY2hlU2l6ZTsKIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyBDZW50
cmFsIGNhY2hlIGltcGxlbWVudGF0aW9uCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdm9pZCBUQ01hbGxvY19D
ZW50cmFsX0ZyZWVMaXN0OjpJbml0KHNpemVfdCBjbCkgewotICBsb2NrXy5Jbml0KCk7Ci0gIHNp
emVfY2xhc3NfID0gY2w7Ci0gIERMTF9Jbml0KCZlbXB0eV8pOwotICBETExfSW5pdCgmbm9uZW1w
dHlfKTsKLSAgY291bnRlcl8gPSAwOwotCi0gIGNhY2hlX3NpemVfID0gMTsKLSAgdXNlZF9zbG90
c18gPSAwOwotICBBU1NFUlQoY2FjaGVfc2l6ZV8gPD0ga051bVRyYW5zZmVyRW50cmllcyk7Ci19
Ci0KLXZvaWQgVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdDo6UmVsZWFzZUxpc3RUb1NwYW5zKHZv
aWQqIHN0YXJ0KSB7Ci0gIHdoaWxlIChzdGFydCkgewotICAgIHZvaWQgKm5leHQgPSBTTExfTmV4
dChzdGFydCk7Ci0gICAgUmVsZWFzZVRvU3BhbnMoc3RhcnQpOwotICAgIHN0YXJ0ID0gbmV4dDsK
LSAgfQordm9pZCBUQ01hbGxvY0NlbnRyYWxGcmVlTGlzdDo6SW5pdChzaXplX3QgY2wpCit7Cisg
ICAgbG9jay5Jbml0KCk7CisgICAgc2l6ZUNsYXNzID0gY2w7CisgICAgRExMSW5pdCgmZW1wdHkp
OworICAgIERMTEluaXQoJm5vbmVtcHR5KTsKKyAgICBjb3VudGVyID0gMDsKKworICAgIGNhY2hl
U2l6ZSA9IDE7CisgICAgdXNlZFNsb3RzID0gMDsKKyAgICBBU1NFUlQoY2FjaGVTaXplIDw9IGtO
dW1UcmFuc2ZlckVudHJpZXMpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgVENNYWxsb2NfQ2Vu
dHJhbF9GcmVlTGlzdDo6UmVsZWFzZVRvU3BhbnModm9pZCogb2JqZWN0KSB7Ci0gIGNvbnN0IFBh
Z2VJRCBwID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG9iamVjdCkgPj4ga1BhZ2VTaGlm
dDsKLSAgU3Bhbiogc3BhbiA9IHBhZ2VoZWFwLT5HZXREZXNjcmlwdG9yKHApOwotICBBU1NFUlQo
c3BhbiAhPSBOVUxMKTsKLSAgQVNTRVJUKHNwYW4tPnJlZmNvdW50ID4gMCk7Ci0KLSAgLy8gSWYg
c3BhbiBpcyBlbXB0eSwgbW92ZSBpdCB0byBub24tZW1wdHkgbGlzdAotICBpZiAoc3Bhbi0+b2Jq
ZWN0cyA9PSBOVUxMKSB7Ci0gICAgRExMX1JlbW92ZShzcGFuKTsKLSAgICBETExfUHJlcGVuZCgm
bm9uZW1wdHlfLCBzcGFuKTsKLSAgICBFdmVudChzcGFuLCAnTicsIDApOwotICB9Cit2b2lkIFRD
TWFsbG9jQ2VudHJhbEZyZWVMaXN0OjpSZWxlYXNlTGlzdFRvU3BhbnModm9pZCogc3RhcnQpCit7
CisgICAgd2hpbGUgKHN0YXJ0KSB7CisgICAgICAgIHZvaWQqIG5leHQgPSBTTExOZXh0KHN0YXJ0
KTsKKyAgICAgICAgUmVsZWFzZVRvU3BhbnMoc3RhcnQpOworICAgICAgICBzdGFydCA9IG5leHQ7
CisgICAgfQorfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgVENNYWxsb2NDZW50cmFsRnJlZUxpc3Q6
OlJlbGVhc2VUb1NwYW5zKHZvaWQqIG9iamVjdCkKK3sKKyAgICBjb25zdCBQYWdlSUQgcCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihvYmplY3QpID4+IGtQYWdlU2hpZnQ7CisgICAgU3Bh
biogc3BhbiA9IHBhZ2VoZWFwLT5HZXREZXNjcmlwdG9yKHApOworICAgIEFTU0VSVChzcGFuKTsK
KyAgICBBU1NFUlQoc3Bhbi0+cmVmY291bnQgPiAwKTsKIAotICAvLyBUaGUgZm9sbG93aW5nIGNo
ZWNrIGlzIGV4cGVuc2l2ZSwgc28gaXQgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdAotICBpZiAoZmFs
c2UpIHsKLSAgICAvLyBDaGVjayB0aGF0IG9iamVjdCBkb2VzIG5vdCBvY2N1ciBpbiBsaXN0Ci0g
ICAgdW5zaWduZWQgZ290ID0gMDsKLSAgICBmb3IgKHZvaWQqIHAgPSBzcGFuLT5vYmplY3RzOyBw
ICE9IE5VTEw7IHAgPSAqKCh2b2lkKiopIHApKSB7Ci0gICAgICBBU1NFUlQocCAhPSBvYmplY3Qp
OwotICAgICAgZ290Kys7CisgICAgLy8gSWYgc3BhbiBpcyBlbXB0eSwgbW92ZSBpdCB0byBub24t
ZW1wdHkgbGlzdAorICAgIGlmICghc3Bhbi0+b2JqZWN0cykgeworICAgICAgICBETExSZW1vdmUo
c3Bhbik7CisgICAgICAgIERMTFByZXBlbmQoJm5vbmVtcHR5LCBzcGFuKTsKKyAgICAgICAgRXZl
bnQoc3BhbiwgJ04nLCAwKTsKICAgICB9Ci0gICAgQVNTRVJUKGdvdCArIHNwYW4tPnJlZmNvdW50
ID09Ci0gICAgICAgICAgIChzcGFuLT5sZW5ndGg8PGtQYWdlU2hpZnQpL0J5dGVTaXplRm9yQ2xh
c3Moc3Bhbi0+c2l6ZWNsYXNzKSk7Ci0gIH0KIAotICBjb3VudGVyXysrOwotICBzcGFuLT5yZWZj
b3VudC0tOwotICBpZiAoc3Bhbi0+cmVmY291bnQgPT0gMCkgewotICAgIEV2ZW50KHNwYW4sICcj
JywgMCk7Ci0gICAgY291bnRlcl8gLT0gKHNwYW4tPmxlbmd0aDw8a1BhZ2VTaGlmdCkgLyBCeXRl
U2l6ZUZvckNsYXNzKHNwYW4tPnNpemVjbGFzcyk7Ci0gICAgRExMX1JlbW92ZShzcGFuKTsKKyAg
ICAvLyBUaGUgZm9sbG93aW5nIGNoZWNrIGlzIGV4cGVuc2l2ZSwgc28gaXQgaXMgZGlzYWJsZWQg
YnkgZGVmYXVsdAorICAgIGlmIChmYWxzZSkgeworICAgICAgICAvLyBDaGVjayB0aGF0IG9iamVj
dCBkb2VzIG5vdCBvY2N1ciBpbiBsaXN0CisgICAgICAgIHVuc2lnbmVkIGdvdCA9IDA7CisgICAg
ICAgIGZvciAodm9pZCogcCA9IHNwYW4tPm9iamVjdHM7IHA7IHAgPSAqKCh2b2lkKiopIHApKSB7
CisgICAgICAgICAgICBBU1NFUlQocCAhPSBvYmplY3QpOworICAgICAgICAgICAgZ290Kys7Cisg
ICAgICAgIH0KKyAgICAgICAgQVNTRVJUKGdvdCArIHNwYW4tPnJlZmNvdW50ID09CisgICAgICAg
ICAgICAoc3Bhbi0+bGVuZ3RoIDw8IGtQYWdlU2hpZnQpIC8gQnl0ZVNpemVGb3JDbGFzcyhzcGFu
LT5zaXplQ2xhc3MpKTsKKyAgICB9CiAKLSAgICAvLyBSZWxlYXNlIGNlbnRyYWwgbGlzdCBsb2Nr
IHdoaWxlIG9wZXJhdGluZyBvbiBwYWdlaGVhcAotICAgIGxvY2tfLlVubG9jaygpOwotICAgIHsK
LSAgICAgIFNwaW5Mb2NrSG9sZGVyIGgoJnBhZ2VoZWFwX2xvY2spOwotICAgICAgcGFnZWhlYXAt
PkRlbGV0ZShzcGFuKTsKKyAgICBjb3VudGVyKys7CisgICAgc3Bhbi0+cmVmY291bnQtLTsKKyAg
ICBpZiAoIXNwYW4tPnJlZmNvdW50KSB7CisgICAgICAgIEV2ZW50KHNwYW4sICcjJywgMCk7Cisg
ICAgICAgIGNvdW50ZXIgLT0gKHNwYW4tPmxlbmd0aCA8PCBrUGFnZVNoaWZ0KSAvIEJ5dGVTaXpl
Rm9yQ2xhc3Moc3Bhbi0+c2l6ZUNsYXNzKTsKKyAgICAgICAgRExMUmVtb3ZlKHNwYW4pOworCisg
ICAgICAgIC8vIFJlbGVhc2UgY2VudHJhbCBsaXN0IGxvY2sgd2hpbGUgb3BlcmF0aW5nIG9uIHBh
Z2VoZWFwCisgICAgICAgIGxvY2suVW5sb2NrKCk7CisgICAgICAgIHsKKyAgICAgICAgICAgIFNw
aW5Mb2NrSG9sZGVyIGgoJnBhZ2VoZWFwTG9jayk7CisgICAgICAgICAgICBwYWdlaGVhcC0+RGVs
ZXRlKHNwYW4pOworICAgICAgICB9CisgICAgICAgIGxvY2suTG9jaygpOworICAgIH0gZWxzZSB7
CisgICAgICAgICoocmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KG9iamVjdCkpID0gc3Bhbi0+b2Jq
ZWN0czsKKyAgICAgICAgc3Bhbi0+b2JqZWN0cyA9IG9iamVjdDsKICAgICB9Ci0gICAgbG9ja18u
TG9jaygpOwotICB9IGVsc2UgewotICAgICoocmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KG9iamVj
dCkpID0gc3Bhbi0+b2JqZWN0czsKLSAgICBzcGFuLT5vYmplY3RzID0gb2JqZWN0OwotICB9CiB9
CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBUQ01hbGxvY19DZW50cmFsX0ZyZWVMaXN0OjpFdmljdFJh
bmRvbVNpemVDbGFzcygKLSAgICBzaXplX3QgbG9ja2VkX3NpemVfY2xhc3MsIGJvb2wgZm9yY2Up
IHsKLSAgc3RhdGljIGludCByYWNlX2NvdW50ZXIgPSAwOwotICBpbnQgdCA9IHJhY2VfY291bnRl
cisrOyAgLy8gVXBkYXRlZCB3aXRob3V0IGEgbG9jaywgYnV0IHdobyBjYXJlcy4KLSAgaWYgKHQg
Pj0gc3RhdGljX2Nhc3Q8aW50PihrTnVtQ2xhc3NlcykpIHsKLSAgICB3aGlsZSAodCA+PSBzdGF0
aWNfY2FzdDxpbnQ+KGtOdW1DbGFzc2VzKSkgewotICAgICAgdCAtPSBrTnVtQ2xhc3NlczsKK0FM
V0FZU19JTkxJTkUgYm9vbCBUQ01hbGxvY0NlbnRyYWxGcmVlTGlzdDo6RXZpY3RSYW5kb21TaXpl
Q2xhc3Moc2l6ZV90IGxvY2tlZFNpemVDbGFzcywgYm9vbCBmb3JjZSkKK3sKKyAgICBzdGF0aWMg
aW50IHJhY2VDb3VudGVyID0gMDsKKyAgICBpbnQgdCA9IHJhY2VDb3VudGVyKys7IC8vIFVwZGF0
ZWQgd2l0aG91dCBhIGxvY2ssIGJ1dCB3aG8gY2FyZXMuCisgICAgaWYgKHQgPj0gc3RhdGljX2Nh
c3Q8aW50PihrTnVtQ2xhc3NlcykpIHsKKyAgICAgICAgd2hpbGUgKHQgPj0gc3RhdGljX2Nhc3Q8
aW50PihrTnVtQ2xhc3NlcykpCisgICAgICAgICAgICB0IC09IGtOdW1DbGFzc2VzOworICAgICAg
ICByYWNlQ291bnRlciA9IHQ7CisgICAgfQorICAgIEFTU0VSVCh0ID49IDApOworICAgIEFTU0VS
VCh0IDwgc3RhdGljX2Nhc3Q8aW50PihrTnVtQ2xhc3NlcykpOworICAgIGlmICh0ID09IHN0YXRp
Y19jYXN0PGludD4obG9ja2VkU2l6ZUNsYXNzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IHJldHVybiBjZW50cmFsQ2FjaGVbdF0uU2hyaW5rQ2FjaGUoc3RhdGljX2Nhc3Q8aW50Pihsb2Nr
ZWRTaXplQ2xhc3MpLCBmb3JjZSk7Cit9CisKK2Jvb2wgVENNYWxsb2NDZW50cmFsRnJlZUxpc3Q6
Ok1ha2VDYWNoZVNwYWNlKCkKK3sKKyAgICAvLyBJcyB0aGVyZSByb29tIGluIHRoZSBjYWNoZT8K
KyAgICBpZiAodXNlZFNsb3RzIDwgY2FjaGVTaXplKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAvLyBDaGVjayBpZiB3ZSBjYW4gZXhwYW5kIHRoaXMgY2FjaGU/CisgICAgaWYgKGNhY2hlU2l6
ZSA9PSBrTnVtVHJhbnNmZXJFbnRyaWVzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgLy8g
T2ssIHdlJ2xsIHRyeSB0byBncmFiIGFuIGVudHJ5IGZyb20gc29tZSBvdGhlciBzaXplIGNsYXNz
LgorICAgIGlmIChFdmljdFJhbmRvbVNpemVDbGFzcyhzaXplQ2xhc3MsIGZhbHNlKQorICAgICAg
ICB8fCBFdmljdFJhbmRvbVNpemVDbGFzcyhzaXplQ2xhc3MsIHRydWUpKSB7CisgICAgICAgIC8v
IFN1Y2NlZWRlZCBpbiBldmljdGluZywgd2UncmUgZ29pbmcgdG8gbWFrZSBvdXIgY2FjaGUgbGFy
Z2VyLgorICAgICAgICBjYWNoZVNpemUrKzsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQot
ICAgIHJhY2VfY291bnRlciA9IHQ7Ci0gIH0KLSAgQVNTRVJUKHQgPj0gMCk7Ci0gIEFTU0VSVCh0
IDwgc3RhdGljX2Nhc3Q8aW50PihrTnVtQ2xhc3NlcykpOwotICBpZiAodCA9PSBzdGF0aWNfY2Fz
dDxpbnQ+KGxvY2tlZF9zaXplX2NsYXNzKSkgcmV0dXJuIGZhbHNlOwotICByZXR1cm4gY2VudHJh
bF9jYWNoZVt0XS5TaHJpbmtDYWNoZShzdGF0aWNfY2FzdDxpbnQ+KGxvY2tlZF9zaXplX2NsYXNz
KSwgZm9yY2UpOwotfQotCi1ib29sIFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3Q6Ok1ha2VDYWNo
ZVNwYWNlKCkgewotICAvLyBJcyB0aGVyZSByb29tIGluIHRoZSBjYWNoZT8KLSAgaWYgKHVzZWRf
c2xvdHNfIDwgY2FjaGVfc2l6ZV8pIHJldHVybiB0cnVlOwotICAvLyBDaGVjayBpZiB3ZSBjYW4g
ZXhwYW5kIHRoaXMgY2FjaGU/Ci0gIGlmIChjYWNoZV9zaXplXyA9PSBrTnVtVHJhbnNmZXJFbnRy
aWVzKSByZXR1cm4gZmFsc2U7Ci0gIC8vIE9rLCB3ZSdsbCB0cnkgdG8gZ3JhYiBhbiBlbnRyeSBm
cm9tIHNvbWUgb3RoZXIgc2l6ZSBjbGFzcy4KLSAgaWYgKEV2aWN0UmFuZG9tU2l6ZUNsYXNzKHNp
emVfY2xhc3NfLCBmYWxzZSkgfHwKLSAgICAgIEV2aWN0UmFuZG9tU2l6ZUNsYXNzKHNpemVfY2xh
c3NfLCB0cnVlKSkgewotICAgIC8vIFN1Y2NlZWRlZCBpbiBldmljdGluZywgd2UncmUgZ29pbmcg
dG8gbWFrZSBvdXIgY2FjaGUgbGFyZ2VyLgotICAgIGNhY2hlX3NpemVfKys7Ci0gICAgcmV0dXJu
IHRydWU7Ci0gIH0KLSAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBmYWxzZTsKIH0KIAogCkBA
IC0yNzU2LDY2OCArMjgxMiw3MDUgQEAgY2xhc3MgTG9ja0ludmVydGVyIHsKIH07CiB9CiAKLWJv
b2wgVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdDo6U2hyaW5rQ2FjaGUoaW50IGxvY2tlZF9zaXpl
X2NsYXNzLCBib29sIGZvcmNlKSB7Ci0gIC8vIFN0YXJ0IHdpdGggYSBxdWljayBjaGVjayB3aXRo
b3V0IHRha2luZyBhIGxvY2suCi0gIGlmIChjYWNoZV9zaXplXyA9PSAwKSByZXR1cm4gZmFsc2U7
Ci0gIC8vIFdlIGRvbid0IGV2aWN0IGZyb20gYSBmdWxsIGNhY2hlIHVubGVzcyB3ZSBhcmUgJ2Zv
cmNpbmcnLgotICBpZiAoZm9yY2UgPT0gZmFsc2UgJiYgdXNlZF9zbG90c18gPT0gY2FjaGVfc2l6
ZV8pIHJldHVybiBmYWxzZTsKLQotICAvLyBHcmFiIGxvY2ssIGJ1dCBmaXJzdCByZWxlYXNlIHRo
ZSBvdGhlciBsb2NrIGhlbGQgYnkgdGhpcyB0aHJlYWQuICBXZSB1c2UKLSAgLy8gdGhlIGxvY2sg
aW52ZXJ0ZXIgdG8gZW5zdXJlIHRoYXQgd2UgbmV2ZXIgaG9sZCB0d28gc2l6ZSBjbGFzcyBsb2Nr
cwotICAvLyBjb25jdXJyZW50bHkuICBUaGF0IGNhbiBjcmVhdGUgYSBkZWFkbG9jayBiZWNhdXNl
IHRoZXJlIGlzIG5vIHdlbGwKLSAgLy8gZGVmaW5lZCBuZXN0aW5nIG9yZGVyLgotICBMb2NrSW52
ZXJ0ZXIgbGkoJmNlbnRyYWxfY2FjaGVbbG9ja2VkX3NpemVfY2xhc3NdLmxvY2tfLCAmbG9ja18p
OwotICBBU1NFUlQodXNlZF9zbG90c18gPD0gY2FjaGVfc2l6ZV8pOwotICBBU1NFUlQoMCA8PSBj
YWNoZV9zaXplXyk7Ci0gIGlmIChjYWNoZV9zaXplXyA9PSAwKSByZXR1cm4gZmFsc2U7Ci0gIGlm
ICh1c2VkX3Nsb3RzXyA9PSBjYWNoZV9zaXplXykgewotICAgIGlmIChmb3JjZSA9PSBmYWxzZSkg
cmV0dXJuIGZhbHNlOwotICAgIC8vIFJlbGVhc2VMaXN0VG9TcGFucyByZWxlYXNlcyB0aGUgbG9j
aywgc28gd2UgaGF2ZSB0byBtYWtlIGFsbCB0aGUKLSAgICAvLyB1cGRhdGVzIHRvIHRoZSBjZW50
cmFsIGxpc3QgYmVmb3JlIGNhbGxpbmcgaXQuCi0gICAgY2FjaGVfc2l6ZV8tLTsKLSAgICB1c2Vk
X3Nsb3RzXy0tOwotICAgIFJlbGVhc2VMaXN0VG9TcGFucyh0Y19zbG90c19bdXNlZF9zbG90c19d
LmhlYWQpOworYm9vbCBUQ01hbGxvY0NlbnRyYWxGcmVlTGlzdDo6U2hyaW5rQ2FjaGUoaW50IGxv
Y2tlZFNpemVDbGFzcywgYm9vbCBmb3JjZSkKK3sKKyAgICAvLyBTdGFydCB3aXRoIGEgcXVpY2sg
Y2hlY2sgd2l0aG91dCB0YWtpbmcgYSBsb2NrLgorICAgIGlmICghY2FjaGVTaXplKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgLy8gV2UgZG9uJ3QgZXZpY3QgZnJvbSBhIGZ1bGwgY2FjaGUg
dW5sZXNzIHdlIGFyZSAnZm9yY2luZycuCisgICAgaWYgKCFmb3JjZSAmJiB1c2VkU2xvdHMgPT0g
Y2FjaGVTaXplKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBHcmFiIGxvY2ssIGJ1
dCBmaXJzdCByZWxlYXNlIHRoZSBvdGhlciBsb2NrIGhlbGQgYnkgdGhpcyB0aHJlYWQuIFdlIHVz
ZQorICAgIC8vIHRoZSBsb2NrIGludmVydGVyIHRvIGVuc3VyZSB0aGF0IHdlIG5ldmVyIGhvbGQg
dHdvIHNpemUgY2xhc3MgbG9ja3MKKyAgICAvLyBjb25jdXJyZW50bHkuIFRoYXQgY2FuIGNyZWF0
ZSBhIGRlYWRsb2NrIGJlY2F1c2UgdGhlcmUgaXMgbm8gd2VsbAorICAgIC8vIGRlZmluZWQgbmVz
dGluZyBvcmRlci4KKyAgICBMb2NrSW52ZXJ0ZXIgbGkoJmNlbnRyYWxDYWNoZVtsb2NrZWRTaXpl
Q2xhc3NdLmxvY2ssICZsb2NrKTsKKyAgICBBU1NFUlQodXNlZFNsb3RzIDw9IGNhY2hlU2l6ZSk7
CisgICAgQVNTRVJUKDAgPD0gY2FjaGVTaXplKTsKKyAgICBpZiAoIWNhY2hlU2l6ZSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGlmICh1c2VkU2xvdHMgPT0gY2FjaGVTaXplKSB7CisgICAg
ICAgIGlmICghZm9yY2UpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIC8vIFJl
bGVhc2VMaXN0VG9TcGFucyByZWxlYXNlcyB0aGUgbG9jaywgc28gd2UgaGF2ZSB0byBtYWtlIGFs
bCB0aGUKKyAgICAgICAgLy8gdXBkYXRlcyB0byB0aGUgY2VudHJhbCBsaXN0IGJlZm9yZSBjYWxs
aW5nIGl0LgorICAgICAgICBjYWNoZVNpemUtLTsKKyAgICAgICAgdXNlZFNsb3RzLS07CisgICAg
ICAgIFJlbGVhc2VMaXN0VG9TcGFucyh0Y1Nsb3RzW3VzZWRTbG90c10uaGVhZCk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICBjYWNoZVNpemUtLTsKICAgICByZXR1cm4gdHJ1ZTsK
LSAgfQotICBjYWNoZV9zaXplXy0tOwotICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBUQ01hbGxv
Y19DZW50cmFsX0ZyZWVMaXN0OjpJbnNlcnRSYW5nZSh2b2lkICpzdGFydCwgdm9pZCAqZW5kLCBp
bnQgTikgewotICBTcGluTG9ja0hvbGRlciBoKCZsb2NrXyk7Ci0gIGlmIChOID09IG51bV9vYmpl
Y3RzX3RvX21vdmVbc2l6ZV9jbGFzc19dICYmCi0gICAgTWFrZUNhY2hlU3BhY2UoKSkgewotICAg
IGludCBzbG90ID0gdXNlZF9zbG90c18rKzsKLSAgICBBU1NFUlQoc2xvdCA+PTApOwotICAgIEFT
U0VSVChzbG90IDwga051bVRyYW5zZmVyRW50cmllcyk7Ci0gICAgVENFbnRyeSAqZW50cnkgPSAm
dGNfc2xvdHNfW3Nsb3RdOwotICAgIGVudHJ5LT5oZWFkID0gc3RhcnQ7Ci0gICAgZW50cnktPnRh
aWwgPSBlbmQ7Ci0gICAgcmV0dXJuOwotICB9Ci0gIFJlbGVhc2VMaXN0VG9TcGFucyhzdGFydCk7
Cit2b2lkIFRDTWFsbG9jQ2VudHJhbEZyZWVMaXN0OjpJbnNlcnRSYW5nZSh2b2lkICpzdGFydCwg
dm9pZCAqZW5kLCBpbnQgTikKK3sKKyAgICBTcGluTG9ja0hvbGRlciBoKCZsb2NrKTsKKyAgICBp
ZiAoTiA9PSBudW1PYmplY3RzVG9Nb3ZlW3NpemVDbGFzc10KKyAgICAgICAgJiYgTWFrZUNhY2hl
U3BhY2UoKSkgeworICAgICAgICBpbnQgc2xvdCA9IHVzZWRTbG90cysrOworICAgICAgICBBU1NF
UlQoc2xvdCA+PTApOworICAgICAgICBBU1NFUlQoc2xvdCA8IGtOdW1UcmFuc2ZlckVudHJpZXMp
OworICAgICAgICBUQ0VudHJ5KiBlbnRyeSA9ICZ0Y1Nsb3RzW3Nsb3RdOworICAgICAgICBlbnRy
eS0+aGVhZCA9IHN0YXJ0OworICAgICAgICBlbnRyeS0+dGFpbCA9IGVuZDsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBSZWxlYXNlTGlzdFRvU3BhbnMoc3RhcnQpOwogfQogCi12b2lkIFRD
TWFsbG9jX0NlbnRyYWxfRnJlZUxpc3Q6OlJlbW92ZVJhbmdlKHZvaWQgKipzdGFydCwgdm9pZCAq
KmVuZCwgaW50ICpOKSB7Ci0gIGludCBudW0gPSAqTjsKLSAgQVNTRVJUKG51bSA+IDApOwotCi0g
IFNwaW5Mb2NrSG9sZGVyIGgoJmxvY2tfKTsKLSAgaWYgKG51bSA9PSBudW1fb2JqZWN0c190b19t
b3ZlW3NpemVfY2xhc3NfXSAmJiB1c2VkX3Nsb3RzXyA+IDApIHsKLSAgICBpbnQgc2xvdCA9IC0t
dXNlZF9zbG90c187Ci0gICAgQVNTRVJUKHNsb3QgPj0gMCk7Ci0gICAgVENFbnRyeSAqZW50cnkg
PSAmdGNfc2xvdHNfW3Nsb3RdOwotICAgICpzdGFydCA9IGVudHJ5LT5oZWFkOwotICAgICplbmQg
PSBlbnRyeS0+dGFpbDsKLSAgICByZXR1cm47Ci0gIH0KK3ZvaWQgVENNYWxsb2NDZW50cmFsRnJl
ZUxpc3Q6OlJlbW92ZVJhbmdlKHZvaWQgKipzdGFydCwgdm9pZCAqKmVuZCwgaW50ICpOKQorewor
ICAgIGludCBudW0gPSAqTjsKKyAgICBBU1NFUlQobnVtID4gMCk7CiAKLSAgLy8gVE9ETzogUHJl
ZmV0Y2ggbXVsdGlwbGUgVENFbnRyaWVzPwotICB2b2lkICp0YWlsID0gRmV0Y2hGcm9tU3BhbnNT
YWZlKCk7Ci0gIGlmICghdGFpbCkgewotICAgIC8vIFdlIGFyZSBjb21wbGV0ZWx5IG91dCBvZiBt
ZW1vcnkuCi0gICAgKnN0YXJ0ID0gKmVuZCA9IE5VTEw7Ci0gICAgKk4gPSAwOwotICAgIHJldHVy
bjsKLSAgfQorICAgIFNwaW5Mb2NrSG9sZGVyIGgoJmxvY2spOworICAgIGlmIChudW0gPT0gbnVt
T2JqZWN0c1RvTW92ZVtzaXplQ2xhc3NdICYmIHVzZWRTbG90cyA+IDApIHsKKyAgICAgICAgaW50
IHNsb3QgPSAtLXVzZWRTbG90czsKKyAgICAgICAgQVNTRVJUKHNsb3QgPj0gMCk7CisgICAgICAg
IFRDRW50cnkqIGVudHJ5ID0gJnRjU2xvdHNbc2xvdF07CisgICAgICAgICpzdGFydCA9IGVudHJ5
LT5oZWFkOworICAgICAgICAqZW5kID0gZW50cnktPnRhaWw7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CiAKLSAgU0xMX1NldE5leHQodGFpbCwgTlVMTCk7Ci0gIHZvaWQgKmhlYWQgPSB0YWlsOwot
ICBpbnQgY291bnQgPSAxOwotICB3aGlsZSAoY291bnQgPCBudW0pIHsKLSAgICB2b2lkICp0ID0g
RmV0Y2hGcm9tU3BhbnMoKTsKLSAgICBpZiAoIXQpIGJyZWFrOwotICAgIFNMTF9QdXNoKCZoZWFk
LCB0KTsKLSAgICBjb3VudCsrOwotICB9Ci0gICpzdGFydCA9IGhlYWQ7Ci0gICplbmQgPSB0YWls
OwotICAqTiA9IGNvdW50OwotfQorICAgIC8vIFRPRE86IFByZWZldGNoIG11bHRpcGxlIFRDRW50
cmllcz8KKyAgICB2b2lkKiB0YWlsID0gRmV0Y2hGcm9tU3BhbnNTYWZlKCk7CisgICAgaWYgKCF0
YWlsKSB7CisgICAgICAgIC8vIFdlIGFyZSBjb21wbGV0ZWx5IG91dCBvZiBtZW1vcnkuCisgICAg
ICAgICpzdGFydCA9ICplbmQgPSAwOworICAgICAgICAqTiA9IDA7CisgICAgICAgIHJldHVybjsK
KyAgICB9CiAKKyAgICBTTExTZXROZXh0KHRhaWwsIDApOworICAgIHZvaWQqIGhlYWQgPSB0YWls
OworICAgIGludCBjb3VudCA9IDE7CisgICAgd2hpbGUgKGNvdW50IDwgbnVtKSB7CisgICAgICAg
IHZvaWQqIHQgPSBGZXRjaEZyb21TcGFucygpOworICAgICAgICBpZiAoIXQpCisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgU0xMUHVzaCgmaGVhZCwgdCk7CisgICAgICAgIGNvdW50Kys7Cisg
ICAgfQorICAgICpzdGFydCA9IGhlYWQ7CisgICAgKmVuZCA9IHRhaWw7CisgICAgKk4gPSBjb3Vu
dDsKK30KIAotdm9pZCogVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdDo6RmV0Y2hGcm9tU3BhbnNT
YWZlKCkgewotICB2b2lkICp0ID0gRmV0Y2hGcm9tU3BhbnMoKTsKLSAgaWYgKCF0KSB7Ci0gICAg
UG9wdWxhdGUoKTsKLSAgICB0ID0gRmV0Y2hGcm9tU3BhbnMoKTsKLSAgfQotICByZXR1cm4gdDsK
K3ZvaWQqIFRDTWFsbG9jQ2VudHJhbEZyZWVMaXN0OjpGZXRjaEZyb21TcGFuc1NhZmUoKQorewor
ICAgIHZvaWQqIHQgPSBGZXRjaEZyb21TcGFucygpOworICAgIGlmICghdCkgeworICAgICAgICBQ
b3B1bGF0ZSgpOworICAgICAgICB0ID0gRmV0Y2hGcm9tU3BhbnMoKTsKKyAgICB9CisgICAgcmV0
dXJuIHQ7CiB9CiAKLXZvaWQqIFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3Q6OkZldGNoRnJvbVNw
YW5zKCkgewotICBpZiAoRExMX0lzRW1wdHkoJm5vbmVtcHR5XykpIHJldHVybiBOVUxMOwotICBT
cGFuKiBzcGFuID0gbm9uZW1wdHlfLm5leHQ7Ci0KLSAgQVNTRVJUKHNwYW4tPm9iamVjdHMgIT0g
TlVMTCk7Ci0gIEFTU0VSVF9TUEFOX0NPTU1JVFRFRChzcGFuKTsKLSAgc3Bhbi0+cmVmY291bnQr
KzsKLSAgdm9pZCogcmVzdWx0ID0gc3Bhbi0+b2JqZWN0czsKLSAgc3Bhbi0+b2JqZWN0cyA9ICoo
cmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KHJlc3VsdCkpOwotICBpZiAoc3Bhbi0+b2JqZWN0cyA9
PSBOVUxMKSB7Ci0gICAgLy8gTW92ZSB0byBlbXB0eSBsaXN0Ci0gICAgRExMX1JlbW92ZShzcGFu
KTsKLSAgICBETExfUHJlcGVuZCgmZW1wdHlfLCBzcGFuKTsKLSAgICBFdmVudChzcGFuLCAnRScs
IDApOwotICB9Ci0gIGNvdW50ZXJfLS07Ci0gIHJldHVybiByZXN1bHQ7Cit2b2lkKiBUQ01hbGxv
Y0NlbnRyYWxGcmVlTGlzdDo6RmV0Y2hGcm9tU3BhbnMoKQoreworICAgIGlmIChETExfSXNFbXB0
eSgmbm9uZW1wdHkpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBTcGFuKiBzcGFuID0gbm9uZW1w
dHkubmV4dDsKKworICAgIEFTU0VSVChzcGFuLT5vYmplY3RzKTsKKyAgICBBU1NFUlRfU1BBTl9D
T01NSVRURUQoc3Bhbik7CisgICAgc3Bhbi0+cmVmY291bnQrKzsKKyAgICB2b2lkKiByZXN1bHQg
PSBzcGFuLT5vYmplY3RzOworICAgIHNwYW4tPm9iamVjdHMgPSAqKHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCoqPihyZXN1bHQpKTsKKyAgICBpZiAoIXNwYW4tPm9iamVjdHMpIHsKKyAgICAgICAgLy8g
TW92ZSB0byBlbXB0eSBsaXN0CisgICAgICAgIERMTFJlbW92ZShzcGFuKTsKKyAgICAgICAgRExM
UHJlcGVuZCgmZW1wdHksIHNwYW4pOworICAgICAgICBFdmVudChzcGFuLCAnRScsIDApOworICAg
IH0KKyAgICBjb3VudGVyLS07CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogLy8gRmV0Y2ggbWVt
b3J5IGZyb20gdGhlIHN5c3RlbSBhbmQgYWRkIHRvIHRoZSBjZW50cmFsIGNhY2hlIGZyZWVsaXN0
LgotQUxXQVlTX0lOTElORSB2b2lkIFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3Q6OlBvcHVsYXRl
KCkgewotICAvLyBSZWxlYXNlIGNlbnRyYWwgbGlzdCBsb2NrIHdoaWxlIG9wZXJhdGluZyBvbiBw
YWdlaGVhcAotICBsb2NrXy5VbmxvY2soKTsKLSAgY29uc3Qgc2l6ZV90IG5wYWdlcyA9IGNsYXNz
X3RvX3BhZ2VzW3NpemVfY2xhc3NfXTsKLQotICBTcGFuKiBzcGFuOwotICB7Ci0gICAgU3Bpbkxv
Y2tIb2xkZXIgaCgmcGFnZWhlYXBfbG9jayk7Ci0gICAgc3BhbiA9IHBhZ2VoZWFwLT5OZXcobnBh
Z2VzKTsKLSAgICBpZiAoc3BhbikgcGFnZWhlYXAtPlJlZ2lzdGVyU2l6ZUNsYXNzKHNwYW4sIHNp
emVfY2xhc3NfKTsKLSAgfQotICBpZiAoc3BhbiA9PSBOVUxMKSB7CitBTFdBWVNfSU5MSU5FIHZv
aWQgVENNYWxsb2NDZW50cmFsRnJlZUxpc3Q6OlBvcHVsYXRlKCkKK3sKKyAgICAvLyBSZWxlYXNl
IGNlbnRyYWwgbGlzdCBsb2NrIHdoaWxlIG9wZXJhdGluZyBvbiBwYWdlaGVhcAorICAgIGxvY2su
VW5sb2NrKCk7CisgICAgY29uc3Qgc2l6ZV90IG5wYWdlcyA9IGNsYXNzX3RvX3BhZ2VzW3NpemVD
bGFzc107CisKKyAgICBTcGFuKiBzcGFuOworICAgIHsKKyAgICAgICAgU3BpbkxvY2tIb2xkZXIg
aCgmcGFnZWhlYXBMb2NrKTsKKyAgICAgICAgc3BhbiA9IHBhZ2VoZWFwLT5OZXcobnBhZ2VzKTsK
KyAgICAgICAgaWYgKHNwYW4pCisgICAgICAgICAgICBwYWdlaGVhcC0+UmVnaXN0ZXJTaXplQ2xh
c3Moc3Bhbiwgc2l6ZUNsYXNzKTsKKyAgICB9CisgICAgaWYgKCFzcGFuKSB7CiAjaWYgSEFWRShF
UlJOT19IKQotICAgIE1FU1NBR0UoImFsbG9jYXRpb24gZmFpbGVkOiAlZFxuIiwgZXJybm8pOwor
ICAgICAgICBNRVNTQUdFKCJhbGxvY2F0aW9uIGZhaWxlZDogJWRcbiIsIGVycm5vKTsKICNlbGlm
IE9TKFdJTkRPV1MpCi0gICAgTUVTU0FHRSgiYWxsb2NhdGlvbiBmYWlsZWQ6ICVkXG4iLCA6Okdl
dExhc3RFcnJvcigpKTsKKyAgICAgICAgTUVTU0FHRSgiYWxsb2NhdGlvbiBmYWlsZWQ6ICVkXG4i
LCA6OkdldExhc3RFcnJvcigpKTsKICNlbHNlCi0gICAgTUVTU0FHRSgiYWxsb2NhdGlvbiBmYWls
ZWRcbiIpOworICAgICAgICBNRVNTQUdFKCJhbGxvY2F0aW9uIGZhaWxlZFxuIik7CiAjZW5kaWYK
LSAgICBsb2NrXy5Mb2NrKCk7Ci0gICAgcmV0dXJuOwotICB9Ci0gIEFTU0VSVF9TUEFOX0NPTU1J
VFRFRChzcGFuKTsKLSAgQVNTRVJUKHNwYW4tPmxlbmd0aCA9PSBucGFnZXMpOwotICAvLyBDYWNo
ZSBzaXplY2xhc3MgaW5mbyBlYWdlcmx5LiAgTG9ja2luZyBpcyBub3QgbmVjZXNzYXJ5LgotICAv
LyAoSW5zdGVhZCBvZiBiZWluZyBlYWdlciwgd2UgY291bGQganVzdCByZXBsYWNlIGFueSBzdGFs
ZSBpbmZvCi0gIC8vIGFib3V0IHRoaXMgc3BhbiwgYnV0IHRoYXQgc2VlbXMgdG8gYmUgbm8gYmV0
dGVyIGluIHByYWN0aWNlLikKLSAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBucGFnZXM7IGkrKykg
ewotICAgIHBhZ2VoZWFwLT5DYWNoZVNpemVDbGFzcyhzcGFuLT5zdGFydCArIGksIHNpemVfY2xh
c3NfKTsKLSAgfQotCi0gIC8vIFNwbGl0IHRoZSBibG9jayBpbnRvIHBpZWNlcyBhbmQgYWRkIHRv
IHRoZSBmcmVlLWxpc3QKLSAgLy8gVE9ETzogY29sb3Jpbmcgb2Ygb2JqZWN0cyB0byBhdm9pZCBj
YWNoZSBjb25mbGljdHM/Ci0gIHZvaWQqKiB0YWlsID0gJnNwYW4tPm9iamVjdHM7Ci0gIGNoYXIq
IHB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNwYW4tPnN0YXJ0IDw8IGtQYWdlU2hpZnQp
OwotICBjaGFyKiBsaW1pdCA9IHB0ciArIChucGFnZXMgPDwga1BhZ2VTaGlmdCk7Ci0gIGNvbnN0
IHNpemVfdCBzaXplID0gQnl0ZVNpemVGb3JDbGFzcyhzaXplX2NsYXNzXyk7Ci0gIGludCBudW0g
PSAwOwotICBjaGFyKiBucHRyOwotICB3aGlsZSAoKG5wdHIgPSBwdHIgKyBzaXplKSA8PSBsaW1p
dCkgewotICAgICp0YWlsID0gcHRyOwotICAgIHRhaWwgPSByZWludGVycHJldF9jYXN0X3B0cjx2
b2lkKio+KHB0cik7Ci0gICAgcHRyID0gbnB0cjsKLSAgICBudW0rKzsKLSAgfQotICBBU1NFUlQo
cHRyIDw9IGxpbWl0KTsKLSAgKnRhaWwgPSBOVUxMOwotICBzcGFuLT5yZWZjb3VudCA9IDA7IC8v
IE5vIHN1Yi1vYmplY3QgaW4gdXNlIHlldAotCi0gIC8vIEFkZCBzcGFuIHRvIGxpc3Qgb2Ygbm9u
LWVtcHR5IHNwYW5zCi0gIGxvY2tfLkxvY2soKTsKLSAgRExMX1ByZXBlbmQoJm5vbmVtcHR5Xywg
c3Bhbik7Ci0gIGNvdW50ZXJfICs9IG51bTsKKyAgICAgICAgbG9jay5Mb2NrKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgQVNTRVJUX1NQQU5fQ09NTUlUVEVEKHNwYW4pOworICAgIEFT
U0VSVChzcGFuLT5sZW5ndGggPT0gbnBhZ2VzKTsKKyAgICAvLyBDYWNoZSBzaXplQ2xhc3MgaW5m
byBlYWdlcmx5LiBMb2NraW5nIGlzIG5vdCBuZWNlc3NhcnkuCisgICAgLy8gKEluc3RlYWQgb2Yg
YmVpbmcgZWFnZXIsIHdlIGNvdWxkIGp1c3QgcmVwbGFjZSBhbnkgc3RhbGUgaW5mbworICAgIC8v
IGFib3V0IHRoaXMgc3BhbiwgYnV0IHRoYXQgc2VlbXMgdG8gYmUgbm8gYmV0dGVyIGluIHByYWN0
aWNlLikKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5wYWdlczsgaSsrKQorICAgICAgICBw
YWdlaGVhcC0+Q2FjaGVTaXplQ2xhc3Moc3Bhbi0+c3RhcnQgKyBpLCBzaXplQ2xhc3MpOworCisg
ICAgLy8gU3BsaXQgdGhlIGJsb2NrIGludG8gcGllY2VzIGFuZCBhZGQgdG8gdGhlIGZyZWUtbGlz
dAorICAgIC8vIFRPRE86IGNvbG9yaW5nIG9mIG9iamVjdHMgdG8gYXZvaWQgY2FjaGUgY29uZmxp
Y3RzPworICAgIHZvaWQqKiB0YWlsID0gJnNwYW4tPm9iamVjdHM7CisgICAgY2hhciogcHRyID0g
cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc3Bhbi0+c3RhcnQgPDwga1BhZ2VTaGlmdCk7CisgICAg
Y2hhciogbGltaXQgPSBwdHIgKyAobnBhZ2VzIDw8IGtQYWdlU2hpZnQpOworICAgIGNvbnN0IHNp
emVfdCBzaXplID0gQnl0ZVNpemVGb3JDbGFzcyhzaXplQ2xhc3MpOworICAgIGludCBudW0gPSAw
OworICAgIGNoYXIqIG5wdHI7CisgICAgd2hpbGUgKChucHRyID0gcHRyICsgc2l6ZSkgPD0gbGlt
aXQpIHsKKyAgICAgICAgKnRhaWwgPSBwdHI7CisgICAgICAgIHRhaWwgPSByZWludGVycHJldF9j
YXN0X3B0cjx2b2lkKio+KHB0cik7CisgICAgICAgIHB0ciA9IG5wdHI7CisgICAgICAgIG51bSsr
OworICAgIH0KKyAgICBBU1NFUlQocHRyIDw9IGxpbWl0KTsKKyAgICAqdGFpbCA9IDA7CisgICAg
c3Bhbi0+cmVmY291bnQgPSAwOyAvLyBObyBzdWItb2JqZWN0IGluIHVzZSB5ZXQKKworICAgIC8v
IEFkZCBzcGFuIHRvIGxpc3Qgb2Ygbm9uLWVtcHR5IHNwYW5zCisgICAgbG9jay5Mb2NrKCk7Cisg
ICAgRExMUHJlcGVuZCgmbm9uZW1wdHksIHNwYW4pOworICAgIGNvdW50ZXIgKz0gbnVtOwogfQog
CiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLS8vIFRDTWFsbG9jX1RocmVhZENhY2hlIGltcGxlbWVudGF0aW9uCisv
LyBUQ01hbGxvY1RocmVhZENhY2hlIGltcGxlbWVudGF0aW9uCiAvLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotaW5s
aW5lIGJvb2wgVENNYWxsb2NfVGhyZWFkQ2FjaGU6OlNhbXBsZUFsbG9jYXRpb24oc2l6ZV90IGsp
IHsKLSAgaWYgKGJ5dGVzX3VudGlsX3NhbXBsZV8gPCBrKSB7Ci0gICAgUGlja05leHRTYW1wbGUo
ayk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0gZWxzZSB7Ci0gICAgYnl0ZXNfdW50aWxfc2FtcGxl
XyAtPSBrOworaW5saW5lIGJvb2wgVENNYWxsb2NUaHJlYWRDYWNoZTo6U2FtcGxlQWxsb2NhdGlv
bihzaXplX3QgaykKK3sKKyAgICBpZiAoYnl0ZXNVbnRpbFNhbXBsZSA8IGspIHsKKyAgICAgICAg
UGlja05leHRTYW1wbGUoayk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBieXRl
c1VudGlsU2FtcGxlIC09IGs7CiAgICAgcmV0dXJuIGZhbHNlOwotICB9CiB9CiAKLXZvaWQgVENN
YWxsb2NfVGhyZWFkQ2FjaGU6OkluaXQoVGhyZWFkSWRlbnRpZmllciB0aWQpIHsKLSAgc2l6ZV8g
PSAwOwotICBuZXh0XyA9IE5VTEw7Ci0gIHByZXZfID0gTlVMTDsKLSAgdGlkXyAgPSB0aWQ7Ci0g
IGluX3NldHNwZWNpZmljXyA9IGZhbHNlOwotICBmb3IgKHNpemVfdCBjbCA9IDA7IGNsIDwga051
bUNsYXNzZXM7ICsrY2wpIHsKLSAgICBsaXN0X1tjbF0uSW5pdCgpOwotICB9Cit2b2lkIFRDTWFs
bG9jVGhyZWFkQ2FjaGU6OkluaXQoVGhyZWFkSWRlbnRpZmllciB0aWQpCit7CisgICAgc2l6ZSA9
IDA7CisgICAgbmV4dCA9IDA7CisgICAgcHJldiA9IDA7CisgICAgdGlkICA9IHRpZDsKKyAgICBp
blNldHNwZWNpZmljID0gZmFsc2U7CisgICAgZm9yIChzaXplX3QgY2wgPSAwOyBjbCA8IGtOdW1D
bGFzc2VzOyArK2NsKQorICAgICAgICBsaXN0W2NsXS5Jbml0KCk7CiAKLSAgLy8gSW5pdGlhbGl6
ZSBSTkcgLS0gcnVuIGl0IGZvciBhIGJpdCB0byBnZXQgdG8gZ29vZCB2YWx1ZXMKLSAgYnl0ZXNf
dW50aWxfc2FtcGxlXyA9IDA7Ci0gIHJuZF8gPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4ocmVpbnRl
cnByZXRfY2FzdDx1aW50cHRyX3Q+KHRoaXMpKTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDA7
IGkrKykgewotICAgIFBpY2tOZXh0U2FtcGxlKHN0YXRpY19jYXN0PHNpemVfdD4oRkxBR1NfdGNt
YWxsb2Nfc2FtcGxlX3BhcmFtZXRlciAqIDIpKTsKLSAgfQorICAgIC8vIEluaXRpYWxpemUgUk5H
IC0tIHJ1biBpdCBmb3IgYSBiaXQgdG8gZ2V0IHRvIGdvb2QgdmFsdWVzCisgICAgYnl0ZXNVbnRp
bFNhbXBsZSA9IDA7CisgICAgcm5kID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHJlaW50ZXJwcmV0
X2Nhc3Q8dWludHB0cl90Pih0aGlzKSk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDA7IGkr
KykKKyAgICAgICAgUGlja05leHRTYW1wbGUoc3RhdGljX2Nhc3Q8c2l6ZV90PihGTEFHU190Y21h
bGxvY19zYW1wbGVfcGFyYW1ldGVyICogMikpOwogfQogCi12b2lkIFRDTWFsbG9jX1RocmVhZENh
Y2hlOjpDbGVhbnVwKCkgewotICAvLyBQdXQgdW51c2VkIG1lbW9yeSBiYWNrIGludG8gY2VudHJh
bCBjYWNoZQotICBmb3IgKHNpemVfdCBjbCA9IDA7IGNsIDwga051bUNsYXNzZXM7ICsrY2wpIHsK
LSAgICBpZiAobGlzdF9bY2xdLmxlbmd0aCgpID4gMCkgewotICAgICAgUmVsZWFzZVRvQ2VudHJh
bENhY2hlKGNsLCBsaXN0X1tjbF0ubGVuZ3RoKCkpOwordm9pZCBUQ01hbGxvY1RocmVhZENhY2hl
OjpDbGVhbnVwKCkKK3sKKyAgICAvLyBQdXQgdW51c2VkIG1lbW9yeSBiYWNrIGludG8gY2VudHJh
bCBjYWNoZQorICAgIGZvciAoc2l6ZV90IGNsID0gMDsgY2wgPCBrTnVtQ2xhc3NlczsgKytjbCkg
eworICAgICAgICBpZiAobGlzdFtjbF0ubGVuZ3RoKCkgPiAwKQorICAgICAgICAgICAgUmVsZWFz
ZVRvQ2VudHJhbENhY2hlKGNsLCBsaXN0W2NsXS5sZW5ndGgoKSk7CiAgICAgfQotICB9CiB9CiAK
LUFMV0FZU19JTkxJTkUgdm9pZCogVENNYWxsb2NfVGhyZWFkQ2FjaGU6OkFsbG9jYXRlKHNpemVf
dCBzaXplKSB7Ci0gIEFTU0VSVChzaXplIDw9IGtNYXhTaXplKTsKLSAgY29uc3Qgc2l6ZV90IGNs
ID0gU2l6ZUNsYXNzKHNpemUpOwotICBGcmVlTGlzdCogbGlzdCA9ICZsaXN0X1tjbF07Ci0gIHNp
emVfdCBhbGxvY2F0aW9uU2l6ZSA9IEJ5dGVTaXplRm9yQ2xhc3MoY2wpOwotICBpZiAobGlzdC0+
ZW1wdHkoKSkgewotICAgIEZldGNoRnJvbUNlbnRyYWxDYWNoZShjbCwgYWxsb2NhdGlvblNpemUp
OwotICAgIGlmIChsaXN0LT5lbXB0eSgpKSByZXR1cm4gTlVMTDsKLSAgfQotICBzaXplXyAtPSBh
bGxvY2F0aW9uU2l6ZTsKLSAgcmV0dXJuIGxpc3QtPlBvcCgpOworQUxXQVlTX0lOTElORSB2b2lk
KiBUQ01hbGxvY1RocmVhZENhY2hlOjpBbGxvY2F0ZShzaXplX3Qgc2l6ZSkKK3sKKyAgICBBU1NF
UlQoc2l6ZSA8PSBrTWF4U2l6ZSk7CisgICAgY29uc3Qgc2l6ZV90IGNsID0gU2l6ZUNsYXNzKHNp
emUpOworICAgIEZyZWVMaXN0KiBwTGlzdCA9ICZsaXN0W2NsXTsKKyAgICBzaXplX3QgYWxsb2Nh
dGlvblNpemUgPSBCeXRlU2l6ZUZvckNsYXNzKGNsKTsKKyAgICBpZiAocExpc3QtPmVtcHR5KCkp
IHsKKyAgICAgICAgRmV0Y2hGcm9tQ2VudHJhbENhY2hlKGNsLCBhbGxvY2F0aW9uU2l6ZSk7Cisg
ICAgICAgIGlmIChwTGlzdC0+ZW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0K
KyAgICBzaXplIC09IGFsbG9jYXRpb25TaXplOworICAgIHJldHVybiBwTGlzdC0+UG9wKCk7CiB9
CiAKLWlubGluZSB2b2lkIFRDTWFsbG9jX1RocmVhZENhY2hlOjpEZWFsbG9jYXRlKHZvaWQqIHB0
ciwgc2l6ZV90IGNsKSB7Ci0gIHNpemVfICs9IEJ5dGVTaXplRm9yQ2xhc3MoY2wpOwotICBGcmVl
TGlzdCogbGlzdCA9ICZsaXN0X1tjbF07Ci0gIGxpc3QtPlB1c2gocHRyKTsKLSAgLy8gSWYgZW5v
dWdoIGRhdGEgaXMgZnJlZSwgcHV0IGJhY2sgaW50byBjZW50cmFsIGNhY2hlCi0gIGlmIChsaXN0
LT5sZW5ndGgoKSA+IGtNYXhGcmVlTGlzdExlbmd0aCkgewotICAgIFJlbGVhc2VUb0NlbnRyYWxD
YWNoZShjbCwgbnVtX29iamVjdHNfdG9fbW92ZVtjbF0pOwotICB9Ci0gIGlmIChzaXplXyA+PSBw
ZXJfdGhyZWFkX2NhY2hlX3NpemUpIFNjYXZlbmdlKCk7CitpbmxpbmUgdm9pZCBUQ01hbGxvY1Ro
cmVhZENhY2hlOjpEZWFsbG9jYXRlKHZvaWQqIHB0ciwgc2l6ZV90IGNsKQoreworICAgIHNpemUg
Kz0gQnl0ZVNpemVGb3JDbGFzcyhjbCk7CisgICAgRnJlZUxpc3QqIHBMaXN0ID0gJmxpc3RbY2xd
OworICAgIHBMaXN0LT5QdXNoKHB0cik7CisgICAgLy8gSWYgZW5vdWdoIGRhdGEgaXMgZnJlZSwg
cHV0IGJhY2sgaW50byBjZW50cmFsIGNhY2hlCisgICAgaWYgKHBMaXN0LT5sZW5ndGgoKSA+IGtN
YXhGcmVlTGlzdExlbmd0aCkKKyAgICAgICAgUmVsZWFzZVRvQ2VudHJhbENhY2hlKGNsLCBudW1P
YmplY3RzVG9Nb3ZlW2NsXSk7CisgICAgaWYgKHNpemUgPj0gcGVyVGhyZWFkQ2FjaGVTaXplKQor
ICAgICAgICBTY2F2ZW5nZSgpOwogfQogCiAvLyBSZW1vdmUgc29tZSBvYmplY3RzIG9mIGNsYXNz
ICJjbCIgZnJvbSBjZW50cmFsIGNhY2hlIGFuZCBhZGQgdG8gdGhyZWFkIGhlYXAKLUFMV0FZU19J
TkxJTkUgdm9pZCBUQ01hbGxvY19UaHJlYWRDYWNoZTo6RmV0Y2hGcm9tQ2VudHJhbENhY2hlKHNp
emVfdCBjbCwgc2l6ZV90IGFsbG9jYXRpb25TaXplKSB7Ci0gIGludCBmZXRjaF9jb3VudCA9IG51
bV9vYmplY3RzX3RvX21vdmVbY2xdOwotICB2b2lkICpzdGFydCwgKmVuZDsKLSAgY2VudHJhbF9j
YWNoZVtjbF0uUmVtb3ZlUmFuZ2UoJnN0YXJ0LCAmZW5kLCAmZmV0Y2hfY291bnQpOwotICBsaXN0
X1tjbF0uUHVzaFJhbmdlKGZldGNoX2NvdW50LCBzdGFydCwgZW5kKTsKLSAgc2l6ZV8gKz0gYWxs
b2NhdGlvblNpemUgKiBmZXRjaF9jb3VudDsKK0FMV0FZU19JTkxJTkUgdm9pZCBUQ01hbGxvY1Ro
cmVhZENhY2hlOjpGZXRjaEZyb21DZW50cmFsQ2FjaGUoc2l6ZV90IGNsLCBzaXplX3QgYWxsb2Nh
dGlvblNpemUpCit7CisgICAgaW50IGZldGNoQ291bnQgPSBudW1PYmplY3RzVG9Nb3ZlW2NsXTsK
KyAgICB2b2lkKiBzdGFydDsKKyAgICB2b2lkKiBlbmQ7CisgICAgY2VudHJhbENhY2hlW2NsXS5S
ZW1vdmVSYW5nZSgmc3RhcnQsICZlbmQsICZmZXRjaENvdW50KTsKKyAgICBsaXN0W2NsXS5QdXNo
UmFuZ2UoZmV0Y2hDb3VudCwgc3RhcnQsIGVuZCk7CisgICAgc2l6ZSArPSBhbGxvY2F0aW9uU2l6
ZSAqIGZldGNoQ291bnQ7CiB9CiAKIC8vIFJlbW92ZSBzb21lIG9iamVjdHMgb2YgY2xhc3MgImNs
IiBmcm9tIHRocmVhZCBoZWFwIGFuZCBhZGQgdG8gY2VudHJhbCBjYWNoZQotaW5saW5lIHZvaWQg
VENNYWxsb2NfVGhyZWFkQ2FjaGU6OlJlbGVhc2VUb0NlbnRyYWxDYWNoZShzaXplX3QgY2wsIGlu
dCBOKSB7Ci0gIEFTU0VSVChOID4gMCk7Ci0gIEZyZWVMaXN0KiBzcmMgPSAmbGlzdF9bY2xdOwot
ICBpZiAoTiA+IHNyYy0+bGVuZ3RoKCkpIE4gPSBzcmMtPmxlbmd0aCgpOwotICBzaXplXyAtPSBO
KkJ5dGVTaXplRm9yQ2xhc3MoY2wpOwotCi0gIC8vIFdlIHJldHVybiBwcmVwYWNrYWdlZCBjaGFp
bnMgb2YgdGhlIGNvcnJlY3Qgc2l6ZSB0byB0aGUgY2VudHJhbCBjYWNoZS4KLSAgLy8gVE9ETzog
VXNlIHRoZSBzYW1lIGZvcm1hdCBpbnRlcm5hbGx5IGluIHRoZSB0aHJlYWQgY2FjaGVzPwotICBp
bnQgYmF0Y2hfc2l6ZSA9IG51bV9vYmplY3RzX3RvX21vdmVbY2xdOwotICB3aGlsZSAoTiA+IGJh
dGNoX3NpemUpIHsKLSAgICB2b2lkICp0YWlsLCAqaGVhZDsKLSAgICBzcmMtPlBvcFJhbmdlKGJh
dGNoX3NpemUsICZoZWFkLCAmdGFpbCk7Ci0gICAgY2VudHJhbF9jYWNoZVtjbF0uSW5zZXJ0UmFu
Z2UoaGVhZCwgdGFpbCwgYmF0Y2hfc2l6ZSk7Ci0gICAgTiAtPSBiYXRjaF9zaXplOwotICB9Ci0g
IHZvaWQgKnRhaWwsICpoZWFkOwotICBzcmMtPlBvcFJhbmdlKE4sICZoZWFkLCAmdGFpbCk7Ci0g
IGNlbnRyYWxfY2FjaGVbY2xdLkluc2VydFJhbmdlKGhlYWQsIHRhaWwsIE4pOworaW5saW5lIHZv
aWQgVENNYWxsb2NUaHJlYWRDYWNoZTo6UmVsZWFzZVRvQ2VudHJhbENhY2hlKHNpemVfdCBjbCwg
aW50IE4pCit7CisgICAgQVNTRVJUKE4gPiAwKTsKKyAgICBGcmVlTGlzdCogc3JjID0gJmxpc3Rb
Y2xdOworICAgIGlmIChOID4gc3JjLT5sZW5ndGgoKSkKKyAgICAgICAgTiA9IHNyYy0+bGVuZ3Ro
KCk7CisgICAgc2l6ZSAtPSBOKkJ5dGVTaXplRm9yQ2xhc3MoY2wpOworCisgICAgLy8gV2UgcmV0
dXJuIHByZXBhY2thZ2VkIGNoYWlucyBvZiB0aGUgY29ycmVjdCBzaXplIHRvIHRoZSBjZW50cmFs
IGNhY2hlLgorICAgIC8vIFRPRE86IFVzZSB0aGUgc2FtZSBmb3JtYXQgaW50ZXJuYWxseSBpbiB0
aGUgdGhyZWFkIGNhY2hlcz8KKyAgICBpbnQgYmF0Y2hTaXplID0gbnVtT2JqZWN0c1RvTW92ZVtj
bF07CisgICAgd2hpbGUgKE4gPiBiYXRjaFNpemUpIHsKKyAgICAgICAgdm9pZCogdGFpbDsKKyAg
ICAgICAgdm9pZCogaGVhZDsKKyAgICAgICAgc3JjLT5Qb3BSYW5nZShiYXRjaFNpemUsICZoZWFk
LCAmdGFpbCk7CisgICAgICAgIGNlbnRyYWxDYWNoZVtjbF0uSW5zZXJ0UmFuZ2UoaGVhZCwgdGFp
bCwgYmF0Y2hTaXplKTsKKyAgICAgICAgTiAtPSBiYXRjaFNpemU7CisgICAgfQorICAgIHZvaWQq
IHRhaWw7CisgICAgdm9pZCogaGVhZDsKKyAgICBzcmMtPlBvcFJhbmdlKE4sICZoZWFkLCAmdGFp
bCk7CisgICAgY2VudHJhbENhY2hlW2NsXS5JbnNlcnRSYW5nZShoZWFkLCB0YWlsLCBOKTsKIH0K
IAogLy8gUmVsZWFzZSBpZGxlIG1lbW9yeSB0byB0aGUgY2VudHJhbCBjYWNoZQotaW5saW5lIHZv
aWQgVENNYWxsb2NfVGhyZWFkQ2FjaGU6OlNjYXZlbmdlKCkgewotICAvLyBJZiB0aGUgbG93LXdh
dGVyIG1hcmsgZm9yIHRoZSBmcmVlIGxpc3QgaXMgTCwgaXQgbWVhbnMgd2Ugd291bGQKLSAgLy8g
bm90IGhhdmUgaGFkIHRvIGFsbG9jYXRlIGFueXRoaW5nIGZyb20gdGhlIGNlbnRyYWwgY2FjaGUg
ZXZlbiBpZgotICAvLyB3ZSBoYWQgcmVkdWNlZCB0aGUgZnJlZSBsaXN0IHNpemUgYnkgTC4gIFdl
IGFpbSB0byBnZXQgY2xvc2VyIHRvCi0gIC8vIHRoYXQgc2l0dWF0aW9uIGJ5IGRyb3BwaW5nIEwv
MiBub2RlcyBmcm9tIHRoZSBmcmVlIGxpc3QuICBUaGlzCi0gIC8vIG1heSBub3QgcmVsZWFzZSBt
dWNoIG1lbW9yeSwgYnV0IGlmIHNvIHdlIHdpbGwgY2FsbCBzY2F2ZW5nZSBhZ2FpbgotICAvLyBw
cmV0dHkgc29vbiBhbmQgdGhlIGxvdy13YXRlciBtYXJrcyB3aWxsIGJlIGhpZ2ggb24gdGhhdCBj
YWxsLgotICAvL2ludDY0IHN0YXJ0ID0gQ3ljbGVDbG9jazo6Tm93KCk7Ci0KLSAgZm9yIChzaXpl
X3QgY2wgPSAwOyBjbCA8IGtOdW1DbGFzc2VzOyBjbCsrKSB7Ci0gICAgRnJlZUxpc3QqIGxpc3Qg
PSAmbGlzdF9bY2xdOwotICAgIGNvbnN0IGludCBsb3dtYXJrID0gbGlzdC0+bG93d2F0ZXJtYXJr
KCk7Ci0gICAgaWYgKGxvd21hcmsgPiAwKSB7Ci0gICAgICBjb25zdCBpbnQgZHJvcCA9IChsb3dt
YXJrID4gMSkgPyBsb3dtYXJrLzIgOiAxOwotICAgICAgUmVsZWFzZVRvQ2VudHJhbENhY2hlKGNs
LCBkcm9wKTsKK2lubGluZSB2b2lkIFRDTWFsbG9jVGhyZWFkQ2FjaGU6OlNjYXZlbmdlKCkKK3sK
KyAgICAvLyBJZiB0aGUgbG93LXdhdGVyIG1hcmsgZm9yIHRoZSBmcmVlIGxpc3QgaXMgTCwgaXQg
bWVhbnMgd2Ugd291bGQKKyAgICAvLyBub3QgaGF2ZSBoYWQgdG8gYWxsb2NhdGUgYW55dGhpbmcg
ZnJvbSB0aGUgY2VudHJhbCBjYWNoZSBldmVuIGlmCisgICAgLy8gd2UgaGFkIHJlZHVjZWQgdGhl
IGZyZWUgbGlzdCBzaXplIGJ5IEwuIFdlIGFpbSB0byBnZXQgY2xvc2VyIHRvCisgICAgLy8gdGhh
dCBzaXR1YXRpb24gYnkgZHJvcHBpbmcgTC8yIG5vZGVzIGZyb20gdGhlIGZyZWUgbGlzdC4gVGhp
cworICAgIC8vIG1heSBub3QgcmVsZWFzZSBtdWNoIG1lbW9yeSwgYnV0IGlmIHNvIHdlIHdpbGwg
Y2FsbCBzY2F2ZW5nZSBhZ2FpbgorICAgIC8vIHByZXR0eSBzb29uIGFuZCB0aGUgbG93LXdhdGVy
IG1hcmtzIHdpbGwgYmUgaGlnaCBvbiB0aGF0IGNhbGwuCisKKyAgICAvLyBpbnQ2NCBzdGFydCA9
IEN5Y2xlQ2xvY2s6Ok5vdygpOworCisgICAgZm9yIChzaXplX3QgY2wgPSAwOyBjbCA8IGtOdW1D
bGFzc2VzOyBjbCsrKSB7CisgICAgICAgIEZyZWVMaXN0KiBwTGlzdCA9ICZsaXN0W2NsXTsKKyAg
ICAgICAgY29uc3QgaW50IGxvd21hcmsgPSBwTGlzdC0+bG93d2F0ZXJtYXJrKCk7CisgICAgICAg
IGlmIChsb3dtYXJrID4gMCkgeworICAgICAgICAgICAgY29uc3QgaW50IGRyb3AgPSAobG93bWFy
ayA+IDEpID8gbG93bWFyayAvIDIgOiAxOworICAgICAgICAgICAgUmVsZWFzZVRvQ2VudHJhbENh
Y2hlKGNsLCBkcm9wKTsKKyAgICAgICAgfQorICAgICAgICBwTGlzdC0+Y2xlYXJMb3d3YXRlcm1h
cmsoKTsKICAgICB9Ci0gICAgbGlzdC0+Y2xlYXJfbG93d2F0ZXJtYXJrKCk7Ci0gIH0KIAotICAv
L2ludDY0IGZpbmlzaCA9IEN5Y2xlQ2xvY2s6Ok5vdygpOwotICAvL0N5Y2xlVGltZXIgY3Q7Ci0g
IC8vTUVTU0FHRSgiR0M6ICUuMGYgbnNcbiIsIGN0LkN5Y2xlc1RvVXNlYyhmaW5pc2gtc3RhcnQp
KjEwMDAuMCk7Ci19Ci0KLXZvaWQgVENNYWxsb2NfVGhyZWFkQ2FjaGU6OlBpY2tOZXh0U2FtcGxl
KHNpemVfdCBrKSB7Ci0gIC8vIE1ha2UgbmV4dCAicmFuZG9tIiBudW1iZXIKLSAgLy8geF4zMit4
XjIyK3heMit4XjErMSBpcyBhIHByaW1pdGl2ZSBwb2x5bm9taWFsIGZvciByYW5kb20gbnVtYmVy
cwotICBzdGF0aWMgY29uc3QgdWludDMyX3Qga1BvbHkgPSAoMSA8PCAyMikgfCAoMSA8PCAyKSB8
ICgxIDw8IDEpIHwgKDEgPDwgMCk7Ci0gIHVpbnQzMl90IHIgPSBybmRfOwotICBybmRfID0gKHIg
PDwgMSkgXiAoKHN0YXRpY19jYXN0PGludDMyX3Q+KHIpID4+IDMxKSAmIGtQb2x5KTsKLQotICAv
LyBOZXh0IHBvaW50IGlzICJybmRfICUgKHNhbXBsZV9wZXJpb2QpIi4gIEkuZS4sIGF2ZXJhZ2UK
LSAgLy8gaW5jcmVtZW50IGlzICJzYW1wbGVfcGVyaW9kLzIiLgotICBjb25zdCBpbnQgZmxhZ192
YWx1ZSA9IHN0YXRpY19jYXN0PGludD4oRkxBR1NfdGNtYWxsb2Nfc2FtcGxlX3BhcmFtZXRlcik7
Ci0gIHN0YXRpYyBpbnQgbGFzdF9mbGFnX3ZhbHVlID0gLTE7Ci0KLSAgaWYgKGZsYWdfdmFsdWUg
IT0gbGFzdF9mbGFnX3ZhbHVlKSB7Ci0gICAgU3BpbkxvY2tIb2xkZXIgaCgmc2FtcGxlX3Blcmlv
ZF9sb2NrKTsKLSAgICBpbnQgaTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgKHN0YXRpY19jYXN0PGlu
dD4oc2l6ZW9mKHByaW1lc19saXN0KS9zaXplb2YocHJpbWVzX2xpc3RbMF0pKSAtIDEpOyBpKysp
IHsKLSAgICAgIGlmIChwcmltZXNfbGlzdFtpXSA+PSBmbGFnX3ZhbHVlKSB7Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgfQotICAgIH0KLSAgICBzYW1wbGVfcGVyaW9kID0gcHJpbWVzX2xpc3RbaV07
Ci0gICAgbGFzdF9mbGFnX3ZhbHVlID0gZmxhZ192YWx1ZTsKLSAgfQorICAgIC8vIGludDY0IGZp
bmlzaCA9IEN5Y2xlQ2xvY2s6Ok5vdygpOworICAgIC8vIEN5Y2xlVGltZXIgY3Q7CisgICAgLy8g
TUVTU0FHRSgiR0M6ICUuMGYgbnNcbiIsIGN0LkN5Y2xlc1RvVXNlYyhmaW5pc2gtc3RhcnQpKjEw
MDAuMCk7Cit9CiAKLSAgYnl0ZXNfdW50aWxfc2FtcGxlXyArPSBybmRfICUgc2FtcGxlX3Blcmlv
ZDsKK3ZvaWQgVENNYWxsb2NUaHJlYWRDYWNoZTo6UGlja05leHRTYW1wbGUoc2l6ZV90IGspCit7
CisgICAgLy8gTWFrZSBuZXh0ICJyYW5kb20iIG51bWJlcgorICAgIC8vIHheMzIreF4yMit4XjIr
eF4xKzEgaXMgYSBwcmltaXRpdmUgcG9seW5vbWlhbCBmb3IgcmFuZG9tIG51bWJlcnMKKyAgICBz
dGF0aWMgY29uc3QgdWludDMyX3Qga1BvbHkgPSAoMSA8PCAyMikgfCAoMSA8PCAyKSB8ICgxIDw8
IDEpIHwgKDEgPDwgMCk7CisgICAgdWludDMyX3QgciA9IHJuZDsKKyAgICBybmQgPSAociA8PCAx
KSBeICgoc3RhdGljX2Nhc3Q8aW50MzJfdD4ocikgPj4gMzEpICYga1BvbHkpOwogCi0gIGlmIChr
ID4gKHN0YXRpY19jYXN0PHNpemVfdD4oLTEpID4+IDIpKSB7Ci0gICAgLy8gSWYgdGhlIHVzZXIg
aGFzIGFza2VkIGZvciBhIGh1Z2UgYWxsb2NhdGlvbiB0aGVuIGl0IGlzIHBvc3NpYmxlCi0gICAg
Ly8gZm9yIHRoZSBjb2RlIGJlbG93IHRvIGxvb3AgaW5maW5pdGVseS4gIEp1c3QgcmV0dXJuIChu
b3RlIHRoYXQKLSAgICAvLyB0aGlzIHRocm93cyBvZmYgdGhlIHNhbXBsaW5nIGFjY3VyYWN5IHNv
bWV3aGF0LCBidXQgYSB1c2VyIHdobwotICAgIC8vIGlzIGFsbG9jYXRpbmcgbW9yZSB0aGFuIDFH
IG9mIG1lbW9yeSBhdCBhIHRpbWUgY2FuIGxpdmUgd2l0aCBhCi0gICAgLy8gbWlub3IgaW5hY2N1
cmFjeSBpbiBwcm9maWxpbmcgb2Ygc21hbGwgYWxsb2NhdGlvbnMsIGFuZCBhbHNvCi0gICAgLy8g
d291bGQgcmF0aGVyIG5vdCB3YWl0IGZvciB0aGUgbG9vcCBiZWxvdyB0byB0ZXJtaW5hdGUpLgot
ICAgIHJldHVybjsKLSAgfQorICAgIC8vIE5leHQgcG9pbnQgaXMgInJuZCAlIChzYW1wbGVfcGVy
aW9kKSIuIEkuZS4sIGF2ZXJhZ2UKKyAgICAvLyBpbmNyZW1lbnQgaXMgInNhbXBsZV9wZXJpb2Qg
LyAyIi4KKyAgICBjb25zdCBpbnQgZmxhZ1ZhbHVlID0gc3RhdGljX2Nhc3Q8aW50PihGTEFHU190
Y21hbGxvY19zYW1wbGVfcGFyYW1ldGVyKTsKKyAgICBzdGF0aWMgaW50IGxhc3RGbGFnVmFsdWUg
PSAtMTsKIAotICB3aGlsZSAoYnl0ZXNfdW50aWxfc2FtcGxlXyA8IGspIHsKLSAgICAvLyBJbmNy
ZWFzZSBieXRlc191bnRpbF9zYW1wbGVfIGJ5IGVub3VnaCBhdmVyYWdlIHNhbXBsaW5nIHBlcmlv
ZHMKLSAgICAvLyAoc2FtcGxlX3BlcmlvZCA+PiAxKSB0byBhbGxvdyB1cyB0byBzYW1wbGUgcGFz
dCB0aGUgY3VycmVudAotICAgIC8vIGFsbG9jYXRpb24uCi0gICAgYnl0ZXNfdW50aWxfc2FtcGxl
XyArPSAoc2FtcGxlX3BlcmlvZCA+PiAxKTsKLSAgfQorICAgIGlmIChmbGFnVmFsdWUgIT0gbGFz
dEZsYWdWYWx1ZSkgeworICAgICAgICBTcGluTG9ja0hvbGRlciBoKCZzYW1wbGVfcGVyaW9kX2xv
Y2spOworICAgICAgICBpbnQgaTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IChzdGF0aWNfY2Fz
dDxpbnQ+KHNpemVvZihwcmltZXNMaXN0KSAvIHNpemVvZihwcmltZXNMaXN0WzBdKSkgLSAxKTsg
aSsrKSB7CisgICAgICAgICAgICBpZiAocHJpbWVzTGlzdFtpXSA+PSBmbGFnVmFsdWUpCisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgc2FtcGxlX3BlcmlvZCA9IHBy
aW1lc0xpc3RbaV07CisgICAgICAgIGxhc3RGbGFnVmFsdWUgPSBmbGFnVmFsdWU7CisgICAgfQog
Ci0gIGJ5dGVzX3VudGlsX3NhbXBsZV8gLT0gazsKLX0KKyAgICBieXRlc1VudGlsU2FtcGxlICs9
IHJuZCAlIHNhbXBsZV9wZXJpb2Q7CisKKyAgICBpZiAoayA+IChzdGF0aWNfY2FzdDxzaXplX3Q+
KC0xKSA+PiAyKSkKKyAgICAgICAgLy8gSWYgdGhlIHVzZXIgaGFzIGFza2VkIGZvciBhIGh1Z2Ug
YWxsb2NhdGlvbiB0aGVuIGl0IGlzIHBvc3NpYmxlCisgICAgICAgIC8vIGZvciB0aGUgY29kZSBi
ZWxvdyB0byBsb29wIGluZmluaXRlbHkuIEp1c3QgcmV0dXJuIChub3RlIHRoYXQKKyAgICAgICAg
Ly8gdGhpcyB0aHJvd3Mgb2ZmIHRoZSBzYW1wbGluZyBhY2N1cmFjeSBzb21ld2hhdCwgYnV0IGEg
dXNlciB3aG8KKyAgICAgICAgLy8gaXMgYWxsb2NhdGluZyBtb3JlIHRoYW4gMUcgb2YgbWVtb3J5
IGF0IGEgdGltZSBjYW4gbGl2ZSB3aXRoIGEKKyAgICAgICAgLy8gbWlub3IgaW5hY2N1cmFjeSBp
biBwcm9maWxpbmcgb2Ygc21hbGwgYWxsb2NhdGlvbnMsIGFuZCBhbHNvCisgICAgICAgIC8vIHdv
dWxkIHJhdGhlciBub3Qgd2FpdCBmb3IgdGhlIGxvb3AgYmVsb3cgdG8gdGVybWluYXRlKS4KKyAg
ICAgICAgcmV0dXJuOwogCi12b2lkIFRDTWFsbG9jX1RocmVhZENhY2hlOjpJbml0TW9kdWxlKCkg
ewotICAvLyBUaGVyZSBpcyBhIHNsaWdodCBwb3RlbnRpYWwgcmFjZSBoZXJlIGJlY2F1c2Ugb2Yg
ZG91YmxlLWNoZWNrZWQKLSAgLy8gbG9ja2luZyBpZGlvbS4gIEhvd2V2ZXIsIGFzIGxvbmcgYXMg
dGhlIHByb2dyYW0gZG9lcyBhIHNtYWxsCi0gIC8vIGFsbG9jYXRpb24gYmVmb3JlIHN3aXRjaGlu
ZyB0byBtdWx0aS10aHJlYWRlZCBtb2RlLCB3ZSB3aWxsIGJlCi0gIC8vIGZpbmUuICBXZSBpbmNy
ZWFzZSB0aGUgY2hhbmNlcyBvZiBkb2luZyBzdWNoIGEgc21hbGwgYWxsb2NhdGlvbgotICAvLyBi
eSBkb2luZyBvbmUgaW4gdGhlIGNvbnN0cnVjdG9yIG9mIHRoZSBtb2R1bGVfZW50ZXJfZXhpdF9o
b29rCi0gIC8vIG9iamVjdCBkZWNsYXJlZCBiZWxvdy4KLSAgU3BpbkxvY2tIb2xkZXIgaCgmcGFn
ZWhlYXBfbG9jayk7Ci0gIGlmICghcGhpbml0ZWQpIHsKKyAgICB3aGlsZSAoYnl0ZXNVbnRpbFNh
bXBsZSA8IGspCisgICAgICAgIC8vIEluY3JlYXNlIGJ5dGVzVW50aWxTYW1wbGUgYnkgZW5vdWdo
IGF2ZXJhZ2Ugc2FtcGxpbmcgcGVyaW9kcworICAgICAgICAvLyAoc2FtcGxlX3BlcmlvZCA+PiAx
KSB0byBhbGxvdyB1cyB0byBzYW1wbGUgcGFzdCB0aGUgY3VycmVudAorICAgICAgICAvLyBhbGxv
Y2F0aW9uLgorICAgICAgICBieXRlc1VudGlsU2FtcGxlICs9IChzYW1wbGVfcGVyaW9kID4+IDEp
OworCisgICAgYnl0ZXNVbnRpbFNhbXBsZSAtPSBrOworfQorCit2b2lkIFRDTWFsbG9jVGhyZWFk
Q2FjaGU6OkluaXRNb2R1bGUoKQoreworICAgIC8vIFRoZXJlIGlzIGEgc2xpZ2h0IHBvdGVudGlh
bCByYWNlIGhlcmUgYmVjYXVzZSBvZiBkb3VibGUtY2hlY2tlZAorICAgIC8vIGxvY2tpbmcgaWRp
b20uIEhvd2V2ZXIsIGFzIGxvbmcgYXMgdGhlIHByb2dyYW0gZG9lcyBhIHNtYWxsCisgICAgLy8g
YWxsb2NhdGlvbiBiZWZvcmUgc3dpdGNoaW5nIHRvIG11bHRpLXRocmVhZGVkIG1vZGUsIHdlIHdp
bGwgYmUKKyAgICAvLyBmaW5lLiBXZSBpbmNyZWFzZSB0aGUgY2hhbmNlcyBvZiBkb2luZyBzdWNo
IGEgc21hbGwgYWxsb2NhdGlvbgorICAgIC8vIGJ5IGRvaW5nIG9uZSBpbiB0aGUgY29uc3RydWN0
b3Igb2YgdGhlIG1vZHVsZV9lbnRlcl9leGl0X2hvb2sKKyAgICAvLyBvYmplY3QgZGVjbGFyZWQg
YmVsb3cuCisgICAgU3BpbkxvY2tIb2xkZXIgaCgmcGFnZWhlYXBMb2NrKTsKKyAgICBpZiAoIXBo
aW5pdGVkKSB7CiAjaWZkZWYgV1RGX0NIQU5HRVMKLSAgICBJbml0VFNEKCk7CisgICAgICAgIElu
aXRUU0QoKTsKICNlbmRpZgotICAgIEluaXRTaXplQ2xhc3NlcygpOwotICAgIHRocmVhZGhlYXBf
YWxsb2NhdG9yLkluaXQoKTsKLSAgICBzcGFuX2FsbG9jYXRvci5Jbml0KCk7Ci0gICAgc3Bhbl9h
bGxvY2F0b3IuTmV3KCk7IC8vIFJlZHVjZSBjYWNoZSBjb25mbGljdHMKLSAgICBzcGFuX2FsbG9j
YXRvci5OZXcoKTsgLy8gUmVkdWNlIGNhY2hlIGNvbmZsaWN0cwotICAgIHN0YWNrdHJhY2VfYWxs
b2NhdG9yLkluaXQoKTsKLSAgICBETExfSW5pdCgmc2FtcGxlZF9vYmplY3RzKTsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGtOdW1DbGFzc2VzOyArK2kpIHsKLSAgICAgIGNlbnRyYWxfY2Fj
aGVbaV0uSW5pdChpKTsKLSAgICB9Ci0gICAgcGFnZWhlYXAtPmluaXQoKTsKLSAgICBwaGluaXRl
ZCA9IDE7CisgICAgICAgIEluaXRTaXplQ2xhc3NlcygpOworICAgICAgICB0aHJlYWRoZWFwQWxs
b2NhdG9yLkluaXQoKTsKKyAgICAgICAgc3BhbkFsbG9jYXRvci5Jbml0KCk7CisgICAgICAgIHNw
YW5BbGxvY2F0b3IuTmV3KCk7IC8vIFJlZHVjZSBjYWNoZSBjb25mbGljdHMKKyAgICAgICAgc3Bh
bkFsbG9jYXRvci5OZXcoKTsgLy8gUmVkdWNlIGNhY2hlIGNvbmZsaWN0cworICAgICAgICBzdGFj
a3RyYWNlQWxsb2NhdG9yLkluaXQoKTsKKyAgICAgICAgRExMSW5pdCgmc2FtcGxlZE9iamVjdHMp
OworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtOdW1DbGFzc2VzOyArK2kpCisgICAg
ICAgICAgICBjZW50cmFsQ2FjaGVbaV0uSW5pdChpKTsKKyAgICAgICAgcGFnZWhlYXAtPmluaXQo
KTsKKyAgICAgICAgcGhpbml0ZWQgPSAxOwogI2lmIGRlZmluZWQoV1RGX0NIQU5HRVMpICYmIE9T
KERBUldJTikKLSAgICBGYXN0TWFsbG9jWm9uZTo6aW5pdCgpOworICAgICAgICBGYXN0TWFsbG9j
Wm9uZTo6aW5pdCgpOwogI2VuZGlmCi0gIH0KKyAgICB9CiB9CiAKLWlubGluZSBUQ01hbGxvY19U
aHJlYWRDYWNoZSogVENNYWxsb2NfVGhyZWFkQ2FjaGU6Ok5ld0hlYXAoVGhyZWFkSWRlbnRpZmll
ciB0aWQpIHsKLSAgLy8gQ3JlYXRlIHRoZSBoZWFwIGFuZCBhZGQgaXQgdG8gdGhlIGxpbmtlZCBs
aXN0Ci0gIFRDTWFsbG9jX1RocmVhZENhY2hlICpoZWFwID0gdGhyZWFkaGVhcF9hbGxvY2F0b3Iu
TmV3KCk7Ci0gIGhlYXAtPkluaXQodGlkKTsKLSAgaGVhcC0+bmV4dF8gPSB0aHJlYWRfaGVhcHM7
Ci0gIGhlYXAtPnByZXZfID0gTlVMTDsKLSAgaWYgKHRocmVhZF9oZWFwcyAhPSBOVUxMKSB0aHJl
YWRfaGVhcHMtPnByZXZfID0gaGVhcDsKLSAgdGhyZWFkX2hlYXBzID0gaGVhcDsKLSAgdGhyZWFk
X2hlYXBfY291bnQrKzsKLSAgUmVjb21wdXRlVGhyZWFkQ2FjaGVTaXplKCk7Ci0gIHJldHVybiBo
ZWFwOworaW5saW5lIFRDTWFsbG9jVGhyZWFkQ2FjaGUqIFRDTWFsbG9jVGhyZWFkQ2FjaGU6Ok5l
d0hlYXAoVGhyZWFkSWRlbnRpZmllciB0aWQpCit7CisgICAgLy8gQ3JlYXRlIHRoZSBoZWFwIGFu
ZCBhZGQgaXQgdG8gdGhlIGxpbmtlZCBsaXN0CisgICAgVENNYWxsb2NUaHJlYWRDYWNoZSogaGVh
cCA9IHRocmVhZGhlYXBBbGxvY2F0b3IuTmV3KCk7CisgICAgaGVhcC0+SW5pdCh0aWQpOworICAg
IGhlYXAtPm5leHQgPSB0aHJlYWRIZWFwczsKKyAgICBoZWFwLT5wcmV2ID0gMDsKKyAgICBpZiAo
dGhyZWFkSGVhcHMpCisgICAgICAgIHRocmVhZEhlYXBzLT5wcmV2ID0gaGVhcDsKKyAgICB0aHJl
YWRIZWFwcyA9IGhlYXA7CisgICAgdGhyZWFkX2hlYXBfY291bnQrKzsKKyAgICBSZWNvbXB1dGVU
aHJlYWRDYWNoZVNpemUoKTsKKyAgICByZXR1cm4gaGVhcDsKIH0KIAotaW5saW5lIFRDTWFsbG9j
X1RocmVhZENhY2hlKiBUQ01hbGxvY19UaHJlYWRDYWNoZTo6R2V0VGhyZWFkSGVhcCgpIHsKK2lu
bGluZSBUQ01hbGxvY1RocmVhZENhY2hlKiBUQ01hbGxvY1RocmVhZENhY2hlOjpHZXRUaHJlYWRI
ZWFwKCkKK3sKICNpZmRlZiBIQVZFX1RMUwogICAgIC8vIF9fdGhyZWFkIGlzIGZhc3RlciwgYnV0
IG9ubHkgd2hlbiB0aGUga2VybmVsIHN1cHBvcnRzIGl0Ci0gIGlmIChLZXJuZWxTdXBwb3J0c1RM
UygpKQotICAgIHJldHVybiB0aHJlYWRsb2NhbF9oZWFwOworICAgIGlmIChLZXJuZWxTdXBwb3J0
c1RMUygpKQorICAgICAgICByZXR1cm4gdGhyZWFkbG9jYWxIZWFwOwogI2VsaWYgT1MoV0lORE9X
UykKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VENNYWxsb2NfVGhyZWFkQ2FjaGUqPihUbHNHZXRW
YWx1ZSh0bHNJbmRleCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxUQ01hbGxvY1RocmVhZENh
Y2hlKj4oVGxzR2V0VmFsdWUodGxzSW5kZXgpKTsKICNlbHNlCi0gICAgcmV0dXJuIHN0YXRpY19j
YXN0PFRDTWFsbG9jX1RocmVhZENhY2hlKj4ocHRocmVhZF9nZXRzcGVjaWZpYyhoZWFwX2tleSkp
OworICAgIHJldHVybiBzdGF0aWNfY2FzdDxUQ01hbGxvY1RocmVhZENhY2hlKj4ocHRocmVhZF9n
ZXRzcGVjaWZpYyhoZWFwX2tleSkpOwogI2VuZGlmCiB9CiAKLWlubGluZSBUQ01hbGxvY19UaHJl
YWRDYWNoZSogVENNYWxsb2NfVGhyZWFkQ2FjaGU6OkdldENhY2hlKCkgewotICBUQ01hbGxvY19U
aHJlYWRDYWNoZSogcHRyID0gTlVMTDsKLSAgaWYgKCF0c2RfaW5pdGVkKSB7Ci0gICAgSW5pdE1v
ZHVsZSgpOwotICB9IGVsc2UgewotICAgIHB0ciA9IEdldFRocmVhZEhlYXAoKTsKLSAgfQotICBp
ZiAocHRyID09IE5VTEwpIHB0ciA9IENyZWF0ZUNhY2hlSWZOZWNlc3NhcnkoKTsKLSAgcmV0dXJu
IHB0cjsKK2lubGluZSBUQ01hbGxvY1RocmVhZENhY2hlKiBUQ01hbGxvY1RocmVhZENhY2hlOjpH
ZXRDYWNoZSgpCit7CisgICAgVENNYWxsb2NUaHJlYWRDYWNoZSogcHRyID0gMDsKKyAgICBpZiAo
IXRzZEluaXRlZCkKKyAgICAgICAgSW5pdE1vZHVsZSgpOworICAgIGVsc2UKKyAgICAgICAgcHRy
ID0gR2V0VGhyZWFkSGVhcCgpOworICAgIGlmICghcHRyKQorICAgICAgICBwdHIgPSBDcmVhdGVD
YWNoZUlmTmVjZXNzYXJ5KCk7CisgICAgcmV0dXJuIHB0cjsKIH0KIAotLy8gSW4gZGVsZXRpb24g
cGF0aHMsIHdlIGRvIG5vdCB0cnkgdG8gY3JlYXRlIGEgdGhyZWFkLWNhY2hlLiAgVGhpcyBpcwor
Ly8gSW4gZGVsZXRpb24gcGF0aHMsIHdlIGRvIG5vdCB0cnkgdG8gY3JlYXRlIGEgdGhyZWFkLWNh
Y2hlLiBUaGlzIGlzCiAvLyBiZWNhdXNlIHdlIG1heSBiZSBpbiB0aGUgdGhyZWFkIGRlc3RydWN0
aW9uIGNvZGUgYW5kIG1heSBoYXZlCiAvLyBhbHJlYWR5IGNsZWFuZWQgdXAgdGhlIGNhY2hlIGZv
ciB0aGlzIHRocmVhZC4KLWlubGluZSBUQ01hbGxvY19UaHJlYWRDYWNoZSogVENNYWxsb2NfVGhy
ZWFkQ2FjaGU6OkdldENhY2hlSWZQcmVzZW50KCkgewotICBpZiAoIXRzZF9pbml0ZWQpIHJldHVy
biBOVUxMOwotICB2b2lkKiBjb25zdCBwID0gR2V0VGhyZWFkSGVhcCgpOwotICByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDxUQ01hbGxvY19UaHJlYWRDYWNoZSo+KHApOworaW5saW5lIFRDTWFsbG9j
VGhyZWFkQ2FjaGUqIFRDTWFsbG9jVGhyZWFkQ2FjaGU6OkdldENhY2hlSWZQcmVzZW50KCkKK3sK
KyAgICBpZiAoIXRzZEluaXRlZCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgdm9pZCogY29uc3Qg
cCA9IEdldFRocmVhZEhlYXAoKTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUQ01hbGxv
Y1RocmVhZENhY2hlKj4ocCk7CiB9CiAKLXZvaWQgVENNYWxsb2NfVGhyZWFkQ2FjaGU6OkluaXRU
U0QoKSB7Ci0gIEFTU0VSVCghdHNkX2luaXRlZCk7Cit2b2lkIFRDTWFsbG9jVGhyZWFkQ2FjaGU6
OkluaXRUU0QoKQoreworICAgIEFTU0VSVCghdHNkSW5pdGVkKTsKICNpZiBVU0UoUFRIUkVBRF9H
RVRTUEVDSUZJQ19ESVJFQ1QpCi0gIHB0aHJlYWRfa2V5X2luaXRfbnAoaGVhcF9rZXksIERlc3Ry
b3lUaHJlYWRDYWNoZSk7CisgICAgcHRocmVhZF9rZXlfaW5pdF9ucChoZWFwX2tleSwgRGVzdHJv
eVRocmVhZENhY2hlKTsKICNlbHNlCi0gIHB0aHJlYWRfa2V5X2NyZWF0ZSgmaGVhcF9rZXksIERl
c3Ryb3lUaHJlYWRDYWNoZSk7CisgICAgcHRocmVhZF9rZXlfY3JlYXRlKCZoZWFwX2tleSwgRGVz
dHJveVRocmVhZENhY2hlKTsKICNlbmRpZgogI2lmIE9TKFdJTkRPV1MpCi0gIHRsc0luZGV4ID0g
VGxzQWxsb2MoKTsKKyAgICB0bHNJbmRleCA9IFRsc0FsbG9jKCk7CiAjZW5kaWYKLSAgdHNkX2lu
aXRlZCA9IHRydWU7CisgICAgdHNkSW5pdGVkID0gdHJ1ZTsKICAgICAKICNpZiAhT1MoV0lORE9X
UykKLSAgLy8gV2UgbWF5IGhhdmUgdXNlZCBhIGZha2UgcHRocmVhZF90IGZvciB0aGUgbWFpbiB0
aHJlYWQuICBGaXggaXQuCi0gIHB0aHJlYWRfdCB6ZXJvOwotICBtZW1zZXQoJnplcm8sIDAsIHNp
emVvZih6ZXJvKSk7CisgICAgLy8gV2UgbWF5IGhhdmUgdXNlZCBhIGZha2UgcHRocmVhZF90IGZv
ciB0aGUgbWFpbiB0aHJlYWQuIEZpeCBpdC4KKyAgICBwdGhyZWFkX3QgemVybzsKKyAgICBtZW1z
ZXQoJnplcm8sIDAsIHNpemVvZih6ZXJvKSk7CiAjZW5kaWYKICNpZm5kZWYgV1RGX0NIQU5HRVMK
LSAgU3BpbkxvY2tIb2xkZXIgaCgmcGFnZWhlYXBfbG9jayk7CisgICAgU3BpbkxvY2tIb2xkZXIg
aCgmcGFnZWhlYXBMb2NrKTsKICNlbHNlCi0gIEFTU0VSVChwYWdlaGVhcF9sb2NrLklzSGVsZCgp
KTsKKyAgICBBU1NFUlQocGFnZWhlYXBMb2NrLklzSGVsZCgpKTsKICNlbmRpZgotICBmb3IgKFRD
TWFsbG9jX1RocmVhZENhY2hlKiBoID0gdGhyZWFkX2hlYXBzOyBoICE9IE5VTEw7IGggPSBoLT5u
ZXh0XykgeworICAgIGZvciAoVENNYWxsb2NUaHJlYWRDYWNoZSogaCA9IHRocmVhZEhlYXBzOyBo
OyBoID0gaC0+bmV4dCkKICNpZiBPUyhXSU5ET1dTKQotICAgIGlmIChoLT50aWRfID09IDApIHsK
LSAgICAgIGgtPnRpZF8gPSBHZXRDdXJyZW50VGhyZWFkSWQoKTsKLSAgICB9CisgICAgICAgIGlm
ICghaC0+dGlkKQorICAgICAgICAgICAgaC0+dGlkID0gR2V0Q3VycmVudFRocmVhZElkKCk7CiAj
ZWxzZQotICAgIGlmIChwdGhyZWFkX2VxdWFsKGgtPnRpZF8sIHplcm8pKSB7Ci0gICAgICBoLT50
aWRfID0gcHRocmVhZF9zZWxmKCk7Ci0gICAgfQorICAgICAgICBpZiAocHRocmVhZF9lcXVhbCho
LT50aWQsIHplcm8pKQorICAgICAgICAgICAgaC0+dGlkID0gcHRocmVhZF9zZWxmKCk7CiAjZW5k
aWYKLSAgfQogfQogCi1UQ01hbGxvY19UaHJlYWRDYWNoZSogVENNYWxsb2NfVGhyZWFkQ2FjaGU6
OkNyZWF0ZUNhY2hlSWZOZWNlc3NhcnkoKSB7Ci0gIC8vIEluaXRpYWxpemUgcGVyLXRocmVhZCBk
YXRhIGlmIG5lY2Vzc2FyeQotICBUQ01hbGxvY19UaHJlYWRDYWNoZSogaGVhcCA9IE5VTEw7Ci0g
IHsKLSAgICBTcGluTG9ja0hvbGRlciBoKCZwYWdlaGVhcF9sb2NrKTsKK1RDTWFsbG9jVGhyZWFk
Q2FjaGUqIFRDTWFsbG9jVGhyZWFkQ2FjaGU6OkNyZWF0ZUNhY2hlSWZOZWNlc3NhcnkoKQorewor
ICAgIC8vIEluaXRpYWxpemUgcGVyLXRocmVhZCBkYXRhIGlmIG5lY2Vzc2FyeQorICAgIFRDTWFs
bG9jVGhyZWFkQ2FjaGUqIGhlYXAgPSAwOworICAgIHsKKyAgICAgICAgU3BpbkxvY2tIb2xkZXIg
aCgmcGFnZWhlYXBMb2NrKTsKIAogI2lmIE9TKFdJTkRPV1MpCi0gICAgRFdPUkQgbWU7Ci0gICAg
aWYgKCF0c2RfaW5pdGVkKSB7Ci0gICAgICBtZSA9IDA7Ci0gICAgfSBlbHNlIHsKLSAgICAgIG1l
ID0gR2V0Q3VycmVudFRocmVhZElkKCk7Ci0gICAgfQorICAgICAgICBEV09SRCBtZTsKKyAgICAg
ICAgaWYgKCF0c2RJbml0ZWQpCisgICAgICAgICAgICBtZSA9IDA7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIG1lID0gR2V0Q3VycmVudFRocmVhZElkKCk7CiAjZWxzZQotICAgIC8vIEVhcmx5
IG9uIGluIGdsaWJjJ3MgbGlmZSwgd2UgY2Fubm90IGV2ZW4gY2FsbCBwdGhyZWFkX3NlbGYoKQot
ICAgIHB0aHJlYWRfdCBtZTsKLSAgICBpZiAoIXRzZF9pbml0ZWQpIHsKLSAgICAgIG1lbXNldCgm
bWUsIDAsIHNpemVvZihtZSkpOwotICAgIH0gZWxzZSB7Ci0gICAgICBtZSA9IHB0aHJlYWRfc2Vs
ZigpOwotICAgIH0KKyAgICAgICAgLy8gRWFybHkgb24gaW4gZ2xpYmMncyBsaWZlLCB3ZSBjYW5u
b3QgZXZlbiBjYWxsIHB0aHJlYWRfc2VsZigpCisgICAgICAgIHB0aHJlYWRfdCBtZTsKKyAgICAg
ICAgaWYgKCF0c2RJbml0ZWQpCisgICAgICAgICAgICBtZW1zZXQoJm1lLCAwLCBzaXplb2YobWUp
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbWUgPSBwdGhyZWFkX3NlbGYoKTsKICNlbmRp
ZgogCi0gICAgLy8gVGhpcyBtYXkgYmUgYSByZWN1cnNpdmUgbWFsbG9jIGNhbGwgZnJvbSBwdGhy
ZWFkX3NldHNwZWNpZmljKCkKLSAgICAvLyBJbiB0aGF0IGNhc2UsIHRoZSBoZWFwIGZvciB0aGlz
IHRocmVhZCBoYXMgYWxyZWFkeSBiZWVuIGNyZWF0ZWQKLSAgICAvLyBhbmQgYWRkZWQgdG8gdGhl
IGxpbmtlZCBsaXN0LiAgU28gd2Ugc2VhcmNoIGZvciB0aGF0IGZpcnN0LgotICAgIGZvciAoVENN
YWxsb2NfVGhyZWFkQ2FjaGUqIGggPSB0aHJlYWRfaGVhcHM7IGggIT0gTlVMTDsgaCA9IGgtPm5l
eHRfKSB7CisgICAgICAgIC8vIFRoaXMgbWF5IGJlIGEgcmVjdXJzaXZlIG1hbGxvYyBjYWxsIGZy
b20gcHRocmVhZF9zZXRzcGVjaWZpYygpCisgICAgICAgIC8vIEluIHRoYXQgY2FzZSwgdGhlIGhl
YXAgZm9yIHRoaXMgdGhyZWFkIGhhcyBhbHJlYWR5IGJlZW4gY3JlYXRlZAorICAgICAgICAvLyBh
bmQgYWRkZWQgdG8gdGhlIGxpbmtlZCBsaXN0LiBTbyB3ZSBzZWFyY2ggZm9yIHRoYXQgZmlyc3Qu
CisgICAgICAgIGZvciAoVENNYWxsb2NUaHJlYWRDYWNoZSogaCA9IHRocmVhZEhlYXBzOyBoOyBo
ID0gaC0+bmV4dCkgewogI2lmIE9TKFdJTkRPV1MpCi0gICAgICBpZiAoaC0+dGlkXyA9PSBtZSkg
eworICAgICAgICAgICAgaWYgKGgtPnRpZCA9PSBtZSkgewogI2Vsc2UKLSAgICAgIGlmIChwdGhy
ZWFkX2VxdWFsKGgtPnRpZF8sIG1lKSkgeworICAgICAgICAgICAgaWYgKHB0aHJlYWRfZXF1YWwo
aC0+dGlkLCBtZSkpIHsKICNlbmRpZgotICAgICAgICBoZWFwID0gaDsKLSAgICAgICAgYnJlYWs7
Ci0gICAgICB9Ci0gICAgfQorICAgICAgICAgICAgICAgIGhlYXAgPSBoOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CiAKLSAgICBpZiAoaGVhcCA9PSBO
VUxMKSBoZWFwID0gTmV3SGVhcChtZSk7Ci0gIH0KKyAgICAgICAgaWYgKCFoZWFwKQorICAgICAg
ICAgICAgaGVhcCA9IE5ld0hlYXAobWUpOworICAgIH0KIAotICAvLyBXZSBjYWxsIHB0aHJlYWRf
c2V0c3BlY2lmaWMoKSBvdXRzaWRlIHRoZSBsb2NrIGJlY2F1c2UgaXQgbWF5Ci0gIC8vIGNhbGwg
bWFsbG9jKCkgcmVjdXJzaXZlbHkuICBUaGUgcmVjdXJzaXZlIGNhbGwgd2lsbCBuZXZlciBnZXQK
LSAgLy8gaGVyZSBhZ2FpbiBiZWNhdXNlIGl0IHdpbGwgZmluZCB0aGUgYWxyZWFkeSBhbGxvY2F0
ZWQgaGVhcCBpbiB0aGUKLSAgLy8gbGlua2VkIGxpc3Qgb2YgaGVhcHMuCi0gIGlmICghaGVhcC0+
aW5fc2V0c3BlY2lmaWNfICYmIHRzZF9pbml0ZWQpIHsKLSAgICBoZWFwLT5pbl9zZXRzcGVjaWZp
Y18gPSB0cnVlOwotICAgIHNldFRocmVhZEhlYXAoaGVhcCk7Ci0gIH0KLSAgcmV0dXJuIGhlYXA7
CisgICAgLy8gV2UgY2FsbCBwdGhyZWFkX3NldHNwZWNpZmljKCkgb3V0c2lkZSB0aGUgbG9jayBi
ZWNhdXNlIGl0IG1heQorICAgIC8vIGNhbGwgbWFsbG9jKCkgcmVjdXJzaXZlbHkuIFRoZSByZWN1
cnNpdmUgY2FsbCB3aWxsIG5ldmVyIGdldAorICAgIC8vIGhlcmUgYWdhaW4gYmVjYXVzZSBpdCB3
aWxsIGZpbmQgdGhlIGFscmVhZHkgYWxsb2NhdGVkIGhlYXAgaW4gdGhlCisgICAgLy8gbGlua2Vk
IGxpc3Qgb2YgaGVhcHMuCisgICAgaWYgKCFoZWFwLT5pblNldHNwZWNpZmljICYmIHRzZEluaXRl
ZCkgeworICAgICAgICBoZWFwLT5pblNldHNwZWNpZmljID0gdHJ1ZTsKKyAgICAgICAgc2V0VGhy
ZWFkSGVhcChoZWFwKTsKKyAgICB9CisgICAgcmV0dXJuIGhlYXA7CiB9CiAKLXZvaWQgVENNYWxs
b2NfVGhyZWFkQ2FjaGU6OkJlY29tZUlkbGUoKSB7Ci0gIGlmICghdHNkX2luaXRlZCkgcmV0dXJu
OyAgICAgICAgICAgICAgLy8gTm8gY2FjaGVzIHlldAotICBUQ01hbGxvY19UaHJlYWRDYWNoZSog
aGVhcCA9IEdldFRocmVhZEhlYXAoKTsKLSAgaWYgKGhlYXAgPT0gTlVMTCkgcmV0dXJuOyAgICAg
ICAgICAgICAvLyBObyB0aHJlYWQgY2FjaGUgdG8gcmVtb3ZlCi0gIGlmIChoZWFwLT5pbl9zZXRz
cGVjaWZpY18pIHJldHVybjsgICAgLy8gRG8gbm90IGRpc3R1cmIgdGhlIGFjdGl2ZSBjYWxsZXIK
K3ZvaWQgVENNYWxsb2NUaHJlYWRDYWNoZTo6QmVjb21lSWRsZSgpCit7CisgICAgaWYgKCF0c2RJ
bml0ZWQpCisgICAgICAgIHJldHVybjsgLy8gTm8gY2FjaGVzIHlldAorICAgIFRDTWFsbG9jVGhy
ZWFkQ2FjaGUqIGhlYXAgPSBHZXRUaHJlYWRIZWFwKCk7CisgICAgaWYgKCFoZWFwKQorICAgICAg
ICByZXR1cm47IC8vIE5vIHRocmVhZCBjYWNoZSB0byByZW1vdmUKKyAgICBpZiAoaGVhcC0+aW5T
ZXRzcGVjaWZpYykKKyAgICAgICAgcmV0dXJuOyAvLyBEbyBub3QgZGlzdHVyYiB0aGUgYWN0aXZl
IGNhbGxlcgogCi0gIGhlYXAtPmluX3NldHNwZWNpZmljXyA9IHRydWU7Ci0gIHNldFRocmVhZEhl
YXAoTlVMTCk7CisgICAgaGVhcC0+aW5TZXRzcGVjaWZpYyA9IHRydWU7CisgICAgc2V0VGhyZWFk
SGVhcCgwKTsKICNpZmRlZiBIQVZFX1RMUwotICAvLyBBbHNvIHVwZGF0ZSB0aGUgY29weSBpbiBf
X3RocmVhZAotICB0aHJlYWRsb2NhbF9oZWFwID0gTlVMTDsKKyAgICAvLyBBbHNvIHVwZGF0ZSB0
aGUgY29weSBpbiBfX3RocmVhZAorICAgIHRocmVhZGxvY2FsSGVhcCA9IDA7CiAjZW5kaWYKLSAg
aGVhcC0+aW5fc2V0c3BlY2lmaWNfID0gZmFsc2U7Ci0gIGlmIChHZXRUaHJlYWRIZWFwKCkgPT0g
aGVhcCkgewotICAgIC8vIFNvbWVob3cgaGVhcCBnb3QgcmVpbnN0YXRlZCBieSBhIHJlY3Vyc2l2
ZSBjYWxsIHRvIG1hbGxvYwotICAgIC8vIGZyb20gcHRocmVhZF9zZXRzcGVjaWZpYy4gIFdlIGdp
dmUgdXAgaW4gdGhpcyBjYXNlLgotICAgIHJldHVybjsKLSAgfQorICAgIGhlYXAtPmluU2V0c3Bl
Y2lmaWMgPSBmYWxzZTsKKyAgICBpZiAoR2V0VGhyZWFkSGVhcCgpID09IGhlYXApIHsKKyAgICAg
ICAgLy8gU29tZWhvdyBoZWFwIGdvdCByZWluc3RhdGVkIGJ5IGEgcmVjdXJzaXZlIGNhbGwgdG8g
bWFsbG9jCisgICAgICAgIC8vIGZyb20gcHRocmVhZF9zZXRzcGVjaWZpYy4gV2UgZ2l2ZSB1cCBp
biB0aGlzIGNhc2UuCisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgLy8gV2UgY2FuIG5vdyBn
ZXQgcmlkIG9mIHRoZSBoZWFwCi0gIERlbGV0ZUNhY2hlKGhlYXApOworICAgIC8vIFdlIGNhbiBu
b3cgZ2V0IHJpZCBvZiB0aGUgaGVhcAorICAgIERlbGV0ZUNhY2hlKGhlYXApOwogfQogCi12b2lk
IFRDTWFsbG9jX1RocmVhZENhY2hlOjpEZXN0cm95VGhyZWFkQ2FjaGUodm9pZCogcHRyKSB7Ci0g
IC8vIE5vdGUgdGhhdCAicHRyIiBjYW5ub3QgYmUgTlVMTCBzaW5jZSBwdGhyZWFkIHByb21pc2Vz
IG5vdAotICAvLyB0byBpbnZva2UgdGhlIGRlc3RydWN0b3Igb24gTlVMTCB2YWx1ZXMsIGJ1dCBm
b3Igc2FmZXR5LAotICAvLyB3ZSBjaGVjayBhbnl3YXkuCi0gIGlmIChwdHIgPT0gTlVMTCkgcmV0
dXJuOwordm9pZCBUQ01hbGxvY1RocmVhZENhY2hlOjpEZXN0cm95VGhyZWFkQ2FjaGUodm9pZCog
cHRyKQoreworICAgIC8vIE5vdGUgdGhhdCAicHRyIiBjYW5ub3QgYmUgMCBzaW5jZSBwdGhyZWFk
IHByb21pc2VzIG5vdAorICAgIC8vIHRvIGludm9rZSB0aGUgZGVzdHJ1Y3RvciBvbiAwIHZhbHVl
cywgYnV0IGZvciBzYWZldHksCisgICAgLy8gd2UgY2hlY2sgYW55d2F5LgorICAgIGlmICghcHRy
KQorICAgICAgICByZXR1cm47CiAjaWZkZWYgSEFWRV9UTFMKLSAgLy8gUHJldmVudCBmYXN0IHBh
dGggb2YgR2V0VGhyZWFkSGVhcCgpIGZyb20gcmV0dXJuaW5nIGhlYXAuCi0gIHRocmVhZGxvY2Fs
X2hlYXAgPSBOVUxMOworICAgIC8vIFByZXZlbnQgZmFzdCBwYXRoIG9mIEdldFRocmVhZEhlYXAo
KSBmcm9tIHJldHVybmluZyBoZWFwLgorICAgIHRocmVhZGxvY2FsSGVhcCA9IDA7CiAjZW5kaWYK
LSAgRGVsZXRlQ2FjaGUocmVpbnRlcnByZXRfY2FzdDxUQ01hbGxvY19UaHJlYWRDYWNoZSo+KHB0
cikpOworICAgIERlbGV0ZUNhY2hlKHJlaW50ZXJwcmV0X2Nhc3Q8VENNYWxsb2NUaHJlYWRDYWNo
ZSo+KHB0cikpOwogfQogCi12b2lkIFRDTWFsbG9jX1RocmVhZENhY2hlOjpEZWxldGVDYWNoZShU
Q01hbGxvY19UaHJlYWRDYWNoZSogaGVhcCkgewotICAvLyBSZW1vdmUgYWxsIG1lbW9yeSBmcm9t
IGhlYXAKLSAgaGVhcC0+Q2xlYW51cCgpOwordm9pZCBUQ01hbGxvY1RocmVhZENhY2hlOjpEZWxl
dGVDYWNoZShUQ01hbGxvY1RocmVhZENhY2hlKiBoZWFwKQoreworICAgIC8vIFJlbW92ZSBhbGwg
bWVtb3J5IGZyb20gaGVhcAorICAgIGhlYXAtPkNsZWFudXAoKTsKIAotICAvLyBSZW1vdmUgZnJv
bSBsaW5rZWQgbGlzdAotICBTcGluTG9ja0hvbGRlciBoKCZwYWdlaGVhcF9sb2NrKTsKLSAgaWYg
KGhlYXAtPm5leHRfICE9IE5VTEwpIGhlYXAtPm5leHRfLT5wcmV2XyA9IGhlYXAtPnByZXZfOwot
ICBpZiAoaGVhcC0+cHJldl8gIT0gTlVMTCkgaGVhcC0+cHJldl8tPm5leHRfID0gaGVhcC0+bmV4
dF87Ci0gIGlmICh0aHJlYWRfaGVhcHMgPT0gaGVhcCkgdGhyZWFkX2hlYXBzID0gaGVhcC0+bmV4
dF87Ci0gIHRocmVhZF9oZWFwX2NvdW50LS07Ci0gIFJlY29tcHV0ZVRocmVhZENhY2hlU2l6ZSgp
OworICAgIC8vIFJlbW92ZSBmcm9tIGxpbmtlZCBsaXN0CisgICAgU3BpbkxvY2tIb2xkZXIgaCgm
cGFnZWhlYXBMb2NrKTsKKyAgICBpZiAoaGVhcC0+bmV4dCkKKyAgICAgICAgaGVhcC0+bmV4dC0+
cHJldiA9IGhlYXAtPnByZXY7CisgICAgaWYgKGhlYXAtPnByZXYpCisgICAgICAgIGhlYXAtPnBy
ZXYtPm5leHQgPSBoZWFwLT5uZXh0OworICAgIGlmICh0aHJlYWRIZWFwcyA9PSBoZWFwKQorICAg
ICAgICB0aHJlYWRIZWFwcyA9IGhlYXAtPm5leHQ7CisgICAgdGhyZWFkX2hlYXBfY291bnQtLTsK
KyAgICBSZWNvbXB1dGVUaHJlYWRDYWNoZVNpemUoKTsKIAotICB0aHJlYWRoZWFwX2FsbG9jYXRv
ci5EZWxldGUoaGVhcCk7CisgICAgdGhyZWFkaGVhcEFsbG9jYXRvci5EZWxldGUoaGVhcCk7CiB9
CiAKLXZvaWQgVENNYWxsb2NfVGhyZWFkQ2FjaGU6OlJlY29tcHV0ZVRocmVhZENhY2hlU2l6ZSgp
IHsKLSAgLy8gRGl2aWRlIGF2YWlsYWJsZSBzcGFjZSBhY3Jvc3MgdGhyZWFkcwotICBpbnQgbiA9
IHRocmVhZF9oZWFwX2NvdW50ID4gMCA/IHRocmVhZF9oZWFwX2NvdW50IDogMTsKLSAgc2l6ZV90
IHNwYWNlID0gb3ZlcmFsbF90aHJlYWRfY2FjaGVfc2l6ZSAvIG47Cit2b2lkIFRDTWFsbG9jVGhy
ZWFkQ2FjaGU6OlJlY29tcHV0ZVRocmVhZENhY2hlU2l6ZSgpCit7CisgICAgLy8gRGl2aWRlIGF2
YWlsYWJsZSBzcGFjZSBhY3Jvc3MgdGhyZWFkcworICAgIGludCBuID0gdGhyZWFkX2hlYXBfY291
bnQgPiAwID8gdGhyZWFkX2hlYXBfY291bnQgOiAxOworICAgIHNpemVfdCBzcGFjZSA9IG92ZXJh
bGxUaHJlYWRDYWNoZXNpemUgLyBuOwogCi0gIC8vIExpbWl0IHRvIGFsbG93ZWQgcmFuZ2UKLSAg
aWYgKHNwYWNlIDwga01pblRocmVhZENhY2hlU2l6ZSkgc3BhY2UgPSBrTWluVGhyZWFkQ2FjaGVT
aXplOwotICBpZiAoc3BhY2UgPiBrTWF4VGhyZWFkQ2FjaGVTaXplKSBzcGFjZSA9IGtNYXhUaHJl
YWRDYWNoZVNpemU7CisgICAgLy8gTGltaXQgdG8gYWxsb3dlZCByYW5nZQorICAgIGlmIChzcGFj
ZSA8IGtNaW5UaHJlYWRDYWNoZVNpemUpCisgICAgICAgIHNwYWNlID0ga01pblRocmVhZENhY2hl
U2l6ZTsKKyAgICBpZiAoc3BhY2UgPiBrTWF4VGhyZWFkQ2FjaGVTaXplKQorICAgICAgICBzcGFj
ZSA9IGtNYXhUaHJlYWRDYWNoZVNpemU7CiAKLSAgcGVyX3RocmVhZF9jYWNoZV9zaXplID0gc3Bh
Y2U7CisgICAgcGVyVGhyZWFkQ2FjaGVTaXplID0gc3BhY2U7CiB9CiAKLXZvaWQgVENNYWxsb2Nf
VGhyZWFkQ2FjaGU6OlByaW50KCkgY29uc3QgewotICBmb3IgKHNpemVfdCBjbCA9IDA7IGNsIDwg
a051bUNsYXNzZXM7ICsrY2wpIHsKLSAgICBNRVNTQUdFKCIgICAgICAlNSIgUFJJdVMgIiA6ICU0
ZCBsZW47ICU0ZCBsb1xuIiwKK3ZvaWQgVENNYWxsb2NUaHJlYWRDYWNoZTo6UHJpbnQoKSBjb25z
dAoreworICAgIGZvciAoc2l6ZV90IGNsID0gMDsgY2wgPCBrTnVtQ2xhc3NlczsgKytjbCkgewor
ICAgICAgICBNRVNTQUdFKCIgICAgICAlNSIgUFJJdVMgIiA6ICU0ZCBsZW47ICU0ZCBsb1xuIiwK
ICAgICAgICAgICAgIEJ5dGVTaXplRm9yQ2xhc3MoY2wpLAotICAgICAgICAgICAgbGlzdF9bY2xd
Lmxlbmd0aCgpLAotICAgICAgICAgICAgbGlzdF9bY2xdLmxvd3dhdGVybWFyaygpKTsKLSAgfQor
ICAgICAgICAgICAgbGlzdFtjbF0ubGVuZ3RoKCksCisgICAgICAgICAgICBsaXN0W2NsXS5sb3d3
YXRlcm1hcmsoKSk7CisgICAgfQogfQogCiAvLyBFeHRyYWN0IGludGVyZXN0aW5nIHN0YXRzCiBz
dHJ1Y3QgVENNYWxsb2NTdGF0cyB7Ci0gIHVpbnQ2NF90IHN5c3RlbV9ieXRlczsgICAgICAgIC8v
IEJ5dGVzIGFsbG9jZWQgZnJvbSBzeXN0ZW0KLSAgdWludDY0X3QgdGhyZWFkX2J5dGVzOyAgICAg
ICAgLy8gQnl0ZXMgaW4gdGhyZWFkIGNhY2hlcwotICB1aW50NjRfdCBjZW50cmFsX2J5dGVzOyAg
ICAgICAvLyBCeXRlcyBpbiBjZW50cmFsIGNhY2hlCi0gIHVpbnQ2NF90IHRyYW5zZmVyX2J5dGVz
OyAgICAgIC8vIEJ5dGVzIGluIGNlbnRyYWwgdHJhbnNmZXIgY2FjaGUKLSAgdWludDY0X3QgcGFn
ZWhlYXBfYnl0ZXM7ICAgICAgLy8gQnl0ZXMgaW4gcGFnZSBoZWFwCi0gIHVpbnQ2NF90IG1ldGFk
YXRhX2J5dGVzOyAgICAgIC8vIEJ5dGVzIGFsbG9jZWQgZm9yIG1ldGFkYXRhCisgICAgdWludDY0
X3Qgc3lzdGVtQnl0ZXM7IC8vIEJ5dGVzIGFsbG9jZWQgZnJvbSBzeXN0ZW0KKyAgICB1aW50NjRf
dCB0aHJlYWRCeXRlczsgLy8gQnl0ZXMgaW4gdGhyZWFkIGNhY2hlcworICAgIHVpbnQ2NF90IGNl
bnRyYWxCeXRlczsgLy8gQnl0ZXMgaW4gY2VudHJhbCBjYWNoZQorICAgIHVpbnQ2NF90IHRyYW5z
ZmVyQnl0ZXM7IC8vIEJ5dGVzIGluIGNlbnRyYWwgdHJhbnNmZXIgY2FjaGUKKyAgICB1aW50NjRf
dCBwYWdlaGVhcEJ5dGVzOyAvLyBCeXRlcyBpbiBwYWdlIGhlYXAKKyAgICB1aW50NjRfdCBtZXRh
ZGF0YUJ5dGVzOyAvLyBCeXRlcyBhbGxvY2VkIGZvciBtZXRhZGF0YQogfTsKIAogI2lmbmRlZiBX
VEZfQ0hBTkdFUwotLy8gR2V0IHN0YXRzIGludG8gInIiLiAgQWxzbyBnZXQgcGVyLXNpemUtY2xh
c3MgY291bnRzIGlmIGNsYXNzX2NvdW50ICE9IE5VTEwKLXN0YXRpYyB2b2lkIEV4dHJhY3RTdGF0
cyhUQ01hbGxvY1N0YXRzKiByLCB1aW50NjRfdCogY2xhc3NfY291bnQpIHsKLSAgci0+Y2VudHJh
bF9ieXRlcyA9IDA7Ci0gIHItPnRyYW5zZmVyX2J5dGVzID0gMDsKLSAgZm9yIChpbnQgY2wgPSAw
OyBjbCA8IGtOdW1DbGFzc2VzOyArK2NsKSB7Ci0gICAgY29uc3QgaW50IGxlbmd0aCA9IGNlbnRy
YWxfY2FjaGVbY2xdLmxlbmd0aCgpOwotICAgIGNvbnN0IGludCB0Y19sZW5ndGggPSBjZW50cmFs
X2NhY2hlW2NsXS50Y19sZW5ndGgoKTsKLSAgICByLT5jZW50cmFsX2J5dGVzICs9IHN0YXRpY19j
YXN0PHVpbnQ2NF90PihCeXRlU2l6ZUZvckNsYXNzKGNsKSkgKiBsZW5ndGg7Ci0gICAgci0+dHJh
bnNmZXJfYnl0ZXMgKz0KLSAgICAgIHN0YXRpY19jYXN0PHVpbnQ2NF90PihCeXRlU2l6ZUZvckNs
YXNzKGNsKSkgKiB0Y19sZW5ndGg7Ci0gICAgaWYgKGNsYXNzX2NvdW50KSBjbGFzc19jb3VudFtj
bF0gPSBsZW5ndGggKyB0Y19sZW5ndGg7Ci0gIH0KLQotICAvLyBBZGQgc3RhdHMgZnJvbSBwZXIt
dGhyZWFkIGhlYXBzCi0gIHItPnRocmVhZF9ieXRlcyA9IDA7Ci0gIHsgLy8gc2NvcGUKLSAgICBT
cGluTG9ja0hvbGRlciBoKCZwYWdlaGVhcF9sb2NrKTsKLSAgICBmb3IgKFRDTWFsbG9jX1RocmVh
ZENhY2hlKiBoID0gdGhyZWFkX2hlYXBzOyBoICE9IE5VTEw7IGggPSBoLT5uZXh0XykgewotICAg
ICAgci0+dGhyZWFkX2J5dGVzICs9IGgtPlNpemUoKTsKLSAgICAgIGlmIChjbGFzc19jb3VudCkg
ewotICAgICAgICBmb3IgKHNpemVfdCBjbCA9IDA7IGNsIDwga051bUNsYXNzZXM7ICsrY2wpIHsK
LSAgICAgICAgICBjbGFzc19jb3VudFtjbF0gKz0gaC0+ZnJlZWxpc3RfbGVuZ3RoKGNsKTsKKy8v
IEdldCBzdGF0cyBpbnRvICJyIi4gQWxzbyBnZXQgcGVyLXNpemUtY2xhc3MgY291bnRzIGlmIGNs
YXNzQ291bnQgIT0gMAorc3RhdGljIHZvaWQgRXh0cmFjdFN0YXRzKFRDTWFsbG9jU3RhdHMqIHIs
IHVpbnQ2NF90KiBjbGFzc0NvdW50KQoreworICAgIHItPmNlbnRyYWxCeXRlcyA9IDA7CisgICAg
ci0+dHJhbnNmZXJCeXRlcyA9IDA7CisgICAgZm9yIChpbnQgY2wgPSAwOyBjbCA8IGtOdW1DbGFz
c2VzOyArK2NsKSB7CisgICAgICAgIGNvbnN0IGludCBsZW5ndGggPSBjZW50cmFsQ2FjaGVbY2xd
Lmxlbmd0aCgpOworICAgICAgICBjb25zdCBpbnQgdGNMZW5ndGggPSBjZW50cmFsQ2FjaGVbY2xd
LnRjTGVuZ3RoKCk7CisgICAgICAgIHItPmNlbnRyYWxCeXRlcyArPSBzdGF0aWNfY2FzdDx1aW50
NjRfdD4oQnl0ZVNpemVGb3JDbGFzcyhjbCkpICogbGVuZ3RoOworICAgICAgICByLT50cmFuc2Zl
ckJ5dGVzICs9IHN0YXRpY19jYXN0PHVpbnQ2NF90PihCeXRlU2l6ZUZvckNsYXNzKGNsKSkgKiB0
Y0xlbmd0aDsKKyAgICAgICAgaWYgKGNsYXNzQ291bnQpCisgICAgICAgICAgICBjbGFzc0NvdW50
W2NsXSA9IGxlbmd0aCArIHRjTGVuZ3RoOworICAgIH0KKworICAgIC8vIEFkZCBzdGF0cyBmcm9t
IHBlci10aHJlYWQgaGVhcHMKKyAgICByLT50aHJlYWRCeXRlcyA9IDA7CisgICAgeyAvLyBzY29w
ZQorICAgICAgICBTcGluTG9ja0hvbGRlciBoKCZwYWdlaGVhcExvY2spOworICAgICAgICBmb3Ig
KFRDTWFsbG9jVGhyZWFkQ2FjaGUqIGggPSB0aHJlYWRIZWFwczsgaDsgaCA9IGgtPm5leHQpIHsK
KyAgICAgICAgICAgIHItPnRocmVhZEJ5dGVzICs9IGgtPlNpemUoKTsKKyAgICAgICAgICAgIGlm
IChjbGFzc0NvdW50KSB7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgY2wgPSAwOyBjbCA8
IGtOdW1DbGFzc2VzOyArK2NsKQorICAgICAgICAgICAgICAgICAgICBjbGFzc0NvdW50W2NsXSAr
PSBoLT5mcmVlbGlzdGxlbmd0aChjbCk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAg
IH0KICAgICB9Ci0gIH0KIAotICB7IC8vc2NvcGUKLSAgICBTcGluTG9ja0hvbGRlciBoKCZwYWdl
aGVhcF9sb2NrKTsKLSAgICByLT5zeXN0ZW1fYnl0ZXMgPSBwYWdlaGVhcC0+U3lzdGVtQnl0ZXMo
KTsKLSAgICByLT5tZXRhZGF0YV9ieXRlcyA9IG1ldGFkYXRhX3N5c3RlbV9ieXRlczsKLSAgICBy
LT5wYWdlaGVhcF9ieXRlcyA9IHBhZ2VoZWFwLT5GcmVlQnl0ZXMoKTsKLSAgfQorICAgIHsgLy8g
c2NvcGUKKyAgICAgICAgU3BpbkxvY2tIb2xkZXIgaCgmcGFnZWhlYXBMb2NrKTsKKyAgICAgICAg
ci0+c3lzdGVtQnl0ZXMgPSBwYWdlaGVhcC0+U3lzdGVtQnl0ZXMoKTsKKyAgICAgICAgci0+bWV0
YWRhdGFCeXRlcyA9IG1ldGFkYXRhU3lzdGVtQnl0ZXM7CisgICAgICAgIHItPnBhZ2VoZWFwQnl0
ZXMgPSBwYWdlaGVhcC0+RnJlZUJ5dGVzKCk7CisgICAgfQogfQogI2VuZGlmCiAKICNpZm5kZWYg
V1RGX0NIQU5HRVMKIC8vIFdSSVRFIHN0YXRzIHRvICJvdXQiCiBzdGF0aWMgdm9pZCBEdW1wU3Rh
dHMoVENNYWxsb2NfUHJpbnRlciogb3V0LCBpbnQgbGV2ZWwpIHsKLSAgVENNYWxsb2NTdGF0cyBz
dGF0czsKLSAgdWludDY0X3QgY2xhc3NfY291bnRba051bUNsYXNzZXNdOwotICBFeHRyYWN0U3Rh
dHMoJnN0YXRzLCAobGV2ZWwgPj0gMiA/IGNsYXNzX2NvdW50IDogTlVMTCkpOworICAgIFRDTWFs
bG9jU3RhdHMgc3RhdHM7CisgICAgdWludDY0X3QgY2xhc3NDb3VudFtrTnVtQ2xhc3Nlc107Cisg
ICAgRXh0cmFjdFN0YXRzKCZzdGF0cywgKGxldmVsID49IDIgPyBjbGFzc0NvdW50IDogMCkpOwor
CisgICAgaWYgKGxldmVsID49IDIpIHsKKyAgICAgICAgb3V0LT5wcmludGYoIi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CisgICAgICAgIHVpbnQ2
NF90IGN1bXVsYXRpdmUgPSAwOworICAgICAgICBmb3IgKGludCBjbCA9IDA7IGNsIDwga051bUNs
YXNzZXM7ICsrY2wpIHsKKyAgICAgICAgICAgIGlmIChjbGFzc0NvdW50W2NsXSA+IDApIHsKKyAg
ICAgICAgICAgICAgICB1aW50NjRfdCBjbGFzc0J5dGVzID0gY2xhc3NDb3VudFtjbF0gKiBCeXRl
U2l6ZUZvckNsYXNzKGNsKTsKKyAgICAgICAgICAgICAgICBjdW11bGF0aXZlICs9IGNsYXNzQnl0
ZXM7CisgICAgICAgICAgICAgICAgb3V0LT5wcmludGYoImNsYXNzICUzZCBbICU4IiBQUkl1UyAi
IGJ5dGVzIF0gOiAiCisgICAgICAgICAgICAgICAgICAgICIlOCIgUFJJdTY0ICIgb2JqczsgJTUu
MWYgTUI7ICU1LjFmIGN1bSBNQlxuIiwKKyAgICAgICAgICAgICAgICAgICAgY2wsIEJ5dGVTaXpl
Rm9yQ2xhc3MoY2wpLAorICAgICAgICAgICAgICAgICAgICBjbGFzc0NvdW50W2NsXSwKKyAgICAg
ICAgICAgICAgICAgICAgY2xhc3NCeXRlcyAvIDEwNDg1NzYuMCwKKyAgICAgICAgICAgICAgICAg
ICAgY3VtdWxhdGl2ZSAvIDEwNDg1NzYuMCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KIAot
ICBpZiAobGV2ZWwgPj0gMikgewotICAgIG91dC0+cHJpbnRmKCItLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwotICAgIHVpbnQ2NF90IGN1bXVsYXRp
dmUgPSAwOwotICAgIGZvciAoaW50IGNsID0gMDsgY2wgPCBrTnVtQ2xhc3NlczsgKytjbCkgewot
ICAgICAgaWYgKGNsYXNzX2NvdW50W2NsXSA+IDApIHsKLSAgICAgICAgdWludDY0X3QgY2xhc3Nf
Ynl0ZXMgPSBjbGFzc19jb3VudFtjbF0gKiBCeXRlU2l6ZUZvckNsYXNzKGNsKTsKLSAgICAgICAg
Y3VtdWxhdGl2ZSArPSBjbGFzc19ieXRlczsKLSAgICAgICAgb3V0LT5wcmludGYoImNsYXNzICUz
ZCBbICU4IiBQUkl1UyAiIGJ5dGVzIF0gOiAiCi0gICAgICAgICAgICAgICAgIiU4IiBQUkl1NjQg
IiBvYmpzOyAlNS4xZiBNQjsgJTUuMWYgY3VtIE1CXG4iLAotICAgICAgICAgICAgICAgIGNsLCBC
eXRlU2l6ZUZvckNsYXNzKGNsKSwKLSAgICAgICAgICAgICAgICBjbGFzc19jb3VudFtjbF0sCi0g
ICAgICAgICAgICAgICAgY2xhc3NfYnl0ZXMgLyAxMDQ4NTc2LjAsCi0gICAgICAgICAgICAgICAg
Y3VtdWxhdGl2ZSAvIDEwNDg1NzYuMCk7Ci0gICAgICB9CisgICAgICAgIFNwaW5Mb2NrSG9sZGVy
IGgoJnBhZ2VoZWFwTG9jayk7CisgICAgICAgIHBhZ2VoZWFwLT5EdW1wKG91dCk7CiAgICAgfQog
Ci0gICAgU3BpbkxvY2tIb2xkZXIgaCgmcGFnZWhlYXBfbG9jayk7Ci0gICAgcGFnZWhlYXAtPkR1
bXAob3V0KTsKLSAgfQotCi0gIGNvbnN0IHVpbnQ2NF90IGJ5dGVzX2luX3VzZSA9IHN0YXRzLnN5
c3RlbV9ieXRlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIHN0YXRzLnBhZ2Vo
ZWFwX2J5dGVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gc3RhdHMuY2VudHJh
bF9ieXRlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIHN0YXRzLnRyYW5zZmVy
X2J5dGVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gc3RhdHMudGhyZWFkX2J5
dGVzOwotCi0gIG91dC0+cHJpbnRmKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS1cbiIKLSAgICAgICAgICAgICAgIk1BTExPQzogJTEyIiBQUkl1NjQgIiBI
ZWFwIHNpemVcbiIKLSAgICAgICAgICAgICAgIk1BTExPQzogJTEyIiBQUkl1NjQgIiBCeXRlcyBp
biB1c2UgYnkgYXBwbGljYXRpb25cbiIKLSAgICAgICAgICAgICAgIk1BTExPQzogJTEyIiBQUkl1
NjQgIiBCeXRlcyBmcmVlIGluIHBhZ2UgaGVhcFxuIgotICAgICAgICAgICAgICAiTUFMTE9DOiAl
MTIiIFBSSXU2NCAiIEJ5dGVzIGZyZWUgaW4gY2VudHJhbCBjYWNoZVxuIgotICAgICAgICAgICAg
ICAiTUFMTE9DOiAlMTIiIFBSSXU2NCAiIEJ5dGVzIGZyZWUgaW4gdHJhbnNmZXIgY2FjaGVcbiIK
LSAgICAgICAgICAgICAgIk1BTExPQzogJTEyIiBQUkl1NjQgIiBCeXRlcyBmcmVlIGluIHRocmVh
ZCBjYWNoZXNcbiIKLSAgICAgICAgICAgICAgIk1BTExPQzogJTEyIiBQUkl1NjQgIiBTcGFucyBp
biB1c2VcbiIKLSAgICAgICAgICAgICAgIk1BTExPQzogJTEyIiBQUkl1NjQgIiBUaHJlYWQgaGVh
cHMgaW4gdXNlXG4iCi0gICAgICAgICAgICAgICJNQUxMT0M6ICUxMiIgUFJJdTY0ICIgTWV0YWRh
dGEgYWxsb2NhdGVkXG4iCi0gICAgICAgICAgICAgICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIsCi0gICAgICAgICAgICAgIHN0YXRzLnN5c3RlbV9i
eXRlcywKLSAgICAgICAgICAgICAgYnl0ZXNfaW5fdXNlLAotICAgICAgICAgICAgICBzdGF0cy5w
YWdlaGVhcF9ieXRlcywKLSAgICAgICAgICAgICAgc3RhdHMuY2VudHJhbF9ieXRlcywKLSAgICAg
ICAgICAgICAgc3RhdHMudHJhbnNmZXJfYnl0ZXMsCi0gICAgICAgICAgICAgIHN0YXRzLnRocmVh
ZF9ieXRlcywKLSAgICAgICAgICAgICAgdWludDY0X3Qoc3Bhbl9hbGxvY2F0b3IuaW51c2UoKSks
Ci0gICAgICAgICAgICAgIHVpbnQ2NF90KHRocmVhZGhlYXBfYWxsb2NhdG9yLmludXNlKCkpLAot
ICAgICAgICAgICAgICBzdGF0cy5tZXRhZGF0YV9ieXRlcyk7CisgICAgY29uc3QgdWludDY0X3Qg
Ynl0ZXNJblVzZSA9IHN0YXRzLnN5c3RlbUJ5dGVzCisgICAgICAgIC0gc3RhdHMucGFnZWhlYXBC
eXRlcworICAgICAgICAtIHN0YXRzLmNlbnRyYWxCeXRlcworICAgICAgICAtIHN0YXRzLnRyYW5z
ZmVyQnl0ZXMKKyAgICAgICAgLSBzdGF0cy50aHJlYWRCeXRlczsKKworICAgIG91dC0+cHJpbnRm
KCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKKyAg
ICAgICAgIk1BTExPQzogJTEyIiBQUkl1NjQgIiBIZWFwIHNpemVcbiIKKyAgICAgICAgIk1BTExP
QzogJTEyIiBQUkl1NjQgIiBCeXRlcyBpbiB1c2UgYnkgYXBwbGljYXRpb25cbiIKKyAgICAgICAg
Ik1BTExPQzogJTEyIiBQUkl1NjQgIiBCeXRlcyBmcmVlIGluIHBhZ2UgaGVhcFxuIgorICAgICAg
ICAiTUFMTE9DOiAlMTIiIFBSSXU2NCAiIEJ5dGVzIGZyZWUgaW4gY2VudHJhbCBjYWNoZVxuIgor
ICAgICAgICAiTUFMTE9DOiAlMTIiIFBSSXU2NCAiIEJ5dGVzIGZyZWUgaW4gdHJhbnNmZXIgY2Fj
aGVcbiIKKyAgICAgICAgIk1BTExPQzogJTEyIiBQUkl1NjQgIiBCeXRlcyBmcmVlIGluIHRocmVh
ZCBjYWNoZXNcbiIKKyAgICAgICAgIk1BTExPQzogJTEyIiBQUkl1NjQgIiBTcGFucyBpbiB1c2Vc
biIKKyAgICAgICAgIk1BTExPQzogJTEyIiBQUkl1NjQgIiBUaHJlYWQgaGVhcHMgaW4gdXNlXG4i
CisgICAgICAgICJNQUxMT0M6ICUxMiIgUFJJdTY0ICIgTWV0YWRhdGEgYWxsb2NhdGVkXG4iCisg
ICAgICAgICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1c
biIsCisgICAgICAgIHN0YXRzLnN5c3RlbUJ5dGVzLAorICAgICAgICBieXRlc0luVXNlLAorICAg
ICAgICBzdGF0cy5wYWdlaGVhcEJ5dGVzLAorICAgICAgICBzdGF0cy5jZW50cmFsQnl0ZXMsCisg
ICAgICAgIHN0YXRzLnRyYW5zZmVyQnl0ZXMsCisgICAgICAgIHN0YXRzLnRocmVhZEJ5dGVzLAor
ICAgICAgICB1aW50NjRfdChzcGFuQWxsb2NhdG9yLmludXNlKCkpLAorICAgICAgICB1aW50NjRf
dCh0aHJlYWRoZWFwQWxsb2NhdG9yLmludXNlKCkpLAorICAgICAgICBzdGF0cy5tZXRhZGF0YUJ5
dGVzKTsKIH0KIAogc3RhdGljIHZvaWQgUHJpbnRTdGF0cyhpbnQgbGV2ZWwpIHsKQEAgLTM0MzAs
NDUgKzM1MjMsNDMgQEAgc3RhdGljIHZvaWQgUHJpbnRTdGF0cyhpbnQgbGV2ZWwpIHsKIH0KIAog
c3RhdGljIHZvaWQqKiBEdW1wU3RhY2tUcmFjZXMoKSB7Ci0gIC8vIENvdW50IGhvdyBtdWNoIHNw
YWNlIHdlIG5lZWQKLSAgaW50IG5lZWRlZF9zbG90cyA9IDA7Ci0gIHsKLSAgICBTcGluTG9ja0hv
bGRlciBoKCZwYWdlaGVhcF9sb2NrKTsKLSAgICBmb3IgKFNwYW4qIHMgPSBzYW1wbGVkX29iamVj
dHMubmV4dDsgcyAhPSAmc2FtcGxlZF9vYmplY3RzOyBzID0gcy0+bmV4dCkgewotICAgICAgU3Rh
Y2tUcmFjZSogc3RhY2sgPSByZWludGVycHJldF9jYXN0PFN0YWNrVHJhY2UqPihzLT5vYmplY3Rz
KTsKLSAgICAgIG5lZWRlZF9zbG90cyArPSAzICsgc3RhY2stPmRlcHRoOworICAgIC8vIENvdW50
IGhvdyBtdWNoIHNwYWNlIHdlIG5lZWQKKyAgICBpbnQgbmVlZGVkU2xvdHMgPSAwOworICAgIHsK
KyAgICAgICAgU3BpbkxvY2tIb2xkZXIgaCgmcGFnZWhlYXBMb2NrKTsKKyAgICAgICAgZm9yIChT
cGFuKiBzID0gc2FtcGxlZE9iamVjdHMubmV4dDsgcyAhPSAmc2FtcGxlZE9iamVjdHM7IHMgPSBz
LT5uZXh0KSB7CisgICAgICAgICAgICBTdGFja1RyYWNlKiBzdGFjayA9IHJlaW50ZXJwcmV0X2Nh
c3Q8U3RhY2tUcmFjZSo+KHMtPm9iamVjdHMpOworICAgICAgICAgICAgbmVlZGVkU2xvdHMgKz0g
MyArIHN0YWNrLT5kZXB0aDsKKyAgICAgICAgfQorICAgICAgICBuZWVkZWRTbG90cyArPSAxMDA7
IC8vIFNsb3AgaW4gY2FzZSBzYW1wbGUgZ3Jvd3MKKyAgICAgICAgbmVlZGVkU2xvdHMgKz0gbmVl
ZGVkU2xvdHMgLyA4OyAvLyBBbiBleHRyYSAxMi41JSBzbG9wCiAgICAgfQotICAgIG5lZWRlZF9z
bG90cyArPSAxMDA7ICAgICAgICAgICAgLy8gU2xvcCBpbiBjYXNlIHNhbXBsZSBncm93cwotICAg
IG5lZWRlZF9zbG90cyArPSBuZWVkZWRfc2xvdHMvODsgLy8gQW4gZXh0cmEgMTIuNSUgc2xvcAot
ICB9CiAKLSAgdm9pZCoqIHJlc3VsdCA9IG5ldyB2b2lkKltuZWVkZWRfc2xvdHNdOwotICBpZiAo
cmVzdWx0ID09IE5VTEwpIHsKLSAgICBNRVNTQUdFKCJ0Y21hbGxvYzogY291bGQgbm90IGFsbG9j
YXRlICVkIHNsb3RzIGZvciBzdGFjayB0cmFjZXNcbiIsCi0gICAgICAgICAgICBuZWVkZWRfc2xv
dHMpOwotICAgIHJldHVybiBOVUxMOwotICB9CisgICAgdm9pZCoqIHJlc3VsdCA9IG5ldyB2b2lk
KltuZWVkZWRTbG90c107CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgTUVTU0FHRSgidGNt
YWxsb2M6IGNvdWxkIG5vdCBhbGxvY2F0ZSAlZCBzbG90cyBmb3Igc3RhY2sgdHJhY2VzXG4iLAor
ICAgICAgICAgICAgbmVlZGVkU2xvdHMpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAg
ICBTcGluTG9ja0hvbGRlciBoKCZwYWdlaGVhcExvY2spOworICAgIGludCB1c2VkU2xvdHMgPSAw
OworICAgIGZvciAoU3BhbiogcyA9IHNhbXBsZWRPYmplY3RzLm5leHQ7IHMgIT0gJnNhbXBsZWRP
YmplY3RzOyBzID0gcy0+bmV4dCkgeworICAgICAgICBBU1NFUlQodXNlZFNsb3RzIDwgbmVlZGVk
U2xvdHMpOyAvLyBOZWVkIHRvIGxlYXZlIHJvb20gZm9yIHRlcm1pbmF0b3IKKyAgICAgICAgU3Rh
Y2tUcmFjZSogc3RhY2sgPSByZWludGVycHJldF9jYXN0PFN0YWNrVHJhY2UqPihzLT5vYmplY3Rz
KTsKKyAgICAgICAgaWYgKHVzZWRTbG90cyArIDMgKyBzdGFjay0+ZGVwdGggPj0gbmVlZGVkU2xv
dHMpCisgICAgICAgICAgICAvLyBObyBtb3JlIHJvb20KKyAgICAgICAgICAgIGJyZWFrOwogCi0g
IFNwaW5Mb2NrSG9sZGVyIGgoJnBhZ2VoZWFwX2xvY2spOwotICBpbnQgdXNlZF9zbG90cyA9IDA7
Ci0gIGZvciAoU3BhbiogcyA9IHNhbXBsZWRfb2JqZWN0cy5uZXh0OyBzICE9ICZzYW1wbGVkX29i
amVjdHM7IHMgPSBzLT5uZXh0KSB7Ci0gICAgQVNTRVJUKHVzZWRfc2xvdHMgPCBuZWVkZWRfc2xv
dHMpOyAgLy8gTmVlZCB0byBsZWF2ZSByb29tIGZvciB0ZXJtaW5hdG9yCi0gICAgU3RhY2tUcmFj
ZSogc3RhY2sgPSByZWludGVycHJldF9jYXN0PFN0YWNrVHJhY2UqPihzLT5vYmplY3RzKTsKLSAg
ICBpZiAodXNlZF9zbG90cyArIDMgKyBzdGFjay0+ZGVwdGggPj0gbmVlZGVkX3Nsb3RzKSB7Ci0g
ICAgICAvLyBObyBtb3JlIHJvb20KLSAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJlc3VsdFt1
c2VkX3Nsb3RzKzBdID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0
cl90PigxKSk7Ci0gICAgcmVzdWx0W3VzZWRfc2xvdHMrMV0gPSByZWludGVycHJldF9jYXN0PHZv
aWQqPihzdGFjay0+c2l6ZSk7Ci0gICAgcmVzdWx0W3VzZWRfc2xvdHMrMl0gPSByZWludGVycHJl
dF9jYXN0PHZvaWQqPihzdGFjay0+ZGVwdGgpOwotICAgIGZvciAoaW50IGQgPSAwOyBkIDwgc3Rh
Y2stPmRlcHRoOyBkKyspIHsKLSAgICAgIHJlc3VsdFt1c2VkX3Nsb3RzKzMrZF0gPSBzdGFjay0+
c3RhY2tbZF07CisgICAgICAgIHJlc3VsdFt1c2VkU2xvdHMrMF0gPSByZWludGVycHJldF9jYXN0
PHZvaWQqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEpKTsKKyAgICAgICAgcmVzdWx0W3VzZWRT
bG90cysxXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN0YWNrLT5zaXplKTsKKyAgICAgICAg
cmVzdWx0W3VzZWRTbG90cysyXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN0YWNrLT5kZXB0
aCk7CisgICAgICAgIGZvciAoaW50IGQgPSAwOyBkIDwgc3RhY2stPmRlcHRoOyBkKyspCisgICAg
ICAgICAgICByZXN1bHRbdXNlZFNsb3RzKzMrZF0gPSBzdGFjay0+c3RhY2tbZF07CisgICAgICAg
IHVzZWRTbG90cyArPSAzICsgc3RhY2stPmRlcHRoOwogICAgIH0KLSAgICB1c2VkX3Nsb3RzICs9
IDMgKyBzdGFjay0+ZGVwdGg7Ci0gIH0KLSAgcmVzdWx0W3VzZWRfc2xvdHNdID0gcmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PigwKSk7Ci0gIHJldHVybiByZXN1
bHQ7CisgICAgcmVzdWx0W3VzZWRTbG90c10gPSByZWludGVycHJldF9jYXN0PHZvaWQqPihzdGF0
aWNfY2FzdDx1aW50cHRyX3Q+KDApKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogI2VuZGlmCiAK
QEAgLTM0NzYsMTAzICszNTY3LDExMCBAQCBzdGF0aWMgdm9pZCoqIER1bXBTdGFja1RyYWNlcygp
IHsKIAogLy8gVENNYWxsb2MncyBzdXBwb3J0IGZvciBleHRyYSBtYWxsb2MgaW50ZXJmYWNlcwog
Y2xhc3MgVENNYWxsb2NJbXBsZW1lbnRhdGlvbiA6IHB1YmxpYyBNYWxsb2NFeHRlbnNpb24gewot
IHB1YmxpYzoKLSAgdmlydHVhbCB2b2lkIEdldFN0YXRzKGNoYXIqIGJ1ZmZlciwgaW50IGJ1ZmZl
cl9sZW5ndGgpIHsKLSAgICBBU1NFUlQoYnVmZmVyX2xlbmd0aCA+IDApOwotICAgIFRDTWFsbG9j
X1ByaW50ZXIgcHJpbnRlcihidWZmZXIsIGJ1ZmZlcl9sZW5ndGgpOwotCi0gICAgLy8gUHJpbnQg
bGV2ZWwgb25lIHN0YXRzIHVubGVzcyBsb3RzIG9mIHNwYWNlIGlzIGF2YWlsYWJsZQotICAgIGlm
IChidWZmZXJfbGVuZ3RoIDwgMTAwMDApIHsKLSAgICAgIER1bXBTdGF0cygmcHJpbnRlciwgMSk7
Ci0gICAgfSBlbHNlIHsKLSAgICAgIER1bXBTdGF0cygmcHJpbnRlciwgMik7CitwdWJsaWM6Cisg
ICAgdmlydHVhbCB2b2lkIEdldFN0YXRzKGNoYXIqIGJ1ZmZlciwgaW50IGJ1ZmZlckxlbmd0aCkK
KyAgICB7CisgICAgICAgIEFTU0VSVChidWZmZXJMZW5ndGggPiAwKTsKKyAgICAgICAgVENNYWxs
b2NfUHJpbnRlciBwcmludGVyKGJ1ZmZlciwgYnVmZmVyTGVuZ3RoKTsKKworICAgICAgICAvLyBQ
cmludCBsZXZlbCBvbmUgc3RhdHMgdW5sZXNzIGxvdHMgb2Ygc3BhY2UgaXMgYXZhaWxhYmxlCisg
ICAgICAgIGlmIChidWZmZXJMZW5ndGggPCAxMDAwMCkKKyAgICAgICAgICAgIER1bXBTdGF0cygm
cHJpbnRlciwgMSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIER1bXBTdGF0cygmcHJpbnRl
ciwgMik7CiAgICAgfQotICB9CiAKLSAgdmlydHVhbCB2b2lkKiogUmVhZFN0YWNrVHJhY2VzKCkg
ewotICAgIHJldHVybiBEdW1wU3RhY2tUcmFjZXMoKTsKLSAgfQorICAgIHZpcnR1YWwgdm9pZCoq
IFJlYWRTdGFja1RyYWNlcygpCisgICAgeworICAgICAgICByZXR1cm4gRHVtcFN0YWNrVHJhY2Vz
KCk7CisgICAgfQogCi0gIHZpcnR1YWwgYm9vbCBHZXROdW1lcmljUHJvcGVydHkoY29uc3QgY2hh
ciogbmFtZSwgc2l6ZV90KiB2YWx1ZSkgewotICAgIEFTU0VSVChuYW1lICE9IE5VTEwpOworICAg
IHZpcnR1YWwgYm9vbCBHZXROdW1lcmljUHJvcGVydHkoY29uc3QgY2hhciogbmFtZSwgc2l6ZV90
KiB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChuYW1lKTsKIAotICAgIGlmIChzdHJjbXAo
bmFtZSwgImdlbmVyaWMuY3VycmVudF9hbGxvY2F0ZWRfYnl0ZXMiKSA9PSAwKSB7Ci0gICAgICBU
Q01hbGxvY1N0YXRzIHN0YXRzOwotICAgICAgRXh0cmFjdFN0YXRzKCZzdGF0cywgTlVMTCk7Ci0g
ICAgICAqdmFsdWUgPSBzdGF0cy5zeXN0ZW1fYnl0ZXMKLSAgICAgICAgICAgICAgIC0gc3RhdHMu
dGhyZWFkX2J5dGVzCi0gICAgICAgICAgICAgICAtIHN0YXRzLmNlbnRyYWxfYnl0ZXMKLSAgICAg
ICAgICAgICAgIC0gc3RhdHMucGFnZWhlYXBfYnl0ZXM7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICBpZiAoc3RyY21wKG5hbWUsICJnZW5lcmljLmhlYXBfc2l6ZSIpID09IDApIHsK
LSAgICAgIFRDTWFsbG9jU3RhdHMgc3RhdHM7Ci0gICAgICBFeHRyYWN0U3RhdHMoJnN0YXRzLCBO
VUxMKTsKLSAgICAgICp2YWx1ZSA9IHN0YXRzLnN5c3RlbV9ieXRlczsKLSAgICAgIHJldHVybiB0
cnVlOwotICAgIH0KLQotICAgIGlmIChzdHJjbXAobmFtZSwgInRjbWFsbG9jLnNsYWNrX2J5dGVz
IikgPT0gMCkgewotICAgICAgLy8gV2UgYXNzdW1lIHRoYXQgYnl0ZXMgaW4gdGhlIHBhZ2UgaGVh
cCBhcmUgbm90IGZyYWdtZW50ZWQgdG9vCi0gICAgICAvLyBiYWRseSwgYW5kIGFyZSB0aGVyZWZv
cmUgYXZhaWxhYmxlIGZvciBhbGxvY2F0aW9uLgotICAgICAgU3BpbkxvY2tIb2xkZXIgbCgmcGFn
ZWhlYXBfbG9jayk7Ci0gICAgICAqdmFsdWUgPSBwYWdlaGVhcC0+RnJlZUJ5dGVzKCk7Ci0gICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoc3RyY21wKG5hbWUsICJ0Y21hbGxvYy5t
YXhfdG90YWxfdGhyZWFkX2NhY2hlX2J5dGVzIikgPT0gMCkgewotICAgICAgU3BpbkxvY2tIb2xk
ZXIgbCgmcGFnZWhlYXBfbG9jayk7Ci0gICAgICAqdmFsdWUgPSBvdmVyYWxsX3RocmVhZF9jYWNo
ZV9zaXplOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKHN0cmNtcChuYW1l
LCAidGNtYWxsb2MuY3VycmVudF90b3RhbF90aHJlYWRfY2FjaGVfYnl0ZXMiKSA9PSAwKSB7Ci0g
ICAgICBUQ01hbGxvY1N0YXRzIHN0YXRzOwotICAgICAgRXh0cmFjdFN0YXRzKCZzdGF0cywgTlVM
TCk7Ci0gICAgICAqdmFsdWUgPSBzdGF0cy50aHJlYWRfYnl0ZXM7Ci0gICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9CisgICAgICAgIGlmICghc3RyY21wKG5hbWUsICJnZW5lcmljLmN1cnJlbnRfYWxs
b2NhdGVkX2J5dGVzIikpIHsKKyAgICAgICAgICAgIFRDTWFsbG9jU3RhdHMgc3RhdHM7CisgICAg
ICAgICAgICBFeHRyYWN0U3RhdHMoJnN0YXRzLCAwKTsKKyAgICAgICAgICAgICp2YWx1ZSA9IHN0
YXRzLnN5c3RlbUJ5dGVzCisgICAgICAgICAgICAgICAgLSBzdGF0cy50aHJlYWRCeXRlcworICAg
ICAgICAgICAgICAgIC0gc3RhdHMuY2VudHJhbEJ5dGVzCisgICAgICAgICAgICAgICAgLSBzdGF0
cy5wYWdlaGVhcEJ5dGVzOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KIAot
ICAgIHJldHVybiBmYWxzZTsKLSAgfQorICAgICAgICBpZiAoIXN0cmNtcChuYW1lLCAiZ2VuZXJp
Yy5oZWFwc2l6ZSIpKSB7CisgICAgICAgICAgICBUQ01hbGxvY1N0YXRzIHN0YXRzOworICAgICAg
ICAgICAgRXh0cmFjdFN0YXRzKCZzdGF0cywgMCk7CisgICAgICAgICAgICAqdmFsdWUgPSBzdGF0
cy5zeXN0ZW1CeXRlczsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKCFzdHJjbXAobmFtZSwgInRjbWFsbG9jLnNsYWNrX2J5dGVzIikpIHsKKyAgICAg
ICAgICAgIC8vIFdlIGFzc3VtZSB0aGF0IGJ5dGVzIGluIHRoZSBwYWdlIGhlYXAgYXJlIG5vdCBm
cmFnbWVudGVkIHRvbworICAgICAgICAgICAgLy8gYmFkbHksIGFuZCBhcmUgdGhlcmVmb3JlIGF2
YWlsYWJsZSBmb3IgYWxsb2NhdGlvbi4KKyAgICAgICAgICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2so
JnBhZ2VoZWFwTG9jayk7CisgICAgICAgICAgICAqdmFsdWUgPSBwYWdlaGVhcC0+RnJlZUJ5dGVz
KCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgh
c3RyY21wKG5hbWUsICJ0Y21hbGxvYy5tYXhfdG90YWxfdGhyZWFkX2NhY2hlX2J5dGVzIikpIHsK
KyAgICAgICAgICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2soJnBhZ2VoZWFwTG9jayk7CisgICAgICAg
ICAgICAqdmFsdWUgPSBvdmVyYWxsVGhyZWFkQ2FjaGVzaXplOworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KIAotICB2aXJ0dWFsIGJvb2wgU2V0TnVtZXJpY1Byb3BlcnR5KGNv
bnN0IGNoYXIqIG5hbWUsIHNpemVfdCB2YWx1ZSkgewotICAgIEFTU0VSVChuYW1lICE9IE5VTEwp
OworICAgICAgICBpZiAoIXN0cmNtcChuYW1lLCAidGNtYWxsb2MuY3VycmVudF90b3RhbF90aHJl
YWRfY2FjaGVfYnl0ZXMiKSkgeworICAgICAgICAgICAgVENNYWxsb2NTdGF0cyBzdGF0czsKKyAg
ICAgICAgICAgIEV4dHJhY3RTdGF0cygmc3RhdHMsIDApOworICAgICAgICAgICAgKnZhbHVlID0g
c3RhdHMudGhyZWFkQnl0ZXM7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQog
Ci0gICAgaWYgKHN0cmNtcChuYW1lLCAidGNtYWxsb2MubWF4X3RvdGFsX3RocmVhZF9jYWNoZV9i
eXRlcyIpID09IDApIHsKLSAgICAgIC8vIENsaXAgdGhlIHZhbHVlIHRvIGEgcmVhc29uYWJsZSBy
YW5nZQotICAgICAgaWYgKHZhbHVlIDwga01pblRocmVhZENhY2hlU2l6ZSkgdmFsdWUgPSBrTWlu
VGhyZWFkQ2FjaGVTaXplOwotICAgICAgaWYgKHZhbHVlID4gKDE8PDMwKSkgdmFsdWUgPSAoMTw8
MzApOyAgICAgLy8gTGltaXQgdG8gMUdCCi0KLSAgICAgIFNwaW5Mb2NrSG9sZGVyIGwoJnBhZ2Vo
ZWFwX2xvY2spOwotICAgICAgb3ZlcmFsbF90aHJlYWRfY2FjaGVfc2l6ZSA9IHN0YXRpY19jYXN0
PHNpemVfdD4odmFsdWUpOwotICAgICAgVENNYWxsb2NfVGhyZWFkQ2FjaGU6OlJlY29tcHV0ZVRo
cmVhZENhY2hlU2l6ZSgpOwotICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KKyAgICB2aXJ0dWFsIGJvb2wgU2V0
TnVtZXJpY1Byb3BlcnR5KGNvbnN0IGNoYXIqIG5hbWUsIHNpemVfdCB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChuYW1lKTsKIAotICB2aXJ0dWFsIHZvaWQgTWFya1RocmVhZElkbGUoKSB7
Ci0gICAgVENNYWxsb2NfVGhyZWFkQ2FjaGU6OkJlY29tZUlkbGUoKTsKLSAgfQorICAgICAgICBp
ZiAoIXN0cmNtcChuYW1lLCAidGNtYWxsb2MubWF4X3RvdGFsX3RocmVhZF9jYWNoZV9ieXRlcyIp
KSB7CisgICAgICAgICAgICAvLyBDbGlwIHRoZSB2YWx1ZSB0byBhIHJlYXNvbmFibGUgcmFuZ2UK
KyAgICAgICAgICAgIGlmICh2YWx1ZSA8IGtNaW5UaHJlYWRDYWNoZVNpemUpCisgICAgICAgICAg
ICAgICAgdmFsdWUgPSBrTWluVGhyZWFkQ2FjaGVTaXplOworICAgICAgICAgICAgaWYgKHZhbHVl
ID4gKDEgPDwgMzApKQorICAgICAgICAgICAgICAgIHZhbHVlID0gKDEgPDwgMzApOyAvLyBMaW1p
dCB0byAxR0IKKworICAgICAgICAgICAgU3BpbkxvY2tIb2xkZXIgbG9jaygmcGFnZWhlYXBMb2Nr
KTsKKyAgICAgICAgICAgIG92ZXJhbGxUaHJlYWRDYWNoZXNpemUgPSBzdGF0aWNfY2FzdDxzaXpl
X3Q+KHZhbHVlKTsKKyAgICAgICAgICAgIFRDTWFsbG9jVGhyZWFkQ2FjaGU6OlJlY29tcHV0ZVRo
cmVhZENhY2hlU2l6ZSgpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KIAot
ICB2aXJ0dWFsIHZvaWQgUmVsZWFzZUZyZWVNZW1vcnkoKSB7Ci0gICAgU3BpbkxvY2tIb2xkZXIg
aCgmcGFnZWhlYXBfbG9jayk7Ci0gICAgcGFnZWhlYXAtPlJlbGVhc2VGcmVlUGFnZXMoKTsKLSAg
fQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIE1hcmtU
aHJlYWRJZGxlKCkKKyAgICB7CisgICAgICAgIFRDTWFsbG9jVGhyZWFkQ2FjaGU6OkJlY29tZUlk
bGUoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgUmVsZWFzZUZyZWVNZW1vcnkoKQorICAg
IHsKKyAgICAgICAgU3BpbkxvY2tIb2xkZXIgaCgmcGFnZWhlYXBMb2NrKTsKKyAgICAgICAgcGFn
ZWhlYXAtPlJlbGVhc2VGcmVlUGFnZXMoKTsKKyAgICB9CiB9OwogI2VuZGlmCiAKIC8vIFRoZSBj
b25zdHJ1Y3RvciBhbGxvY2F0ZXMgYW4gb2JqZWN0IHRvIGVuc3VyZSB0aGF0IGluaXRpYWxpemF0
aW9uCiAvLyBydW5zIGJlZm9yZSBtYWluKCksIGFuZCB0aGVyZWZvcmUgd2UgZG8gbm90IGhhdmUg
YSBjaGFuY2UgdG8gYmVjb21lCi0vLyBtdWx0aS10aHJlYWRlZCBiZWZvcmUgaW5pdGlhbGl6YXRp
b24uICBXZSBhbHNvIGNyZWF0ZSB0aGUgVFNEIGtleQotLy8gaGVyZS4gIFByZXN1bWFibHkgYnkg
dGhlIHRpbWUgdGhpcyBjb25zdHJ1Y3RvciBydW5zLCBnbGliYyBpcyBpbgorLy8gbXVsdGktdGhy
ZWFkZWQgYmVmb3JlIGluaXRpYWxpemF0aW9uLiBXZSBhbHNvIGNyZWF0ZSB0aGUgVFNEIGtleQor
Ly8gaGVyZS4gUHJlc3VtYWJseSBieSB0aGUgdGltZSB0aGlzIGNvbnN0cnVjdG9yIHJ1bnMsIGds
aWJjIGlzIGluCiAvLyBnb29kIGVub3VnaCBzaGFwZSB0byBoYW5kbGUgcHRocmVhZF9rZXlfY3Jl
YXRlKCkuCiAvLwogLy8gVGhlIGNvbnN0cnVjdG9yIGFsc28gdGFrZXMgdGhlIG9wcG9ydHVuaXR5
IHRvIHRlbGwgU1RMIHRvIHVzZQotLy8gdGNtYWxsb2MuICBXZSB3YW50IHRvIGRvIHRoaXMgZWFy
bHksIGJlZm9yZSBjb25zdHJ1Y3QgdGltZSwgc28KKy8vIHRjbWFsbG9jLiBXZSB3YW50IHRvIGRv
IHRoaXMgZWFybHksIGJlZm9yZSBjb25zdHJ1Y3QgdGltZSwgc28KIC8vIGFsbCB1c2VyIFNUTCBh
bGxvY2F0aW9ucyBnbyB0aHJvdWdoIHRjbWFsbG9jICh3aGljaCB3b3JrcyByZWFsbHkKIC8vIHdl
bGwgZm9yIFNUTCkuCiAvLwpAQCAtMzU5MSw3ICszNjg5LDcgQEAgY2xhc3MgVENNYWxsb2NHdWFy
ZCB7CiAjZW5kaWYKICNlbmRpZgogICAgIGZyZWUobWFsbG9jKDEpKTsKLSAgICBUQ01hbGxvY19U
aHJlYWRDYWNoZTo6SW5pdFRTRCgpOworICAgIFRDTWFsbG9jVGhyZWFkQ2FjaGU6OkluaXRUU0Qo
KTsKICAgICBmcmVlKG1hbGxvYygxKSk7CiAjaWZuZGVmIFdURl9DSEFOR0VTCiAgICAgTWFsbG9j
RXh0ZW5zaW9uOjpSZWdpc3RlcihuZXcgVENNYWxsb2NJbXBsZW1lbnRhdGlvbik7CkBAIC0zNjAx
LDcgKzM2OTksNyBAQCBjbGFzcyBUQ01hbGxvY0d1YXJkIHsKICNpZm5kZWYgV1RGX0NIQU5HRVMK
ICAgflRDTWFsbG9jR3VhcmQoKSB7CiAgICAgY29uc3QgY2hhciogZW52ID0gZ2V0ZW52KCJNQUxM
T0NTVEFUUyIpOwotICAgIGlmIChlbnYgIT0gTlVMTCkgeworICAgIGlmIChlbnYpIHsKICAgICAg
IGludCBsZXZlbCA9IGF0b2koZW52KTsKICAgICAgIGlmIChsZXZlbCA8IDEpIGxldmVsID0gMTsK
ICAgICAgIFByaW50U3RhdHMobGV2ZWwpOwpAQCAtMzYyNCwxMzYgKzM3MjIsMTM1IEBAIHN0YXRp
YyBUQ01hbGxvY0d1YXJkIG1vZHVsZV9lbnRlcl9leGl0X2gKIAogI2lmbmRlZiBXVEZfQ0hBTkdF
UwogCi1zdGF0aWMgU3BhbiogRG9TYW1wbGVkQWxsb2NhdGlvbihzaXplX3Qgc2l6ZSkgewotCi0g
IC8vIEdyYWIgdGhlIHN0YWNrIHRyYWNlIG91dHNpZGUgdGhlIGhlYXAgbG9jawotICBTdGFja1Ry
YWNlIHRtcDsKLSAgdG1wLmRlcHRoID0gR2V0U3RhY2tUcmFjZSh0bXAuc3RhY2ssIGtNYXhTdGFj
a0RlcHRoLCAxKTsKLSAgdG1wLnNpemUgPSBzaXplOwotCi0gIFNwaW5Mb2NrSG9sZGVyIGgoJnBh
Z2VoZWFwX2xvY2spOwotICAvLyBBbGxvY2F0ZSBzcGFuCi0gIFNwYW4gKnNwYW4gPSBwYWdlaGVh
cC0+TmV3KHBhZ2VzKHNpemUgPT0gMCA/IDEgOiBzaXplKSk7Ci0gIGlmIChzcGFuID09IE5VTEwp
IHsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQorc3RhdGljIFNwYW4qIERvU2FtcGxlZEFsbG9jYXRp
b24oc2l6ZV90IHNpemUpCit7CiAKLSAgLy8gQWxsb2NhdGUgc3RhY2sgdHJhY2UKLSAgU3RhY2tU
cmFjZSAqc3RhY2sgPSBzdGFja3RyYWNlX2FsbG9jYXRvci5OZXcoKTsKLSAgaWYgKHN0YWNrID09
IE5VTEwpIHsKLSAgICAvLyBTYW1wbGluZyBmYWlsZWQgYmVjYXVzZSBvZiBsYWNrIG9mIG1lbW9y
eQotICAgIHJldHVybiBzcGFuOwotICB9CisgICAgLy8gR3JhYiB0aGUgc3RhY2sgdHJhY2Ugb3V0
c2lkZSB0aGUgaGVhcCBsb2NrCisgICAgU3RhY2tUcmFjZSB0bXA7CisgICAgdG1wLmRlcHRoID0g
R2V0U3RhY2tUcmFjZSh0bXAuc3RhY2ssIGtNYXhTdGFja0RlcHRoLCAxKTsKKyAgICB0bXAuc2l6
ZSA9IHNpemU7CisKKyAgICBTcGluTG9ja0hvbGRlciBoKCZwYWdlaGVhcExvY2spOworICAgIC8v
IEFsbG9jYXRlIHNwYW4KKyAgICBTcGFuKiBzcGFuID0gcGFnZWhlYXAtPk5ldyhwYWdlcyghc2l6
ZSA/IDEgOiBzaXplKSk7CisgICAgaWYgKCFzcGFuKQorICAgICAgICByZXR1cm4gMDsKIAotICAq
c3RhY2sgPSB0bXA7Ci0gIHNwYW4tPnNhbXBsZSA9IDE7Ci0gIHNwYW4tPm9iamVjdHMgPSBzdGFj
azsKLSAgRExMX1ByZXBlbmQoJnNhbXBsZWRfb2JqZWN0cywgc3Bhbik7CisgICAgLy8gQWxsb2Nh
dGUgc3RhY2sgdHJhY2UKKyAgICBTdGFja1RyYWNlKiBzdGFjayA9IHN0YWNrdHJhY2VBbGxvY2F0
b3IuTmV3KCk7CisgICAgaWYgKCFzdGFjaykKKyAgICAgICAgLy8gU2FtcGxpbmcgZmFpbGVkIGJl
Y2F1c2Ugb2YgbGFjayBvZiBtZW1vcnkKKyAgICAgICAgcmV0dXJuIHNwYW47CisKKyAgICAqc3Rh
Y2sgPSB0bXA7CisgICAgc3Bhbi0+c2FtcGxlID0gMTsKKyAgICBzcGFuLT5vYmplY3RzID0gc3Rh
Y2s7CisgICAgRExMUHJlcGVuZCgmc2FtcGxlZE9iamVjdHMsIHNwYW4pOwogCi0gIHJldHVybiBz
cGFuOworICAgIHJldHVybiBzcGFuOwogfQogI2VuZGlmCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBD
aGVja0NhY2hlZFNpemVDbGFzcyh2b2lkICpwdHIpIHsKLSAgUGFnZUlEIHAgPSByZWludGVycHJl
dF9jYXN0PHVpbnRwdHJfdD4ocHRyKSA+PiBrUGFnZVNoaWZ0OwotICBzaXplX3QgY2FjaGVkX3Zh
bHVlID0gcGFnZWhlYXAtPkdldFNpemVDbGFzc0lmQ2FjaGVkKHApOwotICByZXR1cm4gY2FjaGVk
X3ZhbHVlID09IDAgfHwKLSAgICAgIGNhY2hlZF92YWx1ZSA9PSBwYWdlaGVhcC0+R2V0RGVzY3Jp
cHRvcihwKS0+c2l6ZWNsYXNzOworICAgIFBhZ2VJRCBwID0gcmVpbnRlcnByZXRfY2FzdDx1aW50
cHRyX3Q+KHB0cikgPj4ga1BhZ2VTaGlmdDsKKyAgICBzaXplX3QgY2FjaGVkVmFsdWUgPSBwYWdl
aGVhcC0+R2V0U2l6ZUNsYXNzSWZDYWNoZWQocCk7CisgICAgcmV0dXJuICFjYWNoZWRWYWx1ZSB8
fCBjYWNoZWRWYWx1ZSA9PSBwYWdlaGVhcC0+R2V0RGVzY3JpcHRvcihwKS0+c2l6ZUNsYXNzOwog
fQogCiBzdGF0aWMgaW5saW5lIHZvaWQqIENoZWNrZWRNYWxsb2NSZXN1bHQodm9pZCAqcmVzdWx0
KQogewotICBBU1NFUlQocmVzdWx0ID09IDAgfHwgQ2hlY2tDYWNoZWRTaXplQ2xhc3MocmVzdWx0
KSk7Ci0gIHJldHVybiByZXN1bHQ7CisgICAgQVNTRVJUKCFyZXN1bHQgfHwgQ2hlY2tDYWNoZWRT
aXplQ2xhc3MocmVzdWx0KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGlu
ZSB2b2lkKiBTcGFuVG9NYWxsb2NSZXN1bHQoU3BhbiAqc3BhbikgewotICBBU1NFUlRfU1BBTl9D
T01NSVRURUQoc3Bhbik7Ci0gIHBhZ2VoZWFwLT5DYWNoZVNpemVDbGFzcyhzcGFuLT5zdGFydCwg
MCk7Ci0gIHJldHVybgotICAgICAgQ2hlY2tlZE1hbGxvY1Jlc3VsdChyZWludGVycHJldF9jYXN0
PHZvaWQqPihzcGFuLT5zdGFydCA8PCBrUGFnZVNoaWZ0KSk7CitzdGF0aWMgaW5saW5lIHZvaWQq
IFNwYW5Ub01hbGxvY1Jlc3VsdChTcGFuKiBzcGFuKQoreworICAgIEFTU0VSVF9TUEFOX0NPTU1J
VFRFRChzcGFuKTsKKyAgICBwYWdlaGVhcC0+Q2FjaGVTaXplQ2xhc3Moc3Bhbi0+c3RhcnQsIDAp
OworICAgIHJldHVybiBDaGVja2VkTWFsbG9jUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KHNwYW4tPnN0YXJ0IDw8IGtQYWdlU2hpZnQpKTsKIH0KIAogI2lmZGVmIFdURl9DSEFOR0VTCiB0
ZW1wbGF0ZSA8Ym9vbCBjcmFzaE9uRmFpbHVyZT4KICNlbmRpZgotc3RhdGljIEFMV0FZU19JTkxJ
TkUgdm9pZCogZG9fbWFsbG9jKHNpemVfdCBzaXplKSB7Ci0gIHZvaWQqIHJldCA9IE5VTEw7Citz
dGF0aWMgQUxXQVlTX0lOTElORSB2b2lkKiBkb01hbGxvYyhzaXplX3Qgc2l6ZSkKK3sKKyAgICB2
b2lkKiByZXQgPSAwOwogCiAjaWZkZWYgV1RGX0NIQU5HRVMKICAgICBBU1NFUlQoIWlzRm9yYmlk
ZGVuKCkpOwogI2VuZGlmCiAKLSAgLy8gVGhlIGZvbGxvd2luZyBjYWxsIGZvcmNlcyBtb2R1bGUg
aW5pdGlhbGl6YXRpb24KLSAgVENNYWxsb2NfVGhyZWFkQ2FjaGUqIGhlYXAgPSBUQ01hbGxvY19U
aHJlYWRDYWNoZTo6R2V0Q2FjaGUoKTsKKyAgICAvLyBUaGUgZm9sbG93aW5nIGNhbGwgZm9yY2Vz
IG1vZHVsZSBpbml0aWFsaXphdGlvbgorICAgIFRDTWFsbG9jVGhyZWFkQ2FjaGUqIGhlYXAgPSBU
Q01hbGxvY1RocmVhZENhY2hlOjpHZXRDYWNoZSgpOwogI2lmbmRlZiBXVEZfQ0hBTkdFUwotICBp
ZiAoKEZMQUdTX3RjbWFsbG9jX3NhbXBsZV9wYXJhbWV0ZXIgPiAwKSAmJiBoZWFwLT5TYW1wbGVB
bGxvY2F0aW9uKHNpemUpKSB7Ci0gICAgU3Bhbiogc3BhbiA9IERvU2FtcGxlZEFsbG9jYXRpb24o
c2l6ZSk7Ci0gICAgaWYgKHNwYW4gIT0gTlVMTCkgewotICAgICAgcmV0ID0gU3BhblRvTWFsbG9j
UmVzdWx0KHNwYW4pOwotICAgIH0KLSAgfSBlbHNlCi0jZW5kaWYKLSAgaWYgKHNpemUgPiBrTWF4
U2l6ZSkgewotICAgIC8vIFVzZSBwYWdlLWxldmVsIGFsbG9jYXRvcgotICAgIFNwaW5Mb2NrSG9s
ZGVyIGgoJnBhZ2VoZWFwX2xvY2spOwotICAgIFNwYW4qIHNwYW4gPSBwYWdlaGVhcC0+TmV3KHBh
Z2VzKHNpemUpKTsKLSAgICBpZiAoc3BhbiAhPSBOVUxMKSB7Ci0gICAgICByZXQgPSBTcGFuVG9N
YWxsb2NSZXN1bHQoc3Bhbik7Ci0gICAgfQotICB9IGVsc2UgewotICAgIC8vIFRoZSBjb21tb24g
Y2FzZSwgYW5kIGFsc28gdGhlIHNpbXBsZXN0LiAgVGhpcyBqdXN0IHBvcHMgdGhlCi0gICAgLy8g
c2l6ZS1hcHByb3ByaWF0ZSBmcmVlbGlzdCwgYWZlciByZXBsZW5pc2hpbmcgaXQgaWYgaXQncyBl
bXB0eS4KLSAgICByZXQgPSBDaGVja2VkTWFsbG9jUmVzdWx0KGhlYXAtPkFsbG9jYXRlKHNpemUp
KTsKLSAgfQotICBpZiAoIXJldCkgeworICAgIGlmICgoRkxBR1NfdGNtYWxsb2Nfc2FtcGxlX3Bh
cmFtZXRlciA+IDApICYmIGhlYXAtPlNhbXBsZUFsbG9jYXRpb24oc2l6ZSkpIHsKKyAgICAgICAg
U3Bhbiogc3BhbiA9IERvU2FtcGxlZEFsbG9jYXRpb24oc2l6ZSk7CisgICAgICAgIGlmIChzcGFu
KQorICAgICAgICAgICAgcmV0ID0gU3BhblRvTWFsbG9jUmVzdWx0KHNwYW4pOworICAgIH0gZWxz
ZQorI2VuZGlmCisgICAgaWYgKHNpemUgPiBrTWF4U2l6ZSkgeworICAgICAgICAvLyBVc2UgcGFn
ZS1sZXZlbCBhbGxvY2F0b3IKKyAgICAgICAgU3BpbkxvY2tIb2xkZXIgaCgmcGFnZWhlYXBMb2Nr
KTsKKyAgICAgICAgU3Bhbiogc3BhbiA9IHBhZ2VoZWFwLT5OZXcocGFnZXMoc2l6ZSkpOworICAg
ICAgICBpZiAoc3BhbikKKyAgICAgICAgICAgIHJldCA9IFNwYW5Ub01hbGxvY1Jlc3VsdChzcGFu
KTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBUaGUgY29tbW9uIGNhc2UsIGFuZCBhbHNvIHRo
ZSBzaW1wbGVzdC4gVGhpcyBqdXN0IHBvcHMgdGhlCisgICAgICAgIC8vIHNpemUtYXBwcm9wcmlh
dGUgZnJlZWxpc3QsIGFmZXIgcmVwbGVuaXNoaW5nIGl0IGlmIGl0J3MgZW1wdHkuCisgICAgICAg
IHJldCA9IENoZWNrZWRNYWxsb2NSZXN1bHQoaGVhcC0+QWxsb2NhdGUoc2l6ZSkpOworICAgIH0K
KyAgICBpZiAoIXJldCkgewogI2lmZGVmIFdURl9DSEFOR0VTCi0gICAgaWYgKGNyYXNoT25GYWls
dXJlKSAvLyBUaGlzIGJyYW5jaCBzaG91bGQgYmUgb3B0aW1pemVkIG91dCBieSB0aGUgY29tcGls
ZXIuCi0gICAgICAgIENSQVNIKCk7CisgICAgICAgIGlmIChjcmFzaE9uRmFpbHVyZSkgLy8gVGhp
cyBicmFuY2ggc2hvdWxkIGJlIG9wdGltaXplZCBvdXQgYnkgdGhlIGNvbXBpbGVyLgorICAgICAg
ICAgICAgQ1JBU0goKTsKICNlbHNlCi0gICAgZXJybm8gPSBFTk9NRU07CisgICAgICAgIGVycm5v
ID0gRU5PTUVNOwogI2VuZGlmCi0gIH0KLSAgcmV0dXJuIHJldDsKKyAgICB9CisgICAgcmV0dXJu
IHJldDsKIH0KIAotc3RhdGljIEFMV0FZU19JTkxJTkUgdm9pZCBkb19mcmVlKHZvaWQqIHB0cikg
ewotICBpZiAocHRyID09IE5VTEwpIHJldHVybjsKLSAgQVNTRVJUKHBhZ2VoZWFwICE9IE5VTEwp
OyAgLy8gU2hvdWxkIG5vdCBjYWxsIGZyZWUoKSBiZWZvcmUgbWFsbG9jKCkKLSAgY29uc3QgUGFn
ZUlEIHAgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocHRyKSA+PiBrUGFnZVNoaWZ0Owot
ICBTcGFuKiBzcGFuID0gTlVMTDsKLSAgc2l6ZV90IGNsID0gcGFnZWhlYXAtPkdldFNpemVDbGFz
c0lmQ2FjaGVkKHApOwotCi0gIGlmIChjbCA9PSAwKSB7Ci0gICAgc3BhbiA9IHBhZ2VoZWFwLT5H
ZXREZXNjcmlwdG9yKHApOwotICAgIGNsID0gc3Bhbi0+c2l6ZWNsYXNzOwotICAgIHBhZ2VoZWFw
LT5DYWNoZVNpemVDbGFzcyhwLCBjbCk7Ci0gIH0KLSAgaWYgKGNsICE9IDApIHsKK3N0YXRpYyBB
TFdBWVNfSU5MSU5FIHZvaWQgZG9GcmVlKHZvaWQqIHB0cikKK3sKKyAgICBpZiAoIXB0cikKKyAg
ICAgICAgcmV0dXJuOworICAgIEFTU0VSVChwYWdlaGVhcCk7IC8vIFNob3VsZCBub3QgY2FsbCBm
cmVlKCkgYmVmb3JlIG1hbGxvYygpCisgICAgY29uc3QgUGFnZUlEIHAgPSByZWludGVycHJldF9j
YXN0PHVpbnRwdHJfdD4ocHRyKSA+PiBrUGFnZVNoaWZ0OworICAgIFNwYW4qIHNwYW4gPSAwOwor
ICAgIHNpemVfdCBjbCA9IHBhZ2VoZWFwLT5HZXRTaXplQ2xhc3NJZkNhY2hlZChwKTsKKworICAg
IGlmICghY2wpIHsKKyAgICAgICAgc3BhbiA9IHBhZ2VoZWFwLT5HZXREZXNjcmlwdG9yKHApOwor
ICAgICAgICBjbCA9IHNwYW4tPnNpemVDbGFzczsKKyAgICAgICAgcGFnZWhlYXAtPkNhY2hlU2l6
ZUNsYXNzKHAsIGNsKTsKKyAgICB9CisgICAgaWYgKGNsKSB7CiAjaWZuZGVmIE5PX1RDTUFMTE9D
X1NBTVBMRVMKLSAgICBBU1NFUlQoIXBhZ2VoZWFwLT5HZXREZXNjcmlwdG9yKHApLT5zYW1wbGUp
OworICAgICAgICBBU1NFUlQoIXBhZ2VoZWFwLT5HZXREZXNjcmlwdG9yKHApLT5zYW1wbGUpOwog
I2VuZGlmCi0gICAgVENNYWxsb2NfVGhyZWFkQ2FjaGUqIGhlYXAgPSBUQ01hbGxvY19UaHJlYWRD
YWNoZTo6R2V0Q2FjaGVJZlByZXNlbnQoKTsKLSAgICBpZiAoaGVhcCAhPSBOVUxMKSB7Ci0gICAg
ICBoZWFwLT5EZWFsbG9jYXRlKHB0ciwgY2wpOworICAgICAgICBUQ01hbGxvY1RocmVhZENhY2hl
KiBoZWFwID0gVENNYWxsb2NUaHJlYWRDYWNoZTo6R2V0Q2FjaGVJZlByZXNlbnQoKTsKKyAgICAg
ICAgaWYgKGhlYXApCisgICAgICAgICAgICBoZWFwLT5EZWFsbG9jYXRlKHB0ciwgY2wpOworICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8vIERlbGV0ZSBkaXJlY3RseSBpbnRvIGNlbnRyYWwg
Y2FjaGUKKyAgICAgICAgICAgIFNMTFNldE5leHQocHRyLCAwKTsKKyAgICAgICAgICAgIGNlbnRy
YWxDYWNoZVtjbF0uSW5zZXJ0UmFuZ2UocHRyLCBwdHIsIDEpOworICAgICAgICB9CiAgICAgfSBl
bHNlIHsKLSAgICAgIC8vIERlbGV0ZSBkaXJlY3RseSBpbnRvIGNlbnRyYWwgY2FjaGUKLSAgICAg
IFNMTF9TZXROZXh0KHB0ciwgTlVMTCk7Ci0gICAgICBjZW50cmFsX2NhY2hlW2NsXS5JbnNlcnRS
YW5nZShwdHIsIHB0ciwgMSk7Ci0gICAgfQotICB9IGVsc2UgewotICAgIFNwaW5Mb2NrSG9sZGVy
IGgoJnBhZ2VoZWFwX2xvY2spOwotICAgIEFTU0VSVChyZWludGVycHJldF9jYXN0PHVpbnRwdHJf
dD4ocHRyKSAlIGtQYWdlU2l6ZSA9PSAwKTsKLSAgICBBU1NFUlQoc3BhbiAhPSBOVUxMICYmIHNw
YW4tPnN0YXJ0ID09IHApOworICAgICAgICBTcGluTG9ja0hvbGRlciBoKCZwYWdlaGVhcExvY2sp
OworICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocHRyKSAlIGtQ
YWdlU2l6ZSkpOworICAgICAgICBBU1NFUlQoc3BhbiAmJiBzcGFuLT5zdGFydCA9PSBwKTsKICNp
Zm5kZWYgTk9fVENNQUxMT0NfU0FNUExFUwotICAgIGlmIChzcGFuLT5zYW1wbGUpIHsKLSAgICAg
IERMTF9SZW1vdmUoc3Bhbik7Ci0gICAgICBzdGFja3RyYWNlX2FsbG9jYXRvci5EZWxldGUocmVp
bnRlcnByZXRfY2FzdDxTdGFja1RyYWNlKj4oc3Bhbi0+b2JqZWN0cykpOwotICAgICAgc3Bhbi0+
b2JqZWN0cyA9IE5VTEw7Ci0gICAgfQorICAgICAgICBpZiAoc3Bhbi0+c2FtcGxlKSB7CisgICAg
ICAgICAgICBETExSZW1vdmUoc3Bhbik7CisgICAgICAgICAgICBzdGFja3RyYWNlQWxsb2NhdG9y
LkRlbGV0ZShyZWludGVycHJldF9jYXN0PFN0YWNrVHJhY2UqPihzcGFuLT5vYmplY3RzKSk7Cisg
ICAgICAgICAgICBzcGFuLT5vYmplY3RzID0gMDsKKyAgICAgICAgfQogI2VuZGlmCi0gICAgcGFn
ZWhlYXAtPkRlbGV0ZShzcGFuKTsKLSAgfQorICAgICAgICBwYWdlaGVhcC0+RGVsZXRlKHNwYW4p
OworICAgIH0KIH0KIAogI2lmbmRlZiBXVEZfQ0hBTkdFUwpAQCAtMzc2MSwxMDggKzM4NTgsMTEz
IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQgZG9fZnJlZSh2b2lkKgogLy8KIC8vIE5vdGU6
IHRoaXMgY29kZSBjYW4gYmUgc2xvdywgYW5kIGNhbiBzaWduaWZpY2FudGx5IGZyYWdtZW50IG1l
bW9yeS4KIC8vIFRoZSBleHBlY3RhdGlvbiBpcyB0aGF0IG1lbWFsaWduL3Bvc2l4X21lbWFsaWdu
L3ZhbGxvYy9wdmFsbG9jIHdpbGwKLS8vIG5vdCBiZSBpbnZva2VkIHZlcnkgb2Z0ZW4uICBUaGlz
IHJlcXVpcmVtZW50IHNpbXBsaWZpZXMgb3VyCisvLyBub3QgYmUgaW52b2tlZCB2ZXJ5IG9mdGVu
LiBUaGlzIHJlcXVpcmVtZW50IHNpbXBsaWZpZXMgb3VyCiAvLyBpbXBsZW1lbnRhdGlvbiBhbmQg
YWxsb3dzIHVzIHRvIHR1bmUgZm9yIGV4cGVjdGVkIGFsbG9jYXRpb24KIC8vIHBhdHRlcm5zLgot
c3RhdGljIHZvaWQqIGRvX21lbWFsaWduKHNpemVfdCBhbGlnbiwgc2l6ZV90IHNpemUpIHsKLSAg
QVNTRVJUKChhbGlnbiAmIChhbGlnbiAtIDEpKSA9PSAwKTsKLSAgQVNTRVJUKGFsaWduID4gMCk7
Ci0gIGlmIChwYWdlaGVhcCA9PSBOVUxMKSBUQ01hbGxvY19UaHJlYWRDYWNoZTo6SW5pdE1vZHVs
ZSgpOwotCi0gIC8vIEFsbG9jYXRlIGF0IGxlYXN0IG9uZSBieXRlIHRvIGF2b2lkIGJvdW5kYXJ5
IGNvbmRpdGlvbnMgYmVsb3cKLSAgaWYgKHNpemUgPT0gMCkgc2l6ZSA9IDE7Ci0KLSAgaWYgKHNp
emUgPD0ga01heFNpemUgJiYgYWxpZ24gPCBrUGFnZVNpemUpIHsKLSAgICAvLyBTZWFyY2ggdGhy
b3VnaCBhY2NlcHRhYmxlIHNpemUgY2xhc3NlcyBsb29raW5nIGZvciBvbmUgd2l0aAotICAgIC8v
IGVub3VnaCBhbGlnbm1lbnQuICBUaGlzIGRlcGVuZHMgb24gdGhlIGZhY3QgdGhhdAotICAgIC8v
IEluaXRTaXplQ2xhc3NlcygpIGN1cnJlbnRseSBwcm9kdWNlcyBzZXZlcmFsIHNpemUgY2xhc3Nl
cyB0aGF0Ci0gICAgLy8gYXJlIGFsaWduZWQgYXQgcG93ZXJzIG9mIHR3by4gIFdlIHdpbGwgd2Fz
dGUgdGltZSBhbmQgc3BhY2UgaWYKLSAgICAvLyB3ZSBtaXNzIGluIHRoZSBzaXplIGNsYXNzIGFy
cmF5LCBidXQgdGhhdCBpcyBkZWVtZWQgYWNjZXB0YWJsZQotICAgIC8vIHNpbmNlIG1lbWFsaWdu
KCkgc2hvdWxkIGJlIHVzZWQgcmFyZWx5LgotICAgIHNpemVfdCBjbCA9IFNpemVDbGFzcyhzaXpl
KTsKLSAgICB3aGlsZSAoY2wgPCBrTnVtQ2xhc3NlcyAmJiAoKGNsYXNzX3RvX3NpemVbY2xdICYg
KGFsaWduIC0gMSkpICE9IDApKSB7Ci0gICAgICBjbCsrOwotICAgIH0KLSAgICBpZiAoY2wgPCBr
TnVtQ2xhc3NlcykgewotICAgICAgVENNYWxsb2NfVGhyZWFkQ2FjaGUqIGhlYXAgPSBUQ01hbGxv
Y19UaHJlYWRDYWNoZTo6R2V0Q2FjaGUoKTsKLSAgICAgIHJldHVybiBDaGVja2VkTWFsbG9jUmVz
dWx0KGhlYXAtPkFsbG9jYXRlKGNsYXNzX3RvX3NpemVbY2xdKSk7CitzdGF0aWMgdm9pZCogZG9N
ZW1hbGlnbihzaXplX3QgYWxpZ24sIHNpemVfdCBzaXplKQoreworICAgIEFTU0VSVCghKGFsaWdu
ICYgKGFsaWduIC0gMSkpKTsKKyAgICBBU1NFUlQoYWxpZ24gPiAwKTsKKyAgICBpZiAoIXBhZ2Vo
ZWFwKQorICAgICAgICBUQ01hbGxvY1RocmVhZENhY2hlOjpJbml0TW9kdWxlKCk7CisKKyAgICAv
LyBBbGxvY2F0ZSBhdCBsZWFzdCBvbmUgYnl0ZSB0byBhdm9pZCBib3VuZGFyeSBjb25kaXRpb25z
IGJlbG93CisgICAgaWYgKCFzaXplKQorICAgICAgICBzaXplID0gMTsKKworICAgIGlmIChzaXpl
IDw9IGtNYXhTaXplICYmIGFsaWduIDwga1BhZ2VTaXplKSB7CisgICAgICAgIC8vIFNlYXJjaCB0
aHJvdWdoIGFjY2VwdGFibGUgc2l6ZSBjbGFzc2VzIGxvb2tpbmcgZm9yIG9uZSB3aXRoCisgICAg
ICAgIC8vIGVub3VnaCBhbGlnbm1lbnQuIFRoaXMgZGVwZW5kcyBvbiB0aGUgZmFjdCB0aGF0Cisg
ICAgICAgIC8vIEluaXRTaXplQ2xhc3NlcygpIGN1cnJlbnRseSBwcm9kdWNlcyBzZXZlcmFsIHNp
emUgY2xhc3NlcyB0aGF0CisgICAgICAgIC8vIGFyZSBhbGlnbmVkIGF0IHBvd2VycyBvZiB0d28u
IFdlIHdpbGwgd2FzdGUgdGltZSBhbmQgc3BhY2UgaWYKKyAgICAgICAgLy8gd2UgbWlzcyBpbiB0
aGUgc2l6ZSBjbGFzcyBhcnJheSwgYnV0IHRoYXQgaXMgZGVlbWVkIGFjY2VwdGFibGUKKyAgICAg
ICAgLy8gc2luY2UgbWVtYWxpZ24oKSBzaG91bGQgYmUgdXNlZCByYXJlbHkuCisgICAgICAgIHNp
emVfdCBjbCA9IFNpemVDbGFzcyhzaXplKTsKKyAgICAgICAgd2hpbGUgKGNsIDwga051bUNsYXNz
ZXMgJiYgKGNsYXNzVG9zaXplW2NsXSAmIChhbGlnbiAtIDEpKSkKKyAgICAgICAgICAgIGNsKys7
CisgICAgICAgIGlmIChjbCA8IGtOdW1DbGFzc2VzKSB7CisgICAgICAgICAgICBUQ01hbGxvY1Ro
cmVhZENhY2hlKiBoZWFwID0gVENNYWxsb2NUaHJlYWRDYWNoZTo6R2V0Q2FjaGUoKTsKKyAgICAg
ICAgICAgIHJldHVybiBDaGVja2VkTWFsbG9jUmVzdWx0KGhlYXAtPkFsbG9jYXRlKGNsYXNzVG9z
aXplW2NsXSkpOworICAgICAgICB9CiAgICAgfQotICB9CiAKLSAgLy8gV2Ugd2lsbCBhbGxvY2F0
ZSBkaXJlY3RseSBmcm9tIHRoZSBwYWdlIGhlYXAKLSAgU3BpbkxvY2tIb2xkZXIgaCgmcGFnZWhl
YXBfbG9jayk7CisgICAgLy8gV2Ugd2lsbCBhbGxvY2F0ZSBkaXJlY3RseSBmcm9tIHRoZSBwYWdl
IGhlYXAKKyAgICBTcGluTG9ja0hvbGRlciBoKCZwYWdlaGVhcExvY2spOwogCi0gIGlmIChhbGln
biA8PSBrUGFnZVNpemUpIHsKLSAgICAvLyBBbnkgcGFnZS1sZXZlbCBhbGxvY2F0aW9uIHdpbGwg
YmUgZmluZQotICAgIC8vIFRPRE86IFdlIGNvdWxkIHB1dCB0aGUgcmVzdCBvZiB0aGlzIHBhZ2Ug
aW4gdGhlIGFwcHJvcHJpYXRlCi0gICAgLy8gVE9ETzogY2FjaGUgYnV0IGl0IGRvZXMgbm90IHNl
ZW0gd29ydGggaXQuCi0gICAgU3Bhbiogc3BhbiA9IHBhZ2VoZWFwLT5OZXcocGFnZXMoc2l6ZSkp
OwotICAgIHJldHVybiBzcGFuID09IE5VTEwgPyBOVUxMIDogU3BhblRvTWFsbG9jUmVzdWx0KHNw
YW4pOwotICB9CisgICAgaWYgKGFsaWduIDw9IGtQYWdlU2l6ZSkgeworICAgICAgICAvLyBBbnkg
cGFnZS1sZXZlbCBhbGxvY2F0aW9uIHdpbGwgYmUgZmluZQorICAgICAgICAvLyBUT0RPOiBXZSBj
b3VsZCBwdXQgdGhlIHJlc3Qgb2YgdGhpcyBwYWdlIGluIHRoZSBhcHByb3ByaWF0ZQorICAgICAg
ICAvLyBUT0RPOiBjYWNoZSBidXQgaXQgZG9lcyBub3Qgc2VlbSB3b3J0aCBpdC4KKyAgICAgICAg
U3Bhbiogc3BhbiA9IHBhZ2VoZWFwLT5OZXcocGFnZXMoc2l6ZSkpOworICAgICAgICByZXR1cm4g
IXNwYW4gPyAwIDogU3BhblRvTWFsbG9jUmVzdWx0KHNwYW4pOworICAgIH0KIAotICAvLyBBbGxv
Y2F0ZSBleHRyYSBwYWdlcyBhbmQgY2FydmUgb2ZmIGFuIGFsaWduZWQgcG9ydGlvbgotICBjb25z
dCBMZW5ndGggYWxsb2MgPSBwYWdlcyhzaXplICsgYWxpZ24pOwotICBTcGFuKiBzcGFuID0gcGFn
ZWhlYXAtPk5ldyhhbGxvYyk7Ci0gIGlmIChzcGFuID09IE5VTEwpIHJldHVybiBOVUxMOwotCi0g
IC8vIFNraXAgc3RhcnRpbmcgcG9ydGlvbiBzbyB0aGF0IHdlIGVuZCB1cCBhbGlnbmVkCi0gIExl
bmd0aCBza2lwID0gMDsKLSAgd2hpbGUgKCgoKHNwYW4tPnN0YXJ0K3NraXApIDw8IGtQYWdlU2hp
ZnQpICYgKGFsaWduIC0gMSkpICE9IDApIHsKLSAgICBza2lwKys7Ci0gIH0KLSAgQVNTRVJUKHNr
aXAgPCBhbGxvYyk7Ci0gIGlmIChza2lwID4gMCkgewotICAgIFNwYW4qIHJlc3QgPSBwYWdlaGVh
cC0+U3BsaXQoc3Bhbiwgc2tpcCk7Ci0gICAgcGFnZWhlYXAtPkRlbGV0ZShzcGFuKTsKLSAgICBz
cGFuID0gcmVzdDsKLSAgfQorICAgIC8vIEFsbG9jYXRlIGV4dHJhIHBhZ2VzIGFuZCBjYXJ2ZSBv
ZmYgYW4gYWxpZ25lZCBwb3J0aW9uCisgICAgY29uc3QgTGVuZ3RoIGFsbG9jID0gcGFnZXMoc2l6
ZSArIGFsaWduKTsKKyAgICBTcGFuKiBzcGFuID0gcGFnZWhlYXAtPk5ldyhhbGxvYyk7CisgICAg
aWYgKCFzcGFuKQorICAgICAgICByZXR1cm4gMDsKIAotICAvLyBTa2lwIHRyYWlsaW5nIHBvcnRp
b24gdGhhdCB3ZSBkbyBub3QgbmVlZCB0byByZXR1cm4KLSAgY29uc3QgTGVuZ3RoIG5lZWRlZCA9
IHBhZ2VzKHNpemUpOwotICBBU1NFUlQoc3Bhbi0+bGVuZ3RoID49IG5lZWRlZCk7Ci0gIGlmIChz
cGFuLT5sZW5ndGggPiBuZWVkZWQpIHsKLSAgICBTcGFuKiB0cmFpbGVyID0gcGFnZWhlYXAtPlNw
bGl0KHNwYW4sIG5lZWRlZCk7Ci0gICAgcGFnZWhlYXAtPkRlbGV0ZSh0cmFpbGVyKTsKLSAgfQot
ICByZXR1cm4gU3BhblRvTWFsbG9jUmVzdWx0KHNwYW4pOworICAgIC8vIFNraXAgc3RhcnRpbmcg
cG9ydGlvbiBzbyB0aGF0IHdlIGVuZCB1cCBhbGlnbmVkCisgICAgTGVuZ3RoIHNraXAgPSAwOwor
ICAgIHdoaWxlICgoKHNwYW4tPnN0YXJ0K3NraXApIDw8IGtQYWdlU2hpZnQpICYgKGFsaWduIC0g
MSkpCisgICAgICAgIHNraXArKzsKKyAgICBBU1NFUlQoc2tpcCA8IGFsbG9jKTsKKyAgICBpZiAo
c2tpcCA+IDApIHsKKyAgICAgICAgU3BhbiogcmVzdCA9IHBhZ2VoZWFwLT5TcGxpdChzcGFuLCBz
a2lwKTsKKyAgICAgICAgcGFnZWhlYXAtPkRlbGV0ZShzcGFuKTsKKyAgICAgICAgc3BhbiA9IHJl
c3Q7CisgICAgfQorCisgICAgLy8gU2tpcCB0cmFpbGluZyBwb3J0aW9uIHRoYXQgd2UgZG8gbm90
IG5lZWQgdG8gcmV0dXJuCisgICAgY29uc3QgTGVuZ3RoIG5lZWRlZCA9IHBhZ2VzKHNpemUpOwor
ICAgIEFTU0VSVChzcGFuLT5sZW5ndGggPj0gbmVlZGVkKTsKKyAgICBpZiAoc3Bhbi0+bGVuZ3Ro
ID4gbmVlZGVkKSB7CisgICAgICAgIFNwYW4qIHRyYWlsZXIgPSBwYWdlaGVhcC0+U3BsaXQoc3Bh
biwgbmVlZGVkKTsKKyAgICAgICAgcGFnZWhlYXAtPkRlbGV0ZSh0cmFpbGVyKTsKKyAgICB9Cisg
ICAgcmV0dXJuIFNwYW5Ub01hbGxvY1Jlc3VsdChzcGFuKTsKIH0KICNlbmRpZgogCiAvLyBIZWxw
ZXJzIGZvciB1c2UgYnkgZXhwb3J0ZWQgcm91dGluZXMgYmVsb3c6CiAKICNpZm5kZWYgV1RGX0NI
QU5HRVMKLXN0YXRpYyBpbmxpbmUgdm9pZCBkb19tYWxsb2Nfc3RhdHMoKSB7Ci0gIFByaW50U3Rh
dHMoMSk7CitzdGF0aWMgaW5saW5lIHZvaWQgZG9NYWxsb2NTdGF0cygpCit7CisgICAgUHJpbnRT
dGF0cygxKTsKIH0KICNlbmRpZgogCi1zdGF0aWMgaW5saW5lIGludCBkb19tYWxsb3B0KGludCwg
aW50KSB7Ci0gIHJldHVybiAxOyAgICAgLy8gSW5kaWNhdGVzIGVycm9yCitzdGF0aWMgaW5saW5l
IGludCBkb01hbGxvcHQoaW50LCBpbnQpCit7CisgICAgcmV0dXJuIDE7IC8vIEluZGljYXRlcyBl
cnJvcgogfQogCi0jaWZkZWYgSEFWRV9TVFJVQ1RfTUFMTElORk8gIC8vIG1hbGxpbmZvIGlzbid0
IGRlZmluZWQgb24gZnJlZWJzZCwgZm9yIGluc3RhbmNlCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBt
YWxsaW5mbyBkb19tYWxsaW5mbygpIHsKLSAgVENNYWxsb2NTdGF0cyBzdGF0czsKLSAgRXh0cmFj
dFN0YXRzKCZzdGF0cywgTlVMTCk7Ci0KLSAgLy8gSnVzdCBzb21lIG9mIHRoZSBmaWVsZHMgYXJl
IGZpbGxlZCBpbi4KLSAgc3RydWN0IG1hbGxpbmZvIGluZm87Ci0gIG1lbXNldCgmaW5mbywgMCwg
c2l6ZW9mKGluZm8pKTsKLQotICAvLyBVbmZvcnR1bmF0ZWx5LCB0aGUgc3RydWN0IGNvbnRhaW5z
ICJpbnQiIGZpZWxkLCBzbyBzb21lIG9mIHRoZQotICAvLyBzaXplIHZhbHVlcyB3aWxsIGJlIHRy
dW5jYXRlZC4KLSAgaW5mby5hcmVuYSAgICAgPSBzdGF0aWNfY2FzdDxpbnQ+KHN0YXRzLnN5c3Rl
bV9ieXRlcyk7Ci0gIGluZm8uZnNtYmxrcyAgID0gc3RhdGljX2Nhc3Q8aW50PihzdGF0cy50aHJl
YWRfYnl0ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgc3RhdHMuY2Vu
dHJhbF9ieXRlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBzdGF0cy50
cmFuc2Zlcl9ieXRlcyk7Ci0gIGluZm8uZm9yZGJsa3MgID0gc3RhdGljX2Nhc3Q8aW50PihzdGF0
cy5wYWdlaGVhcF9ieXRlcyk7Ci0gIGluZm8udW9yZGJsa3MgID0gc3RhdGljX2Nhc3Q8aW50Pihz
dGF0cy5zeXN0ZW1fYnl0ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0g
c3RhdHMudGhyZWFkX2J5dGVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAt
IHN0YXRzLmNlbnRyYWxfYnl0ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC0gc3RhdHMudHJhbnNmZXJfYnl0ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC0gc3RhdHMucGFnZWhlYXBfYnl0ZXMpOworI2lmZGVmIEhBVkVfU1RSVUNUX01BTExJTkZP
IC8vIG1hbGxpbmZvIGlzbid0IGRlZmluZWQgb24gZnJlZWJzZCwgZm9yIGluc3RhbmNlCitzdGF0
aWMgaW5saW5lIHN0cnVjdCBtYWxsaW5mbyBkb01hbGxpbmZvKCkKK3sKKyAgICBUQ01hbGxvY1N0
YXRzIHN0YXRzOworICAgIEV4dHJhY3RTdGF0cygmc3RhdHMsIDApOworCisgICAgLy8gSnVzdCBz
b21lIG9mIHRoZSBmaWVsZHMgYXJlIGZpbGxlZCBpbi4KKyAgICBzdHJ1Y3QgbWFsbGluZm8gaW5m
bzsKKyAgICBtZW1zZXQoJmluZm8sIDAsIHNpemVvZihpbmZvKSk7CisKKyAgICAvLyBVbmZvcnR1
bmF0ZWx5LCB0aGUgc3RydWN0IGNvbnRhaW5zICJpbnQiIGZpZWxkLCBzbyBzb21lIG9mIHRoZQor
ICAgIC8vIHNpemUgdmFsdWVzIHdpbGwgYmUgdHJ1bmNhdGVkLgorICAgIGluZm8uYXJlbmEgICAg
ID0gc3RhdGljX2Nhc3Q8aW50PihzdGF0cy5zeXN0ZW1CeXRlcyk7CisgICAgaW5mby5mc21ibGtz
ICAgPSBzdGF0aWNfY2FzdDxpbnQ+KHN0YXRzLnRocmVhZEJ5dGVzCisgICAgICAgICsgc3RhdHMu
Y2VudHJhbEJ5dGVzCisgICAgICAgICsgc3RhdHMudHJhbnNmZXJCeXRlcyk7CisgICAgaW5mby5m
b3JkYmxrcyAgPSBzdGF0aWNfY2FzdDxpbnQ+KHN0YXRzLnBhZ2VoZWFwQnl0ZXMpOworICAgIGlu
Zm8udW9yZGJsa3MgID0gc3RhdGljX2Nhc3Q8aW50PihzdGF0cy5zeXN0ZW1CeXRlcworICAgICAg
ICAtIHN0YXRzLnRocmVhZEJ5dGVzCisgICAgICAgIC0gc3RhdHMuY2VudHJhbEJ5dGVzCisgICAg
ICAgIC0gc3RhdHMudHJhbnNmZXJCeXRlcworICAgICAgICAtIHN0YXRzLnBhZ2VoZWFwQnl0ZXMp
OwogCi0gIHJldHVybiBpbmZvOworICAgIHJldHVybiBpbmZvOwogfQogI2VuZGlmCiAKQEAgLTM4
NzgsNyArMzk4MCw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IG1hbGxpbmZvIGRvX21hbGxpbmYK
ICNpZm5kZWYgV1RGX0NIQU5HRVMKIGV4dGVybiAiQyIgCiAjZWxzZQotI2RlZmluZSBkb19tYWxs
b2MgZG9fbWFsbG9jPGNyYXNoT25GYWlsdXJlPgorI2RlZmluZSBkb01hbGxvYyBkb01hbGxvYzxj
cmFzaE9uRmFpbHVyZT4KIAogdGVtcGxhdGUgPGJvb2wgY3Jhc2hPbkZhaWx1cmU+CiBBTFdBWVNf
SU5MSU5FIHZvaWQqIG1hbGxvYyhzaXplX3QpOwpAQCAtMzkwMCw3ICs0MDAyLDcgQEAgdm9pZCog
bWFsbG9jKHNpemVfdCBzaXplKSB7CiAjaWYgRU5BQkxFKFdURl9NQUxMT0NfVkFMSURBVElPTikK
ICAgICBpZiAoc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSAtIEludGVybmFsOjpW
YWxpZGF0aW9uQnVmZmVyU2l6ZSA8PSBzaXplKSAgLy8gSWYgb3ZlcmZsb3cgd291bGQgb2NjdXIu
Li4KICAgICAgICAgcmV0dXJuIDA7Ci0gICAgdm9pZCogcmVzdWx0ID0gZG9fbWFsbG9jKHNpemUg
KyBJbnRlcm5hbDo6VmFsaWRhdGlvbkJ1ZmZlclNpemUpOworICAgIHZvaWQqIHJlc3VsdCA9IGRv
TWFsbG9jKHNpemUgKyBJbnRlcm5hbDo6VmFsaWRhdGlvbkJ1ZmZlclNpemUpOwogICAgIGlmICgh
cmVzdWx0KQogICAgICAgICByZXR1cm4gMDsKIApAQCAtMzkxMiw3ICs0MDE0LDcgQEAgdm9pZCog
bWFsbG9jKHNpemVfdCBzaXplKSB7CiAgICAgKkludGVybmFsOjpmYXN0TWFsbG9jVmFsaWRhdGlv
blN1ZmZpeChyZXN1bHQpID0gSW50ZXJuYWw6OlZhbGlkYXRpb25TdWZmaXg7CiAgICAgZmFzdE1h
bGxvY1ZhbGlkYXRlKHJlc3VsdCk7CiAjZWxzZQotICAgIHZvaWQqIHJlc3VsdCA9IGRvX21hbGxv
YyhzaXplKTsKKyAgICB2b2lkKiByZXN1bHQgPSBkb01hbGxvYyhzaXplKTsKICNlbmRpZgogCiAj
aWZuZGVmIFdURl9DSEFOR0VTCkBAIC0zOTM2LDkgKzQwMzgsOSBAQCB2b2lkIGZyZWUodm9pZCog
cHRyKSB7CiAgICAgZmFzdE1hbGxvY1ZhbGlkYXRlKHB0cik7CiAgICAgSW50ZXJuYWw6OlZhbGlk
YXRpb25IZWFkZXIqIGhlYWRlciA9IEludGVybmFsOjpmYXN0TWFsbG9jVmFsaWRhdGlvbkhlYWRl
cihwdHIpOwogICAgIG1lbXNldChwdHIsIDB4Q0MsIGhlYWRlci0+bV9zaXplKTsKLSAgICBkb19m
cmVlKGhlYWRlcik7CisgICAgZG9GcmVlKGhlYWRlcik7CiAjZWxzZQotICAgIGRvX2ZyZWUocHRy
KTsKKyAgICBkb0ZyZWUocHRyKTsKICNlbmRpZgogfQogCkBAIC0zOTQ4LDE4ICs0MDUwLDE4IEBA
IGV4dGVybiAiQyIKIHRlbXBsYXRlIDxib29sIGNyYXNoT25GYWlsdXJlPgogQUxXQVlTX0lOTElO
RSB2b2lkKiBjYWxsb2Moc2l6ZV90LCBzaXplX3QpOwogCi12b2lkKiBmYXN0Q2FsbG9jKHNpemVf
dCBuLCBzaXplX3QgZWxlbV9zaXplKQordm9pZCogZmFzdENhbGxvYyhzaXplX3Qgbiwgc2l6ZV90
IGVsZW1TaXplKQogewotICAgIHZvaWQqIHJlc3VsdCA9IGNhbGxvYzx0cnVlPihuLCBlbGVtX3Np
emUpOworICAgIHZvaWQqIHJlc3VsdCA9IGNhbGxvYzx0cnVlPihuLCBlbGVtU2l6ZSk7CiAjaWYg
RU5BQkxFKFdURl9NQUxMT0NfVkFMSURBVElPTikKICAgICBmYXN0TWFsbG9jVmFsaWRhdGUocmVz
dWx0KTsKICNlbmRpZgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVRyeU1hbGxvY1JldHVyblZh
bHVlIHRyeUZhc3RDYWxsb2Moc2l6ZV90IG4sIHNpemVfdCBlbGVtX3NpemUpCitUcnlNYWxsb2NS
ZXR1cm5WYWx1ZSB0cnlGYXN0Q2FsbG9jKHNpemVfdCBuLCBzaXplX3QgZWxlbVNpemUpCiB7Ci0g
ICAgdm9pZCogcmVzdWx0ID0gY2FsbG9jPGZhbHNlPihuLCBlbGVtX3NpemUpOworICAgIHZvaWQq
IHJlc3VsdCA9IGNhbGxvYzxmYWxzZT4obiwgZWxlbVNpemUpOwogI2lmIEVOQUJMRShXVEZfTUFM
TE9DX1ZBTElEQVRJT04pCiAgICAgZmFzdE1hbGxvY1ZhbGlkYXRlKHJlc3VsdCk7CiAjZW5kaWYK
QEAgLTM5NjksMTIgKzQwNzEsMTMgQEAgVHJ5TWFsbG9jUmV0dXJuVmFsdWUgdHJ5RmFzdENhbGxv
YyhzaXplXwogdGVtcGxhdGUgPGJvb2wgY3Jhc2hPbkZhaWx1cmU+CiBBTFdBWVNfSU5MSU5FCiAj
ZW5kaWYKLXZvaWQqIGNhbGxvYyhzaXplX3Qgbiwgc2l6ZV90IGVsZW1fc2l6ZSkgewotICBzaXpl
X3QgdG90YWxCeXRlcyA9IG4gKiBlbGVtX3NpemU7Cit2b2lkKiBjYWxsb2Moc2l6ZV90IG4sIHNp
emVfdCBlbGVtU2l6ZSkKK3sKKyAgICBzaXplX3QgdG90YWxCeXRlcyA9IG4gKiBlbGVtU2l6ZTsK
ICAgICAKLSAgLy8gUHJvdGVjdCBhZ2FpbnN0IG92ZXJmbG93Ci0gIGlmIChuID4gMSAmJiBlbGVt
X3NpemUgJiYgKHRvdGFsQnl0ZXMgLyBlbGVtX3NpemUpICE9IG4pCi0gICAgcmV0dXJuIDA7Cisg
ICAgLy8gUHJvdGVjdCBhZ2FpbnN0IG92ZXJmbG93CisgICAgaWYgKG4gPiAxICYmIGVsZW1TaXpl
ICYmICh0b3RhbEJ5dGVzIC8gZWxlbVNpemUpICE9IG4pCisgICAgICAgIHJldHVybiAwOwogCiAj
aWYgRU5BQkxFKFdURl9NQUxMT0NfVkFMSURBVElPTikKICAgICB2b2lkKiByZXN1bHQgPSBtYWxs
b2M8Y3Jhc2hPbkZhaWx1cmU+KHRvdGFsQnl0ZXMpOwpAQCAtMzk4NCwxNiArNDA4NywxNSBAQCB2
b2lkKiBjYWxsb2Moc2l6ZV90IG4sIHNpemVfdCBlbGVtX3NpemUpCiAgICAgbWVtc2V0KHJlc3Vs
dCwgMCwgdG90YWxCeXRlcyk7CiAgICAgZmFzdE1hbGxvY1ZhbGlkYXRlKHJlc3VsdCk7CiAjZWxz
ZQotICAgIHZvaWQqIHJlc3VsdCA9IGRvX21hbGxvYyh0b3RhbEJ5dGVzKTsKLSAgICBpZiAocmVz
dWx0ICE9IE5VTEwpIHsKKyAgICB2b2lkKiByZXN1bHQgPSBkb01hbGxvYyh0b3RhbEJ5dGVzKTsK
KyAgICBpZiAocmVzdWx0KQogICAgICAgICBtZW1zZXQocmVzdWx0LCAwLCB0b3RhbEJ5dGVzKTsK
LSAgICB9CiAjZW5kaWYKIAogI2lmbmRlZiBXVEZfQ0hBTkdFUwotICBNYWxsb2NIb29rOjpJbnZv
a2VOZXdIb29rKHJlc3VsdCwgdG90YWxCeXRlcyk7CisgICAgTWFsbG9jSG9vazo6SW52b2tlTmV3
SG9vayhyZXN1bHQsIHRvdGFsQnl0ZXMpOwogI2VuZGlmCi0gIHJldHVybiByZXN1bHQ7CisgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAogLy8gU2luY2UgY2ZyZWUgaXNuJ3QgdXNlZCBhbnl3aGVyZSwg
d2UgZG9uJ3QgY29tcGlsZSBpdCBpbi4KQEAgLTQwMDUsNyArNDEwNyw3IEBAIHZvaWQgY2ZyZWUo
dm9pZCogcHRyKSB7CiAjaWZuZGVmIFdURl9DSEFOR0VTCiAgICAgTWFsbG9jSG9vazo6SW52b2tl
RGVsZXRlSG9vayhwdHIpOwogI2VuZGlmCi0gIGRvX2ZyZWUocHRyKTsKKyAgICBkb0ZyZWUocHRy
KTsKIH0KICNlbmRpZgogCkBAIC00MDE1LDI0ICs0MTE3LDI0IEBAIGV4dGVybiAiQyIKIHRlbXBs
YXRlIDxib29sIGNyYXNoT25GYWlsdXJlPgogQUxXQVlTX0lOTElORSB2b2lkKiByZWFsbG9jKHZv
aWQqLCBzaXplX3QpOwogCi12b2lkKiBmYXN0UmVhbGxvYyh2b2lkKiBvbGRfcHRyLCBzaXplX3Qg
bmV3X3NpemUpCit2b2lkKiBmYXN0UmVhbGxvYyh2b2lkKiBvbGRQdHIsIHNpemVfdCBuZXdTaXpl
KQogewogI2lmIEVOQUJMRShXVEZfTUFMTE9DX1ZBTElEQVRJT04pCi0gICAgZmFzdE1hbGxvY1Zh
bGlkYXRlKG9sZF9wdHIpOworICAgIGZhc3RNYWxsb2NWYWxpZGF0ZShvbGRQdHIpOwogI2VuZGlm
Ci0gICAgdm9pZCogcmVzdWx0ID0gcmVhbGxvYzx0cnVlPihvbGRfcHRyLCBuZXdfc2l6ZSk7Cisg
ICAgdm9pZCogcmVzdWx0ID0gcmVhbGxvYzx0cnVlPihvbGRQdHIsIG5ld1NpemUpOwogI2lmIEVO
QUJMRShXVEZfTUFMTE9DX1ZBTElEQVRJT04pCiAgICAgZmFzdE1hbGxvY1ZhbGlkYXRlKHJlc3Vs
dCk7CiAjZW5kaWYKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1UcnlNYWxsb2NSZXR1cm5WYWx1
ZSB0cnlGYXN0UmVhbGxvYyh2b2lkKiBvbGRfcHRyLCBzaXplX3QgbmV3X3NpemUpCitUcnlNYWxs
b2NSZXR1cm5WYWx1ZSB0cnlGYXN0UmVhbGxvYyh2b2lkKiBvbGRQdHIsIHNpemVfdCBuZXdTaXpl
KQogewogI2lmIEVOQUJMRShXVEZfTUFMTE9DX1ZBTElEQVRJT04pCi0gICAgZmFzdE1hbGxvY1Zh
bGlkYXRlKG9sZF9wdHIpOworICAgIGZhc3RNYWxsb2NWYWxpZGF0ZShvbGRQdHIpOwogI2VuZGlm
Ci0gICAgdm9pZCogcmVzdWx0ID0gcmVhbGxvYzxmYWxzZT4ob2xkX3B0ciwgbmV3X3NpemUpOwor
ICAgIHZvaWQqIHJlc3VsdCA9IHJlYWxsb2M8ZmFsc2U+KG9sZFB0ciwgbmV3U2l6ZSk7CiAjaWYg
RU5BQkxFKFdURl9NQUxMT0NfVkFMSURBVElPTikKICAgICBmYXN0TWFsbG9jVmFsaWRhdGUocmVz
dWx0KTsKICNlbmRpZgpAQCAtNDA0MiwxMDkgKzQxNDQsMTA4IEBAIFRyeU1hbGxvY1JldHVyblZh
bHVlIHRyeUZhc3RSZWFsbG9jKHZvaWQKIHRlbXBsYXRlIDxib29sIGNyYXNoT25GYWlsdXJlPgog
QUxXQVlTX0lOTElORQogI2VuZGlmCi12b2lkKiByZWFsbG9jKHZvaWQqIG9sZF9wdHIsIHNpemVf
dCBuZXdfc2l6ZSkgewotICBpZiAob2xkX3B0ciA9PSBOVUxMKSB7Cit2b2lkKiByZWFsbG9jKHZv
aWQqIG9sZFB0ciwgc2l6ZV90IG5ld1NpemUpCit7CisgICAgaWYgKCFvbGRQdHIpIHsKICNpZiBF
TkFCTEUoV1RGX01BTExPQ19WQUxJREFUSU9OKQotICAgIHZvaWQqIHJlc3VsdCA9IG1hbGxvYzxj
cmFzaE9uRmFpbHVyZT4obmV3X3NpemUpOworICAgICAgICB2b2lkKiByZXN1bHQgPSBtYWxsb2M8
Y3Jhc2hPbkZhaWx1cmU+KG5ld1NpemUpOwogI2Vsc2UKLSAgICB2b2lkKiByZXN1bHQgPSBkb19t
YWxsb2MobmV3X3NpemUpOworICAgICAgICB2b2lkKiByZXN1bHQgPSBkb01hbGxvYyhuZXdTaXpl
KTsKICNpZm5kZWYgV1RGX0NIQU5HRVMKLSAgICBNYWxsb2NIb29rOjpJbnZva2VOZXdIb29rKHJl
c3VsdCwgbmV3X3NpemUpOworICAgICAgICBNYWxsb2NIb29rOjpJbnZva2VOZXdIb29rKHJlc3Vs
dCwgbmV3U2l6ZSk7CiAjZW5kaWYKICNlbmRpZgotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLSAg
aWYgKG5ld19zaXplID09IDApIHsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAg
aWYgKCFuZXdTaXplKSB7CiAjaWZuZGVmIFdURl9DSEFOR0VTCi0gICAgTWFsbG9jSG9vazo6SW52
b2tlRGVsZXRlSG9vayhvbGRfcHRyKTsKKyAgICAgICAgTWFsbG9jSG9vazo6SW52b2tlRGVsZXRl
SG9vayhvbGRQdHIpOwogI2VuZGlmCi0gICAgZnJlZShvbGRfcHRyKTsKLSAgICByZXR1cm4gTlVM
TDsKLSAgfQorICAgICAgICBmcmVlKG9sZFB0cik7CisgICAgICAgIHJldHVybiAwOworICAgIH0K
IAogI2lmIEVOQUJMRShXVEZfTUFMTE9DX1ZBTElEQVRJT04pCi0gICAgaWYgKHN0ZDo6bnVtZXJp
Y19saW1pdHM8c2l6ZV90Pjo6bWF4KCkgLSBJbnRlcm5hbDo6VmFsaWRhdGlvbkJ1ZmZlclNpemUg
PD0gbmV3X3NpemUpICAvLyBJZiBvdmVyZmxvdyB3b3VsZCBvY2N1ci4uLgorICAgIGlmIChzdGQ6
Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpIC0gSW50ZXJuYWw6OlZhbGlkYXRpb25CdWZm
ZXJTaXplIDw9IG5ld1NpemUpIC8vIElmIG92ZXJmbG93IHdvdWxkIG9jY3VyLi4uCiAgICAgICAg
IHJldHVybiAwOwotICAgIEludGVybmFsOjpWYWxpZGF0aW9uSGVhZGVyKiBoZWFkZXIgPSBJbnRl
cm5hbDo6ZmFzdE1hbGxvY1ZhbGlkYXRpb25IZWFkZXIob2xkX3B0cik7Ci0gICAgZmFzdE1hbGxv
Y1ZhbGlkYXRlKG9sZF9wdHIpOwotICAgIG9sZF9wdHIgPSBoZWFkZXI7Ci0gICAgaGVhZGVyLT5t
X3NpemUgPSBuZXdfc2l6ZTsKLSAgICBuZXdfc2l6ZSArPSBJbnRlcm5hbDo6VmFsaWRhdGlvbkJ1
ZmZlclNpemU7Ci0jZW5kaWYKLQotICAvLyBHZXQgdGhlIHNpemUgb2YgdGhlIG9sZCBlbnRyeQot
ICBjb25zdCBQYWdlSUQgcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihvbGRfcHRyKSA+
PiBrUGFnZVNoaWZ0OwotICBzaXplX3QgY2wgPSBwYWdlaGVhcC0+R2V0U2l6ZUNsYXNzSWZDYWNo
ZWQocCk7Ci0gIFNwYW4gKnNwYW4gPSBOVUxMOwotICBzaXplX3Qgb2xkX3NpemU7Ci0gIGlmIChj
bCA9PSAwKSB7Ci0gICAgc3BhbiA9IHBhZ2VoZWFwLT5HZXREZXNjcmlwdG9yKHApOwotICAgIGNs
ID0gc3Bhbi0+c2l6ZWNsYXNzOwotICAgIHBhZ2VoZWFwLT5DYWNoZVNpemVDbGFzcyhwLCBjbCk7
Ci0gIH0KLSAgaWYgKGNsICE9IDApIHsKLSAgICBvbGRfc2l6ZSA9IEJ5dGVTaXplRm9yQ2xhc3Mo
Y2wpOwotICB9IGVsc2UgewotICAgIEFTU0VSVChzcGFuICE9IE5VTEwpOwotICAgIG9sZF9zaXpl
ID0gc3Bhbi0+bGVuZ3RoIDw8IGtQYWdlU2hpZnQ7Ci0gIH0KLQotICAvLyBSZWFsbG9jYXRlIGlm
IHRoZSBuZXcgc2l6ZSBpcyBsYXJnZXIgdGhhbiB0aGUgb2xkIHNpemUsCi0gIC8vIG9yIGlmIHRo
ZSBuZXcgc2l6ZSBpcyBzaWduaWZpY2FudGx5IHNtYWxsZXIgdGhhbiB0aGUgb2xkIHNpemUuCi0g
IGlmICgobmV3X3NpemUgPiBvbGRfc2l6ZSkgfHwgKEFsbG9jYXRpb25TaXplKG5ld19zaXplKSA8
IG9sZF9zaXplKSkgewotICAgIC8vIE5lZWQgdG8gcmVhbGxvY2F0ZQotICAgIHZvaWQqIG5ld19w
dHIgPSBkb19tYWxsb2MobmV3X3NpemUpOwotICAgIGlmIChuZXdfcHRyID09IE5VTEwpIHsKLSAg
ICAgIHJldHVybiBOVUxMOwotICAgIH0KKyAgICBJbnRlcm5hbDo6VmFsaWRhdGlvbkhlYWRlciog
aGVhZGVyID0gSW50ZXJuYWw6OmZhc3RNYWxsb2NWYWxpZGF0aW9uSGVhZGVyKG9sZFB0cik7Cisg
ICAgZmFzdE1hbGxvY1ZhbGlkYXRlKG9sZFB0cik7CisgICAgb2xkUHRyID0gaGVhZGVyOworICAg
IGhlYWRlci0+bV9zaXplID0gbmV3U2l6ZTsKKyAgICBuZXdTaXplICs9IEludGVybmFsOjpWYWxp
ZGF0aW9uQnVmZmVyU2l6ZTsKKyNlbmRpZgorCisgICAgLy8gR2V0IHRoZSBzaXplIG9mIHRoZSBv
bGQgZW50cnkKKyAgICBjb25zdCBQYWdlSUQgcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90
PihvbGRQdHIpID4+IGtQYWdlU2hpZnQ7CisgICAgc2l6ZV90IGNsID0gcGFnZWhlYXAtPkdldFNp
emVDbGFzc0lmQ2FjaGVkKHApOworICAgIFNwYW4qIHNwYW4gPSAwOworICAgIHNpemVfdCBvbGRz
aXplOworICAgIGlmICghY2wpIHsKKyAgICAgICAgc3BhbiA9IHBhZ2VoZWFwLT5HZXREZXNjcmlw
dG9yKHApOworICAgICAgICBjbCA9IHNwYW4tPnNpemVDbGFzczsKKyAgICAgICAgcGFnZWhlYXAt
PkNhY2hlU2l6ZUNsYXNzKHAsIGNsKTsKKyAgICB9CisgICAgaWYgKGNsKQorICAgICAgICBvbGRz
aXplID0gQnl0ZVNpemVGb3JDbGFzcyhjbCk7CisgICAgZWxzZSB7CisgICAgICAgIEFTU0VSVChz
cGFuKTsKKyAgICAgICAgb2xkc2l6ZSA9IHNwYW4tPmxlbmd0aCA8PCBrUGFnZVNoaWZ0OworICAg
IH0KKworICAgIC8vIFJlYWxsb2NhdGUgaWYgdGhlIG5ldyBzaXplIGlzIGxhcmdlciB0aGFuIHRo
ZSBvbGQgc2l6ZSwKKyAgICAvLyBvciBpZiB0aGUgbmV3IHNpemUgaXMgc2lnbmlmaWNhbnRseSBz
bWFsbGVyIHRoYW4gdGhlIG9sZCBzaXplLgorICAgIGlmICgobmV3U2l6ZSA+IG9sZHNpemUpIHx8
IChBbGxvY2F0aW9uU2l6ZShuZXdTaXplKSA8IG9sZHNpemUpKSB7CisgICAgICAgIC8vIE5lZWQg
dG8gcmVhbGxvY2F0ZQorICAgICAgICB2b2lkKiBuZXdQdHIgPSBkb01hbGxvYyhuZXdTaXplKTsK
KyAgICAgICAgaWYgKCFuZXdQdHIpCisgICAgICAgICAgICByZXR1cm4gMDsKICNpZm5kZWYgV1RG
X0NIQU5HRVMKLSAgICBNYWxsb2NIb29rOjpJbnZva2VOZXdIb29rKG5ld19wdHIsIG5ld19zaXpl
KTsKKyAgICAgICAgTWFsbG9jSG9vazo6SW52b2tlTmV3SG9vayhuZXdQdHIsIG5ld1NpemUpOwog
I2VuZGlmCi0gICAgbWVtY3B5KG5ld19wdHIsIG9sZF9wdHIsICgob2xkX3NpemUgPCBuZXdfc2l6
ZSkgPyBvbGRfc2l6ZSA6IG5ld19zaXplKSk7CisgICAgICAgIG1lbWNweShuZXdQdHIsIG9sZFB0
ciwgKChvbGRzaXplIDwgbmV3U2l6ZSkgPyBvbGRzaXplIDogbmV3U2l6ZSkpOwogI2lmbmRlZiBX
VEZfQ0hBTkdFUwotICAgIE1hbGxvY0hvb2s6Okludm9rZURlbGV0ZUhvb2sob2xkX3B0cik7Cisg
ICAgICAgIE1hbGxvY0hvb2s6Okludm9rZURlbGV0ZUhvb2sob2xkUHRyKTsKICNlbmRpZgotICAg
IC8vIFdlIGNvdWxkIHVzZSBhIHZhcmlhbnQgb2YgZG9fZnJlZSgpIHRoYXQgbGV2ZXJhZ2VzIHRo
ZSBmYWN0Ci0gICAgLy8gdGhhdCB3ZSBhbHJlYWR5IGtub3cgdGhlIHNpemVjbGFzcyBvZiBvbGRf
cHRyLiAgVGhlIGJlbmVmaXQKLSAgICAvLyB3b3VsZCBiZSBzbWFsbCwgc28gZG9uJ3QgYm90aGVy
LgotICAgIGRvX2ZyZWUob2xkX3B0cik7CisgICAgICAgIC8vIFdlIGNvdWxkIHVzZSBhIHZhcmlh
bnQgb2YgZG9GcmVlKCkgdGhhdCBsZXZlcmFnZXMgdGhlIGZhY3QKKyAgICAgICAgLy8gdGhhdCB3
ZSBhbHJlYWR5IGtub3cgdGhlIHNpemVDbGFzcyBvZiBvbGRQdHIuIFRoZSBiZW5lZml0CisgICAg
ICAgIC8vIHdvdWxkIGJlIHNtYWxsLCBzbyBkb24ndCBib3RoZXIuCisgICAgICAgIGRvRnJlZShv
bGRQdHIpOwogI2lmIEVOQUJMRShXVEZfTUFMTE9DX1ZBTElEQVRJT04pCi0gICAgbmV3X3B0ciA9
IHN0YXRpY19jYXN0PEludGVybmFsOjpWYWxpZGF0aW9uSGVhZGVyKj4obmV3X3B0cikgKyAxOwot
ICAgICpJbnRlcm5hbDo6ZmFzdE1hbGxvY1ZhbGlkYXRpb25TdWZmaXgobmV3X3B0cikgPSBJbnRl
cm5hbDo6VmFsaWRhdGlvblN1ZmZpeDsKKyAgICAgICAgbmV3UHRyID0gc3RhdGljX2Nhc3Q8SW50
ZXJuYWw6OlZhbGlkYXRpb25IZWFkZXIqPihuZXdQdHIpICsgMTsKKyAgICAgICAgKkludGVybmFs
OjpmYXN0TWFsbG9jVmFsaWRhdGlvblN1ZmZpeChuZXdQdHIpID0gSW50ZXJuYWw6OlZhbGlkYXRp
b25TdWZmaXg7CiAjZW5kaWYKLSAgICByZXR1cm4gbmV3X3B0cjsKLSAgfSBlbHNlIHsKKyAgICAg
ICAgcmV0dXJuIG5ld1B0cjsKKyAgICB9CiAjaWYgRU5BQkxFKFdURl9NQUxMT0NfVkFMSURBVElP
TikKLSAgICBvbGRfcHRyID0gc3RhdGljX2Nhc3Q8SW50ZXJuYWw6OlZhbGlkYXRpb25IZWFkZXIq
PihvbGRfcHRyKSArIDE7IC8vIFNldCBvbGRfcHRyIGJhY2sgdG8gdGhlIHVzZXIgcG9pbnRlci4K
LSAgICAqSW50ZXJuYWw6OmZhc3RNYWxsb2NWYWxpZGF0aW9uU3VmZml4KG9sZF9wdHIpID0gSW50
ZXJuYWw6OlZhbGlkYXRpb25TdWZmaXg7CisgICAgb2xkUHRyID0gc3RhdGljX2Nhc3Q8SW50ZXJu
YWw6OlZhbGlkYXRpb25IZWFkZXIqPihvbGRQdHIpICsgMTsgLy8gU2V0IG9sZFB0ciBiYWNrIHRv
IHRoZSB1c2VyIHBvaW50ZXIuCisgICAgKkludGVybmFsOjpmYXN0TWFsbG9jVmFsaWRhdGlvblN1
ZmZpeChvbGRQdHIpID0gSW50ZXJuYWw6OlZhbGlkYXRpb25TdWZmaXg7CiAjZW5kaWYKLSAgICBy
ZXR1cm4gb2xkX3B0cjsKLSAgfQorICAgIHJldHVybiBvbGRQdHI7CiB9CiAKICNpZmRlZiBXVEZf
Q0hBTkdFUwotI3VuZGVmIGRvX21hbGxvYworI3VuZGVmIGRvTWFsbG9jCiAjZWxzZQogCiBzdGF0
aWMgU3BpbkxvY2sgc2V0X25ld19oYW5kbGVyX2xvY2sgPSBTUElOTE9DS19JTklUSUFMSVpFUjsK
IAogc3RhdGljIGlubGluZSB2b2lkKiBjcHBfYWxsb2Moc2l6ZV90IHNpemUsIGJvb2wgbm90aHJv
dykgewotICBmb3IgKDs7KSB7Ci0gICAgdm9pZCogcCA9IGRvX21hbGxvYyhzaXplKTsKKyAgICBm
b3IgKDs7KSB7CisgICAgICAgIHZvaWQqIHAgPSBkb01hbGxvYyhzaXplKTsKICNpZmRlZiBQUkVB
TlNJTkVXCi0gICAgcmV0dXJuIHA7CisgICAgICAgIHJldHVybiBwOwogI2Vsc2UKLSAgICBpZiAo
cCA9PSBOVUxMKSB7ICAvLyBhbGxvY2F0aW9uIGZhaWxlZAotICAgICAgLy8gR2V0IHRoZSBjdXJy
ZW50IG5ldyBoYW5kbGVyLiAgTkI6IHRoaXMgZnVuY3Rpb24gaXMgbm90Ci0gICAgICAvLyB0aHJl
YWQtc2FmZS4gIFdlIG1ha2UgYSBmZWVibGUgc3RhYiBhdCBtYWtpbmcgaXQgc28gaGVyZSwgYnV0
Ci0gICAgICAvLyB0aGlzIGxvY2sgb25seSBwcm90ZWN0cyBhZ2FpbnN0IHRjbWFsbG9jIGludGVy
ZmVyaW5nIHdpdGgKLSAgICAgIC8vIGl0c2VsZiwgbm90IHdpdGggb3RoZXIgbGlicmFyaWVzIGNh
bGxpbmcgc2V0X25ld19oYW5kbGVyLgotICAgICAgc3RkOjpuZXdfaGFuZGxlciBuaDsKLSAgICAg
IHsKLSAgICAgICAgU3BpbkxvY2tIb2xkZXIgaCgmc2V0X25ld19oYW5kbGVyX2xvY2spOwotICAg
ICAgICBuaCA9IHN0ZDo6c2V0X25ld19oYW5kbGVyKDApOwotICAgICAgICAodm9pZCkgc3RkOjpz
ZXRfbmV3X2hhbmRsZXIobmgpOwotICAgICAgfQorICAgICAgICBpZiAoIXApIHsgLy8gYWxsb2Nh
dGlvbiBmYWlsZWQKKyAgICAgICAgICAgIC8vIEdldCB0aGUgY3VycmVudCBuZXcgaGFuZGxlci4g
TkI6IHRoaXMgZnVuY3Rpb24gaXMgbm90CisgICAgICAgICAgICAvLyB0aHJlYWQtc2FmZS4gV2Ug
bWFrZSBhIGZlZWJsZSBzdGFiIGF0IG1ha2luZyBpdCBzbyBoZXJlLCBidXQKKyAgICAgICAgICAg
IC8vIHRoaXMgbG9jayBvbmx5IHByb3RlY3RzIGFnYWluc3QgdGNtYWxsb2MgaW50ZXJmZXJpbmcg
d2l0aAorICAgICAgICAgICAgLy8gaXRzZWxmLCBub3Qgd2l0aCBvdGhlciBsaWJyYXJpZXMgY2Fs
bGluZyBzZXRfbmV3X2hhbmRsZXIuCisgICAgICAgICAgICBzdGQ6Om5ld19oYW5kbGVyIG5oOwor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFNwaW5Mb2NrSG9sZGVyIGgoJnNldF9uZXdf
aGFuZGxlcl9sb2NrKTsKKyAgICAgICAgICAgICAgICBuaCA9IHN0ZDo6c2V0X25ld19oYW5kbGVy
KDApOworICAgICAgICAgICAgICAgICh2b2lkKSBzdGQ6OnNldF9uZXdfaGFuZGxlcihuaCk7Cisg
ICAgICAgICAgICB9CiAgICAgICAvLyBJZiBubyBuZXdfaGFuZGxlciBpcyBlc3RhYmxpc2hlZCwg
dGhlIGFsbG9jYXRpb24gZmFpbGVkLgogICAgICAgaWYgKCFuaCkgewogICAgICAgICBpZiAobm90
aHJvdykgcmV0dXJuIDA7CkBAIC00MTYzLDEyNyArNDI2NCwxMzAgQEAgc3RhdGljIGlubGluZSB2
b2lkKiBjcHBfYWxsb2Moc2l6ZV90IHNpegogICAgICAgcmV0dXJuIHA7CiAgICAgfQogI2VuZGlm
Ci0gIH0KKworICAgIH0KIH0KIAogI2lmIEVOQUJMRShHTE9CQUxfRkFTVE1BTExPQ19ORVcpCiAK
IHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3Qgc2l6ZSkgewotICB2b2lkKiBwID0gY3BwX2FsbG9j
KHNpemUsIGZhbHNlKTsKLSAgLy8gV2Uga2VlcCB0aGlzIG5leHQgaW5zdHJ1Y3Rpb24gb3V0IG9m
IGNwcF9hbGxvYyBmb3IgYSByZWFzb246IHdoZW4KLSAgLy8gaXQncyBpbiwgYW5kIG5ldyBqdXN0
IGNhbGxzIGNwcF9hbGxvYywgdGhlIG9wdGltaXplciBtYXkgZm9sZCB0aGUKLSAgLy8gbmV3IGNh
bGwgaW50byBjcHBfYWxsb2MsIHdoaWNoIG1lc3NlcyB1cCBvdXIgd2hvbGUgc2VjdGlvbi1iYXNl
ZAotICAvLyBzdGFja3RyYWNpbmcgKHNlZSBBVFRSSUJVVEVfU0VDVElPTiwgYWJvdmUpLiAgVGhp
cyBlbnN1cmVzIGNwcF9hbGxvYwotICAvLyBpc24ndCB0aGUgbGFzdCB0aGluZyB0aGlzIGZuIGNh
bGxzLCBhbmQgcHJldmVudHMgdGhlIGZvbGRpbmcuCi0gIE1hbGxvY0hvb2s6Okludm9rZU5ld0hv
b2socCwgc2l6ZSk7Ci0gIHJldHVybiBwOworICAgIHZvaWQqIHAgPSBjcHBfYWxsb2Moc2l6ZSwg
ZmFsc2UpOworICAgIC8vIFdlIGtlZXAgdGhpcyBuZXh0IGluc3RydWN0aW9uIG91dCBvZiBjcHBf
YWxsb2MgZm9yIGEgcmVhc29uOiB3aGVuCisgICAgLy8gaXQncyBpbiwgYW5kIG5ldyBqdXN0IGNh
bGxzIGNwcF9hbGxvYywgdGhlIG9wdGltaXplciBtYXkgZm9sZCB0aGUKKyAgICAvLyBuZXcgY2Fs
bCBpbnRvIGNwcF9hbGxvYywgd2hpY2ggbWVzc2VzIHVwIG91ciB3aG9sZSBzZWN0aW9uLWJhc2Vk
CisgICAgLy8gc3RhY2t0cmFjaW5nIChzZWUgQVRUUklCVVRFX1NFQ1RJT04sIGFib3ZlKS4gVGhp
cyBlbnN1cmVzIGNwcF9hbGxvYworICAgIC8vIGlzbid0IHRoZSBsYXN0IHRoaW5nIHRoaXMgZm4g
Y2FsbHMsIGFuZCBwcmV2ZW50cyB0aGUgZm9sZGluZy4KKyAgICBNYWxsb2NIb29rOjpJbnZva2VO
ZXdIb29rKHAsIHNpemUpOworICAgIHJldHVybiBwOwogfQogCiB2b2lkKiBvcGVyYXRvciBuZXco
c2l6ZV90IHNpemUsIGNvbnN0IHN0ZDo6bm90aHJvd190JikgX19USFJPVyB7Ci0gIHZvaWQqIHAg
PSBjcHBfYWxsb2Moc2l6ZSwgdHJ1ZSk7Ci0gIE1hbGxvY0hvb2s6Okludm9rZU5ld0hvb2socCwg
c2l6ZSk7Ci0gIHJldHVybiBwOworICAgIHZvaWQqIHAgPSBjcHBfYWxsb2Moc2l6ZSwgdHJ1ZSk7
CisgICAgTWFsbG9jSG9vazo6SW52b2tlTmV3SG9vayhwLCBzaXplKTsKKyAgICByZXR1cm4gcDsK
IH0KIAogdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCogcCkgX19USFJPVyB7Ci0gIE1hbGxvY0hv
b2s6Okludm9rZURlbGV0ZUhvb2socCk7Ci0gIGRvX2ZyZWUocCk7CisgICAgTWFsbG9jSG9vazo6
SW52b2tlRGVsZXRlSG9vayhwKTsKKyAgICBkb0ZyZWUocCk7CiB9CiAKIHZvaWQgb3BlcmF0b3Ig
ZGVsZXRlKHZvaWQqIHAsIGNvbnN0IHN0ZDo6bm90aHJvd190JikgX19USFJPVyB7Ci0gIE1hbGxv
Y0hvb2s6Okludm9rZURlbGV0ZUhvb2socCk7Ci0gIGRvX2ZyZWUocCk7CisgICAgTWFsbG9jSG9v
azo6SW52b2tlRGVsZXRlSG9vayhwKTsKKyAgICBkb0ZyZWUocCk7CiB9CiAKIHZvaWQqIG9wZXJh
dG9yIG5ld1tdKHNpemVfdCBzaXplKSB7Ci0gIHZvaWQqIHAgPSBjcHBfYWxsb2Moc2l6ZSwgZmFs
c2UpOwotICAvLyBXZSBrZWVwIHRoaXMgbmV4dCBpbnN0cnVjdGlvbiBvdXQgb2YgY3BwX2FsbG9j
IGZvciBhIHJlYXNvbjogd2hlbgotICAvLyBpdCdzIGluLCBhbmQgbmV3IGp1c3QgY2FsbHMgY3Bw
X2FsbG9jLCB0aGUgb3B0aW1pemVyIG1heSBmb2xkIHRoZQotICAvLyBuZXcgY2FsbCBpbnRvIGNw
cF9hbGxvYywgd2hpY2ggbWVzc2VzIHVwIG91ciB3aG9sZSBzZWN0aW9uLWJhc2VkCi0gIC8vIHN0
YWNrdHJhY2luZyAoc2VlIEFUVFJJQlVURV9TRUNUSU9OLCBhYm92ZSkuICBUaGlzIGVuc3VyZXMg
Y3BwX2FsbG9jCi0gIC8vIGlzbid0IHRoZSBsYXN0IHRoaW5nIHRoaXMgZm4gY2FsbHMsIGFuZCBw
cmV2ZW50cyB0aGUgZm9sZGluZy4KLSAgTWFsbG9jSG9vazo6SW52b2tlTmV3SG9vayhwLCBzaXpl
KTsKLSAgcmV0dXJuIHA7CisgICAgdm9pZCogcCA9IGNwcF9hbGxvYyhzaXplLCBmYWxzZSk7Cisg
ICAgLy8gV2Uga2VlcCB0aGlzIG5leHQgaW5zdHJ1Y3Rpb24gb3V0IG9mIGNwcF9hbGxvYyBmb3Ig
YSByZWFzb246IHdoZW4KKyAgICAvLyBpdCdzIGluLCBhbmQgbmV3IGp1c3QgY2FsbHMgY3BwX2Fs
bG9jLCB0aGUgb3B0aW1pemVyIG1heSBmb2xkIHRoZQorICAgIC8vIG5ldyBjYWxsIGludG8gY3Bw
X2FsbG9jLCB3aGljaCBtZXNzZXMgdXAgb3VyIHdob2xlIHNlY3Rpb24tYmFzZWQKKyAgICAvLyBz
dGFja3RyYWNpbmcgKHNlZSBBVFRSSUJVVEVfU0VDVElPTiwgYWJvdmUpLiBUaGlzIGVuc3VyZXMg
Y3BwX2FsbG9jCisgICAgLy8gaXNuJ3QgdGhlIGxhc3QgdGhpbmcgdGhpcyBmbiBjYWxscywgYW5k
IHByZXZlbnRzIHRoZSBmb2xkaW5nLgorICAgIE1hbGxvY0hvb2s6Okludm9rZU5ld0hvb2socCwg
c2l6ZSk7CisgICAgcmV0dXJuIHA7CiB9CiAKIHZvaWQqIG9wZXJhdG9yIG5ld1tdKHNpemVfdCBz
aXplLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIF9fVEhST1cgewotICB2b2lkKiBwID0gY3BwX2Fs
bG9jKHNpemUsIHRydWUpOwotICBNYWxsb2NIb29rOjpJbnZva2VOZXdIb29rKHAsIHNpemUpOwot
ICByZXR1cm4gcDsKKyAgICB2b2lkKiBwID0gY3BwX2FsbG9jKHNpemUsIHRydWUpOworICAgIE1h
bGxvY0hvb2s6Okludm9rZU5ld0hvb2socCwgc2l6ZSk7CisgICAgcmV0dXJuIHA7CiB9CiAKIHZv
aWQgb3BlcmF0b3IgZGVsZXRlW10odm9pZCogcCkgX19USFJPVyB7Ci0gIE1hbGxvY0hvb2s6Oklu
dm9rZURlbGV0ZUhvb2socCk7Ci0gIGRvX2ZyZWUocCk7CisgICAgTWFsbG9jSG9vazo6SW52b2tl
RGVsZXRlSG9vayhwKTsKKyAgICBkb0ZyZWUocCk7CiB9CiAKIHZvaWQgb3BlcmF0b3IgZGVsZXRl
W10odm9pZCogcCwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSBfX1RIUk9XIHsKLSAgTWFsbG9jSG9v
azo6SW52b2tlRGVsZXRlSG9vayhwKTsKLSAgZG9fZnJlZShwKTsKKyAgICBNYWxsb2NIb29rOjpJ
bnZva2VEZWxldGVIb29rKHApOworICAgIGRvRnJlZShwKTsKIH0KIAogI2VuZGlmCiAKIGV4dGVy
biAiQyIgdm9pZCogbWVtYWxpZ24oc2l6ZV90IGFsaWduLCBzaXplX3Qgc2l6ZSkgX19USFJPVyB7
Ci0gIHZvaWQqIHJlc3VsdCA9IGRvX21lbWFsaWduKGFsaWduLCBzaXplKTsKLSAgTWFsbG9jSG9v
azo6SW52b2tlTmV3SG9vayhyZXN1bHQsIHNpemUpOwotICByZXR1cm4gcmVzdWx0OworICAgIHZv
aWQqIHJlc3VsdCA9IGRvTWVtYWxpZ24oYWxpZ24sIHNpemUpOworICAgIE1hbGxvY0hvb2s6Oklu
dm9rZU5ld0hvb2socmVzdWx0LCBzaXplKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi1leHRl
cm4gIkMiIGludCBwb3NpeF9tZW1hbGlnbih2b2lkKiogcmVzdWx0X3B0ciwgc2l6ZV90IGFsaWdu
LCBzaXplX3Qgc2l6ZSkKK2V4dGVybiAiQyIgaW50IHBvc2l4X21lbWFsaWduKHZvaWQqKiByZXN1
bHRQdHIsIHNpemVfdCBhbGlnbiwgc2l6ZV90IHNpemUpCiAgICAgX19USFJPVyB7Ci0gIGlmICgo
KGFsaWduICUgc2l6ZW9mKHZvaWQqKSkgIT0gMCkgfHwKLSAgICAgICgoYWxpZ24gJiAoYWxpZ24g
LSAxKSkgIT0gMCkgfHwKLSAgICAgIChhbGlnbiA9PSAwKSkgewotICAgIHJldHVybiBFSU5WQUw7
Ci0gIH0KKyAgICBpZiAoKGFsaWduICUgc2l6ZW9mKHZvaWQqKSkKKyAgICAgICAgfHwgKGFsaWdu
ICYgKGFsaWduIC0gMSkpCisgICAgICAgIHx8ICghYWxpZ24pKQorICAgICAgICByZXR1cm4gRUlO
VkFMOwogCi0gIHZvaWQqIHJlc3VsdCA9IGRvX21lbWFsaWduKGFsaWduLCBzaXplKTsKLSAgTWFs
bG9jSG9vazo6SW52b2tlTmV3SG9vayhyZXN1bHQsIHNpemUpOwotICBpZiAocmVzdWx0ID09IE5V
TEwpIHsKLSAgICByZXR1cm4gRU5PTUVNOwotICB9IGVsc2UgewotICAgICpyZXN1bHRfcHRyID0g
cmVzdWx0OworICAgIHZvaWQqIHJlc3VsdCA9IGRvTWVtYWxpZ24oYWxpZ24sIHNpemUpOworICAg
IE1hbGxvY0hvb2s6Okludm9rZU5ld0hvb2socmVzdWx0LCBzaXplKTsKKyAgICBpZiAoIXJlc3Vs
dCkKKyAgICAgICAgcmV0dXJuIEVOT01FTTsKKyAgICAqcmVzdWx0UHRyID0gcmVzdWx0OwogICAg
IHJldHVybiAwOwotICB9CiB9CiAKIHN0YXRpYyBzaXplX3QgcGFnZXNpemUgPSAwOwogCiBleHRl
cm4gIkMiIHZvaWQqIHZhbGxvYyhzaXplX3Qgc2l6ZSkgX19USFJPVyB7Ci0gIC8vIEFsbG9jYXRl
IHBhZ2UtYWxpZ25lZCBvYmplY3Qgb2YgbGVuZ3RoID49IHNpemUgYnl0ZXMKLSAgaWYgKHBhZ2Vz
aXplID09IDApIHBhZ2VzaXplID0gZ2V0cGFnZXNpemUoKTsKLSAgdm9pZCogcmVzdWx0ID0gZG9f
bWVtYWxpZ24ocGFnZXNpemUsIHNpemUpOwotICBNYWxsb2NIb29rOjpJbnZva2VOZXdIb29rKHJl
c3VsdCwgc2l6ZSk7Ci0gIHJldHVybiByZXN1bHQ7CisgICAgLy8gQWxsb2NhdGUgcGFnZS1hbGln
bmVkIG9iamVjdCBvZiBsZW5ndGggPj0gc2l6ZSBieXRlcworICAgIGlmICghcGFnZXNpemUpCisg
ICAgICAgIHBhZ2VzaXplID0gZ2V0cGFnZXNpemUoKTsKKyAgICB2b2lkKiByZXN1bHQgPSBkb01l
bWFsaWduKHBhZ2VzaXplLCBzaXplKTsKKyAgICBNYWxsb2NIb29rOjpJbnZva2VOZXdIb29rKHJl
c3VsdCwgc2l6ZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogZXh0ZXJuICJDIiB2b2lkKiBw
dmFsbG9jKHNpemVfdCBzaXplKSBfX1RIUk9XIHsKLSAgLy8gUm91bmQgdXAgc2l6ZSB0byBhIG11
bHRpcGxlIG9mIHBhZ2VzaXplCi0gIGlmIChwYWdlc2l6ZSA9PSAwKSBwYWdlc2l6ZSA9IGdldHBh
Z2VzaXplKCk7Ci0gIHNpemUgPSAoc2l6ZSArIHBhZ2VzaXplIC0gMSkgJiB+KHBhZ2VzaXplIC0g
MSk7Ci0gIHZvaWQqIHJlc3VsdCA9IGRvX21lbWFsaWduKHBhZ2VzaXplLCBzaXplKTsKLSAgTWFs
bG9jSG9vazo6SW52b2tlTmV3SG9vayhyZXN1bHQsIHNpemUpOwotICByZXR1cm4gcmVzdWx0Owor
ICAgIC8vIFJvdW5kIHVwIHNpemUgdG8gYSBtdWx0aXBsZSBvZiBwYWdlc2l6ZQorICAgIGlmICgh
cGFnZXNpemUpCisgICAgICAgIHBhZ2VzaXplID0gZ2V0cGFnZXNpemUoKTsKKyAgICBzaXplID0g
KHNpemUgKyBwYWdlc2l6ZSAtIDEpICYgfihwYWdlc2l6ZSAtIDEpOworICAgIHZvaWQqIHJlc3Vs
dCA9IGRvTWVtYWxpZ24ocGFnZXNpemUsIHNpemUpOworICAgIE1hbGxvY0hvb2s6Okludm9rZU5l
d0hvb2socmVzdWx0LCBzaXplKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi1leHRlcm4gIkMi
IHZvaWQgbWFsbG9jX3N0YXRzKHZvaWQpIHsKLSAgZG9fbWFsbG9jX3N0YXRzKCk7CitleHRlcm4g
IkMiIHZvaWQgbWFsbG9jX3N0YXRzKHZvaWQpCit7CisgICAgZG9NYWxsb2NTdGF0cygpOwogfQog
Ci1leHRlcm4gIkMiIGludCBtYWxsb3B0KGludCBjbWQsIGludCB2YWx1ZSkgewotICByZXR1cm4g
ZG9fbWFsbG9wdChjbWQsIHZhbHVlKTsKK2V4dGVybiAiQyIgaW50IG1hbGxvcHQoaW50IGNtZCwg
aW50IHZhbHVlKQoreworICAgIHJldHVybiBkb01hbGxvcHQoY21kLCB2YWx1ZSk7CiB9CiAKICNp
ZmRlZiBIQVZFX1NUUlVDVF9NQUxMSU5GTwotZXh0ZXJuICJDIiBzdHJ1Y3QgbWFsbGluZm8gbWFs
bGluZm8odm9pZCkgewotICByZXR1cm4gZG9fbWFsbGluZm8oKTsKK2V4dGVybiAiQyIgc3RydWN0
IG1hbGxpbmZvIG1hbGxpbmZvKHZvaWQpCit7CisgICAgcmV0dXJuIGRvTWFsbGluZm8oKTsKIH0K
ICNlbmRpZgogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vIFNvbWUgbGlicmFyeSByb3V0aW5lcyBvbiBSZWRI
YXQgOSBhbGxvY2F0ZSBtZW1vcnkgdXNpbmcgbWFsbG9jKCkKLS8vIGFuZCBmcmVlIGl0IHVzaW5n
IF9fbGliY19mcmVlKCkgKG9yIHZpY2UtdmVyc2EpLiAgU2luY2Ugd2UgcHJvdmlkZQorLy8gYW5k
IGZyZWUgaXQgdXNpbmcgX19saWJjX2ZyZWUoKSAob3IgdmljZS12ZXJzYSkuIFNpbmNlIHdlIHBy
b3ZpZGUKIC8vIG91ciBvd24gaW1wbGVtZW50YXRpb25zIG9mIG1hbGxvYy9mcmVlLCB3ZSBuZWVk
IHRvIG1ha2Ugc3VyZSB0aGF0CiAvLyB0aGUgX19saWJjX1hYWCB2YXJpYW50cyAoZGVmaW5lZCBh
cyBwYXJ0IG9mIGdsaWJjKSBhbHNvIHBvaW50IHRvCiAvLyB0aGUgc2FtZSBpbXBsZW1lbnRhdGlv
bnMuCkBAIC00MzI5LDExICs0NDMzLDEwIEBAIGV4dGVybiAiQyIgewogLy8gVGhpcyBmdW5jdGlv
biBpcyBhbiBleGNlcHRpb24gdG8gdGhlIHJ1bGUgb2YgY2FsbGluZyBNYWxsb2NIb29rIG1ldGhv
ZAogLy8gZnJvbSB0aGUgc3RhY2sgZnJhbWUgb2YgdGhlIGFsbG9jYXRpb24gZnVuY3Rpb247CiAv
LyBoZWFwLWNoZWNrZXIgaGFuZGxlcyB0aGlzIHNwZWNpYWwgY2FzZSBleHBsaWNpdGx5Lgotc3Rh
dGljIHZvaWQgKk1lbWFsaWduT3ZlcnJpZGUoc2l6ZV90IGFsaWduLCBzaXplX3Qgc2l6ZSwgY29u
c3Qgdm9pZCAqY2FsbGVyKQotICAgIF9fVEhST1cgewotICB2b2lkKiByZXN1bHQgPSBkb19tZW1h
bGlnbihhbGlnbiwgc2l6ZSk7Ci0gIE1hbGxvY0hvb2s6Okludm9rZU5ld0hvb2socmVzdWx0LCBz
aXplKTsKLSAgcmV0dXJuIHJlc3VsdDsKK3N0YXRpYyB2b2lkICpNZW1hbGlnbk92ZXJyaWRlKHNp
emVfdCBhbGlnbiwgc2l6ZV90IHNpemUsIGNvbnN0IHZvaWQgKmNhbGxlcikgX19USFJPVyB7Cisg
ICAgdm9pZCogcmVzdWx0ID0gZG9NZW1hbGlnbihhbGlnbiwgc2l6ZSk7CisgICAgTWFsbG9jSG9v
azo6SW52b2tlTmV3SG9vayhyZXN1bHQsIHNpemUpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiB2
b2lkICooKl9fbWVtYWxpZ25faG9vaykoc2l6ZV90LCBzaXplX3QsIGNvbnN0IHZvaWQgKikgPSBN
ZW1hbGlnbk92ZXJyaWRlOwogCkBAIC00MzQ1LDEyICs0NDQ4LDEyIEBAIHZvaWQgcmVsZWFzZUZh
c3RNYWxsb2NGcmVlTWVtb3J5KCkKICAgICAvLyBGbHVzaCBmcmVlIHBhZ2VzIGluIHRoZSBjdXJy
ZW50IHRocmVhZCBjYWNoZSBiYWNrIHRvIHRoZSBwYWdlIGhlYXAuCiAgICAgLy8gTG93IHdhdGVy
bWFyayBtZWNoYW5pc20gaW4gU2NhdmVuZ2UoKSBwcmV2ZW50cyBmdWxsIHJldHVybiBvbiB0aGUg
Zmlyc3QgcGFzcy4KICAgICAvLyBUaGUgc2Vjb25kIHBhc3MgZmx1c2hlcyBldmVyeXRoaW5nLgot
ICAgIGlmIChUQ01hbGxvY19UaHJlYWRDYWNoZSogdGhyZWFkQ2FjaGUgPSBUQ01hbGxvY19UaHJl
YWRDYWNoZTo6R2V0Q2FjaGVJZlByZXNlbnQoKSkgeworICAgIGlmIChUQ01hbGxvY1RocmVhZENh
Y2hlKiB0aHJlYWRDYWNoZSA9IFRDTWFsbG9jVGhyZWFkQ2FjaGU6OkdldENhY2hlSWZQcmVzZW50
KCkpIHsKICAgICAgICAgdGhyZWFkQ2FjaGUtPlNjYXZlbmdlKCk7CiAgICAgICAgIHRocmVhZENh
Y2hlLT5TY2F2ZW5nZSgpOwogICAgIH0KIAotICAgIFNwaW5Mb2NrSG9sZGVyIGgoJnBhZ2VoZWFw
X2xvY2spOworICAgIFNwaW5Mb2NrSG9sZGVyIGgoJnBhZ2VoZWFwTG9jayk7CiAgICAgcGFnZWhl
YXAtPlJlbGVhc2VGcmVlUGFnZXMoKTsKIH0KICAgICAKQEAgLTQzNTgsMTggKzQ0NjEsMTggQEAg
RmFzdE1hbGxvY1N0YXRpc3RpY3MgZmFzdE1hbGxvY1N0YXRpc3RpYwogewogICAgIEZhc3RNYWxs
b2NTdGF0aXN0aWNzIHN0YXRpc3RpY3M7CiAKLSAgICBTcGluTG9ja0hvbGRlciBsb2NrSG9sZGVy
KCZwYWdlaGVhcF9sb2NrKTsKKyAgICBTcGluTG9ja0hvbGRlciBsb2NrSG9sZGVyKCZwYWdlaGVh
cExvY2spOwogICAgIHN0YXRpc3RpY3MucmVzZXJ2ZWRWTUJ5dGVzID0gc3RhdGljX2Nhc3Q8c2l6
ZV90PihwYWdlaGVhcC0+U3lzdGVtQnl0ZXMoKSk7CiAgICAgc3RhdGlzdGljcy5jb21taXR0ZWRW
TUJ5dGVzID0gc3RhdGlzdGljcy5yZXNlcnZlZFZNQnl0ZXMgLSBwYWdlaGVhcC0+UmV0dXJuZWRC
eXRlcygpOwogCiAgICAgc3RhdGlzdGljcy5mcmVlTGlzdEJ5dGVzID0gMDsKICAgICBmb3IgKHVu
c2lnbmVkIGNsID0gMDsgY2wgPCBrTnVtQ2xhc3NlczsgKytjbCkgewotICAgICAgICBjb25zdCBp
bnQgbGVuZ3RoID0gY2VudHJhbF9jYWNoZVtjbF0ubGVuZ3RoKCk7Ci0gICAgICAgIGNvbnN0IGlu
dCB0Y19sZW5ndGggPSBjZW50cmFsX2NhY2hlW2NsXS50Y19sZW5ndGgoKTsKKyAgICAgICAgY29u
c3QgaW50IGxlbmd0aCA9IGNlbnRyYWxDYWNoZVtjbF0ubGVuZ3RoKCk7CisgICAgICAgIGNvbnN0
IGludCB0Y0xlbmd0aCA9IGNlbnRyYWxDYWNoZVtjbF0udGNMZW5ndGgoKTsKIAotICAgICAgICBz
dGF0aXN0aWNzLmZyZWVMaXN0Qnl0ZXMgKz0gQnl0ZVNpemVGb3JDbGFzcyhjbCkgKiAobGVuZ3Ro
ICsgdGNfbGVuZ3RoKTsKKyAgICAgICAgc3RhdGlzdGljcy5mcmVlTGlzdEJ5dGVzICs9IEJ5dGVT
aXplRm9yQ2xhc3MoY2wpICogKGxlbmd0aCArIHRjTGVuZ3RoKTsKICAgICB9Ci0gICAgZm9yIChU
Q01hbGxvY19UaHJlYWRDYWNoZSogdGhyZWFkQ2FjaGUgPSB0aHJlYWRfaGVhcHM7IHRocmVhZENh
Y2hlIDsgdGhyZWFkQ2FjaGUgPSB0aHJlYWRDYWNoZS0+bmV4dF8pCisgICAgZm9yIChUQ01hbGxv
Y1RocmVhZENhY2hlKiB0aHJlYWRDYWNoZSA9IHRocmVhZEhlYXBzOyB0aHJlYWRDYWNoZSA7IHRo
cmVhZENhY2hlID0gdGhyZWFkQ2FjaGUtPm5leHQpCiAgICAgICAgIHN0YXRpc3RpY3MuZnJlZUxp
c3RCeXRlcyArPSB0aHJlYWRDYWNoZS0+U2l6ZSgpOwogCiAgICAgcmV0dXJuIHN0YXRpc3RpY3M7
CkBAIC00Mzg2LDEyICs0NDg5LDEyIEBAIHNpemVfdCBmYXN0TWFsbG9jU2l6ZShjb25zdCB2b2lk
KiBwdHIpCiAgICAgaWYgKCFzcGFuIHx8IHNwYW4tPmZyZWUpCiAgICAgICAgIHJldHVybiAwOwog
Ci0gICAgZm9yICh2b2lkKiBmcmVlID0gc3Bhbi0+b2JqZWN0czsgZnJlZSAhPSBOVUxMOyBmcmVl
ID0gKigodm9pZCoqKSBmcmVlKSkgeworICAgIGZvciAodm9pZCogZnJlZSA9IHNwYW4tPm9iamVj
dHM7IGZyZWU7IGZyZWUgPSAqKCh2b2lkKiopIGZyZWUpKSB7CiAgICAgICAgIGlmIChwdHIgPT0g
ZnJlZSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIGlmIChzaXplX3QgY2wg
PSBzcGFuLT5zaXplY2xhc3MpCisgICAgaWYgKHNpemVfdCBjbCA9IHNwYW4tPnNpemVDbGFzcykK
ICAgICAgICAgcmV0dXJuIEJ5dGVTaXplRm9yQ2xhc3MoY2wpOwogCiAgICAgcmV0dXJuIHNwYW4t
Pmxlbmd0aCA8PCBrUGFnZVNoaWZ0OwpAQCAtNDQxMiwxMyArNDUxNSwxMyBAQCBwdWJsaWM6CiAg
ICAgYm9vbCBpc0ZyZWVPYmplY3Qodm1fYWRkcmVzc190IHB0cikgY29uc3QgeyByZXR1cm4gaXNG
cmVlT2JqZWN0KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHB0cikpOyB9CiAgICAgc2l6ZV90IGZy
ZWVPYmplY3RDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJlZU9iamVjdHMuc2l6ZSgpOyB9CiAK
LSAgICB2b2lkIGZpbmRGcmVlT2JqZWN0cyhUQ01hbGxvY19UaHJlYWRDYWNoZSogdGhyZWFkQ2Fj
aGUpCisgICAgdm9pZCBmaW5kRnJlZU9iamVjdHMoVENNYWxsb2NUaHJlYWRDYWNoZSogdGhyZWFk
Q2FjaGUpCiAgICAgewotICAgICAgICBmb3IgKDsgdGhyZWFkQ2FjaGU7IHRocmVhZENhY2hlID0g
KHRocmVhZENhY2hlLT5uZXh0XyA/IG1fcmVhZGVyKHRocmVhZENhY2hlLT5uZXh0XykgOiAwKSkK
KyAgICAgICAgZm9yICg7IHRocmVhZENhY2hlOyB0aHJlYWRDYWNoZSA9ICh0aHJlYWRDYWNoZS0+
bmV4dCA/IG1fcmVhZGVyKHRocmVhZENhY2hlLT5uZXh0KSA6IDApKQogICAgICAgICAgICAgdGhy
ZWFkQ2FjaGUtPmVudW1lcmF0ZUZyZWVPYmplY3RzKCp0aGlzLCBtX3JlYWRlcik7CiAgICAgfQog
Ci0gICAgdm9pZCBmaW5kRnJlZU9iamVjdHMoVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdFBhZGRl
ZCogY2VudHJhbEZyZWVMaXN0LCBzaXplX3QgbnVtU2l6ZXMsIFRDTWFsbG9jX0NlbnRyYWxfRnJl
ZUxpc3RQYWRkZWQqIHJlbW90ZUNlbnRyYWxGcmVlTGlzdCkKKyAgICB2b2lkIGZpbmRGcmVlT2Jq
ZWN0cyhUQ01hbGxvY0NlbnRyYWxGcmVlTGlzdFBhZGRlZCogY2VudHJhbEZyZWVMaXN0LCBzaXpl
X3QgbnVtU2l6ZXMsIFRDTWFsbG9jQ2VudHJhbEZyZWVMaXN0UGFkZGVkKiByZW1vdGVDZW50cmFs
RnJlZUxpc3QpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtU2l6
ZXM7IGkrKykKICAgICAgICAgICAgIGNlbnRyYWxGcmVlTGlzdFtpXS5lbnVtZXJhdGVGcmVlT2Jq
ZWN0cygqdGhpcywgbV9yZWFkZXIsIHJlbW90ZUNlbnRyYWxGcmVlTGlzdCArIGkpOwpAQCAtNDQ0
Nyw3ICs0NTUwLDcgQEAgcHVibGljOgogICAgICAgICBpZiAoc3Bhbi0+ZnJlZSkgewogICAgICAg
ICAgICAgdm9pZCogcHRyID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc3Bhbi0+c3RhcnQgPDwg
a1BhZ2VTaGlmdCk7CiAgICAgICAgICAgICBtX2ZyZWVPYmplY3RGaW5kZXIudmlzaXQocHRyKTsK
LSAgICAgICAgfSBlbHNlIGlmIChzcGFuLT5zaXplY2xhc3MpIHsKKyAgICAgICAgfSBlbHNlIGlm
IChzcGFuLT5zaXplQ2xhc3MpIHsKICAgICAgICAgICAgIC8vIFdhbGsgdGhlIGZyZWUgbGlzdCBv
ZiB0aGUgc21hbGwtb2JqZWN0IHNwYW4sIGtlZXBpbmcgdHJhY2sgb2YgZWFjaCBvYmplY3Qgc2Vl
bgogICAgICAgICAgICAgZm9yICh2b2lkKiBuZXh0T2JqZWN0ID0gc3Bhbi0+b2JqZWN0czsgbmV4
dE9iamVjdDsgbmV4dE9iamVjdCA9IG1fcmVhZGVyLm5leHRFbnRyeUluTGlua2VkTGlzdChyZWlu
dGVycHJldF9jYXN0PHZvaWQqKj4obmV4dE9iamVjdCkpKQogICAgICAgICAgICAgICAgIG1fZnJl
ZU9iamVjdEZpbmRlci52aXNpdChuZXh0T2JqZWN0KTsKQEAgLTQ0OTksMTkgKzQ2MDIsMTkgQEAg
cHVibGljOgogCiAgICAgICAgIFZlY3Rvcjx2bV9yYW5nZV90LCAxMDI0PiBhbGxvY2F0ZWRQb2lu
dGVyczsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2NvYWxlc2NlZFNwYW5zLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgICAgICBTcGFuICp0aGVTcGFuID0gbV9jb2FsZXNjZWRTcGFu
c1tpXTsKKyAgICAgICAgICAgIFNwYW4qIHRoZVNwYW4gPSBtX2NvYWxlc2NlZFNwYW5zW2ldOwog
ICAgICAgICAgICAgaWYgKHRoZVNwYW4tPmZyZWUpCiAgICAgICAgICAgICAgICAgY29udGludWU7
CiAKICAgICAgICAgICAgIHZtX2FkZHJlc3NfdCBzcGFuU3RhcnRBZGRyZXNzID0gdGhlU3Bhbi0+
c3RhcnQgPDwga1BhZ2VTaGlmdDsKICAgICAgICAgICAgIHZtX3NpemVfdCBzcGFuU2l6ZUluQnl0
ZXMgPSB0aGVTcGFuLT5sZW5ndGggKiBrUGFnZVNpemU7CiAKLSAgICAgICAgICAgIGlmICghdGhl
U3Bhbi0+c2l6ZWNsYXNzKSB7CisgICAgICAgICAgICBpZiAoIXRoZVNwYW4tPnNpemVDbGFzcykg
ewogICAgICAgICAgICAgICAgIC8vIElmIGl0J3MgYW4gYWxsb2NhdGVkIGxhcmdlIG9iamVjdCBz
cGFuLCBtYXJrIGl0IGFzIGluIHVzZQogICAgICAgICAgICAgICAgIGlmICghbV9mcmVlT2JqZWN0
RmluZGVyLmlzRnJlZU9iamVjdChzcGFuU3RhcnRBZGRyZXNzKSkKICAgICAgICAgICAgICAgICAg
ICAgYWxsb2NhdGVkUG9pbnRlcnMuYXBwZW5kKCh2bV9yYW5nZV90KXtzcGFuU3RhcnRBZGRyZXNz
LCBzcGFuU2l6ZUluQnl0ZXN9KTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgY29uc3Qgc2l6ZV90IG9iamVjdFNpemUgPSBCeXRlU2l6ZUZvckNsYXNzKHRoZVNwYW4tPnNp
emVjbGFzcyk7CisgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IG9iamVjdFNpemUgPSBCeXRl
U2l6ZUZvckNsYXNzKHRoZVNwYW4tPnNpemVDbGFzcyk7CiAKICAgICAgICAgICAgICAgICAvLyBN
YXJrIGVhY2ggYWxsb2NhdGVkIHNtYWxsIG9iamVjdCB3aXRoaW4gdGhlIHNwYW4gYXMgaW4gdXNl
CiAgICAgICAgICAgICAgICAgY29uc3Qgdm1fYWRkcmVzc190IGVuZE9mU3BhbiA9IHNwYW5TdGFy
dEFkZHJlc3MgKyBzcGFuU2l6ZUluQnl0ZXM7CkBAIC00NjEyLDE3ICs0NzE1LDE3IEBAIGtlcm5f
cmV0dXJuX3QgRmFzdE1hbGxvY1pvbmU6OmVudW1lcmF0ZSgKICAgICBJbml0U2l6ZUNsYXNzZXMo
KTsKIAogICAgIEZhc3RNYWxsb2Nab25lKiBtem9uZSA9IG1lbW9yeVJlYWRlcihyZWludGVycHJl
dF9jYXN0PEZhc3RNYWxsb2Nab25lKj4oem9uZUFkZHJlc3MpKTsKLSAgICBUQ01hbGxvY19QYWdl
SGVhcCogcGFnZUhlYXAgPSBtZW1vcnlSZWFkZXIobXpvbmUtPm1fcGFnZUhlYXApOwotICAgIFRD
TWFsbG9jX1RocmVhZENhY2hlKiogdGhyZWFkSGVhcHNQb2ludGVyID0gbWVtb3J5UmVhZGVyKG16
b25lLT5tX3RocmVhZEhlYXBzKTsKLSAgICBUQ01hbGxvY19UaHJlYWRDYWNoZSogdGhyZWFkSGVh
cHMgPSBtZW1vcnlSZWFkZXIoKnRocmVhZEhlYXBzUG9pbnRlcik7CisgICAgVENNYWxsb2NQYWdl
SGVhcCogcGFnZUhlYXAgPSBtZW1vcnlSZWFkZXIobXpvbmUtPm1fcGFnZUhlYXApOworICAgIFRD
TWFsbG9jVGhyZWFkQ2FjaGUqKiB0aHJlYWRIZWFwc1BvaW50ZXIgPSBtZW1vcnlSZWFkZXIobXpv
bmUtPm1fdGhyZWFkSGVhcHMpOworICAgIFRDTWFsbG9jVGhyZWFkQ2FjaGUqIHRocmVhZEhlYXBz
ID0gbWVtb3J5UmVhZGVyKCp0aHJlYWRIZWFwc1BvaW50ZXIpOwogCi0gICAgVENNYWxsb2NfQ2Vu
dHJhbF9GcmVlTGlzdFBhZGRlZCogY2VudHJhbENhY2hlcyA9IG1lbW9yeVJlYWRlcihtem9uZS0+
bV9jZW50cmFsQ2FjaGVzLCBzaXplb2YoVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdFBhZGRlZCkg
KiBrTnVtQ2xhc3Nlcyk7CisgICAgVENNYWxsb2NDZW50cmFsRnJlZUxpc3RQYWRkZWQqIGNlbnRy
YWxDYWNoZXMgPSBtZW1vcnlSZWFkZXIobXpvbmUtPm1fY2VudHJhbENhY2hlcywgc2l6ZW9mKFRD
TWFsbG9jQ2VudHJhbEZyZWVMaXN0UGFkZGVkKSAqIGtOdW1DbGFzc2VzKTsKIAogICAgIEZyZWVP
YmplY3RGaW5kZXIgZmluZGVyKG1lbW9yeVJlYWRlcik7CiAgICAgZmluZGVyLmZpbmRGcmVlT2Jq
ZWN0cyh0aHJlYWRIZWFwcyk7CiAgICAgZmluZGVyLmZpbmRGcmVlT2JqZWN0cyhjZW50cmFsQ2Fj
aGVzLCBrTnVtQ2xhc3NlcywgbXpvbmUtPm1fY2VudHJhbENhY2hlcyk7CiAKLSAgICBUQ01hbGxv
Y19QYWdlSGVhcDo6UGFnZU1hcCogcGFnZU1hcCA9ICZwYWdlSGVhcC0+cGFnZW1hcF87CisgICAg
VENNYWxsb2NQYWdlSGVhcDo6UGFnZU1hcCogcGFnZU1hcCA9ICZwYWdlSGVhcC0+cGFnZU1hcDsK
ICAgICBQYWdlTWFwRnJlZU9iamVjdEZpbmRlciBwYWdlTWFwRmluZGVyKG1lbW9yeVJlYWRlciwg
ZmluZGVyKTsKICAgICBwYWdlTWFwLT52aXNpdFZhbHVlcyhwYWdlTWFwRmluZGVyLCBtZW1vcnlS
ZWFkZXIpOwogCkBAIC00NjM0LDcgKzQ3MzcsNyBAQCBrZXJuX3JldHVybl90IEZhc3RNYWxsb2Na
b25lOjplbnVtZXJhdGUoCiAgICAgcGFnZU1hcC0+dmlzaXRBbGxvY2F0aW9ucyhhZG1pblJlZ2lv
blJlY29yZGVyLCBtZW1vcnlSZWFkZXIpOwogCiAgICAgUGFnZUhlYXBBbGxvY2F0b3I8U3Bhbj4q
IHNwYW5BbGxvY2F0b3IgPSBtZW1vcnlSZWFkZXIobXpvbmUtPm1fc3BhbkFsbG9jYXRvcik7Ci0g
ICAgUGFnZUhlYXBBbGxvY2F0b3I8VENNYWxsb2NfVGhyZWFkQ2FjaGU+KiBwYWdlSGVhcEFsbG9j
YXRvciA9IG1lbW9yeVJlYWRlcihtem9uZS0+bV9wYWdlSGVhcEFsbG9jYXRvcik7CisgICAgUGFn
ZUhlYXBBbGxvY2F0b3I8VENNYWxsb2NUaHJlYWRDYWNoZT4qIHBhZ2VIZWFwQWxsb2NhdG9yID0g
bWVtb3J5UmVhZGVyKG16b25lLT5tX3BhZ2VIZWFwQWxsb2NhdG9yKTsKIAogICAgIHNwYW5BbGxv
Y2F0b3ItPnJlY29yZEFkbWluaXN0cmF0aXZlUmVnaW9ucyhhZG1pblJlZ2lvblJlY29yZGVyLCBt
ZW1vcnlSZWFkZXIpOwogICAgIHBhZ2VIZWFwQWxsb2NhdG9yLT5yZWNvcmRBZG1pbmlzdHJhdGl2
ZVJlZ2lvbnMoYWRtaW5SZWdpb25SZWNvcmRlciwgbWVtb3J5UmVhZGVyKTsKQEAgLTQ2NjIsNyAr
NDc2NSw3IEBAIHZvaWQqIEZhc3RNYWxsb2Nab25lOjp6b25lQ2FsbG9jKG1hbGxvY18KIHZvaWQg
RmFzdE1hbGxvY1pvbmU6OnpvbmVGcmVlKG1hbGxvY196b25lX3QqLCB2b2lkKiBwdHIpCiB7CiAg
ICAgLy8gRHVlIHRvIDxyZGFyOi8vcHJvYmxlbS81NjcxMzU3PiB6b25lRnJlZSBtYXkgYmUgY2Fs
bGVkIGJ5IHRoZSBzeXN0ZW0gZnJlZSBldmVuIGlmIHRoZSBwb2ludGVyCi0gICAgLy8gaXMgbm90
IGluIHRoaXMgem9uZS4gIFdoZW4gdGhpcyBoYXBwZW5zLCB0aGUgcG9pbnRlciBiZWluZyBmcmVl
ZCB3YXMgbm90IGFsbG9jYXRlZCBieSBhbnkKKyAgICAvLyBpcyBub3QgaW4gdGhpcyB6b25lLiBX
aGVuIHRoaXMgaGFwcGVucywgdGhlIHBvaW50ZXIgYmVpbmcgZnJlZWQgd2FzIG5vdCBhbGxvY2F0
ZWQgYnkgYW55CiAgICAgLy8gem9uZSBzbyB3ZSBuZWVkIHRvIHByaW50IGEgdXNlZnVsIGVycm9y
IGZvciB0aGUgYXBwbGljYXRpb24gZGV2ZWxvcGVyLgogICAgIG1hbGxvY19wcmludGYoIioqKiBl
cnJvciBmb3Igb2JqZWN0ICVwOiBwb2ludGVyIGJlaW5nIGZyZWVkIHdhcyBub3QgYWxsb2NhdGVk
XG4iLCBwdHIpOwogfQpAQCAtNDY5Miw3ICs0Nzk1LDcgQEAgbWFsbG9jX2ludHJvc3BlY3Rpb25f
dCBqc2NvcmVfZmFzdG1hbGxvYwogICAgIH07CiB9CiAKLUZhc3RNYWxsb2Nab25lOjpGYXN0TWFs
bG9jWm9uZShUQ01hbGxvY19QYWdlSGVhcCogcGFnZUhlYXAsIFRDTWFsbG9jX1RocmVhZENhY2hl
KiogdGhyZWFkSGVhcHMsIFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3RQYWRkZWQqIGNlbnRyYWxD
YWNoZXMsIFBhZ2VIZWFwQWxsb2NhdG9yPFNwYW4+KiBzcGFuQWxsb2NhdG9yLCBQYWdlSGVhcEFs
bG9jYXRvcjxUQ01hbGxvY19UaHJlYWRDYWNoZT4qIHBhZ2VIZWFwQWxsb2NhdG9yKQorRmFzdE1h
bGxvY1pvbmU6OkZhc3RNYWxsb2Nab25lKFRDTWFsbG9jUGFnZUhlYXAqIHBhZ2VIZWFwLCBUQ01h
bGxvY1RocmVhZENhY2hlKiogdGhyZWFkSGVhcHMsIFRDTWFsbG9jQ2VudHJhbEZyZWVMaXN0UGFk
ZGVkKiBjZW50cmFsQ2FjaGVzLCBQYWdlSGVhcEFsbG9jYXRvcjxTcGFuPiogc3BhbkFsbG9jYXRv
ciwgUGFnZUhlYXBBbGxvY2F0b3I8VENNYWxsb2NUaHJlYWRDYWNoZT4qIHBhZ2VIZWFwQWxsb2Nh
dG9yKQogICAgIDogbV9wYWdlSGVhcChwYWdlSGVhcCkKICAgICAsIG1fdGhyZWFkSGVhcHModGhy
ZWFkSGVhcHMpCiAgICAgLCBtX2NlbnRyYWxDYWNoZXMoY2VudHJhbENhY2hlcykKQEAgLTQ3MTYs
NyArNDgxOSw3IEBAIEZhc3RNYWxsb2Nab25lOjpGYXN0TWFsbG9jWm9uZShUQ01hbGxvY18KIAog
dm9pZCBGYXN0TWFsbG9jWm9uZTo6aW5pdCgpCiB7Ci0gICAgc3RhdGljIEZhc3RNYWxsb2Nab25l
IHpvbmUocGFnZWhlYXAsICZ0aHJlYWRfaGVhcHMsIHN0YXRpY19jYXN0PFRDTWFsbG9jX0NlbnRy
YWxfRnJlZUxpc3RQYWRkZWQqPihjZW50cmFsX2NhY2hlKSwgJnNwYW5fYWxsb2NhdG9yLCAmdGhy
ZWFkaGVhcF9hbGxvY2F0b3IpOworICAgIHN0YXRpYyBGYXN0TWFsbG9jWm9uZSB6b25lKHBhZ2Vo
ZWFwLCAmdGhyZWFkSGVhcHMsIHN0YXRpY19jYXN0PFRDTWFsbG9jQ2VudHJhbEZyZWVMaXN0UGFk
ZGVkKj4oY2VudHJhbENhY2hlKSwgJnNwYW5BbGxvY2F0b3IsICZ0aHJlYWRoZWFwQWxsb2NhdG9y
KTsKIH0KIAogI2VuZGlmIC8vIE9TKERBUldJTikK
</data>

          </attachment>
      

    </bug>

</bugzilla>