<?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>66161</bug_id>
          
          <creation_ts>2011-08-12 13:41:49 -0700</creation_ts>
          <short_desc>Investigate storing strings in 8-bit buffers when possible</short_desc>
          <delta_ts>2011-10-27 13:16:35 -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>Web Template Framework</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>66286</dependson>
    
    <dependson>66661</dependson>
    
    <dependson>67022</dependson>
    
    <dependson>66399</dependson>
    
    <dependson>66706</dependson>
    
    <dependson>67337</dependson>
    
    <dependson>70937</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Annie Sullivan">sullivan</reporter>
          <assigned_to name="Michael Saboff">msaboff</assigned_to>
          <cc>abarth</cc>
    
    <cc>adamk</cc>
    
    <cc>alp</cc>
    
    <cc>andersca</cc>
    
    <cc>andreip</cc>
    
    <cc>antonm</cc>
    
    <cc>ap</cc>
    
    <cc>arv</cc>
    
    <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eae</cc>
    
    <cc>efidler</cc>
    
    <cc>eric</cc>
    
    <cc>erikcorry</cc>
    
    <cc>evan</cc>
    
    <cc>ggaren</cc>
    
    <cc>gregsimon</cc>
    
    <cc>ian</cc>
    
    <cc>isherman</cc>
    
    <cc>jamesr</cc>
    
    <cc>japhet</cc>
    
    <cc>joepeck</cc>
    
    <cc>jshin</cc>
    
    <cc>levin</cc>
    
    <cc>levin+threading</cc>
    
    <cc>me</cc>
    
    <cc>mnaganov</cc>
    
    <cc>morrita</cc>
    
    <cc>mrowe</cc>
    
    <cc>msaboff</cc>
    
    <cc>naiem.shaik</cc>
    
    <cc>peter</cc>
    
    <cc>sam</cc>
    
    <cc>simonjam</cc>
    
    <cc>thakis</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>tonyg</cc>
    
    <cc>wangxianzhu</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yong.li.webkit</cc>
    
    <cc>yutaka.hirano</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>450628</commentid>
    <comment_count>0</comment_count>
    <who name="Annie Sullivan">sullivan</who>
    <bug_when>2011-08-12 13:41:49 -0700</bug_when>
    <thetext>Currently WTF::String always uses 16-bit buffers. This can be wasteful, because many strings only contain characters which are 8-bit.

I did some testing on various sites, and found there would be savings of 500k-2MB (3-5% total memory usage) if we managed to store all the strings that don&apos;t contain double-byte characters in 8-bit buffers. Getting this right would definitely be difficult, but I think it&apos;s worth investigating.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>450730</commentid>
    <comment_count>1</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-08-12 15:56:52 -0700</bug_when>
    <thetext>Hi Annie,

Great! - this is definitely something we&apos;re keen to see happen.

What are your current plans?  I&apos;m assuming any approach will involve a flag in the StringImpl indicating the format of the character data.  Clearly in many cases where we currently access characters in the string we could be agnostic as to how the data is stored (e.g. change code that calls to characters() to get a const UChar* to instead access one character at a time), however doing so in all cases will be tricky.  One question would be, what do you plan on doing for more difficult cases where we have code expecting to be able to read UFT16 data?  A set of obvious options would seem to be:

(1) Fix them all, make the entire codebase 8-bit string safe, never need to convert or copy.
(2) Create a temporary UTF16 copy as necessary (i.e. when a method that needs a const UChar* is called).
(3) Convert 8-bit strings up to UTF16 when necessary, retaining only the UTF16 copy and freeing the 8-bit source.
(4) Convert 8-bit strings up to UTF16 when necessary, retaining both the UTF16 and 8-bit representations.

(1) Is probably the best option, but is also probably the most work.
(2) Could be a performance regression, if a string may be repeatedly converted.
(3) May be difficult since the underlying buffers of StringImpls may be shared when substrings are created (one StringImpl may have a pointer into another&apos;s buffer).  [This may also be fixable, e.g. we could make strings we an offset relative to their buffer&apos;s base, or give buffers access to the list of StringImpls referencing them].
(4) In a pathological case would mean that instead of saving 50% of memory used for string data you would start using 150%!

What are your current plans?  Did you have another course of action in mind?

One more complexity is that the contents of the StringImpl are directly accessed by JIT generated code in JSC (used by all ports, since WebCore uses JSC&apos;s regexp engine).  This will be a bit of work to fix, but should be very doable, and the JSC team will be happy to help.  There are very few places that access the string data from the regular JavaScript language JIT, but unsurprisingly more in the regular expression JIT.  The regular expression JIT should be a pretty easy fix, it&apos;ll mostly just mean switching some 16-bit loads to 8-bit, but we&apos;ll probably need restructure some regexp objects to be able to hold onto two copies of JIT generated code, one for use with 16-bit source data &amp; one for use with 8-bit source data.  Again, we&apos;ll be happy to help make this happen.

cheers,
G.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451485</commentid>
    <comment_count>2</comment_count>
    <who name="Annie Sullivan">sullivan</who>
    <bug_when>2011-08-15 21:40:54 -0700</bug_when>
    <thetext>Thanks so much, Gavin! We&apos;d really like the help, especially since none of us are very familiar with JSC.

Our current plan is to start out by aiming for option 1--we made a spreadsheet of all the characters() usages and we&apos;re going to try and change as many of them as possible to use String APIs that don&apos;t expose the internal format of the character data. It&apos;s located here, if anyone cc-ed on this bug would like to take a task off of it, please feel free: https://docs.google.com/a/chromium.org/spreadsheet/ccc?key=0AsX8ECAuTqEzdEVFYnZaUlZ3QzJCbnBKamwxdGMxVkE&amp;hl=en_US#gid=9

Once we&apos;ve gotten to the point where we&apos;re down to just the usages that really make option 1 impractical, we hope that having many fewer issues to look at will make the choice between options 2-4 easier. I know this is a lot of work, but we can easily spread it across several people.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451517</commentid>
    <comment_count>3</comment_count>
    <who name="Erik Corry">erikcorry</who>
    <bug_when>2011-08-16 00:10:00 -0700</bug_when>
    <thetext>Since this is likely to have a huge impact on V8 I would appreciate this bug being kept up to date on which of the 4 ideas you are thinking of going with.

FWIW V8 has has always stored strings in both 1 and 2-byte formats.  The 2-byte strings can be &apos;external&apos; which means that they are backed by a WebKit string.  V8&apos;s one byte strings are strict ASCII ie only the characters from 0 to 127 are allowed.  Latin1 characters from 128 to 255 are not allowed in 1-byte strings.

One of the reasons for this is that you can just memcpy an ASCII string into a UTF-8 output buffer, but you have to inspect  every character if your source is Latin1.  It also simplifies the 1-byte version of the regexp engine if you know there are no Latin1 characters.

The ASCII restriction in V8 can be changed, obviously, but that&apos;s the way it is currently.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451660</commentid>
    <comment_count>4</comment_count>
    <who name="Annie Sullivan">sullivan</who>
    <bug_when>2011-08-16 09:20:52 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Since this is likely to have a huge impact on V8 I would appreciate this bug being kept up to date on which of the 4 ideas you are thinking of going with.

We definitely will.

&gt; FWIW V8 has has always stored strings in both 1 and 2-byte formats.  The 2-byte strings can be &apos;external&apos; which means that they are backed by a WebKit string.  V8&apos;s one byte strings are strict ASCII ie only the characters from 0 to 127 are allowed.  Latin1 characters from 128 to 255 are not allowed in 1-byte strings.
&gt; 
&gt; One of the reasons for this is that you can just memcpy an ASCII string into a UTF-8 output buffer, but you have to inspect  every character if your source is Latin1.  It also simplifies the 1-byte version of the regexp engine if you know there are no Latin1 characters.
&gt; 
&gt; The ASCII restriction in V8 can be changed, obviously, but that&apos;s the way it is currently.

I did some preliminary investigation into how many bytes are taken up by strings containing all-ASCII vs some Latin1 chars vs some double-byte chars on different websites:

CNN.com (english): 1M ASCII, 2K Latin1, 55K 2byte
ESPN.com (english): 1.5M ASCII, 16K Latin1, 54K 2byte
Baidu.com (chinese): 92K ASCII, 1.5K Latin1, 64K 2byte
news.baidu.com (chinese): 535K ASCII, 2.6K Latin1, 148K 2byte
yahoo.fr (french): 892K ASCII, 84K Latin1, 55K 2byte
news.google.de (german): 480K ASCII, 46K Latin1, 61K 2byte

Based on that, I think v8&apos;s approach of having only ASCII characters in 1-byte strings seems quite reasonable. Gavin, what do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451886</commentid>
    <comment_count>5</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-08-16 14:52:21 -0700</bug_when>
    <thetext>Agreed - given those stats, targeting ASCII only seems like the right choice.

If we were to ever find evidence that LATIN1 support would be of benefit, then we could look at expanding the character set supported in 8-bit strings from ASCII to LATIN1 (and coordinate with V8 in doing so), but ASCII seems a simpler starting point, and by the look of it should be sufficient.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457087</commentid>
    <comment_count>6</comment_count>
    <who name="Jungshik Shin">jshin</who>
    <bug_when>2011-08-25 13:13:50 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Agreed - given those stats, targeting ASCII only seems like the right choice.
&gt; 
&gt; If we were to ever find evidence that LATIN1 support would be of benefit, then we could look at expanding the character set supported in 8-bit strings from ASCII to LATIN1 (and coordinate with V8 in doing so), but ASCII seems a simpler starting point, and by the look of it should be sufficient.

I&quot;m relieved that we&apos;re limiting a single byte string to ASCII only :-). Extending it to the first 256 bytes (up to U+00FF) may be ok, but we&apos;d better stop there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457242</commentid>
    <comment_count>7</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-08-25 16:24:52 -0700</bug_when>
    <thetext>Annie,

I have started to work on this from a JSC side of things.  I will first focus on making the YARR regular expression engine 8 / 16 bit switchable.  After that I&apos;ll look at removing JSC use of characters().

Have you thought through the StringImpl changes?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457787</commentid>
    <comment_count>8</comment_count>
    <who name="Annie Sullivan">sullivan</who>
    <bug_when>2011-08-26 14:37:54 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Annie,
&gt; 
&gt; I have started to work on this from a JSC side of things.  I will first focus on making the YARR regular expression engine 8 / 16 bit switchable.  After that I&apos;ll look at removing JSC use of characters().
&gt; 
&gt; Have you thought through the StringImpl changes?

Thanks, Michael! I&apos;m looking into fleshing out the StringImpl changes now. Is the best way to get feedback to create a strawman patch in a blocking bug and ask people to give feedback as review comments? (Although of course we wouldn&apos;t actually submit the patch until all the other work is done and we&apos;d finished properly testing possible performance changes).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458291</commentid>
    <comment_count>9</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-08-29 10:59:23 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; Annie,
&gt; &gt; 
&gt; &gt; I have started to work on this from a JSC side of things.  I will first focus on making the YARR regular expression engine 8 / 16 bit switchable.  After that I&apos;ll look at removing JSC use of characters().
&gt; &gt; 
&gt; &gt; Have you thought through the StringImpl changes?
&gt; 
&gt; Thanks, Michael! I&apos;m looking into fleshing out the StringImpl changes now. Is the best way to get feedback to create a strawman patch in a blocking bug and ask people to give feedback as review comments? (Although of course we wouldn&apos;t actually submit the patch until all the other work is done and we&apos;d finished properly testing possible performance changes).

I think that would work.  You can email me with ideas if you want before posting a patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>472426</commentid>
    <comment_count>10</comment_count>
    <who name="Annie Sullivan">sullivan</who>
    <bug_when>2011-09-23 12:56:26 -0700</bug_when>
    <thetext>I am going on maternity leave in two weeks, so Xianzhu Wang is taking ownership of this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>472893</commentid>
    <comment_count>11</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-09-25 11:08:54 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; I am going on maternity leave in two weeks, so Xianzhu Wang is taking ownership of this.

Congratulations!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480827</commentid>
    <comment_count>12</comment_count>
      <attachid>110327</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-10-09 22:04:46 -0700</bug_when>
    <thetext>Created attachment 110327
Proposed StringImpl patch that supports 8 bit strings.

This change allows the creation of both 8 bit or 16 bit strings. If the characters() method is called on an 8 bit StringImpl object, a 16 bit shadow copy is created and returned.

This patch does not include changes that actually use 8 bit strings, in fact there is an ASSERT_NOT_REACHED() in the characters8() method.

Future patches will make other changes to support and use 8 bit strings.  The next of these are the neccessary JIT changes.

This work is broken up in smaller patches to make it more digestible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480832</commentid>
    <comment_count>13</comment_count>
      <attachid>110327</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-10-09 22:37:16 -0700</bug_when>
    <thetext>Comment on attachment 110327
Proposed StringImpl patch that supports 8 bit strings.

Attachment 110327 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/10000841</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480838</commentid>
    <comment_count>14</comment_count>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2011-10-09 23:15:41 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; Created an attachment (id=110327) [details]
&gt; Proposed StringImpl patch that supports 8 bit strings.
&gt; 
&gt; This change allows the creation of both 8 bit or 16 bit strings. If the characters() method is called on an 8 bit StringImpl object, a 16 bit shadow copy is created and returned.
&gt; 
&gt; This patch does not include changes that actually use 8 bit strings, in fact there is an ASSERT_NOT_REACHED() in the characters8() method.
&gt; 
&gt; Future patches will make other changes to support and use 8 bit strings.  The next of these are the neccessary JIT changes.
&gt; 
&gt; This work is broken up in smaller patches to make it more digestible.

Thank you for the patch. Would it be better to create a blocking bug for the change of StringImpl?

What do you think about bug 66706? I think with StringCharacterIterator, we can keep most of the characters() usages unchanged without the 16bit shadow copy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480972</commentid>
    <comment_count>15</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-10-10 08:50:25 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (In reply to comment #12)
&gt; &gt; Created an attachment (id=110327) [details] [details]
&gt; &gt; Proposed StringImpl patch that supports 8 bit strings.
&gt; &gt; 
&gt; &gt; This change allows the creation of both 8 bit or 16 bit strings. If the characters() method is called on an 8 bit StringImpl object, a 16 bit shadow copy is created and returned.
&gt; &gt; 
&gt; &gt; This patch does not include changes that actually use 8 bit strings, in fact there is an ASSERT_NOT_REACHED() in the characters8() method.
&gt; &gt; 
&gt; &gt; Future patches will make other changes to support and use 8 bit strings.  The next of these are the neccessary JIT changes.
&gt; &gt; 
&gt; &gt; This work is broken up in smaller patches to make it more digestible.
&gt; 
&gt; Thank you for the patch. Would it be better to create a blocking bug for the change of StringImpl?
&gt; 
&gt; What do you think about bug 66706? I think with StringCharacterIterator, we can keep most of the characters() usages unchanged without the 16bit shadow copy.

I don&apos;t have a problem creating a blocking bug.  I figured that this bug was for the StringImpl changes, so I used it for the proposed changes.

What I found in JavaScriptCore with comprehensive changes for 8 bit strings is that the 16bit shadow copy is hardly every created.  Most strings end up being 8 or 16 bit based on source content and there is seldom a need to convert an 8 bit string to a 16 bit string.

Having characters8() and characters16() allows callers that want to manipulate actual characters the ability to manipulate the native format.  I don&apos;t think this precludes characters() returning a StringCharacterIterator and following the 4 step plan described in 66706.  We still typedef StringCharacterIterator to be a &quot;const UChar*&quot; and use the shadow copy for 8 bit strings.  We can remove the 16 bit shadow copy at a later time, but in the mean time we can make forward progress.

Given that per-character size checks will hurt performance, hot paths will likely need to manipulate the characters directly as the current code does.  That means that either code paths check once (e.g. at the top of a loop) for 8/16 bit-ness or we templatize classes based on character size.  For code that isn&apos;t as performance sensitive, an iterator implemented similar to the CharAccess class I added to YarrInterpreter would work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481351</commentid>
    <comment_count>16</comment_count>
      <attachid>110451</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-10-10 17:43:44 -0700</bug_when>
    <thetext>Created attachment 110451
Updated patch

This patch fixes two issues in the prior patch
 - The build failure reported - fixed StringImpl::lower()
 - Test failures - fixed StringImpl::replace(UChar, StringImpl*)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481682</commentid>
    <comment_count>17</comment_count>
      <attachid>110526</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-10-11 09:43:47 -0700</bug_when>
    <thetext>Created attachment 110526
Updated patch

(Speculative fix) Add export to fix windows build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483461</commentid>
    <comment_count>18</comment_count>
      <attachid>110903</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-10-13 13:59:23 -0700</bug_when>
    <thetext>Created attachment 110903
Updated patch with tested export fix for Windows</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483596</commentid>
    <comment_count>19</comment_count>
      <attachid>110903</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-10-13 16:02:59 -0700</bug_when>
    <thetext>Comment on attachment 110903
Updated patch with tested export fix for Windows

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

&gt; Source/JavaScriptCore/wtf/text/StringImpl.h:471
&gt; +        const char* m_data8;

I think you should create a new typedef, &quot;unsigned char LChar&quot; for &quot;Latin1 character&quot;, as distinct from the existing &quot;UChar&quot; for &quot;Unicode character&quot;. Regular char is not so good because on OS X and other platforms with signed chars, (a) handing back just a char gives the client a value that will blow up and sign extend silently and incorrectly when converted to UChar, and (b) char requires a bunch of casting.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>490501</commentid>
    <comment_count>20</comment_count>
      <attachid>112435</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-10-25 17:50:57 -0700</bug_when>
    <thetext>Created attachment 112435
Updated patch refactored to use LChar

This patch includes the typedef suggested by Geoff.  That change rippled through the code growing this patch somewhat.  Comment #12 still holds true.

Still working on getting the JavaScriptCore symbol export list right for Windows.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>490557</commentid>
    <comment_count>21</comment_count>
      <attachid>112435</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-10-25 22:24:12 -0700</bug_when>
    <thetext>Comment on attachment 112435
Updated patch refactored to use LChar

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

You added LChar but didn&apos;t remove most of the static_casts. I pointed out some of them above, but ran out of time. You need to take a sweep through and remove them all.

&gt; Source/JavaScriptCore/runtime/UString.h:108
&gt; +            return static_cast&lt;unsigned char&gt;(m_impl-&gt;characters8()[index]);

No need for static_cast, now that you have LChar.

&gt; Source/JavaScriptCore/runtime/UString.h:145
&gt;      if (rep1 == rep2) // If they&apos;re the same rep, they&apos;re equal.

This function is way too big to inline now. You should pick the right part to inline and move the rest out of line.

&gt; Source/JavaScriptCore/runtime/UString.h:185
&gt; +            if (static_cast&lt;unsigned char&gt;(d1[i]) != d2[i])

No need for static_cast, now that you have LChar.

&gt; Source/JavaScriptCore/runtime/UString.h:196
&gt; +            if (d1[i] != static_cast&lt;unsigned char&gt;(d2[i]))

No need for static_cast, now that you have LChar.

&gt; Source/JavaScriptCore/wtf/StringHasher.h:165
&gt; +        return static_cast&lt;UChar&gt;(ch);

No need for static_cast, now that you have LChar.

&gt; Source/JavaScriptCore/wtf/text/StringImpl.cpp:222
&gt; +        m_copyData16[i] = static_cast&lt;unsigned char&gt;(m_data8[i]);

No need for static_cast, now that you have LChar.

&gt; Source/JavaScriptCore/wtf/text/StringImpl.cpp:236
&gt; +            UChar c = static_cast&lt;unsigned char&gt;(m_data8[i]);

No need for static_cast, now that you have LChar.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491201</commentid>
    <comment_count>22</comment_count>
      <attachid>112601</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-10-26 14:50:14 -0700</bug_when>
    <thetext>Created attachment 112601
Updated patch addressing comments #21

This addresses Geoff&apos;s comments and doesn&apos;t include the flag bit change factored out in https://bugs.webkit.org/show_bug.cgi?id=70937.

Also cleanup of comments suggested by Darin.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491203</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-26 14:54:10 -0700</bug_when>
    <thetext>Attachment 112601 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1

Source/JavaScriptCore/runtime/UString.cpp:277:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
Source/JavaScriptCore/runtime/UString.cpp:315:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
Source/JavaScriptCore/runtime/UString.cpp:320:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/JavaScriptCore/runtime/UString.h:180:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
Source/JavaScriptCore/runtime/UString.h:198:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
Source/JavaScriptCore/runtime/UString.h:203:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 6 in 28 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491222</commentid>
    <comment_count>24</comment_count>
      <attachid>112601</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-10-26 15:25:03 -0700</bug_when>
    <thetext>Comment on attachment 112601
Updated patch addressing comments #21

Attachment 112601 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/10220438</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491224</commentid>
    <comment_count>25</comment_count>
      <attachid>112601</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-26 15:30:25 -0700</bug_when>
    <thetext>Comment on attachment 112601
Updated patch addressing comments #21

Attachment 112601 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10223123</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491226</commentid>
    <comment_count>26</comment_count>
      <attachid>112601</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-10-26 15:33:23 -0700</bug_when>
    <thetext>Comment on attachment 112601
Updated patch addressing comments #21

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

The fastFree and ASCII vs Latin1 issues look like real bugs. The rest would just improve readability and performance.

I have a feeling that, in the end, we&apos;ll want all the inline fast cases to cover the 8bit case, moving the 16bit cases to out-of-line slow cases. (Right now, everything is in the same case, which probably defeats inlining. And we can&apos;t inline the 8bit case yet, since most strings are still 16bit.)

&gt; Source/JavaScriptCore/runtime/UString.h:140
&gt; +NEVER_INLINE bool equalSlowCase(const UString&amp; s1, const UString&amp; s2);
&gt; +
&gt;  ALWAYS_INLINE bool operator==(const UString&amp; s1, const UString&amp; s2)

Still worried this is too big to inline.

If it doesn&apos;t inline, perhaps you could: (1) inline just the size and buffer checks, and out-of-line everything else; (2) Do (1), and always just call memcmp with the right length for the slow case.

&gt; Source/JavaScriptCore/wtf/text/StringConcatenate.h:129
&gt; +            unsigned char c = m_buffer[i];
&gt; +            destination[i] = c;

This can just be destination[i] = m_buffer[i].

&gt; Source/JavaScriptCore/wtf/text/StringConcatenate.h:205
&gt; +            unsigned char c = m_buffer[i];
&gt; +            destination[i] = c;

Ditto.

&gt; Source/JavaScriptCore/wtf/text/StringHash.h:56
&gt; +            if (a-&gt;is8Bit()) {

As above, I&apos;m concerned that this can&apos;t inline anymore, and might need rejiggering to inline properly.

&gt; Source/JavaScriptCore/wtf/text/StringImpl.cpp:59
&gt; +    if (has16BitShadow() &amp;&amp; ((ownership == BufferInternal) || (ownership == BufferOwned))) {

if has16BitShadow() is true, we should unconditionally fastFree.

&gt; Source/JavaScriptCore/wtf/text/StringImpl.cpp:184
&gt; +    m_copyData16 = static_cast&lt;UChar*&gt;(fastCalloc(len, sizeof(UChar)));

Can this be fastMalloc instead?

&gt; Source/JavaScriptCore/wtf/text/StringImpl.cpp:407
&gt; +    if (is8Bit()) {
&gt; +        LChar* data;
&gt; +        RefPtr &lt;StringImpl&gt;newImpl = createUninitialized(m_length, data);
&gt; +        for (int32_t i = 0; i &lt; length; i++)
&gt; +            data[i] = toASCIILower(m_data8[i]);
&gt; +        return newImpl.release();
&gt; +    }

What happens here for a Latin1 string, when you call toASCIILower on its characters? I think you need to check each character for being ASCII.

&gt; Source/JavaScriptCore/wtf/text/StringImpl.cpp:748
&gt; +    size_t matchStringLength = strlen(reinterpret_cast&lt;const char *&gt;(matchString));

No space before &quot;*&quot;, please.

&gt; Source/JavaScriptCore/wtf/text/StringImpl.cpp:1017
&gt; +        memcpy(data, m_data8, position * sizeof(char));
&gt; +        if (str)
&gt; +            memcpy(data + position, str-&gt;m_data8, lengthToInsert * sizeof(char));
&gt; +        memcpy(data + position + lengthToInsert, m_data8 + position + lengthToReplace,
&gt; +               (length() - position - lengthToReplace) * sizeof(char));

Minor nit: should be sizeof(LChar) rather than sizeof(char) in these 3 places -- even though the math works out the same.

&gt; Source/JavaScriptCore/wtf/text/StringImpl.h:252
&gt; +    // FIXME: Add Vector&lt;char&gt; adopt?

This is probably more appropriate as a bug report, with an explanation of why you were considering that.

&gt; Source/JavaScriptCore/wtf/text/StringImpl.h:272
&gt; +    ALWAYS_INLINE const UChar* characters() const

Eventually, we&apos;ll want to rename characters() to &quot;deprecatedCharacters()&quot; to communicate this. (Not right now, though.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491295</commentid>
    <comment_count>27</comment_count>
      <attachid>112623</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-10-26 17:32:48 -0700</bug_when>
    <thetext>Created attachment 112623
Patch with updates suggested in comment #26, stylebot and build failures

&gt; &gt; Source/JavaScriptCore/runtime/UString.h:140
&gt; &gt; +NEVER_INLINE bool equalSlowCase(const UString&amp; s1, const UString&amp; s2);
&gt; &gt; +
&gt; &gt;  ALWAYS_INLINE bool operator==(const UString&amp; s1, const UString&amp; s2)
&gt; 
&gt; Still worried this is too big to inline.
&gt; 
&gt; If it doesn&apos;t inline, perhaps you could: (1) inline just the size and buffer checks, and out-of-line everything else; (2) Do (1), and always just call memcmp with the right length for the slow case.

It didn&apos;t inline, so I changed to (1) - size / buffer check, slow case the rest.

&gt; &gt; Source/JavaScriptCore/wtf/text/StringHash.h:56
&gt; &gt; +            if (a-&gt;is8Bit()) {
&gt; 
&gt; As above, I&apos;m concerned that this can&apos;t inline anymore, and might need rejiggering to inline properly.

The existing code doesn&apos;t inline this method.  The StringHash class is used in StringImpl.h to create a template class therefore the complete method in the .h file.

&gt; &gt; Source/JavaScriptCore/wtf/text/StringImpl.cpp:59
&gt; &gt; +    if (has16BitShadow() &amp;&amp; ((ownership == BufferInternal) || (ownership == BufferOwned))) {
&gt; 
&gt; if has16BitShadow() is true, we should unconditionally fastFree.

Done.

&gt; &gt; Source/JavaScriptCore/wtf/text/StringImpl.cpp:184
&gt; &gt; +    m_copyData16 = static_cast&lt;UChar*&gt;(fastCalloc(len, sizeof(UChar)));
&gt; 
&gt; Can this be fastMalloc instead?

Yes, done.

&gt; &gt; Source/JavaScriptCore/wtf/text/StringImpl.cpp:407
&gt; &gt; +    if (is8Bit()) {
&gt; &gt; +        LChar* data;
&gt; &gt; +        RefPtr &lt;StringImpl&gt;newImpl = createUninitialized(m_length, data);
&gt; &gt; +        for (int32_t i = 0; i &lt; length; i++)
&gt; &gt; +            data[i] = toASCIILower(m_data8[i]);
&gt; &gt; +        return newImpl.release();
&gt; &gt; +    }
&gt; 
&gt; What happens here for a Latin1 string, when you call toASCIILower on its characters? I think you need to check each character for being ASCII.

Updated StringImpl::lower(), ::upper() and ::foldCase() to work with Latin-1 strings with an ASCII fast path.

&gt; &gt; Source/JavaScriptCore/wtf/text/StringImpl.h:252
&gt; &gt; +    // FIXME: Add Vector&lt;char&gt; adopt?
&gt; 
&gt; This is probably more appropriate as a bug report, with an explanation of why you were considering that.

Removed.

Also cleaned up the sizeof(char) that should be sizeof(LChar) and other nits.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491315</commentid>
    <comment_count>28</comment_count>
      <attachid>112623</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-10-26 18:12:34 -0700</bug_when>
    <thetext>Comment on attachment 112623
Patch with updates suggested in comment #26, stylebot and build failures

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491316</commentid>
    <comment_count>29</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-10-26 18:13:02 -0700</bug_when>
    <thetext>Please watch the perf bot result to verify this is not a measurable regression.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491859</commentid>
    <comment_count>30</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-10-27 13:16:35 -0700</bug_when>
    <thetext>Committed r98624: &lt;http://trac.webkit.org/changeset/98624&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110327</attachid>
            <date>2011-10-09 22:04:46 -0700</date>
            <delta_ts>2011-10-10 17:43:44 -0700</delta_ts>
            <desc>Proposed StringImpl patch that supports 8 bit strings.</desc>
            <filename>66161.patch</filename>
            <type>text/plain</type>
            <size>78547</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTcwMzkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIzIEBA
CisyMDExLTEwLTA5ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIEludmVzdGlnYXRlIHN0b3Jpbmcgc3RyaW5ncyBpbiA4LWJpdCBidWZmZXJzIHdoZW4gcG9z
c2libGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2
MTYxCisKKyAgICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgOCBiaXQgc3RyaW5nIGRhdGEgaW4gU3Ry
aW5nSW1wbC4gIENoYW5nZWQKKyAgICAgICAgKFVDaGFyKikgbV9kYXRhIHRvIG1fZGF0YTE2LiAg
QWRkZWQgY2hhciogbV9kYXRhOCBhcyBhIHVuaW9uCisgICAgICAgIHdpdGggbV9kYXRhMTYuICBB
ZGRlZCBVQ2hhciogbV9jb3B5RGF0YTE2IHRvIHRoZSBvdGhlciB1bmlvbiAKKyAgICAgICAgdG8g
c3RvcmUgYSAxNiBiaXQgY29weSBvZiBhbiA4IGJpdCBzdHJpbmcgd2hlbiBuZWVkZWQuCisgICAg
ICAgIEFkZGVkIGNoYXJhY3RlcnM4KCkgYW5kIGNoYXJhY3RlcnMxNigpIGFjY2Vzc29yIG1ldGhv
ZHMKKyAgICAgICAgdGhhdCBhc3N1bWUgdGhlIGNhbGxlciBoYXMgY2hlY2tlZCB0aGUgdW5kZXJs
eWluZyBzdHJpbmcgdHlwZQorICAgICAgICB2aWEgdGhlIG5ldyBpczhCaXQoKSBtZXRob2QuIFRo
ZSBjaGFyYWN0ZXJzKCkgbWV0aG9kIHdpbGwgCisgICAgICAgIHJldHVybiBhIFVDaGFyKiBvZiB0
aGUgc3RyaW5nLCBtYXRlcmlhbGl6aW5nIGEgMTYgYml0IGNvcHkgaWYgdGhlCisgICAgICAgIHN0
cmluZyBpcyBhbiA4IGJpdCBzdHJpbmcuICBBZGRlZCB0d28gZmxhZ3MsIG9uZSBmb3IgOCBiaXQg
YnVmZmVyCisgICAgICAgIGFuZCBhIHNlY29uZCBmb3IgYSAxNiBiaXQgY29weSBmb3IgYW4gOCBi
aXQgc3RyaW5nLgorCisgICAgICAgIE92ZXIgdGltZSB0aGUgZ29hbCBpcyB0byBlbGltaW5hdGUg
Y2FsbHMgdG8gY2hhcmFjdGVycygpIGFuZCAKKyAgICAgICAgdXMgdGhlIGNoYXJhY3RlcjgoKSBh
bmQgY2hhcmFjdGVyczE2KCkgYWNjZXNzb3JzLgorCisgICAgICAgIFRoaXMgcGF0Y2ggZG9lcyBu
b3QgaW5jbHVkZSBjaGFuZ2VzIHRoYXQgYWN0dWFsbHkgY3JlYXRlIDggYml0CisgICAgICAgIHN0
cmluZ3MuIFRoaXMgaXMgdGhlIGZpcnN0IG9mIGF0IGxlYXN0IDggcGF0Y2hlcy4gIFN1YnNlcXVl
bnQKKyAgICAgICAgcGF0Y2hlcyB3aWxsIGJlIHN1Ym1pdHRlZCBmb3IgSklUIGNoYW5nZXMsIG1h
a2luZyB0aGUgSlNDIGxleGVyLAorICAgICAgICBwYXJzZXIgYW5kIGxpdGVyYWwgcGFyc2VyLCBK
YXZhU2NyaXB0IHN0cmluZyBjaGFuZ2VzIGFuZAorICAgICAgICB0aGVuIGNoYW5nZXMgaW4gd2Vi
Y29yZSB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGUgOCBiaXQgc3RyaW5ncy4KKworICAgICAgICBU
aGlzIGNoYW5nZSBpcyBwZXJmb3JtYW5jZSBuZXV0cmFsIGZvciBTdW5TcGlkZXIgYW5kIFY4IHdo
ZW4KKyAgICAgICAgcnVuIGZyb20gdGhlIGNvbW1hbmQgbGluZSB3aXRoICJqc2MiLgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogSmF2YVNjcmlwdENv
cmUuZXhwOgorICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJldGVyLmNwcDoKKyAgICAgICAg
KEpTQzo6SW50ZXJwcmV0ZXI6OmNhbGxFdmFsKToKKyAgICAgICAgKiBwYXJzZXIvU291cmNlUHJv
dmlkZXIuaDoKKyAgICAgICAgKEpTQzo6VVN0cmluZ1NvdXJjZVByb3ZpZGVyOjpkYXRhKToKKyAg
ICAgICAgKEpTQzo6VVN0cmluZ1NvdXJjZVByb3ZpZGVyOjpVU3RyaW5nU291cmNlUHJvdmlkZXIp
OgorICAgICAgICAqIHJ1bnRpbWUvSWRlbnRpZmllci5jcHA6CisgICAgICAgIChKU0M6OklkZW50
aWZpZXI6OnRvVUludDMyKToKKyAgICAgICAgKiBydW50aW1lL0pTU3RyaW5nLmNwcDoKKyAgICAg
ICAgKEpTQzo6SlNTdHJpbmc6OnJlc29sdmVSb3BlKToKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6
OnJlc29sdmVSb3BlU2xvd0Nhc2UpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwLmNwcDoKKyAg
ICAgICAgKEpTQzo6UmVnRXhwOjptYXRjaCk6CisgICAgICAgICogcnVudGltZS9TdHJpbmdQcm90
b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpqc1NwbGljZVN1YnN0cmluZ3NXaXRoU2VwYXJhdG9y
cyk6CisgICAgICAgICogcnVudGltZS9VU3RyaW5nLmNwcDoKKyAgICAgICAgKEpTQzo6VVN0cmlu
Zzo6dXRmOCk6CisgICAgICAgICogcnVudGltZS9VU3RyaW5nLmg6CisgICAgICAgIChKU0M6OlVT
dHJpbmc6OmNoYXJhY3RlcnMpOgorICAgICAgICAoSlNDOjpVU3RyaW5nOjpjaGFyYWN0ZXJzOCk6
CisgICAgICAgIChKU0M6OlVTdHJpbmc6OmNoYXJhY3RlcnMxNik6CisgICAgICAgIChKU0M6OlVT
dHJpbmc6OmlzOEJpdCk6CisgICAgICAgIChKU0M6OlVTdHJpbmc6Om9wZXJhdG9yW10pOgorICAg
ICAgICAoSlNDOjpjaGFyKToKKyAgICAgICAgKEpTQzo6VUNoYXIpOgorICAgICAgICAoSlNDOjpv
cGVyYXRvcj09KToKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdIYXNoLmg6CisgICAgICAgIChX
VEY6OlN0cmluZ0hhc2g6OmVxdWFsKToKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdJbXBsLmNw
cDoKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6flN0cmluZ0ltcGwpOgorICAgICAgICAoV1RG
OjpTdHJpbmdJbXBsOjpjcmVhdGVVbmluaXRpYWxpemVkKToKKyAgICAgICAgKFdURjo6U3RyaW5n
SW1wbDo6c2hhcmVkQnVmZmVyMTYpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpnZXREYXRh
MTZTbG93Q2FzZSk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OmNvbnRhaW5zT25seVdoaXRl
c3BhY2UpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpzdWJzdHJpbmcpOgorICAgICAgICAo
V1RGOjpTdHJpbmdJbXBsOjpjaGFyYWN0ZXJTdGFydGluZ0F0KToKKyAgICAgICAgKFdURjo6U3Ry
aW5nSW1wbDo6bG93ZXIpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjp1cHBlcik6CisgICAg
ICAgIChXVEY6OlN0cmluZ0ltcGw6OmZpbGwpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpm
b2xkQ2FzZSk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OnN0cmlwTWF0Y2hlZENoYXJhY3Rl
cnMpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpyZW1vdmVDaGFyYWN0ZXJzKToKKyAgICAg
ICAgKFdURjo6U3RyaW5nSW1wbDo6c2ltcGxpZnlNYXRjaGVkQ2hhcmFjdGVyc1RvU3BhY2UpOgor
ICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjp0b0ludFN0cmljdCk6CisgICAgICAgIChXVEY6OlN0
cmluZ0ltcGw6OnRvVUludFN0cmljdCk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OnRvSW50
NjRTdHJpY3QpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjp0b1VJbnQ2NFN0cmljdCk6Cisg
ICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OnRvSW50UHRyU3RyaWN0KToKKyAgICAgICAgKFdURjo6
U3RyaW5nSW1wbDo6dG9JbnQpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjp0b1VJbnQpOgor
ICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjp0b0ludDY0KToKKyAgICAgICAgKFdURjo6U3RyaW5n
SW1wbDo6dG9VSW50NjQpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjp0b0ludFB0cik6Cisg
ICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OnRvRG91YmxlKToKKyAgICAgICAgKFdURjo6U3RyaW5n
SW1wbDo6dG9GbG9hdCk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OmZpbmQpOgorICAgICAg
ICAoV1RGOjpTdHJpbmdJbXBsOjpyZXZlcnNlRmluZCk6CisgICAgICAgIChXVEY6OlN0cmluZ0lt
cGw6OnJlcGxhY2UpOgorICAgICAgICAoV1RGOjplcXVhbCk6CisgICAgICAgIChXVEY6OmVxdWFs
SWdub3JpbmdDYXNlKToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6ZGVmYXVsdFdyaXRpbmdE
aXJlY3Rpb24pOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpjcmVhdGVTdHJpcHBpbmdOdWxs
Q2hhcmFjdGVyc1Nsb3dDYXNlKToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6YWRvcHQpOgor
ICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpjcmVhdGVXaXRoVGVybWluYXRpbmdOdWxsQ2hhcmFj
dGVyKToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6dGhyZWFkc2FmZUNvcHkpOgorICAgICAg
ICAoV1RGOjpTdHJpbmdJbXBsOjpjcm9zc1RocmVhZFN0cmluZyk6CisgICAgICAgICogd3RmL3Rl
eHQvU3RyaW5nSW1wbC5oOgorICAgICAgICAoV1RGOjp1bnNpZ25lZENoYXJWYWx1ZSk6CisgICAg
ICAgIChXVEY6OmNoYXIpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpTdHJpbmdJbXBsKToK
KyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6c2V0SGFzaCk6CisgICAgICAgIChXVEY6OlN0cmlu
Z0ltcGw6OmNyZWF0ZTgpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpjcmVhdGUpOgorICAg
ICAgICAoV1RGOjpTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkKToKKyAgICAgICAg
KFdURjo6U3RyaW5nSW1wbDo6ZmxhZ3NPZmZzZXQpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBs
OjpmbGFnSXM4Qml0KToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6ZGF0YU9mZnNldCk6Cisg
ICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OmNoYXJhY3RlcnM4KToKKyAgICAgICAgKFdURjo6U3Ry
aW5nSW1wbDo6Y2hhcmFjdGVyczE2KToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6Y2hhcmFj
dGVycyk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OmhhczE2Qml0U2hhZG93KToKKyAgICAg
ICAgKFdURjo6U3RyaW5nSW1wbDo6aGFzaCk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OmNv
cHlDaGFycyk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6Om9wZXJhdG9yW10pOgorICAgICAg
ICAoV1RGOjpVQ2hhcik6CisgICAgICAgICogd3RmL3RleHQvU3RyaW5nSW1wbEJhc2UuaDoKKyAg
ICAgICAgKFdURjo6U3RyaW5nSW1wbEJhc2U6OmlzOEJpdCk6CisgICAgICAgICogeWFyci9ZYXJy
UGFyc2VyLmg6CisgICAgICAgIChKU0M6OllhcnI6OlBhcnNlcjo6UGFyc2VyKToKKwogMjAxMS0x
MC0wOSAgWXVxaWFuZyBYaWFuICA8eXVxaWFuZy54aWFuQGludGVsLmNvbT4KIAogICAgICAgICBJ
bXByb3ZlIE51bGwgb3IgVW5kZWZpbmVkIHRlc3QgaW4gMzJfNjQgREZHCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJKHJldmlzaW9uIDk3MDAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAkod29ya2luZyBjb3B5KQpAQCAt
MzU3LDcgKzM1Nyw2IEBAIF9fWk4zSlNDZ3RFUktOU183VVN0cmluZ0VTMl8KIF9fWk4zSlNDbHRF
UktOU183VVN0cmluZ0VTMl8KIF9fWk4zV1RGMTBTdHJpbmdJbXBsMTFyZXZlcnNlRmluZEVQUzBf
agogX19aTjNXVEYxMFN0cmluZ0ltcGwxMXJldmVyc2VGaW5kRXRqCi1fX1pOM1dURjEwU3RyaW5n
SW1wbDEyc2hhcmVkQnVmZmVyRXYKIF9fWk4zV1RGMTBTdHJpbmdJbXBsMTZmaW5kSWdub3JpbmdD
YXNlRVBLY2oKIF9fWk4zV1RGMTBTdHJpbmdJbXBsMTZmaW5kSWdub3JpbmdDYXNlRVBTMF9qCiBf
X1pOM1dURjEwU3RyaW5nSW1wbDE4c2ltcGxpZnlXaGl0ZVNwYWNlRXYKQEAgLTU4Niw2ICs1ODUs
NyBAQCBfX1pOSzNKU0M4SlNTdHJpbmcxMXJlc29sdmVSb3BlRVBOU185RXhlCiBfX1pOSzNKU0M4
SlNTdHJpbmc5dG9Cb29sZWFuRVBOU185RXhlY1N0YXRlRQogX19aTkszSlNDOUhhc2hUYWJsZTEx
Y3JlYXRlVGFibGVFUE5TXzEySlNHbG9iYWxEYXRhRQogX19aTkszSlNDOUhhc2hUYWJsZTExZGVs
ZXRlVGFibGVFdgorX19aTkszV1RGMTBTdHJpbmdJbXBsMTdnZXREYXRhMTZTbG93Q2FzZUV2CiBf
X1pOSzNXVEYxMkF0b21pY1N0cmluZzVsb3dlckV2CiBfX1pOSzNXVEYxM0RlY2ltYWxOdW1iZXIx
NXRvU3RyaW5nRGVjaW1hbEVQdGoKIF9fWk5LM1dURjEzRGVjaW1hbE51bWJlcjE5dG9TdHJpbmdF
eHBvbmVudGlhbEVQdGoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9J
bnRlcnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0ludGVycHJldGVyLmNwcAkocmV2aXNpb24gOTcwMDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
NDUsNyArNDQ1LDcgQEAgTkVWRVJfSU5MSU5FIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmNhbGxFdgog
ICAgICAgICBpZiAoIWNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkpIHsKICAgICAgICAgICAgIC8v
IEZJWE1FOiBXZSBjYW4gdXNlIHRoZSBwcmVwYXJzZXIgaW4gc3RyaWN0IG1vZGUsIHdlIGp1c3Qg
bmVlZCBhZGRpdGlvbmFsIGxvZ2ljCiAgICAgICAgICAgICAvLyB0byBwcmV2ZW50IGR1cGxpY2F0
ZXMuCi0gICAgICAgICAgICBMaXRlcmFsUGFyc2VyIHByZXBhcnNlcihjYWxsRnJhbWUsIHByb2dy
YW1Tb3VyY2UuY2hhcmFjdGVycygpLCBwcm9ncmFtU291cmNlLmxlbmd0aCgpLCBMaXRlcmFsUGFy
c2VyOjpOb25TdHJpY3RKU09OKTsKKyAgICAgICAgICAgIExpdGVyYWxQYXJzZXIgcHJlcGFyc2Vy
KGNhbGxGcmFtZSwgcHJvZ3JhbVNvdXJjZS5jaGFyYWN0ZXJzMTYoKSwgcHJvZ3JhbVNvdXJjZS5s
ZW5ndGgoKSwgTGl0ZXJhbFBhcnNlcjo6Tm9uU3RyaWN0SlNPTik7CiAgICAgICAgICAgICBpZiAo
SlNWYWx1ZSBwYXJzZWRPYmplY3QgPSBwcmVwYXJzZXIudHJ5TGl0ZXJhbFBhcnNlKCkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIHBhcnNlZE9iamVjdDsKICAgICAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VQcm92aWRlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlUHJvdmlkZXIuaAkocmV2aXNpb24gOTcw
MDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJjZVByb3ZpZGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTg4LDE3ICs4OCwxOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
ewogICAgICAgICAgICAgcmV0dXJuIG1fc291cmNlLnN1YnN0cmluZ1NoYXJpbmdJbXBsKHN0YXJ0
LCBlbmQgLSBzdGFydCk7CiAgICAgICAgIH0KLSAgICAgICAgY29uc3QgVUNoYXIqIGRhdGEoKSBj
b25zdCB7IHJldHVybiBtX3NvdXJjZS5jaGFyYWN0ZXJzKCk7IH0KKyAgICAgICAgY29uc3QgVUNo
YXIqIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0KICAgICAgICAgaW50IGxlbmd0aCgp
IGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLmxlbmd0aCgpOyB9CiAKICAgICBwcml2YXRlOgogICAg
ICAgICBVU3RyaW5nU291cmNlUHJvdmlkZXIoY29uc3QgVVN0cmluZyYgc291cmNlLCBjb25zdCBV
U3RyaW5nJiB1cmwpCiAgICAgICAgICAgICA6IFNvdXJjZVByb3ZpZGVyKHVybCkKICAgICAgICAg
ICAgICwgbV9zb3VyY2Uoc291cmNlKQorICAgICAgICAgICAgLCBtX2RhdGEobV9zb3VyY2UuY2hh
cmFjdGVyczE2KCkpCiAgICAgICAgIHsKICAgICAgICAgfQogCiAgICAgICAgIFVTdHJpbmcgbV9z
b3VyY2U7CisgICAgICAgIGNvbnN0IFVDaGFyKiBtX2RhdGE7CiAgICAgfTsKICAgICAKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRp
Zmllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRl
bnRpZmllci5jcHAJKHJldmlzaW9uIDk3MDAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSWRlbnRpZmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NCwxMiArMTU0LDEzIEBA
IHVpbnQzMl90IElkZW50aWZpZXI6OnRvVUludDMyKGNvbnN0IFVTdHIKICAgICBvayA9IGZhbHNl
OwogCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOwotICAgIGNvbnN0IFVD
aGFyKiBjaGFyYWN0ZXJzID0gc3RyaW5nLmNoYXJhY3RlcnMoKTsKIAogICAgIC8vIEFuIGVtcHR5
IHN0cmluZyBpcyBub3QgYSBudW1iZXIuCiAgICAgaWYgKCFsZW5ndGgpCiAgICAgICAgIHJldHVy
biAwOwogCisgICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSBzdHJpbmcuY2hhcmFjdGVyczE2
KCk7CisKICAgICAvLyBHZXQgdGhlIGZpcnN0IGNoYXJhY3RlciwgdHVybmluZyBpdCBpbnRvIGEg
ZGlnaXQuCiAgICAgdWludDMyX3QgdmFsdWUgPSBjaGFyYWN0ZXJzWzBdIC0gJzAnOwogICAgIGlm
ICh2YWx1ZSA+IDkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmlu
Zy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJp
bmcuY3BwCShyZXZpc2lvbiA5NzAwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU3RyaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksMTQgKzU5LDE0IEBAIHZvaWQgSlNT
dHJpbmc6OnJlc29sdmVSb3BlKEV4ZWNTdGF0ZSogZXgKICAgICBVQ2hhciogcG9zaXRpb24gPSBi
dWZmZXI7CiAgICAgU3RyaW5nSW1wbCogc3RyaW5nID0gc3RhdGljX2Nhc3Q8U3RyaW5nSW1wbCo+
KGN1cnJlbnRGaWJlcik7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RyaW5nLT5sZW5ndGgoKTsK
LSAgICBTdHJpbmdJbXBsOjpjb3B5Q2hhcnMocG9zaXRpb24sIHN0cmluZy0+Y2hhcmFjdGVycygp
LCBsZW5ndGgpOworICAgIFN0cmluZ0ltcGw6OmNvcHlDaGFycyhwb3NpdGlvbiwgc3RyaW5nLT5j
aGFyYWN0ZXJzMTYoKSwgbGVuZ3RoKTsKIAogICAgIGlmIChtX2ZpYmVyQ291bnQgPiAxKSB7CiAg
ICAgICAgIHBvc2l0aW9uICs9IGxlbmd0aDsKICAgICAgICAgY3VycmVudEZpYmVyID0gbV9maWJl
cnNbMV07CiAgICAgICAgIHN0cmluZyA9IHN0YXRpY19jYXN0PFN0cmluZ0ltcGwqPihjdXJyZW50
RmliZXIpOwogICAgICAgICBsZW5ndGggPSBzdHJpbmctPmxlbmd0aCgpOwotICAgICAgICBTdHJp
bmdJbXBsOjpjb3B5Q2hhcnMocG9zaXRpb24sIHN0cmluZy0+Y2hhcmFjdGVycygpLCBsZW5ndGgp
OworICAgICAgICBTdHJpbmdJbXBsOjpjb3B5Q2hhcnMocG9zaXRpb24sIHN0cmluZy0+Y2hhcmFj
dGVyczE2KCksIGxlbmd0aCk7CiAgICAgICAgIHBvc2l0aW9uICs9IGxlbmd0aDsKICAgICB9CiAK
QEAgLTExNSw3ICsxMTUsNyBAQCB2b2lkIEpTU3RyaW5nOjpyZXNvbHZlUm9wZVNsb3dDYXNlKEV4
ZWNTCiAgICAgICAgICAgICBTdHJpbmdJbXBsKiBzdHJpbmcgPSBzdGF0aWNfY2FzdDxTdHJpbmdJ
bXBsKj4oY3VycmVudEZpYmVyKTsKICAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmlu
Zy0+bGVuZ3RoKCk7CiAgICAgICAgICAgICBwb3NpdGlvbiAtPSBsZW5ndGg7Ci0gICAgICAgICAg
ICBTdHJpbmdJbXBsOjpjb3B5Q2hhcnMocG9zaXRpb24sIHN0cmluZy0+Y2hhcmFjdGVycygpLCBs
ZW5ndGgpOworICAgICAgICAgICAgU3RyaW5nSW1wbDo6Y29weUNoYXJzKHBvc2l0aW9uLCBzdHJp
bmctPmNoYXJhY3RlcnMxNigpLCBsZW5ndGgpOwogCiAgICAgICAgICAgICAvLyBXYXMgdGhpcyB0
aGUgbGFzdCBpdGVtIGluIHRoZSB3b3JrIHF1ZXVlPwogICAgICAgICAgICAgaWYgKHdvcmtRdWV1
ZS5pc0VtcHR5KCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4
cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
LmNwcAkocmV2aXNpb24gOTcwMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9S
ZWdFeHAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjYsOSArMzY2LDkgQEAgaW50IFJlZ0V4cDo6
bWF0Y2goSlNHbG9iYWxEYXRhJiBnbG9iYWxEYQogI2lmIEVOQUJMRShZQVJSX0pJVCkKICAgICAg
ICAgaWYgKG1fc3RhdGUgPT0gSklUQ29kZSkgewogICAgICAgICAgICAgaWYgKHMuaXM4Qml0KCkp
Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gWWFycjo6ZXhlY3V0ZShtX3JlcHJlc2VudGF0aW9u
LT5tX3JlZ0V4cEpJVENvZGUsIHMubGF0aW4xKCkuZGF0YSgpLCBzdGFydE9mZnNldCwgcy5sZW5n
dGgoKSwgb2Zmc2V0VmVjdG9yKTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBZYXJyOjpleGVj
dXRlKG1fcmVwcmVzZW50YXRpb24tPm1fcmVnRXhwSklUQ29kZSwgcy5jaGFyYWN0ZXJzOCgpLCBz
dGFydE9mZnNldCwgcy5sZW5ndGgoKSwgb2Zmc2V0VmVjdG9yKTsKICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICByZXN1bHQgPSBZYXJyOjpleGVjdXRlKG1fcmVwcmVzZW50YXRpb24t
Pm1fcmVnRXhwSklUQ29kZSwgcy5jaGFyYWN0ZXJzKCksIHN0YXJ0T2Zmc2V0LCBzLmxlbmd0aCgp
LCBvZmZzZXRWZWN0b3IpOworICAgICAgICAgICAgICAgIHJlc3VsdCA9IFlhcnI6OmV4ZWN1dGUo
bV9yZXByZXNlbnRhdGlvbi0+bV9yZWdFeHBKSVRDb2RlLCBzLmNoYXJhY3RlcnMxNigpLCBzdGFy
dE9mZnNldCwgcy5sZW5ndGgoKSwgb2Zmc2V0VmVjdG9yKTsKICNpZiBFTkFCTEUoWUFSUl9KSVRf
REVCVUcpCiAgICAgICAgICAgICBtYXRjaENvbXBhcmVXaXRoSW50ZXJwcmV0ZXIocywgc3RhcnRP
ZmZzZXQsIG9mZnNldFZlY3RvciwgcmVzdWx0KTsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCShyZXZpc2lvbiA5
NzAwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMzMCwxMyArMzMwLDEzIEBAIHN0YXRpYyBBTFdBWVNfSU5M
SU5FIEpTVmFsdWUganNTcGxpY2VTdWIKICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1heENvdW50
OyBpKyspIHsKICAgICAgICAgaWYgKGkgPCByYW5nZUNvdW50KSB7CiAgICAgICAgICAgICBpZiAo
aW50IHNyY0xlbiA9IHN1YnN0cmluZ1Jhbmdlc1tpXS5sZW5ndGgpIHsKLSAgICAgICAgICAgICAg
ICBTdHJpbmdJbXBsOjpjb3B5Q2hhcnMoYnVmZmVyICsgYnVmZmVyUG9zLCBzb3VyY2UuY2hhcmFj
dGVycygpICsgc3Vic3RyaW5nUmFuZ2VzW2ldLnBvc2l0aW9uLCBzcmNMZW4pOworICAgICAgICAg
ICAgICAgIFN0cmluZ0ltcGw6OmNvcHlDaGFycyhidWZmZXIgKyBidWZmZXJQb3MsIHNvdXJjZS5j
aGFyYWN0ZXJzMTYoKSArIHN1YnN0cmluZ1Jhbmdlc1tpXS5wb3NpdGlvbiwgc3JjTGVuKTsKICAg
ICAgICAgICAgICAgICBidWZmZXJQb3MgKz0gc3JjTGVuOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgICAgIGlmIChpIDwgc2VwYXJhdG9yQ291bnQpIHsKICAgICAgICAgICAgIGlmIChp
bnQgc2VwTGVuID0gc2VwYXJhdG9yc1tpXS5sZW5ndGgoKSkgewotICAgICAgICAgICAgICAgIFN0
cmluZ0ltcGw6OmNvcHlDaGFycyhidWZmZXIgKyBidWZmZXJQb3MsIHNlcGFyYXRvcnNbaV0uY2hh
cmFjdGVycygpLCBzZXBMZW4pOworICAgICAgICAgICAgICAgIFN0cmluZ0ltcGw6OmNvcHlDaGFy
cyhidWZmZXIgKyBidWZmZXJQb3MsIHNlcGFyYXRvcnNbaV0uY2hhcmFjdGVyczE2KCksIHNlcExl
bik7CiAgICAgICAgICAgICAgICAgYnVmZmVyUG9zICs9IHNlcExlbjsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZy5j
cHAJKHJldmlzaW9uIDk3MDAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0
cmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxNyw3ICszMTcsOSBAQCBzdGF0aWMgaW5saW5l
IHZvaWQgcHV0VVRGOFRyaXBsZShjaGFyKiYgCiBDU3RyaW5nIFVTdHJpbmc6OnV0ZjgoYm9vbCBz
dHJpY3QpIGNvbnN0CiB7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gdGhpcy0+bGVuZ3RoKCk7Ci0g
ICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSB0aGlzLT5jaGFyYWN0ZXJzKCk7CisKKyAgICBp
ZiAoaXM4Qml0KCkpCisgICAgICAgIHJldHVybiBDU3RyaW5nKGNoYXJhY3RlcnM4KCksIGxlbmd0
aCk7CiAKICAgICAvLyBBbGxvY2F0ZSBhIGJ1ZmZlciBiaWcgZW5vdWdoIHRvIGhvbGQgYWxsIHRo
ZSBjaGFyYWN0ZXJzCiAgICAgLy8gKGFuIGluZGl2aWR1YWwgVVRGLTE2IFVDaGFyIGNhbiBvbmx5
IGV4cGFuZCB0byAzIFVURi04IGJ5dGVzKS4KQEAgLTMzMSw2ICszMzMsOCBAQCBDU3RyaW5nIFVT
dHJpbmc6OnV0ZjgoYm9vbCBzdHJpY3QpIGNvbnN0CiAgICAgLy8gICAgYnVmZmVyIHdpdGhvdXQg
cmVhbGxvY2luZyAoc2F5LCAxLjUgeCBsZW5ndGgpLgogICAgIGlmIChsZW5ndGggPiBudW1lcmlj
X2xpbWl0czx1bnNpZ25lZD46Om1heCgpIC8gMykKICAgICAgICAgcmV0dXJuIENTdHJpbmcoKTsK
KworICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0gdGhpcy0+Y2hhcmFjdGVyczE2KCk7CiAg
ICAgVmVjdG9yPGNoYXIsIDEwMjQ+IGJ1ZmZlclZlY3RvcihsZW5ndGggKiAzKTsKIAogICAgIGNo
YXIqIGJ1ZmZlciA9IGJ1ZmZlclZlY3Rvci5kYXRhKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9VU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVVN0cmluZy5oCShyZXZpc2lvbiA5NzAwMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1VTdHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsMTAgKzczLDI4
IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmICghbV9pbXBsKQogICAgICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgICAgIHJldHVybiBtX2ltcGwtPmNoYXJhY3RlcnMoKTsKKyAgICAgICAgcmV0
dXJuIG1faW1wbC0+Y2hhcmFjdGVyczE2KCk7CiAgICAgfQogCi0gICAgYm9vbCBpczhCaXQoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIGNvbnN0IGNoYXIqIGNoYXJhY3RlcnM4KCkgY29u
c3QKKyAgICB7CisgICAgICAgIGlmICghbV9pbXBsKQorICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgIEFTU0VSVChtX2ltcGwtPmlzOEJpdCgpKTsKKyAgICAgICAgcmV0dXJuIG1faW1wbC0+
Y2hhcmFjdGVyczgoKTsKKyAgICB9CisKKyAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVyczE2KCkg
Y29uc3QKKyAgICB7CisgICAgICAgIGlmICghbV9pbXBsKQorICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgIEFTU0VSVCghbV9pbXBsLT5pczhCaXQoKSk7CisgICAgICAgIHJldHVybiBtX2lt
cGwtPmNoYXJhY3RlcnMxNigpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJU
eXBlPgorICAgIGlubGluZSBjb25zdCBDaGFyVHlwZSogZ2V0Q2hhcmFjdGVycygpIGNvbnN0Owor
ICAgIGJvb2wgaXM4Qml0KCkgY29uc3QgeyByZXR1cm4gbV9pbXBsLT5pczhCaXQoKTsgfQogCiAg
ICAgQ1N0cmluZyBhc2NpaSgpIGNvbnN0OwogICAgIENTdHJpbmcgbGF0aW4xKCkgY29uc3Q7CkBA
IC04Niw3ICsxMDQsOSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAoIW1faW1wbCB8fCBp
bmRleCA+PSBtX2ltcGwtPmxlbmd0aCgpKQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAg
IHJldHVybiBtX2ltcGwtPmNoYXJhY3RlcnMoKVtpbmRleF07CisgICAgICAgIGlmIChpczhCaXQo
KSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihtX2ltcGwt
PmNoYXJhY3RlcnM4KClbaW5kZXhdKTsKKyAgICAgICAgcmV0dXJuIG1faW1wbC0+Y2hhcmFjdGVy
czE2KClbaW5kZXhdOwogICAgIH0KIAogICAgIHN0YXRpYyBVU3RyaW5nIG51bWJlcihpbnQpOwpA
QCAtMTE1LDYgKzEzNSwxOCBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBtX2lt
cGw7CiB9OwogCit0ZW1wbGF0ZTw+CitpbmxpbmUgY29uc3QgY2hhciogVVN0cmluZzo6Z2V0Q2hh
cmFjdGVyczxjaGFyPigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNoYXJhY3RlcnM4KCk7Cit9CisK
K3RlbXBsYXRlPD4KK2lubGluZSBjb25zdCBVQ2hhciogVVN0cmluZzo6Z2V0Q2hhcmFjdGVyczxV
Q2hhcj4oKSBjb25zdAoreworICAgIHJldHVybiBjaGFyYWN0ZXJzMTYoKTsKK30KKwogQUxXQVlT
X0lOTElORSBib29sIG9wZXJhdG9yPT0oY29uc3QgVVN0cmluZyYgczEsIGNvbnN0IFVTdHJpbmcm
IHMyKQogewogICAgIFN0cmluZ0ltcGwqIHJlcDEgPSBzMS5pbXBsKCk7CkBAIC0xMjQsMjggKzE1
Niw2OCBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgb3BlcmF0b3I9PShjb25zdCBVU3RyCiAKICAgICBp
ZiAocmVwMSA9PSByZXAyKSAvLyBJZiB0aGV5J3JlIHRoZSBzYW1lIHJlcCwgdGhleSdyZSBlcXVh
bC4KICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCisKICAgICBpZiAocmVwMSkKICAgICAgICAg
c2l6ZTEgPSByZXAxLT5sZW5ndGgoKTsKLSAgICAgICAgCisKICAgICBpZiAocmVwMikKICAgICAg
ICAgc2l6ZTIgPSByZXAyLT5sZW5ndGgoKTsKLSAgICAgICAgCisKICAgICBpZiAoc2l6ZTEgIT0g
c2l6ZTIpIC8vIElmIHRoZSBsZW5ndGhzIGFyZSBub3QgdGhlIHNhbWUsIHdlJ3JlIGRvbmUuCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKwogICAgIGlmICghc2l6ZTEpCiAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgIAorCiAgICAgLy8gQXQgdGhpcyBwb2ludCB3ZSBrbm93IAogICAgIC8v
ICAgKGEpIHRoYXQgdGhlIHN0cmluZ3MgYXJlIHRoZSBzYW1lIGxlbmd0aCBhbmQKICAgICAvLyAg
IChiKSB0aGF0IHRoZXkgYXJlIGdyZWF0ZXIgdGhhbiB6ZXJvIGxlbmd0aC4KLSAgICBjb25zdCBV
Q2hhciogZDEgPSByZXAxLT5jaGFyYWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIqIGQyID0gcmVw
Mi0+Y2hhcmFjdGVycygpOwotICAgIAorICAgIGlmIChyZXAxLT5pczhCaXQoKSkgeworICAgICAg
ICBjb25zdCBjaGFyKiBkMSA9IHJlcDEtPmNoYXJhY3RlcnM4KCk7CisgICAgICAgIGlmIChyZXAy
LT5pczhCaXQoKSkgeworICAgICAgICAgICAgY29uc3QgY2hhciogZDIgPSByZXAyLT5jaGFyYWN0
ZXJzOCgpOworCisgICAgICAgICAgICBpZiAoZDEgPT0gZDIpIC8vIENoZWNrIHRvIHNlZSBpZiB0
aGUgZGF0YSBwb2ludGVycyBhcmUgdGhlIHNhbWUuCisgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICAgICAgICAgIC8vIERvIHF1aWNrIGNoZWNrcyBmb3Igc2l6ZXMgMSBhbmQgMi4K
KyAgICAgICAgICAgIHN3aXRjaCAoc2l6ZTEpIHsKKyAgICAgICAgICAgIGNhc2UgMToKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZDFbMF0gPT0gZDJbMF07CisgICAgICAgICAgICBjYXNlIDI6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIChkMVswXSA9PSBkMlswXSkgJiAoZDFbMV0gPT0gZDJbMV0p
OworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gKCFtZW1jbXAo
ZDEsIGQyLCBzaXplMSAqIHNpemVvZihjaGFyKSkpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgY29uc3QgVUNoYXIqIGQyID0gcmVwMi0+Y2hhcmFjdGVyczE2KCk7CisKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemUxOyBpKyspIHsKKyAgICAgICAgICAg
IGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihkMVtpXSkgIT0gZDJbaV0pCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKworICAgIGlmIChyZXAyLT5pczhCaXQoKSkgeworICAgICAgICBjb25zdCBVQ2hhciog
ZDEgPSByZXAxLT5jaGFyYWN0ZXJzMTYoKTsKKyAgICAgICAgY29uc3QgY2hhciogZDIgPSByZXAy
LT5jaGFyYWN0ZXJzOCgpOworCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXpl
MTsgaSsrKSB7CisgICAgICAgICAgICBpZiAoZDFbaV0gIT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQg
Y2hhcj4oZDJbaV0pKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIH0KKworICAgIGNvbnN0IFVDaGFyKiBkMSA9IHJl
cDEtPmNoYXJhY3RlcnMxNigpOworICAgIGNvbnN0IFVDaGFyKiBkMiA9IHJlcDItPmNoYXJhY3Rl
cnMxNigpOworCiAgICAgaWYgKGQxID09IGQyKSAvLyBDaGVjayB0byBzZWUgaWYgdGhlIGRhdGEg
cG9pbnRlcnMgYXJlIHRoZSBzYW1lLgogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKKwogICAg
IC8vIERvIHF1aWNrIGNoZWNrcyBmb3Igc2l6ZXMgMSBhbmQgMi4KICAgICBzd2l0Y2ggKHNpemUx
KSB7CiAgICAgY2FzZSAxOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1N0
cmluZ0hhc2guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQv
U3RyaW5nSGFzaC5oCShyZXZpc2lvbiA5NzAwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvdGV4dC9TdHJpbmdIYXNoLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDExICs1Myw2NSBAQCBu
YW1lc3BhY2UgV1RGIHsKICAgICAgICAgICAgIGlmIChhTGVuZ3RoICE9IGJMZW5ndGgpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgICAgICAgICBpZiAoYS0+aXM4Qml0KCkp
IHsKKyAgICAgICAgICAgICAgICBpZiAoYi0+aXM4Qml0KCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgLy8gRklYTUU6IHBlcmhhcHMgd2Ugc2hvdWxkIGhhdmUgYSBtb3JlIGFic3RyYWN0IG1hY3Jv
IHRoYXQgaW5kaWNhdGVzIHdoZW4KKyAgICAgICAgICAgICAgICAgICAgLy8gZ29pbmcgNCBieXRl
cyBhdCBhIHRpbWUgaXMgdW5zYWZlCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFD
aGFycyA9IGEtPmNoYXJhY3RlcnM4KCk7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIq
IGJDaGFycyA9IGItPmNoYXJhY3RlcnM4KCk7CisKKyAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgaSA9IDA7CisjaWYgKENQVShYODYpIHx8IENQVShYODZfNjQpKQorICAgICAgICAgICAgICAg
ICAgICBjb25zdCB1bnNpZ25lZCBjaGFyc1BlckludCA9IHNpemVvZih1aW50MzJfdCkgLyBzaXpl
b2YoY2hhcik7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAo
YUxlbmd0aCA+IGNoYXJzUGVySW50KSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBzdG9wQ291bnQgPSBhTGVuZ3RoICYgfihjaGFyc1BlckludCAtIDEpOworICAgICAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50MzJfdCogYUlu
dENoYXJhY3RlcnMgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oYUNoYXJzKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90KiBiSW50Q2hhcmFjdGVycyA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihiQ2hhcnMpOworICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaSA8IHN0b3BDb3VudDsgaSArPSBjaGFy
c1BlckludCwgKytqKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFJbnRDaGFy
YWN0ZXJzW2pdICE9IGJJbnRDaGFyYWN0ZXJzW2pdKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICBmb3IgKDsgaSA8IGFM
ZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFDaGFyc1tpXSAhPSBi
Q2hhcnNbaV0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAv
LyBhIGlzIDhiaXQsIGIgaXMgMTZiaXQKKyAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBhQ2hh
cnMgPSBhLT5jaGFyYWN0ZXJzOCgpOworICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBiQ2hh
cnMgPSBiLT5jaGFyYWN0ZXJzMTYoKTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpICE9IGFMZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBpZiAodW5zaWdu
ZWRDaGFyVmFsdWUoKmFDaGFycysrKSAhPSAqYkNoYXJzKyspCisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChiLT5pczhCaXQo
KSkgeworICAgICAgICAgICAgICAgIC8vIGEgaXMgOGJpdCwgYiBpcyAxNmJpdAorICAgICAgICAg
ICAgICAgIGNvbnN0IFVDaGFyKiBhQ2hhcnMgPSBhLT5jaGFyYWN0ZXJzMTYoKTsKKyAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyKiBiQ2hhcnMgPSBiLT5jaGFyYWN0ZXJzOCgpOworICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgIT0gYUxlbmd0aDsgKytpKSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmICgqYUNoYXJzKysgIT0gdW5zaWduZWRDaGFyVmFsdWUoKmJDaGFycysr
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgLy8gMTZiaXQgYSAmIGIKICAgICAgICAgICAgIC8vIEZJWE1FOiBwZXJoYXBzIHdl
IHNob3VsZCBoYXZlIGEgbW9yZSBhYnN0cmFjdCBtYWNybyB0aGF0IGluZGljYXRlcyB3aGVuCiAg
ICAgICAgICAgICAvLyBnb2luZyA0IGJ5dGVzIGF0IGEgdGltZSBpcyB1bnNhZmUKICNpZiBDUFUo
QVJNKSB8fCBDUFUoU0g0KSB8fCBDUFUoTUlQUykgfHwgQ1BVKFNQQVJDKQotICAgICAgICAgICAg
Y29uc3QgVUNoYXIqIGFDaGFycyA9IGEtPmNoYXJhY3RlcnMoKTsKLSAgICAgICAgICAgIGNvbnN0
IFVDaGFyKiBiQ2hhcnMgPSBiLT5jaGFyYWN0ZXJzKCk7CisgICAgICAgICAgICBjb25zdCBVQ2hh
ciogYUNoYXJzID0gYS0+Y2hhcmFjdGVyczE2KCk7CisgICAgICAgICAgICBjb25zdCBVQ2hhciog
YkNoYXJzID0gYi0+Y2hhcmFjdGVyczE2KCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpICE9IGFMZW5ndGg7ICsraSkgewogICAgICAgICAgICAgICAgIGlmICgqYUNoYXJzKysg
IT0gKmJDaGFycysrKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC02NSw4
ICsxMTksOCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogI2Vs
c2UKICAgICAgICAgICAgIC8qIERvIGl0IDQtYnl0ZXMtYXQtYS10aW1lIG9uIGFyY2hpdGVjdHVy
ZXMgd2hlcmUgaXQncyBzYWZlICovCi0gICAgICAgICAgICBjb25zdCB1aW50MzJfdCogYUNoYXJz
ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KGEtPmNoYXJhY3RlcnMoKSk7Ci0g
ICAgICAgICAgICBjb25zdCB1aW50MzJfdCogYkNoYXJzID0gcmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1aW50MzJfdCo+KGItPmNoYXJhY3RlcnMoKSk7CisgICAgICAgICAgICBjb25zdCB1aW50MzJf
dCogYUNoYXJzID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KGEtPmNoYXJhY3Rl
cnMxNigpKTsKKyAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90KiBiQ2hhcnMgPSByZWludGVycHJl
dF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oYi0+Y2hhcmFjdGVyczE2KCkpOwogCiAgICAgICAgICAg
ICB1bnNpZ25lZCBoYWxmTGVuZ3RoID0gYUxlbmd0aCA+PiAxOwogICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSAhPSBoYWxmTGVuZ3RoOyArK2kpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL3RleHQvU3RyaW5nSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwCShyZXZpc2lvbiA5NzAwMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJpbmdJbXBsLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTgsOCArNTgsMTMgQEAgU3RyaW5nSW1wbDo6flN0cmluZ0ltcGwoKQogICAgIGlm
IChvd25lcnNoaXAgIT0gQnVmZmVySW50ZXJuYWwpIHsKICAgICAgICAgaWYgKG93bmVyc2hpcCA9
PSBCdWZmZXJPd25lZCkgewogICAgICAgICAgICAgQVNTRVJUKCFtX3NoYXJlZEJ1ZmZlcik7Ci0g
ICAgICAgICAgICBBU1NFUlQobV9kYXRhKTsKLSAgICAgICAgICAgIGZhc3RGcmVlKGNvbnN0X2Nh
c3Q8VUNoYXIqPihtX2RhdGEpKTsKKyAgICAgICAgICAgIC8vIFdlIHVzZSBtX2RhdGE4LCBidXQg
c2luY2UgaXQgaXMgYSB1bmlvbiB3aXRoIG1fZGF0YTE2IHRoaXMgd29ya3MgZWl0aGVyIHdheS4K
KyAgICAgICAgICAgIEFTU0VSVChtX2RhdGE4KTsKKyAgICAgICAgICAgIGZhc3RGcmVlKGNvbnN0
X2Nhc3Q8Y2hhcio+KG1fZGF0YTgpKTsKKyAgICAgICAgICAgIGlmIChoYXMxNkJpdFNoYWRvdygp
KSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKG1fY29weURhdGExNik7CisgICAgICAgICAgICAg
ICAgZmFzdEZyZWUobV9jb3B5RGF0YTE2KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNl
IGlmIChvd25lcnNoaXAgPT0gQnVmZmVyU3Vic3RyaW5nKSB7CiAgICAgICAgICAgICBBU1NFUlQo
bV9zdWJzdHJpbmdCdWZmZXIpOwogICAgICAgICAgICAgbV9zdWJzdHJpbmdCdWZmZXItPmRlcmVm
KCk7CkBAIC03MSw2ICs3NiwyNSBAQCBTdHJpbmdJbXBsOjp+U3RyaW5nSW1wbCgpCiAgICAgfQog
fQogCitQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmNyZWF0ZVVuaW5pdGlhbGl6
ZWQodW5zaWduZWQgbGVuZ3RoLCBjaGFyKiYgZGF0YSkKK3sKKyAgICBpZiAoIWxlbmd0aCkgewor
ICAgICAgICBkYXRhID0gMDsKKyAgICAgICAgcmV0dXJuIGVtcHR5KCk7CisgICAgfQorCisgICAg
Ly8gQWxsb2NhdGUgYSBzaW5nbGUgYnVmZmVyIGxhcmdlIGVub3VnaCB0byBjb250YWluIHRoZSBT
dHJpbmdJbXBsCisgICAgLy8gc3RydWN0IGFzIHdlbGwgYXMgdGhlIGRhdGEgd2hpY2ggaXQgY29u
dGFpbnMuIFRoaXMgcmVtb3ZlcyBvbmUKKyAgICAvLyBoZWFwIGFsbG9jYXRpb24gZnJvbSB0aGlz
IGNhbGwuCisgICAgaWYgKGxlbmd0aCA+ICgoc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46
Om1heCgpIC0gc2l6ZW9mKFN0cmluZ0ltcGwpKSAvIHNpemVvZihjaGFyKSkpCisgICAgICAgIENS
QVNIKCk7CisgICAgc2l6ZV90IHNpemUgPSBzaXplb2YoU3RyaW5nSW1wbCkgKyBsZW5ndGggKiBz
aXplb2YoY2hhcik7CisgICAgU3RyaW5nSW1wbCogc3RyaW5nID0gc3RhdGljX2Nhc3Q8U3RyaW5n
SW1wbCo+KGZhc3RNYWxsb2Moc2l6ZSkpOworCisgICAgZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhcio+KHN0cmluZyArIDEpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgKHN0cmluZykgU3Ry
aW5nSW1wbChsZW5ndGgsIEZvcmNlOEJpdENvbnN0cnVjdG9yKSk7Cit9CisKIFBhc3NSZWZQdHI8
U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5n
dGgsIFVDaGFyKiYgZGF0YSkKIHsKICAgICBpZiAoIWxlbmd0aCkgewpAQCAtMTMyLDcgKzE1Niw3
IEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y3JlYXQKICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFN0cmluZ0ltcGwoY2hhcmFjdGVycywgbGVuZ3RoLCBzaGFyZWRCdWZmZXIp
KTsKIH0KIAotU2hhcmVkVUNoYXIqIFN0cmluZ0ltcGw6OnNoYXJlZEJ1ZmZlcigpCitTaGFyZWRV
Q2hhciogU3RyaW5nSW1wbDo6c2hhcmVkQnVmZmVyMTYoKQogewogICAgIGlmIChtX2xlbmd0aCA8
IG1pbkxlbmd0aFRvU2hhcmUpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMTQ0LDEwICsxNjgsMTMg
QEAgU2hhcmVkVUNoYXIqIFN0cmluZ0ltcGw6OnNoYXJlZEJ1ZmZlcigpCiAgICAgaWYgKG93bmVy
c2hpcCA9PSBCdWZmZXJJbnRlcm5hbCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKG93bmVy
c2hpcCA9PSBCdWZmZXJTdWJzdHJpbmcpCi0gICAgICAgIHJldHVybiBtX3N1YnN0cmluZ0J1ZmZl
ci0+c2hhcmVkQnVmZmVyKCk7CisgICAgICAgIHJldHVybiBtX3N1YnN0cmluZ0J1ZmZlci0+c2hh
cmVkQnVmZmVyMTYoKTsKICAgICBpZiAob3duZXJzaGlwID09IEJ1ZmZlck93bmVkKSB7CiAgICAg
ICAgIEFTU0VSVCghbV9zaGFyZWRCdWZmZXIpOwotICAgICAgICBtX3NoYXJlZEJ1ZmZlciA9IFNo
YXJlZFVDaGFyOjpjcmVhdGUobmV3IFNoYXJhYmxlVUNoYXIobV9kYXRhKSkubGVha1JlZigpOwor
ICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IFNoYXJlZENoYXIgZm9yIDgtYml0IHN0cmluZ3MK
KyAgICAgICAgQVNTRVJUKCFpczhCaXQoKSk7CisgICAgICAgIEFTU0VSVCghaGFzMTZCaXRTaGFk
b3coKSk7CisgICAgICAgIG1fc2hhcmVkQnVmZmVyID0gU2hhcmVkVUNoYXI6OmNyZWF0ZShuZXcg
U2hhcmFibGVVQ2hhcihtX2RhdGExNikpLmxlYWtSZWYoKTsKICAgICAgICAgbV9yZWZDb3VudEFu
ZEZsYWdzID0gKG1fcmVmQ291bnRBbmRGbGFncyAmIH5zX3JlZkNvdW50TWFza0J1ZmZlck93bmVy
c2hpcCkgfCBCdWZmZXJTaGFyZWQ7CiAgICAgfQogCkBAIC0xNTYsMTQgKzE4Myw0OSBAQCBTaGFy
ZWRVQ2hhciogU3RyaW5nSW1wbDo6c2hhcmVkQnVmZmVyKCkKICAgICByZXR1cm4gbV9zaGFyZWRC
dWZmZXI7CiB9CiAKK2NvbnN0IFVDaGFyKiBTdHJpbmdJbXBsOjpnZXREYXRhMTZTbG93Q2FzZSgp
IGNvbnN0Cit7CisgICAgaWYgKGhhczE2Qml0U2hhZG93KCkpCisgICAgICAgIHJldHVybiBtX2Nv
cHlEYXRhMTY7CisKKyAgICBpZiAoYnVmZmVyT3duZXJzaGlwKCkgPT0gQnVmZmVyU3Vic3RyaW5n
KSB7CisgICAgICAgIC8vIElmIHRoaXMgaXMgYSBzdWJzdHJpbmcsIHJldHVybiBhIHBvaW50ZXIg
aW50byB0aGUgcGFyZW50IHN0cmluZy4KKyAgICAgICAgLy8gVE9ETzogQ29uc2lkZXIgc2V2ZXJp
bmcgdGhpcyBzdHJpbmcgZnJvbSB0aGUgcGFyZW50IHN0cmluZworICAgICAgICB1bnNpZ25lZCBv
ZmZzZXQgPSBtX2RhdGE4IC0gbV9zdWJzdHJpbmdCdWZmZXItPmNoYXJhY3RlcnM4KCk7CisgICAg
ICAgIHJldHVybiBtX3N1YnN0cmluZ0J1ZmZlci0+Y2hhcmFjdGVyczE2KCkgKyBvZmZzZXQ7Cisg
ICAgfQorCisgICAgQVNTRVJUKGJ1ZmZlck93bmVyc2hpcCgpICE9IEJ1ZmZlclNoYXJlZCk7Cisg
ICAgdW5zaWduZWQgbGVuID0gbGVuZ3RoKCk7CisgICAgbV9jb3B5RGF0YTE2ID0gc3RhdGljX2Nh
c3Q8VUNoYXIqPihmYXN0Q2FsbG9jKGxlbiwgc2l6ZW9mKFVDaGFyKSkpOworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbGVuOyBpKyspCisgICAgICAgIG1fY29weURhdGExNltpXSA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGNoYXI+KG1fZGF0YThbaV0pOworCisgICAgbV9yZWZDb3VudEFuZEZs
YWdzIHw9IHNfcmVmQ291bnRGbGFnSGFzMTZCaXRTaGFkb3c7CisKKyAgICByZXR1cm4gbV9jb3B5
RGF0YTE2OworfQorCiBib29sIFN0cmluZ0ltcGw6OmNvbnRhaW5zT25seVdoaXRlc3BhY2UoKQog
ewogICAgIC8vIEZJWE1FOiBUaGUgZGVmaW5pdGlvbiBvZiB3aGl0ZXNwYWNlIGhlcmUgaW5jbHVk
ZXMgYSBudW1iZXIgb2YgY2hhcmFjdGVycwogICAgIC8vIHRoYXQgYXJlIG5vdCB3aGl0ZXNwYWNl
IGZyb20gdGhlIHBvaW50IG9mIHZpZXcgb2YgUmVuZGVyVGV4dDsgSSB3b25kZXIgaWYKICAgICAv
LyB0aGF0J3MgYSBwcm9ibGVtIGluIHByYWN0aWNlLgotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtX2xlbmd0aDsgaSsrKQotICAgICAgICBpZiAoIWlzQVNDSUlTcGFjZShtX2RhdGFbaV0p
KQorICAgIGlmIChpczhCaXQoKSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV9sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgVUNoYXIgYyA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXI+KG1fZGF0YThbaV0pOworICAgICAgICAgICAgaWYgKCFpc0FTQ0lJU3BhY2UoYykp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbGVuZ3Ro
OyBpKyspIHsKKyAgICAgICAgVUNoYXIgYyA9IG1fZGF0YTE2W2ldOworICAgICAgICBpZiAoIWlz
QVNDSUlTcGFjZShjKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKQEAgLTE3NywxNSArMjM5LDIwIEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1w
bD4gU3RyaW5nSW1wbDo6c3Vic3QKICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICBs
ZW5ndGggPSBtYXhMZW5ndGg7CiAgICAgfQotICAgIHJldHVybiBjcmVhdGUobV9kYXRhICsgc3Rh
cnQsIGxlbmd0aCk7CisgICAgaWYgKGlzOEJpdCgpKQorICAgICAgICByZXR1cm4gY3JlYXRlKG1f
ZGF0YTggKyBzdGFydCwgbGVuZ3RoKTsKKworICAgIHJldHVybiBjcmVhdGUobV9kYXRhMTYgKyBz
dGFydCwgbGVuZ3RoKTsKIH0KIAogVUNoYXIzMiBTdHJpbmdJbXBsOjpjaGFyYWN0ZXJTdGFydGlu
Z0F0KHVuc2lnbmVkIGkpCiB7Ci0gICAgaWYgKFUxNl9JU19TSU5HTEUobV9kYXRhW2ldKSkKLSAg
ICAgICAgcmV0dXJuIG1fZGF0YVtpXTsKLSAgICBpZiAoaSArIDEgPCBtX2xlbmd0aCAmJiBVMTZf
SVNfTEVBRChtX2RhdGFbaV0pICYmIFUxNl9JU19UUkFJTChtX2RhdGFbaSArIDFdKSkKLSAgICAg
ICAgcmV0dXJuIFUxNl9HRVRfU1VQUExFTUVOVEFSWShtX2RhdGFbaV0sIG1fZGF0YVtpICsgMV0p
OworICAgIGlmIChpczhCaXQoKSkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVk
IGNoYXI+KG1fZGF0YThbaV0pOworICAgIGlmIChVMTZfSVNfU0lOR0xFKG1fZGF0YTE2W2ldKSkK
KyAgICAgICAgcmV0dXJuIG1fZGF0YTE2W2ldOworICAgIGlmIChpICsgMSA8IG1fbGVuZ3RoICYm
IFUxNl9JU19MRUFEKG1fZGF0YTE2W2ldKSAmJiBVMTZfSVNfVFJBSUwobV9kYXRhMTZbaSArIDFd
KSkKKyAgICAgICAgcmV0dXJuIFUxNl9HRVRfU1VQUExFTUVOVEFSWShtX2RhdGExNltpXSwgbV9k
YXRhMTZbaSArIDFdKTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtMTk1LDQyICsyNjIsNTggQEAg
UGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpsb3dlcgogICAgIC8vIG5vLW9wIGNv
ZGUgcGF0aCB1cCB0aHJvdWdoIHRoZSBmaXJzdCAncmV0dXJuJyBzdGF0ZW1lbnQuCiAgICAgCiAg
ICAgLy8gRmlyc3Qgc2NhbiB0aGUgc3RyaW5nIGZvciB1cHBlcmNhc2UgYW5kIG5vbi1BU0NJSSBj
aGFyYWN0ZXJzOgotICAgIFVDaGFyIG9yZWQgPSAwOwogICAgIGJvb2wgbm9VcHBlciA9IHRydWU7
Ci0gICAgY29uc3QgVUNoYXIgKmVuZCA9IG1fZGF0YSArIG1fbGVuZ3RoOwotICAgIGZvciAoY29u
c3QgVUNoYXIqIGNocCA9IG1fZGF0YTsgY2hwICE9IGVuZDsgY2hwKyspIHsKLSAgICAgICAgaWYg
KFVOTElLRUxZKGlzQVNDSUlVcHBlcigqY2hwKSkpCi0gICAgICAgICAgICBub1VwcGVyID0gZmFs
c2U7Ci0gICAgICAgIG9yZWQgfD0gKmNocDsKKyAgICBVQ2hhciBvcmVkID0gMDsKKyAgICBpZiAo
aXM4Qml0KCkpIHsKKyAgICAgICAgY29uc3QgY2hhciAqZW5kID0gbV9kYXRhOCArIG1fbGVuZ3Ro
OworICAgICAgICBmb3IgKGNvbnN0IGNoYXIqIGNocCA9IG1fZGF0YTg7IGNocCAhPSBlbmQ7IGNo
cCsrKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKGlzQVNDSUlVcHBlcigqY2hwKSkpCisgICAg
ICAgICAgICAgICAgbm9VcHBlciA9IGZhbHNlOworICAgICAgICAvLyBOb3RoaW5nIHRvIGRvIGlm
IHRoZSBzdHJpbmcgaXMgYWxsIEFTQ0lJIHdpdGggbm8gdXBwZXJjYXNlLgorICAgICAgICBpZiAo
bm9VcHBlcikKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgIH0gZWxzZSB7CisgICAgICAg
IGNvbnN0IFVDaGFyICplbmQgPSBtX2RhdGExNiArIG1fbGVuZ3RoOworICAgICAgICBmb3IgKGNv
bnN0IFVDaGFyKiBjaHAgPSBtX2RhdGExNjsgY2hwICE9IGVuZDsgY2hwKyspIHsKKyAgICAgICAg
ICAgIGlmIChVTkxJS0VMWShpc0FTQ0lJVXBwZXIoKmNocCkpKQorICAgICAgICAgICAgICAgIG5v
VXBwZXIgPSBmYWxzZTsKKyAgICAgICAgICAgIG9yZWQgfD0gKmNocDsKKyAgICAgICAgfQorICAg
ICAgICAvLyBOb3RoaW5nIHRvIGRvIGlmIHRoZSBzdHJpbmcgaXMgYWxsIEFTQ0lJIHdpdGggbm8g
dXBwZXJjYXNlLgorICAgICAgICBpZiAobm9VcHBlciAmJiAhKG9yZWQgJiB+MHg3RikpCisgICAg
ICAgICAgICByZXR1cm4gdGhpczsKICAgICB9Ci0gICAgCi0gICAgLy8gTm90aGluZyB0byBkbyBp
ZiB0aGUgc3RyaW5nIGlzIGFsbCBBU0NJSSB3aXRoIG5vIHVwcGVyY2FzZS4KLSAgICBpZiAobm9V
cHBlciAmJiAhKG9yZWQgJiB+MHg3RikpCi0gICAgICAgIHJldHVybiB0aGlzOwogCiAgICAgaWYg
KG1fbGVuZ3RoID4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG51bWVyaWNfbGltaXRzPGludDMyX3Q+
OjptYXgoKSkpCiAgICAgICAgIENSQVNIKCk7CiAgICAgaW50MzJfdCBsZW5ndGggPSBtX2xlbmd0
aDsKIAotICAgIFVDaGFyKiBkYXRhOwotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0g
Y3JlYXRlVW5pbml0aWFsaXplZChtX2xlbmd0aCwgZGF0YSk7Ci0KKyAgICBjaGFyKiBkYXRhODsK
KyAgICBVQ2hhciogZGF0YTE2OworICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0gaXM4
Qml0KCkgPyBjcmVhdGVVbmluaXRpYWxpemVkKG1fbGVuZ3RoLCBkYXRhOCkgOiBjcmVhdGVVbmlu
aXRpYWxpemVkKG1fbGVuZ3RoLCBkYXRhMTYpOworCisgICAgaWYgKGlzOEJpdCgpKSB7CisgICAg
ICAgIGZvciAoaW50MzJfdCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBj
aGFyIGMgPSBtX2RhdGE4W2ldOworICAgICAgICAgICAgZGF0YThbaV0gPSB0b0FTQ0lJTG93ZXIo
Yyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG5ld0ltcGw7CisgICAgfQogICAgIGlmICgh
KG9yZWQgJiB+MHg3RikpIHsKLSAgICAgICAgLy8gRG8gYSBmYXN0ZXIgbG9vcCBmb3IgdGhlIGNh
c2Ugd2hlcmUgYWxsIHRoZSBjaGFyYWN0ZXJzIGFyZSBBU0NJSS4KLSAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgVUNoYXIgYyA9IG1fZGF0YVtp
XTsKLSAgICAgICAgICAgIGRhdGFbaV0gPSB0b0FTQ0lJTG93ZXIoYyk7CisgICAgICAgIGZvciAo
aW50MzJfdCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBVQ2hhciBjID0g
bV9kYXRhMTZbaV07CisgICAgICAgICAgICBkYXRhMTZbaV0gPSB0b0FTQ0lJTG93ZXIoYyk7CiAg
ICAgICAgIH0KICAgICAgICAgcmV0dXJuIG5ld0ltcGw7CiAgICAgfQogICAgIAogICAgIC8vIERv
IGEgc2xvd2VyIGltcGxlbWVudGF0aW9uIGZvciBjYXNlcyB0aGF0IGluY2x1ZGUgbm9uLUFTQ0lJ
IGNoYXJhY3RlcnMuCiAgICAgYm9vbCBlcnJvcjsKLSAgICBpbnQzMl90IHJlYWxMZW5ndGggPSBV
bmljb2RlOjp0b0xvd2VyKGRhdGEsIGxlbmd0aCwgbV9kYXRhLCBtX2xlbmd0aCwgJmVycm9yKTsK
KyAgICBpbnQzMl90IHJlYWxMZW5ndGggPSBVbmljb2RlOjp0b0xvd2VyKGRhdGExNiwgbGVuZ3Ro
LCBtX2RhdGExNiwgbV9sZW5ndGgsICZlcnJvcik7CiAgICAgaWYgKCFlcnJvciAmJiByZWFsTGVu
Z3RoID09IGxlbmd0aCkKICAgICAgICAgcmV0dXJuIG5ld0ltcGw7Ci0gICAgbmV3SW1wbCA9IGNy
ZWF0ZVVuaW5pdGlhbGl6ZWQocmVhbExlbmd0aCwgZGF0YSk7Ci0gICAgVW5pY29kZTo6dG9Mb3dl
cihkYXRhLCByZWFsTGVuZ3RoLCBtX2RhdGEsIG1fbGVuZ3RoLCAmZXJyb3IpOworICAgIG5ld0lt
cGwgPSBjcmVhdGVVbmluaXRpYWxpemVkKHJlYWxMZW5ndGgsIGRhdGExNik7CisgICAgVW5pY29k
ZTo6dG9Mb3dlcihkYXRhMTYsIHJlYWxMZW5ndGgsIG1fZGF0YTE2LCBtX2xlbmd0aCwgJmVycm9y
KTsKICAgICBpZiAoZXJyb3IpCiAgICAgICAgIHJldHVybiB0aGlzOwogICAgIHJldHVybiBuZXdJ
bXBsOwpAQCAtMjQxLDMwICszMjQsNjAgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJ
bXBsOjp1cHBlcgogICAgIC8vIFRoaXMgZnVuY3Rpb24gY291bGQgYmUgb3B0aW1pemVkIGZvciBu
by1vcCBjYXNlcyB0aGUgd2F5IGxvd2VyKCkgaXMsCiAgICAgLy8gYnV0IGluIGVtcGlyaWNhbCB0
ZXN0aW5nLCBmZXcgYWN0dWFsIGNhbGxzIHRvIHVwcGVyKCkgYXJlIG5vLW9wcywgc28KICAgICAv
LyBpdCB3b3VsZG4ndCBiZSB3b3J0aCB0aGUgZXh0cmEgdGltZSBmb3IgcHJlLXNjYW5uaW5nLgot
ICAgIFVDaGFyKiBkYXRhOwotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0gY3JlYXRl
VW5pbml0aWFsaXplZChtX2xlbmd0aCwgZGF0YSk7CiAKICAgICBpZiAobV9sZW5ndGggPiBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4obnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgpKSkKICAgICAg
ICAgQ1JBU0goKTsKICAgICBpbnQzMl90IGxlbmd0aCA9IG1fbGVuZ3RoOwogCisgICAgaWYgKGlz
OEJpdCgpKSB7CisgICAgICAgIGNoYXIqIGRhdGE4OworICAgICAgICBSZWZQdHI8U3RyaW5nSW1w
bD4gbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQobV9sZW5ndGgsIGRhdGE4KTsKKyAgICAg
ICAgCisgICAgICAgIC8vIERvIGEgZmFzdGVyIGxvb3AgZm9yIHRoZSBjYXNlIHdoZXJlIGFsbCB0
aGUgY2hhcmFjdGVycyBhcmUgQVNDSUkuCisgICAgICAgIGNoYXIgb3JlZCA9IDA7CisgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGNoYXIgYyA9
IG1fZGF0YThbaV07CisgICAgICAgICAgICBvcmVkIHw9IGM7CisgICAgICAgICAgICBkYXRhOFtp
XSA9IHRvQVNDSUlVcHBlcihjKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIShvcmVkICYgfjB4
N0YpKQorICAgICAgICAgICAgcmV0dXJuIG5ld0ltcGwucmVsZWFzZSgpOworCisgICAgICAgIC8v
IERvIGEgc2xvd2VyIGltcGxlbWVudGF0aW9uIGZvciBjYXNlcyB0aGF0IGluY2x1ZGUgbm9uLUFT
Q0lJIGNoYXJhY3RlcnMuCisgICAgICAgIGJvb2wgZXJyb3I7CisgICAgICAgIFVDaGFyKiBkYXRh
MTY7CisgICAgICAgIG5ld0ltcGwgPSBjcmVhdGVVbmluaXRpYWxpemVkKG1fbGVuZ3RoLCBkYXRh
MTYpOworICAgICAgICBpbnQzMl90IHJlYWxMZW5ndGggPSBVbmljb2RlOjp0b1VwcGVyKGRhdGEx
NiwgbGVuZ3RoLCBtX2RhdGExNiwgbV9sZW5ndGgsICZlcnJvcik7CisgICAgICAgIGlmICghZXJy
b3IgJiYgcmVhbExlbmd0aCA9PSBsZW5ndGgpCisgICAgICAgICAgICByZXR1cm4gbmV3SW1wbDsK
KyAgICAgICAgbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQocmVhbExlbmd0aCwgZGF0YTE2
KTsKKyAgICAgICAgVW5pY29kZTo6dG9VcHBlcihkYXRhMTYsIHJlYWxMZW5ndGgsIG1fZGF0YTE2
LCBtX2xlbmd0aCwgJmVycm9yKTsKKyAgICAgICAgaWYgKGVycm9yKQorICAgICAgICAgICAgcmV0
dXJuIHRoaXM7CisgICAgICAgIHJldHVybiBuZXdJbXBsLnJlbGVhc2UoKTsKKyAgICB9CisKKyAg
ICBVQ2hhciogZGF0YTE2OworICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0gY3JlYXRl
VW5pbml0aWFsaXplZChtX2xlbmd0aCwgZGF0YTE2KTsKKyAgICAKICAgICAvLyBEbyBhIGZhc3Rl
ciBsb29wIGZvciB0aGUgY2FzZSB3aGVyZSBhbGwgdGhlIGNoYXJhY3RlcnMgYXJlIEFTQ0lJLgog
ICAgIFVDaGFyIG9yZWQgPSAwOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKysp
IHsKLSAgICAgICAgVUNoYXIgYyA9IG1fZGF0YVtpXTsKKyAgICAgICAgVUNoYXIgYyA9IG1fZGF0
YTE2W2ldOwogICAgICAgICBvcmVkIHw9IGM7Ci0gICAgICAgIGRhdGFbaV0gPSB0b0FTQ0lJVXBw
ZXIoYyk7CisgICAgICAgIGRhdGExNltpXSA9IHRvQVNDSUlVcHBlcihjKTsKICAgICB9CiAgICAg
aWYgKCEob3JlZCAmIH4weDdGKSkKICAgICAgICAgcmV0dXJuIG5ld0ltcGwucmVsZWFzZSgpOwog
CiAgICAgLy8gRG8gYSBzbG93ZXIgaW1wbGVtZW50YXRpb24gZm9yIGNhc2VzIHRoYXQgaW5jbHVk
ZSBub24tQVNDSUkgY2hhcmFjdGVycy4KICAgICBib29sIGVycm9yOwotICAgIGludDMyX3QgcmVh
bExlbmd0aCA9IFVuaWNvZGU6OnRvVXBwZXIoZGF0YSwgbGVuZ3RoLCBtX2RhdGEsIG1fbGVuZ3Ro
LCAmZXJyb3IpOworICAgIG5ld0ltcGwgPSBjcmVhdGVVbmluaXRpYWxpemVkKG1fbGVuZ3RoLCBk
YXRhMTYpOworICAgIGludDMyX3QgcmVhbExlbmd0aCA9IFVuaWNvZGU6OnRvVXBwZXIoZGF0YTE2
LCBsZW5ndGgsIG1fZGF0YTE2LCBtX2xlbmd0aCwgJmVycm9yKTsKICAgICBpZiAoIWVycm9yICYm
IHJlYWxMZW5ndGggPT0gbGVuZ3RoKQogICAgICAgICByZXR1cm4gbmV3SW1wbDsKLSAgICBuZXdJ
bXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChyZWFsTGVuZ3RoLCBkYXRhKTsKLSAgICBVbmljb2Rl
Ojp0b1VwcGVyKGRhdGEsIHJlYWxMZW5ndGgsIG1fZGF0YSwgbV9sZW5ndGgsICZlcnJvcik7Cisg
ICAgbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQocmVhbExlbmd0aCwgZGF0YTE2KTsKKyAg
ICBVbmljb2RlOjp0b1VwcGVyKGRhdGExNiwgcmVhbExlbmd0aCwgbV9kYXRhMTYsIG1fbGVuZ3Ro
LCAmZXJyb3IpOwogICAgIGlmIChlcnJvcikKICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgcmV0
dXJuIG5ld0ltcGwucmVsZWFzZSgpOwpAQCAtMjc1LDYgKzM4OCwxMyBAQCBQYXNzUmVmUHRyPFN0
cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmZpbGwoCiAgICAgaWYgKCFtX2xlbmd0aCkKICAgICAgICAg
cmV0dXJuIHRoaXM7CiAKKyAgICBpZiAoIShjaGFyYWN0ZXIgJiB+MHg3RikpIHsKKyAgICAgICAg
Y2hhciogZGF0YTsKKyAgICAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IG5ld0ltcGwgPSBjcmVhdGVV
bmluaXRpYWxpemVkKG1fbGVuZ3RoLCBkYXRhKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1fbGVuZ3RoOyArK2kpCisgICAgICAgICAgICBkYXRhW2ldID0gY2hhcmFjdGVyOwor
ICAgICAgICByZXR1cm4gbmV3SW1wbC5yZWxlYXNlKCk7CisgICAgfQogICAgIFVDaGFyKiBkYXRh
OwogICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZCht
X2xlbmd0aCwgZGF0YSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbGVuZ3RoOyAr
K2kpCkBAIC0yODQsMTcgKzQwNCwyNCBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0lt
cGw6OmZpbGwoCiAKIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Zm9sZENhc2Uo
KQogewotICAgIFVDaGFyKiBkYXRhOwotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0g
Y3JlYXRlVW5pbml0aWFsaXplZChtX2xlbmd0aCwgZGF0YSk7Ci0KICAgICBpZiAobV9sZW5ndGgg
PiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgpKSkK
ICAgICAgICAgQ1JBU0goKTsKICAgICBpbnQzMl90IGxlbmd0aCA9IG1fbGVuZ3RoOwogCisgICAg
aWYgKGlzOEJpdCgpKSB7CisgICAgICAgIGNoYXIqIGRhdGE7CisgICAgICAgIFJlZlB0ciA8U3Ry
aW5nSW1wbD5uZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChtX2xlbmd0aCwgZGF0YSk7Cisg
ICAgICAgIGZvciAoaW50MzJfdCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKQorICAgICAgICAgICAg
ZGF0YVtpXSA9IHRvQVNDSUlMb3dlcihtX2RhdGE4W2ldKTsKKyAgICAgICAgcmV0dXJuIG5ld0lt
cGwucmVsZWFzZSgpOworICAgIH0KKwogICAgIC8vIERvIGEgZmFzdGVyIGxvb3AgZm9yIHRoZSBj
YXNlIHdoZXJlIGFsbCB0aGUgY2hhcmFjdGVycyBhcmUgQVNDSUkuCisgICAgVUNoYXIqIGRhdGE7
CisgICAgUmVmUHRyPFN0cmluZ0ltcGw+IG5ld0ltcGwgPSBjcmVhdGVVbmluaXRpYWxpemVkKG1f
bGVuZ3RoLCBkYXRhKTsKICAgICBVQ2hhciBvcmVkID0gMDsKICAgICBmb3IgKGludDMyX3QgaSA9
IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICBVQ2hhciBjID0gbV9kYXRhW2ldOworICAg
ICAgICBVQ2hhciBjID0gbV9kYXRhMTZbaV07CiAgICAgICAgIG9yZWQgfD0gYzsKICAgICAgICAg
ZGF0YVtpXSA9IHRvQVNDSUlMb3dlcihjKTsKICAgICB9CkBAIC0zMDMsMTEgKzQzMCwxMSBAQCBQ
YXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmZvbGRDCiAKICAgICAvLyBEbyBhIHNs
b3dlciBpbXBsZW1lbnRhdGlvbiBmb3IgY2FzZXMgdGhhdCBpbmNsdWRlIG5vbi1BU0NJSSBjaGFy
YWN0ZXJzLgogICAgIGJvb2wgZXJyb3I7Ci0gICAgaW50MzJfdCByZWFsTGVuZ3RoID0gVW5pY29k
ZTo6Zm9sZENhc2UoZGF0YSwgbGVuZ3RoLCBtX2RhdGEsIG1fbGVuZ3RoLCAmZXJyb3IpOworICAg
IGludDMyX3QgcmVhbExlbmd0aCA9IFVuaWNvZGU6OmZvbGRDYXNlKGRhdGEsIGxlbmd0aCwgbV9k
YXRhMTYsIG1fbGVuZ3RoLCAmZXJyb3IpOwogICAgIGlmICghZXJyb3IgJiYgcmVhbExlbmd0aCA9
PSBsZW5ndGgpCiAgICAgICAgIHJldHVybiBuZXdJbXBsLnJlbGVhc2UoKTsKICAgICBuZXdJbXBs
ID0gY3JlYXRlVW5pbml0aWFsaXplZChyZWFsTGVuZ3RoLCBkYXRhKTsKLSAgICBVbmljb2RlOjpm
b2xkQ2FzZShkYXRhLCByZWFsTGVuZ3RoLCBtX2RhdGEsIG1fbGVuZ3RoLCAmZXJyb3IpOworICAg
IFVuaWNvZGU6OmZvbGRDYXNlKGRhdGEsIHJlYWxMZW5ndGgsIG1fZGF0YTE2LCBtX2xlbmd0aCwg
JmVycm9yKTsKICAgICBpZiAoZXJyb3IpCiAgICAgICAgIHJldHVybiB0aGlzOwogICAgIHJldHVy
biBuZXdJbXBsLnJlbGVhc2UoKTsKQEAgLTMyMyw3ICs0NTAsNyBAQCBpbmxpbmUgUGFzc1JlZlB0
cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsCiAgICAgdW5zaWduZWQgZW5kID0gbV9sZW5ndGggLSAx
OwogICAgIAogICAgIC8vIHNraXAgd2hpdGUgc3BhY2UgZnJvbSBzdGFydAotICAgIHdoaWxlIChz
dGFydCA8PSBlbmQgJiYgcHJlZGljYXRlKG1fZGF0YVtzdGFydF0pKQorICAgIHdoaWxlIChzdGFy
dCA8PSBlbmQgJiYgcHJlZGljYXRlKGlzOEJpdCgpID8gbV9kYXRhOFtzdGFydF0gOiBtX2RhdGEx
NltzdGFydF0pKQogICAgICAgICBzdGFydCsrOwogICAgIAogICAgIC8vIG9ubHkgd2hpdGUgc3Bh
Y2UKQEAgLTMzMSwxMiArNDU4LDE0IEBAIGlubGluZSBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0
cmluZ0ltcGwKICAgICAgICAgcmV0dXJuIGVtcHR5KCk7CiAKICAgICAvLyBza2lwIHdoaXRlIHNw
YWNlIGZyb20gZW5kCi0gICAgd2hpbGUgKGVuZCAmJiBwcmVkaWNhdGUobV9kYXRhW2VuZF0pKQor
ICAgIHdoaWxlIChlbmQgJiYgcHJlZGljYXRlKGlzOEJpdCgpID8gbV9kYXRhOFtlbmRdIDogbV9k
YXRhMTZbZW5kXSkpCiAgICAgICAgIGVuZC0tOwogCiAgICAgaWYgKCFzdGFydCAmJiBlbmQgPT0g
bV9sZW5ndGggLSAxKQogICAgICAgICByZXR1cm4gdGhpczsKLSAgICByZXR1cm4gY3JlYXRlKG1f
ZGF0YSArIHN0YXJ0LCBlbmQgKyAxIC0gc3RhcnQpOworICAgIGlmIChpczhCaXQoKSkKKyAgICAg
ICAgcmV0dXJuIGNyZWF0ZShtX2RhdGE4ICsgc3RhcnQsIGVuZCArIDEgLSBzdGFydCk7CisgICAg
cmV0dXJuIGNyZWF0ZShtX2RhdGExNiArIHN0YXJ0LCBlbmQgKyAxIC0gc3RhcnQpOwogfQogCiBj
bGFzcyBVQ2hhclByZWRpY2F0ZSB7CkBAIC0zNzAsOSArNDk5LDEwIEBAIFBhc3NSZWZQdHI8U3Ry
aW5nSW1wbD4gU3RyaW5nSW1wbDo6c3RyaXAKICAgICByZXR1cm4gc3RyaXBNYXRjaGVkQ2hhcmFj
dGVycyhVQ2hhclByZWRpY2F0ZShpc1doaXRlU3BhY2UpKTsKIH0KIAorLy8gRklYTUU6IEFkZCA4
LWJpdCBwYXRoLiBMaWtlbHkgcmVxdWlyZXMgdGVtcGxhdGl6ZWQgU3RyaW5nQnVmZmVyIGNsYXNz
CiBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnJlbW92ZUNoYXJhY3RlcnMoQ2hh
cmFjdGVyTWF0Y2hGdW5jdGlvblB0ciBmaW5kTWF0Y2gpCiB7Ci0gICAgY29uc3QgVUNoYXIqIGZy
b20gPSBtX2RhdGE7CisgICAgY29uc3QgVUNoYXIqIGZyb20gPSBjaGFyYWN0ZXJzKCk7CiAgICAg
Y29uc3QgVUNoYXIqIGZyb21lbmQgPSBmcm9tICsgbV9sZW5ndGg7CiAKICAgICAvLyBBc3N1bWUg
dGhlIGNvbW1vbiBjYXNlIHdpbGwgbm90IHJlbW92ZSBhbnkgY2hhcmFjdGVycwpAQCAtMzgzLDEw
ICs1MTMsMTAgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpyZW1vdgogCiAg
ICAgU3RyaW5nQnVmZmVyIGRhdGEobV9sZW5ndGgpOwogICAgIFVDaGFyKiB0byA9IGRhdGEuY2hh
cmFjdGVycygpOwotICAgIHVuc2lnbmVkIG91dGMgPSBmcm9tIC0gbV9kYXRhOworICAgIHVuc2ln
bmVkIG91dGMgPSBmcm9tIC0gY2hhcmFjdGVyczE2KCk7CiAKICAgICBpZiAob3V0YykKLSAgICAg
ICAgbWVtY3B5KHRvLCBtX2RhdGEsIG91dGMgKiBzaXplb2YoVUNoYXIpKTsKKyAgICAgICAgbWVt
Y3B5KHRvLCBjaGFyYWN0ZXJzMTYoKSwgb3V0YyAqIHNpemVvZihVQ2hhcikpOwogCiAgICAgd2hp
bGUgKHRydWUpIHsKICAgICAgICAgd2hpbGUgKGZyb20gIT0gZnJvbWVuZCAmJiBmaW5kTWF0Y2go
KmZyb20pKQpAQCAtNDAyLDEyICs1MzIsMTMgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJp
bmdJbXBsOjpyZW1vdgogICAgIHJldHVybiBhZG9wdChkYXRhKTsKIH0KIAorLy8gRklYTUU6IEFk
ZCA4LWJpdCBwYXRoLiBMaWtlbHkgcmVxdWlyZXMgdGVtcGxhdGl6ZWQgU3RyaW5nQnVmZmVyIGNs
YXNzCiB0ZW1wbGF0ZSA8Y2xhc3MgVUNoYXJQcmVkaWNhdGU+CiBpbmxpbmUgUGFzc1JlZlB0cjxT
dHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpzaW1wbGlmeU1hdGNoZWRDaGFyYWN0ZXJzVG9TcGFjZShV
Q2hhclByZWRpY2F0ZSBwcmVkaWNhdGUpCiB7CiAgICAgU3RyaW5nQnVmZmVyIGRhdGEobV9sZW5n
dGgpOwogCi0gICAgY29uc3QgVUNoYXIqIGZyb20gPSBtX2RhdGE7CisgICAgY29uc3QgVUNoYXIq
IGZyb20gPSBjaGFyYWN0ZXJzMTYoKTsKICAgICBjb25zdCBVQ2hhciogZnJvbWVuZCA9IGZyb20g
KyBtX2xlbmd0aDsKICAgICBpbnQgb3V0YyA9IDA7CiAgICAgYm9vbCBjaGFuZ2VkVG9TcGFjZSA9
IGZhbHNlOwpAQCAtNDUxLDYyICs1ODIsNjQgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJp
bmdJbXBsOjpzaW1wbAogCiBpbnQgU3RyaW5nSW1wbDo6dG9JbnRTdHJpY3QoYm9vbCogb2ssIGlu
dCBiYXNlKQogewotICAgIHJldHVybiBjaGFyYWN0ZXJzVG9JbnRTdHJpY3QobV9kYXRhLCBtX2xl
bmd0aCwgb2ssIGJhc2UpOworICAgIHJldHVybiBjaGFyYWN0ZXJzVG9JbnRTdHJpY3QoY2hhcmFj
dGVyczE2KCksIG1fbGVuZ3RoLCBvaywgYmFzZSk7CiB9CiAKIHVuc2lnbmVkIFN0cmluZ0ltcGw6
OnRvVUludFN0cmljdChib29sKiBvaywgaW50IGJhc2UpCiB7Ci0gICAgcmV0dXJuIGNoYXJhY3Rl
cnNUb1VJbnRTdHJpY3QobV9kYXRhLCBtX2xlbmd0aCwgb2ssIGJhc2UpOworICAgIHJldHVybiBj
aGFyYWN0ZXJzVG9VSW50U3RyaWN0KGNoYXJhY3RlcnMxNigpLCBtX2xlbmd0aCwgb2ssIGJhc2Up
OwogfQogCiBpbnQ2NF90IFN0cmluZ0ltcGw6OnRvSW50NjRTdHJpY3QoYm9vbCogb2ssIGludCBi
YXNlKQogewotICAgIHJldHVybiBjaGFyYWN0ZXJzVG9JbnQ2NFN0cmljdChtX2RhdGEsIG1fbGVu
Z3RoLCBvaywgYmFzZSk7CisgICAgcmV0dXJuIGNoYXJhY3RlcnNUb0ludDY0U3RyaWN0KGNoYXJh
Y3RlcnMxNigpLCBtX2xlbmd0aCwgb2ssIGJhc2UpOworCiB9CiAKIHVpbnQ2NF90IFN0cmluZ0lt
cGw6OnRvVUludDY0U3RyaWN0KGJvb2wqIG9rLCBpbnQgYmFzZSkKIHsKLSAgICByZXR1cm4gY2hh
cmFjdGVyc1RvVUludDY0U3RyaWN0KG1fZGF0YSwgbV9sZW5ndGgsIG9rLCBiYXNlKTsKKyAgICBy
ZXR1cm4gY2hhcmFjdGVyc1RvVUludDY0U3RyaWN0KGNoYXJhY3RlcnMxNigpLCBtX2xlbmd0aCwg
b2ssIGJhc2UpOwogfQogCiBpbnRwdHJfdCBTdHJpbmdJbXBsOjp0b0ludFB0clN0cmljdChib29s
KiBvaywgaW50IGJhc2UpCiB7Ci0gICAgcmV0dXJuIGNoYXJhY3RlcnNUb0ludFB0clN0cmljdCht
X2RhdGEsIG1fbGVuZ3RoLCBvaywgYmFzZSk7CisgICAgcmV0dXJuIGNoYXJhY3RlcnNUb0ludFB0
clN0cmljdChjaGFyYWN0ZXJzMTYoKSwgbV9sZW5ndGgsIG9rLCBiYXNlKTsKIH0KIAogaW50IFN0
cmluZ0ltcGw6OnRvSW50KGJvb2wqIG9rKQogewotICAgIHJldHVybiBjaGFyYWN0ZXJzVG9JbnQo
bV9kYXRhLCBtX2xlbmd0aCwgb2spOworICAgIHJldHVybiBjaGFyYWN0ZXJzVG9JbnQoY2hhcmFj
dGVyczE2KCksIG1fbGVuZ3RoLCBvayk7CiB9CiAKIHVuc2lnbmVkIFN0cmluZ0ltcGw6OnRvVUlu
dChib29sKiBvaykKIHsKLSAgICByZXR1cm4gY2hhcmFjdGVyc1RvVUludChtX2RhdGEsIG1fbGVu
Z3RoLCBvayk7CisgICAgcmV0dXJuIGNoYXJhY3RlcnNUb1VJbnQoY2hhcmFjdGVyczE2KCksIG1f
bGVuZ3RoLCBvayk7CiB9CiAKIGludDY0X3QgU3RyaW5nSW1wbDo6dG9JbnQ2NChib29sKiBvaykK
IHsKLSAgICByZXR1cm4gY2hhcmFjdGVyc1RvSW50NjQobV9kYXRhLCBtX2xlbmd0aCwgb2spOwor
ICAgIHJldHVybiBjaGFyYWN0ZXJzVG9JbnQ2NChjaGFyYWN0ZXJzMTYoKSwgbV9sZW5ndGgsIG9r
KTsKIH0KIAogdWludDY0X3QgU3RyaW5nSW1wbDo6dG9VSW50NjQoYm9vbCogb2spCiB7Ci0gICAg
cmV0dXJuIGNoYXJhY3RlcnNUb1VJbnQ2NChtX2RhdGEsIG1fbGVuZ3RoLCBvayk7CisgICAgcmV0
dXJuIGNoYXJhY3RlcnNUb1VJbnQ2NChjaGFyYWN0ZXJzMTYoKSwgbV9sZW5ndGgsIG9rKTsKIH0K
IAogaW50cHRyX3QgU3RyaW5nSW1wbDo6dG9JbnRQdHIoYm9vbCogb2spCiB7Ci0gICAgcmV0dXJu
IGNoYXJhY3RlcnNUb0ludFB0cihtX2RhdGEsIG1fbGVuZ3RoLCBvayk7CisgICAgcmV0dXJuIGNo
YXJhY3RlcnNUb0ludFB0cihjaGFyYWN0ZXJzMTYoKSwgbV9sZW5ndGgsIG9rKTsKKwogfQogCiBk
b3VibGUgU3RyaW5nSW1wbDo6dG9Eb3VibGUoYm9vbCogb2ssIGJvb2wqIGRpZFJlYWROdW1iZXIp
CiB7Ci0gICAgcmV0dXJuIGNoYXJhY3RlcnNUb0RvdWJsZShtX2RhdGEsIG1fbGVuZ3RoLCBvaywg
ZGlkUmVhZE51bWJlcik7CisgICAgcmV0dXJuIGNoYXJhY3RlcnNUb0RvdWJsZShjaGFyYWN0ZXJz
MTYoKSwgbV9sZW5ndGgsIG9rLCBkaWRSZWFkTnVtYmVyKTsKIH0KIAogZmxvYXQgU3RyaW5nSW1w
bDo6dG9GbG9hdChib29sKiBvaywgYm9vbCogZGlkUmVhZE51bWJlcikKIHsKLSAgICByZXR1cm4g
Y2hhcmFjdGVyc1RvRmxvYXQobV9kYXRhLCBtX2xlbmd0aCwgb2ssIGRpZFJlYWROdW1iZXIpOwor
ICAgIHJldHVybiBjaGFyYWN0ZXJzVG9GbG9hdChjaGFyYWN0ZXJzMTYoKSwgbV9sZW5ndGgsIG9r
LCBkaWRSZWFkTnVtYmVyKTsKIH0KIAogc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgVUNoYXIqIGEs
IGNvbnN0IGNoYXIqIGIsIGludCBsZW5ndGgpCkBAIC01NjEsMTIgKzY5NCwxMiBAQCBpbnQgY29k
ZVBvaW50Q29tcGFyZShjb25zdCBTdHJpbmdJbXBsKiBzCiAKIHNpemVfdCBTdHJpbmdJbXBsOjpm
aW5kKFVDaGFyIGMsIHVuc2lnbmVkIHN0YXJ0KQogewotICAgIHJldHVybiBXVEY6OmZpbmQobV9k
YXRhLCBtX2xlbmd0aCwgYywgc3RhcnQpOworICAgIHJldHVybiBXVEY6OmZpbmQoY2hhcmFjdGVy
czE2KCksIG1fbGVuZ3RoLCBjLCBzdGFydCk7CiB9CiAKIHNpemVfdCBTdHJpbmdJbXBsOjpmaW5k
KENoYXJhY3Rlck1hdGNoRnVuY3Rpb25QdHIgbWF0Y2hGdW5jdGlvbiwgdW5zaWduZWQgc3RhcnQp
CiB7Ci0gICAgcmV0dXJuIFdURjo6ZmluZChtX2RhdGEsIG1fbGVuZ3RoLCBtYXRjaEZ1bmN0aW9u
LCBzdGFydCk7CisgICAgcmV0dXJuIFdURjo6ZmluZChjaGFyYWN0ZXJzMTYoKSwgbV9sZW5ndGgs
IG1hdGNoRnVuY3Rpb24sIHN0YXJ0KTsKIH0KIAogc2l6ZV90IFN0cmluZ0ltcGw6OmZpbmQoY29u
c3QgY2hhciogbWF0Y2hTdHJpbmcsIHVuc2lnbmVkIGluZGV4KQpAQCAtNTgzLDcgKzcxNiw3IEBA
IHNpemVfdCBTdHJpbmdJbXBsOjpmaW5kKGNvbnN0IGNoYXIqIG1hdGMKIAogICAgIC8vIE9wdGlt
aXphdGlvbiAxOiBmYXN0IGNhc2UgZm9yIHN0cmluZ3Mgb2YgbGVuZ3RoIDEuCiAgICAgaWYgKG1h
dGNoTGVuZ3RoID09IDEpCi0gICAgICAgIHJldHVybiBXVEY6OmZpbmQoY2hhcmFjdGVycygpLCBs
ZW5ndGgoKSwgKihjb25zdCB1bnNpZ25lZCBjaGFyKiltYXRjaFN0cmluZywgaW5kZXgpOworICAg
ICAgICByZXR1cm4gV1RGOjpmaW5kKGNoYXJhY3RlcnMxNigpLCBsZW5ndGgoKSwgKihjb25zdCB1
bnNpZ25lZCBjaGFyKiltYXRjaFN0cmluZywgaW5kZXgpOwogCiAgICAgLy8gQ2hlY2sgaW5kZXgg
JiBtYXRjaExlbmd0aCBhcmUgaW4gcmFuZ2UuCiAgICAgaWYgKGluZGV4ID4gbGVuZ3RoKCkpCkBA
IC02NjIsNyArNzk1LDcgQEAgc2l6ZV90IFN0cmluZ0ltcGw6OmZpbmQoU3RyaW5nSW1wbCogbWF0
YwogCiAgICAgLy8gT3B0aW1pemF0aW9uIDE6IGZhc3QgY2FzZSBmb3Igc3RyaW5ncyBvZiBsZW5n
dGggMS4KICAgICBpZiAobWF0Y2hMZW5ndGggPT0gMSkKLSAgICAgICAgcmV0dXJuIFdURjo6Zmlu
ZChjaGFyYWN0ZXJzKCksIGxlbmd0aCgpLCBtYXRjaFN0cmluZy0+Y2hhcmFjdGVycygpWzBdLCBp
bmRleCk7CisgICAgICAgIHJldHVybiBXVEY6OmZpbmQoY2hhcmFjdGVyczE2KCksIGxlbmd0aCgp
LCBtYXRjaFN0cmluZy0+Y2hhcmFjdGVyczE2KClbMF0sIGluZGV4KTsKIAogICAgIC8vIENoZWNr
IGluZGV4ICYgbWF0Y2hMZW5ndGggYXJlIGluIHJhbmdlLgogICAgIGlmIChpbmRleCA+IGxlbmd0
aCgpKQpAQCAtNzMwLDcgKzg2Myw3IEBAIHNpemVfdCBTdHJpbmdJbXBsOjpmaW5kSWdub3JpbmdD
YXNlKFN0cmkKIAogc2l6ZV90IFN0cmluZ0ltcGw6OnJldmVyc2VGaW5kKFVDaGFyIGMsIHVuc2ln
bmVkIGluZGV4KQogewotICAgIHJldHVybiBXVEY6OnJldmVyc2VGaW5kKG1fZGF0YSwgbV9sZW5n
dGgsIGMsIGluZGV4KTsKKyAgICByZXR1cm4gV1RGOjpyZXZlcnNlRmluZChjaGFyYWN0ZXJzMTYo
KSwgbV9sZW5ndGgsIGMsIGluZGV4KTsKIH0KIAogc2l6ZV90IFN0cmluZ0ltcGw6OnJldmVyc2VG
aW5kKFN0cmluZ0ltcGwqIG1hdGNoU3RyaW5nLCB1bnNpZ25lZCBpbmRleCkKQEAgLTc0NCw3ICs4
NzcsNyBAQCBzaXplX3QgU3RyaW5nSW1wbDo6cmV2ZXJzZUZpbmQoU3RyaW5nSW1wCiAKICAgICAv
LyBPcHRpbWl6YXRpb24gMTogZmFzdCBjYXNlIGZvciBzdHJpbmdzIG9mIGxlbmd0aCAxLgogICAg
IGlmIChtYXRjaExlbmd0aCA9PSAxKQotICAgICAgICByZXR1cm4gV1RGOjpyZXZlcnNlRmluZChj
aGFyYWN0ZXJzKCksIGxlbmd0aCgpLCBtYXRjaFN0cmluZy0+Y2hhcmFjdGVycygpWzBdLCBpbmRl
eCk7CisgICAgICAgIHJldHVybiBXVEY6OnJldmVyc2VGaW5kKGNoYXJhY3RlcnMxNigpLCBsZW5n
dGgoKSwgbWF0Y2hTdHJpbmctPmNoYXJhY3RlcnMoKVswXSwgaW5kZXgpOwogCiAgICAgLy8gQ2hl
Y2sgaW5kZXggJiBtYXRjaExlbmd0aCBhcmUgaW4gcmFuZ2UuCiAgICAgaWYgKG1hdGNoTGVuZ3Ro
ID4gbGVuZ3RoKCkpCkBAIC04MTcsMTcgKzk1MCw1MyBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+
IFN0cmluZ0ltcGw6OnJlcGxhCiAgICAgaWYgKG9sZEMgPT0gbmV3QykKICAgICAgICAgcmV0dXJu
IHRoaXM7CiAgICAgdW5zaWduZWQgaTsKLSAgICBmb3IgKGkgPSAwOyBpICE9IG1fbGVuZ3RoOyAr
K2kpCi0gICAgICAgIGlmIChtX2RhdGFbaV0gPT0gb2xkQykKKyAgICBmb3IgKGkgPSAwOyBpICE9
IG1fbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgVUNoYXIgYyA9IGlzOEJpdCgpID8gc3RhdGljX2Nh
c3Q8dW5zaWduZWQgY2hhcj4obV9kYXRhOFtpXSkgOiBtX2RhdGExNltpXTsKKyAgICAgICAgaWYg
KGMgPT0gb2xkQykKICAgICAgICAgICAgIGJyZWFrOworICAgIH0KICAgICBpZiAoaSA9PSBtX2xl
bmd0aCkKICAgICAgICAgcmV0dXJuIHRoaXM7CiAKKyAgICBpZiAoaXM4Qml0KCkpIHsKKyAgICAg
ICAgaWYgKG9sZEMgPiAweGZmKSAvLyBMb29raW5nIGZvciBhIDE2IGJpdCBjaGFyIGluIGFuIDgg
Yml0IHN0cmluZworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisKKyAgICAgICAgaWYgKG5ld0Mg
PD0gMHhmZikgeworICAgICAgICAgICAgY2hhciogZGF0YTsKKyAgICAgICAgICAgIGNoYXIgb2xk
Q2hhciA9IHN0YXRpY19jYXN0PGNoYXI+KG9sZEMpOworICAgICAgICAgICAgY2hhciBuZXdDaGFy
ID0gc3RhdGljX2Nhc3Q8Y2hhcj4obmV3Qyk7CisKKyAgICAgICAgICAgIFJlZlB0cjxTdHJpbmdJ
bXBsPiBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChtX2xlbmd0aCwgZGF0YSk7CisKKyAg
ICAgICAgICAgIGZvciAoaSA9IDA7IGkgIT0gbV9sZW5ndGg7ICsraSkgeworICAgICAgICAgICAg
ICAgIGNoYXIgY2ggPSBtX2RhdGE4W2ldOworICAgICAgICAgICAgICAgIGlmIChjaCA9PSBvbGRD
aGFyKQorICAgICAgICAgICAgICAgICAgICBjaCA9IG5ld0NoYXI7CisgICAgICAgICAgICAgICAg
ZGF0YVtpXSA9IGNoOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG5ld0ltcGwu
cmVsZWFzZSgpOworICAgICAgICB9CisKKyAgICAgICAgLy8gUG9zc2libHkgbmVlZCB0byB1cCBj
b252ZXJ0IGZyb20gOCB0byAxNiBiaXQKKyAgICAgICAgVUNoYXIqIGRhdGE7CisgICAgICAgIFJl
ZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChtX2xlbmd0aCwg
ZGF0YSk7CisKKyAgICAgICAgZm9yIChpID0gMDsgaSAhPSBtX2xlbmd0aDsgKytpKSB7CisgICAg
ICAgICAgICBVQ2hhciBjaCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KG1fZGF0YThbaV0p
OworICAgICAgICAgICAgaWYgKGNoID09IG9sZEMpCisgICAgICAgICAgICAgICAgY2ggPSBuZXdD
OworICAgICAgICAgICAgZGF0YVtpXSA9IGNoOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJu
IG5ld0ltcGwucmVsZWFzZSgpOworICAgIH0KKwogICAgIFVDaGFyKiBkYXRhOwogICAgIFJlZlB0
cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChtX2xlbmd0aCwgZGF0
YSk7CiAKICAgICBmb3IgKGkgPSAwOyBpICE9IG1fbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgVUNo
YXIgY2ggPSBtX2RhdGFbaV07CisgICAgICAgIFVDaGFyIGNoID0gbV9kYXRhMTZbaV07CiAgICAg
ICAgIGlmIChjaCA9PSBvbGRDKQogICAgICAgICAgICAgY2ggPSBuZXdDOwogICAgICAgICBkYXRh
W2ldID0gY2g7CkBAIC04NDIsMTggKzEwMTEsNDMgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBT
dHJpbmdJbXBsOjpyZXBsYQogICAgIHVuc2lnbmVkIGxlbmd0aFRvSW5zZXJ0ID0gc3RyID8gc3Ry
LT5sZW5ndGgoKSA6IDA7CiAgICAgaWYgKCFsZW5ndGhUb1JlcGxhY2UgJiYgIWxlbmd0aFRvSW5z
ZXJ0KQogICAgICAgICByZXR1cm4gdGhpczsKLSAgICBVQ2hhciogZGF0YTsKIAogICAgIGlmICgo
bGVuZ3RoKCkgLSBsZW5ndGhUb1JlcGxhY2UpID49IChudW1lcmljX2xpbWl0czx1bnNpZ25lZD46
Om1heCgpIC0gbGVuZ3RoVG9JbnNlcnQpKQogICAgICAgICBDUkFTSCgpOwogCisgICAgaWYgKGlz
OEJpdCgpICYmICghc3RyIHx8IHN0ci0+aXM4Qml0KCkpKSB7CisgICAgICAgIGNoYXIqIGRhdGE7
CisgICAgICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0KKyAgICAgICAgY3JlYXRlVW5p
bml0aWFsaXplZChsZW5ndGgoKSAtIGxlbmd0aFRvUmVwbGFjZSArIGxlbmd0aFRvSW5zZXJ0LCBk
YXRhKTsKKyAgICAgICAgbWVtY3B5KGRhdGEsIG1fZGF0YTgsIHBvc2l0aW9uICogc2l6ZW9mKGNo
YXIpKTsKKyAgICAgICAgaWYgKHN0cikKKyAgICAgICAgICAgIG1lbWNweShkYXRhICsgcG9zaXRp
b24sIHN0ci0+bV9kYXRhOCwgbGVuZ3RoVG9JbnNlcnQgKiBzaXplb2YoY2hhcikpOworICAgICAg
ICBtZW1jcHkoZGF0YSArIHBvc2l0aW9uICsgbGVuZ3RoVG9JbnNlcnQsIG1fZGF0YTggKyBwb3Np
dGlvbiArIGxlbmd0aFRvUmVwbGFjZSwKKyAgICAgICAgICAgICAgIChsZW5ndGgoKSAtIHBvc2l0
aW9uIC0gbGVuZ3RoVG9SZXBsYWNlKSAqIHNpemVvZihjaGFyKSk7CisgICAgICAgIHJldHVybiBu
ZXdJbXBsLnJlbGVhc2UoKTsKKyAgICB9CisgICAgVUNoYXIqIGRhdGE7CiAgICAgUmVmUHRyPFN0
cmluZ0ltcGw+IG5ld0ltcGwgPQogICAgICAgICBjcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCgp
IC0gbGVuZ3RoVG9SZXBsYWNlICsgbGVuZ3RoVG9JbnNlcnQsIGRhdGEpOwotICAgIG1lbWNweShk
YXRhLCBjaGFyYWN0ZXJzKCksIHBvc2l0aW9uICogc2l6ZW9mKFVDaGFyKSk7Ci0gICAgaWYgKHN0
cikKLSAgICAgICAgbWVtY3B5KGRhdGEgKyBwb3NpdGlvbiwgc3RyLT5jaGFyYWN0ZXJzKCksIGxl
bmd0aFRvSW5zZXJ0ICogc2l6ZW9mKFVDaGFyKSk7Ci0gICAgbWVtY3B5KGRhdGEgKyBwb3NpdGlv
biArIGxlbmd0aFRvSW5zZXJ0LCBjaGFyYWN0ZXJzKCkgKyBwb3NpdGlvbiArIGxlbmd0aFRvUmVw
bGFjZSwKLSAgICAgICAgKGxlbmd0aCgpIC0gcG9zaXRpb24gLSBsZW5ndGhUb1JlcGxhY2UpICog
c2l6ZW9mKFVDaGFyKSk7CisgICAgaWYgKGlzOEJpdCgpKQorICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgcG9zaXRpb247IGkrKykKKyAgICAgICAgICAgIGRhdGFbaV0gPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBjaGFyPihtX2RhdGE4W2ldKTsKKyAgICBlbHNlCisgICAgICAgIG1lbWNw
eShkYXRhLCBtX2RhdGExNiwgcG9zaXRpb24gKiBzaXplb2YoVUNoYXIpKTsKKyAgICBpZiAoc3Ry
KSB7CisgICAgICAgIGlmIChzdHItPmlzOEJpdCgpKQorICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGxlbmd0aFRvSW5zZXJ0OyBpKyspCisgICAgICAgICAgICAgICAgZGF0YVtp
ICsgcG9zaXRpb25dID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oc3RyLT5tX2RhdGE4W2ld
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbWVtY3B5KGRhdGEgKyBwb3NpdGlvbiwgc3Ry
LT5tX2RhdGExNiwgbGVuZ3RoVG9JbnNlcnQgKiBzaXplb2YoVUNoYXIpKTsKKyAgICB9CisgICAg
aWYgKGlzOEJpdCgpKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGgo
KSAtIHBvc2l0aW9uIC0gbGVuZ3RoVG9SZXBsYWNlOyBpKyspCisgICAgICAgICAgICBkYXRhW2kg
KyBwb3NpdGlvbiArIGxlbmd0aFRvSW5zZXJ0XSA9IG1fZGF0YThbaSArIHBvc2l0aW9uICsgbGVu
Z3RoVG9SZXBsYWNlXTsKKyAgICB9IGVsc2UgeworICAgICAgICBtZW1jcHkoZGF0YSArIHBvc2l0
aW9uICsgbGVuZ3RoVG9JbnNlcnQsIGNoYXJhY3RlcnMoKSArIHBvc2l0aW9uICsgbGVuZ3RoVG9S
ZXBsYWNlLAorICAgICAgICAgICAgKGxlbmd0aCgpIC0gcG9zaXRpb24gLSBsZW5ndGhUb1JlcGxh
Y2UpICogc2l6ZW9mKFVDaGFyKSk7CisgICAgfQogICAgIHJldHVybiBuZXdJbXBsLnJlbGVhc2Uo
KTsKIH0KIApAQCAtODg2LDI2ICsxMDgwLDY2IEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3Ry
aW5nSW1wbDo6cmVwbGEKIAogICAgIG5ld1NpemUgKz0gcmVwbGFjZVNpemU7CiAKLSAgICBVQ2hh
ciogZGF0YTsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlh
bGl6ZWQobmV3U2l6ZSwgZGF0YSk7Ci0KICAgICAvLyBDb25zdHJ1Y3QgdGhlIG5ldyBkYXRhCiAg
ICAgc2l6ZV90IHNyY1NlZ21lbnRFbmQ7CiAgICAgdW5zaWduZWQgc3JjU2VnbWVudExlbmd0aDsK
ICAgICBzcmNTZWdtZW50U3RhcnQgPSAwOwogICAgIHVuc2lnbmVkIGRzdE9mZnNldCA9IDA7CiAg
ICAgCisgICAgLy8gVGhlcmUgYXJlIDQgY2FzZXM6CisgICAgLy8gMS4gdGhpcyBhbmQgcmVwbGFj
ZW1lbnQgYXJlIGJvdGggMTYgYml0CisgICAgLy8gMi4gdGhpcyBhbmQgcmVwbGFjZW1lbnQgYXJl
IGJvdGggOCBiaXQKKyAgICAvLyAzLiB0aGlzIGlzIDggYml0IGFuZCByZXBsYWNlbWVudCBpcyAx
NiBiaXQKKyAgICAvLyA0LiB0aGlzIGlzIDE2IGJpdCBhbmQgcmVwbGFjZW1lbnQgaXMgOCBiaXQK
KyAgICAvLyBQbHVzIHRoZXJlIGlzIHZlcnkgc2ltaWxhciBjb2RlIGluIHRoZSBwYXR0ZXJuIHJl
cGxhY2VtZW50IGZ1bmN0aW9uIGJlbG93LgorICAgIGlmIChpczhCaXQoKSAmJiByZXBsYWNlbWVu
dC0+aXM4Qml0KCkpIHsKKyAgICAgICAgY2hhciogZGF0YTsKKyAgICAgICAgUmVmUHRyPFN0cmlu
Z0ltcGw+IG5ld0ltcGwgPSBjcmVhdGVVbmluaXRpYWxpemVkKG5ld1NpemUsIGRhdGEpOworCisg
ICAgICAgIHdoaWxlICgoc3JjU2VnbWVudEVuZCA9IGZpbmQocGF0dGVybiwgc3JjU2VnbWVudFN0
YXJ0KSkgIT0gbm90Rm91bmQpIHsKKyAgICAgICAgICAgIHNyY1NlZ21lbnRMZW5ndGggPSBzcmNT
ZWdtZW50RW5kIC0gc3JjU2VnbWVudFN0YXJ0OworICAgICAgICAgICAgbWVtY3B5KGRhdGEgKyBk
c3RPZmZzZXQsIG1fZGF0YTggKyBzcmNTZWdtZW50U3RhcnQsIHNyY1NlZ21lbnRMZW5ndGggKiBz
aXplb2YoY2hhcikpOworICAgICAgICAgICAgZHN0T2Zmc2V0ICs9IHNyY1NlZ21lbnRMZW5ndGg7
CisgICAgICAgICAgICBtZW1jcHkoZGF0YSArIGRzdE9mZnNldCwgcmVwbGFjZW1lbnQtPm1fZGF0
YTgsIHJlcFN0ckxlbmd0aCAqIHNpemVvZihjaGFyKSk7CisgICAgICAgICAgICBkc3RPZmZzZXQg
Kz0gcmVwU3RyTGVuZ3RoOworICAgICAgICAgICAgc3JjU2VnbWVudFN0YXJ0ID0gc3JjU2VnbWVu
dEVuZCArIDE7CisgICAgICAgIH0KKworICAgICAgICBzcmNTZWdtZW50TGVuZ3RoID0gbV9sZW5n
dGggLSBzcmNTZWdtZW50U3RhcnQ7CisgICAgICAgIG1lbWNweShkYXRhICsgZHN0T2Zmc2V0LCBt
X2RhdGE4ICsgc3JjU2VnbWVudFN0YXJ0LCBzcmNTZWdtZW50TGVuZ3RoICogc2l6ZW9mKGNoYXIp
KTsKKworICAgICAgICBBU1NFUlQoZHN0T2Zmc2V0ICsgc3JjU2VnbWVudExlbmd0aCA9PSBuZXdJ
bXBsLT5sZW5ndGgoKSk7CisKKyAgICAgICAgcmV0dXJuIG5ld0ltcGwucmVsZWFzZSgpOworICAg
IH0KKyAgICBVQ2hhciogZGF0YTsKKyAgICBSZWZQdHI8U3RyaW5nSW1wbD4gbmV3SW1wbCA9IGNy
ZWF0ZVVuaW5pdGlhbGl6ZWQobmV3U2l6ZSwgZGF0YSk7CisKICAgICB3aGlsZSAoKHNyY1NlZ21l
bnRFbmQgPSBmaW5kKHBhdHRlcm4sIHNyY1NlZ21lbnRTdGFydCkpICE9IG5vdEZvdW5kKSB7CiAg
ICAgICAgIHNyY1NlZ21lbnRMZW5ndGggPSBzcmNTZWdtZW50RW5kIC0gc3JjU2VnbWVudFN0YXJ0
OwotICAgICAgICBtZW1jcHkoZGF0YSArIGRzdE9mZnNldCwgbV9kYXRhICsgc3JjU2VnbWVudFN0
YXJ0LCBzcmNTZWdtZW50TGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CisgICAgICAgIGlmIChpczhC
aXQoKSkKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzcmNTZWdtZW50TGVu
Z3RoOyBpKyspCisgICAgICAgICAgICAgICAgZGF0YVtpICsgZHN0T2Zmc2V0XSA9IG1fZGF0YThb
aSArIHNyY1NlZ21lbnRTdGFydF07CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1lbWNweShk
YXRhICsgZHN0T2Zmc2V0LCBtX2RhdGExNiArIHNyY1NlZ21lbnRTdGFydCwgc3JjU2VnbWVudExl
bmd0aCAqIHNpemVvZihVQ2hhcikpOwogICAgICAgICBkc3RPZmZzZXQgKz0gc3JjU2VnbWVudExl
bmd0aDsKLSAgICAgICAgbWVtY3B5KGRhdGEgKyBkc3RPZmZzZXQsIHJlcGxhY2VtZW50LT5tX2Rh
dGEsIHJlcFN0ckxlbmd0aCAqIHNpemVvZihVQ2hhcikpOworICAgICAgICBpZiAocmVwbGFjZW1l
bnQtPmlzOEJpdCgpKQorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlcFN0
ckxlbmd0aDsgaSsrKQorICAgICAgICAgICAgICAgIGRhdGFbaSArIGRzdE9mZnNldF0gPSByZXBs
YWNlbWVudC0+bV9kYXRhOFtpXTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbWVtY3B5KGRh
dGEgKyBkc3RPZmZzZXQsIHJlcGxhY2VtZW50LT5tX2RhdGExNiwgcmVwU3RyTGVuZ3RoICogc2l6
ZW9mKFVDaGFyKSk7CiAgICAgICAgIGRzdE9mZnNldCArPSByZXBTdHJMZW5ndGg7CiAgICAgICAg
IHNyY1NlZ21lbnRTdGFydCA9IHNyY1NlZ21lbnRFbmQgKyAxOworCisgICAgICAgIHJldHVybiBu
ZXdJbXBsLnJlbGVhc2UoKTsKICAgICB9CiAKICAgICBzcmNTZWdtZW50TGVuZ3RoID0gbV9sZW5n
dGggLSBzcmNTZWdtZW50U3RhcnQ7Ci0gICAgbWVtY3B5KGRhdGEgKyBkc3RPZmZzZXQsIG1fZGF0
YSArIHNyY1NlZ21lbnRTdGFydCwgc3JjU2VnbWVudExlbmd0aCAqIHNpemVvZihVQ2hhcikpOwor
ICAgIGlmIChpczhCaXQoKSkKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNyY1Nl
Z21lbnRMZW5ndGg7IGkrKykKKyAgICAgICAgICAgIGRhdGFbaSArIGRzdE9mZnNldF0gPSBtX2Rh
dGE4W2kgKyBzcmNTZWdtZW50U3RhcnRdOworICAgIGVsc2UKKyAgICAgICAgbWVtY3B5KGRhdGEg
KyBkc3RPZmZzZXQsIG1fZGF0YTE2ICsgc3JjU2VnbWVudFN0YXJ0LCBzcmNTZWdtZW50TGVuZ3Ro
ICogc2l6ZW9mKFVDaGFyKSk7CiAKICAgICBBU1NFUlQoZHN0T2Zmc2V0ICsgc3JjU2VnbWVudExl
bmd0aCA9PSBuZXdJbXBsLT5sZW5ndGgoKSk7CiAKQEAgLTk0NCw4ICsxMTc4LDYgQEAgUGFzc1Jl
ZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpyZXBsYQogCiAgICAgbmV3U2l6ZSArPSBtYXRj
aENvdW50ICogcmVwU3RyTGVuZ3RoOwogCi0gICAgVUNoYXIqIGRhdGE7Ci0gICAgUmVmUHRyPFN0
cmluZ0ltcGw+IG5ld0ltcGwgPSBjcmVhdGVVbmluaXRpYWxpemVkKG5ld1NpemUsIGRhdGEpOwog
ICAgIAogICAgIC8vIENvbnN0cnVjdCB0aGUgbmV3IGRhdGEKICAgICBzaXplX3Qgc3JjU2VnbWVu
dEVuZDsKQEAgLTk1MywxNyArMTE4NSw1NiBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmlu
Z0ltcGw6OnJlcGxhCiAgICAgc3JjU2VnbWVudFN0YXJ0ID0gMDsKICAgICB1bnNpZ25lZCBkc3RP
ZmZzZXQgPSAwOwogICAgIAorICAgIC8vIFRoZXJlIGFyZSA0IGNhc2VzOgorICAgIC8vIDEuIHRo
aXMgYW5kIHJlcGxhY2VtZW50IGFyZSBib3RoIDE2IGJpdAorICAgIC8vIDIuIHRoaXMgYW5kIHJl
cGxhY2VtZW50IGFyZSBib3RoIDggYml0CisgICAgLy8gMy4gdGhpcyBpcyA4IGJpdCBhbmQgcmVw
bGFjZW1lbnQgaXMgMTYgYml0CisgICAgLy8gNC4gdGhpcyBpcyAxNiBiaXQgYW5kIHJlcGxhY2Vt
ZW50IGlzIDggYml0CisgICAgLy8gUGx1cyB0aGVyZSBpcyB2ZXJ5IHNpbWlsYXIgY29kZSBpbiB0
aGUgc2luZ2xlLWNoYXIgcmVwbGFjZW1lbnQgZnVuY3Rpb24gYWJvdmUuCisgICAgaWYgKGlzOEJp
dCgpICYmIHJlcGxhY2VtZW50LT5pczhCaXQoKSkgeworICAgICAgICBjaGFyKiBkYXRhOworICAg
ICAgICBSZWZQdHI8U3RyaW5nSW1wbD4gbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQobmV3
U2l6ZSwgZGF0YSk7CisgICAgICAgIHdoaWxlICgoc3JjU2VnbWVudEVuZCA9IGZpbmQocGF0dGVy
biwgc3JjU2VnbWVudFN0YXJ0KSkgIT0gbm90Rm91bmQpIHsKKyAgICAgICAgICAgIHNyY1NlZ21l
bnRMZW5ndGggPSBzcmNTZWdtZW50RW5kIC0gc3JjU2VnbWVudFN0YXJ0OworICAgICAgICAgICAg
bWVtY3B5KGRhdGEgKyBkc3RPZmZzZXQsIG1fZGF0YTggKyBzcmNTZWdtZW50U3RhcnQsIHNyY1Nl
Z21lbnRMZW5ndGggKiBzaXplb2YoY2hhcikpOworICAgICAgICAgICAgZHN0T2Zmc2V0ICs9IHNy
Y1NlZ21lbnRMZW5ndGg7CisgICAgICAgICAgICBtZW1jcHkoZGF0YSArIGRzdE9mZnNldCwgcmVw
bGFjZW1lbnQtPm1fZGF0YTgsIHJlcFN0ckxlbmd0aCAqIHNpemVvZihjaGFyKSk7CisgICAgICAg
ICAgICBkc3RPZmZzZXQgKz0gcmVwU3RyTGVuZ3RoOworICAgICAgICAgICAgc3JjU2VnbWVudFN0
YXJ0ID0gc3JjU2VnbWVudEVuZCArIHBhdHRlcm5MZW5ndGg7CisgICAgICAgIH0KKworICAgICAg
ICBzcmNTZWdtZW50TGVuZ3RoID0gbV9sZW5ndGggLSBzcmNTZWdtZW50U3RhcnQ7CisgICAgICAg
IG1lbWNweShkYXRhICsgZHN0T2Zmc2V0LCBtX2RhdGE4ICsgc3JjU2VnbWVudFN0YXJ0LCBzcmNT
ZWdtZW50TGVuZ3RoICogc2l6ZW9mKGNoYXIpKTsKKworICAgICAgICBBU1NFUlQoZHN0T2Zmc2V0
ICsgc3JjU2VnbWVudExlbmd0aCA9PSBuZXdJbXBsLT5sZW5ndGgoKSk7CisKKyAgICAgICAgcmV0
dXJuIG5ld0ltcGwucmVsZWFzZSgpOworICAgIH0KKyAgICBVQ2hhciogZGF0YTsKKyAgICBSZWZQ
dHI8U3RyaW5nSW1wbD4gbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQobmV3U2l6ZSwgZGF0
YSk7CiAgICAgd2hpbGUgKChzcmNTZWdtZW50RW5kID0gZmluZChwYXR0ZXJuLCBzcmNTZWdtZW50
U3RhcnQpKSAhPSBub3RGb3VuZCkgewogICAgICAgICBzcmNTZWdtZW50TGVuZ3RoID0gc3JjU2Vn
bWVudEVuZCAtIHNyY1NlZ21lbnRTdGFydDsKLSAgICAgICAgbWVtY3B5KGRhdGEgKyBkc3RPZmZz
ZXQsIG1fZGF0YSArIHNyY1NlZ21lbnRTdGFydCwgc3JjU2VnbWVudExlbmd0aCAqIHNpemVvZihV
Q2hhcikpOworICAgICAgICBpZiAoaXM4Qml0KCkpCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgc3JjU2VnbWVudExlbmd0aDsgaSsrKQorICAgICAgICAgICAgICAgIGRhdGFb
aSArIGRzdE9mZnNldF0gPSBtX2RhdGE4W2kgKyBzcmNTZWdtZW50U3RhcnRdOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBtZW1jcHkoZGF0YSArIGRzdE9mZnNldCwgbV9kYXRhMTYgKyBzcmNT
ZWdtZW50U3RhcnQsIHNyY1NlZ21lbnRMZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKICAgICAgICAg
ZHN0T2Zmc2V0ICs9IHNyY1NlZ21lbnRMZW5ndGg7Ci0gICAgICAgIG1lbWNweShkYXRhICsgZHN0
T2Zmc2V0LCByZXBsYWNlbWVudC0+bV9kYXRhLCByZXBTdHJMZW5ndGggKiBzaXplb2YoVUNoYXIp
KTsKKyAgICAgICAgaWYgKHJlcGxhY2VtZW50LT5pczhCaXQoKSkKKyAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCByZXBTdHJMZW5ndGg7IGkrKykKKyAgICAgICAgICAgICAgICBk
YXRhW2kgKyBkc3RPZmZzZXRdID0gcmVwbGFjZW1lbnQtPm1fZGF0YThbaV07CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIG1lbWNweShkYXRhICsgZHN0T2Zmc2V0LCByZXBsYWNlbWVudC0+bV9k
YXRhMTYsIHJlcFN0ckxlbmd0aCAqIHNpemVvZihVQ2hhcikpOwogICAgICAgICBkc3RPZmZzZXQg
Kz0gcmVwU3RyTGVuZ3RoOwogICAgICAgICBzcmNTZWdtZW50U3RhcnQgPSBzcmNTZWdtZW50RW5k
ICsgcGF0dGVybkxlbmd0aDsKICAgICB9CiAKICAgICBzcmNTZWdtZW50TGVuZ3RoID0gbV9sZW5n
dGggLSBzcmNTZWdtZW50U3RhcnQ7Ci0gICAgbWVtY3B5KGRhdGEgKyBkc3RPZmZzZXQsIG1fZGF0
YSArIHNyY1NlZ21lbnRTdGFydCwgc3JjU2VnbWVudExlbmd0aCAqIHNpemVvZihVQ2hhcikpOwor
ICAgIGlmIChpczhCaXQoKSkKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNyY1Nl
Z21lbnRMZW5ndGg7IGkrKykKKyAgICAgICAgICAgIGRhdGFbaSArIGRzdE9mZnNldF0gPSBtX2Rh
dGE4W2kgKyBzcmNTZWdtZW50U3RhcnRdOworICAgIGVsc2UKKyAgICAgICAgbWVtY3B5KGRhdGEg
KyBkc3RPZmZzZXQsIG1fZGF0YTE2ICsgc3JjU2VnbWVudFN0YXJ0LCBzcmNTZWdtZW50TGVuZ3Ro
ICogc2l6ZW9mKFVDaGFyKSk7CiAKICAgICBBU1NFUlQoZHN0T2Zmc2V0ICsgc3JjU2VnbWVudExl
bmd0aCA9PSBuZXdJbXBsLT5sZW5ndGgoKSk7CiAKQEAgLTk3NSw2ICsxMjQ2LDQ1IEBAIGJvb2wg
ZXF1YWwoY29uc3QgU3RyaW5nSW1wbCogYSwgY29uc3QgU3QKICAgICByZXR1cm4gU3RyaW5nSGFz
aDo6ZXF1YWwoYSwgYik7CiB9CiAKK2Jvb2wgZXF1YWwoY29uc3QgU3RyaW5nSW1wbCogYSwgY29u
c3QgY2hhciogYiwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIGlmICghYSkKKyAgICAgICAgcmV0
dXJuICFiOworICAgIGlmICghYikKKyAgICAgICAgcmV0dXJuICFhOworCisgICAgaWYgKGxlbmd0
aCAhPSBhLT5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGEtPmlz
OEJpdCgpKSB7CisgICAgICAgIGNvbnN0IGNoYXIqIGFDaGFycyA9IGEtPmNoYXJhY3RlcnM4KCk7
CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSAhPSBsZW5ndGg7ICsraSkgeworICAg
ICAgICAgICAgdW5zaWduZWQgY2hhciBiYyA9IGJbaV07CisgICAgICAgICAgICB1bnNpZ25lZCBj
aGFyIGFjID0gYUNoYXJzW2ldOworICAgICAgICAgICAgaWYgKCFiYykKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoYWMgIT0gYmMpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorCisgICAgY29uc3QgVUNoYXIqIGFDaGFycyA9IGEtPmNoYXJhY3RlcnMxNigpOworCisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSAhPSBsZW5ndGg7ICsraSkgeworICAgICAgICBVQ2hhciBi
YyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGJbaV0pOworICAgICAgICBVQ2hhciBhYyA9
IGFDaGFyc1tpXTsKKyAgICAgICAgaWYgKCFiYykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgaWYgKGFjICE9IGJjKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIHJldHVybiB0cnVlOworfQorCiBib29sIGVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqIGEs
IGNvbnN0IGNoYXIqIGIpCiB7CiAgICAgaWYgKCFhKQpAQCAtOTgzLDEyICsxMjkzLDI3IEBAIGJv
b2wgZXF1YWwoY29uc3QgU3RyaW5nSW1wbCogYSwgY29uc3QgY2gKICAgICAgICAgcmV0dXJuICFh
OwogCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gYS0+bGVuZ3RoKCk7Ci0gICAgY29uc3QgVUNoYXIq
IGFzID0gYS0+Y2hhcmFjdGVycygpOworCisgICAgaWYgKGEtPmlzOEJpdCgpKSB7CisgICAgICAg
IGNvbnN0IGNoYXIqIGFQdHIgPSBhLT5jaGFyYWN0ZXJzOCgpOworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpICE9IGxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBjaGFy
IGJjID0gYltpXTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYWMgPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZCBjaGFyPihhUHRyW2ldKTsKKyAgICAgICAgICAgIGlmICghYmMpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKGFjICE9IGJjKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiAhYltsZW5n
dGhdOworICAgIH0KKworICAgIGNvbnN0IFVDaGFyKiBhUHRyID0gYS0+Y2hhcmFjdGVyczE2KCk7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSAhPSBsZW5ndGg7ICsraSkgewogICAgICAgICB1
bnNpZ25lZCBjaGFyIGJjID0gYltpXTsKICAgICAgICAgaWYgKCFiYykKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgaWYgKGFzW2ldICE9IGJjKQorICAgICAgICBpZiAoYVB0cltp
XSAhPSBiYykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTEwMTMsMjAg
KzEzMzgsMjggQEAgYm9vbCBlcXVhbChjb25zdCBTdHJpbmdJbXBsKiBhLCBjb25zdCBVQwogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiB0cnVlOwogI2Vsc2UKKyAgICBpZiAo
YS0+aXM4Qml0KCkpIHsKKyAgICAgICAgY29uc3QgY2hhciogYXMgPSBhLT5jaGFyYWN0ZXJzOCgp
OworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpICE9IGxlbmd0aDsgKytpKQorICAgICAg
ICAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGFzW2ldKSAhPSBiW2ldKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
CiAgICAgLyogRG8gaXQgNC1ieXRlcy1hdC1hLXRpbWUgb24gYXJjaGl0ZWN0dXJlcyB3aGVyZSBp
dCdzIHNhZmUgKi8KLSAgICAKLSAgICBjb25zdCB1aW50MzJfdCogYUNoYXJhY3RlcnMgPSByZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oYS0+Y2hhcmFjdGVycygpKTsKKworICAgIGNv
bnN0IHVpbnQzMl90KiBhQ2hhcmFjdGVycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMy
X3QqPihhLT5jaGFyYWN0ZXJzMTYoKSk7CiAgICAgY29uc3QgdWludDMyX3QqIGJDaGFyYWN0ZXJz
ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KGIpOwotICAgIAorCiAgICAgdW5z
aWduZWQgaGFsZkxlbmd0aCA9IGxlbmd0aCA+PiAxOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgIT0gaGFsZkxlbmd0aDsgKytpKSB7CiAgICAgICAgIGlmICgqYUNoYXJhY3RlcnMrKyAhPSAq
YkNoYXJhY3RlcnMrKykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgCisK
ICAgICBpZiAobGVuZ3RoICYgMSAmJiAgKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDE2X3Qq
PihhQ2hhcmFjdGVycykgIT0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDE2X3QqPihiQ2hh
cmFjdGVycykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKwogICAgIHJldHVybiB0cnVl
OwogI2VuZGlmCiB9CkBAIC0xMDQ0LDcgKzEzNzcsNiBAQCBib29sIGVxdWFsSWdub3JpbmdDYXNl
KFN0cmluZ0ltcGwqIGEsIGNvCiAgICAgICAgIHJldHVybiAhYTsKIAogICAgIHVuc2lnbmVkIGxl
bmd0aCA9IGEtPmxlbmd0aCgpOwotICAgIGNvbnN0IFVDaGFyKiBhcyA9IGEtPmNoYXJhY3RlcnMo
KTsKIAogICAgIC8vIERvIGEgZmFzdGVyIGxvb3AgZm9yIHRoZSBjYXNlIHdoZXJlIGFsbCB0aGUg
Y2hhcmFjdGVycyBhcmUgQVNDSUkuCiAgICAgVUNoYXIgb3JlZCA9IDA7CkBAIC0xMDUzLDEzICsx
Mzg1LDE0IEBAIGJvb2wgZXF1YWxJZ25vcmluZ0Nhc2UoU3RyaW5nSW1wbCogYSwgY28KICAgICAg
ICAgY2hhciBiYyA9IGJbaV07CiAgICAgICAgIGlmICghYmMpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIFVDaGFyIGFjID0gYXNbaV07CisgICAgICAgIFVDaGFyIGFjID0gYS0+
aXM4Qml0KCkgPyBhLT5jaGFyYWN0ZXJzOCgpW2ldIDogYS0+Y2hhcmFjdGVyczE2KClbaV07CiAg
ICAgICAgIG9yZWQgfD0gYWM7CiAgICAgICAgIGVxdWFsID0gZXF1YWwgJiYgKHRvQVNDSUlMb3dl
cihhYykgPT0gdG9BU0NJSUxvd2VyKGJjKSk7CiAgICAgfQogCiAgICAgLy8gRG8gYSBzbG93ZXIg
aW1wbGVtZW50YXRpb24gZm9yIGNhc2VzIHRoYXQgaW5jbHVkZSBub24tQVNDSUkgY2hhcmFjdGVy
cy4KICAgICBpZiAob3JlZCAmIH4weDdGKSB7CisgICAgICAgIGNvbnN0IFVDaGFyKiBhcyA9IGEt
PmNoYXJhY3RlcnMxNigpOwogICAgICAgICBlcXVhbCA9IHRydWU7CiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgIT0gbGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgIHVuc2lnbmVkIGNo
YXIgYmMgPSBiW2ldOwpAQCAtMTA4NSw3ICsxNDE4LDcgQEAgYm9vbCBlcXVhbElnbm9yaW5nTnVs
bGl0eShTdHJpbmdJbXBsKiBhLAogV1RGOjpVbmljb2RlOjpEaXJlY3Rpb24gU3RyaW5nSW1wbDo6
ZGVmYXVsdFdyaXRpbmdEaXJlY3Rpb24oYm9vbCogaGFzU3Ryb25nRGlyZWN0aW9uYWxpdHkpCiB7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbGVuZ3RoOyArK2kpIHsKLSAgICAgICAg
V1RGOjpVbmljb2RlOjpEaXJlY3Rpb24gY2hhckRpcmVjdGlvbiA9IFdURjo6VW5pY29kZTo6ZGly
ZWN0aW9uKG1fZGF0YVtpXSk7CisgICAgICAgIFdURjo6VW5pY29kZTo6RGlyZWN0aW9uIGNoYXJE
aXJlY3Rpb24gPSBXVEY6OlVuaWNvZGU6OmRpcmVjdGlvbihpczhCaXQoKSA/IG1fZGF0YThbaV0g
OiBtX2RhdGExNltpXSk7CiAgICAgICAgIGlmIChjaGFyRGlyZWN0aW9uID09IFdURjo6VW5pY29k
ZTo6TGVmdFRvUmlnaHQpIHsKICAgICAgICAgICAgIGlmIChoYXNTdHJvbmdEaXJlY3Rpb25hbGl0
eSkKICAgICAgICAgICAgICAgICAqaGFzU3Ryb25nRGlyZWN0aW9uYWxpdHkgPSB0cnVlOwpAQCAt
MTEwNSw2ICsxNDM4LDcgQEAgV1RGOjpVbmljb2RlOjpEaXJlY3Rpb24gU3RyaW5nSW1wbDo6ZGVm
YQogLy8gVGhpcyBpcyBhIGhvdCBmdW5jdGlvbiBiZWNhdXNlIGl0J3MgdXNlZCB3aGVuIHBhcnNp
bmcgSFRNTC4KIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y3JlYXRlU3RyaXBw
aW5nTnVsbENoYXJhY3RlcnNTbG93Q2FzZShjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWdu
ZWQgbGVuZ3RoKQogeworICAgIC8vIEZJWE1FOiBTaG91bGQgU3RyaW5nQnVmZmVyIHN1cHBvcnQg
OC1iaXQgc3RyaW5ncywgbWF5YmUgdGVtcGxhdGU/CiAgICAgU3RyaW5nQnVmZmVyIHN0cmlwcGVk
Q29weShsZW5ndGgpOwogICAgIHVuc2lnbmVkIHN0cmlwcGVkTGVuZ3RoID0gMDsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKQEAgLTExMTgsNiArMTQ1Miw3IEBA
IFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y3JlYXQKIAogUGFzc1JlZlB0cjxT
dHJpbmdJbXBsPiBTdHJpbmdJbXBsOjphZG9wdChTdHJpbmdCdWZmZXImIGJ1ZmZlcikKIHsKKyAg
ICAvLyBGSVhNRTogaGFuZGxlIDgtYml0IFN0cmluZ0J1ZmZlciB3aGVuIGl0IGV4aXN0cy4KICAg
ICB1bnNpZ25lZCBsZW5ndGggPSBidWZmZXIubGVuZ3RoKCk7CiAgICAgaWYgKGxlbmd0aCA9PSAw
KQogICAgICAgICByZXR1cm4gZW1wdHkoKTsKQEAgLTExMjgsMTMgKzE0NjMsMjEgQEAgUGFzc1Jl
ZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpjcmVhdAogewogICAgIC8vIFVzZSBjcmVhdGVV
bmluaXRpYWxpemVkIGluc3RlYWQgb2YgJ25ldyBTdHJpbmdJbXBsJyBzbyB0aGF0IHRoZSBzdHJp
bmcgYW5kIGl0cyBidWZmZXIKICAgICAvLyBnZXQgYWxsb2NhdGVkIGluIGEgc2luZ2xlIG1lbW9y
eSBibG9jay4KLSAgICBVQ2hhciogZGF0YTsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHJpbmcu
bV9sZW5ndGg7CiAgICAgaWYgKGxlbmd0aCA+PSBudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1h
eCgpKQogICAgICAgICBDUkFTSCgpOwotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiB0ZXJtaW5hdGVk
U3RyaW5nID0gY3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGggKyAxLCBkYXRhKTsKLSAgICBtZW1j
cHkoZGF0YSwgc3RyaW5nLm1fZGF0YSwgbGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7Ci0gICAgZGF0
YVtsZW5ndGhdID0gMDsKKyAgICBSZWZQdHI8U3RyaW5nSW1wbD4gdGVybWluYXRlZFN0cmluZzsK
KyAgICBpZiAoc3RyaW5nLmlzOEJpdCgpKSB7CisgICAgICAgIGNoYXIqIGRhdGE7CisgICAgICAg
IHRlcm1pbmF0ZWRTdHJpbmcgPSBjcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCArIDEsIGRhdGEp
OworICAgICAgICBtZW1jcHkoZGF0YSwgc3RyaW5nLm1fZGF0YTgsIGxlbmd0aCAqIHNpemVvZihj
aGFyKSk7CisgICAgICAgIGRhdGFbbGVuZ3RoXSA9IDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
VUNoYXIqIGRhdGE7CisgICAgICAgIHRlcm1pbmF0ZWRTdHJpbmcgPSBjcmVhdGVVbmluaXRpYWxp
emVkKGxlbmd0aCArIDEsIGRhdGEpOworICAgICAgICBtZW1jcHkoZGF0YSwgc3RyaW5nLm1fZGF0
YTE2LCBsZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKKyAgICAgICAgZGF0YVtsZW5ndGhdID0gMDsK
KyAgICB9CiAgICAgdGVybWluYXRlZFN0cmluZy0+bV9sZW5ndGgtLTsKICAgICB0ZXJtaW5hdGVk
U3RyaW5nLT5tX2hhc2ggPSBzdHJpbmcubV9oYXNoOwogICAgIHRlcm1pbmF0ZWRTdHJpbmctPm1f
cmVmQ291bnRBbmRGbGFncyB8PSBzX3JlZkNvdW50RmxhZ0hhc1Rlcm1pbmF0aW5nTnVsbENoYXJh
Y3RlcjsKQEAgLTExNDMsMTMgKzE0ODYsMTkgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJp
bmdJbXBsOjpjcmVhdAogCiBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnRocmVh
ZHNhZmVDb3B5KCkgY29uc3QKIHsKLSAgICByZXR1cm4gY3JlYXRlKG1fZGF0YSwgbV9sZW5ndGgp
OworICAgIGlmIChpczhCaXQoKSkKKyAgICAgICAgcmV0dXJuIGNyZWF0ZShtX2RhdGE4LCBtX2xl
bmd0aCk7CisgICAgcmV0dXJuIGNyZWF0ZShtX2RhdGExNiwgbV9sZW5ndGgpOworCiB9CiAKIFBh
c3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y3Jvc3NUaHJlYWRTdHJpbmcoKQogewot
ICAgIGlmIChTaGFyZWRVQ2hhciogc2hhcmVkQnVmZmVyID0gdGhpcy0+c2hhcmVkQnVmZmVyKCkp
Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3RyaW5nSW1wbChtX2RhdGEsIG1fbGVuZ3Ro
LCBzaGFyZWRCdWZmZXItPmNyb3NzVGhyZWFkQ29weSgpKSk7CisgICAgaWYgKFNoYXJlZFVDaGFy
KiBzaGFyZWRCdWZmZXIgPSB0aGlzLT5zaGFyZWRCdWZmZXIxNigpKSB7CisgICAgICAgIC8vIEZJ
WE1FOiBNYWtlIHRoaXMgd29yayBmb3IgOC1iaXQgc3RyaW5ncworICAgICAgICBBU1NFUlQoIWlz
OEJpdCgpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHJpbmdJbXBsKG1fZGF0YTE2
LCBtX2xlbmd0aCwgc2hhcmVkQnVmZmVyLT5jcm9zc1RocmVhZENvcHkoKSkpOworICAgIH0KIAog
ICAgIC8vIElmIG5vIHNoYXJlZCBidWZmZXIgaXMgYXZhaWxhYmxlLCBjcmVhdGUgYSBjb3B5Lgog
ICAgIHJldHVybiB0aHJlYWRzYWZlQ29weSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi90ZXh0L1N0cmluZ0ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL3RleHQvU3RyaW5nSW1wbC5oCShyZXZpc2lvbiA5NzAwMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93dGYvdGV4dC9TdHJpbmdJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYg
KzQ2LDcgQEAgdHlwZWRlZiBjb25zdCBzdHJ1Y3QgX19DRlN0cmluZyAqIENGU3RyaQogLy8gTGFu
ZGluZyB0aGUgZmlsZSBtb3ZlcyBpbiBvbmUgcGF0Y2gsIHdpbGwgZm9sbG93IG9uIHdpdGggcGF0
Y2hlcyB0byBjaGFuZ2UgdGhlIG5hbWVzcGFjZXMuCiBuYW1lc3BhY2UgSlNDIHsKIHN0cnVjdCBJ
ZGVudGlmaWVyQ1N0cmluZ1RyYW5zbGF0b3I7CitzdHJ1Y3QgSWRlbnRpZmllckNoYXJCdWZmZXJU
cmFuc2xhdG9yOwogc3RydWN0IElkZW50aWZpZXJVQ2hhckJ1ZmZlclRyYW5zbGF0b3I7CiB9CiAK
QEAgLTYzLDggKzY0LDEyIEBAIHR5cGVkZWYgQ3Jvc3NUaHJlYWRSZWZDb3VudGVkPFNoYXJhYmxl
VUMKIHR5cGVkZWYgYm9vbCAoKkNoYXJhY3Rlck1hdGNoRnVuY3Rpb25QdHIpKFVDaGFyKTsKIHR5
cGVkZWYgYm9vbCAoKklzV2hpdGVTcGFjZUZ1bmN0aW9uUHRyKShVQ2hhcik7CiAKK3RlbXBsYXRl
IDx0eXBlbmFtZSBDaGFyVHlwZT4gaW5saW5lIHVuc2lnbmVkIHVuc2lnbmVkQ2hhclZhbHVlKGNv
bnN0IENoYXJUeXBlIGMpIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihjKTsgfQordGVt
cGxhdGUgPD4gaW5saW5lIHVuc2lnbmVkIHVuc2lnbmVkQ2hhclZhbHVlPGNoYXI+KGNvbnN0IGNo
YXIgYykgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oYyk7IH0KKwogY2xhc3Mg
U3RyaW5nSW1wbCA6IHB1YmxpYyBTdHJpbmdJbXBsQmFzZSB7CiAgICAgZnJpZW5kIHN0cnVjdCBK
U0M6OklkZW50aWZpZXJDU3RyaW5nVHJhbnNsYXRvcjsKKyAgICBmcmllbmQgc3RydWN0IEpTQzo6
SWRlbnRpZmllckNoYXJCdWZmZXJUcmFuc2xhdG9yOwogICAgIGZyaWVuZCBzdHJ1Y3QgSlNDOjpJ
ZGVudGlmaWVyVUNoYXJCdWZmZXJUcmFuc2xhdG9yOwogICAgIGZyaWVuZCBzdHJ1Y3QgV1RGOjpD
U3RyaW5nVHJhbnNsYXRvcjsKICAgICBmcmllbmQgc3RydWN0IFdURjo6SGFzaEFuZENoYXJhY3Rl
cnNUcmFuc2xhdG9yOwpAQCAtNzcsNyArODIsNyBAQCBwcml2YXRlOgogICAgIC8vIHN0YXRpYyBz
dHJpbmdzIHdpbGwgYmUgc2hhcmVkIGFjcm9zcyB0aHJlYWRzICYgcmVmLWNvdW50ZWQgaW4gYSBu
b24tdGhyZWFkc2FmZSBtYW5uZXIuCiAgICAgU3RyaW5nSW1wbChjb25zdCBVQ2hhciogY2hhcmFj
dGVycywgdW5zaWduZWQgbGVuZ3RoLCBTdGF0aWNTdHJpbmdDb25zdHJ1Y3RUeXBlKQogICAgICAg
ICA6IFN0cmluZ0ltcGxCYXNlKGxlbmd0aCwgQ29uc3RydWN0U3RhdGljU3RyaW5nKQotICAgICAg
ICAsIG1fZGF0YShjaGFyYWN0ZXJzKQorICAgICAgICAsIG1fZGF0YTE2KGNoYXJhY3RlcnMpCiAg
ICAgICAgICwgbV9idWZmZXIoMCkKICAgICAgICAgLCBtX2hhc2goMCkKICAgICB7CkBAIC04Nywz
NiArOTIsODIgQEAgcHJpdmF0ZToKICAgICAgICAgaGFzaCgpOwogICAgIH0KIAotICAgIC8vIENy
ZWF0ZSBhIG5vcm1hbCBzdHJpbmcgd2l0aCBpbnRlcm5hbCBzdG9yYWdlIChCdWZmZXJJbnRlcm5h
bCkKKyAgICAvLyBVc2VkIHRvIGNvbnN0cnVjdCBzdGF0aWMgc3RyaW5ncywgd2hpY2ggaGF2ZSBh
biBzcGVjaWFsIHJlZkNvdW50IHRoYXQgY2FuIG5ldmVyIGhpdCB6ZXJvLgorICAgIC8vIFRoaXMg
bWVhbnMgdGhhdCB0aGUgc3RhdGljIHN0cmluZyB3aWxsIG5ldmVyIGJlIGRlc3Ryb3llZCwgd2hp
Y2ggaXMgaW1wb3J0YW50IGJlY2F1c2UKKyAgICAvLyBzdGF0aWMgc3RyaW5ncyB3aWxsIGJlIHNo
YXJlZCBhY3Jvc3MgdGhyZWFkcyAmIHJlZi1jb3VudGVkIGluIGEgbm9uLXRocmVhZHNhZmUgbWFu
bmVyLgorICAgIFN0cmluZ0ltcGwoY29uc3QgY2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVu
Z3RoLCBTdGF0aWNTdHJpbmdDb25zdHJ1Y3RUeXBlKQorICAgIDogU3RyaW5nSW1wbEJhc2UobGVu
Z3RoLCBDb25zdHJ1Y3RTdGF0aWNTdHJpbmcpCisgICAgLCBtX2RhdGE4KGNoYXJhY3RlcnMpCisg
ICAgLCBtX2J1ZmZlcigwKQorICAgICwgbV9oYXNoKDApCisgICAgeworICAgICAgICAvLyBFbnN1
cmUgdGhhdCB0aGUgaGFzaCBpcyBjb21wdXRlZCBzbyB0aGF0IEF0b21pY1N0cmluZ0hhc2ggY2Fu
IGNhbGwgZXhpc3RpbmdIYXNoKCkKKyAgICAgICAgLy8gd2l0aCBpbXB1bml0eS4gVGhlIGVtcHR5
IHN0cmluZyBpcyBzcGVjaWFsIGJlY2F1c2UgaXQgaXMgbmV2ZXIgZW50ZXJlZCBpbnRvCisgICAg
ICAgIC8vIEF0b21pY1N0cmluZydzIEhhc2hLZXksIGJ1dCBzdGlsbCBuZWVkcyB0byBjb21wYXJl
IGNvcnJlY3RseS4KKyAgICAgICAgbV9yZWZDb3VudEFuZEZsYWdzIHw9IHNfcmVmQ291bnRGbGFn
OEJpdEJ1ZmZlcjsKKyAgICAgICAgaGFzaCgpOworICAgIH0KKworICAgIC8vIEZJWE1FOiB0aGVy
ZSBoYXMgdG8gYmUgYSBsZXNzIGhhY2t5IHdheSB0byBkbyB0aGlzLgorICAgIGVudW0gRm9yY2U4
Qml0IHsgRm9yY2U4Qml0Q29uc3RydWN0b3IgfTsKKyAgICAvLyBDcmVhdGUgYSBub3JtYWwgOC1i
aXQgc3RyaW5nIHdpdGggaW50ZXJuYWwgc3RvcmFnZSAoQnVmZmVySW50ZXJuYWwpCisgICAgU3Ry
aW5nSW1wbCh1bnNpZ25lZCBsZW5ndGgsIEZvcmNlOEJpdCB1bnVzZWQpCisgICAgICAgIDogU3Ry
aW5nSW1wbEJhc2UobGVuZ3RoLCBCdWZmZXJJbnRlcm5hbCkKKyAgICAgICAgLCBtX2RhdGE4KHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHRoaXMgKyAxKSkKKyAgICAgICAgLCBtX2J1ZmZl
cigwKQorICAgICAgICAsIG1faGFzaCgwKQorICAgIHsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHVu
dXNlZCk7IC8vIEZJWE1FCisgICAgICAgIG1fcmVmQ291bnRBbmRGbGFncyB8PSBzX3JlZkNvdW50
RmxhZzhCaXRCdWZmZXI7CisgICAgICAgIEFTU0VSVChtX2RhdGExNik7CisgICAgICAgIEFTU0VS
VChtX2xlbmd0aCk7CisgICAgfQorCisgICAgLy8gQ3JlYXRlIGEgbm9ybWFsIDE2LWJpdCBzdHJp
bmcgd2l0aCBpbnRlcm5hbCBzdG9yYWdlIChCdWZmZXJJbnRlcm5hbCkKICAgICBTdHJpbmdJbXBs
KHVuc2lnbmVkIGxlbmd0aCkKICAgICAgICAgOiBTdHJpbmdJbXBsQmFzZShsZW5ndGgsIEJ1ZmZl
ckludGVybmFsKQotICAgICAgICAsIG1fZGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFy
Kj4odGhpcyArIDEpKQorICAgICAgICAsIG1fZGF0YTE2KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
VUNoYXIqPih0aGlzICsgMSkpCiAgICAgICAgICwgbV9idWZmZXIoMCkKICAgICAgICAgLCBtX2hh
c2goMCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX2RhdGEpOworICAgICAgICBBU1NFUlQobV9k
YXRhMTYpOwogICAgICAgICBBU1NFUlQobV9sZW5ndGgpOwogICAgIH0KIAogICAgIC8vIENyZWF0
ZSBhIFN0cmluZ0ltcGwgYWRvcHRpbmcgb3duZXJzaGlwIG9mIHRoZSBwcm92aWRlZCBidWZmZXIg
KEJ1ZmZlck93bmVkKQogICAgIFN0cmluZ0ltcGwoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVu
c2lnbmVkIGxlbmd0aCkKICAgICAgICAgOiBTdHJpbmdJbXBsQmFzZShsZW5ndGgsIEJ1ZmZlck93
bmVkKQotICAgICAgICAsIG1fZGF0YShjaGFyYWN0ZXJzKQorICAgICAgICAsIG1fZGF0YTE2KGNo
YXJhY3RlcnMpCiAgICAgICAgICwgbV9idWZmZXIoMCkKICAgICAgICAgLCBtX2hhc2goMCkKICAg
ICB7Ci0gICAgICAgIEFTU0VSVChtX2RhdGEpOworICAgICAgICBBU1NFUlQobV9kYXRhMTYpOwog
ICAgICAgICBBU1NFUlQobV9sZW5ndGgpOwogICAgIH0KIAotICAgIC8vIFVzZWQgdG8gY3JlYXRl
IG5ldyBzdHJpbmdzIHRoYXQgYXJlIGEgc3Vic3RyaW5nIG9mIGFuIGV4aXN0aW5nIFN0cmluZ0lt
cGwgKEJ1ZmZlclN1YnN0cmluZykKKyAgICAvLyBVc2VkIHRvIGNyZWF0ZSBuZXcgc3RyaW5ncyB0
aGF0IGFyZSBhIHN1YnN0cmluZyBvZiBhbiBleGlzdGluZyA4LWJpdCBTdHJpbmdJbXBsIChCdWZm
ZXJTdWJzdHJpbmcpCisgICAgU3RyaW5nSW1wbChjb25zdCBjaGFyKiBjaGFyYWN0ZXJzLCB1bnNp
Z25lZCBsZW5ndGgsIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gYmFzZSkKKyAgICAgICAgOiBTdHJp
bmdJbXBsQmFzZShsZW5ndGgsIEJ1ZmZlclN1YnN0cmluZykKKyAgICAgICAgLCBtX2RhdGE4KGNo
YXJhY3RlcnMpCisgICAgICAgICwgbV9zdWJzdHJpbmdCdWZmZXIoYmFzZS5sZWFrUmVmKCkpCisg
ICAgICAgICwgbV9oYXNoKDApCisgICAgeworICAgICAgICBBU1NFUlQobV9zdWJzdHJpbmdCdWZm
ZXItPm1fcmVmQ291bnRBbmRGbGFncyAmIHNfcmVmQ291bnRGbGFnOEJpdEJ1ZmZlcik7CisgICAg
ICAgIG1fcmVmQ291bnRBbmRGbGFncyB8PSBzX3JlZkNvdW50RmxhZzhCaXRCdWZmZXI7CisgICAg
ICAgIEFTU0VSVChtX2RhdGE4KTsKKyAgICAgICAgQVNTRVJUKG1fbGVuZ3RoKTsKKyAgICAgICAg
QVNTRVJUKG1fc3Vic3RyaW5nQnVmZmVyLT5idWZmZXJPd25lcnNoaXAoKSAhPSBCdWZmZXJTdWJz
dHJpbmcpOworICAgIH0KKworICAgIC8vIFVzZWQgdG8gY3JlYXRlIG5ldyBzdHJpbmdzIHRoYXQg
YXJlIGEgc3Vic3RyaW5nIG9mIGFuIGV4aXN0aW5nIDE2LWJpdCBTdHJpbmdJbXBsIChCdWZmZXJT
dWJzdHJpbmcpCiAgICAgU3RyaW5nSW1wbChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWdu
ZWQgbGVuZ3RoLCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGJhc2UpCiAgICAgICAgIDogU3RyaW5n
SW1wbEJhc2UobGVuZ3RoLCBCdWZmZXJTdWJzdHJpbmcpCi0gICAgICAgICwgbV9kYXRhKGNoYXJh
Y3RlcnMpCisgICAgICAgICwgbV9kYXRhMTYoY2hhcmFjdGVycykKICAgICAgICAgLCBtX3N1YnN0
cmluZ0J1ZmZlcihiYXNlLmxlYWtSZWYoKSkKICAgICAgICAgLCBtX2hhc2goMCkKICAgICB7Ci0g
ICAgICAgIEFTU0VSVChtX2RhdGEpOworICAgICAgICBBU1NFUlQoIShtX3N1YnN0cmluZ0J1ZmZl
ci0+bV9yZWZDb3VudEFuZEZsYWdzICYgc19yZWZDb3VudEZsYWc4Qml0QnVmZmVyKSk7CisgICAg
ICAgIEFTU0VSVChtX2RhdGExNik7CiAgICAgICAgIEFTU0VSVChtX2xlbmd0aCk7CiAgICAgICAg
IEFTU0VSVChtX3N1YnN0cmluZ0J1ZmZlci0+YnVmZmVyT3duZXJzaGlwKCkgIT0gQnVmZmVyU3Vi
c3RyaW5nKTsKICAgICB9CkBAIC0xMjQsMjAgKzE3NSwyNCBAQCBwcml2YXRlOgogICAgIC8vIFVz
ZWQgdG8gY29uc3RydWN0IG5ldyBzdHJpbmdzIHNoYXJpbmcgYW4gZXhpc3RpbmcgU2hhcmVkVUNo
YXIgKEJ1ZmZlclNoYXJlZCkKICAgICBTdHJpbmdJbXBsKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJz
LCB1bnNpZ25lZCBsZW5ndGgsIFBhc3NSZWZQdHI8U2hhcmVkVUNoYXI+IHNoYXJlZEJ1ZmZlcikK
ICAgICAgICAgOiBTdHJpbmdJbXBsQmFzZShsZW5ndGgsIEJ1ZmZlclNoYXJlZCkKLSAgICAgICAg
LCBtX2RhdGEoY2hhcmFjdGVycykKKyAgICAgICAgLCBtX2RhdGExNihjaGFyYWN0ZXJzKQogICAg
ICAgICAsIG1fc2hhcmVkQnVmZmVyKHNoYXJlZEJ1ZmZlci5sZWFrUmVmKCkpCiAgICAgICAgICwg
bV9oYXNoKDApCiAgICAgewotICAgICAgICBBU1NFUlQobV9kYXRhKTsKLSAgICAgICAgQVNTRVJU
KG1fbGVuZ3RoKTsKKyAgICAgICAgQVNTRVJUKG1fZGF0YTE2KTsKICAgICB9CiAKKyAgICAvLyBG
SVhNRTogQWRkIGNvbnN0cnVjdG9ycyBmb3IgOC1iaXQgc3RyaW5ncworCiAgICAgLy8gRm9yIHVz
ZSBvbmx5IGJ5IEF0b21pY1N0cmluZydzIFhYWFRyYW5zbGF0b3IgaGVscGVycy4KICAgICB2b2lk
IHNldEhhc2godW5zaWduZWQgaGFzaCkKICAgICB7CiAgICAgICAgIEFTU0VSVCghaXNTdGF0aWMo
KSk7CiAgICAgICAgIEFTU0VSVCghbV9oYXNoKTsKLSAgICAgICAgQVNTRVJUKGhhc2ggPT0gU3Ry
aW5nSGFzaGVyOjpjb21wdXRlSGFzaChtX2RhdGEsIG1fbGVuZ3RoKSk7CisgICAgICAgIGlmIChp
czhCaXQoKSkKKyAgICAgICAgICAgIEFTU0VSVChoYXNoID09IFN0cmluZ0hhc2hlcjo6Y29tcHV0
ZUhhc2gobV9kYXRhOCwgbV9sZW5ndGgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgQVNT
RVJUKGhhc2ggPT0gU3RyaW5nSGFzaGVyOjpjb21wdXRlSGFzaChtX2RhdGExNiwgbV9sZW5ndGgp
KTsKICAgICAgICAgbV9oYXNoID0gaGFzaDsKICAgICB9CiAKQEAgLTE0OCw2ICsyMDMsMTkgQEAg
cHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGNyZWF0ZShjb25zdCBj
aGFyKiwgdW5zaWduZWQgbGVuZ3RoKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBs
PiBjcmVhdGUoY29uc3QgY2hhciopOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+
IGNyZWF0ZShjb25zdCBVQ2hhciosIHVuc2lnbmVkIGxlbmd0aCwgUGFzc1JlZlB0cjxTaGFyZWRV
Q2hhcj4gc2hhcmVkQnVmZmVyKTsKKyAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBQYXNzUmVmUHRy
PFN0cmluZ0ltcGw+IGNyZWF0ZTgoUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiByZXAsIHVuc2lnbmVk
IG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJlcCk7Cisg
ICAgICAgIEFTU0VSVChsZW5ndGggPD0gcmVwLT5sZW5ndGgoKSk7CisKKyAgICAgICAgaWYgKCFs
ZW5ndGgpCisgICAgICAgICAgICByZXR1cm4gZW1wdHkoKTsKKworICAgICAgICBBU1NFUlQocmVw
LT5pczhCaXQoKSk7CisgICAgICAgIFN0cmluZ0ltcGwqIG93bmVyUmVwID0gKHJlcC0+YnVmZmVy
T3duZXJzaGlwKCkgPT0gQnVmZmVyU3Vic3RyaW5nKSA/IHJlcC0+bV9zdWJzdHJpbmdCdWZmZXIg
OiByZXAuZ2V0KCk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3RyaW5nSW1wbChyZXAt
Pm1fZGF0YTggKyBvZmZzZXQsIGxlbmd0aCwgb3duZXJSZXApKTsKKyAgICB9CisKICAgICBzdGF0
aWMgQUxXQVlTX0lOTElORSBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGNyZWF0ZShQYXNzUmVmUHRy
PFN0cmluZ0ltcGw+IHJlcCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiAgICAg
ewogICAgICAgICBBU1NFUlQocmVwKTsKQEAgLTE1NywzNCArMjI1LDQ1IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIHJldHVybiBlbXB0eSgpOwogCiAgICAgICAgIFN0cmluZ0ltcGwqIG93bmVyUmVw
ID0gKHJlcC0+YnVmZmVyT3duZXJzaGlwKCkgPT0gQnVmZmVyU3Vic3RyaW5nKSA/IHJlcC0+bV9z
dWJzdHJpbmdCdWZmZXIgOiByZXAuZ2V0KCk7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
U3RyaW5nSW1wbChyZXAtPm1fZGF0YSArIG9mZnNldCwgbGVuZ3RoLCBvd25lclJlcCkpOworICAg
ICAgICBpZiAocmVwLT5pczhCaXQoKSkKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
U3RyaW5nSW1wbChyZXAtPm1fZGF0YTggKyBvZmZzZXQsIGxlbmd0aCwgb3duZXJSZXApKTsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHJpbmdJbXBsKHJlcC0+bV9kYXRhMTYgKyBvZmZz
ZXQsIGxlbmd0aCwgb3duZXJSZXApKTsKICAgICB9CiAKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxT
dHJpbmdJbXBsPiBjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCwgY2hhciomIGRh
dGEpOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGNyZWF0ZVVuaW5pdGlhbGl6
ZWQodW5zaWduZWQgbGVuZ3RoLCBVQ2hhciomIGRhdGEpOwotICAgIHN0YXRpYyBBTFdBWVNfSU5M
SU5FIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gdHJ5Q3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25l
ZCBsZW5ndGgsIFVDaGFyKiYgb3V0cHV0KQorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdGF0
aWMgQUxXQVlTX0lOTElORSBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHRyeUNyZWF0ZVVuaW5pdGlh
bGl6ZWQodW5zaWduZWQgbGVuZ3RoLCBUKiYgb3V0cHV0KQogICAgIHsKICAgICAgICAgaWYgKCFs
ZW5ndGgpIHsKICAgICAgICAgICAgIG91dHB1dCA9IDA7CiAgICAgICAgICAgICByZXR1cm4gZW1w
dHkoKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChsZW5ndGggPiAoKHN0ZDo6bnVtZXJpY19s
aW1pdHM8dW5zaWduZWQ+OjptYXgoKSAtIHNpemVvZihTdHJpbmdJbXBsKSkgLyBzaXplb2YoVUNo
YXIpKSkgeworICAgICAgICBpZiAobGVuZ3RoID4gKChzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2ln
bmVkPjo6bWF4KCkgLSBzaXplb2YoU3RyaW5nSW1wbCkpIC8gc2l6ZW9mKFQpKSkgewogICAgICAg
ICAgICAgb3V0cHV0ID0gMDsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAg
ICAgIFN0cmluZ0ltcGwqIHJlc3VsdEltcGw7Ci0gICAgICAgIGlmICghdHJ5RmFzdE1hbGxvYyhz
aXplb2YoVUNoYXIpICogbGVuZ3RoICsgc2l6ZW9mKFN0cmluZ0ltcGwpKS5nZXRWYWx1ZShyZXN1
bHRJbXBsKSkgeworICAgICAgICBpZiAoIXRyeUZhc3RNYWxsb2Moc2l6ZW9mKFQpICogbGVuZ3Ro
ICsgc2l6ZW9mKFN0cmluZ0ltcGwpKS5nZXRWYWx1ZShyZXN1bHRJbXBsKSkgewogICAgICAgICAg
ICAgb3V0cHV0ID0gMDsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9Ci0gICAgICAg
IG91dHB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VUNoYXIqPihyZXN1bHRJbXBsICsgMSk7CisgICAg
ICAgIG91dHB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KHJlc3VsdEltcGwgKyAxKTsKKworICAg
ICAgICBpZiAoc2l6ZW9mKFQpID09IHNpemVvZihjaGFyKSkKKyAgICAgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcocmVzdWx0SW1wbCkgU3RyaW5nSW1wbChsZW5ndGgsIEZvcmNlOEJpdENvbnN0
cnVjdG9yKSk7CisKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyhyZXN1bHRJbXBsKSBTdHJp
bmdJbXBsKGxlbmd0aCkpOwogICAgIH0KIAotICAgIHN0YXRpYyB1bnNpZ25lZCBkYXRhT2Zmc2V0
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cmluZ0ltcGwsIG1fZGF0YSk7IH0KKyAgICBz
dGF0aWMgdW5zaWduZWQgZmxhZ3NPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3Ry
aW5nSW1wbCwgbV9yZWZDb3VudEFuZEZsYWdzKTsgfQorICAgIHN0YXRpYyB1bnNpZ25lZCBmbGFn
SXM4Qml0KCkgeyByZXR1cm4gc19yZWZDb3VudEZsYWc4Qml0QnVmZmVyOyB9CisgICAgc3RhdGlj
IHVuc2lnbmVkIGRhdGFPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RyaW5nSW1w
bCwgbV9kYXRhOCk7IH0gLy8gRklYTUU6IFRoaXMgaXMgdWdseQogICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFN0cmluZ0ltcGw+IGNyZWF0ZVdpdGhUZXJtaW5hdGluZ051bGxDaGFyYWN0ZXIoY29uc3Qg
U3RyaW5nSW1wbCYpOworICAgIC8vIEZJWE1FOiBjaGFyKiB2ZXJzaW9uPwogICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFN0cmluZ0ltcGw+IGNyZWF0ZVN0cmlwcGluZ051bGxDaGFyYWN0ZXJzKGNvbnN0
IFVDaGFyKiwgdW5zaWduZWQgbGVuZ3RoKTsKIAorICAgIC8vIEZJWE1FOiBBZGQgVmVjdG9yPGNo
YXI+IGFkb3B0PwogICAgIHRlbXBsYXRlPHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBhZG9wdChWZWN0b3I8VUNoYXIsIGlubGluZUNhcGFj
aXR5PiYgdmVjdG9yKQogICAgIHsKQEAgLTE5OCw4ICsyNzcsMjIgQEAgcHVibGljOgogICAgIH0K
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBhZG9wdChTdHJpbmdCdWZmZXImKTsK
IAotICAgIFNoYXJlZFVDaGFyKiBzaGFyZWRCdWZmZXIoKTsKLSAgICBjb25zdCBVQ2hhciogY2hh
cmFjdGVycygpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsgfQorICAgIC8vIEZJWE1FOiBTaG91bGQg
dGhpcyBiZSBwcml2YXRlPyBJdCdzIG9ubHkgYWNjZXNzZWQgZnJvbSB3aXRoaW4gU3RyaW5nSW1w
bC4KKyAgICBTaGFyZWRVQ2hhciogc2hhcmVkQnVmZmVyMTYoKTsKKyAgICAvLyBGSVhNRTogSW1w
bGVtZW50IHNoYXJlZEJ1ZmZlcjgoKSA/CisgICAgLy8gRklYTUU6IFJlbW92ZSBhbGwgdW5uZWNl
c3NhcnkgdXNhZ2VzIG9mIGNoYXJhY3RlcnMoKQorICAgIEFMV0FZU19JTkxJTkUgY29uc3QgY2hh
ciogY2hhcmFjdGVyczgoKSBjb25zdCB7IEFTU0VSVChpczhCaXQoKSk7IEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOyByZXR1cm4gbV9kYXRhODsgfQorICAgIEFMV0FZU19JTkxJTkUgY29uc3QgVUNoYXIq
IGNoYXJhY3RlcnMxNigpIGNvbnN0IHsgQVNTRVJUKCFpczhCaXQoKSk7IHJldHVybiBtX2RhdGEx
NjsgfQorICAgIEFMV0FZU19JTkxJTkUgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgaWYgKCFpczhCaXQoKSkKKyAgICAgICAgICAgIHJldHVybiBtX2RhdGEx
NjsKKworICAgICAgICByZXR1cm4gZ2V0RGF0YTE2U2xvd0Nhc2UoKTsKKyAgICB9CisKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyVHlwZT4KKyAgICBpbmxpbmUgY29uc3QgQ2hhclR5cGUqIGdl
dENoYXJhY3RlcnMoKSBjb25zdDsKIAogICAgIHNpemVfdCBjb3N0KCkKICAgICB7CkBAIC0yMTQs
NiArMzA3LDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKKyAgICBib29s
IGhhczE2Qml0U2hhZG93KCkgY29uc3QgeyByZXR1cm4gbV9yZWZDb3VudEFuZEZsYWdzICYgc19y
ZWZDb3VudEZsYWdIYXMxNkJpdFNoYWRvdzsgfQorCiAgICAgYm9vbCBpc0lkZW50aWZpZXIoKSBj
b25zdCB7IHJldHVybiBtX3JlZkNvdW50QW5kRmxhZ3MgJiBzX3JlZkNvdW50RmxhZ0lzSWRlbnRp
ZmllcjsgfQogICAgIHZvaWQgc2V0SXNJZGVudGlmaWVyKGJvb2wgaXNJZGVudGlmaWVyKQogICAg
IHsKQEAgLTIzNiw3ICszMzEsMTYgQEAgcHVibGljOgogICAgICAgICAgICAgbV9yZWZDb3VudEFu
ZEZsYWdzICY9IH5zX3JlZkNvdW50RmxhZ0lzQXRvbWljOwogICAgIH0KIAotICAgIHVuc2lnbmVk
IGhhc2goKSBjb25zdCB7IGlmICghbV9oYXNoKSBtX2hhc2ggPSBTdHJpbmdIYXNoZXI6OmNvbXB1
dGVIYXNoKG1fZGF0YSwgbV9sZW5ndGgpOyByZXR1cm4gbV9oYXNoOyB9CisgICAgdW5zaWduZWQg
aGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIW1faGFzaCkgeworICAgICAgICAgICAg
aWYgKGlzOEJpdCgpKQorICAgICAgICAgICAgICAgIG1faGFzaCA9IFN0cmluZ0hhc2hlcjo6Y29t
cHV0ZUhhc2gobV9kYXRhOCwgbV9sZW5ndGgpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIG1faGFzaCA9IFN0cmluZ0hhc2hlcjo6Y29tcHV0ZUhhc2gobV9kYXRhMTYsIG1fbGVu
Z3RoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbV9oYXNoOworICAgIH0KICAgICB1bnNp
Z25lZCBleGlzdGluZ0hhc2goKSBjb25zdCB7IEFTU0VSVChtX2hhc2gpOyByZXR1cm4gbV9oYXNo
OyB9CiAgICAgYm9vbCBoYXNIYXNoKCkgY29uc3QgeyByZXR1cm4gbV9oYXNoOyB9CiAKQEAgLTI0
NSwxMyArMzQ5LDMyIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBTdHJpbmdJbXBsKiBlbXB0eSgp
OwogCi0gICAgc3RhdGljIHZvaWQgY29weUNoYXJzKFVDaGFyKiBkZXN0aW5hdGlvbiwgY29uc3Qg
VUNoYXIqIHNvdXJjZSwgdW5zaWduZWQgbnVtQ2hhcmFjdGVycykKKyAgICAvLyBGSVhNRTogRG9l
cyB0aGlzIHJlYWxseSBiZWxvbmcgaW4gU3RyaW5nSW1wbD8KKyAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4gc3RhdGljIHZvaWQgY29weUNoYXJzKFQqIGRlc3RpbmF0aW9uLCBjb25zdCBUKiBzb3Vy
Y2UsIHVuc2lnbmVkIG51bUNoYXJhY3RlcnMpCiAgICAgeworICAgICAgICBpZiAobnVtQ2hhcmFj
dGVycyA9PSAxKSB7CisgICAgICAgICAgICAqZGVzdGluYXRpb24gPSAqc291cmNlOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKICAgICAgICAgaWYgKG51bUNoYXJhY3RlcnMgPD0g
c19jb3B5Q2hhcnNJbmxpbmVDdXRPZmYpIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBudW1DaGFyYWN0ZXJzOyArK2kpCisgICAgICAgICAgICB1bnNpZ25lZCBpID0gMDsK
KyNpZiAoQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkpCisgICAgICAgICAgICBjb25zdCB1bnNpZ25l
ZCBjaGFyc1BlckludCA9IHNpemVvZih1aW50MzJfdCkgLyBzaXplb2YoVCk7CisKKyAgICAgICAg
ICAgIGlmIChudW1DaGFyYWN0ZXJzID4gY2hhcnNQZXJJbnQpIHsKKyAgICAgICAgICAgICAgICB1
bnNpZ25lZCBzdG9wQ291bnQgPSBudW1DaGFyYWN0ZXJzICYgfihjaGFyc1BlckludCAtIDEpOwor
CisgICAgICAgICAgICAgICAgY29uc3QgdWludDMyX3QqIHNyY0NoYXJhY3RlcnMgPSByZWludGVy
cHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oc291cmNlKTsKKyAgICAgICAgICAgICAgICB1aW50
MzJfdCogZGVzdENoYXJhY3RlcnMgPSByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGVzdGlu
YXRpb24pOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGkgPCBzdG9wQ291
bnQ7IGkgKz0gY2hhcnNQZXJJbnQsICsraikKKyAgICAgICAgICAgICAgICAgICAgZGVzdENoYXJh
Y3RlcnNbal0gPSBzcmNDaGFyYWN0ZXJzW2pdOworICAgICAgICAgICAgfQorI2VuZGlmCisgICAg
ICAgICAgICBmb3IgKDsgaSA8IG51bUNoYXJhY3RlcnM7ICsraSkKICAgICAgICAgICAgICAgICBk
ZXN0aW5hdGlvbltpXSA9IHNvdXJjZVtpXTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBt
ZW1jcHkoZGVzdGluYXRpb24sIHNvdXJjZSwgbnVtQ2hhcmFjdGVycyAqIHNpemVvZihVQ2hhcikp
OworICAgICAgICAgICAgbWVtY3B5KGRlc3RpbmF0aW9uLCBzb3VyY2UsIG51bUNoYXJhY3RlcnMg
KiBzaXplb2YoVCkpOwogICAgIH0KIAogICAgIC8vIFJldHVybnMgYSBTdHJpbmdJbXBsIHN1aXRh
YmxlIGZvciB1c2Ugb24gYW5vdGhlciB0aHJlYWQuCkBAIC0yNjMsNyArMzg2LDEzIEBAIHB1Ymxp
YzoKIAogICAgIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gc3Vic3RyaW5nKHVuc2lnbmVkIHBvcywg
dW5zaWduZWQgbGVuID0gVUlOVF9NQVgpOwogCi0gICAgVUNoYXIgb3BlcmF0b3JbXSh1bnNpZ25l
ZCBpKSB7IEFTU0VSVChpIDwgbV9sZW5ndGgpOyByZXR1cm4gbV9kYXRhW2ldOyB9CisgICAgVUNo
YXIgb3BlcmF0b3JbXSh1bnNpZ25lZCBpKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGkg
PCBtX2xlbmd0aCk7CisgICAgICAgIGlmIChpczhCaXQoKSkKKyAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihtX2RhdGE4W2ldKTsKKyAgICAgICAgcmV0dXJuIG1f
ZGF0YTE2W2ldOworICAgIH0KICAgICBVQ2hhcjMyIGNoYXJhY3RlclN0YXJ0aW5nQXQodW5zaWdu
ZWQpOwogCiAgICAgYm9vbCBjb250YWluc09ubHlXaGl0ZXNwYWNlKCk7CkBAIC0yODcsNiArNDE2
LDcgQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gdXBwZXIoKTsKIAogICAg
IFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gZmlsbChVQ2hhcik7CisgICAgLy8gRklYTUU6IERvIHdl
IG5lZWQgZmlsbChjaGFyKSBvciBjYW4gd2UganVzdCBkbyB0aGUgcmlnaHQgdGhpbmcgaWYgVUNo
YXIgaXMgQVNDSUk/CiAgICAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBmb2xkQ2FzZSgpOwogCiAg
ICAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBzdHJpcFdoaXRlU3BhY2UoKTsKQEAgLTI5Niw2ICs0
MjYsNyBAQCBwdWJsaWM6CiAKICAgICBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHJlbW92ZUNoYXJh
Y3RlcnMoQ2hhcmFjdGVyTWF0Y2hGdW5jdGlvblB0cik7CiAKKyAgICAvLyBGSVhNRTogRG8gd2Ug
bmVlZCBjaGFyIHZlcnNpb24sIG9yIGlzIGl0IG9rYXkgdG8ganVzdCBwYXNzIGluIGFuIEFTQ0lJ
IGNoYXIgZm9yIDgtYml0PyBTYW1lIGZvciByZXZlcnNlRmluZCwgcmVwbGFjZQogICAgIHNpemVf
dCBmaW5kKFVDaGFyLCB1bnNpZ25lZCBpbmRleCA9IDApOwogICAgIHNpemVfdCBmaW5kKENoYXJh
Y3Rlck1hdGNoRnVuY3Rpb25QdHIsIHVuc2lnbmVkIGluZGV4ID0gMCk7CiAgICAgc2l6ZV90IGZp
bmQoY29uc3QgY2hhciosIHVuc2lnbmVkIGluZGV4ID0gMCk7CkBAIC0zMzQsMTggKzQ2NSwyNCBA
QCBwcml2YXRlOgogICAgIGJvb2wgaXNTdGF0aWMoKSBjb25zdCB7IHJldHVybiBtX3JlZkNvdW50
QW5kRmxhZ3MgJiBzX3JlZkNvdW50RmxhZ1N0YXRpYzsgfQogICAgIHRlbXBsYXRlIDxjbGFzcyBV
Q2hhclByZWRpY2F0ZT4gUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBzdHJpcE1hdGNoZWRDaGFyYWN0
ZXJzKFVDaGFyUHJlZGljYXRlKTsKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVUNoYXJQcmVkaWNhdGU+
IFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gc2ltcGxpZnlNYXRjaGVkQ2hhcmFjdGVyc1RvU3BhY2Uo
VUNoYXJQcmVkaWNhdGUpOworICAgIE5FVkVSX0lOTElORSBjb25zdCBVQ2hhciogZ2V0RGF0YTE2
U2xvd0Nhc2UoKSBjb25zdDsKIAotICAgIGNvbnN0IFVDaGFyKiBtX2RhdGE7CisgICAgdW5pb24g
eworICAgICAgICBjb25zdCBjaGFyKiBtX2RhdGE4OworICAgICAgICBjb25zdCBVQ2hhciogbV9k
YXRhMTY7CisgICAgfTsKICAgICB1bmlvbiB7CiAgICAgICAgIHZvaWQqIG1fYnVmZmVyOwogICAg
ICAgICBTdHJpbmdJbXBsKiBtX3N1YnN0cmluZ0J1ZmZlcjsKICAgICAgICAgU2hhcmVkVUNoYXIq
IG1fc2hhcmVkQnVmZmVyOworICAgICAgICBtdXRhYmxlIFVDaGFyKiBtX2NvcHlEYXRhMTY7CiAg
ICAgfTsKICAgICBtdXRhYmxlIHVuc2lnbmVkIG1faGFzaDsKIH07CiAKIGJvb2wgZXF1YWwoY29u
c3QgU3RyaW5nSW1wbCosIGNvbnN0IFN0cmluZ0ltcGwqKTsKIGJvb2wgZXF1YWwoY29uc3QgU3Ry
aW5nSW1wbCosIGNvbnN0IGNoYXIqKTsKK2Jvb2wgZXF1YWwoY29uc3QgU3RyaW5nSW1wbCosIGNv
bnN0IGNoYXIqLCB1bnNpZ25lZCk7CiBpbmxpbmUgYm9vbCBlcXVhbChjb25zdCBjaGFyKiBhLCBT
dHJpbmdJbXBsKiBiKSB7IHJldHVybiBlcXVhbChiLCBhKTsgfQogYm9vbCBlcXVhbChjb25zdCBT
dHJpbmdJbXBsKiwgY29uc3QgVUNoYXIqLCB1bnNpZ25lZCk7CiAKQEAgLTM3Niw2ICs1MTMsNyBA
QCBzdGF0aWMgaW5saW5lIGJvb2wgaXNTcGFjZU9yTmV3bGluZShVQ2hhCiAgICAgcmV0dXJuIGMg
PD0gMHg3RiA/IFdURjo6aXNBU0NJSVNwYWNlKGMpIDogV1RGOjpVbmljb2RlOjpkaXJlY3Rpb24o
YykgPT0gV1RGOjpVbmljb2RlOjpXaGl0ZVNwYWNlTmV1dHJhbDsKIH0KIAorLy8gRklYTUU6IFNo
b3VsZCB0aGVyZSBiZSBhbiA4LWJpdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzLCBvciBzaG91bGQg
dGhpcyBtZXRob2QgY3JlYXRlIGFuIDgtYml0IFN0cmluZ0ltcGwgYXMgbmVlZGVkPwogLy8gVGhp
cyBpcyBhIGhvdCBmdW5jdGlvbiBiZWNhdXNlIGl0J3MgdXNlZCB3aGVuIHBhcnNpbmcgSFRNTC4K
IGlubGluZSBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmNyZWF0ZVN0cmlwcGlu
Z051bGxDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgp
CiB7CkBAIC0zOTksNiArNTM3LDE4IEBAIGlubGluZSBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0
cmluZ0ltcGwKICAgICByZXR1cm4gU3RyaW5nSW1wbDo6Y3JlYXRlU3RyaXBwaW5nTnVsbENoYXJh
Y3RlcnNTbG93Q2FzZShjaGFyYWN0ZXJzLCBsZW5ndGgpOwogfQogCit0ZW1wbGF0ZTw+Citpbmxp
bmUgY29uc3QgY2hhciogU3RyaW5nSW1wbDo6Z2V0Q2hhcmFjdGVyczxjaGFyPigpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGNoYXJhY3RlcnM4KCk7Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBjb25z
dCBVQ2hhciogU3RyaW5nSW1wbDo6Z2V0Q2hhcmFjdGVyczxVQ2hhcj4oKSBjb25zdAoreworICAg
IHJldHVybiBjaGFyYWN0ZXJzMTYoKTsKK30KKwogc3RydWN0IFN0cmluZ0hhc2g7CiAKIC8vIFN0
cmluZ0hhc2ggaXMgdGhlIGRlZmF1bHQgaGFzaCBmb3IgU3RyaW5nSW1wbCogYW5kIFJlZlB0cjxT
dHJpbmdJbXBsPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1N0cmluZ0lt
cGxCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1N0
cmluZ0ltcGxCYXNlLmgJKHJldmlzaW9uIDk3MDAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi90ZXh0L1N0cmluZ0ltcGxCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcg
QEAgY2xhc3MgU3RyaW5nSW1wbEJhc2UgewogcHVibGljOgogICAgIGJvb2wgaXNTdHJpbmdJbXBs
KCkgeyByZXR1cm4gKG1fcmVmQ291bnRBbmRGbGFncyAmIHNfcmVmQ291bnRJbnZhbGlkRm9yU3Ry
aW5nSW1wbCkgIT0gc19yZWZDb3VudEludmFsaWRGb3JTdHJpbmdJbXBsOyB9CiAgICAgdW5zaWdu
ZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KKyAgICBib29sIGlzOEJpdCgp
IGNvbnN0IHsgcmV0dXJuIG1fcmVmQ291bnRBbmRGbGFncyAmIHNfcmVmQ291bnRGbGFnOEJpdEJ1
ZmZlcjsgfQogICAgIHZvaWQgcmVmKCkgeyBtX3JlZkNvdW50QW5kRmxhZ3MgKz0gc19yZWZDb3Vu
dEluY3JlbWVudDsgfQogCiBwcm90ZWN0ZWQ6CkBAIC03MywxMSArNzQsMTMgQEAgcHJvdGVjdGVk
OgogICAgICAgICBBU1NFUlQoIWlzU3RyaW5nSW1wbCgpKTsKICAgICB9CiAKLSAgICAvLyBUaGUg
Ym90dG9tIDcgYml0cyBob2xkIGZsYWdzLCB0aGUgdG9wIDI1IGJpdHMgaG9sZCB0aGUgcmVmIGNv
dW50LgorICAgIC8vIFRoZSBib3R0b20gOSBiaXRzIGhvbGQgZmxhZ3MsIHRoZSB0b3AgMjMgYml0
cyBob2xkIHRoZSByZWYgY291bnQuCiAgICAgLy8gV2hlbiBkZXJlZmVyZW5jaW5nIFN0cmluZ0lt
cGxzIHdlIGNoZWNrIGZvciB0aGUgcmVmIGNvdW50IEFORCB0aGUKICAgICAvLyBzdGF0aWMgYml0
IGJvdGggYmVpbmcgemVybyAtIHN0YXRpYyBzdHJpbmdzIGFyZSBuZXZlciBkZWxldGVkLgotICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzX3JlZkNvdW50TWFzayA9IDB4RkZGRkZGODA7Ci0gICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIHNfcmVmQ291bnRJbmNyZW1lbnQgPSAweDgwOworICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBzX3JlZkNvdW50TWFzayA9IDB4RUZGRkZGMDA7CisgICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIHNfcmVmQ291bnRJbmNyZW1lbnQgPSAweDEwMDsKKyAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgc19yZWZDb3VudEZsYWdIYXMxNkJpdFNoYWRvdyA9IDB4ODAwMDAw
MDA7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNfcmVmQ291bnRGbGFnOEJpdEJ1ZmZlciA9
IDB4ODA7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNfcmVmQ291bnRGbGFnU3RhdGljID0g
MHg0MDsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc19yZWZDb3VudEZsYWdIYXNUZXJtaW5h
dGluZ051bGxDaGFyYWN0ZXIgPSAweDIwOwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzX3Jl
ZkNvdW50RmxhZ0lzQXRvbWljID0gMHgxMDsKQEAgLTg5LDcgKzkyLDcgQEAgcHJvdGVjdGVkOgog
ICAgIC8vIFVzZWQgYnkgIkNvbnN0cnVjdE5vblN0cmluZ0ltcGwiIGNvbnN0cnVjdG9yLCBhYm92
ZS4KICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc19yZWZDb3VudEludmFsaWRGb3JTdHJpbmdJ
bXBsID0gc19yZWZDb3VudEZsYWdTdGF0aWMgfCBzX3JlZkNvdW50RmxhZ1Nob3VsZFJlcG9ydGVk
Q29zdDsKIAotICAgIHVuc2lnbmVkIG1fcmVmQ291bnRBbmRGbGFnczsKKyAgICBtdXRhYmxlIHVu
c2lnbmVkIG1fcmVmQ291bnRBbmRGbGFnczsKICAgICB1bnNpZ25lZCBtX2xlbmd0aDsKIH07CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJQYXJzZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJyUGFyc2VyLmgJKHJldmlzaW9uIDk3
MDAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyclBhcnNlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yMzEsNyArMjMxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgOiBtX2RlbGVnYXRl
KGRlbGVnYXRlKQogICAgICAgICAsIG1fYmFja1JlZmVyZW5jZUxpbWl0KGJhY2tSZWZlcmVuY2VM
aW1pdCkKICAgICAgICAgLCBtX2VycihOb0Vycm9yKQotICAgICAgICAsIG1fZGF0YShwYXR0ZXJu
KQorICAgICAgICAsIG1fZGF0YShwYXR0ZXJuLmNoYXJhY3RlcnMxNigpKQogICAgICAgICAsIG1f
c2l6ZShwYXR0ZXJuLmxlbmd0aCgpKQogICAgICAgICAsIG1faW5kZXgoMCkKICAgICAgICAgLCBt
X3BhcmVudGhlc2VzTmVzdGluZ0RlcHRoKDApCkBAIC03OTMsNyArNzkzLDcgQEAgcHJpdmF0ZToK
ICAgICBEZWxlZ2F0ZSYgbV9kZWxlZ2F0ZTsKICAgICB1bnNpZ25lZCBtX2JhY2tSZWZlcmVuY2VM
aW1pdDsKICAgICBFcnJvckNvZGUgbV9lcnI7Ci0gICAgY29uc3QgVVN0cmluZyYgbV9kYXRhOwor
ICAgIGNvbnN0IFVDaGFyKiBtX2RhdGE7CiAgICAgdW5zaWduZWQgbV9zaXplOwogICAgIHVuc2ln
bmVkIG1faW5kZXg7CiAgICAgdW5zaWduZWQgbV9wYXJlbnRoZXNlc05lc3RpbmdEZXB0aDsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk3MDM5KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTEtMTAtMDkgIE1pY2hhZWwgU2Fi
b2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CisKKyAgICAgICAgSW52ZXN0aWdhdGUgc3RvcmluZyBz
dHJpbmdzIGluIDgtYml0IGJ1ZmZlcnMgd2hlbiBwb3NzaWJsZQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjYxNjEKKworICAgICAgICBDaGFuZ2VzIHRv
IHN1cHBvcnQgOCBiaXQgU3RyaW5nSW1wbCBjaGFuZ2VzLgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgcmVmYWN0b3JlZCBTdHJp
bmdJbXBsIGZvciA4IGJpdCBzdHJpbmdzLgorCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9jZi9T
dHJpbmdJbXBsQ0YuY3BwOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpjcmVhdGVDRlN0cmlu
Zyk6CisKIDIwMTEtMTAtMDkgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFJlbW92ZSByZWR1bmRhbnQgY29kZSBvZiBIVE1MU2VsZWN0RWxlbWVudC4KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvY2YvU3RyaW5nSW1wbENGLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2NmL1N0cmluZ0ltcGxDRi5jcHAJ
KHJldmlzaW9uIDk3MDAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9jZi9TdHJp
bmdJbXBsQ0YuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzYsMTMgKzEzNiwxMyBAQCBDRlN0cmlu
Z1JlZiBTdHJpbmdJbXBsOjpjcmVhdGVDRlN0cmluZygpCiB7CiAgICAgQ0ZBbGxvY2F0b3JSZWYg
YWxsb2NhdG9yID0gKG1fbGVuZ3RoICYmIGlzTWFpblRocmVhZCgpKSA/IFN0cmluZ1dyYXBwZXJD
RkFsbG9jYXRvcjo6YWxsb2NhdG9yKCkgOiAwOwogICAgIGlmICghYWxsb2NhdG9yKQotICAgICAg
ICByZXR1cm4gQ0ZTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCByZWludGVycHJldF9jYXN0
PGNvbnN0IFVuaUNoYXIqPihtX2RhdGEpLCBtX2xlbmd0aCk7CisgICAgICAgIHJldHVybiBDRlN0
cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVW5pQ2hh
cio+KGNoYXJhY3RlcnMoKSksIG1fbGVuZ3RoKTsKIAogICAgIC8vIFB1dCBwb2ludGVyIHRvIHRo
ZSBTdHJpbmdJbXBsIGluIGEgZ2xvYmFsIHNvIHRoZSBhbGxvY2F0b3IgY2FuIHN0b3JlIGl0IHdp
dGggdGhlIENGU3RyaW5nLgogICAgIEFTU0VSVCghU3RyaW5nV3JhcHBlckNGQWxsb2NhdG9yOjpj
dXJyZW50U3RyaW5nKTsKICAgICBTdHJpbmdXcmFwcGVyQ0ZBbGxvY2F0b3I6OmN1cnJlbnRTdHJp
bmcgPSB0aGlzOwogCi0gICAgQ0ZTdHJpbmdSZWYgc3RyaW5nID0gQ0ZTdHJpbmdDcmVhdGVXaXRo
Q2hhcmFjdGVyc05vQ29weShhbGxvY2F0b3IsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVW5pQ2hh
cio+KG1fZGF0YSksIG1fbGVuZ3RoLCBrQ0ZBbGxvY2F0b3JOdWxsKTsKKyAgICBDRlN0cmluZ1Jl
ZiBzdHJpbmcgPSBDRlN0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzTm9Db3B5KGFsbG9jYXRvciwg
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBVbmlDaGFyKj4oY2hhcmFjdGVycygpKSwgbV9sZW5ndGgs
IGtDRkFsbG9jYXRvck51bGwpOwogCiAgICAgLy8gVGhlIGFsbG9jYXRvciBjbGVhcmVkIHRoZSBn
bG9iYWwgd2hlbiBpdCByZWFkIGl0LCBidXQgYWxzbyBjbGVhciBpdCBoZXJlIGp1c3QgaW4gY2Fz
ZS4KICAgICBBU1NFUlQoIVN0cmluZ1dyYXBwZXJDRkFsbG9jYXRvcjo6Y3VycmVudFN0cmluZyk7
Cg==
</data>
<flag name="commit-queue"
          id="107824"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110451</attachid>
            <date>2011-10-10 17:43:44 -0700</date>
            <delta_ts>2011-10-11 09:43:47 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>66161-1.patch</filename>
            <type>text/plain</type>
            <size>78692</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTcwMzkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIzIEBA
CisyMDExLTEwLTA5ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIEludmVzdGlnYXRlIHN0b3Jpbmcgc3RyaW5ncyBpbiA4LWJpdCBidWZmZXJzIHdoZW4gcG9z
c2libGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2
MTYxCisKKyAgICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgOCBiaXQgc3RyaW5nIGRhdGEgaW4gU3Ry
aW5nSW1wbC4gIENoYW5nZWQKKyAgICAgICAgKFVDaGFyKikgbV9kYXRhIHRvIG1fZGF0YTE2LiAg
QWRkZWQgY2hhciogbV9kYXRhOCBhcyBhIHVuaW9uCisgICAgICAgIHdpdGggbV9kYXRhMTYuICBB
ZGRlZCBVQ2hhciogbV9jb3B5RGF0YTE2IHRvIHRoZSBvdGhlciB1bmlvbiAKKyAgICAgICAgdG8g
c3RvcmUgYSAxNiBiaXQgY29weSBvZiBhbiA4IGJpdCBzdHJpbmcgd2hlbiBuZWVkZWQuCisgICAg
ICAgIEFkZGVkIGNoYXJhY3RlcnM4KCkgYW5kIGNoYXJhY3RlcnMxNigpIGFjY2Vzc29yIG1ldGhv
ZHMKKyAgICAgICAgdGhhdCBhc3N1bWUgdGhlIGNhbGxlciBoYXMgY2hlY2tlZCB0aGUgdW5kZXJs
eWluZyBzdHJpbmcgdHlwZQorICAgICAgICB2aWEgdGhlIG5ldyBpczhCaXQoKSBtZXRob2QuIFRo
ZSBjaGFyYWN0ZXJzKCkgbWV0aG9kIHdpbGwgCisgICAgICAgIHJldHVybiBhIFVDaGFyKiBvZiB0
aGUgc3RyaW5nLCBtYXRlcmlhbGl6aW5nIGEgMTYgYml0IGNvcHkgaWYgdGhlCisgICAgICAgIHN0
cmluZyBpcyBhbiA4IGJpdCBzdHJpbmcuICBBZGRlZCB0d28gZmxhZ3MsIG9uZSBmb3IgOCBiaXQg
YnVmZmVyCisgICAgICAgIGFuZCBhIHNlY29uZCBmb3IgYSAxNiBiaXQgY29weSBmb3IgYW4gOCBi
aXQgc3RyaW5nLgorCisgICAgICAgIE92ZXIgdGltZSB0aGUgZ29hbCBpcyB0byBlbGltaW5hdGUg
Y2FsbHMgdG8gY2hhcmFjdGVycygpIGFuZCAKKyAgICAgICAgdXMgdGhlIGNoYXJhY3RlcjgoKSBh
bmQgY2hhcmFjdGVyczE2KCkgYWNjZXNzb3JzLgorCisgICAgICAgIFRoaXMgcGF0Y2ggZG9lcyBu
b3QgaW5jbHVkZSBjaGFuZ2VzIHRoYXQgYWN0dWFsbHkgY3JlYXRlIDggYml0CisgICAgICAgIHN0
cmluZ3MuIFRoaXMgaXMgdGhlIGZpcnN0IG9mIGF0IGxlYXN0IDggcGF0Y2hlcy4gIFN1YnNlcXVl
bnQKKyAgICAgICAgcGF0Y2hlcyB3aWxsIGJlIHN1Ym1pdHRlZCBmb3IgSklUIGNoYW5nZXMsIG1h
a2luZyB0aGUgSlNDIGxleGVyLAorICAgICAgICBwYXJzZXIgYW5kIGxpdGVyYWwgcGFyc2VyLCBK
YXZhU2NyaXB0IHN0cmluZyBjaGFuZ2VzIGFuZAorICAgICAgICB0aGVuIGNoYW5nZXMgaW4gd2Vi
Y29yZSB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGUgOCBiaXQgc3RyaW5ncy4KKworICAgICAgICBU
aGlzIGNoYW5nZSBpcyBwZXJmb3JtYW5jZSBuZXV0cmFsIGZvciBTdW5TcGlkZXIgYW5kIFY4IHdo
ZW4KKyAgICAgICAgcnVuIGZyb20gdGhlIGNvbW1hbmQgbGluZSB3aXRoICJqc2MiLgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogSmF2YVNjcmlwdENv
cmUuZXhwOgorICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJldGVyLmNwcDoKKyAgICAgICAg
KEpTQzo6SW50ZXJwcmV0ZXI6OmNhbGxFdmFsKToKKyAgICAgICAgKiBwYXJzZXIvU291cmNlUHJv
dmlkZXIuaDoKKyAgICAgICAgKEpTQzo6VVN0cmluZ1NvdXJjZVByb3ZpZGVyOjpkYXRhKToKKyAg
ICAgICAgKEpTQzo6VVN0cmluZ1NvdXJjZVByb3ZpZGVyOjpVU3RyaW5nU291cmNlUHJvdmlkZXIp
OgorICAgICAgICAqIHJ1bnRpbWUvSWRlbnRpZmllci5jcHA6CisgICAgICAgIChKU0M6OklkZW50
aWZpZXI6OnRvVUludDMyKToKKyAgICAgICAgKiBydW50aW1lL0pTU3RyaW5nLmNwcDoKKyAgICAg
ICAgKEpTQzo6SlNTdHJpbmc6OnJlc29sdmVSb3BlKToKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6
OnJlc29sdmVSb3BlU2xvd0Nhc2UpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwLmNwcDoKKyAg
ICAgICAgKEpTQzo6UmVnRXhwOjptYXRjaCk6CisgICAgICAgICogcnVudGltZS9TdHJpbmdQcm90
b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpqc1NwbGljZVN1YnN0cmluZ3NXaXRoU2VwYXJhdG9y
cyk6CisgICAgICAgICogcnVudGltZS9VU3RyaW5nLmNwcDoKKyAgICAgICAgKEpTQzo6VVN0cmlu
Zzo6dXRmOCk6CisgICAgICAgICogcnVudGltZS9VU3RyaW5nLmg6CisgICAgICAgIChKU0M6OlVT
dHJpbmc6OmNoYXJhY3RlcnMpOgorICAgICAgICAoSlNDOjpVU3RyaW5nOjpjaGFyYWN0ZXJzOCk6
CisgICAgICAgIChKU0M6OlVTdHJpbmc6OmNoYXJhY3RlcnMxNik6CisgICAgICAgIChKU0M6OlVT
dHJpbmc6OmlzOEJpdCk6CisgICAgICAgIChKU0M6OlVTdHJpbmc6Om9wZXJhdG9yW10pOgorICAg
ICAgICAoSlNDOjpjaGFyKToKKyAgICAgICAgKEpTQzo6VUNoYXIpOgorICAgICAgICAoSlNDOjpv
cGVyYXRvcj09KToKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdIYXNoLmg6CisgICAgICAgIChX
VEY6OlN0cmluZ0hhc2g6OmVxdWFsKToKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdJbXBsLmNw
cDoKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6flN0cmluZ0ltcGwpOgorICAgICAgICAoV1RG
OjpTdHJpbmdJbXBsOjpjcmVhdGVVbmluaXRpYWxpemVkKToKKyAgICAgICAgKFdURjo6U3RyaW5n
SW1wbDo6c2hhcmVkQnVmZmVyMTYpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpnZXREYXRh
MTZTbG93Q2FzZSk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OmNvbnRhaW5zT25seVdoaXRl
c3BhY2UpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpzdWJzdHJpbmcpOgorICAgICAgICAo
V1RGOjpTdHJpbmdJbXBsOjpjaGFyYWN0ZXJTdGFydGluZ0F0KToKKyAgICAgICAgKFdURjo6U3Ry
aW5nSW1wbDo6bG93ZXIpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjp1cHBlcik6CisgICAg
ICAgIChXVEY6OlN0cmluZ0ltcGw6OmZpbGwpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpm
b2xkQ2FzZSk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OnN0cmlwTWF0Y2hlZENoYXJhY3Rl
cnMpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpyZW1vdmVDaGFyYWN0ZXJzKToKKyAgICAg
ICAgKFdURjo6U3RyaW5nSW1wbDo6c2ltcGxpZnlNYXRjaGVkQ2hhcmFjdGVyc1RvU3BhY2UpOgor
ICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjp0b0ludFN0cmljdCk6CisgICAgICAgIChXVEY6OlN0
cmluZ0ltcGw6OnRvVUludFN0cmljdCk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OnRvSW50
NjRTdHJpY3QpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjp0b1VJbnQ2NFN0cmljdCk6Cisg
ICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OnRvSW50UHRyU3RyaWN0KToKKyAgICAgICAgKFdURjo6
U3RyaW5nSW1wbDo6dG9JbnQpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjp0b1VJbnQpOgor
ICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjp0b0ludDY0KToKKyAgICAgICAgKFdURjo6U3RyaW5n
SW1wbDo6dG9VSW50NjQpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjp0b0ludFB0cik6Cisg
ICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OnRvRG91YmxlKToKKyAgICAgICAgKFdURjo6U3RyaW5n
SW1wbDo6dG9GbG9hdCk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OmZpbmQpOgorICAgICAg
ICAoV1RGOjpTdHJpbmdJbXBsOjpyZXZlcnNlRmluZCk6CisgICAgICAgIChXVEY6OlN0cmluZ0lt
cGw6OnJlcGxhY2UpOgorICAgICAgICAoV1RGOjplcXVhbCk6CisgICAgICAgIChXVEY6OmVxdWFs
SWdub3JpbmdDYXNlKToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6ZGVmYXVsdFdyaXRpbmdE
aXJlY3Rpb24pOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpjcmVhdGVTdHJpcHBpbmdOdWxs
Q2hhcmFjdGVyc1Nsb3dDYXNlKToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6YWRvcHQpOgor
ICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpjcmVhdGVXaXRoVGVybWluYXRpbmdOdWxsQ2hhcmFj
dGVyKToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6dGhyZWFkc2FmZUNvcHkpOgorICAgICAg
ICAoV1RGOjpTdHJpbmdJbXBsOjpjcm9zc1RocmVhZFN0cmluZyk6CisgICAgICAgICogd3RmL3Rl
eHQvU3RyaW5nSW1wbC5oOgorICAgICAgICAoV1RGOjp1bnNpZ25lZENoYXJWYWx1ZSk6CisgICAg
ICAgIChXVEY6OmNoYXIpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpTdHJpbmdJbXBsKToK
KyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6c2V0SGFzaCk6CisgICAgICAgIChXVEY6OlN0cmlu
Z0ltcGw6OmNyZWF0ZTgpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpjcmVhdGUpOgorICAg
ICAgICAoV1RGOjpTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkKToKKyAgICAgICAg
KFdURjo6U3RyaW5nSW1wbDo6ZmxhZ3NPZmZzZXQpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBs
OjpmbGFnSXM4Qml0KToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6ZGF0YU9mZnNldCk6Cisg
ICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OmNoYXJhY3RlcnM4KToKKyAgICAgICAgKFdURjo6U3Ry
aW5nSW1wbDo6Y2hhcmFjdGVyczE2KToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6Y2hhcmFj
dGVycyk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OmhhczE2Qml0U2hhZG93KToKKyAgICAg
ICAgKFdURjo6U3RyaW5nSW1wbDo6aGFzaCk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OmNv
cHlDaGFycyk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6Om9wZXJhdG9yW10pOgorICAgICAg
ICAoV1RGOjpVQ2hhcik6CisgICAgICAgICogd3RmL3RleHQvU3RyaW5nSW1wbEJhc2UuaDoKKyAg
ICAgICAgKFdURjo6U3RyaW5nSW1wbEJhc2U6OmlzOEJpdCk6CisgICAgICAgICogeWFyci9ZYXJy
UGFyc2VyLmg6CisgICAgICAgIChKU0M6OllhcnI6OlBhcnNlcjo6UGFyc2VyKToKKwogMjAxMS0x
MC0wOSAgWXVxaWFuZyBYaWFuICA8eXVxaWFuZy54aWFuQGludGVsLmNvbT4KIAogICAgICAgICBJ
bXByb3ZlIE51bGwgb3IgVW5kZWZpbmVkIHRlc3QgaW4gMzJfNjQgREZHCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJKHJldmlzaW9uIDk3MDAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAkod29ya2luZyBjb3B5KQpAQCAt
MzU3LDcgKzM1Nyw2IEBAIF9fWk4zSlNDZ3RFUktOU183VVN0cmluZ0VTMl8KIF9fWk4zSlNDbHRF
UktOU183VVN0cmluZ0VTMl8KIF9fWk4zV1RGMTBTdHJpbmdJbXBsMTFyZXZlcnNlRmluZEVQUzBf
agogX19aTjNXVEYxMFN0cmluZ0ltcGwxMXJldmVyc2VGaW5kRXRqCi1fX1pOM1dURjEwU3RyaW5n
SW1wbDEyc2hhcmVkQnVmZmVyRXYKIF9fWk4zV1RGMTBTdHJpbmdJbXBsMTZmaW5kSWdub3JpbmdD
YXNlRVBLY2oKIF9fWk4zV1RGMTBTdHJpbmdJbXBsMTZmaW5kSWdub3JpbmdDYXNlRVBTMF9qCiBf
X1pOM1dURjEwU3RyaW5nSW1wbDE4c2ltcGxpZnlXaGl0ZVNwYWNlRXYKQEAgLTU4Niw2ICs1ODUs
NyBAQCBfX1pOSzNKU0M4SlNTdHJpbmcxMXJlc29sdmVSb3BlRVBOU185RXhlCiBfX1pOSzNKU0M4
SlNTdHJpbmc5dG9Cb29sZWFuRVBOU185RXhlY1N0YXRlRQogX19aTkszSlNDOUhhc2hUYWJsZTEx
Y3JlYXRlVGFibGVFUE5TXzEySlNHbG9iYWxEYXRhRQogX19aTkszSlNDOUhhc2hUYWJsZTExZGVs
ZXRlVGFibGVFdgorX19aTkszV1RGMTBTdHJpbmdJbXBsMTdnZXREYXRhMTZTbG93Q2FzZUV2CiBf
X1pOSzNXVEYxMkF0b21pY1N0cmluZzVsb3dlckV2CiBfX1pOSzNXVEYxM0RlY2ltYWxOdW1iZXIx
NXRvU3RyaW5nRGVjaW1hbEVQdGoKIF9fWk5LM1dURjEzRGVjaW1hbE51bWJlcjE5dG9TdHJpbmdF
eHBvbmVudGlhbEVQdGoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9J
bnRlcnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0ludGVycHJldGVyLmNwcAkocmV2aXNpb24gOTcwMDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
NDUsNyArNDQ1LDcgQEAgTkVWRVJfSU5MSU5FIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmNhbGxFdgog
ICAgICAgICBpZiAoIWNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkpIHsKICAgICAgICAgICAgIC8v
IEZJWE1FOiBXZSBjYW4gdXNlIHRoZSBwcmVwYXJzZXIgaW4gc3RyaWN0IG1vZGUsIHdlIGp1c3Qg
bmVlZCBhZGRpdGlvbmFsIGxvZ2ljCiAgICAgICAgICAgICAvLyB0byBwcmV2ZW50IGR1cGxpY2F0
ZXMuCi0gICAgICAgICAgICBMaXRlcmFsUGFyc2VyIHByZXBhcnNlcihjYWxsRnJhbWUsIHByb2dy
YW1Tb3VyY2UuY2hhcmFjdGVycygpLCBwcm9ncmFtU291cmNlLmxlbmd0aCgpLCBMaXRlcmFsUGFy
c2VyOjpOb25TdHJpY3RKU09OKTsKKyAgICAgICAgICAgIExpdGVyYWxQYXJzZXIgcHJlcGFyc2Vy
KGNhbGxGcmFtZSwgcHJvZ3JhbVNvdXJjZS5jaGFyYWN0ZXJzMTYoKSwgcHJvZ3JhbVNvdXJjZS5s
ZW5ndGgoKSwgTGl0ZXJhbFBhcnNlcjo6Tm9uU3RyaWN0SlNPTik7CiAgICAgICAgICAgICBpZiAo
SlNWYWx1ZSBwYXJzZWRPYmplY3QgPSBwcmVwYXJzZXIudHJ5TGl0ZXJhbFBhcnNlKCkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIHBhcnNlZE9iamVjdDsKICAgICAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VQcm92aWRlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlUHJvdmlkZXIuaAkocmV2aXNpb24gOTcw
MDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJjZVByb3ZpZGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTg4LDE3ICs4OCwxOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
ewogICAgICAgICAgICAgcmV0dXJuIG1fc291cmNlLnN1YnN0cmluZ1NoYXJpbmdJbXBsKHN0YXJ0
LCBlbmQgLSBzdGFydCk7CiAgICAgICAgIH0KLSAgICAgICAgY29uc3QgVUNoYXIqIGRhdGEoKSBj
b25zdCB7IHJldHVybiBtX3NvdXJjZS5jaGFyYWN0ZXJzKCk7IH0KKyAgICAgICAgY29uc3QgVUNo
YXIqIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0KICAgICAgICAgaW50IGxlbmd0aCgp
IGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLmxlbmd0aCgpOyB9CiAKICAgICBwcml2YXRlOgogICAg
ICAgICBVU3RyaW5nU291cmNlUHJvdmlkZXIoY29uc3QgVVN0cmluZyYgc291cmNlLCBjb25zdCBV
U3RyaW5nJiB1cmwpCiAgICAgICAgICAgICA6IFNvdXJjZVByb3ZpZGVyKHVybCkKICAgICAgICAg
ICAgICwgbV9zb3VyY2Uoc291cmNlKQorICAgICAgICAgICAgLCBtX2RhdGEobV9zb3VyY2UuY2hh
cmFjdGVyczE2KCkpCiAgICAgICAgIHsKICAgICAgICAgfQogCiAgICAgICAgIFVTdHJpbmcgbV9z
b3VyY2U7CisgICAgICAgIGNvbnN0IFVDaGFyKiBtX2RhdGE7CiAgICAgfTsKICAgICAKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRp
Zmllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRl
bnRpZmllci5jcHAJKHJldmlzaW9uIDk3MDAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSWRlbnRpZmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NCwxMiArMTU0LDEzIEBA
IHVpbnQzMl90IElkZW50aWZpZXI6OnRvVUludDMyKGNvbnN0IFVTdHIKICAgICBvayA9IGZhbHNl
OwogCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOwotICAgIGNvbnN0IFVD
aGFyKiBjaGFyYWN0ZXJzID0gc3RyaW5nLmNoYXJhY3RlcnMoKTsKIAogICAgIC8vIEFuIGVtcHR5
IHN0cmluZyBpcyBub3QgYSBudW1iZXIuCiAgICAgaWYgKCFsZW5ndGgpCiAgICAgICAgIHJldHVy
biAwOwogCisgICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSBzdHJpbmcuY2hhcmFjdGVyczE2
KCk7CisKICAgICAvLyBHZXQgdGhlIGZpcnN0IGNoYXJhY3RlciwgdHVybmluZyBpdCBpbnRvIGEg
ZGlnaXQuCiAgICAgdWludDMyX3QgdmFsdWUgPSBjaGFyYWN0ZXJzWzBdIC0gJzAnOwogICAgIGlm
ICh2YWx1ZSA+IDkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmlu
Zy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJp
bmcuY3BwCShyZXZpc2lvbiA5NzAwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU3RyaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksMTQgKzU5LDE0IEBAIHZvaWQgSlNT
dHJpbmc6OnJlc29sdmVSb3BlKEV4ZWNTdGF0ZSogZXgKICAgICBVQ2hhciogcG9zaXRpb24gPSBi
dWZmZXI7CiAgICAgU3RyaW5nSW1wbCogc3RyaW5nID0gc3RhdGljX2Nhc3Q8U3RyaW5nSW1wbCo+
KGN1cnJlbnRGaWJlcik7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RyaW5nLT5sZW5ndGgoKTsK
LSAgICBTdHJpbmdJbXBsOjpjb3B5Q2hhcnMocG9zaXRpb24sIHN0cmluZy0+Y2hhcmFjdGVycygp
LCBsZW5ndGgpOworICAgIFN0cmluZ0ltcGw6OmNvcHlDaGFycyhwb3NpdGlvbiwgc3RyaW5nLT5j
aGFyYWN0ZXJzMTYoKSwgbGVuZ3RoKTsKIAogICAgIGlmIChtX2ZpYmVyQ291bnQgPiAxKSB7CiAg
ICAgICAgIHBvc2l0aW9uICs9IGxlbmd0aDsKICAgICAgICAgY3VycmVudEZpYmVyID0gbV9maWJl
cnNbMV07CiAgICAgICAgIHN0cmluZyA9IHN0YXRpY19jYXN0PFN0cmluZ0ltcGwqPihjdXJyZW50
RmliZXIpOwogICAgICAgICBsZW5ndGggPSBzdHJpbmctPmxlbmd0aCgpOwotICAgICAgICBTdHJp
bmdJbXBsOjpjb3B5Q2hhcnMocG9zaXRpb24sIHN0cmluZy0+Y2hhcmFjdGVycygpLCBsZW5ndGgp
OworICAgICAgICBTdHJpbmdJbXBsOjpjb3B5Q2hhcnMocG9zaXRpb24sIHN0cmluZy0+Y2hhcmFj
dGVyczE2KCksIGxlbmd0aCk7CiAgICAgICAgIHBvc2l0aW9uICs9IGxlbmd0aDsKICAgICB9CiAK
QEAgLTExNSw3ICsxMTUsNyBAQCB2b2lkIEpTU3RyaW5nOjpyZXNvbHZlUm9wZVNsb3dDYXNlKEV4
ZWNTCiAgICAgICAgICAgICBTdHJpbmdJbXBsKiBzdHJpbmcgPSBzdGF0aWNfY2FzdDxTdHJpbmdJ
bXBsKj4oY3VycmVudEZpYmVyKTsKICAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmlu
Zy0+bGVuZ3RoKCk7CiAgICAgICAgICAgICBwb3NpdGlvbiAtPSBsZW5ndGg7Ci0gICAgICAgICAg
ICBTdHJpbmdJbXBsOjpjb3B5Q2hhcnMocG9zaXRpb24sIHN0cmluZy0+Y2hhcmFjdGVycygpLCBs
ZW5ndGgpOworICAgICAgICAgICAgU3RyaW5nSW1wbDo6Y29weUNoYXJzKHBvc2l0aW9uLCBzdHJp
bmctPmNoYXJhY3RlcnMxNigpLCBsZW5ndGgpOwogCiAgICAgICAgICAgICAvLyBXYXMgdGhpcyB0
aGUgbGFzdCBpdGVtIGluIHRoZSB3b3JrIHF1ZXVlPwogICAgICAgICAgICAgaWYgKHdvcmtRdWV1
ZS5pc0VtcHR5KCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4
cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
LmNwcAkocmV2aXNpb24gOTcwMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9S
ZWdFeHAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjYsOSArMzY2LDkgQEAgaW50IFJlZ0V4cDo6
bWF0Y2goSlNHbG9iYWxEYXRhJiBnbG9iYWxEYQogI2lmIEVOQUJMRShZQVJSX0pJVCkKICAgICAg
ICAgaWYgKG1fc3RhdGUgPT0gSklUQ29kZSkgewogICAgICAgICAgICAgaWYgKHMuaXM4Qml0KCkp
Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gWWFycjo6ZXhlY3V0ZShtX3JlcHJlc2VudGF0aW9u
LT5tX3JlZ0V4cEpJVENvZGUsIHMubGF0aW4xKCkuZGF0YSgpLCBzdGFydE9mZnNldCwgcy5sZW5n
dGgoKSwgb2Zmc2V0VmVjdG9yKTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBZYXJyOjpleGVj
dXRlKG1fcmVwcmVzZW50YXRpb24tPm1fcmVnRXhwSklUQ29kZSwgcy5jaGFyYWN0ZXJzOCgpLCBz
dGFydE9mZnNldCwgcy5sZW5ndGgoKSwgb2Zmc2V0VmVjdG9yKTsKICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICByZXN1bHQgPSBZYXJyOjpleGVjdXRlKG1fcmVwcmVzZW50YXRpb24t
Pm1fcmVnRXhwSklUQ29kZSwgcy5jaGFyYWN0ZXJzKCksIHN0YXJ0T2Zmc2V0LCBzLmxlbmd0aCgp
LCBvZmZzZXRWZWN0b3IpOworICAgICAgICAgICAgICAgIHJlc3VsdCA9IFlhcnI6OmV4ZWN1dGUo
bV9yZXByZXNlbnRhdGlvbi0+bV9yZWdFeHBKSVRDb2RlLCBzLmNoYXJhY3RlcnMxNigpLCBzdGFy
dE9mZnNldCwgcy5sZW5ndGgoKSwgb2Zmc2V0VmVjdG9yKTsKICNpZiBFTkFCTEUoWUFSUl9KSVRf
REVCVUcpCiAgICAgICAgICAgICBtYXRjaENvbXBhcmVXaXRoSW50ZXJwcmV0ZXIocywgc3RhcnRP
ZmZzZXQsIG9mZnNldFZlY3RvciwgcmVzdWx0KTsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCShyZXZpc2lvbiA5
NzAwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMzMCwxMyArMzMwLDEzIEBAIHN0YXRpYyBBTFdBWVNfSU5M
SU5FIEpTVmFsdWUganNTcGxpY2VTdWIKICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1heENvdW50
OyBpKyspIHsKICAgICAgICAgaWYgKGkgPCByYW5nZUNvdW50KSB7CiAgICAgICAgICAgICBpZiAo
aW50IHNyY0xlbiA9IHN1YnN0cmluZ1Jhbmdlc1tpXS5sZW5ndGgpIHsKLSAgICAgICAgICAgICAg
ICBTdHJpbmdJbXBsOjpjb3B5Q2hhcnMoYnVmZmVyICsgYnVmZmVyUG9zLCBzb3VyY2UuY2hhcmFj
dGVycygpICsgc3Vic3RyaW5nUmFuZ2VzW2ldLnBvc2l0aW9uLCBzcmNMZW4pOworICAgICAgICAg
ICAgICAgIFN0cmluZ0ltcGw6OmNvcHlDaGFycyhidWZmZXIgKyBidWZmZXJQb3MsIHNvdXJjZS5j
aGFyYWN0ZXJzMTYoKSArIHN1YnN0cmluZ1Jhbmdlc1tpXS5wb3NpdGlvbiwgc3JjTGVuKTsKICAg
ICAgICAgICAgICAgICBidWZmZXJQb3MgKz0gc3JjTGVuOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgICAgIGlmIChpIDwgc2VwYXJhdG9yQ291bnQpIHsKICAgICAgICAgICAgIGlmIChp
bnQgc2VwTGVuID0gc2VwYXJhdG9yc1tpXS5sZW5ndGgoKSkgewotICAgICAgICAgICAgICAgIFN0
cmluZ0ltcGw6OmNvcHlDaGFycyhidWZmZXIgKyBidWZmZXJQb3MsIHNlcGFyYXRvcnNbaV0uY2hh
cmFjdGVycygpLCBzZXBMZW4pOworICAgICAgICAgICAgICAgIFN0cmluZ0ltcGw6OmNvcHlDaGFy
cyhidWZmZXIgKyBidWZmZXJQb3MsIHNlcGFyYXRvcnNbaV0uY2hhcmFjdGVyczE2KCksIHNlcExl
bik7CiAgICAgICAgICAgICAgICAgYnVmZmVyUG9zICs9IHNlcExlbjsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZy5j
cHAJKHJldmlzaW9uIDk3MDAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0
cmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxNyw3ICszMTcsOSBAQCBzdGF0aWMgaW5saW5l
IHZvaWQgcHV0VVRGOFRyaXBsZShjaGFyKiYgCiBDU3RyaW5nIFVTdHJpbmc6OnV0ZjgoYm9vbCBz
dHJpY3QpIGNvbnN0CiB7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gdGhpcy0+bGVuZ3RoKCk7Ci0g
ICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSB0aGlzLT5jaGFyYWN0ZXJzKCk7CisKKyAgICBp
ZiAoaXM4Qml0KCkpCisgICAgICAgIHJldHVybiBDU3RyaW5nKGNoYXJhY3RlcnM4KCksIGxlbmd0
aCk7CiAKICAgICAvLyBBbGxvY2F0ZSBhIGJ1ZmZlciBiaWcgZW5vdWdoIHRvIGhvbGQgYWxsIHRo
ZSBjaGFyYWN0ZXJzCiAgICAgLy8gKGFuIGluZGl2aWR1YWwgVVRGLTE2IFVDaGFyIGNhbiBvbmx5
IGV4cGFuZCB0byAzIFVURi04IGJ5dGVzKS4KQEAgLTMzMSw2ICszMzMsOCBAQCBDU3RyaW5nIFVT
dHJpbmc6OnV0ZjgoYm9vbCBzdHJpY3QpIGNvbnN0CiAgICAgLy8gICAgYnVmZmVyIHdpdGhvdXQg
cmVhbGxvY2luZyAoc2F5LCAxLjUgeCBsZW5ndGgpLgogICAgIGlmIChsZW5ndGggPiBudW1lcmlj
X2xpbWl0czx1bnNpZ25lZD46Om1heCgpIC8gMykKICAgICAgICAgcmV0dXJuIENTdHJpbmcoKTsK
KworICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0gdGhpcy0+Y2hhcmFjdGVyczE2KCk7CiAg
ICAgVmVjdG9yPGNoYXIsIDEwMjQ+IGJ1ZmZlclZlY3RvcihsZW5ndGggKiAzKTsKIAogICAgIGNo
YXIqIGJ1ZmZlciA9IGJ1ZmZlclZlY3Rvci5kYXRhKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9VU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVVN0cmluZy5oCShyZXZpc2lvbiA5NzAwMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1VTdHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsMTAgKzczLDI4
IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmICghbV9pbXBsKQogICAgICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgICAgIHJldHVybiBtX2ltcGwtPmNoYXJhY3RlcnMoKTsKKyAgICAgICAgcmV0
dXJuIG1faW1wbC0+Y2hhcmFjdGVyczE2KCk7CiAgICAgfQogCi0gICAgYm9vbCBpczhCaXQoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIGNvbnN0IGNoYXIqIGNoYXJhY3RlcnM4KCkgY29u
c3QKKyAgICB7CisgICAgICAgIGlmICghbV9pbXBsKQorICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgIEFTU0VSVChtX2ltcGwtPmlzOEJpdCgpKTsKKyAgICAgICAgcmV0dXJuIG1faW1wbC0+
Y2hhcmFjdGVyczgoKTsKKyAgICB9CisKKyAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVyczE2KCkg
Y29uc3QKKyAgICB7CisgICAgICAgIGlmICghbV9pbXBsKQorICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgIEFTU0VSVCghbV9pbXBsLT5pczhCaXQoKSk7CisgICAgICAgIHJldHVybiBtX2lt
cGwtPmNoYXJhY3RlcnMxNigpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJU
eXBlPgorICAgIGlubGluZSBjb25zdCBDaGFyVHlwZSogZ2V0Q2hhcmFjdGVycygpIGNvbnN0Owor
ICAgIGJvb2wgaXM4Qml0KCkgY29uc3QgeyByZXR1cm4gbV9pbXBsLT5pczhCaXQoKTsgfQogCiAg
ICAgQ1N0cmluZyBhc2NpaSgpIGNvbnN0OwogICAgIENTdHJpbmcgbGF0aW4xKCkgY29uc3Q7CkBA
IC04Niw3ICsxMDQsOSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAoIW1faW1wbCB8fCBp
bmRleCA+PSBtX2ltcGwtPmxlbmd0aCgpKQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAg
IHJldHVybiBtX2ltcGwtPmNoYXJhY3RlcnMoKVtpbmRleF07CisgICAgICAgIGlmIChpczhCaXQo
KSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihtX2ltcGwt
PmNoYXJhY3RlcnM4KClbaW5kZXhdKTsKKyAgICAgICAgcmV0dXJuIG1faW1wbC0+Y2hhcmFjdGVy
czE2KClbaW5kZXhdOwogICAgIH0KIAogICAgIHN0YXRpYyBVU3RyaW5nIG51bWJlcihpbnQpOwpA
QCAtMTE1LDYgKzEzNSwxOCBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBtX2lt
cGw7CiB9OwogCit0ZW1wbGF0ZTw+CitpbmxpbmUgY29uc3QgY2hhciogVVN0cmluZzo6Z2V0Q2hh
cmFjdGVyczxjaGFyPigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNoYXJhY3RlcnM4KCk7Cit9CisK
K3RlbXBsYXRlPD4KK2lubGluZSBjb25zdCBVQ2hhciogVVN0cmluZzo6Z2V0Q2hhcmFjdGVyczxV
Q2hhcj4oKSBjb25zdAoreworICAgIHJldHVybiBjaGFyYWN0ZXJzMTYoKTsKK30KKwogQUxXQVlT
X0lOTElORSBib29sIG9wZXJhdG9yPT0oY29uc3QgVVN0cmluZyYgczEsIGNvbnN0IFVTdHJpbmcm
IHMyKQogewogICAgIFN0cmluZ0ltcGwqIHJlcDEgPSBzMS5pbXBsKCk7CkBAIC0xMjQsMjggKzE1
Niw2OCBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgb3BlcmF0b3I9PShjb25zdCBVU3RyCiAKICAgICBp
ZiAocmVwMSA9PSByZXAyKSAvLyBJZiB0aGV5J3JlIHRoZSBzYW1lIHJlcCwgdGhleSdyZSBlcXVh
bC4KICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCisKICAgICBpZiAocmVwMSkKICAgICAgICAg
c2l6ZTEgPSByZXAxLT5sZW5ndGgoKTsKLSAgICAgICAgCisKICAgICBpZiAocmVwMikKICAgICAg
ICAgc2l6ZTIgPSByZXAyLT5sZW5ndGgoKTsKLSAgICAgICAgCisKICAgICBpZiAoc2l6ZTEgIT0g
c2l6ZTIpIC8vIElmIHRoZSBsZW5ndGhzIGFyZSBub3QgdGhlIHNhbWUsIHdlJ3JlIGRvbmUuCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKwogICAgIGlmICghc2l6ZTEpCiAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgIAorCiAgICAgLy8gQXQgdGhpcyBwb2ludCB3ZSBrbm93IAogICAgIC8v
ICAgKGEpIHRoYXQgdGhlIHN0cmluZ3MgYXJlIHRoZSBzYW1lIGxlbmd0aCBhbmQKICAgICAvLyAg
IChiKSB0aGF0IHRoZXkgYXJlIGdyZWF0ZXIgdGhhbiB6ZXJvIGxlbmd0aC4KLSAgICBjb25zdCBV
Q2hhciogZDEgPSByZXAxLT5jaGFyYWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIqIGQyID0gcmVw
Mi0+Y2hhcmFjdGVycygpOwotICAgIAorICAgIGlmIChyZXAxLT5pczhCaXQoKSkgeworICAgICAg
ICBjb25zdCBjaGFyKiBkMSA9IHJlcDEtPmNoYXJhY3RlcnM4KCk7CisgICAgICAgIGlmIChyZXAy
LT5pczhCaXQoKSkgeworICAgICAgICAgICAgY29uc3QgY2hhciogZDIgPSByZXAyLT5jaGFyYWN0
ZXJzOCgpOworCisgICAgICAgICAgICBpZiAoZDEgPT0gZDIpIC8vIENoZWNrIHRvIHNlZSBpZiB0
aGUgZGF0YSBwb2ludGVycyBhcmUgdGhlIHNhbWUuCisgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICAgICAgICAgIC8vIERvIHF1aWNrIGNoZWNrcyBmb3Igc2l6ZXMgMSBhbmQgMi4K
KyAgICAgICAgICAgIHN3aXRjaCAoc2l6ZTEpIHsKKyAgICAgICAgICAgIGNhc2UgMToKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZDFbMF0gPT0gZDJbMF07CisgICAgICAgICAgICBjYXNlIDI6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIChkMVswXSA9PSBkMlswXSkgJiAoZDFbMV0gPT0gZDJbMV0p
OworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gKCFtZW1jbXAo
ZDEsIGQyLCBzaXplMSAqIHNpemVvZihjaGFyKSkpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgY29uc3QgVUNoYXIqIGQyID0gcmVwMi0+Y2hhcmFjdGVyczE2KCk7CisKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemUxOyBpKyspIHsKKyAgICAgICAgICAg
IGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihkMVtpXSkgIT0gZDJbaV0pCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKworICAgIGlmIChyZXAyLT5pczhCaXQoKSkgeworICAgICAgICBjb25zdCBVQ2hhciog
ZDEgPSByZXAxLT5jaGFyYWN0ZXJzMTYoKTsKKyAgICAgICAgY29uc3QgY2hhciogZDIgPSByZXAy
LT5jaGFyYWN0ZXJzOCgpOworCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXpl
MTsgaSsrKSB7CisgICAgICAgICAgICBpZiAoZDFbaV0gIT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQg
Y2hhcj4oZDJbaV0pKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIH0KKworICAgIGNvbnN0IFVDaGFyKiBkMSA9IHJl
cDEtPmNoYXJhY3RlcnMxNigpOworICAgIGNvbnN0IFVDaGFyKiBkMiA9IHJlcDItPmNoYXJhY3Rl
cnMxNigpOworCiAgICAgaWYgKGQxID09IGQyKSAvLyBDaGVjayB0byBzZWUgaWYgdGhlIGRhdGEg
cG9pbnRlcnMgYXJlIHRoZSBzYW1lLgogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKKwogICAg
IC8vIERvIHF1aWNrIGNoZWNrcyBmb3Igc2l6ZXMgMSBhbmQgMi4KICAgICBzd2l0Y2ggKHNpemUx
KSB7CiAgICAgY2FzZSAxOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1N0
cmluZ0hhc2guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQv
U3RyaW5nSGFzaC5oCShyZXZpc2lvbiA5NzAwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvdGV4dC9TdHJpbmdIYXNoLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDExICs1Myw2NSBAQCBu
YW1lc3BhY2UgV1RGIHsKICAgICAgICAgICAgIGlmIChhTGVuZ3RoICE9IGJMZW5ndGgpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgICAgICAgICBpZiAoYS0+aXM4Qml0KCkp
IHsKKyAgICAgICAgICAgICAgICBpZiAoYi0+aXM4Qml0KCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgLy8gRklYTUU6IHBlcmhhcHMgd2Ugc2hvdWxkIGhhdmUgYSBtb3JlIGFic3RyYWN0IG1hY3Jv
IHRoYXQgaW5kaWNhdGVzIHdoZW4KKyAgICAgICAgICAgICAgICAgICAgLy8gZ29pbmcgNCBieXRl
cyBhdCBhIHRpbWUgaXMgdW5zYWZlCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFD
aGFycyA9IGEtPmNoYXJhY3RlcnM4KCk7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIq
IGJDaGFycyA9IGItPmNoYXJhY3RlcnM4KCk7CisKKyAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgaSA9IDA7CisjaWYgKENQVShYODYpIHx8IENQVShYODZfNjQpKQorICAgICAgICAgICAgICAg
ICAgICBjb25zdCB1bnNpZ25lZCBjaGFyc1BlckludCA9IHNpemVvZih1aW50MzJfdCkgLyBzaXpl
b2YoY2hhcik7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAo
YUxlbmd0aCA+IGNoYXJzUGVySW50KSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBzdG9wQ291bnQgPSBhTGVuZ3RoICYgfihjaGFyc1BlckludCAtIDEpOworICAgICAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50MzJfdCogYUlu
dENoYXJhY3RlcnMgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oYUNoYXJzKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90KiBiSW50Q2hhcmFjdGVycyA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihiQ2hhcnMpOworICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaSA8IHN0b3BDb3VudDsgaSArPSBjaGFy
c1BlckludCwgKytqKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFJbnRDaGFy
YWN0ZXJzW2pdICE9IGJJbnRDaGFyYWN0ZXJzW2pdKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICBmb3IgKDsgaSA8IGFM
ZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFDaGFyc1tpXSAhPSBi
Q2hhcnNbaV0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAv
LyBhIGlzIDhiaXQsIGIgaXMgMTZiaXQKKyAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBhQ2hh
cnMgPSBhLT5jaGFyYWN0ZXJzOCgpOworICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBiQ2hh
cnMgPSBiLT5jaGFyYWN0ZXJzMTYoKTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpICE9IGFMZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBpZiAodW5zaWdu
ZWRDaGFyVmFsdWUoKmFDaGFycysrKSAhPSAqYkNoYXJzKyspCisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChiLT5pczhCaXQo
KSkgeworICAgICAgICAgICAgICAgIC8vIGEgaXMgOGJpdCwgYiBpcyAxNmJpdAorICAgICAgICAg
ICAgICAgIGNvbnN0IFVDaGFyKiBhQ2hhcnMgPSBhLT5jaGFyYWN0ZXJzMTYoKTsKKyAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyKiBiQ2hhcnMgPSBiLT5jaGFyYWN0ZXJzOCgpOworICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgIT0gYUxlbmd0aDsgKytpKSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmICgqYUNoYXJzKysgIT0gdW5zaWduZWRDaGFyVmFsdWUoKmJDaGFycysr
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgLy8gMTZiaXQgYSAmIGIKICAgICAgICAgICAgIC8vIEZJWE1FOiBwZXJoYXBzIHdl
IHNob3VsZCBoYXZlIGEgbW9yZSBhYnN0cmFjdCBtYWNybyB0aGF0IGluZGljYXRlcyB3aGVuCiAg
ICAgICAgICAgICAvLyBnb2luZyA0IGJ5dGVzIGF0IGEgdGltZSBpcyB1bnNhZmUKICNpZiBDUFUo
QVJNKSB8fCBDUFUoU0g0KSB8fCBDUFUoTUlQUykgfHwgQ1BVKFNQQVJDKQotICAgICAgICAgICAg
Y29uc3QgVUNoYXIqIGFDaGFycyA9IGEtPmNoYXJhY3RlcnMoKTsKLSAgICAgICAgICAgIGNvbnN0
IFVDaGFyKiBiQ2hhcnMgPSBiLT5jaGFyYWN0ZXJzKCk7CisgICAgICAgICAgICBjb25zdCBVQ2hh
ciogYUNoYXJzID0gYS0+Y2hhcmFjdGVyczE2KCk7CisgICAgICAgICAgICBjb25zdCBVQ2hhciog
YkNoYXJzID0gYi0+Y2hhcmFjdGVyczE2KCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpICE9IGFMZW5ndGg7ICsraSkgewogICAgICAgICAgICAgICAgIGlmICgqYUNoYXJzKysg
IT0gKmJDaGFycysrKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC02NSw4
ICsxMTksOCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogI2Vs
c2UKICAgICAgICAgICAgIC8qIERvIGl0IDQtYnl0ZXMtYXQtYS10aW1lIG9uIGFyY2hpdGVjdHVy
ZXMgd2hlcmUgaXQncyBzYWZlICovCi0gICAgICAgICAgICBjb25zdCB1aW50MzJfdCogYUNoYXJz
ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KGEtPmNoYXJhY3RlcnMoKSk7Ci0g
ICAgICAgICAgICBjb25zdCB1aW50MzJfdCogYkNoYXJzID0gcmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1aW50MzJfdCo+KGItPmNoYXJhY3RlcnMoKSk7CisgICAgICAgICAgICBjb25zdCB1aW50MzJf
dCogYUNoYXJzID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KGEtPmNoYXJhY3Rl
cnMxNigpKTsKKyAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90KiBiQ2hhcnMgPSByZWludGVycHJl
dF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oYi0+Y2hhcmFjdGVyczE2KCkpOwogCiAgICAgICAgICAg
ICB1bnNpZ25lZCBoYWxmTGVuZ3RoID0gYUxlbmd0aCA+PiAxOwogICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSAhPSBoYWxmTGVuZ3RoOyArK2kpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL3RleHQvU3RyaW5nSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwCShyZXZpc2lvbiA5NzAwMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJpbmdJbXBsLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTgsOCArNTgsMTMgQEAgU3RyaW5nSW1wbDo6flN0cmluZ0ltcGwoKQogICAgIGlm
IChvd25lcnNoaXAgIT0gQnVmZmVySW50ZXJuYWwpIHsKICAgICAgICAgaWYgKG93bmVyc2hpcCA9
PSBCdWZmZXJPd25lZCkgewogICAgICAgICAgICAgQVNTRVJUKCFtX3NoYXJlZEJ1ZmZlcik7Ci0g
ICAgICAgICAgICBBU1NFUlQobV9kYXRhKTsKLSAgICAgICAgICAgIGZhc3RGcmVlKGNvbnN0X2Nh
c3Q8VUNoYXIqPihtX2RhdGEpKTsKKyAgICAgICAgICAgIC8vIFdlIHVzZSBtX2RhdGE4LCBidXQg
c2luY2UgaXQgaXMgYSB1bmlvbiB3aXRoIG1fZGF0YTE2IHRoaXMgd29ya3MgZWl0aGVyIHdheS4K
KyAgICAgICAgICAgIEFTU0VSVChtX2RhdGE4KTsKKyAgICAgICAgICAgIGZhc3RGcmVlKGNvbnN0
X2Nhc3Q8Y2hhcio+KG1fZGF0YTgpKTsKKyAgICAgICAgICAgIGlmIChoYXMxNkJpdFNoYWRvdygp
KSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKG1fY29weURhdGExNik7CisgICAgICAgICAgICAg
ICAgZmFzdEZyZWUobV9jb3B5RGF0YTE2KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNl
IGlmIChvd25lcnNoaXAgPT0gQnVmZmVyU3Vic3RyaW5nKSB7CiAgICAgICAgICAgICBBU1NFUlQo
bV9zdWJzdHJpbmdCdWZmZXIpOwogICAgICAgICAgICAgbV9zdWJzdHJpbmdCdWZmZXItPmRlcmVm
KCk7CkBAIC03MSw2ICs3NiwyNSBAQCBTdHJpbmdJbXBsOjp+U3RyaW5nSW1wbCgpCiAgICAgfQog
fQogCitQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmNyZWF0ZVVuaW5pdGlhbGl6
ZWQodW5zaWduZWQgbGVuZ3RoLCBjaGFyKiYgZGF0YSkKK3sKKyAgICBpZiAoIWxlbmd0aCkgewor
ICAgICAgICBkYXRhID0gMDsKKyAgICAgICAgcmV0dXJuIGVtcHR5KCk7CisgICAgfQorCisgICAg
Ly8gQWxsb2NhdGUgYSBzaW5nbGUgYnVmZmVyIGxhcmdlIGVub3VnaCB0byBjb250YWluIHRoZSBT
dHJpbmdJbXBsCisgICAgLy8gc3RydWN0IGFzIHdlbGwgYXMgdGhlIGRhdGEgd2hpY2ggaXQgY29u
dGFpbnMuIFRoaXMgcmVtb3ZlcyBvbmUKKyAgICAvLyBoZWFwIGFsbG9jYXRpb24gZnJvbSB0aGlz
IGNhbGwuCisgICAgaWYgKGxlbmd0aCA+ICgoc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46
Om1heCgpIC0gc2l6ZW9mKFN0cmluZ0ltcGwpKSAvIHNpemVvZihjaGFyKSkpCisgICAgICAgIENS
QVNIKCk7CisgICAgc2l6ZV90IHNpemUgPSBzaXplb2YoU3RyaW5nSW1wbCkgKyBsZW5ndGggKiBz
aXplb2YoY2hhcik7CisgICAgU3RyaW5nSW1wbCogc3RyaW5nID0gc3RhdGljX2Nhc3Q8U3RyaW5n
SW1wbCo+KGZhc3RNYWxsb2Moc2l6ZSkpOworCisgICAgZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhcio+KHN0cmluZyArIDEpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgKHN0cmluZykgU3Ry
aW5nSW1wbChsZW5ndGgsIEZvcmNlOEJpdENvbnN0cnVjdG9yKSk7Cit9CisKIFBhc3NSZWZQdHI8
U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5n
dGgsIFVDaGFyKiYgZGF0YSkKIHsKICAgICBpZiAoIWxlbmd0aCkgewpAQCAtMTMyLDcgKzE1Niw3
IEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y3JlYXQKICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFN0cmluZ0ltcGwoY2hhcmFjdGVycywgbGVuZ3RoLCBzaGFyZWRCdWZmZXIp
KTsKIH0KIAotU2hhcmVkVUNoYXIqIFN0cmluZ0ltcGw6OnNoYXJlZEJ1ZmZlcigpCitTaGFyZWRV
Q2hhciogU3RyaW5nSW1wbDo6c2hhcmVkQnVmZmVyMTYoKQogewogICAgIGlmIChtX2xlbmd0aCA8
IG1pbkxlbmd0aFRvU2hhcmUpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMTQ0LDEwICsxNjgsMTMg
QEAgU2hhcmVkVUNoYXIqIFN0cmluZ0ltcGw6OnNoYXJlZEJ1ZmZlcigpCiAgICAgaWYgKG93bmVy
c2hpcCA9PSBCdWZmZXJJbnRlcm5hbCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKG93bmVy
c2hpcCA9PSBCdWZmZXJTdWJzdHJpbmcpCi0gICAgICAgIHJldHVybiBtX3N1YnN0cmluZ0J1ZmZl
ci0+c2hhcmVkQnVmZmVyKCk7CisgICAgICAgIHJldHVybiBtX3N1YnN0cmluZ0J1ZmZlci0+c2hh
cmVkQnVmZmVyMTYoKTsKICAgICBpZiAob3duZXJzaGlwID09IEJ1ZmZlck93bmVkKSB7CiAgICAg
ICAgIEFTU0VSVCghbV9zaGFyZWRCdWZmZXIpOwotICAgICAgICBtX3NoYXJlZEJ1ZmZlciA9IFNo
YXJlZFVDaGFyOjpjcmVhdGUobmV3IFNoYXJhYmxlVUNoYXIobV9kYXRhKSkubGVha1JlZigpOwor
ICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IFNoYXJlZENoYXIgZm9yIDgtYml0IHN0cmluZ3MK
KyAgICAgICAgQVNTRVJUKCFpczhCaXQoKSk7CisgICAgICAgIEFTU0VSVCghaGFzMTZCaXRTaGFk
b3coKSk7CisgICAgICAgIG1fc2hhcmVkQnVmZmVyID0gU2hhcmVkVUNoYXI6OmNyZWF0ZShuZXcg
U2hhcmFibGVVQ2hhcihtX2RhdGExNikpLmxlYWtSZWYoKTsKICAgICAgICAgbV9yZWZDb3VudEFu
ZEZsYWdzID0gKG1fcmVmQ291bnRBbmRGbGFncyAmIH5zX3JlZkNvdW50TWFza0J1ZmZlck93bmVy
c2hpcCkgfCBCdWZmZXJTaGFyZWQ7CiAgICAgfQogCkBAIC0xNTYsMTQgKzE4Myw0OSBAQCBTaGFy
ZWRVQ2hhciogU3RyaW5nSW1wbDo6c2hhcmVkQnVmZmVyKCkKICAgICByZXR1cm4gbV9zaGFyZWRC
dWZmZXI7CiB9CiAKK2NvbnN0IFVDaGFyKiBTdHJpbmdJbXBsOjpnZXREYXRhMTZTbG93Q2FzZSgp
IGNvbnN0Cit7CisgICAgaWYgKGhhczE2Qml0U2hhZG93KCkpCisgICAgICAgIHJldHVybiBtX2Nv
cHlEYXRhMTY7CisKKyAgICBpZiAoYnVmZmVyT3duZXJzaGlwKCkgPT0gQnVmZmVyU3Vic3RyaW5n
KSB7CisgICAgICAgIC8vIElmIHRoaXMgaXMgYSBzdWJzdHJpbmcsIHJldHVybiBhIHBvaW50ZXIg
aW50byB0aGUgcGFyZW50IHN0cmluZy4KKyAgICAgICAgLy8gVE9ETzogQ29uc2lkZXIgc2V2ZXJp
bmcgdGhpcyBzdHJpbmcgZnJvbSB0aGUgcGFyZW50IHN0cmluZworICAgICAgICB1bnNpZ25lZCBv
ZmZzZXQgPSBtX2RhdGE4IC0gbV9zdWJzdHJpbmdCdWZmZXItPmNoYXJhY3RlcnM4KCk7CisgICAg
ICAgIHJldHVybiBtX3N1YnN0cmluZ0J1ZmZlci0+Y2hhcmFjdGVyczE2KCkgKyBvZmZzZXQ7Cisg
ICAgfQorCisgICAgQVNTRVJUKGJ1ZmZlck93bmVyc2hpcCgpICE9IEJ1ZmZlclNoYXJlZCk7Cisg
ICAgdW5zaWduZWQgbGVuID0gbGVuZ3RoKCk7CisgICAgbV9jb3B5RGF0YTE2ID0gc3RhdGljX2Nh
c3Q8VUNoYXIqPihmYXN0Q2FsbG9jKGxlbiwgc2l6ZW9mKFVDaGFyKSkpOworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbGVuOyBpKyspCisgICAgICAgIG1fY29weURhdGExNltpXSA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGNoYXI+KG1fZGF0YThbaV0pOworCisgICAgbV9yZWZDb3VudEFuZEZs
YWdzIHw9IHNfcmVmQ291bnRGbGFnSGFzMTZCaXRTaGFkb3c7CisKKyAgICByZXR1cm4gbV9jb3B5
RGF0YTE2OworfQorCiBib29sIFN0cmluZ0ltcGw6OmNvbnRhaW5zT25seVdoaXRlc3BhY2UoKQog
ewogICAgIC8vIEZJWE1FOiBUaGUgZGVmaW5pdGlvbiBvZiB3aGl0ZXNwYWNlIGhlcmUgaW5jbHVk
ZXMgYSBudW1iZXIgb2YgY2hhcmFjdGVycwogICAgIC8vIHRoYXQgYXJlIG5vdCB3aGl0ZXNwYWNl
IGZyb20gdGhlIHBvaW50IG9mIHZpZXcgb2YgUmVuZGVyVGV4dDsgSSB3b25kZXIgaWYKICAgICAv
LyB0aGF0J3MgYSBwcm9ibGVtIGluIHByYWN0aWNlLgotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtX2xlbmd0aDsgaSsrKQotICAgICAgICBpZiAoIWlzQVNDSUlTcGFjZShtX2RhdGFbaV0p
KQorICAgIGlmIChpczhCaXQoKSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV9sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgVUNoYXIgYyA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXI+KG1fZGF0YThbaV0pOworICAgICAgICAgICAgaWYgKCFpc0FTQ0lJU3BhY2UoYykp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbGVuZ3Ro
OyBpKyspIHsKKyAgICAgICAgVUNoYXIgYyA9IG1fZGF0YTE2W2ldOworICAgICAgICBpZiAoIWlz
QVNDSUlTcGFjZShjKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKQEAgLTE3NywxNSArMjM5LDIwIEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1w
bD4gU3RyaW5nSW1wbDo6c3Vic3QKICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICBs
ZW5ndGggPSBtYXhMZW5ndGg7CiAgICAgfQotICAgIHJldHVybiBjcmVhdGUobV9kYXRhICsgc3Rh
cnQsIGxlbmd0aCk7CisgICAgaWYgKGlzOEJpdCgpKQorICAgICAgICByZXR1cm4gY3JlYXRlKG1f
ZGF0YTggKyBzdGFydCwgbGVuZ3RoKTsKKworICAgIHJldHVybiBjcmVhdGUobV9kYXRhMTYgKyBz
dGFydCwgbGVuZ3RoKTsKIH0KIAogVUNoYXIzMiBTdHJpbmdJbXBsOjpjaGFyYWN0ZXJTdGFydGlu
Z0F0KHVuc2lnbmVkIGkpCiB7Ci0gICAgaWYgKFUxNl9JU19TSU5HTEUobV9kYXRhW2ldKSkKLSAg
ICAgICAgcmV0dXJuIG1fZGF0YVtpXTsKLSAgICBpZiAoaSArIDEgPCBtX2xlbmd0aCAmJiBVMTZf
SVNfTEVBRChtX2RhdGFbaV0pICYmIFUxNl9JU19UUkFJTChtX2RhdGFbaSArIDFdKSkKLSAgICAg
ICAgcmV0dXJuIFUxNl9HRVRfU1VQUExFTUVOVEFSWShtX2RhdGFbaV0sIG1fZGF0YVtpICsgMV0p
OworICAgIGlmIChpczhCaXQoKSkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVk
IGNoYXI+KG1fZGF0YThbaV0pOworICAgIGlmIChVMTZfSVNfU0lOR0xFKG1fZGF0YTE2W2ldKSkK
KyAgICAgICAgcmV0dXJuIG1fZGF0YTE2W2ldOworICAgIGlmIChpICsgMSA8IG1fbGVuZ3RoICYm
IFUxNl9JU19MRUFEKG1fZGF0YTE2W2ldKSAmJiBVMTZfSVNfVFJBSUwobV9kYXRhMTZbaSArIDFd
KSkKKyAgICAgICAgcmV0dXJuIFUxNl9HRVRfU1VQUExFTUVOVEFSWShtX2RhdGExNltpXSwgbV9k
YXRhMTZbaSArIDFdKTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtMTk1LDQyICsyNjIsNjQgQEAg
UGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpsb3dlcgogICAgIC8vIG5vLW9wIGNv
ZGUgcGF0aCB1cCB0aHJvdWdoIHRoZSBmaXJzdCAncmV0dXJuJyBzdGF0ZW1lbnQuCiAgICAgCiAg
ICAgLy8gRmlyc3Qgc2NhbiB0aGUgc3RyaW5nIGZvciB1cHBlcmNhc2UgYW5kIG5vbi1BU0NJSSBj
aGFyYWN0ZXJzOgotICAgIFVDaGFyIG9yZWQgPSAwOwogICAgIGJvb2wgbm9VcHBlciA9IHRydWU7
Ci0gICAgY29uc3QgVUNoYXIgKmVuZCA9IG1fZGF0YSArIG1fbGVuZ3RoOwotICAgIGZvciAoY29u
c3QgVUNoYXIqIGNocCA9IG1fZGF0YTsgY2hwICE9IGVuZDsgY2hwKyspIHsKLSAgICAgICAgaWYg
KFVOTElLRUxZKGlzQVNDSUlVcHBlcigqY2hwKSkpCi0gICAgICAgICAgICBub1VwcGVyID0gZmFs
c2U7Ci0gICAgICAgIG9yZWQgfD0gKmNocDsKKyAgICBVQ2hhciBvcmVkID0gMDsKKyAgICBpZiAo
aXM4Qml0KCkpIHsKKyAgICAgICAgY29uc3QgY2hhciAqZW5kID0gbV9kYXRhOCArIG1fbGVuZ3Ro
OworICAgICAgICBmb3IgKGNvbnN0IGNoYXIqIGNocCA9IG1fZGF0YTg7IGNocCAhPSBlbmQ7IGNo
cCsrKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKGlzQVNDSUlVcHBlcigqY2hwKSkpCisgICAg
ICAgICAgICAgICAgbm9VcHBlciA9IGZhbHNlOworICAgICAgICAvLyBOb3RoaW5nIHRvIGRvIGlm
IHRoZSBzdHJpbmcgaXMgYWxsIEFTQ0lJIHdpdGggbm8gdXBwZXJjYXNlLgorICAgICAgICBpZiAo
bm9VcHBlcikKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgIH0gZWxzZSB7CisgICAgICAg
IGNvbnN0IFVDaGFyICplbmQgPSBtX2RhdGExNiArIG1fbGVuZ3RoOworICAgICAgICBmb3IgKGNv
bnN0IFVDaGFyKiBjaHAgPSBtX2RhdGExNjsgY2hwICE9IGVuZDsgY2hwKyspIHsKKyAgICAgICAg
ICAgIGlmIChVTkxJS0VMWShpc0FTQ0lJVXBwZXIoKmNocCkpKQorICAgICAgICAgICAgICAgIG5v
VXBwZXIgPSBmYWxzZTsKKyAgICAgICAgICAgIG9yZWQgfD0gKmNocDsKKyAgICAgICAgfQorICAg
ICAgICAvLyBOb3RoaW5nIHRvIGRvIGlmIHRoZSBzdHJpbmcgaXMgYWxsIEFTQ0lJIHdpdGggbm8g
dXBwZXJjYXNlLgorICAgICAgICBpZiAobm9VcHBlciAmJiAhKG9yZWQgJiB+MHg3RikpCisgICAg
ICAgICAgICByZXR1cm4gdGhpczsKICAgICB9Ci0gICAgCi0gICAgLy8gTm90aGluZyB0byBkbyBp
ZiB0aGUgc3RyaW5nIGlzIGFsbCBBU0NJSSB3aXRoIG5vIHVwcGVyY2FzZS4KLSAgICBpZiAobm9V
cHBlciAmJiAhKG9yZWQgJiB+MHg3RikpCi0gICAgICAgIHJldHVybiB0aGlzOwogCiAgICAgaWYg
KG1fbGVuZ3RoID4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG51bWVyaWNfbGltaXRzPGludDMyX3Q+
OjptYXgoKSkpCiAgICAgICAgIENSQVNIKCk7CiAgICAgaW50MzJfdCBsZW5ndGggPSBtX2xlbmd0
aDsKIAotICAgIFVDaGFyKiBkYXRhOwotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0g
Y3JlYXRlVW5pbml0aWFsaXplZChtX2xlbmd0aCwgZGF0YSk7Ci0KICAgICBpZiAoIShvcmVkICYg
fjB4N0YpKSB7Ci0gICAgICAgIC8vIERvIGEgZmFzdGVyIGxvb3AgZm9yIHRoZSBjYXNlIHdoZXJl
IGFsbCB0aGUgY2hhcmFjdGVycyBhcmUgQVNDSUkuCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIFVDaGFyIGMgPSBtX2RhdGFbaV07Ci0gICAg
ICAgICAgICBkYXRhW2ldID0gdG9BU0NJSUxvd2VyKGMpOworICAgICAgICBpZiAoaXM4Qml0KCkp
IHsKKyAgICAgICAgICAgIGNoYXIqIGRhdGE4OworICAgICAgICAgICAgCisgICAgICAgICAgICBS
ZWZQdHI8U3RyaW5nSW1wbD4gbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQobV9sZW5ndGgs
IGRhdGE4KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yIChpbnQzMl90IGkgPSAwOyBp
IDwgbGVuZ3RoOyBpKyspCisgICAgICAgICAgICAgICAgZGF0YThbaV0gPSB0b0FTQ0lJTG93ZXIo
bV9kYXRhOFtpXSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBuZXdJbXBsOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBVQ2hhciogZGF0YTE2OworICAgICAgICBSZWZQ
dHI8U3RyaW5nSW1wbD4gbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQobV9sZW5ndGgsIGRh
dGExNik7CisgICAgICAgIAorICAgICAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBsZW5ndGg7
IGkrKykgeworICAgICAgICAgICAgVUNoYXIgYyA9IG1fZGF0YTE2W2ldOworICAgICAgICAgICAg
ZGF0YTE2W2ldID0gdG9BU0NJSUxvd2VyKGMpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBu
ZXdJbXBsOwogICAgIH0KICAgICAKICAgICAvLyBEbyBhIHNsb3dlciBpbXBsZW1lbnRhdGlvbiBm
b3IgY2FzZXMgdGhhdCBpbmNsdWRlIG5vbi1BU0NJSSBjaGFyYWN0ZXJzLgorICAgIFVDaGFyKiBk
YXRhMTY7CisgICAgUmVmUHRyPFN0cmluZ0ltcGw+IG5ld0ltcGwgPSBjcmVhdGVVbmluaXRpYWxp
emVkKG1fbGVuZ3RoLCBkYXRhMTYpOworCiAgICAgYm9vbCBlcnJvcjsKLSAgICBpbnQzMl90IHJl
YWxMZW5ndGggPSBVbmljb2RlOjp0b0xvd2VyKGRhdGEsIGxlbmd0aCwgbV9kYXRhLCBtX2xlbmd0
aCwgJmVycm9yKTsKKyAgICBpbnQzMl90IHJlYWxMZW5ndGggPSBVbmljb2RlOjp0b0xvd2VyKGRh
dGExNiwgbGVuZ3RoLCBtX2RhdGExNiwgbV9sZW5ndGgsICZlcnJvcik7CiAgICAgaWYgKCFlcnJv
ciAmJiByZWFsTGVuZ3RoID09IGxlbmd0aCkKICAgICAgICAgcmV0dXJuIG5ld0ltcGw7Ci0gICAg
bmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQocmVhbExlbmd0aCwgZGF0YSk7Ci0gICAgVW5p
Y29kZTo6dG9Mb3dlcihkYXRhLCByZWFsTGVuZ3RoLCBtX2RhdGEsIG1fbGVuZ3RoLCAmZXJyb3Ip
OworICAgIG5ld0ltcGwgPSBjcmVhdGVVbmluaXRpYWxpemVkKHJlYWxMZW5ndGgsIGRhdGExNik7
CisgICAgVW5pY29kZTo6dG9Mb3dlcihkYXRhMTYsIHJlYWxMZW5ndGgsIG1fZGF0YTE2LCBtX2xl
bmd0aCwgJmVycm9yKTsKICAgICBpZiAoZXJyb3IpCiAgICAgICAgIHJldHVybiB0aGlzOwogICAg
IHJldHVybiBuZXdJbXBsOwpAQCAtMjQxLDMwICszMzAsNjAgQEAgUGFzc1JlZlB0cjxTdHJpbmdJ
bXBsPiBTdHJpbmdJbXBsOjp1cHBlcgogICAgIC8vIFRoaXMgZnVuY3Rpb24gY291bGQgYmUgb3B0
aW1pemVkIGZvciBuby1vcCBjYXNlcyB0aGUgd2F5IGxvd2VyKCkgaXMsCiAgICAgLy8gYnV0IGlu
IGVtcGlyaWNhbCB0ZXN0aW5nLCBmZXcgYWN0dWFsIGNhbGxzIHRvIHVwcGVyKCkgYXJlIG5vLW9w
cywgc28KICAgICAvLyBpdCB3b3VsZG4ndCBiZSB3b3J0aCB0aGUgZXh0cmEgdGltZSBmb3IgcHJl
LXNjYW5uaW5nLgotICAgIFVDaGFyKiBkYXRhOwotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBuZXdJ
bXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChtX2xlbmd0aCwgZGF0YSk7CiAKICAgICBpZiAobV9s
ZW5ndGggPiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1h
eCgpKSkKICAgICAgICAgQ1JBU0goKTsKICAgICBpbnQzMl90IGxlbmd0aCA9IG1fbGVuZ3RoOwog
CisgICAgaWYgKGlzOEJpdCgpKSB7CisgICAgICAgIGNoYXIqIGRhdGE4OworICAgICAgICBSZWZQ
dHI8U3RyaW5nSW1wbD4gbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQobV9sZW5ndGgsIGRh
dGE4KTsKKyAgICAgICAgCisgICAgICAgIC8vIERvIGEgZmFzdGVyIGxvb3AgZm9yIHRoZSBjYXNl
IHdoZXJlIGFsbCB0aGUgY2hhcmFjdGVycyBhcmUgQVNDSUkuCisgICAgICAgIGNoYXIgb3JlZCA9
IDA7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAg
ICAgIGNoYXIgYyA9IG1fZGF0YThbaV07CisgICAgICAgICAgICBvcmVkIHw9IGM7CisgICAgICAg
ICAgICBkYXRhOFtpXSA9IHRvQVNDSUlVcHBlcihjKTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
IShvcmVkICYgfjB4N0YpKQorICAgICAgICAgICAgcmV0dXJuIG5ld0ltcGwucmVsZWFzZSgpOwor
CisgICAgICAgIC8vIERvIGEgc2xvd2VyIGltcGxlbWVudGF0aW9uIGZvciBjYXNlcyB0aGF0IGlu
Y2x1ZGUgbm9uLUFTQ0lJIGNoYXJhY3RlcnMuCisgICAgICAgIGJvb2wgZXJyb3I7CisgICAgICAg
IFVDaGFyKiBkYXRhMTY7CisgICAgICAgIG5ld0ltcGwgPSBjcmVhdGVVbmluaXRpYWxpemVkKG1f
bGVuZ3RoLCBkYXRhMTYpOworICAgICAgICBpbnQzMl90IHJlYWxMZW5ndGggPSBVbmljb2RlOjp0
b1VwcGVyKGRhdGExNiwgbGVuZ3RoLCBtX2RhdGExNiwgbV9sZW5ndGgsICZlcnJvcik7CisgICAg
ICAgIGlmICghZXJyb3IgJiYgcmVhbExlbmd0aCA9PSBsZW5ndGgpCisgICAgICAgICAgICByZXR1
cm4gbmV3SW1wbDsKKyAgICAgICAgbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQocmVhbExl
bmd0aCwgZGF0YTE2KTsKKyAgICAgICAgVW5pY29kZTo6dG9VcHBlcihkYXRhMTYsIHJlYWxMZW5n
dGgsIG1fZGF0YTE2LCBtX2xlbmd0aCwgJmVycm9yKTsKKyAgICAgICAgaWYgKGVycm9yKQorICAg
ICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIHJldHVybiBuZXdJbXBsLnJlbGVhc2UoKTsK
KyAgICB9CisKKyAgICBVQ2hhciogZGF0YTE2OworICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBuZXdJ
bXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChtX2xlbmd0aCwgZGF0YTE2KTsKKyAgICAKICAgICAv
LyBEbyBhIGZhc3RlciBsb29wIGZvciB0aGUgY2FzZSB3aGVyZSBhbGwgdGhlIGNoYXJhY3RlcnMg
YXJlIEFTQ0lJLgogICAgIFVDaGFyIG9yZWQgPSAwOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
bGVuZ3RoOyBpKyspIHsKLSAgICAgICAgVUNoYXIgYyA9IG1fZGF0YVtpXTsKKyAgICAgICAgVUNo
YXIgYyA9IG1fZGF0YTE2W2ldOwogICAgICAgICBvcmVkIHw9IGM7Ci0gICAgICAgIGRhdGFbaV0g
PSB0b0FTQ0lJVXBwZXIoYyk7CisgICAgICAgIGRhdGExNltpXSA9IHRvQVNDSUlVcHBlcihjKTsK
ICAgICB9CiAgICAgaWYgKCEob3JlZCAmIH4weDdGKSkKICAgICAgICAgcmV0dXJuIG5ld0ltcGwu
cmVsZWFzZSgpOwogCiAgICAgLy8gRG8gYSBzbG93ZXIgaW1wbGVtZW50YXRpb24gZm9yIGNhc2Vz
IHRoYXQgaW5jbHVkZSBub24tQVNDSUkgY2hhcmFjdGVycy4KICAgICBib29sIGVycm9yOwotICAg
IGludDMyX3QgcmVhbExlbmd0aCA9IFVuaWNvZGU6OnRvVXBwZXIoZGF0YSwgbGVuZ3RoLCBtX2Rh
dGEsIG1fbGVuZ3RoLCAmZXJyb3IpOworICAgIG5ld0ltcGwgPSBjcmVhdGVVbmluaXRpYWxpemVk
KG1fbGVuZ3RoLCBkYXRhMTYpOworICAgIGludDMyX3QgcmVhbExlbmd0aCA9IFVuaWNvZGU6OnRv
VXBwZXIoZGF0YTE2LCBsZW5ndGgsIG1fZGF0YTE2LCBtX2xlbmd0aCwgJmVycm9yKTsKICAgICBp
ZiAoIWVycm9yICYmIHJlYWxMZW5ndGggPT0gbGVuZ3RoKQogICAgICAgICByZXR1cm4gbmV3SW1w
bDsKLSAgICBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChyZWFsTGVuZ3RoLCBkYXRhKTsK
LSAgICBVbmljb2RlOjp0b1VwcGVyKGRhdGEsIHJlYWxMZW5ndGgsIG1fZGF0YSwgbV9sZW5ndGgs
ICZlcnJvcik7CisgICAgbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQocmVhbExlbmd0aCwg
ZGF0YTE2KTsKKyAgICBVbmljb2RlOjp0b1VwcGVyKGRhdGExNiwgcmVhbExlbmd0aCwgbV9kYXRh
MTYsIG1fbGVuZ3RoLCAmZXJyb3IpOwogICAgIGlmIChlcnJvcikKICAgICAgICAgcmV0dXJuIHRo
aXM7CiAgICAgcmV0dXJuIG5ld0ltcGwucmVsZWFzZSgpOwpAQCAtMjc1LDYgKzM5NCwxMyBAQCBQ
YXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmZpbGwoCiAgICAgaWYgKCFtX2xlbmd0
aCkKICAgICAgICAgcmV0dXJuIHRoaXM7CiAKKyAgICBpZiAoIShjaGFyYWN0ZXIgJiB+MHg3Rikp
IHsKKyAgICAgICAgY2hhciogZGF0YTsKKyAgICAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IG5ld0lt
cGwgPSBjcmVhdGVVbmluaXRpYWxpemVkKG1fbGVuZ3RoLCBkYXRhKTsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fbGVuZ3RoOyArK2kpCisgICAgICAgICAgICBkYXRhW2ldID0g
Y2hhcmFjdGVyOworICAgICAgICByZXR1cm4gbmV3SW1wbC5yZWxlYXNlKCk7CisgICAgfQogICAg
IFVDaGFyKiBkYXRhOwogICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0gY3JlYXRlVW5p
bml0aWFsaXplZChtX2xlbmd0aCwgZGF0YSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fbGVuZ3RoOyArK2kpCkBAIC0yODQsMTcgKzQxMCwyNCBAQCBQYXNzUmVmUHRyPFN0cmluZ0lt
cGw+IFN0cmluZ0ltcGw6OmZpbGwoCiAKIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1w
bDo6Zm9sZENhc2UoKQogewotICAgIFVDaGFyKiBkYXRhOwotICAgIFJlZlB0cjxTdHJpbmdJbXBs
PiBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChtX2xlbmd0aCwgZGF0YSk7Ci0KICAgICBp
ZiAobV9sZW5ndGggPiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obnVtZXJpY19saW1pdHM8aW50MzJf
dD46Om1heCgpKSkKICAgICAgICAgQ1JBU0goKTsKICAgICBpbnQzMl90IGxlbmd0aCA9IG1fbGVu
Z3RoOwogCisgICAgaWYgKGlzOEJpdCgpKSB7CisgICAgICAgIGNoYXIqIGRhdGE7CisgICAgICAg
IFJlZlB0ciA8U3RyaW5nSW1wbD5uZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChtX2xlbmd0
aCwgZGF0YSk7CisgICAgICAgIGZvciAoaW50MzJfdCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKQor
ICAgICAgICAgICAgZGF0YVtpXSA9IHRvQVNDSUlMb3dlcihtX2RhdGE4W2ldKTsKKyAgICAgICAg
cmV0dXJuIG5ld0ltcGwucmVsZWFzZSgpOworICAgIH0KKwogICAgIC8vIERvIGEgZmFzdGVyIGxv
b3AgZm9yIHRoZSBjYXNlIHdoZXJlIGFsbCB0aGUgY2hhcmFjdGVycyBhcmUgQVNDSUkuCisgICAg
VUNoYXIqIGRhdGE7CisgICAgUmVmUHRyPFN0cmluZ0ltcGw+IG5ld0ltcGwgPSBjcmVhdGVVbmlu
aXRpYWxpemVkKG1fbGVuZ3RoLCBkYXRhKTsKICAgICBVQ2hhciBvcmVkID0gMDsKICAgICBmb3Ig
KGludDMyX3QgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICBVQ2hhciBjID0gbV9k
YXRhW2ldOworICAgICAgICBVQ2hhciBjID0gbV9kYXRhMTZbaV07CiAgICAgICAgIG9yZWQgfD0g
YzsKICAgICAgICAgZGF0YVtpXSA9IHRvQVNDSUlMb3dlcihjKTsKICAgICB9CkBAIC0zMDMsMTEg
KzQzNiwxMSBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmZvbGRDCiAKICAg
ICAvLyBEbyBhIHNsb3dlciBpbXBsZW1lbnRhdGlvbiBmb3IgY2FzZXMgdGhhdCBpbmNsdWRlIG5v
bi1BU0NJSSBjaGFyYWN0ZXJzLgogICAgIGJvb2wgZXJyb3I7Ci0gICAgaW50MzJfdCByZWFsTGVu
Z3RoID0gVW5pY29kZTo6Zm9sZENhc2UoZGF0YSwgbGVuZ3RoLCBtX2RhdGEsIG1fbGVuZ3RoLCAm
ZXJyb3IpOworICAgIGludDMyX3QgcmVhbExlbmd0aCA9IFVuaWNvZGU6OmZvbGRDYXNlKGRhdGEs
IGxlbmd0aCwgbV9kYXRhMTYsIG1fbGVuZ3RoLCAmZXJyb3IpOwogICAgIGlmICghZXJyb3IgJiYg
cmVhbExlbmd0aCA9PSBsZW5ndGgpCiAgICAgICAgIHJldHVybiBuZXdJbXBsLnJlbGVhc2UoKTsK
ICAgICBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChyZWFsTGVuZ3RoLCBkYXRhKTsKLSAg
ICBVbmljb2RlOjpmb2xkQ2FzZShkYXRhLCByZWFsTGVuZ3RoLCBtX2RhdGEsIG1fbGVuZ3RoLCAm
ZXJyb3IpOworICAgIFVuaWNvZGU6OmZvbGRDYXNlKGRhdGEsIHJlYWxMZW5ndGgsIG1fZGF0YTE2
LCBtX2xlbmd0aCwgJmVycm9yKTsKICAgICBpZiAoZXJyb3IpCiAgICAgICAgIHJldHVybiB0aGlz
OwogICAgIHJldHVybiBuZXdJbXBsLnJlbGVhc2UoKTsKQEAgLTMyMyw3ICs0NTYsNyBAQCBpbmxp
bmUgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsCiAgICAgdW5zaWduZWQgZW5kID0g
bV9sZW5ndGggLSAxOwogICAgIAogICAgIC8vIHNraXAgd2hpdGUgc3BhY2UgZnJvbSBzdGFydAot
ICAgIHdoaWxlIChzdGFydCA8PSBlbmQgJiYgcHJlZGljYXRlKG1fZGF0YVtzdGFydF0pKQorICAg
IHdoaWxlIChzdGFydCA8PSBlbmQgJiYgcHJlZGljYXRlKGlzOEJpdCgpID8gbV9kYXRhOFtzdGFy
dF0gOiBtX2RhdGExNltzdGFydF0pKQogICAgICAgICBzdGFydCsrOwogICAgIAogICAgIC8vIG9u
bHkgd2hpdGUgc3BhY2UKQEAgLTMzMSwxMiArNDY0LDE0IEBAIGlubGluZSBQYXNzUmVmUHRyPFN0
cmluZ0ltcGw+IFN0cmluZ0ltcGwKICAgICAgICAgcmV0dXJuIGVtcHR5KCk7CiAKICAgICAvLyBz
a2lwIHdoaXRlIHNwYWNlIGZyb20gZW5kCi0gICAgd2hpbGUgKGVuZCAmJiBwcmVkaWNhdGUobV9k
YXRhW2VuZF0pKQorICAgIHdoaWxlIChlbmQgJiYgcHJlZGljYXRlKGlzOEJpdCgpID8gbV9kYXRh
OFtlbmRdIDogbV9kYXRhMTZbZW5kXSkpCiAgICAgICAgIGVuZC0tOwogCiAgICAgaWYgKCFzdGFy
dCAmJiBlbmQgPT0gbV9sZW5ndGggLSAxKQogICAgICAgICByZXR1cm4gdGhpczsKLSAgICByZXR1
cm4gY3JlYXRlKG1fZGF0YSArIHN0YXJ0LCBlbmQgKyAxIC0gc3RhcnQpOworICAgIGlmIChpczhC
aXQoKSkKKyAgICAgICAgcmV0dXJuIGNyZWF0ZShtX2RhdGE4ICsgc3RhcnQsIGVuZCArIDEgLSBz
dGFydCk7CisgICAgcmV0dXJuIGNyZWF0ZShtX2RhdGExNiArIHN0YXJ0LCBlbmQgKyAxIC0gc3Rh
cnQpOwogfQogCiBjbGFzcyBVQ2hhclByZWRpY2F0ZSB7CkBAIC0zNzAsOSArNTA1LDEwIEBAIFBh
c3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6c3RyaXAKICAgICByZXR1cm4gc3RyaXBN
YXRjaGVkQ2hhcmFjdGVycyhVQ2hhclByZWRpY2F0ZShpc1doaXRlU3BhY2UpKTsKIH0KIAorLy8g
RklYTUU6IEFkZCA4LWJpdCBwYXRoLiBMaWtlbHkgcmVxdWlyZXMgdGVtcGxhdGl6ZWQgU3RyaW5n
QnVmZmVyIGNsYXNzCiBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnJlbW92ZUNo
YXJhY3RlcnMoQ2hhcmFjdGVyTWF0Y2hGdW5jdGlvblB0ciBmaW5kTWF0Y2gpCiB7Ci0gICAgY29u
c3QgVUNoYXIqIGZyb20gPSBtX2RhdGE7CisgICAgY29uc3QgVUNoYXIqIGZyb20gPSBjaGFyYWN0
ZXJzKCk7CiAgICAgY29uc3QgVUNoYXIqIGZyb21lbmQgPSBmcm9tICsgbV9sZW5ndGg7CiAKICAg
ICAvLyBBc3N1bWUgdGhlIGNvbW1vbiBjYXNlIHdpbGwgbm90IHJlbW92ZSBhbnkgY2hhcmFjdGVy
cwpAQCAtMzgzLDEwICs1MTksMTAgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBs
OjpyZW1vdgogCiAgICAgU3RyaW5nQnVmZmVyIGRhdGEobV9sZW5ndGgpOwogICAgIFVDaGFyKiB0
byA9IGRhdGEuY2hhcmFjdGVycygpOwotICAgIHVuc2lnbmVkIG91dGMgPSBmcm9tIC0gbV9kYXRh
OworICAgIHVuc2lnbmVkIG91dGMgPSBmcm9tIC0gY2hhcmFjdGVyczE2KCk7CiAKICAgICBpZiAo
b3V0YykKLSAgICAgICAgbWVtY3B5KHRvLCBtX2RhdGEsIG91dGMgKiBzaXplb2YoVUNoYXIpKTsK
KyAgICAgICAgbWVtY3B5KHRvLCBjaGFyYWN0ZXJzMTYoKSwgb3V0YyAqIHNpemVvZihVQ2hhcikp
OwogCiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgd2hpbGUgKGZyb20gIT0gZnJvbWVuZCAm
JiBmaW5kTWF0Y2goKmZyb20pKQpAQCAtNDAyLDEyICs1MzgsMTMgQEAgUGFzc1JlZlB0cjxTdHJp
bmdJbXBsPiBTdHJpbmdJbXBsOjpyZW1vdgogICAgIHJldHVybiBhZG9wdChkYXRhKTsKIH0KIAor
Ly8gRklYTUU6IEFkZCA4LWJpdCBwYXRoLiBMaWtlbHkgcmVxdWlyZXMgdGVtcGxhdGl6ZWQgU3Ry
aW5nQnVmZmVyIGNsYXNzCiB0ZW1wbGF0ZSA8Y2xhc3MgVUNoYXJQcmVkaWNhdGU+CiBpbmxpbmUg
UGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpzaW1wbGlmeU1hdGNoZWRDaGFyYWN0
ZXJzVG9TcGFjZShVQ2hhclByZWRpY2F0ZSBwcmVkaWNhdGUpCiB7CiAgICAgU3RyaW5nQnVmZmVy
IGRhdGEobV9sZW5ndGgpOwogCi0gICAgY29uc3QgVUNoYXIqIGZyb20gPSBtX2RhdGE7CisgICAg
Y29uc3QgVUNoYXIqIGZyb20gPSBjaGFyYWN0ZXJzMTYoKTsKICAgICBjb25zdCBVQ2hhciogZnJv
bWVuZCA9IGZyb20gKyBtX2xlbmd0aDsKICAgICBpbnQgb3V0YyA9IDA7CiAgICAgYm9vbCBjaGFu
Z2VkVG9TcGFjZSA9IGZhbHNlOwpAQCAtNDUxLDYyICs1ODgsNjQgQEAgUGFzc1JlZlB0cjxTdHJp
bmdJbXBsPiBTdHJpbmdJbXBsOjpzaW1wbAogCiBpbnQgU3RyaW5nSW1wbDo6dG9JbnRTdHJpY3Qo
Ym9vbCogb2ssIGludCBiYXNlKQogewotICAgIHJldHVybiBjaGFyYWN0ZXJzVG9JbnRTdHJpY3Qo
bV9kYXRhLCBtX2xlbmd0aCwgb2ssIGJhc2UpOworICAgIHJldHVybiBjaGFyYWN0ZXJzVG9JbnRT
dHJpY3QoY2hhcmFjdGVyczE2KCksIG1fbGVuZ3RoLCBvaywgYmFzZSk7CiB9CiAKIHVuc2lnbmVk
IFN0cmluZ0ltcGw6OnRvVUludFN0cmljdChib29sKiBvaywgaW50IGJhc2UpCiB7Ci0gICAgcmV0
dXJuIGNoYXJhY3RlcnNUb1VJbnRTdHJpY3QobV9kYXRhLCBtX2xlbmd0aCwgb2ssIGJhc2UpOwor
ICAgIHJldHVybiBjaGFyYWN0ZXJzVG9VSW50U3RyaWN0KGNoYXJhY3RlcnMxNigpLCBtX2xlbmd0
aCwgb2ssIGJhc2UpOwogfQogCiBpbnQ2NF90IFN0cmluZ0ltcGw6OnRvSW50NjRTdHJpY3QoYm9v
bCogb2ssIGludCBiYXNlKQogewotICAgIHJldHVybiBjaGFyYWN0ZXJzVG9JbnQ2NFN0cmljdCht
X2RhdGEsIG1fbGVuZ3RoLCBvaywgYmFzZSk7CisgICAgcmV0dXJuIGNoYXJhY3RlcnNUb0ludDY0
U3RyaWN0KGNoYXJhY3RlcnMxNigpLCBtX2xlbmd0aCwgb2ssIGJhc2UpOworCiB9CiAKIHVpbnQ2
NF90IFN0cmluZ0ltcGw6OnRvVUludDY0U3RyaWN0KGJvb2wqIG9rLCBpbnQgYmFzZSkKIHsKLSAg
ICByZXR1cm4gY2hhcmFjdGVyc1RvVUludDY0U3RyaWN0KG1fZGF0YSwgbV9sZW5ndGgsIG9rLCBi
YXNlKTsKKyAgICByZXR1cm4gY2hhcmFjdGVyc1RvVUludDY0U3RyaWN0KGNoYXJhY3RlcnMxNigp
LCBtX2xlbmd0aCwgb2ssIGJhc2UpOwogfQogCiBpbnRwdHJfdCBTdHJpbmdJbXBsOjp0b0ludFB0
clN0cmljdChib29sKiBvaywgaW50IGJhc2UpCiB7Ci0gICAgcmV0dXJuIGNoYXJhY3RlcnNUb0lu
dFB0clN0cmljdChtX2RhdGEsIG1fbGVuZ3RoLCBvaywgYmFzZSk7CisgICAgcmV0dXJuIGNoYXJh
Y3RlcnNUb0ludFB0clN0cmljdChjaGFyYWN0ZXJzMTYoKSwgbV9sZW5ndGgsIG9rLCBiYXNlKTsK
IH0KIAogaW50IFN0cmluZ0ltcGw6OnRvSW50KGJvb2wqIG9rKQogewotICAgIHJldHVybiBjaGFy
YWN0ZXJzVG9JbnQobV9kYXRhLCBtX2xlbmd0aCwgb2spOworICAgIHJldHVybiBjaGFyYWN0ZXJz
VG9JbnQoY2hhcmFjdGVyczE2KCksIG1fbGVuZ3RoLCBvayk7CiB9CiAKIHVuc2lnbmVkIFN0cmlu
Z0ltcGw6OnRvVUludChib29sKiBvaykKIHsKLSAgICByZXR1cm4gY2hhcmFjdGVyc1RvVUludCht
X2RhdGEsIG1fbGVuZ3RoLCBvayk7CisgICAgcmV0dXJuIGNoYXJhY3RlcnNUb1VJbnQoY2hhcmFj
dGVyczE2KCksIG1fbGVuZ3RoLCBvayk7CiB9CiAKIGludDY0X3QgU3RyaW5nSW1wbDo6dG9JbnQ2
NChib29sKiBvaykKIHsKLSAgICByZXR1cm4gY2hhcmFjdGVyc1RvSW50NjQobV9kYXRhLCBtX2xl
bmd0aCwgb2spOworICAgIHJldHVybiBjaGFyYWN0ZXJzVG9JbnQ2NChjaGFyYWN0ZXJzMTYoKSwg
bV9sZW5ndGgsIG9rKTsKIH0KIAogdWludDY0X3QgU3RyaW5nSW1wbDo6dG9VSW50NjQoYm9vbCog
b2spCiB7Ci0gICAgcmV0dXJuIGNoYXJhY3RlcnNUb1VJbnQ2NChtX2RhdGEsIG1fbGVuZ3RoLCBv
ayk7CisgICAgcmV0dXJuIGNoYXJhY3RlcnNUb1VJbnQ2NChjaGFyYWN0ZXJzMTYoKSwgbV9sZW5n
dGgsIG9rKTsKIH0KIAogaW50cHRyX3QgU3RyaW5nSW1wbDo6dG9JbnRQdHIoYm9vbCogb2spCiB7
Ci0gICAgcmV0dXJuIGNoYXJhY3RlcnNUb0ludFB0cihtX2RhdGEsIG1fbGVuZ3RoLCBvayk7Cisg
ICAgcmV0dXJuIGNoYXJhY3RlcnNUb0ludFB0cihjaGFyYWN0ZXJzMTYoKSwgbV9sZW5ndGgsIG9r
KTsKKwogfQogCiBkb3VibGUgU3RyaW5nSW1wbDo6dG9Eb3VibGUoYm9vbCogb2ssIGJvb2wqIGRp
ZFJlYWROdW1iZXIpCiB7Ci0gICAgcmV0dXJuIGNoYXJhY3RlcnNUb0RvdWJsZShtX2RhdGEsIG1f
bGVuZ3RoLCBvaywgZGlkUmVhZE51bWJlcik7CisgICAgcmV0dXJuIGNoYXJhY3RlcnNUb0RvdWJs
ZShjaGFyYWN0ZXJzMTYoKSwgbV9sZW5ndGgsIG9rLCBkaWRSZWFkTnVtYmVyKTsKIH0KIAogZmxv
YXQgU3RyaW5nSW1wbDo6dG9GbG9hdChib29sKiBvaywgYm9vbCogZGlkUmVhZE51bWJlcikKIHsK
LSAgICByZXR1cm4gY2hhcmFjdGVyc1RvRmxvYXQobV9kYXRhLCBtX2xlbmd0aCwgb2ssIGRpZFJl
YWROdW1iZXIpOworICAgIHJldHVybiBjaGFyYWN0ZXJzVG9GbG9hdChjaGFyYWN0ZXJzMTYoKSwg
bV9sZW5ndGgsIG9rLCBkaWRSZWFkTnVtYmVyKTsKIH0KIAogc3RhdGljIGJvb2wgZXF1YWwoY29u
c3QgVUNoYXIqIGEsIGNvbnN0IGNoYXIqIGIsIGludCBsZW5ndGgpCkBAIC01NjEsMTIgKzcwMCwx
MiBAQCBpbnQgY29kZVBvaW50Q29tcGFyZShjb25zdCBTdHJpbmdJbXBsKiBzCiAKIHNpemVfdCBT
dHJpbmdJbXBsOjpmaW5kKFVDaGFyIGMsIHVuc2lnbmVkIHN0YXJ0KQogewotICAgIHJldHVybiBX
VEY6OmZpbmQobV9kYXRhLCBtX2xlbmd0aCwgYywgc3RhcnQpOworICAgIHJldHVybiBXVEY6OmZp
bmQoY2hhcmFjdGVyczE2KCksIG1fbGVuZ3RoLCBjLCBzdGFydCk7CiB9CiAKIHNpemVfdCBTdHJp
bmdJbXBsOjpmaW5kKENoYXJhY3Rlck1hdGNoRnVuY3Rpb25QdHIgbWF0Y2hGdW5jdGlvbiwgdW5z
aWduZWQgc3RhcnQpCiB7Ci0gICAgcmV0dXJuIFdURjo6ZmluZChtX2RhdGEsIG1fbGVuZ3RoLCBt
YXRjaEZ1bmN0aW9uLCBzdGFydCk7CisgICAgcmV0dXJuIFdURjo6ZmluZChjaGFyYWN0ZXJzMTYo
KSwgbV9sZW5ndGgsIG1hdGNoRnVuY3Rpb24sIHN0YXJ0KTsKIH0KIAogc2l6ZV90IFN0cmluZ0lt
cGw6OmZpbmQoY29uc3QgY2hhciogbWF0Y2hTdHJpbmcsIHVuc2lnbmVkIGluZGV4KQpAQCAtNTgz
LDcgKzcyMiw3IEBAIHNpemVfdCBTdHJpbmdJbXBsOjpmaW5kKGNvbnN0IGNoYXIqIG1hdGMKIAog
ICAgIC8vIE9wdGltaXphdGlvbiAxOiBmYXN0IGNhc2UgZm9yIHN0cmluZ3Mgb2YgbGVuZ3RoIDEu
CiAgICAgaWYgKG1hdGNoTGVuZ3RoID09IDEpCi0gICAgICAgIHJldHVybiBXVEY6OmZpbmQoY2hh
cmFjdGVycygpLCBsZW5ndGgoKSwgKihjb25zdCB1bnNpZ25lZCBjaGFyKiltYXRjaFN0cmluZywg
aW5kZXgpOworICAgICAgICByZXR1cm4gV1RGOjpmaW5kKGNoYXJhY3RlcnMxNigpLCBsZW5ndGgo
KSwgKihjb25zdCB1bnNpZ25lZCBjaGFyKiltYXRjaFN0cmluZywgaW5kZXgpOwogCiAgICAgLy8g
Q2hlY2sgaW5kZXggJiBtYXRjaExlbmd0aCBhcmUgaW4gcmFuZ2UuCiAgICAgaWYgKGluZGV4ID4g
bGVuZ3RoKCkpCkBAIC02NjIsNyArODAxLDcgQEAgc2l6ZV90IFN0cmluZ0ltcGw6OmZpbmQoU3Ry
aW5nSW1wbCogbWF0YwogCiAgICAgLy8gT3B0aW1pemF0aW9uIDE6IGZhc3QgY2FzZSBmb3Igc3Ry
aW5ncyBvZiBsZW5ndGggMS4KICAgICBpZiAobWF0Y2hMZW5ndGggPT0gMSkKLSAgICAgICAgcmV0
dXJuIFdURjo6ZmluZChjaGFyYWN0ZXJzKCksIGxlbmd0aCgpLCBtYXRjaFN0cmluZy0+Y2hhcmFj
dGVycygpWzBdLCBpbmRleCk7CisgICAgICAgIHJldHVybiBXVEY6OmZpbmQoY2hhcmFjdGVyczE2
KCksIGxlbmd0aCgpLCBtYXRjaFN0cmluZy0+Y2hhcmFjdGVyczE2KClbMF0sIGluZGV4KTsKIAog
ICAgIC8vIENoZWNrIGluZGV4ICYgbWF0Y2hMZW5ndGggYXJlIGluIHJhbmdlLgogICAgIGlmIChp
bmRleCA+IGxlbmd0aCgpKQpAQCAtNzMwLDcgKzg2OSw3IEBAIHNpemVfdCBTdHJpbmdJbXBsOjpm
aW5kSWdub3JpbmdDYXNlKFN0cmkKIAogc2l6ZV90IFN0cmluZ0ltcGw6OnJldmVyc2VGaW5kKFVD
aGFyIGMsIHVuc2lnbmVkIGluZGV4KQogewotICAgIHJldHVybiBXVEY6OnJldmVyc2VGaW5kKG1f
ZGF0YSwgbV9sZW5ndGgsIGMsIGluZGV4KTsKKyAgICByZXR1cm4gV1RGOjpyZXZlcnNlRmluZChj
aGFyYWN0ZXJzMTYoKSwgbV9sZW5ndGgsIGMsIGluZGV4KTsKIH0KIAogc2l6ZV90IFN0cmluZ0lt
cGw6OnJldmVyc2VGaW5kKFN0cmluZ0ltcGwqIG1hdGNoU3RyaW5nLCB1bnNpZ25lZCBpbmRleCkK
QEAgLTc0NCw3ICs4ODMsNyBAQCBzaXplX3QgU3RyaW5nSW1wbDo6cmV2ZXJzZUZpbmQoU3RyaW5n
SW1wCiAKICAgICAvLyBPcHRpbWl6YXRpb24gMTogZmFzdCBjYXNlIGZvciBzdHJpbmdzIG9mIGxl
bmd0aCAxLgogICAgIGlmIChtYXRjaExlbmd0aCA9PSAxKQotICAgICAgICByZXR1cm4gV1RGOjpy
ZXZlcnNlRmluZChjaGFyYWN0ZXJzKCksIGxlbmd0aCgpLCBtYXRjaFN0cmluZy0+Y2hhcmFjdGVy
cygpWzBdLCBpbmRleCk7CisgICAgICAgIHJldHVybiBXVEY6OnJldmVyc2VGaW5kKGNoYXJhY3Rl
cnMxNigpLCBsZW5ndGgoKSwgbWF0Y2hTdHJpbmctPmNoYXJhY3RlcnMoKVswXSwgaW5kZXgpOwog
CiAgICAgLy8gQ2hlY2sgaW5kZXggJiBtYXRjaExlbmd0aCBhcmUgaW4gcmFuZ2UuCiAgICAgaWYg
KG1hdGNoTGVuZ3RoID4gbGVuZ3RoKCkpCkBAIC04MTcsMTcgKzk1Niw1MyBAQCBQYXNzUmVmUHRy
PFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnJlcGxhCiAgICAgaWYgKG9sZEMgPT0gbmV3QykKICAg
ICAgICAgcmV0dXJuIHRoaXM7CiAgICAgdW5zaWduZWQgaTsKLSAgICBmb3IgKGkgPSAwOyBpICE9
IG1fbGVuZ3RoOyArK2kpCi0gICAgICAgIGlmIChtX2RhdGFbaV0gPT0gb2xkQykKKyAgICBmb3Ig
KGkgPSAwOyBpICE9IG1fbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgVUNoYXIgYyA9IGlzOEJpdCgp
ID8gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4obV9kYXRhOFtpXSkgOiBtX2RhdGExNltpXTsK
KyAgICAgICAgaWYgKGMgPT0gb2xkQykKICAgICAgICAgICAgIGJyZWFrOworICAgIH0KICAgICBp
ZiAoaSA9PSBtX2xlbmd0aCkKICAgICAgICAgcmV0dXJuIHRoaXM7CiAKKyAgICBpZiAoaXM4Qml0
KCkpIHsKKyAgICAgICAgaWYgKG9sZEMgPiAweGZmKSAvLyBMb29raW5nIGZvciBhIDE2IGJpdCBj
aGFyIGluIGFuIDggYml0IHN0cmluZworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisKKyAgICAg
ICAgaWYgKG5ld0MgPD0gMHhmZikgeworICAgICAgICAgICAgY2hhciogZGF0YTsKKyAgICAgICAg
ICAgIGNoYXIgb2xkQ2hhciA9IHN0YXRpY19jYXN0PGNoYXI+KG9sZEMpOworICAgICAgICAgICAg
Y2hhciBuZXdDaGFyID0gc3RhdGljX2Nhc3Q8Y2hhcj4obmV3Qyk7CisKKyAgICAgICAgICAgIFJl
ZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChtX2xlbmd0aCwg
ZGF0YSk7CisKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgIT0gbV9sZW5ndGg7ICsraSkgewor
ICAgICAgICAgICAgICAgIGNoYXIgY2ggPSBtX2RhdGE4W2ldOworICAgICAgICAgICAgICAgIGlm
IChjaCA9PSBvbGRDaGFyKQorICAgICAgICAgICAgICAgICAgICBjaCA9IG5ld0NoYXI7CisgICAg
ICAgICAgICAgICAgZGF0YVtpXSA9IGNoOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0
dXJuIG5ld0ltcGwucmVsZWFzZSgpOworICAgICAgICB9CisKKyAgICAgICAgLy8gUG9zc2libHkg
bmVlZCB0byB1cCBjb252ZXJ0IGZyb20gOCB0byAxNiBiaXQKKyAgICAgICAgVUNoYXIqIGRhdGE7
CisgICAgICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXpl
ZChtX2xlbmd0aCwgZGF0YSk7CisKKyAgICAgICAgZm9yIChpID0gMDsgaSAhPSBtX2xlbmd0aDsg
KytpKSB7CisgICAgICAgICAgICBVQ2hhciBjaCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+
KG1fZGF0YThbaV0pOworICAgICAgICAgICAgaWYgKGNoID09IG9sZEMpCisgICAgICAgICAgICAg
ICAgY2ggPSBuZXdDOworICAgICAgICAgICAgZGF0YVtpXSA9IGNoOworICAgICAgICB9CisKKyAg
ICAgICAgcmV0dXJuIG5ld0ltcGwucmVsZWFzZSgpOworICAgIH0KKwogICAgIFVDaGFyKiBkYXRh
OwogICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZCht
X2xlbmd0aCwgZGF0YSk7CiAKICAgICBmb3IgKGkgPSAwOyBpICE9IG1fbGVuZ3RoOyArK2kpIHsK
LSAgICAgICAgVUNoYXIgY2ggPSBtX2RhdGFbaV07CisgICAgICAgIFVDaGFyIGNoID0gbV9kYXRh
MTZbaV07CiAgICAgICAgIGlmIChjaCA9PSBvbGRDKQogICAgICAgICAgICAgY2ggPSBuZXdDOwog
ICAgICAgICBkYXRhW2ldID0gY2g7CkBAIC04NDIsMTggKzEwMTcsNDMgQEAgUGFzc1JlZlB0cjxT
dHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpyZXBsYQogICAgIHVuc2lnbmVkIGxlbmd0aFRvSW5zZXJ0
ID0gc3RyID8gc3RyLT5sZW5ndGgoKSA6IDA7CiAgICAgaWYgKCFsZW5ndGhUb1JlcGxhY2UgJiYg
IWxlbmd0aFRvSW5zZXJ0KQogICAgICAgICByZXR1cm4gdGhpczsKLSAgICBVQ2hhciogZGF0YTsK
IAogICAgIGlmICgobGVuZ3RoKCkgLSBsZW5ndGhUb1JlcGxhY2UpID49IChudW1lcmljX2xpbWl0
czx1bnNpZ25lZD46Om1heCgpIC0gbGVuZ3RoVG9JbnNlcnQpKQogICAgICAgICBDUkFTSCgpOwog
CisgICAgaWYgKGlzOEJpdCgpICYmICghc3RyIHx8IHN0ci0+aXM4Qml0KCkpKSB7CisgICAgICAg
IGNoYXIqIGRhdGE7CisgICAgICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0KKyAgICAg
ICAgY3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgoKSAtIGxlbmd0aFRvUmVwbGFjZSArIGxlbmd0
aFRvSW5zZXJ0LCBkYXRhKTsKKyAgICAgICAgbWVtY3B5KGRhdGEsIG1fZGF0YTgsIHBvc2l0aW9u
ICogc2l6ZW9mKGNoYXIpKTsKKyAgICAgICAgaWYgKHN0cikKKyAgICAgICAgICAgIG1lbWNweShk
YXRhICsgcG9zaXRpb24sIHN0ci0+bV9kYXRhOCwgbGVuZ3RoVG9JbnNlcnQgKiBzaXplb2YoY2hh
cikpOworICAgICAgICBtZW1jcHkoZGF0YSArIHBvc2l0aW9uICsgbGVuZ3RoVG9JbnNlcnQsIG1f
ZGF0YTggKyBwb3NpdGlvbiArIGxlbmd0aFRvUmVwbGFjZSwKKyAgICAgICAgICAgICAgIChsZW5n
dGgoKSAtIHBvc2l0aW9uIC0gbGVuZ3RoVG9SZXBsYWNlKSAqIHNpemVvZihjaGFyKSk7CisgICAg
ICAgIHJldHVybiBuZXdJbXBsLnJlbGVhc2UoKTsKKyAgICB9CisgICAgVUNoYXIqIGRhdGE7CiAg
ICAgUmVmUHRyPFN0cmluZ0ltcGw+IG5ld0ltcGwgPQogICAgICAgICBjcmVhdGVVbmluaXRpYWxp
emVkKGxlbmd0aCgpIC0gbGVuZ3RoVG9SZXBsYWNlICsgbGVuZ3RoVG9JbnNlcnQsIGRhdGEpOwot
ICAgIG1lbWNweShkYXRhLCBjaGFyYWN0ZXJzKCksIHBvc2l0aW9uICogc2l6ZW9mKFVDaGFyKSk7
Ci0gICAgaWYgKHN0cikKLSAgICAgICAgbWVtY3B5KGRhdGEgKyBwb3NpdGlvbiwgc3RyLT5jaGFy
YWN0ZXJzKCksIGxlbmd0aFRvSW5zZXJ0ICogc2l6ZW9mKFVDaGFyKSk7Ci0gICAgbWVtY3B5KGRh
dGEgKyBwb3NpdGlvbiArIGxlbmd0aFRvSW5zZXJ0LCBjaGFyYWN0ZXJzKCkgKyBwb3NpdGlvbiAr
IGxlbmd0aFRvUmVwbGFjZSwKLSAgICAgICAgKGxlbmd0aCgpIC0gcG9zaXRpb24gLSBsZW5ndGhU
b1JlcGxhY2UpICogc2l6ZW9mKFVDaGFyKSk7CisgICAgaWYgKGlzOEJpdCgpKQorICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcG9zaXRpb247IGkrKykKKyAgICAgICAgICAgIGRhdGFb
aV0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihtX2RhdGE4W2ldKTsKKyAgICBlbHNlCisg
ICAgICAgIG1lbWNweShkYXRhLCBtX2RhdGExNiwgcG9zaXRpb24gKiBzaXplb2YoVUNoYXIpKTsK
KyAgICBpZiAoc3RyKSB7CisgICAgICAgIGlmIChzdHItPmlzOEJpdCgpKQorICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aFRvSW5zZXJ0OyBpKyspCisgICAgICAgICAg
ICAgICAgZGF0YVtpICsgcG9zaXRpb25dID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oc3Ry
LT5tX2RhdGE4W2ldKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbWVtY3B5KGRhdGEgKyBw
b3NpdGlvbiwgc3RyLT5tX2RhdGExNiwgbGVuZ3RoVG9JbnNlcnQgKiBzaXplb2YoVUNoYXIpKTsK
KyAgICB9CisgICAgaWYgKGlzOEJpdCgpKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsZW5ndGgoKSAtIHBvc2l0aW9uIC0gbGVuZ3RoVG9SZXBsYWNlOyBpKyspCisgICAgICAg
ICAgICBkYXRhW2kgKyBwb3NpdGlvbiArIGxlbmd0aFRvSW5zZXJ0XSA9IG1fZGF0YThbaSArIHBv
c2l0aW9uICsgbGVuZ3RoVG9SZXBsYWNlXTsKKyAgICB9IGVsc2UgeworICAgICAgICBtZW1jcHko
ZGF0YSArIHBvc2l0aW9uICsgbGVuZ3RoVG9JbnNlcnQsIGNoYXJhY3RlcnMoKSArIHBvc2l0aW9u
ICsgbGVuZ3RoVG9SZXBsYWNlLAorICAgICAgICAgICAgKGxlbmd0aCgpIC0gcG9zaXRpb24gLSBs
ZW5ndGhUb1JlcGxhY2UpICogc2l6ZW9mKFVDaGFyKSk7CisgICAgfQogICAgIHJldHVybiBuZXdJ
bXBsLnJlbGVhc2UoKTsKIH0KIApAQCAtODg2LDI2ICsxMDg2LDY0IEBAIFBhc3NSZWZQdHI8U3Ry
aW5nSW1wbD4gU3RyaW5nSW1wbDo6cmVwbGEKIAogICAgIG5ld1NpemUgKz0gcmVwbGFjZVNpemU7
CiAKLSAgICBVQ2hhciogZGF0YTsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gbmV3SW1wbCA9IGNy
ZWF0ZVVuaW5pdGlhbGl6ZWQobmV3U2l6ZSwgZGF0YSk7Ci0KICAgICAvLyBDb25zdHJ1Y3QgdGhl
IG5ldyBkYXRhCiAgICAgc2l6ZV90IHNyY1NlZ21lbnRFbmQ7CiAgICAgdW5zaWduZWQgc3JjU2Vn
bWVudExlbmd0aDsKICAgICBzcmNTZWdtZW50U3RhcnQgPSAwOwogICAgIHVuc2lnbmVkIGRzdE9m
ZnNldCA9IDA7CiAgICAgCisgICAgLy8gVGhlcmUgYXJlIDQgY2FzZXM6CisgICAgLy8gMS4gdGhp
cyBhbmQgcmVwbGFjZW1lbnQgYXJlIGJvdGggMTYgYml0CisgICAgLy8gMi4gdGhpcyBhbmQgcmVw
bGFjZW1lbnQgYXJlIGJvdGggOCBiaXQKKyAgICAvLyAzLiB0aGlzIGlzIDggYml0IGFuZCByZXBs
YWNlbWVudCBpcyAxNiBiaXQKKyAgICAvLyA0LiB0aGlzIGlzIDE2IGJpdCBhbmQgcmVwbGFjZW1l
bnQgaXMgOCBiaXQKKyAgICAvLyBQbHVzIHRoZXJlIGlzIHZlcnkgc2ltaWxhciBjb2RlIGluIHRo
ZSBwYXR0ZXJuIHJlcGxhY2VtZW50IGZ1bmN0aW9uIGJlbG93LgorICAgIGlmIChpczhCaXQoKSAm
JiByZXBsYWNlbWVudC0+aXM4Qml0KCkpIHsKKyAgICAgICAgY2hhciogZGF0YTsKKyAgICAgICAg
UmVmUHRyPFN0cmluZ0ltcGw+IG5ld0ltcGwgPSBjcmVhdGVVbmluaXRpYWxpemVkKG5ld1NpemUs
IGRhdGEpOworCisgICAgICAgIHdoaWxlICgoc3JjU2VnbWVudEVuZCA9IGZpbmQocGF0dGVybiwg
c3JjU2VnbWVudFN0YXJ0KSkgIT0gbm90Rm91bmQpIHsKKyAgICAgICAgICAgIHNyY1NlZ21lbnRM
ZW5ndGggPSBzcmNTZWdtZW50RW5kIC0gc3JjU2VnbWVudFN0YXJ0OworICAgICAgICAgICAgbWVt
Y3B5KGRhdGEgKyBkc3RPZmZzZXQsIG1fZGF0YTggKyBzcmNTZWdtZW50U3RhcnQsIHNyY1NlZ21l
bnRMZW5ndGggKiBzaXplb2YoY2hhcikpOworICAgICAgICAgICAgZHN0T2Zmc2V0ICs9IHNyY1Nl
Z21lbnRMZW5ndGg7CisgICAgICAgICAgICBtZW1jcHkoZGF0YSArIGRzdE9mZnNldCwgcmVwbGFj
ZW1lbnQtPm1fZGF0YTgsIHJlcFN0ckxlbmd0aCAqIHNpemVvZihjaGFyKSk7CisgICAgICAgICAg
ICBkc3RPZmZzZXQgKz0gcmVwU3RyTGVuZ3RoOworICAgICAgICAgICAgc3JjU2VnbWVudFN0YXJ0
ID0gc3JjU2VnbWVudEVuZCArIDE7CisgICAgICAgIH0KKworICAgICAgICBzcmNTZWdtZW50TGVu
Z3RoID0gbV9sZW5ndGggLSBzcmNTZWdtZW50U3RhcnQ7CisgICAgICAgIG1lbWNweShkYXRhICsg
ZHN0T2Zmc2V0LCBtX2RhdGE4ICsgc3JjU2VnbWVudFN0YXJ0LCBzcmNTZWdtZW50TGVuZ3RoICog
c2l6ZW9mKGNoYXIpKTsKKworICAgICAgICBBU1NFUlQoZHN0T2Zmc2V0ICsgc3JjU2VnbWVudExl
bmd0aCA9PSBuZXdJbXBsLT5sZW5ndGgoKSk7CisKKyAgICAgICAgcmV0dXJuIG5ld0ltcGwucmVs
ZWFzZSgpOworICAgIH0KKyAgICBVQ2hhciogZGF0YTsKKyAgICBSZWZQdHI8U3RyaW5nSW1wbD4g
bmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQobmV3U2l6ZSwgZGF0YSk7CisKICAgICB3aGls
ZSAoKHNyY1NlZ21lbnRFbmQgPSBmaW5kKHBhdHRlcm4sIHNyY1NlZ21lbnRTdGFydCkpICE9IG5v
dEZvdW5kKSB7CiAgICAgICAgIHNyY1NlZ21lbnRMZW5ndGggPSBzcmNTZWdtZW50RW5kIC0gc3Jj
U2VnbWVudFN0YXJ0OwotICAgICAgICBtZW1jcHkoZGF0YSArIGRzdE9mZnNldCwgbV9kYXRhICsg
c3JjU2VnbWVudFN0YXJ0LCBzcmNTZWdtZW50TGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CisgICAg
ICAgIGlmIChpczhCaXQoKSkKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBz
cmNTZWdtZW50TGVuZ3RoOyBpKyspCisgICAgICAgICAgICAgICAgZGF0YVtpICsgZHN0T2Zmc2V0
XSA9IG1fZGF0YThbaSArIHNyY1NlZ21lbnRTdGFydF07CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIG1lbWNweShkYXRhICsgZHN0T2Zmc2V0LCBtX2RhdGExNiArIHNyY1NlZ21lbnRTdGFydCwg
c3JjU2VnbWVudExlbmd0aCAqIHNpemVvZihVQ2hhcikpOwogICAgICAgICBkc3RPZmZzZXQgKz0g
c3JjU2VnbWVudExlbmd0aDsKLSAgICAgICAgbWVtY3B5KGRhdGEgKyBkc3RPZmZzZXQsIHJlcGxh
Y2VtZW50LT5tX2RhdGEsIHJlcFN0ckxlbmd0aCAqIHNpemVvZihVQ2hhcikpOworICAgICAgICBp
ZiAocmVwbGFjZW1lbnQtPmlzOEJpdCgpKQorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHJlcFN0ckxlbmd0aDsgaSsrKQorICAgICAgICAgICAgICAgIGRhdGFbaSArIGRzdE9m
ZnNldF0gPSByZXBsYWNlbWVudC0+bV9kYXRhOFtpXTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgbWVtY3B5KGRhdGEgKyBkc3RPZmZzZXQsIHJlcGxhY2VtZW50LT5tX2RhdGExNiwgcmVwU3Ry
TGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CiAgICAgICAgIGRzdE9mZnNldCArPSByZXBTdHJMZW5n
dGg7CiAgICAgICAgIHNyY1NlZ21lbnRTdGFydCA9IHNyY1NlZ21lbnRFbmQgKyAxOwogICAgIH0K
IAogICAgIHNyY1NlZ21lbnRMZW5ndGggPSBtX2xlbmd0aCAtIHNyY1NlZ21lbnRTdGFydDsKLSAg
ICBtZW1jcHkoZGF0YSArIGRzdE9mZnNldCwgbV9kYXRhICsgc3JjU2VnbWVudFN0YXJ0LCBzcmNT
ZWdtZW50TGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CisgICAgaWYgKGlzOEJpdCgpKQorICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3JjU2VnbWVudExlbmd0aDsgaSsrKQorICAgICAg
ICAgICAgZGF0YVtpICsgZHN0T2Zmc2V0XSA9IG1fZGF0YThbaSArIHNyY1NlZ21lbnRTdGFydF07
CisgICAgZWxzZQorICAgICAgICBtZW1jcHkoZGF0YSArIGRzdE9mZnNldCwgbV9kYXRhMTYgKyBz
cmNTZWdtZW50U3RhcnQsIHNyY1NlZ21lbnRMZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKIAogICAg
IEFTU0VSVChkc3RPZmZzZXQgKyBzcmNTZWdtZW50TGVuZ3RoID09IG5ld0ltcGwtPmxlbmd0aCgp
KTsKIApAQCAtOTQ0LDggKzExODIsNiBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0lt
cGw6OnJlcGxhCiAKICAgICBuZXdTaXplICs9IG1hdGNoQ291bnQgKiByZXBTdHJMZW5ndGg7CiAK
LSAgICBVQ2hhciogZGF0YTsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gbmV3SW1wbCA9IGNyZWF0
ZVVuaW5pdGlhbGl6ZWQobmV3U2l6ZSwgZGF0YSk7CiAgICAgCiAgICAgLy8gQ29uc3RydWN0IHRo
ZSBuZXcgZGF0YQogICAgIHNpemVfdCBzcmNTZWdtZW50RW5kOwpAQCAtOTUzLDE3ICsxMTg5LDU2
IEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6cmVwbGEKICAgICBzcmNTZWdt
ZW50U3RhcnQgPSAwOwogICAgIHVuc2lnbmVkIGRzdE9mZnNldCA9IDA7CiAgICAgCisgICAgLy8g
VGhlcmUgYXJlIDQgY2FzZXM6CisgICAgLy8gMS4gdGhpcyBhbmQgcmVwbGFjZW1lbnQgYXJlIGJv
dGggMTYgYml0CisgICAgLy8gMi4gdGhpcyBhbmQgcmVwbGFjZW1lbnQgYXJlIGJvdGggOCBiaXQK
KyAgICAvLyAzLiB0aGlzIGlzIDggYml0IGFuZCByZXBsYWNlbWVudCBpcyAxNiBiaXQKKyAgICAv
LyA0LiB0aGlzIGlzIDE2IGJpdCBhbmQgcmVwbGFjZW1lbnQgaXMgOCBiaXQKKyAgICAvLyBQbHVz
IHRoZXJlIGlzIHZlcnkgc2ltaWxhciBjb2RlIGluIHRoZSBzaW5nbGUtY2hhciByZXBsYWNlbWVu
dCBmdW5jdGlvbiBhYm92ZS4KKyAgICBpZiAoaXM4Qml0KCkgJiYgcmVwbGFjZW1lbnQtPmlzOEJp
dCgpKSB7CisgICAgICAgIGNoYXIqIGRhdGE7CisgICAgICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBu
ZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChuZXdTaXplLCBkYXRhKTsKKyAgICAgICAgd2hp
bGUgKChzcmNTZWdtZW50RW5kID0gZmluZChwYXR0ZXJuLCBzcmNTZWdtZW50U3RhcnQpKSAhPSBu
b3RGb3VuZCkgeworICAgICAgICAgICAgc3JjU2VnbWVudExlbmd0aCA9IHNyY1NlZ21lbnRFbmQg
LSBzcmNTZWdtZW50U3RhcnQ7CisgICAgICAgICAgICBtZW1jcHkoZGF0YSArIGRzdE9mZnNldCwg
bV9kYXRhOCArIHNyY1NlZ21lbnRTdGFydCwgc3JjU2VnbWVudExlbmd0aCAqIHNpemVvZihjaGFy
KSk7CisgICAgICAgICAgICBkc3RPZmZzZXQgKz0gc3JjU2VnbWVudExlbmd0aDsKKyAgICAgICAg
ICAgIG1lbWNweShkYXRhICsgZHN0T2Zmc2V0LCByZXBsYWNlbWVudC0+bV9kYXRhOCwgcmVwU3Ry
TGVuZ3RoICogc2l6ZW9mKGNoYXIpKTsKKyAgICAgICAgICAgIGRzdE9mZnNldCArPSByZXBTdHJM
ZW5ndGg7CisgICAgICAgICAgICBzcmNTZWdtZW50U3RhcnQgPSBzcmNTZWdtZW50RW5kICsgcGF0
dGVybkxlbmd0aDsKKyAgICAgICAgfQorCisgICAgICAgIHNyY1NlZ21lbnRMZW5ndGggPSBtX2xl
bmd0aCAtIHNyY1NlZ21lbnRTdGFydDsKKyAgICAgICAgbWVtY3B5KGRhdGEgKyBkc3RPZmZzZXQs
IG1fZGF0YTggKyBzcmNTZWdtZW50U3RhcnQsIHNyY1NlZ21lbnRMZW5ndGggKiBzaXplb2YoY2hh
cikpOworCisgICAgICAgIEFTU0VSVChkc3RPZmZzZXQgKyBzcmNTZWdtZW50TGVuZ3RoID09IG5l
d0ltcGwtPmxlbmd0aCgpKTsKKworICAgICAgICByZXR1cm4gbmV3SW1wbC5yZWxlYXNlKCk7Cisg
ICAgfQorICAgIFVDaGFyKiBkYXRhOworICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0g
Y3JlYXRlVW5pbml0aWFsaXplZChuZXdTaXplLCBkYXRhKTsKICAgICB3aGlsZSAoKHNyY1NlZ21l
bnRFbmQgPSBmaW5kKHBhdHRlcm4sIHNyY1NlZ21lbnRTdGFydCkpICE9IG5vdEZvdW5kKSB7CiAg
ICAgICAgIHNyY1NlZ21lbnRMZW5ndGggPSBzcmNTZWdtZW50RW5kIC0gc3JjU2VnbWVudFN0YXJ0
OwotICAgICAgICBtZW1jcHkoZGF0YSArIGRzdE9mZnNldCwgbV9kYXRhICsgc3JjU2VnbWVudFN0
YXJ0LCBzcmNTZWdtZW50TGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CisgICAgICAgIGlmIChpczhC
aXQoKSkKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzcmNTZWdtZW50TGVu
Z3RoOyBpKyspCisgICAgICAgICAgICAgICAgZGF0YVtpICsgZHN0T2Zmc2V0XSA9IG1fZGF0YThb
aSArIHNyY1NlZ21lbnRTdGFydF07CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1lbWNweShk
YXRhICsgZHN0T2Zmc2V0LCBtX2RhdGExNiArIHNyY1NlZ21lbnRTdGFydCwgc3JjU2VnbWVudExl
bmd0aCAqIHNpemVvZihVQ2hhcikpOwogICAgICAgICBkc3RPZmZzZXQgKz0gc3JjU2VnbWVudExl
bmd0aDsKLSAgICAgICAgbWVtY3B5KGRhdGEgKyBkc3RPZmZzZXQsIHJlcGxhY2VtZW50LT5tX2Rh
dGEsIHJlcFN0ckxlbmd0aCAqIHNpemVvZihVQ2hhcikpOworICAgICAgICBpZiAocmVwbGFjZW1l
bnQtPmlzOEJpdCgpKQorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlcFN0
ckxlbmd0aDsgaSsrKQorICAgICAgICAgICAgICAgIGRhdGFbaSArIGRzdE9mZnNldF0gPSByZXBs
YWNlbWVudC0+bV9kYXRhOFtpXTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbWVtY3B5KGRh
dGEgKyBkc3RPZmZzZXQsIHJlcGxhY2VtZW50LT5tX2RhdGExNiwgcmVwU3RyTGVuZ3RoICogc2l6
ZW9mKFVDaGFyKSk7CiAgICAgICAgIGRzdE9mZnNldCArPSByZXBTdHJMZW5ndGg7CiAgICAgICAg
IHNyY1NlZ21lbnRTdGFydCA9IHNyY1NlZ21lbnRFbmQgKyBwYXR0ZXJuTGVuZ3RoOwogICAgIH0K
IAogICAgIHNyY1NlZ21lbnRMZW5ndGggPSBtX2xlbmd0aCAtIHNyY1NlZ21lbnRTdGFydDsKLSAg
ICBtZW1jcHkoZGF0YSArIGRzdE9mZnNldCwgbV9kYXRhICsgc3JjU2VnbWVudFN0YXJ0LCBzcmNT
ZWdtZW50TGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CisgICAgaWYgKGlzOEJpdCgpKQorICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3JjU2VnbWVudExlbmd0aDsgaSsrKQorICAgICAg
ICAgICAgZGF0YVtpICsgZHN0T2Zmc2V0XSA9IG1fZGF0YThbaSArIHNyY1NlZ21lbnRTdGFydF07
CisgICAgZWxzZQorICAgICAgICBtZW1jcHkoZGF0YSArIGRzdE9mZnNldCwgbV9kYXRhMTYgKyBz
cmNTZWdtZW50U3RhcnQsIHNyY1NlZ21lbnRMZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKIAogICAg
IEFTU0VSVChkc3RPZmZzZXQgKyBzcmNTZWdtZW50TGVuZ3RoID09IG5ld0ltcGwtPmxlbmd0aCgp
KTsKIApAQCAtOTc1LDYgKzEyNTAsNDUgQEAgYm9vbCBlcXVhbChjb25zdCBTdHJpbmdJbXBsKiBh
LCBjb25zdCBTdAogICAgIHJldHVybiBTdHJpbmdIYXNoOjplcXVhbChhLCBiKTsKIH0KIAorYm9v
bCBlcXVhbChjb25zdCBTdHJpbmdJbXBsKiBhLCBjb25zdCBjaGFyKiBiLCB1bnNpZ25lZCBsZW5n
dGgpCit7CisgICAgaWYgKCFhKQorICAgICAgICByZXR1cm4gIWI7CisgICAgaWYgKCFiKQorICAg
ICAgICByZXR1cm4gIWE7CisKKyAgICBpZiAobGVuZ3RoICE9IGEtPmxlbmd0aCgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoYS0+aXM4Qml0KCkpIHsKKyAgICAgICAgY29uc3Qg
Y2hhciogYUNoYXJzID0gYS0+Y2hhcmFjdGVyczgoKTsKKworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpICE9IGxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGJj
ID0gYltpXTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYWMgPSBhQ2hhcnNbaV07CisgICAg
ICAgICAgICBpZiAoIWJjKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIGlmIChhYyAhPSBiYykKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBjb25zdCBVQ2hhciogYUNo
YXJzID0gYS0+Y2hhcmFjdGVyczE2KCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpICE9
IGxlbmd0aDsgKytpKSB7CisgICAgICAgIFVDaGFyIGJjID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQg
Y2hhcj4oYltpXSk7CisgICAgICAgIFVDaGFyIGFjID0gYUNoYXJzW2ldOworICAgICAgICBpZiAo
IWJjKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoYWMgIT0gYmMpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisK
IGJvb2wgZXF1YWwoY29uc3QgU3RyaW5nSW1wbCogYSwgY29uc3QgY2hhciogYikKIHsKICAgICBp
ZiAoIWEpCkBAIC05ODMsMTIgKzEyOTcsMjcgQEAgYm9vbCBlcXVhbChjb25zdCBTdHJpbmdJbXBs
KiBhLCBjb25zdCBjaAogICAgICAgICByZXR1cm4gIWE7CiAKICAgICB1bnNpZ25lZCBsZW5ndGgg
PSBhLT5sZW5ndGgoKTsKLSAgICBjb25zdCBVQ2hhciogYXMgPSBhLT5jaGFyYWN0ZXJzKCk7CisK
KyAgICBpZiAoYS0+aXM4Qml0KCkpIHsKKyAgICAgICAgY29uc3QgY2hhciogYVB0ciA9IGEtPmNo
YXJhY3RlcnM4KCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgIT0gbGVuZ3RoOyAr
K2kpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYmMgPSBiW2ldOworICAgICAgICAgICAg
dW5zaWduZWQgY2hhciBhYyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGFQdHJbaV0pOwor
ICAgICAgICAgICAgaWYgKCFiYykKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICBpZiAoYWMgIT0gYmMpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisKKyAgICAgICAgcmV0dXJuICFiW2xlbmd0aF07CisgICAgfQorCisgICAgY29uc3Qg
VUNoYXIqIGFQdHIgPSBhLT5jaGFyYWN0ZXJzMTYoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpICE9IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIHVuc2lnbmVkIGNoYXIgYmMgPSBiW2ldOwog
ICAgICAgICBpZiAoIWJjKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAo
YXNbaV0gIT0gYmMpCisgICAgICAgIGlmIChhUHRyW2ldICE9IGJjKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KIApAQCAtMTAxMywyMCArMTM0MiwyOCBAQCBib29sIGVxdWFsKGNv
bnN0IFN0cmluZ0ltcGwqIGEsIGNvbnN0IFVDCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgcmV0dXJuIHRydWU7CiAjZWxzZQorICAgIGlmIChhLT5pczhCaXQoKSkgeworICAgICAgICBj
b25zdCBjaGFyKiBhcyA9IGEtPmNoYXJhY3RlcnM4KCk7CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgIT0gbGVuZ3RoOyArK2kpCisgICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcj4oYXNbaV0pICE9IGJbaV0pCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKICAgICAvKiBEbyBpdCA0LWJ5dGVzLWF0
LWEtdGltZSBvbiBhcmNoaXRlY3R1cmVzIHdoZXJlIGl0J3Mgc2FmZSAqLwotICAgIAotICAgIGNv
bnN0IHVpbnQzMl90KiBhQ2hhcmFjdGVycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMy
X3QqPihhLT5jaGFyYWN0ZXJzKCkpOworCisgICAgY29uc3QgdWludDMyX3QqIGFDaGFyYWN0ZXJz
ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KGEtPmNoYXJhY3RlcnMxNigpKTsK
ICAgICBjb25zdCB1aW50MzJfdCogYkNoYXJhY3RlcnMgPSByZWludGVycHJldF9jYXN0PGNvbnN0
IHVpbnQzMl90Kj4oYik7Ci0gICAgCisKICAgICB1bnNpZ25lZCBoYWxmTGVuZ3RoID0gbGVuZ3Ro
ID4+IDE7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSAhPSBoYWxmTGVuZ3RoOyArK2kpIHsK
ICAgICAgICAgaWYgKCphQ2hhcmFjdGVycysrICE9ICpiQ2hhcmFjdGVycysrKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKKwogICAgIGlmIChsZW5ndGggJiAxICYmICAq
cmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MTZfdCo+KGFDaGFyYWN0ZXJzKSAhPSAqcmVpbnRl
cnByZXRfY2FzdDxjb25zdCB1aW50MTZfdCo+KGJDaGFyYWN0ZXJzKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIAorCiAgICAgcmV0dXJuIHRydWU7CiAjZW5kaWYKIH0KQEAgLTEwNDQsNyAr
MTM4MSw2IEBAIGJvb2wgZXF1YWxJZ25vcmluZ0Nhc2UoU3RyaW5nSW1wbCogYSwgY28KICAgICAg
ICAgcmV0dXJuICFhOwogCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gYS0+bGVuZ3RoKCk7Ci0gICAg
Y29uc3QgVUNoYXIqIGFzID0gYS0+Y2hhcmFjdGVycygpOwogCiAgICAgLy8gRG8gYSBmYXN0ZXIg
bG9vcCBmb3IgdGhlIGNhc2Ugd2hlcmUgYWxsIHRoZSBjaGFyYWN0ZXJzIGFyZSBBU0NJSS4KICAg
ICBVQ2hhciBvcmVkID0gMDsKQEAgLTEwNTMsMTMgKzEzODksMTQgQEAgYm9vbCBlcXVhbElnbm9y
aW5nQ2FzZShTdHJpbmdJbXBsKiBhLCBjbwogICAgICAgICBjaGFyIGJjID0gYltpXTsKICAgICAg
ICAgaWYgKCFiYykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgVUNoYXIgYWMg
PSBhc1tpXTsKKyAgICAgICAgVUNoYXIgYWMgPSBhLT5pczhCaXQoKSA/IGEtPmNoYXJhY3RlcnM4
KClbaV0gOiBhLT5jaGFyYWN0ZXJzMTYoKVtpXTsKICAgICAgICAgb3JlZCB8PSBhYzsKICAgICAg
ICAgZXF1YWwgPSBlcXVhbCAmJiAodG9BU0NJSUxvd2VyKGFjKSA9PSB0b0FTQ0lJTG93ZXIoYmMp
KTsKICAgICB9CiAKICAgICAvLyBEbyBhIHNsb3dlciBpbXBsZW1lbnRhdGlvbiBmb3IgY2FzZXMg
dGhhdCBpbmNsdWRlIG5vbi1BU0NJSSBjaGFyYWN0ZXJzLgogICAgIGlmIChvcmVkICYgfjB4N0Yp
IHsKKyAgICAgICAgY29uc3QgVUNoYXIqIGFzID0gYS0+Y2hhcmFjdGVyczE2KCk7CiAgICAgICAg
IGVxdWFsID0gdHJ1ZTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSAhPSBsZW5ndGg7
ICsraSkgewogICAgICAgICAgICAgdW5zaWduZWQgY2hhciBiYyA9IGJbaV07CkBAIC0xMDg1LDcg
KzE0MjIsNyBAQCBib29sIGVxdWFsSWdub3JpbmdOdWxsaXR5KFN0cmluZ0ltcGwqIGEsCiBXVEY6
OlVuaWNvZGU6OkRpcmVjdGlvbiBTdHJpbmdJbXBsOjpkZWZhdWx0V3JpdGluZ0RpcmVjdGlvbihi
b29sKiBoYXNTdHJvbmdEaXJlY3Rpb25hbGl0eSkKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9sZW5ndGg7ICsraSkgewotICAgICAgICBXVEY6OlVuaWNvZGU6OkRpcmVjdGlvbiBj
aGFyRGlyZWN0aW9uID0gV1RGOjpVbmljb2RlOjpkaXJlY3Rpb24obV9kYXRhW2ldKTsKKyAgICAg
ICAgV1RGOjpVbmljb2RlOjpEaXJlY3Rpb24gY2hhckRpcmVjdGlvbiA9IFdURjo6VW5pY29kZTo6
ZGlyZWN0aW9uKGlzOEJpdCgpID8gbV9kYXRhOFtpXSA6IG1fZGF0YTE2W2ldKTsKICAgICAgICAg
aWYgKGNoYXJEaXJlY3Rpb24gPT0gV1RGOjpVbmljb2RlOjpMZWZ0VG9SaWdodCkgewogICAgICAg
ICAgICAgaWYgKGhhc1N0cm9uZ0RpcmVjdGlvbmFsaXR5KQogICAgICAgICAgICAgICAgICpoYXNT
dHJvbmdEaXJlY3Rpb25hbGl0eSA9IHRydWU7CkBAIC0xMTA1LDYgKzE0NDIsNyBAQCBXVEY6OlVu
aWNvZGU6OkRpcmVjdGlvbiBTdHJpbmdJbXBsOjpkZWZhCiAvLyBUaGlzIGlzIGEgaG90IGZ1bmN0
aW9uIGJlY2F1c2UgaXQncyB1c2VkIHdoZW4gcGFyc2luZyBIVE1MLgogUGFzc1JlZlB0cjxTdHJp
bmdJbXBsPiBTdHJpbmdJbXBsOjpjcmVhdGVTdHJpcHBpbmdOdWxsQ2hhcmFjdGVyc1Nsb3dDYXNl
KGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCiB7CisgICAgLy8gRklY
TUU6IFNob3VsZCBTdHJpbmdCdWZmZXIgc3VwcG9ydCA4LWJpdCBzdHJpbmdzLCBtYXliZSB0ZW1w
bGF0ZT8KICAgICBTdHJpbmdCdWZmZXIgc3RyaXBwZWRDb3B5KGxlbmd0aCk7CiAgICAgdW5zaWdu
ZWQgc3RyaXBwZWRMZW5ndGggPSAwOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5n
dGg7IGkrKykgewpAQCAtMTExOCw2ICsxNDU2LDcgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBT
dHJpbmdJbXBsOjpjcmVhdAogCiBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmFk
b3B0KFN0cmluZ0J1ZmZlciYgYnVmZmVyKQogeworICAgIC8vIEZJWE1FOiBoYW5kbGUgOC1iaXQg
U3RyaW5nQnVmZmVyIHdoZW4gaXQgZXhpc3RzLgogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGJ1ZmZl
ci5sZW5ndGgoKTsKICAgICBpZiAobGVuZ3RoID09IDApCiAgICAgICAgIHJldHVybiBlbXB0eSgp
OwpAQCAtMTEyOCwxMyArMTQ2NywyMSBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0lt
cGw6OmNyZWF0CiB7CiAgICAgLy8gVXNlIGNyZWF0ZVVuaW5pdGlhbGl6ZWQgaW5zdGVhZCBvZiAn
bmV3IFN0cmluZ0ltcGwnIHNvIHRoYXQgdGhlIHN0cmluZyBhbmQgaXRzIGJ1ZmZlcgogICAgIC8v
IGdldCBhbGxvY2F0ZWQgaW4gYSBzaW5nbGUgbWVtb3J5IGJsb2NrLgotICAgIFVDaGFyKiBkYXRh
OwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmluZy5tX2xlbmd0aDsKICAgICBpZiAobGVuZ3Ro
ID49IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpCiAgICAgICAgIENSQVNIKCk7Ci0g
ICAgUmVmUHRyPFN0cmluZ0ltcGw+IHRlcm1pbmF0ZWRTdHJpbmcgPSBjcmVhdGVVbmluaXRpYWxp
emVkKGxlbmd0aCArIDEsIGRhdGEpOwotICAgIG1lbWNweShkYXRhLCBzdHJpbmcubV9kYXRhLCBs
ZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKLSAgICBkYXRhW2xlbmd0aF0gPSAwOworICAgIFJlZlB0
cjxTdHJpbmdJbXBsPiB0ZXJtaW5hdGVkU3RyaW5nOworICAgIGlmIChzdHJpbmcuaXM4Qml0KCkp
IHsKKyAgICAgICAgY2hhciogZGF0YTsKKyAgICAgICAgdGVybWluYXRlZFN0cmluZyA9IGNyZWF0
ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoICsgMSwgZGF0YSk7CisgICAgICAgIG1lbWNweShkYXRhLCBz
dHJpbmcubV9kYXRhOCwgbGVuZ3RoICogc2l6ZW9mKGNoYXIpKTsKKyAgICAgICAgZGF0YVtsZW5n
dGhdID0gMDsKKyAgICB9IGVsc2UgeworICAgICAgICBVQ2hhciogZGF0YTsKKyAgICAgICAgdGVy
bWluYXRlZFN0cmluZyA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoICsgMSwgZGF0YSk7Cisg
ICAgICAgIG1lbWNweShkYXRhLCBzdHJpbmcubV9kYXRhMTYsIGxlbmd0aCAqIHNpemVvZihVQ2hh
cikpOworICAgICAgICBkYXRhW2xlbmd0aF0gPSAwOworICAgIH0KICAgICB0ZXJtaW5hdGVkU3Ry
aW5nLT5tX2xlbmd0aC0tOwogICAgIHRlcm1pbmF0ZWRTdHJpbmctPm1faGFzaCA9IHN0cmluZy5t
X2hhc2g7CiAgICAgdGVybWluYXRlZFN0cmluZy0+bV9yZWZDb3VudEFuZEZsYWdzIHw9IHNfcmVm
Q291bnRGbGFnSGFzVGVybWluYXRpbmdOdWxsQ2hhcmFjdGVyOwpAQCAtMTE0MywxMyArMTQ5MCwx
OSBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmNyZWF0CiAKIFBhc3NSZWZQ
dHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6dGhyZWFkc2FmZUNvcHkoKSBjb25zdAogewotICAg
IHJldHVybiBjcmVhdGUobV9kYXRhLCBtX2xlbmd0aCk7CisgICAgaWYgKGlzOEJpdCgpKQorICAg
ICAgICByZXR1cm4gY3JlYXRlKG1fZGF0YTgsIG1fbGVuZ3RoKTsKKyAgICByZXR1cm4gY3JlYXRl
KG1fZGF0YTE2LCBtX2xlbmd0aCk7CisKIH0KIAogUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJp
bmdJbXBsOjpjcm9zc1RocmVhZFN0cmluZygpCiB7Ci0gICAgaWYgKFNoYXJlZFVDaGFyKiBzaGFy
ZWRCdWZmZXIgPSB0aGlzLT5zaGFyZWRCdWZmZXIoKSkKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBTdHJpbmdJbXBsKG1fZGF0YSwgbV9sZW5ndGgsIHNoYXJlZEJ1ZmZlci0+Y3Jvc3NUaHJl
YWRDb3B5KCkpKTsKKyAgICBpZiAoU2hhcmVkVUNoYXIqIHNoYXJlZEJ1ZmZlciA9IHRoaXMtPnNo
YXJlZEJ1ZmZlcjE2KCkpIHsKKyAgICAgICAgLy8gRklYTUU6IE1ha2UgdGhpcyB3b3JrIGZvciA4
LWJpdCBzdHJpbmdzCisgICAgICAgIEFTU0VSVCghaXM4Qml0KCkpOworICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFN0cmluZ0ltcGwobV9kYXRhMTYsIG1fbGVuZ3RoLCBzaGFyZWRCdWZmZXIt
PmNyb3NzVGhyZWFkQ29weSgpKSk7CisgICAgfQogCiAgICAgLy8gSWYgbm8gc2hhcmVkIGJ1ZmZl
ciBpcyBhdmFpbGFibGUsIGNyZWF0ZSBhIGNvcHkuCiAgICAgcmV0dXJuIHRocmVhZHNhZmVDb3B5
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvU3RyaW5nSW1wbC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJpbmdJbXBsLmgJ
KHJldmlzaW9uIDk3MDAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1N0cmlu
Z0ltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsNyBAQCB0eXBlZGVmIGNvbnN0IHN0
cnVjdCBfX0NGU3RyaW5nICogQ0ZTdHJpCiAvLyBMYW5kaW5nIHRoZSBmaWxlIG1vdmVzIGluIG9u
ZSBwYXRjaCwgd2lsbCBmb2xsb3cgb24gd2l0aCBwYXRjaGVzIHRvIGNoYW5nZSB0aGUgbmFtZXNw
YWNlcy4KIG5hbWVzcGFjZSBKU0Mgewogc3RydWN0IElkZW50aWZpZXJDU3RyaW5nVHJhbnNsYXRv
cjsKK3N0cnVjdCBJZGVudGlmaWVyQ2hhckJ1ZmZlclRyYW5zbGF0b3I7CiBzdHJ1Y3QgSWRlbnRp
ZmllclVDaGFyQnVmZmVyVHJhbnNsYXRvcjsKIH0KIApAQCAtNjMsOCArNjQsMTIgQEAgdHlwZWRl
ZiBDcm9zc1RocmVhZFJlZkNvdW50ZWQ8U2hhcmFibGVVQwogdHlwZWRlZiBib29sICgqQ2hhcmFj
dGVyTWF0Y2hGdW5jdGlvblB0cikoVUNoYXIpOwogdHlwZWRlZiBib29sICgqSXNXaGl0ZVNwYWNl
RnVuY3Rpb25QdHIpKFVDaGFyKTsKIAordGVtcGxhdGUgPHR5cGVuYW1lIENoYXJUeXBlPiBpbmxp
bmUgdW5zaWduZWQgdW5zaWduZWRDaGFyVmFsdWUoY29uc3QgQ2hhclR5cGUgYykgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGMpOyB9Cit0ZW1wbGF0ZSA8PiBpbmxpbmUgdW5zaWduZWQg
dW5zaWduZWRDaGFyVmFsdWU8Y2hhcj4oY29uc3QgY2hhciBjKSB7IHJldHVybiBzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBjaGFyPihjKTsgfQorCiBjbGFzcyBTdHJpbmdJbXBsIDogcHVibGljIFN0cmlu
Z0ltcGxCYXNlIHsKICAgICBmcmllbmQgc3RydWN0IEpTQzo6SWRlbnRpZmllckNTdHJpbmdUcmFu
c2xhdG9yOworICAgIGZyaWVuZCBzdHJ1Y3QgSlNDOjpJZGVudGlmaWVyQ2hhckJ1ZmZlclRyYW5z
bGF0b3I7CiAgICAgZnJpZW5kIHN0cnVjdCBKU0M6OklkZW50aWZpZXJVQ2hhckJ1ZmZlclRyYW5z
bGF0b3I7CiAgICAgZnJpZW5kIHN0cnVjdCBXVEY6OkNTdHJpbmdUcmFuc2xhdG9yOwogICAgIGZy
aWVuZCBzdHJ1Y3QgV1RGOjpIYXNoQW5kQ2hhcmFjdGVyc1RyYW5zbGF0b3I7CkBAIC03Nyw3ICs4
Miw3IEBAIHByaXZhdGU6CiAgICAgLy8gc3RhdGljIHN0cmluZ3Mgd2lsbCBiZSBzaGFyZWQgYWNy
b3NzIHRocmVhZHMgJiByZWYtY291bnRlZCBpbiBhIG5vbi10aHJlYWRzYWZlIG1hbm5lci4KICAg
ICBTdHJpbmdJbXBsKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIFN0
YXRpY1N0cmluZ0NvbnN0cnVjdFR5cGUpCiAgICAgICAgIDogU3RyaW5nSW1wbEJhc2UobGVuZ3Ro
LCBDb25zdHJ1Y3RTdGF0aWNTdHJpbmcpCi0gICAgICAgICwgbV9kYXRhKGNoYXJhY3RlcnMpCisg
ICAgICAgICwgbV9kYXRhMTYoY2hhcmFjdGVycykKICAgICAgICAgLCBtX2J1ZmZlcigwKQogICAg
ICAgICAsIG1faGFzaCgwKQogICAgIHsKQEAgLTg3LDM2ICs5Miw4MiBAQCBwcml2YXRlOgogICAg
ICAgICBoYXNoKCk7CiAgICAgfQogCi0gICAgLy8gQ3JlYXRlIGEgbm9ybWFsIHN0cmluZyB3aXRo
IGludGVybmFsIHN0b3JhZ2UgKEJ1ZmZlckludGVybmFsKQorICAgIC8vIFVzZWQgdG8gY29uc3Ry
dWN0IHN0YXRpYyBzdHJpbmdzLCB3aGljaCBoYXZlIGFuIHNwZWNpYWwgcmVmQ291bnQgdGhhdCBj
YW4gbmV2ZXIgaGl0IHplcm8uCisgICAgLy8gVGhpcyBtZWFucyB0aGF0IHRoZSBzdGF0aWMgc3Ry
aW5nIHdpbGwgbmV2ZXIgYmUgZGVzdHJveWVkLCB3aGljaCBpcyBpbXBvcnRhbnQgYmVjYXVzZQor
ICAgIC8vIHN0YXRpYyBzdHJpbmdzIHdpbGwgYmUgc2hhcmVkIGFjcm9zcyB0aHJlYWRzICYgcmVm
LWNvdW50ZWQgaW4gYSBub24tdGhyZWFkc2FmZSBtYW5uZXIuCisgICAgU3RyaW5nSW1wbChjb25z
dCBjaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIFN0YXRpY1N0cmluZ0NvbnN0cnVj
dFR5cGUpCisgICAgOiBTdHJpbmdJbXBsQmFzZShsZW5ndGgsIENvbnN0cnVjdFN0YXRpY1N0cmlu
ZykKKyAgICAsIG1fZGF0YTgoY2hhcmFjdGVycykKKyAgICAsIG1fYnVmZmVyKDApCisgICAgLCBt
X2hhc2goMCkKKyAgICB7CisgICAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBoYXNoIGlzIGNvbXB1
dGVkIHNvIHRoYXQgQXRvbWljU3RyaW5nSGFzaCBjYW4gY2FsbCBleGlzdGluZ0hhc2goKQorICAg
ICAgICAvLyB3aXRoIGltcHVuaXR5LiBUaGUgZW1wdHkgc3RyaW5nIGlzIHNwZWNpYWwgYmVjYXVz
ZSBpdCBpcyBuZXZlciBlbnRlcmVkIGludG8KKyAgICAgICAgLy8gQXRvbWljU3RyaW5nJ3MgSGFz
aEtleSwgYnV0IHN0aWxsIG5lZWRzIHRvIGNvbXBhcmUgY29ycmVjdGx5LgorICAgICAgICBtX3Jl
ZkNvdW50QW5kRmxhZ3MgfD0gc19yZWZDb3VudEZsYWc4Qml0QnVmZmVyOworICAgICAgICBoYXNo
KCk7CisgICAgfQorCisgICAgLy8gRklYTUU6IHRoZXJlIGhhcyB0byBiZSBhIGxlc3MgaGFja3kg
d2F5IHRvIGRvIHRoaXMuCisgICAgZW51bSBGb3JjZThCaXQgeyBGb3JjZThCaXRDb25zdHJ1Y3Rv
ciB9OworICAgIC8vIENyZWF0ZSBhIG5vcm1hbCA4LWJpdCBzdHJpbmcgd2l0aCBpbnRlcm5hbCBz
dG9yYWdlIChCdWZmZXJJbnRlcm5hbCkKKyAgICBTdHJpbmdJbXBsKHVuc2lnbmVkIGxlbmd0aCwg
Rm9yY2U4Qml0IHVudXNlZCkKKyAgICAgICAgOiBTdHJpbmdJbXBsQmFzZShsZW5ndGgsIEJ1ZmZl
ckludGVybmFsKQorICAgICAgICAsIG1fZGF0YTgocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFy
Kj4odGhpcyArIDEpKQorICAgICAgICAsIG1fYnVmZmVyKDApCisgICAgICAgICwgbV9oYXNoKDAp
CisgICAgeworICAgICAgICBVTlVTRURfUEFSQU0odW51c2VkKTsgLy8gRklYTUUKKyAgICAgICAg
bV9yZWZDb3VudEFuZEZsYWdzIHw9IHNfcmVmQ291bnRGbGFnOEJpdEJ1ZmZlcjsKKyAgICAgICAg
QVNTRVJUKG1fZGF0YTgpOworICAgICAgICBBU1NFUlQobV9sZW5ndGgpOworICAgIH0KKworICAg
IC8vIENyZWF0ZSBhIG5vcm1hbCAxNi1iaXQgc3RyaW5nIHdpdGggaW50ZXJuYWwgc3RvcmFnZSAo
QnVmZmVySW50ZXJuYWwpCiAgICAgU3RyaW5nSW1wbCh1bnNpZ25lZCBsZW5ndGgpCiAgICAgICAg
IDogU3RyaW5nSW1wbEJhc2UobGVuZ3RoLCBCdWZmZXJJbnRlcm5hbCkKLSAgICAgICAgLCBtX2Rh
dGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KHRoaXMgKyAxKSkKKyAgICAgICAgLCBt
X2RhdGExNihyZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4odGhpcyArIDEpKQogICAgICAg
ICAsIG1fYnVmZmVyKDApCiAgICAgICAgICwgbV9oYXNoKDApCiAgICAgewotICAgICAgICBBU1NF
UlQobV9kYXRhKTsKKyAgICAgICAgQVNTRVJUKG1fZGF0YTE2KTsKICAgICAgICAgQVNTRVJUKG1f
bGVuZ3RoKTsKICAgICB9CiAKICAgICAvLyBDcmVhdGUgYSBTdHJpbmdJbXBsIGFkb3B0aW5nIG93
bmVyc2hpcCBvZiB0aGUgcHJvdmlkZWQgYnVmZmVyIChCdWZmZXJPd25lZCkKICAgICBTdHJpbmdJ
bXBsKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCiAgICAgICAgIDog
U3RyaW5nSW1wbEJhc2UobGVuZ3RoLCBCdWZmZXJPd25lZCkKLSAgICAgICAgLCBtX2RhdGEoY2hh
cmFjdGVycykKKyAgICAgICAgLCBtX2RhdGExNihjaGFyYWN0ZXJzKQogICAgICAgICAsIG1fYnVm
ZmVyKDApCiAgICAgICAgICwgbV9oYXNoKDApCiAgICAgewotICAgICAgICBBU1NFUlQobV9kYXRh
KTsKKyAgICAgICAgQVNTRVJUKG1fZGF0YTE2KTsKICAgICAgICAgQVNTRVJUKG1fbGVuZ3RoKTsK
ICAgICB9CiAKLSAgICAvLyBVc2VkIHRvIGNyZWF0ZSBuZXcgc3RyaW5ncyB0aGF0IGFyZSBhIHN1
YnN0cmluZyBvZiBhbiBleGlzdGluZyBTdHJpbmdJbXBsIChCdWZmZXJTdWJzdHJpbmcpCisgICAg
Ly8gVXNlZCB0byBjcmVhdGUgbmV3IHN0cmluZ3MgdGhhdCBhcmUgYSBzdWJzdHJpbmcgb2YgYW4g
ZXhpc3RpbmcgOC1iaXQgU3RyaW5nSW1wbCAoQnVmZmVyU3Vic3RyaW5nKQorICAgIFN0cmluZ0lt
cGwoY29uc3QgY2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBQYXNzUmVmUHRyPFN0
cmluZ0ltcGw+IGJhc2UpCisgICAgICAgIDogU3RyaW5nSW1wbEJhc2UobGVuZ3RoLCBCdWZmZXJT
dWJzdHJpbmcpCisgICAgICAgICwgbV9kYXRhOChjaGFyYWN0ZXJzKQorICAgICAgICAsIG1fc3Vi
c3RyaW5nQnVmZmVyKGJhc2UubGVha1JlZigpKQorICAgICAgICAsIG1faGFzaCgwKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKG1fc3Vic3RyaW5nQnVmZmVyLT5tX3JlZkNvdW50QW5kRmxhZ3MgJiBz
X3JlZkNvdW50RmxhZzhCaXRCdWZmZXIpOworICAgICAgICBtX3JlZkNvdW50QW5kRmxhZ3MgfD0g
c19yZWZDb3VudEZsYWc4Qml0QnVmZmVyOworICAgICAgICBBU1NFUlQobV9kYXRhOCk7CisgICAg
ICAgIEFTU0VSVChtX2xlbmd0aCk7CisgICAgICAgIEFTU0VSVChtX3N1YnN0cmluZ0J1ZmZlci0+
YnVmZmVyT3duZXJzaGlwKCkgIT0gQnVmZmVyU3Vic3RyaW5nKTsKKyAgICB9CisKKyAgICAvLyBV
c2VkIHRvIGNyZWF0ZSBuZXcgc3RyaW5ncyB0aGF0IGFyZSBhIHN1YnN0cmluZyBvZiBhbiBleGlz
dGluZyAxNi1iaXQgU3RyaW5nSW1wbCAoQnVmZmVyU3Vic3RyaW5nKQogICAgIFN0cmluZ0ltcGwo
Y29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgUGFzc1JlZlB0cjxTdHJp
bmdJbXBsPiBiYXNlKQogICAgICAgICA6IFN0cmluZ0ltcGxCYXNlKGxlbmd0aCwgQnVmZmVyU3Vi
c3RyaW5nKQotICAgICAgICAsIG1fZGF0YShjaGFyYWN0ZXJzKQorICAgICAgICAsIG1fZGF0YTE2
KGNoYXJhY3RlcnMpCiAgICAgICAgICwgbV9zdWJzdHJpbmdCdWZmZXIoYmFzZS5sZWFrUmVmKCkp
CiAgICAgICAgICwgbV9oYXNoKDApCiAgICAgewotICAgICAgICBBU1NFUlQobV9kYXRhKTsKKyAg
ICAgICAgQVNTRVJUKCEobV9zdWJzdHJpbmdCdWZmZXItPm1fcmVmQ291bnRBbmRGbGFncyAmIHNf
cmVmQ291bnRGbGFnOEJpdEJ1ZmZlcikpOworICAgICAgICBBU1NFUlQobV9kYXRhMTYpOwogICAg
ICAgICBBU1NFUlQobV9sZW5ndGgpOwogICAgICAgICBBU1NFUlQobV9zdWJzdHJpbmdCdWZmZXIt
PmJ1ZmZlck93bmVyc2hpcCgpICE9IEJ1ZmZlclN1YnN0cmluZyk7CiAgICAgfQpAQCAtMTI0LDIw
ICsxNzUsMjQgQEAgcHJpdmF0ZToKICAgICAvLyBVc2VkIHRvIGNvbnN0cnVjdCBuZXcgc3RyaW5n
cyBzaGFyaW5nIGFuIGV4aXN0aW5nIFNoYXJlZFVDaGFyIChCdWZmZXJTaGFyZWQpCiAgICAgU3Ry
aW5nSW1wbChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBQYXNzUmVm
UHRyPFNoYXJlZFVDaGFyPiBzaGFyZWRCdWZmZXIpCiAgICAgICAgIDogU3RyaW5nSW1wbEJhc2Uo
bGVuZ3RoLCBCdWZmZXJTaGFyZWQpCi0gICAgICAgICwgbV9kYXRhKGNoYXJhY3RlcnMpCisgICAg
ICAgICwgbV9kYXRhMTYoY2hhcmFjdGVycykKICAgICAgICAgLCBtX3NoYXJlZEJ1ZmZlcihzaGFy
ZWRCdWZmZXIubGVha1JlZigpKQogICAgICAgICAsIG1faGFzaCgwKQogICAgIHsKLSAgICAgICAg
QVNTRVJUKG1fZGF0YSk7Ci0gICAgICAgIEFTU0VSVChtX2xlbmd0aCk7CisgICAgICAgIEFTU0VS
VChtX2RhdGExNik7CiAgICAgfQogCisgICAgLy8gRklYTUU6IEFkZCBjb25zdHJ1Y3RvcnMgZm9y
IDgtYml0IHN0cmluZ3MKKwogICAgIC8vIEZvciB1c2Ugb25seSBieSBBdG9taWNTdHJpbmcncyBY
WFhUcmFuc2xhdG9yIGhlbHBlcnMuCiAgICAgdm9pZCBzZXRIYXNoKHVuc2lnbmVkIGhhc2gpCiAg
ICAgewogICAgICAgICBBU1NFUlQoIWlzU3RhdGljKCkpOwogICAgICAgICBBU1NFUlQoIW1faGFz
aCk7Ci0gICAgICAgIEFTU0VSVChoYXNoID09IFN0cmluZ0hhc2hlcjo6Y29tcHV0ZUhhc2gobV9k
YXRhLCBtX2xlbmd0aCkpOworICAgICAgICBpZiAoaXM4Qml0KCkpCisgICAgICAgICAgICBBU1NF
UlQoaGFzaCA9PSBTdHJpbmdIYXNoZXI6OmNvbXB1dGVIYXNoKG1fZGF0YTgsIG1fbGVuZ3RoKSk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEFTU0VSVChoYXNoID09IFN0cmluZ0hhc2hlcjo6
Y29tcHV0ZUhhc2gobV9kYXRhMTYsIG1fbGVuZ3RoKSk7CiAgICAgICAgIG1faGFzaCA9IGhhc2g7
CiAgICAgfQogCkBAIC0xNDgsNiArMjAzLDE5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxTdHJpbmdJbXBsPiBjcmVhdGUoY29uc3QgY2hhciosIHVuc2lnbmVkIGxlbmd0aCk7CiAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gY3JlYXRlKGNvbnN0IGNoYXIqKTsKICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBjcmVhdGUoY29uc3QgVUNoYXIqLCB1bnNp
Z25lZCBsZW5ndGgsIFBhc3NSZWZQdHI8U2hhcmVkVUNoYXI+IHNoYXJlZEJ1ZmZlcik7CisgICAg
c3RhdGljIEFMV0FZU19JTkxJTkUgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBjcmVhdGU4KFBhc3NS
ZWZQdHI8U3RyaW5nSW1wbD4gcmVwLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkK
KyAgICB7CisgICAgICAgIEFTU0VSVChyZXApOworICAgICAgICBBU1NFUlQobGVuZ3RoIDw9IHJl
cC0+bGVuZ3RoKCkpOworCisgICAgICAgIGlmICghbGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJu
IGVtcHR5KCk7CisKKyAgICAgICAgQVNTRVJUKHJlcC0+aXM4Qml0KCkpOworICAgICAgICBTdHJp
bmdJbXBsKiBvd25lclJlcCA9IChyZXAtPmJ1ZmZlck93bmVyc2hpcCgpID09IEJ1ZmZlclN1YnN0
cmluZykgPyByZXAtPm1fc3Vic3RyaW5nQnVmZmVyIDogcmVwLmdldCgpOworICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFN0cmluZ0ltcGwocmVwLT5tX2RhdGE4ICsgb2Zmc2V0LCBsZW5ndGgs
IG93bmVyUmVwKSk7CisgICAgfQorCiAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgUGFzc1JlZlB0
cjxTdHJpbmdJbXBsPiBjcmVhdGUoUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiByZXAsIHVuc2lnbmVk
IG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogICAgIHsKICAgICAgICAgQVNTRVJUKHJlcCk7CkBA
IC0xNTcsMzQgKzIyNSw0NSBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gZW1wdHkoKTsK
IAogICAgICAgICBTdHJpbmdJbXBsKiBvd25lclJlcCA9IChyZXAtPmJ1ZmZlck93bmVyc2hpcCgp
ID09IEJ1ZmZlclN1YnN0cmluZykgPyByZXAtPm1fc3Vic3RyaW5nQnVmZmVyIDogcmVwLmdldCgp
OwotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0cmluZ0ltcGwocmVwLT5tX2RhdGEgKyBv
ZmZzZXQsIGxlbmd0aCwgb3duZXJSZXApKTsKKyAgICAgICAgaWYgKHJlcC0+aXM4Qml0KCkpCisg
ICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0cmluZ0ltcGwocmVwLT5tX2RhdGE4ICsg
b2Zmc2V0LCBsZW5ndGgsIG93bmVyUmVwKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
U3RyaW5nSW1wbChyZXAtPm1fZGF0YTE2ICsgb2Zmc2V0LCBsZW5ndGgsIG93bmVyUmVwKSk7CiAg
ICAgfQogCisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gY3JlYXRlVW5pbml0aWFs
aXplZCh1bnNpZ25lZCBsZW5ndGgsIGNoYXIqJiBkYXRhKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxTdHJpbmdJbXBsPiBjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIq
JiBkYXRhKTsKLSAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+
IHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoLCBVQ2hhciomIG91dHB1dCkK
KyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RhdGljIEFMV0FZU19JTkxJTkUgUGFzc1JlZlB0
cjxTdHJpbmdJbXBsPiB0cnlDcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCwgVCom
IG91dHB1dCkKICAgICB7CiAgICAgICAgIGlmICghbGVuZ3RoKSB7CiAgICAgICAgICAgICBvdXRw
dXQgPSAwOwogICAgICAgICAgICAgcmV0dXJuIGVtcHR5KCk7CiAgICAgICAgIH0KIAotICAgICAg
ICBpZiAobGVuZ3RoID4gKChzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgLSBz
aXplb2YoU3RyaW5nSW1wbCkpIC8gc2l6ZW9mKFVDaGFyKSkpIHsKKyAgICAgICAgaWYgKGxlbmd0
aCA+ICgoc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIC0gc2l6ZW9mKFN0cmlu
Z0ltcGwpKSAvIHNpemVvZihUKSkpIHsKICAgICAgICAgICAgIG91dHB1dCA9IDA7CiAgICAgICAg
ICAgICByZXR1cm4gMDsKICAgICAgICAgfQogICAgICAgICBTdHJpbmdJbXBsKiByZXN1bHRJbXBs
OwotICAgICAgICBpZiAoIXRyeUZhc3RNYWxsb2Moc2l6ZW9mKFVDaGFyKSAqIGxlbmd0aCArIHNp
emVvZihTdHJpbmdJbXBsKSkuZ2V0VmFsdWUocmVzdWx0SW1wbCkpIHsKKyAgICAgICAgaWYgKCF0
cnlGYXN0TWFsbG9jKHNpemVvZihUKSAqIGxlbmd0aCArIHNpemVvZihTdHJpbmdJbXBsKSkuZ2V0
VmFsdWUocmVzdWx0SW1wbCkpIHsKICAgICAgICAgICAgIG91dHB1dCA9IDA7CiAgICAgICAgICAg
ICByZXR1cm4gMDsKICAgICAgICAgfQotICAgICAgICBvdXRwdXQgPSByZWludGVycHJldF9jYXN0
PFVDaGFyKj4ocmVzdWx0SW1wbCArIDEpOworICAgICAgICBvdXRwdXQgPSByZWludGVycHJldF9j
YXN0PFQqPihyZXN1bHRJbXBsICsgMSk7CisKKyAgICAgICAgaWYgKHNpemVvZihUKSA9PSBzaXpl
b2YoY2hhcikpCisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3KHJlc3VsdEltcGwpIFN0
cmluZ0ltcGwobGVuZ3RoLCBGb3JjZThCaXRDb25zdHJ1Y3RvcikpOworCiAgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcocmVzdWx0SW1wbCkgU3RyaW5nSW1wbChsZW5ndGgpKTsKICAgICB9CiAK
LSAgICBzdGF0aWMgdW5zaWduZWQgZGF0YU9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihTdHJpbmdJbXBsLCBtX2RhdGEpOyB9CisgICAgc3RhdGljIHVuc2lnbmVkIGZsYWdzT2Zmc2V0
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cmluZ0ltcGwsIG1fcmVmQ291bnRBbmRGbGFn
cyk7IH0KKyAgICBzdGF0aWMgdW5zaWduZWQgZmxhZ0lzOEJpdCgpIHsgcmV0dXJuIHNfcmVmQ291
bnRGbGFnOEJpdEJ1ZmZlcjsgfQorICAgIHN0YXRpYyB1bnNpZ25lZCBkYXRhT2Zmc2V0KCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cmluZ0ltcGwsIG1fZGF0YTgpOyB9IC8vIEZJWE1FOiBU
aGlzIGlzIHVnbHkKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBjcmVhdGVXaXRo
VGVybWluYXRpbmdOdWxsQ2hhcmFjdGVyKGNvbnN0IFN0cmluZ0ltcGwmKTsKKyAgICAvLyBGSVhN
RTogY2hhciogdmVyc2lvbj8KICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBjcmVh
dGVTdHJpcHBpbmdOdWxsQ2hhcmFjdGVycyhjb25zdCBVQ2hhciosIHVuc2lnbmVkIGxlbmd0aCk7
CiAKKyAgICAvLyBGSVhNRTogQWRkIFZlY3RvcjxjaGFyPiBhZG9wdD8KICAgICB0ZW1wbGF0ZTxz
aXplX3QgaW5saW5lQ2FwYWNpdHk+CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4g
YWRvcHQoVmVjdG9yPFVDaGFyLCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKICAgICB7CkBAIC0x
OTgsOCArMjc3LDIyIEBAIHB1YmxpYzoKICAgICB9CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3Ry
aW5nSW1wbD4gYWRvcHQoU3RyaW5nQnVmZmVyJik7CiAKLSAgICBTaGFyZWRVQ2hhciogc2hhcmVk
QnVmZmVyKCk7Ci0gICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMoKSBjb25zdCB7IHJldHVybiBt
X2RhdGE7IH0KKyAgICAvLyBGSVhNRTogU2hvdWxkIHRoaXMgYmUgcHJpdmF0ZT8gSXQncyBvbmx5
IGFjY2Vzc2VkIGZyb20gd2l0aGluIFN0cmluZ0ltcGwuCisgICAgU2hhcmVkVUNoYXIqIHNoYXJl
ZEJ1ZmZlcjE2KCk7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBzaGFyZWRCdWZmZXI4KCkgPwor
ICAgIC8vIEZJWE1FOiBSZW1vdmUgYWxsIHVubmVjZXNzYXJ5IHVzYWdlcyBvZiBjaGFyYWN0ZXJz
KCkKKyAgICBBTFdBWVNfSU5MSU5FIGNvbnN0IGNoYXIqIGNoYXJhY3RlcnM4KCkgY29uc3QgeyBB
U1NFUlQoaXM4Qml0KCkpOyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIG1fZGF0YTg7IH0K
KyAgICBBTFdBWVNfSU5MSU5FIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzMTYoKSBjb25zdCB7IEFT
U0VSVCghaXM4Qml0KCkpOyByZXR1cm4gbV9kYXRhMTY7IH0KKyAgICBBTFdBWVNfSU5MSU5FIGNv
bnN0IFVDaGFyKiBjaGFyYWN0ZXJzKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghaXM4Qml0
KCkpCisgICAgICAgICAgICByZXR1cm4gbV9kYXRhMTY7CisKKyAgICAgICAgcmV0dXJuIGdldERh
dGExNlNsb3dDYXNlKCk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhclR5cGU+
CisgICAgaW5saW5lIGNvbnN0IENoYXJUeXBlKiBnZXRDaGFyYWN0ZXJzKCkgY29uc3Q7CiAKICAg
ICBzaXplX3QgY29zdCgpCiAgICAgewpAQCAtMjE0LDYgKzMwNyw4IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgfQogCisgICAgYm9vbCBoYXMxNkJpdFNoYWRvdygpIGNvbnN0IHsg
cmV0dXJuIG1fcmVmQ291bnRBbmRGbGFncyAmIHNfcmVmQ291bnRGbGFnSGFzMTZCaXRTaGFkb3c7
IH0KKwogICAgIGJvb2wgaXNJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9yZWZDb3VudEFu
ZEZsYWdzICYgc19yZWZDb3VudEZsYWdJc0lkZW50aWZpZXI7IH0KICAgICB2b2lkIHNldElzSWRl
bnRpZmllcihib29sIGlzSWRlbnRpZmllcikKICAgICB7CkBAIC0yMzYsNyArMzMxLDE2IEBAIHB1
YmxpYzoKICAgICAgICAgICAgIG1fcmVmQ291bnRBbmRGbGFncyAmPSB+c19yZWZDb3VudEZsYWdJ
c0F0b21pYzsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QgeyBpZiAoIW1faGFz
aCkgbV9oYXNoID0gU3RyaW5nSGFzaGVyOjpjb21wdXRlSGFzaChtX2RhdGEsIG1fbGVuZ3RoKTsg
cmV0dXJuIG1faGFzaDsgfQorICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsKKyAgICAg
ICAgaWYgKCFtX2hhc2gpIHsKKyAgICAgICAgICAgIGlmIChpczhCaXQoKSkKKyAgICAgICAgICAg
ICAgICBtX2hhc2ggPSBTdHJpbmdIYXNoZXI6OmNvbXB1dGVIYXNoKG1fZGF0YTgsIG1fbGVuZ3Ro
KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX2hhc2ggPSBTdHJpbmdIYXNo
ZXI6OmNvbXB1dGVIYXNoKG1fZGF0YTE2LCBtX2xlbmd0aCk7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIG1faGFzaDsKKyAgICB9CiAgICAgdW5zaWduZWQgZXhpc3RpbmdIYXNoKCkgY29uc3Qg
eyBBU1NFUlQobV9oYXNoKTsgcmV0dXJuIG1faGFzaDsgfQogICAgIGJvb2wgaGFzSGFzaCgpIGNv
bnN0IHsgcmV0dXJuIG1faGFzaDsgfQogCkBAIC0yNDUsMTMgKzM0OSwzMiBAQCBwdWJsaWM6CiAK
ICAgICBzdGF0aWMgU3RyaW5nSW1wbCogZW1wdHkoKTsKIAotICAgIHN0YXRpYyB2b2lkIGNvcHlD
aGFycyhVQ2hhciogZGVzdGluYXRpb24sIGNvbnN0IFVDaGFyKiBzb3VyY2UsIHVuc2lnbmVkIG51
bUNoYXJhY3RlcnMpCisgICAgLy8gRklYTUU6IERvZXMgdGhpcyByZWFsbHkgYmVsb25nIGluIFN0
cmluZ0ltcGw/CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0YXRpYyB2b2lkIGNvcHlDaGFy
cyhUKiBkZXN0aW5hdGlvbiwgY29uc3QgVCogc291cmNlLCB1bnNpZ25lZCBudW1DaGFyYWN0ZXJz
KQogICAgIHsKKyAgICAgICAgaWYgKG51bUNoYXJhY3RlcnMgPT0gMSkgeworICAgICAgICAgICAg
KmRlc3RpbmF0aW9uID0gKnNvdXJjZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CiAgICAgICAgIGlmIChudW1DaGFyYWN0ZXJzIDw9IHNfY29weUNoYXJzSW5saW5lQ3V0T2ZmKSB7
Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtQ2hhcmFjdGVyczsgKytp
KQorICAgICAgICAgICAgdW5zaWduZWQgaSA9IDA7CisjaWYgKENQVShYODYpIHx8IENQVShYODZf
NjQpKQorICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhcnNQZXJJbnQgPSBzaXplb2YodWlu
dDMyX3QpIC8gc2l6ZW9mKFQpOworCisgICAgICAgICAgICBpZiAobnVtQ2hhcmFjdGVycyA+IGNo
YXJzUGVySW50KSB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgc3RvcENvdW50ID0gbnVtQ2hh
cmFjdGVycyAmIH4oY2hhcnNQZXJJbnQgLSAxKTsKKworICAgICAgICAgICAgICAgIGNvbnN0IHVp
bnQzMl90KiBzcmNDaGFyYWN0ZXJzID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+
KHNvdXJjZSk7CisgICAgICAgICAgICAgICAgdWludDMyX3QqIGRlc3RDaGFyYWN0ZXJzID0gcmVp
bnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RpbmF0aW9uKTsKKyAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGogPSAwOyBpIDwgc3RvcENvdW50OyBpICs9IGNoYXJzUGVySW50LCArK2op
CisgICAgICAgICAgICAgICAgICAgIGRlc3RDaGFyYWN0ZXJzW2pdID0gc3JjQ2hhcmFjdGVyc1tq
XTsKKyAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAgICAgZm9yICg7IGkgPCBudW1DaGFy
YWN0ZXJzOyArK2kpCiAgICAgICAgICAgICAgICAgZGVzdGluYXRpb25baV0gPSBzb3VyY2VbaV07
CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbWVtY3B5KGRlc3RpbmF0aW9uLCBzb3VyY2Us
IG51bUNoYXJhY3RlcnMgKiBzaXplb2YoVUNoYXIpKTsKKyAgICAgICAgICAgIG1lbWNweShkZXN0
aW5hdGlvbiwgc291cmNlLCBudW1DaGFyYWN0ZXJzICogc2l6ZW9mKFQpKTsKICAgICB9CiAKICAg
ICAvLyBSZXR1cm5zIGEgU3RyaW5nSW1wbCBzdWl0YWJsZSBmb3IgdXNlIG9uIGFub3RoZXIgdGhy
ZWFkLgpAQCAtMjYzLDcgKzM4NiwxMyBAQCBwdWJsaWM6CiAKICAgICBQYXNzUmVmUHRyPFN0cmlu
Z0ltcGw+IHN1YnN0cmluZyh1bnNpZ25lZCBwb3MsIHVuc2lnbmVkIGxlbiA9IFVJTlRfTUFYKTsK
IAotICAgIFVDaGFyIG9wZXJhdG9yW10odW5zaWduZWQgaSkgeyBBU1NFUlQoaSA8IG1fbGVuZ3Ro
KTsgcmV0dXJuIG1fZGF0YVtpXTsgfQorICAgIFVDaGFyIG9wZXJhdG9yW10odW5zaWduZWQgaSkg
Y29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpIDwgbV9sZW5ndGgpOworICAgICAgICBpZiAo
aXM4Qml0KCkpCisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4o
bV9kYXRhOFtpXSk7CisgICAgICAgIHJldHVybiBtX2RhdGExNltpXTsKKyAgICB9CiAgICAgVUNo
YXIzMiBjaGFyYWN0ZXJTdGFydGluZ0F0KHVuc2lnbmVkKTsKIAogICAgIGJvb2wgY29udGFpbnNP
bmx5V2hpdGVzcGFjZSgpOwpAQCAtMjg3LDYgKzQxNiw3IEBAIHB1YmxpYzoKICAgICBQYXNzUmVm
UHRyPFN0cmluZ0ltcGw+IHVwcGVyKCk7CiAKICAgICBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGZp
bGwoVUNoYXIpOworICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVkIGZpbGwoY2hhcikgb3IgY2FuIHdl
IGp1c3QgZG8gdGhlIHJpZ2h0IHRoaW5nIGlmIFVDaGFyIGlzIEFTQ0lJPwogICAgIFBhc3NSZWZQ
dHI8U3RyaW5nSW1wbD4gZm9sZENhc2UoKTsKIAogICAgIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4g
c3RyaXBXaGl0ZVNwYWNlKCk7CkBAIC0yOTYsNiArNDI2LDcgQEAgcHVibGljOgogCiAgICAgUGFz
c1JlZlB0cjxTdHJpbmdJbXBsPiByZW1vdmVDaGFyYWN0ZXJzKENoYXJhY3Rlck1hdGNoRnVuY3Rp
b25QdHIpOwogCisgICAgLy8gRklYTUU6IERvIHdlIG5lZWQgY2hhciB2ZXJzaW9uLCBvciBpcyBp
dCBva2F5IHRvIGp1c3QgcGFzcyBpbiBhbiBBU0NJSSBjaGFyIGZvciA4LWJpdD8gU2FtZSBmb3Ig
cmV2ZXJzZUZpbmQsIHJlcGxhY2UKICAgICBzaXplX3QgZmluZChVQ2hhciwgdW5zaWduZWQgaW5k
ZXggPSAwKTsKICAgICBzaXplX3QgZmluZChDaGFyYWN0ZXJNYXRjaEZ1bmN0aW9uUHRyLCB1bnNp
Z25lZCBpbmRleCA9IDApOwogICAgIHNpemVfdCBmaW5kKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCBp
bmRleCA9IDApOwpAQCAtMzM0LDE4ICs0NjUsMjQgQEAgcHJpdmF0ZToKICAgICBib29sIGlzU3Rh
dGljKCkgY29uc3QgeyByZXR1cm4gbV9yZWZDb3VudEFuZEZsYWdzICYgc19yZWZDb3VudEZsYWdT
dGF0aWM7IH0KICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVUNoYXJQcmVkaWNhdGU+IFBhc3NSZWZQdHI8
U3RyaW5nSW1wbD4gc3RyaXBNYXRjaGVkQ2hhcmFjdGVycyhVQ2hhclByZWRpY2F0ZSk7CiAgICAg
dGVtcGxhdGUgPGNsYXNzIFVDaGFyUHJlZGljYXRlPiBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHNp
bXBsaWZ5TWF0Y2hlZENoYXJhY3RlcnNUb1NwYWNlKFVDaGFyUHJlZGljYXRlKTsKKyAgICBORVZF
Ul9JTkxJTkUgY29uc3QgVUNoYXIqIGdldERhdGExNlNsb3dDYXNlKCkgY29uc3Q7CiAKLSAgICBj
b25zdCBVQ2hhciogbV9kYXRhOworICAgIHVuaW9uIHsKKyAgICAgICAgY29uc3QgY2hhciogbV9k
YXRhODsKKyAgICAgICAgY29uc3QgVUNoYXIqIG1fZGF0YTE2OworICAgIH07CiAgICAgdW5pb24g
ewogICAgICAgICB2b2lkKiBtX2J1ZmZlcjsKICAgICAgICAgU3RyaW5nSW1wbCogbV9zdWJzdHJp
bmdCdWZmZXI7CiAgICAgICAgIFNoYXJlZFVDaGFyKiBtX3NoYXJlZEJ1ZmZlcjsKKyAgICAgICAg
bXV0YWJsZSBVQ2hhciogbV9jb3B5RGF0YTE2OwogICAgIH07CiAgICAgbXV0YWJsZSB1bnNpZ25l
ZCBtX2hhc2g7CiB9OwogCiBib29sIGVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqLCBjb25zdCBTdHJp
bmdJbXBsKik7CiBib29sIGVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqLCBjb25zdCBjaGFyKik7Citi
b29sIGVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqLCBjb25zdCBjaGFyKiwgdW5zaWduZWQpOwogaW5s
aW5lIGJvb2wgZXF1YWwoY29uc3QgY2hhciogYSwgU3RyaW5nSW1wbCogYikgeyByZXR1cm4gZXF1
YWwoYiwgYSk7IH0KIGJvb2wgZXF1YWwoY29uc3QgU3RyaW5nSW1wbCosIGNvbnN0IFVDaGFyKiwg
dW5zaWduZWQpOwogCkBAIC0zNzYsNiArNTEzLDcgQEAgc3RhdGljIGlubGluZSBib29sIGlzU3Bh
Y2VPck5ld2xpbmUoVUNoYQogICAgIHJldHVybiBjIDw9IDB4N0YgPyBXVEY6OmlzQVNDSUlTcGFj
ZShjKSA6IFdURjo6VW5pY29kZTo6ZGlyZWN0aW9uKGMpID09IFdURjo6VW5pY29kZTo6V2hpdGVT
cGFjZU5ldXRyYWw7CiB9CiAKKy8vIEZJWE1FOiBTaG91bGQgdGhlcmUgYmUgYW4gOC1iaXQgaW1w
bGVtZW50YXRpb24gb2YgdGhpcywgb3Igc2hvdWxkIHRoaXMgbWV0aG9kIGNyZWF0ZSBhbiA4LWJp
dCBTdHJpbmdJbXBsIGFzIG5lZWRlZD8KIC8vIFRoaXMgaXMgYSBob3QgZnVuY3Rpb24gYmVjYXVz
ZSBpdCdzIHVzZWQgd2hlbiBwYXJzaW5nIEhUTUwuCiBpbmxpbmUgUGFzc1JlZlB0cjxTdHJpbmdJ
bXBsPiBTdHJpbmdJbXBsOjpjcmVhdGVTdHJpcHBpbmdOdWxsQ2hhcmFjdGVycyhjb25zdCBVQ2hh
ciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQogewpAQCAtMzk5LDYgKzUzNywxOCBAQCBp
bmxpbmUgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsCiAgICAgcmV0dXJuIFN0cmlu
Z0ltcGw6OmNyZWF0ZVN0cmlwcGluZ051bGxDaGFyYWN0ZXJzU2xvd0Nhc2UoY2hhcmFjdGVycywg
bGVuZ3RoKTsKIH0KIAordGVtcGxhdGU8PgoraW5saW5lIGNvbnN0IGNoYXIqIFN0cmluZ0ltcGw6
OmdldENoYXJhY3RlcnM8Y2hhcj4oKSBjb25zdAoreworICAgIHJldHVybiBjaGFyYWN0ZXJzOCgp
OworfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgY29uc3QgVUNoYXIqIFN0cmluZ0ltcGw6OmdldENo
YXJhY3RlcnM8VUNoYXI+KCkgY29uc3QKK3sKKyAgICByZXR1cm4gY2hhcmFjdGVyczE2KCk7Cit9
CisKIHN0cnVjdCBTdHJpbmdIYXNoOwogCiAvLyBTdHJpbmdIYXNoIGlzIHRoZSBkZWZhdWx0IGhh
c2ggZm9yIFN0cmluZ0ltcGwqIGFuZCBSZWZQdHI8U3RyaW5nSW1wbD4KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJpbmdJbXBsQmFzZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJpbmdJbXBsQmFzZS5oCShyZXZpc2lvbiA5
NzAwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJpbmdJbXBsQmFzZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBAIGNsYXNzIFN0cmluZ0ltcGxCYXNlIHsK
IHB1YmxpYzoKICAgICBib29sIGlzU3RyaW5nSW1wbCgpIHsgcmV0dXJuIChtX3JlZkNvdW50QW5k
RmxhZ3MgJiBzX3JlZkNvdW50SW52YWxpZEZvclN0cmluZ0ltcGwpICE9IHNfcmVmQ291bnRJbnZh
bGlkRm9yU3RyaW5nSW1wbDsgfQogICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJu
IG1fbGVuZ3RoOyB9CisgICAgYm9vbCBpczhCaXQoKSBjb25zdCB7IHJldHVybiBtX3JlZkNvdW50
QW5kRmxhZ3MgJiBzX3JlZkNvdW50RmxhZzhCaXRCdWZmZXI7IH0KICAgICB2b2lkIHJlZigpIHsg
bV9yZWZDb3VudEFuZEZsYWdzICs9IHNfcmVmQ291bnRJbmNyZW1lbnQ7IH0KIAogcHJvdGVjdGVk
OgpAQCAtNzMsMTEgKzc0LDEzIEBAIHByb3RlY3RlZDoKICAgICAgICAgQVNTRVJUKCFpc1N0cmlu
Z0ltcGwoKSk7CiAgICAgfQogCi0gICAgLy8gVGhlIGJvdHRvbSA3IGJpdHMgaG9sZCBmbGFncywg
dGhlIHRvcCAyNSBiaXRzIGhvbGQgdGhlIHJlZiBjb3VudC4KKyAgICAvLyBUaGUgYm90dG9tIDkg
Yml0cyBob2xkIGZsYWdzLCB0aGUgdG9wIDIzIGJpdHMgaG9sZCB0aGUgcmVmIGNvdW50LgogICAg
IC8vIFdoZW4gZGVyZWZlcmVuY2luZyBTdHJpbmdJbXBscyB3ZSBjaGVjayBmb3IgdGhlIHJlZiBj
b3VudCBBTkQgdGhlCiAgICAgLy8gc3RhdGljIGJpdCBib3RoIGJlaW5nIHplcm8gLSBzdGF0aWMg
c3RyaW5ncyBhcmUgbmV2ZXIgZGVsZXRlZC4KLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc19y
ZWZDb3VudE1hc2sgPSAweEZGRkZGRjgwOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzX3Jl
ZkNvdW50SW5jcmVtZW50ID0gMHg4MDsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc19yZWZD
b3VudE1hc2sgPSAweEVGRkZGRjAwOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzX3JlZkNv
dW50SW5jcmVtZW50ID0gMHgxMDA7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNfcmVmQ291
bnRGbGFnSGFzMTZCaXRTaGFkb3cgPSAweDgwMDAwMDAwOworICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBzX3JlZkNvdW50RmxhZzhCaXRCdWZmZXIgPSAweDgwOwogICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBzX3JlZkNvdW50RmxhZ1N0YXRpYyA9IDB4NDA7CiAgICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIHNfcmVmQ291bnRGbGFnSGFzVGVybWluYXRpbmdOdWxsQ2hhcmFjdGVyID0gMHgyMDsK
ICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc19yZWZDb3VudEZsYWdJc0F0b21pYyA9IDB4MTA7
CkBAIC04OSw3ICs5Miw3IEBAIHByb3RlY3RlZDoKICAgICAvLyBVc2VkIGJ5ICJDb25zdHJ1Y3RO
b25TdHJpbmdJbXBsIiBjb25zdHJ1Y3RvciwgYWJvdmUuCiAgICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIHNfcmVmQ291bnRJbnZhbGlkRm9yU3RyaW5nSW1wbCA9IHNfcmVmQ291bnRGbGFnU3RhdGlj
IHwgc19yZWZDb3VudEZsYWdTaG91bGRSZXBvcnRlZENvc3Q7CiAKLSAgICB1bnNpZ25lZCBtX3Jl
ZkNvdW50QW5kRmxhZ3M7CisgICAgbXV0YWJsZSB1bnNpZ25lZCBtX3JlZkNvdW50QW5kRmxhZ3M7
CiAgICAgdW5zaWduZWQgbV9sZW5ndGg7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUveWFyci9ZYXJyUGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3lhcnIvWWFyclBhcnNlci5oCShyZXZpc2lvbiA5NzAwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS95YXJyL1lhcnJQYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjMxLDcgKzIzMSw3IEBA
IHByaXZhdGU6CiAgICAgICAgIDogbV9kZWxlZ2F0ZShkZWxlZ2F0ZSkKICAgICAgICAgLCBtX2Jh
Y2tSZWZlcmVuY2VMaW1pdChiYWNrUmVmZXJlbmNlTGltaXQpCiAgICAgICAgICwgbV9lcnIoTm9F
cnJvcikKLSAgICAgICAgLCBtX2RhdGEocGF0dGVybikKKyAgICAgICAgLCBtX2RhdGEocGF0dGVy
bi5jaGFyYWN0ZXJzMTYoKSkKICAgICAgICAgLCBtX3NpemUocGF0dGVybi5sZW5ndGgoKSkKICAg
ICAgICAgLCBtX2luZGV4KDApCiAgICAgICAgICwgbV9wYXJlbnRoZXNlc05lc3RpbmdEZXB0aCgw
KQpAQCAtNzkzLDcgKzc5Myw3IEBAIHByaXZhdGU6CiAgICAgRGVsZWdhdGUmIG1fZGVsZWdhdGU7
CiAgICAgdW5zaWduZWQgbV9iYWNrUmVmZXJlbmNlTGltaXQ7CiAgICAgRXJyb3JDb2RlIG1fZXJy
OwotICAgIGNvbnN0IFVTdHJpbmcmIG1fZGF0YTsKKyAgICBjb25zdCBVQ2hhciogbV9kYXRhOwog
ICAgIHVuc2lnbmVkIG1fc2l6ZTsKICAgICB1bnNpZ25lZCBtX2luZGV4OwogICAgIHVuc2lnbmVk
IG1fcGFyZW50aGVzZXNOZXN0aW5nRGVwdGg7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiA5NzAz
OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDE3IEBACisyMDExLTEwLTA5ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgor
CisgICAgICAgIEludmVzdGlnYXRlIHN0b3Jpbmcgc3RyaW5ncyBpbiA4LWJpdCBidWZmZXJzIHdo
ZW4gcG9zc2libGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTY2MTYxCisKKyAgICAgICAgQ2hhbmdlcyB0byBzdXBwb3J0IDggYml0IFN0cmluZ0ltcGwg
Y2hhbmdlcy4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBObyBuZXcgdGVzdHMsIHJlZmFjdG9yZWQgU3RyaW5nSW1wbCBmb3IgOCBiaXQgc3RyaW5ncy4K
KworICAgICAgICAqIHBsYXRmb3JtL3RleHQvY2YvU3RyaW5nSW1wbENGLmNwcDoKKyAgICAgICAg
KFdURjo6U3RyaW5nSW1wbDo6Y3JlYXRlQ0ZTdHJpbmcpOgorCiAyMDExLTEwLTA5ICBLZW50IFRh
bXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZW1vdmUgcmVkdW5kYW50IGNv
ZGUgb2YgSFRNTFNlbGVjdEVsZW1lbnQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L2NmL1N0cmluZ0ltcGxDRi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9jZi9TdHJpbmdJbXBsQ0YuY3BwCShyZXZpc2lvbiA5NzAwMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvY2YvU3RyaW5nSW1wbENGLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTM2LDEzICsxMzYsMTMgQEAgQ0ZTdHJpbmdSZWYgU3RyaW5nSW1wbDo6Y3JlYXRlQ0ZT
dHJpbmcoKQogewogICAgIENGQWxsb2NhdG9yUmVmIGFsbG9jYXRvciA9IChtX2xlbmd0aCAmJiBp
c01haW5UaHJlYWQoKSkgPyBTdHJpbmdXcmFwcGVyQ0ZBbGxvY2F0b3I6OmFsbG9jYXRvcigpIDog
MDsKICAgICBpZiAoIWFsbG9jYXRvcikKLSAgICAgICAgcmV0dXJuIENGU3RyaW5nQ3JlYXRlV2l0
aENoYXJhY3RlcnMoMCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVbmlDaGFyKj4obV9kYXRhKSwg
bV9sZW5ndGgpOworICAgICAgICByZXR1cm4gQ0ZTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygw
LCByZWludGVycHJldF9jYXN0PGNvbnN0IFVuaUNoYXIqPihjaGFyYWN0ZXJzKCkpLCBtX2xlbmd0
aCk7CiAKICAgICAvLyBQdXQgcG9pbnRlciB0byB0aGUgU3RyaW5nSW1wbCBpbiBhIGdsb2JhbCBz
byB0aGUgYWxsb2NhdG9yIGNhbiBzdG9yZSBpdCB3aXRoIHRoZSBDRlN0cmluZy4KICAgICBBU1NF
UlQoIVN0cmluZ1dyYXBwZXJDRkFsbG9jYXRvcjo6Y3VycmVudFN0cmluZyk7CiAgICAgU3RyaW5n
V3JhcHBlckNGQWxsb2NhdG9yOjpjdXJyZW50U3RyaW5nID0gdGhpczsKIAotICAgIENGU3RyaW5n
UmVmIHN0cmluZyA9IENGU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnNOb0NvcHkoYWxsb2NhdG9y
LCByZWludGVycHJldF9jYXN0PGNvbnN0IFVuaUNoYXIqPihtX2RhdGEpLCBtX2xlbmd0aCwga0NG
QWxsb2NhdG9yTnVsbCk7CisgICAgQ0ZTdHJpbmdSZWYgc3RyaW5nID0gQ0ZTdHJpbmdDcmVhdGVX
aXRoQ2hhcmFjdGVyc05vQ29weShhbGxvY2F0b3IsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVW5p
Q2hhcio+KGNoYXJhY3RlcnMoKSksIG1fbGVuZ3RoLCBrQ0ZBbGxvY2F0b3JOdWxsKTsKIAogICAg
IC8vIFRoZSBhbGxvY2F0b3IgY2xlYXJlZCB0aGUgZ2xvYmFsIHdoZW4gaXQgcmVhZCBpdCwgYnV0
IGFsc28gY2xlYXIgaXQgaGVyZSBqdXN0IGluIGNhc2UuCiAgICAgQVNTRVJUKCFTdHJpbmdXcmFw
cGVyQ0ZBbGxvY2F0b3I6OmN1cnJlbnRTdHJpbmcpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110526</attachid>
            <date>2011-10-11 09:43:47 -0700</date>
            <delta_ts>2011-10-13 13:59:23 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>66161-2.patch</filename>
            <type>text/plain</type>
            <size>79749</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTcxNTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTI0IEBA
CisyMDExLTEwLTExICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIEludmVzdGlnYXRlIHN0b3Jpbmcgc3RyaW5ncyBpbiA4LWJpdCBidWZmZXJzIHdoZW4gcG9z
c2libGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2
MTYxCisKKyAgICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgOCBiaXQgc3RyaW5nIGRhdGEgaW4gU3Ry
aW5nSW1wbC4gIENoYW5nZWQKKyAgICAgICAgKFVDaGFyKikgbV9kYXRhIHRvIG1fZGF0YTE2LiAg
QWRkZWQgY2hhciogbV9kYXRhOCBhcyBhIHVuaW9uCisgICAgICAgIHdpdGggbV9kYXRhMTYuICBB
ZGRlZCBVQ2hhciogbV9jb3B5RGF0YTE2IHRvIHRoZSBvdGhlciB1bmlvbgorICAgICAgICB0byBz
dG9yZSBhIDE2IGJpdCBjb3B5IG9mIGFuIDggYml0IHN0cmluZyB3aGVuIG5lZWRlZC4KKyAgICAg
ICAgQWRkZWQgY2hhcmFjdGVyczgoKSBhbmQgY2hhcmFjdGVyczE2KCkgYWNjZXNzb3IgbWV0aG9k
cworICAgICAgICB0aGF0IGFzc3VtZSB0aGUgY2FsbGVyIGhhcyBjaGVja2VkIHRoZSB1bmRlcmx5
aW5nIHN0cmluZyB0eXBlCisgICAgICAgIHZpYSB0aGUgbmV3IGlzOEJpdCgpIG1ldGhvZC4gVGhl
IGNoYXJhY3RlcnMoKSBtZXRob2Qgd2lsbAorICAgICAgICByZXR1cm4gYSBVQ2hhciogb2YgdGhl
IHN0cmluZywgbWF0ZXJpYWxpemluZyBhIDE2IGJpdCBjb3B5IGlmIHRoZQorICAgICAgICBzdHJp
bmcgaXMgYW4gOCBiaXQgc3RyaW5nLiAgQWRkZWQgdHdvIGZsYWdzLCBvbmUgZm9yIDggYml0IGJ1
ZmZlcgorICAgICAgICBhbmQgYSBzZWNvbmQgZm9yIGEgMTYgYml0IGNvcHkgZm9yIGFuIDggYml0
IHN0cmluZy4KKworICAgICAgICBPdmVyIHRpbWUgdGhlIGdvYWwgaXMgdG8gZWxpbWluYXRlIGNh
bGxzIHRvIGNoYXJhY3RlcnMoKSBhbmQKKyAgICAgICAgdXMgdGhlIGNoYXJhY3RlcjgoKSBhbmQg
Y2hhcmFjdGVyczE2KCkgYWNjZXNzb3JzLgorCisgICAgICAgIFRoaXMgcGF0Y2ggZG9lcyBub3Qg
aW5jbHVkZSBjaGFuZ2VzIHRoYXQgYWN0dWFsbHkgY3JlYXRlIDggYml0CisgICAgICAgIHN0cmlu
Z3MuIFRoaXMgaXMgdGhlIGZpcnN0IG9mIGF0IGxlYXN0IDggcGF0Y2hlcy4gIFN1YnNlcXVlbnQK
KyAgICAgICAgcGF0Y2hlcyB3aWxsIGJlIHN1Ym1pdHRlZCBmb3IgSklUIGNoYW5nZXMsIG1ha2lu
ZyB0aGUgSlNDIGxleGVyLAorICAgICAgICBwYXJzZXIgYW5kIGxpdGVyYWwgcGFyc2VyLCBKYXZh
U2NyaXB0IHN0cmluZyBjaGFuZ2VzIGFuZAorICAgICAgICB0aGVuIGNoYW5nZXMgaW4gd2ViY29y
ZSB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGUgOCBiaXQgc3RyaW5ncy4KKworICAgICAgICBUaGlz
IGNoYW5nZSBpcyBwZXJmb3JtYW5jZSBuZXV0cmFsIGZvciBTdW5TcGlkZXIgYW5kIFY4IHdoZW4K
KyAgICAgICAgcnVuIGZyb20gdGhlIGNvbW1hbmQgbGluZSB3aXRoICJqc2MiLgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUu
ZXhwOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS5kZWY6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOgor
ICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y2FsbEV2YWwpOgorICAgICAgICAqIHBhcnNlci9T
b3VyY2VQcm92aWRlci5oOgorICAgICAgICAoSlNDOjpVU3RyaW5nU291cmNlUHJvdmlkZXI6OmRh
dGEpOgorICAgICAgICAoSlNDOjpVU3RyaW5nU291cmNlUHJvdmlkZXI6OlVTdHJpbmdTb3VyY2VQ
cm92aWRlcik6CisgICAgICAgICogcnVudGltZS9JZGVudGlmaWVyLmNwcDoKKyAgICAgICAgKEpT
Qzo6SWRlbnRpZmllcjo6dG9VSW50MzIpOgorICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmcuY3Bw
OgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6cmVzb2x2ZVJvcGUpOgorICAgICAgICAoSlNDOjpK
U1N0cmluZzo6cmVzb2x2ZVJvcGVTbG93Q2FzZSk6CisgICAgICAgICogcnVudGltZS9SZWdFeHAu
Y3BwOgorICAgICAgICAoSlNDOjpSZWdFeHA6Om1hdGNoKToKKyAgICAgICAgKiBydW50aW1lL1N0
cmluZ1Byb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OmpzU3BsaWNlU3Vic3RyaW5nc1dpdGhT
ZXBhcmF0b3JzKToKKyAgICAgICAgKiBydW50aW1lL1VTdHJpbmcuY3BwOgorICAgICAgICAoSlND
OjpVU3RyaW5nOjp1dGY4KToKKyAgICAgICAgKiBydW50aW1lL1VTdHJpbmcuaDoKKyAgICAgICAg
KEpTQzo6VVN0cmluZzo6Y2hhcmFjdGVycyk6CisgICAgICAgIChKU0M6OlVTdHJpbmc6OmNoYXJh
Y3RlcnM4KToKKyAgICAgICAgKEpTQzo6VVN0cmluZzo6Y2hhcmFjdGVyczE2KToKKyAgICAgICAg
KEpTQzo6VVN0cmluZzo6aXM4Qml0KToKKyAgICAgICAgKEpTQzo6VVN0cmluZzo6b3BlcmF0b3Jb
XSk6CisgICAgICAgIChKU0M6OmNoYXIpOgorICAgICAgICAoSlNDOjpVQ2hhcik6CisgICAgICAg
IChKU0M6Om9wZXJhdG9yPT0pOgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0hhc2guaDoKKyAg
ICAgICAgKFdURjo6U3RyaW5nSGFzaDo6ZXF1YWwpOgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmlu
Z0ltcGwuY3BwOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjp+U3RyaW5nSW1wbCk6CisgICAg
ICAgIChXVEY6OlN0cmluZ0ltcGw6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQpOgorICAgICAgICAoV1RG
OjpTdHJpbmdJbXBsOjpzaGFyZWRCdWZmZXIxNik6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6
OmdldERhdGExNlNsb3dDYXNlKToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6Y29udGFpbnNP
bmx5V2hpdGVzcGFjZSk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OnN1YnN0cmluZyk6Cisg
ICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OmNoYXJhY3RlclN0YXJ0aW5nQXQpOgorICAgICAgICAo
V1RGOjpTdHJpbmdJbXBsOjpsb3dlcik6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OnVwcGVy
KToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6ZmlsbCk6CisgICAgICAgIChXVEY6OlN0cmlu
Z0ltcGw6OmZvbGRDYXNlKToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6c3RyaXBNYXRjaGVk
Q2hhcmFjdGVycyk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OnJlbW92ZUNoYXJhY3RlcnMp
OgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpzaW1wbGlmeU1hdGNoZWRDaGFyYWN0ZXJzVG9T
cGFjZSk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OnRvSW50U3RyaWN0KToKKyAgICAgICAg
KFdURjo6U3RyaW5nSW1wbDo6dG9VSW50U3RyaWN0KToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1w
bDo6dG9JbnQ2NFN0cmljdCk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OnRvVUludDY0U3Ry
aWN0KToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6dG9JbnRQdHJTdHJpY3QpOgorICAgICAg
ICAoV1RGOjpTdHJpbmdJbXBsOjp0b0ludCk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OnRv
VUludCk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OnRvSW50NjQpOgorICAgICAgICAoV1RG
OjpTdHJpbmdJbXBsOjp0b1VJbnQ2NCk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OnRvSW50
UHRyKToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6dG9Eb3VibGUpOgorICAgICAgICAoV1RG
OjpTdHJpbmdJbXBsOjp0b0Zsb2F0KToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6ZmluZCk6
CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OnJldmVyc2VGaW5kKToKKyAgICAgICAgKFdURjo6
U3RyaW5nSW1wbDo6cmVwbGFjZSk6CisgICAgICAgIChXVEY6OmVxdWFsKToKKyAgICAgICAgKFdU
Rjo6ZXF1YWxJZ25vcmluZ0Nhc2UpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpkZWZhdWx0
V3JpdGluZ0RpcmVjdGlvbik6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OmNyZWF0ZVN0cmlw
cGluZ051bGxDaGFyYWN0ZXJzU2xvd0Nhc2UpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjph
ZG9wdCk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OmNyZWF0ZVdpdGhUZXJtaW5hdGluZ051
bGxDaGFyYWN0ZXIpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjp0aHJlYWRzYWZlQ29weSk6
CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OmNyb3NzVGhyZWFkU3RyaW5nKToKKyAgICAgICAg
KiB3dGYvdGV4dC9TdHJpbmdJbXBsLmg6CisgICAgICAgIChXVEY6OnVuc2lnbmVkQ2hhclZhbHVl
KToKKyAgICAgICAgKFdURjo6Y2hhcik6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OlN0cmlu
Z0ltcGwpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpzZXRIYXNoKToKKyAgICAgICAgKFdU
Rjo6U3RyaW5nSW1wbDo6Y3JlYXRlOCk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OmNyZWF0
ZSk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQpOgor
ICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpmbGFnc09mZnNldCk6CisgICAgICAgIChXVEY6OlN0
cmluZ0ltcGw6OmZsYWdJczhCaXQpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpkYXRhT2Zm
c2V0KToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6Y2hhcmFjdGVyczgpOgorICAgICAgICAo
V1RGOjpTdHJpbmdJbXBsOjpjaGFyYWN0ZXJzMTYpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBs
OjpjaGFyYWN0ZXJzKToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6aGFzMTZCaXRTaGFkb3cp
OgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpoYXNoKToKKyAgICAgICAgKFdURjo6U3RyaW5n
SW1wbDo6Y29weUNoYXJzKToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6b3BlcmF0b3JbXSk6
CisgICAgICAgIChXVEY6OlVDaGFyKToKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdJbXBsQmFz
ZS5oOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsQmFzZTo6aXM4Qml0KToKKyAgICAgICAgKiB5
YXJyL1lhcnJQYXJzZXIuaDoKKyAgICAgICAgKEpTQzo6WWFycjo6UGFyc2VyOjpQYXJzZXIpOgor
CiAyMDExLTEwLTExICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcmFjbG91Z2hAYXBwbGUuY29tPgog
CiAgICAgICAgIFN3aXRjaCBSZWdpc3RlclNpemVkQm9vbGVhbi9kZmdDb252ZXJ0SlNWYWx1ZVRv
SW50MzIgcmV0dXJuIHR5cGUgdG8gc2l6ZV90CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUuZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS5leHAJKHJldmlzaW9uIDk3MDAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLmV4cAkod29ya2luZyBjb3B5KQpAQCAtMzU3LDcgKzM1Nyw2IEBA
IF9fWk4zSlNDZ3RFUktOU183VVN0cmluZ0VTMl8KIF9fWk4zSlNDbHRFUktOU183VVN0cmluZ0VT
Ml8KIF9fWk4zV1RGMTBTdHJpbmdJbXBsMTFyZXZlcnNlRmluZEVQUzBfagogX19aTjNXVEYxMFN0
cmluZ0ltcGwxMXJldmVyc2VGaW5kRXRqCi1fX1pOM1dURjEwU3RyaW5nSW1wbDEyc2hhcmVkQnVm
ZmVyRXYKIF9fWk4zV1RGMTBTdHJpbmdJbXBsMTZmaW5kSWdub3JpbmdDYXNlRVBLY2oKIF9fWk4z
V1RGMTBTdHJpbmdJbXBsMTZmaW5kSWdub3JpbmdDYXNlRVBTMF9qCiBfX1pOM1dURjEwU3RyaW5n
SW1wbDE4c2ltcGxpZnlXaGl0ZVNwYWNlRXYKQEAgLTU4Niw2ICs1ODUsNyBAQCBfX1pOSzNKU0M4
SlNTdHJpbmcxMXJlc29sdmVSb3BlRVBOU185RXhlCiBfX1pOSzNKU0M4SlNTdHJpbmc5dG9Cb29s
ZWFuRVBOU185RXhlY1N0YXRlRQogX19aTkszSlNDOUhhc2hUYWJsZTExY3JlYXRlVGFibGVFUE5T
XzEySlNHbG9iYWxEYXRhRQogX19aTkszSlNDOUhhc2hUYWJsZTExZGVsZXRlVGFibGVFdgorX19a
TkszV1RGMTBTdHJpbmdJbXBsMTdnZXREYXRhMTZTbG93Q2FzZUV2CiBfX1pOSzNXVEYxMkF0b21p
Y1N0cmluZzVsb3dlckV2CiBfX1pOSzNXVEYxM0RlY2ltYWxOdW1iZXIxNXRvU3RyaW5nRGVjaW1h
bEVQdGoKIF9fWk5LM1dURjEzRGVjaW1hbE51bWJlcjE5dG9TdHJpbmdFeHBvbmVudGlhbEVQdGoK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZGVmCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUuZGVmCShyZXZpc2lvbiA5NzAwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZGVmCSh3b3JraW5n
IGNvcHkpCkBAIC0xOTEsNiArMTkxLDcgQEAgRVhQT1JUUwogICAgID9nZXRAU3RydWN0dXJlQEpT
Q0BAUUFFSUFBVkpTR2xvYmFsRGF0YUAyQFBBVlN0cmluZ0ltcGxAV1RGQEBBQUlBQVBBVkpTQ2Vs
bEAyQEBaCiAgICAgP2dldENhbGxEYXRhQEpTQ2VsbEBKU0NAQFNBP0FXNENhbGxUeXBlQDJAUEFW
MTJAQUFUQ2FsbERhdGFAMkBAWgogICAgID9nZXRDb25zdHJ1Y3REYXRhQEpTQ2VsbEBKU0NAQFVB
RT9BVzRDb25zdHJ1Y3RUeXBlQDJAQUFUQ29uc3RydWN0RGF0YUAyQEBaCisgICAgP2dldERhdGEx
NlNsb3dDYXNlQFN0cmluZ0ltcGxAV1RGQEBBQkVQQl9XWFoKICAgICA/Z2V0T2JqZWN0QEpTQ2Vs
bEBKU0NAQFFBRVBBVkpTT2JqZWN0QDJAWFoKICAgICA/Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
QEpTR2xvYmFsT2JqZWN0QEpTQ0BAVUFFX05QQVZFeGVjU3RhdGVAMkBBQlZJZGVudGlmaWVyQDJA
QUFWUHJvcGVydHlEZXNjcmlwdG9yQDJAQFoKICAgICA/Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
QEpTT2JqZWN0QEpTQ0BAVUFFX05QQVZFeGVjU3RhdGVAMkBBQlZJZGVudGlmaWVyQDJAQUFWUHJv
cGVydHlEZXNjcmlwdG9yQDJAQFoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9JbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkocmV2aXNpb24gOTcwMDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00NDUsNyArNDQ1LDcgQEAgTkVWRVJfSU5MSU5FIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmNh
bGxFdgogICAgICAgICBpZiAoIWNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkpIHsKICAgICAgICAg
ICAgIC8vIEZJWE1FOiBXZSBjYW4gdXNlIHRoZSBwcmVwYXJzZXIgaW4gc3RyaWN0IG1vZGUsIHdl
IGp1c3QgbmVlZCBhZGRpdGlvbmFsIGxvZ2ljCiAgICAgICAgICAgICAvLyB0byBwcmV2ZW50IGR1
cGxpY2F0ZXMuCi0gICAgICAgICAgICBMaXRlcmFsUGFyc2VyIHByZXBhcnNlcihjYWxsRnJhbWUs
IHByb2dyYW1Tb3VyY2UuY2hhcmFjdGVycygpLCBwcm9ncmFtU291cmNlLmxlbmd0aCgpLCBMaXRl
cmFsUGFyc2VyOjpOb25TdHJpY3RKU09OKTsKKyAgICAgICAgICAgIExpdGVyYWxQYXJzZXIgcHJl
cGFyc2VyKGNhbGxGcmFtZSwgcHJvZ3JhbVNvdXJjZS5jaGFyYWN0ZXJzMTYoKSwgcHJvZ3JhbVNv
dXJjZS5sZW5ndGgoKSwgTGl0ZXJhbFBhcnNlcjo6Tm9uU3RyaWN0SlNPTik7CiAgICAgICAgICAg
ICBpZiAoSlNWYWx1ZSBwYXJzZWRPYmplY3QgPSBwcmVwYXJzZXIudHJ5TGl0ZXJhbFBhcnNlKCkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlZE9iamVjdDsKICAgICAgICAgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VQcm92aWRlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlUHJvdmlkZXIuaAkocmV2aXNp
b24gOTcwMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJjZVByb3ZpZGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTg4LDE3ICs4OCwxOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgewogICAgICAgICAgICAgcmV0dXJuIG1fc291cmNlLnN1YnN0cmluZ1NoYXJpbmdJbXBs
KHN0YXJ0LCBlbmQgLSBzdGFydCk7CiAgICAgICAgIH0KLSAgICAgICAgY29uc3QgVUNoYXIqIGRh
dGEoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS5jaGFyYWN0ZXJzKCk7IH0KKyAgICAgICAgY29u
c3QgVUNoYXIqIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0KICAgICAgICAgaW50IGxl
bmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLmxlbmd0aCgpOyB9CiAKICAgICBwcml2YXRl
OgogICAgICAgICBVU3RyaW5nU291cmNlUHJvdmlkZXIoY29uc3QgVVN0cmluZyYgc291cmNlLCBj
b25zdCBVU3RyaW5nJiB1cmwpCiAgICAgICAgICAgICA6IFNvdXJjZVByb3ZpZGVyKHVybCkKICAg
ICAgICAgICAgICwgbV9zb3VyY2Uoc291cmNlKQorICAgICAgICAgICAgLCBtX2RhdGEobV9zb3Vy
Y2UuY2hhcmFjdGVyczE2KCkpCiAgICAgICAgIHsKICAgICAgICAgfQogCiAgICAgICAgIFVTdHJp
bmcgbV9zb3VyY2U7CisgICAgICAgIGNvbnN0IFVDaGFyKiBtX2RhdGE7CiAgICAgfTsKICAgICAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SWRlbnRpZmllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSWRlbnRpZmllci5jcHAJKHJldmlzaW9uIDk3MDAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSWRlbnRpZmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NCwxMiArMTU0
LDEzIEBAIHVpbnQzMl90IElkZW50aWZpZXI6OnRvVUludDMyKGNvbnN0IFVTdHIKICAgICBvayA9
IGZhbHNlOwogCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOwotICAgIGNv
bnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0gc3RyaW5nLmNoYXJhY3RlcnMoKTsKIAogICAgIC8vIEFu
IGVtcHR5IHN0cmluZyBpcyBub3QgYSBudW1iZXIuCiAgICAgaWYgKCFsZW5ndGgpCiAgICAgICAg
IHJldHVybiAwOwogCisgICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSBzdHJpbmcuY2hhcmFj
dGVyczE2KCk7CisKICAgICAvLyBHZXQgdGhlIGZpcnN0IGNoYXJhY3RlciwgdHVybmluZyBpdCBp
bnRvIGEgZGlnaXQuCiAgICAgdWludDMyX3QgdmFsdWUgPSBjaGFyYWN0ZXJzWzBdIC0gJzAnOwog
ICAgIGlmICh2YWx1ZSA+IDkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1N0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTdHJpbmcuY3BwCShyZXZpc2lvbiA5NzAwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU3RyaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksMTQgKzU5LDE0IEBAIHZv
aWQgSlNTdHJpbmc6OnJlc29sdmVSb3BlKEV4ZWNTdGF0ZSogZXgKICAgICBVQ2hhciogcG9zaXRp
b24gPSBidWZmZXI7CiAgICAgU3RyaW5nSW1wbCogc3RyaW5nID0gc3RhdGljX2Nhc3Q8U3RyaW5n
SW1wbCo+KGN1cnJlbnRGaWJlcik7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RyaW5nLT5sZW5n
dGgoKTsKLSAgICBTdHJpbmdJbXBsOjpjb3B5Q2hhcnMocG9zaXRpb24sIHN0cmluZy0+Y2hhcmFj
dGVycygpLCBsZW5ndGgpOworICAgIFN0cmluZ0ltcGw6OmNvcHlDaGFycyhwb3NpdGlvbiwgc3Ry
aW5nLT5jaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoKTsKIAogICAgIGlmIChtX2ZpYmVyQ291bnQgPiAx
KSB7CiAgICAgICAgIHBvc2l0aW9uICs9IGxlbmd0aDsKICAgICAgICAgY3VycmVudEZpYmVyID0g
bV9maWJlcnNbMV07CiAgICAgICAgIHN0cmluZyA9IHN0YXRpY19jYXN0PFN0cmluZ0ltcGwqPihj
dXJyZW50RmliZXIpOwogICAgICAgICBsZW5ndGggPSBzdHJpbmctPmxlbmd0aCgpOwotICAgICAg
ICBTdHJpbmdJbXBsOjpjb3B5Q2hhcnMocG9zaXRpb24sIHN0cmluZy0+Y2hhcmFjdGVycygpLCBs
ZW5ndGgpOworICAgICAgICBTdHJpbmdJbXBsOjpjb3B5Q2hhcnMocG9zaXRpb24sIHN0cmluZy0+
Y2hhcmFjdGVyczE2KCksIGxlbmd0aCk7CiAgICAgICAgIHBvc2l0aW9uICs9IGxlbmd0aDsKICAg
ICB9CiAKQEAgLTExNSw3ICsxMTUsNyBAQCB2b2lkIEpTU3RyaW5nOjpyZXNvbHZlUm9wZVNsb3dD
YXNlKEV4ZWNTCiAgICAgICAgICAgICBTdHJpbmdJbXBsKiBzdHJpbmcgPSBzdGF0aWNfY2FzdDxT
dHJpbmdJbXBsKj4oY3VycmVudEZpYmVyKTsKICAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9
IHN0cmluZy0+bGVuZ3RoKCk7CiAgICAgICAgICAgICBwb3NpdGlvbiAtPSBsZW5ndGg7Ci0gICAg
ICAgICAgICBTdHJpbmdJbXBsOjpjb3B5Q2hhcnMocG9zaXRpb24sIHN0cmluZy0+Y2hhcmFjdGVy
cygpLCBsZW5ndGgpOworICAgICAgICAgICAgU3RyaW5nSW1wbDo6Y29weUNoYXJzKHBvc2l0aW9u
LCBzdHJpbmctPmNoYXJhY3RlcnMxNigpLCBsZW5ndGgpOwogCiAgICAgICAgICAgICAvLyBXYXMg
dGhpcyB0aGUgbGFzdCBpdGVtIGluIHRoZSB3b3JrIHF1ZXVlPwogICAgICAgICAgICAgaWYgKHdv
cmtRdWV1ZS5pc0VtcHR5KCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1JlZ0V4cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UmVnRXhwLmNwcAkocmV2aXNpb24gOTcwMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9SZWdFeHAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjYsOSArMzY2LDkgQEAgaW50IFJl
Z0V4cDo6bWF0Y2goSlNHbG9iYWxEYXRhJiBnbG9iYWxEYQogI2lmIEVOQUJMRShZQVJSX0pJVCkK
ICAgICAgICAgaWYgKG1fc3RhdGUgPT0gSklUQ29kZSkgewogICAgICAgICAgICAgaWYgKHMuaXM4
Qml0KCkpCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gWWFycjo6ZXhlY3V0ZShtX3JlcHJlc2Vu
dGF0aW9uLT5tX3JlZ0V4cEpJVENvZGUsIHMubGF0aW4xKCkuZGF0YSgpLCBzdGFydE9mZnNldCwg
cy5sZW5ndGgoKSwgb2Zmc2V0VmVjdG9yKTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBZYXJy
OjpleGVjdXRlKG1fcmVwcmVzZW50YXRpb24tPm1fcmVnRXhwSklUQ29kZSwgcy5jaGFyYWN0ZXJz
OCgpLCBzdGFydE9mZnNldCwgcy5sZW5ndGgoKSwgb2Zmc2V0VmVjdG9yKTsKICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBZYXJyOjpleGVjdXRlKG1fcmVwcmVzZW50
YXRpb24tPm1fcmVnRXhwSklUQ29kZSwgcy5jaGFyYWN0ZXJzKCksIHN0YXJ0T2Zmc2V0LCBzLmxl
bmd0aCgpLCBvZmZzZXRWZWN0b3IpOworICAgICAgICAgICAgICAgIHJlc3VsdCA9IFlhcnI6OmV4
ZWN1dGUobV9yZXByZXNlbnRhdGlvbi0+bV9yZWdFeHBKSVRDb2RlLCBzLmNoYXJhY3RlcnMxNigp
LCBzdGFydE9mZnNldCwgcy5sZW5ndGgoKSwgb2Zmc2V0VmVjdG9yKTsKICNpZiBFTkFCTEUoWUFS
Ul9KSVRfREVCVUcpCiAgICAgICAgICAgICBtYXRjaENvbXBhcmVXaXRoSW50ZXJwcmV0ZXIocywg
c3RhcnRPZmZzZXQsIG9mZnNldFZlY3RvciwgcmVzdWx0KTsKICNlbmRpZgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCShyZXZp
c2lvbiA5NzAwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3Rv
dHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzMCwxMyArMzMwLDEzIEBAIHN0YXRpYyBBTFdB
WVNfSU5MSU5FIEpTVmFsdWUganNTcGxpY2VTdWIKICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1h
eENvdW50OyBpKyspIHsKICAgICAgICAgaWYgKGkgPCByYW5nZUNvdW50KSB7CiAgICAgICAgICAg
ICBpZiAoaW50IHNyY0xlbiA9IHN1YnN0cmluZ1Jhbmdlc1tpXS5sZW5ndGgpIHsKLSAgICAgICAg
ICAgICAgICBTdHJpbmdJbXBsOjpjb3B5Q2hhcnMoYnVmZmVyICsgYnVmZmVyUG9zLCBzb3VyY2Uu
Y2hhcmFjdGVycygpICsgc3Vic3RyaW5nUmFuZ2VzW2ldLnBvc2l0aW9uLCBzcmNMZW4pOworICAg
ICAgICAgICAgICAgIFN0cmluZ0ltcGw6OmNvcHlDaGFycyhidWZmZXIgKyBidWZmZXJQb3MsIHNv
dXJjZS5jaGFyYWN0ZXJzMTYoKSArIHN1YnN0cmluZ1Jhbmdlc1tpXS5wb3NpdGlvbiwgc3JjTGVu
KTsKICAgICAgICAgICAgICAgICBidWZmZXJQb3MgKz0gc3JjTGVuOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgICAgIGlmIChpIDwgc2VwYXJhdG9yQ291bnQpIHsKICAgICAgICAgICAg
IGlmIChpbnQgc2VwTGVuID0gc2VwYXJhdG9yc1tpXS5sZW5ndGgoKSkgewotICAgICAgICAgICAg
ICAgIFN0cmluZ0ltcGw6OmNvcHlDaGFycyhidWZmZXIgKyBidWZmZXJQb3MsIHNlcGFyYXRvcnNb
aV0uY2hhcmFjdGVycygpLCBzZXBMZW4pOworICAgICAgICAgICAgICAgIFN0cmluZ0ltcGw6OmNv
cHlDaGFycyhidWZmZXIgKyBidWZmZXJQb3MsIHNlcGFyYXRvcnNbaV0uY2hhcmFjdGVyczE2KCks
IHNlcExlbik7CiAgICAgICAgICAgICAgICAgYnVmZmVyUG9zICs9IHNlcExlbjsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0
cmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0
cmluZy5jcHAJKHJldmlzaW9uIDk3MDAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVVN0cmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxNyw3ICszMTcsOSBAQCBzdGF0aWMg
aW5saW5lIHZvaWQgcHV0VVRGOFRyaXBsZShjaGFyKiYgCiBDU3RyaW5nIFVTdHJpbmc6OnV0Zjgo
Ym9vbCBzdHJpY3QpIGNvbnN0CiB7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gdGhpcy0+bGVuZ3Ro
KCk7Ci0gICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSB0aGlzLT5jaGFyYWN0ZXJzKCk7CisK
KyAgICBpZiAoaXM4Qml0KCkpCisgICAgICAgIHJldHVybiBDU3RyaW5nKGNoYXJhY3RlcnM4KCks
IGxlbmd0aCk7CiAKICAgICAvLyBBbGxvY2F0ZSBhIGJ1ZmZlciBiaWcgZW5vdWdoIHRvIGhvbGQg
YWxsIHRoZSBjaGFyYWN0ZXJzCiAgICAgLy8gKGFuIGluZGl2aWR1YWwgVVRGLTE2IFVDaGFyIGNh
biBvbmx5IGV4cGFuZCB0byAzIFVURi04IGJ5dGVzKS4KQEAgLTMzMSw2ICszMzMsOCBAQCBDU3Ry
aW5nIFVTdHJpbmc6OnV0ZjgoYm9vbCBzdHJpY3QpIGNvbnN0CiAgICAgLy8gICAgYnVmZmVyIHdp
dGhvdXQgcmVhbGxvY2luZyAoc2F5LCAxLjUgeCBsZW5ndGgpLgogICAgIGlmIChsZW5ndGggPiBu
dW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIC8gMykKICAgICAgICAgcmV0dXJuIENTdHJp
bmcoKTsKKworICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0gdGhpcy0+Y2hhcmFjdGVyczE2
KCk7CiAgICAgVmVjdG9yPGNoYXIsIDEwMjQ+IGJ1ZmZlclZlY3RvcihsZW5ndGggKiAzKTsKIAog
ICAgIGNoYXIqIGJ1ZmZlciA9IGJ1ZmZlclZlY3Rvci5kYXRhKCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9VU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZy5oCShyZXZpc2lvbiA5NzAwMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1VTdHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsMTAg
KzczLDI4IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmICghbV9pbXBsKQogICAgICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiBtX2ltcGwtPmNoYXJhY3RlcnMoKTsKKyAgICAg
ICAgcmV0dXJuIG1faW1wbC0+Y2hhcmFjdGVyczE2KCk7CiAgICAgfQogCi0gICAgYm9vbCBpczhC
aXQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIGNvbnN0IGNoYXIqIGNoYXJhY3RlcnM4
KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghbV9pbXBsKQorICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgIEFTU0VSVChtX2ltcGwtPmlzOEJpdCgpKTsKKyAgICAgICAgcmV0dXJuIG1f
aW1wbC0+Y2hhcmFjdGVyczgoKTsKKyAgICB9CisKKyAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVy
czE2KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghbV9pbXBsKQorICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgIEFTU0VSVCghbV9pbXBsLT5pczhCaXQoKSk7CisgICAgICAgIHJldHVy
biBtX2ltcGwtPmNoYXJhY3RlcnMxNigpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IENoYXJUeXBlPgorICAgIGlubGluZSBjb25zdCBDaGFyVHlwZSogZ2V0Q2hhcmFjdGVycygpIGNv
bnN0OworICAgIGJvb2wgaXM4Qml0KCkgY29uc3QgeyByZXR1cm4gbV9pbXBsLT5pczhCaXQoKTsg
fQogCiAgICAgQ1N0cmluZyBhc2NpaSgpIGNvbnN0OwogICAgIENTdHJpbmcgbGF0aW4xKCkgY29u
c3Q7CkBAIC04Niw3ICsxMDQsOSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAoIW1faW1w
bCB8fCBpbmRleCA+PSBtX2ltcGwtPmxlbmd0aCgpKQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgICAgIHJldHVybiBtX2ltcGwtPmNoYXJhY3RlcnMoKVtpbmRleF07CisgICAgICAgIGlmIChp
czhCaXQoKSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPiht
X2ltcGwtPmNoYXJhY3RlcnM4KClbaW5kZXhdKTsKKyAgICAgICAgcmV0dXJuIG1faW1wbC0+Y2hh
cmFjdGVyczE2KClbaW5kZXhdOwogICAgIH0KIAogICAgIHN0YXRpYyBVU3RyaW5nIG51bWJlcihp
bnQpOwpAQCAtMTE1LDYgKzEzNSwxOCBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxTdHJpbmdJbXBs
PiBtX2ltcGw7CiB9OwogCit0ZW1wbGF0ZTw+CitpbmxpbmUgY29uc3QgY2hhciogVVN0cmluZzo6
Z2V0Q2hhcmFjdGVyczxjaGFyPigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNoYXJhY3RlcnM4KCk7
Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBjb25zdCBVQ2hhciogVVN0cmluZzo6Z2V0Q2hhcmFj
dGVyczxVQ2hhcj4oKSBjb25zdAoreworICAgIHJldHVybiBjaGFyYWN0ZXJzMTYoKTsKK30KKwog
QUxXQVlTX0lOTElORSBib29sIG9wZXJhdG9yPT0oY29uc3QgVVN0cmluZyYgczEsIGNvbnN0IFVT
dHJpbmcmIHMyKQogewogICAgIFN0cmluZ0ltcGwqIHJlcDEgPSBzMS5pbXBsKCk7CkBAIC0xMjQs
MjggKzE1Niw2OCBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgb3BlcmF0b3I9PShjb25zdCBVU3RyCiAK
ICAgICBpZiAocmVwMSA9PSByZXAyKSAvLyBJZiB0aGV5J3JlIHRoZSBzYW1lIHJlcCwgdGhleSdy
ZSBlcXVhbC4KICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCisKICAgICBpZiAocmVwMSkKICAg
ICAgICAgc2l6ZTEgPSByZXAxLT5sZW5ndGgoKTsKLSAgICAgICAgCisKICAgICBpZiAocmVwMikK
ICAgICAgICAgc2l6ZTIgPSByZXAyLT5sZW5ndGgoKTsKLSAgICAgICAgCisKICAgICBpZiAoc2l6
ZTEgIT0gc2l6ZTIpIC8vIElmIHRoZSBsZW5ndGhzIGFyZSBub3QgdGhlIHNhbWUsIHdlJ3JlIGRv
bmUuCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKwogICAgIGlmICghc2l6ZTEpCiAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgIAorCiAgICAgLy8gQXQgdGhpcyBwb2ludCB3ZSBrbm93IAog
ICAgIC8vICAgKGEpIHRoYXQgdGhlIHN0cmluZ3MgYXJlIHRoZSBzYW1lIGxlbmd0aCBhbmQKICAg
ICAvLyAgIChiKSB0aGF0IHRoZXkgYXJlIGdyZWF0ZXIgdGhhbiB6ZXJvIGxlbmd0aC4KLSAgICBj
b25zdCBVQ2hhciogZDEgPSByZXAxLT5jaGFyYWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIqIGQy
ID0gcmVwMi0+Y2hhcmFjdGVycygpOwotICAgIAorICAgIGlmIChyZXAxLT5pczhCaXQoKSkgewor
ICAgICAgICBjb25zdCBjaGFyKiBkMSA9IHJlcDEtPmNoYXJhY3RlcnM4KCk7CisgICAgICAgIGlm
IChyZXAyLT5pczhCaXQoKSkgeworICAgICAgICAgICAgY29uc3QgY2hhciogZDIgPSByZXAyLT5j
aGFyYWN0ZXJzOCgpOworCisgICAgICAgICAgICBpZiAoZDEgPT0gZDIpIC8vIENoZWNrIHRvIHNl
ZSBpZiB0aGUgZGF0YSBwb2ludGVycyBhcmUgdGhlIHNhbWUuCisgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICAgICAgICAgIC8vIERvIHF1aWNrIGNoZWNrcyBmb3Igc2l6ZXMgMSBh
bmQgMi4KKyAgICAgICAgICAgIHN3aXRjaCAoc2l6ZTEpIHsKKyAgICAgICAgICAgIGNhc2UgMToK
KyAgICAgICAgICAgICAgICByZXR1cm4gZDFbMF0gPT0gZDJbMF07CisgICAgICAgICAgICBjYXNl
IDI6CisgICAgICAgICAgICAgICAgcmV0dXJuIChkMVswXSA9PSBkMlswXSkgJiAoZDFbMV0gPT0g
ZDJbMV0pOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gKCFt
ZW1jbXAoZDEsIGQyLCBzaXplMSAqIHNpemVvZihjaGFyKSkpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgY29uc3QgVUNoYXIqIGQyID0gcmVwMi0+Y2hhcmFjdGVyczE2KCk7
CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemUxOyBpKyspIHsKKyAgICAg
ICAgICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihkMVtpXSkgIT0gZDJbaV0pCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKworICAgIGlmIChyZXAyLT5pczhCaXQoKSkgeworICAgICAgICBjb25zdCBV
Q2hhciogZDEgPSByZXAxLT5jaGFyYWN0ZXJzMTYoKTsKKyAgICAgICAgY29uc3QgY2hhciogZDIg
PSByZXAyLT5jaGFyYWN0ZXJzOCgpOworCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzaXplMTsgaSsrKSB7CisgICAgICAgICAgICBpZiAoZDFbaV0gIT0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcj4oZDJbaV0pKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIH0KKworICAgIGNvbnN0IFVDaGFyKiBk
MSA9IHJlcDEtPmNoYXJhY3RlcnMxNigpOworICAgIGNvbnN0IFVDaGFyKiBkMiA9IHJlcDItPmNo
YXJhY3RlcnMxNigpOworCiAgICAgaWYgKGQxID09IGQyKSAvLyBDaGVjayB0byBzZWUgaWYgdGhl
IGRhdGEgcG9pbnRlcnMgYXJlIHRoZSBzYW1lLgogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAK
KwogICAgIC8vIERvIHF1aWNrIGNoZWNrcyBmb3Igc2l6ZXMgMSBhbmQgMi4KICAgICBzd2l0Y2gg
KHNpemUxKSB7CiAgICAgY2FzZSAxOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90
ZXh0L1N0cmluZ0hhc2guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L3RleHQvU3RyaW5nSGFzaC5oCShyZXZpc2lvbiA5NzAwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93dGYvdGV4dC9TdHJpbmdIYXNoLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDExICs1Myw2
NSBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgICAgIGlmIChhTGVuZ3RoICE9IGJMZW5ndGgp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgICAgICAgICBpZiAoYS0+aXM4
Qml0KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoYi0+aXM4Qml0KCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgLy8gRklYTUU6IHBlcmhhcHMgd2Ugc2hvdWxkIGhhdmUgYSBtb3JlIGFic3RyYWN0
IG1hY3JvIHRoYXQgaW5kaWNhdGVzIHdoZW4KKyAgICAgICAgICAgICAgICAgICAgLy8gZ29pbmcg
NCBieXRlcyBhdCBhIHRpbWUgaXMgdW5zYWZlCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo
YXIqIGFDaGFycyA9IGEtPmNoYXJhY3RlcnM4KCk7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIqIGJDaGFycyA9IGItPmNoYXJhY3RlcnM4KCk7CisKKyAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgaSA9IDA7CisjaWYgKENQVShYODYpIHx8IENQVShYODZfNjQpKQorICAgICAgICAg
ICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyc1BlckludCA9IHNpemVvZih1aW50MzJfdCkg
LyBzaXplb2YoY2hhcik7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAg
ICBpZiAoYUxlbmd0aCA+IGNoYXJzUGVySW50KSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBzdG9wQ291bnQgPSBhTGVuZ3RoICYgfihjaGFyc1BlckludCAtIDEpOworICAgICAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50MzJf
dCogYUludENoYXJhY3RlcnMgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oYUNo
YXJzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90KiBiSW50Q2hhcmFj
dGVycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihiQ2hhcnMpOworICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaSA8IHN0b3BDb3VudDsgaSAr
PSBjaGFyc1BlckludCwgKytqKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFJ
bnRDaGFyYWN0ZXJzW2pdICE9IGJJbnRDaGFyYWN0ZXJzW2pdKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICBmb3IgKDsg
aSA8IGFMZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFDaGFyc1tp
XSAhPSBiQ2hhcnNbaV0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAvLyBhIGlzIDhiaXQsIGIgaXMgMTZiaXQKKyAgICAgICAgICAgICAgICBjb25zdCBjaGFy
KiBhQ2hhcnMgPSBhLT5jaGFyYWN0ZXJzOCgpOworICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFy
KiBiQ2hhcnMgPSBiLT5jaGFyYWN0ZXJzMTYoKTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpICE9IGFMZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBpZiAo
dW5zaWduZWRDaGFyVmFsdWUoKmFDaGFycysrKSAhPSAqYkNoYXJzKyspCisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChiLT5p
czhCaXQoKSkgeworICAgICAgICAgICAgICAgIC8vIGEgaXMgOGJpdCwgYiBpcyAxNmJpdAorICAg
ICAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBhQ2hhcnMgPSBhLT5jaGFyYWN0ZXJzMTYoKTsKKyAg
ICAgICAgICAgICAgICBjb25zdCBjaGFyKiBiQ2hhcnMgPSBiLT5jaGFyYWN0ZXJzOCgpOworICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgIT0gYUxlbmd0aDsgKytpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmICgqYUNoYXJzKysgIT0gdW5zaWduZWRDaGFyVmFsdWUoKmJD
aGFycysrKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgLy8gMTZiaXQgYSAmIGIKICAgICAgICAgICAgIC8vIEZJWE1FOiBwZXJo
YXBzIHdlIHNob3VsZCBoYXZlIGEgbW9yZSBhYnN0cmFjdCBtYWNybyB0aGF0IGluZGljYXRlcyB3
aGVuCiAgICAgICAgICAgICAvLyBnb2luZyA0IGJ5dGVzIGF0IGEgdGltZSBpcyB1bnNhZmUKICNp
ZiBDUFUoQVJNKSB8fCBDUFUoU0g0KSB8fCBDUFUoTUlQUykgfHwgQ1BVKFNQQVJDKQotICAgICAg
ICAgICAgY29uc3QgVUNoYXIqIGFDaGFycyA9IGEtPmNoYXJhY3RlcnMoKTsKLSAgICAgICAgICAg
IGNvbnN0IFVDaGFyKiBiQ2hhcnMgPSBiLT5jaGFyYWN0ZXJzKCk7CisgICAgICAgICAgICBjb25z
dCBVQ2hhciogYUNoYXJzID0gYS0+Y2hhcmFjdGVyczE2KCk7CisgICAgICAgICAgICBjb25zdCBV
Q2hhciogYkNoYXJzID0gYi0+Y2hhcmFjdGVyczE2KCk7CiAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpICE9IGFMZW5ndGg7ICsraSkgewogICAgICAgICAgICAgICAgIGlmICgqYUNo
YXJzKysgIT0gKmJDaGFycysrKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBA
IC02NSw4ICsxMTksOCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogI2Vsc2UKICAgICAgICAgICAgIC8qIERvIGl0IDQtYnl0ZXMtYXQtYS10aW1lIG9uIGFyY2hp
dGVjdHVyZXMgd2hlcmUgaXQncyBzYWZlICovCi0gICAgICAgICAgICBjb25zdCB1aW50MzJfdCog
YUNoYXJzID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KGEtPmNoYXJhY3RlcnMo
KSk7Ci0gICAgICAgICAgICBjb25zdCB1aW50MzJfdCogYkNoYXJzID0gcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1aW50MzJfdCo+KGItPmNoYXJhY3RlcnMoKSk7CisgICAgICAgICAgICBjb25zdCB1
aW50MzJfdCogYUNoYXJzID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KGEtPmNo
YXJhY3RlcnMxNigpKTsKKyAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90KiBiQ2hhcnMgPSByZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oYi0+Y2hhcmFjdGVyczE2KCkpOwogCiAgICAg
ICAgICAgICB1bnNpZ25lZCBoYWxmTGVuZ3RoID0gYUxlbmd0aCA+PiAxOwogICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSAhPSBoYWxmTGVuZ3RoOyArK2kpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL3RleHQvU3RyaW5nSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwCShyZXZpc2lvbiA5NzAw
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJpbmdJbXBsLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTgsOCArNTgsMTMgQEAgU3RyaW5nSW1wbDo6flN0cmluZ0ltcGwoKQog
ICAgIGlmIChvd25lcnNoaXAgIT0gQnVmZmVySW50ZXJuYWwpIHsKICAgICAgICAgaWYgKG93bmVy
c2hpcCA9PSBCdWZmZXJPd25lZCkgewogICAgICAgICAgICAgQVNTRVJUKCFtX3NoYXJlZEJ1ZmZl
cik7Ci0gICAgICAgICAgICBBU1NFUlQobV9kYXRhKTsKLSAgICAgICAgICAgIGZhc3RGcmVlKGNv
bnN0X2Nhc3Q8VUNoYXIqPihtX2RhdGEpKTsKKyAgICAgICAgICAgIC8vIFdlIHVzZSBtX2RhdGE4
LCBidXQgc2luY2UgaXQgaXMgYSB1bmlvbiB3aXRoIG1fZGF0YTE2IHRoaXMgd29ya3MgZWl0aGVy
IHdheS4KKyAgICAgICAgICAgIEFTU0VSVChtX2RhdGE4KTsKKyAgICAgICAgICAgIGZhc3RGcmVl
KGNvbnN0X2Nhc3Q8Y2hhcio+KG1fZGF0YTgpKTsKKyAgICAgICAgICAgIGlmIChoYXMxNkJpdFNo
YWRvdygpKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKG1fY29weURhdGExNik7CisgICAgICAg
ICAgICAgICAgZmFzdEZyZWUobV9jb3B5RGF0YTE2KTsKKyAgICAgICAgICAgIH0KICAgICAgICAg
fSBlbHNlIGlmIChvd25lcnNoaXAgPT0gQnVmZmVyU3Vic3RyaW5nKSB7CiAgICAgICAgICAgICBB
U1NFUlQobV9zdWJzdHJpbmdCdWZmZXIpOwogICAgICAgICAgICAgbV9zdWJzdHJpbmdCdWZmZXIt
PmRlcmVmKCk7CkBAIC03MSw2ICs3NiwyNSBAQCBTdHJpbmdJbXBsOjp+U3RyaW5nSW1wbCgpCiAg
ICAgfQogfQogCitQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmNyZWF0ZVVuaW5p
dGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoLCBjaGFyKiYgZGF0YSkKK3sKKyAgICBpZiAoIWxlbmd0
aCkgeworICAgICAgICBkYXRhID0gMDsKKyAgICAgICAgcmV0dXJuIGVtcHR5KCk7CisgICAgfQor
CisgICAgLy8gQWxsb2NhdGUgYSBzaW5nbGUgYnVmZmVyIGxhcmdlIGVub3VnaCB0byBjb250YWlu
IHRoZSBTdHJpbmdJbXBsCisgICAgLy8gc3RydWN0IGFzIHdlbGwgYXMgdGhlIGRhdGEgd2hpY2gg
aXQgY29udGFpbnMuIFRoaXMgcmVtb3ZlcyBvbmUKKyAgICAvLyBoZWFwIGFsbG9jYXRpb24gZnJv
bSB0aGlzIGNhbGwuCisgICAgaWYgKGxlbmd0aCA+ICgoc3RkOjpudW1lcmljX2xpbWl0czx1bnNp
Z25lZD46Om1heCgpIC0gc2l6ZW9mKFN0cmluZ0ltcGwpKSAvIHNpemVvZihjaGFyKSkpCisgICAg
ICAgIENSQVNIKCk7CisgICAgc2l6ZV90IHNpemUgPSBzaXplb2YoU3RyaW5nSW1wbCkgKyBsZW5n
dGggKiBzaXplb2YoY2hhcik7CisgICAgU3RyaW5nSW1wbCogc3RyaW5nID0gc3RhdGljX2Nhc3Q8
U3RyaW5nSW1wbCo+KGZhc3RNYWxsb2Moc2l6ZSkpOworCisgICAgZGF0YSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhcio+KHN0cmluZyArIDEpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgKHN0cmlu
ZykgU3RyaW5nSW1wbChsZW5ndGgsIEZvcmNlOEJpdENvbnN0cnVjdG9yKSk7Cit9CisKIFBhc3NS
ZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25l
ZCBsZW5ndGgsIFVDaGFyKiYgZGF0YSkKIHsKICAgICBpZiAoIWxlbmd0aCkgewpAQCAtMTMyLDcg
KzE1Niw3IEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y3JlYXQKICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFN0cmluZ0ltcGwoY2hhcmFjdGVycywgbGVuZ3RoLCBzaGFyZWRC
dWZmZXIpKTsKIH0KIAotU2hhcmVkVUNoYXIqIFN0cmluZ0ltcGw6OnNoYXJlZEJ1ZmZlcigpCitT
aGFyZWRVQ2hhciogU3RyaW5nSW1wbDo6c2hhcmVkQnVmZmVyMTYoKQogewogICAgIGlmIChtX2xl
bmd0aCA8IG1pbkxlbmd0aFRvU2hhcmUpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMTQ0LDEwICsx
NjgsMTMgQEAgU2hhcmVkVUNoYXIqIFN0cmluZ0ltcGw6OnNoYXJlZEJ1ZmZlcigpCiAgICAgaWYg
KG93bmVyc2hpcCA9PSBCdWZmZXJJbnRlcm5hbCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYg
KG93bmVyc2hpcCA9PSBCdWZmZXJTdWJzdHJpbmcpCi0gICAgICAgIHJldHVybiBtX3N1YnN0cmlu
Z0J1ZmZlci0+c2hhcmVkQnVmZmVyKCk7CisgICAgICAgIHJldHVybiBtX3N1YnN0cmluZ0J1ZmZl
ci0+c2hhcmVkQnVmZmVyMTYoKTsKICAgICBpZiAob3duZXJzaGlwID09IEJ1ZmZlck93bmVkKSB7
CiAgICAgICAgIEFTU0VSVCghbV9zaGFyZWRCdWZmZXIpOwotICAgICAgICBtX3NoYXJlZEJ1ZmZl
ciA9IFNoYXJlZFVDaGFyOjpjcmVhdGUobmV3IFNoYXJhYmxlVUNoYXIobV9kYXRhKSkubGVha1Jl
ZigpOworICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IFNoYXJlZENoYXIgZm9yIDgtYml0IHN0
cmluZ3MKKyAgICAgICAgQVNTRVJUKCFpczhCaXQoKSk7CisgICAgICAgIEFTU0VSVCghaGFzMTZC
aXRTaGFkb3coKSk7CisgICAgICAgIG1fc2hhcmVkQnVmZmVyID0gU2hhcmVkVUNoYXI6OmNyZWF0
ZShuZXcgU2hhcmFibGVVQ2hhcihtX2RhdGExNikpLmxlYWtSZWYoKTsKICAgICAgICAgbV9yZWZD
b3VudEFuZEZsYWdzID0gKG1fcmVmQ291bnRBbmRGbGFncyAmIH5zX3JlZkNvdW50TWFza0J1ZmZl
ck93bmVyc2hpcCkgfCBCdWZmZXJTaGFyZWQ7CiAgICAgfQogCkBAIC0xNTYsMTQgKzE4Myw0OSBA
QCBTaGFyZWRVQ2hhciogU3RyaW5nSW1wbDo6c2hhcmVkQnVmZmVyKCkKICAgICByZXR1cm4gbV9z
aGFyZWRCdWZmZXI7CiB9CiAKK2NvbnN0IFVDaGFyKiBTdHJpbmdJbXBsOjpnZXREYXRhMTZTbG93
Q2FzZSgpIGNvbnN0Cit7CisgICAgaWYgKGhhczE2Qml0U2hhZG93KCkpCisgICAgICAgIHJldHVy
biBtX2NvcHlEYXRhMTY7CisKKyAgICBpZiAoYnVmZmVyT3duZXJzaGlwKCkgPT0gQnVmZmVyU3Vi
c3RyaW5nKSB7CisgICAgICAgIC8vIElmIHRoaXMgaXMgYSBzdWJzdHJpbmcsIHJldHVybiBhIHBv
aW50ZXIgaW50byB0aGUgcGFyZW50IHN0cmluZy4KKyAgICAgICAgLy8gVE9ETzogQ29uc2lkZXIg
c2V2ZXJpbmcgdGhpcyBzdHJpbmcgZnJvbSB0aGUgcGFyZW50IHN0cmluZworICAgICAgICB1bnNp
Z25lZCBvZmZzZXQgPSBtX2RhdGE4IC0gbV9zdWJzdHJpbmdCdWZmZXItPmNoYXJhY3RlcnM4KCk7
CisgICAgICAgIHJldHVybiBtX3N1YnN0cmluZ0J1ZmZlci0+Y2hhcmFjdGVyczE2KCkgKyBvZmZz
ZXQ7CisgICAgfQorCisgICAgQVNTRVJUKGJ1ZmZlck93bmVyc2hpcCgpICE9IEJ1ZmZlclNoYXJl
ZCk7CisgICAgdW5zaWduZWQgbGVuID0gbGVuZ3RoKCk7CisgICAgbV9jb3B5RGF0YTE2ID0gc3Rh
dGljX2Nhc3Q8VUNoYXIqPihmYXN0Q2FsbG9jKGxlbiwgc2l6ZW9mKFVDaGFyKSkpOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuOyBpKyspCisgICAgICAgIG1fY29weURhdGExNltpXSA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KG1fZGF0YThbaV0pOworCisgICAgbV9yZWZDb3Vu
dEFuZEZsYWdzIHw9IHNfcmVmQ291bnRGbGFnSGFzMTZCaXRTaGFkb3c7CisKKyAgICByZXR1cm4g
bV9jb3B5RGF0YTE2OworfQorCiBib29sIFN0cmluZ0ltcGw6OmNvbnRhaW5zT25seVdoaXRlc3Bh
Y2UoKQogewogICAgIC8vIEZJWE1FOiBUaGUgZGVmaW5pdGlvbiBvZiB3aGl0ZXNwYWNlIGhlcmUg
aW5jbHVkZXMgYSBudW1iZXIgb2YgY2hhcmFjdGVycwogICAgIC8vIHRoYXQgYXJlIG5vdCB3aGl0
ZXNwYWNlIGZyb20gdGhlIHBvaW50IG9mIHZpZXcgb2YgUmVuZGVyVGV4dDsgSSB3b25kZXIgaWYK
ICAgICAvLyB0aGF0J3MgYSBwcm9ibGVtIGluIHByYWN0aWNlLgotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtX2xlbmd0aDsgaSsrKQotICAgICAgICBpZiAoIWlzQVNDSUlTcGFjZShtX2Rh
dGFbaV0pKQorICAgIGlmIChpczhCaXQoKSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgVUNoYXIgYyA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkIGNoYXI+KG1fZGF0YThbaV0pOworICAgICAgICAgICAgaWYgKCFpc0FTQ0lJU3Bh
Y2UoYykpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1f
bGVuZ3RoOyBpKyspIHsKKyAgICAgICAgVUNoYXIgYyA9IG1fZGF0YTE2W2ldOworICAgICAgICBp
ZiAoIWlzQVNDSUlTcGFjZShjKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE3NywxNSArMjM5LDIwIEBAIFBhc3NSZWZQdHI8U3Ry
aW5nSW1wbD4gU3RyaW5nSW1wbDo6c3Vic3QKICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAg
ICAgICBsZW5ndGggPSBtYXhMZW5ndGg7CiAgICAgfQotICAgIHJldHVybiBjcmVhdGUobV9kYXRh
ICsgc3RhcnQsIGxlbmd0aCk7CisgICAgaWYgKGlzOEJpdCgpKQorICAgICAgICByZXR1cm4gY3Jl
YXRlKG1fZGF0YTggKyBzdGFydCwgbGVuZ3RoKTsKKworICAgIHJldHVybiBjcmVhdGUobV9kYXRh
MTYgKyBzdGFydCwgbGVuZ3RoKTsKIH0KIAogVUNoYXIzMiBTdHJpbmdJbXBsOjpjaGFyYWN0ZXJT
dGFydGluZ0F0KHVuc2lnbmVkIGkpCiB7Ci0gICAgaWYgKFUxNl9JU19TSU5HTEUobV9kYXRhW2ld
KSkKLSAgICAgICAgcmV0dXJuIG1fZGF0YVtpXTsKLSAgICBpZiAoaSArIDEgPCBtX2xlbmd0aCAm
JiBVMTZfSVNfTEVBRChtX2RhdGFbaV0pICYmIFUxNl9JU19UUkFJTChtX2RhdGFbaSArIDFdKSkK
LSAgICAgICAgcmV0dXJuIFUxNl9HRVRfU1VQUExFTUVOVEFSWShtX2RhdGFbaV0sIG1fZGF0YVtp
ICsgMV0pOworICAgIGlmIChpczhCaXQoKSkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVu
c2lnbmVkIGNoYXI+KG1fZGF0YThbaV0pOworICAgIGlmIChVMTZfSVNfU0lOR0xFKG1fZGF0YTE2
W2ldKSkKKyAgICAgICAgcmV0dXJuIG1fZGF0YTE2W2ldOworICAgIGlmIChpICsgMSA8IG1fbGVu
Z3RoICYmIFUxNl9JU19MRUFEKG1fZGF0YTE2W2ldKSAmJiBVMTZfSVNfVFJBSUwobV9kYXRhMTZb
aSArIDFdKSkKKyAgICAgICAgcmV0dXJuIFUxNl9HRVRfU1VQUExFTUVOVEFSWShtX2RhdGExNltp
XSwgbV9kYXRhMTZbaSArIDFdKTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtMTk1LDQyICsyNjIs
NjQgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpsb3dlcgogICAgIC8vIG5v
LW9wIGNvZGUgcGF0aCB1cCB0aHJvdWdoIHRoZSBmaXJzdCAncmV0dXJuJyBzdGF0ZW1lbnQuCiAg
ICAgCiAgICAgLy8gRmlyc3Qgc2NhbiB0aGUgc3RyaW5nIGZvciB1cHBlcmNhc2UgYW5kIG5vbi1B
U0NJSSBjaGFyYWN0ZXJzOgotICAgIFVDaGFyIG9yZWQgPSAwOwogICAgIGJvb2wgbm9VcHBlciA9
IHRydWU7Ci0gICAgY29uc3QgVUNoYXIgKmVuZCA9IG1fZGF0YSArIG1fbGVuZ3RoOwotICAgIGZv
ciAoY29uc3QgVUNoYXIqIGNocCA9IG1fZGF0YTsgY2hwICE9IGVuZDsgY2hwKyspIHsKLSAgICAg
ICAgaWYgKFVOTElLRUxZKGlzQVNDSUlVcHBlcigqY2hwKSkpCi0gICAgICAgICAgICBub1VwcGVy
ID0gZmFsc2U7Ci0gICAgICAgIG9yZWQgfD0gKmNocDsKKyAgICBVQ2hhciBvcmVkID0gMDsKKyAg
ICBpZiAoaXM4Qml0KCkpIHsKKyAgICAgICAgY29uc3QgY2hhciAqZW5kID0gbV9kYXRhOCArIG1f
bGVuZ3RoOworICAgICAgICBmb3IgKGNvbnN0IGNoYXIqIGNocCA9IG1fZGF0YTg7IGNocCAhPSBl
bmQ7IGNocCsrKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKGlzQVNDSUlVcHBlcigqY2hwKSkp
CisgICAgICAgICAgICAgICAgbm9VcHBlciA9IGZhbHNlOworICAgICAgICAvLyBOb3RoaW5nIHRv
IGRvIGlmIHRoZSBzdHJpbmcgaXMgYWxsIEFTQ0lJIHdpdGggbm8gdXBwZXJjYXNlLgorICAgICAg
ICBpZiAobm9VcHBlcikKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGNvbnN0IFVDaGFyICplbmQgPSBtX2RhdGExNiArIG1fbGVuZ3RoOworICAgICAgICBm
b3IgKGNvbnN0IFVDaGFyKiBjaHAgPSBtX2RhdGExNjsgY2hwICE9IGVuZDsgY2hwKyspIHsKKyAg
ICAgICAgICAgIGlmIChVTkxJS0VMWShpc0FTQ0lJVXBwZXIoKmNocCkpKQorICAgICAgICAgICAg
ICAgIG5vVXBwZXIgPSBmYWxzZTsKKyAgICAgICAgICAgIG9yZWQgfD0gKmNocDsKKyAgICAgICAg
fQorICAgICAgICAvLyBOb3RoaW5nIHRvIGRvIGlmIHRoZSBzdHJpbmcgaXMgYWxsIEFTQ0lJIHdp
dGggbm8gdXBwZXJjYXNlLgorICAgICAgICBpZiAobm9VcHBlciAmJiAhKG9yZWQgJiB+MHg3Rikp
CisgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICB9Ci0gICAgCi0gICAgLy8gTm90aGluZyB0
byBkbyBpZiB0aGUgc3RyaW5nIGlzIGFsbCBBU0NJSSB3aXRoIG5vIHVwcGVyY2FzZS4KLSAgICBp
ZiAobm9VcHBlciAmJiAhKG9yZWQgJiB+MHg3RikpCi0gICAgICAgIHJldHVybiB0aGlzOwogCiAg
ICAgaWYgKG1fbGVuZ3RoID4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG51bWVyaWNfbGltaXRzPGlu
dDMyX3Q+OjptYXgoKSkpCiAgICAgICAgIENSQVNIKCk7CiAgICAgaW50MzJfdCBsZW5ndGggPSBt
X2xlbmd0aDsKIAotICAgIFVDaGFyKiBkYXRhOwotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBuZXdJ
bXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChtX2xlbmd0aCwgZGF0YSk7Ci0KICAgICBpZiAoIShv
cmVkICYgfjB4N0YpKSB7Ci0gICAgICAgIC8vIERvIGEgZmFzdGVyIGxvb3AgZm9yIHRoZSBjYXNl
IHdoZXJlIGFsbCB0aGUgY2hhcmFjdGVycyBhcmUgQVNDSUkuCi0gICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIFVDaGFyIGMgPSBtX2RhdGFbaV07
Ci0gICAgICAgICAgICBkYXRhW2ldID0gdG9BU0NJSUxvd2VyKGMpOworICAgICAgICBpZiAoaXM4
Qml0KCkpIHsKKyAgICAgICAgICAgIGNoYXIqIGRhdGE4OworICAgICAgICAgICAgCisgICAgICAg
ICAgICBSZWZQdHI8U3RyaW5nSW1wbD4gbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQobV9s
ZW5ndGgsIGRhdGE4KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yIChpbnQzMl90IGkg
PSAwOyBpIDwgbGVuZ3RoOyBpKyspCisgICAgICAgICAgICAgICAgZGF0YThbaV0gPSB0b0FTQ0lJ
TG93ZXIobV9kYXRhOFtpXSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBuZXdJ
bXBsOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBVQ2hhciogZGF0YTE2OworICAgICAg
ICBSZWZQdHI8U3RyaW5nSW1wbD4gbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQobV9sZW5n
dGgsIGRhdGExNik7CisgICAgICAgIAorICAgICAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBs
ZW5ndGg7IGkrKykgeworICAgICAgICAgICAgVUNoYXIgYyA9IG1fZGF0YTE2W2ldOworICAgICAg
ICAgICAgZGF0YTE2W2ldID0gdG9BU0NJSUxvd2VyKGMpOwogICAgICAgICB9CiAgICAgICAgIHJl
dHVybiBuZXdJbXBsOwogICAgIH0KICAgICAKICAgICAvLyBEbyBhIHNsb3dlciBpbXBsZW1lbnRh
dGlvbiBmb3IgY2FzZXMgdGhhdCBpbmNsdWRlIG5vbi1BU0NJSSBjaGFyYWN0ZXJzLgorICAgIFVD
aGFyKiBkYXRhMTY7CisgICAgUmVmUHRyPFN0cmluZ0ltcGw+IG5ld0ltcGwgPSBjcmVhdGVVbmlu
aXRpYWxpemVkKG1fbGVuZ3RoLCBkYXRhMTYpOworCiAgICAgYm9vbCBlcnJvcjsKLSAgICBpbnQz
Ml90IHJlYWxMZW5ndGggPSBVbmljb2RlOjp0b0xvd2VyKGRhdGEsIGxlbmd0aCwgbV9kYXRhLCBt
X2xlbmd0aCwgJmVycm9yKTsKKyAgICBpbnQzMl90IHJlYWxMZW5ndGggPSBVbmljb2RlOjp0b0xv
d2VyKGRhdGExNiwgbGVuZ3RoLCBtX2RhdGExNiwgbV9sZW5ndGgsICZlcnJvcik7CiAgICAgaWYg
KCFlcnJvciAmJiByZWFsTGVuZ3RoID09IGxlbmd0aCkKICAgICAgICAgcmV0dXJuIG5ld0ltcGw7
Ci0gICAgbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQocmVhbExlbmd0aCwgZGF0YSk7Ci0g
ICAgVW5pY29kZTo6dG9Mb3dlcihkYXRhLCByZWFsTGVuZ3RoLCBtX2RhdGEsIG1fbGVuZ3RoLCAm
ZXJyb3IpOworICAgIG5ld0ltcGwgPSBjcmVhdGVVbmluaXRpYWxpemVkKHJlYWxMZW5ndGgsIGRh
dGExNik7CisgICAgVW5pY29kZTo6dG9Mb3dlcihkYXRhMTYsIHJlYWxMZW5ndGgsIG1fZGF0YTE2
LCBtX2xlbmd0aCwgJmVycm9yKTsKICAgICBpZiAoZXJyb3IpCiAgICAgICAgIHJldHVybiB0aGlz
OwogICAgIHJldHVybiBuZXdJbXBsOwpAQCAtMjQxLDMwICszMzAsNjAgQEAgUGFzc1JlZlB0cjxT
dHJpbmdJbXBsPiBTdHJpbmdJbXBsOjp1cHBlcgogICAgIC8vIFRoaXMgZnVuY3Rpb24gY291bGQg
YmUgb3B0aW1pemVkIGZvciBuby1vcCBjYXNlcyB0aGUgd2F5IGxvd2VyKCkgaXMsCiAgICAgLy8g
YnV0IGluIGVtcGlyaWNhbCB0ZXN0aW5nLCBmZXcgYWN0dWFsIGNhbGxzIHRvIHVwcGVyKCkgYXJl
IG5vLW9wcywgc28KICAgICAvLyBpdCB3b3VsZG4ndCBiZSB3b3J0aCB0aGUgZXh0cmEgdGltZSBm
b3IgcHJlLXNjYW5uaW5nLgotICAgIFVDaGFyKiBkYXRhOwotICAgIFJlZlB0cjxTdHJpbmdJbXBs
PiBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChtX2xlbmd0aCwgZGF0YSk7CiAKICAgICBp
ZiAobV9sZW5ndGggPiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obnVtZXJpY19saW1pdHM8aW50MzJf
dD46Om1heCgpKSkKICAgICAgICAgQ1JBU0goKTsKICAgICBpbnQzMl90IGxlbmd0aCA9IG1fbGVu
Z3RoOwogCisgICAgaWYgKGlzOEJpdCgpKSB7CisgICAgICAgIGNoYXIqIGRhdGE4OworICAgICAg
ICBSZWZQdHI8U3RyaW5nSW1wbD4gbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQobV9sZW5n
dGgsIGRhdGE4KTsKKyAgICAgICAgCisgICAgICAgIC8vIERvIGEgZmFzdGVyIGxvb3AgZm9yIHRo
ZSBjYXNlIHdoZXJlIGFsbCB0aGUgY2hhcmFjdGVycyBhcmUgQVNDSUkuCisgICAgICAgIGNoYXIg
b3JlZCA9IDA7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAg
ICAgICAgICAgIGNoYXIgYyA9IG1fZGF0YThbaV07CisgICAgICAgICAgICBvcmVkIHw9IGM7Cisg
ICAgICAgICAgICBkYXRhOFtpXSA9IHRvQVNDSUlVcHBlcihjKTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoIShvcmVkICYgfjB4N0YpKQorICAgICAgICAgICAgcmV0dXJuIG5ld0ltcGwucmVsZWFz
ZSgpOworCisgICAgICAgIC8vIERvIGEgc2xvd2VyIGltcGxlbWVudGF0aW9uIGZvciBjYXNlcyB0
aGF0IGluY2x1ZGUgbm9uLUFTQ0lJIGNoYXJhY3RlcnMuCisgICAgICAgIGJvb2wgZXJyb3I7Cisg
ICAgICAgIFVDaGFyKiBkYXRhMTY7CisgICAgICAgIG5ld0ltcGwgPSBjcmVhdGVVbmluaXRpYWxp
emVkKG1fbGVuZ3RoLCBkYXRhMTYpOworICAgICAgICBpbnQzMl90IHJlYWxMZW5ndGggPSBVbmlj
b2RlOjp0b1VwcGVyKGRhdGExNiwgbGVuZ3RoLCBtX2RhdGExNiwgbV9sZW5ndGgsICZlcnJvcik7
CisgICAgICAgIGlmICghZXJyb3IgJiYgcmVhbExlbmd0aCA9PSBsZW5ndGgpCisgICAgICAgICAg
ICByZXR1cm4gbmV3SW1wbDsKKyAgICAgICAgbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQo
cmVhbExlbmd0aCwgZGF0YTE2KTsKKyAgICAgICAgVW5pY29kZTo6dG9VcHBlcihkYXRhMTYsIHJl
YWxMZW5ndGgsIG1fZGF0YTE2LCBtX2xlbmd0aCwgJmVycm9yKTsKKyAgICAgICAgaWYgKGVycm9y
KQorICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIHJldHVybiBuZXdJbXBsLnJlbGVh
c2UoKTsKKyAgICB9CisKKyAgICBVQ2hhciogZGF0YTE2OworICAgIFJlZlB0cjxTdHJpbmdJbXBs
PiBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChtX2xlbmd0aCwgZGF0YTE2KTsKKyAgICAK
ICAgICAvLyBEbyBhIGZhc3RlciBsb29wIGZvciB0aGUgY2FzZSB3aGVyZSBhbGwgdGhlIGNoYXJh
Y3RlcnMgYXJlIEFTQ0lJLgogICAgIFVDaGFyIG9yZWQgPSAwOwogICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgVUNoYXIgYyA9IG1fZGF0YVtpXTsKKyAgICAg
ICAgVUNoYXIgYyA9IG1fZGF0YTE2W2ldOwogICAgICAgICBvcmVkIHw9IGM7Ci0gICAgICAgIGRh
dGFbaV0gPSB0b0FTQ0lJVXBwZXIoYyk7CisgICAgICAgIGRhdGExNltpXSA9IHRvQVNDSUlVcHBl
cihjKTsKICAgICB9CiAgICAgaWYgKCEob3JlZCAmIH4weDdGKSkKICAgICAgICAgcmV0dXJuIG5l
d0ltcGwucmVsZWFzZSgpOwogCiAgICAgLy8gRG8gYSBzbG93ZXIgaW1wbGVtZW50YXRpb24gZm9y
IGNhc2VzIHRoYXQgaW5jbHVkZSBub24tQVNDSUkgY2hhcmFjdGVycy4KICAgICBib29sIGVycm9y
OwotICAgIGludDMyX3QgcmVhbExlbmd0aCA9IFVuaWNvZGU6OnRvVXBwZXIoZGF0YSwgbGVuZ3Ro
LCBtX2RhdGEsIG1fbGVuZ3RoLCAmZXJyb3IpOworICAgIG5ld0ltcGwgPSBjcmVhdGVVbmluaXRp
YWxpemVkKG1fbGVuZ3RoLCBkYXRhMTYpOworICAgIGludDMyX3QgcmVhbExlbmd0aCA9IFVuaWNv
ZGU6OnRvVXBwZXIoZGF0YTE2LCBsZW5ndGgsIG1fZGF0YTE2LCBtX2xlbmd0aCwgJmVycm9yKTsK
ICAgICBpZiAoIWVycm9yICYmIHJlYWxMZW5ndGggPT0gbGVuZ3RoKQogICAgICAgICByZXR1cm4g
bmV3SW1wbDsKLSAgICBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChyZWFsTGVuZ3RoLCBk
YXRhKTsKLSAgICBVbmljb2RlOjp0b1VwcGVyKGRhdGEsIHJlYWxMZW5ndGgsIG1fZGF0YSwgbV9s
ZW5ndGgsICZlcnJvcik7CisgICAgbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQocmVhbExl
bmd0aCwgZGF0YTE2KTsKKyAgICBVbmljb2RlOjp0b1VwcGVyKGRhdGExNiwgcmVhbExlbmd0aCwg
bV9kYXRhMTYsIG1fbGVuZ3RoLCAmZXJyb3IpOwogICAgIGlmIChlcnJvcikKICAgICAgICAgcmV0
dXJuIHRoaXM7CiAgICAgcmV0dXJuIG5ld0ltcGwucmVsZWFzZSgpOwpAQCAtMjc1LDYgKzM5NCwx
MyBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmZpbGwoCiAgICAgaWYgKCFt
X2xlbmd0aCkKICAgICAgICAgcmV0dXJuIHRoaXM7CiAKKyAgICBpZiAoIShjaGFyYWN0ZXIgJiB+
MHg3RikpIHsKKyAgICAgICAgY2hhciogZGF0YTsKKyAgICAgICAgUmVmUHRyPFN0cmluZ0ltcGw+
IG5ld0ltcGwgPSBjcmVhdGVVbmluaXRpYWxpemVkKG1fbGVuZ3RoLCBkYXRhKTsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbGVuZ3RoOyArK2kpCisgICAgICAgICAgICBkYXRh
W2ldID0gY2hhcmFjdGVyOworICAgICAgICByZXR1cm4gbmV3SW1wbC5yZWxlYXNlKCk7CisgICAg
fQogICAgIFVDaGFyKiBkYXRhOwogICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0gY3Jl
YXRlVW5pbml0aWFsaXplZChtX2xlbmd0aCwgZGF0YSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1fbGVuZ3RoOyArK2kpCkBAIC0yODQsMTcgKzQxMCwyNCBAQCBQYXNzUmVmUHRyPFN0
cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmZpbGwoCiAKIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3Ry
aW5nSW1wbDo6Zm9sZENhc2UoKQogewotICAgIFVDaGFyKiBkYXRhOwotICAgIFJlZlB0cjxTdHJp
bmdJbXBsPiBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChtX2xlbmd0aCwgZGF0YSk7Ci0K
ICAgICBpZiAobV9sZW5ndGggPiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obnVtZXJpY19saW1pdHM8
aW50MzJfdD46Om1heCgpKSkKICAgICAgICAgQ1JBU0goKTsKICAgICBpbnQzMl90IGxlbmd0aCA9
IG1fbGVuZ3RoOwogCisgICAgaWYgKGlzOEJpdCgpKSB7CisgICAgICAgIGNoYXIqIGRhdGE7Cisg
ICAgICAgIFJlZlB0ciA8U3RyaW5nSW1wbD5uZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZCht
X2xlbmd0aCwgZGF0YSk7CisgICAgICAgIGZvciAoaW50MzJfdCBpID0gMDsgaSA8IGxlbmd0aDsg
aSsrKQorICAgICAgICAgICAgZGF0YVtpXSA9IHRvQVNDSUlMb3dlcihtX2RhdGE4W2ldKTsKKyAg
ICAgICAgcmV0dXJuIG5ld0ltcGwucmVsZWFzZSgpOworICAgIH0KKwogICAgIC8vIERvIGEgZmFz
dGVyIGxvb3AgZm9yIHRoZSBjYXNlIHdoZXJlIGFsbCB0aGUgY2hhcmFjdGVycyBhcmUgQVNDSUku
CisgICAgVUNoYXIqIGRhdGE7CisgICAgUmVmUHRyPFN0cmluZ0ltcGw+IG5ld0ltcGwgPSBjcmVh
dGVVbmluaXRpYWxpemVkKG1fbGVuZ3RoLCBkYXRhKTsKICAgICBVQ2hhciBvcmVkID0gMDsKICAg
ICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICBVQ2hhciBj
ID0gbV9kYXRhW2ldOworICAgICAgICBVQ2hhciBjID0gbV9kYXRhMTZbaV07CiAgICAgICAgIG9y
ZWQgfD0gYzsKICAgICAgICAgZGF0YVtpXSA9IHRvQVNDSUlMb3dlcihjKTsKICAgICB9CkBAIC0z
MDMsMTEgKzQzNiwxMSBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmZvbGRD
CiAKICAgICAvLyBEbyBhIHNsb3dlciBpbXBsZW1lbnRhdGlvbiBmb3IgY2FzZXMgdGhhdCBpbmNs
dWRlIG5vbi1BU0NJSSBjaGFyYWN0ZXJzLgogICAgIGJvb2wgZXJyb3I7Ci0gICAgaW50MzJfdCBy
ZWFsTGVuZ3RoID0gVW5pY29kZTo6Zm9sZENhc2UoZGF0YSwgbGVuZ3RoLCBtX2RhdGEsIG1fbGVu
Z3RoLCAmZXJyb3IpOworICAgIGludDMyX3QgcmVhbExlbmd0aCA9IFVuaWNvZGU6OmZvbGRDYXNl
KGRhdGEsIGxlbmd0aCwgbV9kYXRhMTYsIG1fbGVuZ3RoLCAmZXJyb3IpOwogICAgIGlmICghZXJy
b3IgJiYgcmVhbExlbmd0aCA9PSBsZW5ndGgpCiAgICAgICAgIHJldHVybiBuZXdJbXBsLnJlbGVh
c2UoKTsKICAgICBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChyZWFsTGVuZ3RoLCBkYXRh
KTsKLSAgICBVbmljb2RlOjpmb2xkQ2FzZShkYXRhLCByZWFsTGVuZ3RoLCBtX2RhdGEsIG1fbGVu
Z3RoLCAmZXJyb3IpOworICAgIFVuaWNvZGU6OmZvbGRDYXNlKGRhdGEsIHJlYWxMZW5ndGgsIG1f
ZGF0YTE2LCBtX2xlbmd0aCwgJmVycm9yKTsKICAgICBpZiAoZXJyb3IpCiAgICAgICAgIHJldHVy
biB0aGlzOwogICAgIHJldHVybiBuZXdJbXBsLnJlbGVhc2UoKTsKQEAgLTMyMyw3ICs0NTYsNyBA
QCBpbmxpbmUgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsCiAgICAgdW5zaWduZWQg
ZW5kID0gbV9sZW5ndGggLSAxOwogICAgIAogICAgIC8vIHNraXAgd2hpdGUgc3BhY2UgZnJvbSBz
dGFydAotICAgIHdoaWxlIChzdGFydCA8PSBlbmQgJiYgcHJlZGljYXRlKG1fZGF0YVtzdGFydF0p
KQorICAgIHdoaWxlIChzdGFydCA8PSBlbmQgJiYgcHJlZGljYXRlKGlzOEJpdCgpID8gbV9kYXRh
OFtzdGFydF0gOiBtX2RhdGExNltzdGFydF0pKQogICAgICAgICBzdGFydCsrOwogICAgIAogICAg
IC8vIG9ubHkgd2hpdGUgc3BhY2UKQEAgLTMzMSwxMiArNDY0LDE0IEBAIGlubGluZSBQYXNzUmVm
UHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGwKICAgICAgICAgcmV0dXJuIGVtcHR5KCk7CiAKICAg
ICAvLyBza2lwIHdoaXRlIHNwYWNlIGZyb20gZW5kCi0gICAgd2hpbGUgKGVuZCAmJiBwcmVkaWNh
dGUobV9kYXRhW2VuZF0pKQorICAgIHdoaWxlIChlbmQgJiYgcHJlZGljYXRlKGlzOEJpdCgpID8g
bV9kYXRhOFtlbmRdIDogbV9kYXRhMTZbZW5kXSkpCiAgICAgICAgIGVuZC0tOwogCiAgICAgaWYg
KCFzdGFydCAmJiBlbmQgPT0gbV9sZW5ndGggLSAxKQogICAgICAgICByZXR1cm4gdGhpczsKLSAg
ICByZXR1cm4gY3JlYXRlKG1fZGF0YSArIHN0YXJ0LCBlbmQgKyAxIC0gc3RhcnQpOworICAgIGlm
IChpczhCaXQoKSkKKyAgICAgICAgcmV0dXJuIGNyZWF0ZShtX2RhdGE4ICsgc3RhcnQsIGVuZCAr
IDEgLSBzdGFydCk7CisgICAgcmV0dXJuIGNyZWF0ZShtX2RhdGExNiArIHN0YXJ0LCBlbmQgKyAx
IC0gc3RhcnQpOwogfQogCiBjbGFzcyBVQ2hhclByZWRpY2F0ZSB7CkBAIC0zNzAsOSArNTA1LDEw
IEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6c3RyaXAKICAgICByZXR1cm4g
c3RyaXBNYXRjaGVkQ2hhcmFjdGVycyhVQ2hhclByZWRpY2F0ZShpc1doaXRlU3BhY2UpKTsKIH0K
IAorLy8gRklYTUU6IEFkZCA4LWJpdCBwYXRoLiBMaWtlbHkgcmVxdWlyZXMgdGVtcGxhdGl6ZWQg
U3RyaW5nQnVmZmVyIGNsYXNzCiBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnJl
bW92ZUNoYXJhY3RlcnMoQ2hhcmFjdGVyTWF0Y2hGdW5jdGlvblB0ciBmaW5kTWF0Y2gpCiB7Ci0g
ICAgY29uc3QgVUNoYXIqIGZyb20gPSBtX2RhdGE7CisgICAgY29uc3QgVUNoYXIqIGZyb20gPSBj
aGFyYWN0ZXJzKCk7CiAgICAgY29uc3QgVUNoYXIqIGZyb21lbmQgPSBmcm9tICsgbV9sZW5ndGg7
CiAKICAgICAvLyBBc3N1bWUgdGhlIGNvbW1vbiBjYXNlIHdpbGwgbm90IHJlbW92ZSBhbnkgY2hh
cmFjdGVycwpAQCAtMzgzLDEwICs1MTksMTAgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJp
bmdJbXBsOjpyZW1vdgogCiAgICAgU3RyaW5nQnVmZmVyIGRhdGEobV9sZW5ndGgpOwogICAgIFVD
aGFyKiB0byA9IGRhdGEuY2hhcmFjdGVycygpOwotICAgIHVuc2lnbmVkIG91dGMgPSBmcm9tIC0g
bV9kYXRhOworICAgIHVuc2lnbmVkIG91dGMgPSBmcm9tIC0gY2hhcmFjdGVyczE2KCk7CiAKICAg
ICBpZiAob3V0YykKLSAgICAgICAgbWVtY3B5KHRvLCBtX2RhdGEsIG91dGMgKiBzaXplb2YoVUNo
YXIpKTsKKyAgICAgICAgbWVtY3B5KHRvLCBjaGFyYWN0ZXJzMTYoKSwgb3V0YyAqIHNpemVvZihV
Q2hhcikpOwogCiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgd2hpbGUgKGZyb20gIT0gZnJv
bWVuZCAmJiBmaW5kTWF0Y2goKmZyb20pKQpAQCAtNDAyLDEyICs1MzgsMTMgQEAgUGFzc1JlZlB0
cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpyZW1vdgogICAgIHJldHVybiBhZG9wdChkYXRhKTsK
IH0KIAorLy8gRklYTUU6IEFkZCA4LWJpdCBwYXRoLiBMaWtlbHkgcmVxdWlyZXMgdGVtcGxhdGl6
ZWQgU3RyaW5nQnVmZmVyIGNsYXNzCiB0ZW1wbGF0ZSA8Y2xhc3MgVUNoYXJQcmVkaWNhdGU+CiBp
bmxpbmUgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpzaW1wbGlmeU1hdGNoZWRD
aGFyYWN0ZXJzVG9TcGFjZShVQ2hhclByZWRpY2F0ZSBwcmVkaWNhdGUpCiB7CiAgICAgU3RyaW5n
QnVmZmVyIGRhdGEobV9sZW5ndGgpOwogCi0gICAgY29uc3QgVUNoYXIqIGZyb20gPSBtX2RhdGE7
CisgICAgY29uc3QgVUNoYXIqIGZyb20gPSBjaGFyYWN0ZXJzMTYoKTsKICAgICBjb25zdCBVQ2hh
ciogZnJvbWVuZCA9IGZyb20gKyBtX2xlbmd0aDsKICAgICBpbnQgb3V0YyA9IDA7CiAgICAgYm9v
bCBjaGFuZ2VkVG9TcGFjZSA9IGZhbHNlOwpAQCAtNDUxLDYyICs1ODgsNjQgQEAgUGFzc1JlZlB0
cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpzaW1wbAogCiBpbnQgU3RyaW5nSW1wbDo6dG9JbnRT
dHJpY3QoYm9vbCogb2ssIGludCBiYXNlKQogewotICAgIHJldHVybiBjaGFyYWN0ZXJzVG9JbnRT
dHJpY3QobV9kYXRhLCBtX2xlbmd0aCwgb2ssIGJhc2UpOworICAgIHJldHVybiBjaGFyYWN0ZXJz
VG9JbnRTdHJpY3QoY2hhcmFjdGVyczE2KCksIG1fbGVuZ3RoLCBvaywgYmFzZSk7CiB9CiAKIHVu
c2lnbmVkIFN0cmluZ0ltcGw6OnRvVUludFN0cmljdChib29sKiBvaywgaW50IGJhc2UpCiB7Ci0g
ICAgcmV0dXJuIGNoYXJhY3RlcnNUb1VJbnRTdHJpY3QobV9kYXRhLCBtX2xlbmd0aCwgb2ssIGJh
c2UpOworICAgIHJldHVybiBjaGFyYWN0ZXJzVG9VSW50U3RyaWN0KGNoYXJhY3RlcnMxNigpLCBt
X2xlbmd0aCwgb2ssIGJhc2UpOwogfQogCiBpbnQ2NF90IFN0cmluZ0ltcGw6OnRvSW50NjRTdHJp
Y3QoYm9vbCogb2ssIGludCBiYXNlKQogewotICAgIHJldHVybiBjaGFyYWN0ZXJzVG9JbnQ2NFN0
cmljdChtX2RhdGEsIG1fbGVuZ3RoLCBvaywgYmFzZSk7CisgICAgcmV0dXJuIGNoYXJhY3RlcnNU
b0ludDY0U3RyaWN0KGNoYXJhY3RlcnMxNigpLCBtX2xlbmd0aCwgb2ssIGJhc2UpOworCiB9CiAK
IHVpbnQ2NF90IFN0cmluZ0ltcGw6OnRvVUludDY0U3RyaWN0KGJvb2wqIG9rLCBpbnQgYmFzZSkK
IHsKLSAgICByZXR1cm4gY2hhcmFjdGVyc1RvVUludDY0U3RyaWN0KG1fZGF0YSwgbV9sZW5ndGgs
IG9rLCBiYXNlKTsKKyAgICByZXR1cm4gY2hhcmFjdGVyc1RvVUludDY0U3RyaWN0KGNoYXJhY3Rl
cnMxNigpLCBtX2xlbmd0aCwgb2ssIGJhc2UpOwogfQogCiBpbnRwdHJfdCBTdHJpbmdJbXBsOjp0
b0ludFB0clN0cmljdChib29sKiBvaywgaW50IGJhc2UpCiB7Ci0gICAgcmV0dXJuIGNoYXJhY3Rl
cnNUb0ludFB0clN0cmljdChtX2RhdGEsIG1fbGVuZ3RoLCBvaywgYmFzZSk7CisgICAgcmV0dXJu
IGNoYXJhY3RlcnNUb0ludFB0clN0cmljdChjaGFyYWN0ZXJzMTYoKSwgbV9sZW5ndGgsIG9rLCBi
YXNlKTsKIH0KIAogaW50IFN0cmluZ0ltcGw6OnRvSW50KGJvb2wqIG9rKQogewotICAgIHJldHVy
biBjaGFyYWN0ZXJzVG9JbnQobV9kYXRhLCBtX2xlbmd0aCwgb2spOworICAgIHJldHVybiBjaGFy
YWN0ZXJzVG9JbnQoY2hhcmFjdGVyczE2KCksIG1fbGVuZ3RoLCBvayk7CiB9CiAKIHVuc2lnbmVk
IFN0cmluZ0ltcGw6OnRvVUludChib29sKiBvaykKIHsKLSAgICByZXR1cm4gY2hhcmFjdGVyc1Rv
VUludChtX2RhdGEsIG1fbGVuZ3RoLCBvayk7CisgICAgcmV0dXJuIGNoYXJhY3RlcnNUb1VJbnQo
Y2hhcmFjdGVyczE2KCksIG1fbGVuZ3RoLCBvayk7CiB9CiAKIGludDY0X3QgU3RyaW5nSW1wbDo6
dG9JbnQ2NChib29sKiBvaykKIHsKLSAgICByZXR1cm4gY2hhcmFjdGVyc1RvSW50NjQobV9kYXRh
LCBtX2xlbmd0aCwgb2spOworICAgIHJldHVybiBjaGFyYWN0ZXJzVG9JbnQ2NChjaGFyYWN0ZXJz
MTYoKSwgbV9sZW5ndGgsIG9rKTsKIH0KIAogdWludDY0X3QgU3RyaW5nSW1wbDo6dG9VSW50NjQo
Ym9vbCogb2spCiB7Ci0gICAgcmV0dXJuIGNoYXJhY3RlcnNUb1VJbnQ2NChtX2RhdGEsIG1fbGVu
Z3RoLCBvayk7CisgICAgcmV0dXJuIGNoYXJhY3RlcnNUb1VJbnQ2NChjaGFyYWN0ZXJzMTYoKSwg
bV9sZW5ndGgsIG9rKTsKIH0KIAogaW50cHRyX3QgU3RyaW5nSW1wbDo6dG9JbnRQdHIoYm9vbCog
b2spCiB7Ci0gICAgcmV0dXJuIGNoYXJhY3RlcnNUb0ludFB0cihtX2RhdGEsIG1fbGVuZ3RoLCBv
ayk7CisgICAgcmV0dXJuIGNoYXJhY3RlcnNUb0ludFB0cihjaGFyYWN0ZXJzMTYoKSwgbV9sZW5n
dGgsIG9rKTsKKwogfQogCiBkb3VibGUgU3RyaW5nSW1wbDo6dG9Eb3VibGUoYm9vbCogb2ssIGJv
b2wqIGRpZFJlYWROdW1iZXIpCiB7Ci0gICAgcmV0dXJuIGNoYXJhY3RlcnNUb0RvdWJsZShtX2Rh
dGEsIG1fbGVuZ3RoLCBvaywgZGlkUmVhZE51bWJlcik7CisgICAgcmV0dXJuIGNoYXJhY3RlcnNU
b0RvdWJsZShjaGFyYWN0ZXJzMTYoKSwgbV9sZW5ndGgsIG9rLCBkaWRSZWFkTnVtYmVyKTsKIH0K
IAogZmxvYXQgU3RyaW5nSW1wbDo6dG9GbG9hdChib29sKiBvaywgYm9vbCogZGlkUmVhZE51bWJl
cikKIHsKLSAgICByZXR1cm4gY2hhcmFjdGVyc1RvRmxvYXQobV9kYXRhLCBtX2xlbmd0aCwgb2ss
IGRpZFJlYWROdW1iZXIpOworICAgIHJldHVybiBjaGFyYWN0ZXJzVG9GbG9hdChjaGFyYWN0ZXJz
MTYoKSwgbV9sZW5ndGgsIG9rLCBkaWRSZWFkTnVtYmVyKTsKIH0KIAogc3RhdGljIGJvb2wgZXF1
YWwoY29uc3QgVUNoYXIqIGEsIGNvbnN0IGNoYXIqIGIsIGludCBsZW5ndGgpCkBAIC01NjEsMTIg
KzcwMCwxMiBAQCBpbnQgY29kZVBvaW50Q29tcGFyZShjb25zdCBTdHJpbmdJbXBsKiBzCiAKIHNp
emVfdCBTdHJpbmdJbXBsOjpmaW5kKFVDaGFyIGMsIHVuc2lnbmVkIHN0YXJ0KQogewotICAgIHJl
dHVybiBXVEY6OmZpbmQobV9kYXRhLCBtX2xlbmd0aCwgYywgc3RhcnQpOworICAgIHJldHVybiBX
VEY6OmZpbmQoY2hhcmFjdGVyczE2KCksIG1fbGVuZ3RoLCBjLCBzdGFydCk7CiB9CiAKIHNpemVf
dCBTdHJpbmdJbXBsOjpmaW5kKENoYXJhY3Rlck1hdGNoRnVuY3Rpb25QdHIgbWF0Y2hGdW5jdGlv
biwgdW5zaWduZWQgc3RhcnQpCiB7Ci0gICAgcmV0dXJuIFdURjo6ZmluZChtX2RhdGEsIG1fbGVu
Z3RoLCBtYXRjaEZ1bmN0aW9uLCBzdGFydCk7CisgICAgcmV0dXJuIFdURjo6ZmluZChjaGFyYWN0
ZXJzMTYoKSwgbV9sZW5ndGgsIG1hdGNoRnVuY3Rpb24sIHN0YXJ0KTsKIH0KIAogc2l6ZV90IFN0
cmluZ0ltcGw6OmZpbmQoY29uc3QgY2hhciogbWF0Y2hTdHJpbmcsIHVuc2lnbmVkIGluZGV4KQpA
QCAtNTgzLDcgKzcyMiw3IEBAIHNpemVfdCBTdHJpbmdJbXBsOjpmaW5kKGNvbnN0IGNoYXIqIG1h
dGMKIAogICAgIC8vIE9wdGltaXphdGlvbiAxOiBmYXN0IGNhc2UgZm9yIHN0cmluZ3Mgb2YgbGVu
Z3RoIDEuCiAgICAgaWYgKG1hdGNoTGVuZ3RoID09IDEpCi0gICAgICAgIHJldHVybiBXVEY6OmZp
bmQoY2hhcmFjdGVycygpLCBsZW5ndGgoKSwgKihjb25zdCB1bnNpZ25lZCBjaGFyKiltYXRjaFN0
cmluZywgaW5kZXgpOworICAgICAgICByZXR1cm4gV1RGOjpmaW5kKGNoYXJhY3RlcnMxNigpLCBs
ZW5ndGgoKSwgKihjb25zdCB1bnNpZ25lZCBjaGFyKiltYXRjaFN0cmluZywgaW5kZXgpOwogCiAg
ICAgLy8gQ2hlY2sgaW5kZXggJiBtYXRjaExlbmd0aCBhcmUgaW4gcmFuZ2UuCiAgICAgaWYgKGlu
ZGV4ID4gbGVuZ3RoKCkpCkBAIC02NjIsNyArODAxLDcgQEAgc2l6ZV90IFN0cmluZ0ltcGw6OmZp
bmQoU3RyaW5nSW1wbCogbWF0YwogCiAgICAgLy8gT3B0aW1pemF0aW9uIDE6IGZhc3QgY2FzZSBm
b3Igc3RyaW5ncyBvZiBsZW5ndGggMS4KICAgICBpZiAobWF0Y2hMZW5ndGggPT0gMSkKLSAgICAg
ICAgcmV0dXJuIFdURjo6ZmluZChjaGFyYWN0ZXJzKCksIGxlbmd0aCgpLCBtYXRjaFN0cmluZy0+
Y2hhcmFjdGVycygpWzBdLCBpbmRleCk7CisgICAgICAgIHJldHVybiBXVEY6OmZpbmQoY2hhcmFj
dGVyczE2KCksIGxlbmd0aCgpLCBtYXRjaFN0cmluZy0+Y2hhcmFjdGVyczE2KClbMF0sIGluZGV4
KTsKIAogICAgIC8vIENoZWNrIGluZGV4ICYgbWF0Y2hMZW5ndGggYXJlIGluIHJhbmdlLgogICAg
IGlmIChpbmRleCA+IGxlbmd0aCgpKQpAQCAtNzMwLDcgKzg2OSw3IEBAIHNpemVfdCBTdHJpbmdJ
bXBsOjpmaW5kSWdub3JpbmdDYXNlKFN0cmkKIAogc2l6ZV90IFN0cmluZ0ltcGw6OnJldmVyc2VG
aW5kKFVDaGFyIGMsIHVuc2lnbmVkIGluZGV4KQogewotICAgIHJldHVybiBXVEY6OnJldmVyc2VG
aW5kKG1fZGF0YSwgbV9sZW5ndGgsIGMsIGluZGV4KTsKKyAgICByZXR1cm4gV1RGOjpyZXZlcnNl
RmluZChjaGFyYWN0ZXJzMTYoKSwgbV9sZW5ndGgsIGMsIGluZGV4KTsKIH0KIAogc2l6ZV90IFN0
cmluZ0ltcGw6OnJldmVyc2VGaW5kKFN0cmluZ0ltcGwqIG1hdGNoU3RyaW5nLCB1bnNpZ25lZCBp
bmRleCkKQEAgLTc0NCw3ICs4ODMsNyBAQCBzaXplX3QgU3RyaW5nSW1wbDo6cmV2ZXJzZUZpbmQo
U3RyaW5nSW1wCiAKICAgICAvLyBPcHRpbWl6YXRpb24gMTogZmFzdCBjYXNlIGZvciBzdHJpbmdz
IG9mIGxlbmd0aCAxLgogICAgIGlmIChtYXRjaExlbmd0aCA9PSAxKQotICAgICAgICByZXR1cm4g
V1RGOjpyZXZlcnNlRmluZChjaGFyYWN0ZXJzKCksIGxlbmd0aCgpLCBtYXRjaFN0cmluZy0+Y2hh
cmFjdGVycygpWzBdLCBpbmRleCk7CisgICAgICAgIHJldHVybiBXVEY6OnJldmVyc2VGaW5kKGNo
YXJhY3RlcnMxNigpLCBsZW5ndGgoKSwgbWF0Y2hTdHJpbmctPmNoYXJhY3RlcnMoKVswXSwgaW5k
ZXgpOwogCiAgICAgLy8gQ2hlY2sgaW5kZXggJiBtYXRjaExlbmd0aCBhcmUgaW4gcmFuZ2UuCiAg
ICAgaWYgKG1hdGNoTGVuZ3RoID4gbGVuZ3RoKCkpCkBAIC04MTcsMTcgKzk1Niw1MyBAQCBQYXNz
UmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnJlcGxhCiAgICAgaWYgKG9sZEMgPT0gbmV3
QykKICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgdW5zaWduZWQgaTsKLSAgICBmb3IgKGkgPSAw
OyBpICE9IG1fbGVuZ3RoOyArK2kpCi0gICAgICAgIGlmIChtX2RhdGFbaV0gPT0gb2xkQykKKyAg
ICBmb3IgKGkgPSAwOyBpICE9IG1fbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgVUNoYXIgYyA9IGlz
OEJpdCgpID8gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4obV9kYXRhOFtpXSkgOiBtX2RhdGEx
NltpXTsKKyAgICAgICAgaWYgKGMgPT0gb2xkQykKICAgICAgICAgICAgIGJyZWFrOworICAgIH0K
ICAgICBpZiAoaSA9PSBtX2xlbmd0aCkKICAgICAgICAgcmV0dXJuIHRoaXM7CiAKKyAgICBpZiAo
aXM4Qml0KCkpIHsKKyAgICAgICAgaWYgKG9sZEMgPiAweGZmKSAvLyBMb29raW5nIGZvciBhIDE2
IGJpdCBjaGFyIGluIGFuIDggYml0IHN0cmluZworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisK
KyAgICAgICAgaWYgKG5ld0MgPD0gMHhmZikgeworICAgICAgICAgICAgY2hhciogZGF0YTsKKyAg
ICAgICAgICAgIGNoYXIgb2xkQ2hhciA9IHN0YXRpY19jYXN0PGNoYXI+KG9sZEMpOworICAgICAg
ICAgICAgY2hhciBuZXdDaGFyID0gc3RhdGljX2Nhc3Q8Y2hhcj4obmV3Qyk7CisKKyAgICAgICAg
ICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChtX2xl
bmd0aCwgZGF0YSk7CisKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgIT0gbV9sZW5ndGg7ICsr
aSkgeworICAgICAgICAgICAgICAgIGNoYXIgY2ggPSBtX2RhdGE4W2ldOworICAgICAgICAgICAg
ICAgIGlmIChjaCA9PSBvbGRDaGFyKQorICAgICAgICAgICAgICAgICAgICBjaCA9IG5ld0NoYXI7
CisgICAgICAgICAgICAgICAgZGF0YVtpXSA9IGNoOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgcmV0dXJuIG5ld0ltcGwucmVsZWFzZSgpOworICAgICAgICB9CisKKyAgICAgICAgLy8gUG9z
c2libHkgbmVlZCB0byB1cCBjb252ZXJ0IGZyb20gOCB0byAxNiBiaXQKKyAgICAgICAgVUNoYXIq
IGRhdGE7CisgICAgICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0gY3JlYXRlVW5pbml0
aWFsaXplZChtX2xlbmd0aCwgZGF0YSk7CisKKyAgICAgICAgZm9yIChpID0gMDsgaSAhPSBtX2xl
bmd0aDsgKytpKSB7CisgICAgICAgICAgICBVQ2hhciBjaCA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
IGNoYXI+KG1fZGF0YThbaV0pOworICAgICAgICAgICAgaWYgKGNoID09IG9sZEMpCisgICAgICAg
ICAgICAgICAgY2ggPSBuZXdDOworICAgICAgICAgICAgZGF0YVtpXSA9IGNoOworICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuIG5ld0ltcGwucmVsZWFzZSgpOworICAgIH0KKwogICAgIFVDaGFy
KiBkYXRhOwogICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFs
aXplZChtX2xlbmd0aCwgZGF0YSk7CiAKICAgICBmb3IgKGkgPSAwOyBpICE9IG1fbGVuZ3RoOyAr
K2kpIHsKLSAgICAgICAgVUNoYXIgY2ggPSBtX2RhdGFbaV07CisgICAgICAgIFVDaGFyIGNoID0g
bV9kYXRhMTZbaV07CiAgICAgICAgIGlmIChjaCA9PSBvbGRDKQogICAgICAgICAgICAgY2ggPSBu
ZXdDOwogICAgICAgICBkYXRhW2ldID0gY2g7CkBAIC04NDIsMTggKzEwMTcsNDMgQEAgUGFzc1Jl
ZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpyZXBsYQogICAgIHVuc2lnbmVkIGxlbmd0aFRv
SW5zZXJ0ID0gc3RyID8gc3RyLT5sZW5ndGgoKSA6IDA7CiAgICAgaWYgKCFsZW5ndGhUb1JlcGxh
Y2UgJiYgIWxlbmd0aFRvSW5zZXJ0KQogICAgICAgICByZXR1cm4gdGhpczsKLSAgICBVQ2hhciog
ZGF0YTsKIAogICAgIGlmICgobGVuZ3RoKCkgLSBsZW5ndGhUb1JlcGxhY2UpID49IChudW1lcmlj
X2xpbWl0czx1bnNpZ25lZD46Om1heCgpIC0gbGVuZ3RoVG9JbnNlcnQpKQogICAgICAgICBDUkFT
SCgpOwogCisgICAgaWYgKGlzOEJpdCgpICYmICghc3RyIHx8IHN0ci0+aXM4Qml0KCkpKSB7Cisg
ICAgICAgIGNoYXIqIGRhdGE7CisgICAgICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0K
KyAgICAgICAgY3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgoKSAtIGxlbmd0aFRvUmVwbGFjZSAr
IGxlbmd0aFRvSW5zZXJ0LCBkYXRhKTsKKyAgICAgICAgbWVtY3B5KGRhdGEsIG1fZGF0YTgsIHBv
c2l0aW9uICogc2l6ZW9mKGNoYXIpKTsKKyAgICAgICAgaWYgKHN0cikKKyAgICAgICAgICAgIG1l
bWNweShkYXRhICsgcG9zaXRpb24sIHN0ci0+bV9kYXRhOCwgbGVuZ3RoVG9JbnNlcnQgKiBzaXpl
b2YoY2hhcikpOworICAgICAgICBtZW1jcHkoZGF0YSArIHBvc2l0aW9uICsgbGVuZ3RoVG9JbnNl
cnQsIG1fZGF0YTggKyBwb3NpdGlvbiArIGxlbmd0aFRvUmVwbGFjZSwKKyAgICAgICAgICAgICAg
IChsZW5ndGgoKSAtIHBvc2l0aW9uIC0gbGVuZ3RoVG9SZXBsYWNlKSAqIHNpemVvZihjaGFyKSk7
CisgICAgICAgIHJldHVybiBuZXdJbXBsLnJlbGVhc2UoKTsKKyAgICB9CisgICAgVUNoYXIqIGRh
dGE7CiAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IG5ld0ltcGwgPQogICAgICAgICBjcmVhdGVVbmlu
aXRpYWxpemVkKGxlbmd0aCgpIC0gbGVuZ3RoVG9SZXBsYWNlICsgbGVuZ3RoVG9JbnNlcnQsIGRh
dGEpOwotICAgIG1lbWNweShkYXRhLCBjaGFyYWN0ZXJzKCksIHBvc2l0aW9uICogc2l6ZW9mKFVD
aGFyKSk7Ci0gICAgaWYgKHN0cikKLSAgICAgICAgbWVtY3B5KGRhdGEgKyBwb3NpdGlvbiwgc3Ry
LT5jaGFyYWN0ZXJzKCksIGxlbmd0aFRvSW5zZXJ0ICogc2l6ZW9mKFVDaGFyKSk7Ci0gICAgbWVt
Y3B5KGRhdGEgKyBwb3NpdGlvbiArIGxlbmd0aFRvSW5zZXJ0LCBjaGFyYWN0ZXJzKCkgKyBwb3Np
dGlvbiArIGxlbmd0aFRvUmVwbGFjZSwKLSAgICAgICAgKGxlbmd0aCgpIC0gcG9zaXRpb24gLSBs
ZW5ndGhUb1JlcGxhY2UpICogc2l6ZW9mKFVDaGFyKSk7CisgICAgaWYgKGlzOEJpdCgpKQorICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcG9zaXRpb247IGkrKykKKyAgICAgICAgICAg
IGRhdGFbaV0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihtX2RhdGE4W2ldKTsKKyAgICBl
bHNlCisgICAgICAgIG1lbWNweShkYXRhLCBtX2RhdGExNiwgcG9zaXRpb24gKiBzaXplb2YoVUNo
YXIpKTsKKyAgICBpZiAoc3RyKSB7CisgICAgICAgIGlmIChzdHItPmlzOEJpdCgpKQorICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aFRvSW5zZXJ0OyBpKyspCisgICAg
ICAgICAgICAgICAgZGF0YVtpICsgcG9zaXRpb25dID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh
cj4oc3RyLT5tX2RhdGE4W2ldKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbWVtY3B5KGRh
dGEgKyBwb3NpdGlvbiwgc3RyLT5tX2RhdGExNiwgbGVuZ3RoVG9JbnNlcnQgKiBzaXplb2YoVUNo
YXIpKTsKKyAgICB9CisgICAgaWYgKGlzOEJpdCgpKSB7CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBsZW5ndGgoKSAtIHBvc2l0aW9uIC0gbGVuZ3RoVG9SZXBsYWNlOyBpKyspCisg
ICAgICAgICAgICBkYXRhW2kgKyBwb3NpdGlvbiArIGxlbmd0aFRvSW5zZXJ0XSA9IG1fZGF0YThb
aSArIHBvc2l0aW9uICsgbGVuZ3RoVG9SZXBsYWNlXTsKKyAgICB9IGVsc2UgeworICAgICAgICBt
ZW1jcHkoZGF0YSArIHBvc2l0aW9uICsgbGVuZ3RoVG9JbnNlcnQsIGNoYXJhY3RlcnMoKSArIHBv
c2l0aW9uICsgbGVuZ3RoVG9SZXBsYWNlLAorICAgICAgICAgICAgKGxlbmd0aCgpIC0gcG9zaXRp
b24gLSBsZW5ndGhUb1JlcGxhY2UpICogc2l6ZW9mKFVDaGFyKSk7CisgICAgfQogICAgIHJldHVy
biBuZXdJbXBsLnJlbGVhc2UoKTsKIH0KIApAQCAtODg2LDI2ICsxMDg2LDY0IEBAIFBhc3NSZWZQ
dHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6cmVwbGEKIAogICAgIG5ld1NpemUgKz0gcmVwbGFj
ZVNpemU7CiAKLSAgICBVQ2hhciogZGF0YTsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gbmV3SW1w
bCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQobmV3U2l6ZSwgZGF0YSk7Ci0KICAgICAvLyBDb25zdHJ1
Y3QgdGhlIG5ldyBkYXRhCiAgICAgc2l6ZV90IHNyY1NlZ21lbnRFbmQ7CiAgICAgdW5zaWduZWQg
c3JjU2VnbWVudExlbmd0aDsKICAgICBzcmNTZWdtZW50U3RhcnQgPSAwOwogICAgIHVuc2lnbmVk
IGRzdE9mZnNldCA9IDA7CiAgICAgCisgICAgLy8gVGhlcmUgYXJlIDQgY2FzZXM6CisgICAgLy8g
MS4gdGhpcyBhbmQgcmVwbGFjZW1lbnQgYXJlIGJvdGggMTYgYml0CisgICAgLy8gMi4gdGhpcyBh
bmQgcmVwbGFjZW1lbnQgYXJlIGJvdGggOCBiaXQKKyAgICAvLyAzLiB0aGlzIGlzIDggYml0IGFu
ZCByZXBsYWNlbWVudCBpcyAxNiBiaXQKKyAgICAvLyA0LiB0aGlzIGlzIDE2IGJpdCBhbmQgcmVw
bGFjZW1lbnQgaXMgOCBiaXQKKyAgICAvLyBQbHVzIHRoZXJlIGlzIHZlcnkgc2ltaWxhciBjb2Rl
IGluIHRoZSBwYXR0ZXJuIHJlcGxhY2VtZW50IGZ1bmN0aW9uIGJlbG93LgorICAgIGlmIChpczhC
aXQoKSAmJiByZXBsYWNlbWVudC0+aXM4Qml0KCkpIHsKKyAgICAgICAgY2hhciogZGF0YTsKKyAg
ICAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IG5ld0ltcGwgPSBjcmVhdGVVbmluaXRpYWxpemVkKG5l
d1NpemUsIGRhdGEpOworCisgICAgICAgIHdoaWxlICgoc3JjU2VnbWVudEVuZCA9IGZpbmQocGF0
dGVybiwgc3JjU2VnbWVudFN0YXJ0KSkgIT0gbm90Rm91bmQpIHsKKyAgICAgICAgICAgIHNyY1Nl
Z21lbnRMZW5ndGggPSBzcmNTZWdtZW50RW5kIC0gc3JjU2VnbWVudFN0YXJ0OworICAgICAgICAg
ICAgbWVtY3B5KGRhdGEgKyBkc3RPZmZzZXQsIG1fZGF0YTggKyBzcmNTZWdtZW50U3RhcnQsIHNy
Y1NlZ21lbnRMZW5ndGggKiBzaXplb2YoY2hhcikpOworICAgICAgICAgICAgZHN0T2Zmc2V0ICs9
IHNyY1NlZ21lbnRMZW5ndGg7CisgICAgICAgICAgICBtZW1jcHkoZGF0YSArIGRzdE9mZnNldCwg
cmVwbGFjZW1lbnQtPm1fZGF0YTgsIHJlcFN0ckxlbmd0aCAqIHNpemVvZihjaGFyKSk7CisgICAg
ICAgICAgICBkc3RPZmZzZXQgKz0gcmVwU3RyTGVuZ3RoOworICAgICAgICAgICAgc3JjU2VnbWVu
dFN0YXJ0ID0gc3JjU2VnbWVudEVuZCArIDE7CisgICAgICAgIH0KKworICAgICAgICBzcmNTZWdt
ZW50TGVuZ3RoID0gbV9sZW5ndGggLSBzcmNTZWdtZW50U3RhcnQ7CisgICAgICAgIG1lbWNweShk
YXRhICsgZHN0T2Zmc2V0LCBtX2RhdGE4ICsgc3JjU2VnbWVudFN0YXJ0LCBzcmNTZWdtZW50TGVu
Z3RoICogc2l6ZW9mKGNoYXIpKTsKKworICAgICAgICBBU1NFUlQoZHN0T2Zmc2V0ICsgc3JjU2Vn
bWVudExlbmd0aCA9PSBuZXdJbXBsLT5sZW5ndGgoKSk7CisKKyAgICAgICAgcmV0dXJuIG5ld0lt
cGwucmVsZWFzZSgpOworICAgIH0KKyAgICBVQ2hhciogZGF0YTsKKyAgICBSZWZQdHI8U3RyaW5n
SW1wbD4gbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQobmV3U2l6ZSwgZGF0YSk7CisKICAg
ICB3aGlsZSAoKHNyY1NlZ21lbnRFbmQgPSBmaW5kKHBhdHRlcm4sIHNyY1NlZ21lbnRTdGFydCkp
ICE9IG5vdEZvdW5kKSB7CiAgICAgICAgIHNyY1NlZ21lbnRMZW5ndGggPSBzcmNTZWdtZW50RW5k
IC0gc3JjU2VnbWVudFN0YXJ0OwotICAgICAgICBtZW1jcHkoZGF0YSArIGRzdE9mZnNldCwgbV9k
YXRhICsgc3JjU2VnbWVudFN0YXJ0LCBzcmNTZWdtZW50TGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7
CisgICAgICAgIGlmIChpczhCaXQoKSkKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBzcmNTZWdtZW50TGVuZ3RoOyBpKyspCisgICAgICAgICAgICAgICAgZGF0YVtpICsgZHN0
T2Zmc2V0XSA9IG1fZGF0YThbaSArIHNyY1NlZ21lbnRTdGFydF07CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIG1lbWNweShkYXRhICsgZHN0T2Zmc2V0LCBtX2RhdGExNiArIHNyY1NlZ21lbnRT
dGFydCwgc3JjU2VnbWVudExlbmd0aCAqIHNpemVvZihVQ2hhcikpOwogICAgICAgICBkc3RPZmZz
ZXQgKz0gc3JjU2VnbWVudExlbmd0aDsKLSAgICAgICAgbWVtY3B5KGRhdGEgKyBkc3RPZmZzZXQs
IHJlcGxhY2VtZW50LT5tX2RhdGEsIHJlcFN0ckxlbmd0aCAqIHNpemVvZihVQ2hhcikpOworICAg
ICAgICBpZiAocmVwbGFjZW1lbnQtPmlzOEJpdCgpKQorICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHJlcFN0ckxlbmd0aDsgaSsrKQorICAgICAgICAgICAgICAgIGRhdGFbaSAr
IGRzdE9mZnNldF0gPSByZXBsYWNlbWVudC0+bV9kYXRhOFtpXTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgbWVtY3B5KGRhdGEgKyBkc3RPZmZzZXQsIHJlcGxhY2VtZW50LT5tX2RhdGExNiwg
cmVwU3RyTGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CiAgICAgICAgIGRzdE9mZnNldCArPSByZXBT
dHJMZW5ndGg7CiAgICAgICAgIHNyY1NlZ21lbnRTdGFydCA9IHNyY1NlZ21lbnRFbmQgKyAxOwog
ICAgIH0KIAogICAgIHNyY1NlZ21lbnRMZW5ndGggPSBtX2xlbmd0aCAtIHNyY1NlZ21lbnRTdGFy
dDsKLSAgICBtZW1jcHkoZGF0YSArIGRzdE9mZnNldCwgbV9kYXRhICsgc3JjU2VnbWVudFN0YXJ0
LCBzcmNTZWdtZW50TGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CisgICAgaWYgKGlzOEJpdCgpKQor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3JjU2VnbWVudExlbmd0aDsgaSsrKQor
ICAgICAgICAgICAgZGF0YVtpICsgZHN0T2Zmc2V0XSA9IG1fZGF0YThbaSArIHNyY1NlZ21lbnRT
dGFydF07CisgICAgZWxzZQorICAgICAgICBtZW1jcHkoZGF0YSArIGRzdE9mZnNldCwgbV9kYXRh
MTYgKyBzcmNTZWdtZW50U3RhcnQsIHNyY1NlZ21lbnRMZW5ndGggKiBzaXplb2YoVUNoYXIpKTsK
IAogICAgIEFTU0VSVChkc3RPZmZzZXQgKyBzcmNTZWdtZW50TGVuZ3RoID09IG5ld0ltcGwtPmxl
bmd0aCgpKTsKIApAQCAtOTQ0LDggKzExODIsNiBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0
cmluZ0ltcGw6OnJlcGxhCiAKICAgICBuZXdTaXplICs9IG1hdGNoQ291bnQgKiByZXBTdHJMZW5n
dGg7CiAKLSAgICBVQ2hhciogZGF0YTsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gbmV3SW1wbCA9
IGNyZWF0ZVVuaW5pdGlhbGl6ZWQobmV3U2l6ZSwgZGF0YSk7CiAgICAgCiAgICAgLy8gQ29uc3Ry
dWN0IHRoZSBuZXcgZGF0YQogICAgIHNpemVfdCBzcmNTZWdtZW50RW5kOwpAQCAtOTUzLDE3ICsx
MTg5LDU2IEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6cmVwbGEKICAgICBz
cmNTZWdtZW50U3RhcnQgPSAwOwogICAgIHVuc2lnbmVkIGRzdE9mZnNldCA9IDA7CiAgICAgCisg
ICAgLy8gVGhlcmUgYXJlIDQgY2FzZXM6CisgICAgLy8gMS4gdGhpcyBhbmQgcmVwbGFjZW1lbnQg
YXJlIGJvdGggMTYgYml0CisgICAgLy8gMi4gdGhpcyBhbmQgcmVwbGFjZW1lbnQgYXJlIGJvdGgg
OCBiaXQKKyAgICAvLyAzLiB0aGlzIGlzIDggYml0IGFuZCByZXBsYWNlbWVudCBpcyAxNiBiaXQK
KyAgICAvLyA0LiB0aGlzIGlzIDE2IGJpdCBhbmQgcmVwbGFjZW1lbnQgaXMgOCBiaXQKKyAgICAv
LyBQbHVzIHRoZXJlIGlzIHZlcnkgc2ltaWxhciBjb2RlIGluIHRoZSBzaW5nbGUtY2hhciByZXBs
YWNlbWVudCBmdW5jdGlvbiBhYm92ZS4KKyAgICBpZiAoaXM4Qml0KCkgJiYgcmVwbGFjZW1lbnQt
PmlzOEJpdCgpKSB7CisgICAgICAgIGNoYXIqIGRhdGE7CisgICAgICAgIFJlZlB0cjxTdHJpbmdJ
bXBsPiBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChuZXdTaXplLCBkYXRhKTsKKyAgICAg
ICAgd2hpbGUgKChzcmNTZWdtZW50RW5kID0gZmluZChwYXR0ZXJuLCBzcmNTZWdtZW50U3RhcnQp
KSAhPSBub3RGb3VuZCkgeworICAgICAgICAgICAgc3JjU2VnbWVudExlbmd0aCA9IHNyY1NlZ21l
bnRFbmQgLSBzcmNTZWdtZW50U3RhcnQ7CisgICAgICAgICAgICBtZW1jcHkoZGF0YSArIGRzdE9m
ZnNldCwgbV9kYXRhOCArIHNyY1NlZ21lbnRTdGFydCwgc3JjU2VnbWVudExlbmd0aCAqIHNpemVv
ZihjaGFyKSk7CisgICAgICAgICAgICBkc3RPZmZzZXQgKz0gc3JjU2VnbWVudExlbmd0aDsKKyAg
ICAgICAgICAgIG1lbWNweShkYXRhICsgZHN0T2Zmc2V0LCByZXBsYWNlbWVudC0+bV9kYXRhOCwg
cmVwU3RyTGVuZ3RoICogc2l6ZW9mKGNoYXIpKTsKKyAgICAgICAgICAgIGRzdE9mZnNldCArPSBy
ZXBTdHJMZW5ndGg7CisgICAgICAgICAgICBzcmNTZWdtZW50U3RhcnQgPSBzcmNTZWdtZW50RW5k
ICsgcGF0dGVybkxlbmd0aDsKKyAgICAgICAgfQorCisgICAgICAgIHNyY1NlZ21lbnRMZW5ndGgg
PSBtX2xlbmd0aCAtIHNyY1NlZ21lbnRTdGFydDsKKyAgICAgICAgbWVtY3B5KGRhdGEgKyBkc3RP
ZmZzZXQsIG1fZGF0YTggKyBzcmNTZWdtZW50U3RhcnQsIHNyY1NlZ21lbnRMZW5ndGggKiBzaXpl
b2YoY2hhcikpOworCisgICAgICAgIEFTU0VSVChkc3RPZmZzZXQgKyBzcmNTZWdtZW50TGVuZ3Ro
ID09IG5ld0ltcGwtPmxlbmd0aCgpKTsKKworICAgICAgICByZXR1cm4gbmV3SW1wbC5yZWxlYXNl
KCk7CisgICAgfQorICAgIFVDaGFyKiBkYXRhOworICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBuZXdJ
bXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChuZXdTaXplLCBkYXRhKTsKICAgICB3aGlsZSAoKHNy
Y1NlZ21lbnRFbmQgPSBmaW5kKHBhdHRlcm4sIHNyY1NlZ21lbnRTdGFydCkpICE9IG5vdEZvdW5k
KSB7CiAgICAgICAgIHNyY1NlZ21lbnRMZW5ndGggPSBzcmNTZWdtZW50RW5kIC0gc3JjU2VnbWVu
dFN0YXJ0OwotICAgICAgICBtZW1jcHkoZGF0YSArIGRzdE9mZnNldCwgbV9kYXRhICsgc3JjU2Vn
bWVudFN0YXJ0LCBzcmNTZWdtZW50TGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CisgICAgICAgIGlm
IChpczhCaXQoKSkKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzcmNTZWdt
ZW50TGVuZ3RoOyBpKyspCisgICAgICAgICAgICAgICAgZGF0YVtpICsgZHN0T2Zmc2V0XSA9IG1f
ZGF0YThbaSArIHNyY1NlZ21lbnRTdGFydF07CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1l
bWNweShkYXRhICsgZHN0T2Zmc2V0LCBtX2RhdGExNiArIHNyY1NlZ21lbnRTdGFydCwgc3JjU2Vn
bWVudExlbmd0aCAqIHNpemVvZihVQ2hhcikpOwogICAgICAgICBkc3RPZmZzZXQgKz0gc3JjU2Vn
bWVudExlbmd0aDsKLSAgICAgICAgbWVtY3B5KGRhdGEgKyBkc3RPZmZzZXQsIHJlcGxhY2VtZW50
LT5tX2RhdGEsIHJlcFN0ckxlbmd0aCAqIHNpemVvZihVQ2hhcikpOworICAgICAgICBpZiAocmVw
bGFjZW1lbnQtPmlzOEJpdCgpKQorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHJlcFN0ckxlbmd0aDsgaSsrKQorICAgICAgICAgICAgICAgIGRhdGFbaSArIGRzdE9mZnNldF0g
PSByZXBsYWNlbWVudC0+bV9kYXRhOFtpXTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbWVt
Y3B5KGRhdGEgKyBkc3RPZmZzZXQsIHJlcGxhY2VtZW50LT5tX2RhdGExNiwgcmVwU3RyTGVuZ3Ro
ICogc2l6ZW9mKFVDaGFyKSk7CiAgICAgICAgIGRzdE9mZnNldCArPSByZXBTdHJMZW5ndGg7CiAg
ICAgICAgIHNyY1NlZ21lbnRTdGFydCA9IHNyY1NlZ21lbnRFbmQgKyBwYXR0ZXJuTGVuZ3RoOwog
ICAgIH0KIAogICAgIHNyY1NlZ21lbnRMZW5ndGggPSBtX2xlbmd0aCAtIHNyY1NlZ21lbnRTdGFy
dDsKLSAgICBtZW1jcHkoZGF0YSArIGRzdE9mZnNldCwgbV9kYXRhICsgc3JjU2VnbWVudFN0YXJ0
LCBzcmNTZWdtZW50TGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CisgICAgaWYgKGlzOEJpdCgpKQor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3JjU2VnbWVudExlbmd0aDsgaSsrKQor
ICAgICAgICAgICAgZGF0YVtpICsgZHN0T2Zmc2V0XSA9IG1fZGF0YThbaSArIHNyY1NlZ21lbnRT
dGFydF07CisgICAgZWxzZQorICAgICAgICBtZW1jcHkoZGF0YSArIGRzdE9mZnNldCwgbV9kYXRh
MTYgKyBzcmNTZWdtZW50U3RhcnQsIHNyY1NlZ21lbnRMZW5ndGggKiBzaXplb2YoVUNoYXIpKTsK
IAogICAgIEFTU0VSVChkc3RPZmZzZXQgKyBzcmNTZWdtZW50TGVuZ3RoID09IG5ld0ltcGwtPmxl
bmd0aCgpKTsKIApAQCAtOTc1LDYgKzEyNTAsNDUgQEAgYm9vbCBlcXVhbChjb25zdCBTdHJpbmdJ
bXBsKiBhLCBjb25zdCBTdAogICAgIHJldHVybiBTdHJpbmdIYXNoOjplcXVhbChhLCBiKTsKIH0K
IAorYm9vbCBlcXVhbChjb25zdCBTdHJpbmdJbXBsKiBhLCBjb25zdCBjaGFyKiBiLCB1bnNpZ25l
ZCBsZW5ndGgpCit7CisgICAgaWYgKCFhKQorICAgICAgICByZXR1cm4gIWI7CisgICAgaWYgKCFi
KQorICAgICAgICByZXR1cm4gIWE7CisKKyAgICBpZiAobGVuZ3RoICE9IGEtPmxlbmd0aCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoYS0+aXM4Qml0KCkpIHsKKyAgICAgICAg
Y29uc3QgY2hhciogYUNoYXJzID0gYS0+Y2hhcmFjdGVyczgoKTsKKworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpICE9IGxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBj
aGFyIGJjID0gYltpXTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYWMgPSBhQ2hhcnNbaV07
CisgICAgICAgICAgICBpZiAoIWJjKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIGlmIChhYyAhPSBiYykKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBjb25zdCBVQ2hh
ciogYUNoYXJzID0gYS0+Y2hhcmFjdGVyczE2KCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpICE9IGxlbmd0aDsgKytpKSB7CisgICAgICAgIFVDaGFyIGJjID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcj4oYltpXSk7CisgICAgICAgIFVDaGFyIGFjID0gYUNoYXJzW2ldOworICAgICAg
ICBpZiAoIWJjKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoYWMgIT0g
YmMpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7
Cit9CisKIGJvb2wgZXF1YWwoY29uc3QgU3RyaW5nSW1wbCogYSwgY29uc3QgY2hhciogYikKIHsK
ICAgICBpZiAoIWEpCkBAIC05ODMsMTIgKzEyOTcsMjcgQEAgYm9vbCBlcXVhbChjb25zdCBTdHJp
bmdJbXBsKiBhLCBjb25zdCBjaAogICAgICAgICByZXR1cm4gIWE7CiAKICAgICB1bnNpZ25lZCBs
ZW5ndGggPSBhLT5sZW5ndGgoKTsKLSAgICBjb25zdCBVQ2hhciogYXMgPSBhLT5jaGFyYWN0ZXJz
KCk7CisKKyAgICBpZiAoYS0+aXM4Qml0KCkpIHsKKyAgICAgICAgY29uc3QgY2hhciogYVB0ciA9
IGEtPmNoYXJhY3RlcnM4KCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgIT0gbGVu
Z3RoOyArK2kpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYmMgPSBiW2ldOworICAgICAg
ICAgICAgdW5zaWduZWQgY2hhciBhYyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGFQdHJb
aV0pOworICAgICAgICAgICAgaWYgKCFiYykKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICBpZiAoYWMgIT0gYmMpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuICFiW2xlbmd0aF07CisgICAgfQorCisgICAg
Y29uc3QgVUNoYXIqIGFQdHIgPSBhLT5jaGFyYWN0ZXJzMTYoKTsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpICE9IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIHVuc2lnbmVkIGNoYXIgYmMgPSBi
W2ldOwogICAgICAgICBpZiAoIWJjKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICBpZiAoYXNbaV0gIT0gYmMpCisgICAgICAgIGlmIChhUHRyW2ldICE9IGJjKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtMTAxMywyMCArMTM0MiwyOCBAQCBib29sIGVx
dWFsKGNvbnN0IFN0cmluZ0ltcGwqIGEsIGNvbnN0IFVDCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgcmV0dXJuIHRydWU7CiAjZWxzZQorICAgIGlmIChhLT5pczhCaXQoKSkgeworICAg
ICAgICBjb25zdCBjaGFyKiBhcyA9IGEtPmNoYXJhY3RlcnM4KCk7CisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgIT0gbGVuZ3RoOyArK2kpCisgICAgICAgICAgICBpZiAoc3RhdGljX2Nh
c3Q8dW5zaWduZWQgY2hhcj4oYXNbaV0pICE9IGJbaV0pCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKICAgICAvKiBEbyBpdCA0LWJ5
dGVzLWF0LWEtdGltZSBvbiBhcmNoaXRlY3R1cmVzIHdoZXJlIGl0J3Mgc2FmZSAqLwotICAgIAot
ICAgIGNvbnN0IHVpbnQzMl90KiBhQ2hhcmFjdGVycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dWludDMyX3QqPihhLT5jaGFyYWN0ZXJzKCkpOworCisgICAgY29uc3QgdWludDMyX3QqIGFDaGFy
YWN0ZXJzID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KGEtPmNoYXJhY3RlcnMx
NigpKTsKICAgICBjb25zdCB1aW50MzJfdCogYkNoYXJhY3RlcnMgPSByZWludGVycHJldF9jYXN0
PGNvbnN0IHVpbnQzMl90Kj4oYik7Ci0gICAgCisKICAgICB1bnNpZ25lZCBoYWxmTGVuZ3RoID0g
bGVuZ3RoID4+IDE7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSAhPSBoYWxmTGVuZ3RoOyAr
K2kpIHsKICAgICAgICAgaWYgKCphQ2hhcmFjdGVycysrICE9ICpiQ2hhcmFjdGVycysrKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKKwogICAgIGlmIChsZW5ndGggJiAx
ICYmICAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MTZfdCo+KGFDaGFyYWN0ZXJzKSAhPSAq
cmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MTZfdCo+KGJDaGFyYWN0ZXJzKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIAorCiAgICAgcmV0dXJuIHRydWU7CiAjZW5kaWYKIH0KQEAgLTEw
NDQsNyArMTM4MSw2IEBAIGJvb2wgZXF1YWxJZ25vcmluZ0Nhc2UoU3RyaW5nSW1wbCogYSwgY28K
ICAgICAgICAgcmV0dXJuICFhOwogCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gYS0+bGVuZ3RoKCk7
Ci0gICAgY29uc3QgVUNoYXIqIGFzID0gYS0+Y2hhcmFjdGVycygpOwogCiAgICAgLy8gRG8gYSBm
YXN0ZXIgbG9vcCBmb3IgdGhlIGNhc2Ugd2hlcmUgYWxsIHRoZSBjaGFyYWN0ZXJzIGFyZSBBU0NJ
SS4KICAgICBVQ2hhciBvcmVkID0gMDsKQEAgLTEwNTMsMTMgKzEzODksMTQgQEAgYm9vbCBlcXVh
bElnbm9yaW5nQ2FzZShTdHJpbmdJbXBsKiBhLCBjbwogICAgICAgICBjaGFyIGJjID0gYltpXTsK
ICAgICAgICAgaWYgKCFiYykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgVUNo
YXIgYWMgPSBhc1tpXTsKKyAgICAgICAgVUNoYXIgYWMgPSBhLT5pczhCaXQoKSA/IGEtPmNoYXJh
Y3RlcnM4KClbaV0gOiBhLT5jaGFyYWN0ZXJzMTYoKVtpXTsKICAgICAgICAgb3JlZCB8PSBhYzsK
ICAgICAgICAgZXF1YWwgPSBlcXVhbCAmJiAodG9BU0NJSUxvd2VyKGFjKSA9PSB0b0FTQ0lJTG93
ZXIoYmMpKTsKICAgICB9CiAKICAgICAvLyBEbyBhIHNsb3dlciBpbXBsZW1lbnRhdGlvbiBmb3Ig
Y2FzZXMgdGhhdCBpbmNsdWRlIG5vbi1BU0NJSSBjaGFyYWN0ZXJzLgogICAgIGlmIChvcmVkICYg
fjB4N0YpIHsKKyAgICAgICAgY29uc3QgVUNoYXIqIGFzID0gYS0+Y2hhcmFjdGVyczE2KCk7CiAg
ICAgICAgIGVxdWFsID0gdHJ1ZTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSAhPSBs
ZW5ndGg7ICsraSkgewogICAgICAgICAgICAgdW5zaWduZWQgY2hhciBiYyA9IGJbaV07CkBAIC0x
MDg1LDcgKzE0MjIsNyBAQCBib29sIGVxdWFsSWdub3JpbmdOdWxsaXR5KFN0cmluZ0ltcGwqIGEs
CiBXVEY6OlVuaWNvZGU6OkRpcmVjdGlvbiBTdHJpbmdJbXBsOjpkZWZhdWx0V3JpdGluZ0RpcmVj
dGlvbihib29sKiBoYXNTdHJvbmdEaXJlY3Rpb25hbGl0eSkKIHsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9sZW5ndGg7ICsraSkgewotICAgICAgICBXVEY6OlVuaWNvZGU6OkRpcmVj
dGlvbiBjaGFyRGlyZWN0aW9uID0gV1RGOjpVbmljb2RlOjpkaXJlY3Rpb24obV9kYXRhW2ldKTsK
KyAgICAgICAgV1RGOjpVbmljb2RlOjpEaXJlY3Rpb24gY2hhckRpcmVjdGlvbiA9IFdURjo6VW5p
Y29kZTo6ZGlyZWN0aW9uKGlzOEJpdCgpID8gbV9kYXRhOFtpXSA6IG1fZGF0YTE2W2ldKTsKICAg
ICAgICAgaWYgKGNoYXJEaXJlY3Rpb24gPT0gV1RGOjpVbmljb2RlOjpMZWZ0VG9SaWdodCkgewog
ICAgICAgICAgICAgaWYgKGhhc1N0cm9uZ0RpcmVjdGlvbmFsaXR5KQogICAgICAgICAgICAgICAg
ICpoYXNTdHJvbmdEaXJlY3Rpb25hbGl0eSA9IHRydWU7CkBAIC0xMTA1LDYgKzE0NDIsNyBAQCBX
VEY6OlVuaWNvZGU6OkRpcmVjdGlvbiBTdHJpbmdJbXBsOjpkZWZhCiAvLyBUaGlzIGlzIGEgaG90
IGZ1bmN0aW9uIGJlY2F1c2UgaXQncyB1c2VkIHdoZW4gcGFyc2luZyBIVE1MLgogUGFzc1JlZlB0
cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpjcmVhdGVTdHJpcHBpbmdOdWxsQ2hhcmFjdGVyc1Ns
b3dDYXNlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCiB7CisgICAg
Ly8gRklYTUU6IFNob3VsZCBTdHJpbmdCdWZmZXIgc3VwcG9ydCA4LWJpdCBzdHJpbmdzLCBtYXli
ZSB0ZW1wbGF0ZT8KICAgICBTdHJpbmdCdWZmZXIgc3RyaXBwZWRDb3B5KGxlbmd0aCk7CiAgICAg
dW5zaWduZWQgc3RyaXBwZWRMZW5ndGggPSAwOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsZW5ndGg7IGkrKykgewpAQCAtMTExOCw2ICsxNDU2LDcgQEAgUGFzc1JlZlB0cjxTdHJpbmdJ
bXBsPiBTdHJpbmdJbXBsOjpjcmVhdAogCiBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0lt
cGw6OmFkb3B0KFN0cmluZ0J1ZmZlciYgYnVmZmVyKQogeworICAgIC8vIEZJWE1FOiBoYW5kbGUg
OC1iaXQgU3RyaW5nQnVmZmVyIHdoZW4gaXQgZXhpc3RzLgogICAgIHVuc2lnbmVkIGxlbmd0aCA9
IGJ1ZmZlci5sZW5ndGgoKTsKICAgICBpZiAobGVuZ3RoID09IDApCiAgICAgICAgIHJldHVybiBl
bXB0eSgpOwpAQCAtMTEyOCwxMyArMTQ2NywyMSBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0
cmluZ0ltcGw6OmNyZWF0CiB7CiAgICAgLy8gVXNlIGNyZWF0ZVVuaW5pdGlhbGl6ZWQgaW5zdGVh
ZCBvZiAnbmV3IFN0cmluZ0ltcGwnIHNvIHRoYXQgdGhlIHN0cmluZyBhbmQgaXRzIGJ1ZmZlcgog
ICAgIC8vIGdldCBhbGxvY2F0ZWQgaW4gYSBzaW5nbGUgbWVtb3J5IGJsb2NrLgotICAgIFVDaGFy
KiBkYXRhOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmluZy5tX2xlbmd0aDsKICAgICBpZiAo
bGVuZ3RoID49IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpCiAgICAgICAgIENSQVNI
KCk7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IHRlcm1pbmF0ZWRTdHJpbmcgPSBjcmVhdGVVbmlu
aXRpYWxpemVkKGxlbmd0aCArIDEsIGRhdGEpOwotICAgIG1lbWNweShkYXRhLCBzdHJpbmcubV9k
YXRhLCBsZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKLSAgICBkYXRhW2xlbmd0aF0gPSAwOworICAg
IFJlZlB0cjxTdHJpbmdJbXBsPiB0ZXJtaW5hdGVkU3RyaW5nOworICAgIGlmIChzdHJpbmcuaXM4
Qml0KCkpIHsKKyAgICAgICAgY2hhciogZGF0YTsKKyAgICAgICAgdGVybWluYXRlZFN0cmluZyA9
IGNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoICsgMSwgZGF0YSk7CisgICAgICAgIG1lbWNweShk
YXRhLCBzdHJpbmcubV9kYXRhOCwgbGVuZ3RoICogc2l6ZW9mKGNoYXIpKTsKKyAgICAgICAgZGF0
YVtsZW5ndGhdID0gMDsKKyAgICB9IGVsc2UgeworICAgICAgICBVQ2hhciogZGF0YTsKKyAgICAg
ICAgdGVybWluYXRlZFN0cmluZyA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoICsgMSwgZGF0
YSk7CisgICAgICAgIG1lbWNweShkYXRhLCBzdHJpbmcubV9kYXRhMTYsIGxlbmd0aCAqIHNpemVv
ZihVQ2hhcikpOworICAgICAgICBkYXRhW2xlbmd0aF0gPSAwOworICAgIH0KICAgICB0ZXJtaW5h
dGVkU3RyaW5nLT5tX2xlbmd0aC0tOwogICAgIHRlcm1pbmF0ZWRTdHJpbmctPm1faGFzaCA9IHN0
cmluZy5tX2hhc2g7CiAgICAgdGVybWluYXRlZFN0cmluZy0+bV9yZWZDb3VudEFuZEZsYWdzIHw9
IHNfcmVmQ291bnRGbGFnSGFzVGVybWluYXRpbmdOdWxsQ2hhcmFjdGVyOwpAQCAtMTE0MywxMyAr
MTQ5MCwxOSBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmNyZWF0CiAKIFBh
c3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6dGhyZWFkc2FmZUNvcHkoKSBjb25zdAog
ewotICAgIHJldHVybiBjcmVhdGUobV9kYXRhLCBtX2xlbmd0aCk7CisgICAgaWYgKGlzOEJpdCgp
KQorICAgICAgICByZXR1cm4gY3JlYXRlKG1fZGF0YTgsIG1fbGVuZ3RoKTsKKyAgICByZXR1cm4g
Y3JlYXRlKG1fZGF0YTE2LCBtX2xlbmd0aCk7CisKIH0KIAogUGFzc1JlZlB0cjxTdHJpbmdJbXBs
PiBTdHJpbmdJbXBsOjpjcm9zc1RocmVhZFN0cmluZygpCiB7Ci0gICAgaWYgKFNoYXJlZFVDaGFy
KiBzaGFyZWRCdWZmZXIgPSB0aGlzLT5zaGFyZWRCdWZmZXIoKSkKLSAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBTdHJpbmdJbXBsKG1fZGF0YSwgbV9sZW5ndGgsIHNoYXJlZEJ1ZmZlci0+Y3Jv
c3NUaHJlYWRDb3B5KCkpKTsKKyAgICBpZiAoU2hhcmVkVUNoYXIqIHNoYXJlZEJ1ZmZlciA9IHRo
aXMtPnNoYXJlZEJ1ZmZlcjE2KCkpIHsKKyAgICAgICAgLy8gRklYTUU6IE1ha2UgdGhpcyB3b3Jr
IGZvciA4LWJpdCBzdHJpbmdzCisgICAgICAgIEFTU0VSVCghaXM4Qml0KCkpOworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFN0cmluZ0ltcGwobV9kYXRhMTYsIG1fbGVuZ3RoLCBzaGFyZWRC
dWZmZXItPmNyb3NzVGhyZWFkQ29weSgpKSk7CisgICAgfQogCiAgICAgLy8gSWYgbm8gc2hhcmVk
IGJ1ZmZlciBpcyBhdmFpbGFibGUsIGNyZWF0ZSBhIGNvcHkuCiAgICAgcmV0dXJuIHRocmVhZHNh
ZmVDb3B5KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvU3RyaW5nSW1w
bC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJpbmdJ
bXBsLmgJKHJldmlzaW9uIDk3MDAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0
L1N0cmluZ0ltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsNyBAQCB0eXBlZGVmIGNv
bnN0IHN0cnVjdCBfX0NGU3RyaW5nICogQ0ZTdHJpCiAvLyBMYW5kaW5nIHRoZSBmaWxlIG1vdmVz
IGluIG9uZSBwYXRjaCwgd2lsbCBmb2xsb3cgb24gd2l0aCBwYXRjaGVzIHRvIGNoYW5nZSB0aGUg
bmFtZXNwYWNlcy4KIG5hbWVzcGFjZSBKU0Mgewogc3RydWN0IElkZW50aWZpZXJDU3RyaW5nVHJh
bnNsYXRvcjsKK3N0cnVjdCBJZGVudGlmaWVyQ2hhckJ1ZmZlclRyYW5zbGF0b3I7CiBzdHJ1Y3Qg
SWRlbnRpZmllclVDaGFyQnVmZmVyVHJhbnNsYXRvcjsKIH0KIApAQCAtNjMsOCArNjQsMTIgQEAg
dHlwZWRlZiBDcm9zc1RocmVhZFJlZkNvdW50ZWQ8U2hhcmFibGVVQwogdHlwZWRlZiBib29sICgq
Q2hhcmFjdGVyTWF0Y2hGdW5jdGlvblB0cikoVUNoYXIpOwogdHlwZWRlZiBib29sICgqSXNXaGl0
ZVNwYWNlRnVuY3Rpb25QdHIpKFVDaGFyKTsKIAordGVtcGxhdGUgPHR5cGVuYW1lIENoYXJUeXBl
PiBpbmxpbmUgdW5zaWduZWQgdW5zaWduZWRDaGFyVmFsdWUoY29uc3QgQ2hhclR5cGUgYykgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGMpOyB9Cit0ZW1wbGF0ZSA8PiBpbmxpbmUgdW5z
aWduZWQgdW5zaWduZWRDaGFyVmFsdWU8Y2hhcj4oY29uc3QgY2hhciBjKSB7IHJldHVybiBzdGF0
aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihjKTsgfQorCiBjbGFzcyBTdHJpbmdJbXBsIDogcHVibGlj
IFN0cmluZ0ltcGxCYXNlIHsKICAgICBmcmllbmQgc3RydWN0IEpTQzo6SWRlbnRpZmllckNTdHJp
bmdUcmFuc2xhdG9yOworICAgIGZyaWVuZCBzdHJ1Y3QgSlNDOjpJZGVudGlmaWVyQ2hhckJ1ZmZl
clRyYW5zbGF0b3I7CiAgICAgZnJpZW5kIHN0cnVjdCBKU0M6OklkZW50aWZpZXJVQ2hhckJ1ZmZl
clRyYW5zbGF0b3I7CiAgICAgZnJpZW5kIHN0cnVjdCBXVEY6OkNTdHJpbmdUcmFuc2xhdG9yOwog
ICAgIGZyaWVuZCBzdHJ1Y3QgV1RGOjpIYXNoQW5kQ2hhcmFjdGVyc1RyYW5zbGF0b3I7CkBAIC03
Nyw3ICs4Miw3IEBAIHByaXZhdGU6CiAgICAgLy8gc3RhdGljIHN0cmluZ3Mgd2lsbCBiZSBzaGFy
ZWQgYWNyb3NzIHRocmVhZHMgJiByZWYtY291bnRlZCBpbiBhIG5vbi10aHJlYWRzYWZlIG1hbm5l
ci4KICAgICBTdHJpbmdJbXBsKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5n
dGgsIFN0YXRpY1N0cmluZ0NvbnN0cnVjdFR5cGUpCiAgICAgICAgIDogU3RyaW5nSW1wbEJhc2Uo
bGVuZ3RoLCBDb25zdHJ1Y3RTdGF0aWNTdHJpbmcpCi0gICAgICAgICwgbV9kYXRhKGNoYXJhY3Rl
cnMpCisgICAgICAgICwgbV9kYXRhMTYoY2hhcmFjdGVycykKICAgICAgICAgLCBtX2J1ZmZlcigw
KQogICAgICAgICAsIG1faGFzaCgwKQogICAgIHsKQEAgLTg3LDM2ICs5Miw4MiBAQCBwcml2YXRl
OgogICAgICAgICBoYXNoKCk7CiAgICAgfQogCi0gICAgLy8gQ3JlYXRlIGEgbm9ybWFsIHN0cmlu
ZyB3aXRoIGludGVybmFsIHN0b3JhZ2UgKEJ1ZmZlckludGVybmFsKQorICAgIC8vIFVzZWQgdG8g
Y29uc3RydWN0IHN0YXRpYyBzdHJpbmdzLCB3aGljaCBoYXZlIGFuIHNwZWNpYWwgcmVmQ291bnQg
dGhhdCBjYW4gbmV2ZXIgaGl0IHplcm8uCisgICAgLy8gVGhpcyBtZWFucyB0aGF0IHRoZSBzdGF0
aWMgc3RyaW5nIHdpbGwgbmV2ZXIgYmUgZGVzdHJveWVkLCB3aGljaCBpcyBpbXBvcnRhbnQgYmVj
YXVzZQorICAgIC8vIHN0YXRpYyBzdHJpbmdzIHdpbGwgYmUgc2hhcmVkIGFjcm9zcyB0aHJlYWRz
ICYgcmVmLWNvdW50ZWQgaW4gYSBub24tdGhyZWFkc2FmZSBtYW5uZXIuCisgICAgU3RyaW5nSW1w
bChjb25zdCBjaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIFN0YXRpY1N0cmluZ0Nv
bnN0cnVjdFR5cGUpCisgICAgOiBTdHJpbmdJbXBsQmFzZShsZW5ndGgsIENvbnN0cnVjdFN0YXRp
Y1N0cmluZykKKyAgICAsIG1fZGF0YTgoY2hhcmFjdGVycykKKyAgICAsIG1fYnVmZmVyKDApCisg
ICAgLCBtX2hhc2goMCkKKyAgICB7CisgICAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBoYXNoIGlz
IGNvbXB1dGVkIHNvIHRoYXQgQXRvbWljU3RyaW5nSGFzaCBjYW4gY2FsbCBleGlzdGluZ0hhc2go
KQorICAgICAgICAvLyB3aXRoIGltcHVuaXR5LiBUaGUgZW1wdHkgc3RyaW5nIGlzIHNwZWNpYWwg
YmVjYXVzZSBpdCBpcyBuZXZlciBlbnRlcmVkIGludG8KKyAgICAgICAgLy8gQXRvbWljU3RyaW5n
J3MgSGFzaEtleSwgYnV0IHN0aWxsIG5lZWRzIHRvIGNvbXBhcmUgY29ycmVjdGx5LgorICAgICAg
ICBtX3JlZkNvdW50QW5kRmxhZ3MgfD0gc19yZWZDb3VudEZsYWc4Qml0QnVmZmVyOworICAgICAg
ICBoYXNoKCk7CisgICAgfQorCisgICAgLy8gRklYTUU6IHRoZXJlIGhhcyB0byBiZSBhIGxlc3Mg
aGFja3kgd2F5IHRvIGRvIHRoaXMuCisgICAgZW51bSBGb3JjZThCaXQgeyBGb3JjZThCaXRDb25z
dHJ1Y3RvciB9OworICAgIC8vIENyZWF0ZSBhIG5vcm1hbCA4LWJpdCBzdHJpbmcgd2l0aCBpbnRl
cm5hbCBzdG9yYWdlIChCdWZmZXJJbnRlcm5hbCkKKyAgICBTdHJpbmdJbXBsKHVuc2lnbmVkIGxl
bmd0aCwgRm9yY2U4Qml0IHVudXNlZCkKKyAgICAgICAgOiBTdHJpbmdJbXBsQmFzZShsZW5ndGgs
IEJ1ZmZlckludGVybmFsKQorICAgICAgICAsIG1fZGF0YTgocmVpbnRlcnByZXRfY2FzdDxjb25z
dCBjaGFyKj4odGhpcyArIDEpKQorICAgICAgICAsIG1fYnVmZmVyKDApCisgICAgICAgICwgbV9o
YXNoKDApCisgICAgeworICAgICAgICBVTlVTRURfUEFSQU0odW51c2VkKTsgLy8gRklYTUUKKyAg
ICAgICAgbV9yZWZDb3VudEFuZEZsYWdzIHw9IHNfcmVmQ291bnRGbGFnOEJpdEJ1ZmZlcjsKKyAg
ICAgICAgQVNTRVJUKG1fZGF0YTgpOworICAgICAgICBBU1NFUlQobV9sZW5ndGgpOworICAgIH0K
KworICAgIC8vIENyZWF0ZSBhIG5vcm1hbCAxNi1iaXQgc3RyaW5nIHdpdGggaW50ZXJuYWwgc3Rv
cmFnZSAoQnVmZmVySW50ZXJuYWwpCiAgICAgU3RyaW5nSW1wbCh1bnNpZ25lZCBsZW5ndGgpCiAg
ICAgICAgIDogU3RyaW5nSW1wbEJhc2UobGVuZ3RoLCBCdWZmZXJJbnRlcm5hbCkKLSAgICAgICAg
LCBtX2RhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KHRoaXMgKyAxKSkKKyAgICAg
ICAgLCBtX2RhdGExNihyZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4odGhpcyArIDEpKQog
ICAgICAgICAsIG1fYnVmZmVyKDApCiAgICAgICAgICwgbV9oYXNoKDApCiAgICAgewotICAgICAg
ICBBU1NFUlQobV9kYXRhKTsKKyAgICAgICAgQVNTRVJUKG1fZGF0YTE2KTsKICAgICAgICAgQVNT
RVJUKG1fbGVuZ3RoKTsKICAgICB9CiAKICAgICAvLyBDcmVhdGUgYSBTdHJpbmdJbXBsIGFkb3B0
aW5nIG93bmVyc2hpcCBvZiB0aGUgcHJvdmlkZWQgYnVmZmVyIChCdWZmZXJPd25lZCkKICAgICBT
dHJpbmdJbXBsKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCiAgICAg
ICAgIDogU3RyaW5nSW1wbEJhc2UobGVuZ3RoLCBCdWZmZXJPd25lZCkKLSAgICAgICAgLCBtX2Rh
dGEoY2hhcmFjdGVycykKKyAgICAgICAgLCBtX2RhdGExNihjaGFyYWN0ZXJzKQogICAgICAgICAs
IG1fYnVmZmVyKDApCiAgICAgICAgICwgbV9oYXNoKDApCiAgICAgewotICAgICAgICBBU1NFUlQo
bV9kYXRhKTsKKyAgICAgICAgQVNTRVJUKG1fZGF0YTE2KTsKICAgICAgICAgQVNTRVJUKG1fbGVu
Z3RoKTsKICAgICB9CiAKLSAgICAvLyBVc2VkIHRvIGNyZWF0ZSBuZXcgc3RyaW5ncyB0aGF0IGFy
ZSBhIHN1YnN0cmluZyBvZiBhbiBleGlzdGluZyBTdHJpbmdJbXBsIChCdWZmZXJTdWJzdHJpbmcp
CisgICAgLy8gVXNlZCB0byBjcmVhdGUgbmV3IHN0cmluZ3MgdGhhdCBhcmUgYSBzdWJzdHJpbmcg
b2YgYW4gZXhpc3RpbmcgOC1iaXQgU3RyaW5nSW1wbCAoQnVmZmVyU3Vic3RyaW5nKQorICAgIFN0
cmluZ0ltcGwoY29uc3QgY2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBQYXNzUmVm
UHRyPFN0cmluZ0ltcGw+IGJhc2UpCisgICAgICAgIDogU3RyaW5nSW1wbEJhc2UobGVuZ3RoLCBC
dWZmZXJTdWJzdHJpbmcpCisgICAgICAgICwgbV9kYXRhOChjaGFyYWN0ZXJzKQorICAgICAgICAs
IG1fc3Vic3RyaW5nQnVmZmVyKGJhc2UubGVha1JlZigpKQorICAgICAgICAsIG1faGFzaCgwKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKG1fc3Vic3RyaW5nQnVmZmVyLT5tX3JlZkNvdW50QW5kRmxh
Z3MgJiBzX3JlZkNvdW50RmxhZzhCaXRCdWZmZXIpOworICAgICAgICBtX3JlZkNvdW50QW5kRmxh
Z3MgfD0gc19yZWZDb3VudEZsYWc4Qml0QnVmZmVyOworICAgICAgICBBU1NFUlQobV9kYXRhOCk7
CisgICAgICAgIEFTU0VSVChtX2xlbmd0aCk7CisgICAgICAgIEFTU0VSVChtX3N1YnN0cmluZ0J1
ZmZlci0+YnVmZmVyT3duZXJzaGlwKCkgIT0gQnVmZmVyU3Vic3RyaW5nKTsKKyAgICB9CisKKyAg
ICAvLyBVc2VkIHRvIGNyZWF0ZSBuZXcgc3RyaW5ncyB0aGF0IGFyZSBhIHN1YnN0cmluZyBvZiBh
biBleGlzdGluZyAxNi1iaXQgU3RyaW5nSW1wbCAoQnVmZmVyU3Vic3RyaW5nKQogICAgIFN0cmlu
Z0ltcGwoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgUGFzc1JlZlB0
cjxTdHJpbmdJbXBsPiBiYXNlKQogICAgICAgICA6IFN0cmluZ0ltcGxCYXNlKGxlbmd0aCwgQnVm
ZmVyU3Vic3RyaW5nKQotICAgICAgICAsIG1fZGF0YShjaGFyYWN0ZXJzKQorICAgICAgICAsIG1f
ZGF0YTE2KGNoYXJhY3RlcnMpCiAgICAgICAgICwgbV9zdWJzdHJpbmdCdWZmZXIoYmFzZS5sZWFr
UmVmKCkpCiAgICAgICAgICwgbV9oYXNoKDApCiAgICAgewotICAgICAgICBBU1NFUlQobV9kYXRh
KTsKKyAgICAgICAgQVNTRVJUKCEobV9zdWJzdHJpbmdCdWZmZXItPm1fcmVmQ291bnRBbmRGbGFn
cyAmIHNfcmVmQ291bnRGbGFnOEJpdEJ1ZmZlcikpOworICAgICAgICBBU1NFUlQobV9kYXRhMTYp
OwogICAgICAgICBBU1NFUlQobV9sZW5ndGgpOwogICAgICAgICBBU1NFUlQobV9zdWJzdHJpbmdC
dWZmZXItPmJ1ZmZlck93bmVyc2hpcCgpICE9IEJ1ZmZlclN1YnN0cmluZyk7CiAgICAgfQpAQCAt
MTI0LDIwICsxNzUsMjQgQEAgcHJpdmF0ZToKICAgICAvLyBVc2VkIHRvIGNvbnN0cnVjdCBuZXcg
c3RyaW5ncyBzaGFyaW5nIGFuIGV4aXN0aW5nIFNoYXJlZFVDaGFyIChCdWZmZXJTaGFyZWQpCiAg
ICAgU3RyaW5nSW1wbChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBQ
YXNzUmVmUHRyPFNoYXJlZFVDaGFyPiBzaGFyZWRCdWZmZXIpCiAgICAgICAgIDogU3RyaW5nSW1w
bEJhc2UobGVuZ3RoLCBCdWZmZXJTaGFyZWQpCi0gICAgICAgICwgbV9kYXRhKGNoYXJhY3RlcnMp
CisgICAgICAgICwgbV9kYXRhMTYoY2hhcmFjdGVycykKICAgICAgICAgLCBtX3NoYXJlZEJ1ZmZl
cihzaGFyZWRCdWZmZXIubGVha1JlZigpKQogICAgICAgICAsIG1faGFzaCgwKQogICAgIHsKLSAg
ICAgICAgQVNTRVJUKG1fZGF0YSk7Ci0gICAgICAgIEFTU0VSVChtX2xlbmd0aCk7CisgICAgICAg
IEFTU0VSVChtX2RhdGExNik7CiAgICAgfQogCisgICAgLy8gRklYTUU6IEFkZCBjb25zdHJ1Y3Rv
cnMgZm9yIDgtYml0IHN0cmluZ3MKKwogICAgIC8vIEZvciB1c2Ugb25seSBieSBBdG9taWNTdHJp
bmcncyBYWFhUcmFuc2xhdG9yIGhlbHBlcnMuCiAgICAgdm9pZCBzZXRIYXNoKHVuc2lnbmVkIGhh
c2gpCiAgICAgewogICAgICAgICBBU1NFUlQoIWlzU3RhdGljKCkpOwogICAgICAgICBBU1NFUlQo
IW1faGFzaCk7Ci0gICAgICAgIEFTU0VSVChoYXNoID09IFN0cmluZ0hhc2hlcjo6Y29tcHV0ZUhh
c2gobV9kYXRhLCBtX2xlbmd0aCkpOworICAgICAgICBpZiAoaXM4Qml0KCkpCisgICAgICAgICAg
ICBBU1NFUlQoaGFzaCA9PSBTdHJpbmdIYXNoZXI6OmNvbXB1dGVIYXNoKG1fZGF0YTgsIG1fbGVu
Z3RoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEFTU0VSVChoYXNoID09IFN0cmluZ0hh
c2hlcjo6Y29tcHV0ZUhhc2gobV9kYXRhMTYsIG1fbGVuZ3RoKSk7CiAgICAgICAgIG1faGFzaCA9
IGhhc2g7CiAgICAgfQogCkBAIC0xNDgsNiArMjAzLDE5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBjcmVhdGUoY29uc3QgY2hhciosIHVuc2lnbmVkIGxlbmd0
aCk7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gY3JlYXRlKGNvbnN0IGNoYXIq
KTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBjcmVhdGUoY29uc3QgVUNoYXIq
LCB1bnNpZ25lZCBsZW5ndGgsIFBhc3NSZWZQdHI8U2hhcmVkVUNoYXI+IHNoYXJlZEJ1ZmZlcik7
CisgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBjcmVhdGU4
KFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gcmVwLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxl
bmd0aCkKKyAgICB7CisgICAgICAgIEFTU0VSVChyZXApOworICAgICAgICBBU1NFUlQobGVuZ3Ro
IDw9IHJlcC0+bGVuZ3RoKCkpOworCisgICAgICAgIGlmICghbGVuZ3RoKQorICAgICAgICAgICAg
cmV0dXJuIGVtcHR5KCk7CisKKyAgICAgICAgQVNTRVJUKHJlcC0+aXM4Qml0KCkpOworICAgICAg
ICBTdHJpbmdJbXBsKiBvd25lclJlcCA9IChyZXAtPmJ1ZmZlck93bmVyc2hpcCgpID09IEJ1ZmZl
clN1YnN0cmluZykgPyByZXAtPm1fc3Vic3RyaW5nQnVmZmVyIDogcmVwLmdldCgpOworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFN0cmluZ0ltcGwocmVwLT5tX2RhdGE4ICsgb2Zmc2V0LCBs
ZW5ndGgsIG93bmVyUmVwKSk7CisgICAgfQorCiAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgUGFz
c1JlZlB0cjxTdHJpbmdJbXBsPiBjcmVhdGUoUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiByZXAsIHVu
c2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogICAgIHsKICAgICAgICAgQVNTRVJUKHJl
cCk7CkBAIC0xNTcsMzQgKzIyNSw0NSBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gZW1w
dHkoKTsKIAogICAgICAgICBTdHJpbmdJbXBsKiBvd25lclJlcCA9IChyZXAtPmJ1ZmZlck93bmVy
c2hpcCgpID09IEJ1ZmZlclN1YnN0cmluZykgPyByZXAtPm1fc3Vic3RyaW5nQnVmZmVyIDogcmVw
LmdldCgpOwotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0cmluZ0ltcGwocmVwLT5tX2Rh
dGEgKyBvZmZzZXQsIGxlbmd0aCwgb3duZXJSZXApKTsKKyAgICAgICAgaWYgKHJlcC0+aXM4Qml0
KCkpCisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0cmluZ0ltcGwocmVwLT5tX2Rh
dGE4ICsgb2Zmc2V0LCBsZW5ndGgsIG93bmVyUmVwKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgU3RyaW5nSW1wbChyZXAtPm1fZGF0YTE2ICsgb2Zmc2V0LCBsZW5ndGgsIG93bmVyUmVw
KSk7CiAgICAgfQogCisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gY3JlYXRlVW5p
bml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgsIGNoYXIqJiBkYXRhKTsKICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxTdHJpbmdJbXBsPiBjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCwg
VUNoYXIqJiBkYXRhKTsKLSAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBQYXNzUmVmUHRyPFN0cmlu
Z0ltcGw+IHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoLCBVQ2hhciomIG91
dHB1dCkKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RhdGljIEFMV0FZU19JTkxJTkUgUGFz
c1JlZlB0cjxTdHJpbmdJbXBsPiB0cnlDcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0
aCwgVComIG91dHB1dCkKICAgICB7CiAgICAgICAgIGlmICghbGVuZ3RoKSB7CiAgICAgICAgICAg
ICBvdXRwdXQgPSAwOwogICAgICAgICAgICAgcmV0dXJuIGVtcHR5KCk7CiAgICAgICAgIH0KIAot
ICAgICAgICBpZiAobGVuZ3RoID4gKChzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4
KCkgLSBzaXplb2YoU3RyaW5nSW1wbCkpIC8gc2l6ZW9mKFVDaGFyKSkpIHsKKyAgICAgICAgaWYg
KGxlbmd0aCA+ICgoc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIC0gc2l6ZW9m
KFN0cmluZ0ltcGwpKSAvIHNpemVvZihUKSkpIHsKICAgICAgICAgICAgIG91dHB1dCA9IDA7CiAg
ICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogICAgICAgICBTdHJpbmdJbXBsKiByZXN1
bHRJbXBsOwotICAgICAgICBpZiAoIXRyeUZhc3RNYWxsb2Moc2l6ZW9mKFVDaGFyKSAqIGxlbmd0
aCArIHNpemVvZihTdHJpbmdJbXBsKSkuZ2V0VmFsdWUocmVzdWx0SW1wbCkpIHsKKyAgICAgICAg
aWYgKCF0cnlGYXN0TWFsbG9jKHNpemVvZihUKSAqIGxlbmd0aCArIHNpemVvZihTdHJpbmdJbXBs
KSkuZ2V0VmFsdWUocmVzdWx0SW1wbCkpIHsKICAgICAgICAgICAgIG91dHB1dCA9IDA7CiAgICAg
ICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQotICAgICAgICBvdXRwdXQgPSByZWludGVycHJl
dF9jYXN0PFVDaGFyKj4ocmVzdWx0SW1wbCArIDEpOworICAgICAgICBvdXRwdXQgPSByZWludGVy
cHJldF9jYXN0PFQqPihyZXN1bHRJbXBsICsgMSk7CisKKyAgICAgICAgaWYgKHNpemVvZihUKSA9
PSBzaXplb2YoY2hhcikpCisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3KHJlc3VsdElt
cGwpIFN0cmluZ0ltcGwobGVuZ3RoLCBGb3JjZThCaXRDb25zdHJ1Y3RvcikpOworCiAgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcocmVzdWx0SW1wbCkgU3RyaW5nSW1wbChsZW5ndGgpKTsKICAg
ICB9CiAKLSAgICBzdGF0aWMgdW5zaWduZWQgZGF0YU9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihTdHJpbmdJbXBsLCBtX2RhdGEpOyB9CisgICAgc3RhdGljIHVuc2lnbmVkIGZsYWdz
T2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cmluZ0ltcGwsIG1fcmVmQ291bnRB
bmRGbGFncyk7IH0KKyAgICBzdGF0aWMgdW5zaWduZWQgZmxhZ0lzOEJpdCgpIHsgcmV0dXJuIHNf
cmVmQ291bnRGbGFnOEJpdEJ1ZmZlcjsgfQorICAgIHN0YXRpYyB1bnNpZ25lZCBkYXRhT2Zmc2V0
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cmluZ0ltcGwsIG1fZGF0YTgpOyB9IC8vIEZJ
WE1FOiBUaGlzIGlzIHVnbHkKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBjcmVh
dGVXaXRoVGVybWluYXRpbmdOdWxsQ2hhcmFjdGVyKGNvbnN0IFN0cmluZ0ltcGwmKTsKKyAgICAv
LyBGSVhNRTogY2hhciogdmVyc2lvbj8KICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBs
PiBjcmVhdGVTdHJpcHBpbmdOdWxsQ2hhcmFjdGVycyhjb25zdCBVQ2hhciosIHVuc2lnbmVkIGxl
bmd0aCk7CiAKKyAgICAvLyBGSVhNRTogQWRkIFZlY3RvcjxjaGFyPiBhZG9wdD8KICAgICB0ZW1w
bGF0ZTxzaXplX3QgaW5saW5lQ2FwYWNpdHk+CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5n
SW1wbD4gYWRvcHQoVmVjdG9yPFVDaGFyLCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKICAgICB7
CkBAIC0xOTgsOCArMjc3LDIyIEBAIHB1YmxpYzoKICAgICB9CiAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8U3RyaW5nSW1wbD4gYWRvcHQoU3RyaW5nQnVmZmVyJik7CiAKLSAgICBTaGFyZWRVQ2hhciog
c2hhcmVkQnVmZmVyKCk7Ci0gICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMoKSBjb25zdCB7IHJl
dHVybiBtX2RhdGE7IH0KKyAgICAvLyBGSVhNRTogU2hvdWxkIHRoaXMgYmUgcHJpdmF0ZT8gSXQn
cyBvbmx5IGFjY2Vzc2VkIGZyb20gd2l0aGluIFN0cmluZ0ltcGwuCisgICAgU2hhcmVkVUNoYXIq
IHNoYXJlZEJ1ZmZlcjE2KCk7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBzaGFyZWRCdWZmZXI4
KCkgPworICAgIC8vIEZJWE1FOiBSZW1vdmUgYWxsIHVubmVjZXNzYXJ5IHVzYWdlcyBvZiBjaGFy
YWN0ZXJzKCkKKyAgICBBTFdBWVNfSU5MSU5FIGNvbnN0IGNoYXIqIGNoYXJhY3RlcnM4KCkgY29u
c3QgeyBBU1NFUlQoaXM4Qml0KCkpOyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIG1fZGF0
YTg7IH0KKyAgICBBTFdBWVNfSU5MSU5FIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzMTYoKSBjb25z
dCB7IEFTU0VSVCghaXM4Qml0KCkpOyByZXR1cm4gbV9kYXRhMTY7IH0KKyAgICBBTFdBWVNfSU5M
SU5FIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICgh
aXM4Qml0KCkpCisgICAgICAgICAgICByZXR1cm4gbV9kYXRhMTY7CisKKyAgICAgICAgcmV0dXJu
IGdldERhdGExNlNsb3dDYXNlKCk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hh
clR5cGU+CisgICAgaW5saW5lIGNvbnN0IENoYXJUeXBlKiBnZXRDaGFyYWN0ZXJzKCkgY29uc3Q7
CiAKICAgICBzaXplX3QgY29zdCgpCiAgICAgewpAQCAtMjE0LDYgKzMwNyw4IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCisgICAgYm9vbCBoYXMxNkJpdFNoYWRvdygpIGNv
bnN0IHsgcmV0dXJuIG1fcmVmQ291bnRBbmRGbGFncyAmIHNfcmVmQ291bnRGbGFnSGFzMTZCaXRT
aGFkb3c7IH0KKwogICAgIGJvb2wgaXNJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9yZWZD
b3VudEFuZEZsYWdzICYgc19yZWZDb3VudEZsYWdJc0lkZW50aWZpZXI7IH0KICAgICB2b2lkIHNl
dElzSWRlbnRpZmllcihib29sIGlzSWRlbnRpZmllcikKICAgICB7CkBAIC0yMzYsNyArMzMxLDE2
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fcmVmQ291bnRBbmRGbGFncyAmPSB+c19yZWZDb3Vu
dEZsYWdJc0F0b21pYzsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QgeyBpZiAo
IW1faGFzaCkgbV9oYXNoID0gU3RyaW5nSGFzaGVyOjpjb21wdXRlSGFzaChtX2RhdGEsIG1fbGVu
Z3RoKTsgcmV0dXJuIG1faGFzaDsgfQorICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsK
KyAgICAgICAgaWYgKCFtX2hhc2gpIHsKKyAgICAgICAgICAgIGlmIChpczhCaXQoKSkKKyAgICAg
ICAgICAgICAgICBtX2hhc2ggPSBTdHJpbmdIYXNoZXI6OmNvbXB1dGVIYXNoKG1fZGF0YTgsIG1f
bGVuZ3RoKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX2hhc2ggPSBTdHJp
bmdIYXNoZXI6OmNvbXB1dGVIYXNoKG1fZGF0YTE2LCBtX2xlbmd0aCk7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIG1faGFzaDsKKyAgICB9CiAgICAgdW5zaWduZWQgZXhpc3RpbmdIYXNoKCkg
Y29uc3QgeyBBU1NFUlQobV9oYXNoKTsgcmV0dXJuIG1faGFzaDsgfQogICAgIGJvb2wgaGFzSGFz
aCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzaDsgfQogCkBAIC0yNDUsMTMgKzM0OSwzMiBAQCBwdWJs
aWM6CiAKICAgICBzdGF0aWMgU3RyaW5nSW1wbCogZW1wdHkoKTsKIAotICAgIHN0YXRpYyB2b2lk
IGNvcHlDaGFycyhVQ2hhciogZGVzdGluYXRpb24sIGNvbnN0IFVDaGFyKiBzb3VyY2UsIHVuc2ln
bmVkIG51bUNoYXJhY3RlcnMpCisgICAgLy8gRklYTUU6IERvZXMgdGhpcyByZWFsbHkgYmVsb25n
IGluIFN0cmluZ0ltcGw/CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0YXRpYyB2b2lkIGNv
cHlDaGFycyhUKiBkZXN0aW5hdGlvbiwgY29uc3QgVCogc291cmNlLCB1bnNpZ25lZCBudW1DaGFy
YWN0ZXJzKQogICAgIHsKKyAgICAgICAgaWYgKG51bUNoYXJhY3RlcnMgPT0gMSkgeworICAgICAg
ICAgICAgKmRlc3RpbmF0aW9uID0gKnNvdXJjZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCiAgICAgICAgIGlmIChudW1DaGFyYWN0ZXJzIDw9IHNfY29weUNoYXJzSW5saW5lQ3V0
T2ZmKSB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtQ2hhcmFjdGVy
czsgKytpKQorICAgICAgICAgICAgdW5zaWduZWQgaSA9IDA7CisjaWYgKENQVShYODYpIHx8IENQ
VShYODZfNjQpKQorICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhcnNQZXJJbnQgPSBzaXpl
b2YodWludDMyX3QpIC8gc2l6ZW9mKFQpOworCisgICAgICAgICAgICBpZiAobnVtQ2hhcmFjdGVy
cyA+IGNoYXJzUGVySW50KSB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgc3RvcENvdW50ID0g
bnVtQ2hhcmFjdGVycyAmIH4oY2hhcnNQZXJJbnQgLSAxKTsKKworICAgICAgICAgICAgICAgIGNv
bnN0IHVpbnQzMl90KiBzcmNDaGFyYWN0ZXJzID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50
MzJfdCo+KHNvdXJjZSk7CisgICAgICAgICAgICAgICAgdWludDMyX3QqIGRlc3RDaGFyYWN0ZXJz
ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RpbmF0aW9uKTsKKyAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBpIDwgc3RvcENvdW50OyBpICs9IGNoYXJzUGVySW50
LCArK2opCisgICAgICAgICAgICAgICAgICAgIGRlc3RDaGFyYWN0ZXJzW2pdID0gc3JjQ2hhcmFj
dGVyc1tqXTsKKyAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAgICAgZm9yICg7IGkgPCBu
dW1DaGFyYWN0ZXJzOyArK2kpCiAgICAgICAgICAgICAgICAgZGVzdGluYXRpb25baV0gPSBzb3Vy
Y2VbaV07CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbWVtY3B5KGRlc3RpbmF0aW9uLCBz
b3VyY2UsIG51bUNoYXJhY3RlcnMgKiBzaXplb2YoVUNoYXIpKTsKKyAgICAgICAgICAgIG1lbWNw
eShkZXN0aW5hdGlvbiwgc291cmNlLCBudW1DaGFyYWN0ZXJzICogc2l6ZW9mKFQpKTsKICAgICB9
CiAKICAgICAvLyBSZXR1cm5zIGEgU3RyaW5nSW1wbCBzdWl0YWJsZSBmb3IgdXNlIG9uIGFub3Ro
ZXIgdGhyZWFkLgpAQCAtMjYzLDcgKzM4NiwxMyBAQCBwdWJsaWM6CiAKICAgICBQYXNzUmVmUHRy
PFN0cmluZ0ltcGw+IHN1YnN0cmluZyh1bnNpZ25lZCBwb3MsIHVuc2lnbmVkIGxlbiA9IFVJTlRf
TUFYKTsKIAotICAgIFVDaGFyIG9wZXJhdG9yW10odW5zaWduZWQgaSkgeyBBU1NFUlQoaSA8IG1f
bGVuZ3RoKTsgcmV0dXJuIG1fZGF0YVtpXTsgfQorICAgIFVDaGFyIG9wZXJhdG9yW10odW5zaWdu
ZWQgaSkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpIDwgbV9sZW5ndGgpOworICAgICAg
ICBpZiAoaXM4Qml0KCkpCisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQg
Y2hhcj4obV9kYXRhOFtpXSk7CisgICAgICAgIHJldHVybiBtX2RhdGExNltpXTsKKyAgICB9CiAg
ICAgVUNoYXIzMiBjaGFyYWN0ZXJTdGFydGluZ0F0KHVuc2lnbmVkKTsKIAogICAgIGJvb2wgY29u
dGFpbnNPbmx5V2hpdGVzcGFjZSgpOwpAQCAtMjg3LDYgKzQxNiw3IEBAIHB1YmxpYzoKICAgICBQ
YXNzUmVmUHRyPFN0cmluZ0ltcGw+IHVwcGVyKCk7CiAKICAgICBQYXNzUmVmUHRyPFN0cmluZ0lt
cGw+IGZpbGwoVUNoYXIpOworICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVkIGZpbGwoY2hhcikgb3Ig
Y2FuIHdlIGp1c3QgZG8gdGhlIHJpZ2h0IHRoaW5nIGlmIFVDaGFyIGlzIEFTQ0lJPwogICAgIFBh
c3NSZWZQdHI8U3RyaW5nSW1wbD4gZm9sZENhc2UoKTsKIAogICAgIFBhc3NSZWZQdHI8U3RyaW5n
SW1wbD4gc3RyaXBXaGl0ZVNwYWNlKCk7CkBAIC0yOTYsNiArNDI2LDcgQEAgcHVibGljOgogCiAg
ICAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiByZW1vdmVDaGFyYWN0ZXJzKENoYXJhY3Rlck1hdGNo
RnVuY3Rpb25QdHIpOwogCisgICAgLy8gRklYTUU6IERvIHdlIG5lZWQgY2hhciB2ZXJzaW9uLCBv
ciBpcyBpdCBva2F5IHRvIGp1c3QgcGFzcyBpbiBhbiBBU0NJSSBjaGFyIGZvciA4LWJpdD8gU2Ft
ZSBmb3IgcmV2ZXJzZUZpbmQsIHJlcGxhY2UKICAgICBzaXplX3QgZmluZChVQ2hhciwgdW5zaWdu
ZWQgaW5kZXggPSAwKTsKICAgICBzaXplX3QgZmluZChDaGFyYWN0ZXJNYXRjaEZ1bmN0aW9uUHRy
LCB1bnNpZ25lZCBpbmRleCA9IDApOwogICAgIHNpemVfdCBmaW5kKGNvbnN0IGNoYXIqLCB1bnNp
Z25lZCBpbmRleCA9IDApOwpAQCAtMzM0LDE4ICs0NjUsMjQgQEAgcHJpdmF0ZToKICAgICBib29s
IGlzU3RhdGljKCkgY29uc3QgeyByZXR1cm4gbV9yZWZDb3VudEFuZEZsYWdzICYgc19yZWZDb3Vu
dEZsYWdTdGF0aWM7IH0KICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVUNoYXJQcmVkaWNhdGU+IFBhc3NS
ZWZQdHI8U3RyaW5nSW1wbD4gc3RyaXBNYXRjaGVkQ2hhcmFjdGVycyhVQ2hhclByZWRpY2F0ZSk7
CiAgICAgdGVtcGxhdGUgPGNsYXNzIFVDaGFyUHJlZGljYXRlPiBQYXNzUmVmUHRyPFN0cmluZ0lt
cGw+IHNpbXBsaWZ5TWF0Y2hlZENoYXJhY3RlcnNUb1NwYWNlKFVDaGFyUHJlZGljYXRlKTsKKyAg
ICBORVZFUl9JTkxJTkUgY29uc3QgVUNoYXIqIGdldERhdGExNlNsb3dDYXNlKCkgY29uc3Q7CiAK
LSAgICBjb25zdCBVQ2hhciogbV9kYXRhOworICAgIHVuaW9uIHsKKyAgICAgICAgY29uc3QgY2hh
ciogbV9kYXRhODsKKyAgICAgICAgY29uc3QgVUNoYXIqIG1fZGF0YTE2OworICAgIH07CiAgICAg
dW5pb24gewogICAgICAgICB2b2lkKiBtX2J1ZmZlcjsKICAgICAgICAgU3RyaW5nSW1wbCogbV9z
dWJzdHJpbmdCdWZmZXI7CiAgICAgICAgIFNoYXJlZFVDaGFyKiBtX3NoYXJlZEJ1ZmZlcjsKKyAg
ICAgICAgbXV0YWJsZSBVQ2hhciogbV9jb3B5RGF0YTE2OwogICAgIH07CiAgICAgbXV0YWJsZSB1
bnNpZ25lZCBtX2hhc2g7CiB9OwogCiBib29sIGVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqLCBjb25z
dCBTdHJpbmdJbXBsKik7CiBib29sIGVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqLCBjb25zdCBjaGFy
Kik7Citib29sIGVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqLCBjb25zdCBjaGFyKiwgdW5zaWduZWQp
OwogaW5saW5lIGJvb2wgZXF1YWwoY29uc3QgY2hhciogYSwgU3RyaW5nSW1wbCogYikgeyByZXR1
cm4gZXF1YWwoYiwgYSk7IH0KIGJvb2wgZXF1YWwoY29uc3QgU3RyaW5nSW1wbCosIGNvbnN0IFVD
aGFyKiwgdW5zaWduZWQpOwogCkBAIC0zNzYsNiArNTEzLDcgQEAgc3RhdGljIGlubGluZSBib29s
IGlzU3BhY2VPck5ld2xpbmUoVUNoYQogICAgIHJldHVybiBjIDw9IDB4N0YgPyBXVEY6OmlzQVND
SUlTcGFjZShjKSA6IFdURjo6VW5pY29kZTo6ZGlyZWN0aW9uKGMpID09IFdURjo6VW5pY29kZTo6
V2hpdGVTcGFjZU5ldXRyYWw7CiB9CiAKKy8vIEZJWE1FOiBTaG91bGQgdGhlcmUgYmUgYW4gOC1i
aXQgaW1wbGVtZW50YXRpb24gb2YgdGhpcywgb3Igc2hvdWxkIHRoaXMgbWV0aG9kIGNyZWF0ZSBh
biA4LWJpdCBTdHJpbmdJbXBsIGFzIG5lZWRlZD8KIC8vIFRoaXMgaXMgYSBob3QgZnVuY3Rpb24g
YmVjYXVzZSBpdCdzIHVzZWQgd2hlbiBwYXJzaW5nIEhUTUwuCiBpbmxpbmUgUGFzc1JlZlB0cjxT
dHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpjcmVhdGVTdHJpcHBpbmdOdWxsQ2hhcmFjdGVycyhjb25z
dCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQogewpAQCAtMzk5LDYgKzUzNywx
OCBAQCBpbmxpbmUgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsCiAgICAgcmV0dXJu
IFN0cmluZ0ltcGw6OmNyZWF0ZVN0cmlwcGluZ051bGxDaGFyYWN0ZXJzU2xvd0Nhc2UoY2hhcmFj
dGVycywgbGVuZ3RoKTsKIH0KIAordGVtcGxhdGU8PgoraW5saW5lIGNvbnN0IGNoYXIqIFN0cmlu
Z0ltcGw6OmdldENoYXJhY3RlcnM8Y2hhcj4oKSBjb25zdAoreworICAgIHJldHVybiBjaGFyYWN0
ZXJzOCgpOworfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgY29uc3QgVUNoYXIqIFN0cmluZ0ltcGw6
OmdldENoYXJhY3RlcnM8VUNoYXI+KCkgY29uc3QKK3sKKyAgICByZXR1cm4gY2hhcmFjdGVyczE2
KCk7Cit9CisKIHN0cnVjdCBTdHJpbmdIYXNoOwogCiAvLyBTdHJpbmdIYXNoIGlzIHRoZSBkZWZh
dWx0IGhhc2ggZm9yIFN0cmluZ0ltcGwqIGFuZCBSZWZQdHI8U3RyaW5nSW1wbD4KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJpbmdJbXBsQmFzZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJpbmdJbXBsQmFzZS5oCShyZXZp
c2lvbiA5NzAwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJpbmdJbXBs
QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBAIGNsYXNzIFN0cmluZ0ltcGxC
YXNlIHsKIHB1YmxpYzoKICAgICBib29sIGlzU3RyaW5nSW1wbCgpIHsgcmV0dXJuIChtX3JlZkNv
dW50QW5kRmxhZ3MgJiBzX3JlZkNvdW50SW52YWxpZEZvclN0cmluZ0ltcGwpICE9IHNfcmVmQ291
bnRJbnZhbGlkRm9yU3RyaW5nSW1wbDsgfQogICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fbGVuZ3RoOyB9CisgICAgYm9vbCBpczhCaXQoKSBjb25zdCB7IHJldHVybiBtX3Jl
ZkNvdW50QW5kRmxhZ3MgJiBzX3JlZkNvdW50RmxhZzhCaXRCdWZmZXI7IH0KICAgICB2b2lkIHJl
ZigpIHsgbV9yZWZDb3VudEFuZEZsYWdzICs9IHNfcmVmQ291bnRJbmNyZW1lbnQ7IH0KIAogcHJv
dGVjdGVkOgpAQCAtNzMsMTEgKzc0LDEzIEBAIHByb3RlY3RlZDoKICAgICAgICAgQVNTRVJUKCFp
c1N0cmluZ0ltcGwoKSk7CiAgICAgfQogCi0gICAgLy8gVGhlIGJvdHRvbSA3IGJpdHMgaG9sZCBm
bGFncywgdGhlIHRvcCAyNSBiaXRzIGhvbGQgdGhlIHJlZiBjb3VudC4KKyAgICAvLyBUaGUgYm90
dG9tIDkgYml0cyBob2xkIGZsYWdzLCB0aGUgdG9wIDIzIGJpdHMgaG9sZCB0aGUgcmVmIGNvdW50
LgogICAgIC8vIFdoZW4gZGVyZWZlcmVuY2luZyBTdHJpbmdJbXBscyB3ZSBjaGVjayBmb3IgdGhl
IHJlZiBjb3VudCBBTkQgdGhlCiAgICAgLy8gc3RhdGljIGJpdCBib3RoIGJlaW5nIHplcm8gLSBz
dGF0aWMgc3RyaW5ncyBhcmUgbmV2ZXIgZGVsZXRlZC4KLSAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgc19yZWZDb3VudE1hc2sgPSAweEZGRkZGRjgwOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBzX3JlZkNvdW50SW5jcmVtZW50ID0gMHg4MDsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
c19yZWZDb3VudE1hc2sgPSAweEVGRkZGRjAwOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBz
X3JlZkNvdW50SW5jcmVtZW50ID0gMHgxMDA7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNf
cmVmQ291bnRGbGFnSGFzMTZCaXRTaGFkb3cgPSAweDgwMDAwMDAwOworICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBzX3JlZkNvdW50RmxhZzhCaXRCdWZmZXIgPSAweDgwOwogICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBzX3JlZkNvdW50RmxhZ1N0YXRpYyA9IDB4NDA7CiAgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIHNfcmVmQ291bnRGbGFnSGFzVGVybWluYXRpbmdOdWxsQ2hhcmFjdGVyID0g
MHgyMDsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc19yZWZDb3VudEZsYWdJc0F0b21pYyA9
IDB4MTA7CkBAIC04OSw3ICs5Miw3IEBAIHByb3RlY3RlZDoKICAgICAvLyBVc2VkIGJ5ICJDb25z
dHJ1Y3ROb25TdHJpbmdJbXBsIiBjb25zdHJ1Y3RvciwgYWJvdmUuCiAgICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIHNfcmVmQ291bnRJbnZhbGlkRm9yU3RyaW5nSW1wbCA9IHNfcmVmQ291bnRGbGFn
U3RhdGljIHwgc19yZWZDb3VudEZsYWdTaG91bGRSZXBvcnRlZENvc3Q7CiAKLSAgICB1bnNpZ25l
ZCBtX3JlZkNvdW50QW5kRmxhZ3M7CisgICAgbXV0YWJsZSB1bnNpZ25lZCBtX3JlZkNvdW50QW5k
RmxhZ3M7CiAgICAgdW5zaWduZWQgbV9sZW5ndGg7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUveWFyci9ZYXJyUGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3lhcnIvWWFyclBhcnNlci5oCShyZXZpc2lvbiA5NzAwMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS95YXJyL1lhcnJQYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjMxLDcgKzIz
MSw3IEBAIHByaXZhdGU6CiAgICAgICAgIDogbV9kZWxlZ2F0ZShkZWxlZ2F0ZSkKICAgICAgICAg
LCBtX2JhY2tSZWZlcmVuY2VMaW1pdChiYWNrUmVmZXJlbmNlTGltaXQpCiAgICAgICAgICwgbV9l
cnIoTm9FcnJvcikKLSAgICAgICAgLCBtX2RhdGEocGF0dGVybikKKyAgICAgICAgLCBtX2RhdGEo
cGF0dGVybi5jaGFyYWN0ZXJzMTYoKSkKICAgICAgICAgLCBtX3NpemUocGF0dGVybi5sZW5ndGgo
KSkKICAgICAgICAgLCBtX2luZGV4KDApCiAgICAgICAgICwgbV9wYXJlbnRoZXNlc05lc3RpbmdE
ZXB0aCgwKQpAQCAtNzkzLDcgKzc5Myw3IEBAIHByaXZhdGU6CiAgICAgRGVsZWdhdGUmIG1fZGVs
ZWdhdGU7CiAgICAgdW5zaWduZWQgbV9iYWNrUmVmZXJlbmNlTGltaXQ7CiAgICAgRXJyb3JDb2Rl
IG1fZXJyOwotICAgIGNvbnN0IFVTdHJpbmcmIG1fZGF0YTsKKyAgICBjb25zdCBVQ2hhciogbV9k
YXRhOwogICAgIHVuc2lnbmVkIG1fc2l6ZTsKICAgICB1bnNpZ25lZCBtX2luZGV4OwogICAgIHVu
c2lnbmVkIG1fcGFyZW50aGVzZXNOZXN0aW5nRGVwdGg7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lv
biA5NzE1NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDE3IEBACisyMDExLTEwLTExICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUu
Y29tPgorCisgICAgICAgIEludmVzdGlnYXRlIHN0b3Jpbmcgc3RyaW5ncyBpbiA4LWJpdCBidWZm
ZXJzIHdoZW4gcG9zc2libGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTY2MTYxCisKKyAgICAgICAgQ2hhbmdlcyB0byBzdXBwb3J0IDggYml0IFN0cmlu
Z0ltcGwgY2hhbmdlcy4KKyAgICAgICAgCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorICAgICAgICAKKyAgICAgICAgTm8gbmV3IHRlc3RzLCByZWZhY3RvcmVkIFN0cmluZ0lt
cGwgZm9yIDggYml0IHN0cmluZ3MuCisKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L2NmL1N0cmlu
Z0ltcGxDRi5jcHA6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OmNyZWF0ZUNGU3RyaW5nKToK
KwogMjAxMS0xMC0xMSAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGdvb2dsZS5jb20+CiAKICAg
ICAgICAgV2ViIEluc3BlY3RvcjogbWFrZSBFeHRlbnNpb25zIGNvbXBvbmVudCBjb21waWxlLgpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9jZi9TdHJpbmdJbXBsQ0YuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvY2YvU3RyaW5nSW1wbENG
LmNwcAkocmV2aXNpb24gOTcwMDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2Nm
L1N0cmluZ0ltcGxDRi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNiwxMyArMTM2LDEzIEBAIENG
U3RyaW5nUmVmIFN0cmluZ0ltcGw6OmNyZWF0ZUNGU3RyaW5nKCkKIHsKICAgICBDRkFsbG9jYXRv
clJlZiBhbGxvY2F0b3IgPSAobV9sZW5ndGggJiYgaXNNYWluVGhyZWFkKCkpID8gU3RyaW5nV3Jh
cHBlckNGQWxsb2NhdG9yOjphbGxvY2F0b3IoKSA6IDA7CiAgICAgaWYgKCFhbGxvY2F0b3IpCi0g
ICAgICAgIHJldHVybiBDRlN0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgVW5pQ2hhcio+KG1fZGF0YSksIG1fbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJu
IENGU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBV
bmlDaGFyKj4oY2hhcmFjdGVycygpKSwgbV9sZW5ndGgpOwogCiAgICAgLy8gUHV0IHBvaW50ZXIg
dG8gdGhlIFN0cmluZ0ltcGwgaW4gYSBnbG9iYWwgc28gdGhlIGFsbG9jYXRvciBjYW4gc3RvcmUg
aXQgd2l0aCB0aGUgQ0ZTdHJpbmcuCiAgICAgQVNTRVJUKCFTdHJpbmdXcmFwcGVyQ0ZBbGxvY2F0
b3I6OmN1cnJlbnRTdHJpbmcpOwogICAgIFN0cmluZ1dyYXBwZXJDRkFsbG9jYXRvcjo6Y3VycmVu
dFN0cmluZyA9IHRoaXM7CiAKLSAgICBDRlN0cmluZ1JlZiBzdHJpbmcgPSBDRlN0cmluZ0NyZWF0
ZVdpdGhDaGFyYWN0ZXJzTm9Db3B5KGFsbG9jYXRvciwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBV
bmlDaGFyKj4obV9kYXRhKSwgbV9sZW5ndGgsIGtDRkFsbG9jYXRvck51bGwpOworICAgIENGU3Ry
aW5nUmVmIHN0cmluZyA9IENGU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnNOb0NvcHkoYWxsb2Nh
dG9yLCByZWludGVycHJldF9jYXN0PGNvbnN0IFVuaUNoYXIqPihjaGFyYWN0ZXJzKCkpLCBtX2xl
bmd0aCwga0NGQWxsb2NhdG9yTnVsbCk7CiAKICAgICAvLyBUaGUgYWxsb2NhdG9yIGNsZWFyZWQg
dGhlIGdsb2JhbCB3aGVuIGl0IHJlYWQgaXQsIGJ1dCBhbHNvIGNsZWFyIGl0IGhlcmUganVzdCBp
biBjYXNlLgogICAgIEFTU0VSVCghU3RyaW5nV3JhcHBlckNGQWxsb2NhdG9yOjpjdXJyZW50U3Ry
aW5nKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110903</attachid>
            <date>2011-10-13 13:59:23 -0700</date>
            <delta_ts>2011-10-25 17:50:57 -0700</delta_ts>
            <desc>Updated patch with tested export fix for Windows</desc>
            <filename>66161-5.patch</filename>
            <type>text/plain</type>
            <size>80278</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTcyNzkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIzIEBA
CisyMDExLTEwLTEzICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIEludmVzdGlnYXRlIHN0b3Jpbmcgc3RyaW5ncyBpbiA4LWJpdCBidWZmZXJzIHdoZW4gcG9z
c2libGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2
MTYxCisKKyAgICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgOCBiaXQgc3RyaW5nIGRhdGEgaW4gU3Ry
aW5nSW1wbC4gIENoYW5nZWQKKyAgICAgICAgKFVDaGFyKikgbV9kYXRhIHRvIG1fZGF0YTE2LiAg
QWRkZWQgY2hhciogbV9kYXRhOCBhcyBhIHVuaW9uCisgICAgICAgIHdpdGggbV9kYXRhMTYuICBB
ZGRlZCBVQ2hhciogbV9jb3B5RGF0YTE2IHRvIHRoZSBvdGhlciB1bmlvbgorICAgICAgICB0byBz
dG9yZSBhIDE2IGJpdCBjb3B5IG9mIGFuIDggYml0IHN0cmluZyB3aGVuIG5lZWRlZC4KKyAgICAg
ICAgQWRkZWQgY2hhcmFjdGVyczgoKSBhbmQgY2hhcmFjdGVyczE2KCkgYWNjZXNzb3IgbWV0aG9k
cworICAgICAgICB0aGF0IGFzc3VtZSB0aGUgY2FsbGVyIGhhcyBjaGVja2VkIHRoZSB1bmRlcmx5
aW5nIHN0cmluZyB0eXBlCisgICAgICAgIHZpYSB0aGUgbmV3IGlzOEJpdCgpIG1ldGhvZC4gVGhl
IGNoYXJhY3RlcnMoKSBtZXRob2Qgd2lsbAorICAgICAgICByZXR1cm4gYSBVQ2hhciogb2YgdGhl
IHN0cmluZywgbWF0ZXJpYWxpemluZyBhIDE2IGJpdCBjb3B5IGlmIHRoZQorICAgICAgICBzdHJp
bmcgaXMgYW4gOCBiaXQgc3RyaW5nLiAgQWRkZWQgdHdvIGZsYWdzLCBvbmUgZm9yIDggYml0IGJ1
ZmZlcgorICAgICAgICBhbmQgYSBzZWNvbmQgZm9yIGEgMTYgYml0IGNvcHkgZm9yIGFuIDggYml0
IHN0cmluZy4KKworICAgICAgICBPdmVyIHRpbWUgdGhlIGdvYWwgaXMgdG8gZWxpbWluYXRlIGNh
bGxzIHRvIGNoYXJhY3RlcnMoKSBhbmQKKyAgICAgICAgdXMgdGhlIGNoYXJhY3RlcjgoKSBhbmQg
Y2hhcmFjdGVyczE2KCkgYWNjZXNzb3JzLgorCisgICAgICAgIFRoaXMgcGF0Y2ggZG9lcyBub3Qg
aW5jbHVkZSBjaGFuZ2VzIHRoYXQgYWN0dWFsbHkgY3JlYXRlIDggYml0CisgICAgICAgIHN0cmlu
Z3MuIFRoaXMgaXMgdGhlIGZpcnN0IG9mIGF0IGxlYXN0IDggcGF0Y2hlcy4gIFN1YnNlcXVlbnQK
KyAgICAgICAgcGF0Y2hlcyB3aWxsIGJlIHN1Ym1pdHRlZCBmb3IgSklUIGNoYW5nZXMsIG1ha2lu
ZyB0aGUgSlNDIGxleGVyLAorICAgICAgICBwYXJzZXIgYW5kIGxpdGVyYWwgcGFyc2VyLCBKYXZh
U2NyaXB0IHN0cmluZyBjaGFuZ2VzIGFuZAorICAgICAgICB0aGVuIGNoYW5nZXMgaW4gd2ViY29y
ZSB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGUgOCBiaXQgc3RyaW5ncy4KKworICAgICAgICBUaGlz
IGNoYW5nZSBpcyBwZXJmb3JtYW5jZSBuZXV0cmFsIGZvciBTdW5TcGlkZXIgYW5kIFY4IHdoZW4K
KyAgICAgICAgcnVuIGZyb20gdGhlIGNvbW1hbmQgbGluZSB3aXRoICJqc2MiLgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUu
ZXhwOgorICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJldGVyLmNwcDoKKyAgICAgICAgKEpT
Qzo6SW50ZXJwcmV0ZXI6OmNhbGxFdmFsKToKKyAgICAgICAgKiBwYXJzZXIvU291cmNlUHJvdmlk
ZXIuaDoKKyAgICAgICAgKEpTQzo6VVN0cmluZ1NvdXJjZVByb3ZpZGVyOjpkYXRhKToKKyAgICAg
ICAgKEpTQzo6VVN0cmluZ1NvdXJjZVByb3ZpZGVyOjpVU3RyaW5nU291cmNlUHJvdmlkZXIpOgor
ICAgICAgICAqIHJ1bnRpbWUvSWRlbnRpZmllci5jcHA6CisgICAgICAgIChKU0M6OklkZW50aWZp
ZXI6OnRvVUludDMyKToKKyAgICAgICAgKiBydW50aW1lL0pTU3RyaW5nLmNwcDoKKyAgICAgICAg
KEpTQzo6SlNTdHJpbmc6OnJlc29sdmVSb3BlKToKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OnJl
c29sdmVSb3BlU2xvd0Nhc2UpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwLmNwcDoKKyAgICAg
ICAgKEpTQzo6UmVnRXhwOjptYXRjaCk6CisgICAgICAgICogcnVudGltZS9TdHJpbmdQcm90b3R5
cGUuY3BwOgorICAgICAgICAoSlNDOjpqc1NwbGljZVN1YnN0cmluZ3NXaXRoU2VwYXJhdG9ycyk6
CisgICAgICAgICogcnVudGltZS9VU3RyaW5nLmNwcDoKKyAgICAgICAgKEpTQzo6VVN0cmluZzo6
dXRmOCk6CisgICAgICAgICogcnVudGltZS9VU3RyaW5nLmg6CisgICAgICAgIChKU0M6OlVTdHJp
bmc6OmNoYXJhY3RlcnMpOgorICAgICAgICAoSlNDOjpVU3RyaW5nOjpjaGFyYWN0ZXJzOCk6Cisg
ICAgICAgIChKU0M6OlVTdHJpbmc6OmNoYXJhY3RlcnMxNik6CisgICAgICAgIChKU0M6OlVTdHJp
bmc6OmlzOEJpdCk6CisgICAgICAgIChKU0M6OlVTdHJpbmc6Om9wZXJhdG9yW10pOgorICAgICAg
ICAoSlNDOjpjaGFyKToKKyAgICAgICAgKEpTQzo6VUNoYXIpOgorICAgICAgICAoSlNDOjpvcGVy
YXRvcj09KToKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdIYXNoLmg6CisgICAgICAgIChXVEY6
OlN0cmluZ0hhc2g6OmVxdWFsKToKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdJbXBsLmNwcDoK
KyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6flN0cmluZ0ltcGwpOgorICAgICAgICAoV1RGOjpT
dHJpbmdJbXBsOjpjcmVhdGVVbmluaXRpYWxpemVkKToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1w
bDo6c2hhcmVkQnVmZmVyMTYpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpnZXREYXRhMTZT
bG93Q2FzZSk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OmNvbnRhaW5zT25seVdoaXRlc3Bh
Y2UpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpzdWJzdHJpbmcpOgorICAgICAgICAoV1RG
OjpTdHJpbmdJbXBsOjpjaGFyYWN0ZXJTdGFydGluZ0F0KToKKyAgICAgICAgKFdURjo6U3RyaW5n
SW1wbDo6bG93ZXIpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjp1cHBlcik6CisgICAgICAg
IChXVEY6OlN0cmluZ0ltcGw6OmZpbGwpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpmb2xk
Q2FzZSk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OnN0cmlwTWF0Y2hlZENoYXJhY3RlcnMp
OgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpyZW1vdmVDaGFyYWN0ZXJzKToKKyAgICAgICAg
KFdURjo6U3RyaW5nSW1wbDo6c2ltcGxpZnlNYXRjaGVkQ2hhcmFjdGVyc1RvU3BhY2UpOgorICAg
ICAgICAoV1RGOjpTdHJpbmdJbXBsOjp0b0ludFN0cmljdCk6CisgICAgICAgIChXVEY6OlN0cmlu
Z0ltcGw6OnRvVUludFN0cmljdCk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OnRvSW50NjRT
dHJpY3QpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjp0b1VJbnQ2NFN0cmljdCk6CisgICAg
ICAgIChXVEY6OlN0cmluZ0ltcGw6OnRvSW50UHRyU3RyaWN0KToKKyAgICAgICAgKFdURjo6U3Ry
aW5nSW1wbDo6dG9JbnQpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjp0b1VJbnQpOgorICAg
ICAgICAoV1RGOjpTdHJpbmdJbXBsOjp0b0ludDY0KToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1w
bDo6dG9VSW50NjQpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjp0b0ludFB0cik6CisgICAg
ICAgIChXVEY6OlN0cmluZ0ltcGw6OnRvRG91YmxlKToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1w
bDo6dG9GbG9hdCk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OmZpbmQpOgorICAgICAgICAo
V1RGOjpTdHJpbmdJbXBsOjpyZXZlcnNlRmluZCk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6
OnJlcGxhY2UpOgorICAgICAgICAoV1RGOjplcXVhbCk6CisgICAgICAgIChXVEY6OmVxdWFsSWdu
b3JpbmdDYXNlKToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6ZGVmYXVsdFdyaXRpbmdEaXJl
Y3Rpb24pOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpjcmVhdGVTdHJpcHBpbmdOdWxsQ2hh
cmFjdGVyc1Nsb3dDYXNlKToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6YWRvcHQpOgorICAg
ICAgICAoV1RGOjpTdHJpbmdJbXBsOjpjcmVhdGVXaXRoVGVybWluYXRpbmdOdWxsQ2hhcmFjdGVy
KToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6dGhyZWFkc2FmZUNvcHkpOgorICAgICAgICAo
V1RGOjpTdHJpbmdJbXBsOjpjcm9zc1RocmVhZFN0cmluZyk6CisgICAgICAgICogd3RmL3RleHQv
U3RyaW5nSW1wbC5oOgorICAgICAgICAoV1RGOjp1bnNpZ25lZENoYXJWYWx1ZSk6CisgICAgICAg
IChXVEY6OmNoYXIpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpTdHJpbmdJbXBsKToKKyAg
ICAgICAgKFdURjo6U3RyaW5nSW1wbDo6c2V0SGFzaCk6CisgICAgICAgIChXVEY6OlN0cmluZ0lt
cGw6OmNyZWF0ZTgpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpjcmVhdGUpOgorICAgICAg
ICAoV1RGOjpTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkKToKKyAgICAgICAgKFdU
Rjo6U3RyaW5nSW1wbDo6ZmxhZ3NPZmZzZXQpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpm
bGFnSXM4Qml0KToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6ZGF0YU9mZnNldCk6CisgICAg
ICAgIChXVEY6OlN0cmluZ0ltcGw6OmNoYXJhY3RlcnM4KToKKyAgICAgICAgKFdURjo6U3RyaW5n
SW1wbDo6Y2hhcmFjdGVyczE2KToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6Y2hhcmFjdGVy
cyk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OmhhczE2Qml0U2hhZG93KToKKyAgICAgICAg
KFdURjo6U3RyaW5nSW1wbDo6aGFzaCk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OmNvcHlD
aGFycyk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6Om9wZXJhdG9yW10pOgorICAgICAgICAo
V1RGOjpVQ2hhcik6CisgICAgICAgICogd3RmL3RleHQvU3RyaW5nSW1wbEJhc2UuaDoKKyAgICAg
ICAgKFdURjo6U3RyaW5nSW1wbEJhc2U6OmlzOEJpdCk6CisgICAgICAgICogeWFyci9ZYXJyUGFy
c2VyLmg6CisgICAgICAgIChKU0M6OllhcnI6OlBhcnNlcjo6UGFyc2VyKToKKwogMjAxMS0xMC0x
MiAgR3VzdGF2byBOb3JvbmhhIFNpbHZhICA8Z3VzdGF2by5ub3JvbmhhQGNvbGxhYm9yYS5jby51
az4KIAogICAgICAgICBGaXggYnVpbGQgd2l0aCBHTGliIDIuMzEKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAkocmV2aXNpb24gOTcyNzkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTgs
NyArMzU4LDYgQEAgX19aTjNKU0NndEVSS05TXzdVU3RyaW5nRVMyXwogX19aTjNKU0NsdEVSS05T
XzdVU3RyaW5nRVMyXwogX19aTjNXVEYxMFN0cmluZ0ltcGwxMXJldmVyc2VGaW5kRVBTMF9qCiBf
X1pOM1dURjEwU3RyaW5nSW1wbDExcmV2ZXJzZUZpbmRFdGoKLV9fWk4zV1RGMTBTdHJpbmdJbXBs
MTJzaGFyZWRCdWZmZXJFdgogX19aTjNXVEYxMFN0cmluZ0ltcGwxNmZpbmRJZ25vcmluZ0Nhc2VF
UEtjagogX19aTjNXVEYxMFN0cmluZ0ltcGwxNmZpbmRJZ25vcmluZ0Nhc2VFUFMwX2oKIF9fWk4z
V1RGMTBTdHJpbmdJbXBsMThzaW1wbGlmeVdoaXRlU3BhY2VFdgpAQCAtNTg3LDYgKzU4Niw3IEBA
IF9fWk5LM0pTQzhKU1N0cmluZzExcmVzb2x2ZVJvcGVFUE5TXzlFeGUKIF9fWk5LM0pTQzhKU1N0
cmluZzl0b0Jvb2xlYW5FUE5TXzlFeGVjU3RhdGVFCiBfX1pOSzNKU0M5SGFzaFRhYmxlMTFjcmVh
dGVUYWJsZUVQTlNfMTJKU0dsb2JhbERhdGFFCiBfX1pOSzNKU0M5SGFzaFRhYmxlMTFkZWxldGVU
YWJsZUV2CitfX1pOSzNXVEYxMFN0cmluZ0ltcGwxN2dldERhdGExNlNsb3dDYXNlRXYKIF9fWk5L
M1dURjEyQXRvbWljU3RyaW5nNWxvd2VyRXYKIF9fWk5LM1dURjEzRGVjaW1hbE51bWJlcjE1dG9T
dHJpbmdEZWNpbWFsRVB0agogX19aTkszV1RGMTNEZWNpbWFsTnVtYmVyMTl0b1N0cmluZ0V4cG9u
ZW50aWFsRVB0agpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVy
cHJldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiA5NzI3OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0NSw3
ICs0NDUsNyBAQCBORVZFUl9JTkxJTkUgSlNWYWx1ZSBJbnRlcnByZXRlcjo6Y2FsbEV2CiAgICAg
ICAgIGlmICghY29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSkgewogICAgICAgICAgICAgLy8gRklY
TUU6IFdlIGNhbiB1c2UgdGhlIHByZXBhcnNlciBpbiBzdHJpY3QgbW9kZSwgd2UganVzdCBuZWVk
IGFkZGl0aW9uYWwgbG9naWMKICAgICAgICAgICAgIC8vIHRvIHByZXZlbnQgZHVwbGljYXRlcy4K
LSAgICAgICAgICAgIExpdGVyYWxQYXJzZXIgcHJlcGFyc2VyKGNhbGxGcmFtZSwgcHJvZ3JhbVNv
dXJjZS5jaGFyYWN0ZXJzKCksIHByb2dyYW1Tb3VyY2UubGVuZ3RoKCksIExpdGVyYWxQYXJzZXI6
Ok5vblN0cmljdEpTT04pOworICAgICAgICAgICAgTGl0ZXJhbFBhcnNlciBwcmVwYXJzZXIoY2Fs
bEZyYW1lLCBwcm9ncmFtU291cmNlLmNoYXJhY3RlcnMxNigpLCBwcm9ncmFtU291cmNlLmxlbmd0
aCgpLCBMaXRlcmFsUGFyc2VyOjpOb25TdHJpY3RKU09OKTsKICAgICAgICAgICAgIGlmIChKU1Zh
bHVlIHBhcnNlZE9iamVjdCA9IHByZXBhcnNlci50cnlMaXRlcmFsUGFyc2UoKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gcGFyc2VkT2JqZWN0OwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJjZVByb3ZpZGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VQcm92aWRlci5oCShyZXZpc2lvbiA5NzI3OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlUHJvdmlkZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtODgsMTcgKzg4LDE5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAg
ICAgICAgICAgICByZXR1cm4gbV9zb3VyY2Uuc3Vic3RyaW5nU2hhcmluZ0ltcGwoc3RhcnQsIGVu
ZCAtIHN0YXJ0KTsKICAgICAgICAgfQotICAgICAgICBjb25zdCBVQ2hhciogZGF0YSgpIGNvbnN0
IHsgcmV0dXJuIG1fc291cmNlLmNoYXJhY3RlcnMoKTsgfQorICAgICAgICBjb25zdCBVQ2hhciog
ZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsgfQogICAgICAgICBpbnQgbGVuZ3RoKCkgY29u
c3QgeyByZXR1cm4gbV9zb3VyY2UubGVuZ3RoKCk7IH0KIAogICAgIHByaXZhdGU6CiAgICAgICAg
IFVTdHJpbmdTb3VyY2VQcm92aWRlcihjb25zdCBVU3RyaW5nJiBzb3VyY2UsIGNvbnN0IFVTdHJp
bmcmIHVybCkKICAgICAgICAgICAgIDogU291cmNlUHJvdmlkZXIodXJsKQogICAgICAgICAgICAg
LCBtX3NvdXJjZShzb3VyY2UpCisgICAgICAgICAgICAsIG1fZGF0YShtX3NvdXJjZS5jaGFyYWN0
ZXJzMTYoKSkKICAgICAgICAgewogICAgICAgICB9CiAKICAgICAgICAgVVN0cmluZyBtX3NvdXJj
ZTsKKyAgICAgICAgY29uc3QgVUNoYXIqIG1fZGF0YTsKICAgICB9OwogICAgIAogfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlm
aWVyLmNwcAkocmV2aXNpb24gOTcyNzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JZGVudGlmaWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU0LDEyICsxNTQsMTMgQEAgdWlu
dDMyX3QgSWRlbnRpZmllcjo6dG9VSW50MzIoY29uc3QgVVN0cgogICAgIG9rID0gZmFsc2U7CiAK
ICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7Ci0gICAgY29uc3QgVUNoYXIq
IGNoYXJhY3RlcnMgPSBzdHJpbmcuY2hhcmFjdGVycygpOwogCiAgICAgLy8gQW4gZW1wdHkgc3Ry
aW5nIGlzIG5vdCBhIG51bWJlci4KICAgICBpZiAoIWxlbmd0aCkKICAgICAgICAgcmV0dXJuIDA7
CiAKKyAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycyA9IHN0cmluZy5jaGFyYWN0ZXJzMTYoKTsK
KwogICAgIC8vIEdldCB0aGUgZmlyc3QgY2hhcmFjdGVyLCB0dXJuaW5nIGl0IGludG8gYSBkaWdp
dC4KICAgICB1aW50MzJfdCB2YWx1ZSA9IGNoYXJhY3RlcnNbMF0gLSAnMCc7CiAgICAgaWYgKHZh
bHVlID4gOSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5j
cHAJKHJldmlzaW9uIDk3Mjc5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
dHJpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSwxNCArNTksMTQgQEAgdm9pZCBKU1N0cmlu
Zzo6cmVzb2x2ZVJvcGUoRXhlY1N0YXRlKiBleAogICAgIFVDaGFyKiBwb3NpdGlvbiA9IGJ1ZmZl
cjsKICAgICBTdHJpbmdJbXBsKiBzdHJpbmcgPSBzdGF0aWNfY2FzdDxTdHJpbmdJbXBsKj4oY3Vy
cmVudEZpYmVyKTsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHJpbmctPmxlbmd0aCgpOwotICAg
IFN0cmluZ0ltcGw6OmNvcHlDaGFycyhwb3NpdGlvbiwgc3RyaW5nLT5jaGFyYWN0ZXJzKCksIGxl
bmd0aCk7CisgICAgU3RyaW5nSW1wbDo6Y29weUNoYXJzKHBvc2l0aW9uLCBzdHJpbmctPmNoYXJh
Y3RlcnMxNigpLCBsZW5ndGgpOwogCiAgICAgaWYgKG1fZmliZXJDb3VudCA+IDEpIHsKICAgICAg
ICAgcG9zaXRpb24gKz0gbGVuZ3RoOwogICAgICAgICBjdXJyZW50RmliZXIgPSBtX2ZpYmVyc1sx
XTsKICAgICAgICAgc3RyaW5nID0gc3RhdGljX2Nhc3Q8U3RyaW5nSW1wbCo+KGN1cnJlbnRGaWJl
cik7CiAgICAgICAgIGxlbmd0aCA9IHN0cmluZy0+bGVuZ3RoKCk7Ci0gICAgICAgIFN0cmluZ0lt
cGw6OmNvcHlDaGFycyhwb3NpdGlvbiwgc3RyaW5nLT5jaGFyYWN0ZXJzKCksIGxlbmd0aCk7Cisg
ICAgICAgIFN0cmluZ0ltcGw6OmNvcHlDaGFycyhwb3NpdGlvbiwgc3RyaW5nLT5jaGFyYWN0ZXJz
MTYoKSwgbGVuZ3RoKTsKICAgICAgICAgcG9zaXRpb24gKz0gbGVuZ3RoOwogICAgIH0KIApAQCAt
MTE1LDcgKzExNSw3IEBAIHZvaWQgSlNTdHJpbmc6OnJlc29sdmVSb3BlU2xvd0Nhc2UoRXhlY1MK
ICAgICAgICAgICAgIFN0cmluZ0ltcGwqIHN0cmluZyA9IHN0YXRpY19jYXN0PFN0cmluZ0ltcGwq
PihjdXJyZW50RmliZXIpOwogICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RyaW5nLT5s
ZW5ndGgoKTsKICAgICAgICAgICAgIHBvc2l0aW9uIC09IGxlbmd0aDsKLSAgICAgICAgICAgIFN0
cmluZ0ltcGw6OmNvcHlDaGFycyhwb3NpdGlvbiwgc3RyaW5nLT5jaGFyYWN0ZXJzKCksIGxlbmd0
aCk7CisgICAgICAgICAgICBTdHJpbmdJbXBsOjpjb3B5Q2hhcnMocG9zaXRpb24sIHN0cmluZy0+
Y2hhcmFjdGVyczE2KCksIGxlbmd0aCk7CiAKICAgICAgICAgICAgIC8vIFdhcyB0aGlzIHRoZSBs
YXN0IGl0ZW0gaW4gdGhlIHdvcmsgcXVldWU/CiAgICAgICAgICAgICBpZiAod29ya1F1ZXVlLmlz
RW1wdHkoKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAuY3Bw
CShyZXZpc2lvbiA5NzI3OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4
cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2Niw5ICszNjYsOSBAQCBpbnQgUmVnRXhwOjptYXRj
aChKU0dsb2JhbERhdGEmIGdsb2JhbERhCiAjaWYgRU5BQkxFKFlBUlJfSklUKQogICAgICAgICBp
ZiAobV9zdGF0ZSA9PSBKSVRDb2RlKSB7CiAgICAgICAgICAgICBpZiAocy5pczhCaXQoKSkKLSAg
ICAgICAgICAgICAgICByZXN1bHQgPSBZYXJyOjpleGVjdXRlKG1fcmVwcmVzZW50YXRpb24tPm1f
cmVnRXhwSklUQ29kZSwgcy5sYXRpbjEoKS5kYXRhKCksIHN0YXJ0T2Zmc2V0LCBzLmxlbmd0aCgp
LCBvZmZzZXRWZWN0b3IpOworICAgICAgICAgICAgICAgIHJlc3VsdCA9IFlhcnI6OmV4ZWN1dGUo
bV9yZXByZXNlbnRhdGlvbi0+bV9yZWdFeHBKSVRDb2RlLCBzLmNoYXJhY3RlcnM4KCksIHN0YXJ0
T2Zmc2V0LCBzLmxlbmd0aCgpLCBvZmZzZXRWZWN0b3IpOwogICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IFlhcnI6OmV4ZWN1dGUobV9yZXByZXNlbnRhdGlvbi0+bV9y
ZWdFeHBKSVRDb2RlLCBzLmNoYXJhY3RlcnMoKSwgc3RhcnRPZmZzZXQsIHMubGVuZ3RoKCksIG9m
ZnNldFZlY3Rvcik7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gWWFycjo6ZXhlY3V0ZShtX3Jl
cHJlc2VudGF0aW9uLT5tX3JlZ0V4cEpJVENvZGUsIHMuY2hhcmFjdGVyczE2KCksIHN0YXJ0T2Zm
c2V0LCBzLmxlbmd0aCgpLCBvZmZzZXRWZWN0b3IpOwogI2lmIEVOQUJMRShZQVJSX0pJVF9ERUJV
RykKICAgICAgICAgICAgIG1hdGNoQ29tcGFyZVdpdGhJbnRlcnByZXRlcihzLCBzdGFydE9mZnNl
dCwgb2Zmc2V0VmVjdG9yLCByZXN1bHQpOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAJKHJldmlzaW9uIDk3Mjc5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzM1LDEzICszMzUsMTMgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUg
SlNWYWx1ZSBqc1NwbGljZVN1YgogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWF4Q291bnQ7IGkr
KykgewogICAgICAgICBpZiAoaSA8IHJhbmdlQ291bnQpIHsKICAgICAgICAgICAgIGlmIChpbnQg
c3JjTGVuID0gc3Vic3RyaW5nUmFuZ2VzW2ldLmxlbmd0aCkgewotICAgICAgICAgICAgICAgIFN0
cmluZ0ltcGw6OmNvcHlDaGFycyhidWZmZXIgKyBidWZmZXJQb3MsIHNvdXJjZS5jaGFyYWN0ZXJz
KCkgKyBzdWJzdHJpbmdSYW5nZXNbaV0ucG9zaXRpb24sIHNyY0xlbik7CisgICAgICAgICAgICAg
ICAgU3RyaW5nSW1wbDo6Y29weUNoYXJzKGJ1ZmZlciArIGJ1ZmZlclBvcywgc291cmNlLmNoYXJh
Y3RlcnMxNigpICsgc3Vic3RyaW5nUmFuZ2VzW2ldLnBvc2l0aW9uLCBzcmNMZW4pOwogICAgICAg
ICAgICAgICAgIGJ1ZmZlclBvcyArPSBzcmNMZW47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
ICAgICAgICAgaWYgKGkgPCBzZXBhcmF0b3JDb3VudCkgewogICAgICAgICAgICAgaWYgKGludCBz
ZXBMZW4gPSBzZXBhcmF0b3JzW2ldLmxlbmd0aCgpKSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5n
SW1wbDo6Y29weUNoYXJzKGJ1ZmZlciArIGJ1ZmZlclBvcywgc2VwYXJhdG9yc1tpXS5jaGFyYWN0
ZXJzKCksIHNlcExlbik7CisgICAgICAgICAgICAgICAgU3RyaW5nSW1wbDo6Y29weUNoYXJzKGJ1
ZmZlciArIGJ1ZmZlclBvcywgc2VwYXJhdG9yc1tpXS5jaGFyYWN0ZXJzMTYoKSwgc2VwTGVuKTsK
ICAgICAgICAgICAgICAgICBidWZmZXJQb3MgKz0gc2VwTGVuOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9VU3RyaW5nLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9VU3RyaW5nLmNwcAko
cmV2aXNpb24gOTcyNzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9VU3RyaW5n
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE3LDcgKzMxNyw5IEBAIHN0YXRpYyBpbmxpbmUgdm9p
ZCBwdXRVVEY4VHJpcGxlKGNoYXIqJiAKIENTdHJpbmcgVVN0cmluZzo6dXRmOChib29sIHN0cmlj
dCkgY29uc3QKIHsKICAgICB1bnNpZ25lZCBsZW5ndGggPSB0aGlzLT5sZW5ndGgoKTsKLSAgICBj
b25zdCBVQ2hhciogY2hhcmFjdGVycyA9IHRoaXMtPmNoYXJhY3RlcnMoKTsKKworICAgIGlmIChp
czhCaXQoKSkKKyAgICAgICAgcmV0dXJuIENTdHJpbmcoY2hhcmFjdGVyczgoKSwgbGVuZ3RoKTsK
IAogICAgIC8vIEFsbG9jYXRlIGEgYnVmZmVyIGJpZyBlbm91Z2ggdG8gaG9sZCBhbGwgdGhlIGNo
YXJhY3RlcnMKICAgICAvLyAoYW4gaW5kaXZpZHVhbCBVVEYtMTYgVUNoYXIgY2FuIG9ubHkgZXhw
YW5kIHRvIDMgVVRGLTggYnl0ZXMpLgpAQCAtMzMxLDYgKzMzMyw4IEBAIENTdHJpbmcgVVN0cmlu
Zzo6dXRmOChib29sIHN0cmljdCkgY29uc3QKICAgICAvLyAgICBidWZmZXIgd2l0aG91dCByZWFs
bG9jaW5nIChzYXksIDEuNSB4IGxlbmd0aCkuCiAgICAgaWYgKGxlbmd0aCA+IG51bWVyaWNfbGlt
aXRzPHVuc2lnbmVkPjo6bWF4KCkgLyAzKQogICAgICAgICByZXR1cm4gQ1N0cmluZygpOworCisg
ICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSB0aGlzLT5jaGFyYWN0ZXJzMTYoKTsKICAgICBW
ZWN0b3I8Y2hhciwgMTAyND4gYnVmZmVyVmVjdG9yKGxlbmd0aCAqIDMpOwogCiAgICAgY2hhciog
YnVmZmVyID0gYnVmZmVyVmVjdG9yLmRhdGEoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1VTdHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9VU3RyaW5nLmgJKHJldmlzaW9uIDk3Mjc5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVVN0cmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC03MywxMCArNzMsMjggQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgaWYgKCFtX2ltcGwpCiAgICAgICAgICAgICByZXR1cm4g
MDsKLSAgICAgICAgcmV0dXJuIG1faW1wbC0+Y2hhcmFjdGVycygpOworICAgICAgICByZXR1cm4g
bV9pbXBsLT5jaGFyYWN0ZXJzMTYoKTsKICAgICB9CiAKLSAgICBib29sIGlzOEJpdCgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgY29uc3QgY2hhciogY2hhcmFjdGVyczgoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgaWYgKCFtX2ltcGwpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgQVNTRVJUKG1faW1wbC0+aXM4Qml0KCkpOworICAgICAgICByZXR1cm4gbV9pbXBsLT5jaGFy
YWN0ZXJzOCgpOworICAgIH0KKworICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzMTYoKSBjb25z
dAorICAgIHsKKyAgICAgICAgaWYgKCFtX2ltcGwpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgQVNTRVJUKCFtX2ltcGwtPmlzOEJpdCgpKTsKKyAgICAgICAgcmV0dXJuIG1faW1wbC0+
Y2hhcmFjdGVyczE2KCk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhclR5cGU+
CisgICAgaW5saW5lIGNvbnN0IENoYXJUeXBlKiBnZXRDaGFyYWN0ZXJzKCkgY29uc3Q7CisgICAg
Ym9vbCBpczhCaXQoKSBjb25zdCB7IHJldHVybiBtX2ltcGwtPmlzOEJpdCgpOyB9CiAKICAgICBD
U3RyaW5nIGFzY2lpKCkgY29uc3Q7CiAgICAgQ1N0cmluZyBsYXRpbjEoKSBjb25zdDsKQEAgLTg2
LDcgKzEwNCw5IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmICghbV9pbXBsIHx8IGluZGV4
ID49IG1faW1wbC0+bGVuZ3RoKCkpCiAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0
dXJuIG1faW1wbC0+Y2hhcmFjdGVycygpW2luZGV4XTsKKyAgICAgICAgaWYgKGlzOEJpdCgpKQor
ICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KG1faW1wbC0+Y2hh
cmFjdGVyczgoKVtpbmRleF0pOworICAgICAgICByZXR1cm4gbV9pbXBsLT5jaGFyYWN0ZXJzMTYo
KVtpbmRleF07CiAgICAgfQogCiAgICAgc3RhdGljIFVTdHJpbmcgbnVtYmVyKGludCk7CkBAIC0x
MTUsNiArMTM1LDE4IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IG1faW1wbDsK
IH07CiAKK3RlbXBsYXRlPD4KK2lubGluZSBjb25zdCBjaGFyKiBVU3RyaW5nOjpnZXRDaGFyYWN0
ZXJzPGNoYXI+KCkgY29uc3QKK3sKKyAgICByZXR1cm4gY2hhcmFjdGVyczgoKTsKK30KKwordGVt
cGxhdGU8PgoraW5saW5lIGNvbnN0IFVDaGFyKiBVU3RyaW5nOjpnZXRDaGFyYWN0ZXJzPFVDaGFy
PigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNoYXJhY3RlcnMxNigpOworfQorCiBBTFdBWVNfSU5M
SU5FIGJvb2wgb3BlcmF0b3I9PShjb25zdCBVU3RyaW5nJiBzMSwgY29uc3QgVVN0cmluZyYgczIp
CiB7CiAgICAgU3RyaW5nSW1wbCogcmVwMSA9IHMxLmltcGwoKTsKQEAgLTEyNCwyOCArMTU2LDY4
IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFVTdHIKIAogICAgIGlmIChy
ZXAxID09IHJlcDIpIC8vIElmIHRoZXkncmUgdGhlIHNhbWUgcmVwLCB0aGV5J3JlIGVxdWFsLgog
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKKwogICAgIGlmIChyZXAxKQogICAgICAgICBzaXpl
MSA9IHJlcDEtPmxlbmd0aCgpOwotICAgICAgICAKKwogICAgIGlmIChyZXAyKQogICAgICAgICBz
aXplMiA9IHJlcDItPmxlbmd0aCgpOwotICAgICAgICAKKwogICAgIGlmIChzaXplMSAhPSBzaXpl
MikgLy8gSWYgdGhlIGxlbmd0aHMgYXJlIG5vdCB0aGUgc2FtZSwgd2UncmUgZG9uZS4KICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIAorCiAgICAgaWYgKCFzaXplMSkKICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgCisKICAgICAvLyBBdCB0aGlzIHBvaW50IHdlIGtub3cgCiAgICAgLy8gICAo
YSkgdGhhdCB0aGUgc3RyaW5ncyBhcmUgdGhlIHNhbWUgbGVuZ3RoIGFuZAogICAgIC8vICAgKGIp
IHRoYXQgdGhleSBhcmUgZ3JlYXRlciB0aGFuIHplcm8gbGVuZ3RoLgotICAgIGNvbnN0IFVDaGFy
KiBkMSA9IHJlcDEtPmNoYXJhY3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciogZDIgPSByZXAyLT5j
aGFyYWN0ZXJzKCk7Ci0gICAgCisgICAgaWYgKHJlcDEtPmlzOEJpdCgpKSB7CisgICAgICAgIGNv
bnN0IGNoYXIqIGQxID0gcmVwMS0+Y2hhcmFjdGVyczgoKTsKKyAgICAgICAgaWYgKHJlcDItPmlz
OEJpdCgpKSB7CisgICAgICAgICAgICBjb25zdCBjaGFyKiBkMiA9IHJlcDItPmNoYXJhY3RlcnM4
KCk7CisKKyAgICAgICAgICAgIGlmIChkMSA9PSBkMikgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSBk
YXRhIHBvaW50ZXJzIGFyZSB0aGUgc2FtZS4KKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KworICAgICAgICAgICAgLy8gRG8gcXVpY2sgY2hlY2tzIGZvciBzaXplcyAxIGFuZCAyLgorICAg
ICAgICAgICAgc3dpdGNoIChzaXplMSkgeworICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAg
ICAgICAgIHJldHVybiBkMVswXSA9PSBkMlswXTsKKyAgICAgICAgICAgIGNhc2UgMjoKKyAgICAg
ICAgICAgICAgICByZXR1cm4gKGQxWzBdID09IGQyWzBdKSAmIChkMVsxXSA9PSBkMlsxXSk7Cisg
ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiAoIW1lbWNtcChkMSwg
ZDIsIHNpemUxICogc2l6ZW9mKGNoYXIpKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICBjb25zdCBVQ2hhciogZDIgPSByZXAyLT5jaGFyYWN0ZXJzMTYoKTsKKworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTE7IGkrKykgeworICAgICAgICAgICAgaWYg
KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGQxW2ldKSAhPSBkMltpXSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorCisgICAgaWYgKHJlcDItPmlzOEJpdCgpKSB7CisgICAgICAgIGNvbnN0IFVDaGFyKiBkMSA9
IHJlcDEtPmNoYXJhY3RlcnMxNigpOworICAgICAgICBjb25zdCBjaGFyKiBkMiA9IHJlcDItPmNo
YXJhY3RlcnM4KCk7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemUxOyBp
KyspIHsKKyAgICAgICAgICAgIGlmIChkMVtpXSAhPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFy
PihkMltpXSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgfQorCisgICAgY29uc3QgVUNoYXIqIGQxID0gcmVwMS0+
Y2hhcmFjdGVyczE2KCk7CisgICAgY29uc3QgVUNoYXIqIGQyID0gcmVwMi0+Y2hhcmFjdGVyczE2
KCk7CisKICAgICBpZiAoZDEgPT0gZDIpIC8vIENoZWNrIHRvIHNlZSBpZiB0aGUgZGF0YSBwb2lu
dGVycyBhcmUgdGhlIHNhbWUuCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIAorCiAgICAgLy8g
RG8gcXVpY2sgY2hlY2tzIGZvciBzaXplcyAxIGFuZCAyLgogICAgIHN3aXRjaCAoc2l6ZTEpIHsK
ICAgICBjYXNlIDE6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvU3RyaW5n
SGFzaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJp
bmdIYXNoLmgJKHJldmlzaW9uIDk3Mjc5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90
ZXh0L1N0cmluZ0hhc2guaAkod29ya2luZyBjb3B5KQpAQCAtNTMsMTEgKzUzLDY1IEBAIG5hbWVz
cGFjZSBXVEYgewogICAgICAgICAgICAgaWYgKGFMZW5ndGggIT0gYkxlbmd0aCkKICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICAgICAgICAgIGlmIChhLT5pczhCaXQoKSkgewor
ICAgICAgICAgICAgICAgIGlmIChiLT5pczhCaXQoKSkgeworICAgICAgICAgICAgICAgICAgICAv
LyBGSVhNRTogcGVyaGFwcyB3ZSBzaG91bGQgaGF2ZSBhIG1vcmUgYWJzdHJhY3QgbWFjcm8gdGhh
dCBpbmRpY2F0ZXMgd2hlbgorICAgICAgICAgICAgICAgICAgICAvLyBnb2luZyA0IGJ5dGVzIGF0
IGEgdGltZSBpcyB1bnNhZmUKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogYUNoYXJz
ID0gYS0+Y2hhcmFjdGVyczgoKTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogYkNo
YXJzID0gYi0+Y2hhcmFjdGVyczgoKTsKKworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBp
ID0gMDsKKyNpZiAoQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkpCisgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHVuc2lnbmVkIGNoYXJzUGVySW50ID0gc2l6ZW9mKHVpbnQzMl90KSAvIHNpemVvZihj
aGFyKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChhTGVu
Z3RoID4gY2hhcnNQZXJJbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHN0
b3BDb3VudCA9IGFMZW5ndGggJiB+KGNoYXJzUGVySW50IC0gMSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90KiBhSW50Q2hh
cmFjdGVycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihhQ2hhcnMpOworICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDMyX3QqIGJJbnRDaGFyYWN0ZXJzID0gcmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KGJDaGFycyk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBpIDwgc3RvcENvdW50OyBpICs9IGNoYXJzUGVy
SW50LCArK2opIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYUludENoYXJhY3Rl
cnNbal0gIT0gYkludENoYXJhY3RlcnNbal0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgfQorI2VuZGlmCisgICAgICAgICAgICAgICAgICAgIGZvciAoOyBpIDwgYUxlbmd0
aDsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYUNoYXJzW2ldICE9IGJDaGFy
c1tpXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIGEg
aXMgOGJpdCwgYiBpcyAxNmJpdAorICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFDaGFycyA9
IGEtPmNoYXJhY3RlcnM4KCk7CisgICAgICAgICAgICAgICAgY29uc3QgVUNoYXIqIGJDaGFycyA9
IGItPmNoYXJhY3RlcnMxNigpOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgIT0gYUxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh1bnNpZ25lZENo
YXJWYWx1ZSgqYUNoYXJzKyspICE9ICpiQ2hhcnMrKykKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGItPmlzOEJpdCgpKSB7
CisgICAgICAgICAgICAgICAgLy8gYSBpcyA4Yml0LCBiIGlzIDE2Yml0CisgICAgICAgICAgICAg
ICAgY29uc3QgVUNoYXIqIGFDaGFycyA9IGEtPmNoYXJhY3RlcnMxNigpOworICAgICAgICAgICAg
ICAgIGNvbnN0IGNoYXIqIGJDaGFycyA9IGItPmNoYXJhY3RlcnM4KCk7CisgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSAhPSBhTGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCphQ2hhcnMrKyAhPSB1bnNpZ25lZENoYXJWYWx1ZSgqYkNoYXJzKyspKQor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAvLyAxNmJpdCBhICYgYgogICAgICAgICAgICAgLy8gRklYTUU6IHBlcmhhcHMgd2Ugc2hv
dWxkIGhhdmUgYSBtb3JlIGFic3RyYWN0IG1hY3JvIHRoYXQgaW5kaWNhdGVzIHdoZW4KICAgICAg
ICAgICAgIC8vIGdvaW5nIDQgYnl0ZXMgYXQgYSB0aW1lIGlzIHVuc2FmZQogI2lmIENQVShBUk0p
IHx8IENQVShTSDQpIHx8IENQVShNSVBTKSB8fCBDUFUoU1BBUkMpCi0gICAgICAgICAgICBjb25z
dCBVQ2hhciogYUNoYXJzID0gYS0+Y2hhcmFjdGVycygpOwotICAgICAgICAgICAgY29uc3QgVUNo
YXIqIGJDaGFycyA9IGItPmNoYXJhY3RlcnMoKTsKKyAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBh
Q2hhcnMgPSBhLT5jaGFyYWN0ZXJzMTYoKTsKKyAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBiQ2hh
cnMgPSBiLT5jaGFyYWN0ZXJzMTYoKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgIT0gYUxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICAgICAgaWYgKCphQ2hhcnMrKyAhPSAq
YkNoYXJzKyspCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTY1LDggKzEx
OSw4IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAjZWxzZQog
ICAgICAgICAgICAgLyogRG8gaXQgNC1ieXRlcy1hdC1hLXRpbWUgb24gYXJjaGl0ZWN0dXJlcyB3
aGVyZSBpdCdzIHNhZmUgKi8KLSAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90KiBhQ2hhcnMgPSBy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oYS0+Y2hhcmFjdGVycygpKTsKLSAgICAg
ICAgICAgIGNvbnN0IHVpbnQzMl90KiBiQ2hhcnMgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVp
bnQzMl90Kj4oYi0+Y2hhcmFjdGVycygpKTsKKyAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90KiBh
Q2hhcnMgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oYS0+Y2hhcmFjdGVyczE2
KCkpOworICAgICAgICAgICAgY29uc3QgdWludDMyX3QqIGJDaGFycyA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdWludDMyX3QqPihiLT5jaGFyYWN0ZXJzMTYoKSk7CiAKICAgICAgICAgICAgIHVu
c2lnbmVkIGhhbGZMZW5ndGggPSBhTGVuZ3RoID4+IDE7CiAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpICE9IGhhbGZMZW5ndGg7ICsraSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93dGYvdGV4dC9TdHJpbmdJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL3RleHQvU3RyaW5nSW1wbC5jcHAJKHJldmlzaW9uIDk3Mjc5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01OCw4ICs1OCwxMyBAQCBTdHJpbmdJbXBsOjp+U3RyaW5nSW1wbCgpCiAgICAgaWYgKG93
bmVyc2hpcCAhPSBCdWZmZXJJbnRlcm5hbCkgewogICAgICAgICBpZiAob3duZXJzaGlwID09IEJ1
ZmZlck93bmVkKSB7CiAgICAgICAgICAgICBBU1NFUlQoIW1fc2hhcmVkQnVmZmVyKTsKLSAgICAg
ICAgICAgIEFTU0VSVChtX2RhdGEpOwotICAgICAgICAgICAgZmFzdEZyZWUoY29uc3RfY2FzdDxV
Q2hhcio+KG1fZGF0YSkpOworICAgICAgICAgICAgLy8gV2UgdXNlIG1fZGF0YTgsIGJ1dCBzaW5j
ZSBpdCBpcyBhIHVuaW9uIHdpdGggbV9kYXRhMTYgdGhpcyB3b3JrcyBlaXRoZXIgd2F5LgorICAg
ICAgICAgICAgQVNTRVJUKG1fZGF0YTgpOworICAgICAgICAgICAgZmFzdEZyZWUoY29uc3RfY2Fz
dDxjaGFyKj4obV9kYXRhOCkpOworICAgICAgICAgICAgaWYgKGhhczE2Qml0U2hhZG93KCkpIHsK
KyAgICAgICAgICAgICAgICBBU1NFUlQobV9jb3B5RGF0YTE2KTsKKyAgICAgICAgICAgICAgICBm
YXN0RnJlZShtX2NvcHlEYXRhMTYpOworICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYg
KG93bmVyc2hpcCA9PSBCdWZmZXJTdWJzdHJpbmcpIHsKICAgICAgICAgICAgIEFTU0VSVChtX3N1
YnN0cmluZ0J1ZmZlcik7CiAgICAgICAgICAgICBtX3N1YnN0cmluZ0J1ZmZlci0+ZGVyZWYoKTsK
QEAgLTcxLDYgKzc2LDI1IEBAIFN0cmluZ0ltcGw6On5TdHJpbmdJbXBsKCkKICAgICB9CiB9CiAK
K1Bhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFsaXplZCh1
bnNpZ25lZCBsZW5ndGgsIGNoYXIqJiBkYXRhKQoreworICAgIGlmICghbGVuZ3RoKSB7CisgICAg
ICAgIGRhdGEgPSAwOworICAgICAgICByZXR1cm4gZW1wdHkoKTsKKyAgICB9CisKKyAgICAvLyBB
bGxvY2F0ZSBhIHNpbmdsZSBidWZmZXIgbGFyZ2UgZW5vdWdoIHRvIGNvbnRhaW4gdGhlIFN0cmlu
Z0ltcGwKKyAgICAvLyBzdHJ1Y3QgYXMgd2VsbCBhcyB0aGUgZGF0YSB3aGljaCBpdCBjb250YWlu
cy4gVGhpcyByZW1vdmVzIG9uZQorICAgIC8vIGhlYXAgYWxsb2NhdGlvbiBmcm9tIHRoaXMgY2Fs
bC4KKyAgICBpZiAobGVuZ3RoID4gKChzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4
KCkgLSBzaXplb2YoU3RyaW5nSW1wbCkpIC8gc2l6ZW9mKGNoYXIpKSkKKyAgICAgICAgQ1JBU0go
KTsKKyAgICBzaXplX3Qgc2l6ZSA9IHNpemVvZihTdHJpbmdJbXBsKSArIGxlbmd0aCAqIHNpemVv
ZihjaGFyKTsKKyAgICBTdHJpbmdJbXBsKiBzdHJpbmcgPSBzdGF0aWNfY2FzdDxTdHJpbmdJbXBs
Kj4oZmFzdE1hbGxvYyhzaXplKSk7CisKKyAgICBkYXRhID0gcmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4oc3RyaW5nICsgMSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyAoc3RyaW5nKSBTdHJpbmdJ
bXBsKGxlbmd0aCwgRm9yY2U4Qml0Q29uc3RydWN0b3IpKTsKK30KKwogUGFzc1JlZlB0cjxTdHJp
bmdJbXBsPiBTdHJpbmdJbXBsOjpjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCwg
VUNoYXIqJiBkYXRhKQogewogICAgIGlmICghbGVuZ3RoKSB7CkBAIC0xMzIsNyArMTU2LDcgQEAg
UGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpjcmVhdAogICAgIHJldHVybiBhZG9w
dFJlZihuZXcgU3RyaW5nSW1wbChjaGFyYWN0ZXJzLCBsZW5ndGgsIHNoYXJlZEJ1ZmZlcikpOwog
fQogCi1TaGFyZWRVQ2hhciogU3RyaW5nSW1wbDo6c2hhcmVkQnVmZmVyKCkKK1NoYXJlZFVDaGFy
KiBTdHJpbmdJbXBsOjpzaGFyZWRCdWZmZXIxNigpCiB7CiAgICAgaWYgKG1fbGVuZ3RoIDwgbWlu
TGVuZ3RoVG9TaGFyZSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xNDQsMTAgKzE2OCwxMyBAQCBT
aGFyZWRVQ2hhciogU3RyaW5nSW1wbDo6c2hhcmVkQnVmZmVyKCkKICAgICBpZiAob3duZXJzaGlw
ID09IEJ1ZmZlckludGVybmFsKQogICAgICAgICByZXR1cm4gMDsKICAgICBpZiAob3duZXJzaGlw
ID09IEJ1ZmZlclN1YnN0cmluZykKLSAgICAgICAgcmV0dXJuIG1fc3Vic3RyaW5nQnVmZmVyLT5z
aGFyZWRCdWZmZXIoKTsKKyAgICAgICAgcmV0dXJuIG1fc3Vic3RyaW5nQnVmZmVyLT5zaGFyZWRC
dWZmZXIxNigpOwogICAgIGlmIChvd25lcnNoaXAgPT0gQnVmZmVyT3duZWQpIHsKICAgICAgICAg
QVNTRVJUKCFtX3NoYXJlZEJ1ZmZlcik7Ci0gICAgICAgIG1fc2hhcmVkQnVmZmVyID0gU2hhcmVk
VUNoYXI6OmNyZWF0ZShuZXcgU2hhcmFibGVVQ2hhcihtX2RhdGEpKS5sZWFrUmVmKCk7CisgICAg
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgU2hhcmVkQ2hhciBmb3IgOC1iaXQgc3RyaW5ncworICAg
ICAgICBBU1NFUlQoIWlzOEJpdCgpKTsKKyAgICAgICAgQVNTRVJUKCFoYXMxNkJpdFNoYWRvdygp
KTsKKyAgICAgICAgbV9zaGFyZWRCdWZmZXIgPSBTaGFyZWRVQ2hhcjo6Y3JlYXRlKG5ldyBTaGFy
YWJsZVVDaGFyKG1fZGF0YTE2KSkubGVha1JlZigpOwogICAgICAgICBtX3JlZkNvdW50QW5kRmxh
Z3MgPSAobV9yZWZDb3VudEFuZEZsYWdzICYgfnNfcmVmQ291bnRNYXNrQnVmZmVyT3duZXJzaGlw
KSB8IEJ1ZmZlclNoYXJlZDsKICAgICB9CiAKQEAgLTE1NiwxNCArMTgzLDQ5IEBAIFNoYXJlZFVD
aGFyKiBTdHJpbmdJbXBsOjpzaGFyZWRCdWZmZXIoKQogICAgIHJldHVybiBtX3NoYXJlZEJ1ZmZl
cjsKIH0KIAorY29uc3QgVUNoYXIqIFN0cmluZ0ltcGw6OmdldERhdGExNlNsb3dDYXNlKCkgY29u
c3QKK3sKKyAgICBpZiAoaGFzMTZCaXRTaGFkb3coKSkKKyAgICAgICAgcmV0dXJuIG1fY29weURh
dGExNjsKKworICAgIGlmIChidWZmZXJPd25lcnNoaXAoKSA9PSBCdWZmZXJTdWJzdHJpbmcpIHsK
KyAgICAgICAgLy8gSWYgdGhpcyBpcyBhIHN1YnN0cmluZywgcmV0dXJuIGEgcG9pbnRlciBpbnRv
IHRoZSBwYXJlbnQgc3RyaW5nLgorICAgICAgICAvLyBUT0RPOiBDb25zaWRlciBzZXZlcmluZyB0
aGlzIHN0cmluZyBmcm9tIHRoZSBwYXJlbnQgc3RyaW5nCisgICAgICAgIHVuc2lnbmVkIG9mZnNl
dCA9IG1fZGF0YTggLSBtX3N1YnN0cmluZ0J1ZmZlci0+Y2hhcmFjdGVyczgoKTsKKyAgICAgICAg
cmV0dXJuIG1fc3Vic3RyaW5nQnVmZmVyLT5jaGFyYWN0ZXJzMTYoKSArIG9mZnNldDsKKyAgICB9
CisKKyAgICBBU1NFUlQoYnVmZmVyT3duZXJzaGlwKCkgIT0gQnVmZmVyU2hhcmVkKTsKKyAgICB1
bnNpZ25lZCBsZW4gPSBsZW5ndGgoKTsKKyAgICBtX2NvcHlEYXRhMTYgPSBzdGF0aWNfY2FzdDxV
Q2hhcio+KGZhc3RDYWxsb2MobGVuLCBzaXplb2YoVUNoYXIpKSk7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBsZW47IGkrKykKKyAgICAgICAgbV9jb3B5RGF0YTE2W2ldID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQgY2hhcj4obV9kYXRhOFtpXSk7CisKKyAgICBtX3JlZkNvdW50QW5kRmxhZ3Mg
fD0gc19yZWZDb3VudEZsYWdIYXMxNkJpdFNoYWRvdzsKKworICAgIHJldHVybiBtX2NvcHlEYXRh
MTY7Cit9CisKIGJvb2wgU3RyaW5nSW1wbDo6Y29udGFpbnNPbmx5V2hpdGVzcGFjZSgpCiB7CiAg
ICAgLy8gRklYTUU6IFRoZSBkZWZpbml0aW9uIG9mIHdoaXRlc3BhY2UgaGVyZSBpbmNsdWRlcyBh
IG51bWJlciBvZiBjaGFyYWN0ZXJzCiAgICAgLy8gdGhhdCBhcmUgbm90IHdoaXRlc3BhY2UgZnJv
bSB0aGUgcG9pbnQgb2YgdmlldyBvZiBSZW5kZXJUZXh0OyBJIHdvbmRlciBpZgogICAgIC8vIHRo
YXQncyBhIHByb2JsZW0gaW4gcHJhY3RpY2UuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fbGVuZ3RoOyBpKyspCi0gICAgICAgIGlmICghaXNBU0NJSVNwYWNlKG1fZGF0YVtpXSkpCisg
ICAgaWYgKGlzOEJpdCgpKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2xl
bmd0aDsgaSsrKSB7CisgICAgICAgICAgICBVQ2hhciBjID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQg
Y2hhcj4obV9kYXRhOFtpXSk7CisgICAgICAgICAgICBpZiAoIWlzQVNDSUlTcGFjZShjKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9sZW5ndGg7IGkr
KykgeworICAgICAgICBVQ2hhciBjID0gbV9kYXRhMTZbaV07CisgICAgICAgIGlmICghaXNBU0NJ
SVNwYWNlKGMpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KICAgICByZXR1cm4g
dHJ1ZTsKIH0KIApAQCAtMTc3LDE1ICsyMzksMjAgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBT
dHJpbmdJbXBsOjpzdWJzdAogICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgIGxlbmd0
aCA9IG1heExlbmd0aDsKICAgICB9Ci0gICAgcmV0dXJuIGNyZWF0ZShtX2RhdGEgKyBzdGFydCwg
bGVuZ3RoKTsKKyAgICBpZiAoaXM4Qml0KCkpCisgICAgICAgIHJldHVybiBjcmVhdGUobV9kYXRh
OCArIHN0YXJ0LCBsZW5ndGgpOworCisgICAgcmV0dXJuIGNyZWF0ZShtX2RhdGExNiArIHN0YXJ0
LCBsZW5ndGgpOwogfQogCiBVQ2hhcjMyIFN0cmluZ0ltcGw6OmNoYXJhY3RlclN0YXJ0aW5nQXQo
dW5zaWduZWQgaSkKIHsKLSAgICBpZiAoVTE2X0lTX1NJTkdMRShtX2RhdGFbaV0pKQotICAgICAg
ICByZXR1cm4gbV9kYXRhW2ldOwotICAgIGlmIChpICsgMSA8IG1fbGVuZ3RoICYmIFUxNl9JU19M
RUFEKG1fZGF0YVtpXSkgJiYgVTE2X0lTX1RSQUlMKG1fZGF0YVtpICsgMV0pKQotICAgICAgICBy
ZXR1cm4gVTE2X0dFVF9TVVBQTEVNRU5UQVJZKG1fZGF0YVtpXSwgbV9kYXRhW2kgKyAxXSk7Cisg
ICAgaWYgKGlzOEJpdCgpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh
cj4obV9kYXRhOFtpXSk7CisgICAgaWYgKFUxNl9JU19TSU5HTEUobV9kYXRhMTZbaV0pKQorICAg
ICAgICByZXR1cm4gbV9kYXRhMTZbaV07CisgICAgaWYgKGkgKyAxIDwgbV9sZW5ndGggJiYgVTE2
X0lTX0xFQUQobV9kYXRhMTZbaV0pICYmIFUxNl9JU19UUkFJTChtX2RhdGExNltpICsgMV0pKQor
ICAgICAgICByZXR1cm4gVTE2X0dFVF9TVVBQTEVNRU5UQVJZKG1fZGF0YTE2W2ldLCBtX2RhdGEx
NltpICsgMV0pOwogICAgIHJldHVybiAwOwogfQogCkBAIC0xOTUsNDIgKzI2Miw2NCBAQCBQYXNz
UmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6Omxvd2VyCiAgICAgLy8gbm8tb3AgY29kZSBw
YXRoIHVwIHRocm91Z2ggdGhlIGZpcnN0ICdyZXR1cm4nIHN0YXRlbWVudC4KICAgICAKICAgICAv
LyBGaXJzdCBzY2FuIHRoZSBzdHJpbmcgZm9yIHVwcGVyY2FzZSBhbmQgbm9uLUFTQ0lJIGNoYXJh
Y3RlcnM6Ci0gICAgVUNoYXIgb3JlZCA9IDA7CiAgICAgYm9vbCBub1VwcGVyID0gdHJ1ZTsKLSAg
ICBjb25zdCBVQ2hhciAqZW5kID0gbV9kYXRhICsgbV9sZW5ndGg7Ci0gICAgZm9yIChjb25zdCBV
Q2hhciogY2hwID0gbV9kYXRhOyBjaHAgIT0gZW5kOyBjaHArKykgewotICAgICAgICBpZiAoVU5M
SUtFTFkoaXNBU0NJSVVwcGVyKCpjaHApKSkKLSAgICAgICAgICAgIG5vVXBwZXIgPSBmYWxzZTsK
LSAgICAgICAgb3JlZCB8PSAqY2hwOworICAgIFVDaGFyIG9yZWQgPSAwOworICAgIGlmIChpczhC
aXQoKSkgeworICAgICAgICBjb25zdCBjaGFyICplbmQgPSBtX2RhdGE4ICsgbV9sZW5ndGg7Cisg
ICAgICAgIGZvciAoY29uc3QgY2hhciogY2hwID0gbV9kYXRhODsgY2hwICE9IGVuZDsgY2hwKysp
CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoaXNBU0NJSVVwcGVyKCpjaHApKSkKKyAgICAgICAg
ICAgICAgICBub1VwcGVyID0gZmFsc2U7CisgICAgICAgIC8vIE5vdGhpbmcgdG8gZG8gaWYgdGhl
IHN0cmluZyBpcyBhbGwgQVNDSUkgd2l0aCBubyB1cHBlcmNhc2UuCisgICAgICAgIGlmIChub1Vw
cGVyKQorICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY29u
c3QgVUNoYXIgKmVuZCA9IG1fZGF0YTE2ICsgbV9sZW5ndGg7CisgICAgICAgIGZvciAoY29uc3Qg
VUNoYXIqIGNocCA9IG1fZGF0YTE2OyBjaHAgIT0gZW5kOyBjaHArKykgeworICAgICAgICAgICAg
aWYgKFVOTElLRUxZKGlzQVNDSUlVcHBlcigqY2hwKSkpCisgICAgICAgICAgICAgICAgbm9VcHBl
ciA9IGZhbHNlOworICAgICAgICAgICAgb3JlZCB8PSAqY2hwOworICAgICAgICB9CisgICAgICAg
IC8vIE5vdGhpbmcgdG8gZG8gaWYgdGhlIHN0cmluZyBpcyBhbGwgQVNDSUkgd2l0aCBubyB1cHBl
cmNhc2UuCisgICAgICAgIGlmIChub1VwcGVyICYmICEob3JlZCAmIH4weDdGKSkKKyAgICAgICAg
ICAgIHJldHVybiB0aGlzOwogICAgIH0KLSAgICAKLSAgICAvLyBOb3RoaW5nIHRvIGRvIGlmIHRo
ZSBzdHJpbmcgaXMgYWxsIEFTQ0lJIHdpdGggbm8gdXBwZXJjYXNlLgotICAgIGlmIChub1VwcGVy
ICYmICEob3JlZCAmIH4weDdGKSkKLSAgICAgICAgcmV0dXJuIHRoaXM7CiAKICAgICBpZiAobV9s
ZW5ndGggPiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1h
eCgpKSkKICAgICAgICAgQ1JBU0goKTsKICAgICBpbnQzMl90IGxlbmd0aCA9IG1fbGVuZ3RoOwog
Ci0gICAgVUNoYXIqIGRhdGE7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IG5ld0ltcGwgPSBjcmVh
dGVVbmluaXRpYWxpemVkKG1fbGVuZ3RoLCBkYXRhKTsKLQogICAgIGlmICghKG9yZWQgJiB+MHg3
RikpIHsKLSAgICAgICAgLy8gRG8gYSBmYXN0ZXIgbG9vcCBmb3IgdGhlIGNhc2Ugd2hlcmUgYWxs
IHRoZSBjaGFyYWN0ZXJzIGFyZSBBU0NJSS4KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBs
ZW5ndGg7IGkrKykgewotICAgICAgICAgICAgVUNoYXIgYyA9IG1fZGF0YVtpXTsKLSAgICAgICAg
ICAgIGRhdGFbaV0gPSB0b0FTQ0lJTG93ZXIoYyk7CisgICAgICAgIGlmIChpczhCaXQoKSkgewor
ICAgICAgICAgICAgY2hhciogZGF0YTg7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFJlZlB0
cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChtX2xlbmd0aCwgZGF0
YTgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBs
ZW5ndGg7IGkrKykKKyAgICAgICAgICAgICAgICBkYXRhOFtpXSA9IHRvQVNDSUlMb3dlcihtX2Rh
dGE4W2ldKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIG5ld0ltcGw7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIFVDaGFyKiBkYXRhMTY7CisgICAgICAgIFJlZlB0cjxT
dHJpbmdJbXBsPiBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChtX2xlbmd0aCwgZGF0YTE2
KTsKKyAgICAgICAgCisgICAgICAgIGZvciAoaW50MzJfdCBpID0gMDsgaSA8IGxlbmd0aDsgaSsr
KSB7CisgICAgICAgICAgICBVQ2hhciBjID0gbV9kYXRhMTZbaV07CisgICAgICAgICAgICBkYXRh
MTZbaV0gPSB0b0FTQ0lJTG93ZXIoYyk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG5ld0lt
cGw7CiAgICAgfQogICAgIAogICAgIC8vIERvIGEgc2xvd2VyIGltcGxlbWVudGF0aW9uIGZvciBj
YXNlcyB0aGF0IGluY2x1ZGUgbm9uLUFTQ0lJIGNoYXJhY3RlcnMuCisgICAgVUNoYXIqIGRhdGEx
NjsKKyAgICBSZWZQdHI8U3RyaW5nSW1wbD4gbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQo
bV9sZW5ndGgsIGRhdGExNik7CisKICAgICBib29sIGVycm9yOwotICAgIGludDMyX3QgcmVhbExl
bmd0aCA9IFVuaWNvZGU6OnRvTG93ZXIoZGF0YSwgbGVuZ3RoLCBtX2RhdGEsIG1fbGVuZ3RoLCAm
ZXJyb3IpOworICAgIGludDMyX3QgcmVhbExlbmd0aCA9IFVuaWNvZGU6OnRvTG93ZXIoZGF0YTE2
LCBsZW5ndGgsIG1fZGF0YTE2LCBtX2xlbmd0aCwgJmVycm9yKTsKICAgICBpZiAoIWVycm9yICYm
IHJlYWxMZW5ndGggPT0gbGVuZ3RoKQogICAgICAgICByZXR1cm4gbmV3SW1wbDsKLSAgICBuZXdJ
bXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChyZWFsTGVuZ3RoLCBkYXRhKTsKLSAgICBVbmljb2Rl
Ojp0b0xvd2VyKGRhdGEsIHJlYWxMZW5ndGgsIG1fZGF0YSwgbV9sZW5ndGgsICZlcnJvcik7Cisg
ICAgbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQocmVhbExlbmd0aCwgZGF0YTE2KTsKKyAg
ICBVbmljb2RlOjp0b0xvd2VyKGRhdGExNiwgcmVhbExlbmd0aCwgbV9kYXRhMTYsIG1fbGVuZ3Ro
LCAmZXJyb3IpOwogICAgIGlmIChlcnJvcikKICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgcmV0
dXJuIG5ld0ltcGw7CkBAIC0yNDEsMzAgKzMzMCw2MCBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+
IFN0cmluZ0ltcGw6OnVwcGVyCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBjb3VsZCBiZSBvcHRpbWl6
ZWQgZm9yIG5vLW9wIGNhc2VzIHRoZSB3YXkgbG93ZXIoKSBpcywKICAgICAvLyBidXQgaW4gZW1w
aXJpY2FsIHRlc3RpbmcsIGZldyBhY3R1YWwgY2FsbHMgdG8gdXBwZXIoKSBhcmUgbm8tb3BzLCBz
bwogICAgIC8vIGl0IHdvdWxkbid0IGJlIHdvcnRoIHRoZSBleHRyYSB0aW1lIGZvciBwcmUtc2Nh
bm5pbmcuCi0gICAgVUNoYXIqIGRhdGE7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IG5ld0ltcGwg
PSBjcmVhdGVVbmluaXRpYWxpemVkKG1fbGVuZ3RoLCBkYXRhKTsKIAogICAgIGlmIChtX2xlbmd0
aCA+IHN0YXRpY19jYXN0PHVuc2lnbmVkPihudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCkp
KQogICAgICAgICBDUkFTSCgpOwogICAgIGludDMyX3QgbGVuZ3RoID0gbV9sZW5ndGg7CiAKKyAg
ICBpZiAoaXM4Qml0KCkpIHsKKyAgICAgICAgY2hhciogZGF0YTg7CisgICAgICAgIFJlZlB0cjxT
dHJpbmdJbXBsPiBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChtX2xlbmd0aCwgZGF0YTgp
OworICAgICAgICAKKyAgICAgICAgLy8gRG8gYSBmYXN0ZXIgbG9vcCBmb3IgdGhlIGNhc2Ugd2hl
cmUgYWxsIHRoZSBjaGFyYWN0ZXJzIGFyZSBBU0NJSS4KKyAgICAgICAgY2hhciBvcmVkID0gMDsK
KyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAg
Y2hhciBjID0gbV9kYXRhOFtpXTsKKyAgICAgICAgICAgIG9yZWQgfD0gYzsKKyAgICAgICAgICAg
IGRhdGE4W2ldID0gdG9BU0NJSVVwcGVyKGMpOworICAgICAgICB9CisgICAgICAgIGlmICghKG9y
ZWQgJiB+MHg3RikpCisgICAgICAgICAgICByZXR1cm4gbmV3SW1wbC5yZWxlYXNlKCk7CisKKyAg
ICAgICAgLy8gRG8gYSBzbG93ZXIgaW1wbGVtZW50YXRpb24gZm9yIGNhc2VzIHRoYXQgaW5jbHVk
ZSBub24tQVNDSUkgY2hhcmFjdGVycy4KKyAgICAgICAgYm9vbCBlcnJvcjsKKyAgICAgICAgVUNo
YXIqIGRhdGExNjsKKyAgICAgICAgbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQobV9sZW5n
dGgsIGRhdGExNik7CisgICAgICAgIGludDMyX3QgcmVhbExlbmd0aCA9IFVuaWNvZGU6OnRvVXBw
ZXIoZGF0YTE2LCBsZW5ndGgsIG1fZGF0YTE2LCBtX2xlbmd0aCwgJmVycm9yKTsKKyAgICAgICAg
aWYgKCFlcnJvciAmJiByZWFsTGVuZ3RoID09IGxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybiBu
ZXdJbXBsOworICAgICAgICBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChyZWFsTGVuZ3Ro
LCBkYXRhMTYpOworICAgICAgICBVbmljb2RlOjp0b1VwcGVyKGRhdGExNiwgcmVhbExlbmd0aCwg
bV9kYXRhMTYsIG1fbGVuZ3RoLCAmZXJyb3IpOworICAgICAgICBpZiAoZXJyb3IpCisgICAgICAg
ICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgcmV0dXJuIG5ld0ltcGwucmVsZWFzZSgpOworICAg
IH0KKworICAgIFVDaGFyKiBkYXRhMTY7CisgICAgUmVmUHRyPFN0cmluZ0ltcGw+IG5ld0ltcGwg
PSBjcmVhdGVVbmluaXRpYWxpemVkKG1fbGVuZ3RoLCBkYXRhMTYpOworICAgIAogICAgIC8vIERv
IGEgZmFzdGVyIGxvb3AgZm9yIHRoZSBjYXNlIHdoZXJlIGFsbCB0aGUgY2hhcmFjdGVycyBhcmUg
QVNDSUkuCiAgICAgVUNoYXIgb3JlZCA9IDA7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5n
dGg7IGkrKykgewotICAgICAgICBVQ2hhciBjID0gbV9kYXRhW2ldOworICAgICAgICBVQ2hhciBj
ID0gbV9kYXRhMTZbaV07CiAgICAgICAgIG9yZWQgfD0gYzsKLSAgICAgICAgZGF0YVtpXSA9IHRv
QVNDSUlVcHBlcihjKTsKKyAgICAgICAgZGF0YTE2W2ldID0gdG9BU0NJSVVwcGVyKGMpOwogICAg
IH0KICAgICBpZiAoIShvcmVkICYgfjB4N0YpKQogICAgICAgICByZXR1cm4gbmV3SW1wbC5yZWxl
YXNlKCk7CiAKICAgICAvLyBEbyBhIHNsb3dlciBpbXBsZW1lbnRhdGlvbiBmb3IgY2FzZXMgdGhh
dCBpbmNsdWRlIG5vbi1BU0NJSSBjaGFyYWN0ZXJzLgogICAgIGJvb2wgZXJyb3I7Ci0gICAgaW50
MzJfdCByZWFsTGVuZ3RoID0gVW5pY29kZTo6dG9VcHBlcihkYXRhLCBsZW5ndGgsIG1fZGF0YSwg
bV9sZW5ndGgsICZlcnJvcik7CisgICAgbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQobV9s
ZW5ndGgsIGRhdGExNik7CisgICAgaW50MzJfdCByZWFsTGVuZ3RoID0gVW5pY29kZTo6dG9VcHBl
cihkYXRhMTYsIGxlbmd0aCwgbV9kYXRhMTYsIG1fbGVuZ3RoLCAmZXJyb3IpOwogICAgIGlmICgh
ZXJyb3IgJiYgcmVhbExlbmd0aCA9PSBsZW5ndGgpCiAgICAgICAgIHJldHVybiBuZXdJbXBsOwot
ICAgIG5ld0ltcGwgPSBjcmVhdGVVbmluaXRpYWxpemVkKHJlYWxMZW5ndGgsIGRhdGEpOwotICAg
IFVuaWNvZGU6OnRvVXBwZXIoZGF0YSwgcmVhbExlbmd0aCwgbV9kYXRhLCBtX2xlbmd0aCwgJmVy
cm9yKTsKKyAgICBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChyZWFsTGVuZ3RoLCBkYXRh
MTYpOworICAgIFVuaWNvZGU6OnRvVXBwZXIoZGF0YTE2LCByZWFsTGVuZ3RoLCBtX2RhdGExNiwg
bV9sZW5ndGgsICZlcnJvcik7CiAgICAgaWYgKGVycm9yKQogICAgICAgICByZXR1cm4gdGhpczsK
ICAgICByZXR1cm4gbmV3SW1wbC5yZWxlYXNlKCk7CkBAIC0yNzUsNiArMzk0LDEzIEBAIFBhc3NS
ZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6ZmlsbCgKICAgICBpZiAoIW1fbGVuZ3RoKQog
ICAgICAgICByZXR1cm4gdGhpczsKIAorICAgIGlmICghKGNoYXJhY3RlciAmIH4weDdGKSkgewor
ICAgICAgICBjaGFyKiBkYXRhOworICAgICAgICBSZWZQdHI8U3RyaW5nSW1wbD4gbmV3SW1wbCA9
IGNyZWF0ZVVuaW5pdGlhbGl6ZWQobV9sZW5ndGgsIGRhdGEpOworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9sZW5ndGg7ICsraSkKKyAgICAgICAgICAgIGRhdGFbaV0gPSBjaGFy
YWN0ZXI7CisgICAgICAgIHJldHVybiBuZXdJbXBsLnJlbGVhc2UoKTsKKyAgICB9CiAgICAgVUNo
YXIqIGRhdGE7CiAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IG5ld0ltcGwgPSBjcmVhdGVVbmluaXRp
YWxpemVkKG1fbGVuZ3RoLCBkYXRhKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9s
ZW5ndGg7ICsraSkKQEAgLTI4NCwxNyArNDEwLDI0IEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4g
U3RyaW5nSW1wbDo6ZmlsbCgKIAogUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpm
b2xkQ2FzZSgpCiB7Ci0gICAgVUNoYXIqIGRhdGE7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IG5l
d0ltcGwgPSBjcmVhdGVVbmluaXRpYWxpemVkKG1fbGVuZ3RoLCBkYXRhKTsKLQogICAgIGlmICht
X2xlbmd0aCA+IHN0YXRpY19jYXN0PHVuc2lnbmVkPihudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6
bWF4KCkpKQogICAgICAgICBDUkFTSCgpOwogICAgIGludDMyX3QgbGVuZ3RoID0gbV9sZW5ndGg7
CiAKKyAgICBpZiAoaXM4Qml0KCkpIHsKKyAgICAgICAgY2hhciogZGF0YTsKKyAgICAgICAgUmVm
UHRyIDxTdHJpbmdJbXBsPm5ld0ltcGwgPSBjcmVhdGVVbmluaXRpYWxpemVkKG1fbGVuZ3RoLCBk
YXRhKTsKKyAgICAgICAgZm9yIChpbnQzMl90IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspCisgICAg
ICAgICAgICBkYXRhW2ldID0gdG9BU0NJSUxvd2VyKG1fZGF0YThbaV0pOworICAgICAgICByZXR1
cm4gbmV3SW1wbC5yZWxlYXNlKCk7CisgICAgfQorCiAgICAgLy8gRG8gYSBmYXN0ZXIgbG9vcCBm
b3IgdGhlIGNhc2Ugd2hlcmUgYWxsIHRoZSBjaGFyYWN0ZXJzIGFyZSBBU0NJSS4KKyAgICBVQ2hh
ciogZGF0YTsKKyAgICBSZWZQdHI8U3RyaW5nSW1wbD4gbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlh
bGl6ZWQobV9sZW5ndGgsIGRhdGEpOwogICAgIFVDaGFyIG9yZWQgPSAwOwogICAgIGZvciAoaW50
MzJfdCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIFVDaGFyIGMgPSBtX2RhdGFb
aV07CisgICAgICAgIFVDaGFyIGMgPSBtX2RhdGExNltpXTsKICAgICAgICAgb3JlZCB8PSBjOwog
ICAgICAgICBkYXRhW2ldID0gdG9BU0NJSUxvd2VyKGMpOwogICAgIH0KQEAgLTMwMywxMSArNDM2
LDExIEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Zm9sZEMKIAogICAgIC8v
IERvIGEgc2xvd2VyIGltcGxlbWVudGF0aW9uIGZvciBjYXNlcyB0aGF0IGluY2x1ZGUgbm9uLUFT
Q0lJIGNoYXJhY3RlcnMuCiAgICAgYm9vbCBlcnJvcjsKLSAgICBpbnQzMl90IHJlYWxMZW5ndGgg
PSBVbmljb2RlOjpmb2xkQ2FzZShkYXRhLCBsZW5ndGgsIG1fZGF0YSwgbV9sZW5ndGgsICZlcnJv
cik7CisgICAgaW50MzJfdCByZWFsTGVuZ3RoID0gVW5pY29kZTo6Zm9sZENhc2UoZGF0YSwgbGVu
Z3RoLCBtX2RhdGExNiwgbV9sZW5ndGgsICZlcnJvcik7CiAgICAgaWYgKCFlcnJvciAmJiByZWFs
TGVuZ3RoID09IGxlbmd0aCkKICAgICAgICAgcmV0dXJuIG5ld0ltcGwucmVsZWFzZSgpOwogICAg
IG5ld0ltcGwgPSBjcmVhdGVVbmluaXRpYWxpemVkKHJlYWxMZW5ndGgsIGRhdGEpOwotICAgIFVu
aWNvZGU6OmZvbGRDYXNlKGRhdGEsIHJlYWxMZW5ndGgsIG1fZGF0YSwgbV9sZW5ndGgsICZlcnJv
cik7CisgICAgVW5pY29kZTo6Zm9sZENhc2UoZGF0YSwgcmVhbExlbmd0aCwgbV9kYXRhMTYsIG1f
bGVuZ3RoLCAmZXJyb3IpOwogICAgIGlmIChlcnJvcikKICAgICAgICAgcmV0dXJuIHRoaXM7CiAg
ICAgcmV0dXJuIG5ld0ltcGwucmVsZWFzZSgpOwpAQCAtMzIzLDcgKzQ1Niw3IEBAIGlubGluZSBQ
YXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGwKICAgICB1bnNpZ25lZCBlbmQgPSBtX2xl
bmd0aCAtIDE7CiAgICAgCiAgICAgLy8gc2tpcCB3aGl0ZSBzcGFjZSBmcm9tIHN0YXJ0Ci0gICAg
d2hpbGUgKHN0YXJ0IDw9IGVuZCAmJiBwcmVkaWNhdGUobV9kYXRhW3N0YXJ0XSkpCisgICAgd2hp
bGUgKHN0YXJ0IDw9IGVuZCAmJiBwcmVkaWNhdGUoaXM4Qml0KCkgPyBtX2RhdGE4W3N0YXJ0XSA6
IG1fZGF0YTE2W3N0YXJ0XSkpCiAgICAgICAgIHN0YXJ0Kys7CiAgICAgCiAgICAgLy8gb25seSB3
aGl0ZSBzcGFjZQpAQCAtMzMxLDEyICs0NjQsMTQgQEAgaW5saW5lIFBhc3NSZWZQdHI8U3RyaW5n
SW1wbD4gU3RyaW5nSW1wbAogICAgICAgICByZXR1cm4gZW1wdHkoKTsKIAogICAgIC8vIHNraXAg
d2hpdGUgc3BhY2UgZnJvbSBlbmQKLSAgICB3aGlsZSAoZW5kICYmIHByZWRpY2F0ZShtX2RhdGFb
ZW5kXSkpCisgICAgd2hpbGUgKGVuZCAmJiBwcmVkaWNhdGUoaXM4Qml0KCkgPyBtX2RhdGE4W2Vu
ZF0gOiBtX2RhdGExNltlbmRdKSkKICAgICAgICAgZW5kLS07CiAKICAgICBpZiAoIXN0YXJ0ICYm
IGVuZCA9PSBtX2xlbmd0aCAtIDEpCiAgICAgICAgIHJldHVybiB0aGlzOwotICAgIHJldHVybiBj
cmVhdGUobV9kYXRhICsgc3RhcnQsIGVuZCArIDEgLSBzdGFydCk7CisgICAgaWYgKGlzOEJpdCgp
KQorICAgICAgICByZXR1cm4gY3JlYXRlKG1fZGF0YTggKyBzdGFydCwgZW5kICsgMSAtIHN0YXJ0
KTsKKyAgICByZXR1cm4gY3JlYXRlKG1fZGF0YTE2ICsgc3RhcnQsIGVuZCArIDEgLSBzdGFydCk7
CiB9CiAKIGNsYXNzIFVDaGFyUHJlZGljYXRlIHsKQEAgLTM3MCw5ICs1MDUsMTAgQEAgUGFzc1Jl
ZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpzdHJpcAogICAgIHJldHVybiBzdHJpcE1hdGNo
ZWRDaGFyYWN0ZXJzKFVDaGFyUHJlZGljYXRlKGlzV2hpdGVTcGFjZSkpOwogfQogCisvLyBGSVhN
RTogQWRkIDgtYml0IHBhdGguIExpa2VseSByZXF1aXJlcyB0ZW1wbGF0aXplZCBTdHJpbmdCdWZm
ZXIgY2xhc3MKIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6cmVtb3ZlQ2hhcmFj
dGVycyhDaGFyYWN0ZXJNYXRjaEZ1bmN0aW9uUHRyIGZpbmRNYXRjaCkKIHsKLSAgICBjb25zdCBV
Q2hhciogZnJvbSA9IG1fZGF0YTsKKyAgICBjb25zdCBVQ2hhciogZnJvbSA9IGNoYXJhY3RlcnMo
KTsKICAgICBjb25zdCBVQ2hhciogZnJvbWVuZCA9IGZyb20gKyBtX2xlbmd0aDsKIAogICAgIC8v
IEFzc3VtZSB0aGUgY29tbW9uIGNhc2Ugd2lsbCBub3QgcmVtb3ZlIGFueSBjaGFyYWN0ZXJzCkBA
IC0zODMsMTAgKzUxOSwxMCBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnJl
bW92CiAKICAgICBTdHJpbmdCdWZmZXIgZGF0YShtX2xlbmd0aCk7CiAgICAgVUNoYXIqIHRvID0g
ZGF0YS5jaGFyYWN0ZXJzKCk7Ci0gICAgdW5zaWduZWQgb3V0YyA9IGZyb20gLSBtX2RhdGE7Cisg
ICAgdW5zaWduZWQgb3V0YyA9IGZyb20gLSBjaGFyYWN0ZXJzMTYoKTsKIAogICAgIGlmIChvdXRj
KQotICAgICAgICBtZW1jcHkodG8sIG1fZGF0YSwgb3V0YyAqIHNpemVvZihVQ2hhcikpOworICAg
ICAgICBtZW1jcHkodG8sIGNoYXJhY3RlcnMxNigpLCBvdXRjICogc2l6ZW9mKFVDaGFyKSk7CiAK
ICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICB3aGlsZSAoZnJvbSAhPSBmcm9tZW5kICYmIGZp
bmRNYXRjaCgqZnJvbSkpCkBAIC00MDIsMTIgKzUzOCwxMyBAQCBQYXNzUmVmUHRyPFN0cmluZ0lt
cGw+IFN0cmluZ0ltcGw6OnJlbW92CiAgICAgcmV0dXJuIGFkb3B0KGRhdGEpOwogfQogCisvLyBG
SVhNRTogQWRkIDgtYml0IHBhdGguIExpa2VseSByZXF1aXJlcyB0ZW1wbGF0aXplZCBTdHJpbmdC
dWZmZXIgY2xhc3MKIHRlbXBsYXRlIDxjbGFzcyBVQ2hhclByZWRpY2F0ZT4KIGlubGluZSBQYXNz
UmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnNpbXBsaWZ5TWF0Y2hlZENoYXJhY3RlcnNU
b1NwYWNlKFVDaGFyUHJlZGljYXRlIHByZWRpY2F0ZSkKIHsKICAgICBTdHJpbmdCdWZmZXIgZGF0
YShtX2xlbmd0aCk7CiAKLSAgICBjb25zdCBVQ2hhciogZnJvbSA9IG1fZGF0YTsKKyAgICBjb25z
dCBVQ2hhciogZnJvbSA9IGNoYXJhY3RlcnMxNigpOwogICAgIGNvbnN0IFVDaGFyKiBmcm9tZW5k
ID0gZnJvbSArIG1fbGVuZ3RoOwogICAgIGludCBvdXRjID0gMDsKICAgICBib29sIGNoYW5nZWRU
b1NwYWNlID0gZmFsc2U7CkBAIC00NTEsNjIgKzU4OCw2NCBAQCBQYXNzUmVmUHRyPFN0cmluZ0lt
cGw+IFN0cmluZ0ltcGw6OnNpbXBsCiAKIGludCBTdHJpbmdJbXBsOjp0b0ludFN0cmljdChib29s
KiBvaywgaW50IGJhc2UpCiB7Ci0gICAgcmV0dXJuIGNoYXJhY3RlcnNUb0ludFN0cmljdChtX2Rh
dGEsIG1fbGVuZ3RoLCBvaywgYmFzZSk7CisgICAgcmV0dXJuIGNoYXJhY3RlcnNUb0ludFN0cmlj
dChjaGFyYWN0ZXJzMTYoKSwgbV9sZW5ndGgsIG9rLCBiYXNlKTsKIH0KIAogdW5zaWduZWQgU3Ry
aW5nSW1wbDo6dG9VSW50U3RyaWN0KGJvb2wqIG9rLCBpbnQgYmFzZSkKIHsKLSAgICByZXR1cm4g
Y2hhcmFjdGVyc1RvVUludFN0cmljdChtX2RhdGEsIG1fbGVuZ3RoLCBvaywgYmFzZSk7CisgICAg
cmV0dXJuIGNoYXJhY3RlcnNUb1VJbnRTdHJpY3QoY2hhcmFjdGVyczE2KCksIG1fbGVuZ3RoLCBv
aywgYmFzZSk7CiB9CiAKIGludDY0X3QgU3RyaW5nSW1wbDo6dG9JbnQ2NFN0cmljdChib29sKiBv
aywgaW50IGJhc2UpCiB7Ci0gICAgcmV0dXJuIGNoYXJhY3RlcnNUb0ludDY0U3RyaWN0KG1fZGF0
YSwgbV9sZW5ndGgsIG9rLCBiYXNlKTsKKyAgICByZXR1cm4gY2hhcmFjdGVyc1RvSW50NjRTdHJp
Y3QoY2hhcmFjdGVyczE2KCksIG1fbGVuZ3RoLCBvaywgYmFzZSk7CisKIH0KIAogdWludDY0X3Qg
U3RyaW5nSW1wbDo6dG9VSW50NjRTdHJpY3QoYm9vbCogb2ssIGludCBiYXNlKQogewotICAgIHJl
dHVybiBjaGFyYWN0ZXJzVG9VSW50NjRTdHJpY3QobV9kYXRhLCBtX2xlbmd0aCwgb2ssIGJhc2Up
OworICAgIHJldHVybiBjaGFyYWN0ZXJzVG9VSW50NjRTdHJpY3QoY2hhcmFjdGVyczE2KCksIG1f
bGVuZ3RoLCBvaywgYmFzZSk7CiB9CiAKIGludHB0cl90IFN0cmluZ0ltcGw6OnRvSW50UHRyU3Ry
aWN0KGJvb2wqIG9rLCBpbnQgYmFzZSkKIHsKLSAgICByZXR1cm4gY2hhcmFjdGVyc1RvSW50UHRy
U3RyaWN0KG1fZGF0YSwgbV9sZW5ndGgsIG9rLCBiYXNlKTsKKyAgICByZXR1cm4gY2hhcmFjdGVy
c1RvSW50UHRyU3RyaWN0KGNoYXJhY3RlcnMxNigpLCBtX2xlbmd0aCwgb2ssIGJhc2UpOwogfQog
CiBpbnQgU3RyaW5nSW1wbDo6dG9JbnQoYm9vbCogb2spCiB7Ci0gICAgcmV0dXJuIGNoYXJhY3Rl
cnNUb0ludChtX2RhdGEsIG1fbGVuZ3RoLCBvayk7CisgICAgcmV0dXJuIGNoYXJhY3RlcnNUb0lu
dChjaGFyYWN0ZXJzMTYoKSwgbV9sZW5ndGgsIG9rKTsKIH0KIAogdW5zaWduZWQgU3RyaW5nSW1w
bDo6dG9VSW50KGJvb2wqIG9rKQogewotICAgIHJldHVybiBjaGFyYWN0ZXJzVG9VSW50KG1fZGF0
YSwgbV9sZW5ndGgsIG9rKTsKKyAgICByZXR1cm4gY2hhcmFjdGVyc1RvVUludChjaGFyYWN0ZXJz
MTYoKSwgbV9sZW5ndGgsIG9rKTsKIH0KIAogaW50NjRfdCBTdHJpbmdJbXBsOjp0b0ludDY0KGJv
b2wqIG9rKQogewotICAgIHJldHVybiBjaGFyYWN0ZXJzVG9JbnQ2NChtX2RhdGEsIG1fbGVuZ3Ro
LCBvayk7CisgICAgcmV0dXJuIGNoYXJhY3RlcnNUb0ludDY0KGNoYXJhY3RlcnMxNigpLCBtX2xl
bmd0aCwgb2spOwogfQogCiB1aW50NjRfdCBTdHJpbmdJbXBsOjp0b1VJbnQ2NChib29sKiBvaykK
IHsKLSAgICByZXR1cm4gY2hhcmFjdGVyc1RvVUludDY0KG1fZGF0YSwgbV9sZW5ndGgsIG9rKTsK
KyAgICByZXR1cm4gY2hhcmFjdGVyc1RvVUludDY0KGNoYXJhY3RlcnMxNigpLCBtX2xlbmd0aCwg
b2spOwogfQogCiBpbnRwdHJfdCBTdHJpbmdJbXBsOjp0b0ludFB0cihib29sKiBvaykKIHsKLSAg
ICByZXR1cm4gY2hhcmFjdGVyc1RvSW50UHRyKG1fZGF0YSwgbV9sZW5ndGgsIG9rKTsKKyAgICBy
ZXR1cm4gY2hhcmFjdGVyc1RvSW50UHRyKGNoYXJhY3RlcnMxNigpLCBtX2xlbmd0aCwgb2spOwor
CiB9CiAKIGRvdWJsZSBTdHJpbmdJbXBsOjp0b0RvdWJsZShib29sKiBvaywgYm9vbCogZGlkUmVh
ZE51bWJlcikKIHsKLSAgICByZXR1cm4gY2hhcmFjdGVyc1RvRG91YmxlKG1fZGF0YSwgbV9sZW5n
dGgsIG9rLCBkaWRSZWFkTnVtYmVyKTsKKyAgICByZXR1cm4gY2hhcmFjdGVyc1RvRG91YmxlKGNo
YXJhY3RlcnMxNigpLCBtX2xlbmd0aCwgb2ssIGRpZFJlYWROdW1iZXIpOwogfQogCiBmbG9hdCBT
dHJpbmdJbXBsOjp0b0Zsb2F0KGJvb2wqIG9rLCBib29sKiBkaWRSZWFkTnVtYmVyKQogewotICAg
IHJldHVybiBjaGFyYWN0ZXJzVG9GbG9hdChtX2RhdGEsIG1fbGVuZ3RoLCBvaywgZGlkUmVhZE51
bWJlcik7CisgICAgcmV0dXJuIGNoYXJhY3RlcnNUb0Zsb2F0KGNoYXJhY3RlcnMxNigpLCBtX2xl
bmd0aCwgb2ssIGRpZFJlYWROdW1iZXIpOwogfQogCiBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBV
Q2hhciogYSwgY29uc3QgY2hhciogYiwgaW50IGxlbmd0aCkKQEAgLTU2MSwxMiArNzAwLDEyIEBA
IGludCBjb2RlUG9pbnRDb21wYXJlKGNvbnN0IFN0cmluZ0ltcGwqIHMKIAogc2l6ZV90IFN0cmlu
Z0ltcGw6OmZpbmQoVUNoYXIgYywgdW5zaWduZWQgc3RhcnQpCiB7Ci0gICAgcmV0dXJuIFdURjo6
ZmluZChtX2RhdGEsIG1fbGVuZ3RoLCBjLCBzdGFydCk7CisgICAgcmV0dXJuIFdURjo6ZmluZChj
aGFyYWN0ZXJzMTYoKSwgbV9sZW5ndGgsIGMsIHN0YXJ0KTsKIH0KIAogc2l6ZV90IFN0cmluZ0lt
cGw6OmZpbmQoQ2hhcmFjdGVyTWF0Y2hGdW5jdGlvblB0ciBtYXRjaEZ1bmN0aW9uLCB1bnNpZ25l
ZCBzdGFydCkKIHsKLSAgICByZXR1cm4gV1RGOjpmaW5kKG1fZGF0YSwgbV9sZW5ndGgsIG1hdGNo
RnVuY3Rpb24sIHN0YXJ0KTsKKyAgICByZXR1cm4gV1RGOjpmaW5kKGNoYXJhY3RlcnMxNigpLCBt
X2xlbmd0aCwgbWF0Y2hGdW5jdGlvbiwgc3RhcnQpOwogfQogCiBzaXplX3QgU3RyaW5nSW1wbDo6
ZmluZChjb25zdCBjaGFyKiBtYXRjaFN0cmluZywgdW5zaWduZWQgaW5kZXgpCkBAIC01ODMsNyAr
NzIyLDcgQEAgc2l6ZV90IFN0cmluZ0ltcGw6OmZpbmQoY29uc3QgY2hhciogbWF0YwogCiAgICAg
Ly8gT3B0aW1pemF0aW9uIDE6IGZhc3QgY2FzZSBmb3Igc3RyaW5ncyBvZiBsZW5ndGggMS4KICAg
ICBpZiAobWF0Y2hMZW5ndGggPT0gMSkKLSAgICAgICAgcmV0dXJuIFdURjo6ZmluZChjaGFyYWN0
ZXJzKCksIGxlbmd0aCgpLCAqKGNvbnN0IHVuc2lnbmVkIGNoYXIqKW1hdGNoU3RyaW5nLCBpbmRl
eCk7CisgICAgICAgIHJldHVybiBXVEY6OmZpbmQoY2hhcmFjdGVyczE2KCksIGxlbmd0aCgpLCAq
KGNvbnN0IHVuc2lnbmVkIGNoYXIqKW1hdGNoU3RyaW5nLCBpbmRleCk7CiAKICAgICAvLyBDaGVj
ayBpbmRleCAmIG1hdGNoTGVuZ3RoIGFyZSBpbiByYW5nZS4KICAgICBpZiAoaW5kZXggPiBsZW5n
dGgoKSkKQEAgLTY2Miw3ICs4MDEsNyBAQCBzaXplX3QgU3RyaW5nSW1wbDo6ZmluZChTdHJpbmdJ
bXBsKiBtYXRjCiAKICAgICAvLyBPcHRpbWl6YXRpb24gMTogZmFzdCBjYXNlIGZvciBzdHJpbmdz
IG9mIGxlbmd0aCAxLgogICAgIGlmIChtYXRjaExlbmd0aCA9PSAxKQotICAgICAgICByZXR1cm4g
V1RGOjpmaW5kKGNoYXJhY3RlcnMoKSwgbGVuZ3RoKCksIG1hdGNoU3RyaW5nLT5jaGFyYWN0ZXJz
KClbMF0sIGluZGV4KTsKKyAgICAgICAgcmV0dXJuIFdURjo6ZmluZChjaGFyYWN0ZXJzMTYoKSwg
bGVuZ3RoKCksIG1hdGNoU3RyaW5nLT5jaGFyYWN0ZXJzMTYoKVswXSwgaW5kZXgpOwogCiAgICAg
Ly8gQ2hlY2sgaW5kZXggJiBtYXRjaExlbmd0aCBhcmUgaW4gcmFuZ2UuCiAgICAgaWYgKGluZGV4
ID4gbGVuZ3RoKCkpCkBAIC03MzAsNyArODY5LDcgQEAgc2l6ZV90IFN0cmluZ0ltcGw6OmZpbmRJ
Z25vcmluZ0Nhc2UoU3RyaQogCiBzaXplX3QgU3RyaW5nSW1wbDo6cmV2ZXJzZUZpbmQoVUNoYXIg
YywgdW5zaWduZWQgaW5kZXgpCiB7Ci0gICAgcmV0dXJuIFdURjo6cmV2ZXJzZUZpbmQobV9kYXRh
LCBtX2xlbmd0aCwgYywgaW5kZXgpOworICAgIHJldHVybiBXVEY6OnJldmVyc2VGaW5kKGNoYXJh
Y3RlcnMxNigpLCBtX2xlbmd0aCwgYywgaW5kZXgpOwogfQogCiBzaXplX3QgU3RyaW5nSW1wbDo6
cmV2ZXJzZUZpbmQoU3RyaW5nSW1wbCogbWF0Y2hTdHJpbmcsIHVuc2lnbmVkIGluZGV4KQpAQCAt
NzQ0LDcgKzg4Myw3IEBAIHNpemVfdCBTdHJpbmdJbXBsOjpyZXZlcnNlRmluZChTdHJpbmdJbXAK
IAogICAgIC8vIE9wdGltaXphdGlvbiAxOiBmYXN0IGNhc2UgZm9yIHN0cmluZ3Mgb2YgbGVuZ3Ro
IDEuCiAgICAgaWYgKG1hdGNoTGVuZ3RoID09IDEpCi0gICAgICAgIHJldHVybiBXVEY6OnJldmVy
c2VGaW5kKGNoYXJhY3RlcnMoKSwgbGVuZ3RoKCksIG1hdGNoU3RyaW5nLT5jaGFyYWN0ZXJzKClb
MF0sIGluZGV4KTsKKyAgICAgICAgcmV0dXJuIFdURjo6cmV2ZXJzZUZpbmQoY2hhcmFjdGVyczE2
KCksIGxlbmd0aCgpLCBtYXRjaFN0cmluZy0+Y2hhcmFjdGVycygpWzBdLCBpbmRleCk7CiAKICAg
ICAvLyBDaGVjayBpbmRleCAmIG1hdGNoTGVuZ3RoIGFyZSBpbiByYW5nZS4KICAgICBpZiAobWF0
Y2hMZW5ndGggPiBsZW5ndGgoKSkKQEAgLTgxNywxNyArOTU2LDUzIEBAIFBhc3NSZWZQdHI8U3Ry
aW5nSW1wbD4gU3RyaW5nSW1wbDo6cmVwbGEKICAgICBpZiAob2xkQyA9PSBuZXdDKQogICAgICAg
ICByZXR1cm4gdGhpczsKICAgICB1bnNpZ25lZCBpOwotICAgIGZvciAoaSA9IDA7IGkgIT0gbV9s
ZW5ndGg7ICsraSkKLSAgICAgICAgaWYgKG1fZGF0YVtpXSA9PSBvbGRDKQorICAgIGZvciAoaSA9
IDA7IGkgIT0gbV9sZW5ndGg7ICsraSkgeworICAgICAgICBVQ2hhciBjID0gaXM4Qml0KCkgPyBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihtX2RhdGE4W2ldKSA6IG1fZGF0YTE2W2ldOworICAg
ICAgICBpZiAoYyA9PSBvbGRDKQogICAgICAgICAgICAgYnJlYWs7CisgICAgfQogICAgIGlmIChp
ID09IG1fbGVuZ3RoKQogICAgICAgICByZXR1cm4gdGhpczsKIAorICAgIGlmIChpczhCaXQoKSkg
eworICAgICAgICBpZiAob2xkQyA+IDB4ZmYpIC8vIExvb2tpbmcgZm9yIGEgMTYgYml0IGNoYXIg
aW4gYW4gOCBiaXQgc3RyaW5nCisgICAgICAgICAgICByZXR1cm4gdGhpczsKKworICAgICAgICBp
ZiAobmV3QyA8PSAweGZmKSB7CisgICAgICAgICAgICBjaGFyKiBkYXRhOworICAgICAgICAgICAg
Y2hhciBvbGRDaGFyID0gc3RhdGljX2Nhc3Q8Y2hhcj4ob2xkQyk7CisgICAgICAgICAgICBjaGFy
IG5ld0NoYXIgPSBzdGF0aWNfY2FzdDxjaGFyPihuZXdDKTsKKworICAgICAgICAgICAgUmVmUHRy
PFN0cmluZ0ltcGw+IG5ld0ltcGwgPSBjcmVhdGVVbmluaXRpYWxpemVkKG1fbGVuZ3RoLCBkYXRh
KTsKKworICAgICAgICAgICAgZm9yIChpID0gMDsgaSAhPSBtX2xlbmd0aDsgKytpKSB7CisgICAg
ICAgICAgICAgICAgY2hhciBjaCA9IG1fZGF0YThbaV07CisgICAgICAgICAgICAgICAgaWYgKGNo
ID09IG9sZENoYXIpCisgICAgICAgICAgICAgICAgICAgIGNoID0gbmV3Q2hhcjsKKyAgICAgICAg
ICAgICAgICBkYXRhW2ldID0gY2g7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4g
bmV3SW1wbC5yZWxlYXNlKCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBQb3NzaWJseSBuZWVk
IHRvIHVwIGNvbnZlcnQgZnJvbSA4IHRvIDE2IGJpdAorICAgICAgICBVQ2hhciogZGF0YTsKKyAg
ICAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IG5ld0ltcGwgPSBjcmVhdGVVbmluaXRpYWxpemVkKG1f
bGVuZ3RoLCBkYXRhKTsKKworICAgICAgICBmb3IgKGkgPSAwOyBpICE9IG1fbGVuZ3RoOyArK2kp
IHsKKyAgICAgICAgICAgIFVDaGFyIGNoID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4obV9k
YXRhOFtpXSk7CisgICAgICAgICAgICBpZiAoY2ggPT0gb2xkQykKKyAgICAgICAgICAgICAgICBj
aCA9IG5ld0M7CisgICAgICAgICAgICBkYXRhW2ldID0gY2g7CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gbmV3SW1wbC5yZWxlYXNlKCk7CisgICAgfQorCiAgICAgVUNoYXIqIGRhdGE7CiAg
ICAgUmVmUHRyPFN0cmluZ0ltcGw+IG5ld0ltcGwgPSBjcmVhdGVVbmluaXRpYWxpemVkKG1fbGVu
Z3RoLCBkYXRhKTsKIAogICAgIGZvciAoaSA9IDA7IGkgIT0gbV9sZW5ndGg7ICsraSkgewotICAg
ICAgICBVQ2hhciBjaCA9IG1fZGF0YVtpXTsKKyAgICAgICAgVUNoYXIgY2ggPSBtX2RhdGExNltp
XTsKICAgICAgICAgaWYgKGNoID09IG9sZEMpCiAgICAgICAgICAgICBjaCA9IG5ld0M7CiAgICAg
ICAgIGRhdGFbaV0gPSBjaDsKQEAgLTg0MiwxOCArMTAxNyw0MyBAQCBQYXNzUmVmUHRyPFN0cmlu
Z0ltcGw+IFN0cmluZ0ltcGw6OnJlcGxhCiAgICAgdW5zaWduZWQgbGVuZ3RoVG9JbnNlcnQgPSBz
dHIgPyBzdHItPmxlbmd0aCgpIDogMDsKICAgICBpZiAoIWxlbmd0aFRvUmVwbGFjZSAmJiAhbGVu
Z3RoVG9JbnNlcnQpCiAgICAgICAgIHJldHVybiB0aGlzOwotICAgIFVDaGFyKiBkYXRhOwogCiAg
ICAgaWYgKChsZW5ndGgoKSAtIGxlbmd0aFRvUmVwbGFjZSkgPj0gKG51bWVyaWNfbGltaXRzPHVu
c2lnbmVkPjo6bWF4KCkgLSBsZW5ndGhUb0luc2VydCkpCiAgICAgICAgIENSQVNIKCk7CiAKKyAg
ICBpZiAoaXM4Qml0KCkgJiYgKCFzdHIgfHwgc3RyLT5pczhCaXQoKSkpIHsKKyAgICAgICAgY2hh
ciogZGF0YTsKKyAgICAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IG5ld0ltcGwgPQorICAgICAgICBj
cmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCgpIC0gbGVuZ3RoVG9SZXBsYWNlICsgbGVuZ3RoVG9J
bnNlcnQsIGRhdGEpOworICAgICAgICBtZW1jcHkoZGF0YSwgbV9kYXRhOCwgcG9zaXRpb24gKiBz
aXplb2YoY2hhcikpOworICAgICAgICBpZiAoc3RyKQorICAgICAgICAgICAgbWVtY3B5KGRhdGEg
KyBwb3NpdGlvbiwgc3RyLT5tX2RhdGE4LCBsZW5ndGhUb0luc2VydCAqIHNpemVvZihjaGFyKSk7
CisgICAgICAgIG1lbWNweShkYXRhICsgcG9zaXRpb24gKyBsZW5ndGhUb0luc2VydCwgbV9kYXRh
OCArIHBvc2l0aW9uICsgbGVuZ3RoVG9SZXBsYWNlLAorICAgICAgICAgICAgICAgKGxlbmd0aCgp
IC0gcG9zaXRpb24gLSBsZW5ndGhUb1JlcGxhY2UpICogc2l6ZW9mKGNoYXIpKTsKKyAgICAgICAg
cmV0dXJuIG5ld0ltcGwucmVsZWFzZSgpOworICAgIH0KKyAgICBVQ2hhciogZGF0YTsKICAgICBS
ZWZQdHI8U3RyaW5nSW1wbD4gbmV3SW1wbCA9CiAgICAgICAgIGNyZWF0ZVVuaW5pdGlhbGl6ZWQo
bGVuZ3RoKCkgLSBsZW5ndGhUb1JlcGxhY2UgKyBsZW5ndGhUb0luc2VydCwgZGF0YSk7Ci0gICAg
bWVtY3B5KGRhdGEsIGNoYXJhY3RlcnMoKSwgcG9zaXRpb24gKiBzaXplb2YoVUNoYXIpKTsKLSAg
ICBpZiAoc3RyKQotICAgICAgICBtZW1jcHkoZGF0YSArIHBvc2l0aW9uLCBzdHItPmNoYXJhY3Rl
cnMoKSwgbGVuZ3RoVG9JbnNlcnQgKiBzaXplb2YoVUNoYXIpKTsKLSAgICBtZW1jcHkoZGF0YSAr
IHBvc2l0aW9uICsgbGVuZ3RoVG9JbnNlcnQsIGNoYXJhY3RlcnMoKSArIHBvc2l0aW9uICsgbGVu
Z3RoVG9SZXBsYWNlLAotICAgICAgICAobGVuZ3RoKCkgLSBwb3NpdGlvbiAtIGxlbmd0aFRvUmVw
bGFjZSkgKiBzaXplb2YoVUNoYXIpKTsKKyAgICBpZiAoaXM4Qml0KCkpCisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBwb3NpdGlvbjsgaSsrKQorICAgICAgICAgICAgZGF0YVtpXSA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KG1fZGF0YThbaV0pOworICAgIGVsc2UKKyAgICAg
ICAgbWVtY3B5KGRhdGEsIG1fZGF0YTE2LCBwb3NpdGlvbiAqIHNpemVvZihVQ2hhcikpOworICAg
IGlmIChzdHIpIHsKKyAgICAgICAgaWYgKHN0ci0+aXM4Qml0KCkpCisgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoVG9JbnNlcnQ7IGkrKykKKyAgICAgICAgICAgICAg
ICBkYXRhW2kgKyBwb3NpdGlvbl0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihzdHItPm1f
ZGF0YThbaV0pOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtZW1jcHkoZGF0YSArIHBvc2l0
aW9uLCBzdHItPm1fZGF0YTE2LCBsZW5ndGhUb0luc2VydCAqIHNpemVvZihVQ2hhcikpOworICAg
IH0KKyAgICBpZiAoaXM4Qml0KCkpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGxlbmd0aCgpIC0gcG9zaXRpb24gLSBsZW5ndGhUb1JlcGxhY2U7IGkrKykKKyAgICAgICAgICAg
IGRhdGFbaSArIHBvc2l0aW9uICsgbGVuZ3RoVG9JbnNlcnRdID0gbV9kYXRhOFtpICsgcG9zaXRp
b24gKyBsZW5ndGhUb1JlcGxhY2VdOworICAgIH0gZWxzZSB7CisgICAgICAgIG1lbWNweShkYXRh
ICsgcG9zaXRpb24gKyBsZW5ndGhUb0luc2VydCwgY2hhcmFjdGVycygpICsgcG9zaXRpb24gKyBs
ZW5ndGhUb1JlcGxhY2UsCisgICAgICAgICAgICAobGVuZ3RoKCkgLSBwb3NpdGlvbiAtIGxlbmd0
aFRvUmVwbGFjZSkgKiBzaXplb2YoVUNoYXIpKTsKKyAgICB9CiAgICAgcmV0dXJuIG5ld0ltcGwu
cmVsZWFzZSgpOwogfQogCkBAIC04ODYsMjYgKzEwODYsNjQgQEAgUGFzc1JlZlB0cjxTdHJpbmdJ
bXBsPiBTdHJpbmdJbXBsOjpyZXBsYQogCiAgICAgbmV3U2l6ZSArPSByZXBsYWNlU2l6ZTsKIAot
ICAgIFVDaGFyKiBkYXRhOwotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0gY3JlYXRl
VW5pbml0aWFsaXplZChuZXdTaXplLCBkYXRhKTsKLQogICAgIC8vIENvbnN0cnVjdCB0aGUgbmV3
IGRhdGEKICAgICBzaXplX3Qgc3JjU2VnbWVudEVuZDsKICAgICB1bnNpZ25lZCBzcmNTZWdtZW50
TGVuZ3RoOwogICAgIHNyY1NlZ21lbnRTdGFydCA9IDA7CiAgICAgdW5zaWduZWQgZHN0T2Zmc2V0
ID0gMDsKICAgICAKKyAgICAvLyBUaGVyZSBhcmUgNCBjYXNlczoKKyAgICAvLyAxLiB0aGlzIGFu
ZCByZXBsYWNlbWVudCBhcmUgYm90aCAxNiBiaXQKKyAgICAvLyAyLiB0aGlzIGFuZCByZXBsYWNl
bWVudCBhcmUgYm90aCA4IGJpdAorICAgIC8vIDMuIHRoaXMgaXMgOCBiaXQgYW5kIHJlcGxhY2Vt
ZW50IGlzIDE2IGJpdAorICAgIC8vIDQuIHRoaXMgaXMgMTYgYml0IGFuZCByZXBsYWNlbWVudCBp
cyA4IGJpdAorICAgIC8vIFBsdXMgdGhlcmUgaXMgdmVyeSBzaW1pbGFyIGNvZGUgaW4gdGhlIHBh
dHRlcm4gcmVwbGFjZW1lbnQgZnVuY3Rpb24gYmVsb3cuCisgICAgaWYgKGlzOEJpdCgpICYmIHJl
cGxhY2VtZW50LT5pczhCaXQoKSkgeworICAgICAgICBjaGFyKiBkYXRhOworICAgICAgICBSZWZQ
dHI8U3RyaW5nSW1wbD4gbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQobmV3U2l6ZSwgZGF0
YSk7CisKKyAgICAgICAgd2hpbGUgKChzcmNTZWdtZW50RW5kID0gZmluZChwYXR0ZXJuLCBzcmNT
ZWdtZW50U3RhcnQpKSAhPSBub3RGb3VuZCkgeworICAgICAgICAgICAgc3JjU2VnbWVudExlbmd0
aCA9IHNyY1NlZ21lbnRFbmQgLSBzcmNTZWdtZW50U3RhcnQ7CisgICAgICAgICAgICBtZW1jcHko
ZGF0YSArIGRzdE9mZnNldCwgbV9kYXRhOCArIHNyY1NlZ21lbnRTdGFydCwgc3JjU2VnbWVudExl
bmd0aCAqIHNpemVvZihjaGFyKSk7CisgICAgICAgICAgICBkc3RPZmZzZXQgKz0gc3JjU2VnbWVu
dExlbmd0aDsKKyAgICAgICAgICAgIG1lbWNweShkYXRhICsgZHN0T2Zmc2V0LCByZXBsYWNlbWVu
dC0+bV9kYXRhOCwgcmVwU3RyTGVuZ3RoICogc2l6ZW9mKGNoYXIpKTsKKyAgICAgICAgICAgIGRz
dE9mZnNldCArPSByZXBTdHJMZW5ndGg7CisgICAgICAgICAgICBzcmNTZWdtZW50U3RhcnQgPSBz
cmNTZWdtZW50RW5kICsgMTsKKyAgICAgICAgfQorCisgICAgICAgIHNyY1NlZ21lbnRMZW5ndGgg
PSBtX2xlbmd0aCAtIHNyY1NlZ21lbnRTdGFydDsKKyAgICAgICAgbWVtY3B5KGRhdGEgKyBkc3RP
ZmZzZXQsIG1fZGF0YTggKyBzcmNTZWdtZW50U3RhcnQsIHNyY1NlZ21lbnRMZW5ndGggKiBzaXpl
b2YoY2hhcikpOworCisgICAgICAgIEFTU0VSVChkc3RPZmZzZXQgKyBzcmNTZWdtZW50TGVuZ3Ro
ID09IG5ld0ltcGwtPmxlbmd0aCgpKTsKKworICAgICAgICByZXR1cm4gbmV3SW1wbC5yZWxlYXNl
KCk7CisgICAgfQorICAgIFVDaGFyKiBkYXRhOworICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBuZXdJ
bXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChuZXdTaXplLCBkYXRhKTsKKwogICAgIHdoaWxlICgo
c3JjU2VnbWVudEVuZCA9IGZpbmQocGF0dGVybiwgc3JjU2VnbWVudFN0YXJ0KSkgIT0gbm90Rm91
bmQpIHsKICAgICAgICAgc3JjU2VnbWVudExlbmd0aCA9IHNyY1NlZ21lbnRFbmQgLSBzcmNTZWdt
ZW50U3RhcnQ7Ci0gICAgICAgIG1lbWNweShkYXRhICsgZHN0T2Zmc2V0LCBtX2RhdGEgKyBzcmNT
ZWdtZW50U3RhcnQsIHNyY1NlZ21lbnRMZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKKyAgICAgICAg
aWYgKGlzOEJpdCgpKQorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNyY1Nl
Z21lbnRMZW5ndGg7IGkrKykKKyAgICAgICAgICAgICAgICBkYXRhW2kgKyBkc3RPZmZzZXRdID0g
bV9kYXRhOFtpICsgc3JjU2VnbWVudFN0YXJ0XTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
bWVtY3B5KGRhdGEgKyBkc3RPZmZzZXQsIG1fZGF0YTE2ICsgc3JjU2VnbWVudFN0YXJ0LCBzcmNT
ZWdtZW50TGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CiAgICAgICAgIGRzdE9mZnNldCArPSBzcmNT
ZWdtZW50TGVuZ3RoOwotICAgICAgICBtZW1jcHkoZGF0YSArIGRzdE9mZnNldCwgcmVwbGFjZW1l
bnQtPm1fZGF0YSwgcmVwU3RyTGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CisgICAgICAgIGlmIChy
ZXBsYWNlbWVudC0+aXM4Qml0KCkpCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgcmVwU3RyTGVuZ3RoOyBpKyspCisgICAgICAgICAgICAgICAgZGF0YVtpICsgZHN0T2Zmc2V0
XSA9IHJlcGxhY2VtZW50LT5tX2RhdGE4W2ldOworICAgICAgICBlbHNlCisgICAgICAgICAgICBt
ZW1jcHkoZGF0YSArIGRzdE9mZnNldCwgcmVwbGFjZW1lbnQtPm1fZGF0YTE2LCByZXBTdHJMZW5n
dGggKiBzaXplb2YoVUNoYXIpKTsKICAgICAgICAgZHN0T2Zmc2V0ICs9IHJlcFN0ckxlbmd0aDsK
ICAgICAgICAgc3JjU2VnbWVudFN0YXJ0ID0gc3JjU2VnbWVudEVuZCArIDE7CiAgICAgfQogCiAg
ICAgc3JjU2VnbWVudExlbmd0aCA9IG1fbGVuZ3RoIC0gc3JjU2VnbWVudFN0YXJ0OwotICAgIG1l
bWNweShkYXRhICsgZHN0T2Zmc2V0LCBtX2RhdGEgKyBzcmNTZWdtZW50U3RhcnQsIHNyY1NlZ21l
bnRMZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKKyAgICBpZiAoaXM4Qml0KCkpCisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBzcmNTZWdtZW50TGVuZ3RoOyBpKyspCisgICAgICAgICAg
ICBkYXRhW2kgKyBkc3RPZmZzZXRdID0gbV9kYXRhOFtpICsgc3JjU2VnbWVudFN0YXJ0XTsKKyAg
ICBlbHNlCisgICAgICAgIG1lbWNweShkYXRhICsgZHN0T2Zmc2V0LCBtX2RhdGExNiArIHNyY1Nl
Z21lbnRTdGFydCwgc3JjU2VnbWVudExlbmd0aCAqIHNpemVvZihVQ2hhcikpOwogCiAgICAgQVNT
RVJUKGRzdE9mZnNldCArIHNyY1NlZ21lbnRMZW5ndGggPT0gbmV3SW1wbC0+bGVuZ3RoKCkpOwog
CkBAIC05NDQsOCArMTE4Miw2IEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6
cmVwbGEKIAogICAgIG5ld1NpemUgKz0gbWF0Y2hDb3VudCAqIHJlcFN0ckxlbmd0aDsKIAotICAg
IFVDaGFyKiBkYXRhOwotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0gY3JlYXRlVW5p
bml0aWFsaXplZChuZXdTaXplLCBkYXRhKTsKICAgICAKICAgICAvLyBDb25zdHJ1Y3QgdGhlIG5l
dyBkYXRhCiAgICAgc2l6ZV90IHNyY1NlZ21lbnRFbmQ7CkBAIC05NTMsMTcgKzExODksNTYgQEAg
UGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpyZXBsYQogICAgIHNyY1NlZ21lbnRT
dGFydCA9IDA7CiAgICAgdW5zaWduZWQgZHN0T2Zmc2V0ID0gMDsKICAgICAKKyAgICAvLyBUaGVy
ZSBhcmUgNCBjYXNlczoKKyAgICAvLyAxLiB0aGlzIGFuZCByZXBsYWNlbWVudCBhcmUgYm90aCAx
NiBiaXQKKyAgICAvLyAyLiB0aGlzIGFuZCByZXBsYWNlbWVudCBhcmUgYm90aCA4IGJpdAorICAg
IC8vIDMuIHRoaXMgaXMgOCBiaXQgYW5kIHJlcGxhY2VtZW50IGlzIDE2IGJpdAorICAgIC8vIDQu
IHRoaXMgaXMgMTYgYml0IGFuZCByZXBsYWNlbWVudCBpcyA4IGJpdAorICAgIC8vIFBsdXMgdGhl
cmUgaXMgdmVyeSBzaW1pbGFyIGNvZGUgaW4gdGhlIHNpbmdsZS1jaGFyIHJlcGxhY2VtZW50IGZ1
bmN0aW9uIGFib3ZlLgorICAgIGlmIChpczhCaXQoKSAmJiByZXBsYWNlbWVudC0+aXM4Qml0KCkp
IHsKKyAgICAgICAgY2hhciogZGF0YTsKKyAgICAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IG5ld0lt
cGwgPSBjcmVhdGVVbmluaXRpYWxpemVkKG5ld1NpemUsIGRhdGEpOworICAgICAgICB3aGlsZSAo
KHNyY1NlZ21lbnRFbmQgPSBmaW5kKHBhdHRlcm4sIHNyY1NlZ21lbnRTdGFydCkpICE9IG5vdEZv
dW5kKSB7CisgICAgICAgICAgICBzcmNTZWdtZW50TGVuZ3RoID0gc3JjU2VnbWVudEVuZCAtIHNy
Y1NlZ21lbnRTdGFydDsKKyAgICAgICAgICAgIG1lbWNweShkYXRhICsgZHN0T2Zmc2V0LCBtX2Rh
dGE4ICsgc3JjU2VnbWVudFN0YXJ0LCBzcmNTZWdtZW50TGVuZ3RoICogc2l6ZW9mKGNoYXIpKTsK
KyAgICAgICAgICAgIGRzdE9mZnNldCArPSBzcmNTZWdtZW50TGVuZ3RoOworICAgICAgICAgICAg
bWVtY3B5KGRhdGEgKyBkc3RPZmZzZXQsIHJlcGxhY2VtZW50LT5tX2RhdGE4LCByZXBTdHJMZW5n
dGggKiBzaXplb2YoY2hhcikpOworICAgICAgICAgICAgZHN0T2Zmc2V0ICs9IHJlcFN0ckxlbmd0
aDsKKyAgICAgICAgICAgIHNyY1NlZ21lbnRTdGFydCA9IHNyY1NlZ21lbnRFbmQgKyBwYXR0ZXJu
TGVuZ3RoOworICAgICAgICB9CisKKyAgICAgICAgc3JjU2VnbWVudExlbmd0aCA9IG1fbGVuZ3Ro
IC0gc3JjU2VnbWVudFN0YXJ0OworICAgICAgICBtZW1jcHkoZGF0YSArIGRzdE9mZnNldCwgbV9k
YXRhOCArIHNyY1NlZ21lbnRTdGFydCwgc3JjU2VnbWVudExlbmd0aCAqIHNpemVvZihjaGFyKSk7
CisKKyAgICAgICAgQVNTRVJUKGRzdE9mZnNldCArIHNyY1NlZ21lbnRMZW5ndGggPT0gbmV3SW1w
bC0+bGVuZ3RoKCkpOworCisgICAgICAgIHJldHVybiBuZXdJbXBsLnJlbGVhc2UoKTsKKyAgICB9
CisgICAgVUNoYXIqIGRhdGE7CisgICAgUmVmUHRyPFN0cmluZ0ltcGw+IG5ld0ltcGwgPSBjcmVh
dGVVbmluaXRpYWxpemVkKG5ld1NpemUsIGRhdGEpOwogICAgIHdoaWxlICgoc3JjU2VnbWVudEVu
ZCA9IGZpbmQocGF0dGVybiwgc3JjU2VnbWVudFN0YXJ0KSkgIT0gbm90Rm91bmQpIHsKICAgICAg
ICAgc3JjU2VnbWVudExlbmd0aCA9IHNyY1NlZ21lbnRFbmQgLSBzcmNTZWdtZW50U3RhcnQ7Ci0g
ICAgICAgIG1lbWNweShkYXRhICsgZHN0T2Zmc2V0LCBtX2RhdGEgKyBzcmNTZWdtZW50U3RhcnQs
IHNyY1NlZ21lbnRMZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKKyAgICAgICAgaWYgKGlzOEJpdCgp
KQorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNyY1NlZ21lbnRMZW5ndGg7
IGkrKykKKyAgICAgICAgICAgICAgICBkYXRhW2kgKyBkc3RPZmZzZXRdID0gbV9kYXRhOFtpICsg
c3JjU2VnbWVudFN0YXJ0XTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbWVtY3B5KGRhdGEg
KyBkc3RPZmZzZXQsIG1fZGF0YTE2ICsgc3JjU2VnbWVudFN0YXJ0LCBzcmNTZWdtZW50TGVuZ3Ro
ICogc2l6ZW9mKFVDaGFyKSk7CiAgICAgICAgIGRzdE9mZnNldCArPSBzcmNTZWdtZW50TGVuZ3Ro
OwotICAgICAgICBtZW1jcHkoZGF0YSArIGRzdE9mZnNldCwgcmVwbGFjZW1lbnQtPm1fZGF0YSwg
cmVwU3RyTGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CisgICAgICAgIGlmIChyZXBsYWNlbWVudC0+
aXM4Qml0KCkpCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVwU3RyTGVu
Z3RoOyBpKyspCisgICAgICAgICAgICAgICAgZGF0YVtpICsgZHN0T2Zmc2V0XSA9IHJlcGxhY2Vt
ZW50LT5tX2RhdGE4W2ldOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtZW1jcHkoZGF0YSAr
IGRzdE9mZnNldCwgcmVwbGFjZW1lbnQtPm1fZGF0YTE2LCByZXBTdHJMZW5ndGggKiBzaXplb2Yo
VUNoYXIpKTsKICAgICAgICAgZHN0T2Zmc2V0ICs9IHJlcFN0ckxlbmd0aDsKICAgICAgICAgc3Jj
U2VnbWVudFN0YXJ0ID0gc3JjU2VnbWVudEVuZCArIHBhdHRlcm5MZW5ndGg7CiAgICAgfQogCiAg
ICAgc3JjU2VnbWVudExlbmd0aCA9IG1fbGVuZ3RoIC0gc3JjU2VnbWVudFN0YXJ0OwotICAgIG1l
bWNweShkYXRhICsgZHN0T2Zmc2V0LCBtX2RhdGEgKyBzcmNTZWdtZW50U3RhcnQsIHNyY1NlZ21l
bnRMZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKKyAgICBpZiAoaXM4Qml0KCkpCisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBzcmNTZWdtZW50TGVuZ3RoOyBpKyspCisgICAgICAgICAg
ICBkYXRhW2kgKyBkc3RPZmZzZXRdID0gbV9kYXRhOFtpICsgc3JjU2VnbWVudFN0YXJ0XTsKKyAg
ICBlbHNlCisgICAgICAgIG1lbWNweShkYXRhICsgZHN0T2Zmc2V0LCBtX2RhdGExNiArIHNyY1Nl
Z21lbnRTdGFydCwgc3JjU2VnbWVudExlbmd0aCAqIHNpemVvZihVQ2hhcikpOwogCiAgICAgQVNT
RVJUKGRzdE9mZnNldCArIHNyY1NlZ21lbnRMZW5ndGggPT0gbmV3SW1wbC0+bGVuZ3RoKCkpOwog
CkBAIC05NzUsNiArMTI1MCw0NSBAQCBib29sIGVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqIGEsIGNv
bnN0IFN0CiAgICAgcmV0dXJuIFN0cmluZ0hhc2g6OmVxdWFsKGEsIGIpOwogfQogCitib29sIGVx
dWFsKGNvbnN0IFN0cmluZ0ltcGwqIGEsIGNvbnN0IGNoYXIqIGIsIHVuc2lnbmVkIGxlbmd0aCkK
K3sKKyAgICBpZiAoIWEpCisgICAgICAgIHJldHVybiAhYjsKKyAgICBpZiAoIWIpCisgICAgICAg
IHJldHVybiAhYTsKKworICAgIGlmIChsZW5ndGggIT0gYS0+bGVuZ3RoKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGlmIChhLT5pczhCaXQoKSkgeworICAgICAgICBjb25zdCBjaGFy
KiBhQ2hhcnMgPSBhLT5jaGFyYWN0ZXJzOCgpOworCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgIT0gbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYmMgPSBi
W2ldOworICAgICAgICAgICAgdW5zaWduZWQgY2hhciBhYyA9IGFDaGFyc1tpXTsKKyAgICAgICAg
ICAgIGlmICghYmMpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
aWYgKGFjICE9IGJjKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGNvbnN0IFVDaGFyKiBhQ2hhcnMg
PSBhLT5jaGFyYWN0ZXJzMTYoKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgIT0gbGVu
Z3RoOyArK2kpIHsKKyAgICAgICAgVUNoYXIgYmMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFy
PihiW2ldKTsKKyAgICAgICAgVUNoYXIgYWMgPSBhQ2hhcnNbaV07CisgICAgICAgIGlmICghYmMp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChhYyAhPSBiYykKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogYm9v
bCBlcXVhbChjb25zdCBTdHJpbmdJbXBsKiBhLCBjb25zdCBjaGFyKiBiKQogewogICAgIGlmICgh
YSkKQEAgLTk4MywxMiArMTI5NywyNyBAQCBib29sIGVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqIGEs
IGNvbnN0IGNoCiAgICAgICAgIHJldHVybiAhYTsKIAogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGEt
Pmxlbmd0aCgpOwotICAgIGNvbnN0IFVDaGFyKiBhcyA9IGEtPmNoYXJhY3RlcnMoKTsKKworICAg
IGlmIChhLT5pczhCaXQoKSkgeworICAgICAgICBjb25zdCBjaGFyKiBhUHRyID0gYS0+Y2hhcmFj
dGVyczgoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSAhPSBsZW5ndGg7ICsraSkg
eworICAgICAgICAgICAgdW5zaWduZWQgY2hhciBiYyA9IGJbaV07CisgICAgICAgICAgICB1bnNp
Z25lZCBjaGFyIGFjID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oYVB0cltpXSk7CisgICAg
ICAgICAgICBpZiAoIWJjKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIGlmIChhYyAhPSBiYykKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKworICAgICAgICByZXR1cm4gIWJbbGVuZ3RoXTsKKyAgICB9CisKKyAgICBjb25zdCBVQ2hh
ciogYVB0ciA9IGEtPmNoYXJhY3RlcnMxNigpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
IT0gbGVuZ3RoOyArK2kpIHsKICAgICAgICAgdW5zaWduZWQgY2hhciBiYyA9IGJbaV07CiAgICAg
ICAgIGlmICghYmMpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChhc1tp
XSAhPSBiYykKKyAgICAgICAgaWYgKGFQdHJbaV0gIT0gYmMpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogCkBAIC0xMDEzLDIwICsxMzQyLDI4IEBAIGJvb2wgZXF1YWwoY29uc3Qg
U3RyaW5nSW1wbCogYSwgY29uc3QgVUMKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBy
ZXR1cm4gdHJ1ZTsKICNlbHNlCisgICAgaWYgKGEtPmlzOEJpdCgpKSB7CisgICAgICAgIGNvbnN0
IGNoYXIqIGFzID0gYS0+Y2hhcmFjdGVyczgoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSAhPSBsZW5ndGg7ICsraSkKKyAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBjaGFyPihhc1tpXSkgIT0gYltpXSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwogICAgIC8qIERvIGl0IDQtYnl0ZXMtYXQtYS10
aW1lIG9uIGFyY2hpdGVjdHVyZXMgd2hlcmUgaXQncyBzYWZlICovCi0gICAgCi0gICAgY29uc3Qg
dWludDMyX3QqIGFDaGFyYWN0ZXJzID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+
KGEtPmNoYXJhY3RlcnMoKSk7CisKKyAgICBjb25zdCB1aW50MzJfdCogYUNoYXJhY3RlcnMgPSBy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oYS0+Y2hhcmFjdGVyczE2KCkpOwogICAg
IGNvbnN0IHVpbnQzMl90KiBiQ2hhcmFjdGVycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWlu
dDMyX3QqPihiKTsKLSAgICAKKwogICAgIHVuc2lnbmVkIGhhbGZMZW5ndGggPSBsZW5ndGggPj4g
MTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpICE9IGhhbGZMZW5ndGg7ICsraSkgewogICAg
ICAgICBpZiAoKmFDaGFyYWN0ZXJzKysgIT0gKmJDaGFyYWN0ZXJzKyspCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAorCiAgICAgaWYgKGxlbmd0aCAmIDEgJiYgICpyZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVpbnQxNl90Kj4oYUNoYXJhY3RlcnMpICE9ICpyZWludGVycHJl
dF9jYXN0PGNvbnN0IHVpbnQxNl90Kj4oYkNoYXJhY3RlcnMpKQogICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgCisKICAgICByZXR1cm4gdHJ1ZTsKICNlbmRpZgogfQpAQCAtMTA0NCw3ICsxMzgx
LDYgQEAgYm9vbCBlcXVhbElnbm9yaW5nQ2FzZShTdHJpbmdJbXBsKiBhLCBjbwogICAgICAgICBy
ZXR1cm4gIWE7CiAKICAgICB1bnNpZ25lZCBsZW5ndGggPSBhLT5sZW5ndGgoKTsKLSAgICBjb25z
dCBVQ2hhciogYXMgPSBhLT5jaGFyYWN0ZXJzKCk7CiAKICAgICAvLyBEbyBhIGZhc3RlciBsb29w
IGZvciB0aGUgY2FzZSB3aGVyZSBhbGwgdGhlIGNoYXJhY3RlcnMgYXJlIEFTQ0lJLgogICAgIFVD
aGFyIG9yZWQgPSAwOwpAQCAtMTA1MywxMyArMTM4OSwxNCBAQCBib29sIGVxdWFsSWdub3JpbmdD
YXNlKFN0cmluZ0ltcGwqIGEsIGNvCiAgICAgICAgIGNoYXIgYmMgPSBiW2ldOwogICAgICAgICBp
ZiAoIWJjKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBVQ2hhciBhYyA9IGFz
W2ldOworICAgICAgICBVQ2hhciBhYyA9IGEtPmlzOEJpdCgpID8gYS0+Y2hhcmFjdGVyczgoKVtp
XSA6IGEtPmNoYXJhY3RlcnMxNigpW2ldOwogICAgICAgICBvcmVkIHw9IGFjOwogICAgICAgICBl
cXVhbCA9IGVxdWFsICYmICh0b0FTQ0lJTG93ZXIoYWMpID09IHRvQVNDSUlMb3dlcihiYykpOwog
ICAgIH0KIAogICAgIC8vIERvIGEgc2xvd2VyIGltcGxlbWVudGF0aW9uIGZvciBjYXNlcyB0aGF0
IGluY2x1ZGUgbm9uLUFTQ0lJIGNoYXJhY3RlcnMuCiAgICAgaWYgKG9yZWQgJiB+MHg3Rikgewor
ICAgICAgICBjb25zdCBVQ2hhciogYXMgPSBhLT5jaGFyYWN0ZXJzMTYoKTsKICAgICAgICAgZXF1
YWwgPSB0cnVlOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpICE9IGxlbmd0aDsgKytp
KSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGJjID0gYltpXTsKQEAgLTEwODUsNyArMTQy
Miw3IEBAIGJvb2wgZXF1YWxJZ25vcmluZ051bGxpdHkoU3RyaW5nSW1wbCogYSwKIFdURjo6VW5p
Y29kZTo6RGlyZWN0aW9uIFN0cmluZ0ltcGw6OmRlZmF1bHRXcml0aW5nRGlyZWN0aW9uKGJvb2wq
IGhhc1N0cm9uZ0RpcmVjdGlvbmFsaXR5KQogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX2xlbmd0aDsgKytpKSB7Ci0gICAgICAgIFdURjo6VW5pY29kZTo6RGlyZWN0aW9uIGNoYXJE
aXJlY3Rpb24gPSBXVEY6OlVuaWNvZGU6OmRpcmVjdGlvbihtX2RhdGFbaV0pOworICAgICAgICBX
VEY6OlVuaWNvZGU6OkRpcmVjdGlvbiBjaGFyRGlyZWN0aW9uID0gV1RGOjpVbmljb2RlOjpkaXJl
Y3Rpb24oaXM4Qml0KCkgPyBtX2RhdGE4W2ldIDogbV9kYXRhMTZbaV0pOwogICAgICAgICBpZiAo
Y2hhckRpcmVjdGlvbiA9PSBXVEY6OlVuaWNvZGU6OkxlZnRUb1JpZ2h0KSB7CiAgICAgICAgICAg
ICBpZiAoaGFzU3Ryb25nRGlyZWN0aW9uYWxpdHkpCiAgICAgICAgICAgICAgICAgKmhhc1N0cm9u
Z0RpcmVjdGlvbmFsaXR5ID0gdHJ1ZTsKQEAgLTExMDUsNiArMTQ0Miw3IEBAIFdURjo6VW5pY29k
ZTo6RGlyZWN0aW9uIFN0cmluZ0ltcGw6OmRlZmEKIC8vIFRoaXMgaXMgYSBob3QgZnVuY3Rpb24g
YmVjYXVzZSBpdCdzIHVzZWQgd2hlbiBwYXJzaW5nIEhUTUwuCiBQYXNzUmVmUHRyPFN0cmluZ0lt
cGw+IFN0cmluZ0ltcGw6OmNyZWF0ZVN0cmlwcGluZ051bGxDaGFyYWN0ZXJzU2xvd0Nhc2UoY29u
c3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKIHsKKyAgICAvLyBGSVhNRTog
U2hvdWxkIFN0cmluZ0J1ZmZlciBzdXBwb3J0IDgtYml0IHN0cmluZ3MsIG1heWJlIHRlbXBsYXRl
PwogICAgIFN0cmluZ0J1ZmZlciBzdHJpcHBlZENvcHkobGVuZ3RoKTsKICAgICB1bnNpZ25lZCBz
dHJpcHBlZExlbmd0aCA9IDA7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsg
aSsrKSB7CkBAIC0xMTE4LDYgKzE0NTYsNyBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmlu
Z0ltcGw6OmNyZWF0CiAKIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6YWRvcHQo
U3RyaW5nQnVmZmVyJiBidWZmZXIpCiB7CisgICAgLy8gRklYTUU6IGhhbmRsZSA4LWJpdCBTdHJp
bmdCdWZmZXIgd2hlbiBpdCBleGlzdHMuCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gYnVmZmVyLmxl
bmd0aCgpOwogICAgIGlmIChsZW5ndGggPT0gMCkKICAgICAgICAgcmV0dXJuIGVtcHR5KCk7CkBA
IC0xMTI4LDEzICsxNDY3LDIxIEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6
Y3JlYXQKIHsKICAgICAvLyBVc2UgY3JlYXRlVW5pbml0aWFsaXplZCBpbnN0ZWFkIG9mICduZXcg
U3RyaW5nSW1wbCcgc28gdGhhdCB0aGUgc3RyaW5nIGFuZCBpdHMgYnVmZmVyCiAgICAgLy8gZ2V0
IGFsbG9jYXRlZCBpbiBhIHNpbmdsZSBtZW1vcnkgYmxvY2suCi0gICAgVUNoYXIqIGRhdGE7CiAg
ICAgdW5zaWduZWQgbGVuZ3RoID0gc3RyaW5nLm1fbGVuZ3RoOwogICAgIGlmIChsZW5ndGggPj0g
bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKICAgICAgICAgQ1JBU0goKTsKLSAgICBS
ZWZQdHI8U3RyaW5nSW1wbD4gdGVybWluYXRlZFN0cmluZyA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQo
bGVuZ3RoICsgMSwgZGF0YSk7Ci0gICAgbWVtY3B5KGRhdGEsIHN0cmluZy5tX2RhdGEsIGxlbmd0
aCAqIHNpemVvZihVQ2hhcikpOwotICAgIGRhdGFbbGVuZ3RoXSA9IDA7CisgICAgUmVmUHRyPFN0
cmluZ0ltcGw+IHRlcm1pbmF0ZWRTdHJpbmc7CisgICAgaWYgKHN0cmluZy5pczhCaXQoKSkgewor
ICAgICAgICBjaGFyKiBkYXRhOworICAgICAgICB0ZXJtaW5hdGVkU3RyaW5nID0gY3JlYXRlVW5p
bml0aWFsaXplZChsZW5ndGggKyAxLCBkYXRhKTsKKyAgICAgICAgbWVtY3B5KGRhdGEsIHN0cmlu
Zy5tX2RhdGE4LCBsZW5ndGggKiBzaXplb2YoY2hhcikpOworICAgICAgICBkYXRhW2xlbmd0aF0g
PSAwOworICAgIH0gZWxzZSB7CisgICAgICAgIFVDaGFyKiBkYXRhOworICAgICAgICB0ZXJtaW5h
dGVkU3RyaW5nID0gY3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGggKyAxLCBkYXRhKTsKKyAgICAg
ICAgbWVtY3B5KGRhdGEsIHN0cmluZy5tX2RhdGExNiwgbGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7
CisgICAgICAgIGRhdGFbbGVuZ3RoXSA9IDA7CisgICAgfQogICAgIHRlcm1pbmF0ZWRTdHJpbmct
Pm1fbGVuZ3RoLS07CiAgICAgdGVybWluYXRlZFN0cmluZy0+bV9oYXNoID0gc3RyaW5nLm1faGFz
aDsKICAgICB0ZXJtaW5hdGVkU3RyaW5nLT5tX3JlZkNvdW50QW5kRmxhZ3MgfD0gc19yZWZDb3Vu
dEZsYWdIYXNUZXJtaW5hdGluZ051bGxDaGFyYWN0ZXI7CkBAIC0xMTQzLDEzICsxNDkwLDE5IEBA
IFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y3JlYXQKIAogUGFzc1JlZlB0cjxT
dHJpbmdJbXBsPiBTdHJpbmdJbXBsOjp0aHJlYWRzYWZlQ29weSgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIGNyZWF0ZShtX2RhdGEsIG1fbGVuZ3RoKTsKKyAgICBpZiAoaXM4Qml0KCkpCisgICAgICAg
IHJldHVybiBjcmVhdGUobV9kYXRhOCwgbV9sZW5ndGgpOworICAgIHJldHVybiBjcmVhdGUobV9k
YXRhMTYsIG1fbGVuZ3RoKTsKKwogfQogCiBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0lt
cGw6OmNyb3NzVGhyZWFkU3RyaW5nKCkKIHsKLSAgICBpZiAoU2hhcmVkVUNoYXIqIHNoYXJlZEJ1
ZmZlciA9IHRoaXMtPnNoYXJlZEJ1ZmZlcigpKQotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFN0cmluZ0ltcGwobV9kYXRhLCBtX2xlbmd0aCwgc2hhcmVkQnVmZmVyLT5jcm9zc1RocmVhZENv
cHkoKSkpOworICAgIGlmIChTaGFyZWRVQ2hhciogc2hhcmVkQnVmZmVyID0gdGhpcy0+c2hhcmVk
QnVmZmVyMTYoKSkgeworICAgICAgICAvLyBGSVhNRTogTWFrZSB0aGlzIHdvcmsgZm9yIDgtYml0
IHN0cmluZ3MKKyAgICAgICAgQVNTRVJUKCFpczhCaXQoKSk7CisgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgU3RyaW5nSW1wbChtX2RhdGExNiwgbV9sZW5ndGgsIHNoYXJlZEJ1ZmZlci0+Y3Jv
c3NUaHJlYWRDb3B5KCkpKTsKKyAgICB9CiAKICAgICAvLyBJZiBubyBzaGFyZWQgYnVmZmVyIGlz
IGF2YWlsYWJsZSwgY3JlYXRlIGEgY29weS4KICAgICByZXR1cm4gdGhyZWFkc2FmZUNvcHkoKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJpbmdJbXBsLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaAkocmV2
aXNpb24gOTcyNzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvU3RyaW5nSW1w
bC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0Niw3IEBAIHR5cGVkZWYgY29uc3Qgc3RydWN0
IF9fQ0ZTdHJpbmcgKiBDRlN0cmkKIC8vIExhbmRpbmcgdGhlIGZpbGUgbW92ZXMgaW4gb25lIHBh
dGNoLCB3aWxsIGZvbGxvdyBvbiB3aXRoIHBhdGNoZXMgdG8gY2hhbmdlIHRoZSBuYW1lc3BhY2Vz
LgogbmFtZXNwYWNlIEpTQyB7CiBzdHJ1Y3QgSWRlbnRpZmllckNTdHJpbmdUcmFuc2xhdG9yOwor
c3RydWN0IElkZW50aWZpZXJDaGFyQnVmZmVyVHJhbnNsYXRvcjsKIHN0cnVjdCBJZGVudGlmaWVy
VUNoYXJCdWZmZXJUcmFuc2xhdG9yOwogfQogCkBAIC02Myw4ICs2NCwxMiBAQCB0eXBlZGVmIENy
b3NzVGhyZWFkUmVmQ291bnRlZDxTaGFyYWJsZVVDCiB0eXBlZGVmIGJvb2wgKCpDaGFyYWN0ZXJN
YXRjaEZ1bmN0aW9uUHRyKShVQ2hhcik7CiB0eXBlZGVmIGJvb2wgKCpJc1doaXRlU3BhY2VGdW5j
dGlvblB0cikoVUNoYXIpOwogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhclR5cGU+IGlubGluZSB1
bnNpZ25lZCB1bnNpZ25lZENoYXJWYWx1ZShjb25zdCBDaGFyVHlwZSBjKSB7IHJldHVybiBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oYyk7IH0KK3RlbXBsYXRlIDw+IGlubGluZSB1bnNpZ25lZCB1bnNp
Z25lZENoYXJWYWx1ZTxjaGFyPihjb25zdCBjaGFyIGMpIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVu
c2lnbmVkIGNoYXI+KGMpOyB9CisKIGNsYXNzIFN0cmluZ0ltcGwgOiBwdWJsaWMgU3RyaW5nSW1w
bEJhc2UgewogICAgIGZyaWVuZCBzdHJ1Y3QgSlNDOjpJZGVudGlmaWVyQ1N0cmluZ1RyYW5zbGF0
b3I7CisgICAgZnJpZW5kIHN0cnVjdCBKU0M6OklkZW50aWZpZXJDaGFyQnVmZmVyVHJhbnNsYXRv
cjsKICAgICBmcmllbmQgc3RydWN0IEpTQzo6SWRlbnRpZmllclVDaGFyQnVmZmVyVHJhbnNsYXRv
cjsKICAgICBmcmllbmQgc3RydWN0IFdURjo6Q1N0cmluZ1RyYW5zbGF0b3I7CiAgICAgZnJpZW5k
IHN0cnVjdCBXVEY6Okhhc2hBbmRDaGFyYWN0ZXJzVHJhbnNsYXRvcjsKQEAgLTc3LDcgKzgyLDcg
QEAgcHJpdmF0ZToKICAgICAvLyBzdGF0aWMgc3RyaW5ncyB3aWxsIGJlIHNoYXJlZCBhY3Jvc3Mg
dGhyZWFkcyAmIHJlZi1jb3VudGVkIGluIGEgbm9uLXRocmVhZHNhZmUgbWFubmVyLgogICAgIFN0
cmluZ0ltcGwoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgU3RhdGlj
U3RyaW5nQ29uc3RydWN0VHlwZSkKICAgICAgICAgOiBTdHJpbmdJbXBsQmFzZShsZW5ndGgsIENv
bnN0cnVjdFN0YXRpY1N0cmluZykKLSAgICAgICAgLCBtX2RhdGEoY2hhcmFjdGVycykKKyAgICAg
ICAgLCBtX2RhdGExNihjaGFyYWN0ZXJzKQogICAgICAgICAsIG1fYnVmZmVyKDApCiAgICAgICAg
ICwgbV9oYXNoKDApCiAgICAgewpAQCAtODcsMzYgKzkyLDgyIEBAIHByaXZhdGU6CiAgICAgICAg
IGhhc2goKTsKICAgICB9CiAKLSAgICAvLyBDcmVhdGUgYSBub3JtYWwgc3RyaW5nIHdpdGggaW50
ZXJuYWwgc3RvcmFnZSAoQnVmZmVySW50ZXJuYWwpCisgICAgLy8gVXNlZCB0byBjb25zdHJ1Y3Qg
c3RhdGljIHN0cmluZ3MsIHdoaWNoIGhhdmUgYW4gc3BlY2lhbCByZWZDb3VudCB0aGF0IGNhbiBu
ZXZlciBoaXQgemVyby4KKyAgICAvLyBUaGlzIG1lYW5zIHRoYXQgdGhlIHN0YXRpYyBzdHJpbmcg
d2lsbCBuZXZlciBiZSBkZXN0cm95ZWQsIHdoaWNoIGlzIGltcG9ydGFudCBiZWNhdXNlCisgICAg
Ly8gc3RhdGljIHN0cmluZ3Mgd2lsbCBiZSBzaGFyZWQgYWNyb3NzIHRocmVhZHMgJiByZWYtY291
bnRlZCBpbiBhIG5vbi10aHJlYWRzYWZlIG1hbm5lci4KKyAgICBTdHJpbmdJbXBsKGNvbnN0IGNo
YXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgU3RhdGljU3RyaW5nQ29uc3RydWN0VHlw
ZSkKKyAgICA6IFN0cmluZ0ltcGxCYXNlKGxlbmd0aCwgQ29uc3RydWN0U3RhdGljU3RyaW5nKQor
ICAgICwgbV9kYXRhOChjaGFyYWN0ZXJzKQorICAgICwgbV9idWZmZXIoMCkKKyAgICAsIG1faGFz
aCgwKQorICAgIHsKKyAgICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIGhhc2ggaXMgY29tcHV0ZWQg
c28gdGhhdCBBdG9taWNTdHJpbmdIYXNoIGNhbiBjYWxsIGV4aXN0aW5nSGFzaCgpCisgICAgICAg
IC8vIHdpdGggaW1wdW5pdHkuIFRoZSBlbXB0eSBzdHJpbmcgaXMgc3BlY2lhbCBiZWNhdXNlIGl0
IGlzIG5ldmVyIGVudGVyZWQgaW50bworICAgICAgICAvLyBBdG9taWNTdHJpbmcncyBIYXNoS2V5
LCBidXQgc3RpbGwgbmVlZHMgdG8gY29tcGFyZSBjb3JyZWN0bHkuCisgICAgICAgIG1fcmVmQ291
bnRBbmRGbGFncyB8PSBzX3JlZkNvdW50RmxhZzhCaXRCdWZmZXI7CisgICAgICAgIGhhc2goKTsK
KyAgICB9CisKKyAgICAvLyBGSVhNRTogdGhlcmUgaGFzIHRvIGJlIGEgbGVzcyBoYWNreSB3YXkg
dG8gZG8gdGhpcy4KKyAgICBlbnVtIEZvcmNlOEJpdCB7IEZvcmNlOEJpdENvbnN0cnVjdG9yIH07
CisgICAgLy8gQ3JlYXRlIGEgbm9ybWFsIDgtYml0IHN0cmluZyB3aXRoIGludGVybmFsIHN0b3Jh
Z2UgKEJ1ZmZlckludGVybmFsKQorICAgIFN0cmluZ0ltcGwodW5zaWduZWQgbGVuZ3RoLCBGb3Jj
ZThCaXQgdW51c2VkKQorICAgICAgICA6IFN0cmluZ0ltcGxCYXNlKGxlbmd0aCwgQnVmZmVySW50
ZXJuYWwpCisgICAgICAgICwgbV9kYXRhOChyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPih0
aGlzICsgMSkpCisgICAgICAgICwgbV9idWZmZXIoMCkKKyAgICAgICAgLCBtX2hhc2goMCkKKyAg
ICB7CisgICAgICAgIFVOVVNFRF9QQVJBTSh1bnVzZWQpOyAvLyBGSVhNRQorICAgICAgICBtX3Jl
ZkNvdW50QW5kRmxhZ3MgfD0gc19yZWZDb3VudEZsYWc4Qml0QnVmZmVyOworICAgICAgICBBU1NF
UlQobV9kYXRhOCk7CisgICAgICAgIEFTU0VSVChtX2xlbmd0aCk7CisgICAgfQorCisgICAgLy8g
Q3JlYXRlIGEgbm9ybWFsIDE2LWJpdCBzdHJpbmcgd2l0aCBpbnRlcm5hbCBzdG9yYWdlIChCdWZm
ZXJJbnRlcm5hbCkKICAgICBTdHJpbmdJbXBsKHVuc2lnbmVkIGxlbmd0aCkKICAgICAgICAgOiBT
dHJpbmdJbXBsQmFzZShsZW5ndGgsIEJ1ZmZlckludGVybmFsKQotICAgICAgICAsIG1fZGF0YShy
ZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4odGhpcyArIDEpKQorICAgICAgICAsIG1fZGF0
YTE2KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPih0aGlzICsgMSkpCiAgICAgICAgICwg
bV9idWZmZXIoMCkKICAgICAgICAgLCBtX2hhc2goMCkKICAgICB7Ci0gICAgICAgIEFTU0VSVCht
X2RhdGEpOworICAgICAgICBBU1NFUlQobV9kYXRhMTYpOwogICAgICAgICBBU1NFUlQobV9sZW5n
dGgpOwogICAgIH0KIAogICAgIC8vIENyZWF0ZSBhIFN0cmluZ0ltcGwgYWRvcHRpbmcgb3duZXJz
aGlwIG9mIHRoZSBwcm92aWRlZCBidWZmZXIgKEJ1ZmZlck93bmVkKQogICAgIFN0cmluZ0ltcGwo
Y29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKICAgICAgICAgOiBTdHJp
bmdJbXBsQmFzZShsZW5ndGgsIEJ1ZmZlck93bmVkKQotICAgICAgICAsIG1fZGF0YShjaGFyYWN0
ZXJzKQorICAgICAgICAsIG1fZGF0YTE2KGNoYXJhY3RlcnMpCiAgICAgICAgICwgbV9idWZmZXIo
MCkKICAgICAgICAgLCBtX2hhc2goMCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX2RhdGEpOwor
ICAgICAgICBBU1NFUlQobV9kYXRhMTYpOwogICAgICAgICBBU1NFUlQobV9sZW5ndGgpOwogICAg
IH0KIAotICAgIC8vIFVzZWQgdG8gY3JlYXRlIG5ldyBzdHJpbmdzIHRoYXQgYXJlIGEgc3Vic3Ry
aW5nIG9mIGFuIGV4aXN0aW5nIFN0cmluZ0ltcGwgKEJ1ZmZlclN1YnN0cmluZykKKyAgICAvLyBV
c2VkIHRvIGNyZWF0ZSBuZXcgc3RyaW5ncyB0aGF0IGFyZSBhIHN1YnN0cmluZyBvZiBhbiBleGlz
dGluZyA4LWJpdCBTdHJpbmdJbXBsIChCdWZmZXJTdWJzdHJpbmcpCisgICAgU3RyaW5nSW1wbChj
b25zdCBjaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIFBhc3NSZWZQdHI8U3RyaW5n
SW1wbD4gYmFzZSkKKyAgICAgICAgOiBTdHJpbmdJbXBsQmFzZShsZW5ndGgsIEJ1ZmZlclN1YnN0
cmluZykKKyAgICAgICAgLCBtX2RhdGE4KGNoYXJhY3RlcnMpCisgICAgICAgICwgbV9zdWJzdHJp
bmdCdWZmZXIoYmFzZS5sZWFrUmVmKCkpCisgICAgICAgICwgbV9oYXNoKDApCisgICAgeworICAg
ICAgICBBU1NFUlQobV9zdWJzdHJpbmdCdWZmZXItPm1fcmVmQ291bnRBbmRGbGFncyAmIHNfcmVm
Q291bnRGbGFnOEJpdEJ1ZmZlcik7CisgICAgICAgIG1fcmVmQ291bnRBbmRGbGFncyB8PSBzX3Jl
ZkNvdW50RmxhZzhCaXRCdWZmZXI7CisgICAgICAgIEFTU0VSVChtX2RhdGE4KTsKKyAgICAgICAg
QVNTRVJUKG1fbGVuZ3RoKTsKKyAgICAgICAgQVNTRVJUKG1fc3Vic3RyaW5nQnVmZmVyLT5idWZm
ZXJPd25lcnNoaXAoKSAhPSBCdWZmZXJTdWJzdHJpbmcpOworICAgIH0KKworICAgIC8vIFVzZWQg
dG8gY3JlYXRlIG5ldyBzdHJpbmdzIHRoYXQgYXJlIGEgc3Vic3RyaW5nIG9mIGFuIGV4aXN0aW5n
IDE2LWJpdCBTdHJpbmdJbXBsIChCdWZmZXJTdWJzdHJpbmcpCiAgICAgU3RyaW5nSW1wbChjb25z
dCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBQYXNzUmVmUHRyPFN0cmluZ0lt
cGw+IGJhc2UpCiAgICAgICAgIDogU3RyaW5nSW1wbEJhc2UobGVuZ3RoLCBCdWZmZXJTdWJzdHJp
bmcpCi0gICAgICAgICwgbV9kYXRhKGNoYXJhY3RlcnMpCisgICAgICAgICwgbV9kYXRhMTYoY2hh
cmFjdGVycykKICAgICAgICAgLCBtX3N1YnN0cmluZ0J1ZmZlcihiYXNlLmxlYWtSZWYoKSkKICAg
ICAgICAgLCBtX2hhc2goMCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX2RhdGEpOworICAgICAg
ICBBU1NFUlQoIShtX3N1YnN0cmluZ0J1ZmZlci0+bV9yZWZDb3VudEFuZEZsYWdzICYgc19yZWZD
b3VudEZsYWc4Qml0QnVmZmVyKSk7CisgICAgICAgIEFTU0VSVChtX2RhdGExNik7CiAgICAgICAg
IEFTU0VSVChtX2xlbmd0aCk7CiAgICAgICAgIEFTU0VSVChtX3N1YnN0cmluZ0J1ZmZlci0+YnVm
ZmVyT3duZXJzaGlwKCkgIT0gQnVmZmVyU3Vic3RyaW5nKTsKICAgICB9CkBAIC0xMjQsMjAgKzE3
NSwyNCBAQCBwcml2YXRlOgogICAgIC8vIFVzZWQgdG8gY29uc3RydWN0IG5ldyBzdHJpbmdzIHNo
YXJpbmcgYW4gZXhpc3RpbmcgU2hhcmVkVUNoYXIgKEJ1ZmZlclNoYXJlZCkKICAgICBTdHJpbmdJ
bXBsKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIFBhc3NSZWZQdHI8
U2hhcmVkVUNoYXI+IHNoYXJlZEJ1ZmZlcikKICAgICAgICAgOiBTdHJpbmdJbXBsQmFzZShsZW5n
dGgsIEJ1ZmZlclNoYXJlZCkKLSAgICAgICAgLCBtX2RhdGEoY2hhcmFjdGVycykKKyAgICAgICAg
LCBtX2RhdGExNihjaGFyYWN0ZXJzKQogICAgICAgICAsIG1fc2hhcmVkQnVmZmVyKHNoYXJlZEJ1
ZmZlci5sZWFrUmVmKCkpCiAgICAgICAgICwgbV9oYXNoKDApCiAgICAgewotICAgICAgICBBU1NF
UlQobV9kYXRhKTsKLSAgICAgICAgQVNTRVJUKG1fbGVuZ3RoKTsKKyAgICAgICAgQVNTRVJUKG1f
ZGF0YTE2KTsKICAgICB9CiAKKyAgICAvLyBGSVhNRTogQWRkIGNvbnN0cnVjdG9ycyBmb3IgOC1i
aXQgc3RyaW5ncworCiAgICAgLy8gRm9yIHVzZSBvbmx5IGJ5IEF0b21pY1N0cmluZydzIFhYWFRy
YW5zbGF0b3IgaGVscGVycy4KICAgICB2b2lkIHNldEhhc2godW5zaWduZWQgaGFzaCkKICAgICB7
CiAgICAgICAgIEFTU0VSVCghaXNTdGF0aWMoKSk7CiAgICAgICAgIEFTU0VSVCghbV9oYXNoKTsK
LSAgICAgICAgQVNTRVJUKGhhc2ggPT0gU3RyaW5nSGFzaGVyOjpjb21wdXRlSGFzaChtX2RhdGEs
IG1fbGVuZ3RoKSk7CisgICAgICAgIGlmIChpczhCaXQoKSkKKyAgICAgICAgICAgIEFTU0VSVCho
YXNoID09IFN0cmluZ0hhc2hlcjo6Y29tcHV0ZUhhc2gobV9kYXRhOCwgbV9sZW5ndGgpKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgQVNTRVJUKGhhc2ggPT0gU3RyaW5nSGFzaGVyOjpjb21w
dXRlSGFzaChtX2RhdGExNiwgbV9sZW5ndGgpKTsKICAgICAgICAgbV9oYXNoID0gaGFzaDsKICAg
ICB9CiAKQEAgLTE0OCw2ICsyMDMsMTkgQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFN0cmluZ0ltcGw+IGNyZWF0ZShjb25zdCBjaGFyKiwgdW5zaWduZWQgbGVuZ3RoKTsKICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBjcmVhdGUoY29uc3QgY2hhciopOwogICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGNyZWF0ZShjb25zdCBVQ2hhciosIHVuc2lnbmVk
IGxlbmd0aCwgUGFzc1JlZlB0cjxTaGFyZWRVQ2hhcj4gc2hhcmVkQnVmZmVyKTsKKyAgICBzdGF0
aWMgQUxXQVlTX0lOTElORSBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGNyZWF0ZTgoUGFzc1JlZlB0
cjxTdHJpbmdJbXBsPiByZXAsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKHJlcCk7CisgICAgICAgIEFTU0VSVChsZW5ndGggPD0gcmVwLT5s
ZW5ndGgoKSk7CisKKyAgICAgICAgaWYgKCFsZW5ndGgpCisgICAgICAgICAgICByZXR1cm4gZW1w
dHkoKTsKKworICAgICAgICBBU1NFUlQocmVwLT5pczhCaXQoKSk7CisgICAgICAgIFN0cmluZ0lt
cGwqIG93bmVyUmVwID0gKHJlcC0+YnVmZmVyT3duZXJzaGlwKCkgPT0gQnVmZmVyU3Vic3RyaW5n
KSA/IHJlcC0+bV9zdWJzdHJpbmdCdWZmZXIgOiByZXAuZ2V0KCk7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgU3RyaW5nSW1wbChyZXAtPm1fZGF0YTggKyBvZmZzZXQsIGxlbmd0aCwgb3du
ZXJSZXApKTsKKyAgICB9CisKICAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBQYXNzUmVmUHRyPFN0
cmluZ0ltcGw+IGNyZWF0ZShQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHJlcCwgdW5zaWduZWQgb2Zm
c2V0LCB1bnNpZ25lZCBsZW5ndGgpCiAgICAgewogICAgICAgICBBU1NFUlQocmVwKTsKQEAgLTE1
NywzNCArMjI1LDQ1IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBlbXB0eSgpOwogCiAg
ICAgICAgIFN0cmluZ0ltcGwqIG93bmVyUmVwID0gKHJlcC0+YnVmZmVyT3duZXJzaGlwKCkgPT0g
QnVmZmVyU3Vic3RyaW5nKSA/IHJlcC0+bV9zdWJzdHJpbmdCdWZmZXIgOiByZXAuZ2V0KCk7Ci0g
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3RyaW5nSW1wbChyZXAtPm1fZGF0YSArIG9mZnNl
dCwgbGVuZ3RoLCBvd25lclJlcCkpOworICAgICAgICBpZiAocmVwLT5pczhCaXQoKSkKKyAgICAg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3RyaW5nSW1wbChyZXAtPm1fZGF0YTggKyBvZmZz
ZXQsIGxlbmd0aCwgb3duZXJSZXApKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHJp
bmdJbXBsKHJlcC0+bV9kYXRhMTYgKyBvZmZzZXQsIGxlbmd0aCwgb3duZXJSZXApKTsKICAgICB9
CiAKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBjcmVhdGVVbmluaXRpYWxpemVk
KHVuc2lnbmVkIGxlbmd0aCwgY2hhciomIGRhdGEpOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0
cmluZ0ltcGw+IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoLCBVQ2hhciomIGRh
dGEpOwotICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gdHJ5
Q3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiYgb3V0cHV0KQorICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdGF0aWMgQUxXQVlTX0lOTElORSBQYXNzUmVmUHRyPFN0
cmluZ0ltcGw+IHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoLCBUKiYgb3V0
cHV0KQogICAgIHsKICAgICAgICAgaWYgKCFsZW5ndGgpIHsKICAgICAgICAgICAgIG91dHB1dCA9
IDA7CiAgICAgICAgICAgICByZXR1cm4gZW1wdHkoKTsKICAgICAgICAgfQogCi0gICAgICAgIGlm
IChsZW5ndGggPiAoKHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSAtIHNpemVv
ZihTdHJpbmdJbXBsKSkgLyBzaXplb2YoVUNoYXIpKSkgeworICAgICAgICBpZiAobGVuZ3RoID4g
KChzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgLSBzaXplb2YoU3RyaW5nSW1w
bCkpIC8gc2l6ZW9mKFQpKSkgewogICAgICAgICAgICAgb3V0cHV0ID0gMDsKICAgICAgICAgICAg
IHJldHVybiAwOwogICAgICAgICB9CiAgICAgICAgIFN0cmluZ0ltcGwqIHJlc3VsdEltcGw7Ci0g
ICAgICAgIGlmICghdHJ5RmFzdE1hbGxvYyhzaXplb2YoVUNoYXIpICogbGVuZ3RoICsgc2l6ZW9m
KFN0cmluZ0ltcGwpKS5nZXRWYWx1ZShyZXN1bHRJbXBsKSkgeworICAgICAgICBpZiAoIXRyeUZh
c3RNYWxsb2Moc2l6ZW9mKFQpICogbGVuZ3RoICsgc2l6ZW9mKFN0cmluZ0ltcGwpKS5nZXRWYWx1
ZShyZXN1bHRJbXBsKSkgewogICAgICAgICAgICAgb3V0cHV0ID0gMDsKICAgICAgICAgICAgIHJl
dHVybiAwOwogICAgICAgICB9Ci0gICAgICAgIG91dHB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VUNo
YXIqPihyZXN1bHRJbXBsICsgMSk7CisgICAgICAgIG91dHB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
VCo+KHJlc3VsdEltcGwgKyAxKTsKKworICAgICAgICBpZiAoc2l6ZW9mKFQpID09IHNpemVvZihj
aGFyKSkKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcocmVzdWx0SW1wbCkgU3RyaW5n
SW1wbChsZW5ndGgsIEZvcmNlOEJpdENvbnN0cnVjdG9yKSk7CisKICAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyhyZXN1bHRJbXBsKSBTdHJpbmdJbXBsKGxlbmd0aCkpOwogICAgIH0KIAotICAg
IHN0YXRpYyB1bnNpZ25lZCBkYXRhT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0
cmluZ0ltcGwsIG1fZGF0YSk7IH0KKyAgICBzdGF0aWMgdW5zaWduZWQgZmxhZ3NPZmZzZXQoKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RyaW5nSW1wbCwgbV9yZWZDb3VudEFuZEZsYWdzKTsg
fQorICAgIHN0YXRpYyB1bnNpZ25lZCBmbGFnSXM4Qml0KCkgeyByZXR1cm4gc19yZWZDb3VudEZs
YWc4Qml0QnVmZmVyOyB9CisgICAgc3RhdGljIHVuc2lnbmVkIGRhdGFPZmZzZXQoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoU3RyaW5nSW1wbCwgbV9kYXRhOCk7IH0gLy8gRklYTUU6IFRoaXMg
aXMgdWdseQogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGNyZWF0ZVdpdGhUZXJt
aW5hdGluZ051bGxDaGFyYWN0ZXIoY29uc3QgU3RyaW5nSW1wbCYpOworICAgIC8vIEZJWE1FOiBj
aGFyKiB2ZXJzaW9uPwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGNyZWF0ZVN0
cmlwcGluZ051bGxDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQgbGVuZ3RoKTsKIAor
ICAgIC8vIEZJWE1FOiBBZGQgVmVjdG9yPGNoYXI+IGFkb3B0PwogICAgIHRlbXBsYXRlPHNpemVf
dCBpbmxpbmVDYXBhY2l0eT4KICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBhZG9w
dChWZWN0b3I8VUNoYXIsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQogICAgIHsKQEAgLTE5OCw4
ICsyNzcsMjIgQEAgcHVibGljOgogICAgIH0KICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJ
bXBsPiBhZG9wdChTdHJpbmdCdWZmZXImKTsKIAotICAgIFNoYXJlZFVDaGFyKiBzaGFyZWRCdWZm
ZXIoKTsKLSAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycygpIGNvbnN0IHsgcmV0dXJuIG1fZGF0
YTsgfQorICAgIC8vIEZJWE1FOiBTaG91bGQgdGhpcyBiZSBwcml2YXRlPyBJdCdzIG9ubHkgYWNj
ZXNzZWQgZnJvbSB3aXRoaW4gU3RyaW5nSW1wbC4KKyAgICBTaGFyZWRVQ2hhciogc2hhcmVkQnVm
ZmVyMTYoKTsKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHNoYXJlZEJ1ZmZlcjgoKSA/CisgICAg
Ly8gRklYTUU6IFJlbW92ZSBhbGwgdW5uZWNlc3NhcnkgdXNhZ2VzIG9mIGNoYXJhY3RlcnMoKQor
ICAgIEFMV0FZU19JTkxJTkUgY29uc3QgY2hhciogY2hhcmFjdGVyczgoKSBjb25zdCB7IEFTU0VS
VChpczhCaXQoKSk7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gbV9kYXRhODsgfQorICAg
IEFMV0FZU19JTkxJTkUgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMxNigpIGNvbnN0IHsgQVNTRVJU
KCFpczhCaXQoKSk7IHJldHVybiBtX2RhdGExNjsgfQorICAgIEFMV0FZU19JTkxJTkUgY29uc3Qg
VUNoYXIqIGNoYXJhY3RlcnMoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFpczhCaXQoKSkK
KyAgICAgICAgICAgIHJldHVybiBtX2RhdGExNjsKKworICAgICAgICByZXR1cm4gZ2V0RGF0YTE2
U2xvd0Nhc2UoKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyVHlwZT4KKyAg
ICBpbmxpbmUgY29uc3QgQ2hhclR5cGUqIGdldENoYXJhY3RlcnMoKSBjb25zdDsKIAogICAgIHNp
emVfdCBjb3N0KCkKICAgICB7CkBAIC0yMTQsNiArMzA3LDggQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gMDsKICAgICB9CiAKKyAgICBib29sIGhhczE2Qml0U2hhZG93KCkgY29uc3QgeyByZXR1
cm4gbV9yZWZDb3VudEFuZEZsYWdzICYgc19yZWZDb3VudEZsYWdIYXMxNkJpdFNoYWRvdzsgfQor
CiAgICAgYm9vbCBpc0lkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX3JlZkNvdW50QW5kRmxh
Z3MgJiBzX3JlZkNvdW50RmxhZ0lzSWRlbnRpZmllcjsgfQogICAgIHZvaWQgc2V0SXNJZGVudGlm
aWVyKGJvb2wgaXNJZGVudGlmaWVyKQogICAgIHsKQEAgLTIzNiw3ICszMzEsMTYgQEAgcHVibGlj
OgogICAgICAgICAgICAgbV9yZWZDb3VudEFuZEZsYWdzICY9IH5zX3JlZkNvdW50RmxhZ0lzQXRv
bWljOwogICAgIH0KIAotICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdCB7IGlmICghbV9oYXNoKSBt
X2hhc2ggPSBTdHJpbmdIYXNoZXI6OmNvbXB1dGVIYXNoKG1fZGF0YSwgbV9sZW5ndGgpOyByZXR1
cm4gbV9oYXNoOyB9CisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICBp
ZiAoIW1faGFzaCkgeworICAgICAgICAgICAgaWYgKGlzOEJpdCgpKQorICAgICAgICAgICAgICAg
IG1faGFzaCA9IFN0cmluZ0hhc2hlcjo6Y29tcHV0ZUhhc2gobV9kYXRhOCwgbV9sZW5ndGgpOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1faGFzaCA9IFN0cmluZ0hhc2hlcjo6
Y29tcHV0ZUhhc2gobV9kYXRhMTYsIG1fbGVuZ3RoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gbV9oYXNoOworICAgIH0KICAgICB1bnNpZ25lZCBleGlzdGluZ0hhc2goKSBjb25zdCB7IEFT
U0VSVChtX2hhc2gpOyByZXR1cm4gbV9oYXNoOyB9CiAgICAgYm9vbCBoYXNIYXNoKCkgY29uc3Qg
eyByZXR1cm4gbV9oYXNoOyB9CiAKQEAgLTI0NSwxMyArMzQ5LDMyIEBAIHB1YmxpYzoKIAogICAg
IHN0YXRpYyBTdHJpbmdJbXBsKiBlbXB0eSgpOwogCi0gICAgc3RhdGljIHZvaWQgY29weUNoYXJz
KFVDaGFyKiBkZXN0aW5hdGlvbiwgY29uc3QgVUNoYXIqIHNvdXJjZSwgdW5zaWduZWQgbnVtQ2hh
cmFjdGVycykKKyAgICAvLyBGSVhNRTogRG9lcyB0aGlzIHJlYWxseSBiZWxvbmcgaW4gU3RyaW5n
SW1wbD8KKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RhdGljIHZvaWQgY29weUNoYXJzKFQq
IGRlc3RpbmF0aW9uLCBjb25zdCBUKiBzb3VyY2UsIHVuc2lnbmVkIG51bUNoYXJhY3RlcnMpCiAg
ICAgeworICAgICAgICBpZiAobnVtQ2hhcmFjdGVycyA9PSAxKSB7CisgICAgICAgICAgICAqZGVz
dGluYXRpb24gPSAqc291cmNlOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKICAg
ICAgICAgaWYgKG51bUNoYXJhY3RlcnMgPD0gc19jb3B5Q2hhcnNJbmxpbmVDdXRPZmYpIHsKLSAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1DaGFyYWN0ZXJzOyArK2kpCisg
ICAgICAgICAgICB1bnNpZ25lZCBpID0gMDsKKyNpZiAoQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkp
CisgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyc1BlckludCA9IHNpemVvZih1aW50MzJf
dCkgLyBzaXplb2YoVCk7CisKKyAgICAgICAgICAgIGlmIChudW1DaGFyYWN0ZXJzID4gY2hhcnNQ
ZXJJbnQpIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBzdG9wQ291bnQgPSBudW1DaGFyYWN0
ZXJzICYgfihjaGFyc1BlckludCAtIDEpOworCisgICAgICAgICAgICAgICAgY29uc3QgdWludDMy
X3QqIHNyY0NoYXJhY3RlcnMgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oc291
cmNlKTsKKyAgICAgICAgICAgICAgICB1aW50MzJfdCogZGVzdENoYXJhY3RlcnMgPSByZWludGVy
cHJldF9jYXN0PHVpbnQzMl90Kj4oZGVzdGluYXRpb24pOworICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaiA9IDA7IGkgPCBzdG9wQ291bnQ7IGkgKz0gY2hhcnNQZXJJbnQsICsraikKKyAg
ICAgICAgICAgICAgICAgICAgZGVzdENoYXJhY3RlcnNbal0gPSBzcmNDaGFyYWN0ZXJzW2pdOwor
ICAgICAgICAgICAgfQorI2VuZGlmCisgICAgICAgICAgICBmb3IgKDsgaSA8IG51bUNoYXJhY3Rl
cnM7ICsraSkKICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbltpXSA9IHNvdXJjZVtpXTsKICAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtZW1jcHkoZGVzdGluYXRpb24sIHNvdXJjZSwgbnVt
Q2hhcmFjdGVycyAqIHNpemVvZihVQ2hhcikpOworICAgICAgICAgICAgbWVtY3B5KGRlc3RpbmF0
aW9uLCBzb3VyY2UsIG51bUNoYXJhY3RlcnMgKiBzaXplb2YoVCkpOwogICAgIH0KIAogICAgIC8v
IFJldHVybnMgYSBTdHJpbmdJbXBsIHN1aXRhYmxlIGZvciB1c2Ugb24gYW5vdGhlciB0aHJlYWQu
CkBAIC0yNjMsNyArMzg2LDEzIEBAIHB1YmxpYzoKIAogICAgIFBhc3NSZWZQdHI8U3RyaW5nSW1w
bD4gc3Vic3RyaW5nKHVuc2lnbmVkIHBvcywgdW5zaWduZWQgbGVuID0gVUlOVF9NQVgpOwogCi0g
ICAgVUNoYXIgb3BlcmF0b3JbXSh1bnNpZ25lZCBpKSB7IEFTU0VSVChpIDwgbV9sZW5ndGgpOyBy
ZXR1cm4gbV9kYXRhW2ldOyB9CisgICAgVUNoYXIgb3BlcmF0b3JbXSh1bnNpZ25lZCBpKSBjb25z
dAorICAgIHsKKyAgICAgICAgQVNTRVJUKGkgPCBtX2xlbmd0aCk7CisgICAgICAgIGlmIChpczhC
aXQoKSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihtX2Rh
dGE4W2ldKTsKKyAgICAgICAgcmV0dXJuIG1fZGF0YTE2W2ldOworICAgIH0KICAgICBVQ2hhcjMy
IGNoYXJhY3RlclN0YXJ0aW5nQXQodW5zaWduZWQpOwogCiAgICAgYm9vbCBjb250YWluc09ubHlX
aGl0ZXNwYWNlKCk7CkBAIC0yODcsNiArNDE2LDcgQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8
U3RyaW5nSW1wbD4gdXBwZXIoKTsKIAogICAgIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gZmlsbChV
Q2hhcik7CisgICAgLy8gRklYTUU6IERvIHdlIG5lZWQgZmlsbChjaGFyKSBvciBjYW4gd2UganVz
dCBkbyB0aGUgcmlnaHQgdGhpbmcgaWYgVUNoYXIgaXMgQVNDSUk/CiAgICAgUGFzc1JlZlB0cjxT
dHJpbmdJbXBsPiBmb2xkQ2FzZSgpOwogCiAgICAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBzdHJp
cFdoaXRlU3BhY2UoKTsKQEAgLTI5Niw2ICs0MjYsNyBAQCBwdWJsaWM6CiAKICAgICBQYXNzUmVm
UHRyPFN0cmluZ0ltcGw+IHJlbW92ZUNoYXJhY3RlcnMoQ2hhcmFjdGVyTWF0Y2hGdW5jdGlvblB0
cik7CiAKKyAgICAvLyBGSVhNRTogRG8gd2UgbmVlZCBjaGFyIHZlcnNpb24sIG9yIGlzIGl0IG9r
YXkgdG8ganVzdCBwYXNzIGluIGFuIEFTQ0lJIGNoYXIgZm9yIDgtYml0PyBTYW1lIGZvciByZXZl
cnNlRmluZCwgcmVwbGFjZQogICAgIHNpemVfdCBmaW5kKFVDaGFyLCB1bnNpZ25lZCBpbmRleCA9
IDApOwogICAgIHNpemVfdCBmaW5kKENoYXJhY3Rlck1hdGNoRnVuY3Rpb25QdHIsIHVuc2lnbmVk
IGluZGV4ID0gMCk7CiAgICAgc2l6ZV90IGZpbmQoY29uc3QgY2hhciosIHVuc2lnbmVkIGluZGV4
ID0gMCk7CkBAIC0zMzQsMTggKzQ2NSwyNCBAQCBwcml2YXRlOgogICAgIGJvb2wgaXNTdGF0aWMo
KSBjb25zdCB7IHJldHVybiBtX3JlZkNvdW50QW5kRmxhZ3MgJiBzX3JlZkNvdW50RmxhZ1N0YXRp
YzsgfQogICAgIHRlbXBsYXRlIDxjbGFzcyBVQ2hhclByZWRpY2F0ZT4gUGFzc1JlZlB0cjxTdHJp
bmdJbXBsPiBzdHJpcE1hdGNoZWRDaGFyYWN0ZXJzKFVDaGFyUHJlZGljYXRlKTsKICAgICB0ZW1w
bGF0ZSA8Y2xhc3MgVUNoYXJQcmVkaWNhdGU+IFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gc2ltcGxp
ZnlNYXRjaGVkQ2hhcmFjdGVyc1RvU3BhY2UoVUNoYXJQcmVkaWNhdGUpOworICAgIE5FVkVSX0lO
TElORSBjb25zdCBVQ2hhciogZ2V0RGF0YTE2U2xvd0Nhc2UoKSBjb25zdDsKIAotICAgIGNvbnN0
IFVDaGFyKiBtX2RhdGE7CisgICAgdW5pb24geworICAgICAgICBjb25zdCBjaGFyKiBtX2RhdGE4
OworICAgICAgICBjb25zdCBVQ2hhciogbV9kYXRhMTY7CisgICAgfTsKICAgICB1bmlvbiB7CiAg
ICAgICAgIHZvaWQqIG1fYnVmZmVyOwogICAgICAgICBTdHJpbmdJbXBsKiBtX3N1YnN0cmluZ0J1
ZmZlcjsKICAgICAgICAgU2hhcmVkVUNoYXIqIG1fc2hhcmVkQnVmZmVyOworICAgICAgICBtdXRh
YmxlIFVDaGFyKiBtX2NvcHlEYXRhMTY7CiAgICAgfTsKICAgICBtdXRhYmxlIHVuc2lnbmVkIG1f
aGFzaDsKIH07CiAKIGJvb2wgZXF1YWwoY29uc3QgU3RyaW5nSW1wbCosIGNvbnN0IFN0cmluZ0lt
cGwqKTsKIGJvb2wgZXF1YWwoY29uc3QgU3RyaW5nSW1wbCosIGNvbnN0IGNoYXIqKTsKK2Jvb2wg
ZXF1YWwoY29uc3QgU3RyaW5nSW1wbCosIGNvbnN0IGNoYXIqLCB1bnNpZ25lZCk7CiBpbmxpbmUg
Ym9vbCBlcXVhbChjb25zdCBjaGFyKiBhLCBTdHJpbmdJbXBsKiBiKSB7IHJldHVybiBlcXVhbChi
LCBhKTsgfQogYm9vbCBlcXVhbChjb25zdCBTdHJpbmdJbXBsKiwgY29uc3QgVUNoYXIqLCB1bnNp
Z25lZCk7CiAKQEAgLTM3Niw2ICs1MTMsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNTcGFjZU9y
TmV3bGluZShVQ2hhCiAgICAgcmV0dXJuIGMgPD0gMHg3RiA/IFdURjo6aXNBU0NJSVNwYWNlKGMp
IDogV1RGOjpVbmljb2RlOjpkaXJlY3Rpb24oYykgPT0gV1RGOjpVbmljb2RlOjpXaGl0ZVNwYWNl
TmV1dHJhbDsKIH0KIAorLy8gRklYTUU6IFNob3VsZCB0aGVyZSBiZSBhbiA4LWJpdCBpbXBsZW1l
bnRhdGlvbiBvZiB0aGlzLCBvciBzaG91bGQgdGhpcyBtZXRob2QgY3JlYXRlIGFuIDgtYml0IFN0
cmluZ0ltcGwgYXMgbmVlZGVkPwogLy8gVGhpcyBpcyBhIGhvdCBmdW5jdGlvbiBiZWNhdXNlIGl0
J3MgdXNlZCB3aGVuIHBhcnNpbmcgSFRNTC4KIGlubGluZSBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+
IFN0cmluZ0ltcGw6OmNyZWF0ZVN0cmlwcGluZ051bGxDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBj
aGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCiB7CkBAIC0zOTksNiArNTM3LDE4IEBAIGlubGlu
ZSBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGwKICAgICByZXR1cm4gU3RyaW5nSW1w
bDo6Y3JlYXRlU3RyaXBwaW5nTnVsbENoYXJhY3RlcnNTbG93Q2FzZShjaGFyYWN0ZXJzLCBsZW5n
dGgpOwogfQogCit0ZW1wbGF0ZTw+CitpbmxpbmUgY29uc3QgY2hhciogU3RyaW5nSW1wbDo6Z2V0
Q2hhcmFjdGVyczxjaGFyPigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNoYXJhY3RlcnM4KCk7Cit9
CisKK3RlbXBsYXRlPD4KK2lubGluZSBjb25zdCBVQ2hhciogU3RyaW5nSW1wbDo6Z2V0Q2hhcmFj
dGVyczxVQ2hhcj4oKSBjb25zdAoreworICAgIHJldHVybiBjaGFyYWN0ZXJzMTYoKTsKK30KKwog
c3RydWN0IFN0cmluZ0hhc2g7CiAKIC8vIFN0cmluZ0hhc2ggaXMgdGhlIGRlZmF1bHQgaGFzaCBm
b3IgU3RyaW5nSW1wbCogYW5kIFJlZlB0cjxTdHJpbmdJbXBsPgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3d0Zi90ZXh0L1N0cmluZ0ltcGxCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1N0cmluZ0ltcGxCYXNlLmgJKHJldmlzaW9uIDk3Mjc5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1N0cmluZ0ltcGxCYXNlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAgY2xhc3MgU3RyaW5nSW1wbEJhc2UgewogcHVi
bGljOgogICAgIGJvb2wgaXNTdHJpbmdJbXBsKCkgeyByZXR1cm4gKG1fcmVmQ291bnRBbmRGbGFn
cyAmIHNfcmVmQ291bnRJbnZhbGlkRm9yU3RyaW5nSW1wbCkgIT0gc19yZWZDb3VudEludmFsaWRG
b3JTdHJpbmdJbXBsOyB9CiAgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9s
ZW5ndGg7IH0KKyAgICBib29sIGlzOEJpdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVmQ291bnRBbmRG
bGFncyAmIHNfcmVmQ291bnRGbGFnOEJpdEJ1ZmZlcjsgfQogICAgIHZvaWQgcmVmKCkgeyBtX3Jl
ZkNvdW50QW5kRmxhZ3MgKz0gc19yZWZDb3VudEluY3JlbWVudDsgfQogCiBwcm90ZWN0ZWQ6CkBA
IC03MywxMSArNzQsMTMgQEAgcHJvdGVjdGVkOgogICAgICAgICBBU1NFUlQoIWlzU3RyaW5nSW1w
bCgpKTsKICAgICB9CiAKLSAgICAvLyBUaGUgYm90dG9tIDcgYml0cyBob2xkIGZsYWdzLCB0aGUg
dG9wIDI1IGJpdHMgaG9sZCB0aGUgcmVmIGNvdW50LgorICAgIC8vIFRoZSBib3R0b20gOSBiaXRz
IGhvbGQgZmxhZ3MsIHRoZSB0b3AgMjMgYml0cyBob2xkIHRoZSByZWYgY291bnQuCiAgICAgLy8g
V2hlbiBkZXJlZmVyZW5jaW5nIFN0cmluZ0ltcGxzIHdlIGNoZWNrIGZvciB0aGUgcmVmIGNvdW50
IEFORCB0aGUKICAgICAvLyBzdGF0aWMgYml0IGJvdGggYmVpbmcgemVybyAtIHN0YXRpYyBzdHJp
bmdzIGFyZSBuZXZlciBkZWxldGVkLgotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzX3JlZkNv
dW50TWFzayA9IDB4RkZGRkZGODA7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNfcmVmQ291
bnRJbmNyZW1lbnQgPSAweDgwOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzX3JlZkNvdW50
TWFzayA9IDB4RUZGRkZGMDA7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNfcmVmQ291bnRJ
bmNyZW1lbnQgPSAweDEwMDsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc19yZWZDb3VudEZs
YWdIYXMxNkJpdFNoYWRvdyA9IDB4ODAwMDAwMDA7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IHNfcmVmQ291bnRGbGFnOEJpdEJ1ZmZlciA9IDB4ODA7CiAgICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIHNfcmVmQ291bnRGbGFnU3RhdGljID0gMHg0MDsKICAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgc19yZWZDb3VudEZsYWdIYXNUZXJtaW5hdGluZ051bGxDaGFyYWN0ZXIgPSAweDIwOwogICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzX3JlZkNvdW50RmxhZ0lzQXRvbWljID0gMHgxMDsKQEAg
LTg5LDcgKzkyLDcgQEAgcHJvdGVjdGVkOgogICAgIC8vIFVzZWQgYnkgIkNvbnN0cnVjdE5vblN0
cmluZ0ltcGwiIGNvbnN0cnVjdG9yLCBhYm92ZS4KICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
c19yZWZDb3VudEludmFsaWRGb3JTdHJpbmdJbXBsID0gc19yZWZDb3VudEZsYWdTdGF0aWMgfCBz
X3JlZkNvdW50RmxhZ1Nob3VsZFJlcG9ydGVkQ29zdDsKIAotICAgIHVuc2lnbmVkIG1fcmVmQ291
bnRBbmRGbGFnczsKKyAgICBtdXRhYmxlIHVuc2lnbmVkIG1fcmVmQ291bnRBbmRGbGFnczsKICAg
ICB1bnNpZ25lZCBtX2xlbmd0aDsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95
YXJyL1lhcnJQYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFy
ci9ZYXJyUGFyc2VyLmgJKHJldmlzaW9uIDk3Mjc5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3lhcnIvWWFyclBhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzEsNyArMjMxLDcgQEAgcHJp
dmF0ZToKICAgICAgICAgOiBtX2RlbGVnYXRlKGRlbGVnYXRlKQogICAgICAgICAsIG1fYmFja1Jl
ZmVyZW5jZUxpbWl0KGJhY2tSZWZlcmVuY2VMaW1pdCkKICAgICAgICAgLCBtX2VycihOb0Vycm9y
KQotICAgICAgICAsIG1fZGF0YShwYXR0ZXJuKQorICAgICAgICAsIG1fZGF0YShwYXR0ZXJuLmNo
YXJhY3RlcnMxNigpKQogICAgICAgICAsIG1fc2l6ZShwYXR0ZXJuLmxlbmd0aCgpKQogICAgICAg
ICAsIG1faW5kZXgoMCkKICAgICAgICAgLCBtX3BhcmVudGhlc2VzTmVzdGluZ0RlcHRoKDApCkBA
IC03OTMsNyArNzkzLDcgQEAgcHJpdmF0ZToKICAgICBEZWxlZ2F0ZSYgbV9kZWxlZ2F0ZTsKICAg
ICB1bnNpZ25lZCBtX2JhY2tSZWZlcmVuY2VMaW1pdDsKICAgICBFcnJvckNvZGUgbV9lcnI7Ci0g
ICAgY29uc3QgVVN0cmluZyYgbV9kYXRhOworICAgIGNvbnN0IFVDaGFyKiBtX2RhdGE7CiAgICAg
dW5zaWduZWQgbV9zaXplOwogICAgIHVuc2lnbmVkIG1faW5kZXg7CiAgICAgdW5zaWduZWQgbV9w
YXJlbnRoZXNlc05lc3RpbmdEZXB0aDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk3Mjc5KQor
KysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcg
QEAKKzIwMTEtMTAtMTMgIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CisKKyAg
ICAgICAgSW52ZXN0aWdhdGUgc3RvcmluZyBzdHJpbmdzIGluIDgtYml0IGJ1ZmZlcnMgd2hlbiBw
b3NzaWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NjYxNjEKKworICAgICAgICBDaGFuZ2VzIHRvIHN1cHBvcnQgOCBiaXQgU3RyaW5nSW1wbCBjaGFu
Z2VzLgorICAgICAgICAKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAg
ICAgIAorICAgICAgICBObyBuZXcgdGVzdHMsIHJlZmFjdG9yZWQgU3RyaW5nSW1wbCBmb3IgOCBi
aXQgc3RyaW5ncy4KKworICAgICAgICAqIHBsYXRmb3JtL3RleHQvY2YvU3RyaW5nSW1wbENGLmNw
cDoKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6Y3JlYXRlQ0ZTdHJpbmcpOgorCiAyMDExLTEw
LTA2ICBSb2JlcnQgSG9nYW4gIDxyb2JlcnRAd2Via2l0Lm9yZz4KIAogICAgICAgICBDU1MgMi4x
IGZhaWx1cmU6IGJvcmRlci1jb25mbGljdC1zdHlsZS0wNzkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvY2YvU3RyaW5nSW1wbENGLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2NmL1N0cmluZ0ltcGxDRi5jcHAJKHJldmlzaW9uIDk3Mjc5
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9jZi9TdHJpbmdJbXBsQ0YuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzYsMTMgKzEzNiwxMyBAQCBDRlN0cmluZ1JlZiBTdHJpbmdJbXBs
OjpjcmVhdGVDRlN0cmluZygpCiB7CiAgICAgQ0ZBbGxvY2F0b3JSZWYgYWxsb2NhdG9yID0gKG1f
bGVuZ3RoICYmIGlzTWFpblRocmVhZCgpKSA/IFN0cmluZ1dyYXBwZXJDRkFsbG9jYXRvcjo6YWxs
b2NhdG9yKCkgOiAwOwogICAgIGlmICghYWxsb2NhdG9yKQotICAgICAgICByZXR1cm4gQ0ZTdHJp
bmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCByZWludGVycHJldF9jYXN0PGNvbnN0IFVuaUNoYXIq
PihtX2RhdGEpLCBtX2xlbmd0aCk7CisgICAgICAgIHJldHVybiBDRlN0cmluZ0NyZWF0ZVdpdGhD
aGFyYWN0ZXJzKDAsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVW5pQ2hhcio+KGNoYXJhY3RlcnMo
KSksIG1fbGVuZ3RoKTsKIAogICAgIC8vIFB1dCBwb2ludGVyIHRvIHRoZSBTdHJpbmdJbXBsIGlu
IGEgZ2xvYmFsIHNvIHRoZSBhbGxvY2F0b3IgY2FuIHN0b3JlIGl0IHdpdGggdGhlIENGU3RyaW5n
LgogICAgIEFTU0VSVCghU3RyaW5nV3JhcHBlckNGQWxsb2NhdG9yOjpjdXJyZW50U3RyaW5nKTsK
ICAgICBTdHJpbmdXcmFwcGVyQ0ZBbGxvY2F0b3I6OmN1cnJlbnRTdHJpbmcgPSB0aGlzOwogCi0g
ICAgQ0ZTdHJpbmdSZWYgc3RyaW5nID0gQ0ZTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVyc05vQ29w
eShhbGxvY2F0b3IsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVW5pQ2hhcio+KG1fZGF0YSksIG1f
bGVuZ3RoLCBrQ0ZBbGxvY2F0b3JOdWxsKTsKKyAgICBDRlN0cmluZ1JlZiBzdHJpbmcgPSBDRlN0
cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzTm9Db3B5KGFsbG9jYXRvciwgcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBVbmlDaGFyKj4oY2hhcmFjdGVycygpKSwgbV9sZW5ndGgsIGtDRkFsbG9jYXRvck51
bGwpOwogCiAgICAgLy8gVGhlIGFsbG9jYXRvciBjbGVhcmVkIHRoZSBnbG9iYWwgd2hlbiBpdCBy
ZWFkIGl0LCBidXQgYWxzbyBjbGVhciBpdCBoZXJlIGp1c3QgaW4gY2FzZS4KICAgICBBU1NFUlQo
IVN0cmluZ1dyYXBwZXJDRkFsbG9jYXRvcjo6Y3VycmVudFN0cmluZyk7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiA5NzM5NCkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDExLTEwLTEzICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJv
ZmZAYXBwbGUuY29tPgorCisgICAgICAgIEludmVzdGlnYXRlIHN0b3Jpbmcgc3RyaW5ncyBpbiA4
LWJpdCBidWZmZXJzIHdoZW4gcG9zc2libGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTY2MTYxCisKKyAgICAgICAgQWRkZWQgZXhwb3J0IG9mIFN0cmlu
Z0ltcGw6OmdldERhdGExNlNsb3dDYXNlIGZvciBsaW5raW5nIHRlc3RzLgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd2luL1dlYktpdDIuZGVmOgor
CiAyMDExLTEwLTEzICBSYXZpIFBoYW5lZW5kcmEgS2FzaWJoYXRsYSAgPHJhdmkua2FzaWJoYXRs
YUBtb3Rvcm9sYS5jb20+CiAKICAgICAgICAgSW1wbGVtZW50IFRleHRDaGVja2VyIGZvciBXZWJL
aXQyIEdUSysKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL3dpbi9XZWJLaXQyLmRlZgo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi93aW4vV2ViS2l0Mi5kZWYJKHJldmlzaW9uIDk3Mjc5KQorKysg
U291cmNlL1dlYktpdDIvd2luL1dlYktpdDIuZGVmCSh3b3JraW5nIGNvcHkpCkBAIC0xNTUsNiAr
MTU1LDcgQEAgRVhQT1JUUwogICAgICAgICA/ZXF1YWxAV1RGQEBZQV9OUEJWU3RyaW5nSW1wbEAx
QFBCREBaCiAgICAgICAgID9leHRlcm5hbFJlcHJlc2VudGF0aW9uQFdlYkNvcmVAQFlBP0FWU3Ry
aW5nQFdURkBAUEFWRWxlbWVudEAxQElAWgogICAgICAgICA/Z2V0Q2FjaGVkRE9NU3RydWN0dXJl
QFdlYkNvcmVAQFlBUEFWU3RydWN0dXJlQEpTQ0BAUEFWSlNET01HbG9iYWxPYmplY3RAMUBQQlVD
bGFzc0luZm9AM0BAWgorICAgICAgICA/Z2V0RGF0YTE2U2xvd0Nhc2VAU3RyaW5nSW1wbEBXVEZA
QEFCRVBCX1dYWgogICAgICAgICA/Z2V0RWxlbWVudEJ5SWRAVHJlZVNjb3BlQFdlYkNvcmVAQFFC
RVBBVkVsZW1lbnRAMkBBQlZBdG9taWNTdHJpbmdAV1RGQEBAWgogICAgICAgICA/aXNQcmVsb2Fk
ZWRAQ2FjaGVkUmVzb3VyY2VMb2FkZXJAV2ViQ29yZUBAUUJFX05BQlZTdHJpbmdAV1RGQEBAWgog
ICAgICAgICA/anNTdHJpbmdTbG93Q2FzZUBXZWJDb3JlQEBZQT9BVkpTVmFsdWVASlNDQEBQQVZF
eGVjU3RhdGVAM0BBQVY/JEhhc2hNYXBAUEFWU3RyaW5nSW1wbEBXVEZAQFY/JFdlYWtAVkpTU3Ry
aW5nQEpTQ0BAQEpTQ0BAVVN0cmluZ0hhc2hAMkBVPyRIYXNoVHJhaXRzQFBBVlN0cmluZ0ltcGxA
V1RGQEBAMkBVPyRIYXNoVHJhaXRzQFY/JFdlYWtAVkpTU3RyaW5nQEpTQ0BAQEpTQ0BAQDJAQFdU
RkBAUEFWU3RyaW5nSW1wbEA2QEBaCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112435</attachid>
            <date>2011-10-25 17:50:57 -0700</date>
            <delta_ts>2011-10-26 14:50:14 -0700</delta_ts>
            <desc>Updated patch refactored to use LChar</desc>
            <filename>66161-10.patch</filename>
            <type>text/plain</type>
            <size>113693</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAkocmV2aXNpb24g
OTgyODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNjMsOCArMzYzLDYgQEAgX19aTjNKU0NndEVSS05TXzdVU3RyaW5nRVMy
XwogX19aTjNKU0NsdEVSS05TXzdVU3RyaW5nRVMyXwogX19aTjNXVEYxMFN0cmluZ0ltcGwxMXJl
dmVyc2VGaW5kRVBTMF9qCiBfX1pOM1dURjEwU3RyaW5nSW1wbDExcmV2ZXJzZUZpbmRFdGoKLV9f
Wk4zV1RGMTBTdHJpbmdJbXBsMTJzaGFyZWRCdWZmZXJFdgotX19aTjNXVEYxMFN0cmluZ0ltcGwx
NmZpbmRJZ25vcmluZ0Nhc2VFUEtjagogX19aTjNXVEYxMFN0cmluZ0ltcGwxNmZpbmRJZ25vcmlu
Z0Nhc2VFUFMwX2oKIF9fWk4zV1RGMTBTdHJpbmdJbXBsMThzaW1wbGlmeVdoaXRlU3BhY2VFdgog
X19aTjNXVEYxMFN0cmluZ0ltcGwxOWNoYXJhY3RlclN0YXJ0aW5nQXRFagpAQCAtMzc0LDcgKzM3
Miw2IEBAIF9fWk4zV1RGMTBTdHJpbmdJbXBsMjNkZWZhdWx0V3JpdGluZ0RpcmUKIF9fWk4zV1RG
MTBTdHJpbmdJbXBsMjNyZXZlcnNlRmluZElnbm9yaW5nQ2FzZUVQUzBfagogX19aTjNXVEYxMFN0
cmluZ0ltcGw0ZmlsbEV0CiBfX1pOM1dURjEwU3RyaW5nSW1wbDRmaW5kRVBGYnRFagotX19aTjNX
VEYxMFN0cmluZ0ltcGw0ZmluZEVQS2NqCiBfX1pOM1dURjEwU3RyaW5nSW1wbDRmaW5kRVBTMF9q
CiBfX1pOM1dURjEwU3RyaW5nSW1wbDRmaW5kRXRqCiBfX1pOM1dURjEwU3RyaW5nSW1wbDVhZG9w
dEVSTlNfMTJTdHJpbmdCdWZmZXJFCkBAIC0zODIsOCArMzc5LDcgQEAgX19aTjNXVEYxMFN0cmlu
Z0ltcGw1ZW1wdHlFdgogX19aTjNXVEYxMFN0cmluZ0ltcGw1bG93ZXJFdgogX19aTjNXVEYxMFN0
cmluZ0ltcGw1dG9JbnRFUGIKIF9fWk4zV1RGMTBTdHJpbmdJbXBsNXVwcGVyRXYKLV9fWk4zV1RG
MTBTdHJpbmdJbXBsNmNyZWF0ZUVQS2MKLV9fWk4zV1RGMTBTdHJpbmdJbXBsNmNyZWF0ZUVQS2Nq
CitfX1pOM1dURjEwU3RyaW5nSW1wbDZjcmVhdGVFUEtoCiBfX1pOM1dURjEwU3RyaW5nSW1wbDZj
cmVhdGVFUEt0agogX19aTjNXVEYxMFN0cmluZ0ltcGw3cmVwbGFjZUVQUzBfUzFfCiBfX1pOM1dU
RjEwU3RyaW5nSW1wbDdyZXBsYWNlRWpqUFMwXwpAQCAtNDAzLDcgKzM5OSw3IEBAIF9fWk4zV1RG
MTFlbXB0eVN0cmluZ0V2CiBfX1pOM1dURjExZmFzdFJlYWxsb2NFUHZtCiBfX1pOM1dURjEyQXRv
bWljU3RyaW5nMTFhZGRTbG93Q2FzZUVQTlNfMTBTdHJpbmdJbXBsRQogX19aTjNXVEYxMkF0b21p
Y1N0cmluZzE2ZnJvbVVURjhJbnRlcm5hbEVQS2NTMl8KLV9fWk4zV1RGMTJBdG9taWNTdHJpbmcz
YWRkRVBLYworX19aTjNXVEYxMkF0b21pY1N0cmluZzNhZGRFUEtoCiBfX1pOM1dURjEyQXRvbWlj
U3RyaW5nM2FkZEVQS3QKIF9fWk4zV1RGMTJBdG9taWNTdHJpbmczYWRkRVBLdGoKIF9fWk4zV1RG
MTJBdG9taWNTdHJpbmczYWRkRVBLdGpqCkBAIC00NDUsOSArNDQxLDkgQEAgX19aTjNXVEYxNmNh
bGxPbk1haW5UaHJlYWRFUEZ2UHZFUzBfCiBfX1pOM1dURjE2Y29kZVBvaW50Q29tcGFyZUVSS05T
XzZTdHJpbmdFUzJfCiBfX1pOM1dURjE2ZmFzdFplcm9lZE1hbGxvY0VtCiBfX1pOM1dURjE3Y2hh
cmFjdGVyc1RvRmxvYXRFUEt0bVBiUzJfCi1fX1pOM1dURjE3ZXF1YWxJZ25vcmluZ0Nhc2VFUEt0
UEtjagotX19aTjNXVEYxN2VxdWFsSWdub3JpbmdDYXNlRVBOU18xMFN0cmluZ0ltcGxFUEtjCitf
X1pOM1dURjE3ZXF1YWxJZ25vcmluZ0Nhc2VFUEt0UEtoagogX19aTjNXVEYxN2VxdWFsSWdub3Jp
bmdDYXNlRVBOU18xMFN0cmluZ0ltcGxFUzFfCitfX1pOM1dURjE3ZXF1YWxJZ25vcmluZ0Nhc2VF
UE5TXzEwU3RyaW5nSW1wbEVQS2gKIF9fWk4zV1RGMThjYWxjdWxhdGVEU1RPZmZzZXRFZGQKIF9f
Wk4zV1RGMThjYWxjdWxhdGVVVENPZmZzZXRFdgogX19aTjNXVEYxOGNoYXJhY3RlcnNUb0RvdWJs
ZUVQS3RtUGJTMl8KQEAgLTQ5MiwxNSArNDg4LDE2IEBAIF9fWk4zV1RGNU11dGV4NnVubG9ja0V2
CiBfX1pOM1dURjVNdXRleDd0cnlMb2NrRXYKIF9fWk4zV1RGNU11dGV4QzFFdgogX19aTjNXVEY1
TXV0ZXhEMUV2Ci1fX1pOM1dURjVlcXVhbEVQS05TXzEwU3RyaW5nSW1wbEVQS2MKK19fWk4zV1RG
NWVxdWFsRVBLTlNfMTBTdHJpbmdJbXBsRVBLaAogX19aTjNXVEY1ZXF1YWxFUEtOU18xMFN0cmlu
Z0ltcGxFUEt0agogX19aTjNXVEY1ZXF1YWxFUEtOU18xMFN0cmluZ0ltcGxFUzJfCiBfX1pOM1dU
RjV5aWVsZEV2Ci1fX1pOM1dURjZTdHJpbmcyNmZyb21VVEY4V2l0aExhdGluMUZhbGxiYWNrRVBL
Y20KK19fWk4zV1RGNlN0cmluZzI2ZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJhY2tFUEtobQogX19a
TjNXVEY2U3RyaW5nMjljaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbkV2CitfX1pOM1dURjZT
dHJpbmdDMUVQS2NqCitfX1pOM1dURjZTdHJpbmc2YXBwZW5kRWgKIF9fWk4zV1RGNlN0cmluZzZh
cHBlbmRFUEt0agogX19aTjNXVEY2U3RyaW5nNmFwcGVuZEVSS1MwXwotX19aTjNXVEY2U3RyaW5n
NmFwcGVuZEVjCiBfX1pOM1dURjZTdHJpbmc2YXBwZW5kRXQKIF9fWk4zV1RGNlN0cmluZzZmb3Jt
YXRFUEtjegogX19aTjNXVEY2U3RyaW5nNmluc2VydEVSS1MwX2oKQEAgLTUxMywxMSArNTEwLDEw
IEBAIF9fWk4zV1RGNlN0cmluZzZudW1iZXJFdAogX19aTjNXVEY2U3RyaW5nNm51bWJlckV4CiBf
X1pOM1dURjZTdHJpbmc2bnVtYmVyRXkKIF9fWk4zV1RGNlN0cmluZzZyZW1vdmVFamkKLV9fWk4z
V1RGNlN0cmluZzhmcm9tVVRGOEVQS2MKLV9fWk4zV1RGNlN0cmluZzhmcm9tVVRGOEVQS2NtCitf
X1pOM1dURjZTdHJpbmc4ZnJvbVVURjhFUEtoCitfX1pOM1dURjZTdHJpbmc4ZnJvbVVURjhFUEto
bQogX19aTjNXVEY2U3RyaW5nOHRydW5jYXRlRWoKIF9fWk4zV1RGNlN0cmluZ0MxRVBLYwotX19a
TjNXVEY2U3RyaW5nQzFFUEtjagogX19aTjNXVEY2U3RyaW5nQzFFUEt0CiBfX1pOM1dURjZTdHJp
bmdDMUVQS3RqCiBfX1pOM1dURjZzdHJ0b2RFUEtjUFBjCkBAIC01OTEsNiArNTg3LDcgQEAgX19a
TkszSlNDOEpTU3RyaW5nMTFyZXNvbHZlUm9wZUVQTlNfOUV4ZQogX19aTkszSlNDOEpTU3RyaW5n
OXRvQm9vbGVhbkVQTlNfOUV4ZWNTdGF0ZUUKIF9fWk5LM0pTQzlIYXNoVGFibGUxMWNyZWF0ZVRh
YmxlRVBOU18xMkpTR2xvYmFsRGF0YUUKIF9fWk5LM0pTQzlIYXNoVGFibGUxMWRlbGV0ZVRhYmxl
RXYKK19fWk5LM1dURjEwU3RyaW5nSW1wbDE3Z2V0RGF0YTE2U2xvd0Nhc2VFdgogX19aTkszV1RG
MTJBdG9taWNTdHJpbmc1bG93ZXJFdgogX19aTkszV1RGMTNEZWNpbWFsTnVtYmVyMTV0b1N0cmlu
Z0RlY2ltYWxFUHRqCiBfX1pOSzNXVEYxM0RlY2ltYWxOdW1iZXIxOXRvU3RyaW5nRXhwb25lbnRp
YWxFUHRqCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvY3JlYXRlX2hhc2hfdGFibGUKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2NyZWF0ZV9oYXNoX3RhYmxlCShyZXZp
c2lvbiA5ODI4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9jcmVhdGVfaGFzaF90YWJsZQko
d29ya2luZyBjb3B5KQpAQCAtMjIxLDE0ICsyMjEsMTQgQEAgc3ViIGhhc2hWYWx1ZSgkKSB7CiAg
ICRoYXNoID0gJGhhc2glICRFWFAyXzMyOwogICAkaGFzaCBePSAobGVmdFNoaWZ0KCRoYXNoLCAx
MCklICRFWFAyXzMyKTsKIAotICAjIFNhdmUgNiBiaXRzIGZvciBTdHJpbmdJbXBsIHRvIHVzZSBh
cyBmbGFncy4KLSAgJGhhc2ggPSAoJGhhc2ggPj4gNik7CisgICMgU2F2ZSA4IGJpdHMgZm9yIFN0
cmluZ0ltcGwgdG8gdXNlIGFzIGZsYWdzLgorICAkaGFzaCAmPSAweGZmZmZmZjsKIAogICAjIFRo
aXMgYXZvaWRzIGV2ZXIgcmV0dXJuaW5nIGEgaGFzaCBjb2RlIG9mIDAsIHNpbmNlIHRoYXQgaXMg
dXNlZCB0bwogICAjIHNpZ25hbCAiaGFzaCBub3QgY29tcHV0ZWQgeWV0Ii4gU2V0dGluZyB0aGUg
aGlnaCBiaXQgbWFpbnRhaW5zCiAgICMgcmVhc29uYWJsZSBmaWRlbGl0eSB0byBhIGhhc2ggY29k
ZSBvZiAwIGJlY2F1c2UgaXQgaXMgbGlrZWx5IHRvIHlpZWxkCiAgICMgZXhhY3RseSAwIHdoZW4g
aGFzaCBsb29rdXAgbWFza3Mgb3V0IHRoZSBoaWdoIGJpdHMuCi0gICRoYXNoID0gKDB4ODAwMDAw
MDAgPj4gNikgaWYgKCRoYXNoID09IDApOworICAkaGFzaCA9ICgweDgwMDAwMDAwID4+IDgpIGlm
ICgkaGFzaCA9PSAwKTsKIAogICByZXR1cm4gJGhhc2g7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHJldmlzaW9uIDk4
Mjg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDQ1LDcgKzQ0NSw3IEBAIE5FVkVSX0lOTElORSBKU1ZhbHVl
IEludGVycHJldGVyOjpjYWxsRXYKICAgICAgICAgaWYgKCFjb2RlQmxvY2stPmlzU3RyaWN0TW9k
ZSgpKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogV2UgY2FuIHVzZSB0aGUgcHJlcGFyc2VyIGlu
IHN0cmljdCBtb2RlLCB3ZSBqdXN0IG5lZWQgYWRkaXRpb25hbCBsb2dpYwogICAgICAgICAgICAg
Ly8gdG8gcHJldmVudCBkdXBsaWNhdGVzLgotICAgICAgICAgICAgTGl0ZXJhbFBhcnNlciBwcmVw
YXJzZXIoY2FsbEZyYW1lLCBwcm9ncmFtU291cmNlLmNoYXJhY3RlcnMoKSwgcHJvZ3JhbVNvdXJj
ZS5sZW5ndGgoKSwgTGl0ZXJhbFBhcnNlcjo6Tm9uU3RyaWN0SlNPTik7CisgICAgICAgICAgICBM
aXRlcmFsUGFyc2VyIHByZXBhcnNlcihjYWxsRnJhbWUsIHByb2dyYW1Tb3VyY2UuY2hhcmFjdGVy
czE2KCksIHByb2dyYW1Tb3VyY2UubGVuZ3RoKCksIExpdGVyYWxQYXJzZXI6Ok5vblN0cmljdEpT
T04pOwogICAgICAgICAgICAgaWYgKEpTVmFsdWUgcGFyc2VkT2JqZWN0ID0gcHJlcGFyc2VyLnRy
eUxpdGVyYWxQYXJzZSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZWRPYmplY3Q7CiAg
ICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlUHJvdmlk
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJjZVBy
b3ZpZGVyLmgJKHJldmlzaW9uIDk4Mjg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9Tb3VyY2VQcm92aWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC04OCwxNyArODgsMTkgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBtX3NvdXJjZS5zdWJz
dHJpbmdTaGFyaW5nSW1wbChzdGFydCwgZW5kIC0gc3RhcnQpOwogICAgICAgICB9Ci0gICAgICAg
IGNvbnN0IFVDaGFyKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2UuY2hhcmFjdGVycygp
OyB9CisgICAgICAgIGNvbnN0IFVDaGFyKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9
CiAgICAgICAgIGludCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS5sZW5ndGgoKTsg
fQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgVVN0cmluZ1NvdXJjZVByb3ZpZGVyKGNvbnN0IFVT
dHJpbmcmIHNvdXJjZSwgY29uc3QgVVN0cmluZyYgdXJsKQogICAgICAgICAgICAgOiBTb3VyY2VQ
cm92aWRlcih1cmwpCiAgICAgICAgICAgICAsIG1fc291cmNlKHNvdXJjZSkKKyAgICAgICAgICAg
ICwgbV9kYXRhKG1fc291cmNlLmNoYXJhY3RlcnMxNigpKQogICAgICAgICB7CiAgICAgICAgIH0K
IAogICAgICAgICBVU3RyaW5nIG1fc291cmNlOworICAgICAgICBjb25zdCBVQ2hhciogbV9kYXRh
OwogICAgIH07CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuY3BwCShyZXZpc2lvbiA5ODI4NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02OCwyMyArNjgsMjMgQEAgdm9pZCBkZWxldGVJZGVudGlmaWVyVGFibGUoSWRlbnRpZmll
clRhYgogfQogCiBzdHJ1Y3QgSWRlbnRpZmllckNTdHJpbmdUcmFuc2xhdG9yIHsKLSAgICBzdGF0
aWMgdW5zaWduZWQgaGFzaChjb25zdCBjaGFyKiBjKQorICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNo
KGNvbnN0IExDaGFyKiBjKQogICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6Y29t
cHV0ZUhhc2g8Y2hhcj4oYyk7CisgICAgICAgIHJldHVybiBTdHJpbmdIYXNoZXI6OmNvbXB1dGVI
YXNoPExDaGFyPihjKTsKICAgICB9CiAKLSAgICBzdGF0aWMgYm9vbCBlcXVhbChTdHJpbmdJbXBs
KiByLCBjb25zdCBjaGFyKiBzKQorICAgIHN0YXRpYyBib29sIGVxdWFsKFN0cmluZ0ltcGwqIHIs
IGNvbnN0IExDaGFyKiBzKQogICAgIHsKICAgICAgICAgcmV0dXJuIElkZW50aWZpZXI6OmVxdWFs
KHIsIHMpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHRyYW5zbGF0ZShTdHJpbmdJbXBsKiYg
bG9jYXRpb24sIGNvbnN0IGNoYXIqIGMsIHVuc2lnbmVkIGhhc2gpCisgICAgc3RhdGljIHZvaWQg
dHJhbnNsYXRlKFN0cmluZ0ltcGwqJiBsb2NhdGlvbiwgY29uc3QgTENoYXIqIGMsIHVuc2lnbmVk
IGhhc2gpCiAgICAgewotICAgICAgICBzaXplX3QgbGVuZ3RoID0gc3RybGVuKGMpOworICAgICAg
ICBzaXplX3QgbGVuZ3RoID0gc3RybGVuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGMp
KTsKICAgICAgICAgVUNoYXIqIGQ7CiAgICAgICAgIFN0cmluZ0ltcGwqIHIgPSBTdHJpbmdJbXBs
OjpjcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgZCkubGVha1JlZigpOwogICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSAhPSBsZW5ndGg7IGkrKykKLSAgICAgICAgICAgIGRbaV0gPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihjW2ldKTsgLy8gdXNlIHVuc2lnbmVkIGNoYXIgdG8gemVy
by1leHRlbmQgaW5zdGVhZCBvZiBzaWduLWV4dGVuZAorICAgICAgICAgICAgZFtpXSA9IGNbaV07
CiAgICAgICAgIHItPnNldEhhc2goaGFzaCk7CiAgICAgICAgIGxvY2F0aW9uID0gcjsKICAgICB9
CkBAIC0xMDYsNyArMTA2LDcgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBJZGVudGlmaWVyOjph
ZGQoSgogICAgIGlmIChpdGVyICE9IGxpdGVyYWxJZGVudGlmaWVyVGFibGUuZW5kKCkpCiAgICAg
ICAgIHJldHVybiBpdGVyLT5zZWNvbmQ7CiAKLSAgICBwYWlyPEhhc2hTZXQ8U3RyaW5nSW1wbCo+
OjppdGVyYXRvciwgYm9vbD4gYWRkUmVzdWx0ID0gaWRlbnRpZmllclRhYmxlLmFkZDxjb25zdCBj
aGFyKiwgSWRlbnRpZmllckNTdHJpbmdUcmFuc2xhdG9yPihjKTsKKyAgICBwYWlyPEhhc2hTZXQ8
U3RyaW5nSW1wbCo+OjppdGVyYXRvciwgYm9vbD4gYWRkUmVzdWx0ID0gaWRlbnRpZmllclRhYmxl
LmFkZDxjb25zdCBMQ2hhciosIElkZW50aWZpZXJDU3RyaW5nVHJhbnNsYXRvcj4ocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBMQ2hhcio+KGMpKTsKIAogICAgIC8vIElmIHRoZSBzdHJpbmcgaXMgbmV3
bHktdHJhbnNsYXRlZCwgdGhlbiB3ZSBuZWVkIHRvIGFkb3B0IGl0LgogICAgIC8vIFRoZSBib29s
ZWFuIGluIHRoZSBwYWlyIHRlbGxzIHVzIGlmIHRoYXQgaXMgc28uCkBAIC0xNTQsMTIgKzE1NCwx
MyBAQCB1aW50MzJfdCBJZGVudGlmaWVyOjp0b1VJbnQzMihjb25zdCBVU3RyCiAgICAgb2sgPSBm
YWxzZTsKIAogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKLSAgICBjb25z
dCBVQ2hhciogY2hhcmFjdGVycyA9IHN0cmluZy5jaGFyYWN0ZXJzKCk7CiAKICAgICAvLyBBbiBl
bXB0eSBzdHJpbmcgaXMgbm90IGEgbnVtYmVyLgogICAgIGlmICghbGVuZ3RoKQogICAgICAgICBy
ZXR1cm4gMDsKIAorICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0gc3RyaW5nLmNoYXJhY3Rl
cnMxNigpOworCiAgICAgLy8gR2V0IHRoZSBmaXJzdCBjaGFyYWN0ZXIsIHR1cm5pbmcgaXQgaW50
byBhIGRpZ2l0LgogICAgIHVpbnQzMl90IHZhbHVlID0gY2hhcmFjdGVyc1swXSAtICcwJzsKICAg
ICBpZiAodmFsdWUgPiA5KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRl
bnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lk
ZW50aWZpZXIuaAkocmV2aXNpb24gOTgyODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JZGVudGlmaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDEwICs3MCwxMyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBJZGVudGlm
aWVyJiwgY29uc3QgSWRlbnRpZmllciYpOwogICAgICAgICBmcmllbmQgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBJZGVudGlmaWVyJik7CiAKKyAgICAgICAgZnJpZW5k
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgTENoYXIqKTsKICAgICAg
ICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgY2hhciop
OworICAgICAgICBmcmllbmQgYm9vbCBvcGVyYXRvciE9KGNvbnN0IElkZW50aWZpZXImLCBjb25z
dCBMQ2hhciopOwogICAgICAgICBmcmllbmQgYm9vbCBvcGVyYXRvciE9KGNvbnN0IElkZW50aWZp
ZXImLCBjb25zdCBjaGFyKik7CiAgICAgCi0gICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0
IFN0cmluZ0ltcGwqLCBjb25zdCBjaGFyKik7CisgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNv
bnN0IFN0cmluZ0ltcGwqLCBjb25zdCBMQ2hhciopOworICAgICAgICBzdGF0aWMgaW5saW5lIGJv
b2wgZXF1YWwoY29uc3QgU3RyaW5nSW1wbCphLCBjb25zdCBjaGFyKmIpIHsgcmV0dXJuIElkZW50
aWZpZXI6OmVxdWFsKGEsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihiKSk7IH07CiAg
ICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqLCBjb25zdCBVQ2hhcios
IHVuc2lnbmVkIGxlbmd0aCk7CiAgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFN0cmlu
Z0ltcGwqIGEsIGNvbnN0IFN0cmluZ0ltcGwqIGIpIHsgcmV0dXJuIDo6ZXF1YWwoYSwgYik7IH0K
IApAQCAtODQsNyArODcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVVN0cmluZyBtX3N0
cmluZzsKICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IElkZW50aWZp
ZXImIGEsIGNvbnN0IElkZW50aWZpZXImIGIpIHsgcmV0dXJuIGEubV9zdHJpbmcuaW1wbCgpID09
IGIubV9zdHJpbmcuaW1wbCgpOyB9Ci0gICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IElk
ZW50aWZpZXImIGEsIGNvbnN0IGNoYXIqIGIpIHsgcmV0dXJuIGVxdWFsKGEubV9zdHJpbmcuaW1w
bCgpLCBiKTsgfQorICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBJZGVudGlmaWVyJiBh
LCBjb25zdCBMQ2hhciogYikgeyByZXR1cm4gZXF1YWwoYS5tX3N0cmluZy5pbXBsKCksIGIpOyB9
CiAKICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gYWRkKEV4ZWNTdGF0ZSos
IGNvbnN0IFVDaGFyKiwgaW50IGxlbmd0aCk7CiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0
cmluZ0ltcGw+IGFkZChKU0dsb2JhbERhdGEqLCBjb25zdCBVQ2hhciosIGludCBsZW5ndGgpOwpA
QCAtMTI1LDE3ICsxMjgsMjcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVybiAhSWRl
bnRpZmllcjo6ZXF1YWwoYSwgYik7CiAgICAgfQogCi0gICAgaW5saW5lIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBJZGVudGlmaWVyJiBhLCBjb25zdCBjaGFyKiBiKQorICAgIGlubGluZSBib29sIG9w
ZXJhdG9yPT0oY29uc3QgSWRlbnRpZmllciYgYSwgY29uc3QgTENoYXIqIGIpCiAgICAgewogICAg
ICAgICByZXR1cm4gSWRlbnRpZmllcjo6ZXF1YWwoYSwgYik7CiAgICAgfQogCi0gICAgaW5saW5l
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBJZGVudGlmaWVyJiBhLCBjb25zdCBjaGFyKiBiKQorICAg
IGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgSWRlbnRpZmllciYgYSwgY29uc3QgY2hhciog
YikKKyAgICB7CisgICAgICAgIHJldHVybiBJZGVudGlmaWVyOjplcXVhbChhLCByZWludGVycHJl
dF9jYXN0PGNvbnN0IExDaGFyKj4oYikpOworICAgIH0KKyAgICAKKyAgICBpbmxpbmUgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IElkZW50aWZpZXImIGEsIGNvbnN0IExDaGFyKiBiKQogICAgIHsKICAg
ICAgICAgcmV0dXJuICFJZGVudGlmaWVyOjplcXVhbChhLCBiKTsKICAgICB9CiAKLSAgICBpbmxp
bmUgYm9vbCBJZGVudGlmaWVyOjplcXVhbChjb25zdCBTdHJpbmdJbXBsKiByLCBjb25zdCBjaGFy
KiBzKQorICAgIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgSWRlbnRpZmllciYgYSwgY29u
c3QgY2hhciogYikKKyAgICB7CisgICAgICAgIHJldHVybiAhSWRlbnRpZmllcjo6ZXF1YWwoYSwg
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KGIpKTsKKyAgICB9CisgICAgCisgICAgaW5s
aW5lIGJvb2wgSWRlbnRpZmllcjo6ZXF1YWwoY29uc3QgU3RyaW5nSW1wbCogciwgY29uc3QgTENo
YXIqIHMpCiAgICAgewogICAgICAgICByZXR1cm4gV1RGOjplcXVhbChyLCBzKTsKICAgICB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCShyZXZpc2lv
biA5ODI4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksNyBAQCB2b2lkIEpTU3RyaW5nOjpyZXNvbHZlUm9w
ZShFeGVjU3RhdGUqIGV4CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzX21heEludGVybmFs
Um9wZUxlbmd0aCAmJiBtX2ZpYmVyc1tpXTsgKytpKSB7CiAgICAgICAgIFN0cmluZ0ltcGwqIHN0
cmluZyA9IG1fZmliZXJzW2ldLT5tX3ZhbHVlLmltcGwoKTsKICAgICAgICAgdW5zaWduZWQgbGVu
Z3RoID0gc3RyaW5nLT5sZW5ndGgoKTsKLSAgICAgICAgU3RyaW5nSW1wbDo6Y29weUNoYXJzKHBv
c2l0aW9uLCBzdHJpbmctPmNoYXJhY3RlcnMoKSwgbGVuZ3RoKTsKKyAgICAgICAgU3RyaW5nSW1w
bDo6Y29weUNoYXJzKHBvc2l0aW9uLCBzdHJpbmctPmNoYXJhY3RlcnMxNigpLCBsZW5ndGgpOwog
ICAgICAgICBwb3NpdGlvbiArPSBsZW5ndGg7CiAgICAgICAgIG1fZmliZXJzW2ldLmNsZWFyKCk7
CiAgICAgfQpAQCAtMTIwLDcgKzEyMCw3IEBAIHZvaWQgSlNTdHJpbmc6OnJlc29sdmVSb3BlU2xv
d0Nhc2UoRXhlY1MKICAgICAgICAgU3RyaW5nSW1wbCogc3RyaW5nID0gc3RhdGljX2Nhc3Q8U3Ry
aW5nSW1wbCo+KGN1cnJlbnRGaWJlci0+bV92YWx1ZS5pbXBsKCkpOwogICAgICAgICB1bnNpZ25l
ZCBsZW5ndGggPSBzdHJpbmctPmxlbmd0aCgpOwogICAgICAgICBwb3NpdGlvbiAtPSBsZW5ndGg7
Ci0gICAgICAgIFN0cmluZ0ltcGw6OmNvcHlDaGFycyhwb3NpdGlvbiwgc3RyaW5nLT5jaGFyYWN0
ZXJzKCksIGxlbmd0aCk7CisgICAgICAgIFN0cmluZ0ltcGw6OmNvcHlDaGFycyhwb3NpdGlvbiwg
c3RyaW5nLT5jaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoKTsKICAgICB9CiAKICAgICBBU1NFUlQoYnVm
ZmVyID09IHBvc2l0aW9uKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Jl
Z0V4cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVn
RXhwLmNwcAkocmV2aXNpb24gOTgyODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9SZWdFeHAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjYsOSArMzY2LDkgQEAgaW50IFJlZ0V4
cDo6bWF0Y2goSlNHbG9iYWxEYXRhJiBnbG9iYWxEYQogI2lmIEVOQUJMRShZQVJSX0pJVCkKICAg
ICAgICAgaWYgKG1fc3RhdGUgPT0gSklUQ29kZSkgewogICAgICAgICAgICAgaWYgKHMuaXM4Qml0
KCkpCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gWWFycjo6ZXhlY3V0ZShtX3JlcHJlc2VudGF0
aW9uLT5tX3JlZ0V4cEpJVENvZGUsIHMubGF0aW4xKCkuZGF0YSgpLCBzdGFydE9mZnNldCwgcy5s
ZW5ndGgoKSwgb2Zmc2V0VmVjdG9yKTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBZYXJyOjpl
eGVjdXRlKG1fcmVwcmVzZW50YXRpb24tPm1fcmVnRXhwSklUQ29kZSwgcy5jaGFyYWN0ZXJzOCgp
LCBzdGFydE9mZnNldCwgcy5sZW5ndGgoKSwgb2Zmc2V0VmVjdG9yKTsKICAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBZYXJyOjpleGVjdXRlKG1fcmVwcmVzZW50YXRp
b24tPm1fcmVnRXhwSklUQ29kZSwgcy5jaGFyYWN0ZXJzKCksIHN0YXJ0T2Zmc2V0LCBzLmxlbmd0
aCgpLCBvZmZzZXRWZWN0b3IpOworICAgICAgICAgICAgICAgIHJlc3VsdCA9IFlhcnI6OmV4ZWN1
dGUobV9yZXByZXNlbnRhdGlvbi0+bV9yZWdFeHBKSVRDb2RlLCBzLmNoYXJhY3RlcnMxNigpLCBz
dGFydE9mZnNldCwgcy5sZW5ndGgoKSwgb2Zmc2V0VmVjdG9yKTsKICNpZiBFTkFCTEUoWUFSUl9K
SVRfREVCVUcpCiAgICAgICAgICAgICBtYXRjaENvbXBhcmVXaXRoSW50ZXJwcmV0ZXIocywgc3Rh
cnRPZmZzZXQsIG9mZnNldFZlY3RvciwgcmVzdWx0KTsKICNlbmRpZgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCShyZXZpc2lv
biA5ODI4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlw
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzNSwxMyArMzM1LDEzIEBAIHN0YXRpYyBBTFdBWVNf
SU5MSU5FIEpTVmFsdWUganNTcGxpY2VTdWIKICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1heENv
dW50OyBpKyspIHsKICAgICAgICAgaWYgKGkgPCByYW5nZUNvdW50KSB7CiAgICAgICAgICAgICBp
ZiAoaW50IHNyY0xlbiA9IHN1YnN0cmluZ1Jhbmdlc1tpXS5sZW5ndGgpIHsKLSAgICAgICAgICAg
ICAgICBTdHJpbmdJbXBsOjpjb3B5Q2hhcnMoYnVmZmVyICsgYnVmZmVyUG9zLCBzb3VyY2UuY2hh
cmFjdGVycygpICsgc3Vic3RyaW5nUmFuZ2VzW2ldLnBvc2l0aW9uLCBzcmNMZW4pOworICAgICAg
ICAgICAgICAgIFN0cmluZ0ltcGw6OmNvcHlDaGFycyhidWZmZXIgKyBidWZmZXJQb3MsIHNvdXJj
ZS5jaGFyYWN0ZXJzMTYoKSArIHN1YnN0cmluZ1Jhbmdlc1tpXS5wb3NpdGlvbiwgc3JjTGVuKTsK
ICAgICAgICAgICAgICAgICBidWZmZXJQb3MgKz0gc3JjTGVuOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgICAgIGlmIChpIDwgc2VwYXJhdG9yQ291bnQpIHsKICAgICAgICAgICAgIGlm
IChpbnQgc2VwTGVuID0gc2VwYXJhdG9yc1tpXS5sZW5ndGgoKSkgewotICAgICAgICAgICAgICAg
IFN0cmluZ0ltcGw6OmNvcHlDaGFycyhidWZmZXIgKyBidWZmZXJQb3MsIHNlcGFyYXRvcnNbaV0u
Y2hhcmFjdGVycygpLCBzZXBMZW4pOworICAgICAgICAgICAgICAgIFN0cmluZ0ltcGw6OmNvcHlD
aGFycyhidWZmZXIgKyBidWZmZXJQb3MsIHNlcGFyYXRvcnNbaV0uY2hhcmFjdGVyczE2KCksIHNl
cExlbik7CiAgICAgICAgICAgICAgICAgYnVmZmVyUG9zICs9IHNlcExlbjsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmlu
Zy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmlu
Zy5jcHAJKHJldmlzaW9uIDk4Mjg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
VVN0cmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDE3ICs3MywyNyBAQCBVU3RyaW5nOjpV
U3RyaW5nKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzCiB9CiAKIC8vIENvbnN0cnVjdCBhIHN0cmlu
ZyB3aXRoIGxhdGluMSBkYXRhLgotVVN0cmluZzo6VVN0cmluZyhjb25zdCBjaGFyKiBjaGFyYWN0
ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCitVU3RyaW5nOjpVU3RyaW5nKGNvbnN0IExDaGFyKiBjaGFy
YWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCiAgICAgOiBtX2ltcGwoY2hhcmFjdGVycyA/IFN0cmlu
Z0ltcGw6OmNyZWF0ZShjaGFyYWN0ZXJzLCBsZW5ndGgpIDogMCkKIHsKIH0KIAorVVN0cmluZzo6
VVN0cmluZyhjb25zdCBjaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCisgICAgOiBt
X2ltcGwoY2hhcmFjdGVycyA/IFN0cmluZ0ltcGw6OmNyZWF0ZShyZWludGVycHJldF9jYXN0PGNv
bnN0IExDaGFyKj4oY2hhcmFjdGVycyksIGxlbmd0aCkgOiAwKQoreworfQorCiAvLyBDb25zdHJ1
Y3QgYSBzdHJpbmcgd2l0aCBsYXRpbjEgZGF0YSwgZnJvbSBhIG51bGwtdGVybWluYXRlZCBzb3Vy
Y2UuCi1VU3RyaW5nOjpVU3RyaW5nKGNvbnN0IGNoYXIqIGNoYXJhY3RlcnMpCitVU3RyaW5nOjpV
U3RyaW5nKGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzKQogICAgIDogbV9pbXBsKGNoYXJhY3RlcnMg
PyBTdHJpbmdJbXBsOjpjcmVhdGUoY2hhcmFjdGVycykgOiAwKQogewogfQogCitVU3RyaW5nOjpV
U3RyaW5nKGNvbnN0IGNoYXIqIGNoYXJhY3RlcnMpCisgICAgOiBtX2ltcGwoY2hhcmFjdGVycyA/
IFN0cmluZ0ltcGw6OmNyZWF0ZShyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oY2hhcmFj
dGVycykpIDogMCkKK3sKK30KKwogVVN0cmluZyBVU3RyaW5nOjpudW1iZXIoaW50IGkpCiB7CiAg
ICAgVUNoYXIgYnVmWzEgKyBzaXplb2YoaSkgKiAzXTsKQEAgLTMxNyw3ICszMjcsOSBAQCBzdGF0
aWMgaW5saW5lIHZvaWQgcHV0VVRGOFRyaXBsZShjaGFyKiYgCiBDU3RyaW5nIFVTdHJpbmc6OnV0
ZjgoYm9vbCBzdHJpY3QpIGNvbnN0CiB7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gdGhpcy0+bGVu
Z3RoKCk7Ci0gICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSB0aGlzLT5jaGFyYWN0ZXJzKCk7
CisKKyAgICBpZiAoaXM4Qml0KCkpCisgICAgICAgIHJldHVybiBDU3RyaW5nKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgY2hhcio+KGNoYXJhY3RlcnM4KCkpLCBsZW5ndGgpOwogCiAgICAgLy8gQWxs
b2NhdGUgYSBidWZmZXIgYmlnIGVub3VnaCB0byBob2xkIGFsbCB0aGUgY2hhcmFjdGVycwogICAg
IC8vIChhbiBpbmRpdmlkdWFsIFVURi0xNiBVQ2hhciBjYW4gb25seSBleHBhbmQgdG8gMyBVVEYt
OCBieXRlcykuCkBAIC0zMzEsNiArMzQzLDggQEAgQ1N0cmluZyBVU3RyaW5nOjp1dGY4KGJvb2wg
c3RyaWN0KSBjb25zdAogICAgIC8vICAgIGJ1ZmZlciB3aXRob3V0IHJlYWxsb2NpbmcgKHNheSwg
MS41IHggbGVuZ3RoKS4KICAgICBpZiAobGVuZ3RoID4gbnVtZXJpY19saW1pdHM8dW5zaWduZWQ+
OjptYXgoKSAvIDMpCiAgICAgICAgIHJldHVybiBDU3RyaW5nKCk7CisKKyAgICBjb25zdCBVQ2hh
ciogY2hhcmFjdGVycyA9IHRoaXMtPmNoYXJhY3RlcnMxNigpOwogICAgIFZlY3RvcjxjaGFyLCAx
MDI0PiBidWZmZXJWZWN0b3IobGVuZ3RoICogMyk7CiAKICAgICBjaGFyKiBidWZmZXIgPSBidWZm
ZXJWZWN0b3IuZGF0YSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0
cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VTdHJp
bmcuaAkocmV2aXNpb24gOTgyODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9V
U3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDkgKzM5LDExIEBAIHB1YmxpYzoKICAgICBV
U3RyaW5nKGNvbnN0IFVDaGFyKik7CiAKICAgICAvLyBDb25zdHJ1Y3QgYSBzdHJpbmcgd2l0aCBs
YXRpbjEgZGF0YS4KKyAgICBVU3RyaW5nKGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25l
ZCBsZW5ndGgpOwogICAgIFVTdHJpbmcoY29uc3QgY2hhciogY2hhcmFjdGVycywgdW5zaWduZWQg
bGVuZ3RoKTsKIAogICAgIC8vIENvbnN0cnVjdCBhIHN0cmluZyB3aXRoIGxhdGluMSBkYXRhLCBm
cm9tIGEgbnVsbC10ZXJtaW5hdGVkIHNvdXJjZS4KKyAgICBVU3RyaW5nKGNvbnN0IExDaGFyKiBj
aGFyYWN0ZXJzKTsKICAgICBVU3RyaW5nKGNvbnN0IGNoYXIqIGNoYXJhY3RlcnMpOwogCiAgICAg
Ly8gQ29uc3RydWN0IGEgc3RyaW5nIHJlZmVyZW5jaW5nIGFuIGV4aXN0aW5nIFN0cmluZ0ltcGwu
CkBAIC03MywxMCArNzUsMjYgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKCFtX2ltcGwp
CiAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuIG1faW1wbC0+Y2hhcmFjdGVy
cygpOworICAgICAgICByZXR1cm4gbV9pbXBsLT5jaGFyYWN0ZXJzMTYoKTsKICAgICB9CiAKLSAg
ICBib29sIGlzOEJpdCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgY29uc3QgTENoYXIq
IGNoYXJhY3RlcnM4KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghbV9pbXBsKQorICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgIEFTU0VSVChtX2ltcGwtPmlzOEJpdCgpKTsKKyAgICAg
ICAgcmV0dXJuIG1faW1wbC0+Y2hhcmFjdGVyczgoKTsKKyAgICB9CisKKyAgICBjb25zdCBVQ2hh
ciogY2hhcmFjdGVyczE2KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghbV9pbXBsKQorICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIEFTU0VSVCghbV9pbXBsLT5pczhCaXQoKSk7Cisg
ICAgICAgIHJldHVybiBtX2ltcGwtPmNoYXJhY3RlcnMxNigpOworICAgIH0KKworICAgIGJvb2wg
aXM4Qml0KCkgY29uc3QgeyByZXR1cm4gbV9pbXBsLT5pczhCaXQoKTsgfQogCiAgICAgQ1N0cmlu
ZyBhc2NpaSgpIGNvbnN0OwogICAgIENTdHJpbmcgbGF0aW4xKCkgY29uc3Q7CkBAIC04Niw3ICsx
MDQsOSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAoIW1faW1wbCB8fCBpbmRleCA+PSBt
X2ltcGwtPmxlbmd0aCgpKQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiBt
X2ltcGwtPmNoYXJhY3RlcnMoKVtpbmRleF07CisgICAgICAgIGlmIChpczhCaXQoKSkKKyAgICAg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihtX2ltcGwtPmNoYXJhY3Rl
cnM4KClbaW5kZXhdKTsKKyAgICAgICAgcmV0dXJuIG1faW1wbC0+Y2hhcmFjdGVyczE2KClbaW5k
ZXhdOwogICAgIH0KIAogICAgIHN0YXRpYyBVU3RyaW5nIG51bWJlcihpbnQpOwpAQCAtMTAwLDcg
KzEyMCw3IEBAIHB1YmxpYzoKICAgICAgICAgeyByZXR1cm4gbV9pbXBsID8gbV9pbXBsLT5maW5k
KGMsIHN0YXJ0KSA6IG5vdEZvdW5kOyB9CiAgICAgc2l6ZV90IGZpbmQoY29uc3QgVVN0cmluZyYg
c3RyLCB1bnNpZ25lZCBzdGFydCA9IDApIGNvbnN0CiAgICAgICAgIHsgcmV0dXJuIG1faW1wbCA/
IG1faW1wbC0+ZmluZChzdHIuaW1wbCgpLCBzdGFydCkgOiBub3RGb3VuZDsgfQotICAgIHNpemVf
dCBmaW5kKGNvbnN0IGNoYXIqIHN0ciwgdW5zaWduZWQgc3RhcnQgPSAwKSBjb25zdAorICAgIHNp
emVfdCBmaW5kKGNvbnN0IExDaGFyKiBzdHIsIHVuc2lnbmVkIHN0YXJ0ID0gMCkgY29uc3QKICAg
ICAgICAgeyByZXR1cm4gbV9pbXBsID8gbV9pbXBsLT5maW5kKHN0ciwgc3RhcnQpIDogbm90Rm91
bmQ7IH0KIAogICAgIC8vIEZpbmQgdGhlIGxhc3QgaW5zdGFuY2Ugb2YgYSBzaW5nbGUgY2hhcmFj
dGVyIG9yIHN0cmluZy4KQEAgLTEyNCwyOCArMTQ0LDY4IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IFVTdHIKIAogICAgIGlmIChyZXAxID09IHJlcDIpIC8vIElmIHRoZXkn
cmUgdGhlIHNhbWUgcmVwLCB0aGV5J3JlIGVxdWFsLgogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAKKwogICAgIGlmIChyZXAxKQogICAgICAgICBzaXplMSA9IHJlcDEtPmxlbmd0aCgpOwotICAg
ICAgICAKKwogICAgIGlmIChyZXAyKQogICAgICAgICBzaXplMiA9IHJlcDItPmxlbmd0aCgpOwot
ICAgICAgICAKKwogICAgIGlmIChzaXplMSAhPSBzaXplMikgLy8gSWYgdGhlIGxlbmd0aHMgYXJl
IG5vdCB0aGUgc2FtZSwgd2UncmUgZG9uZS4KICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAor
CiAgICAgaWYgKCFzaXplMSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCisKICAgICAvLyBB
dCB0aGlzIHBvaW50IHdlIGtub3cgCiAgICAgLy8gICAoYSkgdGhhdCB0aGUgc3RyaW5ncyBhcmUg
dGhlIHNhbWUgbGVuZ3RoIGFuZAogICAgIC8vICAgKGIpIHRoYXQgdGhleSBhcmUgZ3JlYXRlciB0
aGFuIHplcm8gbGVuZ3RoLgotICAgIGNvbnN0IFVDaGFyKiBkMSA9IHJlcDEtPmNoYXJhY3RlcnMo
KTsKLSAgICBjb25zdCBVQ2hhciogZDIgPSByZXAyLT5jaGFyYWN0ZXJzKCk7Ci0gICAgCisgICAg
aWYgKHJlcDEtPmlzOEJpdCgpKSB7CisgICAgICAgIGNvbnN0IExDaGFyKiBkMSA9IHJlcDEtPmNo
YXJhY3RlcnM4KCk7CisgICAgICAgIGlmIChyZXAyLT5pczhCaXQoKSkgeworICAgICAgICAgICAg
Y29uc3QgTENoYXIqIGQyID0gcmVwMi0+Y2hhcmFjdGVyczgoKTsKKworICAgICAgICAgICAgaWYg
KGQxID09IGQyKSAvLyBDaGVjayB0byBzZWUgaWYgdGhlIGRhdGEgcG9pbnRlcnMgYXJlIHRoZSBz
YW1lLgorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgICAgICAvLyBEbyBx
dWljayBjaGVja3MgZm9yIHNpemVzIDEgYW5kIDIuCisgICAgICAgICAgICBzd2l0Y2ggKHNpemUx
KSB7CisgICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgcmV0dXJuIGQxWzBdID09
IGQyWzBdOworICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgIHJldHVybiAoZDFb
MF0gPT0gZDJbMF0pICYgKGQxWzFdID09IGQyWzFdKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuICghbWVtY21wKGQxLCBkMiwgc2l6ZTEgKiBzaXplb2YoY2hh
cikpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IFVDaGFyKiBk
MiA9IHJlcDItPmNoYXJhY3RlcnMxNigpOworCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBzaXplMTsgaSsrKSB7CisgICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQg
Y2hhcj4oZDFbaV0pICE9IGQyW2ldKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAocmVwMi0+aXM4
Qml0KCkpIHsKKyAgICAgICAgY29uc3QgVUNoYXIqIGQxID0gcmVwMS0+Y2hhcmFjdGVyczE2KCk7
CisgICAgICAgIGNvbnN0IExDaGFyKiBkMiA9IHJlcDItPmNoYXJhY3RlcnM4KCk7CisKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemUxOyBpKyspIHsKKyAgICAgICAgICAgIGlm
IChkMVtpXSAhPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihkMltpXSkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgfQorCisgICAgY29uc3QgVUNoYXIqIGQxID0gcmVwMS0+Y2hhcmFjdGVyczE2KCk7CisgICAg
Y29uc3QgVUNoYXIqIGQyID0gcmVwMi0+Y2hhcmFjdGVyczE2KCk7CisKICAgICBpZiAoZDEgPT0g
ZDIpIC8vIENoZWNrIHRvIHNlZSBpZiB0aGUgZGF0YSBwb2ludGVycyBhcmUgdGhlIHNhbWUuCiAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgIAorCiAgICAgLy8gRG8gcXVpY2sgY2hlY2tzIGZvciBz
aXplcyAxIGFuZCAyLgogICAgIHN3aXRjaCAoc2l6ZTEpIHsKICAgICBjYXNlIDE6CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1N0cmluZ0hhc2hlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvU3RyaW5nSGFzaGVyLmgJKHJldmlzaW9uIDk4Mjg1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9TdHJpbmdIYXNoZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMzYsNyArMzYsNyBAQCBzdGF0aWMgY29uc3QgdW5zaWduZWQgc3RyaW5nSGFzaGluZ1N0
YXJ0CiAvLyBKYXZhU2NyaXB0Q29yZSBhbmQgdGhlIENvZGVHZW5lcmF0b3JKUy5wbSBzY3JpcHQg
aW4gV2ViQ29yZS4KIGNsYXNzIFN0cmluZ0hhc2hlciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIGZsYWdDb3VudCA9IDY7IC8vIFNhdmUgNiBiaXRzIGZvciBTdHJpbmdJbXBs
IHRvIHVzZSBhcyBmbGFncy4KKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZmxhZ0NvdW50ID0g
ODsgLy8gU2F2ZSA4IGJpdHMgZm9yIFN0cmluZ0ltcGwgdG8gdXNlIGFzIGZsYWdzLgogCiAgICAg
aW5saW5lIFN0cmluZ0hhc2hlcigpCiAgICAgICAgIDogbV9oYXNoKHN0cmluZ0hhc2hpbmdTdGFy
dFZhbHVlKQpAQCAtODMsNyArODMsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgLy8gUmVzZXJ2aW5n
IHRoZSBoaWdoIGJpdHMgZm9yIGZsYWdzIHByZXNlcnZlcyBtb3N0IG9mIHRoZSBoYXNoJ3MgdmFs
dWUsCiAgICAgICAgIC8vIHNpbmNlIGhhc2ggbG9va3VwIHR5cGljYWxseSBtYXNrcyBvdXQgdGhl
IGhpZ2ggYml0cyBhbnl3YXkuCi0gICAgICAgIHJlc3VsdCA+Pj0gZmxhZ0NvdW50OworICAgICAg
ICByZXN1bHQgJj0gKCgxdSA8PCAoKHNpemVvZihyZXN1bHQpICogOCkgLSBmbGFnQ291bnQpKSAt
IDEpOwogCiAgICAgICAgIC8vIFRoaXMgYXZvaWRzIGV2ZXIgcmV0dXJuaW5nIGEgaGFzaCBjb2Rl
IG9mIDAsIHNpbmNlIHRoYXQgaXMgdXNlZCB0bwogICAgICAgICAvLyBzaWduYWwgImhhc2ggbm90
IGNvbXB1dGVkIHlldCIuIFNldHRpbmcgdGhlIGhpZ2ggYml0IG1haW50YWlucwpAQCAtMTYwLDkg
KzE2MCw5IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBjaDsKICAgICB9CiAKLSAgICBzdGF0
aWMgaW5saW5lIFVDaGFyIGRlZmF1bHRDb3ZlcnRlcihjaGFyIGNoKQorICAgIHN0YXRpYyBpbmxp
bmUgVUNoYXIgZGVmYXVsdENvdmVydGVyKExDaGFyIGNoKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGNoKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PFVDaGFyPihjaCk7CiAgICAgfQogCiAgICAgaW5saW5lIHZvaWQgYWRkQ2hhcmFjdGVyc1Rv
SGFzaChVQ2hhciBhLCBVQ2hhciBiKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90
ZXh0L0F0b21pY1N0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi90ZXh0L0F0b21pY1N0cmluZy5jcHAJKHJldmlzaW9uIDk4Mjg1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3d0Zi90ZXh0L0F0b21pY1N0cmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTg1LDE3ICs4NSwxNyBAQCBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gYWRk
CiB9CiAKIHN0cnVjdCBDU3RyaW5nVHJhbnNsYXRvciB7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGhh
c2goY29uc3QgY2hhciogYykKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBMQ2hhciog
YykKICAgICB7CiAgICAgICAgIHJldHVybiBTdHJpbmdIYXNoZXI6OmNvbXB1dGVIYXNoKGMpOwog
ICAgIH0KIAotICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBlcXVhbChTdHJpbmdJbXBsKiByLCBjb25z
dCBjaGFyKiBzKQorICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBlcXVhbChTdHJpbmdJbXBsKiByLCBj
b25zdCBMQ2hhciogcykKICAgICB7CiAgICAgICAgIHJldHVybiBXVEY6OmVxdWFsKHIsIHMpOwog
ICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHRyYW5zbGF0ZShTdHJpbmdJbXBsKiYgbG9jYXRpb24s
IGNvbnN0IGNoYXIqIGNvbnN0JiBjLCB1bnNpZ25lZCBoYXNoKQorICAgIHN0YXRpYyB2b2lkIHRy
YW5zbGF0ZShTdHJpbmdJbXBsKiYgbG9jYXRpb24sIGNvbnN0IExDaGFyKiBjb25zdCYgYywgdW5z
aWduZWQgaGFzaCkKICAgICB7CiAgICAgICAgIGxvY2F0aW9uID0gU3RyaW5nSW1wbDo6Y3JlYXRl
KGMpLmxlYWtSZWYoKTsKICAgICAgICAgbG9jYXRpb24tPnNldEhhc2goaGFzaCk7CkBAIC0xMDMs
MTQgKzEwMywxNCBAQCBzdHJ1Y3QgQ1N0cmluZ1RyYW5zbGF0b3IgewogICAgIH0KIH07CiAKLVBh
c3NSZWZQdHI8U3RyaW5nSW1wbD4gQXRvbWljU3RyaW5nOjphZGQoY29uc3QgY2hhciogYykKK1Bh
c3NSZWZQdHI8U3RyaW5nSW1wbD4gQXRvbWljU3RyaW5nOjphZGQoY29uc3QgTENoYXIqIGMpCiB7
CiAgICAgaWYgKCFjKQogICAgICAgICByZXR1cm4gMDsKICAgICBpZiAoISpjKQogICAgICAgICBy
ZXR1cm4gU3RyaW5nSW1wbDo6ZW1wdHkoKTsKIAotICAgIHJldHVybiBhZGRUb1N0cmluZ1RhYmxl
PGNvbnN0IGNoYXIqLCBDU3RyaW5nVHJhbnNsYXRvcj4oYyk7CisgICAgcmV0dXJuIGFkZFRvU3Ry
aW5nVGFibGU8Y29uc3QgTENoYXIqLCBDU3RyaW5nVHJhbnNsYXRvcj4oYyk7CiB9CiAKIHN0cnVj
dCBVQ2hhckJ1ZmZlciB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvQXRv
bWljU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0
L0F0b21pY1N0cmluZy5oCShyZXZpc2lvbiA5ODI4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvdGV4dC9BdG9taWNTdHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBA
QCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgaW5pdCgpOwogCiAgICAgQXRvbWljU3RyaW5nKCkg
eyB9CisgICAgQXRvbWljU3RyaW5nKGNvbnN0IExDaGFyKiBzKSA6IG1fc3RyaW5nKGFkZChzKSkg
eyB9CiAgICAgQXRvbWljU3RyaW5nKGNvbnN0IGNoYXIqIHMpIDogbV9zdHJpbmcoYWRkKHMpKSB7
IH0KICAgICBBdG9taWNTdHJpbmcoY29uc3QgVUNoYXIqIHMsIHVuc2lnbmVkIGxlbmd0aCkgOiBt
X3N0cmluZyhhZGQocywgbGVuZ3RoKSkgeyB9CiAgICAgQXRvbWljU3RyaW5nKGNvbnN0IFVDaGFy
KiBzLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIGV4aXN0aW5nSGFzaCkgOiBtX3N0cmluZyhh
ZGQocywgbGVuZ3RoLCBleGlzdGluZ0hhc2gpKSB7IH0KQEAgLTY2LDEzICs2NywxMyBAQCBwdWJs
aWM6CiAgICAgVUNoYXIgb3BlcmF0b3JbXSh1bnNpZ25lZCBpbnQgaSkgY29uc3QgeyByZXR1cm4g
bV9zdHJpbmdbaV07IH0KICAgICAKICAgICBib29sIGNvbnRhaW5zKFVDaGFyIGMpIGNvbnN0IHsg
cmV0dXJuIG1fc3RyaW5nLmNvbnRhaW5zKGMpOyB9Ci0gICAgYm9vbCBjb250YWlucyhjb25zdCBj
aGFyKiBzLCBib29sIGNhc2VTZW5zaXRpdmUgPSB0cnVlKSBjb25zdAorICAgIGJvb2wgY29udGFp
bnMoY29uc3QgTENoYXIqIHMsIGJvb2wgY2FzZVNlbnNpdGl2ZSA9IHRydWUpIGNvbnN0CiAgICAg
ICAgIHsgcmV0dXJuIG1fc3RyaW5nLmNvbnRhaW5zKHMsIGNhc2VTZW5zaXRpdmUpOyB9CiAgICAg
Ym9vbCBjb250YWlucyhjb25zdCBTdHJpbmcmIHMsIGJvb2wgY2FzZVNlbnNpdGl2ZSA9IHRydWUp
IGNvbnN0CiAgICAgICAgIHsgcmV0dXJuIG1fc3RyaW5nLmNvbnRhaW5zKHMsIGNhc2VTZW5zaXRp
dmUpOyB9CiAKICAgICBzaXplX3QgZmluZChVQ2hhciBjLCBzaXplX3Qgc3RhcnQgPSAwKSBjb25z
dCB7IHJldHVybiBtX3N0cmluZy5maW5kKGMsIHN0YXJ0KTsgfQotICAgIHNpemVfdCBmaW5kKGNv
bnN0IGNoYXIqIHMsIHNpemVfdCBzdGFydCA9IDAsIGJvb2wgY2FzZVNlbnRpdGl2ZSA9IHRydWUp
IGNvbnN0CisgICAgc2l6ZV90IGZpbmQoY29uc3QgTENoYXIqIHMsIHNpemVfdCBzdGFydCA9IDAs
IGJvb2wgY2FzZVNlbnRpdGl2ZSA9IHRydWUpIGNvbnN0CiAgICAgICAgIHsgcmV0dXJuIG1fc3Ry
aW5nLmZpbmQocywgc3RhcnQsIGNhc2VTZW50aXRpdmUpOyB9CiAgICAgc2l6ZV90IGZpbmQoY29u
c3QgU3RyaW5nJiBzLCBzaXplX3Qgc3RhcnQgPSAwLCBib29sIGNhc2VTZW50aXRpdmUgPSB0cnVl
KSBjb25zdAogICAgICAgICB7IHJldHVybiBtX3N0cmluZy5maW5kKHMsIHN0YXJ0LCBjYXNlU2Vu
dGl0aXZlKTsgfQpAQCAtMTE5LDggKzEyMCwxMCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFN0
cmluZyBtX3N0cmluZzsKICAgICAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBh
ZGQoY29uc3QgY2hhciopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGFkZChj
b25zdCBMQ2hhciopOworICAgIEFMV0FZU19JTkxJTkUgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5n
SW1wbD4gYWRkKGNvbnN0IGNoYXIqIHMpIHsgcmV0dXJuIGFkZChyZWludGVycHJldF9jYXN0PGNv
bnN0IExDaGFyKj4ocykpOyB9OwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGFk
ZChjb25zdCBVQ2hhciosIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgQUxXQVlTX0lOTElORSBzdGF0
aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBhZGQoY29uc3QgY2hhciogcywgdW5zaWduZWQgbGVu
Z3RoKSB7IHJldHVybiBhZGQocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4ocyksIGxlbmd0
aCk7IH07CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gYWRkKGNvbnN0IFVDaGFy
KiwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBleGlzdGluZ0hhc2gpOwogICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFN0cmluZ0ltcGw+IGFkZChjb25zdCBVQ2hhciopOwogICAgIEFMV0FZU19JTkxJ
TkUgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBhZGQoU3RyaW5nSW1wbCogcikKQEAgLTEzNCwyNiAr
MTM3LDI5IEBAIHByaXZhdGU6CiB9OwogCiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEF0
b21pY1N0cmluZyYgYSwgY29uc3QgQXRvbWljU3RyaW5nJiBiKSB7IHJldHVybiBhLmltcGwoKSA9
PSBiLmltcGwoKTsgfQotYm9vbCBvcGVyYXRvcj09KGNvbnN0IEF0b21pY1N0cmluZyYgYSwgY29u
c3QgY2hhciogYik7Ci1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEF0b21pY1N0cmluZyYg
YSwgY29uc3QgY2hhciogYikgeyByZXR1cm4gV1RGOjplcXVhbChhLmltcGwoKSwgYik7IH0KK2Jv
b2wgb3BlcmF0b3I9PShjb25zdCBBdG9taWNTdHJpbmcmLCBjb25zdCBMQ2hhciopOworaW5saW5l
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBBdG9taWNTdHJpbmcmIGEsIGNvbnN0IGNoYXIqIGIpIHsg
cmV0dXJuIFdURjo6ZXF1YWwoYS5pbXBsKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIq
PihiKSk7IH0KIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgQXRvbWljU3RyaW5nJiBhLCBj
b25zdCBWZWN0b3I8VUNoYXI+JiBiKSB7IHJldHVybiBhLmltcGwoKSAmJiBlcXVhbChhLmltcGwo
KSwgYi5kYXRhKCksIGIuc2l6ZSgpKTsgfSAgICAKIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29u
c3QgQXRvbWljU3RyaW5nJiBhLCBjb25zdCBTdHJpbmcmIGIpIHsgcmV0dXJuIGVxdWFsKGEuaW1w
bCgpLCBiLmltcGwoKSk7IH0KLWlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgY2hhciogYSwg
Y29uc3QgQXRvbWljU3RyaW5nJiBiKSB7IHJldHVybiBiID09IGE7IH0KK2lubGluZSBib29sIG9w
ZXJhdG9yPT0oY29uc3QgTENoYXIqIGEsIGNvbnN0IEF0b21pY1N0cmluZyYgYikgeyByZXR1cm4g
YiA9PSBhOyB9CiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFN0cmluZyYgYSwgY29uc3Qg
QXRvbWljU3RyaW5nJiBiKSB7IHJldHVybiBlcXVhbChhLmltcGwoKSwgYi5pbXBsKCkpOyB9CiBp
bmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFZlY3RvcjxVQ2hhcj4mIGEsIGNvbnN0IEF0b21p
Y1N0cmluZyYgYikgeyByZXR1cm4gYiA9PSBhOyB9CiAKIGlubGluZSBib29sIG9wZXJhdG9yIT0o
Y29uc3QgQXRvbWljU3RyaW5nJiBhLCBjb25zdCBBdG9taWNTdHJpbmcmIGIpIHsgcmV0dXJuIGEu
aW1wbCgpICE9IGIuaW1wbCgpOyB9Ci1pbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEF0b21p
Y1N0cmluZyYgYSwgY29uc3QgY2hhciAqYikgeyByZXR1cm4gIShhID09IGIpOyB9CitpbmxpbmUg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IEF0b21pY1N0cmluZyYgYSwgY29uc3QgTENoYXIqIGIpIHsg
cmV0dXJuICEoYSA9PSBiKTsgfQoraW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBBdG9taWNT
dHJpbmcmIGEsIGNvbnN0IGNoYXIqIGIpIHsgcmV0dXJuICEoYSA9PSBiKTsgfQogaW5saW5lIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBBdG9taWNTdHJpbmcmIGEsIGNvbnN0IFN0cmluZyYgYikgeyBy
ZXR1cm4gIWVxdWFsKGEuaW1wbCgpLCBiLmltcGwoKSk7IH0KIGlubGluZSBib29sIG9wZXJhdG9y
IT0oY29uc3QgQXRvbWljU3RyaW5nJiBhLCBjb25zdCBWZWN0b3I8VUNoYXI+JiBiKSB7IHJldHVy
biAhKGEgPT0gYik7IH0KLWlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgY2hhciogYSwgY29u
c3QgQXRvbWljU3RyaW5nJiBiKSB7IHJldHVybiAhKGIgPT0gYSk7IH0KK2lubGluZSBib29sIG9w
ZXJhdG9yIT0oY29uc3QgTENoYXIqIGEsIGNvbnN0IEF0b21pY1N0cmluZyYgYikgeyByZXR1cm4g
IShiID09IGEpOyB9CiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFN0cmluZyYgYSwgY29u
c3QgQXRvbWljU3RyaW5nJiBiKSB7IHJldHVybiAhZXF1YWwoYS5pbXBsKCksIGIuaW1wbCgpKTsg
fQogaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBWZWN0b3I8VUNoYXI+JiBhLCBjb25zdCBB
dG9taWNTdHJpbmcmIGIpIHsgcmV0dXJuICEoYSA9PSBiKTsgfQogCiBpbmxpbmUgYm9vbCBlcXVh
bElnbm9yaW5nQ2FzZShjb25zdCBBdG9taWNTdHJpbmcmIGEsIGNvbnN0IEF0b21pY1N0cmluZyYg
YikgeyByZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2UoYS5pbXBsKCksIGIuaW1wbCgpKTsgfQotaW5s
aW5lIGJvb2wgZXF1YWxJZ25vcmluZ0Nhc2UoY29uc3QgQXRvbWljU3RyaW5nJiBhLCBjb25zdCBj
aGFyKiBiKSB7IHJldHVybiBlcXVhbElnbm9yaW5nQ2FzZShhLmltcGwoKSwgYik7IH0KK2lubGlu
ZSBib29sIGVxdWFsSWdub3JpbmdDYXNlKGNvbnN0IEF0b21pY1N0cmluZyYgYSwgY29uc3QgTENo
YXIqIGIpIHsgcmV0dXJuIGVxdWFsSWdub3JpbmdDYXNlKGEuaW1wbCgpLCBiKTsgfQoraW5saW5l
IGJvb2wgZXF1YWxJZ25vcmluZ0Nhc2UoY29uc3QgQXRvbWljU3RyaW5nJiBhLCBjb25zdCBjaGFy
KiBiKSB7IHJldHVybiBlcXVhbElnbm9yaW5nQ2FzZShhLmltcGwoKSwgcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBMQ2hhcio+KGIpKTsgfQogaW5saW5lIGJvb2wgZXF1YWxJZ25vcmluZ0Nhc2UoY29u
c3QgQXRvbWljU3RyaW5nJiBhLCBjb25zdCBTdHJpbmcmIGIpIHsgcmV0dXJuIGVxdWFsSWdub3Jp
bmdDYXNlKGEuaW1wbCgpLCBiLmltcGwoKSk7IH0KLWlubGluZSBib29sIGVxdWFsSWdub3JpbmdD
YXNlKGNvbnN0IGNoYXIqIGEsIGNvbnN0IEF0b21pY1N0cmluZyYgYikgeyByZXR1cm4gZXF1YWxJ
Z25vcmluZ0Nhc2UoYSwgYi5pbXBsKCkpOyB9CitpbmxpbmUgYm9vbCBlcXVhbElnbm9yaW5nQ2Fz
ZShjb25zdCBMQ2hhciogYSwgY29uc3QgQXRvbWljU3RyaW5nJiBiKSB7IHJldHVybiBlcXVhbEln
bm9yaW5nQ2FzZShhLCBiLmltcGwoKSk7IH0KK2lubGluZSBib29sIGVxdWFsSWdub3JpbmdDYXNl
KGNvbnN0IGNoYXIqIGEsIGNvbnN0IEF0b21pY1N0cmluZyYgYikgeyByZXR1cm4gZXF1YWxJZ25v
cmluZ0Nhc2UocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KGEpLCBiLmltcGwoKSk7IH0K
IGlubGluZSBib29sIGVxdWFsSWdub3JpbmdDYXNlKGNvbnN0IFN0cmluZyYgYSwgY29uc3QgQXRv
bWljU3RyaW5nJiBiKSB7IHJldHVybiBlcXVhbElnbm9yaW5nQ2FzZShhLmltcGwoKSwgYi5pbXBs
KCkpOyB9CiAKIC8vIERlZmluZSBleHRlcm5hbCBnbG9iYWwgdmFyaWFibGVzIGZvciB0aGUgY29t
bW9ubHkgdXNlZCBhdG9taWMgc3RyaW5ncy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oCShyZXZpc2lvbiA5ODI4NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01OCw2ICs1OCwyMSBAQCBwcml2YXRlOgogfTsKIAogdGVtcGxhdGU8Pgor
Y2xhc3MgU3RyaW5nVHlwZUFkYXB0ZXI8TENoYXI+IHsKK3B1YmxpYzoKKyAgICBTdHJpbmdUeXBl
QWRhcHRlcjxMQ2hhcj4oTENoYXIgYnVmZmVyKQorICAgICAgICA6IG1fYnVmZmVyKGJ1ZmZlcikK
KyAgICB7CisgICAgfQorCisgICAgdW5zaWduZWQgbGVuZ3RoKCkgeyByZXR1cm4gMTsgfQorICAg
IHZvaWQgd3JpdGVUbyhVQ2hhciogZGVzdGluYXRpb24pIHsgKmRlc3RpbmF0aW9uID0gbV9idWZm
ZXI7IH0KKworcHJpdmF0ZToKKyAgICBMQ2hhciBtX2J1ZmZlcjsKK307CisKK3RlbXBsYXRlPD4K
IGNsYXNzIFN0cmluZ1R5cGVBZGFwdGVyPFVDaGFyPiB7CiBwdWJsaWM6CiAgICAgU3RyaW5nVHlw
ZUFkYXB0ZXI8VUNoYXI+KFVDaGFyIGJ1ZmZlcikKQEAgLTk3LDYgKzExMiwzMCBAQCBwcml2YXRl
OgogfTsKIAogdGVtcGxhdGU8PgorY2xhc3MgU3RyaW5nVHlwZUFkYXB0ZXI8TENoYXIqPiB7Citw
dWJsaWM6CisgICAgU3RyaW5nVHlwZUFkYXB0ZXI8TENoYXIqPihMQ2hhciogYnVmZmVyKQorICAg
IDogbV9idWZmZXIoYnVmZmVyKQorICAgICwgbV9sZW5ndGgoc3RybGVuKHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KGJ1ZmZlcikpKQorICAgIHsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBsZW5ndGgo
KSB7IHJldHVybiBtX2xlbmd0aDsgfQorCisgICAgdm9pZCB3cml0ZVRvKFVDaGFyKiBkZXN0aW5h
dGlvbikKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2xlbmd0aDsg
KytpKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBtX2J1ZmZlcltpXTsKKyAgICAg
ICAgICAgIGRlc3RpbmF0aW9uW2ldID0gYzsKKyAgICAgICAgfQorICAgIH0KKworcHJpdmF0ZToK
KyAgICBjb25zdCBMQ2hhciogbV9idWZmZXI7CisgICAgdW5zaWduZWQgbV9sZW5ndGg7Cit9Owor
Cit0ZW1wbGF0ZTw+CiBjbGFzcyBTdHJpbmdUeXBlQWRhcHRlcjxjb25zdCBVQ2hhcio+IHsKIHB1
YmxpYzoKICAgICBTdHJpbmdUeXBlQWRhcHRlcjxjb25zdCBVQ2hhcio+KGNvbnN0IFVDaGFyKiBi
dWZmZXIpCkBAIC0xNDksNiArMTg4LDMwIEBAIHByaXZhdGU6CiB9OwogCiB0ZW1wbGF0ZTw+Citj
bGFzcyBTdHJpbmdUeXBlQWRhcHRlcjxjb25zdCBMQ2hhcio+IHsKK3B1YmxpYzoKKyAgICBTdHJp
bmdUeXBlQWRhcHRlcjxjb25zdCBMQ2hhcio+KGNvbnN0IExDaGFyKiBidWZmZXIpCisgICAgICAg
IDogbV9idWZmZXIoYnVmZmVyKQorICAgICAgICAsIG1fbGVuZ3RoKHN0cmxlbihyZWludGVycHJl
dF9jYXN0PGNvbnN0IGNoYXIqPihidWZmZXIpKSkKKyAgICB7CisgICAgfQorICAgIAorICAgIHVu
c2lnbmVkIGxlbmd0aCgpIHsgcmV0dXJuIG1fbGVuZ3RoOyB9CisgICAgCisgICAgdm9pZCB3cml0
ZVRvKFVDaGFyKiBkZXN0aW5hdGlvbikKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtX2xlbmd0aDsgKytpKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBt
X2J1ZmZlcltpXTsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uW2ldID0gYzsKKyAgICAgICAgfQor
ICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgY29uc3QgTENoYXIqIG1fYnVmZmVyOworICAgIHVu
c2lnbmVkIG1fbGVuZ3RoOworfTsKKwordGVtcGxhdGU8PgogY2xhc3MgU3RyaW5nVHlwZUFkYXB0
ZXI8VmVjdG9yPGNoYXI+ID4gewogcHVibGljOgogICAgIFN0cmluZ1R5cGVBZGFwdGVyPFZlY3Rv
cjxjaGFyPiA+KGNvbnN0IFZlY3RvcjxjaGFyPiYgYnVmZmVyKQpAQCAtMTcxLDYgKzIzNCwyNiBA
QCBwcml2YXRlOgogfTsKIAogdGVtcGxhdGU8PgorY2xhc3MgU3RyaW5nVHlwZUFkYXB0ZXI8VmVj
dG9yPExDaGFyPiA+IHsKK3B1YmxpYzoKKyAgICBTdHJpbmdUeXBlQWRhcHRlcjxWZWN0b3I8TENo
YXI+ID4oY29uc3QgVmVjdG9yPExDaGFyPiYgYnVmZmVyKQorICAgICAgICA6IG1fYnVmZmVyKGJ1
ZmZlcikKKyAgICB7CisgICAgfQorCisgICAgc2l6ZV90IGxlbmd0aCgpIHsgcmV0dXJuIG1fYnVm
ZmVyLnNpemUoKTsgfQorCisgICAgdm9pZCB3cml0ZVRvKFVDaGFyKiBkZXN0aW5hdGlvbikKKyAg
ICB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9idWZmZXIuc2l6ZSgpOyArK2kp
CisgICAgICAgICAgICBkZXN0aW5hdGlvbltpXSA9IG1fYnVmZmVyW2ldOworICAgIH0KKworcHJp
dmF0ZToKKyAgICBjb25zdCBWZWN0b3I8TENoYXI+JiBtX2J1ZmZlcjsKK307CisKK3RlbXBsYXRl
PD4KIGNsYXNzIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZz4gewogcHVibGljOgogICAgIFN0cmlu
Z1R5cGVBZGFwdGVyPFN0cmluZz4oY29uc3QgU3RyaW5nJiBzdHJpbmcpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL3RleHQvU3RyaW5nSGFzaC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJpbmdIYXNoLmgJKHJldmlzaW9uIDk4Mjg1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1N0cmluZ0hhc2guaAkod29ya2luZyBj
b3B5KQpAQCAtNTMsMTEgKzUzLDY1IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICAgICAgaWYg
KGFMZW5ndGggIT0gYkxlbmd0aCkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAg
ICAgICAgICAgIGlmIChhLT5pczhCaXQoKSkgeworICAgICAgICAgICAgICAgIGlmIChiLT5pczhC
aXQoKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogcGVyaGFwcyB3ZSBzaG91bGQg
aGF2ZSBhIG1vcmUgYWJzdHJhY3QgbWFjcm8gdGhhdCBpbmRpY2F0ZXMgd2hlbgorICAgICAgICAg
ICAgICAgICAgICAvLyBnb2luZyA0IGJ5dGVzIGF0IGEgdGltZSBpcyB1bnNhZmUKKyAgICAgICAg
ICAgICAgICAgICAgY29uc3QgTENoYXIqIGFDaGFycyA9IGEtPmNoYXJhY3RlcnM4KCk7CisgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IExDaGFyKiBiQ2hhcnMgPSBiLT5jaGFyYWN0ZXJzOCgpOwor
CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGkgPSAwOworI2lmIChDUFUoWDg2KSB8fCBD
UFUoWDg2XzY0KSkKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhcnNQZXJJ
bnQgPSBzaXplb2YodWludDMyX3QpIC8gc2l6ZW9mKGNoYXIpOworICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFMZW5ndGggPiBjaGFyc1BlckludCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc3RvcENvdW50ID0gYUxlbmd0aCAmIH4oY2hh
cnNQZXJJbnQgLSAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgdWludDMyX3QqIGFJbnRDaGFyYWN0ZXJzID0gcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1aW50MzJfdCo+KGFDaGFycyk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCB1aW50MzJfdCogYkludENoYXJhY3RlcnMgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQz
Ml90Kj4oYkNoYXJzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9
IDA7IGkgPCBzdG9wQ291bnQ7IGkgKz0gY2hhcnNQZXJJbnQsICsraikgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChhSW50Q2hhcmFjdGVyc1tqXSAhPSBiSW50Q2hhcmFjdGVyc1tq
XSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisjZW5kaWYKKyAgICAg
ICAgICAgICAgICAgICAgZm9yICg7IGkgPCBhTGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChhQ2hhcnNbaV0gIT0gYkNoYXJzW2ldKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gYSBpcyA4Yml0LCBiIGlzIDE2Yml0CisgICAg
ICAgICAgICAgICAgY29uc3QgTENoYXIqIGFDaGFycyA9IGEtPmNoYXJhY3RlcnM4KCk7CisgICAg
ICAgICAgICAgICAgY29uc3QgVUNoYXIqIGJDaGFycyA9IGItPmNoYXJhY3RlcnMxNigpOworICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgIT0gYUxlbmd0aDsgKytpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmICgqYUNoYXJzKysgIT0gKmJDaGFycysrKQorICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
Yi0+aXM4Qml0KCkpIHsKKyAgICAgICAgICAgICAgICAvLyBhIGlzIDhiaXQsIGIgaXMgMTZiaXQK
KyAgICAgICAgICAgICAgICBjb25zdCBVQ2hhciogYUNoYXJzID0gYS0+Y2hhcmFjdGVyczE2KCk7
CisgICAgICAgICAgICAgICAgY29uc3QgTENoYXIqIGJDaGFycyA9IGItPmNoYXJhY3RlcnM4KCk7
CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSAhPSBhTGVuZ3RoOyArK2kp
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCphQ2hhcnMrKyAhPSAqYkNoYXJzKyspCisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IC8vIDE2Yml0IGEgJiBiCiAgICAgICAgICAgICAvLyBGSVhNRTogcGVyaGFwcyB3ZSBzaG91bGQg
aGF2ZSBhIG1vcmUgYWJzdHJhY3QgbWFjcm8gdGhhdCBpbmRpY2F0ZXMgd2hlbgogICAgICAgICAg
ICAgLy8gZ29pbmcgNCBieXRlcyBhdCBhIHRpbWUgaXMgdW5zYWZlCiAjaWYgQ1BVKEFSTSkgfHwg
Q1BVKFNINCkgfHwgQ1BVKE1JUFMpIHx8IENQVShTUEFSQykKLSAgICAgICAgICAgIGNvbnN0IFVD
aGFyKiBhQ2hhcnMgPSBhLT5jaGFyYWN0ZXJzKCk7Ci0gICAgICAgICAgICBjb25zdCBVQ2hhciog
YkNoYXJzID0gYi0+Y2hhcmFjdGVycygpOworICAgICAgICAgICAgY29uc3QgVUNoYXIqIGFDaGFy
cyA9IGEtPmNoYXJhY3RlcnMxNigpOworICAgICAgICAgICAgY29uc3QgVUNoYXIqIGJDaGFycyA9
IGItPmNoYXJhY3RlcnMxNigpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSAh
PSBhTGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgICAgICBpZiAoKmFDaGFycysrICE9ICpiQ2hh
cnMrKykKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNjUsOCArMTE5LDgg
QEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICNlbHNlCiAgICAg
ICAgICAgICAvKiBEbyBpdCA0LWJ5dGVzLWF0LWEtdGltZSBvbiBhcmNoaXRlY3R1cmVzIHdoZXJl
IGl0J3Mgc2FmZSAqLwotICAgICAgICAgICAgY29uc3QgdWludDMyX3QqIGFDaGFycyA9IHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihhLT5jaGFyYWN0ZXJzKCkpOwotICAgICAgICAg
ICAgY29uc3QgdWludDMyX3QqIGJDaGFycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMy
X3QqPihiLT5jaGFyYWN0ZXJzKCkpOworICAgICAgICAgICAgY29uc3QgdWludDMyX3QqIGFDaGFy
cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihhLT5jaGFyYWN0ZXJzMTYoKSk7
CisgICAgICAgICAgICBjb25zdCB1aW50MzJfdCogYkNoYXJzID0gcmVpbnRlcnByZXRfY2FzdDxj
b25zdCB1aW50MzJfdCo+KGItPmNoYXJhY3RlcnMxNigpKTsKIAogICAgICAgICAgICAgdW5zaWdu
ZWQgaGFsZkxlbmd0aCA9IGFMZW5ndGggPj4gMTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgIT0gaGFsZkxlbmd0aDsgKytpKQpAQCAtMTEyLDExICsxNjYsMTYgQEAgbmFtZXNw
YWNlIFdURiB7CiAgICAgICAgICAgICByZXR1cm4gaGFzaChzdHItPmNoYXJhY3RlcnMoKSwgc3Ry
LT5sZW5ndGgoKSk7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChj
b25zdCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCisgICAgICAgIHN0YXRpYyB1bnNpZ25l
ZCBoYXNoKGNvbnN0IExDaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBTdHJpbmdIYXNoZXI6OmNvbXB1dGVIYXNoPGNoYXIsIGZvbGRDYXNl
PGNoYXI+ID4oZGF0YSwgbGVuZ3RoKTsKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmdIYXNoZXI6
OmNvbXB1dGVIYXNoPExDaGFyLCBmb2xkQ2FzZTxMQ2hhcj4gPihkYXRhLCBsZW5ndGgpOwogICAg
ICAgICB9CiAKKyAgICAgICAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBoYXNoKGNvbnN0IGNoYXIq
IGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIENh
c2VGb2xkaW5nSGFzaDo6aGFzaChyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oZGF0YSks
IGxlbmd0aCk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIHN0YXRpYyBib29sIGVxdWFs
KGNvbnN0IFN0cmluZ0ltcGwqIGEsIGNvbnN0IFN0cmluZ0ltcGwqIGIpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIGlmIChhID09IGIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3Rl
eHQvU3RyaW5nSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi90ZXh0L1N0cmluZ0ltcGwuY3BwCShyZXZpc2lvbiA5ODI4NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvdGV4dC9TdHJpbmdJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsOCAr
NTgsMTMgQEAgU3RyaW5nSW1wbDo6flN0cmluZ0ltcGwoKQogICAgIGlmIChvd25lcnNoaXAgIT0g
QnVmZmVySW50ZXJuYWwpIHsKICAgICAgICAgaWYgKG93bmVyc2hpcCA9PSBCdWZmZXJPd25lZCkg
ewogICAgICAgICAgICAgQVNTRVJUKCFtX3NoYXJlZEJ1ZmZlcik7Ci0gICAgICAgICAgICBBU1NF
UlQobV9kYXRhKTsKLSAgICAgICAgICAgIGZhc3RGcmVlKGNvbnN0X2Nhc3Q8VUNoYXIqPihtX2Rh
dGEpKTsKKyAgICAgICAgICAgIC8vIFdlIHVzZSBtX2RhdGE4LCBidXQgc2luY2UgaXQgaXMgYSB1
bmlvbiB3aXRoIG1fZGF0YTE2IHRoaXMgd29ya3MgZWl0aGVyIHdheS4KKyAgICAgICAgICAgIEFT
U0VSVChtX2RhdGE4KTsKKyAgICAgICAgICAgIGZhc3RGcmVlKGNvbnN0X2Nhc3Q8TENoYXIqPiht
X2RhdGE4KSk7CisgICAgICAgICAgICBpZiAoaGFzMTZCaXRTaGFkb3coKSkgeworICAgICAgICAg
ICAgICAgIEFTU0VSVChtX2NvcHlEYXRhMTYpOworICAgICAgICAgICAgICAgIGZhc3RGcmVlKG1f
Y29weURhdGExNik7CisgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAob3duZXJzaGlw
ID09IEJ1ZmZlclN1YnN0cmluZykgewogICAgICAgICAgICAgQVNTRVJUKG1fc3Vic3RyaW5nQnVm
ZmVyKTsKICAgICAgICAgICAgIG1fc3Vic3RyaW5nQnVmZmVyLT5kZXJlZigpOwpAQCAtNzEsNiAr
NzYsMjUgQEAgU3RyaW5nSW1wbDo6flN0cmluZ0ltcGwoKQogICAgIH0KIH0KIAorUGFzc1JlZlB0
cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxl
bmd0aCwgTENoYXIqJiBkYXRhKQoreworICAgIGlmICghbGVuZ3RoKSB7CisgICAgICAgIGRhdGEg
PSAwOworICAgICAgICByZXR1cm4gZW1wdHkoKTsKKyAgICB9CisKKyAgICAvLyBBbGxvY2F0ZSBh
IHNpbmdsZSBidWZmZXIgbGFyZ2UgZW5vdWdoIHRvIGNvbnRhaW4gdGhlIFN0cmluZ0ltcGwKKyAg
ICAvLyBzdHJ1Y3QgYXMgd2VsbCBhcyB0aGUgZGF0YSB3aGljaCBpdCBjb250YWlucy4gVGhpcyBy
ZW1vdmVzIG9uZQorICAgIC8vIGhlYXAgYWxsb2NhdGlvbiBmcm9tIHRoaXMgY2FsbC4KKyAgICBp
ZiAobGVuZ3RoID4gKChzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgLSBzaXpl
b2YoU3RyaW5nSW1wbCkpIC8gc2l6ZW9mKGNoYXIpKSkKKyAgICAgICAgQ1JBU0goKTsKKyAgICBz
aXplX3Qgc2l6ZSA9IHNpemVvZihTdHJpbmdJbXBsKSArIGxlbmd0aCAqIHNpemVvZihjaGFyKTsK
KyAgICBTdHJpbmdJbXBsKiBzdHJpbmcgPSBzdGF0aWNfY2FzdDxTdHJpbmdJbXBsKj4oZmFzdE1h
bGxvYyhzaXplKSk7CisKKyAgICBkYXRhID0gcmVpbnRlcnByZXRfY2FzdDxMQ2hhcio+KHN0cmlu
ZyArIDEpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgKHN0cmluZykgU3RyaW5nSW1wbChsZW5n
dGgsIEZvcmNlOEJpdENvbnN0cnVjdG9yKSk7Cit9CisKIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4g
U3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiYg
ZGF0YSkKIHsKICAgICBpZiAoIWxlbmd0aCkgewpAQCAtMTIxLDcgKzE0NSw3IEBAIFBhc3NSZWZQ
dHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y3JlYXQKICAgICByZXR1cm4gc3RyaW5nLnJlbGVh
c2UoKTsKIH0KIAotUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpjcmVhdGUoY29u
c3QgY2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQorUGFzc1JlZlB0cjxTdHJpbmdJ
bXBsPiBTdHJpbmdJbXBsOjpjcmVhdGUoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVk
IGxlbmd0aCkKIHsKICAgICBpZiAoIWNoYXJhY3RlcnMgfHwgIWxlbmd0aCkKICAgICAgICAgcmV0
dXJuIGVtcHR5KCk7CkBAIC0xMzUsMTEgKzE1OSwxMSBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+
IFN0cmluZ0ltcGw6OmNyZWF0CiAgICAgcmV0dXJuIHN0cmluZy5yZWxlYXNlKCk7CiB9CiAKLVBh
c3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y3JlYXRlKGNvbnN0IGNoYXIqIHN0cmlu
ZykKK1Bhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y3JlYXRlKGNvbnN0IExDaGFy
KiBzdHJpbmcpCiB7CiAgICAgaWYgKCFzdHJpbmcpCiAgICAgICAgIHJldHVybiBlbXB0eSgpOwot
ICAgIHNpemVfdCBsZW5ndGggPSBzdHJsZW4oc3RyaW5nKTsKKyAgICBzaXplX3QgbGVuZ3RoID0g
c3RybGVuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHN0cmluZykpOwogICAgIGlmIChs
ZW5ndGggPiBudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQogICAgICAgICBDUkFTSCgp
OwogICAgIHJldHVybiBjcmVhdGUoc3RyaW5nLCBsZW5ndGgpOwpAQCAtMTUyLDcgKzE3Niw3IEBA
IFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y3JlYXQKICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFN0cmluZ0ltcGwoY2hhcmFjdGVycywgbGVuZ3RoLCBzaGFyZWRCdWZmZXIpKTsK
IH0KIAotU2hhcmVkVUNoYXIqIFN0cmluZ0ltcGw6OnNoYXJlZEJ1ZmZlcigpCitTaGFyZWRVQ2hh
ciogU3RyaW5nSW1wbDo6c2hhcmVkQnVmZmVyMTYoKQogewogICAgIGlmIChtX2xlbmd0aCA8IG1p
bkxlbmd0aFRvU2hhcmUpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMTY0LDEwICsxODgsMTMgQEAg
U2hhcmVkVUNoYXIqIFN0cmluZ0ltcGw6OnNoYXJlZEJ1ZmZlcigpCiAgICAgaWYgKG93bmVyc2hp
cCA9PSBCdWZmZXJJbnRlcm5hbCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKG93bmVyc2hp
cCA9PSBCdWZmZXJTdWJzdHJpbmcpCi0gICAgICAgIHJldHVybiBtX3N1YnN0cmluZ0J1ZmZlci0+
c2hhcmVkQnVmZmVyKCk7CisgICAgICAgIHJldHVybiBtX3N1YnN0cmluZ0J1ZmZlci0+c2hhcmVk
QnVmZmVyMTYoKTsKICAgICBpZiAob3duZXJzaGlwID09IEJ1ZmZlck93bmVkKSB7CiAgICAgICAg
IEFTU0VSVCghbV9zaGFyZWRCdWZmZXIpOwotICAgICAgICBtX3NoYXJlZEJ1ZmZlciA9IFNoYXJl
ZFVDaGFyOjpjcmVhdGUobmV3IFNoYXJhYmxlVUNoYXIobV9kYXRhKSkubGVha1JlZigpOworICAg
ICAgICAvLyBGSVhNRTogSW1wbGVtZW50IFNoYXJlZENoYXIgZm9yIDgtYml0IHN0cmluZ3MKKyAg
ICAgICAgQVNTRVJUKCFpczhCaXQoKSk7CisgICAgICAgIEFTU0VSVCghaGFzMTZCaXRTaGFkb3co
KSk7CisgICAgICAgIG1fc2hhcmVkQnVmZmVyID0gU2hhcmVkVUNoYXI6OmNyZWF0ZShuZXcgU2hh
cmFibGVVQ2hhcihtX2RhdGExNikpLmxlYWtSZWYoKTsKICAgICAgICAgbV9oYXNoQW5kRmxhZ3Mg
PSAobV9oYXNoQW5kRmxhZ3MgJiB+c19oYXNoTWFza0J1ZmZlck93bmVyc2hpcCkgfCBCdWZmZXJT
aGFyZWQ7CiAgICAgfQogCkBAIC0xNzYsMTQgKzIwMyw0OSBAQCBTaGFyZWRVQ2hhciogU3RyaW5n
SW1wbDo6c2hhcmVkQnVmZmVyKCkKICAgICByZXR1cm4gbV9zaGFyZWRCdWZmZXI7CiB9CiAKK2Nv
bnN0IFVDaGFyKiBTdHJpbmdJbXBsOjpnZXREYXRhMTZTbG93Q2FzZSgpIGNvbnN0Cit7CisgICAg
aWYgKGhhczE2Qml0U2hhZG93KCkpCisgICAgICAgIHJldHVybiBtX2NvcHlEYXRhMTY7CisKKyAg
ICBpZiAoYnVmZmVyT3duZXJzaGlwKCkgPT0gQnVmZmVyU3Vic3RyaW5nKSB7CisgICAgICAgIC8v
IElmIHRoaXMgaXMgYSBzdWJzdHJpbmcsIHJldHVybiBhIHBvaW50ZXIgaW50byB0aGUgcGFyZW50
IHN0cmluZy4KKyAgICAgICAgLy8gVE9ETzogQ29uc2lkZXIgc2V2ZXJpbmcgdGhpcyBzdHJpbmcg
ZnJvbSB0aGUgcGFyZW50IHN0cmluZworICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBtX2RhdGE4
IC0gbV9zdWJzdHJpbmdCdWZmZXItPmNoYXJhY3RlcnM4KCk7CisgICAgICAgIHJldHVybiBtX3N1
YnN0cmluZ0J1ZmZlci0+Y2hhcmFjdGVyczE2KCkgKyBvZmZzZXQ7CisgICAgfQorCisgICAgQVNT
RVJUKGJ1ZmZlck93bmVyc2hpcCgpICE9IEJ1ZmZlclNoYXJlZCk7CisgICAgdW5zaWduZWQgbGVu
ID0gbGVuZ3RoKCk7CisgICAgbV9jb3B5RGF0YTE2ID0gc3RhdGljX2Nhc3Q8VUNoYXIqPihmYXN0
Q2FsbG9jKGxlbiwgc2l6ZW9mKFVDaGFyKSkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bGVuOyBpKyspCisgICAgICAgIG1fY29weURhdGExNltpXSA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
IGNoYXI+KG1fZGF0YThbaV0pOworCisgICAgbV9oYXNoQW5kRmxhZ3MgfD0gc19oYXNoRmxhZ0hh
czE2Qml0U2hhZG93OworCisgICAgcmV0dXJuIG1fY29weURhdGExNjsKK30KKwogYm9vbCBTdHJp
bmdJbXBsOjpjb250YWluc09ubHlXaGl0ZXNwYWNlKCkKIHsKICAgICAvLyBGSVhNRTogVGhlIGRl
ZmluaXRpb24gb2Ygd2hpdGVzcGFjZSBoZXJlIGluY2x1ZGVzIGEgbnVtYmVyIG9mIGNoYXJhY3Rl
cnMKICAgICAvLyB0aGF0IGFyZSBub3Qgd2hpdGVzcGFjZSBmcm9tIHRoZSBwb2ludCBvZiB2aWV3
IG9mIFJlbmRlclRleHQ7IEkgd29uZGVyIGlmCiAgICAgLy8gdGhhdCdzIGEgcHJvYmxlbSBpbiBw
cmFjdGljZS4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9sZW5ndGg7IGkrKykKLSAg
ICAgICAgaWYgKCFpc0FTQ0lJU3BhY2UobV9kYXRhW2ldKSkKKyAgICBpZiAoaXM4Qml0KCkpIHsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbGVuZ3RoOyBpKyspIHsKKyAgICAg
ICAgICAgIFVDaGFyIGMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihtX2RhdGE4W2ldKTsK
KyAgICAgICAgICAgIGlmICghaXNBU0NJSVNwYWNlKGMpKQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2xlbmd0aDsgaSsrKSB7CisgICAgICAgIFVDaGFy
IGMgPSBtX2RhdGExNltpXTsKKyAgICAgICAgaWYgKCFpc0FTQ0lJU3BhY2UoYykpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xOTcs
MTUgKzI1OSwyMCBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnN1YnN0CiAg
ICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgbGVuZ3RoID0gbWF4TGVuZ3RoOwogICAg
IH0KLSAgICByZXR1cm4gY3JlYXRlKG1fZGF0YSArIHN0YXJ0LCBsZW5ndGgpOworICAgIGlmIChp
czhCaXQoKSkKKyAgICAgICAgcmV0dXJuIGNyZWF0ZShtX2RhdGE4ICsgc3RhcnQsIGxlbmd0aCk7
CisKKyAgICByZXR1cm4gY3JlYXRlKG1fZGF0YTE2ICsgc3RhcnQsIGxlbmd0aCk7CiB9CiAKIFVD
aGFyMzIgU3RyaW5nSW1wbDo6Y2hhcmFjdGVyU3RhcnRpbmdBdCh1bnNpZ25lZCBpKQogewotICAg
IGlmIChVMTZfSVNfU0lOR0xFKG1fZGF0YVtpXSkpCi0gICAgICAgIHJldHVybiBtX2RhdGFbaV07
Ci0gICAgaWYgKGkgKyAxIDwgbV9sZW5ndGggJiYgVTE2X0lTX0xFQUQobV9kYXRhW2ldKSAmJiBV
MTZfSVNfVFJBSUwobV9kYXRhW2kgKyAxXSkpCi0gICAgICAgIHJldHVybiBVMTZfR0VUX1NVUFBM
RU1FTlRBUlkobV9kYXRhW2ldLCBtX2RhdGFbaSArIDFdKTsKKyAgICBpZiAoaXM4Qml0KCkpCisg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihtX2RhdGE4W2ldKTsKKyAg
ICBpZiAoVTE2X0lTX1NJTkdMRShtX2RhdGExNltpXSkpCisgICAgICAgIHJldHVybiBtX2RhdGEx
NltpXTsKKyAgICBpZiAoaSArIDEgPCBtX2xlbmd0aCAmJiBVMTZfSVNfTEVBRChtX2RhdGExNltp
XSkgJiYgVTE2X0lTX1RSQUlMKG1fZGF0YTE2W2kgKyAxXSkpCisgICAgICAgIHJldHVybiBVMTZf
R0VUX1NVUFBMRU1FTlRBUlkobV9kYXRhMTZbaV0sIG1fZGF0YTE2W2kgKyAxXSk7CiAgICAgcmV0
dXJuIDA7CiB9CiAKQEAgLTIxNSw0MiArMjgyLDY0IEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4g
U3RyaW5nSW1wbDo6bG93ZXIKICAgICAvLyBuby1vcCBjb2RlIHBhdGggdXAgdGhyb3VnaCB0aGUg
Zmlyc3QgJ3JldHVybicgc3RhdGVtZW50LgogICAgIAogICAgIC8vIEZpcnN0IHNjYW4gdGhlIHN0
cmluZyBmb3IgdXBwZXJjYXNlIGFuZCBub24tQVNDSUkgY2hhcmFjdGVyczoKLSAgICBVQ2hhciBv
cmVkID0gMDsKICAgICBib29sIG5vVXBwZXIgPSB0cnVlOwotICAgIGNvbnN0IFVDaGFyICplbmQg
PSBtX2RhdGEgKyBtX2xlbmd0aDsKLSAgICBmb3IgKGNvbnN0IFVDaGFyKiBjaHAgPSBtX2RhdGE7
IGNocCAhPSBlbmQ7IGNocCsrKSB7Ci0gICAgICAgIGlmIChVTkxJS0VMWShpc0FTQ0lJVXBwZXIo
KmNocCkpKQotICAgICAgICAgICAgbm9VcHBlciA9IGZhbHNlOwotICAgICAgICBvcmVkIHw9ICpj
aHA7CisgICAgVUNoYXIgb3JlZCA9IDA7CisgICAgaWYgKGlzOEJpdCgpKSB7CisgICAgICAgIGNv
bnN0IExDaGFyKiBlbmQgPSBtX2RhdGE4ICsgbV9sZW5ndGg7CisgICAgICAgIGZvciAoY29uc3Qg
TENoYXIqIGNocCA9IG1fZGF0YTg7IGNocCAhPSBlbmQ7IGNocCsrKQorICAgICAgICAgICAgaWYg
KFVOTElLRUxZKGlzQVNDSUlVcHBlcigqY2hwKSkpCisgICAgICAgICAgICAgICAgbm9VcHBlciA9
IGZhbHNlOworICAgICAgICAvLyBOb3RoaW5nIHRvIGRvIGlmIHRoZSBzdHJpbmcgaXMgYWxsIEFT
Q0lJIHdpdGggbm8gdXBwZXJjYXNlLgorICAgICAgICBpZiAobm9VcHBlcikKKyAgICAgICAgICAg
IHJldHVybiB0aGlzOworICAgIH0gZWxzZSB7CisgICAgICAgIGNvbnN0IFVDaGFyICplbmQgPSBt
X2RhdGExNiArIG1fbGVuZ3RoOworICAgICAgICBmb3IgKGNvbnN0IFVDaGFyKiBjaHAgPSBtX2Rh
dGExNjsgY2hwICE9IGVuZDsgY2hwKyspIHsKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShpc0FT
Q0lJVXBwZXIoKmNocCkpKQorICAgICAgICAgICAgICAgIG5vVXBwZXIgPSBmYWxzZTsKKyAgICAg
ICAgICAgIG9yZWQgfD0gKmNocDsKKyAgICAgICAgfQorICAgICAgICAvLyBOb3RoaW5nIHRvIGRv
IGlmIHRoZSBzdHJpbmcgaXMgYWxsIEFTQ0lJIHdpdGggbm8gdXBwZXJjYXNlLgorICAgICAgICBp
ZiAobm9VcHBlciAmJiAhKG9yZWQgJiB+MHg3RikpCisgICAgICAgICAgICByZXR1cm4gdGhpczsK
ICAgICB9Ci0gICAgCi0gICAgLy8gTm90aGluZyB0byBkbyBpZiB0aGUgc3RyaW5nIGlzIGFsbCBB
U0NJSSB3aXRoIG5vIHVwcGVyY2FzZS4KLSAgICBpZiAobm9VcHBlciAmJiAhKG9yZWQgJiB+MHg3
RikpCi0gICAgICAgIHJldHVybiB0aGlzOwogCiAgICAgaWYgKG1fbGVuZ3RoID4gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KG51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSkpCiAgICAgICAgIENS
QVNIKCk7CiAgICAgaW50MzJfdCBsZW5ndGggPSBtX2xlbmd0aDsKIAotICAgIFVDaGFyKiBkYXRh
OwotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZCht
X2xlbmd0aCwgZGF0YSk7Ci0KICAgICBpZiAoIShvcmVkICYgfjB4N0YpKSB7Ci0gICAgICAgIC8v
IERvIGEgZmFzdGVyIGxvb3AgZm9yIHRoZSBjYXNlIHdoZXJlIGFsbCB0aGUgY2hhcmFjdGVycyBh
cmUgQVNDSUkuCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAg
ICAgICAgICAgIFVDaGFyIGMgPSBtX2RhdGFbaV07Ci0gICAgICAgICAgICBkYXRhW2ldID0gdG9B
U0NJSUxvd2VyKGMpOworICAgICAgICBpZiAoaXM4Qml0KCkpIHsKKyAgICAgICAgICAgIExDaGFy
KiBkYXRhODsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IG5l
d0ltcGwgPSBjcmVhdGVVbmluaXRpYWxpemVkKG1fbGVuZ3RoLCBkYXRhOCk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGZvciAoaW50MzJfdCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKQorICAg
ICAgICAgICAgICAgIGRhdGE4W2ldID0gdG9BU0NJSUxvd2VyKG1fZGF0YThbaV0pOworICAgICAg
ICAgICAgCisgICAgICAgICAgICByZXR1cm4gbmV3SW1wbDsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgVUNoYXIqIGRhdGExNjsKKyAgICAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IG5ld0lt
cGwgPSBjcmVhdGVVbmluaXRpYWxpemVkKG1fbGVuZ3RoLCBkYXRhMTYpOworICAgICAgICAKKyAg
ICAgICAgZm9yIChpbnQzMl90IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAg
IFVDaGFyIGMgPSBtX2RhdGExNltpXTsKKyAgICAgICAgICAgIGRhdGExNltpXSA9IHRvQVNDSUlM
b3dlcihjKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gbmV3SW1wbDsKICAgICB9CiAgICAg
CiAgICAgLy8gRG8gYSBzbG93ZXIgaW1wbGVtZW50YXRpb24gZm9yIGNhc2VzIHRoYXQgaW5jbHVk
ZSBub24tQVNDSUkgY2hhcmFjdGVycy4KKyAgICBVQ2hhciogZGF0YTE2OworICAgIFJlZlB0cjxT
dHJpbmdJbXBsPiBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChtX2xlbmd0aCwgZGF0YTE2
KTsKKwogICAgIGJvb2wgZXJyb3I7Ci0gICAgaW50MzJfdCByZWFsTGVuZ3RoID0gVW5pY29kZTo6
dG9Mb3dlcihkYXRhLCBsZW5ndGgsIG1fZGF0YSwgbV9sZW5ndGgsICZlcnJvcik7CisgICAgaW50
MzJfdCByZWFsTGVuZ3RoID0gVW5pY29kZTo6dG9Mb3dlcihkYXRhMTYsIGxlbmd0aCwgbV9kYXRh
MTYsIG1fbGVuZ3RoLCAmZXJyb3IpOwogICAgIGlmICghZXJyb3IgJiYgcmVhbExlbmd0aCA9PSBs
ZW5ndGgpCiAgICAgICAgIHJldHVybiBuZXdJbXBsOwotICAgIG5ld0ltcGwgPSBjcmVhdGVVbmlu
aXRpYWxpemVkKHJlYWxMZW5ndGgsIGRhdGEpOwotICAgIFVuaWNvZGU6OnRvTG93ZXIoZGF0YSwg
cmVhbExlbmd0aCwgbV9kYXRhLCBtX2xlbmd0aCwgJmVycm9yKTsKKyAgICBuZXdJbXBsID0gY3Jl
YXRlVW5pbml0aWFsaXplZChyZWFsTGVuZ3RoLCBkYXRhMTYpOworICAgIFVuaWNvZGU6OnRvTG93
ZXIoZGF0YTE2LCByZWFsTGVuZ3RoLCBtX2RhdGExNiwgbV9sZW5ndGgsICZlcnJvcik7CiAgICAg
aWYgKGVycm9yKQogICAgICAgICByZXR1cm4gdGhpczsKICAgICByZXR1cm4gbmV3SW1wbDsKQEAg
LTI2MSwzMCArMzUwLDYwIEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6dXBw
ZXIKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGNvdWxkIGJlIG9wdGltaXplZCBmb3Igbm8tb3AgY2Fz
ZXMgdGhlIHdheSBsb3dlcigpIGlzLAogICAgIC8vIGJ1dCBpbiBlbXBpcmljYWwgdGVzdGluZywg
ZmV3IGFjdHVhbCBjYWxscyB0byB1cHBlcigpIGFyZSBuby1vcHMsIHNvCiAgICAgLy8gaXQgd291
bGRuJ3QgYmUgd29ydGggdGhlIGV4dHJhIHRpbWUgZm9yIHByZS1zY2FubmluZy4KLSAgICBVQ2hh
ciogZGF0YTsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlh
bGl6ZWQobV9sZW5ndGgsIGRhdGEpOwogCiAgICAgaWYgKG1fbGVuZ3RoID4gc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KG51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSkpCiAgICAgICAgIENSQVNI
KCk7CiAgICAgaW50MzJfdCBsZW5ndGggPSBtX2xlbmd0aDsKIAorICAgIGlmIChpczhCaXQoKSkg
eworICAgICAgICBMQ2hhciogZGF0YTg7CisgICAgICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBuZXdJ
bXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChtX2xlbmd0aCwgZGF0YTgpOworICAgICAgICAKKyAg
ICAgICAgLy8gRG8gYSBmYXN0ZXIgbG9vcCBmb3IgdGhlIGNhc2Ugd2hlcmUgYWxsIHRoZSBjaGFy
YWN0ZXJzIGFyZSBBU0NJSS4KKyAgICAgICAgY2hhciBvcmVkID0gMDsKKyAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgY2hhciBjID0gbV9kYXRh
OFtpXTsKKyAgICAgICAgICAgIG9yZWQgfD0gYzsKKyAgICAgICAgICAgIGRhdGE4W2ldID0gdG9B
U0NJSVVwcGVyKGMpOworICAgICAgICB9CisgICAgICAgIGlmICghKG9yZWQgJiB+MHg3RikpCisg
ICAgICAgICAgICByZXR1cm4gbmV3SW1wbC5yZWxlYXNlKCk7CisKKyAgICAgICAgLy8gRG8gYSBz
bG93ZXIgaW1wbGVtZW50YXRpb24gZm9yIGNhc2VzIHRoYXQgaW5jbHVkZSBub24tQVNDSUkgY2hh
cmFjdGVycy4KKyAgICAgICAgYm9vbCBlcnJvcjsKKyAgICAgICAgVUNoYXIqIGRhdGExNjsKKyAg
ICAgICAgbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQobV9sZW5ndGgsIGRhdGExNik7Cisg
ICAgICAgIGludDMyX3QgcmVhbExlbmd0aCA9IFVuaWNvZGU6OnRvVXBwZXIoZGF0YTE2LCBsZW5n
dGgsIG1fZGF0YTE2LCBtX2xlbmd0aCwgJmVycm9yKTsKKyAgICAgICAgaWYgKCFlcnJvciAmJiBy
ZWFsTGVuZ3RoID09IGxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybiBuZXdJbXBsOworICAgICAg
ICBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChyZWFsTGVuZ3RoLCBkYXRhMTYpOworICAg
ICAgICBVbmljb2RlOjp0b1VwcGVyKGRhdGExNiwgcmVhbExlbmd0aCwgbV9kYXRhMTYsIG1fbGVu
Z3RoLCAmZXJyb3IpOworICAgICAgICBpZiAoZXJyb3IpCisgICAgICAgICAgICByZXR1cm4gdGhp
czsKKyAgICAgICAgcmV0dXJuIG5ld0ltcGwucmVsZWFzZSgpOworICAgIH0KKworICAgIFVDaGFy
KiBkYXRhMTY7CisgICAgUmVmUHRyPFN0cmluZ0ltcGw+IG5ld0ltcGwgPSBjcmVhdGVVbmluaXRp
YWxpemVkKG1fbGVuZ3RoLCBkYXRhMTYpOworICAgIAogICAgIC8vIERvIGEgZmFzdGVyIGxvb3Ag
Zm9yIHRoZSBjYXNlIHdoZXJlIGFsbCB0aGUgY2hhcmFjdGVycyBhcmUgQVNDSUkuCiAgICAgVUNo
YXIgb3JlZCA9IDA7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAg
ICAgICBVQ2hhciBjID0gbV9kYXRhW2ldOworICAgICAgICBVQ2hhciBjID0gbV9kYXRhMTZbaV07
CiAgICAgICAgIG9yZWQgfD0gYzsKLSAgICAgICAgZGF0YVtpXSA9IHRvQVNDSUlVcHBlcihjKTsK
KyAgICAgICAgZGF0YTE2W2ldID0gdG9BU0NJSVVwcGVyKGMpOwogICAgIH0KICAgICBpZiAoIShv
cmVkICYgfjB4N0YpKQogICAgICAgICByZXR1cm4gbmV3SW1wbC5yZWxlYXNlKCk7CiAKICAgICAv
LyBEbyBhIHNsb3dlciBpbXBsZW1lbnRhdGlvbiBmb3IgY2FzZXMgdGhhdCBpbmNsdWRlIG5vbi1B
U0NJSSBjaGFyYWN0ZXJzLgogICAgIGJvb2wgZXJyb3I7Ci0gICAgaW50MzJfdCByZWFsTGVuZ3Ro
ID0gVW5pY29kZTo6dG9VcHBlcihkYXRhLCBsZW5ndGgsIG1fZGF0YSwgbV9sZW5ndGgsICZlcnJv
cik7CisgICAgbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQobV9sZW5ndGgsIGRhdGExNik7
CisgICAgaW50MzJfdCByZWFsTGVuZ3RoID0gVW5pY29kZTo6dG9VcHBlcihkYXRhMTYsIGxlbmd0
aCwgbV9kYXRhMTYsIG1fbGVuZ3RoLCAmZXJyb3IpOwogICAgIGlmICghZXJyb3IgJiYgcmVhbExl
bmd0aCA9PSBsZW5ndGgpCiAgICAgICAgIHJldHVybiBuZXdJbXBsOwotICAgIG5ld0ltcGwgPSBj
cmVhdGVVbmluaXRpYWxpemVkKHJlYWxMZW5ndGgsIGRhdGEpOwotICAgIFVuaWNvZGU6OnRvVXBw
ZXIoZGF0YSwgcmVhbExlbmd0aCwgbV9kYXRhLCBtX2xlbmd0aCwgJmVycm9yKTsKKyAgICBuZXdJ
bXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChyZWFsTGVuZ3RoLCBkYXRhMTYpOworICAgIFVuaWNv
ZGU6OnRvVXBwZXIoZGF0YTE2LCByZWFsTGVuZ3RoLCBtX2RhdGExNiwgbV9sZW5ndGgsICZlcnJv
cik7CiAgICAgaWYgKGVycm9yKQogICAgICAgICByZXR1cm4gdGhpczsKICAgICByZXR1cm4gbmV3
SW1wbC5yZWxlYXNlKCk7CkBAIC0yOTUsNiArNDE0LDEzIEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1w
bD4gU3RyaW5nSW1wbDo6ZmlsbCgKICAgICBpZiAoIW1fbGVuZ3RoKQogICAgICAgICByZXR1cm4g
dGhpczsKIAorICAgIGlmICghKGNoYXJhY3RlciAmIH4weDdGKSkgeworICAgICAgICBMQ2hhciog
ZGF0YTsKKyAgICAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IG5ld0ltcGwgPSBjcmVhdGVVbmluaXRp
YWxpemVkKG1fbGVuZ3RoLCBkYXRhKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fbGVuZ3RoOyArK2kpCisgICAgICAgICAgICBkYXRhW2ldID0gY2hhcmFjdGVyOworICAgICAg
ICByZXR1cm4gbmV3SW1wbC5yZWxlYXNlKCk7CisgICAgfQogICAgIFVDaGFyKiBkYXRhOwogICAg
IFJlZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChtX2xlbmd0
aCwgZGF0YSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbGVuZ3RoOyArK2kpCkBA
IC0zMDQsMTcgKzQzMCwyNCBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmZp
bGwoCiAKIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Zm9sZENhc2UoKQogewot
ICAgIFVDaGFyKiBkYXRhOwotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0gY3JlYXRl
VW5pbml0aWFsaXplZChtX2xlbmd0aCwgZGF0YSk7Ci0KICAgICBpZiAobV9sZW5ndGggPiBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4obnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgpKSkKICAgICAg
ICAgQ1JBU0goKTsKICAgICBpbnQzMl90IGxlbmd0aCA9IG1fbGVuZ3RoOwogCisgICAgaWYgKGlz
OEJpdCgpKSB7CisgICAgICAgIExDaGFyKiBkYXRhOworICAgICAgICBSZWZQdHIgPFN0cmluZ0lt
cGw+bmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQobV9sZW5ndGgsIGRhdGEpOworICAgICAg
ICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykKKyAgICAgICAgICAgIGRhdGFb
aV0gPSB0b0FTQ0lJTG93ZXIobV9kYXRhOFtpXSk7CisgICAgICAgIHJldHVybiBuZXdJbXBsLnJl
bGVhc2UoKTsKKyAgICB9CisKICAgICAvLyBEbyBhIGZhc3RlciBsb29wIGZvciB0aGUgY2FzZSB3
aGVyZSBhbGwgdGhlIGNoYXJhY3RlcnMgYXJlIEFTQ0lJLgorICAgIFVDaGFyKiBkYXRhOworICAg
IFJlZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChtX2xlbmd0
aCwgZGF0YSk7CiAgICAgVUNoYXIgb3JlZCA9IDA7CiAgICAgZm9yIChpbnQzMl90IGkgPSAwOyBp
IDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgVUNoYXIgYyA9IG1fZGF0YVtpXTsKKyAgICAgICAg
VUNoYXIgYyA9IG1fZGF0YTE2W2ldOwogICAgICAgICBvcmVkIHw9IGM7CiAgICAgICAgIGRhdGFb
aV0gPSB0b0FTQ0lJTG93ZXIoYyk7CiAgICAgfQpAQCAtMzIzLDExICs0NTYsMTEgQEAgUGFzc1Jl
ZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpmb2xkQwogCiAgICAgLy8gRG8gYSBzbG93ZXIg
aW1wbGVtZW50YXRpb24gZm9yIGNhc2VzIHRoYXQgaW5jbHVkZSBub24tQVNDSUkgY2hhcmFjdGVy
cy4KICAgICBib29sIGVycm9yOwotICAgIGludDMyX3QgcmVhbExlbmd0aCA9IFVuaWNvZGU6OmZv
bGRDYXNlKGRhdGEsIGxlbmd0aCwgbV9kYXRhLCBtX2xlbmd0aCwgJmVycm9yKTsKKyAgICBpbnQz
Ml90IHJlYWxMZW5ndGggPSBVbmljb2RlOjpmb2xkQ2FzZShkYXRhLCBsZW5ndGgsIG1fZGF0YTE2
LCBtX2xlbmd0aCwgJmVycm9yKTsKICAgICBpZiAoIWVycm9yICYmIHJlYWxMZW5ndGggPT0gbGVu
Z3RoKQogICAgICAgICByZXR1cm4gbmV3SW1wbC5yZWxlYXNlKCk7CiAgICAgbmV3SW1wbCA9IGNy
ZWF0ZVVuaW5pdGlhbGl6ZWQocmVhbExlbmd0aCwgZGF0YSk7Ci0gICAgVW5pY29kZTo6Zm9sZENh
c2UoZGF0YSwgcmVhbExlbmd0aCwgbV9kYXRhLCBtX2xlbmd0aCwgJmVycm9yKTsKKyAgICBVbmlj
b2RlOjpmb2xkQ2FzZShkYXRhLCByZWFsTGVuZ3RoLCBtX2RhdGExNiwgbV9sZW5ndGgsICZlcnJv
cik7CiAgICAgaWYgKGVycm9yKQogICAgICAgICByZXR1cm4gdGhpczsKICAgICByZXR1cm4gbmV3
SW1wbC5yZWxlYXNlKCk7CkBAIC0zNDMsNyArNDc2LDcgQEAgaW5saW5lIFBhc3NSZWZQdHI8U3Ry
aW5nSW1wbD4gU3RyaW5nSW1wbAogICAgIHVuc2lnbmVkIGVuZCA9IG1fbGVuZ3RoIC0gMTsKICAg
ICAKICAgICAvLyBza2lwIHdoaXRlIHNwYWNlIGZyb20gc3RhcnQKLSAgICB3aGlsZSAoc3RhcnQg
PD0gZW5kICYmIHByZWRpY2F0ZShtX2RhdGFbc3RhcnRdKSkKKyAgICB3aGlsZSAoc3RhcnQgPD0g
ZW5kICYmIHByZWRpY2F0ZShpczhCaXQoKSA/IG1fZGF0YThbc3RhcnRdIDogbV9kYXRhMTZbc3Rh
cnRdKSkKICAgICAgICAgc3RhcnQrKzsKICAgICAKICAgICAvLyBvbmx5IHdoaXRlIHNwYWNlCkBA
IC0zNTEsMTIgKzQ4NCwxNCBAQCBpbmxpbmUgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJ
bXBsCiAgICAgICAgIHJldHVybiBlbXB0eSgpOwogCiAgICAgLy8gc2tpcCB3aGl0ZSBzcGFjZSBm
cm9tIGVuZAotICAgIHdoaWxlIChlbmQgJiYgcHJlZGljYXRlKG1fZGF0YVtlbmRdKSkKKyAgICB3
aGlsZSAoZW5kICYmIHByZWRpY2F0ZShpczhCaXQoKSA/IG1fZGF0YThbZW5kXSA6IG1fZGF0YTE2
W2VuZF0pKQogICAgICAgICBlbmQtLTsKIAogICAgIGlmICghc3RhcnQgJiYgZW5kID09IG1fbGVu
Z3RoIC0gMSkKICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgcmV0dXJuIGNyZWF0ZShtX2RhdGEg
KyBzdGFydCwgZW5kICsgMSAtIHN0YXJ0KTsKKyAgICBpZiAoaXM4Qml0KCkpCisgICAgICAgIHJl
dHVybiBjcmVhdGUobV9kYXRhOCArIHN0YXJ0LCBlbmQgKyAxIC0gc3RhcnQpOworICAgIHJldHVy
biBjcmVhdGUobV9kYXRhMTYgKyBzdGFydCwgZW5kICsgMSAtIHN0YXJ0KTsKIH0KIAogY2xhc3Mg
VUNoYXJQcmVkaWNhdGUgewpAQCAtMzkwLDkgKzUyNSwxMCBAQCBQYXNzUmVmUHRyPFN0cmluZ0lt
cGw+IFN0cmluZ0ltcGw6OnN0cmlwCiAgICAgcmV0dXJuIHN0cmlwTWF0Y2hlZENoYXJhY3RlcnMo
VUNoYXJQcmVkaWNhdGUoaXNXaGl0ZVNwYWNlKSk7CiB9CiAKKy8vIEZJWE1FOiBBZGQgOC1iaXQg
cGF0aC4gTGlrZWx5IHJlcXVpcmVzIHRlbXBsYXRpemVkIFN0cmluZ0J1ZmZlciBjbGFzcwogUGFz
c1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpyZW1vdmVDaGFyYWN0ZXJzKENoYXJhY3Rl
ck1hdGNoRnVuY3Rpb25QdHIgZmluZE1hdGNoKQogewotICAgIGNvbnN0IFVDaGFyKiBmcm9tID0g
bV9kYXRhOworICAgIGNvbnN0IFVDaGFyKiBmcm9tID0gY2hhcmFjdGVycygpOwogICAgIGNvbnN0
IFVDaGFyKiBmcm9tZW5kID0gZnJvbSArIG1fbGVuZ3RoOwogCiAgICAgLy8gQXNzdW1lIHRoZSBj
b21tb24gY2FzZSB3aWxsIG5vdCByZW1vdmUgYW55IGNoYXJhY3RlcnMKQEAgLTQwMywxMCArNTM5
LDEwIEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6cmVtb3YKIAogICAgIFN0
cmluZ0J1ZmZlciBkYXRhKG1fbGVuZ3RoKTsKICAgICBVQ2hhciogdG8gPSBkYXRhLmNoYXJhY3Rl
cnMoKTsKLSAgICB1bnNpZ25lZCBvdXRjID0gZnJvbSAtIG1fZGF0YTsKKyAgICB1bnNpZ25lZCBv
dXRjID0gZnJvbSAtIGNoYXJhY3RlcnMxNigpOwogCiAgICAgaWYgKG91dGMpCi0gICAgICAgIG1l
bWNweSh0bywgbV9kYXRhLCBvdXRjICogc2l6ZW9mKFVDaGFyKSk7CisgICAgICAgIG1lbWNweSh0
bywgY2hhcmFjdGVyczE2KCksIG91dGMgKiBzaXplb2YoVUNoYXIpKTsKIAogICAgIHdoaWxlICh0
cnVlKSB7CiAgICAgICAgIHdoaWxlIChmcm9tICE9IGZyb21lbmQgJiYgZmluZE1hdGNoKCpmcm9t
KSkKQEAgLTQyMiwxMiArNTU4LDEzIEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1w
bDo6cmVtb3YKICAgICByZXR1cm4gYWRvcHQoZGF0YSk7CiB9CiAKKy8vIEZJWE1FOiBBZGQgOC1i
aXQgcGF0aC4gTGlrZWx5IHJlcXVpcmVzIHRlbXBsYXRpemVkIFN0cmluZ0J1ZmZlciBjbGFzcwog
dGVtcGxhdGUgPGNsYXNzIFVDaGFyUHJlZGljYXRlPgogaW5saW5lIFBhc3NSZWZQdHI8U3RyaW5n
SW1wbD4gU3RyaW5nSW1wbDo6c2ltcGxpZnlNYXRjaGVkQ2hhcmFjdGVyc1RvU3BhY2UoVUNoYXJQ
cmVkaWNhdGUgcHJlZGljYXRlKQogewogICAgIFN0cmluZ0J1ZmZlciBkYXRhKG1fbGVuZ3RoKTsK
IAotICAgIGNvbnN0IFVDaGFyKiBmcm9tID0gbV9kYXRhOworICAgIGNvbnN0IFVDaGFyKiBmcm9t
ID0gY2hhcmFjdGVyczE2KCk7CiAgICAgY29uc3QgVUNoYXIqIGZyb21lbmQgPSBmcm9tICsgbV9s
ZW5ndGg7CiAgICAgaW50IG91dGMgPSAwOwogICAgIGJvb2wgY2hhbmdlZFRvU3BhY2UgPSBmYWxz
ZTsKQEAgLTQ3MSw2NSArNjA4LDY3IEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1w
bDo6c2ltcGwKIAogaW50IFN0cmluZ0ltcGw6OnRvSW50U3RyaWN0KGJvb2wqIG9rLCBpbnQgYmFz
ZSkKIHsKLSAgICByZXR1cm4gY2hhcmFjdGVyc1RvSW50U3RyaWN0KG1fZGF0YSwgbV9sZW5ndGgs
IG9rLCBiYXNlKTsKKyAgICByZXR1cm4gY2hhcmFjdGVyc1RvSW50U3RyaWN0KGNoYXJhY3RlcnMx
NigpLCBtX2xlbmd0aCwgb2ssIGJhc2UpOwogfQogCiB1bnNpZ25lZCBTdHJpbmdJbXBsOjp0b1VJ
bnRTdHJpY3QoYm9vbCogb2ssIGludCBiYXNlKQogewotICAgIHJldHVybiBjaGFyYWN0ZXJzVG9V
SW50U3RyaWN0KG1fZGF0YSwgbV9sZW5ndGgsIG9rLCBiYXNlKTsKKyAgICByZXR1cm4gY2hhcmFj
dGVyc1RvVUludFN0cmljdChjaGFyYWN0ZXJzMTYoKSwgbV9sZW5ndGgsIG9rLCBiYXNlKTsKIH0K
IAogaW50NjRfdCBTdHJpbmdJbXBsOjp0b0ludDY0U3RyaWN0KGJvb2wqIG9rLCBpbnQgYmFzZSkK
IHsKLSAgICByZXR1cm4gY2hhcmFjdGVyc1RvSW50NjRTdHJpY3QobV9kYXRhLCBtX2xlbmd0aCwg
b2ssIGJhc2UpOworICAgIHJldHVybiBjaGFyYWN0ZXJzVG9JbnQ2NFN0cmljdChjaGFyYWN0ZXJz
MTYoKSwgbV9sZW5ndGgsIG9rLCBiYXNlKTsKKwogfQogCiB1aW50NjRfdCBTdHJpbmdJbXBsOjp0
b1VJbnQ2NFN0cmljdChib29sKiBvaywgaW50IGJhc2UpCiB7Ci0gICAgcmV0dXJuIGNoYXJhY3Rl
cnNUb1VJbnQ2NFN0cmljdChtX2RhdGEsIG1fbGVuZ3RoLCBvaywgYmFzZSk7CisgICAgcmV0dXJu
IGNoYXJhY3RlcnNUb1VJbnQ2NFN0cmljdChjaGFyYWN0ZXJzMTYoKSwgbV9sZW5ndGgsIG9rLCBi
YXNlKTsKIH0KIAogaW50cHRyX3QgU3RyaW5nSW1wbDo6dG9JbnRQdHJTdHJpY3QoYm9vbCogb2ss
IGludCBiYXNlKQogewotICAgIHJldHVybiBjaGFyYWN0ZXJzVG9JbnRQdHJTdHJpY3QobV9kYXRh
LCBtX2xlbmd0aCwgb2ssIGJhc2UpOworICAgIHJldHVybiBjaGFyYWN0ZXJzVG9JbnRQdHJTdHJp
Y3QoY2hhcmFjdGVyczE2KCksIG1fbGVuZ3RoLCBvaywgYmFzZSk7CiB9CiAKIGludCBTdHJpbmdJ
bXBsOjp0b0ludChib29sKiBvaykKIHsKLSAgICByZXR1cm4gY2hhcmFjdGVyc1RvSW50KG1fZGF0
YSwgbV9sZW5ndGgsIG9rKTsKKyAgICByZXR1cm4gY2hhcmFjdGVyc1RvSW50KGNoYXJhY3RlcnMx
NigpLCBtX2xlbmd0aCwgb2spOwogfQogCiB1bnNpZ25lZCBTdHJpbmdJbXBsOjp0b1VJbnQoYm9v
bCogb2spCiB7Ci0gICAgcmV0dXJuIGNoYXJhY3RlcnNUb1VJbnQobV9kYXRhLCBtX2xlbmd0aCwg
b2spOworICAgIHJldHVybiBjaGFyYWN0ZXJzVG9VSW50KGNoYXJhY3RlcnMxNigpLCBtX2xlbmd0
aCwgb2spOwogfQogCiBpbnQ2NF90IFN0cmluZ0ltcGw6OnRvSW50NjQoYm9vbCogb2spCiB7Ci0g
ICAgcmV0dXJuIGNoYXJhY3RlcnNUb0ludDY0KG1fZGF0YSwgbV9sZW5ndGgsIG9rKTsKKyAgICBy
ZXR1cm4gY2hhcmFjdGVyc1RvSW50NjQoY2hhcmFjdGVyczE2KCksIG1fbGVuZ3RoLCBvayk7CiB9
CiAKIHVpbnQ2NF90IFN0cmluZ0ltcGw6OnRvVUludDY0KGJvb2wqIG9rKQogewotICAgIHJldHVy
biBjaGFyYWN0ZXJzVG9VSW50NjQobV9kYXRhLCBtX2xlbmd0aCwgb2spOworICAgIHJldHVybiBj
aGFyYWN0ZXJzVG9VSW50NjQoY2hhcmFjdGVyczE2KCksIG1fbGVuZ3RoLCBvayk7CiB9CiAKIGlu
dHB0cl90IFN0cmluZ0ltcGw6OnRvSW50UHRyKGJvb2wqIG9rKQogewotICAgIHJldHVybiBjaGFy
YWN0ZXJzVG9JbnRQdHIobV9kYXRhLCBtX2xlbmd0aCwgb2spOworICAgIHJldHVybiBjaGFyYWN0
ZXJzVG9JbnRQdHIoY2hhcmFjdGVyczE2KCksIG1fbGVuZ3RoLCBvayk7CisKIH0KIAogZG91Ymxl
IFN0cmluZ0ltcGw6OnRvRG91YmxlKGJvb2wqIG9rLCBib29sKiBkaWRSZWFkTnVtYmVyKQogewot
ICAgIHJldHVybiBjaGFyYWN0ZXJzVG9Eb3VibGUobV9kYXRhLCBtX2xlbmd0aCwgb2ssIGRpZFJl
YWROdW1iZXIpOworICAgIHJldHVybiBjaGFyYWN0ZXJzVG9Eb3VibGUoY2hhcmFjdGVyczE2KCks
IG1fbGVuZ3RoLCBvaywgZGlkUmVhZE51bWJlcik7CiB9CiAKIGZsb2F0IFN0cmluZ0ltcGw6OnRv
RmxvYXQoYm9vbCogb2ssIGJvb2wqIGRpZFJlYWROdW1iZXIpCiB7Ci0gICAgcmV0dXJuIGNoYXJh
Y3RlcnNUb0Zsb2F0KG1fZGF0YSwgbV9sZW5ndGgsIG9rLCBkaWRSZWFkTnVtYmVyKTsKKyAgICBy
ZXR1cm4gY2hhcmFjdGVyc1RvRmxvYXQoY2hhcmFjdGVyczE2KCksIG1fbGVuZ3RoLCBvaywgZGlk
UmVhZE51bWJlcik7CiB9CiAKLXN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFVDaGFyKiBhLCBjb25z
dCBjaGFyKiBiLCBpbnQgbGVuZ3RoKQorc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgVUNoYXIqIGEs
IGNvbnN0IExDaGFyKiBiLCBpbnQgbGVuZ3RoKQogewogICAgIEFTU0VSVChsZW5ndGggPj0gMCk7
CiAgICAgd2hpbGUgKGxlbmd0aC0tKSB7CkBAIC01NDAsNyArNjc5LDcgQEAgc3RhdGljIGJvb2wg
ZXF1YWwoY29uc3QgVUNoYXIqIGEsIGNvbnN0IAogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29s
IGVxdWFsSWdub3JpbmdDYXNlKGNvbnN0IFVDaGFyKiBhLCBjb25zdCBjaGFyKiBiLCB1bnNpZ25l
ZCBsZW5ndGgpCitib29sIGVxdWFsSWdub3JpbmdDYXNlKGNvbnN0IFVDaGFyKiBhLCBjb25zdCBM
Q2hhciogYiwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIHdoaWxlIChsZW5ndGgtLSkgewogICAg
ICAgICB1bnNpZ25lZCBjaGFyIGJjID0gKmIrKzsKQEAgLTU4MSwyMCArNzIwLDIwIEBAIGludCBj
b2RlUG9pbnRDb21wYXJlKGNvbnN0IFN0cmluZ0ltcGwqIHMKIAogc2l6ZV90IFN0cmluZ0ltcGw6
OmZpbmQoVUNoYXIgYywgdW5zaWduZWQgc3RhcnQpCiB7Ci0gICAgcmV0dXJuIFdURjo6ZmluZCht
X2RhdGEsIG1fbGVuZ3RoLCBjLCBzdGFydCk7CisgICAgcmV0dXJuIFdURjo6ZmluZChjaGFyYWN0
ZXJzMTYoKSwgbV9sZW5ndGgsIGMsIHN0YXJ0KTsKIH0KIAogc2l6ZV90IFN0cmluZ0ltcGw6OmZp
bmQoQ2hhcmFjdGVyTWF0Y2hGdW5jdGlvblB0ciBtYXRjaEZ1bmN0aW9uLCB1bnNpZ25lZCBzdGFy
dCkKIHsKLSAgICByZXR1cm4gV1RGOjpmaW5kKG1fZGF0YSwgbV9sZW5ndGgsIG1hdGNoRnVuY3Rp
b24sIHN0YXJ0KTsKKyAgICByZXR1cm4gV1RGOjpmaW5kKGNoYXJhY3RlcnMxNigpLCBtX2xlbmd0
aCwgbWF0Y2hGdW5jdGlvbiwgc3RhcnQpOwogfQogCi1zaXplX3QgU3RyaW5nSW1wbDo6ZmluZChj
b25zdCBjaGFyKiBtYXRjaFN0cmluZywgdW5zaWduZWQgaW5kZXgpCitzaXplX3QgU3RyaW5nSW1w
bDo6ZmluZChjb25zdCBMQ2hhciogbWF0Y2hTdHJpbmcsIHVuc2lnbmVkIGluZGV4KQogewogICAg
IC8vIENoZWNrIGZvciBudWxsIG9yIGVtcHR5IHN0cmluZyB0byBtYXRjaCBhZ2FpbnN0CiAgICAg
aWYgKCFtYXRjaFN0cmluZykKICAgICAgICAgcmV0dXJuIG5vdEZvdW5kOwotICAgIHNpemVfdCBt
YXRjaFN0cmluZ0xlbmd0aCA9IHN0cmxlbihtYXRjaFN0cmluZyk7CisgICAgc2l6ZV90IG1hdGNo
U3RyaW5nTGVuZ3RoID0gc3RybGVuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KG1hdGNo
U3RyaW5nKSk7CiAgICAgaWYgKG1hdGNoU3RyaW5nTGVuZ3RoID4gbnVtZXJpY19saW1pdHM8dW5z
aWduZWQ+OjptYXgoKSkKICAgICAgICAgQ1JBU0goKTsKICAgICB1bnNpZ25lZCBtYXRjaExlbmd0
aCA9IG1hdGNoU3RyaW5nTGVuZ3RoOwpAQCAtNjAzLDcgKzc0Miw3IEBAIHNpemVfdCBTdHJpbmdJ
bXBsOjpmaW5kKGNvbnN0IGNoYXIqIG1hdGMKIAogICAgIC8vIE9wdGltaXphdGlvbiAxOiBmYXN0
IGNhc2UgZm9yIHN0cmluZ3Mgb2YgbGVuZ3RoIDEuCiAgICAgaWYgKG1hdGNoTGVuZ3RoID09IDEp
Ci0gICAgICAgIHJldHVybiBXVEY6OmZpbmQoY2hhcmFjdGVycygpLCBsZW5ndGgoKSwgKihjb25z
dCB1bnNpZ25lZCBjaGFyKiltYXRjaFN0cmluZywgaW5kZXgpOworICAgICAgICByZXR1cm4gV1RG
OjpmaW5kKGNoYXJhY3RlcnMxNigpLCBsZW5ndGgoKSwgKm1hdGNoU3RyaW5nLCBpbmRleCk7CiAK
ICAgICAvLyBDaGVjayBpbmRleCAmIG1hdGNoTGVuZ3RoIGFyZSBpbiByYW5nZS4KICAgICBpZiAo
aW5kZXggPiBsZW5ndGgoKSkKQEAgLTYxNSw3ICs3NTQsNiBAQCBzaXplX3QgU3RyaW5nSW1wbDo6
ZmluZChjb25zdCBjaGFyKiBtYXRjCiAgICAgdW5zaWduZWQgZGVsdGEgPSBzZWFyY2hMZW5ndGgg
LSBtYXRjaExlbmd0aDsKIAogICAgIGNvbnN0IFVDaGFyKiBzZWFyY2hDaGFyYWN0ZXJzID0gY2hh
cmFjdGVycygpICsgaW5kZXg7Ci0gICAgY29uc3QgdW5zaWduZWQgY2hhciogbWF0Y2hDaGFyYWN0
ZXJzID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIqKW1hdGNoU3RyaW5nOwogCiAgICAgLy8gT3B0aW1p
emF0aW9uIDI6IGtlZXAgYSBydW5uaW5nIGhhc2ggb2YgdGhlIHN0cmluZ3MsCiAgICAgLy8gb25s
eSBjYWxsIG1lbWNtcCBpZiB0aGUgaGFzaGVzIG1hdGNoLgpAQCAtNjIzLDcgKzc2MSw3IEBAIHNp
emVfdCBTdHJpbmdJbXBsOjpmaW5kKGNvbnN0IGNoYXIqIG1hdGMKICAgICB1bnNpZ25lZCBtYXRj
aEhhc2ggPSAwOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtYXRjaExlbmd0aDsgKytp
KSB7CiAgICAgICAgIHNlYXJjaEhhc2ggKz0gc2VhcmNoQ2hhcmFjdGVyc1tpXTsKLSAgICAgICAg
bWF0Y2hIYXNoICs9IG1hdGNoQ2hhcmFjdGVyc1tpXTsKKyAgICAgICAgbWF0Y2hIYXNoICs9IG1h
dGNoU3RyaW5nW2ldOwogICAgIH0KIAogICAgIHVuc2lnbmVkIGkgPSAwOwpAQCAtNjM4LDEyICs3
NzYsMTIgQEAgc2l6ZV90IFN0cmluZ0ltcGw6OmZpbmQoY29uc3QgY2hhciogbWF0YwogICAgIHJl
dHVybiBpbmRleCArIGk7CiB9CiAKLXNpemVfdCBTdHJpbmdJbXBsOjpmaW5kSWdub3JpbmdDYXNl
KGNvbnN0IGNoYXIqIG1hdGNoU3RyaW5nLCB1bnNpZ25lZCBpbmRleCkKK3NpemVfdCBTdHJpbmdJ
bXBsOjpmaW5kSWdub3JpbmdDYXNlKGNvbnN0IExDaGFyKiBtYXRjaFN0cmluZywgdW5zaWduZWQg
aW5kZXgpCiB7CiAgICAgLy8gQ2hlY2sgZm9yIG51bGwgb3IgZW1wdHkgc3RyaW5nIHRvIG1hdGNo
IGFnYWluc3QKICAgICBpZiAoIW1hdGNoU3RyaW5nKQogICAgICAgICByZXR1cm4gbm90Rm91bmQ7
Ci0gICAgc2l6ZV90IG1hdGNoU3RyaW5nTGVuZ3RoID0gc3RybGVuKG1hdGNoU3RyaW5nKTsKKyAg
ICBzaXplX3QgbWF0Y2hTdHJpbmdMZW5ndGggPSBzdHJsZW4ocmVpbnRlcnByZXRfY2FzdDxjb25z
dCBjaGFyICo+KG1hdGNoU3RyaW5nKSk7CiAgICAgaWYgKG1hdGNoU3RyaW5nTGVuZ3RoID4gbnVt
ZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKICAgICAgICAgQ1JBU0goKTsKICAgICB1bnNp
Z25lZCBtYXRjaExlbmd0aCA9IG1hdGNoU3RyaW5nTGVuZ3RoOwpAQCAtNjgyLDcgKzgyMCw3IEBA
IHNpemVfdCBTdHJpbmdJbXBsOjpmaW5kKFN0cmluZ0ltcGwqIG1hdGMKIAogICAgIC8vIE9wdGlt
aXphdGlvbiAxOiBmYXN0IGNhc2UgZm9yIHN0cmluZ3Mgb2YgbGVuZ3RoIDEuCiAgICAgaWYgKG1h
dGNoTGVuZ3RoID09IDEpCi0gICAgICAgIHJldHVybiBXVEY6OmZpbmQoY2hhcmFjdGVycygpLCBs
ZW5ndGgoKSwgbWF0Y2hTdHJpbmctPmNoYXJhY3RlcnMoKVswXSwgaW5kZXgpOworICAgICAgICBy
ZXR1cm4gV1RGOjpmaW5kKGNoYXJhY3RlcnMxNigpLCBsZW5ndGgoKSwgbWF0Y2hTdHJpbmctPmNo
YXJhY3RlcnMxNigpWzBdLCBpbmRleCk7CiAKICAgICAvLyBDaGVjayBpbmRleCAmIG1hdGNoTGVu
Z3RoIGFyZSBpbiByYW5nZS4KICAgICBpZiAoaW5kZXggPiBsZW5ndGgoKSkKQEAgLTc1MCw3ICs4
ODgsNyBAQCBzaXplX3QgU3RyaW5nSW1wbDo6ZmluZElnbm9yaW5nQ2FzZShTdHJpCiAKIHNpemVf
dCBTdHJpbmdJbXBsOjpyZXZlcnNlRmluZChVQ2hhciBjLCB1bnNpZ25lZCBpbmRleCkKIHsKLSAg
ICByZXR1cm4gV1RGOjpyZXZlcnNlRmluZChtX2RhdGEsIG1fbGVuZ3RoLCBjLCBpbmRleCk7Cisg
ICAgcmV0dXJuIFdURjo6cmV2ZXJzZUZpbmQoY2hhcmFjdGVyczE2KCksIG1fbGVuZ3RoLCBjLCBp
bmRleCk7CiB9CiAKIHNpemVfdCBTdHJpbmdJbXBsOjpyZXZlcnNlRmluZChTdHJpbmdJbXBsKiBt
YXRjaFN0cmluZywgdW5zaWduZWQgaW5kZXgpCkBAIC03NjQsNyArOTAyLDcgQEAgc2l6ZV90IFN0
cmluZ0ltcGw6OnJldmVyc2VGaW5kKFN0cmluZ0ltcAogCiAgICAgLy8gT3B0aW1pemF0aW9uIDE6
IGZhc3QgY2FzZSBmb3Igc3RyaW5ncyBvZiBsZW5ndGggMS4KICAgICBpZiAobWF0Y2hMZW5ndGgg
PT0gMSkKLSAgICAgICAgcmV0dXJuIFdURjo6cmV2ZXJzZUZpbmQoY2hhcmFjdGVycygpLCBsZW5n
dGgoKSwgbWF0Y2hTdHJpbmctPmNoYXJhY3RlcnMoKVswXSwgaW5kZXgpOworICAgICAgICByZXR1
cm4gV1RGOjpyZXZlcnNlRmluZChjaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoKCksIG1hdGNoU3RyaW5n
LT5jaGFyYWN0ZXJzKClbMF0sIGluZGV4KTsKIAogICAgIC8vIENoZWNrIGluZGV4ICYgbWF0Y2hM
ZW5ndGggYXJlIGluIHJhbmdlLgogICAgIGlmIChtYXRjaExlbmd0aCA+IGxlbmd0aCgpKQpAQCAt
ODM3LDE3ICs5NzUsNTMgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpyZXBs
YQogICAgIGlmIChvbGRDID09IG5ld0MpCiAgICAgICAgIHJldHVybiB0aGlzOwogICAgIHVuc2ln
bmVkIGk7Ci0gICAgZm9yIChpID0gMDsgaSAhPSBtX2xlbmd0aDsgKytpKQotICAgICAgICBpZiAo
bV9kYXRhW2ldID09IG9sZEMpCisgICAgZm9yIChpID0gMDsgaSAhPSBtX2xlbmd0aDsgKytpKSB7
CisgICAgICAgIFVDaGFyIGMgPSBpczhCaXQoKSA/IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+
KG1fZGF0YThbaV0pIDogbV9kYXRhMTZbaV07CisgICAgICAgIGlmIChjID09IG9sZEMpCiAgICAg
ICAgICAgICBicmVhazsKKyAgICB9CiAgICAgaWYgKGkgPT0gbV9sZW5ndGgpCiAgICAgICAgIHJl
dHVybiB0aGlzOwogCisgICAgaWYgKGlzOEJpdCgpKSB7CisgICAgICAgIGlmIChvbGRDID4gMHhm
ZikgLy8gTG9va2luZyBmb3IgYSAxNiBiaXQgY2hhciBpbiBhbiA4IGJpdCBzdHJpbmcKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzOworCisgICAgICAgIGlmIChuZXdDIDw9IDB4ZmYpIHsKKyAgICAg
ICAgICAgIExDaGFyKiBkYXRhOworICAgICAgICAgICAgTENoYXIgb2xkQ2hhciA9IHN0YXRpY19j
YXN0PExDaGFyPihvbGRDKTsKKyAgICAgICAgICAgIExDaGFyIG5ld0NoYXIgPSBzdGF0aWNfY2Fz
dDxMQ2hhcj4obmV3Qyk7CisKKyAgICAgICAgICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBs
ID0gY3JlYXRlVW5pbml0aWFsaXplZChtX2xlbmd0aCwgZGF0YSk7CisKKyAgICAgICAgICAgIGZv
ciAoaSA9IDA7IGkgIT0gbV9sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgIGNoYXIgY2gg
PSBtX2RhdGE4W2ldOworICAgICAgICAgICAgICAgIGlmIChjaCA9PSBvbGRDaGFyKQorICAgICAg
ICAgICAgICAgICAgICBjaCA9IG5ld0NoYXI7CisgICAgICAgICAgICAgICAgZGF0YVtpXSA9IGNo
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG5ld0ltcGwucmVsZWFzZSgpOwor
ICAgICAgICB9CisKKyAgICAgICAgLy8gUG9zc2libHkgbmVlZCB0byB1cCBjb252ZXJ0IGZyb20g
OCB0byAxNiBiaXQKKyAgICAgICAgVUNoYXIqIGRhdGE7CisgICAgICAgIFJlZlB0cjxTdHJpbmdJ
bXBsPiBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChtX2xlbmd0aCwgZGF0YSk7CisKKyAg
ICAgICAgZm9yIChpID0gMDsgaSAhPSBtX2xlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBVQ2hh
ciBjaCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KG1fZGF0YThbaV0pOworICAgICAgICAg
ICAgaWYgKGNoID09IG9sZEMpCisgICAgICAgICAgICAgICAgY2ggPSBuZXdDOworICAgICAgICAg
ICAgZGF0YVtpXSA9IGNoOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG5ld0ltcGwucmVs
ZWFzZSgpOworICAgIH0KKwogICAgIFVDaGFyKiBkYXRhOwogICAgIFJlZlB0cjxTdHJpbmdJbXBs
PiBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChtX2xlbmd0aCwgZGF0YSk7CiAKICAgICBm
b3IgKGkgPSAwOyBpICE9IG1fbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgVUNoYXIgY2ggPSBtX2Rh
dGFbaV07CisgICAgICAgIFVDaGFyIGNoID0gbV9kYXRhMTZbaV07CiAgICAgICAgIGlmIChjaCA9
PSBvbGRDKQogICAgICAgICAgICAgY2ggPSBuZXdDOwogICAgICAgICBkYXRhW2ldID0gY2g7CkBA
IC04NjIsMTggKzEwMzYsNDMgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpy
ZXBsYQogICAgIHVuc2lnbmVkIGxlbmd0aFRvSW5zZXJ0ID0gc3RyID8gc3RyLT5sZW5ndGgoKSA6
IDA7CiAgICAgaWYgKCFsZW5ndGhUb1JlcGxhY2UgJiYgIWxlbmd0aFRvSW5zZXJ0KQogICAgICAg
ICByZXR1cm4gdGhpczsKLSAgICBVQ2hhciogZGF0YTsKIAogICAgIGlmICgobGVuZ3RoKCkgLSBs
ZW5ndGhUb1JlcGxhY2UpID49IChudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIC0gbGVu
Z3RoVG9JbnNlcnQpKQogICAgICAgICBDUkFTSCgpOwogCisgICAgaWYgKGlzOEJpdCgpICYmICgh
c3RyIHx8IHN0ci0+aXM4Qml0KCkpKSB7CisgICAgICAgIExDaGFyKiBkYXRhOworICAgICAgICBS
ZWZQdHI8U3RyaW5nSW1wbD4gbmV3SW1wbCA9CisgICAgICAgIGNyZWF0ZVVuaW5pdGlhbGl6ZWQo
bGVuZ3RoKCkgLSBsZW5ndGhUb1JlcGxhY2UgKyBsZW5ndGhUb0luc2VydCwgZGF0YSk7CisgICAg
ICAgIG1lbWNweShkYXRhLCBtX2RhdGE4LCBwb3NpdGlvbiAqIHNpemVvZihjaGFyKSk7CisgICAg
ICAgIGlmIChzdHIpCisgICAgICAgICAgICBtZW1jcHkoZGF0YSArIHBvc2l0aW9uLCBzdHItPm1f
ZGF0YTgsIGxlbmd0aFRvSW5zZXJ0ICogc2l6ZW9mKGNoYXIpKTsKKyAgICAgICAgbWVtY3B5KGRh
dGEgKyBwb3NpdGlvbiArIGxlbmd0aFRvSW5zZXJ0LCBtX2RhdGE4ICsgcG9zaXRpb24gKyBsZW5n
dGhUb1JlcGxhY2UsCisgICAgICAgICAgICAgICAobGVuZ3RoKCkgLSBwb3NpdGlvbiAtIGxlbmd0
aFRvUmVwbGFjZSkgKiBzaXplb2YoY2hhcikpOworICAgICAgICByZXR1cm4gbmV3SW1wbC5yZWxl
YXNlKCk7CisgICAgfQorICAgIFVDaGFyKiBkYXRhOwogICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBu
ZXdJbXBsID0KICAgICAgICAgY3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgoKSAtIGxlbmd0aFRv
UmVwbGFjZSArIGxlbmd0aFRvSW5zZXJ0LCBkYXRhKTsKLSAgICBtZW1jcHkoZGF0YSwgY2hhcmFj
dGVycygpLCBwb3NpdGlvbiAqIHNpemVvZihVQ2hhcikpOwotICAgIGlmIChzdHIpCi0gICAgICAg
IG1lbWNweShkYXRhICsgcG9zaXRpb24sIHN0ci0+Y2hhcmFjdGVycygpLCBsZW5ndGhUb0luc2Vy
dCAqIHNpemVvZihVQ2hhcikpOwotICAgIG1lbWNweShkYXRhICsgcG9zaXRpb24gKyBsZW5ndGhU
b0luc2VydCwgY2hhcmFjdGVycygpICsgcG9zaXRpb24gKyBsZW5ndGhUb1JlcGxhY2UsCi0gICAg
ICAgIChsZW5ndGgoKSAtIHBvc2l0aW9uIC0gbGVuZ3RoVG9SZXBsYWNlKSAqIHNpemVvZihVQ2hh
cikpOworICAgIGlmIChpczhCaXQoKSkKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHBvc2l0aW9uOyBpKyspCisgICAgICAgICAgICBkYXRhW2ldID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcj4obV9kYXRhOFtpXSk7CisgICAgZWxzZQorICAgICAgICBtZW1jcHkoZGF0YSwgbV9k
YXRhMTYsIHBvc2l0aW9uICogc2l6ZW9mKFVDaGFyKSk7CisgICAgaWYgKHN0cikgeworICAgICAg
ICBpZiAoc3RyLT5pczhCaXQoKSkKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsZW5ndGhUb0luc2VydDsgaSsrKQorICAgICAgICAgICAgICAgIGRhdGFbaSArIHBvc2l0aW9u
XSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KHN0ci0+bV9kYXRhOFtpXSk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIG1lbWNweShkYXRhICsgcG9zaXRpb24sIHN0ci0+bV9kYXRhMTYs
IGxlbmd0aFRvSW5zZXJ0ICogc2l6ZW9mKFVDaGFyKSk7CisgICAgfQorICAgIGlmIChpczhCaXQo
KSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoKCkgLSBwb3NpdGlv
biAtIGxlbmd0aFRvUmVwbGFjZTsgaSsrKQorICAgICAgICAgICAgZGF0YVtpICsgcG9zaXRpb24g
KyBsZW5ndGhUb0luc2VydF0gPSBtX2RhdGE4W2kgKyBwb3NpdGlvbiArIGxlbmd0aFRvUmVwbGFj
ZV07CisgICAgfSBlbHNlIHsKKyAgICAgICAgbWVtY3B5KGRhdGEgKyBwb3NpdGlvbiArIGxlbmd0
aFRvSW5zZXJ0LCBjaGFyYWN0ZXJzKCkgKyBwb3NpdGlvbiArIGxlbmd0aFRvUmVwbGFjZSwKKyAg
ICAgICAgICAgIChsZW5ndGgoKSAtIHBvc2l0aW9uIC0gbGVuZ3RoVG9SZXBsYWNlKSAqIHNpemVv
ZihVQ2hhcikpOworICAgIH0KICAgICByZXR1cm4gbmV3SW1wbC5yZWxlYXNlKCk7CiB9CiAKQEAg
LTkwNiwyNiArMTEwNSw2NCBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnJl
cGxhCiAKICAgICBuZXdTaXplICs9IHJlcGxhY2VTaXplOwogCi0gICAgVUNoYXIqIGRhdGE7Ci0g
ICAgUmVmUHRyPFN0cmluZ0ltcGw+IG5ld0ltcGwgPSBjcmVhdGVVbmluaXRpYWxpemVkKG5ld1Np
emUsIGRhdGEpOwotCiAgICAgLy8gQ29uc3RydWN0IHRoZSBuZXcgZGF0YQogICAgIHNpemVfdCBz
cmNTZWdtZW50RW5kOwogICAgIHVuc2lnbmVkIHNyY1NlZ21lbnRMZW5ndGg7CiAgICAgc3JjU2Vn
bWVudFN0YXJ0ID0gMDsKICAgICB1bnNpZ25lZCBkc3RPZmZzZXQgPSAwOwogICAgIAorICAgIC8v
IFRoZXJlIGFyZSA0IGNhc2VzOgorICAgIC8vIDEuIHRoaXMgYW5kIHJlcGxhY2VtZW50IGFyZSBi
b3RoIDE2IGJpdAorICAgIC8vIDIuIHRoaXMgYW5kIHJlcGxhY2VtZW50IGFyZSBib3RoIDggYml0
CisgICAgLy8gMy4gdGhpcyBpcyA4IGJpdCBhbmQgcmVwbGFjZW1lbnQgaXMgMTYgYml0CisgICAg
Ly8gNC4gdGhpcyBpcyAxNiBiaXQgYW5kIHJlcGxhY2VtZW50IGlzIDggYml0CisgICAgLy8gUGx1
cyB0aGVyZSBpcyB2ZXJ5IHNpbWlsYXIgY29kZSBpbiB0aGUgcGF0dGVybiByZXBsYWNlbWVudCBm
dW5jdGlvbiBiZWxvdy4KKyAgICBpZiAoaXM4Qml0KCkgJiYgcmVwbGFjZW1lbnQtPmlzOEJpdCgp
KSB7CisgICAgICAgIExDaGFyKiBkYXRhOworICAgICAgICBSZWZQdHI8U3RyaW5nSW1wbD4gbmV3
SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQobmV3U2l6ZSwgZGF0YSk7CisKKyAgICAgICAgd2hp
bGUgKChzcmNTZWdtZW50RW5kID0gZmluZChwYXR0ZXJuLCBzcmNTZWdtZW50U3RhcnQpKSAhPSBu
b3RGb3VuZCkgeworICAgICAgICAgICAgc3JjU2VnbWVudExlbmd0aCA9IHNyY1NlZ21lbnRFbmQg
LSBzcmNTZWdtZW50U3RhcnQ7CisgICAgICAgICAgICBtZW1jcHkoZGF0YSArIGRzdE9mZnNldCwg
bV9kYXRhOCArIHNyY1NlZ21lbnRTdGFydCwgc3JjU2VnbWVudExlbmd0aCAqIHNpemVvZihjaGFy
KSk7CisgICAgICAgICAgICBkc3RPZmZzZXQgKz0gc3JjU2VnbWVudExlbmd0aDsKKyAgICAgICAg
ICAgIG1lbWNweShkYXRhICsgZHN0T2Zmc2V0LCByZXBsYWNlbWVudC0+bV9kYXRhOCwgcmVwU3Ry
TGVuZ3RoICogc2l6ZW9mKGNoYXIpKTsKKyAgICAgICAgICAgIGRzdE9mZnNldCArPSByZXBTdHJM
ZW5ndGg7CisgICAgICAgICAgICBzcmNTZWdtZW50U3RhcnQgPSBzcmNTZWdtZW50RW5kICsgMTsK
KyAgICAgICAgfQorCisgICAgICAgIHNyY1NlZ21lbnRMZW5ndGggPSBtX2xlbmd0aCAtIHNyY1Nl
Z21lbnRTdGFydDsKKyAgICAgICAgbWVtY3B5KGRhdGEgKyBkc3RPZmZzZXQsIG1fZGF0YTggKyBz
cmNTZWdtZW50U3RhcnQsIHNyY1NlZ21lbnRMZW5ndGggKiBzaXplb2YoY2hhcikpOworCisgICAg
ICAgIEFTU0VSVChkc3RPZmZzZXQgKyBzcmNTZWdtZW50TGVuZ3RoID09IG5ld0ltcGwtPmxlbmd0
aCgpKTsKKworICAgICAgICByZXR1cm4gbmV3SW1wbC5yZWxlYXNlKCk7CisgICAgfQorICAgIFVD
aGFyKiBkYXRhOworICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0gY3JlYXRlVW5pbml0
aWFsaXplZChuZXdTaXplLCBkYXRhKTsKKwogICAgIHdoaWxlICgoc3JjU2VnbWVudEVuZCA9IGZp
bmQocGF0dGVybiwgc3JjU2VnbWVudFN0YXJ0KSkgIT0gbm90Rm91bmQpIHsKICAgICAgICAgc3Jj
U2VnbWVudExlbmd0aCA9IHNyY1NlZ21lbnRFbmQgLSBzcmNTZWdtZW50U3RhcnQ7Ci0gICAgICAg
IG1lbWNweShkYXRhICsgZHN0T2Zmc2V0LCBtX2RhdGEgKyBzcmNTZWdtZW50U3RhcnQsIHNyY1Nl
Z21lbnRMZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKKyAgICAgICAgaWYgKGlzOEJpdCgpKQorICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNyY1NlZ21lbnRMZW5ndGg7IGkrKykK
KyAgICAgICAgICAgICAgICBkYXRhW2kgKyBkc3RPZmZzZXRdID0gbV9kYXRhOFtpICsgc3JjU2Vn
bWVudFN0YXJ0XTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbWVtY3B5KGRhdGEgKyBkc3RP
ZmZzZXQsIG1fZGF0YTE2ICsgc3JjU2VnbWVudFN0YXJ0LCBzcmNTZWdtZW50TGVuZ3RoICogc2l6
ZW9mKFVDaGFyKSk7CiAgICAgICAgIGRzdE9mZnNldCArPSBzcmNTZWdtZW50TGVuZ3RoOwotICAg
ICAgICBtZW1jcHkoZGF0YSArIGRzdE9mZnNldCwgcmVwbGFjZW1lbnQtPm1fZGF0YSwgcmVwU3Ry
TGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CisgICAgICAgIGlmIChyZXBsYWNlbWVudC0+aXM4Qml0
KCkpCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVwU3RyTGVuZ3RoOyBp
KyspCisgICAgICAgICAgICAgICAgZGF0YVtpICsgZHN0T2Zmc2V0XSA9IHJlcGxhY2VtZW50LT5t
X2RhdGE4W2ldOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtZW1jcHkoZGF0YSArIGRzdE9m
ZnNldCwgcmVwbGFjZW1lbnQtPm1fZGF0YTE2LCByZXBTdHJMZW5ndGggKiBzaXplb2YoVUNoYXIp
KTsKICAgICAgICAgZHN0T2Zmc2V0ICs9IHJlcFN0ckxlbmd0aDsKICAgICAgICAgc3JjU2VnbWVu
dFN0YXJ0ID0gc3JjU2VnbWVudEVuZCArIDE7CiAgICAgfQogCiAgICAgc3JjU2VnbWVudExlbmd0
aCA9IG1fbGVuZ3RoIC0gc3JjU2VnbWVudFN0YXJ0OwotICAgIG1lbWNweShkYXRhICsgZHN0T2Zm
c2V0LCBtX2RhdGEgKyBzcmNTZWdtZW50U3RhcnQsIHNyY1NlZ21lbnRMZW5ndGggKiBzaXplb2Yo
VUNoYXIpKTsKKyAgICBpZiAoaXM4Qml0KCkpCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBzcmNTZWdtZW50TGVuZ3RoOyBpKyspCisgICAgICAgICAgICBkYXRhW2kgKyBkc3RPZmZz
ZXRdID0gbV9kYXRhOFtpICsgc3JjU2VnbWVudFN0YXJ0XTsKKyAgICBlbHNlCisgICAgICAgIG1l
bWNweShkYXRhICsgZHN0T2Zmc2V0LCBtX2RhdGExNiArIHNyY1NlZ21lbnRTdGFydCwgc3JjU2Vn
bWVudExlbmd0aCAqIHNpemVvZihVQ2hhcikpOwogCiAgICAgQVNTRVJUKGRzdE9mZnNldCArIHNy
Y1NlZ21lbnRMZW5ndGggPT0gbmV3SW1wbC0+bGVuZ3RoKCkpOwogCkBAIC05NjQsOCArMTIwMSw2
IEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6cmVwbGEKIAogICAgIG5ld1Np
emUgKz0gbWF0Y2hDb3VudCAqIHJlcFN0ckxlbmd0aDsKIAotICAgIFVDaGFyKiBkYXRhOwotICAg
IFJlZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChuZXdTaXpl
LCBkYXRhKTsKICAgICAKICAgICAvLyBDb25zdHJ1Y3QgdGhlIG5ldyBkYXRhCiAgICAgc2l6ZV90
IHNyY1NlZ21lbnRFbmQ7CkBAIC05NzMsMTcgKzEyMDgsNTYgQEAgUGFzc1JlZlB0cjxTdHJpbmdJ
bXBsPiBTdHJpbmdJbXBsOjpyZXBsYQogICAgIHNyY1NlZ21lbnRTdGFydCA9IDA7CiAgICAgdW5z
aWduZWQgZHN0T2Zmc2V0ID0gMDsKICAgICAKKyAgICAvLyBUaGVyZSBhcmUgNCBjYXNlczoKKyAg
ICAvLyAxLiB0aGlzIGFuZCByZXBsYWNlbWVudCBhcmUgYm90aCAxNiBiaXQKKyAgICAvLyAyLiB0
aGlzIGFuZCByZXBsYWNlbWVudCBhcmUgYm90aCA4IGJpdAorICAgIC8vIDMuIHRoaXMgaXMgOCBi
aXQgYW5kIHJlcGxhY2VtZW50IGlzIDE2IGJpdAorICAgIC8vIDQuIHRoaXMgaXMgMTYgYml0IGFu
ZCByZXBsYWNlbWVudCBpcyA4IGJpdAorICAgIC8vIFBsdXMgdGhlcmUgaXMgdmVyeSBzaW1pbGFy
IGNvZGUgaW4gdGhlIHNpbmdsZS1jaGFyIHJlcGxhY2VtZW50IGZ1bmN0aW9uIGFib3ZlLgorICAg
IGlmIChpczhCaXQoKSAmJiByZXBsYWNlbWVudC0+aXM4Qml0KCkpIHsKKyAgICAgICAgTENoYXIq
IGRhdGE7CisgICAgICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0gY3JlYXRlVW5pbml0
aWFsaXplZChuZXdTaXplLCBkYXRhKTsKKyAgICAgICAgd2hpbGUgKChzcmNTZWdtZW50RW5kID0g
ZmluZChwYXR0ZXJuLCBzcmNTZWdtZW50U3RhcnQpKSAhPSBub3RGb3VuZCkgeworICAgICAgICAg
ICAgc3JjU2VnbWVudExlbmd0aCA9IHNyY1NlZ21lbnRFbmQgLSBzcmNTZWdtZW50U3RhcnQ7Cisg
ICAgICAgICAgICBtZW1jcHkoZGF0YSArIGRzdE9mZnNldCwgbV9kYXRhOCArIHNyY1NlZ21lbnRT
dGFydCwgc3JjU2VnbWVudExlbmd0aCAqIHNpemVvZihjaGFyKSk7CisgICAgICAgICAgICBkc3RP
ZmZzZXQgKz0gc3JjU2VnbWVudExlbmd0aDsKKyAgICAgICAgICAgIG1lbWNweShkYXRhICsgZHN0
T2Zmc2V0LCByZXBsYWNlbWVudC0+bV9kYXRhOCwgcmVwU3RyTGVuZ3RoICogc2l6ZW9mKGNoYXIp
KTsKKyAgICAgICAgICAgIGRzdE9mZnNldCArPSByZXBTdHJMZW5ndGg7CisgICAgICAgICAgICBz
cmNTZWdtZW50U3RhcnQgPSBzcmNTZWdtZW50RW5kICsgcGF0dGVybkxlbmd0aDsKKyAgICAgICAg
fQorCisgICAgICAgIHNyY1NlZ21lbnRMZW5ndGggPSBtX2xlbmd0aCAtIHNyY1NlZ21lbnRTdGFy
dDsKKyAgICAgICAgbWVtY3B5KGRhdGEgKyBkc3RPZmZzZXQsIG1fZGF0YTggKyBzcmNTZWdtZW50
U3RhcnQsIHNyY1NlZ21lbnRMZW5ndGggKiBzaXplb2YoY2hhcikpOworCisgICAgICAgIEFTU0VS
VChkc3RPZmZzZXQgKyBzcmNTZWdtZW50TGVuZ3RoID09IG5ld0ltcGwtPmxlbmd0aCgpKTsKKwor
ICAgICAgICByZXR1cm4gbmV3SW1wbC5yZWxlYXNlKCk7CisgICAgfQorICAgIFVDaGFyKiBkYXRh
OworICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChu
ZXdTaXplLCBkYXRhKTsKICAgICB3aGlsZSAoKHNyY1NlZ21lbnRFbmQgPSBmaW5kKHBhdHRlcm4s
IHNyY1NlZ21lbnRTdGFydCkpICE9IG5vdEZvdW5kKSB7CiAgICAgICAgIHNyY1NlZ21lbnRMZW5n
dGggPSBzcmNTZWdtZW50RW5kIC0gc3JjU2VnbWVudFN0YXJ0OwotICAgICAgICBtZW1jcHkoZGF0
YSArIGRzdE9mZnNldCwgbV9kYXRhICsgc3JjU2VnbWVudFN0YXJ0LCBzcmNTZWdtZW50TGVuZ3Ro
ICogc2l6ZW9mKFVDaGFyKSk7CisgICAgICAgIGlmIChpczhCaXQoKSkKKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBzcmNTZWdtZW50TGVuZ3RoOyBpKyspCisgICAgICAgICAg
ICAgICAgZGF0YVtpICsgZHN0T2Zmc2V0XSA9IG1fZGF0YThbaSArIHNyY1NlZ21lbnRTdGFydF07
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1lbWNweShkYXRhICsgZHN0T2Zmc2V0LCBtX2Rh
dGExNiArIHNyY1NlZ21lbnRTdGFydCwgc3JjU2VnbWVudExlbmd0aCAqIHNpemVvZihVQ2hhcikp
OwogICAgICAgICBkc3RPZmZzZXQgKz0gc3JjU2VnbWVudExlbmd0aDsKLSAgICAgICAgbWVtY3B5
KGRhdGEgKyBkc3RPZmZzZXQsIHJlcGxhY2VtZW50LT5tX2RhdGEsIHJlcFN0ckxlbmd0aCAqIHNp
emVvZihVQ2hhcikpOworICAgICAgICBpZiAocmVwbGFjZW1lbnQtPmlzOEJpdCgpKQorICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlcFN0ckxlbmd0aDsgaSsrKQorICAgICAg
ICAgICAgICAgIGRhdGFbaSArIGRzdE9mZnNldF0gPSByZXBsYWNlbWVudC0+bV9kYXRhOFtpXTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgbWVtY3B5KGRhdGEgKyBkc3RPZmZzZXQsIHJlcGxh
Y2VtZW50LT5tX2RhdGExNiwgcmVwU3RyTGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CiAgICAgICAg
IGRzdE9mZnNldCArPSByZXBTdHJMZW5ndGg7CiAgICAgICAgIHNyY1NlZ21lbnRTdGFydCA9IHNy
Y1NlZ21lbnRFbmQgKyBwYXR0ZXJuTGVuZ3RoOwogICAgIH0KIAogICAgIHNyY1NlZ21lbnRMZW5n
dGggPSBtX2xlbmd0aCAtIHNyY1NlZ21lbnRTdGFydDsKLSAgICBtZW1jcHkoZGF0YSArIGRzdE9m
ZnNldCwgbV9kYXRhICsgc3JjU2VnbWVudFN0YXJ0LCBzcmNTZWdtZW50TGVuZ3RoICogc2l6ZW9m
KFVDaGFyKSk7CisgICAgaWYgKGlzOEJpdCgpKQorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgc3JjU2VnbWVudExlbmd0aDsgaSsrKQorICAgICAgICAgICAgZGF0YVtpICsgZHN0T2Zm
c2V0XSA9IG1fZGF0YThbaSArIHNyY1NlZ21lbnRTdGFydF07CisgICAgZWxzZQorICAgICAgICBt
ZW1jcHkoZGF0YSArIGRzdE9mZnNldCwgbV9kYXRhMTYgKyBzcmNTZWdtZW50U3RhcnQsIHNyY1Nl
Z21lbnRMZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKIAogICAgIEFTU0VSVChkc3RPZmZzZXQgKyBz
cmNTZWdtZW50TGVuZ3RoID09IG5ld0ltcGwtPmxlbmd0aCgpKTsKIApAQCAtOTk1LDcgKzEyNjks
NDYgQEAgYm9vbCBlcXVhbChjb25zdCBTdHJpbmdJbXBsKiBhLCBjb25zdCBTdAogICAgIHJldHVy
biBTdHJpbmdIYXNoOjplcXVhbChhLCBiKTsKIH0KIAotYm9vbCBlcXVhbChjb25zdCBTdHJpbmdJ
bXBsKiBhLCBjb25zdCBjaGFyKiBiKQorYm9vbCBlcXVhbChjb25zdCBTdHJpbmdJbXBsKiBhLCBj
b25zdCBMQ2hhciogYiwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIGlmICghYSkKKyAgICAgICAg
cmV0dXJuICFiOworICAgIGlmICghYikKKyAgICAgICAgcmV0dXJuICFhOworCisgICAgaWYgKGxl
bmd0aCAhPSBhLT5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGEt
PmlzOEJpdCgpKSB7CisgICAgICAgIGNvbnN0IExDaGFyKiBhQ2hhcnMgPSBhLT5jaGFyYWN0ZXJz
OCgpOworCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgIT0gbGVuZ3RoOyArK2kpIHsK
KyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYmMgPSBiW2ldOworICAgICAgICAgICAgdW5zaWdu
ZWQgY2hhciBhYyA9IGFDaGFyc1tpXTsKKyAgICAgICAgICAgIGlmICghYmMpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKGFjICE9IGJjKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKworICAgIGNvbnN0IFVDaGFyKiBhQ2hhcnMgPSBhLT5jaGFyYWN0ZXJzMTYoKTsKKwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgIT0gbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgVUNo
YXIgYmMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihiW2ldKTsKKyAgICAgICAgVUNoYXIg
YWMgPSBhQ2hhcnNbaV07CisgICAgICAgIGlmICghYmMpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIGlmIChhYyAhPSBiYykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBlcXVhbChjb25zdCBTdHJpbmdJbXBs
KiBhLCBjb25zdCBMQ2hhciogYikKIHsKICAgICBpZiAoIWEpCiAgICAgICAgIHJldHVybiAhYjsK
QEAgLTEwMDMsMTIgKzEzMTYsMjcgQEAgYm9vbCBlcXVhbChjb25zdCBTdHJpbmdJbXBsKiBhLCBj
b25zdCBjaAogICAgICAgICByZXR1cm4gIWE7CiAKICAgICB1bnNpZ25lZCBsZW5ndGggPSBhLT5s
ZW5ndGgoKTsKLSAgICBjb25zdCBVQ2hhciogYXMgPSBhLT5jaGFyYWN0ZXJzKCk7CisKKyAgICBp
ZiAoYS0+aXM4Qml0KCkpIHsKKyAgICAgICAgY29uc3QgTENoYXIqIGFQdHIgPSBhLT5jaGFyYWN0
ZXJzOCgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpICE9IGxlbmd0aDsgKytpKSB7
CisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGJjID0gYltpXTsKKyAgICAgICAgICAgIHVuc2ln
bmVkIGNoYXIgYWMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihhUHRyW2ldKTsKKyAgICAg
ICAgICAgIGlmICghYmMpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgaWYgKGFjICE9IGJjKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorCisgICAgICAgIHJldHVybiAhYltsZW5ndGhdOworICAgIH0KKworICAgIGNvbnN0IFVDaGFy
KiBhUHRyID0gYS0+Y2hhcmFjdGVyczE2KCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSAh
PSBsZW5ndGg7ICsraSkgewogICAgICAgICB1bnNpZ25lZCBjaGFyIGJjID0gYltpXTsKICAgICAg
ICAgaWYgKCFiYykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKGFzW2ld
ICE9IGJjKQorICAgICAgICBpZiAoYVB0cltpXSAhPSBiYykKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAKQEAgLTEwMzMsMjAgKzEzNjEsMjggQEAgYm9vbCBlcXVhbChjb25zdCBT
dHJpbmdJbXBsKiBhLCBjb25zdCBVQwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJl
dHVybiB0cnVlOwogI2Vsc2UKKyAgICBpZiAoYS0+aXM4Qml0KCkpIHsKKyAgICAgICAgY29uc3Qg
TENoYXIqIGFzID0gYS0+Y2hhcmFjdGVyczgoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSAhPSBsZW5ndGg7ICsraSkKKyAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBjaGFyPihhc1tpXSkgIT0gYltpXSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwogICAgIC8qIERvIGl0IDQtYnl0ZXMtYXQtYS10
aW1lIG9uIGFyY2hpdGVjdHVyZXMgd2hlcmUgaXQncyBzYWZlICovCi0gICAgCi0gICAgY29uc3Qg
dWludDMyX3QqIGFDaGFyYWN0ZXJzID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+
KGEtPmNoYXJhY3RlcnMoKSk7CisKKyAgICBjb25zdCB1aW50MzJfdCogYUNoYXJhY3RlcnMgPSBy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oYS0+Y2hhcmFjdGVyczE2KCkpOwogICAg
IGNvbnN0IHVpbnQzMl90KiBiQ2hhcmFjdGVycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWlu
dDMyX3QqPihiKTsKLSAgICAKKwogICAgIHVuc2lnbmVkIGhhbGZMZW5ndGggPSBsZW5ndGggPj4g
MTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpICE9IGhhbGZMZW5ndGg7ICsraSkgewogICAg
ICAgICBpZiAoKmFDaGFyYWN0ZXJzKysgIT0gKmJDaGFyYWN0ZXJzKyspCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAorCiAgICAgaWYgKGxlbmd0aCAmIDEgJiYgICpyZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVpbnQxNl90Kj4oYUNoYXJhY3RlcnMpICE9ICpyZWludGVycHJl
dF9jYXN0PGNvbnN0IHVpbnQxNl90Kj4oYkNoYXJhY3RlcnMpKQogICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgCisKICAgICByZXR1cm4gdHJ1ZTsKICNlbmRpZgogfQpAQCAtMTA1Niw3ICsxMzky
LDcgQEAgYm9vbCBlcXVhbElnbm9yaW5nQ2FzZShTdHJpbmdJbXBsKiBhLCBTdAogICAgIHJldHVy
biBDYXNlRm9sZGluZ0hhc2g6OmVxdWFsKGEsIGIpOwogfQogCi1ib29sIGVxdWFsSWdub3JpbmdD
YXNlKFN0cmluZ0ltcGwqIGEsIGNvbnN0IGNoYXIqIGIpCitib29sIGVxdWFsSWdub3JpbmdDYXNl
KFN0cmluZ0ltcGwqIGEsIGNvbnN0IExDaGFyKiBiKQogewogICAgIGlmICghYSkKICAgICAgICAg
cmV0dXJuICFiOwpAQCAtMTA2NCwxMyArMTQwMCwzNCBAQCBib29sIGVxdWFsSWdub3JpbmdDYXNl
KFN0cmluZ0ltcGwqIGEsIGNvCiAgICAgICAgIHJldHVybiAhYTsKIAogICAgIHVuc2lnbmVkIGxl
bmd0aCA9IGEtPmxlbmd0aCgpOwotICAgIGNvbnN0IFVDaGFyKiBhcyA9IGEtPmNoYXJhY3RlcnMo
KTsKIAogICAgIC8vIERvIGEgZmFzdGVyIGxvb3AgZm9yIHRoZSBjYXNlIHdoZXJlIGFsbCB0aGUg
Y2hhcmFjdGVycyBhcmUgQVNDSUkuCiAgICAgVUNoYXIgb3JlZCA9IDA7CiAgICAgYm9vbCBlcXVh
bCA9IHRydWU7CisgICAgaWYgKGEtPmlzOEJpdCgpKSB7CisgICAgICAgIGNvbnN0IExDaGFyKiBh
cyA9IGEtPmNoYXJhY3RlcnM4KCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgIT0g
bGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIExDaGFyIGJjID0gYltpXTsKKyAgICAgICAgICAg
IGlmICghYmMpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgVUNo
YXIgYWMgPSBhc1tpXTsKKyAgICAgICAgICAgIG9yZWQgfD0gYWM7CisgICAgICAgICAgICBlcXVh
bCA9IGVxdWFsICYmICh0b0FTQ0lJTG93ZXIoYWMpID09IHRvQVNDSUlMb3dlcihiYykpOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBEbyBhIHNsb3dlciBpbXBsZW1lbnRhdGlvbiBm
b3IgY2FzZXMgdGhhdCBpbmNsdWRlIG5vbi1BU0NJSSBjaGFyYWN0ZXJzLgorICAgICAgICBpZiAo
b3JlZCAmIH4weDdGKSB7CisgICAgICAgICAgICBlcXVhbCA9IHRydWU7CisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpICE9IGxlbmd0aDsgKytpKQorICAgICAgICAgICAgICAgIGVx
dWFsID0gZXF1YWwgJiYgKGZvbGRDYXNlKGFzW2ldKSA9PSBmb2xkQ2FzZShiW2ldKSk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiBlcXVhbCAmJiAhYltsZW5ndGhdOyAgICAg
ICAgCisgICAgfQorCisgICAgY29uc3QgVUNoYXIqIGFzID0gYS0+Y2hhcmFjdGVyczE2KCk7CiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSAhPSBsZW5ndGg7ICsraSkgewotICAgICAgICBjaGFy
IGJjID0gYltpXTsKKyAgICAgICAgTENoYXIgYmMgPSBiW2ldOwogICAgICAgICBpZiAoIWJjKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBVQ2hhciBhYyA9IGFzW2ldOwpAQCAt
MTA4Miw4ICsxNDM5LDcgQEAgYm9vbCBlcXVhbElnbm9yaW5nQ2FzZShTdHJpbmdJbXBsKiBhLCBj
bwogICAgIGlmIChvcmVkICYgfjB4N0YpIHsKICAgICAgICAgZXF1YWwgPSB0cnVlOwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpICE9IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICB1
bnNpZ25lZCBjaGFyIGJjID0gYltpXTsKLSAgICAgICAgICAgIGVxdWFsID0gZXF1YWwgJiYgKGZv
bGRDYXNlKGFzW2ldKSA9PSBmb2xkQ2FzZShiYykpOworICAgICAgICAgICAgZXF1YWwgPSBlcXVh
bCAmJiAoZm9sZENhc2UoYXNbaV0pID09IGZvbGRDYXNlKGJbaV0pKTsKICAgICAgICAgfQogICAg
IH0KIApAQCAtMTEwNSw3ICsxNDYxLDcgQEAgYm9vbCBlcXVhbElnbm9yaW5nTnVsbGl0eShTdHJp
bmdJbXBsKiBhLAogV1RGOjpVbmljb2RlOjpEaXJlY3Rpb24gU3RyaW5nSW1wbDo6ZGVmYXVsdFdy
aXRpbmdEaXJlY3Rpb24oYm9vbCogaGFzU3Ryb25nRGlyZWN0aW9uYWxpdHkpCiB7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgV1RGOjpVbmlj
b2RlOjpEaXJlY3Rpb24gY2hhckRpcmVjdGlvbiA9IFdURjo6VW5pY29kZTo6ZGlyZWN0aW9uKG1f
ZGF0YVtpXSk7CisgICAgICAgIFdURjo6VW5pY29kZTo6RGlyZWN0aW9uIGNoYXJEaXJlY3Rpb24g
PSBXVEY6OlVuaWNvZGU6OmRpcmVjdGlvbihpczhCaXQoKSA/IG1fZGF0YThbaV0gOiBtX2RhdGEx
NltpXSk7CiAgICAgICAgIGlmIChjaGFyRGlyZWN0aW9uID09IFdURjo6VW5pY29kZTo6TGVmdFRv
UmlnaHQpIHsKICAgICAgICAgICAgIGlmIChoYXNTdHJvbmdEaXJlY3Rpb25hbGl0eSkKICAgICAg
ICAgICAgICAgICAqaGFzU3Ryb25nRGlyZWN0aW9uYWxpdHkgPSB0cnVlOwpAQCAtMTEyNCw2ICsx
NDgwLDcgQEAgV1RGOjpVbmljb2RlOjpEaXJlY3Rpb24gU3RyaW5nSW1wbDo6ZGVmYQogCiBQYXNz
UmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmFkb3B0KFN0cmluZ0J1ZmZlciYgYnVmZmVy
KQogeworICAgIC8vIEZJWE1FOiBoYW5kbGUgOC1iaXQgU3RyaW5nQnVmZmVyIHdoZW4gaXQgZXhp
c3RzLgogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGJ1ZmZlci5sZW5ndGgoKTsKICAgICBpZiAobGVu
Z3RoID09IDApCiAgICAgICAgIHJldHVybiBlbXB0eSgpOwpAQCAtMTEzNCwxMyArMTQ5MSwyMSBA
QCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmNyZWF0CiB7CiAgICAgLy8gVXNl
IGNyZWF0ZVVuaW5pdGlhbGl6ZWQgaW5zdGVhZCBvZiAnbmV3IFN0cmluZ0ltcGwnIHNvIHRoYXQg
dGhlIHN0cmluZyBhbmQgaXRzIGJ1ZmZlcgogICAgIC8vIGdldCBhbGxvY2F0ZWQgaW4gYSBzaW5n
bGUgbWVtb3J5IGJsb2NrLgotICAgIFVDaGFyKiBkYXRhOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9
IHN0cmluZy5tX2xlbmd0aDsKICAgICBpZiAobGVuZ3RoID49IG51bWVyaWNfbGltaXRzPHVuc2ln
bmVkPjo6bWF4KCkpCiAgICAgICAgIENSQVNIKCk7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IHRl
cm1pbmF0ZWRTdHJpbmcgPSBjcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCArIDEsIGRhdGEpOwot
ICAgIG1lbWNweShkYXRhLCBzdHJpbmcubV9kYXRhLCBsZW5ndGggKiBzaXplb2YoVUNoYXIpKTsK
LSAgICBkYXRhW2xlbmd0aF0gPSAwOworICAgIFJlZlB0cjxTdHJpbmdJbXBsPiB0ZXJtaW5hdGVk
U3RyaW5nOworICAgIGlmIChzdHJpbmcuaXM4Qml0KCkpIHsKKyAgICAgICAgTENoYXIqIGRhdGE7
CisgICAgICAgIHRlcm1pbmF0ZWRTdHJpbmcgPSBjcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCAr
IDEsIGRhdGEpOworICAgICAgICBtZW1jcHkoZGF0YSwgc3RyaW5nLm1fZGF0YTgsIGxlbmd0aCAq
IHNpemVvZihjaGFyKSk7CisgICAgICAgIGRhdGFbbGVuZ3RoXSA9IDA7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgVUNoYXIqIGRhdGE7CisgICAgICAgIHRlcm1pbmF0ZWRTdHJpbmcgPSBjcmVhdGVV
bmluaXRpYWxpemVkKGxlbmd0aCArIDEsIGRhdGEpOworICAgICAgICBtZW1jcHkoZGF0YSwgc3Ry
aW5nLm1fZGF0YTE2LCBsZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKKyAgICAgICAgZGF0YVtsZW5n
dGhdID0gMDsKKyAgICB9CiAgICAgdGVybWluYXRlZFN0cmluZy0+bV9sZW5ndGgtLTsKICAgICB0
ZXJtaW5hdGVkU3RyaW5nLT5tX2hhc2hBbmRGbGFncyA9IChzdHJpbmcubV9oYXNoQW5kRmxhZ3Mg
JiB+c19mbGFnTWFzaykgfCBzX2hhc2hGbGFnSGFzVGVybWluYXRpbmdOdWxsQ2hhcmFjdGVyOwog
ICAgIHJldHVybiB0ZXJtaW5hdGVkU3RyaW5nLnJlbGVhc2UoKTsKQEAgLTExNDgsMTMgKzE1MTMs
MTkgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpjcmVhdAogCiBQYXNzUmVm
UHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnRocmVhZHNhZmVDb3B5KCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gY3JlYXRlKG1fZGF0YSwgbV9sZW5ndGgpOworICAgIGlmIChpczhCaXQoKSkKKyAg
ICAgICAgcmV0dXJuIGNyZWF0ZShtX2RhdGE4LCBtX2xlbmd0aCk7CisgICAgcmV0dXJuIGNyZWF0
ZShtX2RhdGExNiwgbV9sZW5ndGgpOworCiB9CiAKIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3Ry
aW5nSW1wbDo6Y3Jvc3NUaHJlYWRTdHJpbmcoKQogewotICAgIGlmIChTaGFyZWRVQ2hhciogc2hh
cmVkQnVmZmVyID0gdGhpcy0+c2hhcmVkQnVmZmVyKCkpCi0gICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgU3RyaW5nSW1wbChtX2RhdGEsIG1fbGVuZ3RoLCBzaGFyZWRCdWZmZXItPmNyb3NzVGhy
ZWFkQ29weSgpKSk7CisgICAgaWYgKFNoYXJlZFVDaGFyKiBzaGFyZWRCdWZmZXIgPSB0aGlzLT5z
aGFyZWRCdWZmZXIxNigpKSB7CisgICAgICAgIC8vIEZJWE1FOiBNYWtlIHRoaXMgd29yayBmb3Ig
OC1iaXQgc3RyaW5ncworICAgICAgICBBU1NFUlQoIWlzOEJpdCgpKTsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBTdHJpbmdJbXBsKG1fZGF0YTE2LCBtX2xlbmd0aCwgc2hhcmVkQnVmZmVy
LT5jcm9zc1RocmVhZENvcHkoKSkpOworICAgIH0KIAogICAgIC8vIElmIG5vIHNoYXJlZCBidWZm
ZXIgaXMgYXZhaWxhYmxlLCBjcmVhdGUgYSBjb3B5LgogICAgIHJldHVybiB0aHJlYWRzYWZlQ29w
eSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvU3RyaW5nSW1wbC5o
CShyZXZpc2lvbiA5ODI4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJp
bmdJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAgdHlwZWRlZiBjb25zdCBz
dHJ1Y3QgX19DRlN0cmluZyAqIENGU3RyaQogLy8gTGFuZGluZyB0aGUgZmlsZSBtb3ZlcyBpbiBv
bmUgcGF0Y2gsIHdpbGwgZm9sbG93IG9uIHdpdGggcGF0Y2hlcyB0byBjaGFuZ2UgdGhlIG5hbWVz
cGFjZXMuCiBuYW1lc3BhY2UgSlNDIHsKIHN0cnVjdCBJZGVudGlmaWVyQ1N0cmluZ1RyYW5zbGF0
b3I7CitzdHJ1Y3QgSWRlbnRpZmllckNoYXJCdWZmZXJUcmFuc2xhdG9yOwogc3RydWN0IElkZW50
aWZpZXJVQ2hhckJ1ZmZlclRyYW5zbGF0b3I7CiB9CiAKQEAgLTY1LDYgKzY2LDcgQEAgdHlwZWRl
ZiBib29sICgqSXNXaGl0ZVNwYWNlRnVuY3Rpb25QdHIpKAogY2xhc3MgU3RyaW5nSW1wbCB7CiAg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3RyaW5nSW1wbCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwogICAgIGZyaWVuZCBzdHJ1Y3QgSlNDOjpJZGVudGlmaWVyQ1N0cmluZ1RyYW5zbGF0b3I7
CisgICAgZnJpZW5kIHN0cnVjdCBKU0M6OklkZW50aWZpZXJDaGFyQnVmZmVyVHJhbnNsYXRvcjsK
ICAgICBmcmllbmQgc3RydWN0IEpTQzo6SWRlbnRpZmllclVDaGFyQnVmZmVyVHJhbnNsYXRvcjsK
ICAgICBmcmllbmQgc3RydWN0IFdURjo6Q1N0cmluZ1RyYW5zbGF0b3I7CiAgICAgZnJpZW5kIHN0
cnVjdCBXVEY6Okhhc2hBbmRDaGFyYWN0ZXJzVHJhbnNsYXRvcjsKQEAgLTg3LDcgKzg5LDcgQEAg
cHJpdmF0ZToKICAgICBTdHJpbmdJbXBsKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25l
ZCBsZW5ndGgsIENvbnN0cnVjdFN0YXRpY1N0cmluZ1RhZykKICAgICAgICAgOiBtX3JlZkNvdW50
KHNfcmVmQ291bnRGbGFnSXNTdGF0aWNTdHJpbmcpCiAgICAgICAgICwgbV9sZW5ndGgobGVuZ3Ro
KQotICAgICAgICAsIG1fZGF0YShjaGFyYWN0ZXJzKQorICAgICAgICAsIG1fZGF0YTE2KGNoYXJh
Y3RlcnMpCiAgICAgICAgICwgbV9idWZmZXIoMCkKICAgICAgICAgLCBtX2hhc2hBbmRGbGFncyhz
X2hhc2hGbGFnSXNJZGVudGlmaWVyIHwgQnVmZmVyT3duZWQpCiAgICAgewpAQCAtOTcsMTUgKzk5
LDQ2IEBAIHByaXZhdGU6CiAgICAgICAgIGhhc2goKTsKICAgICB9CiAKLSAgICAvLyBDcmVhdGUg
YSBub3JtYWwgc3RyaW5nIHdpdGggaW50ZXJuYWwgc3RvcmFnZSAoQnVmZmVySW50ZXJuYWwpCisg
ICAgLy8gVXNlZCB0byBjb25zdHJ1Y3Qgc3RhdGljIHN0cmluZ3MsIHdoaWNoIGhhdmUgYW4gc3Bl
Y2lhbCByZWZDb3VudCB0aGF0IGNhbiBuZXZlciBoaXQgemVyby4KKyAgICAvLyBUaGlzIG1lYW5z
IHRoYXQgdGhlIHN0YXRpYyBzdHJpbmcgd2lsbCBuZXZlciBiZSBkZXN0cm95ZWQsIHdoaWNoIGlz
IGltcG9ydGFudCBiZWNhdXNlCisgICAgLy8gc3RhdGljIHN0cmluZ3Mgd2lsbCBiZSBzaGFyZWQg
YWNyb3NzIHRocmVhZHMgJiByZWYtY291bnRlZCBpbiBhIG5vbi10aHJlYWRzYWZlIG1hbm5lci4K
KyAgICBTdHJpbmdJbXBsKGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgs
IENvbnN0cnVjdFN0YXRpY1N0cmluZ1RhZykKKyAgICAgICAgOiBtX3JlZkNvdW50KHNfcmVmQ291
bnRGbGFnSXNTdGF0aWNTdHJpbmcpCisgICAgICAgICwgbV9sZW5ndGgobGVuZ3RoKQorICAgICAg
ICAsIG1fZGF0YTgoY2hhcmFjdGVycykKKyAgICAgICAgLCBtX2J1ZmZlcigwKQorICAgICAgICAs
IG1faGFzaEFuZEZsYWdzKHNfaGFzaEZsYWc4Qml0QnVmZmVyIHwgc19oYXNoRmxhZ0lzSWRlbnRp
ZmllciB8IEJ1ZmZlck93bmVkKQorICAgIHsKKyAgICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIGhh
c2ggaXMgY29tcHV0ZWQgc28gdGhhdCBBdG9taWNTdHJpbmdIYXNoIGNhbiBjYWxsIGV4aXN0aW5n
SGFzaCgpCisgICAgICAgIC8vIHdpdGggaW1wdW5pdHkuIFRoZSBlbXB0eSBzdHJpbmcgaXMgc3Bl
Y2lhbCBiZWNhdXNlIGl0IGlzIG5ldmVyIGVudGVyZWQgaW50bworICAgICAgICAvLyBBdG9taWNT
dHJpbmcncyBIYXNoS2V5LCBidXQgc3RpbGwgbmVlZHMgdG8gY29tcGFyZSBjb3JyZWN0bHkuCisg
ICAgICAgIGhhc2goKTsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogdGhlcmUgaGFzIHRvIGJlIGEg
bGVzcyBoYWNreSB3YXkgdG8gZG8gdGhpcy4KKyAgICBlbnVtIEZvcmNlOEJpdCB7IEZvcmNlOEJp
dENvbnN0cnVjdG9yIH07CisgICAgLy8gQ3JlYXRlIGEgbm9ybWFsIDgtYml0IHN0cmluZyB3aXRo
IGludGVybmFsIHN0b3JhZ2UgKEJ1ZmZlckludGVybmFsKQorICAgIFN0cmluZ0ltcGwodW5zaWdu
ZWQgbGVuZ3RoLCBGb3JjZThCaXQgdW51c2VkKQorICAgICAgICA6IG1fcmVmQ291bnQoc19yZWZD
b3VudEluY3JlbWVudCkKKyAgICAgICAgLCBtX2xlbmd0aChsZW5ndGgpCisgICAgICAgICwgbV9k
YXRhOChyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4odGhpcyArIDEpKQorICAgICAgICAs
IG1fYnVmZmVyKDApCisgICAgICAgICwgbV9oYXNoQW5kRmxhZ3Moc19oYXNoRmxhZzhCaXRCdWZm
ZXIgfCBCdWZmZXJJbnRlcm5hbCkKKyAgICB7CisgICAgICAgIFVOVVNFRF9QQVJBTSh1bnVzZWQp
OyAvLyBGSVhNRQorICAgICAgICBBU1NFUlQobV9kYXRhOCk7CisgICAgICAgIEFTU0VSVChtX2xl
bmd0aCk7CisgICAgfQorCisgICAgLy8gQ3JlYXRlIGEgbm9ybWFsIDE2LWJpdCBzdHJpbmcgd2l0
aCBpbnRlcm5hbCBzdG9yYWdlIChCdWZmZXJJbnRlcm5hbCkKICAgICBTdHJpbmdJbXBsKHVuc2ln
bmVkIGxlbmd0aCkKICAgICAgICAgOiBtX3JlZkNvdW50KHNfcmVmQ291bnRJbmNyZW1lbnQpCiAg
ICAgICAgICwgbV9sZW5ndGgobGVuZ3RoKQotICAgICAgICAsIG1fZGF0YShyZWludGVycHJldF9j
YXN0PGNvbnN0IFVDaGFyKj4odGhpcyArIDEpKQorICAgICAgICAsIG1fZGF0YTE2KHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPih0aGlzICsgMSkpCiAgICAgICAgICwgbV9idWZmZXIoMCkK
ICAgICAgICAgLCBtX2hhc2hBbmRGbGFncyhCdWZmZXJJbnRlcm5hbCkKICAgICB7Ci0gICAgICAg
IEFTU0VSVChtX2RhdGEpOworICAgICAgICBBU1NFUlQobV9kYXRhMTYpOwogICAgICAgICBBU1NF
UlQobV9sZW5ndGgpOwogICAgIH0KIApAQCAtMTEzLDIzICsxNDYsMzggQEAgcHJpdmF0ZToKICAg
ICBTdHJpbmdJbXBsKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCiAg
ICAgICAgIDogbV9yZWZDb3VudChzX3JlZkNvdW50SW5jcmVtZW50KQogICAgICAgICAsIG1fbGVu
Z3RoKGxlbmd0aCkKLSAgICAgICAgLCBtX2RhdGEoY2hhcmFjdGVycykKKyAgICAgICAgLCBtX2Rh
dGExNihjaGFyYWN0ZXJzKQogICAgICAgICAsIG1fYnVmZmVyKDApCiAgICAgICAgICwgbV9oYXNo
QW5kRmxhZ3MoQnVmZmVyT3duZWQpCiAgICAgewotICAgICAgICBBU1NFUlQobV9kYXRhKTsKKyAg
ICAgICAgQVNTRVJUKG1fZGF0YTE2KTsKICAgICAgICAgQVNTRVJUKG1fbGVuZ3RoKTsKICAgICB9
CiAKLSAgICAvLyBVc2VkIHRvIGNyZWF0ZSBuZXcgc3RyaW5ncyB0aGF0IGFyZSBhIHN1YnN0cmlu
ZyBvZiBhbiBleGlzdGluZyBTdHJpbmdJbXBsIChCdWZmZXJTdWJzdHJpbmcpCisgICAgLy8gVXNl
ZCB0byBjcmVhdGUgbmV3IHN0cmluZ3MgdGhhdCBhcmUgYSBzdWJzdHJpbmcgb2YgYW4gZXhpc3Rp
bmcgOC1iaXQgU3RyaW5nSW1wbCAoQnVmZmVyU3Vic3RyaW5nKQorICAgIFN0cmluZ0ltcGwoY29u
c3QgTENoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgUGFzc1JlZlB0cjxTdHJpbmdJ
bXBsPiBiYXNlKQorICAgICAgICA6IG1fcmVmQ291bnQoc19yZWZDb3VudEluY3JlbWVudCkKKyAg
ICAgICAgLCBtX2xlbmd0aChsZW5ndGgpCisgICAgICAgICwgbV9kYXRhOChjaGFyYWN0ZXJzKQor
ICAgICAgICAsIG1fc3Vic3RyaW5nQnVmZmVyKGJhc2UubGVha1JlZigpKQorICAgICAgICAsIG1f
aGFzaEFuZEZsYWdzKHNfaGFzaEZsYWc4Qml0QnVmZmVyIHwgQnVmZmVyU3Vic3RyaW5nKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKGlzOEJpdCgpKTsKKyAgICAgICAgQVNTRVJUKG1fZGF0YTgpOwor
ICAgICAgICBBU1NFUlQobV9sZW5ndGgpOworICAgICAgICBBU1NFUlQobV9zdWJzdHJpbmdCdWZm
ZXItPmJ1ZmZlck93bmVyc2hpcCgpICE9IEJ1ZmZlclN1YnN0cmluZyk7CisgICAgfQorCisgICAg
Ly8gVXNlZCB0byBjcmVhdGUgbmV3IHN0cmluZ3MgdGhhdCBhcmUgYSBzdWJzdHJpbmcgb2YgYW4g
ZXhpc3RpbmcgMTYtYml0IFN0cmluZ0ltcGwgKEJ1ZmZlclN1YnN0cmluZykKICAgICBTdHJpbmdJ
bXBsKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIFBhc3NSZWZQdHI8
U3RyaW5nSW1wbD4gYmFzZSkKICAgICAgICAgOiBtX3JlZkNvdW50KHNfcmVmQ291bnRJbmNyZW1l
bnQpCiAgICAgICAgICwgbV9sZW5ndGgobGVuZ3RoKQotICAgICAgICAsIG1fZGF0YShjaGFyYWN0
ZXJzKQorICAgICAgICAsIG1fZGF0YTE2KGNoYXJhY3RlcnMpCiAgICAgICAgICwgbV9zdWJzdHJp
bmdCdWZmZXIoYmFzZS5sZWFrUmVmKCkpCiAgICAgICAgICwgbV9oYXNoQW5kRmxhZ3MoQnVmZmVy
U3Vic3RyaW5nKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fZGF0YSk7CisgICAgICAgIEFTU0VS
VCghaXM4Qml0KCkpOworICAgICAgICBBU1NFUlQobV9kYXRhMTYpOwogICAgICAgICBBU1NFUlQo
bV9sZW5ndGgpOwogICAgICAgICBBU1NFUlQobV9zdWJzdHJpbmdCdWZmZXItPmJ1ZmZlck93bmVy
c2hpcCgpICE9IEJ1ZmZlclN1YnN0cmluZyk7CiAgICAgfQpAQCAtMTM4LDIxICsxODYsMzUgQEAg
cHJpdmF0ZToKICAgICBTdHJpbmdJbXBsKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25l
ZCBsZW5ndGgsIFBhc3NSZWZQdHI8U2hhcmVkVUNoYXI+IHNoYXJlZEJ1ZmZlcikKICAgICAgICAg
OiBtX3JlZkNvdW50KHNfcmVmQ291bnRJbmNyZW1lbnQpCiAgICAgICAgICwgbV9sZW5ndGgobGVu
Z3RoKQotICAgICAgICAsIG1fZGF0YShjaGFyYWN0ZXJzKQorICAgICAgICAsIG1fZGF0YTE2KGNo
YXJhY3RlcnMpCiAgICAgICAgICwgbV9zaGFyZWRCdWZmZXIoc2hhcmVkQnVmZmVyLmxlYWtSZWYo
KSkKICAgICAgICAgLCBtX2hhc2hBbmRGbGFncyhCdWZmZXJTaGFyZWQpCiAgICAgewotICAgICAg
ICBBU1NFUlQobV9kYXRhKTsKLSAgICAgICAgQVNTRVJUKG1fbGVuZ3RoKTsKKyAgICAgICAgQVNT
RVJUKG1fZGF0YTE2KTsKICAgICB9CiAKIHB1YmxpYzoKICAgICB+U3RyaW5nSW1wbCgpOwogCiAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gY3JlYXRlKGNvbnN0IFVDaGFyKiwgdW5z
aWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBjcmVhdGUo
Y29uc3QgY2hhciosIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8U3Ry
aW5nSW1wbD4gY3JlYXRlKGNvbnN0IGNoYXIqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJp
bmdJbXBsPiBjcmVhdGUoY29uc3QgTENoYXIqLCB1bnNpZ25lZCBsZW5ndGgpOworICAgIEFMV0FZ
U19JTkxJTkUgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gY3JlYXRlKGNvbnN0IGNoYXIq
IHMsIHVuc2lnbmVkIGxlbmd0aCkgeyByZXR1cm4gY3JlYXRlKHMsIGxlbmd0aCk7IH07CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gY3JlYXRlKGNvbnN0IExDaGFyKik7CisgICAg
QUxXQVlTX0lOTElORSBzdGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBjcmVhdGUoY29uc3Qg
Y2hhciogcykgeyByZXR1cm4gY3JlYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihz
KSk7IH07CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gY3JlYXRlKGNvbnN0IFVD
aGFyKiwgdW5zaWduZWQgbGVuZ3RoLCBQYXNzUmVmUHRyPFNoYXJlZFVDaGFyPiBzaGFyZWRCdWZm
ZXIpOworICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gY3Jl
YXRlOChQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHJlcCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25l
ZCBsZW5ndGgpCisgICAgeworICAgICAgICBBU1NFUlQocmVwKTsKKyAgICAgICAgQVNTRVJUKGxl
bmd0aCA8PSByZXAtPmxlbmd0aCgpKTsKKworICAgICAgICBpZiAoIWxlbmd0aCkKKyAgICAgICAg
ICAgIHJldHVybiBlbXB0eSgpOworCisgICAgICAgIEFTU0VSVChyZXAtPmlzOEJpdCgpKTsKKyAg
ICAgICAgU3RyaW5nSW1wbCogb3duZXJSZXAgPSAocmVwLT5idWZmZXJPd25lcnNoaXAoKSA9PSBC
dWZmZXJTdWJzdHJpbmcpID8gcmVwLT5tX3N1YnN0cmluZ0J1ZmZlciA6IHJlcC5nZXQoKTsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHJpbmdJbXBsKHJlcC0+bV9kYXRhOCArIG9mZnNl
dCwgbGVuZ3RoLCBvd25lclJlcCkpOworICAgIH0KKwogICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5F
IFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gY3JlYXRlKFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gcmVw
LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKICAgICB7CiAgICAgICAgIEFTU0VS
VChyZXApOwpAQCAtMTYyLDI3ICsyMjQsMzQgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJu
IGVtcHR5KCk7CiAKICAgICAgICAgU3RyaW5nSW1wbCogb3duZXJSZXAgPSAocmVwLT5idWZmZXJP
d25lcnNoaXAoKSA9PSBCdWZmZXJTdWJzdHJpbmcpID8gcmVwLT5tX3N1YnN0cmluZ0J1ZmZlciA6
IHJlcC5nZXQoKTsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHJpbmdJbXBsKHJlcC0+
bV9kYXRhICsgb2Zmc2V0LCBsZW5ndGgsIG93bmVyUmVwKSk7CisgICAgICAgIGlmIChyZXAtPmlz
OEJpdCgpKQorICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHJpbmdJbXBsKHJlcC0+
bV9kYXRhOCArIG9mZnNldCwgbGVuZ3RoLCBvd25lclJlcCkpOworICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFN0cmluZ0ltcGwocmVwLT5tX2RhdGExNiArIG9mZnNldCwgbGVuZ3RoLCBvd25l
clJlcCkpOwogICAgIH0KIAorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGNyZWF0
ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoLCBMQ2hhciomIGRhdGEpOwogICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVu
Z3RoLCBVQ2hhciomIGRhdGEpOwotICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIFBhc3NSZWZQdHI8
U3RyaW5nSW1wbD4gdHJ5Q3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgsIFVDaGFy
KiYgb3V0cHV0KQorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdGF0aWMgQUxXQVlTX0lOTElO
RSBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQg
bGVuZ3RoLCBUKiYgb3V0cHV0KQogICAgIHsKICAgICAgICAgaWYgKCFsZW5ndGgpIHsKICAgICAg
ICAgICAgIG91dHB1dCA9IDA7CiAgICAgICAgICAgICByZXR1cm4gZW1wdHkoKTsKICAgICAgICAg
fQogCi0gICAgICAgIGlmIChsZW5ndGggPiAoKHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+
OjptYXgoKSAtIHNpemVvZihTdHJpbmdJbXBsKSkgLyBzaXplb2YoVUNoYXIpKSkgeworICAgICAg
ICBpZiAobGVuZ3RoID4gKChzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgLSBz
aXplb2YoU3RyaW5nSW1wbCkpIC8gc2l6ZW9mKFQpKSkgewogICAgICAgICAgICAgb3V0cHV0ID0g
MDsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAgICAgIFN0cmluZ0ltcGwq
IHJlc3VsdEltcGw7Ci0gICAgICAgIGlmICghdHJ5RmFzdE1hbGxvYyhzaXplb2YoVUNoYXIpICog
bGVuZ3RoICsgc2l6ZW9mKFN0cmluZ0ltcGwpKS5nZXRWYWx1ZShyZXN1bHRJbXBsKSkgeworICAg
ICAgICBpZiAoIXRyeUZhc3RNYWxsb2Moc2l6ZW9mKFQpICogbGVuZ3RoICsgc2l6ZW9mKFN0cmlu
Z0ltcGwpKS5nZXRWYWx1ZShyZXN1bHRJbXBsKSkgewogICAgICAgICAgICAgb3V0cHV0ID0gMDsK
ICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9Ci0gICAgICAgIG91dHB1dCA9IHJlaW50
ZXJwcmV0X2Nhc3Q8VUNoYXIqPihyZXN1bHRJbXBsICsgMSk7CisgICAgICAgIG91dHB1dCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8VCo+KHJlc3VsdEltcGwgKyAxKTsKKworICAgICAgICBpZiAoc2l6ZW9m
KFQpID09IHNpemVvZihjaGFyKSkKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcocmVz
dWx0SW1wbCkgU3RyaW5nSW1wbChsZW5ndGgsIEZvcmNlOEJpdENvbnN0cnVjdG9yKSk7CisKICAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyhyZXN1bHRJbXBsKSBTdHJpbmdJbXBsKGxlbmd0aCkp
OwogICAgIH0KIApAQCAtMTkxLDkgKzI2MCwxMiBAQCBwdWJsaWM6CiAgICAgLy8gdGhlIG9yaWdp
bmFsU3RyaW5nIGNhbid0IGJlIHVzZWQgYWZ0ZXIgdGhpcyBmdW5jdGlvbi4KICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxTdHJpbmdJbXBsPiByZWFsbG9jYXRlKFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4g
b3JpZ2luYWxTdHJpbmcsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqJiBkYXRhKTsKIAotICAgIHN0
YXRpYyB1bnNpZ25lZCBkYXRhT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cmlu
Z0ltcGwsIG1fZGF0YSk7IH0KKyAgICBzdGF0aWMgdW5zaWduZWQgZmxhZ3NPZmZzZXQoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RyaW5nSW1wbCwgbV9oYXNoQW5kRmxhZ3MpOyB9CisgICAg
c3RhdGljIHVuc2lnbmVkIGZsYWdJczhCaXQoKSB7IHJldHVybiBzX2hhc2hGbGFnOEJpdEJ1ZmZl
cjsgfQorICAgIHN0YXRpYyB1bnNpZ25lZCBkYXRhT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKFN0cmluZ0ltcGwsIG1fZGF0YTgpOyB9CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3Ry
aW5nSW1wbD4gY3JlYXRlV2l0aFRlcm1pbmF0aW5nTnVsbENoYXJhY3Rlcihjb25zdCBTdHJpbmdJ
bXBsJik7CiAKKyAgICAvLyBGSVhNRTogQWRkIFZlY3RvcjxjaGFyPiBhZG9wdD8KICAgICB0ZW1w
bGF0ZTxzaXplX3QgaW5saW5lQ2FwYWNpdHk+CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5n
SW1wbD4gYWRvcHQoVmVjdG9yPFVDaGFyLCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKICAgICB7
CkBAIC0yMDgsOCArMjgwLDIxIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJp
bmdJbXBsPiBhZG9wdChTdHJpbmdCdWZmZXImKTsKIAogICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNv
bnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9Ci0gICAgU2hhcmVkVUNoYXIqIHNoYXJlZEJ1ZmZlcigp
OwotICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9
CisgICAgYm9vbCBpczhCaXQoKSBjb25zdCB7IHJldHVybiBtX2hhc2hBbmRGbGFncyAmIHNfaGFz
aEZsYWc4Qml0QnVmZmVyOyB9CisKKyAgICAvLyBGSVhNRTogU2hvdWxkIHRoaXMgYmUgcHJpdmF0
ZT8gSXQncyBvbmx5IGFjY2Vzc2VkIGZyb20gd2l0aGluIFN0cmluZ0ltcGwuCisgICAgU2hhcmVk
VUNoYXIqIHNoYXJlZEJ1ZmZlcjE2KCk7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBzaGFyZWRC
dWZmZXI4KCkgPworICAgIC8vIEZJWE1FOiBSZW1vdmUgYWxsIHVubmVjZXNzYXJ5IHVzYWdlcyBv
ZiBjaGFyYWN0ZXJzKCkKKyAgICBBTFdBWVNfSU5MSU5FIGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJz
OCgpIGNvbnN0IHsgQVNTRVJUKGlzOEJpdCgpKTsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVy
biBtX2RhdGE4OyB9CisgICAgQUxXQVlTX0lOTElORSBjb25zdCBVQ2hhciogY2hhcmFjdGVyczE2
KCkgY29uc3QgeyBBU1NFUlQoIWlzOEJpdCgpKTsgcmV0dXJuIG1fZGF0YTE2OyB9CisgICAgQUxX
QVlTX0lOTElORSBjb25zdCBVQ2hhciogY2hhcmFjdGVycygpIGNvbnN0CisgICAgeworICAgICAg
ICBpZiAoIWlzOEJpdCgpKQorICAgICAgICAgICAgcmV0dXJuIG1fZGF0YTE2OworCisgICAgICAg
IHJldHVybiBnZXREYXRhMTZTbG93Q2FzZSgpOworICAgIH0KIAogICAgIHNpemVfdCBjb3N0KCkK
ICAgICB7CkBAIC0yMjQsNiArMzA5LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9sZW5n
dGg7CiAgICAgfQogCisgICAgYm9vbCBoYXMxNkJpdFNoYWRvdygpIGNvbnN0IHsgcmV0dXJuIG1f
aGFzaEFuZEZsYWdzICYgc19oYXNoRmxhZ0hhczE2Qml0U2hhZG93OyB9CiAgICAgYm9vbCBpc0lk
ZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2hhc2hBbmRGbGFncyAmIHNfaGFzaEZsYWdJc0lk
ZW50aWZpZXI7IH0KICAgICB2b2lkIHNldElzSWRlbnRpZmllcihib29sIGlzSWRlbnRpZmllcikK
ICAgICB7CkBAIC0yNTMsNyArMzM5LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIHNldEhhc2godW5z
aWduZWQgaGFzaCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVCghaGFzSGFzaCgpKTsKLSAg
ICAgICAgQVNTRVJUKGhhc2ggPT0gU3RyaW5nSGFzaGVyOjpjb21wdXRlSGFzaChtX2RhdGEsIG1f
bGVuZ3RoKSk7IC8vIE11bHRpcGxlIGNsaWVudHMgYXNzdW1lIHRoYXQgU3RyaW5nSGFzaGVyIGlz
IHRoZSBjYW5vbmljYWwgc3RyaW5nIGhhc2ggZnVuY3Rpb24uCisgICAgICAgIC8vIE11bHRpcGxl
IGNsaWVudHMgYXNzdW1lIHRoYXQgU3RyaW5nSGFzaGVyIGlzIHRoZSBjYW5vbmljYWwgc3RyaW5n
IGhhc2ggZnVuY3Rpb24uCisgICAgICAgIEFTU0VSVChoYXNoID09IChpczhCaXQoKSA/IFN0cmlu
Z0hhc2hlcjo6Y29tcHV0ZUhhc2gobV9kYXRhOCwgbV9sZW5ndGgpIDogU3RyaW5nSGFzaGVyOjpj
b21wdXRlSGFzaChtX2RhdGExNiwgbV9sZW5ndGgpKSk7CiAgICAgICAgIEFTU0VSVCghKGhhc2gg
JiAoc19mbGFnTWFzayA8PCAoOCAqIHNpemVvZihoYXNoKSAtIHNfZmxhZ0NvdW50KSkpKTsgLy8g
VmVyaWZ5IHRoYXQgZW5vdWdoIGhpZ2ggYml0cyBhcmUgZW1wdHkuCiAgICAgICAgIAogICAgICAg
ICBoYXNoIDw8PSBzX2ZsYWdDb3VudDsKQEAgLTI4Myw3ICszNzAsMTAgQEAgcHVibGljOgogICAg
IHVuc2lnbmVkIGhhc2goKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKCFoYXNIYXNoKCkpCi0g
ICAgICAgICAgICBzZXRIYXNoKFN0cmluZ0hhc2hlcjo6Y29tcHV0ZUhhc2gobV9kYXRhLCBtX2xl
bmd0aCkpOworICAgICAgICAgICAgaWYgKGlzOEJpdCgpKQorICAgICAgICAgICAgICAgIHNldEhh
c2goU3RyaW5nSGFzaGVyOjpjb21wdXRlSGFzaChtX2RhdGE4LCBtX2xlbmd0aCkpOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHNldEhhc2goU3RyaW5nSGFzaGVyOjpjb21wdXRl
SGFzaChtX2RhdGExNiwgbV9sZW5ndGgpKTsKICAgICAgICAgcmV0dXJuIGV4aXN0aW5nSGFzaCgp
OwogICAgIH0KIApAQCAtMzA5LDEzICszOTksMzIgQEAgcHVibGljOgogCiAgICAgc3RhdGljIFN0
cmluZ0ltcGwqIGVtcHR5KCk7CiAKLSAgICBzdGF0aWMgdm9pZCBjb3B5Q2hhcnMoVUNoYXIqIGRl
c3RpbmF0aW9uLCBjb25zdCBVQ2hhciogc291cmNlLCB1bnNpZ25lZCBudW1DaGFyYWN0ZXJzKQor
ICAgIC8vIEZJWE1FOiBEb2VzIHRoaXMgcmVhbGx5IGJlbG9uZyBpbiBTdHJpbmdJbXBsPworICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdGF0aWMgdm9pZCBjb3B5Q2hhcnMoVCogZGVzdGluYXRp
b24sIGNvbnN0IFQqIHNvdXJjZSwgdW5zaWduZWQgbnVtQ2hhcmFjdGVycykKICAgICB7CisgICAg
ICAgIGlmIChudW1DaGFyYWN0ZXJzID09IDEpIHsKKyAgICAgICAgICAgICpkZXN0aW5hdGlvbiA9
ICpzb3VyY2U7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwogICAgICAgICBpZiAo
bnVtQ2hhcmFjdGVycyA8PSBzX2NvcHlDaGFyc0lubGluZUN1dE9mZikgewotICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUNoYXJhY3RlcnM7ICsraSkKKyAgICAgICAgICAg
IHVuc2lnbmVkIGkgPSAwOworI2lmIChDUFUoWDg2KSB8fCBDUFUoWDg2XzY0KSkKKyAgICAgICAg
ICAgIGNvbnN0IHVuc2lnbmVkIGNoYXJzUGVySW50ID0gc2l6ZW9mKHVpbnQzMl90KSAvIHNpemVv
ZihUKTsKKworICAgICAgICAgICAgaWYgKG51bUNoYXJhY3RlcnMgPiBjaGFyc1BlckludCkgewor
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIHN0b3BDb3VudCA9IG51bUNoYXJhY3RlcnMgJiB+KGNo
YXJzUGVySW50IC0gMSk7CisKKyAgICAgICAgICAgICAgICBjb25zdCB1aW50MzJfdCogc3JjQ2hh
cmFjdGVycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihzb3VyY2UpOworICAg
ICAgICAgICAgICAgIHVpbnQzMl90KiBkZXN0Q2hhcmFjdGVycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDMyX3QqPihkZXN0aW5hdGlvbik7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBq
ID0gMDsgaSA8IHN0b3BDb3VudDsgaSArPSBjaGFyc1BlckludCwgKytqKQorICAgICAgICAgICAg
ICAgICAgICBkZXN0Q2hhcmFjdGVyc1tqXSA9IHNyY0NoYXJhY3RlcnNbal07CisgICAgICAgICAg
ICB9CisjZW5kaWYKKyAgICAgICAgICAgIGZvciAoOyBpIDwgbnVtQ2hhcmFjdGVyczsgKytpKQog
ICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uW2ldID0gc291cmNlW2ldOwogICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgIG1lbWNweShkZXN0aW5hdGlvbiwgc291cmNlLCBudW1DaGFyYWN0ZXJz
ICogc2l6ZW9mKFVDaGFyKSk7CisgICAgICAgICAgICBtZW1jcHkoZGVzdGluYXRpb24sIHNvdXJj
ZSwgbnVtQ2hhcmFjdGVycyAqIHNpemVvZihUKSk7CiAgICAgfQogCiAgICAgLy8gUmV0dXJucyBh
IFN0cmluZ0ltcGwgc3VpdGFibGUgZm9yIHVzZSBvbiBhbm90aGVyIHRocmVhZC4KQEAgLTMyNyw3
ICs0MzYsMTMgQEAgcHVibGljOgogCiAgICAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBzdWJzdHJp
bmcodW5zaWduZWQgcG9zLCB1bnNpZ25lZCBsZW4gPSBVSU5UX01BWCk7CiAKLSAgICBVQ2hhciBv
cGVyYXRvcltdKHVuc2lnbmVkIGkpIHsgQVNTRVJUKGkgPCBtX2xlbmd0aCk7IHJldHVybiBtX2Rh
dGFbaV07IH0KKyAgICBVQ2hhciBvcGVyYXRvcltdKHVuc2lnbmVkIGkpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQoaSA8IG1fbGVuZ3RoKTsKKyAgICAgICAgaWYgKGlzOEJpdCgpKQorICAg
ICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KG1fZGF0YThbaV0pOwor
ICAgICAgICByZXR1cm4gbV9kYXRhMTZbaV07CisgICAgfQogICAgIFVDaGFyMzIgY2hhcmFjdGVy
U3RhcnRpbmdBdCh1bnNpZ25lZCk7CiAKICAgICBib29sIGNvbnRhaW5zT25seVdoaXRlc3BhY2Uo
KTsKQEAgLTM1MSw2ICs0NjYsNyBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxTdHJpbmdJbXBs
PiB1cHBlcigpOwogCiAgICAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBmaWxsKFVDaGFyKTsKKyAg
ICAvLyBGSVhNRTogRG8gd2UgbmVlZCBmaWxsKGNoYXIpIG9yIGNhbiB3ZSBqdXN0IGRvIHRoZSBy
aWdodCB0aGluZyBpZiBVQ2hhciBpcyBBU0NJST8KICAgICBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+
IGZvbGRDYXNlKCk7CiAKICAgICBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHN0cmlwV2hpdGVTcGFj
ZSgpOwpAQCAtMzYwLDExICs0NzYsMTQgQEAgcHVibGljOgogCiAgICAgUGFzc1JlZlB0cjxTdHJp
bmdJbXBsPiByZW1vdmVDaGFyYWN0ZXJzKENoYXJhY3Rlck1hdGNoRnVuY3Rpb25QdHIpOwogCisg
ICAgLy8gRklYTUU6IERvIHdlIG5lZWQgY2hhciB2ZXJzaW9uLCBvciBpcyBpdCBva2F5IHRvIGp1
c3QgcGFzcyBpbiBhbiBBU0NJSSBjaGFyIGZvciA4LWJpdD8gU2FtZSBmb3IgcmV2ZXJzZUZpbmQs
IHJlcGxhY2UKICAgICBzaXplX3QgZmluZChVQ2hhciwgdW5zaWduZWQgaW5kZXggPSAwKTsKICAg
ICBzaXplX3QgZmluZChDaGFyYWN0ZXJNYXRjaEZ1bmN0aW9uUHRyLCB1bnNpZ25lZCBpbmRleCA9
IDApOwotICAgIHNpemVfdCBmaW5kKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCBpbmRleCA9IDApOwor
ICAgIHNpemVfdCBmaW5kKGNvbnN0IExDaGFyKiwgdW5zaWduZWQgaW5kZXggPSAwKTsKKyAgICBB
TFdBWVNfSU5MSU5FIHNpemVfdCBmaW5kKGNvbnN0IGNoYXIqIHMsIHVuc2lnbmVkIGluZGV4ID0g
MCkgeyByZXR1cm4gZmluZChyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4ocyksIGluZGV4
KTsgfTsKICAgICBzaXplX3QgZmluZChTdHJpbmdJbXBsKiwgdW5zaWduZWQgaW5kZXggPSAwKTsK
LSAgICBzaXplX3QgZmluZElnbm9yaW5nQ2FzZShjb25zdCBjaGFyKiwgdW5zaWduZWQgaW5kZXgg
PSAwKTsKKyAgICBzaXplX3QgZmluZElnbm9yaW5nQ2FzZShjb25zdCBMQ2hhciosIHVuc2lnbmVk
IGluZGV4ID0gMCk7CisgICAgQUxXQVlTX0lOTElORSBzaXplX3QgZmluZElnbm9yaW5nQ2FzZShj
b25zdCBjaGFyKiBzLCB1bnNpZ25lZCBpbmRleCA9IDApIHsgcmV0dXJuIGZpbmRJZ25vcmluZ0Nh
c2UocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KHMpLCBpbmRleCk7IH07CiAgICAgc2l6
ZV90IGZpbmRJZ25vcmluZ0Nhc2UoU3RyaW5nSW1wbCosIHVuc2lnbmVkIGluZGV4ID0gMCk7CiAK
ICAgICBzaXplX3QgcmV2ZXJzZUZpbmQoVUNoYXIsIHVuc2lnbmVkIGluZGV4ID0gVUlOVF9NQVgp
OwpAQCAtMzk2LDE2ICs1MTUsMTkgQEAgcHJpdmF0ZToKICAgICBib29sIGlzU3RhdGljKCkgY29u
c3QgeyByZXR1cm4gbV9yZWZDb3VudCAmIHNfcmVmQ291bnRGbGFnSXNTdGF0aWNTdHJpbmc7IH0K
ICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVUNoYXJQcmVkaWNhdGU+IFBhc3NSZWZQdHI8U3RyaW5nSW1w
bD4gc3RyaXBNYXRjaGVkQ2hhcmFjdGVycyhVQ2hhclByZWRpY2F0ZSk7CiAgICAgdGVtcGxhdGUg
PGNsYXNzIFVDaGFyUHJlZGljYXRlPiBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHNpbXBsaWZ5TWF0
Y2hlZENoYXJhY3RlcnNUb1NwYWNlKFVDaGFyUHJlZGljYXRlKTsKKyAgICBORVZFUl9JTkxJTkUg
Y29uc3QgVUNoYXIqIGdldERhdGExNlNsb3dDYXNlKCkgY29uc3Q7CiAKICAgICAvLyBUaGUgYm90
dG9tIGJpdCBpbiB0aGUgcmVmIGNvdW50IGluZGljYXRlcyBhIHN0YXRpYyAoaW1tb3J0YWwpIHN0
cmluZy4KICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc19yZWZDb3VudEZsYWdJc1N0YXRpY1N0
cmluZyA9IDB4MTsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc19yZWZDb3VudEluY3JlbWVu
dCA9IDB4MjsgLy8gVGhpcyBhbGxvd3MgdXMgdG8gcmVmIC8gZGVyZWYgd2l0aG91dCBkaXN0dXJi
aW5nIHRoZSBzdGF0aWMgc3RyaW5nIGZsYWcuCiAKLSAgICAvLyBUaGUgYm90dG9tIDYgYml0cyBp
biB0aGUgaGFzaCBhcmUgZmxhZ3MuCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNfZmxhZ0Nv
dW50ID0gNjsKKyAgICAvLyBUaGUgYm90dG9tIDggYml0cyBpbiB0aGUgaGFzaCBhcmUgZmxhZ3Mu
CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNfZmxhZ0NvdW50ID0gODsKICAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgc19mbGFnTWFzayA9ICgxdSA8PCBzX2ZsYWdDb3VudCkgLSAxOwogICAg
IENPTVBJTEVfQVNTRVJUKHNfZmxhZ0NvdW50ID09IFN0cmluZ0hhc2hlcjo6ZmxhZ0NvdW50LCBT
dHJpbmdIYXNoZXJfcmVzZXJ2ZXNfZW5vdWdoX2JpdHNfZm9yX1N0cmluZ0ltcGxfZmxhZ3MpOwog
CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNfaGFzaEZsYWdIYXMxNkJpdFNoYWRvdyA9IDF1
IDw8IDc7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNfaGFzaEZsYWc4Qml0QnVmZmVyID0g
MXUgPDwgNjsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc19oYXNoRmxhZ0hhc1Rlcm1pbmF0
aW5nTnVsbENoYXJhY3RlciA9IDF1IDw8IDU7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNf
aGFzaEZsYWdJc0F0b21pYyA9IDF1IDw8IDQ7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNf
aGFzaEZsYWdEaWRSZXBvcnRDb3N0ID0gMXUgPDwgMzsKQEAgLTQxNCwyNSArNTM2LDMzIEBAIHBy
aXZhdGU6CiAKICAgICB1bnNpZ25lZCBtX3JlZkNvdW50OwogICAgIHVuc2lnbmVkIG1fbGVuZ3Ro
OwotICAgIGNvbnN0IFVDaGFyKiBtX2RhdGE7CisgICAgdW5pb24geworICAgICAgICBjb25zdCBM
Q2hhciogbV9kYXRhODsKKyAgICAgICAgY29uc3QgVUNoYXIqIG1fZGF0YTE2OworICAgIH07CiAg
ICAgdW5pb24gewogICAgICAgICB2b2lkKiBtX2J1ZmZlcjsKICAgICAgICAgU3RyaW5nSW1wbCog
bV9zdWJzdHJpbmdCdWZmZXI7CiAgICAgICAgIFNoYXJlZFVDaGFyKiBtX3NoYXJlZEJ1ZmZlcjsK
KyAgICAgICAgbXV0YWJsZSBVQ2hhciogbV9jb3B5RGF0YTE2OwogICAgIH07CiAgICAgbXV0YWJs
ZSB1bnNpZ25lZCBtX2hhc2hBbmRGbGFnczsKIH07CiAKIGJvb2wgZXF1YWwoY29uc3QgU3RyaW5n
SW1wbCosIGNvbnN0IFN0cmluZ0ltcGwqKTsKLWJvb2wgZXF1YWwoY29uc3QgU3RyaW5nSW1wbCos
IGNvbnN0IGNoYXIqKTsKLWlubGluZSBib29sIGVxdWFsKGNvbnN0IGNoYXIqIGEsIFN0cmluZ0lt
cGwqIGIpIHsgcmV0dXJuIGVxdWFsKGIsIGEpOyB9Citib29sIGVxdWFsKGNvbnN0IFN0cmluZ0lt
cGwqLCBjb25zdCBMQ2hhciopOworaW5saW5lIGJvb2wgZXF1YWwoY29uc3QgU3RyaW5nSW1wbCog
YSwgY29uc3QgY2hhciogYikgeyByZXR1cm4gZXF1YWwoYSwgcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBMQ2hhcio+KGIpKTsgfQorYm9vbCBlcXVhbChjb25zdCBTdHJpbmdJbXBsKiwgY29uc3QgTENo
YXIqLCB1bnNpZ25lZCk7CitpbmxpbmUgYm9vbCBlcXVhbChjb25zdCBMQ2hhciogYSwgU3RyaW5n
SW1wbCogYikgeyByZXR1cm4gZXF1YWwoYiwgYSk7IH0KIGJvb2wgZXF1YWwoY29uc3QgU3RyaW5n
SW1wbCosIGNvbnN0IFVDaGFyKiwgdW5zaWduZWQpOwogCiBib29sIGVxdWFsSWdub3JpbmdDYXNl
KFN0cmluZ0ltcGwqLCBTdHJpbmdJbXBsKik7Ci1ib29sIGVxdWFsSWdub3JpbmdDYXNlKFN0cmlu
Z0ltcGwqLCBjb25zdCBjaGFyKik7Ci1pbmxpbmUgYm9vbCBlcXVhbElnbm9yaW5nQ2FzZShjb25z
dCBjaGFyKiBhLCBTdHJpbmdJbXBsKiBiKSB7IHJldHVybiBlcXVhbElnbm9yaW5nQ2FzZShiLCBh
KTsgfQotYm9vbCBlcXVhbElnbm9yaW5nQ2FzZShjb25zdCBVQ2hhciogYSwgY29uc3QgY2hhciog
YiwgdW5zaWduZWQgbGVuZ3RoKTsKLWlubGluZSBib29sIGVxdWFsSWdub3JpbmdDYXNlKGNvbnN0
IGNoYXIqIGEsIGNvbnN0IFVDaGFyKiBiLCB1bnNpZ25lZCBsZW5ndGgpIHsgcmV0dXJuIGVxdWFs
SWdub3JpbmdDYXNlKGIsIGEsIGxlbmd0aCk7IH0KK2Jvb2wgZXF1YWxJZ25vcmluZ0Nhc2UoU3Ry
aW5nSW1wbCosIGNvbnN0IExDaGFyKik7CitpbmxpbmUgYm9vbCBlcXVhbElnbm9yaW5nQ2FzZShj
b25zdCBMQ2hhciogYSwgU3RyaW5nSW1wbCogYikgeyByZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2Uo
YiwgYSk7IH0KK2Jvb2wgZXF1YWxJZ25vcmluZ0Nhc2UoY29uc3QgVUNoYXIqLCBjb25zdCBMQ2hh
ciosIHVuc2lnbmVkKTsKK2lubGluZSBib29sIGVxdWFsSWdub3JpbmdDYXNlKGNvbnN0IFVDaGFy
KiBhLCBjb25zdCBjaGFyKiBiLCB1bnNpZ25lZCBsZW5ndGgpIHsgcmV0dXJuIGVxdWFsSWdub3Jp
bmdDYXNlKGEsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihiKSwgbGVuZ3RoKTsgfQor
aW5saW5lIGJvb2wgZXF1YWxJZ25vcmluZ0Nhc2UoY29uc3QgTENoYXIqIGEsIGNvbnN0IFVDaGFy
KiBiLCB1bnNpZ25lZCBsZW5ndGgpIHsgcmV0dXJuIGVxdWFsSWdub3JpbmdDYXNlKGIsIGEsIGxl
bmd0aCk7IH0KK2lubGluZSBib29sIGVxdWFsSWdub3JpbmdDYXNlKGNvbnN0IGNoYXIqIGEsIGNv
bnN0IFVDaGFyKiBiLCB1bnNpZ25lZCBsZW5ndGgpIHsgcmV0dXJuIGVxdWFsSWdub3JpbmdDYXNl
KGIsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihhKSwgbGVuZ3RoKTsgfQogCiBib29s
IGVxdWFsSWdub3JpbmdOdWxsaXR5KFN0cmluZ0ltcGwqLCBTdHJpbmdJbXBsKik7CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9XVEZTdHJpbmcuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9XVEZTdHJpbmcuY3BwCShyZXZpc2lv
biA5ODI4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9XVEZTdHJpbmcuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02MSwxNyArNjEsMjcgQEAgU3RyaW5nOjpTdHJpbmcoY29uc3Qg
VUNoYXIqIHN0cikKIH0KIAogLy8gQ29uc3RydWN0IGEgc3RyaW5nIHdpdGggbGF0aW4xIGRhdGEu
Ci1TdHJpbmc6OlN0cmluZyhjb25zdCBjaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgp
CitTdHJpbmc6OlN0cmluZyhjb25zdCBMQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3Ro
KQogICAgIDogbV9pbXBsKGNoYXJhY3RlcnMgPyBTdHJpbmdJbXBsOjpjcmVhdGUoY2hhcmFjdGVy
cywgbGVuZ3RoKSA6IDApCiB7CiB9CiAKK1N0cmluZzo6U3RyaW5nKGNvbnN0IGNoYXIqIGNoYXJh
Y3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKKyAgICA6IG1faW1wbChjaGFyYWN0ZXJzID8gU3RyaW5n
SW1wbDo6Y3JlYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihjaGFyYWN0ZXJzKSwg
bGVuZ3RoKSA6IDApCit7Cit9CisKIC8vIENvbnN0cnVjdCBhIHN0cmluZyB3aXRoIGxhdGluMSBk
YXRhLCBmcm9tIGEgbnVsbC10ZXJtaW5hdGVkIHNvdXJjZS4KLVN0cmluZzo6U3RyaW5nKGNvbnN0
IGNoYXIqIGNoYXJhY3RlcnMpCitTdHJpbmc6OlN0cmluZyhjb25zdCBMQ2hhciogY2hhcmFjdGVy
cykKICAgICA6IG1faW1wbChjaGFyYWN0ZXJzID8gU3RyaW5nSW1wbDo6Y3JlYXRlKGNoYXJhY3Rl
cnMpIDogMCkKIHsKIH0KIAorU3RyaW5nOjpTdHJpbmcoY29uc3QgY2hhciogY2hhcmFjdGVycykK
KyAgICA6IG1faW1wbChjaGFyYWN0ZXJzID8gU3RyaW5nSW1wbDo6Y3JlYXRlKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPihjaGFyYWN0ZXJzKSkgOiAwKQoreworfQorCiB2b2lkIFN0cmlu
Zzo6YXBwZW5kKGNvbnN0IFN0cmluZyYgc3RyKQogewogICAgIGlmIChzdHIuaXNFbXB0eSgpKQpA
QCAtOTUsNyArMTA1LDcgQEAgdm9pZCBTdHJpbmc6OmFwcGVuZChjb25zdCBTdHJpbmcmIHN0cikK
ICAgICB9CiB9CiAKLXZvaWQgU3RyaW5nOjphcHBlbmQoY2hhciBjKQordm9pZCBTdHJpbmc6OmFw
cGVuZChMQ2hhciBjKQogewogICAgIC8vIEZJWE1FOiBUaGlzIGlzIGV4dHJlbWVseSBpbmVmZmlj
aWVudC4gU28gbXVjaCBzbyB0aGF0IHdlIG1pZ2h0IHdhbnQgdG8gdGFrZSB0aGlzCiAgICAgLy8g
b3V0IG9mIFN0cmluZydzIEFQSS4gV2UgY2FuIG1ha2UgaXQgYmV0dGVyIGJ5IG9wdGltaXppbmcg
dGhlIGNhc2Ugd2hlcmUgZXhhY3RseQpAQCAtMzM4LDcgKzM0OCw3IEBAIFN0cmluZyBTdHJpbmc6
OmZvcm1hdChjb25zdCBjaGFyICpmb3JtYXQKICAgICB2YV9lbmQoYXJncyk7CiAKICAgICBRQnl0
ZUFycmF5IGJhID0gYnVmZmVyLnRvVXRmOCgpOwotICAgIHJldHVybiBTdHJpbmdJbXBsOjpjcmVh
dGUoYmEuY29uc3REYXRhKCksIGJhLmxlbmd0aCgpKTsKKyAgICByZXR1cm4gU3RyaW5nSW1wbDo6
Y3JlYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihiYS5jb25zdERhdGEoKSksIGJh
Lmxlbmd0aCgpKTsKIAogI2VsaWYgT1MoV0lOQ0UpCiAgICAgdmFfbGlzdCBhcmdzOwpAQCAtMzU1
LDcgKzM2NSw3IEBAIFN0cmluZyBTdHJpbmc6OmZvcm1hdChjb25zdCBjaGFyICpmb3JtYXQKICAg
ICAgICAgaWYgKHdyaXR0ZW4gPT0gMCkKICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoIiIpOwog
ICAgICAgICBpZiAod3JpdHRlbiA+IDApCi0gICAgICAgICAgICByZXR1cm4gU3RyaW5nSW1wbDo6
Y3JlYXRlKGJ1ZmZlci5kYXRhKCksIHdyaXR0ZW4pOworICAgICAgICAgICAgcmV0dXJuIFN0cmlu
Z0ltcGw6OmNyZWF0ZShyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oYnVmZmVyLmRhdGEo
KSksIHdyaXR0ZW4pOwogICAgICAgICAKICAgICAgICAgYnVmZmVyU2l6ZSA8PD0gMTsKICAgICAg
ICAgYnVmZmVyLnJlc2l6ZShidWZmZXJTaXplKTsKQEAgLTM5Niw3ICs0MDYsNyBAQCBTdHJpbmcg
U3RyaW5nOjpmb3JtYXQoY29uc3QgY2hhciAqZm9ybWF0CiAKICAgICB2YV9lbmQoYXJncyk7CiAg
ICAgCi0gICAgcmV0dXJuIFN0cmluZ0ltcGw6OmNyZWF0ZShidWZmZXIuZGF0YSgpLCBsZW4pOwor
ICAgIHJldHVybiBTdHJpbmdJbXBsOjpjcmVhdGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hh
cio+KGJ1ZmZlci5kYXRhKCkpLCBsZW4pOwogI2VuZGlmCiB9CiAKQEAgLTcyNCw3ICs3MzQsNyBA
QCBDU3RyaW5nIFN0cmluZzo6dXRmOChib29sIHN0cmljdCkgY29uc3QKICAgICByZXR1cm4gQ1N0
cmluZyhidWZmZXJWZWN0b3IuZGF0YSgpLCBidWZmZXIgLSBidWZmZXJWZWN0b3IuZGF0YSgpKTsK
IH0KIAotU3RyaW5nIFN0cmluZzo6ZnJvbVVURjgoY29uc3QgY2hhciogc3RyaW5nU3RhcnQsIHNp
emVfdCBsZW5ndGgpCitTdHJpbmcgU3RyaW5nOjpmcm9tVVRGOChjb25zdCBMQ2hhciogc3RyaW5n
U3RhcnQsIHNpemVfdCBsZW5ndGgpCiB7CiAgICAgaWYgKGxlbmd0aCA+IG51bWVyaWNfbGltaXRz
PHVuc2lnbmVkPjo6bWF4KCkpCiAgICAgICAgIENSQVNIKCk7CkBAIC03MzksOCArNzQ5LDggQEAg
U3RyaW5nIFN0cmluZzo6ZnJvbVVURjgoY29uc3QgY2hhciogc3RyaQogICAgIFVDaGFyKiBidWZm
ZXJFbmQgPSBidWZmZXIgKyBsZW5ndGg7CiAKICAgICAvLyBUcnkgY29udmVydGluZyBpbnRvIHRo
ZSBidWZmZXIuCi0gICAgY29uc3QgY2hhciogc3RyaW5nQ3VycmVudCA9IHN0cmluZ1N0YXJ0Owot
ICAgIGlmIChjb252ZXJ0VVRGOFRvVVRGMTYoJnN0cmluZ0N1cnJlbnQsIHN0cmluZ1N0YXJ0ICsg
bGVuZ3RoLCAmYnVmZmVyLCBidWZmZXJFbmQpICE9IGNvbnZlcnNpb25PSykKKyAgICBjb25zdCBj
aGFyKiBzdHJpbmdDdXJyZW50ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oc3RyaW5n
U3RhcnQpOworICAgIGlmIChjb252ZXJ0VVRGOFRvVVRGMTYoJnN0cmluZ0N1cnJlbnQsIHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhciAqPihzdHJpbmdTdGFydCArIGxlbmd0aCksICZidWZmZXIs
IGJ1ZmZlckVuZCkgIT0gY29udmVyc2lvbk9LKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAK
ICAgICAvLyBzdHJpbmdCdWZmZXIgaXMgZnVsbCAodGhlIGlucHV0IG11c3QgaGF2ZSBiZWVuIGFs
bCBhc2NpaSkgc28ganVzdCByZXR1cm4gaXQhCkBAIC03NTMsMTQgKzc2MywxNCBAQCBTdHJpbmcg
U3RyaW5nOjpmcm9tVVRGOChjb25zdCBjaGFyKiBzdHJpCiAgICAgcmV0dXJuIFN0cmluZyhzdHJp
bmdCdWZmZXIuY2hhcmFjdGVycygpLCB1dGYxNkxlbmd0aCk7CiB9CiAKLVN0cmluZyBTdHJpbmc6
OmZyb21VVEY4KGNvbnN0IGNoYXIqIHN0cmluZykKK1N0cmluZyBTdHJpbmc6OmZyb21VVEY4KGNv
bnN0IExDaGFyKiBzdHJpbmcpCiB7CiAgICAgaWYgKCFzdHJpbmcpCiAgICAgICAgIHJldHVybiBT
dHJpbmcoKTsKLSAgICByZXR1cm4gZnJvbVVURjgoc3RyaW5nLCBzdHJsZW4oc3RyaW5nKSk7Cisg
ICAgcmV0dXJuIGZyb21VVEY4KHN0cmluZywgc3RybGVuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
Y2hhcio+KHN0cmluZykpKTsKIH0KIAotU3RyaW5nIFN0cmluZzo6ZnJvbVVURjhXaXRoTGF0aW4x
RmFsbGJhY2soY29uc3QgY2hhciogc3RyaW5nLCBzaXplX3Qgc2l6ZSkKK1N0cmluZyBTdHJpbmc6
OmZyb21VVEY4V2l0aExhdGluMUZhbGxiYWNrKGNvbnN0IExDaGFyKiBzdHJpbmcsIHNpemVfdCBz
aXplKQogewogICAgIFN0cmluZyB1dGY4ID0gZnJvbVVURjgoc3RyaW5nLCBzaXplKTsKICAgICBp
ZiAoIXV0ZjgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvV1RGU3RyaW5n
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1dURlN0cmlu
Zy5oCShyZXZpc2lvbiA5ODI4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9X
VEZTdHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtODksOSArODksMTEgQEAgcHVibGljOgogICAg
IFdURl9FWFBPUlRfUFJJVkFURSBTdHJpbmcoY29uc3QgVUNoYXIqKTsKIAogICAgIC8vIENvbnN0
cnVjdCBhIHN0cmluZyB3aXRoIGxhdGluMSBkYXRhLgorICAgIFdURl9FWFBPUlRfUFJJVkFURSBT
dHJpbmcoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCk7CiAgICAgV1RG
X0VYUE9SVF9QUklWQVRFIFN0cmluZyhjb25zdCBjaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBs
ZW5ndGgpOwogCiAgICAgLy8gQ29uc3RydWN0IGEgc3RyaW5nIHdpdGggbGF0aW4xIGRhdGEsIGZy
b20gYSBudWxsLXRlcm1pbmF0ZWQgc291cmNlLgorICAgIFdURl9FWFBPUlRfUFJJVkFURSBTdHJp
bmcoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMpOwogICAgIFdURl9FWFBPUlRfUFJJVkFURSBTdHJp
bmcoY29uc3QgY2hhciogY2hhcmFjdGVycyk7CiAKICAgICAvLyBDb25zdHJ1Y3QgYSBzdHJpbmcg
cmVmZXJlbmNpbmcgYW4gZXhpc3RpbmcgU3RyaW5nSW1wbC4KQEAgLTE1NSw3ICsxNTcsNyBAQCBw
dWJsaWM6CiAgICAgICAgIHsgcmV0dXJuIG1faW1wbCA/IG1faW1wbC0+ZmluZChzdHIuaW1wbCgp
LCBzdGFydCkgOiBub3RGb3VuZDsgfQogICAgIHNpemVfdCBmaW5kKENoYXJhY3Rlck1hdGNoRnVu
Y3Rpb25QdHIgbWF0Y2hGdW5jdGlvbiwgdW5zaWduZWQgc3RhcnQgPSAwKSBjb25zdAogICAgICAg
ICB7IHJldHVybiBtX2ltcGwgPyBtX2ltcGwtPmZpbmQobWF0Y2hGdW5jdGlvbiwgc3RhcnQpIDog
bm90Rm91bmQ7IH0KLSAgICBzaXplX3QgZmluZChjb25zdCBjaGFyKiBzdHIsIHVuc2lnbmVkIHN0
YXJ0ID0gMCkgY29uc3QKKyAgICBzaXplX3QgZmluZChjb25zdCBMQ2hhciogc3RyLCB1bnNpZ25l
ZCBzdGFydCA9IDApIGNvbnN0CiAgICAgICAgIHsgcmV0dXJuIG1faW1wbCA/IG1faW1wbC0+Zmlu
ZChzdHIsIHN0YXJ0KSA6IG5vdEZvdW5kOyB9CiAKICAgICAvLyBGaW5kIHRoZSBsYXN0IGluc3Rh
bmNlIG9mIGEgc2luZ2xlIGNoYXJhY3RlciBvciBzdHJpbmcuCkBAIC0xNjUsNyArMTY3LDcgQEAg
cHVibGljOgogICAgICAgICB7IHJldHVybiBtX2ltcGwgPyBtX2ltcGwtPnJldmVyc2VGaW5kKHN0
ci5pbXBsKCksIHN0YXJ0KSA6IG5vdEZvdW5kOyB9CiAKICAgICAvLyBDYXNlIGluc2Vuc2l0aXZl
IHN0cmluZyBtYXRjaGluZy4KLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc2l6ZV90IGZpbmRJZ25v
cmluZ0Nhc2UoY29uc3QgY2hhciogc3RyLCB1bnNpZ25lZCBzdGFydCA9IDApIGNvbnN0CisgICAg
V1RGX0VYUE9SVF9QUklWQVRFIHNpemVfdCBmaW5kSWdub3JpbmdDYXNlKGNvbnN0IExDaGFyKiBz
dHIsIHVuc2lnbmVkIHN0YXJ0ID0gMCkgY29uc3QKICAgICAgICAgeyByZXR1cm4gbV9pbXBsID8g
bV9pbXBsLT5maW5kSWdub3JpbmdDYXNlKHN0ciwgc3RhcnQpIDogbm90Rm91bmQ7IH0KICAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgc2l6ZV90IGZpbmRJZ25vcmluZ0Nhc2UoY29uc3QgU3RyaW5nJiBz
dHIsIHVuc2lnbmVkIHN0YXJ0ID0gMCkgY29uc3QKICAgICAgICAgeyByZXR1cm4gbV9pbXBsID8g
bV9pbXBsLT5maW5kSWdub3JpbmdDYXNlKHN0ci5pbXBsKCksIHN0YXJ0KSA6IG5vdEZvdW5kOyB9
CkBAIC0xNzMsNyArMTc1LDcgQEAgcHVibGljOgogICAgICAgICB7IHJldHVybiBtX2ltcGwgPyBt
X2ltcGwtPnJldmVyc2VGaW5kSWdub3JpbmdDYXNlKHN0ci5pbXBsKCksIHN0YXJ0KSA6IG5vdEZv
dW5kOyB9CiAKICAgICAvLyBXcmFwcGVycyBmb3IgZmluZCAmIHJldmVyc2VGaW5kIGFkZGluZyBk
eW5hbWljIHNlbnNpdGl2aXR5IGNoZWNrLgotICAgIHNpemVfdCBmaW5kKGNvbnN0IGNoYXIqIHN0
ciwgdW5zaWduZWQgc3RhcnQsIGJvb2wgY2FzZVNlbnNpdGl2ZSkgY29uc3QKKyAgICBzaXplX3Qg
ZmluZChjb25zdCBMQ2hhciogc3RyLCB1bnNpZ25lZCBzdGFydCwgYm9vbCBjYXNlU2Vuc2l0aXZl
KSBjb25zdAogICAgICAgICB7IHJldHVybiBjYXNlU2Vuc2l0aXZlID8gZmluZChzdHIsIHN0YXJ0
KSA6IGZpbmRJZ25vcmluZ0Nhc2Uoc3RyLCBzdGFydCk7IH0KICAgICBzaXplX3QgZmluZChjb25z
dCBTdHJpbmcmIHN0ciwgdW5zaWduZWQgc3RhcnQsIGJvb2wgY2FzZVNlbnNpdGl2ZSkgY29uc3QK
ICAgICAgICAgeyByZXR1cm4gY2FzZVNlbnNpdGl2ZSA/IGZpbmQoc3RyLCBzdGFydCkgOiBmaW5k
SWdub3JpbmdDYXNlKHN0ciwgc3RhcnQpOyB9CkBAIC0xODUsNyArMTg3LDcgQEAgcHVibGljOgog
ICAgIFdURl9FWFBPUlRfUFJJVkFURSBVQ2hhcjMyIGNoYXJhY3RlclN0YXJ0aW5nQXQodW5zaWdu
ZWQpIGNvbnN0OyAvLyBEaXR0by4KICAgICAKICAgICBib29sIGNvbnRhaW5zKFVDaGFyIGMpIGNv
bnN0IHsgcmV0dXJuIGZpbmQoYykgIT0gbm90Rm91bmQ7IH0KLSAgICBib29sIGNvbnRhaW5zKGNv
bnN0IGNoYXIqIHN0ciwgYm9vbCBjYXNlU2Vuc2l0aXZlID0gdHJ1ZSkgY29uc3QgeyByZXR1cm4g
ZmluZChzdHIsIDAsIGNhc2VTZW5zaXRpdmUpICE9IG5vdEZvdW5kOyB9CisgICAgYm9vbCBjb250
YWlucyhjb25zdCBMQ2hhciogc3RyLCBib29sIGNhc2VTZW5zaXRpdmUgPSB0cnVlKSBjb25zdCB7
IHJldHVybiBmaW5kKHN0ciwgMCwgY2FzZVNlbnNpdGl2ZSkgIT0gbm90Rm91bmQ7IH0KICAgICBi
b29sIGNvbnRhaW5zKGNvbnN0IFN0cmluZyYgc3RyLCBib29sIGNhc2VTZW5zaXRpdmUgPSB0cnVl
KSBjb25zdCB7IHJldHVybiBmaW5kKHN0ciwgMCwgY2FzZVNlbnNpdGl2ZSkgIT0gbm90Rm91bmQ7
IH0KIAogICAgIGJvb2wgc3RhcnRzV2l0aChjb25zdCBTdHJpbmcmIHMsIGJvb2wgY2FzZVNlbnNp
dGl2ZSA9IHRydWUpIGNvbnN0CkBAIC0xOTQsNyArMTk2LDggQEAgcHVibGljOgogICAgICAgICB7
IHJldHVybiBtX2ltcGwgPyBtX2ltcGwtPmVuZHNXaXRoKHMuaW1wbCgpLCBjYXNlU2Vuc2l0aXZl
KSA6IHMuaXNFbXB0eSgpOyB9CiAKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBhcHBlbmQo
Y29uc3QgU3RyaW5nJik7Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYXBwZW5kKGNoYXIp
OworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGFwcGVuZChMQ2hhcik7CisgICAgaW5saW5l
IFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGFwcGVuZChjaGFyIGMpIHsgYXBwZW5kKHN0YXRpY19j
YXN0PExDaGFyPihjKSk7IH07CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYXBwZW5kKFVD
aGFyKTsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBhcHBlbmQoY29uc3QgVUNoYXIqLCB1
bnNpZ25lZCBsZW5ndGgpOwogICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGluc2VydChjb25z
dCBTdHJpbmcmLCB1bnNpZ25lZCBwb3MpOwpAQCAtMzA1LDExICszMDgsMTQgQEAgcHVibGljOgog
CiAgICAgLy8gU3RyaW5nOjpmcm9tVVRGOCB3aWxsIHJldHVybiBhIG51bGwgc3RyaW5nIGlmCiAg
ICAgLy8gdGhlIGlucHV0IGRhdGEgY29udGFpbnMgaW52YWxpZCBVVEYtOCBzZXF1ZW5jZXMuCi0g
ICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJpbmcgZnJvbVVURjgoY29uc3QgY2hhcios
IHNpemVfdCk7Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJpbmcgZnJvbVVURjgo
Y29uc3QgY2hhciopOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RyaW5nIGZyb21V
VEY4KGNvbnN0IExDaGFyKiwgc2l6ZV90KTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IFN0cmluZyBmcm9tVVRGOChjb25zdCBMQ2hhciopOworICAgIGlubGluZSBXVEZfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIFN0cmluZyBmcm9tVVRGOChjb25zdCBjaGFyKiBzLCBzaXplX3QgbGVuZ3Ro
KSB7IHJldHVybiBmcm9tVVRGOChyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4ocyksIGxl
bmd0aCk7IH07CisgICAgaW5saW5lIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RyaW5nIGZy
b21VVEY4KGNvbnN0IGNoYXIqIHMpIHsgcmV0dXJuIGZyb21VVEY4KHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgTENoYXIqPihzKSk7IH07CiAKICAgICAvLyBUcmllcyB0byBjb252ZXJ0IHRoZSBwYXNz
ZWQgaW4gc3RyaW5nIHRvIFVURi04LCBidXQgd2lsbCBmYWxsIGJhY2sgdG8gTGF0aW4tMSBpZiB0
aGUgc3RyaW5nIGlzIG5vdCB2YWxpZCBVVEYtOC4KLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIFN0cmluZyBmcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFjayhjb25zdCBjaGFyKiwgc2l6ZV90
KTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cmluZyBmcm9tVVRGOFdpdGhMYXRp
bjFGYWxsYmFjayhjb25zdCBMQ2hhciosIHNpemVfdCk7CisgICAgaW5saW5lIFdURl9FWFBPUlRf
UFJJVkFURSBzdGF0aWMgU3RyaW5nIGZyb21VVEY4V2l0aExhdGluMUZhbGxiYWNrKGNvbnN0IGNo
YXIqIHMsIHNpemVfdCBsZW5ndGgpIHsgcmV0dXJuIGZyb21VVEY4V2l0aExhdGluMUZhbGxiYWNr
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihzKSwgbGVuZ3RoKTsgfTsKICAgICAKICAg
ICAvLyBEZXRlcm1pbmVzIHRoZSB3cml0aW5nIGRpcmVjdGlvbiB1c2luZyB0aGUgVW5pY29kZSBC
aWRpIEFsZ29yaXRobSBydWxlcyBQMiBhbmQgUDMuCiAgICAgV1RGOjpVbmljb2RlOjpEaXJlY3Rp
b24gZGVmYXVsdFdyaXRpbmdEaXJlY3Rpb24oYm9vbCogaGFzU3Ryb25nRGlyZWN0aW9uYWxpdHkg
PSAwKSBjb25zdApAQCAtMzQ0LDE2ICszNTAsMjIgQEAgUURhdGFTdHJlYW0mIG9wZXJhdG9yPj4o
UURhdGFTdHJlYW0mIHN0cgogaW5saW5lIFN0cmluZyYgb3BlcmF0b3IrPShTdHJpbmcmIGEsIGNv
bnN0IFN0cmluZyYgYikgeyBhLmFwcGVuZChiKTsgcmV0dXJuIGE7IH0KIAogaW5saW5lIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBTdHJpbmcmIGEsIGNvbnN0IFN0cmluZyYgYikgeyByZXR1cm4gZXF1
YWwoYS5pbXBsKCksIGIuaW1wbCgpKTsgfQotaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBT
dHJpbmcmIGEsIGNvbnN0IGNoYXIqIGIpIHsgcmV0dXJuIGVxdWFsKGEuaW1wbCgpLCBiKTsgfQot
aW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBjaGFyKiBhLCBjb25zdCBTdHJpbmcmIGIpIHsg
cmV0dXJuIGVxdWFsKGEsIGIuaW1wbCgpKTsgfQoraW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBTdHJpbmcmIGEsIGNvbnN0IExDaGFyKiBiKSB7IHJldHVybiBlcXVhbChhLmltcGwoKSwgYik7
IH0KK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgU3RyaW5nJiBhLCBjb25zdCBjaGFyKiBi
KSB7IHJldHVybiBlcXVhbChhLmltcGwoKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+
KGIpKTsgfQoraW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBMQ2hhciogYSwgY29uc3QgU3Ry
aW5nJiBiKSB7IHJldHVybiBlcXVhbChhLCBiLmltcGwoKSk7IH0KK2lubGluZSBib29sIG9wZXJh
dG9yPT0oY29uc3QgY2hhciogYSwgY29uc3QgU3RyaW5nJiBiKSB7IHJldHVybiBlcXVhbChyZWlu
dGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oYSksIGIuaW1wbCgpKTsgfQogCiBpbmxpbmUgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IFN0cmluZyYgYSwgY29uc3QgU3RyaW5nJiBiKSB7IHJldHVybiAh
ZXF1YWwoYS5pbXBsKCksIGIuaW1wbCgpKTsgfQotaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25z
dCBTdHJpbmcmIGEsIGNvbnN0IGNoYXIqIGIpIHsgcmV0dXJuICFlcXVhbChhLmltcGwoKSwgYik7
IH0KLWlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgY2hhciogYSwgY29uc3QgU3RyaW5nJiBi
KSB7IHJldHVybiAhZXF1YWwoYSwgYi5pbXBsKCkpOyB9CitpbmxpbmUgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IFN0cmluZyYgYSwgY29uc3QgTENoYXIqIGIpIHsgcmV0dXJuICFlcXVhbChhLmltcGwo
KSwgYik7IH0KK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgU3RyaW5nJiBhLCBjb25zdCBj
aGFyKiBiKSB7IHJldHVybiAhZXF1YWwoYS5pbXBsKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
TENoYXIqPihiKSk7IH0KK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgTENoYXIqIGEsIGNv
bnN0IFN0cmluZyYgYikgeyByZXR1cm4gIWVxdWFsKGEsIGIuaW1wbCgpKTsgfQoraW5saW5lIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBjaGFyKiBhLCBjb25zdCBTdHJpbmcmIGIpIHsgcmV0dXJuICFl
cXVhbChyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oYSksIGIuaW1wbCgpKTsgfQogCiBp
bmxpbmUgYm9vbCBlcXVhbElnbm9yaW5nQ2FzZShjb25zdCBTdHJpbmcmIGEsIGNvbnN0IFN0cmlu
ZyYgYikgeyByZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2UoYS5pbXBsKCksIGIuaW1wbCgpKTsgfQot
aW5saW5lIGJvb2wgZXF1YWxJZ25vcmluZ0Nhc2UoY29uc3QgU3RyaW5nJiBhLCBjb25zdCBjaGFy
KiBiKSB7IHJldHVybiBlcXVhbElnbm9yaW5nQ2FzZShhLmltcGwoKSwgYik7IH0KLWlubGluZSBi
b29sIGVxdWFsSWdub3JpbmdDYXNlKGNvbnN0IGNoYXIqIGEsIGNvbnN0IFN0cmluZyYgYikgeyBy
ZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2UoYSwgYi5pbXBsKCkpOyB9CitpbmxpbmUgYm9vbCBlcXVh
bElnbm9yaW5nQ2FzZShjb25zdCBTdHJpbmcmIGEsIGNvbnN0IExDaGFyKiBiKSB7IHJldHVybiBl
cXVhbElnbm9yaW5nQ2FzZShhLmltcGwoKSwgYik7IH0KK2lubGluZSBib29sIGVxdWFsSWdub3Jp
bmdDYXNlKGNvbnN0IFN0cmluZyYgYSwgY29uc3QgY2hhciogYikgeyByZXR1cm4gZXF1YWxJZ25v
cmluZ0Nhc2UoYS5pbXBsKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihiKSk7IH0K
K2lubGluZSBib29sIGVxdWFsSWdub3JpbmdDYXNlKGNvbnN0IExDaGFyKiBhLCBjb25zdCBTdHJp
bmcmIGIpIHsgcmV0dXJuIGVxdWFsSWdub3JpbmdDYXNlKGEsIGIuaW1wbCgpKTsgfQoraW5saW5l
IGJvb2wgZXF1YWxJZ25vcmluZ0Nhc2UoY29uc3QgY2hhciogYSwgY29uc3QgU3RyaW5nJiBiKSB7
IHJldHVybiBlcXVhbElnbm9yaW5nQ2FzZShyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4o
YSksIGIuaW1wbCgpKTsgfQogCiBpbmxpbmUgYm9vbCBlcXVhbFBvc3NpYmx5SWdub3JpbmdDYXNl
KGNvbnN0IFN0cmluZyYgYSwgY29uc3QgU3RyaW5nJiBiLCBib29sIGlnbm9yZUNhc2UpIAogewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi91bmljb2RlL1VuaWNvZGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvVW5pY29kZS5oCShyZXZp
c2lvbiA5ODI4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdW5pY29kZS9Vbmljb2Rl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDQgKzM5LDYgQEAKIAogQ09NUElMRV9BU1NFUlQoc2l6
ZW9mKFVDaGFyKSA9PSAyLCBVQ2hhcklzVHdvQnl0ZXMpOwogCit0eXBlZGVmIHVuc2lnbmVkIGNo
YXIgTENoYXI7CisKICNlbmRpZiAvLyBXVEZfVU5JQ09ERV9ICkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUveWFyci9ZYXJySklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUveWFyci9ZYXJySklULmNwcAkocmV2aXNpb24gOTgyODUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUveWFyci9ZYXJySklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUwMCw3ICsyNTAw
LDcgQEAgdm9pZCBqaXRDb21waWxlKFlhcnJQYXR0ZXJuJiBwYXR0ZXJuLCBZYQogICAgIFlhcnJH
ZW5lcmF0b3IocGF0dGVybiwgY2hhclNpemUpLmNvbXBpbGUoZ2xvYmFsRGF0YSwgaml0T2JqZWN0
KTsKIH0KIAotaW50IGV4ZWN1dGUoWWFyckNvZGVCbG9jayYgaml0T2JqZWN0LCBjb25zdCBjaGFy
KiBpbnB1dCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCwgaW50KiBvdXRwdXQpCitp
bnQgZXhlY3V0ZShZYXJyQ29kZUJsb2NrJiBqaXRPYmplY3QsIGNvbnN0IExDaGFyKiBpbnB1dCwg
dW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCwgaW50KiBvdXRwdXQpCiB7CiAgICAgcmV0
dXJuIGppdE9iamVjdC5leGVjdXRlKGlucHV0LCBzdGFydCwgbGVuZ3RoLCBvdXRwdXQpOwogfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuaAkocmV2aXNpb24gOTgyODUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ4LDcgKzQ4LDcgQEAgY2xhc3MgRXhlY3V0YWJsZVBvb2w7CiBuYW1lc3BhY2UgWWFyciB7CiAK
IGNsYXNzIFlhcnJDb2RlQmxvY2sgewotICAgIHR5cGVkZWYgaW50ICgqWWFyckpJVENvZGU4KShj
b25zdCBjaGFyKiBpbnB1dCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCwgaW50KiBv
dXRwdXQpIFlBUlJfQ0FMTDsKKyAgICB0eXBlZGVmIGludCAoKllhcnJKSVRDb2RlOCkoY29uc3Qg
TENoYXIqIGlucHV0LCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoLCBpbnQqIG91dHB1
dCkgWUFSUl9DQUxMOwogICAgIHR5cGVkZWYgaW50ICgqWWFyckpJVENvZGUxNikoY29uc3QgVUNo
YXIqIGlucHV0LCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoLCBpbnQqIG91dHB1dCkg
WUFSUl9DQUxMOwogCiBwdWJsaWM6CkBAIC02OCw3ICs2OCw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IHNldDhCaXRDb2RlKE1hY3JvQXNzZW1ibGVyOjpDb2RlUmVmIHJlZikgeyBtX3JlZjggPSByZWY7
IH0KICAgICB2b2lkIHNldDE2Qml0Q29kZShNYWNyb0Fzc2VtYmxlcjo6Q29kZVJlZiByZWYpIHsg
bV9yZWYxNiA9IHJlZjsgfQogCi0gICAgaW50IGV4ZWN1dGUoY29uc3QgY2hhciogaW5wdXQsIHVu
c2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIGludCogb3V0cHV0KQorICAgIGludCBleGVj
dXRlKGNvbnN0IExDaGFyKiBpbnB1dCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCwg
aW50KiBvdXRwdXQpCiAgICAgewogICAgICAgICBBU1NFUlQoaGFzOEJpdENvZGUoKSk7CiAgICAg
ICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFlhcnJKSVRDb2RlOD4obV9yZWY4LmNvZGUoKS5l
eGVjdXRhYmxlQWRkcmVzcygpKShpbnB1dCwgc3RhcnQsIGxlbmd0aCwgb3V0cHV0KTsKQEAgLTkx
LDcgKzkxLDcgQEAgcHJpdmF0ZToKIAogdm9pZCBqaXRDb21waWxlKFlhcnJQYXR0ZXJuJiwgWWFy
ckNoYXJTaXplLCBKU0dsb2JhbERhdGEqLCBZYXJyQ29kZUJsb2NrJiBqaXRPYmplY3QpOwogaW50
IGV4ZWN1dGUoWWFyckNvZGVCbG9jayYgaml0T2JqZWN0LCBjb25zdCBVQ2hhciogaW5wdXQsIHVu
c2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIGludCogb3V0cHV0KTsKLWludCBleGVjdXRl
KFlhcnJDb2RlQmxvY2smIGppdE9iamVjdCwgY29uc3QgY2hhciogaW5wdXQsIHVuc2lnbmVkIHN0
YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIGludCogb3V0cHV0KTsKK2ludCBleGVjdXRlKFlhcnJDb2Rl
QmxvY2smIGppdE9iamVjdCwgY29uc3QgTENoYXIqIGlucHV0LCB1bnNpZ25lZCBzdGFydCwgdW5z
aWduZWQgbGVuZ3RoLCBpbnQqIG91dHB1dCk7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpZYXJy
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJQYXJzZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJyUGFyc2VyLmgJKHJldmlzaW9u
IDk4Mjg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyclBhcnNlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMzEsNyArMjMxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgOiBtX2RlbGVn
YXRlKGRlbGVnYXRlKQogICAgICAgICAsIG1fYmFja1JlZmVyZW5jZUxpbWl0KGJhY2tSZWZlcmVu
Y2VMaW1pdCkKICAgICAgICAgLCBtX2VycihOb0Vycm9yKQotICAgICAgICAsIG1fZGF0YShwYXR0
ZXJuKQorICAgICAgICAsIG1fZGF0YShwYXR0ZXJuLmNoYXJhY3RlcnMxNigpKQogICAgICAgICAs
IG1fc2l6ZShwYXR0ZXJuLmxlbmd0aCgpKQogICAgICAgICAsIG1faW5kZXgoMCkKICAgICAgICAg
LCBtX3BhcmVudGhlc2VzTmVzdGluZ0RlcHRoKDApCkBAIC03OTMsNyArNzkzLDcgQEAgcHJpdmF0
ZToKICAgICBEZWxlZ2F0ZSYgbV9kZWxlZ2F0ZTsKICAgICB1bnNpZ25lZCBtX2JhY2tSZWZlcmVu
Y2VMaW1pdDsKICAgICBFcnJvckNvZGUgbV9lcnI7Ci0gICAgY29uc3QgVVN0cmluZyYgbV9kYXRh
OworICAgIGNvbnN0IFVDaGFyKiBtX2RhdGE7CiAgICAgdW5zaWduZWQgbV9zaXplOwogICAgIHVu
c2lnbmVkIG1faW5kZXg7CiAgICAgdW5zaWduZWQgbV9wYXJlbnRoZXNlc05lc3RpbmdEZXB0aDsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBt
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVy
YXRvckpTLnBtCShyZXZpc2lvbiA5ODI4NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC0zMDg1LDE0ICszMDg1
LDE0IEBAIHN1YiBHZW5lcmF0ZUhhc2hWYWx1ZQogICAgICRoYXNoID0gJGhhc2glICRFWFAyXzMy
OwogICAgICRoYXNoIF49IChsZWZ0U2hpZnQoJGhhc2gsIDEwKSUgJEVYUDJfMzIpOwogICAgIAot
ICAgICMgU2F2ZSA2IGJpdHMgZm9yIFN0cmluZ0ltcGwgdG8gdXNlIGFzIGZsYWdzLgotICAgICRo
YXNoID0gKCRoYXNoID4+IDYpOworICAgICMgU2F2ZSA4IGJpdHMgZm9yIFN0cmluZ0ltcGwgdG8g
dXNlIGFzIGZsYWdzLgorICAgICRoYXNoICY9IDB4ZmZmZmZmOwogICAgIAogICAgICMgVGhpcyBh
dm9pZHMgZXZlciByZXR1cm5pbmcgYSBoYXNoIGNvZGUgb2YgMCwgc2luY2UgdGhhdCBpcyB1c2Vk
IHRvCiAgICAgIyBzaWduYWwgImhhc2ggbm90IGNvbXB1dGVkIHlldCIuIFNldHRpbmcgdGhlIGhp
Z2ggYml0IG1haW50YWlucwogICAgICMgcmVhc29uYWJsZSBmaWRlbGl0eSB0byBhIGhhc2ggY29k
ZSBvZiAwIGJlY2F1c2UgaXQgaXMgbGlrZWx5IHRvIHlpZWxkCiAgICAgIyBleGFjdGx5IDAgd2hl
biBoYXNoIGxvb2t1cCBtYXNrcyBvdXQgdGhlIGhpZ2ggYml0cy4KLSAgICAkaGFzaCA9ICgweDgw
MDAwMDAwID4+IDYpIGlmICgkaGFzaCA9PSAwKTsKKyAgICAkaGFzaCA9ICgweDgwMDAwMDAwID4+
IDgpIGlmICgkaGFzaCA9PSAwKTsKICAgICAKICAgICByZXR1cm4gJGhhc2g7CiB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2NmL1N0cmluZ0ltcGxDRi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9jZi9TdHJpbmdJbXBsQ0YuY3BwCShy
ZXZpc2lvbiA5ODI4NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvY2YvU3RyaW5n
SW1wbENGLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM2LDEzICsxMzYsMTMgQEAgQ0ZTdHJpbmdS
ZWYgU3RyaW5nSW1wbDo6Y3JlYXRlQ0ZTdHJpbmcoKQogewogICAgIENGQWxsb2NhdG9yUmVmIGFs
bG9jYXRvciA9IChtX2xlbmd0aCAmJiBpc01haW5UaHJlYWQoKSkgPyBTdHJpbmdXcmFwcGVyQ0ZB
bGxvY2F0b3I6OmFsbG9jYXRvcigpIDogMDsKICAgICBpZiAoIWFsbG9jYXRvcikKLSAgICAgICAg
cmV0dXJuIENGU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgcmVpbnRlcnByZXRfY2FzdDxj
b25zdCBVbmlDaGFyKj4obV9kYXRhKSwgbV9sZW5ndGgpOworICAgICAgICByZXR1cm4gQ0ZTdHJp
bmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCByZWludGVycHJldF9jYXN0PGNvbnN0IFVuaUNoYXIq
PihjaGFyYWN0ZXJzKCkpLCBtX2xlbmd0aCk7CiAKICAgICAvLyBQdXQgcG9pbnRlciB0byB0aGUg
U3RyaW5nSW1wbCBpbiBhIGdsb2JhbCBzbyB0aGUgYWxsb2NhdG9yIGNhbiBzdG9yZSBpdCB3aXRo
IHRoZSBDRlN0cmluZy4KICAgICBBU1NFUlQoIVN0cmluZ1dyYXBwZXJDRkFsbG9jYXRvcjo6Y3Vy
cmVudFN0cmluZyk7CiAgICAgU3RyaW5nV3JhcHBlckNGQWxsb2NhdG9yOjpjdXJyZW50U3RyaW5n
ID0gdGhpczsKIAotICAgIENGU3RyaW5nUmVmIHN0cmluZyA9IENGU3RyaW5nQ3JlYXRlV2l0aENo
YXJhY3RlcnNOb0NvcHkoYWxsb2NhdG9yLCByZWludGVycHJldF9jYXN0PGNvbnN0IFVuaUNoYXIq
PihtX2RhdGEpLCBtX2xlbmd0aCwga0NGQWxsb2NhdG9yTnVsbCk7CisgICAgQ0ZTdHJpbmdSZWYg
c3RyaW5nID0gQ0ZTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVyc05vQ29weShhbGxvY2F0b3IsIHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVW5pQ2hhcio+KGNoYXJhY3RlcnMoKSksIG1fbGVuZ3RoLCBr
Q0ZBbGxvY2F0b3JOdWxsKTsKIAogICAgIC8vIFRoZSBhbGxvY2F0b3IgY2xlYXJlZCB0aGUgZ2xv
YmFsIHdoZW4gaXQgcmVhZCBpdCwgYnV0IGFsc28gY2xlYXIgaXQgaGVyZSBqdXN0IGluIGNhc2Uu
CiAgICAgQVNTRVJUKCFTdHJpbmdXcmFwcGVyQ0ZBbGxvY2F0b3I6OmN1cnJlbnRTdHJpbmcpOwpJ
bmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZwkocmV2aXNpb24gOTg0MTIpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAxMS0xMC0yNSAgTWljaGFlbCBT
YWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KKworICAgICAgICBJbnZlc3RpZ2F0ZSBzdG9yaW5n
IHN0cmluZ3MgaW4gOC1iaXQgYnVmZmVycyB3aGVuIHBvc3NpYmxlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NjE2MQorCisgICAgICAgIEFkZGVkIGV4
cG9ydCBvZiBTdHJpbmdJbXBsOjpnZXREYXRhMTZTbG93Q2FzZSBmb3IgbGlua2luZyB0ZXN0cy4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHdpbi9X
ZWJLaXQyLmRlZjoKKwogMjAxMS0xMC0yNSAgQmV0aCBEYWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+
CiAKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcwODUy
CkBAIC0zMjEsNiArMzMyLDE3IEBACiAKIDIwMTEtMTAtMjQgIE1pY2hhZWwgU2Fib2ZmICA8bXNh
Ym9mZkBhcHBsZS5jb20+CiAKKyAgICAgICAgSW52ZXN0aWdhdGUgc3RvcmluZyBzdHJpbmdzIGlu
IDgtYml0IGJ1ZmZlcnMgd2hlbiBwb3NzaWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjYxNjEKKworICAgICAgICBBZGRlZCBleHBvcnQgb2YgU3Ry
aW5nSW1wbDo6Z2V0RGF0YTE2U2xvd0Nhc2UgZm9yIGxpbmtpbmcgdGVzdHMuCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3aW4vV2ViS2l0Mi5kZWY6
CisKKzIwMTEtMTAtMjQgIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CisKICAg
ICAgICAgV2ViS2l0IGRvZXNuJ3QgYnVpbGQgd2l0aCByZWNlbnQgY2hhbmdlcyB0byBsaWJkaXNw
YXRjaAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA3
MzcKIApJbmRleDogU291cmNlL1dlYktpdDIvd2luL1dlYktpdDIuZGVmCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL3dpbi9XZWJLaXQyLmRlZgkocmV2aXNpb24gOTgyODUpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi93aW4vV2ViS2l0Mi5kZWYJKHdvcmtpbmcgY29weSkKQEAgLTE1NSw2ICsxNTUs
NyBAQCBFWFBPUlRTCiAgICAgICAgID9lcXVhbEBXVEZAQFlBX05QQlZTdHJpbmdJbXBsQDFAUEJE
QFoKICAgICAgICAgP2V4dGVybmFsUmVwcmVzZW50YXRpb25AV2ViQ29yZUBAWUE/QVZTdHJpbmdA
V1RGQEBQQVZFbGVtZW50QDFASUBaCiAgICAgICAgID9nZXRDYWNoZWRET01TdHJ1Y3R1cmVAV2Vi
Q29yZUBAWUFQQVZTdHJ1Y3R1cmVASlNDQEBQQVZKU0RPTUdsb2JhbE9iamVjdEAxQFBCVUNsYXNz
SW5mb0AzQEBaCisgICAgICAgID9nZXREYXRhMTZTbG93Q2FzZUBTdHJpbmdJbXBsQFdURkBAQUJF
UEJfV1haCiAgICAgICAgID9nZXRFbGVtZW50QnlJZEBUcmVlU2NvcGVAV2ViQ29yZUBAUUJFUEFW
RWxlbWVudEAyQEFCVkF0b21pY1N0cmluZ0BXVEZAQEBaCiAgICAgICAgID9nZXRMb2NhdGlvbkFu
ZExlbmd0aEZyb21SYW5nZUBUZXh0SXRlcmF0b3JAV2ViQ29yZUBAU0FfTlBBVkVsZW1lbnRAMkBQ
QlZSYW5nZUAyQEFBSTJAWgogICAgICAgICA/aXNQcmVsb2FkZWRAQ2FjaGVkUmVzb3VyY2VMb2Fk
ZXJAV2ViQ29yZUBAUUJFX05BQlZTdHJpbmdAV1RGQEBAWgo=
</data>
<flag name="review"
          id="110519"
          type_id="1"
          status="-"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112601</attachid>
            <date>2011-10-26 14:50:14 -0700</date>
            <delta_ts>2011-10-26 17:32:48 -0700</delta_ts>
            <desc>Updated patch addressing comments #21</desc>
            <filename>66161-12.patch</filename>
            <type>text/plain</type>
            <size>121425</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTg1MTUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTc1IEBA
CisyMDExLTEwLTI2ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIEludmVzdGlnYXRlIHN0b3Jpbmcgc3RyaW5ncyBpbiA4LWJpdCBidWZmZXJzIHdoZW4gcG9z
c2libGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2
MTYxCisKKyAgICAgICAgSW52ZXN0aWdhdGUgc3RvcmluZyBzdHJpbmdzIGluIDgtYml0IGJ1ZmZl
cnMgd2hlbiBwb3NzaWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NjYxNjEKKworICAgICAgICBBZGRlZCBzdXBwb3J0IGZvciA4IGJpdCBzdHJpbmcg
ZGF0YSBpbiBTdHJpbmdJbXBsLiAgQ2hhbmdlZAorICAgICAgICAoVUNoYXIqKSBtX2RhdGEgdG8g
bV9kYXRhMTYuICBBZGRlZCBjaGFyKiBtX2RhdGE4IGFzIGEgdW5pb24KKyAgICAgICAgd2l0aCBt
X2RhdGExNi4gIEFkZGVkIFVDaGFyKiBtX2NvcHlEYXRhMTYgdG8gdGhlIG90aGVyIHVuaW9uCisg
ICAgICAgIHRvIHN0b3JlIGEgMTYgYml0IGNvcHkgb2YgYW4gOCBiaXQgc3RyaW5nIHdoZW4gbmVl
ZGVkLgorICAgICAgICBBZGRlZCBjaGFyYWN0ZXJzOCgpIGFuZCBjaGFyYWN0ZXJzMTYoKSBhY2Nl
c3NvciBtZXRob2RzCisgICAgICAgIHRoYXQgYXNzdW1lIHRoZSBjYWxsZXIgaGFzIGNoZWNrZWQg
dGhlIHVuZGVybHlpbmcgc3RyaW5nIHR5cGUKKyAgICAgICAgdmlhIHRoZSBuZXcgaXM4Qml0KCkg
bWV0aG9kLiBUaGUgY2hhcmFjdGVycygpIG1ldGhvZCB3aWxsCisgICAgICAgIHJldHVybiBhIFVD
aGFyKiBvZiB0aGUgc3RyaW5nLCBtYXRlcmlhbGl6aW5nIGEgMTYgYml0IGNvcHkgaWYgdGhlCisg
ICAgICAgIHN0cmluZyBpcyBhbiA4IGJpdCBzdHJpbmcuICBBZGRlZCB0d28gZmxhZ3MsIG9uZSBm
b3IgOCBiaXQgYnVmZmVyCisgICAgICAgIGFuZCBhIHNlY29uZCBmb3IgYSAxNiBiaXQgY29weSBm
b3IgYW4gOCBiaXQgc3RyaW5nLgorCisgICAgICAgIEZpeGVkIG1ldGhvZCBuYW1lIHR5cG8gKFN0
cmluZ0hhc2hlcjo6ZGVmYXVsdENvdmVydGVyKCkpLgorCisgICAgICAgIE92ZXIgdGltZSB0aGUg
Z29hbCBpcyB0byBlbGltaW5hdGUgY2FsbHMgdG8gY2hhcmFjdGVycygpIGFuZAorICAgICAgICB1
cyB0aGUgY2hhcmFjdGVyOCgpIGFuZCBjaGFyYWN0ZXJzMTYoKSBhY2Nlc3NvcnMuCisKKyAgICAg
ICAgVGhpcyBwYXRjaCBkb2VzIG5vdCBpbmNsdWRlIGNoYW5nZXMgdGhhdCBhY3R1YWxseSBjcmVh
dGUgOCBiaXQKKyAgICAgICAgc3RyaW5ncy4gVGhpcyBpcyB0aGUgZmlyc3Qgb2YgYXQgbGVhc3Qg
OCBwYXRjaGVzLiAgU3Vic2VxdWVudAorICAgICAgICBwYXRjaGVzIHdpbGwgYmUgc3VibWl0dGVk
IGZvciBKSVQgY2hhbmdlcywgbWFraW5nIHRoZSBKU0MgbGV4ZXIsCisgICAgICAgIHBhcnNlciBh
bmQgbGl0ZXJhbCBwYXJzZXIsIEphdmFTY3JpcHQgc3RyaW5nIGNoYW5nZXMgYW5kCisgICAgICAg
IHRoZW4gY2hhbmdlcyBpbiB3ZWJjb3JlIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoZSA4IGJpdCBz
dHJpbmdzLgorCisgICAgICAgIFRoaXMgY2hhbmdlIGlzIHBlcmZvcm1hbmNlIG5ldXRyYWwgZm9y
IFN1blNwaWRlciBhbmQgVjggd2hlbgorICAgICAgICBydW4gZnJvbSB0aGUgY29tbWFuZCBsaW5l
IHdpdGggImpzYyIuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBKYXZhU2NyaXB0Q29yZS5leHA6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJw
cmV0ZXIuY3BwOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y2FsbEV2YWwpOgorICAgICAg
ICAqIHBhcnNlci9Tb3VyY2VQcm92aWRlci5oOgorICAgICAgICAoSlNDOjpVU3RyaW5nU291cmNl
UHJvdmlkZXI6OmRhdGEpOgorICAgICAgICAoSlNDOjpVU3RyaW5nU291cmNlUHJvdmlkZXI6OlVT
dHJpbmdTb3VyY2VQcm92aWRlcik6CisgICAgICAgICogcnVudGltZS9JZGVudGlmaWVyLmNwcDoK
KyAgICAgICAgKEpTQzo6SWRlbnRpZmllckNTdHJpbmdUcmFuc2xhdG9yOjpoYXNoKToKKyAgICAg
ICAgKEpTQzo6SWRlbnRpZmllckNTdHJpbmdUcmFuc2xhdG9yOjplcXVhbCk6CisgICAgICAgIChK
U0M6OklkZW50aWZpZXJDU3RyaW5nVHJhbnNsYXRvcjo6dHJhbnNsYXRlKToKKyAgICAgICAgKEpT
Qzo6SWRlbnRpZmllcjo6YWRkKToKKyAgICAgICAgKEpTQzo6SWRlbnRpZmllcjo6dG9VSW50MzIp
OgorICAgICAgICAqIHJ1bnRpbWUvSWRlbnRpZmllci5oOgorICAgICAgICAoSlNDOjpJZGVudGlm
aWVyOjplcXVhbCk6CisgICAgICAgIChKU0M6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpv
cGVyYXRvciE9KToKKyAgICAgICAgKiBydW50aW1lL0pTU3RyaW5nLmNwcDoKKyAgICAgICAgKEpT
Qzo6SlNTdHJpbmc6OnJlc29sdmVSb3BlKToKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OnJlc29s
dmVSb3BlU2xvd0Nhc2UpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwLmNwcDoKKyAgICAgICAg
KEpTQzo6UmVnRXhwOjptYXRjaCk6CisgICAgICAgICogcnVudGltZS9TdHJpbmdQcm90b3R5cGUu
Y3BwOgorICAgICAgICAoSlNDOjpqc1NwbGljZVN1YnN0cmluZ3NXaXRoU2VwYXJhdG9ycyk6Cisg
ICAgICAgICogcnVudGltZS9VU3RyaW5nLmNwcDoKKyAgICAgICAgKEpTQzo6VVN0cmluZzo6VVN0
cmluZyk6CisgICAgICAgIChKU0M6OmVxdWFsU2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpVU3Ry
aW5nOjp1dGY4KToKKyAgICAgICAgKiBydW50aW1lL1VTdHJpbmcuaDoKKyAgICAgICAgKEpTQzo6
VVN0cmluZzo6Y2hhcmFjdGVycyk6CisgICAgICAgIChKU0M6OlVTdHJpbmc6OmNoYXJhY3RlcnM4
KToKKyAgICAgICAgKEpTQzo6VVN0cmluZzo6Y2hhcmFjdGVyczE2KToKKyAgICAgICAgKEpTQzo6
VVN0cmluZzo6aXM4Qml0KToKKyAgICAgICAgKEpTQzo6VVN0cmluZzo6b3BlcmF0b3JbXSk6Cisg
ICAgICAgIChKU0M6OlVTdHJpbmc6OmZpbmQpOgorICAgICAgICAoSlNDOjpvcGVyYXRvcj09KToK
KyAgICAgICAgKiB3dGYvU3RyaW5nSGFzaGVyLmg6CisgICAgICAgIChXVEY6OlN0cmluZ0hhc2hl
cjo6Y29tcHV0ZUhhc2gpOgorICAgICAgICAoV1RGOjpTdHJpbmdIYXNoZXI6OmRlZmF1bHRDb252
ZXJ0ZXIpOgorICAgICAgICAqIHd0Zi90ZXh0L0F0b21pY1N0cmluZy5jcHA6CisgICAgICAgIChX
VEY6OkNTdHJpbmdUcmFuc2xhdG9yOjpoYXNoKToKKyAgICAgICAgKFdURjo6Q1N0cmluZ1RyYW5z
bGF0b3I6OmVxdWFsKToKKyAgICAgICAgKFdURjo6Q1N0cmluZ1RyYW5zbGF0b3I6OnRyYW5zbGF0
ZSk6CisgICAgICAgIChXVEY6OkF0b21pY1N0cmluZzo6YWRkKToKKyAgICAgICAgKiB3dGYvdGV4
dC9BdG9taWNTdHJpbmcuaDoKKyAgICAgICAgKFdURjo6QXRvbWljU3RyaW5nOjpBdG9taWNTdHJp
bmcpOgorICAgICAgICAoV1RGOjpBdG9taWNTdHJpbmc6OmNvbnRhaW5zKToKKyAgICAgICAgKFdU
Rjo6QXRvbWljU3RyaW5nOjpmaW5kKToKKyAgICAgICAgKFdURjo6QXRvbWljU3RyaW5nOjphZGQp
OgorICAgICAgICAoV1RGOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdURjo6b3BlcmF0b3IhPSk6
CisgICAgICAgIChXVEY6OmVxdWFsSWdub3JpbmdDYXNlKToKKyAgICAgICAgKiB3dGYvdGV4dC9T
dHJpbmdDb25jYXRlbmF0ZS5oOgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0hhc2guaDoKKyAg
ICAgICAgKFdURjo6U3RyaW5nSGFzaDo6ZXF1YWwpOgorICAgICAgICAoV1RGOjpDYXNlRm9sZGlu
Z0hhc2g6Omhhc2gpOgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwOgorICAgICAg
ICAoV1RGOjpTdHJpbmdJbXBsOjp+U3RyaW5nSW1wbCk6CisgICAgICAgIChXVEY6OlN0cmluZ0lt
cGw6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpjcmVh
dGUpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpnZXREYXRhMTZTbG93Q2FzZSk6CisgICAg
ICAgIChXVEY6OlN0cmluZ0ltcGw6OmNvbnRhaW5zT25seVdoaXRlc3BhY2UpOgorICAgICAgICAo
V1RGOjpTdHJpbmdJbXBsOjpzdWJzdHJpbmcpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpj
aGFyYWN0ZXJTdGFydGluZ0F0KToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6bG93ZXIpOgor
ICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjp1cHBlcik6CisgICAgICAgIChXVEY6OlN0cmluZ0lt
cGw6OmZpbGwpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpmb2xkQ2FzZSk6CisgICAgICAg
IChXVEY6OlN0cmluZ0ltcGw6OnN0cmlwTWF0Y2hlZENoYXJhY3RlcnMpOgorICAgICAgICAoV1RG
OjpTdHJpbmdJbXBsOjpyZW1vdmVDaGFyYWN0ZXJzKToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1w
bDo6c2ltcGxpZnlNYXRjaGVkQ2hhcmFjdGVyc1RvU3BhY2UpOgorICAgICAgICAoV1RGOjpTdHJp
bmdJbXBsOjp0b0ludFN0cmljdCk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OnRvVUludFN0
cmljdCk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OnRvSW50NjRTdHJpY3QpOgorICAgICAg
ICAoV1RGOjpTdHJpbmdJbXBsOjp0b1VJbnQ2NFN0cmljdCk6CisgICAgICAgIChXVEY6OlN0cmlu
Z0ltcGw6OnRvSW50UHRyU3RyaWN0KToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6dG9JbnQp
OgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjp0b1VJbnQpOgorICAgICAgICAoV1RGOjpTdHJp
bmdJbXBsOjp0b0ludDY0KToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6dG9VSW50NjQpOgor
ICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjp0b0ludFB0cik6CisgICAgICAgIChXVEY6OlN0cmlu
Z0ltcGw6OnRvRG91YmxlKToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6dG9GbG9hdCk6Cisg
ICAgICAgIChXVEY6OmVxdWFsKToKKyAgICAgICAgKFdURjo6ZXF1YWxJZ25vcmluZ0Nhc2UpOgor
ICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpmaW5kKToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1w
bDo6ZmluZElnbm9yaW5nQ2FzZSk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OnJldmVyc2VG
aW5kKToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6cmVwbGFjZSk6CisgICAgICAgIChXVEY6
OlN0cmluZ0ltcGw6OmRlZmF1bHRXcml0aW5nRGlyZWN0aW9uKToKKyAgICAgICAgKFdURjo6U3Ry
aW5nSW1wbDo6YWRvcHQpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpjcmVhdGVXaXRoVGVy
bWluYXRpbmdOdWxsQ2hhcmFjdGVyKToKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdJbXBsLmg6
CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OlN0cmluZ0ltcGwpOgorICAgICAgICAoV1RGOjpT
dHJpbmdJbXBsOjpjcmVhdGUpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpjcmVhdGU4KToK
KyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCk6CisgICAg
ICAgIChXVEY6OlN0cmluZ0ltcGw6OmZsYWdzT2Zmc2V0KToKKyAgICAgICAgKFdURjo6U3RyaW5n
SW1wbDo6ZmxhZ0lzOEJpdCk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OmRhdGFPZmZzZXQp
OgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjppczhCaXQpOgorICAgICAgICAoV1RGOjpTdHJp
bmdJbXBsOjpjaGFyYWN0ZXJzOCk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OmNoYXJhY3Rl
cnMxNik6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OmNoYXJhY3RlcnMpOgorICAgICAgICAo
V1RGOjpTdHJpbmdJbXBsOjpoYXMxNkJpdFNoYWRvdyk6CisgICAgICAgIChXVEY6OlN0cmluZ0lt
cGw6OnNldEhhc2gpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpoYXNoKToKKyAgICAgICAg
KFdURjo6U3RyaW5nSW1wbDo6Y29weUNoYXJzKToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6
b3BlcmF0b3JbXSk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OmZpbmQpOgorICAgICAgICAo
V1RGOjpTdHJpbmdJbXBsOjpmaW5kSWdub3JpbmdDYXNlKToKKyAgICAgICAgKFdURjo6ZXF1YWwp
OgorICAgICAgICAoV1RGOjplcXVhbElnbm9yaW5nQ2FzZSk6CisgICAgICAgIChXVEY6OlN0cmlu
Z0ltcGw6Omlzb2xhdGVkQ29weSk6CisgICAgICAgICogd3RmL3RleHQvV1RGU3RyaW5nLmNwcDoK
KyAgICAgICAgKFdURjo6U3RyaW5nOjpTdHJpbmcpOgorICAgICAgICAoV1RGOjpTdHJpbmc6OmFw
cGVuZCk6CisgICAgICAgIChXVEY6OlN0cmluZzo6Zm9ybWF0KToKKyAgICAgICAgKFdURjo6U3Ry
aW5nOjpmcm9tVVRGOCk6CisgICAgICAgIChXVEY6OlN0cmluZzo6ZnJvbVVURjhXaXRoTGF0aW4x
RmFsbGJhY2spOgorICAgICAgICAqIHd0Zi90ZXh0L1dURlN0cmluZy5oOgorICAgICAgICAoV1RG
OjpTdHJpbmc6OmZpbmQpOgorICAgICAgICAoV1RGOjpTdHJpbmc6OmZpbmRJZ25vcmluZ0Nhc2Up
OgorICAgICAgICAoV1RGOjpTdHJpbmc6OmNvbnRhaW5zKToKKyAgICAgICAgKFdURjo6U3RyaW5n
OjphcHBlbmQpOgorICAgICAgICAoV1RGOjpTdHJpbmc6OmZyb21VVEY4KToKKyAgICAgICAgKFdU
Rjo6U3RyaW5nOjpmcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFjayk6CisgICAgICAgIChXVEY6Om9w
ZXJhdG9yPT0pOgorICAgICAgICAoV1RGOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdURjo6ZXF1
YWxJZ25vcmluZ0Nhc2UpOgorICAgICAgICAqIHd0Zi91bmljb2RlL1VuaWNvZGUuaDoKKyAgICAg
ICAgKiB5YXJyL1lhcnJKSVQuY3BwOgorICAgICAgICAoSlNDOjpZYXJyOjpleGVjdXRlKToKKyAg
ICAgICAgKiB5YXJyL1lhcnJKSVQuaDoKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckNvZGVCbG9j
azo6ZXhlY3V0ZSk6CisgICAgICAgICogeWFyci9ZYXJyUGFyc2VyLmg6CisgICAgICAgIChKU0M6
OllhcnI6OlBhcnNlcjo6UGFyc2VyKToKKwogMjAxMS0xMC0yNiAgTWFyayBIYWhuZW5iZXJnICA8
bWhhaG5lbmJlcmdAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBnZXRPd25Qcm9wZXJ0eVNs
b3RWaXJ0dWFsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJ
KHJldmlzaW9uIDk4NDk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LmV4cAkod29ya2luZyBjb3B5KQpAQCAtMzU1LDcgKzM1NSw2IEBAIF9fWk4zSlNDZ3RFUktOU183
VVN0cmluZ0VTMl8KIF9fWk4zSlNDbHRFUktOU183VVN0cmluZ0VTMl8KIF9fWk4zV1RGMTBTdHJp
bmdJbXBsMTFyZXZlcnNlRmluZEVQUzBfagogX19aTjNXVEYxMFN0cmluZ0ltcGwxMXJldmVyc2VG
aW5kRXRqCi1fX1pOM1dURjEwU3RyaW5nSW1wbDE2ZmluZElnbm9yaW5nQ2FzZUVQS2NqCiBfX1pO
M1dURjEwU3RyaW5nSW1wbDE2ZmluZElnbm9yaW5nQ2FzZUVQUzBfagogX19aTjNXVEYxMFN0cmlu
Z0ltcGwxOHNpbXBsaWZ5V2hpdGVTcGFjZUV2CiBfX1pOM1dURjEwU3RyaW5nSW1wbDE5Y2hhcmFj
dGVyU3RhcnRpbmdBdEVqCkBAIC0zNjUsNyArMzY0LDYgQEAgX19aTjNXVEYxMFN0cmluZ0ltcGwy
M2RlZmF1bHRXcml0aW5nRGlyZQogX19aTjNXVEYxMFN0cmluZ0ltcGwyM3JldmVyc2VGaW5kSWdu
b3JpbmdDYXNlRVBTMF9qCiBfX1pOM1dURjEwU3RyaW5nSW1wbDRmaWxsRXQKIF9fWk4zV1RGMTBT
dHJpbmdJbXBsNGZpbmRFUEZidEVqCi1fX1pOM1dURjEwU3RyaW5nSW1wbDRmaW5kRVBLY2oKIF9f
Wk4zV1RGMTBTdHJpbmdJbXBsNGZpbmRFUFMwX2oKIF9fWk4zV1RGMTBTdHJpbmdJbXBsNGZpbmRF
dGoKIF9fWk4zV1RGMTBTdHJpbmdJbXBsNWFkb3B0RVJOU18xMlN0cmluZ0J1ZmZlckUKQEAgLTM3
Myw4ICszNzEsNyBAQCBfX1pOM1dURjEwU3RyaW5nSW1wbDVlbXB0eUV2CiBfX1pOM1dURjEwU3Ry
aW5nSW1wbDVsb3dlckV2CiBfX1pOM1dURjEwU3RyaW5nSW1wbDV0b0ludEVQYgogX19aTjNXVEYx
MFN0cmluZ0ltcGw1dXBwZXJFdgotX19aTjNXVEYxMFN0cmluZ0ltcGw2Y3JlYXRlRVBLYwotX19a
TjNXVEYxMFN0cmluZ0ltcGw2Y3JlYXRlRVBLY2oKK19fWk4zV1RGMTBTdHJpbmdJbXBsNmNyZWF0
ZUVQS2gKIF9fWk4zV1RGMTBTdHJpbmdJbXBsNmNyZWF0ZUVQS3RqCiBfX1pOM1dURjEwU3RyaW5n
SW1wbDdyZXBsYWNlRVBTMF9TMV8KIF9fWk4zV1RGMTBTdHJpbmdJbXBsN3JlcGxhY2VFampQUzBf
CkBAIC0zOTQsNyArMzkxLDcgQEAgX19aTjNXVEYxMWVtcHR5U3RyaW5nRXYKIF9fWk4zV1RGMTFm
YXN0UmVhbGxvY0VQdm0KIF9fWk4zV1RGMTJBdG9taWNTdHJpbmcxMWFkZFNsb3dDYXNlRVBOU18x
MFN0cmluZ0ltcGxFCiBfX1pOM1dURjEyQXRvbWljU3RyaW5nMTZmcm9tVVRGOEludGVybmFsRVBL
Y1MyXwotX19aTjNXVEYxMkF0b21pY1N0cmluZzNhZGRFUEtjCitfX1pOM1dURjEyQXRvbWljU3Ry
aW5nM2FkZEVQS2gKIF9fWk4zV1RGMTJBdG9taWNTdHJpbmczYWRkRVBLdAogX19aTjNXVEYxMkF0
b21pY1N0cmluZzNhZGRFUEt0agogX19aTjNXVEYxMkF0b21pY1N0cmluZzNhZGRFUEt0amoKQEAg
LTQzNiw5ICs0MzMsOSBAQCBfX1pOM1dURjE2Y2FsbE9uTWFpblRocmVhZEVQRnZQdkVTMF8KIF9f
Wk4zV1RGMTZjb2RlUG9pbnRDb21wYXJlRVJLTlNfNlN0cmluZ0VTMl8KIF9fWk4zV1RGMTZmYXN0
WmVyb2VkTWFsbG9jRW0KIF9fWk4zV1RGMTdjaGFyYWN0ZXJzVG9GbG9hdEVQS3RtUGJTMl8KLV9f
Wk4zV1RGMTdlcXVhbElnbm9yaW5nQ2FzZUVQS3RQS2NqCi1fX1pOM1dURjE3ZXF1YWxJZ25vcmlu
Z0Nhc2VFUE5TXzEwU3RyaW5nSW1wbEVQS2MKK19fWk4zV1RGMTdlcXVhbElnbm9yaW5nQ2FzZUVQ
S3RQS2hqCiBfX1pOM1dURjE3ZXF1YWxJZ25vcmluZ0Nhc2VFUE5TXzEwU3RyaW5nSW1wbEVTMV8K
K19fWk4zV1RGMTdlcXVhbElnbm9yaW5nQ2FzZUVQTlNfMTBTdHJpbmdJbXBsRVBLaAogX19aTjNX
VEYxOGNhbGN1bGF0ZURTVE9mZnNldEVkZAogX19aTjNXVEYxOGNhbGN1bGF0ZVVUQ09mZnNldEV2
CiBfX1pOM1dURjE4Y2hhcmFjdGVyc1RvRG91YmxlRVBLdG1QYlMyXwpAQCAtNDgzLDE1ICs0ODAs
MTYgQEAgX19aTjNXVEY1TXV0ZXg2dW5sb2NrRXYKIF9fWk4zV1RGNU11dGV4N3RyeUxvY2tFdgog
X19aTjNXVEY1TXV0ZXhDMUV2CiBfX1pOM1dURjVNdXRleEQxRXYKLV9fWk4zV1RGNWVxdWFsRVBL
TlNfMTBTdHJpbmdJbXBsRVBLYworX19aTjNXVEY1ZXF1YWxFUEtOU18xMFN0cmluZ0ltcGxFUEto
CiBfX1pOM1dURjVlcXVhbEVQS05TXzEwU3RyaW5nSW1wbEVQS3RqCiBfX1pOM1dURjVlcXVhbEVQ
S05TXzEwU3RyaW5nSW1wbEVTMl8KIF9fWk4zV1RGNXlpZWxkRXYKLV9fWk4zV1RGNlN0cmluZzI2
ZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJhY2tFUEtjbQorX19aTjNXVEY2U3RyaW5nMjZmcm9tVVRG
OFdpdGhMYXRpbjFGYWxsYmFja0VQS2htCiBfX1pOM1dURjZTdHJpbmcyOWNoYXJhY3RlcnNXaXRo
TnVsbFRlcm1pbmF0aW9uRXYKK19fWk4zV1RGNlN0cmluZ0MxRVBLY2oKK19fWk4zV1RGNlN0cmlu
ZzZhcHBlbmRFaAogX19aTjNXVEY2U3RyaW5nNmFwcGVuZEVQS3RqCiBfX1pOM1dURjZTdHJpbmc2
YXBwZW5kRVJLUzBfCi1fX1pOM1dURjZTdHJpbmc2YXBwZW5kRWMKIF9fWk4zV1RGNlN0cmluZzZh
cHBlbmRFdAogX19aTjNXVEY2U3RyaW5nNmZvcm1hdEVQS2N6CiBfX1pOM1dURjZTdHJpbmc2aW5z
ZXJ0RVJLUzBfagpAQCAtNTA0LDExICs1MDIsMTAgQEAgX19aTjNXVEY2U3RyaW5nNm51bWJlckV0
CiBfX1pOM1dURjZTdHJpbmc2bnVtYmVyRXgKIF9fWk4zV1RGNlN0cmluZzZudW1iZXJFeQogX19a
TjNXVEY2U3RyaW5nNnJlbW92ZUVqaQotX19aTjNXVEY2U3RyaW5nOGZyb21VVEY4RVBLYwotX19a
TjNXVEY2U3RyaW5nOGZyb21VVEY4RVBLY20KK19fWk4zV1RGNlN0cmluZzhmcm9tVVRGOEVQS2gK
K19fWk4zV1RGNlN0cmluZzhmcm9tVVRGOEVQS2htCiBfX1pOM1dURjZTdHJpbmc4dHJ1bmNhdGVF
agogX19aTjNXVEY2U3RyaW5nQzFFUEtjCi1fX1pOM1dURjZTdHJpbmdDMUVQS2NqCiBfX1pOM1dU
RjZTdHJpbmdDMUVQS3QKIF9fWk4zV1RGNlN0cmluZ0MxRVBLdGoKIF9fWk4zV1RGNnN0cnRvZEVQ
S2NQUGMKQEAgLTU4Miw2ICs1NzksNyBAQCBfX1pOSzNKU0M4SlNTdHJpbmcxMXJlc29sdmVSb3Bl
RVBOU185RXhlCiBfX1pOSzNKU0M4SlNTdHJpbmc5dG9Cb29sZWFuRVBOU185RXhlY1N0YXRlRQog
X19aTkszSlNDOUhhc2hUYWJsZTExY3JlYXRlVGFibGVFUE5TXzEySlNHbG9iYWxEYXRhRQogX19a
TkszSlNDOUhhc2hUYWJsZTExZGVsZXRlVGFibGVFdgorX19aTkszV1RGMTBTdHJpbmdJbXBsMTdn
ZXREYXRhMTZTbG93Q2FzZUV2CiBfX1pOSzNXVEYxMkF0b21pY1N0cmluZzVsb3dlckV2CiBfX1pO
SzNXVEYxM0RlY2ltYWxOdW1iZXIxNXRvU3RyaW5nRGVjaW1hbEVQdGoKIF9fWk5LM1dURjEzRGVj
aW1hbE51bWJlcjE5dG9TdHJpbmdFeHBvbmVudGlhbEVQdGoKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkocmV2aXNpb24gOTg0
OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NDUsNyArNDQ1LDcgQEAgTkVWRVJfSU5MSU5FIEpTVmFsdWUg
SW50ZXJwcmV0ZXI6OmNhbGxFdgogICAgICAgICBpZiAoIWNvZGVCbG9jay0+aXNTdHJpY3RNb2Rl
KCkpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBjYW4gdXNlIHRoZSBwcmVwYXJzZXIgaW4g
c3RyaWN0IG1vZGUsIHdlIGp1c3QgbmVlZCBhZGRpdGlvbmFsIGxvZ2ljCiAgICAgICAgICAgICAv
LyB0byBwcmV2ZW50IGR1cGxpY2F0ZXMuCi0gICAgICAgICAgICBMaXRlcmFsUGFyc2VyIHByZXBh
cnNlcihjYWxsRnJhbWUsIHByb2dyYW1Tb3VyY2UuY2hhcmFjdGVycygpLCBwcm9ncmFtU291cmNl
Lmxlbmd0aCgpLCBMaXRlcmFsUGFyc2VyOjpOb25TdHJpY3RKU09OKTsKKyAgICAgICAgICAgIExp
dGVyYWxQYXJzZXIgcHJlcGFyc2VyKGNhbGxGcmFtZSwgcHJvZ3JhbVNvdXJjZS5jaGFyYWN0ZXJz
MTYoKSwgcHJvZ3JhbVNvdXJjZS5sZW5ndGgoKSwgTGl0ZXJhbFBhcnNlcjo6Tm9uU3RyaWN0SlNP
Tik7CiAgICAgICAgICAgICBpZiAoSlNWYWx1ZSBwYXJzZWRPYmplY3QgPSBwcmVwYXJzZXIudHJ5
TGl0ZXJhbFBhcnNlKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlZE9iamVjdDsKICAg
ICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VQcm92aWRl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlUHJv
dmlkZXIuaAkocmV2aXNpb24gOTg0OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L1NvdXJjZVByb3ZpZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTg4LDE3ICs4OCwxOSBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIG1fc291cmNlLnN1YnN0
cmluZ1NoYXJpbmdJbXBsKHN0YXJ0LCBlbmQgLSBzdGFydCk7CiAgICAgICAgIH0KLSAgICAgICAg
Y29uc3QgVUNoYXIqIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS5jaGFyYWN0ZXJzKCk7
IH0KKyAgICAgICAgY29uc3QgVUNoYXIqIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0K
ICAgICAgICAgaW50IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLmxlbmd0aCgpOyB9
CiAKICAgICBwcml2YXRlOgogICAgICAgICBVU3RyaW5nU291cmNlUHJvdmlkZXIoY29uc3QgVVN0
cmluZyYgc291cmNlLCBjb25zdCBVU3RyaW5nJiB1cmwpCiAgICAgICAgICAgICA6IFNvdXJjZVBy
b3ZpZGVyKHVybCkKICAgICAgICAgICAgICwgbV9zb3VyY2Uoc291cmNlKQorICAgICAgICAgICAg
LCBtX2RhdGEobV9zb3VyY2UuY2hhcmFjdGVyczE2KCkpCiAgICAgICAgIHsKICAgICAgICAgfQog
CiAgICAgICAgIFVTdHJpbmcgbV9zb3VyY2U7CisgICAgICAgIGNvbnN0IFVDaGFyKiBtX2RhdGE7
CiAgICAgfTsKICAgICAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5jcHAJKHJldmlzaW9uIDk4NDk0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY4LDIzICs2OCwyMyBAQCB2b2lkIGRlbGV0ZUlkZW50aWZpZXJUYWJsZShJZGVudGlmaWVy
VGFiCiB9CiAKIHN0cnVjdCBJZGVudGlmaWVyQ1N0cmluZ1RyYW5zbGF0b3IgewotICAgIHN0YXRp
YyB1bnNpZ25lZCBoYXNoKGNvbnN0IGNoYXIqIGMpCisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2go
Y29uc3QgTENoYXIqIGMpCiAgICAgewotICAgICAgICByZXR1cm4gU3RyaW5nSGFzaGVyOjpjb21w
dXRlSGFzaDxjaGFyPihjKTsKKyAgICAgICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6Y29tcHV0ZUhh
c2g8TENoYXI+KGMpOwogICAgIH0KIAotICAgIHN0YXRpYyBib29sIGVxdWFsKFN0cmluZ0ltcGwq
IHIsIGNvbnN0IGNoYXIqIHMpCisgICAgc3RhdGljIGJvb2wgZXF1YWwoU3RyaW5nSW1wbCogciwg
Y29uc3QgTENoYXIqIHMpCiAgICAgewogICAgICAgICByZXR1cm4gSWRlbnRpZmllcjo6ZXF1YWwo
ciwgcyk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdHJhbnNsYXRlKFN0cmluZ0ltcGwqJiBs
b2NhdGlvbiwgY29uc3QgY2hhciogYywgdW5zaWduZWQgaGFzaCkKKyAgICBzdGF0aWMgdm9pZCB0
cmFuc2xhdGUoU3RyaW5nSW1wbComIGxvY2F0aW9uLCBjb25zdCBMQ2hhciogYywgdW5zaWduZWQg
aGFzaCkKICAgICB7Ci0gICAgICAgIHNpemVfdCBsZW5ndGggPSBzdHJsZW4oYyk7CisgICAgICAg
IHNpemVfdCBsZW5ndGggPSBzdHJsZW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oYykp
OwogICAgICAgICBVQ2hhciogZDsKICAgICAgICAgU3RyaW5nSW1wbCogciA9IFN0cmluZ0ltcGw6
OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBkKS5sZWFrUmVmKCk7CiAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpICE9IGxlbmd0aDsgaSsrKQotICAgICAgICAgICAgZFtpXSA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGNoYXI+KGNbaV0pOyAvLyB1c2UgdW5zaWduZWQgY2hhciB0byB6ZXJv
LWV4dGVuZCBpbnN0ZWFkIG9mIHNpZ24tZXh0ZW5kCisgICAgICAgICAgICBkW2ldID0gY1tpXTsK
ICAgICAgICAgci0+c2V0SGFzaChoYXNoKTsKICAgICAgICAgbG9jYXRpb24gPSByOwogICAgIH0K
QEAgLTk3LDcgKzk3LDcgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBJZGVudGlmaWVyOjphZGQo
SgogICAgIGlmICghY1swXSkKICAgICAgICAgcmV0dXJuIFN0cmluZ0ltcGw6OmVtcHR5KCk7CiAg
ICAgaWYgKCFjWzFdKQotICAgICAgICByZXR1cm4gYWRkKGdsb2JhbERhdGEsIGdsb2JhbERhdGEt
PnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdSZXAoc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcj4oY1swXSkpKTsKKyAgICAgICAgcmV0dXJuIGFkZChnbG9iYWxEYXRhLCBnbG9iYWxE
YXRhLT5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5nUmVwKGNbMF0pKTsKIAogICAg
IElkZW50aWZpZXJUYWJsZSYgaWRlbnRpZmllclRhYmxlID0gKmdsb2JhbERhdGEtPmlkZW50aWZp
ZXJUYWJsZTsKICAgICBMaXRlcmFsSWRlbnRpZmllclRhYmxlJiBsaXRlcmFsSWRlbnRpZmllclRh
YmxlID0gaWRlbnRpZmllclRhYmxlLmxpdGVyYWxUYWJsZSgpOwpAQCAtMTA2LDcgKzEwNiw3IEBA
IFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gSWRlbnRpZmllcjo6YWRkKEoKICAgICBpZiAoaXRlciAh
PSBsaXRlcmFsSWRlbnRpZmllclRhYmxlLmVuZCgpKQogICAgICAgICByZXR1cm4gaXRlci0+c2Vj
b25kOwogCi0gICAgcGFpcjxIYXNoU2V0PFN0cmluZ0ltcGwqPjo6aXRlcmF0b3IsIGJvb2w+IGFk
ZFJlc3VsdCA9IGlkZW50aWZpZXJUYWJsZS5hZGQ8Y29uc3QgY2hhciosIElkZW50aWZpZXJDU3Ry
aW5nVHJhbnNsYXRvcj4oYyk7CisgICAgcGFpcjxIYXNoU2V0PFN0cmluZ0ltcGwqPjo6aXRlcmF0
b3IsIGJvb2w+IGFkZFJlc3VsdCA9IGlkZW50aWZpZXJUYWJsZS5hZGQ8Y29uc3QgTENoYXIqLCBJ
ZGVudGlmaWVyQ1N0cmluZ1RyYW5zbGF0b3I+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIq
PihjKSk7CiAKICAgICAvLyBJZiB0aGUgc3RyaW5nIGlzIG5ld2x5LXRyYW5zbGF0ZWQsIHRoZW4g
d2UgbmVlZCB0byBhZG9wdCBpdC4KICAgICAvLyBUaGUgYm9vbGVhbiBpbiB0aGUgcGFpciB0ZWxs
cyB1cyBpZiB0aGF0IGlzIHNvLgpAQCAtMTU0LDEyICsxNTQsMTMgQEAgdWludDMyX3QgSWRlbnRp
Zmllcjo6dG9VSW50MzIoY29uc3QgVVN0cgogICAgIG9rID0gZmFsc2U7CiAKICAgICB1bnNpZ25l
ZCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7Ci0gICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMg
PSBzdHJpbmcuY2hhcmFjdGVycygpOwogCiAgICAgLy8gQW4gZW1wdHkgc3RyaW5nIGlzIG5vdCBh
IG51bWJlci4KICAgICBpZiAoIWxlbmd0aCkKICAgICAgICAgcmV0dXJuIDA7CiAKKyAgICBjb25z
dCBVQ2hhciogY2hhcmFjdGVycyA9IHN0cmluZy5jaGFyYWN0ZXJzMTYoKTsKKwogICAgIC8vIEdl
dCB0aGUgZmlyc3QgY2hhcmFjdGVyLCB0dXJuaW5nIGl0IGludG8gYSBkaWdpdC4KICAgICB1aW50
MzJfdCB2YWx1ZSA9IGNoYXJhY3RlcnNbMF0gLSAnMCc7CiAgICAgaWYgKHZhbHVlID4gOSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmgJKHJldmlzaW9u
IDk4NDk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5oCSh3
b3JraW5nIGNvcHkpCkBAIC03MCwxMCArNzAsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IElkZW50aWZp
ZXImKTsKICAgICAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3IhPShjb25zdCBJZGVudGlmaWVyJiwg
Y29uc3QgSWRlbnRpZmllciYpOwogCisgICAgICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29u
c3QgSWRlbnRpZmllciYsIGNvbnN0IExDaGFyKik7CiAgICAgICAgIGZyaWVuZCBib29sIG9wZXJh
dG9yPT0oY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IGNoYXIqKTsKKyAgICAgICAgZnJpZW5kIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgTENoYXIqKTsKICAgICAgICAg
ZnJpZW5kIGJvb2wgb3BlcmF0b3IhPShjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgY2hhciopOwog
ICAgIAotICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBTdHJpbmdJbXBsKiwgY29uc3Qg
Y2hhciopOworICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBTdHJpbmdJbXBsKiwgY29u
c3QgTENoYXIqKTsKKyAgICAgICAgc3RhdGljIGlubGluZSBib29sIGVxdWFsKGNvbnN0IFN0cmlu
Z0ltcGwqYSwgY29uc3QgY2hhcipiKSB7IHJldHVybiBJZGVudGlmaWVyOjplcXVhbChhLCByZWlu
dGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oYikpOyB9OwogICAgICAgICBzdGF0aWMgYm9vbCBl
cXVhbChjb25zdCBTdHJpbmdJbXBsKiwgY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgpOwog
ICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBTdHJpbmdJbXBsKiBhLCBjb25zdCBTdHJp
bmdJbXBsKiBiKSB7IHJldHVybiA6OmVxdWFsKGEsIGIpOyB9CiAKQEAgLTg0LDcgKzg3LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFVTdHJpbmcgbV9zdHJpbmc7CiAgICAgICAgIAogICAg
ICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBJZGVudGlmaWVyJiBhLCBjb25zdCBJZGVudGlm
aWVyJiBiKSB7IHJldHVybiBhLm1fc3RyaW5nLmltcGwoKSA9PSBiLm1fc3RyaW5nLmltcGwoKTsg
fQotICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBJZGVudGlmaWVyJiBhLCBjb25zdCBj
aGFyKiBiKSB7IHJldHVybiBlcXVhbChhLm1fc3RyaW5nLmltcGwoKSwgYik7IH0KKyAgICAgICAg
c3RhdGljIGJvb2wgZXF1YWwoY29uc3QgSWRlbnRpZmllciYgYSwgY29uc3QgTENoYXIqIGIpIHsg
cmV0dXJuIGVxdWFsKGEubV9zdHJpbmcuaW1wbCgpLCBiKTsgfQogCiAgICAgICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFN0cmluZ0ltcGw+IGFkZChFeGVjU3RhdGUqLCBjb25zdCBVQ2hhciosIGludCBs
ZW5ndGgpOwogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBhZGQoSlNHbG9i
YWxEYXRhKiwgY29uc3QgVUNoYXIqLCBpbnQgbGVuZ3RoKTsKQEAgLTEyNSwxNyArMTI4LDI3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4gIUlkZW50aWZpZXI6OmVxdWFsKGEsIGIp
OwogICAgIH0KIAotICAgIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgSWRlbnRpZmllciYg
YSwgY29uc3QgY2hhciogYikKKyAgICBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IElkZW50
aWZpZXImIGEsIGNvbnN0IExDaGFyKiBiKQogICAgIHsKICAgICAgICAgcmV0dXJuIElkZW50aWZp
ZXI6OmVxdWFsKGEsIGIpOwogICAgIH0KIAotICAgIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29u
c3QgSWRlbnRpZmllciYgYSwgY29uc3QgY2hhciogYikKKyAgICBpbmxpbmUgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IElkZW50aWZpZXImIGEsIGNvbnN0IGNoYXIqIGIpCisgICAgeworICAgICAgICBy
ZXR1cm4gSWRlbnRpZmllcjo6ZXF1YWwoYSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+
KGIpKTsKKyAgICB9CisgICAgCisgICAgaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBJZGVu
dGlmaWVyJiBhLCBjb25zdCBMQ2hhciogYikKICAgICB7CiAgICAgICAgIHJldHVybiAhSWRlbnRp
Zmllcjo6ZXF1YWwoYSwgYik7CiAgICAgfQogCi0gICAgaW5saW5lIGJvb2wgSWRlbnRpZmllcjo6
ZXF1YWwoY29uc3QgU3RyaW5nSW1wbCogciwgY29uc3QgY2hhciogcykKKyAgICBpbmxpbmUgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IElkZW50aWZpZXImIGEsIGNvbnN0IGNoYXIqIGIpCisgICAgewor
ICAgICAgICByZXR1cm4gIUlkZW50aWZpZXI6OmVxdWFsKGEsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgTENoYXIqPihiKSk7CisgICAgfQorICAgIAorICAgIGlubGluZSBib29sIElkZW50aWZpZXI6
OmVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqIHIsIGNvbnN0IExDaGFyKiBzKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIFdURjo6ZXF1YWwociwgcyk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcAkocmV2aXNpb24gOTg0OTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5
LDcgKzc5LDcgQEAgdm9pZCBKU1N0cmluZzo6cmVzb2x2ZVJvcGUoRXhlY1N0YXRlKiBleAogICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc19tYXhJbnRlcm5hbFJvcGVMZW5ndGggJiYgbV9maWJl
cnNbaV07ICsraSkgewogICAgICAgICBTdHJpbmdJbXBsKiBzdHJpbmcgPSBtX2ZpYmVyc1tpXS0+
bV92YWx1ZS5pbXBsKCk7CiAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmluZy0+bGVuZ3Ro
KCk7Ci0gICAgICAgIFN0cmluZ0ltcGw6OmNvcHlDaGFycyhwb3NpdGlvbiwgc3RyaW5nLT5jaGFy
YWN0ZXJzKCksIGxlbmd0aCk7CisgICAgICAgIFN0cmluZ0ltcGw6OmNvcHlDaGFycyhwb3NpdGlv
biwgc3RyaW5nLT5jaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoKTsKICAgICAgICAgcG9zaXRpb24gKz0g
bGVuZ3RoOwogICAgICAgICBtX2ZpYmVyc1tpXS5jbGVhcigpOwogICAgIH0KQEAgLTEyMCw3ICsx
MjAsNyBAQCB2b2lkIEpTU3RyaW5nOjpyZXNvbHZlUm9wZVNsb3dDYXNlKEV4ZWNTCiAgICAgICAg
IFN0cmluZ0ltcGwqIHN0cmluZyA9IHN0YXRpY19jYXN0PFN0cmluZ0ltcGwqPihjdXJyZW50Rmli
ZXItPm1fdmFsdWUuaW1wbCgpKTsKICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RyaW5nLT5s
ZW5ndGgoKTsKICAgICAgICAgcG9zaXRpb24gLT0gbGVuZ3RoOwotICAgICAgICBTdHJpbmdJbXBs
Ojpjb3B5Q2hhcnMocG9zaXRpb24sIHN0cmluZy0+Y2hhcmFjdGVycygpLCBsZW5ndGgpOworICAg
ICAgICBTdHJpbmdJbXBsOjpjb3B5Q2hhcnMocG9zaXRpb24sIHN0cmluZy0+Y2hhcmFjdGVyczE2
KCksIGxlbmd0aCk7CiAgICAgfQogCiAgICAgQVNTRVJUKGJ1ZmZlciA9PSBwb3NpdGlvbik7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5jcHAJKHJldmlzaW9uIDk4
NDk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzY2LDkgKzM2Niw5IEBAIGludCBSZWdFeHA6Om1hdGNoKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGEKICNpZiBFTkFCTEUoWUFSUl9KSVQpCiAgICAgICAgIGlmIChtX3N0YXRlID09
IEpJVENvZGUpIHsKICAgICAgICAgICAgIGlmIChzLmlzOEJpdCgpKQotICAgICAgICAgICAgICAg
IHJlc3VsdCA9IFlhcnI6OmV4ZWN1dGUobV9yZXByZXNlbnRhdGlvbi0+bV9yZWdFeHBKSVRDb2Rl
LCBzLmxhdGluMSgpLmRhdGEoKSwgc3RhcnRPZmZzZXQsIHMubGVuZ3RoKCksIG9mZnNldFZlY3Rv
cik7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gWWFycjo6ZXhlY3V0ZShtX3JlcHJlc2VudGF0
aW9uLT5tX3JlZ0V4cEpJVENvZGUsIHMuY2hhcmFjdGVyczgoKSwgc3RhcnRPZmZzZXQsIHMubGVu
Z3RoKCksIG9mZnNldFZlY3Rvcik7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
cmVzdWx0ID0gWWFycjo6ZXhlY3V0ZShtX3JlcHJlc2VudGF0aW9uLT5tX3JlZ0V4cEpJVENvZGUs
IHMuY2hhcmFjdGVycygpLCBzdGFydE9mZnNldCwgcy5sZW5ndGgoKSwgb2Zmc2V0VmVjdG9yKTsK
KyAgICAgICAgICAgICAgICByZXN1bHQgPSBZYXJyOjpleGVjdXRlKG1fcmVwcmVzZW50YXRpb24t
Pm1fcmVnRXhwSklUQ29kZSwgcy5jaGFyYWN0ZXJzMTYoKSwgc3RhcnRPZmZzZXQsIHMubGVuZ3Ro
KCksIG9mZnNldFZlY3Rvcik7CiAjaWYgRU5BQkxFKFlBUlJfSklUX0RFQlVHKQogICAgICAgICAg
ICAgbWF0Y2hDb21wYXJlV2l0aEludGVycHJldGVyKHMsIHN0YXJ0T2Zmc2V0LCBvZmZzZXRWZWN0
b3IsIHJlc3VsdCk7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cmluZ1Byb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAkocmV2aXNpb24gOTg0OTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMzUsMTMgKzMzNSwxMyBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGpzU3Bs
aWNlU3ViCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtYXhDb3VudDsgaSsrKSB7CiAgICAgICAg
IGlmIChpIDwgcmFuZ2VDb3VudCkgewogICAgICAgICAgICAgaWYgKGludCBzcmNMZW4gPSBzdWJz
dHJpbmdSYW5nZXNbaV0ubGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nSW1wbDo6Y29w
eUNoYXJzKGJ1ZmZlciArIGJ1ZmZlclBvcywgc291cmNlLmNoYXJhY3RlcnMoKSArIHN1YnN0cmlu
Z1Jhbmdlc1tpXS5wb3NpdGlvbiwgc3JjTGVuKTsKKyAgICAgICAgICAgICAgICBTdHJpbmdJbXBs
Ojpjb3B5Q2hhcnMoYnVmZmVyICsgYnVmZmVyUG9zLCBzb3VyY2UuY2hhcmFjdGVyczE2KCkgKyBz
dWJzdHJpbmdSYW5nZXNbaV0ucG9zaXRpb24sIHNyY0xlbik7CiAgICAgICAgICAgICAgICAgYnVm
ZmVyUG9zICs9IHNyY0xlbjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBpZiAo
aSA8IHNlcGFyYXRvckNvdW50KSB7CiAgICAgICAgICAgICBpZiAoaW50IHNlcExlbiA9IHNlcGFy
YXRvcnNbaV0ubGVuZ3RoKCkpIHsKLSAgICAgICAgICAgICAgICBTdHJpbmdJbXBsOjpjb3B5Q2hh
cnMoYnVmZmVyICsgYnVmZmVyUG9zLCBzZXBhcmF0b3JzW2ldLmNoYXJhY3RlcnMoKSwgc2VwTGVu
KTsKKyAgICAgICAgICAgICAgICBTdHJpbmdJbXBsOjpjb3B5Q2hhcnMoYnVmZmVyICsgYnVmZmVy
UG9zLCBzZXBhcmF0b3JzW2ldLmNoYXJhY3RlcnMxNigpLCBzZXBMZW4pOwogICAgICAgICAgICAg
ICAgIGJ1ZmZlclBvcyArPSBzZXBMZW47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VTdHJpbmcuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VTdHJpbmcuY3BwCShyZXZpc2lvbiA5ODQ5
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VTdHJpbmcuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03MywxNyArNzMsMjcgQEAgVVN0cmluZzo6VVN0cmluZyhjb25zdCBVQ2hhciog
Y2hhcmFjdGVycwogfQogCiAvLyBDb25zdHJ1Y3QgYSBzdHJpbmcgd2l0aCBsYXRpbjEgZGF0YS4K
LVVTdHJpbmc6OlVTdHJpbmcoY29uc3QgY2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3Ro
KQorVVN0cmluZzo6VVN0cmluZyhjb25zdCBMQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVu
Z3RoKQogICAgIDogbV9pbXBsKGNoYXJhY3RlcnMgPyBTdHJpbmdJbXBsOjpjcmVhdGUoY2hhcmFj
dGVycywgbGVuZ3RoKSA6IDApCiB7CiB9CiAKK1VTdHJpbmc6OlVTdHJpbmcoY29uc3QgY2hhciog
Y2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQorICAgIDogbV9pbXBsKGNoYXJhY3RlcnMgPyBT
dHJpbmdJbXBsOjpjcmVhdGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KGNoYXJhY3Rl
cnMpLCBsZW5ndGgpIDogMCkKK3sKK30KKwogLy8gQ29uc3RydWN0IGEgc3RyaW5nIHdpdGggbGF0
aW4xIGRhdGEsIGZyb20gYSBudWxsLXRlcm1pbmF0ZWQgc291cmNlLgotVVN0cmluZzo6VVN0cmlu
Zyhjb25zdCBjaGFyKiBjaGFyYWN0ZXJzKQorVVN0cmluZzo6VVN0cmluZyhjb25zdCBMQ2hhciog
Y2hhcmFjdGVycykKICAgICA6IG1faW1wbChjaGFyYWN0ZXJzID8gU3RyaW5nSW1wbDo6Y3JlYXRl
KGNoYXJhY3RlcnMpIDogMCkKIHsKIH0KIAorVVN0cmluZzo6VVN0cmluZyhjb25zdCBjaGFyKiBj
aGFyYWN0ZXJzKQorICAgIDogbV9pbXBsKGNoYXJhY3RlcnMgPyBTdHJpbmdJbXBsOjpjcmVhdGUo
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KGNoYXJhY3RlcnMpKSA6IDApCit7Cit9CisK
IFVTdHJpbmcgVVN0cmluZzo6bnVtYmVyKGludCBpKQogewogICAgIFVDaGFyIGJ1ZlsxICsgc2l6
ZW9mKGkpICogM107CkBAIC0yMjksNiArMjM5LDg4IEBAIGJvb2wgb3BlcmF0b3I9PShjb25zdCBV
U3RyaW5nJiBzMSwgY29uc3QKICAgICByZXR1cm4gdSA9PSB1ZW5kICYmICpzMiA9PSAwOwogfQog
Citib29sIGVxdWFsU2xvd0Nhc2UoY29uc3QgVVN0cmluZyYgczEsIGNvbnN0IFVTdHJpbmcmIHMy
KQoreworICAgIFN0cmluZ0ltcGwqIHJlcDEgPSBzMS5pbXBsKCk7CisgICAgU3RyaW5nSW1wbCog
cmVwMiA9IHMyLmltcGwoKTsKKyAgICB1bnNpZ25lZCBzaXplMSA9IDA7CisgICAgdW5zaWduZWQg
c2l6ZTIgPSAwOworICAgIAorICAgIGlmIChyZXAxID09IHJlcDIpIC8vIElmIHRoZXkncmUgdGhl
IHNhbWUgcmVwLCB0aGV5J3JlIGVxdWFsLgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAg
ICBpZiAocmVwMSkKKyAgICAgICAgc2l6ZTEgPSByZXAxLT5sZW5ndGgoKTsKKyAgICAKKyAgICBp
ZiAocmVwMikKKyAgICAgICAgc2l6ZTIgPSByZXAyLT5sZW5ndGgoKTsKKyAgICAKKyAgICBpZiAo
c2l6ZTEgIT0gc2l6ZTIpIC8vIElmIHRoZSBsZW5ndGhzIGFyZSBub3QgdGhlIHNhbWUsIHdlJ3Jl
IGRvbmUuCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAoIXNpemUxKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICAvLyBBdCB0aGlzIHBvaW50IHdlIGtub3cgCisg
ICAgLy8gICAoYSkgdGhhdCB0aGUgc3RyaW5ncyBhcmUgdGhlIHNhbWUgbGVuZ3RoIGFuZAorICAg
IC8vICAgKGIpIHRoYXQgdGhleSBhcmUgZ3JlYXRlciB0aGFuIHplcm8gbGVuZ3RoLgorICAgIGlm
IChyZXAxLT5pczhCaXQoKSkgeworICAgICAgICBjb25zdCBMQ2hhciogZDEgPSByZXAxLT5jaGFy
YWN0ZXJzOCgpOworICAgICAgICBpZiAocmVwMi0+aXM4Qml0KCkpIHsKKyAgICAgICAgICAgIGNv
bnN0IExDaGFyKiBkMiA9IHJlcDItPmNoYXJhY3RlcnM4KCk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGlmIChkMSA9PSBkMikgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSBkYXRhIHBvaW50ZXJz
IGFyZSB0aGUgc2FtZS4KKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgLy8gRG8gcXVpY2sgY2hlY2tzIGZvciBzaXplcyAxIGFuZCAyLgorICAg
ICAgICAgICAgc3dpdGNoIChzaXplMSkgeworICAgICAgICAgICAgICAgIGNhc2UgMToKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGQxWzBdID09IGQyWzBdOworICAgICAgICAgICAgICAgIGNh
c2UgMjoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChkMVswXSA9PSBkMlswXSkgJiAoZDFb
MV0gPT0gZDJbMV0pOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiAoIW1lbWNtcChkMSwgZDIsIHNpemUxICogc2l6ZW9mKExDaGFyKSkpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBjb25zdCBVQ2hhciogZDIg
PSByZXAyLT5jaGFyYWN0ZXJzMTYoKTsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBzaXplMTsgaSsrKSB7CisgICAgICAgICAgICBpZiAoZDFbaV0gIT0gZDJbaV0p
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyAgICAKKyAgICBpZiAocmVwMi0+aXM4Qml0KCkpIHsKKyAgICAgICAg
Y29uc3QgVUNoYXIqIGQxID0gcmVwMS0+Y2hhcmFjdGVyczE2KCk7CisgICAgICAgIGNvbnN0IExD
aGFyKiBkMiA9IHJlcDItPmNoYXJhY3RlcnM4KCk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTE7IGkrKykgeworICAgICAgICAgICAgaWYgKGQxW2ldICE9
IGQyW2ldKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgCisgICAgfQorICAgIAorICAgIGNvbnN0IFVDaGFyKiBk
MSA9IHJlcDEtPmNoYXJhY3RlcnMxNigpOworICAgIGNvbnN0IFVDaGFyKiBkMiA9IHJlcDItPmNo
YXJhY3RlcnMxNigpOworICAgIAorICAgIGlmIChkMSA9PSBkMikgLy8gQ2hlY2sgdG8gc2VlIGlm
IHRoZSBkYXRhIHBvaW50ZXJzIGFyZSB0aGUgc2FtZS4KKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgCisgICAgLy8gRG8gcXVpY2sgY2hlY2tzIGZvciBzaXplcyAxIGFuZCAyLgorICAgIHN3aXRj
aCAoc2l6ZTEpIHsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgcmV0dXJuIGQxWzBdID09
IGQyWzBdOworICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICByZXR1cm4gKGQxWzBdID09IGQy
WzBdKSAmIChkMVsxXSA9PSBkMlsxXSk7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBy
ZXR1cm4gbWVtY21wKGQxLCBkMiwgc2l6ZTEgKiBzaXplb2YoVUNoYXIpKSA9PSAwOworICAgIH0K
K30KKwogYm9vbCBvcGVyYXRvcjwoY29uc3QgVVN0cmluZyYgczEsIGNvbnN0IFVTdHJpbmcmIHMy
KQogewogICAgIGNvbnN0IHVuc2lnbmVkIGwxID0gczEubGVuZ3RoKCk7CkBAIC0zMTcsNyArNDA5
LDkgQEAgc3RhdGljIGlubGluZSB2b2lkIHB1dFVURjhUcmlwbGUoY2hhciomIAogQ1N0cmluZyBV
U3RyaW5nOjp1dGY4KGJvb2wgc3RyaWN0KSBjb25zdAogewogICAgIHVuc2lnbmVkIGxlbmd0aCA9
IHRoaXMtPmxlbmd0aCgpOwotICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0gdGhpcy0+Y2hh
cmFjdGVycygpOworCisgICAgaWYgKGlzOEJpdCgpKQorICAgICAgICByZXR1cm4gQ1N0cmluZyhy
ZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihjaGFyYWN0ZXJzOCgpKSwgbGVuZ3RoKTsKIAog
ICAgIC8vIEFsbG9jYXRlIGEgYnVmZmVyIGJpZyBlbm91Z2ggdG8gaG9sZCBhbGwgdGhlIGNoYXJh
Y3RlcnMKICAgICAvLyAoYW4gaW5kaXZpZHVhbCBVVEYtMTYgVUNoYXIgY2FuIG9ubHkgZXhwYW5k
IHRvIDMgVVRGLTggYnl0ZXMpLgpAQCAtMzMxLDYgKzQyNSw4IEBAIENTdHJpbmcgVVN0cmluZzo6
dXRmOChib29sIHN0cmljdCkgY29uc3QKICAgICAvLyAgICBidWZmZXIgd2l0aG91dCByZWFsbG9j
aW5nIChzYXksIDEuNSB4IGxlbmd0aCkuCiAgICAgaWYgKGxlbmd0aCA+IG51bWVyaWNfbGltaXRz
PHVuc2lnbmVkPjo6bWF4KCkgLyAzKQogICAgICAgICByZXR1cm4gQ1N0cmluZygpOworCisgICAg
Y29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSB0aGlzLT5jaGFyYWN0ZXJzMTYoKTsKICAgICBWZWN0
b3I8Y2hhciwgMTAyND4gYnVmZmVyVmVjdG9yKGxlbmd0aCAqIDMpOwogCiAgICAgY2hhciogYnVm
ZmVyID0gYnVmZmVyVmVjdG9yLmRhdGEoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1VTdHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9VU3RyaW5nLmgJKHJldmlzaW9uIDk4NDk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVVN0cmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw5ICszOSwxMSBAQCBwdWJs
aWM6CiAgICAgVVN0cmluZyhjb25zdCBVQ2hhciopOwogCiAgICAgLy8gQ29uc3RydWN0IGEgc3Ry
aW5nIHdpdGggbGF0aW4xIGRhdGEuCisgICAgVVN0cmluZyhjb25zdCBMQ2hhciogY2hhcmFjdGVy
cywgdW5zaWduZWQgbGVuZ3RoKTsKICAgICBVU3RyaW5nKGNvbnN0IGNoYXIqIGNoYXJhY3RlcnMs
IHVuc2lnbmVkIGxlbmd0aCk7CiAKICAgICAvLyBDb25zdHJ1Y3QgYSBzdHJpbmcgd2l0aCBsYXRp
bjEgZGF0YSwgZnJvbSBhIG51bGwtdGVybWluYXRlZCBzb3VyY2UuCisgICAgVVN0cmluZyhjb25z
dCBMQ2hhciogY2hhcmFjdGVycyk7CiAgICAgVVN0cmluZyhjb25zdCBjaGFyKiBjaGFyYWN0ZXJz
KTsKIAogICAgIC8vIENvbnN0cnVjdCBhIHN0cmluZyByZWZlcmVuY2luZyBhbiBleGlzdGluZyBT
dHJpbmdJbXBsLgpAQCAtNzMsMTAgKzc1LDI2IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlm
ICghbV9pbXBsKQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiBtX2ltcGwt
PmNoYXJhY3RlcnMoKTsKKyAgICAgICAgcmV0dXJuIG1faW1wbC0+Y2hhcmFjdGVyczE2KCk7CiAg
ICAgfQogCi0gICAgYm9vbCBpczhCaXQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIGNv
bnN0IExDaGFyKiBjaGFyYWN0ZXJzOCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIW1faW1w
bCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBBU1NFUlQobV9pbXBsLT5pczhCaXQo
KSk7CisgICAgICAgIHJldHVybiBtX2ltcGwtPmNoYXJhY3RlcnM4KCk7CisgICAgfQorCisgICAg
Y29uc3QgVUNoYXIqIGNoYXJhY3RlcnMxNigpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIW1f
aW1wbCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBBU1NFUlQoIW1faW1wbC0+aXM4
Qml0KCkpOworICAgICAgICByZXR1cm4gbV9pbXBsLT5jaGFyYWN0ZXJzMTYoKTsKKyAgICB9CisK
KyAgICBib29sIGlzOEJpdCgpIGNvbnN0IHsgcmV0dXJuIG1faW1wbC0+aXM4Qml0KCk7IH0KIAog
ICAgIENTdHJpbmcgYXNjaWkoKSBjb25zdDsKICAgICBDU3RyaW5nIGxhdGluMSgpIGNvbnN0OwpA
QCAtODYsNyArMTA0LDkgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKCFtX2ltcGwgfHwg
aW5kZXggPj0gbV9pbXBsLT5sZW5ndGgoKSkKICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAg
ICByZXR1cm4gbV9pbXBsLT5jaGFyYWN0ZXJzKClbaW5kZXhdOworICAgICAgICBpZiAoaXM4Qml0
KCkpCisgICAgICAgICAgICByZXR1cm4gbV9pbXBsLT5jaGFyYWN0ZXJzOCgpW2luZGV4XTsKKyAg
ICAgICAgcmV0dXJuIG1faW1wbC0+Y2hhcmFjdGVyczE2KClbaW5kZXhdOwogICAgIH0KIAogICAg
IHN0YXRpYyBVU3RyaW5nIG51bWJlcihpbnQpOwpAQCAtMTAwLDcgKzEyMCw3IEBAIHB1YmxpYzoK
ICAgICAgICAgeyByZXR1cm4gbV9pbXBsID8gbV9pbXBsLT5maW5kKGMsIHN0YXJ0KSA6IG5vdEZv
dW5kOyB9CiAgICAgc2l6ZV90IGZpbmQoY29uc3QgVVN0cmluZyYgc3RyLCB1bnNpZ25lZCBzdGFy
dCA9IDApIGNvbnN0CiAgICAgICAgIHsgcmV0dXJuIG1faW1wbCA/IG1faW1wbC0+ZmluZChzdHIu
aW1wbCgpLCBzdGFydCkgOiBub3RGb3VuZDsgfQotICAgIHNpemVfdCBmaW5kKGNvbnN0IGNoYXIq
IHN0ciwgdW5zaWduZWQgc3RhcnQgPSAwKSBjb25zdAorICAgIHNpemVfdCBmaW5kKGNvbnN0IExD
aGFyKiBzdHIsIHVuc2lnbmVkIHN0YXJ0ID0gMCkgY29uc3QKICAgICAgICAgeyByZXR1cm4gbV9p
bXBsID8gbV9pbXBsLT5maW5kKHN0ciwgc3RhcnQpIDogbm90Rm91bmQ7IH0KIAogICAgIC8vIEZp
bmQgdGhlIGxhc3QgaW5zdGFuY2Ugb2YgYSBzaW5nbGUgY2hhcmFjdGVyIG9yIHN0cmluZy4KQEAg
LTExNSw0NiArMTM1LDc2IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IG1faW1w
bDsKIH07CiAKK05FVkVSX0lOTElORSBib29sIGVxdWFsU2xvd0Nhc2UoY29uc3QgVVN0cmluZyYg
czEsIGNvbnN0IFVTdHJpbmcmIHMyKTsKKwogQUxXQVlTX0lOTElORSBib29sIG9wZXJhdG9yPT0o
Y29uc3QgVVN0cmluZyYgczEsIGNvbnN0IFVTdHJpbmcmIHMyKQogewogICAgIFN0cmluZ0ltcGwq
IHJlcDEgPSBzMS5pbXBsKCk7CiAgICAgU3RyaW5nSW1wbCogcmVwMiA9IHMyLmltcGwoKTsKLSAg
ICB1bnNpZ25lZCBzaXplMSA9IDA7Ci0gICAgdW5zaWduZWQgc2l6ZTIgPSAwOwogCiAgICAgaWYg
KHJlcDEgPT0gcmVwMikgLy8gSWYgdGhleSdyZSB0aGUgc2FtZSByZXAsIHRoZXkncmUgZXF1YWwu
CiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIAorCisgICAgdW5zaWduZWQgc2l6ZTEgPSAwOwor
ICAgIHVuc2lnbmVkIHNpemUyID0gMDsKKwogICAgIGlmIChyZXAxKQogICAgICAgICBzaXplMSA9
IHJlcDEtPmxlbmd0aCgpOwotICAgICAgICAKKwogICAgIGlmIChyZXAyKQogICAgICAgICBzaXpl
MiA9IHJlcDItPmxlbmd0aCgpOwotICAgICAgICAKKwogICAgIGlmIChzaXplMSAhPSBzaXplMikg
Ly8gSWYgdGhlIGxlbmd0aHMgYXJlIG5vdCB0aGUgc2FtZSwgd2UncmUgZG9uZS4KICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIAorCiAgICAgaWYgKCFzaXplMSkKICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgCisKICAgICAvLyBBdCB0aGlzIHBvaW50IHdlIGtub3cgCiAgICAgLy8gICAoYSkg
dGhhdCB0aGUgc3RyaW5ncyBhcmUgdGhlIHNhbWUgbGVuZ3RoIGFuZAogICAgIC8vICAgKGIpIHRo
YXQgdGhleSBhcmUgZ3JlYXRlciB0aGFuIHplcm8gbGVuZ3RoLgotICAgIGNvbnN0IFVDaGFyKiBk
MSA9IHJlcDEtPmNoYXJhY3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciogZDIgPSByZXAyLT5jaGFy
YWN0ZXJzKCk7Ci0gICAgCi0gICAgaWYgKGQxID09IGQyKSAvLyBDaGVjayB0byBzZWUgaWYgdGhl
IGRhdGEgcG9pbnRlcnMgYXJlIHRoZSBzYW1lLgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAK
LSAgICAvLyBEbyBxdWljayBjaGVja3MgZm9yIHNpemVzIDEgYW5kIDIuCi0gICAgc3dpdGNoIChz
aXplMSkgewotICAgIGNhc2UgMToKLSAgICAgICAgcmV0dXJuIGQxWzBdID09IGQyWzBdOwotICAg
IGNhc2UgMjoKLSAgICAgICAgcmV0dXJuIChkMVswXSA9PSBkMlswXSkgJiAoZDFbMV0gPT0gZDJb
MV0pOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBtZW1jbXAoZDEsIGQyLCBzaXplMSAq
IHNpemVvZihVQ2hhcikpID09IDA7CisgICAgYm9vbCBzMUlzOEJpdCA9IHJlcDEtPmlzOEJpdCgp
OworICAgIGJvb2wgczJJczhCaXQgPSByZXAyLT5pczhCaXQoKTsKKworICAgIGlmIChzMUlzOEJp
dCA9PSBzMklzOEJpdCkgeworICAgICAgICBpZiAoczFJczhCaXQpIHsKKyAgICAgICAgICAgIC8v
IEJvdGggc3RyaW5ncyBhcmUgOCBiaXQuCisgICAgICAgICAgICBjb25zdCBMQ2hhciogZDEgPSBy
ZXAxLT5jaGFyYWN0ZXJzOCgpOworICAgICAgICAgICAgY29uc3QgTENoYXIqIGQyID0gcmVwMi0+
Y2hhcmFjdGVyczgoKTsKKworICAgICAgICAgICAgaWYgKGQxID09IGQyKSAvLyBDaGVjayB0byBz
ZWUgaWYgdGhlIGRhdGEgcG9pbnRlcnMgYXJlIHRoZSBzYW1lLgorICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworCisgICAgICAgICAgICAvLyBEbyBxdWljayBjaGVja3MgZm9yIHNpemVzIDEg
YW5kIDIuCisgICAgICAgICAgICBzd2l0Y2ggKHNpemUxKSB7CisgICAgICAgICAgICAgICAgY2Fz
ZSAxOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZDFbMF0gPT0gZDJbMF07CisgICAgICAg
ICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGQxWzBdID09IGQy
WzBdKSAmIChkMVsxXSA9PSBkMlsxXSk7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuICghbWVtY21wKGQxLCBkMiwgc2l6ZTEgKiBzaXplb2YoTENo
YXIpKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBCb3RoIHN0cmlu
Z3MgYXJlIDE2IGJpdC4KKyAgICAgICAgY29uc3QgVUNoYXIqIGQxID0gcmVwMS0+Y2hhcmFjdGVy
czE2KCk7CisgICAgICAgIGNvbnN0IFVDaGFyKiBkMiA9IHJlcDItPmNoYXJhY3RlcnMxNigpOwor
CisgICAgICAgIGlmIChkMSA9PSBkMikgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSBkYXRhIHBvaW50
ZXJzIGFyZSB0aGUgc2FtZS4KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIC8v
IERvIHF1aWNrIGNoZWNrcyBmb3Igc2l6ZXMgMSBhbmQgMi4KKyAgICAgICAgc3dpdGNoIChzaXpl
MSkgeworICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgIHJldHVybiBkMVswXSA9
PSBkMlswXTsKKyAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICByZXR1cm4gKGQx
WzBdID09IGQyWzBdKSAmIChkMVsxXSA9PSBkMlsxXSk7CisgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgIHJldHVybiBtZW1jbXAoZDEsIGQyLCBzaXplMSAqIHNpemVvZihVQ2hh
cikpID09IDA7CisgICAgICAgIH0KICAgICB9CisKKyAgICByZXR1cm4gZXF1YWxTbG93Q2FzZShz
MSwgczIpOwogfQogCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvU3RyaW5nSGFz
aGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9TdHJpbmdIYXNo
ZXIuaAkocmV2aXNpb24gOTg0OTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1N0cmlu
Z0hhc2hlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsMTIgKzEzNCwxMiBAQCBwdWJsaWM6CiAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNvbXB1dGVI
YXNoKGNvbnN0IFQqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKICAgICB7Ci0gICAgICAgIHJldHVy
biBjb21wdXRlSGFzaDxULCBkZWZhdWx0Q292ZXJ0ZXI+KGRhdGEsIGxlbmd0aCk7CisgICAgICAg
IHJldHVybiBjb21wdXRlSGFzaDxULCBkZWZhdWx0Q29udmVydGVyPihkYXRhLCBsZW5ndGgpOwog
ICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyBpbmxpbmUgdW5zaWduZWQg
Y29tcHV0ZUhhc2goY29uc3QgVCogZGF0YSkKICAgICB7Ci0gICAgICAgIHJldHVybiBjb21wdXRl
SGFzaDxULCBkZWZhdWx0Q292ZXJ0ZXI+KGRhdGEpOworICAgICAgICByZXR1cm4gY29tcHV0ZUhh
c2g8VCwgZGVmYXVsdENvbnZlcnRlcj4oZGF0YSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8c2l6
ZV90IGxlbmd0aD4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBoYXNoTWVtb3J5KGNvbnN0IHZvaWQq
IGRhdGEpCkBAIC0xNTUsMTQgKzE1NSwxNCBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgot
ICAgIHN0YXRpYyBpbmxpbmUgVUNoYXIgZGVmYXVsdENvdmVydGVyKFVDaGFyIGNoKQorICAgIHN0
YXRpYyBpbmxpbmUgVUNoYXIgZGVmYXVsdENvbnZlcnRlcihVQ2hhciBjaCkKICAgICB7CiAgICAg
ICAgIHJldHVybiBjaDsKICAgICB9CiAKLSAgICBzdGF0aWMgaW5saW5lIFVDaGFyIGRlZmF1bHRD
b3ZlcnRlcihjaGFyIGNoKQorICAgIHN0YXRpYyBpbmxpbmUgVUNoYXIgZGVmYXVsdENvbnZlcnRl
cihMQ2hhciBjaCkKICAgICB7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBj
aGFyPihjaCk7CisgICAgICAgIHJldHVybiBjaDsKICAgICB9CiAKICAgICBpbmxpbmUgdm9pZCBh
ZGRDaGFyYWN0ZXJzVG9IYXNoKFVDaGFyIGEsIFVDaGFyIGIpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL3RleHQvQXRvbWljU3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL3RleHQvQXRvbWljU3RyaW5nLmNwcAkocmV2aXNpb24gOTg0OTQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvQXRvbWljU3RyaW5nLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODUsMTcgKzg1LDE3IEBAIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxT
dHJpbmdJbXBsPiBhZGQKIH0KIAogc3RydWN0IENTdHJpbmdUcmFuc2xhdG9yIHsKLSAgICBzdGF0
aWMgdW5zaWduZWQgaGFzaChjb25zdCBjaGFyKiBjKQorICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNo
KGNvbnN0IExDaGFyKiBjKQogICAgIHsKICAgICAgICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6Y29t
cHV0ZUhhc2goYyk7CiAgICAgfQogCi0gICAgc3RhdGljIGlubGluZSBib29sIGVxdWFsKFN0cmlu
Z0ltcGwqIHIsIGNvbnN0IGNoYXIqIHMpCisgICAgc3RhdGljIGlubGluZSBib29sIGVxdWFsKFN0
cmluZ0ltcGwqIHIsIGNvbnN0IExDaGFyKiBzKQogICAgIHsKICAgICAgICAgcmV0dXJuIFdURjo6
ZXF1YWwociwgcyk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdHJhbnNsYXRlKFN0cmluZ0lt
cGwqJiBsb2NhdGlvbiwgY29uc3QgY2hhciogY29uc3QmIGMsIHVuc2lnbmVkIGhhc2gpCisgICAg
c3RhdGljIHZvaWQgdHJhbnNsYXRlKFN0cmluZ0ltcGwqJiBsb2NhdGlvbiwgY29uc3QgTENoYXIq
IGNvbnN0JiBjLCB1bnNpZ25lZCBoYXNoKQogICAgIHsKICAgICAgICAgbG9jYXRpb24gPSBTdHJp
bmdJbXBsOjpjcmVhdGUoYykubGVha1JlZigpOwogICAgICAgICBsb2NhdGlvbi0+c2V0SGFzaCho
YXNoKTsKQEAgLTEwMywxNCArMTAzLDE0IEBAIHN0cnVjdCBDU3RyaW5nVHJhbnNsYXRvciB7CiAg
ICAgfQogfTsKIAotUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBBdG9taWNTdHJpbmc6OmFkZChjb25z
dCBjaGFyKiBjKQorUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBBdG9taWNTdHJpbmc6OmFkZChjb25z
dCBMQ2hhciogYykKIHsKICAgICBpZiAoIWMpCiAgICAgICAgIHJldHVybiAwOwogICAgIGlmICgh
KmMpCiAgICAgICAgIHJldHVybiBTdHJpbmdJbXBsOjplbXB0eSgpOwogCi0gICAgcmV0dXJuIGFk
ZFRvU3RyaW5nVGFibGU8Y29uc3QgY2hhciosIENTdHJpbmdUcmFuc2xhdG9yPihjKTsKKyAgICBy
ZXR1cm4gYWRkVG9TdHJpbmdUYWJsZTxjb25zdCBMQ2hhciosIENTdHJpbmdUcmFuc2xhdG9yPihj
KTsKIH0KIAogc3RydWN0IFVDaGFyQnVmZmVyIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvdGV4dC9BdG9taWNTdHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL3RleHQvQXRvbWljU3RyaW5nLmgJKHJldmlzaW9uIDk4NDk0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L0F0b21pY1N0cmluZy5oCSh3b3JraW5nIGNvcHkpCkBA
IC00MSw2ICs0MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBpbml0KCk7CiAKICAgICBB
dG9taWNTdHJpbmcoKSB7IH0KKyAgICBBdG9taWNTdHJpbmcoY29uc3QgTENoYXIqIHMpIDogbV9z
dHJpbmcoYWRkKHMpKSB7IH0KICAgICBBdG9taWNTdHJpbmcoY29uc3QgY2hhciogcykgOiBtX3N0
cmluZyhhZGQocykpIHsgfQogICAgIEF0b21pY1N0cmluZyhjb25zdCBVQ2hhciogcywgdW5zaWdu
ZWQgbGVuZ3RoKSA6IG1fc3RyaW5nKGFkZChzLCBsZW5ndGgpKSB7IH0KICAgICBBdG9taWNTdHJp
bmcoY29uc3QgVUNoYXIqIHMsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgZXhpc3RpbmdIYXNo
KSA6IG1fc3RyaW5nKGFkZChzLCBsZW5ndGgsIGV4aXN0aW5nSGFzaCkpIHsgfQpAQCAtNjYsMTMg
KzY3LDEzIEBAIHB1YmxpYzoKICAgICBVQ2hhciBvcGVyYXRvcltdKHVuc2lnbmVkIGludCBpKSBj
b25zdCB7IHJldHVybiBtX3N0cmluZ1tpXTsgfQogICAgIAogICAgIGJvb2wgY29udGFpbnMoVUNo
YXIgYykgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcuY29udGFpbnMoYyk7IH0KLSAgICBib29sIGNv
bnRhaW5zKGNvbnN0IGNoYXIqIHMsIGJvb2wgY2FzZVNlbnNpdGl2ZSA9IHRydWUpIGNvbnN0Cisg
ICAgYm9vbCBjb250YWlucyhjb25zdCBMQ2hhciogcywgYm9vbCBjYXNlU2Vuc2l0aXZlID0gdHJ1
ZSkgY29uc3QKICAgICAgICAgeyByZXR1cm4gbV9zdHJpbmcuY29udGFpbnMocywgY2FzZVNlbnNp
dGl2ZSk7IH0KICAgICBib29sIGNvbnRhaW5zKGNvbnN0IFN0cmluZyYgcywgYm9vbCBjYXNlU2Vu
c2l0aXZlID0gdHJ1ZSkgY29uc3QKICAgICAgICAgeyByZXR1cm4gbV9zdHJpbmcuY29udGFpbnMo
cywgY2FzZVNlbnNpdGl2ZSk7IH0KIAogICAgIHNpemVfdCBmaW5kKFVDaGFyIGMsIHNpemVfdCBz
dGFydCA9IDApIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLmZpbmQoYywgc3RhcnQpOyB9Ci0gICAg
c2l6ZV90IGZpbmQoY29uc3QgY2hhciogcywgc2l6ZV90IHN0YXJ0ID0gMCwgYm9vbCBjYXNlU2Vu
dGl0aXZlID0gdHJ1ZSkgY29uc3QKKyAgICBzaXplX3QgZmluZChjb25zdCBMQ2hhciogcywgc2l6
ZV90IHN0YXJ0ID0gMCwgYm9vbCBjYXNlU2VudGl0aXZlID0gdHJ1ZSkgY29uc3QKICAgICAgICAg
eyByZXR1cm4gbV9zdHJpbmcuZmluZChzLCBzdGFydCwgY2FzZVNlbnRpdGl2ZSk7IH0KICAgICBz
aXplX3QgZmluZChjb25zdCBTdHJpbmcmIHMsIHNpemVfdCBzdGFydCA9IDAsIGJvb2wgY2FzZVNl
bnRpdGl2ZSA9IHRydWUpIGNvbnN0CiAgICAgICAgIHsgcmV0dXJuIG1fc3RyaW5nLmZpbmQocywg
c3RhcnQsIGNhc2VTZW50aXRpdmUpOyB9CkBAIC0xMTksOCArMTIwLDEwIEBAIHB1YmxpYzoKIHBy
aXZhdGU6CiAgICAgU3RyaW5nIG1fc3RyaW5nOwogICAgIAotICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFN0cmluZ0ltcGw+IGFkZChjb25zdCBjaGFyKik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3Ry
aW5nSW1wbD4gYWRkKGNvbnN0IExDaGFyKik7CisgICAgQUxXQVlTX0lOTElORSBzdGF0aWMgUGFz
c1JlZlB0cjxTdHJpbmdJbXBsPiBhZGQoY29uc3QgY2hhciogcykgeyByZXR1cm4gYWRkKHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihzKSk7IH07CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8
U3RyaW5nSW1wbD4gYWRkKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICBBTFdB
WVNfSU5MSU5FIHN0YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGFkZChjb25zdCBjaGFyKiBz
LCB1bnNpZ25lZCBsZW5ndGgpIHsgcmV0dXJuIGFkZChyZWludGVycHJldF9jYXN0PGNvbnN0IGNo
YXIqPihzKSwgbGVuZ3RoKTsgfTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBh
ZGQoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIGV4aXN0aW5nSGFzaCk7
CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gYWRkKGNvbnN0IFVDaGFyKik7CiAg
ICAgQUxXQVlTX0lOTElORSBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGFkZChTdHJpbmdJbXBsKiBy
KQpAQCAtMTM0LDI2ICsxMzcsMjkgQEAgcHJpdmF0ZToKIH07CiAKIGlubGluZSBib29sIG9wZXJh
dG9yPT0oY29uc3QgQXRvbWljU3RyaW5nJiBhLCBjb25zdCBBdG9taWNTdHJpbmcmIGIpIHsgcmV0
dXJuIGEuaW1wbCgpID09IGIuaW1wbCgpOyB9Ci1ib29sIG9wZXJhdG9yPT0oY29uc3QgQXRvbWlj
U3RyaW5nJiBhLCBjb25zdCBjaGFyKiBiKTsKLWlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3Qg
QXRvbWljU3RyaW5nJiBhLCBjb25zdCBjaGFyKiBiKSB7IHJldHVybiBXVEY6OmVxdWFsKGEuaW1w
bCgpLCBiKTsgfQorYm9vbCBvcGVyYXRvcj09KGNvbnN0IEF0b21pY1N0cmluZyYsIGNvbnN0IExD
aGFyKik7CitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEF0b21pY1N0cmluZyYgYSwgY29u
c3QgY2hhciogYikgeyByZXR1cm4gV1RGOjplcXVhbChhLmltcGwoKSwgcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBMQ2hhcio+KGIpKTsgfQogaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBdG9t
aWNTdHJpbmcmIGEsIGNvbnN0IFZlY3RvcjxVQ2hhcj4mIGIpIHsgcmV0dXJuIGEuaW1wbCgpICYm
IGVxdWFsKGEuaW1wbCgpLCBiLmRhdGEoKSwgYi5zaXplKCkpOyB9ICAgIAogaW5saW5lIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBBdG9taWNTdHJpbmcmIGEsIGNvbnN0IFN0cmluZyYgYikgeyByZXR1
cm4gZXF1YWwoYS5pbXBsKCksIGIuaW1wbCgpKTsgfQotaW5saW5lIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBjaGFyKiBhLCBjb25zdCBBdG9taWNTdHJpbmcmIGIpIHsgcmV0dXJuIGIgPT0gYTsgfQor
aW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBMQ2hhciogYSwgY29uc3QgQXRvbWljU3RyaW5n
JiBiKSB7IHJldHVybiBiID09IGE7IH0KIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgU3Ry
aW5nJiBhLCBjb25zdCBBdG9taWNTdHJpbmcmIGIpIHsgcmV0dXJuIGVxdWFsKGEuaW1wbCgpLCBi
LmltcGwoKSk7IH0KIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgVmVjdG9yPFVDaGFyPiYg
YSwgY29uc3QgQXRvbWljU3RyaW5nJiBiKSB7IHJldHVybiBiID09IGE7IH0KIAogaW5saW5lIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBBdG9taWNTdHJpbmcmIGEsIGNvbnN0IEF0b21pY1N0cmluZyYg
YikgeyByZXR1cm4gYS5pbXBsKCkgIT0gYi5pbXBsKCk7IH0KLWlubGluZSBib29sIG9wZXJhdG9y
IT0oY29uc3QgQXRvbWljU3RyaW5nJiBhLCBjb25zdCBjaGFyICpiKSB7IHJldHVybiAhKGEgPT0g
Yik7IH0KK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgQXRvbWljU3RyaW5nJiBhLCBjb25z
dCBMQ2hhciogYikgeyByZXR1cm4gIShhID09IGIpOyB9CitpbmxpbmUgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IEF0b21pY1N0cmluZyYgYSwgY29uc3QgY2hhciogYikgeyByZXR1cm4gIShhID09IGIp
OyB9CiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEF0b21pY1N0cmluZyYgYSwgY29uc3Qg
U3RyaW5nJiBiKSB7IHJldHVybiAhZXF1YWwoYS5pbXBsKCksIGIuaW1wbCgpKTsgfQogaW5saW5l
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBBdG9taWNTdHJpbmcmIGEsIGNvbnN0IFZlY3RvcjxVQ2hh
cj4mIGIpIHsgcmV0dXJuICEoYSA9PSBiKTsgfQotaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25z
dCBjaGFyKiBhLCBjb25zdCBBdG9taWNTdHJpbmcmIGIpIHsgcmV0dXJuICEoYiA9PSBhKTsgfQor
aW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBMQ2hhciogYSwgY29uc3QgQXRvbWljU3RyaW5n
JiBiKSB7IHJldHVybiAhKGIgPT0gYSk7IH0KIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3Qg
U3RyaW5nJiBhLCBjb25zdCBBdG9taWNTdHJpbmcmIGIpIHsgcmV0dXJuICFlcXVhbChhLmltcGwo
KSwgYi5pbXBsKCkpOyB9CiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFZlY3RvcjxVQ2hh
cj4mIGEsIGNvbnN0IEF0b21pY1N0cmluZyYgYikgeyByZXR1cm4gIShhID09IGIpOyB9CiAKIGlu
bGluZSBib29sIGVxdWFsSWdub3JpbmdDYXNlKGNvbnN0IEF0b21pY1N0cmluZyYgYSwgY29uc3Qg
QXRvbWljU3RyaW5nJiBiKSB7IHJldHVybiBlcXVhbElnbm9yaW5nQ2FzZShhLmltcGwoKSwgYi5p
bXBsKCkpOyB9Ci1pbmxpbmUgYm9vbCBlcXVhbElnbm9yaW5nQ2FzZShjb25zdCBBdG9taWNTdHJp
bmcmIGEsIGNvbnN0IGNoYXIqIGIpIHsgcmV0dXJuIGVxdWFsSWdub3JpbmdDYXNlKGEuaW1wbCgp
LCBiKTsgfQoraW5saW5lIGJvb2wgZXF1YWxJZ25vcmluZ0Nhc2UoY29uc3QgQXRvbWljU3RyaW5n
JiBhLCBjb25zdCBMQ2hhciogYikgeyByZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2UoYS5pbXBsKCks
IGIpOyB9CitpbmxpbmUgYm9vbCBlcXVhbElnbm9yaW5nQ2FzZShjb25zdCBBdG9taWNTdHJpbmcm
IGEsIGNvbnN0IGNoYXIqIGIpIHsgcmV0dXJuIGVxdWFsSWdub3JpbmdDYXNlKGEuaW1wbCgpLCBy
ZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oYikpOyB9CiBpbmxpbmUgYm9vbCBlcXVhbEln
bm9yaW5nQ2FzZShjb25zdCBBdG9taWNTdHJpbmcmIGEsIGNvbnN0IFN0cmluZyYgYikgeyByZXR1
cm4gZXF1YWxJZ25vcmluZ0Nhc2UoYS5pbXBsKCksIGIuaW1wbCgpKTsgfQotaW5saW5lIGJvb2wg
ZXF1YWxJZ25vcmluZ0Nhc2UoY29uc3QgY2hhciogYSwgY29uc3QgQXRvbWljU3RyaW5nJiBiKSB7
IHJldHVybiBlcXVhbElnbm9yaW5nQ2FzZShhLCBiLmltcGwoKSk7IH0KK2lubGluZSBib29sIGVx
dWFsSWdub3JpbmdDYXNlKGNvbnN0IExDaGFyKiBhLCBjb25zdCBBdG9taWNTdHJpbmcmIGIpIHsg
cmV0dXJuIGVxdWFsSWdub3JpbmdDYXNlKGEsIGIuaW1wbCgpKTsgfQoraW5saW5lIGJvb2wgZXF1
YWxJZ25vcmluZ0Nhc2UoY29uc3QgY2hhciogYSwgY29uc3QgQXRvbWljU3RyaW5nJiBiKSB7IHJl
dHVybiBlcXVhbElnbm9yaW5nQ2FzZShyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oYSks
IGIuaW1wbCgpKTsgfQogaW5saW5lIGJvb2wgZXF1YWxJZ25vcmluZ0Nhc2UoY29uc3QgU3RyaW5n
JiBhLCBjb25zdCBBdG9taWNTdHJpbmcmIGIpIHsgcmV0dXJuIGVxdWFsSWdub3JpbmdDYXNlKGEu
aW1wbCgpLCBiLmltcGwoKSk7IH0KIAogLy8gRGVmaW5lIGV4dGVybmFsIGdsb2JhbCB2YXJpYWJs
ZXMgZm9yIHRoZSBjb21tb25seSB1c2VkIGF0b21pYyBzdHJpbmdzLgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmgJKHJldmlz
aW9uIDk4NDk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1N0cmluZ0NvbmNh
dGVuYXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDYgKzU4LDIxIEBAIHByaXZhdGU6CiB9Owog
CiB0ZW1wbGF0ZTw+CitjbGFzcyBTdHJpbmdUeXBlQWRhcHRlcjxMQ2hhcj4geworcHVibGljOgor
ICAgIFN0cmluZ1R5cGVBZGFwdGVyPExDaGFyPihMQ2hhciBidWZmZXIpCisgICAgICAgIDogbV9i
dWZmZXIoYnVmZmVyKQorICAgIHsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBsZW5ndGgoKSB7IHJl
dHVybiAxOyB9CisgICAgdm9pZCB3cml0ZVRvKFVDaGFyKiBkZXN0aW5hdGlvbikgeyAqZGVzdGlu
YXRpb24gPSBtX2J1ZmZlcjsgfQorCitwcml2YXRlOgorICAgIExDaGFyIG1fYnVmZmVyOworfTsK
KwordGVtcGxhdGU8PgogY2xhc3MgU3RyaW5nVHlwZUFkYXB0ZXI8VUNoYXI+IHsKIHB1YmxpYzoK
ICAgICBTdHJpbmdUeXBlQWRhcHRlcjxVQ2hhcj4oVUNoYXIgYnVmZmVyKQpAQCAtOTcsNiArMTEy
LDMwIEBAIHByaXZhdGU6CiB9OwogCiB0ZW1wbGF0ZTw+CitjbGFzcyBTdHJpbmdUeXBlQWRhcHRl
cjxMQ2hhcio+IHsKK3B1YmxpYzoKKyAgICBTdHJpbmdUeXBlQWRhcHRlcjxMQ2hhcio+KExDaGFy
KiBidWZmZXIpCisgICAgOiBtX2J1ZmZlcihidWZmZXIpCisgICAgLCBtX2xlbmd0aChzdHJsZW4o
cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oYnVmZmVyKSkpCisgICAgeworICAgIH0KKworICAgIHVu
c2lnbmVkIGxlbmd0aCgpIHsgcmV0dXJuIG1fbGVuZ3RoOyB9CisKKyAgICB2b2lkIHdyaXRlVG8o
VUNoYXIqIGRlc3RpbmF0aW9uKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IG1fYnVm
ZmVyW2ldOworICAgICAgICAgICAgZGVzdGluYXRpb25baV0gPSBjOworICAgICAgICB9CisgICAg
fQorCitwcml2YXRlOgorICAgIGNvbnN0IExDaGFyKiBtX2J1ZmZlcjsKKyAgICB1bnNpZ25lZCBt
X2xlbmd0aDsKK307CisKK3RlbXBsYXRlPD4KIGNsYXNzIFN0cmluZ1R5cGVBZGFwdGVyPGNvbnN0
IFVDaGFyKj4gewogcHVibGljOgogICAgIFN0cmluZ1R5cGVBZGFwdGVyPGNvbnN0IFVDaGFyKj4o
Y29uc3QgVUNoYXIqIGJ1ZmZlcikKQEAgLTE0OSw2ICsxODgsMzAgQEAgcHJpdmF0ZToKIH07CiAK
IHRlbXBsYXRlPD4KK2NsYXNzIFN0cmluZ1R5cGVBZGFwdGVyPGNvbnN0IExDaGFyKj4geworcHVi
bGljOgorICAgIFN0cmluZ1R5cGVBZGFwdGVyPGNvbnN0IExDaGFyKj4oY29uc3QgTENoYXIqIGJ1
ZmZlcikKKyAgICAgICAgOiBtX2J1ZmZlcihidWZmZXIpCisgICAgICAgICwgbV9sZW5ndGgoc3Ry
bGVuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGJ1ZmZlcikpKQorICAgIHsKKyAgICB9
CisgICAgCisgICAgdW5zaWduZWQgbGVuZ3RoKCkgeyByZXR1cm4gbV9sZW5ndGg7IH0KKyAgICAK
KyAgICB2b2lkIHdyaXRlVG8oVUNoYXIqIGRlc3RpbmF0aW9uKQorICAgIHsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIHVuc2ln
bmVkIGNoYXIgYyA9IG1fYnVmZmVyW2ldOworICAgICAgICAgICAgZGVzdGluYXRpb25baV0gPSBj
OworICAgICAgICB9CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBjb25zdCBMQ2hhciogbV9i
dWZmZXI7CisgICAgdW5zaWduZWQgbV9sZW5ndGg7Cit9OworCit0ZW1wbGF0ZTw+CiBjbGFzcyBT
dHJpbmdUeXBlQWRhcHRlcjxWZWN0b3I8Y2hhcj4gPiB7CiBwdWJsaWM6CiAgICAgU3RyaW5nVHlw
ZUFkYXB0ZXI8VmVjdG9yPGNoYXI+ID4oY29uc3QgVmVjdG9yPGNoYXI+JiBidWZmZXIpCkBAIC0x
NzEsNiArMjM0LDI2IEBAIHByaXZhdGU6CiB9OwogCiB0ZW1wbGF0ZTw+CitjbGFzcyBTdHJpbmdU
eXBlQWRhcHRlcjxWZWN0b3I8TENoYXI+ID4geworcHVibGljOgorICAgIFN0cmluZ1R5cGVBZGFw
dGVyPFZlY3RvcjxMQ2hhcj4gPihjb25zdCBWZWN0b3I8TENoYXI+JiBidWZmZXIpCisgICAgICAg
IDogbV9idWZmZXIoYnVmZmVyKQorICAgIHsKKyAgICB9CisKKyAgICBzaXplX3QgbGVuZ3RoKCkg
eyByZXR1cm4gbV9idWZmZXIuc2l6ZSgpOyB9CisKKyAgICB2b2lkIHdyaXRlVG8oVUNoYXIqIGRl
c3RpbmF0aW9uKQorICAgIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2J1ZmZl
ci5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uW2ldID0gbV9idWZmZXJbaV07
CisgICAgfQorCitwcml2YXRlOgorICAgIGNvbnN0IFZlY3RvcjxMQ2hhcj4mIG1fYnVmZmVyOwor
fTsKKwordGVtcGxhdGU8PgogY2xhc3MgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nPiB7CiBwdWJs
aWM6CiAgICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nPihjb25zdCBTdHJpbmcmIHN0cmluZykK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJpbmdIYXNoLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1N0cmluZ0hhc2guaAkocmV2
aXNpb24gOTg0OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvU3RyaW5nSGFz
aC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MywxMSArNTMsNjcgQEAgbmFtZXNwYWNlIFdURiB7CiAg
ICAgICAgICAgICBpZiAoYUxlbmd0aCAhPSBiTGVuZ3RoKQogICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKIAorICAgICAgICAgICAgaWYgKGEtPmlzOEJpdCgpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKGItPmlzOEJpdCgpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEJvdGggYSAmIGIg
YXJlIDggYml0LgorICAgICAgICAgICAgICAgICAgICBjb25zdCBMQ2hhciogYUNoYXJzID0gYS0+
Y2hhcmFjdGVyczgoKTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgTENoYXIqIGJDaGFycyA9
IGItPmNoYXJhY3RlcnM4KCk7CisKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaSA9IDA7
CisKKyAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IHBlcmhhcHMgd2Ugc2hvdWxkIGhhdmUg
YSBtb3JlIGFic3RyYWN0IG1hY3JvIHRoYXQgaW5kaWNhdGVzIHdoZW4KKyAgICAgICAgICAgICAg
ICAgICAgLy8gZ29pbmcgNCBieXRlcyBhdCBhIHRpbWUgaXMgdW5zYWZlCisjaWYgKENQVShYODYp
IHx8IENQVShYODZfNjQpKQorICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFy
c1BlckludCA9IHNpemVvZih1aW50MzJfdCkgLyBzaXplb2YoY2hhcik7CisgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAoYUxlbmd0aCA+IGNoYXJzUGVySW50KSB7
CisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzdG9wQ291bnQgPSBhTGVuZ3RoICYg
fihjaGFyc1BlckludCAtIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCB1aW50MzJfdCogYUludENoYXJhY3RlcnMgPSByZWludGVycHJl
dF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oYUNoYXJzKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHVpbnQzMl90KiBiSW50Q2hhcmFjdGVycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dWludDMyX3QqPihiQ2hhcnMpOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBqID0gMDsgaSA8IHN0b3BDb3VudDsgaSArPSBjaGFyc1BlckludCwgKytqKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGFJbnRDaGFyYWN0ZXJzW2pdICE9IGJJbnRDaGFyYWN0
ZXJzW2pdKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyNlbmRpZgor
ICAgICAgICAgICAgICAgICAgICBmb3IgKDsgaSA8IGFMZW5ndGg7ICsraSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGFDaGFyc1tpXSAhPSBiQ2hhcnNbaV0pCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBXZSBrbm93IHRoYXQgYSBpcyA4IGJp
dCAmIGIgaXMgMTYgYml0LgorICAgICAgICAgICAgICAgIGNvbnN0IExDaGFyKiBhQ2hhcnMgPSBh
LT5jaGFyYWN0ZXJzOCgpOworICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBiQ2hhcnMgPSBi
LT5jaGFyYWN0ZXJzMTYoKTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
ICE9IGFMZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoKmFDaGFycysrICE9
ICpiQ2hhcnMrKykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKGItPmlzOEJpdCgpKSB7CisgICAgICAgICAgICAgICAgLy8g
V2Uga25vdyB0aGF0IGEgaXMgOCBiaXQgYW5kIGIgaXMgMTYgYml0LgorICAgICAgICAgICAgICAg
IGNvbnN0IFVDaGFyKiBhQ2hhcnMgPSBhLT5jaGFyYWN0ZXJzMTYoKTsKKyAgICAgICAgICAgICAg
ICBjb25zdCBMQ2hhciogYkNoYXJzID0gYi0+Y2hhcmFjdGVyczgoKTsKKyAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpICE9IGFMZW5ndGg7ICsraSkgeworICAgICAgICAgICAg
ICAgICAgICBpZiAoKmFDaGFycysrICE9ICpiQ2hhcnMrKykKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQm90aCBhICYgYiBh
cmUgMTYgYml0LgogICAgICAgICAgICAgLy8gRklYTUU6IHBlcmhhcHMgd2Ugc2hvdWxkIGhhdmUg
YSBtb3JlIGFic3RyYWN0IG1hY3JvIHRoYXQgaW5kaWNhdGVzIHdoZW4KICAgICAgICAgICAgIC8v
IGdvaW5nIDQgYnl0ZXMgYXQgYSB0aW1lIGlzIHVuc2FmZQogI2lmIENQVShBUk0pIHx8IENQVShT
SDQpIHx8IENQVShNSVBTKSB8fCBDUFUoU1BBUkMpCi0gICAgICAgICAgICBjb25zdCBVQ2hhciog
YUNoYXJzID0gYS0+Y2hhcmFjdGVycygpOwotICAgICAgICAgICAgY29uc3QgVUNoYXIqIGJDaGFy
cyA9IGItPmNoYXJhY3RlcnMoKTsKKyAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBhQ2hhcnMgPSBh
LT5jaGFyYWN0ZXJzMTYoKTsKKyAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBiQ2hhcnMgPSBiLT5j
aGFyYWN0ZXJzMTYoKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgIT0gYUxl
bmd0aDsgKytpKSB7CiAgICAgICAgICAgICAgICAgaWYgKCphQ2hhcnMrKyAhPSAqYkNoYXJzKysp
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTY1LDggKzEyMSw4IEBAIG5h
bWVzcGFjZSBXVEYgewogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAjZWxzZQogICAgICAgICAg
ICAgLyogRG8gaXQgNC1ieXRlcy1hdC1hLXRpbWUgb24gYXJjaGl0ZWN0dXJlcyB3aGVyZSBpdCdz
IHNhZmUgKi8KLSAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90KiBhQ2hhcnMgPSByZWludGVycHJl
dF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oYS0+Y2hhcmFjdGVycygpKTsKLSAgICAgICAgICAgIGNv
bnN0IHVpbnQzMl90KiBiQ2hhcnMgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4o
Yi0+Y2hhcmFjdGVycygpKTsKKyAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90KiBhQ2hhcnMgPSBy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oYS0+Y2hhcmFjdGVyczE2KCkpOworICAg
ICAgICAgICAgY29uc3QgdWludDMyX3QqIGJDaGFycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dWludDMyX3QqPihiLT5jaGFyYWN0ZXJzMTYoKSk7CiAKICAgICAgICAgICAgIHVuc2lnbmVkIGhh
bGZMZW5ndGggPSBhTGVuZ3RoID4+IDE7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpICE9IGhhbGZMZW5ndGg7ICsraSkKQEAgLTExMiwxMSArMTY4LDE2IEBAIG5hbWVzcGFjZSBX
VEYgewogICAgICAgICAgICAgcmV0dXJuIGhhc2goc3RyLT5jaGFyYWN0ZXJzKCksIHN0ci0+bGVu
Z3RoKCkpOwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3Qg
Y2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQorICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFz
aChjb25zdCBMQ2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQogICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gU3RyaW5nSGFzaGVyOjpjb21wdXRlSGFzaDxjaGFyLCBmb2xkQ2FzZTxjaGFy
PiA+KGRhdGEsIGxlbmd0aCk7CisgICAgICAgICAgICByZXR1cm4gU3RyaW5nSGFzaGVyOjpjb21w
dXRlSGFzaDxMQ2hhciwgZm9sZENhc2U8TENoYXI+ID4oZGF0YSwgbGVuZ3RoKTsKICAgICAgICAg
fQogCisgICAgICAgIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaGFzaChjb25zdCBjaGFyKiBkYXRh
LCB1bnNpZ25lZCBsZW5ndGgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBDYXNlRm9s
ZGluZ0hhc2g6Omhhc2gocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KGRhdGEpLCBsZW5n
dGgpOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25z
dCBTdHJpbmdJbXBsKiBhLCBjb25zdCBTdHJpbmdJbXBsKiBiKQogICAgICAgICB7CiAgICAgICAg
ICAgICBpZiAoYSA9PSBiKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1N0
cmluZ0ltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4
dC9TdHJpbmdJbXBsLmNwcAkocmV2aXNpb24gOTg0OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL3RleHQvU3RyaW5nSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDExICs1NSwx
OCBAQCBTdHJpbmdJbXBsOjp+U3RyaW5nSW1wbCgpCiAjZW5kaWYKIAogICAgIEJ1ZmZlck93bmVy
c2hpcCBvd25lcnNoaXAgPSBidWZmZXJPd25lcnNoaXAoKTsKKworICAgIGlmIChoYXMxNkJpdFNo
YWRvdygpICYmICgob3duZXJzaGlwID09IEJ1ZmZlckludGVybmFsKSB8fCAob3duZXJzaGlwID09
IEJ1ZmZlck93bmVkKSkpIHsKKyAgICAgICAgQVNTRVJUKG1fY29weURhdGExNik7CisgICAgICAg
IGZhc3RGcmVlKG1fY29weURhdGExNik7CisgICAgfQorCiAgICAgaWYgKG93bmVyc2hpcCA9PSBC
dWZmZXJJbnRlcm5hbCkKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChvd25lcnNoaXAgPT0gQnVm
ZmVyT3duZWQpIHsKLSAgICAgICAgQVNTRVJUKG1fZGF0YSk7Ci0gICAgICAgIGZhc3RGcmVlKGNv
bnN0X2Nhc3Q8VUNoYXIqPihtX2RhdGEpKTsKKyAgICAgICAgLy8gV2UgdXNlIG1fZGF0YTgsIGJ1
dCBzaW5jZSBpdCBpcyBhIHVuaW9uIHdpdGggbV9kYXRhMTYgdGhpcyB3b3JrcyBlaXRoZXIgd2F5
LgorICAgICAgICBBU1NFUlQobV9kYXRhOCk7CisgICAgICAgIGZhc3RGcmVlKGNvbnN0X2Nhc3Q8
TENoYXIqPihtX2RhdGE4KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTY4LDYgKzc1
LDI1IEBAIFN0cmluZ0ltcGw6On5TdHJpbmdJbXBsKCkKICAgICBtX3N1YnN0cmluZ0J1ZmZlci0+
ZGVyZWYoKTsKIH0KIAorUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpjcmVhdGVV
bmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCwgTENoYXIqJiBkYXRhKQoreworICAgIGlmICgh
bGVuZ3RoKSB7CisgICAgICAgIGRhdGEgPSAwOworICAgICAgICByZXR1cm4gZW1wdHkoKTsKKyAg
ICB9CisKKyAgICAvLyBBbGxvY2F0ZSBhIHNpbmdsZSBidWZmZXIgbGFyZ2UgZW5vdWdoIHRvIGNv
bnRhaW4gdGhlIFN0cmluZ0ltcGwKKyAgICAvLyBzdHJ1Y3QgYXMgd2VsbCBhcyB0aGUgZGF0YSB3
aGljaCBpdCBjb250YWlucy4gVGhpcyByZW1vdmVzIG9uZQorICAgIC8vIGhlYXAgYWxsb2NhdGlv
biBmcm9tIHRoaXMgY2FsbC4KKyAgICBpZiAobGVuZ3RoID4gKChzdGQ6Om51bWVyaWNfbGltaXRz
PHVuc2lnbmVkPjo6bWF4KCkgLSBzaXplb2YoU3RyaW5nSW1wbCkpIC8gc2l6ZW9mKGNoYXIpKSkK
KyAgICAgICAgQ1JBU0goKTsKKyAgICBzaXplX3Qgc2l6ZSA9IHNpemVvZihTdHJpbmdJbXBsKSAr
IGxlbmd0aCAqIHNpemVvZihjaGFyKTsKKyAgICBTdHJpbmdJbXBsKiBzdHJpbmcgPSBzdGF0aWNf
Y2FzdDxTdHJpbmdJbXBsKj4oZmFzdE1hbGxvYyhzaXplKSk7CisKKyAgICBkYXRhID0gcmVpbnRl
cnByZXRfY2FzdDxMQ2hhcio+KHN0cmluZyArIDEpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcg
KHN0cmluZykgU3RyaW5nSW1wbChsZW5ndGgsIEZvcmNlOEJpdENvbnN0cnVjdG9yKSk7Cit9CisK
IFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFsaXplZCh1
bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiYgZGF0YSkKIHsKICAgICBpZiAoIWxlbmd0aCkgewpAQCAt
MTE4LDcgKzE0NCw3IEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y3JlYXQK
ICAgICByZXR1cm4gc3RyaW5nLnJlbGVhc2UoKTsKIH0KIAotUGFzc1JlZlB0cjxTdHJpbmdJbXBs
PiBTdHJpbmdJbXBsOjpjcmVhdGUoY29uc3QgY2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVu
Z3RoKQorUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpjcmVhdGUoY29uc3QgTENo
YXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBpZiAoIWNoYXJhY3RlcnMg
fHwgIWxlbmd0aCkKICAgICAgICAgcmV0dXJuIGVtcHR5KCk7CkBAIC0xMzIsMjQgKzE1OCw1OCBA
QCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmNyZWF0CiAgICAgcmV0dXJuIHN0
cmluZy5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6
Y3JlYXRlKGNvbnN0IGNoYXIqIHN0cmluZykKK1Bhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5n
SW1wbDo6Y3JlYXRlKGNvbnN0IExDaGFyKiBzdHJpbmcpCiB7CiAgICAgaWYgKCFzdHJpbmcpCiAg
ICAgICAgIHJldHVybiBlbXB0eSgpOwotICAgIHNpemVfdCBsZW5ndGggPSBzdHJsZW4oc3RyaW5n
KTsKKyAgICBzaXplX3QgbGVuZ3RoID0gc3RybGVuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hh
cio+KHN0cmluZykpOwogICAgIGlmIChsZW5ndGggPiBudW1lcmljX2xpbWl0czx1bnNpZ25lZD46
Om1heCgpKQogICAgICAgICBDUkFTSCgpOwogICAgIHJldHVybiBjcmVhdGUoc3RyaW5nLCBsZW5n
dGgpOwogfQogCitjb25zdCBVQ2hhciogU3RyaW5nSW1wbDo6Z2V0RGF0YTE2U2xvd0Nhc2UoKSBj
b25zdAoreworICAgIGlmIChoYXMxNkJpdFNoYWRvdygpKQorICAgICAgICByZXR1cm4gbV9jb3B5
RGF0YTE2OworCisgICAgaWYgKGJ1ZmZlck93bmVyc2hpcCgpID09IEJ1ZmZlclN1YnN0cmluZykg
eworICAgICAgICAvLyBJZiB0aGlzIGlzIGEgc3Vic3RyaW5nLCByZXR1cm4gYSBwb2ludGVyIGlu
dG8gdGhlIHBhcmVudCBzdHJpbmcuCisgICAgICAgIC8vIFRPRE86IENvbnNpZGVyIHNldmVyaW5n
IHRoaXMgc3RyaW5nIGZyb20gdGhlIHBhcmVudCBzdHJpbmcKKyAgICAgICAgdW5zaWduZWQgb2Zm
c2V0ID0gbV9kYXRhOCAtIG1fc3Vic3RyaW5nQnVmZmVyLT5jaGFyYWN0ZXJzOCgpOworICAgICAg
ICByZXR1cm4gbV9zdWJzdHJpbmdCdWZmZXItPmNoYXJhY3RlcnMxNigpICsgb2Zmc2V0OworICAg
IH0KKworICAgIHVuc2lnbmVkIGxlbiA9IGxlbmd0aCgpOworICAgIG1fY29weURhdGExNiA9IHN0
YXRpY19jYXN0PFVDaGFyKj4oZmFzdENhbGxvYyhsZW4sIHNpemVvZihVQ2hhcikpKTsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbjsgaSsrKQorICAgICAgICBtX2NvcHlEYXRhMTZbaV0g
PSBtX2RhdGE4W2ldOworCisgICAgbV9oYXNoQW5kRmxhZ3MgfD0gc19oYXNoRmxhZ0hhczE2Qml0
U2hhZG93OworCisgICAgcmV0dXJuIG1fY29weURhdGExNjsKK30KKwogYm9vbCBTdHJpbmdJbXBs
Ojpjb250YWluc09ubHlXaGl0ZXNwYWNlKCkKIHsKICAgICAvLyBGSVhNRTogVGhlIGRlZmluaXRp
b24gb2Ygd2hpdGVzcGFjZSBoZXJlIGluY2x1ZGVzIGEgbnVtYmVyIG9mIGNoYXJhY3RlcnMKICAg
ICAvLyB0aGF0IGFyZSBub3Qgd2hpdGVzcGFjZSBmcm9tIHRoZSBwb2ludCBvZiB2aWV3IG9mIFJl
bmRlclRleHQ7IEkgd29uZGVyIGlmCiAgICAgLy8gdGhhdCdzIGEgcHJvYmxlbSBpbiBwcmFjdGlj
ZS4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9sZW5ndGg7IGkrKykKLSAgICAgICAg
aWYgKCFpc0FTQ0lJU3BhY2UobV9kYXRhW2ldKSkKKyAgICBpZiAoaXM4Qml0KCkpIHsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAg
IFVDaGFyIGMgPSBtX2RhdGE4W2ldOworICAgICAgICAgICAgaWYgKCFpc0FTQ0lJU3BhY2UoYykp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbGVuZ3Ro
OyBpKyspIHsKKyAgICAgICAgVUNoYXIgYyA9IG1fZGF0YTE2W2ldOworICAgICAgICBpZiAoIWlz
QVNDSUlTcGFjZShjKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKQEAgLTE2MywxNSArMjIzLDIwIEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1w
bD4gU3RyaW5nSW1wbDo6c3Vic3QKICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICBs
ZW5ndGggPSBtYXhMZW5ndGg7CiAgICAgfQotICAgIHJldHVybiBjcmVhdGUobV9kYXRhICsgc3Rh
cnQsIGxlbmd0aCk7CisgICAgaWYgKGlzOEJpdCgpKQorICAgICAgICByZXR1cm4gY3JlYXRlKG1f
ZGF0YTggKyBzdGFydCwgbGVuZ3RoKTsKKworICAgIHJldHVybiBjcmVhdGUobV9kYXRhMTYgKyBz
dGFydCwgbGVuZ3RoKTsKIH0KIAogVUNoYXIzMiBTdHJpbmdJbXBsOjpjaGFyYWN0ZXJTdGFydGlu
Z0F0KHVuc2lnbmVkIGkpCiB7Ci0gICAgaWYgKFUxNl9JU19TSU5HTEUobV9kYXRhW2ldKSkKLSAg
ICAgICAgcmV0dXJuIG1fZGF0YVtpXTsKLSAgICBpZiAoaSArIDEgPCBtX2xlbmd0aCAmJiBVMTZf
SVNfTEVBRChtX2RhdGFbaV0pICYmIFUxNl9JU19UUkFJTChtX2RhdGFbaSArIDFdKSkKLSAgICAg
ICAgcmV0dXJuIFUxNl9HRVRfU1VQUExFTUVOVEFSWShtX2RhdGFbaV0sIG1fZGF0YVtpICsgMV0p
OworICAgIGlmIChpczhCaXQoKSkKKyAgICAgICAgcmV0dXJuIG1fZGF0YThbaV07CisgICAgaWYg
KFUxNl9JU19TSU5HTEUobV9kYXRhMTZbaV0pKQorICAgICAgICByZXR1cm4gbV9kYXRhMTZbaV07
CisgICAgaWYgKGkgKyAxIDwgbV9sZW5ndGggJiYgVTE2X0lTX0xFQUQobV9kYXRhMTZbaV0pICYm
IFUxNl9JU19UUkFJTChtX2RhdGExNltpICsgMV0pKQorICAgICAgICByZXR1cm4gVTE2X0dFVF9T
VVBQTEVNRU5UQVJZKG1fZGF0YTE2W2ldLCBtX2RhdGExNltpICsgMV0pOwogICAgIHJldHVybiAw
OwogfQogCkBAIC0xODEsNDIgKzI0Niw2NCBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmlu
Z0ltcGw6Omxvd2VyCiAgICAgLy8gbm8tb3AgY29kZSBwYXRoIHVwIHRocm91Z2ggdGhlIGZpcnN0
ICdyZXR1cm4nIHN0YXRlbWVudC4KICAgICAKICAgICAvLyBGaXJzdCBzY2FuIHRoZSBzdHJpbmcg
Zm9yIHVwcGVyY2FzZSBhbmQgbm9uLUFTQ0lJIGNoYXJhY3RlcnM6Ci0gICAgVUNoYXIgb3JlZCA9
IDA7CiAgICAgYm9vbCBub1VwcGVyID0gdHJ1ZTsKLSAgICBjb25zdCBVQ2hhciAqZW5kID0gbV9k
YXRhICsgbV9sZW5ndGg7Ci0gICAgZm9yIChjb25zdCBVQ2hhciogY2hwID0gbV9kYXRhOyBjaHAg
IT0gZW5kOyBjaHArKykgewotICAgICAgICBpZiAoVU5MSUtFTFkoaXNBU0NJSVVwcGVyKCpjaHAp
KSkKLSAgICAgICAgICAgIG5vVXBwZXIgPSBmYWxzZTsKLSAgICAgICAgb3JlZCB8PSAqY2hwOwor
ICAgIFVDaGFyIG9yZWQgPSAwOworICAgIGlmIChpczhCaXQoKSkgeworICAgICAgICBjb25zdCBM
Q2hhciogZW5kID0gbV9kYXRhOCArIG1fbGVuZ3RoOworICAgICAgICBmb3IgKGNvbnN0IExDaGFy
KiBjaHAgPSBtX2RhdGE4OyBjaHAgIT0gZW5kOyBjaHArKykKKyAgICAgICAgICAgIGlmIChVTkxJ
S0VMWShpc0FTQ0lJVXBwZXIoKmNocCkpKQorICAgICAgICAgICAgICAgIG5vVXBwZXIgPSBmYWxz
ZTsKKyAgICAgICAgLy8gTm90aGluZyB0byBkbyBpZiB0aGUgc3RyaW5nIGlzIGFsbCBBU0NJSSB3
aXRoIG5vIHVwcGVyY2FzZS4KKyAgICAgICAgaWYgKG5vVXBwZXIpCisgICAgICAgICAgICByZXR1
cm4gdGhpczsKKyAgICB9IGVsc2UgeworICAgICAgICBjb25zdCBVQ2hhciAqZW5kID0gbV9kYXRh
MTYgKyBtX2xlbmd0aDsKKyAgICAgICAgZm9yIChjb25zdCBVQ2hhciogY2hwID0gbV9kYXRhMTY7
IGNocCAhPSBlbmQ7IGNocCsrKSB7CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoaXNBU0NJSVVw
cGVyKCpjaHApKSkKKyAgICAgICAgICAgICAgICBub1VwcGVyID0gZmFsc2U7CisgICAgICAgICAg
ICBvcmVkIHw9ICpjaHA7CisgICAgICAgIH0KKyAgICAgICAgLy8gTm90aGluZyB0byBkbyBpZiB0
aGUgc3RyaW5nIGlzIGFsbCBBU0NJSSB3aXRoIG5vIHVwcGVyY2FzZS4KKyAgICAgICAgaWYgKG5v
VXBwZXIgJiYgIShvcmVkICYgfjB4N0YpKQorICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAg
fQotICAgIAotICAgIC8vIE5vdGhpbmcgdG8gZG8gaWYgdGhlIHN0cmluZyBpcyBhbGwgQVNDSUkg
d2l0aCBubyB1cHBlcmNhc2UuCi0gICAgaWYgKG5vVXBwZXIgJiYgIShvcmVkICYgfjB4N0YpKQot
ICAgICAgICByZXR1cm4gdGhpczsKIAogICAgIGlmIChtX2xlbmd0aCA+IHN0YXRpY19jYXN0PHVu
c2lnbmVkPihudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCkpKQogICAgICAgICBDUkFTSCgp
OwogICAgIGludDMyX3QgbGVuZ3RoID0gbV9sZW5ndGg7CiAKLSAgICBVQ2hhciogZGF0YTsKLSAg
ICBSZWZQdHI8U3RyaW5nSW1wbD4gbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQobV9sZW5n
dGgsIGRhdGEpOwotCiAgICAgaWYgKCEob3JlZCAmIH4weDdGKSkgewotICAgICAgICAvLyBEbyBh
IGZhc3RlciBsb29wIGZvciB0aGUgY2FzZSB3aGVyZSBhbGwgdGhlIGNoYXJhY3RlcnMgYXJlIEFT
Q0lJLgotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAg
ICAgICBVQ2hhciBjID0gbV9kYXRhW2ldOwotICAgICAgICAgICAgZGF0YVtpXSA9IHRvQVNDSUlM
b3dlcihjKTsKKyAgICAgICAgaWYgKGlzOEJpdCgpKSB7CisgICAgICAgICAgICBMQ2hhciogZGF0
YTg7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBs
ID0gY3JlYXRlVW5pbml0aWFsaXplZChtX2xlbmd0aCwgZGF0YTgpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykKKyAgICAgICAg
ICAgICAgICBkYXRhOFtpXSA9IHRvQVNDSUlMb3dlcihtX2RhdGE4W2ldKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgcmV0dXJuIG5ld0ltcGw7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIFVDaGFyKiBkYXRhMTY7CisgICAgICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0g
Y3JlYXRlVW5pbml0aWFsaXplZChtX2xlbmd0aCwgZGF0YTE2KTsKKyAgICAgICAgCisgICAgICAg
IGZvciAoaW50MzJfdCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBVQ2hh
ciBjID0gbV9kYXRhMTZbaV07CisgICAgICAgICAgICBkYXRhMTZbaV0gPSB0b0FTQ0lJTG93ZXIo
Yyk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG5ld0ltcGw7CiAgICAgfQogICAgIAogICAg
IC8vIERvIGEgc2xvd2VyIGltcGxlbWVudGF0aW9uIGZvciBjYXNlcyB0aGF0IGluY2x1ZGUgbm9u
LUFTQ0lJIGNoYXJhY3RlcnMuCisgICAgVUNoYXIqIGRhdGExNjsKKyAgICBSZWZQdHI8U3RyaW5n
SW1wbD4gbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQobV9sZW5ndGgsIGRhdGExNik7CisK
ICAgICBib29sIGVycm9yOwotICAgIGludDMyX3QgcmVhbExlbmd0aCA9IFVuaWNvZGU6OnRvTG93
ZXIoZGF0YSwgbGVuZ3RoLCBtX2RhdGEsIG1fbGVuZ3RoLCAmZXJyb3IpOworICAgIGludDMyX3Qg
cmVhbExlbmd0aCA9IFVuaWNvZGU6OnRvTG93ZXIoZGF0YTE2LCBsZW5ndGgsIG1fZGF0YTE2LCBt
X2xlbmd0aCwgJmVycm9yKTsKICAgICBpZiAoIWVycm9yICYmIHJlYWxMZW5ndGggPT0gbGVuZ3Ro
KQogICAgICAgICByZXR1cm4gbmV3SW1wbDsKLSAgICBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFs
aXplZChyZWFsTGVuZ3RoLCBkYXRhKTsKLSAgICBVbmljb2RlOjp0b0xvd2VyKGRhdGEsIHJlYWxM
ZW5ndGgsIG1fZGF0YSwgbV9sZW5ndGgsICZlcnJvcik7CisgICAgbmV3SW1wbCA9IGNyZWF0ZVVu
aW5pdGlhbGl6ZWQocmVhbExlbmd0aCwgZGF0YTE2KTsKKyAgICBVbmljb2RlOjp0b0xvd2VyKGRh
dGExNiwgcmVhbExlbmd0aCwgbV9kYXRhMTYsIG1fbGVuZ3RoLCAmZXJyb3IpOwogICAgIGlmIChl
cnJvcikKICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgcmV0dXJuIG5ld0ltcGw7CkBAIC0yMjcs
MzAgKzMxNCw2MCBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnVwcGVyCiAg
ICAgLy8gVGhpcyBmdW5jdGlvbiBjb3VsZCBiZSBvcHRpbWl6ZWQgZm9yIG5vLW9wIGNhc2VzIHRo
ZSB3YXkgbG93ZXIoKSBpcywKICAgICAvLyBidXQgaW4gZW1waXJpY2FsIHRlc3RpbmcsIGZldyBh
Y3R1YWwgY2FsbHMgdG8gdXBwZXIoKSBhcmUgbm8tb3BzLCBzbwogICAgIC8vIGl0IHdvdWxkbid0
IGJlIHdvcnRoIHRoZSBleHRyYSB0aW1lIGZvciBwcmUtc2Nhbm5pbmcuCi0gICAgVUNoYXIqIGRh
dGE7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IG5ld0ltcGwgPSBjcmVhdGVVbmluaXRpYWxpemVk
KG1fbGVuZ3RoLCBkYXRhKTsKIAogICAgIGlmIChtX2xlbmd0aCA+IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCkpKQogICAgICAgICBDUkFTSCgpOwog
ICAgIGludDMyX3QgbGVuZ3RoID0gbV9sZW5ndGg7CiAKKyAgICBpZiAoaXM4Qml0KCkpIHsKKyAg
ICAgICAgTENoYXIqIGRhdGE4OworICAgICAgICBSZWZQdHI8U3RyaW5nSW1wbD4gbmV3SW1wbCA9
IGNyZWF0ZVVuaW5pdGlhbGl6ZWQobV9sZW5ndGgsIGRhdGE4KTsKKyAgICAgICAgCisgICAgICAg
IC8vIERvIGEgZmFzdGVyIGxvb3AgZm9yIHRoZSBjYXNlIHdoZXJlIGFsbCB0aGUgY2hhcmFjdGVy
cyBhcmUgQVNDSUkuCisgICAgICAgIGNoYXIgb3JlZCA9IDA7CisgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGNoYXIgYyA9IG1fZGF0YThbaV07
CisgICAgICAgICAgICBvcmVkIHw9IGM7CisgICAgICAgICAgICBkYXRhOFtpXSA9IHRvQVNDSUlV
cHBlcihjKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIShvcmVkICYgfjB4N0YpKQorICAgICAg
ICAgICAgcmV0dXJuIG5ld0ltcGwucmVsZWFzZSgpOworCisgICAgICAgIC8vIERvIGEgc2xvd2Vy
IGltcGxlbWVudGF0aW9uIGZvciBjYXNlcyB0aGF0IGluY2x1ZGUgbm9uLUFTQ0lJIGNoYXJhY3Rl
cnMuCisgICAgICAgIGJvb2wgZXJyb3I7CisgICAgICAgIFVDaGFyKiBkYXRhMTY7CisgICAgICAg
IG5ld0ltcGwgPSBjcmVhdGVVbmluaXRpYWxpemVkKG1fbGVuZ3RoLCBkYXRhMTYpOworICAgICAg
ICBpbnQzMl90IHJlYWxMZW5ndGggPSBVbmljb2RlOjp0b1VwcGVyKGRhdGExNiwgbGVuZ3RoLCBt
X2RhdGExNiwgbV9sZW5ndGgsICZlcnJvcik7CisgICAgICAgIGlmICghZXJyb3IgJiYgcmVhbExl
bmd0aCA9PSBsZW5ndGgpCisgICAgICAgICAgICByZXR1cm4gbmV3SW1wbDsKKyAgICAgICAgbmV3
SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQocmVhbExlbmd0aCwgZGF0YTE2KTsKKyAgICAgICAg
VW5pY29kZTo6dG9VcHBlcihkYXRhMTYsIHJlYWxMZW5ndGgsIG1fZGF0YTE2LCBtX2xlbmd0aCwg
JmVycm9yKTsKKyAgICAgICAgaWYgKGVycm9yKQorICAgICAgICAgICAgcmV0dXJuIHRoaXM7Cisg
ICAgICAgIHJldHVybiBuZXdJbXBsLnJlbGVhc2UoKTsKKyAgICB9CisKKyAgICBVQ2hhciogZGF0
YTE2OworICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXpl
ZChtX2xlbmd0aCwgZGF0YTE2KTsKKyAgICAKICAgICAvLyBEbyBhIGZhc3RlciBsb29wIGZvciB0
aGUgY2FzZSB3aGVyZSBhbGwgdGhlIGNoYXJhY3RlcnMgYXJlIEFTQ0lJLgogICAgIFVDaGFyIG9y
ZWQgPSAwOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAg
VUNoYXIgYyA9IG1fZGF0YVtpXTsKKyAgICAgICAgVUNoYXIgYyA9IG1fZGF0YTE2W2ldOwogICAg
ICAgICBvcmVkIHw9IGM7Ci0gICAgICAgIGRhdGFbaV0gPSB0b0FTQ0lJVXBwZXIoYyk7CisgICAg
ICAgIGRhdGExNltpXSA9IHRvQVNDSUlVcHBlcihjKTsKICAgICB9CiAgICAgaWYgKCEob3JlZCAm
IH4weDdGKSkKICAgICAgICAgcmV0dXJuIG5ld0ltcGwucmVsZWFzZSgpOwogCiAgICAgLy8gRG8g
YSBzbG93ZXIgaW1wbGVtZW50YXRpb24gZm9yIGNhc2VzIHRoYXQgaW5jbHVkZSBub24tQVNDSUkg
Y2hhcmFjdGVycy4KICAgICBib29sIGVycm9yOwotICAgIGludDMyX3QgcmVhbExlbmd0aCA9IFVu
aWNvZGU6OnRvVXBwZXIoZGF0YSwgbGVuZ3RoLCBtX2RhdGEsIG1fbGVuZ3RoLCAmZXJyb3IpOwor
ICAgIG5ld0ltcGwgPSBjcmVhdGVVbmluaXRpYWxpemVkKG1fbGVuZ3RoLCBkYXRhMTYpOworICAg
IGludDMyX3QgcmVhbExlbmd0aCA9IFVuaWNvZGU6OnRvVXBwZXIoZGF0YTE2LCBsZW5ndGgsIG1f
ZGF0YTE2LCBtX2xlbmd0aCwgJmVycm9yKTsKICAgICBpZiAoIWVycm9yICYmIHJlYWxMZW5ndGgg
PT0gbGVuZ3RoKQogICAgICAgICByZXR1cm4gbmV3SW1wbDsKLSAgICBuZXdJbXBsID0gY3JlYXRl
VW5pbml0aWFsaXplZChyZWFsTGVuZ3RoLCBkYXRhKTsKLSAgICBVbmljb2RlOjp0b1VwcGVyKGRh
dGEsIHJlYWxMZW5ndGgsIG1fZGF0YSwgbV9sZW5ndGgsICZlcnJvcik7CisgICAgbmV3SW1wbCA9
IGNyZWF0ZVVuaW5pdGlhbGl6ZWQocmVhbExlbmd0aCwgZGF0YTE2KTsKKyAgICBVbmljb2RlOjp0
b1VwcGVyKGRhdGExNiwgcmVhbExlbmd0aCwgbV9kYXRhMTYsIG1fbGVuZ3RoLCAmZXJyb3IpOwog
ICAgIGlmIChlcnJvcikKICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgcmV0dXJuIG5ld0ltcGwu
cmVsZWFzZSgpOwpAQCAtMjYxLDYgKzM3OCwxMyBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0
cmluZ0ltcGw6OmZpbGwoCiAgICAgaWYgKCFtX2xlbmd0aCkKICAgICAgICAgcmV0dXJuIHRoaXM7
CiAKKyAgICBpZiAoIShjaGFyYWN0ZXIgJiB+MHg3RikpIHsKKyAgICAgICAgTENoYXIqIGRhdGE7
CisgICAgICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXpl
ZChtX2xlbmd0aCwgZGF0YSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2xl
bmd0aDsgKytpKQorICAgICAgICAgICAgZGF0YVtpXSA9IGNoYXJhY3RlcjsKKyAgICAgICAgcmV0
dXJuIG5ld0ltcGwucmVsZWFzZSgpOworICAgIH0KICAgICBVQ2hhciogZGF0YTsKICAgICBSZWZQ
dHI8U3RyaW5nSW1wbD4gbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQobV9sZW5ndGgsIGRh
dGEpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2xlbmd0aDsgKytpKQpAQCAtMjcw
LDE3ICszOTQsMjQgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpmaWxsKAog
CiBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmZvbGRDYXNlKCkKIHsKLSAgICBV
Q2hhciogZGF0YTsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gbmV3SW1wbCA9IGNyZWF0ZVVuaW5p
dGlhbGl6ZWQobV9sZW5ndGgsIGRhdGEpOwotCiAgICAgaWYgKG1fbGVuZ3RoID4gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KG51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSkpCiAgICAgICAgIENS
QVNIKCk7CiAgICAgaW50MzJfdCBsZW5ndGggPSBtX2xlbmd0aDsKIAorICAgIGlmIChpczhCaXQo
KSkgeworICAgICAgICBMQ2hhciogZGF0YTsKKyAgICAgICAgUmVmUHRyIDxTdHJpbmdJbXBsPm5l
d0ltcGwgPSBjcmVhdGVVbmluaXRpYWxpemVkKG1fbGVuZ3RoLCBkYXRhKTsKKyAgICAgICAgZm9y
IChpbnQzMl90IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspCisgICAgICAgICAgICBkYXRhW2ldID0g
dG9BU0NJSUxvd2VyKG1fZGF0YThbaV0pOworICAgICAgICByZXR1cm4gbmV3SW1wbC5yZWxlYXNl
KCk7CisgICAgfQorCiAgICAgLy8gRG8gYSBmYXN0ZXIgbG9vcCBmb3IgdGhlIGNhc2Ugd2hlcmUg
YWxsIHRoZSBjaGFyYWN0ZXJzIGFyZSBBU0NJSS4KKyAgICBVQ2hhciogZGF0YTsKKyAgICBSZWZQ
dHI8U3RyaW5nSW1wbD4gbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQobV9sZW5ndGgsIGRh
dGEpOwogICAgIFVDaGFyIG9yZWQgPSAwOwogICAgIGZvciAoaW50MzJfdCBpID0gMDsgaSA8IGxl
bmd0aDsgaSsrKSB7Ci0gICAgICAgIFVDaGFyIGMgPSBtX2RhdGFbaV07CisgICAgICAgIFVDaGFy
IGMgPSBtX2RhdGExNltpXTsKICAgICAgICAgb3JlZCB8PSBjOwogICAgICAgICBkYXRhW2ldID0g
dG9BU0NJSUxvd2VyKGMpOwogICAgIH0KQEAgLTI4OSwxMSArNDIwLDExIEBAIFBhc3NSZWZQdHI8
U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Zm9sZEMKIAogICAgIC8vIERvIGEgc2xvd2VyIGltcGxl
bWVudGF0aW9uIGZvciBjYXNlcyB0aGF0IGluY2x1ZGUgbm9uLUFTQ0lJIGNoYXJhY3RlcnMuCiAg
ICAgYm9vbCBlcnJvcjsKLSAgICBpbnQzMl90IHJlYWxMZW5ndGggPSBVbmljb2RlOjpmb2xkQ2Fz
ZShkYXRhLCBsZW5ndGgsIG1fZGF0YSwgbV9sZW5ndGgsICZlcnJvcik7CisgICAgaW50MzJfdCBy
ZWFsTGVuZ3RoID0gVW5pY29kZTo6Zm9sZENhc2UoZGF0YSwgbGVuZ3RoLCBtX2RhdGExNiwgbV9s
ZW5ndGgsICZlcnJvcik7CiAgICAgaWYgKCFlcnJvciAmJiByZWFsTGVuZ3RoID09IGxlbmd0aCkK
ICAgICAgICAgcmV0dXJuIG5ld0ltcGwucmVsZWFzZSgpOwogICAgIG5ld0ltcGwgPSBjcmVhdGVV
bmluaXRpYWxpemVkKHJlYWxMZW5ndGgsIGRhdGEpOwotICAgIFVuaWNvZGU6OmZvbGRDYXNlKGRh
dGEsIHJlYWxMZW5ndGgsIG1fZGF0YSwgbV9sZW5ndGgsICZlcnJvcik7CisgICAgVW5pY29kZTo6
Zm9sZENhc2UoZGF0YSwgcmVhbExlbmd0aCwgbV9kYXRhMTYsIG1fbGVuZ3RoLCAmZXJyb3IpOwog
ICAgIGlmIChlcnJvcikKICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgcmV0dXJuIG5ld0ltcGwu
cmVsZWFzZSgpOwpAQCAtMzA5LDcgKzQ0MCw3IEBAIGlubGluZSBQYXNzUmVmUHRyPFN0cmluZ0lt
cGw+IFN0cmluZ0ltcGwKICAgICB1bnNpZ25lZCBlbmQgPSBtX2xlbmd0aCAtIDE7CiAgICAgCiAg
ICAgLy8gc2tpcCB3aGl0ZSBzcGFjZSBmcm9tIHN0YXJ0Ci0gICAgd2hpbGUgKHN0YXJ0IDw9IGVu
ZCAmJiBwcmVkaWNhdGUobV9kYXRhW3N0YXJ0XSkpCisgICAgd2hpbGUgKHN0YXJ0IDw9IGVuZCAm
JiBwcmVkaWNhdGUoaXM4Qml0KCkgPyBtX2RhdGE4W3N0YXJ0XSA6IG1fZGF0YTE2W3N0YXJ0XSkp
CiAgICAgICAgIHN0YXJ0Kys7CiAgICAgCiAgICAgLy8gb25seSB3aGl0ZSBzcGFjZQpAQCAtMzE3
LDEyICs0NDgsMTQgQEAgaW5saW5lIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbAog
ICAgICAgICByZXR1cm4gZW1wdHkoKTsKIAogICAgIC8vIHNraXAgd2hpdGUgc3BhY2UgZnJvbSBl
bmQKLSAgICB3aGlsZSAoZW5kICYmIHByZWRpY2F0ZShtX2RhdGFbZW5kXSkpCisgICAgd2hpbGUg
KGVuZCAmJiBwcmVkaWNhdGUoaXM4Qml0KCkgPyBtX2RhdGE4W2VuZF0gOiBtX2RhdGExNltlbmRd
KSkKICAgICAgICAgZW5kLS07CiAKICAgICBpZiAoIXN0YXJ0ICYmIGVuZCA9PSBtX2xlbmd0aCAt
IDEpCiAgICAgICAgIHJldHVybiB0aGlzOwotICAgIHJldHVybiBjcmVhdGUobV9kYXRhICsgc3Rh
cnQsIGVuZCArIDEgLSBzdGFydCk7CisgICAgaWYgKGlzOEJpdCgpKQorICAgICAgICByZXR1cm4g
Y3JlYXRlKG1fZGF0YTggKyBzdGFydCwgZW5kICsgMSAtIHN0YXJ0KTsKKyAgICByZXR1cm4gY3Jl
YXRlKG1fZGF0YTE2ICsgc3RhcnQsIGVuZCArIDEgLSBzdGFydCk7CiB9CiAKIGNsYXNzIFVDaGFy
UHJlZGljYXRlIHsKQEAgLTM1Niw5ICs0ODksMTAgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBT
dHJpbmdJbXBsOjpzdHJpcAogICAgIHJldHVybiBzdHJpcE1hdGNoZWRDaGFyYWN0ZXJzKFVDaGFy
UHJlZGljYXRlKGlzV2hpdGVTcGFjZSkpOwogfQogCisvLyBGSVhNRTogQWRkIDgtYml0IHBhdGgu
IExpa2VseSByZXF1aXJlcyB0ZW1wbGF0aXplZCBTdHJpbmdCdWZmZXIgY2xhc3MKIFBhc3NSZWZQ
dHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6cmVtb3ZlQ2hhcmFjdGVycyhDaGFyYWN0ZXJNYXRj
aEZ1bmN0aW9uUHRyIGZpbmRNYXRjaCkKIHsKLSAgICBjb25zdCBVQ2hhciogZnJvbSA9IG1fZGF0
YTsKKyAgICBjb25zdCBVQ2hhciogZnJvbSA9IGNoYXJhY3RlcnMoKTsKICAgICBjb25zdCBVQ2hh
ciogZnJvbWVuZCA9IGZyb20gKyBtX2xlbmd0aDsKIAogICAgIC8vIEFzc3VtZSB0aGUgY29tbW9u
IGNhc2Ugd2lsbCBub3QgcmVtb3ZlIGFueSBjaGFyYWN0ZXJzCkBAIC0zNjksMTAgKzUwMywxMCBA
QCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnJlbW92CiAKICAgICBTdHJpbmdC
dWZmZXIgZGF0YShtX2xlbmd0aCk7CiAgICAgVUNoYXIqIHRvID0gZGF0YS5jaGFyYWN0ZXJzKCk7
Ci0gICAgdW5zaWduZWQgb3V0YyA9IGZyb20gLSBtX2RhdGE7CisgICAgdW5zaWduZWQgb3V0YyA9
IGZyb20gLSBjaGFyYWN0ZXJzMTYoKTsKIAogICAgIGlmIChvdXRjKQotICAgICAgICBtZW1jcHko
dG8sIG1fZGF0YSwgb3V0YyAqIHNpemVvZihVQ2hhcikpOworICAgICAgICBtZW1jcHkodG8sIGNo
YXJhY3RlcnMxNigpLCBvdXRjICogc2l6ZW9mKFVDaGFyKSk7CiAKICAgICB3aGlsZSAodHJ1ZSkg
ewogICAgICAgICB3aGlsZSAoZnJvbSAhPSBmcm9tZW5kICYmIGZpbmRNYXRjaCgqZnJvbSkpCkBA
IC0zODgsMTIgKzUyMiwxMyBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnJl
bW92CiAgICAgcmV0dXJuIGFkb3B0KGRhdGEpOwogfQogCisvLyBGSVhNRTogQWRkIDgtYml0IHBh
dGguIExpa2VseSByZXF1aXJlcyB0ZW1wbGF0aXplZCBTdHJpbmdCdWZmZXIgY2xhc3MKIHRlbXBs
YXRlIDxjbGFzcyBVQ2hhclByZWRpY2F0ZT4KIGlubGluZSBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+
IFN0cmluZ0ltcGw6OnNpbXBsaWZ5TWF0Y2hlZENoYXJhY3RlcnNUb1NwYWNlKFVDaGFyUHJlZGlj
YXRlIHByZWRpY2F0ZSkKIHsKICAgICBTdHJpbmdCdWZmZXIgZGF0YShtX2xlbmd0aCk7CiAKLSAg
ICBjb25zdCBVQ2hhciogZnJvbSA9IG1fZGF0YTsKKyAgICBjb25zdCBVQ2hhciogZnJvbSA9IGNo
YXJhY3RlcnMxNigpOwogICAgIGNvbnN0IFVDaGFyKiBmcm9tZW5kID0gZnJvbSArIG1fbGVuZ3Ro
OwogICAgIGludCBvdXRjID0gMDsKICAgICBib29sIGNoYW5nZWRUb1NwYWNlID0gZmFsc2U7CkBA
IC00MzcsNjUgKzU3Miw2NyBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnNp
bXBsCiAKIGludCBTdHJpbmdJbXBsOjp0b0ludFN0cmljdChib29sKiBvaywgaW50IGJhc2UpCiB7
Ci0gICAgcmV0dXJuIGNoYXJhY3RlcnNUb0ludFN0cmljdChtX2RhdGEsIG1fbGVuZ3RoLCBvaywg
YmFzZSk7CisgICAgcmV0dXJuIGNoYXJhY3RlcnNUb0ludFN0cmljdChjaGFyYWN0ZXJzMTYoKSwg
bV9sZW5ndGgsIG9rLCBiYXNlKTsKIH0KIAogdW5zaWduZWQgU3RyaW5nSW1wbDo6dG9VSW50U3Ry
aWN0KGJvb2wqIG9rLCBpbnQgYmFzZSkKIHsKLSAgICByZXR1cm4gY2hhcmFjdGVyc1RvVUludFN0
cmljdChtX2RhdGEsIG1fbGVuZ3RoLCBvaywgYmFzZSk7CisgICAgcmV0dXJuIGNoYXJhY3RlcnNU
b1VJbnRTdHJpY3QoY2hhcmFjdGVyczE2KCksIG1fbGVuZ3RoLCBvaywgYmFzZSk7CiB9CiAKIGlu
dDY0X3QgU3RyaW5nSW1wbDo6dG9JbnQ2NFN0cmljdChib29sKiBvaywgaW50IGJhc2UpCiB7Ci0g
ICAgcmV0dXJuIGNoYXJhY3RlcnNUb0ludDY0U3RyaWN0KG1fZGF0YSwgbV9sZW5ndGgsIG9rLCBi
YXNlKTsKKyAgICByZXR1cm4gY2hhcmFjdGVyc1RvSW50NjRTdHJpY3QoY2hhcmFjdGVyczE2KCks
IG1fbGVuZ3RoLCBvaywgYmFzZSk7CisKIH0KIAogdWludDY0X3QgU3RyaW5nSW1wbDo6dG9VSW50
NjRTdHJpY3QoYm9vbCogb2ssIGludCBiYXNlKQogewotICAgIHJldHVybiBjaGFyYWN0ZXJzVG9V
SW50NjRTdHJpY3QobV9kYXRhLCBtX2xlbmd0aCwgb2ssIGJhc2UpOworICAgIHJldHVybiBjaGFy
YWN0ZXJzVG9VSW50NjRTdHJpY3QoY2hhcmFjdGVyczE2KCksIG1fbGVuZ3RoLCBvaywgYmFzZSk7
CiB9CiAKIGludHB0cl90IFN0cmluZ0ltcGw6OnRvSW50UHRyU3RyaWN0KGJvb2wqIG9rLCBpbnQg
YmFzZSkKIHsKLSAgICByZXR1cm4gY2hhcmFjdGVyc1RvSW50UHRyU3RyaWN0KG1fZGF0YSwgbV9s
ZW5ndGgsIG9rLCBiYXNlKTsKKyAgICByZXR1cm4gY2hhcmFjdGVyc1RvSW50UHRyU3RyaWN0KGNo
YXJhY3RlcnMxNigpLCBtX2xlbmd0aCwgb2ssIGJhc2UpOwogfQogCiBpbnQgU3RyaW5nSW1wbDo6
dG9JbnQoYm9vbCogb2spCiB7Ci0gICAgcmV0dXJuIGNoYXJhY3RlcnNUb0ludChtX2RhdGEsIG1f
bGVuZ3RoLCBvayk7CisgICAgcmV0dXJuIGNoYXJhY3RlcnNUb0ludChjaGFyYWN0ZXJzMTYoKSwg
bV9sZW5ndGgsIG9rKTsKIH0KIAogdW5zaWduZWQgU3RyaW5nSW1wbDo6dG9VSW50KGJvb2wqIG9r
KQogewotICAgIHJldHVybiBjaGFyYWN0ZXJzVG9VSW50KG1fZGF0YSwgbV9sZW5ndGgsIG9rKTsK
KyAgICByZXR1cm4gY2hhcmFjdGVyc1RvVUludChjaGFyYWN0ZXJzMTYoKSwgbV9sZW5ndGgsIG9r
KTsKIH0KIAogaW50NjRfdCBTdHJpbmdJbXBsOjp0b0ludDY0KGJvb2wqIG9rKQogewotICAgIHJl
dHVybiBjaGFyYWN0ZXJzVG9JbnQ2NChtX2RhdGEsIG1fbGVuZ3RoLCBvayk7CisgICAgcmV0dXJu
IGNoYXJhY3RlcnNUb0ludDY0KGNoYXJhY3RlcnMxNigpLCBtX2xlbmd0aCwgb2spOwogfQogCiB1
aW50NjRfdCBTdHJpbmdJbXBsOjp0b1VJbnQ2NChib29sKiBvaykKIHsKLSAgICByZXR1cm4gY2hh
cmFjdGVyc1RvVUludDY0KG1fZGF0YSwgbV9sZW5ndGgsIG9rKTsKKyAgICByZXR1cm4gY2hhcmFj
dGVyc1RvVUludDY0KGNoYXJhY3RlcnMxNigpLCBtX2xlbmd0aCwgb2spOwogfQogCiBpbnRwdHJf
dCBTdHJpbmdJbXBsOjp0b0ludFB0cihib29sKiBvaykKIHsKLSAgICByZXR1cm4gY2hhcmFjdGVy
c1RvSW50UHRyKG1fZGF0YSwgbV9sZW5ndGgsIG9rKTsKKyAgICByZXR1cm4gY2hhcmFjdGVyc1Rv
SW50UHRyKGNoYXJhY3RlcnMxNigpLCBtX2xlbmd0aCwgb2spOworCiB9CiAKIGRvdWJsZSBTdHJp
bmdJbXBsOjp0b0RvdWJsZShib29sKiBvaywgYm9vbCogZGlkUmVhZE51bWJlcikKIHsKLSAgICBy
ZXR1cm4gY2hhcmFjdGVyc1RvRG91YmxlKG1fZGF0YSwgbV9sZW5ndGgsIG9rLCBkaWRSZWFkTnVt
YmVyKTsKKyAgICByZXR1cm4gY2hhcmFjdGVyc1RvRG91YmxlKGNoYXJhY3RlcnMxNigpLCBtX2xl
bmd0aCwgb2ssIGRpZFJlYWROdW1iZXIpOwogfQogCiBmbG9hdCBTdHJpbmdJbXBsOjp0b0Zsb2F0
KGJvb2wqIG9rLCBib29sKiBkaWRSZWFkTnVtYmVyKQogewotICAgIHJldHVybiBjaGFyYWN0ZXJz
VG9GbG9hdChtX2RhdGEsIG1fbGVuZ3RoLCBvaywgZGlkUmVhZE51bWJlcik7CisgICAgcmV0dXJu
IGNoYXJhY3RlcnNUb0Zsb2F0KGNoYXJhY3RlcnMxNigpLCBtX2xlbmd0aCwgb2ssIGRpZFJlYWRO
dW1iZXIpOwogfQogCi1zdGF0aWMgYm9vbCBlcXVhbChjb25zdCBVQ2hhciogYSwgY29uc3QgY2hh
ciogYiwgaW50IGxlbmd0aCkKK3N0YXRpYyBib29sIGVxdWFsKGNvbnN0IFVDaGFyKiBhLCBjb25z
dCBMQ2hhciogYiwgaW50IGxlbmd0aCkKIHsKICAgICBBU1NFUlQobGVuZ3RoID49IDApOwogICAg
IHdoaWxlIChsZW5ndGgtLSkgewpAQCAtNTA2LDcgKzY0Myw3IEBAIHN0YXRpYyBib29sIGVxdWFs
KGNvbnN0IFVDaGFyKiBhLCBjb25zdCAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBlcXVh
bElnbm9yaW5nQ2FzZShjb25zdCBVQ2hhciogYSwgY29uc3QgY2hhciogYiwgdW5zaWduZWQgbGVu
Z3RoKQorYm9vbCBlcXVhbElnbm9yaW5nQ2FzZShjb25zdCBVQ2hhciogYSwgY29uc3QgTENoYXIq
IGIsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICB3aGlsZSAobGVuZ3RoLS0pIHsKICAgICAgICAg
dW5zaWduZWQgY2hhciBiYyA9ICpiKys7CkBAIC01NDcsMjAgKzY4NCwyMCBAQCBpbnQgY29kZVBv
aW50Q29tcGFyZShjb25zdCBTdHJpbmdJbXBsKiBzCiAKIHNpemVfdCBTdHJpbmdJbXBsOjpmaW5k
KFVDaGFyIGMsIHVuc2lnbmVkIHN0YXJ0KQogewotICAgIHJldHVybiBXVEY6OmZpbmQobV9kYXRh
LCBtX2xlbmd0aCwgYywgc3RhcnQpOworICAgIHJldHVybiBXVEY6OmZpbmQoY2hhcmFjdGVyczE2
KCksIG1fbGVuZ3RoLCBjLCBzdGFydCk7CiB9CiAKIHNpemVfdCBTdHJpbmdJbXBsOjpmaW5kKENo
YXJhY3Rlck1hdGNoRnVuY3Rpb25QdHIgbWF0Y2hGdW5jdGlvbiwgdW5zaWduZWQgc3RhcnQpCiB7
Ci0gICAgcmV0dXJuIFdURjo6ZmluZChtX2RhdGEsIG1fbGVuZ3RoLCBtYXRjaEZ1bmN0aW9uLCBz
dGFydCk7CisgICAgcmV0dXJuIFdURjo6ZmluZChjaGFyYWN0ZXJzMTYoKSwgbV9sZW5ndGgsIG1h
dGNoRnVuY3Rpb24sIHN0YXJ0KTsKIH0KIAotc2l6ZV90IFN0cmluZ0ltcGw6OmZpbmQoY29uc3Qg
Y2hhciogbWF0Y2hTdHJpbmcsIHVuc2lnbmVkIGluZGV4KQorc2l6ZV90IFN0cmluZ0ltcGw6OmZp
bmQoY29uc3QgTENoYXIqIG1hdGNoU3RyaW5nLCB1bnNpZ25lZCBpbmRleCkKIHsKICAgICAvLyBD
aGVjayBmb3IgbnVsbCBvciBlbXB0eSBzdHJpbmcgdG8gbWF0Y2ggYWdhaW5zdAogICAgIGlmICgh
bWF0Y2hTdHJpbmcpCiAgICAgICAgIHJldHVybiBub3RGb3VuZDsKLSAgICBzaXplX3QgbWF0Y2hT
dHJpbmdMZW5ndGggPSBzdHJsZW4obWF0Y2hTdHJpbmcpOworICAgIHNpemVfdCBtYXRjaFN0cmlu
Z0xlbmd0aCA9IHN0cmxlbihyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihtYXRjaFN0cmlu
ZykpOwogICAgIGlmIChtYXRjaFN0cmluZ0xlbmd0aCA+IG51bWVyaWNfbGltaXRzPHVuc2lnbmVk
Pjo6bWF4KCkpCiAgICAgICAgIENSQVNIKCk7CiAgICAgdW5zaWduZWQgbWF0Y2hMZW5ndGggPSBt
YXRjaFN0cmluZ0xlbmd0aDsKQEAgLTU2OSw3ICs3MDYsNyBAQCBzaXplX3QgU3RyaW5nSW1wbDo6
ZmluZChjb25zdCBjaGFyKiBtYXRjCiAKICAgICAvLyBPcHRpbWl6YXRpb24gMTogZmFzdCBjYXNl
IGZvciBzdHJpbmdzIG9mIGxlbmd0aCAxLgogICAgIGlmIChtYXRjaExlbmd0aCA9PSAxKQotICAg
ICAgICByZXR1cm4gV1RGOjpmaW5kKGNoYXJhY3RlcnMoKSwgbGVuZ3RoKCksICooY29uc3QgdW5z
aWduZWQgY2hhciopbWF0Y2hTdHJpbmcsIGluZGV4KTsKKyAgICAgICAgcmV0dXJuIFdURjo6Zmlu
ZChjaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoKCksICptYXRjaFN0cmluZywgaW5kZXgpOwogCiAgICAg
Ly8gQ2hlY2sgaW5kZXggJiBtYXRjaExlbmd0aCBhcmUgaW4gcmFuZ2UuCiAgICAgaWYgKGluZGV4
ID4gbGVuZ3RoKCkpCkBAIC01ODEsNyArNzE4LDYgQEAgc2l6ZV90IFN0cmluZ0ltcGw6OmZpbmQo
Y29uc3QgY2hhciogbWF0YwogICAgIHVuc2lnbmVkIGRlbHRhID0gc2VhcmNoTGVuZ3RoIC0gbWF0
Y2hMZW5ndGg7CiAKICAgICBjb25zdCBVQ2hhciogc2VhcmNoQ2hhcmFjdGVycyA9IGNoYXJhY3Rl
cnMoKSArIGluZGV4OwotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIG1hdGNoQ2hhcmFjdGVycyA9
IChjb25zdCB1bnNpZ25lZCBjaGFyKiltYXRjaFN0cmluZzsKIAogICAgIC8vIE9wdGltaXphdGlv
biAyOiBrZWVwIGEgcnVubmluZyBoYXNoIG9mIHRoZSBzdHJpbmdzLAogICAgIC8vIG9ubHkgY2Fs
bCBtZW1jbXAgaWYgdGhlIGhhc2hlcyBtYXRjaC4KQEAgLTU4OSw3ICs3MjUsNyBAQCBzaXplX3Qg
U3RyaW5nSW1wbDo6ZmluZChjb25zdCBjaGFyKiBtYXRjCiAgICAgdW5zaWduZWQgbWF0Y2hIYXNo
ID0gMDsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWF0Y2hMZW5ndGg7ICsraSkgewog
ICAgICAgICBzZWFyY2hIYXNoICs9IHNlYXJjaENoYXJhY3RlcnNbaV07Ci0gICAgICAgIG1hdGNo
SGFzaCArPSBtYXRjaENoYXJhY3RlcnNbaV07CisgICAgICAgIG1hdGNoSGFzaCArPSBtYXRjaFN0
cmluZ1tpXTsKICAgICB9CiAKICAgICB1bnNpZ25lZCBpID0gMDsKQEAgLTYwNCwxMiArNzQwLDEy
IEBAIHNpemVfdCBTdHJpbmdJbXBsOjpmaW5kKGNvbnN0IGNoYXIqIG1hdGMKICAgICByZXR1cm4g
aW5kZXggKyBpOwogfQogCi1zaXplX3QgU3RyaW5nSW1wbDo6ZmluZElnbm9yaW5nQ2FzZShjb25z
dCBjaGFyKiBtYXRjaFN0cmluZywgdW5zaWduZWQgaW5kZXgpCitzaXplX3QgU3RyaW5nSW1wbDo6
ZmluZElnbm9yaW5nQ2FzZShjb25zdCBMQ2hhciogbWF0Y2hTdHJpbmcsIHVuc2lnbmVkIGluZGV4
KQogewogICAgIC8vIENoZWNrIGZvciBudWxsIG9yIGVtcHR5IHN0cmluZyB0byBtYXRjaCBhZ2Fp
bnN0CiAgICAgaWYgKCFtYXRjaFN0cmluZykKICAgICAgICAgcmV0dXJuIG5vdEZvdW5kOwotICAg
IHNpemVfdCBtYXRjaFN0cmluZ0xlbmd0aCA9IHN0cmxlbihtYXRjaFN0cmluZyk7CisgICAgc2l6
ZV90IG1hdGNoU3RyaW5nTGVuZ3RoID0gc3RybGVuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hh
ciAqPihtYXRjaFN0cmluZykpOwogICAgIGlmIChtYXRjaFN0cmluZ0xlbmd0aCA+IG51bWVyaWNf
bGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpCiAgICAgICAgIENSQVNIKCk7CiAgICAgdW5zaWduZWQg
bWF0Y2hMZW5ndGggPSBtYXRjaFN0cmluZ0xlbmd0aDsKQEAgLTY0OCw3ICs3ODQsNyBAQCBzaXpl
X3QgU3RyaW5nSW1wbDo6ZmluZChTdHJpbmdJbXBsKiBtYXRjCiAKICAgICAvLyBPcHRpbWl6YXRp
b24gMTogZmFzdCBjYXNlIGZvciBzdHJpbmdzIG9mIGxlbmd0aCAxLgogICAgIGlmIChtYXRjaExl
bmd0aCA9PSAxKQotICAgICAgICByZXR1cm4gV1RGOjpmaW5kKGNoYXJhY3RlcnMoKSwgbGVuZ3Ro
KCksIG1hdGNoU3RyaW5nLT5jaGFyYWN0ZXJzKClbMF0sIGluZGV4KTsKKyAgICAgICAgcmV0dXJu
IFdURjo6ZmluZChjaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoKCksIG1hdGNoU3RyaW5nLT5jaGFyYWN0
ZXJzMTYoKVswXSwgaW5kZXgpOwogCiAgICAgLy8gQ2hlY2sgaW5kZXggJiBtYXRjaExlbmd0aCBh
cmUgaW4gcmFuZ2UuCiAgICAgaWYgKGluZGV4ID4gbGVuZ3RoKCkpCkBAIC03MTYsNyArODUyLDcg
QEAgc2l6ZV90IFN0cmluZ0ltcGw6OmZpbmRJZ25vcmluZ0Nhc2UoU3RyaQogCiBzaXplX3QgU3Ry
aW5nSW1wbDo6cmV2ZXJzZUZpbmQoVUNoYXIgYywgdW5zaWduZWQgaW5kZXgpCiB7Ci0gICAgcmV0
dXJuIFdURjo6cmV2ZXJzZUZpbmQobV9kYXRhLCBtX2xlbmd0aCwgYywgaW5kZXgpOworICAgIHJl
dHVybiBXVEY6OnJldmVyc2VGaW5kKGNoYXJhY3RlcnMxNigpLCBtX2xlbmd0aCwgYywgaW5kZXgp
OwogfQogCiBzaXplX3QgU3RyaW5nSW1wbDo6cmV2ZXJzZUZpbmQoU3RyaW5nSW1wbCogbWF0Y2hT
dHJpbmcsIHVuc2lnbmVkIGluZGV4KQpAQCAtNzMwLDcgKzg2Niw3IEBAIHNpemVfdCBTdHJpbmdJ
bXBsOjpyZXZlcnNlRmluZChTdHJpbmdJbXAKIAogICAgIC8vIE9wdGltaXphdGlvbiAxOiBmYXN0
IGNhc2UgZm9yIHN0cmluZ3Mgb2YgbGVuZ3RoIDEuCiAgICAgaWYgKG1hdGNoTGVuZ3RoID09IDEp
Ci0gICAgICAgIHJldHVybiBXVEY6OnJldmVyc2VGaW5kKGNoYXJhY3RlcnMoKSwgbGVuZ3RoKCks
IG1hdGNoU3RyaW5nLT5jaGFyYWN0ZXJzKClbMF0sIGluZGV4KTsKKyAgICAgICAgcmV0dXJuIFdU
Rjo6cmV2ZXJzZUZpbmQoY2hhcmFjdGVyczE2KCksIGxlbmd0aCgpLCBtYXRjaFN0cmluZy0+Y2hh
cmFjdGVycygpWzBdLCBpbmRleCk7CiAKICAgICAvLyBDaGVjayBpbmRleCAmIG1hdGNoTGVuZ3Ro
IGFyZSBpbiByYW5nZS4KICAgICBpZiAobWF0Y2hMZW5ndGggPiBsZW5ndGgoKSkKQEAgLTgwMywx
NyArOTM5LDU1IEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6cmVwbGEKICAg
ICBpZiAob2xkQyA9PSBuZXdDKQogICAgICAgICByZXR1cm4gdGhpczsKICAgICB1bnNpZ25lZCBp
OwotICAgIGZvciAoaSA9IDA7IGkgIT0gbV9sZW5ndGg7ICsraSkKLSAgICAgICAgaWYgKG1fZGF0
YVtpXSA9PSBvbGRDKQorICAgIGZvciAoaSA9IDA7IGkgIT0gbV9sZW5ndGg7ICsraSkgeworICAg
ICAgICBVQ2hhciBjID0gaXM4Qml0KCkgPyBtX2RhdGE4W2ldIDogbV9kYXRhMTZbaV07CisgICAg
ICAgIGlmIChjID09IG9sZEMpCiAgICAgICAgICAgICBicmVhazsKKyAgICB9CiAgICAgaWYgKGkg
PT0gbV9sZW5ndGgpCiAgICAgICAgIHJldHVybiB0aGlzOwogCisgICAgaWYgKGlzOEJpdCgpKSB7
CisgICAgICAgIGlmIChvbGRDID4gMHhmZikKKyAgICAgICAgICAgIC8vIExvb2tpbmcgZm9yIGEg
MTYgYml0IGNoYXIgaW4gYW4gOCBiaXQgc3RyaW5nLCB3ZSdyZSBkb25lLgorICAgICAgICAgICAg
cmV0dXJuIHRoaXM7CisKKyAgICAgICAgaWYgKG5ld0MgPD0gMHhmZikgeworICAgICAgICAgICAg
TENoYXIqIGRhdGE7CisgICAgICAgICAgICBMQ2hhciBvbGRDaGFyID0gc3RhdGljX2Nhc3Q8TENo
YXI+KG9sZEMpOworICAgICAgICAgICAgTENoYXIgbmV3Q2hhciA9IHN0YXRpY19jYXN0PExDaGFy
PihuZXdDKTsKKworICAgICAgICAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IG5ld0ltcGwgPSBjcmVh
dGVVbmluaXRpYWxpemVkKG1fbGVuZ3RoLCBkYXRhKTsKKworICAgICAgICAgICAgZm9yIChpID0g
MDsgaSAhPSBtX2xlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgY2hhciBjaCA9IG1fZGF0
YThbaV07CisgICAgICAgICAgICAgICAgaWYgKGNoID09IG9sZENoYXIpCisgICAgICAgICAgICAg
ICAgICAgIGNoID0gbmV3Q2hhcjsKKyAgICAgICAgICAgICAgICBkYXRhW2ldID0gY2g7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbmV3SW1wbC5yZWxlYXNlKCk7CisgICAgICAg
IH0KKworICAgICAgICAvLyBUaGVyZSBpcyB0aGUgcG9zc2liaWxpdHkgd2UgbmVlZCB0byB1cCBj
b252ZXJ0IGZyb20gOCB0byAxNiBiaXQsCisgICAgICAgIC8vIGNyZWF0ZSBhIDE2IGJpdCBzdHJp
bmcgZm9yIHRoZSByZXN1bHQuCisgICAgICAgIFVDaGFyKiBkYXRhOworICAgICAgICBSZWZQdHI8
U3RyaW5nSW1wbD4gbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQobV9sZW5ndGgsIGRhdGEp
OworCisgICAgICAgIGZvciAoaSA9IDA7IGkgIT0gbV9sZW5ndGg7ICsraSkgeworICAgICAgICAg
ICAgVUNoYXIgY2ggPSBtX2RhdGE4W2ldOworICAgICAgICAgICAgaWYgKGNoID09IG9sZEMpCisg
ICAgICAgICAgICAgICAgY2ggPSBuZXdDOworICAgICAgICAgICAgZGF0YVtpXSA9IGNoOworICAg
ICAgICB9CisKKyAgICAgICAgcmV0dXJuIG5ld0ltcGwucmVsZWFzZSgpOworICAgIH0KKwogICAg
IFVDaGFyKiBkYXRhOwogICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0gY3JlYXRlVW5p
bml0aWFsaXplZChtX2xlbmd0aCwgZGF0YSk7CiAKICAgICBmb3IgKGkgPSAwOyBpICE9IG1fbGVu
Z3RoOyArK2kpIHsKLSAgICAgICAgVUNoYXIgY2ggPSBtX2RhdGFbaV07CisgICAgICAgIFVDaGFy
IGNoID0gbV9kYXRhMTZbaV07CiAgICAgICAgIGlmIChjaCA9PSBvbGRDKQogICAgICAgICAgICAg
Y2ggPSBuZXdDOwogICAgICAgICBkYXRhW2ldID0gY2g7CkBAIC04MjgsMTggKzEwMDIsNDMgQEAg
UGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpyZXBsYQogICAgIHVuc2lnbmVkIGxl
bmd0aFRvSW5zZXJ0ID0gc3RyID8gc3RyLT5sZW5ndGgoKSA6IDA7CiAgICAgaWYgKCFsZW5ndGhU
b1JlcGxhY2UgJiYgIWxlbmd0aFRvSW5zZXJ0KQogICAgICAgICByZXR1cm4gdGhpczsKLSAgICBV
Q2hhciogZGF0YTsKIAogICAgIGlmICgobGVuZ3RoKCkgLSBsZW5ndGhUb1JlcGxhY2UpID49IChu
dW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIC0gbGVuZ3RoVG9JbnNlcnQpKQogICAgICAg
ICBDUkFTSCgpOwogCisgICAgaWYgKGlzOEJpdCgpICYmICghc3RyIHx8IHN0ci0+aXM4Qml0KCkp
KSB7CisgICAgICAgIExDaGFyKiBkYXRhOworICAgICAgICBSZWZQdHI8U3RyaW5nSW1wbD4gbmV3
SW1wbCA9CisgICAgICAgIGNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoKCkgLSBsZW5ndGhUb1Jl
cGxhY2UgKyBsZW5ndGhUb0luc2VydCwgZGF0YSk7CisgICAgICAgIG1lbWNweShkYXRhLCBtX2Rh
dGE4LCBwb3NpdGlvbiAqIHNpemVvZihjaGFyKSk7CisgICAgICAgIGlmIChzdHIpCisgICAgICAg
ICAgICBtZW1jcHkoZGF0YSArIHBvc2l0aW9uLCBzdHItPm1fZGF0YTgsIGxlbmd0aFRvSW5zZXJ0
ICogc2l6ZW9mKGNoYXIpKTsKKyAgICAgICAgbWVtY3B5KGRhdGEgKyBwb3NpdGlvbiArIGxlbmd0
aFRvSW5zZXJ0LCBtX2RhdGE4ICsgcG9zaXRpb24gKyBsZW5ndGhUb1JlcGxhY2UsCisgICAgICAg
ICAgICAgICAobGVuZ3RoKCkgLSBwb3NpdGlvbiAtIGxlbmd0aFRvUmVwbGFjZSkgKiBzaXplb2Yo
Y2hhcikpOworICAgICAgICByZXR1cm4gbmV3SW1wbC5yZWxlYXNlKCk7CisgICAgfQorICAgIFVD
aGFyKiBkYXRhOwogICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0KICAgICAgICAgY3Jl
YXRlVW5pbml0aWFsaXplZChsZW5ndGgoKSAtIGxlbmd0aFRvUmVwbGFjZSArIGxlbmd0aFRvSW5z
ZXJ0LCBkYXRhKTsKLSAgICBtZW1jcHkoZGF0YSwgY2hhcmFjdGVycygpLCBwb3NpdGlvbiAqIHNp
emVvZihVQ2hhcikpOwotICAgIGlmIChzdHIpCi0gICAgICAgIG1lbWNweShkYXRhICsgcG9zaXRp
b24sIHN0ci0+Y2hhcmFjdGVycygpLCBsZW5ndGhUb0luc2VydCAqIHNpemVvZihVQ2hhcikpOwot
ICAgIG1lbWNweShkYXRhICsgcG9zaXRpb24gKyBsZW5ndGhUb0luc2VydCwgY2hhcmFjdGVycygp
ICsgcG9zaXRpb24gKyBsZW5ndGhUb1JlcGxhY2UsCi0gICAgICAgIChsZW5ndGgoKSAtIHBvc2l0
aW9uIC0gbGVuZ3RoVG9SZXBsYWNlKSAqIHNpemVvZihVQ2hhcikpOworICAgIGlmIChpczhCaXQo
KSkKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBvc2l0aW9uOyBpKyspCisgICAg
ICAgICAgICBkYXRhW2ldID0gbV9kYXRhOFtpXTsKKyAgICBlbHNlCisgICAgICAgIG1lbWNweShk
YXRhLCBtX2RhdGExNiwgcG9zaXRpb24gKiBzaXplb2YoVUNoYXIpKTsKKyAgICBpZiAoc3RyKSB7
CisgICAgICAgIGlmIChzdHItPmlzOEJpdCgpKQorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxlbmd0aFRvSW5zZXJ0OyBpKyspCisgICAgICAgICAgICAgICAgZGF0YVtpICsg
cG9zaXRpb25dID0gc3RyLT5tX2RhdGE4W2ldOworICAgICAgICBlbHNlCisgICAgICAgICAgICBt
ZW1jcHkoZGF0YSArIHBvc2l0aW9uLCBzdHItPm1fZGF0YTE2LCBsZW5ndGhUb0luc2VydCAqIHNp
emVvZihVQ2hhcikpOworICAgIH0KKyAgICBpZiAoaXM4Qml0KCkpIHsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aCgpIC0gcG9zaXRpb24gLSBsZW5ndGhUb1JlcGxhY2U7
IGkrKykKKyAgICAgICAgICAgIGRhdGFbaSArIHBvc2l0aW9uICsgbGVuZ3RoVG9JbnNlcnRdID0g
bV9kYXRhOFtpICsgcG9zaXRpb24gKyBsZW5ndGhUb1JlcGxhY2VdOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIG1lbWNweShkYXRhICsgcG9zaXRpb24gKyBsZW5ndGhUb0luc2VydCwgY2hhcmFjdGVy
cygpICsgcG9zaXRpb24gKyBsZW5ndGhUb1JlcGxhY2UsCisgICAgICAgICAgICAobGVuZ3RoKCkg
LSBwb3NpdGlvbiAtIGxlbmd0aFRvUmVwbGFjZSkgKiBzaXplb2YoVUNoYXIpKTsKKyAgICB9CiAg
ICAgcmV0dXJuIG5ld0ltcGwucmVsZWFzZSgpOwogfQogCkBAIC04NTIsMTMgKzEwNTEsMTMgQEAg
UGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpyZXBsYQogICAgIHNpemVfdCBzcmNT
ZWdtZW50U3RhcnQgPSAwOwogICAgIHVuc2lnbmVkIG1hdGNoQ291bnQgPSAwOwogICAgIAotICAg
IC8vIENvdW50IHRoZSBtYXRjaGVzCisgICAgLy8gQ291bnQgdGhlIG1hdGNoZXMuCiAgICAgd2hp
bGUgKChzcmNTZWdtZW50U3RhcnQgPSBmaW5kKHBhdHRlcm4sIHNyY1NlZ21lbnRTdGFydCkpICE9
IG5vdEZvdW5kKSB7CiAgICAgICAgICsrbWF0Y2hDb3VudDsKICAgICAgICAgKytzcmNTZWdtZW50
U3RhcnQ7CiAgICAgfQogICAgIAotICAgIC8vIElmIHdlIGhhdmUgMCBtYXRjaGVzLCB3ZSBkb24n
dCBoYXZlIHRvIGRvIGFueSBtb3JlIHdvcmsKKyAgICAvLyBJZiB3ZSBoYXZlIDAgbWF0Y2hlcyB0
aGVuIHdlIGRvbid0IGhhdmUgdG8gZG8gYW55IG1vcmUgd29yayB0byBkby4KICAgICBpZiAoIW1h
dGNoQ291bnQpCiAgICAgICAgIHJldHVybiB0aGlzOwogICAgIApAQCAtODcyLDI2ICsxMDcxLDc2
IEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6cmVwbGEKIAogICAgIG5ld1Np
emUgKz0gcmVwbGFjZVNpemU7CiAKLSAgICBVQ2hhciogZGF0YTsKLSAgICBSZWZQdHI8U3RyaW5n
SW1wbD4gbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQobmV3U2l6ZSwgZGF0YSk7Ci0KLSAg
ICAvLyBDb25zdHJ1Y3QgdGhlIG5ldyBkYXRhCisgICAgLy8gQ29uc3RydWN0IHRoZSBuZXcgZGF0
YS4KICAgICBzaXplX3Qgc3JjU2VnbWVudEVuZDsKICAgICB1bnNpZ25lZCBzcmNTZWdtZW50TGVu
Z3RoOwogICAgIHNyY1NlZ21lbnRTdGFydCA9IDA7CiAgICAgdW5zaWduZWQgZHN0T2Zmc2V0ID0g
MDsKKyAgICBib29sIHNyY0lzOEJpdCA9IGlzOEJpdCgpOworICAgIGJvb2wgcmVwbGFjZW1lbnRJ
czhCaXQgPSByZXBsYWNlbWVudC0+aXM4Qml0KCk7CiAgICAgCisgICAgLy8gVGhlcmUgYXJlIDQg
Y2FzZXM6CisgICAgLy8gMS4gVGhpcyBhbmQgcmVwbGFjZW1lbnQgYXJlIGJvdGggOCBiaXQuCisg
ICAgLy8gMi4gVGhpcyBhbmQgcmVwbGFjZW1lbnQgYXJlIGJvdGggMTYgYml0LgorICAgIC8vIDMu
IFRoaXMgaXMgOCBiaXQgYW5kIHJlcGxhY2VtZW50IGlzIDE2IGJpdC4KKyAgICAvLyA0LiBUaGlz
IGlzIDE2IGJpdCBhbmQgcmVwbGFjZW1lbnQgaXMgOCBiaXQuCisgICAgaWYgKHNyY0lzOEJpdCAm
JiByZXBsYWNlbWVudElzOEJpdCkgeworICAgICAgICAvLyBDYXNlIDEKKyAgICAgICAgTENoYXIq
IGRhdGE7CisgICAgICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0gY3JlYXRlVW5pbml0
aWFsaXplZChuZXdTaXplLCBkYXRhKTsKKworICAgICAgICB3aGlsZSAoKHNyY1NlZ21lbnRFbmQg
PSBmaW5kKHBhdHRlcm4sIHNyY1NlZ21lbnRTdGFydCkpICE9IG5vdEZvdW5kKSB7CisgICAgICAg
ICAgICBzcmNTZWdtZW50TGVuZ3RoID0gc3JjU2VnbWVudEVuZCAtIHNyY1NlZ21lbnRTdGFydDsK
KyAgICAgICAgICAgIG1lbWNweShkYXRhICsgZHN0T2Zmc2V0LCBtX2RhdGE4ICsgc3JjU2VnbWVu
dFN0YXJ0LCBzcmNTZWdtZW50TGVuZ3RoICogc2l6ZW9mKGNoYXIpKTsKKyAgICAgICAgICAgIGRz
dE9mZnNldCArPSBzcmNTZWdtZW50TGVuZ3RoOworICAgICAgICAgICAgbWVtY3B5KGRhdGEgKyBk
c3RPZmZzZXQsIHJlcGxhY2VtZW50LT5tX2RhdGE4LCByZXBTdHJMZW5ndGggKiBzaXplb2YoY2hh
cikpOworICAgICAgICAgICAgZHN0T2Zmc2V0ICs9IHJlcFN0ckxlbmd0aDsKKyAgICAgICAgICAg
IHNyY1NlZ21lbnRTdGFydCA9IHNyY1NlZ21lbnRFbmQgKyAxOworICAgICAgICB9CisKKyAgICAg
ICAgc3JjU2VnbWVudExlbmd0aCA9IG1fbGVuZ3RoIC0gc3JjU2VnbWVudFN0YXJ0OworICAgICAg
ICBtZW1jcHkoZGF0YSArIGRzdE9mZnNldCwgbV9kYXRhOCArIHNyY1NlZ21lbnRTdGFydCwgc3Jj
U2VnbWVudExlbmd0aCAqIHNpemVvZihjaGFyKSk7CisKKyAgICAgICAgQVNTRVJUKGRzdE9mZnNl
dCArIHNyY1NlZ21lbnRMZW5ndGggPT0gbmV3SW1wbC0+bGVuZ3RoKCkpOworCisgICAgICAgIHJl
dHVybiBuZXdJbXBsLnJlbGVhc2UoKTsKKyAgICB9CisKKyAgICBVQ2hhciogZGF0YTsKKyAgICBS
ZWZQdHI8U3RyaW5nSW1wbD4gbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQobmV3U2l6ZSwg
ZGF0YSk7CisKICAgICB3aGlsZSAoKHNyY1NlZ21lbnRFbmQgPSBmaW5kKHBhdHRlcm4sIHNyY1Nl
Z21lbnRTdGFydCkpICE9IG5vdEZvdW5kKSB7CiAgICAgICAgIHNyY1NlZ21lbnRMZW5ndGggPSBz
cmNTZWdtZW50RW5kIC0gc3JjU2VnbWVudFN0YXJ0OwotICAgICAgICBtZW1jcHkoZGF0YSArIGRz
dE9mZnNldCwgbV9kYXRhICsgc3JjU2VnbWVudFN0YXJ0LCBzcmNTZWdtZW50TGVuZ3RoICogc2l6
ZW9mKFVDaGFyKSk7CisgICAgICAgIGlmIChzcmNJczhCaXQpIHsKKyAgICAgICAgICAgIC8vIENh
c2UgMy4KKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzcmNTZWdtZW50TGVu
Z3RoOyBpKyspCisgICAgICAgICAgICAgICAgZGF0YVtpICsgZHN0T2Zmc2V0XSA9IG1fZGF0YThb
aSArIHNyY1NlZ21lbnRTdGFydF07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBD
YXNlcyAyICYgNC4KKyAgICAgICAgICAgIG1lbWNweShkYXRhICsgZHN0T2Zmc2V0LCBtX2RhdGEx
NiArIHNyY1NlZ21lbnRTdGFydCwgc3JjU2VnbWVudExlbmd0aCAqIHNpemVvZihVQ2hhcikpOwor
ICAgICAgICB9CiAgICAgICAgIGRzdE9mZnNldCArPSBzcmNTZWdtZW50TGVuZ3RoOwotICAgICAg
ICBtZW1jcHkoZGF0YSArIGRzdE9mZnNldCwgcmVwbGFjZW1lbnQtPm1fZGF0YSwgcmVwU3RyTGVu
Z3RoICogc2l6ZW9mKFVDaGFyKSk7CisgICAgICAgIGlmIChyZXBsYWNlbWVudElzOEJpdCkgewor
ICAgICAgICAgICAgLy8gQ2FzZSA0LgorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHJlcFN0ckxlbmd0aDsgaSsrKQorICAgICAgICAgICAgICAgIGRhdGFbaSArIGRzdE9mZnNl
dF0gPSByZXBsYWNlbWVudC0+bV9kYXRhOFtpXTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIC8vIENhc2VzIDIgJiAzLgorICAgICAgICAgICAgbWVtY3B5KGRhdGEgKyBkc3RPZmZzZXQs
IHJlcGxhY2VtZW50LT5tX2RhdGExNiwgcmVwU3RyTGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7Cisg
ICAgICAgIH0KICAgICAgICAgZHN0T2Zmc2V0ICs9IHJlcFN0ckxlbmd0aDsKICAgICAgICAgc3Jj
U2VnbWVudFN0YXJ0ID0gc3JjU2VnbWVudEVuZCArIDE7CiAgICAgfQogCiAgICAgc3JjU2VnbWVu
dExlbmd0aCA9IG1fbGVuZ3RoIC0gc3JjU2VnbWVudFN0YXJ0OwotICAgIG1lbWNweShkYXRhICsg
ZHN0T2Zmc2V0LCBtX2RhdGEgKyBzcmNTZWdtZW50U3RhcnQsIHNyY1NlZ21lbnRMZW5ndGggKiBz
aXplb2YoVUNoYXIpKTsKKyAgICBpZiAoc3JjSXM4Qml0KSB7CisgICAgICAgIC8vIENhc2UgMy4K
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNyY1NlZ21lbnRMZW5ndGg7IGkrKykK
KyAgICAgICAgICAgIGRhdGFbaSArIGRzdE9mZnNldF0gPSBtX2RhdGE4W2kgKyBzcmNTZWdtZW50
U3RhcnRdOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIENhc2VzIDIgJiA0LgorICAgICAgICBt
ZW1jcHkoZGF0YSArIGRzdE9mZnNldCwgbV9kYXRhMTYgKyBzcmNTZWdtZW50U3RhcnQsIHNyY1Nl
Z21lbnRMZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKKyAgICB9CiAKICAgICBBU1NFUlQoZHN0T2Zm
c2V0ICsgc3JjU2VnbWVudExlbmd0aCA9PSBuZXdJbXBsLT5sZW5ndGgoKSk7CiAKQEAgLTkxMSw3
ICsxMTYwLDcgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpyZXBsYQogICAg
IHNpemVfdCBzcmNTZWdtZW50U3RhcnQgPSAwOwogICAgIHVuc2lnbmVkIG1hdGNoQ291bnQgPSAw
OwogICAgIAotICAgIC8vIENvdW50IHRoZSBtYXRjaGVzCisgICAgLy8gQ291bnQgdGhlIG1hdGNo
ZXMuCiAgICAgd2hpbGUgKChzcmNTZWdtZW50U3RhcnQgPSBmaW5kKHBhdHRlcm4sIHNyY1NlZ21l
bnRTdGFydCkpICE9IG5vdEZvdW5kKSB7CiAgICAgICAgICsrbWF0Y2hDb3VudDsKICAgICAgICAg
c3JjU2VnbWVudFN0YXJ0ICs9IHBhdHRlcm5MZW5ndGg7CkBAIC05MzAsMjYgKzExNzksNzUgQEAg
UGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpyZXBsYQogCiAgICAgbmV3U2l6ZSAr
PSBtYXRjaENvdW50ICogcmVwU3RyTGVuZ3RoOwogCi0gICAgVUNoYXIqIGRhdGE7Ci0gICAgUmVm
UHRyPFN0cmluZ0ltcGw+IG5ld0ltcGwgPSBjcmVhdGVVbmluaXRpYWxpemVkKG5ld1NpemUsIGRh
dGEpOwogICAgIAogICAgIC8vIENvbnN0cnVjdCB0aGUgbmV3IGRhdGEKICAgICBzaXplX3Qgc3Jj
U2VnbWVudEVuZDsKICAgICB1bnNpZ25lZCBzcmNTZWdtZW50TGVuZ3RoOwogICAgIHNyY1NlZ21l
bnRTdGFydCA9IDA7CiAgICAgdW5zaWduZWQgZHN0T2Zmc2V0ID0gMDsKKyAgICBib29sIHNyY0lz
OEJpdCA9IGlzOEJpdCgpOworICAgIGJvb2wgcmVwbGFjZW1lbnRJczhCaXQgPSByZXBsYWNlbWVu
dC0+aXM4Qml0KCk7CiAgICAgCisgICAgLy8gVGhlcmUgYXJlIDQgY2FzZXM6CisgICAgLy8gMS4g
VGhpcyBhbmQgcmVwbGFjZW1lbnQgYXJlIGJvdGggOCBiaXQuCisgICAgLy8gMi4gVGhpcyBhbmQg
cmVwbGFjZW1lbnQgYXJlIGJvdGggMTYgYml0LgorICAgIC8vIDMuIFRoaXMgaXMgOCBiaXQgYW5k
IHJlcGxhY2VtZW50IGlzIDE2IGJpdC4KKyAgICAvLyA0LiBUaGlzIGlzIDE2IGJpdCBhbmQgcmVw
bGFjZW1lbnQgaXMgOCBiaXQuCisgICAgaWYgKHNyY0lzOEJpdCAmJiByZXBsYWNlbWVudElzOEJp
dCkgeworICAgICAgICAvLyBDYXNlIDEKKyAgICAgICAgTENoYXIqIGRhdGE7CisgICAgICAgIFJl
ZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChuZXdTaXplLCBk
YXRhKTsKKyAgICAgICAgd2hpbGUgKChzcmNTZWdtZW50RW5kID0gZmluZChwYXR0ZXJuLCBzcmNT
ZWdtZW50U3RhcnQpKSAhPSBub3RGb3VuZCkgeworICAgICAgICAgICAgc3JjU2VnbWVudExlbmd0
aCA9IHNyY1NlZ21lbnRFbmQgLSBzcmNTZWdtZW50U3RhcnQ7CisgICAgICAgICAgICBtZW1jcHko
ZGF0YSArIGRzdE9mZnNldCwgbV9kYXRhOCArIHNyY1NlZ21lbnRTdGFydCwgc3JjU2VnbWVudExl
bmd0aCAqIHNpemVvZihjaGFyKSk7CisgICAgICAgICAgICBkc3RPZmZzZXQgKz0gc3JjU2VnbWVu
dExlbmd0aDsKKyAgICAgICAgICAgIG1lbWNweShkYXRhICsgZHN0T2Zmc2V0LCByZXBsYWNlbWVu
dC0+bV9kYXRhOCwgcmVwU3RyTGVuZ3RoICogc2l6ZW9mKGNoYXIpKTsKKyAgICAgICAgICAgIGRz
dE9mZnNldCArPSByZXBTdHJMZW5ndGg7CisgICAgICAgICAgICBzcmNTZWdtZW50U3RhcnQgPSBz
cmNTZWdtZW50RW5kICsgcGF0dGVybkxlbmd0aDsKKyAgICAgICAgfQorCisgICAgICAgIHNyY1Nl
Z21lbnRMZW5ndGggPSBtX2xlbmd0aCAtIHNyY1NlZ21lbnRTdGFydDsKKyAgICAgICAgbWVtY3B5
KGRhdGEgKyBkc3RPZmZzZXQsIG1fZGF0YTggKyBzcmNTZWdtZW50U3RhcnQsIHNyY1NlZ21lbnRM
ZW5ndGggKiBzaXplb2YoY2hhcikpOworCisgICAgICAgIEFTU0VSVChkc3RPZmZzZXQgKyBzcmNT
ZWdtZW50TGVuZ3RoID09IG5ld0ltcGwtPmxlbmd0aCgpKTsKKworICAgICAgICByZXR1cm4gbmV3
SW1wbC5yZWxlYXNlKCk7CisgICAgfQorCisgICAgVUNoYXIqIGRhdGE7CisgICAgUmVmUHRyPFN0
cmluZ0ltcGw+IG5ld0ltcGwgPSBjcmVhdGVVbmluaXRpYWxpemVkKG5ld1NpemUsIGRhdGEpOwog
ICAgIHdoaWxlICgoc3JjU2VnbWVudEVuZCA9IGZpbmQocGF0dGVybiwgc3JjU2VnbWVudFN0YXJ0
KSkgIT0gbm90Rm91bmQpIHsKICAgICAgICAgc3JjU2VnbWVudExlbmd0aCA9IHNyY1NlZ21lbnRF
bmQgLSBzcmNTZWdtZW50U3RhcnQ7Ci0gICAgICAgIG1lbWNweShkYXRhICsgZHN0T2Zmc2V0LCBt
X2RhdGEgKyBzcmNTZWdtZW50U3RhcnQsIHNyY1NlZ21lbnRMZW5ndGggKiBzaXplb2YoVUNoYXIp
KTsKKyAgICAgICAgaWYgKHNyY0lzOEJpdCkgeworICAgICAgICAgICAgLy8gQ2FzZSAzLgorICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNyY1NlZ21lbnRMZW5ndGg7IGkrKykK
KyAgICAgICAgICAgICAgICBkYXRhW2kgKyBkc3RPZmZzZXRdID0gbV9kYXRhOFtpICsgc3JjU2Vn
bWVudFN0YXJ0XTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIENhc2UgMiAmIDQu
CisgICAgICAgICAgICBtZW1jcHkoZGF0YSArIGRzdE9mZnNldCwgbV9kYXRhMTYgKyBzcmNTZWdt
ZW50U3RhcnQsIHNyY1NlZ21lbnRMZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKKyAgICAgICAgfQog
ICAgICAgICBkc3RPZmZzZXQgKz0gc3JjU2VnbWVudExlbmd0aDsKLSAgICAgICAgbWVtY3B5KGRh
dGEgKyBkc3RPZmZzZXQsIHJlcGxhY2VtZW50LT5tX2RhdGEsIHJlcFN0ckxlbmd0aCAqIHNpemVv
ZihVQ2hhcikpOworICAgICAgICBpZiAocmVwbGFjZW1lbnRJczhCaXQpIHsKKyAgICAgICAgICAg
IC8vIENhc2VzIDIgJiAzLgorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJl
cFN0ckxlbmd0aDsgaSsrKQorICAgICAgICAgICAgICAgIGRhdGFbaSArIGRzdE9mZnNldF0gPSBy
ZXBsYWNlbWVudC0+bV9kYXRhOFtpXTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8v
IENhc2UgNAorICAgICAgICAgICAgbWVtY3B5KGRhdGEgKyBkc3RPZmZzZXQsIHJlcGxhY2VtZW50
LT5tX2RhdGExNiwgcmVwU3RyTGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CisgICAgICAgIH0KICAg
ICAgICAgZHN0T2Zmc2V0ICs9IHJlcFN0ckxlbmd0aDsKICAgICAgICAgc3JjU2VnbWVudFN0YXJ0
ID0gc3JjU2VnbWVudEVuZCArIHBhdHRlcm5MZW5ndGg7CiAgICAgfQogCiAgICAgc3JjU2VnbWVu
dExlbmd0aCA9IG1fbGVuZ3RoIC0gc3JjU2VnbWVudFN0YXJ0OwotICAgIG1lbWNweShkYXRhICsg
ZHN0T2Zmc2V0LCBtX2RhdGEgKyBzcmNTZWdtZW50U3RhcnQsIHNyY1NlZ21lbnRMZW5ndGggKiBz
aXplb2YoVUNoYXIpKTsKKyAgICBpZiAoc3JjSXM4Qml0KSB7CisgICAgICAgIC8vIENhc2UgMy4K
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNyY1NlZ21lbnRMZW5ndGg7IGkrKykK
KyAgICAgICAgICAgIGRhdGFbaSArIGRzdE9mZnNldF0gPSBtX2RhdGE4W2kgKyBzcmNTZWdtZW50
U3RhcnRdOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIENhc2VzIDIgJiA0LgorICAgICAgICBt
ZW1jcHkoZGF0YSArIGRzdE9mZnNldCwgbV9kYXRhMTYgKyBzcmNTZWdtZW50U3RhcnQsIHNyY1Nl
Z21lbnRMZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKKyAgICB9CiAKICAgICBBU1NFUlQoZHN0T2Zm
c2V0ICsgc3JjU2VnbWVudExlbmd0aCA9PSBuZXdJbXBsLT5sZW5ndGgoKSk7CiAKQEAgLTk2MSw3
ICsxMjU5LDQ2IEBAIGJvb2wgZXF1YWwoY29uc3QgU3RyaW5nSW1wbCogYSwgY29uc3QgU3QKICAg
ICByZXR1cm4gU3RyaW5nSGFzaDo6ZXF1YWwoYSwgYik7CiB9CiAKLWJvb2wgZXF1YWwoY29uc3Qg
U3RyaW5nSW1wbCogYSwgY29uc3QgY2hhciogYikKK2Jvb2wgZXF1YWwoY29uc3QgU3RyaW5nSW1w
bCogYSwgY29uc3QgTENoYXIqIGIsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBpZiAoIWEpCisg
ICAgICAgIHJldHVybiAhYjsKKyAgICBpZiAoIWIpCisgICAgICAgIHJldHVybiAhYTsKKworICAg
IGlmIChsZW5ndGggIT0gYS0+bGVuZ3RoKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGlmIChhLT5pczhCaXQoKSkgeworICAgICAgICBjb25zdCBMQ2hhciogYUNoYXJzID0gYS0+Y2hh
cmFjdGVyczgoKTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpICE9IGxlbmd0aDsg
KytpKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGJjID0gYltpXTsKKyAgICAgICAgICAg
IHVuc2lnbmVkIGNoYXIgYWMgPSBhQ2hhcnNbaV07CisgICAgICAgICAgICBpZiAoIWJjKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmIChhYyAhPSBiYykKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICBjb25zdCBVQ2hhciogYUNoYXJzID0gYS0+Y2hhcmFjdGVyczE2
KCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpICE9IGxlbmd0aDsgKytpKSB7CisgICAg
ICAgIFVDaGFyIGJjID0gYltpXTsKKyAgICAgICAgVUNoYXIgYWMgPSBhQ2hhcnNbaV07CisgICAg
ICAgIGlmICghYmMpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChhYyAh
PSBiYykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBlcXVhbChjb25zdCBTdHJpbmdJbXBsKiBhLCBjb25zdCBMQ2hhciogYikK
IHsKICAgICBpZiAoIWEpCiAgICAgICAgIHJldHVybiAhYjsKQEAgLTk2OSwxMiArMTMwNiwyNyBA
QCBib29sIGVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqIGEsIGNvbnN0IGNoCiAgICAgICAgIHJldHVy
biAhYTsKIAogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGEtPmxlbmd0aCgpOwotICAgIGNvbnN0IFVD
aGFyKiBhcyA9IGEtPmNoYXJhY3RlcnMoKTsKKworICAgIGlmIChhLT5pczhCaXQoKSkgeworICAg
ICAgICBjb25zdCBMQ2hhciogYVB0ciA9IGEtPmNoYXJhY3RlcnM4KCk7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgIT0gbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIHVuc2lnbmVk
IGNoYXIgYmMgPSBiW2ldOworICAgICAgICAgICAgdW5zaWduZWQgY2hhciBhYyA9IGFQdHJbaV07
CisgICAgICAgICAgICBpZiAoIWJjKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIGlmIChhYyAhPSBiYykKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKworICAgICAgICByZXR1cm4gIWJbbGVuZ3RoXTsKKyAgICB9CisKKyAgICBjb25z
dCBVQ2hhciogYVB0ciA9IGEtPmNoYXJhY3RlcnMxNigpOwogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgIT0gbGVuZ3RoOyArK2kpIHsKICAgICAgICAgdW5zaWduZWQgY2hhciBiYyA9IGJbaV07
CiAgICAgICAgIGlmICghYmMpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlm
IChhc1tpXSAhPSBiYykKKyAgICAgICAgaWYgKGFQdHJbaV0gIT0gYmMpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC05OTksMjAgKzEzNTEsMjggQEAgYm9vbCBlcXVhbChj
b25zdCBTdHJpbmdJbXBsKiBhLCBjb25zdCBVQwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIHJldHVybiB0cnVlOwogI2Vsc2UKLSAgICAvKiBEbyBpdCA0LWJ5dGVzLWF0LWEtdGltZSBv
biBhcmNoaXRlY3R1cmVzIHdoZXJlIGl0J3Mgc2FmZSAqLwotICAgIAotICAgIGNvbnN0IHVpbnQz
Ml90KiBhQ2hhcmFjdGVycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihhLT5j
aGFyYWN0ZXJzKCkpOworICAgIGlmIChhLT5pczhCaXQoKSkgeworICAgICAgICBjb25zdCBMQ2hh
ciogYXMgPSBhLT5jaGFyYWN0ZXJzOCgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
ICE9IGxlbmd0aDsgKytpKQorICAgICAgICAgICAgaWYgKGFzW2ldICE9IGJbaV0pCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAg
ICAvLyBEbyBjb21wYXJpc29uIDQtYnl0ZXMtYXQtYS10aW1lIG9uIGFyY2hpdGVjdHVyZXMgd2hl
cmUgaXQncyBzYWZlLgorCisgICAgY29uc3QgdWludDMyX3QqIGFDaGFyYWN0ZXJzID0gcmVpbnRl
cnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KGEtPmNoYXJhY3RlcnMxNigpKTsKICAgICBjb25z
dCB1aW50MzJfdCogYkNoYXJhY3RlcnMgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90
Kj4oYik7Ci0gICAgCisKICAgICB1bnNpZ25lZCBoYWxmTGVuZ3RoID0gbGVuZ3RoID4+IDE7CiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSAhPSBoYWxmTGVuZ3RoOyArK2kpIHsKICAgICAgICAg
aWYgKCphQ2hhcmFjdGVycysrICE9ICpiQ2hhcmFjdGVycysrKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KLSAgICAKKwogICAgIGlmIChsZW5ndGggJiAxICYmICAqcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB1aW50MTZfdCo+KGFDaGFyYWN0ZXJzKSAhPSAqcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1aW50MTZfdCo+KGJDaGFyYWN0ZXJzKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIAorCiAgICAgcmV0dXJuIHRydWU7CiAjZW5kaWYKIH0KQEAgLTEwMjIsNyArMTM4Miw3IEBA
IGJvb2wgZXF1YWxJZ25vcmluZ0Nhc2UoU3RyaW5nSW1wbCogYSwgU3QKICAgICByZXR1cm4gQ2Fz
ZUZvbGRpbmdIYXNoOjplcXVhbChhLCBiKTsKIH0KIAotYm9vbCBlcXVhbElnbm9yaW5nQ2FzZShT
dHJpbmdJbXBsKiBhLCBjb25zdCBjaGFyKiBiKQorYm9vbCBlcXVhbElnbm9yaW5nQ2FzZShTdHJp
bmdJbXBsKiBhLCBjb25zdCBMQ2hhciogYikKIHsKICAgICBpZiAoIWEpCiAgICAgICAgIHJldHVy
biAhYjsKQEAgLTEwMzAsMTMgKzEzOTAsMzQgQEAgYm9vbCBlcXVhbElnbm9yaW5nQ2FzZShTdHJp
bmdJbXBsKiBhLCBjbwogICAgICAgICByZXR1cm4gIWE7CiAKICAgICB1bnNpZ25lZCBsZW5ndGgg
PSBhLT5sZW5ndGgoKTsKLSAgICBjb25zdCBVQ2hhciogYXMgPSBhLT5jaGFyYWN0ZXJzKCk7CiAK
ICAgICAvLyBEbyBhIGZhc3RlciBsb29wIGZvciB0aGUgY2FzZSB3aGVyZSBhbGwgdGhlIGNoYXJh
Y3RlcnMgYXJlIEFTQ0lJLgogICAgIFVDaGFyIG9yZWQgPSAwOwogICAgIGJvb2wgZXF1YWwgPSB0
cnVlOworICAgIGlmIChhLT5pczhCaXQoKSkgeworICAgICAgICBjb25zdCBMQ2hhciogYXMgPSBh
LT5jaGFyYWN0ZXJzOCgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpICE9IGxlbmd0
aDsgKytpKSB7CisgICAgICAgICAgICBMQ2hhciBiYyA9IGJbaV07CisgICAgICAgICAgICBpZiAo
IWJjKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIFVDaGFyIGFj
ID0gYXNbaV07CisgICAgICAgICAgICBvcmVkIHw9IGFjOworICAgICAgICAgICAgZXF1YWwgPSBl
cXVhbCAmJiAodG9BU0NJSUxvd2VyKGFjKSA9PSB0b0FTQ0lJTG93ZXIoYmMpKTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgLy8gRG8gYSBzbG93ZXIgaW1wbGVtZW50YXRpb24gZm9yIGNh
c2VzIHRoYXQgaW5jbHVkZSBub24tQVNDSUkgY2hhcmFjdGVycy4KKyAgICAgICAgaWYgKG9yZWQg
JiB+MHg3RikgeworICAgICAgICAgICAgZXF1YWwgPSB0cnVlOworICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSAhPSBsZW5ndGg7ICsraSkKKyAgICAgICAgICAgICAgICBlcXVhbCA9
IGVxdWFsICYmIChmb2xkQ2FzZShhc1tpXSkgPT0gZm9sZENhc2UoYltpXSkpOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICByZXR1cm4gZXF1YWwgJiYgIWJbbGVuZ3RoXTsgICAgICAgIAor
ICAgIH0KKworICAgIGNvbnN0IFVDaGFyKiBhcyA9IGEtPmNoYXJhY3RlcnMxNigpOwogICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgIT0gbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgY2hhciBiYyA9
IGJbaV07CisgICAgICAgIExDaGFyIGJjID0gYltpXTsKICAgICAgICAgaWYgKCFiYykKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgVUNoYXIgYWMgPSBhc1tpXTsKQEAgLTEwNDgs
OCArMTQyOSw3IEBAIGJvb2wgZXF1YWxJZ25vcmluZ0Nhc2UoU3RyaW5nSW1wbCogYSwgY28KICAg
ICBpZiAob3JlZCAmIH4weDdGKSB7CiAgICAgICAgIGVxdWFsID0gdHJ1ZTsKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSAhPSBsZW5ndGg7ICsraSkgewotICAgICAgICAgICAgdW5zaWdu
ZWQgY2hhciBiYyA9IGJbaV07Ci0gICAgICAgICAgICBlcXVhbCA9IGVxdWFsICYmIChmb2xkQ2Fz
ZShhc1tpXSkgPT0gZm9sZENhc2UoYmMpKTsKKyAgICAgICAgICAgIGVxdWFsID0gZXF1YWwgJiYg
KGZvbGRDYXNlKGFzW2ldKSA9PSBmb2xkQ2FzZShiW2ldKSk7CiAgICAgICAgIH0KICAgICB9CiAK
QEAgLTEwNzEsNyArMTQ1MSw3IEBAIGJvb2wgZXF1YWxJZ25vcmluZ051bGxpdHkoU3RyaW5nSW1w
bCogYSwKIFdURjo6VW5pY29kZTo6RGlyZWN0aW9uIFN0cmluZ0ltcGw6OmRlZmF1bHRXcml0aW5n
RGlyZWN0aW9uKGJvb2wqIGhhc1N0cm9uZ0RpcmVjdGlvbmFsaXR5KQogewogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtX2xlbmd0aDsgKytpKSB7Ci0gICAgICAgIFdURjo6VW5pY29kZTo6
RGlyZWN0aW9uIGNoYXJEaXJlY3Rpb24gPSBXVEY6OlVuaWNvZGU6OmRpcmVjdGlvbihtX2RhdGFb
aV0pOworICAgICAgICBXVEY6OlVuaWNvZGU6OkRpcmVjdGlvbiBjaGFyRGlyZWN0aW9uID0gV1RG
OjpVbmljb2RlOjpkaXJlY3Rpb24oaXM4Qml0KCkgPyBtX2RhdGE4W2ldIDogbV9kYXRhMTZbaV0p
OwogICAgICAgICBpZiAoY2hhckRpcmVjdGlvbiA9PSBXVEY6OlVuaWNvZGU6OkxlZnRUb1JpZ2h0
KSB7CiAgICAgICAgICAgICBpZiAoaGFzU3Ryb25nRGlyZWN0aW9uYWxpdHkpCiAgICAgICAgICAg
ICAgICAgKmhhc1N0cm9uZ0RpcmVjdGlvbmFsaXR5ID0gdHJ1ZTsKQEAgLTEwOTAsNiArMTQ3MCw3
IEBAIFdURjo6VW5pY29kZTo6RGlyZWN0aW9uIFN0cmluZ0ltcGw6OmRlZmEKIAogUGFzc1JlZlB0
cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjphZG9wdChTdHJpbmdCdWZmZXImIGJ1ZmZlcikKIHsK
KyAgICAvLyBGSVhNRTogaGFuZGxlIDgtYml0IFN0cmluZ0J1ZmZlciB3aGVuIGl0IGV4aXN0cy4K
ICAgICB1bnNpZ25lZCBsZW5ndGggPSBidWZmZXIubGVuZ3RoKCk7CiAgICAgaWYgKGxlbmd0aCA9
PSAwKQogICAgICAgICByZXR1cm4gZW1wdHkoKTsKQEAgLTExMDAsMTMgKzE0ODEsMjEgQEAgUGFz
c1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpjcmVhdAogewogICAgIC8vIFVzZSBjcmVh
dGVVbmluaXRpYWxpemVkIGluc3RlYWQgb2YgJ25ldyBTdHJpbmdJbXBsJyBzbyB0aGF0IHRoZSBz
dHJpbmcgYW5kIGl0cyBidWZmZXIKICAgICAvLyBnZXQgYWxsb2NhdGVkIGluIGEgc2luZ2xlIG1l
bW9yeSBibG9jay4KLSAgICBVQ2hhciogZGF0YTsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHJp
bmcubV9sZW5ndGg7CiAgICAgaWYgKGxlbmd0aCA+PSBudW1lcmljX2xpbWl0czx1bnNpZ25lZD46
Om1heCgpKQogICAgICAgICBDUkFTSCgpOwotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiB0ZXJtaW5h
dGVkU3RyaW5nID0gY3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGggKyAxLCBkYXRhKTsKLSAgICBt
ZW1jcHkoZGF0YSwgc3RyaW5nLm1fZGF0YSwgbGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7Ci0gICAg
ZGF0YVtsZW5ndGhdID0gMDsKKyAgICBSZWZQdHI8U3RyaW5nSW1wbD4gdGVybWluYXRlZFN0cmlu
ZzsKKyAgICBpZiAoc3RyaW5nLmlzOEJpdCgpKSB7CisgICAgICAgIExDaGFyKiBkYXRhOworICAg
ICAgICB0ZXJtaW5hdGVkU3RyaW5nID0gY3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGggKyAxLCBk
YXRhKTsKKyAgICAgICAgbWVtY3B5KGRhdGEsIHN0cmluZy5tX2RhdGE4LCBsZW5ndGggKiBzaXpl
b2YoY2hhcikpOworICAgICAgICBkYXRhW2xlbmd0aF0gPSAwOworICAgIH0gZWxzZSB7CisgICAg
ICAgIFVDaGFyKiBkYXRhOworICAgICAgICB0ZXJtaW5hdGVkU3RyaW5nID0gY3JlYXRlVW5pbml0
aWFsaXplZChsZW5ndGggKyAxLCBkYXRhKTsKKyAgICAgICAgbWVtY3B5KGRhdGEsIHN0cmluZy5t
X2RhdGExNiwgbGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CisgICAgICAgIGRhdGFbbGVuZ3RoXSA9
IDA7CisgICAgfQogICAgIHRlcm1pbmF0ZWRTdHJpbmctPm1fbGVuZ3RoLS07CiAgICAgdGVybWlu
YXRlZFN0cmluZy0+bV9oYXNoQW5kRmxhZ3MgPSAoc3RyaW5nLm1faGFzaEFuZEZsYWdzICYgfnNf
ZmxhZ01hc2spIHwgc19oYXNoRmxhZ0hhc1Rlcm1pbmF0aW5nTnVsbENoYXJhY3RlcjsKICAgICBy
ZXR1cm4gdGVybWluYXRlZFN0cmluZy5yZWxlYXNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL3RleHQvU3RyaW5nSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvdGV4dC9TdHJpbmdJbXBsLmgJKHJldmlzaW9uIDk4NDk1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaAkod29ya2luZyBjb3B5KQpAQCAt
NDQsNiArNDQsNyBAQCB0eXBlZGVmIGNvbnN0IHN0cnVjdCBfX0NGU3RyaW5nICogQ0ZTdHJpCiAv
LyBMYW5kaW5nIHRoZSBmaWxlIG1vdmVzIGluIG9uZSBwYXRjaCwgd2lsbCBmb2xsb3cgb24gd2l0
aCBwYXRjaGVzIHRvIGNoYW5nZSB0aGUgbmFtZXNwYWNlcy4KIG5hbWVzcGFjZSBKU0Mgewogc3Ry
dWN0IElkZW50aWZpZXJDU3RyaW5nVHJhbnNsYXRvcjsKK3N0cnVjdCBJZGVudGlmaWVyQ2hhckJ1
ZmZlclRyYW5zbGF0b3I7CiBzdHJ1Y3QgSWRlbnRpZmllclVDaGFyQnVmZmVyVHJhbnNsYXRvcjsK
IH0KIApAQCAtNjIsNiArNjMsNyBAQCB0eXBlZGVmIGJvb2wgKCpJc1doaXRlU3BhY2VGdW5jdGlv
blB0cikoCiBjbGFzcyBTdHJpbmdJbXBsIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdHJp
bmdJbXBsKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgZnJpZW5kIHN0cnVjdCBKU0M6
OklkZW50aWZpZXJDU3RyaW5nVHJhbnNsYXRvcjsKKyAgICBmcmllbmQgc3RydWN0IEpTQzo6SWRl
bnRpZmllckNoYXJCdWZmZXJUcmFuc2xhdG9yOwogICAgIGZyaWVuZCBzdHJ1Y3QgSlNDOjpJZGVu
dGlmaWVyVUNoYXJCdWZmZXJUcmFuc2xhdG9yOwogICAgIGZyaWVuZCBzdHJ1Y3QgV1RGOjpDU3Ry
aW5nVHJhbnNsYXRvcjsKICAgICBmcmllbmQgc3RydWN0IFdURjo6SGFzaEFuZENoYXJhY3RlcnNU
cmFuc2xhdG9yOwpAQCAtODMsNyArODUsNyBAQCBwcml2YXRlOgogICAgIFN0cmluZ0ltcGwoY29u
c3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgQ29uc3RydWN0U3RhdGljU3Ry
aW5nVGFnKQogICAgICAgICA6IG1fcmVmQ291bnQoc19yZWZDb3VudEZsYWdJc1N0YXRpY1N0cmlu
ZykKICAgICAgICAgLCBtX2xlbmd0aChsZW5ndGgpCi0gICAgICAgICwgbV9kYXRhKGNoYXJhY3Rl
cnMpCisgICAgICAgICwgbV9kYXRhMTYoY2hhcmFjdGVycykKICAgICAgICAgLCBtX2J1ZmZlcigw
KQogICAgICAgICAsIG1faGFzaEFuZEZsYWdzKHNfaGFzaEZsYWdJc0lkZW50aWZpZXIgfCBCdWZm
ZXJPd25lZCkKICAgICB7CkBAIC05MywxNSArOTUsNDUgQEAgcHJpdmF0ZToKICAgICAgICAgaGFz
aCgpOwogICAgIH0KIAotICAgIC8vIENyZWF0ZSBhIG5vcm1hbCBzdHJpbmcgd2l0aCBpbnRlcm5h
bCBzdG9yYWdlIChCdWZmZXJJbnRlcm5hbCkKKyAgICAvLyBVc2VkIHRvIGNvbnN0cnVjdCBzdGF0
aWMgc3RyaW5ncywgd2hpY2ggaGF2ZSBhbiBzcGVjaWFsIHJlZkNvdW50IHRoYXQgY2FuIG5ldmVy
IGhpdCB6ZXJvLgorICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGUgc3RhdGljIHN0cmluZyB3aWxs
IG5ldmVyIGJlIGRlc3Ryb3llZCwgd2hpY2ggaXMgaW1wb3J0YW50IGJlY2F1c2UKKyAgICAvLyBz
dGF0aWMgc3RyaW5ncyB3aWxsIGJlIHNoYXJlZCBhY3Jvc3MgdGhyZWFkcyAmIHJlZi1jb3VudGVk
IGluIGEgbm9uLXRocmVhZHNhZmUgbWFubmVyLgorICAgIFN0cmluZ0ltcGwoY29uc3QgTENoYXIq
IGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgQ29uc3RydWN0U3RhdGljU3RyaW5nVGFnKQor
ICAgICAgICA6IG1fcmVmQ291bnQoc19yZWZDb3VudEZsYWdJc1N0YXRpY1N0cmluZykKKyAgICAg
ICAgLCBtX2xlbmd0aChsZW5ndGgpCisgICAgICAgICwgbV9kYXRhOChjaGFyYWN0ZXJzKQorICAg
ICAgICAsIG1fYnVmZmVyKDApCisgICAgICAgICwgbV9oYXNoQW5kRmxhZ3Moc19oYXNoRmxhZzhC
aXRCdWZmZXIgfCBzX2hhc2hGbGFnSXNJZGVudGlmaWVyIHwgQnVmZmVyT3duZWQpCisgICAgewor
ICAgICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgaGFzaCBpcyBjb21wdXRlZCBzbyB0aGF0IEF0b21p
Y1N0cmluZ0hhc2ggY2FuIGNhbGwgZXhpc3RpbmdIYXNoKCkKKyAgICAgICAgLy8gd2l0aCBpbXB1
bml0eS4gVGhlIGVtcHR5IHN0cmluZyBpcyBzcGVjaWFsIGJlY2F1c2UgaXQgaXMgbmV2ZXIgZW50
ZXJlZCBpbnRvCisgICAgICAgIC8vIEF0b21pY1N0cmluZydzIEhhc2hLZXksIGJ1dCBzdGlsbCBu
ZWVkcyB0byBjb21wYXJlIGNvcnJlY3RseS4KKyAgICAgICAgaGFzaCgpOworICAgIH0KKworICAg
IC8vIEZJWE1FOiB0aGVyZSBoYXMgdG8gYmUgYSBsZXNzIGhhY2t5IHdheSB0byBkbyB0aGlzLgor
ICAgIGVudW0gRm9yY2U4Qml0IHsgRm9yY2U4Qml0Q29uc3RydWN0b3IgfTsKKyAgICAvLyBDcmVh
dGUgYSBub3JtYWwgOC1iaXQgc3RyaW5nIHdpdGggaW50ZXJuYWwgc3RvcmFnZSAoQnVmZmVySW50
ZXJuYWwpCisgICAgU3RyaW5nSW1wbCh1bnNpZ25lZCBsZW5ndGgsIEZvcmNlOEJpdCkKKyAgICAg
ICAgOiBtX3JlZkNvdW50KHNfcmVmQ291bnRJbmNyZW1lbnQpCisgICAgICAgICwgbV9sZW5ndGgo
bGVuZ3RoKQorICAgICAgICAsIG1fZGF0YTgocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+
KHRoaXMgKyAxKSkKKyAgICAgICAgLCBtX2J1ZmZlcigwKQorICAgICAgICAsIG1faGFzaEFuZEZs
YWdzKHNfaGFzaEZsYWc4Qml0QnVmZmVyIHwgQnVmZmVySW50ZXJuYWwpCisgICAgeworICAgICAg
ICBBU1NFUlQobV9kYXRhOCk7CisgICAgICAgIEFTU0VSVChtX2xlbmd0aCk7CisgICAgfQorCisg
ICAgLy8gQ3JlYXRlIGEgbm9ybWFsIDE2LWJpdCBzdHJpbmcgd2l0aCBpbnRlcm5hbCBzdG9yYWdl
IChCdWZmZXJJbnRlcm5hbCkKICAgICBTdHJpbmdJbXBsKHVuc2lnbmVkIGxlbmd0aCkKICAgICAg
ICAgOiBtX3JlZkNvdW50KHNfcmVmQ291bnRJbmNyZW1lbnQpCiAgICAgICAgICwgbV9sZW5ndGgo
bGVuZ3RoKQotICAgICAgICAsIG1fZGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4o
dGhpcyArIDEpKQorICAgICAgICAsIG1fZGF0YTE2KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNo
YXIqPih0aGlzICsgMSkpCiAgICAgICAgICwgbV9idWZmZXIoMCkKICAgICAgICAgLCBtX2hhc2hB
bmRGbGFncyhCdWZmZXJJbnRlcm5hbCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX2RhdGEpOwor
ICAgICAgICBBU1NFUlQobV9kYXRhMTYpOwogICAgICAgICBBU1NFUlQobV9sZW5ndGgpOwogICAg
IH0KIApAQCAtMTA5LDIzICsxNDEsMzggQEAgcHJpdmF0ZToKICAgICBTdHJpbmdJbXBsKGNvbnN0
IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCiAgICAgICAgIDogbV9yZWZDb3Vu
dChzX3JlZkNvdW50SW5jcmVtZW50KQogICAgICAgICAsIG1fbGVuZ3RoKGxlbmd0aCkKLSAgICAg
ICAgLCBtX2RhdGEoY2hhcmFjdGVycykKKyAgICAgICAgLCBtX2RhdGExNihjaGFyYWN0ZXJzKQog
ICAgICAgICAsIG1fYnVmZmVyKDApCiAgICAgICAgICwgbV9oYXNoQW5kRmxhZ3MoQnVmZmVyT3du
ZWQpCiAgICAgewotICAgICAgICBBU1NFUlQobV9kYXRhKTsKKyAgICAgICAgQVNTRVJUKG1fZGF0
YTE2KTsKICAgICAgICAgQVNTRVJUKG1fbGVuZ3RoKTsKICAgICB9CiAKLSAgICAvLyBVc2VkIHRv
IGNyZWF0ZSBuZXcgc3RyaW5ncyB0aGF0IGFyZSBhIHN1YnN0cmluZyBvZiBhbiBleGlzdGluZyBT
dHJpbmdJbXBsIChCdWZmZXJTdWJzdHJpbmcpCisgICAgLy8gVXNlZCB0byBjcmVhdGUgbmV3IHN0
cmluZ3MgdGhhdCBhcmUgYSBzdWJzdHJpbmcgb2YgYW4gZXhpc3RpbmcgOC1iaXQgU3RyaW5nSW1w
bCAoQnVmZmVyU3Vic3RyaW5nKQorICAgIFN0cmluZ0ltcGwoY29uc3QgTENoYXIqIGNoYXJhY3Rl
cnMsIHVuc2lnbmVkIGxlbmd0aCwgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBiYXNlKQorICAgICAg
ICA6IG1fcmVmQ291bnQoc19yZWZDb3VudEluY3JlbWVudCkKKyAgICAgICAgLCBtX2xlbmd0aChs
ZW5ndGgpCisgICAgICAgICwgbV9kYXRhOChjaGFyYWN0ZXJzKQorICAgICAgICAsIG1fc3Vic3Ry
aW5nQnVmZmVyKGJhc2UubGVha1JlZigpKQorICAgICAgICAsIG1faGFzaEFuZEZsYWdzKHNfaGFz
aEZsYWc4Qml0QnVmZmVyIHwgQnVmZmVyU3Vic3RyaW5nKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KGlzOEJpdCgpKTsKKyAgICAgICAgQVNTRVJUKG1fZGF0YTgpOworICAgICAgICBBU1NFUlQobV9s
ZW5ndGgpOworICAgICAgICBBU1NFUlQobV9zdWJzdHJpbmdCdWZmZXItPmJ1ZmZlck93bmVyc2hp
cCgpICE9IEJ1ZmZlclN1YnN0cmluZyk7CisgICAgfQorCisgICAgLy8gVXNlZCB0byBjcmVhdGUg
bmV3IHN0cmluZ3MgdGhhdCBhcmUgYSBzdWJzdHJpbmcgb2YgYW4gZXhpc3RpbmcgMTYtYml0IFN0
cmluZ0ltcGwgKEJ1ZmZlclN1YnN0cmluZykKICAgICBTdHJpbmdJbXBsKGNvbnN0IFVDaGFyKiBj
aGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gYmFzZSkK
ICAgICAgICAgOiBtX3JlZkNvdW50KHNfcmVmQ291bnRJbmNyZW1lbnQpCiAgICAgICAgICwgbV9s
ZW5ndGgobGVuZ3RoKQotICAgICAgICAsIG1fZGF0YShjaGFyYWN0ZXJzKQorICAgICAgICAsIG1f
ZGF0YTE2KGNoYXJhY3RlcnMpCiAgICAgICAgICwgbV9zdWJzdHJpbmdCdWZmZXIoYmFzZS5sZWFr
UmVmKCkpCiAgICAgICAgICwgbV9oYXNoQW5kRmxhZ3MoQnVmZmVyU3Vic3RyaW5nKQogICAgIHsK
LSAgICAgICAgQVNTRVJUKG1fZGF0YSk7CisgICAgICAgIEFTU0VSVCghaXM4Qml0KCkpOworICAg
ICAgICBBU1NFUlQobV9kYXRhMTYpOwogICAgICAgICBBU1NFUlQobV9sZW5ndGgpOwogICAgICAg
ICBBU1NFUlQobV9zdWJzdHJpbmdCdWZmZXItPmJ1ZmZlck93bmVyc2hpcCgpICE9IEJ1ZmZlclN1
YnN0cmluZyk7CiAgICAgfQpAQCAtMTM0LDggKzE4MSwyNCBAQCBwdWJsaWM6CiAgICAgflN0cmlu
Z0ltcGwoKTsKIAogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGNyZWF0ZShjb25z
dCBVQ2hhciosIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5n
SW1wbD4gY3JlYXRlKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFN0cmluZ0ltcGw+IGNyZWF0ZShjb25zdCBjaGFyKik7CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8U3RyaW5nSW1wbD4gY3JlYXRlKGNvbnN0IExDaGFyKiwgdW5zaWduZWQgbGVuZ3Ro
KTsKKyAgICBBTFdBWVNfSU5MSU5FIHN0YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGNyZWF0
ZShjb25zdCBjaGFyKiBzLCB1bnNpZ25lZCBsZW5ndGgpIHsgcmV0dXJuIGNyZWF0ZShzLCBsZW5n
dGgpOyB9OworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGNyZWF0ZShjb25zdCBM
Q2hhciopOworICAgIEFMV0FZU19JTkxJTkUgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4g
Y3JlYXRlKGNvbnN0IGNoYXIqIHMpIHsgcmV0dXJuIGNyZWF0ZShyZWludGVycHJldF9jYXN0PGNv
bnN0IExDaGFyKj4ocykpOyB9OworCisgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgUGFzc1JlZlB0
cjxTdHJpbmdJbXBsPiBjcmVhdGU4KFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gcmVwLCB1bnNpZ25l
ZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKKyAgICB7CisgICAgICAgIEFTU0VSVChyZXApOwor
ICAgICAgICBBU1NFUlQobGVuZ3RoIDw9IHJlcC0+bGVuZ3RoKCkpOworCisgICAgICAgIGlmICgh
bGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuIGVtcHR5KCk7CisKKyAgICAgICAgQVNTRVJUKHJl
cC0+aXM4Qml0KCkpOworICAgICAgICBTdHJpbmdJbXBsKiBvd25lclJlcCA9IChyZXAtPmJ1ZmZl
ck93bmVyc2hpcCgpID09IEJ1ZmZlclN1YnN0cmluZykgPyByZXAtPm1fc3Vic3RyaW5nQnVmZmVy
IDogcmVwLmdldCgpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0cmluZ0ltcGwocmVw
LT5tX2RhdGE4ICsgb2Zmc2V0LCBsZW5ndGgsIG93bmVyUmVwKSk7CisgICAgfQorCiAgICAgc3Rh
dGljIEFMV0FZU19JTkxJTkUgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBjcmVhdGUoUGFzc1JlZlB0
cjxTdHJpbmdJbXBsPiByZXAsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogICAg
IHsKICAgICAgICAgQVNTRVJUKHJlcCk7CkBAIC0xNDUsMjcgKzIwOCwzNCBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICByZXR1cm4gZW1wdHkoKTsKIAogICAgICAgICBTdHJpbmdJbXBsKiBvd25lclJl
cCA9IChyZXAtPmJ1ZmZlck93bmVyc2hpcCgpID09IEJ1ZmZlclN1YnN0cmluZykgPyByZXAtPm1f
c3Vic3RyaW5nQnVmZmVyIDogcmVwLmdldCgpOwotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFN0cmluZ0ltcGwocmVwLT5tX2RhdGEgKyBvZmZzZXQsIGxlbmd0aCwgb3duZXJSZXApKTsKKyAg
ICAgICAgaWYgKHJlcC0+aXM4Qml0KCkpCisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFN0cmluZ0ltcGwocmVwLT5tX2RhdGE4ICsgb2Zmc2V0LCBsZW5ndGgsIG93bmVyUmVwKSk7Cisg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3RyaW5nSW1wbChyZXAtPm1fZGF0YTE2ICsgb2Zm
c2V0LCBsZW5ndGgsIG93bmVyUmVwKSk7CiAgICAgfQogCisgICAgc3RhdGljIFBhc3NSZWZQdHI8
U3RyaW5nSW1wbD4gY3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgsIExDaGFyKiYg
ZGF0YSk7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gY3JlYXRlVW5pbml0aWFs
aXplZCh1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiYgZGF0YSk7Ci0gICAgc3RhdGljIEFMV0FZU19J
TkxJTkUgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiB0cnlDcmVhdGVVbmluaXRpYWxpemVkKHVuc2ln
bmVkIGxlbmd0aCwgVUNoYXIqJiBvdXRwdXQpCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0
YXRpYyBBTFdBWVNfSU5MSU5FIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gdHJ5Q3JlYXRlVW5pbml0
aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgsIFQqJiBvdXRwdXQpCiAgICAgewogICAgICAgICBpZiAo
IWxlbmd0aCkgewogICAgICAgICAgICAgb3V0cHV0ID0gMDsKICAgICAgICAgICAgIHJldHVybiBl
bXB0eSgpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGxlbmd0aCA+ICgoc3RkOjpudW1lcmlj
X2xpbWl0czx1bnNpZ25lZD46Om1heCgpIC0gc2l6ZW9mKFN0cmluZ0ltcGwpKSAvIHNpemVvZihV
Q2hhcikpKSB7CisgICAgICAgIGlmIChsZW5ndGggPiAoKHN0ZDo6bnVtZXJpY19saW1pdHM8dW5z
aWduZWQ+OjptYXgoKSAtIHNpemVvZihTdHJpbmdJbXBsKSkgLyBzaXplb2YoVCkpKSB7CiAgICAg
ICAgICAgICBvdXRwdXQgPSAwOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KICAg
ICAgICAgU3RyaW5nSW1wbCogcmVzdWx0SW1wbDsKLSAgICAgICAgaWYgKCF0cnlGYXN0TWFsbG9j
KHNpemVvZihVQ2hhcikgKiBsZW5ndGggKyBzaXplb2YoU3RyaW5nSW1wbCkpLmdldFZhbHVlKHJl
c3VsdEltcGwpKSB7CisgICAgICAgIGlmICghdHJ5RmFzdE1hbGxvYyhzaXplb2YoVCkgKiBsZW5n
dGggKyBzaXplb2YoU3RyaW5nSW1wbCkpLmdldFZhbHVlKHJlc3VsdEltcGwpKSB7CiAgICAgICAg
ICAgICBvdXRwdXQgPSAwOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KLSAgICAg
ICAgb3V0cHV0ID0gcmVpbnRlcnByZXRfY2FzdDxVQ2hhcio+KHJlc3VsdEltcGwgKyAxKTsKKyAg
ICAgICAgb3V0cHV0ID0gcmVpbnRlcnByZXRfY2FzdDxUKj4ocmVzdWx0SW1wbCArIDEpOworCisg
ICAgICAgIGlmIChzaXplb2YoVCkgPT0gc2l6ZW9mKGNoYXIpKQorICAgICAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyhyZXN1bHRJbXBsKSBTdHJpbmdJbXBsKGxlbmd0aCwgRm9yY2U4Qml0Q29u
c3RydWN0b3IpKTsKKwogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3KHJlc3VsdEltcGwpIFN0
cmluZ0ltcGwobGVuZ3RoKSk7CiAgICAgfQogCkBAIC0xNzQsOSArMjQ0LDEyIEBAIHB1YmxpYzoK
ICAgICAvLyB0aGUgb3JpZ2luYWxTdHJpbmcgY2FuJ3QgYmUgdXNlZCBhZnRlciB0aGlzIGZ1bmN0
aW9uLgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHJlYWxsb2NhdGUoUGFzc1Jl
ZlB0cjxTdHJpbmdJbXBsPiBvcmlnaW5hbFN0cmluZywgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciom
IGRhdGEpOwogCi0gICAgc3RhdGljIHVuc2lnbmVkIGRhdGFPZmZzZXQoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoU3RyaW5nSW1wbCwgbV9kYXRhKTsgfQorICAgIHN0YXRpYyB1bnNpZ25lZCBm
bGFnc09mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJpbmdJbXBsLCBtX2hhc2hB
bmRGbGFncyk7IH0KKyAgICBzdGF0aWMgdW5zaWduZWQgZmxhZ0lzOEJpdCgpIHsgcmV0dXJuIHNf
aGFzaEZsYWc4Qml0QnVmZmVyOyB9CisgICAgc3RhdGljIHVuc2lnbmVkIGRhdGFPZmZzZXQoKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RyaW5nSW1wbCwgbV9kYXRhOCk7IH0KICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBjcmVhdGVXaXRoVGVybWluYXRpbmdOdWxsQ2hhcmFj
dGVyKGNvbnN0IFN0cmluZ0ltcGwmKTsKIAorICAgIC8vIEZJWE1FOiBBZGQgVmVjdG9yPGNoYXI+
IGFkb3B0PwogICAgIHRlbXBsYXRlPHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBhZG9wdChWZWN0b3I8VUNoYXIsIGlubGluZUNhcGFjaXR5
PiYgdmVjdG9yKQogICAgIHsKQEAgLTE5MSw3ICsyNjQsMTggQEAgcHVibGljOgogICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGFkb3B0KFN0cmluZ0J1ZmZlciYpOwogCiAgICAgdW5z
aWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KLSAgICBjb25zdCBVQ2hh
ciogY2hhcmFjdGVycygpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsgfQorICAgIGJvb2wgaXM4Qml0
KCkgY29uc3QgeyByZXR1cm4gbV9oYXNoQW5kRmxhZ3MgJiBzX2hhc2hGbGFnOEJpdEJ1ZmZlcjsg
fQorCisgICAgLy8gRklYTUU6IFJlbW92ZSBhbGwgdW5uZWNlc3NhcnkgdXNhZ2VzIG9mIGNoYXJh
Y3RlcnMoKQorICAgIEFMV0FZU19JTkxJTkUgY29uc3QgTENoYXIqIGNoYXJhY3RlcnM4KCkgY29u
c3QgeyBBU1NFUlQoaXM4Qml0KCkpOyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIG1fZGF0
YTg7IH0KKyAgICBBTFdBWVNfSU5MSU5FIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzMTYoKSBjb25z
dCB7IEFTU0VSVCghaXM4Qml0KCkpOyByZXR1cm4gbV9kYXRhMTY7IH0KKyAgICBBTFdBWVNfSU5M
SU5FIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICgh
aXM4Qml0KCkpCisgICAgICAgICAgICByZXR1cm4gbV9kYXRhMTY7CisKKyAgICAgICAgcmV0dXJu
IGdldERhdGExNlNsb3dDYXNlKCk7CisgICAgfQogCiAgICAgc2l6ZV90IGNvc3QoKQogICAgIHsK
QEAgLTIwNiw2ICsyOTAsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2xlbmd0aDsKICAg
ICB9CiAKKyAgICBib29sIGhhczE2Qml0U2hhZG93KCkgY29uc3QgeyByZXR1cm4gbV9oYXNoQW5k
RmxhZ3MgJiBzX2hhc2hGbGFnSGFzMTZCaXRTaGFkb3c7IH0KICAgICBib29sIGlzSWRlbnRpZmll
cigpIGNvbnN0IHsgcmV0dXJuIG1faGFzaEFuZEZsYWdzICYgc19oYXNoRmxhZ0lzSWRlbnRpZmll
cjsgfQogICAgIHZvaWQgc2V0SXNJZGVudGlmaWVyKGJvb2wgaXNJZGVudGlmaWVyKQogICAgIHsK
QEAgLTIzNSw3ICszMjAsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgc2V0SGFzaCh1bnNpZ25lZCBo
YXNoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKCFoYXNIYXNoKCkpOwotICAgICAgICBB
U1NFUlQoaGFzaCA9PSBTdHJpbmdIYXNoZXI6OmNvbXB1dGVIYXNoKG1fZGF0YSwgbV9sZW5ndGgp
KTsgLy8gTXVsdGlwbGUgY2xpZW50cyBhc3N1bWUgdGhhdCBTdHJpbmdIYXNoZXIgaXMgdGhlIGNh
bm9uaWNhbCBzdHJpbmcgaGFzaCBmdW5jdGlvbi4KKyAgICAgICAgLy8gTXVsdGlwbGUgY2xpZW50
cyBhc3N1bWUgdGhhdCBTdHJpbmdIYXNoZXIgaXMgdGhlIGNhbm9uaWNhbCBzdHJpbmcgaGFzaCBm
dW5jdGlvbi4KKyAgICAgICAgQVNTRVJUKGhhc2ggPT0gKGlzOEJpdCgpID8gU3RyaW5nSGFzaGVy
Ojpjb21wdXRlSGFzaChtX2RhdGE4LCBtX2xlbmd0aCkgOiBTdHJpbmdIYXNoZXI6OmNvbXB1dGVI
YXNoKG1fZGF0YTE2LCBtX2xlbmd0aCkpKTsKICAgICAgICAgQVNTRVJUKCEoaGFzaCAmIChzX2Zs
YWdNYXNrIDw8ICg4ICogc2l6ZW9mKGhhc2gpIC0gc19mbGFnQ291bnQpKSkpOyAvLyBWZXJpZnkg
dGhhdCBlbm91Z2ggaGlnaCBiaXRzIGFyZSBlbXB0eS4KICAgICAgICAgCiAgICAgICAgIGhhc2gg
PDw9IHNfZmxhZ0NvdW50OwpAQCAtMjY1LDcgKzM1MSwxMCBAQCBwdWJsaWM6CiAgICAgdW5zaWdu
ZWQgaGFzaCgpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAoIWhhc0hhc2goKSkKLSAgICAgICAg
ICAgIHNldEhhc2goU3RyaW5nSGFzaGVyOjpjb21wdXRlSGFzaChtX2RhdGEsIG1fbGVuZ3RoKSk7
CisgICAgICAgICAgICBpZiAoaXM4Qml0KCkpCisgICAgICAgICAgICAgICAgc2V0SGFzaChTdHJp
bmdIYXNoZXI6OmNvbXB1dGVIYXNoKG1fZGF0YTgsIG1fbGVuZ3RoKSk7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgc2V0SGFzaChTdHJpbmdIYXNoZXI6OmNvbXB1dGVIYXNoKG1f
ZGF0YTE2LCBtX2xlbmd0aCkpOwogICAgICAgICByZXR1cm4gZXhpc3RpbmdIYXNoKCk7CiAgICAg
fQogCkBAIC0yOTEsMTMgKzM4MCwzMiBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgU3RyaW5nSW1w
bCogZW1wdHkoKTsKIAotICAgIHN0YXRpYyB2b2lkIGNvcHlDaGFycyhVQ2hhciogZGVzdGluYXRp
b24sIGNvbnN0IFVDaGFyKiBzb3VyY2UsIHVuc2lnbmVkIG51bUNoYXJhY3RlcnMpCisgICAgLy8g
RklYTUU6IERvZXMgdGhpcyByZWFsbHkgYmVsb25nIGluIFN0cmluZ0ltcGw/CisgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIFQ+IHN0YXRpYyB2b2lkIGNvcHlDaGFycyhUKiBkZXN0aW5hdGlvbiwgY29u
c3QgVCogc291cmNlLCB1bnNpZ25lZCBudW1DaGFyYWN0ZXJzKQogICAgIHsKKyAgICAgICAgaWYg
KG51bUNoYXJhY3RlcnMgPT0gMSkgeworICAgICAgICAgICAgKmRlc3RpbmF0aW9uID0gKnNvdXJj
ZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCiAgICAgICAgIGlmIChudW1DaGFy
YWN0ZXJzIDw9IHNfY29weUNoYXJzSW5saW5lQ3V0T2ZmKSB7Ci0gICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbnVtQ2hhcmFjdGVyczsgKytpKQorICAgICAgICAgICAgdW5zaWdu
ZWQgaSA9IDA7CisjaWYgKENQVShYODYpIHx8IENQVShYODZfNjQpKQorICAgICAgICAgICAgY29u
c3QgdW5zaWduZWQgY2hhcnNQZXJJbnQgPSBzaXplb2YodWludDMyX3QpIC8gc2l6ZW9mKFQpOwor
CisgICAgICAgICAgICBpZiAobnVtQ2hhcmFjdGVycyA+IGNoYXJzUGVySW50KSB7CisgICAgICAg
ICAgICAgICAgdW5zaWduZWQgc3RvcENvdW50ID0gbnVtQ2hhcmFjdGVycyAmIH4oY2hhcnNQZXJJ
bnQgLSAxKTsKKworICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90KiBzcmNDaGFyYWN0ZXJz
ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KHNvdXJjZSk7CisgICAgICAgICAg
ICAgICAgdWludDMyX3QqIGRlc3RDaGFyYWN0ZXJzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJf
dCo+KGRlc3RpbmF0aW9uKTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBp
IDwgc3RvcENvdW50OyBpICs9IGNoYXJzUGVySW50LCArK2opCisgICAgICAgICAgICAgICAgICAg
IGRlc3RDaGFyYWN0ZXJzW2pdID0gc3JjQ2hhcmFjdGVyc1tqXTsKKyAgICAgICAgICAgIH0KKyNl
bmRpZgorICAgICAgICAgICAgZm9yICg7IGkgPCBudW1DaGFyYWN0ZXJzOyArK2kpCiAgICAgICAg
ICAgICAgICAgZGVzdGluYXRpb25baV0gPSBzb3VyY2VbaV07CiAgICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgbWVtY3B5KGRlc3RpbmF0aW9uLCBzb3VyY2UsIG51bUNoYXJhY3RlcnMgKiBzaXpl
b2YoVUNoYXIpKTsKKyAgICAgICAgICAgIG1lbWNweShkZXN0aW5hdGlvbiwgc291cmNlLCBudW1D
aGFyYWN0ZXJzICogc2l6ZW9mKFQpKTsKICAgICB9CiAKICAgICAvLyBTb21lIHN0cmluZyBmZWF0
dXJlcywgbGlrZSByZWZjb3VudGluZyBhbmQgdGhlIGF0b21pY2l0eSBmbGFnLCBhcmUgbm90CkBA
IC0zMDcsNyArNDE1LDEzIEBAIHB1YmxpYzoKIAogICAgIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4g
c3Vic3RyaW5nKHVuc2lnbmVkIHBvcywgdW5zaWduZWQgbGVuID0gVUlOVF9NQVgpOwogCi0gICAg
VUNoYXIgb3BlcmF0b3JbXSh1bnNpZ25lZCBpKSB7IEFTU0VSVChpIDwgbV9sZW5ndGgpOyByZXR1
cm4gbV9kYXRhW2ldOyB9CisgICAgVUNoYXIgb3BlcmF0b3JbXSh1bnNpZ25lZCBpKSBjb25zdAor
ICAgIHsKKyAgICAgICAgQVNTRVJUKGkgPCBtX2xlbmd0aCk7CisgICAgICAgIGlmIChpczhCaXQo
KSkKKyAgICAgICAgICAgIHJldHVybiBtX2RhdGE4W2ldOworICAgICAgICByZXR1cm4gbV9kYXRh
MTZbaV07CisgICAgfQogICAgIFVDaGFyMzIgY2hhcmFjdGVyU3RhcnRpbmdBdCh1bnNpZ25lZCk7
CiAKICAgICBib29sIGNvbnRhaW5zT25seVdoaXRlc3BhY2UoKTsKQEAgLTMzMSw2ICs0NDUsNyBA
QCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiB1cHBlcigpOwogCiAgICAgUGFz
c1JlZlB0cjxTdHJpbmdJbXBsPiBmaWxsKFVDaGFyKTsKKyAgICAvLyBGSVhNRTogRG8gd2UgbmVl
ZCBmaWxsKGNoYXIpIG9yIGNhbiB3ZSBqdXN0IGRvIHRoZSByaWdodCB0aGluZyBpZiBVQ2hhciBp
cyBBU0NJST8KICAgICBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGZvbGRDYXNlKCk7CiAKICAgICBQ
YXNzUmVmUHRyPFN0cmluZ0ltcGw+IHN0cmlwV2hpdGVTcGFjZSgpOwpAQCAtMzQwLDExICs0NTUs
MTQgQEAgcHVibGljOgogCiAgICAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiByZW1vdmVDaGFyYWN0
ZXJzKENoYXJhY3Rlck1hdGNoRnVuY3Rpb25QdHIpOwogCisgICAgLy8gRklYTUU6IERvIHdlIG5l
ZWQgY2hhciB2ZXJzaW9uLCBvciBpcyBpdCBva2F5IHRvIGp1c3QgcGFzcyBpbiBhbiBBU0NJSSBj
aGFyIGZvciA4LWJpdD8gU2FtZSBmb3IgcmV2ZXJzZUZpbmQsIHJlcGxhY2UKICAgICBzaXplX3Qg
ZmluZChVQ2hhciwgdW5zaWduZWQgaW5kZXggPSAwKTsKICAgICBzaXplX3QgZmluZChDaGFyYWN0
ZXJNYXRjaEZ1bmN0aW9uUHRyLCB1bnNpZ25lZCBpbmRleCA9IDApOwotICAgIHNpemVfdCBmaW5k
KGNvbnN0IGNoYXIqLCB1bnNpZ25lZCBpbmRleCA9IDApOworICAgIHNpemVfdCBmaW5kKGNvbnN0
IExDaGFyKiwgdW5zaWduZWQgaW5kZXggPSAwKTsKKyAgICBBTFdBWVNfSU5MSU5FIHNpemVfdCBm
aW5kKGNvbnN0IGNoYXIqIHMsIHVuc2lnbmVkIGluZGV4ID0gMCkgeyByZXR1cm4gZmluZChyZWlu
dGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4ocyksIGluZGV4KTsgfTsKICAgICBzaXplX3QgZmlu
ZChTdHJpbmdJbXBsKiwgdW5zaWduZWQgaW5kZXggPSAwKTsKLSAgICBzaXplX3QgZmluZElnbm9y
aW5nQ2FzZShjb25zdCBjaGFyKiwgdW5zaWduZWQgaW5kZXggPSAwKTsKKyAgICBzaXplX3QgZmlu
ZElnbm9yaW5nQ2FzZShjb25zdCBMQ2hhciosIHVuc2lnbmVkIGluZGV4ID0gMCk7CisgICAgQUxX
QVlTX0lOTElORSBzaXplX3QgZmluZElnbm9yaW5nQ2FzZShjb25zdCBjaGFyKiBzLCB1bnNpZ25l
ZCBpbmRleCA9IDApIHsgcmV0dXJuIGZpbmRJZ25vcmluZ0Nhc2UocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBMQ2hhcio+KHMpLCBpbmRleCk7IH07CiAgICAgc2l6ZV90IGZpbmRJZ25vcmluZ0Nhc2Uo
U3RyaW5nSW1wbCosIHVuc2lnbmVkIGluZGV4ID0gMCk7CiAKICAgICBzaXplX3QgcmV2ZXJzZUZp
bmQoVUNoYXIsIHVuc2lnbmVkIGluZGV4ID0gVUlOVF9NQVgpOwpAQCAtMzc2LDYgKzQ5NCw3IEBA
IHByaXZhdGU6CiAgICAgYm9vbCBpc1N0YXRpYygpIGNvbnN0IHsgcmV0dXJuIG1fcmVmQ291bnQg
JiBzX3JlZkNvdW50RmxhZ0lzU3RhdGljU3RyaW5nOyB9CiAgICAgdGVtcGxhdGUgPGNsYXNzIFVD
aGFyUHJlZGljYXRlPiBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHN0cmlwTWF0Y2hlZENoYXJhY3Rl
cnMoVUNoYXJQcmVkaWNhdGUpOwogICAgIHRlbXBsYXRlIDxjbGFzcyBVQ2hhclByZWRpY2F0ZT4g
UGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBzaW1wbGlmeU1hdGNoZWRDaGFyYWN0ZXJzVG9TcGFjZShV
Q2hhclByZWRpY2F0ZSk7CisgICAgTkVWRVJfSU5MSU5FIGNvbnN0IFVDaGFyKiBnZXREYXRhMTZT
bG93Q2FzZSgpIGNvbnN0OwogCiAgICAgLy8gVGhlIGJvdHRvbSBiaXQgaW4gdGhlIHJlZiBjb3Vu
dCBpbmRpY2F0ZXMgYSBzdGF0aWMgKGltbW9ydGFsKSBzdHJpbmcuCiAgICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIHNfcmVmQ291bnRGbGFnSXNTdGF0aWNTdHJpbmcgPSAweDE7CkBAIC0zODYsNiAr
NTA1LDggQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc19mbGFnTWFzayA9
ICgxdSA8PCBzX2ZsYWdDb3VudCkgLSAxOwogICAgIENPTVBJTEVfQVNTRVJUKHNfZmxhZ0NvdW50
ID09IFN0cmluZ0hhc2hlcjo6ZmxhZ0NvdW50LCBTdHJpbmdIYXNoZXJfcmVzZXJ2ZXNfZW5vdWdo
X2JpdHNfZm9yX1N0cmluZ0ltcGxfZmxhZ3MpOwogCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IHNfaGFzaEZsYWdIYXMxNkJpdFNoYWRvdyA9IDF1IDw8IDc7CisgICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIHNfaGFzaEZsYWc4Qml0QnVmZmVyID0gMXUgPDwgNjsKICAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgc19oYXNoRmxhZ0hhc1Rlcm1pbmF0aW5nTnVsbENoYXJhY3RlciA9IDF1IDw8IDU7
CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNfaGFzaEZsYWdJc0F0b21pYyA9IDF1IDw8IDQ7
CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNfaGFzaEZsYWdEaWRSZXBvcnRDb3N0ID0gMXUg
PDwgMzsKQEAgLTM5NCwyNCArNTE1LDMzIEBAIHByaXZhdGU6CiAKICAgICB1bnNpZ25lZCBtX3Jl
ZkNvdW50OwogICAgIHVuc2lnbmVkIG1fbGVuZ3RoOwotICAgIGNvbnN0IFVDaGFyKiBtX2RhdGE7
CisgICAgdW5pb24geworICAgICAgICBjb25zdCBMQ2hhciogbV9kYXRhODsKKyAgICAgICAgY29u
c3QgVUNoYXIqIG1fZGF0YTE2OworICAgIH07CiAgICAgdW5pb24gewogICAgICAgICB2b2lkKiBt
X2J1ZmZlcjsKICAgICAgICAgU3RyaW5nSW1wbCogbV9zdWJzdHJpbmdCdWZmZXI7CisgICAgICAg
IG11dGFibGUgVUNoYXIqIG1fY29weURhdGExNjsKICAgICB9OwogICAgIG11dGFibGUgdW5zaWdu
ZWQgbV9oYXNoQW5kRmxhZ3M7CiB9OwogCiBib29sIGVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqLCBj
b25zdCBTdHJpbmdJbXBsKik7Ci1ib29sIGVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqLCBjb25zdCBj
aGFyKik7Ci1pbmxpbmUgYm9vbCBlcXVhbChjb25zdCBjaGFyKiBhLCBTdHJpbmdJbXBsKiBiKSB7
IHJldHVybiBlcXVhbChiLCBhKTsgfQorYm9vbCBlcXVhbChjb25zdCBTdHJpbmdJbXBsKiwgY29u
c3QgTENoYXIqKTsKK2lubGluZSBib29sIGVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqIGEsIGNvbnN0
IGNoYXIqIGIpIHsgcmV0dXJuIGVxdWFsKGEsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIq
PihiKSk7IH0KK2Jvb2wgZXF1YWwoY29uc3QgU3RyaW5nSW1wbCosIGNvbnN0IExDaGFyKiwgdW5z
aWduZWQpOworaW5saW5lIGJvb2wgZXF1YWwoY29uc3QgTENoYXIqIGEsIFN0cmluZ0ltcGwqIGIp
IHsgcmV0dXJuIGVxdWFsKGIsIGEpOyB9CitpbmxpbmUgYm9vbCBlcXVhbChjb25zdCBjaGFyKiBh
LCBTdHJpbmdJbXBsKiBiKSB7IHJldHVybiBlcXVhbChiLCByZWludGVycHJldF9jYXN0PGNvbnN0
IExDaGFyKj4oYSkpOyB9CiBib29sIGVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqLCBjb25zdCBVQ2hh
ciosIHVuc2lnbmVkKTsKIAogYm9vbCBlcXVhbElnbm9yaW5nQ2FzZShTdHJpbmdJbXBsKiwgU3Ry
aW5nSW1wbCopOwotYm9vbCBlcXVhbElnbm9yaW5nQ2FzZShTdHJpbmdJbXBsKiwgY29uc3QgY2hh
ciopOwotaW5saW5lIGJvb2wgZXF1YWxJZ25vcmluZ0Nhc2UoY29uc3QgY2hhciogYSwgU3RyaW5n
SW1wbCogYikgeyByZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2UoYiwgYSk7IH0KLWJvb2wgZXF1YWxJ
Z25vcmluZ0Nhc2UoY29uc3QgVUNoYXIqIGEsIGNvbnN0IGNoYXIqIGIsIHVuc2lnbmVkIGxlbmd0
aCk7Ci1pbmxpbmUgYm9vbCBlcXVhbElnbm9yaW5nQ2FzZShjb25zdCBjaGFyKiBhLCBjb25zdCBV
Q2hhciogYiwgdW5zaWduZWQgbGVuZ3RoKSB7IHJldHVybiBlcXVhbElnbm9yaW5nQ2FzZShiLCBh
LCBsZW5ndGgpOyB9Citib29sIGVxdWFsSWdub3JpbmdDYXNlKFN0cmluZ0ltcGwqLCBjb25zdCBM
Q2hhciopOworaW5saW5lIGJvb2wgZXF1YWxJZ25vcmluZ0Nhc2UoY29uc3QgTENoYXIqIGEsIFN0
cmluZ0ltcGwqIGIpIHsgcmV0dXJuIGVxdWFsSWdub3JpbmdDYXNlKGIsIGEpOyB9Citib29sIGVx
dWFsSWdub3JpbmdDYXNlKGNvbnN0IFVDaGFyKiwgY29uc3QgTENoYXIqLCB1bnNpZ25lZCk7Citp
bmxpbmUgYm9vbCBlcXVhbElnbm9yaW5nQ2FzZShjb25zdCBVQ2hhciogYSwgY29uc3QgY2hhciog
YiwgdW5zaWduZWQgbGVuZ3RoKSB7IHJldHVybiBlcXVhbElnbm9yaW5nQ2FzZShhLCByZWludGVy
cHJldF9jYXN0PGNvbnN0IExDaGFyKj4oYiksIGxlbmd0aCk7IH0KK2lubGluZSBib29sIGVxdWFs
SWdub3JpbmdDYXNlKGNvbnN0IExDaGFyKiBhLCBjb25zdCBVQ2hhciogYiwgdW5zaWduZWQgbGVu
Z3RoKSB7IHJldHVybiBlcXVhbElnbm9yaW5nQ2FzZShiLCBhLCBsZW5ndGgpOyB9CitpbmxpbmUg
Ym9vbCBlcXVhbElnbm9yaW5nQ2FzZShjb25zdCBjaGFyKiBhLCBjb25zdCBVQ2hhciogYiwgdW5z
aWduZWQgbGVuZ3RoKSB7IHJldHVybiBlcXVhbElnbm9yaW5nQ2FzZShiLCByZWludGVycHJldF9j
YXN0PGNvbnN0IExDaGFyKj4oYSksIGxlbmd0aCk7IH0KIAogYm9vbCBlcXVhbElnbm9yaW5nTnVs
bGl0eShTdHJpbmdJbXBsKiwgU3RyaW5nSW1wbCopOwogCkBAIC00MzYsNyArNTY2LDkgQEAgc3Rh
dGljIGlubGluZSBib29sIGlzU3BhY2VPck5ld2xpbmUoVUNoYQogCiBpbmxpbmUgUGFzc1JlZlB0
cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjppc29sYXRlZENvcHkoKSBjb25zdAogewotICAgIHJl
dHVybiBjcmVhdGUobV9kYXRhLCBtX2xlbmd0aCk7CisgICAgaWYgKGlzOEJpdCgpKQorICAgICAg
ICByZXR1cm4gY3JlYXRlKG1fZGF0YTgsIG1fbGVuZ3RoKTsKKyAgICByZXR1cm4gY3JlYXRlKG1f
ZGF0YTE2LCBtX2xlbmd0aCk7CiB9CiAKIHN0cnVjdCBTdHJpbmdIYXNoOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1dURlN0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1dURlN0cmluZy5jcHAJKHJldmlzaW9uIDk4NDk0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1dURlN0cmluZy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTYxLDE3ICs2MSwyNyBAQCBTdHJpbmc6OlN0cmluZyhjb25zdCBVQ2hhciog
c3RyKQogfQogCiAvLyBDb25zdHJ1Y3QgYSBzdHJpbmcgd2l0aCBsYXRpbjEgZGF0YS4KLVN0cmlu
Zzo6U3RyaW5nKGNvbnN0IGNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKK1N0cmlu
Zzo6U3RyaW5nKGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCiAgICAg
OiBtX2ltcGwoY2hhcmFjdGVycyA/IFN0cmluZ0ltcGw6OmNyZWF0ZShjaGFyYWN0ZXJzLCBsZW5n
dGgpIDogMCkKIHsKIH0KIAorU3RyaW5nOjpTdHJpbmcoY29uc3QgY2hhciogY2hhcmFjdGVycywg
dW5zaWduZWQgbGVuZ3RoKQorICAgIDogbV9pbXBsKGNoYXJhY3RlcnMgPyBTdHJpbmdJbXBsOjpj
cmVhdGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KGNoYXJhY3RlcnMpLCBsZW5ndGgp
IDogMCkKK3sKK30KKwogLy8gQ29uc3RydWN0IGEgc3RyaW5nIHdpdGggbGF0aW4xIGRhdGEsIGZy
b20gYSBudWxsLXRlcm1pbmF0ZWQgc291cmNlLgotU3RyaW5nOjpTdHJpbmcoY29uc3QgY2hhciog
Y2hhcmFjdGVycykKK1N0cmluZzo6U3RyaW5nKGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzKQogICAg
IDogbV9pbXBsKGNoYXJhY3RlcnMgPyBTdHJpbmdJbXBsOjpjcmVhdGUoY2hhcmFjdGVycykgOiAw
KQogewogfQogCitTdHJpbmc6OlN0cmluZyhjb25zdCBjaGFyKiBjaGFyYWN0ZXJzKQorICAgIDog
bV9pbXBsKGNoYXJhY3RlcnMgPyBTdHJpbmdJbXBsOjpjcmVhdGUocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBMQ2hhcio+KGNoYXJhY3RlcnMpKSA6IDApCit7Cit9CisKIHZvaWQgU3RyaW5nOjphcHBl
bmQoY29uc3QgU3RyaW5nJiBzdHIpCiB7CiAgICAgaWYgKHN0ci5pc0VtcHR5KCkpCkBAIC05NSw3
ICsxMDUsNyBAQCB2b2lkIFN0cmluZzo6YXBwZW5kKGNvbnN0IFN0cmluZyYgc3RyKQogICAgIH0K
IH0KIAotdm9pZCBTdHJpbmc6OmFwcGVuZChjaGFyIGMpCit2b2lkIFN0cmluZzo6YXBwZW5kKExD
aGFyIGMpCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgaXMgZXh0cmVtZWx5IGluZWZmaWNpZW50LiBT
byBtdWNoIHNvIHRoYXQgd2UgbWlnaHQgd2FudCB0byB0YWtlIHRoaXMKICAgICAvLyBvdXQgb2Yg
U3RyaW5nJ3MgQVBJLiBXZSBjYW4gbWFrZSBpdCBiZXR0ZXIgYnkgb3B0aW1pemluZyB0aGUgY2Fz
ZSB3aGVyZSBleGFjdGx5CkBAIC0zMzgsNyArMzQ4LDcgQEAgU3RyaW5nIFN0cmluZzo6Zm9ybWF0
KGNvbnN0IGNoYXIgKmZvcm1hdAogICAgIHZhX2VuZChhcmdzKTsKIAogICAgIFFCeXRlQXJyYXkg
YmEgPSBidWZmZXIudG9VdGY4KCk7Ci0gICAgcmV0dXJuIFN0cmluZ0ltcGw6OmNyZWF0ZShiYS5j
b25zdERhdGEoKSwgYmEubGVuZ3RoKCkpOworICAgIHJldHVybiBTdHJpbmdJbXBsOjpjcmVhdGUo
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KGJhLmNvbnN0RGF0YSgpKSwgYmEubGVuZ3Ro
KCkpOwogCiAjZWxpZiBPUyhXSU5DRSkKICAgICB2YV9saXN0IGFyZ3M7CkBAIC0zNTUsNyArMzY1
LDcgQEAgU3RyaW5nIFN0cmluZzo6Zm9ybWF0KGNvbnN0IGNoYXIgKmZvcm1hdAogICAgICAgICBp
ZiAod3JpdHRlbiA9PSAwKQogICAgICAgICAgICAgcmV0dXJuIFN0cmluZygiIik7CiAgICAgICAg
IGlmICh3cml0dGVuID4gMCkKLSAgICAgICAgICAgIHJldHVybiBTdHJpbmdJbXBsOjpjcmVhdGUo
YnVmZmVyLmRhdGEoKSwgd3JpdHRlbik7CisgICAgICAgICAgICByZXR1cm4gU3RyaW5nSW1wbDo6
Y3JlYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihidWZmZXIuZGF0YSgpKSwgd3Jp
dHRlbik7CiAgICAgICAgIAogICAgICAgICBidWZmZXJTaXplIDw8PSAxOwogICAgICAgICBidWZm
ZXIucmVzaXplKGJ1ZmZlclNpemUpOwpAQCAtMzk2LDcgKzQwNiw3IEBAIFN0cmluZyBTdHJpbmc6
OmZvcm1hdChjb25zdCBjaGFyICpmb3JtYXQKIAogICAgIHZhX2VuZChhcmdzKTsKICAgICAKLSAg
ICByZXR1cm4gU3RyaW5nSW1wbDo6Y3JlYXRlKGJ1ZmZlci5kYXRhKCksIGxlbik7CisgICAgcmV0
dXJuIFN0cmluZ0ltcGw6OmNyZWF0ZShyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oYnVm
ZmVyLmRhdGEoKSksIGxlbik7CiAjZW5kaWYKIH0KIApAQCAtNzE3LDcgKzcyNyw3IEBAIENTdHJp
bmcgU3RyaW5nOjp1dGY4KGJvb2wgc3RyaWN0KSBjb25zdAogICAgIHJldHVybiBDU3RyaW5nKGJ1
ZmZlclZlY3Rvci5kYXRhKCksIGJ1ZmZlciAtIGJ1ZmZlclZlY3Rvci5kYXRhKCkpOwogfQogCi1T
dHJpbmcgU3RyaW5nOjpmcm9tVVRGOChjb25zdCBjaGFyKiBzdHJpbmdTdGFydCwgc2l6ZV90IGxl
bmd0aCkKK1N0cmluZyBTdHJpbmc6OmZyb21VVEY4KGNvbnN0IExDaGFyKiBzdHJpbmdTdGFydCwg
c2l6ZV90IGxlbmd0aCkKIHsKICAgICBpZiAobGVuZ3RoID4gbnVtZXJpY19saW1pdHM8dW5zaWdu
ZWQ+OjptYXgoKSkKICAgICAgICAgQ1JBU0goKTsKQEAgLTczMiw4ICs3NDIsOCBAQCBTdHJpbmcg
U3RyaW5nOjpmcm9tVVRGOChjb25zdCBjaGFyKiBzdHJpCiAgICAgVUNoYXIqIGJ1ZmZlckVuZCA9
IGJ1ZmZlciArIGxlbmd0aDsKIAogICAgIC8vIFRyeSBjb252ZXJ0aW5nIGludG8gdGhlIGJ1ZmZl
ci4KLSAgICBjb25zdCBjaGFyKiBzdHJpbmdDdXJyZW50ID0gc3RyaW5nU3RhcnQ7Ci0gICAgaWYg
KGNvbnZlcnRVVEY4VG9VVEYxNigmc3RyaW5nQ3VycmVudCwgc3RyaW5nU3RhcnQgKyBsZW5ndGgs
ICZidWZmZXIsIGJ1ZmZlckVuZCkgIT0gY29udmVyc2lvbk9LKQorICAgIGNvbnN0IGNoYXIqIHN0
cmluZ0N1cnJlbnQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihzdHJpbmdTdGFydCk7
CisgICAgaWYgKGNvbnZlcnRVVEY4VG9VVEYxNigmc3RyaW5nQ3VycmVudCwgcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBjaGFyICo+KHN0cmluZ1N0YXJ0ICsgbGVuZ3RoKSwgJmJ1ZmZlciwgYnVmZmVy
RW5kKSAhPSBjb252ZXJzaW9uT0spCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAogICAgIC8v
IHN0cmluZ0J1ZmZlciBpcyBmdWxsICh0aGUgaW5wdXQgbXVzdCBoYXZlIGJlZW4gYWxsIGFzY2lp
KSBzbyBqdXN0IHJldHVybiBpdCEKQEAgLTc0NiwxNCArNzU2LDE0IEBAIFN0cmluZyBTdHJpbmc6
OmZyb21VVEY4KGNvbnN0IGNoYXIqIHN0cmkKICAgICByZXR1cm4gU3RyaW5nKHN0cmluZ0J1ZmZl
ci5jaGFyYWN0ZXJzKCksIHV0ZjE2TGVuZ3RoKTsKIH0KIAotU3RyaW5nIFN0cmluZzo6ZnJvbVVU
RjgoY29uc3QgY2hhciogc3RyaW5nKQorU3RyaW5nIFN0cmluZzo6ZnJvbVVURjgoY29uc3QgTENo
YXIqIHN0cmluZykKIHsKICAgICBpZiAoIXN0cmluZykKICAgICAgICAgcmV0dXJuIFN0cmluZygp
OwotICAgIHJldHVybiBmcm9tVVRGOChzdHJpbmcsIHN0cmxlbihzdHJpbmcpKTsKKyAgICByZXR1
cm4gZnJvbVVURjgoc3RyaW5nLCBzdHJsZW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4o
c3RyaW5nKSkpOwogfQogCi1TdHJpbmcgU3RyaW5nOjpmcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFj
ayhjb25zdCBjaGFyKiBzdHJpbmcsIHNpemVfdCBzaXplKQorU3RyaW5nIFN0cmluZzo6ZnJvbVVU
RjhXaXRoTGF0aW4xRmFsbGJhY2soY29uc3QgTENoYXIqIHN0cmluZywgc2l6ZV90IHNpemUpCiB7
CiAgICAgU3RyaW5nIHV0ZjggPSBmcm9tVVRGOChzdHJpbmcsIHNpemUpOwogICAgIGlmICghdXRm
OCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9XVEZTdHJpbmcuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvV1RGU3RyaW5nLmgJKHJl
dmlzaW9uIDk4NDk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1dURlN0cmlu
Zy5oCSh3b3JraW5nIGNvcHkpCkBAIC04OSw5ICs4OSwxMSBAQCBwdWJsaWM6CiAgICAgV1RGX0VY
UE9SVF9QUklWQVRFIFN0cmluZyhjb25zdCBVQ2hhciopOwogCiAgICAgLy8gQ29uc3RydWN0IGEg
c3RyaW5nIHdpdGggbGF0aW4xIGRhdGEuCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIFN0cmluZyhj
b25zdCBMQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKTsKICAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgU3RyaW5nKGNvbnN0IGNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCk7
CiAKICAgICAvLyBDb25zdHJ1Y3QgYSBzdHJpbmcgd2l0aCBsYXRpbjEgZGF0YSwgZnJvbSBhIG51
bGwtdGVybWluYXRlZCBzb3VyY2UuCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIFN0cmluZyhjb25z
dCBMQ2hhciogY2hhcmFjdGVycyk7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIFN0cmluZyhjb25z
dCBjaGFyKiBjaGFyYWN0ZXJzKTsKIAogICAgIC8vIENvbnN0cnVjdCBhIHN0cmluZyByZWZlcmVu
Y2luZyBhbiBleGlzdGluZyBTdHJpbmdJbXBsLgpAQCAtMTU1LDcgKzE1Nyw3IEBAIHB1YmxpYzoK
ICAgICAgICAgeyByZXR1cm4gbV9pbXBsID8gbV9pbXBsLT5maW5kKHN0ci5pbXBsKCksIHN0YXJ0
KSA6IG5vdEZvdW5kOyB9CiAgICAgc2l6ZV90IGZpbmQoQ2hhcmFjdGVyTWF0Y2hGdW5jdGlvblB0
ciBtYXRjaEZ1bmN0aW9uLCB1bnNpZ25lZCBzdGFydCA9IDApIGNvbnN0CiAgICAgICAgIHsgcmV0
dXJuIG1faW1wbCA/IG1faW1wbC0+ZmluZChtYXRjaEZ1bmN0aW9uLCBzdGFydCkgOiBub3RGb3Vu
ZDsgfQotICAgIHNpemVfdCBmaW5kKGNvbnN0IGNoYXIqIHN0ciwgdW5zaWduZWQgc3RhcnQgPSAw
KSBjb25zdAorICAgIHNpemVfdCBmaW5kKGNvbnN0IExDaGFyKiBzdHIsIHVuc2lnbmVkIHN0YXJ0
ID0gMCkgY29uc3QKICAgICAgICAgeyByZXR1cm4gbV9pbXBsID8gbV9pbXBsLT5maW5kKHN0ciwg
c3RhcnQpIDogbm90Rm91bmQ7IH0KIAogICAgIC8vIEZpbmQgdGhlIGxhc3QgaW5zdGFuY2Ugb2Yg
YSBzaW5nbGUgY2hhcmFjdGVyIG9yIHN0cmluZy4KQEAgLTE2NSw3ICsxNjcsNyBAQCBwdWJsaWM6
CiAgICAgICAgIHsgcmV0dXJuIG1faW1wbCA/IG1faW1wbC0+cmV2ZXJzZUZpbmQoc3RyLmltcGwo
KSwgc3RhcnQpIDogbm90Rm91bmQ7IH0KIAogICAgIC8vIENhc2UgaW5zZW5zaXRpdmUgc3RyaW5n
IG1hdGNoaW5nLgotICAgIFdURl9FWFBPUlRfUFJJVkFURSBzaXplX3QgZmluZElnbm9yaW5nQ2Fz
ZShjb25zdCBjaGFyKiBzdHIsIHVuc2lnbmVkIHN0YXJ0ID0gMCkgY29uc3QKKyAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgc2l6ZV90IGZpbmRJZ25vcmluZ0Nhc2UoY29uc3QgTENoYXIqIHN0ciwgdW5z
aWduZWQgc3RhcnQgPSAwKSBjb25zdAogICAgICAgICB7IHJldHVybiBtX2ltcGwgPyBtX2ltcGwt
PmZpbmRJZ25vcmluZ0Nhc2Uoc3RyLCBzdGFydCkgOiBub3RGb3VuZDsgfQogICAgIFdURl9FWFBP
UlRfUFJJVkFURSBzaXplX3QgZmluZElnbm9yaW5nQ2FzZShjb25zdCBTdHJpbmcmIHN0ciwgdW5z
aWduZWQgc3RhcnQgPSAwKSBjb25zdAogICAgICAgICB7IHJldHVybiBtX2ltcGwgPyBtX2ltcGwt
PmZpbmRJZ25vcmluZ0Nhc2Uoc3RyLmltcGwoKSwgc3RhcnQpIDogbm90Rm91bmQ7IH0KQEAgLTE3
Myw3ICsxNzUsNyBAQCBwdWJsaWM6CiAgICAgICAgIHsgcmV0dXJuIG1faW1wbCA/IG1faW1wbC0+
cmV2ZXJzZUZpbmRJZ25vcmluZ0Nhc2Uoc3RyLmltcGwoKSwgc3RhcnQpIDogbm90Rm91bmQ7IH0K
IAogICAgIC8vIFdyYXBwZXJzIGZvciBmaW5kICYgcmV2ZXJzZUZpbmQgYWRkaW5nIGR5bmFtaWMg
c2Vuc2l0aXZpdHkgY2hlY2suCi0gICAgc2l6ZV90IGZpbmQoY29uc3QgY2hhciogc3RyLCB1bnNp
Z25lZCBzdGFydCwgYm9vbCBjYXNlU2Vuc2l0aXZlKSBjb25zdAorICAgIHNpemVfdCBmaW5kKGNv
bnN0IExDaGFyKiBzdHIsIHVuc2lnbmVkIHN0YXJ0LCBib29sIGNhc2VTZW5zaXRpdmUpIGNvbnN0
CiAgICAgICAgIHsgcmV0dXJuIGNhc2VTZW5zaXRpdmUgPyBmaW5kKHN0ciwgc3RhcnQpIDogZmlu
ZElnbm9yaW5nQ2FzZShzdHIsIHN0YXJ0KTsgfQogICAgIHNpemVfdCBmaW5kKGNvbnN0IFN0cmlu
ZyYgc3RyLCB1bnNpZ25lZCBzdGFydCwgYm9vbCBjYXNlU2Vuc2l0aXZlKSBjb25zdAogICAgICAg
ICB7IHJldHVybiBjYXNlU2Vuc2l0aXZlID8gZmluZChzdHIsIHN0YXJ0KSA6IGZpbmRJZ25vcmlu
Z0Nhc2Uoc3RyLCBzdGFydCk7IH0KQEAgLTE4NSw3ICsxODcsNyBAQCBwdWJsaWM6CiAgICAgV1RG
X0VYUE9SVF9QUklWQVRFIFVDaGFyMzIgY2hhcmFjdGVyU3RhcnRpbmdBdCh1bnNpZ25lZCkgY29u
c3Q7IC8vIERpdHRvLgogICAgIAogICAgIGJvb2wgY29udGFpbnMoVUNoYXIgYykgY29uc3QgeyBy
ZXR1cm4gZmluZChjKSAhPSBub3RGb3VuZDsgfQotICAgIGJvb2wgY29udGFpbnMoY29uc3QgY2hh
ciogc3RyLCBib29sIGNhc2VTZW5zaXRpdmUgPSB0cnVlKSBjb25zdCB7IHJldHVybiBmaW5kKHN0
ciwgMCwgY2FzZVNlbnNpdGl2ZSkgIT0gbm90Rm91bmQ7IH0KKyAgICBib29sIGNvbnRhaW5zKGNv
bnN0IExDaGFyKiBzdHIsIGJvb2wgY2FzZVNlbnNpdGl2ZSA9IHRydWUpIGNvbnN0IHsgcmV0dXJu
IGZpbmQoc3RyLCAwLCBjYXNlU2Vuc2l0aXZlKSAhPSBub3RGb3VuZDsgfQogICAgIGJvb2wgY29u
dGFpbnMoY29uc3QgU3RyaW5nJiBzdHIsIGJvb2wgY2FzZVNlbnNpdGl2ZSA9IHRydWUpIGNvbnN0
IHsgcmV0dXJuIGZpbmQoc3RyLCAwLCBjYXNlU2Vuc2l0aXZlKSAhPSBub3RGb3VuZDsgfQogCiAg
ICAgYm9vbCBzdGFydHNXaXRoKGNvbnN0IFN0cmluZyYgcywgYm9vbCBjYXNlU2Vuc2l0aXZlID0g
dHJ1ZSkgY29uc3QKQEAgLTE5NCw3ICsxOTYsOCBAQCBwdWJsaWM6CiAgICAgICAgIHsgcmV0dXJu
IG1faW1wbCA/IG1faW1wbC0+ZW5kc1dpdGgocy5pbXBsKCksIGNhc2VTZW5zaXRpdmUpIDogcy5p
c0VtcHR5KCk7IH0KIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGFwcGVuZChjb25zdCBT
dHJpbmcmKTsKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBhcHBlbmQoY2hhcik7CisgICAg
V1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYXBwZW5kKExDaGFyKTsKKyAgICBpbmxpbmUgV1RGX0VY
UE9SVF9QUklWQVRFIHZvaWQgYXBwZW5kKGNoYXIgYykgeyBhcHBlbmQoc3RhdGljX2Nhc3Q8TENo
YXI+KGMpKTsgfTsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBhcHBlbmQoVUNoYXIpOwog
ICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGFwcGVuZChjb25zdCBVQ2hhciosIHVuc2lnbmVk
IGxlbmd0aCk7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgaW5zZXJ0KGNvbnN0IFN0cmlu
ZyYsIHVuc2lnbmVkIHBvcyk7CkBAIC0yOTksMTEgKzMwMiwxNCBAQCBwdWJsaWM6CiAKICAgICAv
LyBTdHJpbmc6OmZyb21VVEY4IHdpbGwgcmV0dXJuIGEgbnVsbCBzdHJpbmcgaWYKICAgICAvLyB0
aGUgaW5wdXQgZGF0YSBjb250YWlucyBpbnZhbGlkIFVURi04IHNlcXVlbmNlcy4KLSAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cmluZyBmcm9tVVRGOChjb25zdCBjaGFyKiwgc2l6ZV90
KTsKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cmluZyBmcm9tVVRGOChjb25zdCBj
aGFyKik7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJpbmcgZnJvbVVURjgoY29u
c3QgTENoYXIqLCBzaXplX3QpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RyaW5n
IGZyb21VVEY4KGNvbnN0IExDaGFyKik7CisgICAgaW5saW5lIFdURl9FWFBPUlRfUFJJVkFURSBz
dGF0aWMgU3RyaW5nIGZyb21VVEY4KGNvbnN0IGNoYXIqIHMsIHNpemVfdCBsZW5ndGgpIHsgcmV0
dXJuIGZyb21VVEY4KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihzKSwgbGVuZ3RoKTsg
fTsKKyAgICBpbmxpbmUgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJpbmcgZnJvbVVURjgo
Y29uc3QgY2hhciogcykgeyByZXR1cm4gZnJvbVVURjgocmVpbnRlcnByZXRfY2FzdDxjb25zdCBM
Q2hhcio+KHMpKTsgfTsKIAogICAgIC8vIFRyaWVzIHRvIGNvbnZlcnQgdGhlIHBhc3NlZCBpbiBz
dHJpbmcgdG8gVVRGLTgsIGJ1dCB3aWxsIGZhbGwgYmFjayB0byBMYXRpbi0xIGlmIHRoZSBzdHJp
bmcgaXMgbm90IHZhbGlkIFVURi04LgotICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3Ry
aW5nIGZyb21VVEY4V2l0aExhdGluMUZhbGxiYWNrKGNvbnN0IGNoYXIqLCBzaXplX3QpOworICAg
IFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RyaW5nIGZyb21VVEY4V2l0aExhdGluMUZhbGxi
YWNrKGNvbnN0IExDaGFyKiwgc2l6ZV90KTsKKyAgICBpbmxpbmUgV1RGX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyBTdHJpbmcgZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJhY2soY29uc3QgY2hhciogcywg
c2l6ZV90IGxlbmd0aCkgeyByZXR1cm4gZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJhY2socmVpbnRl
cnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KHMpLCBsZW5ndGgpOyB9OwogICAgIAogICAgIC8vIERl
dGVybWluZXMgdGhlIHdyaXRpbmcgZGlyZWN0aW9uIHVzaW5nIHRoZSBVbmljb2RlIEJpZGkgQWxn
b3JpdGhtIHJ1bGVzIFAyIGFuZCBQMy4KICAgICBXVEY6OlVuaWNvZGU6OkRpcmVjdGlvbiBkZWZh
dWx0V3JpdGluZ0RpcmVjdGlvbihib29sKiBoYXNTdHJvbmdEaXJlY3Rpb25hbGl0eSA9IDApIGNv
bnN0CkBAIC0zMzgsMTYgKzM0NCwyMiBAQCBRRGF0YVN0cmVhbSYgb3BlcmF0b3I+PihRRGF0YVN0
cmVhbSYgc3RyCiBpbmxpbmUgU3RyaW5nJiBvcGVyYXRvcis9KFN0cmluZyYgYSwgY29uc3QgU3Ry
aW5nJiBiKSB7IGEuYXBwZW5kKGIpOyByZXR1cm4gYTsgfQogCiBpbmxpbmUgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IFN0cmluZyYgYSwgY29uc3QgU3RyaW5nJiBiKSB7IHJldHVybiBlcXVhbChhLmlt
cGwoKSwgYi5pbXBsKCkpOyB9Ci1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFN0cmluZyYg
YSwgY29uc3QgY2hhciogYikgeyByZXR1cm4gZXF1YWwoYS5pbXBsKCksIGIpOyB9Ci1pbmxpbmUg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IGNoYXIqIGEsIGNvbnN0IFN0cmluZyYgYikgeyByZXR1cm4g
ZXF1YWwoYSwgYi5pbXBsKCkpOyB9CitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFN0cmlu
ZyYgYSwgY29uc3QgTENoYXIqIGIpIHsgcmV0dXJuIGVxdWFsKGEuaW1wbCgpLCBiKTsgfQoraW5s
aW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHJpbmcmIGEsIGNvbnN0IGNoYXIqIGIpIHsgcmV0
dXJuIGVxdWFsKGEuaW1wbCgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oYikpOyB9
CitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IExDaGFyKiBhLCBjb25zdCBTdHJpbmcmIGIp
IHsgcmV0dXJuIGVxdWFsKGEsIGIuaW1wbCgpKTsgfQoraW5saW5lIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBjaGFyKiBhLCBjb25zdCBTdHJpbmcmIGIpIHsgcmV0dXJuIGVxdWFsKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPihhKSwgYi5pbXBsKCkpOyB9CiAKIGlubGluZSBib29sIG9wZXJh
dG9yIT0oY29uc3QgU3RyaW5nJiBhLCBjb25zdCBTdHJpbmcmIGIpIHsgcmV0dXJuICFlcXVhbChh
LmltcGwoKSwgYi5pbXBsKCkpOyB9Ci1pbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFN0cmlu
ZyYgYSwgY29uc3QgY2hhciogYikgeyByZXR1cm4gIWVxdWFsKGEuaW1wbCgpLCBiKTsgfQotaW5s
aW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBjaGFyKiBhLCBjb25zdCBTdHJpbmcmIGIpIHsgcmV0
dXJuICFlcXVhbChhLCBiLmltcGwoKSk7IH0KK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3Qg
U3RyaW5nJiBhLCBjb25zdCBMQ2hhciogYikgeyByZXR1cm4gIWVxdWFsKGEuaW1wbCgpLCBiKTsg
fQoraW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBTdHJpbmcmIGEsIGNvbnN0IGNoYXIqIGIp
IHsgcmV0dXJuICFlcXVhbChhLmltcGwoKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+
KGIpKTsgfQoraW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBMQ2hhciogYSwgY29uc3QgU3Ry
aW5nJiBiKSB7IHJldHVybiAhZXF1YWwoYSwgYi5pbXBsKCkpOyB9CitpbmxpbmUgYm9vbCBvcGVy
YXRvciE9KGNvbnN0IGNoYXIqIGEsIGNvbnN0IFN0cmluZyYgYikgeyByZXR1cm4gIWVxdWFsKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihhKSwgYi5pbXBsKCkpOyB9CiAKIGlubGluZSBi
b29sIGVxdWFsSWdub3JpbmdDYXNlKGNvbnN0IFN0cmluZyYgYSwgY29uc3QgU3RyaW5nJiBiKSB7
IHJldHVybiBlcXVhbElnbm9yaW5nQ2FzZShhLmltcGwoKSwgYi5pbXBsKCkpOyB9Ci1pbmxpbmUg
Ym9vbCBlcXVhbElnbm9yaW5nQ2FzZShjb25zdCBTdHJpbmcmIGEsIGNvbnN0IGNoYXIqIGIpIHsg
cmV0dXJuIGVxdWFsSWdub3JpbmdDYXNlKGEuaW1wbCgpLCBiKTsgfQotaW5saW5lIGJvb2wgZXF1
YWxJZ25vcmluZ0Nhc2UoY29uc3QgY2hhciogYSwgY29uc3QgU3RyaW5nJiBiKSB7IHJldHVybiBl
cXVhbElnbm9yaW5nQ2FzZShhLCBiLmltcGwoKSk7IH0KK2lubGluZSBib29sIGVxdWFsSWdub3Jp
bmdDYXNlKGNvbnN0IFN0cmluZyYgYSwgY29uc3QgTENoYXIqIGIpIHsgcmV0dXJuIGVxdWFsSWdu
b3JpbmdDYXNlKGEuaW1wbCgpLCBiKTsgfQoraW5saW5lIGJvb2wgZXF1YWxJZ25vcmluZ0Nhc2Uo
Y29uc3QgU3RyaW5nJiBhLCBjb25zdCBjaGFyKiBiKSB7IHJldHVybiBlcXVhbElnbm9yaW5nQ2Fz
ZShhLmltcGwoKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KGIpKTsgfQoraW5saW5l
IGJvb2wgZXF1YWxJZ25vcmluZ0Nhc2UoY29uc3QgTENoYXIqIGEsIGNvbnN0IFN0cmluZyYgYikg
eyByZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2UoYSwgYi5pbXBsKCkpOyB9CitpbmxpbmUgYm9vbCBl
cXVhbElnbm9yaW5nQ2FzZShjb25zdCBjaGFyKiBhLCBjb25zdCBTdHJpbmcmIGIpIHsgcmV0dXJu
IGVxdWFsSWdub3JpbmdDYXNlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihhKSwgYi5p
bXBsKCkpOyB9CiAKIGlubGluZSBib29sIGVxdWFsUG9zc2libHlJZ25vcmluZ0Nhc2UoY29uc3Qg
U3RyaW5nJiBhLCBjb25zdCBTdHJpbmcmIGIsIGJvb2wgaWdub3JlQ2FzZSkgCiB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvVW5pY29kZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdW5pY29kZS9Vbmljb2RlLmgJKHJldmlzaW9uIDk4
NDk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi91bmljb2RlL1VuaWNvZGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMzksNCArMzksNyBAQAogCiBDT01QSUxFX0FTU0VSVChzaXplb2YoVUNo
YXIpID09IDIsIFVDaGFySXNUd29CeXRlcyk7CiAKKy8vIERlZmluZSBwbGF0Zm9ybSBuZXV0cmFs
IDggYml0IGNoYXJhY3RlciB0eXBlIChMIGlzIGZvciBMYXRpbi0xKS4KK3R5cGVkZWYgdW5zaWdu
ZWQgY2hhciBMQ2hhcjsKKwogI2VuZGlmIC8vIFdURl9VTklDT0RFX0gKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwCShyZXZpc2lvbiA5ODQ5NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTAwLDcg
KzI1MDAsNyBAQCB2b2lkIGppdENvbXBpbGUoWWFyclBhdHRlcm4mIHBhdHRlcm4sIFlhCiAgICAg
WWFyckdlbmVyYXRvcihwYXR0ZXJuLCBjaGFyU2l6ZSkuY29tcGlsZShnbG9iYWxEYXRhLCBqaXRP
YmplY3QpOwogfQogCi1pbnQgZXhlY3V0ZShZYXJyQ29kZUJsb2NrJiBqaXRPYmplY3QsIGNvbnN0
IGNoYXIqIGlucHV0LCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoLCBpbnQqIG91dHB1
dCkKK2ludCBleGVjdXRlKFlhcnJDb2RlQmxvY2smIGppdE9iamVjdCwgY29uc3QgTENoYXIqIGlu
cHV0LCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoLCBpbnQqIG91dHB1dCkKIHsKICAg
ICByZXR1cm4gaml0T2JqZWN0LmV4ZWN1dGUoaW5wdXQsIHN0YXJ0LCBsZW5ndGgsIG91dHB1dCk7
CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5oCShyZXZpc2lvbiA5ODQ5
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuaAkod29ya2luZyBjb3B5
KQpAQCAtNDgsNyArNDgsNyBAQCBjbGFzcyBFeGVjdXRhYmxlUG9vbDsKIG5hbWVzcGFjZSBZYXJy
IHsKIAogY2xhc3MgWWFyckNvZGVCbG9jayB7Ci0gICAgdHlwZWRlZiBpbnQgKCpZYXJySklUQ29k
ZTgpKGNvbnN0IGNoYXIqIGlucHV0LCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoLCBp
bnQqIG91dHB1dCkgWUFSUl9DQUxMOworICAgIHR5cGVkZWYgaW50ICgqWWFyckpJVENvZGU4KShj
b25zdCBMQ2hhciogaW5wdXQsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIGludCog
b3V0cHV0KSBZQVJSX0NBTEw7CiAgICAgdHlwZWRlZiBpbnQgKCpZYXJySklUQ29kZTE2KShjb25z
dCBVQ2hhciogaW5wdXQsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIGludCogb3V0
cHV0KSBZQVJSX0NBTEw7CiAKIHB1YmxpYzoKQEAgLTY4LDcgKzY4LDcgQEAgcHVibGljOgogICAg
IHZvaWQgc2V0OEJpdENvZGUoTWFjcm9Bc3NlbWJsZXI6OkNvZGVSZWYgcmVmKSB7IG1fcmVmOCA9
IHJlZjsgfQogICAgIHZvaWQgc2V0MTZCaXRDb2RlKE1hY3JvQXNzZW1ibGVyOjpDb2RlUmVmIHJl
ZikgeyBtX3JlZjE2ID0gcmVmOyB9CiAKLSAgICBpbnQgZXhlY3V0ZShjb25zdCBjaGFyKiBpbnB1
dCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCwgaW50KiBvdXRwdXQpCisgICAgaW50
IGV4ZWN1dGUoY29uc3QgTENoYXIqIGlucHV0LCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVu
Z3RoLCBpbnQqIG91dHB1dCkKICAgICB7CiAgICAgICAgIEFTU0VSVChoYXM4Qml0Q29kZSgpKTsK
ICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8WWFyckpJVENvZGU4PihtX3JlZjguY29k
ZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKGlucHV0LCBzdGFydCwgbGVuZ3RoLCBvdXRwdXQpOwpA
QCAtOTEsNyArOTEsNyBAQCBwcml2YXRlOgogCiB2b2lkIGppdENvbXBpbGUoWWFyclBhdHRlcm4m
LCBZYXJyQ2hhclNpemUsIEpTR2xvYmFsRGF0YSosIFlhcnJDb2RlQmxvY2smIGppdE9iamVjdCk7
CiBpbnQgZXhlY3V0ZShZYXJyQ29kZUJsb2NrJiBqaXRPYmplY3QsIGNvbnN0IFVDaGFyKiBpbnB1
dCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCwgaW50KiBvdXRwdXQpOwotaW50IGV4
ZWN1dGUoWWFyckNvZGVCbG9jayYgaml0T2JqZWN0LCBjb25zdCBjaGFyKiBpbnB1dCwgdW5zaWdu
ZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCwgaW50KiBvdXRwdXQpOworaW50IGV4ZWN1dGUoWWFy
ckNvZGVCbG9jayYgaml0T2JqZWN0LCBjb25zdCBMQ2hhciogaW5wdXQsIHVuc2lnbmVkIHN0YXJ0
LCB1bnNpZ25lZCBsZW5ndGgsIGludCogb3V0cHV0KTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OllhcnIKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyclBhcnNlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJQYXJzZXIuaAkocmV2
aXNpb24gOTg0OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJyUGFyc2VyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIzMSw3ICsyMzEsNyBAQCBwcml2YXRlOgogICAgICAgICA6IG1f
ZGVsZWdhdGUoZGVsZWdhdGUpCiAgICAgICAgICwgbV9iYWNrUmVmZXJlbmNlTGltaXQoYmFja1Jl
ZmVyZW5jZUxpbWl0KQogICAgICAgICAsIG1fZXJyKE5vRXJyb3IpCi0gICAgICAgICwgbV9kYXRh
KHBhdHRlcm4pCisgICAgICAgICwgbV9kYXRhKHBhdHRlcm4uY2hhcmFjdGVyczE2KCkpCiAgICAg
ICAgICwgbV9zaXplKHBhdHRlcm4ubGVuZ3RoKCkpCiAgICAgICAgICwgbV9pbmRleCgwKQogICAg
ICAgICAsIG1fcGFyZW50aGVzZXNOZXN0aW5nRGVwdGgoMCkKQEAgLTc5Myw3ICs3OTMsNyBAQCBw
cml2YXRlOgogICAgIERlbGVnYXRlJiBtX2RlbGVnYXRlOwogICAgIHVuc2lnbmVkIG1fYmFja1Jl
ZmVyZW5jZUxpbWl0OwogICAgIEVycm9yQ29kZSBtX2VycjsKLSAgICBjb25zdCBVU3RyaW5nJiBt
X2RhdGE7CisgICAgY29uc3QgVUNoYXIqIG1fZGF0YTsKICAgICB1bnNpZ25lZCBtX3NpemU7CiAg
ICAgdW5zaWduZWQgbV9pbmRleDsKICAgICB1bnNpZ25lZCBtX3BhcmVudGhlc2VzTmVzdGluZ0Rl
cHRoOwpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTg1MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAxMS0xMC0yNiAgTWlj
aGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KKworICAgICAgICBJbnZlc3RpZ2F0ZSBz
dG9yaW5nIHN0cmluZ3MgaW4gOC1iaXQgYnVmZmVycyB3aGVuIHBvc3NpYmxlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NjE2MQorCisgICAgICAgIENo
YW5nZXMgdG8gc3VwcG9ydCA4IGJpdCBTdHJpbmdJbXBsIGNoYW5nZXMuCisgICAgICAgIAorICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIE5vIG5l
dyB0ZXN0cywgcmVmYWN0b3JlZCBTdHJpbmdJbXBsIGZvciA4IGJpdCBzdHJpbmdzLgorCisgICAg
ICAgICogcGxhdGZvcm0vdGV4dC9jZi9TdHJpbmdJbXBsQ0YuY3BwOgorICAgICAgICAoV1RGOjpT
dHJpbmdJbXBsOjpjcmVhdGVDRlN0cmluZyk6CisKIDIwMTEtMTAtMjYgIENocmlzIFJvZ2VycyAg
PGNyb2dlcnNAZ29vZ2xlLmNvbT4KIAogICAgICAgICBBZGQgQXVkaW9Tb3VyY2VQcm92aWRlckNs
aWVudCBhbmQgc2V0Rm9ybWF0KCkgbWV0aG9kIHNvIHdlIGNhbiBrbm93IGF1ZGlvIHN0cmVhbSBm
b3JtYXQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvY2YvU3RyaW5nSW1wbENG
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2NmL1N0cmlu
Z0ltcGxDRi5jcHAJKHJldmlzaW9uIDk4NDk0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC9jZi9TdHJpbmdJbXBsQ0YuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzYsMTMgKzEzNiwx
MyBAQCBDRlN0cmluZ1JlZiBTdHJpbmdJbXBsOjpjcmVhdGVDRlN0cmluZygpCiB7CiAgICAgQ0ZB
bGxvY2F0b3JSZWYgYWxsb2NhdG9yID0gKG1fbGVuZ3RoICYmIGlzTWFpblRocmVhZCgpKSA/IFN0
cmluZ1dyYXBwZXJDRkFsbG9jYXRvcjo6YWxsb2NhdG9yKCkgOiAwOwogICAgIGlmICghYWxsb2Nh
dG9yKQotICAgICAgICByZXR1cm4gQ0ZTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCByZWlu
dGVycHJldF9jYXN0PGNvbnN0IFVuaUNoYXIqPihtX2RhdGEpLCBtX2xlbmd0aCk7CisgICAgICAg
IHJldHVybiBDRlN0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgVW5pQ2hhcio+KGNoYXJhY3RlcnMoKSksIG1fbGVuZ3RoKTsKIAogICAgIC8vIFB1dCBw
b2ludGVyIHRvIHRoZSBTdHJpbmdJbXBsIGluIGEgZ2xvYmFsIHNvIHRoZSBhbGxvY2F0b3IgY2Fu
IHN0b3JlIGl0IHdpdGggdGhlIENGU3RyaW5nLgogICAgIEFTU0VSVCghU3RyaW5nV3JhcHBlckNG
QWxsb2NhdG9yOjpjdXJyZW50U3RyaW5nKTsKICAgICBTdHJpbmdXcmFwcGVyQ0ZBbGxvY2F0b3I6
OmN1cnJlbnRTdHJpbmcgPSB0aGlzOwogCi0gICAgQ0ZTdHJpbmdSZWYgc3RyaW5nID0gQ0ZTdHJp
bmdDcmVhdGVXaXRoQ2hhcmFjdGVyc05vQ29weShhbGxvY2F0b3IsIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgVW5pQ2hhcio+KG1fZGF0YSksIG1fbGVuZ3RoLCBrQ0ZBbGxvY2F0b3JOdWxsKTsKKyAg
ICBDRlN0cmluZ1JlZiBzdHJpbmcgPSBDRlN0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzTm9Db3B5
KGFsbG9jYXRvciwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVbmlDaGFyKj4oY2hhcmFjdGVycygp
KSwgbV9sZW5ndGgsIGtDRkFsbG9jYXRvck51bGwpOwogCiAgICAgLy8gVGhlIGFsbG9jYXRvciBj
bGVhcmVkIHRoZSBnbG9iYWwgd2hlbiBpdCByZWFkIGl0LCBidXQgYWxzbyBjbGVhciBpdCBoZXJl
IGp1c3QgaW4gY2FzZS4KICAgICBBU1NFUlQoIVN0cmluZ1dyYXBwZXJDRkFsbG9jYXRvcjo6Y3Vy
cmVudFN0cmluZyk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiA5ODUxNSkKKysrIFNvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDExLTEw
LTI2ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAgICAgIEludmVz
dGlnYXRlIHN0b3Jpbmcgc3RyaW5ncyBpbiA4LWJpdCBidWZmZXJzIHdoZW4gcG9zc2libGUKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2MTYxCisKKyAg
ICAgICAgQWRkZWQgZXhwb3J0IG9mIFN0cmluZ0ltcGw6OmdldERhdGExNlNsb3dDYXNlIGZvciBs
aW5raW5nIHRlc3RzLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogd2luL1dlYktpdDIuZGVmOgorCiAyMDExLTEwLTI2ICBKZWZmIE1pbGxlciAgPGpl
ZmZtQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWJLaXQyIHNob3VsZCByZXNwZWN0IHNlY3JldCBX
ZWJLaXRPbWl0UERGU3VwcG9ydCBwcmVmZXJlbmNlIG9uIHRoZSBNYWMKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL3dpbi9XZWJLaXQyLmRlZgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi93aW4v
V2ViS2l0Mi5kZWYJKHJldmlzaW9uIDk4NDk0KQorKysgU291cmNlL1dlYktpdDIvd2luL1dlYktp
dDIuZGVmCSh3b3JraW5nIGNvcHkpCkBAIC0xNTUsNiArMTU1LDcgQEAgRVhQT1JUUwogICAgICAg
ICA/ZXF1YWxAV1RGQEBZQV9OUEJWU3RyaW5nSW1wbEAxQFBCREBaCiAgICAgICAgID9leHRlcm5h
bFJlcHJlc2VudGF0aW9uQFdlYkNvcmVAQFlBP0FWU3RyaW5nQFdURkBAUEFWRWxlbWVudEAxQElA
WgogICAgICAgICA/Z2V0Q2FjaGVkRE9NU3RydWN0dXJlQFdlYkNvcmVAQFlBUEFWU3RydWN0dXJl
QEpTQ0BAUEFWSlNET01HbG9iYWxPYmplY3RAMUBQQlVDbGFzc0luZm9AM0BAWgorICAgICAgICA/
Z2V0RGF0YTE2U2xvd0Nhc2VAU3RyaW5nSW1wbEBXVEZAQEFCRVBCX1dYWgogICAgICAgICA/Z2V0
RWxlbWVudEJ5SWRAVHJlZVNjb3BlQFdlYkNvcmVAQFFCRVBBVkVsZW1lbnRAMkBBQlZBdG9taWNT
dHJpbmdAV1RGQEBAWgogICAgICAgICA/Z2V0TG9jYXRpb25BbmRMZW5ndGhGcm9tUmFuZ2VAVGV4
dEl0ZXJhdG9yQFdlYkNvcmVAQFNBX05QQVZFbGVtZW50QDJAUEJWUmFuZ2VAMkBBQUkyQFoKICAg
ICAgICAgP2lzUHJlbG9hZGVkQENhY2hlZFJlc291cmNlTG9hZGVyQFdlYkNvcmVAQFFCRV9OQUJW
U3RyaW5nQFdURkBAQFoK
</data>
<flag name="review"
          id="110698"
          type_id="1"
          status="-"
          setter="ggaren"
    />
    <flag name="commit-queue"
          id="110707"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112623</attachid>
            <date>2011-10-26 17:32:48 -0700</date>
            <delta_ts>2011-10-26 18:12:34 -0700</delta_ts>
            <desc>Patch with updates suggested in comment #26, stylebot and build failures</desc>
            <filename>66161-13.patch</filename>
            <type>text/plain</type>
            <size>120019</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTg1MTUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTc1IEBA
CisyMDExLTEwLTI2ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIEludmVzdGlnYXRlIHN0b3Jpbmcgc3RyaW5ncyBpbiA4LWJpdCBidWZmZXJzIHdoZW4gcG9z
c2libGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2
MTYxCisKKyAgICAgICAgSW52ZXN0aWdhdGUgc3RvcmluZyBzdHJpbmdzIGluIDgtYml0IGJ1ZmZl
cnMgd2hlbiBwb3NzaWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NjYxNjEKKworICAgICAgICBBZGRlZCBzdXBwb3J0IGZvciA4IGJpdCBzdHJpbmcg
ZGF0YSBpbiBTdHJpbmdJbXBsLiAgQ2hhbmdlZAorICAgICAgICAoVUNoYXIqKSBtX2RhdGEgdG8g
bV9kYXRhMTYuICBBZGRlZCBjaGFyKiBtX2RhdGE4IGFzIGEgdW5pb24KKyAgICAgICAgd2l0aCBt
X2RhdGExNi4gIEFkZGVkIFVDaGFyKiBtX2NvcHlEYXRhMTYgdG8gdGhlIG90aGVyIHVuaW9uCisg
ICAgICAgIHRvIHN0b3JlIGEgMTYgYml0IGNvcHkgb2YgYW4gOCBiaXQgc3RyaW5nIHdoZW4gbmVl
ZGVkLgorICAgICAgICBBZGRlZCBjaGFyYWN0ZXJzOCgpIGFuZCBjaGFyYWN0ZXJzMTYoKSBhY2Nl
c3NvciBtZXRob2RzCisgICAgICAgIHRoYXQgYXNzdW1lIHRoZSBjYWxsZXIgaGFzIGNoZWNrZWQg
dGhlIHVuZGVybHlpbmcgc3RyaW5nIHR5cGUKKyAgICAgICAgdmlhIHRoZSBuZXcgaXM4Qml0KCkg
bWV0aG9kLiBUaGUgY2hhcmFjdGVycygpIG1ldGhvZCB3aWxsCisgICAgICAgIHJldHVybiBhIFVD
aGFyKiBvZiB0aGUgc3RyaW5nLCBtYXRlcmlhbGl6aW5nIGEgMTYgYml0IGNvcHkgaWYgdGhlCisg
ICAgICAgIHN0cmluZyBpcyBhbiA4IGJpdCBzdHJpbmcuICBBZGRlZCB0d28gZmxhZ3MsIG9uZSBm
b3IgOCBiaXQgYnVmZmVyCisgICAgICAgIGFuZCBhIHNlY29uZCBmb3IgYSAxNiBiaXQgY29weSBm
b3IgYW4gOCBiaXQgc3RyaW5nLgorCisgICAgICAgIEZpeGVkIG1ldGhvZCBuYW1lIHR5cG8gKFN0
cmluZ0hhc2hlcjo6ZGVmYXVsdENvdmVydGVyKCkpLgorCisgICAgICAgIE92ZXIgdGltZSB0aGUg
Z29hbCBpcyB0byBlbGltaW5hdGUgY2FsbHMgdG8gY2hhcmFjdGVycygpIGFuZAorICAgICAgICB1
cyB0aGUgY2hhcmFjdGVyOCgpIGFuZCBjaGFyYWN0ZXJzMTYoKSBhY2Nlc3NvcnMuCisKKyAgICAg
ICAgVGhpcyBwYXRjaCBkb2VzIG5vdCBpbmNsdWRlIGNoYW5nZXMgdGhhdCBhY3R1YWxseSBjcmVh
dGUgOCBiaXQKKyAgICAgICAgc3RyaW5ncy4gVGhpcyBpcyB0aGUgZmlyc3Qgb2YgYXQgbGVhc3Qg
OCBwYXRjaGVzLiAgU3Vic2VxdWVudAorICAgICAgICBwYXRjaGVzIHdpbGwgYmUgc3VibWl0dGVk
IGZvciBKSVQgY2hhbmdlcywgbWFraW5nIHRoZSBKU0MgbGV4ZXIsCisgICAgICAgIHBhcnNlciBh
bmQgbGl0ZXJhbCBwYXJzZXIsIEphdmFTY3JpcHQgc3RyaW5nIGNoYW5nZXMgYW5kCisgICAgICAg
IHRoZW4gY2hhbmdlcyBpbiB3ZWJjb3JlIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoZSA4IGJpdCBz
dHJpbmdzLgorCisgICAgICAgIFRoaXMgY2hhbmdlIGlzIHBlcmZvcm1hbmNlIG5ldXRyYWwgZm9y
IFN1blNwaWRlciBhbmQgVjggd2hlbgorICAgICAgICBydW4gZnJvbSB0aGUgY29tbWFuZCBsaW5l
IHdpdGggImpzYyIuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBKYXZhU2NyaXB0Q29yZS5leHA6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJw
cmV0ZXIuY3BwOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y2FsbEV2YWwpOgorICAgICAg
ICAqIHBhcnNlci9Tb3VyY2VQcm92aWRlci5oOgorICAgICAgICAoSlNDOjpVU3RyaW5nU291cmNl
UHJvdmlkZXI6OmRhdGEpOgorICAgICAgICAoSlNDOjpVU3RyaW5nU291cmNlUHJvdmlkZXI6OlVT
dHJpbmdTb3VyY2VQcm92aWRlcik6CisgICAgICAgICogcnVudGltZS9JZGVudGlmaWVyLmNwcDoK
KyAgICAgICAgKEpTQzo6SWRlbnRpZmllckNTdHJpbmdUcmFuc2xhdG9yOjpoYXNoKToKKyAgICAg
ICAgKEpTQzo6SWRlbnRpZmllckNTdHJpbmdUcmFuc2xhdG9yOjplcXVhbCk6CisgICAgICAgIChK
U0M6OklkZW50aWZpZXJDU3RyaW5nVHJhbnNsYXRvcjo6dHJhbnNsYXRlKToKKyAgICAgICAgKEpT
Qzo6SWRlbnRpZmllcjo6YWRkKToKKyAgICAgICAgKEpTQzo6SWRlbnRpZmllcjo6dG9VSW50MzIp
OgorICAgICAgICAqIHJ1bnRpbWUvSWRlbnRpZmllci5oOgorICAgICAgICAoSlNDOjpJZGVudGlm
aWVyOjplcXVhbCk6CisgICAgICAgIChKU0M6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpv
cGVyYXRvciE9KToKKyAgICAgICAgKiBydW50aW1lL0pTU3RyaW5nLmNwcDoKKyAgICAgICAgKEpT
Qzo6SlNTdHJpbmc6OnJlc29sdmVSb3BlKToKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OnJlc29s
dmVSb3BlU2xvd0Nhc2UpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwLmNwcDoKKyAgICAgICAg
KEpTQzo6UmVnRXhwOjptYXRjaCk6CisgICAgICAgICogcnVudGltZS9TdHJpbmdQcm90b3R5cGUu
Y3BwOgorICAgICAgICAoSlNDOjpqc1NwbGljZVN1YnN0cmluZ3NXaXRoU2VwYXJhdG9ycyk6Cisg
ICAgICAgICogcnVudGltZS9VU3RyaW5nLmNwcDoKKyAgICAgICAgKEpTQzo6VVN0cmluZzo6VVN0
cmluZyk6CisgICAgICAgIChKU0M6OmVxdWFsU2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpVU3Ry
aW5nOjp1dGY4KToKKyAgICAgICAgKiBydW50aW1lL1VTdHJpbmcuaDoKKyAgICAgICAgKEpTQzo6
VVN0cmluZzo6Y2hhcmFjdGVycyk6CisgICAgICAgIChKU0M6OlVTdHJpbmc6OmNoYXJhY3RlcnM4
KToKKyAgICAgICAgKEpTQzo6VVN0cmluZzo6Y2hhcmFjdGVyczE2KToKKyAgICAgICAgKEpTQzo6
VVN0cmluZzo6aXM4Qml0KToKKyAgICAgICAgKEpTQzo6VVN0cmluZzo6b3BlcmF0b3JbXSk6Cisg
ICAgICAgIChKU0M6OlVTdHJpbmc6OmZpbmQpOgorICAgICAgICAoSlNDOjpvcGVyYXRvcj09KToK
KyAgICAgICAgKiB3dGYvU3RyaW5nSGFzaGVyLmg6CisgICAgICAgIChXVEY6OlN0cmluZ0hhc2hl
cjo6Y29tcHV0ZUhhc2gpOgorICAgICAgICAoV1RGOjpTdHJpbmdIYXNoZXI6OmRlZmF1bHRDb252
ZXJ0ZXIpOgorICAgICAgICAqIHd0Zi90ZXh0L0F0b21pY1N0cmluZy5jcHA6CisgICAgICAgIChX
VEY6OkNTdHJpbmdUcmFuc2xhdG9yOjpoYXNoKToKKyAgICAgICAgKFdURjo6Q1N0cmluZ1RyYW5z
bGF0b3I6OmVxdWFsKToKKyAgICAgICAgKFdURjo6Q1N0cmluZ1RyYW5zbGF0b3I6OnRyYW5zbGF0
ZSk6CisgICAgICAgIChXVEY6OkF0b21pY1N0cmluZzo6YWRkKToKKyAgICAgICAgKiB3dGYvdGV4
dC9BdG9taWNTdHJpbmcuaDoKKyAgICAgICAgKFdURjo6QXRvbWljU3RyaW5nOjpBdG9taWNTdHJp
bmcpOgorICAgICAgICAoV1RGOjpBdG9taWNTdHJpbmc6OmNvbnRhaW5zKToKKyAgICAgICAgKFdU
Rjo6QXRvbWljU3RyaW5nOjpmaW5kKToKKyAgICAgICAgKFdURjo6QXRvbWljU3RyaW5nOjphZGQp
OgorICAgICAgICAoV1RGOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdURjo6b3BlcmF0b3IhPSk6
CisgICAgICAgIChXVEY6OmVxdWFsSWdub3JpbmdDYXNlKToKKyAgICAgICAgKiB3dGYvdGV4dC9T
dHJpbmdDb25jYXRlbmF0ZS5oOgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0hhc2guaDoKKyAg
ICAgICAgKFdURjo6U3RyaW5nSGFzaDo6ZXF1YWwpOgorICAgICAgICAoV1RGOjpDYXNlRm9sZGlu
Z0hhc2g6Omhhc2gpOgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwOgorICAgICAg
ICAoV1RGOjpTdHJpbmdJbXBsOjp+U3RyaW5nSW1wbCk6CisgICAgICAgIChXVEY6OlN0cmluZ0lt
cGw6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpjcmVh
dGUpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpnZXREYXRhMTZTbG93Q2FzZSk6CisgICAg
ICAgIChXVEY6OlN0cmluZ0ltcGw6OmNvbnRhaW5zT25seVdoaXRlc3BhY2UpOgorICAgICAgICAo
V1RGOjpTdHJpbmdJbXBsOjpzdWJzdHJpbmcpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpj
aGFyYWN0ZXJTdGFydGluZ0F0KToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6bG93ZXIpOgor
ICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjp1cHBlcik6CisgICAgICAgIChXVEY6OlN0cmluZ0lt
cGw6OmZpbGwpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpmb2xkQ2FzZSk6CisgICAgICAg
IChXVEY6OlN0cmluZ0ltcGw6OnN0cmlwTWF0Y2hlZENoYXJhY3RlcnMpOgorICAgICAgICAoV1RG
OjpTdHJpbmdJbXBsOjpyZW1vdmVDaGFyYWN0ZXJzKToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1w
bDo6c2ltcGxpZnlNYXRjaGVkQ2hhcmFjdGVyc1RvU3BhY2UpOgorICAgICAgICAoV1RGOjpTdHJp
bmdJbXBsOjp0b0ludFN0cmljdCk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OnRvVUludFN0
cmljdCk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OnRvSW50NjRTdHJpY3QpOgorICAgICAg
ICAoV1RGOjpTdHJpbmdJbXBsOjp0b1VJbnQ2NFN0cmljdCk6CisgICAgICAgIChXVEY6OlN0cmlu
Z0ltcGw6OnRvSW50UHRyU3RyaWN0KToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6dG9JbnQp
OgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjp0b1VJbnQpOgorICAgICAgICAoV1RGOjpTdHJp
bmdJbXBsOjp0b0ludDY0KToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6dG9VSW50NjQpOgor
ICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjp0b0ludFB0cik6CisgICAgICAgIChXVEY6OlN0cmlu
Z0ltcGw6OnRvRG91YmxlKToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6dG9GbG9hdCk6Cisg
ICAgICAgIChXVEY6OmVxdWFsKToKKyAgICAgICAgKFdURjo6ZXF1YWxJZ25vcmluZ0Nhc2UpOgor
ICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpmaW5kKToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1w
bDo6ZmluZElnbm9yaW5nQ2FzZSk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OnJldmVyc2VG
aW5kKToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6cmVwbGFjZSk6CisgICAgICAgIChXVEY6
OlN0cmluZ0ltcGw6OmRlZmF1bHRXcml0aW5nRGlyZWN0aW9uKToKKyAgICAgICAgKFdURjo6U3Ry
aW5nSW1wbDo6YWRvcHQpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpjcmVhdGVXaXRoVGVy
bWluYXRpbmdOdWxsQ2hhcmFjdGVyKToKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdJbXBsLmg6
CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OlN0cmluZ0ltcGwpOgorICAgICAgICAoV1RGOjpT
dHJpbmdJbXBsOjpjcmVhdGUpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpjcmVhdGU4KToK
KyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCk6CisgICAg
ICAgIChXVEY6OlN0cmluZ0ltcGw6OmZsYWdzT2Zmc2V0KToKKyAgICAgICAgKFdURjo6U3RyaW5n
SW1wbDo6ZmxhZ0lzOEJpdCk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OmRhdGFPZmZzZXQp
OgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjppczhCaXQpOgorICAgICAgICAoV1RGOjpTdHJp
bmdJbXBsOjpjaGFyYWN0ZXJzOCk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OmNoYXJhY3Rl
cnMxNik6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OmNoYXJhY3RlcnMpOgorICAgICAgICAo
V1RGOjpTdHJpbmdJbXBsOjpoYXMxNkJpdFNoYWRvdyk6CisgICAgICAgIChXVEY6OlN0cmluZ0lt
cGw6OnNldEhhc2gpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpoYXNoKToKKyAgICAgICAg
KFdURjo6U3RyaW5nSW1wbDo6Y29weUNoYXJzKToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6
b3BlcmF0b3JbXSk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OmZpbmQpOgorICAgICAgICAo
V1RGOjpTdHJpbmdJbXBsOjpmaW5kSWdub3JpbmdDYXNlKToKKyAgICAgICAgKFdURjo6ZXF1YWwp
OgorICAgICAgICAoV1RGOjplcXVhbElnbm9yaW5nQ2FzZSk6CisgICAgICAgIChXVEY6OlN0cmlu
Z0ltcGw6Omlzb2xhdGVkQ29weSk6CisgICAgICAgICogd3RmL3RleHQvV1RGU3RyaW5nLmNwcDoK
KyAgICAgICAgKFdURjo6U3RyaW5nOjpTdHJpbmcpOgorICAgICAgICAoV1RGOjpTdHJpbmc6OmFw
cGVuZCk6CisgICAgICAgIChXVEY6OlN0cmluZzo6Zm9ybWF0KToKKyAgICAgICAgKFdURjo6U3Ry
aW5nOjpmcm9tVVRGOCk6CisgICAgICAgIChXVEY6OlN0cmluZzo6ZnJvbVVURjhXaXRoTGF0aW4x
RmFsbGJhY2spOgorICAgICAgICAqIHd0Zi90ZXh0L1dURlN0cmluZy5oOgorICAgICAgICAoV1RG
OjpTdHJpbmc6OmZpbmQpOgorICAgICAgICAoV1RGOjpTdHJpbmc6OmZpbmRJZ25vcmluZ0Nhc2Up
OgorICAgICAgICAoV1RGOjpTdHJpbmc6OmNvbnRhaW5zKToKKyAgICAgICAgKFdURjo6U3RyaW5n
OjphcHBlbmQpOgorICAgICAgICAoV1RGOjpTdHJpbmc6OmZyb21VVEY4KToKKyAgICAgICAgKFdU
Rjo6U3RyaW5nOjpmcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFjayk6CisgICAgICAgIChXVEY6Om9w
ZXJhdG9yPT0pOgorICAgICAgICAoV1RGOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdURjo6ZXF1
YWxJZ25vcmluZ0Nhc2UpOgorICAgICAgICAqIHd0Zi91bmljb2RlL1VuaWNvZGUuaDoKKyAgICAg
ICAgKiB5YXJyL1lhcnJKSVQuY3BwOgorICAgICAgICAoSlNDOjpZYXJyOjpleGVjdXRlKToKKyAg
ICAgICAgKiB5YXJyL1lhcnJKSVQuaDoKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckNvZGVCbG9j
azo6ZXhlY3V0ZSk6CisgICAgICAgICogeWFyci9ZYXJyUGFyc2VyLmg6CisgICAgICAgIChKU0M6
OllhcnI6OlBhcnNlcjo6UGFyc2VyKToKKwogMjAxMS0xMC0yNiAgTWFyayBIYWhuZW5iZXJnICA8
bWhhaG5lbmJlcmdAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBnZXRPd25Qcm9wZXJ0eVNs
b3RWaXJ0dWFsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJ
KHJldmlzaW9uIDk4NDk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LmV4cAkod29ya2luZyBjb3B5KQpAQCAtMzU1LDcgKzM1NSw2IEBAIF9fWk4zSlNDZ3RFUktOU183
VVN0cmluZ0VTMl8KIF9fWk4zSlNDbHRFUktOU183VVN0cmluZ0VTMl8KIF9fWk4zV1RGMTBTdHJp
bmdJbXBsMTFyZXZlcnNlRmluZEVQUzBfagogX19aTjNXVEYxMFN0cmluZ0ltcGwxMXJldmVyc2VG
aW5kRXRqCi1fX1pOM1dURjEwU3RyaW5nSW1wbDE2ZmluZElnbm9yaW5nQ2FzZUVQS2NqCiBfX1pO
M1dURjEwU3RyaW5nSW1wbDE2ZmluZElnbm9yaW5nQ2FzZUVQUzBfagogX19aTjNXVEYxMFN0cmlu
Z0ltcGwxOHNpbXBsaWZ5V2hpdGVTcGFjZUV2CiBfX1pOM1dURjEwU3RyaW5nSW1wbDE5Y2hhcmFj
dGVyU3RhcnRpbmdBdEVqCkBAIC0zNjUsNyArMzY0LDYgQEAgX19aTjNXVEYxMFN0cmluZ0ltcGwy
M2RlZmF1bHRXcml0aW5nRGlyZQogX19aTjNXVEYxMFN0cmluZ0ltcGwyM3JldmVyc2VGaW5kSWdu
b3JpbmdDYXNlRVBTMF9qCiBfX1pOM1dURjEwU3RyaW5nSW1wbDRmaWxsRXQKIF9fWk4zV1RGMTBT
dHJpbmdJbXBsNGZpbmRFUEZidEVqCi1fX1pOM1dURjEwU3RyaW5nSW1wbDRmaW5kRVBLY2oKIF9f
Wk4zV1RGMTBTdHJpbmdJbXBsNGZpbmRFUFMwX2oKIF9fWk4zV1RGMTBTdHJpbmdJbXBsNGZpbmRF
dGoKIF9fWk4zV1RGMTBTdHJpbmdJbXBsNWFkb3B0RVJOU18xMlN0cmluZ0J1ZmZlckUKQEAgLTM3
Myw4ICszNzEsNyBAQCBfX1pOM1dURjEwU3RyaW5nSW1wbDVlbXB0eUV2CiBfX1pOM1dURjEwU3Ry
aW5nSW1wbDVsb3dlckV2CiBfX1pOM1dURjEwU3RyaW5nSW1wbDV0b0ludEVQYgogX19aTjNXVEYx
MFN0cmluZ0ltcGw1dXBwZXJFdgotX19aTjNXVEYxMFN0cmluZ0ltcGw2Y3JlYXRlRVBLYwotX19a
TjNXVEYxMFN0cmluZ0ltcGw2Y3JlYXRlRVBLY2oKK19fWk4zV1RGMTBTdHJpbmdJbXBsNmNyZWF0
ZUVQS2gKIF9fWk4zV1RGMTBTdHJpbmdJbXBsNmNyZWF0ZUVQS3RqCiBfX1pOM1dURjEwU3RyaW5n
SW1wbDdyZXBsYWNlRVBTMF9TMV8KIF9fWk4zV1RGMTBTdHJpbmdJbXBsN3JlcGxhY2VFampQUzBf
CkBAIC0zOTQsNyArMzkxLDcgQEAgX19aTjNXVEYxMWVtcHR5U3RyaW5nRXYKIF9fWk4zV1RGMTFm
YXN0UmVhbGxvY0VQdm0KIF9fWk4zV1RGMTJBdG9taWNTdHJpbmcxMWFkZFNsb3dDYXNlRVBOU18x
MFN0cmluZ0ltcGxFCiBfX1pOM1dURjEyQXRvbWljU3RyaW5nMTZmcm9tVVRGOEludGVybmFsRVBL
Y1MyXwotX19aTjNXVEYxMkF0b21pY1N0cmluZzNhZGRFUEtjCitfX1pOM1dURjEyQXRvbWljU3Ry
aW5nM2FkZEVQS2gKIF9fWk4zV1RGMTJBdG9taWNTdHJpbmczYWRkRVBLdAogX19aTjNXVEYxMkF0
b21pY1N0cmluZzNhZGRFUEt0agogX19aTjNXVEYxMkF0b21pY1N0cmluZzNhZGRFUEt0amoKQEAg
LTQzNiw5ICs0MzMsOSBAQCBfX1pOM1dURjE2Y2FsbE9uTWFpblRocmVhZEVQRnZQdkVTMF8KIF9f
Wk4zV1RGMTZjb2RlUG9pbnRDb21wYXJlRVJLTlNfNlN0cmluZ0VTMl8KIF9fWk4zV1RGMTZmYXN0
WmVyb2VkTWFsbG9jRW0KIF9fWk4zV1RGMTdjaGFyYWN0ZXJzVG9GbG9hdEVQS3RtUGJTMl8KLV9f
Wk4zV1RGMTdlcXVhbElnbm9yaW5nQ2FzZUVQS3RQS2NqCi1fX1pOM1dURjE3ZXF1YWxJZ25vcmlu
Z0Nhc2VFUE5TXzEwU3RyaW5nSW1wbEVQS2MKK19fWk4zV1RGMTdlcXVhbElnbm9yaW5nQ2FzZUVQ
S3RQS2hqCiBfX1pOM1dURjE3ZXF1YWxJZ25vcmluZ0Nhc2VFUE5TXzEwU3RyaW5nSW1wbEVTMV8K
K19fWk4zV1RGMTdlcXVhbElnbm9yaW5nQ2FzZUVQTlNfMTBTdHJpbmdJbXBsRVBLaAogX19aTjNX
VEYxOGNhbGN1bGF0ZURTVE9mZnNldEVkZAogX19aTjNXVEYxOGNhbGN1bGF0ZVVUQ09mZnNldEV2
CiBfX1pOM1dURjE4Y2hhcmFjdGVyc1RvRG91YmxlRVBLdG1QYlMyXwpAQCAtNDgzLDE1ICs0ODAs
MTYgQEAgX19aTjNXVEY1TXV0ZXg2dW5sb2NrRXYKIF9fWk4zV1RGNU11dGV4N3RyeUxvY2tFdgog
X19aTjNXVEY1TXV0ZXhDMUV2CiBfX1pOM1dURjVNdXRleEQxRXYKLV9fWk4zV1RGNWVxdWFsRVBL
TlNfMTBTdHJpbmdJbXBsRVBLYworX19aTjNXVEY1ZXF1YWxFUEtOU18xMFN0cmluZ0ltcGxFUEto
CiBfX1pOM1dURjVlcXVhbEVQS05TXzEwU3RyaW5nSW1wbEVQS3RqCiBfX1pOM1dURjVlcXVhbEVQ
S05TXzEwU3RyaW5nSW1wbEVTMl8KIF9fWk4zV1RGNXlpZWxkRXYKLV9fWk4zV1RGNlN0cmluZzI2
ZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJhY2tFUEtjbQorX19aTjNXVEY2U3RyaW5nMjZmcm9tVVRG
OFdpdGhMYXRpbjFGYWxsYmFja0VQS2htCiBfX1pOM1dURjZTdHJpbmcyOWNoYXJhY3RlcnNXaXRo
TnVsbFRlcm1pbmF0aW9uRXYKK19fWk4zV1RGNlN0cmluZ0MxRVBLY2oKK19fWk4zV1RGNlN0cmlu
ZzZhcHBlbmRFaAogX19aTjNXVEY2U3RyaW5nNmFwcGVuZEVQS3RqCiBfX1pOM1dURjZTdHJpbmc2
YXBwZW5kRVJLUzBfCi1fX1pOM1dURjZTdHJpbmc2YXBwZW5kRWMKIF9fWk4zV1RGNlN0cmluZzZh
cHBlbmRFdAogX19aTjNXVEY2U3RyaW5nNmZvcm1hdEVQS2N6CiBfX1pOM1dURjZTdHJpbmc2aW5z
ZXJ0RVJLUzBfagpAQCAtNTA0LDExICs1MDIsMTAgQEAgX19aTjNXVEY2U3RyaW5nNm51bWJlckV0
CiBfX1pOM1dURjZTdHJpbmc2bnVtYmVyRXgKIF9fWk4zV1RGNlN0cmluZzZudW1iZXJFeQogX19a
TjNXVEY2U3RyaW5nNnJlbW92ZUVqaQotX19aTjNXVEY2U3RyaW5nOGZyb21VVEY4RVBLYwotX19a
TjNXVEY2U3RyaW5nOGZyb21VVEY4RVBLY20KK19fWk4zV1RGNlN0cmluZzhmcm9tVVRGOEVQS2gK
K19fWk4zV1RGNlN0cmluZzhmcm9tVVRGOEVQS2htCiBfX1pOM1dURjZTdHJpbmc4dHJ1bmNhdGVF
agogX19aTjNXVEY2U3RyaW5nQzFFUEtjCi1fX1pOM1dURjZTdHJpbmdDMUVQS2NqCiBfX1pOM1dU
RjZTdHJpbmdDMUVQS3QKIF9fWk4zV1RGNlN0cmluZ0MxRVBLdGoKIF9fWk4zV1RGNnN0cnRvZEVQ
S2NQUGMKQEAgLTU4Miw2ICs1NzksNyBAQCBfX1pOSzNKU0M4SlNTdHJpbmcxMXJlc29sdmVSb3Bl
RVBOU185RXhlCiBfX1pOSzNKU0M4SlNTdHJpbmc5dG9Cb29sZWFuRVBOU185RXhlY1N0YXRlRQog
X19aTkszSlNDOUhhc2hUYWJsZTExY3JlYXRlVGFibGVFUE5TXzEySlNHbG9iYWxEYXRhRQogX19a
TkszSlNDOUhhc2hUYWJsZTExZGVsZXRlVGFibGVFdgorX19aTkszV1RGMTBTdHJpbmdJbXBsMTdn
ZXREYXRhMTZTbG93Q2FzZUV2CiBfX1pOSzNXVEYxMkF0b21pY1N0cmluZzVsb3dlckV2CiBfX1pO
SzNXVEYxM0RlY2ltYWxOdW1iZXIxNXRvU3RyaW5nRGVjaW1hbEVQdGoKIF9fWk5LM1dURjEzRGVj
aW1hbE51bWJlcjE5dG9TdHJpbmdFeHBvbmVudGlhbEVQdGoKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkocmV2aXNpb24gOTg0
OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NDUsNyArNDQ1LDcgQEAgTkVWRVJfSU5MSU5FIEpTVmFsdWUg
SW50ZXJwcmV0ZXI6OmNhbGxFdgogICAgICAgICBpZiAoIWNvZGVCbG9jay0+aXNTdHJpY3RNb2Rl
KCkpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBjYW4gdXNlIHRoZSBwcmVwYXJzZXIgaW4g
c3RyaWN0IG1vZGUsIHdlIGp1c3QgbmVlZCBhZGRpdGlvbmFsIGxvZ2ljCiAgICAgICAgICAgICAv
LyB0byBwcmV2ZW50IGR1cGxpY2F0ZXMuCi0gICAgICAgICAgICBMaXRlcmFsUGFyc2VyIHByZXBh
cnNlcihjYWxsRnJhbWUsIHByb2dyYW1Tb3VyY2UuY2hhcmFjdGVycygpLCBwcm9ncmFtU291cmNl
Lmxlbmd0aCgpLCBMaXRlcmFsUGFyc2VyOjpOb25TdHJpY3RKU09OKTsKKyAgICAgICAgICAgIExp
dGVyYWxQYXJzZXIgcHJlcGFyc2VyKGNhbGxGcmFtZSwgcHJvZ3JhbVNvdXJjZS5jaGFyYWN0ZXJz
MTYoKSwgcHJvZ3JhbVNvdXJjZS5sZW5ndGgoKSwgTGl0ZXJhbFBhcnNlcjo6Tm9uU3RyaWN0SlNP
Tik7CiAgICAgICAgICAgICBpZiAoSlNWYWx1ZSBwYXJzZWRPYmplY3QgPSBwcmVwYXJzZXIudHJ5
TGl0ZXJhbFBhcnNlKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlZE9iamVjdDsKICAg
ICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VQcm92aWRl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlUHJv
dmlkZXIuaAkocmV2aXNpb24gOTg0OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L1NvdXJjZVByb3ZpZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTg4LDE3ICs4OCwxOSBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIG1fc291cmNlLnN1YnN0
cmluZ1NoYXJpbmdJbXBsKHN0YXJ0LCBlbmQgLSBzdGFydCk7CiAgICAgICAgIH0KLSAgICAgICAg
Y29uc3QgVUNoYXIqIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS5jaGFyYWN0ZXJzKCk7
IH0KKyAgICAgICAgY29uc3QgVUNoYXIqIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0K
ICAgICAgICAgaW50IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLmxlbmd0aCgpOyB9
CiAKICAgICBwcml2YXRlOgogICAgICAgICBVU3RyaW5nU291cmNlUHJvdmlkZXIoY29uc3QgVVN0
cmluZyYgc291cmNlLCBjb25zdCBVU3RyaW5nJiB1cmwpCiAgICAgICAgICAgICA6IFNvdXJjZVBy
b3ZpZGVyKHVybCkKICAgICAgICAgICAgICwgbV9zb3VyY2Uoc291cmNlKQorICAgICAgICAgICAg
LCBtX2RhdGEobV9zb3VyY2UuY2hhcmFjdGVyczE2KCkpCiAgICAgICAgIHsKICAgICAgICAgfQog
CiAgICAgICAgIFVTdHJpbmcgbV9zb3VyY2U7CisgICAgICAgIGNvbnN0IFVDaGFyKiBtX2RhdGE7
CiAgICAgfTsKICAgICAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5jcHAJKHJldmlzaW9uIDk4NDk0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY4LDIzICs2OCwyMyBAQCB2b2lkIGRlbGV0ZUlkZW50aWZpZXJUYWJsZShJZGVudGlmaWVy
VGFiCiB9CiAKIHN0cnVjdCBJZGVudGlmaWVyQ1N0cmluZ1RyYW5zbGF0b3IgewotICAgIHN0YXRp
YyB1bnNpZ25lZCBoYXNoKGNvbnN0IGNoYXIqIGMpCisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2go
Y29uc3QgTENoYXIqIGMpCiAgICAgewotICAgICAgICByZXR1cm4gU3RyaW5nSGFzaGVyOjpjb21w
dXRlSGFzaDxjaGFyPihjKTsKKyAgICAgICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6Y29tcHV0ZUhh
c2g8TENoYXI+KGMpOwogICAgIH0KIAotICAgIHN0YXRpYyBib29sIGVxdWFsKFN0cmluZ0ltcGwq
IHIsIGNvbnN0IGNoYXIqIHMpCisgICAgc3RhdGljIGJvb2wgZXF1YWwoU3RyaW5nSW1wbCogciwg
Y29uc3QgTENoYXIqIHMpCiAgICAgewogICAgICAgICByZXR1cm4gSWRlbnRpZmllcjo6ZXF1YWwo
ciwgcyk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgdHJhbnNsYXRlKFN0cmluZ0ltcGwqJiBs
b2NhdGlvbiwgY29uc3QgY2hhciogYywgdW5zaWduZWQgaGFzaCkKKyAgICBzdGF0aWMgdm9pZCB0
cmFuc2xhdGUoU3RyaW5nSW1wbComIGxvY2F0aW9uLCBjb25zdCBMQ2hhciogYywgdW5zaWduZWQg
aGFzaCkKICAgICB7Ci0gICAgICAgIHNpemVfdCBsZW5ndGggPSBzdHJsZW4oYyk7CisgICAgICAg
IHNpemVfdCBsZW5ndGggPSBzdHJsZW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oYykp
OwogICAgICAgICBVQ2hhciogZDsKICAgICAgICAgU3RyaW5nSW1wbCogciA9IFN0cmluZ0ltcGw6
OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBkKS5sZWFrUmVmKCk7CiAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpICE9IGxlbmd0aDsgaSsrKQotICAgICAgICAgICAgZFtpXSA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGNoYXI+KGNbaV0pOyAvLyB1c2UgdW5zaWduZWQgY2hhciB0byB6ZXJv
LWV4dGVuZCBpbnN0ZWFkIG9mIHNpZ24tZXh0ZW5kCisgICAgICAgICAgICBkW2ldID0gY1tpXTsK
ICAgICAgICAgci0+c2V0SGFzaChoYXNoKTsKICAgICAgICAgbG9jYXRpb24gPSByOwogICAgIH0K
QEAgLTk3LDcgKzk3LDcgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBJZGVudGlmaWVyOjphZGQo
SgogICAgIGlmICghY1swXSkKICAgICAgICAgcmV0dXJuIFN0cmluZ0ltcGw6OmVtcHR5KCk7CiAg
ICAgaWYgKCFjWzFdKQotICAgICAgICByZXR1cm4gYWRkKGdsb2JhbERhdGEsIGdsb2JhbERhdGEt
PnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdSZXAoc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcj4oY1swXSkpKTsKKyAgICAgICAgcmV0dXJuIGFkZChnbG9iYWxEYXRhLCBnbG9iYWxE
YXRhLT5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5nUmVwKGNbMF0pKTsKIAogICAg
IElkZW50aWZpZXJUYWJsZSYgaWRlbnRpZmllclRhYmxlID0gKmdsb2JhbERhdGEtPmlkZW50aWZp
ZXJUYWJsZTsKICAgICBMaXRlcmFsSWRlbnRpZmllclRhYmxlJiBsaXRlcmFsSWRlbnRpZmllclRh
YmxlID0gaWRlbnRpZmllclRhYmxlLmxpdGVyYWxUYWJsZSgpOwpAQCAtMTA2LDcgKzEwNiw3IEBA
IFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gSWRlbnRpZmllcjo6YWRkKEoKICAgICBpZiAoaXRlciAh
PSBsaXRlcmFsSWRlbnRpZmllclRhYmxlLmVuZCgpKQogICAgICAgICByZXR1cm4gaXRlci0+c2Vj
b25kOwogCi0gICAgcGFpcjxIYXNoU2V0PFN0cmluZ0ltcGwqPjo6aXRlcmF0b3IsIGJvb2w+IGFk
ZFJlc3VsdCA9IGlkZW50aWZpZXJUYWJsZS5hZGQ8Y29uc3QgY2hhciosIElkZW50aWZpZXJDU3Ry
aW5nVHJhbnNsYXRvcj4oYyk7CisgICAgcGFpcjxIYXNoU2V0PFN0cmluZ0ltcGwqPjo6aXRlcmF0
b3IsIGJvb2w+IGFkZFJlc3VsdCA9IGlkZW50aWZpZXJUYWJsZS5hZGQ8Y29uc3QgTENoYXIqLCBJ
ZGVudGlmaWVyQ1N0cmluZ1RyYW5zbGF0b3I+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIq
PihjKSk7CiAKICAgICAvLyBJZiB0aGUgc3RyaW5nIGlzIG5ld2x5LXRyYW5zbGF0ZWQsIHRoZW4g
d2UgbmVlZCB0byBhZG9wdCBpdC4KICAgICAvLyBUaGUgYm9vbGVhbiBpbiB0aGUgcGFpciB0ZWxs
cyB1cyBpZiB0aGF0IGlzIHNvLgpAQCAtMTU0LDEyICsxNTQsMTMgQEAgdWludDMyX3QgSWRlbnRp
Zmllcjo6dG9VSW50MzIoY29uc3QgVVN0cgogICAgIG9rID0gZmFsc2U7CiAKICAgICB1bnNpZ25l
ZCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7Ci0gICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMg
PSBzdHJpbmcuY2hhcmFjdGVycygpOwogCiAgICAgLy8gQW4gZW1wdHkgc3RyaW5nIGlzIG5vdCBh
IG51bWJlci4KICAgICBpZiAoIWxlbmd0aCkKICAgICAgICAgcmV0dXJuIDA7CiAKKyAgICBjb25z
dCBVQ2hhciogY2hhcmFjdGVycyA9IHN0cmluZy5jaGFyYWN0ZXJzMTYoKTsKKwogICAgIC8vIEdl
dCB0aGUgZmlyc3QgY2hhcmFjdGVyLCB0dXJuaW5nIGl0IGludG8gYSBkaWdpdC4KICAgICB1aW50
MzJfdCB2YWx1ZSA9IGNoYXJhY3RlcnNbMF0gLSAnMCc7CiAgICAgaWYgKHZhbHVlID4gOSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmgJKHJldmlzaW9u
IDk4NDk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5oCSh3
b3JraW5nIGNvcHkpCkBAIC03MCwxMCArNzAsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IElkZW50aWZp
ZXImKTsKICAgICAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3IhPShjb25zdCBJZGVudGlmaWVyJiwg
Y29uc3QgSWRlbnRpZmllciYpOwogCisgICAgICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29u
c3QgSWRlbnRpZmllciYsIGNvbnN0IExDaGFyKik7CiAgICAgICAgIGZyaWVuZCBib29sIG9wZXJh
dG9yPT0oY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IGNoYXIqKTsKKyAgICAgICAgZnJpZW5kIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgTENoYXIqKTsKICAgICAgICAg
ZnJpZW5kIGJvb2wgb3BlcmF0b3IhPShjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgY2hhciopOwog
ICAgIAotICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBTdHJpbmdJbXBsKiwgY29uc3Qg
Y2hhciopOworICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBTdHJpbmdJbXBsKiwgY29u
c3QgTENoYXIqKTsKKyAgICAgICAgc3RhdGljIGlubGluZSBib29sIGVxdWFsKGNvbnN0IFN0cmlu
Z0ltcGwqYSwgY29uc3QgY2hhcipiKSB7IHJldHVybiBJZGVudGlmaWVyOjplcXVhbChhLCByZWlu
dGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oYikpOyB9OwogICAgICAgICBzdGF0aWMgYm9vbCBl
cXVhbChjb25zdCBTdHJpbmdJbXBsKiwgY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgpOwog
ICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBTdHJpbmdJbXBsKiBhLCBjb25zdCBTdHJp
bmdJbXBsKiBiKSB7IHJldHVybiA6OmVxdWFsKGEsIGIpOyB9CiAKQEAgLTg0LDcgKzg3LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFVTdHJpbmcgbV9zdHJpbmc7CiAgICAgICAgIAogICAg
ICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBJZGVudGlmaWVyJiBhLCBjb25zdCBJZGVudGlm
aWVyJiBiKSB7IHJldHVybiBhLm1fc3RyaW5nLmltcGwoKSA9PSBiLm1fc3RyaW5nLmltcGwoKTsg
fQotICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBJZGVudGlmaWVyJiBhLCBjb25zdCBj
aGFyKiBiKSB7IHJldHVybiBlcXVhbChhLm1fc3RyaW5nLmltcGwoKSwgYik7IH0KKyAgICAgICAg
c3RhdGljIGJvb2wgZXF1YWwoY29uc3QgSWRlbnRpZmllciYgYSwgY29uc3QgTENoYXIqIGIpIHsg
cmV0dXJuIGVxdWFsKGEubV9zdHJpbmcuaW1wbCgpLCBiKTsgfQogCiAgICAgICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFN0cmluZ0ltcGw+IGFkZChFeGVjU3RhdGUqLCBjb25zdCBVQ2hhciosIGludCBs
ZW5ndGgpOwogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBhZGQoSlNHbG9i
YWxEYXRhKiwgY29uc3QgVUNoYXIqLCBpbnQgbGVuZ3RoKTsKQEAgLTEyNSwxNyArMTI4LDI3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4gIUlkZW50aWZpZXI6OmVxdWFsKGEsIGIp
OwogICAgIH0KIAotICAgIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgSWRlbnRpZmllciYg
YSwgY29uc3QgY2hhciogYikKKyAgICBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IElkZW50
aWZpZXImIGEsIGNvbnN0IExDaGFyKiBiKQogICAgIHsKICAgICAgICAgcmV0dXJuIElkZW50aWZp
ZXI6OmVxdWFsKGEsIGIpOwogICAgIH0KIAotICAgIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29u
c3QgSWRlbnRpZmllciYgYSwgY29uc3QgY2hhciogYikKKyAgICBpbmxpbmUgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IElkZW50aWZpZXImIGEsIGNvbnN0IGNoYXIqIGIpCisgICAgeworICAgICAgICBy
ZXR1cm4gSWRlbnRpZmllcjo6ZXF1YWwoYSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+
KGIpKTsKKyAgICB9CisgICAgCisgICAgaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBJZGVu
dGlmaWVyJiBhLCBjb25zdCBMQ2hhciogYikKICAgICB7CiAgICAgICAgIHJldHVybiAhSWRlbnRp
Zmllcjo6ZXF1YWwoYSwgYik7CiAgICAgfQogCi0gICAgaW5saW5lIGJvb2wgSWRlbnRpZmllcjo6
ZXF1YWwoY29uc3QgU3RyaW5nSW1wbCogciwgY29uc3QgY2hhciogcykKKyAgICBpbmxpbmUgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IElkZW50aWZpZXImIGEsIGNvbnN0IGNoYXIqIGIpCisgICAgewor
ICAgICAgICByZXR1cm4gIUlkZW50aWZpZXI6OmVxdWFsKGEsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgTENoYXIqPihiKSk7CisgICAgfQorICAgIAorICAgIGlubGluZSBib29sIElkZW50aWZpZXI6
OmVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqIHIsIGNvbnN0IExDaGFyKiBzKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIFdURjo6ZXF1YWwociwgcyk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcAkocmV2aXNpb24gOTg0OTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5
LDcgKzc5LDcgQEAgdm9pZCBKU1N0cmluZzo6cmVzb2x2ZVJvcGUoRXhlY1N0YXRlKiBleAogICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc19tYXhJbnRlcm5hbFJvcGVMZW5ndGggJiYgbV9maWJl
cnNbaV07ICsraSkgewogICAgICAgICBTdHJpbmdJbXBsKiBzdHJpbmcgPSBtX2ZpYmVyc1tpXS0+
bV92YWx1ZS5pbXBsKCk7CiAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmluZy0+bGVuZ3Ro
KCk7Ci0gICAgICAgIFN0cmluZ0ltcGw6OmNvcHlDaGFycyhwb3NpdGlvbiwgc3RyaW5nLT5jaGFy
YWN0ZXJzKCksIGxlbmd0aCk7CisgICAgICAgIFN0cmluZ0ltcGw6OmNvcHlDaGFycyhwb3NpdGlv
biwgc3RyaW5nLT5jaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoKTsKICAgICAgICAgcG9zaXRpb24gKz0g
bGVuZ3RoOwogICAgICAgICBtX2ZpYmVyc1tpXS5jbGVhcigpOwogICAgIH0KQEAgLTEyMCw3ICsx
MjAsNyBAQCB2b2lkIEpTU3RyaW5nOjpyZXNvbHZlUm9wZVNsb3dDYXNlKEV4ZWNTCiAgICAgICAg
IFN0cmluZ0ltcGwqIHN0cmluZyA9IHN0YXRpY19jYXN0PFN0cmluZ0ltcGwqPihjdXJyZW50Rmli
ZXItPm1fdmFsdWUuaW1wbCgpKTsKICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RyaW5nLT5s
ZW5ndGgoKTsKICAgICAgICAgcG9zaXRpb24gLT0gbGVuZ3RoOwotICAgICAgICBTdHJpbmdJbXBs
Ojpjb3B5Q2hhcnMocG9zaXRpb24sIHN0cmluZy0+Y2hhcmFjdGVycygpLCBsZW5ndGgpOworICAg
ICAgICBTdHJpbmdJbXBsOjpjb3B5Q2hhcnMocG9zaXRpb24sIHN0cmluZy0+Y2hhcmFjdGVyczE2
KCksIGxlbmd0aCk7CiAgICAgfQogCiAgICAgQVNTRVJUKGJ1ZmZlciA9PSBwb3NpdGlvbik7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5jcHAJKHJldmlzaW9uIDk4
NDk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzY2LDkgKzM2Niw5IEBAIGludCBSZWdFeHA6Om1hdGNoKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGEKICNpZiBFTkFCTEUoWUFSUl9KSVQpCiAgICAgICAgIGlmIChtX3N0YXRlID09
IEpJVENvZGUpIHsKICAgICAgICAgICAgIGlmIChzLmlzOEJpdCgpKQotICAgICAgICAgICAgICAg
IHJlc3VsdCA9IFlhcnI6OmV4ZWN1dGUobV9yZXByZXNlbnRhdGlvbi0+bV9yZWdFeHBKSVRDb2Rl
LCBzLmxhdGluMSgpLmRhdGEoKSwgc3RhcnRPZmZzZXQsIHMubGVuZ3RoKCksIG9mZnNldFZlY3Rv
cik7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gWWFycjo6ZXhlY3V0ZShtX3JlcHJlc2VudGF0
aW9uLT5tX3JlZ0V4cEpJVENvZGUsIHMuY2hhcmFjdGVyczgoKSwgc3RhcnRPZmZzZXQsIHMubGVu
Z3RoKCksIG9mZnNldFZlY3Rvcik7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
cmVzdWx0ID0gWWFycjo6ZXhlY3V0ZShtX3JlcHJlc2VudGF0aW9uLT5tX3JlZ0V4cEpJVENvZGUs
IHMuY2hhcmFjdGVycygpLCBzdGFydE9mZnNldCwgcy5sZW5ndGgoKSwgb2Zmc2V0VmVjdG9yKTsK
KyAgICAgICAgICAgICAgICByZXN1bHQgPSBZYXJyOjpleGVjdXRlKG1fcmVwcmVzZW50YXRpb24t
Pm1fcmVnRXhwSklUQ29kZSwgcy5jaGFyYWN0ZXJzMTYoKSwgc3RhcnRPZmZzZXQsIHMubGVuZ3Ro
KCksIG9mZnNldFZlY3Rvcik7CiAjaWYgRU5BQkxFKFlBUlJfSklUX0RFQlVHKQogICAgICAgICAg
ICAgbWF0Y2hDb21wYXJlV2l0aEludGVycHJldGVyKHMsIHN0YXJ0T2Zmc2V0LCBvZmZzZXRWZWN0
b3IsIHJlc3VsdCk7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cmluZ1Byb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAkocmV2aXNpb24gOTg0OTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMzUsMTMgKzMzNSwxMyBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGpzU3Bs
aWNlU3ViCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtYXhDb3VudDsgaSsrKSB7CiAgICAgICAg
IGlmIChpIDwgcmFuZ2VDb3VudCkgewogICAgICAgICAgICAgaWYgKGludCBzcmNMZW4gPSBzdWJz
dHJpbmdSYW5nZXNbaV0ubGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nSW1wbDo6Y29w
eUNoYXJzKGJ1ZmZlciArIGJ1ZmZlclBvcywgc291cmNlLmNoYXJhY3RlcnMoKSArIHN1YnN0cmlu
Z1Jhbmdlc1tpXS5wb3NpdGlvbiwgc3JjTGVuKTsKKyAgICAgICAgICAgICAgICBTdHJpbmdJbXBs
Ojpjb3B5Q2hhcnMoYnVmZmVyICsgYnVmZmVyUG9zLCBzb3VyY2UuY2hhcmFjdGVyczE2KCkgKyBz
dWJzdHJpbmdSYW5nZXNbaV0ucG9zaXRpb24sIHNyY0xlbik7CiAgICAgICAgICAgICAgICAgYnVm
ZmVyUG9zICs9IHNyY0xlbjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBpZiAo
aSA8IHNlcGFyYXRvckNvdW50KSB7CiAgICAgICAgICAgICBpZiAoaW50IHNlcExlbiA9IHNlcGFy
YXRvcnNbaV0ubGVuZ3RoKCkpIHsKLSAgICAgICAgICAgICAgICBTdHJpbmdJbXBsOjpjb3B5Q2hh
cnMoYnVmZmVyICsgYnVmZmVyUG9zLCBzZXBhcmF0b3JzW2ldLmNoYXJhY3RlcnMoKSwgc2VwTGVu
KTsKKyAgICAgICAgICAgICAgICBTdHJpbmdJbXBsOjpjb3B5Q2hhcnMoYnVmZmVyICsgYnVmZmVy
UG9zLCBzZXBhcmF0b3JzW2ldLmNoYXJhY3RlcnMxNigpLCBzZXBMZW4pOwogICAgICAgICAgICAg
ICAgIGJ1ZmZlclBvcyArPSBzZXBMZW47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VTdHJpbmcuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VTdHJpbmcuY3BwCShyZXZpc2lvbiA5ODQ5
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VTdHJpbmcuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03MywxNyArNzMsMjcgQEAgVVN0cmluZzo6VVN0cmluZyhjb25zdCBVQ2hhciog
Y2hhcmFjdGVycwogfQogCiAvLyBDb25zdHJ1Y3QgYSBzdHJpbmcgd2l0aCBsYXRpbjEgZGF0YS4K
LVVTdHJpbmc6OlVTdHJpbmcoY29uc3QgY2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3Ro
KQorVVN0cmluZzo6VVN0cmluZyhjb25zdCBMQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVu
Z3RoKQogICAgIDogbV9pbXBsKGNoYXJhY3RlcnMgPyBTdHJpbmdJbXBsOjpjcmVhdGUoY2hhcmFj
dGVycywgbGVuZ3RoKSA6IDApCiB7CiB9CiAKK1VTdHJpbmc6OlVTdHJpbmcoY29uc3QgY2hhciog
Y2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQorICAgIDogbV9pbXBsKGNoYXJhY3RlcnMgPyBT
dHJpbmdJbXBsOjpjcmVhdGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KGNoYXJhY3Rl
cnMpLCBsZW5ndGgpIDogMCkKK3sKK30KKwogLy8gQ29uc3RydWN0IGEgc3RyaW5nIHdpdGggbGF0
aW4xIGRhdGEsIGZyb20gYSBudWxsLXRlcm1pbmF0ZWQgc291cmNlLgotVVN0cmluZzo6VVN0cmlu
Zyhjb25zdCBjaGFyKiBjaGFyYWN0ZXJzKQorVVN0cmluZzo6VVN0cmluZyhjb25zdCBMQ2hhciog
Y2hhcmFjdGVycykKICAgICA6IG1faW1wbChjaGFyYWN0ZXJzID8gU3RyaW5nSW1wbDo6Y3JlYXRl
KGNoYXJhY3RlcnMpIDogMCkKIHsKIH0KIAorVVN0cmluZzo6VVN0cmluZyhjb25zdCBjaGFyKiBj
aGFyYWN0ZXJzKQorICAgIDogbV9pbXBsKGNoYXJhY3RlcnMgPyBTdHJpbmdJbXBsOjpjcmVhdGUo
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KGNoYXJhY3RlcnMpKSA6IDApCit7Cit9CisK
IFVTdHJpbmcgVVN0cmluZzo6bnVtYmVyKGludCBpKQogewogICAgIFVDaGFyIGJ1ZlsxICsgc2l6
ZW9mKGkpICogM107CkBAIC0yMjksNiArMjM5LDc3IEBAIGJvb2wgb3BlcmF0b3I9PShjb25zdCBV
U3RyaW5nJiBzMSwgY29uc3QKICAgICByZXR1cm4gdSA9PSB1ZW5kICYmICpzMiA9PSAwOwogfQog
CisvLyBUaGlzIG1ldGhvZCBhc3N1bWVzIHRoYXQgYWxsIHNpbXBsZSBjaGVja3MgaGF2ZSBiZWVu
IHBlcmZvcm1lZCBieQorLy8gdGhlIGlubGluZWQgb3BlcmF0b3I9PSgpIGluIHRoZSBoZWFkZXIg
ZmlsZS4KK2Jvb2wgZXF1YWxTbG93Q2FzZShjb25zdCBVU3RyaW5nJiBzMSwgY29uc3QgVVN0cmlu
ZyYgczIpCit7CisgICAgU3RyaW5nSW1wbCogcmVwMSA9IHMxLmltcGwoKTsKKyAgICBTdHJpbmdJ
bXBsKiByZXAyID0gczIuaW1wbCgpOworICAgIHVuc2lnbmVkIHNpemUxID0gcmVwMS0+bGVuZ3Ro
KCk7CisKKyAgICAvLyBBdCB0aGlzIHBvaW50IHdlIGtub3cgCisgICAgLy8gICAoYSkgdGhhdCB0
aGUgc3RyaW5ncyBhcmUgdGhlIHNhbWUgbGVuZ3RoIGFuZAorICAgIC8vICAgKGIpIHRoYXQgdGhl
eSBhcmUgZ3JlYXRlciB0aGFuIHplcm8gbGVuZ3RoLgorICAgIGJvb2wgczFJczhCaXQgPSByZXAx
LT5pczhCaXQoKTsKKyAgICBib29sIHMySXM4Qml0ID0gcmVwMi0+aXM4Qml0KCk7CisgICAgCisg
ICAgaWYgKHMxSXM4Qml0KSB7CisgICAgICAgIGNvbnN0IExDaGFyKiBkMSA9IHJlcDEtPmNoYXJh
Y3RlcnM4KCk7CisgICAgICAgIGlmIChzMklzOEJpdCkgeworICAgICAgICAgICAgY29uc3QgTENo
YXIqIGQyID0gcmVwMi0+Y2hhcmFjdGVyczgoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
aWYgKGQxID09IGQyKSAvLyBDaGVjayB0byBzZWUgaWYgdGhlIGRhdGEgcG9pbnRlcnMgYXJlIHRo
ZSBzYW1lLgorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgCisgICAg
ICAgICAgICAvLyBEbyBxdWljayBjaGVja3MgZm9yIHNpemVzIDEgYW5kIDIuCisgICAgICAgICAg
ICBzd2l0Y2ggKHNpemUxKSB7CisgICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAg
cmV0dXJuIGQxWzBdID09IGQyWzBdOworICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAg
ICAgIHJldHVybiAoZDFbMF0gPT0gZDJbMF0pICYgKGQxWzFdID09IGQyWzFdKTsKKyAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuICghbWVtY21wKGQxLCBkMiwgc2l6
ZTEgKiBzaXplb2YoTENoYXIpKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIGNvbnN0IFVDaGFyKiBkMiA9IHJlcDItPmNoYXJhY3RlcnMxNigpOworICAgICAg
ICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemUxOyBpKyspIHsKKyAgICAg
ICAgICAgIGlmIChkMVtpXSAhPSBkMltpXSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIGlmIChz
MklzOEJpdCkgeworICAgICAgICBjb25zdCBVQ2hhciogZDEgPSByZXAxLT5jaGFyYWN0ZXJzMTYo
KTsKKyAgICAgICAgY29uc3QgTENoYXIqIGQyID0gcmVwMi0+Y2hhcmFjdGVyczgoKTsKKyAgICAg
ICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplMTsgaSsrKSB7CisgICAg
ICAgICAgICBpZiAoZDFbaV0gIT0gZDJbaV0pCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAKKyAgICB9CisgICAg
CisgICAgY29uc3QgVUNoYXIqIGQxID0gcmVwMS0+Y2hhcmFjdGVyczE2KCk7CisgICAgY29uc3Qg
VUNoYXIqIGQyID0gcmVwMi0+Y2hhcmFjdGVyczE2KCk7CisgICAgCisgICAgaWYgKGQxID09IGQy
KSAvLyBDaGVjayB0byBzZWUgaWYgdGhlIGRhdGEgcG9pbnRlcnMgYXJlIHRoZSBzYW1lLgorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICAvLyBEbyBxdWljayBjaGVja3MgZm9yIHNpemVz
IDEgYW5kIDIuCisgICAgc3dpdGNoIChzaXplMSkgeworICAgIGNhc2UgMToKKyAgICAgICAgcmV0
dXJuIGQxWzBdID09IGQyWzBdOworICAgIGNhc2UgMjoKKyAgICAgICAgcmV0dXJuIChkMVswXSA9
PSBkMlswXSkgJiAoZDFbMV0gPT0gZDJbMV0pOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVy
biAoIW1lbWNtcChkMSwgZDIsIHNpemUxICogc2l6ZW9mKFVDaGFyKSkpOworICAgIH0KK30KKwog
Ym9vbCBvcGVyYXRvcjwoY29uc3QgVVN0cmluZyYgczEsIGNvbnN0IFVTdHJpbmcmIHMyKQogewog
ICAgIGNvbnN0IHVuc2lnbmVkIGwxID0gczEubGVuZ3RoKCk7CkBAIC0zMTcsNyArMzk4LDkgQEAg
c3RhdGljIGlubGluZSB2b2lkIHB1dFVURjhUcmlwbGUoY2hhciomIAogQ1N0cmluZyBVU3RyaW5n
Ojp1dGY4KGJvb2wgc3RyaWN0KSBjb25zdAogewogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRoaXMt
Pmxlbmd0aCgpOwotICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0gdGhpcy0+Y2hhcmFjdGVy
cygpOworCisgICAgaWYgKGlzOEJpdCgpKQorICAgICAgICByZXR1cm4gQ1N0cmluZyhyZWludGVy
cHJldF9jYXN0PGNvbnN0IGNoYXIqPihjaGFyYWN0ZXJzOCgpKSwgbGVuZ3RoKTsKIAogICAgIC8v
IEFsbG9jYXRlIGEgYnVmZmVyIGJpZyBlbm91Z2ggdG8gaG9sZCBhbGwgdGhlIGNoYXJhY3RlcnMK
ICAgICAvLyAoYW4gaW5kaXZpZHVhbCBVVEYtMTYgVUNoYXIgY2FuIG9ubHkgZXhwYW5kIHRvIDMg
VVRGLTggYnl0ZXMpLgpAQCAtMzMxLDYgKzQxNCw4IEBAIENTdHJpbmcgVVN0cmluZzo6dXRmOChi
b29sIHN0cmljdCkgY29uc3QKICAgICAvLyAgICBidWZmZXIgd2l0aG91dCByZWFsbG9jaW5nIChz
YXksIDEuNSB4IGxlbmd0aCkuCiAgICAgaWYgKGxlbmd0aCA+IG51bWVyaWNfbGltaXRzPHVuc2ln
bmVkPjo6bWF4KCkgLyAzKQogICAgICAgICByZXR1cm4gQ1N0cmluZygpOworCisgICAgY29uc3Qg
VUNoYXIqIGNoYXJhY3RlcnMgPSB0aGlzLT5jaGFyYWN0ZXJzMTYoKTsKICAgICBWZWN0b3I8Y2hh
ciwgMTAyND4gYnVmZmVyVmVjdG9yKGxlbmd0aCAqIDMpOwogCiAgICAgY2hhciogYnVmZmVyID0g
YnVmZmVyVmVjdG9yLmRhdGEoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1VTdHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9V
U3RyaW5nLmgJKHJldmlzaW9uIDk4NDk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVVN0cmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw5ICszOSwxMSBAQCBwdWJsaWM6CiAg
ICAgVVN0cmluZyhjb25zdCBVQ2hhciopOwogCiAgICAgLy8gQ29uc3RydWN0IGEgc3RyaW5nIHdp
dGggbGF0aW4xIGRhdGEuCisgICAgVVN0cmluZyhjb25zdCBMQ2hhciogY2hhcmFjdGVycywgdW5z
aWduZWQgbGVuZ3RoKTsKICAgICBVU3RyaW5nKGNvbnN0IGNoYXIqIGNoYXJhY3RlcnMsIHVuc2ln
bmVkIGxlbmd0aCk7CiAKICAgICAvLyBDb25zdHJ1Y3QgYSBzdHJpbmcgd2l0aCBsYXRpbjEgZGF0
YSwgZnJvbSBhIG51bGwtdGVybWluYXRlZCBzb3VyY2UuCisgICAgVVN0cmluZyhjb25zdCBMQ2hh
ciogY2hhcmFjdGVycyk7CiAgICAgVVN0cmluZyhjb25zdCBjaGFyKiBjaGFyYWN0ZXJzKTsKIAog
ICAgIC8vIENvbnN0cnVjdCBhIHN0cmluZyByZWZlcmVuY2luZyBhbiBleGlzdGluZyBTdHJpbmdJ
bXBsLgpAQCAtNzMsMTAgKzc1LDI2IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmICghbV9p
bXBsKQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiBtX2ltcGwtPmNoYXJh
Y3RlcnMoKTsKKyAgICAgICAgcmV0dXJuIG1faW1wbC0+Y2hhcmFjdGVyczE2KCk7CiAgICAgfQog
Ci0gICAgYm9vbCBpczhCaXQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIGNvbnN0IExD
aGFyKiBjaGFyYWN0ZXJzOCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIW1faW1wbCkKKyAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICBBU1NFUlQobV9pbXBsLT5pczhCaXQoKSk7Cisg
ICAgICAgIHJldHVybiBtX2ltcGwtPmNoYXJhY3RlcnM4KCk7CisgICAgfQorCisgICAgY29uc3Qg
VUNoYXIqIGNoYXJhY3RlcnMxNigpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIW1faW1wbCkK
KyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBBU1NFUlQoIW1faW1wbC0+aXM4Qml0KCkp
OworICAgICAgICByZXR1cm4gbV9pbXBsLT5jaGFyYWN0ZXJzMTYoKTsKKyAgICB9CisKKyAgICBi
b29sIGlzOEJpdCgpIGNvbnN0IHsgcmV0dXJuIG1faW1wbC0+aXM4Qml0KCk7IH0KIAogICAgIENT
dHJpbmcgYXNjaWkoKSBjb25zdDsKICAgICBDU3RyaW5nIGxhdGluMSgpIGNvbnN0OwpAQCAtODYs
NyArMTA0LDkgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKCFtX2ltcGwgfHwgaW5kZXgg
Pj0gbV9pbXBsLT5sZW5ndGgoKSkKICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICByZXR1
cm4gbV9pbXBsLT5jaGFyYWN0ZXJzKClbaW5kZXhdOworICAgICAgICBpZiAoaXM4Qml0KCkpCisg
ICAgICAgICAgICByZXR1cm4gbV9pbXBsLT5jaGFyYWN0ZXJzOCgpW2luZGV4XTsKKyAgICAgICAg
cmV0dXJuIG1faW1wbC0+Y2hhcmFjdGVyczE2KClbaW5kZXhdOwogICAgIH0KIAogICAgIHN0YXRp
YyBVU3RyaW5nIG51bWJlcihpbnQpOwpAQCAtMTAwLDcgKzEyMCw3IEBAIHB1YmxpYzoKICAgICAg
ICAgeyByZXR1cm4gbV9pbXBsID8gbV9pbXBsLT5maW5kKGMsIHN0YXJ0KSA6IG5vdEZvdW5kOyB9
CiAgICAgc2l6ZV90IGZpbmQoY29uc3QgVVN0cmluZyYgc3RyLCB1bnNpZ25lZCBzdGFydCA9IDAp
IGNvbnN0CiAgICAgICAgIHsgcmV0dXJuIG1faW1wbCA/IG1faW1wbC0+ZmluZChzdHIuaW1wbCgp
LCBzdGFydCkgOiBub3RGb3VuZDsgfQotICAgIHNpemVfdCBmaW5kKGNvbnN0IGNoYXIqIHN0ciwg
dW5zaWduZWQgc3RhcnQgPSAwKSBjb25zdAorICAgIHNpemVfdCBmaW5kKGNvbnN0IExDaGFyKiBz
dHIsIHVuc2lnbmVkIHN0YXJ0ID0gMCkgY29uc3QKICAgICAgICAgeyByZXR1cm4gbV9pbXBsID8g
bV9pbXBsLT5maW5kKHN0ciwgc3RhcnQpIDogbm90Rm91bmQ7IH0KIAogICAgIC8vIEZpbmQgdGhl
IGxhc3QgaW5zdGFuY2Ugb2YgYSBzaW5nbGUgY2hhcmFjdGVyIG9yIHN0cmluZy4KQEAgLTExNSw0
NiArMTM1LDMyIEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IG1faW1wbDsKIH07
CiAKK05FVkVSX0lOTElORSBib29sIGVxdWFsU2xvd0Nhc2UoY29uc3QgVVN0cmluZyYgczEsIGNv
bnN0IFVTdHJpbmcmIHMyKTsKKwogQUxXQVlTX0lOTElORSBib29sIG9wZXJhdG9yPT0oY29uc3Qg
VVN0cmluZyYgczEsIGNvbnN0IFVTdHJpbmcmIHMyKQogewogICAgIFN0cmluZ0ltcGwqIHJlcDEg
PSBzMS5pbXBsKCk7CiAgICAgU3RyaW5nSW1wbCogcmVwMiA9IHMyLmltcGwoKTsKLSAgICB1bnNp
Z25lZCBzaXplMSA9IDA7Ci0gICAgdW5zaWduZWQgc2l6ZTIgPSAwOwogCiAgICAgaWYgKHJlcDEg
PT0gcmVwMikgLy8gSWYgdGhleSdyZSB0aGUgc2FtZSByZXAsIHRoZXkncmUgZXF1YWwuCiAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgIAorCisgICAgdW5zaWduZWQgc2l6ZTEgPSAwOworICAgIHVu
c2lnbmVkIHNpemUyID0gMDsKKwogICAgIGlmIChyZXAxKQogICAgICAgICBzaXplMSA9IHJlcDEt
Pmxlbmd0aCgpOwotICAgICAgICAKKwogICAgIGlmIChyZXAyKQogICAgICAgICBzaXplMiA9IHJl
cDItPmxlbmd0aCgpOwotICAgICAgICAKKwogICAgIGlmIChzaXplMSAhPSBzaXplMikgLy8gSWYg
dGhlIGxlbmd0aHMgYXJlIG5vdCB0aGUgc2FtZSwgd2UncmUgZG9uZS4KICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIAorCiAgICAgaWYgKCFzaXplMSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgCi0gICAgLy8gQXQgdGhpcyBwb2ludCB3ZSBrbm93IAotICAgIC8vICAgKGEpIHRoYXQgdGhl
IHN0cmluZ3MgYXJlIHRoZSBzYW1lIGxlbmd0aCBhbmQKLSAgICAvLyAgIChiKSB0aGF0IHRoZXkg
YXJlIGdyZWF0ZXIgdGhhbiB6ZXJvIGxlbmd0aC4KLSAgICBjb25zdCBVQ2hhciogZDEgPSByZXAx
LT5jaGFyYWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIqIGQyID0gcmVwMi0+Y2hhcmFjdGVycygp
OwotICAgIAotICAgIGlmIChkMSA9PSBkMikgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSBkYXRhIHBv
aW50ZXJzIGFyZSB0aGUgc2FtZS4KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgLy8g
RG8gcXVpY2sgY2hlY2tzIGZvciBzaXplcyAxIGFuZCAyLgotICAgIHN3aXRjaCAoc2l6ZTEpIHsK
LSAgICBjYXNlIDE6Ci0gICAgICAgIHJldHVybiBkMVswXSA9PSBkMlswXTsKLSAgICBjYXNlIDI6
Ci0gICAgICAgIHJldHVybiAoZDFbMF0gPT0gZDJbMF0pICYgKGQxWzFdID09IGQyWzFdKTsKLSAg
ICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gbWVtY21wKGQxLCBkMiwgc2l6ZTEgKiBzaXplb2Yo
VUNoYXIpKSA9PSAwOwotICAgIH0KKworICAgIHJldHVybiBlcXVhbFNsb3dDYXNlKHMxLCBzMik7
CiB9CiAKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9TdHJpbmdIYXNoZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1N0cmluZ0hhc2hlci5oCShy
ZXZpc2lvbiA5ODQ5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvU3RyaW5nSGFzaGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNCwxMiArMTM0LDEyIEBAIHB1YmxpYzoKIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgY29tcHV0ZUhhc2goY29u
c3QgVCogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbXB1
dGVIYXNoPFQsIGRlZmF1bHRDb3ZlcnRlcj4oZGF0YSwgbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJu
IGNvbXB1dGVIYXNoPFQsIGRlZmF1bHRDb252ZXJ0ZXI+KGRhdGEsIGxlbmd0aCk7CiAgICAgfQog
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBjb21wdXRl
SGFzaChjb25zdCBUKiBkYXRhKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbXB1dGVIYXNoPFQs
IGRlZmF1bHRDb3ZlcnRlcj4oZGF0YSk7CisgICAgICAgIHJldHVybiBjb21wdXRlSGFzaDxULCBk
ZWZhdWx0Q29udmVydGVyPihkYXRhKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTxzaXplX3QgbGVu
Z3RoPiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGhhc2hNZW1vcnkoY29uc3Qgdm9pZCogZGF0YSkK
QEAgLTE1NSwxNCArMTU1LDE0IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgc3Rh
dGljIGlubGluZSBVQ2hhciBkZWZhdWx0Q292ZXJ0ZXIoVUNoYXIgY2gpCisgICAgc3RhdGljIGlu
bGluZSBVQ2hhciBkZWZhdWx0Q29udmVydGVyKFVDaGFyIGNoKQogICAgIHsKICAgICAgICAgcmV0
dXJuIGNoOwogICAgIH0KIAotICAgIHN0YXRpYyBpbmxpbmUgVUNoYXIgZGVmYXVsdENvdmVydGVy
KGNoYXIgY2gpCisgICAgc3RhdGljIGlubGluZSBVQ2hhciBkZWZhdWx0Q29udmVydGVyKExDaGFy
IGNoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGNo
KTsKKyAgICAgICAgcmV0dXJuIGNoOwogICAgIH0KIAogICAgIGlubGluZSB2b2lkIGFkZENoYXJh
Y3RlcnNUb0hhc2goVUNoYXIgYSwgVUNoYXIgYikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvdGV4dC9BdG9taWNTdHJpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvdGV4dC9BdG9taWNTdHJpbmcuY3BwCShyZXZpc2lvbiA5ODQ5NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9BdG9taWNTdHJpbmcuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04NSwxNyArODUsMTcgQEAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFN0cmluZ0lt
cGw+IGFkZAogfQogCiBzdHJ1Y3QgQ1N0cmluZ1RyYW5zbGF0b3IgewotICAgIHN0YXRpYyB1bnNp
Z25lZCBoYXNoKGNvbnN0IGNoYXIqIGMpCisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3Qg
TENoYXIqIGMpCiAgICAgewogICAgICAgICByZXR1cm4gU3RyaW5nSGFzaGVyOjpjb21wdXRlSGFz
aChjKTsKICAgICB9CiAKLSAgICBzdGF0aWMgaW5saW5lIGJvb2wgZXF1YWwoU3RyaW5nSW1wbCog
ciwgY29uc3QgY2hhciogcykKKyAgICBzdGF0aWMgaW5saW5lIGJvb2wgZXF1YWwoU3RyaW5nSW1w
bCogciwgY29uc3QgTENoYXIqIHMpCiAgICAgewogICAgICAgICByZXR1cm4gV1RGOjplcXVhbChy
LCBzKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB0cmFuc2xhdGUoU3RyaW5nSW1wbComIGxv
Y2F0aW9uLCBjb25zdCBjaGFyKiBjb25zdCYgYywgdW5zaWduZWQgaGFzaCkKKyAgICBzdGF0aWMg
dm9pZCB0cmFuc2xhdGUoU3RyaW5nSW1wbComIGxvY2F0aW9uLCBjb25zdCBMQ2hhciogY29uc3Qm
IGMsIHVuc2lnbmVkIGhhc2gpCiAgICAgewogICAgICAgICBsb2NhdGlvbiA9IFN0cmluZ0ltcGw6
OmNyZWF0ZShjKS5sZWFrUmVmKCk7CiAgICAgICAgIGxvY2F0aW9uLT5zZXRIYXNoKGhhc2gpOwpA
QCAtMTAzLDE0ICsxMDMsMTQgQEAgc3RydWN0IENTdHJpbmdUcmFuc2xhdG9yIHsKICAgICB9CiB9
OwogCi1QYXNzUmVmUHRyPFN0cmluZ0ltcGw+IEF0b21pY1N0cmluZzo6YWRkKGNvbnN0IGNoYXIq
IGMpCitQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IEF0b21pY1N0cmluZzo6YWRkKGNvbnN0IExDaGFy
KiBjKQogewogICAgIGlmICghYykKICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKCEqYykKICAg
ICAgICAgcmV0dXJuIFN0cmluZ0ltcGw6OmVtcHR5KCk7CiAKLSAgICByZXR1cm4gYWRkVG9TdHJp
bmdUYWJsZTxjb25zdCBjaGFyKiwgQ1N0cmluZ1RyYW5zbGF0b3I+KGMpOworICAgIHJldHVybiBh
ZGRUb1N0cmluZ1RhYmxlPGNvbnN0IExDaGFyKiwgQ1N0cmluZ1RyYW5zbGF0b3I+KGMpOwogfQog
CiBzdHJ1Y3QgVUNoYXJCdWZmZXIgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90
ZXh0L0F0b21pY1N0cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvdGV4dC9BdG9taWNTdHJpbmcuaAkocmV2aXNpb24gOTg0OTQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL3RleHQvQXRvbWljU3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYg
KzQxLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGluaXQoKTsKIAogICAgIEF0b21pY1N0
cmluZygpIHsgfQorICAgIEF0b21pY1N0cmluZyhjb25zdCBMQ2hhciogcykgOiBtX3N0cmluZyhh
ZGQocykpIHsgfQogICAgIEF0b21pY1N0cmluZyhjb25zdCBjaGFyKiBzKSA6IG1fc3RyaW5nKGFk
ZChzKSkgeyB9CiAgICAgQXRvbWljU3RyaW5nKGNvbnN0IFVDaGFyKiBzLCB1bnNpZ25lZCBsZW5n
dGgpIDogbV9zdHJpbmcoYWRkKHMsIGxlbmd0aCkpIHsgfQogICAgIEF0b21pY1N0cmluZyhjb25z
dCBVQ2hhciogcywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBleGlzdGluZ0hhc2gpIDogbV9z
dHJpbmcoYWRkKHMsIGxlbmd0aCwgZXhpc3RpbmdIYXNoKSkgeyB9CkBAIC02NiwxMyArNjcsMTMg
QEAgcHVibGljOgogICAgIFVDaGFyIG9wZXJhdG9yW10odW5zaWduZWQgaW50IGkpIGNvbnN0IHsg
cmV0dXJuIG1fc3RyaW5nW2ldOyB9CiAgICAgCiAgICAgYm9vbCBjb250YWlucyhVQ2hhciBjKSBj
b25zdCB7IHJldHVybiBtX3N0cmluZy5jb250YWlucyhjKTsgfQotICAgIGJvb2wgY29udGFpbnMo
Y29uc3QgY2hhciogcywgYm9vbCBjYXNlU2Vuc2l0aXZlID0gdHJ1ZSkgY29uc3QKKyAgICBib29s
IGNvbnRhaW5zKGNvbnN0IExDaGFyKiBzLCBib29sIGNhc2VTZW5zaXRpdmUgPSB0cnVlKSBjb25z
dAogICAgICAgICB7IHJldHVybiBtX3N0cmluZy5jb250YWlucyhzLCBjYXNlU2Vuc2l0aXZlKTsg
fQogICAgIGJvb2wgY29udGFpbnMoY29uc3QgU3RyaW5nJiBzLCBib29sIGNhc2VTZW5zaXRpdmUg
PSB0cnVlKSBjb25zdAogICAgICAgICB7IHJldHVybiBtX3N0cmluZy5jb250YWlucyhzLCBjYXNl
U2Vuc2l0aXZlKTsgfQogCiAgICAgc2l6ZV90IGZpbmQoVUNoYXIgYywgc2l6ZV90IHN0YXJ0ID0g
MCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcuZmluZChjLCBzdGFydCk7IH0KLSAgICBzaXplX3Qg
ZmluZChjb25zdCBjaGFyKiBzLCBzaXplX3Qgc3RhcnQgPSAwLCBib29sIGNhc2VTZW50aXRpdmUg
PSB0cnVlKSBjb25zdAorICAgIHNpemVfdCBmaW5kKGNvbnN0IExDaGFyKiBzLCBzaXplX3Qgc3Rh
cnQgPSAwLCBib29sIGNhc2VTZW50aXRpdmUgPSB0cnVlKSBjb25zdAogICAgICAgICB7IHJldHVy
biBtX3N0cmluZy5maW5kKHMsIHN0YXJ0LCBjYXNlU2VudGl0aXZlKTsgfQogICAgIHNpemVfdCBm
aW5kKGNvbnN0IFN0cmluZyYgcywgc2l6ZV90IHN0YXJ0ID0gMCwgYm9vbCBjYXNlU2VudGl0aXZl
ID0gdHJ1ZSkgY29uc3QKICAgICAgICAgeyByZXR1cm4gbV9zdHJpbmcuZmluZChzLCBzdGFydCwg
Y2FzZVNlbnRpdGl2ZSk7IH0KQEAgLTExOSw4ICsxMjAsMTAgQEAgcHVibGljOgogcHJpdmF0ZToK
ICAgICBTdHJpbmcgbV9zdHJpbmc7CiAgICAgCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5n
SW1wbD4gYWRkKGNvbnN0IGNoYXIqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBs
PiBhZGQoY29uc3QgTENoYXIqKTsKKyAgICBBTFdBWVNfSU5MSU5FIHN0YXRpYyBQYXNzUmVmUHRy
PFN0cmluZ0ltcGw+IGFkZChjb25zdCBjaGFyKiBzKSB7IHJldHVybiBhZGQocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBMQ2hhcio+KHMpKTsgfTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJ
bXBsPiBhZGQoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgpOworICAgIEFMV0FZU19JTkxJ
TkUgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gYWRkKGNvbnN0IGNoYXIqIHMsIHVuc2ln
bmVkIGxlbmd0aCkgeyByZXR1cm4gYWRkKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHMp
LCBsZW5ndGgpOyB9OwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGFkZChjb25z
dCBVQ2hhciosIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgZXhpc3RpbmdIYXNoKTsKICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBhZGQoY29uc3QgVUNoYXIqKTsKICAgICBBTFdB
WVNfSU5MSU5FIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gYWRkKFN0cmluZ0ltcGwqIHIpCkBAIC0x
MzQsMjYgKzEzNywyOSBAQCBwcml2YXRlOgogfTsKIAogaW5saW5lIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBBdG9taWNTdHJpbmcmIGEsIGNvbnN0IEF0b21pY1N0cmluZyYgYikgeyByZXR1cm4gYS5p
bXBsKCkgPT0gYi5pbXBsKCk7IH0KLWJvb2wgb3BlcmF0b3I9PShjb25zdCBBdG9taWNTdHJpbmcm
IGEsIGNvbnN0IGNoYXIqIGIpOwotaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBdG9taWNT
dHJpbmcmIGEsIGNvbnN0IGNoYXIqIGIpIHsgcmV0dXJuIFdURjo6ZXF1YWwoYS5pbXBsKCksIGIp
OyB9Citib29sIG9wZXJhdG9yPT0oY29uc3QgQXRvbWljU3RyaW5nJiwgY29uc3QgTENoYXIqKTsK
K2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgQXRvbWljU3RyaW5nJiBhLCBjb25zdCBjaGFy
KiBiKSB7IHJldHVybiBXVEY6OmVxdWFsKGEuaW1wbCgpLCByZWludGVycHJldF9jYXN0PGNvbnN0
IExDaGFyKj4oYikpOyB9CiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEF0b21pY1N0cmlu
ZyYgYSwgY29uc3QgVmVjdG9yPFVDaGFyPiYgYikgeyByZXR1cm4gYS5pbXBsKCkgJiYgZXF1YWwo
YS5pbXBsKCksIGIuZGF0YSgpLCBiLnNpemUoKSk7IH0gICAgCiBpbmxpbmUgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IEF0b21pY1N0cmluZyYgYSwgY29uc3QgU3RyaW5nJiBiKSB7IHJldHVybiBlcXVh
bChhLmltcGwoKSwgYi5pbXBsKCkpOyB9Ci1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGNo
YXIqIGEsIGNvbnN0IEF0b21pY1N0cmluZyYgYikgeyByZXR1cm4gYiA9PSBhOyB9CitpbmxpbmUg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IExDaGFyKiBhLCBjb25zdCBBdG9taWNTdHJpbmcmIGIpIHsg
cmV0dXJuIGIgPT0gYTsgfQogaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHJpbmcmIGEs
IGNvbnN0IEF0b21pY1N0cmluZyYgYikgeyByZXR1cm4gZXF1YWwoYS5pbXBsKCksIGIuaW1wbCgp
KTsgfQogaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBWZWN0b3I8VUNoYXI+JiBhLCBjb25z
dCBBdG9taWNTdHJpbmcmIGIpIHsgcmV0dXJuIGIgPT0gYTsgfQogCiBpbmxpbmUgYm9vbCBvcGVy
YXRvciE9KGNvbnN0IEF0b21pY1N0cmluZyYgYSwgY29uc3QgQXRvbWljU3RyaW5nJiBiKSB7IHJl
dHVybiBhLmltcGwoKSAhPSBiLmltcGwoKTsgfQotaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25z
dCBBdG9taWNTdHJpbmcmIGEsIGNvbnN0IGNoYXIgKmIpIHsgcmV0dXJuICEoYSA9PSBiKTsgfQor
aW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBBdG9taWNTdHJpbmcmIGEsIGNvbnN0IExDaGFy
KiBiKSB7IHJldHVybiAhKGEgPT0gYik7IH0KK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3Qg
QXRvbWljU3RyaW5nJiBhLCBjb25zdCBjaGFyKiBiKSB7IHJldHVybiAhKGEgPT0gYik7IH0KIGlu
bGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgQXRvbWljU3RyaW5nJiBhLCBjb25zdCBTdHJpbmcm
IGIpIHsgcmV0dXJuICFlcXVhbChhLmltcGwoKSwgYi5pbXBsKCkpOyB9CiBpbmxpbmUgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IEF0b21pY1N0cmluZyYgYSwgY29uc3QgVmVjdG9yPFVDaGFyPiYgYikg
eyByZXR1cm4gIShhID09IGIpOyB9Ci1pbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGNoYXIq
IGEsIGNvbnN0IEF0b21pY1N0cmluZyYgYikgeyByZXR1cm4gIShiID09IGEpOyB9CitpbmxpbmUg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IExDaGFyKiBhLCBjb25zdCBBdG9taWNTdHJpbmcmIGIpIHsg
cmV0dXJuICEoYiA9PSBhKTsgfQogaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBTdHJpbmcm
IGEsIGNvbnN0IEF0b21pY1N0cmluZyYgYikgeyByZXR1cm4gIWVxdWFsKGEuaW1wbCgpLCBiLmlt
cGwoKSk7IH0KIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgVmVjdG9yPFVDaGFyPiYgYSwg
Y29uc3QgQXRvbWljU3RyaW5nJiBiKSB7IHJldHVybiAhKGEgPT0gYik7IH0KIAogaW5saW5lIGJv
b2wgZXF1YWxJZ25vcmluZ0Nhc2UoY29uc3QgQXRvbWljU3RyaW5nJiBhLCBjb25zdCBBdG9taWNT
dHJpbmcmIGIpIHsgcmV0dXJuIGVxdWFsSWdub3JpbmdDYXNlKGEuaW1wbCgpLCBiLmltcGwoKSk7
IH0KLWlubGluZSBib29sIGVxdWFsSWdub3JpbmdDYXNlKGNvbnN0IEF0b21pY1N0cmluZyYgYSwg
Y29uc3QgY2hhciogYikgeyByZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2UoYS5pbXBsKCksIGIpOyB9
CitpbmxpbmUgYm9vbCBlcXVhbElnbm9yaW5nQ2FzZShjb25zdCBBdG9taWNTdHJpbmcmIGEsIGNv
bnN0IExDaGFyKiBiKSB7IHJldHVybiBlcXVhbElnbm9yaW5nQ2FzZShhLmltcGwoKSwgYik7IH0K
K2lubGluZSBib29sIGVxdWFsSWdub3JpbmdDYXNlKGNvbnN0IEF0b21pY1N0cmluZyYgYSwgY29u
c3QgY2hhciogYikgeyByZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2UoYS5pbXBsKCksIHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihiKSk7IH0KIGlubGluZSBib29sIGVxdWFsSWdub3JpbmdD
YXNlKGNvbnN0IEF0b21pY1N0cmluZyYgYSwgY29uc3QgU3RyaW5nJiBiKSB7IHJldHVybiBlcXVh
bElnbm9yaW5nQ2FzZShhLmltcGwoKSwgYi5pbXBsKCkpOyB9Ci1pbmxpbmUgYm9vbCBlcXVhbEln
bm9yaW5nQ2FzZShjb25zdCBjaGFyKiBhLCBjb25zdCBBdG9taWNTdHJpbmcmIGIpIHsgcmV0dXJu
IGVxdWFsSWdub3JpbmdDYXNlKGEsIGIuaW1wbCgpKTsgfQoraW5saW5lIGJvb2wgZXF1YWxJZ25v
cmluZ0Nhc2UoY29uc3QgTENoYXIqIGEsIGNvbnN0IEF0b21pY1N0cmluZyYgYikgeyByZXR1cm4g
ZXF1YWxJZ25vcmluZ0Nhc2UoYSwgYi5pbXBsKCkpOyB9CitpbmxpbmUgYm9vbCBlcXVhbElnbm9y
aW5nQ2FzZShjb25zdCBjaGFyKiBhLCBjb25zdCBBdG9taWNTdHJpbmcmIGIpIHsgcmV0dXJuIGVx
dWFsSWdub3JpbmdDYXNlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihhKSwgYi5pbXBs
KCkpOyB9CiBpbmxpbmUgYm9vbCBlcXVhbElnbm9yaW5nQ2FzZShjb25zdCBTdHJpbmcmIGEsIGNv
bnN0IEF0b21pY1N0cmluZyYgYikgeyByZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2UoYS5pbXBsKCks
IGIuaW1wbCgpKTsgfQogCiAvLyBEZWZpbmUgZXh0ZXJuYWwgZ2xvYmFsIHZhcmlhYmxlcyBmb3Ig
dGhlIGNvbW1vbmx5IHVzZWQgYXRvbWljIHN0cmluZ3MuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUuaAkocmV2aXNpb24gOTg0
OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUu
aAkod29ya2luZyBjb3B5KQpAQCAtNTgsNiArNTgsMjEgQEAgcHJpdmF0ZToKIH07CiAKIHRlbXBs
YXRlPD4KK2NsYXNzIFN0cmluZ1R5cGVBZGFwdGVyPExDaGFyPiB7CitwdWJsaWM6CisgICAgU3Ry
aW5nVHlwZUFkYXB0ZXI8TENoYXI+KExDaGFyIGJ1ZmZlcikKKyAgICAgICAgOiBtX2J1ZmZlcihi
dWZmZXIpCisgICAgeworICAgIH0KKworICAgIHVuc2lnbmVkIGxlbmd0aCgpIHsgcmV0dXJuIDE7
IH0KKyAgICB2b2lkIHdyaXRlVG8oVUNoYXIqIGRlc3RpbmF0aW9uKSB7ICpkZXN0aW5hdGlvbiA9
IG1fYnVmZmVyOyB9CisKK3ByaXZhdGU6CisgICAgTENoYXIgbV9idWZmZXI7Cit9OworCit0ZW1w
bGF0ZTw+CiBjbGFzcyBTdHJpbmdUeXBlQWRhcHRlcjxVQ2hhcj4gewogcHVibGljOgogICAgIFN0
cmluZ1R5cGVBZGFwdGVyPFVDaGFyPihVQ2hhciBidWZmZXIpCkBAIC05Nyw2ICsxMTIsMjggQEAg
cHJpdmF0ZToKIH07CiAKIHRlbXBsYXRlPD4KK2NsYXNzIFN0cmluZ1R5cGVBZGFwdGVyPExDaGFy
Kj4geworcHVibGljOgorICAgIFN0cmluZ1R5cGVBZGFwdGVyPExDaGFyKj4oTENoYXIqIGJ1ZmZl
cikKKyAgICA6IG1fYnVmZmVyKGJ1ZmZlcikKKyAgICAsIG1fbGVuZ3RoKHN0cmxlbihyZWludGVy
cHJldF9jYXN0PGNoYXIqPihidWZmZXIpKSkKKyAgICB7CisgICAgfQorCisgICAgdW5zaWduZWQg
bGVuZ3RoKCkgeyByZXR1cm4gbV9sZW5ndGg7IH0KKworICAgIHZvaWQgd3JpdGVUbyhVQ2hhciog
ZGVzdGluYXRpb24pCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9s
ZW5ndGg7ICsraSkKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uW2ldID0gbV9idWZmZXJbaV07Cisg
ICAgfQorCitwcml2YXRlOgorICAgIGNvbnN0IExDaGFyKiBtX2J1ZmZlcjsKKyAgICB1bnNpZ25l
ZCBtX2xlbmd0aDsKK307CisKK3RlbXBsYXRlPD4KIGNsYXNzIFN0cmluZ1R5cGVBZGFwdGVyPGNv
bnN0IFVDaGFyKj4gewogcHVibGljOgogICAgIFN0cmluZ1R5cGVBZGFwdGVyPGNvbnN0IFVDaGFy
Kj4oY29uc3QgVUNoYXIqIGJ1ZmZlcikKQEAgLTE0OSw2ICsxODYsMjggQEAgcHJpdmF0ZToKIH07
CiAKIHRlbXBsYXRlPD4KK2NsYXNzIFN0cmluZ1R5cGVBZGFwdGVyPGNvbnN0IExDaGFyKj4gewor
cHVibGljOgorICAgIFN0cmluZ1R5cGVBZGFwdGVyPGNvbnN0IExDaGFyKj4oY29uc3QgTENoYXIq
IGJ1ZmZlcikKKyAgICAgICAgOiBtX2J1ZmZlcihidWZmZXIpCisgICAgICAgICwgbV9sZW5ndGgo
c3RybGVuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGJ1ZmZlcikpKQorICAgIHsKKyAg
ICB9CisgICAgCisgICAgdW5zaWduZWQgbGVuZ3RoKCkgeyByZXR1cm4gbV9sZW5ndGg7IH0KKyAg
ICAKKyAgICB2b2lkIHdyaXRlVG8oVUNoYXIqIGRlc3RpbmF0aW9uKQorICAgIHsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbGVuZ3RoOyArK2kpCisgICAgICAgICAgICBkZXN0
aW5hdGlvbltpXSA9IG1fYnVmZmVyW2ldOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgY29u
c3QgTENoYXIqIG1fYnVmZmVyOworICAgIHVuc2lnbmVkIG1fbGVuZ3RoOworfTsKKwordGVtcGxh
dGU8PgogY2xhc3MgU3RyaW5nVHlwZUFkYXB0ZXI8VmVjdG9yPGNoYXI+ID4gewogcHVibGljOgog
ICAgIFN0cmluZ1R5cGVBZGFwdGVyPFZlY3RvcjxjaGFyPiA+KGNvbnN0IFZlY3RvcjxjaGFyPiYg
YnVmZmVyKQpAQCAtMTcxLDYgKzIzMCwyNiBAQCBwcml2YXRlOgogfTsKIAogdGVtcGxhdGU8Pgor
Y2xhc3MgU3RyaW5nVHlwZUFkYXB0ZXI8VmVjdG9yPExDaGFyPiA+IHsKK3B1YmxpYzoKKyAgICBT
dHJpbmdUeXBlQWRhcHRlcjxWZWN0b3I8TENoYXI+ID4oY29uc3QgVmVjdG9yPExDaGFyPiYgYnVm
ZmVyKQorICAgICAgICA6IG1fYnVmZmVyKGJ1ZmZlcikKKyAgICB7CisgICAgfQorCisgICAgc2l6
ZV90IGxlbmd0aCgpIHsgcmV0dXJuIG1fYnVmZmVyLnNpemUoKTsgfQorCisgICAgdm9pZCB3cml0
ZVRvKFVDaGFyKiBkZXN0aW5hdGlvbikKKyAgICB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV9idWZmZXIuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBkZXN0aW5hdGlvbltpXSA9
IG1fYnVmZmVyW2ldOworICAgIH0KKworcHJpdmF0ZToKKyAgICBjb25zdCBWZWN0b3I8TENoYXI+
JiBtX2J1ZmZlcjsKK307CisKK3RlbXBsYXRlPD4KIGNsYXNzIFN0cmluZ1R5cGVBZGFwdGVyPFN0
cmluZz4gewogcHVibGljOgogICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZz4oY29uc3QgU3Ry
aW5nJiBzdHJpbmcpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvU3RyaW5n
SGFzaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJp
bmdIYXNoLmgJKHJldmlzaW9uIDk4NDk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90
ZXh0L1N0cmluZ0hhc2guaAkod29ya2luZyBjb3B5KQpAQCAtNTMsMTEgKzUzLDY3IEBAIG5hbWVz
cGFjZSBXVEYgewogICAgICAgICAgICAgaWYgKGFMZW5ndGggIT0gYkxlbmd0aCkKICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICAgICAgICAgIGlmIChhLT5pczhCaXQoKSkgewor
ICAgICAgICAgICAgICAgIGlmIChiLT5pczhCaXQoKSkgeworICAgICAgICAgICAgICAgICAgICAv
LyBCb3RoIGEgJiBiIGFyZSA4IGJpdC4KKyAgICAgICAgICAgICAgICAgICAgY29uc3QgTENoYXIq
IGFDaGFycyA9IGEtPmNoYXJhY3RlcnM4KCk7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IExD
aGFyKiBiQ2hhcnMgPSBiLT5jaGFyYWN0ZXJzOCgpOworCisgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGkgPSAwOworCisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBwZXJoYXBzIHdl
IHNob3VsZCBoYXZlIGEgbW9yZSBhYnN0cmFjdCBtYWNybyB0aGF0IGluZGljYXRlcyB3aGVuCisg
ICAgICAgICAgICAgICAgICAgIC8vIGdvaW5nIDQgYnl0ZXMgYXQgYSB0aW1lIGlzIHVuc2FmZQor
I2lmIChDUFUoWDg2KSB8fCBDUFUoWDg2XzY0KSkKKyAgICAgICAgICAgICAgICAgICAgY29uc3Qg
dW5zaWduZWQgY2hhcnNQZXJJbnQgPSBzaXplb2YodWludDMyX3QpIC8gc2l6ZW9mKGNoYXIpOwor
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFMZW5ndGggPiBj
aGFyc1BlckludCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc3RvcENvdW50
ID0gYUxlbmd0aCAmIH4oY2hhcnNQZXJJbnQgLSAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDMyX3QqIGFJbnRDaGFyYWN0ZXJz
ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KGFDaGFycyk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCB1aW50MzJfdCogYkludENoYXJhY3RlcnMgPSByZWludGVycHJl
dF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oYkNoYXJzKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaiA9IDA7IGkgPCBzdG9wQ291bnQ7IGkgKz0gY2hhcnNQZXJJbnQsICsr
aikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhSW50Q2hhcmFjdGVyc1tqXSAh
PSBiSW50Q2hhcmFjdGVyc1tqXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICB9CisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgZm9yICg7IGkgPCBhTGVuZ3RoOyArK2kp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhQ2hhcnNbaV0gIT0gYkNoYXJzW2ldKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gV2Uga25vdyB0
aGF0IGEgaXMgOCBiaXQgJiBiIGlzIDE2IGJpdC4KKyAgICAgICAgICAgICAgICBjb25zdCBMQ2hh
ciogYUNoYXJzID0gYS0+Y2hhcmFjdGVyczgoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBVQ2hh
ciogYkNoYXJzID0gYi0+Y2hhcmFjdGVyczE2KCk7CisgICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSAhPSBhTGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCphQ2hhcnMrKyAhPSAqYkNoYXJzKyspCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChiLT5pczhCaXQoKSkgeworICAgICAg
ICAgICAgICAgIC8vIFdlIGtub3cgdGhhdCBhIGlzIDggYml0IGFuZCBiIGlzIDE2IGJpdC4KKyAg
ICAgICAgICAgICAgICBjb25zdCBVQ2hhciogYUNoYXJzID0gYS0+Y2hhcmFjdGVyczE2KCk7Cisg
ICAgICAgICAgICAgICAgY29uc3QgTENoYXIqIGJDaGFycyA9IGItPmNoYXJhY3RlcnM4KCk7Cisg
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSAhPSBhTGVuZ3RoOyArK2kpIHsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCphQ2hhcnMrKyAhPSAqYkNoYXJzKyspCisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8v
IEJvdGggYSAmIGIgYXJlIDE2IGJpdC4KICAgICAgICAgICAgIC8vIEZJWE1FOiBwZXJoYXBzIHdl
IHNob3VsZCBoYXZlIGEgbW9yZSBhYnN0cmFjdCBtYWNybyB0aGF0IGluZGljYXRlcyB3aGVuCiAg
ICAgICAgICAgICAvLyBnb2luZyA0IGJ5dGVzIGF0IGEgdGltZSBpcyB1bnNhZmUKICNpZiBDUFUo
QVJNKSB8fCBDUFUoU0g0KSB8fCBDUFUoTUlQUykgfHwgQ1BVKFNQQVJDKQotICAgICAgICAgICAg
Y29uc3QgVUNoYXIqIGFDaGFycyA9IGEtPmNoYXJhY3RlcnMoKTsKLSAgICAgICAgICAgIGNvbnN0
IFVDaGFyKiBiQ2hhcnMgPSBiLT5jaGFyYWN0ZXJzKCk7CisgICAgICAgICAgICBjb25zdCBVQ2hh
ciogYUNoYXJzID0gYS0+Y2hhcmFjdGVyczE2KCk7CisgICAgICAgICAgICBjb25zdCBVQ2hhciog
YkNoYXJzID0gYi0+Y2hhcmFjdGVyczE2KCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpICE9IGFMZW5ndGg7ICsraSkgewogICAgICAgICAgICAgICAgIGlmICgqYUNoYXJzKysg
IT0gKmJDaGFycysrKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC02NSw4
ICsxMjEsOCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogI2Vs
c2UKICAgICAgICAgICAgIC8qIERvIGl0IDQtYnl0ZXMtYXQtYS10aW1lIG9uIGFyY2hpdGVjdHVy
ZXMgd2hlcmUgaXQncyBzYWZlICovCi0gICAgICAgICAgICBjb25zdCB1aW50MzJfdCogYUNoYXJz
ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KGEtPmNoYXJhY3RlcnMoKSk7Ci0g
ICAgICAgICAgICBjb25zdCB1aW50MzJfdCogYkNoYXJzID0gcmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1aW50MzJfdCo+KGItPmNoYXJhY3RlcnMoKSk7CisgICAgICAgICAgICBjb25zdCB1aW50MzJf
dCogYUNoYXJzID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KGEtPmNoYXJhY3Rl
cnMxNigpKTsKKyAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90KiBiQ2hhcnMgPSByZWludGVycHJl
dF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oYi0+Y2hhcmFjdGVyczE2KCkpOwogCiAgICAgICAgICAg
ICB1bnNpZ25lZCBoYWxmTGVuZ3RoID0gYUxlbmd0aCA+PiAxOwogICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSAhPSBoYWxmTGVuZ3RoOyArK2kpCkBAIC0xMTIsMTEgKzE2OCwxNiBA
QCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgICAgIHJldHVybiBoYXNoKHN0ci0+Y2hhcmFjdGVy
cygpLCBzdHItPmxlbmd0aCgpKTsKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRpYyB1bnNpZ25l
ZCBoYXNoKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKKyAgICAgICAgc3RhdGlj
IHVuc2lnbmVkIGhhc2goY29uc3QgTENoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKICAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6Y29tcHV0ZUhhc2g8Y2hhciwg
Zm9sZENhc2U8Y2hhcj4gPihkYXRhLCBsZW5ndGgpOworICAgICAgICAgICAgcmV0dXJuIFN0cmlu
Z0hhc2hlcjo6Y29tcHV0ZUhhc2g8TENoYXIsIGZvbGRDYXNlPExDaGFyPiA+KGRhdGEsIGxlbmd0
aCk7CiAgICAgICAgIH0KIAorICAgICAgICBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGhhc2goY29u
c3QgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gQ2FzZUZvbGRpbmdIYXNoOjpoYXNoKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIq
PihkYXRhKSwgbGVuZ3RoKTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgc3RhdGljIGJv
b2wgZXF1YWwoY29uc3QgU3RyaW5nSW1wbCogYSwgY29uc3QgU3RyaW5nSW1wbCogYikKICAgICAg
ICAgewogICAgICAgICAgICAgaWYgKGEgPT0gYikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvdGV4dC9TdHJpbmdJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL3RleHQvU3RyaW5nSW1wbC5jcHAJKHJldmlzaW9uIDk4NDk0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01NSwxMSArNTUsMTggQEAgU3RyaW5nSW1wbDo6flN0cmluZ0ltcGwoKQogI2VuZGlmCiAKICAg
ICBCdWZmZXJPd25lcnNoaXAgb3duZXJzaGlwID0gYnVmZmVyT3duZXJzaGlwKCk7CisKKyAgICBp
ZiAoaGFzMTZCaXRTaGFkb3coKSkgeworICAgICAgICBBU1NFUlQobV9jb3B5RGF0YTE2KTsKKyAg
ICAgICAgZmFzdEZyZWUobV9jb3B5RGF0YTE2KTsKKyAgICB9CisKICAgICBpZiAob3duZXJzaGlw
ID09IEJ1ZmZlckludGVybmFsKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKG93bmVyc2hpcCA9
PSBCdWZmZXJPd25lZCkgewotICAgICAgICBBU1NFUlQobV9kYXRhKTsKLSAgICAgICAgZmFzdEZy
ZWUoY29uc3RfY2FzdDxVQ2hhcio+KG1fZGF0YSkpOworICAgICAgICAvLyBXZSB1c2UgbV9kYXRh
OCwgYnV0IHNpbmNlIGl0IGlzIGEgdW5pb24gd2l0aCBtX2RhdGExNiB0aGlzIHdvcmtzIGVpdGhl
ciB3YXkuCisgICAgICAgIEFTU0VSVChtX2RhdGE4KTsKKyAgICAgICAgZmFzdEZyZWUoY29uc3Rf
Y2FzdDxMQ2hhcio+KG1fZGF0YTgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNjgs
NiArNzUsMjUgQEAgU3RyaW5nSW1wbDo6flN0cmluZ0ltcGwoKQogICAgIG1fc3Vic3RyaW5nQnVm
ZmVyLT5kZXJlZigpOwogfQogCitQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmNy
ZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoLCBMQ2hhciomIGRhdGEpCit7CisgICAg
aWYgKCFsZW5ndGgpIHsKKyAgICAgICAgZGF0YSA9IDA7CisgICAgICAgIHJldHVybiBlbXB0eSgp
OworICAgIH0KKworICAgIC8vIEFsbG9jYXRlIGEgc2luZ2xlIGJ1ZmZlciBsYXJnZSBlbm91Z2gg
dG8gY29udGFpbiB0aGUgU3RyaW5nSW1wbAorICAgIC8vIHN0cnVjdCBhcyB3ZWxsIGFzIHRoZSBk
YXRhIHdoaWNoIGl0IGNvbnRhaW5zLiBUaGlzIHJlbW92ZXMgb25lCisgICAgLy8gaGVhcCBhbGxv
Y2F0aW9uIGZyb20gdGhpcyBjYWxsLgorICAgIGlmIChsZW5ndGggPiAoKHN0ZDo6bnVtZXJpY19s
aW1pdHM8dW5zaWduZWQ+OjptYXgoKSAtIHNpemVvZihTdHJpbmdJbXBsKSkgLyBzaXplb2YoTENo
YXIpKSkKKyAgICAgICAgQ1JBU0goKTsKKyAgICBzaXplX3Qgc2l6ZSA9IHNpemVvZihTdHJpbmdJ
bXBsKSArIGxlbmd0aCAqIHNpemVvZihMQ2hhcik7CisgICAgU3RyaW5nSW1wbCogc3RyaW5nID0g
c3RhdGljX2Nhc3Q8U3RyaW5nSW1wbCo+KGZhc3RNYWxsb2Moc2l6ZSkpOworCisgICAgZGF0YSA9
IHJlaW50ZXJwcmV0X2Nhc3Q8TENoYXIqPihzdHJpbmcgKyAxKTsKKyAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IChzdHJpbmcpIFN0cmluZ0ltcGwobGVuZ3RoLCBGb3JjZThCaXRDb25zdHJ1Y3Rvcikp
OworfQorCiBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmNyZWF0ZVVuaW5pdGlh
bGl6ZWQodW5zaWduZWQgbGVuZ3RoLCBVQ2hhciomIGRhdGEpCiB7CiAgICAgaWYgKCFsZW5ndGgp
IHsKQEAgLTExOCw3ICsxNDQsNyBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6
OmNyZWF0CiAgICAgcmV0dXJuIHN0cmluZy5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8U3Ry
aW5nSW1wbD4gU3RyaW5nSW1wbDo6Y3JlYXRlKGNvbnN0IGNoYXIqIGNoYXJhY3RlcnMsIHVuc2ln
bmVkIGxlbmd0aCkKK1Bhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y3JlYXRlKGNv
bnN0IExDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgaWYgKCFjaGFy
YWN0ZXJzIHx8ICFsZW5ndGgpCiAgICAgICAgIHJldHVybiBlbXB0eSgpOwpAQCAtMTMyLDI0ICsx
NTgsNTggQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpjcmVhdAogICAgIHJl
dHVybiBzdHJpbmcucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmlu
Z0ltcGw6OmNyZWF0ZShjb25zdCBjaGFyKiBzdHJpbmcpCitQYXNzUmVmUHRyPFN0cmluZ0ltcGw+
IFN0cmluZ0ltcGw6OmNyZWF0ZShjb25zdCBMQ2hhciogc3RyaW5nKQogewogICAgIGlmICghc3Ry
aW5nKQogICAgICAgICByZXR1cm4gZW1wdHkoKTsKLSAgICBzaXplX3QgbGVuZ3RoID0gc3RybGVu
KHN0cmluZyk7CisgICAgc2l6ZV90IGxlbmd0aCA9IHN0cmxlbihyZWludGVycHJldF9jYXN0PGNv
bnN0IGNoYXIqPihzdHJpbmcpKTsKICAgICBpZiAobGVuZ3RoID4gbnVtZXJpY19saW1pdHM8dW5z
aWduZWQ+OjptYXgoKSkKICAgICAgICAgQ1JBU0goKTsKICAgICByZXR1cm4gY3JlYXRlKHN0cmlu
ZywgbGVuZ3RoKTsKIH0KIAorY29uc3QgVUNoYXIqIFN0cmluZ0ltcGw6OmdldERhdGExNlNsb3dD
YXNlKCkgY29uc3QKK3sKKyAgICBpZiAoaGFzMTZCaXRTaGFkb3coKSkKKyAgICAgICAgcmV0dXJu
IG1fY29weURhdGExNjsKKworICAgIGlmIChidWZmZXJPd25lcnNoaXAoKSA9PSBCdWZmZXJTdWJz
dHJpbmcpIHsKKyAgICAgICAgLy8gSWYgdGhpcyBpcyBhIHN1YnN0cmluZywgcmV0dXJuIGEgcG9p
bnRlciBpbnRvIHRoZSBwYXJlbnQgc3RyaW5nLgorICAgICAgICAvLyBUT0RPOiBDb25zaWRlciBz
ZXZlcmluZyB0aGlzIHN0cmluZyBmcm9tIHRoZSBwYXJlbnQgc3RyaW5nCisgICAgICAgIHVuc2ln
bmVkIG9mZnNldCA9IG1fZGF0YTggLSBtX3N1YnN0cmluZ0J1ZmZlci0+Y2hhcmFjdGVyczgoKTsK
KyAgICAgICAgcmV0dXJuIG1fc3Vic3RyaW5nQnVmZmVyLT5jaGFyYWN0ZXJzMTYoKSArIG9mZnNl
dDsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBsZW4gPSBsZW5ndGgoKTsKKyAgICBtX2NvcHlEYXRh
MTYgPSBzdGF0aWNfY2FzdDxVQ2hhcio+KGZhc3RNYWxsb2MobGVuICogc2l6ZW9mKFVDaGFyKSkp
OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuOyBpKyspCisgICAgICAgIG1fY29weURh
dGExNltpXSA9IG1fZGF0YThbaV07CisKKyAgICBtX2hhc2hBbmRGbGFncyB8PSBzX2hhc2hGbGFn
SGFzMTZCaXRTaGFkb3c7CisKKyAgICByZXR1cm4gbV9jb3B5RGF0YTE2OworfQorCiBib29sIFN0
cmluZ0ltcGw6OmNvbnRhaW5zT25seVdoaXRlc3BhY2UoKQogewogICAgIC8vIEZJWE1FOiBUaGUg
ZGVmaW5pdGlvbiBvZiB3aGl0ZXNwYWNlIGhlcmUgaW5jbHVkZXMgYSBudW1iZXIgb2YgY2hhcmFj
dGVycwogICAgIC8vIHRoYXQgYXJlIG5vdCB3aGl0ZXNwYWNlIGZyb20gdGhlIHBvaW50IG9mIHZp
ZXcgb2YgUmVuZGVyVGV4dDsgSSB3b25kZXIgaWYKICAgICAvLyB0aGF0J3MgYSBwcm9ibGVtIGlu
IHByYWN0aWNlLgotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2xlbmd0aDsgaSsrKQot
ICAgICAgICBpZiAoIWlzQVNDSUlTcGFjZShtX2RhdGFbaV0pKQorICAgIGlmIChpczhCaXQoKSkg
eworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9sZW5ndGg7IGkrKykgeworICAg
ICAgICAgICAgVUNoYXIgYyA9IG1fZGF0YThbaV07CisgICAgICAgICAgICBpZiAoIWlzQVNDSUlT
cGFjZShjKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV9sZW5ndGg7IGkrKykgeworICAgICAgICBVQ2hhciBjID0gbV9kYXRhMTZbaV07CisgICAgICAg
IGlmICghaXNBU0NJSVNwYWNlKGMpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTYzLDE1ICsyMjMsMjAgQEAgUGFzc1JlZlB0cjxT
dHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpzdWJzdAogICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAg
ICAgICAgIGxlbmd0aCA9IG1heExlbmd0aDsKICAgICB9Ci0gICAgcmV0dXJuIGNyZWF0ZShtX2Rh
dGEgKyBzdGFydCwgbGVuZ3RoKTsKKyAgICBpZiAoaXM4Qml0KCkpCisgICAgICAgIHJldHVybiBj
cmVhdGUobV9kYXRhOCArIHN0YXJ0LCBsZW5ndGgpOworCisgICAgcmV0dXJuIGNyZWF0ZShtX2Rh
dGExNiArIHN0YXJ0LCBsZW5ndGgpOwogfQogCiBVQ2hhcjMyIFN0cmluZ0ltcGw6OmNoYXJhY3Rl
clN0YXJ0aW5nQXQodW5zaWduZWQgaSkKIHsKLSAgICBpZiAoVTE2X0lTX1NJTkdMRShtX2RhdGFb
aV0pKQotICAgICAgICByZXR1cm4gbV9kYXRhW2ldOwotICAgIGlmIChpICsgMSA8IG1fbGVuZ3Ro
ICYmIFUxNl9JU19MRUFEKG1fZGF0YVtpXSkgJiYgVTE2X0lTX1RSQUlMKG1fZGF0YVtpICsgMV0p
KQotICAgICAgICByZXR1cm4gVTE2X0dFVF9TVVBQTEVNRU5UQVJZKG1fZGF0YVtpXSwgbV9kYXRh
W2kgKyAxXSk7CisgICAgaWYgKGlzOEJpdCgpKQorICAgICAgICByZXR1cm4gbV9kYXRhOFtpXTsK
KyAgICBpZiAoVTE2X0lTX1NJTkdMRShtX2RhdGExNltpXSkpCisgICAgICAgIHJldHVybiBtX2Rh
dGExNltpXTsKKyAgICBpZiAoaSArIDEgPCBtX2xlbmd0aCAmJiBVMTZfSVNfTEVBRChtX2RhdGEx
NltpXSkgJiYgVTE2X0lTX1RSQUlMKG1fZGF0YTE2W2kgKyAxXSkpCisgICAgICAgIHJldHVybiBV
MTZfR0VUX1NVUFBMRU1FTlRBUlkobV9kYXRhMTZbaV0sIG1fZGF0YTE2W2kgKyAxXSk7CiAgICAg
cmV0dXJuIDA7CiB9CiAKQEAgLTE4MSwxNSArMjQ2LDQ2IEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1w
bD4gU3RyaW5nSW1wbDo6bG93ZXIKICAgICAvLyBuby1vcCBjb2RlIHBhdGggdXAgdGhyb3VnaCB0
aGUgZmlyc3QgJ3JldHVybicgc3RhdGVtZW50LgogICAgIAogICAgIC8vIEZpcnN0IHNjYW4gdGhl
IHN0cmluZyBmb3IgdXBwZXJjYXNlIGFuZCBub24tQVNDSUkgY2hhcmFjdGVyczoKLSAgICBVQ2hh
ciBvcmVkID0gMDsKICAgICBib29sIG5vVXBwZXIgPSB0cnVlOwotICAgIGNvbnN0IFVDaGFyICpl
bmQgPSBtX2RhdGEgKyBtX2xlbmd0aDsKLSAgICBmb3IgKGNvbnN0IFVDaGFyKiBjaHAgPSBtX2Rh
dGE7IGNocCAhPSBlbmQ7IGNocCsrKSB7CisgICAgVUNoYXIgb3JlZCA9IDA7CisgICAgaWYgKGlz
OEJpdCgpKSB7CisgICAgICAgIGNvbnN0IExDaGFyKiBlbmQgPSBtX2RhdGE4ICsgbV9sZW5ndGg7
CisgICAgICAgIGZvciAoY29uc3QgTENoYXIqIGNocCA9IG1fZGF0YTg7IGNocCAhPSBlbmQ7IGNo
cCsrKSB7CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoaXNBU0NJSVVwcGVyKCpjaHApKSkKKyAg
ICAgICAgICAgICAgICBub1VwcGVyID0gZmFsc2U7CisgICAgICAgICAgICBvcmVkIHw9ICpjaHA7
CisgICAgICAgIH0KKyAgICAgICAgLy8gTm90aGluZyB0byBkbyBpZiB0aGUgc3RyaW5nIGlzIGFs
bCBBU0NJSSB3aXRoIG5vIHVwcGVyY2FzZS4KKyAgICAgICAgaWYgKG5vVXBwZXIgJiYgIShvcmVk
ICYgfjB4N0YpKQorICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisKKyAgICAgICAgaWYgKG1fbGVu
Z3RoID4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgo
KSkpCisgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICBpbnQzMl90IGxlbmd0aCA9IG1fbGVu
Z3RoOworCisgICAgICAgIExDaGFyKiBkYXRhODsKKyAgICAgICAgUmVmUHRyPFN0cmluZ0ltcGw+
IG5ld0ltcGwgPSBjcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgZGF0YTgpOworCisgICAgICAg
IGlmICghKG9yZWQgJiB+MHg3RikpIHsKKyAgICAgICAgICAgIGZvciAoaW50MzJfdCBpID0gMDsg
aSA8IGxlbmd0aDsgaSsrKQorICAgICAgICAgICAgICAgIGRhdGE4W2ldID0gdG9BU0NJSUxvd2Vy
KG1fZGF0YThbaV0pOworCisgICAgICAgICAgICByZXR1cm4gbmV3SW1wbC5yZWxlYXNlKCk7Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBEbyBhIHNsb3dlciBpbXBsZW1lbnRhdGlvbiBmb3IgY2Fz
ZXMgdGhhdCBpbmNsdWRlIG5vbi1BU0NJSSBMYXRpbi0xIGNoYXJhY3RlcnMuCisgICAgICAgIGZv
ciAoaW50MzJfdCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKQorICAgICAgICAgICAgZGF0YThbaV0g
PSBzdGF0aWNfY2FzdDxMQ2hhcj4oVW5pY29kZTo6dG9Mb3dlcihtX2RhdGE4W2ldKSk7CisKKyAg
ICAgICAgcmV0dXJuIG5ld0ltcGwucmVsZWFzZSgpOworICAgIH0KKworICAgIGNvbnN0IFVDaGFy
ICplbmQgPSBtX2RhdGExNiArIG1fbGVuZ3RoOworICAgIGZvciAoY29uc3QgVUNoYXIqIGNocCA9
IG1fZGF0YTE2OyBjaHAgIT0gZW5kOyBjaHArKykgewogICAgICAgICBpZiAoVU5MSUtFTFkoaXNB
U0NJSVVwcGVyKCpjaHApKSkKICAgICAgICAgICAgIG5vVXBwZXIgPSBmYWxzZTsKICAgICAgICAg
b3JlZCB8PSAqY2hwOwogICAgIH0KLSAgICAKICAgICAvLyBOb3RoaW5nIHRvIGRvIGlmIHRoZSBz
dHJpbmcgaXMgYWxsIEFTQ0lJIHdpdGggbm8gdXBwZXJjYXNlLgogICAgIGlmIChub1VwcGVyICYm
ICEob3JlZCAmIH4weDdGKSkKICAgICAgICAgcmV0dXJuIHRoaXM7CkBAIC0xOTgsMjggKzI5NCwz
MSBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6Omxvd2VyCiAgICAgICAgIENS
QVNIKCk7CiAgICAgaW50MzJfdCBsZW5ndGggPSBtX2xlbmd0aDsKIAotICAgIFVDaGFyKiBkYXRh
OwotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZCht
X2xlbmd0aCwgZGF0YSk7Ci0KICAgICBpZiAoIShvcmVkICYgfjB4N0YpKSB7Ci0gICAgICAgIC8v
IERvIGEgZmFzdGVyIGxvb3AgZm9yIHRoZSBjYXNlIHdoZXJlIGFsbCB0aGUgY2hhcmFjdGVycyBh
cmUgQVNDSUkuCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAg
ICAgICAgICAgIFVDaGFyIGMgPSBtX2RhdGFbaV07Ci0gICAgICAgICAgICBkYXRhW2ldID0gdG9B
U0NJSUxvd2VyKGMpOworICAgICAgICBVQ2hhciogZGF0YTE2OworICAgICAgICBSZWZQdHI8U3Ry
aW5nSW1wbD4gbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQobV9sZW5ndGgsIGRhdGExNik7
CisgICAgICAgIAorICAgICAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykg
eworICAgICAgICAgICAgVUNoYXIgYyA9IG1fZGF0YTE2W2ldOworICAgICAgICAgICAgZGF0YTE2
W2ldID0gdG9BU0NJSUxvd2VyKGMpOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBuZXdJbXBs
OworICAgICAgICByZXR1cm4gbmV3SW1wbC5yZWxlYXNlKCk7CiAgICAgfQogICAgIAogICAgIC8v
IERvIGEgc2xvd2VyIGltcGxlbWVudGF0aW9uIGZvciBjYXNlcyB0aGF0IGluY2x1ZGUgbm9uLUFT
Q0lJIGNoYXJhY3RlcnMuCisgICAgVUNoYXIqIGRhdGExNjsKKyAgICBSZWZQdHI8U3RyaW5nSW1w
bD4gbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQobV9sZW5ndGgsIGRhdGExNik7CisKICAg
ICBib29sIGVycm9yOwotICAgIGludDMyX3QgcmVhbExlbmd0aCA9IFVuaWNvZGU6OnRvTG93ZXIo
ZGF0YSwgbGVuZ3RoLCBtX2RhdGEsIG1fbGVuZ3RoLCAmZXJyb3IpOworICAgIGludDMyX3QgcmVh
bExlbmd0aCA9IFVuaWNvZGU6OnRvTG93ZXIoZGF0YTE2LCBsZW5ndGgsIG1fZGF0YTE2LCBtX2xl
bmd0aCwgJmVycm9yKTsKICAgICBpZiAoIWVycm9yICYmIHJlYWxMZW5ndGggPT0gbGVuZ3RoKQot
ICAgICAgICByZXR1cm4gbmV3SW1wbDsKLSAgICBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXpl
ZChyZWFsTGVuZ3RoLCBkYXRhKTsKLSAgICBVbmljb2RlOjp0b0xvd2VyKGRhdGEsIHJlYWxMZW5n
dGgsIG1fZGF0YSwgbV9sZW5ndGgsICZlcnJvcik7CisgICAgICAgIHJldHVybiBuZXdJbXBsLnJl
bGVhc2UoKTsKKworICAgIG5ld0ltcGwgPSBjcmVhdGVVbmluaXRpYWxpemVkKHJlYWxMZW5ndGgs
IGRhdGExNik7CisgICAgVW5pY29kZTo6dG9Mb3dlcihkYXRhMTYsIHJlYWxMZW5ndGgsIG1fZGF0
YTE2LCBtX2xlbmd0aCwgJmVycm9yKTsKICAgICBpZiAoZXJyb3IpCiAgICAgICAgIHJldHVybiB0
aGlzOwotICAgIHJldHVybiBuZXdJbXBsOworICAgIHJldHVybiBuZXdJbXBsLnJlbGVhc2UoKTsK
IH0KIAogUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjp1cHBlcigpCkBAIC0yMjcs
MzAgKzMyNiw1MyBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnVwcGVyCiAg
ICAgLy8gVGhpcyBmdW5jdGlvbiBjb3VsZCBiZSBvcHRpbWl6ZWQgZm9yIG5vLW9wIGNhc2VzIHRo
ZSB3YXkgbG93ZXIoKSBpcywKICAgICAvLyBidXQgaW4gZW1waXJpY2FsIHRlc3RpbmcsIGZldyBh
Y3R1YWwgY2FsbHMgdG8gdXBwZXIoKSBhcmUgbm8tb3BzLCBzbwogICAgIC8vIGl0IHdvdWxkbid0
IGJlIHdvcnRoIHRoZSBleHRyYSB0aW1lIGZvciBwcmUtc2Nhbm5pbmcuCi0gICAgVUNoYXIqIGRh
dGE7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IG5ld0ltcGwgPSBjcmVhdGVVbmluaXRpYWxpemVk
KG1fbGVuZ3RoLCBkYXRhKTsKIAogICAgIGlmIChtX2xlbmd0aCA+IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCkpKQogICAgICAgICBDUkFTSCgpOwog
ICAgIGludDMyX3QgbGVuZ3RoID0gbV9sZW5ndGg7CiAKKyAgICBpZiAoaXM4Qml0KCkpIHsKKyAg
ICAgICAgTENoYXIqIGRhdGE4OworICAgICAgICBSZWZQdHI8U3RyaW5nSW1wbD4gbmV3SW1wbCA9
IGNyZWF0ZVVuaW5pdGlhbGl6ZWQobV9sZW5ndGgsIGRhdGE4KTsKKyAgICAgICAgCisgICAgICAg
IC8vIERvIGEgZmFzdGVyIGxvb3AgZm9yIHRoZSBjYXNlIHdoZXJlIGFsbCB0aGUgY2hhcmFjdGVy
cyBhcmUgQVNDSUkuCisgICAgICAgIGNoYXIgb3JlZCA9IDA7CisgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGNoYXIgYyA9IG1fZGF0YThbaV07
CisgICAgICAgICAgICBvcmVkIHw9IGM7CisgICAgICAgICAgICBkYXRhOFtpXSA9IHRvQVNDSUlV
cHBlcihjKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIShvcmVkICYgfjB4N0YpKQorICAgICAg
ICAgICAgcmV0dXJuIG5ld0ltcGwucmVsZWFzZSgpOworCisgICAgICAgIC8vIERvIGEgc2xvd2Vy
IGltcGxlbWVudGF0aW9uIGZvciBjYXNlcyB0aGF0IGluY2x1ZGUgbm9uLUFTQ0lJIExhdGluLTEg
Y2hhcmFjdGVycy4KKyAgICAgICAgZm9yIChpbnQzMl90IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKysp
CisgICAgICAgICAgICBkYXRhOFtpXSA9IHN0YXRpY19jYXN0PExDaGFyPihVbmljb2RlOjp0b1Vw
cGVyKG1fZGF0YThbaV0pKTsKKworICAgICAgICByZXR1cm4gbmV3SW1wbC5yZWxlYXNlKCk7Cisg
ICAgfQorCisgICAgVUNoYXIqIGRhdGExNjsKKyAgICBSZWZQdHI8U3RyaW5nSW1wbD4gbmV3SW1w
bCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQobV9sZW5ndGgsIGRhdGExNik7CisgICAgCiAgICAgLy8g
RG8gYSBmYXN0ZXIgbG9vcCBmb3IgdGhlIGNhc2Ugd2hlcmUgYWxsIHRoZSBjaGFyYWN0ZXJzIGFy
ZSBBU0NJSS4KICAgICBVQ2hhciBvcmVkID0gMDsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxl
bmd0aDsgaSsrKSB7Ci0gICAgICAgIFVDaGFyIGMgPSBtX2RhdGFbaV07CisgICAgICAgIFVDaGFy
IGMgPSBtX2RhdGExNltpXTsKICAgICAgICAgb3JlZCB8PSBjOwotICAgICAgICBkYXRhW2ldID0g
dG9BU0NJSVVwcGVyKGMpOworICAgICAgICBkYXRhMTZbaV0gPSB0b0FTQ0lJVXBwZXIoYyk7CiAg
ICAgfQogICAgIGlmICghKG9yZWQgJiB+MHg3RikpCiAgICAgICAgIHJldHVybiBuZXdJbXBsLnJl
bGVhc2UoKTsKIAogICAgIC8vIERvIGEgc2xvd2VyIGltcGxlbWVudGF0aW9uIGZvciBjYXNlcyB0
aGF0IGluY2x1ZGUgbm9uLUFTQ0lJIGNoYXJhY3RlcnMuCiAgICAgYm9vbCBlcnJvcjsKLSAgICBp
bnQzMl90IHJlYWxMZW5ndGggPSBVbmljb2RlOjp0b1VwcGVyKGRhdGEsIGxlbmd0aCwgbV9kYXRh
LCBtX2xlbmd0aCwgJmVycm9yKTsKKyAgICBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZCht
X2xlbmd0aCwgZGF0YTE2KTsKKyAgICBpbnQzMl90IHJlYWxMZW5ndGggPSBVbmljb2RlOjp0b1Vw
cGVyKGRhdGExNiwgbGVuZ3RoLCBtX2RhdGExNiwgbV9sZW5ndGgsICZlcnJvcik7CiAgICAgaWYg
KCFlcnJvciAmJiByZWFsTGVuZ3RoID09IGxlbmd0aCkKICAgICAgICAgcmV0dXJuIG5ld0ltcGw7
Ci0gICAgbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQocmVhbExlbmd0aCwgZGF0YSk7Ci0g
ICAgVW5pY29kZTo6dG9VcHBlcihkYXRhLCByZWFsTGVuZ3RoLCBtX2RhdGEsIG1fbGVuZ3RoLCAm
ZXJyb3IpOworICAgIG5ld0ltcGwgPSBjcmVhdGVVbmluaXRpYWxpemVkKHJlYWxMZW5ndGgsIGRh
dGExNik7CisgICAgVW5pY29kZTo6dG9VcHBlcihkYXRhMTYsIHJlYWxMZW5ndGgsIG1fZGF0YTE2
LCBtX2xlbmd0aCwgJmVycm9yKTsKICAgICBpZiAoZXJyb3IpCiAgICAgICAgIHJldHVybiB0aGlz
OwogICAgIHJldHVybiBuZXdJbXBsLnJlbGVhc2UoKTsKQEAgLTI2MSw2ICszODMsMTMgQEAgUGFz
c1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpmaWxsKAogICAgIGlmICghbV9sZW5ndGgp
CiAgICAgICAgIHJldHVybiB0aGlzOwogCisgICAgaWYgKCEoY2hhcmFjdGVyICYgfjB4N0YpKSB7
CisgICAgICAgIExDaGFyKiBkYXRhOworICAgICAgICBSZWZQdHI8U3RyaW5nSW1wbD4gbmV3SW1w
bCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQobV9sZW5ndGgsIGRhdGEpOworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV9sZW5ndGg7ICsraSkKKyAgICAgICAgICAgIGRhdGFbaV0gPSBj
aGFyYWN0ZXI7CisgICAgICAgIHJldHVybiBuZXdJbXBsLnJlbGVhc2UoKTsKKyAgICB9CiAgICAg
VUNoYXIqIGRhdGE7CiAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IG5ld0ltcGwgPSBjcmVhdGVVbmlu
aXRpYWxpemVkKG1fbGVuZ3RoLCBkYXRhKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV9sZW5ndGg7ICsraSkKQEAgLTI3MCwxNyArMzk5LDM2IEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1w
bD4gU3RyaW5nSW1wbDo6ZmlsbCgKIAogUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBs
Ojpmb2xkQ2FzZSgpCiB7Ci0gICAgVUNoYXIqIGRhdGE7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+
IG5ld0ltcGwgPSBjcmVhdGVVbmluaXRpYWxpemVkKG1fbGVuZ3RoLCBkYXRhKTsKLQogICAgIGlm
IChtX2xlbmd0aCA+IHN0YXRpY19jYXN0PHVuc2lnbmVkPihudW1lcmljX2xpbWl0czxpbnQzMl90
Pjo6bWF4KCkpKQogICAgICAgICBDUkFTSCgpOwogICAgIGludDMyX3QgbGVuZ3RoID0gbV9sZW5n
dGg7CiAKKyAgICBpZiAoaXM4Qml0KCkpIHsKKyAgICAgICAgLy8gRG8gYSBmYXN0ZXIgbG9vcCBm
b3IgdGhlIGNhc2Ugd2hlcmUgYWxsIHRoZSBjaGFyYWN0ZXJzIGFyZSBBU0NJSS4KKyAgICAgICAg
TENoYXIqIGRhdGE7CisgICAgICAgIFJlZlB0ciA8U3RyaW5nSW1wbD5uZXdJbXBsID0gY3JlYXRl
VW5pbml0aWFsaXplZChtX2xlbmd0aCwgZGF0YSk7CisgICAgICAgIExDaGFyIG9yZWQgPSAwOwor
CisgICAgICAgIGZvciAoaW50MzJfdCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAg
ICAgICBMQ2hhciBjID0gbV9kYXRhOFtpXTsKKyAgICAgICAgICAgIGRhdGFbaV0gPSB0b0FTQ0lJ
TG93ZXIoYyk7CisgICAgICAgICAgICBvcmVkIHw9IGM7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoIShvcmVkICYgfjB4N0YpKQorICAgICAgICAgICAgcmV0dXJuIG5ld0ltcGwucmVsZWFzZSgp
OworCisgICAgICAgIC8vIERvIGEgc2xvd2VyIGltcGxlbWVudGF0aW9uIGZvciBjYXNlcyB0aGF0
IGluY2x1ZGUgbm9uLUFTQ0lJIExhdGluLTEgY2hhcmFjdGVycy4KKyAgICAgICAgZm9yIChpbnQz
Ml90IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspCisgICAgICAgICAgICBkYXRhW2ldID0gc3RhdGlj
X2Nhc3Q8TENoYXI+KFVuaWNvZGU6OnRvTG93ZXIobV9kYXRhOFtpXSkpOworICAgIH0KKwogICAg
IC8vIERvIGEgZmFzdGVyIGxvb3AgZm9yIHRoZSBjYXNlIHdoZXJlIGFsbCB0aGUgY2hhcmFjdGVy
cyBhcmUgQVNDSUkuCisgICAgVUNoYXIqIGRhdGE7CisgICAgUmVmUHRyPFN0cmluZ0ltcGw+IG5l
d0ltcGwgPSBjcmVhdGVVbmluaXRpYWxpemVkKG1fbGVuZ3RoLCBkYXRhKTsKICAgICBVQ2hhciBv
cmVkID0gMDsKICAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAg
ICAgICBVQ2hhciBjID0gbV9kYXRhW2ldOworICAgICAgICBVQ2hhciBjID0gbV9kYXRhMTZbaV07
CiAgICAgICAgIG9yZWQgfD0gYzsKICAgICAgICAgZGF0YVtpXSA9IHRvQVNDSUlMb3dlcihjKTsK
ICAgICB9CkBAIC0yODksMTEgKzQzNywxMSBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmlu
Z0ltcGw6OmZvbGRDCiAKICAgICAvLyBEbyBhIHNsb3dlciBpbXBsZW1lbnRhdGlvbiBmb3IgY2Fz
ZXMgdGhhdCBpbmNsdWRlIG5vbi1BU0NJSSBjaGFyYWN0ZXJzLgogICAgIGJvb2wgZXJyb3I7Ci0g
ICAgaW50MzJfdCByZWFsTGVuZ3RoID0gVW5pY29kZTo6Zm9sZENhc2UoZGF0YSwgbGVuZ3RoLCBt
X2RhdGEsIG1fbGVuZ3RoLCAmZXJyb3IpOworICAgIGludDMyX3QgcmVhbExlbmd0aCA9IFVuaWNv
ZGU6OmZvbGRDYXNlKGRhdGEsIGxlbmd0aCwgbV9kYXRhMTYsIG1fbGVuZ3RoLCAmZXJyb3IpOwog
ICAgIGlmICghZXJyb3IgJiYgcmVhbExlbmd0aCA9PSBsZW5ndGgpCiAgICAgICAgIHJldHVybiBu
ZXdJbXBsLnJlbGVhc2UoKTsKICAgICBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChyZWFs
TGVuZ3RoLCBkYXRhKTsKLSAgICBVbmljb2RlOjpmb2xkQ2FzZShkYXRhLCByZWFsTGVuZ3RoLCBt
X2RhdGEsIG1fbGVuZ3RoLCAmZXJyb3IpOworICAgIFVuaWNvZGU6OmZvbGRDYXNlKGRhdGEsIHJl
YWxMZW5ndGgsIG1fZGF0YTE2LCBtX2xlbmd0aCwgJmVycm9yKTsKICAgICBpZiAoZXJyb3IpCiAg
ICAgICAgIHJldHVybiB0aGlzOwogICAgIHJldHVybiBuZXdJbXBsLnJlbGVhc2UoKTsKQEAgLTMw
OSw3ICs0NTcsNyBAQCBpbmxpbmUgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsCiAg
ICAgdW5zaWduZWQgZW5kID0gbV9sZW5ndGggLSAxOwogICAgIAogICAgIC8vIHNraXAgd2hpdGUg
c3BhY2UgZnJvbSBzdGFydAotICAgIHdoaWxlIChzdGFydCA8PSBlbmQgJiYgcHJlZGljYXRlKG1f
ZGF0YVtzdGFydF0pKQorICAgIHdoaWxlIChzdGFydCA8PSBlbmQgJiYgcHJlZGljYXRlKGlzOEJp
dCgpID8gbV9kYXRhOFtzdGFydF0gOiBtX2RhdGExNltzdGFydF0pKQogICAgICAgICBzdGFydCsr
OwogICAgIAogICAgIC8vIG9ubHkgd2hpdGUgc3BhY2UKQEAgLTMxNywxMiArNDY1LDE0IEBAIGlu
bGluZSBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGwKICAgICAgICAgcmV0dXJuIGVt
cHR5KCk7CiAKICAgICAvLyBza2lwIHdoaXRlIHNwYWNlIGZyb20gZW5kCi0gICAgd2hpbGUgKGVu
ZCAmJiBwcmVkaWNhdGUobV9kYXRhW2VuZF0pKQorICAgIHdoaWxlIChlbmQgJiYgcHJlZGljYXRl
KGlzOEJpdCgpID8gbV9kYXRhOFtlbmRdIDogbV9kYXRhMTZbZW5kXSkpCiAgICAgICAgIGVuZC0t
OwogCiAgICAgaWYgKCFzdGFydCAmJiBlbmQgPT0gbV9sZW5ndGggLSAxKQogICAgICAgICByZXR1
cm4gdGhpczsKLSAgICByZXR1cm4gY3JlYXRlKG1fZGF0YSArIHN0YXJ0LCBlbmQgKyAxIC0gc3Rh
cnQpOworICAgIGlmIChpczhCaXQoKSkKKyAgICAgICAgcmV0dXJuIGNyZWF0ZShtX2RhdGE4ICsg
c3RhcnQsIGVuZCArIDEgLSBzdGFydCk7CisgICAgcmV0dXJuIGNyZWF0ZShtX2RhdGExNiArIHN0
YXJ0LCBlbmQgKyAxIC0gc3RhcnQpOwogfQogCiBjbGFzcyBVQ2hhclByZWRpY2F0ZSB7CkBAIC0z
NTYsOSArNTA2LDEwIEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6c3RyaXAK
ICAgICByZXR1cm4gc3RyaXBNYXRjaGVkQ2hhcmFjdGVycyhVQ2hhclByZWRpY2F0ZShpc1doaXRl
U3BhY2UpKTsKIH0KIAorLy8gRklYTUU6IEFkZCA4LWJpdCBwYXRoLiBMaWtlbHkgcmVxdWlyZXMg
dGVtcGxhdGl6ZWQgU3RyaW5nQnVmZmVyIGNsYXNzCiBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0
cmluZ0ltcGw6OnJlbW92ZUNoYXJhY3RlcnMoQ2hhcmFjdGVyTWF0Y2hGdW5jdGlvblB0ciBmaW5k
TWF0Y2gpCiB7Ci0gICAgY29uc3QgVUNoYXIqIGZyb20gPSBtX2RhdGE7CisgICAgY29uc3QgVUNo
YXIqIGZyb20gPSBjaGFyYWN0ZXJzKCk7CiAgICAgY29uc3QgVUNoYXIqIGZyb21lbmQgPSBmcm9t
ICsgbV9sZW5ndGg7CiAKICAgICAvLyBBc3N1bWUgdGhlIGNvbW1vbiBjYXNlIHdpbGwgbm90IHJl
bW92ZSBhbnkgY2hhcmFjdGVycwpAQCAtMzY5LDEwICs1MjAsMTAgQEAgUGFzc1JlZlB0cjxTdHJp
bmdJbXBsPiBTdHJpbmdJbXBsOjpyZW1vdgogCiAgICAgU3RyaW5nQnVmZmVyIGRhdGEobV9sZW5n
dGgpOwogICAgIFVDaGFyKiB0byA9IGRhdGEuY2hhcmFjdGVycygpOwotICAgIHVuc2lnbmVkIG91
dGMgPSBmcm9tIC0gbV9kYXRhOworICAgIHVuc2lnbmVkIG91dGMgPSBmcm9tIC0gY2hhcmFjdGVy
czE2KCk7CiAKICAgICBpZiAob3V0YykKLSAgICAgICAgbWVtY3B5KHRvLCBtX2RhdGEsIG91dGMg
KiBzaXplb2YoVUNoYXIpKTsKKyAgICAgICAgbWVtY3B5KHRvLCBjaGFyYWN0ZXJzMTYoKSwgb3V0
YyAqIHNpemVvZihVQ2hhcikpOwogCiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgd2hpbGUg
KGZyb20gIT0gZnJvbWVuZCAmJiBmaW5kTWF0Y2goKmZyb20pKQpAQCAtMzg4LDEyICs1MzksMTMg
QEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpyZW1vdgogICAgIHJldHVybiBh
ZG9wdChkYXRhKTsKIH0KIAorLy8gRklYTUU6IEFkZCA4LWJpdCBwYXRoLiBMaWtlbHkgcmVxdWly
ZXMgdGVtcGxhdGl6ZWQgU3RyaW5nQnVmZmVyIGNsYXNzCiB0ZW1wbGF0ZSA8Y2xhc3MgVUNoYXJQ
cmVkaWNhdGU+CiBpbmxpbmUgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpzaW1w
bGlmeU1hdGNoZWRDaGFyYWN0ZXJzVG9TcGFjZShVQ2hhclByZWRpY2F0ZSBwcmVkaWNhdGUpCiB7
CiAgICAgU3RyaW5nQnVmZmVyIGRhdGEobV9sZW5ndGgpOwogCi0gICAgY29uc3QgVUNoYXIqIGZy
b20gPSBtX2RhdGE7CisgICAgY29uc3QgVUNoYXIqIGZyb20gPSBjaGFyYWN0ZXJzMTYoKTsKICAg
ICBjb25zdCBVQ2hhciogZnJvbWVuZCA9IGZyb20gKyBtX2xlbmd0aDsKICAgICBpbnQgb3V0YyA9
IDA7CiAgICAgYm9vbCBjaGFuZ2VkVG9TcGFjZSA9IGZhbHNlOwpAQCAtNDM3LDY1ICs1ODksNjcg
QEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpzaW1wbAogCiBpbnQgU3RyaW5n
SW1wbDo6dG9JbnRTdHJpY3QoYm9vbCogb2ssIGludCBiYXNlKQogewotICAgIHJldHVybiBjaGFy
YWN0ZXJzVG9JbnRTdHJpY3QobV9kYXRhLCBtX2xlbmd0aCwgb2ssIGJhc2UpOworICAgIHJldHVy
biBjaGFyYWN0ZXJzVG9JbnRTdHJpY3QoY2hhcmFjdGVyczE2KCksIG1fbGVuZ3RoLCBvaywgYmFz
ZSk7CiB9CiAKIHVuc2lnbmVkIFN0cmluZ0ltcGw6OnRvVUludFN0cmljdChib29sKiBvaywgaW50
IGJhc2UpCiB7Ci0gICAgcmV0dXJuIGNoYXJhY3RlcnNUb1VJbnRTdHJpY3QobV9kYXRhLCBtX2xl
bmd0aCwgb2ssIGJhc2UpOworICAgIHJldHVybiBjaGFyYWN0ZXJzVG9VSW50U3RyaWN0KGNoYXJh
Y3RlcnMxNigpLCBtX2xlbmd0aCwgb2ssIGJhc2UpOwogfQogCiBpbnQ2NF90IFN0cmluZ0ltcGw6
OnRvSW50NjRTdHJpY3QoYm9vbCogb2ssIGludCBiYXNlKQogewotICAgIHJldHVybiBjaGFyYWN0
ZXJzVG9JbnQ2NFN0cmljdChtX2RhdGEsIG1fbGVuZ3RoLCBvaywgYmFzZSk7CisgICAgcmV0dXJu
IGNoYXJhY3RlcnNUb0ludDY0U3RyaWN0KGNoYXJhY3RlcnMxNigpLCBtX2xlbmd0aCwgb2ssIGJh
c2UpOworCiB9CiAKIHVpbnQ2NF90IFN0cmluZ0ltcGw6OnRvVUludDY0U3RyaWN0KGJvb2wqIG9r
LCBpbnQgYmFzZSkKIHsKLSAgICByZXR1cm4gY2hhcmFjdGVyc1RvVUludDY0U3RyaWN0KG1fZGF0
YSwgbV9sZW5ndGgsIG9rLCBiYXNlKTsKKyAgICByZXR1cm4gY2hhcmFjdGVyc1RvVUludDY0U3Ry
aWN0KGNoYXJhY3RlcnMxNigpLCBtX2xlbmd0aCwgb2ssIGJhc2UpOwogfQogCiBpbnRwdHJfdCBT
dHJpbmdJbXBsOjp0b0ludFB0clN0cmljdChib29sKiBvaywgaW50IGJhc2UpCiB7Ci0gICAgcmV0
dXJuIGNoYXJhY3RlcnNUb0ludFB0clN0cmljdChtX2RhdGEsIG1fbGVuZ3RoLCBvaywgYmFzZSk7
CisgICAgcmV0dXJuIGNoYXJhY3RlcnNUb0ludFB0clN0cmljdChjaGFyYWN0ZXJzMTYoKSwgbV9s
ZW5ndGgsIG9rLCBiYXNlKTsKIH0KIAogaW50IFN0cmluZ0ltcGw6OnRvSW50KGJvb2wqIG9rKQog
ewotICAgIHJldHVybiBjaGFyYWN0ZXJzVG9JbnQobV9kYXRhLCBtX2xlbmd0aCwgb2spOworICAg
IHJldHVybiBjaGFyYWN0ZXJzVG9JbnQoY2hhcmFjdGVyczE2KCksIG1fbGVuZ3RoLCBvayk7CiB9
CiAKIHVuc2lnbmVkIFN0cmluZ0ltcGw6OnRvVUludChib29sKiBvaykKIHsKLSAgICByZXR1cm4g
Y2hhcmFjdGVyc1RvVUludChtX2RhdGEsIG1fbGVuZ3RoLCBvayk7CisgICAgcmV0dXJuIGNoYXJh
Y3RlcnNUb1VJbnQoY2hhcmFjdGVyczE2KCksIG1fbGVuZ3RoLCBvayk7CiB9CiAKIGludDY0X3Qg
U3RyaW5nSW1wbDo6dG9JbnQ2NChib29sKiBvaykKIHsKLSAgICByZXR1cm4gY2hhcmFjdGVyc1Rv
SW50NjQobV9kYXRhLCBtX2xlbmd0aCwgb2spOworICAgIHJldHVybiBjaGFyYWN0ZXJzVG9JbnQ2
NChjaGFyYWN0ZXJzMTYoKSwgbV9sZW5ndGgsIG9rKTsKIH0KIAogdWludDY0X3QgU3RyaW5nSW1w
bDo6dG9VSW50NjQoYm9vbCogb2spCiB7Ci0gICAgcmV0dXJuIGNoYXJhY3RlcnNUb1VJbnQ2NCht
X2RhdGEsIG1fbGVuZ3RoLCBvayk7CisgICAgcmV0dXJuIGNoYXJhY3RlcnNUb1VJbnQ2NChjaGFy
YWN0ZXJzMTYoKSwgbV9sZW5ndGgsIG9rKTsKIH0KIAogaW50cHRyX3QgU3RyaW5nSW1wbDo6dG9J
bnRQdHIoYm9vbCogb2spCiB7Ci0gICAgcmV0dXJuIGNoYXJhY3RlcnNUb0ludFB0cihtX2RhdGEs
IG1fbGVuZ3RoLCBvayk7CisgICAgcmV0dXJuIGNoYXJhY3RlcnNUb0ludFB0cihjaGFyYWN0ZXJz
MTYoKSwgbV9sZW5ndGgsIG9rKTsKKwogfQogCiBkb3VibGUgU3RyaW5nSW1wbDo6dG9Eb3VibGUo
Ym9vbCogb2ssIGJvb2wqIGRpZFJlYWROdW1iZXIpCiB7Ci0gICAgcmV0dXJuIGNoYXJhY3RlcnNU
b0RvdWJsZShtX2RhdGEsIG1fbGVuZ3RoLCBvaywgZGlkUmVhZE51bWJlcik7CisgICAgcmV0dXJu
IGNoYXJhY3RlcnNUb0RvdWJsZShjaGFyYWN0ZXJzMTYoKSwgbV9sZW5ndGgsIG9rLCBkaWRSZWFk
TnVtYmVyKTsKIH0KIAogZmxvYXQgU3RyaW5nSW1wbDo6dG9GbG9hdChib29sKiBvaywgYm9vbCog
ZGlkUmVhZE51bWJlcikKIHsKLSAgICByZXR1cm4gY2hhcmFjdGVyc1RvRmxvYXQobV9kYXRhLCBt
X2xlbmd0aCwgb2ssIGRpZFJlYWROdW1iZXIpOworICAgIHJldHVybiBjaGFyYWN0ZXJzVG9GbG9h
dChjaGFyYWN0ZXJzMTYoKSwgbV9sZW5ndGgsIG9rLCBkaWRSZWFkTnVtYmVyKTsKIH0KIAotc3Rh
dGljIGJvb2wgZXF1YWwoY29uc3QgVUNoYXIqIGEsIGNvbnN0IGNoYXIqIGIsIGludCBsZW5ndGgp
CitzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBVQ2hhciogYSwgY29uc3QgTENoYXIqIGIsIGludCBs
ZW5ndGgpCiB7CiAgICAgQVNTRVJUKGxlbmd0aCA+PSAwKTsKICAgICB3aGlsZSAobGVuZ3RoLS0p
IHsKQEAgLTUwNiw3ICs2NjAsNyBAQCBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBVQ2hhciogYSwg
Y29uc3QgCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgZXF1YWxJZ25vcmluZ0Nhc2UoY29u
c3QgVUNoYXIqIGEsIGNvbnN0IGNoYXIqIGIsIHVuc2lnbmVkIGxlbmd0aCkKK2Jvb2wgZXF1YWxJ
Z25vcmluZ0Nhc2UoY29uc3QgVUNoYXIqIGEsIGNvbnN0IExDaGFyKiBiLCB1bnNpZ25lZCBsZW5n
dGgpCiB7CiAgICAgd2hpbGUgKGxlbmd0aC0tKSB7CiAgICAgICAgIHVuc2lnbmVkIGNoYXIgYmMg
PSAqYisrOwpAQCAtNTQ3LDIwICs3MDEsMjAgQEAgaW50IGNvZGVQb2ludENvbXBhcmUoY29uc3Qg
U3RyaW5nSW1wbCogcwogCiBzaXplX3QgU3RyaW5nSW1wbDo6ZmluZChVQ2hhciBjLCB1bnNpZ25l
ZCBzdGFydCkKIHsKLSAgICByZXR1cm4gV1RGOjpmaW5kKG1fZGF0YSwgbV9sZW5ndGgsIGMsIHN0
YXJ0KTsKKyAgICByZXR1cm4gV1RGOjpmaW5kKGNoYXJhY3RlcnMxNigpLCBtX2xlbmd0aCwgYywg
c3RhcnQpOwogfQogCiBzaXplX3QgU3RyaW5nSW1wbDo6ZmluZChDaGFyYWN0ZXJNYXRjaEZ1bmN0
aW9uUHRyIG1hdGNoRnVuY3Rpb24sIHVuc2lnbmVkIHN0YXJ0KQogewotICAgIHJldHVybiBXVEY6
OmZpbmQobV9kYXRhLCBtX2xlbmd0aCwgbWF0Y2hGdW5jdGlvbiwgc3RhcnQpOworICAgIHJldHVy
biBXVEY6OmZpbmQoY2hhcmFjdGVyczE2KCksIG1fbGVuZ3RoLCBtYXRjaEZ1bmN0aW9uLCBzdGFy
dCk7CiB9CiAKLXNpemVfdCBTdHJpbmdJbXBsOjpmaW5kKGNvbnN0IGNoYXIqIG1hdGNoU3RyaW5n
LCB1bnNpZ25lZCBpbmRleCkKK3NpemVfdCBTdHJpbmdJbXBsOjpmaW5kKGNvbnN0IExDaGFyKiBt
YXRjaFN0cmluZywgdW5zaWduZWQgaW5kZXgpCiB7CiAgICAgLy8gQ2hlY2sgZm9yIG51bGwgb3Ig
ZW1wdHkgc3RyaW5nIHRvIG1hdGNoIGFnYWluc3QKICAgICBpZiAoIW1hdGNoU3RyaW5nKQogICAg
ICAgICByZXR1cm4gbm90Rm91bmQ7Ci0gICAgc2l6ZV90IG1hdGNoU3RyaW5nTGVuZ3RoID0gc3Ry
bGVuKG1hdGNoU3RyaW5nKTsKKyAgICBzaXplX3QgbWF0Y2hTdHJpbmdMZW5ndGggPSBzdHJsZW4o
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4obWF0Y2hTdHJpbmcpKTsKICAgICBpZiAobWF0
Y2hTdHJpbmdMZW5ndGggPiBudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQogICAgICAg
ICBDUkFTSCgpOwogICAgIHVuc2lnbmVkIG1hdGNoTGVuZ3RoID0gbWF0Y2hTdHJpbmdMZW5ndGg7
CkBAIC01NjksNyArNzIzLDcgQEAgc2l6ZV90IFN0cmluZ0ltcGw6OmZpbmQoY29uc3QgY2hhciog
bWF0YwogCiAgICAgLy8gT3B0aW1pemF0aW9uIDE6IGZhc3QgY2FzZSBmb3Igc3RyaW5ncyBvZiBs
ZW5ndGggMS4KICAgICBpZiAobWF0Y2hMZW5ndGggPT0gMSkKLSAgICAgICAgcmV0dXJuIFdURjo6
ZmluZChjaGFyYWN0ZXJzKCksIGxlbmd0aCgpLCAqKGNvbnN0IHVuc2lnbmVkIGNoYXIqKW1hdGNo
U3RyaW5nLCBpbmRleCk7CisgICAgICAgIHJldHVybiBXVEY6OmZpbmQoY2hhcmFjdGVyczE2KCks
IGxlbmd0aCgpLCAqbWF0Y2hTdHJpbmcsIGluZGV4KTsKIAogICAgIC8vIENoZWNrIGluZGV4ICYg
bWF0Y2hMZW5ndGggYXJlIGluIHJhbmdlLgogICAgIGlmIChpbmRleCA+IGxlbmd0aCgpKQpAQCAt
NTgxLDcgKzczNSw2IEBAIHNpemVfdCBTdHJpbmdJbXBsOjpmaW5kKGNvbnN0IGNoYXIqIG1hdGMK
ICAgICB1bnNpZ25lZCBkZWx0YSA9IHNlYXJjaExlbmd0aCAtIG1hdGNoTGVuZ3RoOwogCiAgICAg
Y29uc3QgVUNoYXIqIHNlYXJjaENoYXJhY3RlcnMgPSBjaGFyYWN0ZXJzKCkgKyBpbmRleDsKLSAg
ICBjb25zdCB1bnNpZ25lZCBjaGFyKiBtYXRjaENoYXJhY3RlcnMgPSAoY29uc3QgdW5zaWduZWQg
Y2hhciopbWF0Y2hTdHJpbmc7CiAKICAgICAvLyBPcHRpbWl6YXRpb24gMjoga2VlcCBhIHJ1bm5p
bmcgaGFzaCBvZiB0aGUgc3RyaW5ncywKICAgICAvLyBvbmx5IGNhbGwgbWVtY21wIGlmIHRoZSBo
YXNoZXMgbWF0Y2guCkBAIC01ODksNyArNzQyLDcgQEAgc2l6ZV90IFN0cmluZ0ltcGw6OmZpbmQo
Y29uc3QgY2hhciogbWF0YwogICAgIHVuc2lnbmVkIG1hdGNoSGFzaCA9IDA7CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1hdGNoTGVuZ3RoOyArK2kpIHsKICAgICAgICAgc2VhcmNoSGFz
aCArPSBzZWFyY2hDaGFyYWN0ZXJzW2ldOwotICAgICAgICBtYXRjaEhhc2ggKz0gbWF0Y2hDaGFy
YWN0ZXJzW2ldOworICAgICAgICBtYXRjaEhhc2ggKz0gbWF0Y2hTdHJpbmdbaV07CiAgICAgfQog
CiAgICAgdW5zaWduZWQgaSA9IDA7CkBAIC02MDQsMTIgKzc1NywxMiBAQCBzaXplX3QgU3RyaW5n
SW1wbDo6ZmluZChjb25zdCBjaGFyKiBtYXRjCiAgICAgcmV0dXJuIGluZGV4ICsgaTsKIH0KIAot
c2l6ZV90IFN0cmluZ0ltcGw6OmZpbmRJZ25vcmluZ0Nhc2UoY29uc3QgY2hhciogbWF0Y2hTdHJp
bmcsIHVuc2lnbmVkIGluZGV4KQorc2l6ZV90IFN0cmluZ0ltcGw6OmZpbmRJZ25vcmluZ0Nhc2Uo
Y29uc3QgTENoYXIqIG1hdGNoU3RyaW5nLCB1bnNpZ25lZCBpbmRleCkKIHsKICAgICAvLyBDaGVj
ayBmb3IgbnVsbCBvciBlbXB0eSBzdHJpbmcgdG8gbWF0Y2ggYWdhaW5zdAogICAgIGlmICghbWF0
Y2hTdHJpbmcpCiAgICAgICAgIHJldHVybiBub3RGb3VuZDsKLSAgICBzaXplX3QgbWF0Y2hTdHJp
bmdMZW5ndGggPSBzdHJsZW4obWF0Y2hTdHJpbmcpOworICAgIHNpemVfdCBtYXRjaFN0cmluZ0xl
bmd0aCA9IHN0cmxlbihyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihtYXRjaFN0cmluZykp
OwogICAgIGlmIChtYXRjaFN0cmluZ0xlbmd0aCA+IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6
bWF4KCkpCiAgICAgICAgIENSQVNIKCk7CiAgICAgdW5zaWduZWQgbWF0Y2hMZW5ndGggPSBtYXRj
aFN0cmluZ0xlbmd0aDsKQEAgLTY0OCw3ICs4MDEsNyBAQCBzaXplX3QgU3RyaW5nSW1wbDo6Zmlu
ZChTdHJpbmdJbXBsKiBtYXRjCiAKICAgICAvLyBPcHRpbWl6YXRpb24gMTogZmFzdCBjYXNlIGZv
ciBzdHJpbmdzIG9mIGxlbmd0aCAxLgogICAgIGlmIChtYXRjaExlbmd0aCA9PSAxKQotICAgICAg
ICByZXR1cm4gV1RGOjpmaW5kKGNoYXJhY3RlcnMoKSwgbGVuZ3RoKCksIG1hdGNoU3RyaW5nLT5j
aGFyYWN0ZXJzKClbMF0sIGluZGV4KTsKKyAgICAgICAgcmV0dXJuIFdURjo6ZmluZChjaGFyYWN0
ZXJzMTYoKSwgbGVuZ3RoKCksIG1hdGNoU3RyaW5nLT5jaGFyYWN0ZXJzMTYoKVswXSwgaW5kZXgp
OwogCiAgICAgLy8gQ2hlY2sgaW5kZXggJiBtYXRjaExlbmd0aCBhcmUgaW4gcmFuZ2UuCiAgICAg
aWYgKGluZGV4ID4gbGVuZ3RoKCkpCkBAIC03MTYsNyArODY5LDcgQEAgc2l6ZV90IFN0cmluZ0lt
cGw6OmZpbmRJZ25vcmluZ0Nhc2UoU3RyaQogCiBzaXplX3QgU3RyaW5nSW1wbDo6cmV2ZXJzZUZp
bmQoVUNoYXIgYywgdW5zaWduZWQgaW5kZXgpCiB7Ci0gICAgcmV0dXJuIFdURjo6cmV2ZXJzZUZp
bmQobV9kYXRhLCBtX2xlbmd0aCwgYywgaW5kZXgpOworICAgIHJldHVybiBXVEY6OnJldmVyc2VG
aW5kKGNoYXJhY3RlcnMxNigpLCBtX2xlbmd0aCwgYywgaW5kZXgpOwogfQogCiBzaXplX3QgU3Ry
aW5nSW1wbDo6cmV2ZXJzZUZpbmQoU3RyaW5nSW1wbCogbWF0Y2hTdHJpbmcsIHVuc2lnbmVkIGlu
ZGV4KQpAQCAtNzMwLDcgKzg4Myw3IEBAIHNpemVfdCBTdHJpbmdJbXBsOjpyZXZlcnNlRmluZChT
dHJpbmdJbXAKIAogICAgIC8vIE9wdGltaXphdGlvbiAxOiBmYXN0IGNhc2UgZm9yIHN0cmluZ3Mg
b2YgbGVuZ3RoIDEuCiAgICAgaWYgKG1hdGNoTGVuZ3RoID09IDEpCi0gICAgICAgIHJldHVybiBX
VEY6OnJldmVyc2VGaW5kKGNoYXJhY3RlcnMoKSwgbGVuZ3RoKCksIG1hdGNoU3RyaW5nLT5jaGFy
YWN0ZXJzKClbMF0sIGluZGV4KTsKKyAgICAgICAgcmV0dXJuIFdURjo6cmV2ZXJzZUZpbmQoY2hh
cmFjdGVyczE2KCksIGxlbmd0aCgpLCBtYXRjaFN0cmluZy0+Y2hhcmFjdGVycygpWzBdLCBpbmRl
eCk7CiAKICAgICAvLyBDaGVjayBpbmRleCAmIG1hdGNoTGVuZ3RoIGFyZSBpbiByYW5nZS4KICAg
ICBpZiAobWF0Y2hMZW5ndGggPiBsZW5ndGgoKSkKQEAgLTgwMywxNyArOTU2LDU1IEBAIFBhc3NS
ZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6cmVwbGEKICAgICBpZiAob2xkQyA9PSBuZXdD
KQogICAgICAgICByZXR1cm4gdGhpczsKICAgICB1bnNpZ25lZCBpOwotICAgIGZvciAoaSA9IDA7
IGkgIT0gbV9sZW5ndGg7ICsraSkKLSAgICAgICAgaWYgKG1fZGF0YVtpXSA9PSBvbGRDKQorICAg
IGZvciAoaSA9IDA7IGkgIT0gbV9sZW5ndGg7ICsraSkgeworICAgICAgICBVQ2hhciBjID0gaXM4
Qml0KCkgPyBtX2RhdGE4W2ldIDogbV9kYXRhMTZbaV07CisgICAgICAgIGlmIChjID09IG9sZEMp
CiAgICAgICAgICAgICBicmVhazsKKyAgICB9CiAgICAgaWYgKGkgPT0gbV9sZW5ndGgpCiAgICAg
ICAgIHJldHVybiB0aGlzOwogCisgICAgaWYgKGlzOEJpdCgpKSB7CisgICAgICAgIGlmIChvbGRD
ID4gMHhmZikKKyAgICAgICAgICAgIC8vIExvb2tpbmcgZm9yIGEgMTYgYml0IGNoYXIgaW4gYW4g
OCBiaXQgc3RyaW5nLCB3ZSdyZSBkb25lLgorICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisKKyAg
ICAgICAgaWYgKG5ld0MgPD0gMHhmZikgeworICAgICAgICAgICAgTENoYXIqIGRhdGE7CisgICAg
ICAgICAgICBMQ2hhciBvbGRDaGFyID0gc3RhdGljX2Nhc3Q8TENoYXI+KG9sZEMpOworICAgICAg
ICAgICAgTENoYXIgbmV3Q2hhciA9IHN0YXRpY19jYXN0PExDaGFyPihuZXdDKTsKKworICAgICAg
ICAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IG5ld0ltcGwgPSBjcmVhdGVVbmluaXRpYWxpemVkKG1f
bGVuZ3RoLCBkYXRhKTsKKworICAgICAgICAgICAgZm9yIChpID0gMDsgaSAhPSBtX2xlbmd0aDsg
KytpKSB7CisgICAgICAgICAgICAgICAgY2hhciBjaCA9IG1fZGF0YThbaV07CisgICAgICAgICAg
ICAgICAgaWYgKGNoID09IG9sZENoYXIpCisgICAgICAgICAgICAgICAgICAgIGNoID0gbmV3Q2hh
cjsKKyAgICAgICAgICAgICAgICBkYXRhW2ldID0gY2g7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICByZXR1cm4gbmV3SW1wbC5yZWxlYXNlKCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBU
aGVyZSBpcyB0aGUgcG9zc2liaWxpdHkgd2UgbmVlZCB0byB1cCBjb252ZXJ0IGZyb20gOCB0byAx
NiBiaXQsCisgICAgICAgIC8vIGNyZWF0ZSBhIDE2IGJpdCBzdHJpbmcgZm9yIHRoZSByZXN1bHQu
CisgICAgICAgIFVDaGFyKiBkYXRhOworICAgICAgICBSZWZQdHI8U3RyaW5nSW1wbD4gbmV3SW1w
bCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQobV9sZW5ndGgsIGRhdGEpOworCisgICAgICAgIGZvciAo
aSA9IDA7IGkgIT0gbV9sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgVUNoYXIgY2ggPSBtX2Rh
dGE4W2ldOworICAgICAgICAgICAgaWYgKGNoID09IG9sZEMpCisgICAgICAgICAgICAgICAgY2gg
PSBuZXdDOworICAgICAgICAgICAgZGF0YVtpXSA9IGNoOworICAgICAgICB9CisKKyAgICAgICAg
cmV0dXJuIG5ld0ltcGwucmVsZWFzZSgpOworICAgIH0KKwogICAgIFVDaGFyKiBkYXRhOwogICAg
IFJlZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChtX2xlbmd0
aCwgZGF0YSk7CiAKICAgICBmb3IgKGkgPSAwOyBpICE9IG1fbGVuZ3RoOyArK2kpIHsKLSAgICAg
ICAgVUNoYXIgY2ggPSBtX2RhdGFbaV07CisgICAgICAgIFVDaGFyIGNoID0gbV9kYXRhMTZbaV07
CiAgICAgICAgIGlmIChjaCA9PSBvbGRDKQogICAgICAgICAgICAgY2ggPSBuZXdDOwogICAgICAg
ICBkYXRhW2ldID0gY2g7CkBAIC04MjgsMTggKzEwMTksNDMgQEAgUGFzc1JlZlB0cjxTdHJpbmdJ
bXBsPiBTdHJpbmdJbXBsOjpyZXBsYQogICAgIHVuc2lnbmVkIGxlbmd0aFRvSW5zZXJ0ID0gc3Ry
ID8gc3RyLT5sZW5ndGgoKSA6IDA7CiAgICAgaWYgKCFsZW5ndGhUb1JlcGxhY2UgJiYgIWxlbmd0
aFRvSW5zZXJ0KQogICAgICAgICByZXR1cm4gdGhpczsKLSAgICBVQ2hhciogZGF0YTsKIAogICAg
IGlmICgobGVuZ3RoKCkgLSBsZW5ndGhUb1JlcGxhY2UpID49IChudW1lcmljX2xpbWl0czx1bnNp
Z25lZD46Om1heCgpIC0gbGVuZ3RoVG9JbnNlcnQpKQogICAgICAgICBDUkFTSCgpOwogCisgICAg
aWYgKGlzOEJpdCgpICYmICghc3RyIHx8IHN0ci0+aXM4Qml0KCkpKSB7CisgICAgICAgIExDaGFy
KiBkYXRhOworICAgICAgICBSZWZQdHI8U3RyaW5nSW1wbD4gbmV3SW1wbCA9CisgICAgICAgIGNy
ZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoKCkgLSBsZW5ndGhUb1JlcGxhY2UgKyBsZW5ndGhUb0lu
c2VydCwgZGF0YSk7CisgICAgICAgIG1lbWNweShkYXRhLCBtX2RhdGE4LCBwb3NpdGlvbiAqIHNp
emVvZihMQ2hhcikpOworICAgICAgICBpZiAoc3RyKQorICAgICAgICAgICAgbWVtY3B5KGRhdGEg
KyBwb3NpdGlvbiwgc3RyLT5tX2RhdGE4LCBsZW5ndGhUb0luc2VydCAqIHNpemVvZihMQ2hhcikp
OworICAgICAgICBtZW1jcHkoZGF0YSArIHBvc2l0aW9uICsgbGVuZ3RoVG9JbnNlcnQsIG1fZGF0
YTggKyBwb3NpdGlvbiArIGxlbmd0aFRvUmVwbGFjZSwKKyAgICAgICAgICAgICAgIChsZW5ndGgo
KSAtIHBvc2l0aW9uIC0gbGVuZ3RoVG9SZXBsYWNlKSAqIHNpemVvZihMQ2hhcikpOworICAgICAg
ICByZXR1cm4gbmV3SW1wbC5yZWxlYXNlKCk7CisgICAgfQorICAgIFVDaGFyKiBkYXRhOwogICAg
IFJlZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0KICAgICAgICAgY3JlYXRlVW5pbml0aWFsaXpl
ZChsZW5ndGgoKSAtIGxlbmd0aFRvUmVwbGFjZSArIGxlbmd0aFRvSW5zZXJ0LCBkYXRhKTsKLSAg
ICBtZW1jcHkoZGF0YSwgY2hhcmFjdGVycygpLCBwb3NpdGlvbiAqIHNpemVvZihVQ2hhcikpOwot
ICAgIGlmIChzdHIpCi0gICAgICAgIG1lbWNweShkYXRhICsgcG9zaXRpb24sIHN0ci0+Y2hhcmFj
dGVycygpLCBsZW5ndGhUb0luc2VydCAqIHNpemVvZihVQ2hhcikpOwotICAgIG1lbWNweShkYXRh
ICsgcG9zaXRpb24gKyBsZW5ndGhUb0luc2VydCwgY2hhcmFjdGVycygpICsgcG9zaXRpb24gKyBs
ZW5ndGhUb1JlcGxhY2UsCi0gICAgICAgIChsZW5ndGgoKSAtIHBvc2l0aW9uIC0gbGVuZ3RoVG9S
ZXBsYWNlKSAqIHNpemVvZihVQ2hhcikpOworICAgIGlmIChpczhCaXQoKSkKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHBvc2l0aW9uOyBpKyspCisgICAgICAgICAgICBkYXRhW2ld
ID0gbV9kYXRhOFtpXTsKKyAgICBlbHNlCisgICAgICAgIG1lbWNweShkYXRhLCBtX2RhdGExNiwg
cG9zaXRpb24gKiBzaXplb2YoVUNoYXIpKTsKKyAgICBpZiAoc3RyKSB7CisgICAgICAgIGlmIChz
dHItPmlzOEJpdCgpKQorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0
aFRvSW5zZXJ0OyBpKyspCisgICAgICAgICAgICAgICAgZGF0YVtpICsgcG9zaXRpb25dID0gc3Ry
LT5tX2RhdGE4W2ldOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtZW1jcHkoZGF0YSArIHBv
c2l0aW9uLCBzdHItPm1fZGF0YTE2LCBsZW5ndGhUb0luc2VydCAqIHNpemVvZihVQ2hhcikpOwor
ICAgIH0KKyAgICBpZiAoaXM4Qml0KCkpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGxlbmd0aCgpIC0gcG9zaXRpb24gLSBsZW5ndGhUb1JlcGxhY2U7IGkrKykKKyAgICAgICAg
ICAgIGRhdGFbaSArIHBvc2l0aW9uICsgbGVuZ3RoVG9JbnNlcnRdID0gbV9kYXRhOFtpICsgcG9z
aXRpb24gKyBsZW5ndGhUb1JlcGxhY2VdOworICAgIH0gZWxzZSB7CisgICAgICAgIG1lbWNweShk
YXRhICsgcG9zaXRpb24gKyBsZW5ndGhUb0luc2VydCwgY2hhcmFjdGVycygpICsgcG9zaXRpb24g
KyBsZW5ndGhUb1JlcGxhY2UsCisgICAgICAgICAgICAobGVuZ3RoKCkgLSBwb3NpdGlvbiAtIGxl
bmd0aFRvUmVwbGFjZSkgKiBzaXplb2YoVUNoYXIpKTsKKyAgICB9CiAgICAgcmV0dXJuIG5ld0lt
cGwucmVsZWFzZSgpOwogfQogCkBAIC04NTIsMTMgKzEwNjgsMTMgQEAgUGFzc1JlZlB0cjxTdHJp
bmdJbXBsPiBTdHJpbmdJbXBsOjpyZXBsYQogICAgIHNpemVfdCBzcmNTZWdtZW50U3RhcnQgPSAw
OwogICAgIHVuc2lnbmVkIG1hdGNoQ291bnQgPSAwOwogICAgIAotICAgIC8vIENvdW50IHRoZSBt
YXRjaGVzCisgICAgLy8gQ291bnQgdGhlIG1hdGNoZXMuCiAgICAgd2hpbGUgKChzcmNTZWdtZW50
U3RhcnQgPSBmaW5kKHBhdHRlcm4sIHNyY1NlZ21lbnRTdGFydCkpICE9IG5vdEZvdW5kKSB7CiAg
ICAgICAgICsrbWF0Y2hDb3VudDsKICAgICAgICAgKytzcmNTZWdtZW50U3RhcnQ7CiAgICAgfQog
ICAgIAotICAgIC8vIElmIHdlIGhhdmUgMCBtYXRjaGVzLCB3ZSBkb24ndCBoYXZlIHRvIGRvIGFu
eSBtb3JlIHdvcmsKKyAgICAvLyBJZiB3ZSBoYXZlIDAgbWF0Y2hlcyB0aGVuIHdlIGRvbid0IGhh
dmUgdG8gZG8gYW55IG1vcmUgd29yayB0byBkby4KICAgICBpZiAoIW1hdGNoQ291bnQpCiAgICAg
ICAgIHJldHVybiB0aGlzOwogICAgIApAQCAtODcyLDI2ICsxMDg4LDc2IEBAIFBhc3NSZWZQdHI8
U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6cmVwbGEKIAogICAgIG5ld1NpemUgKz0gcmVwbGFjZVNp
emU7CiAKLSAgICBVQ2hhciogZGF0YTsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gbmV3SW1wbCA9
IGNyZWF0ZVVuaW5pdGlhbGl6ZWQobmV3U2l6ZSwgZGF0YSk7Ci0KLSAgICAvLyBDb25zdHJ1Y3Qg
dGhlIG5ldyBkYXRhCisgICAgLy8gQ29uc3RydWN0IHRoZSBuZXcgZGF0YS4KICAgICBzaXplX3Qg
c3JjU2VnbWVudEVuZDsKICAgICB1bnNpZ25lZCBzcmNTZWdtZW50TGVuZ3RoOwogICAgIHNyY1Nl
Z21lbnRTdGFydCA9IDA7CiAgICAgdW5zaWduZWQgZHN0T2Zmc2V0ID0gMDsKKyAgICBib29sIHNy
Y0lzOEJpdCA9IGlzOEJpdCgpOworICAgIGJvb2wgcmVwbGFjZW1lbnRJczhCaXQgPSByZXBsYWNl
bWVudC0+aXM4Qml0KCk7CiAgICAgCisgICAgLy8gVGhlcmUgYXJlIDQgY2FzZXM6CisgICAgLy8g
MS4gVGhpcyBhbmQgcmVwbGFjZW1lbnQgYXJlIGJvdGggOCBiaXQuCisgICAgLy8gMi4gVGhpcyBh
bmQgcmVwbGFjZW1lbnQgYXJlIGJvdGggMTYgYml0LgorICAgIC8vIDMuIFRoaXMgaXMgOCBiaXQg
YW5kIHJlcGxhY2VtZW50IGlzIDE2IGJpdC4KKyAgICAvLyA0LiBUaGlzIGlzIDE2IGJpdCBhbmQg
cmVwbGFjZW1lbnQgaXMgOCBiaXQuCisgICAgaWYgKHNyY0lzOEJpdCAmJiByZXBsYWNlbWVudElz
OEJpdCkgeworICAgICAgICAvLyBDYXNlIDEKKyAgICAgICAgTENoYXIqIGRhdGE7CisgICAgICAg
IFJlZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChuZXdTaXpl
LCBkYXRhKTsKKworICAgICAgICB3aGlsZSAoKHNyY1NlZ21lbnRFbmQgPSBmaW5kKHBhdHRlcm4s
IHNyY1NlZ21lbnRTdGFydCkpICE9IG5vdEZvdW5kKSB7CisgICAgICAgICAgICBzcmNTZWdtZW50
TGVuZ3RoID0gc3JjU2VnbWVudEVuZCAtIHNyY1NlZ21lbnRTdGFydDsKKyAgICAgICAgICAgIG1l
bWNweShkYXRhICsgZHN0T2Zmc2V0LCBtX2RhdGE4ICsgc3JjU2VnbWVudFN0YXJ0LCBzcmNTZWdt
ZW50TGVuZ3RoICogc2l6ZW9mKExDaGFyKSk7CisgICAgICAgICAgICBkc3RPZmZzZXQgKz0gc3Jj
U2VnbWVudExlbmd0aDsKKyAgICAgICAgICAgIG1lbWNweShkYXRhICsgZHN0T2Zmc2V0LCByZXBs
YWNlbWVudC0+bV9kYXRhOCwgcmVwU3RyTGVuZ3RoICogc2l6ZW9mKExDaGFyKSk7CisgICAgICAg
ICAgICBkc3RPZmZzZXQgKz0gcmVwU3RyTGVuZ3RoOworICAgICAgICAgICAgc3JjU2VnbWVudFN0
YXJ0ID0gc3JjU2VnbWVudEVuZCArIDE7CisgICAgICAgIH0KKworICAgICAgICBzcmNTZWdtZW50
TGVuZ3RoID0gbV9sZW5ndGggLSBzcmNTZWdtZW50U3RhcnQ7CisgICAgICAgIG1lbWNweShkYXRh
ICsgZHN0T2Zmc2V0LCBtX2RhdGE4ICsgc3JjU2VnbWVudFN0YXJ0LCBzcmNTZWdtZW50TGVuZ3Ro
ICogc2l6ZW9mKExDaGFyKSk7CisKKyAgICAgICAgQVNTRVJUKGRzdE9mZnNldCArIHNyY1NlZ21l
bnRMZW5ndGggPT0gbmV3SW1wbC0+bGVuZ3RoKCkpOworCisgICAgICAgIHJldHVybiBuZXdJbXBs
LnJlbGVhc2UoKTsKKyAgICB9CisKKyAgICBVQ2hhciogZGF0YTsKKyAgICBSZWZQdHI8U3RyaW5n
SW1wbD4gbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQobmV3U2l6ZSwgZGF0YSk7CisKICAg
ICB3aGlsZSAoKHNyY1NlZ21lbnRFbmQgPSBmaW5kKHBhdHRlcm4sIHNyY1NlZ21lbnRTdGFydCkp
ICE9IG5vdEZvdW5kKSB7CiAgICAgICAgIHNyY1NlZ21lbnRMZW5ndGggPSBzcmNTZWdtZW50RW5k
IC0gc3JjU2VnbWVudFN0YXJ0OwotICAgICAgICBtZW1jcHkoZGF0YSArIGRzdE9mZnNldCwgbV9k
YXRhICsgc3JjU2VnbWVudFN0YXJ0LCBzcmNTZWdtZW50TGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7
CisgICAgICAgIGlmIChzcmNJczhCaXQpIHsKKyAgICAgICAgICAgIC8vIENhc2UgMy4KKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzcmNTZWdtZW50TGVuZ3RoOyBpKyspCisg
ICAgICAgICAgICAgICAgZGF0YVtpICsgZHN0T2Zmc2V0XSA9IG1fZGF0YThbaSArIHNyY1NlZ21l
bnRTdGFydF07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBDYXNlcyAyICYgNC4K
KyAgICAgICAgICAgIG1lbWNweShkYXRhICsgZHN0T2Zmc2V0LCBtX2RhdGExNiArIHNyY1NlZ21l
bnRTdGFydCwgc3JjU2VnbWVudExlbmd0aCAqIHNpemVvZihVQ2hhcikpOworICAgICAgICB9CiAg
ICAgICAgIGRzdE9mZnNldCArPSBzcmNTZWdtZW50TGVuZ3RoOwotICAgICAgICBtZW1jcHkoZGF0
YSArIGRzdE9mZnNldCwgcmVwbGFjZW1lbnQtPm1fZGF0YSwgcmVwU3RyTGVuZ3RoICogc2l6ZW9m
KFVDaGFyKSk7CisgICAgICAgIGlmIChyZXBsYWNlbWVudElzOEJpdCkgeworICAgICAgICAgICAg
Ly8gQ2FzZSA0LgorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlcFN0ckxl
bmd0aDsgaSsrKQorICAgICAgICAgICAgICAgIGRhdGFbaSArIGRzdE9mZnNldF0gPSByZXBsYWNl
bWVudC0+bV9kYXRhOFtpXTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIENhc2Vz
IDIgJiAzLgorICAgICAgICAgICAgbWVtY3B5KGRhdGEgKyBkc3RPZmZzZXQsIHJlcGxhY2VtZW50
LT5tX2RhdGExNiwgcmVwU3RyTGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CisgICAgICAgIH0KICAg
ICAgICAgZHN0T2Zmc2V0ICs9IHJlcFN0ckxlbmd0aDsKICAgICAgICAgc3JjU2VnbWVudFN0YXJ0
ID0gc3JjU2VnbWVudEVuZCArIDE7CiAgICAgfQogCiAgICAgc3JjU2VnbWVudExlbmd0aCA9IG1f
bGVuZ3RoIC0gc3JjU2VnbWVudFN0YXJ0OwotICAgIG1lbWNweShkYXRhICsgZHN0T2Zmc2V0LCBt
X2RhdGEgKyBzcmNTZWdtZW50U3RhcnQsIHNyY1NlZ21lbnRMZW5ndGggKiBzaXplb2YoVUNoYXIp
KTsKKyAgICBpZiAoc3JjSXM4Qml0KSB7CisgICAgICAgIC8vIENhc2UgMy4KKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHNyY1NlZ21lbnRMZW5ndGg7IGkrKykKKyAgICAgICAgICAg
IGRhdGFbaSArIGRzdE9mZnNldF0gPSBtX2RhdGE4W2kgKyBzcmNTZWdtZW50U3RhcnRdOworICAg
IH0gZWxzZSB7CisgICAgICAgIC8vIENhc2VzIDIgJiA0LgorICAgICAgICBtZW1jcHkoZGF0YSAr
IGRzdE9mZnNldCwgbV9kYXRhMTYgKyBzcmNTZWdtZW50U3RhcnQsIHNyY1NlZ21lbnRMZW5ndGgg
KiBzaXplb2YoVUNoYXIpKTsKKyAgICB9CiAKICAgICBBU1NFUlQoZHN0T2Zmc2V0ICsgc3JjU2Vn
bWVudExlbmd0aCA9PSBuZXdJbXBsLT5sZW5ndGgoKSk7CiAKQEAgLTkxMSw3ICsxMTc3LDcgQEAg
UGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpyZXBsYQogICAgIHNpemVfdCBzcmNT
ZWdtZW50U3RhcnQgPSAwOwogICAgIHVuc2lnbmVkIG1hdGNoQ291bnQgPSAwOwogICAgIAotICAg
IC8vIENvdW50IHRoZSBtYXRjaGVzCisgICAgLy8gQ291bnQgdGhlIG1hdGNoZXMuCiAgICAgd2hp
bGUgKChzcmNTZWdtZW50U3RhcnQgPSBmaW5kKHBhdHRlcm4sIHNyY1NlZ21lbnRTdGFydCkpICE9
IG5vdEZvdW5kKSB7CiAgICAgICAgICsrbWF0Y2hDb3VudDsKICAgICAgICAgc3JjU2VnbWVudFN0
YXJ0ICs9IHBhdHRlcm5MZW5ndGg7CkBAIC05MzAsMjYgKzExOTYsNzUgQEAgUGFzc1JlZlB0cjxT
dHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpyZXBsYQogCiAgICAgbmV3U2l6ZSArPSBtYXRjaENvdW50
ICogcmVwU3RyTGVuZ3RoOwogCi0gICAgVUNoYXIqIGRhdGE7Ci0gICAgUmVmUHRyPFN0cmluZ0lt
cGw+IG5ld0ltcGwgPSBjcmVhdGVVbmluaXRpYWxpemVkKG5ld1NpemUsIGRhdGEpOwogICAgIAog
ICAgIC8vIENvbnN0cnVjdCB0aGUgbmV3IGRhdGEKICAgICBzaXplX3Qgc3JjU2VnbWVudEVuZDsK
ICAgICB1bnNpZ25lZCBzcmNTZWdtZW50TGVuZ3RoOwogICAgIHNyY1NlZ21lbnRTdGFydCA9IDA7
CiAgICAgdW5zaWduZWQgZHN0T2Zmc2V0ID0gMDsKKyAgICBib29sIHNyY0lzOEJpdCA9IGlzOEJp
dCgpOworICAgIGJvb2wgcmVwbGFjZW1lbnRJczhCaXQgPSByZXBsYWNlbWVudC0+aXM4Qml0KCk7
CiAgICAgCisgICAgLy8gVGhlcmUgYXJlIDQgY2FzZXM6CisgICAgLy8gMS4gVGhpcyBhbmQgcmVw
bGFjZW1lbnQgYXJlIGJvdGggOCBiaXQuCisgICAgLy8gMi4gVGhpcyBhbmQgcmVwbGFjZW1lbnQg
YXJlIGJvdGggMTYgYml0LgorICAgIC8vIDMuIFRoaXMgaXMgOCBiaXQgYW5kIHJlcGxhY2VtZW50
IGlzIDE2IGJpdC4KKyAgICAvLyA0LiBUaGlzIGlzIDE2IGJpdCBhbmQgcmVwbGFjZW1lbnQgaXMg
OCBiaXQuCisgICAgaWYgKHNyY0lzOEJpdCAmJiByZXBsYWNlbWVudElzOEJpdCkgeworICAgICAg
ICAvLyBDYXNlIDEKKyAgICAgICAgTENoYXIqIGRhdGE7CisgICAgICAgIFJlZlB0cjxTdHJpbmdJ
bXBsPiBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChuZXdTaXplLCBkYXRhKTsKKyAgICAg
ICAgd2hpbGUgKChzcmNTZWdtZW50RW5kID0gZmluZChwYXR0ZXJuLCBzcmNTZWdtZW50U3RhcnQp
KSAhPSBub3RGb3VuZCkgeworICAgICAgICAgICAgc3JjU2VnbWVudExlbmd0aCA9IHNyY1NlZ21l
bnRFbmQgLSBzcmNTZWdtZW50U3RhcnQ7CisgICAgICAgICAgICBtZW1jcHkoZGF0YSArIGRzdE9m
ZnNldCwgbV9kYXRhOCArIHNyY1NlZ21lbnRTdGFydCwgc3JjU2VnbWVudExlbmd0aCAqIHNpemVv
ZihMQ2hhcikpOworICAgICAgICAgICAgZHN0T2Zmc2V0ICs9IHNyY1NlZ21lbnRMZW5ndGg7Cisg
ICAgICAgICAgICBtZW1jcHkoZGF0YSArIGRzdE9mZnNldCwgcmVwbGFjZW1lbnQtPm1fZGF0YTgs
IHJlcFN0ckxlbmd0aCAqIHNpemVvZihMQ2hhcikpOworICAgICAgICAgICAgZHN0T2Zmc2V0ICs9
IHJlcFN0ckxlbmd0aDsKKyAgICAgICAgICAgIHNyY1NlZ21lbnRTdGFydCA9IHNyY1NlZ21lbnRF
bmQgKyBwYXR0ZXJuTGVuZ3RoOworICAgICAgICB9CisKKyAgICAgICAgc3JjU2VnbWVudExlbmd0
aCA9IG1fbGVuZ3RoIC0gc3JjU2VnbWVudFN0YXJ0OworICAgICAgICBtZW1jcHkoZGF0YSArIGRz
dE9mZnNldCwgbV9kYXRhOCArIHNyY1NlZ21lbnRTdGFydCwgc3JjU2VnbWVudExlbmd0aCAqIHNp
emVvZihMQ2hhcikpOworCisgICAgICAgIEFTU0VSVChkc3RPZmZzZXQgKyBzcmNTZWdtZW50TGVu
Z3RoID09IG5ld0ltcGwtPmxlbmd0aCgpKTsKKworICAgICAgICByZXR1cm4gbmV3SW1wbC5yZWxl
YXNlKCk7CisgICAgfQorCisgICAgVUNoYXIqIGRhdGE7CisgICAgUmVmUHRyPFN0cmluZ0ltcGw+
IG5ld0ltcGwgPSBjcmVhdGVVbmluaXRpYWxpemVkKG5ld1NpemUsIGRhdGEpOwogICAgIHdoaWxl
ICgoc3JjU2VnbWVudEVuZCA9IGZpbmQocGF0dGVybiwgc3JjU2VnbWVudFN0YXJ0KSkgIT0gbm90
Rm91bmQpIHsKICAgICAgICAgc3JjU2VnbWVudExlbmd0aCA9IHNyY1NlZ21lbnRFbmQgLSBzcmNT
ZWdtZW50U3RhcnQ7Ci0gICAgICAgIG1lbWNweShkYXRhICsgZHN0T2Zmc2V0LCBtX2RhdGEgKyBz
cmNTZWdtZW50U3RhcnQsIHNyY1NlZ21lbnRMZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKKyAgICAg
ICAgaWYgKHNyY0lzOEJpdCkgeworICAgICAgICAgICAgLy8gQ2FzZSAzLgorICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNyY1NlZ21lbnRMZW5ndGg7IGkrKykKKyAgICAgICAg
ICAgICAgICBkYXRhW2kgKyBkc3RPZmZzZXRdID0gbV9kYXRhOFtpICsgc3JjU2VnbWVudFN0YXJ0
XTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIENhc2UgMiAmIDQuCisgICAgICAg
ICAgICBtZW1jcHkoZGF0YSArIGRzdE9mZnNldCwgbV9kYXRhMTYgKyBzcmNTZWdtZW50U3RhcnQs
IHNyY1NlZ21lbnRMZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKKyAgICAgICAgfQogICAgICAgICBk
c3RPZmZzZXQgKz0gc3JjU2VnbWVudExlbmd0aDsKLSAgICAgICAgbWVtY3B5KGRhdGEgKyBkc3RP
ZmZzZXQsIHJlcGxhY2VtZW50LT5tX2RhdGEsIHJlcFN0ckxlbmd0aCAqIHNpemVvZihVQ2hhcikp
OworICAgICAgICBpZiAocmVwbGFjZW1lbnRJczhCaXQpIHsKKyAgICAgICAgICAgIC8vIENhc2Vz
IDIgJiAzLgorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlcFN0ckxlbmd0
aDsgaSsrKQorICAgICAgICAgICAgICAgIGRhdGFbaSArIGRzdE9mZnNldF0gPSByZXBsYWNlbWVu
dC0+bV9kYXRhOFtpXTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIENhc2UgNAor
ICAgICAgICAgICAgbWVtY3B5KGRhdGEgKyBkc3RPZmZzZXQsIHJlcGxhY2VtZW50LT5tX2RhdGEx
NiwgcmVwU3RyTGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CisgICAgICAgIH0KICAgICAgICAgZHN0
T2Zmc2V0ICs9IHJlcFN0ckxlbmd0aDsKICAgICAgICAgc3JjU2VnbWVudFN0YXJ0ID0gc3JjU2Vn
bWVudEVuZCArIHBhdHRlcm5MZW5ndGg7CiAgICAgfQogCiAgICAgc3JjU2VnbWVudExlbmd0aCA9
IG1fbGVuZ3RoIC0gc3JjU2VnbWVudFN0YXJ0OwotICAgIG1lbWNweShkYXRhICsgZHN0T2Zmc2V0
LCBtX2RhdGEgKyBzcmNTZWdtZW50U3RhcnQsIHNyY1NlZ21lbnRMZW5ndGggKiBzaXplb2YoVUNo
YXIpKTsKKyAgICBpZiAoc3JjSXM4Qml0KSB7CisgICAgICAgIC8vIENhc2UgMy4KKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNyY1NlZ21lbnRMZW5ndGg7IGkrKykKKyAgICAgICAg
ICAgIGRhdGFbaSArIGRzdE9mZnNldF0gPSBtX2RhdGE4W2kgKyBzcmNTZWdtZW50U3RhcnRdOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIC8vIENhc2VzIDIgJiA0LgorICAgICAgICBtZW1jcHkoZGF0
YSArIGRzdE9mZnNldCwgbV9kYXRhMTYgKyBzcmNTZWdtZW50U3RhcnQsIHNyY1NlZ21lbnRMZW5n
dGggKiBzaXplb2YoVUNoYXIpKTsKKyAgICB9CiAKICAgICBBU1NFUlQoZHN0T2Zmc2V0ICsgc3Jj
U2VnbWVudExlbmd0aCA9PSBuZXdJbXBsLT5sZW5ndGgoKSk7CiAKQEAgLTk2MSw3ICsxMjc2LDQ2
IEBAIGJvb2wgZXF1YWwoY29uc3QgU3RyaW5nSW1wbCogYSwgY29uc3QgU3QKICAgICByZXR1cm4g
U3RyaW5nSGFzaDo6ZXF1YWwoYSwgYik7CiB9CiAKLWJvb2wgZXF1YWwoY29uc3QgU3RyaW5nSW1w
bCogYSwgY29uc3QgY2hhciogYikKK2Jvb2wgZXF1YWwoY29uc3QgU3RyaW5nSW1wbCogYSwgY29u
c3QgTENoYXIqIGIsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBpZiAoIWEpCisgICAgICAgIHJl
dHVybiAhYjsKKyAgICBpZiAoIWIpCisgICAgICAgIHJldHVybiAhYTsKKworICAgIGlmIChsZW5n
dGggIT0gYS0+bGVuZ3RoKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChhLT5p
czhCaXQoKSkgeworICAgICAgICBjb25zdCBMQ2hhciogYUNoYXJzID0gYS0+Y2hhcmFjdGVyczgo
KTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpICE9IGxlbmd0aDsgKytpKSB7Cisg
ICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGJjID0gYltpXTsKKyAgICAgICAgICAgIHVuc2lnbmVk
IGNoYXIgYWMgPSBhQ2hhcnNbaV07CisgICAgICAgICAgICBpZiAoIWJjKQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmIChhYyAhPSBiYykKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisKKyAgICBjb25zdCBVQ2hhciogYUNoYXJzID0gYS0+Y2hhcmFjdGVyczE2KCk7CisKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpICE9IGxlbmd0aDsgKytpKSB7CisgICAgICAgIFVDaGFy
IGJjID0gYltpXTsKKyAgICAgICAgVUNoYXIgYWMgPSBhQ2hhcnNbaV07CisgICAgICAgIGlmICgh
YmMpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChhYyAhPSBiYykKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBlcXVhbChjb25zdCBTdHJpbmdJbXBsKiBhLCBjb25zdCBMQ2hhciogYikKIHsKICAgICBp
ZiAoIWEpCiAgICAgICAgIHJldHVybiAhYjsKQEAgLTk2OSwxMiArMTMyMywyNyBAQCBib29sIGVx
dWFsKGNvbnN0IFN0cmluZ0ltcGwqIGEsIGNvbnN0IGNoCiAgICAgICAgIHJldHVybiAhYTsKIAog
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IGEtPmxlbmd0aCgpOwotICAgIGNvbnN0IFVDaGFyKiBhcyA9
IGEtPmNoYXJhY3RlcnMoKTsKKworICAgIGlmIChhLT5pczhCaXQoKSkgeworICAgICAgICBjb25z
dCBMQ2hhciogYVB0ciA9IGEtPmNoYXJhY3RlcnM4KCk7CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgIT0gbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYmMg
PSBiW2ldOworICAgICAgICAgICAgdW5zaWduZWQgY2hhciBhYyA9IGFQdHJbaV07CisgICAgICAg
ICAgICBpZiAoIWJjKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IGlmIChhYyAhPSBiYykKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KworICAgICAgICByZXR1cm4gIWJbbGVuZ3RoXTsKKyAgICB9CisKKyAgICBjb25zdCBVQ2hhciog
YVB0ciA9IGEtPmNoYXJhY3RlcnMxNigpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgIT0g
bGVuZ3RoOyArK2kpIHsKICAgICAgICAgdW5zaWduZWQgY2hhciBiYyA9IGJbaV07CiAgICAgICAg
IGlmICghYmMpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChhc1tpXSAh
PSBiYykKKyAgICAgICAgaWYgKGFQdHJbaV0gIT0gYmMpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogCkBAIC05OTksMjAgKzEzNjgsMjggQEAgYm9vbCBlcXVhbChjb25zdCBTdHJp
bmdJbXBsKiBhLCBjb25zdCBVQwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVy
biB0cnVlOwogI2Vsc2UKLSAgICAvKiBEbyBpdCA0LWJ5dGVzLWF0LWEtdGltZSBvbiBhcmNoaXRl
Y3R1cmVzIHdoZXJlIGl0J3Mgc2FmZSAqLwotICAgIAotICAgIGNvbnN0IHVpbnQzMl90KiBhQ2hh
cmFjdGVycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihhLT5jaGFyYWN0ZXJz
KCkpOworICAgIGlmIChhLT5pczhCaXQoKSkgeworICAgICAgICBjb25zdCBMQ2hhciogYXMgPSBh
LT5jaGFyYWN0ZXJzOCgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpICE9IGxlbmd0
aDsgKytpKQorICAgICAgICAgICAgaWYgKGFzW2ldICE9IGJbaV0pCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBEbyBj
b21wYXJpc29uIDQtYnl0ZXMtYXQtYS10aW1lIG9uIGFyY2hpdGVjdHVyZXMgd2hlcmUgaXQncyBz
YWZlLgorCisgICAgY29uc3QgdWludDMyX3QqIGFDaGFyYWN0ZXJzID0gcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1aW50MzJfdCo+KGEtPmNoYXJhY3RlcnMxNigpKTsKICAgICBjb25zdCB1aW50MzJf
dCogYkNoYXJhY3RlcnMgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oYik7Ci0g
ICAgCisKICAgICB1bnNpZ25lZCBoYWxmTGVuZ3RoID0gbGVuZ3RoID4+IDE7CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSAhPSBoYWxmTGVuZ3RoOyArK2kpIHsKICAgICAgICAgaWYgKCphQ2hh
cmFjdGVycysrICE9ICpiQ2hhcmFjdGVycysrKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KLSAgICAKKwogICAgIGlmIChsZW5ndGggJiAxICYmICAqcmVpbnRlcnByZXRfY2FzdDxj
b25zdCB1aW50MTZfdCo+KGFDaGFyYWN0ZXJzKSAhPSAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1
aW50MTZfdCo+KGJDaGFyYWN0ZXJzKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAorCiAg
ICAgcmV0dXJuIHRydWU7CiAjZW5kaWYKIH0KQEAgLTEwMjIsNyArMTM5OSw3IEBAIGJvb2wgZXF1
YWxJZ25vcmluZ0Nhc2UoU3RyaW5nSW1wbCogYSwgU3QKICAgICByZXR1cm4gQ2FzZUZvbGRpbmdI
YXNoOjplcXVhbChhLCBiKTsKIH0KIAotYm9vbCBlcXVhbElnbm9yaW5nQ2FzZShTdHJpbmdJbXBs
KiBhLCBjb25zdCBjaGFyKiBiKQorYm9vbCBlcXVhbElnbm9yaW5nQ2FzZShTdHJpbmdJbXBsKiBh
LCBjb25zdCBMQ2hhciogYikKIHsKICAgICBpZiAoIWEpCiAgICAgICAgIHJldHVybiAhYjsKQEAg
LTEwMzAsMTMgKzE0MDcsMzQgQEAgYm9vbCBlcXVhbElnbm9yaW5nQ2FzZShTdHJpbmdJbXBsKiBh
LCBjbwogICAgICAgICByZXR1cm4gIWE7CiAKICAgICB1bnNpZ25lZCBsZW5ndGggPSBhLT5sZW5n
dGgoKTsKLSAgICBjb25zdCBVQ2hhciogYXMgPSBhLT5jaGFyYWN0ZXJzKCk7CiAKICAgICAvLyBE
byBhIGZhc3RlciBsb29wIGZvciB0aGUgY2FzZSB3aGVyZSBhbGwgdGhlIGNoYXJhY3RlcnMgYXJl
IEFTQ0lJLgogICAgIFVDaGFyIG9yZWQgPSAwOwogICAgIGJvb2wgZXF1YWwgPSB0cnVlOworICAg
IGlmIChhLT5pczhCaXQoKSkgeworICAgICAgICBjb25zdCBMQ2hhciogYXMgPSBhLT5jaGFyYWN0
ZXJzOCgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpICE9IGxlbmd0aDsgKytpKSB7
CisgICAgICAgICAgICBMQ2hhciBiYyA9IGJbaV07CisgICAgICAgICAgICBpZiAoIWJjKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIFVDaGFyIGFjID0gYXNbaV07
CisgICAgICAgICAgICBvcmVkIHw9IGFjOworICAgICAgICAgICAgZXF1YWwgPSBlcXVhbCAmJiAo
dG9BU0NJSUxvd2VyKGFjKSA9PSB0b0FTQ0lJTG93ZXIoYmMpKTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgLy8gRG8gYSBzbG93ZXIgaW1wbGVtZW50YXRpb24gZm9yIGNhc2VzIHRoYXQg
aW5jbHVkZSBub24tQVNDSUkgY2hhcmFjdGVycy4KKyAgICAgICAgaWYgKG9yZWQgJiB+MHg3Rikg
eworICAgICAgICAgICAgZXF1YWwgPSB0cnVlOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSAhPSBsZW5ndGg7ICsraSkKKyAgICAgICAgICAgICAgICBlcXVhbCA9IGVxdWFsICYm
IChmb2xkQ2FzZShhc1tpXSkgPT0gZm9sZENhc2UoYltpXSkpOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICByZXR1cm4gZXF1YWwgJiYgIWJbbGVuZ3RoXTsgICAgICAgIAorICAgIH0KKwor
ICAgIGNvbnN0IFVDaGFyKiBhcyA9IGEtPmNoYXJhY3RlcnMxNigpOwogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgIT0gbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgY2hhciBiYyA9IGJbaV07Cisg
ICAgICAgIExDaGFyIGJjID0gYltpXTsKICAgICAgICAgaWYgKCFiYykKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgVUNoYXIgYWMgPSBhc1tpXTsKQEAgLTEwNDgsOCArMTQ0Niw3
IEBAIGJvb2wgZXF1YWxJZ25vcmluZ0Nhc2UoU3RyaW5nSW1wbCogYSwgY28KICAgICBpZiAob3Jl
ZCAmIH4weDdGKSB7CiAgICAgICAgIGVxdWFsID0gdHJ1ZTsKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSAhPSBsZW5ndGg7ICsraSkgewotICAgICAgICAgICAgdW5zaWduZWQgY2hhciBi
YyA9IGJbaV07Ci0gICAgICAgICAgICBlcXVhbCA9IGVxdWFsICYmIChmb2xkQ2FzZShhc1tpXSkg
PT0gZm9sZENhc2UoYmMpKTsKKyAgICAgICAgICAgIGVxdWFsID0gZXF1YWwgJiYgKGZvbGRDYXNl
KGFzW2ldKSA9PSBmb2xkQ2FzZShiW2ldKSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTEwNzEs
NyArMTQ2OCw3IEBAIGJvb2wgZXF1YWxJZ25vcmluZ051bGxpdHkoU3RyaW5nSW1wbCogYSwKIFdU
Rjo6VW5pY29kZTo6RGlyZWN0aW9uIFN0cmluZ0ltcGw6OmRlZmF1bHRXcml0aW5nRGlyZWN0aW9u
KGJvb2wqIGhhc1N0cm9uZ0RpcmVjdGlvbmFsaXR5KQogewogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtX2xlbmd0aDsgKytpKSB7Ci0gICAgICAgIFdURjo6VW5pY29kZTo6RGlyZWN0aW9u
IGNoYXJEaXJlY3Rpb24gPSBXVEY6OlVuaWNvZGU6OmRpcmVjdGlvbihtX2RhdGFbaV0pOworICAg
ICAgICBXVEY6OlVuaWNvZGU6OkRpcmVjdGlvbiBjaGFyRGlyZWN0aW9uID0gV1RGOjpVbmljb2Rl
OjpkaXJlY3Rpb24oaXM4Qml0KCkgPyBtX2RhdGE4W2ldIDogbV9kYXRhMTZbaV0pOwogICAgICAg
ICBpZiAoY2hhckRpcmVjdGlvbiA9PSBXVEY6OlVuaWNvZGU6OkxlZnRUb1JpZ2h0KSB7CiAgICAg
ICAgICAgICBpZiAoaGFzU3Ryb25nRGlyZWN0aW9uYWxpdHkpCiAgICAgICAgICAgICAgICAgKmhh
c1N0cm9uZ0RpcmVjdGlvbmFsaXR5ID0gdHJ1ZTsKQEAgLTEwOTAsNiArMTQ4Nyw3IEBAIFdURjo6
VW5pY29kZTo6RGlyZWN0aW9uIFN0cmluZ0ltcGw6OmRlZmEKIAogUGFzc1JlZlB0cjxTdHJpbmdJ
bXBsPiBTdHJpbmdJbXBsOjphZG9wdChTdHJpbmdCdWZmZXImIGJ1ZmZlcikKIHsKKyAgICAvLyBG
SVhNRTogaGFuZGxlIDgtYml0IFN0cmluZ0J1ZmZlciB3aGVuIGl0IGV4aXN0cy4KICAgICB1bnNp
Z25lZCBsZW5ndGggPSBidWZmZXIubGVuZ3RoKCk7CiAgICAgaWYgKGxlbmd0aCA9PSAwKQogICAg
ICAgICByZXR1cm4gZW1wdHkoKTsKQEAgLTExMDAsMTMgKzE0OTgsMjEgQEAgUGFzc1JlZlB0cjxT
dHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpjcmVhdAogewogICAgIC8vIFVzZSBjcmVhdGVVbmluaXRp
YWxpemVkIGluc3RlYWQgb2YgJ25ldyBTdHJpbmdJbXBsJyBzbyB0aGF0IHRoZSBzdHJpbmcgYW5k
IGl0cyBidWZmZXIKICAgICAvLyBnZXQgYWxsb2NhdGVkIGluIGEgc2luZ2xlIG1lbW9yeSBibG9j
ay4KLSAgICBVQ2hhciogZGF0YTsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHJpbmcubV9sZW5n
dGg7CiAgICAgaWYgKGxlbmd0aCA+PSBudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQog
ICAgICAgICBDUkFTSCgpOwotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiB0ZXJtaW5hdGVkU3RyaW5n
ID0gY3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGggKyAxLCBkYXRhKTsKLSAgICBtZW1jcHkoZGF0
YSwgc3RyaW5nLm1fZGF0YSwgbGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7Ci0gICAgZGF0YVtsZW5n
dGhdID0gMDsKKyAgICBSZWZQdHI8U3RyaW5nSW1wbD4gdGVybWluYXRlZFN0cmluZzsKKyAgICBp
ZiAoc3RyaW5nLmlzOEJpdCgpKSB7CisgICAgICAgIExDaGFyKiBkYXRhOworICAgICAgICB0ZXJt
aW5hdGVkU3RyaW5nID0gY3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGggKyAxLCBkYXRhKTsKKyAg
ICAgICAgbWVtY3B5KGRhdGEsIHN0cmluZy5tX2RhdGE4LCBsZW5ndGggKiBzaXplb2YoTENoYXIp
KTsKKyAgICAgICAgZGF0YVtsZW5ndGhdID0gMDsKKyAgICB9IGVsc2UgeworICAgICAgICBVQ2hh
ciogZGF0YTsKKyAgICAgICAgdGVybWluYXRlZFN0cmluZyA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQo
bGVuZ3RoICsgMSwgZGF0YSk7CisgICAgICAgIG1lbWNweShkYXRhLCBzdHJpbmcubV9kYXRhMTYs
IGxlbmd0aCAqIHNpemVvZihVQ2hhcikpOworICAgICAgICBkYXRhW2xlbmd0aF0gPSAwOworICAg
IH0KICAgICB0ZXJtaW5hdGVkU3RyaW5nLT5tX2xlbmd0aC0tOwogICAgIHRlcm1pbmF0ZWRTdHJp
bmctPm1faGFzaEFuZEZsYWdzID0gKHN0cmluZy5tX2hhc2hBbmRGbGFncyAmIH5zX2ZsYWdNYXNr
KSB8IHNfaGFzaEZsYWdIYXNUZXJtaW5hdGluZ051bGxDaGFyYWN0ZXI7CiAgICAgcmV0dXJuIHRl
cm1pbmF0ZWRTdHJpbmcucmVsZWFzZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi90ZXh0L1N0cmluZ0ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d3RmL3RleHQvU3RyaW5nSW1wbC5oCShyZXZpc2lvbiA5ODQ5NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvdGV4dC9TdHJpbmdJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0
LDcgQEAgdHlwZWRlZiBjb25zdCBzdHJ1Y3QgX19DRlN0cmluZyAqIENGU3RyaQogLy8gTGFuZGlu
ZyB0aGUgZmlsZSBtb3ZlcyBpbiBvbmUgcGF0Y2gsIHdpbGwgZm9sbG93IG9uIHdpdGggcGF0Y2hl
cyB0byBjaGFuZ2UgdGhlIG5hbWVzcGFjZXMuCiBuYW1lc3BhY2UgSlNDIHsKIHN0cnVjdCBJZGVu
dGlmaWVyQ1N0cmluZ1RyYW5zbGF0b3I7CitzdHJ1Y3QgSWRlbnRpZmllckNoYXJCdWZmZXJUcmFu
c2xhdG9yOwogc3RydWN0IElkZW50aWZpZXJVQ2hhckJ1ZmZlclRyYW5zbGF0b3I7CiB9CiAKQEAg
LTYyLDYgKzYzLDcgQEAgdHlwZWRlZiBib29sICgqSXNXaGl0ZVNwYWNlRnVuY3Rpb25QdHIpKAog
Y2xhc3MgU3RyaW5nSW1wbCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3RyaW5nSW1wbCk7
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIGZyaWVuZCBzdHJ1Y3QgSlNDOjpJZGVudGlm
aWVyQ1N0cmluZ1RyYW5zbGF0b3I7CisgICAgZnJpZW5kIHN0cnVjdCBKU0M6OklkZW50aWZpZXJD
aGFyQnVmZmVyVHJhbnNsYXRvcjsKICAgICBmcmllbmQgc3RydWN0IEpTQzo6SWRlbnRpZmllclVD
aGFyQnVmZmVyVHJhbnNsYXRvcjsKICAgICBmcmllbmQgc3RydWN0IFdURjo6Q1N0cmluZ1RyYW5z
bGF0b3I7CiAgICAgZnJpZW5kIHN0cnVjdCBXVEY6Okhhc2hBbmRDaGFyYWN0ZXJzVHJhbnNsYXRv
cjsKQEAgLTgzLDcgKzg1LDcgQEAgcHJpdmF0ZToKICAgICBTdHJpbmdJbXBsKGNvbnN0IFVDaGFy
KiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIENvbnN0cnVjdFN0YXRpY1N0cmluZ1RhZykK
ICAgICAgICAgOiBtX3JlZkNvdW50KHNfcmVmQ291bnRGbGFnSXNTdGF0aWNTdHJpbmcpCiAgICAg
ICAgICwgbV9sZW5ndGgobGVuZ3RoKQotICAgICAgICAsIG1fZGF0YShjaGFyYWN0ZXJzKQorICAg
ICAgICAsIG1fZGF0YTE2KGNoYXJhY3RlcnMpCiAgICAgICAgICwgbV9idWZmZXIoMCkKICAgICAg
ICAgLCBtX2hhc2hBbmRGbGFncyhzX2hhc2hGbGFnSXNJZGVudGlmaWVyIHwgQnVmZmVyT3duZWQp
CiAgICAgewpAQCAtOTMsMTUgKzk1LDQ1IEBAIHByaXZhdGU6CiAgICAgICAgIGhhc2goKTsKICAg
ICB9CiAKLSAgICAvLyBDcmVhdGUgYSBub3JtYWwgc3RyaW5nIHdpdGggaW50ZXJuYWwgc3RvcmFn
ZSAoQnVmZmVySW50ZXJuYWwpCisgICAgLy8gVXNlZCB0byBjb25zdHJ1Y3Qgc3RhdGljIHN0cmlu
Z3MsIHdoaWNoIGhhdmUgYW4gc3BlY2lhbCByZWZDb3VudCB0aGF0IGNhbiBuZXZlciBoaXQgemVy
by4KKyAgICAvLyBUaGlzIG1lYW5zIHRoYXQgdGhlIHN0YXRpYyBzdHJpbmcgd2lsbCBuZXZlciBi
ZSBkZXN0cm95ZWQsIHdoaWNoIGlzIGltcG9ydGFudCBiZWNhdXNlCisgICAgLy8gc3RhdGljIHN0
cmluZ3Mgd2lsbCBiZSBzaGFyZWQgYWNyb3NzIHRocmVhZHMgJiByZWYtY291bnRlZCBpbiBhIG5v
bi10aHJlYWRzYWZlIG1hbm5lci4KKyAgICBTdHJpbmdJbXBsKGNvbnN0IExDaGFyKiBjaGFyYWN0
ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIENvbnN0cnVjdFN0YXRpY1N0cmluZ1RhZykKKyAgICAgICAg
OiBtX3JlZkNvdW50KHNfcmVmQ291bnRGbGFnSXNTdGF0aWNTdHJpbmcpCisgICAgICAgICwgbV9s
ZW5ndGgobGVuZ3RoKQorICAgICAgICAsIG1fZGF0YTgoY2hhcmFjdGVycykKKyAgICAgICAgLCBt
X2J1ZmZlcigwKQorICAgICAgICAsIG1faGFzaEFuZEZsYWdzKHNfaGFzaEZsYWc4Qml0QnVmZmVy
IHwgc19oYXNoRmxhZ0lzSWRlbnRpZmllciB8IEJ1ZmZlck93bmVkKQorICAgIHsKKyAgICAgICAg
Ly8gRW5zdXJlIHRoYXQgdGhlIGhhc2ggaXMgY29tcHV0ZWQgc28gdGhhdCBBdG9taWNTdHJpbmdI
YXNoIGNhbiBjYWxsIGV4aXN0aW5nSGFzaCgpCisgICAgICAgIC8vIHdpdGggaW1wdW5pdHkuIFRo
ZSBlbXB0eSBzdHJpbmcgaXMgc3BlY2lhbCBiZWNhdXNlIGl0IGlzIG5ldmVyIGVudGVyZWQgaW50
bworICAgICAgICAvLyBBdG9taWNTdHJpbmcncyBIYXNoS2V5LCBidXQgc3RpbGwgbmVlZHMgdG8g
Y29tcGFyZSBjb3JyZWN0bHkuCisgICAgICAgIGhhc2goKTsKKyAgICB9CisKKyAgICAvLyBGSVhN
RTogdGhlcmUgaGFzIHRvIGJlIGEgbGVzcyBoYWNreSB3YXkgdG8gZG8gdGhpcy4KKyAgICBlbnVt
IEZvcmNlOEJpdCB7IEZvcmNlOEJpdENvbnN0cnVjdG9yIH07CisgICAgLy8gQ3JlYXRlIGEgbm9y
bWFsIDgtYml0IHN0cmluZyB3aXRoIGludGVybmFsIHN0b3JhZ2UgKEJ1ZmZlckludGVybmFsKQor
ICAgIFN0cmluZ0ltcGwodW5zaWduZWQgbGVuZ3RoLCBGb3JjZThCaXQpCisgICAgICAgIDogbV9y
ZWZDb3VudChzX3JlZkNvdW50SW5jcmVtZW50KQorICAgICAgICAsIG1fbGVuZ3RoKGxlbmd0aCkK
KyAgICAgICAgLCBtX2RhdGE4KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPih0aGlzICsg
MSkpCisgICAgICAgICwgbV9idWZmZXIoMCkKKyAgICAgICAgLCBtX2hhc2hBbmRGbGFncyhzX2hh
c2hGbGFnOEJpdEJ1ZmZlciB8IEJ1ZmZlckludGVybmFsKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KG1fZGF0YTgpOworICAgICAgICBBU1NFUlQobV9sZW5ndGgpOworICAgIH0KKworICAgIC8vIENy
ZWF0ZSBhIG5vcm1hbCAxNi1iaXQgc3RyaW5nIHdpdGggaW50ZXJuYWwgc3RvcmFnZSAoQnVmZmVy
SW50ZXJuYWwpCiAgICAgU3RyaW5nSW1wbCh1bnNpZ25lZCBsZW5ndGgpCiAgICAgICAgIDogbV9y
ZWZDb3VudChzX3JlZkNvdW50SW5jcmVtZW50KQogICAgICAgICAsIG1fbGVuZ3RoKGxlbmd0aCkK
LSAgICAgICAgLCBtX2RhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KHRoaXMgKyAx
KSkKKyAgICAgICAgLCBtX2RhdGExNihyZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4odGhp
cyArIDEpKQogICAgICAgICAsIG1fYnVmZmVyKDApCiAgICAgICAgICwgbV9oYXNoQW5kRmxhZ3Mo
QnVmZmVySW50ZXJuYWwpCiAgICAgewotICAgICAgICBBU1NFUlQobV9kYXRhKTsKKyAgICAgICAg
QVNTRVJUKG1fZGF0YTE2KTsKICAgICAgICAgQVNTRVJUKG1fbGVuZ3RoKTsKICAgICB9CiAKQEAg
LTEwOSwyMyArMTQxLDM4IEBAIHByaXZhdGU6CiAgICAgU3RyaW5nSW1wbChjb25zdCBVQ2hhciog
Y2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQogICAgICAgICA6IG1fcmVmQ291bnQoc19yZWZD
b3VudEluY3JlbWVudCkKICAgICAgICAgLCBtX2xlbmd0aChsZW5ndGgpCi0gICAgICAgICwgbV9k
YXRhKGNoYXJhY3RlcnMpCisgICAgICAgICwgbV9kYXRhMTYoY2hhcmFjdGVycykKICAgICAgICAg
LCBtX2J1ZmZlcigwKQogICAgICAgICAsIG1faGFzaEFuZEZsYWdzKEJ1ZmZlck93bmVkKQogICAg
IHsKLSAgICAgICAgQVNTRVJUKG1fZGF0YSk7CisgICAgICAgIEFTU0VSVChtX2RhdGExNik7Cisg
ICAgICAgIEFTU0VSVChtX2xlbmd0aCk7CisgICAgfQorCisgICAgLy8gVXNlZCB0byBjcmVhdGUg
bmV3IHN0cmluZ3MgdGhhdCBhcmUgYSBzdWJzdHJpbmcgb2YgYW4gZXhpc3RpbmcgOC1iaXQgU3Ry
aW5nSW1wbCAoQnVmZmVyU3Vic3RyaW5nKQorICAgIFN0cmluZ0ltcGwoY29uc3QgTENoYXIqIGNo
YXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBiYXNlKQor
ICAgICAgICA6IG1fcmVmQ291bnQoc19yZWZDb3VudEluY3JlbWVudCkKKyAgICAgICAgLCBtX2xl
bmd0aChsZW5ndGgpCisgICAgICAgICwgbV9kYXRhOChjaGFyYWN0ZXJzKQorICAgICAgICAsIG1f
c3Vic3RyaW5nQnVmZmVyKGJhc2UubGVha1JlZigpKQorICAgICAgICAsIG1faGFzaEFuZEZsYWdz
KHNfaGFzaEZsYWc4Qml0QnVmZmVyIHwgQnVmZmVyU3Vic3RyaW5nKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKGlzOEJpdCgpKTsKKyAgICAgICAgQVNTRVJUKG1fZGF0YTgpOwogICAgICAgICBBU1NF
UlQobV9sZW5ndGgpOworICAgICAgICBBU1NFUlQobV9zdWJzdHJpbmdCdWZmZXItPmJ1ZmZlck93
bmVyc2hpcCgpICE9IEJ1ZmZlclN1YnN0cmluZyk7CiAgICAgfQogCi0gICAgLy8gVXNlZCB0byBj
cmVhdGUgbmV3IHN0cmluZ3MgdGhhdCBhcmUgYSBzdWJzdHJpbmcgb2YgYW4gZXhpc3RpbmcgU3Ry
aW5nSW1wbCAoQnVmZmVyU3Vic3RyaW5nKQorICAgIC8vIFVzZWQgdG8gY3JlYXRlIG5ldyBzdHJp
bmdzIHRoYXQgYXJlIGEgc3Vic3RyaW5nIG9mIGFuIGV4aXN0aW5nIDE2LWJpdCBTdHJpbmdJbXBs
IChCdWZmZXJTdWJzdHJpbmcpCiAgICAgU3RyaW5nSW1wbChjb25zdCBVQ2hhciogY2hhcmFjdGVy
cywgdW5zaWduZWQgbGVuZ3RoLCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGJhc2UpCiAgICAgICAg
IDogbV9yZWZDb3VudChzX3JlZkNvdW50SW5jcmVtZW50KQogICAgICAgICAsIG1fbGVuZ3RoKGxl
bmd0aCkKLSAgICAgICAgLCBtX2RhdGEoY2hhcmFjdGVycykKKyAgICAgICAgLCBtX2RhdGExNihj
aGFyYWN0ZXJzKQogICAgICAgICAsIG1fc3Vic3RyaW5nQnVmZmVyKGJhc2UubGVha1JlZigpKQog
ICAgICAgICAsIG1faGFzaEFuZEZsYWdzKEJ1ZmZlclN1YnN0cmluZykKICAgICB7Ci0gICAgICAg
IEFTU0VSVChtX2RhdGEpOworICAgICAgICBBU1NFUlQoIWlzOEJpdCgpKTsKKyAgICAgICAgQVNT
RVJUKG1fZGF0YTE2KTsKICAgICAgICAgQVNTRVJUKG1fbGVuZ3RoKTsKICAgICAgICAgQVNTRVJU
KG1fc3Vic3RyaW5nQnVmZmVyLT5idWZmZXJPd25lcnNoaXAoKSAhPSBCdWZmZXJTdWJzdHJpbmcp
OwogICAgIH0KQEAgLTEzNCw4ICsxODEsMjQgQEAgcHVibGljOgogICAgIH5TdHJpbmdJbXBsKCk7
CiAKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBjcmVhdGUoY29uc3QgVUNoYXIq
LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGNy
ZWF0ZShjb25zdCBjaGFyKiwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0
cjxTdHJpbmdJbXBsPiBjcmVhdGUoY29uc3QgY2hhciopOworICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFN0cmluZ0ltcGw+IGNyZWF0ZShjb25zdCBMQ2hhciosIHVuc2lnbmVkIGxlbmd0aCk7CisgICAg
QUxXQVlTX0lOTElORSBzdGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBjcmVhdGUoY29uc3Qg
Y2hhciogcywgdW5zaWduZWQgbGVuZ3RoKSB7IHJldHVybiBjcmVhdGUocywgbGVuZ3RoKTsgfTsK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBjcmVhdGUoY29uc3QgTENoYXIqKTsK
KyAgICBBTFdBWVNfSU5MSU5FIHN0YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGNyZWF0ZShj
b25zdCBjaGFyKiBzKSB7IHJldHVybiBjcmVhdGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hh
cio+KHMpKTsgfTsKKworICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIFBhc3NSZWZQdHI8U3RyaW5n
SW1wbD4gY3JlYXRlOChQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHJlcCwgdW5zaWduZWQgb2Zmc2V0
LCB1bnNpZ25lZCBsZW5ndGgpCisgICAgeworICAgICAgICBBU1NFUlQocmVwKTsKKyAgICAgICAg
QVNTRVJUKGxlbmd0aCA8PSByZXAtPmxlbmd0aCgpKTsKKworICAgICAgICBpZiAoIWxlbmd0aCkK
KyAgICAgICAgICAgIHJldHVybiBlbXB0eSgpOworCisgICAgICAgIEFTU0VSVChyZXAtPmlzOEJp
dCgpKTsKKyAgICAgICAgU3RyaW5nSW1wbCogb3duZXJSZXAgPSAocmVwLT5idWZmZXJPd25lcnNo
aXAoKSA9PSBCdWZmZXJTdWJzdHJpbmcpID8gcmVwLT5tX3N1YnN0cmluZ0J1ZmZlciA6IHJlcC5n
ZXQoKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHJpbmdJbXBsKHJlcC0+bV9kYXRh
OCArIG9mZnNldCwgbGVuZ3RoLCBvd25lclJlcCkpOworICAgIH0KKwogICAgIHN0YXRpYyBBTFdB
WVNfSU5MSU5FIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gY3JlYXRlKFBhc3NSZWZQdHI8U3RyaW5n
SW1wbD4gcmVwLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKICAgICB7CiAgICAg
ICAgIEFTU0VSVChyZXApOwpAQCAtMTQ1LDI3ICsyMDgsMzQgQEAgcHVibGljOgogICAgICAgICAg
ICAgcmV0dXJuIGVtcHR5KCk7CiAKICAgICAgICAgU3RyaW5nSW1wbCogb3duZXJSZXAgPSAocmVw
LT5idWZmZXJPd25lcnNoaXAoKSA9PSBCdWZmZXJTdWJzdHJpbmcpID8gcmVwLT5tX3N1YnN0cmlu
Z0J1ZmZlciA6IHJlcC5nZXQoKTsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHJpbmdJ
bXBsKHJlcC0+bV9kYXRhICsgb2Zmc2V0LCBsZW5ndGgsIG93bmVyUmVwKSk7CisgICAgICAgIGlm
IChyZXAtPmlzOEJpdCgpKQorICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHJpbmdJ
bXBsKHJlcC0+bV9kYXRhOCArIG9mZnNldCwgbGVuZ3RoLCBvd25lclJlcCkpOworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFN0cmluZ0ltcGwocmVwLT5tX2RhdGExNiArIG9mZnNldCwgbGVu
Z3RoLCBvd25lclJlcCkpOwogICAgIH0KIAorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0lt
cGw+IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoLCBMQ2hhciomIGRhdGEpOwog
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5z
aWduZWQgbGVuZ3RoLCBVQ2hhciomIGRhdGEpOwotICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIFBh
c3NSZWZQdHI8U3RyaW5nSW1wbD4gdHJ5Q3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5n
dGgsIFVDaGFyKiYgb3V0cHV0KQorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdGF0aWMgQUxX
QVlTX0lOTElORSBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQo
dW5zaWduZWQgbGVuZ3RoLCBUKiYgb3V0cHV0KQogICAgIHsKICAgICAgICAgaWYgKCFsZW5ndGgp
IHsKICAgICAgICAgICAgIG91dHB1dCA9IDA7CiAgICAgICAgICAgICByZXR1cm4gZW1wdHkoKTsK
ICAgICAgICAgfQogCi0gICAgICAgIGlmIChsZW5ndGggPiAoKHN0ZDo6bnVtZXJpY19saW1pdHM8
dW5zaWduZWQ+OjptYXgoKSAtIHNpemVvZihTdHJpbmdJbXBsKSkgLyBzaXplb2YoVUNoYXIpKSkg
eworICAgICAgICBpZiAobGVuZ3RoID4gKChzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6
bWF4KCkgLSBzaXplb2YoU3RyaW5nSW1wbCkpIC8gc2l6ZW9mKFQpKSkgewogICAgICAgICAgICAg
b3V0cHV0ID0gMDsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAgICAgIFN0
cmluZ0ltcGwqIHJlc3VsdEltcGw7Ci0gICAgICAgIGlmICghdHJ5RmFzdE1hbGxvYyhzaXplb2Yo
VUNoYXIpICogbGVuZ3RoICsgc2l6ZW9mKFN0cmluZ0ltcGwpKS5nZXRWYWx1ZShyZXN1bHRJbXBs
KSkgeworICAgICAgICBpZiAoIXRyeUZhc3RNYWxsb2Moc2l6ZW9mKFQpICogbGVuZ3RoICsgc2l6
ZW9mKFN0cmluZ0ltcGwpKS5nZXRWYWx1ZShyZXN1bHRJbXBsKSkgewogICAgICAgICAgICAgb3V0
cHV0ID0gMDsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9Ci0gICAgICAgIG91dHB1
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VUNoYXIqPihyZXN1bHRJbXBsICsgMSk7CisgICAgICAgIG91
dHB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KHJlc3VsdEltcGwgKyAxKTsKKworICAgICAgICBp
ZiAoc2l6ZW9mKFQpID09IHNpemVvZihjaGFyKSkKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcocmVzdWx0SW1wbCkgU3RyaW5nSW1wbChsZW5ndGgsIEZvcmNlOEJpdENvbnN0cnVjdG9y
KSk7CisKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyhyZXN1bHRJbXBsKSBTdHJpbmdJbXBs
KGxlbmd0aCkpOwogICAgIH0KIApAQCAtMTc0LDcgKzI0NCw5IEBAIHB1YmxpYzoKICAgICAvLyB0
aGUgb3JpZ2luYWxTdHJpbmcgY2FuJ3QgYmUgdXNlZCBhZnRlciB0aGlzIGZ1bmN0aW9uLgogICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHJlYWxsb2NhdGUoUGFzc1JlZlB0cjxTdHJp
bmdJbXBsPiBvcmlnaW5hbFN0cmluZywgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciomIGRhdGEpOwog
Ci0gICAgc3RhdGljIHVuc2lnbmVkIGRhdGFPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoU3RyaW5nSW1wbCwgbV9kYXRhKTsgfQorICAgIHN0YXRpYyB1bnNpZ25lZCBmbGFnc09mZnNl
dCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJpbmdJbXBsLCBtX2hhc2hBbmRGbGFncyk7
IH0KKyAgICBzdGF0aWMgdW5zaWduZWQgZmxhZ0lzOEJpdCgpIHsgcmV0dXJuIHNfaGFzaEZsYWc4
Qml0QnVmZmVyOyB9CisgICAgc3RhdGljIHVuc2lnbmVkIGRhdGFPZmZzZXQoKSB7IHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoU3RyaW5nSW1wbCwgbV9kYXRhOCk7IH0KICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxTdHJpbmdJbXBsPiBjcmVhdGVXaXRoVGVybWluYXRpbmdOdWxsQ2hhcmFjdGVyKGNvbnN0
IFN0cmluZ0ltcGwmKTsKIAogICAgIHRlbXBsYXRlPHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KQEAg
LTE5MSw3ICsyNjMsMTggQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0lt
cGw+IGFkb3B0KFN0cmluZ0J1ZmZlciYpOwogCiAgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Qg
eyByZXR1cm4gbV9sZW5ndGg7IH0KLSAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycygpIGNvbnN0
IHsgcmV0dXJuIG1fZGF0YTsgfQorICAgIGJvb2wgaXM4Qml0KCkgY29uc3QgeyByZXR1cm4gbV9o
YXNoQW5kRmxhZ3MgJiBzX2hhc2hGbGFnOEJpdEJ1ZmZlcjsgfQorCisgICAgLy8gRklYTUU6IFJl
bW92ZSBhbGwgdW5uZWNlc3NhcnkgdXNhZ2VzIG9mIGNoYXJhY3RlcnMoKQorICAgIEFMV0FZU19J
TkxJTkUgY29uc3QgTENoYXIqIGNoYXJhY3RlcnM4KCkgY29uc3QgeyBBU1NFUlQoaXM4Qml0KCkp
OyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIG1fZGF0YTg7IH0KKyAgICBBTFdBWVNfSU5M
SU5FIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzMTYoKSBjb25zdCB7IEFTU0VSVCghaXM4Qml0KCkp
OyByZXR1cm4gbV9kYXRhMTY7IH0KKyAgICBBTFdBWVNfSU5MSU5FIGNvbnN0IFVDaGFyKiBjaGFy
YWN0ZXJzKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghaXM4Qml0KCkpCisgICAgICAgICAg
ICByZXR1cm4gbV9kYXRhMTY7CisKKyAgICAgICAgcmV0dXJuIGdldERhdGExNlNsb3dDYXNlKCk7
CisgICAgfQogCiAgICAgc2l6ZV90IGNvc3QoKQogICAgIHsKQEAgLTIwNiw2ICsyODksNyBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBtX2xlbmd0aDsKICAgICB9CiAKKyAgICBib29sIGhhczE2
Qml0U2hhZG93KCkgY29uc3QgeyByZXR1cm4gbV9oYXNoQW5kRmxhZ3MgJiBzX2hhc2hGbGFnSGFz
MTZCaXRTaGFkb3c7IH0KICAgICBib29sIGlzSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1f
aGFzaEFuZEZsYWdzICYgc19oYXNoRmxhZ0lzSWRlbnRpZmllcjsgfQogICAgIHZvaWQgc2V0SXNJ
ZGVudGlmaWVyKGJvb2wgaXNJZGVudGlmaWVyKQogICAgIHsKQEAgLTIzNSw3ICszMTksOCBAQCBw
cml2YXRlOgogICAgIHZvaWQgc2V0SGFzaCh1bnNpZ25lZCBoYXNoKSBjb25zdAogICAgIHsKICAg
ICAgICAgQVNTRVJUKCFoYXNIYXNoKCkpOwotICAgICAgICBBU1NFUlQoaGFzaCA9PSBTdHJpbmdI
YXNoZXI6OmNvbXB1dGVIYXNoKG1fZGF0YSwgbV9sZW5ndGgpKTsgLy8gTXVsdGlwbGUgY2xpZW50
cyBhc3N1bWUgdGhhdCBTdHJpbmdIYXNoZXIgaXMgdGhlIGNhbm9uaWNhbCBzdHJpbmcgaGFzaCBm
dW5jdGlvbi4KKyAgICAgICAgLy8gTXVsdGlwbGUgY2xpZW50cyBhc3N1bWUgdGhhdCBTdHJpbmdI
YXNoZXIgaXMgdGhlIGNhbm9uaWNhbCBzdHJpbmcgaGFzaCBmdW5jdGlvbi4KKyAgICAgICAgQVNT
RVJUKGhhc2ggPT0gKGlzOEJpdCgpID8gU3RyaW5nSGFzaGVyOjpjb21wdXRlSGFzaChtX2RhdGE4
LCBtX2xlbmd0aCkgOiBTdHJpbmdIYXNoZXI6OmNvbXB1dGVIYXNoKG1fZGF0YTE2LCBtX2xlbmd0
aCkpKTsKICAgICAgICAgQVNTRVJUKCEoaGFzaCAmIChzX2ZsYWdNYXNrIDw8ICg4ICogc2l6ZW9m
KGhhc2gpIC0gc19mbGFnQ291bnQpKSkpOyAvLyBWZXJpZnkgdGhhdCBlbm91Z2ggaGlnaCBiaXRz
IGFyZSBlbXB0eS4KICAgICAgICAgCiAgICAgICAgIGhhc2ggPDw9IHNfZmxhZ0NvdW50OwpAQCAt
MjY0LDggKzM0OSwxMiBAQCBwdWJsaWM6CiAKICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKICAg
ICB7Ci0gICAgICAgIGlmICghaGFzSGFzaCgpKQotICAgICAgICAgICAgc2V0SGFzaChTdHJpbmdI
YXNoZXI6OmNvbXB1dGVIYXNoKG1fZGF0YSwgbV9sZW5ndGgpKTsKKyAgICAgICAgaWYgKCFoYXNI
YXNoKCkpIHsKKyAgICAgICAgICAgIGlmIChpczhCaXQoKSkKKyAgICAgICAgICAgICAgICBzZXRI
YXNoKFN0cmluZ0hhc2hlcjo6Y29tcHV0ZUhhc2gobV9kYXRhOCwgbV9sZW5ndGgpKTsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzZXRIYXNoKFN0cmluZ0hhc2hlcjo6Y29tcHV0
ZUhhc2gobV9kYXRhMTYsIG1fbGVuZ3RoKSk7CisgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGV4
aXN0aW5nSGFzaCgpOwogICAgIH0KIApAQCAtMjkxLDEzICszODAsMzIgQEAgcHVibGljOgogCiAg
ICAgc3RhdGljIFN0cmluZ0ltcGwqIGVtcHR5KCk7CiAKLSAgICBzdGF0aWMgdm9pZCBjb3B5Q2hh
cnMoVUNoYXIqIGRlc3RpbmF0aW9uLCBjb25zdCBVQ2hhciogc291cmNlLCB1bnNpZ25lZCBudW1D
aGFyYWN0ZXJzKQorICAgIC8vIEZJWE1FOiBEb2VzIHRoaXMgcmVhbGx5IGJlbG9uZyBpbiBTdHJp
bmdJbXBsPworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdGF0aWMgdm9pZCBjb3B5Q2hhcnMo
VCogZGVzdGluYXRpb24sIGNvbnN0IFQqIHNvdXJjZSwgdW5zaWduZWQgbnVtQ2hhcmFjdGVycykK
ICAgICB7CisgICAgICAgIGlmIChudW1DaGFyYWN0ZXJzID09IDEpIHsKKyAgICAgICAgICAgICpk
ZXN0aW5hdGlvbiA9ICpzb3VyY2U7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwog
ICAgICAgICBpZiAobnVtQ2hhcmFjdGVycyA8PSBzX2NvcHlDaGFyc0lubGluZUN1dE9mZikgewot
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUNoYXJhY3RlcnM7ICsraSkK
KyAgICAgICAgICAgIHVuc2lnbmVkIGkgPSAwOworI2lmIChDUFUoWDg2KSB8fCBDUFUoWDg2XzY0
KSkKKyAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXJzUGVySW50ID0gc2l6ZW9mKHVpbnQz
Ml90KSAvIHNpemVvZihUKTsKKworICAgICAgICAgICAgaWYgKG51bUNoYXJhY3RlcnMgPiBjaGFy
c1BlckludCkgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIHN0b3BDb3VudCA9IG51bUNoYXJh
Y3RlcnMgJiB+KGNoYXJzUGVySW50IC0gMSk7CisKKyAgICAgICAgICAgICAgICBjb25zdCB1aW50
MzJfdCogc3JjQ2hhcmFjdGVycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihz
b3VyY2UpOworICAgICAgICAgICAgICAgIHVpbnQzMl90KiBkZXN0Q2hhcmFjdGVycyA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0aW5hdGlvbik7CisgICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBqID0gMDsgaSA8IHN0b3BDb3VudDsgaSArPSBjaGFyc1BlckludCwgKytqKQor
ICAgICAgICAgICAgICAgICAgICBkZXN0Q2hhcmFjdGVyc1tqXSA9IHNyY0NoYXJhY3RlcnNbal07
CisgICAgICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgICAgIGZvciAoOyBpIDwgbnVtQ2hhcmFj
dGVyczsgKytpKQogICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uW2ldID0gc291cmNlW2ldOwog
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1lbWNweShkZXN0aW5hdGlvbiwgc291cmNlLCBu
dW1DaGFyYWN0ZXJzICogc2l6ZW9mKFVDaGFyKSk7CisgICAgICAgICAgICBtZW1jcHkoZGVzdGlu
YXRpb24sIHNvdXJjZSwgbnVtQ2hhcmFjdGVycyAqIHNpemVvZihUKSk7CiAgICAgfQogCiAgICAg
Ly8gU29tZSBzdHJpbmcgZmVhdHVyZXMsIGxpa2UgcmVmY291bnRpbmcgYW5kIHRoZSBhdG9taWNp
dHkgZmxhZywgYXJlIG5vdApAQCAtMzA3LDcgKzQxNSwxMyBAQCBwdWJsaWM6CiAKICAgICBQYXNz
UmVmUHRyPFN0cmluZ0ltcGw+IHN1YnN0cmluZyh1bnNpZ25lZCBwb3MsIHVuc2lnbmVkIGxlbiA9
IFVJTlRfTUFYKTsKIAotICAgIFVDaGFyIG9wZXJhdG9yW10odW5zaWduZWQgaSkgeyBBU1NFUlQo
aSA8IG1fbGVuZ3RoKTsgcmV0dXJuIG1fZGF0YVtpXTsgfQorICAgIFVDaGFyIG9wZXJhdG9yW10o
dW5zaWduZWQgaSkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpIDwgbV9sZW5ndGgpOwor
ICAgICAgICBpZiAoaXM4Qml0KCkpCisgICAgICAgICAgICByZXR1cm4gbV9kYXRhOFtpXTsKKyAg
ICAgICAgcmV0dXJuIG1fZGF0YTE2W2ldOworICAgIH0KICAgICBVQ2hhcjMyIGNoYXJhY3RlclN0
YXJ0aW5nQXQodW5zaWduZWQpOwogCiAgICAgYm9vbCBjb250YWluc09ubHlXaGl0ZXNwYWNlKCk7
CkBAIC0zMzEsNiArNDQ1LDcgQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4g
dXBwZXIoKTsKIAogICAgIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gZmlsbChVQ2hhcik7CisgICAg
Ly8gRklYTUU6IERvIHdlIG5lZWQgZmlsbChjaGFyKSBvciBjYW4gd2UganVzdCBkbyB0aGUgcmln
aHQgdGhpbmcgaWYgVUNoYXIgaXMgQVNDSUk/CiAgICAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBm
b2xkQ2FzZSgpOwogCiAgICAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBzdHJpcFdoaXRlU3BhY2Uo
KTsKQEAgLTM0MCwxMSArNDU1LDE0IEBAIHB1YmxpYzoKIAogICAgIFBhc3NSZWZQdHI8U3RyaW5n
SW1wbD4gcmVtb3ZlQ2hhcmFjdGVycyhDaGFyYWN0ZXJNYXRjaEZ1bmN0aW9uUHRyKTsKIAorICAg
IC8vIEZJWE1FOiBEbyB3ZSBuZWVkIGNoYXIgdmVyc2lvbiwgb3IgaXMgaXQgb2theSB0byBqdXN0
IHBhc3MgaW4gYW4gQVNDSUkgY2hhciBmb3IgOC1iaXQ/IFNhbWUgZm9yIHJldmVyc2VGaW5kLCBy
ZXBsYWNlCiAgICAgc2l6ZV90IGZpbmQoVUNoYXIsIHVuc2lnbmVkIGluZGV4ID0gMCk7CiAgICAg
c2l6ZV90IGZpbmQoQ2hhcmFjdGVyTWF0Y2hGdW5jdGlvblB0ciwgdW5zaWduZWQgaW5kZXggPSAw
KTsKLSAgICBzaXplX3QgZmluZChjb25zdCBjaGFyKiwgdW5zaWduZWQgaW5kZXggPSAwKTsKKyAg
ICBzaXplX3QgZmluZChjb25zdCBMQ2hhciosIHVuc2lnbmVkIGluZGV4ID0gMCk7CisgICAgQUxX
QVlTX0lOTElORSBzaXplX3QgZmluZChjb25zdCBjaGFyKiBzLCB1bnNpZ25lZCBpbmRleCA9IDAp
IHsgcmV0dXJuIGZpbmQocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KHMpLCBpbmRleCk7
IH07CiAgICAgc2l6ZV90IGZpbmQoU3RyaW5nSW1wbCosIHVuc2lnbmVkIGluZGV4ID0gMCk7Ci0g
ICAgc2l6ZV90IGZpbmRJZ25vcmluZ0Nhc2UoY29uc3QgY2hhciosIHVuc2lnbmVkIGluZGV4ID0g
MCk7CisgICAgc2l6ZV90IGZpbmRJZ25vcmluZ0Nhc2UoY29uc3QgTENoYXIqLCB1bnNpZ25lZCBp
bmRleCA9IDApOworICAgIEFMV0FZU19JTkxJTkUgc2l6ZV90IGZpbmRJZ25vcmluZ0Nhc2UoY29u
c3QgY2hhciogcywgdW5zaWduZWQgaW5kZXggPSAwKSB7IHJldHVybiBmaW5kSWdub3JpbmdDYXNl
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihzKSwgaW5kZXgpOyB9OwogICAgIHNpemVf
dCBmaW5kSWdub3JpbmdDYXNlKFN0cmluZ0ltcGwqLCB1bnNpZ25lZCBpbmRleCA9IDApOwogCiAg
ICAgc2l6ZV90IHJldmVyc2VGaW5kKFVDaGFyLCB1bnNpZ25lZCBpbmRleCA9IFVJTlRfTUFYKTsK
QEAgLTM3Niw2ICs0OTQsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgaXNTdGF0aWMoKSBjb25zdCB7
IHJldHVybiBtX3JlZkNvdW50ICYgc19yZWZDb3VudEZsYWdJc1N0YXRpY1N0cmluZzsgfQogICAg
IHRlbXBsYXRlIDxjbGFzcyBVQ2hhclByZWRpY2F0ZT4gUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBz
dHJpcE1hdGNoZWRDaGFyYWN0ZXJzKFVDaGFyUHJlZGljYXRlKTsKICAgICB0ZW1wbGF0ZSA8Y2xh
c3MgVUNoYXJQcmVkaWNhdGU+IFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gc2ltcGxpZnlNYXRjaGVk
Q2hhcmFjdGVyc1RvU3BhY2UoVUNoYXJQcmVkaWNhdGUpOworICAgIE5FVkVSX0lOTElORSBjb25z
dCBVQ2hhciogZ2V0RGF0YTE2U2xvd0Nhc2UoKSBjb25zdDsKIAogICAgIC8vIFRoZSBib3R0b20g
Yml0IGluIHRoZSByZWYgY291bnQgaW5kaWNhdGVzIGEgc3RhdGljIChpbW1vcnRhbCkgc3RyaW5n
LgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzX3JlZkNvdW50RmxhZ0lzU3RhdGljU3RyaW5n
ID0gMHgxOwpAQCAtMzg2LDYgKzUwNSw4IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIHNfZmxhZ01hc2sgPSAoMXUgPDwgc19mbGFnQ291bnQpIC0gMTsKICAgICBDT01QSUxF
X0FTU0VSVChzX2ZsYWdDb3VudCA9PSBTdHJpbmdIYXNoZXI6OmZsYWdDb3VudCwgU3RyaW5nSGFz
aGVyX3Jlc2VydmVzX2Vub3VnaF9iaXRzX2Zvcl9TdHJpbmdJbXBsX2ZsYWdzKTsKIAorICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBzX2hhc2hGbGFnSGFzMTZCaXRTaGFkb3cgPSAxdSA8PCA3Owor
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzX2hhc2hGbGFnOEJpdEJ1ZmZlciA9IDF1IDw8IDY7
CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNfaGFzaEZsYWdIYXNUZXJtaW5hdGluZ051bGxD
aGFyYWN0ZXIgPSAxdSA8PCA1OwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzX2hhc2hGbGFn
SXNBdG9taWMgPSAxdSA8PCA0OwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzX2hhc2hGbGFn
RGlkUmVwb3J0Q29zdCA9IDF1IDw8IDM7CkBAIC0zOTQsMjQgKzUxNSwzMyBAQCBwcml2YXRlOgog
CiAgICAgdW5zaWduZWQgbV9yZWZDb3VudDsKICAgICB1bnNpZ25lZCBtX2xlbmd0aDsKLSAgICBj
b25zdCBVQ2hhciogbV9kYXRhOworICAgIHVuaW9uIHsKKyAgICAgICAgY29uc3QgTENoYXIqIG1f
ZGF0YTg7CisgICAgICAgIGNvbnN0IFVDaGFyKiBtX2RhdGExNjsKKyAgICB9OwogICAgIHVuaW9u
IHsKICAgICAgICAgdm9pZCogbV9idWZmZXI7CiAgICAgICAgIFN0cmluZ0ltcGwqIG1fc3Vic3Ry
aW5nQnVmZmVyOworICAgICAgICBtdXRhYmxlIFVDaGFyKiBtX2NvcHlEYXRhMTY7CiAgICAgfTsK
ICAgICBtdXRhYmxlIHVuc2lnbmVkIG1faGFzaEFuZEZsYWdzOwogfTsKIAogYm9vbCBlcXVhbChj
b25zdCBTdHJpbmdJbXBsKiwgY29uc3QgU3RyaW5nSW1wbCopOwotYm9vbCBlcXVhbChjb25zdCBT
dHJpbmdJbXBsKiwgY29uc3QgY2hhciopOwotaW5saW5lIGJvb2wgZXF1YWwoY29uc3QgY2hhciog
YSwgU3RyaW5nSW1wbCogYikgeyByZXR1cm4gZXF1YWwoYiwgYSk7IH0KK2Jvb2wgZXF1YWwoY29u
c3QgU3RyaW5nSW1wbCosIGNvbnN0IExDaGFyKik7CitpbmxpbmUgYm9vbCBlcXVhbChjb25zdCBT
dHJpbmdJbXBsKiBhLCBjb25zdCBjaGFyKiBiKSB7IHJldHVybiBlcXVhbChhLCByZWludGVycHJl
dF9jYXN0PGNvbnN0IExDaGFyKj4oYikpOyB9Citib29sIGVxdWFsKGNvbnN0IFN0cmluZ0ltcGwq
LCBjb25zdCBMQ2hhciosIHVuc2lnbmVkKTsKK2lubGluZSBib29sIGVxdWFsKGNvbnN0IExDaGFy
KiBhLCBTdHJpbmdJbXBsKiBiKSB7IHJldHVybiBlcXVhbChiLCBhKTsgfQoraW5saW5lIGJvb2wg
ZXF1YWwoY29uc3QgY2hhciogYSwgU3RyaW5nSW1wbCogYikgeyByZXR1cm4gZXF1YWwoYiwgcmVp
bnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KGEpKTsgfQogYm9vbCBlcXVhbChjb25zdCBTdHJp
bmdJbXBsKiwgY29uc3QgVUNoYXIqLCB1bnNpZ25lZCk7CiAKIGJvb2wgZXF1YWxJZ25vcmluZ0Nh
c2UoU3RyaW5nSW1wbCosIFN0cmluZ0ltcGwqKTsKLWJvb2wgZXF1YWxJZ25vcmluZ0Nhc2UoU3Ry
aW5nSW1wbCosIGNvbnN0IGNoYXIqKTsKLWlubGluZSBib29sIGVxdWFsSWdub3JpbmdDYXNlKGNv
bnN0IGNoYXIqIGEsIFN0cmluZ0ltcGwqIGIpIHsgcmV0dXJuIGVxdWFsSWdub3JpbmdDYXNlKGIs
IGEpOyB9Ci1ib29sIGVxdWFsSWdub3JpbmdDYXNlKGNvbnN0IFVDaGFyKiBhLCBjb25zdCBjaGFy
KiBiLCB1bnNpZ25lZCBsZW5ndGgpOwotaW5saW5lIGJvb2wgZXF1YWxJZ25vcmluZ0Nhc2UoY29u
c3QgY2hhciogYSwgY29uc3QgVUNoYXIqIGIsIHVuc2lnbmVkIGxlbmd0aCkgeyByZXR1cm4gZXF1
YWxJZ25vcmluZ0Nhc2UoYiwgYSwgbGVuZ3RoKTsgfQorYm9vbCBlcXVhbElnbm9yaW5nQ2FzZShT
dHJpbmdJbXBsKiwgY29uc3QgTENoYXIqKTsKK2lubGluZSBib29sIGVxdWFsSWdub3JpbmdDYXNl
KGNvbnN0IExDaGFyKiBhLCBTdHJpbmdJbXBsKiBiKSB7IHJldHVybiBlcXVhbElnbm9yaW5nQ2Fz
ZShiLCBhKTsgfQorYm9vbCBlcXVhbElnbm9yaW5nQ2FzZShjb25zdCBVQ2hhciosIGNvbnN0IExD
aGFyKiwgdW5zaWduZWQpOworaW5saW5lIGJvb2wgZXF1YWxJZ25vcmluZ0Nhc2UoY29uc3QgVUNo
YXIqIGEsIGNvbnN0IGNoYXIqIGIsIHVuc2lnbmVkIGxlbmd0aCkgeyByZXR1cm4gZXF1YWxJZ25v
cmluZ0Nhc2UoYSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KGIpLCBsZW5ndGgpOyB9
CitpbmxpbmUgYm9vbCBlcXVhbElnbm9yaW5nQ2FzZShjb25zdCBMQ2hhciogYSwgY29uc3QgVUNo
YXIqIGIsIHVuc2lnbmVkIGxlbmd0aCkgeyByZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2UoYiwgYSwg
bGVuZ3RoKTsgfQoraW5saW5lIGJvb2wgZXF1YWxJZ25vcmluZ0Nhc2UoY29uc3QgY2hhciogYSwg
Y29uc3QgVUNoYXIqIGIsIHVuc2lnbmVkIGxlbmd0aCkgeyByZXR1cm4gZXF1YWxJZ25vcmluZ0Nh
c2UoYiwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KGEpLCBsZW5ndGgpOyB9CiAKIGJv
b2wgZXF1YWxJZ25vcmluZ051bGxpdHkoU3RyaW5nSW1wbCosIFN0cmluZ0ltcGwqKTsKIApAQCAt
NDM2LDcgKzU2Niw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc1NwYWNlT3JOZXdsaW5lKFVDaGEK
IAogaW5saW5lIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6aXNvbGF0ZWRDb3B5
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gY3JlYXRlKG1fZGF0YSwgbV9sZW5ndGgpOworICAgIGlm
IChpczhCaXQoKSkKKyAgICAgICAgcmV0dXJuIGNyZWF0ZShtX2RhdGE4LCBtX2xlbmd0aCk7Cisg
ICAgcmV0dXJuIGNyZWF0ZShtX2RhdGExNiwgbV9sZW5ndGgpOwogfQogCiBzdHJ1Y3QgU3RyaW5n
SGFzaDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9XVEZTdHJpbmcuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9XVEZTdHJpbmcu
Y3BwCShyZXZpc2lvbiA5ODQ5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9X
VEZTdHJpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSwxNyArNjEsMjcgQEAgU3RyaW5nOjpT
dHJpbmcoY29uc3QgVUNoYXIqIHN0cikKIH0KIAogLy8gQ29uc3RydWN0IGEgc3RyaW5nIHdpdGgg
bGF0aW4xIGRhdGEuCi1TdHJpbmc6OlN0cmluZyhjb25zdCBjaGFyKiBjaGFyYWN0ZXJzLCB1bnNp
Z25lZCBsZW5ndGgpCitTdHJpbmc6OlN0cmluZyhjb25zdCBMQ2hhciogY2hhcmFjdGVycywgdW5z
aWduZWQgbGVuZ3RoKQogICAgIDogbV9pbXBsKGNoYXJhY3RlcnMgPyBTdHJpbmdJbXBsOjpjcmVh
dGUoY2hhcmFjdGVycywgbGVuZ3RoKSA6IDApCiB7CiB9CiAKK1N0cmluZzo6U3RyaW5nKGNvbnN0
IGNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKKyAgICA6IG1faW1wbChjaGFyYWN0
ZXJzID8gU3RyaW5nSW1wbDo6Y3JlYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihj
aGFyYWN0ZXJzKSwgbGVuZ3RoKSA6IDApCit7Cit9CisKIC8vIENvbnN0cnVjdCBhIHN0cmluZyB3
aXRoIGxhdGluMSBkYXRhLCBmcm9tIGEgbnVsbC10ZXJtaW5hdGVkIHNvdXJjZS4KLVN0cmluZzo6
U3RyaW5nKGNvbnN0IGNoYXIqIGNoYXJhY3RlcnMpCitTdHJpbmc6OlN0cmluZyhjb25zdCBMQ2hh
ciogY2hhcmFjdGVycykKICAgICA6IG1faW1wbChjaGFyYWN0ZXJzID8gU3RyaW5nSW1wbDo6Y3Jl
YXRlKGNoYXJhY3RlcnMpIDogMCkKIHsKIH0KIAorU3RyaW5nOjpTdHJpbmcoY29uc3QgY2hhciog
Y2hhcmFjdGVycykKKyAgICA6IG1faW1wbChjaGFyYWN0ZXJzID8gU3RyaW5nSW1wbDo6Y3JlYXRl
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihjaGFyYWN0ZXJzKSkgOiAwKQoreworfQor
CiB2b2lkIFN0cmluZzo6YXBwZW5kKGNvbnN0IFN0cmluZyYgc3RyKQogewogICAgIGlmIChzdHIu
aXNFbXB0eSgpKQpAQCAtOTUsNyArMTA1LDcgQEAgdm9pZCBTdHJpbmc6OmFwcGVuZChjb25zdCBT
dHJpbmcmIHN0cikKICAgICB9CiB9CiAKLXZvaWQgU3RyaW5nOjphcHBlbmQoY2hhciBjKQordm9p
ZCBTdHJpbmc6OmFwcGVuZChMQ2hhciBjKQogewogICAgIC8vIEZJWE1FOiBUaGlzIGlzIGV4dHJl
bWVseSBpbmVmZmljaWVudC4gU28gbXVjaCBzbyB0aGF0IHdlIG1pZ2h0IHdhbnQgdG8gdGFrZSB0
aGlzCiAgICAgLy8gb3V0IG9mIFN0cmluZydzIEFQSS4gV2UgY2FuIG1ha2UgaXQgYmV0dGVyIGJ5
IG9wdGltaXppbmcgdGhlIGNhc2Ugd2hlcmUgZXhhY3RseQpAQCAtMzM4LDcgKzM0OCw3IEBAIFN0
cmluZyBTdHJpbmc6OmZvcm1hdChjb25zdCBjaGFyICpmb3JtYXQKICAgICB2YV9lbmQoYXJncyk7
CiAKICAgICBRQnl0ZUFycmF5IGJhID0gYnVmZmVyLnRvVXRmOCgpOwotICAgIHJldHVybiBTdHJp
bmdJbXBsOjpjcmVhdGUoYmEuY29uc3REYXRhKCksIGJhLmxlbmd0aCgpKTsKKyAgICByZXR1cm4g
U3RyaW5nSW1wbDo6Y3JlYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihiYS5jb25z
dERhdGEoKSksIGJhLmxlbmd0aCgpKTsKIAogI2VsaWYgT1MoV0lOQ0UpCiAgICAgdmFfbGlzdCBh
cmdzOwpAQCAtMzU1LDcgKzM2NSw3IEBAIFN0cmluZyBTdHJpbmc6OmZvcm1hdChjb25zdCBjaGFy
ICpmb3JtYXQKICAgICAgICAgaWYgKHdyaXR0ZW4gPT0gMCkKICAgICAgICAgICAgIHJldHVybiBT
dHJpbmcoIiIpOwogICAgICAgICBpZiAod3JpdHRlbiA+IDApCi0gICAgICAgICAgICByZXR1cm4g
U3RyaW5nSW1wbDo6Y3JlYXRlKGJ1ZmZlci5kYXRhKCksIHdyaXR0ZW4pOworICAgICAgICAgICAg
cmV0dXJuIFN0cmluZ0ltcGw6OmNyZWF0ZShyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4o
YnVmZmVyLmRhdGEoKSksIHdyaXR0ZW4pOwogICAgICAgICAKICAgICAgICAgYnVmZmVyU2l6ZSA8
PD0gMTsKICAgICAgICAgYnVmZmVyLnJlc2l6ZShidWZmZXJTaXplKTsKQEAgLTM5Niw3ICs0MDYs
NyBAQCBTdHJpbmcgU3RyaW5nOjpmb3JtYXQoY29uc3QgY2hhciAqZm9ybWF0CiAKICAgICB2YV9l
bmQoYXJncyk7CiAgICAgCi0gICAgcmV0dXJuIFN0cmluZ0ltcGw6OmNyZWF0ZShidWZmZXIuZGF0
YSgpLCBsZW4pOworICAgIHJldHVybiBTdHJpbmdJbXBsOjpjcmVhdGUocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBMQ2hhcio+KGJ1ZmZlci5kYXRhKCkpLCBsZW4pOwogI2VuZGlmCiB9CiAKQEAgLTcx
Nyw3ICs3MjcsNyBAQCBDU3RyaW5nIFN0cmluZzo6dXRmOChib29sIHN0cmljdCkgY29uc3QKICAg
ICByZXR1cm4gQ1N0cmluZyhidWZmZXJWZWN0b3IuZGF0YSgpLCBidWZmZXIgLSBidWZmZXJWZWN0
b3IuZGF0YSgpKTsKIH0KIAotU3RyaW5nIFN0cmluZzo6ZnJvbVVURjgoY29uc3QgY2hhciogc3Ry
aW5nU3RhcnQsIHNpemVfdCBsZW5ndGgpCitTdHJpbmcgU3RyaW5nOjpmcm9tVVRGOChjb25zdCBM
Q2hhciogc3RyaW5nU3RhcnQsIHNpemVfdCBsZW5ndGgpCiB7CiAgICAgaWYgKGxlbmd0aCA+IG51
bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpCiAgICAgICAgIENSQVNIKCk7CkBAIC03MzIs
OCArNzQyLDggQEAgU3RyaW5nIFN0cmluZzo6ZnJvbVVURjgoY29uc3QgY2hhciogc3RyaQogICAg
IFVDaGFyKiBidWZmZXJFbmQgPSBidWZmZXIgKyBsZW5ndGg7CiAKICAgICAvLyBUcnkgY29udmVy
dGluZyBpbnRvIHRoZSBidWZmZXIuCi0gICAgY29uc3QgY2hhciogc3RyaW5nQ3VycmVudCA9IHN0
cmluZ1N0YXJ0OwotICAgIGlmIChjb252ZXJ0VVRGOFRvVVRGMTYoJnN0cmluZ0N1cnJlbnQsIHN0
cmluZ1N0YXJ0ICsgbGVuZ3RoLCAmYnVmZmVyLCBidWZmZXJFbmQpICE9IGNvbnZlcnNpb25PSykK
KyAgICBjb25zdCBjaGFyKiBzdHJpbmdDdXJyZW50ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBj
aGFyKj4oc3RyaW5nU3RhcnQpOworICAgIGlmIChjb252ZXJ0VVRGOFRvVVRGMTYoJnN0cmluZ0N1
cnJlbnQsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhciAqPihzdHJpbmdTdGFydCArIGxlbmd0
aCksICZidWZmZXIsIGJ1ZmZlckVuZCkgIT0gY29udmVyc2lvbk9LKQogICAgICAgICByZXR1cm4g
U3RyaW5nKCk7CiAKICAgICAvLyBzdHJpbmdCdWZmZXIgaXMgZnVsbCAodGhlIGlucHV0IG11c3Qg
aGF2ZSBiZWVuIGFsbCBhc2NpaSkgc28ganVzdCByZXR1cm4gaXQhCkBAIC03NDYsMTQgKzc1Niwx
NCBAQCBTdHJpbmcgU3RyaW5nOjpmcm9tVVRGOChjb25zdCBjaGFyKiBzdHJpCiAgICAgcmV0dXJu
IFN0cmluZyhzdHJpbmdCdWZmZXIuY2hhcmFjdGVycygpLCB1dGYxNkxlbmd0aCk7CiB9CiAKLVN0
cmluZyBTdHJpbmc6OmZyb21VVEY4KGNvbnN0IGNoYXIqIHN0cmluZykKK1N0cmluZyBTdHJpbmc6
OmZyb21VVEY4KGNvbnN0IExDaGFyKiBzdHJpbmcpCiB7CiAgICAgaWYgKCFzdHJpbmcpCiAgICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICByZXR1cm4gZnJvbVVURjgoc3RyaW5nLCBzdHJsZW4o
c3RyaW5nKSk7CisgICAgcmV0dXJuIGZyb21VVEY4KHN0cmluZywgc3RybGVuKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgY2hhcio+KHN0cmluZykpKTsKIH0KIAotU3RyaW5nIFN0cmluZzo6ZnJvbVVU
RjhXaXRoTGF0aW4xRmFsbGJhY2soY29uc3QgY2hhciogc3RyaW5nLCBzaXplX3Qgc2l6ZSkKK1N0
cmluZyBTdHJpbmc6OmZyb21VVEY4V2l0aExhdGluMUZhbGxiYWNrKGNvbnN0IExDaGFyKiBzdHJp
bmcsIHNpemVfdCBzaXplKQogewogICAgIFN0cmluZyB1dGY4ID0gZnJvbVVURjgoc3RyaW5nLCBz
aXplKTsKICAgICBpZiAoIXV0ZjgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3Rl
eHQvV1RGU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90
ZXh0L1dURlN0cmluZy5oCShyZXZpc2lvbiA5ODQ5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvdGV4dC9XVEZTdHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtODksOSArODksMTEgQEAg
cHVibGljOgogICAgIFdURl9FWFBPUlRfUFJJVkFURSBTdHJpbmcoY29uc3QgVUNoYXIqKTsKIAog
ICAgIC8vIENvbnN0cnVjdCBhIHN0cmluZyB3aXRoIGxhdGluMSBkYXRhLgorICAgIFdURl9FWFBP
UlRfUFJJVkFURSBTdHJpbmcoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0
aCk7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIFN0cmluZyhjb25zdCBjaGFyKiBjaGFyYWN0ZXJz
LCB1bnNpZ25lZCBsZW5ndGgpOwogCiAgICAgLy8gQ29uc3RydWN0IGEgc3RyaW5nIHdpdGggbGF0
aW4xIGRhdGEsIGZyb20gYSBudWxsLXRlcm1pbmF0ZWQgc291cmNlLgorICAgIFdURl9FWFBPUlRf
UFJJVkFURSBTdHJpbmcoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMpOwogICAgIFdURl9FWFBPUlRf
UFJJVkFURSBTdHJpbmcoY29uc3QgY2hhciogY2hhcmFjdGVycyk7CiAKICAgICAvLyBDb25zdHJ1
Y3QgYSBzdHJpbmcgcmVmZXJlbmNpbmcgYW4gZXhpc3RpbmcgU3RyaW5nSW1wbC4KQEAgLTE1NSw3
ICsxNTcsNyBAQCBwdWJsaWM6CiAgICAgICAgIHsgcmV0dXJuIG1faW1wbCA/IG1faW1wbC0+Zmlu
ZChzdHIuaW1wbCgpLCBzdGFydCkgOiBub3RGb3VuZDsgfQogICAgIHNpemVfdCBmaW5kKENoYXJh
Y3Rlck1hdGNoRnVuY3Rpb25QdHIgbWF0Y2hGdW5jdGlvbiwgdW5zaWduZWQgc3RhcnQgPSAwKSBj
b25zdAogICAgICAgICB7IHJldHVybiBtX2ltcGwgPyBtX2ltcGwtPmZpbmQobWF0Y2hGdW5jdGlv
biwgc3RhcnQpIDogbm90Rm91bmQ7IH0KLSAgICBzaXplX3QgZmluZChjb25zdCBjaGFyKiBzdHIs
IHVuc2lnbmVkIHN0YXJ0ID0gMCkgY29uc3QKKyAgICBzaXplX3QgZmluZChjb25zdCBMQ2hhciog
c3RyLCB1bnNpZ25lZCBzdGFydCA9IDApIGNvbnN0CiAgICAgICAgIHsgcmV0dXJuIG1faW1wbCA/
IG1faW1wbC0+ZmluZChzdHIsIHN0YXJ0KSA6IG5vdEZvdW5kOyB9CiAKICAgICAvLyBGaW5kIHRo
ZSBsYXN0IGluc3RhbmNlIG9mIGEgc2luZ2xlIGNoYXJhY3RlciBvciBzdHJpbmcuCkBAIC0xNjUs
NyArMTY3LDcgQEAgcHVibGljOgogICAgICAgICB7IHJldHVybiBtX2ltcGwgPyBtX2ltcGwtPnJl
dmVyc2VGaW5kKHN0ci5pbXBsKCksIHN0YXJ0KSA6IG5vdEZvdW5kOyB9CiAKICAgICAvLyBDYXNl
IGluc2Vuc2l0aXZlIHN0cmluZyBtYXRjaGluZy4KLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc2l6
ZV90IGZpbmRJZ25vcmluZ0Nhc2UoY29uc3QgY2hhciogc3RyLCB1bnNpZ25lZCBzdGFydCA9IDAp
IGNvbnN0CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHNpemVfdCBmaW5kSWdub3JpbmdDYXNlKGNv
bnN0IExDaGFyKiBzdHIsIHVuc2lnbmVkIHN0YXJ0ID0gMCkgY29uc3QKICAgICAgICAgeyByZXR1
cm4gbV9pbXBsID8gbV9pbXBsLT5maW5kSWdub3JpbmdDYXNlKHN0ciwgc3RhcnQpIDogbm90Rm91
bmQ7IH0KICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc2l6ZV90IGZpbmRJZ25vcmluZ0Nhc2UoY29u
c3QgU3RyaW5nJiBzdHIsIHVuc2lnbmVkIHN0YXJ0ID0gMCkgY29uc3QKICAgICAgICAgeyByZXR1
cm4gbV9pbXBsID8gbV9pbXBsLT5maW5kSWdub3JpbmdDYXNlKHN0ci5pbXBsKCksIHN0YXJ0KSA6
IG5vdEZvdW5kOyB9CkBAIC0xNzMsNyArMTc1LDcgQEAgcHVibGljOgogICAgICAgICB7IHJldHVy
biBtX2ltcGwgPyBtX2ltcGwtPnJldmVyc2VGaW5kSWdub3JpbmdDYXNlKHN0ci5pbXBsKCksIHN0
YXJ0KSA6IG5vdEZvdW5kOyB9CiAKICAgICAvLyBXcmFwcGVycyBmb3IgZmluZCAmIHJldmVyc2VG
aW5kIGFkZGluZyBkeW5hbWljIHNlbnNpdGl2aXR5IGNoZWNrLgotICAgIHNpemVfdCBmaW5kKGNv
bnN0IGNoYXIqIHN0ciwgdW5zaWduZWQgc3RhcnQsIGJvb2wgY2FzZVNlbnNpdGl2ZSkgY29uc3QK
KyAgICBzaXplX3QgZmluZChjb25zdCBMQ2hhciogc3RyLCB1bnNpZ25lZCBzdGFydCwgYm9vbCBj
YXNlU2Vuc2l0aXZlKSBjb25zdAogICAgICAgICB7IHJldHVybiBjYXNlU2Vuc2l0aXZlID8gZmlu
ZChzdHIsIHN0YXJ0KSA6IGZpbmRJZ25vcmluZ0Nhc2Uoc3RyLCBzdGFydCk7IH0KICAgICBzaXpl
X3QgZmluZChjb25zdCBTdHJpbmcmIHN0ciwgdW5zaWduZWQgc3RhcnQsIGJvb2wgY2FzZVNlbnNp
dGl2ZSkgY29uc3QKICAgICAgICAgeyByZXR1cm4gY2FzZVNlbnNpdGl2ZSA/IGZpbmQoc3RyLCBz
dGFydCkgOiBmaW5kSWdub3JpbmdDYXNlKHN0ciwgc3RhcnQpOyB9CkBAIC0xODUsNyArMTg3LDcg
QEAgcHVibGljOgogICAgIFdURl9FWFBPUlRfUFJJVkFURSBVQ2hhcjMyIGNoYXJhY3RlclN0YXJ0
aW5nQXQodW5zaWduZWQpIGNvbnN0OyAvLyBEaXR0by4KICAgICAKICAgICBib29sIGNvbnRhaW5z
KFVDaGFyIGMpIGNvbnN0IHsgcmV0dXJuIGZpbmQoYykgIT0gbm90Rm91bmQ7IH0KLSAgICBib29s
IGNvbnRhaW5zKGNvbnN0IGNoYXIqIHN0ciwgYm9vbCBjYXNlU2Vuc2l0aXZlID0gdHJ1ZSkgY29u
c3QgeyByZXR1cm4gZmluZChzdHIsIDAsIGNhc2VTZW5zaXRpdmUpICE9IG5vdEZvdW5kOyB9Cisg
ICAgYm9vbCBjb250YWlucyhjb25zdCBMQ2hhciogc3RyLCBib29sIGNhc2VTZW5zaXRpdmUgPSB0
cnVlKSBjb25zdCB7IHJldHVybiBmaW5kKHN0ciwgMCwgY2FzZVNlbnNpdGl2ZSkgIT0gbm90Rm91
bmQ7IH0KICAgICBib29sIGNvbnRhaW5zKGNvbnN0IFN0cmluZyYgc3RyLCBib29sIGNhc2VTZW5z
aXRpdmUgPSB0cnVlKSBjb25zdCB7IHJldHVybiBmaW5kKHN0ciwgMCwgY2FzZVNlbnNpdGl2ZSkg
IT0gbm90Rm91bmQ7IH0KIAogICAgIGJvb2wgc3RhcnRzV2l0aChjb25zdCBTdHJpbmcmIHMsIGJv
b2wgY2FzZVNlbnNpdGl2ZSA9IHRydWUpIGNvbnN0CkBAIC0xOTQsNyArMTk2LDggQEAgcHVibGlj
OgogICAgICAgICB7IHJldHVybiBtX2ltcGwgPyBtX2ltcGwtPmVuZHNXaXRoKHMuaW1wbCgpLCBj
YXNlU2Vuc2l0aXZlKSA6IHMuaXNFbXB0eSgpOyB9CiAKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUg
dm9pZCBhcHBlbmQoY29uc3QgU3RyaW5nJik7Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQg
YXBwZW5kKGNoYXIpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGFwcGVuZChMQ2hhcik7
CisgICAgaW5saW5lIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGFwcGVuZChjaGFyIGMpIHsgYXBw
ZW5kKHN0YXRpY19jYXN0PExDaGFyPihjKSk7IH07CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZv
aWQgYXBwZW5kKFVDaGFyKTsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBhcHBlbmQoY29u
c3QgVUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgpOwogICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lk
IGluc2VydChjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCBwb3MpOwpAQCAtMjk5LDExICszMDIsMTQg
QEAgcHVibGljOgogCiAgICAgLy8gU3RyaW5nOjpmcm9tVVRGOCB3aWxsIHJldHVybiBhIG51bGwg
c3RyaW5nIGlmCiAgICAgLy8gdGhlIGlucHV0IGRhdGEgY29udGFpbnMgaW52YWxpZCBVVEYtOCBz
ZXF1ZW5jZXMuCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJpbmcgZnJvbVVURjgo
Y29uc3QgY2hhciosIHNpemVfdCk7Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJp
bmcgZnJvbVVURjgoY29uc3QgY2hhciopOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMg
U3RyaW5nIGZyb21VVEY4KGNvbnN0IExDaGFyKiwgc2l6ZV90KTsKKyAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIFN0cmluZyBmcm9tVVRGOChjb25zdCBMQ2hhciopOworICAgIGlubGluZSBX
VEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cmluZyBmcm9tVVRGOChjb25zdCBjaGFyKiBzLCBz
aXplX3QgbGVuZ3RoKSB7IHJldHVybiBmcm9tVVRGOChyZWludGVycHJldF9jYXN0PGNvbnN0IExD
aGFyKj4ocyksIGxlbmd0aCk7IH07CisgICAgaW5saW5lIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0
aWMgU3RyaW5nIGZyb21VVEY4KGNvbnN0IGNoYXIqIHMpIHsgcmV0dXJuIGZyb21VVEY4KHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihzKSk7IH07CiAKICAgICAvLyBUcmllcyB0byBjb252
ZXJ0IHRoZSBwYXNzZWQgaW4gc3RyaW5nIHRvIFVURi04LCBidXQgd2lsbCBmYWxsIGJhY2sgdG8g
TGF0aW4tMSBpZiB0aGUgc3RyaW5nIGlzIG5vdCB2YWxpZCBVVEYtOC4KLSAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIFN0cmluZyBmcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFjayhjb25zdCBj
aGFyKiwgc2l6ZV90KTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cmluZyBmcm9t
VVRGOFdpdGhMYXRpbjFGYWxsYmFjayhjb25zdCBMQ2hhciosIHNpemVfdCk7CisgICAgaW5saW5l
IFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RyaW5nIGZyb21VVEY4V2l0aExhdGluMUZhbGxi
YWNrKGNvbnN0IGNoYXIqIHMsIHNpemVfdCBsZW5ndGgpIHsgcmV0dXJuIGZyb21VVEY4V2l0aExh
dGluMUZhbGxiYWNrKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihzKSwgbGVuZ3RoKTsg
fTsKICAgICAKICAgICAvLyBEZXRlcm1pbmVzIHRoZSB3cml0aW5nIGRpcmVjdGlvbiB1c2luZyB0
aGUgVW5pY29kZSBCaWRpIEFsZ29yaXRobSBydWxlcyBQMiBhbmQgUDMuCiAgICAgV1RGOjpVbmlj
b2RlOjpEaXJlY3Rpb24gZGVmYXVsdFdyaXRpbmdEaXJlY3Rpb24oYm9vbCogaGFzU3Ryb25nRGly
ZWN0aW9uYWxpdHkgPSAwKSBjb25zdApAQCAtMzM4LDE2ICszNDQsMjIgQEAgUURhdGFTdHJlYW0m
IG9wZXJhdG9yPj4oUURhdGFTdHJlYW0mIHN0cgogaW5saW5lIFN0cmluZyYgb3BlcmF0b3IrPShT
dHJpbmcmIGEsIGNvbnN0IFN0cmluZyYgYikgeyBhLmFwcGVuZChiKTsgcmV0dXJuIGE7IH0KIAog
aW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHJpbmcmIGEsIGNvbnN0IFN0cmluZyYgYikg
eyByZXR1cm4gZXF1YWwoYS5pbXBsKCksIGIuaW1wbCgpKTsgfQotaW5saW5lIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBTdHJpbmcmIGEsIGNvbnN0IGNoYXIqIGIpIHsgcmV0dXJuIGVxdWFsKGEuaW1w
bCgpLCBiKTsgfQotaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBjaGFyKiBhLCBjb25zdCBT
dHJpbmcmIGIpIHsgcmV0dXJuIGVxdWFsKGEsIGIuaW1wbCgpKTsgfQoraW5saW5lIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBTdHJpbmcmIGEsIGNvbnN0IExDaGFyKiBiKSB7IHJldHVybiBlcXVhbChh
LmltcGwoKSwgYik7IH0KK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgU3RyaW5nJiBhLCBj
b25zdCBjaGFyKiBiKSB7IHJldHVybiBlcXVhbChhLmltcGwoKSwgcmVpbnRlcnByZXRfY2FzdDxj
b25zdCBMQ2hhcio+KGIpKTsgfQoraW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBMQ2hhciog
YSwgY29uc3QgU3RyaW5nJiBiKSB7IHJldHVybiBlcXVhbChhLCBiLmltcGwoKSk7IH0KK2lubGlu
ZSBib29sIG9wZXJhdG9yPT0oY29uc3QgY2hhciogYSwgY29uc3QgU3RyaW5nJiBiKSB7IHJldHVy
biBlcXVhbChyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oYSksIGIuaW1wbCgpKTsgfQog
CiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFN0cmluZyYgYSwgY29uc3QgU3RyaW5nJiBi
KSB7IHJldHVybiAhZXF1YWwoYS5pbXBsKCksIGIuaW1wbCgpKTsgfQotaW5saW5lIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBTdHJpbmcmIGEsIGNvbnN0IGNoYXIqIGIpIHsgcmV0dXJuICFlcXVhbChh
LmltcGwoKSwgYik7IH0KLWlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgY2hhciogYSwgY29u
c3QgU3RyaW5nJiBiKSB7IHJldHVybiAhZXF1YWwoYSwgYi5pbXBsKCkpOyB9CitpbmxpbmUgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IFN0cmluZyYgYSwgY29uc3QgTENoYXIqIGIpIHsgcmV0dXJuICFl
cXVhbChhLmltcGwoKSwgYik7IH0KK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgU3RyaW5n
JiBhLCBjb25zdCBjaGFyKiBiKSB7IHJldHVybiAhZXF1YWwoYS5pbXBsKCksIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPihiKSk7IH0KK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3Qg
TENoYXIqIGEsIGNvbnN0IFN0cmluZyYgYikgeyByZXR1cm4gIWVxdWFsKGEsIGIuaW1wbCgpKTsg
fQoraW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBjaGFyKiBhLCBjb25zdCBTdHJpbmcmIGIp
IHsgcmV0dXJuICFlcXVhbChyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oYSksIGIuaW1w
bCgpKTsgfQogCiBpbmxpbmUgYm9vbCBlcXVhbElnbm9yaW5nQ2FzZShjb25zdCBTdHJpbmcmIGEs
IGNvbnN0IFN0cmluZyYgYikgeyByZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2UoYS5pbXBsKCksIGIu
aW1wbCgpKTsgfQotaW5saW5lIGJvb2wgZXF1YWxJZ25vcmluZ0Nhc2UoY29uc3QgU3RyaW5nJiBh
LCBjb25zdCBjaGFyKiBiKSB7IHJldHVybiBlcXVhbElnbm9yaW5nQ2FzZShhLmltcGwoKSwgYik7
IH0KLWlubGluZSBib29sIGVxdWFsSWdub3JpbmdDYXNlKGNvbnN0IGNoYXIqIGEsIGNvbnN0IFN0
cmluZyYgYikgeyByZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2UoYSwgYi5pbXBsKCkpOyB9Citpbmxp
bmUgYm9vbCBlcXVhbElnbm9yaW5nQ2FzZShjb25zdCBTdHJpbmcmIGEsIGNvbnN0IExDaGFyKiBi
KSB7IHJldHVybiBlcXVhbElnbm9yaW5nQ2FzZShhLmltcGwoKSwgYik7IH0KK2lubGluZSBib29s
IGVxdWFsSWdub3JpbmdDYXNlKGNvbnN0IFN0cmluZyYgYSwgY29uc3QgY2hhciogYikgeyByZXR1
cm4gZXF1YWxJZ25vcmluZ0Nhc2UoYS5pbXBsKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENo
YXIqPihiKSk7IH0KK2lubGluZSBib29sIGVxdWFsSWdub3JpbmdDYXNlKGNvbnN0IExDaGFyKiBh
LCBjb25zdCBTdHJpbmcmIGIpIHsgcmV0dXJuIGVxdWFsSWdub3JpbmdDYXNlKGEsIGIuaW1wbCgp
KTsgfQoraW5saW5lIGJvb2wgZXF1YWxJZ25vcmluZ0Nhc2UoY29uc3QgY2hhciogYSwgY29uc3Qg
U3RyaW5nJiBiKSB7IHJldHVybiBlcXVhbElnbm9yaW5nQ2FzZShyZWludGVycHJldF9jYXN0PGNv
bnN0IExDaGFyKj4oYSksIGIuaW1wbCgpKTsgfQogCiBpbmxpbmUgYm9vbCBlcXVhbFBvc3NpYmx5
SWdub3JpbmdDYXNlKGNvbnN0IFN0cmluZyYgYSwgY29uc3QgU3RyaW5nJiBiLCBib29sIGlnbm9y
ZUNhc2UpIAogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi91bmljb2RlL1VuaWNv
ZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvVW5p
Y29kZS5oCShyZXZpc2lvbiA5ODQ5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdW5p
Y29kZS9Vbmljb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDQgKzM5LDcgQEAKIAogQ09NUElM
RV9BU1NFUlQoc2l6ZW9mKFVDaGFyKSA9PSAyLCBVQ2hhcklzVHdvQnl0ZXMpOwogCisvLyBEZWZp
bmUgcGxhdGZvcm0gbmV1dHJhbCA4IGJpdCBjaGFyYWN0ZXIgdHlwZSAoTCBpcyBmb3IgTGF0aW4t
MSkuCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgTENoYXI7CisKICNlbmRpZiAvLyBXVEZfVU5JQ09E
RV9ICkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmNwcAkocmV2aXNpb24g
OTg0OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjUwMCw3ICsyNTAwLDcgQEAgdm9pZCBqaXRDb21waWxlKFlhcnJQYXR0ZXJu
JiBwYXR0ZXJuLCBZYQogICAgIFlhcnJHZW5lcmF0b3IocGF0dGVybiwgY2hhclNpemUpLmNvbXBp
bGUoZ2xvYmFsRGF0YSwgaml0T2JqZWN0KTsKIH0KIAotaW50IGV4ZWN1dGUoWWFyckNvZGVCbG9j
ayYgaml0T2JqZWN0LCBjb25zdCBjaGFyKiBpbnB1dCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVk
IGxlbmd0aCwgaW50KiBvdXRwdXQpCitpbnQgZXhlY3V0ZShZYXJyQ29kZUJsb2NrJiBqaXRPYmpl
Y3QsIGNvbnN0IExDaGFyKiBpbnB1dCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCwg
aW50KiBvdXRwdXQpCiB7CiAgICAgcmV0dXJuIGppdE9iamVjdC5leGVjdXRlKGlucHV0LCBzdGFy
dCwgbGVuZ3RoLCBvdXRwdXQpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIv
WWFyckpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJK
SVQuaAkocmV2aXNpb24gOTg0OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJy
SklULmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgY2xhc3MgRXhlY3V0YWJsZVBv
b2w7CiBuYW1lc3BhY2UgWWFyciB7CiAKIGNsYXNzIFlhcnJDb2RlQmxvY2sgewotICAgIHR5cGVk
ZWYgaW50ICgqWWFyckpJVENvZGU4KShjb25zdCBjaGFyKiBpbnB1dCwgdW5zaWduZWQgc3RhcnQs
IHVuc2lnbmVkIGxlbmd0aCwgaW50KiBvdXRwdXQpIFlBUlJfQ0FMTDsKKyAgICB0eXBlZGVmIGlu
dCAoKllhcnJKSVRDb2RlOCkoY29uc3QgTENoYXIqIGlucHV0LCB1bnNpZ25lZCBzdGFydCwgdW5z
aWduZWQgbGVuZ3RoLCBpbnQqIG91dHB1dCkgWUFSUl9DQUxMOwogICAgIHR5cGVkZWYgaW50ICgq
WWFyckpJVENvZGUxNikoY29uc3QgVUNoYXIqIGlucHV0LCB1bnNpZ25lZCBzdGFydCwgdW5zaWdu
ZWQgbGVuZ3RoLCBpbnQqIG91dHB1dCkgWUFSUl9DQUxMOwogCiBwdWJsaWM6CkBAIC02OCw3ICs2
OCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldDhCaXRDb2RlKE1hY3JvQXNzZW1ibGVyOjpDb2Rl
UmVmIHJlZikgeyBtX3JlZjggPSByZWY7IH0KICAgICB2b2lkIHNldDE2Qml0Q29kZShNYWNyb0Fz
c2VtYmxlcjo6Q29kZVJlZiByZWYpIHsgbV9yZWYxNiA9IHJlZjsgfQogCi0gICAgaW50IGV4ZWN1
dGUoY29uc3QgY2hhciogaW5wdXQsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIGlu
dCogb3V0cHV0KQorICAgIGludCBleGVjdXRlKGNvbnN0IExDaGFyKiBpbnB1dCwgdW5zaWduZWQg
c3RhcnQsIHVuc2lnbmVkIGxlbmd0aCwgaW50KiBvdXRwdXQpCiAgICAgewogICAgICAgICBBU1NF
UlQoaGFzOEJpdENvZGUoKSk7CiAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFlhcnJK
SVRDb2RlOD4obV9yZWY4LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKShpbnB1dCwgc3RhcnQs
IGxlbmd0aCwgb3V0cHV0KTsKQEAgLTkxLDcgKzkxLDcgQEAgcHJpdmF0ZToKIAogdm9pZCBqaXRD
b21waWxlKFlhcnJQYXR0ZXJuJiwgWWFyckNoYXJTaXplLCBKU0dsb2JhbERhdGEqLCBZYXJyQ29k
ZUJsb2NrJiBqaXRPYmplY3QpOwogaW50IGV4ZWN1dGUoWWFyckNvZGVCbG9jayYgaml0T2JqZWN0
LCBjb25zdCBVQ2hhciogaW5wdXQsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIGlu
dCogb3V0cHV0KTsKLWludCBleGVjdXRlKFlhcnJDb2RlQmxvY2smIGppdE9iamVjdCwgY29uc3Qg
Y2hhciogaW5wdXQsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIGludCogb3V0cHV0
KTsKK2ludCBleGVjdXRlKFlhcnJDb2RlQmxvY2smIGppdE9iamVjdCwgY29uc3QgTENoYXIqIGlu
cHV0LCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoLCBpbnQqIG91dHB1dCk7CiAKIH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpZYXJyCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95
YXJyL1lhcnJQYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFy
ci9ZYXJyUGFyc2VyLmgJKHJldmlzaW9uIDk4NDk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3lhcnIvWWFyclBhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzEsNyArMjMxLDcgQEAgcHJp
dmF0ZToKICAgICAgICAgOiBtX2RlbGVnYXRlKGRlbGVnYXRlKQogICAgICAgICAsIG1fYmFja1Jl
ZmVyZW5jZUxpbWl0KGJhY2tSZWZlcmVuY2VMaW1pdCkKICAgICAgICAgLCBtX2VycihOb0Vycm9y
KQotICAgICAgICAsIG1fZGF0YShwYXR0ZXJuKQorICAgICAgICAsIG1fZGF0YShwYXR0ZXJuLmNo
YXJhY3RlcnMxNigpKQogICAgICAgICAsIG1fc2l6ZShwYXR0ZXJuLmxlbmd0aCgpKQogICAgICAg
ICAsIG1faW5kZXgoMCkKICAgICAgICAgLCBtX3BhcmVudGhlc2VzTmVzdGluZ0RlcHRoKDApCkBA
IC03OTMsNyArNzkzLDcgQEAgcHJpdmF0ZToKICAgICBEZWxlZ2F0ZSYgbV9kZWxlZ2F0ZTsKICAg
ICB1bnNpZ25lZCBtX2JhY2tSZWZlcmVuY2VMaW1pdDsKICAgICBFcnJvckNvZGUgbV9lcnI7Ci0g
ICAgY29uc3QgVVN0cmluZyYgbV9kYXRhOworICAgIGNvbnN0IFVDaGFyKiBtX2RhdGE7CiAgICAg
dW5zaWduZWQgbV9zaXplOwogICAgIHVuc2lnbmVkIG1faW5kZXg7CiAgICAgdW5zaWduZWQgbV9w
YXJlbnRoZXNlc05lc3RpbmdEZXB0aDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk4NTE1KQor
KysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcg
QEAKKzIwMTEtMTAtMjYgIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CisKKyAg
ICAgICAgSW52ZXN0aWdhdGUgc3RvcmluZyBzdHJpbmdzIGluIDgtYml0IGJ1ZmZlcnMgd2hlbiBw
b3NzaWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NjYxNjEKKworICAgICAgICBDaGFuZ2VzIHRvIHN1cHBvcnQgOCBiaXQgU3RyaW5nSW1wbCBjaGFu
Z2VzLgorICAgICAgICAKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAg
ICAgIAorICAgICAgICBObyBuZXcgdGVzdHMsIHJlZmFjdG9yZWQgU3RyaW5nSW1wbCBmb3IgOCBi
aXQgc3RyaW5ncy4KKworICAgICAgICAqIHBsYXRmb3JtL3RleHQvY2YvU3RyaW5nSW1wbENGLmNw
cDoKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6Y3JlYXRlQ0ZTdHJpbmcpOgorCiAyMDExLTEw
LTI2ICBDaHJpcyBSb2dlcnMgIDxjcm9nZXJzQGdvb2dsZS5jb20+CiAKICAgICAgICAgQWRkIEF1
ZGlvU291cmNlUHJvdmlkZXJDbGllbnQgYW5kIHNldEZvcm1hdCgpIG1ldGhvZCBzbyB3ZSBjYW4g
a25vdyBhdWRpbyBzdHJlYW0gZm9ybWF0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L2NmL1N0cmluZ0ltcGxDRi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9jZi9TdHJpbmdJbXBsQ0YuY3BwCShyZXZpc2lvbiA5ODQ5NCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvY2YvU3RyaW5nSW1wbENGLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTM2LDEzICsxMzYsMTMgQEAgQ0ZTdHJpbmdSZWYgU3RyaW5nSW1wbDo6Y3JlYXRlQ0ZT
dHJpbmcoKQogewogICAgIENGQWxsb2NhdG9yUmVmIGFsbG9jYXRvciA9IChtX2xlbmd0aCAmJiBp
c01haW5UaHJlYWQoKSkgPyBTdHJpbmdXcmFwcGVyQ0ZBbGxvY2F0b3I6OmFsbG9jYXRvcigpIDog
MDsKICAgICBpZiAoIWFsbG9jYXRvcikKLSAgICAgICAgcmV0dXJuIENGU3RyaW5nQ3JlYXRlV2l0
aENoYXJhY3RlcnMoMCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVbmlDaGFyKj4obV9kYXRhKSwg
bV9sZW5ndGgpOworICAgICAgICByZXR1cm4gQ0ZTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygw
LCByZWludGVycHJldF9jYXN0PGNvbnN0IFVuaUNoYXIqPihjaGFyYWN0ZXJzKCkpLCBtX2xlbmd0
aCk7CiAKICAgICAvLyBQdXQgcG9pbnRlciB0byB0aGUgU3RyaW5nSW1wbCBpbiBhIGdsb2JhbCBz
byB0aGUgYWxsb2NhdG9yIGNhbiBzdG9yZSBpdCB3aXRoIHRoZSBDRlN0cmluZy4KICAgICBBU1NF
UlQoIVN0cmluZ1dyYXBwZXJDRkFsbG9jYXRvcjo6Y3VycmVudFN0cmluZyk7CiAgICAgU3RyaW5n
V3JhcHBlckNGQWxsb2NhdG9yOjpjdXJyZW50U3RyaW5nID0gdGhpczsKIAotICAgIENGU3RyaW5n
UmVmIHN0cmluZyA9IENGU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnNOb0NvcHkoYWxsb2NhdG9y
LCByZWludGVycHJldF9jYXN0PGNvbnN0IFVuaUNoYXIqPihtX2RhdGEpLCBtX2xlbmd0aCwga0NG
QWxsb2NhdG9yTnVsbCk7CisgICAgQ0ZTdHJpbmdSZWYgc3RyaW5nID0gQ0ZTdHJpbmdDcmVhdGVX
aXRoQ2hhcmFjdGVyc05vQ29weShhbGxvY2F0b3IsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVW5p
Q2hhcio+KGNoYXJhY3RlcnMoKSksIG1fbGVuZ3RoLCBrQ0ZBbGxvY2F0b3JOdWxsKTsKIAogICAg
IC8vIFRoZSBhbGxvY2F0b3IgY2xlYXJlZCB0aGUgZ2xvYmFsIHdoZW4gaXQgcmVhZCBpdCwgYnV0
IGFsc28gY2xlYXIgaXQgaGVyZSBqdXN0IGluIGNhc2UuCiAgICAgQVNTRVJUKCFTdHJpbmdXcmFw
cGVyQ0ZBbGxvY2F0b3I6OmN1cnJlbnRTdHJpbmcpOwpJbmRleDogU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24g
OTg1MTUpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwxNCBAQAorMjAxMS0xMC0yNiAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNv
bT4KKworICAgICAgICBJbnZlc3RpZ2F0ZSBzdG9yaW5nIHN0cmluZ3MgaW4gOC1iaXQgYnVmZmVy
cyB3aGVuIHBvc3NpYmxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02NjE2MQorCisgICAgICAgIEFkZGVkIGV4cG9ydCBvZiBTdHJpbmdJbXBsOjpnZXRE
YXRhMTZTbG93Q2FzZSBmb3IgbGlua2luZyB0ZXN0cy4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHdpbi9XZWJLaXQyLmRlZjoKKwogMjAxMS0xMC0y
NiAgSmVmZiBNaWxsZXIgIDxqZWZmbUBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViS2l0MiBzaG91
bGQgcmVzcGVjdCBzZWNyZXQgV2ViS2l0T21pdFBERlN1cHBvcnQgcHJlZmVyZW5jZSBvbiB0aGUg
TWFjCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi93aW4vV2ViS2l0Mi5kZWYKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvd2luL1dlYktpdDIuZGVmCShyZXZpc2lvbiA5ODQ5NCkKKysrIFNvdXJj
ZS9XZWJLaXQyL3dpbi9XZWJLaXQyLmRlZgkod29ya2luZyBjb3B5KQpAQCAtMTU1LDYgKzE1NSw3
IEBAIEVYUE9SVFMKICAgICAgICAgP2VxdWFsQFdURkBAWUFfTlBCVlN0cmluZ0ltcGxAMUBQQkRA
WgogICAgICAgICA/ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbkBXZWJDb3JlQEBZQT9BVlN0cmluZ0BX
VEZAQFBBVkVsZW1lbnRAMUBJQFoKICAgICAgICAgP2dldENhY2hlZERPTVN0cnVjdHVyZUBXZWJD
b3JlQEBZQVBBVlN0cnVjdHVyZUBKU0NAQFBBVkpTRE9NR2xvYmFsT2JqZWN0QDFAUEJVQ2xhc3NJ
bmZvQDNAQFoKKyAgICAgICAgP2dldERhdGExNlNsb3dDYXNlQFN0cmluZ0ltcGxAV1RGQEBBQkVQ
Ql9XWFoKICAgICAgICAgP2dldEVsZW1lbnRCeUlkQFRyZWVTY29wZUBXZWJDb3JlQEBRQkVQQVZF
bGVtZW50QDJAQUJWQXRvbWljU3RyaW5nQFdURkBAQFoKICAgICAgICAgP2dldExvY2F0aW9uQW5k
TGVuZ3RoRnJvbVJhbmdlQFRleHRJdGVyYXRvckBXZWJDb3JlQEBTQV9OUEFWRWxlbWVudEAyQFBC
VlJhbmdlQDJAQUFJMkBaCiAgICAgICAgID9pc1ByZWxvYWRlZEBDYWNoZWRSZXNvdXJjZUxvYWRl
ckBXZWJDb3JlQEBRQkVfTkFCVlN0cmluZ0BXVEZAQEBaCg==
</data>
<flag name="review"
          id="110729"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>