<?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>107093</bug_id>
          
          <creation_ts>2013-01-16 22:01:45 -0800</creation_ts>
          <short_desc>UMBRELLA: WTF should build with -Wshorten-64-to-32</short_desc>
          <delta_ts>2016-03-09 09:31:16 -0800</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>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>107503</dependson>
    
    <dependson>107126</dependson>
    
    <dependson>107227</dependson>
    
    <dependson>113170</dependson>
    
    <dependson>114958</dependson>
    
    <dependson>114970</dependson>
    
    <dependson>115047</dependson>
          <blocked>109834</blocked>
    
    <blocked>109846</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="David Kilzer (:ddkilzer)">ddkilzer</reporter>
          <assigned_to name="David Kilzer (:ddkilzer)">ddkilzer</assigned_to>
          <cc>benjamin</cc>
    
    <cc>buildbot</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>dbates</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>oliver</cc>
    
    <cc>rniwa</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>809068</commentid>
    <comment_count>0</comment_count>
      <attachid>183118</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2013-01-16 22:01:45 -0800</bug_when>
    <thetext>Created attachment 183118
Patch

&lt;http://webkit.org/b/000000&gt;
&lt;rdar://problem/12551754&gt;

Reviewed by NOBODY (OOPS!).

Source/JavaScriptCore:

* runtime/JSDateMath.cpp:
(JSC::parseDateFromNullTerminatedCharacters): Change &apos;offset&apos;
from int to long to match change to function in WTF.  Also
remove now unneeded static_cast&lt;int&gt;().

Source/WTF:

* Configurations/Base.xcconfig:
- Enable -Wshorten-64-to-32 by setting
GCC_WARN_64_TO_32_BIT_CONVERSION to YES.

* wtf/Assertions.cpp:
(vprintf_stderr_common):
- Use CFIndex type instead of int for the return value of
CFStringGetMaximumSizeForEncoding().

* wtf/CryptographicallyRandomNumber.cpp:
(ARC4RandomNumberGenerator::stir):
- Use static_cast&lt;int&gt;() since the value is being used to
generate a hash.

* wtf/DateMath.cpp:
(WTF::isLeapYear):
(WTF::ymdhmsToSeconds):
(WTF::parseDateFromNullTerminatedCharacters):
(WTF::parseDateFromNullTerminatedCharacters):
* wtf/DateMath.h:
(WTF::parseDateFromNullTerminatedCharacters):
(WTF::isLeapYear):
- Change types from int to long since most local variables for
&apos;year&apos;, &apos;month&apos;, &apos;day&apos;, &apos;hour&apos; and &apos;minute&apos; are already type
long.
- Also changed &apos;offset&apos; variable from int to long, which made it
possible to remove a static_cast&lt;int&gt;().

* wtf/DecimalNumber.cpp:
(WTF::DecimalNumber::toStringDecimal):
(WTF::DecimalNumber::toStringExponential):
- Add overflow checks and static_cast&lt;unsigned&gt;() as needed.

* wtf/FastMalloc.cpp:
(fastMallocStatistics): Change length from int to size_t.
(PageMapFreeObjectFinder::visit): Add ASSERT and
static_cast&lt;int&gt;().
(PageMapMemoryUsageRecorder::recordPendingRegions): Add ASSERT
and static_cast&lt;unsigned&gt;().
(PageMapMemoryUsageRecorder::visit): Add ASSERT and
static_cast&lt;int&gt;() three times.
(AdminRegionRecorder::recordPendingRegions): Add ASSERT and
static_cast&lt;unsigned&gt;().
- NOTE: These ASSERT macros won&apos;t be compiled by default on
Debug builds because FastMalloc is disabled in favor of
system malloc.

* wtf/GregorianDateTime.cpp:
(WTF::GregorianDateTime::setToCurrentLocalTime):
- Add static_cast&lt;int&gt;() to convert tm.tm_gmtoff.

* wtf/MD5.cpp:
(WTF::MD5::addBytes):
- Add overflow check with CRASH() for &apos;length&apos;.  Replace
&apos;length&apos; with local variable, &apos;len&apos;, that is static_cast to
unsigned.

* wtf/dtoa.cpp:
(WTF::multadd): Change int to size_t since these variables are
only used for iterating.
(WTF::mult): Add static_cast&lt;int&gt;() to BigInt::size() results.
(WTF::lshift): Ditto.
(WTF::cmp): Ditto.
(WTF::diff): Ditto.
(WTF::d2b): Ditto.
(WTF::dtoa): Add ASSERT.  Add static_cast&lt;int32_t&gt;().
(WTF::dtoa): Add overflow check with CRASH() and
static_cast&lt;int&gt;().

* wtf/text/ASCIIFastPath.h:
(WTF::copyLCharsFromUCharSource): Change local variables from
unsigned to size_t.

* wtf/text/AtomicString.h:
(WTF::AtomicString::find): Change &apos;start&apos; arguments from size_t
to unsigned.
(WTF::operator==): Add overflow check with CRASH() and
static_cast&lt;unsigned&gt;().

* wtf/text/Base64.cpp:
(WTF::base64Encode): Add overflow check with CRASH() and
static_cast&lt;unsigned&gt;().
(WTF::base64Decode): Extract in.size() into local variable.
Change UINT_MAX to std::numeric_limits&lt;unsigned&gt;::max().  Add
static_cast&lt;unsigned&gt;().
* wtf/text/Base64.h:
(WTF::base64Encode): Add overflow check with CRASH() and
static_cast&lt;unsigned&gt;() to all four variants.

* wtf/text/StringBuilder.h:
(WTF::StringBuilder::append): Add overflow check with CRASH()
and static_cast&lt;unsigned&gt;().

* wtf/text/StringConcatenate.h:
(StringTypeAdapter&lt;&gt;): Add overflow check with CRASH() and
static_cast&lt;unsigned&gt;() when setting m_length.  One variant
already had an overflow check.

* wtf/text/StringImpl.cpp:
(WTF::StringImpl::createFromLiteral): Add overflow check with
CRASH() and static_cast&lt;unsigned&gt;().
(WTF::StringImpl::create): Add static_cast&lt;unsigned&gt;() since
the overflow check already exists.
(WTF::StringImpl::getData16SlowCase): Change local &apos;offset&apos;
variable from unsigned to size_t.
(WTF::StringImpl::removeCharacters): Add static_cast&lt;unsigned&gt;()
since we&apos;re removing characters and assume the current object
has already been bounds-checked.
(WTF::StringImpl::find): Add static_cast&lt;unsigned&gt;() since an
overflow check already exists.
(WTF::StringImpl::findIgnoringCase): Ditto.
(WTF::StringImpl::replace): Ditto.

* wtf/text/StringImpl.h:
(WTF::StringImpl::StringImpl): Add static_cast&lt;unsigned&gt;() since
the value is being used to compute a hash.

* wtf/text/WTFString.cpp:
(WTF::String::String): Add static_cast&lt;unsigned&gt;() since the
overflow check already exists.
(WTF::String::split): Add static_cast&lt;unsigned&gt;() since the
current object has already been bounds-checked.
(WTF::String::make8BitFrom16BitSource): Add overflow check with
CRASH() and static_cast&lt;unsigned&gt;().
(WTF::String::make16BitFrom8BitSource): Ditto.
(WTF::String::fromUTF8): Add static_cast&lt;unsigned&gt;() since the
overflow check already exists.  Change &apos;utf16Length&apos; from unsigned
to size_t.  Static cast for &apos;utf16Length&apos; is checked by ASSERT.
(WTF::String::fromUTF8WithLatin1Fallback): Add overflow check with
CRASH() and static_cast&lt;unsigned&gt;().
(WTF::lengthOfCharactersAsInteger): Ditto.

* wtf/unicode/icu/CollatorICU.cpp:
(WTF::Collator::collate): Add overflow checks with CRASH() and
static_cast&lt;unsigned&gt;() for &apos;lhsLength&apos; and &apos;rhsLength&apos;.
---
 23 files changed, 360 insertions(+), 109 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>809069</commentid>
    <comment_count>1</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-16 22:04:44 -0800</bug_when>
    <thetext>Attachment 183118 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/WTF/ChangeLog:1:  ChangeLog entry has no bug number  [changelog/bugnumber] [5]
Source/JavaScriptCore/ChangeLog:1:  ChangeLog entry has no bug number  [changelog/bugnumber] [5]
Source/WTF/wtf/FastMalloc.cpp:4640:  Missing space after ,  [whitespace/comma] [3]
Source/WTF/wtf/text/AtomicString.h:197:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 4 in 23 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>809077</commentid>
    <comment_count>2</comment_count>
      <attachid>183118</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-01-16 22:13:40 -0800</bug_when>
    <thetext>Comment on attachment 183118
Patch

Attachment 183118 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/15901920</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>809078</commentid>
    <comment_count>3</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2013-01-16 22:15:49 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; Attachment 183118 [details] did not pass style-queue:
&gt; 
&gt; 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
&gt; Source/WTF/ChangeLog:1:  ChangeLog entry has no bug number  [changelog/bugnumber] [5]
&gt; Source/JavaScriptCore/ChangeLog:1:  ChangeLog entry has no bug number  [changelog/bugnumber] [5]
&gt; Source/WTF/wtf/FastMalloc.cpp:4640:  Missing space after ,  [whitespace/comma] [3]
&gt; Source/WTF/wtf/text/AtomicString.h:197:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
&gt; Total errors found: 4 in 23 files

Fixed locally for next patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>809081</commentid>
    <comment_count>4</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2013-01-16 22:16:32 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 183118 [details])
&gt; Attachment 183118 [details] did not pass efl-ews (efl):
&gt; Output: http://queues.webkit.org/results/15901920

/Volumes/Data/EWS/WebKit/Source/WTF/wtf/dtoa.cpp:1269:30: error: comparison of integers of different signs: &apos;size_t&apos; (aka &apos;unsigned long&apos;) and &apos;type&apos; (aka &apos;int&apos;) [-Werror,-Wsign-compare]
    if (finalTruncatedLength &gt; std::numeric_limits&lt;int&gt;::max())
        ~~~~~~~~~~~~~~~~~~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 error generated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>809095</commentid>
    <comment_count>5</comment_count>
      <attachid>183118</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-01-16 22:45:41 -0800</bug_when>
    <thetext>Comment on attachment 183118
Patch

Attachment 183118 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/15907660</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>809139</commentid>
    <comment_count>6</comment_count>
      <attachid>183118</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-01-17 00:24:12 -0800</bug_when>
    <thetext>Comment on attachment 183118
Patch

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

Really nice!

Notes:
-The type long is a huge pain in the ass because of Windows. I am not sure we want to use it more.
-Some of the Characters functions could probably use unsigned instead of size_t. This would avoids the conversions 32-64 bits.
-CRASH() is not necessarily the right thing to do for overflow. Sometime we should report the error to JavaScript. We have to be careful we cannot force getting in one of this branch from JS code.
-If you can split the patch in subparts, it will be easier to review :D

&gt; Source/WTF/ChangeLog:33
&gt; +        (WTF::isLeapYear):
&gt; +        - Change types from int to long since most local variables for
&gt; +          &apos;year&apos;, &apos;month&apos;, &apos;day&apos;, &apos;hour&apos; and &apos;minute&apos; are already type
&gt; +          long.

Why not go the other way around and use int for this variables?
A long (64 bits on x86_64 for anything but Windows) for year, month and day seems overkill.

&gt; Source/WTF/wtf/CryptographicallyRandomNumber.cpp:103
&gt; -    addRandomData(randomness, length);
&gt; +    addRandomData(randomness, static_cast&lt;int&gt;(length));

It would be better to change addRandomData() to take a size_t.

&gt; Source/WTF/wtf/DecimalNumber.cpp:128
&gt; -        return next - buffer;
&gt; +        size_t length = next - buffer;
&gt; +        if (length &gt; std::numeric_limits&lt;unsigned&gt;::max())
&gt; +            CRASH();
&gt; +
&gt; +        return static_cast&lt;unsigned&gt;(length);

That looks wrong for 32bits where sizeof(size_t) == sizeof(unsigned).

I don&apos;t think you need to check for overflow (or maybe just assert for it). If next - buffer &gt; bufferLength, something horribly wrong happened :)

&gt; Source/WTF/wtf/DecimalNumber.cpp:148
&gt; -        return next - buffer;
&gt; +        size_t length = next - buffer;
&gt; +        if (length &gt; std::numeric_limits&lt;unsigned&gt;::max())
&gt; +            CRASH();
&gt; +
&gt; +        return static_cast&lt;unsigned&gt;(length);

ditto.

&gt; Source/WTF/wtf/DecimalNumber.cpp:167
&gt; -    return next - buffer;
&gt; +    size_t length = next - buffer;
&gt; +    if (length &gt; std::numeric_limits&lt;unsigned&gt;::max())
&gt; +        CRASH();
&gt; +
&gt; +    return static_cast&lt;unsigned&gt;(length);

Ditto.

&gt; Source/WTF/wtf/DecimalNumber.cpp:212
&gt; -    return next - buffer;
&gt; +    size_t length = next - buffer;
&gt; +    if (length &gt; std::numeric_limits&lt;unsigned&gt;::max())
&gt; +        CRASH();
&gt; +
&gt; +    return static_cast&lt;unsigned&gt;(length);

Ditto.

&gt; Source/WTF/wtf/FastMalloc.cpp:4491
&gt; +        ASSERT(span-&gt;length &lt;= std::numeric_limits&lt;int&gt;::max());
&gt; +        return static_cast&lt;int&gt;(span-&gt;length);

Would returning size_t from visit() be an option?

&gt; Source/WTF/wtf/MD5.cpp:223
&gt;  void MD5::addBytes(const uint8_t* input, size_t length)
&gt;  {
&gt; +    if (length &gt; std::numeric_limits&lt;uint32_t&gt;::max())
&gt; +        CRASH();
&gt; +    
&gt; +    uint32_t len = static_cast&lt;uint32_t&gt;(length);

This is odd. Which part fails with a 64bits length?
Is it length &lt; t?

&gt; Source/WTF/wtf/text/AtomicString.h:204
&gt; +    if (bLength &gt; std::numeric_limits&lt;unsigned&gt;::max())
&gt; +        CRASH();
&gt; +    return equal(aImpl, b.data(), static_cast&lt;unsigned&gt;(bLength));

I have a bad feeling about this. I think that particular operator only exists for performance reason.

&gt; Source/WTF/wtf/text/StringConcatenate.h:226
&gt; -        , m_length(strlen(buffer))
&gt;      {
&gt; +        size_t bufferLength = strlen(buffer);
&gt; +        if (bufferLength &gt; std::numeric_limits&lt;unsigned&gt;::max())
&gt; +            CRASH();
&gt; +        m_length = static_cast&lt;unsigned&gt;(bufferLength);

Ouch, this one is unfortunate.
I don&apos;t see a way around it. We must make a new adapter for literals.

&gt; Source/WTF/wtf/text/StringImpl.cpp:164
&gt; +    if (length &gt; std::numeric_limits&lt;unsigned&gt;::max())
&gt; +        CRASH();

This should be an ASSERT.

This case is already tested at compile time for the template constructor.

Actually, if (!length) should also be an ASSERT. That is probably an accident.

&gt; Source/WTF/wtf/text/StringImpl.cpp:1409
&gt; +    while ((srcSegmentStart = find(pattern, static_cast&lt;unsigned&gt;(srcSegmentStart))) != notFound) {

Hum, maybe change ::find() to return unsigned, and srcSegmentStart to unsigned?

This code can loop if this-&gt;length() == numeric_limits&lt;unsigned&gt;::max(). (but so does the original code).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>809282</commentid>
    <comment_count>7</comment_count>
      <attachid>183118</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-01-17 05:12:19 -0800</bug_when>
    <thetext>Comment on attachment 183118
Patch

Attachment 183118 did not pass mac-wk2-ews (mac-wk2):
Output: http://queues.webkit.org/results/15908989</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>809313</commentid>
    <comment_count>8</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2013-01-17 07:01:23 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 183118 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=183118&amp;action=review
&gt; 
&gt; Really nice!
&gt; 
&gt; Notes:
&gt; -The type long is a huge pain in the ass because of Windows. I am not sure we want to use it more.
&gt; -Some of the Characters functions could probably use unsigned instead of size_t. This would avoids the conversions 32-64 bits.
&gt; -CRASH() is not necessarily the right thing to do for overflow. Sometime we should report the error to JavaScript. We have to be careful we cannot force getting in one of this branch from JS code.
&gt; -If you can split the patch in subparts, it will be easier to review :D

You&apos;re right, I&apos;ll do that instead and use this as an umbrella bug.

Thanks for the quick review feedback!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>810859</commentid>
    <comment_count>9</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2013-01-18 11:15:06 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 183118 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=183118&amp;action=review
&gt; 
&gt; &gt; Source/WTF/ChangeLog:33
&gt; &gt; +        (WTF::isLeapYear):
&gt; &gt; +        - Change types from int to long since most local variables for
&gt; &gt; +          &apos;year&apos;, &apos;month&apos;, &apos;day&apos;, &apos;hour&apos; and &apos;minute&apos; are already type
&gt; &gt; +          long.
&gt; 
&gt; Why not go the other way around and use int for this variables?
&gt; A long (64 bits on x86_64 for anything but Windows) for year, month and day seems overkill.

Much of the code uses strtol() to parse the various pieces of the date string.  Changing the values to int would actually increase the amount of static_cast&lt;int&gt;() operators that would be added to the code.  :/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>810909</commentid>
    <comment_count>10</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2013-01-18 12:04:26 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #6)
&gt; &gt; (From update of attachment 183118 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=183118&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WTF/ChangeLog:33
&gt; &gt; &gt; +        (WTF::isLeapYear):
&gt; &gt; &gt; +        - Change types from int to long since most local variables for
&gt; &gt; &gt; +          &apos;year&apos;, &apos;month&apos;, &apos;day&apos;, &apos;hour&apos; and &apos;minute&apos; are already type
&gt; &gt; &gt; +          long.
&gt; &gt; 
&gt; &gt; Why not go the other way around and use int for this variables?
&gt; &gt; A long (64 bits on x86_64 for anything but Windows) for year, month and day seems overkill.
&gt; 
&gt; Much of the code uses strtol() to parse the various pieces of the date string.  Changing the values to int would actually increase the amount of static_cast&lt;int&gt;() operators that would be added to the code.  :/

Actually, I can change parseLong() to parseInt() and put the static_cast&lt;int&gt;() in one place, but I&apos;m also concerned about changing this code and making weird corner cases fail due to lack of precision when switching from long to int.

I&apos;ll post both patches in another bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>833197</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-02-14 10:08:56 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; Actually, I can change parseLong() to parseInt() and put the static_cast&lt;int&gt;() in one place, but I&apos;m also concerned about changing this code and making weird corner cases fail due to lack of precision when switching from long to int.

To be pedantic, there is no lack of precision when switching from long to int anywhere.

On 64-bit there is a lack of range when converting from long to int, but it need not be a deep subject. If the value can be out of a 32-bit number range, then we need code that properly clamps it in range, which is usually not all that challenging to write. If it can’t be out of 32-bit integer range, then there is no problem and no code is needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>990880</commentid>
    <comment_count>12</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2014-03-15 11:34:13 -0700</bug_when>
    <thetext>I have a patch that does this and adds a checked_cast&lt;&gt; function that will crash on overflow</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>990883</commentid>
    <comment_count>13</comment_count>
      <attachid>226825</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2014-03-15 12:08:11 -0700</bug_when>
    <thetext>Created attachment 226825
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>990913</commentid>
    <comment_count>14</comment_count>
      <attachid>226825</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-03-15 18:34:38 -0700</bug_when>
    <thetext>Comment on attachment 226825
Patch

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

&gt; Source/WTF/Configurations/Base.xcconfig:66
&gt;  // FIXME: &lt;http://webkit.org/b/107093&gt; WTF should build with -Wshorten-64-to-32

You can get rid of this FIXME.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>991267</commentid>
    <comment_count>15</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2014-03-17 09:51:09 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 226825 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=226825&amp;action=review
&gt; 
&gt; &gt; Source/WTF/Configurations/Base.xcconfig:66
&gt; &gt;  // FIXME: &lt;http://webkit.org/b/107093&gt; WTF should build with -Wshorten-64-to-32
&gt; 
&gt; You can get rid of this FIXME.

This is a very early run through of WTF -- i&apos;ve not even run perf tests on it O_o</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1172570</commentid>
    <comment_count>16</comment_count>
      <attachid>226825</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-03-09 09:31:16 -0800</bug_when>
    <thetext>Comment on attachment 226825
Patch

Clearing the review flag on this year old patch.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>183118</attachid>
            <date>2013-01-16 22:01:45 -0800</date>
            <delta_ts>2013-01-17 07:01:38 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>20130116215846.patch</filename>
            <type>text/plain</type>
            <size>51257</size>
            <attacher name="David Kilzer (:ddkilzer)">ddkilzer</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM5OTY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
MzU0OTQwN2NjMWY1MzEzYjFmZTVjMWUwOWZmZDNhMjUwNTYzYTVlLi5mMzM2ZDZjYTc3MGQ1Y2Rm
NGNmODM2ZTQwYWU0ZGQ0OGEzMWZjYTYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNiBAQAorMjAxMy0wMS0xNiAgRGF2aWQgS2lsemVyICA8ZGRraWx6ZXJAYXBwbGUuY29t
PgorCisgICAgICAgIFdURiBzaG91bGQgYnVpbGQgd2l0aCAtV3Nob3J0ZW4tNjQtdG8tMzIKKyAg
ICAgICAgPGh0dHA6Ly93ZWJraXQub3JnL2IvMDAwMDAwPgorICAgICAgICA8cmRhcjovL3Byb2Js
ZW0vMTI1NTE3NTQ+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBydW50aW1lL0pTRGF0ZU1hdGguY3BwOgorICAgICAgICAoSlNDOjpwYXJzZURhdGVG
cm9tTnVsbFRlcm1pbmF0ZWRDaGFyYWN0ZXJzKTogQ2hhbmdlICdvZmZzZXQnCisgICAgICAgIGZy
b20gaW50IHRvIGxvbmcgdG8gbWF0Y2ggY2hhbmdlIHRvIGZ1bmN0aW9uIGluIFdURi4gIEFsc28K
KyAgICAgICAgcmVtb3ZlIG5vdyB1bm5lZWRlZCBzdGF0aWNfY2FzdDxpbnQ+KCkuCisKIDIwMTMt
MDEtMTYgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBERkcgMzJf
NjQgYmFja2VuZCBkb2Vzbid0IGNoZWNrIGZvciBoYXNBcnJheVN0b3JhZ2UoKSBpbiBOZXdBcnJh
eVdpdGhTaXplCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYv
Q2hhbmdlTG9nCmluZGV4IGVlY2EzOTg5ZDlmN2VlNGNmYTQ5MGI5ZTQ2ZDBiOWEwODEzOGZhZjcu
LjQzM2Q4MDYxYTEwNTEwMjlhYWI2YTBmNDRlODg1MDkxOWVkYTFiM2QgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTQ3IEBACisyMDEzLTAxLTE2ICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+CisK
KyAgICAgICAgV1RGIHNob3VsZCBidWlsZCB3aXRoIC1Xc2hvcnRlbi02NC10by0zMgorICAgICAg
ICA8aHR0cDovL3dlYmtpdC5vcmcvYi8wMDAwMDA+CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8x
MjU1MTc1ND4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIENvbmZpZ3VyYXRpb25zL0Jhc2UueGNjb25maWc6CisgICAgICAgIC0gRW5hYmxlIC1Xc2hv
cnRlbi02NC10by0zMiBieSBzZXR0aW5nCisgICAgICAgICAgR0NDX1dBUk5fNjRfVE9fMzJfQklU
X0NPTlZFUlNJT04gdG8gWUVTLgorCisgICAgICAgICogd3RmL0Fzc2VydGlvbnMuY3BwOgorICAg
ICAgICAodnByaW50Zl9zdGRlcnJfY29tbW9uKToKKyAgICAgICAgLSBVc2UgQ0ZJbmRleCB0eXBl
IGluc3RlYWQgb2YgaW50IGZvciB0aGUgcmV0dXJuIHZhbHVlIG9mCisgICAgICAgICAgQ0ZTdHJp
bmdHZXRNYXhpbXVtU2l6ZUZvckVuY29kaW5nKCkuCisKKyAgICAgICAgKiB3dGYvQ3J5cHRvZ3Jh
cGhpY2FsbHlSYW5kb21OdW1iZXIuY3BwOgorICAgICAgICAoQVJDNFJhbmRvbU51bWJlckdlbmVy
YXRvcjo6c3Rpcik6CisgICAgICAgIC0gVXNlIHN0YXRpY19jYXN0PGludD4oKSBzaW5jZSB0aGUg
dmFsdWUgaXMgYmVpbmcgdXNlZCB0bworICAgICAgICAgIGdlbmVyYXRlIGEgaGFzaC4KKworICAg
ICAgICAqIHd0Zi9EYXRlTWF0aC5jcHA6CisgICAgICAgIChXVEY6OmlzTGVhcFllYXIpOgorICAg
ICAgICAoV1RGOjp5bWRobXNUb1NlY29uZHMpOgorICAgICAgICAoV1RGOjpwYXJzZURhdGVGcm9t
TnVsbFRlcm1pbmF0ZWRDaGFyYWN0ZXJzKToKKyAgICAgICAgKFdURjo6cGFyc2VEYXRlRnJvbU51
bGxUZXJtaW5hdGVkQ2hhcmFjdGVycyk6CisgICAgICAgICogd3RmL0RhdGVNYXRoLmg6CisgICAg
ICAgIChXVEY6OnBhcnNlRGF0ZUZyb21OdWxsVGVybWluYXRlZENoYXJhY3RlcnMpOgorICAgICAg
ICAoV1RGOjppc0xlYXBZZWFyKToKKyAgICAgICAgLSBDaGFuZ2UgdHlwZXMgZnJvbSBpbnQgdG8g
bG9uZyBzaW5jZSBtb3N0IGxvY2FsIHZhcmlhYmxlcyBmb3IKKyAgICAgICAgICAneWVhcicsICdt
b250aCcsICdkYXknLCAnaG91cicgYW5kICdtaW51dGUnIGFyZSBhbHJlYWR5IHR5cGUKKyAgICAg
ICAgICBsb25nLgorICAgICAgICAtIEFsc28gY2hhbmdlZCAnb2Zmc2V0JyB2YXJpYWJsZSBmcm9t
IGludCB0byBsb25nLCB3aGljaCBtYWRlIGl0CisgICAgICAgICAgcG9zc2libGUgdG8gcmVtb3Zl
IGEgc3RhdGljX2Nhc3Q8aW50PigpLgorCisgICAgICAgICogd3RmL0RlY2ltYWxOdW1iZXIuY3Bw
OgorICAgICAgICAoV1RGOjpEZWNpbWFsTnVtYmVyOjp0b1N0cmluZ0RlY2ltYWwpOgorICAgICAg
ICAoV1RGOjpEZWNpbWFsTnVtYmVyOjp0b1N0cmluZ0V4cG9uZW50aWFsKToKKyAgICAgICAgLSBB
ZGQgb3ZlcmZsb3cgY2hlY2tzIGFuZCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oKSBhcyBuZWVkZWQu
CisKKyAgICAgICAgKiB3dGYvRmFzdE1hbGxvYy5jcHA6CisgICAgICAgIChmYXN0TWFsbG9jU3Rh
dGlzdGljcyk6IENoYW5nZSBsZW5ndGggZnJvbSBpbnQgdG8gc2l6ZV90LgorICAgICAgICAoUGFn
ZU1hcEZyZWVPYmplY3RGaW5kZXI6OnZpc2l0KTogQWRkIEFTU0VSVCBhbmQKKyAgICAgICAgc3Rh
dGljX2Nhc3Q8aW50PigpLgorICAgICAgICAoUGFnZU1hcE1lbW9yeVVzYWdlUmVjb3JkZXI6OnJl
Y29yZFBlbmRpbmdSZWdpb25zKTogQWRkIEFTU0VSVAorICAgICAgICBhbmQgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KCkuCisgICAgICAgIChQYWdlTWFwTWVtb3J5VXNhZ2VSZWNvcmRlcjo6dmlzaXQp
OiBBZGQgQVNTRVJUIGFuZAorICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KCkgdGhyZWUgdGltZXMu
CisgICAgICAgIChBZG1pblJlZ2lvblJlY29yZGVyOjpyZWNvcmRQZW5kaW5nUmVnaW9ucyk6IEFk
ZCBBU1NFUlQgYW5kCisgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkPigpLgorICAgICAgICAt
IE5PVEU6IFRoZXNlIEFTU0VSVCBtYWNyb3Mgd29uJ3QgYmUgY29tcGlsZWQgYnkgZGVmYXVsdCBv
bgorICAgICAgICAgIERlYnVnIGJ1aWxkcyBiZWNhdXNlIEZhc3RNYWxsb2MgaXMgZGlzYWJsZWQg
aW4gZmF2b3Igb2YKKyAgICAgICAgICBzeXN0ZW0gbWFsbG9jLgorCisgICAgICAgICogd3RmL0dy
ZWdvcmlhbkRhdGVUaW1lLmNwcDoKKyAgICAgICAgKFdURjo6R3JlZ29yaWFuRGF0ZVRpbWU6OnNl
dFRvQ3VycmVudExvY2FsVGltZSk6CisgICAgICAgIC0gQWRkIHN0YXRpY19jYXN0PGludD4oKSB0
byBjb252ZXJ0IHRtLnRtX2dtdG9mZi4KKworICAgICAgICAqIHd0Zi9NRDUuY3BwOgorICAgICAg
ICAoV1RGOjpNRDU6OmFkZEJ5dGVzKToKKyAgICAgICAgLSBBZGQgb3ZlcmZsb3cgY2hlY2sgd2l0
aCBDUkFTSCgpIGZvciAnbGVuZ3RoJy4gIFJlcGxhY2UKKyAgICAgICAgICAnbGVuZ3RoJyB3aXRo
IGxvY2FsIHZhcmlhYmxlLCAnbGVuJywgdGhhdCBpcyBzdGF0aWNfY2FzdCB0bworICAgICAgICAg
IHVuc2lnbmVkLgorCisgICAgICAgICogd3RmL2R0b2EuY3BwOgorICAgICAgICAoV1RGOjptdWx0
YWRkKTogQ2hhbmdlIGludCB0byBzaXplX3Qgc2luY2UgdGhlc2UgdmFyaWFibGVzIGFyZQorICAg
ICAgICBvbmx5IHVzZWQgZm9yIGl0ZXJhdGluZy4KKyAgICAgICAgKFdURjo6bXVsdCk6IEFkZCBz
dGF0aWNfY2FzdDxpbnQ+KCkgdG8gQmlnSW50OjpzaXplKCkgcmVzdWx0cy4KKyAgICAgICAgKFdU
Rjo6bHNoaWZ0KTogRGl0dG8uCisgICAgICAgIChXVEY6OmNtcCk6IERpdHRvLgorICAgICAgICAo
V1RGOjpkaWZmKTogRGl0dG8uCisgICAgICAgIChXVEY6OmQyYik6IERpdHRvLgorICAgICAgICAo
V1RGOjpkdG9hKTogQWRkIEFTU0VSVC4gIEFkZCBzdGF0aWNfY2FzdDxpbnQzMl90PigpLgorICAg
ICAgICAoV1RGOjpkdG9hKTogQWRkIG92ZXJmbG93IGNoZWNrIHdpdGggQ1JBU0goKSBhbmQKKyAg
ICAgICAgc3RhdGljX2Nhc3Q8aW50PigpLgorCisgICAgICAgICogd3RmL3RleHQvQVNDSUlGYXN0
UGF0aC5oOgorICAgICAgICAoV1RGOjpjb3B5TENoYXJzRnJvbVVDaGFyU291cmNlKTogQ2hhbmdl
IGxvY2FsIHZhcmlhYmxlcyBmcm9tCisgICAgICAgIHVuc2lnbmVkIHRvIHNpemVfdC4KKworICAg
ICAgICAqIHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oOgorICAgICAgICAoV1RGOjpBdG9taWNTdHJp
bmc6OmZpbmQpOiBDaGFuZ2UgJ3N0YXJ0JyBhcmd1bWVudHMgZnJvbSBzaXplX3QKKyAgICAgICAg
dG8gdW5zaWduZWQuCisgICAgICAgIChXVEY6Om9wZXJhdG9yPT0pOiBBZGQgb3ZlcmZsb3cgY2hl
Y2sgd2l0aCBDUkFTSCgpIGFuZAorICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oKS4KKwor
ICAgICAgICAqIHd0Zi90ZXh0L0Jhc2U2NC5jcHA6CisgICAgICAgIChXVEY6OmJhc2U2NEVuY29k
ZSk6IEFkZCBvdmVyZmxvdyBjaGVjayB3aXRoIENSQVNIKCkgYW5kCisgICAgICAgIHN0YXRpY19j
YXN0PHVuc2lnbmVkPigpLgorICAgICAgICAoV1RGOjpiYXNlNjREZWNvZGUpOiBFeHRyYWN0IGlu
LnNpemUoKSBpbnRvIGxvY2FsIHZhcmlhYmxlLgorICAgICAgICBDaGFuZ2UgVUlOVF9NQVggdG8g
c3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpLiAgQWRkCisgICAgICAgIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPigpLgorICAgICAgICAqIHd0Zi90ZXh0L0Jhc2U2NC5oOgorICAgICAg
ICAoV1RGOjpiYXNlNjRFbmNvZGUpOiBBZGQgb3ZlcmZsb3cgY2hlY2sgd2l0aCBDUkFTSCgpIGFu
ZAorICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oKSB0byBhbGwgZm91ciB2YXJpYW50cy4K
KworICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaDoKKyAgICAgICAgKFdURjo6U3Ry
aW5nQnVpbGRlcjo6YXBwZW5kKTogQWRkIG92ZXJmbG93IGNoZWNrIHdpdGggQ1JBU0goKQorICAg
ICAgICBhbmQgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KCkuCisKKyAgICAgICAgKiB3dGYvdGV4dC9T
dHJpbmdDb25jYXRlbmF0ZS5oOgorICAgICAgICAoU3RyaW5nVHlwZUFkYXB0ZXI8Pik6IEFkZCBv
dmVyZmxvdyBjaGVjayB3aXRoIENSQVNIKCkgYW5kCisgICAgICAgIHN0YXRpY19jYXN0PHVuc2ln
bmVkPigpIHdoZW4gc2V0dGluZyBtX2xlbmd0aC4gIE9uZSB2YXJpYW50CisgICAgICAgIGFscmVh
ZHkgaGFkIGFuIG92ZXJmbG93IGNoZWNrLgorCisgICAgICAgICogd3RmL3RleHQvU3RyaW5nSW1w
bC5jcHA6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OmNyZWF0ZUZyb21MaXRlcmFsKTogQWRk
IG92ZXJmbG93IGNoZWNrIHdpdGgKKyAgICAgICAgQ1JBU0goKSBhbmQgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KCkuCisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OmNyZWF0ZSk6IEFkZCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oKSBzaW5jZQorICAgICAgICB0aGUgb3ZlcmZsb3cgY2hlY2sgYWxyZWFk
eSBleGlzdHMuCisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OmdldERhdGExNlNsb3dDYXNlKTog
Q2hhbmdlIGxvY2FsICdvZmZzZXQnCisgICAgICAgIHZhcmlhYmxlIGZyb20gdW5zaWduZWQgdG8g
c2l6ZV90LgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpyZW1vdmVDaGFyYWN0ZXJzKTogQWRk
IHN0YXRpY19jYXN0PHVuc2lnbmVkPigpCisgICAgICAgIHNpbmNlIHdlJ3JlIHJlbW92aW5nIGNo
YXJhY3RlcnMgYW5kIGFzc3VtZSB0aGUgY3VycmVudCBvYmplY3QKKyAgICAgICAgaGFzIGFscmVh
ZHkgYmVlbiBib3VuZHMtY2hlY2tlZC4KKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6ZmluZCk6
IEFkZCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oKSBzaW5jZSBhbgorICAgICAgICBvdmVyZmxvdyBj
aGVjayBhbHJlYWR5IGV4aXN0cy4KKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6ZmluZElnbm9y
aW5nQ2FzZSk6IERpdHRvLgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpyZXBsYWNlKTogRGl0
dG8uCisKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdJbXBsLmg6CisgICAgICAgIChXVEY6OlN0
cmluZ0ltcGw6OlN0cmluZ0ltcGwpOiBBZGQgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KCkgc2luY2UK
KyAgICAgICAgdGhlIHZhbHVlIGlzIGJlaW5nIHVzZWQgdG8gY29tcHV0ZSBhIGhhc2guCisKKyAg
ICAgICAgKiB3dGYvdGV4dC9XVEZTdHJpbmcuY3BwOgorICAgICAgICAoV1RGOjpTdHJpbmc6OlN0
cmluZyk6IEFkZCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oKSBzaW5jZSB0aGUKKyAgICAgICAgb3Zl
cmZsb3cgY2hlY2sgYWxyZWFkeSBleGlzdHMuCisgICAgICAgIChXVEY6OlN0cmluZzo6c3BsaXQp
OiBBZGQgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KCkgc2luY2UgdGhlCisgICAgICAgIGN1cnJlbnQg
b2JqZWN0IGhhcyBhbHJlYWR5IGJlZW4gYm91bmRzLWNoZWNrZWQuCisgICAgICAgIChXVEY6OlN0
cmluZzo6bWFrZThCaXRGcm9tMTZCaXRTb3VyY2UpOiBBZGQgb3ZlcmZsb3cgY2hlY2sgd2l0aAor
ICAgICAgICBDUkFTSCgpIGFuZCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oKS4KKyAgICAgICAgKFdU
Rjo6U3RyaW5nOjptYWtlMTZCaXRGcm9tOEJpdFNvdXJjZSk6IERpdHRvLgorICAgICAgICAoV1RG
OjpTdHJpbmc6OmZyb21VVEY4KTogQWRkIHN0YXRpY19jYXN0PHVuc2lnbmVkPigpIHNpbmNlIHRo
ZQorICAgICAgICBvdmVyZmxvdyBjaGVjayBhbHJlYWR5IGV4aXN0cy4gIENoYW5nZSAndXRmMTZM
ZW5ndGgnIGZyb20gdW5zaWduZWQKKyAgICAgICAgdG8gc2l6ZV90LiAgU3RhdGljIGNhc3QgZm9y
ICd1dGYxNkxlbmd0aCcgaXMgY2hlY2tlZCBieSBBU1NFUlQuCisgICAgICAgIChXVEY6OlN0cmlu
Zzo6ZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJhY2spOiBBZGQgb3ZlcmZsb3cgY2hlY2sgd2l0aAor
ICAgICAgICBDUkFTSCgpIGFuZCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oKS4KKyAgICAgICAgKFdU
Rjo6bGVuZ3RoT2ZDaGFyYWN0ZXJzQXNJbnRlZ2VyKTogRGl0dG8uCisKKyAgICAgICAgKiB3dGYv
dW5pY29kZS9pY3UvQ29sbGF0b3JJQ1UuY3BwOgorICAgICAgICAoV1RGOjpDb2xsYXRvcjo6Y29s
bGF0ZSk6IEFkZCBvdmVyZmxvdyBjaGVja3Mgd2l0aCBDUkFTSCgpIGFuZAorICAgICAgICBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oKSBmb3IgJ2xoc0xlbmd0aCcgYW5kICdyaHNMZW5ndGgnLgorCiAy
MDEzLTAxLTE2ICBCZW5qYW1pbiBQb3VsYWluICA8YmVuamFtaW5Ad2Via2l0Lm9yZz4KIAogICAg
ICAgICBVc2UgR0NDJ3MgaW1wbGVtZW50YXRpb24gb2YgYXRvbWljSW5jcmVtZW50L0RlY3JlbWVu
dCBvbiBNYWMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0
ZU1hdGguY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRlTWF0aC5jcHAK
aW5kZXggNGU2NThiYzU0OTQ4MmMyZjUyNWE2NmRkMGI5OTljZDBlODI1NmQ1Zi4uOGQwYWYwMzEx
M2ZjNzU1ZWNlMjI1NTU3ZDVmNmNiOTAwMDg5YzY0ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRlTWF0aC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNEYXRlTWF0aC5jcHAKQEAgLTI0NSw3ICsyNDUsNyBAQCBkb3VibGUgcGFy
c2VEYXRlRnJvbU51bGxUZXJtaW5hdGVkQ2hhcmFjdGVycyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IGNoYXIqIGRhdGVTdAogewogICAgIEFTU0VSVChleGVjKTsKICAgICBib29sIGhhdmVUWjsKLSAg
ICBpbnQgb2Zmc2V0OworICAgIGxvbmcgb2Zmc2V0OwogICAgIGRvdWJsZSBtcyA9IFdURjo6cGFy
c2VEYXRlRnJvbU51bGxUZXJtaW5hdGVkQ2hhcmFjdGVycyhkYXRlU3RyaW5nLCBoYXZlVFosIG9m
ZnNldCk7CiAgICAgaWYgKGlzbmFuKG1zKSkKICAgICAgICAgcmV0dXJuIFFOYU47CkBAIC0yNTQs
NyArMjU0LDcgQEAgZG91YmxlIHBhcnNlRGF0ZUZyb21OdWxsVGVybWluYXRlZENoYXJhY3RlcnMo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBjaGFyKiBkYXRlU3QKICAgICBpZiAoIWhhdmVUWikgewog
ICAgICAgICBkb3VibGUgdXRjT2Zmc2V0ID0gZ2V0VVRDT2Zmc2V0KGV4ZWMpOwogICAgICAgICBk
b3VibGUgZHN0T2Zmc2V0ID0gZ2V0RFNUT2Zmc2V0KGV4ZWMsIG1zLCB1dGNPZmZzZXQpOwotICAg
ICAgICBvZmZzZXQgPSBzdGF0aWNfY2FzdDxpbnQ+KCh1dGNPZmZzZXQgKyBkc3RPZmZzZXQpIC8g
V1RGOjptc1Blck1pbnV0ZSk7CisgICAgICAgIG9mZnNldCA9ICh1dGNPZmZzZXQgKyBkc3RPZmZz
ZXQpIC8gV1RGOjptc1Blck1pbnV0ZTsKICAgICB9CiAgICAgcmV0dXJuIG1zIC0gKG9mZnNldCAq
IFdURjo6bXNQZXJNaW51dGUpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9Db25maWd1cmF0
aW9ucy9CYXNlLnhjY29uZmlnIGIvU291cmNlL1dURi9Db25maWd1cmF0aW9ucy9CYXNlLnhjY29u
ZmlnCmluZGV4IDVmMDBjODM4YWYxY2FiZDgyZGE4ZDJmY2E1ODNiOTY1N2Y3YjEzMjMuLmMxMzlm
YmI4ZTcxYzM4MWM4MjNmOTY5NzIwMjAwNDMzODViNDE3ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
VEYvQ29uZmlndXJhdGlvbnMvQmFzZS54Y2NvbmZpZworKysgYi9Tb3VyY2UvV1RGL0NvbmZpZ3Vy
YXRpb25zL0Jhc2UueGNjb25maWcKQEAgLTQ4LDYgKzQ4LDcgQEAgR0NDX1NUUklDVF9BTElBU0lO
RyA9IFlFUzsKIEdDQ19USFJFQURTQUZFX1NUQVRJQ1MgPSBOTzsKIEdDQ19UUkVBVF9XQVJOSU5H
U19BU19FUlJPUlMgPSBZRVM7CiBHQ0NfVkVSU0lPTiA9IGNvbS5hcHBsZS5jb21waWxlcnMubGx2
bS5jbGFuZy4xXzA7CitHQ0NfV0FSTl82NF9UT18zMl9CSVRfQ09OVkVSU0lPTiA9IFlFUzsKIEdD
Q19XQVJOX0FCT1VUX0RFUFJFQ0FURURfRlVOQ1RJT05TID0gTk87CiBHQ0NfV0FSTl9BQk9VVF9N
SVNTSU5HX05FV0xJTkUgPSBZRVM7CiBHQ0NfV0FSTl9BQk9VVF9NSVNTSU5HX1BST1RPVFlQRVMg
PSBZRVM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9Bc3NlcnRpb25zLmNwcCBiL1NvdXJj
ZS9XVEYvd3RmL0Fzc2VydGlvbnMuY3BwCmluZGV4IGVkNDhkODEzZGZiYTc1OTY5N2E2OThmYTY3
YjUwOTVhYjc1NmY0ZGMuLjRhNDY4MWI0ZWFmZTYxYTVkNDc1MzkzYmI0MzQxNDlkYjZhMDc5M2Yg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0Fzc2VydGlvbnMuY3BwCisrKyBiL1NvdXJjZS9X
VEYvd3RmL0Fzc2VydGlvbnMuY3BwCkBAIC04OSw3ICs4OSw3IEBAIHN0YXRpYyB2b2lkIHZwcmlu
dGZfc3RkZXJyX2NvbW1vbihjb25zdCBjaGFyKiBmb3JtYXQsIHZhX2xpc3QgYXJncykKICNpZiBD
T01QSUxFUihDTEFORykKICNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKICNlbmRpZgotICAg
ICAgICBpbnQgbGVuZ3RoID0gQ0ZTdHJpbmdHZXRNYXhpbXVtU2l6ZUZvckVuY29kaW5nKENGU3Ry
aW5nR2V0TGVuZ3RoKHN0ciksIGtDRlN0cmluZ0VuY29kaW5nVVRGOCk7CisgICAgICAgIENGSW5k
ZXggbGVuZ3RoID0gQ0ZTdHJpbmdHZXRNYXhpbXVtU2l6ZUZvckVuY29kaW5nKENGU3RyaW5nR2V0
TGVuZ3RoKHN0ciksIGtDRlN0cmluZ0VuY29kaW5nVVRGOCk7CiAgICAgICAgIGNoYXIqIGJ1ZmZl
ciA9IChjaGFyKiltYWxsb2MobGVuZ3RoICsgMSk7CiAKICAgICAgICAgQ0ZTdHJpbmdHZXRDU3Ry
aW5nKHN0ciwgYnVmZmVyLCBsZW5ndGgsIGtDRlN0cmluZ0VuY29kaW5nVVRGOCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL3d0Zi9DcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5jcHAgYi9T
b3VyY2UvV1RGL3d0Zi9DcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5jcHAKaW5kZXggZTg5
NmQ2ZjU5MDU3Y2VlYTQ3NzdhMGJiZDNkNjgxZjNkOTllMWFlZC4uNWM1ZTNjZTY5ZGFiN2I5OWVj
MWFiYmQ1MDE4NWU3MDY3ZDYwOGZkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvQ3J5cHRv
Z3JhcGhpY2FsbHlSYW5kb21OdW1iZXIuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL0NyeXB0b2dy
YXBoaWNhbGx5UmFuZG9tTnVtYmVyLmNwcApAQCAtMTAwLDcgKzEwMCw3IEBAIHZvaWQgQVJDNFJh
bmRvbU51bWJlckdlbmVyYXRvcjo6c3RpcigpCiAgICAgdW5zaWduZWQgY2hhciByYW5kb21uZXNz
WzEyOF07CiAgICAgc2l6ZV90IGxlbmd0aCA9IHNpemVvZihyYW5kb21uZXNzKTsKICAgICBjcnlw
dG9ncmFwaGljYWxseVJhbmRvbVZhbHVlc0Zyb21PUyhyYW5kb21uZXNzLCBsZW5ndGgpOwotICAg
IGFkZFJhbmRvbURhdGEocmFuZG9tbmVzcywgbGVuZ3RoKTsKKyAgICBhZGRSYW5kb21EYXRhKHJh
bmRvbW5lc3MsIHN0YXRpY19jYXN0PGludD4obGVuZ3RoKSk7CiAKICAgICAvLyBEaXNjYXJkIGVh
cmx5IGtleXN0cmVhbSwgYXMgcGVyIHJlY29tbWVuZGF0aW9ucyBpbjoKICAgICAvLyBodHRwOi8v
d3d3Lndpc2RvbS53ZWl6bWFubi5hYy5pbC9+aXRzaWsvUkM0L1BhcGVycy9SYzRfa3NhLnBzCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9EYXRlTWF0aC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9E
YXRlTWF0aC5jcHAKaW5kZXggNmQwZTVkNzNmMzhiOGRkNjY2MjE5ZWI1Njk1ZjUzNDU0NDdkZTkz
Zi4uMTFiZTBhZmM0ZjA4YmJkNzgxZjYxOTk1NTI1NTBjODhjZDdmNWI3ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dURi93dGYvRGF0ZU1hdGguY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL0RhdGVNYXRo
LmNwcApAQCAtMTQ1LDcgKzE0NSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBnZXRMb2NhbFRpbWUo
Y29uc3QgdGltZV90KiBsb2NhbFRpbWUsIHN0cnVjdCB0bSogbG9jYWxUTSkKIH0KICNlbmRpZgog
Ci1ib29sIGlzTGVhcFllYXIoaW50IHllYXIpCitib29sIGlzTGVhcFllYXIobG9uZyB5ZWFyKQog
ewogICAgIGlmICh5ZWFyICUgNCAhPSAwKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC00ODUs
NyArNDg1LDcgQEAgdm9pZCBpbml0aWFsaXplRGF0ZXMoKQogICAgIGVxdWl2YWxlbnRZZWFyRm9y
RFNUKDIwMDApOyAvLyBOZWVkIHRvIGNhbGwgb25jZSB0byBpbml0aWFsaXplIGEgc3RhdGljIHVz
ZWQgaW4gdGhpcyBmdW5jdGlvbi4KIH0KIAotc3RhdGljIGlubGluZSBkb3VibGUgeW1kaG1zVG9T
ZWNvbmRzKGxvbmcgeWVhciwgaW50IG1vbiwgaW50IGRheSwgaW50IGhvdXIsIGludCBtaW51dGUs
IGRvdWJsZSBzZWNvbmQpCitzdGF0aWMgaW5saW5lIGRvdWJsZSB5bWRobXNUb1NlY29uZHMobG9u
ZyB5ZWFyLCBsb25nIG1vbiwgbG9uZyBkYXksIGxvbmcgaG91ciwgbG9uZyBtaW51dGUsIGRvdWJs
ZSBzZWNvbmQpCiB7CiAgICAgZG91YmxlIGRheXMgPSAoZGF5IC0gMzIwNzUpCiAgICAgICAgICsg
Zmxvb3IoMTQ2MSAqICh5ZWFyICsgNDgwMC4wICsgKG1vbiAtIDE0KSAvIDEyKSAvIDQpCkBAIC03
NTksNyArNzU5LDcgQEAgZG91YmxlIHBhcnNlRVM1RGF0ZUZyb21OdWxsVGVybWluYXRlZENoYXJh
Y3RlcnMoY29uc3QgY2hhciogZGF0ZVN0cmluZykKIH0KIAogLy8gT2RkIGNhc2Ugd2hlcmUgJ2V4
ZWMnIGlzIGFsbG93ZWQgdG8gYmUgMCwgdG8gYWNjb21vZGF0ZSBhIGNhbGxlciBpbiBXZWJDb3Jl
LgotZG91YmxlIHBhcnNlRGF0ZUZyb21OdWxsVGVybWluYXRlZENoYXJhY3RlcnMoY29uc3QgY2hh
ciogZGF0ZVN0cmluZywgYm9vbCYgaGF2ZVRaLCBpbnQmIG9mZnNldCkKK2RvdWJsZSBwYXJzZURh
dGVGcm9tTnVsbFRlcm1pbmF0ZWRDaGFyYWN0ZXJzKGNvbnN0IGNoYXIqIGRhdGVTdHJpbmcsIGJv
b2wmIGhhdmVUWiwgbG9uZyYgb2Zmc2V0KQogewogICAgIGhhdmVUWiA9IGZhbHNlOwogICAgIG9m
ZnNldCA9IDA7CkBAIC0xMDQ0LDcgKzEwNDQsNyBAQCBkb3VibGUgcGFyc2VEYXRlRnJvbU51bGxU
ZXJtaW5hdGVkQ2hhcmFjdGVycyhjb25zdCBjaGFyKiBkYXRlU3RyaW5nLCBib29sJiBoYXZlVAog
ZG91YmxlIHBhcnNlRGF0ZUZyb21OdWxsVGVybWluYXRlZENoYXJhY3RlcnMoY29uc3QgY2hhciog
ZGF0ZVN0cmluZykKIHsKICAgICBib29sIGhhdmVUWjsKLSAgICBpbnQgb2Zmc2V0OworICAgIGxv
bmcgb2Zmc2V0OwogICAgIGRvdWJsZSBtcyA9IHBhcnNlRGF0ZUZyb21OdWxsVGVybWluYXRlZENo
YXJhY3RlcnMoZGF0ZVN0cmluZywgaGF2ZVRaLCBvZmZzZXQpOwogICAgIGlmIChpc25hbihtcykp
CiAgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigp
OwpAQCAtMTA1Myw3ICsxMDUzLDcgQEAgZG91YmxlIHBhcnNlRGF0ZUZyb21OdWxsVGVybWluYXRl
ZENoYXJhY3RlcnMoY29uc3QgY2hhciogZGF0ZVN0cmluZykKICAgICBpZiAoIWhhdmVUWikgewog
ICAgICAgICBkb3VibGUgdXRjT2Zmc2V0ID0gY2FsY3VsYXRlVVRDT2Zmc2V0KCk7CiAgICAgICAg
IGRvdWJsZSBkc3RPZmZzZXQgPSBjYWxjdWxhdGVEU1RPZmZzZXQobXMsIHV0Y09mZnNldCk7Ci0g
ICAgICAgIG9mZnNldCA9IHN0YXRpY19jYXN0PGludD4oKHV0Y09mZnNldCArIGRzdE9mZnNldCkg
LyBtc1Blck1pbnV0ZSk7CisgICAgICAgIG9mZnNldCA9ICh1dGNPZmZzZXQgKyBkc3RPZmZzZXQp
IC8gbXNQZXJNaW51dGU7CiAgICAgfQogICAgIHJldHVybiBtcyAtIChvZmZzZXQgKiBtc1Blck1p
bnV0ZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9EYXRlTWF0aC5oIGIvU291cmNl
L1dURi93dGYvRGF0ZU1hdGguaAppbmRleCA4YjhlMjgyYzFiNzViMzIzYTM0MzAwMGRjYjkzZDc4
ZTMxODc0ODg2Li5jZWVkZDNlNWNlODE1NThlNTE2NDkyYTlhZGM0ZWQxZTk4NWU3NmQ1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9EYXRlTWF0aC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0Rh
dGVNYXRoLmgKQEAgLTYyLDcgKzYyLDcgQEAgaW50IGVxdWl2YWxlbnRZZWFyRm9yRFNUKGludCB5
ZWFyKTsKIC8vIE5vdCByZWFsbHkgbWF0aCByZWxhdGVkLCBidXQgdGhpcyBpcyBjdXJyZW50bHkg
dGhlIG9ubHkgc2hhcmVkIHBsYWNlIHRvIHB1dCB0aGVzZS4KIGRvdWJsZSBwYXJzZUVTNURhdGVG
cm9tTnVsbFRlcm1pbmF0ZWRDaGFyYWN0ZXJzKGNvbnN0IGNoYXIqIGRhdGVTdHJpbmcpOwogV1RG
X0VYUE9SVF9QUklWQVRFIGRvdWJsZSBwYXJzZURhdGVGcm9tTnVsbFRlcm1pbmF0ZWRDaGFyYWN0
ZXJzKGNvbnN0IGNoYXIqIGRhdGVTdHJpbmcpOwotZG91YmxlIHBhcnNlRGF0ZUZyb21OdWxsVGVy
bWluYXRlZENoYXJhY3RlcnMoY29uc3QgY2hhciogZGF0ZVN0cmluZywgYm9vbCYgaGF2ZVRaLCBp
bnQmIG9mZnNldCk7Citkb3VibGUgcGFyc2VEYXRlRnJvbU51bGxUZXJtaW5hdGVkQ2hhcmFjdGVy
cyhjb25zdCBjaGFyKiBkYXRlU3RyaW5nLCBib29sJiBoYXZlVFosIGxvbmcmIG9mZnNldCk7CiBk
b3VibGUgdGltZUNsaXAoZG91YmxlKTsKIC8vIGRheU9mV2VlazogWzAsIDZdIDAgYmVpbmcgTW9u
ZGF5LCBkYXk6IFsxLCAzMV0sIG1vbnRoOiBbMCwgMTFdLCB5ZWFyOiBleDogMjAxMSwgaG91cnM6
IFswLCAyM10sIG1pbnV0ZXM6IFswLCA1OV0sIHNlY29uZHM6IFswLCA1OV0sIHV0Y09mZnNldDog
Wy03MjAsNzIwXS4gCiBTdHJpbmcgbWFrZVJGQzI4MjJEYXRlU3RyaW5nKHVuc2lnbmVkIGRheU9m
V2VlaywgdW5zaWduZWQgZGF5LCB1bnNpZ25lZCBtb250aCwgdW5zaWduZWQgeWVhciwgdW5zaWdu
ZWQgaG91cnMsIHVuc2lnbmVkIG1pbnV0ZXMsIHVuc2lnbmVkIHNlY29uZHMsIGludCB1dGNPZmZz
ZXQpOwpAQCAtODcsNyArODcsNyBAQCBjb25zdCBkb3VibGUgbXNQZXJIb3VyID0gNjAuMCAqIDYw
LjAgKiAxMDAwLjA7CiBjb25zdCBkb3VibGUgbXNQZXJEYXkgPSAyNC4wICogNjAuMCAqIDYwLjAg
KiAxMDAwLjA7CiBjb25zdCBkb3VibGUgbXNQZXJNb250aCA9IDI1OTIwMDAwMDAuMDsKIAotYm9v
bCBpc0xlYXBZZWFyKGludCB5ZWFyKTsKK2Jvb2wgaXNMZWFwWWVhcihsb25nIHllYXIpOwogCiAv
LyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZGF5cyBmcm9tIDE5NzAtMDEtMDEgdG8gdGhlIHNwZWNp
ZmllZCBkYXRlLgogV1RGX0VYUE9SVF9QUklWQVRFIGRvdWJsZSBkYXRlVG9EYXlzRnJvbTE5NzAo
aW50IHllYXIsIGludCBtb250aCwgaW50IGRheSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi9EZWNpbWFsTnVtYmVyLmNwcCBiL1NvdXJjZS9XVEYvd3RmL0RlY2ltYWxOdW1iZXIuY3BwCmlu
ZGV4IGQzM2E1YWU0Y2UyNjg4ZTMyODQwYmFiZjFiZGIyOWMwNjA2ZTdmNmYuLjA3ZTU1ZTRjOWUx
OTY5YWU0MDBhOTEzYzljMGY1NmJmOTkzYTkwMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3Rm
L0RlY2ltYWxOdW1iZXIuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL0RlY2ltYWxOdW1iZXIuY3Bw
CkBAIC0xMjEsNyArMTIxLDExIEBAIHVuc2lnbmVkIERlY2ltYWxOdW1iZXI6OnRvU3RyaW5nRGVj
aW1hbChMQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgpIGNvCiAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3ByZWNpc2lvbjsgKytpKQogICAgICAgICAgICAgKm5l
eHQrKyA9IG1fc2lnbmlmaWNhbmRbaV07CiAKLSAgICAgICAgcmV0dXJuIG5leHQgLSBidWZmZXI7
CisgICAgICAgIHNpemVfdCBsZW5ndGggPSBuZXh0IC0gYnVmZmVyOworICAgICAgICBpZiAobGVu
Z3RoID4gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQorICAgICAgICAgICAg
Q1JBU0goKTsKKworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxlbmd0aCk7
CiAgICAgfQogCiAgICAgdW5zaWduZWQgZGlnaXRzQmVmb3JlRGVjaW1hbFBvaW50ID0gbV9leHBv
bmVudCArIDE7CkBAIC0xMzcsNyArMTQxLDExIEBAIHVuc2lnbmVkIERlY2ltYWxOdW1iZXI6OnRv
U3RyaW5nRGVjaW1hbChMQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgpIGNvCiAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAoZGlnaXRzQmVmb3JlRGVjaW1hbFBvaW50
IC0gbV9wcmVjaXNpb24pOyArK2kpCiAgICAgICAgICAgICAqbmV4dCsrID0gJzAnOwogCi0gICAg
ICAgIHJldHVybiBuZXh0IC0gYnVmZmVyOworICAgICAgICBzaXplX3QgbGVuZ3RoID0gbmV4dCAt
IGJ1ZmZlcjsKKyAgICAgICAgaWYgKGxlbmd0aCA+IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWdu
ZWQ+OjptYXgoKSkKKyAgICAgICAgICAgIENSQVNIKCk7CisKKyAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihsZW5ndGgpOwogICAgIH0KIAogICAgIC8vIElmIHdlIGdldCBoZXJl
LCBudW1iZXIgc3RhcnRzIGJlZm9yZSB0aGUgZGVjaW1hbCBwb2ludCwgYW5kIGVuZHMgYWZ0ZXIg
aXQsCkBAIC0xNTIsNyArMTYwLDExIEBAIHVuc2lnbmVkIERlY2ltYWxOdW1iZXI6OnRvU3RyaW5n
RGVjaW1hbChMQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgpIGNvCiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gZGlnaXRzQmVmb3JlRGVjaW1hbFBvaW50OyBpIDwgbV9wcmVjaXNpb247
ICsraSkKICAgICAgICAgKm5leHQrKyA9IG1fc2lnbmlmaWNhbmRbaV07CiAKLSAgICByZXR1cm4g
bmV4dCAtIGJ1ZmZlcjsKKyAgICBzaXplX3QgbGVuZ3RoID0gbmV4dCAtIGJ1ZmZlcjsKKyAgICBp
ZiAobGVuZ3RoID4gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQorICAgICAg
ICBDUkFTSCgpOworCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihsZW5ndGgpOwog
fQogCiB1bnNpZ25lZCBEZWNpbWFsTnVtYmVyOjp0b1N0cmluZ0V4cG9uZW50aWFsKExDaGFyKiBi
dWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCkgY29uc3QKQEAgLTE5Myw3ICsyMDUsMTEgQEAg
dW5zaWduZWQgRGVjaW1hbE51bWJlcjo6dG9TdHJpbmdFeHBvbmVudGlhbChMQ2hhciogYnVmZmVy
LCB1bnNpZ25lZCBidWZmZXJMZW5ndGgKICAgICAgICAgKm5leHQrKyA9ICcwJyArIChleHBvbmVu
dCAlIDEwMCkgLyAxMDsKICAgICAqbmV4dCsrID0gJzAnICsgZXhwb25lbnQgJSAxMDsKIAotICAg
IHJldHVybiBuZXh0IC0gYnVmZmVyOworICAgIHNpemVfdCBsZW5ndGggPSBuZXh0IC0gYnVmZmVy
OworICAgIGlmIChsZW5ndGggPiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkp
CisgICAgICAgIENSQVNIKCk7CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxl
bmd0aCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvRmFzdE1hbGxvYy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9GYXN0TWFsbG9jLmNwcAppbmRleCBi
ZWJjZmYyYTg2OWIzNzY2NmQ3YzEzYmFlM2JlMzU0MGNmNmEwMjVlLi5jNDcwZDUxMDRhYWE5ZjEx
ODgzMzllYTYxMzEzMDk3MTNhNjNmOTI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9GYXN0
TWFsbG9jLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9GYXN0TWFsbG9jLmNwcApAQCAtNDM5OSw3
ICs0Mzk5LDcgQEAgRmFzdE1hbGxvY1N0YXRpc3RpY3MgZmFzdE1hbGxvY1N0YXRpc3RpY3MoKQog
CiAgICAgc3RhdGlzdGljcy5mcmVlTGlzdEJ5dGVzID0gMDsKICAgICBmb3IgKHVuc2lnbmVkIGNs
ID0gMDsgY2wgPCBrTnVtQ2xhc3NlczsgKytjbCkgewotICAgICAgICBjb25zdCBpbnQgbGVuZ3Ro
ID0gY2VudHJhbF9jYWNoZVtjbF0ubGVuZ3RoKCk7CisgICAgICAgIGNvbnN0IHNpemVfdCBsZW5n
dGggPSBjZW50cmFsX2NhY2hlW2NsXS5sZW5ndGgoKTsKICAgICAgICAgY29uc3QgaW50IHRjX2xl
bmd0aCA9IGNlbnRyYWxfY2FjaGVbY2xdLnRjX2xlbmd0aCgpOwogCiAgICAgICAgIHN0YXRpc3Rp
Y3MuZnJlZUxpc3RCeXRlcyArPSBCeXRlU2l6ZUZvckNsYXNzKGNsKSAqIChsZW5ndGggKyB0Y19s
ZW5ndGgpOwpAQCAtNDQ4Nyw3ICs0NDg3LDggQEAgcHVibGljOgogICAgICAgICAgICAgZm9yICh2
b2lkKiBuZXh0T2JqZWN0ID0gc3Bhbi0+b2JqZWN0czsgbmV4dE9iamVjdDsgbmV4dE9iamVjdCA9
IG1fcmVhZGVyLm5leHRFbnRyeUluTGlua2VkTGlzdChyZWludGVycHJldF9jYXN0PHZvaWQqKj4o
bmV4dE9iamVjdCkpKQogICAgICAgICAgICAgICAgIG1fZnJlZU9iamVjdEZpbmRlci52aXNpdChu
ZXh0T2JqZWN0KTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gc3Bhbi0+bGVuZ3RoOworICAg
ICAgICBBU1NFUlQoc3Bhbi0+bGVuZ3RoIDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4
KCkpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihzcGFuLT5sZW5ndGgpOwogICAg
IH0KIH07CiAKQEAgLTQ1NTcsNyArNDU1OCw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogCi0gICAgICAgICgqbV9yZWNvcmRlcikobV90YXNrLCBtX2NvbnRleHQsIE1BTExP
Q19QVFJfSU5fVVNFX1JBTkdFX1RZUEUsIGFsbG9jYXRlZFBvaW50ZXJzLmRhdGEoKSwgYWxsb2Nh
dGVkUG9pbnRlcnMuc2l6ZSgpKTsKKyAgICAgICAgQVNTRVJUKGFsbG9jYXRlZFBvaW50ZXJzLnNp
emUoKSA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpOworICAgICAgICAo
Km1fcmVjb3JkZXIpKG1fdGFzaywgbV9jb250ZXh0LCBNQUxMT0NfUFRSX0lOX1VTRV9SQU5HRV9U
WVBFLCBhbGxvY2F0ZWRQb2ludGVycy5kYXRhKCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihhbGxv
Y2F0ZWRQb2ludGVycy5zaXplKCkpKTsKIAogICAgICAgICBtX2NvYWxlc2NlZFNwYW5zLmNsZWFy
KCk7CiAgICAgfQpAQCAtNDU3MSwxMyArNDU3MywxNiBAQCBwdWJsaWM6CiAgICAgICAgIGlmICgh
c3BhbiB8fCAhc3Bhbi0+c3RhcnQpCiAgICAgICAgICAgICByZXR1cm4gMTsKIAotICAgICAgICBp
ZiAobV9zZWVuUG9pbnRlcnMuY29udGFpbnMocHRyKSkKLSAgICAgICAgICAgIHJldHVybiBzcGFu
LT5sZW5ndGg7CisgICAgICAgIGlmIChtX3NlZW5Qb2ludGVycy5jb250YWlucyhwdHIpKSB7Cisg
ICAgICAgICAgICBBU1NFUlQoc3Bhbi0+bGVuZ3RoIDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50
Pjo6bWF4KCkpOworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oc3Bhbi0+bGVu
Z3RoKTsKKyAgICAgICAgfQogICAgICAgICBtX3NlZW5Qb2ludGVycy5hZGQocHRyKTsKIAogICAg
ICAgICBpZiAoIW1fY29hbGVzY2VkU3BhbnMuc2l6ZSgpKSB7CiAgICAgICAgICAgICBtX2NvYWxl
c2NlZFNwYW5zLmFwcGVuZChzcGFuKTsKLSAgICAgICAgICAgIHJldHVybiBzcGFuLT5sZW5ndGg7
CisgICAgICAgICAgICBBU1NFUlQoc3Bhbi0+bGVuZ3RoIDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8
aW50Pjo6bWF4KCkpOworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oc3Bhbi0+
bGVuZ3RoKTsKICAgICAgICAgfQogCiAgICAgICAgIFNwYW4qIHByZXZpb3VzU3BhbiA9IG1fY29h
bGVzY2VkU3BhbnNbbV9jb2FsZXNjZWRTcGFucy5zaXplKCkgLSAxXTsKQEAgLTQ1ODgsMTQgKzQ1
OTMsMTYgQEAgcHVibGljOgogICAgICAgICB2bV9hZGRyZXNzX3Qgc3BhblN0YXJ0QWRkcmVzcyA9
IHNwYW4tPnN0YXJ0IDw8IGtQYWdlU2hpZnQ7CiAgICAgICAgIGlmIChzcGFuU3RhcnRBZGRyZXNz
ID09IHByZXZpb3VzU3BhblN0YXJ0QWRkcmVzcyArIHByZXZpb3VzU3BhblNpemVJbkJ5dGVzKSB7
CiAgICAgICAgICAgICBtX2NvYWxlc2NlZFNwYW5zLmFwcGVuZChzcGFuKTsKLSAgICAgICAgICAg
IHJldHVybiBzcGFuLT5sZW5ndGg7CisgICAgICAgICAgICBBU1NFUlQoc3Bhbi0+bGVuZ3RoIDw9
IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpOworICAgICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PGludD4oc3Bhbi0+bGVuZ3RoKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIE5l
dyBzcGFuIGlzIG5vdCBhZGphY2VudCB0byBwcmV2aW91cyBzcGFuLCBzbyByZWNvcmQgdGhlIHNw
YW5zIGNvYWxlc2NlZCBzbyBmYXIuCiAgICAgICAgIHJlY29yZFBlbmRpbmdSZWdpb25zKCk7CiAg
ICAgICAgIG1fY29hbGVzY2VkU3BhbnMuYXBwZW5kKHNwYW4pOwogCi0gICAgICAgIHJldHVybiBz
cGFuLT5sZW5ndGg7CisgICAgICAgIEFTU0VSVChzcGFuLT5sZW5ndGggPD0gc3RkOjpudW1lcmlj
X2xpbWl0czxpbnQ+OjptYXgoKSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHNw
YW4tPmxlbmd0aCk7CiAgICAgfQogfTsKIApAQCAtNDYyOSw3ICs0NjM2LDggQEAgcHVibGljOgog
ICAgIHZvaWQgcmVjb3JkUGVuZGluZ1JlZ2lvbnMoKQogICAgIHsKICAgICAgICAgaWYgKG1fcGVu
ZGluZ1JlZ2lvbnMuc2l6ZSgpKSB7Ci0gICAgICAgICAgICAoKm1fcmVjb3JkZXIpKG1fdGFzaywg
bV9jb250ZXh0LCBNQUxMT0NfQURNSU5fUkVHSU9OX1JBTkdFX1RZUEUsIG1fcGVuZGluZ1JlZ2lv
bnMuZGF0YSgpLCBtX3BlbmRpbmdSZWdpb25zLnNpemUoKSk7CisgICAgICAgICAgICBBU1NFUlQo
bV9wZW5kaW5nUmVnaW9ucy5zaXplKCkgPD0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46
Om1heCgpKTsKKyAgICAgICAgICAgICgqbV9yZWNvcmRlcikobV90YXNrLCBtX2NvbnRleHQsIE1B
TExPQ19BRE1JTl9SRUdJT05fUkFOR0VfVFlQRSwgbV9wZW5kaW5nUmVnaW9ucy5kYXRhKCksc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KG1fcGVuZGluZ1JlZ2lvbnMuc2l6ZSgpKSk7CiAgICAgICAgICAg
ICBtX3BlbmRpbmdSZWdpb25zLmNsZWFyKCk7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL3d0Zi9HcmVnb3JpYW5EYXRlVGltZS5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9H
cmVnb3JpYW5EYXRlVGltZS5jcHAKaW5kZXggNjFmNzNiZjUwODkxYjhmZDI5NTg4YWQ2N2I1YmVl
OGNhZjM3ZGEyOS4uNTZiZGY1MTFhNDY2NDc2ODY4M2NkNWZiZWEwNDhmZGU3Zjg4YWRhNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvR3JlZ29yaWFuRGF0ZVRpbWUuY3BwCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL0dyZWdvcmlhbkRhdGVUaW1lLmNwcApAQCAtNzYsNyArNzYsNyBAQCB2b2lkIEdy
ZWdvcmlhbkRhdGVUaW1lOjpzZXRUb0N1cnJlbnRMb2NhbFRpbWUoKQogICAgIG1fc2Vjb25kID0g
bG9jYWxUTS50bV9zZWM7CiAgICAgbV9pc0RTVCA9IGxvY2FsVE0udG1faXNkc3Q7CiAjaWYgSEFW
RShUTV9HTVRPRkYpCi0gICAgbV91dGNPZmZzZXQgPSBsb2NhbFRNLnRtX2dtdG9mZjsKKyAgICBt
X3V0Y09mZnNldCA9IHN0YXRpY19jYXN0PGludD4obG9jYWxUTS50bV9nbXRvZmYpOwogI2Vsc2UK
ICAgICBpbnQgdXRjT2Zmc2V0ID0gY2FsY3VsYXRlVVRDT2Zmc2V0KCk7CiAgICAgdXRjT2Zmc2V0
ICs9IGNhbGN1bGF0ZURTVE9mZnNldChsb2NhbFRpbWUgKiBtc1BlclNlY29uZCwgdXRjT2Zmc2V0
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL01ENS5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9N
RDUuY3BwCmluZGV4IDA3YmJhZGQ5ZjVlYTNkYmYxNzE4YTk5MDIyOTQ5ODQyMGM5MDJiMjcuLjk2
ZGM1NDU5YWUzYjk5YzRkODc5M2YzNzQ5NmVkYmE1NWRiMDgyYTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvd3RmL01ENS5jcHAKKysrIGIvU291cmNlL1dURi93dGYvTUQ1LmNwcApAQCAtMjE3LDE0
ICsyMTcsMTggQEAgTUQ1OjpNRDUoKQogCiB2b2lkIE1ENTo6YWRkQnl0ZXMoY29uc3QgdWludDhf
dCogaW5wdXQsIHNpemVfdCBsZW5ndGgpCiB7CisgICAgaWYgKGxlbmd0aCA+IHN0ZDo6bnVtZXJp
Y19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkKKyAgICAgICAgQ1JBU0goKTsKKyAgICAKKyAgICB1
aW50MzJfdCBsZW4gPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4obGVuZ3RoKTsKICAgICBjb25zdCB1
aW50OF90KiBidWYgPSBpbnB1dDsKIAogICAgIC8vIFVwZGF0ZSBiaXRjb3VudAogICAgIHVpbnQz
Ml90IHQgPSBtX2JpdHNbMF07Ci0gICAgbV9iaXRzWzBdID0gdCArIChsZW5ndGggPDwgMyk7Cisg
ICAgbV9iaXRzWzBdID0gdCArIChsZW4gPDwgMyk7CiAgICAgaWYgKG1fYml0c1swXSA8IHQpCiAg
ICAgICAgIG1fYml0c1sxXSsrOyAvLyBDYXJyeSBmcm9tIGxvdyB0byBoaWdoCi0gICAgbV9iaXRz
WzFdICs9IGxlbmd0aCA+PiAyOTsKKyAgICBtX2JpdHNbMV0gKz0gbGVuID4+IDI5OwogCiAgICAg
dCA9ICh0ID4+IDMpICYgMHgzZjsgLy8gQnl0ZXMgYWxyZWFkeSBpbiBzaHNJbmZvLT5kYXRhCiAK
QEAgLTIzNCwyOSArMjM4LDI5IEBAIHZvaWQgTUQ1OjphZGRCeXRlcyhjb25zdCB1aW50OF90KiBp
bnB1dCwgc2l6ZV90IGxlbmd0aCkKICAgICAgICAgdWludDhfdCogcCA9IG1faW4gKyB0OwogCiAg
ICAgICAgIHQgPSA2NCAtIHQ7Ci0gICAgICAgIGlmIChsZW5ndGggPCB0KSB7Ci0gICAgICAgICAg
ICBtZW1jcHkocCwgYnVmLCBsZW5ndGgpOworICAgICAgICBpZiAobGVuIDwgdCkgeworICAgICAg
ICAgICAgbWVtY3B5KHAsIGJ1ZiwgbGVuKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogICAgICAgICBtZW1jcHkocCwgYnVmLCB0KTsKICAgICAgICAgcmV2ZXJzZUJ5dGVzKG1faW4s
IDE2KTsKICAgICAgICAgTUQ1VHJhbnNmb3JtKG1fYnVmLCByZWludGVycHJldF9jYXN0X3B0cjx1
aW50MzJfdCo+KG1faW4pKTsgLy8gbV9pbiBpcyA0LWJ5dGUgYWxpZ25lZC4KICAgICAgICAgYnVm
ICs9IHQ7Ci0gICAgICAgIGxlbmd0aCAtPSB0OworICAgICAgICBsZW4gLT0gdDsKICAgICB9CiAK
ICAgICAvLyBQcm9jZXNzIGRhdGEgaW4gNjQtYnl0ZSBjaHVua3MKIAotICAgIHdoaWxlIChsZW5n
dGggPj0gNjQpIHsKKyAgICB3aGlsZSAobGVuID49IDY0KSB7CiAgICAgICAgIG1lbWNweShtX2lu
LCBidWYsIDY0KTsKICAgICAgICAgcmV2ZXJzZUJ5dGVzKG1faW4sIDE2KTsKICAgICAgICAgTUQ1
VHJhbnNmb3JtKG1fYnVmLCByZWludGVycHJldF9jYXN0X3B0cjx1aW50MzJfdCo+KG1faW4pKTsg
Ly8gbV9pbiBpcyA0LWJ5dGUgYWxpZ25lZC4KICAgICAgICAgYnVmICs9IDY0OwotICAgICAgICBs
ZW5ndGggLT0gNjQ7CisgICAgICAgIGxlbiAtPSA2NDsKICAgICB9CiAKICAgICAvLyBIYW5kbGUg
YW55IHJlbWFpbmluZyBieXRlcyBvZiBkYXRhLgotICAgIG1lbWNweShtX2luLCBidWYsIGxlbmd0
aCk7CisgICAgbWVtY3B5KG1faW4sIGJ1ZiwgbGVuKTsKIH0KIAogdm9pZCBNRDU6OmNoZWNrc3Vt
KFZlY3Rvcjx1aW50OF90LCAxNj4mIGRpZ2VzdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L2R0b2EuY3BwIGIvU291cmNlL1dURi93dGYvZHRvYS5jcHAKaW5kZXggY2YxYmMyY2RhYjUzYjM2
MmI4MDZmYTkwNGQxNWQzYjJjMjBjMjNjNS4uNzhmNzZlMzQ5MWExMDY5Y2U2ZjY3ZDhiZTdhM2Q0
YTA5YTA5MGRiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvZHRvYS5jcHAKKysrIGIvU291
cmNlL1dURi93dGYvZHRvYS5jcHAKQEAgLTE2NSw5ICsxNjUsOSBAQCBzdGF0aWMgdm9pZCBtdWx0
YWRkKEJpZ0ludCYgYiwgaW50IG0sIGludCBhKSAgICAvKiBtdWx0aXBseSBieSBtIGFuZCBhZGQg
YSAqLwogICAgIHVpbnQzMl90IGNhcnJ5OwogI2VuZGlmCiAKLSAgICBpbnQgd2RzID0gYi5zaXpl
KCk7CisgICAgc2l6ZV90IHdkcyA9IGIuc2l6ZSgpOwogICAgIHVpbnQzMl90KiB4ID0gYi53b3Jk
cygpOwotICAgIGludCBpID0gMDsKKyAgICBzaXplX3QgaSA9IDA7CiAgICAgY2FycnkgPSBhOwog
ICAgIGRvIHsKICNpZmRlZiBVU0VfTE9OR19MT05HCkBAIC0yOTAsOCArMjkwLDggQEAgc3RhdGlj
IHZvaWQgbXVsdChCaWdJbnQmIGFSZWYsIGNvbnN0IEJpZ0ludCYgYlJlZikKICAgICAgICAgYiA9
IHRtcDsKICAgICB9CiAKLSAgICB3YSA9IGEtPnNpemUoKTsKLSAgICB3YiA9IGItPnNpemUoKTsK
KyAgICB3YSA9IHN0YXRpY19jYXN0PGludD4oYS0+c2l6ZSgpKTsKKyAgICB3YiA9IHN0YXRpY19j
YXN0PGludD4oYi0+c2l6ZSgpKTsKICAgICB3YyA9IHdhICsgd2I7CiAgICAgYy5yZXNpemUod2Mp
OwogCkBAIC00MTgsNyArNDE4LDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgdm9pZCBsc2hpZnQo
QmlnSW50JiBiLCBpbnQgaykKIHsKICAgICBpbnQgbiA9IGsgPj4gNTsKIAotICAgIGludCBvcmln
U2l6ZSA9IGIuc2l6ZSgpOworICAgIGludCBvcmlnU2l6ZSA9IHN0YXRpY19jYXN0PGludD4oYi5z
aXplKCkpOwogICAgIGludCBuMSA9IG4gKyBvcmlnU2l6ZSArIDE7CiAKICAgICBpZiAoayAmPSAw
eDFmKQpAQCAtNDU4LDggKzQ1OCw4IEBAIHN0YXRpYyBpbnQgY21wKGNvbnN0IEJpZ0ludCYgYSwg
Y29uc3QgQmlnSW50JiBiKQogICAgIGNvbnN0IHVpbnQzMl90ICp4YSwgKnhhMCwgKnhiLCAqeGIw
OwogICAgIGludCBpLCBqOwogCi0gICAgaSA9IGEuc2l6ZSgpOwotICAgIGogPSBiLnNpemUoKTsK
KyAgICBpID0gc3RhdGljX2Nhc3Q8aW50PihhLnNpemUoKSk7CisgICAgaiA9IHN0YXRpY19jYXN0
PGludD4oYi5zaXplKCkpOwogICAgIEFTU0VSVChpIDw9IDEgfHwgYS53b3JkcygpW2kgLSAxXSk7
CiAgICAgQVNTRVJUKGogPD0gMSB8fCBiLndvcmRzKClbaiAtIDFdKTsKICAgICBpZiAoaSAtPSBq
KQpAQCAtNDk5LDEwICs0OTksMTAgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgdm9pZCBkaWZmKEJp
Z0ludCYgYywgY29uc3QgQmlnSW50JiBhUmVmLCBjb25zdCBCaWdJbnQmIGJSZWYKICAgICB9IGVs
c2UKICAgICAgICAgaSA9IDA7CiAKLSAgICB3YSA9IGEtPnNpemUoKTsKKyAgICB3YSA9IHN0YXRp
Y19jYXN0PGludD4oYS0+c2l6ZSgpKTsKICAgICBjb25zdCB1aW50MzJfdCogeGEgPSBhLT53b3Jk
cygpOwogICAgIGNvbnN0IHVpbnQzMl90KiB4YWUgPSB4YSArIHdhOwotICAgIHdiID0gYi0+c2l6
ZSgpOworICAgIHdiID0gc3RhdGljX2Nhc3Q8aW50PihiLT5zaXplKCkpOwogICAgIGNvbnN0IHVp
bnQzMl90KiB4YiA9IGItPndvcmRzKCk7CiAgICAgY29uc3QgdWludDMyX3QqIHhiZSA9IHhiICsg
d2I7CiAKQEAgLTU3MSw3ICs1NzEsNyBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSB2b2lkIGQyYihC
aWdJbnQmIGIsIFUqIGQsIGludCogZSwgaW50KiBiaXRzKQogICAgICAgICAgICAgeFsxXSA9IHo7
CiAgICAgICAgIH0KIAotICAgICAgICBpID0gYi5zaXplKCk7CisgICAgICAgIGkgPSBzdGF0aWNf
Y2FzdDxpbnQ+KGIuc2l6ZSgpKTsKICAgICB9IGVsc2UgewogICAgICAgICBrID0gbG8wYml0cygm
eik7CiAgICAgICAgIHhbMF0gPSB6OwpAQCAtOTI1LDcgKzkyNSw3IEBAIHZvaWQgZHRvYShEdG9h
QnVmZmVyIHJlc3VsdCwgZG91YmxlIGRkLCBpbnQgbmRpZ2l0cywgYm9vbCYgc2lnbk91dCwgaW50
JiBleHBvbmVuCiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIGR2YWwoJmVwcykgPSAoMC41
IC8gdGVuc1tpbGltIC0gMV0pIC0gZHZhbCgmZXBzKTsKICAgICAgICAgICAgIGZvciAoaSA9IDA7
OykgewotICAgICAgICAgICAgICAgIEwgPSAobG9uZyBpbnQpZHZhbCgmdSk7CisgICAgICAgICAg
ICAgICAgTCA9IHN0YXRpY19jYXN0PGludDMyX3Q+KChsb25nIGludClkdmFsKCZ1KSk7CiAgICAg
ICAgICAgICAgICAgZHZhbCgmdSkgLT0gTDsKICAgICAgICAgICAgICAgICAqcysrID0gJzAnICsg
KGludClMOwogICAgICAgICAgICAgICAgIGlmIChkdmFsKCZ1KSA8IGR2YWwoJmVwcykpCkBAIC0x
MjA2LDcgKzEyMDYsOCBAQCByZXQ6CiAgICAgQVNTRVJUKHMgPiByZXN1bHQpOwogICAgICpzID0g
MDsKICAgICBleHBvbmVudE91dCA9IGs7Ci0gICAgcHJlY2lzaW9uT3V0ID0gcyAtIHJlc3VsdDsK
KyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8c2l6ZV90PihzIC0gcmVzdWx0KSA8IHNpemVvZihEdG9h
QnVmZmVyKSk7CisgICAgcHJlY2lzaW9uT3V0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHMgLSBy
ZXN1bHQpOwogfQogCiB2b2lkIGR0b2EoRHRvYUJ1ZmZlciByZXN1bHQsIGRvdWJsZSBkZCwgYm9v
bCYgc2lnbiwgaW50JiBleHBvbmVudCwgdW5zaWduZWQmIHByZWNpc2lvbikKQEAgLTEyNjQsOCAr
MTI2NSwxMiBAQCBzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIqIGZvcm1hdFN0cmluZ1RydW5jYXRp
bmdUcmFpbGluZ1plcm9zSWZOZWVkZWQoTnVtYmVyVG9TdAogICAgICAgICAtLXRydW5jYXRlZExl
bmd0aDsKICAgICB9CiAKKyAgICBzaXplX3QgZmluYWxUcnVuY2F0ZWRMZW5ndGggPSB0cnVuY2F0
ZWRMZW5ndGggKyAxOworICAgIGlmIChmaW5hbFRydW5jYXRlZExlbmd0aCA+IHN0ZDo6bnVtZXJp
Y19saW1pdHM8aW50Pjo6bWF4KCkpCisgICAgICAgIENSQVNIKCk7CisKICAgICAvLyBUcnVuY2F0
ZSB0aGUgU3RyaW5nQnVpbGRlciwgYW5kIHJldHVybiB0aGUgZmluYWwgcmVzdWx0LgotICAgIGJ1
aWxkZXIuU2V0UG9zaXRpb24odHJ1bmNhdGVkTGVuZ3RoICsgMSk7CisgICAgYnVpbGRlci5TZXRQ
b3NpdGlvbihzdGF0aWNfY2FzdDxpbnQ+KGZpbmFsVHJ1bmNhdGVkTGVuZ3RoKSk7CiAgICAgcmV0
dXJuIGJ1aWxkZXIuRmluYWxpemUoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
dGV4dC9BU0NJSUZhc3RQYXRoLmggYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0FTQ0lJRmFzdFBhdGgu
aAppbmRleCAwMjMzZWZjNmU0YjhhYTA0NWRhMTEzY2QwZjFkZmZiMTFmMzVhY2YyLi42OWJlYWI4
MzA2MzgxMzg2MzIwNTk2ODA4YTA3MGQzODJlZGRiMmU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RG
L3d0Zi90ZXh0L0FTQ0lJRmFzdFBhdGguaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0FTQ0lJ
RmFzdFBhdGguaApAQCAtMTEyLDkgKzExMiw5IEBAIGlubGluZSB2b2lkIGNvcHlMQ2hhcnNGcm9t
VUNoYXJTb3VyY2UoTENoYXIqIGRlc3RpbmF0aW9uLCBjb25zdCBVQ2hhciogc291cmNlLCBzCiAg
ICAgfQogCiAgICAgY29uc3QgdWludHB0cl90IHNvdXJjZUxvYWRTaXplID0gMzI7IC8vIFByb2Nl
c3MgMzIgYnl0ZXMgKDE2IFVDaGFycykgZWFjaCBpdGVyYXRpb24KLSAgICBjb25zdCB1bnNpZ25l
ZCB1Y2hhcnNQZXJMb29wID0gc291cmNlTG9hZFNpemUgLyBzaXplb2YoVUNoYXIpOworICAgIGNv
bnN0IHNpemVfdCB1Y2hhcnNQZXJMb29wID0gc291cmNlTG9hZFNpemUgLyBzaXplb2YoVUNoYXIp
OwogICAgIGlmIChsZW5ndGggPiB1Y2hhcnNQZXJMb29wKSB7Ci0gICAgICAgIGNvbnN0IHVuc2ln
bmVkIGVuZExlbmd0aCA9IGxlbmd0aCAtIHVjaGFyc1Blckxvb3AgKyAxOworICAgICAgICBjb25z
dCBzaXplX3QgZW5kTGVuZ3RoID0gbGVuZ3RoIC0gdWNoYXJzUGVyTG9vcCArIDE7CiAgICAgICAg
IGZvciAoOyBpIDwgZW5kTGVuZ3RoOyBpICs9IHVjaGFyc1Blckxvb3ApIHsKICNpZm5kZWYgTkRF
QlVHCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoZWNrSW5kZXggPSAwOyBjaGVja0luZGV4
IDwgdWNoYXJzUGVyTG9vcDsgKytjaGVja0luZGV4KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvdGV4dC9BdG9taWNTdHJpbmcuaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbWljU3RyaW5n
LmgKaW5kZXggOGFlYTU4NTA3N2NjNTEyNGUwYmRjZTgyZjhhZWJiMDhkNzU4NTU5Yi4uYzRhOTk1
ZTI4NWU4ZDdjMjZhZjI4YjJjZWE2YmYzZTQ2N2UxYzgwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri93dGYvdGV4dC9BdG9taWNTdHJpbmcuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21p
Y1N0cmluZy5oCkBAIC0xMDIsMTAgKzEwMiwxMCBAQCBwdWJsaWM6CiAgICAgYm9vbCBjb250YWlu
cyhjb25zdCBTdHJpbmcmIHMsIGJvb2wgY2FzZVNlbnNpdGl2ZSA9IHRydWUpIGNvbnN0CiAgICAg
ICAgIHsgcmV0dXJuIG1fc3RyaW5nLmNvbnRhaW5zKHMsIGNhc2VTZW5zaXRpdmUpOyB9CiAKLSAg
ICBzaXplX3QgZmluZChVQ2hhciBjLCBzaXplX3Qgc3RhcnQgPSAwKSBjb25zdCB7IHJldHVybiBt
X3N0cmluZy5maW5kKGMsIHN0YXJ0KTsgfQotICAgIHNpemVfdCBmaW5kKGNvbnN0IExDaGFyKiBz
LCBzaXplX3Qgc3RhcnQgPSAwLCBib29sIGNhc2VTZW50aXRpdmUgPSB0cnVlKSBjb25zdAorICAg
IHNpemVfdCBmaW5kKFVDaGFyIGMsIHVuc2lnbmVkIHN0YXJ0ID0gMCkgY29uc3QgeyByZXR1cm4g
bV9zdHJpbmcuZmluZChjLCBzdGFydCk7IH0KKyAgICBzaXplX3QgZmluZChjb25zdCBMQ2hhciog
cywgdW5zaWduZWQgc3RhcnQgPSAwLCBib29sIGNhc2VTZW50aXRpdmUgPSB0cnVlKSBjb25zdAog
ICAgICAgICB7IHJldHVybiBtX3N0cmluZy5maW5kKHMsIHN0YXJ0LCBjYXNlU2VudGl0aXZlKTsg
fQotICAgIHNpemVfdCBmaW5kKGNvbnN0IFN0cmluZyYgcywgc2l6ZV90IHN0YXJ0ID0gMCwgYm9v
bCBjYXNlU2VudGl0aXZlID0gdHJ1ZSkgY29uc3QKKyAgICBzaXplX3QgZmluZChjb25zdCBTdHJp
bmcmIHMsIHVuc2lnbmVkIHN0YXJ0ID0gMCwgYm9vbCBjYXNlU2VudGl0aXZlID0gdHJ1ZSkgY29u
c3QKICAgICAgICAgeyByZXR1cm4gbV9zdHJpbmcuZmluZChzLCBzdGFydCwgY2FzZVNlbnRpdGl2
ZSk7IH0KICAgICAKICAgICBib29sIHN0YXJ0c1dpdGgoY29uc3QgU3RyaW5nJiBzLCBib29sIGNh
c2VTZW5zaXRpdmUgPSB0cnVlKSBjb25zdApAQCAtMTk0LDcgKzE5NCwxNSBAQCBwcml2YXRlOgog
aW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBdG9taWNTdHJpbmcmIGEsIGNvbnN0IEF0b21p
Y1N0cmluZyYgYikgeyByZXR1cm4gYS5pbXBsKCkgPT0gYi5pbXBsKCk7IH0KIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBBdG9taWNTdHJpbmcmLCBjb25zdCBMQ2hhciopOwogaW5saW5lIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBBdG9taWNTdHJpbmcmIGEsIGNvbnN0IGNoYXIqIGIpIHsgcmV0dXJuIFdU
Rjo6ZXF1YWwoYS5pbXBsKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihiKSk7IH0K
LWlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgQXRvbWljU3RyaW5nJiBhLCBjb25zdCBWZWN0
b3I8VUNoYXI+JiBiKSB7IHJldHVybiBhLmltcGwoKSAmJiBlcXVhbChhLmltcGwoKSwgYi5kYXRh
KCksIGIuc2l6ZSgpKTsgfSAgICAKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgQXRvbWlj
U3RyaW5nJiBhLCBjb25zdCBWZWN0b3I8VUNoYXI+JiBiKSB7CisgICAgU3RyaW5nSW1wbCAqYUlt
cGwgPSBhLmltcGwoKTsKKyAgICBpZiAoIWFJbXBsKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgc2l6ZV90IGJMZW5ndGggPSBiLnNpemUoKTsKKyAgICBpZiAoYkxlbmd0aCA+IHN0ZDo6bnVt
ZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKKyAgICAgICAgQ1JBU0goKTsKKyAgICByZXR1
cm4gZXF1YWwoYUltcGwsIGIuZGF0YSgpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYkxlbmd0aCkp
OworfQogaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBdG9taWNTdHJpbmcmIGEsIGNvbnN0
IFN0cmluZyYgYikgeyByZXR1cm4gZXF1YWwoYS5pbXBsKCksIGIuaW1wbCgpKTsgfQogaW5saW5l
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBMQ2hhciogYSwgY29uc3QgQXRvbWljU3RyaW5nJiBiKSB7
IHJldHVybiBiID09IGE7IH0KIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgU3RyaW5nJiBh
LCBjb25zdCBBdG9taWNTdHJpbmcmIGIpIHsgcmV0dXJuIGVxdWFsKGEuaW1wbCgpLCBiLmltcGwo
KSk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvQmFzZTY0LmNwcCBiL1NvdXJj
ZS9XVEYvd3RmL3RleHQvQmFzZTY0LmNwcAppbmRleCA3YTA0NjdhMzZjOGFiMzM1Mzg2NTViMGY1
NDYyNDcwNmJhMDRjM2FjLi42NDgyMWRiNTZkYmVhZWM5MzFjODE2ZGY2MjhkNzllOTBkYzEyNmE5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0Jhc2U2NC5jcHAKKysrIGIvU291cmNl
L1dURi93dGYvdGV4dC9CYXNlNjQuY3BwCkBAIC02NCw3ICs2NCwxMCBAQCBTdHJpbmcgYmFzZTY0
RW5jb2RlKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCwgQmFzZTY0RW5jb2RlUG9s
aWN5IHBvbGljeQogewogICAgIFZlY3RvcjxjaGFyPiByZXN1bHQ7CiAgICAgYmFzZTY0RW5jb2Rl
KGRhdGEsIGxlbmd0aCwgcmVzdWx0LCBwb2xpY3kpOwotICAgIHJldHVybiBTdHJpbmcocmVzdWx0
LmRhdGEoKSwgcmVzdWx0LnNpemUoKSk7CisgICAgc2l6ZV90IHJlc3VsdExlbmd0aCA9IHJlc3Vs
dC5zaXplKCk7CisgICAgaWYgKHJlc3VsdExlbmd0aCA+IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5z
aWduZWQ+OjptYXgoKSkKKyAgICAgICAgQ1JBU0goKTsKKyAgICByZXR1cm4gU3RyaW5nKHJlc3Vs
dC5kYXRhKCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihyZXN1bHRMZW5ndGgpKTsKIH0KIAogdm9p
ZCBiYXNlNjRFbmNvZGUoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuLCBWZWN0b3I8Y2hh
cj4mIG91dCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSkKQEAgLTEzMywxMCArMTM2LDExIEBA
IGJvb2wgYmFzZTY0RGVjb2RlKGNvbnN0IFZlY3RvcjxjaGFyPiYgaW4sIFZlY3RvcjxjaGFyPiYg
b3V0LCBCYXNlNjREZWNvZGVQb2xpY3kKICAgICBvdXQuY2xlYXIoKTsKIAogICAgIC8vIElmIHRo
ZSBpbnB1dCBzdHJpbmcgaXMgcGF0aG9sb2dpY2FsbHkgbGFyZ2UsIGp1c3QgcmV0dXJuIG5vdGhp
bmcuCi0gICAgaWYgKGluLnNpemUoKSA+IFVJTlRfTUFYKQorICAgIHNpemVfdCBpbkxlbmd0aCA9
IGluLnNpemUoKTsKKyAgICBpZiAoaW5MZW5ndGggPiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2ln
bmVkPjo6bWF4KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBiYXNlNjRE
ZWNvZGUoaW4uZGF0YSgpLCBpbi5zaXplKCksIG91dCwgcG9saWN5KTsKKyAgICByZXR1cm4gYmFz
ZTY0RGVjb2RlKGluLmRhdGEoKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluTGVuZ3RoKSwgb3V0
LCBwb2xpY3kpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvdGV4dC9CYXNlNjQuaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvQmFzZTY0LmgKaW5k
ZXggNWIwZDRkODBlMjUxM2Q2NjlmMWFhNDViMzI2Mjg1NjhlMDYzYmMyYy4uMzlmMjNjNjI2NTk3
M2ViYzQwY2M0OTFkNDExZmE1Zjg4NmYyNmVkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYv
dGV4dC9CYXNlNjQuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0Jhc2U2NC5oCkBAIC01Nywy
MiArNTcsMzQgQEAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgYmFzZTY0RGVjb2RlKGNvbnN0IGNo
YXIqLCB1bnNpZ25lZCwgVmVjdG9yPGNoYXI+JiwgQmFzZTYKIAogaW5saW5lIHZvaWQgYmFzZTY0
RW5jb2RlKGNvbnN0IFZlY3RvcjxjaGFyPiYgaW4sIFZlY3RvcjxjaGFyPiYgb3V0LCBCYXNlNjRF
bmNvZGVQb2xpY3kgcG9saWN5KQogewotICAgIGJhc2U2NEVuY29kZShpbi5kYXRhKCksIGluLnNp
emUoKSwgb3V0LCBwb2xpY3kpOworICAgIHNpemVfdCBpbkxlbmd0aCA9IGluLnNpemUoKTsKKyAg
ICBpZiAoaW5MZW5ndGggPiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpCisg
ICAgICAgIENSQVNIKCk7CisgICAgYmFzZTY0RW5jb2RlKGluLmRhdGEoKSwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KGluTGVuZ3RoKSwgb3V0LCBwb2xpY3kpOwogfQogCiBpbmxpbmUgdm9pZCBiYXNl
NjRFbmNvZGUoY29uc3QgQ1N0cmluZyYgaW4sIFZlY3RvcjxjaGFyPiYgb3V0LCBCYXNlNjRFbmNv
ZGVQb2xpY3kgcG9saWN5KQogewotICAgIGJhc2U2NEVuY29kZShpbi5kYXRhKCksIGluLmxlbmd0
aCgpLCBvdXQsIHBvbGljeSk7CisgICAgc2l6ZV90IGluTGVuZ3RoID0gaW4ubGVuZ3RoKCk7Cisg
ICAgaWYgKGluTGVuZ3RoID4gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQor
ICAgICAgICBDUkFTSCgpOworICAgIGJhc2U2NEVuY29kZShpbi5kYXRhKCksIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihpbkxlbmd0aCksIG91dCwgcG9saWN5KTsKIH0KIAogaW5saW5lIFN0cmluZyBi
YXNlNjRFbmNvZGUoY29uc3QgVmVjdG9yPGNoYXI+JiBpbiwgQmFzZTY0RW5jb2RlUG9saWN5IHBv
bGljeSkKIHsKLSAgICByZXR1cm4gYmFzZTY0RW5jb2RlKGluLmRhdGEoKSwgaW4uc2l6ZSgpLCBw
b2xpY3kpOworICAgIHNpemVfdCBpbkxlbmd0aCA9IGluLnNpemUoKTsKKyAgICBpZiAoaW5MZW5n
dGggPiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpCisgICAgICAgIENSQVNI
KCk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZShpbi5kYXRhKCksIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihpbkxlbmd0aCksIHBvbGljeSk7CiB9CiAKIGlubGluZSBTdHJpbmcgYmFzZTY0RW5jb2Rl
KGNvbnN0IENTdHJpbmcmIGluLCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5KQogewotICAgIHJl
dHVybiBiYXNlNjRFbmNvZGUoaW4uZGF0YSgpLCBpbi5sZW5ndGgoKSwgcG9saWN5KTsKKyAgICBz
aXplX3QgaW5MZW5ndGggPSBpbi5sZW5ndGgoKTsKKyAgICBpZiAoaW5MZW5ndGggPiBzdGQ6Om51
bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpCisgICAgICAgIENSQVNIKCk7CisgICAgcmV0
dXJuIGJhc2U2NEVuY29kZShpbi5kYXRhKCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbkxlbmd0
aCksIHBvbGljeSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmggYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmlu
Z0J1aWxkZXIuaAppbmRleCBlNjVmOGYzMDE1MGY2NGYxOWNjYmM3NTIzNzFhZDc0NmFiYzhmY2Vj
Li5hMDQzMmUwODc2OWI4ZTU5Y2FhNTU3MTM0NjFlMjU2ZTZhODQwYjUxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90
ZXh0L1N0cmluZ0J1aWxkZXIuaApAQCAtMTA1LDggKzEwNSwxMiBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIGFwcGVuZChjb25zdCBjaGFyKiBjaGFyYWN0ZXJzKQogICAgIHsKLSAgICAgICAgaWYgKGNo
YXJhY3RlcnMpCi0gICAgICAgICAgICBhcHBlbmQoY2hhcmFjdGVycywgc3RybGVuKGNoYXJhY3Rl
cnMpKTsKKyAgICAgICAgaWYgKCFjaGFyYWN0ZXJzKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICBzaXplX3QgbGVuZ3RoID0gc3RybGVuKGNoYXJhY3RlcnMpOworICAgICAgICBpZiAobGVu
Z3RoID4gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQorICAgICAgICAgICAg
Q1JBU0goKTsKKyAgICAgICAgYXBwZW5kKGNoYXJhY3RlcnMsIHN0YXRpY19jYXN0PHVuc2lnbmVk
PihsZW5ndGgpKTsKICAgICB9CiAKICAgICB2b2lkIGFwcGVuZChVQ2hhciBjKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oIGIvU291cmNlL1dURi93
dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oCmluZGV4IDliMWVjNTc5MDk4NGIyOTUzYWVhODgy
ZTgxMTEzM2IyNTdjZDEwMGUuLjQxYmZlMDIxYTRkYTgwMzcwYmQyMjRhYWNkMmUxYzVmMjE5NzY5
ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUuaAor
KysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmgKQEAgLTExNyw4ICsx
MTcsMTEgQEAgY2xhc3MgU3RyaW5nVHlwZUFkYXB0ZXI8Y2hhcio+IHsKIHB1YmxpYzoKICAgICBT
dHJpbmdUeXBlQWRhcHRlcjxjaGFyKj4oY2hhciogYnVmZmVyKQogICAgICAgICA6IG1fYnVmZmVy
KGJ1ZmZlcikKLSAgICAgICAgLCBtX2xlbmd0aChzdHJsZW4oYnVmZmVyKSkKICAgICB7CisgICAg
ICAgIHNpemVfdCBidWZmZXJMZW5ndGggPSBzdHJsZW4oYnVmZmVyKTsKKyAgICAgICAgaWYgKGJ1
ZmZlckxlbmd0aCA+IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKKyAgICAg
ICAgICAgIENSQVNIKCk7CisgICAgICAgIG1fbGVuZ3RoID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KGJ1ZmZlckxlbmd0aCk7CiAgICAgfQogCiAgICAgdW5zaWduZWQgbGVuZ3RoKCkgeyByZXR1cm4g
bV9sZW5ndGg7IH0KQEAgLTE0OCw5ICsxNTEsMTIgQEAgdGVtcGxhdGU8PgogY2xhc3MgU3RyaW5n
VHlwZUFkYXB0ZXI8TENoYXIqPiB7CiBwdWJsaWM6CiAgICAgU3RyaW5nVHlwZUFkYXB0ZXI8TENo
YXIqPihMQ2hhciogYnVmZmVyKQotICAgIDogbV9idWZmZXIoYnVmZmVyKQotICAgICwgbV9sZW5n
dGgoc3RybGVuKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGJ1ZmZlcikpKQorICAgICAgICA6IG1f
YnVmZmVyKGJ1ZmZlcikKICAgICB7CisgICAgICAgIHNpemVfdCBidWZmZXJMZW5ndGggPSBzdHJs
ZW4ocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oYnVmZmVyKSk7CisgICAgICAgIGlmIChidWZmZXJM
ZW5ndGggPiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpCisgICAgICAgICAg
ICBDUkFTSCgpOworICAgICAgICBtX2xlbmd0aCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihidWZm
ZXJMZW5ndGgpOwogICAgIH0KIAogICAgIHVuc2lnbmVkIGxlbmd0aCgpIHsgcmV0dXJuIG1fbGVu
Z3RoOyB9CkBAIC0xODYsNyArMTkyLDcgQEAgcHVibGljOgogICAgICAgICBpZiAobGVuID4gc3Rk
OjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQogICAgICAgICAgICAgQ1JBU0goKTsK
IAotICAgICAgICBtX2xlbmd0aCA9IGxlbjsKKyAgICAgICAgbV9sZW5ndGggPSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4obGVuKTsKICAgICB9CiAKICAgICB1bnNpZ25lZCBsZW5ndGgoKSB7IHJldHVy
biBtX2xlbmd0aDsgfQpAQCAtMjEzLDggKzIxOSwxMSBAQCBjbGFzcyBTdHJpbmdUeXBlQWRhcHRl
cjxjb25zdCBjaGFyKj4gewogcHVibGljOgogICAgIFN0cmluZ1R5cGVBZGFwdGVyPGNvbnN0IGNo
YXIqPihjb25zdCBjaGFyKiBidWZmZXIpCiAgICAgICAgIDogbV9idWZmZXIoYnVmZmVyKQotICAg
ICAgICAsIG1fbGVuZ3RoKHN0cmxlbihidWZmZXIpKQogICAgIHsKKyAgICAgICAgc2l6ZV90IGJ1
ZmZlckxlbmd0aCA9IHN0cmxlbihidWZmZXIpOworICAgICAgICBpZiAoYnVmZmVyTGVuZ3RoID4g
c3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQorICAgICAgICAgICAgQ1JBU0go
KTsKKyAgICAgICAgbV9sZW5ndGggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYnVmZmVyTGVuZ3Ro
KTsKICAgICB9CiAKICAgICB1bnNpZ25lZCBsZW5ndGgoKSB7IHJldHVybiBtX2xlbmd0aDsgfQpA
QCAtMjQ0LDggKzI1MywxMSBAQCBjbGFzcyBTdHJpbmdUeXBlQWRhcHRlcjxjb25zdCBMQ2hhcio+
IHsKIHB1YmxpYzoKICAgICBTdHJpbmdUeXBlQWRhcHRlcjxjb25zdCBMQ2hhcio+KGNvbnN0IExD
aGFyKiBidWZmZXIpCiAgICAgICAgIDogbV9idWZmZXIoYnVmZmVyKQotICAgICAgICAsIG1fbGVu
Z3RoKHN0cmxlbihyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihidWZmZXIpKSkKICAgICB7
CisgICAgICAgIHNpemVfdCBidWZmZXJMZW5ndGggPSBzdHJsZW4ocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBjaGFyKj4oYnVmZmVyKSk7CisgICAgICAgIGlmIChidWZmZXJMZW5ndGggPiBzdGQ6Om51
bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpCisgICAgICAgICAgICBDUkFTSCgpOworICAg
ICAgICBtX2xlbmd0aCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihidWZmZXJMZW5ndGgpOwogICAg
IH0KIAogICAgIHVuc2lnbmVkIGxlbmd0aCgpIHsgcmV0dXJuIG1fbGVuZ3RoOyB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwIGIvU291cmNlL1dURi93dGYv
dGV4dC9TdHJpbmdJbXBsLmNwcAppbmRleCA5YTRlMDk1MDFkMzU4NzY5OTczM2NjZmMzNjk1NTg3
MmRhZmUwYTkzLi4wZGQ0MjU0Y2JlYTBiNTAwYjg1NjU4YzY1ZmI3ZWZhNTdlZDI2MzJmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwCisrKyBiL1NvdXJjZS9X
VEYvd3RmL3RleHQvU3RyaW5nSW1wbC5jcHAKQEAgLTE2MCw4ICsxNjAsMTAgQEAgUGFzc1JlZlB0
cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpjcmVhdGVGcm9tTGl0ZXJhbChjb25zdCBjaGFyKiBj
aGFyYWN0ZXJzKQogICAgIHNpemVfdCBsZW5ndGggPSBzdHJsZW4oY2hhcmFjdGVycyk7CiAgICAg
aWYgKCFsZW5ndGgpCiAgICAgICAgIHJldHVybiBlbXB0eSgpOworICAgIGlmIChsZW5ndGggPiBz
dGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpCisgICAgICAgIENSQVNIKCk7CiAg
ICAgQVNTRVJUKGNoYXJhY3RlcnNBcmVBbGxBU0NJSTxMQ2hhcj4ocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBMQ2hhcio+KGNoYXJhY3RlcnMpLCBsZW5ndGgpKTsKLSAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFN0cmluZ0ltcGwoY2hhcmFjdGVycywgbGVuZ3RoLCBDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkp
OworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3RyaW5nSW1wbChjaGFyYWN0ZXJzLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4obGVuZ3RoKSwgQ29uc3RydWN0RnJvbUxpdGVyYWwpKTsKIH0KIAogUGFz
c1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpjcmVhdGVVbmluaXRpYWxpemVkKHVuc2ln
bmVkIGxlbmd0aCwgTENoYXIqJiBkYXRhKQpAQCAtMjkyLDcgKzI5NCw3IEBAIFBhc3NSZWZQdHI8
U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y3JlYXRlKGNvbnN0IExDaGFyKiBzdHJpbmcpCiAgICAg
c2l6ZV90IGxlbmd0aCA9IHN0cmxlbihyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihzdHJp
bmcpKTsKICAgICBpZiAobGVuZ3RoID4gbnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkK
ICAgICAgICAgQ1JBU0goKTsKLSAgICByZXR1cm4gY3JlYXRlKHN0cmluZywgbGVuZ3RoKTsKKyAg
ICByZXR1cm4gY3JlYXRlKHN0cmluZywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxlbmd0aCkpOwog
fQogCiBjb25zdCBVQ2hhciogU3RyaW5nSW1wbDo6Z2V0RGF0YTE2U2xvd0Nhc2UoKSBjb25zdApA
QCAtMzAzLDcgKzMwNSw3IEBAIGNvbnN0IFVDaGFyKiBTdHJpbmdJbXBsOjpnZXREYXRhMTZTbG93
Q2FzZSgpIGNvbnN0CiAgICAgaWYgKGJ1ZmZlck93bmVyc2hpcCgpID09IEJ1ZmZlclN1YnN0cmlu
ZykgewogICAgICAgICAvLyBJZiB0aGlzIGlzIGEgc3Vic3RyaW5nLCByZXR1cm4gYSBwb2ludGVy
IGludG8gdGhlIHBhcmVudCBzdHJpbmcuCiAgICAgICAgIC8vIFRPRE86IENvbnNpZGVyIHNldmVy
aW5nIHRoaXMgc3RyaW5nIGZyb20gdGhlIHBhcmVudCBzdHJpbmcKLSAgICAgICAgdW5zaWduZWQg
b2Zmc2V0ID0gbV9kYXRhOCAtIG1fc3Vic3RyaW5nQnVmZmVyLT5jaGFyYWN0ZXJzOCgpOworICAg
ICAgICBzaXplX3Qgb2Zmc2V0ID0gbV9kYXRhOCAtIG1fc3Vic3RyaW5nQnVmZmVyLT5jaGFyYWN0
ZXJzOCgpOwogICAgICAgICByZXR1cm4gbV9zdWJzdHJpbmdCdWZmZXItPmNoYXJhY3RlcnMoKSAr
IG9mZnNldDsKICAgICB9CiAKQEAgLTY5OCw3ICs3MDAsNyBAQCBBTFdBWVNfSU5MSU5FIFBhc3NS
ZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6cmVtb3ZlQ2hhcmFjdGVycyhjb25zdCBDaGFy
VHlwZQogICAgIAogICAgIFN0cmluZ0J1ZmZlcjxDaGFyVHlwZT4gZGF0YShtX2xlbmd0aCk7CiAg
ICAgQ2hhclR5cGUqIHRvID0gZGF0YS5jaGFyYWN0ZXJzKCk7Ci0gICAgdW5zaWduZWQgb3V0YyA9
IGZyb20gLSBjaGFyYWN0ZXJzOworICAgIHVuc2lnbmVkIG91dGMgPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oZnJvbSAtIGNoYXJhY3RlcnMpOwogICAgIAogICAgIGlmIChvdXRjKQogICAgICAgICBt
ZW1jcHkodG8sIGNoYXJhY3RlcnMsIG91dGMgKiBzaXplb2YoQ2hhclR5cGUpKTsKQEAgLTg5NCw3
ICs4OTYsNyBAQCBzaXplX3QgU3RyaW5nSW1wbDo6ZmluZChjb25zdCBMQ2hhciogbWF0Y2hTdHJp
bmcsIHVuc2lnbmVkIGluZGV4KQogICAgIHNpemVfdCBtYXRjaFN0cmluZ0xlbmd0aCA9IHN0cmxl
bihyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihtYXRjaFN0cmluZykpOwogICAgIGlmICht
YXRjaFN0cmluZ0xlbmd0aCA+IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpCiAgICAg
ICAgIENSQVNIKCk7Ci0gICAgdW5zaWduZWQgbWF0Y2hMZW5ndGggPSBtYXRjaFN0cmluZ0xlbmd0
aDsKKyAgICB1bnNpZ25lZCBtYXRjaExlbmd0aCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtYXRj
aFN0cmluZ0xlbmd0aCk7CiAgICAgaWYgKCFtYXRjaExlbmd0aCkKICAgICAgICAgcmV0dXJuIG1p
bihpbmRleCwgbGVuZ3RoKCkpOwogCkBAIC05NDIsNyArOTQ0LDcgQEAgc2l6ZV90IFN0cmluZ0lt
cGw6OmZpbmRJZ25vcmluZ0Nhc2UoY29uc3QgTENoYXIqIG1hdGNoU3RyaW5nLCB1bnNpZ25lZCBp
bmRleCkKICAgICBzaXplX3QgbWF0Y2hTdHJpbmdMZW5ndGggPSBzdHJsZW4ocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBjaGFyKj4obWF0Y2hTdHJpbmcpKTsKICAgICBpZiAobWF0Y2hTdHJpbmdMZW5n
dGggPiBudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQogICAgICAgICBDUkFTSCgpOwot
ICAgIHVuc2lnbmVkIG1hdGNoTGVuZ3RoID0gbWF0Y2hTdHJpbmdMZW5ndGg7CisgICAgdW5zaWdu
ZWQgbWF0Y2hMZW5ndGggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obWF0Y2hTdHJpbmdMZW5ndGgp
OwogICAgIGlmICghbWF0Y2hMZW5ndGgpCiAgICAgICAgIHJldHVybiBtaW4oaW5kZXgsIGxlbmd0
aCgpKTsKIApAQCAtMTQwNCw3ICsxNDA2LDcgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJp
bmdJbXBsOjpyZXBsYWNlKFVDaGFyIHBhdHRlcm4sIGNvbnN0IExDaGFyKiByZXBsYWNlbWUKICAg
ICB1bnNpZ25lZCBtYXRjaENvdW50ID0gMDsKIAogICAgIC8vIENvdW50IHRoZSBtYXRjaGVzLgot
ICAgIHdoaWxlICgoc3JjU2VnbWVudFN0YXJ0ID0gZmluZChwYXR0ZXJuLCBzcmNTZWdtZW50U3Rh
cnQpKSAhPSBub3RGb3VuZCkgeworICAgIHdoaWxlICgoc3JjU2VnbWVudFN0YXJ0ID0gZmluZChw
YXR0ZXJuLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3JjU2VnbWVudFN0YXJ0KSkpICE9IG5vdEZv
dW5kKSB7CiAgICAgICAgICsrbWF0Y2hDb3VudDsKICAgICAgICAgKytzcmNTZWdtZW50U3RhcnQ7
CiAgICAgfQpAQCAtMTQyNSw3ICsxNDI3LDcgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJp
bmdJbXBsOjpyZXBsYWNlKFVDaGFyIHBhdHRlcm4sIGNvbnN0IExDaGFyKiByZXBsYWNlbWUKIAog
ICAgIC8vIENvbnN0cnVjdCB0aGUgbmV3IGRhdGEuCiAgICAgc2l6ZV90IHNyY1NlZ21lbnRFbmQ7
Ci0gICAgdW5zaWduZWQgc3JjU2VnbWVudExlbmd0aDsKKyAgICBzaXplX3Qgc3JjU2VnbWVudExl
bmd0aDsKICAgICBzcmNTZWdtZW50U3RhcnQgPSAwOwogICAgIHVuc2lnbmVkIGRzdE9mZnNldCA9
IDA7CiAKQEAgLTE0MzMsNyArMTQzNSw3IEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5n
SW1wbDo6cmVwbGFjZShVQ2hhciBwYXR0ZXJuLCBjb25zdCBMQ2hhciogcmVwbGFjZW1lCiAgICAg
ICAgIExDaGFyKiBkYXRhOwogICAgICAgICBSZWZQdHI8U3RyaW5nSW1wbD4gbmV3SW1wbCA9IGNy
ZWF0ZVVuaW5pdGlhbGl6ZWQobmV3U2l6ZSwgZGF0YSk7CiAKLSAgICAgICAgd2hpbGUgKChzcmNT
ZWdtZW50RW5kID0gZmluZChwYXR0ZXJuLCBzcmNTZWdtZW50U3RhcnQpKSAhPSBub3RGb3VuZCkg
eworICAgICAgICB3aGlsZSAoKHNyY1NlZ21lbnRFbmQgPSBmaW5kKHBhdHRlcm4sIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihzcmNTZWdtZW50U3RhcnQpKSkgIT0gbm90Rm91bmQpIHsKICAgICAgICAg
ICAgIHNyY1NlZ21lbnRMZW5ndGggPSBzcmNTZWdtZW50RW5kIC0gc3JjU2VnbWVudFN0YXJ0Owog
ICAgICAgICAgICAgbWVtY3B5KGRhdGEgKyBkc3RPZmZzZXQsIG1fZGF0YTggKyBzcmNTZWdtZW50
U3RhcnQsIHNyY1NlZ21lbnRMZW5ndGggKiBzaXplb2YoTENoYXIpKTsKICAgICAgICAgICAgIGRz
dE9mZnNldCArPSBzcmNTZWdtZW50TGVuZ3RoOwpAQCAtMTQ1Myw3ICsxNDU1LDcgQEAgUGFzc1Jl
ZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpyZXBsYWNlKFVDaGFyIHBhdHRlcm4sIGNvbnN0
IExDaGFyKiByZXBsYWNlbWUKICAgICBVQ2hhciogZGF0YTsKICAgICBSZWZQdHI8U3RyaW5nSW1w
bD4gbmV3SW1wbCA9IGNyZWF0ZVVuaW5pdGlhbGl6ZWQobmV3U2l6ZSwgZGF0YSk7CiAKLSAgICB3
aGlsZSAoKHNyY1NlZ21lbnRFbmQgPSBmaW5kKHBhdHRlcm4sIHNyY1NlZ21lbnRTdGFydCkpICE9
IG5vdEZvdW5kKSB7CisgICAgd2hpbGUgKChzcmNTZWdtZW50RW5kID0gZmluZChwYXR0ZXJuLCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oc3JjU2VnbWVudFN0YXJ0KSkpICE9IG5vdEZvdW5kKSB7CiAg
ICAgICAgIHNyY1NlZ21lbnRMZW5ndGggPSBzcmNTZWdtZW50RW5kIC0gc3JjU2VnbWVudFN0YXJ0
OwogICAgICAgICBtZW1jcHkoZGF0YSArIGRzdE9mZnNldCwgbV9kYXRhMTYgKyBzcmNTZWdtZW50
U3RhcnQsIHNyY1NlZ21lbnRMZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKIApAQCAtMTQ4MSw3ICsx
NDgzLDcgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpyZXBsYWNlKFVDaGFy
IHBhdHRlcm4sIGNvbnN0IFVDaGFyKiByZXBsYWNlbWUKICAgICB1bnNpZ25lZCBtYXRjaENvdW50
ID0gMDsKIAogICAgIC8vIENvdW50IHRoZSBtYXRjaGVzLgotICAgIHdoaWxlICgoc3JjU2VnbWVu
dFN0YXJ0ID0gZmluZChwYXR0ZXJuLCBzcmNTZWdtZW50U3RhcnQpKSAhPSBub3RGb3VuZCkgewor
ICAgIHdoaWxlICgoc3JjU2VnbWVudFN0YXJ0ID0gZmluZChwYXR0ZXJuLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oc3JjU2VnbWVudFN0YXJ0KSkpICE9IG5vdEZvdW5kKSB7CiAgICAgICAgICsrbWF0
Y2hDb3VudDsKICAgICAgICAgKytzcmNTZWdtZW50U3RhcnQ7CiAgICAgfQpAQCAtMTUxMCw4ICsx
NTEyLDggQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpyZXBsYWNlKFVDaGFy
IHBhdHRlcm4sIGNvbnN0IFVDaGFyKiByZXBsYWNlbWUKICAgICAgICAgVUNoYXIqIGRhdGE7CiAg
ICAgICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChu
ZXdTaXplLCBkYXRhKTsKIAotICAgICAgICB3aGlsZSAoKHNyY1NlZ21lbnRFbmQgPSBmaW5kKHBh
dHRlcm4sIHNyY1NlZ21lbnRTdGFydCkpICE9IG5vdEZvdW5kKSB7Ci0gICAgICAgICAgICBzcmNT
ZWdtZW50TGVuZ3RoID0gc3JjU2VnbWVudEVuZCAtIHNyY1NlZ21lbnRTdGFydDsKKyAgICAgICAg
d2hpbGUgKChzcmNTZWdtZW50RW5kID0gZmluZChwYXR0ZXJuLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oc3JjU2VnbWVudFN0YXJ0KSkpICE9IG5vdEZvdW5kKSB7CisgICAgICAgICAgICBzcmNTZWdt
ZW50TGVuZ3RoID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHNyY1NlZ21lbnRFbmQgLSBzcmNTZWdt
ZW50U3RhcnQpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNyY1NlZ21l
bnRMZW5ndGg7ICsraSkKICAgICAgICAgICAgICAgICBkYXRhW2kgKyBkc3RPZmZzZXRdID0gbV9k
YXRhOFtpICsgc3JjU2VnbWVudFN0YXJ0XTsKIApAQCAtMTUyMiw3ICsxNTI0LDcgQEAgUGFzc1Jl
ZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpyZXBsYWNlKFVDaGFyIHBhdHRlcm4sIGNvbnN0
IFVDaGFyKiByZXBsYWNlbWUKICAgICAgICAgICAgIHNyY1NlZ21lbnRTdGFydCA9IHNyY1NlZ21l
bnRFbmQgKyAxOwogICAgICAgICB9CiAKLSAgICAgICAgc3JjU2VnbWVudExlbmd0aCA9IG1fbGVu
Z3RoIC0gc3JjU2VnbWVudFN0YXJ0OworICAgICAgICBzcmNTZWdtZW50TGVuZ3RoID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KG1fbGVuZ3RoIC0gc3JjU2VnbWVudFN0YXJ0KTsKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHNyY1NlZ21lbnRMZW5ndGg7ICsraSkKICAgICAgICAgICAg
IGRhdGFbaSArIGRzdE9mZnNldF0gPSBtX2RhdGE4W2kgKyBzcmNTZWdtZW50U3RhcnRdOwogCkBA
IC0xNTM0LDggKzE1MzYsOCBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnJl
cGxhY2UoVUNoYXIgcGF0dGVybiwgY29uc3QgVUNoYXIqIHJlcGxhY2VtZQogICAgIFVDaGFyKiBk
YXRhOwogICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXpl
ZChuZXdTaXplLCBkYXRhKTsKIAotICAgIHdoaWxlICgoc3JjU2VnbWVudEVuZCA9IGZpbmQocGF0
dGVybiwgc3JjU2VnbWVudFN0YXJ0KSkgIT0gbm90Rm91bmQpIHsKLSAgICAgICAgc3JjU2VnbWVu
dExlbmd0aCA9IHNyY1NlZ21lbnRFbmQgLSBzcmNTZWdtZW50U3RhcnQ7CisgICAgd2hpbGUgKChz
cmNTZWdtZW50RW5kID0gZmluZChwYXR0ZXJuLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3JjU2Vn
bWVudFN0YXJ0KSkpICE9IG5vdEZvdW5kKSB7CisgICAgICAgIHNyY1NlZ21lbnRMZW5ndGggPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oc3JjU2VnbWVudEVuZCAtIHNyY1NlZ21lbnRTdGFydCk7CiAg
ICAgICAgIG1lbWNweShkYXRhICsgZHN0T2Zmc2V0LCBtX2RhdGExNiArIHNyY1NlZ21lbnRTdGFy
dCwgc3JjU2VnbWVudExlbmd0aCAqIHNpemVvZihVQ2hhcikpOwogCiAgICAgICAgIGRzdE9mZnNl
dCArPSBzcmNTZWdtZW50TGVuZ3RoOwpAQCAtMTU0NSw3ICsxNTQ3LDcgQEAgUGFzc1JlZlB0cjxT
dHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpyZXBsYWNlKFVDaGFyIHBhdHRlcm4sIGNvbnN0IFVDaGFy
KiByZXBsYWNlbWUKICAgICAgICAgc3JjU2VnbWVudFN0YXJ0ID0gc3JjU2VnbWVudEVuZCArIDE7
CiAgICAgfQogCi0gICAgc3JjU2VnbWVudExlbmd0aCA9IG1fbGVuZ3RoIC0gc3JjU2VnbWVudFN0
YXJ0OworICAgIHNyY1NlZ21lbnRMZW5ndGggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9sZW5n
dGggLSBzcmNTZWdtZW50U3RhcnQpOwogICAgIG1lbWNweShkYXRhICsgZHN0T2Zmc2V0LCBtX2Rh
dGExNiArIHNyY1NlZ21lbnRTdGFydCwgc3JjU2VnbWVudExlbmd0aCAqIHNpemVvZihVQ2hhcikp
OwogCiAgICAgQVNTRVJUKGRzdE9mZnNldCArIHNyY1NlZ21lbnRMZW5ndGggPT0gbmV3SW1wbC0+
bGVuZ3RoKCkpOwpAQCAtMTU2Nyw3ICsxNTY5LDcgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBT
dHJpbmdJbXBsOjpyZXBsYWNlKFN0cmluZ0ltcGwqIHBhdHRlcm4sIFN0cmluZ0ltcGwqIHJlcGwK
ICAgICB1bnNpZ25lZCBtYXRjaENvdW50ID0gMDsKICAgICAKICAgICAvLyBDb3VudCB0aGUgbWF0
Y2hlcy4KLSAgICB3aGlsZSAoKHNyY1NlZ21lbnRTdGFydCA9IGZpbmQocGF0dGVybiwgc3JjU2Vn
bWVudFN0YXJ0KSkgIT0gbm90Rm91bmQpIHsKKyAgICB3aGlsZSAoKHNyY1NlZ21lbnRTdGFydCA9
IGZpbmQocGF0dGVybiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHNyY1NlZ21lbnRTdGFydCkpKSAh
PSBub3RGb3VuZCkgewogICAgICAgICArK21hdGNoQ291bnQ7CiAgICAgICAgIHNyY1NlZ21lbnRT
dGFydCArPSBwYXR0ZXJuTGVuZ3RoOwogICAgIH0KQEAgLTE2MDMsOCArMTYwNSw4IEBAIFBhc3NS
ZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6cmVwbGFjZShTdHJpbmdJbXBsKiBwYXR0ZXJu
LCBTdHJpbmdJbXBsKiByZXBsCiAgICAgICAgIC8vIENhc2UgMQogICAgICAgICBMQ2hhciogZGF0
YTsKICAgICAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IG5ld0ltcGwgPSBjcmVhdGVVbmluaXRpYWxp
emVkKG5ld1NpemUsIGRhdGEpOwotICAgICAgICB3aGlsZSAoKHNyY1NlZ21lbnRFbmQgPSBmaW5k
KHBhdHRlcm4sIHNyY1NlZ21lbnRTdGFydCkpICE9IG5vdEZvdW5kKSB7Ci0gICAgICAgICAgICBz
cmNTZWdtZW50TGVuZ3RoID0gc3JjU2VnbWVudEVuZCAtIHNyY1NlZ21lbnRTdGFydDsKKyAgICAg
ICAgd2hpbGUgKChzcmNTZWdtZW50RW5kID0gZmluZChwYXR0ZXJuLCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oc3JjU2VnbWVudFN0YXJ0KSkpICE9IG5vdEZvdW5kKSB7CisgICAgICAgICAgICBzcmNT
ZWdtZW50TGVuZ3RoID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHNyY1NlZ21lbnRFbmQgLSBzcmNT
ZWdtZW50U3RhcnQpOwogICAgICAgICAgICAgbWVtY3B5KGRhdGEgKyBkc3RPZmZzZXQsIG1fZGF0
YTggKyBzcmNTZWdtZW50U3RhcnQsIHNyY1NlZ21lbnRMZW5ndGggKiBzaXplb2YoTENoYXIpKTsK
ICAgICAgICAgICAgIGRzdE9mZnNldCArPSBzcmNTZWdtZW50TGVuZ3RoOwogICAgICAgICAgICAg
bWVtY3B5KGRhdGEgKyBkc3RPZmZzZXQsIHJlcGxhY2VtZW50LT5tX2RhdGE4LCByZXBTdHJMZW5n
dGggKiBzaXplb2YoTENoYXIpKTsKQEAgLTE2MTIsNyArMTYxNCw3IEBAIFBhc3NSZWZQdHI8U3Ry
aW5nSW1wbD4gU3RyaW5nSW1wbDo6cmVwbGFjZShTdHJpbmdJbXBsKiBwYXR0ZXJuLCBTdHJpbmdJ
bXBsKiByZXBsCiAgICAgICAgICAgICBzcmNTZWdtZW50U3RhcnQgPSBzcmNTZWdtZW50RW5kICsg
cGF0dGVybkxlbmd0aDsKICAgICAgICAgfQogCi0gICAgICAgIHNyY1NlZ21lbnRMZW5ndGggPSBt
X2xlbmd0aCAtIHNyY1NlZ21lbnRTdGFydDsKKyAgICAgICAgc3JjU2VnbWVudExlbmd0aCA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkPihtX2xlbmd0aCAtIHNyY1NlZ21lbnRTdGFydCk7CiAgICAgICAg
IG1lbWNweShkYXRhICsgZHN0T2Zmc2V0LCBtX2RhdGE4ICsgc3JjU2VnbWVudFN0YXJ0LCBzcmNT
ZWdtZW50TGVuZ3RoICogc2l6ZW9mKExDaGFyKSk7CiAKICAgICAgICAgQVNTRVJUKGRzdE9mZnNl
dCArIHNyY1NlZ21lbnRMZW5ndGggPT0gbmV3SW1wbC0+bGVuZ3RoKCkpOwpAQCAtMTYyMiw4ICsx
NjI0LDggQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpyZXBsYWNlKFN0cmlu
Z0ltcGwqIHBhdHRlcm4sIFN0cmluZ0ltcGwqIHJlcGwKIAogICAgIFVDaGFyKiBkYXRhOwogICAg
IFJlZlB0cjxTdHJpbmdJbXBsPiBuZXdJbXBsID0gY3JlYXRlVW5pbml0aWFsaXplZChuZXdTaXpl
LCBkYXRhKTsKLSAgICB3aGlsZSAoKHNyY1NlZ21lbnRFbmQgPSBmaW5kKHBhdHRlcm4sIHNyY1Nl
Z21lbnRTdGFydCkpICE9IG5vdEZvdW5kKSB7Ci0gICAgICAgIHNyY1NlZ21lbnRMZW5ndGggPSBz
cmNTZWdtZW50RW5kIC0gc3JjU2VnbWVudFN0YXJ0OworICAgIHdoaWxlICgoc3JjU2VnbWVudEVu
ZCA9IGZpbmQocGF0dGVybiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHNyY1NlZ21lbnRTdGFydCkp
KSAhPSBub3RGb3VuZCkgeworICAgICAgICBzcmNTZWdtZW50TGVuZ3RoID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KHNyY1NlZ21lbnRFbmQgLSBzcmNTZWdtZW50U3RhcnQpOwogICAgICAgICBpZiAo
c3JjSXM4Qml0KSB7CiAgICAgICAgICAgICAvLyBDYXNlIDMuCiAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgc3JjU2VnbWVudExlbmd0aDsgKytpKQpAQCAtMTY0NSw3ICsxNjQ3
LDcgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpyZXBsYWNlKFN0cmluZ0lt
cGwqIHBhdHRlcm4sIFN0cmluZ0ltcGwqIHJlcGwKICAgICAgICAgc3JjU2VnbWVudFN0YXJ0ID0g
c3JjU2VnbWVudEVuZCArIHBhdHRlcm5MZW5ndGg7CiAgICAgfQogCi0gICAgc3JjU2VnbWVudExl
bmd0aCA9IG1fbGVuZ3RoIC0gc3JjU2VnbWVudFN0YXJ0OworICAgIHNyY1NlZ21lbnRMZW5ndGgg
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9sZW5ndGggLSBzcmNTZWdtZW50U3RhcnQpOwogICAg
IGlmIChzcmNJczhCaXQpIHsKICAgICAgICAgLy8gQ2FzZSAzLgogICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgc3JjU2VnbWVudExlbmd0aDsgKytpKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmggYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0lt
cGwuaAppbmRleCA4ZjU0YTRiM2M0ZDJkNTcwYzVhNjhiN2U3ZjVhNGU5NWNmMjZhYjU1Li4xYjYw
NmI4MWY5ODg1ZWEzZWRjMzYxNzU3MmQ2NDYxY2NkZDYyZmFmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmlu
Z0ltcGwuaApAQCAtMzE0LDcgKzMxNCw3IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIGtleXMgbWVh
bnMgdGhhdCB3ZSBkb24ndCBuZWVkIHRoZW0gdG8gbWF0Y2ggYW55IG90aGVyIHN0cmluZyAoaW4g
ZmFjdCwKICAgICAgICAgLy8gdGhhdCdzIGV4YWN0bHkgdGhlIG9wb3NpdGUgb2Ygd2hhdCB3ZSB3
YW50ISksIGFuZCB0ZWggbm9ybWFsIGhhc2ggd291bGQKICAgICAgICAgLy8gbGVhZCB0byBsb3Rz
IG9mIGNvbmZsaWN0cy4KLSAgICAgICAgdW5zaWduZWQgaGFzaCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dWludHB0cl90Pih0aGlzKTsKKyAgICAgICAgdW5zaWduZWQgaGFzaCA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4odGhpcykpOwogICAgICAgICBoYXNo
IDw8PSBzX2ZsYWdDb3VudDsKICAgICAgICAgaWYgKCFoYXNoKQogICAgICAgICAgICAgaGFzaCA9
IDEgPDwgc19mbGFnQ291bnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0
cmluZy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5jcHAKaW5kZXggMDBjNTE0
MGIxYzAyOGI4MTk5MTkzZTI2YmFhYTVjZjVmZmUxOGFjNi4uZTIzNmQwMmUyZGRjZDE3YWM3NjMw
MGViZGE2Y2I4ZDlkYmQ4Nzg5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9XVEZT
dHJpbmcuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmNwcApAQCAtNjIs
NyArNjIsNyBAQCBTdHJpbmc6OlN0cmluZyhjb25zdCBVQ2hhciogc3RyKQogICAgIGlmIChsZW4g
PiBudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQogICAgICAgICBDUkFTSCgpOwogICAg
IAotICAgIG1faW1wbCA9IFN0cmluZ0ltcGw6OmNyZWF0ZShzdHIsIGxlbik7CisgICAgbV9pbXBs
ID0gU3RyaW5nSW1wbDo6Y3JlYXRlKHN0ciwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxlbikpOwog
fQogCiAvLyBDb25zdHJ1Y3QgYSBzdHJpbmcgd2l0aCBsYXRpbjEgZGF0YS4KQEAgLTY2OSw4ICs2
NjksOCBAQCB2b2lkIFN0cmluZzo6c3BsaXQoY29uc3QgU3RyaW5nJiBzZXBhcmF0b3IsIGJvb2wg
YWxsb3dFbXB0eUVudHJpZXMsIFZlY3RvcjxTdHJpbgogICAgIHNpemVfdCBlbmRQb3M7CiAgICAg
d2hpbGUgKChlbmRQb3MgPSBmaW5kKHNlcGFyYXRvciwgc3RhcnRQb3MpKSAhPSBub3RGb3VuZCkg
ewogICAgICAgICBpZiAoYWxsb3dFbXB0eUVudHJpZXMgfHwgc3RhcnRQb3MgIT0gZW5kUG9zKQot
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChzdWJzdHJpbmcoc3RhcnRQb3MsIGVuZFBvcyAtIHN0
YXJ0UG9zKSk7Ci0gICAgICAgIHN0YXJ0UG9zID0gZW5kUG9zICsgc2VwYXJhdG9yLmxlbmd0aCgp
OworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChzdWJzdHJpbmcoc3RhcnRQb3MsIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihlbmRQb3MgLSBzdGFydFBvcykpKTsKKyAgICAgICAgc3RhcnRQb3MgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oZW5kUG9zICsgc2VwYXJhdG9yLmxlbmd0aCgpKTsKICAgICB9
CiAgICAgaWYgKGFsbG93RW1wdHlFbnRyaWVzIHx8IHN0YXJ0UG9zICE9IGxlbmd0aCgpKQogICAg
ICAgICByZXN1bHQuYXBwZW5kKHN1YnN0cmluZyhzdGFydFBvcykpOwpAQCAtNjg0LDggKzY4NCw4
IEBAIHZvaWQgU3RyaW5nOjpzcGxpdChVQ2hhciBzZXBhcmF0b3IsIGJvb2wgYWxsb3dFbXB0eUVu
dHJpZXMsIFZlY3RvcjxTdHJpbmc+JiByZXN1CiAgICAgc2l6ZV90IGVuZFBvczsKICAgICB3aGls
ZSAoKGVuZFBvcyA9IGZpbmQoc2VwYXJhdG9yLCBzdGFydFBvcykpICE9IG5vdEZvdW5kKSB7CiAg
ICAgICAgIGlmIChhbGxvd0VtcHR5RW50cmllcyB8fCBzdGFydFBvcyAhPSBlbmRQb3MpCi0gICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKHN1YnN0cmluZyhzdGFydFBvcywgZW5kUG9zIC0gc3RhcnRQ
b3MpKTsKLSAgICAgICAgc3RhcnRQb3MgPSBlbmRQb3MgKyAxOworICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZChzdWJzdHJpbmcoc3RhcnRQb3MsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihlbmRQb3Mg
LSBzdGFydFBvcykpKTsKKyAgICAgICAgc3RhcnRQb3MgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
ZW5kUG9zICsgMSk7CiAgICAgfQogICAgIGlmIChhbGxvd0VtcHR5RW50cmllcyB8fCBzdGFydFBv
cyAhPSBsZW5ndGgoKSkKICAgICAgICAgcmVzdWx0LmFwcGVuZChzdWJzdHJpbmcoc3RhcnRQb3Mp
KTsKQEAgLTg0OCw4ICs4NDgsMTEgQEAgU3RyaW5nIFN0cmluZzo6bWFrZThCaXRGcm9tMTZCaXRT
b3VyY2UoY29uc3QgVUNoYXIqIHNvdXJjZSwgc2l6ZV90IGxlbmd0aCkKICAgICBpZiAoIWxlbmd0
aCkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCisgICAgaWYgKGxlbmd0aCA+IHN0ZDo6bnVt
ZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKKyAgICAgICAgQ1JBU0goKTsKKwogICAgIExD
aGFyKiBkZXN0aW5hdGlvbjsKLSAgICBTdHJpbmcgcmVzdWx0ID0gU3RyaW5nOjpjcmVhdGVVbmlu
aXRpYWxpemVkKGxlbmd0aCwgZGVzdGluYXRpb24pOworICAgIFN0cmluZyByZXN1bHQgPSBTdHJp
bmc6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxlbmd0aCksIGRl
c3RpbmF0aW9uKTsKIAogICAgIGNvcHlMQ2hhcnNGcm9tVUNoYXJTb3VyY2UoZGVzdGluYXRpb24s
IHNvdXJjZSwgbGVuZ3RoKTsKIApAQCAtODYwLDExICs4NjMsMTQgQEAgU3RyaW5nIFN0cmluZzo6
bWFrZTE2Qml0RnJvbThCaXRTb3VyY2UoY29uc3QgTENoYXIqIHNvdXJjZSwgc2l6ZV90IGxlbmd0
aCkKIHsKICAgICBpZiAoIWxlbmd0aCkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIAor
CisgICAgaWYgKGxlbmd0aCA+IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkK
KyAgICAgICAgQ1JBU0goKTsKKwogICAgIFVDaGFyKiBkZXN0aW5hdGlvbjsKLSAgICBTdHJpbmcg
cmVzdWx0ID0gU3RyaW5nOjpjcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgZGVzdGluYXRpb24p
OworICAgIFN0cmluZyByZXN1bHQgPSBTdHJpbmc6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KGxlbmd0aCksIGRlc3RpbmF0aW9uKTsKICAgICAKLSAgICBTdHJpbmdJ
bXBsOjpjb3B5Q2hhcnMoZGVzdGluYXRpb24sIHNvdXJjZSwgbGVuZ3RoKTsKKyAgICBTdHJpbmdJ
bXBsOjpjb3B5Q2hhcnMoZGVzdGluYXRpb24sIHNvdXJjZSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KGxlbmd0aCkpOwogICAgIAogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC04ODMsNyArODg5LDcg
QEAgU3RyaW5nIFN0cmluZzo6ZnJvbVVURjgoY29uc3QgTENoYXIqIHN0cmluZ1N0YXJ0LCBzaXpl
X3QgbGVuZ3RoKQogICAgIC8vIFdlJ2xsIHVzZSBhIFN0cmluZ0ltcGwgYXMgYSBidWZmZXI7IGlm
IHRoZSBzb3VyY2Ugc3RyaW5nIG9ubHkgY29udGFpbnMgYXNjaWkgdGhpcyBzaG91bGQgYmUKICAg
ICAvLyB0aGUgcmlnaHQgbGVuZ3RoLCBpZiB0aGVyZSBhcmUgYW55IG11bHRpLWJ5dGUgc2VxdWVu
Y2VzIHRoaXMgYnVmZmVyIHdpbGwgYmUgdG9vIGxhcmdlLgogICAgIFVDaGFyKiBidWZmZXI7Ci0g
ICAgU3RyaW5nIHN0cmluZ0J1ZmZlcihTdHJpbmdJbXBsOjpjcmVhdGVVbmluaXRpYWxpemVkKGxl
bmd0aCwgYnVmZmVyKSk7CisgICAgU3RyaW5nIHN0cmluZ0J1ZmZlcihTdHJpbmdJbXBsOjpjcmVh
dGVVbmluaXRpYWxpemVkKHN0YXRpY19jYXN0PHVuc2lnbmVkPihsZW5ndGgpLCBidWZmZXIpKTsK
ICAgICBVQ2hhciogYnVmZmVyRW5kID0gYnVmZmVyICsgbGVuZ3RoOwogIAogICAgIC8vIFRyeSBj
b252ZXJ0aW5nIGludG8gdGhlIGJ1ZmZlci4KQEAgLTg5MywxNiArODk5LDE2IEBAIFN0cmluZyBT
dHJpbmc6OmZyb21VVEY4KGNvbnN0IExDaGFyKiBzdHJpbmdTdGFydCwgc2l6ZV90IGxlbmd0aCkK
ICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCiAgICAgaWYgKGlzQWxsQVNDSUkpCi0gICAgICAg
IHJldHVybiBTdHJpbmcoc3RyaW5nU3RhcnQsIGxlbmd0aCk7CisgICAgICAgIHJldHVybiBTdHJp
bmcoc3RyaW5nU3RhcnQsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihsZW5ndGgpKTsKIAogICAgIC8v
IHN0cmluZ0J1ZmZlciBpcyBmdWxsICh0aGUgaW5wdXQgbXVzdCBoYXZlIGJlZW4gYWxsIGFzY2lp
KSBzbyBqdXN0IHJldHVybiBpdCEKICAgICBpZiAoYnVmZmVyID09IGJ1ZmZlckVuZCkKICAgICAg
ICAgcmV0dXJuIHN0cmluZ0J1ZmZlcjsKIAogICAgIC8vIHN0cmluZ0J1ZmZlciBzZXJ2ZWQgaXRz
IHB1cnBvc2UgYXMgYSBidWZmZXIsIGNvcHkgdGhlIGNvbnRlbnRzIG91dCBpbnRvIGEgbmV3IHN0
cmluZy4KLSAgICB1bnNpZ25lZCB1dGYxNkxlbmd0aCA9IGJ1ZmZlciAtIHN0cmluZ0J1ZmZlci5j
aGFyYWN0ZXJzKCk7CisgICAgc2l6ZV90IHV0ZjE2TGVuZ3RoID0gYnVmZmVyIC0gc3RyaW5nQnVm
ZmVyLmNoYXJhY3RlcnMoKTsKICAgICBBU1NFUlQodXRmMTZMZW5ndGggPCBsZW5ndGgpOwotICAg
IHJldHVybiBTdHJpbmcoc3RyaW5nQnVmZmVyLmNoYXJhY3RlcnMoKSwgdXRmMTZMZW5ndGgpOwor
ICAgIHJldHVybiBTdHJpbmcoc3RyaW5nQnVmZmVyLmNoYXJhY3RlcnMoKSwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KHV0ZjE2TGVuZ3RoKSk7CiB9CiAKIFN0cmluZyBTdHJpbmc6OmZyb21VVEY4KGNv
bnN0IExDaGFyKiBzdHJpbmcpCkBAIC05MjAsOCArOTI2LDExIEBAIFN0cmluZyBTdHJpbmc6OmZy
b21VVEY4KGNvbnN0IENTdHJpbmcmIHMpCiBTdHJpbmcgU3RyaW5nOjpmcm9tVVRGOFdpdGhMYXRp
bjFGYWxsYmFjayhjb25zdCBMQ2hhciogc3RyaW5nLCBzaXplX3Qgc2l6ZSkKIHsKICAgICBTdHJp
bmcgdXRmOCA9IGZyb21VVEY4KHN0cmluZywgc2l6ZSk7Ci0gICAgaWYgKCF1dGY4KQotICAgICAg
ICByZXR1cm4gU3RyaW5nKHN0cmluZywgc2l6ZSk7CisgICAgaWYgKCF1dGY4KSB7CisgICAgICAg
IGlmIChzaXplID4gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQorICAgICAg
ICAgICAgQ1JBU0goKTsKKyAgICAgICAgcmV0dXJuIFN0cmluZyhzdHJpbmcsIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihzaXplKSk7CisgICAgfQogICAgIHJldHVybiB1dGY4OwogfQogCkBAIC0xMDM5
LDcgKzEwNDgsMTAgQEAgc3RhdGljIHVuc2lnbmVkIGxlbmd0aE9mQ2hhcmFjdGVyc0FzSW50ZWdl
cihjb25zdCBDaGFyVHlwZSogZGF0YSwgc2l6ZV90IGxlbmd0aCkKICAgICAgICAgICAgIGJyZWFr
OwogICAgIH0KIAotICAgIHJldHVybiBpOworICAgIGlmIChpID4gc3RkOjpudW1lcmljX2xpbWl0
czx1bnNpZ25lZD46Om1heCgpKQorICAgICAgICBDUkFTSCgpOworCisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihpKTsKIH0KIAogaW50IGNoYXJhY3RlcnNUb0ludFN0cmljdChjb25z
dCBMQ2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCwgYm9vbCogb2ssIGludCBiYXNlKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi93dGYvdW5pY29kZS9pY3UvQ29sbGF0b3JJQ1UuY3BwIGIvU291cmNl
L1dURi93dGYvdW5pY29kZS9pY3UvQ29sbGF0b3JJQ1UuY3BwCmluZGV4IDcyYTg2NjIwZWVjOGFk
MTVlYjc5ODNmZWRjNDlmNjdhOTFiNWM1YWMuLjJhNzRiZmZiMGVmMDUyYzI2ZDljODQ5OGQ2NTE3
N2I2MmM5OGMzZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3VuaWNvZGUvaWN1L0NvbGxh
dG9ySUNVLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi91bmljb2RlL2ljdS9Db2xsYXRvcklDVS5j
cHAKQEAgLTk1LDcgKzk1LDEzIEBAIENvbGxhdG9yOjpSZXN1bHQgQ29sbGF0b3I6OmNvbGxhdGUo
Y29uc3QgVUNoYXIqIGxocywgc2l6ZV90IGxoc0xlbmd0aCwgY29uc3QgVUNoCiAgICAgaWYgKCFt
X2NvbGxhdG9yKQogICAgICAgICBjcmVhdGVDb2xsYXRvcigpOwogCi0gICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFJlc3VsdD4odWNvbF9zdHJjb2xsKG1fY29sbGF0b3IsIGxocywgbGhzTGVuZ3RoLCBy
aHMsIHJoc0xlbmd0aCkpOworICAgIGlmIChsaHNMZW5ndGggPiBzdGQ6Om51bWVyaWNfbGltaXRz
PHVuc2lnbmVkPjo6bWF4KCkpCisgICAgICAgIENSQVNIKCk7CisKKyAgICBpZiAocmhzTGVuZ3Ro
ID4gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQorICAgICAgICBDUkFTSCgp
OworCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlc3VsdD4odWNvbF9zdHJjb2xsKG1fY29sbGF0
b3IsIGxocywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxoc0xlbmd0aCksIHJocywgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KHJoc0xlbmd0aCkpKTsKIH0KIAogdm9pZCBDb2xsYXRvcjo6Y3JlYXRlQ29s
bGF0b3IoKSBjb25zdAo=
</data>
<flag name="commit-queue"
          id="201394"
          type_id="3"
          status="-"
          setter="eflews.bot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>226825</attachid>
            <date>2014-03-15 12:08:11 -0700</date>
            <delta_ts>2016-03-09 09:31:16 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-107093-20140315120754.patch</filename>
            <type>text/plain</type>
            <size>135886</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY1NjgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDc0YjQwZjgzODMyNDRkYzgyNjQ5ZmEy
NmEzMDI0ZTNhNjRlODQ3OTcuLjExYmQwZWMxMzhkYjBjYzA4NDVlMDljMDljNzNlYjkxYzM2M2M4
YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTgwIEBACisyMDE0LTAzLTE1ICBPbGl2ZXIgSHVudCAgPG9saXZl
ckBhcHBsZS5jb20+CisKKyAgICAgICAgVU1CUkVMTEE6IFdURiBzaG91bGQgYnVpbGQgd2l0aCAt
V3Nob3J0ZW4tNjQtdG8tMzIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEwNzA5MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEluaXRpYWwgcGFzcyBhdCBtYWtpbmcgZXZlcnl0aGluZyBidWlsZCBjbGVhbmx5
IGluIFdURi4KKworICAgICAgICBUaGlzIGFkZHMgYSBjaGVja2VkX2Nhc3Q8PiBmdW5jdGlvbiB0
aGF0IGJvdW5kcyBjaGVja3MgY2FzdCBmcm9tIGxhcmdlcgorICAgICAgICB0byBzbWFsbGVyIHR5
cGVzLgorCisgICAgICAgICogQ29uZmlndXJhdGlvbnMvQmFzZS54Y2NvbmZpZzoKKyAgICAgICAg
KiB3dGYvQml0VmVjdG9yLmNwcDoKKyAgICAgICAgKFdURjo6Qml0VmVjdG9yOjptZXJnZVNsb3cp
OgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6OmZpbHRlclNsb3cpOgorICAgICAgICAoV1RGOjpC
aXRWZWN0b3I6OmV4Y2x1ZGVTbG93KToKKyAgICAgICAgKFdURjo6Qml0VmVjdG9yOjpiaXRDb3Vu
dFNsb3cpOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6OmVxdWFsc1Nsb3dDYXNlKToKKyAgICAg
ICAgKFdURjo6Qml0VmVjdG9yOjpoYXNoU2xvd0Nhc2UpOgorICAgICAgICAqIHd0Zi9DaGVja2Vk
QXJpdGhtZXRpYy5oOgorICAgICAgICAoV1RGOjpvcGVyYXRvcispOgorICAgICAgICAoV1RGOjpv
cGVyYXRvci0pOgorICAgICAgICAoV1RGOjpjaGVja2VkX2Nhc3QpOgorICAgICAgICAqIHd0Zi9D
b21wcmVzc2lvbi5jcHA6CisgICAgICAgIChXVEY6OkdlbmVyaWNDb21wcmVzc2VkRGF0YTo6Y3Jl
YXRlKToKKyAgICAgICAgKFdURjo6R2VuZXJpY0NvbXByZXNzZWREYXRhOjpkZWNvbXByZXNzKToK
KyAgICAgICAgKiB3dGYvQ29tcHJlc3Npb24uaDoKKyAgICAgICAgKFdURjo6R2VuZXJpY0NvbXBy
ZXNzZWREYXRhOjpHZW5lcmljQ29tcHJlc3NlZERhdGEpOgorICAgICAgICAqIHd0Zi9DcnlwdG9n
cmFwaGljYWxseVJhbmRvbU51bWJlci5jcHA6CisgICAgICAgICogd3RmL0RlY2ltYWxOdW1iZXIu
Y3BwOgorICAgICAgICAoV1RGOjpEZWNpbWFsTnVtYmVyOjp0b1N0cmluZ0RlY2ltYWwpOgorICAg
ICAgICAoV1RGOjpEZWNpbWFsTnVtYmVyOjp0b1N0cmluZ0V4cG9uZW50aWFsKToKKyAgICAgICAg
KiB3dGYvRmFzdEJpdFZlY3Rvci5oOgorICAgICAgICAoV1RGOjpGYXN0Qml0VmVjdG9yOjpzZXRB
bmRDaGVjayk6CisgICAgICAgIChXVEY6OkZhc3RCaXRWZWN0b3I6OmVxdWFscyk6CisgICAgICAg
IChXVEY6OkZhc3RCaXRWZWN0b3I6Om1lcmdlKToKKyAgICAgICAgKFdURjo6RmFzdEJpdFZlY3Rv
cjo6ZmlsdGVyKToKKyAgICAgICAgKFdURjo6RmFzdEJpdFZlY3Rvcjo6ZXhjbHVkZSk6CisgICAg
ICAgIChXVEY6OkZhc3RCaXRWZWN0b3I6OmJpdENvdW50KToKKyAgICAgICAgKiB3dGYvRmFzdE1h
bGxvYy5jcHA6CisgICAgICAgIChXVEY6OlRDTWFsbG9jX1RocmVhZENhY2hlOjpDcmVhdGVDYWNo
ZUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKiB3dGYvR3JlZ29yaWFuRGF0ZVRpbWUuY3BwOgorICAg
ICAgICAoV1RGOjpHcmVnb3JpYW5EYXRlVGltZTo6c2V0VG9DdXJyZW50TG9jYWxUaW1lKToKKyAg
ICAgICAgKiB3dGYvTUQ1LmNwcDoKKyAgICAgICAgKFdURjo6TUQ1OjphZGRCeXRlcyk6CisgICAg
ICAgICogd3RmL1ZlY3Rvci5oOgorICAgICAgICAoV1RGOjpWZWN0b3JCdWZmZXJCYXNlOjphbGxv
Y2F0ZUJ1ZmZlcik6CisgICAgICAgIChXVEY6OlZlY3RvckJ1ZmZlckJhc2U6OnJlYWxsb2NhdGVC
dWZmZXIpOgorICAgICAgICAoV1RGOjpWZWN0b3JCdWZmZXJCYXNlOjpjYXBhY2l0eSk6CisgICAg
ICAgIChXVEY6OlZlY3RvckJ1ZmZlckJhc2U6OlZlY3RvckJ1ZmZlckJhc2UpOgorICAgICAgICAo
V1RGOjo9KToKKyAgICAgICAgKFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6cmVzaXplKToKKyAgICAg
ICAgKFdURjo6T3ZlcmZsb3dIYW5kbGVyPjo6c2hyaW5rKToKKyAgICAgICAgKFdURjo6T3ZlcmZs
b3dIYW5kbGVyPjo6Z3Jvdyk6CisgICAgICAgIChXVEY6Ok92ZXJmbG93SGFuZGxlcj46OmFwcGVu
ZCk6CisgICAgICAgICogd3RmL2R0b2EuY3BwOgorICAgICAgICAoV1RGOjptdWx0YWRkKToKKyAg
ICAgICAgKFdURjo6bXVsdCk6CisgICAgICAgIChXVEY6OmxzaGlmdCk6CisgICAgICAgIChXVEY6
OmNtcCk6CisgICAgICAgIChXVEY6OmRpZmYpOgorICAgICAgICAoV1RGOjpkMmIpOgorICAgICAg
ICAoV1RGOjpkdG9hKToKKyAgICAgICAgKiB3dGYvdGV4dC9CYXNlNjQuY3BwOgorICAgICAgICAo
V1RGOjpiYXNlNjRFbmNvZGVJbnRlcm5hbCk6CisgICAgICAgIChXVEY6OmJhc2U2NEVuY29kZSk6
CisgICAgICAgIChXVEY6OmJhc2U2NFVSTEVuY29kZSk6CisgICAgICAgIChXVEY6OmJhc2U2NERl
Y29kZUludGVybmFsKToKKyAgICAgICAgKFdURjo6YmFzZTY0RGVjb2RlKToKKyAgICAgICAgKFdU
Rjo6YmFzZTY0VVJMRGVjb2RlKToKKyAgICAgICAgKiB3dGYvdGV4dC9CYXNlNjQuaDoKKyAgICAg
ICAgKiB3dGYvdGV4dC9TdHJpbmdCdWZmZXIuaDoKKyAgICAgICAgKFdURjo6U3RyaW5nQnVmZmVy
OjpTdHJpbmdCdWZmZXIpOgorICAgICAgICAoV1RGOjpTdHJpbmdCdWZmZXI6OnNocmluayk6Cisg
ICAgICAgIChXVEY6OlN0cmluZ0J1ZmZlcjo6cmVzaXplKToKKyAgICAgICAgKFdURjo6U3RyaW5n
QnVmZmVyOjpsZW5ndGgpOgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwOgor
ICAgICAgICAoV1RGOjpleHBhbmRlZENhcGFjaXR5KToKKyAgICAgICAgKFdURjo6U3RyaW5nQnVp
bGRlcjo6cmVpZnlTdHJpbmcpOgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpyZXNpemUp
OgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjphbGxvY2F0ZUJ1ZmZlcik6CisgICAgICAg
IChXVEY6OlN0cmluZ0J1aWxkZXI6OmFsbG9jYXRlQnVmZmVyVXBDb252ZXJ0KToKKyAgICAgICAg
KFdURjo6U3RyaW5nQnVpbGRlcjo6cmVhbGxvY2F0ZUJ1ZmZlcjxMQ2hhcj4pOgorICAgICAgICAo
V1RGOjpTdHJpbmdCdWlsZGVyOjpyZWFsbG9jYXRlQnVmZmVyPFVDaGFyPik6CisgICAgICAgIChX
VEY6OlN0cmluZ0J1aWxkZXI6OnJlc2VydmVDYXBhY2l0eSk6CisgICAgICAgIChXVEY6OlN0cmlu
Z0J1aWxkZXI6OmFwcGVuZFVuaW5pdGlhbGl6ZWQpOgorICAgICAgICAoV1RGOjpTdHJpbmdCdWls
ZGVyOjphcHBlbmRVbmluaXRpYWxpemVkU2xvdyk6CisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxk
ZXI6OmFwcGVuZCk6CisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OmNhblNocmluayk6Cisg
ICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OnNocmlua1RvRml0KToKKyAgICAgICAgKiB3dGYv
dGV4dC9TdHJpbmdCdWlsZGVyLmg6CisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OmFwcGVu
ZCk6CisgICAgICAgIChXVEY6OlN0cmluZ0J1aWxkZXI6OnRvQXRvbWljU3RyaW5nKToKKyAgICAg
ICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6bGVuZ3RoKToKKyAgICAgICAgKFdURjo6U3RyaW5nQnVp
bGRlcjo6Y2FwYWNpdHkpOgorICAgICAgICAoV1RGOjpTdHJpbmdCdWlsZGVyOjpvcGVyYXRvcltd
KToKKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6ZGVwcmVjYXRlZENoYXJhY3RlcnMpOgor
ICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmg6CisgICAgICAgIChXVEY6OlN0
cmluZ1R5cGVBZGFwdGVyPEFTQ0lJTGl0ZXJhbD46OlN0cmluZ1R5cGVBZGFwdGVyPEFTQ0lJTGl0
ZXJhbD4pOgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwOgorICAgICAgICAoV1RG
OjpTdHJpbmdJbXBsOjpjcmVhdGVGcm9tTGl0ZXJhbCk6CisgICAgICAgIChXVEY6OlN0cmluZ0lt
cGw6OmNyZWF0ZVdpdGhvdXRDb3B5aW5nKToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6Y3Jl
YXRlVW5pbml0aWFsaXplZEludGVybmFsKToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6Y3Jl
YXRlVW5pbml0aWFsaXplZEludGVybmFsTm9uRW1wdHkpOgorICAgICAgICAoV1RGOjpTdHJpbmdJ
bXBsOjpjcmVhdGVVbmluaXRpYWxpemVkKToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6cmVh
bGxvY2F0ZUludGVybmFsKToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6cmVhbGxvY2F0ZSk6
CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OmNyZWF0ZUludGVybmFsKToKKyAgICAgICAgKFdU
Rjo6U3RyaW5nSW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6Y3JlYXRl
OEJpdElmUG9zc2libGUpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpnZXREYXRhMTZTbG93
Q2FzZSk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OnVwY29udmVydENoYXJhY3RlcnMpOgor
ICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpzdWJzdHJpbmcpOgorICAgICAgICAoV1RGOjpTdHJp
bmdJbXBsOjpjaGFyYWN0ZXJTdGFydGluZ0F0KToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6
cmVtb3ZlQ2hhcmFjdGVycyk6CisgICAgICAgIChXVEY6OmVxdWFsSWdub3JpbmdDYXNlKToKKyAg
ICAgICAgKFdURjo6U3RyaW5nSW1wbDo6ZmluZCk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6
OmZpbmRJZ25vcmluZ0Nhc2UpOgorICAgICAgICAoV1RGOjpmaW5kSW5uZXIpOgorICAgICAgICAo
V1RGOjpmaW5kSWdub3JpbmdDYXNlSW5uZXIpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpm
aW5kTmV4dExpbmVTdGFydCk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OnJldmVyc2VGaW5k
KToKKyAgICAgICAgKFdURjo6cmV2ZXJzZUZpbmRJbm5lcik6CisgICAgICAgIChXVEY6OnJldmVy
c2VGaW5kSWdub3JpbmdDYXNlSW5uZXIpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpyZXZl
cnNlRmluZElnbm9yaW5nQ2FzZSk6CisgICAgICAgIChXVEY6OmVxdWFsSW5uZXIpOgorICAgICAg
ICAoV1RGOjpTdHJpbmdJbXBsOjpzdGFydHNXaXRoKToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1w
bDo6ZW5kc1dpdGgpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpyZXBsYWNlKToKKyAgICAg
ICAgKFdURjo6ZXF1YWxJbnRlcm5hbCk6CisgICAgICAgIChXVEY6OmVxdWFsKToKKyAgICAgICAg
KFdURjo6U3RyaW5nSW1wbDo6YWRvcHQpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjp1dGY4
SW1wbCk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OnV0ZjhGb3JDaGFyYWN0ZXJzKToKKyAg
ICAgICAgKFdURjo6U3RyaW5nSW1wbDo6dXRmOEZvclJhbmdlKToKKyAgICAgICAgKiB3dGYvdGV4
dC9TdHJpbmdJbXBsLmg6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OlN0cmluZ0ltcGwpOgor
ICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpjcmVhdGUpOgorICAgICAgICAoV1RGOjpTdHJpbmdJ
bXBsOjpjcmVhdGVTdWJzdHJpbmdTaGFyaW5nSW1wbDgpOgorICAgICAgICAoV1RGOjpTdHJpbmdJ
bXBsOjpjcmVhdGVTdWJzdHJpbmdTaGFyaW5nSW1wbCk6CisgICAgICAgIChXVEY6OlN0cmluZ0lt
cGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpj
b3B5Q2hhcnMpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjphdCk6CisgICAgICAgIChXVEY6
OlN0cmluZ0ltcGw6Om9wZXJhdG9yW10pOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpmaW5k
KToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6ZmluZElnbm9yaW5nQ2FzZSk6CisgICAgICAg
IChXVEY6OlN0cmluZ0ltcGw6OnJlcGxhY2UpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjph
bGxvY2F0aW9uU2l6ZSk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OmNvbnN0cnVjdEludGVy
bmFsPExDaGFyPik6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OmNvbnN0cnVjdEludGVybmFs
PFVDaGFyPik6CisgICAgICAgIChXVEY6OmVxdWFsKToKKyAgICAgICAgKFdURjo6ZXF1YWxJZ25v
cmluZ0Nhc2UpOgorICAgICAgICAoV1RGOjpmaW5kKToKKyAgICAgICAgKFdURjo6ZmluZE5leHRM
aW5lU3RhcnQpOgorICAgICAgICAoV1RGOjpyZXZlcnNlRmluZExpbmVUZXJtaW5hdG9yKToKKyAg
ICAgICAgKFdURjo6cmV2ZXJzZUZpbmQpOgorICAgICAgICAqIHd0Zi90ZXh0L1dURlN0cmluZy5j
cHA6CisgICAgICAgIChXVEY6OlN0cmluZzo6U3RyaW5nKToKKyAgICAgICAgKFdURjo6U3RyaW5n
OjpjaGFyYWN0ZXJTdGFydGluZ0F0KToKKyAgICAgICAgKFdURjo6U3RyaW5nOjpzdWJzdHJpbmcp
OgorICAgICAgICAoV1RGOjpTdHJpbmc6OnN1YnN0cmluZ1NoYXJpbmdJbXBsKToKKyAgICAgICAg
KFdURjo6U3RyaW5nOjpzcGxpdCk6CisgICAgICAgIChXVEY6OlN0cmluZzo6ZnJvbVVURjgpOgor
ICAgICAgICAoV1RGOjpsZW5ndGhPZkNoYXJhY3RlcnNBc0ludGVnZXIpOgorICAgICAgICAqIHd0
Zi90ZXh0L1dURlN0cmluZy5oOgorICAgICAgICAoV1RGOjpTdHJpbmc6OmZpbmQpOgorICAgICAg
ICAoV1RGOjpTdHJpbmc6OmZpbmROZXh0TGluZVN0YXJ0KToKKyAgICAgICAgKFdURjo6U3RyaW5n
OjpyZXZlcnNlRmluZCk6CisgICAgICAgIChXVEY6OlN0cmluZzo6ZmluZElnbm9yaW5nQ2FzZSk6
CisgICAgICAgIChXVEY6OlN0cmluZzo6cmV2ZXJzZUZpbmRJZ25vcmluZ0Nhc2UpOgorICAgICAg
ICAoV1RGOjpTdHJpbmc6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQpOgorICAgICAgICAqIHd0Zi90ZXh0
L2NmL0F0b21pY1N0cmluZ0NGLmNwcDoKKyAgICAgICAgKFdURjo6QXRvbWljU3RyaW5nOjphZGQp
OgorICAgICAgICAqIHd0Zi91bmljb2RlL2ljdS9Db2xsYXRvcklDVS5jcHA6CisgICAgICAgIChX
VEY6OmNyZWF0ZUl0ZXJhdG9yVVRGOCk6CisKIDIwMTQtMDMtMTUgIERhdmlkIEtpbHplciAgPGRk
a2lsemVyQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggdW5kZWZpbmVkIGJlaGF2aW9yIGluIFdU
Rjo6ZXF1YWwoKSBpbiBTdHJpbmdJbXBsLmggZm9yIGkzODYveDg2XzY0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL0NvbmZpZ3VyYXRpb25zL0Jhc2UueGNjb25maWcgYi9Tb3VyY2UvV1RGL0NvbmZp
Z3VyYXRpb25zL0Jhc2UueGNjb25maWcKaW5kZXggZjc3MjY5NWJjNmY2NTJhMTFmZmZhNGE4YTFj
ZDhkYTk1MjU2OTIxNy4uYTk4ZjgwODU4YzUyYTcwNjBiYTgwYWJiYzlkYzEzM2M1NjgxOWU2OCAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi9Db25maWd1cmF0aW9ucy9CYXNlLnhjY29uZmlnCisrKyBi
L1NvdXJjZS9XVEYvQ29uZmlndXJhdGlvbnMvQmFzZS54Y2NvbmZpZwpAQCAtNjQsMTQgKzY0LDcg
QEAgR0NDX1RIUkVBRFNBRkVfU1RBVElDUyA9IE5POwogR0NDX1RSRUFUX1dBUk5JTkdTX0FTX0VS
Uk9SUyA9IFlFUzsKIEdDQ19WRVJTSU9OID0gY29tLmFwcGxlLmNvbXBpbGVycy5sbHZtLmNsYW5n
LjFfMDsKIC8vIEZJWE1FOiA8aHR0cDovL3dlYmtpdC5vcmcvYi8xMDcwOTM+IFdURiBzaG91bGQg
YnVpbGQgd2l0aCAtV3Nob3J0ZW4tNjQtdG8tMzIKLUdDQ19XQVJOXzY0X1RPXzMyX0JJVF9DT05W
RVJTSU9OID0gJChHQ0NfV0FSTl82NF9UT18zMl9CSVRfQ09OVkVSU0lPTl8kKENVUlJFTlRfQVJD
SCkpOwotR0NDX1dBUk5fNjRfVE9fMzJfQklUX0NPTlZFUlNJT05fID0gWUVTOwotR0NDX1dBUk5f
NjRfVE9fMzJfQklUX0NPTlZFUlNJT05fYXJtdjcgPSBZRVM7Ci1HQ0NfV0FSTl82NF9UT18zMl9C
SVRfQ09OVkVSU0lPTl9hcm12N2sgPSBZRVM7Ci1HQ0NfV0FSTl82NF9UT18zMl9CSVRfQ09OVkVS
U0lPTl9hcm12N3MgPSBZRVM7Ci1HQ0NfV0FSTl82NF9UT18zMl9CSVRfQ09OVkVSU0lPTl9hcm02
NCA9IE5POwotR0NDX1dBUk5fNjRfVE9fMzJfQklUX0NPTlZFUlNJT05faTM4NiA9IFlFUzsKLUdD
Q19XQVJOXzY0X1RPXzMyX0JJVF9DT05WRVJTSU9OX3g4Nl82NCA9IE5POworR0NDX1dBUk5fNjRf
VE9fMzJfQklUX0NPTlZFUlNJT04gPSBZRVM7CiBHQ0NfV0FSTl9BQk9VVF9ERVBSRUNBVEVEX0ZV
TkNUSU9OUyA9IE5POwogR0NDX1dBUk5fQUJPVVRfTUlTU0lOR19ORVdMSU5FID0gWUVTOwogR0ND
X1dBUk5fQUJPVVRfTUlTU0lOR19QUk9UT1RZUEVTID0gWUVTOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvQml0VmVjdG9yLmNwcCBiL1NvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5jcHAKaW5k
ZXggZjYwODU2YzM5NGY2YjZmOTA3MzAzMTEyMjRkNjIxZDY4OWU2ZjAwMy4uY2Y4M2ExMzUxMDhj
ZGNmMWMwZWM3ZjU3NDkwYWRkZTllYTY0MTczMiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYv
Qml0VmVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuY3BwCkBAIC0xMjAs
NyArMTIwLDcgQEAgdm9pZCBCaXRWZWN0b3I6Om1lcmdlU2xvdyhjb25zdCBCaXRWZWN0b3ImIG90
aGVyKQogICAgIAogICAgIE91dE9mTGluZUJpdHMqIGEgPSBvdXRPZkxpbmVCaXRzKCk7CiAgICAg
Y29uc3QgT3V0T2ZMaW5lQml0cyogYiA9IG90aGVyLm91dE9mTGluZUJpdHMoKTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBhLT5udW1Xb3JkcygpOyBpLS07KQorICAgIGZvciAoc2l6ZV90IGkgPSBh
LT5udW1Xb3JkcygpOyBpLS07KQogICAgICAgICBhLT5iaXRzKClbaV0gfD0gYi0+Yml0cygpW2ld
OwogfQogCkBAIC0xNDIsMTAgKzE0MiwxMCBAQCB2b2lkIEJpdFZlY3Rvcjo6ZmlsdGVyU2xvdyhj
b25zdCBCaXRWZWN0b3ImIG90aGVyKQogICAgIAogICAgIE91dE9mTGluZUJpdHMqIGEgPSBvdXRP
ZkxpbmVCaXRzKCk7CiAgICAgY29uc3QgT3V0T2ZMaW5lQml0cyogYiA9IG90aGVyLm91dE9mTGlu
ZUJpdHMoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGQ6Om1pbihhLT5udW1Xb3JkcygpLCBi
LT5udW1Xb3JkcygpKTsgaS0tOykKKyAgICBmb3IgKHNpemVfdCBpID0gc3RkOjptaW4oYS0+bnVt
V29yZHMoKSwgYi0+bnVtV29yZHMoKSk7IGktLTspCiAgICAgICAgIGEtPmJpdHMoKVtpXSAmPSBi
LT5iaXRzKClbaV07CiAgICAgCi0gICAgZm9yICh1bnNpZ25lZCBpID0gYi0+bnVtV29yZHMoKTsg
aSA8IGEtPm51bVdvcmRzKCk7ICsraSkKKyAgICBmb3IgKHNpemVfdCBpID0gYi0+bnVtV29yZHMo
KTsgaSA8IGEtPm51bVdvcmRzKCk7ICsraSkKICAgICAgICAgYS0+Yml0cygpW2ldID0gMDsKIH0K
IApAQCAtMTY3LDcgKzE2Nyw3IEBAIHZvaWQgQml0VmVjdG9yOjpleGNsdWRlU2xvdyhjb25zdCBC
aXRWZWN0b3ImIG90aGVyKQogICAgIAogICAgIE91dE9mTGluZUJpdHMqIGEgPSBvdXRPZkxpbmVC
aXRzKCk7CiAgICAgY29uc3QgT3V0T2ZMaW5lQml0cyogYiA9IG90aGVyLm91dE9mTGluZUJpdHMo
KTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGQ6Om1pbihhLT5udW1Xb3JkcygpLCBiLT5udW1X
b3JkcygpKTsgaS0tOykKKyAgICBmb3IgKHNpemVfdCBpID0gc3RkOjptaW4oYS0+bnVtV29yZHMo
KSwgYi0+bnVtV29yZHMoKSk7IGktLTspCiAgICAgICAgIGEtPmJpdHMoKVtpXSAmPSB+Yi0+Yml0
cygpW2ldOwogfQogCkBAIC0xNzYsNyArMTc2LDcgQEAgc2l6ZV90IEJpdFZlY3Rvcjo6Yml0Q291
bnRTbG93KCkgY29uc3QKICAgICBBU1NFUlQoIWlzSW5saW5lKCkpOwogICAgIGNvbnN0IE91dE9m
TGluZUJpdHMqIGJpdHMgPSBvdXRPZkxpbmVCaXRzKCk7CiAgICAgc2l6ZV90IHJlc3VsdCA9IDA7
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gYml0cy0+bnVtV29yZHMoKTsgaS0tOykKKyAgICBmb3Ig
KHNpemVfdCBpID0gYml0cy0+bnVtV29yZHMoKTsgaS0tOykKICAgICAgICAgcmVzdWx0ICs9IGJp
dENvdW50KGJpdHMtPmJpdHMoKVtpXSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTE4NCw3
ICsxODQsNyBAQCBzaXplX3QgQml0VmVjdG9yOjpiaXRDb3VudFNsb3coKSBjb25zdAogYm9vbCBC
aXRWZWN0b3I6OmVxdWFsc1Nsb3dDYXNlKGNvbnN0IEJpdFZlY3RvciYgb3RoZXIpIGNvbnN0CiB7
CiAgICAgLy8gVGhpcyBpcyByZWFsbHkgY2hlZXN5LCBidXQgcHJvYmFibHkgZ29vZCBlbm91Z2gg
Zm9yIG5vdy4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGQ6Om1heChzaXplKCksIG90aGVyLnNp
emUoKSk7IGktLTspIHsKKyAgICBmb3IgKHNpemVfdCBpID0gc3RkOjptYXgoc2l6ZSgpLCBvdGhl
ci5zaXplKCkpOyBpLS07KSB7CiAgICAgICAgIGlmIChnZXQoaSkgIT0gb3RoZXIuZ2V0KGkpKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTE5Niw3ICsxOTYsNyBAQCB1aW50
cHRyX3QgQml0VmVjdG9yOjpoYXNoU2xvd0Nhc2UoKSBjb25zdAogICAgIEFTU0VSVCghaXNJbmxp
bmUoKSk7CiAgICAgY29uc3QgT3V0T2ZMaW5lQml0cyogYml0cyA9IG91dE9mTGluZUJpdHMoKTsK
ICAgICB1aW50cHRyX3QgcmVzdWx0ID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBiaXRzLT5u
dW1Xb3JkcygpOyBpLS07KQorICAgIGZvciAoc2l6ZV90IGkgPSBiaXRzLT5udW1Xb3JkcygpOyBp
LS07KQogICAgICAgICByZXN1bHQgXj0gYml0cy0+Yml0cygpW2ldOwogICAgIHJldHVybiByZXN1
bHQ7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9DaGVja2VkQXJpdGhtZXRpYy5oIGIv
U291cmNlL1dURi93dGYvQ2hlY2tlZEFyaXRobWV0aWMuaAppbmRleCBjYWY2NmM5MjI0ZDM5YTY3
ZDUzYTU2ZjY5ZGVmYjczZjFiMWU0NjlkLi5lM2Y0ZmQyZDdmMjgxZTU0NzRiODM0ZmE0NDNiYmNk
Yjg5MTcyMWZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9DaGVja2VkQXJpdGhtZXRpYy5o
CisrKyBiL1NvdXJjZS9XVEYvd3RmL0NoZWNrZWRBcml0aG1ldGljLmgKQEAgLTE3MywxMiArMTcz
LDEyIEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBUYXJnZXQsIHR5cGVuYW1lIFNvdXJjZT4gc3RhdGlj
IGlubGluZSBib29sIGlzSW5Cb3VuZHMoU291cmNlCiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBz
dHJ1Y3QgUmVtb3ZlQ2hlY2tlZCB7CiAgICAgdHlwZWRlZiBUIENsZWFuVHlwZTsKLSAgICBzdGF0
aWMgY29uc3QgQ2xlYW5UeXBlIERlZmF1bHRWYWx1ZSA9IDA7ICAgIAorICAgIGNvbnN0ZXhwciBz
dGF0aWMgY29uc3QgQ2xlYW5UeXBlIERlZmF1bHRWYWx1ZSA9IDA7CiB9OwogCiB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4gc3RydWN0IFJlbW92ZUNoZWNrZWQ8Q2hlY2tlZDxULCBDcmFzaE9uT3ZlcmZs
b3c+PiB7CiAgICAgdHlwZWRlZiB0eXBlbmFtZSBSZW1vdmVDaGVja2VkPFQ+OjpDbGVhblR5cGUg
Q2xlYW5UeXBlOwotICAgIHN0YXRpYyBjb25zdCBDbGVhblR5cGUgRGVmYXVsdFZhbHVlID0gMDsK
KyAgICBjb25zdGV4cHIgc3RhdGljIGNvbnN0IENsZWFuVHlwZSBEZWZhdWx0VmFsdWUgPSAwOwog
fTsKIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0cnVjdCBSZW1vdmVDaGVja2VkPENoZWNrZWQ8
VCwgUmVjb3JkT3ZlcmZsb3c+PiB7CkBAIC03MDUsNiArNzA1LDIyIEBAIHRlbXBsYXRlIDx0eXBl
bmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+IHN0YXRpYyBpbmxp
bmUgQ2hlY2tlCiAgICAgcmV0dXJuIENoZWNrZWQ8VSwgT3ZlcmZsb3dIYW5kbGVyPihsaHMpICog
cmhzOwogfQogCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBP
dmVyZmxvd0hhbmRsZXI+IHN0YXRpYyBpbmxpbmUgViogb3BlcmF0b3IrKENoZWNrZWQ8VSwgT3Zl
cmZsb3dIYW5kbGVyPiBsaHMsIFYqIHJocykKK3sKKyAgICByZXR1cm4gbGhzLnVuc2FmZUdldCgp
ICsgcmhzOworfQordGVtcGxhdGUgPHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIE92
ZXJmbG93SGFuZGxlcj4gc3RhdGljIGlubGluZSBVKiBvcGVyYXRvcisoVSogbGhzLCBDaGVja2Vk
PFYsIE92ZXJmbG93SGFuZGxlcj4gcmhzKQoreworICAgIHJldHVybiBsaHMgKyByaHMudW5zYWZl
R2V0KCk7Cit9Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgT3Zl
cmZsb3dIYW5kbGVyPiBzdGF0aWMgaW5saW5lIFYqIG9wZXJhdG9yLShDaGVja2VkPFUsIE92ZXJm
bG93SGFuZGxlcj4gbGhzLCBWKiByaHMpOwordGVtcGxhdGUgPHR5cGVuYW1lIFUsIHR5cGVuYW1l
IFYsIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4gc3RhdGljIGlubGluZSBVKiBvcGVyYXRvci0o
VSogbGhzLCBDaGVja2VkPFYsIE92ZXJmbG93SGFuZGxlcj4gcmhzKQoreworICAgIHJldHVybiBs
aHMgLSByaHMudW5zYWZlR2V0KCk7Cit9CisKKwogLy8gQ29udmVuaWVuY2UgdHlwZWRlZnMuCiB0
eXBlZGVmIENoZWNrZWQ8aW50OF90LCBSZWNvcmRPdmVyZmxvdz4gQ2hlY2tlZEludDg7CiB0eXBl
ZGVmIENoZWNrZWQ8dWludDhfdCwgUmVjb3JkT3ZlcmZsb3c+IENoZWNrZWRVaW50ODsKQEAgLTcx
Niw2ICs3MzIsMTEgQEAgdHlwZWRlZiBDaGVja2VkPGludDY0X3QsIFJlY29yZE92ZXJmbG93PiBD
aGVja2VkSW50NjQ7CiB0eXBlZGVmIENoZWNrZWQ8dWludDY0X3QsIFJlY29yZE92ZXJmbG93PiBD
aGVja2VkVWludDY0OwogdHlwZWRlZiBDaGVja2VkPHNpemVfdCwgUmVjb3JkT3ZlcmZsb3c+IENo
ZWNrZWRTaXplOwogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQSwgdHlwZW5hbWUgQj4gQSBjaGVja2Vk
X2Nhc3QoQiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gQ2hlY2tlZDxBPih2YWx1ZSkudW5zYWZlR2V0
KCk7Cit9CisKIH0KIAogdXNpbmcgV1RGOjpDaGVja2VkOwpAQCAtNzMwLDUgKzc1MSw2IEBAIHVz
aW5nIFdURjo6Q2hlY2tlZFVpbnQzMjsKIHVzaW5nIFdURjo6Q2hlY2tlZEludDY0OwogdXNpbmcg
V1RGOjpDaGVja2VkVWludDY0OwogdXNpbmcgV1RGOjpDaGVja2VkU2l6ZTsKK3VzaW5nIFdURjo6
Y2hlY2tlZF9jYXN0OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0NvbXBy
ZXNzaW9uLmNwcCBiL1NvdXJjZS9XVEYvd3RmL0NvbXByZXNzaW9uLmNwcAppbmRleCBmMzA5MjRi
OWNmZGY0YzhlYTc3YjJjNzQ3MjBmMmM3YmYzY2QyM2U5Li42MDYzOWZlNjI1YjY2ZjY0NTkxZDE2
NGQ3NDE0NmZiMjE5Njc5OGI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9Db21wcmVzc2lv
bi5jcHAKKysrIGIvU291cmNlL1dURi93dGYvQ29tcHJlc3Npb24uY3BwCkBAIC02NSw3ICs2NSw3
IEBAIFBhc3NPd25QdHI8R2VuZXJpY0NvbXByZXNzZWREYXRhPiBHZW5lcmljQ29tcHJlc3NlZERh
dGE6OmNyZWF0ZShjb25zdCB1aW50OF90KiBkCiAgICAgc3RyZWFtLnpmcmVlID0gekZyZWU7CiAg
ICAgc3RyZWFtLmRhdGFfdHlwZSA9IFpfQklOQVJZOwogICAgIHN0cmVhbS5vcGFxdWUgPSBaX05V
TEw7Ci0gICAgc3RyZWFtLmF2YWlsX2luID0gZGF0YUxlbmd0aDsKKyAgICBzdHJlYW0uYXZhaWxf
aW4gPSBjaGVja2VkX2Nhc3Q8dWludDMyX3Q+KGRhdGFMZW5ndGgpOwogICAgIHN0cmVhbS5uZXh0
X2luID0gY29uc3RfY2FzdDx1aW50OF90Kj4oZGF0YSk7CiAKICAgICBzaXplX3QgY3VycmVudE9m
ZnNldCA9IE9CSkVDVF9PRkZTRVRPRihHZW5lcmljQ29tcHJlc3NlZERhdGEsIG1fZGF0YSk7CkBA
IC03Myw3ICs3Myw3IEBAIFBhc3NPd25QdHI8R2VuZXJpY0NvbXByZXNzZWREYXRhPiBHZW5lcmlj
Q29tcHJlc3NlZERhdGE6OmNyZWF0ZShjb25zdCB1aW50OF90KiBkCiAgICAgQnl0ZWYqIGNvbXBy
ZXNzZWREYXRhID0gc3RhdGljX2Nhc3Q8Qnl0ZWYqPihmYXN0TWFsbG9jKGN1cnJlbnRDYXBhY2l0
eSkpOwogICAgIG1lbXNldChjb21wcmVzc2VkRGF0YSwgMCwgc2l6ZW9mKEdlbmVyaWNDb21wcmVz
c2VkRGF0YSkpOwogICAgIHN0cmVhbS5uZXh0X291dCA9IGNvbXByZXNzZWREYXRhICsgY3VycmVu
dE9mZnNldDsKLSAgICBzdHJlYW0uYXZhaWxfb3V0ID0gY3VycmVudENhcGFjaXR5IC0gY3VycmVu
dE9mZnNldDsKKyAgICBzdHJlYW0uYXZhaWxfb3V0ID0gY2hlY2tlZF9jYXN0PHVpbnQzMl90Pihj
dXJyZW50Q2FwYWNpdHkgLSBjdXJyZW50T2Zmc2V0KTsKIAogICAgIGRlZmxhdGVJbml0KCZzdHJl
YW0sIFpfQkVTVF9DT01QUkVTU0lPTik7CiAKQEAgLTEwMCw3ICsxMDAsNyBAQCBQYXNzT3duUHRy
PEdlbmVyaWNDb21wcmVzc2VkRGF0YT4gR2VuZXJpY0NvbXByZXNzZWREYXRhOjpjcmVhdGUoY29u
c3QgdWludDhfdCogZAogICAgICAgICAgICAgY29tcHJlc3NlZERhdGEgPSBzdGF0aWNfY2FzdDxC
eXRlZio+KGZhc3RSZWFsbG9jKGNvbXByZXNzZWREYXRhLCBuZXdDYXBhY2l0eSkpOwogICAgICAg
ICAgICAgY3VycmVudE9mZnNldCA9IGN1cnJlbnRDYXBhY2l0eSAtIHN0cmVhbS5hdmFpbF9vdXQ7
CiAgICAgICAgICAgICBzdHJlYW0ubmV4dF9vdXQgPSBjb21wcmVzc2VkRGF0YSArIGN1cnJlbnRP
ZmZzZXQ7Ci0gICAgICAgICAgICBzdHJlYW0uYXZhaWxfb3V0ID0gbmV3Q2FwYWNpdHkgLSBjdXJy
ZW50Q2FwYWNpdHk7CisgICAgICAgICAgICBzdHJlYW0uYXZhaWxfb3V0ID0gY2hlY2tlZF9jYXN0
PHVpbnQzMl90PihuZXdDYXBhY2l0eSAtIGN1cnJlbnRDYXBhY2l0eSk7CiAgICAgICAgICAgICBj
dXJyZW50Q2FwYWNpdHkgPSBuZXdDYXBhY2l0eTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICB9CkBAIC0xMzcsNyArMTM3LDcgQEAgYm9vbCBHZW5lcmljQ29tcHJlc3NlZERhdGE6OmRl
Y29tcHJlc3ModWludDhfdCogZGVzdGluYXRpb24sIHNpemVfdCBidWZmZXJTaXplLAogICAgIHN0
cmVhbS5kYXRhX3R5cGUgPSBaX0JJTkFSWTsKICAgICBzdHJlYW0ub3BhcXVlID0gWl9OVUxMOwog
ICAgIHN0cmVhbS5uZXh0X291dCA9IGRlc3RpbmF0aW9uOwotICAgIHN0cmVhbS5hdmFpbF9vdXQg
PSBidWZmZXJTaXplOworICAgIHN0cmVhbS5hdmFpbF9vdXQgPSBjaGVja2VkX2Nhc3Q8dWludDMy
X3Q+KGJ1ZmZlclNpemUpOwogICAgIHN0cmVhbS5uZXh0X2luID0gbV9kYXRhOwogICAgIHN0cmVh
bS5hdmFpbF9pbiA9IGNvbXByZXNzZWRTaXplKCk7CiAgICAgaWYgKGluZmxhdGVJbml0KCZzdHJl
YW0pICE9IFpfT0spIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0NvbXByZXNzaW9uLmgg
Yi9Tb3VyY2UvV1RGL3d0Zi9Db21wcmVzc2lvbi5oCmluZGV4IDRjOGZkMDZlZGNjYWI4MmNmYTEz
MjQwY2ZkNjllNTZkMmJiNzdkNTQuLjdmNmJmMGY3YzU5NWFkNzUxNDBiNjUwYjFhYzUzYjUyMWI1
NTQwMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0NvbXByZXNzaW9uLmgKKysrIGIvU291
cmNlL1dURi93dGYvQ29tcHJlc3Npb24uaApAQCAtNDcsOCArNDcsOCBAQCBwcml2YXRlOgogICAg
ICAgICBVTlVTRURfUEFSQU0obV9kYXRhKTsKICAgICAgICAgQVNTRVJUKCFtX29yaWdpbmFsU2l6
ZSk7CiAgICAgICAgIEFTU0VSVCghbV9jb21wcmVzc2VkU2l6ZSk7Ci0gICAgICAgIG1fb3JpZ2lu
YWxTaXplID0gb3JpZ2luYWxTaXplOwotICAgICAgICBtX2NvbXByZXNzZWRTaXplID0gY29tcHJl
c3NlZFNpemU7CisgICAgICAgIG1fb3JpZ2luYWxTaXplID0gY2hlY2tlZF9jYXN0PHVpbnQzMl90
PihvcmlnaW5hbFNpemUpOworICAgICAgICBtX2NvbXByZXNzZWRTaXplID0gY2hlY2tlZF9jYXN0
PHVpbnQzMl90Pihjb21wcmVzc2VkU2l6ZSk7CiAgICAgfQogICAgIHVpbnQzMl90IG1fb3JpZ2lu
YWxTaXplOwogICAgIHVpbnQzMl90IG1fY29tcHJlc3NlZFNpemU7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi9DcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5jcHAgYi9Tb3VyY2UvV1RG
L3d0Zi9DcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5jcHAKaW5kZXggMTIzNjA4NjE2ZTVi
MTIyZjU1ZjZjY2NkN2JiMGMyNGIxZDU3Y2RmZC4uYWE2OTA2Yzk2Yjk3NjNkMDM5NWJiZWZmMDY4
ZmQ0NjQwZTRjMzU3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvQ3J5cHRvZ3JhcGhpY2Fs
bHlSYW5kb21OdW1iZXIuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL0NyeXB0b2dyYXBoaWNhbGx5
UmFuZG9tTnVtYmVyLmNwcApAQCAtNTYsNyArNTYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCByYW5k
b21WYWx1ZXModm9pZCogYnVmZmVyLCBzaXplX3QgbGVuZ3RoKTsKIAogcHJpdmF0ZToKLSAgICBp
bmxpbmUgdm9pZCBhZGRSYW5kb21EYXRhKHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBsZW5ndGgp
OworICAgIGlubGluZSB2b2lkIGFkZFJhbmRvbURhdGEodW5zaWduZWQgY2hhciAqZGF0YSwgc2l6
ZV90IGxlbmd0aCk7CiAgICAgdm9pZCBzdGlyKCk7CiAgICAgdm9pZCBzdGlySWZOZWVkZWQoKTsK
ICAgICBpbmxpbmUgdWludDhfdCBnZXRCeXRlKCk7CkBAIC04MCw3ICs4MCw3IEBAIEFSQzRSYW5k
b21OdW1iZXJHZW5lcmF0b3I6OkFSQzRSYW5kb21OdW1iZXJHZW5lcmF0b3IoKQogewogfQogCi12
b2lkIEFSQzRSYW5kb21OdW1iZXJHZW5lcmF0b3I6OmFkZFJhbmRvbURhdGEodW5zaWduZWQgY2hh
ciogZGF0YSwgaW50IGxlbmd0aCkKK3ZvaWQgQVJDNFJhbmRvbU51bWJlckdlbmVyYXRvcjo6YWRk
UmFuZG9tRGF0YSh1bnNpZ25lZCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoKQogewogICAgIG1f
c3RyZWFtLmktLTsKICAgICBmb3IgKGludCBuID0gMDsgbiA8IDI1NjsgbisrKSB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL3d0Zi9EZWNpbWFsTnVtYmVyLmNwcCBiL1NvdXJjZS9XVEYvd3RmL0Rl
Y2ltYWxOdW1iZXIuY3BwCmluZGV4IGQzM2E1YWU0Y2UyNjg4ZTMyODQwYmFiZjFiZGIyOWMwNjA2
ZTdmNmYuLjU0MDYzNWRlNjE5ZWRjYzRlZDAzMGM0MTc0NzQ5MDE3NDRkNWYwMzkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XVEYvd3RmL0RlY2ltYWxOdW1iZXIuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L0RlY2ltYWxOdW1iZXIuY3BwCkBAIC0xMjEsNyArMTIxLDcgQEAgdW5zaWduZWQgRGVjaW1hbE51
bWJlcjo6dG9TdHJpbmdEZWNpbWFsKExDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0
aCkgY28KICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcHJlY2lzaW9uOyArK2kp
CiAgICAgICAgICAgICAqbmV4dCsrID0gbV9zaWduaWZpY2FuZFtpXTsKIAotICAgICAgICByZXR1
cm4gbmV4dCAtIGJ1ZmZlcjsKKyAgICAgICAgcmV0dXJuIGNoZWNrZWRfY2FzdDx1bnNpZ25lZD4o
bmV4dCAtIGJ1ZmZlcik7CiAgICAgfQogCiAgICAgdW5zaWduZWQgZGlnaXRzQmVmb3JlRGVjaW1h
bFBvaW50ID0gbV9leHBvbmVudCArIDE7CkBAIC0xMzcsNyArMTM3LDcgQEAgdW5zaWduZWQgRGVj
aW1hbE51bWJlcjo6dG9TdHJpbmdEZWNpbWFsKExDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZl
ckxlbmd0aCkgY28KICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IChkaWdpdHNCZWZv
cmVEZWNpbWFsUG9pbnQgLSBtX3ByZWNpc2lvbik7ICsraSkKICAgICAgICAgICAgICpuZXh0Kysg
PSAnMCc7CiAKLSAgICAgICAgcmV0dXJuIG5leHQgLSBidWZmZXI7CisgICAgICAgIHJldHVybiBj
aGVja2VkX2Nhc3Q8dW5zaWduZWQ+KG5leHQgLSBidWZmZXIpOwogICAgIH0KIAogICAgIC8vIElm
IHdlIGdldCBoZXJlLCBudW1iZXIgc3RhcnRzIGJlZm9yZSB0aGUgZGVjaW1hbCBwb2ludCwgYW5k
IGVuZHMgYWZ0ZXIgaXQsCkBAIC0xNTIsNyArMTUyLDcgQEAgdW5zaWduZWQgRGVjaW1hbE51bWJl
cjo6dG9TdHJpbmdEZWNpbWFsKExDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCkg
Y28KICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkaWdpdHNCZWZvcmVEZWNpbWFsUG9pbnQ7IGkgPCBt
X3ByZWNpc2lvbjsgKytpKQogICAgICAgICAqbmV4dCsrID0gbV9zaWduaWZpY2FuZFtpXTsKIAot
ICAgIHJldHVybiBuZXh0IC0gYnVmZmVyOworICAgIHJldHVybiBjaGVja2VkX2Nhc3Q8dW5zaWdu
ZWQ+KG5leHQgLSBidWZmZXIpOwogfQogCiB1bnNpZ25lZCBEZWNpbWFsTnVtYmVyOjp0b1N0cmlu
Z0V4cG9uZW50aWFsKExDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCkgY29uc3QK
QEAgLTE5Myw3ICsxOTMsNyBAQCB1bnNpZ25lZCBEZWNpbWFsTnVtYmVyOjp0b1N0cmluZ0V4cG9u
ZW50aWFsKExDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aAogICAgICAgICAqbmV4
dCsrID0gJzAnICsgKGV4cG9uZW50ICUgMTAwKSAvIDEwOwogICAgICpuZXh0KysgPSAnMCcgKyBl
eHBvbmVudCAlIDEwOwogCi0gICAgcmV0dXJuIG5leHQgLSBidWZmZXI7CisgICAgcmV0dXJuIGNo
ZWNrZWRfY2FzdDx1bnNpZ25lZD4obmV4dCAtIGJ1ZmZlcik7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvRmFzdEJpdFZlY3Rvci5oIGIvU291cmNl
L1dURi93dGYvRmFzdEJpdFZlY3Rvci5oCmluZGV4IGY5NjE4MGQ5ZTU1OWMyYTA2OWFmODNjMjk0
NDI1NTM1N2M3N2E0MWEuLmJjOGE1NWI3OTllNjE4NTNjZmU2MjUzMzIyZDljNzA5OGM4NjkyNTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0Zhc3RCaXRWZWN0b3IuaAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi9GYXN0Qml0VmVjdG9yLmgKQEAgLTEwMyw3ICsxMDMsNyBAQCBwdWJsaWM6CiAgICAg
ewogICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKICAgICAgICAgQVNTRVJUKG1fbnVtQml0
cyA9PSBvdGhlci5tX251bUJpdHMpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBhcnJheUxl
bmd0aCgpOyBpLS07KSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBhcnJheUxlbmd0aCgpOyBp
LS07KSB7CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fYXJyYXlbaV0gIT0gb3RoZXIubV9hcnJh
eVtpXTsKICAgICAgICAgICAgIG1fYXJyYXlbaV0gPSBvdGhlci5tX2FycmF5W2ldOwogICAgICAg
ICB9CkBAIC0xMTUsNyArMTE1LDcgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQobV9udW1CaXRz
ID09IG90aGVyLm1fbnVtQml0cyk7CiAgICAgICAgIC8vIFVzZSBteSBvd24gY29tcGFyaXNvbiBs
b29wIGJlY2F1c2UgbWVtY21wIGRvZXMgbW9yZSB0aGFuIHdoYXQgSSB3YW50CiAgICAgICAgIC8v
IGFuZCBiY21wIGlzIG5vdCBhcyBzdGFuZGFyZC4KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
YXJyYXlMZW5ndGgoKTsgaS0tOykgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gYXJyYXlMZW5n
dGgoKTsgaS0tOykgewogICAgICAgICAgICAgaWYgKG1fYXJyYXlbaV0gIT0gb3RoZXIubV9hcnJh
eVtpXSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KQEAgLTEyNSwy
MSArMTI1LDIxIEBAIHB1YmxpYzoKICAgICB2b2lkIG1lcmdlKGNvbnN0IEZhc3RCaXRWZWN0b3Im
IG90aGVyKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fbnVtQml0cyA9PSBvdGhlci5tX251bUJp
dHMpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBhcnJheUxlbmd0aCgpOyBpLS07KQorICAg
ICAgICBmb3IgKHNpemVfdCBpID0gYXJyYXlMZW5ndGgoKTsgaS0tOykKICAgICAgICAgICAgIG1f
YXJyYXlbaV0gfD0gb3RoZXIubV9hcnJheVtpXTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBmaWx0
ZXIoY29uc3QgRmFzdEJpdFZlY3RvciYgb3RoZXIpCiAgICAgewogICAgICAgICBBU1NFUlQobV9u
dW1CaXRzID09IG90aGVyLm1fbnVtQml0cyk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IGFy
cmF5TGVuZ3RoKCk7IGktLTspCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBhcnJheUxlbmd0aCgp
OyBpLS07KQogICAgICAgICAgICAgbV9hcnJheVtpXSAmPSBvdGhlci5tX2FycmF5W2ldOwogICAg
IH0KICAgICAKICAgICB2b2lkIGV4Y2x1ZGUoY29uc3QgRmFzdEJpdFZlY3RvciYgb3RoZXIpCiAg
ICAgewogICAgICAgICBBU1NFUlQobV9udW1CaXRzID09IG90aGVyLm1fbnVtQml0cyk7Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IGFycmF5TGVuZ3RoKCk7IGktLTspCisgICAgICAgIGZvciAo
c2l6ZV90IGkgPSBhcnJheUxlbmd0aCgpOyBpLS07KQogICAgICAgICAgICAgbV9hcnJheVtpXSAm
PSB+b3RoZXIubV9hcnJheVtpXTsKICAgICB9CiAgICAgCkBAIC0xNzIsNyArMTcyLDcgQEAgcHVi
bGljOgogICAgIHNpemVfdCBiaXRDb3VudCgpIGNvbnN0CiAgICAgewogICAgICAgICBzaXplX3Qg
cmVzdWx0ID0gMDsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYXJyYXlMZW5ndGgoKTsgaS0t
OykKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IGFycmF5TGVuZ3RoKCk7IGktLTspCiAgICAgICAg
ICAgICByZXN1bHQgKz0gV1RGOjpiaXRDb3VudChtX2FycmF5W2ldKTsKICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9GYXN0TWFsbG9jLmNw
cCBiL1NvdXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2MuY3BwCmluZGV4IGZiNWQ2YzViNzczMGMxZDE0
MDJmZGI1YWFlYWY1MjBmMTkwZTAwZTYuLjhjZWFkMmY2NTE1OTYyYzNhZjVhZDhkYjJjMGRjMTNi
MmU1ZmJjMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2MuY3BwCisrKyBi
L1NvdXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2MuY3BwCkBAIC00NzExLDcgKzQ3MTEsNyBAQCBGYXN0
TWFsbG9jU3RhdGlzdGljcyBmYXN0TWFsbG9jU3RhdGlzdGljcygpCiAKICAgICBzdGF0aXN0aWNz
LmZyZWVMaXN0Qnl0ZXMgPSAwOwogICAgIGZvciAodW5zaWduZWQgY2wgPSAwOyBjbCA8IGtOdW1D
bGFzc2VzOyArK2NsKSB7Ci0gICAgICAgIGNvbnN0IGludCBsZW5ndGggPSBjZW50cmFsX2NhY2hl
W2NsXS5sZW5ndGgoKTsKKyAgICAgICAgY29uc3Qgc2l6ZV90IGxlbmd0aCA9IGNlbnRyYWxfY2Fj
aGVbY2xdLmxlbmd0aCgpOwogICAgICAgICBjb25zdCBpbnQgdGNfbGVuZ3RoID0gY2VudHJhbF9j
YWNoZVtjbF0udGNfbGVuZ3RoKCk7CiAKICAgICAgICAgc3RhdGlzdGljcy5mcmVlTGlzdEJ5dGVz
ICs9IEJ5dGVTaXplRm9yQ2xhc3MoY2wpICogKGxlbmd0aCArIHRjX2xlbmd0aCk7CkBAIC00ODM2
LDcgKzQ4MzYsNyBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9CiAKLSAgICBpbnQgdmlzaXQodm9p
ZCogcHRyKSBjb25zdAorICAgIHNpemVfdCB2aXNpdCh2b2lkKiBwdHIpIGNvbnN0CiAgICAgewog
ICAgICAgICBBU1NFUlQoa1BhZ2VTaGlmdCAmJiBrTnVtQ2xhc3NlcyAmJiBrUGFnZVNpemUpOwog
ICAgICAgICBpZiAoIXB0cikKQEAgLTQ5MjYsMTUgKzQ5MjYsMTUgQEAgcHVibGljOgogICAgICAg
ICB9CiAKICAgICAgICAgaWYgKHJlY29yZFJlZ2lvbnNDb250YWluaW5nUG9pbnRlcnMpCi0gICAg
ICAgICAgICAoKm1fcmVjb3JkZXIpKG1fdGFzaywgbV9jb250ZXh0LCBNQUxMT0NfUFRSX1JFR0lP
Tl9SQU5HRV9UWVBFLCBwb2ludGVyUmVnaW9ucy5kYXRhKCksIHBvaW50ZXJSZWdpb25zLnNpemUo
KSk7CisgICAgICAgICAgICAoKm1fcmVjb3JkZXIpKG1fdGFzaywgbV9jb250ZXh0LCBNQUxMT0Nf
UFRSX1JFR0lPTl9SQU5HRV9UWVBFLCBwb2ludGVyUmVnaW9ucy5kYXRhKCksIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihwb2ludGVyUmVnaW9ucy5zaXplKCkpKTsKIAogICAgICAgICBpZiAocmVjb3Jk
QWxsb2NhdGlvbnMpCi0gICAgICAgICAgICAoKm1fcmVjb3JkZXIpKG1fdGFzaywgbV9jb250ZXh0
LCBNQUxMT0NfUFRSX0lOX1VTRV9SQU5HRV9UWVBFLCBhbGxvY2F0ZWRQb2ludGVycy5kYXRhKCks
IGFsbG9jYXRlZFBvaW50ZXJzLnNpemUoKSk7CisgICAgICAgICAgICAoKm1fcmVjb3JkZXIpKG1f
dGFzaywgbV9jb250ZXh0LCBNQUxMT0NfUFRSX0lOX1VTRV9SQU5HRV9UWVBFLCBhbGxvY2F0ZWRQ
b2ludGVycy5kYXRhKCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihhbGxvY2F0ZWRQb2ludGVycy5z
aXplKCkpKTsKIAogICAgICAgICBtX2NvYWxlc2NlZFNwYW5zLmNsZWFyKCk7CiAgICAgfQogCi0g
ICAgaW50IHZpc2l0KHZvaWQqIHB0cikKKyAgICBzaXplX3QgdmlzaXQodm9pZCogcHRyKQogICAg
IHsKICAgICAgICAgQVNTRVJUKGtQYWdlU2hpZnQgJiYga051bUNsYXNzZXMgJiYga1BhZ2VTaXpl
KTsKICAgICAgICAgaWYgKCFwdHIpCkBAIC01MDAxLDcgKzUwMDEsNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCByZWNvcmRQZW5kaW5nUmVnaW9ucygpCiAgICAgewogICAgICAgICBpZiAobV9wZW5kaW5n
UmVnaW9ucy5zaXplKCkpIHsKLSAgICAgICAgICAgICgqbV9yZWNvcmRlcikobV90YXNrLCBtX2Nv
bnRleHQsIE1BTExPQ19BRE1JTl9SRUdJT05fUkFOR0VfVFlQRSwgbV9wZW5kaW5nUmVnaW9ucy5k
YXRhKCksIG1fcGVuZGluZ1JlZ2lvbnMuc2l6ZSgpKTsKKyAgICAgICAgICAgICgqbV9yZWNvcmRl
cikobV90YXNrLCBtX2NvbnRleHQsIE1BTExPQ19BRE1JTl9SRUdJT05fUkFOR0VfVFlQRSwgbV9w
ZW5kaW5nUmVnaW9ucy5kYXRhKCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX3BlbmRpbmdSZWdp
b25zLnNpemUoKSkpOwogICAgICAgICAgICAgbV9wZW5kaW5nUmVnaW9ucy5jbGVhcigpOwogICAg
ICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvR3JlZ29yaWFuRGF0ZVRp
bWUuY3BwIGIvU291cmNlL1dURi93dGYvR3JlZ29yaWFuRGF0ZVRpbWUuY3BwCmluZGV4IDU1NjA5
ODRlNjJjMzFmNjEzMzc5MGQ4MmJmYWFiY2EyMDYxZmY3YmIuLmE1MjcwNmVkZWYwZDNmNzY1OTNk
ODJhMjY0NDQ4MGE0NGY4N2U1OWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0dyZWdvcmlh
bkRhdGVUaW1lLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9HcmVnb3JpYW5EYXRlVGltZS5jcHAK
QEAgLTc2LDcgKzc2LDcgQEAgdm9pZCBHcmVnb3JpYW5EYXRlVGltZTo6c2V0VG9DdXJyZW50TG9j
YWxUaW1lKCkKICAgICBtX3NlY29uZCA9IGxvY2FsVE0udG1fc2VjOwogICAgIG1faXNEU1QgPSBs
b2NhbFRNLnRtX2lzZHN0OwogI2lmIEhBVkUoVE1fR01UT0ZGKQotICAgIG1fdXRjT2Zmc2V0ID0g
bG9jYWxUTS50bV9nbXRvZmY7CisgICAgbV91dGNPZmZzZXQgPSBjaGVja2VkX2Nhc3Q8dW5zaWdu
ZWQ+KGxvY2FsVE0udG1fZ210b2ZmKTsKICNlbHNlCiAgICAgbV91dGNPZmZzZXQgPSBjYWxjdWxh
dGVMb2NhbFRpbWVPZmZzZXQobG9jYWxUaW1lICogbXNQZXJTZWNvbmQpLm9mZnNldCAvIG1zUGVy
U2Vjb25kOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9NRDUuY3BwIGIvU291
cmNlL1dURi93dGYvTUQ1LmNwcAppbmRleCAzNjU0OWJlODMxZDdhOTRjZTQ4MTA4MzhkMmI0YmM3
NTNlY2VjYWYxLi43YzAzODBiM2VkNDRhOTJjNThmNmVlNGRmMzllNTQ1MDkwZGVjYTMzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9NRDUuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL01ENS5j
cHAKQEAgLTE4MSw3ICsxODEsNyBAQCB2b2lkIE1ENTo6YWRkQnl0ZXMoY29uc3QgdWludDhfdCog
aW5wdXQsIHNpemVfdCBsZW5ndGgpCiAKICAgICAvLyBVcGRhdGUgYml0Y291bnQKICAgICB1aW50
MzJfdCB0ID0gbV9iaXRzWzBdOwotICAgIG1fYml0c1swXSA9IHQgKyAobGVuZ3RoIDw8IDMpOwor
ICAgIG1fYml0c1swXSA9IGNoZWNrZWRfY2FzdDx1bnNpZ25lZD4odCArIChsZW5ndGggPDwgMykp
OwogICAgIGlmIChtX2JpdHNbMF0gPCB0KQogICAgICAgICBtX2JpdHNbMV0rKzsgLy8gQ2Fycnkg
ZnJvbSBsb3cgdG8gaGlnaAogICAgIG1fYml0c1sxXSArPSBsZW5ndGggPj4gMjk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaCBiL1NvdXJjZS9XVEYvd3RmL1ZlY3Rvci5oCmlu
ZGV4IGRjNjJjZTE1MWYyZTU4NzIzMDhlYTRkNTc0MDRiMWE0ZTRlN2ZlMmYuLjM3ZmQ4YjBiN2Uz
OGI2ZmEzNjI0MjY4ZTY4MTdkZTQ0ZGU3ODkwZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3Rm
L1ZlY3Rvci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1ZlY3Rvci5oCkBAIC0yNjEsNyArMjYxLDcg
QEAgcHVibGljOgogICAgICAgICBpZiAobmV3Q2FwYWNpdHkgPiBzdGQ6Om51bWVyaWNfbGltaXRz
PHVuc2lnbmVkPjo6bWF4KCkgLyBzaXplb2YoVCkpCiAgICAgICAgICAgICBDUkFTSCgpOwogICAg
ICAgICBzaXplX3Qgc2l6ZVRvQWxsb2NhdGUgPSBmYXN0TWFsbG9jR29vZFNpemUobmV3Q2FwYWNp
dHkgKiBzaXplb2YoVCkpOwotICAgICAgICBtX2NhcGFjaXR5ID0gc2l6ZVRvQWxsb2NhdGUgLyBz
aXplb2YoVCk7CisgICAgICAgIG1fY2FwYWNpdHkgPSBjaGVja2VkX2Nhc3Q8dW5zaWduZWQ+KHNp
emVUb0FsbG9jYXRlIC8gc2l6ZW9mKFQpKTsKICAgICAgICAgbV9idWZmZXIgPSBzdGF0aWNfY2Fz
dDxUKj4oZmFzdE1hbGxvYyhzaXplVG9BbGxvY2F0ZSkpOwogICAgIH0KIApAQCAtMjkyLDcgKzI5
Miw3IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKG5ld0NhcGFjaXR5ID4gc3RkOjpudW1lcmljX2xp
bWl0czxzaXplX3Q+OjptYXgoKSAvIHNpemVvZihUKSkKICAgICAgICAgICAgIENSQVNIKCk7CiAg
ICAgICAgIHNpemVfdCBzaXplVG9BbGxvY2F0ZSA9IGZhc3RNYWxsb2NHb29kU2l6ZShuZXdDYXBh
Y2l0eSAqIHNpemVvZihUKSk7Ci0gICAgICAgIG1fY2FwYWNpdHkgPSBzaXplVG9BbGxvY2F0ZSAv
IHNpemVvZihUKTsKKyAgICAgICAgbV9jYXBhY2l0eSA9IGNoZWNrZWRfY2FzdDx1bnNpZ25lZD4o
c2l6ZVRvQWxsb2NhdGUgLyBzaXplb2YoVCkpOwogICAgICAgICBtX2J1ZmZlciA9IHN0YXRpY19j
YXN0PFQqPihmYXN0UmVhbGxvYyhtX2J1ZmZlciwgc2l6ZVRvQWxsb2NhdGUpKTsKICAgICB9CiAK
QEAgLTMxMiw3ICszMTIsNyBAQCBwdWJsaWM6CiAgICAgVCogYnVmZmVyKCkgeyByZXR1cm4gbV9i
dWZmZXI7IH0KICAgICBjb25zdCBUKiBidWZmZXIoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlcjsg
fQogICAgIHN0YXRpYyBwdHJkaWZmX3QgYnVmZmVyTWVtb3J5T2Zmc2V0KCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKFZlY3RvckJ1ZmZlckJhc2UsIG1fYnVmZmVyKTsgfQotICAgIHNpemVfdCBj
YXBhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FwYWNpdHk7IH0KKyAgICB1bnNpZ25lZCBjYXBh
Y2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FwYWNpdHk7IH0KIAogICAgIE1hbGxvY1B0cjxUPiBy
ZWxlYXNlQnVmZmVyKCkKICAgICB7CkBAIC0zMzIsOCArMzMyLDggQEAgcHJvdGVjdGVkOgogCiAg
ICAgVmVjdG9yQnVmZmVyQmFzZShUKiBidWZmZXIsIHNpemVfdCBjYXBhY2l0eSwgc2l6ZV90IHNp
emUpCiAgICAgICAgIDogbV9idWZmZXIoYnVmZmVyKQotICAgICAgICAsIG1fY2FwYWNpdHkoY2Fw
YWNpdHkpCi0gICAgICAgICwgbV9zaXplKHNpemUpCisgICAgICAgICwgbV9jYXBhY2l0eShjaGVj
a2VkX2Nhc3Q8dW5zaWduZWQ+KGNhcGFjaXR5KSkKKyAgICAgICAgLCBtX3NpemUoY2hlY2tlZF9j
YXN0PHVuc2lnbmVkPihzaXplKSkKICAgICB7CiAgICAgfQogCkBAIC0zNjEsNyArMzYxLDcgQEAg
cHVibGljOgogCiAgICAgVmVjdG9yQnVmZmVyKHNpemVfdCBjYXBhY2l0eSwgc2l6ZV90IHNpemUg
PSAwKQogICAgIHsKLSAgICAgICAgbV9zaXplID0gc2l6ZTsKKyAgICAgICAgbV9zaXplID0gY2hl
Y2tlZF9jYXN0PHVuc2lnbmVkPihzaXplKTsKICAgICAgICAgLy8gQ2FsbGluZyBtYWxsb2MoMCkg
bWlnaHQgdGFrZSBhIGxvY2sgYW5kIG1heSBhY3R1YWxseSBkbyBhbgogICAgICAgICAvLyBhbGxv
Y2F0aW9uIG9uIHNvbWUgc3lzdGVtcy4KICAgICAgICAgaWYgKGNhcGFjaXR5KQpAQCAtNzc5LDcg
Kzc3OSw3IEBAIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPiYgVmVj
dG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhCiAKICAgICBzdGQ6OmNvcHkob3RoZXIu
YmVnaW4oKSwgb3RoZXIuYmVnaW4oKSArIHNpemUoKSwgYmVnaW4oKSk7CiAgICAgVHlwZU9wZXJh
dGlvbnM6OnVuaW5pdGlhbGl6ZWRDb3B5KG90aGVyLmJlZ2luKCkgKyBzaXplKCksIG90aGVyLmVu
ZCgpLCBlbmQoKSk7Ci0gICAgbV9zaXplID0gb3RoZXIuc2l6ZSgpOworICAgIG1fc2l6ZSA9IG90
aGVyLm1fc2l6ZTsKIAogICAgIHJldHVybiAqdGhpczsKIH0KQEAgLTk0MCw3ICs5NDAsNyBAQCBp
bmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46OnJl
c2l6ZShzaXplX3Qgc2l6ZSkKICAgICAgICAgICAgIFR5cGVPcGVyYXRpb25zOjppbml0aWFsaXpl
KGVuZCgpLCBiZWdpbigpICsgc2l6ZSk7CiAgICAgfQogICAgIAotICAgIG1fc2l6ZSA9IHNpemU7
CisgICAgbV9zaXplID0gY2hlY2tlZF9jYXN0PHVuc2lnbmVkPihzaXplKTsKIH0KIAogdGVtcGxh
dGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hh
bmRsZXI+CkBAIC05NTUsNyArOTU1LDcgQEAgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHks
IE92ZXJmbG93SGFuZGxlcj46OnNocmluayhzaXplX3Qgc2l6ZSkKIHsKICAgICBBU1NFUlQoc2l6
ZSA8PSBtX3NpemUpOwogICAgIFR5cGVPcGVyYXRpb25zOjpkZXN0cnVjdChiZWdpbigpICsgc2l6
ZSwgZW5kKCkpOwotICAgIG1fc2l6ZSA9IHNpemU7CisgICAgbV9zaXplID0gY2hlY2tlZF9jYXN0
PHVuc2lnbmVkPihzaXplKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGlu
ZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CkBAIC05NjYsNyArOTY2LDcgQEAg
dm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46Omdyb3coc2l6
ZV90IHNpemUpCiAgICAgICAgIGV4cGFuZENhcGFjaXR5KHNpemUpOwogICAgIGlmIChiZWdpbigp
KQogICAgICAgICBUeXBlT3BlcmF0aW9uczo6aW5pdGlhbGl6ZShlbmQoKSwgYmVnaW4oKSArIHNp
emUpOwotICAgIG1fc2l6ZSA9IHNpemU7CisgICAgbV9zaXplID0gY2hlY2tlZF9jYXN0PHVuc2ln
bmVkPihzaXplKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFj
aXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+CkBAIC0xMDM4LDE2ICsxMDM4LDE1IEBAIHZv
aWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+OjpzaHJpbmtDYXBh
Y2l0eShzaXplX3QgbmV3Q2FwYWNpCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5l
Q2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4gdGVtcGxhdGU8dHlwZW5hbWUgVT4K
IHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+OjphcHBlbmQo
Y29uc3QgVSogZGF0YSwgc2l6ZV90IGRhdGFTaXplKQogewotICAgIHNpemVfdCBuZXdTaXplID0g
bV9zaXplICsgZGF0YVNpemU7Ci0gICAgaWYgKG5ld1NpemUgPiBjYXBhY2l0eSgpKSB7Ci0gICAg
ICAgIGRhdGEgPSBleHBhbmRDYXBhY2l0eShuZXdTaXplLCBkYXRhKTsKKyAgICBDaGVja2VkPHNp
emVfdD4gbmV3U2l6ZSA9IG1fc2l6ZTsKKyAgICBuZXdTaXplICs9IGRhdGFTaXplOworICAgIGlm
IChuZXdTaXplLnVuc2FmZUdldCgpID4gY2FwYWNpdHkoKSkgeworICAgICAgICBkYXRhID0gZXhw
YW5kQ2FwYWNpdHkobmV3U2l6ZS51bnNhZmVHZXQoKSwgZGF0YSk7CiAgICAgICAgIEFTU0VSVChi
ZWdpbigpKTsKICAgICB9Ci0gICAgaWYgKG5ld1NpemUgPCBtX3NpemUpCi0gICAgICAgIENSQVNI
KCk7CiAgICAgVCogZGVzdCA9IGVuZCgpOwogICAgIFZlY3RvckNvcGllcjxzdGQ6OmlzX3RyaXZp
YWw8VD46OnZhbHVlLCBVPjo6dW5pbml0aWFsaXplZENvcHkoZGF0YSwgJmRhdGFbZGF0YVNpemVd
LCBkZXN0KTsKLSAgICBtX3NpemUgPSBuZXdTaXplOworICAgIG1fc2l6ZSA9IGNoZWNrZWRfY2Fz
dDx1bnNpZ25lZD4obmV3U2l6ZSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBp
bmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBVPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvZHRvYS5jcHAgYi9Tb3VyY2UvV1RGL3d0
Zi9kdG9hLmNwcAppbmRleCA1YTU1MzIwZWY3NjExYjZiYzJmYTM0ZTNmMDExM2M0ZjNjYTBhNzRm
Li45YzM4N2YyOTcwMmY0ZTU1YjMzY2Q1YzAzNjg4Y2NhNWUzZGFkOWZkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi9kdG9hLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9kdG9hLmNwcApAQCAt
MTY3LDkgKzE2Nyw5IEBAIHN0YXRpYyB2b2lkIG11bHRhZGQoQmlnSW50JiBiLCBpbnQgbSwgaW50
IGEpICAgIC8qIG11bHRpcGx5IGJ5IG0gYW5kIGFkZCBhICovCiAgICAgdWludDMyX3QgY2Fycnk7
CiAjZW5kaWYKIAotICAgIGludCB3ZHMgPSBiLnNpemUoKTsKKyAgICBzaXplX3Qgd2RzID0gYi5z
aXplKCk7CiAgICAgdWludDMyX3QqIHggPSBiLndvcmRzKCk7Ci0gICAgaW50IGkgPSAwOworICAg
IHNpemVfdCBpID0gMDsKICAgICBjYXJyeSA9IGE7CiAgICAgZG8gewogI2lmZGVmIFVTRV9MT05H
X0xPTkcKQEAgLTI3MSw3ICsyNzEsNyBAQCBzdGF0aWMgdm9pZCBtdWx0KEJpZ0ludCYgYVJlZiwg
Y29uc3QgQmlnSW50JiBiUmVmKQogICAgIGNvbnN0IEJpZ0ludCogYSA9ICZhUmVmOwogICAgIGNv
bnN0IEJpZ0ludCogYiA9ICZiUmVmOwogICAgIEJpZ0ludCBjOwotICAgIGludCB3YSwgd2IsIHdj
OworICAgIHNpemVfdCB3YSwgd2IsIHdjOwogICAgIGNvbnN0IHVpbnQzMl90KiB4ID0gMDsKICAg
ICBjb25zdCB1aW50MzJfdCogeGE7CiAgICAgY29uc3QgdWludDMyX3QqIHhiOwpAQCAtNDIwLDgg
KzQyMCw4IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQgbHNoaWZ0KEJpZ0ludCYgYiwgaW50
IGspCiB7CiAgICAgaW50IG4gPSBrID4+IDU7CiAKLSAgICBpbnQgb3JpZ1NpemUgPSBiLnNpemUo
KTsKLSAgICBpbnQgbjEgPSBuICsgb3JpZ1NpemUgKyAxOworICAgIHNpemVfdCBvcmlnU2l6ZSA9
IGIuc2l6ZSgpOworICAgIHNpemVfdCBuMSA9IG4gKyBvcmlnU2l6ZSArIDE7CiAKICAgICBpZiAo
ayAmPSAweDFmKQogICAgICAgICBiLnJlc2l6ZShiLnNpemUoKSArIG4gKyAxKTsKQEAgLTQ2MCw4
ICs0NjAsOCBAQCBzdGF0aWMgaW50IGNtcChjb25zdCBCaWdJbnQmIGEsIGNvbnN0IEJpZ0ludCYg
YikKICAgICBjb25zdCB1aW50MzJfdCAqeGEsICp4YTAsICp4YiwgKnhiMDsKICAgICBpbnQgaSwg
ajsKIAotICAgIGkgPSBhLnNpemUoKTsKLSAgICBqID0gYi5zaXplKCk7CisgICAgaSA9IGNoZWNr
ZWRfY2FzdDxpbnQ+KGEuc2l6ZSgpKTsKKyAgICBqID0gY2hlY2tlZF9jYXN0PGludD4oYi5zaXpl
KCkpOwogICAgIEFTU0VSVChpIDw9IDEgfHwgYS53b3JkcygpW2kgLSAxXSk7CiAgICAgQVNTRVJU
KGogPD0gMSB8fCBiLndvcmRzKClbaiAtIDFdKTsKICAgICBpZiAoaSAtPSBqKQpAQCAtNTAxLDEw
ICs1MDEsMTAgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgdm9pZCBkaWZmKEJpZ0ludCYgYywgY29u
c3QgQmlnSW50JiBhUmVmLCBjb25zdCBCaWdJbnQmIGJSZWYKICAgICB9IGVsc2UKICAgICAgICAg
aSA9IDA7CiAKLSAgICB3YSA9IGEtPnNpemUoKTsKKyAgICB3YSA9IGNoZWNrZWRfY2FzdDxpbnQ+
KGEtPnNpemUoKSk7CiAgICAgY29uc3QgdWludDMyX3QqIHhhID0gYS0+d29yZHMoKTsKICAgICBj
b25zdCB1aW50MzJfdCogeGFlID0geGEgKyB3YTsKLSAgICB3YiA9IGItPnNpemUoKTsKKyAgICB3
YiA9IGNoZWNrZWRfY2FzdDxpbnQ+KGItPnNpemUoKSk7CiAgICAgY29uc3QgdWludDMyX3QqIHhi
ID0gYi0+d29yZHMoKTsKICAgICBjb25zdCB1aW50MzJfdCogeGJlID0geGIgKyB3YjsKIApAQCAt
NTUwLDcgKzU1MCw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQgZDJiKEJpZ0ludCYgYiwg
VSogZCwgaW50KiBlLCBpbnQqIGJpdHMpCiAgICAgaW50IGRlLCBrOwogICAgIHVpbnQzMl90KiB4
OwogICAgIHVpbnQzMl90IHksIHo7Ci0gICAgaW50IGk7CisgICAgQ2hlY2tlZDx1bnNpZ25lZD4g
aTsKICNkZWZpbmUgZDAgd29yZDAoZCkKICNkZWZpbmUgZDEgd29yZDEoZCkKIApAQCAtNTg2LDcg
KzU4Niw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQgZDJiKEJpZ0ludCYgYiwgVSogZCwg
aW50KiBlLCBpbnQqIGJpdHMpCiAgICAgICAgICpiaXRzID0gUCAtIGs7CiAgICAgfSBlbHNlIHsK
ICAgICAgICAgKmUgPSAwIC0gQmlhcyAtIChQIC0gMSkgKyAxICsgazsKLSAgICAgICAgKmJpdHMg
PSAoMzIgKiBpKSAtIGhpMGJpdHMoeFtpIC0gMV0pOworICAgICAgICAqYml0cyA9IGNoZWNrZWRf
Y2FzdDxpbnQ+KCgzMiAqIGkpIC0gaGkwYml0cyh4WyhpIC0gMSkudW5zYWZlR2V0KCldKSk7CiAg
ICAgfQogfQogI3VuZGVmIGQwCkBAIC05MjEsNyArOTIxLDcgQEAgdm9pZCBkdG9hKER0b2FCdWZm
ZXIgcmVzdWx0LCBkb3VibGUgZGQsIGludCBuZGlnaXRzLCBib29sJiBzaWduT3V0LCBpbnQmIGV4
cG9uZW4KICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgZHZhbCgmZXBzKSA9ICgwLjUgLyB0
ZW5zW2lsaW0gLSAxXSkgLSBkdmFsKCZlcHMpOwogICAgICAgICAgICAgZm9yIChpID0gMDs7KSB7
Ci0gICAgICAgICAgICAgICAgTCA9IChsb25nIGludClkdmFsKCZ1KTsKKyAgICAgICAgICAgICAg
ICBMID0gKGludCkobG9uZyBpbnQpZHZhbCgmdSk7CiAgICAgICAgICAgICAgICAgZHZhbCgmdSkg
LT0gTDsKICAgICAgICAgICAgICAgICAqcysrID0gJzAnICsgKGludClMOwogICAgICAgICAgICAg
ICAgIGlmIChkdmFsKCZ1KSA8IGR2YWwoJmVwcykpCkBAIC0xMjAyLDcgKzEyMDIsNyBAQCByZXQ6
CiAgICAgQVNTRVJUKHMgPiByZXN1bHQpOwogICAgICpzID0gMDsKICAgICBleHBvbmVudE91dCA9
IGs7Ci0gICAgcHJlY2lzaW9uT3V0ID0gcyAtIHJlc3VsdDsKKyAgICBwcmVjaXNpb25PdXQgPSBj
aGVja2VkX2Nhc3Q8aW50PihzIC0gcmVzdWx0KTsKIH0KIAogdm9pZCBkdG9hKER0b2FCdWZmZXIg
cmVzdWx0LCBkb3VibGUgZGQsIGJvb2wmIHNpZ24sIGludCYgZXhwb25lbnQsIHVuc2lnbmVkJiBw
cmVjaXNpb24pCkBAIC0xMjYxLDcgKzEyNjEsNyBAQCBzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIq
IGZvcm1hdFN0cmluZ1RydW5jYXRpbmdUcmFpbGluZ1plcm9zSWZOZWVkZWQoTnVtYmVyVG9TdAog
ICAgIH0KIAogICAgIC8vIFRydW5jYXRlIHRoZSBTdHJpbmdCdWlsZGVyLCBhbmQgcmV0dXJuIHRo
ZSBmaW5hbCByZXN1bHQuCi0gICAgYnVpbGRlci5TZXRQb3NpdGlvbih0cnVuY2F0ZWRMZW5ndGgg
KyAxKTsKKyAgICBidWlsZGVyLlNldFBvc2l0aW9uKGNoZWNrZWRfY2FzdDxpbnQ+KHRydW5jYXRl
ZExlbmd0aCArIDEpKTsKICAgICByZXR1cm4gYnVpbGRlci5GaW5hbGl6ZSgpOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0Jhc2U2NC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi90
ZXh0L0Jhc2U2NC5jcHAKaW5kZXggMjMyM2YzZmEzODE4YWYyNjVlM2JhNjY4MmI2OGI4MzU1YjEw
ZDUwYy4uZTNjZDUzMjA0NDk2N2RkMjY4YTQ2MmIwMTAyNzY0ZWRlOWZkNGE3YyAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi93dGYvdGV4dC9CYXNlNjQuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3Rl
eHQvQmFzZTY0LmNwcApAQCAtOTIsNyArOTIsNyBAQCBzdGF0aWMgY29uc3QgY2hhciBiYXNlNjRV
UkxEZWNNYXBbMTI4XSA9IHsKICAgICAweDMxLCAweDMyLCAweDMzLCBub25BbHBoYWJldCwgbm9u
QWxwaGFiZXQsIG5vbkFscGhhYmV0LCBub25BbHBoYWJldCwgbm9uQWxwaGFiZXQKIH07CiAKLXN0
YXRpYyBpbmxpbmUgdm9pZCBiYXNlNjRFbmNvZGVJbnRlcm5hbChjb25zdCBjaGFyKiBkYXRhLCB1
bnNpZ25lZCBsZW4sIFZlY3RvcjxjaGFyPiYgb3V0LCBCYXNlNjRFbmNvZGVQb2xpY3kgcG9saWN5
LCBjb25zdCBjaGFyICgmZW5jb2RlTWFwKVs2NF0pCitzdGF0aWMgaW5saW5lIHZvaWQgYmFzZTY0
RW5jb2RlSW50ZXJuYWwoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbiwgVmVjdG9yPGNoYXI+
JiBvdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3ksIGNvbnN0IGNoYXIgKCZlbmNvZGVNYXAp
WzY0XSkKIHsKICAgICBvdXQuY2xlYXIoKTsKICAgICBpZiAoIWxlbikKQEAgLTEwOCw3ICsxMDgs
NyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYmFzZTY0RW5jb2RlSW50ZXJuYWwoY29uc3QgY2hhciog
ZGF0YSwgdW5zaWduZWQgbGVuLCBWZWN0b3I8YwogICAgIHVuc2lnbmVkIHNpZHggPSAwOwogICAg
IHVuc2lnbmVkIGRpZHggPSAwOwogCi0gICAgdW5zaWduZWQgb3V0TGVuZ3RoID0gKChsZW4gKyAy
KSAvIDMpICogNDsKKyAgICBzaXplX3Qgb3V0TGVuZ3RoID0gKChsZW4gKyAyKSAvIDMpICogNDsK
IAogICAgIC8vIERlYWwgd2l0aCB0aGUgNzYgY2hhcmFjdGVyIHBlciBsaW5lIGxpbWl0IHNwZWNp
ZmllZCBpbiBSRkMgMjA0NS4KICAgICBib29sIGluc2VydExGcyA9IChwb2xpY3kgPT0gQmFzZTY0
SW5zZXJ0TEZzICYmIG91dExlbmd0aCA+IDc2KTsKQEAgLTE1NywzMiArMTU3LDMyIEBAIHN0YXRp
YyBpbmxpbmUgdm9pZCBiYXNlNjRFbmNvZGVJbnRlcm5hbChjb25zdCBjaGFyKiBkYXRhLCB1bnNp
Z25lZCBsZW4sIFZlY3RvcjxjCiAgICAgfQogfQogCi1TdHJpbmcgYmFzZTY0RW5jb2RlKGNvbnN0
IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCwgQmFzZTY0RW5jb2RlUG9saWN5IHBvbGljeSkK
K1N0cmluZyBiYXNlNjRFbmNvZGUoY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IGxlbmd0aCwgQmFz
ZTY0RW5jb2RlUG9saWN5IHBvbGljeSkKIHsKICAgICBWZWN0b3I8Y2hhcj4gcmVzdWx0OwogICAg
IGJhc2U2NEVuY29kZUludGVybmFsKHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihkYXRhKSwgbGVu
Z3RoLCByZXN1bHQsIHBvbGljeSwgYmFzZTY0RW5jTWFwKTsKICAgICByZXR1cm4gU3RyaW5nKHJl
c3VsdC5kYXRhKCksIHJlc3VsdC5zaXplKCkpOwogfQogCi12b2lkIGJhc2U2NEVuY29kZShjb25z
dCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBsZW4sIFZlY3RvcjxjaGFyPiYgb3V0LCBCYXNlNjRFbmNv
ZGVQb2xpY3kgcG9saWN5KQordm9pZCBiYXNlNjRFbmNvZGUoY29uc3Qgdm9pZCogZGF0YSwgc2l6
ZV90IGxlbiwgVmVjdG9yPGNoYXI+JiBvdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3kpCiB7
CiAgICAgYmFzZTY0RW5jb2RlSW50ZXJuYWwoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEp
LCBsZW4sIG91dCwgcG9saWN5LCBiYXNlNjRFbmNNYXApOwogfQogCi1TdHJpbmcgYmFzZTY0VVJM
RW5jb2RlKGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKK1N0cmluZyBiYXNlNjRV
UkxFbmNvZGUoY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IGxlbmd0aCkKIHsKICAgICBWZWN0b3I8
Y2hhcj4gcmVzdWx0OwogICAgIGJhc2U2NEVuY29kZUludGVybmFsKHN0YXRpY19jYXN0PGNvbnN0
IGNoYXIqPihkYXRhKSwgbGVuZ3RoLCByZXN1bHQsIEJhc2U2NFVSTFBvbGljeSwgYmFzZTY0VVJM
RW5jTWFwKTsKICAgICByZXR1cm4gU3RyaW5nKHJlc3VsdC5kYXRhKCksIHJlc3VsdC5zaXplKCkp
OwogfQogCi12b2lkIGJhc2U2NFVSTEVuY29kZShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBs
ZW4sIFZlY3RvcjxjaGFyPiYgb3V0KQordm9pZCBiYXNlNjRVUkxFbmNvZGUoY29uc3Qgdm9pZCog
ZGF0YSwgc2l6ZV90IGxlbiwgVmVjdG9yPGNoYXI+JiBvdXQpCiB7CiAgICAgYmFzZTY0RW5jb2Rl
SW50ZXJuYWwoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEpLCBsZW4sIG91dCwgQmFzZTY0
VVJMUG9saWN5LCBiYXNlNjRVUkxFbmNNYXApOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgot
c3RhdGljIGlubGluZSBib29sIGJhc2U2NERlY29kZUludGVybmFsKGNvbnN0IFQqIGRhdGEsIHVu
c2lnbmVkIGxlbmd0aCwgVmVjdG9yPGNoYXI+JiBvdXQsIEJhc2U2NERlY29kZVBvbGljeSBwb2xp
Y3ksIGNvbnN0IGNoYXIgKCZkZWNvZGVNYXApWzEyOF0pCitzdGF0aWMgaW5saW5lIGJvb2wgYmFz
ZTY0RGVjb2RlSW50ZXJuYWwoY29uc3QgVCogZGF0YSwgc2l6ZV90IGxlbmd0aCwgVmVjdG9yPGNo
YXI+JiBvdXQsIEJhc2U2NERlY29kZVBvbGljeSBwb2xpY3ksIGNvbnN0IGNoYXIgKCZkZWNvZGVN
YXApWzEyOF0pCiB7CiAgICAgb3V0LmNsZWFyKCk7CiAgICAgaWYgKCFsZW5ndGgpCkBAIC0xOTIs
NyArMTkyLDcgQEAgc3RhdGljIGlubGluZSBib29sIGJhc2U2NERlY29kZUludGVybmFsKGNvbnN0
IFQqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCwgVmVjdG9yPGMKIAogICAgIHVuc2lnbmVkIGVxdWFs
c1NpZ25Db3VudCA9IDA7CiAgICAgdW5zaWduZWQgb3V0TGVuZ3RoID0gMDsKLSAgICBmb3IgKHVu
c2lnbmVkIGlkeCA9IDA7IGlkeCA8IGxlbmd0aDsgKytpZHgpIHsKKyAgICBmb3IgKHNpemVfdCBp
ZHggPSAwOyBpZHggPCBsZW5ndGg7ICsraWR4KSB7CiAgICAgICAgIHVuc2lnbmVkIGNoID0gZGF0
YVtpZHhdOwogICAgICAgICBpZiAoY2ggPT0gJz0nKSB7CiAgICAgICAgICAgICArK2VxdWFsc1Np
Z25Db3VudDsKQEAgLTI2NCw3ICsyNjQsNyBAQCBib29sIGJhc2U2NERlY29kZShjb25zdCBWZWN0
b3I8Y2hhcj4mIGluLCBTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIgb3V0LAogICAg
IHJldHVybiBiYXNlNjREZWNvZGVJbnRlcm5hbDxjaGFyPihpbi5kYXRhKCksIGluLnNpemUoKSwg
b3V0LCBwb2xpY3ksIGJhc2U2NERlY01hcCk7CiB9CiAKLWJvb2wgYmFzZTY0RGVjb2RlKGNvbnN0
IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbiwgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFw
dGVyIG91dCwgQmFzZTY0RGVjb2RlUG9saWN5IHBvbGljeSkKK2Jvb2wgYmFzZTY0RGVjb2RlKGNv
bnN0IGNoYXIqIGRhdGEsIHNpemVfdCBsZW4sIFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRh
cHRlciBvdXQsIEJhc2U2NERlY29kZVBvbGljeSBwb2xpY3kpCiB7CiAgICAgcmV0dXJuIGJhc2U2
NERlY29kZUludGVybmFsPGNoYXI+KGRhdGEsIGxlbiwgb3V0LCBwb2xpY3ksIGJhc2U2NERlY01h
cCk7CiB9CkBAIC0yODUsNyArMjg1LDcgQEAgYm9vbCBiYXNlNjRVUkxEZWNvZGUoY29uc3QgVmVj
dG9yPGNoYXI+JiBpbiwgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyIG8KICAgICBy
ZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWw8Y2hhcj4oaW4uZGF0YSgpLCBpbi5zaXplKCksIG91
dCwgQmFzZTY0RmFpbE9uSW52YWxpZENoYXJhY3RlciwgYmFzZTY0VVJMRGVjTWFwKTsKIH0KIAot
Ym9vbCBiYXNlNjRVUkxEZWNvZGUoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuLCBTaWdu
ZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIgb3V0KQorYm9vbCBiYXNlNjRVUkxEZWNvZGUo
Y29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbiwgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JB
ZGFwdGVyIG91dCkKIHsKICAgICByZXR1cm4gYmFzZTY0RGVjb2RlSW50ZXJuYWw8Y2hhcj4oZGF0
YSwgbGVuLCBvdXQsIEJhc2U2NEZhaWxPbkludmFsaWRDaGFyYWN0ZXIsIGJhc2U2NFVSTERlY01h
cCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0Jhc2U2NC5oIGIvU291cmNl
L1dURi93dGYvdGV4dC9CYXNlNjQuaAppbmRleCA5OGE3MTBhY2RkODFlMWYzZGJhZjdhZjhhYzJi
NTBlNzA2NTJkYTY0Li44MzIwMjMzY2NkODA1ZDYwYzA4ODYxMTcwMmM1ZDQ1NGQwODI0MTU5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0Jhc2U2NC5oCisrKyBiL1NvdXJjZS9XVEYv
d3RmL3RleHQvQmFzZTY0LmgKQEAgLTc4LDE2ICs3OCwxNiBAQCBwcml2YXRlOgogICAgIH0gbV92
ZWN0b3I7CiB9OwogCi1XVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBiYXNlNjRFbmNvZGUoY29uc3Qg
dm9pZCosIHVuc2lnbmVkLCBWZWN0b3I8Y2hhcj4mLCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNl
NjREb05vdEluc2VydExGcyk7CitXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBiYXNlNjRFbmNvZGUo
Y29uc3Qgdm9pZCosIHNpemVfdCwgVmVjdG9yPGNoYXI+JiwgQmFzZTY0RW5jb2RlUG9saWN5ID0g
QmFzZTY0RG9Ob3RJbnNlcnRMRnMpOwogV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYmFzZTY0RW5j
b2RlKENvbnN0U2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyLCBWZWN0b3I8Y2hhcj4m
LCBCYXNlNjRFbmNvZGVQb2xpY3kgPSBCYXNlNjREb05vdEluc2VydExGcyk7CiBXVEZfRVhQT1JU
X1BSSVZBVEUgdm9pZCBiYXNlNjRFbmNvZGUoY29uc3QgQ1N0cmluZyYsIFZlY3RvcjxjaGFyPiYs
IEJhc2U2NEVuY29kZVBvbGljeSA9IEJhc2U2NERvTm90SW5zZXJ0TEZzKTsKLVdURl9FWFBPUlRf
UFJJVkFURSBTdHJpbmcgYmFzZTY0RW5jb2RlKGNvbnN0IHZvaWQqLCB1bnNpZ25lZCwgQmFzZTY0
RW5jb2RlUG9saWN5ID0gQmFzZTY0RG9Ob3RJbnNlcnRMRnMpOworV1RGX0VYUE9SVF9QUklWQVRF
IFN0cmluZyBiYXNlNjRFbmNvZGUoY29uc3Qgdm9pZCosIHNpemVfdCwgQmFzZTY0RW5jb2RlUG9s
aWN5ID0gQmFzZTY0RG9Ob3RJbnNlcnRMRnMpOwogV1RGX0VYUE9SVF9QUklWQVRFIFN0cmluZyBi
YXNlNjRFbmNvZGUoQ29uc3RTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIsIEJhc2U2
NEVuY29kZVBvbGljeSA9IEJhc2U2NERvTm90SW5zZXJ0TEZzKTsKIFdURl9FWFBPUlRfUFJJVkFU
RSBTdHJpbmcgYmFzZTY0RW5jb2RlKGNvbnN0IENTdHJpbmcmLCBCYXNlNjRFbmNvZGVQb2xpY3kg
PSBCYXNlNjREb05vdEluc2VydExGcyk7CiAKIFdURl9FWFBPUlRfUFJJVkFURSBib29sIGJhc2U2
NERlY29kZShjb25zdCBTdHJpbmcmLCBTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIs
IEJhc2U2NERlY29kZVBvbGljeSA9IEJhc2U2NEZhaWxPbkludmFsaWRDaGFyYWN0ZXIpOwogV1RG
X0VYUE9SVF9QUklWQVRFIGJvb2wgYmFzZTY0RGVjb2RlKGNvbnN0IFZlY3RvcjxjaGFyPiYsIFNp
Z25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlciwgQmFzZTY0RGVjb2RlUG9saWN5ID0gQmFz
ZTY0RmFpbE9uSW52YWxpZENoYXJhY3Rlcik7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBiYXNl
NjREZWNvZGUoY29uc3QgY2hhciosIHVuc2lnbmVkLCBTaWduZWRPclVuc2lnbmVkQ2hhclZlY3Rv
ckFkYXB0ZXIsIEJhc2U2NERlY29kZVBvbGljeSA9IEJhc2U2NEZhaWxPbkludmFsaWRDaGFyYWN0
ZXIpOworV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgYmFzZTY0RGVjb2RlKGNvbnN0IGNoYXIqLCBz
aXplX3QsIFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlciwgQmFzZTY0RGVjb2RlUG9s
aWN5ID0gQmFzZTY0RmFpbE9uSW52YWxpZENoYXJhY3Rlcik7CiAKIGlubGluZSB2b2lkIGJhc2U2
NEVuY29kZShDb25zdFNpZ25lZE9yVW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlciBpbiwgVmVjdG9y
PGNoYXI+JiBvdXQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3kpCiB7CkBAIC0xMTQsMTYgKzEx
NCwxNiBAQCBpbmxpbmUgU3RyaW5nIGJhc2U2NEVuY29kZShjb25zdCBDU3RyaW5nJiBpbiwgQmFz
ZTY0RW5jb2RlUG9saWN5IHBvbGljeSkKIC8vIFRoaXMgZm9ybWF0IHVzZXMgJy0nIGFuZCAnXycg
aW5zdGVhZCBvZiAnKycgYW5kICcvJyByZXNwZWN0aXZlbHkuCiAvLyA9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQogCi1XVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBiYXNlNjRVUkxFbmNvZGUo
Y29uc3Qgdm9pZCosIHVuc2lnbmVkLCBWZWN0b3I8Y2hhcj4mKTsKK1dURl9FWFBPUlRfUFJJVkFU
RSB2b2lkIGJhc2U2NFVSTEVuY29kZShjb25zdCB2b2lkKiwgc2l6ZV90LCBWZWN0b3I8Y2hhcj4m
KTsKIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGJhc2U2NFVSTEVuY29kZShDb25zdFNpZ25lZE9y
VW5zaWduZWRDaGFyVmVjdG9yQWRhcHRlciwgVmVjdG9yPGNoYXI+Jik7CiBXVEZfRVhQT1JUX1BS
SVZBVEUgdm9pZCBiYXNlNjRVUkxFbmNvZGUoY29uc3QgQ1N0cmluZyYsIFZlY3RvcjxjaGFyPiYp
OwotV1RGX0VYUE9SVF9QUklWQVRFIFN0cmluZyBiYXNlNjRVUkxFbmNvZGUoY29uc3Qgdm9pZCos
IHVuc2lnbmVkKTsKK1dURl9FWFBPUlRfUFJJVkFURSBTdHJpbmcgYmFzZTY0VVJMRW5jb2RlKGNv
bnN0IHZvaWQqLCBzaXplX3QpOwogV1RGX0VYUE9SVF9QUklWQVRFIFN0cmluZyBiYXNlNjRVUkxF
bmNvZGUoQ29uc3RTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIpOwogV1RGX0VYUE9S
VF9QUklWQVRFIFN0cmluZyBiYXNlNjRVUkxFbmNvZGUoY29uc3QgQ1N0cmluZyYpOwogCiBXVEZf
RVhQT1JUX1BSSVZBVEUgYm9vbCBiYXNlNjRVUkxEZWNvZGUoY29uc3QgU3RyaW5nJiwgU2lnbmVk
T3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyKTsKIFdURl9FWFBPUlRfUFJJVkFURSBib29sIGJh
c2U2NFVSTERlY29kZShjb25zdCBWZWN0b3I8Y2hhcj4mLCBTaWduZWRPclVuc2lnbmVkQ2hhclZl
Y3RvckFkYXB0ZXIpOwotV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgYmFzZTY0VVJMRGVjb2RlKGNv
bnN0IGNoYXIqLCB1bnNpZ25lZCwgU2lnbmVkT3JVbnNpZ25lZENoYXJWZWN0b3JBZGFwdGVyKTsK
K1dURl9FWFBPUlRfUFJJVkFURSBib29sIGJhc2U2NFVSTERlY29kZShjb25zdCBjaGFyKiwgc2l6
ZV90LCBTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIpOwogCiBpbmxpbmUgdm9pZCBi
YXNlNjRVUkxFbmNvZGUoQ29uc3RTaWduZWRPclVuc2lnbmVkQ2hhclZlY3RvckFkYXB0ZXIgaW4s
IFZlY3RvcjxjaGFyPiYgb3V0KQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9T
dHJpbmdCdWZmZXIuaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVmZmVyLmgKaW5kZXgg
ZjI5M2QzMzNkYmUzZTQ1ZTYzN2ExNDg2NzMzZDBhMmZkOGMwOGMwYy4uNDkwNjllNDM5NTU2ZTcx
M2RkOGRmNjU3MTA4Nzk4YzlhNDQxZTIwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4
dC9TdHJpbmdCdWZmZXIuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1ZmZlci5o
CkBAIC0zOSw3ICszOSw3IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyVHlwZT4KIGNsYXNzIFN0
cmluZ0J1ZmZlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3RyaW5nQnVmZmVyKTsKIHB1
YmxpYzoKLSAgICBleHBsaWNpdCBTdHJpbmdCdWZmZXIodW5zaWduZWQgbGVuZ3RoKQorICAgIGV4
cGxpY2l0IFN0cmluZ0J1ZmZlcihzaXplX3QgbGVuZ3RoKQogICAgICAgICA6IG1fbGVuZ3RoKGxl
bmd0aCkKICAgICAgICAgLCBtX2RhdGEobV9sZW5ndGggPyBzdGF0aWNfY2FzdDxDaGFyVHlwZSo+
KGZhc3RNYWxsb2MoKENoZWNrZWQ8c2l6ZV90PihtX2xlbmd0aCkgKiBzaXplb2YoQ2hhclR5cGUp
KS51bnNhZmVHZXQoKSkpIDogbnVsbHB0cikKICAgICB7CkBAIC01MCwxMyArNTAsMTMgQEAgcHVi
bGljOgogICAgICAgICBmYXN0RnJlZShtX2RhdGEpOwogICAgIH0KIAotICAgIHZvaWQgc2hyaW5r
KHVuc2lnbmVkIG5ld0xlbmd0aCkKKyAgICB2b2lkIHNocmluayhzaXplX3QgbmV3TGVuZ3RoKQog
ICAgIHsKICAgICAgICAgQVNTRVJUKG5ld0xlbmd0aCA8PSBtX2xlbmd0aCk7CiAgICAgICAgIG1f
bGVuZ3RoID0gbmV3TGVuZ3RoOwogICAgIH0KIAotICAgIHZvaWQgcmVzaXplKHVuc2lnbmVkIG5l
d0xlbmd0aCkKKyAgICB2b2lkIHJlc2l6ZShzaXplX3QgbmV3TGVuZ3RoKQogICAgIHsKICAgICAg
ICAgaWYgKG5ld0xlbmd0aCA+IG1fbGVuZ3RoKSB7CiAgICAgICAgICAgICBpZiAobmV3TGVuZ3Ro
ID4gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIC8gc2l6ZW9mKFVDaGFyKSkK
QEAgLTY2LDcgKzY2LDcgQEAgcHVibGljOgogICAgICAgICBtX2xlbmd0aCA9IG5ld0xlbmd0aDsK
ICAgICB9CiAKLSAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsg
fQorICAgIHNpemVfdCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQogICAgIENo
YXJUeXBlKiBjaGFyYWN0ZXJzKCkgeyByZXR1cm4gbV9kYXRhOyB9CiAKICAgICBDaGFyVHlwZSYg
b3BlcmF0b3JbXSh1bnNpZ25lZCBpKSB7IEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9O
KGkgPCBtX2xlbmd0aCk7IHJldHVybiBtX2RhdGFbaV07IH0KQEAgLTc5LDcgKzc5LDcgQEAgcHVi
bGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICB1bnNpZ25lZCBtX2xlbmd0aDsKKyAgICBzaXpl
X3QgbV9sZW5ndGg7CiAgICAgQ2hhclR5cGUqIG1fZGF0YTsKIH07CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuY3BwCmluZGV4IDJlMmMwYzdkZmFlOTEwMWI0Y2VkZDc4NTk3ZDZmYjI3
NGNmNzllZDEuLjY4YjM4YmVhMDZmOTdmODgzMjQ2MzBkMDBiNjlmOTFhYzc5MDViMjEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5jcHAKKysrIGIvU291cmNl
L1dURi93dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmNwcApAQCAtMzMsMTcgKzMzLDE3IEBACiAKIG5h
bWVzcGFjZSBXVEYgewogCi1zdGF0aWMgdW5zaWduZWQgZXhwYW5kZWRDYXBhY2l0eSh1bnNpZ25l
ZCBjYXBhY2l0eSwgdW5zaWduZWQgcmVxdWlyZWRMZW5ndGgpCitzdGF0aWMgdW5zaWduZWQgZXhw
YW5kZWRDYXBhY2l0eShzaXplX3QgY2FwYWNpdHksIHNpemVfdCByZXF1aXJlZExlbmd0aCkKIHsK
LSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWluaW11bUNhcGFjaXR5ID0gMTY7Ci0gICAgcmV0
dXJuIHN0ZDo6bWF4KHJlcXVpcmVkTGVuZ3RoLCBzdGQ6Om1heChtaW5pbXVtQ2FwYWNpdHksIGNh
cGFjaXR5ICogMikpOworICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbWluaW11bUNhcGFjaXR5ID0g
MTY7CisgICAgcmV0dXJuIGNoZWNrZWRfY2FzdDx1bnNpZ25lZD4oc3RkOjptYXgocmVxdWlyZWRM
ZW5ndGgsIHN0ZDo6bWF4KG1pbmltdW1DYXBhY2l0eSwgY2FwYWNpdHkgKiAyKSkpOwogfQogCiB2
b2lkIFN0cmluZ0J1aWxkZXI6OnJlaWZ5U3RyaW5nKCkgY29uc3QKIHsKICAgICAvLyBDaGVjayBp
ZiB0aGUgc3RyaW5nIGFscmVhZHkgZXhpc3RzLgogICAgIGlmICghbV9zdHJpbmcuaXNOdWxsKCkp
IHsKLSAgICAgICAgQVNTRVJUKG1fc3RyaW5nLmxlbmd0aCgpID09IG1fbGVuZ3RoKTsKKyAgICAg
ICAgQVNTRVJUKG1fc3RyaW5nLmxlbmd0aCgpID09IGxlbmd0aCgpKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIApAQCAtNTQsMjMgKzU0LDIzIEBAIHZvaWQgU3RyaW5nQnVpbGRlcjo6cmVpZnlT
dHJpbmcoKSBjb25zdAogICAgIH0KIAogICAgIC8vIE11c3QgYmUgdmFsaWQgaW4gdGhlIGJ1ZmZl
ciwgdGFrZSBhIHN1YnN0cmluZyAodW5sZXNzIHN0cmluZyBmaWxscyB0aGUgYnVmZmVyKS4KLSAg
ICBBU1NFUlQobV9idWZmZXIgJiYgbV9sZW5ndGggPD0gbV9idWZmZXItPmxlbmd0aCgpKTsKLSAg
ICBpZiAobV9sZW5ndGggPT0gbV9idWZmZXItPmxlbmd0aCgpKQorICAgIEFTU0VSVChtX2J1ZmZl
ciAmJiBsZW5ndGgoKSA8PSBtX2J1ZmZlci0+bGVuZ3RoKCkpOworICAgIGlmIChsZW5ndGgoKSA9
PSBtX2J1ZmZlci0+bGVuZ3RoKCkpCiAgICAgICAgIG1fc3RyaW5nID0gbV9idWZmZXIuZ2V0KCk7
CiAgICAgZWxzZQotICAgICAgICBtX3N0cmluZyA9IFN0cmluZ0ltcGw6OmNyZWF0ZVN1YnN0cmlu
Z1NoYXJpbmdJbXBsKG1fYnVmZmVyLCAwLCBtX2xlbmd0aCk7CisgICAgICAgIG1fc3RyaW5nID0g
U3RyaW5nSW1wbDo6Y3JlYXRlU3Vic3RyaW5nU2hhcmluZ0ltcGwobV9idWZmZXIsIDAsIGxlbmd0
aCgpKTsKIAotICAgIGlmIChtX2J1ZmZlci0+aGFzMTZCaXRTaGFkb3coKSAmJiBtX3ZhbGlkMTZC
aXRTaGFkb3dMZW5ndGggPCBtX2xlbmd0aCkKLSAgICAgICAgbV9idWZmZXItPnVwY29udmVydENo
YXJhY3RlcnMobV92YWxpZDE2Qml0U2hhZG93TGVuZ3RoLCBtX2xlbmd0aCk7CisgICAgaWYgKG1f
YnVmZmVyLT5oYXMxNkJpdFNoYWRvdygpICYmIG1fdmFsaWQxNkJpdFNoYWRvd0xlbmd0aCA8IGxl
bmd0aCgpKQorICAgICAgICBtX2J1ZmZlci0+dXBjb252ZXJ0Q2hhcmFjdGVycyhtX3ZhbGlkMTZC
aXRTaGFkb3dMZW5ndGgsIGxlbmd0aCgpKTsKIAotICAgIG1fdmFsaWQxNkJpdFNoYWRvd0xlbmd0
aCA9IG1fbGVuZ3RoOworICAgIG1fdmFsaWQxNkJpdFNoYWRvd0xlbmd0aCA9IGxlbmd0aCgpOwog
fQogCiB2b2lkIFN0cmluZ0J1aWxkZXI6OnJlc2l6ZSh1bnNpZ25lZCBuZXdTaXplKQogewogICAg
IC8vIENoZWNrIG5ld1NpemUgPCBtX2xlbmd0aCwgaGVuY2UgbV9sZW5ndGggPiAwLgotICAgIEFT
U0VSVChuZXdTaXplIDw9IG1fbGVuZ3RoKTsKLSAgICBpZiAobmV3U2l6ZSA9PSBtX2xlbmd0aCkK
KyAgICBBU1NFUlQobmV3U2l6ZSA8PSBsZW5ndGgoKSk7CisgICAgaWYgKG5ld1NpemUgPT0gbGVu
Z3RoKCkpCiAgICAgICAgIHJldHVybjsKICAgICBBU1NFUlQobV9sZW5ndGgpOwogCkBAIC05Nywx
MiArOTcsMTIgQEAgdm9pZCBTdHJpbmdCdWlsZGVyOjpyZXNpemUodW5zaWduZWQgbmV3U2l6ZSkK
IAogLy8gQWxsb2NhdGUgYSBuZXcgOCBiaXQgYnVmZmVyLCBjb3B5aW5nIGluIGN1cnJlbnRDaGFy
YWN0ZXJzICh0aGVzZSBtYXkgY29tZSBmcm9tIGVpdGhlciBtX3N0cmluZwogLy8gb3IgbV9idWZm
ZXIsIG5laXRoZXIgd2lsbCBiZSByZWFzc2lnbmVkIHVudGlsIHRoZSBjb3B5IGhhcyBjb21wbGV0
ZWQpLgotdm9pZCBTdHJpbmdCdWlsZGVyOjphbGxvY2F0ZUJ1ZmZlcihjb25zdCBMQ2hhciogY3Vy
cmVudENoYXJhY3RlcnMsIHVuc2lnbmVkIHJlcXVpcmVkTGVuZ3RoKQordm9pZCBTdHJpbmdCdWls
ZGVyOjphbGxvY2F0ZUJ1ZmZlcihjb25zdCBMQ2hhciogY3VycmVudENoYXJhY3RlcnMsIHNpemVf
dCByZXF1aXJlZExlbmd0aCkKIHsKICAgICBBU1NFUlQobV9pczhCaXQpOwogICAgIC8vIENvcHkg
dGhlIGV4aXN0aW5nIGRhdGEgaW50byBhIG5ldyBidWZmZXIsIHNldCByZXN1bHQgdG8gcG9pbnQg
dG8gdGhlIGVuZCBvZiB0aGUgZXhpc3RpbmcgZGF0YS4KICAgICBSZWZQdHI8U3RyaW5nSW1wbD4g
YnVmZmVyID0gU3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFsaXplZChyZXF1aXJlZExlbmd0aCwg
bV9idWZmZXJDaGFyYWN0ZXJzOCk7Ci0gICAgbWVtY3B5KG1fYnVmZmVyQ2hhcmFjdGVyczgsIGN1
cnJlbnRDaGFyYWN0ZXJzLCBzdGF0aWNfY2FzdDxzaXplX3Q+KG1fbGVuZ3RoKSAqIHNpemVvZihM
Q2hhcikpOyAvLyBUaGlzIGNhbid0IG92ZXJmbG93LgorICAgIG1lbWNweShtX2J1ZmZlckNoYXJh
Y3RlcnM4LCBjdXJyZW50Q2hhcmFjdGVycywgKENoZWNrZWQ8c2l6ZV90PihtX2xlbmd0aCkgKiBz
aXplb2YoTENoYXIpKS51bnNhZmVHZXQoKSk7IC8vIFRoaXMgY2FuJ3Qgb3ZlcmZsb3cuCiAgICAg
CiAgICAgLy8gVXBkYXRlIHRoZSBidWlsZGVyIHN0YXRlLgogICAgIG1fYnVmZmVyID0gYnVmZmVy
LnJlbGVhc2UoKTsKQEAgLTExMSwxMiArMTExLDEyIEBAIHZvaWQgU3RyaW5nQnVpbGRlcjo6YWxs
b2NhdGVCdWZmZXIoY29uc3QgTENoYXIqIGN1cnJlbnRDaGFyYWN0ZXJzLCB1bnNpZ25lZCByZXF1
CiAKIC8vIEFsbG9jYXRlIGEgbmV3IDE2IGJpdCBidWZmZXIsIGNvcHlpbmcgaW4gY3VycmVudENo
YXJhY3RlcnMgKHRoZXNlIG1heSBjb21lIGZyb20gZWl0aGVyIG1fc3RyaW5nCiAvLyBvciBtX2J1
ZmZlciwgIG5laXRoZXIgd2lsbCBiZSByZWFzc2lnbmVkIHVudGlsIHRoZSBjb3B5IGhhcyBjb21w
bGV0ZWQpLgotdm9pZCBTdHJpbmdCdWlsZGVyOjphbGxvY2F0ZUJ1ZmZlcihjb25zdCBVQ2hhciog
Y3VycmVudENoYXJhY3RlcnMsIHVuc2lnbmVkIHJlcXVpcmVkTGVuZ3RoKQordm9pZCBTdHJpbmdC
dWlsZGVyOjphbGxvY2F0ZUJ1ZmZlcihjb25zdCBVQ2hhciogY3VycmVudENoYXJhY3RlcnMsIHNp
emVfdCByZXF1aXJlZExlbmd0aCkKIHsKICAgICBBU1NFUlQoIW1faXM4Qml0KTsKICAgICAvLyBD
b3B5IHRoZSBleGlzdGluZyBkYXRhIGludG8gYSBuZXcgYnVmZmVyLCBzZXQgcmVzdWx0IHRvIHBv
aW50IHRvIHRoZSBlbmQgb2YgdGhlIGV4aXN0aW5nIGRhdGEuCiAgICAgUmVmUHRyPFN0cmluZ0lt
cGw+IGJ1ZmZlciA9IFN0cmluZ0ltcGw6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQocmVxdWlyZWRMZW5n
dGgsIG1fYnVmZmVyQ2hhcmFjdGVyczE2KTsKLSAgICBtZW1jcHkobV9idWZmZXJDaGFyYWN0ZXJz
MTYsIGN1cnJlbnRDaGFyYWN0ZXJzLCBzdGF0aWNfY2FzdDxzaXplX3Q+KG1fbGVuZ3RoKSAqIHNp
emVvZihVQ2hhcikpOyAvLyBUaGlzIGNhbid0IG92ZXJmbG93LgorICAgIG1lbWNweShtX2J1ZmZl
ckNoYXJhY3RlcnMxNiwgY3VycmVudENoYXJhY3RlcnMsIChDaGVja2VkPHNpemVfdD4obV9sZW5n
dGgpICogc2l6ZW9mKFVDaGFyKSkudW5zYWZlR2V0KCkpOyAvLyBUaGlzIGNhbid0IG92ZXJmbG93
LgogICAgIAogICAgIC8vIFVwZGF0ZSB0aGUgYnVpbGRlciBzdGF0ZS4KICAgICBtX2J1ZmZlciA9
IGJ1ZmZlci5yZWxlYXNlKCk7CkBAIC0xMjUsMTIgKzEyNSwxMiBAQCB2b2lkIFN0cmluZ0J1aWxk
ZXI6OmFsbG9jYXRlQnVmZmVyKGNvbnN0IFVDaGFyKiBjdXJyZW50Q2hhcmFjdGVycywgdW5zaWdu
ZWQgcmVxdQogCiAvLyBBbGxvY2F0ZSBhIG5ldyAxNiBiaXQgYnVmZmVyLCBjb3B5aW5nIGluIGN1
cnJlbnRDaGFyYWN0ZXJzICh3aGljaCBpcyA4IGJpdCBhbmQgbWF5IGNvbWUKIC8vIGZyb20gZWl0
aGVyIG1fc3RyaW5nIG9yIG1fYnVmZmVyLCBuZWl0aGVyIHdpbGwgYmUgcmVhc3NpZ25lZCB1bnRp
bCB0aGUgY29weSBoYXMgY29tcGxldGVkKS4KLXZvaWQgU3RyaW5nQnVpbGRlcjo6YWxsb2NhdGVC
dWZmZXJVcENvbnZlcnQoY29uc3QgTENoYXIqIGN1cnJlbnRDaGFyYWN0ZXJzLCB1bnNpZ25lZCBy
ZXF1aXJlZExlbmd0aCkKK3ZvaWQgU3RyaW5nQnVpbGRlcjo6YWxsb2NhdGVCdWZmZXJVcENvbnZl
cnQoY29uc3QgTENoYXIqIGN1cnJlbnRDaGFyYWN0ZXJzLCBzaXplX3QgcmVxdWlyZWRMZW5ndGgp
CiB7CiAgICAgQVNTRVJUKG1faXM4Qml0KTsKICAgICAvLyBDb3B5IHRoZSBleGlzdGluZyBkYXRh
IGludG8gYSBuZXcgYnVmZmVyLCBzZXQgcmVzdWx0IHRvIHBvaW50IHRvIHRoZSBlbmQgb2YgdGhl
IGV4aXN0aW5nIGRhdGEuCiAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IGJ1ZmZlciA9IFN0cmluZ0lt
cGw6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQocmVxdWlyZWRMZW5ndGgsIG1fYnVmZmVyQ2hhcmFjdGVy
czE2KTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9sZW5ndGg7ICsraSkKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoKCk7ICsraSkKICAgICAgICAgbV9idWZmZXJD
aGFyYWN0ZXJzMTZbaV0gPSBjdXJyZW50Q2hhcmFjdGVyc1tpXTsKICAgICAKICAgICBtX2lzOEJp
dCA9IGZhbHNlOwpAQCAtMTQxLDcgKzE0MSw3IEBAIHZvaWQgU3RyaW5nQnVpbGRlcjo6YWxsb2Nh
dGVCdWZmZXJVcENvbnZlcnQoY29uc3QgTENoYXIqIGN1cnJlbnRDaGFyYWN0ZXJzLCB1bnNpCiB9
CiAKIHRlbXBsYXRlIDw+Ci12b2lkIFN0cmluZ0J1aWxkZXI6OnJlYWxsb2NhdGVCdWZmZXI8TENo
YXI+KHVuc2lnbmVkIHJlcXVpcmVkTGVuZ3RoKQordm9pZCBTdHJpbmdCdWlsZGVyOjpyZWFsbG9j
YXRlQnVmZmVyPExDaGFyPihzaXplX3QgcmVxdWlyZWRMZW5ndGgpCiB7CiAgICAgLy8gSWYgdGhl
IGJ1ZmZlciBoYXMgb25seSBvbmUgcmVmIChieSB0aGlzIFN0cmluZ0J1aWxkZXIpLCByZWFsbG9j
YXRlIGl0LAogICAgIC8vIG90aGVyd2lzZSBmYWxsIGJhY2sgdG8gImFsbG9jYXRlIGFuZCBjb3B5
IiBtZXRob2QuCkBAIC0xNTcsNyArMTU3LDcgQEAgdm9pZCBTdHJpbmdCdWlsZGVyOjpyZWFsbG9j
YXRlQnVmZmVyPExDaGFyPih1bnNpZ25lZCByZXF1aXJlZExlbmd0aCkKIH0KIAogdGVtcGxhdGUg
PD4KLXZvaWQgU3RyaW5nQnVpbGRlcjo6cmVhbGxvY2F0ZUJ1ZmZlcjxVQ2hhcj4odW5zaWduZWQg
cmVxdWlyZWRMZW5ndGgpCit2b2lkIFN0cmluZ0J1aWxkZXI6OnJlYWxsb2NhdGVCdWZmZXI8VUNo
YXI+KHNpemVfdCByZXF1aXJlZExlbmd0aCkKIHsKICAgICAvLyBJZiB0aGUgYnVmZmVyIGhhcyBv
bmx5IG9uZSByZWYgKGJ5IHRoaXMgU3RyaW5nQnVpbGRlciksIHJlYWxsb2NhdGUgaXQsCiAgICAg
Ly8gb3RoZXJ3aXNlIGZhbGwgYmFjayB0byAiYWxsb2NhdGUgYW5kIGNvcHkiIG1ldGhvZC4KQEAg
LTE4Myw3ICsxODMsNyBAQCB2b2lkIFN0cmluZ0J1aWxkZXI6OnJlc2VydmVDYXBhY2l0eSh1bnNp
Z25lZCBuZXdDYXBhY2l0eSkKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIEdy
b3cgdGhlIHN0cmluZywgaWYgbmVjZXNzYXJ5LgotICAgICAgICBpZiAobmV3Q2FwYWNpdHkgPiBt
X2xlbmd0aCkgeworICAgICAgICBpZiAobmV3Q2FwYWNpdHkgPiBsZW5ndGgoKSkgewogICAgICAg
ICAgICAgaWYgKCFtX2xlbmd0aCkgewogICAgICAgICAgICAgICAgIExDaGFyKiBudWxsUGxhY2Vo
b2xkZXIgPSAwOwogICAgICAgICAgICAgICAgIGFsbG9jYXRlQnVmZmVyKG51bGxQbGFjZWhvbGRl
ciwgbmV3Q2FwYWNpdHkpOwpAQCAtMTk4LDUwICsxOTgsNDggQEAgdm9pZCBTdHJpbmdCdWlsZGVy
OjpyZXNlcnZlQ2FwYWNpdHkodW5zaWduZWQgbmV3Q2FwYWNpdHkpCiAvLyBNYWtlICdsZW5ndGgn
IGFkZGl0aW9uYWwgY2FwYWNpdHkgYmUgYXZhaWxhYmxlIGluIG1fYnVmZmVyLCB1cGRhdGUgbV9z
dHJpbmcgJiBtX2xlbmd0aCwKIC8vIHJldHVybiBhIHBvaW50ZXIgdG8gdGhlIG5ld2x5IGFsbG9j
YXRlZCBzdG9yYWdlLgogdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJUeXBlPgotQUxXQVlTX0lOTElO
RSBDaGFyVHlwZSogU3RyaW5nQnVpbGRlcjo6YXBwZW5kVW5pbml0aWFsaXplZCh1bnNpZ25lZCBs
ZW5ndGgpCitBTFdBWVNfSU5MSU5FIENoYXJUeXBlKiBTdHJpbmdCdWlsZGVyOjphcHBlbmRVbmlu
aXRpYWxpemVkKHNpemVfdCBsZW5ndGgpCiB7CiAgICAgQVNTRVJUKGxlbmd0aCk7CiAKICAgICAv
LyBDYWxjdWxhdGUgdGhlIG5ldyBzaXplIG9mIHRoZSBidWlsZGVyIGFmdGVyIGFwcGVuZGluZy4K
LSAgICB1bnNpZ25lZCByZXF1aXJlZExlbmd0aCA9IGxlbmd0aCArIG1fbGVuZ3RoOwotICAgIGlm
IChyZXF1aXJlZExlbmd0aCA8IGxlbmd0aCkKLSAgICAgICAgQ1JBU0goKTsKKyAgICBDaGVja2Vk
PHVuc2lnbmVkPiByZXF1aXJlZExlbmd0aCA9IGxlbmd0aCArIG1fbGVuZ3RoOwogCi0gICAgaWYg
KChtX2J1ZmZlcikgJiYgKHJlcXVpcmVkTGVuZ3RoIDw9IG1fYnVmZmVyLT5sZW5ndGgoKSkpIHsK
KyAgICBpZiAoKG1fYnVmZmVyKSAmJiAocmVxdWlyZWRMZW5ndGgudW5zYWZlR2V0KCkgPD0gbV9i
dWZmZXItPmxlbmd0aCgpKSkgewogICAgICAgICAvLyBJZiB0aGUgYnVmZmVyIGlzIHZhbGlkIGl0
IG11c3QgYmUgYXQgbGVhc3QgYXMgbG9uZyBhcyB0aGUgY3VycmVudCBidWlsZGVyIGNvbnRlbnRz
IQotICAgICAgICBBU1NFUlQobV9idWZmZXItPmxlbmd0aCgpID49IG1fbGVuZ3RoKTsKLSAgICAg
ICAgdW5zaWduZWQgY3VycmVudExlbmd0aCA9IG1fbGVuZ3RoOworICAgICAgICBBU1NFUlQobV9i
dWZmZXItPmxlbmd0aCgpID49IG1fbGVuZ3RoLnVuc2FmZUdldCgpKTsKKyAgICAgICAgdW5zaWdu
ZWQgY3VycmVudExlbmd0aCA9IG1fbGVuZ3RoLnVuc2FmZUdldCgpOwogICAgICAgICBtX3N0cmlu
ZyA9IFN0cmluZygpOwogICAgICAgICBtX2xlbmd0aCA9IHJlcXVpcmVkTGVuZ3RoOwogICAgICAg
ICByZXR1cm4gZ2V0QnVmZmVyQ2hhcmFjdGVyczxDaGFyVHlwZT4oKSArIGN1cnJlbnRMZW5ndGg7
CiAgICAgfQogICAgIAotICAgIHJldHVybiBhcHBlbmRVbmluaXRpYWxpemVkU2xvdzxDaGFyVHlw
ZT4ocmVxdWlyZWRMZW5ndGgpOworICAgIHJldHVybiBhcHBlbmRVbmluaXRpYWxpemVkU2xvdzxD
aGFyVHlwZT4ocmVxdWlyZWRMZW5ndGgudW5zYWZlR2V0KCkpOwogfQogCiAvLyBNYWtlICdsZW5n
dGgnIGFkZGl0aW9uYWwgY2FwYWNpdHkgYmUgYXZhaWxhYmxlIGluIG1fYnVmZmVyLCB1cGRhdGUg
bV9zdHJpbmcgJiBtX2xlbmd0aCwKIC8vIHJldHVybiBhIHBvaW50ZXIgdG8gdGhlIG5ld2x5IGFs
bG9jYXRlZCBzdG9yYWdlLgogdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJUeXBlPgotQ2hhclR5cGUq
IFN0cmluZ0J1aWxkZXI6OmFwcGVuZFVuaW5pdGlhbGl6ZWRTbG93KHVuc2lnbmVkIHJlcXVpcmVk
TGVuZ3RoKQorQ2hhclR5cGUqIFN0cmluZ0J1aWxkZXI6OmFwcGVuZFVuaW5pdGlhbGl6ZWRTbG93
KHNpemVfdCByZXF1aXJlZExlbmd0aCkKIHsKICAgICBBU1NFUlQocmVxdWlyZWRMZW5ndGgpOwog
CiAgICAgaWYgKG1fYnVmZmVyKSB7CiAgICAgICAgIC8vIElmIHRoZSBidWZmZXIgaXMgdmFsaWQg
aXQgbXVzdCBiZSBhdCBsZWFzdCBhcyBsb25nIGFzIHRoZSBjdXJyZW50IGJ1aWxkZXIgY29udGVu
dHMhCi0gICAgICAgIEFTU0VSVChtX2J1ZmZlci0+bGVuZ3RoKCkgPj0gbV9sZW5ndGgpOworICAg
ICAgICBBU1NFUlQobV9idWZmZXItPmxlbmd0aCgpID49IGxlbmd0aCgpKTsKICAgICAgICAgCiAg
ICAgICAgIHJlYWxsb2NhdGVCdWZmZXI8Q2hhclR5cGU+KGV4cGFuZGVkQ2FwYWNpdHkoY2FwYWNp
dHkoKSwgcmVxdWlyZWRMZW5ndGgpKTsKICAgICB9IGVsc2UgewotICAgICAgICBBU1NFUlQobV9z
dHJpbmcubGVuZ3RoKCkgPT0gbV9sZW5ndGgpOworICAgICAgICBBU1NFUlQobV9zdHJpbmcubGVu
Z3RoKCkgPT0gbGVuZ3RoKCkpOwogICAgICAgICBhbGxvY2F0ZUJ1ZmZlcihtX2xlbmd0aCA/IG1f
c3RyaW5nLmNoYXJhY3RlcnM8Q2hhclR5cGU+KCkgOiAwLCBleHBhbmRlZENhcGFjaXR5KGNhcGFj
aXR5KCksIHJlcXVpcmVkTGVuZ3RoKSk7CiAgICAgfQogICAgIAotICAgIENoYXJUeXBlKiByZXN1
bHQgPSBnZXRCdWZmZXJDaGFyYWN0ZXJzPENoYXJUeXBlPigpICsgbV9sZW5ndGg7CisgICAgQ2hh
clR5cGUqIHJlc3VsdCA9IGdldEJ1ZmZlckNoYXJhY3RlcnM8Q2hhclR5cGU+KCkgKyBsZW5ndGgo
KTsKICAgICBtX2xlbmd0aCA9IHJlcXVpcmVkTGVuZ3RoOwogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKLXZvaWQgU3RyaW5nQnVpbGRlcjo6YXBwZW5kKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1
bnNpZ25lZCBsZW5ndGgpCit2b2lkIFN0cmluZ0J1aWxkZXI6OmFwcGVuZChjb25zdCBVQ2hhciog
Y2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkKIHsKICAgICBpZiAoIWxlbmd0aCkKICAgICAgICAg
cmV0dXJuOwpAQCAtMjU3LDE4ICsyNTUsMTYgQEAgdm9pZCBTdHJpbmdCdWlsZGVyOjphcHBlbmQo
Y29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKICAgICAgICAgfQogCiAg
ICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgbmV3IHNpemUgb2YgdGhlIGJ1aWxkZXIgYWZ0ZXIgYXBw
ZW5kaW5nLgotICAgICAgICB1bnNpZ25lZCByZXF1aXJlZExlbmd0aCA9IGxlbmd0aCArIG1fbGVu
Z3RoOwotICAgICAgICBpZiAocmVxdWlyZWRMZW5ndGggPCBsZW5ndGgpCi0gICAgICAgICAgICBD
UkFTSCgpOwotICAgICAgICAKKyAgICAgICAgQ2hlY2tlZDxzaXplX3Q+IHJlcXVpcmVkTGVuZ3Ro
ID0gbGVuZ3RoICsgbV9sZW5ndGg7CisKICAgICAgICAgaWYgKG1fYnVmZmVyKSB7CiAgICAgICAg
ICAgICAvLyBJZiB0aGUgYnVmZmVyIGlzIHZhbGlkIGl0IG11c3QgYmUgYXQgbGVhc3QgYXMgbG9u
ZyBhcyB0aGUgY3VycmVudCBidWlsZGVyIGNvbnRlbnRzIQotICAgICAgICAgICAgQVNTRVJUKG1f
YnVmZmVyLT5sZW5ndGgoKSA+PSBtX2xlbmd0aCk7CisgICAgICAgICAgICBBU1NFUlQobV9idWZm
ZXItPmxlbmd0aCgpID49IG1fbGVuZ3RoLnVuc2FmZUdldCgpKTsKICAgICAgICAgICAgIAotICAg
ICAgICAgICAgYWxsb2NhdGVCdWZmZXJVcENvbnZlcnQobV9idWZmZXItPmNoYXJhY3RlcnM4KCks
IGV4cGFuZGVkQ2FwYWNpdHkoY2FwYWNpdHkoKSwgcmVxdWlyZWRMZW5ndGgpKTsKKyAgICAgICAg
ICAgIGFsbG9jYXRlQnVmZmVyVXBDb252ZXJ0KG1fYnVmZmVyLT5jaGFyYWN0ZXJzOCgpLCBleHBh
bmRlZENhcGFjaXR5KGNhcGFjaXR5KCksIHJlcXVpcmVkTGVuZ3RoLnVuc2FmZUdldCgpKSk7CiAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQobV9zdHJpbmcubGVuZ3RoKCkgPT0g
bV9sZW5ndGgpOwotICAgICAgICAgICAgYWxsb2NhdGVCdWZmZXJVcENvbnZlcnQobV9zdHJpbmcu
aXNOdWxsKCkgPyAwIDogbV9zdHJpbmcuY2hhcmFjdGVyczgoKSwgZXhwYW5kZWRDYXBhY2l0eShj
YXBhY2l0eSgpLCByZXF1aXJlZExlbmd0aCkpOworICAgICAgICAgICAgQVNTRVJUKG1fc3RyaW5n
Lmxlbmd0aCgpID09IG1fbGVuZ3RoLnVuc2FmZUdldCgpKTsKKyAgICAgICAgICAgIGFsbG9jYXRl
QnVmZmVyVXBDb252ZXJ0KG1fc3RyaW5nLmlzTnVsbCgpID8gMCA6IG1fc3RyaW5nLmNoYXJhY3Rl
cnM4KCksIGV4cGFuZGVkQ2FwYWNpdHkoY2FwYWNpdHkoKSwgcmVxdWlyZWRMZW5ndGgudW5zYWZl
R2V0KCkpKTsKICAgICAgICAgfQogCiAgICAgICAgIG1lbWNweShtX2J1ZmZlckNoYXJhY3RlcnMx
NiArIG1fbGVuZ3RoLCBjaGFyYWN0ZXJzLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGxlbmd0aCkgKiBz
aXplb2YoVUNoYXIpKTsgICAgICAgIApAQCAtMjc3LDcgKzI3Myw3IEBAIHZvaWQgU3RyaW5nQnVp
bGRlcjo6YXBwZW5kKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCiAg
ICAgICAgIG1lbWNweShhcHBlbmRVbmluaXRpYWxpemVkPFVDaGFyPihsZW5ndGgpLCBjaGFyYWN0
ZXJzLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGxlbmd0aCkgKiBzaXplb2YoVUNoYXIpKTsKIH0KIAot
dm9pZCBTdHJpbmdCdWlsZGVyOjphcHBlbmQoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHVuc2ln
bmVkIGxlbmd0aCkKK3ZvaWQgU3RyaW5nQnVpbGRlcjo6YXBwZW5kKGNvbnN0IExDaGFyKiBjaGFy
YWN0ZXJzLCBzaXplX3QgbGVuZ3RoKQogewogICAgIGlmICghbGVuZ3RoKQogICAgICAgICByZXR1
cm47CkBAIC0zNTEsMTYgKzM0NywxNiBAQCB2b2lkIFN0cmluZ0J1aWxkZXI6OmFwcGVuZEZpeGVk
V2lkdGhOdW1iZXIoZG91YmxlIG51bWJlciwgdW5zaWduZWQgZGVjaW1hbFBsYWNlcwogYm9vbCBT
dHJpbmdCdWlsZGVyOjpjYW5TaHJpbmsoKSBjb25zdAogewogICAgIC8vIE9ubHkgc2hyaW5rIHRo
ZSBidWZmZXIgaWYgaXQncyBsZXNzIHRoYW4gODAlIGZ1bGwuIE5lZWQgdG8gdHVuZSB0aGlzIGhl
dXJpc3RpYyEKLSAgICByZXR1cm4gbV9idWZmZXIgJiYgbV9idWZmZXItPmxlbmd0aCgpID4gKG1f
bGVuZ3RoICsgKG1fbGVuZ3RoID4+IDIpKTsKKyAgICByZXR1cm4gbV9idWZmZXIgJiYgbV9idWZm
ZXItPmxlbmd0aCgpID4gKG1fbGVuZ3RoICsgKG1fbGVuZ3RoLnVuc2FmZUdldCgpID4+IDIpKS51
bnNhZmVHZXQoKTsKIH0KIAogdm9pZCBTdHJpbmdCdWlsZGVyOjpzaHJpbmtUb0ZpdCgpCiB7CiAg
ICAgaWYgKGNhblNocmluaygpKSB7CiAgICAgICAgIGlmIChtX2lzOEJpdCkKLSAgICAgICAgICAg
IHJlYWxsb2NhdGVCdWZmZXI8TENoYXI+KG1fbGVuZ3RoKTsKKyAgICAgICAgICAgIHJlYWxsb2Nh
dGVCdWZmZXI8TENoYXI+KGxlbmd0aCgpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVh
bGxvY2F0ZUJ1ZmZlcjxVQ2hhcj4obV9sZW5ndGgpOworICAgICAgICAgICAgcmVhbGxvY2F0ZUJ1
ZmZlcjxVQ2hhcj4obGVuZ3RoKCkpOwogICAgICAgICBtX3N0cmluZyA9IG1fYnVmZmVyLnJlbGVh
c2UoKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1
aWxkZXIuaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5oCmluZGV4IDczOTk4
ODUzNzA3OWEyYmUxOTAyZTQ2YmU5ZmQwNTU1YTRmYWRjZTkuLjNkYjM1NTYwNTM3Y2U1NDRjN2M1
MDMwYzdhMGUzNjUxMjdhMzA1ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3Ry
aW5nQnVpbGRlci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5oCkBA
IC00NiwxMCArNDYsMTAgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgdm9pZCBhcHBlbmQoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCk7Ci0gICAgV1RGX0VY
UE9SVF9QUklWQVRFIHZvaWQgYXBwZW5kKGNvbnN0IExDaGFyKiwgdW5zaWduZWQpOworICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSB2b2lkIGFwcGVuZChjb25zdCBVQ2hhciosIHNpemVfdCk7CisgICAg
V1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgYXBwZW5kKGNvbnN0IExDaGFyKiwgc2l6ZV90KTsKIAot
ICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhcHBlbmQoY29uc3QgY2hhciogY2hhcmFjdGVycywgdW5z
aWduZWQgbGVuZ3RoKSB7IGFwcGVuZChyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oY2hh
cmFjdGVycyksIGxlbmd0aCk7IH0KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYXBwZW5kKGNvbnN0
IGNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpIHsgYXBwZW5kKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgTENoYXIqPihjaGFyYWN0ZXJzKSwgbGVuZ3RoKTsgfQogCiAgICAgdm9pZCBhcHBl
bmQoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiAgICAgewpAQCAtNTgsNyArNTgsNyBAQCBwdWJsaWM6
CiAKICAgICAgICAgLy8gSWYgd2UncmUgYXBwZW5kaW5nIHRvIGFuIGVtcHR5IHN0cmluZywgYW5k
IHRoZXJlIGlzIG5vdCBhIGJ1ZmZlciAocmVzZXJ2ZUNhcGFjaXR5IGhhcyBub3QgYmVlbiBjYWxs
ZWQpCiAgICAgICAgIC8vIHRoZW4ganVzdCByZXRhaW4gdGhlIHN0cmluZy4KLSAgICAgICAgaWYg
KCFtX2xlbmd0aCAmJiAhbV9idWZmZXIpIHsKKyAgICAgICAgaWYgKCFtX2xlbmd0aC51bnNhZmVH
ZXQoKSAmJiAhbV9idWZmZXIpIHsKICAgICAgICAgICAgIG1fc3RyaW5nID0gc3RyaW5nOwogICAg
ICAgICAgICAgbV9sZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7CiAgICAgICAgICAgICBtX2lzOEJp
dCA9IG1fc3RyaW5nLmlzOEJpdCgpOwpAQCAtODUsOSArODUsOSBAQCBwdWJsaWM6CiAgICAgICAg
IH0KIAogICAgICAgICBpZiAob3RoZXIuaXM4Qml0KCkpCi0gICAgICAgICAgICBhcHBlbmQob3Ro
ZXIuY2hhcmFjdGVyczgoKSwgb3RoZXIubV9sZW5ndGgpOworICAgICAgICAgICAgYXBwZW5kKG90
aGVyLmNoYXJhY3RlcnM4KCksIG90aGVyLm1fbGVuZ3RoLnVuc2FmZUdldCgpKTsKICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgYXBwZW5kKG90aGVyLmNoYXJhY3RlcnMxNigpLCBvdGhlci5tX2xl
bmd0aCk7CisgICAgICAgICAgICBhcHBlbmQob3RoZXIuY2hhcmFjdGVyczE2KCksIG90aGVyLm1f
bGVuZ3RoLnVuc2FmZUdldCgpKTsKICAgICB9CiAKICAgICB2b2lkIGFwcGVuZChTdHJpbmdWaWV3
IHN0cmluZ1ZpZXcpCkBAIC0xMjAsMTQgKzEyMCwxNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGFw
cGVuZChVQ2hhciBjKQogICAgIHsKLSAgICAgICAgaWYgKG1fYnVmZmVyICYmIG1fbGVuZ3RoIDwg
bV9idWZmZXItPmxlbmd0aCgpICYmIG1fc3RyaW5nLmlzTnVsbCgpKSB7CisgICAgICAgIGlmICht
X2J1ZmZlciAmJiBtX2xlbmd0aC51bnNhZmVHZXQoKSA8IG1fYnVmZmVyLT5sZW5ndGgoKSAmJiBt
X3N0cmluZy5pc051bGwoKSkgewogICAgICAgICAgICAgaWYgKCFtX2lzOEJpdCkgewotICAgICAg
ICAgICAgICAgIG1fYnVmZmVyQ2hhcmFjdGVyczE2W21fbGVuZ3RoKytdID0gYzsKKyAgICAgICAg
ICAgICAgICBtX2J1ZmZlckNoYXJhY3RlcnMxNlttX2xlbmd0aC51bnNhZmVHZXQoKV0gPSBjOwor
ICAgICAgICAgICAgICAgIG1fbGVuZ3RoKys7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoIShjICYgfjB4ZmYpKSB7Ci0gICAgICAgICAg
ICAgICAgbV9idWZmZXJDaGFyYWN0ZXJzOFttX2xlbmd0aCsrXSA9IHN0YXRpY19jYXN0PExDaGFy
PihjKTsKKyAgICAgICAgICAgICAgICBtX2J1ZmZlckNoYXJhY3RlcnM4W21fbGVuZ3RoLnVuc2Fm
ZUdldCgpXSA9IHN0YXRpY19jYXN0PExDaGFyPihjKTsKKyAgICAgICAgICAgICAgICBtX2xlbmd0
aCsrOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpA
QCAtMTM2LDExICsxMzgsMTQgQEAgcHVibGljOgogCiAgICAgdm9pZCBhcHBlbmQoTENoYXIgYykK
ICAgICB7Ci0gICAgICAgIGlmIChtX2J1ZmZlciAmJiBtX2xlbmd0aCA8IG1fYnVmZmVyLT5sZW5n
dGgoKSAmJiBtX3N0cmluZy5pc051bGwoKSkgewotICAgICAgICAgICAgaWYgKG1faXM4Qml0KQot
ICAgICAgICAgICAgICAgIG1fYnVmZmVyQ2hhcmFjdGVyczhbbV9sZW5ndGgrK10gPSBjOwotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1fYnVmZmVyQ2hhcmFjdGVyczE2W21fbGVu
Z3RoKytdID0gYzsKKyAgICAgICAgaWYgKG1fYnVmZmVyICYmIG1fbGVuZ3RoLnVuc2FmZUdldCgp
IDwgbV9idWZmZXItPmxlbmd0aCgpICYmIG1fc3RyaW5nLmlzTnVsbCgpKSB7CisgICAgICAgICAg
ICBpZiAobV9pczhCaXQpIHsKKyAgICAgICAgICAgICAgICBtX2J1ZmZlckNoYXJhY3RlcnM4W21f
bGVuZ3RoLnVuc2FmZUdldCgpXSA9IGM7CisgICAgICAgICAgICAgICAgbV9sZW5ndGgrKzsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbV9idWZmZXJDaGFyYWN0ZXJzMTZb
bV9sZW5ndGgudW5zYWZlR2V0KCldID0gYzsKKyAgICAgICAgICAgICAgICBtX2xlbmd0aCsrOwor
ICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGFwcGVuZCgmYywgMSk7
CiAgICAgfQpAQCAtMjA0LDEyICsyMDksMTIgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJu
IEF0b21pY1N0cmluZyhtX3N0cmluZyk7CiAKICAgICAgICAgQVNTRVJUKG1fYnVmZmVyKTsKLSAg
ICAgICAgcmV0dXJuIEF0b21pY1N0cmluZyhtX2J1ZmZlci5nZXQoKSwgMCwgbV9sZW5ndGgpOwor
ICAgICAgICByZXR1cm4gQXRvbWljU3RyaW5nKG1fYnVmZmVyLmdldCgpLCAwLCBtX2xlbmd0aC51
bnNhZmVHZXQoKSk7CiAgICAgfQogCiAgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QKICAgICB7
Ci0gICAgICAgIHJldHVybiBtX2xlbmd0aDsKKyAgICAgICAgcmV0dXJuIG1fbGVuZ3RoLnVuc2Fm
ZUdldCgpOwogICAgIH0KIAogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFtX2xl
bmd0aDsgfQpAQCAtMjE4LDcgKzIyMyw3IEBAIHB1YmxpYzoKIAogICAgIHVuc2lnbmVkIGNhcGFj
aXR5KCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2J1ZmZlciA/IG1fYnVmZmVyLT5s
ZW5ndGgoKSA6IG1fbGVuZ3RoOworICAgICAgICByZXR1cm4gbV9idWZmZXIgPyBtX2J1ZmZlci0+
bGVuZ3RoKCkgOiBtX2xlbmd0aC51bnNhZmVHZXQoKTsKICAgICB9CiAKICAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgdm9pZCByZXNpemUodW5zaWduZWQgbmV3U2l6ZSk7CkBAIC0yMjksNyArMjM0LDcg
QEAgcHVibGljOgogCiAgICAgVUNoYXIgb3BlcmF0b3JbXSh1bnNpZ25lZCBpKSBjb25zdAogICAg
IHsKLSAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaSA8IG1fbGVuZ3Ro
KTsKKyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaSA8IG1fbGVuZ3Ro
LnVuc2FmZUdldCgpKTsKICAgICAgICAgaWYgKG1faXM4Qml0KQogICAgICAgICAgICAgcmV0dXJu
IGNoYXJhY3RlcnM4KClbaV07CiAgICAgICAgIHJldHVybiBjaGFyYWN0ZXJzMTYoKVtpXTsKQEAg
LTI2NCwxMCArMjY5LDEwIEBAIHB1YmxpYzoKICAgICAgICAgaWYgKCFtX3N0cmluZy5pc051bGwo
KSkKICAgICAgICAgICAgIHJldHVybiBtX3N0cmluZy5kZXByZWNhdGVkQ2hhcmFjdGVycygpOwog
ICAgICAgICBBU1NFUlQobV9idWZmZXIpOwotICAgICAgICBpZiAobV9idWZmZXItPmhhczE2Qml0
U2hhZG93KCkgJiYgbV92YWxpZDE2Qml0U2hhZG93TGVuZ3RoIDwgbV9sZW5ndGgpCi0gICAgICAg
ICAgICBtX2J1ZmZlci0+dXBjb252ZXJ0Q2hhcmFjdGVycyhtX3ZhbGlkMTZCaXRTaGFkb3dMZW5n
dGgsIG1fbGVuZ3RoKTsKKyAgICAgICAgaWYgKG1fYnVmZmVyLT5oYXMxNkJpdFNoYWRvdygpICYm
IG1fdmFsaWQxNkJpdFNoYWRvd0xlbmd0aCA8IG1fbGVuZ3RoLnVuc2FmZUdldCgpKQorICAgICAg
ICAgICAgbV9idWZmZXItPnVwY29udmVydENoYXJhY3RlcnMobV92YWxpZDE2Qml0U2hhZG93TGVu
Z3RoLCBtX2xlbmd0aC51bnNhZmVHZXQoKSk7CiAKLSAgICAgICAgbV92YWxpZDE2Qml0U2hhZG93
TGVuZ3RoID0gbV9sZW5ndGg7CisgICAgICAgIG1fdmFsaWQxNkJpdFNoYWRvd0xlbmd0aCA9IG1f
bGVuZ3RoLnVuc2FmZUdldCgpOwogCiAgICAgICAgIHJldHVybiBtX2J1ZmZlci0+ZGVwcmVjYXRl
ZENoYXJhY3RlcnMoKTsKICAgICB9CkBAIC0yOTUsMjAgKzMwMCwyMCBAQCBwdWJsaWM6CiAgICAg
fQogCiBwcml2YXRlOgotICAgIHZvaWQgYWxsb2NhdGVCdWZmZXIoY29uc3QgTENoYXIqIGN1cnJl
bnRDaGFyYWN0ZXJzLCB1bnNpZ25lZCByZXF1aXJlZExlbmd0aCk7Ci0gICAgdm9pZCBhbGxvY2F0
ZUJ1ZmZlcihjb25zdCBVQ2hhciogY3VycmVudENoYXJhY3RlcnMsIHVuc2lnbmVkIHJlcXVpcmVk
TGVuZ3RoKTsKLSAgICB2b2lkIGFsbG9jYXRlQnVmZmVyVXBDb252ZXJ0KGNvbnN0IExDaGFyKiBj
dXJyZW50Q2hhcmFjdGVycywgdW5zaWduZWQgcmVxdWlyZWRMZW5ndGgpOworICAgIHZvaWQgYWxs
b2NhdGVCdWZmZXIoY29uc3QgTENoYXIqIGN1cnJlbnRDaGFyYWN0ZXJzLCBzaXplX3QgcmVxdWly
ZWRMZW5ndGgpOworICAgIHZvaWQgYWxsb2NhdGVCdWZmZXIoY29uc3QgVUNoYXIqIGN1cnJlbnRD
aGFyYWN0ZXJzLCBzaXplX3QgcmVxdWlyZWRMZW5ndGgpOworICAgIHZvaWQgYWxsb2NhdGVCdWZm
ZXJVcENvbnZlcnQoY29uc3QgTENoYXIqIGN1cnJlbnRDaGFyYWN0ZXJzLCBzaXplX3QgcmVxdWly
ZWRMZW5ndGgpOwogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyVHlwZT4KLSAgICB2b2lkIHJl
YWxsb2NhdGVCdWZmZXIodW5zaWduZWQgcmVxdWlyZWRMZW5ndGgpOworICAgIHZvaWQgcmVhbGxv
Y2F0ZUJ1ZmZlcihzaXplX3QgcmVxdWlyZWRMZW5ndGgpOwogICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBDaGFyVHlwZT4KLSAgICBBTFdBWVNfSU5MSU5FIENoYXJUeXBlKiBhcHBlbmRVbmluaXRpYWxp
emVkKHVuc2lnbmVkIGxlbmd0aCk7CisgICAgQUxXQVlTX0lOTElORSBDaGFyVHlwZSogYXBwZW5k
VW5pbml0aWFsaXplZChzaXplX3QgbGVuZ3RoKTsKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hh
clR5cGU+Ci0gICAgQ2hhclR5cGUqIGFwcGVuZFVuaW5pdGlhbGl6ZWRTbG93KHVuc2lnbmVkIGxl
bmd0aCk7CisgICAgQ2hhclR5cGUqIGFwcGVuZFVuaW5pdGlhbGl6ZWRTbG93KHNpemVfdCBsZW5n
dGgpOwogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyVHlwZT4KICAgICBBTFdBWVNfSU5MSU5F
IENoYXJUeXBlICogZ2V0QnVmZmVyQ2hhcmFjdGVycygpOwogICAgIFdURl9FWFBPUlRfUFJJVkFU
RSB2b2lkIHJlaWZ5U3RyaW5nKCkgY29uc3Q7CiAKLSAgICB1bnNpZ25lZCBtX2xlbmd0aDsKKyAg
ICBDaGVja2VkPHVuc2lnbmVkPiBtX2xlbmd0aDsKICAgICBtdXRhYmxlIFN0cmluZyBtX3N0cmlu
ZzsKICAgICBSZWZQdHI8U3RyaW5nSW1wbD4gbV9idWZmZXI7CiAgICAgYm9vbCBtX2lzOEJpdDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUuaCBiL1Nv
dXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUuaAppbmRleCBiYWVjY2MxZDJjMTA4
MDViNGNlZGUwMmZmMTQ1ZGMxNjgyNjM2ZGQwLi5mYmU4YjEzMTkyNDg2NTA0YmVmZGUyODc2ZWM0
YWZhODNlM2U4ZDU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0NvbmNh
dGVuYXRlLmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oCkBA
IC0xMTksNyArMTE5LDcgQEAgY2xhc3MgU3RyaW5nVHlwZUFkYXB0ZXI8Y2hhcio+IHsKIHB1Ymxp
YzoKICAgICBTdHJpbmdUeXBlQWRhcHRlcjxjaGFyKj4oY2hhciogYnVmZmVyKQogICAgICAgICA6
IG1fYnVmZmVyKGJ1ZmZlcikKLSAgICAgICAgLCBtX2xlbmd0aChzdHJsZW4oYnVmZmVyKSkKKyAg
ICAgICAgLCBtX2xlbmd0aChjaGVja2VkX2Nhc3Q8dWludDMyX3Q+KHN0cmxlbihidWZmZXIpKSkK
ICAgICB7CiAgICAgfQogCkBAIC0xNTAsOCArMTUwLDggQEAgdGVtcGxhdGU8PgogY2xhc3MgU3Ry
aW5nVHlwZUFkYXB0ZXI8TENoYXIqPiB7CiBwdWJsaWM6CiAgICAgU3RyaW5nVHlwZUFkYXB0ZXI8
TENoYXIqPihMQ2hhciogYnVmZmVyKQotICAgIDogbV9idWZmZXIoYnVmZmVyKQotICAgICwgbV9s
ZW5ndGgoc3RybGVuKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGJ1ZmZlcikpKQorICAgICAgICA6
IG1fYnVmZmVyKGJ1ZmZlcikKKyAgICAgICAgLCBtX2xlbmd0aChjaGVja2VkX2Nhc3Q8dWludDMy
X3Q+KHN0cmxlbihyZWludGVycHJldF9jYXN0PGNoYXIqPihidWZmZXIpKSkpCiAgICAgewogICAg
IH0KIApAQCAtMTg0LDEwICsxODQsNyBAQCBwdWJsaWM6CiAgICAgICAgIHdoaWxlIChtX2J1ZmZl
cltsZW5dICE9IFVDaGFyKDApKQogICAgICAgICAgICAgKytsZW47CiAKLSAgICAgICAgaWYgKGxl
biA+IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKLSAgICAgICAgICAgIENS
QVNIKCk7Ci0KLSAgICAgICAgbV9sZW5ndGggPSBsZW47CisgICAgICAgIG1fbGVuZ3RoID0gY2hl
Y2tlZF9jYXN0PHVpbnQzMl90PihsZW4pOwogICAgIH0KIAogICAgIHVuc2lnbmVkIGxlbmd0aCgp
IHsgcmV0dXJuIG1fbGVuZ3RoOyB9CkBAIC0yMTQsNyArMjExLDcgQEAgY2xhc3MgU3RyaW5nVHlw
ZUFkYXB0ZXI8Y29uc3QgY2hhcio+IHsKIHB1YmxpYzoKICAgICBTdHJpbmdUeXBlQWRhcHRlcjxj
b25zdCBjaGFyKj4oY29uc3QgY2hhciogYnVmZmVyKQogICAgICAgICA6IG1fYnVmZmVyKGJ1ZmZl
cikKLSAgICAgICAgLCBtX2xlbmd0aChzdHJsZW4oYnVmZmVyKSkKKyAgICAgICAgLCBtX2xlbmd0
aChjaGVja2VkX2Nhc3Q8dWludDMyX3Q+KHN0cmxlbihidWZmZXIpKSkKICAgICB7CiAgICAgfQog
CkBAIC0yNDUsNyArMjQyLDcgQEAgY2xhc3MgU3RyaW5nVHlwZUFkYXB0ZXI8Y29uc3QgTENoYXIq
PiB7CiBwdWJsaWM6CiAgICAgU3RyaW5nVHlwZUFkYXB0ZXI8Y29uc3QgTENoYXIqPihjb25zdCBM
Q2hhciogYnVmZmVyKQogICAgICAgICA6IG1fYnVmZmVyKGJ1ZmZlcikKLSAgICAgICAgLCBtX2xl
bmd0aChzdHJsZW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oYnVmZmVyKSkpCisgICAg
ICAgICwgbV9sZW5ndGgoY2hlY2tlZF9jYXN0PHVpbnQzMl90PihzdHJsZW4ocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBjaGFyKj4oYnVmZmVyKSkpKQogICAgIHsKICAgICB9CiAKQEAgLTI3Myw3ICsy
NzAsNyBAQCBjbGFzcyBTdHJpbmdUeXBlQWRhcHRlcjxBU0NJSUxpdGVyYWw+IHsKIHB1YmxpYzoK
ICAgICBTdHJpbmdUeXBlQWRhcHRlcjxBU0NJSUxpdGVyYWw+KEFTQ0lJTGl0ZXJhbCBidWZmZXIp
CiAgICAgICAgIDogbV9idWZmZXIocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KHN0YXRp
Y19jYXN0PGNvbnN0IGNoYXIqPihidWZmZXIpKSkKLSAgICAgICAgLCBtX2xlbmd0aChzdHJsZW4o
YnVmZmVyKSkKKyAgICAgICAgLCBtX2xlbmd0aChjaGVja2VkX2Nhc3Q8dWludDMyX3Q+KHN0cmxl
bihidWZmZXIpKSkKICAgICB7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90
ZXh0L1N0cmluZ0ltcGwuY3BwIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmNwcApp
bmRleCA1MmNlYmYxYjlhZDhmNmFhN2I0MDY5ZTAwYjI3NTRiMzdlMDcyOGJjLi4yZDUzNWY0MDYy
MWQ3MjNjNDY0ODRmMTdlYzNmNGQ0MGVkNWI2NWJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi90ZXh0L1N0cmluZ0ltcGwuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1w
bC5jcHAKQEAgLTE0Nyw3ICsxNDcsNyBAQCB2b2lkIFN0cmluZ0ltcGw6OmRlc3Ryb3koU3RyaW5n
SW1wbCogc3RyaW5nSW1wbCkKICAgICBmYXN0RnJlZShzdHJpbmdJbXBsKTsKIH0KIAotUGFzc1Jl
ZjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpjcmVhdGVGcm9tTGl0ZXJhbChjb25zdCBjaGFyKiBj
aGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCitQYXNzUmVmPFN0cmluZ0ltcGw+IFN0cmluZ0lt
cGw6OmNyZWF0ZUZyb21MaXRlcmFsKGNvbnN0IGNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5n
dGgpCiB7CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShsZW5ndGgsICJVc2UgU3RyaW5nSW1wbDo6
ZW1wdHkoKSB0byBjcmVhdGUgYW4gZW1wdHkgc3RyaW5nIik7CiAgICAgQVNTRVJUKGNoYXJhY3Rl
cnNBcmVBbGxBU0NJSTxMQ2hhcj4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KGNoYXJh
Y3RlcnMpLCBsZW5ndGgpKTsKQEAgLTE1OSw3ICsxNTksNyBAQCBQYXNzUmVmPFN0cmluZ0ltcGw+
IFN0cmluZ0ltcGw6OmNyZWF0ZUZyb21MaXRlcmFsKGNvbnN0IGNoYXIqIGNoYXJhY3RlcnMpCiAg
ICAgcmV0dXJuIGNyZWF0ZUZyb21MaXRlcmFsKGNoYXJhY3RlcnMsIHN0cmxlbihjaGFyYWN0ZXJz
KSk7CiB9CiAKLVBhc3NSZWY8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y3JlYXRlV2l0aG91dENv
cHlpbmcoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKK1Bhc3NSZWY8
U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y3JlYXRlV2l0aG91dENvcHlpbmcoY29uc3QgVUNoYXIq
IGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpCiB7CiAgICAgaWYgKCFsZW5ndGgpCiAgICAgICAg
IHJldHVybiAqZW1wdHkoKTsKQEAgLTE2Nyw3ICsxNjcsNyBAQCBQYXNzUmVmPFN0cmluZ0ltcGw+
IFN0cmluZ0ltcGw6OmNyZWF0ZVdpdGhvdXRDb3B5aW5nKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJz
LCB1bgogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFN0cmluZ0ltcGwoY2hhcmFjdGVycywgbGVu
Z3RoLCBDb25zdHJ1Y3RXaXRob3V0Q29weWluZykpOwogfQogCi1QYXNzUmVmPFN0cmluZ0ltcGw+
IFN0cmluZ0ltcGw6OmNyZWF0ZVdpdGhvdXRDb3B5aW5nKGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJz
LCB1bnNpZ25lZCBsZW5ndGgpCitQYXNzUmVmPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmNyZWF0
ZVdpdGhvdXRDb3B5aW5nKGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKQog
ewogICAgIGlmICghbGVuZ3RoKQogICAgICAgICByZXR1cm4gKmVtcHR5KCk7CkBAIC0xNzYsNyAr
MTc2LDcgQEAgUGFzc1JlZjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpjcmVhdGVXaXRob3V0Q29w
eWluZyhjb25zdCBMQ2hhciogY2hhcmFjdGVycywgdW4KIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1l
IENoYXJUeXBlPgotaW5saW5lIFBhc3NSZWY8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y3JlYXRl
VW5pbml0aWFsaXplZEludGVybmFsKHVuc2lnbmVkIGxlbmd0aCwgQ2hhclR5cGUqJiBkYXRhKQor
aW5saW5lIFBhc3NSZWY8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFsaXpl
ZEludGVybmFsKHNpemVfdCBsZW5ndGgsIENoYXJUeXBlKiYgZGF0YSkKIHsKICAgICBpZiAoIWxl
bmd0aCkgewogICAgICAgICBkYXRhID0gMDsKQEAgLTE4Niw3ICsxODYsNyBAQCBpbmxpbmUgUGFz
c1JlZjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpjcmVhdGVVbmluaXRpYWxpemVkSW50ZXJuYWwo
dW5zaWduZWQgbGVuZwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhclR5cGU+Ci1pbmxpbmUg
UGFzc1JlZjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpjcmVhdGVVbmluaXRpYWxpemVkSW50ZXJu
YWxOb25FbXB0eSh1bnNpZ25lZCBsZW5ndGgsIENoYXJUeXBlKiYgZGF0YSkKK2lubGluZSBQYXNz
UmVmPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmNyZWF0ZVVuaW5pdGlhbGl6ZWRJbnRlcm5hbE5v
bkVtcHR5KHNpemVfdCBsZW5ndGgsIENoYXJUeXBlKiYgZGF0YSkKIHsKICAgICBBU1NFUlQobGVu
Z3RoKTsKIApAQCAtMjAxLDE4ICsyMDEsMTggQEAgaW5saW5lIFBhc3NSZWY8U3RyaW5nSW1wbD4g
U3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFsaXplZEludGVybmFsTm9uRW1wdHkodW5zaWcKICAg
ICByZXR1cm4gY29uc3RydWN0SW50ZXJuYWw8Q2hhclR5cGU+KHN0cmluZywgbGVuZ3RoKTsKIH0K
IAotUGFzc1JlZjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpjcmVhdGVVbmluaXRpYWxpemVkKHVu
c2lnbmVkIGxlbmd0aCwgTENoYXIqJiBkYXRhKQorUGFzc1JlZjxTdHJpbmdJbXBsPiBTdHJpbmdJ
bXBsOjpjcmVhdGVVbmluaXRpYWxpemVkKHNpemVfdCBsZW5ndGgsIExDaGFyKiYgZGF0YSkKIHsK
ICAgICByZXR1cm4gY3JlYXRlVW5pbml0aWFsaXplZEludGVybmFsKGxlbmd0aCwgZGF0YSk7CiB9
CiAKLVBhc3NSZWY8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFsaXplZCh1
bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiYgZGF0YSkKK1Bhc3NSZWY8U3RyaW5nSW1wbD4gU3RyaW5n
SW1wbDo6Y3JlYXRlVW5pbml0aWFsaXplZChzaXplX3QgbGVuZ3RoLCBVQ2hhciomIGRhdGEpCiB7
CiAgICAgcmV0dXJuIGNyZWF0ZVVuaW5pdGlhbGl6ZWRJbnRlcm5hbChsZW5ndGgsIGRhdGEpOwog
fQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhclR5cGU+Ci1pbmxpbmUgUGFzc1JlZjxTdHJpbmdJ
bXBsPiBTdHJpbmdJbXBsOjpyZWFsbG9jYXRlSW50ZXJuYWwoUGFzc1JlZlB0cjxTdHJpbmdJbXBs
PiBvcmlnaW5hbFN0cmluZywgdW5zaWduZWQgbGVuZ3RoLCBDaGFyVHlwZSomIGRhdGEpCitpbmxp
bmUgUGFzc1JlZjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpyZWFsbG9jYXRlSW50ZXJuYWwoUGFz
c1JlZlB0cjxTdHJpbmdJbXBsPiBvcmlnaW5hbFN0cmluZywgc2l6ZV90IGxlbmd0aCwgQ2hhclR5
cGUqJiBkYXRhKQogeyAgIAogICAgIEFTU0VSVChvcmlnaW5hbFN0cmluZy0+aGFzT25lUmVmKCkp
OwogICAgIEFTU0VSVChvcmlnaW5hbFN0cmluZy0+YnVmZmVyT3duZXJzaGlwKCkgPT0gQnVmZmVy
SW50ZXJuYWwpOwpAQCAtMjMzLDIwICsyMzMsMjAgQEAgaW5saW5lIFBhc3NSZWY8U3RyaW5nSW1w
bD4gU3RyaW5nSW1wbDo6cmVhbGxvY2F0ZUludGVybmFsKFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4K
ICAgICByZXR1cm4gY29uc3RydWN0SW50ZXJuYWw8Q2hhclR5cGU+KHN0cmluZywgbGVuZ3RoKTsK
IH0KIAotUGFzc1JlZjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpyZWFsbG9jYXRlKFBhc3NSZWZQ
dHI8U3RyaW5nSW1wbD4gb3JpZ2luYWxTdHJpbmcsIHVuc2lnbmVkIGxlbmd0aCwgTENoYXIqJiBk
YXRhKQorUGFzc1JlZjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpyZWFsbG9jYXRlKFBhc3NSZWZQ
dHI8U3RyaW5nSW1wbD4gb3JpZ2luYWxTdHJpbmcsIHNpemVfdCBsZW5ndGgsIExDaGFyKiYgZGF0
YSkKIHsKICAgICBBU1NFUlQob3JpZ2luYWxTdHJpbmctPmlzOEJpdCgpKTsKICAgICByZXR1cm4g
cmVhbGxvY2F0ZUludGVybmFsKG9yaWdpbmFsU3RyaW5nLCBsZW5ndGgsIGRhdGEpOwogfQogCi1Q
YXNzUmVmPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnJlYWxsb2NhdGUoUGFzc1JlZlB0cjxTdHJp
bmdJbXBsPiBvcmlnaW5hbFN0cmluZywgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciomIGRhdGEpCitQ
YXNzUmVmPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnJlYWxsb2NhdGUoUGFzc1JlZlB0cjxTdHJp
bmdJbXBsPiBvcmlnaW5hbFN0cmluZywgc2l6ZV90IGxlbmd0aCwgVUNoYXIqJiBkYXRhKQogewog
ICAgIEFTU0VSVCghb3JpZ2luYWxTdHJpbmctPmlzOEJpdCgpKTsKICAgICByZXR1cm4gcmVhbGxv
Y2F0ZUludGVybmFsKG9yaWdpbmFsU3RyaW5nLCBsZW5ndGgsIGRhdGEpOwogfQogCiB0ZW1wbGF0
ZSA8dHlwZW5hbWUgQ2hhclR5cGU+Ci1pbmxpbmUgUGFzc1JlZjxTdHJpbmdJbXBsPiBTdHJpbmdJ
bXBsOjpjcmVhdGVJbnRlcm5hbChjb25zdCBDaGFyVHlwZSogY2hhcmFjdGVycywgdW5zaWduZWQg
bGVuZ3RoKQoraW5saW5lIFBhc3NSZWY8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y3JlYXRlSW50
ZXJuYWwoY29uc3QgQ2hhclR5cGUqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpCiB7CiAgICAg
aWYgKCFjaGFyYWN0ZXJzIHx8ICFsZW5ndGgpCiAgICAgICAgIHJldHVybiAqZW1wdHkoKTsKQEAg
LTI1NywxNyArMjU3LDE3IEBAIGlubGluZSBQYXNzUmVmPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6
OmNyZWF0ZUludGVybmFsKGNvbnN0IENoYXJUeXBlKiBjaGFyYWN0ZXJzCiAgICAgcmV0dXJuIHN0
cmluZzsKIH0KIAotUGFzc1JlZjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpjcmVhdGUoY29uc3Qg
VUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKK1Bhc3NSZWY8U3RyaW5nSW1wbD4g
U3RyaW5nSW1wbDo6Y3JlYXRlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3Ro
KQogewogICAgIHJldHVybiBjcmVhdGVJbnRlcm5hbChjaGFyYWN0ZXJzLCBsZW5ndGgpOwogfQog
Ci1QYXNzUmVmPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmNyZWF0ZShjb25zdCBMQ2hhciogY2hh
cmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQorUGFzc1JlZjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBs
OjpjcmVhdGUoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpCiB7CiAgICAg
cmV0dXJuIGNyZWF0ZUludGVybmFsKGNoYXJhY3RlcnMsIGxlbmd0aCk7CiB9CiAKLVBhc3NSZWY8
U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y3JlYXRlOEJpdElmUG9zc2libGUoY29uc3QgVUNoYXIq
IGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKK1Bhc3NSZWY8U3RyaW5nSW1wbD4gU3RyaW5n
SW1wbDo6Y3JlYXRlOEJpdElmUG9zc2libGUoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVf
dCBsZW5ndGgpCiB7CiAgICAgaWYgKCFjaGFyYWN0ZXJzIHx8ICFsZW5ndGgpCiAgICAgICAgIHJl
dHVybiAqZW1wdHkoKTsKQEAgLTMwNyw3ICszMDcsNyBAQCBjb25zdCBVQ2hhciogU3RyaW5nSW1w
bDo6Z2V0RGF0YTE2U2xvd0Nhc2UoKSBjb25zdAogICAgIGlmIChidWZmZXJPd25lcnNoaXAoKSA9
PSBCdWZmZXJTdWJzdHJpbmcpIHsKICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIHN1YnN0cmluZywg
cmV0dXJuIGEgcG9pbnRlciBpbnRvIHRoZSBwYXJlbnQgc3RyaW5nLgogICAgICAgICAvLyBUT0RP
OiBDb25zaWRlciBzZXZlcmluZyB0aGlzIHN0cmluZyBmcm9tIHRoZSBwYXJlbnQgc3RyaW5nCi0g
ICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IG1fZGF0YTggLSBzdWJzdHJpbmdCdWZmZXIoKS0+Y2hh
cmFjdGVyczgoKTsKKyAgICAgICAgc2l6ZV90IG9mZnNldCA9IG1fZGF0YTggLSBzdWJzdHJpbmdC
dWZmZXIoKS0+Y2hhcmFjdGVyczgoKTsKICAgICAgICAgcmV0dXJuIHN1YnN0cmluZ0J1ZmZlcigp
LT5kZXByZWNhdGVkQ2hhcmFjdGVycygpICsgb2Zmc2V0OwogICAgIH0KIApAQCAtMzI0LDcgKzMy
NCw3IEBAIGNvbnN0IFVDaGFyKiBTdHJpbmdJbXBsOjpnZXREYXRhMTZTbG93Q2FzZSgpIGNvbnN0
CiAgICAgcmV0dXJuIG1fY29weURhdGExNjsKIH0KIAotdm9pZCBTdHJpbmdJbXBsOjp1cGNvbnZl
cnRDaGFyYWN0ZXJzKHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQpIGNvbnN0Cit2b2lkIFN0
cmluZ0ltcGw6OnVwY29udmVydENoYXJhY3RlcnMoc2l6ZV90IHN0YXJ0LCBzaXplX3QgZW5kKSBj
b25zdAogewogICAgIEFTU0VSVChpczhCaXQoKSk7CiAgICAgQVNTRVJUKGhhczE2Qml0U2hhZG93
KCkpOwpAQCAtMzU3LDExICszNTcsMTEgQEAgYm9vbCBTdHJpbmdJbXBsOjpjb250YWluc09ubHlX
aGl0ZXNwYWNlKCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotUGFzc1JlZjxTdHJpbmdJbXBsPiBT
dHJpbmdJbXBsOjpzdWJzdHJpbmcodW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCkKK1Bh
c3NSZWY8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6c3Vic3RyaW5nKHNpemVfdCBzdGFydCwgc2l6
ZV90IGxlbmd0aCkKIHsKICAgICBpZiAoc3RhcnQgPj0gbV9sZW5ndGgpCiAgICAgICAgIHJldHVy
biAqZW1wdHkoKTsKLSAgICB1bnNpZ25lZCBtYXhMZW5ndGggPSBtX2xlbmd0aCAtIHN0YXJ0Owor
ICAgIHNpemVfdCBtYXhMZW5ndGggPSBtX2xlbmd0aCAtIHN0YXJ0OwogICAgIGlmIChsZW5ndGgg
Pj0gbWF4TGVuZ3RoKSB7CiAgICAgICAgIGlmICghc3RhcnQpCiAgICAgICAgICAgICByZXR1cm4g
KnRoaXM7CkBAIC0zNzMsNyArMzczLDcgQEAgUGFzc1JlZjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBs
OjpzdWJzdHJpbmcodW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCkKICAgICByZXR1cm4g
Y3JlYXRlKG1fZGF0YTE2ICsgc3RhcnQsIGxlbmd0aCk7CiB9CiAKLVVDaGFyMzIgU3RyaW5nSW1w
bDo6Y2hhcmFjdGVyU3RhcnRpbmdBdCh1bnNpZ25lZCBpKQorVUNoYXIzMiBTdHJpbmdJbXBsOjpj
aGFyYWN0ZXJTdGFydGluZ0F0KHNpemVfdCBpKQogewogICAgIGlmIChpczhCaXQoKSkKICAgICAg
ICAgcmV0dXJuIG1fZGF0YThbaV07CkBAIC03ODYsNyArNzg2LDcgQEAgQUxXQVlTX0lOTElORSBQ
YXNzUmVmPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnJlbW92ZUNoYXJhY3RlcnMoY29uc3QgQ2hh
clR5cGUqIGMKICAgICAKICAgICBTdHJpbmdCdWZmZXI8Q2hhclR5cGU+IGRhdGEobV9sZW5ndGgp
OwogICAgIENoYXJUeXBlKiB0byA9IGRhdGEuY2hhcmFjdGVycygpOwotICAgIHVuc2lnbmVkIG91
dGMgPSBmcm9tIC0gY2hhcmFjdGVyczsKKyAgICBzaXplX3Qgb3V0YyA9IGZyb20gLSBjaGFyYWN0
ZXJzOwogICAgIAogICAgIGlmIChvdXRjKQogICAgICAgICBtZW1jcHkodG8sIGNoYXJhY3RlcnMs
IG91dGMgKiBzaXplb2YoQ2hhclR5cGUpKTsKQEAgLTk0Nyw3ICs5NDcsNyBAQCBmbG9hdCBTdHJp
bmdJbXBsOjp0b0Zsb2F0KGJvb2wqIG9rKQogICAgIHJldHVybiBjaGFyYWN0ZXJzVG9GbG9hdChj
aGFyYWN0ZXJzMTYoKSwgbV9sZW5ndGgsIG9rKTsKIH0KIAotYm9vbCBlcXVhbElnbm9yaW5nQ2Fz
ZShjb25zdCBMQ2hhciogYSwgY29uc3QgTENoYXIqIGIsIHVuc2lnbmVkIGxlbmd0aCkKK2Jvb2wg
ZXF1YWxJZ25vcmluZ0Nhc2UoY29uc3QgTENoYXIqIGEsIGNvbnN0IExDaGFyKiBiLCBzaXplX3Qg
bGVuZ3RoKQogewogICAgIHdoaWxlIChsZW5ndGgtLSkgewogICAgICAgICBpZiAoU3RyaW5nSW1w
bDo6bGF0aW4xQ2FzZUZvbGRUYWJsZVsqYSsrXSAhPSBTdHJpbmdJbXBsOjpsYXRpbjFDYXNlRm9s
ZFRhYmxlWypiKytdKQpAQCAtOTU2LDcgKzk1Niw3IEBAIGJvb2wgZXF1YWxJZ25vcmluZ0Nhc2Uo
Y29uc3QgTENoYXIqIGEsIGNvbnN0IExDaGFyKiBiLCB1bnNpZ25lZCBsZW5ndGgpCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLWJvb2wgZXF1YWxJZ25vcmluZ0Nhc2UoY29uc3QgVUNoYXIqIGEsIGNv
bnN0IExDaGFyKiBiLCB1bnNpZ25lZCBsZW5ndGgpCitib29sIGVxdWFsSWdub3JpbmdDYXNlKGNv
bnN0IFVDaGFyKiBhLCBjb25zdCBMQ2hhciogYiwgc2l6ZV90IGxlbmd0aCkKIHsKICAgICB3aGls
ZSAobGVuZ3RoLS0pIHsKICAgICAgICAgaWYgKHVfZm9sZENhc2UoKmErKywgVV9GT0xEX0NBU0Vf
REVGQVVMVCkgIT0gU3RyaW5nSW1wbDo6bGF0aW4xQ2FzZUZvbGRUYWJsZVsqYisrXSkKQEAgLTk2
NSwyNCArOTY1LDIxIEBAIGJvb2wgZXF1YWxJZ25vcmluZ0Nhc2UoY29uc3QgVUNoYXIqIGEsIGNv
bnN0IExDaGFyKiBiLCB1bnNpZ25lZCBsZW5ndGgpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXNp
emVfdCBTdHJpbmdJbXBsOjpmaW5kKENoYXJhY3Rlck1hdGNoRnVuY3Rpb25QdHIgbWF0Y2hGdW5j
dGlvbiwgdW5zaWduZWQgc3RhcnQpCitzaXplX3QgU3RyaW5nSW1wbDo6ZmluZChDaGFyYWN0ZXJN
YXRjaEZ1bmN0aW9uUHRyIG1hdGNoRnVuY3Rpb24sIHNpemVfdCBzdGFydCkKIHsKICAgICBpZiAo
aXM4Qml0KCkpCiAgICAgICAgIHJldHVybiBXVEY6OmZpbmQoY2hhcmFjdGVyczgoKSwgbV9sZW5n
dGgsIG1hdGNoRnVuY3Rpb24sIHN0YXJ0KTsKICAgICByZXR1cm4gV1RGOjpmaW5kKGNoYXJhY3Rl
cnMxNigpLCBtX2xlbmd0aCwgbWF0Y2hGdW5jdGlvbiwgc3RhcnQpOwogfQogCi1zaXplX3QgU3Ry
aW5nSW1wbDo6ZmluZChjb25zdCBMQ2hhciogbWF0Y2hTdHJpbmcsIHVuc2lnbmVkIGluZGV4KQor
c2l6ZV90IFN0cmluZ0ltcGw6OmZpbmQoY29uc3QgTENoYXIqIG1hdGNoU3RyaW5nLCBzaXplX3Qg
aW5kZXgpCiB7CiAgICAgLy8gQ2hlY2sgZm9yIG51bGwgb3IgZW1wdHkgc3RyaW5nIHRvIG1hdGNo
IGFnYWluc3QKICAgICBpZiAoIW1hdGNoU3RyaW5nKQogICAgICAgICByZXR1cm4gbm90Rm91bmQ7
Ci0gICAgc2l6ZV90IG1hdGNoU3RyaW5nTGVuZ3RoID0gc3RybGVuKHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgY2hhcio+KG1hdGNoU3RyaW5nKSk7Ci0gICAgaWYgKG1hdGNoU3RyaW5nTGVuZ3RoID4g
c3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQotICAgICAgICBDUkFTSCgpOwot
ICAgIHVuc2lnbmVkIG1hdGNoTGVuZ3RoID0gbWF0Y2hTdHJpbmdMZW5ndGg7CisgICAgdW5zaWdu
ZWQgbWF0Y2hMZW5ndGggPSBjaGVja2VkX2Nhc3Q8dW5zaWduZWQ+KHN0cmxlbihyZWludGVycHJl
dF9jYXN0PGNvbnN0IGNoYXIqPihtYXRjaFN0cmluZykpKTsKICAgICBpZiAoIW1hdGNoTGVuZ3Ro
KQotICAgICAgICByZXR1cm4gc3RkOjptaW4oaW5kZXgsIGxlbmd0aCgpKTsKKyAgICAgICAgcmV0
dXJuIHN0ZDo6bWluPHNpemVfdD4oaW5kZXgsIGxlbmd0aCgpKTsKIAogICAgIC8vIE9wdGltaXph
dGlvbiAxOiBmYXN0IGNhc2UgZm9yIHN0cmluZ3Mgb2YgbGVuZ3RoIDEuCiAgICAgaWYgKG1hdGNo
TGVuZ3RoID09IDEpCkBAIC05OTEsMTEgKzk4OCwxMSBAQCBzaXplX3QgU3RyaW5nSW1wbDo6Zmlu
ZChjb25zdCBMQ2hhciogbWF0Y2hTdHJpbmcsIHVuc2lnbmVkIGluZGV4KQogICAgIC8vIENoZWNr
IGluZGV4ICYgbWF0Y2hMZW5ndGggYXJlIGluIHJhbmdlLgogICAgIGlmIChpbmRleCA+IGxlbmd0
aCgpKQogICAgICAgICByZXR1cm4gbm90Rm91bmQ7Ci0gICAgdW5zaWduZWQgc2VhcmNoTGVuZ3Ro
ID0gbGVuZ3RoKCkgLSBpbmRleDsKKyAgICBzaXplX3Qgc2VhcmNoTGVuZ3RoID0gbGVuZ3RoKCkg
LSBpbmRleDsKICAgICBpZiAobWF0Y2hMZW5ndGggPiBzZWFyY2hMZW5ndGgpCiAgICAgICAgIHJl
dHVybiBub3RGb3VuZDsKICAgICAvLyBkZWx0YSBpcyB0aGUgbnVtYmVyIG9mIGFkZGl0aW9uYWwg
dGltZXMgdG8gdGVzdDsgZGVsdGEgPT0gMCBtZWFucyB0ZXN0IG9ubHkgb25jZS4KLSAgICB1bnNp
Z25lZCBkZWx0YSA9IHNlYXJjaExlbmd0aCAtIG1hdGNoTGVuZ3RoOworICAgIHNpemVfdCBkZWx0
YSA9IHNlYXJjaExlbmd0aCAtIG1hdGNoTGVuZ3RoOwogCiAgICAgY29uc3QgVUNoYXIqIHNlYXJj
aENoYXJhY3RlcnMgPSBkZXByZWNhdGVkQ2hhcmFjdGVycygpICsgaW5kZXg7CiAKQEAgLTEwMjAs
MjYgKzEwMTcsMjUgQEAgc2l6ZV90IFN0cmluZ0ltcGw6OmZpbmQoY29uc3QgTENoYXIqIG1hdGNo
U3RyaW5nLCB1bnNpZ25lZCBpbmRleCkKICAgICByZXR1cm4gaW5kZXggKyBpOwogfQogCi1zaXpl
X3QgU3RyaW5nSW1wbDo6ZmluZElnbm9yaW5nQ2FzZShjb25zdCBMQ2hhciogbWF0Y2hTdHJpbmcs
IHVuc2lnbmVkIGluZGV4KQorc2l6ZV90IFN0cmluZ0ltcGw6OmZpbmRJZ25vcmluZ0Nhc2UoY29u
c3QgTENoYXIqIG1hdGNoU3RyaW5nLCBzaXplX3QgaW5kZXgpCiB7CiAgICAgLy8gQ2hlY2sgZm9y
IG51bGwgb3IgZW1wdHkgc3RyaW5nIHRvIG1hdGNoIGFnYWluc3QKICAgICBpZiAoIW1hdGNoU3Ry
aW5nKQogICAgICAgICByZXR1cm4gbm90Rm91bmQ7Ci0gICAgc2l6ZV90IG1hdGNoU3RyaW5nTGVu
Z3RoID0gc3RybGVuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KG1hdGNoU3RyaW5nKSk7
Ci0gICAgaWYgKG1hdGNoU3RyaW5nTGVuZ3RoID4gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25l
ZD46Om1heCgpKQotICAgICAgICBDUkFTSCgpOwotICAgIHVuc2lnbmVkIG1hdGNoTGVuZ3RoID0g
bWF0Y2hTdHJpbmdMZW5ndGg7CisKKyAgICB1bnNpZ25lZCBtYXRjaExlbmd0aCA9IGNoZWNrZWRf
Y2FzdDx1bnNpZ25lZD4oc3RybGVuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KG1hdGNo
U3RyaW5nKSkpOworCiAgICAgaWYgKCFtYXRjaExlbmd0aCkKLSAgICAgICAgcmV0dXJuIHN0ZDo6
bWluKGluZGV4LCBsZW5ndGgoKSk7CisgICAgICAgIHJldHVybiBzdGQ6Om1pbjxzaXplX3Q+KGlu
ZGV4LCBsZW5ndGgoKSk7CiAKICAgICAvLyBDaGVjayBpbmRleCAmIG1hdGNoTGVuZ3RoIGFyZSBp
biByYW5nZS4KICAgICBpZiAoaW5kZXggPiBsZW5ndGgoKSkKICAgICAgICAgcmV0dXJuIG5vdEZv
dW5kOwotICAgIHVuc2lnbmVkIHNlYXJjaExlbmd0aCA9IGxlbmd0aCgpIC0gaW5kZXg7CisgICAg
c2l6ZV90IHNlYXJjaExlbmd0aCA9IGxlbmd0aCgpIC0gaW5kZXg7CiAgICAgaWYgKG1hdGNoTGVu
Z3RoID4gc2VhcmNoTGVuZ3RoKQogICAgICAgICByZXR1cm4gbm90Rm91bmQ7CiAgICAgLy8gZGVs
dGEgaXMgdGhlIG51bWJlciBvZiBhZGRpdGlvbmFsIHRpbWVzIHRvIHRlc3Q7IGRlbHRhID09IDAg
bWVhbnMgdGVzdCBvbmx5IG9uY2UuCi0gICAgdW5zaWduZWQgZGVsdGEgPSBzZWFyY2hMZW5ndGgg
LSBtYXRjaExlbmd0aDsKKyAgICBzaXplX3QgZGVsdGEgPSBzZWFyY2hMZW5ndGggLSBtYXRjaExl
bmd0aDsKIAogICAgIGNvbnN0IFVDaGFyKiBzZWFyY2hDaGFyYWN0ZXJzID0gZGVwcmVjYXRlZENo
YXJhY3RlcnMoKSArIGluZGV4OwogCkBAIC0xMDU0LDI1ICsxMDUwLDI1IEBAIHNpemVfdCBTdHJp
bmdJbXBsOjpmaW5kSWdub3JpbmdDYXNlKGNvbnN0IExDaGFyKiBtYXRjaFN0cmluZywgdW5zaWdu
ZWQgaW5kZXgpCiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBTZWFyY2hDaGFyYWN0ZXJUeXBlLCB0
eXBlbmFtZSBNYXRjaENoYXJhY3RlclR5cGU+Ci1BTFdBWVNfSU5MSU5FIHN0YXRpYyBzaXplX3Qg
ZmluZElubmVyKGNvbnN0IFNlYXJjaENoYXJhY3RlclR5cGUqIHNlYXJjaENoYXJhY3RlcnMsIGNv
bnN0IE1hdGNoQ2hhcmFjdGVyVHlwZSogbWF0Y2hDaGFyYWN0ZXJzLCB1bnNpZ25lZCBpbmRleCwg
dW5zaWduZWQgc2VhcmNoTGVuZ3RoLCB1bnNpZ25lZCBtYXRjaExlbmd0aCkKK0FMV0FZU19JTkxJ
TkUgc3RhdGljIHNpemVfdCBmaW5kSW5uZXIoY29uc3QgU2VhcmNoQ2hhcmFjdGVyVHlwZSogc2Vh
cmNoQ2hhcmFjdGVycywgY29uc3QgTWF0Y2hDaGFyYWN0ZXJUeXBlKiBtYXRjaENoYXJhY3RlcnMs
IHNpemVfdCBpbmRleCwgc2l6ZV90IHNlYXJjaExlbmd0aCwgc2l6ZV90IG1hdGNoTGVuZ3RoKQog
ewogICAgIC8vIE9wdGltaXphdGlvbjoga2VlcCBhIHJ1bm5pbmcgaGFzaCBvZiB0aGUgc3RyaW5n
cywKICAgICAvLyBvbmx5IGNhbGwgZXF1YWwoKSBpZiB0aGUgaGFzaGVzIG1hdGNoLgogCiAgICAg
Ly8gZGVsdGEgaXMgdGhlIG51bWJlciBvZiBhZGRpdGlvbmFsIHRpbWVzIHRvIHRlc3Q7IGRlbHRh
ID09IDAgbWVhbnMgdGVzdCBvbmx5IG9uY2UuCi0gICAgdW5zaWduZWQgZGVsdGEgPSBzZWFyY2hM
ZW5ndGggLSBtYXRjaExlbmd0aDsKKyAgICBzaXplX3QgZGVsdGEgPSBzZWFyY2hMZW5ndGggLSBt
YXRjaExlbmd0aDsKIAogICAgIHVuc2lnbmVkIHNlYXJjaEhhc2ggPSAwOwogICAgIHVuc2lnbmVk
IG1hdGNoSGFzaCA9IDA7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWF0Y2hMZW5n
dGg7ICsraSkgeworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWF0Y2hMZW5ndGg7ICsraSkg
ewogICAgICAgICBzZWFyY2hIYXNoICs9IHNlYXJjaENoYXJhY3RlcnNbaV07CiAgICAgICAgIG1h
dGNoSGFzaCArPSBtYXRjaENoYXJhY3RlcnNbaV07CiAgICAgfQogCi0gICAgdW5zaWduZWQgaSA9
IDA7CisgICAgc2l6ZV90IGkgPSAwOwogICAgIC8vIGtlZXAgbG9vcGluZyB1bnRpbCB3ZSBtYXRj
aAotICAgIHdoaWxlIChzZWFyY2hIYXNoICE9IG1hdGNoSGFzaCB8fCAhZXF1YWwoc2VhcmNoQ2hh
cmFjdGVycyArIGksIG1hdGNoQ2hhcmFjdGVycywgbWF0Y2hMZW5ndGgpKSB7CisgICAgd2hpbGUg
KHNlYXJjaEhhc2ggIT0gbWF0Y2hIYXNoIHx8ICFlcXVhbChzZWFyY2hDaGFyYWN0ZXJzICsgaSwg
bWF0Y2hDaGFyYWN0ZXJzLCBjaGVja2VkX2Nhc3Q8dW5zaWduZWQ+KG1hdGNoTGVuZ3RoKSkpIHsK
ICAgICAgICAgaWYgKGkgPT0gZGVsdGEpCiAgICAgICAgICAgICByZXR1cm4gbm90Rm91bmQ7CiAg
ICAgICAgIHNlYXJjaEhhc2ggKz0gc2VhcmNoQ2hhcmFjdGVyc1tpICsgbWF0Y2hMZW5ndGhdOwpA
QCAtMTEyMSw3ICsxMTE3LDcgQEAgc2l6ZV90IFN0cmluZ0ltcGw6OmZpbmQoU3RyaW5nSW1wbCog
bWF0Y2hTdHJpbmcpCiAgICAgcmV0dXJuIGZpbmRJbm5lcihjaGFyYWN0ZXJzMTYoKSwgbWF0Y2hT
dHJpbmctPmNoYXJhY3RlcnMxNigpLCAwLCBsZW5ndGgoKSwgbWF0Y2hMZW5ndGgpOwogfQogCi1z
aXplX3QgU3RyaW5nSW1wbDo6ZmluZChTdHJpbmdJbXBsKiBtYXRjaFN0cmluZywgdW5zaWduZWQg
aW5kZXgpCitzaXplX3QgU3RyaW5nSW1wbDo6ZmluZChTdHJpbmdJbXBsKiBtYXRjaFN0cmluZywg
c2l6ZV90IGluZGV4KQogewogICAgIC8vIENoZWNrIGZvciBudWxsIG9yIGVtcHR5IHN0cmluZyB0
byBtYXRjaCBhZ2FpbnN0CiAgICAgaWYgKFVOTElLRUxZKCFtYXRjaFN0cmluZykpCkBAIC0xMTM3
LDEyICsxMTMzLDEyIEBAIHNpemVfdCBTdHJpbmdJbXBsOjpmaW5kKFN0cmluZ0ltcGwqIG1hdGNo
U3RyaW5nLCB1bnNpZ25lZCBpbmRleCkKICAgICB9CiAKICAgICBpZiAoVU5MSUtFTFkoIW1hdGNo
TGVuZ3RoKSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bWluKGluZGV4LCBsZW5ndGgoKSk7CisgICAg
ICAgIHJldHVybiBzdGQ6Om1pbjxzaXplX3Q+KGluZGV4LCBsZW5ndGgoKSk7CiAKICAgICAvLyBD
aGVjayBpbmRleCAmIG1hdGNoTGVuZ3RoIGFyZSBpbiByYW5nZS4KICAgICBpZiAoaW5kZXggPiBs
ZW5ndGgoKSkKICAgICAgICAgcmV0dXJuIG5vdEZvdW5kOwotICAgIHVuc2lnbmVkIHNlYXJjaExl
bmd0aCA9IGxlbmd0aCgpIC0gaW5kZXg7CisgICAgc2l6ZV90IHNlYXJjaExlbmd0aCA9IGxlbmd0
aCgpIC0gaW5kZXg7CiAgICAgaWYgKG1hdGNoTGVuZ3RoID4gc2VhcmNoTGVuZ3RoKQogICAgICAg
ICByZXR1cm4gbm90Rm91bmQ7CiAKQEAgLTExNTksMTQgKzExNTUsMTQgQEAgc2l6ZV90IFN0cmlu
Z0ltcGw6OmZpbmQoU3RyaW5nSW1wbCogbWF0Y2hTdHJpbmcsIHVuc2lnbmVkIGluZGV4KQogfQog
CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgU2VhcmNoQ2hhcmFjdGVyVHlwZSwgdHlwZW5hbWUgTWF0Y2hD
aGFyYWN0ZXJUeXBlPgotQUxXQVlTX0lOTElORSBzdGF0aWMgc2l6ZV90IGZpbmRJZ25vcmluZ0Nh
c2VJbm5lcihjb25zdCBTZWFyY2hDaGFyYWN0ZXJUeXBlKiBzZWFyY2hDaGFyYWN0ZXJzLCBjb25z
dCBNYXRjaENoYXJhY3RlclR5cGUqIG1hdGNoQ2hhcmFjdGVycywgdW5zaWduZWQgaW5kZXgsIHVu
c2lnbmVkIHNlYXJjaExlbmd0aCwgdW5zaWduZWQgbWF0Y2hMZW5ndGgpCitBTFdBWVNfSU5MSU5F
IHN0YXRpYyBzaXplX3QgZmluZElnbm9yaW5nQ2FzZUlubmVyKGNvbnN0IFNlYXJjaENoYXJhY3Rl
clR5cGUqIHNlYXJjaENoYXJhY3RlcnMsIGNvbnN0IE1hdGNoQ2hhcmFjdGVyVHlwZSogbWF0Y2hD
aGFyYWN0ZXJzLCBzaXplX3QgaW5kZXgsIHNpemVfdCBzZWFyY2hMZW5ndGgsIHNpemVfdCBtYXRj
aExlbmd0aCkKIHsKICAgICAvLyBkZWx0YSBpcyB0aGUgbnVtYmVyIG9mIGFkZGl0aW9uYWwgdGlt
ZXMgdG8gdGVzdDsgZGVsdGEgPT0gMCBtZWFucyB0ZXN0IG9ubHkgb25jZS4KLSAgICB1bnNpZ25l
ZCBkZWx0YSA9IHNlYXJjaExlbmd0aCAtIG1hdGNoTGVuZ3RoOworICAgIHNpemVfdCBkZWx0YSA9
IHNlYXJjaExlbmd0aCAtIG1hdGNoTGVuZ3RoOwogCi0gICAgdW5zaWduZWQgaSA9IDA7CisgICAg
c2l6ZV90IGkgPSAwOwogICAgIC8vIGtlZXAgbG9vcGluZyB1bnRpbCB3ZSBtYXRjaAotICAgIHdo
aWxlICghZXF1YWxJZ25vcmluZ0Nhc2Uoc2VhcmNoQ2hhcmFjdGVycyArIGksIG1hdGNoQ2hhcmFj
dGVycywgbWF0Y2hMZW5ndGgpKSB7CisgICAgd2hpbGUgKCFlcXVhbElnbm9yaW5nQ2FzZShzZWFy
Y2hDaGFyYWN0ZXJzICsgaSwgbWF0Y2hDaGFyYWN0ZXJzLCBjaGVja2VkX2Nhc3Q8aW50PihtYXRj
aExlbmd0aCkpKSB7CiAgICAgICAgIGlmIChpID09IGRlbHRhKQogICAgICAgICAgICAgcmV0dXJu
IG5vdEZvdW5kOwogICAgICAgICArK2k7CkBAIC0xMTc0LDE5ICsxMTcwLDE5IEBAIEFMV0FZU19J
TkxJTkUgc3RhdGljIHNpemVfdCBmaW5kSWdub3JpbmdDYXNlSW5uZXIoY29uc3QgU2VhcmNoQ2hh
cmFjdGVyVHlwZSogc2VhCiAgICAgcmV0dXJuIGluZGV4ICsgaTsKIH0KIAotc2l6ZV90IFN0cmlu
Z0ltcGw6OmZpbmRJZ25vcmluZ0Nhc2UoU3RyaW5nSW1wbCogbWF0Y2hTdHJpbmcsIHVuc2lnbmVk
IGluZGV4KQorc2l6ZV90IFN0cmluZ0ltcGw6OmZpbmRJZ25vcmluZ0Nhc2UoU3RyaW5nSW1wbCog
bWF0Y2hTdHJpbmcsIHNpemVfdCBpbmRleCkKIHsKICAgICAvLyBDaGVjayBmb3IgbnVsbCBvciBl
bXB0eSBzdHJpbmcgdG8gbWF0Y2ggYWdhaW5zdAogICAgIGlmICghbWF0Y2hTdHJpbmcpCiAgICAg
ICAgIHJldHVybiBub3RGb3VuZDsKICAgICB1bnNpZ25lZCBtYXRjaExlbmd0aCA9IG1hdGNoU3Ry
aW5nLT5sZW5ndGgoKTsKICAgICBpZiAoIW1hdGNoTGVuZ3RoKQotICAgICAgICByZXR1cm4gc3Rk
OjptaW4oaW5kZXgsIGxlbmd0aCgpKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWluPHNpemVfdD4o
aW5kZXgsIGxlbmd0aCgpKTsKIAogICAgIC8vIENoZWNrIGluZGV4ICYgbWF0Y2hMZW5ndGggYXJl
IGluIHJhbmdlLgogICAgIGlmIChpbmRleCA+IGxlbmd0aCgpKQogICAgICAgICByZXR1cm4gbm90
Rm91bmQ7Ci0gICAgdW5zaWduZWQgc2VhcmNoTGVuZ3RoID0gbGVuZ3RoKCkgLSBpbmRleDsKKyAg
ICBzaXplX3Qgc2VhcmNoTGVuZ3RoID0gbGVuZ3RoKCkgLSBpbmRleDsKICAgICBpZiAobWF0Y2hM
ZW5ndGggPiBzZWFyY2hMZW5ndGgpCiAgICAgICAgIHJldHVybiBub3RGb3VuZDsKIApAQCAtMTIw
MiwxNCArMTE5OCwxNCBAQCBzaXplX3QgU3RyaW5nSW1wbDo6ZmluZElnbm9yaW5nQ2FzZShTdHJp
bmdJbXBsKiBtYXRjaFN0cmluZywgdW5zaWduZWQgaW5kZXgpCiAgICAgcmV0dXJuIGZpbmRJZ25v
cmluZ0Nhc2VJbm5lcihjaGFyYWN0ZXJzMTYoKSArIGluZGV4LCBtYXRjaFN0cmluZy0+Y2hhcmFj
dGVyczE2KCksIGluZGV4LCBzZWFyY2hMZW5ndGgsIG1hdGNoTGVuZ3RoKTsKIH0KIAotc2l6ZV90
IFN0cmluZ0ltcGw6OmZpbmROZXh0TGluZVN0YXJ0KHVuc2lnbmVkIGluZGV4KQorc2l6ZV90IFN0
cmluZ0ltcGw6OmZpbmROZXh0TGluZVN0YXJ0KHNpemVfdCBpbmRleCkKIHsKICAgICBpZiAoaXM4
Qml0KCkpCiAgICAgICAgIHJldHVybiBXVEY6OmZpbmROZXh0TGluZVN0YXJ0KGNoYXJhY3RlcnM4
KCksIG1fbGVuZ3RoLCBpbmRleCk7CiAgICAgcmV0dXJuIFdURjo6ZmluZE5leHRMaW5lU3RhcnQo
Y2hhcmFjdGVyczE2KCksIG1fbGVuZ3RoLCBpbmRleCk7CiB9CiAKLXNpemVfdCBTdHJpbmdJbXBs
OjpyZXZlcnNlRmluZChVQ2hhciBjLCB1bnNpZ25lZCBpbmRleCkKK3NpemVfdCBTdHJpbmdJbXBs
OjpyZXZlcnNlRmluZChVQ2hhciBjLCBzaXplX3QgaW5kZXgpCiB7CiAgICAgaWYgKGlzOEJpdCgp
KQogICAgICAgICByZXR1cm4gV1RGOjpyZXZlcnNlRmluZChjaGFyYWN0ZXJzOCgpLCBtX2xlbmd0
aCwgYywgaW5kZXgpOwpAQCAtMTIxNywyMyArMTIxMywyMyBAQCBzaXplX3QgU3RyaW5nSW1wbDo6
cmV2ZXJzZUZpbmQoVUNoYXIgYywgdW5zaWduZWQgaW5kZXgpCiB9CiAKIHRlbXBsYXRlIDx0eXBl
bmFtZSBTZWFyY2hDaGFyYWN0ZXJUeXBlLCB0eXBlbmFtZSBNYXRjaENoYXJhY3RlclR5cGU+Ci1B
TFdBWVNfSU5MSU5FIHN0YXRpYyBzaXplX3QgcmV2ZXJzZUZpbmRJbm5lcihjb25zdCBTZWFyY2hD
aGFyYWN0ZXJUeXBlKiBzZWFyY2hDaGFyYWN0ZXJzLCBjb25zdCBNYXRjaENoYXJhY3RlclR5cGUq
IG1hdGNoQ2hhcmFjdGVycywgdW5zaWduZWQgaW5kZXgsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWdu
ZWQgbWF0Y2hMZW5ndGgpCitBTFdBWVNfSU5MSU5FIHN0YXRpYyBzaXplX3QgcmV2ZXJzZUZpbmRJ
bm5lcihjb25zdCBTZWFyY2hDaGFyYWN0ZXJUeXBlKiBzZWFyY2hDaGFyYWN0ZXJzLCBjb25zdCBN
YXRjaENoYXJhY3RlclR5cGUqIG1hdGNoQ2hhcmFjdGVycywgc2l6ZV90IGluZGV4LCBzaXplX3Qg
bGVuZ3RoLCBzaXplX3QgbWF0Y2hMZW5ndGgpCiB7CiAgICAgLy8gT3B0aW1pemF0aW9uOiBrZWVw
IGEgcnVubmluZyBoYXNoIG9mIHRoZSBzdHJpbmdzLAogICAgIC8vIG9ubHkgY2FsbCBlcXVhbCBp
ZiB0aGUgaGFzaGVzIG1hdGNoLgogCiAgICAgLy8gZGVsdGEgaXMgdGhlIG51bWJlciBvZiBhZGRp
dGlvbmFsIHRpbWVzIHRvIHRlc3Q7IGRlbHRhID09IDAgbWVhbnMgdGVzdCBvbmx5IG9uY2UuCi0g
ICAgdW5zaWduZWQgZGVsdGEgPSBzdGQ6Om1pbihpbmRleCwgbGVuZ3RoIC0gbWF0Y2hMZW5ndGgp
OworICAgIHNpemVfdCBkZWx0YSA9IHN0ZDo6bWluKGluZGV4LCBsZW5ndGggLSBtYXRjaExlbmd0
aCk7CiAgICAgCiAgICAgdW5zaWduZWQgc2VhcmNoSGFzaCA9IDA7CiAgICAgdW5zaWduZWQgbWF0
Y2hIYXNoID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWF0Y2hMZW5ndGg7ICsr
aSkgeworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWF0Y2hMZW5ndGg7ICsraSkgewogICAg
ICAgICBzZWFyY2hIYXNoICs9IHNlYXJjaENoYXJhY3RlcnNbZGVsdGEgKyBpXTsKICAgICAgICAg
bWF0Y2hIYXNoICs9IG1hdGNoQ2hhcmFjdGVyc1tpXTsKICAgICB9CiAKICAgICAvLyBrZWVwIGxv
b3BpbmcgdW50aWwgd2UgbWF0Y2gKLSAgICB3aGlsZSAoc2VhcmNoSGFzaCAhPSBtYXRjaEhhc2gg
fHwgIWVxdWFsKHNlYXJjaENoYXJhY3RlcnMgKyBkZWx0YSwgbWF0Y2hDaGFyYWN0ZXJzLCBtYXRj
aExlbmd0aCkpIHsKKyAgICB3aGlsZSAoc2VhcmNoSGFzaCAhPSBtYXRjaEhhc2ggfHwgIWVxdWFs
KHNlYXJjaENoYXJhY3RlcnMgKyBkZWx0YSwgbWF0Y2hDaGFyYWN0ZXJzLCBjaGVja2VkX2Nhc3Q8
dW5zaWduZWQ+KG1hdGNoTGVuZ3RoKSkpIHsKICAgICAgICAgaWYgKCFkZWx0YSkKICAgICAgICAg
ICAgIHJldHVybiBub3RGb3VuZDsKICAgICAgICAgLS1kZWx0YTsKQEAgLTEyNDMsMTMgKzEyMzks
MTMgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgc2l6ZV90IHJldmVyc2VGaW5kSW5uZXIoY29uc3Qg
U2VhcmNoQ2hhcmFjdGVyVHlwZSogc2VhcmNoQ2gKICAgICByZXR1cm4gZGVsdGE7CiB9CiAKLXNp
emVfdCBTdHJpbmdJbXBsOjpyZXZlcnNlRmluZChTdHJpbmdJbXBsKiBtYXRjaFN0cmluZywgdW5z
aWduZWQgaW5kZXgpCitzaXplX3QgU3RyaW5nSW1wbDo6cmV2ZXJzZUZpbmQoU3RyaW5nSW1wbCog
bWF0Y2hTdHJpbmcsIHNpemVfdCBpbmRleCkKIHsKICAgICAvLyBDaGVjayBmb3IgbnVsbCBvciBl
bXB0eSBzdHJpbmcgdG8gbWF0Y2ggYWdhaW5zdAogICAgIGlmICghbWF0Y2hTdHJpbmcpCiAgICAg
ICAgIHJldHVybiBub3RGb3VuZDsKLSAgICB1bnNpZ25lZCBtYXRjaExlbmd0aCA9IG1hdGNoU3Ry
aW5nLT5sZW5ndGgoKTsKLSAgICB1bnNpZ25lZCBvdXJMZW5ndGggPSBsZW5ndGgoKTsKKyAgICBz
aXplX3QgbWF0Y2hMZW5ndGggPSBtYXRjaFN0cmluZy0+bGVuZ3RoKCk7CisgICAgc2l6ZV90IG91
ckxlbmd0aCA9IGxlbmd0aCgpOwogICAgIGlmICghbWF0Y2hMZW5ndGgpCiAgICAgICAgIHJldHVy
biBzdGQ6Om1pbihpbmRleCwgb3VyTGVuZ3RoKTsKIApAQCAtMTI3NywxMyArMTI3MywxMyBAQCBz
aXplX3QgU3RyaW5nSW1wbDo6cmV2ZXJzZUZpbmQoU3RyaW5nSW1wbCogbWF0Y2hTdHJpbmcsIHVu
c2lnbmVkIGluZGV4KQogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgU2VhcmNoQ2hhcmFjdGVyVHlw
ZSwgdHlwZW5hbWUgTWF0Y2hDaGFyYWN0ZXJUeXBlPgotQUxXQVlTX0lOTElORSBzdGF0aWMgc2l6
ZV90IHJldmVyc2VGaW5kSWdub3JpbmdDYXNlSW5uZXIoY29uc3QgU2VhcmNoQ2hhcmFjdGVyVHlw
ZSogc2VhcmNoQ2hhcmFjdGVycywgY29uc3QgTWF0Y2hDaGFyYWN0ZXJUeXBlKiBtYXRjaENoYXJh
Y3RlcnMsIHVuc2lnbmVkIGluZGV4LCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIG1hdGNoTGVu
Z3RoKQorQUxXQVlTX0lOTElORSBzdGF0aWMgc2l6ZV90IHJldmVyc2VGaW5kSWdub3JpbmdDYXNl
SW5uZXIoY29uc3QgU2VhcmNoQ2hhcmFjdGVyVHlwZSogc2VhcmNoQ2hhcmFjdGVycywgY29uc3Qg
TWF0Y2hDaGFyYWN0ZXJUeXBlKiBtYXRjaENoYXJhY3RlcnMsIHNpemVfdCBpbmRleCwgc2l6ZV90
IGxlbmd0aCwgc2l6ZV90IG1hdGNoTGVuZ3RoKQogewogICAgIC8vIGRlbHRhIGlzIHRoZSBudW1i
ZXIgb2YgYWRkaXRpb25hbCB0aW1lcyB0byB0ZXN0OyBkZWx0YSA9PSAwIG1lYW5zIHRlc3Qgb25s
eSBvbmNlLgotICAgIHVuc2lnbmVkIGRlbHRhID0gc3RkOjptaW4oaW5kZXgsIGxlbmd0aCAtIG1h
dGNoTGVuZ3RoKTsKKyAgICBzaXplX3QgZGVsdGEgPSBzdGQ6Om1pbihpbmRleCwgbGVuZ3RoIC0g
bWF0Y2hMZW5ndGgpOwogCiAgICAgLy8ga2VlcCBsb29waW5nIHVudGlsIHdlIG1hdGNoCi0gICAg
d2hpbGUgKCFlcXVhbElnbm9yaW5nQ2FzZShzZWFyY2hDaGFyYWN0ZXJzICsgZGVsdGEsIG1hdGNo
Q2hhcmFjdGVycywgbWF0Y2hMZW5ndGgpKSB7CisgICAgd2hpbGUgKCFlcXVhbElnbm9yaW5nQ2Fz
ZShzZWFyY2hDaGFyYWN0ZXJzICsgZGVsdGEsIG1hdGNoQ2hhcmFjdGVycywgY2hlY2tlZF9jYXN0
PGludD4obWF0Y2hMZW5ndGgpKSkgewogICAgICAgICBpZiAoIWRlbHRhKQogICAgICAgICAgICAg
cmV0dXJuIG5vdEZvdW5kOwogICAgICAgICAtLWRlbHRhOwpAQCAtMTI5MSwxMyArMTI4NywxMyBA
QCBBTFdBWVNfSU5MSU5FIHN0YXRpYyBzaXplX3QgcmV2ZXJzZUZpbmRJZ25vcmluZ0Nhc2VJbm5l
cihjb25zdCBTZWFyY2hDaGFyYWN0ZXJUeQogICAgIHJldHVybiBkZWx0YTsKIH0KIAotc2l6ZV90
IFN0cmluZ0ltcGw6OnJldmVyc2VGaW5kSWdub3JpbmdDYXNlKFN0cmluZ0ltcGwqIG1hdGNoU3Ry
aW5nLCB1bnNpZ25lZCBpbmRleCkKK3NpemVfdCBTdHJpbmdJbXBsOjpyZXZlcnNlRmluZElnbm9y
aW5nQ2FzZShTdHJpbmdJbXBsKiBtYXRjaFN0cmluZywgc2l6ZV90IGluZGV4KQogewogICAgIC8v
IENoZWNrIGZvciBudWxsIG9yIGVtcHR5IHN0cmluZyB0byBtYXRjaCBhZ2FpbnN0CiAgICAgaWYg
KCFtYXRjaFN0cmluZykKICAgICAgICAgcmV0dXJuIG5vdEZvdW5kOwotICAgIHVuc2lnbmVkIG1h
dGNoTGVuZ3RoID0gbWF0Y2hTdHJpbmctPmxlbmd0aCgpOwotICAgIHVuc2lnbmVkIG91ckxlbmd0
aCA9IGxlbmd0aCgpOworICAgIHNpemVfdCBtYXRjaExlbmd0aCA9IG1hdGNoU3RyaW5nLT5sZW5n
dGgoKTsKKyAgICBzaXplX3Qgb3VyTGVuZ3RoID0gbGVuZ3RoKCk7CiAgICAgaWYgKCFtYXRjaExl
bmd0aCkKICAgICAgICAgcmV0dXJuIHN0ZDo6bWluKGluZGV4LCBvdXJMZW5ndGgpOwogCkBAIC0x
MzE3LDcgKzEzMTMsNyBAQCBzaXplX3QgU3RyaW5nSW1wbDo6cmV2ZXJzZUZpbmRJZ25vcmluZ0Nh
c2UoU3RyaW5nSW1wbCogbWF0Y2hTdHJpbmcsIHVuc2lnbmVkIGluZAogICAgIHJldHVybiByZXZl
cnNlRmluZElnbm9yaW5nQ2FzZUlubmVyKGNoYXJhY3RlcnMxNigpLCBtYXRjaFN0cmluZy0+Y2hh
cmFjdGVyczE2KCksIGluZGV4LCBvdXJMZW5ndGgsIG1hdGNoTGVuZ3RoKTsKIH0KIAotQUxXQVlT
X0lOTElORSBzdGF0aWMgYm9vbCBlcXVhbElubmVyKGNvbnN0IFN0cmluZ0ltcGwqIHN0cmluZ0lt
cGwsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCBjb25zdCBjaGFyKiBtYXRjaFN0cmluZywgdW5zaWdu
ZWQgbWF0Y2hMZW5ndGgsIGJvb2wgY2FzZVNlbnNpdGl2ZSkKK0FMV0FZU19JTkxJTkUgc3RhdGlj
IGJvb2wgZXF1YWxJbm5lcihjb25zdCBTdHJpbmdJbXBsKiBzdHJpbmdJbXBsLCBzaXplX3Qgc3Rh
cnRPZmZzZXQsIGNvbnN0IGNoYXIqIG1hdGNoU3RyaW5nLCBzaXplX3QgbWF0Y2hMZW5ndGgsIGJv
b2wgY2FzZVNlbnNpdGl2ZSkKIHsKICAgICBBU1NFUlQoc3RyaW5nSW1wbCk7CiAgICAgQVNTRVJU
KG1hdGNoTGVuZ3RoIDw9IHN0cmluZ0ltcGwtPmxlbmd0aCgpKTsKQEAgLTEzMjUsMTIgKzEzMjEs
MTIgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgYm9vbCBlcXVhbElubmVyKGNvbnN0IFN0cmluZ0lt
cGwqIHN0cmluZ0ltcGwsIHVuc2lnbmVkIHN0YXIKIAogICAgIGlmIChjYXNlU2Vuc2l0aXZlKSB7
CiAgICAgICAgIGlmIChzdHJpbmdJbXBsLT5pczhCaXQoKSkKLSAgICAgICAgICAgIHJldHVybiBl
cXVhbChzdHJpbmdJbXBsLT5jaGFyYWN0ZXJzOCgpICsgc3RhcnRPZmZzZXQsIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPihtYXRjaFN0cmluZyksIG1hdGNoTGVuZ3RoKTsKLSAgICAgICAg
cmV0dXJuIGVxdWFsKHN0cmluZ0ltcGwtPmNoYXJhY3RlcnMxNigpICsgc3RhcnRPZmZzZXQsIHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihtYXRjaFN0cmluZyksIG1hdGNoTGVuZ3RoKTsK
KyAgICAgICAgICAgIHJldHVybiBlcXVhbChzdHJpbmdJbXBsLT5jaGFyYWN0ZXJzOCgpICsgc3Rh
cnRPZmZzZXQsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihtYXRjaFN0cmluZyksIGNo
ZWNrZWRfY2FzdDx1bnNpZ25lZD4obWF0Y2hMZW5ndGgpKTsKKyAgICAgICAgcmV0dXJuIGVxdWFs
KHN0cmluZ0ltcGwtPmNoYXJhY3RlcnMxNigpICsgc3RhcnRPZmZzZXQsIHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgTENoYXIqPihtYXRjaFN0cmluZyksIGNoZWNrZWRfY2FzdDx1bnNpZ25lZD4obWF0
Y2hMZW5ndGgpKTsKICAgICB9CiAgICAgaWYgKHN0cmluZ0ltcGwtPmlzOEJpdCgpKQotICAgICAg
ICByZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2Uoc3RyaW5nSW1wbC0+Y2hhcmFjdGVyczgoKSArIHN0
YXJ0T2Zmc2V0LCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4obWF0Y2hTdHJpbmcpLCBt
YXRjaExlbmd0aCk7Ci0gICAgcmV0dXJuIGVxdWFsSWdub3JpbmdDYXNlKHN0cmluZ0ltcGwtPmNo
YXJhY3RlcnMxNigpICsgc3RhcnRPZmZzZXQsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIq
PihtYXRjaFN0cmluZyksIG1hdGNoTGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIGVxdWFsSWdub3Jp
bmdDYXNlKHN0cmluZ0ltcGwtPmNoYXJhY3RlcnM4KCkgKyBzdGFydE9mZnNldCwgcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBMQ2hhcio+KG1hdGNoU3RyaW5nKSwgY2hlY2tlZF9jYXN0PHVuc2lnbmVk
PihtYXRjaExlbmd0aCkpOworICAgIHJldHVybiBlcXVhbElnbm9yaW5nQ2FzZShzdHJpbmdJbXBs
LT5jaGFyYWN0ZXJzMTYoKSArIHN0YXJ0T2Zmc2V0LCByZWludGVycHJldF9jYXN0PGNvbnN0IExD
aGFyKj4obWF0Y2hTdHJpbmcpLCBjaGVja2VkX2Nhc3Q8dW5zaWduZWQ+KG1hdGNoTGVuZ3RoKSk7
CiB9CiAKIGJvb2wgU3RyaW5nSW1wbDo6c3RhcnRzV2l0aChjb25zdCBTdHJpbmdJbXBsKiBzdHIp
IGNvbnN0CkBAIC0xMzU2LDcgKzEzNTIsNyBAQCBib29sIFN0cmluZ0ltcGw6OnN0YXJ0c1dpdGgo
VUNoYXIgY2hhcmFjdGVyKSBjb25zdAogICAgIHJldHVybiBtX2xlbmd0aCAmJiAoKnRoaXMpWzBd
ID09IGNoYXJhY3RlcjsKIH0KIAotYm9vbCBTdHJpbmdJbXBsOjpzdGFydHNXaXRoKGNvbnN0IGNo
YXIqIG1hdGNoU3RyaW5nLCB1bnNpZ25lZCBtYXRjaExlbmd0aCwgYm9vbCBjYXNlU2Vuc2l0aXZl
KSBjb25zdAorYm9vbCBTdHJpbmdJbXBsOjpzdGFydHNXaXRoKGNvbnN0IGNoYXIqIG1hdGNoU3Ry
aW5nLCBzaXplX3QgbWF0Y2hMZW5ndGgsIGJvb2wgY2FzZVNlbnNpdGl2ZSkgY29uc3QKIHsKICAg
ICBBU1NFUlQobWF0Y2hMZW5ndGgpOwogICAgIGlmIChtYXRjaExlbmd0aCA+IGxlbmd0aCgpKQpA
QCAtMTM3OSwxMiArMTM3NSwxMiBAQCBib29sIFN0cmluZ0ltcGw6OmVuZHNXaXRoKFVDaGFyIGNo
YXJhY3RlcikgY29uc3QKICAgICByZXR1cm4gbV9sZW5ndGggJiYgKCp0aGlzKVttX2xlbmd0aCAt
IDFdID09IGNoYXJhY3RlcjsKIH0KIAotYm9vbCBTdHJpbmdJbXBsOjplbmRzV2l0aChjb25zdCBj
aGFyKiBtYXRjaFN0cmluZywgdW5zaWduZWQgbWF0Y2hMZW5ndGgsIGJvb2wgY2FzZVNlbnNpdGl2
ZSkgY29uc3QKK2Jvb2wgU3RyaW5nSW1wbDo6ZW5kc1dpdGgoY29uc3QgY2hhciogbWF0Y2hTdHJp
bmcsIHNpemVfdCBtYXRjaExlbmd0aCwgYm9vbCBjYXNlU2Vuc2l0aXZlKSBjb25zdAogewogICAg
IEFTU0VSVChtYXRjaExlbmd0aCk7CiAgICAgaWYgKG1hdGNoTGVuZ3RoID4gbGVuZ3RoKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB1bnNpZ25lZCBzdGFydE9mZnNldCA9IGxlbmd0aCgp
IC0gbWF0Y2hMZW5ndGg7CisgICAgc2l6ZV90IHN0YXJ0T2Zmc2V0ID0gbGVuZ3RoKCkgLSBtYXRj
aExlbmd0aDsKICAgICByZXR1cm4gZXF1YWxJbm5lcih0aGlzLCBzdGFydE9mZnNldCwgbWF0Y2hT
dHJpbmcsIG1hdGNoTGVuZ3RoLCBjYXNlU2Vuc2l0aXZlKTsKIH0KIApAQCAtMTQ0OSwxMSArMTQ0
NSwxMSBAQCBQYXNzUmVmPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnJlcGxhY2UoVUNoYXIgb2xk
QywgVUNoYXIgbmV3QykKICAgICByZXR1cm4gbmV3SW1wbDsKIH0KIAotUGFzc1JlZjxTdHJpbmdJ
bXBsPiBTdHJpbmdJbXBsOjpyZXBsYWNlKHVuc2lnbmVkIHBvc2l0aW9uLCB1bnNpZ25lZCBsZW5n
dGhUb1JlcGxhY2UsIFN0cmluZ0ltcGwqIHN0cikKK1Bhc3NSZWY8U3RyaW5nSW1wbD4gU3RyaW5n
SW1wbDo6cmVwbGFjZShzaXplX3QgcG9zaXRpb24sIHNpemVfdCBsZW5ndGhUb1JlcGxhY2UsIFN0
cmluZ0ltcGwqIHN0cikKIHsKLSAgICBwb3NpdGlvbiA9IHN0ZDo6bWluKHBvc2l0aW9uLCBsZW5n
dGgoKSk7CisgICAgcG9zaXRpb24gPSBzdGQ6Om1pbjxzaXplX3Q+KHBvc2l0aW9uLCBsZW5ndGgo
KSk7CiAgICAgbGVuZ3RoVG9SZXBsYWNlID0gc3RkOjptaW4obGVuZ3RoVG9SZXBsYWNlLCBsZW5n
dGgoKSAtIHBvc2l0aW9uKTsKLSAgICB1bnNpZ25lZCBsZW5ndGhUb0luc2VydCA9IHN0ciA/IHN0
ci0+bGVuZ3RoKCkgOiAwOworICAgIHNpemVfdCBsZW5ndGhUb0luc2VydCA9IHN0ciA/IHN0ci0+
bGVuZ3RoKCkgOiAwOwogICAgIGlmICghbGVuZ3RoVG9SZXBsYWNlICYmICFsZW5ndGhUb0luc2Vy
dCkKICAgICAgICAgcmV0dXJuICp0aGlzOwogCkBAIC0xNTA1LDEyICsxNTAxLDEyIEBAIFBhc3NS
ZWY8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6cmVwbGFjZShVQ2hhciBwYXR0ZXJuLCBTdHJpbmdJ
bXBsKiByZXBsYWNlbWVudCkKICAgICByZXR1cm4gcmVwbGFjZShwYXR0ZXJuLCByZXBsYWNlbWVu
dC0+bV9kYXRhMTYsIHJlcGxhY2VtZW50LT5sZW5ndGgoKSk7CiB9CiAKLVBhc3NSZWY8U3RyaW5n
SW1wbD4gU3RyaW5nSW1wbDo6cmVwbGFjZShVQ2hhciBwYXR0ZXJuLCBjb25zdCBMQ2hhciogcmVw
bGFjZW1lbnQsIHVuc2lnbmVkIHJlcFN0ckxlbmd0aCkKK1Bhc3NSZWY8U3RyaW5nSW1wbD4gU3Ry
aW5nSW1wbDo6cmVwbGFjZShVQ2hhciBwYXR0ZXJuLCBjb25zdCBMQ2hhciogcmVwbGFjZW1lbnQs
IHNpemVfdCByZXBTdHJMZW5ndGgpCiB7CiAgICAgQVNTRVJUKHJlcGxhY2VtZW50KTsKIAogICAg
IHNpemVfdCBzcmNTZWdtZW50U3RhcnQgPSAwOwotICAgIHVuc2lnbmVkIG1hdGNoQ291bnQgPSAw
OworICAgIHNpemVfdCBtYXRjaENvdW50ID0gMDsKIAogICAgIC8vIENvdW50IHRoZSBtYXRjaGVz
LgogICAgIHdoaWxlICgoc3JjU2VnbWVudFN0YXJ0ID0gZmluZChwYXR0ZXJuLCBzcmNTZWdtZW50
U3RhcnQpKSAhPSBub3RGb3VuZCkgewpAQCAtMTUyNSw4ICsxNTIxLDggQEAgUGFzc1JlZjxTdHJp
bmdJbXBsPiBTdHJpbmdJbXBsOjpyZXBsYWNlKFVDaGFyIHBhdHRlcm4sIGNvbnN0IExDaGFyKiBy
ZXBsYWNlbWVudCwKICAgICBpZiAocmVwU3RyTGVuZ3RoICYmIG1hdGNoQ291bnQgPiBzdGQ6Om51
bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgLyByZXBTdHJMZW5ndGgpCiAgICAgICAgIENS
QVNIKCk7CiAKLSAgICB1bnNpZ25lZCByZXBsYWNlU2l6ZSA9IG1hdGNoQ291bnQgKiByZXBTdHJM
ZW5ndGg7Ci0gICAgdW5zaWduZWQgbmV3U2l6ZSA9IG1fbGVuZ3RoIC0gbWF0Y2hDb3VudDsKKyAg
ICBzaXplX3QgcmVwbGFjZVNpemUgPSBtYXRjaENvdW50ICogcmVwU3RyTGVuZ3RoOworICAgIHNp
emVfdCBuZXdTaXplID0gbV9sZW5ndGggLSBtYXRjaENvdW50OwogICAgIGlmIChuZXdTaXplID49
IChzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgLSByZXBsYWNlU2l6ZSkpCiAg
ICAgICAgIENSQVNIKCk7CiAKQEAgLTE1MzQsOSArMTUzMCw5IEBAIFBhc3NSZWY8U3RyaW5nSW1w
bD4gU3RyaW5nSW1wbDo6cmVwbGFjZShVQ2hhciBwYXR0ZXJuLCBjb25zdCBMQ2hhciogcmVwbGFj
ZW1lbnQsCiAKICAgICAvLyBDb25zdHJ1Y3QgdGhlIG5ldyBkYXRhLgogICAgIHNpemVfdCBzcmNT
ZWdtZW50RW5kOwotICAgIHVuc2lnbmVkIHNyY1NlZ21lbnRMZW5ndGg7CisgICAgc2l6ZV90IHNy
Y1NlZ21lbnRMZW5ndGg7CiAgICAgc3JjU2VnbWVudFN0YXJ0ID0gMDsKLSAgICB1bnNpZ25lZCBk
c3RPZmZzZXQgPSAwOworICAgIHNpemVfdCBkc3RPZmZzZXQgPSAwOwogCiAgICAgaWYgKGlzOEJp
dCgpKSB7CiAgICAgICAgIExDaGFyKiBkYXRhOwpAQCAtMTU4MiwxMiArMTU3OCwxMiBAQCBQYXNz
UmVmPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnJlcGxhY2UoVUNoYXIgcGF0dGVybiwgY29uc3Qg
TENoYXIqIHJlcGxhY2VtZW50LAogICAgIHJldHVybiBuZXdJbXBsOwogfQogCi1QYXNzUmVmPFN0
cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnJlcGxhY2UoVUNoYXIgcGF0dGVybiwgY29uc3QgVUNoYXIq
IHJlcGxhY2VtZW50LCB1bnNpZ25lZCByZXBTdHJMZW5ndGgpCitQYXNzUmVmPFN0cmluZ0ltcGw+
IFN0cmluZ0ltcGw6OnJlcGxhY2UoVUNoYXIgcGF0dGVybiwgY29uc3QgVUNoYXIqIHJlcGxhY2Vt
ZW50LCBzaXplX3QgcmVwU3RyTGVuZ3RoKQogewogICAgIEFTU0VSVChyZXBsYWNlbWVudCk7CiAK
ICAgICBzaXplX3Qgc3JjU2VnbWVudFN0YXJ0ID0gMDsKLSAgICB1bnNpZ25lZCBtYXRjaENvdW50
ID0gMDsKKyAgICBzaXplX3QgbWF0Y2hDb3VudCA9IDA7CiAKICAgICAvLyBDb3VudCB0aGUgbWF0
Y2hlcy4KICAgICB3aGlsZSAoKHNyY1NlZ21lbnRTdGFydCA9IGZpbmQocGF0dGVybiwgc3JjU2Vn
bWVudFN0YXJ0KSkgIT0gbm90Rm91bmQpIHsKQEAgLTE2MDIsOCArMTU5OCw4IEBAIFBhc3NSZWY8
U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6cmVwbGFjZShVQ2hhciBwYXR0ZXJuLCBjb25zdCBVQ2hh
ciogcmVwbGFjZW1lbnQsCiAgICAgaWYgKHJlcFN0ckxlbmd0aCAmJiBtYXRjaENvdW50ID4gc3Rk
OjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIC8gcmVwU3RyTGVuZ3RoKQogICAgICAg
ICBDUkFTSCgpOwogCi0gICAgdW5zaWduZWQgcmVwbGFjZVNpemUgPSBtYXRjaENvdW50ICogcmVw
U3RyTGVuZ3RoOwotICAgIHVuc2lnbmVkIG5ld1NpemUgPSBtX2xlbmd0aCAtIG1hdGNoQ291bnQ7
CisgICAgc2l6ZV90IHJlcGxhY2VTaXplID0gbWF0Y2hDb3VudCAqIHJlcFN0ckxlbmd0aDsKKyAg
ICBzaXplX3QgbmV3U2l6ZSA9IG1fbGVuZ3RoIC0gbWF0Y2hDb3VudDsKICAgICBpZiAobmV3U2l6
ZSA+PSAoc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIC0gcmVwbGFjZVNpemUp
KQogICAgICAgICBDUkFTSCgpOwogCkBAIC0xNjExLDkgKzE2MDcsOSBAQCBQYXNzUmVmPFN0cmlu
Z0ltcGw+IFN0cmluZ0ltcGw6OnJlcGxhY2UoVUNoYXIgcGF0dGVybiwgY29uc3QgVUNoYXIqIHJl
cGxhY2VtZW50LAogCiAgICAgLy8gQ29uc3RydWN0IHRoZSBuZXcgZGF0YS4KICAgICBzaXplX3Qg
c3JjU2VnbWVudEVuZDsKLSAgICB1bnNpZ25lZCBzcmNTZWdtZW50TGVuZ3RoOworICAgIHNpemVf
dCBzcmNTZWdtZW50TGVuZ3RoOwogICAgIHNyY1NlZ21lbnRTdGFydCA9IDA7Ci0gICAgdW5zaWdu
ZWQgZHN0T2Zmc2V0ID0gMDsKKyAgICBzaXplX3QgZHN0T2Zmc2V0ID0gMDsKIAogICAgIGlmIChp
czhCaXQoKSkgewogICAgICAgICBVQ2hhciogZGF0YTsKQEAgLTE2MjEsNyArMTYxNyw3IEBAIFBh
c3NSZWY8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6cmVwbGFjZShVQ2hhciBwYXR0ZXJuLCBjb25z
dCBVQ2hhciogcmVwbGFjZW1lbnQsCiAKICAgICAgICAgd2hpbGUgKChzcmNTZWdtZW50RW5kID0g
ZmluZChwYXR0ZXJuLCBzcmNTZWdtZW50U3RhcnQpKSAhPSBub3RGb3VuZCkgewogICAgICAgICAg
ICAgc3JjU2VnbWVudExlbmd0aCA9IHNyY1NlZ21lbnRFbmQgLSBzcmNTZWdtZW50U3RhcnQ7Ci0g
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3JjU2VnbWVudExlbmd0aDsgKytp
KQorICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzcmNTZWdtZW50TGVuZ3RoOyAr
K2kpCiAgICAgICAgICAgICAgICAgZGF0YVtpICsgZHN0T2Zmc2V0XSA9IG1fZGF0YThbaSArIHNy
Y1NlZ21lbnRTdGFydF07CiAKICAgICAgICAgICAgIGRzdE9mZnNldCArPSBzcmNTZWdtZW50TGVu
Z3RoOwpAQCAtMTYzMiw3ICsxNjI4LDcgQEAgUGFzc1JlZjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBs
OjpyZXBsYWNlKFVDaGFyIHBhdHRlcm4sIGNvbnN0IFVDaGFyKiByZXBsYWNlbWVudCwKICAgICAg
ICAgfQogCiAgICAgICAgIHNyY1NlZ21lbnRMZW5ndGggPSBtX2xlbmd0aCAtIHNyY1NlZ21lbnRT
dGFydDsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNyY1NlZ21lbnRMZW5ndGg7
ICsraSkKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzcmNTZWdtZW50TGVuZ3RoOyAr
K2kpCiAgICAgICAgICAgICBkYXRhW2kgKyBkc3RPZmZzZXRdID0gbV9kYXRhOFtpICsgc3JjU2Vn
bWVudFN0YXJ0XTsKIAogICAgICAgICBBU1NFUlQoZHN0T2Zmc2V0ICsgc3JjU2VnbWVudExlbmd0
aCA9PSBuZXdJbXBsLmdldCgpLmxlbmd0aCgpKTsKQEAgLTE2NjcsMTMgKzE2NjMsMTMgQEAgUGFz
c1JlZjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpyZXBsYWNlKFN0cmluZ0ltcGwqIHBhdHRlcm4s
IFN0cmluZ0ltcGwqIHJlcGxhY2UKICAgICBpZiAoIXBhdHRlcm4gfHwgIXJlcGxhY2VtZW50KQog
ICAgICAgICByZXR1cm4gKnRoaXM7CiAKLSAgICB1bnNpZ25lZCBwYXR0ZXJuTGVuZ3RoID0gcGF0
dGVybi0+bGVuZ3RoKCk7CisgICAgc2l6ZV90IHBhdHRlcm5MZW5ndGggPSBwYXR0ZXJuLT5sZW5n
dGgoKTsKICAgICBpZiAoIXBhdHRlcm5MZW5ndGgpCiAgICAgICAgIHJldHVybiAqdGhpczsKICAg
ICAgICAgCi0gICAgdW5zaWduZWQgcmVwU3RyTGVuZ3RoID0gcmVwbGFjZW1lbnQtPmxlbmd0aCgp
OworICAgIHNpemVfdCByZXBTdHJMZW5ndGggPSByZXBsYWNlbWVudC0+bGVuZ3RoKCk7CiAgICAg
c2l6ZV90IHNyY1NlZ21lbnRTdGFydCA9IDA7Ci0gICAgdW5zaWduZWQgbWF0Y2hDb3VudCA9IDA7
CisgICAgc2l6ZV90IG1hdGNoQ291bnQgPSAwOwogICAgIAogICAgIC8vIENvdW50IHRoZSBtYXRj
aGVzLgogICAgIHdoaWxlICgoc3JjU2VnbWVudFN0YXJ0ID0gZmluZChwYXR0ZXJuLCBzcmNTZWdt
ZW50U3RhcnQpKSAhPSBub3RGb3VuZCkgewpAQCAtMTY4NSw3ICsxNjgxLDcgQEAgUGFzc1JlZjxT
dHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpyZXBsYWNlKFN0cmluZ0ltcGwqIHBhdHRlcm4sIFN0cmlu
Z0ltcGwqIHJlcGxhY2UKICAgICBpZiAoIW1hdGNoQ291bnQpCiAgICAgICAgIHJldHVybiAqdGhp
czsKICAgICAKLSAgICB1bnNpZ25lZCBuZXdTaXplID0gbV9sZW5ndGggLSBtYXRjaENvdW50ICog
cGF0dGVybkxlbmd0aDsKKyAgICBzaXplX3QgbmV3U2l6ZSA9IG1fbGVuZ3RoIC0gbWF0Y2hDb3Vu
dCAqIHBhdHRlcm5MZW5ndGg7CiAgICAgaWYgKHJlcFN0ckxlbmd0aCAmJiBtYXRjaENvdW50ID4g
c3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIC8gcmVwU3RyTGVuZ3RoKQogICAg
ICAgICBDUkFTSCgpOwogCkBAIC0xNjk3LDkgKzE2OTMsOSBAQCBQYXNzUmVmPFN0cmluZ0ltcGw+
IFN0cmluZ0ltcGw6OnJlcGxhY2UoU3RyaW5nSW1wbCogcGF0dGVybiwgU3RyaW5nSW1wbCogcmVw
bGFjZQogICAgIAogICAgIC8vIENvbnN0cnVjdCB0aGUgbmV3IGRhdGEKICAgICBzaXplX3Qgc3Jj
U2VnbWVudEVuZDsKLSAgICB1bnNpZ25lZCBzcmNTZWdtZW50TGVuZ3RoOworICAgIHNpemVfdCBz
cmNTZWdtZW50TGVuZ3RoOwogICAgIHNyY1NlZ21lbnRTdGFydCA9IDA7Ci0gICAgdW5zaWduZWQg
ZHN0T2Zmc2V0ID0gMDsKKyAgICBzaXplX3QgZHN0T2Zmc2V0ID0gMDsKICAgICBib29sIHNyY0lz
OEJpdCA9IGlzOEJpdCgpOwogICAgIGJvb2wgcmVwbGFjZW1lbnRJczhCaXQgPSByZXBsYWNlbWVu
dC0+aXM4Qml0KCk7CiAgICAgCkBAIC0xODAwLDcgKzE3OTYsNyBAQCBib29sIGVxdWFsKGNvbnN0
IFN0cmluZ0ltcGwqIGEsIGNvbnN0IFN0cmluZ0ltcGwqIGIpCiB9CiAKIHRlbXBsYXRlIDx0eXBl
bmFtZSBDaGFyVHlwZT4KLWlubGluZSBib29sIGVxdWFsSW50ZXJuYWwoY29uc3QgU3RyaW5nSW1w
bCogYSwgY29uc3QgQ2hhclR5cGUqIGIsIHVuc2lnbmVkIGxlbmd0aCkKK2lubGluZSBib29sIGVx
dWFsSW50ZXJuYWwoY29uc3QgU3RyaW5nSW1wbCogYSwgY29uc3QgQ2hhclR5cGUqIGIsIHNpemVf
dCBsZW5ndGgpCiB7CiAgICAgaWYgKCFhKQogICAgICAgICByZXR1cm4gIWI7CkBAIC0xODEwLDE2
ICsxODA2LDE2IEBAIGlubGluZSBib29sIGVxdWFsSW50ZXJuYWwoY29uc3QgU3RyaW5nSW1wbCog
YSwgY29uc3QgQ2hhclR5cGUqIGIsIHVuc2lnbmVkIGxlbmd0CiAgICAgaWYgKGEtPmxlbmd0aCgp
ICE9IGxlbmd0aCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChhLT5pczhCaXQoKSkK
LSAgICAgICAgcmV0dXJuIGVxdWFsKGEtPmNoYXJhY3RlcnM4KCksIGIsIGxlbmd0aCk7Ci0gICAg
cmV0dXJuIGVxdWFsKGEtPmNoYXJhY3RlcnMxNigpLCBiLCBsZW5ndGgpOworICAgICAgICByZXR1
cm4gZXF1YWwoYS0+Y2hhcmFjdGVyczgoKSwgYiwgY2hlY2tlZF9jYXN0PHVuc2lnbmVkPihsZW5n
dGgpKTsKKyAgICByZXR1cm4gZXF1YWwoYS0+Y2hhcmFjdGVyczE2KCksIGIsIGNoZWNrZWRfY2Fz
dDx1bnNpZ25lZD4obGVuZ3RoKSk7CiB9CiAKLWJvb2wgZXF1YWwoY29uc3QgU3RyaW5nSW1wbCog
YSwgY29uc3QgTENoYXIqIGIsIHVuc2lnbmVkIGxlbmd0aCkKK2Jvb2wgZXF1YWwoY29uc3QgU3Ry
aW5nSW1wbCogYSwgY29uc3QgTENoYXIqIGIsIHNpemVfdCBsZW5ndGgpCiB7CiAgICAgcmV0dXJu
IGVxdWFsSW50ZXJuYWwoYSwgYiwgbGVuZ3RoKTsKIH0KIAotYm9vbCBlcXVhbChjb25zdCBTdHJp
bmdJbXBsKiBhLCBjb25zdCBVQ2hhciogYiwgdW5zaWduZWQgbGVuZ3RoKQorYm9vbCBlcXVhbChj
b25zdCBTdHJpbmdJbXBsKiBhLCBjb25zdCBVQ2hhciogYiwgc2l6ZV90IGxlbmd0aCkKIHsKICAg
ICByZXR1cm4gZXF1YWxJbnRlcm5hbChhLCBiLCBsZW5ndGgpOwogfQpAQCAtMTk4NSw3ICsxOTgx
LDcgQEAgVUNoYXJEaXJlY3Rpb24gU3RyaW5nSW1wbDo6ZGVmYXVsdFdyaXRpbmdEaXJlY3Rpb24o
Ym9vbCogaGFzU3Ryb25nRGlyZWN0aW9uYWxpdHkKIAogUGFzc1JlZjxTdHJpbmdJbXBsPiBTdHJp
bmdJbXBsOjphZG9wdChTdHJpbmdCdWZmZXI8TENoYXI+JiBidWZmZXIpCiB7Ci0gICAgdW5zaWdu
ZWQgbGVuZ3RoID0gYnVmZmVyLmxlbmd0aCgpOworICAgIHNpemVfdCBsZW5ndGggPSBidWZmZXIu
bGVuZ3RoKCk7CiAgICAgaWYgKCFsZW5ndGgpCiAgICAgICAgIHJldHVybiAqZW1wdHkoKTsKICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTdHJpbmdJbXBsKGJ1ZmZlci5yZWxlYXNlKCksIGxlbmd0
aCkpOwpAQCAtMTk5Myw3ICsxOTg5LDcgQEAgUGFzc1JlZjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBs
OjphZG9wdChTdHJpbmdCdWZmZXI8TENoYXI+JiBidWZmZXIpCiAKIFBhc3NSZWY8U3RyaW5nSW1w
bD4gU3RyaW5nSW1wbDo6YWRvcHQoU3RyaW5nQnVmZmVyPFVDaGFyPiYgYnVmZmVyKQogewotICAg
IHVuc2lnbmVkIGxlbmd0aCA9IGJ1ZmZlci5sZW5ndGgoKTsKKyAgICBzaXplX3QgbGVuZ3RoID0g
YnVmZmVyLmxlbmd0aCgpOwogICAgIGlmICghbGVuZ3RoKQogICAgICAgICByZXR1cm4gKmVtcHR5
KCk7CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU3RyaW5nSW1wbChidWZmZXIucmVsZWFzZSgp
LCBsZW5ndGgpKTsKQEAgLTIwMjIsNyArMjAxOCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwdXRV
VEY4VHJpcGxlKGNoYXIqJiBidWZmZXIsIFVDaGFyIGNoKQogfQogCiBib29sIFN0cmluZ0ltcGw6
OnV0ZjhJbXBsKAotICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgs
IGNoYXIqJiBidWZmZXIsIHNpemVfdCBidWZmZXJTaXplLCBDb252ZXJzaW9uTW9kZSBtb2RlKQor
ICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBjaGFyKiYgYnVmZmVy
LCBzaXplX3QgYnVmZmVyU2l6ZSwgQ29udmVyc2lvbk1vZGUgbW9kZSkKIHsKICAgICBpZiAobW9k
ZSA9PSBTdHJpY3RDb252ZXJzaW9uUmVwbGFjaW5nVW5wYWlyZWRTdXJyb2dhdGVzV2l0aEZGRkQp
IHsKICAgICAgICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnNFbmQgPSBjaGFyYWN0ZXJzICsgbGVu
Z3RoOwpAQCAtMjA3NCw3ICsyMDcwLDcgQEAgYm9vbCBTdHJpbmdJbXBsOjp1dGY4SW1wbCgKIH0K
IAogQ1N0cmluZyBTdHJpbmdJbXBsOjp1dGY4Rm9yQ2hhcmFjdGVycygKLSAgICBjb25zdCBVQ2hh
ciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBDb252ZXJzaW9uTW9kZSBtb2RlKQorICAg
IGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBDb252ZXJzaW9uTW9kZSBt
b2RlKQogewogICAgIGlmICghbGVuZ3RoKQogICAgICAgICByZXR1cm4gQ1N0cmluZygiIiwgMCk7
CkBAIC0yMDg3LDcgKzIwODMsNyBAQCBDU3RyaW5nIFN0cmluZ0ltcGw6OnV0ZjhGb3JDaGFyYWN0
ZXJzKAogICAgIHJldHVybiBDU3RyaW5nKGJ1ZmZlclZlY3Rvci5kYXRhKCksIGJ1ZmZlciAtIGJ1
ZmZlclZlY3Rvci5kYXRhKCkpOwogfQogCi1DU3RyaW5nIFN0cmluZ0ltcGw6OnV0ZjhGb3JSYW5n
ZSh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgQ29udmVyc2lvbk1vZGUgbW9kZSkg
Y29uc3QKK0NTdHJpbmcgU3RyaW5nSW1wbDo6dXRmOEZvclJhbmdlKHNpemVfdCBvZmZzZXQsIHNp
emVfdCBsZW5ndGgsIENvbnZlcnNpb25Nb2RlIG1vZGUpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG9m
ZnNldCA8PSB0aGlzLT5sZW5ndGgoKSk7CiAgICAgQVNTRVJUKG9mZnNldCArIGxlbmd0aCA8PSB0
aGlzLT5sZW5ndGgoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0lt
cGwuaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5oCmluZGV4IDAyODUyMTBkOWMz
NzE5NjJjNmI2OTA3MGIzZTJhZjhmYThiM2I5NWMuLjIyYjY0NTA4NDA1M2ViYTc4NTZhMDAyNzZj
ZjU0ODgxNmNmZDg1MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1w
bC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5oCkBAIC0xNTgsOSArMTU4
LDkgQEAgcHJpdmF0ZToKICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgdGhlIHN0YXRpYyBzdHJpbmcg
d2lsbCBuZXZlciBiZSBkZXN0cm95ZWQsIHdoaWNoIGlzIGltcG9ydGFudCBiZWNhdXNlCiAgICAg
Ly8gc3RhdGljIHN0cmluZ3Mgd2lsbCBiZSBzaGFyZWQgYWNyb3NzIHRocmVhZHMgJiByZWYtY291
bnRlZCBpbiBhIG5vbi10aHJlYWRzYWZlIG1hbm5lci4KICAgICBlbnVtIENvbnN0cnVjdFN0YXRp
Y1N0cmluZ1RhZyB7IENvbnN0cnVjdFN0YXRpY1N0cmluZyB9OwotICAgIFN0cmluZ0ltcGwoY29u
c3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgQ29uc3RydWN0U3RhdGljU3Ry
aW5nVGFnKQorICAgIFN0cmluZ0ltcGwoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBs
ZW5ndGgsIENvbnN0cnVjdFN0YXRpY1N0cmluZ1RhZykKICAgICAgICAgOiBtX3JlZkNvdW50KHNf
cmVmQ291bnRGbGFnSXNTdGF0aWNTdHJpbmcpCi0gICAgICAgICwgbV9sZW5ndGgobGVuZ3RoKQor
ICAgICAgICAsIG1fbGVuZ3RoKGNoZWNrZWRfY2FzdDx1bnNpZ25lZD4obGVuZ3RoKSkKICAgICAg
ICAgLCBtX2RhdGExNihjaGFyYWN0ZXJzKQogICAgICAgICAsIG1faGFzaEFuZEZsYWdzKHNfaGFz
aEZsYWdJc0lkZW50aWZpZXIgfCBCdWZmZXJPd25lZCkKICAgICB7CkBAIC0xNzUsOSArMTc1LDkg
QEAgcHJpdmF0ZToKICAgICAvLyBVc2VkIHRvIGNvbnN0cnVjdCBzdGF0aWMgc3RyaW5ncywgd2hp
Y2ggaGF2ZSBhbiBzcGVjaWFsIHJlZkNvdW50IHRoYXQgY2FuIG5ldmVyIGhpdCB6ZXJvLgogICAg
IC8vIFRoaXMgbWVhbnMgdGhhdCB0aGUgc3RhdGljIHN0cmluZyB3aWxsIG5ldmVyIGJlIGRlc3Ry
b3llZCwgd2hpY2ggaXMgaW1wb3J0YW50IGJlY2F1c2UKICAgICAvLyBzdGF0aWMgc3RyaW5ncyB3
aWxsIGJlIHNoYXJlZCBhY3Jvc3MgdGhyZWFkcyAmIHJlZi1jb3VudGVkIGluIGEgbm9uLXRocmVh
ZHNhZmUgbWFubmVyLgotICAgIFN0cmluZ0ltcGwoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHVu
c2lnbmVkIGxlbmd0aCwgQ29uc3RydWN0U3RhdGljU3RyaW5nVGFnKQorICAgIFN0cmluZ0ltcGwo
Y29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIENvbnN0cnVjdFN0YXRpY1N0
cmluZ1RhZykKICAgICAgICAgOiBtX3JlZkNvdW50KHNfcmVmQ291bnRGbGFnSXNTdGF0aWNTdHJp
bmcpCi0gICAgICAgICwgbV9sZW5ndGgobGVuZ3RoKQorICAgICAgICAsIG1fbGVuZ3RoKGNoZWNr
ZWRfY2FzdDx1bnNpZ25lZD4obGVuZ3RoKSkKICAgICAgICAgLCBtX2RhdGE4KGNoYXJhY3RlcnMp
CiAgICAgICAgICwgbV9oYXNoQW5kRmxhZ3Moc19oYXNoRmxhZzhCaXRCdWZmZXIgfCBzX2hhc2hG
bGFnSXNJZGVudGlmaWVyIHwgQnVmZmVyT3duZWQpCiAgICAgewpAQCAtMTkyLDkgKzE5Miw5IEBA
IHByaXZhdGU6CiAgICAgLy8gRklYTUU6IHRoZXJlIGhhcyB0byBiZSBhIGxlc3MgaGFja3kgd2F5
IHRvIGRvIHRoaXMuCiAgICAgZW51bSBGb3JjZThCaXQgeyBGb3JjZThCaXRDb25zdHJ1Y3RvciB9
OwogICAgIC8vIENyZWF0ZSBhIG5vcm1hbCA4LWJpdCBzdHJpbmcgd2l0aCBpbnRlcm5hbCBzdG9y
YWdlIChCdWZmZXJJbnRlcm5hbCkKLSAgICBTdHJpbmdJbXBsKHVuc2lnbmVkIGxlbmd0aCwgRm9y
Y2U4Qml0KQorICAgIFN0cmluZ0ltcGwoc2l6ZV90IGxlbmd0aCwgRm9yY2U4Qml0KQogICAgICAg
ICA6IG1fcmVmQ291bnQoc19yZWZDb3VudEluY3JlbWVudCkKLSAgICAgICAgLCBtX2xlbmd0aChs
ZW5ndGgpCisgICAgICAgICwgbV9sZW5ndGgoY2hlY2tlZF9jYXN0PHVuc2lnbmVkPihsZW5ndGgp
KQogICAgICAgICAsIG1fZGF0YTgodGFpbFBvaW50ZXI8TENoYXI+KCkpCiAgICAgICAgICwgbV9o
YXNoQW5kRmxhZ3Moc19oYXNoRmxhZzhCaXRCdWZmZXIgfCBCdWZmZXJJbnRlcm5hbCkKICAgICB7
CkBAIC0yMDUsOSArMjA1LDkgQEAgcHJpdmF0ZToKICAgICB9CiAKICAgICAvLyBDcmVhdGUgYSBu
b3JtYWwgMTYtYml0IHN0cmluZyB3aXRoIGludGVybmFsIHN0b3JhZ2UgKEJ1ZmZlckludGVybmFs
KQotICAgIFN0cmluZ0ltcGwodW5zaWduZWQgbGVuZ3RoKQorICAgIFN0cmluZ0ltcGwoc2l6ZV90
IGxlbmd0aCkKICAgICAgICAgOiBtX3JlZkNvdW50KHNfcmVmQ291bnRJbmNyZW1lbnQpCi0gICAg
ICAgICwgbV9sZW5ndGgobGVuZ3RoKQorICAgICAgICAsIG1fbGVuZ3RoKGNoZWNrZWRfY2FzdDx1
bnNpZ25lZD4obGVuZ3RoKSkKICAgICAgICAgLCBtX2RhdGExNih0YWlsUG9pbnRlcjxVQ2hhcj4o
KSkKICAgICAgICAgLCBtX2hhc2hBbmRGbGFncyhCdWZmZXJJbnRlcm5hbCkKICAgICB7CkBAIC0y
MTgsOSArMjE4LDkgQEAgcHJpdmF0ZToKICAgICB9CiAKICAgICAvLyBDcmVhdGUgYSBTdHJpbmdJ
bXBsIGFkb3B0aW5nIG93bmVyc2hpcCBvZiB0aGUgcHJvdmlkZWQgYnVmZmVyIChCdWZmZXJPd25l
ZCkKLSAgICBTdHJpbmdJbXBsKE1hbGxvY1B0cjxMQ2hhcj4gY2hhcmFjdGVycywgdW5zaWduZWQg
bGVuZ3RoKQorICAgIFN0cmluZ0ltcGwoTWFsbG9jUHRyPExDaGFyPiBjaGFyYWN0ZXJzLCBzaXpl
X3QgbGVuZ3RoKQogICAgICAgICA6IG1fcmVmQ291bnQoc19yZWZDb3VudEluY3JlbWVudCkKLSAg
ICAgICAgLCBtX2xlbmd0aChsZW5ndGgpCisgICAgICAgICwgbV9sZW5ndGgoY2hlY2tlZF9jYXN0
PHVuc2lnbmVkPihsZW5ndGgpKQogICAgICAgICAsIG1fZGF0YTgoY2hhcmFjdGVycy5sZWFrUHRy
KCkpCiAgICAgICAgICwgbV9oYXNoQW5kRmxhZ3Moc19oYXNoRmxhZzhCaXRCdWZmZXIgfCBCdWZm
ZXJPd25lZCkKICAgICB7CkBAIC0yMzEsOSArMjMxLDkgQEAgcHJpdmF0ZToKICAgICB9CiAKICAg
ICBlbnVtIENvbnN0cnVjdFdpdGhvdXRDb3B5aW5nVGFnIHsgQ29uc3RydWN0V2l0aG91dENvcHlp
bmcgfTsKLSAgICBTdHJpbmdJbXBsKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBs
ZW5ndGgsIENvbnN0cnVjdFdpdGhvdXRDb3B5aW5nVGFnKQorICAgIFN0cmluZ0ltcGwoY29uc3Qg
VUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIENvbnN0cnVjdFdpdGhvdXRDb3B5aW5n
VGFnKQogICAgICAgICA6IG1fcmVmQ291bnQoc19yZWZDb3VudEluY3JlbWVudCkKLSAgICAgICAg
LCBtX2xlbmd0aChsZW5ndGgpCisgICAgICAgICwgbV9sZW5ndGgoY2hlY2tlZF9jYXN0PHVuc2ln
bmVkPihsZW5ndGgpKQogICAgICAgICAsIG1fZGF0YTE2KGNoYXJhY3RlcnMpCiAgICAgICAgICwg
bV9oYXNoQW5kRmxhZ3MoQnVmZmVySW50ZXJuYWwpCiAgICAgewpAQCAtMjQzLDkgKzI0Myw5IEBA
IHByaXZhdGU6CiAgICAgICAgIFNUUklOR19TVEFUU19BRERfMTZCSVRfU1RSSU5HKDApOwogICAg
IH0KIAotICAgIFN0cmluZ0ltcGwoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxl
bmd0aCwgQ29uc3RydWN0V2l0aG91dENvcHlpbmdUYWcpCisgICAgU3RyaW5nSW1wbChjb25zdCBM
Q2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgQ29uc3RydWN0V2l0aG91dENvcHlpbmdU
YWcpCiAgICAgICAgIDogbV9yZWZDb3VudChzX3JlZkNvdW50SW5jcmVtZW50KQotICAgICAgICAs
IG1fbGVuZ3RoKGxlbmd0aCkKKyAgICAgICAgLCBtX2xlbmd0aChjaGVja2VkX2Nhc3Q8dW5zaWdu
ZWQ+KGxlbmd0aCkpCiAgICAgICAgICwgbV9kYXRhOChjaGFyYWN0ZXJzKQogICAgICAgICAsIG1f
aGFzaEFuZEZsYWdzKHNfaGFzaEZsYWc4Qml0QnVmZmVyIHwgQnVmZmVySW50ZXJuYWwpCiAgICAg
ewpAQCAtMjU2LDkgKzI1Niw5IEBAIHByaXZhdGU6CiAgICAgfQogCiAgICAgLy8gQ3JlYXRlIGEg
U3RyaW5nSW1wbCBhZG9wdGluZyBvd25lcnNoaXAgb2YgdGhlIHByb3ZpZGVkIGJ1ZmZlciAoQnVm
ZmVyT3duZWQpCi0gICAgU3RyaW5nSW1wbChNYWxsb2NQdHI8VUNoYXI+IGNoYXJhY3RlcnMsIHVu
c2lnbmVkIGxlbmd0aCkKKyAgICBTdHJpbmdJbXBsKE1hbGxvY1B0cjxVQ2hhcj4gY2hhcmFjdGVy
cywgc2l6ZV90IGxlbmd0aCkKICAgICAgICAgOiBtX3JlZkNvdW50KHNfcmVmQ291bnRJbmNyZW1l
bnQpCi0gICAgICAgICwgbV9sZW5ndGgobGVuZ3RoKQorICAgICAgICAsIG1fbGVuZ3RoKGNoZWNr
ZWRfY2FzdDx1bnNpZ25lZD4obGVuZ3RoKSkKICAgICAgICAgLCBtX2RhdGExNihjaGFyYWN0ZXJz
LmxlYWtQdHIoKSkKICAgICAgICAgLCBtX2hhc2hBbmRGbGFncyhCdWZmZXJPd25lZCkKICAgICB7
CkBAIC0yNjksOSArMjY5LDkgQEAgcHJpdmF0ZToKICAgICB9CiAKICAgICAvLyBVc2VkIHRvIGNy
ZWF0ZSBuZXcgc3RyaW5ncyB0aGF0IGFyZSBhIHN1YnN0cmluZyBvZiBhbiBleGlzdGluZyA4LWJp
dCBTdHJpbmdJbXBsIChCdWZmZXJTdWJzdHJpbmcpCi0gICAgU3RyaW5nSW1wbChjb25zdCBMQ2hh
ciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGJh
c2UpCisgICAgU3RyaW5nSW1wbChjb25zdCBMQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0
aCwgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBiYXNlKQogICAgICAgICA6IG1fcmVmQ291bnQoc19y
ZWZDb3VudEluY3JlbWVudCkKLSAgICAgICAgLCBtX2xlbmd0aChsZW5ndGgpCisgICAgICAgICwg
bV9sZW5ndGgoY2hlY2tlZF9jYXN0PHVuc2lnbmVkPihsZW5ndGgpKQogICAgICAgICAsIG1fZGF0
YTgoY2hhcmFjdGVycykKICAgICAgICAgLCBtX2hhc2hBbmRGbGFncyhzX2hhc2hGbGFnOEJpdEJ1
ZmZlciB8IEJ1ZmZlclN1YnN0cmluZykKICAgICB7CkBAIC0yODYsOSArMjg2LDkgQEAgcHJpdmF0
ZToKICAgICB9CiAKICAgICAvLyBVc2VkIHRvIGNyZWF0ZSBuZXcgc3RyaW5ncyB0aGF0IGFyZSBh
IHN1YnN0cmluZyBvZiBhbiBleGlzdGluZyAxNi1iaXQgU3RyaW5nSW1wbCAoQnVmZmVyU3Vic3Ry
aW5nKQotICAgIFN0cmluZ0ltcGwoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxl
bmd0aCwgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBiYXNlKQorICAgIFN0cmluZ0ltcGwoY29uc3Qg
VUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4g
YmFzZSkKICAgICAgICAgOiBtX3JlZkNvdW50KHNfcmVmQ291bnRJbmNyZW1lbnQpCi0gICAgICAg
ICwgbV9sZW5ndGgobGVuZ3RoKQorICAgICAgICAsIG1fbGVuZ3RoKGNoZWNrZWRfY2FzdDx1bnNp
Z25lZD4obGVuZ3RoKSkKICAgICAgICAgLCBtX2RhdGExNihjaGFyYWN0ZXJzKQogICAgICAgICAs
IG1faGFzaEFuZEZsYWdzKEJ1ZmZlclN1YnN0cmluZykKICAgICB7CkBAIC0zMzAsOSArMzMwLDkg
QEAgcHJpdmF0ZToKIHB1YmxpYzoKICAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgc3RhdGljIHZv
aWQgZGVzdHJveShTdHJpbmdJbXBsKik7CiAKLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgc3Rh
dGljIFBhc3NSZWY8U3RyaW5nSW1wbD4gY3JlYXRlKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQgbGVu
Z3RoKTsKLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgc3RhdGljIFBhc3NSZWY8U3RyaW5nSW1w
bD4gY3JlYXRlKGNvbnN0IExDaGFyKiwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICBXVEZfRVhQT1JU
X1NUUklOR19BUEkgc3RhdGljIFBhc3NSZWY8U3RyaW5nSW1wbD4gY3JlYXRlOEJpdElmUG9zc2li
bGUoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgpOworICAgIFdURl9FWFBPUlRfU1RSSU5H
X0FQSSBzdGF0aWMgUGFzc1JlZjxTdHJpbmdJbXBsPiBjcmVhdGUoY29uc3QgVUNoYXIqLCBzaXpl
X3QgbGVuZ3RoKTsKKyAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgc3RhdGljIFBhc3NSZWY8U3Ry
aW5nSW1wbD4gY3JlYXRlKGNvbnN0IExDaGFyKiwgc2l6ZV90IGxlbmd0aCk7CisgICAgV1RGX0VY
UE9SVF9TVFJJTkdfQVBJIHN0YXRpYyBQYXNzUmVmPFN0cmluZ0ltcGw+IGNyZWF0ZThCaXRJZlBv
c3NpYmxlKGNvbnN0IFVDaGFyKiwgc2l6ZV90IGxlbmd0aCk7CiAgICAgdGVtcGxhdGU8c2l6ZV90
IGlubGluZUNhcGFjaXR5PgogICAgIHN0YXRpYyBQYXNzUmVmPFN0cmluZ0ltcGw+IGNyZWF0ZThC
aXRJZlBvc3NpYmxlKGNvbnN0IFZlY3RvcjxVQ2hhciwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3Ip
CiAgICAgewpAQCAtMzQwLDExICszNDAsMTEgQEAgcHVibGljOgogICAgIH0KICAgICBXVEZfRVhQ
T1JUX1NUUklOR19BUEkgc3RhdGljIFBhc3NSZWY8U3RyaW5nSW1wbD4gY3JlYXRlOEJpdElmUG9z
c2libGUoY29uc3QgVUNoYXIqKTsKIAotICAgIEFMV0FZU19JTkxJTkUgc3RhdGljIFBhc3NSZWY8
U3RyaW5nSW1wbD4gY3JlYXRlKGNvbnN0IGNoYXIqIHMsIHVuc2lnbmVkIGxlbmd0aCkgeyByZXR1
cm4gY3JlYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihzKSwgbGVuZ3RoKTsgfQor
ICAgIEFMV0FZU19JTkxJTkUgc3RhdGljIFBhc3NSZWY8U3RyaW5nSW1wbD4gY3JlYXRlKGNvbnN0
IGNoYXIqIHMsIHNpemVfdCBsZW5ndGgpIHsgcmV0dXJuIGNyZWF0ZShyZWludGVycHJldF9jYXN0
PGNvbnN0IExDaGFyKj4ocyksIGxlbmd0aCk7IH0KICAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkg
c3RhdGljIFBhc3NSZWY8U3RyaW5nSW1wbD4gY3JlYXRlKGNvbnN0IExDaGFyKik7CiAgICAgQUxX
QVlTX0lOTElORSBzdGF0aWMgUGFzc1JlZjxTdHJpbmdJbXBsPiBjcmVhdGUoY29uc3QgY2hhciog
cykgeyByZXR1cm4gY3JlYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihzKSk7IH0K
IAotICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIFBhc3NSZWY8U3RyaW5nSW1wbD4gY3JlYXRlU3Vi
c3RyaW5nU2hhcmluZ0ltcGw4KFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gcmVwLCB1bnNpZ25lZCBv
ZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKKyAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBQYXNzUmVm
PFN0cmluZ0ltcGw+IGNyZWF0ZVN1YnN0cmluZ1NoYXJpbmdJbXBsOChQYXNzUmVmUHRyPFN0cmlu
Z0ltcGw+IHJlcCwgc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbmd0aCkKICAgICB7CiAgICAgICAg
IEFTU0VSVChyZXApOwogICAgICAgICBBU1NFUlQobGVuZ3RoIDw9IHJlcC0+bGVuZ3RoKCkpOwpA
QCAtMzYwLDcgKzM2MCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
KE5vdE51bGwsIHN0cmluZ0ltcGwpIFN0cmluZ0ltcGwocmVwLT5tX2RhdGE4ICsgb2Zmc2V0LCBs
ZW5ndGgsIG93bmVyUmVwKSk7CiAgICAgfQogCi0gICAgc3RhdGljIEFMV0FZU19JTkxJTkUgUGFz
c1JlZjxTdHJpbmdJbXBsPiBjcmVhdGVTdWJzdHJpbmdTaGFyaW5nSW1wbChQYXNzUmVmUHRyPFN0
cmluZ0ltcGw+IHJlcCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCisgICAgc3Rh
dGljIEFMV0FZU19JTkxJTkUgUGFzc1JlZjxTdHJpbmdJbXBsPiBjcmVhdGVTdWJzdHJpbmdTaGFy
aW5nSW1wbChQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHJlcCwgc2l6ZV90IG9mZnNldCwgc2l6ZV90
IGxlbmd0aCkKICAgICB7CiAgICAgICAgIEFTU0VSVChyZXApOwogICAgICAgICBBU1NFUlQobGVu
Z3RoIDw9IHJlcC0+bGVuZ3RoKCkpOwpAQCAtMzg3LDE1ICszODcsMTUgQEAgcHVibGljOgogICAg
IH0KIAogICAgIC8vIEZJWE1FOiBUcmFuc2l0aW9uIG9mZiBvZiB0aGVzZSBmdW5jdGlvbnMgdG8g
Y3JlYXRlV2l0aG91dENvcHlpbmcgaW5zdGVhZC4KLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkg
c3RhdGljIFBhc3NSZWY8U3RyaW5nSW1wbD4gY3JlYXRlRnJvbUxpdGVyYWwoY29uc3QgY2hhciog
Y2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkg
c3RhdGljIFBhc3NSZWY8U3RyaW5nSW1wbD4gY3JlYXRlRnJvbUxpdGVyYWwoY29uc3QgY2hhciog
Y2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCk7CiAgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHN0
YXRpYyBQYXNzUmVmPFN0cmluZ0ltcGw+IGNyZWF0ZUZyb21MaXRlcmFsKGNvbnN0IGNoYXIqIGNo
YXJhY3RlcnMpOwogCi0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHN0YXRpYyBQYXNzUmVmPFN0
cmluZ0ltcGw+IGNyZWF0ZVdpdGhvdXRDb3B5aW5nKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1
bnNpZ25lZCBsZW5ndGgpOwotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBzdGF0aWMgUGFzc1Jl
ZjxTdHJpbmdJbXBsPiBjcmVhdGVXaXRob3V0Q29weWluZyhjb25zdCBMQ2hhciogY2hhcmFjdGVy
cywgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgc3RhdGljIFBh
c3NSZWY8U3RyaW5nSW1wbD4gY3JlYXRlV2l0aG91dENvcHlpbmcoY29uc3QgVUNoYXIqIGNoYXJh
Y3RlcnMsIHNpemVfdCBsZW5ndGgpOworICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBzdGF0aWMg
UGFzc1JlZjxTdHJpbmdJbXBsPiBjcmVhdGVXaXRob3V0Q29weWluZyhjb25zdCBMQ2hhciogY2hh
cmFjdGVycywgc2l6ZV90IGxlbmd0aCk7CiAKLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgc3Rh
dGljIFBhc3NSZWY8U3RyaW5nSW1wbD4gY3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5n
dGgsIExDaGFyKiYgZGF0YSk7Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHN0YXRpYyBQYXNz
UmVmPFN0cmluZ0ltcGw+IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoLCBVQ2hh
ciomIGRhdGEpOwotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdGF0aWMgQUxXQVlTX0lOTElO
RSBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQg
bGVuZ3RoLCBUKiYgb3V0cHV0KQorICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBzdGF0aWMgUGFz
c1JlZjxTdHJpbmdJbXBsPiBjcmVhdGVVbmluaXRpYWxpemVkKHNpemVfdCBsZW5ndGgsIExDaGFy
KiYgZGF0YSk7CisgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHN0YXRpYyBQYXNzUmVmPFN0cmlu
Z0ltcGw+IGNyZWF0ZVVuaW5pdGlhbGl6ZWQoc2l6ZV90IGxlbmd0aCwgVUNoYXIqJiBkYXRhKTsK
KyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RhdGljIEFMV0FZU19JTkxJTkUgUGFzc1JlZlB0
cjxTdHJpbmdJbXBsPiB0cnlDcmVhdGVVbmluaXRpYWxpemVkKHNpemVfdCBsZW5ndGgsIFQqJiBv
dXRwdXQpCiAgICAgewogICAgICAgICBpZiAoIWxlbmd0aCkgewogICAgICAgICAgICAgb3V0cHV0
ID0gMDsKQEAgLTQyNCw4ICs0MjQsOCBAQCBwdWJsaWM6CiAgICAgLy8gUmVhbGxvY2F0ZSB0aGUg
U3RyaW5nSW1wbC4gVGhlIG9yaWdpbmFsU3RyaW5nIG11c3QgYmUgb25seSBvd25lZCBieSB0aGUg
UGFzc1JlZlB0ciwKICAgICAvLyBhbmQgdGhlIGJ1ZmZlciBvd25lcnNoaXAgbXVzdCBiZSBCdWZm
ZXJJbnRlcm5hbC4gSnVzdCBsaWtlIHRoZSBpbnB1dCBwb2ludGVyIG9mIHJlYWxsb2MoKSwKICAg
ICAvLyB0aGUgb3JpZ2luYWxTdHJpbmcgY2FuJ3QgYmUgdXNlZCBhZnRlciB0aGlzIGZ1bmN0aW9u
LgotICAgIHN0YXRpYyBQYXNzUmVmPFN0cmluZ0ltcGw+IHJlYWxsb2NhdGUoUGFzc1JlZlB0cjxT
dHJpbmdJbXBsPiBvcmlnaW5hbFN0cmluZywgdW5zaWduZWQgbGVuZ3RoLCBMQ2hhciomIGRhdGEp
OwotICAgIHN0YXRpYyBQYXNzUmVmPFN0cmluZ0ltcGw+IHJlYWxsb2NhdGUoUGFzc1JlZlB0cjxT
dHJpbmdJbXBsPiBvcmlnaW5hbFN0cmluZywgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciomIGRhdGEp
OworICAgIHN0YXRpYyBQYXNzUmVmPFN0cmluZ0ltcGw+IHJlYWxsb2NhdGUoUGFzc1JlZlB0cjxT
dHJpbmdJbXBsPiBvcmlnaW5hbFN0cmluZywgc2l6ZV90IGxlbmd0aCwgTENoYXIqJiBkYXRhKTsK
KyAgICBzdGF0aWMgUGFzc1JlZjxTdHJpbmdJbXBsPiByZWFsbG9jYXRlKFBhc3NSZWZQdHI8U3Ry
aW5nSW1wbD4gb3JpZ2luYWxTdHJpbmcsIHNpemVfdCBsZW5ndGgsIFVDaGFyKiYgZGF0YSk7CiAK
ICAgICBzdGF0aWMgdW5zaWduZWQgZmxhZ3NPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoU3RyaW5nSW1wbCwgbV9oYXNoQW5kRmxhZ3MpOyB9CiAgICAgc3RhdGljIHVuc2lnbmVkIGZs
YWdJczhCaXQoKSB7IHJldHVybiBzX2hhc2hGbGFnOEJpdEJ1ZmZlcjsgfQpAQCAtNDk2LDcgKzQ5
Niw3IEBAIHB1YmxpYzoKICAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgc2l6ZV90IHNpemVJbkJ5
dGVzKCkgY29uc3Q7CiAKICAgICBib29sIGhhczE2Qml0U2hhZG93KCkgY29uc3QgeyByZXR1cm4g
bV9oYXNoQW5kRmxhZ3MgJiBzX2hhc2hGbGFnSGFzMTZCaXRTaGFkb3c7IH0KLSAgICBXVEZfRVhQ
T1JUX1NUUklOR19BUEkgdm9pZCB1cGNvbnZlcnRDaGFyYWN0ZXJzKHVuc2lnbmVkLCB1bnNpZ25l
ZCkgY29uc3Q7CisgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHZvaWQgdXBjb252ZXJ0Q2hhcmFj
dGVycyhzaXplX3QsIHNpemVfdCkgY29uc3Q7CiAgICAgYm9vbCBpc0lkZW50aWZpZXIoKSBjb25z
dCB7IHJldHVybiBtX2hhc2hBbmRGbGFncyAmIHNfaGFzaEZsYWdJc0lkZW50aWZpZXI7IH0KICAg
ICBib29sIGlzSWRlbnRpZmllck9yVW5pcXVlKCkgY29uc3QgeyByZXR1cm4gaXNJZGVudGlmaWVy
KCkgfHwgaXNFbXB0eVVuaXF1ZSgpOyB9CiAgICAgdm9pZCBzZXRJc0lkZW50aWZpZXIoYm9vbCBp
c0lkZW50aWZpZXIpCkBAIC01MjksMTIgKzUyOSwxMiBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc1N1
YlN0cmluZygpIGNvbnN0IHsgcmV0dXJuICBidWZmZXJPd25lcnNoaXAoKSA9PSBCdWZmZXJTdWJz
dHJpbmc7IH0KICNlbmRpZgogCi0gICAgc3RhdGljIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBDU3Ry
aW5nIHV0ZjhGb3JDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBs
ZW5ndGgsIENvbnZlcnNpb25Nb2RlID0gTGVuaWVudENvbnZlcnNpb24pOwotICAgIFdURl9FWFBP
UlRfU1RSSU5HX0FQSSBDU3RyaW5nIHV0ZjhGb3JSYW5nZSh1bnNpZ25lZCBvZmZzZXQsIHVuc2ln
bmVkIGxlbmd0aCwgQ29udmVyc2lvbk1vZGUgPSBMZW5pZW50Q29udmVyc2lvbikgY29uc3Q7Cisg
ICAgc3RhdGljIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBDU3RyaW5nIHV0ZjhGb3JDaGFyYWN0ZXJz
KGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBDb252ZXJzaW9uTW9kZSA9
IExlbmllbnRDb252ZXJzaW9uKTsKKyAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgQ1N0cmluZyB1
dGY4Rm9yUmFuZ2Uoc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbmd0aCwgQ29udmVyc2lvbk1vZGUg
PSBMZW5pZW50Q29udmVyc2lvbikgY29uc3Q7CiAgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIENT
dHJpbmcgdXRmOChDb252ZXJzaW9uTW9kZSA9IExlbmllbnRDb252ZXJzaW9uKSBjb25zdDsKIAog
cHJpdmF0ZToKLSAgICBzdGF0aWMgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIGJvb2wgdXRmOEltcGwo
Y29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgY2hhciomIGJ1ZmZlciwg
c2l6ZV90IGJ1ZmZlclNpemUsIENvbnZlcnNpb25Nb2RlKTsKKyAgICBzdGF0aWMgV1RGX0VYUE9S
VF9TVFJJTkdfQVBJIGJvb2wgdXRmOEltcGwoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVf
dCBsZW5ndGgsIGNoYXIqJiBidWZmZXIsIHNpemVfdCBidWZmZXJTaXplLCBDb252ZXJzaW9uTW9k
ZSk7CiAgICAgCiAgICAgLy8gVGhlIGhpZ2ggYml0cyBvZiAnaGFzaCcgYXJlIGFsd2F5cyBlbXB0
eSwgYnV0IHdlIHByZWZlciB0byBzdG9yZSBvdXIgZmxhZ3MKICAgICAvLyBpbiB0aGUgbG93IGJp
dHMgYmVjYXVzZSBpdCBtYWtlcyB0aGVtIHNsaWdodGx5IG1vcmUgZWZmaWNpZW50IHRvIGFjY2Vz
cy4KQEAgLTYxNSw3ICs2MTUsNyBAQCBwdWJsaWM6CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyBTdHJpbmdJbXBsKiBlbXB0eSgpOwogCiAgICAgLy8gRklYTUU6IERvZXMgdGhpcyByZWFs
bHkgYmVsb25nIGluIFN0cmluZ0ltcGw/Ci0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0YXRp
YyB2b2lkIGNvcHlDaGFycyhUKiBkZXN0aW5hdGlvbiwgY29uc3QgVCogc291cmNlLCB1bnNpZ25l
ZCBudW1DaGFyYWN0ZXJzKQorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdGF0aWMgdm9pZCBj
b3B5Q2hhcnMoVCogZGVzdGluYXRpb24sIGNvbnN0IFQqIHNvdXJjZSwgc2l6ZV90IG51bUNoYXJh
Y3RlcnMpCiAgICAgewogICAgICAgICBpZiAobnVtQ2hhcmFjdGVycyA9PSAxKSB7CiAgICAgICAg
ICAgICAqZGVzdGluYXRpb24gPSAqc291cmNlOwpAQCAtNjI1LDE0ICs2MjUsMTQgQEAgcHVibGlj
OgogICAgICAgICBpZiAobnVtQ2hhcmFjdGVycyA8PSBzX2NvcHlDaGFyc0lubGluZUN1dE9mZikg
ewogICAgICAgICAgICAgdW5zaWduZWQgaSA9IDA7CiAjaWYgKENQVShYODYpIHx8IENQVShYODZf
NjQpKQotICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhcnNQZXJJbnQgPSBzaXplb2YodWlu
dDMyX3QpIC8gc2l6ZW9mKFQpOworICAgICAgICAgICAgY29uc3Qgc2l6ZV90IGNoYXJzUGVySW50
ID0gc2l6ZW9mKHVpbnQzMl90KSAvIHNpemVvZihUKTsKIAogICAgICAgICAgICAgaWYgKG51bUNo
YXJhY3RlcnMgPiBjaGFyc1BlckludCkgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIHN0b3BD
b3VudCA9IG51bUNoYXJhY3RlcnMgJiB+KGNoYXJzUGVySW50IC0gMSk7CisgICAgICAgICAgICAg
ICAgc2l6ZV90IHN0b3BDb3VudCA9IG51bUNoYXJhY3RlcnMgJiB+KGNoYXJzUGVySW50IC0gMSk7
CiAKICAgICAgICAgICAgICAgICBjb25zdCB1aW50MzJfdCogc3JjQ2hhcmFjdGVycyA9IHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihzb3VyY2UpOwogICAgICAgICAgICAgICAgIHVp
bnQzMl90KiBkZXN0Q2hhcmFjdGVycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0
aW5hdGlvbik7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaSA8IHN0b3BD
b3VudDsgaSArPSBjaGFyc1BlckludCwgKytqKQorICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90
IGogPSAwOyBpIDwgc3RvcENvdW50OyBpICs9IGNoYXJzUGVySW50LCArK2opCiAgICAgICAgICAg
ICAgICAgICAgIGRlc3RDaGFyYWN0ZXJzW2pdID0gc3JjQ2hhcmFjdGVyc1tqXTsKICAgICAgICAg
ICAgIH0KICNlbmRpZgpAQCAtNjQyLDkgKzY0Miw5IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1l
bWNweShkZXN0aW5hdGlvbiwgc291cmNlLCBudW1DaGFyYWN0ZXJzICogc2l6ZW9mKFQpKTsKICAg
ICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lkIGNvcHlDaGFycyhVQ2hhciogZGVz
dGluYXRpb24sIGNvbnN0IExDaGFyKiBzb3VyY2UsIHVuc2lnbmVkIG51bUNoYXJhY3RlcnMpCisg
ICAgQUxXQVlTX0lOTElORSBzdGF0aWMgdm9pZCBjb3B5Q2hhcnMoVUNoYXIqIGRlc3RpbmF0aW9u
LCBjb25zdCBMQ2hhciogc291cmNlLCBzaXplX3QgbnVtQ2hhcmFjdGVycykKICAgICB7Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1DaGFyYWN0ZXJzOyArK2kpCisgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtQ2hhcmFjdGVyczsgKytpKQogICAgICAgICAgICAg
ZGVzdGluYXRpb25baV0gPSBzb3VyY2VbaV07CiAgICAgfQogCkBAIC02NTMsMTcgKzY1MywxNyBA
QCBwdWJsaWM6CiAgICAgLy8gaXRzIG93biBjb3B5IG9mIHRoZSBzdHJpbmcuCiAgICAgUGFzc1Jl
ZjxTdHJpbmdJbXBsPiBpc29sYXRlZENvcHkoKSBjb25zdDsKIAotICAgIFdURl9FWFBPUlRfU1RS
SU5HX0FQSSBQYXNzUmVmPFN0cmluZ0ltcGw+IHN1YnN0cmluZyh1bnNpZ25lZCBwb3MsIHVuc2ln
bmVkIGxlbiA9IFVJTlRfTUFYKTsKKyAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgUGFzc1JlZjxT
dHJpbmdJbXBsPiBzdWJzdHJpbmcoc2l6ZV90IHBvcywgc2l6ZV90IGxlbiA9IFVJTlRfTUFYKTsK
IAotICAgIFVDaGFyIGF0KHVuc2lnbmVkIGkpIGNvbnN0CisgICAgVUNoYXIgYXQoc2l6ZV90IGkp
IGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihp
IDwgbV9sZW5ndGgpOwogICAgICAgICBpZiAoaXM4Qml0KCkpCiAgICAgICAgICAgICByZXR1cm4g
bV9kYXRhOFtpXTsKICAgICAgICAgcmV0dXJuIG1fZGF0YTE2W2ldOwogICAgIH0KLSAgICBVQ2hh
ciBvcGVyYXRvcltdKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIGF0KGkpOyB9Ci0gICAgV1RG
X0VYUE9SVF9TVFJJTkdfQVBJIFVDaGFyMzIgY2hhcmFjdGVyU3RhcnRpbmdBdCh1bnNpZ25lZCk7
CisgICAgVUNoYXIgb3BlcmF0b3JbXShzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gYXQoaSk7IH0K
KyAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgVUNoYXIzMiBjaGFyYWN0ZXJTdGFydGluZ0F0KHNp
emVfdCk7CiAKICAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgYm9vbCBjb250YWluc09ubHlXaGl0
ZXNwYWNlKCk7CiAKQEAgLTcwMyw0NCArNzAzLDQ0IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgQ2hhclR5cGU+CiAgICAgQUxXQVlTX0lOTElORSBQYXNzUmVmPFN0cmluZ0ltcGw+
IHJlbW92ZUNoYXJhY3RlcnMoY29uc3QgQ2hhclR5cGUqIGNoYXJhY3RlcnMsIENoYXJhY3Rlck1h
dGNoRnVuY3Rpb25QdHIpOwogCi0gICAgc2l6ZV90IGZpbmQoTENoYXIgY2hhcmFjdGVyLCB1bnNp
Z25lZCBzdGFydCA9IDApOwotICAgIHNpemVfdCBmaW5kKGNoYXIgY2hhcmFjdGVyLCB1bnNpZ25l
ZCBzdGFydCA9IDApOwotICAgIHNpemVfdCBmaW5kKFVDaGFyIGNoYXJhY3RlciwgdW5zaWduZWQg
c3RhcnQgPSAwKTsKLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgc2l6ZV90IGZpbmQoQ2hhcmFj
dGVyTWF0Y2hGdW5jdGlvblB0ciwgdW5zaWduZWQgaW5kZXggPSAwKTsKLSAgICBzaXplX3QgZmlu
ZChjb25zdCBMQ2hhciosIHVuc2lnbmVkIGluZGV4ID0gMCk7Ci0gICAgQUxXQVlTX0lOTElORSBz
aXplX3QgZmluZChjb25zdCBjaGFyKiBzLCB1bnNpZ25lZCBpbmRleCA9IDApIHsgcmV0dXJuIGZp
bmQocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KHMpLCBpbmRleCk7IH0KKyAgICBzaXpl
X3QgZmluZChMQ2hhciBjaGFyYWN0ZXIsIHNpemVfdCBzdGFydCA9IDApOworICAgIHNpemVfdCBm
aW5kKGNoYXIgY2hhcmFjdGVyLCBzaXplX3Qgc3RhcnQgPSAwKTsKKyAgICBzaXplX3QgZmluZChV
Q2hhciBjaGFyYWN0ZXIsIHNpemVfdCBzdGFydCA9IDApOworICAgIFdURl9FWFBPUlRfU1RSSU5H
X0FQSSBzaXplX3QgZmluZChDaGFyYWN0ZXJNYXRjaEZ1bmN0aW9uUHRyLCBzaXplX3QgaW5kZXgg
PSAwKTsKKyAgICBzaXplX3QgZmluZChjb25zdCBMQ2hhciosIHNpemVfdCBpbmRleCA9IDApOwor
ICAgIEFMV0FZU19JTkxJTkUgc2l6ZV90IGZpbmQoY29uc3QgY2hhciogcywgc2l6ZV90IGluZGV4
ID0gMCkgeyByZXR1cm4gZmluZChyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4ocyksIGlu
ZGV4KTsgfQogICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBzaXplX3QgZmluZChTdHJpbmdJbXBs
Kik7Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHNpemVfdCBmaW5kKFN0cmluZ0ltcGwqLCB1
bnNpZ25lZCBpbmRleCk7Ci0gICAgc2l6ZV90IGZpbmRJZ25vcmluZ0Nhc2UoY29uc3QgTENoYXIq
LCB1bnNpZ25lZCBpbmRleCA9IDApOwotICAgIEFMV0FZU19JTkxJTkUgc2l6ZV90IGZpbmRJZ25v
cmluZ0Nhc2UoY29uc3QgY2hhciogcywgdW5zaWduZWQgaW5kZXggPSAwKSB7IHJldHVybiBmaW5k
SWdub3JpbmdDYXNlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihzKSwgaW5kZXgpOyB9
Ci0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHNpemVfdCBmaW5kSWdub3JpbmdDYXNlKFN0cmlu
Z0ltcGwqLCB1bnNpZ25lZCBpbmRleCA9IDApOworICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBz
aXplX3QgZmluZChTdHJpbmdJbXBsKiwgc2l6ZV90IGluZGV4KTsKKyAgICBzaXplX3QgZmluZEln
bm9yaW5nQ2FzZShjb25zdCBMQ2hhciosIHNpemVfdCBpbmRleCA9IDApOworICAgIEFMV0FZU19J
TkxJTkUgc2l6ZV90IGZpbmRJZ25vcmluZ0Nhc2UoY29uc3QgY2hhciogcywgc2l6ZV90IGluZGV4
ID0gMCkgeyByZXR1cm4gZmluZElnbm9yaW5nQ2FzZShyZWludGVycHJldF9jYXN0PGNvbnN0IExD
aGFyKj4ocyksIGluZGV4KTsgfQorICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBzaXplX3QgZmlu
ZElnbm9yaW5nQ2FzZShTdHJpbmdJbXBsKiwgc2l6ZV90IGluZGV4ID0gMCk7CiAKLSAgICBXVEZf
RVhQT1JUX1NUUklOR19BUEkgc2l6ZV90IGZpbmROZXh0TGluZVN0YXJ0KHVuc2lnbmVkIGluZGV4
ID0gVUlOVF9NQVgpOworICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBzaXplX3QgZmluZE5leHRM
aW5lU3RhcnQoc2l6ZV90IGluZGV4ID0gU0laRV9UX01BWCk7CiAKLSAgICBXVEZfRVhQT1JUX1NU
UklOR19BUEkgc2l6ZV90IHJldmVyc2VGaW5kKFVDaGFyLCB1bnNpZ25lZCBpbmRleCA9IFVJTlRf
TUFYKTsKLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgc2l6ZV90IHJldmVyc2VGaW5kKFN0cmlu
Z0ltcGwqLCB1bnNpZ25lZCBpbmRleCA9IFVJTlRfTUFYKTsKLSAgICBXVEZfRVhQT1JUX1NUUklO
R19BUEkgc2l6ZV90IHJldmVyc2VGaW5kSWdub3JpbmdDYXNlKFN0cmluZ0ltcGwqLCB1bnNpZ25l
ZCBpbmRleCA9IFVJTlRfTUFYKTsKKyAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgc2l6ZV90IHJl
dmVyc2VGaW5kKFVDaGFyLCBzaXplX3QgaW5kZXggPSBTSVpFX1RfTUFYKTsKKyAgICBXVEZfRVhQ
T1JUX1NUUklOR19BUEkgc2l6ZV90IHJldmVyc2VGaW5kKFN0cmluZ0ltcGwqLCBzaXplX3QgaW5k
ZXggPSBTSVpFX1RfTUFYKTsKKyAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgc2l6ZV90IHJldmVy
c2VGaW5kSWdub3JpbmdDYXNlKFN0cmluZ0ltcGwqLCBzaXplX3QgaW5kZXggPSBTSVpFX1RfTUFY
KTsKIAogICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBib29sIHN0YXJ0c1dpdGgoY29uc3QgU3Ry
aW5nSW1wbCopIGNvbnN0OwogICAgIGJvb2wgc3RhcnRzV2l0aChTdHJpbmdJbXBsKiBzdHIsIGJv
b2wgY2FzZVNlbnNpdGl2ZSkgeyByZXR1cm4gY2FzZVNlbnNpdGl2ZSA/IHN0YXJ0c1dpdGgoc3Ry
KSA6IChyZXZlcnNlRmluZElnbm9yaW5nQ2FzZShzdHIsIDApID09IDApOyB9CiAgICAgV1RGX0VY
UE9SVF9TVFJJTkdfQVBJIGJvb2wgc3RhcnRzV2l0aChVQ2hhcikgY29uc3Q7Ci0gICAgV1RGX0VY
UE9SVF9TVFJJTkdfQVBJIGJvb2wgc3RhcnRzV2l0aChjb25zdCBjaGFyKiwgdW5zaWduZWQgbWF0
Y2hMZW5ndGgsIGJvb2wgY2FzZVNlbnNpdGl2ZSkgY29uc3Q7CisgICAgV1RGX0VYUE9SVF9TVFJJ
TkdfQVBJIGJvb2wgc3RhcnRzV2l0aChjb25zdCBjaGFyKiwgc2l6ZV90IG1hdGNoTGVuZ3RoLCBi
b29sIGNhc2VTZW5zaXRpdmUpIGNvbnN0OwogICAgIHRlbXBsYXRlPHVuc2lnbmVkIG1hdGNoTGVu
Z3RoPgogICAgIGJvb2wgc3RhcnRzV2l0aChjb25zdCBjaGFyICgmcHJlZml4KVttYXRjaExlbmd0
aF0sIGJvb2wgY2FzZVNlbnNpdGl2ZSA9IHRydWUpIGNvbnN0IHsgcmV0dXJuIHN0YXJ0c1dpdGgo
cHJlZml4LCBtYXRjaExlbmd0aCAtIDEsIGNhc2VTZW5zaXRpdmUpOyB9CiAKICAgICBXVEZfRVhQ
T1JUX1NUUklOR19BUEkgYm9vbCBlbmRzV2l0aChTdHJpbmdJbXBsKiwgYm9vbCBjYXNlU2Vuc2l0
aXZlID0gdHJ1ZSk7CiAgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIGJvb2wgZW5kc1dpdGgoVUNo
YXIpIGNvbnN0OwotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBib29sIGVuZHNXaXRoKGNvbnN0
IGNoYXIqLCB1bnNpZ25lZCBtYXRjaExlbmd0aCwgYm9vbCBjYXNlU2Vuc2l0aXZlKSBjb25zdDsK
KyAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgYm9vbCBlbmRzV2l0aChjb25zdCBjaGFyKiwgc2l6
ZV90IG1hdGNoTGVuZ3RoLCBib29sIGNhc2VTZW5zaXRpdmUpIGNvbnN0OwogICAgIHRlbXBsYXRl
PHVuc2lnbmVkIG1hdGNoTGVuZ3RoPgogICAgIGJvb2wgZW5kc1dpdGgoY29uc3QgY2hhciAoJnBy
ZWZpeClbbWF0Y2hMZW5ndGhdLCBib29sIGNhc2VTZW5zaXRpdmUgPSB0cnVlKSBjb25zdCB7IHJl
dHVybiBlbmRzV2l0aChwcmVmaXgsIG1hdGNoTGVuZ3RoIC0gMSwgY2FzZVNlbnNpdGl2ZSk7IH0K
IAogICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBQYXNzUmVmPFN0cmluZ0ltcGw+IHJlcGxhY2Uo
VUNoYXIsIFVDaGFyKTsKICAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgUGFzc1JlZjxTdHJpbmdJ
bXBsPiByZXBsYWNlKFVDaGFyLCBTdHJpbmdJbXBsKik7Ci0gICAgQUxXQVlTX0lOTElORSBQYXNz
UmVmPFN0cmluZ0ltcGw+IHJlcGxhY2UoVUNoYXIgcGF0dGVybiwgY29uc3QgY2hhciogcmVwbGFj
ZW1lbnQsIHVuc2lnbmVkIHJlcGxhY2VtZW50TGVuZ3RoKSB7IHJldHVybiByZXBsYWNlKHBhdHRl
cm4sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihyZXBsYWNlbWVudCksIHJlcGxhY2Vt
ZW50TGVuZ3RoKTsgfQotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBQYXNzUmVmPFN0cmluZ0lt
cGw+IHJlcGxhY2UoVUNoYXIsIGNvbnN0IExDaGFyKiwgdW5zaWduZWQgcmVwbGFjZW1lbnRMZW5n
dGgpOwotICAgIFBhc3NSZWY8U3RyaW5nSW1wbD4gcmVwbGFjZShVQ2hhciwgY29uc3QgVUNoYXIq
LCB1bnNpZ25lZCByZXBsYWNlbWVudExlbmd0aCk7CisgICAgQUxXQVlTX0lOTElORSBQYXNzUmVm
PFN0cmluZ0ltcGw+IHJlcGxhY2UoVUNoYXIgcGF0dGVybiwgY29uc3QgY2hhciogcmVwbGFjZW1l
bnQsIHNpemVfdCByZXBsYWNlbWVudExlbmd0aCkgeyByZXR1cm4gcmVwbGFjZShwYXR0ZXJuLCBy
ZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4ocmVwbGFjZW1lbnQpLCByZXBsYWNlbWVudExl
bmd0aCk7IH0KKyAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgUGFzc1JlZjxTdHJpbmdJbXBsPiBy
ZXBsYWNlKFVDaGFyLCBjb25zdCBMQ2hhciosIHNpemVfdCByZXBsYWNlbWVudExlbmd0aCk7Cisg
ICAgUGFzc1JlZjxTdHJpbmdJbXBsPiByZXBsYWNlKFVDaGFyLCBjb25zdCBVQ2hhciosIHNpemVf
dCByZXBsYWNlbWVudExlbmd0aCk7CiAgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFBhc3NSZWY8
U3RyaW5nSW1wbD4gcmVwbGFjZShTdHJpbmdJbXBsKiwgU3RyaW5nSW1wbCopOwotICAgIFdURl9F
WFBPUlRfU1RSSU5HX0FQSSBQYXNzUmVmPFN0cmluZ0ltcGw+IHJlcGxhY2UodW5zaWduZWQgaW5k
ZXgsIHVuc2lnbmVkIGxlbiwgU3RyaW5nSW1wbCopOworICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQ
SSBQYXNzUmVmPFN0cmluZ0ltcGw+IHJlcGxhY2Uoc2l6ZV90IGluZGV4LCBzaXplX3QgbGVuLCBT
dHJpbmdJbXBsKik7CiAKICAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgVUNoYXJEaXJlY3Rpb24g
ZGVmYXVsdFdyaXRpbmdEaXJlY3Rpb24oYm9vbCogaGFzU3Ryb25nRGlyZWN0aW9uYWxpdHkgPSBu
dWxscHRyKTsKIApAQCAtNzY5LDcgKzc2OSw3IEBAIHByaXZhdGU6CiAgICAgfQogCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4KLSAgICBzdGF0aWMgc2l6ZV90IGFsbG9jYXRpb25TaXplKHVuc2ln
bmVkIHRhaWxFbGVtZW50Q291bnQpCisgICAgc3RhdGljIHNpemVfdCBhbGxvY2F0aW9uU2l6ZShz
aXplX3QgdGFpbEVsZW1lbnRDb3VudCkKICAgICB7CiAgICAgICAgIHJldHVybiB0YWlsT2Zmc2V0
PFQ+KCkgKyB0YWlsRWxlbWVudENvdW50ICogc2l6ZW9mKFQpOwogICAgIH0KQEAgLTgxNywxMSAr
ODE3LDExIEBAIHByaXZhdGU6CiAgICAgQnVmZmVyT3duZXJzaGlwIGJ1ZmZlck93bmVyc2hpcCgp
IGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEJ1ZmZlck93bmVyc2hpcD4obV9oYXNoQW5kRmxh
Z3MgJiBzX2hhc2hNYXNrQnVmZmVyT3duZXJzaGlwKTsgfQogICAgIHRlbXBsYXRlIDxjbGFzcyBV
Q2hhclByZWRpY2F0ZT4gUGFzc1JlZjxTdHJpbmdJbXBsPiBzdHJpcE1hdGNoZWRDaGFyYWN0ZXJz
KFVDaGFyUHJlZGljYXRlKTsKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhclR5cGUsIGNsYXNz
IFVDaGFyUHJlZGljYXRlPiBQYXNzUmVmPFN0cmluZ0ltcGw+IHNpbXBsaWZ5TWF0Y2hlZENoYXJh
Y3RlcnNUb1NwYWNlKFVDaGFyUHJlZGljYXRlKTsKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hh
clR5cGU+IHN0YXRpYyBQYXNzUmVmPFN0cmluZ0ltcGw+IGNvbnN0cnVjdEludGVybmFsKFN0cmlu
Z0ltcGwqLCB1bnNpZ25lZCk7Ci0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJUeXBlPiBzdGF0
aWMgUGFzc1JlZjxTdHJpbmdJbXBsPiBjcmVhdGVVbmluaXRpYWxpemVkSW50ZXJuYWwodW5zaWdu
ZWQsIENoYXJUeXBlKiYpOwotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyVHlwZT4gc3RhdGlj
IFBhc3NSZWY8U3RyaW5nSW1wbD4gY3JlYXRlVW5pbml0aWFsaXplZEludGVybmFsTm9uRW1wdHko
dW5zaWduZWQsIENoYXJUeXBlKiYpOwotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyVHlwZT4g
c3RhdGljIFBhc3NSZWY8U3RyaW5nSW1wbD4gcmVhbGxvY2F0ZUludGVybmFsKFBhc3NSZWZQdHI8
U3RyaW5nSW1wbD4sIHVuc2lnbmVkLCBDaGFyVHlwZSomKTsKLSAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgQ2hhclR5cGU+IHN0YXRpYyBQYXNzUmVmPFN0cmluZ0ltcGw+IGNyZWF0ZUludGVybmFsKGNv
bnN0IENoYXJUeXBlKiwgdW5zaWduZWQpOworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyVHlw
ZT4gc3RhdGljIFBhc3NSZWY8U3RyaW5nSW1wbD4gY29uc3RydWN0SW50ZXJuYWwoU3RyaW5nSW1w
bCosIHNpemVfdCk7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJUeXBlPiBzdGF0aWMgUGFz
c1JlZjxTdHJpbmdJbXBsPiBjcmVhdGVVbmluaXRpYWxpemVkSW50ZXJuYWwoc2l6ZV90LCBDaGFy
VHlwZSomKTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhclR5cGU+IHN0YXRpYyBQYXNzUmVm
PFN0cmluZ0ltcGw+IGNyZWF0ZVVuaW5pdGlhbGl6ZWRJbnRlcm5hbE5vbkVtcHR5KHNpemVfdCwg
Q2hhclR5cGUqJik7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJUeXBlPiBzdGF0aWMgUGFz
c1JlZjxTdHJpbmdJbXBsPiByZWFsbG9jYXRlSW50ZXJuYWwoUGFzc1JlZlB0cjxTdHJpbmdJbXBs
Piwgc2l6ZV90LCBDaGFyVHlwZSomKTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhclR5cGU+
IHN0YXRpYyBQYXNzUmVmPFN0cmluZ0ltcGw+IGNyZWF0ZUludGVybmFsKGNvbnN0IENoYXJUeXBl
Kiwgc2l6ZV90KTsKICAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgTkVWRVJfSU5MSU5FIGNvbnN0
IFVDaGFyKiBnZXREYXRhMTZTbG93Q2FzZSgpIGNvbnN0OwogICAgIFdURl9FWFBPUlRfUFJJVkFU
RSBORVZFUl9JTkxJTkUgdW5zaWduZWQgaGFzaFNsb3dDYXNlKCkgY29uc3Q7CiAKQEAgLTg5NSw5
ICs4OTUsOSBAQCBWYWx1ZUNoZWNrPFN0cmluZ0ltcGwqPiB7CiAjZW5kaWYKIAogdGVtcGxhdGUg
PD4KLUFMV0FZU19JTkxJTkUgUGFzc1JlZjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpjb25zdHJ1
Y3RJbnRlcm5hbDxMQ2hhcj4oU3RyaW5nSW1wbCogaW1wbCwgdW5zaWduZWQgbGVuZ3RoKSB7IHJl
dHVybiBhZG9wdFJlZigqbmV3IChOb3ROdWxsLCBpbXBsKSBTdHJpbmdJbXBsKGxlbmd0aCwgRm9y
Y2U4Qml0Q29uc3RydWN0b3IpKTsgfQorQUxXQVlTX0lOTElORSBQYXNzUmVmPFN0cmluZ0ltcGw+
IFN0cmluZ0ltcGw6OmNvbnN0cnVjdEludGVybmFsPExDaGFyPihTdHJpbmdJbXBsKiBpbXBsLCBz
aXplX3QgbGVuZ3RoKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IChOb3ROdWxsLCBpbXBsKSBTdHJp
bmdJbXBsKGxlbmd0aCwgRm9yY2U4Qml0Q29uc3RydWN0b3IpKTsgfQogdGVtcGxhdGUgPD4KLUFM
V0FZU19JTkxJTkUgUGFzc1JlZjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpjb25zdHJ1Y3RJbnRl
cm5hbDxVQ2hhcj4oU3RyaW5nSW1wbCogaW1wbCwgdW5zaWduZWQgbGVuZ3RoKSB7IHJldHVybiBh
ZG9wdFJlZigqbmV3IChOb3ROdWxsLCBpbXBsKSBTdHJpbmdJbXBsKGxlbmd0aCkpOyB9CitBTFdB
WVNfSU5MSU5FIFBhc3NSZWY8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y29uc3RydWN0SW50ZXJu
YWw8VUNoYXI+KFN0cmluZ0ltcGwqIGltcGwsIHNpemVfdCBsZW5ndGgpIHsgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgKE5vdE51bGwsIGltcGwpIFN0cmluZ0ltcGwobGVuZ3RoKSk7IH0KIAogdGVtcGxh
dGUgPD4KIEFMV0FZU19JTkxJTkUgY29uc3QgTENoYXIqIFN0cmluZ0ltcGw6OmNoYXJhY3RlcnM8
TENoYXI+KCkgY29uc3QgeyByZXR1cm4gY2hhcmFjdGVyczgoKTsgfQpAQCAtOTA4LDkgKzkwOCw5
IEBAIEFMV0FZU19JTkxJTkUgY29uc3QgVUNoYXIqIFN0cmluZ0ltcGw6OmNoYXJhY3RlcnM8VUNo
YXI+KCkgY29uc3QgeyByZXR1cm4gY2hhcmFjCiBXVEZfRVhQT1JUX1NUUklOR19BUEkgYm9vbCBl
cXVhbChjb25zdCBTdHJpbmdJbXBsKiwgY29uc3QgU3RyaW5nSW1wbCopOwogV1RGX0VYUE9SVF9T
VFJJTkdfQVBJIGJvb2wgZXF1YWwoY29uc3QgU3RyaW5nSW1wbCosIGNvbnN0IExDaGFyKik7CiBp
bmxpbmUgYm9vbCBlcXVhbChjb25zdCBTdHJpbmdJbXBsKiBhLCBjb25zdCBjaGFyKiBiKSB7IHJl
dHVybiBlcXVhbChhLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oYikpOyB9Ci1XVEZf
RVhQT1JUX1NUUklOR19BUEkgYm9vbCBlcXVhbChjb25zdCBTdHJpbmdJbXBsKiwgY29uc3QgTENo
YXIqLCB1bnNpZ25lZCk7Ci1XVEZfRVhQT1JUX1NUUklOR19BUEkgYm9vbCBlcXVhbChjb25zdCBT
dHJpbmdJbXBsKiwgY29uc3QgVUNoYXIqLCB1bnNpZ25lZCk7Ci1pbmxpbmUgYm9vbCBlcXVhbChj
b25zdCBTdHJpbmdJbXBsKiBhLCBjb25zdCBjaGFyKiBiLCB1bnNpZ25lZCBsZW5ndGgpIHsgcmV0
dXJuIGVxdWFsKGEsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihiKSwgbGVuZ3RoKTsg
fQorV1RGX0VYUE9SVF9TVFJJTkdfQVBJIGJvb2wgZXF1YWwoY29uc3QgU3RyaW5nSW1wbCosIGNv
bnN0IExDaGFyKiwgc2l6ZV90KTsKK1dURl9FWFBPUlRfU1RSSU5HX0FQSSBib29sIGVxdWFsKGNv
bnN0IFN0cmluZ0ltcGwqLCBjb25zdCBVQ2hhciosIHNpemVfdCk7CitpbmxpbmUgYm9vbCBlcXVh
bChjb25zdCBTdHJpbmdJbXBsKiBhLCBjb25zdCBjaGFyKiBiLCBzaXplX3QgbGVuZ3RoKSB7IHJl
dHVybiBlcXVhbChhLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oYiksIGxlbmd0aCk7
IH0KIGlubGluZSBib29sIGVxdWFsKGNvbnN0IExDaGFyKiBhLCBTdHJpbmdJbXBsKiBiKSB7IHJl
dHVybiBlcXVhbChiLCBhKTsgfQogaW5saW5lIGJvb2wgZXF1YWwoY29uc3QgY2hhciogYSwgU3Ry
aW5nSW1wbCogYikgeyByZXR1cm4gZXF1YWwoYiwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hh
cio+KGEpKTsgfQogV1RGX0VYUE9SVF9TVFJJTkdfQVBJIGJvb2wgZXF1YWwoY29uc3QgU3RyaW5n
SW1wbCYgYSwgY29uc3QgU3RyaW5nSW1wbCYgYik7CkBAIC0xMDI5LDYgKzEwMjksMTAgQEAgQUxX
QVlTX0lOTElORSBib29sIGVxdWFsKGNvbnN0IFVDaGFyKiBhVUNoYXIsIGNvbnN0IFVDaGFyKiBi
VUNoYXIsIHVuc2lnbmVkIGxlbmcKICAgICBjb25zdCBjaGFyKiBiID0gcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBjaGFyKj4oYlVDaGFyKTsKIAogICAgIHVuc2lnbmVkIHdvcmRMZW5ndGggPSBsZW5n
dGggPj4gMTsKKyAgICBjb25zdCB1aW50MzJfdCogYUNoYXJhY3RlcnMgPSByZWludGVycHJldF9j
YXN0PGNvbnN0IHVpbnQzMl90Kj4oYSk7CisgICAgY29uc3QgdWludDMyX3QqIGJDaGFyYWN0ZXJz
ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KGIpOworICAgIAorICAgIHNpemVf
dCB3b3JkTGVuZ3RoID0gbGVuZ3RoID4+IDE7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSAh
PSB3b3JkTGVuZ3RoOyArK2kpIHsKICAgICAgICAgaWYgKGxvYWRVbmFsaWduZWQ8dWludDMyX3Q+
KGEpICE9IGxvYWRVbmFsaWduZWQ8dWludDMyX3Q+KGIpKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwpAQCAtMTEzMSwxMCArMTEzNSwxMCBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgZXF1YWwoY29u
c3QgVUNoYXIqIGEsIGNvbnN0IFVDaGFyKiBiLCB1bnNpZ25lZCBsZW5ndGgpCiB9CiAjZWxzZQog
QUxXQVlTX0lOTElORSBib29sIGVxdWFsKGNvbnN0IExDaGFyKiBhLCBjb25zdCBMQ2hhciogYiwg
dW5zaWduZWQgbGVuZ3RoKSB7IHJldHVybiAhbWVtY21wKGEsIGIsIGxlbmd0aCk7IH0KLUFMV0FZ
U19JTkxJTkUgYm9vbCBlcXVhbChjb25zdCBVQ2hhciogYSwgY29uc3QgVUNoYXIqIGIsIHVuc2ln
bmVkIGxlbmd0aCkgeyByZXR1cm4gIW1lbWNtcChhLCBiLCBsZW5ndGggKiBzaXplb2YoVUNoYXIp
KTsgfQorQUxXQVlTX0lOTElORSBib29sIGVxdWFsKGNvbnN0IFVDaGFyKiBhLCBjb25zdCBVQ2hh
ciogYiwgdW5zaWduZWQgbGVuZ3RoKSB7IHJldHVybiAhbWVtY21wKGEsIGIsIHN0YXRpY19jYXN0
PHNpemVfdD4obGVuZ3RoKSAqIHNpemVvZihVQ2hhcikpOyB9CiAjZW5kaWYKIAotQUxXQVlTX0lO
TElORSBib29sIGVxdWFsKGNvbnN0IExDaGFyKiBhLCBjb25zdCBVQ2hhciogYiwgdW5zaWduZWQg
bGVuZ3RoKQorQUxXQVlTX0lOTElORSBib29sIGVxdWFsKGNvbnN0IExDaGFyKiBhLCBjb25zdCBV
Q2hhciogYiwgc2l6ZV90IGxlbmd0aCkKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGVuZ3RoOyArK2kpIHsKICAgICAgICAgaWYgKGFbaV0gIT0gYltpXSkKQEAgLTExNDMsMTcgKzEx
NDcsMTcgQEAgQUxXQVlTX0lOTElORSBib29sIGVxdWFsKGNvbnN0IExDaGFyKiBhLCBjb25zdCBV
Q2hhciogYiwgdW5zaWduZWQgbGVuZ3RoKQogICAgIHJldHVybiB0cnVlOwogfQogCi1BTFdBWVNf
SU5MSU5FIGJvb2wgZXF1YWwoY29uc3QgVUNoYXIqIGEsIGNvbnN0IExDaGFyKiBiLCB1bnNpZ25l
ZCBsZW5ndGgpIHsgcmV0dXJuIGVxdWFsKGIsIGEsIGxlbmd0aCk7IH0KK0FMV0FZU19JTkxJTkUg
Ym9vbCBlcXVhbChjb25zdCBVQ2hhciogYSwgY29uc3QgTENoYXIqIGIsIHNpemVfdCBsZW5ndGgp
IHsgcmV0dXJuIGVxdWFsKGIsIGEsIGxlbmd0aCk7IH0KIAogV1RGX0VYUE9SVF9TVFJJTkdfQVBJ
IGJvb2wgZXF1YWxJZ25vcmluZ0Nhc2UoY29uc3QgU3RyaW5nSW1wbCosIGNvbnN0IFN0cmluZ0lt
cGwqKTsKIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBib29sIGVxdWFsSWdub3JpbmdDYXNlKGNvbnN0
IFN0cmluZ0ltcGwqLCBjb25zdCBMQ2hhciopOwogaW5saW5lIGJvb2wgZXF1YWxJZ25vcmluZ0Nh
c2UoY29uc3QgTENoYXIqIGEsIGNvbnN0IFN0cmluZ0ltcGwqIGIpIHsgcmV0dXJuIGVxdWFsSWdu
b3JpbmdDYXNlKGIsIGEpOyB9Ci1XVEZfRVhQT1JUX1NUUklOR19BUEkgYm9vbCBlcXVhbElnbm9y
aW5nQ2FzZShjb25zdCBMQ2hhciosIGNvbnN0IExDaGFyKiwgdW5zaWduZWQpOwotV1RGX0VYUE9S
VF9TVFJJTkdfQVBJIGJvb2wgZXF1YWxJZ25vcmluZ0Nhc2UoY29uc3QgVUNoYXIqLCBjb25zdCBM
Q2hhciosIHVuc2lnbmVkKTsKLWlubGluZSBib29sIGVxdWFsSWdub3JpbmdDYXNlKGNvbnN0IFVD
aGFyKiBhLCBjb25zdCBjaGFyKiBiLCB1bnNpZ25lZCBsZW5ndGgpIHsgcmV0dXJuIGVxdWFsSWdu
b3JpbmdDYXNlKGEsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihiKSwgbGVuZ3RoKTsg
fQotaW5saW5lIGJvb2wgZXF1YWxJZ25vcmluZ0Nhc2UoY29uc3QgTENoYXIqIGEsIGNvbnN0IFVD
aGFyKiBiLCB1bnNpZ25lZCBsZW5ndGgpIHsgcmV0dXJuIGVxdWFsSWdub3JpbmdDYXNlKGIsIGEs
IGxlbmd0aCk7IH0KLWlubGluZSBib29sIGVxdWFsSWdub3JpbmdDYXNlKGNvbnN0IGNoYXIqIGEs
IGNvbnN0IFVDaGFyKiBiLCB1bnNpZ25lZCBsZW5ndGgpIHsgcmV0dXJuIGVxdWFsSWdub3JpbmdD
YXNlKGIsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihhKSwgbGVuZ3RoKTsgfQotaW5s
aW5lIGJvb2wgZXF1YWxJZ25vcmluZ0Nhc2UoY29uc3QgY2hhciogYSwgY29uc3QgTENoYXIqIGIs
IHVuc2lnbmVkIGxlbmd0aCkgeyByZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2UoYiwgcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBMQ2hhcio+KGEpLCBsZW5ndGgpOyB9CitXVEZfRVhQT1JUX1NUUklOR19B
UEkgYm9vbCBlcXVhbElnbm9yaW5nQ2FzZShjb25zdCBMQ2hhciosIGNvbnN0IExDaGFyKiwgc2l6
ZV90KTsKK1dURl9FWFBPUlRfU1RSSU5HX0FQSSBib29sIGVxdWFsSWdub3JpbmdDYXNlKGNvbnN0
IFVDaGFyKiwgY29uc3QgTENoYXIqLCBzaXplX3QpOworaW5saW5lIGJvb2wgZXF1YWxJZ25vcmlu
Z0Nhc2UoY29uc3QgVUNoYXIqIGEsIGNvbnN0IGNoYXIqIGIsIHNpemVfdCBsZW5ndGgpIHsgcmV0
dXJuIGVxdWFsSWdub3JpbmdDYXNlKGEsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihi
KSwgbGVuZ3RoKTsgfQoraW5saW5lIGJvb2wgZXF1YWxJZ25vcmluZ0Nhc2UoY29uc3QgTENoYXIq
IGEsIGNvbnN0IFVDaGFyKiBiLCBzaXplX3QgbGVuZ3RoKSB7IHJldHVybiBlcXVhbElnbm9yaW5n
Q2FzZShiLCBhLCBsZW5ndGgpOyB9CitpbmxpbmUgYm9vbCBlcXVhbElnbm9yaW5nQ2FzZShjb25z
dCBjaGFyKiBhLCBjb25zdCBVQ2hhciogYiwgc2l6ZV90IGxlbmd0aCkgeyByZXR1cm4gZXF1YWxJ
Z25vcmluZ0Nhc2UoYiwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KGEpLCBsZW5ndGgp
OyB9CitpbmxpbmUgYm9vbCBlcXVhbElnbm9yaW5nQ2FzZShjb25zdCBjaGFyKiBhLCBjb25zdCBM
Q2hhciogYiwgc2l6ZV90IGxlbmd0aCkgeyByZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2UoYiwgcmVp
bnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KGEpLCBsZW5ndGgpOyB9CiBpbmxpbmUgYm9vbCBl
cXVhbElnbm9yaW5nQ2FzZShjb25zdCBVQ2hhciogYSwgY29uc3QgVUNoYXIqIGIsIGludCBsZW5n
dGgpCiB7CiAgICAgQVNTRVJUKGxlbmd0aCA+PSAwKTsKQEAgLTExNjQsNyArMTE2OCw3IEBAIFdU
Rl9FWFBPUlRfU1RSSU5HX0FQSSBib29sIGVxdWFsSWdub3JpbmdDYXNlTm9uTnVsbChjb25zdCBT
dHJpbmdJbXBsKiwgY29uc3QgU3RyCiBXVEZfRVhQT1JUX1NUUklOR19BUEkgYm9vbCBlcXVhbEln
bm9yaW5nTnVsbGl0eShTdHJpbmdJbXBsKiwgU3RyaW5nSW1wbCopOwogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBDaGFyYWN0ZXJUeXBlPgotaW5saW5lIHNpemVfdCBmaW5kKGNvbnN0IENoYXJhY3RlclR5
cGUqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgQ2hhcmFjdGVyVHlwZSBtYXRjaENoYXJh
Y3RlciwgdW5zaWduZWQgaW5kZXggPSAwKQoraW5saW5lIHNpemVfdCBmaW5kKGNvbnN0IENoYXJh
Y3RlclR5cGUqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIENoYXJhY3RlclR5cGUgbWF0Y2hD
aGFyYWN0ZXIsIHNpemVfdCBpbmRleCA9IDApCiB7CiAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3Ro
KSB7CiAgICAgICAgIGlmIChjaGFyYWN0ZXJzW2luZGV4XSA9PSBtYXRjaENoYXJhY3RlcikKQEAg
LTExNzQsMTkgKzExNzgsMTkgQEAgaW5saW5lIHNpemVfdCBmaW5kKGNvbnN0IENoYXJhY3RlclR5
cGUqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgQ2hhcmFjdGVyVHkKICAgICByZXR1cm4g
bm90Rm91bmQ7CiB9CiAKLUFMV0FZU19JTkxJTkUgc2l6ZV90IGZpbmQoY29uc3QgVUNoYXIqIGNo
YXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgTENoYXIgbWF0Y2hDaGFyYWN0ZXIsIHVuc2lnbmVk
IGluZGV4ID0gMCkKK0FMV0FZU19JTkxJTkUgc2l6ZV90IGZpbmQoY29uc3QgVUNoYXIqIGNoYXJh
Y3RlcnMsIHNpemVfdCBsZW5ndGgsIExDaGFyIG1hdGNoQ2hhcmFjdGVyLCBzaXplX3QgaW5kZXgg
PSAwKQogewogICAgIHJldHVybiBmaW5kKGNoYXJhY3RlcnMsIGxlbmd0aCwgc3RhdGljX2Nhc3Q8
VUNoYXI+KG1hdGNoQ2hhcmFjdGVyKSwgaW5kZXgpOwogfQogCi1pbmxpbmUgc2l6ZV90IGZpbmQo
Y29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIgbWF0Y2hDaGFy
YWN0ZXIsIHVuc2lnbmVkIGluZGV4ID0gMCkKK2lubGluZSBzaXplX3QgZmluZChjb25zdCBMQ2hh
ciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgVUNoYXIgbWF0Y2hDaGFyYWN0ZXIsIHNpemVf
dCBpbmRleCA9IDApCiB7CiAgICAgaWYgKG1hdGNoQ2hhcmFjdGVyICYgfjB4RkYpCiAgICAgICAg
IHJldHVybiBub3RGb3VuZDsKICAgICByZXR1cm4gZmluZChjaGFyYWN0ZXJzLCBsZW5ndGgsIHN0
YXRpY19jYXN0PExDaGFyPihtYXRjaENoYXJhY3RlciksIGluZGV4KTsKIH0KIAotaW5saW5lIHNp
emVfdCBmaW5kKGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIENoYXJh
Y3Rlck1hdGNoRnVuY3Rpb25QdHIgbWF0Y2hGdW5jdGlvbiwgdW5zaWduZWQgaW5kZXggPSAwKQor
aW5saW5lIHNpemVfdCBmaW5kKGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3Ro
LCBDaGFyYWN0ZXJNYXRjaEZ1bmN0aW9uUHRyIG1hdGNoRnVuY3Rpb24sIHNpemVfdCBpbmRleCA9
IDApCiB7CiAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CiAgICAgICAgIGlmIChtYXRjaEZ1
bmN0aW9uKGNoYXJhY3RlcnNbaW5kZXhdKSkKQEAgLTExOTYsNyArMTIwMCw3IEBAIGlubGluZSBz
aXplX3QgZmluZChjb25zdCBMQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBDaGFy
YWN0ZXJNYXRjaEZ1bmN0CiAgICAgcmV0dXJuIG5vdEZvdW5kOwogfQogCi1pbmxpbmUgc2l6ZV90
IGZpbmQoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgQ2hhcmFjdGVy
TWF0Y2hGdW5jdGlvblB0ciBtYXRjaEZ1bmN0aW9uLCB1bnNpZ25lZCBpbmRleCA9IDApCitpbmxp
bmUgc2l6ZV90IGZpbmQoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIENo
YXJhY3Rlck1hdGNoRnVuY3Rpb25QdHIgbWF0Y2hGdW5jdGlvbiwgc2l6ZV90IGluZGV4ID0gMCkK
IHsKICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKICAgICAgICAgaWYgKG1hdGNoRnVuY3Rp
b24oY2hhcmFjdGVyc1tpbmRleF0pKQpAQCAtMTIwNyw3ICsxMjExLDcgQEAgaW5saW5lIHNpemVf
dCBmaW5kKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIENoYXJhY3Rl
ck1hdGNoRnVuY3QKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLWlubGlu
ZSBzaXplX3QgZmluZE5leHRMaW5lU3RhcnQoY29uc3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVy
cywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBpbmRleCA9IDApCitpbmxpbmUgc2l6ZV90IGZp
bmROZXh0TGluZVN0YXJ0KGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMsIHNpemVfdCBs
ZW5ndGgsIHNpemVfdCBpbmRleCA9IDApCiB7CiAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7
CiAgICAgICAgIENoYXJhY3RlclR5cGUgYyA9IGNoYXJhY3RlcnNbaW5kZXgrK107CkBAIC0xMjM4
LDcgKzEyNDIsNyBAQCBpbmxpbmUgc2l6ZV90IGZpbmROZXh0TGluZVN0YXJ0KGNvbnN0IENoYXJh
Y3RlclR5cGUqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aAogfQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBDaGFyYWN0ZXJUeXBlPgotaW5saW5lIHNpemVfdCByZXZlcnNlRmluZExpbmVUZXJtaW5h
dG9yKGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgdW5z
aWduZWQgaW5kZXggPSBVSU5UX01BWCkKK2lubGluZSBzaXplX3QgcmV2ZXJzZUZpbmRMaW5lVGVy
bWluYXRvcihjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBz
aXplX3QgaW5kZXggPSBTSVpFX1RfTUFYKQogewogICAgIGlmICghbGVuZ3RoKQogICAgICAgICBy
ZXR1cm4gbm90Rm91bmQ7CkBAIC0xMjU0LDcgKzEyNTgsNyBAQCBpbmxpbmUgc2l6ZV90IHJldmVy
c2VGaW5kTGluZVRlcm1pbmF0b3IoY29uc3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywgdW5z
aWduZQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotaW5saW5lIHNpemVf
dCByZXZlcnNlRmluZChjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBs
ZW5ndGgsIENoYXJhY3RlclR5cGUgbWF0Y2hDaGFyYWN0ZXIsIHVuc2lnbmVkIGluZGV4ID0gVUlO
VF9NQVgpCitpbmxpbmUgc2l6ZV90IHJldmVyc2VGaW5kKGNvbnN0IENoYXJhY3RlclR5cGUqIGNo
YXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIENoYXJhY3RlclR5cGUgbWF0Y2hDaGFyYWN0ZXIsIHNp
emVfdCBpbmRleCA9IFNJWkVfVF9NQVgpCiB7CiAgICAgaWYgKCFsZW5ndGgpCiAgICAgICAgIHJl
dHVybiBub3RGb3VuZDsKQEAgLTEyNjcsMzEgKzEyNzEsMzEgQEAgaW5saW5lIHNpemVfdCByZXZl
cnNlRmluZChjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgs
IENoYXIKICAgICByZXR1cm4gaW5kZXg7CiB9CiAKLUFMV0FZU19JTkxJTkUgc2l6ZV90IHJldmVy
c2VGaW5kKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIExDaGFyIG1h
dGNoQ2hhcmFjdGVyLCB1bnNpZ25lZCBpbmRleCA9IFVJTlRfTUFYKQorQUxXQVlTX0lOTElORSBz
aXplX3QgcmV2ZXJzZUZpbmQoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgs
IExDaGFyIG1hdGNoQ2hhcmFjdGVyLCBzaXplX3QgaW5kZXggPSBTSVpFX1RfTUFYKQogewogICAg
IHJldHVybiByZXZlcnNlRmluZChjaGFyYWN0ZXJzLCBsZW5ndGgsIHN0YXRpY19jYXN0PFVDaGFy
PihtYXRjaENoYXJhY3RlciksIGluZGV4KTsKIH0KIAotaW5saW5lIHNpemVfdCByZXZlcnNlRmlu
ZChjb25zdCBMQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciBtYXRjaENo
YXJhY3RlciwgdW5zaWduZWQgaW5kZXggPSBVSU5UX01BWCkKK2lubGluZSBzaXplX3QgcmV2ZXJz
ZUZpbmQoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIFVDaGFyIG1hdGNo
Q2hhcmFjdGVyLCBzaXplX3QgaW5kZXggPSBTSVpFX1RfTUFYKQogewogICAgIGlmIChtYXRjaENo
YXJhY3RlciAmIH4weEZGKQogICAgICAgICByZXR1cm4gbm90Rm91bmQ7CiAgICAgcmV0dXJuIHJl
dmVyc2VGaW5kKGNoYXJhY3RlcnMsIGxlbmd0aCwgc3RhdGljX2Nhc3Q8TENoYXI+KG1hdGNoQ2hh
cmFjdGVyKSwgaW5kZXgpOwogfQogCi1pbmxpbmUgc2l6ZV90IFN0cmluZ0ltcGw6OmZpbmQoTENo
YXIgY2hhcmFjdGVyLCB1bnNpZ25lZCBzdGFydCkKK2lubGluZSBzaXplX3QgU3RyaW5nSW1wbDo6
ZmluZChMQ2hhciBjaGFyYWN0ZXIsIHNpemVfdCBzdGFydCkKIHsKICAgICBpZiAoaXM4Qml0KCkp
CiAgICAgICAgIHJldHVybiBXVEY6OmZpbmQoY2hhcmFjdGVyczgoKSwgbV9sZW5ndGgsIGNoYXJh
Y3Rlciwgc3RhcnQpOwogICAgIHJldHVybiBXVEY6OmZpbmQoY2hhcmFjdGVyczE2KCksIG1fbGVu
Z3RoLCBjaGFyYWN0ZXIsIHN0YXJ0KTsKIH0KIAotQUxXQVlTX0lOTElORSBzaXplX3QgU3RyaW5n
SW1wbDo6ZmluZChjaGFyIGNoYXJhY3RlciwgdW5zaWduZWQgc3RhcnQpCitBTFdBWVNfSU5MSU5F
IHNpemVfdCBTdHJpbmdJbXBsOjpmaW5kKGNoYXIgY2hhcmFjdGVyLCBzaXplX3Qgc3RhcnQpCiB7
CiAgICAgcmV0dXJuIGZpbmQoc3RhdGljX2Nhc3Q8TENoYXI+KGNoYXJhY3RlciksIHN0YXJ0KTsK
IH0KIAotaW5saW5lIHNpemVfdCBTdHJpbmdJbXBsOjpmaW5kKFVDaGFyIGNoYXJhY3RlciwgdW5z
aWduZWQgc3RhcnQpCitpbmxpbmUgc2l6ZV90IFN0cmluZ0ltcGw6OmZpbmQoVUNoYXIgY2hhcmFj
dGVyLCBzaXplX3Qgc3RhcnQpCiB7CiAgICAgaWYgKGlzOEJpdCgpKQogICAgICAgICByZXR1cm4g
V1RGOjpmaW5kKGNoYXJhY3RlcnM4KCksIG1fbGVuZ3RoLCBjaGFyYWN0ZXIsIHN0YXJ0KTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmNwcCBiL1NvdXJjZS9XVEYv
d3RmL3RleHQvV1RGU3RyaW5nLmNwcAppbmRleCAwMzZlYTZmNzc1MDdkYjcxNGM2OWU5YzA3MWE0
YjcxZmI1MTY3M2MzLi5iYzMzNWIzNTNlYTE0MjE2ODI3NWU1MGIzMmEzM2VmOWU3YTE5OGM2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5jcHAKKysrIGIvU291cmNl
L1dURi93dGYvdGV4dC9XVEZTdHJpbmcuY3BwCkBAIC00MSw3ICs0MSw3IEBAIG5hbWVzcGFjZSBX
VEYgewogdXNpbmcgbmFtZXNwYWNlIFVuaWNvZGU7CiAKIC8vIENvbnN0cnVjdCBhIHN0cmluZyB3
aXRoIFVURi0xNiBkYXRhLgotU3RyaW5nOjpTdHJpbmcoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMs
IHVuc2lnbmVkIGxlbmd0aCkKK1N0cmluZzo6U3RyaW5nKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJz
LCBzaXplX3QgbGVuZ3RoKQogewogICAgIGlmIChjaGFyYWN0ZXJzKQogICAgICAgICBtX2ltcGwg
PSBTdHJpbmdJbXBsOjpjcmVhdGUoY2hhcmFjdGVycywgbGVuZ3RoKTsKQEAgLTU3LDEzICs1Nywx
MyBAQCBTdHJpbmc6OlN0cmluZyhjb25zdCBVQ2hhciogc3RyKQogfQogCiAvLyBDb25zdHJ1Y3Qg
YSBzdHJpbmcgd2l0aCBsYXRpbjEgZGF0YS4KLVN0cmluZzo6U3RyaW5nKGNvbnN0IExDaGFyKiBj
aGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCitTdHJpbmc6OlN0cmluZyhjb25zdCBMQ2hhciog
Y2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkKIHsKICAgICBpZiAoY2hhcmFjdGVycykKICAgICAg
ICAgbV9pbXBsID0gU3RyaW5nSW1wbDo6Y3JlYXRlKGNoYXJhY3RlcnMsIGxlbmd0aCk7CiB9CiAK
LVN0cmluZzo6U3RyaW5nKGNvbnN0IGNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkK
K1N0cmluZzo6U3RyaW5nKGNvbnN0IGNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpCiB7
CiAgICAgaWYgKGNoYXJhY3RlcnMpCiAgICAgICAgIG1faW1wbCA9IFN0cmluZ0ltcGw6OmNyZWF0
ZShyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oY2hhcmFjdGVycyksIGxlbmd0aCk7CkBA
IC0yNTMsNyArMjUzLDcgQEAgdm9pZCBTdHJpbmc6Omluc2VydChjb25zdCBVQ2hhciogY2hhcmFj
dGVyc1RvSW5zZXJ0LCB1bnNpZ25lZCBsZW5ndGhUb0luc2VydCwgdW4KICAgICBtX2ltcGwgPSBu
ZXdJbXBsLnJlbGVhc2UoKTsKIH0KIAotVUNoYXIzMiBTdHJpbmc6OmNoYXJhY3RlclN0YXJ0aW5n
QXQodW5zaWduZWQgaSkgY29uc3QKK1VDaGFyMzIgU3RyaW5nOjpjaGFyYWN0ZXJTdGFydGluZ0F0
KHNpemVfdCBpKSBjb25zdAogewogICAgIGlmICghbV9pbXBsIHx8IGkgPj0gbV9pbXBsLT5sZW5n
dGgoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0zMDAsMTggKzMwMCwxOCBAQCB2b2lkIFN0cmlu
Zzo6cmVtb3ZlKHVuc2lnbmVkIHBvc2l0aW9uLCBpbnQgbGVuZ3RoVG9SZW1vdmUpCiAgICAgcmVt
b3ZlSW50ZXJuYWwoY2hhcmFjdGVyczE2KCksIHBvc2l0aW9uLCBsZW5ndGhUb1JlbW92ZSk7CiB9
CiAKLVN0cmluZyBTdHJpbmc6OnN1YnN0cmluZyh1bnNpZ25lZCBwb3MsIHVuc2lnbmVkIGxlbikg
Y29uc3QKK1N0cmluZyBTdHJpbmc6OnN1YnN0cmluZyhzaXplX3QgcG9zLCBzaXplX3QgbGVuKSBj
b25zdAogewogICAgIGlmICghbV9pbXBsKSAKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAg
IHJldHVybiBtX2ltcGwtPnN1YnN0cmluZyhwb3MsIGxlbik7CiB9CiAKLVN0cmluZyBTdHJpbmc6
OnN1YnN0cmluZ1NoYXJpbmdJbXBsKHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKSBj
b25zdAorU3RyaW5nIFN0cmluZzo6c3Vic3RyaW5nU2hhcmluZ0ltcGwoc2l6ZV90IG9mZnNldCwg
c2l6ZV90IGxlbmd0aCkgY29uc3QKIHsKICAgICAvLyBGSVhNRTogV2UgdXNlZCB0byBjaGVjayBh
Z2FpbnN0IGEgbGltaXQgb2YgSGVhcDo6bWluRXh0cmFDb3N0IC8gc2l6ZW9mKFVDaGFyKS4KIAot
ICAgIHVuc2lnbmVkIHN0cmluZ0xlbmd0aCA9IHRoaXMtPmxlbmd0aCgpOworICAgIHNpemVfdCBz
dHJpbmdMZW5ndGggPSB0aGlzLT5sZW5ndGgoKTsKICAgICBvZmZzZXQgPSBzdGQ6Om1pbihvZmZz
ZXQsIHN0cmluZ0xlbmd0aCk7CiAgICAgbGVuZ3RoID0gc3RkOjptaW4obGVuZ3RoLCBzdHJpbmdM
ZW5ndGggLSBvZmZzZXQpOwogCkBAIC03MDMsNyArNzAzLDcgQEAgdm9pZCBTdHJpbmc6OnNwbGl0
KGNvbnN0IFN0cmluZyYgc2VwYXJhdG9yLCBib29sIGFsbG93RW1wdHlFbnRyaWVzLCBWZWN0b3I8
U3RyaW4KIHsKICAgICByZXN1bHQuY2xlYXIoKTsKIAotICAgIHVuc2lnbmVkIHN0YXJ0UG9zID0g
MDsKKyAgICBzaXplX3Qgc3RhcnRQb3MgPSAwOwogICAgIHNpemVfdCBlbmRQb3M7CiAgICAgd2hp
bGUgKChlbmRQb3MgPSBmaW5kKHNlcGFyYXRvciwgc3RhcnRQb3MpKSAhPSBub3RGb3VuZCkgewog
ICAgICAgICBpZiAoYWxsb3dFbXB0eUVudHJpZXMgfHwgc3RhcnRQb3MgIT0gZW5kUG9zKQpAQCAt
NzE4LDcgKzcxOCw3IEBAIHZvaWQgU3RyaW5nOjpzcGxpdChVQ2hhciBzZXBhcmF0b3IsIGJvb2wg
YWxsb3dFbXB0eUVudHJpZXMsIFZlY3RvcjxTdHJpbmc+JiByZXN1CiB7CiAgICAgcmVzdWx0LmNs
ZWFyKCk7CiAKLSAgICB1bnNpZ25lZCBzdGFydFBvcyA9IDA7CisgICAgc2l6ZV90IHN0YXJ0UG9z
ID0gMDsKICAgICBzaXplX3QgZW5kUG9zOwogICAgIHdoaWxlICgoZW5kUG9zID0gZmluZChzZXBh
cmF0b3IsIHN0YXJ0UG9zKSkgIT0gbm90Rm91bmQpIHsKICAgICAgICAgaWYgKGFsbG93RW1wdHlF
bnRyaWVzIHx8IHN0YXJ0UG9zICE9IGVuZFBvcykKQEAgLTg0OSw3ICs4NDksNyBAQCBTdHJpbmcg
U3RyaW5nOjpmcm9tVVRGOChjb25zdCBMQ2hhciogc3RyaW5nU3RhcnQsIHNpemVfdCBsZW5ndGgp
CiAgICAgaWYgKGNvbnZlcnRVVEY4VG9VVEYxNigmc3RyaW5nQ3VycmVudCwgcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBjaGFyICo+KHN0cmluZ1N0YXJ0ICsgbGVuZ3RoKSwgJmJ1ZmZlckN1cnJlbnQs
IGJ1ZmZlckN1cnJlbnQgKyBidWZmZXIuc2l6ZSgpKSAhPSBjb252ZXJzaW9uT0spCiAgICAgICAg
IHJldHVybiBTdHJpbmcoKTsKIAotICAgIHVuc2lnbmVkIHV0ZjE2TGVuZ3RoID0gYnVmZmVyQ3Vy
cmVudCAtIGJ1ZmZlclN0YXJ0OworICAgIHNpemVfdCB1dGYxNkxlbmd0aCA9IGJ1ZmZlckN1cnJl
bnQgLSBidWZmZXJTdGFydDsKICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTih1
dGYxNkxlbmd0aCA8IGxlbmd0aCk7CiAgICAgcmV0dXJuIFN0cmluZ0ltcGw6OmNyZWF0ZShidWZm
ZXJTdGFydCwgdXRmMTZMZW5ndGgpOwogfQpAQCAtOTY4LDcgKzk2OCw3IEBAIGJ5ZToKIH0KIAog
dGVtcGxhdGUgPHR5cGVuYW1lIENoYXJUeXBlPgotc3RhdGljIHVuc2lnbmVkIGxlbmd0aE9mQ2hh
cmFjdGVyc0FzSW50ZWdlcihjb25zdCBDaGFyVHlwZSogZGF0YSwgc2l6ZV90IGxlbmd0aCkKK3N0
YXRpYyBzaXplX3QgbGVuZ3RoT2ZDaGFyYWN0ZXJzQXNJbnRlZ2VyKGNvbnN0IENoYXJUeXBlKiBk
YXRhLCBzaXplX3QgbGVuZ3RoKQogewogICAgIHNpemVfdCBpID0gMDsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RG
U3RyaW5nLmgKaW5kZXggZjMyOWZlNWMwOWY5NTVkNTA5ZDVlZjBkOTIxZTAxZGY3ZWIyMGExNy4u
OWZiZGM0NDU4MWZlOTAyNGEyZmYzZjRmMTMzYzQ4Yzk5NTE0MjZhNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dU
RlN0cmluZy5oCkBAIC04Nyw3ICs4Nyw3IEBAIHB1YmxpYzoKICAgICBTdHJpbmcoKSB7IH0KIAog
ICAgIC8vIENvbnN0cnVjdCBhIHN0cmluZyB3aXRoIFVURi0xNiBkYXRhLgotICAgIFdURl9FWFBP
UlRfU1RSSU5HX0FQSSBTdHJpbmcoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxl
bmd0aCk7CisgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFN0cmluZyhjb25zdCBVQ2hhciogY2hh
cmFjdGVycywgc2l6ZV90IGxlbmd0aCk7CiAKICAgICAvLyBDb25zdHJ1Y3QgYSBzdHJpbmcgYnkg
Y29weWluZyB0aGUgY29udGVudHMgb2YgYSB2ZWN0b3IuICBUbyBhdm9pZAogICAgIC8vIGNvcHlp
bmcsIGNvbnNpZGVyIHVzaW5nIFN0cmluZzo6YWRvcHQgaW5zdGVhZC4KQEAgLTEwNCw4ICsxMDQs
OCBAQCBwdWJsaWM6CiAgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFN0cmluZyhjb25zdCBVQ2hh
ciopOwogCiAgICAgLy8gQ29uc3RydWN0IGEgc3RyaW5nIHdpdGggbGF0aW4xIGRhdGEuCi0gICAg
V1RGX0VYUE9SVF9TVFJJTkdfQVBJIFN0cmluZyhjb25zdCBMQ2hhciogY2hhcmFjdGVycywgdW5z
aWduZWQgbGVuZ3RoKTsKLSAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgU3RyaW5nKGNvbnN0IGNo
YXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgV1RGX0VYUE9SVF9TVFJJTkdf
QVBJIFN0cmluZyhjb25zdCBMQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCk7CisgICAg
V1RGX0VYUE9SVF9TVFJJTkdfQVBJIFN0cmluZyhjb25zdCBjaGFyKiBjaGFyYWN0ZXJzLCBzaXpl
X3QgbGVuZ3RoKTsKIAogICAgIC8vIENvbnN0cnVjdCBhIHN0cmluZyB3aXRoIGxhdGluMSBkYXRh
LCBmcm9tIGEgbnVsbC10ZXJtaW5hdGVkIHNvdXJjZS4KICAgICBXVEZfRVhQT1JUX1NUUklOR19B
UEkgU3RyaW5nKGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzKTsKQEAgLTIyNCw0NyArMjI0LDQ3IEBA
IHB1YmxpYzoKICAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgc3RhdGljIFN0cmluZyBudW1iZXJU
b1N0cmluZ0ZpeGVkV2lkdGgoZG91YmxlLCB1bnNpZ25lZCBkZWNpbWFsUGxhY2VzKTsKIAogICAg
IC8vIEZpbmQgYSBzaW5nbGUgY2hhcmFjdGVyIG9yIHN0cmluZywgYWxzbyB3aXRoIG1hdGNoIGZ1
bmN0aW9uICYgbGF0aW4xIGZvcm1zLgotICAgIHNpemVfdCBmaW5kKFVDaGFyIGMsIHVuc2lnbmVk
IHN0YXJ0ID0gMCkgY29uc3QKKyAgICBzaXplX3QgZmluZChVQ2hhciBjLCBzaXplX3Qgc3RhcnQg
PSAwKSBjb25zdAogICAgICAgICB7IHJldHVybiBtX2ltcGwgPyBtX2ltcGwtPmZpbmQoYywgc3Rh
cnQpIDogbm90Rm91bmQ7IH0KIAogICAgIHNpemVfdCBmaW5kKGNvbnN0IFN0cmluZyYgc3RyKSBj
b25zdAogICAgICAgICB7IHJldHVybiBtX2ltcGwgPyBtX2ltcGwtPmZpbmQoc3RyLmltcGwoKSkg
OiBub3RGb3VuZDsgfQotICAgIHNpemVfdCBmaW5kKGNvbnN0IFN0cmluZyYgc3RyLCB1bnNpZ25l
ZCBzdGFydCkgY29uc3QKKyAgICBzaXplX3QgZmluZChjb25zdCBTdHJpbmcmIHN0ciwgc2l6ZV90
IHN0YXJ0KSBjb25zdAogICAgICAgICB7IHJldHVybiBtX2ltcGwgPyBtX2ltcGwtPmZpbmQoc3Ry
LmltcGwoKSwgc3RhcnQpIDogbm90Rm91bmQ7IH0KIAotICAgIHNpemVfdCBmaW5kKENoYXJhY3Rl
ck1hdGNoRnVuY3Rpb25QdHIgbWF0Y2hGdW5jdGlvbiwgdW5zaWduZWQgc3RhcnQgPSAwKSBjb25z
dAorICAgIHNpemVfdCBmaW5kKENoYXJhY3Rlck1hdGNoRnVuY3Rpb25QdHIgbWF0Y2hGdW5jdGlv
biwgc2l6ZV90IHN0YXJ0ID0gMCkgY29uc3QKICAgICAgICAgeyByZXR1cm4gbV9pbXBsID8gbV9p
bXBsLT5maW5kKG1hdGNoRnVuY3Rpb24sIHN0YXJ0KSA6IG5vdEZvdW5kOyB9Ci0gICAgc2l6ZV90
IGZpbmQoY29uc3QgTENoYXIqIHN0ciwgdW5zaWduZWQgc3RhcnQgPSAwKSBjb25zdAorICAgIHNp
emVfdCBmaW5kKGNvbnN0IExDaGFyKiBzdHIsIHNpemVfdCBzdGFydCA9IDApIGNvbnN0CiAgICAg
ICAgIHsgcmV0dXJuIG1faW1wbCA/IG1faW1wbC0+ZmluZChzdHIsIHN0YXJ0KSA6IG5vdEZvdW5k
OyB9CiAKLSAgICBzaXplX3QgZmluZE5leHRMaW5lU3RhcnQodW5zaWduZWQgc3RhcnQgPSAwKSBj
b25zdAorICAgIHNpemVfdCBmaW5kTmV4dExpbmVTdGFydChzaXplX3Qgc3RhcnQgPSAwKSBjb25z
dAogICAgICAgICB7IHJldHVybiBtX2ltcGwgPyBtX2ltcGwtPmZpbmROZXh0TGluZVN0YXJ0KHN0
YXJ0KSA6IG5vdEZvdW5kOyB9CiAKICAgICAvLyBGaW5kIHRoZSBsYXN0IGluc3RhbmNlIG9mIGEg
c2luZ2xlIGNoYXJhY3RlciBvciBzdHJpbmcuCi0gICAgc2l6ZV90IHJldmVyc2VGaW5kKFVDaGFy
IGMsIHVuc2lnbmVkIHN0YXJ0ID0gVUlOVF9NQVgpIGNvbnN0CisgICAgc2l6ZV90IHJldmVyc2VG
aW5kKFVDaGFyIGMsIHNpemVfdCBzdGFydCA9IFNJWkVfVF9NQVgpIGNvbnN0CiAgICAgICAgIHsg
cmV0dXJuIG1faW1wbCA/IG1faW1wbC0+cmV2ZXJzZUZpbmQoYywgc3RhcnQpIDogbm90Rm91bmQ7
IH0KLSAgICBzaXplX3QgcmV2ZXJzZUZpbmQoY29uc3QgU3RyaW5nJiBzdHIsIHVuc2lnbmVkIHN0
YXJ0ID0gVUlOVF9NQVgpIGNvbnN0CisgICAgc2l6ZV90IHJldmVyc2VGaW5kKGNvbnN0IFN0cmlu
ZyYgc3RyLCBzaXplX3Qgc3RhcnQgPSBTSVpFX1RfTUFYKSBjb25zdAogICAgICAgICB7IHJldHVy
biBtX2ltcGwgPyBtX2ltcGwtPnJldmVyc2VGaW5kKHN0ci5pbXBsKCksIHN0YXJ0KSA6IG5vdEZv
dW5kOyB9CiAKICAgICAvLyBDYXNlIGluc2Vuc2l0aXZlIHN0cmluZyBtYXRjaGluZy4KLSAgICBz
aXplX3QgZmluZElnbm9yaW5nQ2FzZShjb25zdCBMQ2hhciogc3RyLCB1bnNpZ25lZCBzdGFydCA9
IDApIGNvbnN0CisgICAgc2l6ZV90IGZpbmRJZ25vcmluZ0Nhc2UoY29uc3QgTENoYXIqIHN0ciwg
c2l6ZV90IHN0YXJ0ID0gMCkgY29uc3QKICAgICAgICAgeyByZXR1cm4gbV9pbXBsID8gbV9pbXBs
LT5maW5kSWdub3JpbmdDYXNlKHN0ciwgc3RhcnQpIDogbm90Rm91bmQ7IH0KLSAgICBzaXplX3Qg
ZmluZElnbm9yaW5nQ2FzZShjb25zdCBTdHJpbmcmIHN0ciwgdW5zaWduZWQgc3RhcnQgPSAwKSBj
b25zdAorICAgIHNpemVfdCBmaW5kSWdub3JpbmdDYXNlKGNvbnN0IFN0cmluZyYgc3RyLCBzaXpl
X3Qgc3RhcnQgPSAwKSBjb25zdAogICAgICAgICB7IHJldHVybiBtX2ltcGwgPyBtX2ltcGwtPmZp
bmRJZ25vcmluZ0Nhc2Uoc3RyLmltcGwoKSwgc3RhcnQpIDogbm90Rm91bmQ7IH0KLSAgICBzaXpl
X3QgcmV2ZXJzZUZpbmRJZ25vcmluZ0Nhc2UoY29uc3QgU3RyaW5nJiBzdHIsIHVuc2lnbmVkIHN0
YXJ0ID0gVUlOVF9NQVgpIGNvbnN0CisgICAgc2l6ZV90IHJldmVyc2VGaW5kSWdub3JpbmdDYXNl
KGNvbnN0IFN0cmluZyYgc3RyLCBzaXplX3Qgc3RhcnQgPSBTSVpFX1RfTUFYKSBjb25zdAogICAg
ICAgICB7IHJldHVybiBtX2ltcGwgPyBtX2ltcGwtPnJldmVyc2VGaW5kSWdub3JpbmdDYXNlKHN0
ci5pbXBsKCksIHN0YXJ0KSA6IG5vdEZvdW5kOyB9CiAKICAgICAvLyBXcmFwcGVycyBmb3IgZmlu
ZCAmIHJldmVyc2VGaW5kIGFkZGluZyBkeW5hbWljIHNlbnNpdGl2aXR5IGNoZWNrLgotICAgIHNp
emVfdCBmaW5kKGNvbnN0IExDaGFyKiBzdHIsIHVuc2lnbmVkIHN0YXJ0LCBib29sIGNhc2VTZW5z
aXRpdmUpIGNvbnN0CisgICAgc2l6ZV90IGZpbmQoY29uc3QgTENoYXIqIHN0ciwgc2l6ZV90IHN0
YXJ0LCBib29sIGNhc2VTZW5zaXRpdmUpIGNvbnN0CiAgICAgICAgIHsgcmV0dXJuIGNhc2VTZW5z
aXRpdmUgPyBmaW5kKHN0ciwgc3RhcnQpIDogZmluZElnbm9yaW5nQ2FzZShzdHIsIHN0YXJ0KTsg
fQotICAgIHNpemVfdCBmaW5kKGNvbnN0IFN0cmluZyYgc3RyLCB1bnNpZ25lZCBzdGFydCwgYm9v
bCBjYXNlU2Vuc2l0aXZlKSBjb25zdAorICAgIHNpemVfdCBmaW5kKGNvbnN0IFN0cmluZyYgc3Ry
LCBzaXplX3Qgc3RhcnQsIGJvb2wgY2FzZVNlbnNpdGl2ZSkgY29uc3QKICAgICAgICAgeyByZXR1
cm4gY2FzZVNlbnNpdGl2ZSA/IGZpbmQoc3RyLCBzdGFydCkgOiBmaW5kSWdub3JpbmdDYXNlKHN0
ciwgc3RhcnQpOyB9Ci0gICAgc2l6ZV90IHJldmVyc2VGaW5kKGNvbnN0IFN0cmluZyYgc3RyLCB1
bnNpZ25lZCBzdGFydCwgYm9vbCBjYXNlU2Vuc2l0aXZlKSBjb25zdAorICAgIHNpemVfdCByZXZl
cnNlRmluZChjb25zdCBTdHJpbmcmIHN0ciwgc2l6ZV90IHN0YXJ0LCBib29sIGNhc2VTZW5zaXRp
dmUpIGNvbnN0CiAgICAgICAgIHsgcmV0dXJuIGNhc2VTZW5zaXRpdmUgPyByZXZlcnNlRmluZChz
dHIsIHN0YXJ0KSA6IHJldmVyc2VGaW5kSWdub3JpbmdDYXNlKHN0ciwgc3RhcnQpOyB9CiAKICAg
ICBXVEZfRVhQT1JUX1NUUklOR19BUEkgVmVjdG9yPFVDaGFyPiBjaGFyYWN0ZXJzV2l0aE51bGxU
ZXJtaW5hdGlvbigpIGNvbnN0OwogICAgIAotICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBVQ2hh
cjMyIGNoYXJhY3RlclN0YXJ0aW5nQXQodW5zaWduZWQpIGNvbnN0OyAvLyBEaXR0by4KKyAgICBX
VEZfRVhQT1JUX1NUUklOR19BUEkgVUNoYXIzMiBjaGFyYWN0ZXJTdGFydGluZ0F0KHNpemVfdCkg
Y29uc3Q7IC8vIERpdHRvLgogICAgIAogICAgIGJvb2wgY29udGFpbnMoVUNoYXIgYykgY29uc3Qg
eyByZXR1cm4gZmluZChjKSAhPSBub3RGb3VuZDsgfQogICAgIGJvb2wgY29udGFpbnMoY29uc3Qg
TENoYXIqIHN0ciwgYm9vbCBjYXNlU2Vuc2l0aXZlID0gdHJ1ZSkgY29uc3QgeyByZXR1cm4gZmlu
ZChzdHIsIDAsIGNhc2VTZW5zaXRpdmUpICE9IG5vdEZvdW5kOyB9CkBAIC0zMTcsOCArMzE3LDgg
QEAgcHVibGljOgogICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSB2b2lkIHRydW5jYXRlKHVuc2ln
bmVkIGxlbik7CiAgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHZvaWQgcmVtb3ZlKHVuc2lnbmVk
IHBvcywgaW50IGxlbiA9IDEpOwogCi0gICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFN0cmluZyBz
dWJzdHJpbmcodW5zaWduZWQgcG9zLCB1bnNpZ25lZCBsZW4gPSBVSU5UX01BWCkgY29uc3Q7Ci0g
ICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFN0cmluZyBzdWJzdHJpbmdTaGFyaW5nSW1wbCh1bnNp
Z25lZCBwb3MsIHVuc2lnbmVkIGxlbiA9IFVJTlRfTUFYKSBjb25zdDsKKyAgICBXVEZfRVhQT1JU
X1NUUklOR19BUEkgU3RyaW5nIHN1YnN0cmluZyhzaXplX3QgcG9zLCBzaXplX3QgbGVuID0gU0la
RV9UX01BWCkgY29uc3Q7CisgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFN0cmluZyBzdWJzdHJp
bmdTaGFyaW5nSW1wbChzaXplX3QgcG9zLCBzaXplX3QgbGVuID0gU0laRV9UX01BWCkgY29uc3Q7
CiAgICAgU3RyaW5nIGxlZnQodW5zaWduZWQgbGVuKSBjb25zdCB7IHJldHVybiBzdWJzdHJpbmco
MCwgbGVuKTsgfQogICAgIFN0cmluZyByaWdodCh1bnNpZ25lZCBsZW4pIGNvbnN0IHsgcmV0dXJu
IHN1YnN0cmluZyhsZW5ndGgoKSAtIGxlbiwgbGVuKTsgfQogCkBAIC0zNDUsOCArMzQ1LDggQEAg
cHVibGljOgogICAgIC8vIFJldHVybnMgYW4gdW5pbml0aWFsaXplZCBzdHJpbmcuIFRoZSBjaGFy
YWN0ZXJzIG5lZWRzIHRvIGJlIHdyaXR0ZW4KICAgICAvLyBpbnRvIHRoZSBidWZmZXIgcmV0dXJu
ZWQgaW4gZGF0YSBiZWZvcmUgdGhlIHJldHVybmVkIHN0cmluZyBpcyB1c2VkLgogICAgIC8vIEZh
aWx1cmUgdG8gZG8gdGhpcyB3aWxsIGhhdmUgdW5wcmVkaWN0YWJsZSByZXN1bHRzLgotICAgIHN0
YXRpYyBTdHJpbmcgY3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiYg
ZGF0YSkgeyByZXR1cm4gU3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGRh
dGEpOyB9Ci0gICAgc3RhdGljIFN0cmluZyBjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxl
bmd0aCwgTENoYXIqJiBkYXRhKSB7IHJldHVybiBTdHJpbmdJbXBsOjpjcmVhdGVVbmluaXRpYWxp
emVkKGxlbmd0aCwgZGF0YSk7IH0KKyAgICBzdGF0aWMgU3RyaW5nIGNyZWF0ZVVuaW5pdGlhbGl6
ZWQoc2l6ZV90IGxlbmd0aCwgVUNoYXIqJiBkYXRhKSB7IHJldHVybiBTdHJpbmdJbXBsOjpjcmVh
dGVVbmluaXRpYWxpemVkKGxlbmd0aCwgZGF0YSk7IH0KKyAgICBzdGF0aWMgU3RyaW5nIGNyZWF0
ZVVuaW5pdGlhbGl6ZWQoc2l6ZV90IGxlbmd0aCwgTENoYXIqJiBkYXRhKSB7IHJldHVybiBTdHJp
bmdJbXBsOjpjcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgZGF0YSk7IH0KIAogICAgIFdURl9F
WFBPUlRfU1RSSU5HX0FQSSB2b2lkIHNwbGl0KGNvbnN0IFN0cmluZyYgc2VwYXJhdG9yLCBib29s
IGFsbG93RW1wdHlFbnRyaWVzLCBWZWN0b3I8U3RyaW5nPiYgcmVzdWx0KSBjb25zdDsKICAgICB2
b2lkIHNwbGl0KGNvbnN0IFN0cmluZyYgc2VwYXJhdG9yLCBWZWN0b3I8U3RyaW5nPiYgcmVzdWx0
KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9jZi9BdG9taWNTdHJpbmdD
Ri5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L2NmL0F0b21pY1N0cmluZ0NGLmNwcAppbmRleCBi
MTczNzM3NjQyYzhlMWVmNmYxOWNkZmUxN2JlODM3ZjY5NGY3NmMxLi5mOGVjMWYzMDgyY2RkYzhi
ZDMxMDI2ZWZmNGZmNTZjMWI0N2Y4Njk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0
L2NmL0F0b21pY1N0cmluZ0NGLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L2NmL0F0b21p
Y1N0cmluZ0NGLmNwcApAQCAtNDEsMTQgKzQxLDE0IEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4g
QXRvbWljU3RyaW5nOjphZGQoQ0ZTdHJpbmdSZWYgc3RyaW5nKQogICAgIENGSW5kZXggbGVuZ3Ro
ID0gQ0ZTdHJpbmdHZXRMZW5ndGgoc3RyaW5nKTsKIAogICAgIGlmIChjb25zdCBMQ2hhciogcHRy
ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KENGU3RyaW5nR2V0Q1N0cmluZ1B0cihz
dHJpbmcsIGtDRlN0cmluZ0VuY29kaW5nSVNPTGF0aW4xKSkpCi0gICAgICAgIHJldHVybiBhZGQo
cHRyLCBsZW5ndGgpOworICAgICAgICByZXR1cm4gYWRkKHB0ciwgY2hlY2tlZF9jYXN0PHVuc2ln
bmVkPihsZW5ndGgpKTsKIAogICAgIGlmIChjb25zdCBVbmlDaGFyKiBwdHIgPSBDRlN0cmluZ0dl
dENoYXJhY3RlcnNQdHIoc3RyaW5nKSkKLSAgICAgICAgcmV0dXJuIGFkZChyZWludGVycHJldF9j
YXN0PGNvbnN0IFVDaGFyKj4ocHRyKSwgbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIGFkZChyZWlu
dGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4ocHRyKSwgY2hlY2tlZF9jYXN0PHVuc2lnbmVkPihs
ZW5ndGgpKTsKIAogICAgIFZlY3RvcjxVbmlDaGFyLCAxMDI0PiB1Y2hhckJ1ZmZlcihsZW5ndGgp
OwogICAgIENGU3RyaW5nR2V0Q2hhcmFjdGVycyhzdHJpbmcsIENGUmFuZ2VNYWtlKDAsIGxlbmd0
aCksIHVjaGFyQnVmZmVyLmRhdGEoKSk7Ci0gICAgcmV0dXJuIGFkZChyZWludGVycHJldF9jYXN0
PGNvbnN0IFVDaGFyKj4odWNoYXJCdWZmZXIuZGF0YSgpKSwgbGVuZ3RoKTsKKyAgICByZXR1cm4g
YWRkKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPih1Y2hhckJ1ZmZlci5kYXRhKCkpLCBj
aGVja2VkX2Nhc3Q8dW5zaWduZWQ+KGxlbmd0aCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXVEYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3VuaWNvZGUvaWN1L0NvbGxhdG9ySUNVLmNwcCBi
L1NvdXJjZS9XVEYvd3RmL3VuaWNvZGUvaWN1L0NvbGxhdG9ySUNVLmNwcAppbmRleCA2MTIzMzUx
ODRkMWRjNjY4MWQ3MWI5NzQ2NDRiOGUyNThhOTdkMTkwLi5mMzdjZmFhMGViZmRiY2RjNDY1ZjQ0
ZTNhMjJkMzQ3NGI5NmEyMWU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi91bmljb2RlL2lj
dS9Db2xsYXRvcklDVS5jcHAKKysrIGIvU291cmNlL1dURi93dGYvdW5pY29kZS9pY3UvQ29sbGF0
b3JJQ1UuY3BwCkBAIC0yNjgsNyArMjY4LDcgQEAgaW50IENvbGxhdG9yOjpjb2xsYXRlKFN0cmlu
Z1ZpZXcgYSwgU3RyaW5nVmlldyBiKSBjb25zdAogc3RhdGljIFVDaGFySXRlcmF0b3IgY3JlYXRl
SXRlcmF0b3JVVEY4KGNvbnN0IGNoYXIqIHN0cmluZykKIHsKICAgICBVQ2hhckl0ZXJhdG9yIGl0
ZXJhdG9yOwotICAgIHVpdGVyX3NldFVURjgoJml0ZXJhdG9yLCBzdHJpbmcsIHN0cmxlbihzdHJp
bmcpKTsKKyAgICB1aXRlcl9zZXRVVEY4KCZpdGVyYXRvciwgc3RyaW5nLCBjaGVja2VkX2Nhc3Q8
dW5zaWduZWQ+KHN0cmxlbihzdHJpbmcpKSk7CiAgICAgcmV0dXJuIGl0ZXJhdG9yOwogfQogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>