<?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>213416</bug_id>
          
          <creation_ts>2020-06-19 16:34:56 -0700</creation_ts>
          <short_desc>Convert much of the SVG string parsing code to use Optional based return values rather than out-parameters</short_desc>
          <delta_ts>2020-06-21 17:47:38 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>andersca</cc>
    
    <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fmalita</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>pdr</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1664598</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-19 16:34:56 -0700</bug_when>
    <thetext>Convert much of the SVG string parsing code to use Optional based return values rather than out-parameters</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1664605</commentid>
    <comment_count>1</comment_count>
      <attachid>402345</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-19 16:38:56 -0700</bug_when>
    <thetext>Created attachment 402345
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1664667</commentid>
    <comment_count>2</comment_count>
      <attachid>402365</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-19 18:09:30 -0700</bug_when>
    <thetext>Created attachment 402365
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1664679</commentid>
    <comment_count>3</comment_count>
      <attachid>402369</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-19 19:04:50 -0700</bug_when>
    <thetext>Created attachment 402369
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1664688</commentid>
    <comment_count>4</comment_count>
      <attachid>402371</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-19 19:38:36 -0700</bug_when>
    <thetext>Created attachment 402371
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1664692</commentid>
    <comment_count>5</comment_count>
      <attachid>402373</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-19 20:13:37 -0700</bug_when>
    <thetext>Created attachment 402373
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1664699</commentid>
    <comment_count>6</comment_count>
      <attachid>402374</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-19 21:06:48 -0700</bug_when>
    <thetext>Created attachment 402374
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1664702</commentid>
    <comment_count>7</comment_count>
      <attachid>402376</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-19 21:46:32 -0700</bug_when>
    <thetext>Created attachment 402376
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1664759</commentid>
    <comment_count>8</comment_count>
      <attachid>402395</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-20 11:37:21 -0700</bug_when>
    <thetext>Created attachment 402395
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1664799</commentid>
    <comment_count>9</comment_count>
      <attachid>402407</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-20 17:06:41 -0700</bug_when>
    <thetext>Created attachment 402407
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1664844</commentid>
    <comment_count>10</comment_count>
      <attachid>402407</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2020-06-21 07:34:28 -0700</bug_when>
    <thetext>Comment on attachment 402407
Patch

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

&gt; Source/WebCore/svg/SVGAnimateMotionElement.cpp:165
&gt; +    m_toPointAtEndOfDuration = parsePoint(toAtEndOfDurationString).valueOr(FloatPoint { });
&gt;      m_hasToPointAtEndOfDuration = true;

Looks like m_toPointAtEndOfDuration could probably be an optional as well?

&gt; Source/WebCore/svg/SVGFEImageElement.cpp:-121
&gt; -        preserveAspectRatio.parse(value);

What happened to this parse call?

&gt; Source/WebCore/svg/SVGPathStringSource.cpp:299
&gt; +    {

Does the { really go here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1664876</commentid>
    <comment_count>11</comment_count>
      <attachid>402407</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-06-21 13:10:15 -0700</bug_when>
    <thetext>Comment on attachment 402407
Patch

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

Another one of those patches where I have a local git branch with lots of nearly identical changes. Very happy to see this done!

&gt; Source/WebCore/svg/SVGAngleValue.cpp:109
&gt; +    auto helper = [&amp;](const auto* ptr, const auto* end) -&gt; ExceptionOr&lt;void&gt; {

I would probably just do auto twice here.

Noticed that whether there is a space after &quot;]&quot; and before &quot;(&quot; I snot the same here as in another recent patch.

&gt; Source/WebCore/svg/SVGAngleValue.cpp:125
&gt; +        const auto* ptr = value.characters8();
&gt; +        const auto* end = ptr + value.length();

Just auto maybe instead of const auto*?

Also, no need for &quot;end&quot; local variable.

&gt; Source/WebCore/svg/SVGAngleValue.cpp:130
&gt; +    const auto* ptr = value.characters16();
&gt; +    const auto* end = ptr + value.length();

Ditto.

&gt;&gt; Source/WebCore/svg/SVGAnimateMotionElement.cpp:165
&gt;&gt;      m_hasToPointAtEndOfDuration = true;
&gt; 
&gt; Looks like m_toPointAtEndOfDuration could probably be an optional as well?

&quot;true&quot;

&gt; Source/WebCore/svg/SVGAnimationElement.cpp:183
&gt; -        parseKeySplines(value, m_keySplines);
&gt; +        if (auto keySplines = parseKeySplines(value))
&gt; +            m_keySplines = WTFMove(*keySplines);
&gt; +        else
&gt; +            m_keySplines.clear();

Does this preserve the old behavior?

Also, seems like some refactoring could make this a one-liner instead of an if statement. Maybe valueOr or making more things Optional?

&gt;&gt; Source/WebCore/svg/SVGFEImageElement.cpp:-121
&gt;&gt; -        preserveAspectRatio.parse(value);
&gt; 
&gt; What happened to this parse call?

The parsing is now part of the constructor that takes a string.

&gt; Source/WebCore/svg/SVGFitToViewBox.cpp:74
&gt; +        if (!value.isNull()) {
&gt; +            if (auto result = parseViewBox(value)) {
&gt; +                setViewBox(WTFMove(*result));
&gt; +                return true;
&gt; +            }
&gt; +        }

Does the null check help? Maybe parseViewBox will relatively quickly fail when passed a null string and we don’t need this optimization.

&gt; Source/WebCore/svg/SVGFitToViewBox.h:69
&gt; +    Optional&lt;FloatRect&gt; parseViewBox(const AtomString&amp; value);
&gt; +    Optional&lt;FloatRect&gt; parseViewBox(const UChar*&amp; start, const UChar* end, bool validate = true);

Peculiar to have a parse function take an AtomString. I suggest changing it to take a StringView. Then we would not need any overloading; callers of both of the current functions could call a new single one.

&gt; Source/WebCore/svg/SVGHKernElement.cpp:49
&gt; +    // FIXME: Can this be shared with SVGVKernElement::buildVerticalKerningPair

Missing question mark as the end of this question.

&gt; Source/WebCore/svg/SVGHKernElement.cpp:84
&gt; +    SVGKerningPair kerningPair;
&gt; +    kerningPair.glyphName1 = WTFMove(*glyphName1);
&gt; +    kerningPair.glyphName2 = WTFMove(*glyphName2);
&gt; +    kerningPair.unicodeRange1 = WTFMove(unicodeString1-&gt;first);
&gt; +    kerningPair.unicodeName1 = WTFMove(unicodeString1-&gt;second);
&gt; +    kerningPair.unicodeRange2 = WTFMove(unicodeString2-&gt;first);
&gt; +    kerningPair.unicodeName2 = WTFMove(unicodeString2-&gt;second);
&gt; +    kerningPair.kerning = kerning;
&gt; +    return kerningPair;

Is construction rather than assignment a possibility here?

&gt; Source/WebCore/svg/SVGParserUtilities.h:57
&gt; +Optional&lt;float&gt; parseNumber(const LChar*&amp; current, const LChar* end, SuffixSkippingPolicy = SuffixSkippingPolicy::Skip);
&gt; +Optional&lt;float&gt; parseNumber(const UChar*&amp; current, const UChar* end, SuffixSkippingPolicy = SuffixSkippingPolicy::Skip);
&gt; +Optional&lt;float&gt; parseNumber(const String&amp;, SuffixSkippingPolicy = SuffixSkippingPolicy::Skip);
&gt; +
&gt; +Optional&lt;std::pair&lt;float, float&gt;&gt; parseNumberOptionalNumber(const String&amp;);
&gt; +
&gt; +Optional&lt;bool&gt; parseArcFlag(const LChar*&amp; current, const LChar* end);
&gt; +Optional&lt;bool&gt; parseArcFlag(const UChar*&amp; current, const UChar* end);
&gt; +
&gt; +Optional&lt;FloatPoint&gt; parsePoint(const String&amp;);
&gt; +Optional&lt;FloatRect&gt; parseRect(const String&amp;);
&gt; +
&gt; +Optional&lt;FloatPoint&gt; parseFloatPoint(const LChar*&amp; current, const LChar* end);
&gt; +Optional&lt;FloatPoint&gt; parseFloatPoint(const UChar*&amp; current, const UChar* end);
&gt; +
&gt; +Optional&lt;std::pair&lt;UnicodeRanges, HashSet&lt;String&gt;&gt;&gt; parseKerningUnicodeString(const String&amp;);
&gt; +Optional&lt;HashSet&lt;String&gt;&gt; parseGlyphName(const String&amp;);

Seems like these functions should all take StringView. Except I guess the ones that &quot;advance a pointer&quot; can’t yet. Certainly the ones that take String should likely take a StringView unless String creates some optimization opportunity.

&gt; Source/WebCore/svg/SVGParserUtilities.h:62
&gt; +template&lt;typename CharacterType&gt; inline bool isSVGSpace(CharacterType c)

constexpr instead of inline

&gt; Source/WebCore/svg/SVGParserUtilities.h:67
&gt; +template&lt;typename CharacterType&gt; inline bool skipOptionalSVGSpaces(const CharacterType*&amp; ptr, const CharacterType* end)

Not sure we need to say inline. It’s not like more inlining will occur with the keyword than without it.

Also, this function seems closely related to other skipUntil functions elsewhere.

&gt; Source/WebCore/svg/SVGParserUtilities.h:74
&gt; +template&lt;typename CharacterType&gt; inline bool skipOptionalSVGSpacesOrDelimiter(const CharacterType*&amp; ptr, const CharacterType* end, char delimiter = &apos;,&apos;)

Ditto.

&gt; Source/WebCore/svg/SVGPathBlender.cpp:131
&gt; +    auto parsedTo = std::invoke(function, toSource);

I think we should WTFMove the function here. Can’t safely do it above, but can do it here.

&gt; Source/WebCore/svg/SVGVKernElement.cpp:73
&gt; +    bool ok = false;
&gt; +    auto kerning = attributeWithoutSynchronization(SVGNames::kAttr).string().toFloat(&amp;ok);
&gt; +    if (!ok)
&gt; +        return WTF::nullopt;

I think we have an optional-based float parsing API somewhere instead of the &quot;out argument OK boolean one&quot;. If not, future refactoring I guess.

&gt; Source/WebCore/svg/SVGVKernElement.cpp:83
&gt; +    SVGKerningPair kerningPair;
&gt; +    kerningPair.glyphName1 = WTFMove(*glyphName1);
&gt; +    kerningPair.glyphName2 = WTFMove(*glyphName2);
&gt; +    kerningPair.unicodeRange1 = WTFMove(unicodeString1-&gt;first);
&gt; +    kerningPair.unicodeName1 = WTFMove(unicodeString1-&gt;second);
&gt; +    kerningPair.unicodeRange2 = WTFMove(unicodeString2-&gt;first);
&gt; +    kerningPair.unicodeName2 = WTFMove(unicodeString2-&gt;second);
&gt; +    kerningPair.kerning = kerning;
&gt; +    return kerningPair;

Same question about constructing rather than assigning.

&gt; Source/WebCore/svg/properties/SVGAnimationAdditiveValueFunctionImpl.h:258
&gt; +        float fromNumber = parseNumber(from).valueOr(0);
&gt; +        float toNumber = parseNumber(to).valueOr(0);

Not sure we need local variables. One liner would be nicer.

&gt; Source/WebCore/svg/properties/SVGAnimationAdditiveValueFunctionImpl.h:259
&gt;          return fabsf(toNumber - fromNumber);

std::abs better than fabsf.

&gt; Source/WebCore/svg/properties/SVGPropertyTraits.h:81
&gt; +        return std::make_pair(static_cast&lt;int&gt;(roundf(result-&gt;first)), static_cast&lt;int&gt;(roundf(result-&gt;second)));

std::round better than roundf</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1664891</commentid>
    <comment_count>12</comment_count>
      <attachid>402431</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-21 15:18:49 -0700</bug_when>
    <thetext>Created attachment 402431
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1664892</commentid>
    <comment_count>13</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-21 15:19:10 -0700</bug_when>
    <thetext>(In reply to Anders Carlsson from comment #10)
&gt; Comment on attachment 402407 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=402407&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/svg/SVGAnimateMotionElement.cpp:165
&gt; &gt; +    m_toPointAtEndOfDuration = parsePoint(toAtEndOfDurationString).valueOr(FloatPoint { });
&gt; &gt;      m_hasToPointAtEndOfDuration = true;
&gt; 
&gt; Looks like m_toPointAtEndOfDuration could probably be an optional as well?

Oh nice. Fixed.

&gt; 
&gt; &gt; Source/WebCore/svg/SVGFEImageElement.cpp:-121
&gt; &gt; -        preserveAspectRatio.parse(value);
&gt; 
&gt; What happened to this parse call?

The SVGPreserveAspectRatioValue constructor calls parse.

&gt; 
&gt; &gt; Source/WebCore/svg/SVGPathStringSource.cpp:299
&gt; &gt; +    {
&gt; 
&gt; Does the { really go here?

Nope. Fixed.



(In reply to Darin Adler from comment #11)
&gt; Comment on attachment 402407 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=402407&amp;action=review
&gt; 
&gt; Another one of those patches where I have a local git branch with lots of
&gt; nearly identical changes. Very happy to see this done!
&gt; 
&gt; &gt; Source/WebCore/svg/SVGAngleValue.cpp:109
&gt; &gt; +    auto helper = [&amp;](const auto* ptr, const auto* end) -&gt; ExceptionOr&lt;void&gt; {
&gt; 
&gt; I would probably just do auto twice here.

Fixed.

&gt; 
&gt; Noticed that whether there is a space after &quot;]&quot; and before &quot;(&quot; I snot the
&gt; same here as in another recent patch.

Oh no. Quick search of WebCore for &quot;)[&quot; yields 1508 results vs. 1257 for &quot;] (&quot;. (I think they are all for lambdas, but I could be wrong. Going to pick the no space since it has more, and try to codify it in the style checker and fix the rest in a follow up. Seems silly for that not to be defined.

&gt; 
&gt; &gt; Source/WebCore/svg/SVGAngleValue.cpp:125
&gt; &gt; +        const auto* ptr = value.characters8();
&gt; &gt; +        const auto* end = ptr + value.length();
&gt; 
&gt; Just auto maybe instead of const auto*?
&gt; 
&gt; Also, no need for &quot;end&quot; local variable.

Given the prevalence of this idiom, I really want to replace it with something nicer.

Making the generic function is easy enough:

    template&lt;typename StringType, typename Function&gt; decltype(auto) characters(const StringType&amp; value, Function&amp;&amp; functor)
    {
        if (string.is8Bit()) {
            auto* ptr = string.characters8();
            return functor(ptr, ptr + string.length());
        } else {
            auto* ptr = string.characters16();
            return functor(cur, ptr + string.length());
        }
    }

Used as:

    characters(myString, [](auto* ptr, auto* end) {
        ...
    });

The real question is do we make a free function like that, or a member of the String family of functions? And what do we name it. Going to address this in the next patch, which will be the real reason I started on this, getting rid of unnecessary upconverts.

&gt; 
&gt; &gt; Source/WebCore/svg/SVGAngleValue.cpp:130
&gt; &gt; +    const auto* ptr = value.characters16();
&gt; &gt; +    const auto* end = ptr + value.length();
&gt; 
&gt; Ditto.

Fixed.

&gt; 
&gt; &gt;&gt; Source/WebCore/svg/SVGAnimateMotionElement.cpp:165
&gt; &gt;&gt;      m_hasToPointAtEndOfDuration = true;
&gt; &gt; 
&gt; &gt; Looks like m_toPointAtEndOfDuration could probably be an optional as well?
&gt; 
&gt; &quot;true&quot;

Yup. (Took me much longer than I would like to admit to figure out that Anders wrote the first one, and who you were talking too :). )

&gt; 
&gt; &gt; Source/WebCore/svg/SVGAnimationElement.cpp:183
&gt; &gt; -        parseKeySplines(value, m_keySplines);
&gt; &gt; +        if (auto keySplines = parseKeySplines(value))
&gt; &gt; +            m_keySplines = WTFMove(*keySplines);
&gt; &gt; +        else
&gt; &gt; +            m_keySplines.clear();
&gt; 
&gt; Does this preserve the old behavior?

Yeah. The old parseKeySplines called clear() on the vector as the first thing it did when passed in.

&gt; 
&gt; Also, seems like some refactoring could make this a one-liner instead of an
&gt; if statement. Maybe valueOr or making more things Optional?
&gt; 
&gt; &gt;&gt; Source/WebCore/svg/SVGFEImageElement.cpp:-121
&gt; &gt;&gt; -        preserveAspectRatio.parse(value);
&gt; &gt; 
&gt; &gt; What happened to this parse call?
&gt; 
&gt; The parsing is now part of the constructor that takes a string.

Yup.

&gt; 
&gt; &gt; Source/WebCore/svg/SVGFitToViewBox.cpp:74
&gt; &gt; +        if (!value.isNull()) {
&gt; &gt; +            if (auto result = parseViewBox(value)) {
&gt; &gt; +                setViewBox(WTFMove(*result));
&gt; &gt; +                return true;
&gt; &gt; +            }
&gt; &gt; +        }
&gt; 
&gt; Does the null check help? Maybe parseViewBox will relatively quickly fail
&gt; when passed a null string and we don’t need this optimization.

I this parseViewBox will likely crash if it&apos;s null due to how UpconvertedCharacters() works. But I will double check.

&gt; 
&gt; &gt; Source/WebCore/svg/SVGFitToViewBox.h:69
&gt; &gt; +    Optional&lt;FloatRect&gt; parseViewBox(const AtomString&amp; value);
&gt; &gt; +    Optional&lt;FloatRect&gt; parseViewBox(const UChar*&amp; start, const UChar* end, bool validate = true);
&gt; 
&gt; Peculiar to have a parse function take an AtomString. I suggest changing it
&gt; to take a StringView. Then we would not need any overloading; callers of
&gt; both of the current functions could call a new single one.

I think we would still need the (const UChar*&amp;, ...) one for now, as the caller wants &quot;start&quot; advanced as part of the call.

&gt; 
&gt; &gt; Source/WebCore/svg/SVGHKernElement.cpp:49
&gt; &gt; +    // FIXME: Can this be shared with SVGVKernElement::buildVerticalKerningPair
&gt; 
&gt; Missing question mark as the end of this question.

Fixed.

&gt; 
&gt; &gt; Source/WebCore/svg/SVGHKernElement.cpp:84
&gt; &gt; +    SVGKerningPair kerningPair;
&gt; &gt; +    kerningPair.glyphName1 = WTFMove(*glyphName1);
&gt; &gt; +    kerningPair.glyphName2 = WTFMove(*glyphName2);
&gt; &gt; +    kerningPair.unicodeRange1 = WTFMove(unicodeString1-&gt;first);
&gt; &gt; +    kerningPair.unicodeName1 = WTFMove(unicodeString1-&gt;second);
&gt; &gt; +    kerningPair.unicodeRange2 = WTFMove(unicodeString2-&gt;first);
&gt; &gt; +    kerningPair.unicodeName2 = WTFMove(unicodeString2-&gt;second);
&gt; &gt; +    kerningPair.kerning = kerning;
&gt; &gt; +    return kerningPair;
&gt; 
&gt; Is construction rather than assignment a possibility here?

It can, done. What I really wanted here (and with the path segment types) since the order of arguments wasn&apos;t super clear as it is in other aggregates was to use designated initializer syntax (https://en.cppreference.com/w/cpp/language/aggregate_initialization#Designated_initializers) where you could do both:

    return SVGKerningPair {
        .glyphName1 = WTFMove(*glyphName1),
        .glyphName2 = WTFMove(*glyphName2),
        ...
    };

But it turns out I have to wait until c++20 for that. Alas.

&gt; 
&gt; &gt; Source/WebCore/svg/SVGParserUtilities.h:57
&gt; &gt; +Optional&lt;float&gt; parseNumber(const LChar*&amp; current, const LChar* end, SuffixSkippingPolicy = SuffixSkippingPolicy::Skip);
&gt; &gt; +Optional&lt;float&gt; parseNumber(const UChar*&amp; current, const UChar* end, SuffixSkippingPolicy = SuffixSkippingPolicy::Skip);
&gt; &gt; +Optional&lt;float&gt; parseNumber(const String&amp;, SuffixSkippingPolicy = SuffixSkippingPolicy::Skip);
&gt; &gt; +
&gt; &gt; +Optional&lt;std::pair&lt;float, float&gt;&gt; parseNumberOptionalNumber(const String&amp;);
&gt; &gt; +
&gt; &gt; +Optional&lt;bool&gt; parseArcFlag(const LChar*&amp; current, const LChar* end);
&gt; &gt; +Optional&lt;bool&gt; parseArcFlag(const UChar*&amp; current, const UChar* end);
&gt; &gt; +
&gt; &gt; +Optional&lt;FloatPoint&gt; parsePoint(const String&amp;);
&gt; &gt; +Optional&lt;FloatRect&gt; parseRect(const String&amp;);
&gt; &gt; +
&gt; &gt; +Optional&lt;FloatPoint&gt; parseFloatPoint(const LChar*&amp; current, const LChar* end);
&gt; &gt; +Optional&lt;FloatPoint&gt; parseFloatPoint(const UChar*&amp; current, const UChar* end);
&gt; &gt; +
&gt; &gt; +Optional&lt;std::pair&lt;UnicodeRanges, HashSet&lt;String&gt;&gt;&gt; parseKerningUnicodeString(const String&amp;);
&gt; &gt; +Optional&lt;HashSet&lt;String&gt;&gt; parseGlyphName(const String&amp;);
&gt; 
&gt; Seems like these functions should all take StringView. Except I guess the
&gt; ones that &quot;advance a pointer&quot; can’t yet. Certainly the ones that take String
&gt; should likely take a StringView unless String creates some optimization
&gt; opportunity.

Nope. They all just immediately create a StringView :). Fixed.

&gt; 
&gt; &gt; Source/WebCore/svg/SVGParserUtilities.h:62
&gt; &gt; +template&lt;typename CharacterType&gt; inline bool isSVGSpace(CharacterType c)
&gt; 
&gt; constexpr instead of inline

Fixed.

&gt; 
&gt; &gt; Source/WebCore/svg/SVGParserUtilities.h:67
&gt; &gt; +template&lt;typename CharacterType&gt; inline bool skipOptionalSVGSpaces(const CharacterType*&amp; ptr, const CharacterType* end)
&gt; 
&gt; Not sure we need to say inline. It’s not like more inlining will occur with
&gt; the keyword than without it.
&gt; 
&gt; Also, this function seems closely related to other skipUntil functions
&gt; elsewhere.

Yeah, all these micro-parser related functions need to be grouped together in a little toolkit and shared. 

&gt; 
&gt; &gt; Source/WebCore/svg/SVGParserUtilities.h:74
&gt; &gt; +template&lt;typename CharacterType&gt; inline bool skipOptionalSVGSpacesOrDelimiter(const CharacterType*&amp; ptr, const CharacterType* end, char delimiter = &apos;,&apos;)
&gt; 
&gt; Ditto.

Making it constexpr, removing the inline.

&gt; 
&gt; &gt; Source/WebCore/svg/SVGPathBlender.cpp:131
&gt; &gt; +    auto parsedTo = std::invoke(function, toSource);
&gt; 
&gt; I think we should WTFMove the function here. Can’t safely do it above, but
&gt; can do it here.

Interesting. What would be the value of that here? 

&gt; 
&gt; &gt; Source/WebCore/svg/SVGVKernElement.cpp:73
&gt; &gt; +    bool ok = false;
&gt; &gt; +    auto kerning = attributeWithoutSynchronization(SVGNames::kAttr).string().toFloat(&amp;ok);
&gt; &gt; +    if (!ok)
&gt; &gt; +        return WTF::nullopt;
&gt; 
&gt; I think we have an optional-based float parsing API somewhere instead of the
&gt; &quot;out argument OK boolean one&quot;. If not, future refactoring I guess.

Yeah, it&apos;s pretty odd that this one SVG function doesn&apos;t use the parseNumber() family of functions, but I didn&apos;t want to change that right now.

&gt; 
&gt; &gt; Source/WebCore/svg/SVGVKernElement.cpp:83
&gt; &gt; +    SVGKerningPair kerningPair;
&gt; &gt; +    kerningPair.glyphName1 = WTFMove(*glyphName1);
&gt; &gt; +    kerningPair.glyphName2 = WTFMove(*glyphName2);
&gt; &gt; +    kerningPair.unicodeRange1 = WTFMove(unicodeString1-&gt;first);
&gt; &gt; +    kerningPair.unicodeName1 = WTFMove(unicodeString1-&gt;second);
&gt; &gt; +    kerningPair.unicodeRange2 = WTFMove(unicodeString2-&gt;first);
&gt; &gt; +    kerningPair.unicodeName2 = WTFMove(unicodeString2-&gt;second);
&gt; &gt; +    kerningPair.kerning = kerning;
&gt; &gt; +    return kerningPair;
&gt; 
&gt; Same question about constructing rather than assigning.

Fixed.

&gt; 
&gt; &gt; Source/WebCore/svg/properties/SVGAnimationAdditiveValueFunctionImpl.h:258
&gt; &gt; +        float fromNumber = parseNumber(from).valueOr(0);
&gt; &gt; +        float toNumber = parseNumber(to).valueOr(0);
&gt; 
&gt; Not sure we need local variables. One liner would be nicer.

Fixed.

&gt; 
&gt; &gt; Source/WebCore/svg/properties/SVGAnimationAdditiveValueFunctionImpl.h:259
&gt; &gt;          return fabsf(toNumber - fromNumber);
&gt; 
&gt; std::abs better than fabsf.

Fixed.

&gt; 
&gt; &gt; Source/WebCore/svg/properties/SVGPropertyTraits.h:81
&gt; &gt; +        return std::make_pair(static_cast&lt;int&gt;(roundf(result-&gt;first)), static_cast&lt;int&gt;(roundf(result-&gt;second)));
&gt; 
&gt; std::round better than roundf

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1664893</commentid>
    <comment_count>14</comment_count>
      <attachid>402407</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-06-21 15:33:10 -0700</bug_when>
    <thetext>Comment on attachment 402407
Patch

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

&gt;&gt;&gt; Source/WebCore/svg/SVGPathBlender.cpp:131
&gt;&gt;&gt; +    auto parsedTo = std::invoke(function, toSource);
&gt;&gt; 
&gt;&gt; I think we should WTFMove the function here. Can’t safely do it above, but can do it here.
&gt; 
&gt; Interesting. What would be the value of that here?

Not sure but std::invoke does take an rvalue reference so I assume it has some value.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1664895</commentid>
    <comment_count>15</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-06-21 15:47:14 -0700</bug_when>
    <thetext>Committed r263334: &lt;https://trac.webkit.org/changeset/263334&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 402431.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1664897</commentid>
    <comment_count>16</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-06-21 15:48:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/64579570&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1664902</commentid>
    <comment_count>17</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-21 17:47:38 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #14)
&gt; Comment on attachment 402407 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=402407&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/svg/SVGPathBlender.cpp:131
&gt; &gt;&gt;&gt; +    auto parsedTo = std::invoke(function, toSource);
&gt; &gt;&gt; 
&gt; &gt;&gt; I think we should WTFMove the function here. Can’t safely do it above, but can do it here.
&gt; &gt; 
&gt; &gt; Interesting. What would be the value of that here?
&gt; 
&gt; Not sure but std::invoke does take an rvalue reference so I assume it has
&gt; some value.

This is one of those corners of c++ I am still wrapping my head around all these years later, but I think in this case, what invoke is taking is a forwarding (or sometimes called universal) reference, not actually an rvalue reference, which is the kind of reference that allows for so called &quot;perfect forwarding&quot; (meaning that the arguments to std::invoke can either be rvalue or lvalue references, and invoke just passes that through).

I get why this would make sense for other arguments to std::invoke (e.g. the arguments to the function you are invoking), but I don&apos;t quite understand the use of the function object itself being either an l-value or r-value, but I am sure there is some obscure one.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>402345</attachid>
            <date>2020-06-19 16:38:56 -0700</date>
            <delta_ts>2020-06-19 18:09:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213416-20200619163854.patch</filename>
            <type>text/plain</type>
            <size>144614</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MzI5NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3MSBAQAorMjAyMC0wNi0xOSAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQ29udmVydCBtdWNoIG9mIHRoZSBT
Vkcgc3RyaW5nIHBhcnNpbmcgY29kZSB0byB1c2UgT3B0aW9uYWwgYmFzZWQgcmV0dXJuIHZhbHVl
cyByYXRoZXIgdGhhbiBvdXQtcGFyYW1ldGVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEzNDE2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgV0lQCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogc3ZnL1NWR0FuZ2xlVmFsdWUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6cGFyc2VBbmdsZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5nbGVW
YWx1ZTo6c2V0VmFsdWVBc1N0cmluZyk6CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVNb3Rpb25F
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVNb3Rpb25FbGVtZW50Ojpj
YWxjdWxhdGVUb0F0RW5kT2ZEdXJhdGlvblZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0Fu
aW1hdGVNb3Rpb25FbGVtZW50OjpjYWxjdWxhdGVGcm9tQW5kVG9WYWx1ZXMpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OmNhbGN1bGF0ZUZyb21BbmRCeVZhbHVl
cyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6Y2FsY3VsYXRl
RGlzdGFuY2UpOgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OnBhcnNlS2V5U3BsaW5lcyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmlt
YXRpb25FbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisgICAgICAgICogc3ZnL1NWR0ZFQ29udm9s
dmVNYXRyaXhFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFQ29udm9sdmVNYXRy
aXhFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisgICAgICAgICogc3ZnL1NWR0ZFRGlmZnVzZUxp
Z2h0aW5nRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURpZmZ1c2VMaWdodGlu
Z0VsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKiBzdmcvU1ZHRkVEcm9wU2hhZG93
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURyb3BTaGFkb3dFbGVtZW50Ojpw
YXJzZUF0dHJpYnV0ZSk6CisgICAgICAgICogc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OnBhcnNlQXR0
cmlidXRlKToKKyAgICAgICAgKiBzdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRkVJbWFnZUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKiBz
dmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRU1v
cnBob2xvZ3lFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisgICAgICAgICogc3ZnL1NWR0ZFU3Bl
Y3VsYXJMaWdodGluZ0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVTcGVjdWxh
ckxpZ2h0aW5nRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAgICAgICAqIHN2Zy9TVkdGRVR1
cmJ1bGVuY2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFVHVyYnVsZW5jZUVs
ZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKiBzdmcvU1ZHRml0VG9WaWV3Qm94LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpdFRvVmlld0JveDo6cGFyc2VBdHRyaWJ1dGUpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRml0VG9WaWV3Qm94OjpwYXJzZVZpZXdCb3gpOgorICAgICAg
ICAqIHN2Zy9TVkdGaXRUb1ZpZXdCb3guaDoKKyAgICAgICAgKiBzdmcvU1ZHR2x5cGhSZWZFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlRmxvYXQpOgorICAgICAgICAqIHN2Zy9T
VkdIS2VybkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSEtlcm5FbGVtZW50Ojpi
dWlsZEhvcml6b250YWxLZXJuaW5nUGFpciBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0hLZXJu
RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdJbWFnZUVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHSW1hZ2VFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisgICAgICAgICogc3Zn
L1NWR0xlbmd0aFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0xlbmd0aFZhbHVlOjpz
ZXRWYWx1ZUFzU3RyaW5nKToKKyAgICAgICAgKiBzdmcvU1ZHTnVtYmVyTGlzdC5oOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHTnVtYmVyTGlzdDo6cGFyc2UpOgorICAgICAgICAqIHN2Zy9TVkdQYXJz
ZXJVdGlsaXRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2VuZXJpY1BhcnNlTnVtYmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OnBhcnNlTnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OmdlbmVy
aWNQYXJzZUFyY0ZsYWcpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VBcmNGbGFnKToKKyAgICAg
ICAgKFdlYkNvcmU6OnBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6cGFyc2VQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVJlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6cGFyc2VHbHlwaE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VVbmljb2Rl
UmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VLZXJuaW5nVW5pY29kZVN0cmluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpnZW5lcmljUGFyc2VGbG9hdFBvaW50KToKKyAgICAgICAgKFdlYkNv
cmU6OnBhcnNlRmxvYXRQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVNWR051bWJlcik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpwYXJzZU51bWJlckZyb21TdHJpbmcpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VEZWxpbWl0ZWRTdHJpbmcpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6cGFyc2VGbG9hdFBvaW50Mik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpwYXJzZUZsb2F0UG9pbnQzKTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHUGFy
c2VyVXRpbGl0aWVzLmg6CisgICAgICAgIChXZWJDb3JlOjppc1NWR1NwYWNlKToKKyAgICAgICAg
KFdlYkNvcmU6OnNraXBPcHRpb25hbFNWR1NwYWNlcyk6CisgICAgICAgIChXZWJDb3JlOjpza2lw
T3B0aW9uYWxTVkdTcGFjZXNPckRlbGltaXRlcik6CisgICAgICAgICogc3ZnL1NWR1BhdGhCbGVu
ZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnB1bGxGcm9tU291cmNlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdQYXRoQmxlbmRlcjo6YmxlbmRNb3ZlVG9TZWdtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1BhdGhCbGVuZGVyOjpibGVuZExpbmVUb1NlZ21lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHUGF0aEJsZW5kZXI6OmJsZW5kTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJsZW5kZXI6OmJsZW5kTGluZVRvVmVydGljYWxTZWdtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCbGVuZGVyOjpibGVuZEN1cnZlVG9DdWJpY1Nl
Z21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJsZW5kZXI6OmJsZW5kQ3VydmVUb0N1
YmljU21vb3RoU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQmxlbmRlcjo6Ymxl
bmRDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQmxl
bmRlcjo6YmxlbmRDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdQYXRoQmxlbmRlcjo6YmxlbmRBcmNUb1NlZ21lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHUGF0aEJsZW5kZXI6OmNhbkJsZW5kUGF0aHMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
UGF0aEJsZW5kZXI6OmJsZW5kQW5pbWF0ZWRQYXRoKToKKyAgICAgICAgKiBzdmcvU1ZHUGF0aEJ5
dGVTdHJlYW1Tb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW1T
b3VyY2U6Om5leHRDb21tYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFt
U291cmNlOjpwYXJzZVNWR1NlZ21lbnRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhC
eXRlU3RyZWFtU291cmNlOjpwYXJzZU1vdmVUb1NlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlTGluZVRvU2VnbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VMaW5lVG9Ib3Jpem9udGFsU2Vn
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VM
aW5lVG9WZXJ0aWNhbFNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJl
YW1Tb3VyY2U6OnBhcnNlQ3VydmVUb0N1YmljU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZUN1cnZlVG9R
dWFkcmF0aWNTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFtU291
cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZUFyY1RvU2VnbWVudCk6CisgICAgICAg
ICogc3ZnL1NWR1BhdGhCeXRlU3RyZWFtU291cmNlLmg6CisgICAgICAgICogc3ZnL1NWR1BhdGhQ
YXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFBhcnNlcjo6cGFyc2VNb3ZlVG9T
ZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhQYXJzZXI6OnBhcnNlTGluZVRvU2Vn
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoUGFyc2VyOjpwYXJzZUxpbmVUb0hvcml6
b250YWxTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhQYXJzZXI6OnBhcnNlTGlu
ZVRvVmVydGljYWxTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhQYXJzZXI6OnBh
cnNlQ3VydmVUb0N1YmljU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoUGFyc2Vy
OjpwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
UGF0aFBhcnNlcjo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdQYXRoUGFyc2VyOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhQYXJzZXI6OnBhcnNlQXJjVG9TZWdtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1BhdGhQYXJzZXI6OnBhcnNlUGF0aERhdGEpOgorICAgICAgICAq
IHN2Zy9TVkdQYXRoUGFyc2VyLmg6CisgICAgICAgICogc3ZnL1NWR1BhdGhTZWdMaXN0U291cmNl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdMaXN0U291cmNlOjpuZXh0Q29tbWFu
ZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VTVkdTZWdt
ZW50VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VN
b3ZlVG9TZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdMaXN0U291cmNlOjpw
YXJzZUxpbmVUb1NlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0xpc3RTb3Vy
Y2U6OnBhcnNlTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
UGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNlTGluZVRvVmVydGljYWxTZWdtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNlQ3VydmVUb0N1
YmljU21vb3RoU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnTGlzdFNvdXJj
ZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQ
YXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VBcmNUb1NlZ21lbnQp
OgorICAgICAgICAqIHN2Zy9TVkdQYXRoU2VnTGlzdFNvdXJjZS5oOgorICAgICAgICAqIHN2Zy9T
VkdQYXRoU291cmNlLmg6CisgICAgICAgICogc3ZnL1NWR1BhdGhTdHJpbmdTb3VyY2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6bmV4dENvbW1hbmRIZWxwZXIpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUGF0aFN0cmluZ1NvdXJjZTo6bmV4dENvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6cGFy
c2VTVkdTZWdtZW50VHlwZUhlbHBlcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU3RyaW5n
U291cmNlOjpwYXJzZVNWR1NlZ21lbnRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhT
dHJpbmdTb3VyY2U6OnBhcnNlTW92ZVRvU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQ
YXRoU3RyaW5nU291cmNlOjpwYXJzZUxpbmVUb1NlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUxpbmVUb1ZlcnRpY2FsU2Vn
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUN1cnZl
VG9DdWJpY1NlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZTo6
cGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Bh
dGhTdHJpbmdTb3VyY2U6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3Ro
U2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUFy
Y1RvU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUFyY1RvU2VnbWVudEhlbHBlcik6
IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR1BhdGhTdHJpbmdTb3VyY2UuaDoKKyAgICAgICAg
KiBzdmcvU1ZHUG9pbnRMaXN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdQb2ludExpc3Q6OnBh
cnNlKToKKyAgICAgICAgKiBzdmcvU1ZHVG9PVEZGb250Q29udmVyc2lvbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFkZEtlcm5pbmdQYWlyIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kS0VSTlN1YnRh
YmxlKToKKyAgICAgICAgKiBzdmcvU1ZHVHJhbnNmb3JtTGlzdC5oOgorICAgICAgICAqIHN2Zy9T
VkdUcmFuc2Zvcm1hYmxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlVHJhbnNmb3JtUGFy
YW1MaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNm
b3JtVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VBbmRT
a2lwVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZVRyYW5z
Zm9ybVR5cGUpOgorICAgICAgICAqIHN2Zy9TVkdUcmFuc2Zvcm1hYmxlLmg6CisgICAgICAgICog
c3ZnL1NWR1ZLZXJuRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdWS2VybkVsZW1l
bnQ6OmJ1aWxkVmVydGljYWxLZXJuaW5nUGFpciBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR1ZL
ZXJuRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdWaWV3U3BlYy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdWaWV3U3BlYzo6cGFyc2VWaWV3U3BlYyk6CisgICAgICAgICogc3ZnL3Byb3Bl
cnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oOgorICAgICAgICAq
IHN2Zy9wcm9wZXJ0aWVzL1NWR1Byb3BlcnR5VHJhaXRzLmg6CisgICAgICAgIChXZWJDb3JlOjpT
VkdQcm9wZXJ0eVRyYWl0czxmbG9hdD46OmZyb21TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUHJvcGVydHlUcmFpdHM8ZmxvYXQ+OjpwYXJzZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQ
cm9wZXJ0eVRyYWl0czxGbG9hdFBvaW50Pjo6ZnJvbVN0cmluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdQcm9wZXJ0eVRyYWl0czxGbG9hdFBvaW50Pjo6cGFyc2UpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHUHJvcGVydHlUcmFpdHM8RmxvYXRSZWN0Pjo6ZnJvbVN0cmluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxGbG9hdFJlY3Q+OjpwYXJzZSk6CisKIDIwMjAtMDYt
MTkgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBBdm9pZCBpbml0
aWFsaXppbmcgUmVuZGVyVGhlbWUgc2luZ2xldG9uIHVubmVjZXNzYXJpbHkgaW4gdGhlIFVJUHJv
Y2VzcwpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMDA4Myw2ICsxMDA4
Myw3IEBACiAJCTdDODNERTg1MUQwNENCRDQwMEZFQkNGMyAvKiBTcHJpbmdTb2x2ZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3ByaW5nU29sdmVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTdDODVCMjAxMjJGQjA0ODUwMDMwNjg0RiAvKiBXSExTTFVubmFt
ZWRUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMVW5uYW1lZFR5cGUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Qzg1QjIwNDIyRkIwNjMyMDAzMDY4NEYgLyogV0hM
U0xVbm5hbWVkVHlwZUhhc2guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xVbm5hbWVkVHlwZUhhc2gu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0M4ODI0QzQyNDlEN0IwNTAwRUQ4RkM0
IC8qIFNWR1BhdGhTZWdWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
VkdQYXRoU2VnVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0M4RTM0OTIx
RTRBMzM4RTAwNTRDRTIzIC8qIEpTRE9NQ29udmVydEFueS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU0RPTUNvbnZlcnRBbnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJN0M4RTM0OTMxRTRBMzM4RTAwNTRDRTIzIC8qIEpTRE9NQ29udmVydEJhc2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNET01Db252ZXJ0QmFzZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3QzhFMzQ5NDFFNEEzMzhFMDA1NENFMjMgLyogSlNET01D
b252ZXJ0Qm9vbGVhbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0RPTUNv
bnZlcnRCb29sZWFuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNTE4Niw2ICsy
NTE4Nyw3IEBACiAJCQkJODRCNkI5NzYxMjBGMTNFNTAwQjhFRkFGIC8qIFNWR1BhdGhTZWdMaXN0
U291cmNlLmggKi8sCiAJCQkJQjIyMjc4RUYwRDAwQkYyMTAwNzFCNzgyIC8qIFNWR1BhdGhTZWdN
b3ZldG9BYnMuaWRsICovLAogCQkJCUIyMjI3OEYwMEQwMEJGMjEwMDcxQjc4MiAvKiBTVkdQYXRo
U2VnTW92ZXRvUmVsLmlkbCAqLywKKwkJCQk3Qzg4MjRDNDI0OUQ3QjA1MDBFRDhGQzQgLyogU1ZH
UGF0aFNlZ1ZhbHVlLmggKi8sCiAJCQkJODQzMDBCRDcxMjBDOUFENDAwMjE5NTRBIC8qIFNWR1Bh
dGhTb3VyY2UuaCAqLywKIAkJCQk4NDE5RDJCNzEyMEUwQzc2MDAxNDFGOEYgLyogU1ZHUGF0aFN0
cmluZ0J1aWxkZXIuY3BwICovLAogCQkJCTg0MTlEMkI4MTIwRTBDNzYwMDE0MUY4RiAvKiBTVkdQ
YXRoU3RyaW5nQnVpbGRlci5oICovLApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuZ2xl
VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmdsZVZhbHVl
LmNwcAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuZ2xlVmFs
dWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3IEBAIFN0cmluZyBTVkdBbmdsZVZh
bHVlOjp2YWx1ZUFzU3RyaW5nKCkgY28KICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgU1ZHQW5nbGVWYWx1ZTo6VHlwZSBwYXJzZUFuZ2xlVHlwZShjb25zdCBVQ2hhciog
cHRyLCBjb25zdCBVQ2hhciogZW5kKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4g
c3RhdGljIGlubGluZSBTVkdBbmdsZVZhbHVlOjpUeXBlIHBhcnNlQW5nbGVUeXBlKGNvbnN0IENo
YXJhY3RlclR5cGUqIHB0ciwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kKQogewogICAgIHN3aXRj
aCAoZW5kIC0gcHRyKSB7CiAgICAgY2FzZSAwOgpAQCAtMTA2LDIxICsxMDYsMjkgQEAgRXhjZXB0
aW9uT3I8dm9pZD4gU1ZHQW5nbGVWYWx1ZTo6c2V0VmFsdQogICAgICAgICByZXR1cm4geyB9Owog
ICAgIH0KIAotICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyh2YWx1
ZSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIqIHB0ciA9IHVwY29u
dmVydGVkQ2hhcmFjdGVyczsKLSAgICBjb25zdCBVQ2hhciogZW5kID0gcHRyICsgdmFsdWUubGVu
Z3RoKCk7Ci0KLSAgICBmbG9hdCB2YWx1ZUluU3BlY2lmaWVkVW5pdHMgPSAwOwotICAgIGlmICgh
cGFyc2VOdW1iZXIocHRyLCBlbmQsIHZhbHVlSW5TcGVjaWZpZWRVbml0cywgZmFsc2UpKQotICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKLQotICAgIGF1dG8gdW5pdFR5
cGUgPSBwYXJzZUFuZ2xlVHlwZShwdHIsIGVuZCk7Ci0gICAgaWYgKHVuaXRUeXBlID09IFNWR19B
TkdMRVRZUEVfVU5LTk9XTikKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9y
IH07CisgICAgYXV0byBoZWxwZXIgPSBbJl0oY29uc3QgYXV0byogcHRyLCBjb25zdCBhdXRvKiBl
bmQpIC0+IEV4Y2VwdGlvbk9yPHZvaWQ+IHsKKyAgICAgICAgYXV0byB2YWx1ZUluU3BlY2lmaWVk
VW5pdHMgPSBwYXJzZU51bWJlcihwdHIsIGVuZCwgU3VmZml4U2tpcHBpbmdQb2xpY3k6OkRvbnRT
a2lwKTsKKyAgICAgICAgaWYgKCF2YWx1ZUluU3BlY2lmaWVkVW5pdHMpCisgICAgICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKKworICAgICAgICBhdXRvIHVuaXRUeXBl
ID0gcGFyc2VBbmdsZVR5cGUocHRyLCBlbmQpOworICAgICAgICBpZiAodW5pdFR5cGUgPT0gU1ZH
QW5nbGVWYWx1ZTo6U1ZHX0FOR0xFVFlQRV9VTktOT1dOKQorICAgICAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiAKLSAgICBtX3VuaXRUeXBlID0gdW5pdFR5cGU7Ci0g
ICAgbV92YWx1ZUluU3BlY2lmaWVkVW5pdHMgPSB2YWx1ZUluU3BlY2lmaWVkVW5pdHM7Ci0gICAg
cmV0dXJuIHsgfTsKKyAgICAgICAgbV91bml0VHlwZSA9IHVuaXRUeXBlOworICAgICAgICBtX3Zh
bHVlSW5TcGVjaWZpZWRVbml0cyA9ICp2YWx1ZUluU3BlY2lmaWVkVW5pdHM7CisgICAgICAgIHJl
dHVybiB7IH07CisgICAgfTsKKworICAgIGlmICh2YWx1ZS5pczhCaXQoKSkgeworICAgICAgICBj
b25zdCBhdXRvKiBwdHIgPSB2YWx1ZS5jaGFyYWN0ZXJzOCgpOworICAgICAgICBjb25zdCBhdXRv
KiBlbmQgPSBwdHIgKyB2YWx1ZS5sZW5ndGgoKTsKKyAgICAgICAgcmV0dXJuIGhlbHBlcihwdHIs
IGVuZCk7CisgICAgfQorCisgICAgY29uc3QgYXV0byogcHRyID0gdmFsdWUuY2hhcmFjdGVyczE2
KCk7CisgICAgY29uc3QgYXV0byogZW5kID0gcHRyICsgdmFsdWUubGVuZ3RoKCk7CisgICAgcmV0
dXJuIGhlbHBlcihwdHIsIGVuZCk7CiB9CiAKIEV4Y2VwdGlvbk9yPHZvaWQ+IFNWR0FuZ2xlVmFs
dWU6Om5ld1ZhbHVlU3BlY2lmaWVkVW5pdHModW5zaWduZWQgc2hvcnQgdW5pdFR5cGUsIGZsb2F0
IHZhbHVlSW5TcGVjaWZpZWRVbml0cykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmlt
YXRlTW90aW9uRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTYxLDcgKzE2MSw3IEBAIHZvaWQgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OnN0b3BBbmltYXQK
IAogYm9vbCBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6Y2FsY3VsYXRlVG9BdEVuZE9mRHVyYXRp
b25WYWx1ZShjb25zdCBTdHJpbmcmIHRvQXRFbmRPZkR1cmF0aW9uU3RyaW5nKQogewotICAgIHBh
cnNlUG9pbnQodG9BdEVuZE9mRHVyYXRpb25TdHJpbmcsIG1fdG9Qb2ludEF0RW5kT2ZEdXJhdGlv
bik7CisgICAgbV90b1BvaW50QXRFbmRPZkR1cmF0aW9uID0gcGFyc2VQb2ludCh0b0F0RW5kT2ZE
dXJhdGlvblN0cmluZykudmFsdWVPcihGbG9hdFBvaW50IHsgfSk7CiAgICAgbV9oYXNUb1BvaW50
QXRFbmRPZkR1cmF0aW9uID0gdHJ1ZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTE2OSw4ICsx
NjksOCBAQCBib29sIFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OjpjYWxjdWxhdGVUCiBib29sIFNW
R0FuaW1hdGVNb3Rpb25FbGVtZW50OjpjYWxjdWxhdGVGcm9tQW5kVG9WYWx1ZXMoY29uc3QgU3Ry
aW5nJiBmcm9tU3RyaW5nLCBjb25zdCBTdHJpbmcmIHRvU3RyaW5nKQogewogICAgIG1faGFzVG9Q
b2ludEF0RW5kT2ZEdXJhdGlvbiA9IGZhbHNlOwotICAgIHBhcnNlUG9pbnQoZnJvbVN0cmluZywg
bV9mcm9tUG9pbnQpOwotICAgIHBhcnNlUG9pbnQodG9TdHJpbmcsIG1fdG9Qb2ludCk7CisgICAg
bV9mcm9tUG9pbnQgPSBwYXJzZVBvaW50KGZyb21TdHJpbmcpLnZhbHVlT3IoRmxvYXRQb2ludCB7
IH0pOworICAgIG1fdG9Qb2ludCA9IHBhcnNlUG9pbnQodG9TdHJpbmcpLnZhbHVlT3IoRmxvYXRQ
b2ludCB7IH0pOwogICAgIHJldHVybiB0cnVlOwogfQogICAgIApAQCAtMTc5LDkgKzE3OSw4IEBA
IGJvb2wgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OmNhbGN1bGF0ZUYKICAgICBtX2hhc1RvUG9p
bnRBdEVuZE9mRHVyYXRpb24gPSBmYWxzZTsKICAgICBpZiAoYW5pbWF0aW9uTW9kZSgpID09IEFu
aW1hdGlvbk1vZGU6OkJ5ICYmICFpc0FkZGl0aXZlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBwYXJzZVBvaW50KGZyb21TdHJpbmcsIG1fZnJvbVBvaW50KTsKLSAgICBGbG9hdFBvaW50
IGJ5UG9pbnQ7Ci0gICAgcGFyc2VQb2ludChieVN0cmluZywgYnlQb2ludCk7CisgICAgbV9mcm9t
UG9pbnQgPSBwYXJzZVBvaW50KGZyb21TdHJpbmcpLnZhbHVlT3IoRmxvYXRQb2ludCB7IH0pOwor
ICAgIGF1dG8gYnlQb2ludCA9IHBhcnNlUG9pbnQoYnlTdHJpbmcpLnZhbHVlT3IoRmxvYXRQb2lu
dCB7IH0pOwogICAgIG1fdG9Qb2ludCA9IEZsb2F0UG9pbnQobV9mcm9tUG9pbnQueCgpICsgYnlQ
b2ludC54KCksIG1fZnJvbVBvaW50LnkoKSArIGJ5UG9pbnQueSgpKTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KQEAgLTI3NSwxMyArMjc0LDEzIEBAIHZvaWQgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6
OmFwcGx5UmVzdWwKIAogT3B0aW9uYWw8ZmxvYXQ+IFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50Ojpj
YWxjdWxhdGVEaXN0YW5jZShjb25zdCBTdHJpbmcmIGZyb21TdHJpbmcsIGNvbnN0IFN0cmluZyYg
dG9TdHJpbmcpCiB7Ci0gICAgRmxvYXRQb2ludCBmcm9tOwotICAgIEZsb2F0UG9pbnQgdG87Ci0g
ICAgaWYgKCFwYXJzZVBvaW50KGZyb21TdHJpbmcsIGZyb20pKQorICAgIGF1dG8gZnJvbSA9IHBh
cnNlUG9pbnQoZnJvbVN0cmluZyk7CisgICAgaWYgKCFmcm9tKQogICAgICAgICByZXR1cm4geyB9
OwotICAgIGlmICghcGFyc2VQb2ludCh0b1N0cmluZywgdG8pKQorICAgIGF1dG8gdG8gPSBwYXJz
ZVBvaW50KHRvU3RyaW5nKTsKKyAgICBpZiAoIXRvKQogICAgICAgICByZXR1cm4geyB9OwotICAg
IEZsb2F0U2l6ZSBkaWZmID0gdG8gLSBmcm9tOworICAgIGF1dG8gZGlmZiA9ICp0byAtICpmcm9t
OwogICAgIHJldHVybiBzdGQ6Omh5cG90KGRpZmYud2lkdGgoKSwgZGlmZi5oZWlnaHQoKSk7CiB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDI2MzE3NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsMTEgKzc3LDEwIEBAIGZhaWw6CiAgICAgcmVzdWx0
LmNsZWFyKCk7CiB9CiAKLXN0YXRpYyB2b2lkIHBhcnNlS2V5U3BsaW5lcyhjb25zdCBTdHJpbmcm
IHBhcnNlLCBWZWN0b3I8VW5pdEJlemllcj4mIHJlc3VsdCkKK3N0YXRpYyBPcHRpb25hbDxWZWN0
b3I8VW5pdEJlemllcj4+IHBhcnNlS2V5U3BsaW5lcyhjb25zdCBTdHJpbmcmIHBhcnNlKQogewot
ICAgIHJlc3VsdC5jbGVhcigpOwogICAgIGlmIChwYXJzZS5pc0VtcHR5KCkpCi0gICAgICAgIHJl
dHVybjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIGF1dG8gdXBjb252ZXJ0
ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyhwYXJzZSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7
CiAgICAgY29uc3QgVUNoYXIqIGN1ciA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKQEAgLTg5LDMy
ICs4OCwyNiBAQCBzdGF0aWMgdm9pZCBwYXJzZUtleVNwbGluZXMoY29uc3QgU3RyaW5nCiAKICAg
ICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoY3VyLCBlbmQpOwogCisgICAgVmVjdG9yPFVuaXRCZXpp
ZXI+IHJlc3VsdDsKKwogICAgIGJvb2wgZGVsaW1QYXJzZWQgPSBmYWxzZTsKICAgICB3aGlsZSAo
Y3VyIDwgZW5kKSB7CiAgICAgICAgIGRlbGltUGFyc2VkID0gZmFsc2U7Ci0gICAgICAgIGZsb2F0
IHBvc0EgPSAwOwotICAgICAgICBpZiAoIXBhcnNlTnVtYmVyKGN1ciwgZW5kLCBwb3NBKSkgewot
ICAgICAgICAgICAgcmVzdWx0LmNsZWFyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLQotICAgICAgICBmbG9hdCBwb3NCID0gMDsKLSAgICAgICAgaWYgKCFwYXJzZU51bWJlcihj
dXIsIGVuZCwgcG9zQikpIHsKLSAgICAgICAgICAgIHJlc3VsdC5jbGVhcigpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZmxvYXQgcG9zQyA9IDA7Ci0gICAgICAg
IGlmICghcGFyc2VOdW1iZXIoY3VyLCBlbmQsIHBvc0MpKSB7Ci0gICAgICAgICAgICByZXN1bHQu
Y2xlYXIoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGZsb2F0
IHBvc0QgPSAwOwotICAgICAgICBpZiAoIXBhcnNlTnVtYmVyKGN1ciwgZW5kLCBwb3NELCBmYWxz
ZSkpIHsKLSAgICAgICAgICAgIHJlc3VsdC5jbGVhcigpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9CisgICAgICAgIGF1dG8gcG9zQSA9IHBhcnNlTnVtYmVyKGN1ciwgZW5kKTsKKyAg
ICAgICAgaWYgKCFwb3NBKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAg
ICAgICBhdXRvIHBvc0IgPSBwYXJzZU51bWJlcihjdXIsIGVuZCk7CisgICAgICAgIGlmICghcG9z
QikKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICAgICAgYXV0byBwb3ND
ID0gcGFyc2VOdW1iZXIoY3VyLCBlbmQpOworICAgICAgICBpZiAoIXBvc0MpCisgICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgICAgIGF1dG8gcG9zRCA9IHBhcnNlTnVtYmVy
KGN1ciwgZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNraXApOworICAgICAgICBpZiAo
IXBvc0QpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgICAgIHNraXBP
cHRpb25hbFNWR1NwYWNlcyhjdXIsIGVuZCk7CiAKQEAgLTEyMiwxMiArMTE1LDE2IEBAIHN0YXRp
YyB2b2lkIHBhcnNlS2V5U3BsaW5lcyhjb25zdCBTdHJpbmcKICAgICAgICAgICAgIGRlbGltUGFy
c2VkID0gdHJ1ZTsKICAgICAgICAgICAgIGN1cisrOwogICAgICAgICB9CisKICAgICAgICAgc2tp
cE9wdGlvbmFsU1ZHU3BhY2VzKGN1ciwgZW5kKTsKIAotICAgICAgICByZXN1bHQuYXBwZW5kKFVu
aXRCZXppZXIocG9zQSwgcG9zQiwgcG9zQywgcG9zRCkpOworICAgICAgICByZXN1bHQuYXBwZW5k
KFVuaXRCZXppZXIgeyAqcG9zQSwgKnBvc0IsICpwb3NDLCAqcG9zRCB9KTsKICAgICB9CisKICAg
ICBpZiAoIShjdXIgPT0gZW5kICYmICFkZWxpbVBhcnNlZCkpCi0gICAgICAgIHJlc3VsdC5jbGVh
cigpOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAogYm9vbCBTVkdBbmltYXRpb25FbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25z
dCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKQEAgLTE4MCw3ICsxNzcsOCBAQCB2b2lkIFNWR0Fu
aW1hdGlvbkVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlCiAgICAgfQogCiAgICAgaWYgKG5hbWUgPT0g
U1ZHTmFtZXM6OmtleVNwbGluZXNBdHRyKSB7Ci0gICAgICAgIHBhcnNlS2V5U3BsaW5lcyh2YWx1
ZSwgbV9rZXlTcGxpbmVzKTsKKyAgICAgICAgaWYgKGF1dG8ga2V5U3BsaW5lcyA9IHBhcnNlS2V5
U3BsaW5lcyh2YWx1ZSkpCisgICAgICAgICAgICBtX2tleVNwbGluZXMgPSBXVEZNb3ZlKCprZXlT
cGxpbmVzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuY3BwCShyZXZpc2lvbiAyNjMx
NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02NywxMCArNjcsMTAgQEAgdm9pZCBTVkdGRUNvbnZvbHZlTWF0
cml4RWxlbWVudDo6cGFyc2VBdAogICAgIH0KIAogICAgIGlmIChuYW1lID09IFNWR05hbWVzOjpv
cmRlckF0dHIpIHsKLSAgICAgICAgZmxvYXQgeCwgeTsKLSAgICAgICAgaWYgKHBhcnNlTnVtYmVy
T3B0aW9uYWxOdW1iZXIodmFsdWUsIHgsIHkpICYmIHggPj0gMSAmJiB5ID49IDEpIHsKLSAgICAg
ICAgICAgIG1fb3JkZXJYLT5zZXRCYXNlVmFsSW50ZXJuYWwoeCk7Ci0gICAgICAgICAgICBtX29y
ZGVyWS0+c2V0QmFzZVZhbEludGVybmFsKHkpOworICAgICAgICBhdXRvIHJlc3VsdCA9IHBhcnNl
TnVtYmVyT3B0aW9uYWxOdW1iZXIodmFsdWUpOworICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3Vs
dC0+Zmlyc3QgPj0gMSAmJiByZXN1bHQtPnNlY29uZCA+PSAxKSB7CisgICAgICAgICAgICBtX29y
ZGVyWC0+c2V0QmFzZVZhbEludGVybmFsKHJlc3VsdC0+Zmlyc3QpOworICAgICAgICAgICAgbV9v
cmRlclktPnNldEJhc2VWYWxJbnRlcm5hbChyZXN1bHQtPnNlY29uZCk7CiAgICAgICAgIH0gZWxz
ZQogICAgICAgICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVwb3J0V2Fy
bmluZygiZmVDb252b2x2ZU1hdHJpeDogcHJvYmxlbSBwYXJzaW5nIG9yZGVyPVwiIiArIHZhbHVl
ICsgIlwiLiBGaWx0ZXJlZCBlbGVtZW50IHdpbGwgbm90IGJlIGRpc3BsYXllZC4iKTsKICAgICAg
ICAgcmV0dXJuOwpAQCAtMTE1LDEwICsxMTUsMTAgQEAgdm9pZCBTVkdGRUNvbnZvbHZlTWF0cml4
RWxlbWVudDo6cGFyc2VBdAogICAgIH0KIAogICAgIGlmIChuYW1lID09IFNWR05hbWVzOjprZXJu
ZWxVbml0TGVuZ3RoQXR0cikgewotICAgICAgICBmbG9hdCB4LCB5OwotICAgICAgICBpZiAocGFy
c2VOdW1iZXJPcHRpb25hbE51bWJlcih2YWx1ZSwgeCwgeSkgJiYgeCA+IDAgJiYgeSA+IDApIHsK
LSAgICAgICAgICAgIG1fa2VybmVsVW5pdExlbmd0aFgtPnNldEJhc2VWYWxJbnRlcm5hbCh4KTsK
LSAgICAgICAgICAgIG1fa2VybmVsVW5pdExlbmd0aFktPnNldEJhc2VWYWxJbnRlcm5hbCh5KTsK
KyAgICAgICAgYXV0byByZXN1bHQgPSBwYXJzZU51bWJlck9wdGlvbmFsTnVtYmVyKHZhbHVlKTsK
KyAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQtPmZpcnN0ID4gMCAmJiByZXN1bHQtPnNlY29u
ZCA+IDApIHsKKyAgICAgICAgICAgIG1fa2VybmVsVW5pdExlbmd0aFgtPnNldEJhc2VWYWxJbnRl
cm5hbChyZXN1bHQtPmZpcnN0KTsKKyAgICAgICAgICAgIG1fa2VybmVsVW5pdExlbmd0aFktPnNl
dEJhc2VWYWxJbnRlcm5hbChyZXN1bHQtPnNlY29uZCk7CiAgICAgICAgIH0gZWxzZQogICAgICAg
ICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVwb3J0V2FybmluZygiZmVD
b252b2x2ZU1hdHJpeDogcHJvYmxlbSBwYXJzaW5nIGtlcm5lbFVuaXRMZW5ndGg9XCIiICsgdmFs
dWUgKyAiXCIuIEZpbHRlcmVkIGVsZW1lbnQgd2lsbCBub3QgYmUgZGlzcGxheWVkLiIpOwogICAg
ICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRp
bmdFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZm
dXNlTGlnaHRpbmdFbGVtZW50LmNwcAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTcxLDEwICs3MSw5IEBAIHZvaWQgU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjpwYXJzZUEK
ICAgICB9CiAKICAgICBpZiAobmFtZSA9PSBTVkdOYW1lczo6a2VybmVsVW5pdExlbmd0aEF0dHIp
IHsKLSAgICAgICAgZmxvYXQgeCwgeTsKLSAgICAgICAgaWYgKHBhcnNlTnVtYmVyT3B0aW9uYWxO
dW1iZXIodmFsdWUsIHgsIHkpKSB7Ci0gICAgICAgICAgICBtX2tlcm5lbFVuaXRMZW5ndGhYLT5z
ZXRCYXNlVmFsSW50ZXJuYWwoeCk7Ci0gICAgICAgICAgICBtX2tlcm5lbFVuaXRMZW5ndGhZLT5z
ZXRCYXNlVmFsSW50ZXJuYWwoeSk7CisgICAgICAgIGlmIChhdXRvIHJlc3VsdCA9IHBhcnNlTnVt
YmVyT3B0aW9uYWxOdW1iZXIodmFsdWUpKSB7CisgICAgICAgICAgICBtX2tlcm5lbFVuaXRMZW5n
dGhYLT5zZXRCYXNlVmFsSW50ZXJuYWwocmVzdWx0LT5maXJzdCk7CisgICAgICAgICAgICBtX2tl
cm5lbFVuaXRMZW5ndGhZLT5zZXRCYXNlVmFsSW50ZXJuYWwocmVzdWx0LT5zZWNvbmQpOwogICAg
ICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVEcm9wU2hhZG93RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuY3BwCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTYxLDEwICs2MSw5IEBAIHZvaWQgU1ZHRkVEcm9wU2hhZG93RWxlbWVudDo6c2V0U3RkRGV2
aWEKIHZvaWQgU1ZHRkVEcm9wU2hhZG93RWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVh
bGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbVN0cmluZyYgdmFsdWUpCiB7CiAgICAgaWYgKG5h
bWUgPT0gU1ZHTmFtZXM6OnN0ZERldmlhdGlvbkF0dHIpIHsKLSAgICAgICAgZmxvYXQgeCwgeTsK
LSAgICAgICAgaWYgKHBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIodmFsdWUsIHgsIHkpKSB7Ci0g
ICAgICAgICAgICBtX3N0ZERldmlhdGlvblgtPnNldEJhc2VWYWxJbnRlcm5hbCh4KTsKLSAgICAg
ICAgICAgIG1fc3RkRGV2aWF0aW9uWS0+c2V0QmFzZVZhbEludGVybmFsKHkpOworICAgICAgICBp
ZiAoYXV0byByZXN1bHQgPSBwYXJzZU51bWJlck9wdGlvbmFsTnVtYmVyKHZhbHVlKSkgeworICAg
ICAgICAgICAgbV9zdGREZXZpYXRpb25YLT5zZXRCYXNlVmFsSW50ZXJuYWwocmVzdWx0LT5maXJz
dCk7CisgICAgICAgICAgICBtX3N0ZERldmlhdGlvblktPnNldEJhc2VWYWxJbnRlcm5hbChyZXN1
bHQtPnNlY29uZCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwCShyZXZp
c2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsMTAgKzYwLDkgQEAgdm9pZCBTVkdGRUdhdXNz
aWFuQmx1ckVsZW1lbnQ6OnNldFN0ZERldgogdm9pZCBTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6
OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21TdHJp
bmcmIHZhbHVlKQogewogICAgIGlmIChuYW1lID09IFNWR05hbWVzOjpzdGREZXZpYXRpb25BdHRy
KSB7Ci0gICAgICAgIGZsb2F0IHgsIHk7Ci0gICAgICAgIGlmIChwYXJzZU51bWJlck9wdGlvbmFs
TnVtYmVyKHZhbHVlLCB4LCB5KSkgewotICAgICAgICAgICAgbV9zdGREZXZpYXRpb25YLT5zZXRC
YXNlVmFsSW50ZXJuYWwoeCk7Ci0gICAgICAgICAgICBtX3N0ZERldmlhdGlvblktPnNldEJhc2VW
YWxJbnRlcm5hbCh5KTsKKyAgICAgICAgaWYgKGF1dG8gcmVzdWx0ID0gcGFyc2VOdW1iZXJPcHRp
b25hbE51bWJlcih2YWx1ZSkpIHsKKyAgICAgICAgICAgIG1fc3RkRGV2aWF0aW9uWC0+c2V0QmFz
ZVZhbEludGVybmFsKHJlc3VsdC0+Zmlyc3QpOworICAgICAgICAgICAgbV9zdGREZXZpYXRpb25Z
LT5zZXRCYXNlVmFsSW50ZXJuYWwocmVzdWx0LT5zZWNvbmQpOwogICAgICAgICB9CiAgICAgICAg
IHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDI2MzE3NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdl
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNyw5ICsxMTcsNyBAQCB2b2lkIFNWR0ZF
SW1hZ2VFbGVtZW50OjpidWlsZFBlbmRpbmdSZXNvCiB2b2lkIFNWR0ZFSW1hZ2VFbGVtZW50Ojpw
YXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9tU3RyaW5n
JiB2YWx1ZSkKIHsKICAgICBpZiAobmFtZSA9PSBTVkdOYW1lczo6cHJlc2VydmVBc3BlY3RSYXRp
b0F0dHIpIHsKLSAgICAgICAgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlIHByZXNlcnZlQXNw
ZWN0UmF0aW87Ci0gICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW8ucGFyc2UodmFsdWUpOwotICAg
ICAgICBtX3ByZXNlcnZlQXNwZWN0UmF0aW8tPnNldEJhc2VWYWxJbnRlcm5hbChwcmVzZXJ2ZUFz
cGVjdFJhdGlvKTsKKyAgICAgICAgbV9wcmVzZXJ2ZUFzcGVjdFJhdGlvLT5zZXRCYXNlVmFsSW50
ZXJuYWwoU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlIHsgdmFsdWUgfSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9s
b2d5RWxlbWVudC5jcHAJKHJldmlzaW9uIDI2MzE3NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRU1vcnBob2xvZ3lFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsMTAgKzcxLDkg
QEAgdm9pZCBTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpwYXJzZUF0dHJpYgogICAgIH0KIAogICAg
IGlmIChuYW1lID09IFNWR05hbWVzOjpyYWRpdXNBdHRyKSB7Ci0gICAgICAgIGZsb2F0IHgsIHk7
Ci0gICAgICAgIGlmIChwYXJzZU51bWJlck9wdGlvbmFsTnVtYmVyKHZhbHVlLCB4LCB5KSkgewot
ICAgICAgICAgICAgbV9yYWRpdXNYLT5zZXRCYXNlVmFsSW50ZXJuYWwoeCk7Ci0gICAgICAgICAg
ICBtX3JhZGl1c1ktPnNldEJhc2VWYWxJbnRlcm5hbCh5KTsKKyAgICAgICAgaWYgKGF1dG8gcmVz
dWx0ID0gcGFyc2VOdW1iZXJPcHRpb25hbE51bWJlcih2YWx1ZSkpIHsKKyAgICAgICAgICAgIG1f
cmFkaXVzWC0+c2V0QmFzZVZhbEludGVybmFsKHJlc3VsdC0+Zmlyc3QpOworICAgICAgICAgICAg
bV9yYWRpdXNZLT5zZXRCYXNlVmFsSW50ZXJuYWwocmVzdWx0LT5zZWNvbmQpOwogICAgICAgICB9
CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVT
cGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuY3BwCShyZXZpc2lvbiAyNjMxNzYpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTc4LDEwICs3OCw5IEBAIHZvaWQgU1ZHRkVTcGVjdWxhckxpZ2h0aW5n
RWxlbWVudDo6cGFyc2UKICAgICB9CiAKICAgICBpZiAobmFtZSA9PSBTVkdOYW1lczo6a2VybmVs
VW5pdExlbmd0aEF0dHIpIHsKLSAgICAgICAgZmxvYXQgeCwgeTsKLSAgICAgICAgaWYgKHBhcnNl
TnVtYmVyT3B0aW9uYWxOdW1iZXIodmFsdWUsIHgsIHkpKSB7Ci0gICAgICAgICAgICBtX2tlcm5l
bFVuaXRMZW5ndGhYLT5zZXRCYXNlVmFsSW50ZXJuYWwoeCk7Ci0gICAgICAgICAgICBtX2tlcm5l
bFVuaXRMZW5ndGhZLT5zZXRCYXNlVmFsSW50ZXJuYWwoeSk7CisgICAgICAgIGlmIChhdXRvIHJl
c3VsdCA9IHBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIodmFsdWUpKSB7CisgICAgICAgICAgICBt
X2tlcm5lbFVuaXRMZW5ndGhYLT5zZXRCYXNlVmFsSW50ZXJuYWwocmVzdWx0LT5maXJzdCk7Cisg
ICAgICAgICAgICBtX2tlcm5lbFVuaXRMZW5ndGhZLT5zZXRCYXNlVmFsSW50ZXJuYWwocmVzdWx0
LT5zZWNvbmQpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAy
NjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY3LDEwICs2Nyw5IEBAIHZvaWQgU1ZHRkVUdXJidWxlbmNlRWxl
bWVudDo6cGFyc2VBdHRyaWIKICAgICB9CiAKICAgICBpZiAobmFtZSA9PSBTVkdOYW1lczo6YmFz
ZUZyZXF1ZW5jeUF0dHIpIHsKLSAgICAgICAgZmxvYXQgeCwgeTsKLSAgICAgICAgaWYgKHBhcnNl
TnVtYmVyT3B0aW9uYWxOdW1iZXIodmFsdWUsIHgsIHkpKSB7Ci0gICAgICAgICAgICBtX2Jhc2VG
cmVxdWVuY3lYLT5zZXRCYXNlVmFsSW50ZXJuYWwoeCk7Ci0gICAgICAgICAgICBtX2Jhc2VGcmVx
dWVuY3lZLT5zZXRCYXNlVmFsSW50ZXJuYWwoeSk7CisgICAgICAgIGlmIChhdXRvIHJlc3VsdCA9
IHBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIodmFsdWUpKSB7CisgICAgICAgICAgICBtX2Jhc2VG
cmVxdWVuY3lYLT5zZXRCYXNlVmFsSW50ZXJuYWwocmVzdWx0LT5maXJzdCk7CisgICAgICAgICAg
ICBtX2Jhc2VGcmVxdWVuY3lZLT5zZXRCYXNlVmFsSW50ZXJuYWwocmVzdWx0LT5zZWNvbmQpOwog
ICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRml0VG9WaWV3Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRml0VG9WaWV3Qm94LmNwcAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZpdFRvVmlld0JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDczICs2Niw3MSBA
QCB2b2lkIFNWR0ZpdFRvVmlld0JveDo6cmVzZXQoKQogYm9vbCBTVkdGaXRUb1ZpZXdCb3g6OnBh
cnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21TdHJpbmcm
IHZhbHVlKQogewogICAgIGlmIChuYW1lID09IFNWR05hbWVzOjp2aWV3Qm94QXR0cikgewotICAg
ICAgICBGbG9hdFJlY3Qgdmlld0JveDsKLSAgICAgICAgaWYgKCF2YWx1ZS5pc051bGwoKSAmJiBw
YXJzZVZpZXdCb3godmFsdWUsIHZpZXdCb3gpKQotICAgICAgICAgICAgc2V0Vmlld0JveCh2aWV3
Qm94KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVzZXRWaWV3Qm94KCk7CisgICAgICAg
IGlmICghdmFsdWUuaXNOdWxsKCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIHJlc3VsdCA9IHBh
cnNlVmlld0JveCh2YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICBzZXRWaWV3Qm94KFdURk1vdmUo
KnJlc3VsdCkpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIHJlc2V0Vmlld0JveCgpOwogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CiAKICAgICBpZiAobmFtZSA9PSBTVkdOYW1lczo6cHJlc2VydmVBc3BlY3RSYXRpb0F0
dHIpIHsKLSAgICAgICAgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlIHByZXNlcnZlQXNwZWN0
UmF0aW87Ci0gICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW8ucGFyc2UodmFsdWUpOwotICAgICAg
ICBzZXRQcmVzZXJ2ZUFzcGVjdFJhdGlvKHByZXNlcnZlQXNwZWN0UmF0aW8pOworICAgICAgICBz
ZXRQcmVzZXJ2ZUFzcGVjdFJhdGlvKFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSB7IHZhbHVl
IH0pOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLWJvb2wgU1ZHRml0VG9WaWV3Qm94OjpwYXJzZVZpZXdCb3goY29uc3QgQXRvbVN0cmluZyYg
dmFsdWUsIEZsb2F0UmVjdCYgdmlld0JveCkKK09wdGlvbmFsPEZsb2F0UmVjdD4gU1ZHRml0VG9W
aWV3Qm94OjpwYXJzZVZpZXdCb3goY29uc3QgQXRvbVN0cmluZyYgdmFsdWUpCiB7CiAgICAgYXV0
byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KHZhbHVlKS51cGNvbnZlcnRlZENo
YXJhY3RlcnMoKTsKICAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycyA9IHVwY29udmVydGVkQ2hh
cmFjdGVyczsKLSAgICByZXR1cm4gcGFyc2VWaWV3Qm94KGNoYXJhY3RlcnMsIGNoYXJhY3RlcnMg
KyB2YWx1ZS5sZW5ndGgoKSwgdmlld0JveCk7CisgICAgcmV0dXJuIHBhcnNlVmlld0JveChjaGFy
YWN0ZXJzLCBjaGFyYWN0ZXJzICsgdmFsdWUubGVuZ3RoKCkpOwogfQogCi1ib29sIFNWR0ZpdFRv
Vmlld0JveDo6cGFyc2VWaWV3Qm94KGNvbnN0IFVDaGFyKiYgYywgY29uc3QgVUNoYXIqIGVuZCwg
RmxvYXRSZWN0JiB2aWV3Qm94LCBib29sIHZhbGlkYXRlKQorT3B0aW9uYWw8RmxvYXRSZWN0PiBT
VkdGaXRUb1ZpZXdCb3g6OnBhcnNlVmlld0JveChjb25zdCBVQ2hhciomIGMsIGNvbnN0IFVDaGFy
KiBlbmQsIGJvb2wgdmFsaWRhdGUpCiB7Ci0gICAgU3RyaW5nIHN0cihjLCBlbmQgLSBjKTsKKyAg
ICBTdHJpbmdWaWV3IHN0cihjLCBlbmQgLSBjKTsKIAogICAgIHNraXBPcHRpb25hbFNWR1NwYWNl
cyhjLCBlbmQpOwogCi0gICAgZmxvYXQgeCA9IDAuMGY7Ci0gICAgZmxvYXQgeSA9IDAuMGY7Ci0g
ICAgZmxvYXQgd2lkdGggPSAwLjBmOwotICAgIGZsb2F0IGhlaWdodCA9IDAuMGY7Ci0gICAgYm9v
bCB2YWxpZCA9IHBhcnNlTnVtYmVyKGMsIGVuZCwgeCkgJiYgcGFyc2VOdW1iZXIoYywgZW5kLCB5
KSAmJiBwYXJzZU51bWJlcihjLCBlbmQsIHdpZHRoKSAmJiBwYXJzZU51bWJlcihjLCBlbmQsIGhl
aWdodCwgZmFsc2UpOworICAgIGF1dG8geCA9IHBhcnNlTnVtYmVyKGMsIGVuZCk7CisgICAgYXV0
byB5ID0gcGFyc2VOdW1iZXIoYywgZW5kKTsKKyAgICBhdXRvIHdpZHRoID0gcGFyc2VOdW1iZXIo
YywgZW5kKTsKKyAgICBhdXRvIGhlaWdodCA9IHBhcnNlTnVtYmVyKGMsIGVuZCwgU3VmZml4U2tp
cHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsKIAogICAgIGlmICh2YWxpZGF0ZSkgewogICAgICAgICBE
b2N1bWVudCYgZG9jdW1lbnQgPSBtX3ZpZXdCb3gtPmNvbnRleHRFbGVtZW50KCktPmRvY3VtZW50
KCk7CiAKLSAgICAgICAgaWYgKCF2YWxpZCkgewotICAgICAgICAgICAgZG9jdW1lbnQuYWNjZXNz
U1ZHRXh0ZW5zaW9ucygpLnJlcG9ydFdhcm5pbmcoIlByb2JsZW0gcGFyc2luZyB2aWV3Qm94PVwi
IiArIHN0ciArICJcIiIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAo
IXggfHwgIXkgfHwgIXdpZHRoIHx8ICFoZWlnaHQpIHsKKyAgICAgICAgICAgIGRvY3VtZW50LmFj
Y2Vzc1NWR0V4dGVuc2lvbnMoKS5yZXBvcnRXYXJuaW5nKG1ha2VTdHJpbmcoIlByb2JsZW0gcGFy
c2luZyB2aWV3Qm94PVwiIiwgc3RyLCAiXCIiKSk7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogICAgICAgICB9CiAKICAgICAgICAgLy8gQ2hlY2sgdGhhdCB3aWR0aCBpcyBwb3Np
dGl2ZS4KLSAgICAgICAgaWYgKHdpZHRoIDwgMC4wKSB7CisgICAgICAgIGlmICgqd2lkdGggPCAw
LjApIHsKICAgICAgICAgICAgIGRvY3VtZW50LmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5yZXBvcnRF
cnJvcigiQSBuZWdhdGl2ZSB2YWx1ZSBmb3IgVmlld0JveCB3aWR0aCBpcyBub3QgYWxsb3dlZCIp
OwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKICAgICAgICAgfQogCiAgICAgICAgIC8vIENoZWNrIHRoYXQgaGVpZ2h0IGlzIHBvc2l0
aXZlLgotICAgICAgICBpZiAoaGVpZ2h0IDwgMC4wKSB7CisgICAgICAgIGlmICgqaGVpZ2h0IDwg
MC4wKSB7CiAgICAgICAgICAgICBkb2N1bWVudC5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVwb3J0
RXJyb3IoIkEgbmVnYXRpdmUgdmFsdWUgZm9yIFZpZXdCb3ggaGVpZ2h0IGlzIG5vdCBhbGxvd2Vk
Iik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogICAgICAgICB9CiAKICAgICAgICAgLy8gTm90aGluZyBzaG91bGQgY29tZSBhZnRl
ciB0aGUgbGFzdCwgZm91cnRoIG51bWJlci4KICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2Vz
KGMsIGVuZCk7CiAgICAgICAgIGlmIChjIDwgZW5kKSB7Ci0gICAgICAgICAgICBkb2N1bWVudC5h
Y2Nlc3NTVkdFeHRlbnNpb25zKCkucmVwb3J0V2FybmluZygiUHJvYmxlbSBwYXJzaW5nIHZpZXdC
b3g9XCIiICsgc3RyICsgIlwiIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICBkb2N1bWVudC5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVwb3J0V2FybmluZyhtYWtlU3Ry
aW5nKCJQcm9ibGVtIHBhcnNpbmcgdmlld0JveD1cIiIsIHN0ciwgIlwiIikpOworICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgfQogICAgIH0KIAotICAgIHZpZXdCb3gg
PSB7IHgsIHksIHdpZHRoLCBoZWlnaHQgfTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4g
RmxvYXRSZWN0IHsgeC52YWx1ZU9yKDApLCB5LnZhbHVlT3IoMCksIHdpZHRoLnZhbHVlT3IoMCks
IGhlaWdodC52YWx1ZU9yKDApIH07CiB9CiAKIEFmZmluZVRyYW5zZm9ybSBTVkdGaXRUb1ZpZXdC
b3g6OnZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0oY29uc3QgRmxvYXRSZWN0JiB2aWV3Qm94UmVjdCwg
Y29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJiBwcmVzZXJ2ZUFzcGVjdFJhdGlvLCBm
bG9hdCB2aWV3V2lkdGgsIGZsb2F0IHZpZXdIZWlnaHQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRml0VG9WaWV3Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZpdFRvVmlld0JveC5oCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRml0VG9WaWV3Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDggKzY1LDggQEAgcHJvdGVj
dGVkOgogCiAgICAgdm9pZCByZXNldCgpOwogICAgIGJvb2wgcGFyc2VBdHRyaWJ1dGUoY29uc3Qg
UXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21TdHJpbmcmKTsKLSAgICBib29sIHBhcnNlVmlld0Jv
eChjb25zdCBBdG9tU3RyaW5nJiB2YWx1ZSwgRmxvYXRSZWN0JiB2aWV3Qm94KTsKLSAgICBib29s
IHBhcnNlVmlld0JveChjb25zdCBVQ2hhciomIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kLCBGbG9h
dFJlY3QmIHZpZXdCb3gsIGJvb2wgdmFsaWRhdGUgPSB0cnVlKTsKKyAgICBPcHRpb25hbDxGbG9h
dFJlY3Q+IHBhcnNlVmlld0JveChjb25zdCBBdG9tU3RyaW5nJiB2YWx1ZSk7CisgICAgT3B0aW9u
YWw8RmxvYXRSZWN0PiBwYXJzZVZpZXdCb3goY29uc3QgVUNoYXIqJiBzdGFydCwgY29uc3QgVUNo
YXIqIGVuZCwgYm9vbCB2YWxpZGF0ZSA9IHRydWUpOwogCiBwcml2YXRlOgogICAgIFJlZjxTVkdB
bmltYXRlZFJlY3Q+IG1fdmlld0JveDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHbHlw
aFJlZkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHbHlw
aFJlZkVsZW1lbnQuY3BwCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHR2x5cGhSZWZFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsMTAgKzU4LDcgQEAg
Ym9vbCBTVkdHbHlwaFJlZkVsZW1lbnQ6Omhhc1ZhbGlkR2x5cGhFbAogCiBzdGF0aWMgZmxvYXQg
cGFyc2VGbG9hdChjb25zdCBBdG9tU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBmbG9hdCByZXN1bHQ7
Ci0gICAgaWYgKCFwYXJzZU51bWJlckZyb21TdHJpbmcodmFsdWUsIHJlc3VsdCkpCi0gICAgICAg
IHJldHVybiAwOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIHBhcnNlTnVtYmVyKHZh
bHVlKS52YWx1ZU9yKDApOzsKIH0KIAogdm9pZCBTVkdHbHlwaFJlZkVsZW1lbnQ6OnBhcnNlQXR0
cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21TdHJpbmcmIHZhbHVl
KQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0hLZXJuRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0hLZXJuRWxlbWVudC5jcHAJKHJldmlzaW9uIDI2
MzE3NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdIS2VybkVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NCwyNCArNDQsNDQgQEAgUmVmPFNWR0hLZXJuRWxlbWVudD4gU1ZHSEtlcm5F
bGVtZW50OjpjcgogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNWR0hLZXJuRWxlbWVudCh0YWdO
YW1lLCBkb2N1bWVudCkpOwogfQogCi1ib29sIFNWR0hLZXJuRWxlbWVudDo6YnVpbGRIb3Jpem9u
dGFsS2VybmluZ1BhaXIoU1ZHS2VybmluZ1BhaXImIGtlcm5pbmdQYWlyKSBjb25zdAorT3B0aW9u
YWw8U1ZHS2VybmluZ1BhaXI+IFNWR0hLZXJuRWxlbWVudDo6YnVpbGRIb3Jpem9udGFsS2Vybmlu
Z1BhaXIoKSBjb25zdAogeworICAgIC8vIEZJWE1FOiBDYW4gdGhpcyBiZSBzaGFyZWQgd2l0aCBT
VkdWS2VybkVsZW1lbnQ6OmJ1aWxkVmVydGljYWxLZXJuaW5nUGFpcgorCiAgICAgYXV0byYgdTEg
PSBhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFNWR05hbWVzOjp1MUF0dHIpOwogICAg
IGF1dG8mIGcxID0gYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihTVkdOYW1lczo6ZzFB
dHRyKTsKICAgICBhdXRvJiB1MiA9IGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oU1ZH
TmFtZXM6OnUyQXR0cik7CiAgICAgYXV0byYgZzIgPSBhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25p
emF0aW9uKFNWR05hbWVzOjpnMkF0dHIpOwogICAgIGlmICgodTEuaXNFbXB0eSgpICYmIGcxLmlz
RW1wdHkoKSkgfHwgKHUyLmlzRW1wdHkoKSAmJiBnMi5pc0VtcHR5KCkpKQotICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBhdXRvIGdseXBo
TmFtZTEgPSBwYXJzZUdseXBoTmFtZShnMSk7CisgICAgaWYgKCFnbHlwaE5hbWUxKQorICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGF1dG8gZ2x5cGhOYW1lMiA9IHBhcnNlR2x5cGhO
YW1lKGcyKTsKKyAgICBpZiAoIWdseXBoTmFtZTIpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CisgICAgYXV0byB1bmljb2RlU3RyaW5nMSA9IHBhcnNlS2VybmluZ1VuaWNvZGVTdHJpbmco
dTEpOworICAgIGlmICghdW5pY29kZVN0cmluZzEpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CisgICAgYXV0byB1bmljb2RlU3RyaW5nMiA9IHBhcnNlS2VybmluZ1VuaWNvZGVTdHJpbmco
dTIpOworICAgIGlmICghdW5pY29kZVN0cmluZzIpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CisKKyAgICBib29sIG9rID0gZmFsc2U7CisgICAgYXV0byBrZXJuaW5nID0gYXR0cmlidXRl
V2l0aG91dFN5bmNocm9uaXphdGlvbihTVkdOYW1lczo6a0F0dHIpLnN0cmluZygpLnRvRmxvYXQo
Jm9rKTsKKyAgICBpZiAoIW9rKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAg
aWYgKHBhcnNlR2x5cGhOYW1lKGcxLCBrZXJuaW5nUGFpci5nbHlwaE5hbWUxKQotICAgICAgICAm
JiBwYXJzZUdseXBoTmFtZShnMiwga2VybmluZ1BhaXIuZ2x5cGhOYW1lMikKLSAgICAgICAgJiYg
cGFyc2VLZXJuaW5nVW5pY29kZVN0cmluZyh1MSwga2VybmluZ1BhaXIudW5pY29kZVJhbmdlMSwg
a2VybmluZ1BhaXIudW5pY29kZU5hbWUxKQotICAgICAgICAmJiBwYXJzZUtlcm5pbmdVbmljb2Rl
U3RyaW5nKHUyLCBrZXJuaW5nUGFpci51bmljb2RlUmFuZ2UyLCBrZXJuaW5nUGFpci51bmljb2Rl
TmFtZTIpKSB7Ci0gICAgICAgIGJvb2wgb2sgPSBmYWxzZTsKLSAgICAgICAga2VybmluZ1BhaXIu
a2VybmluZyA9IGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oU1ZHTmFtZXM6OmtBdHRy
KS5zdHJpbmcoKS50b0Zsb2F0KCZvayk7Ci0gICAgICAgIHJldHVybiBvazsKLSAgICB9Ci0gICAg
cmV0dXJuIGZhbHNlOworICAgIFNWR0tlcm5pbmdQYWlyIGtlcm5pbmdQYWlyOworICAgIGtlcm5p
bmdQYWlyLmdseXBoTmFtZTEgPSBXVEZNb3ZlKCpnbHlwaE5hbWUxKTsKKyAgICBrZXJuaW5nUGFp
ci5nbHlwaE5hbWUyID0gV1RGTW92ZSgqZ2x5cGhOYW1lMik7CisgICAga2VybmluZ1BhaXIudW5p
Y29kZVJhbmdlMSA9IFdURk1vdmUodW5pY29kZVN0cmluZzEtPmZpcnN0KTsKKyAgICBrZXJuaW5n
UGFpci51bmljb2RlTmFtZTEgPSBXVEZNb3ZlKHVuaWNvZGVTdHJpbmcxLT5zZWNvbmQpOworICAg
IGtlcm5pbmdQYWlyLnVuaWNvZGVSYW5nZTIgPSBXVEZNb3ZlKHVuaWNvZGVTdHJpbmcyLT5maXJz
dCk7CisgICAga2VybmluZ1BhaXIudW5pY29kZU5hbWUyID0gV1RGTW92ZSh1bmljb2RlU3RyaW5n
Mi0+c2Vjb25kKTsKKyAgICBrZXJuaW5nUGFpci5rZXJuaW5nID0ga2VybmluZzsKKyAgICByZXR1
cm4ga2VybmluZ1BhaXI7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdIS2Vy
bkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHSEtlcm5FbGVt
ZW50LmgJKHJldmlzaW9uIDI2MzE3NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdIS2VybkVs
ZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBjbGFzcyBTVkdIS2VybkVs
ZW1lbnQgZmluYWwgOiBwdWJsaWMgU1ZHCiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxTVkdIS2Vy
bkVsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQmKTsKIAotICAg
IGJvb2wgYnVpbGRIb3Jpem9udGFsS2VybmluZ1BhaXIoU1ZHS2VybmluZ1BhaXImIGtlcm5pbmdQ
YWlyKSBjb25zdDsKKyAgICBPcHRpb25hbDxTVkdLZXJuaW5nUGFpcj4gYnVpbGRIb3Jpem9udGFs
S2VybmluZ1BhaXIoKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBTVkdIS2VybkVsZW1lbnQoY29u
c3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Jik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHSW1hZ2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
SW1hZ2VFbGVtZW50LmNwcAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ltYWdlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDkgKzY5LDcgQEAgYm9v
bCBTVkdJbWFnZUVsZW1lbnQ6Omhhc1NpbmdsZVNlY3VyaXR5Twogdm9pZCBTVkdJbWFnZUVsZW1l
bnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21T
dHJpbmcmIHZhbHVlKQogewogICAgIGlmIChuYW1lID09IFNWR05hbWVzOjpwcmVzZXJ2ZUFzcGVj
dFJhdGlvQXR0cikgewotICAgICAgICBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUgcHJlc2Vy
dmVBc3BlY3RSYXRpbzsKLSAgICAgICAgcHJlc2VydmVBc3BlY3RSYXRpby5wYXJzZSh2YWx1ZSk7
Ci0gICAgICAgIG1fcHJlc2VydmVBc3BlY3RSYXRpby0+c2V0QmFzZVZhbEludGVybmFsKHByZXNl
cnZlQXNwZWN0UmF0aW8pOworICAgICAgICBtX3ByZXNlcnZlQXNwZWN0UmF0aW8tPnNldEJhc2VW
YWxJbnRlcm5hbChTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUgeyB2YWx1ZSB9KTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xlbmd0aFZh
bHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoVmFsdWUu
Y3BwCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoVmFs
dWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTEsMTIgKzI5MSwxMiBAQCBFeGNlcHRpb25Pcjx2
b2lkPiBTVkdMZW5ndGhWYWx1ZTo6c2V0VmFsCiAgICAgaWYgKHN0cmluZy5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybiB7IH07CiAKLSAgICBmbG9hdCBjb252ZXJ0ZWROdW1iZXIgPSAwOwogICAg
IGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyhzdHJpbmcpLnVwY29udmVy
dGVkQ2hhcmFjdGVycygpOwogICAgIGNvbnN0IFVDaGFyKiBwdHIgPSB1cGNvbnZlcnRlZENoYXJh
Y3RlcnM7CiAgICAgY29uc3QgVUNoYXIqIGVuZCA9IHB0ciArIHN0cmluZy5sZW5ndGgoKTsKIAot
ICAgIGlmICghcGFyc2VOdW1iZXIocHRyLCBlbmQsIGNvbnZlcnRlZE51bWJlciwgZmFsc2UpKQor
ICAgIGF1dG8gY29udmVydGVkTnVtYmVyID0gcGFyc2VOdW1iZXIocHRyLCBlbmQsIFN1ZmZpeFNr
aXBwaW5nUG9saWN5OjpEb250U2tpcCk7CisgICAgaWYgKCFjb252ZXJ0ZWROdW1iZXIpCiAgICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9OwogCiAgICAgYXV0byBsZW5ndGhU
eXBlID0gcGFyc2VMZW5ndGhUeXBlKHB0ciwgZW5kKTsKQEAgLTMwNCw3ICszMDQsNyBAQCBFeGNl
cHRpb25Pcjx2b2lkPiBTVkdMZW5ndGhWYWx1ZTo6c2V0VmFsCiAgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBTeW50YXhFcnJvciB9OwogCiAgICAgbV9sZW5ndGhUeXBlID0gbGVuZ3RoVHlwZTsK
LSAgICBtX3ZhbHVlSW5TcGVjaWZpZWRVbml0cyA9IGNvbnZlcnRlZE51bWJlcjsKKyAgICBtX3Zh
bHVlSW5TcGVjaWZpZWRVbml0cyA9ICpjb252ZXJ0ZWROdW1iZXI7CiAgICAgcmV0dXJuIHsgfTsK
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR051bWJlckxpc3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTnVtYmVyTGlzdC5oCShyZXZpc2lvbiAyNjMxNzYp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTnVtYmVyTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC01NCw3ICs1NCw2IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGNsZWFySXRlbXMoKTsKIAot
ICAgICAgICBmbG9hdCBudW1iZXIgPSAwOwogICAgICAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFj
dGVycyA9IFN0cmluZ1ZpZXcodmFsdWUpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwogICAgICAg
ICBjb25zdCBVQ2hhciogcHRyID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOwogICAgICAgICBjb25z
dCBVQ2hhciogZW5kID0gcHRyICsgdmFsdWUubGVuZ3RoKCk7CkBAIC02Miw5ICs2MSwxMCBAQCBw
dWJsaWM6CiAgICAgICAgIC8vIFRoZSBzcGVjIChzZWN0aW9uIDQuMSkgc3RyYW5nZWx5IGRvZXNu
J3QgYWxsb3cgbGVhZGluZyB3aGl0ZXNwYWNlLgogICAgICAgICAvLyBXZSBtaWdodCBjaG9vc2Ug
dG8gdmlvbGF0ZSB0aGF0IGludGVudGlvbmFsbHkuCiAgICAgICAgIHdoaWxlIChwdHIgPCBlbmQp
IHsKLSAgICAgICAgICAgIGlmICghcGFyc2VOdW1iZXIocHRyLCBlbmQsIG51bWJlcikpCisgICAg
ICAgICAgICBhdXRvIG51bWJlciA9IHBhcnNlTnVtYmVyKHB0ciwgZW5kKTsKKyAgICAgICAgICAg
IGlmICghbnVtYmVyKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgYXBwZW5k
KFNWR051bWJlcjo6Y3JlYXRlKG51bWJlcikpOworICAgICAgICAgICAgYXBwZW5kKFNWR051bWJl
cjo6Y3JlYXRlKCpudW1iZXIpKTsKICAgICAgICAgfQogCiAgICAgICAgIHJldHVybiBwdHIgPT0g
ZW5kOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5jcHAJKHJl
dmlzaW9uIDI2MzE3NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXJzZXJVdGlsaXRpZXMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxOSArNDAsMTggQEAgdGVtcGxhdGUgPHR5cGVuYW1l
IEZsb2F0VHlwZT4gc3RhdGljIGlubAogLy8gV2UgdXNlIHRoaXMgZ2VuZXJpYyBwYXJzZU51bWJl
ciBmdW5jdGlvbiB0byBhbGxvdyB0aGUgUGF0aCBwYXJzaW5nIGNvZGUgdG8gd29yayAKIC8vIGF0
IGEgaGlnaGVyIHByZWNpc2lvbiBpbnRlcm5hbGx5LCB3aXRob3V0IGFueSB1bm5lY2Vzc2FyeSBy
dW50aW1lIGNvc3Qgb3IgY29kZQogLy8gY29tcGxleGl0eS4KLXRlbXBsYXRlIDx0eXBlbmFtZSBD
aGFyYWN0ZXJUeXBlLCB0eXBlbmFtZSBGbG9hdFR5cGU+IHN0YXRpYyBib29sIGdlbmVyaWNQYXJz
ZU51bWJlcihjb25zdCBDaGFyYWN0ZXJUeXBlKiYgcHRyLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBl
bmQsIEZsb2F0VHlwZSYgbnVtYmVyLCBib29sIHNraXApCisvLyBGSVhNRTogQ2FuIHRoaXMgYmUg
c2hhcmVkL3JlcGxhY2VkIHdpdGggbnVtYmVyIHBhcnNpbmcgaW4gV1RGPwordGVtcGxhdGUgPHR5
cGVuYW1lIENoYXJhY3RlclR5cGUsIHR5cGVuYW1lIEZsb2F0VHlwZSA9IGZsb2F0PiBzdGF0aWMg
T3B0aW9uYWw8RmxvYXRUeXBlPiBnZW5lcmljUGFyc2VOdW1iZXIoY29uc3QgQ2hhcmFjdGVyVHlw
ZSomIHB0ciwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeSBz
a2lwID0gU3VmZml4U2tpcHBpbmdQb2xpY3k6OlNraXApCiB7Ci0gICAgRmxvYXRUeXBlIGludGVn
ZXIsIGRlY2ltYWwsIGZyYWMsIGV4cG9uZW50OwotICAgIGludCBzaWduLCBleHBzaWduOworICAg
IEZsb2F0VHlwZSBudW1iZXIgPSAwOworICAgIEZsb2F0VHlwZSBpbnRlZ2VyID0gMDsKKyAgICBG
bG9hdFR5cGUgZGVjaW1hbCA9IDA7CisgICAgRmxvYXRUeXBlIGZyYWMgPSAxOworICAgIEZsb2F0
VHlwZSBleHBvbmVudCA9IDA7CisgICAgaW50IHNpZ24gPSAxOworICAgIGludCBleHBzaWduID0g
MTsKICAgICBjb25zdCBDaGFyYWN0ZXJUeXBlKiBzdGFydCA9IHB0cjsKIAotICAgIGV4cG9uZW50
ID0gMDsKLSAgICBpbnRlZ2VyID0gMDsKLSAgICBmcmFjID0gMTsKLSAgICBkZWNpbWFsID0gMDsK
LSAgICBzaWduID0gMTsKLSAgICBleHBzaWduID0gMTsKLQogICAgIC8vIHJlYWQgdGhlIHNpZ24K
ICAgICBpZiAocHRyIDwgZW5kICYmICpwdHIgPT0gJysnKQogICAgICAgICBwdHIrKzsKQEAgLTYy
LDcgKzYxLDcgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHR5cGVuYQogICAg
IH0gCiAgICAgCiAgICAgaWYgKHB0ciA9PSBlbmQgfHwgKCFpc0FTQ0lJRGlnaXQoKnB0cikgJiYg
KnB0ciAhPSAnLicpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAKICAgICAvLyByZWFkIHRoZSBpbnRlZ2VyIHBhcnQsIGJ1aWxkIHJpZ2h0LXRv
LWxlZnQKICAgICBjb25zdCBDaGFyYWN0ZXJUeXBlKiBwdHJTdGFydEludFBhcnQgPSBwdHI7CkBA
IC03OCw3ICs3Nyw3IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCB0eXBlbmEK
ICAgICAgICAgfQogICAgICAgICAvLyBCYWlsIG91dCBlYXJseSBpZiB0aGlzIG92ZXJmbG93cy4K
ICAgICAgICAgaWYgKCFpc1ZhbGlkUmFuZ2UoaW50ZWdlcikpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KIAogICAgIGlm
IChwdHIgPCBlbmQgJiYgKnB0ciA9PSAnLicpIHsgLy8gcmVhZCB0aGUgZGVjaW1hbHMKQEAgLTg2
LDcgKzg1LDcgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHR5cGVuYQogICAg
ICAgICAKICAgICAgICAgLy8gVGhlcmUgbXVzdCBiZSBhIGxlYXN0IG9uZSBkaWdpdCBmb2xsb3dp
bmcgdGhlIC4KICAgICAgICAgaWYgKHB0ciA+PSBlbmQgfHwgIWlzQVNDSUlEaWdpdCgqcHRyKSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAgICAgICAgIAogICAgICAgICB3aGlsZSAocHRyIDwgZW5kICYmIGlzQVNDSUlEaWdpdCgq
cHRyKSkKICAgICAgICAgICAgIGRlY2ltYWwgKz0gKCoocHRyKyspIC0gJzAnKSAqIChmcmFjICo9
IHN0YXRpY19jYXN0PEZsb2F0VHlwZT4oMC4xKSk7CkBAIC0xMDcsNyArMTA2LDcgQEAgdGVtcGxh
dGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHR5cGVuYQogICAgICAgICAKICAgICAgICAgLy8g
VGhlcmUgbXVzdCBiZSBhbiBleHBvbmVudAogICAgICAgICBpZiAocHRyID49IGVuZCB8fCAhaXNB
U0NJSURpZ2l0KCpwdHIpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgICAgICB3aGlsZSAocHRyIDwgZW5kICYmIGlzQVND
SUlEaWdpdCgqcHRyKSkgewogICAgICAgICAgICAgZXhwb25lbnQgKj0gc3RhdGljX2Nhc3Q8Rmxv
YXRUeXBlPigxMCk7CkBAIC0xMTYsNyArMTE1LDcgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJh
Y3RlclR5cGUsIHR5cGVuYQogICAgICAgICB9CiAgICAgICAgIC8vIE1ha2Ugc3VyZSBleHBvbmVu
dCBpcyB2YWxpZC4KICAgICAgICAgaWYgKCFpc1ZhbGlkUmFuZ2UoZXhwb25lbnQpIHx8IGV4cG9u
ZW50ID4gc3RkOjpudW1lcmljX2xpbWl0czxGbG9hdFR5cGU+OjptYXhfZXhwb25lbnQpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owog
ICAgIH0KIAogICAgIG51bWJlciA9IGludGVnZXIgKyBkZWNpbWFsOwpAQCAtMTI3LDE0MiArMTI2
LDE1NSBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5hCiAKICAgICAv
LyBEb24ndCByZXR1cm4gSW5maW5pdHkoKSBvciBOYU4oKS4KICAgICBpZiAoIWlzVmFsaWRSYW5n
ZShudW1iZXIpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiAKICAgICBpZiAoc3RhcnQgPT0gcHRyKQotICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBpZiAoc2tpcCkKKyAgICBpZiAoc2tp
cCA9PSBTdWZmaXhTa2lwcGluZ1BvbGljeTo6U2tpcCkKICAgICAgICAgc2tpcE9wdGlvbmFsU1ZH
U3BhY2VzT3JEZWxpbWl0ZXIocHRyLCBlbmQpOwogCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0
dXJuIG51bWJlcjsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1ib29s
IHBhcnNlU1ZHTnVtYmVyKENoYXJhY3RlclR5cGUqIGJlZ2luLCBzaXplX3QgbGVuZ3RoLCBkb3Vi
bGUmIG51bWJlcikKK09wdGlvbmFsPGZsb2F0PiBwYXJzZU51bWJlcihjb25zdCBMQ2hhciomIHB0
ciwgY29uc3QgTENoYXIqIGVuZCwgU3VmZml4U2tpcHBpbmdQb2xpY3kgc2tpcCkKIHsKLSAgICBj
b25zdCBDaGFyYWN0ZXJUeXBlKiBwdHIgPSBiZWdpbjsKLSAgICBjb25zdCBDaGFyYWN0ZXJUeXBl
KiBlbmQgPSBwdHIgKyBsZW5ndGg7Ci0gICAgcmV0dXJuIGdlbmVyaWNQYXJzZU51bWJlcihwdHIs
IGVuZCwgbnVtYmVyLCBmYWxzZSk7CisgICAgcmV0dXJuIGdlbmVyaWNQYXJzZU51bWJlcihwdHIs
IGVuZCwgc2tpcCk7CiB9CiAKLS8vIEV4cGxpY2l0bHkgaW5zdGFudGlhdGUgdGhlIHR3byBmbGF2
b3JzIG9mIHBhcnNlU1ZHTnVtYmVyKCkgdG8gc2F0aXNmeSBleHRlcm5hbCBjYWxsZXJzCi10ZW1w
bGF0ZSBib29sIHBhcnNlU1ZHTnVtYmVyKExDaGFyKiBiZWdpbiwgc2l6ZV90IGxlbmd0aCwgZG91
YmxlJik7Ci10ZW1wbGF0ZSBib29sIHBhcnNlU1ZHTnVtYmVyKFVDaGFyKiBiZWdpbiwgc2l6ZV90
IGxlbmd0aCwgZG91YmxlJik7Ci0KLWJvb2wgcGFyc2VOdW1iZXIoY29uc3QgTENoYXIqJiBwdHIs
IGNvbnN0IExDaGFyKiBlbmQsIGZsb2F0JiBudW1iZXIsIGJvb2wgc2tpcCkKK09wdGlvbmFsPGZs
b2F0PiBwYXJzZU51bWJlcihjb25zdCBVQ2hhciomIHB0ciwgY29uc3QgVUNoYXIqIGVuZCwgU3Vm
Zml4U2tpcHBpbmdQb2xpY3kgc2tpcCkKIHsKLSAgICByZXR1cm4gZ2VuZXJpY1BhcnNlTnVtYmVy
KHB0ciwgZW5kLCBudW1iZXIsIHNraXApOworICAgIHJldHVybiBnZW5lcmljUGFyc2VOdW1iZXIo
cHRyLCBlbmQsIHNraXApOwogfQogCi1ib29sIHBhcnNlTnVtYmVyKGNvbnN0IFVDaGFyKiYgcHRy
LCBjb25zdCBVQ2hhciogZW5kLCBmbG9hdCYgbnVtYmVyLCBib29sIHNraXApIAordGVtcGxhdGUg
PHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBPcHRpb25hbDxmbG9hdD4gcGFyc2VOdW1i
ZXIoQ2hhcmFjdGVyVHlwZSogYmVnaW4sIHNpemVfdCBsZW5ndGgsIFN1ZmZpeFNraXBwaW5nUG9s
aWN5IHNraXApCiB7Ci0gICAgcmV0dXJuIGdlbmVyaWNQYXJzZU51bWJlcihwdHIsIGVuZCwgbnVt
YmVyLCBza2lwKTsKKyAgICBjb25zdCBDaGFyYWN0ZXJUeXBlKiBwdHIgPSBiZWdpbjsKKyAgICBj
b25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQgPSBwdHIgKyBsZW5ndGg7CisgICAgcmV0dXJuIGdlbmVy
aWNQYXJzZU51bWJlcihwdHIsIGVuZCwgc2tpcCk7CiB9CiAKLWJvb2wgcGFyc2VOdW1iZXJGcm9t
U3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBmbG9hdCYgbnVtYmVyLCBib29sIHNraXApCitP
cHRpb25hbDxmbG9hdD4gcGFyc2VOdW1iZXIoY29uc3QgU3RyaW5nJiBzdHJpbmcsIFN1ZmZpeFNr
aXBwaW5nUG9saWN5IHNraXApCiB7CiAgICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBT
dHJpbmdWaWV3KHN0cmluZykudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7CiAgICAgY29uc3QgVUNo
YXIqIHB0ciA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKICAgICBjb25zdCBVQ2hhciogZW5kID0g
cHRyICsgc3RyaW5nLmxlbmd0aCgpOwotICAgIHJldHVybiBnZW5lcmljUGFyc2VOdW1iZXIocHRy
LCBlbmQsIG51bWJlciwgc2tpcCkgJiYgcHRyID09IGVuZDsKKyAgICBhdXRvIHJlc3VsdCA9IGdl
bmVyaWNQYXJzZU51bWJlcihwdHIsIGVuZCwgc2tpcCk7CisgICAgaWYgKHB0ciAhPSBlbmQpCisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogLy8g
b25seSB1c2VkIHRvIHBhcnNlIGxhcmdlQXJjRmxhZyBhbmQgc3dlZXBGbGFnIHdoaWNoIG11c3Qg
YmUgYSAiMCIgb3IgIjEiCiAvLyBhbmQgbWlnaHQgbm90IGhhdmUgYW55IHdoaXRlc3BhY2UvY29t
bWEgYWZ0ZXIgaXQKLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotYm9vbCBnZW5l
cmljUGFyc2VBcmNGbGFnKGNvbnN0IENoYXJhY3RlclR5cGUqJiBwdHIsIGNvbnN0IENoYXJhY3Rl
clR5cGUqIGVuZCwgYm9vbCYgZmxhZykKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBl
PiBPcHRpb25hbDxib29sPiBnZW5lcmljUGFyc2VBcmNGbGFnKGNvbnN0IENoYXJhY3RlclR5cGUq
JiBwdHIsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCkKIHsKICAgICBpZiAocHRyID49IGVuZCkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCiAg
ICAgY29uc3QgQ2hhcmFjdGVyVHlwZSBmbGFnQ2hhciA9ICpwdHIrKzsKKworICAgIGJvb2wgZmxh
ZzsKICAgICBpZiAoZmxhZ0NoYXIgPT0gJzAnKQogICAgICAgICBmbGFnID0gZmFsc2U7CiAgICAg
ZWxzZSBpZiAoZmxhZ0NoYXIgPT0gJzEnKQogICAgICAgICBmbGFnID0gdHJ1ZTsKICAgICBlbHNl
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKwogICAgIHNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVsaW1pdGVyKHB0ciwgZW5kKTsKICAg
ICAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmxhZzsKIH0KIAotYm9vbCBwYXJzZUFy
Y0ZsYWcoY29uc3QgTENoYXIqJiBwdHIsIGNvbnN0IExDaGFyKiBlbmQsIGJvb2wmIGZsYWcpCitP
cHRpb25hbDxib29sPiBwYXJzZUFyY0ZsYWcoY29uc3QgTENoYXIqJiBwdHIsIGNvbnN0IExDaGFy
KiBlbmQpCiB7Ci0gICAgcmV0dXJuIGdlbmVyaWNQYXJzZUFyY0ZsYWcocHRyLCBlbmQsIGZsYWcp
OworICAgIHJldHVybiBnZW5lcmljUGFyc2VBcmNGbGFnKHB0ciwgZW5kKTsKIH0KIAotYm9vbCBw
YXJzZUFyY0ZsYWcoY29uc3QgVUNoYXIqJiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQsIGJvb2wmIGZs
YWcpCitPcHRpb25hbDxib29sPiBwYXJzZUFyY0ZsYWcoY29uc3QgVUNoYXIqJiBwdHIsIGNvbnN0
IFVDaGFyKiBlbmQpCiB7Ci0gICAgcmV0dXJuIGdlbmVyaWNQYXJzZUFyY0ZsYWcocHRyLCBlbmQs
IGZsYWcpOworICAgIHJldHVybiBnZW5lcmljUGFyc2VBcmNGbGFnKHB0ciwgZW5kKTsKIH0KIAot
Ym9vbCBwYXJzZU51bWJlck9wdGlvbmFsTnVtYmVyKGNvbnN0IFN0cmluZyYgcywgZmxvYXQmIHgs
IGZsb2F0JiB5KQorT3B0aW9uYWw8c3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4+IHBhcnNlTnVtYmVy
T3B0aW9uYWxOdW1iZXIoY29uc3QgU3RyaW5nJiBzKQogewogICAgIGlmIChzLmlzRW1wdHkoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAg
ICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KHMpLnVwY29udmVydGVk
Q2hhcmFjdGVycygpOwogICAgIGNvbnN0IFVDaGFyKiBjdXIgPSB1cGNvbnZlcnRlZENoYXJhY3Rl
cnM7CiAgICAgY29uc3QgVUNoYXIqIGVuZCA9IGN1ciArIHMubGVuZ3RoKCk7CiAKLSAgICBpZiAo
IXBhcnNlTnVtYmVyKGN1ciwgZW5kLCB4KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1
dG8geCA9IHBhcnNlTnVtYmVyKGN1ciwgZW5kKTsKKyAgICBpZiAoIXgpCisgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAKICAgICBpZiAoY3VyID09IGVuZCkKLSAgICAgICAgeSA9IHg7Ci0g
ICAgZWxzZSBpZiAoIXBhcnNlTnVtYmVyKGN1ciwgZW5kLCB5LCBmYWxzZSkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKCp4LCAqeCk7CisKKyAg
ICBhdXRvIHkgPSBwYXJzZU51bWJlcihjdXIsIGVuZCwgU3VmZml4U2tpcHBpbmdQb2xpY3k6OkRv
bnRTa2lwKTsKKyAgICBpZiAoeSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAg
IGlmIChjdXIgIT0gZW5kKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmV0
dXJuIGN1ciA9PSBlbmQ7CisgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKCp4LCAqeSk7CiB9CiAK
LWJvb2wgcGFyc2VQb2ludChjb25zdCBTdHJpbmcmIHMsIEZsb2F0UG9pbnQmIHBvaW50KQorT3B0
aW9uYWw8RmxvYXRQb2ludD4gcGFyc2VQb2ludChjb25zdCBTdHJpbmcmIHMpCiB7CiAgICAgaWYg
KHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisKICAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IFN0cmluZ1ZpZXco
cykudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7CiAgICAgY29uc3QgVUNoYXIqIGN1ciA9IHVwY29u
dmVydGVkQ2hhcmFjdGVyczsKICAgICBjb25zdCBVQ2hhciogZW5kID0gY3VyICsgcy5sZW5ndGgo
KTsKIAogICAgIGlmICghc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGN1ciwgZW5kKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgZmxvYXQgeCA9IDA7Ci0gICAgaWYgKCFwYXJzZU51bWJlcihj
dXIsIGVuZCwgeCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGZsb2F0IHkgPSAwOwot
ICAgIGlmICghcGFyc2VOdW1iZXIoY3VyLCBlbmQsIHkpKQotICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBwb2ludCA9IEZsb2F0UG9pbnQo
eCwgeSk7CisgICAgYXV0byBwb2ludCA9IHBhcnNlRmxvYXRQb2ludChjdXIsIGVuZCk7CisgICAg
aWYgKCFwb2ludCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIC8vIERpc2Fs
bG93IGFueXRoaW5nIGV4Y2VwdCBzcGFjZXMgYXQgdGhlIGVuZC4KLSAgICByZXR1cm4gIXNraXBP
cHRpb25hbFNWR1NwYWNlcyhjdXIsIGVuZCk7CisgICAgaWYgKCFza2lwT3B0aW9uYWxTVkdTcGFj
ZXMoY3VyLCBlbmQpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIAorICAgIHJl
dHVybiBwb2ludDsKIH0KIAotYm9vbCBwYXJzZVJlY3QoY29uc3QgU3RyaW5nJiBzdHJpbmcsIEZs
b2F0UmVjdCYgcmVjdCkKK09wdGlvbmFsPEZsb2F0UmVjdD4gcGFyc2VSZWN0KGNvbnN0IFN0cmlu
ZyYgc3RyaW5nKQogewogICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmll
dyhzdHJpbmcpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwogICAgIGNvbnN0IFVDaGFyKiBwdHIg
PSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7CiAgICAgY29uc3QgVUNoYXIqIGVuZCA9IHB0ciArIHN0
cmluZy5sZW5ndGgoKTsKKyAgICAKICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMocHRyLCBlbmQp
OwogICAgIAotICAgIGZsb2F0IHggPSAwOwotICAgIGZsb2F0IHkgPSAwOwotICAgIGZsb2F0IHdp
ZHRoID0gMDsKLSAgICBmbG9hdCBoZWlnaHQgPSAwOwotICAgIGJvb2wgdmFsaWQgPSBwYXJzZU51
bWJlcihwdHIsIGVuZCwgeCkgJiYgcGFyc2VOdW1iZXIocHRyLCBlbmQsIHkpICYmIHBhcnNlTnVt
YmVyKHB0ciwgZW5kLCB3aWR0aCkgJiYgcGFyc2VOdW1iZXIocHRyLCBlbmQsIGhlaWdodCwgZmFs
c2UpOwotICAgIHJlY3QgPSBGbG9hdFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCk7Ci0gICAgcmV0
dXJuIHZhbGlkOworICAgIGF1dG8geCA9IHBhcnNlTnVtYmVyKHB0ciwgZW5kKTsKKyAgICBpZiAo
IXgpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgYXV0byB5ID0gcGFyc2VOdW1i
ZXIocHRyLCBlbmQpOworICAgIGlmICgheSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
KyAgICBhdXRvIHdpZHRoID0gcGFyc2VOdW1iZXIocHRyLCBlbmQpOworICAgIGlmICghd2lkdGgp
CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgYXV0byBoZWlnaHQgPSBwYXJzZU51
bWJlcihwdHIsIGVuZCwgU3VmZml4U2tpcHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsKKyAgICBpZiAo
IWhlaWdodCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIHJldHVybiBGbG9h
dFJlY3QgeyAqeCwgKnksICp3aWR0aCwgKmhlaWdodCB9OwogfQogCi1ib29sIHBhcnNlR2x5cGhO
YW1lKGNvbnN0IFN0cmluZyYgaW5wdXQsIEhhc2hTZXQ8U3RyaW5nPiYgdmFsdWVzKQorT3B0aW9u
YWw8SGFzaFNldDxTdHJpbmc+PiBwYXJzZUdseXBoTmFtZShjb25zdCBTdHJpbmcmIGlucHV0KQog
ewogICAgIC8vIEZJWE1FOiBQYXJzaW5nIGVycm9yIGRldGVjdGlvbiBpcyBtaXNzaW5nLgotICAg
IHZhbHVlcy5jbGVhcigpOworCisgICAgSGFzaFNldDxTdHJpbmc+IHZhbHVlczsKIAogICAgIGF1
dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyhpbnB1dCkudXBjb252ZXJ0ZWRD
aGFyYWN0ZXJzKCk7CiAgICAgY29uc3QgVUNoYXIqIHB0ciA9IHVwY29udmVydGVkQ2hhcmFjdGVy
czsKQEAgLTI4NywxMyArMjk5LDEzIEBAIGJvb2wgcGFyc2VHbHlwaE5hbWUoY29uc3QgU3RyaW5n
JiBpbnB1dCwKICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxpbWl0ZXIocHRyLCBl
bmQsICcsJyk7CiAgICAgfQogCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHZhbHVlczsK
IH0KIAotc3RhdGljIGJvb2wgcGFyc2VVbmljb2RlUmFuZ2UoY29uc3QgVUNoYXIqIGNoYXJhY3Rl
cnMsIHVuc2lnbmVkIGxlbmd0aCwgVW5pY29kZVJhbmdlJiByYW5nZSkKK3N0YXRpYyBPcHRpb25h
bDxVbmljb2RlUmFuZ2U+IHBhcnNlVW5pY29kZVJhbmdlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJz
LCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgaWYgKGxlbmd0aCA8IDIgfHwgY2hhcmFjdGVyc1sw
XSAhPSAnVScgfHwgY2hhcmFjdGVyc1sxXSAhPSAnKycpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAKICAgICAvLyBQYXJzZSB0aGUgc3Rh
cnRpbmcgaGV4IG51bWJlciAob3IgaXRzIHByZWZpeCkuCiAgICAgdW5zaWduZWQgc3RhcnRSYW5n
ZSA9IDA7CkBAIC0zMDYsMTUgKzMxOCwxNSBAQCBzdGF0aWMgYm9vbCBwYXJzZVVuaWNvZGVSYW5n
ZShjb25zdCBVQ2hhCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgKytzdGFydExlbmd0aDsK
ICAgICAgICAgaWYgKHN0YXJ0TGVuZ3RoID4gNikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIHN0YXJ0UmFuZ2UgPSAo
c3RhcnRSYW5nZSA8PCA0KSB8IHRvQVNDSUlIZXhWYWx1ZSgqcHRyKTsKICAgICAgICAgKytwdHI7
CiAgICAgfQotICAgIAorCiAgICAgLy8gSGFuZGxlIHRoZSBjYXNlIG9mIHJhbmdlcyBzZXBhcmF0
ZWQgYnkgIi0iIHNpZ24uCiAgICAgaWYgKDIgKyBzdGFydExlbmd0aCA8IGxlbmd0aCAmJiAqcHRy
ID09ICctJykgewogICAgICAgICBpZiAoIXN0YXJ0TGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgCiAgICAg
ICAgIC8vIFBhcnNlIHRoZSBlbmRpbmcgaGV4IG51bWJlciAob3IgaXRzIHByZWZpeCkuCiAgICAg
ICAgIHVuc2lnbmVkIGVuZFJhbmdlID0gMDsKQEAgLTMyNSwxNyArMzM3LDE4IEBAIHN0YXRpYyBi
b29sIHBhcnNlVW5pY29kZVJhbmdlKGNvbnN0IFVDaGEKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICsrZW5kTGVuZ3RoOwogICAgICAgICAgICAgaWYgKGVuZExlbmd0aCA+IDYp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiAgICAgICAgICAgICBlbmRSYW5nZSA9IChlbmRSYW5nZSA8PCA0KSB8IHRv
QVNDSUlIZXhWYWx1ZSgqcHRyKTsKICAgICAgICAgICAgICsrcHRyOwogICAgICAgICB9CiAgICAg
ICAgIAogICAgICAgICBpZiAoIWVuZExlbmd0aCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIAorICAgICAgICBVbmlj
b2RlUmFuZ2UgcmFuZ2U7CiAgICAgICAgIHJhbmdlLmZpcnN0ID0gc3RhcnRSYW5nZTsKICAgICAg
ICAgcmFuZ2Uuc2Vjb25kID0gZW5kUmFuZ2U7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICByZXR1cm4gcmFuZ2U7CiAgICAgfQogICAgIAogICAgIC8vIEhhbmRsZSB0aGUgY2FzZSBvZiBh
IG51bWJlciB3aXRoIHNvbWUgb3B0aW9uYWwgdHJhaWxpbmcgcXVlc3Rpb24gbWFya3MuCkBAIC0z
NDUsMjcgKzM1OCwzMiBAQCBzdGF0aWMgYm9vbCBwYXJzZVVuaWNvZGVSYW5nZShjb25zdCBVQ2hh
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgKytzdGFydExlbmd0aDsKICAgICAgICAgaWYg
KHN0YXJ0TGVuZ3RoID4gNikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIHN0YXJ0UmFuZ2UgPDw9IDQ7CiAgICAgICAg
IGVuZFJhbmdlID0gKGVuZFJhbmdlIDw8IDQpIHwgMHhGOwogICAgICAgICArK3B0cjsKICAgICB9
CiAgICAgCiAgICAgaWYgKCFzdGFydExlbmd0aCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIAorICAgIFVuaWNvZGVSYW5nZSByYW5nZTsK
ICAgICByYW5nZS5maXJzdCA9IHN0YXJ0UmFuZ2U7CiAgICAgcmFuZ2Uuc2Vjb25kID0gZW5kUmFu
Z2U7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHJhbmdlOwogfQogCi1ib29sIHBhcnNl
S2VybmluZ1VuaWNvZGVTdHJpbmcoY29uc3QgU3RyaW5nJiBpbnB1dCwgVW5pY29kZVJhbmdlcyYg
cmFuZ2VMaXN0LCBIYXNoU2V0PFN0cmluZz4mIHN0cmluZ0xpc3QpCitPcHRpb25hbDxzdGQ6OnBh
aXI8VW5pY29kZVJhbmdlcywgSGFzaFNldDxTdHJpbmc+Pj4gcGFyc2VLZXJuaW5nVW5pY29kZVN0
cmluZyhjb25zdCBTdHJpbmcmIGlucHV0KQogewogICAgIC8vIEZJWE1FOiBQYXJzaW5nIGVycm9y
IGRldGVjdGlvbiBpcyBtaXNzaW5nLgorCiAgICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMg
PSBTdHJpbmdWaWV3KGlucHV0KS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKICAgICBjb25zdCBV
Q2hhciogcHRyID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOwogICAgIGNvbnN0IFVDaGFyKiBlbmQg
PSBwdHIgKyBpbnB1dC5sZW5ndGgoKTsKIAorICAgIFVuaWNvZGVSYW5nZXMgcmFuZ2VMaXN0Owor
ICAgIEhhc2hTZXQ8U3RyaW5nPiBzdHJpbmdMaXN0OworCiAgICAgd2hpbGUgKHB0ciA8IGVuZCkg
ewogICAgICAgICBjb25zdCBVQ2hhciogaW5wdXRTdGFydCA9IHB0cjsKICAgICAgICAgd2hpbGUg
KHB0ciA8IGVuZCAmJiAqcHRyICE9ICcsJykKQEAgLTM3NSwxMDUgKzM5MywzNyBAQCBib29sIHBh
cnNlS2VybmluZ1VuaWNvZGVTdHJpbmcoY29uc3QgU3RyCiAgICAgICAgICAgICBicmVhazsKIAog
ICAgICAgICAvLyBUcnkgdG8gcGFyc2UgdW5pY29kZSByYW5nZSBmaXJzdAotICAgICAgICBVbmlj
b2RlUmFuZ2UgcmFuZ2U7Ci0gICAgICAgIGlmIChwYXJzZVVuaWNvZGVSYW5nZShpbnB1dFN0YXJ0
LCBwdHIgLSBpbnB1dFN0YXJ0LCByYW5nZSkpCi0gICAgICAgICAgICByYW5nZUxpc3QuYXBwZW5k
KHJhbmdlKTsKKyAgICAgICAgaWYgKGF1dG8gcmFuZ2UgPSBwYXJzZVVuaWNvZGVSYW5nZShpbnB1
dFN0YXJ0LCBwdHIgLSBpbnB1dFN0YXJ0KSkKKyAgICAgICAgICAgIHJhbmdlTGlzdC5hcHBlbmQo
V1RGTW92ZSgqcmFuZ2UpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgc3RyaW5nTGlzdC5h
ZGQoU3RyaW5nKGlucHV0U3RhcnQsIHB0ciAtIGlucHV0U3RhcnQpKTsKICAgICAgICAgKytwdHI7
CiAgICAgfQogCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKHJh
bmdlTGlzdCwgc3RyaW5nTGlzdCk7CiB9CiAKLVZlY3RvcjxTdHJpbmc+IHBhcnNlRGVsaW1pdGVk
U3RyaW5nKGNvbnN0IFN0cmluZyYgaW5wdXQsIGNvbnN0IGNoYXIgc2VwZXJhdG9yKQordGVtcGxh
dGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBPcHRpb25hbDxGbG9hdFBvaW50PiBn
ZW5lcmljUGFyc2VGbG9hdFBvaW50KGNvbnN0IENoYXJhY3RlclR5cGUqJiBjdXJyZW50LCBjb25z
dCBDaGFyYWN0ZXJUeXBlKiBlbmQpCiB7Ci0gICAgVmVjdG9yPFN0cmluZz4gdmFsdWVzOwotCi0g
ICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KGlucHV0KS51cGNvbnZl
cnRlZENoYXJhY3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciogcHRyID0gdXBjb252ZXJ0ZWRDaGFy
YWN0ZXJzOwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBwdHIgKyBpbnB1dC5sZW5ndGgoKTsKLSAg
ICBza2lwT3B0aW9uYWxTVkdTcGFjZXMocHRyLCBlbmQpOworICAgIGF1dG8geCA9IHBhcnNlTnVt
YmVyKGN1cnJlbnQsIGVuZCk7CisgICAgaWYgKCF4KQorICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogCi0gICAgd2hpbGUgKHB0ciA8IGVuZCkgewotICAgICAgICAvLyBMZWFkaW5nIGFuZCB0
cmFpbGluZyB3aGl0ZSBzcGFjZSwgYW5kIHdoaXRlIHNwYWNlIGJlZm9yZSBhbmQgYWZ0ZXIgc2Vt
aWNvbG9uIHNlcGFyYXRvcnMsIHdpbGwgYmUgaWdub3JlZC4KLSAgICAgICAgY29uc3QgVUNoYXIq
IGlucHV0U3RhcnQgPSBwdHI7Ci0gICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgKnB0ciAhPSBz
ZXBlcmF0b3IpIC8vIGNhcmVmdWwgbm90IHRvIGlnbm9yZSB3aGl0ZXNwYWNlIGluc2lkZSBpbnB1
dHMKLSAgICAgICAgICAgIHB0cisrOworICAgIGF1dG8geSA9IHBhcnNlTnVtYmVyKGN1cnJlbnQs
IGVuZCk7CisgICAgaWYgKCF5KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAg
ICAgIGlmIChwdHIgPT0gaW5wdXRTdGFydCkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAg
IC8vIHdhbGsgYmFja3dhcmRzIGZyb20gdGhlIDsgdG8gaWdub3JlIGFueSB3aGl0ZXNwYWNlCi0g
ICAgICAgIGNvbnN0IFVDaGFyKiBpbnB1dEVuZCA9IHB0ciAtIDE7Ci0gICAgICAgIHdoaWxlIChp
bnB1dFN0YXJ0IDwgaW5wdXRFbmQgJiYgaXNTVkdTcGFjZSgqaW5wdXRFbmQpKQotICAgICAgICAg
ICAgaW5wdXRFbmQtLTsKLQotICAgICAgICB2YWx1ZXMuYXBwZW5kKFN0cmluZyhpbnB1dFN0YXJ0
LCBpbnB1dEVuZCAtIGlucHV0U3RhcnQgKyAxKSk7Ci0gICAgICAgIHNraXBPcHRpb25hbFNWR1Nw
YWNlc09yRGVsaW1pdGVyKHB0ciwgZW5kLCBzZXBlcmF0b3IpOwotICAgIH0KLQotICAgIHJldHVy
biB2YWx1ZXM7CisgICAgcmV0dXJuIEZsb2F0UG9pbnQgeyAqeCwgKnkgfTsKIH0KIAotdGVtcGxh
dGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1ib29sIHBhcnNlRmxvYXRQb2ludChjb25zdCBD
aGFyYWN0ZXJUeXBlKiYgY3VycmVudCwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kLCBGbG9hdFBv
aW50JiBwb2ludCkKK09wdGlvbmFsPEZsb2F0UG9pbnQ+IHBhcnNlRmxvYXRQb2ludChjb25zdCBM
Q2hhciomIGN1cnJlbnQsIGNvbnN0IExDaGFyKiBlbmQpCiB7Ci0gICAgZmxvYXQgeDsKLSAgICBm
bG9hdCB5OwotICAgIGlmICghcGFyc2VOdW1iZXIoY3VycmVudCwgZW5kLCB4KQotICAgICAgICB8
fCAhcGFyc2VOdW1iZXIoY3VycmVudCwgZW5kLCB5KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIHBvaW50ID0gRmxvYXRQb2ludCh4LCB5KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdGVt
cGxhdGUgYm9vbCBwYXJzZUZsb2F0UG9pbnQoY29uc3QgTENoYXIqJiBjdXJyZW50LCBjb25zdCBM
Q2hhciogZW5kLCBGbG9hdFBvaW50JiBwb2ludDEpOwotdGVtcGxhdGUgYm9vbCBwYXJzZUZsb2F0
UG9pbnQoY29uc3QgVUNoYXIqJiBjdXJyZW50LCBjb25zdCBVQ2hhciogZW5kLCBGbG9hdFBvaW50
JiBwb2ludDEpOwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLWlubGluZSBi
b29sIHBhcnNlRmxvYXRQb2ludDIoY29uc3QgQ2hhcmFjdGVyVHlwZSomIGN1cnJlbnQsIGNvbnN0
IENoYXJhY3RlclR5cGUqIGVuZCwgRmxvYXRQb2ludCYgcG9pbnQxLCBGbG9hdFBvaW50JiBwb2lu
dDIpCi17Ci0gICAgZmxvYXQgeDE7Ci0gICAgZmxvYXQgeTE7Ci0gICAgZmxvYXQgeDI7Ci0gICAg
ZmxvYXQgeTI7Ci0gICAgaWYgKCFwYXJzZU51bWJlcihjdXJyZW50LCBlbmQsIHgxKQotICAgICAg
ICB8fCAhcGFyc2VOdW1iZXIoY3VycmVudCwgZW5kLCB5MSkKLSAgICAgICAgfHwgIXBhcnNlTnVt
YmVyKGN1cnJlbnQsIGVuZCwgeDIpCi0gICAgICAgIHx8ICFwYXJzZU51bWJlcihjdXJyZW50LCBl
bmQsIHkyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHBvaW50MSA9IEZsb2F0UG9pbnQo
eDEsIHkxKTsKLSAgICBwb2ludDIgPSBGbG9hdFBvaW50KHgyLCB5Mik7Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLXRlbXBsYXRlIGJvb2wgcGFyc2VGbG9hdFBvaW50Mihjb25zdCBMQ2hhciomIGN1
cnJlbnQsIGNvbnN0IExDaGFyKiBlbmQsIEZsb2F0UG9pbnQmIHBvaW50MSwgRmxvYXRQb2ludCYg
cG9pbnQyKTsKLXRlbXBsYXRlIGJvb2wgcGFyc2VGbG9hdFBvaW50Mihjb25zdCBVQ2hhciomIGN1
cnJlbnQsIGNvbnN0IFVDaGFyKiBlbmQsIEZsb2F0UG9pbnQmIHBvaW50MSwgRmxvYXRQb2ludCYg
cG9pbnQyKTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1ib29sIHBhcnNl
RmxvYXRQb2ludDMoY29uc3QgQ2hhcmFjdGVyVHlwZSomIGN1cnJlbnQsIGNvbnN0IENoYXJhY3Rl
clR5cGUqIGVuZCwgRmxvYXRQb2ludCYgcG9pbnQxLCBGbG9hdFBvaW50JiBwb2ludDIsIEZsb2F0
UG9pbnQmIHBvaW50MykKLXsKLSAgICBmbG9hdCB4MTsKLSAgICBmbG9hdCB5MTsKLSAgICBmbG9h
dCB4MjsKLSAgICBmbG9hdCB5MjsKLSAgICBmbG9hdCB4MzsKLSAgICBmbG9hdCB5MzsKLSAgICBp
ZiAoIXBhcnNlTnVtYmVyKGN1cnJlbnQsIGVuZCwgeDEpCi0gICAgICAgIHx8ICFwYXJzZU51bWJl
cihjdXJyZW50LCBlbmQsIHkxKQotICAgICAgICB8fCAhcGFyc2VOdW1iZXIoY3VycmVudCwgZW5k
LCB4MikKLSAgICAgICAgfHwgIXBhcnNlTnVtYmVyKGN1cnJlbnQsIGVuZCwgeTIpCi0gICAgICAg
IHx8ICFwYXJzZU51bWJlcihjdXJyZW50LCBlbmQsIHgzKQotICAgICAgICB8fCAhcGFyc2VOdW1i
ZXIoY3VycmVudCwgZW5kLCB5MykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBwb2ludDEg
PSBGbG9hdFBvaW50KHgxLCB5MSk7Ci0gICAgcG9pbnQyID0gRmxvYXRQb2ludCh4MiwgeTIpOwot
ICAgIHBvaW50MyA9IEZsb2F0UG9pbnQoeDMsIHkzKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBy
ZXR1cm4gZ2VuZXJpY1BhcnNlRmxvYXRQb2ludChjdXJyZW50LCBlbmQpOwogfQogCi10ZW1wbGF0
ZSBib29sIHBhcnNlRmxvYXRQb2ludDMoY29uc3QgTENoYXIqJiBjdXJyZW50LCBjb25zdCBMQ2hh
ciogZW5kLCBGbG9hdFBvaW50JiBwb2ludDEsIEZsb2F0UG9pbnQmIHBvaW50MiwgRmxvYXRQb2lu
dCYgcG9pbnQzKTsKLXRlbXBsYXRlIGJvb2wgcGFyc2VGbG9hdFBvaW50Myhjb25zdCBVQ2hhciom
IGN1cnJlbnQsIGNvbnN0IFVDaGFyKiBlbmQsIEZsb2F0UG9pbnQmIHBvaW50MSwgRmxvYXRQb2lu
dCYgcG9pbnQyLCBGbG9hdFBvaW50JiBwb2ludDMpOworT3B0aW9uYWw8RmxvYXRQb2ludD4gcGFy
c2VGbG9hdFBvaW50KGNvbnN0IFVDaGFyKiYgY3VycmVudCwgY29uc3QgVUNoYXIqIGVuZCkKK3sK
KyAgICByZXR1cm4gZ2VuZXJpY1BhcnNlRmxvYXRQb2ludChjdXJyZW50LCBlbmQpOworfQogCiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5oCShyZXZpc2lvbiAy
NjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKLXR5cGVkZWYgc3RkOjpwYWlyPHVuc2lnbmVk
LCB1bnNpZ25lZD4gVW5pY29kZVJhbmdlOwordHlwZWRlZiBzdGQ6OnBhaXI8VUNoYXIzMiwgVUNo
YXIzMj4gVW5pY29kZVJhbmdlOwogdHlwZWRlZiBWZWN0b3I8VW5pY29kZVJhbmdlPiBVbmljb2Rl
UmFuZ2VzOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zMyw0MiArMzMsNDUgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogY2xhc3MgRmxvYXRQb2ludDsKIGNsYXNzIEZsb2F0UmVjdDsKIAotdGVt
cGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1ib29sIHBhcnNlU1ZHTnVtYmVyKENoYXJh
Y3RlclR5cGUqIHB0ciwgc2l6ZV90IGxlbmd0aCwgZG91YmxlJiBudW1iZXIpOwotYm9vbCBwYXJz
ZU51bWJlcihjb25zdCBMQ2hhciomIHB0ciwgY29uc3QgTENoYXIqIGVuZCwgZmxvYXQmIG51bWJl
ciwgYm9vbCBza2lwID0gdHJ1ZSk7Ci1ib29sIHBhcnNlTnVtYmVyKGNvbnN0IFVDaGFyKiYgcHRy
LCBjb25zdCBVQ2hhciogZW5kLCBmbG9hdCYgbnVtYmVyLCBib29sIHNraXAgPSB0cnVlKTsKLWJv
b2wgcGFyc2VOdW1iZXJGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYsIGZsb2F0JiBudW1iZXIsIGJv
b2wgc2tpcCA9IHRydWUpOwotYm9vbCBwYXJzZU51bWJlck9wdGlvbmFsTnVtYmVyKGNvbnN0IFN0
cmluZyYgcywgZmxvYXQmIGgsIGZsb2F0JiB2KTsKLWJvb2wgcGFyc2VBcmNGbGFnKGNvbnN0IExD
aGFyKiYgcHRyLCBjb25zdCBMQ2hhciogZW5kLCBib29sJiBmbGFnKTsKLWJvb2wgcGFyc2VBcmNG
bGFnKGNvbnN0IFVDaGFyKiYgcHRyLCBjb25zdCBVQ2hhciogZW5kLCBib29sJiBmbGFnKTsKLWJv
b2wgcGFyc2VQb2ludChjb25zdCBTdHJpbmcmLCBGbG9hdFBvaW50Jik7Ci1ib29sIHBhcnNlUmVj
dChjb25zdCBTdHJpbmcmLCBGbG9hdFJlY3QmKTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJh
Y3RlclR5cGU+Ci1ib29sIHBhcnNlRmxvYXRQb2ludChjb25zdCBDaGFyYWN0ZXJUeXBlKiYgY3Vy
cmVudCwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kLCBGbG9hdFBvaW50Jik7Ci10ZW1wbGF0ZSA8
dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLWJvb2wgcGFyc2VGbG9hdFBvaW50Mihjb25zdCBDaGFy
YWN0ZXJUeXBlKiYgY3VycmVudCwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kLCBGbG9hdFBvaW50
JiwgRmxvYXRQb2ludCYpOwotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1ib29s
IHBhcnNlRmxvYXRQb2ludDMoY29uc3QgQ2hhcmFjdGVyVHlwZSomIGN1cnJlbnQsIGNvbnN0IENo
YXJhY3RlclR5cGUqIGVuZCwgRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmLCBGbG9hdFBvaW50Jik7
CitlbnVtIGNsYXNzIFN1ZmZpeFNraXBwaW5nUG9saWN5IHsKKyAgICBEb250U2tpcCwKKyAgICBT
a2lwCit9OworCitPcHRpb25hbDxmbG9hdD4gcGFyc2VOdW1iZXIoY29uc3QgTENoYXIqJiBjdXJy
ZW50LCBjb25zdCBMQ2hhciogZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeSA9IFN1ZmZpeFNraXBw
aW5nUG9saWN5OjpTa2lwKTsKK09wdGlvbmFsPGZsb2F0PiBwYXJzZU51bWJlcihjb25zdCBVQ2hh
ciomIGN1cnJlbnQsIGNvbnN0IFVDaGFyKiBlbmQsIFN1ZmZpeFNraXBwaW5nUG9saWN5ID0gU3Vm
Zml4U2tpcHBpbmdQb2xpY3k6OlNraXApOworT3B0aW9uYWw8ZmxvYXQ+IHBhcnNlTnVtYmVyKGNv
bnN0IFN0cmluZyYsIFN1ZmZpeFNraXBwaW5nUG9saWN5ID0gU3VmZml4U2tpcHBpbmdQb2xpY3k6
OlNraXApOworCitPcHRpb25hbDxzdGQ6OnBhaXI8ZmxvYXQsIGZsb2F0Pj4gcGFyc2VOdW1iZXJP
cHRpb25hbE51bWJlcihjb25zdCBTdHJpbmcmKTsKKworT3B0aW9uYWw8Ym9vbD4gcGFyc2VBcmNG
bGFnKGNvbnN0IExDaGFyKiYgY3VycmVudCwgY29uc3QgTENoYXIqIGVuZCk7CitPcHRpb25hbDxi
b29sPiBwYXJzZUFyY0ZsYWcoY29uc3QgVUNoYXIqJiBjdXJyZW50LCBjb25zdCBVQ2hhciogZW5k
KTsKKworT3B0aW9uYWw8RmxvYXRQb2ludD4gcGFyc2VQb2ludChjb25zdCBTdHJpbmcmKTsKK09w
dGlvbmFsPEZsb2F0UmVjdD4gcGFyc2VSZWN0KGNvbnN0IFN0cmluZyYpOworCitPcHRpb25hbDxG
bG9hdFBvaW50PiBwYXJzZUZsb2F0UG9pbnQoY29uc3QgTENoYXIqJiBjdXJyZW50LCBjb25zdCBM
Q2hhciogZW5kKTsKK09wdGlvbmFsPEZsb2F0UG9pbnQ+IHBhcnNlRmxvYXRQb2ludChjb25zdCBV
Q2hhciomIGN1cnJlbnQsIGNvbnN0IFVDaGFyKiBlbmQpOworCitPcHRpb25hbDxzdGQ6OnBhaXI8
VW5pY29kZVJhbmdlcywgSGFzaFNldDxTdHJpbmc+Pj4gcGFyc2VLZXJuaW5nVW5pY29kZVN0cmlu
Zyhjb25zdCBTdHJpbmcmKTsKK09wdGlvbmFsPEhhc2hTZXQ8U3RyaW5nPj4gcGFyc2VHbHlwaE5h
bWUoY29uc3QgU3RyaW5nJik7CisKIAogLy8gU1ZHIGFsbG93cyBzZXZlcmFsIGRpZmZlcmVudCB3
aGl0ZXNwYWNlIGNoYXJhY3RlcnM6CiAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcvcGF0aHMu
aHRtbCNQYXRoRGF0YUJORgotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1pbmxp
bmUgYm9vbCBpc1NWR1NwYWNlKENoYXJhY3RlclR5cGUgYykKK3RlbXBsYXRlPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+IGlubGluZSBib29sIGlzU1ZHU3BhY2UoQ2hhcmFjdGVyVHlwZSBjKQogewog
ICAgIHJldHVybiBjID09ICcgJyB8fCBjID09ICdcdCcgfHwgYyA9PSAnXG4nIHx8IGMgPT0gJ1xy
JzsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1pbmxpbmUgYm9vbCBz
a2lwT3B0aW9uYWxTVkdTcGFjZXMoY29uc3QgQ2hhcmFjdGVyVHlwZSomIHB0ciwgY29uc3QgQ2hh
cmFjdGVyVHlwZSogZW5kKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gaW5saW5l
IGJvb2wgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGNvbnN0IENoYXJhY3RlclR5cGUqJiBwdHIsIGNv
bnN0IENoYXJhY3RlclR5cGUqIGVuZCkKIHsKICAgICB3aGlsZSAocHRyIDwgZW5kICYmIGlzU1ZH
U3BhY2UoKnB0cikpCiAgICAgICAgIHB0cisrOwogICAgIHJldHVybiBwdHIgPCBlbmQ7CiB9CiAK
LXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotaW5saW5lIGJvb2wgc2tpcE9wdGlv
bmFsU1ZHU3BhY2VzT3JEZWxpbWl0ZXIoY29uc3QgQ2hhcmFjdGVyVHlwZSomIHB0ciwgY29uc3Qg
Q2hhcmFjdGVyVHlwZSogZW5kLCBjaGFyIGRlbGltaXRlciA9ICcsJykKK3RlbXBsYXRlPHR5cGVu
YW1lIENoYXJhY3RlclR5cGU+IGlubGluZSBib29sIHNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVs
aW1pdGVyKGNvbnN0IENoYXJhY3RlclR5cGUqJiBwdHIsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVu
ZCwgY2hhciBkZWxpbWl0ZXIgPSAnLCcpCiB7CiAgICAgaWYgKHB0ciA8IGVuZCAmJiAhaXNTVkdT
cGFjZSgqcHRyKSAmJiAqcHRyICE9IGRlbGltaXRlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtODEsMTAgKzg0LDYgQEAgaW5saW5lIGJvb2wgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxp
bQogICAgIHJldHVybiBwdHIgPCBlbmQ7CiB9CiAKLVZlY3RvcjxTdHJpbmc+IHBhcnNlRGVsaW1p
dGVkU3RyaW5nKGNvbnN0IFN0cmluZyYgaW5wdXQsIGNvbnN0IGNoYXIgc2VwZXJhdG9yKTsKLWJv
b2wgcGFyc2VLZXJuaW5nVW5pY29kZVN0cmluZyhjb25zdCBTdHJpbmcmIGlucHV0LCBVbmljb2Rl
UmFuZ2VzJiwgSGFzaFNldDxTdHJpbmc+JiBzdHJpbmdMaXN0KTsKLWJvb2wgcGFyc2VHbHlwaE5h
bWUoY29uc3QgU3RyaW5nJiBpbnB1dCwgSGFzaFNldDxTdHJpbmc+JiB2YWx1ZXMpOwotCiBpbmxp
bmUgYm9vbCBza2lwU3RyaW5nKGNvbnN0IFVDaGFyKiYgcHRyLCBjb25zdCBVQ2hhciogZW5kLCBj
b25zdCBVQ2hhciogbmFtZSwgaW50IGxlbmd0aCkKIHsKICAgICBpZiAoZW5kIC0gcHRyIDwgbGVu
Z3RoKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhCbGVuZGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEJsZW5kZXIuY3BwCShyZXZpc2lvbiAy
NjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEJsZW5kZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTYsMjAwICsxMTYsMTk3IEBAIEZsb2F0UG9pbnQgU1ZHUGF0aEJsZW5kZXI6
OmJsZW5kQW5pbWF0ZWQKICAgICByZXR1cm4gYW5pbWF0ZWRQb2ludDsKIH0KIAordGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rpb24+IHN0YXRpYyBhdXRvIHB1bGxGcm9tU291cmNlcyhTVkdQYXRoU291
cmNlJiBmcm9tU291cmNlLCBTVkdQYXRoU291cmNlJiB0b1NvdXJjZSwgRnVuY3Rpb24mJiBmdW5j
dGlvbikgLT4gT3B0aW9uYWw8c3RkOjpwYWlyPHR5cGVuYW1lIHN0ZDo6aW52b2tlX3Jlc3VsdF90
PEZ1bmN0aW9uLCBTVkdQYXRoU291cmNlPjo6dmFsdWVfdHlwZSwgdHlwZW5hbWUgc3RkOjppbnZv
a2VfcmVzdWx0X3Q8RnVuY3Rpb24sIFNWR1BhdGhTb3VyY2U+Ojp2YWx1ZV90eXBlPj4KK3sKKyAg
ICBpZiAoIWZyb21Tb3VyY2UuaGFzTW9yZURhdGEoKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6cGFp
cjx0eXBlbmFtZSBzdGQ6Omludm9rZV9yZXN1bHRfdDxGdW5jdGlvbiwgU1ZHUGF0aFNvdXJjZT46
OnZhbHVlX3R5cGUsIHR5cGVuYW1lIHN0ZDo6aW52b2tlX3Jlc3VsdF90PEZ1bmN0aW9uLCBTVkdQ
YXRoU291cmNlPjo6dmFsdWVfdHlwZT4geyB9OworCisgICAgYXV0byBwYXJzZWRGcm9tID0gc3Rk
OjppbnZva2UoZnVuY3Rpb24sIGZyb21Tb3VyY2UpOworICAgIGlmICghcGFyc2VkRnJvbSkKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBhdXRvIHBhcnNlZFRvID0gc3RkOjppbnZv
a2UoZnVuY3Rpb24sIHRvU291cmNlKTsKKyAgICBpZiAoIXBhcnNlZFRvKQorICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OworCisgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKFdURk1vdmUoKnBh
cnNlZEZyb20pLCBXVEZNb3ZlKCpwYXJzZWRUbykpOworfQorCiBib29sIFNWR1BhdGhCbGVuZGVy
OjpibGVuZE1vdmVUb1NlZ21lbnQoZmxvYXQgcHJvZ3Jlc3MpCiB7Ci0gICAgRmxvYXRQb2ludCBm
cm9tVGFyZ2V0UG9pbnQ7Ci0gICAgRmxvYXRQb2ludCB0b1RhcmdldFBvaW50OwotICAgIGlmICgo
bV9mcm9tU291cmNlLmhhc01vcmVEYXRhKCkgJiYgIW1fZnJvbVNvdXJjZS5wYXJzZU1vdmVUb1Nl
Z21lbnQoZnJvbVRhcmdldFBvaW50KSkKLSAgICAgICAgfHwgIW1fdG9Tb3VyY2UucGFyc2VNb3Zl
VG9TZWdtZW50KHRvVGFyZ2V0UG9pbnQpKQorICAgIGF1dG8gcmVzdWx0ID0gcHVsbEZyb21Tb3Vy
Y2VzKG1fZnJvbVNvdXJjZSwgbV90b1NvdXJjZSwgJlNWR1BhdGhTb3VyY2U6OnBhcnNlTW92ZVRv
U2VnbWVudCk7CisgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IGlmICghbV9jb25zdW1lcikKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBtX2NvbnN1bWVy
LT5tb3ZlVG8oYmxlbmRBbmltYXRlZEZsb2F0UG9pbnQoZnJvbVRhcmdldFBvaW50LCB0b1Rhcmdl
dFBvaW50LCBwcm9ncmVzcyksIGZhbHNlLCBtX2lzSW5GaXJzdEhhbGZPZkFuaW1hdGlvbiA/IG1f
ZnJvbU1vZGUgOiBtX3RvTW9kZSk7Ci0gICAgbV9mcm9tQ3VycmVudFBvaW50ID0gbV9mcm9tTW9k
ZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gZnJvbVRhcmdldFBvaW50IDogbV9mcm9tQ3VycmVu
dFBvaW50ICsgZnJvbVRhcmdldFBvaW50OwotICAgIG1fdG9DdXJyZW50UG9pbnQgPSBtX3RvTW9k
ZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gdG9UYXJnZXRQb2ludCA6IG1fdG9DdXJyZW50UG9p
bnQgKyB0b1RhcmdldFBvaW50OworICAgIGF1dG8gW2Zyb20sIHRvXSA9ICpyZXN1bHQ7CisKKyAg
ICBtX2NvbnN1bWVyLT5tb3ZlVG8oYmxlbmRBbmltYXRlZEZsb2F0UG9pbnQoZnJvbS50YXJnZXRQ
b2ludCwgdG8udGFyZ2V0UG9pbnQsIHByb2dyZXNzKSwgZmFsc2UsIG1faXNJbkZpcnN0SGFsZk9m
QW5pbWF0aW9uID8gbV9mcm9tTW9kZSA6IG1fdG9Nb2RlKTsKKyAgICBtX2Zyb21DdXJyZW50UG9p
bnQgPSBtX2Zyb21Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyBmcm9tLnRhcmdldFBvaW50
IDogbV9mcm9tQ3VycmVudFBvaW50ICsgZnJvbS50YXJnZXRQb2ludDsKKyAgICBtX3RvQ3VycmVu
dFBvaW50ID0gbV90b01vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IHRvLnRhcmdldFBvaW50
IDogbV90b0N1cnJlbnRQb2ludCArIHRvLnRhcmdldFBvaW50OwogICAgIHJldHVybiB0cnVlOwog
fQogCiBib29sIFNWR1BhdGhCbGVuZGVyOjpibGVuZExpbmVUb1NlZ21lbnQoZmxvYXQgcHJvZ3Jl
c3MpCiB7Ci0gICAgRmxvYXRQb2ludCBmcm9tVGFyZ2V0UG9pbnQ7Ci0gICAgRmxvYXRQb2ludCB0
b1RhcmdldFBvaW50OwotICAgIGlmICgobV9mcm9tU291cmNlLmhhc01vcmVEYXRhKCkgJiYgIW1f
ZnJvbVNvdXJjZS5wYXJzZUxpbmVUb1NlZ21lbnQoZnJvbVRhcmdldFBvaW50KSkKLSAgICAgICAg
fHwgIW1fdG9Tb3VyY2UucGFyc2VMaW5lVG9TZWdtZW50KHRvVGFyZ2V0UG9pbnQpKQorICAgIGF1
dG8gcmVzdWx0ID0gcHVsbEZyb21Tb3VyY2VzKG1fZnJvbVNvdXJjZSwgbV90b1NvdXJjZSwgJlNW
R1BhdGhTb3VyY2U6OnBhcnNlTGluZVRvU2VnbWVudCk7CisgICAgaWYgKCFyZXN1bHQpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmICghbV9jb25zdW1lcikKICAgICAgICAgcmV0dXJu
IHRydWU7CiAKLSAgICBtX2NvbnN1bWVyLT5saW5lVG8oYmxlbmRBbmltYXRlZEZsb2F0UG9pbnQo
ZnJvbVRhcmdldFBvaW50LCB0b1RhcmdldFBvaW50LCBwcm9ncmVzcyksIG1faXNJbkZpcnN0SGFs
Zk9mQW5pbWF0aW9uID8gbV9mcm9tTW9kZSA6IG1fdG9Nb2RlKTsKLSAgICBtX2Zyb21DdXJyZW50
UG9pbnQgPSBtX2Zyb21Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyBmcm9tVGFyZ2V0UG9p
bnQgOiBtX2Zyb21DdXJyZW50UG9pbnQgKyBmcm9tVGFyZ2V0UG9pbnQ7Ci0gICAgbV90b0N1cnJl
bnRQb2ludCA9IG1fdG9Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyB0b1RhcmdldFBvaW50
IDogbV90b0N1cnJlbnRQb2ludCArIHRvVGFyZ2V0UG9pbnQ7CisgICAgYXV0byBbZnJvbSwgdG9d
ID0gKnJlc3VsdDsKKworICAgIG1fY29uc3VtZXItPmxpbmVUbyhibGVuZEFuaW1hdGVkRmxvYXRQ
b2ludChmcm9tLnRhcmdldFBvaW50LCB0by50YXJnZXRQb2ludCwgcHJvZ3Jlc3MpLCBtX2lzSW5G
aXJzdEhhbGZPZkFuaW1hdGlvbiA/IG1fZnJvbU1vZGUgOiBtX3RvTW9kZSk7CisgICAgbV9mcm9t
Q3VycmVudFBvaW50ID0gbV9mcm9tTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gZnJvbS50
YXJnZXRQb2ludCA6IG1fZnJvbUN1cnJlbnRQb2ludCArIGZyb20udGFyZ2V0UG9pbnQ7CisgICAg
bV90b0N1cnJlbnRQb2ludCA9IG1fdG9Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyB0by50
YXJnZXRQb2ludCA6IG1fdG9DdXJyZW50UG9pbnQgKyB0by50YXJnZXRQb2ludDsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAogYm9vbCBTVkdQYXRoQmxlbmRlcjo6YmxlbmRMaW5lVG9Ib3Jpem9udGFs
U2VnbWVudChmbG9hdCBwcm9ncmVzcykKIHsKLSAgICBmbG9hdCBmcm9tWCA9IDA7Ci0gICAgZmxv
YXQgdG9YID0gMDsKLSAgICBpZiAoKG1fZnJvbVNvdXJjZS5oYXNNb3JlRGF0YSgpICYmICFtX2Zy
b21Tb3VyY2UucGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudChmcm9tWCkpCi0gICAgICAgIHx8
ICFtX3RvU291cmNlLnBhcnNlTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQodG9YKSkKKyAgICBhdXRv
IHJlc3VsdCA9IHB1bGxGcm9tU291cmNlcyhtX2Zyb21Tb3VyY2UsIG1fdG9Tb3VyY2UsICZTVkdQ
YXRoU291cmNlOjpwYXJzZUxpbmVUb0hvcml6b250YWxTZWdtZW50KTsKKyAgICBpZiAoIXJlc3Vs
dCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKCFtX2NvbnN1bWVyKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKIAotICAgIG1fY29uc3VtZXItPmxpbmVUb0hvcml6b250YWwoYmxlbmRB
bmltYXRlZERpbWVuc29uYWxGbG9hdChmcm9tWCwgdG9YLCBCbGVuZEhvcml6b250YWwsIHByb2dy
ZXNzKSwgbV9pc0luRmlyc3RIYWxmT2ZBbmltYXRpb24gPyBtX2Zyb21Nb2RlIDogbV90b01vZGUp
OwotICAgIG1fZnJvbUN1cnJlbnRQb2ludC5zZXRYKG1fZnJvbU1vZGUgPT0gQWJzb2x1dGVDb29y
ZGluYXRlcyA/IGZyb21YIDogbV9mcm9tQ3VycmVudFBvaW50LngoKSArIGZyb21YKTsKLSAgICBt
X3RvQ3VycmVudFBvaW50LnNldFgobV90b01vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IHRv
WCA6IG1fdG9DdXJyZW50UG9pbnQueCgpICsgdG9YKTsKKyAgICBhdXRvIFtmcm9tLCB0b10gPSAq
cmVzdWx0OworCisgICAgbV9jb25zdW1lci0+bGluZVRvSG9yaXpvbnRhbChibGVuZEFuaW1hdGVk
RGltZW5zb25hbEZsb2F0KGZyb20ueCwgdG8ueCwgQmxlbmRIb3Jpem9udGFsLCBwcm9ncmVzcyks
IG1faXNJbkZpcnN0SGFsZk9mQW5pbWF0aW9uID8gbV9mcm9tTW9kZSA6IG1fdG9Nb2RlKTsKKyAg
ICBtX2Zyb21DdXJyZW50UG9pbnQuc2V0WChtX2Zyb21Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0
ZXMgPyBmcm9tLnggOiBtX2Zyb21DdXJyZW50UG9pbnQueCgpICsgZnJvbS54KTsKKyAgICBtX3Rv
Q3VycmVudFBvaW50LnNldFgobV90b01vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IHRvLngg
OiBtX3RvQ3VycmVudFBvaW50LngoKSArIHRvLngpOwogICAgIHJldHVybiB0cnVlOwogfQogCiBi
b29sIFNWR1BhdGhCbGVuZGVyOjpibGVuZExpbmVUb1ZlcnRpY2FsU2VnbWVudChmbG9hdCBwcm9n
cmVzcykKIHsKLSAgICBmbG9hdCBmcm9tWSA9IDA7Ci0gICAgZmxvYXQgdG9ZID0gMDsKLSAgICBp
ZiAoKG1fZnJvbVNvdXJjZS5oYXNNb3JlRGF0YSgpICYmICFtX2Zyb21Tb3VyY2UucGFyc2VMaW5l
VG9WZXJ0aWNhbFNlZ21lbnQoZnJvbVkpKQotICAgICAgICB8fCAhbV90b1NvdXJjZS5wYXJzZUxp
bmVUb1ZlcnRpY2FsU2VnbWVudCh0b1kpKQorICAgIGF1dG8gcmVzdWx0ID0gcHVsbEZyb21Tb3Vy
Y2VzKG1fZnJvbVNvdXJjZSwgbV90b1NvdXJjZSwgJlNWR1BhdGhTb3VyY2U6OnBhcnNlTGluZVRv
VmVydGljYWxTZWdtZW50KTsKKyAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgaWYgKCFtX2NvbnN1bWVyKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIG1f
Y29uc3VtZXItPmxpbmVUb1ZlcnRpY2FsKGJsZW5kQW5pbWF0ZWREaW1lbnNvbmFsRmxvYXQoZnJv
bVksIHRvWSwgQmxlbmRWZXJ0aWNhbCwgcHJvZ3Jlc3MpLCBtX2lzSW5GaXJzdEhhbGZPZkFuaW1h
dGlvbiA/IG1fZnJvbU1vZGUgOiBtX3RvTW9kZSk7Ci0gICAgbV9mcm9tQ3VycmVudFBvaW50LnNl
dFkobV9mcm9tTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gZnJvbVkgOiBtX2Zyb21DdXJy
ZW50UG9pbnQueSgpICsgZnJvbVkpOwotICAgIG1fdG9DdXJyZW50UG9pbnQuc2V0WShtX3RvTW9k
ZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gdG9ZIDogbV90b0N1cnJlbnRQb2ludC55KCkgKyB0
b1kpOworICAgIGF1dG8gW2Zyb20sIHRvXSA9ICpyZXN1bHQ7CisKKyAgICBtX2NvbnN1bWVyLT5s
aW5lVG9WZXJ0aWNhbChibGVuZEFuaW1hdGVkRGltZW5zb25hbEZsb2F0KGZyb20ueSwgdG8ueSwg
QmxlbmRWZXJ0aWNhbCwgcHJvZ3Jlc3MpLCBtX2lzSW5GaXJzdEhhbGZPZkFuaW1hdGlvbiA/IG1f
ZnJvbU1vZGUgOiBtX3RvTW9kZSk7CisgICAgbV9mcm9tQ3VycmVudFBvaW50LnNldFkobV9mcm9t
TW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gZnJvbS55IDogbV9mcm9tQ3VycmVudFBvaW50
LnkoKSArIGZyb20ueSk7CisgICAgbV90b0N1cnJlbnRQb2ludC5zZXRZKG1fdG9Nb2RlID09IEFi
c29sdXRlQ29vcmRpbmF0ZXMgPyB0by55IDogbV90b0N1cnJlbnRQb2ludC55KCkgKyB0by55KTsK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBTVkdQYXRoQmxlbmRlcjo6YmxlbmRDdXJ2ZVRv
Q3ViaWNTZWdtZW50KGZsb2F0IHByb2dyZXNzKQogewotICAgIEZsb2F0UG9pbnQgZnJvbVRhcmdl
dFBvaW50OwotICAgIEZsb2F0UG9pbnQgZnJvbVBvaW50MTsKLSAgICBGbG9hdFBvaW50IGZyb21Q
b2ludDI7Ci0gICAgRmxvYXRQb2ludCB0b1RhcmdldFBvaW50OwotICAgIEZsb2F0UG9pbnQgdG9Q
b2ludDE7Ci0gICAgRmxvYXRQb2ludCB0b1BvaW50MjsKLSAgICBpZiAoKG1fZnJvbVNvdXJjZS5o
YXNNb3JlRGF0YSgpICYmICFtX2Zyb21Tb3VyY2UucGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KGZy
b21Qb2ludDEsIGZyb21Qb2ludDIsIGZyb21UYXJnZXRQb2ludCkpCi0gICAgICAgIHx8ICFtX3Rv
U291cmNlLnBhcnNlQ3VydmVUb0N1YmljU2VnbWVudCh0b1BvaW50MSwgdG9Qb2ludDIsIHRvVGFy
Z2V0UG9pbnQpKQorICAgIGF1dG8gcmVzdWx0ID0gcHVsbEZyb21Tb3VyY2VzKG1fZnJvbVNvdXJj
ZSwgbV90b1NvdXJjZSwgJlNWR1BhdGhTb3VyY2U6OnBhcnNlQ3VydmVUb0N1YmljU2VnbWVudCk7
CisgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmICghbV9j
b25zdW1lcikKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBtX2NvbnN1bWVyLT5jdXJ2ZVRv
Q3ViaWMoYmxlbmRBbmltYXRlZEZsb2F0UG9pbnQoZnJvbVBvaW50MSwgdG9Qb2ludDEsIHByb2dy
ZXNzKSwKLSAgICAgICAgYmxlbmRBbmltYXRlZEZsb2F0UG9pbnQoZnJvbVBvaW50MiwgdG9Qb2lu
dDIsIHByb2dyZXNzKSwKLSAgICAgICAgYmxlbmRBbmltYXRlZEZsb2F0UG9pbnQoZnJvbVRhcmdl
dFBvaW50LCB0b1RhcmdldFBvaW50LCBwcm9ncmVzcyksCisgICAgYXV0byBbZnJvbSwgdG9dID0g
KnJlc3VsdDsKKworICAgIG1fY29uc3VtZXItPmN1cnZlVG9DdWJpYyhibGVuZEFuaW1hdGVkRmxv
YXRQb2ludChmcm9tLnBvaW50MSwgdG8ucG9pbnQxLCBwcm9ncmVzcyksCisgICAgICAgIGJsZW5k
QW5pbWF0ZWRGbG9hdFBvaW50KGZyb20ucG9pbnQyLCB0by5wb2ludDIsIHByb2dyZXNzKSwKKyAg
ICAgICAgYmxlbmRBbmltYXRlZEZsb2F0UG9pbnQoZnJvbS50YXJnZXRQb2ludCwgdG8udGFyZ2V0
UG9pbnQsIHByb2dyZXNzKSwKICAgICAgICAgbV9pc0luRmlyc3RIYWxmT2ZBbmltYXRpb24gPyBt
X2Zyb21Nb2RlIDogbV90b01vZGUpOwotICAgIG1fZnJvbUN1cnJlbnRQb2ludCA9IG1fZnJvbU1v
ZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IGZyb21UYXJnZXRQb2ludCA6IG1fZnJvbUN1cnJl
bnRQb2ludCArIGZyb21UYXJnZXRQb2ludDsKLSAgICBtX3RvQ3VycmVudFBvaW50ID0gbV90b01v
ZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IHRvVGFyZ2V0UG9pbnQgOiBtX3RvQ3VycmVudFBv
aW50ICsgdG9UYXJnZXRQb2ludDsKKyAgICBtX2Zyb21DdXJyZW50UG9pbnQgPSBtX2Zyb21Nb2Rl
ID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyBmcm9tLnRhcmdldFBvaW50IDogbV9mcm9tQ3VycmVu
dFBvaW50ICsgZnJvbS50YXJnZXRQb2ludDsKKyAgICBtX3RvQ3VycmVudFBvaW50ID0gbV90b01v
ZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IHRvLnRhcmdldFBvaW50IDogbV90b0N1cnJlbnRQ
b2ludCArIHRvLnRhcmdldFBvaW50OwogICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIFNWR1Bh
dGhCbGVuZGVyOjpibGVuZEN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQoZmxvYXQgcHJvZ3Jlc3Mp
CiB7Ci0gICAgRmxvYXRQb2ludCBmcm9tVGFyZ2V0UG9pbnQ7Ci0gICAgRmxvYXRQb2ludCBmcm9t
UG9pbnQyOwotICAgIEZsb2F0UG9pbnQgdG9UYXJnZXRQb2ludDsKLSAgICBGbG9hdFBvaW50IHRv
UG9pbnQyOwotICAgIGlmICgobV9mcm9tU291cmNlLmhhc01vcmVEYXRhKCkgJiYgIW1fZnJvbVNv
dXJjZS5wYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQoZnJvbVBvaW50MiwgZnJvbVRhcmdl
dFBvaW50KSkKLSAgICAgICAgfHwgIW1fdG9Tb3VyY2UucGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhT
ZWdtZW50KHRvUG9pbnQyLCB0b1RhcmdldFBvaW50KSkKKyAgICBhdXRvIHJlc3VsdCA9IHB1bGxG
cm9tU291cmNlcyhtX2Zyb21Tb3VyY2UsIG1fdG9Tb3VyY2UsICZTVkdQYXRoU291cmNlOjpwYXJz
ZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQpOworICAgIGlmICghcmVzdWx0KQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoIW1fY29uc3VtZXIpCiAgICAgICAgIHJldHVybiB0cnVl
OwogCi0gICAgbV9jb25zdW1lci0+Y3VydmVUb0N1YmljU21vb3RoKGJsZW5kQW5pbWF0ZWRGbG9h
dFBvaW50KGZyb21Qb2ludDIsIHRvUG9pbnQyLCBwcm9ncmVzcyksCi0gICAgICAgIGJsZW5kQW5p
bWF0ZWRGbG9hdFBvaW50KGZyb21UYXJnZXRQb2ludCwgdG9UYXJnZXRQb2ludCwgcHJvZ3Jlc3Mp
LAorICAgIGF1dG8gW2Zyb20sIHRvXSA9ICpyZXN1bHQ7CisKKyAgICBtX2NvbnN1bWVyLT5jdXJ2
ZVRvQ3ViaWNTbW9vdGgoYmxlbmRBbmltYXRlZEZsb2F0UG9pbnQoZnJvbS5wb2ludDIsIHRvLnBv
aW50MiwgcHJvZ3Jlc3MpLAorICAgICAgICBibGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tLnRh
cmdldFBvaW50LCB0by50YXJnZXRQb2ludCwgcHJvZ3Jlc3MpLAogICAgICAgICBtX2lzSW5GaXJz
dEhhbGZPZkFuaW1hdGlvbiA/IG1fZnJvbU1vZGUgOiBtX3RvTW9kZSk7Ci0gICAgbV9mcm9tQ3Vy
cmVudFBvaW50ID0gbV9mcm9tTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gZnJvbVRhcmdl
dFBvaW50IDogbV9mcm9tQ3VycmVudFBvaW50ICsgZnJvbVRhcmdldFBvaW50OwotICAgIG1fdG9D
dXJyZW50UG9pbnQgPSBtX3RvTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gdG9UYXJnZXRQ
b2ludCA6IG1fdG9DdXJyZW50UG9pbnQgKyB0b1RhcmdldFBvaW50OworICAgIG1fZnJvbUN1cnJl
bnRQb2ludCA9IG1fZnJvbU1vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IGZyb20udGFyZ2V0
UG9pbnQgOiBtX2Zyb21DdXJyZW50UG9pbnQgKyBmcm9tLnRhcmdldFBvaW50OworICAgIG1fdG9D
dXJyZW50UG9pbnQgPSBtX3RvTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gdG8udGFyZ2V0
UG9pbnQgOiBtX3RvQ3VycmVudFBvaW50ICsgdG8udGFyZ2V0UG9pbnQ7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKIGJvb2wgU1ZHUGF0aEJsZW5kZXI6OmJsZW5kQ3VydmVUb1F1YWRyYXRpY1NlZ21l
bnQoZmxvYXQgcHJvZ3Jlc3MpCiB7Ci0gICAgRmxvYXRQb2ludCBmcm9tVGFyZ2V0UG9pbnQ7Ci0g
ICAgRmxvYXRQb2ludCBmcm9tUG9pbnQxOwotICAgIEZsb2F0UG9pbnQgdG9UYXJnZXRQb2ludDsK
LSAgICBGbG9hdFBvaW50IHRvUG9pbnQxOwotICAgIGlmICgobV9mcm9tU291cmNlLmhhc01vcmVE
YXRhKCkgJiYgIW1fZnJvbVNvdXJjZS5wYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KGZyb21Q
b2ludDEsIGZyb21UYXJnZXRQb2ludCkpCi0gICAgICAgIHx8ICFtX3RvU291cmNlLnBhcnNlQ3Vy
dmVUb1F1YWRyYXRpY1NlZ21lbnQodG9Qb2ludDEsIHRvVGFyZ2V0UG9pbnQpKQorICAgIGF1dG8g
cmVzdWx0ID0gcHVsbEZyb21Tb3VyY2VzKG1fZnJvbVNvdXJjZSwgbV90b1NvdXJjZSwgJlNWR1Bh
dGhTb3VyY2U6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQpOworICAgIGlmICghcmVzdWx0
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoIW1fY29uc3VtZXIpCiAgICAgICAg
IHJldHVybiB0cnVlOwogCi0gICAgbV9jb25zdW1lci0+Y3VydmVUb1F1YWRyYXRpYyhibGVuZEFu
aW1hdGVkRmxvYXRQb2ludChmcm9tUG9pbnQxLCB0b1BvaW50MSwgcHJvZ3Jlc3MpLAotICAgICAg
ICBibGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tVGFyZ2V0UG9pbnQsIHRvVGFyZ2V0UG9pbnQs
IHByb2dyZXNzKSwKKyAgICBhdXRvIFtmcm9tLCB0b10gPSAqcmVzdWx0OworCisgICAgbV9jb25z
dW1lci0+Y3VydmVUb1F1YWRyYXRpYyhibGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tLnBvaW50
MSwgdG8ucG9pbnQxLCBwcm9ncmVzcyksCisgICAgICAgIGJsZW5kQW5pbWF0ZWRGbG9hdFBvaW50
KGZyb20udGFyZ2V0UG9pbnQsIHRvLnRhcmdldFBvaW50LCBwcm9ncmVzcyksCiAgICAgICAgIG1f
aXNJbkZpcnN0SGFsZk9mQW5pbWF0aW9uID8gbV9mcm9tTW9kZSA6IG1fdG9Nb2RlKTsKLSAgICBt
X2Zyb21DdXJyZW50UG9pbnQgPSBtX2Zyb21Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyBm
cm9tVGFyZ2V0UG9pbnQgOiBtX2Zyb21DdXJyZW50UG9pbnQgKyBmcm9tVGFyZ2V0UG9pbnQ7Ci0g
ICAgbV90b0N1cnJlbnRQb2ludCA9IG1fdG9Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyB0
b1RhcmdldFBvaW50IDogbV90b0N1cnJlbnRQb2ludCArIHRvVGFyZ2V0UG9pbnQ7CisgICAgbV9m
cm9tQ3VycmVudFBvaW50ID0gbV9mcm9tTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gZnJv
bS50YXJnZXRQb2ludCA6IG1fZnJvbUN1cnJlbnRQb2ludCArIGZyb20udGFyZ2V0UG9pbnQ7Cisg
ICAgbV90b0N1cnJlbnRQb2ludCA9IG1fdG9Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyB0
by50YXJnZXRQb2ludCA6IG1fdG9DdXJyZW50UG9pbnQgKyB0by50YXJnZXRQb2ludDsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBTVkdQYXRoQmxlbmRlcjo6YmxlbmRDdXJ2ZVRvUXVhZHJh
dGljU21vb3RoU2VnbWVudChmbG9hdCBwcm9ncmVzcykKIHsKLSAgICBGbG9hdFBvaW50IGZyb21U
YXJnZXRQb2ludDsKLSAgICBGbG9hdFBvaW50IHRvVGFyZ2V0UG9pbnQ7Ci0gICAgaWYgKChtX2Zy
b21Tb3VyY2UuaGFzTW9yZURhdGEoKSAmJiAhbV9mcm9tU291cmNlLnBhcnNlQ3VydmVUb1F1YWRy
YXRpY1Ntb290aFNlZ21lbnQoZnJvbVRhcmdldFBvaW50KSkKLSAgICAgICAgfHwgIW1fdG9Tb3Vy
Y2UucGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudCh0b1RhcmdldFBvaW50KSkKKyAg
ICBhdXRvIHJlc3VsdCA9IHB1bGxGcm9tU291cmNlcyhtX2Zyb21Tb3VyY2UsIG1fdG9Tb3VyY2Us
ICZTVkdQYXRoU291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KTsKKyAg
ICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKCFtX2NvbnN1
bWVyKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIG1fY29uc3VtZXItPmN1cnZlVG9RdWFk
cmF0aWNTbW9vdGgoYmxlbmRBbmltYXRlZEZsb2F0UG9pbnQoZnJvbVRhcmdldFBvaW50LCB0b1Rh
cmdldFBvaW50LCBwcm9ncmVzcyksIG1faXNJbkZpcnN0SGFsZk9mQW5pbWF0aW9uID8gbV9mcm9t
TW9kZSA6IG1fdG9Nb2RlKTsKLSAgICBtX2Zyb21DdXJyZW50UG9pbnQgPSBtX2Zyb21Nb2RlID09
IEFic29sdXRlQ29vcmRpbmF0ZXMgPyBmcm9tVGFyZ2V0UG9pbnQgOiBtX2Zyb21DdXJyZW50UG9p
bnQgKyBmcm9tVGFyZ2V0UG9pbnQ7Ci0gICAgbV90b0N1cnJlbnRQb2ludCA9IG1fdG9Nb2RlID09
IEFic29sdXRlQ29vcmRpbmF0ZXMgPyB0b1RhcmdldFBvaW50IDogbV90b0N1cnJlbnRQb2ludCAr
IHRvVGFyZ2V0UG9pbnQ7CisgICAgYXV0byBbZnJvbSwgdG9dID0gKnJlc3VsdDsKKworICAgIG1f
Y29uc3VtZXItPmN1cnZlVG9RdWFkcmF0aWNTbW9vdGgoYmxlbmRBbmltYXRlZEZsb2F0UG9pbnQo
ZnJvbS50YXJnZXRQb2ludCwgdG8udGFyZ2V0UG9pbnQsIHByb2dyZXNzKSwgbV9pc0luRmlyc3RI
YWxmT2ZBbmltYXRpb24gPyBtX2Zyb21Nb2RlIDogbV90b01vZGUpOworICAgIG1fZnJvbUN1cnJl
bnRQb2ludCA9IG1fZnJvbU1vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IGZyb20udGFyZ2V0
UG9pbnQgOiBtX2Zyb21DdXJyZW50UG9pbnQgKyBmcm9tLnRhcmdldFBvaW50OworICAgIG1fdG9D
dXJyZW50UG9pbnQgPSBtX3RvTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gdG8udGFyZ2V0
UG9pbnQgOiBtX3RvQ3VycmVudFBvaW50ICsgdG8udGFyZ2V0UG9pbnQ7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKIGJvb2wgU1ZHUGF0aEJsZW5kZXI6OmJsZW5kQXJjVG9TZWdtZW50KGZsb2F0IHBy
b2dyZXNzKQogewotICAgIGZsb2F0IGZyb21SeCA9IDA7Ci0gICAgZmxvYXQgZnJvbVJ5ID0gMDsK
LSAgICBmbG9hdCBmcm9tQW5nbGUgPSAwOwotICAgIGJvb2wgZnJvbUxhcmdlQXJjID0gZmFsc2U7
Ci0gICAgYm9vbCBmcm9tU3dlZXAgPSBmYWxzZTsKLSAgICBGbG9hdFBvaW50IGZyb21UYXJnZXRQ
b2ludDsKLSAgICBmbG9hdCB0b1J4ID0gMDsKLSAgICBmbG9hdCB0b1J5ID0gMDsKLSAgICBmbG9h
dCB0b0FuZ2xlID0gMDsKLSAgICBib29sIHRvTGFyZ2VBcmMgPSBmYWxzZTsKLSAgICBib29sIHRv
U3dlZXAgPSBmYWxzZTsKLSAgICBGbG9hdFBvaW50IHRvVGFyZ2V0UG9pbnQ7Ci0gICAgaWYgKCht
X2Zyb21Tb3VyY2UuaGFzTW9yZURhdGEoKSAmJiAhbV9mcm9tU291cmNlLnBhcnNlQXJjVG9TZWdt
ZW50KGZyb21SeCwgZnJvbVJ5LCBmcm9tQW5nbGUsIGZyb21MYXJnZUFyYywgZnJvbVN3ZWVwLCBm
cm9tVGFyZ2V0UG9pbnQpKQotICAgICAgICB8fCAhbV90b1NvdXJjZS5wYXJzZUFyY1RvU2VnbWVu
dCh0b1J4LCB0b1J5LCB0b0FuZ2xlLCB0b0xhcmdlQXJjLCB0b1N3ZWVwLCB0b1RhcmdldFBvaW50
KSkKKyAgICBhdXRvIHJlc3VsdCA9IHB1bGxGcm9tU291cmNlcyhtX2Zyb21Tb3VyY2UsIG1fdG9T
b3VyY2UsICZTVkdQYXRoU291cmNlOjpwYXJzZUFyY1RvU2VnbWVudCk7CisgICAgaWYgKCFyZXN1
bHQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmICghbV9jb25zdW1lcikKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAKKyAgICBhdXRvIFtmcm9tLCB0b10gPSAqcmVzdWx0OworCiAgICAg
aWYgKG1fYWRkVHlwZXNDb3VudCkgewogICAgICAgICBBU1NFUlQobV9mcm9tTW9kZSA9PSBtX3Rv
TW9kZSk7Ci0gICAgICAgIEZsb2F0UG9pbnQgc2NhbGVkVG9UYXJnZXRQb2ludCA9IHRvVGFyZ2V0
UG9pbnQ7CisgICAgICAgIGF1dG8gc2NhbGVkVG9UYXJnZXRQb2ludCA9IHRvLnRhcmdldFBvaW50
OwogICAgICAgICBzY2FsZWRUb1RhcmdldFBvaW50LnNjYWxlKG1fYWRkVHlwZXNDb3VudCk7Ci0g
ICAgICAgIG1fY29uc3VtZXItPmFyY1RvKGZyb21SeCArIHRvUnggKiBtX2FkZFR5cGVzQ291bnQs
Ci0gICAgICAgICAgICBmcm9tUnkgKyB0b1J5ICogbV9hZGRUeXBlc0NvdW50LAotICAgICAgICAg
ICAgZnJvbUFuZ2xlICsgdG9BbmdsZSAqIG1fYWRkVHlwZXNDb3VudCwKLSAgICAgICAgICAgIGZy
b21MYXJnZUFyYyB8fCB0b0xhcmdlQXJjLAotICAgICAgICAgICAgZnJvbVN3ZWVwIHx8IHRvU3dl
ZXAsCi0gICAgICAgICAgICBmcm9tVGFyZ2V0UG9pbnQgKyBzY2FsZWRUb1RhcmdldFBvaW50LAor
ICAgICAgICBtX2NvbnN1bWVyLT5hcmNUbyhmcm9tLnJ4ICsgdG8ucnggKiBtX2FkZFR5cGVzQ291
bnQsCisgICAgICAgICAgICBmcm9tLnJ4ICsgdG8ucnkgKiBtX2FkZFR5cGVzQ291bnQsCisgICAg
ICAgICAgICBmcm9tLmFuZ2xlICsgdG8uYW5nbGUgKiBtX2FkZFR5cGVzQ291bnQsCisgICAgICAg
ICAgICBmcm9tLmxhcmdlQXJjIHx8IHRvLmxhcmdlQXJjLAorICAgICAgICAgICAgZnJvbS5zd2Vl
cCB8fCB0by5zd2VlcCwKKyAgICAgICAgICAgIGZyb20udGFyZ2V0UG9pbnQgKyBzY2FsZWRUb1Rh
cmdldFBvaW50LAogICAgICAgICAgICAgbV9mcm9tTW9kZSk7CiAgICAgfSBlbHNlIHsKLSAgICAg
ICAgbV9jb25zdW1lci0+YXJjVG8oYmxlbmQoZnJvbVJ4LCB0b1J4LCBwcm9ncmVzcyksCi0gICAg
ICAgICAgICBibGVuZChmcm9tUnksIHRvUnksIHByb2dyZXNzKSwKLSAgICAgICAgICAgIGJsZW5k
KGZyb21BbmdsZSwgdG9BbmdsZSwgcHJvZ3Jlc3MpLAotICAgICAgICAgICAgbV9pc0luRmlyc3RI
YWxmT2ZBbmltYXRpb24gPyBmcm9tTGFyZ2VBcmMgOiB0b0xhcmdlQXJjLAotICAgICAgICAgICAg
bV9pc0luRmlyc3RIYWxmT2ZBbmltYXRpb24gPyBmcm9tU3dlZXAgOiB0b1N3ZWVwLAotICAgICAg
ICAgICAgYmxlbmRBbmltYXRlZEZsb2F0UG9pbnQoZnJvbVRhcmdldFBvaW50LCB0b1RhcmdldFBv
aW50LCBwcm9ncmVzcyksCisgICAgICAgIG1fY29uc3VtZXItPmFyY1RvKGJsZW5kKGZyb20ucngs
IHRvLnJ4LCBwcm9ncmVzcyksCisgICAgICAgICAgICBibGVuZChmcm9tLnJ5LCB0by5yeSwgcHJv
Z3Jlc3MpLAorICAgICAgICAgICAgYmxlbmQoZnJvbS5hbmdsZSwgdG8uYW5nbGUsIHByb2dyZXNz
KSwKKyAgICAgICAgICAgIG1faXNJbkZpcnN0SGFsZk9mQW5pbWF0aW9uID8gZnJvbS5sYXJnZUFy
YyA6IHRvLmxhcmdlQXJjLAorICAgICAgICAgICAgbV9pc0luRmlyc3RIYWxmT2ZBbmltYXRpb24g
PyBmcm9tLnN3ZWVwIDogdG8uc3dlZXAsCisgICAgICAgICAgICBibGVuZEFuaW1hdGVkRmxvYXRQ
b2ludChmcm9tLnRhcmdldFBvaW50LCB0by50YXJnZXRQb2ludCwgcHJvZ3Jlc3MpLAogICAgICAg
ICAgICAgbV9pc0luRmlyc3RIYWxmT2ZBbmltYXRpb24gPyBtX2Zyb21Nb2RlIDogbV90b01vZGUp
OwogICAgIH0KLSAgICBtX2Zyb21DdXJyZW50UG9pbnQgPSBtX2Zyb21Nb2RlID09IEFic29sdXRl
Q29vcmRpbmF0ZXMgPyBmcm9tVGFyZ2V0UG9pbnQgOiBtX2Zyb21DdXJyZW50UG9pbnQgKyBmcm9t
VGFyZ2V0UG9pbnQ7Ci0gICAgbV90b0N1cnJlbnRQb2ludCA9IG1fdG9Nb2RlID09IEFic29sdXRl
Q29vcmRpbmF0ZXMgPyB0b1RhcmdldFBvaW50IDogbV90b0N1cnJlbnRQb2ludCArIHRvVGFyZ2V0
UG9pbnQ7CisgICAgbV9mcm9tQ3VycmVudFBvaW50ID0gbV9mcm9tTW9kZSA9PSBBYnNvbHV0ZUNv
b3JkaW5hdGVzID8gZnJvbS50YXJnZXRQb2ludCA6IG1fZnJvbUN1cnJlbnRQb2ludCArIGZyb20u
dGFyZ2V0UG9pbnQ7CisgICAgbV90b0N1cnJlbnRQb2ludCA9IG1fdG9Nb2RlID09IEFic29sdXRl
Q29vcmRpbmF0ZXMgPyB0by50YXJnZXRQb2ludCA6IG1fdG9DdXJyZW50UG9pbnQgKyB0by50YXJn
ZXRQb2ludDsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMzUwLDIwICszNDcsMjIgQEAgYm9v
bCBTVkdQYXRoQmxlbmRlcjo6Y2FuQmxlbmRQYXRocygpCiAgICAgZmxvYXQgcHJvZ3Jlc3MgPSAw
LjU7CiAgICAgYm9vbCBmcm9tU291cmNlSGFkRGF0YSA9IG1fZnJvbVNvdXJjZS5oYXNNb3JlRGF0
YSgpOwogICAgIHdoaWxlIChtX3RvU291cmNlLmhhc01vcmVEYXRhKCkpIHsKLSAgICAgICAgU1ZH
UGF0aFNlZ1R5cGUgZnJvbUNvbW1hbmQ7Ci0gICAgICAgIFNWR1BhdGhTZWdUeXBlIHRvQ29tbWFu
ZDsKLSAgICAgICAgaWYgKChmcm9tU291cmNlSGFkRGF0YSAmJiAhbV9mcm9tU291cmNlLnBhcnNl
U1ZHU2VnbWVudFR5cGUoZnJvbUNvbW1hbmQpKSB8fCAhbV90b1NvdXJjZS5wYXJzZVNWR1NlZ21l
bnRUeXBlKHRvQ29tbWFuZCkpCisgICAgICAgIGF1dG8gZnJvbUNvbW1hbmQgPSBtX2Zyb21Tb3Vy
Y2UucGFyc2VTVkdTZWdtZW50VHlwZSgpOworICAgICAgICBpZiAoZnJvbVNvdXJjZUhhZERhdGEg
JiYgIWZyb21Db21tYW5kKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBhdXRv
IHRvQ29tbWFuZCA9IG1fdG9Tb3VyY2UucGFyc2VTVkdTZWdtZW50VHlwZSgpOworICAgICAgICBp
ZiAoIXRvQ29tbWFuZCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBtX3Rv
TW9kZSA9IGNvb3JkaW5hdGVNb2RlT2ZDb21tYW5kKHRvQ29tbWFuZCk7Ci0gICAgICAgIG1fZnJv
bU1vZGUgPSBmcm9tU291cmNlSGFkRGF0YSA/IGNvb3JkaW5hdGVNb2RlT2ZDb21tYW5kKGZyb21D
b21tYW5kKSA6IG1fdG9Nb2RlOworICAgICAgICBtX3RvTW9kZSA9IGNvb3JkaW5hdGVNb2RlT2ZD
b21tYW5kKCp0b0NvbW1hbmQpOworICAgICAgICBtX2Zyb21Nb2RlID0gZnJvbVNvdXJjZUhhZERh
dGEgPyBjb29yZGluYXRlTW9kZU9mQ29tbWFuZCgqZnJvbUNvbW1hbmQpIDogbV90b01vZGU7CiAg
ICAgICAgIGlmIChtX2Zyb21Nb2RlICE9IG1fdG9Nb2RlICYmIG1fYWRkVHlwZXNDb3VudCkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBpZiAoZnJvbVNvdXJjZUhhZERhdGEg
JiYgIWlzU2VnbWVudEVxdWFsKGZyb21Db21tYW5kLCB0b0NvbW1hbmQsIG1fZnJvbU1vZGUsIG1f
dG9Nb2RlKSkKKyAgICAgICAgaWYgKGZyb21Tb3VyY2VIYWREYXRhICYmICFpc1NlZ21lbnRFcXVh
bCgqZnJvbUNvbW1hbmQsICp0b0NvbW1hbmQsIG1fZnJvbU1vZGUsIG1fdG9Nb2RlKSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBzd2l0Y2ggKHRvQ29tbWFuZCkgeworICAg
ICAgICBzd2l0Y2ggKCp0b0NvbW1hbmQpIHsKICAgICAgICAgY2FzZSBQYXRoU2VnTW92ZVRvUmVs
OgogICAgICAgICBjYXNlIFBhdGhTZWdNb3ZlVG9BYnM6CiAgICAgICAgICAgICBpZiAoIWJsZW5k
TW92ZVRvU2VnbWVudChwcm9ncmVzcykpCkBAIC00MzIsMjAgKzQzMSwyMiBAQCBib29sIFNWR1Bh
dGhCbGVuZGVyOjpibGVuZEFuaW1hdGVkUGF0aChmCiAKICAgICBib29sIGZyb21Tb3VyY2VIYWRE
YXRhID0gbV9mcm9tU291cmNlLmhhc01vcmVEYXRhKCk7CiAgICAgd2hpbGUgKG1fdG9Tb3VyY2Uu
aGFzTW9yZURhdGEoKSkgewotICAgICAgICBTVkdQYXRoU2VnVHlwZSBmcm9tQ29tbWFuZDsKLSAg
ICAgICAgU1ZHUGF0aFNlZ1R5cGUgdG9Db21tYW5kOwotICAgICAgICBpZiAoKGZyb21Tb3VyY2VI
YWREYXRhICYmICFtX2Zyb21Tb3VyY2UucGFyc2VTVkdTZWdtZW50VHlwZShmcm9tQ29tbWFuZCkp
IHx8ICFtX3RvU291cmNlLnBhcnNlU1ZHU2VnbWVudFR5cGUodG9Db21tYW5kKSkKKyAgICAgICAg
YXV0byBmcm9tQ29tbWFuZCA9IG1fZnJvbVNvdXJjZS5wYXJzZVNWR1NlZ21lbnRUeXBlKCk7Cisg
ICAgICAgIGlmIChmcm9tU291cmNlSGFkRGF0YSAmJiAhZnJvbUNvbW1hbmQpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIGF1dG8gdG9Db21tYW5kID0gbV90b1NvdXJjZS5wYXJz
ZVNWR1NlZ21lbnRUeXBlKCk7CisgICAgICAgIGlmICghdG9Db21tYW5kKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgICAgIG1fdG9Nb2RlID0gY29vcmRpbmF0ZU1vZGVPZkNvbW1h
bmQodG9Db21tYW5kKTsKLSAgICAgICAgbV9mcm9tTW9kZSA9IGZyb21Tb3VyY2VIYWREYXRhID8g
Y29vcmRpbmF0ZU1vZGVPZkNvbW1hbmQoZnJvbUNvbW1hbmQpIDogbV90b01vZGU7CisgICAgICAg
IG1fdG9Nb2RlID0gY29vcmRpbmF0ZU1vZGVPZkNvbW1hbmQoKnRvQ29tbWFuZCk7CisgICAgICAg
IG1fZnJvbU1vZGUgPSBmcm9tU291cmNlSGFkRGF0YSA/IGNvb3JkaW5hdGVNb2RlT2ZDb21tYW5k
KCpmcm9tQ29tbWFuZCkgOiBtX3RvTW9kZTsKICAgICAgICAgaWYgKG1fZnJvbU1vZGUgIT0gbV90
b01vZGUgJiYgbV9hZGRUeXBlc0NvdW50KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgICAgIGlmIChmcm9tU291cmNlSGFkRGF0YSAmJiAhaXNTZWdtZW50RXF1YWwoZnJvbUNvbW1h
bmQsIHRvQ29tbWFuZCwgbV9mcm9tTW9kZSwgbV90b01vZGUpKQorICAgICAgICBpZiAoZnJvbVNv
dXJjZUhhZERhdGEgJiYgIWlzU2VnbWVudEVxdWFsKCpmcm9tQ29tbWFuZCwgKnRvQ29tbWFuZCwg
bV9mcm9tTW9kZSwgbV90b01vZGUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
ICAgIHN3aXRjaCAodG9Db21tYW5kKSB7CisgICAgICAgIHN3aXRjaCAoKnRvQ29tbWFuZCkgewog
ICAgICAgICBjYXNlIFBhdGhTZWdNb3ZlVG9SZWw6CiAgICAgICAgIGNhc2UgUGF0aFNlZ01vdmVU
b0FiczoKICAgICAgICAgICAgIGlmICghYmxlbmRNb3ZlVG9TZWdtZW50KHByb2dyZXNzKSkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3RyZWFtU291cmNlLmNwcAko
cmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3RyZWFt
U291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNzggKzM0LDg2IEBAIGJvb2wgU1ZHUGF0
aEJ5dGVTdHJlYW1Tb3VyY2U6Omhhc01vcmVEYXQKICAgICByZXR1cm4gbV9zdHJlYW1DdXJyZW50
IDwgbV9zdHJlYW1FbmQ7CiB9CiAKLWJvb2wgU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNl
U1ZHU2VnbWVudFR5cGUoU1ZHUGF0aFNlZ1R5cGUmIHBhdGhTZWdUeXBlKQorU1ZHUGF0aFNlZ1R5
cGUgU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6Om5leHRDb21tYW5kKFNWR1BhdGhTZWdUeXBlKQog
ewotICAgIHBhdGhTZWdUeXBlID0gc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ1R5cGU+KHJlYWRTVkdT
ZWdtZW50VHlwZSgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
U1ZHUGF0aFNlZ1R5cGU+KHJlYWRTVkdTZWdtZW50VHlwZSgpKTsKIH0KIAotU1ZHUGF0aFNlZ1R5
cGUgU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6Om5leHRDb21tYW5kKFNWR1BhdGhTZWdUeXBlKQor
T3B0aW9uYWw8U1ZHUGF0aFNlZ1R5cGU+IFNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZVNW
R1NlZ21lbnRUeXBlKCkKIHsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ1R5cGU+
KHJlYWRTVkdTZWdtZW50VHlwZSgpKTsKIH0KIAotYm9vbCBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJj
ZTo6cGFyc2VNb3ZlVG9TZWdtZW50KEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQorT3B0aW9uYWw8
U1ZHUGF0aFNvdXJjZTo6TW92ZVRvU2VnbWVudD4gU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBh
cnNlTW92ZVRvU2VnbWVudCgpCiB7Ci0gICAgdGFyZ2V0UG9pbnQgPSByZWFkRmxvYXRQb2ludCgp
OwotICAgIHJldHVybiB0cnVlOworICAgIE1vdmVUb1NlZ21lbnQgc2VnbWVudDsKKyAgICBzZWdt
ZW50LnRhcmdldFBvaW50ID0gcmVhZEZsb2F0UG9pbnQoKTsKKyAgICByZXR1cm4gc2VnbWVudDsK
IH0KIAotYm9vbCBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VMaW5lVG9TZWdtZW50KEZs
b2F0UG9pbnQmIHRhcmdldFBvaW50KQorT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6TGluZVRvU2Vn
bWVudD4gU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlTGluZVRvU2VnbWVudCgpCiB7Ci0g
ICAgdGFyZ2V0UG9pbnQgPSByZWFkRmxvYXRQb2ludCgpOwotICAgIHJldHVybiB0cnVlOworICAg
IExpbmVUb1NlZ21lbnQgc2VnbWVudDsKKyAgICBzZWdtZW50LnRhcmdldFBvaW50ID0gcmVhZEZs
b2F0UG9pbnQoKTsKKyAgICByZXR1cm4gc2VnbWVudDsKIH0KIAotYm9vbCBTVkdQYXRoQnl0ZVN0
cmVhbVNvdXJjZTo6cGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudChmbG9hdCYgeCkKK09wdGlv
bmFsPFNWR1BhdGhTb3VyY2U6OkxpbmVUb0hvcml6b250YWxTZWdtZW50PiBTVkdQYXRoQnl0ZVN0
cmVhbVNvdXJjZTo6cGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudCgpCiB7Ci0gICAgeCA9IHJl
YWRGbG9hdCgpOwotICAgIHJldHVybiB0cnVlOworICAgIExpbmVUb0hvcml6b250YWxTZWdtZW50
IHNlZ21lbnQ7CisgICAgc2VnbWVudC54ID0gcmVhZEZsb2F0KCk7CisgICAgcmV0dXJuIHNlZ21l
bnQ7CiB9CiAKLWJvb2wgU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlTGluZVRvVmVydGlj
YWxTZWdtZW50KGZsb2F0JiB5KQorT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6TGluZVRvVmVydGlj
YWxTZWdtZW50PiBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VMaW5lVG9WZXJ0aWNhbFNl
Z21lbnQoKQogewotICAgIHkgPSByZWFkRmxvYXQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBM
aW5lVG9WZXJ0aWNhbFNlZ21lbnQgc2VnbWVudDsKKyAgICBzZWdtZW50LnkgPSByZWFkRmxvYXQo
KTsKKyAgICByZXR1cm4gc2VnbWVudDsKIH0KIAotYm9vbCBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJj
ZTo6cGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KEZsb2F0UG9pbnQmIHBvaW50MSwgRmxvYXRQb2lu
dCYgcG9pbnQyLCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCkKK09wdGlvbmFsPFNWR1BhdGhTb3Vy
Y2U6OkN1cnZlVG9DdWJpY1NlZ21lbnQ+IFNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZUN1
cnZlVG9DdWJpY1NlZ21lbnQoKQogewotICAgIHBvaW50MSA9IHJlYWRGbG9hdFBvaW50KCk7Ci0g
ICAgcG9pbnQyID0gcmVhZEZsb2F0UG9pbnQoKTsKLSAgICB0YXJnZXRQb2ludCA9IHJlYWRGbG9h
dFBvaW50KCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgQ3VydmVUb0N1YmljU2VnbWVudCBzZWdt
ZW50OworICAgIHNlZ21lbnQucG9pbnQxID0gcmVhZEZsb2F0UG9pbnQoKTsKKyAgICBzZWdtZW50
LnBvaW50MiA9IHJlYWRGbG9hdFBvaW50KCk7CisgICAgc2VnbWVudC50YXJnZXRQb2ludCA9IHJl
YWRGbG9hdFBvaW50KCk7CisgICAgcmV0dXJuIHNlZ21lbnQ7CiB9CiAKLWJvb2wgU1ZHUGF0aEJ5
dGVTdHJlYW1Tb3VyY2U6OnBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudChGbG9hdFBvaW50
JiBwb2ludDIsIEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQorT3B0aW9uYWw8U1ZHUGF0aFNvdXJj
ZTo6Q3VydmVUb0N1YmljU21vb3RoU2VnbWVudD4gU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBh
cnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudCgpCiB7Ci0gICAgcG9pbnQyID0gcmVhZEZsb2F0
UG9pbnQoKTsKLSAgICB0YXJnZXRQb2ludCA9IHJlYWRGbG9hdFBvaW50KCk7Ci0gICAgcmV0dXJu
IHRydWU7CisgICAgQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudCBzZWdtZW50OworICAgIHNlZ21l
bnQucG9pbnQyID0gcmVhZEZsb2F0UG9pbnQoKTsKKyAgICBzZWdtZW50LnRhcmdldFBvaW50ID0g
cmVhZEZsb2F0UG9pbnQoKTsKKyAgICByZXR1cm4gc2VnbWVudDsKIH0KIAotYm9vbCBTVkdQYXRo
Qnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudChGbG9hdFBvaW50
JiBwb2ludDEsIEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQorT3B0aW9uYWw8U1ZHUGF0aFNvdXJj
ZTo6Q3VydmVUb1F1YWRyYXRpY1NlZ21lbnQ+IFNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJz
ZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KCkKIHsKLSAgICBwb2ludDEgPSByZWFkRmxvYXRQb2lu
dCgpOwotICAgIHRhcmdldFBvaW50ID0gcmVhZEZsb2F0UG9pbnQoKTsKLSAgICByZXR1cm4gdHJ1
ZTsKKyAgICBDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCBzZWdtZW50OworICAgIHNlZ21lbnQucG9p
bnQxID0gcmVhZEZsb2F0UG9pbnQoKTsKKyAgICBzZWdtZW50LnRhcmdldFBvaW50ID0gcmVhZEZs
b2F0UG9pbnQoKTsKKyAgICByZXR1cm4gc2VnbWVudDsKIH0KIAotYm9vbCBTVkdQYXRoQnl0ZVN0
cmVhbVNvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudChGbG9hdFBvaW50
JiB0YXJnZXRQb2ludCkKK09wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkN1cnZlVG9RdWFkcmF0aWNT
bW9vdGhTZWdtZW50PiBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVhZHJh
dGljU21vb3RoU2VnbWVudCgpCiB7Ci0gICAgdGFyZ2V0UG9pbnQgPSByZWFkRmxvYXRQb2ludCgp
OwotICAgIHJldHVybiB0cnVlOworICAgIEN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50IHNl
Z21lbnQ7CisgICAgc2VnbWVudC50YXJnZXRQb2ludCA9IHJlYWRGbG9hdFBvaW50KCk7CisgICAg
cmV0dXJuIHNlZ21lbnQ7CiB9CiAKLWJvb2wgU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNl
QXJjVG9TZWdtZW50KGZsb2F0JiByeCwgZmxvYXQmIHJ5LCBmbG9hdCYgYW5nbGUsIGJvb2wmIGxh
cmdlQXJjLCBib29sJiBzd2VlcCwgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCitPcHRpb25hbDxT
VkdQYXRoU291cmNlOjpBcmNUb1NlZ21lbnQ+IFNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJz
ZUFyY1RvU2VnbWVudCgpCiB7Ci0gICAgcnggPSByZWFkRmxvYXQoKTsKLSAgICByeSA9IHJlYWRG
bG9hdCgpOwotICAgIGFuZ2xlID0gcmVhZEZsb2F0KCk7Ci0gICAgbGFyZ2VBcmMgPSByZWFkRmxh
ZygpOwotICAgIHN3ZWVwID0gcmVhZEZsYWcoKTsKLSAgICB0YXJnZXRQb2ludCA9IHJlYWRGbG9h
dFBvaW50KCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgQXJjVG9TZWdtZW50IHNlZ21lbnQ7Cisg
ICAgc2VnbWVudC5yeCA9IHJlYWRGbG9hdCgpOworICAgIHNlZ21lbnQucnkgPSByZWFkRmxvYXQo
KTsKKyAgICBzZWdtZW50LmFuZ2xlID0gcmVhZEZsb2F0KCk7CisgICAgc2VnbWVudC5sYXJnZUFy
YyA9IHJlYWRGbGFnKCk7CisgICAgc2VnbWVudC5zd2VlcCA9IHJlYWRGbGFnKCk7CisgICAgc2Vn
bWVudC50YXJnZXRQb2ludCA9IHJlYWRGbG9hdFBvaW50KCk7CisgICAgcmV0dXJuIHNlZ21lbnQ7
CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbVNvdXJj
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbVNv
dXJjZS5oCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEJ5
dGVTdHJlYW1Tb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTggKzMyLDE4IEBAIHB1Ymxp
YzoKIHByaXZhdGU6CiAgICAgYm9vbCBoYXNNb3JlRGF0YSgpIGNvbnN0IGZpbmFsOwogICAgIGJv
b2wgbW92ZVRvTmV4dFRva2VuKCkgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQotICAgIGJvb2wgcGFy
c2VTVkdTZWdtZW50VHlwZShTVkdQYXRoU2VnVHlwZSYpIGZpbmFsOwogICAgIFNWR1BhdGhTZWdU
eXBlIG5leHRDb21tYW5kKFNWR1BhdGhTZWdUeXBlKSBmaW5hbDsKIAotICAgIGJvb2wgcGFyc2VN
b3ZlVG9TZWdtZW50KEZsb2F0UG9pbnQmKSBmaW5hbDsKLSAgICBib29sIHBhcnNlTGluZVRvU2Vn
bWVudChGbG9hdFBvaW50JikgZmluYWw7Ci0gICAgYm9vbCBwYXJzZUxpbmVUb0hvcml6b250YWxT
ZWdtZW50KGZsb2F0JikgZmluYWw7Ci0gICAgYm9vbCBwYXJzZUxpbmVUb1ZlcnRpY2FsU2VnbWVu
dChmbG9hdCYpIGZpbmFsOwotICAgIGJvb2wgcGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KEZsb2F0
UG9pbnQmLCBGbG9hdFBvaW50JiwgRmxvYXRQb2ludCYpIGZpbmFsOwotICAgIGJvb2wgcGFyc2VD
dXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KEZsb2F0UG9pbnQmLCBGbG9hdFBvaW50JikgZmluYWw7
Ci0gICAgYm9vbCBwYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KEZsb2F0UG9pbnQmLCBGbG9h
dFBvaW50JikgZmluYWw7Ci0gICAgYm9vbCBwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdt
ZW50KEZsb2F0UG9pbnQmKSBmaW5hbDsKLSAgICBib29sIHBhcnNlQXJjVG9TZWdtZW50KGZsb2F0
JiwgZmxvYXQmLCBmbG9hdCYsIGJvb2wmLCBib29sJiwgRmxvYXRQb2ludCYpIGZpbmFsOworICAg
IE9wdGlvbmFsPFNWR1BhdGhTZWdUeXBlPiBwYXJzZVNWR1NlZ21lbnRUeXBlKCkgZmluYWw7Cisg
ICAgT3B0aW9uYWw8TW92ZVRvU2VnbWVudD4gcGFyc2VNb3ZlVG9TZWdtZW50KCkgZmluYWw7Cisg
ICAgT3B0aW9uYWw8TGluZVRvU2VnbWVudD4gcGFyc2VMaW5lVG9TZWdtZW50KCkgZmluYWw7Cisg
ICAgT3B0aW9uYWw8TGluZVRvSG9yaXpvbnRhbFNlZ21lbnQ+IHBhcnNlTGluZVRvSG9yaXpvbnRh
bFNlZ21lbnQoKSBmaW5hbDsKKyAgICBPcHRpb25hbDxMaW5lVG9WZXJ0aWNhbFNlZ21lbnQ+IHBh
cnNlTGluZVRvVmVydGljYWxTZWdtZW50KCkgZmluYWw7CisgICAgT3B0aW9uYWw8Q3VydmVUb0N1
YmljU2VnbWVudD4gcGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KCkgZmluYWw7CisgICAgT3B0aW9u
YWw8Q3VydmVUb0N1YmljU21vb3RoU2VnbWVudD4gcGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdt
ZW50KCkgZmluYWw7CisgICAgT3B0aW9uYWw8Q3VydmVUb1F1YWRyYXRpY1NlZ21lbnQ+IHBhcnNl
Q3VydmVUb1F1YWRyYXRpY1NlZ21lbnQoKSBmaW5hbDsKKyAgICBPcHRpb25hbDxDdXJ2ZVRvUXVh
ZHJhdGljU21vb3RoU2VnbWVudD4gcGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudCgp
IGZpbmFsOworICAgIE9wdGlvbmFsPEFyY1RvU2VnbWVudD4gcGFyc2VBcmNUb1NlZ21lbnQoKSBm
aW5hbDsKIAogI2lmIENPTVBJTEVSKE1TVkMpCiAjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDcw
MSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoUGFyc2VyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFBhcnNlci5jcHAJKHJldmlzaW9uIDI2MzE3
NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoUGFyc2VyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzMsMTAyICs3Myw5OSBAQCB2b2lkIFNWR1BhdGhQYXJzZXI6OnBhcnNlQ2xvc2VQYXRo
U2VnbWVuCiAKIGJvb2wgU1ZHUGF0aFBhcnNlcjo6cGFyc2VNb3ZlVG9TZWdtZW50KCkKIHsKLSAg
ICBGbG9hdFBvaW50IHRhcmdldFBvaW50OwotICAgIGlmICghbV9zb3VyY2UucGFyc2VNb3ZlVG9T
ZWdtZW50KHRhcmdldFBvaW50KSkKKyAgICBhdXRvIHJlc3VsdCA9IG1fc291cmNlLnBhcnNlTW92
ZVRvU2VnbWVudCgpOworICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICBpZiAobV9wYXRoUGFyc2luZ01vZGUgPT0gTm9ybWFsaXplZFBhcnNpbmcpIHsKICAgICAg
ICAgaWYgKG1fbW9kZSA9PSBSZWxhdGl2ZUNvb3JkaW5hdGVzKQotICAgICAgICAgICAgbV9jdXJy
ZW50UG9pbnQgKz0gdGFyZ2V0UG9pbnQ7CisgICAgICAgICAgICBtX2N1cnJlbnRQb2ludCArPSBy
ZXN1bHQtPnRhcmdldFBvaW50OwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2N1cnJlbnRQ
b2ludCA9IHRhcmdldFBvaW50OworICAgICAgICAgICAgbV9jdXJyZW50UG9pbnQgPSByZXN1bHQt
PnRhcmdldFBvaW50OwogICAgICAgICBtX3N1YlBhdGhQb2ludCA9IG1fY3VycmVudFBvaW50Owog
ICAgICAgICBtX2NvbnN1bWVyLm1vdmVUbyhtX2N1cnJlbnRQb2ludCwgbV9jbG9zZVBhdGgsIEFi
c29sdXRlQ29vcmRpbmF0ZXMpOwogICAgIH0gZWxzZQotICAgICAgICBtX2NvbnN1bWVyLm1vdmVU
byh0YXJnZXRQb2ludCwgbV9jbG9zZVBhdGgsIG1fbW9kZSk7CisgICAgICAgIG1fY29uc3VtZXIu
bW92ZVRvKHJlc3VsdC0+dGFyZ2V0UG9pbnQsIG1fY2xvc2VQYXRoLCBtX21vZGUpOwogICAgIG1f
Y2xvc2VQYXRoID0gZmFsc2U7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgU1ZHUGF0aFBh
cnNlcjo6cGFyc2VMaW5lVG9TZWdtZW50KCkKIHsKLSAgICBGbG9hdFBvaW50IHRhcmdldFBvaW50
OwotICAgIGlmICghbV9zb3VyY2UucGFyc2VMaW5lVG9TZWdtZW50KHRhcmdldFBvaW50KSkKKyAg
ICBhdXRvIHJlc3VsdCA9IG1fc291cmNlLnBhcnNlTGluZVRvU2VnbWVudCgpOworICAgIGlmICgh
cmVzdWx0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAobV9wYXRoUGFyc2luZ01v
ZGUgPT0gTm9ybWFsaXplZFBhcnNpbmcpIHsKICAgICAgICAgaWYgKG1fbW9kZSA9PSBSZWxhdGl2
ZUNvb3JkaW5hdGVzKQotICAgICAgICAgICAgbV9jdXJyZW50UG9pbnQgKz0gdGFyZ2V0UG9pbnQ7
CisgICAgICAgICAgICBtX2N1cnJlbnRQb2ludCArPSByZXN1bHQtPnRhcmdldFBvaW50OwogICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBtX2N1cnJlbnRQb2ludCA9IHRhcmdldFBvaW50OworICAg
ICAgICAgICAgbV9jdXJyZW50UG9pbnQgPSByZXN1bHQtPnRhcmdldFBvaW50OwogICAgICAgICBt
X2NvbnN1bWVyLmxpbmVUbyhtX2N1cnJlbnRQb2ludCwgQWJzb2x1dGVDb29yZGluYXRlcyk7CiAg
ICAgfSBlbHNlCi0gICAgICAgIG1fY29uc3VtZXIubGluZVRvKHRhcmdldFBvaW50LCBtX21vZGUp
OworICAgICAgICBtX2NvbnN1bWVyLmxpbmVUbyhyZXN1bHQtPnRhcmdldFBvaW50LCBtX21vZGUp
OwogICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIFNWR1BhdGhQYXJzZXI6OnBhcnNlTGluZVRv
SG9yaXpvbnRhbFNlZ21lbnQoKQogewotICAgIGZsb2F0IHRvWDsKLSAgICBpZiAoIW1fc291cmNl
LnBhcnNlTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQodG9YKSkKKyAgICBhdXRvIHJlc3VsdCA9IG1f
c291cmNlLnBhcnNlTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQoKTsKKyAgICBpZiAoIXJlc3VsdCkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKG1fcGF0aFBhcnNpbmdNb2RlID09IE5v
cm1hbGl6ZWRQYXJzaW5nKSB7CiAgICAgICAgIGlmIChtX21vZGUgPT0gUmVsYXRpdmVDb29yZGlu
YXRlcykKLSAgICAgICAgICAgIG1fY3VycmVudFBvaW50Lm1vdmUodG9YLCAwKTsKKyAgICAgICAg
ICAgIG1fY3VycmVudFBvaW50Lm1vdmUocmVzdWx0LT54LCAwKTsKICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgbV9jdXJyZW50UG9pbnQuc2V0WCh0b1gpOworICAgICAgICAgICAgbV9jdXJyZW50
UG9pbnQuc2V0WChyZXN1bHQtPngpOwogICAgICAgICBtX2NvbnN1bWVyLmxpbmVUbyhtX2N1cnJl
bnRQb2ludCwgQWJzb2x1dGVDb29yZGluYXRlcyk7CiAgICAgfSBlbHNlCi0gICAgICAgIG1fY29u
c3VtZXIubGluZVRvSG9yaXpvbnRhbCh0b1gsIG1fbW9kZSk7CisgICAgICAgIG1fY29uc3VtZXIu
bGluZVRvSG9yaXpvbnRhbChyZXN1bHQtPngsIG1fbW9kZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKIGJvb2wgU1ZHUGF0aFBhcnNlcjo6cGFyc2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnQoKQogewot
ICAgIGZsb2F0IHRvWTsKLSAgICBpZiAoIW1fc291cmNlLnBhcnNlTGluZVRvVmVydGljYWxTZWdt
ZW50KHRvWSkpCisgICAgYXV0byByZXN1bHQgPSBtX3NvdXJjZS5wYXJzZUxpbmVUb1ZlcnRpY2Fs
U2VnbWVudCgpOworICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICBpZiAobV9wYXRoUGFyc2luZ01vZGUgPT0gTm9ybWFsaXplZFBhcnNpbmcpIHsKICAgICAgICAg
aWYgKG1fbW9kZSA9PSBSZWxhdGl2ZUNvb3JkaW5hdGVzKQotICAgICAgICAgICAgbV9jdXJyZW50
UG9pbnQubW92ZSgwLCB0b1kpOworICAgICAgICAgICAgbV9jdXJyZW50UG9pbnQubW92ZSgwLCBy
ZXN1bHQtPnkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2N1cnJlbnRQb2ludC5zZXRZ
KHRvWSk7CisgICAgICAgICAgICBtX2N1cnJlbnRQb2ludC5zZXRZKHJlc3VsdC0+eSk7CiAgICAg
ICAgIG1fY29uc3VtZXIubGluZVRvKG1fY3VycmVudFBvaW50LCBBYnNvbHV0ZUNvb3JkaW5hdGVz
KTsKICAgICB9IGVsc2UKLSAgICAgICAgbV9jb25zdW1lci5saW5lVG9WZXJ0aWNhbCh0b1ksIG1f
bW9kZSk7CisgICAgICAgIG1fY29uc3VtZXIubGluZVRvVmVydGljYWwocmVzdWx0LT55LCBtX21v
ZGUpOwogICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIFNWR1BhdGhQYXJzZXI6OnBhcnNlQ3Vy
dmVUb0N1YmljU2VnbWVudCgpCiB7Ci0gICAgRmxvYXRQb2ludCBwb2ludDE7Ci0gICAgRmxvYXRQ
b2ludCBwb2ludDI7Ci0gICAgRmxvYXRQb2ludCB0YXJnZXRQb2ludDsKLSAgICBpZiAoIW1fc291
cmNlLnBhcnNlQ3VydmVUb0N1YmljU2VnbWVudChwb2ludDEsIHBvaW50MiwgdGFyZ2V0UG9pbnQp
KQorICAgIGF1dG8gcmVzdWx0ID0gbV9zb3VyY2UucGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KCk7
CisgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChtX3Bh
dGhQYXJzaW5nTW9kZSA9PSBOb3JtYWxpemVkUGFyc2luZykgewogICAgICAgICBpZiAobV9tb2Rl
ID09IFJlbGF0aXZlQ29vcmRpbmF0ZXMpIHsKLSAgICAgICAgICAgIHBvaW50MSArPSBtX2N1cnJl
bnRQb2ludDsKLSAgICAgICAgICAgIHBvaW50MiArPSBtX2N1cnJlbnRQb2ludDsKLSAgICAgICAg
ICAgIHRhcmdldFBvaW50ICs9IG1fY3VycmVudFBvaW50OworICAgICAgICAgICAgcmVzdWx0LT5w
b2ludDEgKz0gbV9jdXJyZW50UG9pbnQ7CisgICAgICAgICAgICByZXN1bHQtPnBvaW50MiArPSBt
X2N1cnJlbnRQb2ludDsKKyAgICAgICAgICAgIHJlc3VsdC0+dGFyZ2V0UG9pbnQgKz0gbV9jdXJy
ZW50UG9pbnQ7CiAgICAgICAgIH0KLSAgICAgICAgbV9jb25zdW1lci5jdXJ2ZVRvQ3ViaWMocG9p
bnQxLCBwb2ludDIsIHRhcmdldFBvaW50LCBBYnNvbHV0ZUNvb3JkaW5hdGVzKTsKKyAgICAgICAg
bV9jb25zdW1lci5jdXJ2ZVRvQ3ViaWMocmVzdWx0LT5wb2ludDEsIHJlc3VsdC0+cG9pbnQyLCBy
ZXN1bHQtPnRhcmdldFBvaW50LCBBYnNvbHV0ZUNvb3JkaW5hdGVzKTsKIAotICAgICAgICBtX2Nv
bnRyb2xQb2ludCA9IHBvaW50MjsKLSAgICAgICAgbV9jdXJyZW50UG9pbnQgPSB0YXJnZXRQb2lu
dDsKKyAgICAgICAgbV9jb250cm9sUG9pbnQgPSByZXN1bHQtPnBvaW50MjsKKyAgICAgICAgbV9j
dXJyZW50UG9pbnQgPSByZXN1bHQtPnRhcmdldFBvaW50OwogICAgIH0gZWxzZQotICAgICAgICBt
X2NvbnN1bWVyLmN1cnZlVG9DdWJpYyhwb2ludDEsIHBvaW50MiwgdGFyZ2V0UG9pbnQsIG1fbW9k
ZSk7CisgICAgICAgIG1fY29uc3VtZXIuY3VydmVUb0N1YmljKHJlc3VsdC0+cG9pbnQxLCByZXN1
bHQtPnBvaW50MiwgcmVzdWx0LT50YXJnZXRQb2ludCwgbV9tb2RlKTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAogYm9vbCBTVkdQYXRoUGFyc2VyOjpwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21l
bnQoKQogewotICAgIEZsb2F0UG9pbnQgcG9pbnQyOwotICAgIEZsb2F0UG9pbnQgdGFyZ2V0UG9p
bnQ7Ci0gICAgaWYgKCFtX3NvdXJjZS5wYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQocG9p
bnQyLCB0YXJnZXRQb2ludCkpCisgICAgYXV0byByZXN1bHQgPSBtX3NvdXJjZS5wYXJzZUN1cnZl
VG9DdWJpY1Ntb290aFNlZ21lbnQoKTsKKyAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgaWYgKG1fbGFzdENvbW1hbmQgIT0gUGF0aFNlZ0N1cnZlVG9DdWJpY0Fi
cwpAQCAtMTgyLDUzICsxNzksNTMgQEAgYm9vbCBTVkdQYXRoUGFyc2VyOjpwYXJzZUN1cnZlVG9D
dWJpY1NtbwogICAgICAgICBwb2ludDEuc2NhbGUoMik7CiAgICAgICAgIHBvaW50MS5tb3ZlKC1t
X2NvbnRyb2xQb2ludC54KCksIC1tX2NvbnRyb2xQb2ludC55KCkpOwogICAgICAgICBpZiAobV9t
b2RlID09IFJlbGF0aXZlQ29vcmRpbmF0ZXMpIHsKLSAgICAgICAgICAgIHBvaW50MiArPSBtX2N1
cnJlbnRQb2ludDsKLSAgICAgICAgICAgIHRhcmdldFBvaW50ICs9IG1fY3VycmVudFBvaW50Owor
ICAgICAgICAgICAgcmVzdWx0LT5wb2ludDIgKz0gbV9jdXJyZW50UG9pbnQ7CisgICAgICAgICAg
ICByZXN1bHQtPnRhcmdldFBvaW50ICs9IG1fY3VycmVudFBvaW50OwogICAgICAgICB9CiAKLSAg
ICAgICAgbV9jb25zdW1lci5jdXJ2ZVRvQ3ViaWMocG9pbnQxLCBwb2ludDIsIHRhcmdldFBvaW50
LCBBYnNvbHV0ZUNvb3JkaW5hdGVzKTsKKyAgICAgICAgbV9jb25zdW1lci5jdXJ2ZVRvQ3ViaWMo
cG9pbnQxLCByZXN1bHQtPnBvaW50MiwgcmVzdWx0LT50YXJnZXRQb2ludCwgQWJzb2x1dGVDb29y
ZGluYXRlcyk7CiAKLSAgICAgICAgbV9jb250cm9sUG9pbnQgPSBwb2ludDI7Ci0gICAgICAgIG1f
Y3VycmVudFBvaW50ID0gdGFyZ2V0UG9pbnQ7CisgICAgICAgIG1fY29udHJvbFBvaW50ID0gcmVz
dWx0LT5wb2ludDI7CisgICAgICAgIG1fY3VycmVudFBvaW50ID0gcmVzdWx0LT50YXJnZXRQb2lu
dDsKICAgICB9IGVsc2UKLSAgICAgICAgbV9jb25zdW1lci5jdXJ2ZVRvQ3ViaWNTbW9vdGgocG9p
bnQyLCB0YXJnZXRQb2ludCwgbV9tb2RlKTsKKyAgICAgICAgbV9jb25zdW1lci5jdXJ2ZVRvQ3Vi
aWNTbW9vdGgocmVzdWx0LT5wb2ludDIsIHJlc3VsdC0+dGFyZ2V0UG9pbnQsIG1fbW9kZSk7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgU1ZHUGF0aFBhcnNlcjo6cGFyc2VDdXJ2ZVRvUXVh
ZHJhdGljU2VnbWVudCgpCiB7Ci0gICAgRmxvYXRQb2ludCBwb2ludDE7Ci0gICAgRmxvYXRQb2lu
dCB0YXJnZXRQb2ludDsKLSAgICBpZiAoIW1fc291cmNlLnBhcnNlQ3VydmVUb1F1YWRyYXRpY1Nl
Z21lbnQocG9pbnQxLCB0YXJnZXRQb2ludCkpCisgICAgYXV0byByZXN1bHQgPSBtX3NvdXJjZS5w
YXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KCk7CisgICAgaWYgKCFyZXN1bHQpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIGlmIChtX3BhdGhQYXJzaW5nTW9kZSA9PSBOb3JtYWxpemVk
UGFyc2luZykgewotICAgICAgICBtX2NvbnRyb2xQb2ludCA9IHBvaW50MTsKKyAgICAgICAgbV9j
b250cm9sUG9pbnQgPSByZXN1bHQtPnBvaW50MTsKKwogICAgICAgICBGbG9hdFBvaW50IHBvaW50
MSA9IG1fY3VycmVudFBvaW50OwogICAgICAgICBwb2ludDEubW92ZSgyICogbV9jb250cm9sUG9p
bnQueCgpLCAyICogbV9jb250cm9sUG9pbnQueSgpKTsKLSAgICAgICAgRmxvYXRQb2ludCBwb2lu
dDIodGFyZ2V0UG9pbnQueCgpICsgMiAqIG1fY29udHJvbFBvaW50LngoKSwgdGFyZ2V0UG9pbnQu
eSgpICsgMiAqIG1fY29udHJvbFBvaW50LnkoKSk7CisgICAgICAgIEZsb2F0UG9pbnQgcG9pbnQy
KHJlc3VsdC0+dGFyZ2V0UG9pbnQueCgpICsgMiAqIG1fY29udHJvbFBvaW50LngoKSwgcmVzdWx0
LT50YXJnZXRQb2ludC55KCkgKyAyICogbV9jb250cm9sUG9pbnQueSgpKTsKICAgICAgICAgaWYg
KG1fbW9kZSA9PSBSZWxhdGl2ZUNvb3JkaW5hdGVzKSB7CiAgICAgICAgICAgICBwb2ludDEubW92
ZSgyICogbV9jdXJyZW50UG9pbnQueCgpLCAyICogbV9jdXJyZW50UG9pbnQueSgpKTsKICAgICAg
ICAgICAgIHBvaW50Mi5tb3ZlKDMgKiBtX2N1cnJlbnRQb2ludC54KCksIDMgKiBtX2N1cnJlbnRQ
b2ludC55KCkpOwotICAgICAgICAgICAgdGFyZ2V0UG9pbnQgKz0gbV9jdXJyZW50UG9pbnQ7Cisg
ICAgICAgICAgICByZXN1bHQtPnRhcmdldFBvaW50ICs9IG1fY3VycmVudFBvaW50OwogICAgICAg
ICB9CiAgICAgICAgIHBvaW50MS5zY2FsZShnT25lT3ZlclRocmVlKTsKICAgICAgICAgcG9pbnQy
LnNjYWxlKGdPbmVPdmVyVGhyZWUpOwogCi0gICAgICAgIG1fY29uc3VtZXIuY3VydmVUb0N1Ymlj
KHBvaW50MSwgcG9pbnQyLCB0YXJnZXRQb2ludCwgQWJzb2x1dGVDb29yZGluYXRlcyk7CisgICAg
ICAgIG1fY29uc3VtZXIuY3VydmVUb0N1YmljKHBvaW50MSwgcG9pbnQyLCByZXN1bHQtPnRhcmdl
dFBvaW50LCBBYnNvbHV0ZUNvb3JkaW5hdGVzKTsKIAogICAgICAgICBpZiAobV9tb2RlID09IFJl
bGF0aXZlQ29vcmRpbmF0ZXMpCiAgICAgICAgICAgICBtX2NvbnRyb2xQb2ludCArPSBtX2N1cnJl
bnRQb2ludDsKLSAgICAgICAgbV9jdXJyZW50UG9pbnQgPSB0YXJnZXRQb2ludDsKKyAgICAgICAg
bV9jdXJyZW50UG9pbnQgPSByZXN1bHQtPnRhcmdldFBvaW50OwogICAgIH0gZWxzZQotICAgICAg
ICBtX2NvbnN1bWVyLmN1cnZlVG9RdWFkcmF0aWMocG9pbnQxLCB0YXJnZXRQb2ludCwgbV9tb2Rl
KTsKKyAgICAgICAgbV9jb25zdW1lci5jdXJ2ZVRvUXVhZHJhdGljKHJlc3VsdC0+cG9pbnQxLCBy
ZXN1bHQtPnRhcmdldFBvaW50LCBtX21vZGUpOwogICAgIHJldHVybiB0cnVlOwogfQogCiBib29s
IFNWR1BhdGhQYXJzZXI6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQoKQogewot
ICAgIEZsb2F0UG9pbnQgdGFyZ2V0UG9pbnQ7Ci0gICAgaWYgKCFtX3NvdXJjZS5wYXJzZUN1cnZl
VG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KHRhcmdldFBvaW50KSkKKyAgICBhdXRvIHJlc3VsdCA9
IG1fc291cmNlLnBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQoKTsKKyAgICBpZiAo
IXJlc3VsdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKG1fbGFzdENvbW1hbmQg
IT0gUGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNBYnMKQEAgLTI0Miw2NyArMjM5LDYyIEBAIGJvb2wg
U1ZHUGF0aFBhcnNlcjo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGkKICAgICAgICAgY3ViaWNQb2ludC5z
Y2FsZSgyKTsKICAgICAgICAgY3ViaWNQb2ludC5tb3ZlKC1tX2NvbnRyb2xQb2ludC54KCksIC1t
X2NvbnRyb2xQb2ludC55KCkpOwogICAgICAgICBGbG9hdFBvaW50IHBvaW50MShtX2N1cnJlbnRQ
b2ludC54KCkgKyAyICogY3ViaWNQb2ludC54KCksIG1fY3VycmVudFBvaW50LnkoKSArIDIgKiBj
dWJpY1BvaW50LnkoKSk7Ci0gICAgICAgIEZsb2F0UG9pbnQgcG9pbnQyKHRhcmdldFBvaW50Lngo
KSArIDIgKiBjdWJpY1BvaW50LngoKSwgdGFyZ2V0UG9pbnQueSgpICsgMiAqIGN1YmljUG9pbnQu
eSgpKTsKKyAgICAgICAgRmxvYXRQb2ludCBwb2ludDIocmVzdWx0LT50YXJnZXRQb2ludC54KCkg
KyAyICogY3ViaWNQb2ludC54KCksIHJlc3VsdC0+dGFyZ2V0UG9pbnQueSgpICsgMiAqIGN1Ymlj
UG9pbnQueSgpKTsKICAgICAgICAgaWYgKG1fbW9kZSA9PSBSZWxhdGl2ZUNvb3JkaW5hdGVzKSB7
CiAgICAgICAgICAgICBwb2ludDIgKz0gbV9jdXJyZW50UG9pbnQ7Ci0gICAgICAgICAgICB0YXJn
ZXRQb2ludCArPSBtX2N1cnJlbnRQb2ludDsKKyAgICAgICAgICAgIHJlc3VsdC0+dGFyZ2V0UG9p
bnQgKz0gbV9jdXJyZW50UG9pbnQ7CiAgICAgICAgIH0KICAgICAgICAgcG9pbnQxLnNjYWxlKGdP
bmVPdmVyVGhyZWUpOwogICAgICAgICBwb2ludDIuc2NhbGUoZ09uZU92ZXJUaHJlZSk7CiAKLSAg
ICAgICAgbV9jb25zdW1lci5jdXJ2ZVRvQ3ViaWMocG9pbnQxLCBwb2ludDIsIHRhcmdldFBvaW50
LCBBYnNvbHV0ZUNvb3JkaW5hdGVzKTsKKyAgICAgICAgbV9jb25zdW1lci5jdXJ2ZVRvQ3ViaWMo
cG9pbnQxLCBwb2ludDIsIHJlc3VsdC0+dGFyZ2V0UG9pbnQsIEFic29sdXRlQ29vcmRpbmF0ZXMp
OwogCiAgICAgICAgIG1fY29udHJvbFBvaW50ID0gY3ViaWNQb2ludDsKLSAgICAgICAgbV9jdXJy
ZW50UG9pbnQgPSB0YXJnZXRQb2ludDsKKyAgICAgICAgbV9jdXJyZW50UG9pbnQgPSByZXN1bHQt
PnRhcmdldFBvaW50OwogICAgIH0gZWxzZQotICAgICAgICBtX2NvbnN1bWVyLmN1cnZlVG9RdWFk
cmF0aWNTbW9vdGgodGFyZ2V0UG9pbnQsIG1fbW9kZSk7CisgICAgICAgIG1fY29uc3VtZXIuY3Vy
dmVUb1F1YWRyYXRpY1Ntb290aChyZXN1bHQtPnRhcmdldFBvaW50LCBtX21vZGUpOwogICAgIHJl
dHVybiB0cnVlOwogfQogCiBib29sIFNWR1BhdGhQYXJzZXI6OnBhcnNlQXJjVG9TZWdtZW50KCkK
IHsKLSAgICBmbG9hdCByeDsKLSAgICBmbG9hdCByeTsKLSAgICBmbG9hdCBhbmdsZTsKLSAgICBi
b29sIGxhcmdlQXJjOwotICAgIGJvb2wgc3dlZXA7Ci0gICAgRmxvYXRQb2ludCB0YXJnZXRQb2lu
dDsKLSAgICBpZiAoIW1fc291cmNlLnBhcnNlQXJjVG9TZWdtZW50KHJ4LCByeSwgYW5nbGUsIGxh
cmdlQXJjLCBzd2VlcCwgdGFyZ2V0UG9pbnQpKQorICAgIGF1dG8gcmVzdWx0ID0gbV9zb3VyY2Uu
cGFyc2VBcmNUb1NlZ21lbnQoKTsKKyAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgLy8gSWYgcnggPSAwIG9yIHJ5ID0gMCB0aGVuIHRoaXMgYXJjIGlzIHRyZWF0
ZWQgYXMgYSBzdHJhaWdodCBsaW5lIHNlZ21lbnQgKGEgImxpbmV0byIpIGpvaW5pbmcgdGhlIGVu
ZHBvaW50cy4KICAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcvaW1wbG5vdGUuaHRtbCNB
cmNPdXRPZlJhbmdlUGFyYW1ldGVycwogICAgIC8vIElmIHRoZSBjdXJyZW50IHBvaW50IGFuZCB0
YXJnZXQgcG9pbnQgZm9yIHRoZSBhcmMgYXJlIGlkZW50aWNhbCwgaXQgc2hvdWxkIGJlIHRyZWF0
ZWQgYXMgYSB6ZXJvIGxlbmd0aAogICAgIC8vIHBhdGguIFRoaXMgZW5zdXJlcyBjb250aW51aXR5
IGluIGFuaW1hdGlvbnMuCi0gICAgcnggPSBmYWJzZihyeCk7Ci0gICAgcnkgPSBmYWJzZihyeSk7
CisgICAgcmVzdWx0LT5yeCA9IGZhYnNmKHJlc3VsdC0+cngpOworICAgIHJlc3VsdC0+cnkgPSBm
YWJzZihyZXN1bHQtPnJ5KTsKICAgICBib29sIGFyY0lzWmVyb0xlbmd0aCA9IGZhbHNlOwogICAg
IGlmIChtX3BhdGhQYXJzaW5nTW9kZSA9PSBOb3JtYWxpemVkUGFyc2luZykgewogICAgICAgICBp
ZiAobV9tb2RlID09IFJlbGF0aXZlQ29vcmRpbmF0ZXMpCi0gICAgICAgICAgICBhcmNJc1plcm9M
ZW5ndGggPSB0YXJnZXRQb2ludCA9PSBGbG9hdFBvaW50Ojp6ZXJvKCk7CisgICAgICAgICAgICBh
cmNJc1plcm9MZW5ndGggPSByZXN1bHQtPnRhcmdldFBvaW50ID09IEZsb2F0UG9pbnQ6Onplcm8o
KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgYXJjSXNaZXJvTGVuZ3RoID0gdGFyZ2V0UG9p
bnQgPT0gbV9jdXJyZW50UG9pbnQ7CisgICAgICAgICAgICBhcmNJc1plcm9MZW5ndGggPSByZXN1
bHQtPnRhcmdldFBvaW50ID09IG1fY3VycmVudFBvaW50OwogICAgIH0KLSAgICBpZiAoIXJ4IHx8
ICFyeSB8fCBhcmNJc1plcm9MZW5ndGgpIHsKKyAgICBpZiAoIXJlc3VsdC0+cnggfHwgIXJlc3Vs
dC0+cnkgfHwgYXJjSXNaZXJvTGVuZ3RoKSB7CiAgICAgICAgIGlmIChtX3BhdGhQYXJzaW5nTW9k
ZSA9PSBOb3JtYWxpemVkUGFyc2luZykgewogICAgICAgICAgICAgaWYgKG1fbW9kZSA9PSBSZWxh
dGl2ZUNvb3JkaW5hdGVzKQotICAgICAgICAgICAgICAgIG1fY3VycmVudFBvaW50ICs9IHRhcmdl
dFBvaW50OworICAgICAgICAgICAgICAgIG1fY3VycmVudFBvaW50ICs9IHJlc3VsdC0+dGFyZ2V0
UG9pbnQ7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9jdXJyZW50UG9pbnQg
PSB0YXJnZXRQb2ludDsKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRQb2ludCA9IHJlc3VsdC0+
dGFyZ2V0UG9pbnQ7CiAgICAgICAgICAgICBtX2NvbnN1bWVyLmxpbmVUbyhtX2N1cnJlbnRQb2lu
dCwgQWJzb2x1dGVDb29yZGluYXRlcyk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV9j
b25zdW1lci5saW5lVG8odGFyZ2V0UG9pbnQsIG1fbW9kZSk7CisgICAgICAgICAgICBtX2NvbnN1
bWVyLmxpbmVUbyhyZXN1bHQtPnRhcmdldFBvaW50LCBtX21vZGUpOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAKICAgICBpZiAobV9wYXRoUGFyc2luZ01vZGUgPT0gTm9ybWFsaXplZFBh
cnNpbmcpIHsKICAgICAgICAgRmxvYXRQb2ludCBwb2ludDEgPSBtX2N1cnJlbnRQb2ludDsKICAg
ICAgICAgaWYgKG1fbW9kZSA9PSBSZWxhdGl2ZUNvb3JkaW5hdGVzKQotICAgICAgICAgICAgdGFy
Z2V0UG9pbnQgKz0gbV9jdXJyZW50UG9pbnQ7Ci0gICAgICAgIG1fY3VycmVudFBvaW50ID0gdGFy
Z2V0UG9pbnQ7Ci0gICAgICAgIHJldHVybiBkZWNvbXBvc2VBcmNUb0N1YmljKGFuZ2xlLCByeCwg
cnksIHBvaW50MSwgdGFyZ2V0UG9pbnQsIGxhcmdlQXJjLCBzd2VlcCk7CisgICAgICAgICAgICBy
ZXN1bHQtPnRhcmdldFBvaW50ICs9IG1fY3VycmVudFBvaW50OworICAgICAgICBtX2N1cnJlbnRQ
b2ludCA9IHJlc3VsdC0+dGFyZ2V0UG9pbnQ7CisgICAgICAgIHJldHVybiBkZWNvbXBvc2VBcmNU
b0N1YmljKHJlc3VsdC0+YW5nbGUsIHJlc3VsdC0+cngsIHJlc3VsdC0+cnksIHBvaW50MSwgcmVz
dWx0LT50YXJnZXRQb2ludCwgcmVzdWx0LT5sYXJnZUFyYywgcmVzdWx0LT5zd2VlcCk7CiAgICAg
fQotICAgIG1fY29uc3VtZXIuYXJjVG8ocngsIHJ5LCBhbmdsZSwgbGFyZ2VBcmMsIHN3ZWVwLCB0
YXJnZXRQb2ludCwgbV9tb2RlKTsKKyAgICBtX2NvbnN1bWVyLmFyY1RvKHJlc3VsdC0+cngsIHJl
c3VsdC0+cnksIHJlc3VsdC0+YW5nbGUsIHJlc3VsdC0+bGFyZ2VBcmMsIHJlc3VsdC0+c3dlZXAs
IHJlc3VsdC0+dGFyZ2V0UG9pbnQsIG1fbW9kZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAg
LTMxMiw4ICszMDQsMTEgQEAgYm9vbCBTVkdQYXRoUGFyc2VyOjpwYXJzZVBhdGhEYXRhKGJvb2wg
YwogICAgIGlmICghbV9zb3VyY2UubW92ZVRvTmV4dFRva2VuKCkpCiAgICAgICAgIHJldHVybiB0
cnVlOwogCi0gICAgU1ZHUGF0aFNlZ1R5cGUgY29tbWFuZDsKLSAgICBtX3NvdXJjZS5wYXJzZVNW
R1NlZ21lbnRUeXBlKGNvbW1hbmQpOworICAgIGF1dG8gcGFyc2VkQ29tbWFuZCA9IG1fc291cmNl
LnBhcnNlU1ZHU2VnbWVudFR5cGUoKTsKKyAgICBpZiAoIXBhcnNlZENvbW1hbmQpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gY29tbWFuZCA9ICpwYXJzZWRDb21tYW5kOwogCiAg
ICAgLy8gUGF0aCBtdXN0IHN0YXJ0IHdpdGggbW92ZXRvLgogICAgIGlmIChjaGVja0ZvckluaXRp
YWxNb3ZlVG8gJiYgY29tbWFuZCAhPSBQYXRoU2VnTW92ZVRvQWJzICYmIGNvbW1hbmQgIT0gUGF0
aFNlZ01vdmVUb1JlbCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoUGFyc2VyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhQYXJzZXIuaAkocmV2aXNp
b24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhQYXJzZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBTVkdQ
YXRoQnl0ZVN0cmVhbTsKIGNsYXNzIFNWR1BhdGhTb3VyY2U7CiAKLWNsYXNzIFNWR1BhdGhQYXJz
ZXIgeworY2xhc3MgU1ZHUGF0aFBhcnNlciBmaW5hbCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIGJv
b2wgcGFyc2UoU1ZHUGF0aFNvdXJjZSYsIFNWR1BhdGhDb25zdW1lciYsIFBhdGhQYXJzaW5nTW9k
ZSA9IE5vcm1hbGl6ZWRQYXJzaW5nLCBib29sIGNoZWNrRm9ySW5pdGlhbE1vdmVUbyA9IHRydWUp
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFNlZ0xpc3RTb3VyY2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU2VnTGlzdFNvdXJjZS5jcHAJ
KHJldmlzaW9uIDI2MzE3NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU2VnTGlzdFNv
dXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDE1ICs0MCwxNSBAQCBib29sIFNWR1BhdGhT
ZWdMaXN0U291cmNlOjpoYXNNb3JlRGF0YSgpCiAgICAgcmV0dXJuIG1faXRlbUN1cnJlbnQgPCBt
X2l0ZW1FbmQ7CiB9CiAKLWJvb2wgU1ZHUGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNlU1ZHU2VnbWVu
dFR5cGUoU1ZHUGF0aFNlZ1R5cGUmIHBhdGhTZWdUeXBlKQorU1ZHUGF0aFNlZ1R5cGUgU1ZHUGF0
aFNlZ0xpc3RTb3VyY2U6Om5leHRDb21tYW5kKFNWR1BhdGhTZWdUeXBlKQogewogICAgIG1fc2Vn
bWVudCA9IG1fcGF0aFNlZ0xpc3QuYXQobV9pdGVtQ3VycmVudCk7Ci0gICAgcGF0aFNlZ1R5cGUg
PSBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnVHlwZT4obV9zZWdtZW50LT5wYXRoU2VnVHlwZSgpKTsK
KyAgICBTVkdQYXRoU2VnVHlwZSBwYXRoU2VnVHlwZSA9IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdU
eXBlPihtX3NlZ21lbnQtPnBhdGhTZWdUeXBlKCkpOwogICAgICsrbV9pdGVtQ3VycmVudDsKLSAg
ICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gcGF0aFNlZ1R5cGU7CiB9CiAKLVNWR1BhdGhTZWdU
eXBlIFNWR1BhdGhTZWdMaXN0U291cmNlOjpuZXh0Q29tbWFuZChTVkdQYXRoU2VnVHlwZSkKK09w
dGlvbmFsPFNWR1BhdGhTZWdUeXBlPiBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VTVkdTZWdt
ZW50VHlwZSgpCiB7CiAgICAgbV9zZWdtZW50ID0gbV9wYXRoU2VnTGlzdC5hdChtX2l0ZW1DdXJy
ZW50KTsKICAgICBTVkdQYXRoU2VnVHlwZSBwYXRoU2VnVHlwZSA9IHN0YXRpY19jYXN0PFNWR1Bh
dGhTZWdUeXBlPihtX3NlZ21lbnQtPnBhdGhTZWdUeXBlKCkpOwpAQCAtNTYsOTQgKzU2LDExMiBA
QCBTVkdQYXRoU2VnVHlwZSBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6bmV4CiAgICAgcmV0dXJuIHBh
dGhTZWdUeXBlOwogfQogCi1ib29sIFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZU1vdmVUb1Nl
Z21lbnQoRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCitPcHRpb25hbDxTVkdQYXRoU291cmNlOjpN
b3ZlVG9TZWdtZW50PiBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VNb3ZlVG9TZWdtZW50KCkK
IHsKICAgICBBU1NFUlQobV9zZWdtZW50KTsKICAgICBBU1NFUlQobV9zZWdtZW50LT5wYXRoU2Vn
VHlwZSgpID09IFBhdGhTZWdNb3ZlVG9BYnMgfHwgbV9zZWdtZW50LT5wYXRoU2VnVHlwZSgpID09
IFBhdGhTZWdNb3ZlVG9SZWwpOwogICAgIFNWR1BhdGhTZWdTaW5nbGVDb29yZGluYXRlKiBtb3Zl
VG8gPSBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnU2luZ2xlQ29vcmRpbmF0ZSo+KG1fc2VnbWVudC5n
ZXQoKSk7Ci0gICAgdGFyZ2V0UG9pbnQgPSBGbG9hdFBvaW50KG1vdmVUby0+eCgpLCBtb3ZlVG8t
PnkoKSk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgTW92ZVRvU2VnbWVudCBzZWdtZW50
OworICAgIHNlZ21lbnQudGFyZ2V0UG9pbnQgPSBGbG9hdFBvaW50KG1vdmVUby0+eCgpLCBtb3Zl
VG8tPnkoKSk7CisgICAgcmV0dXJuIHNlZ21lbnQ7CiB9CiAKLWJvb2wgU1ZHUGF0aFNlZ0xpc3RT
b3VyY2U6OnBhcnNlTGluZVRvU2VnbWVudChGbG9hdFBvaW50JiB0YXJnZXRQb2ludCkKK09wdGlv
bmFsPFNWR1BhdGhTb3VyY2U6OkxpbmVUb1NlZ21lbnQ+IFNWR1BhdGhTZWdMaXN0U291cmNlOjpw
YXJzZUxpbmVUb1NlZ21lbnQoKQogewogICAgIEFTU0VSVChtX3NlZ21lbnQpOwogICAgIEFTU0VS
VChtX3NlZ21lbnQtPnBhdGhTZWdUeXBlKCkgPT0gUGF0aFNlZ0xpbmVUb0FicyB8fCBtX3NlZ21l
bnQtPnBhdGhTZWdUeXBlKCkgPT0gUGF0aFNlZ0xpbmVUb1JlbCk7CiAgICAgU1ZHUGF0aFNlZ1Np
bmdsZUNvb3JkaW5hdGUqIGxpbmVUbyA9IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdTaW5nbGVDb29y
ZGluYXRlKj4obV9zZWdtZW50LmdldCgpKTsKLSAgICB0YXJnZXRQb2ludCA9IEZsb2F0UG9pbnQo
bGluZVRvLT54KCksIGxpbmVUby0+eSgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBM
aW5lVG9TZWdtZW50IHNlZ21lbnQ7CisgICAgc2VnbWVudC50YXJnZXRQb2ludCA9IEZsb2F0UG9p
bnQobGluZVRvLT54KCksIGxpbmVUby0+eSgpKTsKKyAgICByZXR1cm4gc2VnbWVudDsKIH0KIAot
Ym9vbCBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudChm
bG9hdCYgeCkKK09wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkxpbmVUb0hvcml6b250YWxTZWdtZW50
PiBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudCgpCiB7
CiAgICAgQVNTRVJUKG1fc2VnbWVudCk7CiAgICAgQVNTRVJUKG1fc2VnbWVudC0+cGF0aFNlZ1R5
cGUoKSA9PSBQYXRoU2VnTGluZVRvSG9yaXpvbnRhbEFicyB8fCBtX3NlZ21lbnQtPnBhdGhTZWdU
eXBlKCkgPT0gUGF0aFNlZ0xpbmVUb0hvcml6b250YWxSZWwpOwogICAgIFNWR1BhdGhTZWdMaW5l
dG9Ib3Jpem9udGFsKiBob3Jpem9udGFsID0gc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0xpbmV0b0hv
cml6b250YWwqPihtX3NlZ21lbnQuZ2V0KCkpOwotICAgIHggPSBob3Jpem9udGFsLT54KCk7Ci0g
ICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQgc2VnbWVu
dDsKKyAgICBzZWdtZW50LnggPSBob3Jpem9udGFsLT54KCk7CisgICAgcmV0dXJuIHNlZ21lbnQ7
CiB9CiAKLWJvb2wgU1ZHUGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNlTGluZVRvVmVydGljYWxTZWdt
ZW50KGZsb2F0JiB5KQorT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6TGluZVRvVmVydGljYWxTZWdt
ZW50PiBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnQoKQog
ewogICAgIEFTU0VSVChtX3NlZ21lbnQpOwogICAgIEFTU0VSVChtX3NlZ21lbnQtPnBhdGhTZWdU
eXBlKCkgPT0gUGF0aFNlZ0xpbmVUb1ZlcnRpY2FsQWJzIHx8IG1fc2VnbWVudC0+cGF0aFNlZ1R5
cGUoKSA9PSBQYXRoU2VnTGluZVRvVmVydGljYWxSZWwpOwogICAgIFNWR1BhdGhTZWdMaW5ldG9W
ZXJ0aWNhbCogdmVydGljYWwgPSBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnTGluZXRvVmVydGljYWwq
PihtX3NlZ21lbnQuZ2V0KCkpOwotICAgIHkgPSB2ZXJ0aWNhbC0+eSgpOwotICAgIHJldHVybiB0
cnVlOworICAgIAorICAgIExpbmVUb1ZlcnRpY2FsU2VnbWVudCBzZWdtZW50OworICAgIHNlZ21l
bnQueSA9IHZlcnRpY2FsLT55KCk7CisgICAgcmV0dXJuIHNlZ21lbnQ7CiB9CiAKLWJvb2wgU1ZH
UGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNlQ3VydmVUb0N1YmljU2VnbWVudChGbG9hdFBvaW50JiBw
b2ludDEsIEZsb2F0UG9pbnQmIHBvaW50MiwgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCitPcHRp
b25hbDxTVkdQYXRoU291cmNlOjpDdXJ2ZVRvQ3ViaWNTZWdtZW50PiBTVkdQYXRoU2VnTGlzdFNv
dXJjZTo6cGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KCkKIHsKICAgICBBU1NFUlQobV9zZWdtZW50
KTsKICAgICBBU1NFUlQobV9zZWdtZW50LT5wYXRoU2VnVHlwZSgpID09IFBhdGhTZWdDdXJ2ZVRv
Q3ViaWNBYnMgfHwgbV9zZWdtZW50LT5wYXRoU2VnVHlwZSgpID09IFBhdGhTZWdDdXJ2ZVRvQ3Vi
aWNSZWwpOwogICAgIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWMqIGN1YmljID0gc3RhdGljX2Nhc3Q8
U1ZHUGF0aFNlZ0N1cnZldG9DdWJpYyo+KG1fc2VnbWVudC5nZXQoKSk7Ci0gICAgcG9pbnQxID0g
RmxvYXRQb2ludChjdWJpYy0+eDEoKSwgY3ViaWMtPnkxKCkpOwotICAgIHBvaW50MiA9IEZsb2F0
UG9pbnQoY3ViaWMtPngyKCksIGN1YmljLT55MigpKTsKLSAgICB0YXJnZXRQb2ludCA9IEZsb2F0
UG9pbnQoY3ViaWMtPngoKSwgY3ViaWMtPnkoKSk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgCisg
ICAgQ3VydmVUb0N1YmljU2VnbWVudCBzZWdtZW50OworICAgIHNlZ21lbnQucG9pbnQxID0gRmxv
YXRQb2ludChjdWJpYy0+eDEoKSwgY3ViaWMtPnkxKCkpOworICAgIHNlZ21lbnQucG9pbnQyID0g
RmxvYXRQb2ludChjdWJpYy0+eDIoKSwgY3ViaWMtPnkyKCkpOworICAgIHNlZ21lbnQudGFyZ2V0
UG9pbnQgPSBGbG9hdFBvaW50KGN1YmljLT54KCksIGN1YmljLT55KCkpOworICAgIHJldHVybiBz
ZWdtZW50OwogfQogCi1ib29sIFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUN1cnZlVG9DdWJp
Y1Ntb290aFNlZ21lbnQoRmxvYXRQb2ludCYgcG9pbnQyLCBGbG9hdFBvaW50JiB0YXJnZXRQb2lu
dCkKK09wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQ+IFNW
R1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQoKQogewog
ICAgIEFTU0VSVChtX3NlZ21lbnQpOwogICAgIEFTU0VSVChtX3NlZ21lbnQtPnBhdGhTZWdUeXBl
KCkgPT0gUGF0aFNlZ0N1cnZlVG9DdWJpY1Ntb290aEFicyB8fCBtX3NlZ21lbnQtPnBhdGhTZWdU
eXBlKCkgPT0gUGF0aFNlZ0N1cnZlVG9DdWJpY1Ntb290aFJlbCk7CiAgICAgU1ZHUGF0aFNlZ0N1
cnZldG9DdWJpY1Ntb290aCogY3ViaWNTbW9vdGggPSBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnQ3Vy
dmV0b0N1YmljU21vb3RoKj4obV9zZWdtZW50LmdldCgpKTsKLSAgICBwb2ludDIgPSBGbG9hdFBv
aW50KGN1YmljU21vb3RoLT54MigpLCBjdWJpY1Ntb290aC0+eTIoKSk7Ci0gICAgdGFyZ2V0UG9p
bnQgPSBGbG9hdFBvaW50KGN1YmljU21vb3RoLT54KCksIGN1YmljU21vb3RoLT55KCkpOwotICAg
IHJldHVybiB0cnVlOworICAgIAorICAgIEN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQgc2VnbWVu
dDsKKyAgICBzZWdtZW50LnBvaW50MiA9IEZsb2F0UG9pbnQoY3ViaWNTbW9vdGgtPngyKCksIGN1
YmljU21vb3RoLT55MigpKTsKKyAgICBzZWdtZW50LnRhcmdldFBvaW50ID0gRmxvYXRQb2ludChj
dWJpY1Ntb290aC0+eCgpLCBjdWJpY1Ntb290aC0+eSgpKTsKKyAgICByZXR1cm4gc2VnbWVudDsK
IH0KIAotYm9vbCBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2Vn
bWVudChGbG9hdFBvaW50JiBwb2ludDEsIEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQorT3B0aW9u
YWw8U1ZHUGF0aFNvdXJjZTo6Q3VydmVUb1F1YWRyYXRpY1NlZ21lbnQ+IFNWR1BhdGhTZWdMaXN0
U291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KCkKIHsKICAgICBBU1NFUlQobV9z
ZWdtZW50KTsKICAgICBBU1NFUlQobV9zZWdtZW50LT5wYXRoU2VnVHlwZSgpID09IFBhdGhTZWdD
dXJ2ZVRvUXVhZHJhdGljQWJzIHx8IG1fc2VnbWVudC0+cGF0aFNlZ1R5cGUoKSA9PSBQYXRoU2Vn
Q3VydmVUb1F1YWRyYXRpY1JlbCk7CiAgICAgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWMqIHF1
YWRyYXRpYyA9IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljKj4obV9zZWdt
ZW50LmdldCgpKTsKLSAgICBwb2ludDEgPSBGbG9hdFBvaW50KHF1YWRyYXRpYy0+eDEoKSwgcXVh
ZHJhdGljLT55MSgpKTsKLSAgICB0YXJnZXRQb2ludCA9IEZsb2F0UG9pbnQocXVhZHJhdGljLT54
KCksIHF1YWRyYXRpYy0+eSgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBDdXJ2ZVRv
UXVhZHJhdGljU2VnbWVudCBzZWdtZW50OworICAgIHNlZ21lbnQucG9pbnQxID0gRmxvYXRQb2lu
dChxdWFkcmF0aWMtPngxKCksIHF1YWRyYXRpYy0+eTEoKSk7CisgICAgc2VnbWVudC50YXJnZXRQ
b2ludCA9IEZsb2F0UG9pbnQocXVhZHJhdGljLT54KCksIHF1YWRyYXRpYy0+eSgpKTsKKyAgICBy
ZXR1cm4gc2VnbWVudDsKIH0KIAotYm9vbCBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VDdXJ2
ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudChGbG9hdFBvaW50JiB0YXJnZXRQb2ludCkKK09wdGlv
bmFsPFNWR1BhdGhTb3VyY2U6OkN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50PiBTVkdQYXRo
U2VnTGlzdFNvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudCgpCiB7CiAg
ICAgQVNTRVJUKG1fc2VnbWVudCk7CiAgICAgQVNTRVJUKG1fc2VnbWVudC0+cGF0aFNlZ1R5cGUo
KSA9PSBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY1Ntb290aEFicyB8fCBtX3NlZ21lbnQtPnBhdGhT
ZWdUeXBlKCkgPT0gUGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNTbW9vdGhSZWwpOwogICAgIFNWR1Bh
dGhTZWdTaW5nbGVDb29yZGluYXRlKiBxdWFkcmF0aWNTbW9vdGggPSBzdGF0aWNfY2FzdDxTVkdQ
YXRoU2VnU2luZ2xlQ29vcmRpbmF0ZSo+KG1fc2VnbWVudC5nZXQoKSk7Ci0gICAgdGFyZ2V0UG9p
bnQgPSBGbG9hdFBvaW50KHF1YWRyYXRpY1Ntb290aC0+eCgpLCBxdWFkcmF0aWNTbW9vdGgtPnko
KSk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNl
Z21lbnQgc2VnbWVudDsKKyAgICBzZWdtZW50LnRhcmdldFBvaW50ID0gRmxvYXRQb2ludChxdWFk
cmF0aWNTbW9vdGgtPngoKSwgcXVhZHJhdGljU21vb3RoLT55KCkpOworICAgIHJldHVybiBzZWdt
ZW50OwogfQogCi1ib29sIFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUFyY1RvU2VnbWVudChm
bG9hdCYgcngsIGZsb2F0JiByeSwgZmxvYXQmIGFuZ2xlLCBib29sJiBsYXJnZUFyYywgYm9vbCYg
c3dlZXAsIEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQorT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6
QXJjVG9TZWdtZW50PiBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VBcmNUb1NlZ21lbnQoKQog
ewogICAgIEFTU0VSVChtX3NlZ21lbnQpOwogICAgIEFTU0VSVChtX3NlZ21lbnQtPnBhdGhTZWdU
eXBlKCkgPT0gUGF0aFNlZ0FyY0FicyB8fCBtX3NlZ21lbnQtPnBhdGhTZWdUeXBlKCkgPT0gUGF0
aFNlZ0FyY1JlbCk7CiAgICAgU1ZHUGF0aFNlZ0FyYyogYXJjVG8gPSBzdGF0aWNfY2FzdDxTVkdQ
YXRoU2VnQXJjKj4obV9zZWdtZW50LmdldCgpKTsKLSAgICByeCA9IGFyY1RvLT5yMSgpOwotICAg
IHJ5ID0gYXJjVG8tPnIyKCk7Ci0gICAgYW5nbGUgPSBhcmNUby0+YW5nbGUoKTsKLSAgICBsYXJn
ZUFyYyA9IGFyY1RvLT5sYXJnZUFyY0ZsYWcoKTsKLSAgICBzd2VlcCA9IGFyY1RvLT5zd2VlcEZs
YWcoKTsKLSAgICB0YXJnZXRQb2ludCA9IEZsb2F0UG9pbnQoYXJjVG8tPngoKSwgYXJjVG8tPnko
KSk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgQXJjVG9TZWdtZW50IHNlZ21lbnQ7Cisg
ICAgc2VnbWVudC5yeCA9IGFyY1RvLT5yMSgpOworICAgIHNlZ21lbnQucnkgPSBhcmNUby0+cjIo
KTsKKyAgICBzZWdtZW50LmFuZ2xlID0gYXJjVG8tPmFuZ2xlKCk7CisgICAgc2VnbWVudC5sYXJn
ZUFyYyA9IGFyY1RvLT5sYXJnZUFyY0ZsYWcoKTsKKyAgICBzZWdtZW50LnN3ZWVwID0gYXJjVG8t
PnN3ZWVwRmxhZygpOworICAgIHNlZ21lbnQudGFyZ2V0UG9pbnQgPSBGbG9hdFBvaW50KGFyY1Rv
LT54KCksIGFyY1RvLT55KCkpOworICAgIHJldHVybiBzZWdtZW50OwogfQogCiB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFNlZ0xpc3RTb3VyY2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFNlZ0xpc3RTb3VyY2UuaAkocmV2aXNpb24gMjYzMTc2
KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTZWdMaXN0U291cmNlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM2LDE4ICszNiwxOCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGJvb2wgaGFz
TW9yZURhdGEoKSBjb25zdCBmaW5hbDsKICAgICBib29sIG1vdmVUb05leHRUb2tlbigpIGZpbmFs
IHsgcmV0dXJuIHRydWU7IH0KLSAgICBib29sIHBhcnNlU1ZHU2VnbWVudFR5cGUoU1ZHUGF0aFNl
Z1R5cGUmKSBmaW5hbDsKICAgICBTVkdQYXRoU2VnVHlwZSBuZXh0Q29tbWFuZChTVkdQYXRoU2Vn
VHlwZSkgZmluYWw7CiAKLSAgICBib29sIHBhcnNlTW92ZVRvU2VnbWVudChGbG9hdFBvaW50Jikg
ZmluYWw7Ci0gICAgYm9vbCBwYXJzZUxpbmVUb1NlZ21lbnQoRmxvYXRQb2ludCYpIGZpbmFsOwot
ICAgIGJvb2wgcGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudChmbG9hdCYpIGZpbmFsOwotICAg
IGJvb2wgcGFyc2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnQoZmxvYXQmKSBmaW5hbDsKLSAgICBib29s
IHBhcnNlQ3VydmVUb0N1YmljU2VnbWVudChGbG9hdFBvaW50JiwgRmxvYXRQb2ludCYsIEZsb2F0
UG9pbnQmKSBmaW5hbDsKLSAgICBib29sIHBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudChG
bG9hdFBvaW50JiwgRmxvYXRQb2ludCYpIGZpbmFsOwotICAgIGJvb2wgcGFyc2VDdXJ2ZVRvUXVh
ZHJhdGljU2VnbWVudChGbG9hdFBvaW50JiwgRmxvYXRQb2ludCYpIGZpbmFsOwotICAgIGJvb2wg
cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudChGbG9hdFBvaW50JikgZmluYWw7Ci0g
ICAgYm9vbCBwYXJzZUFyY1RvU2VnbWVudChmbG9hdCYsIGZsb2F0JiwgZmxvYXQmLCBib29sJiwg
Ym9vbCYsIEZsb2F0UG9pbnQmKSBmaW5hbDsKKyAgICBPcHRpb25hbDxTVkdQYXRoU2VnVHlwZT4g
cGFyc2VTVkdTZWdtZW50VHlwZSgpIGZpbmFsOworICAgIE9wdGlvbmFsPE1vdmVUb1NlZ21lbnQ+
IHBhcnNlTW92ZVRvU2VnbWVudCgpIGZpbmFsOworICAgIE9wdGlvbmFsPExpbmVUb1NlZ21lbnQ+
IHBhcnNlTGluZVRvU2VnbWVudCgpIGZpbmFsOworICAgIE9wdGlvbmFsPExpbmVUb0hvcml6b250
YWxTZWdtZW50PiBwYXJzZUxpbmVUb0hvcml6b250YWxTZWdtZW50KCkgZmluYWw7CisgICAgT3B0
aW9uYWw8TGluZVRvVmVydGljYWxTZWdtZW50PiBwYXJzZUxpbmVUb1ZlcnRpY2FsU2VnbWVudCgp
IGZpbmFsOworICAgIE9wdGlvbmFsPEN1cnZlVG9DdWJpY1NlZ21lbnQ+IHBhcnNlQ3VydmVUb0N1
YmljU2VnbWVudCgpIGZpbmFsOworICAgIE9wdGlvbmFsPEN1cnZlVG9DdWJpY1Ntb290aFNlZ21l
bnQ+IHBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudCgpIGZpbmFsOworICAgIE9wdGlvbmFs
PEN1cnZlVG9RdWFkcmF0aWNTZWdtZW50PiBwYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KCkg
ZmluYWw7CisgICAgT3B0aW9uYWw8Q3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQ+IHBhcnNl
Q3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQoKSBmaW5hbDsKKyAgICBPcHRpb25hbDxBcmNU
b1NlZ21lbnQ+IHBhcnNlQXJjVG9TZWdtZW50KCkgZmluYWw7CiAKICAgICBjb25zdCBTVkdQYXRo
U2VnTGlzdCYgbV9wYXRoU2VnTGlzdDsKICAgICBSZWZQdHI8U1ZHUGF0aFNlZz4gbV9zZWdtZW50
OwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTb3VyY2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFNvdXJjZS5oCShyZXZpc2lvbiAyNjMxNzYpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MywxOCArMzMsNjMgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIGhhc01vcmVEYXRhKCkg
Y29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBtb3ZlVG9OZXh0VG9rZW4oKSA9IDA7Ci0gICAg
dmlydHVhbCBib29sIHBhcnNlU1ZHU2VnbWVudFR5cGUoU1ZHUGF0aFNlZ1R5cGUmKSA9IDA7CiAg
ICAgdmlydHVhbCBTVkdQYXRoU2VnVHlwZSBuZXh0Q29tbWFuZChTVkdQYXRoU2VnVHlwZSBwcmV2
aW91c0NvbW1hbmQpID0gMDsKIAotICAgIHZpcnR1YWwgYm9vbCBwYXJzZU1vdmVUb1NlZ21lbnQo
RmxvYXRQb2ludCYpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VMaW5lVG9TZWdtZW50KEZs
b2F0UG9pbnQmKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHBhcnNlTGluZVRvSG9yaXpvbnRhbFNl
Z21lbnQoZmxvYXQmKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHBhcnNlTGluZVRvVmVydGljYWxT
ZWdtZW50KGZsb2F0JikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBwYXJzZUN1cnZlVG9DdWJpY1Nl
Z21lbnQoRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmLCBGbG9hdFBvaW50JikgPSAwOwotICAgIHZp
cnR1YWwgYm9vbCBwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQoRmxvYXRQb2ludCYsIEZs
b2F0UG9pbnQmKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHBhcnNlQ3VydmVUb1F1YWRyYXRpY1Nl
Z21lbnQoRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHBh
cnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQoRmxvYXRQb2ludCYpID0gMDsKLSAgICB2
aXJ0dWFsIGJvb2wgcGFyc2VBcmNUb1NlZ21lbnQoZmxvYXQmLCBmbG9hdCYsIGZsb2F0JiwgYm9v
bCYsIGJvb2wmLCBGbG9hdFBvaW50JikgPSAwOworICAgIHZpcnR1YWwgT3B0aW9uYWw8U1ZHUGF0
aFNlZ1R5cGU+IHBhcnNlU1ZHU2VnbWVudFR5cGUoKSA9IDA7CisKKyAgICBzdHJ1Y3QgTW92ZVRv
U2VnbWVudCB7CisgICAgICAgIEZsb2F0UG9pbnQgdGFyZ2V0UG9pbnQ7CisgICAgfTsKKyAgICB2
aXJ0dWFsIE9wdGlvbmFsPE1vdmVUb1NlZ21lbnQ+IHBhcnNlTW92ZVRvU2VnbWVudCgpID0gMDsK
KworICAgIHN0cnVjdCBMaW5lVG9TZWdtZW50IHsKKyAgICAgICAgRmxvYXRQb2ludCB0YXJnZXRQ
b2ludDsKKyAgICB9OworICAgIHZpcnR1YWwgT3B0aW9uYWw8TGluZVRvU2VnbWVudD4gcGFyc2VM
aW5lVG9TZWdtZW50KCkgPSAwOworCisgICAgc3RydWN0IExpbmVUb0hvcml6b250YWxTZWdtZW50
IHsKKyAgICAgICAgZmxvYXQgeDsKKyAgICB9OworICAgIHZpcnR1YWwgT3B0aW9uYWw8TGluZVRv
SG9yaXpvbnRhbFNlZ21lbnQ+IHBhcnNlTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQoKSA9IDA7CisK
KyAgICBzdHJ1Y3QgTGluZVRvVmVydGljYWxTZWdtZW50IHsKKyAgICAgICAgZmxvYXQgeTsKKyAg
ICB9OworICAgIHZpcnR1YWwgT3B0aW9uYWw8TGluZVRvVmVydGljYWxTZWdtZW50PiBwYXJzZUxp
bmVUb1ZlcnRpY2FsU2VnbWVudCgpID0gMDsKKworICAgIHN0cnVjdCBDdXJ2ZVRvQ3ViaWNTZWdt
ZW50IHsKKyAgICAgICAgRmxvYXRQb2ludCBwb2ludDE7CisgICAgICAgIEZsb2F0UG9pbnQgcG9p
bnQyOworICAgICAgICBGbG9hdFBvaW50IHRhcmdldFBvaW50OworICAgIH07CisgICAgdmlydHVh
bCBPcHRpb25hbDxDdXJ2ZVRvQ3ViaWNTZWdtZW50PiBwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQo
KSA9IDA7CisKKyAgICBzdHJ1Y3QgQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudCB7CisgICAgICAg
IEZsb2F0UG9pbnQgcG9pbnQyOworICAgICAgICBGbG9hdFBvaW50IHRhcmdldFBvaW50OworICAg
IH07CisgICAgdmlydHVhbCBPcHRpb25hbDxDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50PiBwYXJz
ZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQoKSA9IDA7CisKKyAgICBzdHJ1Y3QgQ3VydmVUb1F1
YWRyYXRpY1NlZ21lbnQgeworICAgICAgICBGbG9hdFBvaW50IHBvaW50MTsKKyAgICAgICAgRmxv
YXRQb2ludCB0YXJnZXRQb2ludDsKKyAgICB9OworICAgIHZpcnR1YWwgT3B0aW9uYWw8Q3VydmVU
b1F1YWRyYXRpY1NlZ21lbnQ+IHBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQoKSA9IDA7CisK
KyAgICBzdHJ1Y3QgQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQgeworICAgICAgICBGbG9h
dFBvaW50IHRhcmdldFBvaW50OworICAgIH07CisgICAgdmlydHVhbCBPcHRpb25hbDxDdXJ2ZVRv
UXVhZHJhdGljU21vb3RoU2VnbWVudD4gcGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVu
dCgpID0gMDsKKworICAgIHN0cnVjdCBBcmNUb1NlZ21lbnQgeworICAgICAgICBmbG9hdCByeDsK
KyAgICAgICAgZmxvYXQgcnk7CisgICAgICAgIGZsb2F0IGFuZ2xlOworICAgICAgICBib29sIGxh
cmdlQXJjOworICAgICAgICBib29sIHN3ZWVwOworICAgICAgICBGbG9hdFBvaW50IHRhcmdldFBv
aW50OworICAgIH07CisgICAgdmlydHVhbCBPcHRpb25hbDxBcmNUb1NlZ21lbnQ+IHBhcnNlQXJj
VG9TZWdtZW50KCkgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTdHJpbmdTb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU3RyaW5nU291cmNlLmNwcAkocmV2aXNpb24gMjYzMTc2
KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTdHJpbmdTb3VyY2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01NSwxOTUgKzU1LDI4MCBAQCBib29sIFNWR1BhdGhTdHJpbmdTb3VyY2U6Om1v
dmVUb05leHRUb2tlCiAgICAgcmV0dXJuIHNraXBPcHRpb25hbFNWR1NwYWNlcyhtX2N1cnJlbnQu
bV9jaGFyYWN0ZXIxNiwgbV9lbmQubV9jaGFyYWN0ZXIxNik7CiB9CiAKLXRlbXBsYXRlIDx0eXBl
bmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGljIGJvb2wgcGFyc2VTVkdTZWdtZW50VHlwZUhlbHBl
cihjb25zdCBDaGFyYWN0ZXJUeXBlKiYgY3VycmVudCwgU1ZHUGF0aFNlZ1R5cGUmIHBhdGhTZWdU
eXBlKQordGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBPcHRpb25hbDxT
VkdQYXRoU2VnVHlwZT4gbmV4dENvbW1hbmRIZWxwZXIoY29uc3QgQ2hhcmFjdGVyVHlwZSomIGN1
cnJlbnQsIFNWR1BhdGhTZWdUeXBlIHByZXZpb3VzQ29tbWFuZCkKK3sKKyAgICAvLyBDaGVjayBm
b3IgcmVtYWluaW5nIGNvb3JkaW5hdGVzIGluIHRoZSBjdXJyZW50IGNvbW1hbmQuCisgICAgaWYg
KCgqY3VycmVudCA9PSAnKycgfHwgKmN1cnJlbnQgPT0gJy0nIHx8ICpjdXJyZW50ID09ICcuJyB8
fCBpc0FTQ0lJRGlnaXQoKmN1cnJlbnQpKQorICAgICAgICAmJiBwcmV2aW91c0NvbW1hbmQgIT0g
UGF0aFNlZ0Nsb3NlUGF0aCkgeworICAgICAgICBpZiAocHJldmlvdXNDb21tYW5kID09IFBhdGhT
ZWdNb3ZlVG9BYnMpCisgICAgICAgICAgICByZXR1cm4gUGF0aFNlZ0xpbmVUb0FiczsKKyAgICAg
ICAgaWYgKHByZXZpb3VzQ29tbWFuZCA9PSBQYXRoU2VnTW92ZVRvUmVsKQorICAgICAgICAgICAg
cmV0dXJuIFBhdGhTZWdMaW5lVG9SZWw7CisgICAgICAgIHJldHVybiBwcmV2aW91c0NvbW1hbmQ7
CisgICAgfQorCisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworU1ZHUGF0aFNlZ1R5cGUg
U1ZHUGF0aFN0cmluZ1NvdXJjZTo6bmV4dENvbW1hbmQoU1ZHUGF0aFNlZ1R5cGUgcHJldmlvdXND
b21tYW5kKQoreworICAgIGlmIChtX2lzOEJpdFNvdXJjZSkgeworICAgICAgICBpZiAoYXV0byBu
ZXh0Q29tbWFuZCA9IG5leHRDb21tYW5kSGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjgsIHBy
ZXZpb3VzQ29tbWFuZCkpCisgICAgICAgICAgICByZXR1cm4gKm5leHRDb21tYW5kOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGlmIChhdXRvIG5leHRDb21tYW5kID0gbmV4dENvbW1hbmRIZWxwZXIo
bV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYsIHByZXZpb3VzQ29tbWFuZCkpCisgICAgICAgICAgICBy
ZXR1cm4gKm5leHRDb21tYW5kOworICAgIH0KKworICAgIHJldHVybiAqcGFyc2VTVkdTZWdtZW50
VHlwZSgpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIFNW
R1BhdGhTZWdUeXBlIHBhcnNlU1ZHU2VnbWVudFR5cGVIZWxwZXIoY29uc3QgQ2hhcmFjdGVyVHlw
ZSomIGN1cnJlbnQpCiB7CiAgICAgc3dpdGNoICgqKGN1cnJlbnQrKykpIHsKICAgICBjYXNlICda
JzoKICAgICBjYXNlICd6JzoKLSAgICAgICAgcGF0aFNlZ1R5cGUgPSBQYXRoU2VnQ2xvc2VQYXRo
OwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIFBhdGhTZWdDbG9zZVBhdGg7CiAgICAg
Y2FzZSAnTSc6Ci0gICAgICAgIHBhdGhTZWdUeXBlID0gUGF0aFNlZ01vdmVUb0FiczsKLSAgICAg
ICAgYnJlYWs7CisgICAgICAgIHJldHVybiBQYXRoU2VnTW92ZVRvQWJzOwogICAgIGNhc2UgJ20n
OgotICAgICAgICBwYXRoU2VnVHlwZSA9IFBhdGhTZWdNb3ZlVG9SZWw7Ci0gICAgICAgIGJyZWFr
OworICAgICAgICByZXR1cm4gUGF0aFNlZ01vdmVUb1JlbDsKICAgICBjYXNlICdMJzoKLSAgICAg
ICAgcGF0aFNlZ1R5cGUgPSBQYXRoU2VnTGluZVRvQWJzOwotICAgICAgICBicmVhazsKKyAgICAg
ICAgcmV0dXJuIFBhdGhTZWdMaW5lVG9BYnM7CiAgICAgY2FzZSAnbCc6Ci0gICAgICAgIHBhdGhT
ZWdUeXBlID0gUGF0aFNlZ0xpbmVUb1JlbDsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVy
biBQYXRoU2VnTGluZVRvUmVsOwogICAgIGNhc2UgJ0MnOgotICAgICAgICBwYXRoU2VnVHlwZSA9
IFBhdGhTZWdDdXJ2ZVRvQ3ViaWNBYnM7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4g
UGF0aFNlZ0N1cnZlVG9DdWJpY0FiczsKICAgICBjYXNlICdjJzoKLSAgICAgICAgcGF0aFNlZ1R5
cGUgPSBQYXRoU2VnQ3VydmVUb0N1YmljUmVsOwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0
dXJuIFBhdGhTZWdDdXJ2ZVRvQ3ViaWNSZWw7CiAgICAgY2FzZSAnUSc6Ci0gICAgICAgIHBhdGhT
ZWdUeXBlID0gUGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNBYnM7Ci0gICAgICAgIGJyZWFrOworICAg
ICAgICByZXR1cm4gUGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNBYnM7CiAgICAgY2FzZSAncSc6Ci0g
ICAgICAgIHBhdGhTZWdUeXBlID0gUGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNSZWw7Ci0gICAgICAg
IGJyZWFrOworICAgICAgICByZXR1cm4gUGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNSZWw7CiAgICAg
Y2FzZSAnQSc6Ci0gICAgICAgIHBhdGhTZWdUeXBlID0gUGF0aFNlZ0FyY0FiczsKLSAgICAgICAg
YnJlYWs7CisgICAgICAgIHJldHVybiBQYXRoU2VnQXJjQWJzOwogICAgIGNhc2UgJ2EnOgotICAg
ICAgICBwYXRoU2VnVHlwZSA9IFBhdGhTZWdBcmNSZWw7Ci0gICAgICAgIGJyZWFrOworICAgICAg
ICByZXR1cm4gUGF0aFNlZ0FyY1JlbDsKICAgICBjYXNlICdIJzoKLSAgICAgICAgcGF0aFNlZ1R5
cGUgPSBQYXRoU2VnTGluZVRvSG9yaXpvbnRhbEFiczsKLSAgICAgICAgYnJlYWs7CisgICAgICAg
IHJldHVybiBQYXRoU2VnTGluZVRvSG9yaXpvbnRhbEFiczsKICAgICBjYXNlICdoJzoKLSAgICAg
ICAgcGF0aFNlZ1R5cGUgPSBQYXRoU2VnTGluZVRvSG9yaXpvbnRhbFJlbDsKLSAgICAgICAgYnJl
YWs7CisgICAgICAgIHJldHVybiBQYXRoU2VnTGluZVRvSG9yaXpvbnRhbFJlbDsKICAgICBjYXNl
ICdWJzoKLSAgICAgICAgcGF0aFNlZ1R5cGUgPSBQYXRoU2VnTGluZVRvVmVydGljYWxBYnM7Ci0g
ICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gUGF0aFNlZ0xpbmVUb1ZlcnRpY2FsQWJzOwog
ICAgIGNhc2UgJ3YnOgotICAgICAgICBwYXRoU2VnVHlwZSA9IFBhdGhTZWdMaW5lVG9WZXJ0aWNh
bFJlbDsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBQYXRoU2VnTGluZVRvVmVydGlj
YWxSZWw7CiAgICAgY2FzZSAnUyc6Ci0gICAgICAgIHBhdGhTZWdUeXBlID0gUGF0aFNlZ0N1cnZl
VG9DdWJpY1Ntb290aEFiczsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBQYXRoU2Vn
Q3VydmVUb0N1YmljU21vb3RoQWJzOwogICAgIGNhc2UgJ3MnOgotICAgICAgICBwYXRoU2VnVHlw
ZSA9IFBhdGhTZWdDdXJ2ZVRvQ3ViaWNTbW9vdGhSZWw7Ci0gICAgICAgIGJyZWFrOworICAgICAg
ICByZXR1cm4gUGF0aFNlZ0N1cnZlVG9DdWJpY1Ntb290aFJlbDsKICAgICBjYXNlICdUJzoKLSAg
ICAgICAgcGF0aFNlZ1R5cGUgPSBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY1Ntb290aEFiczsKLSAg
ICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY1Ntb290
aEFiczsKICAgICBjYXNlICd0JzoKLSAgICAgICAgcGF0aFNlZ1R5cGUgPSBQYXRoU2VnQ3VydmVU
b1F1YWRyYXRpY1Ntb290aFJlbDsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBQYXRo
U2VnQ3VydmVUb1F1YWRyYXRpY1Ntb290aFJlbDsKICAgICBkZWZhdWx0OgotICAgICAgICBwYXRo
U2VnVHlwZSA9IFBhdGhTZWdVbmtub3duOworICAgICAgICByZXR1cm4gUGF0aFNlZ1Vua25vd247
CiAgICAgfQotICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFNWR1BhdGhTdHJpbmdTb3VyY2U6
OnBhcnNlU1ZHU2VnbWVudFR5cGUoU1ZHUGF0aFNlZ1R5cGUmIHBhdGhTZWdUeXBlKQorT3B0aW9u
YWw8U1ZHUGF0aFNlZ1R5cGU+IFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlU1ZHU2VnbWVudFR5
cGUoKQogewogICAgIGlmIChtX2lzOEJpdFNvdXJjZSkKLSAgICAgICAgcmV0dXJuIHBhcnNlU1ZH
U2VnbWVudFR5cGVIZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyOCwgcGF0aFNlZ1R5cGUpOwot
ICAgIHJldHVybiBwYXJzZVNWR1NlZ21lbnRUeXBlSGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3Rl
cjE2LCBwYXRoU2VnVHlwZSk7CisgICAgICAgIHJldHVybiBwYXJzZVNWR1NlZ21lbnRUeXBlSGVs
cGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjgpOworICAgIHJldHVybiBwYXJzZVNWR1NlZ21lbnRU
eXBlSGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjE2KTsKIH0KIAotdGVtcGxhdGUgPHR5cGVu
YW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgYm9vbCBuZXh0Q29tbWFuZEhlbHBlcihjb25zdCBD
aGFyYWN0ZXJUeXBlKiYgY3VycmVudCwgU1ZHUGF0aFNlZ1R5cGUgcHJldmlvdXNDb21tYW5kLCBT
VkdQYXRoU2VnVHlwZSYgbmV4dENvbW1hbmQpCitPcHRpb25hbDxTVkdQYXRoU291cmNlOjpNb3Zl
VG9TZWdtZW50PiBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZU1vdmVUb1NlZ21lbnQoKQogewot
ICAgIC8vIENoZWNrIGZvciByZW1haW5pbmcgY29vcmRpbmF0ZXMgaW4gdGhlIGN1cnJlbnQgY29t
bWFuZC4KLSAgICBpZiAoKCpjdXJyZW50ID09ICcrJyB8fCAqY3VycmVudCA9PSAnLScgfHwgKmN1
cnJlbnQgPT0gJy4nIHx8IGlzQVNDSUlEaWdpdCgqY3VycmVudCkpCi0gICAgICAgICYmIHByZXZp
b3VzQ29tbWFuZCAhPSBQYXRoU2VnQ2xvc2VQYXRoKSB7Ci0gICAgICAgIGlmIChwcmV2aW91c0Nv
bW1hbmQgPT0gUGF0aFNlZ01vdmVUb0FicykgewotICAgICAgICAgICAgbmV4dENvbW1hbmQgPSBQ
YXRoU2VnTGluZVRvQWJzOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAg
ICAgICAgaWYgKHByZXZpb3VzQ29tbWFuZCA9PSBQYXRoU2VnTW92ZVRvUmVsKSB7Ci0gICAgICAg
ICAgICBuZXh0Q29tbWFuZCA9IFBhdGhTZWdMaW5lVG9SZWw7Ci0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBuZXh0Q29tbWFuZCA9IHByZXZpb3VzQ29tbWFuZDsK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQorICAgIGF1dG8gaGVscGVyID0gW10oY29uc3Qg
YXV0byomIGN1cnJlbnQsIGNvbnN0IGF1dG8qIGVuZCkgLT4gT3B0aW9uYWw8TW92ZVRvU2VnbWVu
dD4geworICAgICAgICBhdXRvIHRhcmdldFBvaW50ID0gcGFyc2VGbG9hdFBvaW50KGN1cnJlbnQs
IGVuZCk7CisgICAgICAgIGlmICghdGFyZ2V0UG9pbnQpCisgICAgICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OworICAgICAgICAKKyAgICAgICAgTW92ZVRvU2VnbWVudCBzZWdtZW50OworICAg
ICAgICBzZWdtZW50LnRhcmdldFBvaW50ID0gV1RGTW92ZSgqdGFyZ2V0UG9pbnQpOworICAgICAg
ICByZXR1cm4gc2VnbWVudDsKKyAgICB9OwogCi0gICAgcmV0dXJuIGZhbHNlOworICAgIGlmICht
X2lzOEJpdFNvdXJjZSkKKyAgICAgICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0
ZXI4LCBtX2VuZC5tX2NoYXJhY3RlcjgpOworICAgIHJldHVybiBoZWxwZXIobV9jdXJyZW50Lm1f
Y2hhcmFjdGVyMTYsIG1fZW5kLm1fY2hhcmFjdGVyMTYpOwogfQogCi1TVkdQYXRoU2VnVHlwZSBT
VkdQYXRoU3RyaW5nU291cmNlOjpuZXh0Q29tbWFuZChTVkdQYXRoU2VnVHlwZSBwcmV2aW91c0Nv
bW1hbmQpCitPcHRpb25hbDxTVkdQYXRoU291cmNlOjpMaW5lVG9TZWdtZW50PiBTVkdQYXRoU3Ry
aW5nU291cmNlOjpwYXJzZUxpbmVUb1NlZ21lbnQoKQogewotICAgIFNWR1BhdGhTZWdUeXBlIG5l
eHRDb21tYW5kOwotICAgIGlmIChtX2lzOEJpdFNvdXJjZSkgewotICAgICAgICBpZiAobmV4dENv
bW1hbmRIZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyOCwgcHJldmlvdXNDb21tYW5kLCBuZXh0
Q29tbWFuZCkpCi0gICAgICAgICAgICByZXR1cm4gbmV4dENvbW1hbmQ7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgaWYgKG5leHRDb21tYW5kSGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjE2LCBw
cmV2aW91c0NvbW1hbmQsIG5leHRDb21tYW5kKSkKLSAgICAgICAgICAgIHJldHVybiBuZXh0Q29t
bWFuZDsKLSAgICB9CisgICAgYXV0byBoZWxwZXIgPSBbXShjb25zdCBhdXRvKiYgY3VycmVudCwg
Y29uc3QgYXV0byogZW5kKSAtPiBPcHRpb25hbDxMaW5lVG9TZWdtZW50PiB7CisgICAgICAgIGF1
dG8gdGFyZ2V0UG9pbnQgPSBwYXJzZUZsb2F0UG9pbnQoY3VycmVudCwgZW5kKTsKKyAgICAgICAg
aWYgKCF0YXJnZXRQb2ludCkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAg
ICAgIAorICAgICAgICBMaW5lVG9TZWdtZW50IHNlZ21lbnQ7CisgICAgICAgIHNlZ21lbnQudGFy
Z2V0UG9pbnQgPSBXVEZNb3ZlKCp0YXJnZXRQb2ludCk7CisgICAgICAgIHJldHVybiBzZWdtZW50
OworICAgIH07CiAKLSAgICBwYXJzZVNWR1NlZ21lbnRUeXBlKG5leHRDb21tYW5kKTsKLSAgICBy
ZXR1cm4gbmV4dENvbW1hbmQ7Ci19Ci0KLWJvb2wgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VN
b3ZlVG9TZWdtZW50KEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQotewogICAgIGlmIChtX2lzOEJp
dFNvdXJjZSkKLSAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXRQb2ludChtX2N1cnJlbnQubV9jaGFy
YWN0ZXI4LCBtX2VuZC5tX2NoYXJhY3RlcjgsIHRhcmdldFBvaW50KTsKLSAgICByZXR1cm4gcGFy
c2VGbG9hdFBvaW50KG1fY3VycmVudC5tX2NoYXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2
LCB0YXJnZXRQb2ludCk7CisgICAgICAgIHJldHVybiBoZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFj
dGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4KTsKKyAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5t
X2NoYXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2KTsKIH0KIAotYm9vbCBTVkdQYXRoU3Ry
aW5nU291cmNlOjpwYXJzZUxpbmVUb1NlZ21lbnQoRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCitP
cHRpb25hbDxTVkdQYXRoU291cmNlOjpMaW5lVG9Ib3Jpem9udGFsU2VnbWVudD4gU1ZHUGF0aFN0
cmluZ1NvdXJjZTo6cGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudCgpCiB7Ci0gICAgaWYgKG1f
aXM4Qml0U291cmNlKQotICAgICAgICByZXR1cm4gcGFyc2VGbG9hdFBvaW50KG1fY3VycmVudC5t
X2NoYXJhY3RlcjgsIG1fZW5kLm1fY2hhcmFjdGVyOCwgdGFyZ2V0UG9pbnQpOwotICAgIHJldHVy
biBwYXJzZUZsb2F0UG9pbnQobV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYsIG1fZW5kLm1fY2hhcmFj
dGVyMTYsIHRhcmdldFBvaW50KTsKLX0KKyAgICBhdXRvIGhlbHBlciA9IFtdKGNvbnN0IGF1dG8q
JiBjdXJyZW50LCBjb25zdCBhdXRvKiBlbmQpIC0+IE9wdGlvbmFsPExpbmVUb0hvcml6b250YWxT
ZWdtZW50PiB7CisgICAgICAgIGF1dG8geCA9IHBhcnNlTnVtYmVyKGN1cnJlbnQsIGVuZCk7Cisg
ICAgICAgIGlmICgheCkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAg
IAorICAgICAgICBMaW5lVG9Ib3Jpem9udGFsU2VnbWVudCBzZWdtZW50OworICAgICAgICBzZWdt
ZW50LnggPSAqeDsKKyAgICAgICAgcmV0dXJuIHNlZ21lbnQ7CisgICAgfTsKIAotYm9vbCBTVkdQ
YXRoU3RyaW5nU291cmNlOjpwYXJzZUxpbmVUb0hvcml6b250YWxTZWdtZW50KGZsb2F0JiB4KQot
ewogICAgIGlmIChtX2lzOEJpdFNvdXJjZSkKLSAgICAgICAgcmV0dXJuIHBhcnNlTnVtYmVyKG1f
Y3VycmVudC5tX2NoYXJhY3RlcjgsIG1fZW5kLm1fY2hhcmFjdGVyOCwgeCk7Ci0gICAgcmV0dXJu
IHBhcnNlTnVtYmVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2
LCB4KTsKKyAgICAgICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXI4LCBtX2Vu
ZC5tX2NoYXJhY3RlcjgpOworICAgIHJldHVybiBoZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVy
MTYsIG1fZW5kLm1fY2hhcmFjdGVyMTYpOwogfQogCi1ib29sIFNWR1BhdGhTdHJpbmdTb3VyY2U6
OnBhcnNlTGluZVRvVmVydGljYWxTZWdtZW50KGZsb2F0JiB5KQorT3B0aW9uYWw8U1ZHUGF0aFNv
dXJjZTo6TGluZVRvVmVydGljYWxTZWdtZW50PiBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUxp
bmVUb1ZlcnRpY2FsU2VnbWVudCgpCiB7CisgICAgYXV0byBoZWxwZXIgPSBbXShjb25zdCBhdXRv
KiYgY3VycmVudCwgY29uc3QgYXV0byogZW5kKSAtPiBPcHRpb25hbDxMaW5lVG9WZXJ0aWNhbFNl
Z21lbnQ+IHsKKyAgICAgICAgYXV0byB5ID0gcGFyc2VOdW1iZXIoY3VycmVudCwgZW5kKTsKKyAg
ICAgICAgaWYgKCF5KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAg
CisgICAgICAgIExpbmVUb1ZlcnRpY2FsU2VnbWVudCBzZWdtZW50OworICAgICAgICBzZWdtZW50
LnkgPSAqeTsKKyAgICAgICAgcmV0dXJuIHNlZ21lbnQ7CisgICAgfTsKKwogICAgIGlmIChtX2lz
OEJpdFNvdXJjZSkKLSAgICAgICAgcmV0dXJuIHBhcnNlTnVtYmVyKG1fY3VycmVudC5tX2NoYXJh
Y3RlcjgsIG1fZW5kLm1fY2hhcmFjdGVyOCwgeSk7Ci0gICAgcmV0dXJuIHBhcnNlTnVtYmVyKG1f
Y3VycmVudC5tX2NoYXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2LCB5KTsKKyAgICAgICAg
cmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXI4LCBtX2VuZC5tX2NoYXJhY3Rlcjgp
OworICAgIHJldHVybiBoZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYsIG1fZW5kLm1fY2hh
cmFjdGVyMTYpOwogfQogCi1ib29sIFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlQ3VydmVUb0N1
YmljU2VnbWVudChGbG9hdFBvaW50JiBwb2ludDEsIEZsb2F0UG9pbnQmIHBvaW50MiwgRmxvYXRQ
b2ludCYgdGFyZ2V0UG9pbnQpCitPcHRpb25hbDxTVkdQYXRoU291cmNlOjpDdXJ2ZVRvQ3ViaWNT
ZWdtZW50PiBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQoKQog
eworICAgIGF1dG8gaGVscGVyID0gW10oY29uc3QgYXV0byomIGN1cnJlbnQsIGNvbnN0IGF1dG8q
IGVuZCkgLT4gT3B0aW9uYWw8Q3VydmVUb0N1YmljU2VnbWVudD4geworICAgICAgICBhdXRvIHBv
aW50MSA9IHBhcnNlRmxvYXRQb2ludChjdXJyZW50LCBlbmQpOworICAgICAgICBpZiAoIXBvaW50
MSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICAgICAgYXV0byBwb2lu
dDIgPSBwYXJzZUZsb2F0UG9pbnQoY3VycmVudCwgZW5kKTsKKyAgICAgICAgaWYgKCFwb2ludDIp
CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgICAgIGF1dG8gdGFyZ2V0
UG9pbnQgPSBwYXJzZUZsb2F0UG9pbnQoY3VycmVudCwgZW5kKTsKKyAgICAgICAgaWYgKCF0YXJn
ZXRQb2ludCkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICAgICAgQ3Vy
dmVUb0N1YmljU2VnbWVudCBzZWdtZW50OworICAgICAgICBzZWdtZW50LnBvaW50MSA9ICpwb2lu
dDE7CisgICAgICAgIHNlZ21lbnQucG9pbnQyID0gKnBvaW50MjsKKyAgICAgICAgc2VnbWVudC50
YXJnZXRQb2ludCA9ICp0YXJnZXRQb2ludDsKKyAgICAgICAgcmV0dXJuIHNlZ21lbnQ7CisgICAg
fTsKKwogICAgIGlmIChtX2lzOEJpdFNvdXJjZSkKLSAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXRQ
b2ludDMobV9jdXJyZW50Lm1fY2hhcmFjdGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4LCBwb2ludDEs
IHBvaW50MiwgdGFyZ2V0UG9pbnQpOwotICAgIHJldHVybiBwYXJzZUZsb2F0UG9pbnQzKG1fY3Vy
cmVudC5tX2NoYXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2LCBwb2ludDEsIHBvaW50Miwg
dGFyZ2V0UG9pbnQpOworICAgICAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3Rl
cjgsIG1fZW5kLm1fY2hhcmFjdGVyOCk7CisgICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9j
aGFyYWN0ZXIxNiwgbV9lbmQubV9jaGFyYWN0ZXIxNik7CiB9CiAKLWJvb2wgU1ZHUGF0aFN0cmlu
Z1NvdXJjZTo6cGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KEZsb2F0UG9pbnQmIHBvaW50
MSwgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCitPcHRpb25hbDxTVkdQYXRoU291cmNlOjpDdXJ2
ZVRvQ3ViaWNTbW9vdGhTZWdtZW50PiBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUN1cnZlVG9D
dWJpY1Ntb290aFNlZ21lbnQoKQogeworICAgIGF1dG8gaGVscGVyID0gW10oY29uc3QgYXV0byom
IGN1cnJlbnQsIGNvbnN0IGF1dG8qIGVuZCkgLT4gT3B0aW9uYWw8Q3VydmVUb0N1YmljU21vb3Ro
U2VnbWVudD4geworICAgICAgICBhdXRvIHBvaW50MiA9IHBhcnNlRmxvYXRQb2ludChjdXJyZW50
LCBlbmQpOworICAgICAgICBpZiAoIXBvaW50MikKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CisKKyAgICAgICAgYXV0byB0YXJnZXRQb2ludCA9IHBhcnNlRmxvYXRQb2ludChjdXJy
ZW50LCBlbmQpOworICAgICAgICBpZiAoIXRhcmdldFBvaW50KQorICAgICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKworICAgICAgICBDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50IHNlZ21l
bnQ7CisgICAgICAgIHNlZ21lbnQucG9pbnQyID0gKnBvaW50MjsKKyAgICAgICAgc2VnbWVudC50
YXJnZXRQb2ludCA9ICp0YXJnZXRQb2ludDsKKyAgICAgICAgcmV0dXJuIHNlZ21lbnQ7CisgICAg
fTsKKwogICAgIGlmIChtX2lzOEJpdFNvdXJjZSkKLSAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXRQ
b2ludDIobV9jdXJyZW50Lm1fY2hhcmFjdGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4LCBwb2ludDEs
IHRhcmdldFBvaW50KTsKLSAgICByZXR1cm4gcGFyc2VGbG9hdFBvaW50MihtX2N1cnJlbnQubV9j
aGFyYWN0ZXIxNiwgbV9lbmQubV9jaGFyYWN0ZXIxNiwgcG9pbnQxLCB0YXJnZXRQb2ludCk7Cisg
ICAgICAgIHJldHVybiBoZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyOCwgbV9lbmQubV9jaGFy
YWN0ZXI4KTsKKyAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjE2LCBtX2Vu
ZC5tX2NoYXJhY3RlcjE2KTsKIH0KIAotYm9vbCBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUN1
cnZlVG9RdWFkcmF0aWNTZWdtZW50KEZsb2F0UG9pbnQmIHBvaW50MiwgRmxvYXRQb2ludCYgdGFy
Z2V0UG9pbnQpCitPcHRpb25hbDxTVkdQYXRoU291cmNlOjpDdXJ2ZVRvUXVhZHJhdGljU2VnbWVu
dD4gU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCgpCiB7
CisgICAgYXV0byBoZWxwZXIgPSBbXShjb25zdCBhdXRvKiYgY3VycmVudCwgY29uc3QgYXV0byog
ZW5kKSAtPiBPcHRpb25hbDxDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudD4geworICAgICAgICBhdXRv
IHBvaW50MSA9IHBhcnNlRmxvYXRQb2ludChjdXJyZW50LCBlbmQpOworICAgICAgICBpZiAoIXBv
aW50MSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICAgICAgYXV0byB0
YXJnZXRQb2ludCA9IHBhcnNlRmxvYXRQb2ludChjdXJyZW50LCBlbmQpOworICAgICAgICBpZiAo
IXRhcmdldFBvaW50KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgICAg
ICBDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCBzZWdtZW50OworICAgICAgICBzZWdtZW50LnBvaW50
MSA9ICpwb2ludDE7CisgICAgICAgIHNlZ21lbnQudGFyZ2V0UG9pbnQgPSAqdGFyZ2V0UG9pbnQ7
CisgICAgICAgIHJldHVybiBzZWdtZW50OworICAgIH07CisKICAgICBpZiAobV9pczhCaXRTb3Vy
Y2UpCi0gICAgICAgIHJldHVybiBwYXJzZUZsb2F0UG9pbnQyKG1fY3VycmVudC5tX2NoYXJhY3Rl
cjgsIG1fZW5kLm1fY2hhcmFjdGVyOCwgcG9pbnQyLCB0YXJnZXRQb2ludCk7Ci0gICAgcmV0dXJu
IHBhcnNlRmxvYXRQb2ludDIobV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYsIG1fZW5kLm1fY2hhcmFj
dGVyMTYsIHBvaW50MiwgdGFyZ2V0UG9pbnQpOworICAgICAgICByZXR1cm4gaGVscGVyKG1fY3Vy
cmVudC5tX2NoYXJhY3RlcjgsIG1fZW5kLm1fY2hhcmFjdGVyOCk7CisgICAgcmV0dXJuIGhlbHBl
cihtX2N1cnJlbnQubV9jaGFyYWN0ZXIxNiwgbV9lbmQubV9jaGFyYWN0ZXIxNik7CiB9CiAKLWJv
b2wgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVu
dChGbG9hdFBvaW50JiB0YXJnZXRQb2ludCkKK09wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkN1cnZl
VG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50PiBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUN1cnZl
VG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KCkKIHsKKyAgICBhdXRvIGhlbHBlciA9IFtdKGNvbnN0
IGF1dG8qJiBjdXJyZW50LCBjb25zdCBhdXRvKiBlbmQpIC0+IE9wdGlvbmFsPEN1cnZlVG9RdWFk
cmF0aWNTbW9vdGhTZWdtZW50PiB7CisgICAgICAgIGF1dG8gdGFyZ2V0UG9pbnQgPSBwYXJzZUZs
b2F0UG9pbnQoY3VycmVudCwgZW5kKTsKKyAgICAgICAgaWYgKCF0YXJnZXRQb2ludCkKKyAgICAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICAgICAgQ3VydmVUb1F1YWRyYXRpY1Nt
b290aFNlZ21lbnQgc2VnbWVudDsKKyAgICAgICAgc2VnbWVudC50YXJnZXRQb2ludCA9ICp0YXJn
ZXRQb2ludDsKKyAgICAgICAgcmV0dXJuIHNlZ21lbnQ7CisgICAgfTsKKwogICAgIGlmIChtX2lz
OEJpdFNvdXJjZSkKLSAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXRQb2ludChtX2N1cnJlbnQubV9j
aGFyYWN0ZXI4LCBtX2VuZC5tX2NoYXJhY3RlcjgsIHRhcmdldFBvaW50KTsKLSAgICByZXR1cm4g
cGFyc2VGbG9hdFBvaW50KG1fY3VycmVudC5tX2NoYXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3Rl
cjE2LCB0YXJnZXRQb2ludCk7CisgICAgICAgIHJldHVybiBoZWxwZXIobV9jdXJyZW50Lm1fY2hh
cmFjdGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4KTsKKyAgICByZXR1cm4gaGVscGVyKG1fY3VycmVu
dC5tX2NoYXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2KTsKIH0KIAotdGVtcGxhdGUgPHR5
cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgYm9vbCBwYXJzZUFyY1RvU2VnbWVudEhlbHBl
cihjb25zdCBDaGFyYWN0ZXJUeXBlKiYgY3VycmVudCwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5k
LCBmbG9hdCYgcngsIGZsb2F0JiByeSwgZmxvYXQmIGFuZ2xlLCBib29sJiBsYXJnZUFyYywgYm9v
bCYgc3dlZXAsIEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQorT3B0aW9uYWw8U1ZHUGF0aFNvdXJj
ZTo6QXJjVG9TZWdtZW50PiBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUFyY1RvU2VnbWVudCgp
CiB7Ci0gICAgZmxvYXQgdG9YOwotICAgIGZsb2F0IHRvWTsKLSAgICBpZiAoIXBhcnNlTnVtYmVy
KGN1cnJlbnQsIGVuZCwgcngpCi0gICAgICAgIHx8ICFwYXJzZU51bWJlcihjdXJyZW50LCBlbmQs
IHJ5KQotICAgICAgICB8fCAhcGFyc2VOdW1iZXIoY3VycmVudCwgZW5kLCBhbmdsZSkKLSAgICAg
ICAgfHwgIXBhcnNlQXJjRmxhZyhjdXJyZW50LCBlbmQsIGxhcmdlQXJjKQotICAgICAgICB8fCAh
cGFyc2VBcmNGbGFnKGN1cnJlbnQsIGVuZCwgc3dlZXApCi0gICAgICAgIHx8ICFwYXJzZU51bWJl
cihjdXJyZW50LCBlbmQsIHRvWCkKLSAgICAgICAgfHwgIXBhcnNlTnVtYmVyKGN1cnJlbnQsIGVu
ZCwgdG9ZKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHRhcmdldFBvaW50ID0gRmxvYXRQ
b2ludCh0b1gsIHRvWSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19CisgICAgYXV0byBoZWxwZXIgPSBb
XShjb25zdCBhdXRvKiYgY3VycmVudCwgY29uc3QgYXV0byogZW5kKSAtPiBPcHRpb25hbDxBcmNU
b1NlZ21lbnQ+CisgICAgeworICAgICAgICBhdXRvIHJ4ID0gcGFyc2VOdW1iZXIoY3VycmVudCwg
ZW5kKTsKKyAgICAgICAgaWYgKCFyeCkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CisgICAgICAgIGF1dG8gcnkgPSBwYXJzZU51bWJlcihjdXJyZW50LCBlbmQpOworICAgICAgICBp
ZiAoIXJ5KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgYXV0byBh
bmdsZSA9IHBhcnNlTnVtYmVyKGN1cnJlbnQsIGVuZCk7CisgICAgICAgIGlmICghYW5nbGUpCisg
ICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBhdXRvIGxhcmdlQXJjID0g
cGFyc2VBcmNGbGFnKGN1cnJlbnQsIGVuZCk7CisgICAgICAgIGlmICghbGFyZ2VBcmMpCisgICAg
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBhdXRvIHN3ZWVwID0gcGFyc2VB
cmNGbGFnKGN1cnJlbnQsIGVuZCk7CisgICAgICAgIGlmICghc3dlZXApCisgICAgICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBhdXRvIHRhcmdldFBvaW50ID0gcGFyc2VGbG9h
dFBvaW50KGN1cnJlbnQsIGVuZCk7CisgICAgICAgIGlmICghdGFyZ2V0UG9pbnQpCisgICAgICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgICAgIEFyY1RvU2VnbWVudCBzZWdtZW50
OworICAgICAgICBzZWdtZW50LnJ4ID0gKnJ4OworICAgICAgICBzZWdtZW50LnJ5ID0gKnJ5Owor
ICAgICAgICBzZWdtZW50LmFuZ2xlID0gKmFuZ2xlOworICAgICAgICBzZWdtZW50LmxhcmdlQXJj
ID0gKmxhcmdlQXJjOworICAgICAgICBzZWdtZW50LnN3ZWVwID0gKnN3ZWVwOworICAgICAgICBz
ZWdtZW50LnRhcmdldFBvaW50ID0gKnRhcmdldFBvaW50OworICAgICAgICByZXR1cm4gc2VnbWVu
dDsKKyAgICB9OwogCi1ib29sIFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlQXJjVG9TZWdtZW50
KGZsb2F0JiByeCwgZmxvYXQmIHJ5LCBmbG9hdCYgYW5nbGUsIGJvb2wmIGxhcmdlQXJjLCBib29s
JiBzd2VlcCwgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCi17CiAgICAgaWYgKG1faXM4Qml0U291
cmNlKQotICAgICAgICByZXR1cm4gcGFyc2VBcmNUb1NlZ21lbnRIZWxwZXIobV9jdXJyZW50Lm1f
Y2hhcmFjdGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4LCByeCwgcnksIGFuZ2xlLCBsYXJnZUFyYywg
c3dlZXAsIHRhcmdldFBvaW50KTsKLSAgICByZXR1cm4gcGFyc2VBcmNUb1NlZ21lbnRIZWxwZXIo
bV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYsIG1fZW5kLm1fY2hhcmFjdGVyMTYsIHJ4LCByeSwgYW5n
bGUsIGxhcmdlQXJjLCBzd2VlcCwgdGFyZ2V0UG9pbnQpOworICAgICAgICByZXR1cm4gaGVscGVy
KG1fY3VycmVudC5tX2NoYXJhY3RlcjgsIG1fZW5kLm1fY2hhcmFjdGVyOCk7CisgICAgcmV0dXJu
IGhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXIxNiwgbV9lbmQubV9jaGFyYWN0ZXIxNik7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Bh
dGhTdHJpbmdTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0
aFN0cmluZ1NvdXJjZS5oCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHUGF0aFN0cmluZ1NvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxOCArMzIsMTggQEAg
cHVibGljOgogcHJpdmF0ZToKICAgICBib29sIGhhc01vcmVEYXRhKCkgY29uc3QgZmluYWw7CiAg
ICAgYm9vbCBtb3ZlVG9OZXh0VG9rZW4oKSBmaW5hbDsKLSAgICBib29sIHBhcnNlU1ZHU2VnbWVu
dFR5cGUoU1ZHUGF0aFNlZ1R5cGUmKSBmaW5hbDsKICAgICBTVkdQYXRoU2VnVHlwZSBuZXh0Q29t
bWFuZChTVkdQYXRoU2VnVHlwZSBwcmV2aW91c0NvbW1hbmQpIGZpbmFsOwogCi0gICAgYm9vbCBw
YXJzZU1vdmVUb1NlZ21lbnQoRmxvYXRQb2ludCYpIGZpbmFsOwotICAgIGJvb2wgcGFyc2VMaW5l
VG9TZWdtZW50KEZsb2F0UG9pbnQmKSBmaW5hbDsKLSAgICBib29sIHBhcnNlTGluZVRvSG9yaXpv
bnRhbFNlZ21lbnQoZmxvYXQmKSBmaW5hbDsKLSAgICBib29sIHBhcnNlTGluZVRvVmVydGljYWxT
ZWdtZW50KGZsb2F0JikgZmluYWw7Ci0gICAgYm9vbCBwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQo
RmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmLCBGbG9hdFBvaW50JikgZmluYWw7Ci0gICAgYm9vbCBw
YXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQoRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmKSBm
aW5hbDsKLSAgICBib29sIHBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQoRmxvYXRQb2ludCYs
IEZsb2F0UG9pbnQmKSBmaW5hbDsKLSAgICBib29sIHBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290
aFNlZ21lbnQoRmxvYXRQb2ludCYpIGZpbmFsOwotICAgIGJvb2wgcGFyc2VBcmNUb1NlZ21lbnQo
ZmxvYXQmLCBmbG9hdCYsIGZsb2F0JiwgYm9vbCYsIGJvb2wmLCBGbG9hdFBvaW50JikgZmluYWw7
CisgICAgT3B0aW9uYWw8U1ZHUGF0aFNlZ1R5cGU+IHBhcnNlU1ZHU2VnbWVudFR5cGUoKSBmaW5h
bDsKKyAgICBPcHRpb25hbDxNb3ZlVG9TZWdtZW50PiBwYXJzZU1vdmVUb1NlZ21lbnQoKSBmaW5h
bDsKKyAgICBPcHRpb25hbDxMaW5lVG9TZWdtZW50PiBwYXJzZUxpbmVUb1NlZ21lbnQoKSBmaW5h
bDsKKyAgICBPcHRpb25hbDxMaW5lVG9Ib3Jpem9udGFsU2VnbWVudD4gcGFyc2VMaW5lVG9Ib3Jp
em9udGFsU2VnbWVudCgpIGZpbmFsOworICAgIE9wdGlvbmFsPExpbmVUb1ZlcnRpY2FsU2VnbWVu
dD4gcGFyc2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnQoKSBmaW5hbDsKKyAgICBPcHRpb25hbDxDdXJ2
ZVRvQ3ViaWNTZWdtZW50PiBwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQoKSBmaW5hbDsKKyAgICBP
cHRpb25hbDxDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50PiBwYXJzZUN1cnZlVG9DdWJpY1Ntb290
aFNlZ21lbnQoKSBmaW5hbDsKKyAgICBPcHRpb25hbDxDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudD4g
cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCgpIGZpbmFsOworICAgIE9wdGlvbmFsPEN1cnZl
VG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50PiBwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdt
ZW50KCkgZmluYWw7CisgICAgT3B0aW9uYWw8QXJjVG9TZWdtZW50PiBwYXJzZUFyY1RvU2VnbWVu
dCgpIGZpbmFsOwogCiAgICAgU3RyaW5nIG1fc3RyaW5nOwogICAgIGJvb2wgbV9pczhCaXRTb3Vy
Y2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9pbnRMaXN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BvaW50TGlzdC5oCShyZXZpc2lvbiAyNjMxNzYpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9pbnRMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTYz
LDEyICs2MywxMyBAQCBwdWJsaWM6CiAgICAgICAgIGJvb2wgZGVsaW1QYXJzZWQgPSBmYWxzZTsK
ICAgICAgICAgd2hpbGUgKGN1ciA8IGVuZCkgewogICAgICAgICAgICAgZGVsaW1QYXJzZWQgPSBm
YWxzZTsKLSAgICAgICAgICAgIGZsb2F0IHhQb3MgPSAwLjBmOwotICAgICAgICAgICAgaWYgKCFw
YXJzZU51bWJlcihjdXIsIGVuZCwgeFBvcykpCisKKyAgICAgICAgICAgIGF1dG8geFBvcyA9IHBh
cnNlTnVtYmVyKGN1ciwgZW5kKTsKKyAgICAgICAgICAgIGlmICgheFBvcykKICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIGZsb2F0IHlQb3MgPSAwLjBmOwotICAg
ICAgICAgICAgaWYgKCFwYXJzZU51bWJlcihjdXIsIGVuZCwgeVBvcywgZmFsc2UpKQorICAgICAg
ICAgICAgYXV0byB5UG9zID0gcGFyc2VOdW1iZXIoY3VyLCBlbmQsIFN1ZmZpeFNraXBwaW5nUG9s
aWN5OjpEb250U2tpcCk7CisgICAgICAgICAgICBpZiAoIXlQb3MpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoY3VyLCBl
bmQpOwpAQCAtNzksNyArODAsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoY3VyLCBlbmQpOwogCi0gICAgICAgICAgICBhcHBlbmQo
U1ZHUG9pbnQ6OmNyZWF0ZSh7IHhQb3MsIHlQb3MgfSkpOworICAgICAgICAgICAgYXBwZW5kKFNW
R1BvaW50OjpjcmVhdGUoeyAqeFBvcywgKnlQb3MgfSkpOwogICAgICAgICB9CiAKICAgICAgICAg
cmV0dXJuICFkZWxpbVBhcnNlZDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUb09URkZv
bnRDb252ZXJzaW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVG9P
VEZGb250Q29udmVyc2lvbi5jcHAJKHJldmlzaW9uIDI2MzE3NikKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdUb09URkZvbnRDb252ZXJzaW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI5LDgg
KzIyOSw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBhZGRDb2RlcG9pbnRSYW5nZXMoY29uc3QgVW5p
Y29kZVJhbmdlcyYsIEhhc2hTZXQ8R2x5cGg+JiBnbHlwaFNldCkgY29uc3Q7CiAgICAgdm9pZCBh
ZGRDb2RlcG9pbnRzKGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgY29kZXBvaW50cywgSGFzaFNldDxH
bHlwaD4mIGdseXBoU2V0KSBjb25zdDsKICAgICB2b2lkIGFkZEdseXBoTmFtZXMoY29uc3QgSGFz
aFNldDxTdHJpbmc+JiBnbHlwaE5hbWVzLCBIYXNoU2V0PEdseXBoPiYgZ2x5cGhTZXQpIGNvbnN0
OwotICAgIHZvaWQgYWRkS2VybmluZ1BhaXIoVmVjdG9yPEtlcm5pbmdEYXRhPiYsIGNvbnN0IFNW
R0tlcm5pbmdQYWlyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc2l6ZV90IGFw
cGVuZEtFUk5TdWJ0YWJsZShib29sIChUOjoqYnVpbGRLZXJuaW5nUGFpcikoU1ZHS2VybmluZ1Bh
aXImKSBjb25zdCwgdWludDE2X3QgY292ZXJhZ2UpOworICAgIHZvaWQgYWRkS2VybmluZ1BhaXIo
VmVjdG9yPEtlcm5pbmdEYXRhPiYsIFNWR0tlcm5pbmdQYWlyJiYpIGNvbnN0OworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+IHNpemVfdCBhcHBlbmRLRVJOU3VidGFibGUoT3B0aW9uYWw8U1ZHS2Vy
bmluZ1BhaXI+IChUOjoqYnVpbGRLZXJuaW5nUGFpcikoKSBjb25zdCwgdWludDE2X3QgY292ZXJh
Z2UpOwogICAgIHNpemVfdCBmaW5pc2hBcHBlbmRpbmdLRVJOU3VidGFibGUoVmVjdG9yPEtlcm5p
bmdEYXRhPiwgdWludDE2X3QgY292ZXJhZ2UpOwogCiAgICAgdm9pZCBhcHBlbmRMaWdhdHVyZVN1
YnRhYmxlKHNpemVfdCBzdWJ0YWJsZVJlY29yZExvY2F0aW9uKTsKQEAgLTEwNDAsNyArMTA0MCw3
IEBAIHZvaWQgU1ZHVG9PVEZGb250Q29udmVydGVyOjphZGRHbHlwaE5hbWUKICAgICB9CiB9CiAK
LXZvaWQgU1ZHVG9PVEZGb250Q29udmVydGVyOjphZGRLZXJuaW5nUGFpcihWZWN0b3I8S2Vybmlu
Z0RhdGE+JiBkYXRhLCBjb25zdCBTVkdLZXJuaW5nUGFpciYga2VybmluZ1BhaXIpIGNvbnN0Cit2
b2lkIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6YWRkS2VybmluZ1BhaXIoVmVjdG9yPEtlcm5pbmdE
YXRhPiYgZGF0YSwgU1ZHS2VybmluZ1BhaXImJiBrZXJuaW5nUGFpcikgY29uc3QKIHsKICAgICBI
YXNoU2V0PEdseXBoPiBnbHlwaFNldDE7CiAgICAgSGFzaFNldDxHbHlwaD4gZ2x5cGhTZXQyOwpA
QCAtMTA1OSwxMyArMTA1OSwxMyBAQCB2b2lkIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6YWRkS2Vy
bmluZ1BhCiAgICAgfQogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgc2l6ZV90IFNW
R1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kS0VSTlN1YnRhYmxlKGJvb2wgKFQ6OipidWlsZEtl
cm5pbmdQYWlyKShTVkdLZXJuaW5nUGFpciYpIGNvbnN0LCB1aW50MTZfdCBjb3ZlcmFnZSkKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBzaXplX3QgU1ZHVG9PVEZGb250Q29udmVydGVyOjph
cHBlbmRLRVJOU3VidGFibGUoT3B0aW9uYWw8U1ZHS2VybmluZ1BhaXI+IChUOjoqYnVpbGRLZXJu
aW5nUGFpcikoKSBjb25zdCwgdWludDE2X3QgY292ZXJhZ2UpCiB7CiAgICAgVmVjdG9yPEtlcm5p
bmdEYXRhPiBrZXJuaW5nRGF0YTsKICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBjaGlsZHJlbk9m
VHlwZTxUPihtX2ZvbnRFbGVtZW50KSkgewotICAgICAgICBTVkdLZXJuaW5nUGFpciBrZXJuaW5n
UGFpcjsKLSAgICAgICAgaWYgKChlbGVtZW50LipidWlsZEtlcm5pbmdQYWlyKShrZXJuaW5nUGFp
cikpCi0gICAgICAgICAgICBhZGRLZXJuaW5nUGFpcihrZXJuaW5nRGF0YSwga2VybmluZ1BhaXIp
OworICAgICAgICBhdXRvIGtlcm5pbmdQYWlyID0gKGVsZW1lbnQuKmJ1aWxkS2VybmluZ1BhaXIp
KCk7CisgICAgICAgIGlmIChrZXJuaW5nUGFpcikKKyAgICAgICAgICAgIGFkZEtlcm5pbmdQYWly
KGtlcm5pbmdEYXRhLCBXVEZNb3ZlKCprZXJuaW5nUGFpcikpOwogICAgIH0KICAgICByZXR1cm4g
ZmluaXNoQXBwZW5kaW5nS0VSTlN1YnRhYmxlKFdURk1vdmUoa2VybmluZ0RhdGEpLCBjb3ZlcmFn
ZSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtTGlzdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm1MaXN0LmgJKHJldmlzaW9u
IDI2MzE3NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm1MaXN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTExNCwxNyArMTE0LDE4IEBAIHByaXZhdGU6CiAgICAgICAgIGJvb2wgZGVs
aW1QYXJzZWQgPSBmYWxzZTsKICAgICAgICAgd2hpbGUgKHN0YXJ0IDwgZW5kKSB7CiAgICAgICAg
ICAgICBkZWxpbVBhcnNlZCA9IGZhbHNlOwotICAgICAgICAgICAgU1ZHVHJhbnNmb3JtVmFsdWU6
OlNWR1RyYW5zZm9ybVR5cGUgdHlwZSA9IFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JN
X1VOS05PV047CiAgICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoc3RhcnQsIGVuZCk7
Ci0KLSAgICAgICAgICAgIGlmICghU1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VBbmRTa2lwVHlwZShz
dGFydCwgZW5kLCB0eXBlKSkKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYXV0byB0eXBlID0g
U1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VBbmRTa2lwVHlwZShzdGFydCwgZW5kKTsKKyAgICAgICAg
ICAgIGlmICghdHlwZSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAg
ICAgIFJlZjxTVkdUcmFuc2Zvcm0+IHRyYW5zZm9ybSA9IFNWR1RyYW5zZm9ybTo6Y3JlYXRlKHR5
cGUpOwotICAgICAgICAgICAgaWYgKCFTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZVRyYW5zZm9ybVZh
bHVlKHR5cGUsIHN0YXJ0LCBlbmQsIHRyYW5zZm9ybS0+dmFsdWUoKSkpCisgICAgICAgICAgICBh
dXRvIHBhcnNlZFRyYW5zZm9ybVZhbHVlID0gU1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VUcmFuc2Zv
cm1WYWx1ZSgqdHlwZSwgc3RhcnQsIGVuZCk7CisgICAgICAgICAgICBpZiAoIXBhcnNlZFRyYW5z
Zm9ybVZhbHVlKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGFwcGVuZChTVkdUcmFuc2Zvcm06OmNyZWF0ZSgqcGFyc2VkVHJhbnNm
b3JtVmFsdWUpKTsKIAotICAgICAgICAgICAgYXBwZW5kKFdURk1vdmUodHJhbnNmb3JtKSk7CiAg
ICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoc3RhcnQsIGVuZCk7CiAgICAgICAgICAg
ICBpZiAoc3RhcnQgPCBlbmQgJiYgKnN0YXJ0ID09ICcsJykgewogICAgICAgICAgICAgICAgIGRl
bGltUGFyc2VkID0gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm1h
YmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtYWJs
ZS5jcHAJKHJldmlzaW9uIDI2MzE3NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zv
cm1hYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsOCArNDMsMTEgQEAgc3RhdGljIGludCBw
YXJzZVRyYW5zZm9ybVBhcmFtTGlzdChjb25zdAogICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhw
dHIsIGVuZCk7CiAKICAgICB3aGlsZSAocmVxdWlyZWRQYXJhbXMgPCByZXF1aXJlZCkgewotICAg
ICAgICBpZiAocHRyID49IGVuZCB8fCAhcGFyc2VOdW1iZXIocHRyLCBlbmQsIHZhbHVlc1tyZXF1
aXJlZFBhcmFtc10sIGZhbHNlKSkKKyAgICAgICAgaWYgKHB0ciA+PSBlbmQpCiAgICAgICAgICAg
ICByZXR1cm4gLTE7CisgICAgICAgIGF1dG8gcGFyc2VkTnVtYmVyID0gcGFyc2VOdW1iZXIocHRy
LCBlbmQsIFN1ZmZpeFNraXBwaW5nUG9saWN5OjpEb250U2tpcCk7CisgICAgICAgIGlmICghcGFy
c2VkTnVtYmVyKQorICAgICAgICAgICAgdmFsdWVzW3JlcXVpcmVkUGFyYW1zXSA9ICpwYXJzZWRO
dW1iZXI7CiAgICAgICAgIHJlcXVpcmVkUGFyYW1zKys7CiAgICAgICAgIGlmIChyZXF1aXJlZFBh
cmFtcyA8IHJlcXVpcmVkKQogICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxp
bWl0ZXIocHRyLCBlbmQpOwpAQCAtNjMsOCArNjYsMTIgQEAgc3RhdGljIGludCBwYXJzZVRyYW5z
Zm9ybVBhcmFtTGlzdChjb25zdAogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0gZWxzZSB7
CiAgICAgICAgIHdoaWxlIChvcHRpb25hbFBhcmFtcyA8IG9wdGlvbmFsKSB7Ci0gICAgICAgICAg
ICBpZiAocHRyID49IGVuZCB8fCAhcGFyc2VOdW1iZXIocHRyLCBlbmQsIHZhbHVlc1tyZXF1aXJl
ZFBhcmFtcyArIG9wdGlvbmFsUGFyYW1zXSwgZmFsc2UpKQorICAgICAgICAgICAgaWYgKHB0ciA+
PSBlbmQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgYXV0byBwYXJz
ZWROdW1iZXIgPSBwYXJzZU51bWJlcihwdHIsIGVuZCwgU3VmZml4U2tpcHBpbmdQb2xpY3k6OkRv
bnRTa2lwKTsKKyAgICAgICAgICAgIGlmICghcGFyc2VkTnVtYmVyKQorICAgICAgICAgICAgICAg
IHJldHVybiAtMTsKKyAgICAgICAgICAgIHZhbHVlc1tyZXF1aXJlZFBhcmFtcyArIG9wdGlvbmFs
UGFyYW1zXSA9ICpwYXJzZWROdW1iZXI7CiAgICAgICAgICAgICBvcHRpb25hbFBhcmFtcysrOwog
ICAgICAgICAgICAgaWYgKG9wdGlvbmFsUGFyYW1zIDwgb3B0aW9uYWwpCiAgICAgICAgICAgICAg
ICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxpbWl0ZXIocHRyLCBlbmQpOwpAQCAtOTAsMTYg
Kzk3LDE3IEBAIHN0YXRpYyBjb25zdCBpbnQgb3B0aW9uYWxWYWx1ZXNGb3JUeXBlW10KIC8vIFRo
aXMgZGVzdHJ1Y3RvciBpcyBuZWVkZWQgaW4gb3JkZXIgdG8gbGluayBjb3JyZWN0bHkgd2l0aCBJ
bnRlbCBJQ0MuCiBTVkdUcmFuc2Zvcm1hYmxlOjp+U1ZHVHJhbnNmb3JtYWJsZSgpID0gZGVmYXVs
dDsKIAotYm9vbCBTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZVRyYW5zZm9ybVZhbHVlKFNWR1RyYW5z
Zm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlIHR5cGUsIGNvbnN0IFVDaGFyKiYgcHRyLCBjb25z
dCBVQ2hhciogZW5kLCBTVkdUcmFuc2Zvcm1WYWx1ZSYgdHJhbnNmb3JtKQorT3B0aW9uYWw8U1ZH
VHJhbnNmb3JtVmFsdWU+IFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtVmFsdWUoU1ZH
VHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGUgdHlwZSwgY29uc3QgVUNoYXIqJiBwdHIs
IGNvbnN0IFVDaGFyKiBlbmQpCiB7CiAgICAgaWYgKHR5cGUgPT0gU1ZHVHJhbnNmb3JtVmFsdWU6
OlNWR19UUkFOU0ZPUk1fVU5LTk9XTikKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgaW50IHZhbHVlQ291bnQgPSAwOwogICAgIGZsb2F0
IHZhbHVlc1tdID0gezAsIDAsIDAsIDAsIDAsIDB9OwogICAgIGlmICgodmFsdWVDb3VudCA9IHBh
cnNlVHJhbnNmb3JtUGFyYW1MaXN0KHB0ciwgZW5kLCB2YWx1ZXMsIHJlcXVpcmVkVmFsdWVzRm9y
VHlwZVt0eXBlXSwgb3B0aW9uYWxWYWx1ZXNGb3JUeXBlW3R5cGVdKSkgPCAwKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKKyAgICBTVkdUcmFu
c2Zvcm1WYWx1ZSB0cmFuc2Zvcm07CiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgY2FzZSBTVkdU
cmFuc2Zvcm1WYWx1ZTo6U1ZHX1RSQU5TRk9STV9VTktOT1dOOgogICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKQEAgLTEzMyw3ICsxNDEsNyBAQCBib29sIFNWR1RyYW5zZm9ybWFibGU6OnBh
cnNlVHJhbnNmb3JtVmFsCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIHJldHVybiB0cnVl
OworICAgIHJldHVybiB0cmFuc2Zvcm07CiB9CiAKIHN0YXRpYyBjb25zdCBVQ2hhciBza2V3WERl
c2NbXSA9ICB7J3MnLCAnaycsICdlJywgJ3cnLCAnWCd9OwpAQCAtMTQzLDM5ICsxNTEsMzUgQEAg
c3RhdGljIGNvbnN0IFVDaGFyIHRyYW5zbGF0ZURlc2NbXSA9ICB7Jwogc3RhdGljIGNvbnN0IFVD
aGFyIHJvdGF0ZURlc2NbXSA9ICB7J3InLCAnbycsICd0JywgJ2EnLCAndCcsICdlJ307CiBzdGF0
aWMgY29uc3QgVUNoYXIgbWF0cml4RGVzY1tdID0gIHsnbScsICdhJywgJ3QnLCAncicsICdpJywg
J3gnfTsKIAotYm9vbCBTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZUFuZFNraXBUeXBlKGNvbnN0IFVD
aGFyKiYgY3VyclRyYW5zZm9ybSwgY29uc3QgVUNoYXIqIGVuZCwgU1ZHVHJhbnNmb3JtVmFsdWU6
OlNWR1RyYW5zZm9ybVR5cGUmIHR5cGUpCitPcHRpb25hbDxTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZH
VHJhbnNmb3JtVHlwZT4gU1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VBbmRTa2lwVHlwZShjb25zdCBV
Q2hhciomIGN1cnJUcmFuc2Zvcm0sIGNvbnN0IFVDaGFyKiBlbmQpCiB7CiAgICAgaWYgKGN1cnJU
cmFuc2Zvcm0gPj0gZW5kKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiAKICAgICBpZiAoKmN1cnJUcmFuc2Zvcm0gPT0gJ3MnKSB7CiAgICAgICAg
IGlmIChza2lwU3RyaW5nKGN1cnJUcmFuc2Zvcm0sIGVuZCwgc2tld1hEZXNjLCBXVEZfQVJSQVlf
TEVOR1RIKHNrZXdYRGVzYykpKQotICAgICAgICAgICAgdHlwZSA9IFNWR1RyYW5zZm9ybVZhbHVl
OjpTVkdfVFJBTlNGT1JNX1NLRVdYOworICAgICAgICAgICAgcmV0dXJuIFNWR1RyYW5zZm9ybVZh
bHVlOjpTVkdfVFJBTlNGT1JNX1NLRVdYOwogICAgICAgICBlbHNlIGlmIChza2lwU3RyaW5nKGN1
cnJUcmFuc2Zvcm0sIGVuZCwgc2tld1lEZXNjLCBXVEZfQVJSQVlfTEVOR1RIKHNrZXdZRGVzYykp
KQotICAgICAgICAgICAgdHlwZSA9IFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX1NL
RVdZOworICAgICAgICAgICAgcmV0dXJuIFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JN
X1NLRVdZOwogICAgICAgICBlbHNlIGlmIChza2lwU3RyaW5nKGN1cnJUcmFuc2Zvcm0sIGVuZCwg
c2NhbGVEZXNjLCBXVEZfQVJSQVlfTEVOR1RIKHNjYWxlRGVzYykpKQotICAgICAgICAgICAgdHlw
ZSA9IFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX1NDQUxFOworICAgICAgICAgICAg
cmV0dXJuIFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX1NDQUxFOwogICAgICAgICBl
bHNlCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogICAgIH0gZWxzZSBpZiAoc2tpcFN0cmluZyhjdXJyVHJhbnNmb3JtLCBlbmQsIHRy
YW5zbGF0ZURlc2MsIFdURl9BUlJBWV9MRU5HVEgodHJhbnNsYXRlRGVzYykpKQotICAgICAgICB0
eXBlID0gU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR19UUkFOU0ZPUk1fVFJBTlNMQVRFOworICAgICAg
ICByZXR1cm4gU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR19UUkFOU0ZPUk1fVFJBTlNMQVRFOwogICAg
IGVsc2UgaWYgKHNraXBTdHJpbmcoY3VyclRyYW5zZm9ybSwgZW5kLCByb3RhdGVEZXNjLCBXVEZf
QVJSQVlfTEVOR1RIKHJvdGF0ZURlc2MpKSkKLSAgICAgICAgdHlwZSA9IFNWR1RyYW5zZm9ybVZh
bHVlOjpTVkdfVFJBTlNGT1JNX1JPVEFURTsKKyAgICAgICAgcmV0dXJuIFNWR1RyYW5zZm9ybVZh
bHVlOjpTVkdfVFJBTlNGT1JNX1JPVEFURTsKICAgICBlbHNlIGlmIChza2lwU3RyaW5nKGN1cnJU
cmFuc2Zvcm0sIGVuZCwgbWF0cml4RGVzYywgV1RGX0FSUkFZX0xFTkdUSChtYXRyaXhEZXNjKSkp
Ci0gICAgICAgIHR5cGUgPSBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RSQU5TRk9STV9NQVRSSVg7
Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBTVkdUcmFu
c2Zvcm1WYWx1ZTo6U1ZHX1RSQU5TRk9STV9NQVRSSVg7CiAKLSAgICByZXR1cm4gdHJ1ZTsKKyAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCiBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNm
b3JtVHlwZSBTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZVRyYW5zZm9ybVR5cGUoY29uc3QgU3RyaW5n
JiB0eXBlU3RyaW5nKQogewotICAgIFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBl
IHR5cGUgPSBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RSQU5TRk9STV9VTktOT1dOOwogICAgIGF1
dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyh0eXBlU3RyaW5nKS51cGNvbnZl
cnRlZENoYXJhY3RlcnMoKTsKICAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycyA9IHVwY29udmVy
dGVkQ2hhcmFjdGVyczsKLSAgICBwYXJzZUFuZFNraXBUeXBlKGNoYXJhY3RlcnMsIGNoYXJhY3Rl
cnMgKyB0eXBlU3RyaW5nLmxlbmd0aCgpLCB0eXBlKTsKLSAgICByZXR1cm4gdHlwZTsKKyAgICBy
ZXR1cm4gcGFyc2VBbmRTa2lwVHlwZShjaGFyYWN0ZXJzLCBjaGFyYWN0ZXJzICsgdHlwZVN0cmlu
Zy5sZW5ndGgoKSkudmFsdWVPcihTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RSQU5TRk9STV9VTktO
T1dOKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybWFibGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtYWJsZS5oCShy
ZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtYWJsZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw5ICszMiw5IEBAIGNsYXNzIFNWR1RyYW5zZm9ybWFibGUg
OiBwdWJsaWMgU1ZHTG9jYXQKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5TVkdUcmFuc2Zvcm1hYmxl
KCk7CiAKLSAgICBzdGF0aWMgYm9vbCBwYXJzZVRyYW5zZm9ybVZhbHVlKFNWR1RyYW5zZm9ybVZh
bHVlOjpTVkdUcmFuc2Zvcm1UeXBlLCBjb25zdCBVQ2hhciomIHB0ciwgY29uc3QgVUNoYXIqIGVu
ZCwgU1ZHVHJhbnNmb3JtVmFsdWUmKTsKKyAgICBzdGF0aWMgT3B0aW9uYWw8U1ZHVHJhbnNmb3Jt
VmFsdWU+IHBhcnNlVHJhbnNmb3JtVmFsdWUoU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9y
bVR5cGUsIGNvbnN0IFVDaGFyKiYgcHRyLCBjb25zdCBVQ2hhciogZW5kKTsKICAgICBzdGF0aWMg
U1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGUgcGFyc2VUcmFuc2Zvcm1UeXBlKGNv
bnN0IFN0cmluZyYpOwotICAgIHN0YXRpYyBib29sIHBhcnNlQW5kU2tpcFR5cGUoY29uc3QgVUNo
YXIqJiBjdXJyVHJhbnNmb3JtLCBjb25zdCBVQ2hhciogZW5kLCBTVkdUcmFuc2Zvcm1WYWx1ZTo6
U1ZHVHJhbnNmb3JtVHlwZSYpOworICAgIHN0YXRpYyBPcHRpb25hbDxTVkdUcmFuc2Zvcm1WYWx1
ZTo6U1ZHVHJhbnNmb3JtVHlwZT4gcGFyc2VBbmRTa2lwVHlwZShjb25zdCBVQ2hhciomIGN1cnJU
cmFuc2Zvcm0sIGNvbnN0IFVDaGFyKiBlbmQpOwogCiAgICAgQWZmaW5lVHJhbnNmb3JtIGxvY2Fs
Q29vcmRpbmF0ZVNwYWNlVHJhbnNmb3JtKFNWR0xvY2F0YWJsZTo6Q1RNU2NvcGUpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIGFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKTsgfQogICAgIHZpcnR1YWwg
QWZmaW5lVHJhbnNmb3JtIGFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKSBjb25zdCA9IDA7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVktlcm5FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHVktlcm5FbGVtZW50LmNwcAkocmV2aXNpb24gMjYzMTc2KQor
KysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ZLZXJuRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQzLDI0ICs0Myw0NCBAQCBSZWY8U1ZHVktlcm5FbGVtZW50PiBTVkdWS2VybkVsZW1lbnQ6
OmNyCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZHVktlcm5FbGVtZW50KHRhZ05hbWUsIGRv
Y3VtZW50KSk7CiB9CiAKLWJvb2wgU1ZHVktlcm5FbGVtZW50OjpidWlsZFZlcnRpY2FsS2Vybmlu
Z1BhaXIoU1ZHS2VybmluZ1BhaXImIGtlcm5pbmdQYWlyKSBjb25zdAorT3B0aW9uYWw8U1ZHS2Vy
bmluZ1BhaXI+IFNWR1ZLZXJuRWxlbWVudDo6YnVpbGRWZXJ0aWNhbEtlcm5pbmdQYWlyKCkgY29u
c3QKIHsKKyAgICAvLyBGSVhNRTogQ2FuIHRoaXMgYmUgc2hhcmVkIHdpdGggU1ZHSEtlcm5FbGVt
ZW50OjpidWlsZFZlcnRpY2FsS2VybmluZ1BhaXI/CisKICAgICBhdXRvJiB1MSA9IGF0dHJpYnV0
ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oU1ZHTmFtZXM6OnUxQXR0cik7CiAgICAgYXV0byYgZzEg
PSBhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFNWR05hbWVzOjpnMUF0dHIpOwogICAg
IGF1dG8mIHUyID0gYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihTVkdOYW1lczo6dTJB
dHRyKTsKICAgICBhdXRvJiBnMiA9IGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oU1ZH
TmFtZXM6OmcyQXR0cik7CiAgICAgaWYgKCh1MS5pc0VtcHR5KCkgJiYgZzEuaXNFbXB0eSgpKSB8
fCAodTIuaXNFbXB0eSgpICYmIGcyLmlzRW1wdHkoKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIGF1dG8gZ2x5cGhOYW1lMSA9IHBh
cnNlR2x5cGhOYW1lKGcxKTsKKyAgICBpZiAoIWdseXBoTmFtZTEpCisgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CisgICAgYXV0byBnbHlwaE5hbWUyID0gcGFyc2VHbHlwaE5hbWUoZzIpOwor
ICAgIGlmICghZ2x5cGhOYW1lMikKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBh
dXRvIHVuaWNvZGVTdHJpbmcxID0gcGFyc2VLZXJuaW5nVW5pY29kZVN0cmluZyh1MSk7CisgICAg
aWYgKCF1bmljb2RlU3RyaW5nMSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBh
dXRvIHVuaWNvZGVTdHJpbmcyID0gcGFyc2VLZXJuaW5nVW5pY29kZVN0cmluZyh1Mik7CisgICAg
aWYgKCF1bmljb2RlU3RyaW5nMikKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAg
IGJvb2wgb2sgPSBmYWxzZTsKKyAgICBhdXRvIGtlcm5pbmcgPSBhdHRyaWJ1dGVXaXRob3V0U3lu
Y2hyb25pemF0aW9uKFNWR05hbWVzOjprQXR0cikuc3RyaW5nKCkudG9GbG9hdCgmb2spOworICAg
IGlmICghb2spCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBpZiAocGFyc2VH
bHlwaE5hbWUoZzEsIGtlcm5pbmdQYWlyLmdseXBoTmFtZTEpCi0gICAgICAgICYmIHBhcnNlR2x5
cGhOYW1lKGcyLCBrZXJuaW5nUGFpci5nbHlwaE5hbWUyKQotICAgICAgICAmJiBwYXJzZUtlcm5p
bmdVbmljb2RlU3RyaW5nKHUxLCBrZXJuaW5nUGFpci51bmljb2RlUmFuZ2UxLCBrZXJuaW5nUGFp
ci51bmljb2RlTmFtZTEpCi0gICAgICAgICYmIHBhcnNlS2VybmluZ1VuaWNvZGVTdHJpbmcodTIs
IGtlcm5pbmdQYWlyLnVuaWNvZGVSYW5nZTIsIGtlcm5pbmdQYWlyLnVuaWNvZGVOYW1lMikpIHsK
LSAgICAgICAgYm9vbCBvayA9IGZhbHNlOwotICAgICAgICBrZXJuaW5nUGFpci5rZXJuaW5nID0g
YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihTVkdOYW1lczo6a0F0dHIpLnN0cmluZygp
LnRvRmxvYXQoJm9rKTsKLSAgICAgICAgcmV0dXJuIG9rOwotICAgIH0KLSAgICByZXR1cm4gZmFs
c2U7CisgICAgU1ZHS2VybmluZ1BhaXIga2VybmluZ1BhaXI7CisgICAga2VybmluZ1BhaXIuZ2x5
cGhOYW1lMSA9IFdURk1vdmUoKmdseXBoTmFtZTEpOworICAgIGtlcm5pbmdQYWlyLmdseXBoTmFt
ZTIgPSBXVEZNb3ZlKCpnbHlwaE5hbWUyKTsKKyAgICBrZXJuaW5nUGFpci51bmljb2RlUmFuZ2Ux
ID0gV1RGTW92ZSh1bmljb2RlU3RyaW5nMS0+Zmlyc3QpOworICAgIGtlcm5pbmdQYWlyLnVuaWNv
ZGVOYW1lMSA9IFdURk1vdmUodW5pY29kZVN0cmluZzEtPnNlY29uZCk7CisgICAga2VybmluZ1Bh
aXIudW5pY29kZVJhbmdlMiA9IFdURk1vdmUodW5pY29kZVN0cmluZzItPmZpcnN0KTsKKyAgICBr
ZXJuaW5nUGFpci51bmljb2RlTmFtZTIgPSBXVEZNb3ZlKHVuaWNvZGVTdHJpbmcyLT5zZWNvbmQp
OworICAgIGtlcm5pbmdQYWlyLmtlcm5pbmcgPSBrZXJuaW5nOworICAgIHJldHVybiBrZXJuaW5n
UGFpcjsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ZLZXJuRWxlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdWS2VybkVsZW1lbnQuaAkocmV2
aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ZLZXJuRWxlbWVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBAIGNsYXNzIFNWR1ZLZXJuRWxlbWVudCBmaW5h
bCA6IHB1YmxpYyBTVkcKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPFNWR1ZLZXJuRWxlbWVudD4g
Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCYpOwogCi0gICAgYm9vbCBidWls
ZFZlcnRpY2FsS2VybmluZ1BhaXIoU1ZHS2VybmluZ1BhaXImIGtlcm5pbmdQYWlyKSBjb25zdDsK
KyAgICBPcHRpb25hbDxTVkdLZXJuaW5nUGFpcj4gYnVpbGRWZXJ0aWNhbEtlcm5pbmdQYWlyKCkg
Y29uc3Q7CiAKIHByaXZhdGU6CiAgICAgU1ZHVktlcm5FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5h
bWUmLCBEb2N1bWVudCYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ZpZXdTcGVjLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVmlld1NwZWMuY3BwCShyZXZp
c2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVmlld1NwZWMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04OSwxMCArODksNyBAQCBib29sIFNWR1ZpZXdTcGVjOjpwYXJzZVZpZXdT
cGVjKGNvbnN0IFN0CiAgICAgICAgICAgICAgICAgaWYgKGN1cnJWaWV3U3BlYyA+PSBlbmQgfHwg
KmN1cnJWaWV3U3BlYyAhPSAnKCcpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgICAgICAgICBjdXJyVmlld1NwZWMrKzsKLSAgICAgICAgICAgICAgICBGbG9hdFJl
Y3Qgdmlld0JveDsKLSAgICAgICAgICAgICAgICBpZiAoIVNWR0ZpdFRvVmlld0JveDo6cGFyc2VW
aWV3Qm94KGN1cnJWaWV3U3BlYywgZW5kLCB2aWV3Qm94LCBmYWxzZSkpCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBzZXRWaWV3Qm94KHZpZXdCb3gp
OworICAgICAgICAgICAgICAgIHNldFZpZXdCb3goU1ZHRml0VG9WaWV3Qm94OjpwYXJzZVZpZXdC
b3goY3VyclZpZXdTcGVjLCBlbmQsIGZhbHNlKS52YWx1ZSgpKTsKICAgICAgICAgICAgICAgICBp
ZiAoY3VyclZpZXdTcGVjID49IGVuZCB8fCAqY3VyclZpZXdTcGVjICE9ICcpJykKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIGN1cnJWaWV3U3BlYysr
OwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRp
dmVWYWx1ZUZ1bmN0aW9uSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9w
cm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbkltcGwuaAkocmV2aXNp
b24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0aW9u
QWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTQsMTAgKzI1
NCw4IEBAIHB1YmxpYzoKIAogICAgIE9wdGlvbmFsPGZsb2F0PiBjYWxjdWxhdGVEaXN0YW5jZShT
VkdFbGVtZW50KiwgY29uc3QgU3RyaW5nJiBmcm9tLCBjb25zdCBTdHJpbmcmIHRvKSBjb25zdCBv
dmVycmlkZQogICAgIHsKLSAgICAgICAgZmxvYXQgZnJvbU51bWJlciA9IDA7Ci0gICAgICAgIGZs
b2F0IHRvTnVtYmVyID0gMDsKLSAgICAgICAgcGFyc2VOdW1iZXJGcm9tU3RyaW5nKGZyb20sIGZy
b21OdW1iZXIpOwotICAgICAgICBwYXJzZU51bWJlckZyb21TdHJpbmcodG8sIHRvTnVtYmVyKTsK
KyAgICAgICAgZmxvYXQgZnJvbU51bWJlciA9IHBhcnNlTnVtYmVyKGZyb20pLnZhbHVlT3IoMCk7
CisgICAgICAgIGZsb2F0IHRvTnVtYmVyID0gcGFyc2VOdW1iZXIodG8pLnZhbHVlT3IoMCk7CiAg
ICAgICAgIHJldHVybiBmYWJzZih0b051bWJlciAtIGZyb21OdW1iZXIpOwogICAgIH0KIApJbmRl
eDogU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHUHJvcGVydHlUcmFpdHMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdQcm9wZXJ0eVRyYWl0
cy5oCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9T
VkdQcm9wZXJ0eVRyYWl0cy5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSwxMCArNzUsMTAgQEAgc3Ry
dWN0IFNWR1Byb3BlcnR5VHJhaXRzPHN0ZDo6cGFpcjxpbnQsIAogICAgIHN0YXRpYyBzdGQ6OnBh
aXI8aW50LCBpbnQ+IGluaXRpYWxWYWx1ZSgpIHsgcmV0dXJuIHsgfTsgfQogICAgIHN0YXRpYyBz
dGQ6OnBhaXI8aW50LCBpbnQ+IGZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiAgICAg
ewotICAgICAgICBmbG9hdCBmaXJzdE51bWJlciA9IDAsIHNlY29uZE51bWJlciA9IDA7Ci0gICAg
ICAgIGlmICghcGFyc2VOdW1iZXJPcHRpb25hbE51bWJlcihzdHJpbmcsIGZpcnN0TnVtYmVyLCBz
ZWNvbmROdW1iZXIpKQorICAgICAgICBhdXRvIHJlc3VsdCA9IHBhcnNlTnVtYmVyT3B0aW9uYWxO
dW1iZXIoc3RyaW5nKTsKKyAgICAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgICAgICByZXR1cm4g
eyB9OwotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoc3RhdGljX2Nhc3Q8aW50Pihyb3Vu
ZGYoZmlyc3ROdW1iZXIpKSwgc3RhdGljX2Nhc3Q8aW50Pihyb3VuZGYoc2Vjb25kTnVtYmVyKSkp
OworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoc3RhdGljX2Nhc3Q8aW50Pihyb3VuZGYo
cmVzdWx0LT5maXJzdCkpLCBzdGF0aWNfY2FzdDxpbnQ+KHJvdW5kZihyZXN1bHQtPnNlY29uZCkp
KTsKICAgICB9CiAgICAgc3RhdGljIE9wdGlvbmFsPHN0ZDo6cGFpcjxpbnQsIGludD4+IHBhcnNl
KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBTdHJpbmcmKSB7IEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOyByZXR1cm4gaW5pdGlhbFZhbHVlKCk7IH0KICAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5n
KHN0ZDo6cGFpcjxpbnQsIGludD4pIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBlbXB0
eVN0cmluZygpOyB9CkBAIC04OSwxNyArODksMTEgQEAgc3RydWN0IFNWR1Byb3BlcnR5VHJhaXRz
PGZsb2F0PiB7CiAgICAgc3RhdGljIGZsb2F0IGluaXRpYWxWYWx1ZSgpIHsgcmV0dXJuIDA7IH0K
ICAgICBzdGF0aWMgZmxvYXQgZnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKICAgICB7
Ci0gICAgICAgIGZsb2F0IG51bWJlciA9IDA7Ci0gICAgICAgIGlmICghcGFyc2VOdW1iZXJGcm9t
U3RyaW5nKHN0cmluZywgbnVtYmVyKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBy
ZXR1cm4gbnVtYmVyOworICAgICAgICByZXR1cm4gcGFyc2VOdW1iZXIoc3RyaW5nKS52YWx1ZU9y
KDApOwogICAgIH0KICAgICBzdGF0aWMgT3B0aW9uYWw8ZmxvYXQ+IHBhcnNlKGNvbnN0IFF1YWxp
ZmllZE5hbWUmLCBjb25zdCBTdHJpbmcmIHN0cmluZykKICAgICB7Ci0gICAgICAgIGZsb2F0IG51
bWJlcjsKLSAgICAgICAgaWYgKCFwYXJzZU51bWJlckZyb21TdHJpbmcoc3RyaW5nLCBudW1iZXIp
KQotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAgcmV0dXJuIG51bWJl
cjsKKyAgICAgICAgcmV0dXJuIHBhcnNlTnVtYmVyKHN0cmluZyk7CiAgICAgfQogICAgIHN0YXRp
YyBTdHJpbmcgdG9TdHJpbmcoZmxvYXQgdHlwZSkgeyByZXR1cm4gU3RyaW5nOjpudW1iZXIodHlw
ZSk7IH0KIH07CkBAIC0xMDksMTAgKzEwMyw3IEBAIHN0cnVjdCBTVkdQcm9wZXJ0eVRyYWl0czxz
dGQ6OnBhaXI8ZmxvYXQKICAgICBzdGF0aWMgc3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4gaW5pdGlh
bFZhbHVlKCkgeyByZXR1cm4geyB9OyB9CiAgICAgc3RhdGljIHN0ZDo6cGFpcjxmbG9hdCwgZmxv
YXQ+IGZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiAgICAgewotICAgICAgICBmbG9h
dCBmaXJzdE51bWJlciA9IDAsIHNlY29uZE51bWJlciA9IDA7Ci0gICAgICAgIGlmICghcGFyc2VO
dW1iZXJPcHRpb25hbE51bWJlcihzdHJpbmcsIGZpcnN0TnVtYmVyLCBzZWNvbmROdW1iZXIpKQot
ICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGZp
cnN0TnVtYmVyLCBzZWNvbmROdW1iZXIpOworICAgICAgICByZXR1cm4gcGFyc2VOdW1iZXJPcHRp
b25hbE51bWJlcihzdHJpbmcpLnZhbHVlT3Ioc3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4geyB9KTsK
ICAgICB9CiAgICAgc3RhdGljIE9wdGlvbmFsPHN0ZDo6cGFpcjxmbG9hdCwgZmxvYXQ+PiBwYXJz
ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgU3RyaW5nJikgeyBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsgcmV0dXJuIGluaXRpYWxWYWx1ZSgpOyB9CiAgICAgc3RhdGljIFN0cmluZyB0b1N0cmlu
ZyhzdGQ6OnBhaXI8ZmxvYXQsIGZsb2F0PikgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJu
IGVtcHR5U3RyaW5nKCk7IH0KQEAgLTEyMywxNyArMTE0LDExIEBAIHN0cnVjdCBTVkdQcm9wZXJ0
eVRyYWl0czxGbG9hdFBvaW50PiB7CiAgICAgc3RhdGljIEZsb2F0UG9pbnQgaW5pdGlhbFZhbHVl
KCkgeyByZXR1cm4gRmxvYXRQb2ludCgpOyB9CiAgICAgc3RhdGljIEZsb2F0UG9pbnQgZnJvbVN0
cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKICAgICB7Ci0gICAgICAgIEZsb2F0UG9pbnQgcG9p
bnQ7Ci0gICAgICAgIGlmICghcGFyc2VQb2ludChzdHJpbmcsIHBvaW50KSkKLSAgICAgICAgICAg
IHJldHVybiB7IH07Ci0gICAgICAgIHJldHVybiBwb2ludDsKKyAgICAgICAgcmV0dXJuIHBhcnNl
UG9pbnQoc3RyaW5nKS52YWx1ZU9yKEZsb2F0UG9pbnQgeyB9KTsKICAgICB9CiAgICAgc3RhdGlj
IE9wdGlvbmFsPEZsb2F0UG9pbnQ+IHBhcnNlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBT
dHJpbmcmIHN0cmluZykKICAgICB7Ci0gICAgICAgIEZsb2F0UG9pbnQgcG9pbnQ7Ci0gICAgICAg
IGlmICghcGFyc2VQb2ludChzdHJpbmcsIHBvaW50KSkKLSAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7Ci0gICAgICAgIHJldHVybiBwb2ludDsKKyAgICAgICAgcmV0dXJuIHBhcnNlUG9p
bnQoc3RyaW5nKTsKICAgICB9CiAgICAgc3RhdGljIFN0cmluZyB0b1N0cmluZyhjb25zdCBGbG9h
dFBvaW50JiB0eXBlKQogICAgIHsKQEAgLTE0NiwxNyArMTMxLDExIEBAIHN0cnVjdCBTVkdQcm9w
ZXJ0eVRyYWl0czxGbG9hdFJlY3Q+IHsKICAgICBzdGF0aWMgRmxvYXRSZWN0IGluaXRpYWxWYWx1
ZSgpIHsgcmV0dXJuIEZsb2F0UmVjdCgpOyB9CiAgICAgc3RhdGljIEZsb2F0UmVjdCBmcm9tU3Ry
aW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKQogICAgIHsKLSAgICAgICAgRmxvYXRSZWN0IHJlY3Q7
Ci0gICAgICAgIGlmICghcGFyc2VSZWN0KHN0cmluZywgcmVjdCkpCi0gICAgICAgICAgICByZXR1
cm4geyB9OwotICAgICAgICByZXR1cm4gcmVjdDsKKyAgICAgICAgcmV0dXJuIHBhcnNlUmVjdChz
dHJpbmcpLnZhbHVlT3IoRmxvYXRSZWN0IHsgfSk7CiAgICAgfQogICAgIHN0YXRpYyBPcHRpb25h
bDxGbG9hdFJlY3Q+IHBhcnNlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBTdHJpbmcmIHN0
cmluZykKICAgICB7Ci0gICAgICAgIEZsb2F0UmVjdCByZWN0OwotICAgICAgICBpZiAoIXBhcnNl
UmVjdChzdHJpbmcsIHJlY3QpKQotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAg
ICAgICAgcmV0dXJuIHJlY3Q7CisgICAgICAgIHJldHVybiBwYXJzZVJlY3Qoc3RyaW5nKTsKICAg
ICB9CiAgICAgc3RhdGljIFN0cmluZyB0b1N0cmluZyhjb25zdCBGbG9hdFJlY3QmIHR5cGUpCiAg
ICAgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>402365</attachid>
            <date>2020-06-19 18:09:30 -0700</date>
            <delta_ts>2020-06-19 19:04:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213416-20200619180929.patch</filename>
            <type>text/plain</type>
            <size>144321</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MzI5NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3MSBAQAorMjAyMC0wNi0xOSAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQ29udmVydCBtdWNoIG9mIHRoZSBT
Vkcgc3RyaW5nIHBhcnNpbmcgY29kZSB0byB1c2UgT3B0aW9uYWwgYmFzZWQgcmV0dXJuIHZhbHVl
cyByYXRoZXIgdGhhbiBvdXQtcGFyYW1ldGVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEzNDE2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgV0lQCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogc3ZnL1NWR0FuZ2xlVmFsdWUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6cGFyc2VBbmdsZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5nbGVW
YWx1ZTo6c2V0VmFsdWVBc1N0cmluZyk6CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVNb3Rpb25F
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVNb3Rpb25FbGVtZW50Ojpj
YWxjdWxhdGVUb0F0RW5kT2ZEdXJhdGlvblZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0Fu
aW1hdGVNb3Rpb25FbGVtZW50OjpjYWxjdWxhdGVGcm9tQW5kVG9WYWx1ZXMpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OmNhbGN1bGF0ZUZyb21BbmRCeVZhbHVl
cyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6Y2FsY3VsYXRl
RGlzdGFuY2UpOgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OnBhcnNlS2V5U3BsaW5lcyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmlt
YXRpb25FbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisgICAgICAgICogc3ZnL1NWR0ZFQ29udm9s
dmVNYXRyaXhFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFQ29udm9sdmVNYXRy
aXhFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisgICAgICAgICogc3ZnL1NWR0ZFRGlmZnVzZUxp
Z2h0aW5nRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURpZmZ1c2VMaWdodGlu
Z0VsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKiBzdmcvU1ZHRkVEcm9wU2hhZG93
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURyb3BTaGFkb3dFbGVtZW50Ojpw
YXJzZUF0dHJpYnV0ZSk6CisgICAgICAgICogc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OnBhcnNlQXR0
cmlidXRlKToKKyAgICAgICAgKiBzdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRkVJbWFnZUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKiBz
dmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRU1v
cnBob2xvZ3lFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisgICAgICAgICogc3ZnL1NWR0ZFU3Bl
Y3VsYXJMaWdodGluZ0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVTcGVjdWxh
ckxpZ2h0aW5nRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAgICAgICAqIHN2Zy9TVkdGRVR1
cmJ1bGVuY2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFVHVyYnVsZW5jZUVs
ZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKiBzdmcvU1ZHRml0VG9WaWV3Qm94LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpdFRvVmlld0JveDo6cGFyc2VBdHRyaWJ1dGUpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRml0VG9WaWV3Qm94OjpwYXJzZVZpZXdCb3gpOgorICAgICAg
ICAqIHN2Zy9TVkdGaXRUb1ZpZXdCb3guaDoKKyAgICAgICAgKiBzdmcvU1ZHR2x5cGhSZWZFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlRmxvYXQpOgorICAgICAgICAqIHN2Zy9T
VkdIS2VybkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSEtlcm5FbGVtZW50Ojpi
dWlsZEhvcml6b250YWxLZXJuaW5nUGFpciBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0hLZXJu
RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdJbWFnZUVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHSW1hZ2VFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisgICAgICAgICogc3Zn
L1NWR0xlbmd0aFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0xlbmd0aFZhbHVlOjpz
ZXRWYWx1ZUFzU3RyaW5nKToKKyAgICAgICAgKiBzdmcvU1ZHTnVtYmVyTGlzdC5oOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHTnVtYmVyTGlzdDo6cGFyc2UpOgorICAgICAgICAqIHN2Zy9TVkdQYXJz
ZXJVdGlsaXRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2VuZXJpY1BhcnNlTnVtYmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OnBhcnNlTnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OmdlbmVy
aWNQYXJzZUFyY0ZsYWcpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VBcmNGbGFnKToKKyAgICAg
ICAgKFdlYkNvcmU6OnBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6cGFyc2VQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVJlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6cGFyc2VHbHlwaE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VVbmljb2Rl
UmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VLZXJuaW5nVW5pY29kZVN0cmluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpnZW5lcmljUGFyc2VGbG9hdFBvaW50KToKKyAgICAgICAgKFdlYkNv
cmU6OnBhcnNlRmxvYXRQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVNWR051bWJlcik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpwYXJzZU51bWJlckZyb21TdHJpbmcpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VEZWxpbWl0ZWRTdHJpbmcpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6cGFyc2VGbG9hdFBvaW50Mik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpwYXJzZUZsb2F0UG9pbnQzKTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHUGFy
c2VyVXRpbGl0aWVzLmg6CisgICAgICAgIChXZWJDb3JlOjppc1NWR1NwYWNlKToKKyAgICAgICAg
KFdlYkNvcmU6OnNraXBPcHRpb25hbFNWR1NwYWNlcyk6CisgICAgICAgIChXZWJDb3JlOjpza2lw
T3B0aW9uYWxTVkdTcGFjZXNPckRlbGltaXRlcik6CisgICAgICAgICogc3ZnL1NWR1BhdGhCbGVu
ZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnB1bGxGcm9tU291cmNlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdQYXRoQmxlbmRlcjo6YmxlbmRNb3ZlVG9TZWdtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1BhdGhCbGVuZGVyOjpibGVuZExpbmVUb1NlZ21lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHUGF0aEJsZW5kZXI6OmJsZW5kTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJsZW5kZXI6OmJsZW5kTGluZVRvVmVydGljYWxTZWdtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCbGVuZGVyOjpibGVuZEN1cnZlVG9DdWJpY1Nl
Z21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJsZW5kZXI6OmJsZW5kQ3VydmVUb0N1
YmljU21vb3RoU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQmxlbmRlcjo6Ymxl
bmRDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQmxl
bmRlcjo6YmxlbmRDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdQYXRoQmxlbmRlcjo6YmxlbmRBcmNUb1NlZ21lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHUGF0aEJsZW5kZXI6OmNhbkJsZW5kUGF0aHMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
UGF0aEJsZW5kZXI6OmJsZW5kQW5pbWF0ZWRQYXRoKToKKyAgICAgICAgKiBzdmcvU1ZHUGF0aEJ5
dGVTdHJlYW1Tb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW1T
b3VyY2U6Om5leHRDb21tYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFt
U291cmNlOjpwYXJzZVNWR1NlZ21lbnRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhC
eXRlU3RyZWFtU291cmNlOjpwYXJzZU1vdmVUb1NlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlTGluZVRvU2VnbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VMaW5lVG9Ib3Jpem9udGFsU2Vn
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VM
aW5lVG9WZXJ0aWNhbFNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJl
YW1Tb3VyY2U6OnBhcnNlQ3VydmVUb0N1YmljU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZUN1cnZlVG9R
dWFkcmF0aWNTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFtU291
cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZUFyY1RvU2VnbWVudCk6CisgICAgICAg
ICogc3ZnL1NWR1BhdGhCeXRlU3RyZWFtU291cmNlLmg6CisgICAgICAgICogc3ZnL1NWR1BhdGhQ
YXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFBhcnNlcjo6cGFyc2VNb3ZlVG9T
ZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhQYXJzZXI6OnBhcnNlTGluZVRvU2Vn
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoUGFyc2VyOjpwYXJzZUxpbmVUb0hvcml6
b250YWxTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhQYXJzZXI6OnBhcnNlTGlu
ZVRvVmVydGljYWxTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhQYXJzZXI6OnBh
cnNlQ3VydmVUb0N1YmljU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoUGFyc2Vy
OjpwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
UGF0aFBhcnNlcjo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdQYXRoUGFyc2VyOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhQYXJzZXI6OnBhcnNlQXJjVG9TZWdtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1BhdGhQYXJzZXI6OnBhcnNlUGF0aERhdGEpOgorICAgICAgICAq
IHN2Zy9TVkdQYXRoUGFyc2VyLmg6CisgICAgICAgICogc3ZnL1NWR1BhdGhTZWdMaXN0U291cmNl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdMaXN0U291cmNlOjpuZXh0Q29tbWFu
ZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VTVkdTZWdt
ZW50VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VN
b3ZlVG9TZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdMaXN0U291cmNlOjpw
YXJzZUxpbmVUb1NlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0xpc3RTb3Vy
Y2U6OnBhcnNlTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
UGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNlTGluZVRvVmVydGljYWxTZWdtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNlQ3VydmVUb0N1
YmljU21vb3RoU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnTGlzdFNvdXJj
ZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQ
YXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VBcmNUb1NlZ21lbnQp
OgorICAgICAgICAqIHN2Zy9TVkdQYXRoU2VnTGlzdFNvdXJjZS5oOgorICAgICAgICAqIHN2Zy9T
VkdQYXRoU291cmNlLmg6CisgICAgICAgICogc3ZnL1NWR1BhdGhTdHJpbmdTb3VyY2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6bmV4dENvbW1hbmRIZWxwZXIpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUGF0aFN0cmluZ1NvdXJjZTo6bmV4dENvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6cGFy
c2VTVkdTZWdtZW50VHlwZUhlbHBlcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU3RyaW5n
U291cmNlOjpwYXJzZVNWR1NlZ21lbnRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhT
dHJpbmdTb3VyY2U6OnBhcnNlTW92ZVRvU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQ
YXRoU3RyaW5nU291cmNlOjpwYXJzZUxpbmVUb1NlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUxpbmVUb1ZlcnRpY2FsU2Vn
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUN1cnZl
VG9DdWJpY1NlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZTo6
cGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Bh
dGhTdHJpbmdTb3VyY2U6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3Ro
U2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUFy
Y1RvU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUFyY1RvU2VnbWVudEhlbHBlcik6
IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR1BhdGhTdHJpbmdTb3VyY2UuaDoKKyAgICAgICAg
KiBzdmcvU1ZHUG9pbnRMaXN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdQb2ludExpc3Q6OnBh
cnNlKToKKyAgICAgICAgKiBzdmcvU1ZHVG9PVEZGb250Q29udmVyc2lvbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFkZEtlcm5pbmdQYWlyIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kS0VSTlN1YnRh
YmxlKToKKyAgICAgICAgKiBzdmcvU1ZHVHJhbnNmb3JtTGlzdC5oOgorICAgICAgICAqIHN2Zy9T
VkdUcmFuc2Zvcm1hYmxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlVHJhbnNmb3JtUGFy
YW1MaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNm
b3JtVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VBbmRT
a2lwVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZVRyYW5z
Zm9ybVR5cGUpOgorICAgICAgICAqIHN2Zy9TVkdUcmFuc2Zvcm1hYmxlLmg6CisgICAgICAgICog
c3ZnL1NWR1ZLZXJuRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdWS2VybkVsZW1l
bnQ6OmJ1aWxkVmVydGljYWxLZXJuaW5nUGFpciBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR1ZL
ZXJuRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdWaWV3U3BlYy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdWaWV3U3BlYzo6cGFyc2VWaWV3U3BlYyk6CisgICAgICAgICogc3ZnL3Byb3Bl
cnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oOgorICAgICAgICAq
IHN2Zy9wcm9wZXJ0aWVzL1NWR1Byb3BlcnR5VHJhaXRzLmg6CisgICAgICAgIChXZWJDb3JlOjpT
VkdQcm9wZXJ0eVRyYWl0czxmbG9hdD46OmZyb21TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUHJvcGVydHlUcmFpdHM8ZmxvYXQ+OjpwYXJzZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQ
cm9wZXJ0eVRyYWl0czxGbG9hdFBvaW50Pjo6ZnJvbVN0cmluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdQcm9wZXJ0eVRyYWl0czxGbG9hdFBvaW50Pjo6cGFyc2UpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHUHJvcGVydHlUcmFpdHM8RmxvYXRSZWN0Pjo6ZnJvbVN0cmluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxGbG9hdFJlY3Q+OjpwYXJzZSk6CisKIDIwMjAtMDYt
MTkgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBBdm9pZCBpbml0
aWFsaXppbmcgUmVuZGVyVGhlbWUgc2luZ2xldG9uIHVubmVjZXNzYXJpbHkgaW4gdGhlIFVJUHJv
Y2VzcwpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMDA4Myw2ICsxMDA4
Myw3IEBACiAJCTdDODNERTg1MUQwNENCRDQwMEZFQkNGMyAvKiBTcHJpbmdTb2x2ZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3ByaW5nU29sdmVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTdDODVCMjAxMjJGQjA0ODUwMDMwNjg0RiAvKiBXSExTTFVubmFt
ZWRUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMVW5uYW1lZFR5cGUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Qzg1QjIwNDIyRkIwNjMyMDAzMDY4NEYgLyogV0hM
U0xVbm5hbWVkVHlwZUhhc2guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xVbm5hbWVkVHlwZUhhc2gu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0M4ODI0QzQyNDlEN0IwNTAwRUQ4RkM0
IC8qIFNWR1BhdGhTZWdWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
VkdQYXRoU2VnVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0M4RTM0OTIx
RTRBMzM4RTAwNTRDRTIzIC8qIEpTRE9NQ29udmVydEFueS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU0RPTUNvbnZlcnRBbnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJN0M4RTM0OTMxRTRBMzM4RTAwNTRDRTIzIC8qIEpTRE9NQ29udmVydEJhc2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNET01Db252ZXJ0QmFzZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3QzhFMzQ5NDFFNEEzMzhFMDA1NENFMjMgLyogSlNET01D
b252ZXJ0Qm9vbGVhbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0RPTUNv
bnZlcnRCb29sZWFuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNTE4Niw2ICsy
NTE4Nyw3IEBACiAJCQkJODRCNkI5NzYxMjBGMTNFNTAwQjhFRkFGIC8qIFNWR1BhdGhTZWdMaXN0
U291cmNlLmggKi8sCiAJCQkJQjIyMjc4RUYwRDAwQkYyMTAwNzFCNzgyIC8qIFNWR1BhdGhTZWdN
b3ZldG9BYnMuaWRsICovLAogCQkJCUIyMjI3OEYwMEQwMEJGMjEwMDcxQjc4MiAvKiBTVkdQYXRo
U2VnTW92ZXRvUmVsLmlkbCAqLywKKwkJCQk3Qzg4MjRDNDI0OUQ3QjA1MDBFRDhGQzQgLyogU1ZH
UGF0aFNlZ1ZhbHVlLmggKi8sCiAJCQkJODQzMDBCRDcxMjBDOUFENDAwMjE5NTRBIC8qIFNWR1Bh
dGhTb3VyY2UuaCAqLywKIAkJCQk4NDE5RDJCNzEyMEUwQzc2MDAxNDFGOEYgLyogU1ZHUGF0aFN0
cmluZ0J1aWxkZXIuY3BwICovLAogCQkJCTg0MTlEMkI4MTIwRTBDNzYwMDE0MUY4RiAvKiBTVkdQ
YXRoU3RyaW5nQnVpbGRlci5oICovLApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuZ2xl
VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmdsZVZhbHVl
LmNwcAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuZ2xlVmFs
dWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3IEBAIFN0cmluZyBTVkdBbmdsZVZh
bHVlOjp2YWx1ZUFzU3RyaW5nKCkgY28KICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgU1ZHQW5nbGVWYWx1ZTo6VHlwZSBwYXJzZUFuZ2xlVHlwZShjb25zdCBVQ2hhciog
cHRyLCBjb25zdCBVQ2hhciogZW5kKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4g
c3RhdGljIGlubGluZSBTVkdBbmdsZVZhbHVlOjpUeXBlIHBhcnNlQW5nbGVUeXBlKGNvbnN0IENo
YXJhY3RlclR5cGUqIHB0ciwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kKQogewogICAgIHN3aXRj
aCAoZW5kIC0gcHRyKSB7CiAgICAgY2FzZSAwOgpAQCAtMTA2LDIxICsxMDYsMjkgQEAgRXhjZXB0
aW9uT3I8dm9pZD4gU1ZHQW5nbGVWYWx1ZTo6c2V0VmFsdQogICAgICAgICByZXR1cm4geyB9Owog
ICAgIH0KIAotICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyh2YWx1
ZSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIqIHB0ciA9IHVwY29u
dmVydGVkQ2hhcmFjdGVyczsKLSAgICBjb25zdCBVQ2hhciogZW5kID0gcHRyICsgdmFsdWUubGVu
Z3RoKCk7Ci0KLSAgICBmbG9hdCB2YWx1ZUluU3BlY2lmaWVkVW5pdHMgPSAwOwotICAgIGlmICgh
cGFyc2VOdW1iZXIocHRyLCBlbmQsIHZhbHVlSW5TcGVjaWZpZWRVbml0cywgZmFsc2UpKQotICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKLQotICAgIGF1dG8gdW5pdFR5
cGUgPSBwYXJzZUFuZ2xlVHlwZShwdHIsIGVuZCk7Ci0gICAgaWYgKHVuaXRUeXBlID09IFNWR19B
TkdMRVRZUEVfVU5LTk9XTikKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9y
IH07CisgICAgYXV0byBoZWxwZXIgPSBbJl0oY29uc3QgYXV0byogcHRyLCBjb25zdCBhdXRvKiBl
bmQpIC0+IEV4Y2VwdGlvbk9yPHZvaWQ+IHsKKyAgICAgICAgYXV0byB2YWx1ZUluU3BlY2lmaWVk
VW5pdHMgPSBwYXJzZU51bWJlcihwdHIsIGVuZCwgU3VmZml4U2tpcHBpbmdQb2xpY3k6OkRvbnRT
a2lwKTsKKyAgICAgICAgaWYgKCF2YWx1ZUluU3BlY2lmaWVkVW5pdHMpCisgICAgICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKKworICAgICAgICBhdXRvIHVuaXRUeXBl
ID0gcGFyc2VBbmdsZVR5cGUocHRyLCBlbmQpOworICAgICAgICBpZiAodW5pdFR5cGUgPT0gU1ZH
QW5nbGVWYWx1ZTo6U1ZHX0FOR0xFVFlQRV9VTktOT1dOKQorICAgICAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiAKLSAgICBtX3VuaXRUeXBlID0gdW5pdFR5cGU7Ci0g
ICAgbV92YWx1ZUluU3BlY2lmaWVkVW5pdHMgPSB2YWx1ZUluU3BlY2lmaWVkVW5pdHM7Ci0gICAg
cmV0dXJuIHsgfTsKKyAgICAgICAgbV91bml0VHlwZSA9IHVuaXRUeXBlOworICAgICAgICBtX3Zh
bHVlSW5TcGVjaWZpZWRVbml0cyA9ICp2YWx1ZUluU3BlY2lmaWVkVW5pdHM7CisgICAgICAgIHJl
dHVybiB7IH07CisgICAgfTsKKworICAgIGlmICh2YWx1ZS5pczhCaXQoKSkgeworICAgICAgICBj
b25zdCBhdXRvKiBwdHIgPSB2YWx1ZS5jaGFyYWN0ZXJzOCgpOworICAgICAgICBjb25zdCBhdXRv
KiBlbmQgPSBwdHIgKyB2YWx1ZS5sZW5ndGgoKTsKKyAgICAgICAgcmV0dXJuIGhlbHBlcihwdHIs
IGVuZCk7CisgICAgfQorCisgICAgY29uc3QgYXV0byogcHRyID0gdmFsdWUuY2hhcmFjdGVyczE2
KCk7CisgICAgY29uc3QgYXV0byogZW5kID0gcHRyICsgdmFsdWUubGVuZ3RoKCk7CisgICAgcmV0
dXJuIGhlbHBlcihwdHIsIGVuZCk7CiB9CiAKIEV4Y2VwdGlvbk9yPHZvaWQ+IFNWR0FuZ2xlVmFs
dWU6Om5ld1ZhbHVlU3BlY2lmaWVkVW5pdHModW5zaWduZWQgc2hvcnQgdW5pdFR5cGUsIGZsb2F0
IHZhbHVlSW5TcGVjaWZpZWRVbml0cykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmlt
YXRlTW90aW9uRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTYxLDcgKzE2MSw3IEBAIHZvaWQgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OnN0b3BBbmltYXQK
IAogYm9vbCBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6Y2FsY3VsYXRlVG9BdEVuZE9mRHVyYXRp
b25WYWx1ZShjb25zdCBTdHJpbmcmIHRvQXRFbmRPZkR1cmF0aW9uU3RyaW5nKQogewotICAgIHBh
cnNlUG9pbnQodG9BdEVuZE9mRHVyYXRpb25TdHJpbmcsIG1fdG9Qb2ludEF0RW5kT2ZEdXJhdGlv
bik7CisgICAgbV90b1BvaW50QXRFbmRPZkR1cmF0aW9uID0gcGFyc2VQb2ludCh0b0F0RW5kT2ZE
dXJhdGlvblN0cmluZykudmFsdWVPcihGbG9hdFBvaW50IHsgfSk7CiAgICAgbV9oYXNUb1BvaW50
QXRFbmRPZkR1cmF0aW9uID0gdHJ1ZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTE2OSw4ICsx
NjksOCBAQCBib29sIFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OjpjYWxjdWxhdGVUCiBib29sIFNW
R0FuaW1hdGVNb3Rpb25FbGVtZW50OjpjYWxjdWxhdGVGcm9tQW5kVG9WYWx1ZXMoY29uc3QgU3Ry
aW5nJiBmcm9tU3RyaW5nLCBjb25zdCBTdHJpbmcmIHRvU3RyaW5nKQogewogICAgIG1faGFzVG9Q
b2ludEF0RW5kT2ZEdXJhdGlvbiA9IGZhbHNlOwotICAgIHBhcnNlUG9pbnQoZnJvbVN0cmluZywg
bV9mcm9tUG9pbnQpOwotICAgIHBhcnNlUG9pbnQodG9TdHJpbmcsIG1fdG9Qb2ludCk7CisgICAg
bV9mcm9tUG9pbnQgPSBwYXJzZVBvaW50KGZyb21TdHJpbmcpLnZhbHVlT3IoRmxvYXRQb2ludCB7
IH0pOworICAgIG1fdG9Qb2ludCA9IHBhcnNlUG9pbnQodG9TdHJpbmcpLnZhbHVlT3IoRmxvYXRQ
b2ludCB7IH0pOwogICAgIHJldHVybiB0cnVlOwogfQogICAgIApAQCAtMTc5LDkgKzE3OSw4IEBA
IGJvb2wgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OmNhbGN1bGF0ZUYKICAgICBtX2hhc1RvUG9p
bnRBdEVuZE9mRHVyYXRpb24gPSBmYWxzZTsKICAgICBpZiAoYW5pbWF0aW9uTW9kZSgpID09IEFu
aW1hdGlvbk1vZGU6OkJ5ICYmICFpc0FkZGl0aXZlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBwYXJzZVBvaW50KGZyb21TdHJpbmcsIG1fZnJvbVBvaW50KTsKLSAgICBGbG9hdFBvaW50
IGJ5UG9pbnQ7Ci0gICAgcGFyc2VQb2ludChieVN0cmluZywgYnlQb2ludCk7CisgICAgbV9mcm9t
UG9pbnQgPSBwYXJzZVBvaW50KGZyb21TdHJpbmcpLnZhbHVlT3IoRmxvYXRQb2ludCB7IH0pOwor
ICAgIGF1dG8gYnlQb2ludCA9IHBhcnNlUG9pbnQoYnlTdHJpbmcpLnZhbHVlT3IoRmxvYXRQb2lu
dCB7IH0pOwogICAgIG1fdG9Qb2ludCA9IEZsb2F0UG9pbnQobV9mcm9tUG9pbnQueCgpICsgYnlQ
b2ludC54KCksIG1fZnJvbVBvaW50LnkoKSArIGJ5UG9pbnQueSgpKTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KQEAgLTI3NSwxMyArMjc0LDEzIEBAIHZvaWQgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6
OmFwcGx5UmVzdWwKIAogT3B0aW9uYWw8ZmxvYXQ+IFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50Ojpj
YWxjdWxhdGVEaXN0YW5jZShjb25zdCBTdHJpbmcmIGZyb21TdHJpbmcsIGNvbnN0IFN0cmluZyYg
dG9TdHJpbmcpCiB7Ci0gICAgRmxvYXRQb2ludCBmcm9tOwotICAgIEZsb2F0UG9pbnQgdG87Ci0g
ICAgaWYgKCFwYXJzZVBvaW50KGZyb21TdHJpbmcsIGZyb20pKQorICAgIGF1dG8gZnJvbSA9IHBh
cnNlUG9pbnQoZnJvbVN0cmluZyk7CisgICAgaWYgKCFmcm9tKQogICAgICAgICByZXR1cm4geyB9
OwotICAgIGlmICghcGFyc2VQb2ludCh0b1N0cmluZywgdG8pKQorICAgIGF1dG8gdG8gPSBwYXJz
ZVBvaW50KHRvU3RyaW5nKTsKKyAgICBpZiAoIXRvKQogICAgICAgICByZXR1cm4geyB9OwotICAg
IEZsb2F0U2l6ZSBkaWZmID0gdG8gLSBmcm9tOworICAgIGF1dG8gZGlmZiA9ICp0byAtICpmcm9t
OwogICAgIHJldHVybiBzdGQ6Omh5cG90KGRpZmYud2lkdGgoKSwgZGlmZi5oZWlnaHQoKSk7CiB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDI2MzE3NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsMTEgKzc3LDEwIEBAIGZhaWw6CiAgICAgcmVzdWx0
LmNsZWFyKCk7CiB9CiAKLXN0YXRpYyB2b2lkIHBhcnNlS2V5U3BsaW5lcyhjb25zdCBTdHJpbmcm
IHBhcnNlLCBWZWN0b3I8VW5pdEJlemllcj4mIHJlc3VsdCkKK3N0YXRpYyBPcHRpb25hbDxWZWN0
b3I8VW5pdEJlemllcj4+IHBhcnNlS2V5U3BsaW5lcyhjb25zdCBTdHJpbmcmIHBhcnNlKQogewot
ICAgIHJlc3VsdC5jbGVhcigpOwogICAgIGlmIChwYXJzZS5pc0VtcHR5KCkpCi0gICAgICAgIHJl
dHVybjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIGF1dG8gdXBjb252ZXJ0
ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyhwYXJzZSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7
CiAgICAgY29uc3QgVUNoYXIqIGN1ciA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKQEAgLTg5LDMy
ICs4OCwyNiBAQCBzdGF0aWMgdm9pZCBwYXJzZUtleVNwbGluZXMoY29uc3QgU3RyaW5nCiAKICAg
ICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoY3VyLCBlbmQpOwogCisgICAgVmVjdG9yPFVuaXRCZXpp
ZXI+IHJlc3VsdDsKKwogICAgIGJvb2wgZGVsaW1QYXJzZWQgPSBmYWxzZTsKICAgICB3aGlsZSAo
Y3VyIDwgZW5kKSB7CiAgICAgICAgIGRlbGltUGFyc2VkID0gZmFsc2U7Ci0gICAgICAgIGZsb2F0
IHBvc0EgPSAwOwotICAgICAgICBpZiAoIXBhcnNlTnVtYmVyKGN1ciwgZW5kLCBwb3NBKSkgewot
ICAgICAgICAgICAgcmVzdWx0LmNsZWFyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLQotICAgICAgICBmbG9hdCBwb3NCID0gMDsKLSAgICAgICAgaWYgKCFwYXJzZU51bWJlcihj
dXIsIGVuZCwgcG9zQikpIHsKLSAgICAgICAgICAgIHJlc3VsdC5jbGVhcigpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZmxvYXQgcG9zQyA9IDA7Ci0gICAgICAg
IGlmICghcGFyc2VOdW1iZXIoY3VyLCBlbmQsIHBvc0MpKSB7Ci0gICAgICAgICAgICByZXN1bHQu
Y2xlYXIoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGZsb2F0
IHBvc0QgPSAwOwotICAgICAgICBpZiAoIXBhcnNlTnVtYmVyKGN1ciwgZW5kLCBwb3NELCBmYWxz
ZSkpIHsKLSAgICAgICAgICAgIHJlc3VsdC5jbGVhcigpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9CisgICAgICAgIGF1dG8gcG9zQSA9IHBhcnNlTnVtYmVyKGN1ciwgZW5kKTsKKyAg
ICAgICAgaWYgKCFwb3NBKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAg
ICAgICBhdXRvIHBvc0IgPSBwYXJzZU51bWJlcihjdXIsIGVuZCk7CisgICAgICAgIGlmICghcG9z
QikKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICAgICAgYXV0byBwb3ND
ID0gcGFyc2VOdW1iZXIoY3VyLCBlbmQpOworICAgICAgICBpZiAoIXBvc0MpCisgICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgICAgIGF1dG8gcG9zRCA9IHBhcnNlTnVtYmVy
KGN1ciwgZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNraXApOworICAgICAgICBpZiAo
IXBvc0QpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgICAgIHNraXBP
cHRpb25hbFNWR1NwYWNlcyhjdXIsIGVuZCk7CiAKQEAgLTEyMiwxMiArMTE1LDE2IEBAIHN0YXRp
YyB2b2lkIHBhcnNlS2V5U3BsaW5lcyhjb25zdCBTdHJpbmcKICAgICAgICAgICAgIGRlbGltUGFy
c2VkID0gdHJ1ZTsKICAgICAgICAgICAgIGN1cisrOwogICAgICAgICB9CisKICAgICAgICAgc2tp
cE9wdGlvbmFsU1ZHU3BhY2VzKGN1ciwgZW5kKTsKIAotICAgICAgICByZXN1bHQuYXBwZW5kKFVu
aXRCZXppZXIocG9zQSwgcG9zQiwgcG9zQywgcG9zRCkpOworICAgICAgICByZXN1bHQuYXBwZW5k
KFVuaXRCZXppZXIgeyAqcG9zQSwgKnBvc0IsICpwb3NDLCAqcG9zRCB9KTsKICAgICB9CisKICAg
ICBpZiAoIShjdXIgPT0gZW5kICYmICFkZWxpbVBhcnNlZCkpCi0gICAgICAgIHJlc3VsdC5jbGVh
cigpOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAogYm9vbCBTVkdBbmltYXRpb25FbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25z
dCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKQEAgLTE4MCw3ICsxNzcsOCBAQCB2b2lkIFNWR0Fu
aW1hdGlvbkVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlCiAgICAgfQogCiAgICAgaWYgKG5hbWUgPT0g
U1ZHTmFtZXM6OmtleVNwbGluZXNBdHRyKSB7Ci0gICAgICAgIHBhcnNlS2V5U3BsaW5lcyh2YWx1
ZSwgbV9rZXlTcGxpbmVzKTsKKyAgICAgICAgaWYgKGF1dG8ga2V5U3BsaW5lcyA9IHBhcnNlS2V5
U3BsaW5lcyh2YWx1ZSkpCisgICAgICAgICAgICBtX2tleVNwbGluZXMgPSBXVEZNb3ZlKCprZXlT
cGxpbmVzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuY3BwCShyZXZpc2lvbiAyNjMx
NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02NywxMCArNjcsMTAgQEAgdm9pZCBTVkdGRUNvbnZvbHZlTWF0
cml4RWxlbWVudDo6cGFyc2VBdAogICAgIH0KIAogICAgIGlmIChuYW1lID09IFNWR05hbWVzOjpv
cmRlckF0dHIpIHsKLSAgICAgICAgZmxvYXQgeCwgeTsKLSAgICAgICAgaWYgKHBhcnNlTnVtYmVy
T3B0aW9uYWxOdW1iZXIodmFsdWUsIHgsIHkpICYmIHggPj0gMSAmJiB5ID49IDEpIHsKLSAgICAg
ICAgICAgIG1fb3JkZXJYLT5zZXRCYXNlVmFsSW50ZXJuYWwoeCk7Ci0gICAgICAgICAgICBtX29y
ZGVyWS0+c2V0QmFzZVZhbEludGVybmFsKHkpOworICAgICAgICBhdXRvIHJlc3VsdCA9IHBhcnNl
TnVtYmVyT3B0aW9uYWxOdW1iZXIodmFsdWUpOworICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3Vs
dC0+Zmlyc3QgPj0gMSAmJiByZXN1bHQtPnNlY29uZCA+PSAxKSB7CisgICAgICAgICAgICBtX29y
ZGVyWC0+c2V0QmFzZVZhbEludGVybmFsKHJlc3VsdC0+Zmlyc3QpOworICAgICAgICAgICAgbV9v
cmRlclktPnNldEJhc2VWYWxJbnRlcm5hbChyZXN1bHQtPnNlY29uZCk7CiAgICAgICAgIH0gZWxz
ZQogICAgICAgICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVwb3J0V2Fy
bmluZygiZmVDb252b2x2ZU1hdHJpeDogcHJvYmxlbSBwYXJzaW5nIG9yZGVyPVwiIiArIHZhbHVl
ICsgIlwiLiBGaWx0ZXJlZCBlbGVtZW50IHdpbGwgbm90IGJlIGRpc3BsYXllZC4iKTsKICAgICAg
ICAgcmV0dXJuOwpAQCAtMTE1LDEwICsxMTUsMTAgQEAgdm9pZCBTVkdGRUNvbnZvbHZlTWF0cml4
RWxlbWVudDo6cGFyc2VBdAogICAgIH0KIAogICAgIGlmIChuYW1lID09IFNWR05hbWVzOjprZXJu
ZWxVbml0TGVuZ3RoQXR0cikgewotICAgICAgICBmbG9hdCB4LCB5OwotICAgICAgICBpZiAocGFy
c2VOdW1iZXJPcHRpb25hbE51bWJlcih2YWx1ZSwgeCwgeSkgJiYgeCA+IDAgJiYgeSA+IDApIHsK
LSAgICAgICAgICAgIG1fa2VybmVsVW5pdExlbmd0aFgtPnNldEJhc2VWYWxJbnRlcm5hbCh4KTsK
LSAgICAgICAgICAgIG1fa2VybmVsVW5pdExlbmd0aFktPnNldEJhc2VWYWxJbnRlcm5hbCh5KTsK
KyAgICAgICAgYXV0byByZXN1bHQgPSBwYXJzZU51bWJlck9wdGlvbmFsTnVtYmVyKHZhbHVlKTsK
KyAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQtPmZpcnN0ID4gMCAmJiByZXN1bHQtPnNlY29u
ZCA+IDApIHsKKyAgICAgICAgICAgIG1fa2VybmVsVW5pdExlbmd0aFgtPnNldEJhc2VWYWxJbnRl
cm5hbChyZXN1bHQtPmZpcnN0KTsKKyAgICAgICAgICAgIG1fa2VybmVsVW5pdExlbmd0aFktPnNl
dEJhc2VWYWxJbnRlcm5hbChyZXN1bHQtPnNlY29uZCk7CiAgICAgICAgIH0gZWxzZQogICAgICAg
ICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVwb3J0V2FybmluZygiZmVD
b252b2x2ZU1hdHJpeDogcHJvYmxlbSBwYXJzaW5nIGtlcm5lbFVuaXRMZW5ndGg9XCIiICsgdmFs
dWUgKyAiXCIuIEZpbHRlcmVkIGVsZW1lbnQgd2lsbCBub3QgYmUgZGlzcGxheWVkLiIpOwogICAg
ICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRp
bmdFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZm
dXNlTGlnaHRpbmdFbGVtZW50LmNwcAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTcxLDEwICs3MSw5IEBAIHZvaWQgU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjpwYXJzZUEK
ICAgICB9CiAKICAgICBpZiAobmFtZSA9PSBTVkdOYW1lczo6a2VybmVsVW5pdExlbmd0aEF0dHIp
IHsKLSAgICAgICAgZmxvYXQgeCwgeTsKLSAgICAgICAgaWYgKHBhcnNlTnVtYmVyT3B0aW9uYWxO
dW1iZXIodmFsdWUsIHgsIHkpKSB7Ci0gICAgICAgICAgICBtX2tlcm5lbFVuaXRMZW5ndGhYLT5z
ZXRCYXNlVmFsSW50ZXJuYWwoeCk7Ci0gICAgICAgICAgICBtX2tlcm5lbFVuaXRMZW5ndGhZLT5z
ZXRCYXNlVmFsSW50ZXJuYWwoeSk7CisgICAgICAgIGlmIChhdXRvIHJlc3VsdCA9IHBhcnNlTnVt
YmVyT3B0aW9uYWxOdW1iZXIodmFsdWUpKSB7CisgICAgICAgICAgICBtX2tlcm5lbFVuaXRMZW5n
dGhYLT5zZXRCYXNlVmFsSW50ZXJuYWwocmVzdWx0LT5maXJzdCk7CisgICAgICAgICAgICBtX2tl
cm5lbFVuaXRMZW5ndGhZLT5zZXRCYXNlVmFsSW50ZXJuYWwocmVzdWx0LT5zZWNvbmQpOwogICAg
ICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVEcm9wU2hhZG93RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuY3BwCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTYxLDEwICs2MSw5IEBAIHZvaWQgU1ZHRkVEcm9wU2hhZG93RWxlbWVudDo6c2V0U3RkRGV2
aWEKIHZvaWQgU1ZHRkVEcm9wU2hhZG93RWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVh
bGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbVN0cmluZyYgdmFsdWUpCiB7CiAgICAgaWYgKG5h
bWUgPT0gU1ZHTmFtZXM6OnN0ZERldmlhdGlvbkF0dHIpIHsKLSAgICAgICAgZmxvYXQgeCwgeTsK
LSAgICAgICAgaWYgKHBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIodmFsdWUsIHgsIHkpKSB7Ci0g
ICAgICAgICAgICBtX3N0ZERldmlhdGlvblgtPnNldEJhc2VWYWxJbnRlcm5hbCh4KTsKLSAgICAg
ICAgICAgIG1fc3RkRGV2aWF0aW9uWS0+c2V0QmFzZVZhbEludGVybmFsKHkpOworICAgICAgICBp
ZiAoYXV0byByZXN1bHQgPSBwYXJzZU51bWJlck9wdGlvbmFsTnVtYmVyKHZhbHVlKSkgeworICAg
ICAgICAgICAgbV9zdGREZXZpYXRpb25YLT5zZXRCYXNlVmFsSW50ZXJuYWwocmVzdWx0LT5maXJz
dCk7CisgICAgICAgICAgICBtX3N0ZERldmlhdGlvblktPnNldEJhc2VWYWxJbnRlcm5hbChyZXN1
bHQtPnNlY29uZCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwCShyZXZp
c2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsMTAgKzYwLDkgQEAgdm9pZCBTVkdGRUdhdXNz
aWFuQmx1ckVsZW1lbnQ6OnNldFN0ZERldgogdm9pZCBTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6
OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21TdHJp
bmcmIHZhbHVlKQogewogICAgIGlmIChuYW1lID09IFNWR05hbWVzOjpzdGREZXZpYXRpb25BdHRy
KSB7Ci0gICAgICAgIGZsb2F0IHgsIHk7Ci0gICAgICAgIGlmIChwYXJzZU51bWJlck9wdGlvbmFs
TnVtYmVyKHZhbHVlLCB4LCB5KSkgewotICAgICAgICAgICAgbV9zdGREZXZpYXRpb25YLT5zZXRC
YXNlVmFsSW50ZXJuYWwoeCk7Ci0gICAgICAgICAgICBtX3N0ZERldmlhdGlvblktPnNldEJhc2VW
YWxJbnRlcm5hbCh5KTsKKyAgICAgICAgaWYgKGF1dG8gcmVzdWx0ID0gcGFyc2VOdW1iZXJPcHRp
b25hbE51bWJlcih2YWx1ZSkpIHsKKyAgICAgICAgICAgIG1fc3RkRGV2aWF0aW9uWC0+c2V0QmFz
ZVZhbEludGVybmFsKHJlc3VsdC0+Zmlyc3QpOworICAgICAgICAgICAgbV9zdGREZXZpYXRpb25Z
LT5zZXRCYXNlVmFsSW50ZXJuYWwocmVzdWx0LT5zZWNvbmQpOwogICAgICAgICB9CiAgICAgICAg
IHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDI2MzE3NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdl
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNyw5ICsxMTcsNyBAQCB2b2lkIFNWR0ZF
SW1hZ2VFbGVtZW50OjpidWlsZFBlbmRpbmdSZXNvCiB2b2lkIFNWR0ZFSW1hZ2VFbGVtZW50Ojpw
YXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9tU3RyaW5n
JiB2YWx1ZSkKIHsKICAgICBpZiAobmFtZSA9PSBTVkdOYW1lczo6cHJlc2VydmVBc3BlY3RSYXRp
b0F0dHIpIHsKLSAgICAgICAgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlIHByZXNlcnZlQXNw
ZWN0UmF0aW87Ci0gICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW8ucGFyc2UodmFsdWUpOwotICAg
ICAgICBtX3ByZXNlcnZlQXNwZWN0UmF0aW8tPnNldEJhc2VWYWxJbnRlcm5hbChwcmVzZXJ2ZUFz
cGVjdFJhdGlvKTsKKyAgICAgICAgbV9wcmVzZXJ2ZUFzcGVjdFJhdGlvLT5zZXRCYXNlVmFsSW50
ZXJuYWwoU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlIHsgdmFsdWUgfSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9s
b2d5RWxlbWVudC5jcHAJKHJldmlzaW9uIDI2MzE3NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRU1vcnBob2xvZ3lFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsMTAgKzcxLDkg
QEAgdm9pZCBTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpwYXJzZUF0dHJpYgogICAgIH0KIAogICAg
IGlmIChuYW1lID09IFNWR05hbWVzOjpyYWRpdXNBdHRyKSB7Ci0gICAgICAgIGZsb2F0IHgsIHk7
Ci0gICAgICAgIGlmIChwYXJzZU51bWJlck9wdGlvbmFsTnVtYmVyKHZhbHVlLCB4LCB5KSkgewot
ICAgICAgICAgICAgbV9yYWRpdXNYLT5zZXRCYXNlVmFsSW50ZXJuYWwoeCk7Ci0gICAgICAgICAg
ICBtX3JhZGl1c1ktPnNldEJhc2VWYWxJbnRlcm5hbCh5KTsKKyAgICAgICAgaWYgKGF1dG8gcmVz
dWx0ID0gcGFyc2VOdW1iZXJPcHRpb25hbE51bWJlcih2YWx1ZSkpIHsKKyAgICAgICAgICAgIG1f
cmFkaXVzWC0+c2V0QmFzZVZhbEludGVybmFsKHJlc3VsdC0+Zmlyc3QpOworICAgICAgICAgICAg
bV9yYWRpdXNZLT5zZXRCYXNlVmFsSW50ZXJuYWwocmVzdWx0LT5zZWNvbmQpOwogICAgICAgICB9
CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVT
cGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuY3BwCShyZXZpc2lvbiAyNjMxNzYpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTc4LDEwICs3OCw5IEBAIHZvaWQgU1ZHRkVTcGVjdWxhckxpZ2h0aW5n
RWxlbWVudDo6cGFyc2UKICAgICB9CiAKICAgICBpZiAobmFtZSA9PSBTVkdOYW1lczo6a2VybmVs
VW5pdExlbmd0aEF0dHIpIHsKLSAgICAgICAgZmxvYXQgeCwgeTsKLSAgICAgICAgaWYgKHBhcnNl
TnVtYmVyT3B0aW9uYWxOdW1iZXIodmFsdWUsIHgsIHkpKSB7Ci0gICAgICAgICAgICBtX2tlcm5l
bFVuaXRMZW5ndGhYLT5zZXRCYXNlVmFsSW50ZXJuYWwoeCk7Ci0gICAgICAgICAgICBtX2tlcm5l
bFVuaXRMZW5ndGhZLT5zZXRCYXNlVmFsSW50ZXJuYWwoeSk7CisgICAgICAgIGlmIChhdXRvIHJl
c3VsdCA9IHBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIodmFsdWUpKSB7CisgICAgICAgICAgICBt
X2tlcm5lbFVuaXRMZW5ndGhYLT5zZXRCYXNlVmFsSW50ZXJuYWwocmVzdWx0LT5maXJzdCk7Cisg
ICAgICAgICAgICBtX2tlcm5lbFVuaXRMZW5ndGhZLT5zZXRCYXNlVmFsSW50ZXJuYWwocmVzdWx0
LT5zZWNvbmQpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAy
NjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY3LDEwICs2Nyw5IEBAIHZvaWQgU1ZHRkVUdXJidWxlbmNlRWxl
bWVudDo6cGFyc2VBdHRyaWIKICAgICB9CiAKICAgICBpZiAobmFtZSA9PSBTVkdOYW1lczo6YmFz
ZUZyZXF1ZW5jeUF0dHIpIHsKLSAgICAgICAgZmxvYXQgeCwgeTsKLSAgICAgICAgaWYgKHBhcnNl
TnVtYmVyT3B0aW9uYWxOdW1iZXIodmFsdWUsIHgsIHkpKSB7Ci0gICAgICAgICAgICBtX2Jhc2VG
cmVxdWVuY3lYLT5zZXRCYXNlVmFsSW50ZXJuYWwoeCk7Ci0gICAgICAgICAgICBtX2Jhc2VGcmVx
dWVuY3lZLT5zZXRCYXNlVmFsSW50ZXJuYWwoeSk7CisgICAgICAgIGlmIChhdXRvIHJlc3VsdCA9
IHBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIodmFsdWUpKSB7CisgICAgICAgICAgICBtX2Jhc2VG
cmVxdWVuY3lYLT5zZXRCYXNlVmFsSW50ZXJuYWwocmVzdWx0LT5maXJzdCk7CisgICAgICAgICAg
ICBtX2Jhc2VGcmVxdWVuY3lZLT5zZXRCYXNlVmFsSW50ZXJuYWwocmVzdWx0LT5zZWNvbmQpOwog
ICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRml0VG9WaWV3Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRml0VG9WaWV3Qm94LmNwcAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZpdFRvVmlld0JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDczICs2Niw3MSBA
QCB2b2lkIFNWR0ZpdFRvVmlld0JveDo6cmVzZXQoKQogYm9vbCBTVkdGaXRUb1ZpZXdCb3g6OnBh
cnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21TdHJpbmcm
IHZhbHVlKQogewogICAgIGlmIChuYW1lID09IFNWR05hbWVzOjp2aWV3Qm94QXR0cikgewotICAg
ICAgICBGbG9hdFJlY3Qgdmlld0JveDsKLSAgICAgICAgaWYgKCF2YWx1ZS5pc051bGwoKSAmJiBw
YXJzZVZpZXdCb3godmFsdWUsIHZpZXdCb3gpKQotICAgICAgICAgICAgc2V0Vmlld0JveCh2aWV3
Qm94KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVzZXRWaWV3Qm94KCk7CisgICAgICAg
IGlmICghdmFsdWUuaXNOdWxsKCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIHJlc3VsdCA9IHBh
cnNlVmlld0JveCh2YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICBzZXRWaWV3Qm94KFdURk1vdmUo
KnJlc3VsdCkpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIHJlc2V0Vmlld0JveCgpOwogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CiAKICAgICBpZiAobmFtZSA9PSBTVkdOYW1lczo6cHJlc2VydmVBc3BlY3RSYXRpb0F0
dHIpIHsKLSAgICAgICAgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlIHByZXNlcnZlQXNwZWN0
UmF0aW87Ci0gICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW8ucGFyc2UodmFsdWUpOwotICAgICAg
ICBzZXRQcmVzZXJ2ZUFzcGVjdFJhdGlvKHByZXNlcnZlQXNwZWN0UmF0aW8pOworICAgICAgICBz
ZXRQcmVzZXJ2ZUFzcGVjdFJhdGlvKFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSB7IHZhbHVl
IH0pOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLWJvb2wgU1ZHRml0VG9WaWV3Qm94OjpwYXJzZVZpZXdCb3goY29uc3QgQXRvbVN0cmluZyYg
dmFsdWUsIEZsb2F0UmVjdCYgdmlld0JveCkKK09wdGlvbmFsPEZsb2F0UmVjdD4gU1ZHRml0VG9W
aWV3Qm94OjpwYXJzZVZpZXdCb3goY29uc3QgQXRvbVN0cmluZyYgdmFsdWUpCiB7CiAgICAgYXV0
byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KHZhbHVlKS51cGNvbnZlcnRlZENo
YXJhY3RlcnMoKTsKICAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycyA9IHVwY29udmVydGVkQ2hh
cmFjdGVyczsKLSAgICByZXR1cm4gcGFyc2VWaWV3Qm94KGNoYXJhY3RlcnMsIGNoYXJhY3RlcnMg
KyB2YWx1ZS5sZW5ndGgoKSwgdmlld0JveCk7CisgICAgcmV0dXJuIHBhcnNlVmlld0JveChjaGFy
YWN0ZXJzLCBjaGFyYWN0ZXJzICsgdmFsdWUubGVuZ3RoKCkpOwogfQogCi1ib29sIFNWR0ZpdFRv
Vmlld0JveDo6cGFyc2VWaWV3Qm94KGNvbnN0IFVDaGFyKiYgYywgY29uc3QgVUNoYXIqIGVuZCwg
RmxvYXRSZWN0JiB2aWV3Qm94LCBib29sIHZhbGlkYXRlKQorT3B0aW9uYWw8RmxvYXRSZWN0PiBT
VkdGaXRUb1ZpZXdCb3g6OnBhcnNlVmlld0JveChjb25zdCBVQ2hhciomIGMsIGNvbnN0IFVDaGFy
KiBlbmQsIGJvb2wgdmFsaWRhdGUpCiB7Ci0gICAgU3RyaW5nIHN0cihjLCBlbmQgLSBjKTsKKyAg
ICBTdHJpbmdWaWV3IHN0cihjLCBlbmQgLSBjKTsKIAogICAgIHNraXBPcHRpb25hbFNWR1NwYWNl
cyhjLCBlbmQpOwogCi0gICAgZmxvYXQgeCA9IDAuMGY7Ci0gICAgZmxvYXQgeSA9IDAuMGY7Ci0g
ICAgZmxvYXQgd2lkdGggPSAwLjBmOwotICAgIGZsb2F0IGhlaWdodCA9IDAuMGY7Ci0gICAgYm9v
bCB2YWxpZCA9IHBhcnNlTnVtYmVyKGMsIGVuZCwgeCkgJiYgcGFyc2VOdW1iZXIoYywgZW5kLCB5
KSAmJiBwYXJzZU51bWJlcihjLCBlbmQsIHdpZHRoKSAmJiBwYXJzZU51bWJlcihjLCBlbmQsIGhl
aWdodCwgZmFsc2UpOworICAgIGF1dG8geCA9IHBhcnNlTnVtYmVyKGMsIGVuZCk7CisgICAgYXV0
byB5ID0gcGFyc2VOdW1iZXIoYywgZW5kKTsKKyAgICBhdXRvIHdpZHRoID0gcGFyc2VOdW1iZXIo
YywgZW5kKTsKKyAgICBhdXRvIGhlaWdodCA9IHBhcnNlTnVtYmVyKGMsIGVuZCwgU3VmZml4U2tp
cHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsKIAogICAgIGlmICh2YWxpZGF0ZSkgewogICAgICAgICBE
b2N1bWVudCYgZG9jdW1lbnQgPSBtX3ZpZXdCb3gtPmNvbnRleHRFbGVtZW50KCktPmRvY3VtZW50
KCk7CiAKLSAgICAgICAgaWYgKCF2YWxpZCkgewotICAgICAgICAgICAgZG9jdW1lbnQuYWNjZXNz
U1ZHRXh0ZW5zaW9ucygpLnJlcG9ydFdhcm5pbmcoIlByb2JsZW0gcGFyc2luZyB2aWV3Qm94PVwi
IiArIHN0ciArICJcIiIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAo
IXggfHwgIXkgfHwgIXdpZHRoIHx8ICFoZWlnaHQpIHsKKyAgICAgICAgICAgIGRvY3VtZW50LmFj
Y2Vzc1NWR0V4dGVuc2lvbnMoKS5yZXBvcnRXYXJuaW5nKG1ha2VTdHJpbmcoIlByb2JsZW0gcGFy
c2luZyB2aWV3Qm94PVwiIiwgc3RyLCAiXCIiKSk7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogICAgICAgICB9CiAKICAgICAgICAgLy8gQ2hlY2sgdGhhdCB3aWR0aCBpcyBwb3Np
dGl2ZS4KLSAgICAgICAgaWYgKHdpZHRoIDwgMC4wKSB7CisgICAgICAgIGlmICgqd2lkdGggPCAw
LjApIHsKICAgICAgICAgICAgIGRvY3VtZW50LmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5yZXBvcnRF
cnJvcigiQSBuZWdhdGl2ZSB2YWx1ZSBmb3IgVmlld0JveCB3aWR0aCBpcyBub3QgYWxsb3dlZCIp
OwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKICAgICAgICAgfQogCiAgICAgICAgIC8vIENoZWNrIHRoYXQgaGVpZ2h0IGlzIHBvc2l0
aXZlLgotICAgICAgICBpZiAoaGVpZ2h0IDwgMC4wKSB7CisgICAgICAgIGlmICgqaGVpZ2h0IDwg
MC4wKSB7CiAgICAgICAgICAgICBkb2N1bWVudC5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVwb3J0
RXJyb3IoIkEgbmVnYXRpdmUgdmFsdWUgZm9yIFZpZXdCb3ggaGVpZ2h0IGlzIG5vdCBhbGxvd2Vk
Iik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogICAgICAgICB9CiAKICAgICAgICAgLy8gTm90aGluZyBzaG91bGQgY29tZSBhZnRl
ciB0aGUgbGFzdCwgZm91cnRoIG51bWJlci4KICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2Vz
KGMsIGVuZCk7CiAgICAgICAgIGlmIChjIDwgZW5kKSB7Ci0gICAgICAgICAgICBkb2N1bWVudC5h
Y2Nlc3NTVkdFeHRlbnNpb25zKCkucmVwb3J0V2FybmluZygiUHJvYmxlbSBwYXJzaW5nIHZpZXdC
b3g9XCIiICsgc3RyICsgIlwiIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICBkb2N1bWVudC5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVwb3J0V2FybmluZyhtYWtlU3Ry
aW5nKCJQcm9ibGVtIHBhcnNpbmcgdmlld0JveD1cIiIsIHN0ciwgIlwiIikpOworICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgfQogICAgIH0KIAotICAgIHZpZXdCb3gg
PSB7IHgsIHksIHdpZHRoLCBoZWlnaHQgfTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4g
RmxvYXRSZWN0IHsgeC52YWx1ZU9yKDApLCB5LnZhbHVlT3IoMCksIHdpZHRoLnZhbHVlT3IoMCks
IGhlaWdodC52YWx1ZU9yKDApIH07CiB9CiAKIEFmZmluZVRyYW5zZm9ybSBTVkdGaXRUb1ZpZXdC
b3g6OnZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0oY29uc3QgRmxvYXRSZWN0JiB2aWV3Qm94UmVjdCwg
Y29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJiBwcmVzZXJ2ZUFzcGVjdFJhdGlvLCBm
bG9hdCB2aWV3V2lkdGgsIGZsb2F0IHZpZXdIZWlnaHQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRml0VG9WaWV3Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZpdFRvVmlld0JveC5oCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRml0VG9WaWV3Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDggKzY1LDggQEAgcHJvdGVj
dGVkOgogCiAgICAgdm9pZCByZXNldCgpOwogICAgIGJvb2wgcGFyc2VBdHRyaWJ1dGUoY29uc3Qg
UXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21TdHJpbmcmKTsKLSAgICBib29sIHBhcnNlVmlld0Jv
eChjb25zdCBBdG9tU3RyaW5nJiB2YWx1ZSwgRmxvYXRSZWN0JiB2aWV3Qm94KTsKLSAgICBib29s
IHBhcnNlVmlld0JveChjb25zdCBVQ2hhciomIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kLCBGbG9h
dFJlY3QmIHZpZXdCb3gsIGJvb2wgdmFsaWRhdGUgPSB0cnVlKTsKKyAgICBPcHRpb25hbDxGbG9h
dFJlY3Q+IHBhcnNlVmlld0JveChjb25zdCBBdG9tU3RyaW5nJiB2YWx1ZSk7CisgICAgT3B0aW9u
YWw8RmxvYXRSZWN0PiBwYXJzZVZpZXdCb3goY29uc3QgVUNoYXIqJiBzdGFydCwgY29uc3QgVUNo
YXIqIGVuZCwgYm9vbCB2YWxpZGF0ZSA9IHRydWUpOwogCiBwcml2YXRlOgogICAgIFJlZjxTVkdB
bmltYXRlZFJlY3Q+IG1fdmlld0JveDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHbHlw
aFJlZkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHbHlw
aFJlZkVsZW1lbnQuY3BwCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHR2x5cGhSZWZFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsMTAgKzU4LDcgQEAg
Ym9vbCBTVkdHbHlwaFJlZkVsZW1lbnQ6Omhhc1ZhbGlkR2x5cGhFbAogCiBzdGF0aWMgZmxvYXQg
cGFyc2VGbG9hdChjb25zdCBBdG9tU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBmbG9hdCByZXN1bHQ7
Ci0gICAgaWYgKCFwYXJzZU51bWJlckZyb21TdHJpbmcodmFsdWUsIHJlc3VsdCkpCi0gICAgICAg
IHJldHVybiAwOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIHBhcnNlTnVtYmVyKHZh
bHVlKS52YWx1ZU9yKDApOwogfQogCiB2b2lkIFNWR0dseXBoUmVmRWxlbWVudDo6cGFyc2VBdHRy
aWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbVN0cmluZyYgdmFsdWUp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHSEtlcm5FbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHSEtlcm5FbGVtZW50LmNwcAkocmV2aXNpb24gMjYz
MTc2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0hLZXJuRWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ0LDI0ICs0NCw0NCBAQCBSZWY8U1ZHSEtlcm5FbGVtZW50PiBTVkdIS2VybkVs
ZW1lbnQ6OmNyCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZHSEtlcm5FbGVtZW50KHRhZ05h
bWUsIGRvY3VtZW50KSk7CiB9CiAKLWJvb2wgU1ZHSEtlcm5FbGVtZW50OjpidWlsZEhvcml6b250
YWxLZXJuaW5nUGFpcihTVkdLZXJuaW5nUGFpciYga2VybmluZ1BhaXIpIGNvbnN0CitPcHRpb25h
bDxTVkdLZXJuaW5nUGFpcj4gU1ZHSEtlcm5FbGVtZW50OjpidWlsZEhvcml6b250YWxLZXJuaW5n
UGFpcigpIGNvbnN0CiB7CisgICAgLy8gRklYTUU6IENhbiB0aGlzIGJlIHNoYXJlZCB3aXRoIFNW
R1ZLZXJuRWxlbWVudDo6YnVpbGRWZXJ0aWNhbEtlcm5pbmdQYWlyCisKICAgICBhdXRvJiB1MSA9
IGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oU1ZHTmFtZXM6OnUxQXR0cik7CiAgICAg
YXV0byYgZzEgPSBhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFNWR05hbWVzOjpnMUF0
dHIpOwogICAgIGF1dG8mIHUyID0gYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihTVkdO
YW1lczo6dTJBdHRyKTsKICAgICBhdXRvJiBnMiA9IGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6
YXRpb24oU1ZHTmFtZXM6OmcyQXR0cik7CiAgICAgaWYgKCh1MS5pc0VtcHR5KCkgJiYgZzEuaXNF
bXB0eSgpKSB8fCAodTIuaXNFbXB0eSgpICYmIGcyLmlzRW1wdHkoKSkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIGF1dG8gZ2x5cGhO
YW1lMSA9IHBhcnNlR2x5cGhOYW1lKGcxKTsKKyAgICBpZiAoIWdseXBoTmFtZTEpCisgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgYXV0byBnbHlwaE5hbWUyID0gcGFyc2VHbHlwaE5h
bWUoZzIpOworICAgIGlmICghZ2x5cGhOYW1lMikKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKyAgICBhdXRvIHVuaWNvZGVTdHJpbmcxID0gcGFyc2VLZXJuaW5nVW5pY29kZVN0cmluZyh1
MSk7CisgICAgaWYgKCF1bmljb2RlU3RyaW5nMSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKyAgICBhdXRvIHVuaWNvZGVTdHJpbmcyID0gcGFyc2VLZXJuaW5nVW5pY29kZVN0cmluZyh1
Mik7CisgICAgaWYgKCF1bmljb2RlU3RyaW5nMikKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKworICAgIGJvb2wgb2sgPSBmYWxzZTsKKyAgICBhdXRvIGtlcm5pbmcgPSBhdHRyaWJ1dGVX
aXRob3V0U3luY2hyb25pemF0aW9uKFNWR05hbWVzOjprQXR0cikuc3RyaW5nKCkudG9GbG9hdCgm
b2spOworICAgIGlmICghb2spCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBp
ZiAocGFyc2VHbHlwaE5hbWUoZzEsIGtlcm5pbmdQYWlyLmdseXBoTmFtZTEpCi0gICAgICAgICYm
IHBhcnNlR2x5cGhOYW1lKGcyLCBrZXJuaW5nUGFpci5nbHlwaE5hbWUyKQotICAgICAgICAmJiBw
YXJzZUtlcm5pbmdVbmljb2RlU3RyaW5nKHUxLCBrZXJuaW5nUGFpci51bmljb2RlUmFuZ2UxLCBr
ZXJuaW5nUGFpci51bmljb2RlTmFtZTEpCi0gICAgICAgICYmIHBhcnNlS2VybmluZ1VuaWNvZGVT
dHJpbmcodTIsIGtlcm5pbmdQYWlyLnVuaWNvZGVSYW5nZTIsIGtlcm5pbmdQYWlyLnVuaWNvZGVO
YW1lMikpIHsKLSAgICAgICAgYm9vbCBvayA9IGZhbHNlOwotICAgICAgICBrZXJuaW5nUGFpci5r
ZXJuaW5nID0gYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihTVkdOYW1lczo6a0F0dHIp
LnN0cmluZygpLnRvRmxvYXQoJm9rKTsKLSAgICAgICAgcmV0dXJuIG9rOwotICAgIH0KLSAgICBy
ZXR1cm4gZmFsc2U7CisgICAgU1ZHS2VybmluZ1BhaXIga2VybmluZ1BhaXI7CisgICAga2Vybmlu
Z1BhaXIuZ2x5cGhOYW1lMSA9IFdURk1vdmUoKmdseXBoTmFtZTEpOworICAgIGtlcm5pbmdQYWly
LmdseXBoTmFtZTIgPSBXVEZNb3ZlKCpnbHlwaE5hbWUyKTsKKyAgICBrZXJuaW5nUGFpci51bmlj
b2RlUmFuZ2UxID0gV1RGTW92ZSh1bmljb2RlU3RyaW5nMS0+Zmlyc3QpOworICAgIGtlcm5pbmdQ
YWlyLnVuaWNvZGVOYW1lMSA9IFdURk1vdmUodW5pY29kZVN0cmluZzEtPnNlY29uZCk7CisgICAg
a2VybmluZ1BhaXIudW5pY29kZVJhbmdlMiA9IFdURk1vdmUodW5pY29kZVN0cmluZzItPmZpcnN0
KTsKKyAgICBrZXJuaW5nUGFpci51bmljb2RlTmFtZTIgPSBXVEZNb3ZlKHVuaWNvZGVTdHJpbmcy
LT5zZWNvbmQpOworICAgIGtlcm5pbmdQYWlyLmtlcm5pbmcgPSBrZXJuaW5nOworICAgIHJldHVy
biBrZXJuaW5nUGFpcjsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0hLZXJu
RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdIS2VybkVsZW1l
bnQuaAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0hLZXJuRWxl
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBAIGNsYXNzIFNWR0hLZXJuRWxl
bWVudCBmaW5hbCA6IHB1YmxpYyBTVkcKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPFNWR0hLZXJu
RWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCYpOwogCi0gICAg
Ym9vbCBidWlsZEhvcml6b250YWxLZXJuaW5nUGFpcihTVkdLZXJuaW5nUGFpciYga2VybmluZ1Bh
aXIpIGNvbnN0OworICAgIE9wdGlvbmFsPFNWR0tlcm5pbmdQYWlyPiBidWlsZEhvcml6b250YWxL
ZXJuaW5nUGFpcigpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIFNWR0hLZXJuRWxlbWVudChjb25z
dCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdJbWFnZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdJ
bWFnZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHSW1hZ2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksOSArNjksNyBAQCBib29s
IFNWR0ltYWdlRWxlbWVudDo6aGFzU2luZ2xlU2VjdXJpdHlPCiB2b2lkIFNWR0ltYWdlRWxlbWVu
dDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbVN0
cmluZyYgdmFsdWUpCiB7CiAgICAgaWYgKG5hbWUgPT0gU1ZHTmFtZXM6OnByZXNlcnZlQXNwZWN0
UmF0aW9BdHRyKSB7Ci0gICAgICAgIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSBwcmVzZXJ2
ZUFzcGVjdFJhdGlvOwotICAgICAgICBwcmVzZXJ2ZUFzcGVjdFJhdGlvLnBhcnNlKHZhbHVlKTsK
LSAgICAgICAgbV9wcmVzZXJ2ZUFzcGVjdFJhdGlvLT5zZXRCYXNlVmFsSW50ZXJuYWwocHJlc2Vy
dmVBc3BlY3RSYXRpbyk7CisgICAgICAgIG1fcHJlc2VydmVBc3BlY3RSYXRpby0+c2V0QmFzZVZh
bEludGVybmFsKFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSB7IHZhbHVlIH0pOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoVmFs
dWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMZW5ndGhWYWx1ZS5j
cHAJKHJldmlzaW9uIDI2MzE3NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMZW5ndGhWYWx1
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5MSwxMiArMjkxLDEyIEBAIEV4Y2VwdGlvbk9yPHZv
aWQ+IFNWR0xlbmd0aFZhbHVlOjpzZXRWYWwKICAgICBpZiAoc3RyaW5nLmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGZsb2F0IGNvbnZlcnRlZE51bWJlciA9IDA7CiAgICAg
YXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KHN0cmluZykudXBjb252ZXJ0
ZWRDaGFyYWN0ZXJzKCk7CiAgICAgY29uc3QgVUNoYXIqIHB0ciA9IHVwY29udmVydGVkQ2hhcmFj
dGVyczsKICAgICBjb25zdCBVQ2hhciogZW5kID0gcHRyICsgc3RyaW5nLmxlbmd0aCgpOwogCi0g
ICAgaWYgKCFwYXJzZU51bWJlcihwdHIsIGVuZCwgY29udmVydGVkTnVtYmVyLCBmYWxzZSkpCisg
ICAgYXV0byBjb252ZXJ0ZWROdW1iZXIgPSBwYXJzZU51bWJlcihwdHIsIGVuZCwgU3VmZml4U2tp
cHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsKKyAgICBpZiAoIWNvbnZlcnRlZE51bWJlcikKICAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiAKICAgICBhdXRvIGxlbmd0aFR5
cGUgPSBwYXJzZUxlbmd0aFR5cGUocHRyLCBlbmQpOwpAQCAtMzA0LDcgKzMwNCw3IEBAIEV4Y2Vw
dGlvbk9yPHZvaWQ+IFNWR0xlbmd0aFZhbHVlOjpzZXRWYWwKICAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IFN5bnRheEVycm9yIH07CiAKICAgICBtX2xlbmd0aFR5cGUgPSBsZW5ndGhUeXBlOwot
ICAgIG1fdmFsdWVJblNwZWNpZmllZFVuaXRzID0gY29udmVydGVkTnVtYmVyOworICAgIG1fdmFs
dWVJblNwZWNpZmllZFVuaXRzID0gKmNvbnZlcnRlZE51bWJlcjsKICAgICByZXR1cm4geyB9Owog
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTnVtYmVyTGlzdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdOdW1iZXJMaXN0LmgJKHJldmlzaW9uIDI2MzE3NikK
KysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdOdW1iZXJMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTU0LDcgKzU0LDYgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgY2xlYXJJdGVtcygpOwogCi0g
ICAgICAgIGZsb2F0IG51bWJlciA9IDA7CiAgICAgICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0
ZXJzID0gU3RyaW5nVmlldyh2YWx1ZSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7CiAgICAgICAg
IGNvbnN0IFVDaGFyKiBwdHIgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7CiAgICAgICAgIGNvbnN0
IFVDaGFyKiBlbmQgPSBwdHIgKyB2YWx1ZS5sZW5ndGgoKTsKQEAgLTYyLDkgKzYxLDEwIEBAIHB1
YmxpYzoKICAgICAgICAgLy8gVGhlIHNwZWMgKHNlY3Rpb24gNC4xKSBzdHJhbmdlbHkgZG9lc24n
dCBhbGxvdyBsZWFkaW5nIHdoaXRlc3BhY2UuCiAgICAgICAgIC8vIFdlIG1pZ2h0IGNob29zZSB0
byB2aW9sYXRlIHRoYXQgaW50ZW50aW9uYWxseS4KICAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCkg
ewotICAgICAgICAgICAgaWYgKCFwYXJzZU51bWJlcihwdHIsIGVuZCwgbnVtYmVyKSkKKyAgICAg
ICAgICAgIGF1dG8gbnVtYmVyID0gcGFyc2VOdW1iZXIocHRyLCBlbmQpOworICAgICAgICAgICAg
aWYgKCFudW1iZXIpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBhcHBlbmQo
U1ZHTnVtYmVyOjpjcmVhdGUobnVtYmVyKSk7CisgICAgICAgICAgICBhcHBlbmQoU1ZHTnVtYmVy
OjpjcmVhdGUoKm51bWJlcikpOwogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIHB0ciA9PSBl
bmQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmNwcAkocmV2
aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDE5ICs0MCwxOCBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUg
RmxvYXRUeXBlPiBzdGF0aWMgaW5sCiAvLyBXZSB1c2UgdGhpcyBnZW5lcmljIHBhcnNlTnVtYmVy
IGZ1bmN0aW9uIHRvIGFsbG93IHRoZSBQYXRoIHBhcnNpbmcgY29kZSB0byB3b3JrIAogLy8gYXQg
YSBoaWdoZXIgcHJlY2lzaW9uIGludGVybmFsbHksIHdpdGhvdXQgYW55IHVubmVjZXNzYXJ5IHJ1
bnRpbWUgY29zdCBvciBjb2RlCiAvLyBjb21wbGV4aXR5LgotdGVtcGxhdGUgPHR5cGVuYW1lIENo
YXJhY3RlclR5cGUsIHR5cGVuYW1lIEZsb2F0VHlwZT4gc3RhdGljIGJvb2wgZ2VuZXJpY1BhcnNl
TnVtYmVyKGNvbnN0IENoYXJhY3RlclR5cGUqJiBwdHIsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVu
ZCwgRmxvYXRUeXBlJiBudW1iZXIsIGJvb2wgc2tpcCkKKy8vIEZJWE1FOiBDYW4gdGhpcyBiZSBz
aGFyZWQvcmVwbGFjZWQgd2l0aCBudW1iZXIgcGFyc2luZyBpbiBXVEY/Cit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5hbWUgRmxvYXRUeXBlID0gZmxvYXQ+IHN0YXRpYyBP
cHRpb25hbDxGbG9hdFR5cGU+IGdlbmVyaWNQYXJzZU51bWJlcihjb25zdCBDaGFyYWN0ZXJUeXBl
KiYgcHRyLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQsIFN1ZmZpeFNraXBwaW5nUG9saWN5IHNr
aXAgPSBTdWZmaXhTa2lwcGluZ1BvbGljeTo6U2tpcCkKIHsKLSAgICBGbG9hdFR5cGUgaW50ZWdl
ciwgZGVjaW1hbCwgZnJhYywgZXhwb25lbnQ7Ci0gICAgaW50IHNpZ24sIGV4cHNpZ247CisgICAg
RmxvYXRUeXBlIG51bWJlciA9IDA7CisgICAgRmxvYXRUeXBlIGludGVnZXIgPSAwOworICAgIEZs
b2F0VHlwZSBkZWNpbWFsID0gMDsKKyAgICBGbG9hdFR5cGUgZnJhYyA9IDE7CisgICAgRmxvYXRU
eXBlIGV4cG9uZW50ID0gMDsKKyAgICBpbnQgc2lnbiA9IDE7CisgICAgaW50IGV4cHNpZ24gPSAx
OwogICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIHN0YXJ0ID0gcHRyOwogCi0gICAgZXhwb25lbnQg
PSAwOwotICAgIGludGVnZXIgPSAwOwotICAgIGZyYWMgPSAxOwotICAgIGRlY2ltYWwgPSAwOwot
ICAgIHNpZ24gPSAxOwotICAgIGV4cHNpZ24gPSAxOwotCiAgICAgLy8gcmVhZCB0aGUgc2lnbgog
ICAgIGlmIChwdHIgPCBlbmQgJiYgKnB0ciA9PSAnKycpCiAgICAgICAgIHB0cisrOwpAQCAtNjIs
NyArNjEsNyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5hCiAgICAg
fSAKICAgICAKICAgICBpZiAocHRyID09IGVuZCB8fCAoIWlzQVNDSUlEaWdpdCgqcHRyKSAmJiAq
cHRyICE9ICcuJykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKIAogICAgIC8vIHJlYWQgdGhlIGludGVnZXIgcGFydCwgYnVpbGQgcmlnaHQtdG8t
bGVmdAogICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIHB0clN0YXJ0SW50UGFydCA9IHB0cjsKQEAg
LTc4LDcgKzc3LDcgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHR5cGVuYQog
ICAgICAgICB9CiAgICAgICAgIC8vIEJhaWwgb3V0IGVhcmx5IGlmIHRoaXMgb3ZlcmZsb3dzLgog
ICAgICAgICBpZiAoIWlzVmFsaWRSYW5nZShpbnRlZ2VyKSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQogCiAgICAgaWYg
KHB0ciA8IGVuZCAmJiAqcHRyID09ICcuJykgeyAvLyByZWFkIHRoZSBkZWNpbWFscwpAQCAtODYs
NyArODUsNyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5hCiAgICAg
ICAgIAogICAgICAgICAvLyBUaGVyZSBtdXN0IGJlIGEgbGVhc3Qgb25lIGRpZ2l0IGZvbGxvd2lu
ZyB0aGUgLgogICAgICAgICBpZiAocHRyID49IGVuZCB8fCAhaXNBU0NJSURpZ2l0KCpwdHIpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKICAgICAgICAgCiAgICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgaXNBU0NJSURpZ2l0KCpw
dHIpKQogICAgICAgICAgICAgZGVjaW1hbCArPSAoKihwdHIrKykgLSAnMCcpICogKGZyYWMgKj0g
c3RhdGljX2Nhc3Q8RmxvYXRUeXBlPigwLjEpKTsKQEAgLTEwNyw3ICsxMDYsNyBAQCB0ZW1wbGF0
ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5hCiAgICAgICAgIAogICAgICAgICAvLyBU
aGVyZSBtdXN0IGJlIGFuIGV4cG9uZW50CiAgICAgICAgIGlmIChwdHIgPj0gZW5kIHx8ICFpc0FT
Q0lJRGlnaXQoKnB0cikpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgaXNBU0NJ
SURpZ2l0KCpwdHIpKSB7CiAgICAgICAgICAgICBleHBvbmVudCAqPSBzdGF0aWNfY2FzdDxGbG9h
dFR5cGU+KDEwKTsKQEAgLTExNiw3ICsxMTUsNyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZSwgdHlwZW5hCiAgICAgICAgIH0KICAgICAgICAgLy8gTWFrZSBzdXJlIGV4cG9uZW50
IGlzIHZhbGlkLgogICAgICAgICBpZiAoIWlzVmFsaWRSYW5nZShleHBvbmVudCkgfHwgZXhwb25l
bnQgPiBzdGQ6Om51bWVyaWNfbGltaXRzPEZsb2F0VHlwZT46Om1heF9leHBvbmVudCkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAg
ICAgfQogCiAgICAgbnVtYmVyID0gaW50ZWdlciArIGRlY2ltYWw7CkBAIC0xMjcsMTQyICsxMjYs
MTQ4IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCB0eXBlbmEKIAogICAgIC8v
IERvbid0IHJldHVybiBJbmZpbml0eSgpIG9yIE5hTigpLgogICAgIGlmICghaXNWYWxpZFJhbmdl
KG51bWJlcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIAogICAgIGlmIChzdGFydCA9PSBwdHIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGlmIChza2lwKQorICAgIGlmIChza2lw
ID09IFN1ZmZpeFNraXBwaW5nUG9saWN5OjpTa2lwKQogICAgICAgICBza2lwT3B0aW9uYWxTVkdT
cGFjZXNPckRlbGltaXRlcihwdHIsIGVuZCk7CiAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdGVt
cGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1ib29sIHBhcnNlU1ZHTnVtYmVyKENoYXJh
Y3RlclR5cGUqIGJlZ2luLCBzaXplX3QgbGVuZ3RoLCBkb3VibGUmIG51bWJlcikKLXsKLSAgICBj
b25zdCBDaGFyYWN0ZXJUeXBlKiBwdHIgPSBiZWdpbjsKLSAgICBjb25zdCBDaGFyYWN0ZXJUeXBl
KiBlbmQgPSBwdHIgKyBsZW5ndGg7Ci0gICAgcmV0dXJuIGdlbmVyaWNQYXJzZU51bWJlcihwdHIs
IGVuZCwgbnVtYmVyLCBmYWxzZSk7CisgICAgcmV0dXJuIG51bWJlcjsKIH0KIAotLy8gRXhwbGlj
aXRseSBpbnN0YW50aWF0ZSB0aGUgdHdvIGZsYXZvcnMgb2YgcGFyc2VTVkdOdW1iZXIoKSB0byBz
YXRpc2Z5IGV4dGVybmFsIGNhbGxlcnMKLXRlbXBsYXRlIGJvb2wgcGFyc2VTVkdOdW1iZXIoTENo
YXIqIGJlZ2luLCBzaXplX3QgbGVuZ3RoLCBkb3VibGUmKTsKLXRlbXBsYXRlIGJvb2wgcGFyc2VT
VkdOdW1iZXIoVUNoYXIqIGJlZ2luLCBzaXplX3QgbGVuZ3RoLCBkb3VibGUmKTsKLQotYm9vbCBw
YXJzZU51bWJlcihjb25zdCBMQ2hhciomIHB0ciwgY29uc3QgTENoYXIqIGVuZCwgZmxvYXQmIG51
bWJlciwgYm9vbCBza2lwKQorT3B0aW9uYWw8ZmxvYXQ+IHBhcnNlTnVtYmVyKGNvbnN0IExDaGFy
KiYgcHRyLCBjb25zdCBMQ2hhciogZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeSBza2lwKQogewot
ICAgIHJldHVybiBnZW5lcmljUGFyc2VOdW1iZXIocHRyLCBlbmQsIG51bWJlciwgc2tpcCk7Cisg
ICAgcmV0dXJuIGdlbmVyaWNQYXJzZU51bWJlcihwdHIsIGVuZCwgc2tpcCk7CiB9CiAKLWJvb2wg
cGFyc2VOdW1iZXIoY29uc3QgVUNoYXIqJiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQsIGZsb2F0JiBu
dW1iZXIsIGJvb2wgc2tpcCkgCitPcHRpb25hbDxmbG9hdD4gcGFyc2VOdW1iZXIoY29uc3QgVUNo
YXIqJiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQsIFN1ZmZpeFNraXBwaW5nUG9saWN5IHNraXApCiB7
Ci0gICAgcmV0dXJuIGdlbmVyaWNQYXJzZU51bWJlcihwdHIsIGVuZCwgbnVtYmVyLCBza2lwKTsK
KyAgICByZXR1cm4gZ2VuZXJpY1BhcnNlTnVtYmVyKHB0ciwgZW5kLCBza2lwKTsKIH0KIAotYm9v
bCBwYXJzZU51bWJlckZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0JiBudW1i
ZXIsIGJvb2wgc2tpcCkKK09wdGlvbmFsPGZsb2F0PiBwYXJzZU51bWJlcihjb25zdCBTdHJpbmcm
IHN0cmluZywgU3VmZml4U2tpcHBpbmdQb2xpY3kgc2tpcCkKIHsKICAgICBhdXRvIHVwY29udmVy
dGVkQ2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcoc3RyaW5nKS51cGNvbnZlcnRlZENoYXJhY3RlcnMo
KTsKICAgICBjb25zdCBVQ2hhciogcHRyID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOwogICAgIGNv
bnN0IFVDaGFyKiBlbmQgPSBwdHIgKyBzdHJpbmcubGVuZ3RoKCk7Ci0gICAgcmV0dXJuIGdlbmVy
aWNQYXJzZU51bWJlcihwdHIsIGVuZCwgbnVtYmVyLCBza2lwKSAmJiBwdHIgPT0gZW5kOworICAg
IGF1dG8gcmVzdWx0ID0gZ2VuZXJpY1BhcnNlTnVtYmVyKHB0ciwgZW5kLCBza2lwKTsKKyAgICBp
ZiAocHRyICE9IGVuZCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4g
cmVzdWx0OwogfQogCiAvLyBvbmx5IHVzZWQgdG8gcGFyc2UgbGFyZ2VBcmNGbGFnIGFuZCBzd2Vl
cEZsYWcgd2hpY2ggbXVzdCBiZSBhICIwIiBvciAiMSIKIC8vIGFuZCBtaWdodCBub3QgaGF2ZSBh
bnkgd2hpdGVzcGFjZS9jb21tYSBhZnRlciBpdAotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+Ci1ib29sIGdlbmVyaWNQYXJzZUFyY0ZsYWcoY29uc3QgQ2hhcmFjdGVyVHlwZSomIHB0
ciwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kLCBib29sJiBmbGFnKQordGVtcGxhdGUgPHR5cGVu
YW1lIENoYXJhY3RlclR5cGU+IE9wdGlvbmFsPGJvb2w+IGdlbmVyaWNQYXJzZUFyY0ZsYWcoY29u
c3QgQ2hhcmFjdGVyVHlwZSomIHB0ciwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kKQogewogICAg
IGlmIChwdHIgPj0gZW5kKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CisKICAgICBjb25zdCBDaGFyYWN0ZXJUeXBlIGZsYWdDaGFyID0gKnB0cisr
OworCisgICAgYm9vbCBmbGFnOwogICAgIGlmIChmbGFnQ2hhciA9PSAnMCcpCiAgICAgICAgIGZs
YWcgPSBmYWxzZTsKICAgICBlbHNlIGlmIChmbGFnQ2hhciA9PSAnMScpCiAgICAgICAgIGZsYWcg
PSB0cnVlOwogICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAorICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworCiAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxpbWl0
ZXIocHRyLCBlbmQpOwogICAgIAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmbGFnOwog
fQogCi1ib29sIHBhcnNlQXJjRmxhZyhjb25zdCBMQ2hhciomIHB0ciwgY29uc3QgTENoYXIqIGVu
ZCwgYm9vbCYgZmxhZykKK09wdGlvbmFsPGJvb2w+IHBhcnNlQXJjRmxhZyhjb25zdCBMQ2hhciom
IHB0ciwgY29uc3QgTENoYXIqIGVuZCkKIHsKLSAgICByZXR1cm4gZ2VuZXJpY1BhcnNlQXJjRmxh
ZyhwdHIsIGVuZCwgZmxhZyk7CisgICAgcmV0dXJuIGdlbmVyaWNQYXJzZUFyY0ZsYWcocHRyLCBl
bmQpOwogfQogCi1ib29sIHBhcnNlQXJjRmxhZyhjb25zdCBVQ2hhciomIHB0ciwgY29uc3QgVUNo
YXIqIGVuZCwgYm9vbCYgZmxhZykKK09wdGlvbmFsPGJvb2w+IHBhcnNlQXJjRmxhZyhjb25zdCBV
Q2hhciomIHB0ciwgY29uc3QgVUNoYXIqIGVuZCkKIHsKLSAgICByZXR1cm4gZ2VuZXJpY1BhcnNl
QXJjRmxhZyhwdHIsIGVuZCwgZmxhZyk7CisgICAgcmV0dXJuIGdlbmVyaWNQYXJzZUFyY0ZsYWco
cHRyLCBlbmQpOwogfQogCi1ib29sIHBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIoY29uc3QgU3Ry
aW5nJiBzLCBmbG9hdCYgeCwgZmxvYXQmIHkpCitPcHRpb25hbDxzdGQ6OnBhaXI8ZmxvYXQsIGZs
b2F0Pj4gcGFyc2VOdW1iZXJPcHRpb25hbE51bWJlcihjb25zdCBTdHJpbmcmIHMpCiB7CiAgICAg
aWYgKHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiAKICAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IFN0cmluZ1Zp
ZXcocykudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7CiAgICAgY29uc3QgVUNoYXIqIGN1ciA9IHVw
Y29udmVydGVkQ2hhcmFjdGVyczsKICAgICBjb25zdCBVQ2hhciogZW5kID0gY3VyICsgcy5sZW5n
dGgoKTsKIAotICAgIGlmICghcGFyc2VOdW1iZXIoY3VyLCBlbmQsIHgpKQotICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgYXV0byB4ID0gcGFyc2VOdW1iZXIoY3VyLCBlbmQpOworICAgIGlmICgh
eCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIGlmIChjdXIgPT0gZW5kKQot
ICAgICAgICB5ID0geDsKLSAgICBlbHNlIGlmICghcGFyc2VOdW1iZXIoY3VyLCBlbmQsIHksIGZh
bHNlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3Bh
aXIoKngsICp4KTsKIAotICAgIHJldHVybiBjdXIgPT0gZW5kOworICAgIGF1dG8geSA9IHBhcnNl
TnVtYmVyKGN1ciwgZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNraXApOworICAgIGlm
ICgheSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIGlmIChjdXIgIT0gZW5k
KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgcmV0dXJuIHN0ZDo6bWFrZV9w
YWlyKCp4LCAqeSk7CiB9CiAKLWJvb2wgcGFyc2VQb2ludChjb25zdCBTdHJpbmcmIHMsIEZsb2F0
UG9pbnQmIHBvaW50KQorT3B0aW9uYWw8RmxvYXRQb2ludD4gcGFyc2VQb2ludChjb25zdCBTdHJp
bmcmIHMpCiB7CiAgICAgaWYgKHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKICAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFj
dGVycyA9IFN0cmluZ1ZpZXcocykudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7CiAgICAgY29uc3Qg
VUNoYXIqIGN1ciA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKICAgICBjb25zdCBVQ2hhciogZW5k
ID0gY3VyICsgcy5sZW5ndGgoKTsKIAogICAgIGlmICghc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGN1
ciwgZW5kKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogCi0gICAgZmxvYXQgeCA9IDA7Ci0gICAgaWYgKCFwYXJzZU51bWJlcihjdXIsIGVuZCwg
eCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGZsb2F0IHkgPSAwOwotICAgIGlmICgh
cGFyc2VOdW1iZXIoY3VyLCBlbmQsIHkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBw
b2ludCA9IEZsb2F0UG9pbnQoeCwgeSk7CisgICAgYXV0byBwb2ludCA9IHBhcnNlRmxvYXRQb2lu
dChjdXIsIGVuZCk7CisgICAgaWYgKCFwb2ludCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKIAogICAgIC8vIERpc2FsbG93IGFueXRoaW5nIGV4Y2VwdCBzcGFjZXMgYXQgdGhlIGVuZC4K
LSAgICByZXR1cm4gIXNraXBPcHRpb25hbFNWR1NwYWNlcyhjdXIsIGVuZCk7CisgICAgaWYgKCFz
a2lwT3B0aW9uYWxTVkdTcGFjZXMoY3VyLCBlbmQpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworICAgIAorICAgIHJldHVybiBwb2ludDsKIH0KIAotYm9vbCBwYXJzZVJlY3QoY29uc3Qg
U3RyaW5nJiBzdHJpbmcsIEZsb2F0UmVjdCYgcmVjdCkKK09wdGlvbmFsPEZsb2F0UmVjdD4gcGFy
c2VSZWN0KGNvbnN0IFN0cmluZyYgc3RyaW5nKQogewogICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFy
YWN0ZXJzID0gU3RyaW5nVmlldyhzdHJpbmcpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwogICAg
IGNvbnN0IFVDaGFyKiBwdHIgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7CiAgICAgY29uc3QgVUNo
YXIqIGVuZCA9IHB0ciArIHN0cmluZy5sZW5ndGgoKTsKKyAgICAKICAgICBza2lwT3B0aW9uYWxT
VkdTcGFjZXMocHRyLCBlbmQpOwogICAgIAotICAgIGZsb2F0IHggPSAwOwotICAgIGZsb2F0IHkg
PSAwOwotICAgIGZsb2F0IHdpZHRoID0gMDsKLSAgICBmbG9hdCBoZWlnaHQgPSAwOwotICAgIGJv
b2wgdmFsaWQgPSBwYXJzZU51bWJlcihwdHIsIGVuZCwgeCkgJiYgcGFyc2VOdW1iZXIocHRyLCBl
bmQsIHkpICYmIHBhcnNlTnVtYmVyKHB0ciwgZW5kLCB3aWR0aCkgJiYgcGFyc2VOdW1iZXIocHRy
LCBlbmQsIGhlaWdodCwgZmFsc2UpOwotICAgIHJlY3QgPSBGbG9hdFJlY3QoeCwgeSwgd2lkdGgs
IGhlaWdodCk7Ci0gICAgcmV0dXJuIHZhbGlkOworICAgIGF1dG8geCA9IHBhcnNlTnVtYmVyKHB0
ciwgZW5kKTsKKyAgICBpZiAoIXgpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAg
YXV0byB5ID0gcGFyc2VOdW1iZXIocHRyLCBlbmQpOworICAgIGlmICgheSkKKyAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKKyAgICBhdXRvIHdpZHRoID0gcGFyc2VOdW1iZXIocHRyLCBlbmQp
OworICAgIGlmICghd2lkdGgpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgYXV0
byBoZWlnaHQgPSBwYXJzZU51bWJlcihwdHIsIGVuZCwgU3VmZml4U2tpcHBpbmdQb2xpY3k6OkRv
bnRTa2lwKTsKKyAgICBpZiAoIWhlaWdodCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
KworICAgIHJldHVybiBGbG9hdFJlY3QgeyAqeCwgKnksICp3aWR0aCwgKmhlaWdodCB9OwogfQog
Ci1ib29sIHBhcnNlR2x5cGhOYW1lKGNvbnN0IFN0cmluZyYgaW5wdXQsIEhhc2hTZXQ8U3RyaW5n
PiYgdmFsdWVzKQorT3B0aW9uYWw8SGFzaFNldDxTdHJpbmc+PiBwYXJzZUdseXBoTmFtZShjb25z
dCBTdHJpbmcmIGlucHV0KQogewogICAgIC8vIEZJWE1FOiBQYXJzaW5nIGVycm9yIGRldGVjdGlv
biBpcyBtaXNzaW5nLgotICAgIHZhbHVlcy5jbGVhcigpOworCisgICAgSGFzaFNldDxTdHJpbmc+
IHZhbHVlczsKIAogICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyhp
bnB1dCkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7CiAgICAgY29uc3QgVUNoYXIqIHB0ciA9IHVw
Y29udmVydGVkQ2hhcmFjdGVyczsKQEAgLTI4NywxMyArMjkyLDEzIEBAIGJvb2wgcGFyc2VHbHlw
aE5hbWUoY29uc3QgU3RyaW5nJiBpbnB1dCwKICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2Vz
T3JEZWxpbWl0ZXIocHRyLCBlbmQsICcsJyk7CiAgICAgfQogCi0gICAgcmV0dXJuIHRydWU7Cisg
ICAgcmV0dXJuIHZhbHVlczsKIH0KIAotc3RhdGljIGJvb2wgcGFyc2VVbmljb2RlUmFuZ2UoY29u
c3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgVW5pY29kZVJhbmdlJiByYW5n
ZSkKK3N0YXRpYyBPcHRpb25hbDxVbmljb2RlUmFuZ2U+IHBhcnNlVW5pY29kZVJhbmdlKGNvbnN0
IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgaWYgKGxlbmd0aCA8
IDIgfHwgY2hhcmFjdGVyc1swXSAhPSAnVScgfHwgY2hhcmFjdGVyc1sxXSAhPSAnKycpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAKICAg
ICAvLyBQYXJzZSB0aGUgc3RhcnRpbmcgaGV4IG51bWJlciAob3IgaXRzIHByZWZpeCkuCiAgICAg
dW5zaWduZWQgc3RhcnRSYW5nZSA9IDA7CkBAIC0zMDYsMTUgKzMxMSwxNSBAQCBzdGF0aWMgYm9v
bCBwYXJzZVVuaWNvZGVSYW5nZShjb25zdCBVQ2hhCiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgKytzdGFydExlbmd0aDsKICAgICAgICAgaWYgKHN0YXJ0TGVuZ3RoID4gNikKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAg
ICAgIHN0YXJ0UmFuZ2UgPSAoc3RhcnRSYW5nZSA8PCA0KSB8IHRvQVNDSUlIZXhWYWx1ZSgqcHRy
KTsKICAgICAgICAgKytwdHI7CiAgICAgfQotICAgIAorCiAgICAgLy8gSGFuZGxlIHRoZSBjYXNl
IG9mIHJhbmdlcyBzZXBhcmF0ZWQgYnkgIi0iIHNpZ24uCiAgICAgaWYgKDIgKyBzdGFydExlbmd0
aCA8IGxlbmd0aCAmJiAqcHRyID09ICctJykgewogICAgICAgICBpZiAoIXN0YXJ0TGVuZ3RoKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKICAgICAgICAgCiAgICAgICAgIC8vIFBhcnNlIHRoZSBlbmRpbmcgaGV4IG51bWJlciAob3Ig
aXRzIHByZWZpeCkuCiAgICAgICAgIHVuc2lnbmVkIGVuZFJhbmdlID0gMDsKQEAgLTMyNSwxNyAr
MzMwLDE4IEBAIHN0YXRpYyBib29sIHBhcnNlVW5pY29kZVJhbmdlKGNvbnN0IFVDaGEKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICsrZW5kTGVuZ3RoOwogICAgICAgICAgICAg
aWYgKGVuZExlbmd0aCA+IDYpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgICAgICBlbmRSYW5nZSA9IChl
bmRSYW5nZSA8PCA0KSB8IHRvQVNDSUlIZXhWYWx1ZSgqcHRyKTsKICAgICAgICAgICAgICsrcHRy
OwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoIWVuZExlbmd0aCkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAg
ICAgIAorICAgICAgICBVbmljb2RlUmFuZ2UgcmFuZ2U7CiAgICAgICAgIHJhbmdlLmZpcnN0ID0g
c3RhcnRSYW5nZTsKICAgICAgICAgcmFuZ2Uuc2Vjb25kID0gZW5kUmFuZ2U7Ci0gICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICByZXR1cm4gcmFuZ2U7CiAgICAgfQogICAgIAogICAgIC8vIEhh
bmRsZSB0aGUgY2FzZSBvZiBhIG51bWJlciB3aXRoIHNvbWUgb3B0aW9uYWwgdHJhaWxpbmcgcXVl
c3Rpb24gbWFya3MuCkBAIC0zNDUsMjcgKzM1MSwzMiBAQCBzdGF0aWMgYm9vbCBwYXJzZVVuaWNv
ZGVSYW5nZShjb25zdCBVQ2hhCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgKytzdGFydExl
bmd0aDsKICAgICAgICAgaWYgKHN0YXJ0TGVuZ3RoID4gNikKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIHN0YXJ0UmFu
Z2UgPDw9IDQ7CiAgICAgICAgIGVuZFJhbmdlID0gKGVuZFJhbmdlIDw8IDQpIHwgMHhGOwogICAg
ICAgICArK3B0cjsKICAgICB9CiAgICAgCiAgICAgaWYgKCFzdGFydExlbmd0aCkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIAorICAgIFVu
aWNvZGVSYW5nZSByYW5nZTsKICAgICByYW5nZS5maXJzdCA9IHN0YXJ0UmFuZ2U7CiAgICAgcmFu
Z2Uuc2Vjb25kID0gZW5kUmFuZ2U7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHJhbmdl
OwogfQogCi1ib29sIHBhcnNlS2VybmluZ1VuaWNvZGVTdHJpbmcoY29uc3QgU3RyaW5nJiBpbnB1
dCwgVW5pY29kZVJhbmdlcyYgcmFuZ2VMaXN0LCBIYXNoU2V0PFN0cmluZz4mIHN0cmluZ0xpc3Qp
CitPcHRpb25hbDxzdGQ6OnBhaXI8VW5pY29kZVJhbmdlcywgSGFzaFNldDxTdHJpbmc+Pj4gcGFy
c2VLZXJuaW5nVW5pY29kZVN0cmluZyhjb25zdCBTdHJpbmcmIGlucHV0KQogewogICAgIC8vIEZJ
WE1FOiBQYXJzaW5nIGVycm9yIGRldGVjdGlvbiBpcyBtaXNzaW5nLgorCiAgICAgYXV0byB1cGNv
bnZlcnRlZENoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KGlucHV0KS51cGNvbnZlcnRlZENoYXJhY3Rl
cnMoKTsKICAgICBjb25zdCBVQ2hhciogcHRyID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOwogICAg
IGNvbnN0IFVDaGFyKiBlbmQgPSBwdHIgKyBpbnB1dC5sZW5ndGgoKTsKIAorICAgIFVuaWNvZGVS
YW5nZXMgcmFuZ2VMaXN0OworICAgIEhhc2hTZXQ8U3RyaW5nPiBzdHJpbmdMaXN0OworCiAgICAg
d2hpbGUgKHB0ciA8IGVuZCkgewogICAgICAgICBjb25zdCBVQ2hhciogaW5wdXRTdGFydCA9IHB0
cjsKICAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCAmJiAqcHRyICE9ICcsJykKQEAgLTM3NSwxMDUg
KzM4NiwzNyBAQCBib29sIHBhcnNlS2VybmluZ1VuaWNvZGVTdHJpbmcoY29uc3QgU3RyCiAgICAg
ICAgICAgICBicmVhazsKIAogICAgICAgICAvLyBUcnkgdG8gcGFyc2UgdW5pY29kZSByYW5nZSBm
aXJzdAotICAgICAgICBVbmljb2RlUmFuZ2UgcmFuZ2U7Ci0gICAgICAgIGlmIChwYXJzZVVuaWNv
ZGVSYW5nZShpbnB1dFN0YXJ0LCBwdHIgLSBpbnB1dFN0YXJ0LCByYW5nZSkpCi0gICAgICAgICAg
ICByYW5nZUxpc3QuYXBwZW5kKHJhbmdlKTsKKyAgICAgICAgaWYgKGF1dG8gcmFuZ2UgPSBwYXJz
ZVVuaWNvZGVSYW5nZShpbnB1dFN0YXJ0LCBwdHIgLSBpbnB1dFN0YXJ0KSkKKyAgICAgICAgICAg
IHJhbmdlTGlzdC5hcHBlbmQoV1RGTW92ZSgqcmFuZ2UpKTsKICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgc3RyaW5nTGlzdC5hZGQoU3RyaW5nKGlucHV0U3RhcnQsIHB0ciAtIGlucHV0U3RhcnQp
KTsKICAgICAgICAgKytwdHI7CiAgICAgfQogCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJu
IHN0ZDo6bWFrZV9wYWlyKHJhbmdlTGlzdCwgc3RyaW5nTGlzdCk7CiB9CiAKLVZlY3RvcjxTdHJp
bmc+IHBhcnNlRGVsaW1pdGVkU3RyaW5nKGNvbnN0IFN0cmluZyYgaW5wdXQsIGNvbnN0IGNoYXIg
c2VwZXJhdG9yKQordGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBPcHRp
b25hbDxGbG9hdFBvaW50PiBnZW5lcmljUGFyc2VGbG9hdFBvaW50KGNvbnN0IENoYXJhY3RlclR5
cGUqJiBjdXJyZW50LCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQpCiB7Ci0gICAgVmVjdG9yPFN0
cmluZz4gdmFsdWVzOwotCi0gICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBTdHJpbmdW
aWV3KGlucHV0KS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciogcHRy
ID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBwdHIgKyBp
bnB1dC5sZW5ndGgoKTsKLSAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMocHRyLCBlbmQpOworICAg
IGF1dG8geCA9IHBhcnNlTnVtYmVyKGN1cnJlbnQsIGVuZCk7CisgICAgaWYgKCF4KQorICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgd2hpbGUgKHB0ciA8IGVuZCkgewotICAgICAg
ICAvLyBMZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZSBzcGFjZSwgYW5kIHdoaXRlIHNwYWNlIGJl
Zm9yZSBhbmQgYWZ0ZXIgc2VtaWNvbG9uIHNlcGFyYXRvcnMsIHdpbGwgYmUgaWdub3JlZC4KLSAg
ICAgICAgY29uc3QgVUNoYXIqIGlucHV0U3RhcnQgPSBwdHI7Ci0gICAgICAgIHdoaWxlIChwdHIg
PCBlbmQgJiYgKnB0ciAhPSBzZXBlcmF0b3IpIC8vIGNhcmVmdWwgbm90IHRvIGlnbm9yZSB3aGl0
ZXNwYWNlIGluc2lkZSBpbnB1dHMKLSAgICAgICAgICAgIHB0cisrOworICAgIGF1dG8geSA9IHBh
cnNlTnVtYmVyKGN1cnJlbnQsIGVuZCk7CisgICAgaWYgKCF5KQorICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogCi0gICAgICAgIGlmIChwdHIgPT0gaW5wdXRTdGFydCkKLSAgICAgICAgICAg
IGJyZWFrOwotCi0gICAgICAgIC8vIHdhbGsgYmFja3dhcmRzIGZyb20gdGhlIDsgdG8gaWdub3Jl
IGFueSB3aGl0ZXNwYWNlCi0gICAgICAgIGNvbnN0IFVDaGFyKiBpbnB1dEVuZCA9IHB0ciAtIDE7
Ci0gICAgICAgIHdoaWxlIChpbnB1dFN0YXJ0IDwgaW5wdXRFbmQgJiYgaXNTVkdTcGFjZSgqaW5w
dXRFbmQpKQotICAgICAgICAgICAgaW5wdXRFbmQtLTsKLQotICAgICAgICB2YWx1ZXMuYXBwZW5k
KFN0cmluZyhpbnB1dFN0YXJ0LCBpbnB1dEVuZCAtIGlucHV0U3RhcnQgKyAxKSk7Ci0gICAgICAg
IHNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVsaW1pdGVyKHB0ciwgZW5kLCBzZXBlcmF0b3IpOwot
ICAgIH0KLQotICAgIHJldHVybiB2YWx1ZXM7CisgICAgcmV0dXJuIEZsb2F0UG9pbnQgeyAqeCwg
KnkgfTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1ib29sIHBhcnNl
RmxvYXRQb2ludChjb25zdCBDaGFyYWN0ZXJUeXBlKiYgY3VycmVudCwgY29uc3QgQ2hhcmFjdGVy
VHlwZSogZW5kLCBGbG9hdFBvaW50JiBwb2ludCkKK09wdGlvbmFsPEZsb2F0UG9pbnQ+IHBhcnNl
RmxvYXRQb2ludChjb25zdCBMQ2hhciomIGN1cnJlbnQsIGNvbnN0IExDaGFyKiBlbmQpCiB7Ci0g
ICAgZmxvYXQgeDsKLSAgICBmbG9hdCB5OwotICAgIGlmICghcGFyc2VOdW1iZXIoY3VycmVudCwg
ZW5kLCB4KQotICAgICAgICB8fCAhcGFyc2VOdW1iZXIoY3VycmVudCwgZW5kLCB5KSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIHBvaW50ID0gRmxvYXRQb2ludCh4LCB5KTsKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotdGVtcGxhdGUgYm9vbCBwYXJzZUZsb2F0UG9pbnQoY29uc3QgTENoYXIq
JiBjdXJyZW50LCBjb25zdCBMQ2hhciogZW5kLCBGbG9hdFBvaW50JiBwb2ludDEpOwotdGVtcGxh
dGUgYm9vbCBwYXJzZUZsb2F0UG9pbnQoY29uc3QgVUNoYXIqJiBjdXJyZW50LCBjb25zdCBVQ2hh
ciogZW5kLCBGbG9hdFBvaW50JiBwb2ludDEpOwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZT4KLWlubGluZSBib29sIHBhcnNlRmxvYXRQb2ludDIoY29uc3QgQ2hhcmFjdGVyVHlw
ZSomIGN1cnJlbnQsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCwgRmxvYXRQb2ludCYgcG9pbnQx
LCBGbG9hdFBvaW50JiBwb2ludDIpCi17Ci0gICAgZmxvYXQgeDE7Ci0gICAgZmxvYXQgeTE7Ci0g
ICAgZmxvYXQgeDI7Ci0gICAgZmxvYXQgeTI7Ci0gICAgaWYgKCFwYXJzZU51bWJlcihjdXJyZW50
LCBlbmQsIHgxKQotICAgICAgICB8fCAhcGFyc2VOdW1iZXIoY3VycmVudCwgZW5kLCB5MSkKLSAg
ICAgICAgfHwgIXBhcnNlTnVtYmVyKGN1cnJlbnQsIGVuZCwgeDIpCi0gICAgICAgIHx8ICFwYXJz
ZU51bWJlcihjdXJyZW50LCBlbmQsIHkyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHBv
aW50MSA9IEZsb2F0UG9pbnQoeDEsIHkxKTsKLSAgICBwb2ludDIgPSBGbG9hdFBvaW50KHgyLCB5
Mik7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXRlbXBsYXRlIGJvb2wgcGFyc2VGbG9hdFBvaW50
Mihjb25zdCBMQ2hhciomIGN1cnJlbnQsIGNvbnN0IExDaGFyKiBlbmQsIEZsb2F0UG9pbnQmIHBv
aW50MSwgRmxvYXRQb2ludCYgcG9pbnQyKTsKLXRlbXBsYXRlIGJvb2wgcGFyc2VGbG9hdFBvaW50
Mihjb25zdCBVQ2hhciomIGN1cnJlbnQsIGNvbnN0IFVDaGFyKiBlbmQsIEZsb2F0UG9pbnQmIHBv
aW50MSwgRmxvYXRQb2ludCYgcG9pbnQyKTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+Ci1ib29sIHBhcnNlRmxvYXRQb2ludDMoY29uc3QgQ2hhcmFjdGVyVHlwZSomIGN1cnJl
bnQsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCwgRmxvYXRQb2ludCYgcG9pbnQxLCBGbG9hdFBv
aW50JiBwb2ludDIsIEZsb2F0UG9pbnQmIHBvaW50MykKLXsKLSAgICBmbG9hdCB4MTsKLSAgICBm
bG9hdCB5MTsKLSAgICBmbG9hdCB4MjsKLSAgICBmbG9hdCB5MjsKLSAgICBmbG9hdCB4MzsKLSAg
ICBmbG9hdCB5MzsKLSAgICBpZiAoIXBhcnNlTnVtYmVyKGN1cnJlbnQsIGVuZCwgeDEpCi0gICAg
ICAgIHx8ICFwYXJzZU51bWJlcihjdXJyZW50LCBlbmQsIHkxKQotICAgICAgICB8fCAhcGFyc2VO
dW1iZXIoY3VycmVudCwgZW5kLCB4MikKLSAgICAgICAgfHwgIXBhcnNlTnVtYmVyKGN1cnJlbnQs
IGVuZCwgeTIpCi0gICAgICAgIHx8ICFwYXJzZU51bWJlcihjdXJyZW50LCBlbmQsIHgzKQotICAg
ICAgICB8fCAhcGFyc2VOdW1iZXIoY3VycmVudCwgZW5kLCB5MykpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBwb2ludDEgPSBGbG9hdFBvaW50KHgxLCB5MSk7Ci0gICAgcG9pbnQyID0gRmxv
YXRQb2ludCh4MiwgeTIpOwotICAgIHBvaW50MyA9IEZsb2F0UG9pbnQoeDMsIHkzKTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZ2VuZXJpY1BhcnNlRmxvYXRQb2ludChjdXJyZW50LCBl
bmQpOwogfQogCi10ZW1wbGF0ZSBib29sIHBhcnNlRmxvYXRQb2ludDMoY29uc3QgTENoYXIqJiBj
dXJyZW50LCBjb25zdCBMQ2hhciogZW5kLCBGbG9hdFBvaW50JiBwb2ludDEsIEZsb2F0UG9pbnQm
IHBvaW50MiwgRmxvYXRQb2ludCYgcG9pbnQzKTsKLXRlbXBsYXRlIGJvb2wgcGFyc2VGbG9hdFBv
aW50Myhjb25zdCBVQ2hhciomIGN1cnJlbnQsIGNvbnN0IFVDaGFyKiBlbmQsIEZsb2F0UG9pbnQm
IHBvaW50MSwgRmxvYXRQb2ludCYgcG9pbnQyLCBGbG9hdFBvaW50JiBwb2ludDMpOworT3B0aW9u
YWw8RmxvYXRQb2ludD4gcGFyc2VGbG9hdFBvaW50KGNvbnN0IFVDaGFyKiYgY3VycmVudCwgY29u
c3QgVUNoYXIqIGVuZCkKK3sKKyAgICByZXR1cm4gZ2VuZXJpY1BhcnNlRmxvYXRQb2ludChjdXJy
ZW50LCBlbmQpOworfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGFyc2VyVXRp
bGl0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhcnNlclV0aWxp
dGllcy5oCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGFyc2Vy
VXRpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAKICNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKLXR5cGVkZWYg
c3RkOjpwYWlyPHVuc2lnbmVkLCB1bnNpZ25lZD4gVW5pY29kZVJhbmdlOwordHlwZWRlZiBzdGQ6
OnBhaXI8VUNoYXIzMiwgVUNoYXIzMj4gVW5pY29kZVJhbmdlOwogdHlwZWRlZiBWZWN0b3I8VW5p
Y29kZVJhbmdlPiBVbmljb2RlUmFuZ2VzOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zMyw0
MiArMzMsNDUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgRmxvYXRQb2ludDsKIGNsYXNz
IEZsb2F0UmVjdDsKIAotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1ib29sIHBh
cnNlU1ZHTnVtYmVyKENoYXJhY3RlclR5cGUqIHB0ciwgc2l6ZV90IGxlbmd0aCwgZG91YmxlJiBu
dW1iZXIpOwotYm9vbCBwYXJzZU51bWJlcihjb25zdCBMQ2hhciomIHB0ciwgY29uc3QgTENoYXIq
IGVuZCwgZmxvYXQmIG51bWJlciwgYm9vbCBza2lwID0gdHJ1ZSk7Ci1ib29sIHBhcnNlTnVtYmVy
KGNvbnN0IFVDaGFyKiYgcHRyLCBjb25zdCBVQ2hhciogZW5kLCBmbG9hdCYgbnVtYmVyLCBib29s
IHNraXAgPSB0cnVlKTsKLWJvb2wgcGFyc2VOdW1iZXJGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYs
IGZsb2F0JiBudW1iZXIsIGJvb2wgc2tpcCA9IHRydWUpOwotYm9vbCBwYXJzZU51bWJlck9wdGlv
bmFsTnVtYmVyKGNvbnN0IFN0cmluZyYgcywgZmxvYXQmIGgsIGZsb2F0JiB2KTsKLWJvb2wgcGFy
c2VBcmNGbGFnKGNvbnN0IExDaGFyKiYgcHRyLCBjb25zdCBMQ2hhciogZW5kLCBib29sJiBmbGFn
KTsKLWJvb2wgcGFyc2VBcmNGbGFnKGNvbnN0IFVDaGFyKiYgcHRyLCBjb25zdCBVQ2hhciogZW5k
LCBib29sJiBmbGFnKTsKLWJvb2wgcGFyc2VQb2ludChjb25zdCBTdHJpbmcmLCBGbG9hdFBvaW50
Jik7Ci1ib29sIHBhcnNlUmVjdChjb25zdCBTdHJpbmcmLCBGbG9hdFJlY3QmKTsKLQotdGVtcGxh
dGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1ib29sIHBhcnNlRmxvYXRQb2ludChjb25zdCBD
aGFyYWN0ZXJUeXBlKiYgY3VycmVudCwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kLCBGbG9hdFBv
aW50Jik7Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLWJvb2wgcGFyc2VGbG9h
dFBvaW50Mihjb25zdCBDaGFyYWN0ZXJUeXBlKiYgY3VycmVudCwgY29uc3QgQ2hhcmFjdGVyVHlw
ZSogZW5kLCBGbG9hdFBvaW50JiwgRmxvYXRQb2ludCYpOwotdGVtcGxhdGUgPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+Ci1ib29sIHBhcnNlRmxvYXRQb2ludDMoY29uc3QgQ2hhcmFjdGVyVHlwZSom
IGN1cnJlbnQsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCwgRmxvYXRQb2ludCYsIEZsb2F0UG9p
bnQmLCBGbG9hdFBvaW50Jik7CitlbnVtIGNsYXNzIFN1ZmZpeFNraXBwaW5nUG9saWN5IHsKKyAg
ICBEb250U2tpcCwKKyAgICBTa2lwCit9OworCitPcHRpb25hbDxmbG9hdD4gcGFyc2VOdW1iZXIo
Y29uc3QgTENoYXIqJiBjdXJyZW50LCBjb25zdCBMQ2hhciogZW5kLCBTdWZmaXhTa2lwcGluZ1Bv
bGljeSA9IFN1ZmZpeFNraXBwaW5nUG9saWN5OjpTa2lwKTsKK09wdGlvbmFsPGZsb2F0PiBwYXJz
ZU51bWJlcihjb25zdCBVQ2hhciomIGN1cnJlbnQsIGNvbnN0IFVDaGFyKiBlbmQsIFN1ZmZpeFNr
aXBwaW5nUG9saWN5ID0gU3VmZml4U2tpcHBpbmdQb2xpY3k6OlNraXApOworT3B0aW9uYWw8Zmxv
YXQ+IHBhcnNlTnVtYmVyKGNvbnN0IFN0cmluZyYsIFN1ZmZpeFNraXBwaW5nUG9saWN5ID0gU3Vm
Zml4U2tpcHBpbmdQb2xpY3k6OlNraXApOworCitPcHRpb25hbDxzdGQ6OnBhaXI8ZmxvYXQsIGZs
b2F0Pj4gcGFyc2VOdW1iZXJPcHRpb25hbE51bWJlcihjb25zdCBTdHJpbmcmKTsKKworT3B0aW9u
YWw8Ym9vbD4gcGFyc2VBcmNGbGFnKGNvbnN0IExDaGFyKiYgY3VycmVudCwgY29uc3QgTENoYXIq
IGVuZCk7CitPcHRpb25hbDxib29sPiBwYXJzZUFyY0ZsYWcoY29uc3QgVUNoYXIqJiBjdXJyZW50
LCBjb25zdCBVQ2hhciogZW5kKTsKKworT3B0aW9uYWw8RmxvYXRQb2ludD4gcGFyc2VQb2ludChj
b25zdCBTdHJpbmcmKTsKK09wdGlvbmFsPEZsb2F0UmVjdD4gcGFyc2VSZWN0KGNvbnN0IFN0cmlu
ZyYpOworCitPcHRpb25hbDxGbG9hdFBvaW50PiBwYXJzZUZsb2F0UG9pbnQoY29uc3QgTENoYXIq
JiBjdXJyZW50LCBjb25zdCBMQ2hhciogZW5kKTsKK09wdGlvbmFsPEZsb2F0UG9pbnQ+IHBhcnNl
RmxvYXRQb2ludChjb25zdCBVQ2hhciomIGN1cnJlbnQsIGNvbnN0IFVDaGFyKiBlbmQpOworCitP
cHRpb25hbDxzdGQ6OnBhaXI8VW5pY29kZVJhbmdlcywgSGFzaFNldDxTdHJpbmc+Pj4gcGFyc2VL
ZXJuaW5nVW5pY29kZVN0cmluZyhjb25zdCBTdHJpbmcmKTsKK09wdGlvbmFsPEhhc2hTZXQ8U3Ry
aW5nPj4gcGFyc2VHbHlwaE5hbWUoY29uc3QgU3RyaW5nJik7CisKIAogLy8gU1ZHIGFsbG93cyBz
ZXZlcmFsIGRpZmZlcmVudCB3aGl0ZXNwYWNlIGNoYXJhY3RlcnM6CiAvLyBodHRwOi8vd3d3Lncz
Lm9yZy9UUi9TVkcvcGF0aHMuaHRtbCNQYXRoRGF0YUJORgotdGVtcGxhdGUgPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+Ci1pbmxpbmUgYm9vbCBpc1NWR1NwYWNlKENoYXJhY3RlclR5cGUgYykKK3Rl
bXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGlubGluZSBib29sIGlzU1ZHU3BhY2UoQ2hh
cmFjdGVyVHlwZSBjKQogewogICAgIHJldHVybiBjID09ICcgJyB8fCBjID09ICdcdCcgfHwgYyA9
PSAnXG4nIHx8IGMgPT0gJ1xyJzsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5
cGU+Ci1pbmxpbmUgYm9vbCBza2lwT3B0aW9uYWxTVkdTcGFjZXMoY29uc3QgQ2hhcmFjdGVyVHlw
ZSomIHB0ciwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hh
cmFjdGVyVHlwZT4gaW5saW5lIGJvb2wgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGNvbnN0IENoYXJh
Y3RlclR5cGUqJiBwdHIsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCkKIHsKICAgICB3aGlsZSAo
cHRyIDwgZW5kICYmIGlzU1ZHU3BhY2UoKnB0cikpCiAgICAgICAgIHB0cisrOwogICAgIHJldHVy
biBwdHIgPCBlbmQ7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotaW5s
aW5lIGJvb2wgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxpbWl0ZXIoY29uc3QgQ2hhcmFjdGVy
VHlwZSomIHB0ciwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kLCBjaGFyIGRlbGltaXRlciA9ICcs
JykKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGlubGluZSBib29sIHNraXBPcHRp
b25hbFNWR1NwYWNlc09yRGVsaW1pdGVyKGNvbnN0IENoYXJhY3RlclR5cGUqJiBwdHIsIGNvbnN0
IENoYXJhY3RlclR5cGUqIGVuZCwgY2hhciBkZWxpbWl0ZXIgPSAnLCcpCiB7CiAgICAgaWYgKHB0
ciA8IGVuZCAmJiAhaXNTVkdTcGFjZSgqcHRyKSAmJiAqcHRyICE9IGRlbGltaXRlcikKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwpAQCAtODEsMTAgKzg0LDYgQEAgaW5saW5lIGJvb2wgc2tpcE9wdGlv
bmFsU1ZHU3BhY2VzT3JEZWxpbQogICAgIHJldHVybiBwdHIgPCBlbmQ7CiB9CiAKLVZlY3RvcjxT
dHJpbmc+IHBhcnNlRGVsaW1pdGVkU3RyaW5nKGNvbnN0IFN0cmluZyYgaW5wdXQsIGNvbnN0IGNo
YXIgc2VwZXJhdG9yKTsKLWJvb2wgcGFyc2VLZXJuaW5nVW5pY29kZVN0cmluZyhjb25zdCBTdHJp
bmcmIGlucHV0LCBVbmljb2RlUmFuZ2VzJiwgSGFzaFNldDxTdHJpbmc+JiBzdHJpbmdMaXN0KTsK
LWJvb2wgcGFyc2VHbHlwaE5hbWUoY29uc3QgU3RyaW5nJiBpbnB1dCwgSGFzaFNldDxTdHJpbmc+
JiB2YWx1ZXMpOwotCiBpbmxpbmUgYm9vbCBza2lwU3RyaW5nKGNvbnN0IFVDaGFyKiYgcHRyLCBj
b25zdCBVQ2hhciogZW5kLCBjb25zdCBVQ2hhciogbmFtZSwgaW50IGxlbmd0aCkKIHsKICAgICBp
ZiAoZW5kIC0gcHRyIDwgbGVuZ3RoKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhC
bGVuZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEJsZW5k
ZXIuY3BwCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEJs
ZW5kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsMjAwICsxMTYsMTk4IEBAIEZsb2F0UG9p
bnQgU1ZHUGF0aEJsZW5kZXI6OmJsZW5kQW5pbWF0ZWQKICAgICByZXR1cm4gYW5pbWF0ZWRQb2lu
dDsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb24+IHVzaW5nIFB1bGxGcm9tU291cmNl
c1Jlc3VsdCA9IHN0ZDo6cGFpcjx0eXBlbmFtZSBzdGQ6Omludm9rZV9yZXN1bHRfdDxGdW5jdGlv
biwgU1ZHUGF0aFNvdXJjZT46OnZhbHVlX3R5cGUsIHR5cGVuYW1lIHN0ZDo6aW52b2tlX3Jlc3Vs
dF90PEZ1bmN0aW9uLCBTVkdQYXRoU291cmNlPjo6dmFsdWVfdHlwZT47Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdGlvbj4gc3RhdGljIE9wdGlvbmFsPFB1bGxGcm9tU291cmNlc1Jlc3VsdDxGdW5j
dGlvbj4+IHB1bGxGcm9tU291cmNlcyhTVkdQYXRoU291cmNlJiBmcm9tU291cmNlLCBTVkdQYXRo
U291cmNlJiB0b1NvdXJjZSwgRnVuY3Rpb24mJiBmdW5jdGlvbikKK3sKKyAgICBpZiAoIWZyb21T
b3VyY2UuaGFzTW9yZURhdGEoKSkKKyAgICAgICAgcmV0dXJuIFB1bGxGcm9tU291cmNlc1Jlc3Vs
dDxGdW5jdGlvbj4geyB9OworCisgICAgYXV0byBwYXJzZWRGcm9tID0gc3RkOjppbnZva2UoZnVu
Y3Rpb24sIGZyb21Tb3VyY2UpOworICAgIGlmICghcGFyc2VkRnJvbSkKKyAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKyAgICBhdXRvIHBhcnNlZFRvID0gc3RkOjppbnZva2UoZnVuY3Rpb24s
IHRvU291cmNlKTsKKyAgICBpZiAoIXBhcnNlZFRvKQorICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworCisgICAgcmV0dXJuIFB1bGxGcm9tU291cmNlc1Jlc3VsdDxGdW5jdGlvbj4geyBXVEZN
b3ZlKCpwYXJzZWRGcm9tKSwgV1RGTW92ZSgqcGFyc2VkVG8pIH07Cit9CisKIGJvb2wgU1ZHUGF0
aEJsZW5kZXI6OmJsZW5kTW92ZVRvU2VnbWVudChmbG9hdCBwcm9ncmVzcykKIHsKLSAgICBGbG9h
dFBvaW50IGZyb21UYXJnZXRQb2ludDsKLSAgICBGbG9hdFBvaW50IHRvVGFyZ2V0UG9pbnQ7Ci0g
ICAgaWYgKChtX2Zyb21Tb3VyY2UuaGFzTW9yZURhdGEoKSAmJiAhbV9mcm9tU291cmNlLnBhcnNl
TW92ZVRvU2VnbWVudChmcm9tVGFyZ2V0UG9pbnQpKQotICAgICAgICB8fCAhbV90b1NvdXJjZS5w
YXJzZU1vdmVUb1NlZ21lbnQodG9UYXJnZXRQb2ludCkpCisgICAgYXV0byByZXN1bHQgPSBwdWxs
RnJvbVNvdXJjZXMobV9mcm9tU291cmNlLCBtX3RvU291cmNlLCAmU1ZHUGF0aFNvdXJjZTo6cGFy
c2VNb3ZlVG9TZWdtZW50KTsKKyAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgaWYgKCFtX2NvbnN1bWVyKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIG1f
Y29uc3VtZXItPm1vdmVUbyhibGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tVGFyZ2V0UG9pbnQs
IHRvVGFyZ2V0UG9pbnQsIHByb2dyZXNzKSwgZmFsc2UsIG1faXNJbkZpcnN0SGFsZk9mQW5pbWF0
aW9uID8gbV9mcm9tTW9kZSA6IG1fdG9Nb2RlKTsKLSAgICBtX2Zyb21DdXJyZW50UG9pbnQgPSBt
X2Zyb21Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyBmcm9tVGFyZ2V0UG9pbnQgOiBtX2Zy
b21DdXJyZW50UG9pbnQgKyBmcm9tVGFyZ2V0UG9pbnQ7Ci0gICAgbV90b0N1cnJlbnRQb2ludCA9
IG1fdG9Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyB0b1RhcmdldFBvaW50IDogbV90b0N1
cnJlbnRQb2ludCArIHRvVGFyZ2V0UG9pbnQ7CisgICAgYXV0byBbZnJvbSwgdG9dID0gKnJlc3Vs
dDsKKworICAgIG1fY29uc3VtZXItPm1vdmVUbyhibGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9t
LnRhcmdldFBvaW50LCB0by50YXJnZXRQb2ludCwgcHJvZ3Jlc3MpLCBmYWxzZSwgbV9pc0luRmly
c3RIYWxmT2ZBbmltYXRpb24gPyBtX2Zyb21Nb2RlIDogbV90b01vZGUpOworICAgIG1fZnJvbUN1
cnJlbnRQb2ludCA9IG1fZnJvbU1vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IGZyb20udGFy
Z2V0UG9pbnQgOiBtX2Zyb21DdXJyZW50UG9pbnQgKyBmcm9tLnRhcmdldFBvaW50OworICAgIG1f
dG9DdXJyZW50UG9pbnQgPSBtX3RvTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gdG8udGFy
Z2V0UG9pbnQgOiBtX3RvQ3VycmVudFBvaW50ICsgdG8udGFyZ2V0UG9pbnQ7CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKIGJvb2wgU1ZHUGF0aEJsZW5kZXI6OmJsZW5kTGluZVRvU2VnbWVudChmbG9h
dCBwcm9ncmVzcykKIHsKLSAgICBGbG9hdFBvaW50IGZyb21UYXJnZXRQb2ludDsKLSAgICBGbG9h
dFBvaW50IHRvVGFyZ2V0UG9pbnQ7Ci0gICAgaWYgKChtX2Zyb21Tb3VyY2UuaGFzTW9yZURhdGEo
KSAmJiAhbV9mcm9tU291cmNlLnBhcnNlTGluZVRvU2VnbWVudChmcm9tVGFyZ2V0UG9pbnQpKQot
ICAgICAgICB8fCAhbV90b1NvdXJjZS5wYXJzZUxpbmVUb1NlZ21lbnQodG9UYXJnZXRQb2ludCkp
CisgICAgYXV0byByZXN1bHQgPSBwdWxsRnJvbVNvdXJjZXMobV9mcm9tU291cmNlLCBtX3RvU291
cmNlLCAmU1ZHUGF0aFNvdXJjZTo6cGFyc2VMaW5lVG9TZWdtZW50KTsKKyAgICBpZiAoIXJlc3Vs
dCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKCFtX2NvbnN1bWVyKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKIAotICAgIG1fY29uc3VtZXItPmxpbmVUbyhibGVuZEFuaW1hdGVkRmxv
YXRQb2ludChmcm9tVGFyZ2V0UG9pbnQsIHRvVGFyZ2V0UG9pbnQsIHByb2dyZXNzKSwgbV9pc0lu
Rmlyc3RIYWxmT2ZBbmltYXRpb24gPyBtX2Zyb21Nb2RlIDogbV90b01vZGUpOwotICAgIG1fZnJv
bUN1cnJlbnRQb2ludCA9IG1fZnJvbU1vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IGZyb21U
YXJnZXRQb2ludCA6IG1fZnJvbUN1cnJlbnRQb2ludCArIGZyb21UYXJnZXRQb2ludDsKLSAgICBt
X3RvQ3VycmVudFBvaW50ID0gbV90b01vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IHRvVGFy
Z2V0UG9pbnQgOiBtX3RvQ3VycmVudFBvaW50ICsgdG9UYXJnZXRQb2ludDsKKyAgICBhdXRvIFtm
cm9tLCB0b10gPSAqcmVzdWx0OworCisgICAgbV9jb25zdW1lci0+bGluZVRvKGJsZW5kQW5pbWF0
ZWRGbG9hdFBvaW50KGZyb20udGFyZ2V0UG9pbnQsIHRvLnRhcmdldFBvaW50LCBwcm9ncmVzcyks
IG1faXNJbkZpcnN0SGFsZk9mQW5pbWF0aW9uID8gbV9mcm9tTW9kZSA6IG1fdG9Nb2RlKTsKKyAg
ICBtX2Zyb21DdXJyZW50UG9pbnQgPSBtX2Zyb21Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMg
PyBmcm9tLnRhcmdldFBvaW50IDogbV9mcm9tQ3VycmVudFBvaW50ICsgZnJvbS50YXJnZXRQb2lu
dDsKKyAgICBtX3RvQ3VycmVudFBvaW50ID0gbV90b01vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRl
cyA/IHRvLnRhcmdldFBvaW50IDogbV90b0N1cnJlbnRQb2ludCArIHRvLnRhcmdldFBvaW50Owog
ICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIFNWR1BhdGhCbGVuZGVyOjpibGVuZExpbmVUb0hv
cml6b250YWxTZWdtZW50KGZsb2F0IHByb2dyZXNzKQogewotICAgIGZsb2F0IGZyb21YID0gMDsK
LSAgICBmbG9hdCB0b1ggPSAwOwotICAgIGlmICgobV9mcm9tU291cmNlLmhhc01vcmVEYXRhKCkg
JiYgIW1fZnJvbVNvdXJjZS5wYXJzZUxpbmVUb0hvcml6b250YWxTZWdtZW50KGZyb21YKSkKLSAg
ICAgICAgfHwgIW1fdG9Tb3VyY2UucGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudCh0b1gpKQor
ICAgIGF1dG8gcmVzdWx0ID0gcHVsbEZyb21Tb3VyY2VzKG1fZnJvbVNvdXJjZSwgbV90b1NvdXJj
ZSwgJlNWR1BhdGhTb3VyY2U6OnBhcnNlTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQpOworICAgIGlm
ICghcmVzdWx0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoIW1fY29uc3VtZXIp
CiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgbV9jb25zdW1lci0+bGluZVRvSG9yaXpvbnRh
bChibGVuZEFuaW1hdGVkRGltZW5zb25hbEZsb2F0KGZyb21YLCB0b1gsIEJsZW5kSG9yaXpvbnRh
bCwgcHJvZ3Jlc3MpLCBtX2lzSW5GaXJzdEhhbGZPZkFuaW1hdGlvbiA/IG1fZnJvbU1vZGUgOiBt
X3RvTW9kZSk7Ci0gICAgbV9mcm9tQ3VycmVudFBvaW50LnNldFgobV9mcm9tTW9kZSA9PSBBYnNv
bHV0ZUNvb3JkaW5hdGVzID8gZnJvbVggOiBtX2Zyb21DdXJyZW50UG9pbnQueCgpICsgZnJvbVgp
OwotICAgIG1fdG9DdXJyZW50UG9pbnQuc2V0WChtX3RvTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5h
dGVzID8gdG9YIDogbV90b0N1cnJlbnRQb2ludC54KCkgKyB0b1gpOworICAgIGF1dG8gW2Zyb20s
IHRvXSA9ICpyZXN1bHQ7CisKKyAgICBtX2NvbnN1bWVyLT5saW5lVG9Ib3Jpem9udGFsKGJsZW5k
QW5pbWF0ZWREaW1lbnNvbmFsRmxvYXQoZnJvbS54LCB0by54LCBCbGVuZEhvcml6b250YWwsIHBy
b2dyZXNzKSwgbV9pc0luRmlyc3RIYWxmT2ZBbmltYXRpb24gPyBtX2Zyb21Nb2RlIDogbV90b01v
ZGUpOworICAgIG1fZnJvbUN1cnJlbnRQb2ludC5zZXRYKG1fZnJvbU1vZGUgPT0gQWJzb2x1dGVD
b29yZGluYXRlcyA/IGZyb20ueCA6IG1fZnJvbUN1cnJlbnRQb2ludC54KCkgKyBmcm9tLngpOwor
ICAgIG1fdG9DdXJyZW50UG9pbnQuc2V0WChtX3RvTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVz
ID8gdG8ueCA6IG1fdG9DdXJyZW50UG9pbnQueCgpICsgdG8ueCk7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKIGJvb2wgU1ZHUGF0aEJsZW5kZXI6OmJsZW5kTGluZVRvVmVydGljYWxTZWdtZW50KGZs
b2F0IHByb2dyZXNzKQogewotICAgIGZsb2F0IGZyb21ZID0gMDsKLSAgICBmbG9hdCB0b1kgPSAw
OwotICAgIGlmICgobV9mcm9tU291cmNlLmhhc01vcmVEYXRhKCkgJiYgIW1fZnJvbVNvdXJjZS5w
YXJzZUxpbmVUb1ZlcnRpY2FsU2VnbWVudChmcm9tWSkpCi0gICAgICAgIHx8ICFtX3RvU291cmNl
LnBhcnNlTGluZVRvVmVydGljYWxTZWdtZW50KHRvWSkpCisgICAgYXV0byByZXN1bHQgPSBwdWxs
RnJvbVNvdXJjZXMobV9mcm9tU291cmNlLCBtX3RvU291cmNlLCAmU1ZHUGF0aFNvdXJjZTo6cGFy
c2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnQpOworICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICBpZiAoIW1fY29uc3VtZXIpCiAgICAgICAgIHJldHVybiB0cnVlOwog
Ci0gICAgbV9jb25zdW1lci0+bGluZVRvVmVydGljYWwoYmxlbmRBbmltYXRlZERpbWVuc29uYWxG
bG9hdChmcm9tWSwgdG9ZLCBCbGVuZFZlcnRpY2FsLCBwcm9ncmVzcyksIG1faXNJbkZpcnN0SGFs
Zk9mQW5pbWF0aW9uID8gbV9mcm9tTW9kZSA6IG1fdG9Nb2RlKTsKLSAgICBtX2Zyb21DdXJyZW50
UG9pbnQuc2V0WShtX2Zyb21Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyBmcm9tWSA6IG1f
ZnJvbUN1cnJlbnRQb2ludC55KCkgKyBmcm9tWSk7Ci0gICAgbV90b0N1cnJlbnRQb2ludC5zZXRZ
KG1fdG9Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyB0b1kgOiBtX3RvQ3VycmVudFBvaW50
LnkoKSArIHRvWSk7CisgICAgYXV0byBbZnJvbSwgdG9dID0gKnJlc3VsdDsKKworICAgIG1fY29u
c3VtZXItPmxpbmVUb1ZlcnRpY2FsKGJsZW5kQW5pbWF0ZWREaW1lbnNvbmFsRmxvYXQoZnJvbS55
LCB0by55LCBCbGVuZFZlcnRpY2FsLCBwcm9ncmVzcyksIG1faXNJbkZpcnN0SGFsZk9mQW5pbWF0
aW9uID8gbV9mcm9tTW9kZSA6IG1fdG9Nb2RlKTsKKyAgICBtX2Zyb21DdXJyZW50UG9pbnQuc2V0
WShtX2Zyb21Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyBmcm9tLnkgOiBtX2Zyb21DdXJy
ZW50UG9pbnQueSgpICsgZnJvbS55KTsKKyAgICBtX3RvQ3VycmVudFBvaW50LnNldFkobV90b01v
ZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IHRvLnkgOiBtX3RvQ3VycmVudFBvaW50LnkoKSAr
IHRvLnkpOwogICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIFNWR1BhdGhCbGVuZGVyOjpibGVu
ZEN1cnZlVG9DdWJpY1NlZ21lbnQoZmxvYXQgcHJvZ3Jlc3MpCiB7Ci0gICAgRmxvYXRQb2ludCBm
cm9tVGFyZ2V0UG9pbnQ7Ci0gICAgRmxvYXRQb2ludCBmcm9tUG9pbnQxOwotICAgIEZsb2F0UG9p
bnQgZnJvbVBvaW50MjsKLSAgICBGbG9hdFBvaW50IHRvVGFyZ2V0UG9pbnQ7Ci0gICAgRmxvYXRQ
b2ludCB0b1BvaW50MTsKLSAgICBGbG9hdFBvaW50IHRvUG9pbnQyOwotICAgIGlmICgobV9mcm9t
U291cmNlLmhhc01vcmVEYXRhKCkgJiYgIW1fZnJvbVNvdXJjZS5wYXJzZUN1cnZlVG9DdWJpY1Nl
Z21lbnQoZnJvbVBvaW50MSwgZnJvbVBvaW50MiwgZnJvbVRhcmdldFBvaW50KSkKLSAgICAgICAg
fHwgIW1fdG9Tb3VyY2UucGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KHRvUG9pbnQxLCB0b1BvaW50
MiwgdG9UYXJnZXRQb2ludCkpCisgICAgYXV0byByZXN1bHQgPSBwdWxsRnJvbVNvdXJjZXMobV9m
cm9tU291cmNlLCBtX3RvU291cmNlLCAmU1ZHUGF0aFNvdXJjZTo6cGFyc2VDdXJ2ZVRvQ3ViaWNT
ZWdtZW50KTsKKyAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
aWYgKCFtX2NvbnN1bWVyKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIG1fY29uc3VtZXIt
PmN1cnZlVG9DdWJpYyhibGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tUG9pbnQxLCB0b1BvaW50
MSwgcHJvZ3Jlc3MpLAotICAgICAgICBibGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tUG9pbnQy
LCB0b1BvaW50MiwgcHJvZ3Jlc3MpLAotICAgICAgICBibGVuZEFuaW1hdGVkRmxvYXRQb2ludChm
cm9tVGFyZ2V0UG9pbnQsIHRvVGFyZ2V0UG9pbnQsIHByb2dyZXNzKSwKKyAgICBhdXRvIFtmcm9t
LCB0b10gPSAqcmVzdWx0OworCisgICAgbV9jb25zdW1lci0+Y3VydmVUb0N1YmljKGJsZW5kQW5p
bWF0ZWRGbG9hdFBvaW50KGZyb20ucG9pbnQxLCB0by5wb2ludDEsIHByb2dyZXNzKSwKKyAgICAg
ICAgYmxlbmRBbmltYXRlZEZsb2F0UG9pbnQoZnJvbS5wb2ludDIsIHRvLnBvaW50MiwgcHJvZ3Jl
c3MpLAorICAgICAgICBibGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tLnRhcmdldFBvaW50LCB0
by50YXJnZXRQb2ludCwgcHJvZ3Jlc3MpLAogICAgICAgICBtX2lzSW5GaXJzdEhhbGZPZkFuaW1h
dGlvbiA/IG1fZnJvbU1vZGUgOiBtX3RvTW9kZSk7Ci0gICAgbV9mcm9tQ3VycmVudFBvaW50ID0g
bV9mcm9tTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gZnJvbVRhcmdldFBvaW50IDogbV9m
cm9tQ3VycmVudFBvaW50ICsgZnJvbVRhcmdldFBvaW50OwotICAgIG1fdG9DdXJyZW50UG9pbnQg
PSBtX3RvTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gdG9UYXJnZXRQb2ludCA6IG1fdG9D
dXJyZW50UG9pbnQgKyB0b1RhcmdldFBvaW50OworICAgIG1fZnJvbUN1cnJlbnRQb2ludCA9IG1f
ZnJvbU1vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IGZyb20udGFyZ2V0UG9pbnQgOiBtX2Zy
b21DdXJyZW50UG9pbnQgKyBmcm9tLnRhcmdldFBvaW50OworICAgIG1fdG9DdXJyZW50UG9pbnQg
PSBtX3RvTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gdG8udGFyZ2V0UG9pbnQgOiBtX3Rv
Q3VycmVudFBvaW50ICsgdG8udGFyZ2V0UG9pbnQ7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJv
b2wgU1ZHUGF0aEJsZW5kZXI6OmJsZW5kQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudChmbG9hdCBw
cm9ncmVzcykKIHsKLSAgICBGbG9hdFBvaW50IGZyb21UYXJnZXRQb2ludDsKLSAgICBGbG9hdFBv
aW50IGZyb21Qb2ludDI7Ci0gICAgRmxvYXRQb2ludCB0b1RhcmdldFBvaW50OwotICAgIEZsb2F0
UG9pbnQgdG9Qb2ludDI7Ci0gICAgaWYgKChtX2Zyb21Tb3VyY2UuaGFzTW9yZURhdGEoKSAmJiAh
bV9mcm9tU291cmNlLnBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudChmcm9tUG9pbnQyLCBm
cm9tVGFyZ2V0UG9pbnQpKQotICAgICAgICB8fCAhbV90b1NvdXJjZS5wYXJzZUN1cnZlVG9DdWJp
Y1Ntb290aFNlZ21lbnQodG9Qb2ludDIsIHRvVGFyZ2V0UG9pbnQpKQorICAgIGF1dG8gcmVzdWx0
ID0gcHVsbEZyb21Tb3VyY2VzKG1fZnJvbVNvdXJjZSwgbV90b1NvdXJjZSwgJlNWR1BhdGhTb3Vy
Y2U6OnBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudCk7CisgICAgaWYgKCFyZXN1bHQpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmICghbV9jb25zdW1lcikKICAgICAgICAgcmV0
dXJuIHRydWU7CiAKLSAgICBtX2NvbnN1bWVyLT5jdXJ2ZVRvQ3ViaWNTbW9vdGgoYmxlbmRBbmlt
YXRlZEZsb2F0UG9pbnQoZnJvbVBvaW50MiwgdG9Qb2ludDIsIHByb2dyZXNzKSwKLSAgICAgICAg
YmxlbmRBbmltYXRlZEZsb2F0UG9pbnQoZnJvbVRhcmdldFBvaW50LCB0b1RhcmdldFBvaW50LCBw
cm9ncmVzcyksCisgICAgYXV0byBbZnJvbSwgdG9dID0gKnJlc3VsdDsKKworICAgIG1fY29uc3Vt
ZXItPmN1cnZlVG9DdWJpY1Ntb290aChibGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tLnBvaW50
MiwgdG8ucG9pbnQyLCBwcm9ncmVzcyksCisgICAgICAgIGJsZW5kQW5pbWF0ZWRGbG9hdFBvaW50
KGZyb20udGFyZ2V0UG9pbnQsIHRvLnRhcmdldFBvaW50LCBwcm9ncmVzcyksCiAgICAgICAgIG1f
aXNJbkZpcnN0SGFsZk9mQW5pbWF0aW9uID8gbV9mcm9tTW9kZSA6IG1fdG9Nb2RlKTsKLSAgICBt
X2Zyb21DdXJyZW50UG9pbnQgPSBtX2Zyb21Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyBm
cm9tVGFyZ2V0UG9pbnQgOiBtX2Zyb21DdXJyZW50UG9pbnQgKyBmcm9tVGFyZ2V0UG9pbnQ7Ci0g
ICAgbV90b0N1cnJlbnRQb2ludCA9IG1fdG9Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyB0
b1RhcmdldFBvaW50IDogbV90b0N1cnJlbnRQb2ludCArIHRvVGFyZ2V0UG9pbnQ7CisgICAgbV9m
cm9tQ3VycmVudFBvaW50ID0gbV9mcm9tTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gZnJv
bS50YXJnZXRQb2ludCA6IG1fZnJvbUN1cnJlbnRQb2ludCArIGZyb20udGFyZ2V0UG9pbnQ7Cisg
ICAgbV90b0N1cnJlbnRQb2ludCA9IG1fdG9Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyB0
by50YXJnZXRQb2ludCA6IG1fdG9DdXJyZW50UG9pbnQgKyB0by50YXJnZXRQb2ludDsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBTVkdQYXRoQmxlbmRlcjo6YmxlbmRDdXJ2ZVRvUXVhZHJh
dGljU2VnbWVudChmbG9hdCBwcm9ncmVzcykKIHsKLSAgICBGbG9hdFBvaW50IGZyb21UYXJnZXRQ
b2ludDsKLSAgICBGbG9hdFBvaW50IGZyb21Qb2ludDE7Ci0gICAgRmxvYXRQb2ludCB0b1Rhcmdl
dFBvaW50OwotICAgIEZsb2F0UG9pbnQgdG9Qb2ludDE7Ci0gICAgaWYgKChtX2Zyb21Tb3VyY2Uu
aGFzTW9yZURhdGEoKSAmJiAhbV9mcm9tU291cmNlLnBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21l
bnQoZnJvbVBvaW50MSwgZnJvbVRhcmdldFBvaW50KSkKLSAgICAgICAgfHwgIW1fdG9Tb3VyY2Uu
cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCh0b1BvaW50MSwgdG9UYXJnZXRQb2ludCkpCisg
ICAgYXV0byByZXN1bHQgPSBwdWxsRnJvbVNvdXJjZXMobV9mcm9tU291cmNlLCBtX3RvU291cmNl
LCAmU1ZHUGF0aFNvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCk7CisgICAgaWYg
KCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmICghbV9jb25zdW1lcikK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBtX2NvbnN1bWVyLT5jdXJ2ZVRvUXVhZHJhdGlj
KGJsZW5kQW5pbWF0ZWRGbG9hdFBvaW50KGZyb21Qb2ludDEsIHRvUG9pbnQxLCBwcm9ncmVzcyks
Ci0gICAgICAgIGJsZW5kQW5pbWF0ZWRGbG9hdFBvaW50KGZyb21UYXJnZXRQb2ludCwgdG9UYXJn
ZXRQb2ludCwgcHJvZ3Jlc3MpLAorICAgIGF1dG8gW2Zyb20sIHRvXSA9ICpyZXN1bHQ7CisKKyAg
ICBtX2NvbnN1bWVyLT5jdXJ2ZVRvUXVhZHJhdGljKGJsZW5kQW5pbWF0ZWRGbG9hdFBvaW50KGZy
b20ucG9pbnQxLCB0by5wb2ludDEsIHByb2dyZXNzKSwKKyAgICAgICAgYmxlbmRBbmltYXRlZEZs
b2F0UG9pbnQoZnJvbS50YXJnZXRQb2ludCwgdG8udGFyZ2V0UG9pbnQsIHByb2dyZXNzKSwKICAg
ICAgICAgbV9pc0luRmlyc3RIYWxmT2ZBbmltYXRpb24gPyBtX2Zyb21Nb2RlIDogbV90b01vZGUp
OwotICAgIG1fZnJvbUN1cnJlbnRQb2ludCA9IG1fZnJvbU1vZGUgPT0gQWJzb2x1dGVDb29yZGlu
YXRlcyA/IGZyb21UYXJnZXRQb2ludCA6IG1fZnJvbUN1cnJlbnRQb2ludCArIGZyb21UYXJnZXRQ
b2ludDsKLSAgICBtX3RvQ3VycmVudFBvaW50ID0gbV90b01vZGUgPT0gQWJzb2x1dGVDb29yZGlu
YXRlcyA/IHRvVGFyZ2V0UG9pbnQgOiBtX3RvQ3VycmVudFBvaW50ICsgdG9UYXJnZXRQb2ludDsK
KyAgICBtX2Zyb21DdXJyZW50UG9pbnQgPSBtX2Zyb21Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0
ZXMgPyBmcm9tLnRhcmdldFBvaW50IDogbV9mcm9tQ3VycmVudFBvaW50ICsgZnJvbS50YXJnZXRQ
b2ludDsKKyAgICBtX3RvQ3VycmVudFBvaW50ID0gbV90b01vZGUgPT0gQWJzb2x1dGVDb29yZGlu
YXRlcyA/IHRvLnRhcmdldFBvaW50IDogbV90b0N1cnJlbnRQb2ludCArIHRvLnRhcmdldFBvaW50
OwogICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIFNWR1BhdGhCbGVuZGVyOjpibGVuZEN1cnZl
VG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KGZsb2F0IHByb2dyZXNzKQogewotICAgIEZsb2F0UG9p
bnQgZnJvbVRhcmdldFBvaW50OwotICAgIEZsb2F0UG9pbnQgdG9UYXJnZXRQb2ludDsKLSAgICBp
ZiAoKG1fZnJvbVNvdXJjZS5oYXNNb3JlRGF0YSgpICYmICFtX2Zyb21Tb3VyY2UucGFyc2VDdXJ2
ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudChmcm9tVGFyZ2V0UG9pbnQpKQotICAgICAgICB8fCAh
bV90b1NvdXJjZS5wYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KHRvVGFyZ2V0UG9p
bnQpKQorICAgIGF1dG8gcmVzdWx0ID0gcHVsbEZyb21Tb3VyY2VzKG1fZnJvbVNvdXJjZSwgbV90
b1NvdXJjZSwgJlNWR1BhdGhTb3VyY2U6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21l
bnQpOworICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAo
IW1fY29uc3VtZXIpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgbV9jb25zdW1lci0+Y3Vy
dmVUb1F1YWRyYXRpY1Ntb290aChibGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tVGFyZ2V0UG9p
bnQsIHRvVGFyZ2V0UG9pbnQsIHByb2dyZXNzKSwgbV9pc0luRmlyc3RIYWxmT2ZBbmltYXRpb24g
PyBtX2Zyb21Nb2RlIDogbV90b01vZGUpOwotICAgIG1fZnJvbUN1cnJlbnRQb2ludCA9IG1fZnJv
bU1vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IGZyb21UYXJnZXRQb2ludCA6IG1fZnJvbUN1
cnJlbnRQb2ludCArIGZyb21UYXJnZXRQb2ludDsKLSAgICBtX3RvQ3VycmVudFBvaW50ID0gbV90
b01vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IHRvVGFyZ2V0UG9pbnQgOiBtX3RvQ3VycmVu
dFBvaW50ICsgdG9UYXJnZXRQb2ludDsKKyAgICBhdXRvIFtmcm9tLCB0b10gPSAqcmVzdWx0Owor
CisgICAgbV9jb25zdW1lci0+Y3VydmVUb1F1YWRyYXRpY1Ntb290aChibGVuZEFuaW1hdGVkRmxv
YXRQb2ludChmcm9tLnRhcmdldFBvaW50LCB0by50YXJnZXRQb2ludCwgcHJvZ3Jlc3MpLCBtX2lz
SW5GaXJzdEhhbGZPZkFuaW1hdGlvbiA/IG1fZnJvbU1vZGUgOiBtX3RvTW9kZSk7CisgICAgbV9m
cm9tQ3VycmVudFBvaW50ID0gbV9mcm9tTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gZnJv
bS50YXJnZXRQb2ludCA6IG1fZnJvbUN1cnJlbnRQb2ludCArIGZyb20udGFyZ2V0UG9pbnQ7Cisg
ICAgbV90b0N1cnJlbnRQb2ludCA9IG1fdG9Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyB0
by50YXJnZXRQb2ludCA6IG1fdG9DdXJyZW50UG9pbnQgKyB0by50YXJnZXRQb2ludDsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBTVkdQYXRoQmxlbmRlcjo6YmxlbmRBcmNUb1NlZ21lbnQo
ZmxvYXQgcHJvZ3Jlc3MpCiB7Ci0gICAgZmxvYXQgZnJvbVJ4ID0gMDsKLSAgICBmbG9hdCBmcm9t
UnkgPSAwOwotICAgIGZsb2F0IGZyb21BbmdsZSA9IDA7Ci0gICAgYm9vbCBmcm9tTGFyZ2VBcmMg
PSBmYWxzZTsKLSAgICBib29sIGZyb21Td2VlcCA9IGZhbHNlOwotICAgIEZsb2F0UG9pbnQgZnJv
bVRhcmdldFBvaW50OwotICAgIGZsb2F0IHRvUnggPSAwOwotICAgIGZsb2F0IHRvUnkgPSAwOwot
ICAgIGZsb2F0IHRvQW5nbGUgPSAwOwotICAgIGJvb2wgdG9MYXJnZUFyYyA9IGZhbHNlOwotICAg
IGJvb2wgdG9Td2VlcCA9IGZhbHNlOwotICAgIEZsb2F0UG9pbnQgdG9UYXJnZXRQb2ludDsKLSAg
ICBpZiAoKG1fZnJvbVNvdXJjZS5oYXNNb3JlRGF0YSgpICYmICFtX2Zyb21Tb3VyY2UucGFyc2VB
cmNUb1NlZ21lbnQoZnJvbVJ4LCBmcm9tUnksIGZyb21BbmdsZSwgZnJvbUxhcmdlQXJjLCBmcm9t
U3dlZXAsIGZyb21UYXJnZXRQb2ludCkpCi0gICAgICAgIHx8ICFtX3RvU291cmNlLnBhcnNlQXJj
VG9TZWdtZW50KHRvUngsIHRvUnksIHRvQW5nbGUsIHRvTGFyZ2VBcmMsIHRvU3dlZXAsIHRvVGFy
Z2V0UG9pbnQpKQorICAgIGF1dG8gcmVzdWx0ID0gcHVsbEZyb21Tb3VyY2VzKG1fZnJvbVNvdXJj
ZSwgbV90b1NvdXJjZSwgJlNWR1BhdGhTb3VyY2U6OnBhcnNlQXJjVG9TZWdtZW50KTsKKyAgICBp
ZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKCFtX2NvbnN1bWVy
KQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAorICAgIGF1dG8gW2Zyb20sIHRvXSA9ICpyZXN1bHQ7
CisKICAgICBpZiAobV9hZGRUeXBlc0NvdW50KSB7CiAgICAgICAgIEFTU0VSVChtX2Zyb21Nb2Rl
ID09IG1fdG9Nb2RlKTsKLSAgICAgICAgRmxvYXRQb2ludCBzY2FsZWRUb1RhcmdldFBvaW50ID0g
dG9UYXJnZXRQb2ludDsKKyAgICAgICAgYXV0byBzY2FsZWRUb1RhcmdldFBvaW50ID0gdG8udGFy
Z2V0UG9pbnQ7CiAgICAgICAgIHNjYWxlZFRvVGFyZ2V0UG9pbnQuc2NhbGUobV9hZGRUeXBlc0Nv
dW50KTsKLSAgICAgICAgbV9jb25zdW1lci0+YXJjVG8oZnJvbVJ4ICsgdG9SeCAqIG1fYWRkVHlw
ZXNDb3VudCwKLSAgICAgICAgICAgIGZyb21SeSArIHRvUnkgKiBtX2FkZFR5cGVzQ291bnQsCi0g
ICAgICAgICAgICBmcm9tQW5nbGUgKyB0b0FuZ2xlICogbV9hZGRUeXBlc0NvdW50LAotICAgICAg
ICAgICAgZnJvbUxhcmdlQXJjIHx8IHRvTGFyZ2VBcmMsCi0gICAgICAgICAgICBmcm9tU3dlZXAg
fHwgdG9Td2VlcCwKLSAgICAgICAgICAgIGZyb21UYXJnZXRQb2ludCArIHNjYWxlZFRvVGFyZ2V0
UG9pbnQsCisgICAgICAgIG1fY29uc3VtZXItPmFyY1RvKGZyb20ucnggKyB0by5yeCAqIG1fYWRk
VHlwZXNDb3VudCwKKyAgICAgICAgICAgIGZyb20ucnggKyB0by5yeSAqIG1fYWRkVHlwZXNDb3Vu
dCwKKyAgICAgICAgICAgIGZyb20uYW5nbGUgKyB0by5hbmdsZSAqIG1fYWRkVHlwZXNDb3VudCwK
KyAgICAgICAgICAgIGZyb20ubGFyZ2VBcmMgfHwgdG8ubGFyZ2VBcmMsCisgICAgICAgICAgICBm
cm9tLnN3ZWVwIHx8IHRvLnN3ZWVwLAorICAgICAgICAgICAgZnJvbS50YXJnZXRQb2ludCArIHNj
YWxlZFRvVGFyZ2V0UG9pbnQsCiAgICAgICAgICAgICBtX2Zyb21Nb2RlKTsKICAgICB9IGVsc2Ug
ewotICAgICAgICBtX2NvbnN1bWVyLT5hcmNUbyhibGVuZChmcm9tUngsIHRvUngsIHByb2dyZXNz
KSwKLSAgICAgICAgICAgIGJsZW5kKGZyb21SeSwgdG9SeSwgcHJvZ3Jlc3MpLAotICAgICAgICAg
ICAgYmxlbmQoZnJvbUFuZ2xlLCB0b0FuZ2xlLCBwcm9ncmVzcyksCi0gICAgICAgICAgICBtX2lz
SW5GaXJzdEhhbGZPZkFuaW1hdGlvbiA/IGZyb21MYXJnZUFyYyA6IHRvTGFyZ2VBcmMsCi0gICAg
ICAgICAgICBtX2lzSW5GaXJzdEhhbGZPZkFuaW1hdGlvbiA/IGZyb21Td2VlcCA6IHRvU3dlZXAs
Ci0gICAgICAgICAgICBibGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tVGFyZ2V0UG9pbnQsIHRv
VGFyZ2V0UG9pbnQsIHByb2dyZXNzKSwKKyAgICAgICAgbV9jb25zdW1lci0+YXJjVG8oYmxlbmQo
ZnJvbS5yeCwgdG8ucngsIHByb2dyZXNzKSwKKyAgICAgICAgICAgIGJsZW5kKGZyb20ucnksIHRv
LnJ5LCBwcm9ncmVzcyksCisgICAgICAgICAgICBibGVuZChmcm9tLmFuZ2xlLCB0by5hbmdsZSwg
cHJvZ3Jlc3MpLAorICAgICAgICAgICAgbV9pc0luRmlyc3RIYWxmT2ZBbmltYXRpb24gPyBmcm9t
LmxhcmdlQXJjIDogdG8ubGFyZ2VBcmMsCisgICAgICAgICAgICBtX2lzSW5GaXJzdEhhbGZPZkFu
aW1hdGlvbiA/IGZyb20uc3dlZXAgOiB0by5zd2VlcCwKKyAgICAgICAgICAgIGJsZW5kQW5pbWF0
ZWRGbG9hdFBvaW50KGZyb20udGFyZ2V0UG9pbnQsIHRvLnRhcmdldFBvaW50LCBwcm9ncmVzcyks
CiAgICAgICAgICAgICBtX2lzSW5GaXJzdEhhbGZPZkFuaW1hdGlvbiA/IG1fZnJvbU1vZGUgOiBt
X3RvTW9kZSk7CiAgICAgfQotICAgIG1fZnJvbUN1cnJlbnRQb2ludCA9IG1fZnJvbU1vZGUgPT0g
QWJzb2x1dGVDb29yZGluYXRlcyA/IGZyb21UYXJnZXRQb2ludCA6IG1fZnJvbUN1cnJlbnRQb2lu
dCArIGZyb21UYXJnZXRQb2ludDsKLSAgICBtX3RvQ3VycmVudFBvaW50ID0gbV90b01vZGUgPT0g
QWJzb2x1dGVDb29yZGluYXRlcyA/IHRvVGFyZ2V0UG9pbnQgOiBtX3RvQ3VycmVudFBvaW50ICsg
dG9UYXJnZXRQb2ludDsKKyAgICBtX2Zyb21DdXJyZW50UG9pbnQgPSBtX2Zyb21Nb2RlID09IEFi
c29sdXRlQ29vcmRpbmF0ZXMgPyBmcm9tLnRhcmdldFBvaW50IDogbV9mcm9tQ3VycmVudFBvaW50
ICsgZnJvbS50YXJnZXRQb2ludDsKKyAgICBtX3RvQ3VycmVudFBvaW50ID0gbV90b01vZGUgPT0g
QWJzb2x1dGVDb29yZGluYXRlcyA/IHRvLnRhcmdldFBvaW50IDogbV90b0N1cnJlbnRQb2ludCAr
IHRvLnRhcmdldFBvaW50OwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0zNTAsMjAgKzM0OCwy
MiBAQCBib29sIFNWR1BhdGhCbGVuZGVyOjpjYW5CbGVuZFBhdGhzKCkKICAgICBmbG9hdCBwcm9n
cmVzcyA9IDAuNTsKICAgICBib29sIGZyb21Tb3VyY2VIYWREYXRhID0gbV9mcm9tU291cmNlLmhh
c01vcmVEYXRhKCk7CiAgICAgd2hpbGUgKG1fdG9Tb3VyY2UuaGFzTW9yZURhdGEoKSkgewotICAg
ICAgICBTVkdQYXRoU2VnVHlwZSBmcm9tQ29tbWFuZDsKLSAgICAgICAgU1ZHUGF0aFNlZ1R5cGUg
dG9Db21tYW5kOwotICAgICAgICBpZiAoKGZyb21Tb3VyY2VIYWREYXRhICYmICFtX2Zyb21Tb3Vy
Y2UucGFyc2VTVkdTZWdtZW50VHlwZShmcm9tQ29tbWFuZCkpIHx8ICFtX3RvU291cmNlLnBhcnNl
U1ZHU2VnbWVudFR5cGUodG9Db21tYW5kKSkKKyAgICAgICAgYXV0byBmcm9tQ29tbWFuZCA9IG1f
ZnJvbVNvdXJjZS5wYXJzZVNWR1NlZ21lbnRUeXBlKCk7CisgICAgICAgIGlmIChmcm9tU291cmNl
SGFkRGF0YSAmJiAhZnJvbUNvbW1hbmQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIGF1dG8gdG9Db21tYW5kID0gbV90b1NvdXJjZS5wYXJzZVNWR1NlZ21lbnRUeXBlKCk7Cisg
ICAgICAgIGlmICghdG9Db21tYW5kKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
ICAgIG1fdG9Nb2RlID0gY29vcmRpbmF0ZU1vZGVPZkNvbW1hbmQodG9Db21tYW5kKTsKLSAgICAg
ICAgbV9mcm9tTW9kZSA9IGZyb21Tb3VyY2VIYWREYXRhID8gY29vcmRpbmF0ZU1vZGVPZkNvbW1h
bmQoZnJvbUNvbW1hbmQpIDogbV90b01vZGU7CisgICAgICAgIG1fdG9Nb2RlID0gY29vcmRpbmF0
ZU1vZGVPZkNvbW1hbmQoKnRvQ29tbWFuZCk7CisgICAgICAgIG1fZnJvbU1vZGUgPSBmcm9tU291
cmNlSGFkRGF0YSA/IGNvb3JkaW5hdGVNb2RlT2ZDb21tYW5kKCpmcm9tQ29tbWFuZCkgOiBtX3Rv
TW9kZTsKICAgICAgICAgaWYgKG1fZnJvbU1vZGUgIT0gbV90b01vZGUgJiYgbV9hZGRUeXBlc0Nv
dW50KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGlmIChmcm9tU291cmNl
SGFkRGF0YSAmJiAhaXNTZWdtZW50RXF1YWwoZnJvbUNvbW1hbmQsIHRvQ29tbWFuZCwgbV9mcm9t
TW9kZSwgbV90b01vZGUpKQorICAgICAgICBpZiAoZnJvbVNvdXJjZUhhZERhdGEgJiYgIWlzU2Vn
bWVudEVxdWFsKCpmcm9tQ29tbWFuZCwgKnRvQ29tbWFuZCwgbV9mcm9tTW9kZSwgbV90b01vZGUp
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIHN3aXRjaCAodG9Db21tYW5k
KSB7CisgICAgICAgIHN3aXRjaCAoKnRvQ29tbWFuZCkgewogICAgICAgICBjYXNlIFBhdGhTZWdN
b3ZlVG9SZWw6CiAgICAgICAgIGNhc2UgUGF0aFNlZ01vdmVUb0FiczoKICAgICAgICAgICAgIGlm
ICghYmxlbmRNb3ZlVG9TZWdtZW50KHByb2dyZXNzKSkKQEAgLTQzMiwyMCArNDMyLDIyIEBAIGJv
b2wgU1ZHUGF0aEJsZW5kZXI6OmJsZW5kQW5pbWF0ZWRQYXRoKGYKIAogICAgIGJvb2wgZnJvbVNv
dXJjZUhhZERhdGEgPSBtX2Zyb21Tb3VyY2UuaGFzTW9yZURhdGEoKTsKICAgICB3aGlsZSAobV90
b1NvdXJjZS5oYXNNb3JlRGF0YSgpKSB7Ci0gICAgICAgIFNWR1BhdGhTZWdUeXBlIGZyb21Db21t
YW5kOwotICAgICAgICBTVkdQYXRoU2VnVHlwZSB0b0NvbW1hbmQ7Ci0gICAgICAgIGlmICgoZnJv
bVNvdXJjZUhhZERhdGEgJiYgIW1fZnJvbVNvdXJjZS5wYXJzZVNWR1NlZ21lbnRUeXBlKGZyb21D
b21tYW5kKSkgfHwgIW1fdG9Tb3VyY2UucGFyc2VTVkdTZWdtZW50VHlwZSh0b0NvbW1hbmQpKQor
ICAgICAgICBhdXRvIGZyb21Db21tYW5kID0gbV9mcm9tU291cmNlLnBhcnNlU1ZHU2VnbWVudFR5
cGUoKTsKKyAgICAgICAgaWYgKGZyb21Tb3VyY2VIYWREYXRhICYmICFmcm9tQ29tbWFuZCkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYXV0byB0b0NvbW1hbmQgPSBtX3RvU291
cmNlLnBhcnNlU1ZHU2VnbWVudFR5cGUoKTsKKyAgICAgICAgaWYgKCF0b0NvbW1hbmQpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgbV90b01vZGUgPSBjb29yZGluYXRlTW9k
ZU9mQ29tbWFuZCh0b0NvbW1hbmQpOwotICAgICAgICBtX2Zyb21Nb2RlID0gZnJvbVNvdXJjZUhh
ZERhdGEgPyBjb29yZGluYXRlTW9kZU9mQ29tbWFuZChmcm9tQ29tbWFuZCkgOiBtX3RvTW9kZTsK
KyAgICAgICAgbV90b01vZGUgPSBjb29yZGluYXRlTW9kZU9mQ29tbWFuZCgqdG9Db21tYW5kKTsK
KyAgICAgICAgbV9mcm9tTW9kZSA9IGZyb21Tb3VyY2VIYWREYXRhID8gY29vcmRpbmF0ZU1vZGVP
ZkNvbW1hbmQoKmZyb21Db21tYW5kKSA6IG1fdG9Nb2RlOwogICAgICAgICBpZiAobV9mcm9tTW9k
ZSAhPSBtX3RvTW9kZSAmJiBtX2FkZFR5cGVzQ291bnQpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICAgICAgaWYgKGZyb21Tb3VyY2VIYWREYXRhICYmICFpc1NlZ21lbnRFcXVhbChm
cm9tQ29tbWFuZCwgdG9Db21tYW5kLCBtX2Zyb21Nb2RlLCBtX3RvTW9kZSkpCisgICAgICAgIGlm
IChmcm9tU291cmNlSGFkRGF0YSAmJiAhaXNTZWdtZW50RXF1YWwoKmZyb21Db21tYW5kLCAqdG9D
b21tYW5kLCBtX2Zyb21Nb2RlLCBtX3RvTW9kZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICAgICAgc3dpdGNoICh0b0NvbW1hbmQpIHsKKyAgICAgICAgc3dpdGNoICgqdG9Db21t
YW5kKSB7CiAgICAgICAgIGNhc2UgUGF0aFNlZ01vdmVUb1JlbDoKICAgICAgICAgY2FzZSBQYXRo
U2VnTW92ZVRvQWJzOgogICAgICAgICAgICAgaWYgKCFibGVuZE1vdmVUb1NlZ21lbnQocHJvZ3Jl
c3MpKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3RyZWFtU291cmNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW1Tb3Vy
Y2UuY3BwCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEJ5
dGVTdHJlYW1Tb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3OCArMzQsODYgQEAgYm9v
bCBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6aGFzTW9yZURhdAogICAgIHJldHVybiBtX3N0cmVh
bUN1cnJlbnQgPCBtX3N0cmVhbUVuZDsKIH0KIAotYm9vbCBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJj
ZTo6cGFyc2VTVkdTZWdtZW50VHlwZShTVkdQYXRoU2VnVHlwZSYgcGF0aFNlZ1R5cGUpCitTVkdQ
YXRoU2VnVHlwZSBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6bmV4dENvbW1hbmQoU1ZHUGF0aFNl
Z1R5cGUpCiB7Ci0gICAgcGF0aFNlZ1R5cGUgPSBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnVHlwZT4o
cmVhZFNWR1NlZ21lbnRUeXBlKCkpOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBzdGF0
aWNfY2FzdDxTVkdQYXRoU2VnVHlwZT4ocmVhZFNWR1NlZ21lbnRUeXBlKCkpOwogfQogCi1TVkdQ
YXRoU2VnVHlwZSBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6bmV4dENvbW1hbmQoU1ZHUGF0aFNl
Z1R5cGUpCitPcHRpb25hbDxTVkdQYXRoU2VnVHlwZT4gU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6
OnBhcnNlU1ZHU2VnbWVudFR5cGUoKQogewogICAgIHJldHVybiBzdGF0aWNfY2FzdDxTVkdQYXRo
U2VnVHlwZT4ocmVhZFNWR1NlZ21lbnRUeXBlKCkpOwogfQogCi1ib29sIFNWR1BhdGhCeXRlU3Ry
ZWFtU291cmNlOjpwYXJzZU1vdmVUb1NlZ21lbnQoRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCitP
cHRpb25hbDxTVkdQYXRoU291cmNlOjpNb3ZlVG9TZWdtZW50PiBTVkdQYXRoQnl0ZVN0cmVhbVNv
dXJjZTo6cGFyc2VNb3ZlVG9TZWdtZW50KCkKIHsKLSAgICB0YXJnZXRQb2ludCA9IHJlYWRGbG9h
dFBvaW50KCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgTW92ZVRvU2VnbWVudCBzZWdtZW50Owor
ICAgIHNlZ21lbnQudGFyZ2V0UG9pbnQgPSByZWFkRmxvYXRQb2ludCgpOworICAgIHJldHVybiBz
ZWdtZW50OwogfQogCi1ib29sIFNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZUxpbmVUb1Nl
Z21lbnQoRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCitPcHRpb25hbDxTVkdQYXRoU291cmNlOjpM
aW5lVG9TZWdtZW50PiBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VMaW5lVG9TZWdtZW50
KCkKIHsKLSAgICB0YXJnZXRQb2ludCA9IHJlYWRGbG9hdFBvaW50KCk7Ci0gICAgcmV0dXJuIHRy
dWU7CisgICAgTGluZVRvU2VnbWVudCBzZWdtZW50OworICAgIHNlZ21lbnQudGFyZ2V0UG9pbnQg
PSByZWFkRmxvYXRQb2ludCgpOworICAgIHJldHVybiBzZWdtZW50OwogfQogCi1ib29sIFNWR1Bh
dGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZUxpbmVUb0hvcml6b250YWxTZWdtZW50KGZsb2F0JiB4
KQorT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6TGluZVRvSG9yaXpvbnRhbFNlZ21lbnQ+IFNWR1Bh
dGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZUxpbmVUb0hvcml6b250YWxTZWdtZW50KCkKIHsKLSAg
ICB4ID0gcmVhZEZsb2F0KCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgTGluZVRvSG9yaXpvbnRh
bFNlZ21lbnQgc2VnbWVudDsKKyAgICBzZWdtZW50LnggPSByZWFkRmxvYXQoKTsKKyAgICByZXR1
cm4gc2VnbWVudDsKIH0KIAotYm9vbCBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VMaW5l
VG9WZXJ0aWNhbFNlZ21lbnQoZmxvYXQmIHkpCitPcHRpb25hbDxTVkdQYXRoU291cmNlOjpMaW5l
VG9WZXJ0aWNhbFNlZ21lbnQ+IFNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZUxpbmVUb1Zl
cnRpY2FsU2VnbWVudCgpCiB7Ci0gICAgeSA9IHJlYWRGbG9hdCgpOwotICAgIHJldHVybiB0cnVl
OworICAgIExpbmVUb1ZlcnRpY2FsU2VnbWVudCBzZWdtZW50OworICAgIHNlZ21lbnQueSA9IHJl
YWRGbG9hdCgpOworICAgIHJldHVybiBzZWdtZW50OwogfQogCi1ib29sIFNWR1BhdGhCeXRlU3Ry
ZWFtU291cmNlOjpwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQoRmxvYXRQb2ludCYgcG9pbnQxLCBG
bG9hdFBvaW50JiBwb2ludDIsIEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQorT3B0aW9uYWw8U1ZH
UGF0aFNvdXJjZTo6Q3VydmVUb0N1YmljU2VnbWVudD4gU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6
OnBhcnNlQ3VydmVUb0N1YmljU2VnbWVudCgpCiB7Ci0gICAgcG9pbnQxID0gcmVhZEZsb2F0UG9p
bnQoKTsKLSAgICBwb2ludDIgPSByZWFkRmxvYXRQb2ludCgpOwotICAgIHRhcmdldFBvaW50ID0g
cmVhZEZsb2F0UG9pbnQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBDdXJ2ZVRvQ3ViaWNTZWdt
ZW50IHNlZ21lbnQ7CisgICAgc2VnbWVudC5wb2ludDEgPSByZWFkRmxvYXRQb2ludCgpOworICAg
IHNlZ21lbnQucG9pbnQyID0gcmVhZEZsb2F0UG9pbnQoKTsKKyAgICBzZWdtZW50LnRhcmdldFBv
aW50ID0gcmVhZEZsb2F0UG9pbnQoKTsKKyAgICByZXR1cm4gc2VnbWVudDsKIH0KIAotYm9vbCBT
VkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KEZs
b2F0UG9pbnQmIHBvaW50MiwgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCitPcHRpb25hbDxTVkdQ
YXRoU291cmNlOjpDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50PiBTVkdQYXRoQnl0ZVN0cmVhbVNv
dXJjZTo6cGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KCkKIHsKLSAgICBwb2ludDIgPSBy
ZWFkRmxvYXRQb2ludCgpOwotICAgIHRhcmdldFBvaW50ID0gcmVhZEZsb2F0UG9pbnQoKTsKLSAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50IHNlZ21lbnQ7Cisg
ICAgc2VnbWVudC5wb2ludDIgPSByZWFkRmxvYXRQb2ludCgpOworICAgIHNlZ21lbnQudGFyZ2V0
UG9pbnQgPSByZWFkRmxvYXRQb2ludCgpOworICAgIHJldHVybiBzZWdtZW50OwogfQogCi1ib29s
IFNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KEZs
b2F0UG9pbnQmIHBvaW50MSwgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCitPcHRpb25hbDxTVkdQ
YXRoU291cmNlOjpDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudD4gU1ZHUGF0aEJ5dGVTdHJlYW1Tb3Vy
Y2U6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQoKQogewotICAgIHBvaW50MSA9IHJlYWRG
bG9hdFBvaW50KCk7Ci0gICAgdGFyZ2V0UG9pbnQgPSByZWFkRmxvYXRQb2ludCgpOwotICAgIHJl
dHVybiB0cnVlOworICAgIEN1cnZlVG9RdWFkcmF0aWNTZWdtZW50IHNlZ21lbnQ7CisgICAgc2Vn
bWVudC5wb2ludDEgPSByZWFkRmxvYXRQb2ludCgpOworICAgIHNlZ21lbnQudGFyZ2V0UG9pbnQg
PSByZWFkRmxvYXRQb2ludCgpOworICAgIHJldHVybiBzZWdtZW50OwogfQogCi1ib29sIFNWR1Bh
dGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KEZs
b2F0UG9pbnQmIHRhcmdldFBvaW50KQorT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6Q3VydmVUb1F1
YWRyYXRpY1Ntb290aFNlZ21lbnQ+IFNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZUN1cnZl
VG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KCkKIHsKLSAgICB0YXJnZXRQb2ludCA9IHJlYWRGbG9h
dFBvaW50KCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNl
Z21lbnQgc2VnbWVudDsKKyAgICBzZWdtZW50LnRhcmdldFBvaW50ID0gcmVhZEZsb2F0UG9pbnQo
KTsKKyAgICByZXR1cm4gc2VnbWVudDsKIH0KIAotYm9vbCBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJj
ZTo6cGFyc2VBcmNUb1NlZ21lbnQoZmxvYXQmIHJ4LCBmbG9hdCYgcnksIGZsb2F0JiBhbmdsZSwg
Ym9vbCYgbGFyZ2VBcmMsIGJvb2wmIHN3ZWVwLCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCkKK09w
dGlvbmFsPFNWR1BhdGhTb3VyY2U6OkFyY1RvU2VnbWVudD4gU1ZHUGF0aEJ5dGVTdHJlYW1Tb3Vy
Y2U6OnBhcnNlQXJjVG9TZWdtZW50KCkKIHsKLSAgICByeCA9IHJlYWRGbG9hdCgpOwotICAgIHJ5
ID0gcmVhZEZsb2F0KCk7Ci0gICAgYW5nbGUgPSByZWFkRmxvYXQoKTsKLSAgICBsYXJnZUFyYyA9
IHJlYWRGbGFnKCk7Ci0gICAgc3dlZXAgPSByZWFkRmxhZygpOwotICAgIHRhcmdldFBvaW50ID0g
cmVhZEZsb2F0UG9pbnQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBBcmNUb1NlZ21lbnQgc2Vn
bWVudDsKKyAgICBzZWdtZW50LnJ4ID0gcmVhZEZsb2F0KCk7CisgICAgc2VnbWVudC5yeSA9IHJl
YWRGbG9hdCgpOworICAgIHNlZ21lbnQuYW5nbGUgPSByZWFkRmxvYXQoKTsKKyAgICBzZWdtZW50
LmxhcmdlQXJjID0gcmVhZEZsYWcoKTsKKyAgICBzZWdtZW50LnN3ZWVwID0gcmVhZEZsYWcoKTsK
KyAgICBzZWdtZW50LnRhcmdldFBvaW50ID0gcmVhZEZsb2F0UG9pbnQoKTsKKyAgICByZXR1cm4g
c2VnbWVudDsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3Ry
ZWFtU291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhCeXRl
U3RyZWFtU291cmNlLmgJKHJldmlzaW9uIDI2MzE3NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdQYXRoQnl0ZVN0cmVhbVNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxOCArMzIsMTgg
QEAgcHVibGljOgogcHJpdmF0ZToKICAgICBib29sIGhhc01vcmVEYXRhKCkgY29uc3QgZmluYWw7
CiAgICAgYm9vbCBtb3ZlVG9OZXh0VG9rZW4oKSBmaW5hbCB7IHJldHVybiB0cnVlOyB9Ci0gICAg
Ym9vbCBwYXJzZVNWR1NlZ21lbnRUeXBlKFNWR1BhdGhTZWdUeXBlJikgZmluYWw7CiAgICAgU1ZH
UGF0aFNlZ1R5cGUgbmV4dENvbW1hbmQoU1ZHUGF0aFNlZ1R5cGUpIGZpbmFsOwogCi0gICAgYm9v
bCBwYXJzZU1vdmVUb1NlZ21lbnQoRmxvYXRQb2ludCYpIGZpbmFsOwotICAgIGJvb2wgcGFyc2VM
aW5lVG9TZWdtZW50KEZsb2F0UG9pbnQmKSBmaW5hbDsKLSAgICBib29sIHBhcnNlTGluZVRvSG9y
aXpvbnRhbFNlZ21lbnQoZmxvYXQmKSBmaW5hbDsKLSAgICBib29sIHBhcnNlTGluZVRvVmVydGlj
YWxTZWdtZW50KGZsb2F0JikgZmluYWw7Ci0gICAgYm9vbCBwYXJzZUN1cnZlVG9DdWJpY1NlZ21l
bnQoRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmLCBGbG9hdFBvaW50JikgZmluYWw7Ci0gICAgYm9v
bCBwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQoRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQm
KSBmaW5hbDsKLSAgICBib29sIHBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQoRmxvYXRQb2lu
dCYsIEZsb2F0UG9pbnQmKSBmaW5hbDsKLSAgICBib29sIHBhcnNlQ3VydmVUb1F1YWRyYXRpY1Nt
b290aFNlZ21lbnQoRmxvYXRQb2ludCYpIGZpbmFsOwotICAgIGJvb2wgcGFyc2VBcmNUb1NlZ21l
bnQoZmxvYXQmLCBmbG9hdCYsIGZsb2F0JiwgYm9vbCYsIGJvb2wmLCBGbG9hdFBvaW50JikgZmlu
YWw7CisgICAgT3B0aW9uYWw8U1ZHUGF0aFNlZ1R5cGU+IHBhcnNlU1ZHU2VnbWVudFR5cGUoKSBm
aW5hbDsKKyAgICBPcHRpb25hbDxNb3ZlVG9TZWdtZW50PiBwYXJzZU1vdmVUb1NlZ21lbnQoKSBm
aW5hbDsKKyAgICBPcHRpb25hbDxMaW5lVG9TZWdtZW50PiBwYXJzZUxpbmVUb1NlZ21lbnQoKSBm
aW5hbDsKKyAgICBPcHRpb25hbDxMaW5lVG9Ib3Jpem9udGFsU2VnbWVudD4gcGFyc2VMaW5lVG9I
b3Jpem9udGFsU2VnbWVudCgpIGZpbmFsOworICAgIE9wdGlvbmFsPExpbmVUb1ZlcnRpY2FsU2Vn
bWVudD4gcGFyc2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnQoKSBmaW5hbDsKKyAgICBPcHRpb25hbDxD
dXJ2ZVRvQ3ViaWNTZWdtZW50PiBwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQoKSBmaW5hbDsKKyAg
ICBPcHRpb25hbDxDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50PiBwYXJzZUN1cnZlVG9DdWJpY1Nt
b290aFNlZ21lbnQoKSBmaW5hbDsKKyAgICBPcHRpb25hbDxDdXJ2ZVRvUXVhZHJhdGljU2VnbWVu
dD4gcGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCgpIGZpbmFsOworICAgIE9wdGlvbmFsPEN1
cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50PiBwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhT
ZWdtZW50KCkgZmluYWw7CisgICAgT3B0aW9uYWw8QXJjVG9TZWdtZW50PiBwYXJzZUFyY1RvU2Vn
bWVudCgpIGZpbmFsOwogCiAjaWYgQ09NUElMRVIoTVNWQykKICNwcmFnbWEgd2FybmluZyhkaXNh
YmxlOiA0NzAxKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhQYXJzZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoUGFyc2VyLmNwcAkocmV2aXNp
b24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhQYXJzZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MywxMDIgKzczLDk5IEBAIHZvaWQgU1ZHUGF0aFBhcnNlcjo6cGFyc2VD
bG9zZVBhdGhTZWdtZW4KIAogYm9vbCBTVkdQYXRoUGFyc2VyOjpwYXJzZU1vdmVUb1NlZ21lbnQo
KQogewotICAgIEZsb2F0UG9pbnQgdGFyZ2V0UG9pbnQ7Ci0gICAgaWYgKCFtX3NvdXJjZS5wYXJz
ZU1vdmVUb1NlZ21lbnQodGFyZ2V0UG9pbnQpKQorICAgIGF1dG8gcmVzdWx0ID0gbV9zb3VyY2Uu
cGFyc2VNb3ZlVG9TZWdtZW50KCk7CisgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIGlmIChtX3BhdGhQYXJzaW5nTW9kZSA9PSBOb3JtYWxpemVkUGFyc2luZykg
ewogICAgICAgICBpZiAobV9tb2RlID09IFJlbGF0aXZlQ29vcmRpbmF0ZXMpCi0gICAgICAgICAg
ICBtX2N1cnJlbnRQb2ludCArPSB0YXJnZXRQb2ludDsKKyAgICAgICAgICAgIG1fY3VycmVudFBv
aW50ICs9IHJlc3VsdC0+dGFyZ2V0UG9pbnQ7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1f
Y3VycmVudFBvaW50ID0gdGFyZ2V0UG9pbnQ7CisgICAgICAgICAgICBtX2N1cnJlbnRQb2ludCA9
IHJlc3VsdC0+dGFyZ2V0UG9pbnQ7CiAgICAgICAgIG1fc3ViUGF0aFBvaW50ID0gbV9jdXJyZW50
UG9pbnQ7CiAgICAgICAgIG1fY29uc3VtZXIubW92ZVRvKG1fY3VycmVudFBvaW50LCBtX2Nsb3Nl
UGF0aCwgQWJzb2x1dGVDb29yZGluYXRlcyk7CiAgICAgfSBlbHNlCi0gICAgICAgIG1fY29uc3Vt
ZXIubW92ZVRvKHRhcmdldFBvaW50LCBtX2Nsb3NlUGF0aCwgbV9tb2RlKTsKKyAgICAgICAgbV9j
b25zdW1lci5tb3ZlVG8ocmVzdWx0LT50YXJnZXRQb2ludCwgbV9jbG9zZVBhdGgsIG1fbW9kZSk7
CiAgICAgbV9jbG9zZVBhdGggPSBmYWxzZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBT
VkdQYXRoUGFyc2VyOjpwYXJzZUxpbmVUb1NlZ21lbnQoKQogewotICAgIEZsb2F0UG9pbnQgdGFy
Z2V0UG9pbnQ7Ci0gICAgaWYgKCFtX3NvdXJjZS5wYXJzZUxpbmVUb1NlZ21lbnQodGFyZ2V0UG9p
bnQpKQorICAgIGF1dG8gcmVzdWx0ID0gbV9zb3VyY2UucGFyc2VMaW5lVG9TZWdtZW50KCk7Cisg
ICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChtX3BhdGhQ
YXJzaW5nTW9kZSA9PSBOb3JtYWxpemVkUGFyc2luZykgewogICAgICAgICBpZiAobV9tb2RlID09
IFJlbGF0aXZlQ29vcmRpbmF0ZXMpCi0gICAgICAgICAgICBtX2N1cnJlbnRQb2ludCArPSB0YXJn
ZXRQb2ludDsKKyAgICAgICAgICAgIG1fY3VycmVudFBvaW50ICs9IHJlc3VsdC0+dGFyZ2V0UG9p
bnQ7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fY3VycmVudFBvaW50ID0gdGFyZ2V0UG9p
bnQ7CisgICAgICAgICAgICBtX2N1cnJlbnRQb2ludCA9IHJlc3VsdC0+dGFyZ2V0UG9pbnQ7CiAg
ICAgICAgIG1fY29uc3VtZXIubGluZVRvKG1fY3VycmVudFBvaW50LCBBYnNvbHV0ZUNvb3JkaW5h
dGVzKTsKICAgICB9IGVsc2UKLSAgICAgICAgbV9jb25zdW1lci5saW5lVG8odGFyZ2V0UG9pbnQs
IG1fbW9kZSk7CisgICAgICAgIG1fY29uc3VtZXIubGluZVRvKHJlc3VsdC0+dGFyZ2V0UG9pbnQs
IG1fbW9kZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgU1ZHUGF0aFBhcnNlcjo6cGFy
c2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudCgpCiB7Ci0gICAgZmxvYXQgdG9YOwotICAgIGlmICgh
bV9zb3VyY2UucGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudCh0b1gpKQorICAgIGF1dG8gcmVz
dWx0ID0gbV9zb3VyY2UucGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudCgpOworICAgIGlmICgh
cmVzdWx0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAobV9wYXRoUGFyc2luZ01v
ZGUgPT0gTm9ybWFsaXplZFBhcnNpbmcpIHsKICAgICAgICAgaWYgKG1fbW9kZSA9PSBSZWxhdGl2
ZUNvb3JkaW5hdGVzKQotICAgICAgICAgICAgbV9jdXJyZW50UG9pbnQubW92ZSh0b1gsIDApOwor
ICAgICAgICAgICAgbV9jdXJyZW50UG9pbnQubW92ZShyZXN1bHQtPngsIDApOwogICAgICAgICBl
bHNlCi0gICAgICAgICAgICBtX2N1cnJlbnRQb2ludC5zZXRYKHRvWCk7CisgICAgICAgICAgICBt
X2N1cnJlbnRQb2ludC5zZXRYKHJlc3VsdC0+eCk7CiAgICAgICAgIG1fY29uc3VtZXIubGluZVRv
KG1fY3VycmVudFBvaW50LCBBYnNvbHV0ZUNvb3JkaW5hdGVzKTsKICAgICB9IGVsc2UKLSAgICAg
ICAgbV9jb25zdW1lci5saW5lVG9Ib3Jpem9udGFsKHRvWCwgbV9tb2RlKTsKKyAgICAgICAgbV9j
b25zdW1lci5saW5lVG9Ib3Jpem9udGFsKHJlc3VsdC0+eCwgbV9tb2RlKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAogYm9vbCBTVkdQYXRoUGFyc2VyOjpwYXJzZUxpbmVUb1ZlcnRpY2FsU2VnbWVu
dCgpCiB7Ci0gICAgZmxvYXQgdG9ZOwotICAgIGlmICghbV9zb3VyY2UucGFyc2VMaW5lVG9WZXJ0
aWNhbFNlZ21lbnQodG9ZKSkKKyAgICBhdXRvIHJlc3VsdCA9IG1fc291cmNlLnBhcnNlTGluZVRv
VmVydGljYWxTZWdtZW50KCk7CisgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIGlmIChtX3BhdGhQYXJzaW5nTW9kZSA9PSBOb3JtYWxpemVkUGFyc2luZykgewog
ICAgICAgICBpZiAobV9tb2RlID09IFJlbGF0aXZlQ29vcmRpbmF0ZXMpCi0gICAgICAgICAgICBt
X2N1cnJlbnRQb2ludC5tb3ZlKDAsIHRvWSk7CisgICAgICAgICAgICBtX2N1cnJlbnRQb2ludC5t
b3ZlKDAsIHJlc3VsdC0+eSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fY3VycmVudFBv
aW50LnNldFkodG9ZKTsKKyAgICAgICAgICAgIG1fY3VycmVudFBvaW50LnNldFkocmVzdWx0LT55
KTsKICAgICAgICAgbV9jb25zdW1lci5saW5lVG8obV9jdXJyZW50UG9pbnQsIEFic29sdXRlQ29v
cmRpbmF0ZXMpOwogICAgIH0gZWxzZQotICAgICAgICBtX2NvbnN1bWVyLmxpbmVUb1ZlcnRpY2Fs
KHRvWSwgbV9tb2RlKTsKKyAgICAgICAgbV9jb25zdW1lci5saW5lVG9WZXJ0aWNhbChyZXN1bHQt
PnksIG1fbW9kZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgU1ZHUGF0aFBhcnNlcjo6
cGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KCkKIHsKLSAgICBGbG9hdFBvaW50IHBvaW50MTsKLSAg
ICBGbG9hdFBvaW50IHBvaW50MjsKLSAgICBGbG9hdFBvaW50IHRhcmdldFBvaW50OwotICAgIGlm
ICghbV9zb3VyY2UucGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KHBvaW50MSwgcG9pbnQyLCB0YXJn
ZXRQb2ludCkpCisgICAgYXV0byByZXN1bHQgPSBtX3NvdXJjZS5wYXJzZUN1cnZlVG9DdWJpY1Nl
Z21lbnQoKTsKKyAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
aWYgKG1fcGF0aFBhcnNpbmdNb2RlID09IE5vcm1hbGl6ZWRQYXJzaW5nKSB7CiAgICAgICAgIGlm
IChtX21vZGUgPT0gUmVsYXRpdmVDb29yZGluYXRlcykgewotICAgICAgICAgICAgcG9pbnQxICs9
IG1fY3VycmVudFBvaW50OwotICAgICAgICAgICAgcG9pbnQyICs9IG1fY3VycmVudFBvaW50Owot
ICAgICAgICAgICAgdGFyZ2V0UG9pbnQgKz0gbV9jdXJyZW50UG9pbnQ7CisgICAgICAgICAgICBy
ZXN1bHQtPnBvaW50MSArPSBtX2N1cnJlbnRQb2ludDsKKyAgICAgICAgICAgIHJlc3VsdC0+cG9p
bnQyICs9IG1fY3VycmVudFBvaW50OworICAgICAgICAgICAgcmVzdWx0LT50YXJnZXRQb2ludCAr
PSBtX2N1cnJlbnRQb2ludDsKICAgICAgICAgfQotICAgICAgICBtX2NvbnN1bWVyLmN1cnZlVG9D
dWJpYyhwb2ludDEsIHBvaW50MiwgdGFyZ2V0UG9pbnQsIEFic29sdXRlQ29vcmRpbmF0ZXMpOwor
ICAgICAgICBtX2NvbnN1bWVyLmN1cnZlVG9DdWJpYyhyZXN1bHQtPnBvaW50MSwgcmVzdWx0LT5w
b2ludDIsIHJlc3VsdC0+dGFyZ2V0UG9pbnQsIEFic29sdXRlQ29vcmRpbmF0ZXMpOwogCi0gICAg
ICAgIG1fY29udHJvbFBvaW50ID0gcG9pbnQyOwotICAgICAgICBtX2N1cnJlbnRQb2ludCA9IHRh
cmdldFBvaW50OworICAgICAgICBtX2NvbnRyb2xQb2ludCA9IHJlc3VsdC0+cG9pbnQyOworICAg
ICAgICBtX2N1cnJlbnRQb2ludCA9IHJlc3VsdC0+dGFyZ2V0UG9pbnQ7CiAgICAgfSBlbHNlCi0g
ICAgICAgIG1fY29uc3VtZXIuY3VydmVUb0N1YmljKHBvaW50MSwgcG9pbnQyLCB0YXJnZXRQb2lu
dCwgbV9tb2RlKTsKKyAgICAgICAgbV9jb25zdW1lci5jdXJ2ZVRvQ3ViaWMocmVzdWx0LT5wb2lu
dDEsIHJlc3VsdC0+cG9pbnQyLCByZXN1bHQtPnRhcmdldFBvaW50LCBtX21vZGUpOwogICAgIHJl
dHVybiB0cnVlOwogfQogCiBib29sIFNWR1BhdGhQYXJzZXI6OnBhcnNlQ3VydmVUb0N1YmljU21v
b3RoU2VnbWVudCgpCiB7Ci0gICAgRmxvYXRQb2ludCBwb2ludDI7Ci0gICAgRmxvYXRQb2ludCB0
YXJnZXRQb2ludDsKLSAgICBpZiAoIW1fc291cmNlLnBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2Vn
bWVudChwb2ludDIsIHRhcmdldFBvaW50KSkKKyAgICBhdXRvIHJlc3VsdCA9IG1fc291cmNlLnBh
cnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudCgpOworICAgIGlmICghcmVzdWx0KQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAobV9sYXN0Q29tbWFuZCAhPSBQYXRoU2VnQ3VydmVU
b0N1YmljQWJzCkBAIC0xODIsNTMgKzE3OSw1MyBAQCBib29sIFNWR1BhdGhQYXJzZXI6OnBhcnNl
Q3VydmVUb0N1YmljU21vCiAgICAgICAgIHBvaW50MS5zY2FsZSgyKTsKICAgICAgICAgcG9pbnQx
Lm1vdmUoLW1fY29udHJvbFBvaW50LngoKSwgLW1fY29udHJvbFBvaW50LnkoKSk7CiAgICAgICAg
IGlmIChtX21vZGUgPT0gUmVsYXRpdmVDb29yZGluYXRlcykgewotICAgICAgICAgICAgcG9pbnQy
ICs9IG1fY3VycmVudFBvaW50OwotICAgICAgICAgICAgdGFyZ2V0UG9pbnQgKz0gbV9jdXJyZW50
UG9pbnQ7CisgICAgICAgICAgICByZXN1bHQtPnBvaW50MiArPSBtX2N1cnJlbnRQb2ludDsKKyAg
ICAgICAgICAgIHJlc3VsdC0+dGFyZ2V0UG9pbnQgKz0gbV9jdXJyZW50UG9pbnQ7CiAgICAgICAg
IH0KIAotICAgICAgICBtX2NvbnN1bWVyLmN1cnZlVG9DdWJpYyhwb2ludDEsIHBvaW50MiwgdGFy
Z2V0UG9pbnQsIEFic29sdXRlQ29vcmRpbmF0ZXMpOworICAgICAgICBtX2NvbnN1bWVyLmN1cnZl
VG9DdWJpYyhwb2ludDEsIHJlc3VsdC0+cG9pbnQyLCByZXN1bHQtPnRhcmdldFBvaW50LCBBYnNv
bHV0ZUNvb3JkaW5hdGVzKTsKIAotICAgICAgICBtX2NvbnRyb2xQb2ludCA9IHBvaW50MjsKLSAg
ICAgICAgbV9jdXJyZW50UG9pbnQgPSB0YXJnZXRQb2ludDsKKyAgICAgICAgbV9jb250cm9sUG9p
bnQgPSByZXN1bHQtPnBvaW50MjsKKyAgICAgICAgbV9jdXJyZW50UG9pbnQgPSByZXN1bHQtPnRh
cmdldFBvaW50OwogICAgIH0gZWxzZQotICAgICAgICBtX2NvbnN1bWVyLmN1cnZlVG9DdWJpY1Nt
b290aChwb2ludDIsIHRhcmdldFBvaW50LCBtX21vZGUpOworICAgICAgICBtX2NvbnN1bWVyLmN1
cnZlVG9DdWJpY1Ntb290aChyZXN1bHQtPnBvaW50MiwgcmVzdWx0LT50YXJnZXRQb2ludCwgbV9t
b2RlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBTVkdQYXRoUGFyc2VyOjpwYXJzZUN1
cnZlVG9RdWFkcmF0aWNTZWdtZW50KCkKIHsKLSAgICBGbG9hdFBvaW50IHBvaW50MTsKLSAgICBG
bG9hdFBvaW50IHRhcmdldFBvaW50OwotICAgIGlmICghbV9zb3VyY2UucGFyc2VDdXJ2ZVRvUXVh
ZHJhdGljU2VnbWVudChwb2ludDEsIHRhcmdldFBvaW50KSkKKyAgICBhdXRvIHJlc3VsdCA9IG1f
c291cmNlLnBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQoKTsKKyAgICBpZiAoIXJlc3VsdCkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKG1fcGF0aFBhcnNpbmdNb2RlID09IE5v
cm1hbGl6ZWRQYXJzaW5nKSB7Ci0gICAgICAgIG1fY29udHJvbFBvaW50ID0gcG9pbnQxOworICAg
ICAgICBtX2NvbnRyb2xQb2ludCA9IHJlc3VsdC0+cG9pbnQxOworCiAgICAgICAgIEZsb2F0UG9p
bnQgcG9pbnQxID0gbV9jdXJyZW50UG9pbnQ7CiAgICAgICAgIHBvaW50MS5tb3ZlKDIgKiBtX2Nv
bnRyb2xQb2ludC54KCksIDIgKiBtX2NvbnRyb2xQb2ludC55KCkpOwotICAgICAgICBGbG9hdFBv
aW50IHBvaW50Mih0YXJnZXRQb2ludC54KCkgKyAyICogbV9jb250cm9sUG9pbnQueCgpLCB0YXJn
ZXRQb2ludC55KCkgKyAyICogbV9jb250cm9sUG9pbnQueSgpKTsKKyAgICAgICAgRmxvYXRQb2lu
dCBwb2ludDIocmVzdWx0LT50YXJnZXRQb2ludC54KCkgKyAyICogbV9jb250cm9sUG9pbnQueCgp
LCByZXN1bHQtPnRhcmdldFBvaW50LnkoKSArIDIgKiBtX2NvbnRyb2xQb2ludC55KCkpOwogICAg
ICAgICBpZiAobV9tb2RlID09IFJlbGF0aXZlQ29vcmRpbmF0ZXMpIHsKICAgICAgICAgICAgIHBv
aW50MS5tb3ZlKDIgKiBtX2N1cnJlbnRQb2ludC54KCksIDIgKiBtX2N1cnJlbnRQb2ludC55KCkp
OwogICAgICAgICAgICAgcG9pbnQyLm1vdmUoMyAqIG1fY3VycmVudFBvaW50LngoKSwgMyAqIG1f
Y3VycmVudFBvaW50LnkoKSk7Ci0gICAgICAgICAgICB0YXJnZXRQb2ludCArPSBtX2N1cnJlbnRQ
b2ludDsKKyAgICAgICAgICAgIHJlc3VsdC0+dGFyZ2V0UG9pbnQgKz0gbV9jdXJyZW50UG9pbnQ7
CiAgICAgICAgIH0KICAgICAgICAgcG9pbnQxLnNjYWxlKGdPbmVPdmVyVGhyZWUpOwogICAgICAg
ICBwb2ludDIuc2NhbGUoZ09uZU92ZXJUaHJlZSk7CiAKLSAgICAgICAgbV9jb25zdW1lci5jdXJ2
ZVRvQ3ViaWMocG9pbnQxLCBwb2ludDIsIHRhcmdldFBvaW50LCBBYnNvbHV0ZUNvb3JkaW5hdGVz
KTsKKyAgICAgICAgbV9jb25zdW1lci5jdXJ2ZVRvQ3ViaWMocG9pbnQxLCBwb2ludDIsIHJlc3Vs
dC0+dGFyZ2V0UG9pbnQsIEFic29sdXRlQ29vcmRpbmF0ZXMpOwogCiAgICAgICAgIGlmIChtX21v
ZGUgPT0gUmVsYXRpdmVDb29yZGluYXRlcykKICAgICAgICAgICAgIG1fY29udHJvbFBvaW50ICs9
IG1fY3VycmVudFBvaW50OwotICAgICAgICBtX2N1cnJlbnRQb2ludCA9IHRhcmdldFBvaW50Owor
ICAgICAgICBtX2N1cnJlbnRQb2ludCA9IHJlc3VsdC0+dGFyZ2V0UG9pbnQ7CiAgICAgfSBlbHNl
Ci0gICAgICAgIG1fY29uc3VtZXIuY3VydmVUb1F1YWRyYXRpYyhwb2ludDEsIHRhcmdldFBvaW50
LCBtX21vZGUpOworICAgICAgICBtX2NvbnN1bWVyLmN1cnZlVG9RdWFkcmF0aWMocmVzdWx0LT5w
b2ludDEsIHJlc3VsdC0+dGFyZ2V0UG9pbnQsIG1fbW9kZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKIGJvb2wgU1ZHUGF0aFBhcnNlcjo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVu
dCgpCiB7Ci0gICAgRmxvYXRQb2ludCB0YXJnZXRQb2ludDsKLSAgICBpZiAoIW1fc291cmNlLnBh
cnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQodGFyZ2V0UG9pbnQpKQorICAgIGF1dG8g
cmVzdWx0ID0gbV9zb3VyY2UucGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudCgpOwor
ICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAobV9sYXN0
Q29tbWFuZCAhPSBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY0FicwpAQCAtMjQyLDY3ICsyMzksNjIg
QEAgYm9vbCBTVkdQYXRoUGFyc2VyOjpwYXJzZUN1cnZlVG9RdWFkcmF0aQogICAgICAgICBjdWJp
Y1BvaW50LnNjYWxlKDIpOwogICAgICAgICBjdWJpY1BvaW50Lm1vdmUoLW1fY29udHJvbFBvaW50
LngoKSwgLW1fY29udHJvbFBvaW50LnkoKSk7CiAgICAgICAgIEZsb2F0UG9pbnQgcG9pbnQxKG1f
Y3VycmVudFBvaW50LngoKSArIDIgKiBjdWJpY1BvaW50LngoKSwgbV9jdXJyZW50UG9pbnQueSgp
ICsgMiAqIGN1YmljUG9pbnQueSgpKTsKLSAgICAgICAgRmxvYXRQb2ludCBwb2ludDIodGFyZ2V0
UG9pbnQueCgpICsgMiAqIGN1YmljUG9pbnQueCgpLCB0YXJnZXRQb2ludC55KCkgKyAyICogY3Vi
aWNQb2ludC55KCkpOworICAgICAgICBGbG9hdFBvaW50IHBvaW50MihyZXN1bHQtPnRhcmdldFBv
aW50LngoKSArIDIgKiBjdWJpY1BvaW50LngoKSwgcmVzdWx0LT50YXJnZXRQb2ludC55KCkgKyAy
ICogY3ViaWNQb2ludC55KCkpOwogICAgICAgICBpZiAobV9tb2RlID09IFJlbGF0aXZlQ29vcmRp
bmF0ZXMpIHsKICAgICAgICAgICAgIHBvaW50MiArPSBtX2N1cnJlbnRQb2ludDsKLSAgICAgICAg
ICAgIHRhcmdldFBvaW50ICs9IG1fY3VycmVudFBvaW50OworICAgICAgICAgICAgcmVzdWx0LT50
YXJnZXRQb2ludCArPSBtX2N1cnJlbnRQb2ludDsKICAgICAgICAgfQogICAgICAgICBwb2ludDEu
c2NhbGUoZ09uZU92ZXJUaHJlZSk7CiAgICAgICAgIHBvaW50Mi5zY2FsZShnT25lT3ZlclRocmVl
KTsKIAotICAgICAgICBtX2NvbnN1bWVyLmN1cnZlVG9DdWJpYyhwb2ludDEsIHBvaW50MiwgdGFy
Z2V0UG9pbnQsIEFic29sdXRlQ29vcmRpbmF0ZXMpOworICAgICAgICBtX2NvbnN1bWVyLmN1cnZl
VG9DdWJpYyhwb2ludDEsIHBvaW50MiwgcmVzdWx0LT50YXJnZXRQb2ludCwgQWJzb2x1dGVDb29y
ZGluYXRlcyk7CiAKICAgICAgICAgbV9jb250cm9sUG9pbnQgPSBjdWJpY1BvaW50OwotICAgICAg
ICBtX2N1cnJlbnRQb2ludCA9IHRhcmdldFBvaW50OworICAgICAgICBtX2N1cnJlbnRQb2ludCA9
IHJlc3VsdC0+dGFyZ2V0UG9pbnQ7CiAgICAgfSBlbHNlCi0gICAgICAgIG1fY29uc3VtZXIuY3Vy
dmVUb1F1YWRyYXRpY1Ntb290aCh0YXJnZXRQb2ludCwgbV9tb2RlKTsKKyAgICAgICAgbV9jb25z
dW1lci5jdXJ2ZVRvUXVhZHJhdGljU21vb3RoKHJlc3VsdC0+dGFyZ2V0UG9pbnQsIG1fbW9kZSk7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgU1ZHUGF0aFBhcnNlcjo6cGFyc2VBcmNUb1Nl
Z21lbnQoKQogewotICAgIGZsb2F0IHJ4OwotICAgIGZsb2F0IHJ5OwotICAgIGZsb2F0IGFuZ2xl
OwotICAgIGJvb2wgbGFyZ2VBcmM7Ci0gICAgYm9vbCBzd2VlcDsKLSAgICBGbG9hdFBvaW50IHRh
cmdldFBvaW50OwotICAgIGlmICghbV9zb3VyY2UucGFyc2VBcmNUb1NlZ21lbnQocngsIHJ5LCBh
bmdsZSwgbGFyZ2VBcmMsIHN3ZWVwLCB0YXJnZXRQb2ludCkpCisgICAgYXV0byByZXN1bHQgPSBt
X3NvdXJjZS5wYXJzZUFyY1RvU2VnbWVudCgpOworICAgIGlmICghcmVzdWx0KQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICAvLyBJZiByeCA9IDAgb3IgcnkgPSAwIHRoZW4gdGhpcyBhcmMg
aXMgdHJlYXRlZCBhcyBhIHN0cmFpZ2h0IGxpbmUgc2VnbWVudCAoYSAibGluZXRvIikgam9pbmlu
ZyB0aGUgZW5kcG9pbnRzLgogICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRy9pbXBsbm90
ZS5odG1sI0FyY091dE9mUmFuZ2VQYXJhbWV0ZXJzCiAgICAgLy8gSWYgdGhlIGN1cnJlbnQgcG9p
bnQgYW5kIHRhcmdldCBwb2ludCBmb3IgdGhlIGFyYyBhcmUgaWRlbnRpY2FsLCBpdCBzaG91bGQg
YmUgdHJlYXRlZCBhcyBhIHplcm8gbGVuZ3RoCiAgICAgLy8gcGF0aC4gVGhpcyBlbnN1cmVzIGNv
bnRpbnVpdHkgaW4gYW5pbWF0aW9ucy4KLSAgICByeCA9IGZhYnNmKHJ4KTsKLSAgICByeSA9IGZh
YnNmKHJ5KTsKKyAgICByZXN1bHQtPnJ4ID0gZmFic2YocmVzdWx0LT5yeCk7CisgICAgcmVzdWx0
LT5yeSA9IGZhYnNmKHJlc3VsdC0+cnkpOwogICAgIGJvb2wgYXJjSXNaZXJvTGVuZ3RoID0gZmFs
c2U7CiAgICAgaWYgKG1fcGF0aFBhcnNpbmdNb2RlID09IE5vcm1hbGl6ZWRQYXJzaW5nKSB7CiAg
ICAgICAgIGlmIChtX21vZGUgPT0gUmVsYXRpdmVDb29yZGluYXRlcykKLSAgICAgICAgICAgIGFy
Y0lzWmVyb0xlbmd0aCA9IHRhcmdldFBvaW50ID09IEZsb2F0UG9pbnQ6Onplcm8oKTsKKyAgICAg
ICAgICAgIGFyY0lzWmVyb0xlbmd0aCA9IHJlc3VsdC0+dGFyZ2V0UG9pbnQgPT0gRmxvYXRQb2lu
dDo6emVybygpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBhcmNJc1plcm9MZW5ndGggPSB0
YXJnZXRQb2ludCA9PSBtX2N1cnJlbnRQb2ludDsKKyAgICAgICAgICAgIGFyY0lzWmVyb0xlbmd0
aCA9IHJlc3VsdC0+dGFyZ2V0UG9pbnQgPT0gbV9jdXJyZW50UG9pbnQ7CiAgICAgfQotICAgIGlm
ICghcnggfHwgIXJ5IHx8IGFyY0lzWmVyb0xlbmd0aCkgeworICAgIGlmICghcmVzdWx0LT5yeCB8
fCAhcmVzdWx0LT5yeSB8fCBhcmNJc1plcm9MZW5ndGgpIHsKICAgICAgICAgaWYgKG1fcGF0aFBh
cnNpbmdNb2RlID09IE5vcm1hbGl6ZWRQYXJzaW5nKSB7CiAgICAgICAgICAgICBpZiAobV9tb2Rl
ID09IFJlbGF0aXZlQ29vcmRpbmF0ZXMpCi0gICAgICAgICAgICAgICAgbV9jdXJyZW50UG9pbnQg
Kz0gdGFyZ2V0UG9pbnQ7CisgICAgICAgICAgICAgICAgbV9jdXJyZW50UG9pbnQgKz0gcmVzdWx0
LT50YXJnZXRQb2ludDsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX2N1cnJl
bnRQb2ludCA9IHRhcmdldFBvaW50OworICAgICAgICAgICAgICAgIG1fY3VycmVudFBvaW50ID0g
cmVzdWx0LT50YXJnZXRQb2ludDsKICAgICAgICAgICAgIG1fY29uc3VtZXIubGluZVRvKG1fY3Vy
cmVudFBvaW50LCBBYnNvbHV0ZUNvb3JkaW5hdGVzKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICBtX2NvbnN1bWVyLmxpbmVUbyh0YXJnZXRQb2ludCwgbV9tb2RlKTsKKyAgICAgICAgICAg
IG1fY29uc3VtZXIubGluZVRvKHJlc3VsdC0+dGFyZ2V0UG9pbnQsIG1fbW9kZSk7CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIGlmIChtX3BhdGhQYXJzaW5nTW9kZSA9PSBOb3Jt
YWxpemVkUGFyc2luZykgewogICAgICAgICBGbG9hdFBvaW50IHBvaW50MSA9IG1fY3VycmVudFBv
aW50OwogICAgICAgICBpZiAobV9tb2RlID09IFJlbGF0aXZlQ29vcmRpbmF0ZXMpCi0gICAgICAg
ICAgICB0YXJnZXRQb2ludCArPSBtX2N1cnJlbnRQb2ludDsKLSAgICAgICAgbV9jdXJyZW50UG9p
bnQgPSB0YXJnZXRQb2ludDsKLSAgICAgICAgcmV0dXJuIGRlY29tcG9zZUFyY1RvQ3ViaWMoYW5n
bGUsIHJ4LCByeSwgcG9pbnQxLCB0YXJnZXRQb2ludCwgbGFyZ2VBcmMsIHN3ZWVwKTsKKyAgICAg
ICAgICAgIHJlc3VsdC0+dGFyZ2V0UG9pbnQgKz0gbV9jdXJyZW50UG9pbnQ7CisgICAgICAgIG1f
Y3VycmVudFBvaW50ID0gcmVzdWx0LT50YXJnZXRQb2ludDsKKyAgICAgICAgcmV0dXJuIGRlY29t
cG9zZUFyY1RvQ3ViaWMocmVzdWx0LT5hbmdsZSwgcmVzdWx0LT5yeCwgcmVzdWx0LT5yeSwgcG9p
bnQxLCByZXN1bHQtPnRhcmdldFBvaW50LCByZXN1bHQtPmxhcmdlQXJjLCByZXN1bHQtPnN3ZWVw
KTsKICAgICB9Ci0gICAgbV9jb25zdW1lci5hcmNUbyhyeCwgcnksIGFuZ2xlLCBsYXJnZUFyYywg
c3dlZXAsIHRhcmdldFBvaW50LCBtX21vZGUpOworICAgIG1fY29uc3VtZXIuYXJjVG8ocmVzdWx0
LT5yeCwgcmVzdWx0LT5yeSwgcmVzdWx0LT5hbmdsZSwgcmVzdWx0LT5sYXJnZUFyYywgcmVzdWx0
LT5zd2VlcCwgcmVzdWx0LT50YXJnZXRQb2ludCwgbV9tb2RlKTsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIApAQCAtMzEyLDggKzMwNCwxMSBAQCBib29sIFNWR1BhdGhQYXJzZXI6OnBhcnNlUGF0aERh
dGEoYm9vbCBjCiAgICAgaWYgKCFtX3NvdXJjZS5tb3ZlVG9OZXh0VG9rZW4oKSkKICAgICAgICAg
cmV0dXJuIHRydWU7CiAKLSAgICBTVkdQYXRoU2VnVHlwZSBjb21tYW5kOwotICAgIG1fc291cmNl
LnBhcnNlU1ZHU2VnbWVudFR5cGUoY29tbWFuZCk7CisgICAgYXV0byBwYXJzZWRDb21tYW5kID0g
bV9zb3VyY2UucGFyc2VTVkdTZWdtZW50VHlwZSgpOworICAgIGlmICghcGFyc2VkQ29tbWFuZCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBjb21tYW5kID0gKnBhcnNlZENvbW1h
bmQ7CiAKICAgICAvLyBQYXRoIG11c3Qgc3RhcnQgd2l0aCBtb3ZldG8uCiAgICAgaWYgKGNoZWNr
Rm9ySW5pdGlhbE1vdmVUbyAmJiBjb21tYW5kICE9IFBhdGhTZWdNb3ZlVG9BYnMgJiYgY29tbWFu
ZCAhPSBQYXRoU2VnTW92ZVRvUmVsKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhQ
YXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFBhcnNlci5o
CShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFBhcnNlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNs
YXNzIFNWR1BhdGhCeXRlU3RyZWFtOwogY2xhc3MgU1ZHUGF0aFNvdXJjZTsKIAotY2xhc3MgU1ZH
UGF0aFBhcnNlciB7CitjbGFzcyBTVkdQYXRoUGFyc2VyIGZpbmFsIHsKIHB1YmxpYzoKICAgICBz
dGF0aWMgYm9vbCBwYXJzZShTVkdQYXRoU291cmNlJiwgU1ZHUGF0aENvbnN1bWVyJiwgUGF0aFBh
cnNpbmdNb2RlID0gTm9ybWFsaXplZFBhcnNpbmcsIGJvb2wgY2hlY2tGb3JJbml0aWFsTW92ZVRv
ID0gdHJ1ZSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU2VnTGlzdFNvdXJj
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTZWdMaXN0U291
cmNlLmNwcAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhT
ZWdMaXN0U291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTUgKzQwLDE1IEBAIGJvb2wg
U1ZHUGF0aFNlZ0xpc3RTb3VyY2U6Omhhc01vcmVEYXRhKCkKICAgICByZXR1cm4gbV9pdGVtQ3Vy
cmVudCA8IG1faXRlbUVuZDsKIH0KIAotYm9vbCBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VT
VkdTZWdtZW50VHlwZShTVkdQYXRoU2VnVHlwZSYgcGF0aFNlZ1R5cGUpCitTVkdQYXRoU2VnVHlw
ZSBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6bmV4dENvbW1hbmQoU1ZHUGF0aFNlZ1R5cGUpCiB7CiAg
ICAgbV9zZWdtZW50ID0gbV9wYXRoU2VnTGlzdC5hdChtX2l0ZW1DdXJyZW50KTsKLSAgICBwYXRo
U2VnVHlwZSA9IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdUeXBlPihtX3NlZ21lbnQtPnBhdGhTZWdU
eXBlKCkpOworICAgIFNWR1BhdGhTZWdUeXBlIHBhdGhTZWdUeXBlID0gc3RhdGljX2Nhc3Q8U1ZH
UGF0aFNlZ1R5cGU+KG1fc2VnbWVudC0+cGF0aFNlZ1R5cGUoKSk7CiAgICAgKyttX2l0ZW1DdXJy
ZW50OwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBwYXRoU2VnVHlwZTsKIH0KIAotU1ZH
UGF0aFNlZ1R5cGUgU1ZHUGF0aFNlZ0xpc3RTb3VyY2U6Om5leHRDb21tYW5kKFNWR1BhdGhTZWdU
eXBlKQorT3B0aW9uYWw8U1ZHUGF0aFNlZ1R5cGU+IFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJz
ZVNWR1NlZ21lbnRUeXBlKCkKIHsKICAgICBtX3NlZ21lbnQgPSBtX3BhdGhTZWdMaXN0LmF0KG1f
aXRlbUN1cnJlbnQpOwogICAgIFNWR1BhdGhTZWdUeXBlIHBhdGhTZWdUeXBlID0gc3RhdGljX2Nh
c3Q8U1ZHUGF0aFNlZ1R5cGU+KG1fc2VnbWVudC0+cGF0aFNlZ1R5cGUoKSk7CkBAIC01Niw5NCAr
NTYsMTEyIEBAIFNWR1BhdGhTZWdUeXBlIFNWR1BhdGhTZWdMaXN0U291cmNlOjpuZXgKICAgICBy
ZXR1cm4gcGF0aFNlZ1R5cGU7CiB9CiAKLWJvb2wgU1ZHUGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNl
TW92ZVRvU2VnbWVudChGbG9hdFBvaW50JiB0YXJnZXRQb2ludCkKK09wdGlvbmFsPFNWR1BhdGhT
b3VyY2U6Ok1vdmVUb1NlZ21lbnQ+IFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZU1vdmVUb1Nl
Z21lbnQoKQogewogICAgIEFTU0VSVChtX3NlZ21lbnQpOwogICAgIEFTU0VSVChtX3NlZ21lbnQt
PnBhdGhTZWdUeXBlKCkgPT0gUGF0aFNlZ01vdmVUb0FicyB8fCBtX3NlZ21lbnQtPnBhdGhTZWdU
eXBlKCkgPT0gUGF0aFNlZ01vdmVUb1JlbCk7CiAgICAgU1ZHUGF0aFNlZ1NpbmdsZUNvb3JkaW5h
dGUqIG1vdmVUbyA9IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdTaW5nbGVDb29yZGluYXRlKj4obV9z
ZWdtZW50LmdldCgpKTsKLSAgICB0YXJnZXRQb2ludCA9IEZsb2F0UG9pbnQobW92ZVRvLT54KCks
IG1vdmVUby0+eSgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBNb3ZlVG9TZWdtZW50
IHNlZ21lbnQ7CisgICAgc2VnbWVudC50YXJnZXRQb2ludCA9IEZsb2F0UG9pbnQobW92ZVRvLT54
KCksIG1vdmVUby0+eSgpKTsKKyAgICByZXR1cm4gc2VnbWVudDsKIH0KIAotYm9vbCBTVkdQYXRo
U2VnTGlzdFNvdXJjZTo6cGFyc2VMaW5lVG9TZWdtZW50KEZsb2F0UG9pbnQmIHRhcmdldFBvaW50
KQorT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6TGluZVRvU2VnbWVudD4gU1ZHUGF0aFNlZ0xpc3RT
b3VyY2U6OnBhcnNlTGluZVRvU2VnbWVudCgpCiB7CiAgICAgQVNTRVJUKG1fc2VnbWVudCk7CiAg
ICAgQVNTRVJUKG1fc2VnbWVudC0+cGF0aFNlZ1R5cGUoKSA9PSBQYXRoU2VnTGluZVRvQWJzIHx8
IG1fc2VnbWVudC0+cGF0aFNlZ1R5cGUoKSA9PSBQYXRoU2VnTGluZVRvUmVsKTsKICAgICBTVkdQ
YXRoU2VnU2luZ2xlQ29vcmRpbmF0ZSogbGluZVRvID0gc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ1Np
bmdsZUNvb3JkaW5hdGUqPihtX3NlZ21lbnQuZ2V0KCkpOwotICAgIHRhcmdldFBvaW50ID0gRmxv
YXRQb2ludChsaW5lVG8tPngoKSwgbGluZVRvLT55KCkpOwotICAgIHJldHVybiB0cnVlOworICAg
IAorICAgIExpbmVUb1NlZ21lbnQgc2VnbWVudDsKKyAgICBzZWdtZW50LnRhcmdldFBvaW50ID0g
RmxvYXRQb2ludChsaW5lVG8tPngoKSwgbGluZVRvLT55KCkpOworICAgIHJldHVybiBzZWdtZW50
OwogfQogCi1ib29sIFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUxpbmVUb0hvcml6b250YWxT
ZWdtZW50KGZsb2F0JiB4KQorT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6TGluZVRvSG9yaXpvbnRh
bFNlZ21lbnQ+IFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUxpbmVUb0hvcml6b250YWxTZWdt
ZW50KCkKIHsKICAgICBBU1NFUlQobV9zZWdtZW50KTsKICAgICBBU1NFUlQobV9zZWdtZW50LT5w
YXRoU2VnVHlwZSgpID09IFBhdGhTZWdMaW5lVG9Ib3Jpem9udGFsQWJzIHx8IG1fc2VnbWVudC0+
cGF0aFNlZ1R5cGUoKSA9PSBQYXRoU2VnTGluZVRvSG9yaXpvbnRhbFJlbCk7CiAgICAgU1ZHUGF0
aFNlZ0xpbmV0b0hvcml6b250YWwqIGhvcml6b250YWwgPSBzdGF0aWNfY2FzdDxTVkdQYXRoU2Vn
TGluZXRvSG9yaXpvbnRhbCo+KG1fc2VnbWVudC5nZXQoKSk7Ci0gICAgeCA9IGhvcml6b250YWwt
PngoKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBMaW5lVG9Ib3Jpem9udGFsU2VnbWVu
dCBzZWdtZW50OworICAgIHNlZ21lbnQueCA9IGhvcml6b250YWwtPngoKTsKKyAgICByZXR1cm4g
c2VnbWVudDsKIH0KIAotYm9vbCBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VMaW5lVG9WZXJ0
aWNhbFNlZ21lbnQoZmxvYXQmIHkpCitPcHRpb25hbDxTVkdQYXRoU291cmNlOjpMaW5lVG9WZXJ0
aWNhbFNlZ21lbnQ+IFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUxpbmVUb1ZlcnRpY2FsU2Vn
bWVudCgpCiB7CiAgICAgQVNTRVJUKG1fc2VnbWVudCk7CiAgICAgQVNTRVJUKG1fc2VnbWVudC0+
cGF0aFNlZ1R5cGUoKSA9PSBQYXRoU2VnTGluZVRvVmVydGljYWxBYnMgfHwgbV9zZWdtZW50LT5w
YXRoU2VnVHlwZSgpID09IFBhdGhTZWdMaW5lVG9WZXJ0aWNhbFJlbCk7CiAgICAgU1ZHUGF0aFNl
Z0xpbmV0b1ZlcnRpY2FsKiB2ZXJ0aWNhbCA9IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdMaW5ldG9W
ZXJ0aWNhbCo+KG1fc2VnbWVudC5nZXQoKSk7Ci0gICAgeSA9IHZlcnRpY2FsLT55KCk7Ci0gICAg
cmV0dXJuIHRydWU7CisgICAgCisgICAgTGluZVRvVmVydGljYWxTZWdtZW50IHNlZ21lbnQ7Cisg
ICAgc2VnbWVudC55ID0gdmVydGljYWwtPnkoKTsKKyAgICByZXR1cm4gc2VnbWVudDsKIH0KIAot
Ym9vbCBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KEZsb2F0
UG9pbnQmIHBvaW50MSwgRmxvYXRQb2ludCYgcG9pbnQyLCBGbG9hdFBvaW50JiB0YXJnZXRQb2lu
dCkKK09wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkN1cnZlVG9DdWJpY1NlZ21lbnQ+IFNWR1BhdGhT
ZWdMaXN0U291cmNlOjpwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQoKQogewogICAgIEFTU0VSVCht
X3NlZ21lbnQpOwogICAgIEFTU0VSVChtX3NlZ21lbnQtPnBhdGhTZWdUeXBlKCkgPT0gUGF0aFNl
Z0N1cnZlVG9DdWJpY0FicyB8fCBtX3NlZ21lbnQtPnBhdGhTZWdUeXBlKCkgPT0gUGF0aFNlZ0N1
cnZlVG9DdWJpY1JlbCk7CiAgICAgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpYyogY3ViaWMgPSBzdGF0
aWNfY2FzdDxTVkdQYXRoU2VnQ3VydmV0b0N1YmljKj4obV9zZWdtZW50LmdldCgpKTsKLSAgICBw
b2ludDEgPSBGbG9hdFBvaW50KGN1YmljLT54MSgpLCBjdWJpYy0+eTEoKSk7Ci0gICAgcG9pbnQy
ID0gRmxvYXRQb2ludChjdWJpYy0+eDIoKSwgY3ViaWMtPnkyKCkpOwotICAgIHRhcmdldFBvaW50
ID0gRmxvYXRQb2ludChjdWJpYy0+eCgpLCBjdWJpYy0+eSgpKTsKLSAgICByZXR1cm4gdHJ1ZTsK
KyAgICAKKyAgICBDdXJ2ZVRvQ3ViaWNTZWdtZW50IHNlZ21lbnQ7CisgICAgc2VnbWVudC5wb2lu
dDEgPSBGbG9hdFBvaW50KGN1YmljLT54MSgpLCBjdWJpYy0+eTEoKSk7CisgICAgc2VnbWVudC5w
b2ludDIgPSBGbG9hdFBvaW50KGN1YmljLT54MigpLCBjdWJpYy0+eTIoKSk7CisgICAgc2VnbWVu
dC50YXJnZXRQb2ludCA9IEZsb2F0UG9pbnQoY3ViaWMtPngoKSwgY3ViaWMtPnkoKSk7CisgICAg
cmV0dXJuIHNlZ21lbnQ7CiB9CiAKLWJvb2wgU1ZHUGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNlQ3Vy
dmVUb0N1YmljU21vb3RoU2VnbWVudChGbG9hdFBvaW50JiBwb2ludDIsIEZsb2F0UG9pbnQmIHRh
cmdldFBvaW50KQorT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6Q3VydmVUb0N1YmljU21vb3RoU2Vn
bWVudD4gU1ZHUGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVu
dCgpCiB7CiAgICAgQVNTRVJUKG1fc2VnbWVudCk7CiAgICAgQVNTRVJUKG1fc2VnbWVudC0+cGF0
aFNlZ1R5cGUoKSA9PSBQYXRoU2VnQ3VydmVUb0N1YmljU21vb3RoQWJzIHx8IG1fc2VnbWVudC0+
cGF0aFNlZ1R5cGUoKSA9PSBQYXRoU2VnQ3VydmVUb0N1YmljU21vb3RoUmVsKTsKICAgICBTVkdQ
YXRoU2VnQ3VydmV0b0N1YmljU21vb3RoKiBjdWJpY1Ntb290aCA9IHN0YXRpY19jYXN0PFNWR1Bh
dGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGgqPihtX3NlZ21lbnQuZ2V0KCkpOwotICAgIHBvaW50MiA9
IEZsb2F0UG9pbnQoY3ViaWNTbW9vdGgtPngyKCksIGN1YmljU21vb3RoLT55MigpKTsKLSAgICB0
YXJnZXRQb2ludCA9IEZsb2F0UG9pbnQoY3ViaWNTbW9vdGgtPngoKSwgY3ViaWNTbW9vdGgtPnko
KSk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgQ3VydmVUb0N1YmljU21vb3RoU2VnbWVu
dCBzZWdtZW50OworICAgIHNlZ21lbnQucG9pbnQyID0gRmxvYXRQb2ludChjdWJpY1Ntb290aC0+
eDIoKSwgY3ViaWNTbW9vdGgtPnkyKCkpOworICAgIHNlZ21lbnQudGFyZ2V0UG9pbnQgPSBGbG9h
dFBvaW50KGN1YmljU21vb3RoLT54KCksIGN1YmljU21vb3RoLT55KCkpOworICAgIHJldHVybiBz
ZWdtZW50OwogfQogCi1ib29sIFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUN1cnZlVG9RdWFk
cmF0aWNTZWdtZW50KEZsb2F0UG9pbnQmIHBvaW50MSwgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQp
CitPcHRpb25hbDxTVkdQYXRoU291cmNlOjpDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudD4gU1ZHUGF0
aFNlZ0xpc3RTb3VyY2U6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQoKQogewogICAgIEFT
U0VSVChtX3NlZ21lbnQpOwogICAgIEFTU0VSVChtX3NlZ21lbnQtPnBhdGhTZWdUeXBlKCkgPT0g
UGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNBYnMgfHwgbV9zZWdtZW50LT5wYXRoU2VnVHlwZSgpID09
IFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljUmVsKTsKICAgICBTVkdQYXRoU2VnQ3VydmV0b1F1YWRy
YXRpYyogcXVhZHJhdGljID0gc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWMq
PihtX3NlZ21lbnQuZ2V0KCkpOwotICAgIHBvaW50MSA9IEZsb2F0UG9pbnQocXVhZHJhdGljLT54
MSgpLCBxdWFkcmF0aWMtPnkxKCkpOwotICAgIHRhcmdldFBvaW50ID0gRmxvYXRQb2ludChxdWFk
cmF0aWMtPngoKSwgcXVhZHJhdGljLT55KCkpOwotICAgIHJldHVybiB0cnVlOworICAgIAorICAg
IEN1cnZlVG9RdWFkcmF0aWNTZWdtZW50IHNlZ21lbnQ7CisgICAgc2VnbWVudC5wb2ludDEgPSBG
bG9hdFBvaW50KHF1YWRyYXRpYy0+eDEoKSwgcXVhZHJhdGljLT55MSgpKTsKKyAgICBzZWdtZW50
LnRhcmdldFBvaW50ID0gRmxvYXRQb2ludChxdWFkcmF0aWMtPngoKSwgcXVhZHJhdGljLT55KCkp
OworICAgIHJldHVybiBzZWdtZW50OwogfQogCi1ib29sIFNWR1BhdGhTZWdMaXN0U291cmNlOjpw
YXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KEZsb2F0UG9pbnQmIHRhcmdldFBvaW50
KQorT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6Q3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQ+
IFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50
KCkKIHsKICAgICBBU1NFUlQobV9zZWdtZW50KTsKICAgICBBU1NFUlQobV9zZWdtZW50LT5wYXRo
U2VnVHlwZSgpID09IFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljU21vb3RoQWJzIHx8IG1fc2VnbWVu
dC0+cGF0aFNlZ1R5cGUoKSA9PSBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY1Ntb290aFJlbCk7CiAg
ICAgU1ZHUGF0aFNlZ1NpbmdsZUNvb3JkaW5hdGUqIHF1YWRyYXRpY1Ntb290aCA9IHN0YXRpY19j
YXN0PFNWR1BhdGhTZWdTaW5nbGVDb29yZGluYXRlKj4obV9zZWdtZW50LmdldCgpKTsKLSAgICB0
YXJnZXRQb2ludCA9IEZsb2F0UG9pbnQocXVhZHJhdGljU21vb3RoLT54KCksIHF1YWRyYXRpY1Nt
b290aC0+eSgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBDdXJ2ZVRvUXVhZHJhdGlj
U21vb3RoU2VnbWVudCBzZWdtZW50OworICAgIHNlZ21lbnQudGFyZ2V0UG9pbnQgPSBGbG9hdFBv
aW50KHF1YWRyYXRpY1Ntb290aC0+eCgpLCBxdWFkcmF0aWNTbW9vdGgtPnkoKSk7CisgICAgcmV0
dXJuIHNlZ21lbnQ7CiB9CiAKLWJvb2wgU1ZHUGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNlQXJjVG9T
ZWdtZW50KGZsb2F0JiByeCwgZmxvYXQmIHJ5LCBmbG9hdCYgYW5nbGUsIGJvb2wmIGxhcmdlQXJj
LCBib29sJiBzd2VlcCwgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCitPcHRpb25hbDxTVkdQYXRo
U291cmNlOjpBcmNUb1NlZ21lbnQ+IFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUFyY1RvU2Vn
bWVudCgpCiB7CiAgICAgQVNTRVJUKG1fc2VnbWVudCk7CiAgICAgQVNTRVJUKG1fc2VnbWVudC0+
cGF0aFNlZ1R5cGUoKSA9PSBQYXRoU2VnQXJjQWJzIHx8IG1fc2VnbWVudC0+cGF0aFNlZ1R5cGUo
KSA9PSBQYXRoU2VnQXJjUmVsKTsKICAgICBTVkdQYXRoU2VnQXJjKiBhcmNUbyA9IHN0YXRpY19j
YXN0PFNWR1BhdGhTZWdBcmMqPihtX3NlZ21lbnQuZ2V0KCkpOwotICAgIHJ4ID0gYXJjVG8tPnIx
KCk7Ci0gICAgcnkgPSBhcmNUby0+cjIoKTsKLSAgICBhbmdsZSA9IGFyY1RvLT5hbmdsZSgpOwot
ICAgIGxhcmdlQXJjID0gYXJjVG8tPmxhcmdlQXJjRmxhZygpOwotICAgIHN3ZWVwID0gYXJjVG8t
PnN3ZWVwRmxhZygpOwotICAgIHRhcmdldFBvaW50ID0gRmxvYXRQb2ludChhcmNUby0+eCgpLCBh
cmNUby0+eSgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBBcmNUb1NlZ21lbnQgc2Vn
bWVudDsKKyAgICBzZWdtZW50LnJ4ID0gYXJjVG8tPnIxKCk7CisgICAgc2VnbWVudC5yeSA9IGFy
Y1RvLT5yMigpOworICAgIHNlZ21lbnQuYW5nbGUgPSBhcmNUby0+YW5nbGUoKTsKKyAgICBzZWdt
ZW50LmxhcmdlQXJjID0gYXJjVG8tPmxhcmdlQXJjRmxhZygpOworICAgIHNlZ21lbnQuc3dlZXAg
PSBhcmNUby0+c3dlZXBGbGFnKCk7CisgICAgc2VnbWVudC50YXJnZXRQb2ludCA9IEZsb2F0UG9p
bnQoYXJjVG8tPngoKSwgYXJjVG8tPnkoKSk7CisgICAgcmV0dXJuIHNlZ21lbnQ7CiB9CiAKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU2VnTGlzdFNvdXJjZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU2VnTGlzdFNvdXJjZS5oCShyZXZpc2lv
biAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFNlZ0xpc3RTb3VyY2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMzYsMTggKzM2LDE4IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAg
Ym9vbCBoYXNNb3JlRGF0YSgpIGNvbnN0IGZpbmFsOwogICAgIGJvb2wgbW92ZVRvTmV4dFRva2Vu
KCkgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQotICAgIGJvb2wgcGFyc2VTVkdTZWdtZW50VHlwZShT
VkdQYXRoU2VnVHlwZSYpIGZpbmFsOwogICAgIFNWR1BhdGhTZWdUeXBlIG5leHRDb21tYW5kKFNW
R1BhdGhTZWdUeXBlKSBmaW5hbDsKIAotICAgIGJvb2wgcGFyc2VNb3ZlVG9TZWdtZW50KEZsb2F0
UG9pbnQmKSBmaW5hbDsKLSAgICBib29sIHBhcnNlTGluZVRvU2VnbWVudChGbG9hdFBvaW50Jikg
ZmluYWw7Ci0gICAgYm9vbCBwYXJzZUxpbmVUb0hvcml6b250YWxTZWdtZW50KGZsb2F0JikgZmlu
YWw7Ci0gICAgYm9vbCBwYXJzZUxpbmVUb1ZlcnRpY2FsU2VnbWVudChmbG9hdCYpIGZpbmFsOwot
ICAgIGJvb2wgcGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KEZsb2F0UG9pbnQmLCBGbG9hdFBvaW50
JiwgRmxvYXRQb2ludCYpIGZpbmFsOwotICAgIGJvb2wgcGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhT
ZWdtZW50KEZsb2F0UG9pbnQmLCBGbG9hdFBvaW50JikgZmluYWw7Ci0gICAgYm9vbCBwYXJzZUN1
cnZlVG9RdWFkcmF0aWNTZWdtZW50KEZsb2F0UG9pbnQmLCBGbG9hdFBvaW50JikgZmluYWw7Ci0g
ICAgYm9vbCBwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KEZsb2F0UG9pbnQmKSBm
aW5hbDsKLSAgICBib29sIHBhcnNlQXJjVG9TZWdtZW50KGZsb2F0JiwgZmxvYXQmLCBmbG9hdCYs
IGJvb2wmLCBib29sJiwgRmxvYXRQb2ludCYpIGZpbmFsOworICAgIE9wdGlvbmFsPFNWR1BhdGhT
ZWdUeXBlPiBwYXJzZVNWR1NlZ21lbnRUeXBlKCkgZmluYWw7CisgICAgT3B0aW9uYWw8TW92ZVRv
U2VnbWVudD4gcGFyc2VNb3ZlVG9TZWdtZW50KCkgZmluYWw7CisgICAgT3B0aW9uYWw8TGluZVRv
U2VnbWVudD4gcGFyc2VMaW5lVG9TZWdtZW50KCkgZmluYWw7CisgICAgT3B0aW9uYWw8TGluZVRv
SG9yaXpvbnRhbFNlZ21lbnQ+IHBhcnNlTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQoKSBmaW5hbDsK
KyAgICBPcHRpb25hbDxMaW5lVG9WZXJ0aWNhbFNlZ21lbnQ+IHBhcnNlTGluZVRvVmVydGljYWxT
ZWdtZW50KCkgZmluYWw7CisgICAgT3B0aW9uYWw8Q3VydmVUb0N1YmljU2VnbWVudD4gcGFyc2VD
dXJ2ZVRvQ3ViaWNTZWdtZW50KCkgZmluYWw7CisgICAgT3B0aW9uYWw8Q3VydmVUb0N1YmljU21v
b3RoU2VnbWVudD4gcGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KCkgZmluYWw7CisgICAg
T3B0aW9uYWw8Q3VydmVUb1F1YWRyYXRpY1NlZ21lbnQ+IHBhcnNlQ3VydmVUb1F1YWRyYXRpY1Nl
Z21lbnQoKSBmaW5hbDsKKyAgICBPcHRpb25hbDxDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVu
dD4gcGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudCgpIGZpbmFsOworICAgIE9wdGlv
bmFsPEFyY1RvU2VnbWVudD4gcGFyc2VBcmNUb1NlZ21lbnQoKSBmaW5hbDsKIAogICAgIGNvbnN0
IFNWR1BhdGhTZWdMaXN0JiBtX3BhdGhTZWdMaXN0OwogICAgIFJlZlB0cjxTVkdQYXRoU2VnPiBt
X3NlZ21lbnQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFNvdXJjZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU291cmNlLmgJKHJldmlzaW9uIDI2
MzE3NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU291cmNlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMzLDE4ICszMyw2MyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgaGFzTW9y
ZURhdGEoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIG1vdmVUb05leHRUb2tlbigpID0g
MDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VTVkdTZWdtZW50VHlwZShTVkdQYXRoU2VnVHlwZSYp
ID0gMDsKICAgICB2aXJ0dWFsIFNWR1BhdGhTZWdUeXBlIG5leHRDb21tYW5kKFNWR1BhdGhTZWdU
eXBlIHByZXZpb3VzQ29tbWFuZCkgPSAwOwogCi0gICAgdmlydHVhbCBib29sIHBhcnNlTW92ZVRv
U2VnbWVudChGbG9hdFBvaW50JikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBwYXJzZUxpbmVUb1Nl
Z21lbnQoRmxvYXRQb2ludCYpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VMaW5lVG9Ib3Jp
em9udGFsU2VnbWVudChmbG9hdCYpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VMaW5lVG9W
ZXJ0aWNhbFNlZ21lbnQoZmxvYXQmKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHBhcnNlQ3VydmVU
b0N1YmljU2VnbWVudChGbG9hdFBvaW50JiwgRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmKSA9IDA7
Ci0gICAgdmlydHVhbCBib29sIHBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudChGbG9hdFBv
aW50JiwgRmxvYXRQb2ludCYpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VDdXJ2ZVRvUXVh
ZHJhdGljU2VnbWVudChGbG9hdFBvaW50JiwgRmxvYXRQb2ludCYpID0gMDsKLSAgICB2aXJ0dWFs
IGJvb2wgcGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudChGbG9hdFBvaW50JikgPSAw
OwotICAgIHZpcnR1YWwgYm9vbCBwYXJzZUFyY1RvU2VnbWVudChmbG9hdCYsIGZsb2F0JiwgZmxv
YXQmLCBib29sJiwgYm9vbCYsIEZsb2F0UG9pbnQmKSA9IDA7CisgICAgdmlydHVhbCBPcHRpb25h
bDxTVkdQYXRoU2VnVHlwZT4gcGFyc2VTVkdTZWdtZW50VHlwZSgpID0gMDsKKworICAgIHN0cnVj
dCBNb3ZlVG9TZWdtZW50IHsKKyAgICAgICAgRmxvYXRQb2ludCB0YXJnZXRQb2ludDsKKyAgICB9
OworICAgIHZpcnR1YWwgT3B0aW9uYWw8TW92ZVRvU2VnbWVudD4gcGFyc2VNb3ZlVG9TZWdtZW50
KCkgPSAwOworCisgICAgc3RydWN0IExpbmVUb1NlZ21lbnQgeworICAgICAgICBGbG9hdFBvaW50
IHRhcmdldFBvaW50OworICAgIH07CisgICAgdmlydHVhbCBPcHRpb25hbDxMaW5lVG9TZWdtZW50
PiBwYXJzZUxpbmVUb1NlZ21lbnQoKSA9IDA7CisKKyAgICBzdHJ1Y3QgTGluZVRvSG9yaXpvbnRh
bFNlZ21lbnQgeworICAgICAgICBmbG9hdCB4OworICAgIH07CisgICAgdmlydHVhbCBPcHRpb25h
bDxMaW5lVG9Ib3Jpem9udGFsU2VnbWVudD4gcGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudCgp
ID0gMDsKKworICAgIHN0cnVjdCBMaW5lVG9WZXJ0aWNhbFNlZ21lbnQgeworICAgICAgICBmbG9h
dCB5OworICAgIH07CisgICAgdmlydHVhbCBPcHRpb25hbDxMaW5lVG9WZXJ0aWNhbFNlZ21lbnQ+
IHBhcnNlTGluZVRvVmVydGljYWxTZWdtZW50KCkgPSAwOworCisgICAgc3RydWN0IEN1cnZlVG9D
dWJpY1NlZ21lbnQgeworICAgICAgICBGbG9hdFBvaW50IHBvaW50MTsKKyAgICAgICAgRmxvYXRQ
b2ludCBwb2ludDI7CisgICAgICAgIEZsb2F0UG9pbnQgdGFyZ2V0UG9pbnQ7CisgICAgfTsKKyAg
ICB2aXJ0dWFsIE9wdGlvbmFsPEN1cnZlVG9DdWJpY1NlZ21lbnQ+IHBhcnNlQ3VydmVUb0N1Ymlj
U2VnbWVudCgpID0gMDsKKworICAgIHN0cnVjdCBDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50IHsK
KyAgICAgICAgRmxvYXRQb2ludCBwb2ludDI7CisgICAgICAgIEZsb2F0UG9pbnQgdGFyZ2V0UG9p
bnQ7CisgICAgfTsKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPEN1cnZlVG9DdWJpY1Ntb290aFNlZ21l
bnQ+IHBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudCgpID0gMDsKKworICAgIHN0cnVjdCBD
dXJ2ZVRvUXVhZHJhdGljU2VnbWVudCB7CisgICAgICAgIEZsb2F0UG9pbnQgcG9pbnQxOworICAg
ICAgICBGbG9hdFBvaW50IHRhcmdldFBvaW50OworICAgIH07CisgICAgdmlydHVhbCBPcHRpb25h
bDxDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudD4gcGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCgp
ID0gMDsKKworICAgIHN0cnVjdCBDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudCB7CisgICAg
ICAgIEZsb2F0UG9pbnQgdGFyZ2V0UG9pbnQ7CisgICAgfTsKKyAgICB2aXJ0dWFsIE9wdGlvbmFs
PEN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50PiBwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9v
dGhTZWdtZW50KCkgPSAwOworCisgICAgc3RydWN0IEFyY1RvU2VnbWVudCB7CisgICAgICAgIGZs
b2F0IHJ4OworICAgICAgICBmbG9hdCByeTsKKyAgICAgICAgZmxvYXQgYW5nbGU7CisgICAgICAg
IGJvb2wgbGFyZ2VBcmM7CisgICAgICAgIGJvb2wgc3dlZXA7CisgICAgICAgIEZsb2F0UG9pbnQg
dGFyZ2V0UG9pbnQ7CisgICAgfTsKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPEFyY1RvU2VnbWVudD4g
cGFyc2VBcmNUb1NlZ21lbnQoKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFN0cmluZ1NvdXJjZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTdHJpbmdTb3VyY2UuY3BwCShyZXZpc2lv
biAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFN0cmluZ1NvdXJjZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU1LDE5NSArNTUsMjgwIEBAIGJvb2wgU1ZHUGF0aFN0cmluZ1Nv
dXJjZTo6bW92ZVRvTmV4dFRva2UKICAgICByZXR1cm4gc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKG1f
Y3VycmVudC5tX2NoYXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2KTsKIH0KIAotdGVtcGxh
dGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgYm9vbCBwYXJzZVNWR1NlZ21lbnRU
eXBlSGVscGVyKGNvbnN0IENoYXJhY3RlclR5cGUqJiBjdXJyZW50LCBTVkdQYXRoU2VnVHlwZSYg
cGF0aFNlZ1R5cGUpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIE9w
dGlvbmFsPFNWR1BhdGhTZWdUeXBlPiBuZXh0Q29tbWFuZEhlbHBlcihjb25zdCBDaGFyYWN0ZXJU
eXBlKiYgY3VycmVudCwgU1ZHUGF0aFNlZ1R5cGUgcHJldmlvdXNDb21tYW5kKQoreworICAgIC8v
IENoZWNrIGZvciByZW1haW5pbmcgY29vcmRpbmF0ZXMgaW4gdGhlIGN1cnJlbnQgY29tbWFuZC4K
KyAgICBpZiAoKCpjdXJyZW50ID09ICcrJyB8fCAqY3VycmVudCA9PSAnLScgfHwgKmN1cnJlbnQg
PT0gJy4nIHx8IGlzQVNDSUlEaWdpdCgqY3VycmVudCkpCisgICAgICAgICYmIHByZXZpb3VzQ29t
bWFuZCAhPSBQYXRoU2VnQ2xvc2VQYXRoKSB7CisgICAgICAgIGlmIChwcmV2aW91c0NvbW1hbmQg
PT0gUGF0aFNlZ01vdmVUb0FicykKKyAgICAgICAgICAgIHJldHVybiBQYXRoU2VnTGluZVRvQWJz
OworICAgICAgICBpZiAocHJldmlvdXNDb21tYW5kID09IFBhdGhTZWdNb3ZlVG9SZWwpCisgICAg
ICAgICAgICByZXR1cm4gUGF0aFNlZ0xpbmVUb1JlbDsKKyAgICAgICAgcmV0dXJuIHByZXZpb3Vz
Q29tbWFuZDsKKyAgICB9CisKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCitTVkdQYXRo
U2VnVHlwZSBTVkdQYXRoU3RyaW5nU291cmNlOjpuZXh0Q29tbWFuZChTVkdQYXRoU2VnVHlwZSBw
cmV2aW91c0NvbW1hbmQpCit7CisgICAgaWYgKG1faXM4Qml0U291cmNlKSB7CisgICAgICAgIGlm
IChhdXRvIG5leHRDb21tYW5kID0gbmV4dENvbW1hbmRIZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFj
dGVyOCwgcHJldmlvdXNDb21tYW5kKSkKKyAgICAgICAgICAgIHJldHVybiAqbmV4dENvbW1hbmQ7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGF1dG8gbmV4dENvbW1hbmQgPSBuZXh0Q29tbWFu
ZEhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXIxNiwgcHJldmlvdXNDb21tYW5kKSkKKyAgICAg
ICAgICAgIHJldHVybiAqbmV4dENvbW1hbmQ7CisgICAgfQorCisgICAgcmV0dXJuICpwYXJzZVNW
R1NlZ21lbnRUeXBlKCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBz
dGF0aWMgU1ZHUGF0aFNlZ1R5cGUgcGFyc2VTVkdTZWdtZW50VHlwZUhlbHBlcihjb25zdCBDaGFy
YWN0ZXJUeXBlKiYgY3VycmVudCkKIHsKICAgICBzd2l0Y2ggKCooY3VycmVudCsrKSkgewogICAg
IGNhc2UgJ1onOgogICAgIGNhc2UgJ3onOgotICAgICAgICBwYXRoU2VnVHlwZSA9IFBhdGhTZWdD
bG9zZVBhdGg7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gUGF0aFNlZ0Nsb3NlUGF0
aDsKICAgICBjYXNlICdNJzoKLSAgICAgICAgcGF0aFNlZ1R5cGUgPSBQYXRoU2VnTW92ZVRvQWJz
OwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIFBhdGhTZWdNb3ZlVG9BYnM7CiAgICAg
Y2FzZSAnbSc6Ci0gICAgICAgIHBhdGhTZWdUeXBlID0gUGF0aFNlZ01vdmVUb1JlbDsKLSAgICAg
ICAgYnJlYWs7CisgICAgICAgIHJldHVybiBQYXRoU2VnTW92ZVRvUmVsOwogICAgIGNhc2UgJ0wn
OgotICAgICAgICBwYXRoU2VnVHlwZSA9IFBhdGhTZWdMaW5lVG9BYnM7Ci0gICAgICAgIGJyZWFr
OworICAgICAgICByZXR1cm4gUGF0aFNlZ0xpbmVUb0FiczsKICAgICBjYXNlICdsJzoKLSAgICAg
ICAgcGF0aFNlZ1R5cGUgPSBQYXRoU2VnTGluZVRvUmVsOwotICAgICAgICBicmVhazsKKyAgICAg
ICAgcmV0dXJuIFBhdGhTZWdMaW5lVG9SZWw7CiAgICAgY2FzZSAnQyc6Ci0gICAgICAgIHBhdGhT
ZWdUeXBlID0gUGF0aFNlZ0N1cnZlVG9DdWJpY0FiczsKLSAgICAgICAgYnJlYWs7CisgICAgICAg
IHJldHVybiBQYXRoU2VnQ3VydmVUb0N1YmljQWJzOwogICAgIGNhc2UgJ2MnOgotICAgICAgICBw
YXRoU2VnVHlwZSA9IFBhdGhTZWdDdXJ2ZVRvQ3ViaWNSZWw7Ci0gICAgICAgIGJyZWFrOworICAg
ICAgICByZXR1cm4gUGF0aFNlZ0N1cnZlVG9DdWJpY1JlbDsKICAgICBjYXNlICdRJzoKLSAgICAg
ICAgcGF0aFNlZ1R5cGUgPSBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY0FiczsKLSAgICAgICAgYnJl
YWs7CisgICAgICAgIHJldHVybiBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY0FiczsKICAgICBjYXNl
ICdxJzoKLSAgICAgICAgcGF0aFNlZ1R5cGUgPSBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY1JlbDsK
LSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY1Jl
bDsKICAgICBjYXNlICdBJzoKLSAgICAgICAgcGF0aFNlZ1R5cGUgPSBQYXRoU2VnQXJjQWJzOwot
ICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIFBhdGhTZWdBcmNBYnM7CiAgICAgY2FzZSAn
YSc6Ci0gICAgICAgIHBhdGhTZWdUeXBlID0gUGF0aFNlZ0FyY1JlbDsKLSAgICAgICAgYnJlYWs7
CisgICAgICAgIHJldHVybiBQYXRoU2VnQXJjUmVsOwogICAgIGNhc2UgJ0gnOgotICAgICAgICBw
YXRoU2VnVHlwZSA9IFBhdGhTZWdMaW5lVG9Ib3Jpem9udGFsQWJzOwotICAgICAgICBicmVhazsK
KyAgICAgICAgcmV0dXJuIFBhdGhTZWdMaW5lVG9Ib3Jpem9udGFsQWJzOwogICAgIGNhc2UgJ2gn
OgotICAgICAgICBwYXRoU2VnVHlwZSA9IFBhdGhTZWdMaW5lVG9Ib3Jpem9udGFsUmVsOwotICAg
ICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIFBhdGhTZWdMaW5lVG9Ib3Jpem9udGFsUmVsOwog
ICAgIGNhc2UgJ1YnOgotICAgICAgICBwYXRoU2VnVHlwZSA9IFBhdGhTZWdMaW5lVG9WZXJ0aWNh
bEFiczsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBQYXRoU2VnTGluZVRvVmVydGlj
YWxBYnM7CiAgICAgY2FzZSAndic6Ci0gICAgICAgIHBhdGhTZWdUeXBlID0gUGF0aFNlZ0xpbmVU
b1ZlcnRpY2FsUmVsOwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIFBhdGhTZWdMaW5l
VG9WZXJ0aWNhbFJlbDsKICAgICBjYXNlICdTJzoKLSAgICAgICAgcGF0aFNlZ1R5cGUgPSBQYXRo
U2VnQ3VydmVUb0N1YmljU21vb3RoQWJzOwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJu
IFBhdGhTZWdDdXJ2ZVRvQ3ViaWNTbW9vdGhBYnM7CiAgICAgY2FzZSAncyc6Ci0gICAgICAgIHBh
dGhTZWdUeXBlID0gUGF0aFNlZ0N1cnZlVG9DdWJpY1Ntb290aFJlbDsKLSAgICAgICAgYnJlYWs7
CisgICAgICAgIHJldHVybiBQYXRoU2VnQ3VydmVUb0N1YmljU21vb3RoUmVsOwogICAgIGNhc2Ug
J1QnOgotICAgICAgICBwYXRoU2VnVHlwZSA9IFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljU21vb3Ro
QWJzOwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIFBhdGhTZWdDdXJ2ZVRvUXVhZHJh
dGljU21vb3RoQWJzOwogICAgIGNhc2UgJ3QnOgotICAgICAgICBwYXRoU2VnVHlwZSA9IFBhdGhT
ZWdDdXJ2ZVRvUXVhZHJhdGljU21vb3RoUmVsOwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0
dXJuIFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljU21vb3RoUmVsOwogICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIHBhdGhTZWdUeXBlID0gUGF0aFNlZ1Vua25vd247CisgICAgICAgIHJldHVybiBQYXRoU2Vn
VW5rbm93bjsKICAgICB9Ci0gICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgU1ZHUGF0aFN0cmlu
Z1NvdXJjZTo6cGFyc2VTVkdTZWdtZW50VHlwZShTVkdQYXRoU2VnVHlwZSYgcGF0aFNlZ1R5cGUp
CitPcHRpb25hbDxTVkdQYXRoU2VnVHlwZT4gU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VTVkdT
ZWdtZW50VHlwZSgpCiB7CiAgICAgaWYgKG1faXM4Qml0U291cmNlKQotICAgICAgICByZXR1cm4g
cGFyc2VTVkdTZWdtZW50VHlwZUhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXI4LCBwYXRoU2Vn
VHlwZSk7Ci0gICAgcmV0dXJuIHBhcnNlU1ZHU2VnbWVudFR5cGVIZWxwZXIobV9jdXJyZW50Lm1f
Y2hhcmFjdGVyMTYsIHBhdGhTZWdUeXBlKTsKKyAgICAgICAgcmV0dXJuIHBhcnNlU1ZHU2VnbWVu
dFR5cGVIZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyOCk7CisgICAgcmV0dXJuIHBhcnNlU1ZH
U2VnbWVudFR5cGVIZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYpOwogfQogCi10ZW1wbGF0
ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBib29sIG5leHRDb21tYW5kSGVscGVy
KGNvbnN0IENoYXJhY3RlclR5cGUqJiBjdXJyZW50LCBTVkdQYXRoU2VnVHlwZSBwcmV2aW91c0Nv
bW1hbmQsIFNWR1BhdGhTZWdUeXBlJiBuZXh0Q29tbWFuZCkKK09wdGlvbmFsPFNWR1BhdGhTb3Vy
Y2U6Ok1vdmVUb1NlZ21lbnQ+IFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlTW92ZVRvU2VnbWVu
dCgpCiB7Ci0gICAgLy8gQ2hlY2sgZm9yIHJlbWFpbmluZyBjb29yZGluYXRlcyBpbiB0aGUgY3Vy
cmVudCBjb21tYW5kLgotICAgIGlmICgoKmN1cnJlbnQgPT0gJysnIHx8ICpjdXJyZW50ID09ICct
JyB8fCAqY3VycmVudCA9PSAnLicgfHwgaXNBU0NJSURpZ2l0KCpjdXJyZW50KSkKLSAgICAgICAg
JiYgcHJldmlvdXNDb21tYW5kICE9IFBhdGhTZWdDbG9zZVBhdGgpIHsKLSAgICAgICAgaWYgKHBy
ZXZpb3VzQ29tbWFuZCA9PSBQYXRoU2VnTW92ZVRvQWJzKSB7Ci0gICAgICAgICAgICBuZXh0Q29t
bWFuZCA9IFBhdGhTZWdMaW5lVG9BYnM7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgfQotICAgICAgICBpZiAocHJldmlvdXNDb21tYW5kID09IFBhdGhTZWdNb3ZlVG9SZWwpIHsK
LSAgICAgICAgICAgIG5leHRDb21tYW5kID0gUGF0aFNlZ0xpbmVUb1JlbDsKLSAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIG5leHRDb21tYW5kID0gcHJldmlvdXND
b21tYW5kOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9CisgICAgYXV0byBoZWxwZXIgPSBb
XShjb25zdCBhdXRvKiYgY3VycmVudCwgY29uc3QgYXV0byogZW5kKSAtPiBPcHRpb25hbDxNb3Zl
VG9TZWdtZW50PiB7CisgICAgICAgIGF1dG8gdGFyZ2V0UG9pbnQgPSBwYXJzZUZsb2F0UG9pbnQo
Y3VycmVudCwgZW5kKTsKKyAgICAgICAgaWYgKCF0YXJnZXRQb2ludCkKKyAgICAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIAorICAgICAgICBNb3ZlVG9TZWdtZW50IHNlZ21l
bnQ7CisgICAgICAgIHNlZ21lbnQudGFyZ2V0UG9pbnQgPSBXVEZNb3ZlKCp0YXJnZXRQb2ludCk7
CisgICAgICAgIHJldHVybiBzZWdtZW50OworICAgIH07CiAKLSAgICByZXR1cm4gZmFsc2U7Cisg
ICAgaWYgKG1faXM4Qml0U291cmNlKQorICAgICAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5t
X2NoYXJhY3RlcjgsIG1fZW5kLm1fY2hhcmFjdGVyOCk7CisgICAgcmV0dXJuIGhlbHBlcihtX2N1
cnJlbnQubV9jaGFyYWN0ZXIxNiwgbV9lbmQubV9jaGFyYWN0ZXIxNik7CiB9CiAKLVNWR1BhdGhT
ZWdUeXBlIFNWR1BhdGhTdHJpbmdTb3VyY2U6Om5leHRDb21tYW5kKFNWR1BhdGhTZWdUeXBlIHBy
ZXZpb3VzQ29tbWFuZCkKK09wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkxpbmVUb1NlZ21lbnQ+IFNW
R1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlTGluZVRvU2VnbWVudCgpCiB7Ci0gICAgU1ZHUGF0aFNl
Z1R5cGUgbmV4dENvbW1hbmQ7Ci0gICAgaWYgKG1faXM4Qml0U291cmNlKSB7Ci0gICAgICAgIGlm
IChuZXh0Q29tbWFuZEhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXI4LCBwcmV2aW91c0NvbW1h
bmQsIG5leHRDb21tYW5kKSkKLSAgICAgICAgICAgIHJldHVybiBuZXh0Q29tbWFuZDsKLSAgICB9
IGVsc2UgewotICAgICAgICBpZiAobmV4dENvbW1hbmRIZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFj
dGVyMTYsIHByZXZpb3VzQ29tbWFuZCwgbmV4dENvbW1hbmQpKQotICAgICAgICAgICAgcmV0dXJu
IG5leHRDb21tYW5kOwotICAgIH0KKyAgICBhdXRvIGhlbHBlciA9IFtdKGNvbnN0IGF1dG8qJiBj
dXJyZW50LCBjb25zdCBhdXRvKiBlbmQpIC0+IE9wdGlvbmFsPExpbmVUb1NlZ21lbnQ+IHsKKyAg
ICAgICAgYXV0byB0YXJnZXRQb2ludCA9IHBhcnNlRmxvYXRQb2ludChjdXJyZW50LCBlbmQpOwor
ICAgICAgICBpZiAoIXRhcmdldFBvaW50KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKyAgICAgICAgCisgICAgICAgIExpbmVUb1NlZ21lbnQgc2VnbWVudDsKKyAgICAgICAgc2Vn
bWVudC50YXJnZXRQb2ludCA9IFdURk1vdmUoKnRhcmdldFBvaW50KTsKKyAgICAgICAgcmV0dXJu
IHNlZ21lbnQ7CisgICAgfTsKIAotICAgIHBhcnNlU1ZHU2VnbWVudFR5cGUobmV4dENvbW1hbmQp
OwotICAgIHJldHVybiBuZXh0Q29tbWFuZDsKLX0KLQotYm9vbCBTVkdQYXRoU3RyaW5nU291cmNl
OjpwYXJzZU1vdmVUb1NlZ21lbnQoRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCi17CiAgICAgaWYg
KG1faXM4Qml0U291cmNlKQotICAgICAgICByZXR1cm4gcGFyc2VGbG9hdFBvaW50KG1fY3VycmVu
dC5tX2NoYXJhY3RlcjgsIG1fZW5kLm1fY2hhcmFjdGVyOCwgdGFyZ2V0UG9pbnQpOwotICAgIHJl
dHVybiBwYXJzZUZsb2F0UG9pbnQobV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYsIG1fZW5kLm1fY2hh
cmFjdGVyMTYsIHRhcmdldFBvaW50KTsKKyAgICAgICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQu
bV9jaGFyYWN0ZXI4LCBtX2VuZC5tX2NoYXJhY3RlcjgpOworICAgIHJldHVybiBoZWxwZXIobV9j
dXJyZW50Lm1fY2hhcmFjdGVyMTYsIG1fZW5kLm1fY2hhcmFjdGVyMTYpOwogfQogCi1ib29sIFNW
R1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlTGluZVRvU2VnbWVudChGbG9hdFBvaW50JiB0YXJnZXRQ
b2ludCkKK09wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkxpbmVUb0hvcml6b250YWxTZWdtZW50PiBT
VkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUxpbmVUb0hvcml6b250YWxTZWdtZW50KCkKIHsKLSAg
ICBpZiAobV9pczhCaXRTb3VyY2UpCi0gICAgICAgIHJldHVybiBwYXJzZUZsb2F0UG9pbnQobV9j
dXJyZW50Lm1fY2hhcmFjdGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4LCB0YXJnZXRQb2ludCk7Ci0g
ICAgcmV0dXJuIHBhcnNlRmxvYXRQb2ludChtX2N1cnJlbnQubV9jaGFyYWN0ZXIxNiwgbV9lbmQu
bV9jaGFyYWN0ZXIxNiwgdGFyZ2V0UG9pbnQpOwotfQorICAgIGF1dG8gaGVscGVyID0gW10oY29u
c3QgYXV0byomIGN1cnJlbnQsIGNvbnN0IGF1dG8qIGVuZCkgLT4gT3B0aW9uYWw8TGluZVRvSG9y
aXpvbnRhbFNlZ21lbnQ+IHsKKyAgICAgICAgYXV0byB4ID0gcGFyc2VOdW1iZXIoY3VycmVudCwg
ZW5kKTsKKyAgICAgICAgaWYgKCF4KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
KyAgICAgICAgCisgICAgICAgIExpbmVUb0hvcml6b250YWxTZWdtZW50IHNlZ21lbnQ7CisgICAg
ICAgIHNlZ21lbnQueCA9ICp4OworICAgICAgICByZXR1cm4gc2VnbWVudDsKKyAgICB9OwogCi1i
b29sIFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQoZmxv
YXQmIHgpCi17CiAgICAgaWYgKG1faXM4Qml0U291cmNlKQotICAgICAgICByZXR1cm4gcGFyc2VO
dW1iZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4LCB4KTsKLSAg
ICByZXR1cm4gcGFyc2VOdW1iZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYsIG1fZW5kLm1fY2hh
cmFjdGVyMTYsIHgpOworICAgICAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3Rl
cjgsIG1fZW5kLm1fY2hhcmFjdGVyOCk7CisgICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9j
aGFyYWN0ZXIxNiwgbV9lbmQubV9jaGFyYWN0ZXIxNik7CiB9CiAKLWJvb2wgU1ZHUGF0aFN0cmlu
Z1NvdXJjZTo6cGFyc2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnQoZmxvYXQmIHkpCitPcHRpb25hbDxT
VkdQYXRoU291cmNlOjpMaW5lVG9WZXJ0aWNhbFNlZ21lbnQ+IFNWR1BhdGhTdHJpbmdTb3VyY2U6
OnBhcnNlTGluZVRvVmVydGljYWxTZWdtZW50KCkKIHsKKyAgICBhdXRvIGhlbHBlciA9IFtdKGNv
bnN0IGF1dG8qJiBjdXJyZW50LCBjb25zdCBhdXRvKiBlbmQpIC0+IE9wdGlvbmFsPExpbmVUb1Zl
cnRpY2FsU2VnbWVudD4geworICAgICAgICBhdXRvIHkgPSBwYXJzZU51bWJlcihjdXJyZW50LCBl
bmQpOworICAgICAgICBpZiAoIXkpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
ICAgICAgICAKKyAgICAgICAgTGluZVRvVmVydGljYWxTZWdtZW50IHNlZ21lbnQ7CisgICAgICAg
IHNlZ21lbnQueSA9ICp5OworICAgICAgICByZXR1cm4gc2VnbWVudDsKKyAgICB9OworCiAgICAg
aWYgKG1faXM4Qml0U291cmNlKQotICAgICAgICByZXR1cm4gcGFyc2VOdW1iZXIobV9jdXJyZW50
Lm1fY2hhcmFjdGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4LCB5KTsKLSAgICByZXR1cm4gcGFyc2VO
dW1iZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYsIG1fZW5kLm1fY2hhcmFjdGVyMTYsIHkpOwor
ICAgICAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjgsIG1fZW5kLm1fY2hh
cmFjdGVyOCk7CisgICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXIxNiwgbV9l
bmQubV9jaGFyYWN0ZXIxNik7CiB9CiAKLWJvb2wgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VD
dXJ2ZVRvQ3ViaWNTZWdtZW50KEZsb2F0UG9pbnQmIHBvaW50MSwgRmxvYXRQb2ludCYgcG9pbnQy
LCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCkKK09wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkN1cnZl
VG9DdWJpY1NlZ21lbnQ+IFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlQ3VydmVUb0N1YmljU2Vn
bWVudCgpCiB7CisgICAgYXV0byBoZWxwZXIgPSBbXShjb25zdCBhdXRvKiYgY3VycmVudCwgY29u
c3QgYXV0byogZW5kKSAtPiBPcHRpb25hbDxDdXJ2ZVRvQ3ViaWNTZWdtZW50PiB7CisgICAgICAg
IGF1dG8gcG9pbnQxID0gcGFyc2VGbG9hdFBvaW50KGN1cnJlbnQsIGVuZCk7CisgICAgICAgIGlm
ICghcG9pbnQxKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgICAgICBh
dXRvIHBvaW50MiA9IHBhcnNlRmxvYXRQb2ludChjdXJyZW50LCBlbmQpOworICAgICAgICBpZiAo
IXBvaW50MikKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICAgICAgYXV0
byB0YXJnZXRQb2ludCA9IHBhcnNlRmxvYXRQb2ludChjdXJyZW50LCBlbmQpOworICAgICAgICBp
ZiAoIXRhcmdldFBvaW50KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAg
ICAgICBDdXJ2ZVRvQ3ViaWNTZWdtZW50IHNlZ21lbnQ7CisgICAgICAgIHNlZ21lbnQucG9pbnQx
ID0gKnBvaW50MTsKKyAgICAgICAgc2VnbWVudC5wb2ludDIgPSAqcG9pbnQyOworICAgICAgICBz
ZWdtZW50LnRhcmdldFBvaW50ID0gKnRhcmdldFBvaW50OworICAgICAgICByZXR1cm4gc2VnbWVu
dDsKKyAgICB9OworCiAgICAgaWYgKG1faXM4Qml0U291cmNlKQotICAgICAgICByZXR1cm4gcGFy
c2VGbG9hdFBvaW50MyhtX2N1cnJlbnQubV9jaGFyYWN0ZXI4LCBtX2VuZC5tX2NoYXJhY3Rlcjgs
IHBvaW50MSwgcG9pbnQyLCB0YXJnZXRQb2ludCk7Ci0gICAgcmV0dXJuIHBhcnNlRmxvYXRQb2lu
dDMobV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYsIG1fZW5kLm1fY2hhcmFjdGVyMTYsIHBvaW50MSwg
cG9pbnQyLCB0YXJnZXRQb2ludCk7CisgICAgICAgIHJldHVybiBoZWxwZXIobV9jdXJyZW50Lm1f
Y2hhcmFjdGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4KTsKKyAgICByZXR1cm4gaGVscGVyKG1fY3Vy
cmVudC5tX2NoYXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2KTsKIH0KIAotYm9vbCBTVkdQ
YXRoU3RyaW5nU291cmNlOjpwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQoRmxvYXRQb2lu
dCYgcG9pbnQxLCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCkKK09wdGlvbmFsPFNWR1BhdGhTb3Vy
Y2U6OkN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQ+IFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNl
Q3VydmVUb0N1YmljU21vb3RoU2VnbWVudCgpCiB7CisgICAgYXV0byBoZWxwZXIgPSBbXShjb25z
dCBhdXRvKiYgY3VycmVudCwgY29uc3QgYXV0byogZW5kKSAtPiBPcHRpb25hbDxDdXJ2ZVRvQ3Vi
aWNTbW9vdGhTZWdtZW50PiB7CisgICAgICAgIGF1dG8gcG9pbnQyID0gcGFyc2VGbG9hdFBvaW50
KGN1cnJlbnQsIGVuZCk7CisgICAgICAgIGlmICghcG9pbnQyKQorICAgICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKworICAgICAgICBhdXRvIHRhcmdldFBvaW50ID0gcGFyc2VGbG9hdFBv
aW50KGN1cnJlbnQsIGVuZCk7CisgICAgICAgIGlmICghdGFyZ2V0UG9pbnQpCisgICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgICAgIEN1cnZlVG9DdWJpY1Ntb290aFNlZ21l
bnQgc2VnbWVudDsKKyAgICAgICAgc2VnbWVudC5wb2ludDIgPSAqcG9pbnQyOworICAgICAgICBz
ZWdtZW50LnRhcmdldFBvaW50ID0gKnRhcmdldFBvaW50OworICAgICAgICByZXR1cm4gc2VnbWVu
dDsKKyAgICB9OworCiAgICAgaWYgKG1faXM4Qml0U291cmNlKQotICAgICAgICByZXR1cm4gcGFy
c2VGbG9hdFBvaW50MihtX2N1cnJlbnQubV9jaGFyYWN0ZXI4LCBtX2VuZC5tX2NoYXJhY3Rlcjgs
IHBvaW50MSwgdGFyZ2V0UG9pbnQpOwotICAgIHJldHVybiBwYXJzZUZsb2F0UG9pbnQyKG1fY3Vy
cmVudC5tX2NoYXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2LCBwb2ludDEsIHRhcmdldFBv
aW50KTsKKyAgICAgICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXI4LCBtX2Vu
ZC5tX2NoYXJhY3RlcjgpOworICAgIHJldHVybiBoZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVy
MTYsIG1fZW5kLm1fY2hhcmFjdGVyMTYpOwogfQogCi1ib29sIFNWR1BhdGhTdHJpbmdTb3VyY2U6
OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQoRmxvYXRQb2ludCYgcG9pbnQyLCBGbG9hdFBv
aW50JiB0YXJnZXRQb2ludCkKK09wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkN1cnZlVG9RdWFkcmF0
aWNTZWdtZW50PiBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdt
ZW50KCkKIHsKKyAgICBhdXRvIGhlbHBlciA9IFtdKGNvbnN0IGF1dG8qJiBjdXJyZW50LCBjb25z
dCBhdXRvKiBlbmQpIC0+IE9wdGlvbmFsPEN1cnZlVG9RdWFkcmF0aWNTZWdtZW50PiB7CisgICAg
ICAgIGF1dG8gcG9pbnQxID0gcGFyc2VGbG9hdFBvaW50KGN1cnJlbnQsIGVuZCk7CisgICAgICAg
IGlmICghcG9pbnQxKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgICAg
ICBhdXRvIHRhcmdldFBvaW50ID0gcGFyc2VGbG9hdFBvaW50KGN1cnJlbnQsIGVuZCk7CisgICAg
ICAgIGlmICghdGFyZ2V0UG9pbnQpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
CisgICAgICAgIEN1cnZlVG9RdWFkcmF0aWNTZWdtZW50IHNlZ21lbnQ7CisgICAgICAgIHNlZ21l
bnQucG9pbnQxID0gKnBvaW50MTsKKyAgICAgICAgc2VnbWVudC50YXJnZXRQb2ludCA9ICp0YXJn
ZXRQb2ludDsKKyAgICAgICAgcmV0dXJuIHNlZ21lbnQ7CisgICAgfTsKKwogICAgIGlmIChtX2lz
OEJpdFNvdXJjZSkKLSAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXRQb2ludDIobV9jdXJyZW50Lm1f
Y2hhcmFjdGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4LCBwb2ludDIsIHRhcmdldFBvaW50KTsKLSAg
ICByZXR1cm4gcGFyc2VGbG9hdFBvaW50MihtX2N1cnJlbnQubV9jaGFyYWN0ZXIxNiwgbV9lbmQu
bV9jaGFyYWN0ZXIxNiwgcG9pbnQyLCB0YXJnZXRQb2ludCk7CisgICAgICAgIHJldHVybiBoZWxw
ZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4KTsKKyAgICByZXR1
cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2KTsK
IH0KIAotYm9vbCBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9v
dGhTZWdtZW50KEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQorT3B0aW9uYWw8U1ZHUGF0aFNvdXJj
ZTo6Q3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQ+IFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBh
cnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQoKQogeworICAgIGF1dG8gaGVscGVyID0g
W10oY29uc3QgYXV0byomIGN1cnJlbnQsIGNvbnN0IGF1dG8qIGVuZCkgLT4gT3B0aW9uYWw8Q3Vy
dmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQ+IHsKKyAgICAgICAgYXV0byB0YXJnZXRQb2ludCA9
IHBhcnNlRmxvYXRQb2ludChjdXJyZW50LCBlbmQpOworICAgICAgICBpZiAoIXRhcmdldFBvaW50
KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgICAgICBDdXJ2ZVRvUXVh
ZHJhdGljU21vb3RoU2VnbWVudCBzZWdtZW50OworICAgICAgICBzZWdtZW50LnRhcmdldFBvaW50
ID0gKnRhcmdldFBvaW50OworICAgICAgICByZXR1cm4gc2VnbWVudDsKKyAgICB9OworCiAgICAg
aWYgKG1faXM4Qml0U291cmNlKQotICAgICAgICByZXR1cm4gcGFyc2VGbG9hdFBvaW50KG1fY3Vy
cmVudC5tX2NoYXJhY3RlcjgsIG1fZW5kLm1fY2hhcmFjdGVyOCwgdGFyZ2V0UG9pbnQpOwotICAg
IHJldHVybiBwYXJzZUZsb2F0UG9pbnQobV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYsIG1fZW5kLm1f
Y2hhcmFjdGVyMTYsIHRhcmdldFBvaW50KTsKKyAgICAgICAgcmV0dXJuIGhlbHBlcihtX2N1cnJl
bnQubV9jaGFyYWN0ZXI4LCBtX2VuZC5tX2NoYXJhY3RlcjgpOworICAgIHJldHVybiBoZWxwZXIo
bV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYsIG1fZW5kLm1fY2hhcmFjdGVyMTYpOwogfQogCi10ZW1w
bGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBib29sIHBhcnNlQXJjVG9TZWdt
ZW50SGVscGVyKGNvbnN0IENoYXJhY3RlclR5cGUqJiBjdXJyZW50LCBjb25zdCBDaGFyYWN0ZXJU
eXBlKiBlbmQsIGZsb2F0JiByeCwgZmxvYXQmIHJ5LCBmbG9hdCYgYW5nbGUsIGJvb2wmIGxhcmdl
QXJjLCBib29sJiBzd2VlcCwgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCitPcHRpb25hbDxTVkdQ
YXRoU291cmNlOjpBcmNUb1NlZ21lbnQ+IFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlQXJjVG9T
ZWdtZW50KCkKIHsKLSAgICBmbG9hdCB0b1g7Ci0gICAgZmxvYXQgdG9ZOwotICAgIGlmICghcGFy
c2VOdW1iZXIoY3VycmVudCwgZW5kLCByeCkKLSAgICAgICAgfHwgIXBhcnNlTnVtYmVyKGN1cnJl
bnQsIGVuZCwgcnkpCi0gICAgICAgIHx8ICFwYXJzZU51bWJlcihjdXJyZW50LCBlbmQsIGFuZ2xl
KQotICAgICAgICB8fCAhcGFyc2VBcmNGbGFnKGN1cnJlbnQsIGVuZCwgbGFyZ2VBcmMpCi0gICAg
ICAgIHx8ICFwYXJzZUFyY0ZsYWcoY3VycmVudCwgZW5kLCBzd2VlcCkKLSAgICAgICAgfHwgIXBh
cnNlTnVtYmVyKGN1cnJlbnQsIGVuZCwgdG9YKQotICAgICAgICB8fCAhcGFyc2VOdW1iZXIoY3Vy
cmVudCwgZW5kLCB0b1kpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgdGFyZ2V0UG9pbnQg
PSBGbG9hdFBvaW50KHRvWCwgdG9ZKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KKyAgICBhdXRvIGhl
bHBlciA9IFtdKGNvbnN0IGF1dG8qJiBjdXJyZW50LCBjb25zdCBhdXRvKiBlbmQpIC0+IE9wdGlv
bmFsPEFyY1RvU2VnbWVudD4KKyAgICB7CisgICAgICAgIGF1dG8gcnggPSBwYXJzZU51bWJlcihj
dXJyZW50LCBlbmQpOworICAgICAgICBpZiAoIXJ4KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKKyAgICAgICAgYXV0byByeSA9IHBhcnNlTnVtYmVyKGN1cnJlbnQsIGVuZCk7Cisg
ICAgICAgIGlmICghcnkpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAg
ICBhdXRvIGFuZ2xlID0gcGFyc2VOdW1iZXIoY3VycmVudCwgZW5kKTsKKyAgICAgICAgaWYgKCFh
bmdsZSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIGF1dG8gbGFy
Z2VBcmMgPSBwYXJzZUFyY0ZsYWcoY3VycmVudCwgZW5kKTsKKyAgICAgICAgaWYgKCFsYXJnZUFy
YykKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIGF1dG8gc3dlZXAg
PSBwYXJzZUFyY0ZsYWcoY3VycmVudCwgZW5kKTsKKyAgICAgICAgaWYgKCFzd2VlcCkKKyAgICAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIGF1dG8gdGFyZ2V0UG9pbnQgPSBw
YXJzZUZsb2F0UG9pbnQoY3VycmVudCwgZW5kKTsKKyAgICAgICAgaWYgKCF0YXJnZXRQb2ludCkK
KyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICAgICAgQXJjVG9TZWdtZW50
IHNlZ21lbnQ7CisgICAgICAgIHNlZ21lbnQucnggPSAqcng7CisgICAgICAgIHNlZ21lbnQucnkg
PSAqcnk7CisgICAgICAgIHNlZ21lbnQuYW5nbGUgPSAqYW5nbGU7CisgICAgICAgIHNlZ21lbnQu
bGFyZ2VBcmMgPSAqbGFyZ2VBcmM7CisgICAgICAgIHNlZ21lbnQuc3dlZXAgPSAqc3dlZXA7Cisg
ICAgICAgIHNlZ21lbnQudGFyZ2V0UG9pbnQgPSAqdGFyZ2V0UG9pbnQ7CisgICAgICAgIHJldHVy
biBzZWdtZW50OworICAgIH07CiAKLWJvb2wgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VBcmNU
b1NlZ21lbnQoZmxvYXQmIHJ4LCBmbG9hdCYgcnksIGZsb2F0JiBhbmdsZSwgYm9vbCYgbGFyZ2VB
cmMsIGJvb2wmIHN3ZWVwLCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCkKLXsKICAgICBpZiAobV9p
czhCaXRTb3VyY2UpCi0gICAgICAgIHJldHVybiBwYXJzZUFyY1RvU2VnbWVudEhlbHBlcihtX2N1
cnJlbnQubV9jaGFyYWN0ZXI4LCBtX2VuZC5tX2NoYXJhY3RlcjgsIHJ4LCByeSwgYW5nbGUsIGxh
cmdlQXJjLCBzd2VlcCwgdGFyZ2V0UG9pbnQpOwotICAgIHJldHVybiBwYXJzZUFyY1RvU2VnbWVu
dEhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXIxNiwgbV9lbmQubV9jaGFyYWN0ZXIxNiwgcngs
IHJ5LCBhbmdsZSwgbGFyZ2VBcmMsIHN3ZWVwLCB0YXJnZXRQb2ludCk7CisgICAgICAgIHJldHVy
biBoZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4KTsKKyAg
ICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3Rl
cjE2KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHUGF0aFN0cmluZ1NvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdQYXRoU3RyaW5nU291cmNlLmgJKHJldmlzaW9uIDI2MzE3NikKKysrIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdQYXRoU3RyaW5nU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDE4ICsz
MiwxOCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGJvb2wgaGFzTW9yZURhdGEoKSBjb25zdCBm
aW5hbDsKICAgICBib29sIG1vdmVUb05leHRUb2tlbigpIGZpbmFsOwotICAgIGJvb2wgcGFyc2VT
VkdTZWdtZW50VHlwZShTVkdQYXRoU2VnVHlwZSYpIGZpbmFsOwogICAgIFNWR1BhdGhTZWdUeXBl
IG5leHRDb21tYW5kKFNWR1BhdGhTZWdUeXBlIHByZXZpb3VzQ29tbWFuZCkgZmluYWw7CiAKLSAg
ICBib29sIHBhcnNlTW92ZVRvU2VnbWVudChGbG9hdFBvaW50JikgZmluYWw7Ci0gICAgYm9vbCBw
YXJzZUxpbmVUb1NlZ21lbnQoRmxvYXRQb2ludCYpIGZpbmFsOwotICAgIGJvb2wgcGFyc2VMaW5l
VG9Ib3Jpem9udGFsU2VnbWVudChmbG9hdCYpIGZpbmFsOwotICAgIGJvb2wgcGFyc2VMaW5lVG9W
ZXJ0aWNhbFNlZ21lbnQoZmxvYXQmKSBmaW5hbDsKLSAgICBib29sIHBhcnNlQ3VydmVUb0N1Ymlj
U2VnbWVudChGbG9hdFBvaW50JiwgRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmKSBmaW5hbDsKLSAg
ICBib29sIHBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudChGbG9hdFBvaW50JiwgRmxvYXRQ
b2ludCYpIGZpbmFsOwotICAgIGJvb2wgcGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudChGbG9h
dFBvaW50JiwgRmxvYXRQb2ludCYpIGZpbmFsOwotICAgIGJvb2wgcGFyc2VDdXJ2ZVRvUXVhZHJh
dGljU21vb3RoU2VnbWVudChGbG9hdFBvaW50JikgZmluYWw7Ci0gICAgYm9vbCBwYXJzZUFyY1Rv
U2VnbWVudChmbG9hdCYsIGZsb2F0JiwgZmxvYXQmLCBib29sJiwgYm9vbCYsIEZsb2F0UG9pbnQm
KSBmaW5hbDsKKyAgICBPcHRpb25hbDxTVkdQYXRoU2VnVHlwZT4gcGFyc2VTVkdTZWdtZW50VHlw
ZSgpIGZpbmFsOworICAgIE9wdGlvbmFsPE1vdmVUb1NlZ21lbnQ+IHBhcnNlTW92ZVRvU2VnbWVu
dCgpIGZpbmFsOworICAgIE9wdGlvbmFsPExpbmVUb1NlZ21lbnQ+IHBhcnNlTGluZVRvU2VnbWVu
dCgpIGZpbmFsOworICAgIE9wdGlvbmFsPExpbmVUb0hvcml6b250YWxTZWdtZW50PiBwYXJzZUxp
bmVUb0hvcml6b250YWxTZWdtZW50KCkgZmluYWw7CisgICAgT3B0aW9uYWw8TGluZVRvVmVydGlj
YWxTZWdtZW50PiBwYXJzZUxpbmVUb1ZlcnRpY2FsU2VnbWVudCgpIGZpbmFsOworICAgIE9wdGlv
bmFsPEN1cnZlVG9DdWJpY1NlZ21lbnQ+IHBhcnNlQ3VydmVUb0N1YmljU2VnbWVudCgpIGZpbmFs
OworICAgIE9wdGlvbmFsPEN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQ+IHBhcnNlQ3VydmVUb0N1
YmljU21vb3RoU2VnbWVudCgpIGZpbmFsOworICAgIE9wdGlvbmFsPEN1cnZlVG9RdWFkcmF0aWNT
ZWdtZW50PiBwYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KCkgZmluYWw7CisgICAgT3B0aW9u
YWw8Q3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQ+IHBhcnNlQ3VydmVUb1F1YWRyYXRpY1Nt
b290aFNlZ21lbnQoKSBmaW5hbDsKKyAgICBPcHRpb25hbDxBcmNUb1NlZ21lbnQ+IHBhcnNlQXJj
VG9TZWdtZW50KCkgZmluYWw7CiAKICAgICBTdHJpbmcgbV9zdHJpbmc7CiAgICAgYm9vbCBtX2lz
OEJpdFNvdXJjZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2ludExpc3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9pbnRMaXN0LmgJKHJldmlzaW9uIDI2
MzE3NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2ludExpc3QuaAkod29ya2luZyBjb3B5
KQpAQCAtNjMsMTIgKzYzLDEzIEBAIHB1YmxpYzoKICAgICAgICAgYm9vbCBkZWxpbVBhcnNlZCA9
IGZhbHNlOwogICAgICAgICB3aGlsZSAoY3VyIDwgZW5kKSB7CiAgICAgICAgICAgICBkZWxpbVBh
cnNlZCA9IGZhbHNlOwotICAgICAgICAgICAgZmxvYXQgeFBvcyA9IDAuMGY7Ci0gICAgICAgICAg
ICBpZiAoIXBhcnNlTnVtYmVyKGN1ciwgZW5kLCB4UG9zKSkKKworICAgICAgICAgICAgYXV0byB4
UG9zID0gcGFyc2VOdW1iZXIoY3VyLCBlbmQpOworICAgICAgICAgICAgaWYgKCF4UG9zKQogICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgZmxvYXQgeVBvcyA9IDAu
MGY7Ci0gICAgICAgICAgICBpZiAoIXBhcnNlTnVtYmVyKGN1ciwgZW5kLCB5UG9zLCBmYWxzZSkp
CisgICAgICAgICAgICBhdXRvIHlQb3MgPSBwYXJzZU51bWJlcihjdXIsIGVuZCwgU3VmZml4U2tp
cHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsKKyAgICAgICAgICAgIGlmICgheVBvcykKICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNl
cyhjdXIsIGVuZCk7CkBAIC03OSw3ICs4MCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhjdXIsIGVuZCk7CiAKLSAgICAgICAgICAg
IGFwcGVuZChTVkdQb2ludDo6Y3JlYXRlKHsgeFBvcywgeVBvcyB9KSk7CisgICAgICAgICAgICBh
cHBlbmQoU1ZHUG9pbnQ6OmNyZWF0ZSh7ICp4UG9zLCAqeVBvcyB9KSk7CiAgICAgICAgIH0KIAog
ICAgICAgICByZXR1cm4gIWRlbGltUGFyc2VkOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1RvT1RGRm9udENvbnZlcnNpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdUb09URkZvbnRDb252ZXJzaW9uLmNwcAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1RvT1RGRm9udENvbnZlcnNpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMjksOCArMjI5LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGFkZENvZGVwb2ludFJhbmdlcyhj
b25zdCBVbmljb2RlUmFuZ2VzJiwgSGFzaFNldDxHbHlwaD4mIGdseXBoU2V0KSBjb25zdDsKICAg
ICB2b2lkIGFkZENvZGVwb2ludHMoY29uc3QgSGFzaFNldDxTdHJpbmc+JiBjb2RlcG9pbnRzLCBI
YXNoU2V0PEdseXBoPiYgZ2x5cGhTZXQpIGNvbnN0OwogICAgIHZvaWQgYWRkR2x5cGhOYW1lcyhj
b25zdCBIYXNoU2V0PFN0cmluZz4mIGdseXBoTmFtZXMsIEhhc2hTZXQ8R2x5cGg+JiBnbHlwaFNl
dCkgY29uc3Q7Ci0gICAgdm9pZCBhZGRLZXJuaW5nUGFpcihWZWN0b3I8S2VybmluZ0RhdGE+Jiwg
Y29uc3QgU1ZHS2VybmluZ1BhaXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
aXplX3QgYXBwZW5kS0VSTlN1YnRhYmxlKGJvb2wgKFQ6OipidWlsZEtlcm5pbmdQYWlyKShTVkdL
ZXJuaW5nUGFpciYpIGNvbnN0LCB1aW50MTZfdCBjb3ZlcmFnZSk7CisgICAgdm9pZCBhZGRLZXJu
aW5nUGFpcihWZWN0b3I8S2VybmluZ0RhdGE+JiwgU1ZHS2VybmluZ1BhaXImJikgY29uc3Q7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc2l6ZV90IGFwcGVuZEtFUk5TdWJ0YWJsZShPcHRpb25h
bDxTVkdLZXJuaW5nUGFpcj4gKFQ6OipidWlsZEtlcm5pbmdQYWlyKSgpIGNvbnN0LCB1aW50MTZf
dCBjb3ZlcmFnZSk7CiAgICAgc2l6ZV90IGZpbmlzaEFwcGVuZGluZ0tFUk5TdWJ0YWJsZShWZWN0
b3I8S2VybmluZ0RhdGE+LCB1aW50MTZfdCBjb3ZlcmFnZSk7CiAKICAgICB2b2lkIGFwcGVuZExp
Z2F0dXJlU3VidGFibGUoc2l6ZV90IHN1YnRhYmxlUmVjb3JkTG9jYXRpb24pOwpAQCAtMTA0MCw3
ICsxMDQwLDcgQEAgdm9pZCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFkZEdseXBoTmFtZQogICAg
IH0KIH0KIAotdm9pZCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFkZEtlcm5pbmdQYWlyKFZlY3Rv
cjxLZXJuaW5nRGF0YT4mIGRhdGEsIGNvbnN0IFNWR0tlcm5pbmdQYWlyJiBrZXJuaW5nUGFpcikg
Y29uc3QKK3ZvaWQgU1ZHVG9PVEZGb250Q29udmVydGVyOjphZGRLZXJuaW5nUGFpcihWZWN0b3I8
S2VybmluZ0RhdGE+JiBkYXRhLCBTVkdLZXJuaW5nUGFpciYmIGtlcm5pbmdQYWlyKSBjb25zdAog
ewogICAgIEhhc2hTZXQ8R2x5cGg+IGdseXBoU2V0MTsKICAgICBIYXNoU2V0PEdseXBoPiBnbHlw
aFNldDI7CkBAIC0xMDU5LDEzICsxMDU5LDEzIEBAIHZvaWQgU1ZHVG9PVEZGb250Q29udmVydGVy
OjphZGRLZXJuaW5nUGEKICAgICB9CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBz
aXplX3QgU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRLRVJOU3VidGFibGUoYm9vbCAoVDo6
KmJ1aWxkS2VybmluZ1BhaXIpKFNWR0tlcm5pbmdQYWlyJikgY29uc3QsIHVpbnQxNl90IGNvdmVy
YWdlKQordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHNpemVfdCBTVkdUb09URkZvbnRDb252
ZXJ0ZXI6OmFwcGVuZEtFUk5TdWJ0YWJsZShPcHRpb25hbDxTVkdLZXJuaW5nUGFpcj4gKFQ6Oipi
dWlsZEtlcm5pbmdQYWlyKSgpIGNvbnN0LCB1aW50MTZfdCBjb3ZlcmFnZSkKIHsKICAgICBWZWN0
b3I8S2VybmluZ0RhdGE+IGtlcm5pbmdEYXRhOwogICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGNo
aWxkcmVuT2ZUeXBlPFQ+KG1fZm9udEVsZW1lbnQpKSB7Ci0gICAgICAgIFNWR0tlcm5pbmdQYWly
IGtlcm5pbmdQYWlyOwotICAgICAgICBpZiAoKGVsZW1lbnQuKmJ1aWxkS2VybmluZ1BhaXIpKGtl
cm5pbmdQYWlyKSkKLSAgICAgICAgICAgIGFkZEtlcm5pbmdQYWlyKGtlcm5pbmdEYXRhLCBrZXJu
aW5nUGFpcik7CisgICAgICAgIGF1dG8ga2VybmluZ1BhaXIgPSAoZWxlbWVudC4qYnVpbGRLZXJu
aW5nUGFpcikoKTsKKyAgICAgICAgaWYgKGtlcm5pbmdQYWlyKQorICAgICAgICAgICAgYWRkS2Vy
bmluZ1BhaXIoa2VybmluZ0RhdGEsIFdURk1vdmUoKmtlcm5pbmdQYWlyKSk7CiAgICAgfQogICAg
IHJldHVybiBmaW5pc2hBcHBlbmRpbmdLRVJOU3VidGFibGUoV1RGTW92ZShrZXJuaW5nRGF0YSks
IGNvdmVyYWdlKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm1MaXN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybUxpc3QuaAko
cmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybUxpc3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDE3ICsxMTQsMTggQEAgcHJpdmF0ZToKICAgICAgICAg
Ym9vbCBkZWxpbVBhcnNlZCA9IGZhbHNlOwogICAgICAgICB3aGlsZSAoc3RhcnQgPCBlbmQpIHsK
ICAgICAgICAgICAgIGRlbGltUGFyc2VkID0gZmFsc2U7Ci0gICAgICAgICAgICBTVkdUcmFuc2Zv
cm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZSB0eXBlID0gU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR19U
UkFOU0ZPUk1fVU5LTk9XTjsKICAgICAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhzdGFy
dCwgZW5kKTsKLQotICAgICAgICAgICAgaWYgKCFTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZUFuZFNr
aXBUeXBlKHN0YXJ0LCBlbmQsIHR5cGUpKQorICAgICAgICAgICAgCisgICAgICAgICAgICBhdXRv
IHR5cGUgPSBTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZUFuZFNraXBUeXBlKHN0YXJ0LCBlbmQpOwor
ICAgICAgICAgICAgaWYgKCF0eXBlKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgICAgICAgICAgUmVmPFNWR1RyYW5zZm9ybT4gdHJhbnNmb3JtID0gU1ZHVHJhbnNmb3JtOjpj
cmVhdGUodHlwZSk7Ci0gICAgICAgICAgICBpZiAoIVNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJh
bnNmb3JtVmFsdWUodHlwZSwgc3RhcnQsIGVuZCwgdHJhbnNmb3JtLT52YWx1ZSgpKSkKKyAgICAg
ICAgICAgIGF1dG8gcGFyc2VkVHJhbnNmb3JtVmFsdWUgPSBTVkdUcmFuc2Zvcm1hYmxlOjpwYXJz
ZVRyYW5zZm9ybVZhbHVlKCp0eXBlLCBzdGFydCwgZW5kKTsKKyAgICAgICAgICAgIGlmICghcGFy
c2VkVHJhbnNmb3JtVmFsdWUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
ICAgICAgICBhcHBlbmQoV1RGTW92ZSh0cmFuc2Zvcm0pKTsKKyAgICAgICAgICAgIGFwcGVuZChT
VkdUcmFuc2Zvcm06OmNyZWF0ZSgqcGFyc2VkVHJhbnNmb3JtVmFsdWUpKTsKKwogICAgICAgICAg
ICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHN0YXJ0LCBlbmQpOwogICAgICAgICAgICAgaWYgKHN0
YXJ0IDwgZW5kICYmICpzdGFydCA9PSAnLCcpIHsKICAgICAgICAgICAgICAgICBkZWxpbVBhcnNl
ZCA9IHRydWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtYWJsZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybWFibGUuY3BwCShy
ZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtYWJsZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDggKzQzLDExIEBAIHN0YXRpYyBpbnQgcGFyc2VUcmFu
c2Zvcm1QYXJhbUxpc3QoY29uc3QKICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMocHRyLCBlbmQp
OwogCiAgICAgd2hpbGUgKHJlcXVpcmVkUGFyYW1zIDwgcmVxdWlyZWQpIHsKLSAgICAgICAgaWYg
KHB0ciA+PSBlbmQgfHwgIXBhcnNlTnVtYmVyKHB0ciwgZW5kLCB2YWx1ZXNbcmVxdWlyZWRQYXJh
bXNdLCBmYWxzZSkpCisgICAgICAgIGlmIChwdHIgPj0gZW5kKQogICAgICAgICAgICAgcmV0dXJu
IC0xOworICAgICAgICBhdXRvIHBhcnNlZE51bWJlciA9IHBhcnNlTnVtYmVyKHB0ciwgZW5kLCBT
dWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNraXApOworICAgICAgICBpZiAoIXBhcnNlZE51bWJl
cikKKyAgICAgICAgICAgIHZhbHVlc1tyZXF1aXJlZFBhcmFtc10gPSAqcGFyc2VkTnVtYmVyOwog
ICAgICAgICByZXF1aXJlZFBhcmFtcysrOwogICAgICAgICBpZiAocmVxdWlyZWRQYXJhbXMgPCBy
ZXF1aXJlZCkKICAgICAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVsaW1pdGVyKHB0
ciwgZW5kKTsKQEAgLTYzLDggKzY2LDEyIEBAIHN0YXRpYyBpbnQgcGFyc2VUcmFuc2Zvcm1QYXJh
bUxpc3QoY29uc3QKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICB9IGVsc2UgewogICAgICAg
ICB3aGlsZSAob3B0aW9uYWxQYXJhbXMgPCBvcHRpb25hbCkgewotICAgICAgICAgICAgaWYgKHB0
ciA+PSBlbmQgfHwgIXBhcnNlTnVtYmVyKHB0ciwgZW5kLCB2YWx1ZXNbcmVxdWlyZWRQYXJhbXMg
KyBvcHRpb25hbFBhcmFtc10sIGZhbHNlKSkKKyAgICAgICAgICAgIGlmIChwdHIgPj0gZW5kKQog
ICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIGF1dG8gcGFyc2VkTnVtYmVy
ID0gcGFyc2VOdW1iZXIocHRyLCBlbmQsIFN1ZmZpeFNraXBwaW5nUG9saWN5OjpEb250U2tpcCk7
CisgICAgICAgICAgICBpZiAoIXBhcnNlZE51bWJlcikKKyAgICAgICAgICAgICAgICByZXR1cm4g
LTE7CisgICAgICAgICAgICB2YWx1ZXNbcmVxdWlyZWRQYXJhbXMgKyBvcHRpb25hbFBhcmFtc10g
PSAqcGFyc2VkTnVtYmVyOwogICAgICAgICAgICAgb3B0aW9uYWxQYXJhbXMrKzsKICAgICAgICAg
ICAgIGlmIChvcHRpb25hbFBhcmFtcyA8IG9wdGlvbmFsKQogICAgICAgICAgICAgICAgIHNraXBP
cHRpb25hbFNWR1NwYWNlc09yRGVsaW1pdGVyKHB0ciwgZW5kKTsKQEAgLTkwLDE2ICs5NywxNyBA
QCBzdGF0aWMgY29uc3QgaW50IG9wdGlvbmFsVmFsdWVzRm9yVHlwZVtdCiAvLyBUaGlzIGRlc3Ry
dWN0b3IgaXMgbmVlZGVkIGluIG9yZGVyIHRvIGxpbmsgY29ycmVjdGx5IHdpdGggSW50ZWwgSUND
LgogU1ZHVHJhbnNmb3JtYWJsZTo6flNWR1RyYW5zZm9ybWFibGUoKSA9IGRlZmF1bHQ7CiAKLWJv
b2wgU1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VUcmFuc2Zvcm1WYWx1ZShTVkdUcmFuc2Zvcm1WYWx1
ZTo6U1ZHVHJhbnNmb3JtVHlwZSB0eXBlLCBjb25zdCBVQ2hhciomIHB0ciwgY29uc3QgVUNoYXIq
IGVuZCwgU1ZHVHJhbnNmb3JtVmFsdWUmIHRyYW5zZm9ybSkKK09wdGlvbmFsPFNWR1RyYW5zZm9y
bVZhbHVlPiBTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZVRyYW5zZm9ybVZhbHVlKFNWR1RyYW5zZm9y
bVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlIHR5cGUsIGNvbnN0IFVDaGFyKiYgcHRyLCBjb25zdCBV
Q2hhciogZW5kKQogewogICAgIGlmICh0eXBlID09IFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJB
TlNGT1JNX1VOS05PV04pCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKIAogICAgIGludCB2YWx1ZUNvdW50ID0gMDsKICAgICBmbG9hdCB2YWx1ZXNb
XSA9IHswLCAwLCAwLCAwLCAwLCAwfTsKICAgICBpZiAoKHZhbHVlQ291bnQgPSBwYXJzZVRyYW5z
Zm9ybVBhcmFtTGlzdChwdHIsIGVuZCwgdmFsdWVzLCByZXF1aXJlZFZhbHVlc0ZvclR5cGVbdHlw
ZV0sIG9wdGlvbmFsVmFsdWVzRm9yVHlwZVt0eXBlXSkpIDwgMCkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCisgICAgU1ZHVHJhbnNmb3JtVmFs
dWUgdHJhbnNmb3JtOwogICAgIHN3aXRjaCAodHlwZSkgewogICAgIGNhc2UgU1ZHVHJhbnNmb3Jt
VmFsdWU6OlNWR19UUkFOU0ZPUk1fVU5LTk9XTjoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CkBAIC0xMzMsNyArMTQxLDcgQEAgYm9vbCBTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZVRyYW5z
Zm9ybVZhbAogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBy
ZXR1cm4gdHJhbnNmb3JtOwogfQogCiBzdGF0aWMgY29uc3QgVUNoYXIgc2tld1hEZXNjW10gPSAg
eydzJywgJ2snLCAnZScsICd3JywgJ1gnfTsKQEAgLTE0MywzOSArMTUxLDM1IEBAIHN0YXRpYyBj
b25zdCBVQ2hhciB0cmFuc2xhdGVEZXNjW10gPSAgeycKIHN0YXRpYyBjb25zdCBVQ2hhciByb3Rh
dGVEZXNjW10gPSAgeydyJywgJ28nLCAndCcsICdhJywgJ3QnLCAnZSd9Owogc3RhdGljIGNvbnN0
IFVDaGFyIG1hdHJpeERlc2NbXSA9ICB7J20nLCAnYScsICd0JywgJ3InLCAnaScsICd4J307CiAK
LWJvb2wgU1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VBbmRTa2lwVHlwZShjb25zdCBVQ2hhciomIGN1
cnJUcmFuc2Zvcm0sIGNvbnN0IFVDaGFyKiBlbmQsIFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFu
c2Zvcm1UeXBlJiB0eXBlKQorT3B0aW9uYWw8U1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9y
bVR5cGU+IFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlQW5kU2tpcFR5cGUoY29uc3QgVUNoYXIqJiBj
dXJyVHJhbnNmb3JtLCBjb25zdCBVQ2hhciogZW5kKQogewogICAgIGlmIChjdXJyVHJhbnNmb3Jt
ID49IGVuZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogCiAgICAgaWYgKCpjdXJyVHJhbnNmb3JtID09ICdzJykgewogICAgICAgICBpZiAoc2tp
cFN0cmluZyhjdXJyVHJhbnNmb3JtLCBlbmQsIHNrZXdYRGVzYywgV1RGX0FSUkFZX0xFTkdUSChz
a2V3WERlc2MpKSkKLSAgICAgICAgICAgIHR5cGUgPSBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RS
QU5TRk9STV9TS0VXWDsKKyAgICAgICAgICAgIHJldHVybiBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZH
X1RSQU5TRk9STV9TS0VXWDsKICAgICAgICAgZWxzZSBpZiAoc2tpcFN0cmluZyhjdXJyVHJhbnNm
b3JtLCBlbmQsIHNrZXdZRGVzYywgV1RGX0FSUkFZX0xFTkdUSChza2V3WURlc2MpKSkKLSAgICAg
ICAgICAgIHR5cGUgPSBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RSQU5TRk9STV9TS0VXWTsKKyAg
ICAgICAgICAgIHJldHVybiBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RSQU5TRk9STV9TS0VXWTsK
ICAgICAgICAgZWxzZSBpZiAoc2tpcFN0cmluZyhjdXJyVHJhbnNmb3JtLCBlbmQsIHNjYWxlRGVz
YywgV1RGX0FSUkFZX0xFTkdUSChzY2FsZURlc2MpKSkKLSAgICAgICAgICAgIHR5cGUgPSBTVkdU
cmFuc2Zvcm1WYWx1ZTo6U1ZHX1RSQU5TRk9STV9TQ0FMRTsKKyAgICAgICAgICAgIHJldHVybiBT
VkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RSQU5TRk9STV9TQ0FMRTsKICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
ICAgICB9IGVsc2UgaWYgKHNraXBTdHJpbmcoY3VyclRyYW5zZm9ybSwgZW5kLCB0cmFuc2xhdGVE
ZXNjLCBXVEZfQVJSQVlfTEVOR1RIKHRyYW5zbGF0ZURlc2MpKSkKLSAgICAgICAgdHlwZSA9IFNW
R1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX1RSQU5TTEFURTsKKyAgICAgICAgcmV0dXJu
IFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX1RSQU5TTEFURTsKICAgICBlbHNlIGlm
IChza2lwU3RyaW5nKGN1cnJUcmFuc2Zvcm0sIGVuZCwgcm90YXRlRGVzYywgV1RGX0FSUkFZX0xF
TkdUSChyb3RhdGVEZXNjKSkpCi0gICAgICAgIHR5cGUgPSBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZH
X1RSQU5TRk9STV9ST1RBVEU7CisgICAgICAgIHJldHVybiBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZH
X1RSQU5TRk9STV9ST1RBVEU7CiAgICAgZWxzZSBpZiAoc2tpcFN0cmluZyhjdXJyVHJhbnNmb3Jt
LCBlbmQsIG1hdHJpeERlc2MsIFdURl9BUlJBWV9MRU5HVEgobWF0cml4RGVzYykpKQotICAgICAg
ICB0eXBlID0gU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR19UUkFOU0ZPUk1fTUFUUklYOwotICAgIGVs
c2UKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gU1ZHVHJhbnNmb3JtVmFs
dWU6OlNWR19UUkFOU0ZPUk1fTUFUUklYOwogCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKIH0KIAogU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGUg
U1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VUcmFuc2Zvcm1UeXBlKGNvbnN0IFN0cmluZyYgdHlwZVN0
cmluZykKIHsKLSAgICBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZSB0eXBlID0g
U1ZHVHJhbnNmb3JtVmFsdWU6OlNWR19UUkFOU0ZPUk1fVU5LTk9XTjsKICAgICBhdXRvIHVwY29u
dmVydGVkQ2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcodHlwZVN0cmluZykudXBjb252ZXJ0ZWRDaGFy
YWN0ZXJzKCk7CiAgICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSB1cGNvbnZlcnRlZENoYXJh
Y3RlcnM7Ci0gICAgcGFyc2VBbmRTa2lwVHlwZShjaGFyYWN0ZXJzLCBjaGFyYWN0ZXJzICsgdHlw
ZVN0cmluZy5sZW5ndGgoKSwgdHlwZSk7Ci0gICAgcmV0dXJuIHR5cGU7CisgICAgcmV0dXJuIHBh
cnNlQW5kU2tpcFR5cGUoY2hhcmFjdGVycywgY2hhcmFjdGVycyArIHR5cGVTdHJpbmcubGVuZ3Ro
KCkpLnZhbHVlT3IoU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR19UUkFOU0ZPUk1fVU5LTk9XTik7CiB9
CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm1hYmxlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybWFibGUuaAkocmV2aXNpb24g
MjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybWFibGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzIsOSArMzIsOSBAQCBjbGFzcyBTVkdUcmFuc2Zvcm1hYmxlIDogcHVibGlj
IFNWR0xvY2F0CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+U1ZHVHJhbnNmb3JtYWJsZSgpOwogCi0g
ICAgc3RhdGljIGJvb2wgcGFyc2VUcmFuc2Zvcm1WYWx1ZShTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZH
VHJhbnNmb3JtVHlwZSwgY29uc3QgVUNoYXIqJiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQsIFNWR1Ry
YW5zZm9ybVZhbHVlJik7CisgICAgc3RhdGljIE9wdGlvbmFsPFNWR1RyYW5zZm9ybVZhbHVlPiBw
YXJzZVRyYW5zZm9ybVZhbHVlKFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlLCBj
b25zdCBVQ2hhciomIHB0ciwgY29uc3QgVUNoYXIqIGVuZCk7CiAgICAgc3RhdGljIFNWR1RyYW5z
Zm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlIHBhcnNlVHJhbnNmb3JtVHlwZShjb25zdCBTdHJp
bmcmKTsKLSAgICBzdGF0aWMgYm9vbCBwYXJzZUFuZFNraXBUeXBlKGNvbnN0IFVDaGFyKiYgY3Vy
clRyYW5zZm9ybSwgY29uc3QgVUNoYXIqIGVuZCwgU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5z
Zm9ybVR5cGUmKTsKKyAgICBzdGF0aWMgT3B0aW9uYWw8U1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1Ry
YW5zZm9ybVR5cGU+IHBhcnNlQW5kU2tpcFR5cGUoY29uc3QgVUNoYXIqJiBjdXJyVHJhbnNmb3Jt
LCBjb25zdCBVQ2hhciogZW5kKTsKIAogICAgIEFmZmluZVRyYW5zZm9ybSBsb2NhbENvb3JkaW5h
dGVTcGFjZVRyYW5zZm9ybShTVkdMb2NhdGFibGU6OkNUTVNjb3BlKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBhbmltYXRlZExvY2FsVHJhbnNmb3JtKCk7IH0KICAgICB2aXJ0dWFsIEFmZmluZVRy
YW5zZm9ybSBhbmltYXRlZExvY2FsVHJhbnNmb3JtKCkgY29uc3QgPSAwOwpJbmRleDogU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1ZLZXJuRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1ZLZXJuRWxlbWVudC5jcHAJKHJldmlzaW9uIDI2MzE3NikKKysrIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdWS2VybkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Mywy
NCArNDMsNDQgQEAgUmVmPFNWR1ZLZXJuRWxlbWVudD4gU1ZHVktlcm5FbGVtZW50OjpjcgogICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IFNWR1ZLZXJuRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkp
OwogfQogCi1ib29sIFNWR1ZLZXJuRWxlbWVudDo6YnVpbGRWZXJ0aWNhbEtlcm5pbmdQYWlyKFNW
R0tlcm5pbmdQYWlyJiBrZXJuaW5nUGFpcikgY29uc3QKK09wdGlvbmFsPFNWR0tlcm5pbmdQYWly
PiBTVkdWS2VybkVsZW1lbnQ6OmJ1aWxkVmVydGljYWxLZXJuaW5nUGFpcigpIGNvbnN0CiB7Cisg
ICAgLy8gRklYTUU6IENhbiB0aGlzIGJlIHNoYXJlZCB3aXRoIFNWR0hLZXJuRWxlbWVudDo6YnVp
bGRWZXJ0aWNhbEtlcm5pbmdQYWlyPworCiAgICAgYXV0byYgdTEgPSBhdHRyaWJ1dGVXaXRob3V0
U3luY2hyb25pemF0aW9uKFNWR05hbWVzOjp1MUF0dHIpOwogICAgIGF1dG8mIGcxID0gYXR0cmli
dXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihTVkdOYW1lczo6ZzFBdHRyKTsKICAgICBhdXRvJiB1
MiA9IGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oU1ZHTmFtZXM6OnUyQXR0cik7CiAg
ICAgYXV0byYgZzIgPSBhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFNWR05hbWVzOjpn
MkF0dHIpOwogICAgIGlmICgodTEuaXNFbXB0eSgpICYmIGcxLmlzRW1wdHkoKSkgfHwgKHUyLmlz
RW1wdHkoKSAmJiBnMi5pc0VtcHR5KCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBhdXRvIGdseXBoTmFtZTEgPSBwYXJzZUdseXBo
TmFtZShnMSk7CisgICAgaWYgKCFnbHlwaE5hbWUxKQorICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworICAgIGF1dG8gZ2x5cGhOYW1lMiA9IHBhcnNlR2x5cGhOYW1lKGcyKTsKKyAgICBpZiAo
IWdseXBoTmFtZTIpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgYXV0byB1bmlj
b2RlU3RyaW5nMSA9IHBhcnNlS2VybmluZ1VuaWNvZGVTdHJpbmcodTEpOworICAgIGlmICghdW5p
Y29kZVN0cmluZzEpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgYXV0byB1bmlj
b2RlU3RyaW5nMiA9IHBhcnNlS2VybmluZ1VuaWNvZGVTdHJpbmcodTIpOworICAgIGlmICghdW5p
Y29kZVN0cmluZzIpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBib29sIG9r
ID0gZmFsc2U7CisgICAgYXV0byBrZXJuaW5nID0gYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXph
dGlvbihTVkdOYW1lczo6a0F0dHIpLnN0cmluZygpLnRvRmxvYXQoJm9rKTsKKyAgICBpZiAoIW9r
KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgaWYgKHBhcnNlR2x5cGhOYW1l
KGcxLCBrZXJuaW5nUGFpci5nbHlwaE5hbWUxKQotICAgICAgICAmJiBwYXJzZUdseXBoTmFtZShn
Miwga2VybmluZ1BhaXIuZ2x5cGhOYW1lMikKLSAgICAgICAgJiYgcGFyc2VLZXJuaW5nVW5pY29k
ZVN0cmluZyh1MSwga2VybmluZ1BhaXIudW5pY29kZVJhbmdlMSwga2VybmluZ1BhaXIudW5pY29k
ZU5hbWUxKQotICAgICAgICAmJiBwYXJzZUtlcm5pbmdVbmljb2RlU3RyaW5nKHUyLCBrZXJuaW5n
UGFpci51bmljb2RlUmFuZ2UyLCBrZXJuaW5nUGFpci51bmljb2RlTmFtZTIpKSB7Ci0gICAgICAg
IGJvb2wgb2sgPSBmYWxzZTsKLSAgICAgICAga2VybmluZ1BhaXIua2VybmluZyA9IGF0dHJpYnV0
ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oU1ZHTmFtZXM6OmtBdHRyKS5zdHJpbmcoKS50b0Zsb2F0
KCZvayk7Ci0gICAgICAgIHJldHVybiBvazsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOworICAg
IFNWR0tlcm5pbmdQYWlyIGtlcm5pbmdQYWlyOworICAgIGtlcm5pbmdQYWlyLmdseXBoTmFtZTEg
PSBXVEZNb3ZlKCpnbHlwaE5hbWUxKTsKKyAgICBrZXJuaW5nUGFpci5nbHlwaE5hbWUyID0gV1RG
TW92ZSgqZ2x5cGhOYW1lMik7CisgICAga2VybmluZ1BhaXIudW5pY29kZVJhbmdlMSA9IFdURk1v
dmUodW5pY29kZVN0cmluZzEtPmZpcnN0KTsKKyAgICBrZXJuaW5nUGFpci51bmljb2RlTmFtZTEg
PSBXVEZNb3ZlKHVuaWNvZGVTdHJpbmcxLT5zZWNvbmQpOworICAgIGtlcm5pbmdQYWlyLnVuaWNv
ZGVSYW5nZTIgPSBXVEZNb3ZlKHVuaWNvZGVTdHJpbmcyLT5maXJzdCk7CisgICAga2VybmluZ1Bh
aXIudW5pY29kZU5hbWUyID0gV1RGTW92ZSh1bmljb2RlU3RyaW5nMi0+c2Vjb25kKTsKKyAgICBr
ZXJuaW5nUGFpci5rZXJuaW5nID0ga2VybmluZzsKKyAgICByZXR1cm4ga2VybmluZ1BhaXI7CiB9
CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdWS2VybkVsZW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVktlcm5FbGVtZW50LmgJKHJldmlzaW9uIDI2
MzE3NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdWS2VybkVsZW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtMzEsNyArMzEsNyBAQCBjbGFzcyBTVkdWS2VybkVsZW1lbnQgZmluYWwgOiBwdWJs
aWMgU1ZHCiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxTVkdWS2VybkVsZW1lbnQ+IGNyZWF0ZShj
b25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQmKTsKIAotICAgIGJvb2wgYnVpbGRWZXJ0aWNh
bEtlcm5pbmdQYWlyKFNWR0tlcm5pbmdQYWlyJiBrZXJuaW5nUGFpcikgY29uc3Q7CisgICAgT3B0
aW9uYWw8U1ZHS2VybmluZ1BhaXI+IGJ1aWxkVmVydGljYWxLZXJuaW5nUGFpcigpIGNvbnN0Owog
CiBwcml2YXRlOgogICAgIFNWR1ZLZXJuRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9j
dW1lbnQmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdWaWV3U3BlYy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ZpZXdTcGVjLmNwcAkocmV2aXNpb24gMjYz
MTc2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ZpZXdTcGVjLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODksMTAgKzg5LDcgQEAgYm9vbCBTVkdWaWV3U3BlYzo6cGFyc2VWaWV3U3BlYyhjb25z
dCBTdAogICAgICAgICAgICAgICAgIGlmIChjdXJyVmlld1NwZWMgPj0gZW5kIHx8ICpjdXJyVmll
d1NwZWMgIT0gJygnKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
ICAgICAgICAgY3VyclZpZXdTcGVjKys7Ci0gICAgICAgICAgICAgICAgRmxvYXRSZWN0IHZpZXdC
b3g7Ci0gICAgICAgICAgICAgICAgaWYgKCFTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlVmlld0JveChj
dXJyVmlld1NwZWMsIGVuZCwgdmlld0JveCwgZmFsc2UpKQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgc2V0Vmlld0JveCh2aWV3Qm94KTsKKyAgICAg
ICAgICAgICAgICBzZXRWaWV3Qm94KFNWR0ZpdFRvVmlld0JveDo6cGFyc2VWaWV3Qm94KGN1cnJW
aWV3U3BlYywgZW5kLCBmYWxzZSkudmFsdWUoKSk7CiAgICAgICAgICAgICAgICAgaWYgKGN1cnJW
aWV3U3BlYyA+PSBlbmQgfHwgKmN1cnJWaWV3U3BlYyAhPSAnKScpCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICBjdXJyVmlld1NwZWMrKzsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVG
dW5jdGlvbkltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGll
cy9TVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmgJKHJldmlzaW9uIDI2MzE3
NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkFkZGl0aXZl
VmFsdWVGdW5jdGlvbkltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMjU0LDEwICsyNTQsOCBAQCBw
dWJsaWM6CiAKICAgICBPcHRpb25hbDxmbG9hdD4gY2FsY3VsYXRlRGlzdGFuY2UoU1ZHRWxlbWVu
dCosIGNvbnN0IFN0cmluZyYgZnJvbSwgY29uc3QgU3RyaW5nJiB0bykgY29uc3Qgb3ZlcnJpZGUK
ICAgICB7Ci0gICAgICAgIGZsb2F0IGZyb21OdW1iZXIgPSAwOwotICAgICAgICBmbG9hdCB0b051
bWJlciA9IDA7Ci0gICAgICAgIHBhcnNlTnVtYmVyRnJvbVN0cmluZyhmcm9tLCBmcm9tTnVtYmVy
KTsKLSAgICAgICAgcGFyc2VOdW1iZXJGcm9tU3RyaW5nKHRvLCB0b051bWJlcik7CisgICAgICAg
IGZsb2F0IGZyb21OdW1iZXIgPSBwYXJzZU51bWJlcihmcm9tKS52YWx1ZU9yKDApOworICAgICAg
ICBmbG9hdCB0b051bWJlciA9IHBhcnNlTnVtYmVyKHRvKS52YWx1ZU9yKDApOwogICAgICAgICBy
ZXR1cm4gZmFic2YodG9OdW1iZXIgLSBmcm9tTnVtYmVyKTsKICAgICB9CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR1Byb3BlcnR5VHJhaXRzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHUHJvcGVydHlUcmFpdHMuaAkocmV2
aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHUHJvcGVy
dHlUcmFpdHMuaAkod29ya2luZyBjb3B5KQpAQCAtNzUsMTAgKzc1LDEwIEBAIHN0cnVjdCBTVkdQ
cm9wZXJ0eVRyYWl0czxzdGQ6OnBhaXI8aW50LCAKICAgICBzdGF0aWMgc3RkOjpwYWlyPGludCwg
aW50PiBpbml0aWFsVmFsdWUoKSB7IHJldHVybiB7IH07IH0KICAgICBzdGF0aWMgc3RkOjpwYWly
PGludCwgaW50PiBmcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKQogICAgIHsKLSAgICAg
ICAgZmxvYXQgZmlyc3ROdW1iZXIgPSAwLCBzZWNvbmROdW1iZXIgPSAwOwotICAgICAgICBpZiAo
IXBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIoc3RyaW5nLCBmaXJzdE51bWJlciwgc2Vjb25kTnVt
YmVyKSkKKyAgICAgICAgYXV0byByZXN1bHQgPSBwYXJzZU51bWJlck9wdGlvbmFsTnVtYmVyKHN0
cmluZyk7CisgICAgICAgIGlmICghcmVzdWx0KQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAg
ICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKHN0YXRpY19jYXN0PGludD4ocm91bmRmKGZpcnN0
TnVtYmVyKSksIHN0YXRpY19jYXN0PGludD4ocm91bmRmKHNlY29uZE51bWJlcikpKTsKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKHN0YXRpY19jYXN0PGludD4ocm91bmRmKHJlc3VsdC0+
Zmlyc3QpKSwgc3RhdGljX2Nhc3Q8aW50Pihyb3VuZGYocmVzdWx0LT5zZWNvbmQpKSk7CiAgICAg
fQogICAgIHN0YXRpYyBPcHRpb25hbDxzdGQ6OnBhaXI8aW50LCBpbnQ+PiBwYXJzZShjb25zdCBR
dWFsaWZpZWROYW1lJiwgY29uc3QgU3RyaW5nJikgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0
dXJuIGluaXRpYWxWYWx1ZSgpOyB9CiAgICAgc3RhdGljIFN0cmluZyB0b1N0cmluZyhzdGQ6OnBh
aXI8aW50LCBpbnQ+KSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gZW1wdHlTdHJpbmco
KTsgfQpAQCAtODksMTcgKzg5LDExIEBAIHN0cnVjdCBTVkdQcm9wZXJ0eVRyYWl0czxmbG9hdD4g
ewogICAgIHN0YXRpYyBmbG9hdCBpbml0aWFsVmFsdWUoKSB7IHJldHVybiAwOyB9CiAgICAgc3Rh
dGljIGZsb2F0IGZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiAgICAgewotICAgICAg
ICBmbG9hdCBudW1iZXIgPSAwOwotICAgICAgICBpZiAoIXBhcnNlTnVtYmVyRnJvbVN0cmluZyhz
dHJpbmcsIG51bWJlcikpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuIG51
bWJlcjsKKyAgICAgICAgcmV0dXJuIHBhcnNlTnVtYmVyKHN0cmluZykudmFsdWVPcigwKTsKICAg
ICB9CiAgICAgc3RhdGljIE9wdGlvbmFsPGZsb2F0PiBwYXJzZShjb25zdCBRdWFsaWZpZWROYW1l
JiwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCiAgICAgewotICAgICAgICBmbG9hdCBudW1iZXI7Ci0g
ICAgICAgIGlmICghcGFyc2VOdW1iZXJGcm9tU3RyaW5nKHN0cmluZywgbnVtYmVyKSkKLSAgICAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgICAgIHJldHVybiBudW1iZXI7CisgICAg
ICAgIHJldHVybiBwYXJzZU51bWJlcihzdHJpbmcpOwogICAgIH0KICAgICBzdGF0aWMgU3RyaW5n
IHRvU3RyaW5nKGZsb2F0IHR5cGUpIHsgcmV0dXJuIFN0cmluZzo6bnVtYmVyKHR5cGUpOyB9CiB9
OwpAQCAtMTA5LDEwICsxMDMsNyBAQCBzdHJ1Y3QgU1ZHUHJvcGVydHlUcmFpdHM8c3RkOjpwYWly
PGZsb2F0CiAgICAgc3RhdGljIHN0ZDo6cGFpcjxmbG9hdCwgZmxvYXQ+IGluaXRpYWxWYWx1ZSgp
IHsgcmV0dXJuIHsgfTsgfQogICAgIHN0YXRpYyBzdGQ6OnBhaXI8ZmxvYXQsIGZsb2F0PiBmcm9t
U3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKQogICAgIHsKLSAgICAgICAgZmxvYXQgZmlyc3RO
dW1iZXIgPSAwLCBzZWNvbmROdW1iZXIgPSAwOwotICAgICAgICBpZiAoIXBhcnNlTnVtYmVyT3B0
aW9uYWxOdW1iZXIoc3RyaW5nLCBmaXJzdE51bWJlciwgc2Vjb25kTnVtYmVyKSkKLSAgICAgICAg
ICAgIHJldHVybiB7IH07Ci0gICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihmaXJzdE51bWJl
ciwgc2Vjb25kTnVtYmVyKTsKKyAgICAgICAgcmV0dXJuIHBhcnNlTnVtYmVyT3B0aW9uYWxOdW1i
ZXIoc3RyaW5nKS52YWx1ZU9yKHN0ZDo6cGFpcjxmbG9hdCwgZmxvYXQ+IHsgfSk7CiAgICAgfQog
ICAgIHN0YXRpYyBPcHRpb25hbDxzdGQ6OnBhaXI8ZmxvYXQsIGZsb2F0Pj4gcGFyc2UoY29uc3Qg
UXVhbGlmaWVkTmFtZSYsIGNvbnN0IFN0cmluZyYpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJl
dHVybiBpbml0aWFsVmFsdWUoKTsgfQogICAgIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmcoc3RkOjpw
YWlyPGZsb2F0LCBmbG9hdD4pIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBlbXB0eVN0
cmluZygpOyB9CkBAIC0xMjMsMTcgKzExNCwxMSBAQCBzdHJ1Y3QgU1ZHUHJvcGVydHlUcmFpdHM8
RmxvYXRQb2ludD4gewogICAgIHN0YXRpYyBGbG9hdFBvaW50IGluaXRpYWxWYWx1ZSgpIHsgcmV0
dXJuIEZsb2F0UG9pbnQoKTsgfQogICAgIHN0YXRpYyBGbG9hdFBvaW50IGZyb21TdHJpbmcoY29u
c3QgU3RyaW5nJiBzdHJpbmcpCiAgICAgewotICAgICAgICBGbG9hdFBvaW50IHBvaW50OwotICAg
ICAgICBpZiAoIXBhcnNlUG9pbnQoc3RyaW5nLCBwb2ludCkpCi0gICAgICAgICAgICByZXR1cm4g
eyB9OwotICAgICAgICByZXR1cm4gcG9pbnQ7CisgICAgICAgIHJldHVybiBwYXJzZVBvaW50KHN0
cmluZykudmFsdWVPcihGbG9hdFBvaW50IHsgfSk7CiAgICAgfQogICAgIHN0YXRpYyBPcHRpb25h
bDxGbG9hdFBvaW50PiBwYXJzZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgU3RyaW5nJiBz
dHJpbmcpCiAgICAgewotICAgICAgICBGbG9hdFBvaW50IHBvaW50OwotICAgICAgICBpZiAoIXBh
cnNlUG9pbnQoc3RyaW5nLCBwb2ludCkpCi0gICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwotICAgICAgICByZXR1cm4gcG9pbnQ7CisgICAgICAgIHJldHVybiBwYXJzZVBvaW50KHN0cmlu
Zyk7CiAgICAgfQogICAgIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmcoY29uc3QgRmxvYXRQb2ludCYg
dHlwZSkKICAgICB7CkBAIC0xNDYsMTcgKzEzMSwxMSBAQCBzdHJ1Y3QgU1ZHUHJvcGVydHlUcmFp
dHM8RmxvYXRSZWN0PiB7CiAgICAgc3RhdGljIEZsb2F0UmVjdCBpbml0aWFsVmFsdWUoKSB7IHJl
dHVybiBGbG9hdFJlY3QoKTsgfQogICAgIHN0YXRpYyBGbG9hdFJlY3QgZnJvbVN0cmluZyhjb25z
dCBTdHJpbmcmIHN0cmluZykKICAgICB7Ci0gICAgICAgIEZsb2F0UmVjdCByZWN0OwotICAgICAg
ICBpZiAoIXBhcnNlUmVjdChzdHJpbmcsIHJlY3QpKQotICAgICAgICAgICAgcmV0dXJuIHsgfTsK
LSAgICAgICAgcmV0dXJuIHJlY3Q7CisgICAgICAgIHJldHVybiBwYXJzZVJlY3Qoc3RyaW5nKS52
YWx1ZU9yKEZsb2F0UmVjdCB7IH0pOwogICAgIH0KICAgICBzdGF0aWMgT3B0aW9uYWw8RmxvYXRS
ZWN0PiBwYXJzZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCiAg
ICAgewotICAgICAgICBGbG9hdFJlY3QgcmVjdDsKLSAgICAgICAgaWYgKCFwYXJzZVJlY3Qoc3Ry
aW5nLCByZWN0KSkKLSAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgICAgIHJl
dHVybiByZWN0OworICAgICAgICByZXR1cm4gcGFyc2VSZWN0KHN0cmluZyk7CiAgICAgfQogICAg
IHN0YXRpYyBTdHJpbmcgdG9TdHJpbmcoY29uc3QgRmxvYXRSZWN0JiB0eXBlKQogICAgIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>402369</attachid>
            <date>2020-06-19 19:04:50 -0700</date>
            <delta_ts>2020-06-19 19:38:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213416-20200619190449.patch</filename>
            <type>text/plain</type>
            <size>144341</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MzI5NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3MSBAQAorMjAyMC0wNi0xOSAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQ29udmVydCBtdWNoIG9mIHRoZSBT
Vkcgc3RyaW5nIHBhcnNpbmcgY29kZSB0byB1c2UgT3B0aW9uYWwgYmFzZWQgcmV0dXJuIHZhbHVl
cyByYXRoZXIgdGhhbiBvdXQtcGFyYW1ldGVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEzNDE2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgV0lQCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogc3ZnL1NWR0FuZ2xlVmFsdWUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6cGFyc2VBbmdsZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5nbGVW
YWx1ZTo6c2V0VmFsdWVBc1N0cmluZyk6CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVNb3Rpb25F
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVNb3Rpb25FbGVtZW50Ojpj
YWxjdWxhdGVUb0F0RW5kT2ZEdXJhdGlvblZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0Fu
aW1hdGVNb3Rpb25FbGVtZW50OjpjYWxjdWxhdGVGcm9tQW5kVG9WYWx1ZXMpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OmNhbGN1bGF0ZUZyb21BbmRCeVZhbHVl
cyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6Y2FsY3VsYXRl
RGlzdGFuY2UpOgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OnBhcnNlS2V5U3BsaW5lcyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmlt
YXRpb25FbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisgICAgICAgICogc3ZnL1NWR0ZFQ29udm9s
dmVNYXRyaXhFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFQ29udm9sdmVNYXRy
aXhFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisgICAgICAgICogc3ZnL1NWR0ZFRGlmZnVzZUxp
Z2h0aW5nRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURpZmZ1c2VMaWdodGlu
Z0VsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKiBzdmcvU1ZHRkVEcm9wU2hhZG93
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURyb3BTaGFkb3dFbGVtZW50Ojpw
YXJzZUF0dHJpYnV0ZSk6CisgICAgICAgICogc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OnBhcnNlQXR0
cmlidXRlKToKKyAgICAgICAgKiBzdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRkVJbWFnZUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKiBz
dmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRU1v
cnBob2xvZ3lFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisgICAgICAgICogc3ZnL1NWR0ZFU3Bl
Y3VsYXJMaWdodGluZ0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVTcGVjdWxh
ckxpZ2h0aW5nRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAgICAgICAqIHN2Zy9TVkdGRVR1
cmJ1bGVuY2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFVHVyYnVsZW5jZUVs
ZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKiBzdmcvU1ZHRml0VG9WaWV3Qm94LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpdFRvVmlld0JveDo6cGFyc2VBdHRyaWJ1dGUpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRml0VG9WaWV3Qm94OjpwYXJzZVZpZXdCb3gpOgorICAgICAg
ICAqIHN2Zy9TVkdGaXRUb1ZpZXdCb3guaDoKKyAgICAgICAgKiBzdmcvU1ZHR2x5cGhSZWZFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlRmxvYXQpOgorICAgICAgICAqIHN2Zy9T
VkdIS2VybkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSEtlcm5FbGVtZW50Ojpi
dWlsZEhvcml6b250YWxLZXJuaW5nUGFpciBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0hLZXJu
RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdJbWFnZUVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHSW1hZ2VFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisgICAgICAgICogc3Zn
L1NWR0xlbmd0aFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0xlbmd0aFZhbHVlOjpz
ZXRWYWx1ZUFzU3RyaW5nKToKKyAgICAgICAgKiBzdmcvU1ZHTnVtYmVyTGlzdC5oOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHTnVtYmVyTGlzdDo6cGFyc2UpOgorICAgICAgICAqIHN2Zy9TVkdQYXJz
ZXJVdGlsaXRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2VuZXJpY1BhcnNlTnVtYmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OnBhcnNlTnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OmdlbmVy
aWNQYXJzZUFyY0ZsYWcpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VBcmNGbGFnKToKKyAgICAg
ICAgKFdlYkNvcmU6OnBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6cGFyc2VQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVJlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6cGFyc2VHbHlwaE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VVbmljb2Rl
UmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VLZXJuaW5nVW5pY29kZVN0cmluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpnZW5lcmljUGFyc2VGbG9hdFBvaW50KToKKyAgICAgICAgKFdlYkNv
cmU6OnBhcnNlRmxvYXRQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVNWR051bWJlcik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpwYXJzZU51bWJlckZyb21TdHJpbmcpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VEZWxpbWl0ZWRTdHJpbmcpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6cGFyc2VGbG9hdFBvaW50Mik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpwYXJzZUZsb2F0UG9pbnQzKTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHUGFy
c2VyVXRpbGl0aWVzLmg6CisgICAgICAgIChXZWJDb3JlOjppc1NWR1NwYWNlKToKKyAgICAgICAg
KFdlYkNvcmU6OnNraXBPcHRpb25hbFNWR1NwYWNlcyk6CisgICAgICAgIChXZWJDb3JlOjpza2lw
T3B0aW9uYWxTVkdTcGFjZXNPckRlbGltaXRlcik6CisgICAgICAgICogc3ZnL1NWR1BhdGhCbGVu
ZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnB1bGxGcm9tU291cmNlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdQYXRoQmxlbmRlcjo6YmxlbmRNb3ZlVG9TZWdtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1BhdGhCbGVuZGVyOjpibGVuZExpbmVUb1NlZ21lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHUGF0aEJsZW5kZXI6OmJsZW5kTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJsZW5kZXI6OmJsZW5kTGluZVRvVmVydGljYWxTZWdtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCbGVuZGVyOjpibGVuZEN1cnZlVG9DdWJpY1Nl
Z21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJsZW5kZXI6OmJsZW5kQ3VydmVUb0N1
YmljU21vb3RoU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQmxlbmRlcjo6Ymxl
bmRDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQmxl
bmRlcjo6YmxlbmRDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdQYXRoQmxlbmRlcjo6YmxlbmRBcmNUb1NlZ21lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHUGF0aEJsZW5kZXI6OmNhbkJsZW5kUGF0aHMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
UGF0aEJsZW5kZXI6OmJsZW5kQW5pbWF0ZWRQYXRoKToKKyAgICAgICAgKiBzdmcvU1ZHUGF0aEJ5
dGVTdHJlYW1Tb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW1T
b3VyY2U6Om5leHRDb21tYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFt
U291cmNlOjpwYXJzZVNWR1NlZ21lbnRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhC
eXRlU3RyZWFtU291cmNlOjpwYXJzZU1vdmVUb1NlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlTGluZVRvU2VnbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VMaW5lVG9Ib3Jpem9udGFsU2Vn
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VM
aW5lVG9WZXJ0aWNhbFNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJl
YW1Tb3VyY2U6OnBhcnNlQ3VydmVUb0N1YmljU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZUN1cnZlVG9R
dWFkcmF0aWNTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFtU291
cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZUFyY1RvU2VnbWVudCk6CisgICAgICAg
ICogc3ZnL1NWR1BhdGhCeXRlU3RyZWFtU291cmNlLmg6CisgICAgICAgICogc3ZnL1NWR1BhdGhQ
YXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFBhcnNlcjo6cGFyc2VNb3ZlVG9T
ZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhQYXJzZXI6OnBhcnNlTGluZVRvU2Vn
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoUGFyc2VyOjpwYXJzZUxpbmVUb0hvcml6
b250YWxTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhQYXJzZXI6OnBhcnNlTGlu
ZVRvVmVydGljYWxTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhQYXJzZXI6OnBh
cnNlQ3VydmVUb0N1YmljU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoUGFyc2Vy
OjpwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
UGF0aFBhcnNlcjo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdQYXRoUGFyc2VyOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhQYXJzZXI6OnBhcnNlQXJjVG9TZWdtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1BhdGhQYXJzZXI6OnBhcnNlUGF0aERhdGEpOgorICAgICAgICAq
IHN2Zy9TVkdQYXRoUGFyc2VyLmg6CisgICAgICAgICogc3ZnL1NWR1BhdGhTZWdMaXN0U291cmNl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdMaXN0U291cmNlOjpuZXh0Q29tbWFu
ZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VTVkdTZWdt
ZW50VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VN
b3ZlVG9TZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdMaXN0U291cmNlOjpw
YXJzZUxpbmVUb1NlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0xpc3RTb3Vy
Y2U6OnBhcnNlTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
UGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNlTGluZVRvVmVydGljYWxTZWdtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNlQ3VydmVUb0N1
YmljU21vb3RoU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnTGlzdFNvdXJj
ZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQ
YXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VBcmNUb1NlZ21lbnQp
OgorICAgICAgICAqIHN2Zy9TVkdQYXRoU2VnTGlzdFNvdXJjZS5oOgorICAgICAgICAqIHN2Zy9T
VkdQYXRoU291cmNlLmg6CisgICAgICAgICogc3ZnL1NWR1BhdGhTdHJpbmdTb3VyY2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6bmV4dENvbW1hbmRIZWxwZXIpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUGF0aFN0cmluZ1NvdXJjZTo6bmV4dENvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6cGFy
c2VTVkdTZWdtZW50VHlwZUhlbHBlcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU3RyaW5n
U291cmNlOjpwYXJzZVNWR1NlZ21lbnRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhT
dHJpbmdTb3VyY2U6OnBhcnNlTW92ZVRvU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQ
YXRoU3RyaW5nU291cmNlOjpwYXJzZUxpbmVUb1NlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUxpbmVUb1ZlcnRpY2FsU2Vn
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUN1cnZl
VG9DdWJpY1NlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZTo6
cGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Bh
dGhTdHJpbmdTb3VyY2U6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3Ro
U2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUFy
Y1RvU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUFyY1RvU2VnbWVudEhlbHBlcik6
IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR1BhdGhTdHJpbmdTb3VyY2UuaDoKKyAgICAgICAg
KiBzdmcvU1ZHUG9pbnRMaXN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdQb2ludExpc3Q6OnBh
cnNlKToKKyAgICAgICAgKiBzdmcvU1ZHVG9PVEZGb250Q29udmVyc2lvbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFkZEtlcm5pbmdQYWlyIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kS0VSTlN1YnRh
YmxlKToKKyAgICAgICAgKiBzdmcvU1ZHVHJhbnNmb3JtTGlzdC5oOgorICAgICAgICAqIHN2Zy9T
VkdUcmFuc2Zvcm1hYmxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlVHJhbnNmb3JtUGFy
YW1MaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNm
b3JtVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VBbmRT
a2lwVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZVRyYW5z
Zm9ybVR5cGUpOgorICAgICAgICAqIHN2Zy9TVkdUcmFuc2Zvcm1hYmxlLmg6CisgICAgICAgICog
c3ZnL1NWR1ZLZXJuRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdWS2VybkVsZW1l
bnQ6OmJ1aWxkVmVydGljYWxLZXJuaW5nUGFpciBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR1ZL
ZXJuRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdWaWV3U3BlYy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdWaWV3U3BlYzo6cGFyc2VWaWV3U3BlYyk6CisgICAgICAgICogc3ZnL3Byb3Bl
cnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oOgorICAgICAgICAq
IHN2Zy9wcm9wZXJ0aWVzL1NWR1Byb3BlcnR5VHJhaXRzLmg6CisgICAgICAgIChXZWJDb3JlOjpT
VkdQcm9wZXJ0eVRyYWl0czxmbG9hdD46OmZyb21TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUHJvcGVydHlUcmFpdHM8ZmxvYXQ+OjpwYXJzZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQ
cm9wZXJ0eVRyYWl0czxGbG9hdFBvaW50Pjo6ZnJvbVN0cmluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdQcm9wZXJ0eVRyYWl0czxGbG9hdFBvaW50Pjo6cGFyc2UpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHUHJvcGVydHlUcmFpdHM8RmxvYXRSZWN0Pjo6ZnJvbVN0cmluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxGbG9hdFJlY3Q+OjpwYXJzZSk6CisKIDIwMjAtMDYt
MTkgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBBdm9pZCBpbml0
aWFsaXppbmcgUmVuZGVyVGhlbWUgc2luZ2xldG9uIHVubmVjZXNzYXJpbHkgaW4gdGhlIFVJUHJv
Y2VzcwpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMDA4Myw2ICsxMDA4
Myw3IEBACiAJCTdDODNERTg1MUQwNENCRDQwMEZFQkNGMyAvKiBTcHJpbmdTb2x2ZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3ByaW5nU29sdmVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTdDODVCMjAxMjJGQjA0ODUwMDMwNjg0RiAvKiBXSExTTFVubmFt
ZWRUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMVW5uYW1lZFR5cGUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Qzg1QjIwNDIyRkIwNjMyMDAzMDY4NEYgLyogV0hM
U0xVbm5hbWVkVHlwZUhhc2guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xVbm5hbWVkVHlwZUhhc2gu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0M4ODI0QzQyNDlEN0IwNTAwRUQ4RkM0
IC8qIFNWR1BhdGhTZWdWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
VkdQYXRoU2VnVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0M4RTM0OTIx
RTRBMzM4RTAwNTRDRTIzIC8qIEpTRE9NQ29udmVydEFueS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU0RPTUNvbnZlcnRBbnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJN0M4RTM0OTMxRTRBMzM4RTAwNTRDRTIzIC8qIEpTRE9NQ29udmVydEJhc2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNET01Db252ZXJ0QmFzZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3QzhFMzQ5NDFFNEEzMzhFMDA1NENFMjMgLyogSlNET01D
b252ZXJ0Qm9vbGVhbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0RPTUNv
bnZlcnRCb29sZWFuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNTE4Niw2ICsy
NTE4Nyw3IEBACiAJCQkJODRCNkI5NzYxMjBGMTNFNTAwQjhFRkFGIC8qIFNWR1BhdGhTZWdMaXN0
U291cmNlLmggKi8sCiAJCQkJQjIyMjc4RUYwRDAwQkYyMTAwNzFCNzgyIC8qIFNWR1BhdGhTZWdN
b3ZldG9BYnMuaWRsICovLAogCQkJCUIyMjI3OEYwMEQwMEJGMjEwMDcxQjc4MiAvKiBTVkdQYXRo
U2VnTW92ZXRvUmVsLmlkbCAqLywKKwkJCQk3Qzg4MjRDNDI0OUQ3QjA1MDBFRDhGQzQgLyogU1ZH
UGF0aFNlZ1ZhbHVlLmggKi8sCiAJCQkJODQzMDBCRDcxMjBDOUFENDAwMjE5NTRBIC8qIFNWR1Bh
dGhTb3VyY2UuaCAqLywKIAkJCQk4NDE5RDJCNzEyMEUwQzc2MDAxNDFGOEYgLyogU1ZHUGF0aFN0
cmluZ0J1aWxkZXIuY3BwICovLAogCQkJCTg0MTlEMkI4MTIwRTBDNzYwMDE0MUY4RiAvKiBTVkdQ
YXRoU3RyaW5nQnVpbGRlci5oICovLApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuZ2xl
VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmdsZVZhbHVl
LmNwcAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuZ2xlVmFs
dWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3IEBAIFN0cmluZyBTVkdBbmdsZVZh
bHVlOjp2YWx1ZUFzU3RyaW5nKCkgY28KICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgU1ZHQW5nbGVWYWx1ZTo6VHlwZSBwYXJzZUFuZ2xlVHlwZShjb25zdCBVQ2hhciog
cHRyLCBjb25zdCBVQ2hhciogZW5kKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4g
c3RhdGljIGlubGluZSBTVkdBbmdsZVZhbHVlOjpUeXBlIHBhcnNlQW5nbGVUeXBlKGNvbnN0IENo
YXJhY3RlclR5cGUqIHB0ciwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kKQogewogICAgIHN3aXRj
aCAoZW5kIC0gcHRyKSB7CiAgICAgY2FzZSAwOgpAQCAtMTA2LDIxICsxMDYsMjkgQEAgRXhjZXB0
aW9uT3I8dm9pZD4gU1ZHQW5nbGVWYWx1ZTo6c2V0VmFsdQogICAgICAgICByZXR1cm4geyB9Owog
ICAgIH0KIAotICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyh2YWx1
ZSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIqIHB0ciA9IHVwY29u
dmVydGVkQ2hhcmFjdGVyczsKLSAgICBjb25zdCBVQ2hhciogZW5kID0gcHRyICsgdmFsdWUubGVu
Z3RoKCk7Ci0KLSAgICBmbG9hdCB2YWx1ZUluU3BlY2lmaWVkVW5pdHMgPSAwOwotICAgIGlmICgh
cGFyc2VOdW1iZXIocHRyLCBlbmQsIHZhbHVlSW5TcGVjaWZpZWRVbml0cywgZmFsc2UpKQotICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKLQotICAgIGF1dG8gdW5pdFR5
cGUgPSBwYXJzZUFuZ2xlVHlwZShwdHIsIGVuZCk7Ci0gICAgaWYgKHVuaXRUeXBlID09IFNWR19B
TkdMRVRZUEVfVU5LTk9XTikKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9y
IH07CisgICAgYXV0byBoZWxwZXIgPSBbJl0oY29uc3QgYXV0byogcHRyLCBjb25zdCBhdXRvKiBl
bmQpIC0+IEV4Y2VwdGlvbk9yPHZvaWQ+IHsKKyAgICAgICAgYXV0byB2YWx1ZUluU3BlY2lmaWVk
VW5pdHMgPSBwYXJzZU51bWJlcihwdHIsIGVuZCwgU3VmZml4U2tpcHBpbmdQb2xpY3k6OkRvbnRT
a2lwKTsKKyAgICAgICAgaWYgKCF2YWx1ZUluU3BlY2lmaWVkVW5pdHMpCisgICAgICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKKworICAgICAgICBhdXRvIHVuaXRUeXBl
ID0gcGFyc2VBbmdsZVR5cGUocHRyLCBlbmQpOworICAgICAgICBpZiAodW5pdFR5cGUgPT0gU1ZH
QW5nbGVWYWx1ZTo6U1ZHX0FOR0xFVFlQRV9VTktOT1dOKQorICAgICAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiAKLSAgICBtX3VuaXRUeXBlID0gdW5pdFR5cGU7Ci0g
ICAgbV92YWx1ZUluU3BlY2lmaWVkVW5pdHMgPSB2YWx1ZUluU3BlY2lmaWVkVW5pdHM7Ci0gICAg
cmV0dXJuIHsgfTsKKyAgICAgICAgbV91bml0VHlwZSA9IHVuaXRUeXBlOworICAgICAgICBtX3Zh
bHVlSW5TcGVjaWZpZWRVbml0cyA9ICp2YWx1ZUluU3BlY2lmaWVkVW5pdHM7CisgICAgICAgIHJl
dHVybiB7IH07CisgICAgfTsKKworICAgIGlmICh2YWx1ZS5pczhCaXQoKSkgeworICAgICAgICBj
b25zdCBhdXRvKiBwdHIgPSB2YWx1ZS5jaGFyYWN0ZXJzOCgpOworICAgICAgICBjb25zdCBhdXRv
KiBlbmQgPSBwdHIgKyB2YWx1ZS5sZW5ndGgoKTsKKyAgICAgICAgcmV0dXJuIGhlbHBlcihwdHIs
IGVuZCk7CisgICAgfQorCisgICAgY29uc3QgYXV0byogcHRyID0gdmFsdWUuY2hhcmFjdGVyczE2
KCk7CisgICAgY29uc3QgYXV0byogZW5kID0gcHRyICsgdmFsdWUubGVuZ3RoKCk7CisgICAgcmV0
dXJuIGhlbHBlcihwdHIsIGVuZCk7CiB9CiAKIEV4Y2VwdGlvbk9yPHZvaWQ+IFNWR0FuZ2xlVmFs
dWU6Om5ld1ZhbHVlU3BlY2lmaWVkVW5pdHModW5zaWduZWQgc2hvcnQgdW5pdFR5cGUsIGZsb2F0
IHZhbHVlSW5TcGVjaWZpZWRVbml0cykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmlt
YXRlTW90aW9uRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTYxLDcgKzE2MSw3IEBAIHZvaWQgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OnN0b3BBbmltYXQK
IAogYm9vbCBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6Y2FsY3VsYXRlVG9BdEVuZE9mRHVyYXRp
b25WYWx1ZShjb25zdCBTdHJpbmcmIHRvQXRFbmRPZkR1cmF0aW9uU3RyaW5nKQogewotICAgIHBh
cnNlUG9pbnQodG9BdEVuZE9mRHVyYXRpb25TdHJpbmcsIG1fdG9Qb2ludEF0RW5kT2ZEdXJhdGlv
bik7CisgICAgbV90b1BvaW50QXRFbmRPZkR1cmF0aW9uID0gcGFyc2VQb2ludCh0b0F0RW5kT2ZE
dXJhdGlvblN0cmluZykudmFsdWVPcihGbG9hdFBvaW50IHsgfSk7CiAgICAgbV9oYXNUb1BvaW50
QXRFbmRPZkR1cmF0aW9uID0gdHJ1ZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTE2OSw4ICsx
NjksOCBAQCBib29sIFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OjpjYWxjdWxhdGVUCiBib29sIFNW
R0FuaW1hdGVNb3Rpb25FbGVtZW50OjpjYWxjdWxhdGVGcm9tQW5kVG9WYWx1ZXMoY29uc3QgU3Ry
aW5nJiBmcm9tU3RyaW5nLCBjb25zdCBTdHJpbmcmIHRvU3RyaW5nKQogewogICAgIG1faGFzVG9Q
b2ludEF0RW5kT2ZEdXJhdGlvbiA9IGZhbHNlOwotICAgIHBhcnNlUG9pbnQoZnJvbVN0cmluZywg
bV9mcm9tUG9pbnQpOwotICAgIHBhcnNlUG9pbnQodG9TdHJpbmcsIG1fdG9Qb2ludCk7CisgICAg
bV9mcm9tUG9pbnQgPSBwYXJzZVBvaW50KGZyb21TdHJpbmcpLnZhbHVlT3IoRmxvYXRQb2ludCB7
IH0pOworICAgIG1fdG9Qb2ludCA9IHBhcnNlUG9pbnQodG9TdHJpbmcpLnZhbHVlT3IoRmxvYXRQ
b2ludCB7IH0pOwogICAgIHJldHVybiB0cnVlOwogfQogICAgIApAQCAtMTc5LDkgKzE3OSw4IEBA
IGJvb2wgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OmNhbGN1bGF0ZUYKICAgICBtX2hhc1RvUG9p
bnRBdEVuZE9mRHVyYXRpb24gPSBmYWxzZTsKICAgICBpZiAoYW5pbWF0aW9uTW9kZSgpID09IEFu
aW1hdGlvbk1vZGU6OkJ5ICYmICFpc0FkZGl0aXZlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBwYXJzZVBvaW50KGZyb21TdHJpbmcsIG1fZnJvbVBvaW50KTsKLSAgICBGbG9hdFBvaW50
IGJ5UG9pbnQ7Ci0gICAgcGFyc2VQb2ludChieVN0cmluZywgYnlQb2ludCk7CisgICAgbV9mcm9t
UG9pbnQgPSBwYXJzZVBvaW50KGZyb21TdHJpbmcpLnZhbHVlT3IoRmxvYXRQb2ludCB7IH0pOwor
ICAgIGF1dG8gYnlQb2ludCA9IHBhcnNlUG9pbnQoYnlTdHJpbmcpLnZhbHVlT3IoRmxvYXRQb2lu
dCB7IH0pOwogICAgIG1fdG9Qb2ludCA9IEZsb2F0UG9pbnQobV9mcm9tUG9pbnQueCgpICsgYnlQ
b2ludC54KCksIG1fZnJvbVBvaW50LnkoKSArIGJ5UG9pbnQueSgpKTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KQEAgLTI3NSwxMyArMjc0LDEzIEBAIHZvaWQgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6
OmFwcGx5UmVzdWwKIAogT3B0aW9uYWw8ZmxvYXQ+IFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50Ojpj
YWxjdWxhdGVEaXN0YW5jZShjb25zdCBTdHJpbmcmIGZyb21TdHJpbmcsIGNvbnN0IFN0cmluZyYg
dG9TdHJpbmcpCiB7Ci0gICAgRmxvYXRQb2ludCBmcm9tOwotICAgIEZsb2F0UG9pbnQgdG87Ci0g
ICAgaWYgKCFwYXJzZVBvaW50KGZyb21TdHJpbmcsIGZyb20pKQorICAgIGF1dG8gZnJvbSA9IHBh
cnNlUG9pbnQoZnJvbVN0cmluZyk7CisgICAgaWYgKCFmcm9tKQogICAgICAgICByZXR1cm4geyB9
OwotICAgIGlmICghcGFyc2VQb2ludCh0b1N0cmluZywgdG8pKQorICAgIGF1dG8gdG8gPSBwYXJz
ZVBvaW50KHRvU3RyaW5nKTsKKyAgICBpZiAoIXRvKQogICAgICAgICByZXR1cm4geyB9OwotICAg
IEZsb2F0U2l6ZSBkaWZmID0gdG8gLSBmcm9tOworICAgIGF1dG8gZGlmZiA9ICp0byAtICpmcm9t
OwogICAgIHJldHVybiBzdGQ6Omh5cG90KGRpZmYud2lkdGgoKSwgZGlmZi5oZWlnaHQoKSk7CiB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDI2MzE3NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsMTEgKzc3LDEwIEBAIGZhaWw6CiAgICAgcmVzdWx0
LmNsZWFyKCk7CiB9CiAKLXN0YXRpYyB2b2lkIHBhcnNlS2V5U3BsaW5lcyhjb25zdCBTdHJpbmcm
IHBhcnNlLCBWZWN0b3I8VW5pdEJlemllcj4mIHJlc3VsdCkKK3N0YXRpYyBPcHRpb25hbDxWZWN0
b3I8VW5pdEJlemllcj4+IHBhcnNlS2V5U3BsaW5lcyhjb25zdCBTdHJpbmcmIHBhcnNlKQogewot
ICAgIHJlc3VsdC5jbGVhcigpOwogICAgIGlmIChwYXJzZS5pc0VtcHR5KCkpCi0gICAgICAgIHJl
dHVybjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIGF1dG8gdXBjb252ZXJ0
ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyhwYXJzZSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7
CiAgICAgY29uc3QgVUNoYXIqIGN1ciA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKQEAgLTg5LDMy
ICs4OCwyNiBAQCBzdGF0aWMgdm9pZCBwYXJzZUtleVNwbGluZXMoY29uc3QgU3RyaW5nCiAKICAg
ICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoY3VyLCBlbmQpOwogCisgICAgVmVjdG9yPFVuaXRCZXpp
ZXI+IHJlc3VsdDsKKwogICAgIGJvb2wgZGVsaW1QYXJzZWQgPSBmYWxzZTsKICAgICB3aGlsZSAo
Y3VyIDwgZW5kKSB7CiAgICAgICAgIGRlbGltUGFyc2VkID0gZmFsc2U7Ci0gICAgICAgIGZsb2F0
IHBvc0EgPSAwOwotICAgICAgICBpZiAoIXBhcnNlTnVtYmVyKGN1ciwgZW5kLCBwb3NBKSkgewot
ICAgICAgICAgICAgcmVzdWx0LmNsZWFyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLQotICAgICAgICBmbG9hdCBwb3NCID0gMDsKLSAgICAgICAgaWYgKCFwYXJzZU51bWJlcihj
dXIsIGVuZCwgcG9zQikpIHsKLSAgICAgICAgICAgIHJlc3VsdC5jbGVhcigpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZmxvYXQgcG9zQyA9IDA7Ci0gICAgICAg
IGlmICghcGFyc2VOdW1iZXIoY3VyLCBlbmQsIHBvc0MpKSB7Ci0gICAgICAgICAgICByZXN1bHQu
Y2xlYXIoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGZsb2F0
IHBvc0QgPSAwOwotICAgICAgICBpZiAoIXBhcnNlTnVtYmVyKGN1ciwgZW5kLCBwb3NELCBmYWxz
ZSkpIHsKLSAgICAgICAgICAgIHJlc3VsdC5jbGVhcigpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9CisgICAgICAgIGF1dG8gcG9zQSA9IHBhcnNlTnVtYmVyKGN1ciwgZW5kKTsKKyAg
ICAgICAgaWYgKCFwb3NBKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAg
ICAgICBhdXRvIHBvc0IgPSBwYXJzZU51bWJlcihjdXIsIGVuZCk7CisgICAgICAgIGlmICghcG9z
QikKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICAgICAgYXV0byBwb3ND
ID0gcGFyc2VOdW1iZXIoY3VyLCBlbmQpOworICAgICAgICBpZiAoIXBvc0MpCisgICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgICAgIGF1dG8gcG9zRCA9IHBhcnNlTnVtYmVy
KGN1ciwgZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNraXApOworICAgICAgICBpZiAo
IXBvc0QpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgICAgIHNraXBP
cHRpb25hbFNWR1NwYWNlcyhjdXIsIGVuZCk7CiAKQEAgLTEyMiwxMiArMTE1LDE2IEBAIHN0YXRp
YyB2b2lkIHBhcnNlS2V5U3BsaW5lcyhjb25zdCBTdHJpbmcKICAgICAgICAgICAgIGRlbGltUGFy
c2VkID0gdHJ1ZTsKICAgICAgICAgICAgIGN1cisrOwogICAgICAgICB9CisKICAgICAgICAgc2tp
cE9wdGlvbmFsU1ZHU3BhY2VzKGN1ciwgZW5kKTsKIAotICAgICAgICByZXN1bHQuYXBwZW5kKFVu
aXRCZXppZXIocG9zQSwgcG9zQiwgcG9zQywgcG9zRCkpOworICAgICAgICByZXN1bHQuYXBwZW5k
KFVuaXRCZXppZXIgeyAqcG9zQSwgKnBvc0IsICpwb3NDLCAqcG9zRCB9KTsKICAgICB9CisKICAg
ICBpZiAoIShjdXIgPT0gZW5kICYmICFkZWxpbVBhcnNlZCkpCi0gICAgICAgIHJlc3VsdC5jbGVh
cigpOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAogYm9vbCBTVkdBbmltYXRpb25FbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25z
dCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKQEAgLTE4MCw3ICsxNzcsOCBAQCB2b2lkIFNWR0Fu
aW1hdGlvbkVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlCiAgICAgfQogCiAgICAgaWYgKG5hbWUgPT0g
U1ZHTmFtZXM6OmtleVNwbGluZXNBdHRyKSB7Ci0gICAgICAgIHBhcnNlS2V5U3BsaW5lcyh2YWx1
ZSwgbV9rZXlTcGxpbmVzKTsKKyAgICAgICAgaWYgKGF1dG8ga2V5U3BsaW5lcyA9IHBhcnNlS2V5
U3BsaW5lcyh2YWx1ZSkpCisgICAgICAgICAgICBtX2tleVNwbGluZXMgPSBXVEZNb3ZlKCprZXlT
cGxpbmVzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuY3BwCShyZXZpc2lvbiAyNjMx
NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02NywxMCArNjcsMTAgQEAgdm9pZCBTVkdGRUNvbnZvbHZlTWF0
cml4RWxlbWVudDo6cGFyc2VBdAogICAgIH0KIAogICAgIGlmIChuYW1lID09IFNWR05hbWVzOjpv
cmRlckF0dHIpIHsKLSAgICAgICAgZmxvYXQgeCwgeTsKLSAgICAgICAgaWYgKHBhcnNlTnVtYmVy
T3B0aW9uYWxOdW1iZXIodmFsdWUsIHgsIHkpICYmIHggPj0gMSAmJiB5ID49IDEpIHsKLSAgICAg
ICAgICAgIG1fb3JkZXJYLT5zZXRCYXNlVmFsSW50ZXJuYWwoeCk7Ci0gICAgICAgICAgICBtX29y
ZGVyWS0+c2V0QmFzZVZhbEludGVybmFsKHkpOworICAgICAgICBhdXRvIHJlc3VsdCA9IHBhcnNl
TnVtYmVyT3B0aW9uYWxOdW1iZXIodmFsdWUpOworICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3Vs
dC0+Zmlyc3QgPj0gMSAmJiByZXN1bHQtPnNlY29uZCA+PSAxKSB7CisgICAgICAgICAgICBtX29y
ZGVyWC0+c2V0QmFzZVZhbEludGVybmFsKHJlc3VsdC0+Zmlyc3QpOworICAgICAgICAgICAgbV9v
cmRlclktPnNldEJhc2VWYWxJbnRlcm5hbChyZXN1bHQtPnNlY29uZCk7CiAgICAgICAgIH0gZWxz
ZQogICAgICAgICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVwb3J0V2Fy
bmluZygiZmVDb252b2x2ZU1hdHJpeDogcHJvYmxlbSBwYXJzaW5nIG9yZGVyPVwiIiArIHZhbHVl
ICsgIlwiLiBGaWx0ZXJlZCBlbGVtZW50IHdpbGwgbm90IGJlIGRpc3BsYXllZC4iKTsKICAgICAg
ICAgcmV0dXJuOwpAQCAtMTE1LDEwICsxMTUsMTAgQEAgdm9pZCBTVkdGRUNvbnZvbHZlTWF0cml4
RWxlbWVudDo6cGFyc2VBdAogICAgIH0KIAogICAgIGlmIChuYW1lID09IFNWR05hbWVzOjprZXJu
ZWxVbml0TGVuZ3RoQXR0cikgewotICAgICAgICBmbG9hdCB4LCB5OwotICAgICAgICBpZiAocGFy
c2VOdW1iZXJPcHRpb25hbE51bWJlcih2YWx1ZSwgeCwgeSkgJiYgeCA+IDAgJiYgeSA+IDApIHsK
LSAgICAgICAgICAgIG1fa2VybmVsVW5pdExlbmd0aFgtPnNldEJhc2VWYWxJbnRlcm5hbCh4KTsK
LSAgICAgICAgICAgIG1fa2VybmVsVW5pdExlbmd0aFktPnNldEJhc2VWYWxJbnRlcm5hbCh5KTsK
KyAgICAgICAgYXV0byByZXN1bHQgPSBwYXJzZU51bWJlck9wdGlvbmFsTnVtYmVyKHZhbHVlKTsK
KyAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQtPmZpcnN0ID4gMCAmJiByZXN1bHQtPnNlY29u
ZCA+IDApIHsKKyAgICAgICAgICAgIG1fa2VybmVsVW5pdExlbmd0aFgtPnNldEJhc2VWYWxJbnRl
cm5hbChyZXN1bHQtPmZpcnN0KTsKKyAgICAgICAgICAgIG1fa2VybmVsVW5pdExlbmd0aFktPnNl
dEJhc2VWYWxJbnRlcm5hbChyZXN1bHQtPnNlY29uZCk7CiAgICAgICAgIH0gZWxzZQogICAgICAg
ICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVwb3J0V2FybmluZygiZmVD
b252b2x2ZU1hdHJpeDogcHJvYmxlbSBwYXJzaW5nIGtlcm5lbFVuaXRMZW5ndGg9XCIiICsgdmFs
dWUgKyAiXCIuIEZpbHRlcmVkIGVsZW1lbnQgd2lsbCBub3QgYmUgZGlzcGxheWVkLiIpOwogICAg
ICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRp
bmdFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZm
dXNlTGlnaHRpbmdFbGVtZW50LmNwcAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTcxLDEwICs3MSw5IEBAIHZvaWQgU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjpwYXJzZUEK
ICAgICB9CiAKICAgICBpZiAobmFtZSA9PSBTVkdOYW1lczo6a2VybmVsVW5pdExlbmd0aEF0dHIp
IHsKLSAgICAgICAgZmxvYXQgeCwgeTsKLSAgICAgICAgaWYgKHBhcnNlTnVtYmVyT3B0aW9uYWxO
dW1iZXIodmFsdWUsIHgsIHkpKSB7Ci0gICAgICAgICAgICBtX2tlcm5lbFVuaXRMZW5ndGhYLT5z
ZXRCYXNlVmFsSW50ZXJuYWwoeCk7Ci0gICAgICAgICAgICBtX2tlcm5lbFVuaXRMZW5ndGhZLT5z
ZXRCYXNlVmFsSW50ZXJuYWwoeSk7CisgICAgICAgIGlmIChhdXRvIHJlc3VsdCA9IHBhcnNlTnVt
YmVyT3B0aW9uYWxOdW1iZXIodmFsdWUpKSB7CisgICAgICAgICAgICBtX2tlcm5lbFVuaXRMZW5n
dGhYLT5zZXRCYXNlVmFsSW50ZXJuYWwocmVzdWx0LT5maXJzdCk7CisgICAgICAgICAgICBtX2tl
cm5lbFVuaXRMZW5ndGhZLT5zZXRCYXNlVmFsSW50ZXJuYWwocmVzdWx0LT5zZWNvbmQpOwogICAg
ICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVEcm9wU2hhZG93RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuY3BwCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTYxLDEwICs2MSw5IEBAIHZvaWQgU1ZHRkVEcm9wU2hhZG93RWxlbWVudDo6c2V0U3RkRGV2
aWEKIHZvaWQgU1ZHRkVEcm9wU2hhZG93RWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVh
bGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbVN0cmluZyYgdmFsdWUpCiB7CiAgICAgaWYgKG5h
bWUgPT0gU1ZHTmFtZXM6OnN0ZERldmlhdGlvbkF0dHIpIHsKLSAgICAgICAgZmxvYXQgeCwgeTsK
LSAgICAgICAgaWYgKHBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIodmFsdWUsIHgsIHkpKSB7Ci0g
ICAgICAgICAgICBtX3N0ZERldmlhdGlvblgtPnNldEJhc2VWYWxJbnRlcm5hbCh4KTsKLSAgICAg
ICAgICAgIG1fc3RkRGV2aWF0aW9uWS0+c2V0QmFzZVZhbEludGVybmFsKHkpOworICAgICAgICBp
ZiAoYXV0byByZXN1bHQgPSBwYXJzZU51bWJlck9wdGlvbmFsTnVtYmVyKHZhbHVlKSkgeworICAg
ICAgICAgICAgbV9zdGREZXZpYXRpb25YLT5zZXRCYXNlVmFsSW50ZXJuYWwocmVzdWx0LT5maXJz
dCk7CisgICAgICAgICAgICBtX3N0ZERldmlhdGlvblktPnNldEJhc2VWYWxJbnRlcm5hbChyZXN1
bHQtPnNlY29uZCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwCShyZXZp
c2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsMTAgKzYwLDkgQEAgdm9pZCBTVkdGRUdhdXNz
aWFuQmx1ckVsZW1lbnQ6OnNldFN0ZERldgogdm9pZCBTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6
OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21TdHJp
bmcmIHZhbHVlKQogewogICAgIGlmIChuYW1lID09IFNWR05hbWVzOjpzdGREZXZpYXRpb25BdHRy
KSB7Ci0gICAgICAgIGZsb2F0IHgsIHk7Ci0gICAgICAgIGlmIChwYXJzZU51bWJlck9wdGlvbmFs
TnVtYmVyKHZhbHVlLCB4LCB5KSkgewotICAgICAgICAgICAgbV9zdGREZXZpYXRpb25YLT5zZXRC
YXNlVmFsSW50ZXJuYWwoeCk7Ci0gICAgICAgICAgICBtX3N0ZERldmlhdGlvblktPnNldEJhc2VW
YWxJbnRlcm5hbCh5KTsKKyAgICAgICAgaWYgKGF1dG8gcmVzdWx0ID0gcGFyc2VOdW1iZXJPcHRp
b25hbE51bWJlcih2YWx1ZSkpIHsKKyAgICAgICAgICAgIG1fc3RkRGV2aWF0aW9uWC0+c2V0QmFz
ZVZhbEludGVybmFsKHJlc3VsdC0+Zmlyc3QpOworICAgICAgICAgICAgbV9zdGREZXZpYXRpb25Z
LT5zZXRCYXNlVmFsSW50ZXJuYWwocmVzdWx0LT5zZWNvbmQpOwogICAgICAgICB9CiAgICAgICAg
IHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDI2MzE3NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdl
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNyw5ICsxMTcsNyBAQCB2b2lkIFNWR0ZF
SW1hZ2VFbGVtZW50OjpidWlsZFBlbmRpbmdSZXNvCiB2b2lkIFNWR0ZFSW1hZ2VFbGVtZW50Ojpw
YXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9tU3RyaW5n
JiB2YWx1ZSkKIHsKICAgICBpZiAobmFtZSA9PSBTVkdOYW1lczo6cHJlc2VydmVBc3BlY3RSYXRp
b0F0dHIpIHsKLSAgICAgICAgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlIHByZXNlcnZlQXNw
ZWN0UmF0aW87Ci0gICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW8ucGFyc2UodmFsdWUpOwotICAg
ICAgICBtX3ByZXNlcnZlQXNwZWN0UmF0aW8tPnNldEJhc2VWYWxJbnRlcm5hbChwcmVzZXJ2ZUFz
cGVjdFJhdGlvKTsKKyAgICAgICAgbV9wcmVzZXJ2ZUFzcGVjdFJhdGlvLT5zZXRCYXNlVmFsSW50
ZXJuYWwoU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlIHsgdmFsdWUgfSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9s
b2d5RWxlbWVudC5jcHAJKHJldmlzaW9uIDI2MzE3NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRU1vcnBob2xvZ3lFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsMTAgKzcxLDkg
QEAgdm9pZCBTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpwYXJzZUF0dHJpYgogICAgIH0KIAogICAg
IGlmIChuYW1lID09IFNWR05hbWVzOjpyYWRpdXNBdHRyKSB7Ci0gICAgICAgIGZsb2F0IHgsIHk7
Ci0gICAgICAgIGlmIChwYXJzZU51bWJlck9wdGlvbmFsTnVtYmVyKHZhbHVlLCB4LCB5KSkgewot
ICAgICAgICAgICAgbV9yYWRpdXNYLT5zZXRCYXNlVmFsSW50ZXJuYWwoeCk7Ci0gICAgICAgICAg
ICBtX3JhZGl1c1ktPnNldEJhc2VWYWxJbnRlcm5hbCh5KTsKKyAgICAgICAgaWYgKGF1dG8gcmVz
dWx0ID0gcGFyc2VOdW1iZXJPcHRpb25hbE51bWJlcih2YWx1ZSkpIHsKKyAgICAgICAgICAgIG1f
cmFkaXVzWC0+c2V0QmFzZVZhbEludGVybmFsKHJlc3VsdC0+Zmlyc3QpOworICAgICAgICAgICAg
bV9yYWRpdXNZLT5zZXRCYXNlVmFsSW50ZXJuYWwocmVzdWx0LT5zZWNvbmQpOwogICAgICAgICB9
CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVT
cGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuY3BwCShyZXZpc2lvbiAyNjMxNzYpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTc4LDEwICs3OCw5IEBAIHZvaWQgU1ZHRkVTcGVjdWxhckxpZ2h0aW5n
RWxlbWVudDo6cGFyc2UKICAgICB9CiAKICAgICBpZiAobmFtZSA9PSBTVkdOYW1lczo6a2VybmVs
VW5pdExlbmd0aEF0dHIpIHsKLSAgICAgICAgZmxvYXQgeCwgeTsKLSAgICAgICAgaWYgKHBhcnNl
TnVtYmVyT3B0aW9uYWxOdW1iZXIodmFsdWUsIHgsIHkpKSB7Ci0gICAgICAgICAgICBtX2tlcm5l
bFVuaXRMZW5ndGhYLT5zZXRCYXNlVmFsSW50ZXJuYWwoeCk7Ci0gICAgICAgICAgICBtX2tlcm5l
bFVuaXRMZW5ndGhZLT5zZXRCYXNlVmFsSW50ZXJuYWwoeSk7CisgICAgICAgIGlmIChhdXRvIHJl
c3VsdCA9IHBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIodmFsdWUpKSB7CisgICAgICAgICAgICBt
X2tlcm5lbFVuaXRMZW5ndGhYLT5zZXRCYXNlVmFsSW50ZXJuYWwocmVzdWx0LT5maXJzdCk7Cisg
ICAgICAgICAgICBtX2tlcm5lbFVuaXRMZW5ndGhZLT5zZXRCYXNlVmFsSW50ZXJuYWwocmVzdWx0
LT5zZWNvbmQpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAy
NjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY3LDEwICs2Nyw5IEBAIHZvaWQgU1ZHRkVUdXJidWxlbmNlRWxl
bWVudDo6cGFyc2VBdHRyaWIKICAgICB9CiAKICAgICBpZiAobmFtZSA9PSBTVkdOYW1lczo6YmFz
ZUZyZXF1ZW5jeUF0dHIpIHsKLSAgICAgICAgZmxvYXQgeCwgeTsKLSAgICAgICAgaWYgKHBhcnNl
TnVtYmVyT3B0aW9uYWxOdW1iZXIodmFsdWUsIHgsIHkpKSB7Ci0gICAgICAgICAgICBtX2Jhc2VG
cmVxdWVuY3lYLT5zZXRCYXNlVmFsSW50ZXJuYWwoeCk7Ci0gICAgICAgICAgICBtX2Jhc2VGcmVx
dWVuY3lZLT5zZXRCYXNlVmFsSW50ZXJuYWwoeSk7CisgICAgICAgIGlmIChhdXRvIHJlc3VsdCA9
IHBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIodmFsdWUpKSB7CisgICAgICAgICAgICBtX2Jhc2VG
cmVxdWVuY3lYLT5zZXRCYXNlVmFsSW50ZXJuYWwocmVzdWx0LT5maXJzdCk7CisgICAgICAgICAg
ICBtX2Jhc2VGcmVxdWVuY3lZLT5zZXRCYXNlVmFsSW50ZXJuYWwocmVzdWx0LT5zZWNvbmQpOwog
ICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRml0VG9WaWV3Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRml0VG9WaWV3Qm94LmNwcAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZpdFRvVmlld0JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDczICs2Niw3MSBA
QCB2b2lkIFNWR0ZpdFRvVmlld0JveDo6cmVzZXQoKQogYm9vbCBTVkdGaXRUb1ZpZXdCb3g6OnBh
cnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21TdHJpbmcm
IHZhbHVlKQogewogICAgIGlmIChuYW1lID09IFNWR05hbWVzOjp2aWV3Qm94QXR0cikgewotICAg
ICAgICBGbG9hdFJlY3Qgdmlld0JveDsKLSAgICAgICAgaWYgKCF2YWx1ZS5pc051bGwoKSAmJiBw
YXJzZVZpZXdCb3godmFsdWUsIHZpZXdCb3gpKQotICAgICAgICAgICAgc2V0Vmlld0JveCh2aWV3
Qm94KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVzZXRWaWV3Qm94KCk7CisgICAgICAg
IGlmICghdmFsdWUuaXNOdWxsKCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIHJlc3VsdCA9IHBh
cnNlVmlld0JveCh2YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICBzZXRWaWV3Qm94KFdURk1vdmUo
KnJlc3VsdCkpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIHJlc2V0Vmlld0JveCgpOwogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CiAKICAgICBpZiAobmFtZSA9PSBTVkdOYW1lczo6cHJlc2VydmVBc3BlY3RSYXRpb0F0
dHIpIHsKLSAgICAgICAgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlIHByZXNlcnZlQXNwZWN0
UmF0aW87Ci0gICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW8ucGFyc2UodmFsdWUpOwotICAgICAg
ICBzZXRQcmVzZXJ2ZUFzcGVjdFJhdGlvKHByZXNlcnZlQXNwZWN0UmF0aW8pOworICAgICAgICBz
ZXRQcmVzZXJ2ZUFzcGVjdFJhdGlvKFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSB7IHZhbHVl
IH0pOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLWJvb2wgU1ZHRml0VG9WaWV3Qm94OjpwYXJzZVZpZXdCb3goY29uc3QgQXRvbVN0cmluZyYg
dmFsdWUsIEZsb2F0UmVjdCYgdmlld0JveCkKK09wdGlvbmFsPEZsb2F0UmVjdD4gU1ZHRml0VG9W
aWV3Qm94OjpwYXJzZVZpZXdCb3goY29uc3QgQXRvbVN0cmluZyYgdmFsdWUpCiB7CiAgICAgYXV0
byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KHZhbHVlKS51cGNvbnZlcnRlZENo
YXJhY3RlcnMoKTsKICAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycyA9IHVwY29udmVydGVkQ2hh
cmFjdGVyczsKLSAgICByZXR1cm4gcGFyc2VWaWV3Qm94KGNoYXJhY3RlcnMsIGNoYXJhY3RlcnMg
KyB2YWx1ZS5sZW5ndGgoKSwgdmlld0JveCk7CisgICAgcmV0dXJuIHBhcnNlVmlld0JveChjaGFy
YWN0ZXJzLCBjaGFyYWN0ZXJzICsgdmFsdWUubGVuZ3RoKCkpOwogfQogCi1ib29sIFNWR0ZpdFRv
Vmlld0JveDo6cGFyc2VWaWV3Qm94KGNvbnN0IFVDaGFyKiYgYywgY29uc3QgVUNoYXIqIGVuZCwg
RmxvYXRSZWN0JiB2aWV3Qm94LCBib29sIHZhbGlkYXRlKQorT3B0aW9uYWw8RmxvYXRSZWN0PiBT
VkdGaXRUb1ZpZXdCb3g6OnBhcnNlVmlld0JveChjb25zdCBVQ2hhciomIGMsIGNvbnN0IFVDaGFy
KiBlbmQsIGJvb2wgdmFsaWRhdGUpCiB7Ci0gICAgU3RyaW5nIHN0cihjLCBlbmQgLSBjKTsKKyAg
ICBTdHJpbmdWaWV3IHN0cihjLCBlbmQgLSBjKTsKIAogICAgIHNraXBPcHRpb25hbFNWR1NwYWNl
cyhjLCBlbmQpOwogCi0gICAgZmxvYXQgeCA9IDAuMGY7Ci0gICAgZmxvYXQgeSA9IDAuMGY7Ci0g
ICAgZmxvYXQgd2lkdGggPSAwLjBmOwotICAgIGZsb2F0IGhlaWdodCA9IDAuMGY7Ci0gICAgYm9v
bCB2YWxpZCA9IHBhcnNlTnVtYmVyKGMsIGVuZCwgeCkgJiYgcGFyc2VOdW1iZXIoYywgZW5kLCB5
KSAmJiBwYXJzZU51bWJlcihjLCBlbmQsIHdpZHRoKSAmJiBwYXJzZU51bWJlcihjLCBlbmQsIGhl
aWdodCwgZmFsc2UpOworICAgIGF1dG8geCA9IHBhcnNlTnVtYmVyKGMsIGVuZCk7CisgICAgYXV0
byB5ID0gcGFyc2VOdW1iZXIoYywgZW5kKTsKKyAgICBhdXRvIHdpZHRoID0gcGFyc2VOdW1iZXIo
YywgZW5kKTsKKyAgICBhdXRvIGhlaWdodCA9IHBhcnNlTnVtYmVyKGMsIGVuZCwgU3VmZml4U2tp
cHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsKIAogICAgIGlmICh2YWxpZGF0ZSkgewogICAgICAgICBE
b2N1bWVudCYgZG9jdW1lbnQgPSBtX3ZpZXdCb3gtPmNvbnRleHRFbGVtZW50KCktPmRvY3VtZW50
KCk7CiAKLSAgICAgICAgaWYgKCF2YWxpZCkgewotICAgICAgICAgICAgZG9jdW1lbnQuYWNjZXNz
U1ZHRXh0ZW5zaW9ucygpLnJlcG9ydFdhcm5pbmcoIlByb2JsZW0gcGFyc2luZyB2aWV3Qm94PVwi
IiArIHN0ciArICJcIiIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAo
IXggfHwgIXkgfHwgIXdpZHRoIHx8ICFoZWlnaHQpIHsKKyAgICAgICAgICAgIGRvY3VtZW50LmFj
Y2Vzc1NWR0V4dGVuc2lvbnMoKS5yZXBvcnRXYXJuaW5nKG1ha2VTdHJpbmcoIlByb2JsZW0gcGFy
c2luZyB2aWV3Qm94PVwiIiwgc3RyLCAiXCIiKSk7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogICAgICAgICB9CiAKICAgICAgICAgLy8gQ2hlY2sgdGhhdCB3aWR0aCBpcyBwb3Np
dGl2ZS4KLSAgICAgICAgaWYgKHdpZHRoIDwgMC4wKSB7CisgICAgICAgIGlmICgqd2lkdGggPCAw
LjApIHsKICAgICAgICAgICAgIGRvY3VtZW50LmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5yZXBvcnRF
cnJvcigiQSBuZWdhdGl2ZSB2YWx1ZSBmb3IgVmlld0JveCB3aWR0aCBpcyBub3QgYWxsb3dlZCIp
OwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKICAgICAgICAgfQogCiAgICAgICAgIC8vIENoZWNrIHRoYXQgaGVpZ2h0IGlzIHBvc2l0
aXZlLgotICAgICAgICBpZiAoaGVpZ2h0IDwgMC4wKSB7CisgICAgICAgIGlmICgqaGVpZ2h0IDwg
MC4wKSB7CiAgICAgICAgICAgICBkb2N1bWVudC5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVwb3J0
RXJyb3IoIkEgbmVnYXRpdmUgdmFsdWUgZm9yIFZpZXdCb3ggaGVpZ2h0IGlzIG5vdCBhbGxvd2Vk
Iik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogICAgICAgICB9CiAKICAgICAgICAgLy8gTm90aGluZyBzaG91bGQgY29tZSBhZnRl
ciB0aGUgbGFzdCwgZm91cnRoIG51bWJlci4KICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2Vz
KGMsIGVuZCk7CiAgICAgICAgIGlmIChjIDwgZW5kKSB7Ci0gICAgICAgICAgICBkb2N1bWVudC5h
Y2Nlc3NTVkdFeHRlbnNpb25zKCkucmVwb3J0V2FybmluZygiUHJvYmxlbSBwYXJzaW5nIHZpZXdC
b3g9XCIiICsgc3RyICsgIlwiIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICBkb2N1bWVudC5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVwb3J0V2FybmluZyhtYWtlU3Ry
aW5nKCJQcm9ibGVtIHBhcnNpbmcgdmlld0JveD1cIiIsIHN0ciwgIlwiIikpOworICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgfQogICAgIH0KIAotICAgIHZpZXdCb3gg
PSB7IHgsIHksIHdpZHRoLCBoZWlnaHQgfTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4g
RmxvYXRSZWN0IHsgeC52YWx1ZU9yKDApLCB5LnZhbHVlT3IoMCksIHdpZHRoLnZhbHVlT3IoMCks
IGhlaWdodC52YWx1ZU9yKDApIH07CiB9CiAKIEFmZmluZVRyYW5zZm9ybSBTVkdGaXRUb1ZpZXdC
b3g6OnZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0oY29uc3QgRmxvYXRSZWN0JiB2aWV3Qm94UmVjdCwg
Y29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJiBwcmVzZXJ2ZUFzcGVjdFJhdGlvLCBm
bG9hdCB2aWV3V2lkdGgsIGZsb2F0IHZpZXdIZWlnaHQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRml0VG9WaWV3Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZpdFRvVmlld0JveC5oCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRml0VG9WaWV3Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDggKzY1LDggQEAgcHJvdGVj
dGVkOgogCiAgICAgdm9pZCByZXNldCgpOwogICAgIGJvb2wgcGFyc2VBdHRyaWJ1dGUoY29uc3Qg
UXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21TdHJpbmcmKTsKLSAgICBib29sIHBhcnNlVmlld0Jv
eChjb25zdCBBdG9tU3RyaW5nJiB2YWx1ZSwgRmxvYXRSZWN0JiB2aWV3Qm94KTsKLSAgICBib29s
IHBhcnNlVmlld0JveChjb25zdCBVQ2hhciomIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kLCBGbG9h
dFJlY3QmIHZpZXdCb3gsIGJvb2wgdmFsaWRhdGUgPSB0cnVlKTsKKyAgICBPcHRpb25hbDxGbG9h
dFJlY3Q+IHBhcnNlVmlld0JveChjb25zdCBBdG9tU3RyaW5nJiB2YWx1ZSk7CisgICAgT3B0aW9u
YWw8RmxvYXRSZWN0PiBwYXJzZVZpZXdCb3goY29uc3QgVUNoYXIqJiBzdGFydCwgY29uc3QgVUNo
YXIqIGVuZCwgYm9vbCB2YWxpZGF0ZSA9IHRydWUpOwogCiBwcml2YXRlOgogICAgIFJlZjxTVkdB
bmltYXRlZFJlY3Q+IG1fdmlld0JveDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHbHlw
aFJlZkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHbHlw
aFJlZkVsZW1lbnQuY3BwCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHR2x5cGhSZWZFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsMTAgKzU4LDcgQEAg
Ym9vbCBTVkdHbHlwaFJlZkVsZW1lbnQ6Omhhc1ZhbGlkR2x5cGhFbAogCiBzdGF0aWMgZmxvYXQg
cGFyc2VGbG9hdChjb25zdCBBdG9tU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBmbG9hdCByZXN1bHQ7
Ci0gICAgaWYgKCFwYXJzZU51bWJlckZyb21TdHJpbmcodmFsdWUsIHJlc3VsdCkpCi0gICAgICAg
IHJldHVybiAwOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIHBhcnNlTnVtYmVyKHZh
bHVlKS52YWx1ZU9yKDApOwogfQogCiB2b2lkIFNWR0dseXBoUmVmRWxlbWVudDo6cGFyc2VBdHRy
aWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbVN0cmluZyYgdmFsdWUp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHSEtlcm5FbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHSEtlcm5FbGVtZW50LmNwcAkocmV2aXNpb24gMjYz
MTc2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0hLZXJuRWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ0LDI0ICs0NCw0NCBAQCBSZWY8U1ZHSEtlcm5FbGVtZW50PiBTVkdIS2VybkVs
ZW1lbnQ6OmNyCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZHSEtlcm5FbGVtZW50KHRhZ05h
bWUsIGRvY3VtZW50KSk7CiB9CiAKLWJvb2wgU1ZHSEtlcm5FbGVtZW50OjpidWlsZEhvcml6b250
YWxLZXJuaW5nUGFpcihTVkdLZXJuaW5nUGFpciYga2VybmluZ1BhaXIpIGNvbnN0CitPcHRpb25h
bDxTVkdLZXJuaW5nUGFpcj4gU1ZHSEtlcm5FbGVtZW50OjpidWlsZEhvcml6b250YWxLZXJuaW5n
UGFpcigpIGNvbnN0CiB7CisgICAgLy8gRklYTUU6IENhbiB0aGlzIGJlIHNoYXJlZCB3aXRoIFNW
R1ZLZXJuRWxlbWVudDo6YnVpbGRWZXJ0aWNhbEtlcm5pbmdQYWlyCisKICAgICBhdXRvJiB1MSA9
IGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oU1ZHTmFtZXM6OnUxQXR0cik7CiAgICAg
YXV0byYgZzEgPSBhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFNWR05hbWVzOjpnMUF0
dHIpOwogICAgIGF1dG8mIHUyID0gYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihTVkdO
YW1lczo6dTJBdHRyKTsKICAgICBhdXRvJiBnMiA9IGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6
YXRpb24oU1ZHTmFtZXM6OmcyQXR0cik7CiAgICAgaWYgKCh1MS5pc0VtcHR5KCkgJiYgZzEuaXNF
bXB0eSgpKSB8fCAodTIuaXNFbXB0eSgpICYmIGcyLmlzRW1wdHkoKSkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIGF1dG8gZ2x5cGhO
YW1lMSA9IHBhcnNlR2x5cGhOYW1lKGcxKTsKKyAgICBpZiAoIWdseXBoTmFtZTEpCisgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgYXV0byBnbHlwaE5hbWUyID0gcGFyc2VHbHlwaE5h
bWUoZzIpOworICAgIGlmICghZ2x5cGhOYW1lMikKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKyAgICBhdXRvIHVuaWNvZGVTdHJpbmcxID0gcGFyc2VLZXJuaW5nVW5pY29kZVN0cmluZyh1
MSk7CisgICAgaWYgKCF1bmljb2RlU3RyaW5nMSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKyAgICBhdXRvIHVuaWNvZGVTdHJpbmcyID0gcGFyc2VLZXJuaW5nVW5pY29kZVN0cmluZyh1
Mik7CisgICAgaWYgKCF1bmljb2RlU3RyaW5nMikKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKworICAgIGJvb2wgb2sgPSBmYWxzZTsKKyAgICBhdXRvIGtlcm5pbmcgPSBhdHRyaWJ1dGVX
aXRob3V0U3luY2hyb25pemF0aW9uKFNWR05hbWVzOjprQXR0cikuc3RyaW5nKCkudG9GbG9hdCgm
b2spOworICAgIGlmICghb2spCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBp
ZiAocGFyc2VHbHlwaE5hbWUoZzEsIGtlcm5pbmdQYWlyLmdseXBoTmFtZTEpCi0gICAgICAgICYm
IHBhcnNlR2x5cGhOYW1lKGcyLCBrZXJuaW5nUGFpci5nbHlwaE5hbWUyKQotICAgICAgICAmJiBw
YXJzZUtlcm5pbmdVbmljb2RlU3RyaW5nKHUxLCBrZXJuaW5nUGFpci51bmljb2RlUmFuZ2UxLCBr
ZXJuaW5nUGFpci51bmljb2RlTmFtZTEpCi0gICAgICAgICYmIHBhcnNlS2VybmluZ1VuaWNvZGVT
dHJpbmcodTIsIGtlcm5pbmdQYWlyLnVuaWNvZGVSYW5nZTIsIGtlcm5pbmdQYWlyLnVuaWNvZGVO
YW1lMikpIHsKLSAgICAgICAgYm9vbCBvayA9IGZhbHNlOwotICAgICAgICBrZXJuaW5nUGFpci5r
ZXJuaW5nID0gYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihTVkdOYW1lczo6a0F0dHIp
LnN0cmluZygpLnRvRmxvYXQoJm9rKTsKLSAgICAgICAgcmV0dXJuIG9rOwotICAgIH0KLSAgICBy
ZXR1cm4gZmFsc2U7CisgICAgU1ZHS2VybmluZ1BhaXIga2VybmluZ1BhaXI7CisgICAga2Vybmlu
Z1BhaXIuZ2x5cGhOYW1lMSA9IFdURk1vdmUoKmdseXBoTmFtZTEpOworICAgIGtlcm5pbmdQYWly
LmdseXBoTmFtZTIgPSBXVEZNb3ZlKCpnbHlwaE5hbWUyKTsKKyAgICBrZXJuaW5nUGFpci51bmlj
b2RlUmFuZ2UxID0gV1RGTW92ZSh1bmljb2RlU3RyaW5nMS0+Zmlyc3QpOworICAgIGtlcm5pbmdQ
YWlyLnVuaWNvZGVOYW1lMSA9IFdURk1vdmUodW5pY29kZVN0cmluZzEtPnNlY29uZCk7CisgICAg
a2VybmluZ1BhaXIudW5pY29kZVJhbmdlMiA9IFdURk1vdmUodW5pY29kZVN0cmluZzItPmZpcnN0
KTsKKyAgICBrZXJuaW5nUGFpci51bmljb2RlTmFtZTIgPSBXVEZNb3ZlKHVuaWNvZGVTdHJpbmcy
LT5zZWNvbmQpOworICAgIGtlcm5pbmdQYWlyLmtlcm5pbmcgPSBrZXJuaW5nOworICAgIHJldHVy
biBrZXJuaW5nUGFpcjsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0hLZXJu
RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdIS2VybkVsZW1l
bnQuaAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0hLZXJuRWxl
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBAIGNsYXNzIFNWR0hLZXJuRWxl
bWVudCBmaW5hbCA6IHB1YmxpYyBTVkcKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPFNWR0hLZXJu
RWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCYpOwogCi0gICAg
Ym9vbCBidWlsZEhvcml6b250YWxLZXJuaW5nUGFpcihTVkdLZXJuaW5nUGFpciYga2VybmluZ1Bh
aXIpIGNvbnN0OworICAgIE9wdGlvbmFsPFNWR0tlcm5pbmdQYWlyPiBidWlsZEhvcml6b250YWxL
ZXJuaW5nUGFpcigpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIFNWR0hLZXJuRWxlbWVudChjb25z
dCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdJbWFnZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdJ
bWFnZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHSW1hZ2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksOSArNjksNyBAQCBib29s
IFNWR0ltYWdlRWxlbWVudDo6aGFzU2luZ2xlU2VjdXJpdHlPCiB2b2lkIFNWR0ltYWdlRWxlbWVu
dDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbVN0
cmluZyYgdmFsdWUpCiB7CiAgICAgaWYgKG5hbWUgPT0gU1ZHTmFtZXM6OnByZXNlcnZlQXNwZWN0
UmF0aW9BdHRyKSB7Ci0gICAgICAgIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSBwcmVzZXJ2
ZUFzcGVjdFJhdGlvOwotICAgICAgICBwcmVzZXJ2ZUFzcGVjdFJhdGlvLnBhcnNlKHZhbHVlKTsK
LSAgICAgICAgbV9wcmVzZXJ2ZUFzcGVjdFJhdGlvLT5zZXRCYXNlVmFsSW50ZXJuYWwocHJlc2Vy
dmVBc3BlY3RSYXRpbyk7CisgICAgICAgIG1fcHJlc2VydmVBc3BlY3RSYXRpby0+c2V0QmFzZVZh
bEludGVybmFsKFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSB7IHZhbHVlIH0pOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoVmFs
dWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMZW5ndGhWYWx1ZS5j
cHAJKHJldmlzaW9uIDI2MzE3NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMZW5ndGhWYWx1
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5MSwxMiArMjkxLDEyIEBAIEV4Y2VwdGlvbk9yPHZv
aWQ+IFNWR0xlbmd0aFZhbHVlOjpzZXRWYWwKICAgICBpZiAoc3RyaW5nLmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGZsb2F0IGNvbnZlcnRlZE51bWJlciA9IDA7CiAgICAg
YXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KHN0cmluZykudXBjb252ZXJ0
ZWRDaGFyYWN0ZXJzKCk7CiAgICAgY29uc3QgVUNoYXIqIHB0ciA9IHVwY29udmVydGVkQ2hhcmFj
dGVyczsKICAgICBjb25zdCBVQ2hhciogZW5kID0gcHRyICsgc3RyaW5nLmxlbmd0aCgpOwogCi0g
ICAgaWYgKCFwYXJzZU51bWJlcihwdHIsIGVuZCwgY29udmVydGVkTnVtYmVyLCBmYWxzZSkpCisg
ICAgYXV0byBjb252ZXJ0ZWROdW1iZXIgPSBwYXJzZU51bWJlcihwdHIsIGVuZCwgU3VmZml4U2tp
cHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsKKyAgICBpZiAoIWNvbnZlcnRlZE51bWJlcikKICAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiAKICAgICBhdXRvIGxlbmd0aFR5
cGUgPSBwYXJzZUxlbmd0aFR5cGUocHRyLCBlbmQpOwpAQCAtMzA0LDcgKzMwNCw3IEBAIEV4Y2Vw
dGlvbk9yPHZvaWQ+IFNWR0xlbmd0aFZhbHVlOjpzZXRWYWwKICAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IFN5bnRheEVycm9yIH07CiAKICAgICBtX2xlbmd0aFR5cGUgPSBsZW5ndGhUeXBlOwot
ICAgIG1fdmFsdWVJblNwZWNpZmllZFVuaXRzID0gY29udmVydGVkTnVtYmVyOworICAgIG1fdmFs
dWVJblNwZWNpZmllZFVuaXRzID0gKmNvbnZlcnRlZE51bWJlcjsKICAgICByZXR1cm4geyB9Owog
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTnVtYmVyTGlzdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdOdW1iZXJMaXN0LmgJKHJldmlzaW9uIDI2MzE3NikK
KysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdOdW1iZXJMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTU0LDcgKzU0LDYgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgY2xlYXJJdGVtcygpOwogCi0g
ICAgICAgIGZsb2F0IG51bWJlciA9IDA7CiAgICAgICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0
ZXJzID0gU3RyaW5nVmlldyh2YWx1ZSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7CiAgICAgICAg
IGNvbnN0IFVDaGFyKiBwdHIgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7CiAgICAgICAgIGNvbnN0
IFVDaGFyKiBlbmQgPSBwdHIgKyB2YWx1ZS5sZW5ndGgoKTsKQEAgLTYyLDkgKzYxLDEwIEBAIHB1
YmxpYzoKICAgICAgICAgLy8gVGhlIHNwZWMgKHNlY3Rpb24gNC4xKSBzdHJhbmdlbHkgZG9lc24n
dCBhbGxvdyBsZWFkaW5nIHdoaXRlc3BhY2UuCiAgICAgICAgIC8vIFdlIG1pZ2h0IGNob29zZSB0
byB2aW9sYXRlIHRoYXQgaW50ZW50aW9uYWxseS4KICAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCkg
ewotICAgICAgICAgICAgaWYgKCFwYXJzZU51bWJlcihwdHIsIGVuZCwgbnVtYmVyKSkKKyAgICAg
ICAgICAgIGF1dG8gbnVtYmVyID0gcGFyc2VOdW1iZXIocHRyLCBlbmQpOworICAgICAgICAgICAg
aWYgKCFudW1iZXIpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBhcHBlbmQo
U1ZHTnVtYmVyOjpjcmVhdGUobnVtYmVyKSk7CisgICAgICAgICAgICBhcHBlbmQoU1ZHTnVtYmVy
OjpjcmVhdGUoKm51bWJlcikpOwogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIHB0ciA9PSBl
bmQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmNwcAkocmV2
aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDE5ICs0MCwxOCBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUg
RmxvYXRUeXBlPiBzdGF0aWMgaW5sCiAvLyBXZSB1c2UgdGhpcyBnZW5lcmljIHBhcnNlTnVtYmVy
IGZ1bmN0aW9uIHRvIGFsbG93IHRoZSBQYXRoIHBhcnNpbmcgY29kZSB0byB3b3JrIAogLy8gYXQg
YSBoaWdoZXIgcHJlY2lzaW9uIGludGVybmFsbHksIHdpdGhvdXQgYW55IHVubmVjZXNzYXJ5IHJ1
bnRpbWUgY29zdCBvciBjb2RlCiAvLyBjb21wbGV4aXR5LgotdGVtcGxhdGUgPHR5cGVuYW1lIENo
YXJhY3RlclR5cGUsIHR5cGVuYW1lIEZsb2F0VHlwZT4gc3RhdGljIGJvb2wgZ2VuZXJpY1BhcnNl
TnVtYmVyKGNvbnN0IENoYXJhY3RlclR5cGUqJiBwdHIsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVu
ZCwgRmxvYXRUeXBlJiBudW1iZXIsIGJvb2wgc2tpcCkKKy8vIEZJWE1FOiBDYW4gdGhpcyBiZSBz
aGFyZWQvcmVwbGFjZWQgd2l0aCBudW1iZXIgcGFyc2luZyBpbiBXVEY/Cit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5hbWUgRmxvYXRUeXBlID0gZmxvYXQ+IHN0YXRpYyBP
cHRpb25hbDxGbG9hdFR5cGU+IGdlbmVyaWNQYXJzZU51bWJlcihjb25zdCBDaGFyYWN0ZXJUeXBl
KiYgcHRyLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQsIFN1ZmZpeFNraXBwaW5nUG9saWN5IHNr
aXAgPSBTdWZmaXhTa2lwcGluZ1BvbGljeTo6U2tpcCkKIHsKLSAgICBGbG9hdFR5cGUgaW50ZWdl
ciwgZGVjaW1hbCwgZnJhYywgZXhwb25lbnQ7Ci0gICAgaW50IHNpZ24sIGV4cHNpZ247CisgICAg
RmxvYXRUeXBlIG51bWJlciA9IDA7CisgICAgRmxvYXRUeXBlIGludGVnZXIgPSAwOworICAgIEZs
b2F0VHlwZSBkZWNpbWFsID0gMDsKKyAgICBGbG9hdFR5cGUgZnJhYyA9IDE7CisgICAgRmxvYXRU
eXBlIGV4cG9uZW50ID0gMDsKKyAgICBpbnQgc2lnbiA9IDE7CisgICAgaW50IGV4cHNpZ24gPSAx
OwogICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIHN0YXJ0ID0gcHRyOwogCi0gICAgZXhwb25lbnQg
PSAwOwotICAgIGludGVnZXIgPSAwOwotICAgIGZyYWMgPSAxOwotICAgIGRlY2ltYWwgPSAwOwot
ICAgIHNpZ24gPSAxOwotICAgIGV4cHNpZ24gPSAxOwotCiAgICAgLy8gcmVhZCB0aGUgc2lnbgog
ICAgIGlmIChwdHIgPCBlbmQgJiYgKnB0ciA9PSAnKycpCiAgICAgICAgIHB0cisrOwpAQCAtNjIs
NyArNjEsNyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5hCiAgICAg
fSAKICAgICAKICAgICBpZiAocHRyID09IGVuZCB8fCAoIWlzQVNDSUlEaWdpdCgqcHRyKSAmJiAq
cHRyICE9ICcuJykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKIAogICAgIC8vIHJlYWQgdGhlIGludGVnZXIgcGFydCwgYnVpbGQgcmlnaHQtdG8t
bGVmdAogICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIHB0clN0YXJ0SW50UGFydCA9IHB0cjsKQEAg
LTc4LDcgKzc3LDcgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHR5cGVuYQog
ICAgICAgICB9CiAgICAgICAgIC8vIEJhaWwgb3V0IGVhcmx5IGlmIHRoaXMgb3ZlcmZsb3dzLgog
ICAgICAgICBpZiAoIWlzVmFsaWRSYW5nZShpbnRlZ2VyKSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQogCiAgICAgaWYg
KHB0ciA8IGVuZCAmJiAqcHRyID09ICcuJykgeyAvLyByZWFkIHRoZSBkZWNpbWFscwpAQCAtODYs
NyArODUsNyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5hCiAgICAg
ICAgIAogICAgICAgICAvLyBUaGVyZSBtdXN0IGJlIGEgbGVhc3Qgb25lIGRpZ2l0IGZvbGxvd2lu
ZyB0aGUgLgogICAgICAgICBpZiAocHRyID49IGVuZCB8fCAhaXNBU0NJSURpZ2l0KCpwdHIpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKICAgICAgICAgCiAgICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgaXNBU0NJSURpZ2l0KCpw
dHIpKQogICAgICAgICAgICAgZGVjaW1hbCArPSAoKihwdHIrKykgLSAnMCcpICogKGZyYWMgKj0g
c3RhdGljX2Nhc3Q8RmxvYXRUeXBlPigwLjEpKTsKQEAgLTEwNyw3ICsxMDYsNyBAQCB0ZW1wbGF0
ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5hCiAgICAgICAgIAogICAgICAgICAvLyBU
aGVyZSBtdXN0IGJlIGFuIGV4cG9uZW50CiAgICAgICAgIGlmIChwdHIgPj0gZW5kIHx8ICFpc0FT
Q0lJRGlnaXQoKnB0cikpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgaXNBU0NJ
SURpZ2l0KCpwdHIpKSB7CiAgICAgICAgICAgICBleHBvbmVudCAqPSBzdGF0aWNfY2FzdDxGbG9h
dFR5cGU+KDEwKTsKQEAgLTExNiw3ICsxMTUsNyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZSwgdHlwZW5hCiAgICAgICAgIH0KICAgICAgICAgLy8gTWFrZSBzdXJlIGV4cG9uZW50
IGlzIHZhbGlkLgogICAgICAgICBpZiAoIWlzVmFsaWRSYW5nZShleHBvbmVudCkgfHwgZXhwb25l
bnQgPiBzdGQ6Om51bWVyaWNfbGltaXRzPEZsb2F0VHlwZT46Om1heF9leHBvbmVudCkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAg
ICAgfQogCiAgICAgbnVtYmVyID0gaW50ZWdlciArIGRlY2ltYWw7CkBAIC0xMjcsMTQyICsxMjYs
MTQ4IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCB0eXBlbmEKIAogICAgIC8v
IERvbid0IHJldHVybiBJbmZpbml0eSgpIG9yIE5hTigpLgogICAgIGlmICghaXNWYWxpZFJhbmdl
KG51bWJlcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIAogICAgIGlmIChzdGFydCA9PSBwdHIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGlmIChza2lwKQorICAgIGlmIChza2lw
ID09IFN1ZmZpeFNraXBwaW5nUG9saWN5OjpTa2lwKQogICAgICAgICBza2lwT3B0aW9uYWxTVkdT
cGFjZXNPckRlbGltaXRlcihwdHIsIGVuZCk7CiAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdGVt
cGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1ib29sIHBhcnNlU1ZHTnVtYmVyKENoYXJh
Y3RlclR5cGUqIGJlZ2luLCBzaXplX3QgbGVuZ3RoLCBkb3VibGUmIG51bWJlcikKLXsKLSAgICBj
b25zdCBDaGFyYWN0ZXJUeXBlKiBwdHIgPSBiZWdpbjsKLSAgICBjb25zdCBDaGFyYWN0ZXJUeXBl
KiBlbmQgPSBwdHIgKyBsZW5ndGg7Ci0gICAgcmV0dXJuIGdlbmVyaWNQYXJzZU51bWJlcihwdHIs
IGVuZCwgbnVtYmVyLCBmYWxzZSk7CisgICAgcmV0dXJuIG51bWJlcjsKIH0KIAotLy8gRXhwbGlj
aXRseSBpbnN0YW50aWF0ZSB0aGUgdHdvIGZsYXZvcnMgb2YgcGFyc2VTVkdOdW1iZXIoKSB0byBz
YXRpc2Z5IGV4dGVybmFsIGNhbGxlcnMKLXRlbXBsYXRlIGJvb2wgcGFyc2VTVkdOdW1iZXIoTENo
YXIqIGJlZ2luLCBzaXplX3QgbGVuZ3RoLCBkb3VibGUmKTsKLXRlbXBsYXRlIGJvb2wgcGFyc2VT
VkdOdW1iZXIoVUNoYXIqIGJlZ2luLCBzaXplX3QgbGVuZ3RoLCBkb3VibGUmKTsKLQotYm9vbCBw
YXJzZU51bWJlcihjb25zdCBMQ2hhciomIHB0ciwgY29uc3QgTENoYXIqIGVuZCwgZmxvYXQmIG51
bWJlciwgYm9vbCBza2lwKQorT3B0aW9uYWw8ZmxvYXQ+IHBhcnNlTnVtYmVyKGNvbnN0IExDaGFy
KiYgcHRyLCBjb25zdCBMQ2hhciogZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeSBza2lwKQogewot
ICAgIHJldHVybiBnZW5lcmljUGFyc2VOdW1iZXIocHRyLCBlbmQsIG51bWJlciwgc2tpcCk7Cisg
ICAgcmV0dXJuIGdlbmVyaWNQYXJzZU51bWJlcihwdHIsIGVuZCwgc2tpcCk7CiB9CiAKLWJvb2wg
cGFyc2VOdW1iZXIoY29uc3QgVUNoYXIqJiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQsIGZsb2F0JiBu
dW1iZXIsIGJvb2wgc2tpcCkgCitPcHRpb25hbDxmbG9hdD4gcGFyc2VOdW1iZXIoY29uc3QgVUNo
YXIqJiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQsIFN1ZmZpeFNraXBwaW5nUG9saWN5IHNraXApCiB7
Ci0gICAgcmV0dXJuIGdlbmVyaWNQYXJzZU51bWJlcihwdHIsIGVuZCwgbnVtYmVyLCBza2lwKTsK
KyAgICByZXR1cm4gZ2VuZXJpY1BhcnNlTnVtYmVyKHB0ciwgZW5kLCBza2lwKTsKIH0KIAotYm9v
bCBwYXJzZU51bWJlckZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0JiBudW1i
ZXIsIGJvb2wgc2tpcCkKK09wdGlvbmFsPGZsb2F0PiBwYXJzZU51bWJlcihjb25zdCBTdHJpbmcm
IHN0cmluZywgU3VmZml4U2tpcHBpbmdQb2xpY3kgc2tpcCkKIHsKICAgICBhdXRvIHVwY29udmVy
dGVkQ2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcoc3RyaW5nKS51cGNvbnZlcnRlZENoYXJhY3RlcnMo
KTsKICAgICBjb25zdCBVQ2hhciogcHRyID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOwogICAgIGNv
bnN0IFVDaGFyKiBlbmQgPSBwdHIgKyBzdHJpbmcubGVuZ3RoKCk7Ci0gICAgcmV0dXJuIGdlbmVy
aWNQYXJzZU51bWJlcihwdHIsIGVuZCwgbnVtYmVyLCBza2lwKSAmJiBwdHIgPT0gZW5kOworICAg
IGF1dG8gcmVzdWx0ID0gZ2VuZXJpY1BhcnNlTnVtYmVyKHB0ciwgZW5kLCBza2lwKTsKKyAgICBp
ZiAocHRyICE9IGVuZCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4g
cmVzdWx0OwogfQogCiAvLyBvbmx5IHVzZWQgdG8gcGFyc2UgbGFyZ2VBcmNGbGFnIGFuZCBzd2Vl
cEZsYWcgd2hpY2ggbXVzdCBiZSBhICIwIiBvciAiMSIKIC8vIGFuZCBtaWdodCBub3QgaGF2ZSBh
bnkgd2hpdGVzcGFjZS9jb21tYSBhZnRlciBpdAotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+Ci1ib29sIGdlbmVyaWNQYXJzZUFyY0ZsYWcoY29uc3QgQ2hhcmFjdGVyVHlwZSomIHB0
ciwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kLCBib29sJiBmbGFnKQordGVtcGxhdGUgPHR5cGVu
YW1lIENoYXJhY3RlclR5cGU+IE9wdGlvbmFsPGJvb2w+IGdlbmVyaWNQYXJzZUFyY0ZsYWcoY29u
c3QgQ2hhcmFjdGVyVHlwZSomIHB0ciwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kKQogewogICAg
IGlmIChwdHIgPj0gZW5kKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CisKICAgICBjb25zdCBDaGFyYWN0ZXJUeXBlIGZsYWdDaGFyID0gKnB0cisr
OworCisgICAgYm9vbCBmbGFnOwogICAgIGlmIChmbGFnQ2hhciA9PSAnMCcpCiAgICAgICAgIGZs
YWcgPSBmYWxzZTsKICAgICBlbHNlIGlmIChmbGFnQ2hhciA9PSAnMScpCiAgICAgICAgIGZsYWcg
PSB0cnVlOwogICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAorICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworCiAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxpbWl0
ZXIocHRyLCBlbmQpOwogICAgIAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmbGFnOwog
fQogCi1ib29sIHBhcnNlQXJjRmxhZyhjb25zdCBMQ2hhciomIHB0ciwgY29uc3QgTENoYXIqIGVu
ZCwgYm9vbCYgZmxhZykKK09wdGlvbmFsPGJvb2w+IHBhcnNlQXJjRmxhZyhjb25zdCBMQ2hhciom
IHB0ciwgY29uc3QgTENoYXIqIGVuZCkKIHsKLSAgICByZXR1cm4gZ2VuZXJpY1BhcnNlQXJjRmxh
ZyhwdHIsIGVuZCwgZmxhZyk7CisgICAgcmV0dXJuIGdlbmVyaWNQYXJzZUFyY0ZsYWcocHRyLCBl
bmQpOwogfQogCi1ib29sIHBhcnNlQXJjRmxhZyhjb25zdCBVQ2hhciomIHB0ciwgY29uc3QgVUNo
YXIqIGVuZCwgYm9vbCYgZmxhZykKK09wdGlvbmFsPGJvb2w+IHBhcnNlQXJjRmxhZyhjb25zdCBV
Q2hhciomIHB0ciwgY29uc3QgVUNoYXIqIGVuZCkKIHsKLSAgICByZXR1cm4gZ2VuZXJpY1BhcnNl
QXJjRmxhZyhwdHIsIGVuZCwgZmxhZyk7CisgICAgcmV0dXJuIGdlbmVyaWNQYXJzZUFyY0ZsYWco
cHRyLCBlbmQpOwogfQogCi1ib29sIHBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIoY29uc3QgU3Ry
aW5nJiBzLCBmbG9hdCYgeCwgZmxvYXQmIHkpCitPcHRpb25hbDxzdGQ6OnBhaXI8ZmxvYXQsIGZs
b2F0Pj4gcGFyc2VOdW1iZXJPcHRpb25hbE51bWJlcihjb25zdCBTdHJpbmcmIHMpCiB7CiAgICAg
aWYgKHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiAKICAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IFN0cmluZ1Zp
ZXcocykudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7CiAgICAgY29uc3QgVUNoYXIqIGN1ciA9IHVw
Y29udmVydGVkQ2hhcmFjdGVyczsKICAgICBjb25zdCBVQ2hhciogZW5kID0gY3VyICsgcy5sZW5n
dGgoKTsKIAotICAgIGlmICghcGFyc2VOdW1iZXIoY3VyLCBlbmQsIHgpKQotICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgYXV0byB4ID0gcGFyc2VOdW1iZXIoY3VyLCBlbmQpOworICAgIGlmICgh
eCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIGlmIChjdXIgPT0gZW5kKQot
ICAgICAgICB5ID0geDsKLSAgICBlbHNlIGlmICghcGFyc2VOdW1iZXIoY3VyLCBlbmQsIHksIGZh
bHNlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3Bh
aXIoKngsICp4KTsKIAotICAgIHJldHVybiBjdXIgPT0gZW5kOworICAgIGF1dG8geSA9IHBhcnNl
TnVtYmVyKGN1ciwgZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNraXApOworICAgIGlm
ICgheSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIGlmIChjdXIgIT0gZW5k
KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgcmV0dXJuIHN0ZDo6bWFrZV9w
YWlyKCp4LCAqeSk7CiB9CiAKLWJvb2wgcGFyc2VQb2ludChjb25zdCBTdHJpbmcmIHMsIEZsb2F0
UG9pbnQmIHBvaW50KQorT3B0aW9uYWw8RmxvYXRQb2ludD4gcGFyc2VQb2ludChjb25zdCBTdHJp
bmcmIHMpCiB7CiAgICAgaWYgKHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKICAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFj
dGVycyA9IFN0cmluZ1ZpZXcocykudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7CiAgICAgY29uc3Qg
VUNoYXIqIGN1ciA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKICAgICBjb25zdCBVQ2hhciogZW5k
ID0gY3VyICsgcy5sZW5ndGgoKTsKIAogICAgIGlmICghc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGN1
ciwgZW5kKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogCi0gICAgZmxvYXQgeCA9IDA7Ci0gICAgaWYgKCFwYXJzZU51bWJlcihjdXIsIGVuZCwg
eCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGZsb2F0IHkgPSAwOwotICAgIGlmICgh
cGFyc2VOdW1iZXIoY3VyLCBlbmQsIHkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBw
b2ludCA9IEZsb2F0UG9pbnQoeCwgeSk7CisgICAgYXV0byBwb2ludCA9IHBhcnNlRmxvYXRQb2lu
dChjdXIsIGVuZCk7CisgICAgaWYgKCFwb2ludCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKIAogICAgIC8vIERpc2FsbG93IGFueXRoaW5nIGV4Y2VwdCBzcGFjZXMgYXQgdGhlIGVuZC4K
LSAgICByZXR1cm4gIXNraXBPcHRpb25hbFNWR1NwYWNlcyhjdXIsIGVuZCk7CisgICAgaWYgKCFz
a2lwT3B0aW9uYWxTVkdTcGFjZXMoY3VyLCBlbmQpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworICAgIAorICAgIHJldHVybiBwb2ludDsKIH0KIAotYm9vbCBwYXJzZVJlY3QoY29uc3Qg
U3RyaW5nJiBzdHJpbmcsIEZsb2F0UmVjdCYgcmVjdCkKK09wdGlvbmFsPEZsb2F0UmVjdD4gcGFy
c2VSZWN0KGNvbnN0IFN0cmluZyYgc3RyaW5nKQogewogICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFy
YWN0ZXJzID0gU3RyaW5nVmlldyhzdHJpbmcpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwogICAg
IGNvbnN0IFVDaGFyKiBwdHIgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7CiAgICAgY29uc3QgVUNo
YXIqIGVuZCA9IHB0ciArIHN0cmluZy5sZW5ndGgoKTsKKyAgICAKICAgICBza2lwT3B0aW9uYWxT
VkdTcGFjZXMocHRyLCBlbmQpOwogICAgIAotICAgIGZsb2F0IHggPSAwOwotICAgIGZsb2F0IHkg
PSAwOwotICAgIGZsb2F0IHdpZHRoID0gMDsKLSAgICBmbG9hdCBoZWlnaHQgPSAwOwotICAgIGJv
b2wgdmFsaWQgPSBwYXJzZU51bWJlcihwdHIsIGVuZCwgeCkgJiYgcGFyc2VOdW1iZXIocHRyLCBl
bmQsIHkpICYmIHBhcnNlTnVtYmVyKHB0ciwgZW5kLCB3aWR0aCkgJiYgcGFyc2VOdW1iZXIocHRy
LCBlbmQsIGhlaWdodCwgZmFsc2UpOwotICAgIHJlY3QgPSBGbG9hdFJlY3QoeCwgeSwgd2lkdGgs
IGhlaWdodCk7Ci0gICAgcmV0dXJuIHZhbGlkOworICAgIGF1dG8geCA9IHBhcnNlTnVtYmVyKHB0
ciwgZW5kKTsKKyAgICBpZiAoIXgpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAg
YXV0byB5ID0gcGFyc2VOdW1iZXIocHRyLCBlbmQpOworICAgIGlmICgheSkKKyAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKKyAgICBhdXRvIHdpZHRoID0gcGFyc2VOdW1iZXIocHRyLCBlbmQp
OworICAgIGlmICghd2lkdGgpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgYXV0
byBoZWlnaHQgPSBwYXJzZU51bWJlcihwdHIsIGVuZCwgU3VmZml4U2tpcHBpbmdQb2xpY3k6OkRv
bnRTa2lwKTsKKyAgICBpZiAoIWhlaWdodCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
KworICAgIHJldHVybiBGbG9hdFJlY3QgeyAqeCwgKnksICp3aWR0aCwgKmhlaWdodCB9OwogfQog
Ci1ib29sIHBhcnNlR2x5cGhOYW1lKGNvbnN0IFN0cmluZyYgaW5wdXQsIEhhc2hTZXQ8U3RyaW5n
PiYgdmFsdWVzKQorT3B0aW9uYWw8SGFzaFNldDxTdHJpbmc+PiBwYXJzZUdseXBoTmFtZShjb25z
dCBTdHJpbmcmIGlucHV0KQogewogICAgIC8vIEZJWE1FOiBQYXJzaW5nIGVycm9yIGRldGVjdGlv
biBpcyBtaXNzaW5nLgotICAgIHZhbHVlcy5jbGVhcigpOworCisgICAgSGFzaFNldDxTdHJpbmc+
IHZhbHVlczsKIAogICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyhp
bnB1dCkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7CiAgICAgY29uc3QgVUNoYXIqIHB0ciA9IHVw
Y29udmVydGVkQ2hhcmFjdGVyczsKQEAgLTI4NywxMyArMjkyLDEzIEBAIGJvb2wgcGFyc2VHbHlw
aE5hbWUoY29uc3QgU3RyaW5nJiBpbnB1dCwKICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2Vz
T3JEZWxpbWl0ZXIocHRyLCBlbmQsICcsJyk7CiAgICAgfQogCi0gICAgcmV0dXJuIHRydWU7Cisg
ICAgcmV0dXJuIHZhbHVlczsKIH0KIAotc3RhdGljIGJvb2wgcGFyc2VVbmljb2RlUmFuZ2UoY29u
c3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgVW5pY29kZVJhbmdlJiByYW5n
ZSkKK3N0YXRpYyBPcHRpb25hbDxVbmljb2RlUmFuZ2U+IHBhcnNlVW5pY29kZVJhbmdlKGNvbnN0
IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgaWYgKGxlbmd0aCA8
IDIgfHwgY2hhcmFjdGVyc1swXSAhPSAnVScgfHwgY2hhcmFjdGVyc1sxXSAhPSAnKycpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAKICAg
ICAvLyBQYXJzZSB0aGUgc3RhcnRpbmcgaGV4IG51bWJlciAob3IgaXRzIHByZWZpeCkuCiAgICAg
dW5zaWduZWQgc3RhcnRSYW5nZSA9IDA7CkBAIC0zMDYsMTUgKzMxMSwxNSBAQCBzdGF0aWMgYm9v
bCBwYXJzZVVuaWNvZGVSYW5nZShjb25zdCBVQ2hhCiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgKytzdGFydExlbmd0aDsKICAgICAgICAgaWYgKHN0YXJ0TGVuZ3RoID4gNikKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAg
ICAgIHN0YXJ0UmFuZ2UgPSAoc3RhcnRSYW5nZSA8PCA0KSB8IHRvQVNDSUlIZXhWYWx1ZSgqcHRy
KTsKICAgICAgICAgKytwdHI7CiAgICAgfQotICAgIAorCiAgICAgLy8gSGFuZGxlIHRoZSBjYXNl
IG9mIHJhbmdlcyBzZXBhcmF0ZWQgYnkgIi0iIHNpZ24uCiAgICAgaWYgKDIgKyBzdGFydExlbmd0
aCA8IGxlbmd0aCAmJiAqcHRyID09ICctJykgewogICAgICAgICBpZiAoIXN0YXJ0TGVuZ3RoKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKICAgICAgICAgCiAgICAgICAgIC8vIFBhcnNlIHRoZSBlbmRpbmcgaGV4IG51bWJlciAob3Ig
aXRzIHByZWZpeCkuCiAgICAgICAgIHVuc2lnbmVkIGVuZFJhbmdlID0gMDsKQEAgLTMyNSwxNyAr
MzMwLDE4IEBAIHN0YXRpYyBib29sIHBhcnNlVW5pY29kZVJhbmdlKGNvbnN0IFVDaGEKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICsrZW5kTGVuZ3RoOwogICAgICAgICAgICAg
aWYgKGVuZExlbmd0aCA+IDYpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgICAgICBlbmRSYW5nZSA9IChl
bmRSYW5nZSA8PCA0KSB8IHRvQVNDSUlIZXhWYWx1ZSgqcHRyKTsKICAgICAgICAgICAgICsrcHRy
OwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoIWVuZExlbmd0aCkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAg
ICAgIAorICAgICAgICBVbmljb2RlUmFuZ2UgcmFuZ2U7CiAgICAgICAgIHJhbmdlLmZpcnN0ID0g
c3RhcnRSYW5nZTsKICAgICAgICAgcmFuZ2Uuc2Vjb25kID0gZW5kUmFuZ2U7Ci0gICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICByZXR1cm4gcmFuZ2U7CiAgICAgfQogICAgIAogICAgIC8vIEhh
bmRsZSB0aGUgY2FzZSBvZiBhIG51bWJlciB3aXRoIHNvbWUgb3B0aW9uYWwgdHJhaWxpbmcgcXVl
c3Rpb24gbWFya3MuCkBAIC0zNDUsMjcgKzM1MSwzMiBAQCBzdGF0aWMgYm9vbCBwYXJzZVVuaWNv
ZGVSYW5nZShjb25zdCBVQ2hhCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgKytzdGFydExl
bmd0aDsKICAgICAgICAgaWYgKHN0YXJ0TGVuZ3RoID4gNikKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIHN0YXJ0UmFu
Z2UgPDw9IDQ7CiAgICAgICAgIGVuZFJhbmdlID0gKGVuZFJhbmdlIDw8IDQpIHwgMHhGOwogICAg
ICAgICArK3B0cjsKICAgICB9CiAgICAgCiAgICAgaWYgKCFzdGFydExlbmd0aCkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIAorICAgIFVu
aWNvZGVSYW5nZSByYW5nZTsKICAgICByYW5nZS5maXJzdCA9IHN0YXJ0UmFuZ2U7CiAgICAgcmFu
Z2Uuc2Vjb25kID0gZW5kUmFuZ2U7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHJhbmdl
OwogfQogCi1ib29sIHBhcnNlS2VybmluZ1VuaWNvZGVTdHJpbmcoY29uc3QgU3RyaW5nJiBpbnB1
dCwgVW5pY29kZVJhbmdlcyYgcmFuZ2VMaXN0LCBIYXNoU2V0PFN0cmluZz4mIHN0cmluZ0xpc3Qp
CitPcHRpb25hbDxzdGQ6OnBhaXI8VW5pY29kZVJhbmdlcywgSGFzaFNldDxTdHJpbmc+Pj4gcGFy
c2VLZXJuaW5nVW5pY29kZVN0cmluZyhjb25zdCBTdHJpbmcmIGlucHV0KQogewogICAgIC8vIEZJ
WE1FOiBQYXJzaW5nIGVycm9yIGRldGVjdGlvbiBpcyBtaXNzaW5nLgorCiAgICAgYXV0byB1cGNv
bnZlcnRlZENoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KGlucHV0KS51cGNvbnZlcnRlZENoYXJhY3Rl
cnMoKTsKICAgICBjb25zdCBVQ2hhciogcHRyID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOwogICAg
IGNvbnN0IFVDaGFyKiBlbmQgPSBwdHIgKyBpbnB1dC5sZW5ndGgoKTsKIAorICAgIFVuaWNvZGVS
YW5nZXMgcmFuZ2VMaXN0OworICAgIEhhc2hTZXQ8U3RyaW5nPiBzdHJpbmdMaXN0OworCiAgICAg
d2hpbGUgKHB0ciA8IGVuZCkgewogICAgICAgICBjb25zdCBVQ2hhciogaW5wdXRTdGFydCA9IHB0
cjsKICAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCAmJiAqcHRyICE9ICcsJykKQEAgLTM3NSwxMDUg
KzM4NiwzNyBAQCBib29sIHBhcnNlS2VybmluZ1VuaWNvZGVTdHJpbmcoY29uc3QgU3RyCiAgICAg
ICAgICAgICBicmVhazsKIAogICAgICAgICAvLyBUcnkgdG8gcGFyc2UgdW5pY29kZSByYW5nZSBm
aXJzdAotICAgICAgICBVbmljb2RlUmFuZ2UgcmFuZ2U7Ci0gICAgICAgIGlmIChwYXJzZVVuaWNv
ZGVSYW5nZShpbnB1dFN0YXJ0LCBwdHIgLSBpbnB1dFN0YXJ0LCByYW5nZSkpCi0gICAgICAgICAg
ICByYW5nZUxpc3QuYXBwZW5kKHJhbmdlKTsKKyAgICAgICAgaWYgKGF1dG8gcmFuZ2UgPSBwYXJz
ZVVuaWNvZGVSYW5nZShpbnB1dFN0YXJ0LCBwdHIgLSBpbnB1dFN0YXJ0KSkKKyAgICAgICAgICAg
IHJhbmdlTGlzdC5hcHBlbmQoV1RGTW92ZSgqcmFuZ2UpKTsKICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgc3RyaW5nTGlzdC5hZGQoU3RyaW5nKGlucHV0U3RhcnQsIHB0ciAtIGlucHV0U3RhcnQp
KTsKICAgICAgICAgKytwdHI7CiAgICAgfQogCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJu
IHN0ZDo6bWFrZV9wYWlyKHJhbmdlTGlzdCwgc3RyaW5nTGlzdCk7CiB9CiAKLVZlY3RvcjxTdHJp
bmc+IHBhcnNlRGVsaW1pdGVkU3RyaW5nKGNvbnN0IFN0cmluZyYgaW5wdXQsIGNvbnN0IGNoYXIg
c2VwZXJhdG9yKQordGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBPcHRp
b25hbDxGbG9hdFBvaW50PiBnZW5lcmljUGFyc2VGbG9hdFBvaW50KGNvbnN0IENoYXJhY3RlclR5
cGUqJiBjdXJyZW50LCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQpCiB7Ci0gICAgVmVjdG9yPFN0
cmluZz4gdmFsdWVzOwotCi0gICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBTdHJpbmdW
aWV3KGlucHV0KS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciogcHRy
ID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBwdHIgKyBp
bnB1dC5sZW5ndGgoKTsKLSAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMocHRyLCBlbmQpOworICAg
IGF1dG8geCA9IHBhcnNlTnVtYmVyKGN1cnJlbnQsIGVuZCk7CisgICAgaWYgKCF4KQorICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgd2hpbGUgKHB0ciA8IGVuZCkgewotICAgICAg
ICAvLyBMZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZSBzcGFjZSwgYW5kIHdoaXRlIHNwYWNlIGJl
Zm9yZSBhbmQgYWZ0ZXIgc2VtaWNvbG9uIHNlcGFyYXRvcnMsIHdpbGwgYmUgaWdub3JlZC4KLSAg
ICAgICAgY29uc3QgVUNoYXIqIGlucHV0U3RhcnQgPSBwdHI7Ci0gICAgICAgIHdoaWxlIChwdHIg
PCBlbmQgJiYgKnB0ciAhPSBzZXBlcmF0b3IpIC8vIGNhcmVmdWwgbm90IHRvIGlnbm9yZSB3aGl0
ZXNwYWNlIGluc2lkZSBpbnB1dHMKLSAgICAgICAgICAgIHB0cisrOworICAgIGF1dG8geSA9IHBh
cnNlTnVtYmVyKGN1cnJlbnQsIGVuZCk7CisgICAgaWYgKCF5KQorICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogCi0gICAgICAgIGlmIChwdHIgPT0gaW5wdXRTdGFydCkKLSAgICAgICAgICAg
IGJyZWFrOwotCi0gICAgICAgIC8vIHdhbGsgYmFja3dhcmRzIGZyb20gdGhlIDsgdG8gaWdub3Jl
IGFueSB3aGl0ZXNwYWNlCi0gICAgICAgIGNvbnN0IFVDaGFyKiBpbnB1dEVuZCA9IHB0ciAtIDE7
Ci0gICAgICAgIHdoaWxlIChpbnB1dFN0YXJ0IDwgaW5wdXRFbmQgJiYgaXNTVkdTcGFjZSgqaW5w
dXRFbmQpKQotICAgICAgICAgICAgaW5wdXRFbmQtLTsKLQotICAgICAgICB2YWx1ZXMuYXBwZW5k
KFN0cmluZyhpbnB1dFN0YXJ0LCBpbnB1dEVuZCAtIGlucHV0U3RhcnQgKyAxKSk7Ci0gICAgICAg
IHNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVsaW1pdGVyKHB0ciwgZW5kLCBzZXBlcmF0b3IpOwot
ICAgIH0KLQotICAgIHJldHVybiB2YWx1ZXM7CisgICAgcmV0dXJuIEZsb2F0UG9pbnQgeyAqeCwg
KnkgfTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1ib29sIHBhcnNl
RmxvYXRQb2ludChjb25zdCBDaGFyYWN0ZXJUeXBlKiYgY3VycmVudCwgY29uc3QgQ2hhcmFjdGVy
VHlwZSogZW5kLCBGbG9hdFBvaW50JiBwb2ludCkKK09wdGlvbmFsPEZsb2F0UG9pbnQ+IHBhcnNl
RmxvYXRQb2ludChjb25zdCBMQ2hhciomIGN1cnJlbnQsIGNvbnN0IExDaGFyKiBlbmQpCiB7Ci0g
ICAgZmxvYXQgeDsKLSAgICBmbG9hdCB5OwotICAgIGlmICghcGFyc2VOdW1iZXIoY3VycmVudCwg
ZW5kLCB4KQotICAgICAgICB8fCAhcGFyc2VOdW1iZXIoY3VycmVudCwgZW5kLCB5KSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIHBvaW50ID0gRmxvYXRQb2ludCh4LCB5KTsKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotdGVtcGxhdGUgYm9vbCBwYXJzZUZsb2F0UG9pbnQoY29uc3QgTENoYXIq
JiBjdXJyZW50LCBjb25zdCBMQ2hhciogZW5kLCBGbG9hdFBvaW50JiBwb2ludDEpOwotdGVtcGxh
dGUgYm9vbCBwYXJzZUZsb2F0UG9pbnQoY29uc3QgVUNoYXIqJiBjdXJyZW50LCBjb25zdCBVQ2hh
ciogZW5kLCBGbG9hdFBvaW50JiBwb2ludDEpOwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZT4KLWlubGluZSBib29sIHBhcnNlRmxvYXRQb2ludDIoY29uc3QgQ2hhcmFjdGVyVHlw
ZSomIGN1cnJlbnQsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCwgRmxvYXRQb2ludCYgcG9pbnQx
LCBGbG9hdFBvaW50JiBwb2ludDIpCi17Ci0gICAgZmxvYXQgeDE7Ci0gICAgZmxvYXQgeTE7Ci0g
ICAgZmxvYXQgeDI7Ci0gICAgZmxvYXQgeTI7Ci0gICAgaWYgKCFwYXJzZU51bWJlcihjdXJyZW50
LCBlbmQsIHgxKQotICAgICAgICB8fCAhcGFyc2VOdW1iZXIoY3VycmVudCwgZW5kLCB5MSkKLSAg
ICAgICAgfHwgIXBhcnNlTnVtYmVyKGN1cnJlbnQsIGVuZCwgeDIpCi0gICAgICAgIHx8ICFwYXJz
ZU51bWJlcihjdXJyZW50LCBlbmQsIHkyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHBv
aW50MSA9IEZsb2F0UG9pbnQoeDEsIHkxKTsKLSAgICBwb2ludDIgPSBGbG9hdFBvaW50KHgyLCB5
Mik7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXRlbXBsYXRlIGJvb2wgcGFyc2VGbG9hdFBvaW50
Mihjb25zdCBMQ2hhciomIGN1cnJlbnQsIGNvbnN0IExDaGFyKiBlbmQsIEZsb2F0UG9pbnQmIHBv
aW50MSwgRmxvYXRQb2ludCYgcG9pbnQyKTsKLXRlbXBsYXRlIGJvb2wgcGFyc2VGbG9hdFBvaW50
Mihjb25zdCBVQ2hhciomIGN1cnJlbnQsIGNvbnN0IFVDaGFyKiBlbmQsIEZsb2F0UG9pbnQmIHBv
aW50MSwgRmxvYXRQb2ludCYgcG9pbnQyKTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+Ci1ib29sIHBhcnNlRmxvYXRQb2ludDMoY29uc3QgQ2hhcmFjdGVyVHlwZSomIGN1cnJl
bnQsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCwgRmxvYXRQb2ludCYgcG9pbnQxLCBGbG9hdFBv
aW50JiBwb2ludDIsIEZsb2F0UG9pbnQmIHBvaW50MykKLXsKLSAgICBmbG9hdCB4MTsKLSAgICBm
bG9hdCB5MTsKLSAgICBmbG9hdCB4MjsKLSAgICBmbG9hdCB5MjsKLSAgICBmbG9hdCB4MzsKLSAg
ICBmbG9hdCB5MzsKLSAgICBpZiAoIXBhcnNlTnVtYmVyKGN1cnJlbnQsIGVuZCwgeDEpCi0gICAg
ICAgIHx8ICFwYXJzZU51bWJlcihjdXJyZW50LCBlbmQsIHkxKQotICAgICAgICB8fCAhcGFyc2VO
dW1iZXIoY3VycmVudCwgZW5kLCB4MikKLSAgICAgICAgfHwgIXBhcnNlTnVtYmVyKGN1cnJlbnQs
IGVuZCwgeTIpCi0gICAgICAgIHx8ICFwYXJzZU51bWJlcihjdXJyZW50LCBlbmQsIHgzKQotICAg
ICAgICB8fCAhcGFyc2VOdW1iZXIoY3VycmVudCwgZW5kLCB5MykpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBwb2ludDEgPSBGbG9hdFBvaW50KHgxLCB5MSk7Ci0gICAgcG9pbnQyID0gRmxv
YXRQb2ludCh4MiwgeTIpOwotICAgIHBvaW50MyA9IEZsb2F0UG9pbnQoeDMsIHkzKTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZ2VuZXJpY1BhcnNlRmxvYXRQb2ludChjdXJyZW50LCBl
bmQpOwogfQogCi10ZW1wbGF0ZSBib29sIHBhcnNlRmxvYXRQb2ludDMoY29uc3QgTENoYXIqJiBj
dXJyZW50LCBjb25zdCBMQ2hhciogZW5kLCBGbG9hdFBvaW50JiBwb2ludDEsIEZsb2F0UG9pbnQm
IHBvaW50MiwgRmxvYXRQb2ludCYgcG9pbnQzKTsKLXRlbXBsYXRlIGJvb2wgcGFyc2VGbG9hdFBv
aW50Myhjb25zdCBVQ2hhciomIGN1cnJlbnQsIGNvbnN0IFVDaGFyKiBlbmQsIEZsb2F0UG9pbnQm
IHBvaW50MSwgRmxvYXRQb2ludCYgcG9pbnQyLCBGbG9hdFBvaW50JiBwb2ludDMpOworT3B0aW9u
YWw8RmxvYXRQb2ludD4gcGFyc2VGbG9hdFBvaW50KGNvbnN0IFVDaGFyKiYgY3VycmVudCwgY29u
c3QgVUNoYXIqIGVuZCkKK3sKKyAgICByZXR1cm4gZ2VuZXJpY1BhcnNlRmxvYXRQb2ludChjdXJy
ZW50LCBlbmQpOworfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGFyc2VyVXRp
bGl0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhcnNlclV0aWxp
dGllcy5oCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGFyc2Vy
VXRpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAKICNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKLXR5cGVkZWYg
c3RkOjpwYWlyPHVuc2lnbmVkLCB1bnNpZ25lZD4gVW5pY29kZVJhbmdlOwordHlwZWRlZiBzdGQ6
OnBhaXI8VUNoYXIzMiwgVUNoYXIzMj4gVW5pY29kZVJhbmdlOwogdHlwZWRlZiBWZWN0b3I8VW5p
Y29kZVJhbmdlPiBVbmljb2RlUmFuZ2VzOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zMyw0
MiArMzMsNDUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgRmxvYXRQb2ludDsKIGNsYXNz
IEZsb2F0UmVjdDsKIAotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1ib29sIHBh
cnNlU1ZHTnVtYmVyKENoYXJhY3RlclR5cGUqIHB0ciwgc2l6ZV90IGxlbmd0aCwgZG91YmxlJiBu
dW1iZXIpOwotYm9vbCBwYXJzZU51bWJlcihjb25zdCBMQ2hhciomIHB0ciwgY29uc3QgTENoYXIq
IGVuZCwgZmxvYXQmIG51bWJlciwgYm9vbCBza2lwID0gdHJ1ZSk7Ci1ib29sIHBhcnNlTnVtYmVy
KGNvbnN0IFVDaGFyKiYgcHRyLCBjb25zdCBVQ2hhciogZW5kLCBmbG9hdCYgbnVtYmVyLCBib29s
IHNraXAgPSB0cnVlKTsKLWJvb2wgcGFyc2VOdW1iZXJGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYs
IGZsb2F0JiBudW1iZXIsIGJvb2wgc2tpcCA9IHRydWUpOwotYm9vbCBwYXJzZU51bWJlck9wdGlv
bmFsTnVtYmVyKGNvbnN0IFN0cmluZyYgcywgZmxvYXQmIGgsIGZsb2F0JiB2KTsKLWJvb2wgcGFy
c2VBcmNGbGFnKGNvbnN0IExDaGFyKiYgcHRyLCBjb25zdCBMQ2hhciogZW5kLCBib29sJiBmbGFn
KTsKLWJvb2wgcGFyc2VBcmNGbGFnKGNvbnN0IFVDaGFyKiYgcHRyLCBjb25zdCBVQ2hhciogZW5k
LCBib29sJiBmbGFnKTsKLWJvb2wgcGFyc2VQb2ludChjb25zdCBTdHJpbmcmLCBGbG9hdFBvaW50
Jik7Ci1ib29sIHBhcnNlUmVjdChjb25zdCBTdHJpbmcmLCBGbG9hdFJlY3QmKTsKLQotdGVtcGxh
dGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1ib29sIHBhcnNlRmxvYXRQb2ludChjb25zdCBD
aGFyYWN0ZXJUeXBlKiYgY3VycmVudCwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kLCBGbG9hdFBv
aW50Jik7Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLWJvb2wgcGFyc2VGbG9h
dFBvaW50Mihjb25zdCBDaGFyYWN0ZXJUeXBlKiYgY3VycmVudCwgY29uc3QgQ2hhcmFjdGVyVHlw
ZSogZW5kLCBGbG9hdFBvaW50JiwgRmxvYXRQb2ludCYpOwotdGVtcGxhdGUgPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+Ci1ib29sIHBhcnNlRmxvYXRQb2ludDMoY29uc3QgQ2hhcmFjdGVyVHlwZSom
IGN1cnJlbnQsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCwgRmxvYXRQb2ludCYsIEZsb2F0UG9p
bnQmLCBGbG9hdFBvaW50Jik7CitlbnVtIGNsYXNzIFN1ZmZpeFNraXBwaW5nUG9saWN5IHsKKyAg
ICBEb250U2tpcCwKKyAgICBTa2lwCit9OworCitPcHRpb25hbDxmbG9hdD4gcGFyc2VOdW1iZXIo
Y29uc3QgTENoYXIqJiBjdXJyZW50LCBjb25zdCBMQ2hhciogZW5kLCBTdWZmaXhTa2lwcGluZ1Bv
bGljeSA9IFN1ZmZpeFNraXBwaW5nUG9saWN5OjpTa2lwKTsKK09wdGlvbmFsPGZsb2F0PiBwYXJz
ZU51bWJlcihjb25zdCBVQ2hhciomIGN1cnJlbnQsIGNvbnN0IFVDaGFyKiBlbmQsIFN1ZmZpeFNr
aXBwaW5nUG9saWN5ID0gU3VmZml4U2tpcHBpbmdQb2xpY3k6OlNraXApOworT3B0aW9uYWw8Zmxv
YXQ+IHBhcnNlTnVtYmVyKGNvbnN0IFN0cmluZyYsIFN1ZmZpeFNraXBwaW5nUG9saWN5ID0gU3Vm
Zml4U2tpcHBpbmdQb2xpY3k6OlNraXApOworCitPcHRpb25hbDxzdGQ6OnBhaXI8ZmxvYXQsIGZs
b2F0Pj4gcGFyc2VOdW1iZXJPcHRpb25hbE51bWJlcihjb25zdCBTdHJpbmcmKTsKKworT3B0aW9u
YWw8Ym9vbD4gcGFyc2VBcmNGbGFnKGNvbnN0IExDaGFyKiYgY3VycmVudCwgY29uc3QgTENoYXIq
IGVuZCk7CitPcHRpb25hbDxib29sPiBwYXJzZUFyY0ZsYWcoY29uc3QgVUNoYXIqJiBjdXJyZW50
LCBjb25zdCBVQ2hhciogZW5kKTsKKworT3B0aW9uYWw8RmxvYXRQb2ludD4gcGFyc2VQb2ludChj
b25zdCBTdHJpbmcmKTsKK09wdGlvbmFsPEZsb2F0UmVjdD4gcGFyc2VSZWN0KGNvbnN0IFN0cmlu
ZyYpOworCitPcHRpb25hbDxGbG9hdFBvaW50PiBwYXJzZUZsb2F0UG9pbnQoY29uc3QgTENoYXIq
JiBjdXJyZW50LCBjb25zdCBMQ2hhciogZW5kKTsKK09wdGlvbmFsPEZsb2F0UG9pbnQ+IHBhcnNl
RmxvYXRQb2ludChjb25zdCBVQ2hhciomIGN1cnJlbnQsIGNvbnN0IFVDaGFyKiBlbmQpOworCitP
cHRpb25hbDxzdGQ6OnBhaXI8VW5pY29kZVJhbmdlcywgSGFzaFNldDxTdHJpbmc+Pj4gcGFyc2VL
ZXJuaW5nVW5pY29kZVN0cmluZyhjb25zdCBTdHJpbmcmKTsKK09wdGlvbmFsPEhhc2hTZXQ8U3Ry
aW5nPj4gcGFyc2VHbHlwaE5hbWUoY29uc3QgU3RyaW5nJik7CisKIAogLy8gU1ZHIGFsbG93cyBz
ZXZlcmFsIGRpZmZlcmVudCB3aGl0ZXNwYWNlIGNoYXJhY3RlcnM6CiAvLyBodHRwOi8vd3d3Lncz
Lm9yZy9UUi9TVkcvcGF0aHMuaHRtbCNQYXRoRGF0YUJORgotdGVtcGxhdGUgPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+Ci1pbmxpbmUgYm9vbCBpc1NWR1NwYWNlKENoYXJhY3RlclR5cGUgYykKK3Rl
bXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGlubGluZSBib29sIGlzU1ZHU3BhY2UoQ2hh
cmFjdGVyVHlwZSBjKQogewogICAgIHJldHVybiBjID09ICcgJyB8fCBjID09ICdcdCcgfHwgYyA9
PSAnXG4nIHx8IGMgPT0gJ1xyJzsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5
cGU+Ci1pbmxpbmUgYm9vbCBza2lwT3B0aW9uYWxTVkdTcGFjZXMoY29uc3QgQ2hhcmFjdGVyVHlw
ZSomIHB0ciwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hh
cmFjdGVyVHlwZT4gaW5saW5lIGJvb2wgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGNvbnN0IENoYXJh
Y3RlclR5cGUqJiBwdHIsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCkKIHsKICAgICB3aGlsZSAo
cHRyIDwgZW5kICYmIGlzU1ZHU3BhY2UoKnB0cikpCiAgICAgICAgIHB0cisrOwogICAgIHJldHVy
biBwdHIgPCBlbmQ7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotaW5s
aW5lIGJvb2wgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxpbWl0ZXIoY29uc3QgQ2hhcmFjdGVy
VHlwZSomIHB0ciwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kLCBjaGFyIGRlbGltaXRlciA9ICcs
JykKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGlubGluZSBib29sIHNraXBPcHRp
b25hbFNWR1NwYWNlc09yRGVsaW1pdGVyKGNvbnN0IENoYXJhY3RlclR5cGUqJiBwdHIsIGNvbnN0
IENoYXJhY3RlclR5cGUqIGVuZCwgY2hhciBkZWxpbWl0ZXIgPSAnLCcpCiB7CiAgICAgaWYgKHB0
ciA8IGVuZCAmJiAhaXNTVkdTcGFjZSgqcHRyKSAmJiAqcHRyICE9IGRlbGltaXRlcikKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwpAQCAtODEsMTAgKzg0LDYgQEAgaW5saW5lIGJvb2wgc2tpcE9wdGlv
bmFsU1ZHU3BhY2VzT3JEZWxpbQogICAgIHJldHVybiBwdHIgPCBlbmQ7CiB9CiAKLVZlY3RvcjxT
dHJpbmc+IHBhcnNlRGVsaW1pdGVkU3RyaW5nKGNvbnN0IFN0cmluZyYgaW5wdXQsIGNvbnN0IGNo
YXIgc2VwZXJhdG9yKTsKLWJvb2wgcGFyc2VLZXJuaW5nVW5pY29kZVN0cmluZyhjb25zdCBTdHJp
bmcmIGlucHV0LCBVbmljb2RlUmFuZ2VzJiwgSGFzaFNldDxTdHJpbmc+JiBzdHJpbmdMaXN0KTsK
LWJvb2wgcGFyc2VHbHlwaE5hbWUoY29uc3QgU3RyaW5nJiBpbnB1dCwgSGFzaFNldDxTdHJpbmc+
JiB2YWx1ZXMpOwotCiBpbmxpbmUgYm9vbCBza2lwU3RyaW5nKGNvbnN0IFVDaGFyKiYgcHRyLCBj
b25zdCBVQ2hhciogZW5kLCBjb25zdCBVQ2hhciogbmFtZSwgaW50IGxlbmd0aCkKIHsKICAgICBp
ZiAoZW5kIC0gcHRyIDwgbGVuZ3RoKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhC
bGVuZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEJsZW5k
ZXIuY3BwCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEJs
ZW5kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsMjAwICsxMTYsMTk4IEBAIEZsb2F0UG9p
bnQgU1ZHUGF0aEJsZW5kZXI6OmJsZW5kQW5pbWF0ZWQKICAgICByZXR1cm4gYW5pbWF0ZWRQb2lu
dDsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb24+IHVzaW5nIFB1bGxGcm9tU291cmNl
c1Jlc3VsdCA9IHN0ZDo6cGFpcjx0eXBlbmFtZSBzdGQ6Omludm9rZV9yZXN1bHRfdDxGdW5jdGlv
biwgU1ZHUGF0aFNvdXJjZT46OnZhbHVlX3R5cGUsIHR5cGVuYW1lIHN0ZDo6aW52b2tlX3Jlc3Vs
dF90PEZ1bmN0aW9uLCBTVkdQYXRoU291cmNlPjo6dmFsdWVfdHlwZT47Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdGlvbj4gc3RhdGljIE9wdGlvbmFsPFB1bGxGcm9tU291cmNlc1Jlc3VsdDxGdW5j
dGlvbj4+IHB1bGxGcm9tU291cmNlcyhTVkdQYXRoU291cmNlJiBmcm9tU291cmNlLCBTVkdQYXRo
U291cmNlJiB0b1NvdXJjZSwgRnVuY3Rpb24mJiBmdW5jdGlvbikKK3sKKyAgICBpZiAoIWZyb21T
b3VyY2UuaGFzTW9yZURhdGEoKSkKKyAgICAgICAgcmV0dXJuIFB1bGxGcm9tU291cmNlc1Jlc3Vs
dDxGdW5jdGlvbj4geyB9OworCisgICAgYXV0byBwYXJzZWRGcm9tID0gc3RkOjppbnZva2UoZnVu
Y3Rpb24sIGZyb21Tb3VyY2UpOworICAgIGlmICghcGFyc2VkRnJvbSkKKyAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKyAgICBhdXRvIHBhcnNlZFRvID0gc3RkOjppbnZva2UoZnVuY3Rpb24s
IHRvU291cmNlKTsKKyAgICBpZiAoIXBhcnNlZFRvKQorICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworCisgICAgcmV0dXJuIFB1bGxGcm9tU291cmNlc1Jlc3VsdDxGdW5jdGlvbj4geyBXVEZN
b3ZlKCpwYXJzZWRGcm9tKSwgV1RGTW92ZSgqcGFyc2VkVG8pIH07Cit9CisKIGJvb2wgU1ZHUGF0
aEJsZW5kZXI6OmJsZW5kTW92ZVRvU2VnbWVudChmbG9hdCBwcm9ncmVzcykKIHsKLSAgICBGbG9h
dFBvaW50IGZyb21UYXJnZXRQb2ludDsKLSAgICBGbG9hdFBvaW50IHRvVGFyZ2V0UG9pbnQ7Ci0g
ICAgaWYgKChtX2Zyb21Tb3VyY2UuaGFzTW9yZURhdGEoKSAmJiAhbV9mcm9tU291cmNlLnBhcnNl
TW92ZVRvU2VnbWVudChmcm9tVGFyZ2V0UG9pbnQpKQotICAgICAgICB8fCAhbV90b1NvdXJjZS5w
YXJzZU1vdmVUb1NlZ21lbnQodG9UYXJnZXRQb2ludCkpCisgICAgYXV0byByZXN1bHQgPSBwdWxs
RnJvbVNvdXJjZXMobV9mcm9tU291cmNlLCBtX3RvU291cmNlLCAmU1ZHUGF0aFNvdXJjZTo6cGFy
c2VNb3ZlVG9TZWdtZW50KTsKKyAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgaWYgKCFtX2NvbnN1bWVyKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIG1f
Y29uc3VtZXItPm1vdmVUbyhibGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tVGFyZ2V0UG9pbnQs
IHRvVGFyZ2V0UG9pbnQsIHByb2dyZXNzKSwgZmFsc2UsIG1faXNJbkZpcnN0SGFsZk9mQW5pbWF0
aW9uID8gbV9mcm9tTW9kZSA6IG1fdG9Nb2RlKTsKLSAgICBtX2Zyb21DdXJyZW50UG9pbnQgPSBt
X2Zyb21Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyBmcm9tVGFyZ2V0UG9pbnQgOiBtX2Zy
b21DdXJyZW50UG9pbnQgKyBmcm9tVGFyZ2V0UG9pbnQ7Ci0gICAgbV90b0N1cnJlbnRQb2ludCA9
IG1fdG9Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyB0b1RhcmdldFBvaW50IDogbV90b0N1
cnJlbnRQb2ludCArIHRvVGFyZ2V0UG9pbnQ7CisgICAgYXV0byBbZnJvbSwgdG9dID0gKnJlc3Vs
dDsKKworICAgIG1fY29uc3VtZXItPm1vdmVUbyhibGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9t
LnRhcmdldFBvaW50LCB0by50YXJnZXRQb2ludCwgcHJvZ3Jlc3MpLCBmYWxzZSwgbV9pc0luRmly
c3RIYWxmT2ZBbmltYXRpb24gPyBtX2Zyb21Nb2RlIDogbV90b01vZGUpOworICAgIG1fZnJvbUN1
cnJlbnRQb2ludCA9IG1fZnJvbU1vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IGZyb20udGFy
Z2V0UG9pbnQgOiBtX2Zyb21DdXJyZW50UG9pbnQgKyBmcm9tLnRhcmdldFBvaW50OworICAgIG1f
dG9DdXJyZW50UG9pbnQgPSBtX3RvTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gdG8udGFy
Z2V0UG9pbnQgOiBtX3RvQ3VycmVudFBvaW50ICsgdG8udGFyZ2V0UG9pbnQ7CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKIGJvb2wgU1ZHUGF0aEJsZW5kZXI6OmJsZW5kTGluZVRvU2VnbWVudChmbG9h
dCBwcm9ncmVzcykKIHsKLSAgICBGbG9hdFBvaW50IGZyb21UYXJnZXRQb2ludDsKLSAgICBGbG9h
dFBvaW50IHRvVGFyZ2V0UG9pbnQ7Ci0gICAgaWYgKChtX2Zyb21Tb3VyY2UuaGFzTW9yZURhdGEo
KSAmJiAhbV9mcm9tU291cmNlLnBhcnNlTGluZVRvU2VnbWVudChmcm9tVGFyZ2V0UG9pbnQpKQot
ICAgICAgICB8fCAhbV90b1NvdXJjZS5wYXJzZUxpbmVUb1NlZ21lbnQodG9UYXJnZXRQb2ludCkp
CisgICAgYXV0byByZXN1bHQgPSBwdWxsRnJvbVNvdXJjZXMobV9mcm9tU291cmNlLCBtX3RvU291
cmNlLCAmU1ZHUGF0aFNvdXJjZTo6cGFyc2VMaW5lVG9TZWdtZW50KTsKKyAgICBpZiAoIXJlc3Vs
dCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKCFtX2NvbnN1bWVyKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKIAotICAgIG1fY29uc3VtZXItPmxpbmVUbyhibGVuZEFuaW1hdGVkRmxv
YXRQb2ludChmcm9tVGFyZ2V0UG9pbnQsIHRvVGFyZ2V0UG9pbnQsIHByb2dyZXNzKSwgbV9pc0lu
Rmlyc3RIYWxmT2ZBbmltYXRpb24gPyBtX2Zyb21Nb2RlIDogbV90b01vZGUpOwotICAgIG1fZnJv
bUN1cnJlbnRQb2ludCA9IG1fZnJvbU1vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IGZyb21U
YXJnZXRQb2ludCA6IG1fZnJvbUN1cnJlbnRQb2ludCArIGZyb21UYXJnZXRQb2ludDsKLSAgICBt
X3RvQ3VycmVudFBvaW50ID0gbV90b01vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IHRvVGFy
Z2V0UG9pbnQgOiBtX3RvQ3VycmVudFBvaW50ICsgdG9UYXJnZXRQb2ludDsKKyAgICBhdXRvIFtm
cm9tLCB0b10gPSAqcmVzdWx0OworCisgICAgbV9jb25zdW1lci0+bGluZVRvKGJsZW5kQW5pbWF0
ZWRGbG9hdFBvaW50KGZyb20udGFyZ2V0UG9pbnQsIHRvLnRhcmdldFBvaW50LCBwcm9ncmVzcyks
IG1faXNJbkZpcnN0SGFsZk9mQW5pbWF0aW9uID8gbV9mcm9tTW9kZSA6IG1fdG9Nb2RlKTsKKyAg
ICBtX2Zyb21DdXJyZW50UG9pbnQgPSBtX2Zyb21Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMg
PyBmcm9tLnRhcmdldFBvaW50IDogbV9mcm9tQ3VycmVudFBvaW50ICsgZnJvbS50YXJnZXRQb2lu
dDsKKyAgICBtX3RvQ3VycmVudFBvaW50ID0gbV90b01vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRl
cyA/IHRvLnRhcmdldFBvaW50IDogbV90b0N1cnJlbnRQb2ludCArIHRvLnRhcmdldFBvaW50Owog
ICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIFNWR1BhdGhCbGVuZGVyOjpibGVuZExpbmVUb0hv
cml6b250YWxTZWdtZW50KGZsb2F0IHByb2dyZXNzKQogewotICAgIGZsb2F0IGZyb21YID0gMDsK
LSAgICBmbG9hdCB0b1ggPSAwOwotICAgIGlmICgobV9mcm9tU291cmNlLmhhc01vcmVEYXRhKCkg
JiYgIW1fZnJvbVNvdXJjZS5wYXJzZUxpbmVUb0hvcml6b250YWxTZWdtZW50KGZyb21YKSkKLSAg
ICAgICAgfHwgIW1fdG9Tb3VyY2UucGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudCh0b1gpKQor
ICAgIGF1dG8gcmVzdWx0ID0gcHVsbEZyb21Tb3VyY2VzKG1fZnJvbVNvdXJjZSwgbV90b1NvdXJj
ZSwgJlNWR1BhdGhTb3VyY2U6OnBhcnNlTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQpOworICAgIGlm
ICghcmVzdWx0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoIW1fY29uc3VtZXIp
CiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgbV9jb25zdW1lci0+bGluZVRvSG9yaXpvbnRh
bChibGVuZEFuaW1hdGVkRGltZW5zb25hbEZsb2F0KGZyb21YLCB0b1gsIEJsZW5kSG9yaXpvbnRh
bCwgcHJvZ3Jlc3MpLCBtX2lzSW5GaXJzdEhhbGZPZkFuaW1hdGlvbiA/IG1fZnJvbU1vZGUgOiBt
X3RvTW9kZSk7Ci0gICAgbV9mcm9tQ3VycmVudFBvaW50LnNldFgobV9mcm9tTW9kZSA9PSBBYnNv
bHV0ZUNvb3JkaW5hdGVzID8gZnJvbVggOiBtX2Zyb21DdXJyZW50UG9pbnQueCgpICsgZnJvbVgp
OwotICAgIG1fdG9DdXJyZW50UG9pbnQuc2V0WChtX3RvTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5h
dGVzID8gdG9YIDogbV90b0N1cnJlbnRQb2ludC54KCkgKyB0b1gpOworICAgIGF1dG8gW2Zyb20s
IHRvXSA9ICpyZXN1bHQ7CisKKyAgICBtX2NvbnN1bWVyLT5saW5lVG9Ib3Jpem9udGFsKGJsZW5k
QW5pbWF0ZWREaW1lbnNvbmFsRmxvYXQoZnJvbS54LCB0by54LCBCbGVuZEhvcml6b250YWwsIHBy
b2dyZXNzKSwgbV9pc0luRmlyc3RIYWxmT2ZBbmltYXRpb24gPyBtX2Zyb21Nb2RlIDogbV90b01v
ZGUpOworICAgIG1fZnJvbUN1cnJlbnRQb2ludC5zZXRYKG1fZnJvbU1vZGUgPT0gQWJzb2x1dGVD
b29yZGluYXRlcyA/IGZyb20ueCA6IG1fZnJvbUN1cnJlbnRQb2ludC54KCkgKyBmcm9tLngpOwor
ICAgIG1fdG9DdXJyZW50UG9pbnQuc2V0WChtX3RvTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVz
ID8gdG8ueCA6IG1fdG9DdXJyZW50UG9pbnQueCgpICsgdG8ueCk7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKIGJvb2wgU1ZHUGF0aEJsZW5kZXI6OmJsZW5kTGluZVRvVmVydGljYWxTZWdtZW50KGZs
b2F0IHByb2dyZXNzKQogewotICAgIGZsb2F0IGZyb21ZID0gMDsKLSAgICBmbG9hdCB0b1kgPSAw
OwotICAgIGlmICgobV9mcm9tU291cmNlLmhhc01vcmVEYXRhKCkgJiYgIW1fZnJvbVNvdXJjZS5w
YXJzZUxpbmVUb1ZlcnRpY2FsU2VnbWVudChmcm9tWSkpCi0gICAgICAgIHx8ICFtX3RvU291cmNl
LnBhcnNlTGluZVRvVmVydGljYWxTZWdtZW50KHRvWSkpCisgICAgYXV0byByZXN1bHQgPSBwdWxs
RnJvbVNvdXJjZXMobV9mcm9tU291cmNlLCBtX3RvU291cmNlLCAmU1ZHUGF0aFNvdXJjZTo6cGFy
c2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnQpOworICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICBpZiAoIW1fY29uc3VtZXIpCiAgICAgICAgIHJldHVybiB0cnVlOwog
Ci0gICAgbV9jb25zdW1lci0+bGluZVRvVmVydGljYWwoYmxlbmRBbmltYXRlZERpbWVuc29uYWxG
bG9hdChmcm9tWSwgdG9ZLCBCbGVuZFZlcnRpY2FsLCBwcm9ncmVzcyksIG1faXNJbkZpcnN0SGFs
Zk9mQW5pbWF0aW9uID8gbV9mcm9tTW9kZSA6IG1fdG9Nb2RlKTsKLSAgICBtX2Zyb21DdXJyZW50
UG9pbnQuc2V0WShtX2Zyb21Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyBmcm9tWSA6IG1f
ZnJvbUN1cnJlbnRQb2ludC55KCkgKyBmcm9tWSk7Ci0gICAgbV90b0N1cnJlbnRQb2ludC5zZXRZ
KG1fdG9Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyB0b1kgOiBtX3RvQ3VycmVudFBvaW50
LnkoKSArIHRvWSk7CisgICAgYXV0byBbZnJvbSwgdG9dID0gKnJlc3VsdDsKKworICAgIG1fY29u
c3VtZXItPmxpbmVUb1ZlcnRpY2FsKGJsZW5kQW5pbWF0ZWREaW1lbnNvbmFsRmxvYXQoZnJvbS55
LCB0by55LCBCbGVuZFZlcnRpY2FsLCBwcm9ncmVzcyksIG1faXNJbkZpcnN0SGFsZk9mQW5pbWF0
aW9uID8gbV9mcm9tTW9kZSA6IG1fdG9Nb2RlKTsKKyAgICBtX2Zyb21DdXJyZW50UG9pbnQuc2V0
WShtX2Zyb21Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyBmcm9tLnkgOiBtX2Zyb21DdXJy
ZW50UG9pbnQueSgpICsgZnJvbS55KTsKKyAgICBtX3RvQ3VycmVudFBvaW50LnNldFkobV90b01v
ZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IHRvLnkgOiBtX3RvQ3VycmVudFBvaW50LnkoKSAr
IHRvLnkpOwogICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIFNWR1BhdGhCbGVuZGVyOjpibGVu
ZEN1cnZlVG9DdWJpY1NlZ21lbnQoZmxvYXQgcHJvZ3Jlc3MpCiB7Ci0gICAgRmxvYXRQb2ludCBm
cm9tVGFyZ2V0UG9pbnQ7Ci0gICAgRmxvYXRQb2ludCBmcm9tUG9pbnQxOwotICAgIEZsb2F0UG9p
bnQgZnJvbVBvaW50MjsKLSAgICBGbG9hdFBvaW50IHRvVGFyZ2V0UG9pbnQ7Ci0gICAgRmxvYXRQ
b2ludCB0b1BvaW50MTsKLSAgICBGbG9hdFBvaW50IHRvUG9pbnQyOwotICAgIGlmICgobV9mcm9t
U291cmNlLmhhc01vcmVEYXRhKCkgJiYgIW1fZnJvbVNvdXJjZS5wYXJzZUN1cnZlVG9DdWJpY1Nl
Z21lbnQoZnJvbVBvaW50MSwgZnJvbVBvaW50MiwgZnJvbVRhcmdldFBvaW50KSkKLSAgICAgICAg
fHwgIW1fdG9Tb3VyY2UucGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KHRvUG9pbnQxLCB0b1BvaW50
MiwgdG9UYXJnZXRQb2ludCkpCisgICAgYXV0byByZXN1bHQgPSBwdWxsRnJvbVNvdXJjZXMobV9m
cm9tU291cmNlLCBtX3RvU291cmNlLCAmU1ZHUGF0aFNvdXJjZTo6cGFyc2VDdXJ2ZVRvQ3ViaWNT
ZWdtZW50KTsKKyAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
aWYgKCFtX2NvbnN1bWVyKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIG1fY29uc3VtZXIt
PmN1cnZlVG9DdWJpYyhibGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tUG9pbnQxLCB0b1BvaW50
MSwgcHJvZ3Jlc3MpLAotICAgICAgICBibGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tUG9pbnQy
LCB0b1BvaW50MiwgcHJvZ3Jlc3MpLAotICAgICAgICBibGVuZEFuaW1hdGVkRmxvYXRQb2ludChm
cm9tVGFyZ2V0UG9pbnQsIHRvVGFyZ2V0UG9pbnQsIHByb2dyZXNzKSwKKyAgICBhdXRvIFtmcm9t
LCB0b10gPSAqcmVzdWx0OworCisgICAgbV9jb25zdW1lci0+Y3VydmVUb0N1YmljKGJsZW5kQW5p
bWF0ZWRGbG9hdFBvaW50KGZyb20ucG9pbnQxLCB0by5wb2ludDEsIHByb2dyZXNzKSwKKyAgICAg
ICAgYmxlbmRBbmltYXRlZEZsb2F0UG9pbnQoZnJvbS5wb2ludDIsIHRvLnBvaW50MiwgcHJvZ3Jl
c3MpLAorICAgICAgICBibGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tLnRhcmdldFBvaW50LCB0
by50YXJnZXRQb2ludCwgcHJvZ3Jlc3MpLAogICAgICAgICBtX2lzSW5GaXJzdEhhbGZPZkFuaW1h
dGlvbiA/IG1fZnJvbU1vZGUgOiBtX3RvTW9kZSk7Ci0gICAgbV9mcm9tQ3VycmVudFBvaW50ID0g
bV9mcm9tTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gZnJvbVRhcmdldFBvaW50IDogbV9m
cm9tQ3VycmVudFBvaW50ICsgZnJvbVRhcmdldFBvaW50OwotICAgIG1fdG9DdXJyZW50UG9pbnQg
PSBtX3RvTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gdG9UYXJnZXRQb2ludCA6IG1fdG9D
dXJyZW50UG9pbnQgKyB0b1RhcmdldFBvaW50OworICAgIG1fZnJvbUN1cnJlbnRQb2ludCA9IG1f
ZnJvbU1vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IGZyb20udGFyZ2V0UG9pbnQgOiBtX2Zy
b21DdXJyZW50UG9pbnQgKyBmcm9tLnRhcmdldFBvaW50OworICAgIG1fdG9DdXJyZW50UG9pbnQg
PSBtX3RvTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gdG8udGFyZ2V0UG9pbnQgOiBtX3Rv
Q3VycmVudFBvaW50ICsgdG8udGFyZ2V0UG9pbnQ7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJv
b2wgU1ZHUGF0aEJsZW5kZXI6OmJsZW5kQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudChmbG9hdCBw
cm9ncmVzcykKIHsKLSAgICBGbG9hdFBvaW50IGZyb21UYXJnZXRQb2ludDsKLSAgICBGbG9hdFBv
aW50IGZyb21Qb2ludDI7Ci0gICAgRmxvYXRQb2ludCB0b1RhcmdldFBvaW50OwotICAgIEZsb2F0
UG9pbnQgdG9Qb2ludDI7Ci0gICAgaWYgKChtX2Zyb21Tb3VyY2UuaGFzTW9yZURhdGEoKSAmJiAh
bV9mcm9tU291cmNlLnBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudChmcm9tUG9pbnQyLCBm
cm9tVGFyZ2V0UG9pbnQpKQotICAgICAgICB8fCAhbV90b1NvdXJjZS5wYXJzZUN1cnZlVG9DdWJp
Y1Ntb290aFNlZ21lbnQodG9Qb2ludDIsIHRvVGFyZ2V0UG9pbnQpKQorICAgIGF1dG8gcmVzdWx0
ID0gcHVsbEZyb21Tb3VyY2VzKG1fZnJvbVNvdXJjZSwgbV90b1NvdXJjZSwgJlNWR1BhdGhTb3Vy
Y2U6OnBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudCk7CisgICAgaWYgKCFyZXN1bHQpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmICghbV9jb25zdW1lcikKICAgICAgICAgcmV0
dXJuIHRydWU7CiAKLSAgICBtX2NvbnN1bWVyLT5jdXJ2ZVRvQ3ViaWNTbW9vdGgoYmxlbmRBbmlt
YXRlZEZsb2F0UG9pbnQoZnJvbVBvaW50MiwgdG9Qb2ludDIsIHByb2dyZXNzKSwKLSAgICAgICAg
YmxlbmRBbmltYXRlZEZsb2F0UG9pbnQoZnJvbVRhcmdldFBvaW50LCB0b1RhcmdldFBvaW50LCBw
cm9ncmVzcyksCisgICAgYXV0byBbZnJvbSwgdG9dID0gKnJlc3VsdDsKKworICAgIG1fY29uc3Vt
ZXItPmN1cnZlVG9DdWJpY1Ntb290aChibGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tLnBvaW50
MiwgdG8ucG9pbnQyLCBwcm9ncmVzcyksCisgICAgICAgIGJsZW5kQW5pbWF0ZWRGbG9hdFBvaW50
KGZyb20udGFyZ2V0UG9pbnQsIHRvLnRhcmdldFBvaW50LCBwcm9ncmVzcyksCiAgICAgICAgIG1f
aXNJbkZpcnN0SGFsZk9mQW5pbWF0aW9uID8gbV9mcm9tTW9kZSA6IG1fdG9Nb2RlKTsKLSAgICBt
X2Zyb21DdXJyZW50UG9pbnQgPSBtX2Zyb21Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyBm
cm9tVGFyZ2V0UG9pbnQgOiBtX2Zyb21DdXJyZW50UG9pbnQgKyBmcm9tVGFyZ2V0UG9pbnQ7Ci0g
ICAgbV90b0N1cnJlbnRQb2ludCA9IG1fdG9Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyB0
b1RhcmdldFBvaW50IDogbV90b0N1cnJlbnRQb2ludCArIHRvVGFyZ2V0UG9pbnQ7CisgICAgbV9m
cm9tQ3VycmVudFBvaW50ID0gbV9mcm9tTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gZnJv
bS50YXJnZXRQb2ludCA6IG1fZnJvbUN1cnJlbnRQb2ludCArIGZyb20udGFyZ2V0UG9pbnQ7Cisg
ICAgbV90b0N1cnJlbnRQb2ludCA9IG1fdG9Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyB0
by50YXJnZXRQb2ludCA6IG1fdG9DdXJyZW50UG9pbnQgKyB0by50YXJnZXRQb2ludDsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBTVkdQYXRoQmxlbmRlcjo6YmxlbmRDdXJ2ZVRvUXVhZHJh
dGljU2VnbWVudChmbG9hdCBwcm9ncmVzcykKIHsKLSAgICBGbG9hdFBvaW50IGZyb21UYXJnZXRQ
b2ludDsKLSAgICBGbG9hdFBvaW50IGZyb21Qb2ludDE7Ci0gICAgRmxvYXRQb2ludCB0b1Rhcmdl
dFBvaW50OwotICAgIEZsb2F0UG9pbnQgdG9Qb2ludDE7Ci0gICAgaWYgKChtX2Zyb21Tb3VyY2Uu
aGFzTW9yZURhdGEoKSAmJiAhbV9mcm9tU291cmNlLnBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21l
bnQoZnJvbVBvaW50MSwgZnJvbVRhcmdldFBvaW50KSkKLSAgICAgICAgfHwgIW1fdG9Tb3VyY2Uu
cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCh0b1BvaW50MSwgdG9UYXJnZXRQb2ludCkpCisg
ICAgYXV0byByZXN1bHQgPSBwdWxsRnJvbVNvdXJjZXMobV9mcm9tU291cmNlLCBtX3RvU291cmNl
LCAmU1ZHUGF0aFNvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCk7CisgICAgaWYg
KCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmICghbV9jb25zdW1lcikK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBtX2NvbnN1bWVyLT5jdXJ2ZVRvUXVhZHJhdGlj
KGJsZW5kQW5pbWF0ZWRGbG9hdFBvaW50KGZyb21Qb2ludDEsIHRvUG9pbnQxLCBwcm9ncmVzcyks
Ci0gICAgICAgIGJsZW5kQW5pbWF0ZWRGbG9hdFBvaW50KGZyb21UYXJnZXRQb2ludCwgdG9UYXJn
ZXRQb2ludCwgcHJvZ3Jlc3MpLAorICAgIGF1dG8gW2Zyb20sIHRvXSA9ICpyZXN1bHQ7CisKKyAg
ICBtX2NvbnN1bWVyLT5jdXJ2ZVRvUXVhZHJhdGljKGJsZW5kQW5pbWF0ZWRGbG9hdFBvaW50KGZy
b20ucG9pbnQxLCB0by5wb2ludDEsIHByb2dyZXNzKSwKKyAgICAgICAgYmxlbmRBbmltYXRlZEZs
b2F0UG9pbnQoZnJvbS50YXJnZXRQb2ludCwgdG8udGFyZ2V0UG9pbnQsIHByb2dyZXNzKSwKICAg
ICAgICAgbV9pc0luRmlyc3RIYWxmT2ZBbmltYXRpb24gPyBtX2Zyb21Nb2RlIDogbV90b01vZGUp
OwotICAgIG1fZnJvbUN1cnJlbnRQb2ludCA9IG1fZnJvbU1vZGUgPT0gQWJzb2x1dGVDb29yZGlu
YXRlcyA/IGZyb21UYXJnZXRQb2ludCA6IG1fZnJvbUN1cnJlbnRQb2ludCArIGZyb21UYXJnZXRQ
b2ludDsKLSAgICBtX3RvQ3VycmVudFBvaW50ID0gbV90b01vZGUgPT0gQWJzb2x1dGVDb29yZGlu
YXRlcyA/IHRvVGFyZ2V0UG9pbnQgOiBtX3RvQ3VycmVudFBvaW50ICsgdG9UYXJnZXRQb2ludDsK
KyAgICBtX2Zyb21DdXJyZW50UG9pbnQgPSBtX2Zyb21Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0
ZXMgPyBmcm9tLnRhcmdldFBvaW50IDogbV9mcm9tQ3VycmVudFBvaW50ICsgZnJvbS50YXJnZXRQ
b2ludDsKKyAgICBtX3RvQ3VycmVudFBvaW50ID0gbV90b01vZGUgPT0gQWJzb2x1dGVDb29yZGlu
YXRlcyA/IHRvLnRhcmdldFBvaW50IDogbV90b0N1cnJlbnRQb2ludCArIHRvLnRhcmdldFBvaW50
OwogICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIFNWR1BhdGhCbGVuZGVyOjpibGVuZEN1cnZl
VG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KGZsb2F0IHByb2dyZXNzKQogewotICAgIEZsb2F0UG9p
bnQgZnJvbVRhcmdldFBvaW50OwotICAgIEZsb2F0UG9pbnQgdG9UYXJnZXRQb2ludDsKLSAgICBp
ZiAoKG1fZnJvbVNvdXJjZS5oYXNNb3JlRGF0YSgpICYmICFtX2Zyb21Tb3VyY2UucGFyc2VDdXJ2
ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudChmcm9tVGFyZ2V0UG9pbnQpKQotICAgICAgICB8fCAh
bV90b1NvdXJjZS5wYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KHRvVGFyZ2V0UG9p
bnQpKQorICAgIGF1dG8gcmVzdWx0ID0gcHVsbEZyb21Tb3VyY2VzKG1fZnJvbVNvdXJjZSwgbV90
b1NvdXJjZSwgJlNWR1BhdGhTb3VyY2U6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21l
bnQpOworICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAo
IW1fY29uc3VtZXIpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgbV9jb25zdW1lci0+Y3Vy
dmVUb1F1YWRyYXRpY1Ntb290aChibGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tVGFyZ2V0UG9p
bnQsIHRvVGFyZ2V0UG9pbnQsIHByb2dyZXNzKSwgbV9pc0luRmlyc3RIYWxmT2ZBbmltYXRpb24g
PyBtX2Zyb21Nb2RlIDogbV90b01vZGUpOwotICAgIG1fZnJvbUN1cnJlbnRQb2ludCA9IG1fZnJv
bU1vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IGZyb21UYXJnZXRQb2ludCA6IG1fZnJvbUN1
cnJlbnRQb2ludCArIGZyb21UYXJnZXRQb2ludDsKLSAgICBtX3RvQ3VycmVudFBvaW50ID0gbV90
b01vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IHRvVGFyZ2V0UG9pbnQgOiBtX3RvQ3VycmVu
dFBvaW50ICsgdG9UYXJnZXRQb2ludDsKKyAgICBhdXRvIFtmcm9tLCB0b10gPSAqcmVzdWx0Owor
CisgICAgbV9jb25zdW1lci0+Y3VydmVUb1F1YWRyYXRpY1Ntb290aChibGVuZEFuaW1hdGVkRmxv
YXRQb2ludChmcm9tLnRhcmdldFBvaW50LCB0by50YXJnZXRQb2ludCwgcHJvZ3Jlc3MpLCBtX2lz
SW5GaXJzdEhhbGZPZkFuaW1hdGlvbiA/IG1fZnJvbU1vZGUgOiBtX3RvTW9kZSk7CisgICAgbV9m
cm9tQ3VycmVudFBvaW50ID0gbV9mcm9tTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gZnJv
bS50YXJnZXRQb2ludCA6IG1fZnJvbUN1cnJlbnRQb2ludCArIGZyb20udGFyZ2V0UG9pbnQ7Cisg
ICAgbV90b0N1cnJlbnRQb2ludCA9IG1fdG9Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyB0
by50YXJnZXRQb2ludCA6IG1fdG9DdXJyZW50UG9pbnQgKyB0by50YXJnZXRQb2ludDsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBTVkdQYXRoQmxlbmRlcjo6YmxlbmRBcmNUb1NlZ21lbnQo
ZmxvYXQgcHJvZ3Jlc3MpCiB7Ci0gICAgZmxvYXQgZnJvbVJ4ID0gMDsKLSAgICBmbG9hdCBmcm9t
UnkgPSAwOwotICAgIGZsb2F0IGZyb21BbmdsZSA9IDA7Ci0gICAgYm9vbCBmcm9tTGFyZ2VBcmMg
PSBmYWxzZTsKLSAgICBib29sIGZyb21Td2VlcCA9IGZhbHNlOwotICAgIEZsb2F0UG9pbnQgZnJv
bVRhcmdldFBvaW50OwotICAgIGZsb2F0IHRvUnggPSAwOwotICAgIGZsb2F0IHRvUnkgPSAwOwot
ICAgIGZsb2F0IHRvQW5nbGUgPSAwOwotICAgIGJvb2wgdG9MYXJnZUFyYyA9IGZhbHNlOwotICAg
IGJvb2wgdG9Td2VlcCA9IGZhbHNlOwotICAgIEZsb2F0UG9pbnQgdG9UYXJnZXRQb2ludDsKLSAg
ICBpZiAoKG1fZnJvbVNvdXJjZS5oYXNNb3JlRGF0YSgpICYmICFtX2Zyb21Tb3VyY2UucGFyc2VB
cmNUb1NlZ21lbnQoZnJvbVJ4LCBmcm9tUnksIGZyb21BbmdsZSwgZnJvbUxhcmdlQXJjLCBmcm9t
U3dlZXAsIGZyb21UYXJnZXRQb2ludCkpCi0gICAgICAgIHx8ICFtX3RvU291cmNlLnBhcnNlQXJj
VG9TZWdtZW50KHRvUngsIHRvUnksIHRvQW5nbGUsIHRvTGFyZ2VBcmMsIHRvU3dlZXAsIHRvVGFy
Z2V0UG9pbnQpKQorICAgIGF1dG8gcmVzdWx0ID0gcHVsbEZyb21Tb3VyY2VzKG1fZnJvbVNvdXJj
ZSwgbV90b1NvdXJjZSwgJlNWR1BhdGhTb3VyY2U6OnBhcnNlQXJjVG9TZWdtZW50KTsKKyAgICBp
ZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKCFtX2NvbnN1bWVy
KQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAorICAgIGF1dG8gW2Zyb20sIHRvXSA9ICpyZXN1bHQ7
CisKICAgICBpZiAobV9hZGRUeXBlc0NvdW50KSB7CiAgICAgICAgIEFTU0VSVChtX2Zyb21Nb2Rl
ID09IG1fdG9Nb2RlKTsKLSAgICAgICAgRmxvYXRQb2ludCBzY2FsZWRUb1RhcmdldFBvaW50ID0g
dG9UYXJnZXRQb2ludDsKKyAgICAgICAgYXV0byBzY2FsZWRUb1RhcmdldFBvaW50ID0gdG8udGFy
Z2V0UG9pbnQ7CiAgICAgICAgIHNjYWxlZFRvVGFyZ2V0UG9pbnQuc2NhbGUobV9hZGRUeXBlc0Nv
dW50KTsKLSAgICAgICAgbV9jb25zdW1lci0+YXJjVG8oZnJvbVJ4ICsgdG9SeCAqIG1fYWRkVHlw
ZXNDb3VudCwKLSAgICAgICAgICAgIGZyb21SeSArIHRvUnkgKiBtX2FkZFR5cGVzQ291bnQsCi0g
ICAgICAgICAgICBmcm9tQW5nbGUgKyB0b0FuZ2xlICogbV9hZGRUeXBlc0NvdW50LAotICAgICAg
ICAgICAgZnJvbUxhcmdlQXJjIHx8IHRvTGFyZ2VBcmMsCi0gICAgICAgICAgICBmcm9tU3dlZXAg
fHwgdG9Td2VlcCwKLSAgICAgICAgICAgIGZyb21UYXJnZXRQb2ludCArIHNjYWxlZFRvVGFyZ2V0
UG9pbnQsCisgICAgICAgIG1fY29uc3VtZXItPmFyY1RvKGZyb20ucnggKyB0by5yeCAqIG1fYWRk
VHlwZXNDb3VudCwKKyAgICAgICAgICAgIGZyb20ucnggKyB0by5yeSAqIG1fYWRkVHlwZXNDb3Vu
dCwKKyAgICAgICAgICAgIGZyb20uYW5nbGUgKyB0by5hbmdsZSAqIG1fYWRkVHlwZXNDb3VudCwK
KyAgICAgICAgICAgIGZyb20ubGFyZ2VBcmMgfHwgdG8ubGFyZ2VBcmMsCisgICAgICAgICAgICBm
cm9tLnN3ZWVwIHx8IHRvLnN3ZWVwLAorICAgICAgICAgICAgZnJvbS50YXJnZXRQb2ludCArIHNj
YWxlZFRvVGFyZ2V0UG9pbnQsCiAgICAgICAgICAgICBtX2Zyb21Nb2RlKTsKICAgICB9IGVsc2Ug
ewotICAgICAgICBtX2NvbnN1bWVyLT5hcmNUbyhibGVuZChmcm9tUngsIHRvUngsIHByb2dyZXNz
KSwKLSAgICAgICAgICAgIGJsZW5kKGZyb21SeSwgdG9SeSwgcHJvZ3Jlc3MpLAotICAgICAgICAg
ICAgYmxlbmQoZnJvbUFuZ2xlLCB0b0FuZ2xlLCBwcm9ncmVzcyksCi0gICAgICAgICAgICBtX2lz
SW5GaXJzdEhhbGZPZkFuaW1hdGlvbiA/IGZyb21MYXJnZUFyYyA6IHRvTGFyZ2VBcmMsCi0gICAg
ICAgICAgICBtX2lzSW5GaXJzdEhhbGZPZkFuaW1hdGlvbiA/IGZyb21Td2VlcCA6IHRvU3dlZXAs
Ci0gICAgICAgICAgICBibGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tVGFyZ2V0UG9pbnQsIHRv
VGFyZ2V0UG9pbnQsIHByb2dyZXNzKSwKKyAgICAgICAgbV9jb25zdW1lci0+YXJjVG8oYmxlbmQo
ZnJvbS5yeCwgdG8ucngsIHByb2dyZXNzKSwKKyAgICAgICAgICAgIGJsZW5kKGZyb20ucnksIHRv
LnJ5LCBwcm9ncmVzcyksCisgICAgICAgICAgICBibGVuZChmcm9tLmFuZ2xlLCB0by5hbmdsZSwg
cHJvZ3Jlc3MpLAorICAgICAgICAgICAgbV9pc0luRmlyc3RIYWxmT2ZBbmltYXRpb24gPyBmcm9t
LmxhcmdlQXJjIDogdG8ubGFyZ2VBcmMsCisgICAgICAgICAgICBtX2lzSW5GaXJzdEhhbGZPZkFu
aW1hdGlvbiA/IGZyb20uc3dlZXAgOiB0by5zd2VlcCwKKyAgICAgICAgICAgIGJsZW5kQW5pbWF0
ZWRGbG9hdFBvaW50KGZyb20udGFyZ2V0UG9pbnQsIHRvLnRhcmdldFBvaW50LCBwcm9ncmVzcyks
CiAgICAgICAgICAgICBtX2lzSW5GaXJzdEhhbGZPZkFuaW1hdGlvbiA/IG1fZnJvbU1vZGUgOiBt
X3RvTW9kZSk7CiAgICAgfQotICAgIG1fZnJvbUN1cnJlbnRQb2ludCA9IG1fZnJvbU1vZGUgPT0g
QWJzb2x1dGVDb29yZGluYXRlcyA/IGZyb21UYXJnZXRQb2ludCA6IG1fZnJvbUN1cnJlbnRQb2lu
dCArIGZyb21UYXJnZXRQb2ludDsKLSAgICBtX3RvQ3VycmVudFBvaW50ID0gbV90b01vZGUgPT0g
QWJzb2x1dGVDb29yZGluYXRlcyA/IHRvVGFyZ2V0UG9pbnQgOiBtX3RvQ3VycmVudFBvaW50ICsg
dG9UYXJnZXRQb2ludDsKKyAgICBtX2Zyb21DdXJyZW50UG9pbnQgPSBtX2Zyb21Nb2RlID09IEFi
c29sdXRlQ29vcmRpbmF0ZXMgPyBmcm9tLnRhcmdldFBvaW50IDogbV9mcm9tQ3VycmVudFBvaW50
ICsgZnJvbS50YXJnZXRQb2ludDsKKyAgICBtX3RvQ3VycmVudFBvaW50ID0gbV90b01vZGUgPT0g
QWJzb2x1dGVDb29yZGluYXRlcyA/IHRvLnRhcmdldFBvaW50IDogbV90b0N1cnJlbnRQb2ludCAr
IHRvLnRhcmdldFBvaW50OwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0zNTAsMjAgKzM0OCwy
MiBAQCBib29sIFNWR1BhdGhCbGVuZGVyOjpjYW5CbGVuZFBhdGhzKCkKICAgICBmbG9hdCBwcm9n
cmVzcyA9IDAuNTsKICAgICBib29sIGZyb21Tb3VyY2VIYWREYXRhID0gbV9mcm9tU291cmNlLmhh
c01vcmVEYXRhKCk7CiAgICAgd2hpbGUgKG1fdG9Tb3VyY2UuaGFzTW9yZURhdGEoKSkgewotICAg
ICAgICBTVkdQYXRoU2VnVHlwZSBmcm9tQ29tbWFuZDsKLSAgICAgICAgU1ZHUGF0aFNlZ1R5cGUg
dG9Db21tYW5kOwotICAgICAgICBpZiAoKGZyb21Tb3VyY2VIYWREYXRhICYmICFtX2Zyb21Tb3Vy
Y2UucGFyc2VTVkdTZWdtZW50VHlwZShmcm9tQ29tbWFuZCkpIHx8ICFtX3RvU291cmNlLnBhcnNl
U1ZHU2VnbWVudFR5cGUodG9Db21tYW5kKSkKKyAgICAgICAgYXV0byBmcm9tQ29tbWFuZCA9IG1f
ZnJvbVNvdXJjZS5wYXJzZVNWR1NlZ21lbnRUeXBlKCk7CisgICAgICAgIGlmIChmcm9tU291cmNl
SGFkRGF0YSAmJiAhZnJvbUNvbW1hbmQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIGF1dG8gdG9Db21tYW5kID0gbV90b1NvdXJjZS5wYXJzZVNWR1NlZ21lbnRUeXBlKCk7Cisg
ICAgICAgIGlmICghdG9Db21tYW5kKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
ICAgIG1fdG9Nb2RlID0gY29vcmRpbmF0ZU1vZGVPZkNvbW1hbmQodG9Db21tYW5kKTsKLSAgICAg
ICAgbV9mcm9tTW9kZSA9IGZyb21Tb3VyY2VIYWREYXRhID8gY29vcmRpbmF0ZU1vZGVPZkNvbW1h
bmQoZnJvbUNvbW1hbmQpIDogbV90b01vZGU7CisgICAgICAgIG1fdG9Nb2RlID0gY29vcmRpbmF0
ZU1vZGVPZkNvbW1hbmQoKnRvQ29tbWFuZCk7CisgICAgICAgIG1fZnJvbU1vZGUgPSBmcm9tU291
cmNlSGFkRGF0YSA/IGNvb3JkaW5hdGVNb2RlT2ZDb21tYW5kKCpmcm9tQ29tbWFuZCkgOiBtX3Rv
TW9kZTsKICAgICAgICAgaWYgKG1fZnJvbU1vZGUgIT0gbV90b01vZGUgJiYgbV9hZGRUeXBlc0Nv
dW50KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGlmIChmcm9tU291cmNl
SGFkRGF0YSAmJiAhaXNTZWdtZW50RXF1YWwoZnJvbUNvbW1hbmQsIHRvQ29tbWFuZCwgbV9mcm9t
TW9kZSwgbV90b01vZGUpKQorICAgICAgICBpZiAoZnJvbVNvdXJjZUhhZERhdGEgJiYgIWlzU2Vn
bWVudEVxdWFsKCpmcm9tQ29tbWFuZCwgKnRvQ29tbWFuZCwgbV9mcm9tTW9kZSwgbV90b01vZGUp
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIHN3aXRjaCAodG9Db21tYW5k
KSB7CisgICAgICAgIHN3aXRjaCAoKnRvQ29tbWFuZCkgewogICAgICAgICBjYXNlIFBhdGhTZWdN
b3ZlVG9SZWw6CiAgICAgICAgIGNhc2UgUGF0aFNlZ01vdmVUb0FiczoKICAgICAgICAgICAgIGlm
ICghYmxlbmRNb3ZlVG9TZWdtZW50KHByb2dyZXNzKSkKQEAgLTQzMiwyMCArNDMyLDIyIEBAIGJv
b2wgU1ZHUGF0aEJsZW5kZXI6OmJsZW5kQW5pbWF0ZWRQYXRoKGYKIAogICAgIGJvb2wgZnJvbVNv
dXJjZUhhZERhdGEgPSBtX2Zyb21Tb3VyY2UuaGFzTW9yZURhdGEoKTsKICAgICB3aGlsZSAobV90
b1NvdXJjZS5oYXNNb3JlRGF0YSgpKSB7Ci0gICAgICAgIFNWR1BhdGhTZWdUeXBlIGZyb21Db21t
YW5kOwotICAgICAgICBTVkdQYXRoU2VnVHlwZSB0b0NvbW1hbmQ7Ci0gICAgICAgIGlmICgoZnJv
bVNvdXJjZUhhZERhdGEgJiYgIW1fZnJvbVNvdXJjZS5wYXJzZVNWR1NlZ21lbnRUeXBlKGZyb21D
b21tYW5kKSkgfHwgIW1fdG9Tb3VyY2UucGFyc2VTVkdTZWdtZW50VHlwZSh0b0NvbW1hbmQpKQor
ICAgICAgICBhdXRvIGZyb21Db21tYW5kID0gbV9mcm9tU291cmNlLnBhcnNlU1ZHU2VnbWVudFR5
cGUoKTsKKyAgICAgICAgaWYgKGZyb21Tb3VyY2VIYWREYXRhICYmICFmcm9tQ29tbWFuZCkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYXV0byB0b0NvbW1hbmQgPSBtX3RvU291
cmNlLnBhcnNlU1ZHU2VnbWVudFR5cGUoKTsKKyAgICAgICAgaWYgKCF0b0NvbW1hbmQpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgbV90b01vZGUgPSBjb29yZGluYXRlTW9k
ZU9mQ29tbWFuZCh0b0NvbW1hbmQpOwotICAgICAgICBtX2Zyb21Nb2RlID0gZnJvbVNvdXJjZUhh
ZERhdGEgPyBjb29yZGluYXRlTW9kZU9mQ29tbWFuZChmcm9tQ29tbWFuZCkgOiBtX3RvTW9kZTsK
KyAgICAgICAgbV90b01vZGUgPSBjb29yZGluYXRlTW9kZU9mQ29tbWFuZCgqdG9Db21tYW5kKTsK
KyAgICAgICAgbV9mcm9tTW9kZSA9IGZyb21Tb3VyY2VIYWREYXRhID8gY29vcmRpbmF0ZU1vZGVP
ZkNvbW1hbmQoKmZyb21Db21tYW5kKSA6IG1fdG9Nb2RlOwogICAgICAgICBpZiAobV9mcm9tTW9k
ZSAhPSBtX3RvTW9kZSAmJiBtX2FkZFR5cGVzQ291bnQpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICAgICAgaWYgKGZyb21Tb3VyY2VIYWREYXRhICYmICFpc1NlZ21lbnRFcXVhbChm
cm9tQ29tbWFuZCwgdG9Db21tYW5kLCBtX2Zyb21Nb2RlLCBtX3RvTW9kZSkpCisgICAgICAgIGlm
IChmcm9tU291cmNlSGFkRGF0YSAmJiAhaXNTZWdtZW50RXF1YWwoKmZyb21Db21tYW5kLCAqdG9D
b21tYW5kLCBtX2Zyb21Nb2RlLCBtX3RvTW9kZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICAgICAgc3dpdGNoICh0b0NvbW1hbmQpIHsKKyAgICAgICAgc3dpdGNoICgqdG9Db21t
YW5kKSB7CiAgICAgICAgIGNhc2UgUGF0aFNlZ01vdmVUb1JlbDoKICAgICAgICAgY2FzZSBQYXRo
U2VnTW92ZVRvQWJzOgogICAgICAgICAgICAgaWYgKCFibGVuZE1vdmVUb1NlZ21lbnQocHJvZ3Jl
c3MpKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3RyZWFtU291cmNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW1Tb3Vy
Y2UuY3BwCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEJ5
dGVTdHJlYW1Tb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3OCArMzQsODYgQEAgYm9v
bCBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6aGFzTW9yZURhdAogICAgIHJldHVybiBtX3N0cmVh
bUN1cnJlbnQgPCBtX3N0cmVhbUVuZDsKIH0KIAotYm9vbCBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJj
ZTo6cGFyc2VTVkdTZWdtZW50VHlwZShTVkdQYXRoU2VnVHlwZSYgcGF0aFNlZ1R5cGUpCitTVkdQ
YXRoU2VnVHlwZSBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6bmV4dENvbW1hbmQoU1ZHUGF0aFNl
Z1R5cGUpCiB7Ci0gICAgcGF0aFNlZ1R5cGUgPSBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnVHlwZT4o
cmVhZFNWR1NlZ21lbnRUeXBlKCkpOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBzdGF0
aWNfY2FzdDxTVkdQYXRoU2VnVHlwZT4ocmVhZFNWR1NlZ21lbnRUeXBlKCkpOwogfQogCi1TVkdQ
YXRoU2VnVHlwZSBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6bmV4dENvbW1hbmQoU1ZHUGF0aFNl
Z1R5cGUpCitPcHRpb25hbDxTVkdQYXRoU2VnVHlwZT4gU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6
OnBhcnNlU1ZHU2VnbWVudFR5cGUoKQogewogICAgIHJldHVybiBzdGF0aWNfY2FzdDxTVkdQYXRo
U2VnVHlwZT4ocmVhZFNWR1NlZ21lbnRUeXBlKCkpOwogfQogCi1ib29sIFNWR1BhdGhCeXRlU3Ry
ZWFtU291cmNlOjpwYXJzZU1vdmVUb1NlZ21lbnQoRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCitP
cHRpb25hbDxTVkdQYXRoU291cmNlOjpNb3ZlVG9TZWdtZW50PiBTVkdQYXRoQnl0ZVN0cmVhbVNv
dXJjZTo6cGFyc2VNb3ZlVG9TZWdtZW50KCkKIHsKLSAgICB0YXJnZXRQb2ludCA9IHJlYWRGbG9h
dFBvaW50KCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgTW92ZVRvU2VnbWVudCBzZWdtZW50Owor
ICAgIHNlZ21lbnQudGFyZ2V0UG9pbnQgPSByZWFkRmxvYXRQb2ludCgpOworICAgIHJldHVybiBz
ZWdtZW50OwogfQogCi1ib29sIFNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZUxpbmVUb1Nl
Z21lbnQoRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCitPcHRpb25hbDxTVkdQYXRoU291cmNlOjpM
aW5lVG9TZWdtZW50PiBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VMaW5lVG9TZWdtZW50
KCkKIHsKLSAgICB0YXJnZXRQb2ludCA9IHJlYWRGbG9hdFBvaW50KCk7Ci0gICAgcmV0dXJuIHRy
dWU7CisgICAgTGluZVRvU2VnbWVudCBzZWdtZW50OworICAgIHNlZ21lbnQudGFyZ2V0UG9pbnQg
PSByZWFkRmxvYXRQb2ludCgpOworICAgIHJldHVybiBzZWdtZW50OwogfQogCi1ib29sIFNWR1Bh
dGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZUxpbmVUb0hvcml6b250YWxTZWdtZW50KGZsb2F0JiB4
KQorT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6TGluZVRvSG9yaXpvbnRhbFNlZ21lbnQ+IFNWR1Bh
dGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZUxpbmVUb0hvcml6b250YWxTZWdtZW50KCkKIHsKLSAg
ICB4ID0gcmVhZEZsb2F0KCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgTGluZVRvSG9yaXpvbnRh
bFNlZ21lbnQgc2VnbWVudDsKKyAgICBzZWdtZW50LnggPSByZWFkRmxvYXQoKTsKKyAgICByZXR1
cm4gc2VnbWVudDsKIH0KIAotYm9vbCBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VMaW5l
VG9WZXJ0aWNhbFNlZ21lbnQoZmxvYXQmIHkpCitPcHRpb25hbDxTVkdQYXRoU291cmNlOjpMaW5l
VG9WZXJ0aWNhbFNlZ21lbnQ+IFNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZUxpbmVUb1Zl
cnRpY2FsU2VnbWVudCgpCiB7Ci0gICAgeSA9IHJlYWRGbG9hdCgpOwotICAgIHJldHVybiB0cnVl
OworICAgIExpbmVUb1ZlcnRpY2FsU2VnbWVudCBzZWdtZW50OworICAgIHNlZ21lbnQueSA9IHJl
YWRGbG9hdCgpOworICAgIHJldHVybiBzZWdtZW50OwogfQogCi1ib29sIFNWR1BhdGhCeXRlU3Ry
ZWFtU291cmNlOjpwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQoRmxvYXRQb2ludCYgcG9pbnQxLCBG
bG9hdFBvaW50JiBwb2ludDIsIEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQorT3B0aW9uYWw8U1ZH
UGF0aFNvdXJjZTo6Q3VydmVUb0N1YmljU2VnbWVudD4gU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6
OnBhcnNlQ3VydmVUb0N1YmljU2VnbWVudCgpCiB7Ci0gICAgcG9pbnQxID0gcmVhZEZsb2F0UG9p
bnQoKTsKLSAgICBwb2ludDIgPSByZWFkRmxvYXRQb2ludCgpOwotICAgIHRhcmdldFBvaW50ID0g
cmVhZEZsb2F0UG9pbnQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBDdXJ2ZVRvQ3ViaWNTZWdt
ZW50IHNlZ21lbnQ7CisgICAgc2VnbWVudC5wb2ludDEgPSByZWFkRmxvYXRQb2ludCgpOworICAg
IHNlZ21lbnQucG9pbnQyID0gcmVhZEZsb2F0UG9pbnQoKTsKKyAgICBzZWdtZW50LnRhcmdldFBv
aW50ID0gcmVhZEZsb2F0UG9pbnQoKTsKKyAgICByZXR1cm4gc2VnbWVudDsKIH0KIAotYm9vbCBT
VkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KEZs
b2F0UG9pbnQmIHBvaW50MiwgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCitPcHRpb25hbDxTVkdQ
YXRoU291cmNlOjpDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50PiBTVkdQYXRoQnl0ZVN0cmVhbVNv
dXJjZTo6cGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KCkKIHsKLSAgICBwb2ludDIgPSBy
ZWFkRmxvYXRQb2ludCgpOwotICAgIHRhcmdldFBvaW50ID0gcmVhZEZsb2F0UG9pbnQoKTsKLSAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50IHNlZ21lbnQ7Cisg
ICAgc2VnbWVudC5wb2ludDIgPSByZWFkRmxvYXRQb2ludCgpOworICAgIHNlZ21lbnQudGFyZ2V0
UG9pbnQgPSByZWFkRmxvYXRQb2ludCgpOworICAgIHJldHVybiBzZWdtZW50OwogfQogCi1ib29s
IFNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KEZs
b2F0UG9pbnQmIHBvaW50MSwgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCitPcHRpb25hbDxTVkdQ
YXRoU291cmNlOjpDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudD4gU1ZHUGF0aEJ5dGVTdHJlYW1Tb3Vy
Y2U6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQoKQogewotICAgIHBvaW50MSA9IHJlYWRG
bG9hdFBvaW50KCk7Ci0gICAgdGFyZ2V0UG9pbnQgPSByZWFkRmxvYXRQb2ludCgpOwotICAgIHJl
dHVybiB0cnVlOworICAgIEN1cnZlVG9RdWFkcmF0aWNTZWdtZW50IHNlZ21lbnQ7CisgICAgc2Vn
bWVudC5wb2ludDEgPSByZWFkRmxvYXRQb2ludCgpOworICAgIHNlZ21lbnQudGFyZ2V0UG9pbnQg
PSByZWFkRmxvYXRQb2ludCgpOworICAgIHJldHVybiBzZWdtZW50OwogfQogCi1ib29sIFNWR1Bh
dGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KEZs
b2F0UG9pbnQmIHRhcmdldFBvaW50KQorT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6Q3VydmVUb1F1
YWRyYXRpY1Ntb290aFNlZ21lbnQ+IFNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZUN1cnZl
VG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KCkKIHsKLSAgICB0YXJnZXRQb2ludCA9IHJlYWRGbG9h
dFBvaW50KCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNl
Z21lbnQgc2VnbWVudDsKKyAgICBzZWdtZW50LnRhcmdldFBvaW50ID0gcmVhZEZsb2F0UG9pbnQo
KTsKKyAgICByZXR1cm4gc2VnbWVudDsKIH0KIAotYm9vbCBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJj
ZTo6cGFyc2VBcmNUb1NlZ21lbnQoZmxvYXQmIHJ4LCBmbG9hdCYgcnksIGZsb2F0JiBhbmdsZSwg
Ym9vbCYgbGFyZ2VBcmMsIGJvb2wmIHN3ZWVwLCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCkKK09w
dGlvbmFsPFNWR1BhdGhTb3VyY2U6OkFyY1RvU2VnbWVudD4gU1ZHUGF0aEJ5dGVTdHJlYW1Tb3Vy
Y2U6OnBhcnNlQXJjVG9TZWdtZW50KCkKIHsKLSAgICByeCA9IHJlYWRGbG9hdCgpOwotICAgIHJ5
ID0gcmVhZEZsb2F0KCk7Ci0gICAgYW5nbGUgPSByZWFkRmxvYXQoKTsKLSAgICBsYXJnZUFyYyA9
IHJlYWRGbGFnKCk7Ci0gICAgc3dlZXAgPSByZWFkRmxhZygpOwotICAgIHRhcmdldFBvaW50ID0g
cmVhZEZsb2F0UG9pbnQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBBcmNUb1NlZ21lbnQgc2Vn
bWVudDsKKyAgICBzZWdtZW50LnJ4ID0gcmVhZEZsb2F0KCk7CisgICAgc2VnbWVudC5yeSA9IHJl
YWRGbG9hdCgpOworICAgIHNlZ21lbnQuYW5nbGUgPSByZWFkRmxvYXQoKTsKKyAgICBzZWdtZW50
LmxhcmdlQXJjID0gcmVhZEZsYWcoKTsKKyAgICBzZWdtZW50LnN3ZWVwID0gcmVhZEZsYWcoKTsK
KyAgICBzZWdtZW50LnRhcmdldFBvaW50ID0gcmVhZEZsb2F0UG9pbnQoKTsKKyAgICByZXR1cm4g
c2VnbWVudDsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3Ry
ZWFtU291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhCeXRl
U3RyZWFtU291cmNlLmgJKHJldmlzaW9uIDI2MzE3NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdQYXRoQnl0ZVN0cmVhbVNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxOCArMzIsMTgg
QEAgcHVibGljOgogcHJpdmF0ZToKICAgICBib29sIGhhc01vcmVEYXRhKCkgY29uc3QgZmluYWw7
CiAgICAgYm9vbCBtb3ZlVG9OZXh0VG9rZW4oKSBmaW5hbCB7IHJldHVybiB0cnVlOyB9Ci0gICAg
Ym9vbCBwYXJzZVNWR1NlZ21lbnRUeXBlKFNWR1BhdGhTZWdUeXBlJikgZmluYWw7CiAgICAgU1ZH
UGF0aFNlZ1R5cGUgbmV4dENvbW1hbmQoU1ZHUGF0aFNlZ1R5cGUpIGZpbmFsOwogCi0gICAgYm9v
bCBwYXJzZU1vdmVUb1NlZ21lbnQoRmxvYXRQb2ludCYpIGZpbmFsOwotICAgIGJvb2wgcGFyc2VM
aW5lVG9TZWdtZW50KEZsb2F0UG9pbnQmKSBmaW5hbDsKLSAgICBib29sIHBhcnNlTGluZVRvSG9y
aXpvbnRhbFNlZ21lbnQoZmxvYXQmKSBmaW5hbDsKLSAgICBib29sIHBhcnNlTGluZVRvVmVydGlj
YWxTZWdtZW50KGZsb2F0JikgZmluYWw7Ci0gICAgYm9vbCBwYXJzZUN1cnZlVG9DdWJpY1NlZ21l
bnQoRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmLCBGbG9hdFBvaW50JikgZmluYWw7Ci0gICAgYm9v
bCBwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQoRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQm
KSBmaW5hbDsKLSAgICBib29sIHBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQoRmxvYXRQb2lu
dCYsIEZsb2F0UG9pbnQmKSBmaW5hbDsKLSAgICBib29sIHBhcnNlQ3VydmVUb1F1YWRyYXRpY1Nt
b290aFNlZ21lbnQoRmxvYXRQb2ludCYpIGZpbmFsOwotICAgIGJvb2wgcGFyc2VBcmNUb1NlZ21l
bnQoZmxvYXQmLCBmbG9hdCYsIGZsb2F0JiwgYm9vbCYsIGJvb2wmLCBGbG9hdFBvaW50JikgZmlu
YWw7CisgICAgT3B0aW9uYWw8U1ZHUGF0aFNlZ1R5cGU+IHBhcnNlU1ZHU2VnbWVudFR5cGUoKSBm
aW5hbDsKKyAgICBPcHRpb25hbDxNb3ZlVG9TZWdtZW50PiBwYXJzZU1vdmVUb1NlZ21lbnQoKSBm
aW5hbDsKKyAgICBPcHRpb25hbDxMaW5lVG9TZWdtZW50PiBwYXJzZUxpbmVUb1NlZ21lbnQoKSBm
aW5hbDsKKyAgICBPcHRpb25hbDxMaW5lVG9Ib3Jpem9udGFsU2VnbWVudD4gcGFyc2VMaW5lVG9I
b3Jpem9udGFsU2VnbWVudCgpIGZpbmFsOworICAgIE9wdGlvbmFsPExpbmVUb1ZlcnRpY2FsU2Vn
bWVudD4gcGFyc2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnQoKSBmaW5hbDsKKyAgICBPcHRpb25hbDxD
dXJ2ZVRvQ3ViaWNTZWdtZW50PiBwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQoKSBmaW5hbDsKKyAg
ICBPcHRpb25hbDxDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50PiBwYXJzZUN1cnZlVG9DdWJpY1Nt
b290aFNlZ21lbnQoKSBmaW5hbDsKKyAgICBPcHRpb25hbDxDdXJ2ZVRvUXVhZHJhdGljU2VnbWVu
dD4gcGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCgpIGZpbmFsOworICAgIE9wdGlvbmFsPEN1
cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50PiBwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhT
ZWdtZW50KCkgZmluYWw7CisgICAgT3B0aW9uYWw8QXJjVG9TZWdtZW50PiBwYXJzZUFyY1RvU2Vn
bWVudCgpIGZpbmFsOwogCiAjaWYgQ09NUElMRVIoTVNWQykKICNwcmFnbWEgd2FybmluZyhkaXNh
YmxlOiA0NzAxKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhQYXJzZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoUGFyc2VyLmNwcAkocmV2aXNp
b24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhQYXJzZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MywxMDIgKzczLDk5IEBAIHZvaWQgU1ZHUGF0aFBhcnNlcjo6cGFyc2VD
bG9zZVBhdGhTZWdtZW4KIAogYm9vbCBTVkdQYXRoUGFyc2VyOjpwYXJzZU1vdmVUb1NlZ21lbnQo
KQogewotICAgIEZsb2F0UG9pbnQgdGFyZ2V0UG9pbnQ7Ci0gICAgaWYgKCFtX3NvdXJjZS5wYXJz
ZU1vdmVUb1NlZ21lbnQodGFyZ2V0UG9pbnQpKQorICAgIGF1dG8gcmVzdWx0ID0gbV9zb3VyY2Uu
cGFyc2VNb3ZlVG9TZWdtZW50KCk7CisgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIGlmIChtX3BhdGhQYXJzaW5nTW9kZSA9PSBOb3JtYWxpemVkUGFyc2luZykg
ewogICAgICAgICBpZiAobV9tb2RlID09IFJlbGF0aXZlQ29vcmRpbmF0ZXMpCi0gICAgICAgICAg
ICBtX2N1cnJlbnRQb2ludCArPSB0YXJnZXRQb2ludDsKKyAgICAgICAgICAgIG1fY3VycmVudFBv
aW50ICs9IHJlc3VsdC0+dGFyZ2V0UG9pbnQ7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1f
Y3VycmVudFBvaW50ID0gdGFyZ2V0UG9pbnQ7CisgICAgICAgICAgICBtX2N1cnJlbnRQb2ludCA9
IHJlc3VsdC0+dGFyZ2V0UG9pbnQ7CiAgICAgICAgIG1fc3ViUGF0aFBvaW50ID0gbV9jdXJyZW50
UG9pbnQ7CiAgICAgICAgIG1fY29uc3VtZXIubW92ZVRvKG1fY3VycmVudFBvaW50LCBtX2Nsb3Nl
UGF0aCwgQWJzb2x1dGVDb29yZGluYXRlcyk7CiAgICAgfSBlbHNlCi0gICAgICAgIG1fY29uc3Vt
ZXIubW92ZVRvKHRhcmdldFBvaW50LCBtX2Nsb3NlUGF0aCwgbV9tb2RlKTsKKyAgICAgICAgbV9j
b25zdW1lci5tb3ZlVG8ocmVzdWx0LT50YXJnZXRQb2ludCwgbV9jbG9zZVBhdGgsIG1fbW9kZSk7
CiAgICAgbV9jbG9zZVBhdGggPSBmYWxzZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBT
VkdQYXRoUGFyc2VyOjpwYXJzZUxpbmVUb1NlZ21lbnQoKQogewotICAgIEZsb2F0UG9pbnQgdGFy
Z2V0UG9pbnQ7Ci0gICAgaWYgKCFtX3NvdXJjZS5wYXJzZUxpbmVUb1NlZ21lbnQodGFyZ2V0UG9p
bnQpKQorICAgIGF1dG8gcmVzdWx0ID0gbV9zb3VyY2UucGFyc2VMaW5lVG9TZWdtZW50KCk7Cisg
ICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChtX3BhdGhQ
YXJzaW5nTW9kZSA9PSBOb3JtYWxpemVkUGFyc2luZykgewogICAgICAgICBpZiAobV9tb2RlID09
IFJlbGF0aXZlQ29vcmRpbmF0ZXMpCi0gICAgICAgICAgICBtX2N1cnJlbnRQb2ludCArPSB0YXJn
ZXRQb2ludDsKKyAgICAgICAgICAgIG1fY3VycmVudFBvaW50ICs9IHJlc3VsdC0+dGFyZ2V0UG9p
bnQ7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fY3VycmVudFBvaW50ID0gdGFyZ2V0UG9p
bnQ7CisgICAgICAgICAgICBtX2N1cnJlbnRQb2ludCA9IHJlc3VsdC0+dGFyZ2V0UG9pbnQ7CiAg
ICAgICAgIG1fY29uc3VtZXIubGluZVRvKG1fY3VycmVudFBvaW50LCBBYnNvbHV0ZUNvb3JkaW5h
dGVzKTsKICAgICB9IGVsc2UKLSAgICAgICAgbV9jb25zdW1lci5saW5lVG8odGFyZ2V0UG9pbnQs
IG1fbW9kZSk7CisgICAgICAgIG1fY29uc3VtZXIubGluZVRvKHJlc3VsdC0+dGFyZ2V0UG9pbnQs
IG1fbW9kZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgU1ZHUGF0aFBhcnNlcjo6cGFy
c2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudCgpCiB7Ci0gICAgZmxvYXQgdG9YOwotICAgIGlmICgh
bV9zb3VyY2UucGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudCh0b1gpKQorICAgIGF1dG8gcmVz
dWx0ID0gbV9zb3VyY2UucGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudCgpOworICAgIGlmICgh
cmVzdWx0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAobV9wYXRoUGFyc2luZ01v
ZGUgPT0gTm9ybWFsaXplZFBhcnNpbmcpIHsKICAgICAgICAgaWYgKG1fbW9kZSA9PSBSZWxhdGl2
ZUNvb3JkaW5hdGVzKQotICAgICAgICAgICAgbV9jdXJyZW50UG9pbnQubW92ZSh0b1gsIDApOwor
ICAgICAgICAgICAgbV9jdXJyZW50UG9pbnQubW92ZShyZXN1bHQtPngsIDApOwogICAgICAgICBl
bHNlCi0gICAgICAgICAgICBtX2N1cnJlbnRQb2ludC5zZXRYKHRvWCk7CisgICAgICAgICAgICBt
X2N1cnJlbnRQb2ludC5zZXRYKHJlc3VsdC0+eCk7CiAgICAgICAgIG1fY29uc3VtZXIubGluZVRv
KG1fY3VycmVudFBvaW50LCBBYnNvbHV0ZUNvb3JkaW5hdGVzKTsKICAgICB9IGVsc2UKLSAgICAg
ICAgbV9jb25zdW1lci5saW5lVG9Ib3Jpem9udGFsKHRvWCwgbV9tb2RlKTsKKyAgICAgICAgbV9j
b25zdW1lci5saW5lVG9Ib3Jpem9udGFsKHJlc3VsdC0+eCwgbV9tb2RlKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAogYm9vbCBTVkdQYXRoUGFyc2VyOjpwYXJzZUxpbmVUb1ZlcnRpY2FsU2VnbWVu
dCgpCiB7Ci0gICAgZmxvYXQgdG9ZOwotICAgIGlmICghbV9zb3VyY2UucGFyc2VMaW5lVG9WZXJ0
aWNhbFNlZ21lbnQodG9ZKSkKKyAgICBhdXRvIHJlc3VsdCA9IG1fc291cmNlLnBhcnNlTGluZVRv
VmVydGljYWxTZWdtZW50KCk7CisgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIGlmIChtX3BhdGhQYXJzaW5nTW9kZSA9PSBOb3JtYWxpemVkUGFyc2luZykgewog
ICAgICAgICBpZiAobV9tb2RlID09IFJlbGF0aXZlQ29vcmRpbmF0ZXMpCi0gICAgICAgICAgICBt
X2N1cnJlbnRQb2ludC5tb3ZlKDAsIHRvWSk7CisgICAgICAgICAgICBtX2N1cnJlbnRQb2ludC5t
b3ZlKDAsIHJlc3VsdC0+eSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fY3VycmVudFBv
aW50LnNldFkodG9ZKTsKKyAgICAgICAgICAgIG1fY3VycmVudFBvaW50LnNldFkocmVzdWx0LT55
KTsKICAgICAgICAgbV9jb25zdW1lci5saW5lVG8obV9jdXJyZW50UG9pbnQsIEFic29sdXRlQ29v
cmRpbmF0ZXMpOwogICAgIH0gZWxzZQotICAgICAgICBtX2NvbnN1bWVyLmxpbmVUb1ZlcnRpY2Fs
KHRvWSwgbV9tb2RlKTsKKyAgICAgICAgbV9jb25zdW1lci5saW5lVG9WZXJ0aWNhbChyZXN1bHQt
PnksIG1fbW9kZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgU1ZHUGF0aFBhcnNlcjo6
cGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KCkKIHsKLSAgICBGbG9hdFBvaW50IHBvaW50MTsKLSAg
ICBGbG9hdFBvaW50IHBvaW50MjsKLSAgICBGbG9hdFBvaW50IHRhcmdldFBvaW50OwotICAgIGlm
ICghbV9zb3VyY2UucGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KHBvaW50MSwgcG9pbnQyLCB0YXJn
ZXRQb2ludCkpCisgICAgYXV0byByZXN1bHQgPSBtX3NvdXJjZS5wYXJzZUN1cnZlVG9DdWJpY1Nl
Z21lbnQoKTsKKyAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
aWYgKG1fcGF0aFBhcnNpbmdNb2RlID09IE5vcm1hbGl6ZWRQYXJzaW5nKSB7CiAgICAgICAgIGlm
IChtX21vZGUgPT0gUmVsYXRpdmVDb29yZGluYXRlcykgewotICAgICAgICAgICAgcG9pbnQxICs9
IG1fY3VycmVudFBvaW50OwotICAgICAgICAgICAgcG9pbnQyICs9IG1fY3VycmVudFBvaW50Owot
ICAgICAgICAgICAgdGFyZ2V0UG9pbnQgKz0gbV9jdXJyZW50UG9pbnQ7CisgICAgICAgICAgICBy
ZXN1bHQtPnBvaW50MSArPSBtX2N1cnJlbnRQb2ludDsKKyAgICAgICAgICAgIHJlc3VsdC0+cG9p
bnQyICs9IG1fY3VycmVudFBvaW50OworICAgICAgICAgICAgcmVzdWx0LT50YXJnZXRQb2ludCAr
PSBtX2N1cnJlbnRQb2ludDsKICAgICAgICAgfQotICAgICAgICBtX2NvbnN1bWVyLmN1cnZlVG9D
dWJpYyhwb2ludDEsIHBvaW50MiwgdGFyZ2V0UG9pbnQsIEFic29sdXRlQ29vcmRpbmF0ZXMpOwor
ICAgICAgICBtX2NvbnN1bWVyLmN1cnZlVG9DdWJpYyhyZXN1bHQtPnBvaW50MSwgcmVzdWx0LT5w
b2ludDIsIHJlc3VsdC0+dGFyZ2V0UG9pbnQsIEFic29sdXRlQ29vcmRpbmF0ZXMpOwogCi0gICAg
ICAgIG1fY29udHJvbFBvaW50ID0gcG9pbnQyOwotICAgICAgICBtX2N1cnJlbnRQb2ludCA9IHRh
cmdldFBvaW50OworICAgICAgICBtX2NvbnRyb2xQb2ludCA9IHJlc3VsdC0+cG9pbnQyOworICAg
ICAgICBtX2N1cnJlbnRQb2ludCA9IHJlc3VsdC0+dGFyZ2V0UG9pbnQ7CiAgICAgfSBlbHNlCi0g
ICAgICAgIG1fY29uc3VtZXIuY3VydmVUb0N1YmljKHBvaW50MSwgcG9pbnQyLCB0YXJnZXRQb2lu
dCwgbV9tb2RlKTsKKyAgICAgICAgbV9jb25zdW1lci5jdXJ2ZVRvQ3ViaWMocmVzdWx0LT5wb2lu
dDEsIHJlc3VsdC0+cG9pbnQyLCByZXN1bHQtPnRhcmdldFBvaW50LCBtX21vZGUpOwogICAgIHJl
dHVybiB0cnVlOwogfQogCiBib29sIFNWR1BhdGhQYXJzZXI6OnBhcnNlQ3VydmVUb0N1YmljU21v
b3RoU2VnbWVudCgpCiB7Ci0gICAgRmxvYXRQb2ludCBwb2ludDI7Ci0gICAgRmxvYXRQb2ludCB0
YXJnZXRQb2ludDsKLSAgICBpZiAoIW1fc291cmNlLnBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2Vn
bWVudChwb2ludDIsIHRhcmdldFBvaW50KSkKKyAgICBhdXRvIHJlc3VsdCA9IG1fc291cmNlLnBh
cnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudCgpOworICAgIGlmICghcmVzdWx0KQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAobV9sYXN0Q29tbWFuZCAhPSBQYXRoU2VnQ3VydmVU
b0N1YmljQWJzCkBAIC0xODIsNTMgKzE3OSw1MyBAQCBib29sIFNWR1BhdGhQYXJzZXI6OnBhcnNl
Q3VydmVUb0N1YmljU21vCiAgICAgICAgIHBvaW50MS5zY2FsZSgyKTsKICAgICAgICAgcG9pbnQx
Lm1vdmUoLW1fY29udHJvbFBvaW50LngoKSwgLW1fY29udHJvbFBvaW50LnkoKSk7CiAgICAgICAg
IGlmIChtX21vZGUgPT0gUmVsYXRpdmVDb29yZGluYXRlcykgewotICAgICAgICAgICAgcG9pbnQy
ICs9IG1fY3VycmVudFBvaW50OwotICAgICAgICAgICAgdGFyZ2V0UG9pbnQgKz0gbV9jdXJyZW50
UG9pbnQ7CisgICAgICAgICAgICByZXN1bHQtPnBvaW50MiArPSBtX2N1cnJlbnRQb2ludDsKKyAg
ICAgICAgICAgIHJlc3VsdC0+dGFyZ2V0UG9pbnQgKz0gbV9jdXJyZW50UG9pbnQ7CiAgICAgICAg
IH0KIAotICAgICAgICBtX2NvbnN1bWVyLmN1cnZlVG9DdWJpYyhwb2ludDEsIHBvaW50MiwgdGFy
Z2V0UG9pbnQsIEFic29sdXRlQ29vcmRpbmF0ZXMpOworICAgICAgICBtX2NvbnN1bWVyLmN1cnZl
VG9DdWJpYyhwb2ludDEsIHJlc3VsdC0+cG9pbnQyLCByZXN1bHQtPnRhcmdldFBvaW50LCBBYnNv
bHV0ZUNvb3JkaW5hdGVzKTsKIAotICAgICAgICBtX2NvbnRyb2xQb2ludCA9IHBvaW50MjsKLSAg
ICAgICAgbV9jdXJyZW50UG9pbnQgPSB0YXJnZXRQb2ludDsKKyAgICAgICAgbV9jb250cm9sUG9p
bnQgPSByZXN1bHQtPnBvaW50MjsKKyAgICAgICAgbV9jdXJyZW50UG9pbnQgPSByZXN1bHQtPnRh
cmdldFBvaW50OwogICAgIH0gZWxzZQotICAgICAgICBtX2NvbnN1bWVyLmN1cnZlVG9DdWJpY1Nt
b290aChwb2ludDIsIHRhcmdldFBvaW50LCBtX21vZGUpOworICAgICAgICBtX2NvbnN1bWVyLmN1
cnZlVG9DdWJpY1Ntb290aChyZXN1bHQtPnBvaW50MiwgcmVzdWx0LT50YXJnZXRQb2ludCwgbV9t
b2RlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBTVkdQYXRoUGFyc2VyOjpwYXJzZUN1
cnZlVG9RdWFkcmF0aWNTZWdtZW50KCkKIHsKLSAgICBGbG9hdFBvaW50IHBvaW50MTsKLSAgICBG
bG9hdFBvaW50IHRhcmdldFBvaW50OwotICAgIGlmICghbV9zb3VyY2UucGFyc2VDdXJ2ZVRvUXVh
ZHJhdGljU2VnbWVudChwb2ludDEsIHRhcmdldFBvaW50KSkKKyAgICBhdXRvIHJlc3VsdCA9IG1f
c291cmNlLnBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQoKTsKKyAgICBpZiAoIXJlc3VsdCkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKG1fcGF0aFBhcnNpbmdNb2RlID09IE5v
cm1hbGl6ZWRQYXJzaW5nKSB7Ci0gICAgICAgIG1fY29udHJvbFBvaW50ID0gcG9pbnQxOworICAg
ICAgICBtX2NvbnRyb2xQb2ludCA9IHJlc3VsdC0+cG9pbnQxOworCiAgICAgICAgIEZsb2F0UG9p
bnQgcG9pbnQxID0gbV9jdXJyZW50UG9pbnQ7CiAgICAgICAgIHBvaW50MS5tb3ZlKDIgKiBtX2Nv
bnRyb2xQb2ludC54KCksIDIgKiBtX2NvbnRyb2xQb2ludC55KCkpOwotICAgICAgICBGbG9hdFBv
aW50IHBvaW50Mih0YXJnZXRQb2ludC54KCkgKyAyICogbV9jb250cm9sUG9pbnQueCgpLCB0YXJn
ZXRQb2ludC55KCkgKyAyICogbV9jb250cm9sUG9pbnQueSgpKTsKKyAgICAgICAgRmxvYXRQb2lu
dCBwb2ludDIocmVzdWx0LT50YXJnZXRQb2ludC54KCkgKyAyICogbV9jb250cm9sUG9pbnQueCgp
LCByZXN1bHQtPnRhcmdldFBvaW50LnkoKSArIDIgKiBtX2NvbnRyb2xQb2ludC55KCkpOwogICAg
ICAgICBpZiAobV9tb2RlID09IFJlbGF0aXZlQ29vcmRpbmF0ZXMpIHsKICAgICAgICAgICAgIHBv
aW50MS5tb3ZlKDIgKiBtX2N1cnJlbnRQb2ludC54KCksIDIgKiBtX2N1cnJlbnRQb2ludC55KCkp
OwogICAgICAgICAgICAgcG9pbnQyLm1vdmUoMyAqIG1fY3VycmVudFBvaW50LngoKSwgMyAqIG1f
Y3VycmVudFBvaW50LnkoKSk7Ci0gICAgICAgICAgICB0YXJnZXRQb2ludCArPSBtX2N1cnJlbnRQ
b2ludDsKKyAgICAgICAgICAgIHJlc3VsdC0+dGFyZ2V0UG9pbnQgKz0gbV9jdXJyZW50UG9pbnQ7
CiAgICAgICAgIH0KICAgICAgICAgcG9pbnQxLnNjYWxlKGdPbmVPdmVyVGhyZWUpOwogICAgICAg
ICBwb2ludDIuc2NhbGUoZ09uZU92ZXJUaHJlZSk7CiAKLSAgICAgICAgbV9jb25zdW1lci5jdXJ2
ZVRvQ3ViaWMocG9pbnQxLCBwb2ludDIsIHRhcmdldFBvaW50LCBBYnNvbHV0ZUNvb3JkaW5hdGVz
KTsKKyAgICAgICAgbV9jb25zdW1lci5jdXJ2ZVRvQ3ViaWMocG9pbnQxLCBwb2ludDIsIHJlc3Vs
dC0+dGFyZ2V0UG9pbnQsIEFic29sdXRlQ29vcmRpbmF0ZXMpOwogCiAgICAgICAgIGlmIChtX21v
ZGUgPT0gUmVsYXRpdmVDb29yZGluYXRlcykKICAgICAgICAgICAgIG1fY29udHJvbFBvaW50ICs9
IG1fY3VycmVudFBvaW50OwotICAgICAgICBtX2N1cnJlbnRQb2ludCA9IHRhcmdldFBvaW50Owor
ICAgICAgICBtX2N1cnJlbnRQb2ludCA9IHJlc3VsdC0+dGFyZ2V0UG9pbnQ7CiAgICAgfSBlbHNl
Ci0gICAgICAgIG1fY29uc3VtZXIuY3VydmVUb1F1YWRyYXRpYyhwb2ludDEsIHRhcmdldFBvaW50
LCBtX21vZGUpOworICAgICAgICBtX2NvbnN1bWVyLmN1cnZlVG9RdWFkcmF0aWMocmVzdWx0LT5w
b2ludDEsIHJlc3VsdC0+dGFyZ2V0UG9pbnQsIG1fbW9kZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKIGJvb2wgU1ZHUGF0aFBhcnNlcjo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVu
dCgpCiB7Ci0gICAgRmxvYXRQb2ludCB0YXJnZXRQb2ludDsKLSAgICBpZiAoIW1fc291cmNlLnBh
cnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQodGFyZ2V0UG9pbnQpKQorICAgIGF1dG8g
cmVzdWx0ID0gbV9zb3VyY2UucGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudCgpOwor
ICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAobV9sYXN0
Q29tbWFuZCAhPSBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY0FicwpAQCAtMjQyLDY3ICsyMzksNjIg
QEAgYm9vbCBTVkdQYXRoUGFyc2VyOjpwYXJzZUN1cnZlVG9RdWFkcmF0aQogICAgICAgICBjdWJp
Y1BvaW50LnNjYWxlKDIpOwogICAgICAgICBjdWJpY1BvaW50Lm1vdmUoLW1fY29udHJvbFBvaW50
LngoKSwgLW1fY29udHJvbFBvaW50LnkoKSk7CiAgICAgICAgIEZsb2F0UG9pbnQgcG9pbnQxKG1f
Y3VycmVudFBvaW50LngoKSArIDIgKiBjdWJpY1BvaW50LngoKSwgbV9jdXJyZW50UG9pbnQueSgp
ICsgMiAqIGN1YmljUG9pbnQueSgpKTsKLSAgICAgICAgRmxvYXRQb2ludCBwb2ludDIodGFyZ2V0
UG9pbnQueCgpICsgMiAqIGN1YmljUG9pbnQueCgpLCB0YXJnZXRQb2ludC55KCkgKyAyICogY3Vi
aWNQb2ludC55KCkpOworICAgICAgICBGbG9hdFBvaW50IHBvaW50MihyZXN1bHQtPnRhcmdldFBv
aW50LngoKSArIDIgKiBjdWJpY1BvaW50LngoKSwgcmVzdWx0LT50YXJnZXRQb2ludC55KCkgKyAy
ICogY3ViaWNQb2ludC55KCkpOwogICAgICAgICBpZiAobV9tb2RlID09IFJlbGF0aXZlQ29vcmRp
bmF0ZXMpIHsKICAgICAgICAgICAgIHBvaW50MiArPSBtX2N1cnJlbnRQb2ludDsKLSAgICAgICAg
ICAgIHRhcmdldFBvaW50ICs9IG1fY3VycmVudFBvaW50OworICAgICAgICAgICAgcmVzdWx0LT50
YXJnZXRQb2ludCArPSBtX2N1cnJlbnRQb2ludDsKICAgICAgICAgfQogICAgICAgICBwb2ludDEu
c2NhbGUoZ09uZU92ZXJUaHJlZSk7CiAgICAgICAgIHBvaW50Mi5zY2FsZShnT25lT3ZlclRocmVl
KTsKIAotICAgICAgICBtX2NvbnN1bWVyLmN1cnZlVG9DdWJpYyhwb2ludDEsIHBvaW50MiwgdGFy
Z2V0UG9pbnQsIEFic29sdXRlQ29vcmRpbmF0ZXMpOworICAgICAgICBtX2NvbnN1bWVyLmN1cnZl
VG9DdWJpYyhwb2ludDEsIHBvaW50MiwgcmVzdWx0LT50YXJnZXRQb2ludCwgQWJzb2x1dGVDb29y
ZGluYXRlcyk7CiAKICAgICAgICAgbV9jb250cm9sUG9pbnQgPSBjdWJpY1BvaW50OwotICAgICAg
ICBtX2N1cnJlbnRQb2ludCA9IHRhcmdldFBvaW50OworICAgICAgICBtX2N1cnJlbnRQb2ludCA9
IHJlc3VsdC0+dGFyZ2V0UG9pbnQ7CiAgICAgfSBlbHNlCi0gICAgICAgIG1fY29uc3VtZXIuY3Vy
dmVUb1F1YWRyYXRpY1Ntb290aCh0YXJnZXRQb2ludCwgbV9tb2RlKTsKKyAgICAgICAgbV9jb25z
dW1lci5jdXJ2ZVRvUXVhZHJhdGljU21vb3RoKHJlc3VsdC0+dGFyZ2V0UG9pbnQsIG1fbW9kZSk7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgU1ZHUGF0aFBhcnNlcjo6cGFyc2VBcmNUb1Nl
Z21lbnQoKQogewotICAgIGZsb2F0IHJ4OwotICAgIGZsb2F0IHJ5OwotICAgIGZsb2F0IGFuZ2xl
OwotICAgIGJvb2wgbGFyZ2VBcmM7Ci0gICAgYm9vbCBzd2VlcDsKLSAgICBGbG9hdFBvaW50IHRh
cmdldFBvaW50OwotICAgIGlmICghbV9zb3VyY2UucGFyc2VBcmNUb1NlZ21lbnQocngsIHJ5LCBh
bmdsZSwgbGFyZ2VBcmMsIHN3ZWVwLCB0YXJnZXRQb2ludCkpCisgICAgYXV0byByZXN1bHQgPSBt
X3NvdXJjZS5wYXJzZUFyY1RvU2VnbWVudCgpOworICAgIGlmICghcmVzdWx0KQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICAvLyBJZiByeCA9IDAgb3IgcnkgPSAwIHRoZW4gdGhpcyBhcmMg
aXMgdHJlYXRlZCBhcyBhIHN0cmFpZ2h0IGxpbmUgc2VnbWVudCAoYSAibGluZXRvIikgam9pbmlu
ZyB0aGUgZW5kcG9pbnRzLgogICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRy9pbXBsbm90
ZS5odG1sI0FyY091dE9mUmFuZ2VQYXJhbWV0ZXJzCiAgICAgLy8gSWYgdGhlIGN1cnJlbnQgcG9p
bnQgYW5kIHRhcmdldCBwb2ludCBmb3IgdGhlIGFyYyBhcmUgaWRlbnRpY2FsLCBpdCBzaG91bGQg
YmUgdHJlYXRlZCBhcyBhIHplcm8gbGVuZ3RoCiAgICAgLy8gcGF0aC4gVGhpcyBlbnN1cmVzIGNv
bnRpbnVpdHkgaW4gYW5pbWF0aW9ucy4KLSAgICByeCA9IGZhYnNmKHJ4KTsKLSAgICByeSA9IGZh
YnNmKHJ5KTsKKyAgICByZXN1bHQtPnJ4ID0gZmFic2YocmVzdWx0LT5yeCk7CisgICAgcmVzdWx0
LT5yeSA9IGZhYnNmKHJlc3VsdC0+cnkpOwogICAgIGJvb2wgYXJjSXNaZXJvTGVuZ3RoID0gZmFs
c2U7CiAgICAgaWYgKG1fcGF0aFBhcnNpbmdNb2RlID09IE5vcm1hbGl6ZWRQYXJzaW5nKSB7CiAg
ICAgICAgIGlmIChtX21vZGUgPT0gUmVsYXRpdmVDb29yZGluYXRlcykKLSAgICAgICAgICAgIGFy
Y0lzWmVyb0xlbmd0aCA9IHRhcmdldFBvaW50ID09IEZsb2F0UG9pbnQ6Onplcm8oKTsKKyAgICAg
ICAgICAgIGFyY0lzWmVyb0xlbmd0aCA9IHJlc3VsdC0+dGFyZ2V0UG9pbnQgPT0gRmxvYXRQb2lu
dDo6emVybygpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBhcmNJc1plcm9MZW5ndGggPSB0
YXJnZXRQb2ludCA9PSBtX2N1cnJlbnRQb2ludDsKKyAgICAgICAgICAgIGFyY0lzWmVyb0xlbmd0
aCA9IHJlc3VsdC0+dGFyZ2V0UG9pbnQgPT0gbV9jdXJyZW50UG9pbnQ7CiAgICAgfQotICAgIGlm
ICghcnggfHwgIXJ5IHx8IGFyY0lzWmVyb0xlbmd0aCkgeworICAgIGlmICghcmVzdWx0LT5yeCB8
fCAhcmVzdWx0LT5yeSB8fCBhcmNJc1plcm9MZW5ndGgpIHsKICAgICAgICAgaWYgKG1fcGF0aFBh
cnNpbmdNb2RlID09IE5vcm1hbGl6ZWRQYXJzaW5nKSB7CiAgICAgICAgICAgICBpZiAobV9tb2Rl
ID09IFJlbGF0aXZlQ29vcmRpbmF0ZXMpCi0gICAgICAgICAgICAgICAgbV9jdXJyZW50UG9pbnQg
Kz0gdGFyZ2V0UG9pbnQ7CisgICAgICAgICAgICAgICAgbV9jdXJyZW50UG9pbnQgKz0gcmVzdWx0
LT50YXJnZXRQb2ludDsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX2N1cnJl
bnRQb2ludCA9IHRhcmdldFBvaW50OworICAgICAgICAgICAgICAgIG1fY3VycmVudFBvaW50ID0g
cmVzdWx0LT50YXJnZXRQb2ludDsKICAgICAgICAgICAgIG1fY29uc3VtZXIubGluZVRvKG1fY3Vy
cmVudFBvaW50LCBBYnNvbHV0ZUNvb3JkaW5hdGVzKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICBtX2NvbnN1bWVyLmxpbmVUbyh0YXJnZXRQb2ludCwgbV9tb2RlKTsKKyAgICAgICAgICAg
IG1fY29uc3VtZXIubGluZVRvKHJlc3VsdC0+dGFyZ2V0UG9pbnQsIG1fbW9kZSk7CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIGlmIChtX3BhdGhQYXJzaW5nTW9kZSA9PSBOb3Jt
YWxpemVkUGFyc2luZykgewogICAgICAgICBGbG9hdFBvaW50IHBvaW50MSA9IG1fY3VycmVudFBv
aW50OwogICAgICAgICBpZiAobV9tb2RlID09IFJlbGF0aXZlQ29vcmRpbmF0ZXMpCi0gICAgICAg
ICAgICB0YXJnZXRQb2ludCArPSBtX2N1cnJlbnRQb2ludDsKLSAgICAgICAgbV9jdXJyZW50UG9p
bnQgPSB0YXJnZXRQb2ludDsKLSAgICAgICAgcmV0dXJuIGRlY29tcG9zZUFyY1RvQ3ViaWMoYW5n
bGUsIHJ4LCByeSwgcG9pbnQxLCB0YXJnZXRQb2ludCwgbGFyZ2VBcmMsIHN3ZWVwKTsKKyAgICAg
ICAgICAgIHJlc3VsdC0+dGFyZ2V0UG9pbnQgKz0gbV9jdXJyZW50UG9pbnQ7CisgICAgICAgIG1f
Y3VycmVudFBvaW50ID0gcmVzdWx0LT50YXJnZXRQb2ludDsKKyAgICAgICAgcmV0dXJuIGRlY29t
cG9zZUFyY1RvQ3ViaWMocmVzdWx0LT5hbmdsZSwgcmVzdWx0LT5yeCwgcmVzdWx0LT5yeSwgcG9p
bnQxLCByZXN1bHQtPnRhcmdldFBvaW50LCByZXN1bHQtPmxhcmdlQXJjLCByZXN1bHQtPnN3ZWVw
KTsKICAgICB9Ci0gICAgbV9jb25zdW1lci5hcmNUbyhyeCwgcnksIGFuZ2xlLCBsYXJnZUFyYywg
c3dlZXAsIHRhcmdldFBvaW50LCBtX21vZGUpOworICAgIG1fY29uc3VtZXIuYXJjVG8ocmVzdWx0
LT5yeCwgcmVzdWx0LT5yeSwgcmVzdWx0LT5hbmdsZSwgcmVzdWx0LT5sYXJnZUFyYywgcmVzdWx0
LT5zd2VlcCwgcmVzdWx0LT50YXJnZXRQb2ludCwgbV9tb2RlKTsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIApAQCAtMzEyLDggKzMwNCwxMSBAQCBib29sIFNWR1BhdGhQYXJzZXI6OnBhcnNlUGF0aERh
dGEoYm9vbCBjCiAgICAgaWYgKCFtX3NvdXJjZS5tb3ZlVG9OZXh0VG9rZW4oKSkKICAgICAgICAg
cmV0dXJuIHRydWU7CiAKLSAgICBTVkdQYXRoU2VnVHlwZSBjb21tYW5kOwotICAgIG1fc291cmNl
LnBhcnNlU1ZHU2VnbWVudFR5cGUoY29tbWFuZCk7CisgICAgYXV0byBwYXJzZWRDb21tYW5kID0g
bV9zb3VyY2UucGFyc2VTVkdTZWdtZW50VHlwZSgpOworICAgIGlmICghcGFyc2VkQ29tbWFuZCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBjb21tYW5kID0gKnBhcnNlZENvbW1h
bmQ7CiAKICAgICAvLyBQYXRoIG11c3Qgc3RhcnQgd2l0aCBtb3ZldG8uCiAgICAgaWYgKGNoZWNr
Rm9ySW5pdGlhbE1vdmVUbyAmJiBjb21tYW5kICE9IFBhdGhTZWdNb3ZlVG9BYnMgJiYgY29tbWFu
ZCAhPSBQYXRoU2VnTW92ZVRvUmVsKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhQ
YXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFBhcnNlci5o
CShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFBhcnNlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNs
YXNzIFNWR1BhdGhCeXRlU3RyZWFtOwogY2xhc3MgU1ZHUGF0aFNvdXJjZTsKIAotY2xhc3MgU1ZH
UGF0aFBhcnNlciB7CitjbGFzcyBTVkdQYXRoUGFyc2VyIGZpbmFsIHsKIHB1YmxpYzoKICAgICBz
dGF0aWMgYm9vbCBwYXJzZShTVkdQYXRoU291cmNlJiwgU1ZHUGF0aENvbnN1bWVyJiwgUGF0aFBh
cnNpbmdNb2RlID0gTm9ybWFsaXplZFBhcnNpbmcsIGJvb2wgY2hlY2tGb3JJbml0aWFsTW92ZVRv
ID0gdHJ1ZSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU2VnTGlzdFNvdXJj
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTZWdMaXN0U291
cmNlLmNwcAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhT
ZWdMaXN0U291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTUgKzQwLDE1IEBAIGJvb2wg
U1ZHUGF0aFNlZ0xpc3RTb3VyY2U6Omhhc01vcmVEYXRhKCkKICAgICByZXR1cm4gbV9pdGVtQ3Vy
cmVudCA8IG1faXRlbUVuZDsKIH0KIAotYm9vbCBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VT
VkdTZWdtZW50VHlwZShTVkdQYXRoU2VnVHlwZSYgcGF0aFNlZ1R5cGUpCitTVkdQYXRoU2VnVHlw
ZSBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6bmV4dENvbW1hbmQoU1ZHUGF0aFNlZ1R5cGUpCiB7CiAg
ICAgbV9zZWdtZW50ID0gbV9wYXRoU2VnTGlzdC5hdChtX2l0ZW1DdXJyZW50KTsKLSAgICBwYXRo
U2VnVHlwZSA9IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdUeXBlPihtX3NlZ21lbnQtPnBhdGhTZWdU
eXBlKCkpOworICAgIFNWR1BhdGhTZWdUeXBlIHBhdGhTZWdUeXBlID0gc3RhdGljX2Nhc3Q8U1ZH
UGF0aFNlZ1R5cGU+KG1fc2VnbWVudC0+cGF0aFNlZ1R5cGUoKSk7CiAgICAgKyttX2l0ZW1DdXJy
ZW50OwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBwYXRoU2VnVHlwZTsKIH0KIAotU1ZH
UGF0aFNlZ1R5cGUgU1ZHUGF0aFNlZ0xpc3RTb3VyY2U6Om5leHRDb21tYW5kKFNWR1BhdGhTZWdU
eXBlKQorT3B0aW9uYWw8U1ZHUGF0aFNlZ1R5cGU+IFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJz
ZVNWR1NlZ21lbnRUeXBlKCkKIHsKICAgICBtX3NlZ21lbnQgPSBtX3BhdGhTZWdMaXN0LmF0KG1f
aXRlbUN1cnJlbnQpOwogICAgIFNWR1BhdGhTZWdUeXBlIHBhdGhTZWdUeXBlID0gc3RhdGljX2Nh
c3Q8U1ZHUGF0aFNlZ1R5cGU+KG1fc2VnbWVudC0+cGF0aFNlZ1R5cGUoKSk7CkBAIC01Niw5NCAr
NTYsMTEyIEBAIFNWR1BhdGhTZWdUeXBlIFNWR1BhdGhTZWdMaXN0U291cmNlOjpuZXgKICAgICBy
ZXR1cm4gcGF0aFNlZ1R5cGU7CiB9CiAKLWJvb2wgU1ZHUGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNl
TW92ZVRvU2VnbWVudChGbG9hdFBvaW50JiB0YXJnZXRQb2ludCkKK09wdGlvbmFsPFNWR1BhdGhT
b3VyY2U6Ok1vdmVUb1NlZ21lbnQ+IFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZU1vdmVUb1Nl
Z21lbnQoKQogewogICAgIEFTU0VSVChtX3NlZ21lbnQpOwogICAgIEFTU0VSVChtX3NlZ21lbnQt
PnBhdGhTZWdUeXBlKCkgPT0gUGF0aFNlZ01vdmVUb0FicyB8fCBtX3NlZ21lbnQtPnBhdGhTZWdU
eXBlKCkgPT0gUGF0aFNlZ01vdmVUb1JlbCk7CiAgICAgU1ZHUGF0aFNlZ1NpbmdsZUNvb3JkaW5h
dGUqIG1vdmVUbyA9IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdTaW5nbGVDb29yZGluYXRlKj4obV9z
ZWdtZW50LmdldCgpKTsKLSAgICB0YXJnZXRQb2ludCA9IEZsb2F0UG9pbnQobW92ZVRvLT54KCks
IG1vdmVUby0+eSgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBNb3ZlVG9TZWdtZW50
IHNlZ21lbnQ7CisgICAgc2VnbWVudC50YXJnZXRQb2ludCA9IEZsb2F0UG9pbnQobW92ZVRvLT54
KCksIG1vdmVUby0+eSgpKTsKKyAgICByZXR1cm4gc2VnbWVudDsKIH0KIAotYm9vbCBTVkdQYXRo
U2VnTGlzdFNvdXJjZTo6cGFyc2VMaW5lVG9TZWdtZW50KEZsb2F0UG9pbnQmIHRhcmdldFBvaW50
KQorT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6TGluZVRvU2VnbWVudD4gU1ZHUGF0aFNlZ0xpc3RT
b3VyY2U6OnBhcnNlTGluZVRvU2VnbWVudCgpCiB7CiAgICAgQVNTRVJUKG1fc2VnbWVudCk7CiAg
ICAgQVNTRVJUKG1fc2VnbWVudC0+cGF0aFNlZ1R5cGUoKSA9PSBQYXRoU2VnTGluZVRvQWJzIHx8
IG1fc2VnbWVudC0+cGF0aFNlZ1R5cGUoKSA9PSBQYXRoU2VnTGluZVRvUmVsKTsKICAgICBTVkdQ
YXRoU2VnU2luZ2xlQ29vcmRpbmF0ZSogbGluZVRvID0gc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ1Np
bmdsZUNvb3JkaW5hdGUqPihtX3NlZ21lbnQuZ2V0KCkpOwotICAgIHRhcmdldFBvaW50ID0gRmxv
YXRQb2ludChsaW5lVG8tPngoKSwgbGluZVRvLT55KCkpOwotICAgIHJldHVybiB0cnVlOworICAg
IAorICAgIExpbmVUb1NlZ21lbnQgc2VnbWVudDsKKyAgICBzZWdtZW50LnRhcmdldFBvaW50ID0g
RmxvYXRQb2ludChsaW5lVG8tPngoKSwgbGluZVRvLT55KCkpOworICAgIHJldHVybiBzZWdtZW50
OwogfQogCi1ib29sIFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUxpbmVUb0hvcml6b250YWxT
ZWdtZW50KGZsb2F0JiB4KQorT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6TGluZVRvSG9yaXpvbnRh
bFNlZ21lbnQ+IFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUxpbmVUb0hvcml6b250YWxTZWdt
ZW50KCkKIHsKICAgICBBU1NFUlQobV9zZWdtZW50KTsKICAgICBBU1NFUlQobV9zZWdtZW50LT5w
YXRoU2VnVHlwZSgpID09IFBhdGhTZWdMaW5lVG9Ib3Jpem9udGFsQWJzIHx8IG1fc2VnbWVudC0+
cGF0aFNlZ1R5cGUoKSA9PSBQYXRoU2VnTGluZVRvSG9yaXpvbnRhbFJlbCk7CiAgICAgU1ZHUGF0
aFNlZ0xpbmV0b0hvcml6b250YWwqIGhvcml6b250YWwgPSBzdGF0aWNfY2FzdDxTVkdQYXRoU2Vn
TGluZXRvSG9yaXpvbnRhbCo+KG1fc2VnbWVudC5nZXQoKSk7Ci0gICAgeCA9IGhvcml6b250YWwt
PngoKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBMaW5lVG9Ib3Jpem9udGFsU2VnbWVu
dCBzZWdtZW50OworICAgIHNlZ21lbnQueCA9IGhvcml6b250YWwtPngoKTsKKyAgICByZXR1cm4g
c2VnbWVudDsKIH0KIAotYm9vbCBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VMaW5lVG9WZXJ0
aWNhbFNlZ21lbnQoZmxvYXQmIHkpCitPcHRpb25hbDxTVkdQYXRoU291cmNlOjpMaW5lVG9WZXJ0
aWNhbFNlZ21lbnQ+IFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUxpbmVUb1ZlcnRpY2FsU2Vn
bWVudCgpCiB7CiAgICAgQVNTRVJUKG1fc2VnbWVudCk7CiAgICAgQVNTRVJUKG1fc2VnbWVudC0+
cGF0aFNlZ1R5cGUoKSA9PSBQYXRoU2VnTGluZVRvVmVydGljYWxBYnMgfHwgbV9zZWdtZW50LT5w
YXRoU2VnVHlwZSgpID09IFBhdGhTZWdMaW5lVG9WZXJ0aWNhbFJlbCk7CiAgICAgU1ZHUGF0aFNl
Z0xpbmV0b1ZlcnRpY2FsKiB2ZXJ0aWNhbCA9IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdMaW5ldG9W
ZXJ0aWNhbCo+KG1fc2VnbWVudC5nZXQoKSk7Ci0gICAgeSA9IHZlcnRpY2FsLT55KCk7Ci0gICAg
cmV0dXJuIHRydWU7CisgICAgCisgICAgTGluZVRvVmVydGljYWxTZWdtZW50IHNlZ21lbnQ7Cisg
ICAgc2VnbWVudC55ID0gdmVydGljYWwtPnkoKTsKKyAgICByZXR1cm4gc2VnbWVudDsKIH0KIAot
Ym9vbCBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KEZsb2F0
UG9pbnQmIHBvaW50MSwgRmxvYXRQb2ludCYgcG9pbnQyLCBGbG9hdFBvaW50JiB0YXJnZXRQb2lu
dCkKK09wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkN1cnZlVG9DdWJpY1NlZ21lbnQ+IFNWR1BhdGhT
ZWdMaXN0U291cmNlOjpwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQoKQogewogICAgIEFTU0VSVCht
X3NlZ21lbnQpOwogICAgIEFTU0VSVChtX3NlZ21lbnQtPnBhdGhTZWdUeXBlKCkgPT0gUGF0aFNl
Z0N1cnZlVG9DdWJpY0FicyB8fCBtX3NlZ21lbnQtPnBhdGhTZWdUeXBlKCkgPT0gUGF0aFNlZ0N1
cnZlVG9DdWJpY1JlbCk7CiAgICAgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpYyogY3ViaWMgPSBzdGF0
aWNfY2FzdDxTVkdQYXRoU2VnQ3VydmV0b0N1YmljKj4obV9zZWdtZW50LmdldCgpKTsKLSAgICBw
b2ludDEgPSBGbG9hdFBvaW50KGN1YmljLT54MSgpLCBjdWJpYy0+eTEoKSk7Ci0gICAgcG9pbnQy
ID0gRmxvYXRQb2ludChjdWJpYy0+eDIoKSwgY3ViaWMtPnkyKCkpOwotICAgIHRhcmdldFBvaW50
ID0gRmxvYXRQb2ludChjdWJpYy0+eCgpLCBjdWJpYy0+eSgpKTsKLSAgICByZXR1cm4gdHJ1ZTsK
KyAgICAKKyAgICBDdXJ2ZVRvQ3ViaWNTZWdtZW50IHNlZ21lbnQ7CisgICAgc2VnbWVudC5wb2lu
dDEgPSBGbG9hdFBvaW50KGN1YmljLT54MSgpLCBjdWJpYy0+eTEoKSk7CisgICAgc2VnbWVudC5w
b2ludDIgPSBGbG9hdFBvaW50KGN1YmljLT54MigpLCBjdWJpYy0+eTIoKSk7CisgICAgc2VnbWVu
dC50YXJnZXRQb2ludCA9IEZsb2F0UG9pbnQoY3ViaWMtPngoKSwgY3ViaWMtPnkoKSk7CisgICAg
cmV0dXJuIHNlZ21lbnQ7CiB9CiAKLWJvb2wgU1ZHUGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNlQ3Vy
dmVUb0N1YmljU21vb3RoU2VnbWVudChGbG9hdFBvaW50JiBwb2ludDIsIEZsb2F0UG9pbnQmIHRh
cmdldFBvaW50KQorT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6Q3VydmVUb0N1YmljU21vb3RoU2Vn
bWVudD4gU1ZHUGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVu
dCgpCiB7CiAgICAgQVNTRVJUKG1fc2VnbWVudCk7CiAgICAgQVNTRVJUKG1fc2VnbWVudC0+cGF0
aFNlZ1R5cGUoKSA9PSBQYXRoU2VnQ3VydmVUb0N1YmljU21vb3RoQWJzIHx8IG1fc2VnbWVudC0+
cGF0aFNlZ1R5cGUoKSA9PSBQYXRoU2VnQ3VydmVUb0N1YmljU21vb3RoUmVsKTsKICAgICBTVkdQ
YXRoU2VnQ3VydmV0b0N1YmljU21vb3RoKiBjdWJpY1Ntb290aCA9IHN0YXRpY19jYXN0PFNWR1Bh
dGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGgqPihtX3NlZ21lbnQuZ2V0KCkpOwotICAgIHBvaW50MiA9
IEZsb2F0UG9pbnQoY3ViaWNTbW9vdGgtPngyKCksIGN1YmljU21vb3RoLT55MigpKTsKLSAgICB0
YXJnZXRQb2ludCA9IEZsb2F0UG9pbnQoY3ViaWNTbW9vdGgtPngoKSwgY3ViaWNTbW9vdGgtPnko
KSk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgQ3VydmVUb0N1YmljU21vb3RoU2VnbWVu
dCBzZWdtZW50OworICAgIHNlZ21lbnQucG9pbnQyID0gRmxvYXRQb2ludChjdWJpY1Ntb290aC0+
eDIoKSwgY3ViaWNTbW9vdGgtPnkyKCkpOworICAgIHNlZ21lbnQudGFyZ2V0UG9pbnQgPSBGbG9h
dFBvaW50KGN1YmljU21vb3RoLT54KCksIGN1YmljU21vb3RoLT55KCkpOworICAgIHJldHVybiBz
ZWdtZW50OwogfQogCi1ib29sIFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUN1cnZlVG9RdWFk
cmF0aWNTZWdtZW50KEZsb2F0UG9pbnQmIHBvaW50MSwgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQp
CitPcHRpb25hbDxTVkdQYXRoU291cmNlOjpDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudD4gU1ZHUGF0
aFNlZ0xpc3RTb3VyY2U6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQoKQogewogICAgIEFT
U0VSVChtX3NlZ21lbnQpOwogICAgIEFTU0VSVChtX3NlZ21lbnQtPnBhdGhTZWdUeXBlKCkgPT0g
UGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNBYnMgfHwgbV9zZWdtZW50LT5wYXRoU2VnVHlwZSgpID09
IFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljUmVsKTsKICAgICBTVkdQYXRoU2VnQ3VydmV0b1F1YWRy
YXRpYyogcXVhZHJhdGljID0gc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWMq
PihtX3NlZ21lbnQuZ2V0KCkpOwotICAgIHBvaW50MSA9IEZsb2F0UG9pbnQocXVhZHJhdGljLT54
MSgpLCBxdWFkcmF0aWMtPnkxKCkpOwotICAgIHRhcmdldFBvaW50ID0gRmxvYXRQb2ludChxdWFk
cmF0aWMtPngoKSwgcXVhZHJhdGljLT55KCkpOwotICAgIHJldHVybiB0cnVlOworICAgIAorICAg
IEN1cnZlVG9RdWFkcmF0aWNTZWdtZW50IHNlZ21lbnQ7CisgICAgc2VnbWVudC5wb2ludDEgPSBG
bG9hdFBvaW50KHF1YWRyYXRpYy0+eDEoKSwgcXVhZHJhdGljLT55MSgpKTsKKyAgICBzZWdtZW50
LnRhcmdldFBvaW50ID0gRmxvYXRQb2ludChxdWFkcmF0aWMtPngoKSwgcXVhZHJhdGljLT55KCkp
OworICAgIHJldHVybiBzZWdtZW50OwogfQogCi1ib29sIFNWR1BhdGhTZWdMaXN0U291cmNlOjpw
YXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KEZsb2F0UG9pbnQmIHRhcmdldFBvaW50
KQorT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6Q3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQ+
IFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50
KCkKIHsKICAgICBBU1NFUlQobV9zZWdtZW50KTsKICAgICBBU1NFUlQobV9zZWdtZW50LT5wYXRo
U2VnVHlwZSgpID09IFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljU21vb3RoQWJzIHx8IG1fc2VnbWVu
dC0+cGF0aFNlZ1R5cGUoKSA9PSBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY1Ntb290aFJlbCk7CiAg
ICAgU1ZHUGF0aFNlZ1NpbmdsZUNvb3JkaW5hdGUqIHF1YWRyYXRpY1Ntb290aCA9IHN0YXRpY19j
YXN0PFNWR1BhdGhTZWdTaW5nbGVDb29yZGluYXRlKj4obV9zZWdtZW50LmdldCgpKTsKLSAgICB0
YXJnZXRQb2ludCA9IEZsb2F0UG9pbnQocXVhZHJhdGljU21vb3RoLT54KCksIHF1YWRyYXRpY1Nt
b290aC0+eSgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBDdXJ2ZVRvUXVhZHJhdGlj
U21vb3RoU2VnbWVudCBzZWdtZW50OworICAgIHNlZ21lbnQudGFyZ2V0UG9pbnQgPSBGbG9hdFBv
aW50KHF1YWRyYXRpY1Ntb290aC0+eCgpLCBxdWFkcmF0aWNTbW9vdGgtPnkoKSk7CisgICAgcmV0
dXJuIHNlZ21lbnQ7CiB9CiAKLWJvb2wgU1ZHUGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNlQXJjVG9T
ZWdtZW50KGZsb2F0JiByeCwgZmxvYXQmIHJ5LCBmbG9hdCYgYW5nbGUsIGJvb2wmIGxhcmdlQXJj
LCBib29sJiBzd2VlcCwgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCitPcHRpb25hbDxTVkdQYXRo
U291cmNlOjpBcmNUb1NlZ21lbnQ+IFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUFyY1RvU2Vn
bWVudCgpCiB7CiAgICAgQVNTRVJUKG1fc2VnbWVudCk7CiAgICAgQVNTRVJUKG1fc2VnbWVudC0+
cGF0aFNlZ1R5cGUoKSA9PSBQYXRoU2VnQXJjQWJzIHx8IG1fc2VnbWVudC0+cGF0aFNlZ1R5cGUo
KSA9PSBQYXRoU2VnQXJjUmVsKTsKICAgICBTVkdQYXRoU2VnQXJjKiBhcmNUbyA9IHN0YXRpY19j
YXN0PFNWR1BhdGhTZWdBcmMqPihtX3NlZ21lbnQuZ2V0KCkpOwotICAgIHJ4ID0gYXJjVG8tPnIx
KCk7Ci0gICAgcnkgPSBhcmNUby0+cjIoKTsKLSAgICBhbmdsZSA9IGFyY1RvLT5hbmdsZSgpOwot
ICAgIGxhcmdlQXJjID0gYXJjVG8tPmxhcmdlQXJjRmxhZygpOwotICAgIHN3ZWVwID0gYXJjVG8t
PnN3ZWVwRmxhZygpOwotICAgIHRhcmdldFBvaW50ID0gRmxvYXRQb2ludChhcmNUby0+eCgpLCBh
cmNUby0+eSgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBBcmNUb1NlZ21lbnQgc2Vn
bWVudDsKKyAgICBzZWdtZW50LnJ4ID0gYXJjVG8tPnIxKCk7CisgICAgc2VnbWVudC5yeSA9IGFy
Y1RvLT5yMigpOworICAgIHNlZ21lbnQuYW5nbGUgPSBhcmNUby0+YW5nbGUoKTsKKyAgICBzZWdt
ZW50LmxhcmdlQXJjID0gYXJjVG8tPmxhcmdlQXJjRmxhZygpOworICAgIHNlZ21lbnQuc3dlZXAg
PSBhcmNUby0+c3dlZXBGbGFnKCk7CisgICAgc2VnbWVudC50YXJnZXRQb2ludCA9IEZsb2F0UG9p
bnQoYXJjVG8tPngoKSwgYXJjVG8tPnkoKSk7CisgICAgcmV0dXJuIHNlZ21lbnQ7CiB9CiAKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU2VnTGlzdFNvdXJjZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU2VnTGlzdFNvdXJjZS5oCShyZXZpc2lv
biAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFNlZ0xpc3RTb3VyY2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMzYsMTggKzM2LDE4IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAg
Ym9vbCBoYXNNb3JlRGF0YSgpIGNvbnN0IGZpbmFsOwogICAgIGJvb2wgbW92ZVRvTmV4dFRva2Vu
KCkgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQotICAgIGJvb2wgcGFyc2VTVkdTZWdtZW50VHlwZShT
VkdQYXRoU2VnVHlwZSYpIGZpbmFsOwogICAgIFNWR1BhdGhTZWdUeXBlIG5leHRDb21tYW5kKFNW
R1BhdGhTZWdUeXBlKSBmaW5hbDsKIAotICAgIGJvb2wgcGFyc2VNb3ZlVG9TZWdtZW50KEZsb2F0
UG9pbnQmKSBmaW5hbDsKLSAgICBib29sIHBhcnNlTGluZVRvU2VnbWVudChGbG9hdFBvaW50Jikg
ZmluYWw7Ci0gICAgYm9vbCBwYXJzZUxpbmVUb0hvcml6b250YWxTZWdtZW50KGZsb2F0JikgZmlu
YWw7Ci0gICAgYm9vbCBwYXJzZUxpbmVUb1ZlcnRpY2FsU2VnbWVudChmbG9hdCYpIGZpbmFsOwot
ICAgIGJvb2wgcGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KEZsb2F0UG9pbnQmLCBGbG9hdFBvaW50
JiwgRmxvYXRQb2ludCYpIGZpbmFsOwotICAgIGJvb2wgcGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhT
ZWdtZW50KEZsb2F0UG9pbnQmLCBGbG9hdFBvaW50JikgZmluYWw7Ci0gICAgYm9vbCBwYXJzZUN1
cnZlVG9RdWFkcmF0aWNTZWdtZW50KEZsb2F0UG9pbnQmLCBGbG9hdFBvaW50JikgZmluYWw7Ci0g
ICAgYm9vbCBwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KEZsb2F0UG9pbnQmKSBm
aW5hbDsKLSAgICBib29sIHBhcnNlQXJjVG9TZWdtZW50KGZsb2F0JiwgZmxvYXQmLCBmbG9hdCYs
IGJvb2wmLCBib29sJiwgRmxvYXRQb2ludCYpIGZpbmFsOworICAgIE9wdGlvbmFsPFNWR1BhdGhT
ZWdUeXBlPiBwYXJzZVNWR1NlZ21lbnRUeXBlKCkgZmluYWw7CisgICAgT3B0aW9uYWw8TW92ZVRv
U2VnbWVudD4gcGFyc2VNb3ZlVG9TZWdtZW50KCkgZmluYWw7CisgICAgT3B0aW9uYWw8TGluZVRv
U2VnbWVudD4gcGFyc2VMaW5lVG9TZWdtZW50KCkgZmluYWw7CisgICAgT3B0aW9uYWw8TGluZVRv
SG9yaXpvbnRhbFNlZ21lbnQ+IHBhcnNlTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQoKSBmaW5hbDsK
KyAgICBPcHRpb25hbDxMaW5lVG9WZXJ0aWNhbFNlZ21lbnQ+IHBhcnNlTGluZVRvVmVydGljYWxT
ZWdtZW50KCkgZmluYWw7CisgICAgT3B0aW9uYWw8Q3VydmVUb0N1YmljU2VnbWVudD4gcGFyc2VD
dXJ2ZVRvQ3ViaWNTZWdtZW50KCkgZmluYWw7CisgICAgT3B0aW9uYWw8Q3VydmVUb0N1YmljU21v
b3RoU2VnbWVudD4gcGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KCkgZmluYWw7CisgICAg
T3B0aW9uYWw8Q3VydmVUb1F1YWRyYXRpY1NlZ21lbnQ+IHBhcnNlQ3VydmVUb1F1YWRyYXRpY1Nl
Z21lbnQoKSBmaW5hbDsKKyAgICBPcHRpb25hbDxDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVu
dD4gcGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudCgpIGZpbmFsOworICAgIE9wdGlv
bmFsPEFyY1RvU2VnbWVudD4gcGFyc2VBcmNUb1NlZ21lbnQoKSBmaW5hbDsKIAogICAgIGNvbnN0
IFNWR1BhdGhTZWdMaXN0JiBtX3BhdGhTZWdMaXN0OwogICAgIFJlZlB0cjxTVkdQYXRoU2VnPiBt
X3NlZ21lbnQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFNvdXJjZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU291cmNlLmgJKHJldmlzaW9uIDI2
MzE3NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU291cmNlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMzLDE4ICszMyw2MyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgaGFzTW9y
ZURhdGEoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIG1vdmVUb05leHRUb2tlbigpID0g
MDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VTVkdTZWdtZW50VHlwZShTVkdQYXRoU2VnVHlwZSYp
ID0gMDsKICAgICB2aXJ0dWFsIFNWR1BhdGhTZWdUeXBlIG5leHRDb21tYW5kKFNWR1BhdGhTZWdU
eXBlIHByZXZpb3VzQ29tbWFuZCkgPSAwOwogCi0gICAgdmlydHVhbCBib29sIHBhcnNlTW92ZVRv
U2VnbWVudChGbG9hdFBvaW50JikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBwYXJzZUxpbmVUb1Nl
Z21lbnQoRmxvYXRQb2ludCYpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VMaW5lVG9Ib3Jp
em9udGFsU2VnbWVudChmbG9hdCYpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VMaW5lVG9W
ZXJ0aWNhbFNlZ21lbnQoZmxvYXQmKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHBhcnNlQ3VydmVU
b0N1YmljU2VnbWVudChGbG9hdFBvaW50JiwgRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmKSA9IDA7
Ci0gICAgdmlydHVhbCBib29sIHBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudChGbG9hdFBv
aW50JiwgRmxvYXRQb2ludCYpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VDdXJ2ZVRvUXVh
ZHJhdGljU2VnbWVudChGbG9hdFBvaW50JiwgRmxvYXRQb2ludCYpID0gMDsKLSAgICB2aXJ0dWFs
IGJvb2wgcGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudChGbG9hdFBvaW50JikgPSAw
OwotICAgIHZpcnR1YWwgYm9vbCBwYXJzZUFyY1RvU2VnbWVudChmbG9hdCYsIGZsb2F0JiwgZmxv
YXQmLCBib29sJiwgYm9vbCYsIEZsb2F0UG9pbnQmKSA9IDA7CisgICAgdmlydHVhbCBPcHRpb25h
bDxTVkdQYXRoU2VnVHlwZT4gcGFyc2VTVkdTZWdtZW50VHlwZSgpID0gMDsKKworICAgIHN0cnVj
dCBNb3ZlVG9TZWdtZW50IHsKKyAgICAgICAgRmxvYXRQb2ludCB0YXJnZXRQb2ludDsKKyAgICB9
OworICAgIHZpcnR1YWwgT3B0aW9uYWw8TW92ZVRvU2VnbWVudD4gcGFyc2VNb3ZlVG9TZWdtZW50
KCkgPSAwOworCisgICAgc3RydWN0IExpbmVUb1NlZ21lbnQgeworICAgICAgICBGbG9hdFBvaW50
IHRhcmdldFBvaW50OworICAgIH07CisgICAgdmlydHVhbCBPcHRpb25hbDxMaW5lVG9TZWdtZW50
PiBwYXJzZUxpbmVUb1NlZ21lbnQoKSA9IDA7CisKKyAgICBzdHJ1Y3QgTGluZVRvSG9yaXpvbnRh
bFNlZ21lbnQgeworICAgICAgICBmbG9hdCB4OworICAgIH07CisgICAgdmlydHVhbCBPcHRpb25h
bDxMaW5lVG9Ib3Jpem9udGFsU2VnbWVudD4gcGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudCgp
ID0gMDsKKworICAgIHN0cnVjdCBMaW5lVG9WZXJ0aWNhbFNlZ21lbnQgeworICAgICAgICBmbG9h
dCB5OworICAgIH07CisgICAgdmlydHVhbCBPcHRpb25hbDxMaW5lVG9WZXJ0aWNhbFNlZ21lbnQ+
IHBhcnNlTGluZVRvVmVydGljYWxTZWdtZW50KCkgPSAwOworCisgICAgc3RydWN0IEN1cnZlVG9D
dWJpY1NlZ21lbnQgeworICAgICAgICBGbG9hdFBvaW50IHBvaW50MTsKKyAgICAgICAgRmxvYXRQ
b2ludCBwb2ludDI7CisgICAgICAgIEZsb2F0UG9pbnQgdGFyZ2V0UG9pbnQ7CisgICAgfTsKKyAg
ICB2aXJ0dWFsIE9wdGlvbmFsPEN1cnZlVG9DdWJpY1NlZ21lbnQ+IHBhcnNlQ3VydmVUb0N1Ymlj
U2VnbWVudCgpID0gMDsKKworICAgIHN0cnVjdCBDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50IHsK
KyAgICAgICAgRmxvYXRQb2ludCBwb2ludDI7CisgICAgICAgIEZsb2F0UG9pbnQgdGFyZ2V0UG9p
bnQ7CisgICAgfTsKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPEN1cnZlVG9DdWJpY1Ntb290aFNlZ21l
bnQ+IHBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudCgpID0gMDsKKworICAgIHN0cnVjdCBD
dXJ2ZVRvUXVhZHJhdGljU2VnbWVudCB7CisgICAgICAgIEZsb2F0UG9pbnQgcG9pbnQxOworICAg
ICAgICBGbG9hdFBvaW50IHRhcmdldFBvaW50OworICAgIH07CisgICAgdmlydHVhbCBPcHRpb25h
bDxDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudD4gcGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCgp
ID0gMDsKKworICAgIHN0cnVjdCBDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudCB7CisgICAg
ICAgIEZsb2F0UG9pbnQgdGFyZ2V0UG9pbnQ7CisgICAgfTsKKyAgICB2aXJ0dWFsIE9wdGlvbmFs
PEN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50PiBwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9v
dGhTZWdtZW50KCkgPSAwOworCisgICAgc3RydWN0IEFyY1RvU2VnbWVudCB7CisgICAgICAgIGZs
b2F0IHJ4OworICAgICAgICBmbG9hdCByeTsKKyAgICAgICAgZmxvYXQgYW5nbGU7CisgICAgICAg
IGJvb2wgbGFyZ2VBcmM7CisgICAgICAgIGJvb2wgc3dlZXA7CisgICAgICAgIEZsb2F0UG9pbnQg
dGFyZ2V0UG9pbnQ7CisgICAgfTsKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPEFyY1RvU2VnbWVudD4g
cGFyc2VBcmNUb1NlZ21lbnQoKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFN0cmluZ1NvdXJjZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTdHJpbmdTb3VyY2UuY3BwCShyZXZpc2lv
biAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFN0cmluZ1NvdXJjZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU1LDE5NSArNTUsMjgwIEBAIGJvb2wgU1ZHUGF0aFN0cmluZ1Nv
dXJjZTo6bW92ZVRvTmV4dFRva2UKICAgICByZXR1cm4gc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKG1f
Y3VycmVudC5tX2NoYXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2KTsKIH0KIAotdGVtcGxh
dGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgYm9vbCBwYXJzZVNWR1NlZ21lbnRU
eXBlSGVscGVyKGNvbnN0IENoYXJhY3RlclR5cGUqJiBjdXJyZW50LCBTVkdQYXRoU2VnVHlwZSYg
cGF0aFNlZ1R5cGUpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIE9w
dGlvbmFsPFNWR1BhdGhTZWdUeXBlPiBuZXh0Q29tbWFuZEhlbHBlcihjb25zdCBDaGFyYWN0ZXJU
eXBlKiYgY3VycmVudCwgU1ZHUGF0aFNlZ1R5cGUgcHJldmlvdXNDb21tYW5kKQoreworICAgIC8v
IENoZWNrIGZvciByZW1haW5pbmcgY29vcmRpbmF0ZXMgaW4gdGhlIGN1cnJlbnQgY29tbWFuZC4K
KyAgICBpZiAoKCpjdXJyZW50ID09ICcrJyB8fCAqY3VycmVudCA9PSAnLScgfHwgKmN1cnJlbnQg
PT0gJy4nIHx8IGlzQVNDSUlEaWdpdCgqY3VycmVudCkpCisgICAgICAgICYmIHByZXZpb3VzQ29t
bWFuZCAhPSBQYXRoU2VnQ2xvc2VQYXRoKSB7CisgICAgICAgIGlmIChwcmV2aW91c0NvbW1hbmQg
PT0gUGF0aFNlZ01vdmVUb0FicykKKyAgICAgICAgICAgIHJldHVybiBQYXRoU2VnTGluZVRvQWJz
OworICAgICAgICBpZiAocHJldmlvdXNDb21tYW5kID09IFBhdGhTZWdNb3ZlVG9SZWwpCisgICAg
ICAgICAgICByZXR1cm4gUGF0aFNlZ0xpbmVUb1JlbDsKKyAgICAgICAgcmV0dXJuIHByZXZpb3Vz
Q29tbWFuZDsKKyAgICB9CisKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCitTVkdQYXRo
U2VnVHlwZSBTVkdQYXRoU3RyaW5nU291cmNlOjpuZXh0Q29tbWFuZChTVkdQYXRoU2VnVHlwZSBw
cmV2aW91c0NvbW1hbmQpCit7CisgICAgaWYgKG1faXM4Qml0U291cmNlKSB7CisgICAgICAgIGlm
IChhdXRvIG5leHRDb21tYW5kID0gbmV4dENvbW1hbmRIZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFj
dGVyOCwgcHJldmlvdXNDb21tYW5kKSkKKyAgICAgICAgICAgIHJldHVybiAqbmV4dENvbW1hbmQ7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGF1dG8gbmV4dENvbW1hbmQgPSBuZXh0Q29tbWFu
ZEhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXIxNiwgcHJldmlvdXNDb21tYW5kKSkKKyAgICAg
ICAgICAgIHJldHVybiAqbmV4dENvbW1hbmQ7CisgICAgfQorCisgICAgcmV0dXJuICpwYXJzZVNW
R1NlZ21lbnRUeXBlKCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBz
dGF0aWMgU1ZHUGF0aFNlZ1R5cGUgcGFyc2VTVkdTZWdtZW50VHlwZUhlbHBlcihjb25zdCBDaGFy
YWN0ZXJUeXBlKiYgY3VycmVudCkKIHsKICAgICBzd2l0Y2ggKCooY3VycmVudCsrKSkgewogICAg
IGNhc2UgJ1onOgogICAgIGNhc2UgJ3onOgotICAgICAgICBwYXRoU2VnVHlwZSA9IFBhdGhTZWdD
bG9zZVBhdGg7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gUGF0aFNlZ0Nsb3NlUGF0
aDsKICAgICBjYXNlICdNJzoKLSAgICAgICAgcGF0aFNlZ1R5cGUgPSBQYXRoU2VnTW92ZVRvQWJz
OwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIFBhdGhTZWdNb3ZlVG9BYnM7CiAgICAg
Y2FzZSAnbSc6Ci0gICAgICAgIHBhdGhTZWdUeXBlID0gUGF0aFNlZ01vdmVUb1JlbDsKLSAgICAg
ICAgYnJlYWs7CisgICAgICAgIHJldHVybiBQYXRoU2VnTW92ZVRvUmVsOwogICAgIGNhc2UgJ0wn
OgotICAgICAgICBwYXRoU2VnVHlwZSA9IFBhdGhTZWdMaW5lVG9BYnM7Ci0gICAgICAgIGJyZWFr
OworICAgICAgICByZXR1cm4gUGF0aFNlZ0xpbmVUb0FiczsKICAgICBjYXNlICdsJzoKLSAgICAg
ICAgcGF0aFNlZ1R5cGUgPSBQYXRoU2VnTGluZVRvUmVsOwotICAgICAgICBicmVhazsKKyAgICAg
ICAgcmV0dXJuIFBhdGhTZWdMaW5lVG9SZWw7CiAgICAgY2FzZSAnQyc6Ci0gICAgICAgIHBhdGhT
ZWdUeXBlID0gUGF0aFNlZ0N1cnZlVG9DdWJpY0FiczsKLSAgICAgICAgYnJlYWs7CisgICAgICAg
IHJldHVybiBQYXRoU2VnQ3VydmVUb0N1YmljQWJzOwogICAgIGNhc2UgJ2MnOgotICAgICAgICBw
YXRoU2VnVHlwZSA9IFBhdGhTZWdDdXJ2ZVRvQ3ViaWNSZWw7Ci0gICAgICAgIGJyZWFrOworICAg
ICAgICByZXR1cm4gUGF0aFNlZ0N1cnZlVG9DdWJpY1JlbDsKICAgICBjYXNlICdRJzoKLSAgICAg
ICAgcGF0aFNlZ1R5cGUgPSBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY0FiczsKLSAgICAgICAgYnJl
YWs7CisgICAgICAgIHJldHVybiBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY0FiczsKICAgICBjYXNl
ICdxJzoKLSAgICAgICAgcGF0aFNlZ1R5cGUgPSBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY1JlbDsK
LSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY1Jl
bDsKICAgICBjYXNlICdBJzoKLSAgICAgICAgcGF0aFNlZ1R5cGUgPSBQYXRoU2VnQXJjQWJzOwot
ICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIFBhdGhTZWdBcmNBYnM7CiAgICAgY2FzZSAn
YSc6Ci0gICAgICAgIHBhdGhTZWdUeXBlID0gUGF0aFNlZ0FyY1JlbDsKLSAgICAgICAgYnJlYWs7
CisgICAgICAgIHJldHVybiBQYXRoU2VnQXJjUmVsOwogICAgIGNhc2UgJ0gnOgotICAgICAgICBw
YXRoU2VnVHlwZSA9IFBhdGhTZWdMaW5lVG9Ib3Jpem9udGFsQWJzOwotICAgICAgICBicmVhazsK
KyAgICAgICAgcmV0dXJuIFBhdGhTZWdMaW5lVG9Ib3Jpem9udGFsQWJzOwogICAgIGNhc2UgJ2gn
OgotICAgICAgICBwYXRoU2VnVHlwZSA9IFBhdGhTZWdMaW5lVG9Ib3Jpem9udGFsUmVsOwotICAg
ICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIFBhdGhTZWdMaW5lVG9Ib3Jpem9udGFsUmVsOwog
ICAgIGNhc2UgJ1YnOgotICAgICAgICBwYXRoU2VnVHlwZSA9IFBhdGhTZWdMaW5lVG9WZXJ0aWNh
bEFiczsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBQYXRoU2VnTGluZVRvVmVydGlj
YWxBYnM7CiAgICAgY2FzZSAndic6Ci0gICAgICAgIHBhdGhTZWdUeXBlID0gUGF0aFNlZ0xpbmVU
b1ZlcnRpY2FsUmVsOwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIFBhdGhTZWdMaW5l
VG9WZXJ0aWNhbFJlbDsKICAgICBjYXNlICdTJzoKLSAgICAgICAgcGF0aFNlZ1R5cGUgPSBQYXRo
U2VnQ3VydmVUb0N1YmljU21vb3RoQWJzOwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJu
IFBhdGhTZWdDdXJ2ZVRvQ3ViaWNTbW9vdGhBYnM7CiAgICAgY2FzZSAncyc6Ci0gICAgICAgIHBh
dGhTZWdUeXBlID0gUGF0aFNlZ0N1cnZlVG9DdWJpY1Ntb290aFJlbDsKLSAgICAgICAgYnJlYWs7
CisgICAgICAgIHJldHVybiBQYXRoU2VnQ3VydmVUb0N1YmljU21vb3RoUmVsOwogICAgIGNhc2Ug
J1QnOgotICAgICAgICBwYXRoU2VnVHlwZSA9IFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljU21vb3Ro
QWJzOwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIFBhdGhTZWdDdXJ2ZVRvUXVhZHJh
dGljU21vb3RoQWJzOwogICAgIGNhc2UgJ3QnOgotICAgICAgICBwYXRoU2VnVHlwZSA9IFBhdGhT
ZWdDdXJ2ZVRvUXVhZHJhdGljU21vb3RoUmVsOwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0
dXJuIFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljU21vb3RoUmVsOwogICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIHBhdGhTZWdUeXBlID0gUGF0aFNlZ1Vua25vd247CisgICAgICAgIHJldHVybiBQYXRoU2Vn
VW5rbm93bjsKICAgICB9Ci0gICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgU1ZHUGF0aFN0cmlu
Z1NvdXJjZTo6cGFyc2VTVkdTZWdtZW50VHlwZShTVkdQYXRoU2VnVHlwZSYgcGF0aFNlZ1R5cGUp
CitPcHRpb25hbDxTVkdQYXRoU2VnVHlwZT4gU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VTVkdT
ZWdtZW50VHlwZSgpCiB7CiAgICAgaWYgKG1faXM4Qml0U291cmNlKQotICAgICAgICByZXR1cm4g
cGFyc2VTVkdTZWdtZW50VHlwZUhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXI4LCBwYXRoU2Vn
VHlwZSk7Ci0gICAgcmV0dXJuIHBhcnNlU1ZHU2VnbWVudFR5cGVIZWxwZXIobV9jdXJyZW50Lm1f
Y2hhcmFjdGVyMTYsIHBhdGhTZWdUeXBlKTsKKyAgICAgICAgcmV0dXJuIHBhcnNlU1ZHU2VnbWVu
dFR5cGVIZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyOCk7CisgICAgcmV0dXJuIHBhcnNlU1ZH
U2VnbWVudFR5cGVIZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYpOwogfQogCi10ZW1wbGF0
ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBib29sIG5leHRDb21tYW5kSGVscGVy
KGNvbnN0IENoYXJhY3RlclR5cGUqJiBjdXJyZW50LCBTVkdQYXRoU2VnVHlwZSBwcmV2aW91c0Nv
bW1hbmQsIFNWR1BhdGhTZWdUeXBlJiBuZXh0Q29tbWFuZCkKK09wdGlvbmFsPFNWR1BhdGhTb3Vy
Y2U6Ok1vdmVUb1NlZ21lbnQ+IFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlTW92ZVRvU2VnbWVu
dCgpCiB7Ci0gICAgLy8gQ2hlY2sgZm9yIHJlbWFpbmluZyBjb29yZGluYXRlcyBpbiB0aGUgY3Vy
cmVudCBjb21tYW5kLgotICAgIGlmICgoKmN1cnJlbnQgPT0gJysnIHx8ICpjdXJyZW50ID09ICct
JyB8fCAqY3VycmVudCA9PSAnLicgfHwgaXNBU0NJSURpZ2l0KCpjdXJyZW50KSkKLSAgICAgICAg
JiYgcHJldmlvdXNDb21tYW5kICE9IFBhdGhTZWdDbG9zZVBhdGgpIHsKLSAgICAgICAgaWYgKHBy
ZXZpb3VzQ29tbWFuZCA9PSBQYXRoU2VnTW92ZVRvQWJzKSB7Ci0gICAgICAgICAgICBuZXh0Q29t
bWFuZCA9IFBhdGhTZWdMaW5lVG9BYnM7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgfQotICAgICAgICBpZiAocHJldmlvdXNDb21tYW5kID09IFBhdGhTZWdNb3ZlVG9SZWwpIHsK
LSAgICAgICAgICAgIG5leHRDb21tYW5kID0gUGF0aFNlZ0xpbmVUb1JlbDsKLSAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIG5leHRDb21tYW5kID0gcHJldmlvdXND
b21tYW5kOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9CisgICAgYXV0byBoZWxwZXIgPSBb
XShjb25zdCBhdXRvKiYgY3VycmVudCwgY29uc3QgYXV0byogZW5kKSAtPiBPcHRpb25hbDxNb3Zl
VG9TZWdtZW50PiB7CisgICAgICAgIGF1dG8gdGFyZ2V0UG9pbnQgPSBwYXJzZUZsb2F0UG9pbnQo
Y3VycmVudCwgZW5kKTsKKyAgICAgICAgaWYgKCF0YXJnZXRQb2ludCkKKyAgICAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIAorICAgICAgICBNb3ZlVG9TZWdtZW50IHNlZ21l
bnQ7CisgICAgICAgIHNlZ21lbnQudGFyZ2V0UG9pbnQgPSBXVEZNb3ZlKCp0YXJnZXRQb2ludCk7
CisgICAgICAgIHJldHVybiBzZWdtZW50OworICAgIH07CiAKLSAgICByZXR1cm4gZmFsc2U7Cisg
ICAgaWYgKG1faXM4Qml0U291cmNlKQorICAgICAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5t
X2NoYXJhY3RlcjgsIG1fZW5kLm1fY2hhcmFjdGVyOCk7CisgICAgcmV0dXJuIGhlbHBlcihtX2N1
cnJlbnQubV9jaGFyYWN0ZXIxNiwgbV9lbmQubV9jaGFyYWN0ZXIxNik7CiB9CiAKLVNWR1BhdGhT
ZWdUeXBlIFNWR1BhdGhTdHJpbmdTb3VyY2U6Om5leHRDb21tYW5kKFNWR1BhdGhTZWdUeXBlIHBy
ZXZpb3VzQ29tbWFuZCkKK09wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkxpbmVUb1NlZ21lbnQ+IFNW
R1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlTGluZVRvU2VnbWVudCgpCiB7Ci0gICAgU1ZHUGF0aFNl
Z1R5cGUgbmV4dENvbW1hbmQ7Ci0gICAgaWYgKG1faXM4Qml0U291cmNlKSB7Ci0gICAgICAgIGlm
IChuZXh0Q29tbWFuZEhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXI4LCBwcmV2aW91c0NvbW1h
bmQsIG5leHRDb21tYW5kKSkKLSAgICAgICAgICAgIHJldHVybiBuZXh0Q29tbWFuZDsKLSAgICB9
IGVsc2UgewotICAgICAgICBpZiAobmV4dENvbW1hbmRIZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFj
dGVyMTYsIHByZXZpb3VzQ29tbWFuZCwgbmV4dENvbW1hbmQpKQotICAgICAgICAgICAgcmV0dXJu
IG5leHRDb21tYW5kOwotICAgIH0KKyAgICBhdXRvIGhlbHBlciA9IFtdKGNvbnN0IGF1dG8qJiBj
dXJyZW50LCBjb25zdCBhdXRvKiBlbmQpIC0+IE9wdGlvbmFsPExpbmVUb1NlZ21lbnQ+IHsKKyAg
ICAgICAgYXV0byB0YXJnZXRQb2ludCA9IHBhcnNlRmxvYXRQb2ludChjdXJyZW50LCBlbmQpOwor
ICAgICAgICBpZiAoIXRhcmdldFBvaW50KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKyAgICAgICAgCisgICAgICAgIExpbmVUb1NlZ21lbnQgc2VnbWVudDsKKyAgICAgICAgc2Vn
bWVudC50YXJnZXRQb2ludCA9IFdURk1vdmUoKnRhcmdldFBvaW50KTsKKyAgICAgICAgcmV0dXJu
IHNlZ21lbnQ7CisgICAgfTsKIAotICAgIHBhcnNlU1ZHU2VnbWVudFR5cGUobmV4dENvbW1hbmQp
OwotICAgIHJldHVybiBuZXh0Q29tbWFuZDsKLX0KLQotYm9vbCBTVkdQYXRoU3RyaW5nU291cmNl
OjpwYXJzZU1vdmVUb1NlZ21lbnQoRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCi17CiAgICAgaWYg
KG1faXM4Qml0U291cmNlKQotICAgICAgICByZXR1cm4gcGFyc2VGbG9hdFBvaW50KG1fY3VycmVu
dC5tX2NoYXJhY3RlcjgsIG1fZW5kLm1fY2hhcmFjdGVyOCwgdGFyZ2V0UG9pbnQpOwotICAgIHJl
dHVybiBwYXJzZUZsb2F0UG9pbnQobV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYsIG1fZW5kLm1fY2hh
cmFjdGVyMTYsIHRhcmdldFBvaW50KTsKKyAgICAgICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQu
bV9jaGFyYWN0ZXI4LCBtX2VuZC5tX2NoYXJhY3RlcjgpOworICAgIHJldHVybiBoZWxwZXIobV9j
dXJyZW50Lm1fY2hhcmFjdGVyMTYsIG1fZW5kLm1fY2hhcmFjdGVyMTYpOwogfQogCi1ib29sIFNW
R1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlTGluZVRvU2VnbWVudChGbG9hdFBvaW50JiB0YXJnZXRQ
b2ludCkKK09wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkxpbmVUb0hvcml6b250YWxTZWdtZW50PiBT
VkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUxpbmVUb0hvcml6b250YWxTZWdtZW50KCkKIHsKLSAg
ICBpZiAobV9pczhCaXRTb3VyY2UpCi0gICAgICAgIHJldHVybiBwYXJzZUZsb2F0UG9pbnQobV9j
dXJyZW50Lm1fY2hhcmFjdGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4LCB0YXJnZXRQb2ludCk7Ci0g
ICAgcmV0dXJuIHBhcnNlRmxvYXRQb2ludChtX2N1cnJlbnQubV9jaGFyYWN0ZXIxNiwgbV9lbmQu
bV9jaGFyYWN0ZXIxNiwgdGFyZ2V0UG9pbnQpOwotfQorICAgIGF1dG8gaGVscGVyID0gW10oY29u
c3QgYXV0byomIGN1cnJlbnQsIGNvbnN0IGF1dG8qIGVuZCkgLT4gT3B0aW9uYWw8TGluZVRvSG9y
aXpvbnRhbFNlZ21lbnQ+IHsKKyAgICAgICAgYXV0byB4ID0gcGFyc2VOdW1iZXIoY3VycmVudCwg
ZW5kKTsKKyAgICAgICAgaWYgKCF4KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
KyAgICAgICAgCisgICAgICAgIExpbmVUb0hvcml6b250YWxTZWdtZW50IHNlZ21lbnQ7CisgICAg
ICAgIHNlZ21lbnQueCA9ICp4OworICAgICAgICByZXR1cm4gc2VnbWVudDsKKyAgICB9OwogCi1i
b29sIFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQoZmxv
YXQmIHgpCi17CiAgICAgaWYgKG1faXM4Qml0U291cmNlKQotICAgICAgICByZXR1cm4gcGFyc2VO
dW1iZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4LCB4KTsKLSAg
ICByZXR1cm4gcGFyc2VOdW1iZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYsIG1fZW5kLm1fY2hh
cmFjdGVyMTYsIHgpOworICAgICAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3Rl
cjgsIG1fZW5kLm1fY2hhcmFjdGVyOCk7CisgICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9j
aGFyYWN0ZXIxNiwgbV9lbmQubV9jaGFyYWN0ZXIxNik7CiB9CiAKLWJvb2wgU1ZHUGF0aFN0cmlu
Z1NvdXJjZTo6cGFyc2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnQoZmxvYXQmIHkpCitPcHRpb25hbDxT
VkdQYXRoU291cmNlOjpMaW5lVG9WZXJ0aWNhbFNlZ21lbnQ+IFNWR1BhdGhTdHJpbmdTb3VyY2U6
OnBhcnNlTGluZVRvVmVydGljYWxTZWdtZW50KCkKIHsKKyAgICBhdXRvIGhlbHBlciA9IFtdKGNv
bnN0IGF1dG8qJiBjdXJyZW50LCBjb25zdCBhdXRvKiBlbmQpIC0+IE9wdGlvbmFsPExpbmVUb1Zl
cnRpY2FsU2VnbWVudD4geworICAgICAgICBhdXRvIHkgPSBwYXJzZU51bWJlcihjdXJyZW50LCBl
bmQpOworICAgICAgICBpZiAoIXkpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
ICAgICAgICAKKyAgICAgICAgTGluZVRvVmVydGljYWxTZWdtZW50IHNlZ21lbnQ7CisgICAgICAg
IHNlZ21lbnQueSA9ICp5OworICAgICAgICByZXR1cm4gc2VnbWVudDsKKyAgICB9OworCiAgICAg
aWYgKG1faXM4Qml0U291cmNlKQotICAgICAgICByZXR1cm4gcGFyc2VOdW1iZXIobV9jdXJyZW50
Lm1fY2hhcmFjdGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4LCB5KTsKLSAgICByZXR1cm4gcGFyc2VO
dW1iZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYsIG1fZW5kLm1fY2hhcmFjdGVyMTYsIHkpOwor
ICAgICAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjgsIG1fZW5kLm1fY2hh
cmFjdGVyOCk7CisgICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXIxNiwgbV9l
bmQubV9jaGFyYWN0ZXIxNik7CiB9CiAKLWJvb2wgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VD
dXJ2ZVRvQ3ViaWNTZWdtZW50KEZsb2F0UG9pbnQmIHBvaW50MSwgRmxvYXRQb2ludCYgcG9pbnQy
LCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCkKK09wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkN1cnZl
VG9DdWJpY1NlZ21lbnQ+IFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlQ3VydmVUb0N1YmljU2Vn
bWVudCgpCiB7CisgICAgYXV0byBoZWxwZXIgPSBbXShjb25zdCBhdXRvKiYgY3VycmVudCwgY29u
c3QgYXV0byogZW5kKSAtPiBPcHRpb25hbDxDdXJ2ZVRvQ3ViaWNTZWdtZW50PiB7CisgICAgICAg
IGF1dG8gcG9pbnQxID0gcGFyc2VGbG9hdFBvaW50KGN1cnJlbnQsIGVuZCk7CisgICAgICAgIGlm
ICghcG9pbnQxKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgICAgICBh
dXRvIHBvaW50MiA9IHBhcnNlRmxvYXRQb2ludChjdXJyZW50LCBlbmQpOworICAgICAgICBpZiAo
IXBvaW50MikKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICAgICAgYXV0
byB0YXJnZXRQb2ludCA9IHBhcnNlRmxvYXRQb2ludChjdXJyZW50LCBlbmQpOworICAgICAgICBp
ZiAoIXRhcmdldFBvaW50KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAg
ICAgICBDdXJ2ZVRvQ3ViaWNTZWdtZW50IHNlZ21lbnQ7CisgICAgICAgIHNlZ21lbnQucG9pbnQx
ID0gKnBvaW50MTsKKyAgICAgICAgc2VnbWVudC5wb2ludDIgPSAqcG9pbnQyOworICAgICAgICBz
ZWdtZW50LnRhcmdldFBvaW50ID0gKnRhcmdldFBvaW50OworICAgICAgICByZXR1cm4gc2VnbWVu
dDsKKyAgICB9OworCiAgICAgaWYgKG1faXM4Qml0U291cmNlKQotICAgICAgICByZXR1cm4gcGFy
c2VGbG9hdFBvaW50MyhtX2N1cnJlbnQubV9jaGFyYWN0ZXI4LCBtX2VuZC5tX2NoYXJhY3Rlcjgs
IHBvaW50MSwgcG9pbnQyLCB0YXJnZXRQb2ludCk7Ci0gICAgcmV0dXJuIHBhcnNlRmxvYXRQb2lu
dDMobV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYsIG1fZW5kLm1fY2hhcmFjdGVyMTYsIHBvaW50MSwg
cG9pbnQyLCB0YXJnZXRQb2ludCk7CisgICAgICAgIHJldHVybiBoZWxwZXIobV9jdXJyZW50Lm1f
Y2hhcmFjdGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4KTsKKyAgICByZXR1cm4gaGVscGVyKG1fY3Vy
cmVudC5tX2NoYXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2KTsKIH0KIAotYm9vbCBTVkdQ
YXRoU3RyaW5nU291cmNlOjpwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQoRmxvYXRQb2lu
dCYgcG9pbnQxLCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCkKK09wdGlvbmFsPFNWR1BhdGhTb3Vy
Y2U6OkN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQ+IFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNl
Q3VydmVUb0N1YmljU21vb3RoU2VnbWVudCgpCiB7CisgICAgYXV0byBoZWxwZXIgPSBbXShjb25z
dCBhdXRvKiYgY3VycmVudCwgY29uc3QgYXV0byogZW5kKSAtPiBPcHRpb25hbDxDdXJ2ZVRvQ3Vi
aWNTbW9vdGhTZWdtZW50PiB7CisgICAgICAgIGF1dG8gcG9pbnQyID0gcGFyc2VGbG9hdFBvaW50
KGN1cnJlbnQsIGVuZCk7CisgICAgICAgIGlmICghcG9pbnQyKQorICAgICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKworICAgICAgICBhdXRvIHRhcmdldFBvaW50ID0gcGFyc2VGbG9hdFBv
aW50KGN1cnJlbnQsIGVuZCk7CisgICAgICAgIGlmICghdGFyZ2V0UG9pbnQpCisgICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgICAgIEN1cnZlVG9DdWJpY1Ntb290aFNlZ21l
bnQgc2VnbWVudDsKKyAgICAgICAgc2VnbWVudC5wb2ludDIgPSAqcG9pbnQyOworICAgICAgICBz
ZWdtZW50LnRhcmdldFBvaW50ID0gKnRhcmdldFBvaW50OworICAgICAgICByZXR1cm4gc2VnbWVu
dDsKKyAgICB9OworCiAgICAgaWYgKG1faXM4Qml0U291cmNlKQotICAgICAgICByZXR1cm4gcGFy
c2VGbG9hdFBvaW50MihtX2N1cnJlbnQubV9jaGFyYWN0ZXI4LCBtX2VuZC5tX2NoYXJhY3Rlcjgs
IHBvaW50MSwgdGFyZ2V0UG9pbnQpOwotICAgIHJldHVybiBwYXJzZUZsb2F0UG9pbnQyKG1fY3Vy
cmVudC5tX2NoYXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2LCBwb2ludDEsIHRhcmdldFBv
aW50KTsKKyAgICAgICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXI4LCBtX2Vu
ZC5tX2NoYXJhY3RlcjgpOworICAgIHJldHVybiBoZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVy
MTYsIG1fZW5kLm1fY2hhcmFjdGVyMTYpOwogfQogCi1ib29sIFNWR1BhdGhTdHJpbmdTb3VyY2U6
OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQoRmxvYXRQb2ludCYgcG9pbnQyLCBGbG9hdFBv
aW50JiB0YXJnZXRQb2ludCkKK09wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkN1cnZlVG9RdWFkcmF0
aWNTZWdtZW50PiBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdt
ZW50KCkKIHsKKyAgICBhdXRvIGhlbHBlciA9IFtdKGNvbnN0IGF1dG8qJiBjdXJyZW50LCBjb25z
dCBhdXRvKiBlbmQpIC0+IE9wdGlvbmFsPEN1cnZlVG9RdWFkcmF0aWNTZWdtZW50PiB7CisgICAg
ICAgIGF1dG8gcG9pbnQxID0gcGFyc2VGbG9hdFBvaW50KGN1cnJlbnQsIGVuZCk7CisgICAgICAg
IGlmICghcG9pbnQxKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgICAg
ICBhdXRvIHRhcmdldFBvaW50ID0gcGFyc2VGbG9hdFBvaW50KGN1cnJlbnQsIGVuZCk7CisgICAg
ICAgIGlmICghdGFyZ2V0UG9pbnQpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
CisgICAgICAgIEN1cnZlVG9RdWFkcmF0aWNTZWdtZW50IHNlZ21lbnQ7CisgICAgICAgIHNlZ21l
bnQucG9pbnQxID0gKnBvaW50MTsKKyAgICAgICAgc2VnbWVudC50YXJnZXRQb2ludCA9ICp0YXJn
ZXRQb2ludDsKKyAgICAgICAgcmV0dXJuIHNlZ21lbnQ7CisgICAgfTsKKwogICAgIGlmIChtX2lz
OEJpdFNvdXJjZSkKLSAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXRQb2ludDIobV9jdXJyZW50Lm1f
Y2hhcmFjdGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4LCBwb2ludDIsIHRhcmdldFBvaW50KTsKLSAg
ICByZXR1cm4gcGFyc2VGbG9hdFBvaW50MihtX2N1cnJlbnQubV9jaGFyYWN0ZXIxNiwgbV9lbmQu
bV9jaGFyYWN0ZXIxNiwgcG9pbnQyLCB0YXJnZXRQb2ludCk7CisgICAgICAgIHJldHVybiBoZWxw
ZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4KTsKKyAgICByZXR1
cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2KTsK
IH0KIAotYm9vbCBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9v
dGhTZWdtZW50KEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQorT3B0aW9uYWw8U1ZHUGF0aFNvdXJj
ZTo6Q3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQ+IFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBh
cnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQoKQogeworICAgIGF1dG8gaGVscGVyID0g
W10oY29uc3QgYXV0byomIGN1cnJlbnQsIGNvbnN0IGF1dG8qIGVuZCkgLT4gT3B0aW9uYWw8Q3Vy
dmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQ+IHsKKyAgICAgICAgYXV0byB0YXJnZXRQb2ludCA9
IHBhcnNlRmxvYXRQb2ludChjdXJyZW50LCBlbmQpOworICAgICAgICBpZiAoIXRhcmdldFBvaW50
KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgICAgICBDdXJ2ZVRvUXVh
ZHJhdGljU21vb3RoU2VnbWVudCBzZWdtZW50OworICAgICAgICBzZWdtZW50LnRhcmdldFBvaW50
ID0gKnRhcmdldFBvaW50OworICAgICAgICByZXR1cm4gc2VnbWVudDsKKyAgICB9OworCiAgICAg
aWYgKG1faXM4Qml0U291cmNlKQotICAgICAgICByZXR1cm4gcGFyc2VGbG9hdFBvaW50KG1fY3Vy
cmVudC5tX2NoYXJhY3RlcjgsIG1fZW5kLm1fY2hhcmFjdGVyOCwgdGFyZ2V0UG9pbnQpOwotICAg
IHJldHVybiBwYXJzZUZsb2F0UG9pbnQobV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYsIG1fZW5kLm1f
Y2hhcmFjdGVyMTYsIHRhcmdldFBvaW50KTsKKyAgICAgICAgcmV0dXJuIGhlbHBlcihtX2N1cnJl
bnQubV9jaGFyYWN0ZXI4LCBtX2VuZC5tX2NoYXJhY3RlcjgpOworICAgIHJldHVybiBoZWxwZXIo
bV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYsIG1fZW5kLm1fY2hhcmFjdGVyMTYpOwogfQogCi10ZW1w
bGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBib29sIHBhcnNlQXJjVG9TZWdt
ZW50SGVscGVyKGNvbnN0IENoYXJhY3RlclR5cGUqJiBjdXJyZW50LCBjb25zdCBDaGFyYWN0ZXJU
eXBlKiBlbmQsIGZsb2F0JiByeCwgZmxvYXQmIHJ5LCBmbG9hdCYgYW5nbGUsIGJvb2wmIGxhcmdl
QXJjLCBib29sJiBzd2VlcCwgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCitPcHRpb25hbDxTVkdQ
YXRoU291cmNlOjpBcmNUb1NlZ21lbnQ+IFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlQXJjVG9T
ZWdtZW50KCkKIHsKLSAgICBmbG9hdCB0b1g7Ci0gICAgZmxvYXQgdG9ZOwotICAgIGlmICghcGFy
c2VOdW1iZXIoY3VycmVudCwgZW5kLCByeCkKLSAgICAgICAgfHwgIXBhcnNlTnVtYmVyKGN1cnJl
bnQsIGVuZCwgcnkpCi0gICAgICAgIHx8ICFwYXJzZU51bWJlcihjdXJyZW50LCBlbmQsIGFuZ2xl
KQotICAgICAgICB8fCAhcGFyc2VBcmNGbGFnKGN1cnJlbnQsIGVuZCwgbGFyZ2VBcmMpCi0gICAg
ICAgIHx8ICFwYXJzZUFyY0ZsYWcoY3VycmVudCwgZW5kLCBzd2VlcCkKLSAgICAgICAgfHwgIXBh
cnNlTnVtYmVyKGN1cnJlbnQsIGVuZCwgdG9YKQotICAgICAgICB8fCAhcGFyc2VOdW1iZXIoY3Vy
cmVudCwgZW5kLCB0b1kpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgdGFyZ2V0UG9pbnQg
PSBGbG9hdFBvaW50KHRvWCwgdG9ZKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KKyAgICBhdXRvIGhl
bHBlciA9IFtdKGNvbnN0IGF1dG8qJiBjdXJyZW50LCBjb25zdCBhdXRvKiBlbmQpIC0+IE9wdGlv
bmFsPEFyY1RvU2VnbWVudD4KKyAgICB7CisgICAgICAgIGF1dG8gcnggPSBwYXJzZU51bWJlcihj
dXJyZW50LCBlbmQpOworICAgICAgICBpZiAoIXJ4KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKKyAgICAgICAgYXV0byByeSA9IHBhcnNlTnVtYmVyKGN1cnJlbnQsIGVuZCk7Cisg
ICAgICAgIGlmICghcnkpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAg
ICBhdXRvIGFuZ2xlID0gcGFyc2VOdW1iZXIoY3VycmVudCwgZW5kKTsKKyAgICAgICAgaWYgKCFh
bmdsZSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIGF1dG8gbGFy
Z2VBcmMgPSBwYXJzZUFyY0ZsYWcoY3VycmVudCwgZW5kKTsKKyAgICAgICAgaWYgKCFsYXJnZUFy
YykKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIGF1dG8gc3dlZXAg
PSBwYXJzZUFyY0ZsYWcoY3VycmVudCwgZW5kKTsKKyAgICAgICAgaWYgKCFzd2VlcCkKKyAgICAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIGF1dG8gdGFyZ2V0UG9pbnQgPSBw
YXJzZUZsb2F0UG9pbnQoY3VycmVudCwgZW5kKTsKKyAgICAgICAgaWYgKCF0YXJnZXRQb2ludCkK
KyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICAgICAgQXJjVG9TZWdtZW50
IHNlZ21lbnQ7CisgICAgICAgIHNlZ21lbnQucnggPSAqcng7CisgICAgICAgIHNlZ21lbnQucnkg
PSAqcnk7CisgICAgICAgIHNlZ21lbnQuYW5nbGUgPSAqYW5nbGU7CisgICAgICAgIHNlZ21lbnQu
bGFyZ2VBcmMgPSAqbGFyZ2VBcmM7CisgICAgICAgIHNlZ21lbnQuc3dlZXAgPSAqc3dlZXA7Cisg
ICAgICAgIHNlZ21lbnQudGFyZ2V0UG9pbnQgPSAqdGFyZ2V0UG9pbnQ7CisgICAgICAgIHJldHVy
biBzZWdtZW50OworICAgIH07CiAKLWJvb2wgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VBcmNU
b1NlZ21lbnQoZmxvYXQmIHJ4LCBmbG9hdCYgcnksIGZsb2F0JiBhbmdsZSwgYm9vbCYgbGFyZ2VB
cmMsIGJvb2wmIHN3ZWVwLCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCkKLXsKICAgICBpZiAobV9p
czhCaXRTb3VyY2UpCi0gICAgICAgIHJldHVybiBwYXJzZUFyY1RvU2VnbWVudEhlbHBlcihtX2N1
cnJlbnQubV9jaGFyYWN0ZXI4LCBtX2VuZC5tX2NoYXJhY3RlcjgsIHJ4LCByeSwgYW5nbGUsIGxh
cmdlQXJjLCBzd2VlcCwgdGFyZ2V0UG9pbnQpOwotICAgIHJldHVybiBwYXJzZUFyY1RvU2VnbWVu
dEhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXIxNiwgbV9lbmQubV9jaGFyYWN0ZXIxNiwgcngs
IHJ5LCBhbmdsZSwgbGFyZ2VBcmMsIHN3ZWVwLCB0YXJnZXRQb2ludCk7CisgICAgICAgIHJldHVy
biBoZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4KTsKKyAg
ICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3Rl
cjE2KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHUGF0aFN0cmluZ1NvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdQYXRoU3RyaW5nU291cmNlLmgJKHJldmlzaW9uIDI2MzE3NikKKysrIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdQYXRoU3RyaW5nU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDE4ICsz
MiwxOCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGJvb2wgaGFzTW9yZURhdGEoKSBjb25zdCBm
aW5hbDsKICAgICBib29sIG1vdmVUb05leHRUb2tlbigpIGZpbmFsOwotICAgIGJvb2wgcGFyc2VT
VkdTZWdtZW50VHlwZShTVkdQYXRoU2VnVHlwZSYpIGZpbmFsOwogICAgIFNWR1BhdGhTZWdUeXBl
IG5leHRDb21tYW5kKFNWR1BhdGhTZWdUeXBlIHByZXZpb3VzQ29tbWFuZCkgZmluYWw7CiAKLSAg
ICBib29sIHBhcnNlTW92ZVRvU2VnbWVudChGbG9hdFBvaW50JikgZmluYWw7Ci0gICAgYm9vbCBw
YXJzZUxpbmVUb1NlZ21lbnQoRmxvYXRQb2ludCYpIGZpbmFsOwotICAgIGJvb2wgcGFyc2VMaW5l
VG9Ib3Jpem9udGFsU2VnbWVudChmbG9hdCYpIGZpbmFsOwotICAgIGJvb2wgcGFyc2VMaW5lVG9W
ZXJ0aWNhbFNlZ21lbnQoZmxvYXQmKSBmaW5hbDsKLSAgICBib29sIHBhcnNlQ3VydmVUb0N1Ymlj
U2VnbWVudChGbG9hdFBvaW50JiwgRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmKSBmaW5hbDsKLSAg
ICBib29sIHBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudChGbG9hdFBvaW50JiwgRmxvYXRQ
b2ludCYpIGZpbmFsOwotICAgIGJvb2wgcGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudChGbG9h
dFBvaW50JiwgRmxvYXRQb2ludCYpIGZpbmFsOwotICAgIGJvb2wgcGFyc2VDdXJ2ZVRvUXVhZHJh
dGljU21vb3RoU2VnbWVudChGbG9hdFBvaW50JikgZmluYWw7Ci0gICAgYm9vbCBwYXJzZUFyY1Rv
U2VnbWVudChmbG9hdCYsIGZsb2F0JiwgZmxvYXQmLCBib29sJiwgYm9vbCYsIEZsb2F0UG9pbnQm
KSBmaW5hbDsKKyAgICBPcHRpb25hbDxTVkdQYXRoU2VnVHlwZT4gcGFyc2VTVkdTZWdtZW50VHlw
ZSgpIGZpbmFsOworICAgIE9wdGlvbmFsPE1vdmVUb1NlZ21lbnQ+IHBhcnNlTW92ZVRvU2VnbWVu
dCgpIGZpbmFsOworICAgIE9wdGlvbmFsPExpbmVUb1NlZ21lbnQ+IHBhcnNlTGluZVRvU2VnbWVu
dCgpIGZpbmFsOworICAgIE9wdGlvbmFsPExpbmVUb0hvcml6b250YWxTZWdtZW50PiBwYXJzZUxp
bmVUb0hvcml6b250YWxTZWdtZW50KCkgZmluYWw7CisgICAgT3B0aW9uYWw8TGluZVRvVmVydGlj
YWxTZWdtZW50PiBwYXJzZUxpbmVUb1ZlcnRpY2FsU2VnbWVudCgpIGZpbmFsOworICAgIE9wdGlv
bmFsPEN1cnZlVG9DdWJpY1NlZ21lbnQ+IHBhcnNlQ3VydmVUb0N1YmljU2VnbWVudCgpIGZpbmFs
OworICAgIE9wdGlvbmFsPEN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQ+IHBhcnNlQ3VydmVUb0N1
YmljU21vb3RoU2VnbWVudCgpIGZpbmFsOworICAgIE9wdGlvbmFsPEN1cnZlVG9RdWFkcmF0aWNT
ZWdtZW50PiBwYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KCkgZmluYWw7CisgICAgT3B0aW9u
YWw8Q3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQ+IHBhcnNlQ3VydmVUb1F1YWRyYXRpY1Nt
b290aFNlZ21lbnQoKSBmaW5hbDsKKyAgICBPcHRpb25hbDxBcmNUb1NlZ21lbnQ+IHBhcnNlQXJj
VG9TZWdtZW50KCkgZmluYWw7CiAKICAgICBTdHJpbmcgbV9zdHJpbmc7CiAgICAgYm9vbCBtX2lz
OEJpdFNvdXJjZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2ludExpc3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9pbnRMaXN0LmgJKHJldmlzaW9uIDI2
MzE3NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2ludExpc3QuaAkod29ya2luZyBjb3B5
KQpAQCAtNjMsMTIgKzYzLDEzIEBAIHB1YmxpYzoKICAgICAgICAgYm9vbCBkZWxpbVBhcnNlZCA9
IGZhbHNlOwogICAgICAgICB3aGlsZSAoY3VyIDwgZW5kKSB7CiAgICAgICAgICAgICBkZWxpbVBh
cnNlZCA9IGZhbHNlOwotICAgICAgICAgICAgZmxvYXQgeFBvcyA9IDAuMGY7Ci0gICAgICAgICAg
ICBpZiAoIXBhcnNlTnVtYmVyKGN1ciwgZW5kLCB4UG9zKSkKKworICAgICAgICAgICAgYXV0byB4
UG9zID0gcGFyc2VOdW1iZXIoY3VyLCBlbmQpOworICAgICAgICAgICAgaWYgKCF4UG9zKQogICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgZmxvYXQgeVBvcyA9IDAu
MGY7Ci0gICAgICAgICAgICBpZiAoIXBhcnNlTnVtYmVyKGN1ciwgZW5kLCB5UG9zLCBmYWxzZSkp
CisgICAgICAgICAgICBhdXRvIHlQb3MgPSBwYXJzZU51bWJlcihjdXIsIGVuZCwgU3VmZml4U2tp
cHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsKKyAgICAgICAgICAgIGlmICgheVBvcykKICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNl
cyhjdXIsIGVuZCk7CkBAIC03OSw3ICs4MCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhjdXIsIGVuZCk7CiAKLSAgICAgICAgICAg
IGFwcGVuZChTVkdQb2ludDo6Y3JlYXRlKHsgeFBvcywgeVBvcyB9KSk7CisgICAgICAgICAgICBh
cHBlbmQoU1ZHUG9pbnQ6OmNyZWF0ZSh7ICp4UG9zLCAqeVBvcyB9KSk7CiAgICAgICAgIH0KIAog
ICAgICAgICByZXR1cm4gIWRlbGltUGFyc2VkOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1RvT1RGRm9udENvbnZlcnNpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdUb09URkZvbnRDb252ZXJzaW9uLmNwcAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1RvT1RGRm9udENvbnZlcnNpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMjksOCArMjI5LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGFkZENvZGVwb2ludFJhbmdlcyhj
b25zdCBVbmljb2RlUmFuZ2VzJiwgSGFzaFNldDxHbHlwaD4mIGdseXBoU2V0KSBjb25zdDsKICAg
ICB2b2lkIGFkZENvZGVwb2ludHMoY29uc3QgSGFzaFNldDxTdHJpbmc+JiBjb2RlcG9pbnRzLCBI
YXNoU2V0PEdseXBoPiYgZ2x5cGhTZXQpIGNvbnN0OwogICAgIHZvaWQgYWRkR2x5cGhOYW1lcyhj
b25zdCBIYXNoU2V0PFN0cmluZz4mIGdseXBoTmFtZXMsIEhhc2hTZXQ8R2x5cGg+JiBnbHlwaFNl
dCkgY29uc3Q7Ci0gICAgdm9pZCBhZGRLZXJuaW5nUGFpcihWZWN0b3I8S2VybmluZ0RhdGE+Jiwg
Y29uc3QgU1ZHS2VybmluZ1BhaXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
aXplX3QgYXBwZW5kS0VSTlN1YnRhYmxlKGJvb2wgKFQ6OipidWlsZEtlcm5pbmdQYWlyKShTVkdL
ZXJuaW5nUGFpciYpIGNvbnN0LCB1aW50MTZfdCBjb3ZlcmFnZSk7CisgICAgdm9pZCBhZGRLZXJu
aW5nUGFpcihWZWN0b3I8S2VybmluZ0RhdGE+JiwgU1ZHS2VybmluZ1BhaXImJikgY29uc3Q7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc2l6ZV90IGFwcGVuZEtFUk5TdWJ0YWJsZShPcHRpb25h
bDxTVkdLZXJuaW5nUGFpcj4gKFQ6OipidWlsZEtlcm5pbmdQYWlyKSgpIGNvbnN0LCB1aW50MTZf
dCBjb3ZlcmFnZSk7CiAgICAgc2l6ZV90IGZpbmlzaEFwcGVuZGluZ0tFUk5TdWJ0YWJsZShWZWN0
b3I8S2VybmluZ0RhdGE+LCB1aW50MTZfdCBjb3ZlcmFnZSk7CiAKICAgICB2b2lkIGFwcGVuZExp
Z2F0dXJlU3VidGFibGUoc2l6ZV90IHN1YnRhYmxlUmVjb3JkTG9jYXRpb24pOwpAQCAtMTA0MCw3
ICsxMDQwLDcgQEAgdm9pZCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFkZEdseXBoTmFtZQogICAg
IH0KIH0KIAotdm9pZCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFkZEtlcm5pbmdQYWlyKFZlY3Rv
cjxLZXJuaW5nRGF0YT4mIGRhdGEsIGNvbnN0IFNWR0tlcm5pbmdQYWlyJiBrZXJuaW5nUGFpcikg
Y29uc3QKK3ZvaWQgU1ZHVG9PVEZGb250Q29udmVydGVyOjphZGRLZXJuaW5nUGFpcihWZWN0b3I8
S2VybmluZ0RhdGE+JiBkYXRhLCBTVkdLZXJuaW5nUGFpciYmIGtlcm5pbmdQYWlyKSBjb25zdAog
ewogICAgIEhhc2hTZXQ8R2x5cGg+IGdseXBoU2V0MTsKICAgICBIYXNoU2V0PEdseXBoPiBnbHlw
aFNldDI7CkBAIC0xMDU5LDEzICsxMDU5LDEzIEBAIHZvaWQgU1ZHVG9PVEZGb250Q29udmVydGVy
OjphZGRLZXJuaW5nUGEKICAgICB9CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBz
aXplX3QgU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRLRVJOU3VidGFibGUoYm9vbCAoVDo6
KmJ1aWxkS2VybmluZ1BhaXIpKFNWR0tlcm5pbmdQYWlyJikgY29uc3QsIHVpbnQxNl90IGNvdmVy
YWdlKQordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHNpemVfdCBTVkdUb09URkZvbnRDb252
ZXJ0ZXI6OmFwcGVuZEtFUk5TdWJ0YWJsZShPcHRpb25hbDxTVkdLZXJuaW5nUGFpcj4gKFQ6Oipi
dWlsZEtlcm5pbmdQYWlyKSgpIGNvbnN0LCB1aW50MTZfdCBjb3ZlcmFnZSkKIHsKICAgICBWZWN0
b3I8S2VybmluZ0RhdGE+IGtlcm5pbmdEYXRhOwogICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGNo
aWxkcmVuT2ZUeXBlPFQ+KG1fZm9udEVsZW1lbnQpKSB7Ci0gICAgICAgIFNWR0tlcm5pbmdQYWly
IGtlcm5pbmdQYWlyOwotICAgICAgICBpZiAoKGVsZW1lbnQuKmJ1aWxkS2VybmluZ1BhaXIpKGtl
cm5pbmdQYWlyKSkKLSAgICAgICAgICAgIGFkZEtlcm5pbmdQYWlyKGtlcm5pbmdEYXRhLCBrZXJu
aW5nUGFpcik7CisgICAgICAgIGF1dG8ga2VybmluZ1BhaXIgPSAoZWxlbWVudC4qYnVpbGRLZXJu
aW5nUGFpcikoKTsKKyAgICAgICAgaWYgKGtlcm5pbmdQYWlyKQorICAgICAgICAgICAgYWRkS2Vy
bmluZ1BhaXIoa2VybmluZ0RhdGEsIFdURk1vdmUoKmtlcm5pbmdQYWlyKSk7CiAgICAgfQogICAg
IHJldHVybiBmaW5pc2hBcHBlbmRpbmdLRVJOU3VidGFibGUoV1RGTW92ZShrZXJuaW5nRGF0YSks
IGNvdmVyYWdlKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm1MaXN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybUxpc3QuaAko
cmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybUxpc3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDE3ICsxMTQsMTggQEAgcHJpdmF0ZToKICAgICAgICAg
Ym9vbCBkZWxpbVBhcnNlZCA9IGZhbHNlOwogICAgICAgICB3aGlsZSAoc3RhcnQgPCBlbmQpIHsK
ICAgICAgICAgICAgIGRlbGltUGFyc2VkID0gZmFsc2U7Ci0gICAgICAgICAgICBTVkdUcmFuc2Zv
cm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZSB0eXBlID0gU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR19U
UkFOU0ZPUk1fVU5LTk9XTjsKICAgICAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhzdGFy
dCwgZW5kKTsKLQotICAgICAgICAgICAgaWYgKCFTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZUFuZFNr
aXBUeXBlKHN0YXJ0LCBlbmQsIHR5cGUpKQorICAgICAgICAgICAgCisgICAgICAgICAgICBhdXRv
IHR5cGUgPSBTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZUFuZFNraXBUeXBlKHN0YXJ0LCBlbmQpOwor
ICAgICAgICAgICAgaWYgKCF0eXBlKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgICAgICAgICAgUmVmPFNWR1RyYW5zZm9ybT4gdHJhbnNmb3JtID0gU1ZHVHJhbnNmb3JtOjpj
cmVhdGUodHlwZSk7Ci0gICAgICAgICAgICBpZiAoIVNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJh
bnNmb3JtVmFsdWUodHlwZSwgc3RhcnQsIGVuZCwgdHJhbnNmb3JtLT52YWx1ZSgpKSkKKyAgICAg
ICAgICAgIGF1dG8gcGFyc2VkVHJhbnNmb3JtVmFsdWUgPSBTVkdUcmFuc2Zvcm1hYmxlOjpwYXJz
ZVRyYW5zZm9ybVZhbHVlKCp0eXBlLCBzdGFydCwgZW5kKTsKKyAgICAgICAgICAgIGlmICghcGFy
c2VkVHJhbnNmb3JtVmFsdWUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
ICAgICAgICBhcHBlbmQoV1RGTW92ZSh0cmFuc2Zvcm0pKTsKKyAgICAgICAgICAgIGFwcGVuZChT
VkdUcmFuc2Zvcm06OmNyZWF0ZSgqcGFyc2VkVHJhbnNmb3JtVmFsdWUpKTsKKwogICAgICAgICAg
ICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHN0YXJ0LCBlbmQpOwogICAgICAgICAgICAgaWYgKHN0
YXJ0IDwgZW5kICYmICpzdGFydCA9PSAnLCcpIHsKICAgICAgICAgICAgICAgICBkZWxpbVBhcnNl
ZCA9IHRydWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtYWJsZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybWFibGUuY3BwCShy
ZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtYWJsZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDggKzQzLDEyIEBAIHN0YXRpYyBpbnQgcGFyc2VUcmFu
c2Zvcm1QYXJhbUxpc3QoY29uc3QKICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMocHRyLCBlbmQp
OwogCiAgICAgd2hpbGUgKHJlcXVpcmVkUGFyYW1zIDwgcmVxdWlyZWQpIHsKLSAgICAgICAgaWYg
KHB0ciA+PSBlbmQgfHwgIXBhcnNlTnVtYmVyKHB0ciwgZW5kLCB2YWx1ZXNbcmVxdWlyZWRQYXJh
bXNdLCBmYWxzZSkpCisgICAgICAgIGlmIChwdHIgPj0gZW5kKQogICAgICAgICAgICAgcmV0dXJu
IC0xOworICAgICAgICBhdXRvIHBhcnNlZE51bWJlciA9IHBhcnNlTnVtYmVyKHB0ciwgZW5kLCBT
dWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNraXApOworICAgICAgICBpZiAoIXBhcnNlZE51bWJl
cikKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgdmFsdWVzW3JlcXVpcmVkUGFyYW1z
XSA9ICpwYXJzZWROdW1iZXI7CiAgICAgICAgIHJlcXVpcmVkUGFyYW1zKys7CiAgICAgICAgIGlm
IChyZXF1aXJlZFBhcmFtcyA8IHJlcXVpcmVkKQogICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZH
U3BhY2VzT3JEZWxpbWl0ZXIocHRyLCBlbmQpOwpAQCAtNjMsOCArNjcsMTIgQEAgc3RhdGljIGlu
dCBwYXJzZVRyYW5zZm9ybVBhcmFtTGlzdChjb25zdAogICAgICAgICAgICAgcmV0dXJuIC0xOwog
ICAgIH0gZWxzZSB7CiAgICAgICAgIHdoaWxlIChvcHRpb25hbFBhcmFtcyA8IG9wdGlvbmFsKSB7
Ci0gICAgICAgICAgICBpZiAocHRyID49IGVuZCB8fCAhcGFyc2VOdW1iZXIocHRyLCBlbmQsIHZh
bHVlc1tyZXF1aXJlZFBhcmFtcyArIG9wdGlvbmFsUGFyYW1zXSwgZmFsc2UpKQorICAgICAgICAg
ICAgaWYgKHB0ciA+PSBlbmQpCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAg
ICAgYXV0byBwYXJzZWROdW1iZXIgPSBwYXJzZU51bWJlcihwdHIsIGVuZCwgU3VmZml4U2tpcHBp
bmdQb2xpY3k6OkRvbnRTa2lwKTsKKyAgICAgICAgICAgIGlmICghcGFyc2VkTnVtYmVyKQogICAg
ICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIHZhbHVlc1tyZXF1aXJlZFBhcmFt
cyArIG9wdGlvbmFsUGFyYW1zXSA9ICpwYXJzZWROdW1iZXI7CiAgICAgICAgICAgICBvcHRpb25h
bFBhcmFtcysrOwogICAgICAgICAgICAgaWYgKG9wdGlvbmFsUGFyYW1zIDwgb3B0aW9uYWwpCiAg
ICAgICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxpbWl0ZXIocHRyLCBlbmQp
OwpAQCAtOTAsMTYgKzk4LDE3IEBAIHN0YXRpYyBjb25zdCBpbnQgb3B0aW9uYWxWYWx1ZXNGb3JU
eXBlW10KIC8vIFRoaXMgZGVzdHJ1Y3RvciBpcyBuZWVkZWQgaW4gb3JkZXIgdG8gbGluayBjb3Jy
ZWN0bHkgd2l0aCBJbnRlbCBJQ0MuCiBTVkdUcmFuc2Zvcm1hYmxlOjp+U1ZHVHJhbnNmb3JtYWJs
ZSgpID0gZGVmYXVsdDsKIAotYm9vbCBTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZVRyYW5zZm9ybVZh
bHVlKFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlIHR5cGUsIGNvbnN0IFVDaGFy
KiYgcHRyLCBjb25zdCBVQ2hhciogZW5kLCBTVkdUcmFuc2Zvcm1WYWx1ZSYgdHJhbnNmb3JtKQor
T3B0aW9uYWw8U1ZHVHJhbnNmb3JtVmFsdWU+IFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNm
b3JtVmFsdWUoU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGUgdHlwZSwgY29uc3Qg
VUNoYXIqJiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQpCiB7CiAgICAgaWYgKHR5cGUgPT0gU1ZHVHJh
bnNmb3JtVmFsdWU6OlNWR19UUkFOU0ZPUk1fVU5LTk9XTikKLSAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgaW50IHZhbHVlQ291bnQgPSAw
OwogICAgIGZsb2F0IHZhbHVlc1tdID0gezAsIDAsIDAsIDAsIDAsIDB9OwogICAgIGlmICgodmFs
dWVDb3VudCA9IHBhcnNlVHJhbnNmb3JtUGFyYW1MaXN0KHB0ciwgZW5kLCB2YWx1ZXMsIHJlcXVp
cmVkVmFsdWVzRm9yVHlwZVt0eXBlXSwgb3B0aW9uYWxWYWx1ZXNGb3JUeXBlW3R5cGVdKSkgPCAw
KQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAK
KyAgICBTVkdUcmFuc2Zvcm1WYWx1ZSB0cmFuc2Zvcm07CiAgICAgc3dpdGNoICh0eXBlKSB7CiAg
ICAgY2FzZSBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RSQU5TRk9STV9VTktOT1dOOgogICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTEzMyw3ICsxNDIsNyBAQCBib29sIFNWR1RyYW5z
Zm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtVmFsCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAg
IHJldHVybiB0cnVlOworICAgIHJldHVybiB0cmFuc2Zvcm07CiB9CiAKIHN0YXRpYyBjb25zdCBV
Q2hhciBza2V3WERlc2NbXSA9ICB7J3MnLCAnaycsICdlJywgJ3cnLCAnWCd9OwpAQCAtMTQzLDM5
ICsxNTIsMzUgQEAgc3RhdGljIGNvbnN0IFVDaGFyIHRyYW5zbGF0ZURlc2NbXSA9ICB7Jwogc3Rh
dGljIGNvbnN0IFVDaGFyIHJvdGF0ZURlc2NbXSA9ICB7J3InLCAnbycsICd0JywgJ2EnLCAndCcs
ICdlJ307CiBzdGF0aWMgY29uc3QgVUNoYXIgbWF0cml4RGVzY1tdID0gIHsnbScsICdhJywgJ3Qn
LCAncicsICdpJywgJ3gnfTsKIAotYm9vbCBTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZUFuZFNraXBU
eXBlKGNvbnN0IFVDaGFyKiYgY3VyclRyYW5zZm9ybSwgY29uc3QgVUNoYXIqIGVuZCwgU1ZHVHJh
bnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGUmIHR5cGUpCitPcHRpb25hbDxTVkdUcmFuc2Zv
cm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZT4gU1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VBbmRTa2lw
VHlwZShjb25zdCBVQ2hhciomIGN1cnJUcmFuc2Zvcm0sIGNvbnN0IFVDaGFyKiBlbmQpCiB7CiAg
ICAgaWYgKGN1cnJUcmFuc2Zvcm0gPj0gZW5kKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBpZiAoKmN1cnJUcmFuc2Zvcm0gPT0gJ3Mn
KSB7CiAgICAgICAgIGlmIChza2lwU3RyaW5nKGN1cnJUcmFuc2Zvcm0sIGVuZCwgc2tld1hEZXNj
LCBXVEZfQVJSQVlfTEVOR1RIKHNrZXdYRGVzYykpKQotICAgICAgICAgICAgdHlwZSA9IFNWR1Ry
YW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX1NLRVdYOworICAgICAgICAgICAgcmV0dXJuIFNW
R1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX1NLRVdYOwogICAgICAgICBlbHNlIGlmIChz
a2lwU3RyaW5nKGN1cnJUcmFuc2Zvcm0sIGVuZCwgc2tld1lEZXNjLCBXVEZfQVJSQVlfTEVOR1RI
KHNrZXdZRGVzYykpKQotICAgICAgICAgICAgdHlwZSA9IFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdf
VFJBTlNGT1JNX1NLRVdZOworICAgICAgICAgICAgcmV0dXJuIFNWR1RyYW5zZm9ybVZhbHVlOjpT
VkdfVFJBTlNGT1JNX1NLRVdZOwogICAgICAgICBlbHNlIGlmIChza2lwU3RyaW5nKGN1cnJUcmFu
c2Zvcm0sIGVuZCwgc2NhbGVEZXNjLCBXVEZfQVJSQVlfTEVOR1RIKHNjYWxlRGVzYykpKQotICAg
ICAgICAgICAgdHlwZSA9IFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX1NDQUxFOwor
ICAgICAgICAgICAgcmV0dXJuIFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX1NDQUxF
OwogICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0gZWxzZSBpZiAoc2tpcFN0cmluZyhjdXJyVHJhbnNm
b3JtLCBlbmQsIHRyYW5zbGF0ZURlc2MsIFdURl9BUlJBWV9MRU5HVEgodHJhbnNsYXRlRGVzYykp
KQotICAgICAgICB0eXBlID0gU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR19UUkFOU0ZPUk1fVFJBTlNM
QVRFOworICAgICAgICByZXR1cm4gU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR19UUkFOU0ZPUk1fVFJB
TlNMQVRFOwogICAgIGVsc2UgaWYgKHNraXBTdHJpbmcoY3VyclRyYW5zZm9ybSwgZW5kLCByb3Rh
dGVEZXNjLCBXVEZfQVJSQVlfTEVOR1RIKHJvdGF0ZURlc2MpKSkKLSAgICAgICAgdHlwZSA9IFNW
R1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX1JPVEFURTsKKyAgICAgICAgcmV0dXJuIFNW
R1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX1JPVEFURTsKICAgICBlbHNlIGlmIChza2lw
U3RyaW5nKGN1cnJUcmFuc2Zvcm0sIGVuZCwgbWF0cml4RGVzYywgV1RGX0FSUkFZX0xFTkdUSCht
YXRyaXhEZXNjKSkpCi0gICAgICAgIHR5cGUgPSBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RSQU5T
Rk9STV9NQVRSSVg7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJl
dHVybiBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RSQU5TRk9STV9NQVRSSVg7CiAKLSAgICByZXR1
cm4gdHJ1ZTsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCiBTVkdUcmFuc2Zvcm1WYWx1
ZTo6U1ZHVHJhbnNmb3JtVHlwZSBTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZVRyYW5zZm9ybVR5cGUo
Y29uc3QgU3RyaW5nJiB0eXBlU3RyaW5nKQogewotICAgIFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdU
cmFuc2Zvcm1UeXBlIHR5cGUgPSBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RSQU5TRk9STV9VTktO
T1dOOwogICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyh0eXBlU3Ry
aW5nKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKICAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVy
cyA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKLSAgICBwYXJzZUFuZFNraXBUeXBlKGNoYXJhY3Rl
cnMsIGNoYXJhY3RlcnMgKyB0eXBlU3RyaW5nLmxlbmd0aCgpLCB0eXBlKTsKLSAgICByZXR1cm4g
dHlwZTsKKyAgICByZXR1cm4gcGFyc2VBbmRTa2lwVHlwZShjaGFyYWN0ZXJzLCBjaGFyYWN0ZXJz
ICsgdHlwZVN0cmluZy5sZW5ndGgoKSkudmFsdWVPcihTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RS
QU5TRk9STV9VTktOT1dOKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Ry
YW5zZm9ybWFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNm
b3JtYWJsZS5oCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJh
bnNmb3JtYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw5ICszMiw5IEBAIGNsYXNzIFNWR1Ry
YW5zZm9ybWFibGUgOiBwdWJsaWMgU1ZHTG9jYXQKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5TVkdU
cmFuc2Zvcm1hYmxlKCk7CiAKLSAgICBzdGF0aWMgYm9vbCBwYXJzZVRyYW5zZm9ybVZhbHVlKFNW
R1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlLCBjb25zdCBVQ2hhciomIHB0ciwgY29u
c3QgVUNoYXIqIGVuZCwgU1ZHVHJhbnNmb3JtVmFsdWUmKTsKKyAgICBzdGF0aWMgT3B0aW9uYWw8
U1ZHVHJhbnNmb3JtVmFsdWU+IHBhcnNlVHJhbnNmb3JtVmFsdWUoU1ZHVHJhbnNmb3JtVmFsdWU6
OlNWR1RyYW5zZm9ybVR5cGUsIGNvbnN0IFVDaGFyKiYgcHRyLCBjb25zdCBVQ2hhciogZW5kKTsK
ICAgICBzdGF0aWMgU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGUgcGFyc2VUcmFu
c2Zvcm1UeXBlKGNvbnN0IFN0cmluZyYpOwotICAgIHN0YXRpYyBib29sIHBhcnNlQW5kU2tpcFR5
cGUoY29uc3QgVUNoYXIqJiBjdXJyVHJhbnNmb3JtLCBjb25zdCBVQ2hhciogZW5kLCBTVkdUcmFu
c2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZSYpOworICAgIHN0YXRpYyBPcHRpb25hbDxTVkdU
cmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZT4gcGFyc2VBbmRTa2lwVHlwZShjb25zdCBV
Q2hhciomIGN1cnJUcmFuc2Zvcm0sIGNvbnN0IFVDaGFyKiBlbmQpOwogCiAgICAgQWZmaW5lVHJh
bnNmb3JtIGxvY2FsQ29vcmRpbmF0ZVNwYWNlVHJhbnNmb3JtKFNWR0xvY2F0YWJsZTo6Q1RNU2Nv
cGUpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKTsgfQog
ICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKSBjb25z
dCA9IDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVktlcm5FbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVktlcm5FbGVtZW50LmNwcAkocmV2aXNp
b24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ZLZXJuRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQzLDI0ICs0Myw0NCBAQCBSZWY8U1ZHVktlcm5FbGVtZW50PiBTVkdW
S2VybkVsZW1lbnQ6OmNyCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZHVktlcm5FbGVtZW50
KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKLWJvb2wgU1ZHVktlcm5FbGVtZW50OjpidWlsZFZl
cnRpY2FsS2VybmluZ1BhaXIoU1ZHS2VybmluZ1BhaXImIGtlcm5pbmdQYWlyKSBjb25zdAorT3B0
aW9uYWw8U1ZHS2VybmluZ1BhaXI+IFNWR1ZLZXJuRWxlbWVudDo6YnVpbGRWZXJ0aWNhbEtlcm5p
bmdQYWlyKCkgY29uc3QKIHsKKyAgICAvLyBGSVhNRTogQ2FuIHRoaXMgYmUgc2hhcmVkIHdpdGgg
U1ZHSEtlcm5FbGVtZW50OjpidWlsZFZlcnRpY2FsS2VybmluZ1BhaXI/CisKICAgICBhdXRvJiB1
MSA9IGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oU1ZHTmFtZXM6OnUxQXR0cik7CiAg
ICAgYXV0byYgZzEgPSBhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFNWR05hbWVzOjpn
MUF0dHIpOwogICAgIGF1dG8mIHUyID0gYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihT
VkdOYW1lczo6dTJBdHRyKTsKICAgICBhdXRvJiBnMiA9IGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJv
bml6YXRpb24oU1ZHTmFtZXM6OmcyQXR0cik7CiAgICAgaWYgKCh1MS5pc0VtcHR5KCkgJiYgZzEu
aXNFbXB0eSgpKSB8fCAodTIuaXNFbXB0eSgpICYmIGcyLmlzRW1wdHkoKSkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIGF1dG8gZ2x5
cGhOYW1lMSA9IHBhcnNlR2x5cGhOYW1lKGcxKTsKKyAgICBpZiAoIWdseXBoTmFtZTEpCisgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgYXV0byBnbHlwaE5hbWUyID0gcGFyc2VHbHlw
aE5hbWUoZzIpOworICAgIGlmICghZ2x5cGhOYW1lMikKKyAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKyAgICBhdXRvIHVuaWNvZGVTdHJpbmcxID0gcGFyc2VLZXJuaW5nVW5pY29kZVN0cmlu
Zyh1MSk7CisgICAgaWYgKCF1bmljb2RlU3RyaW5nMSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKyAgICBhdXRvIHVuaWNvZGVTdHJpbmcyID0gcGFyc2VLZXJuaW5nVW5pY29kZVN0cmlu
Zyh1Mik7CisgICAgaWYgKCF1bmljb2RlU3RyaW5nMikKKyAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKworICAgIGJvb2wgb2sgPSBmYWxzZTsKKyAgICBhdXRvIGtlcm5pbmcgPSBhdHRyaWJ1
dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFNWR05hbWVzOjprQXR0cikuc3RyaW5nKCkudG9GbG9h
dCgmb2spOworICAgIGlmICghb2spCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAg
ICBpZiAocGFyc2VHbHlwaE5hbWUoZzEsIGtlcm5pbmdQYWlyLmdseXBoTmFtZTEpCi0gICAgICAg
ICYmIHBhcnNlR2x5cGhOYW1lKGcyLCBrZXJuaW5nUGFpci5nbHlwaE5hbWUyKQotICAgICAgICAm
JiBwYXJzZUtlcm5pbmdVbmljb2RlU3RyaW5nKHUxLCBrZXJuaW5nUGFpci51bmljb2RlUmFuZ2Ux
LCBrZXJuaW5nUGFpci51bmljb2RlTmFtZTEpCi0gICAgICAgICYmIHBhcnNlS2VybmluZ1VuaWNv
ZGVTdHJpbmcodTIsIGtlcm5pbmdQYWlyLnVuaWNvZGVSYW5nZTIsIGtlcm5pbmdQYWlyLnVuaWNv
ZGVOYW1lMikpIHsKLSAgICAgICAgYm9vbCBvayA9IGZhbHNlOwotICAgICAgICBrZXJuaW5nUGFp
ci5rZXJuaW5nID0gYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihTVkdOYW1lczo6a0F0
dHIpLnN0cmluZygpLnRvRmxvYXQoJm9rKTsKLSAgICAgICAgcmV0dXJuIG9rOwotICAgIH0KLSAg
ICByZXR1cm4gZmFsc2U7CisgICAgU1ZHS2VybmluZ1BhaXIga2VybmluZ1BhaXI7CisgICAga2Vy
bmluZ1BhaXIuZ2x5cGhOYW1lMSA9IFdURk1vdmUoKmdseXBoTmFtZTEpOworICAgIGtlcm5pbmdQ
YWlyLmdseXBoTmFtZTIgPSBXVEZNb3ZlKCpnbHlwaE5hbWUyKTsKKyAgICBrZXJuaW5nUGFpci51
bmljb2RlUmFuZ2UxID0gV1RGTW92ZSh1bmljb2RlU3RyaW5nMS0+Zmlyc3QpOworICAgIGtlcm5p
bmdQYWlyLnVuaWNvZGVOYW1lMSA9IFdURk1vdmUodW5pY29kZVN0cmluZzEtPnNlY29uZCk7Cisg
ICAga2VybmluZ1BhaXIudW5pY29kZVJhbmdlMiA9IFdURk1vdmUodW5pY29kZVN0cmluZzItPmZp
cnN0KTsKKyAgICBrZXJuaW5nUGFpci51bmljb2RlTmFtZTIgPSBXVEZNb3ZlKHVuaWNvZGVTdHJp
bmcyLT5zZWNvbmQpOworICAgIGtlcm5pbmdQYWlyLmtlcm5pbmcgPSBrZXJuaW5nOworICAgIHJl
dHVybiBrZXJuaW5nUGFpcjsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ZL
ZXJuRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdWS2VybkVs
ZW1lbnQuaAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ZLZXJu
RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBAIGNsYXNzIFNWR1ZLZXJu
RWxlbWVudCBmaW5hbCA6IHB1YmxpYyBTVkcKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPFNWR1ZL
ZXJuRWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCYpOwogCi0g
ICAgYm9vbCBidWlsZFZlcnRpY2FsS2VybmluZ1BhaXIoU1ZHS2VybmluZ1BhaXImIGtlcm5pbmdQ
YWlyKSBjb25zdDsKKyAgICBPcHRpb25hbDxTVkdLZXJuaW5nUGFpcj4gYnVpbGRWZXJ0aWNhbEtl
cm5pbmdQYWlyKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgU1ZHVktlcm5FbGVtZW50KGNvbnN0
IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1ZpZXdTcGVjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVmlld1Nw
ZWMuY3BwCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVmlld1Nw
ZWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OSwxMCArODksNyBAQCBib29sIFNWR1ZpZXdTcGVj
OjpwYXJzZVZpZXdTcGVjKGNvbnN0IFN0CiAgICAgICAgICAgICAgICAgaWYgKGN1cnJWaWV3U3Bl
YyA+PSBlbmQgfHwgKmN1cnJWaWV3U3BlYyAhPSAnKCcpCiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICBjdXJyVmlld1NwZWMrKzsKLSAgICAgICAgICAg
ICAgICBGbG9hdFJlY3Qgdmlld0JveDsKLSAgICAgICAgICAgICAgICBpZiAoIVNWR0ZpdFRvVmll
d0JveDo6cGFyc2VWaWV3Qm94KGN1cnJWaWV3U3BlYywgZW5kLCB2aWV3Qm94LCBmYWxzZSkpCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBzZXRWaWV3
Qm94KHZpZXdCb3gpOworICAgICAgICAgICAgICAgIHNldFZpZXdCb3goU1ZHRml0VG9WaWV3Qm94
OjpwYXJzZVZpZXdCb3goY3VyclZpZXdTcGVjLCBlbmQsIGZhbHNlKS52YWx1ZSgpKTsKICAgICAg
ICAgICAgICAgICBpZiAoY3VyclZpZXdTcGVjID49IGVuZCB8fCAqY3VyclZpZXdTcGVjICE9ICcp
JykKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIGN1
cnJWaWV3U3BlYysrOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5p
bWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbklt
cGwuaAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMv
U1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNTQsMTAgKzI1NCw4IEBAIHB1YmxpYzoKIAogICAgIE9wdGlvbmFsPGZsb2F0PiBjYWxjdWxh
dGVEaXN0YW5jZShTVkdFbGVtZW50KiwgY29uc3QgU3RyaW5nJiBmcm9tLCBjb25zdCBTdHJpbmcm
IHRvKSBjb25zdCBvdmVycmlkZQogICAgIHsKLSAgICAgICAgZmxvYXQgZnJvbU51bWJlciA9IDA7
Ci0gICAgICAgIGZsb2F0IHRvTnVtYmVyID0gMDsKLSAgICAgICAgcGFyc2VOdW1iZXJGcm9tU3Ry
aW5nKGZyb20sIGZyb21OdW1iZXIpOwotICAgICAgICBwYXJzZU51bWJlckZyb21TdHJpbmcodG8s
IHRvTnVtYmVyKTsKKyAgICAgICAgZmxvYXQgZnJvbU51bWJlciA9IHBhcnNlTnVtYmVyKGZyb20p
LnZhbHVlT3IoMCk7CisgICAgICAgIGZsb2F0IHRvTnVtYmVyID0gcGFyc2VOdW1iZXIodG8pLnZh
bHVlT3IoMCk7CiAgICAgICAgIHJldHVybiBmYWJzZih0b051bWJlciAtIGZyb21OdW1iZXIpOwog
ICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHUHJvcGVydHlU
cmFpdHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdQ
cm9wZXJ0eVRyYWl0cy5oCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
cHJvcGVydGllcy9TVkdQcm9wZXJ0eVRyYWl0cy5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSwxMCAr
NzUsMTAgQEAgc3RydWN0IFNWR1Byb3BlcnR5VHJhaXRzPHN0ZDo6cGFpcjxpbnQsIAogICAgIHN0
YXRpYyBzdGQ6OnBhaXI8aW50LCBpbnQ+IGluaXRpYWxWYWx1ZSgpIHsgcmV0dXJuIHsgfTsgfQog
ICAgIHN0YXRpYyBzdGQ6OnBhaXI8aW50LCBpbnQ+IGZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBz
dHJpbmcpCiAgICAgewotICAgICAgICBmbG9hdCBmaXJzdE51bWJlciA9IDAsIHNlY29uZE51bWJl
ciA9IDA7Ci0gICAgICAgIGlmICghcGFyc2VOdW1iZXJPcHRpb25hbE51bWJlcihzdHJpbmcsIGZp
cnN0TnVtYmVyLCBzZWNvbmROdW1iZXIpKQorICAgICAgICBhdXRvIHJlc3VsdCA9IHBhcnNlTnVt
YmVyT3B0aW9uYWxOdW1iZXIoc3RyaW5nKTsKKyAgICAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAg
ICAgICByZXR1cm4geyB9OwotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoc3RhdGljX2Nh
c3Q8aW50Pihyb3VuZGYoZmlyc3ROdW1iZXIpKSwgc3RhdGljX2Nhc3Q8aW50Pihyb3VuZGYoc2Vj
b25kTnVtYmVyKSkpOworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoc3RhdGljX2Nhc3Q8
aW50Pihyb3VuZGYocmVzdWx0LT5maXJzdCkpLCBzdGF0aWNfY2FzdDxpbnQ+KHJvdW5kZihyZXN1
bHQtPnNlY29uZCkpKTsKICAgICB9CiAgICAgc3RhdGljIE9wdGlvbmFsPHN0ZDo6cGFpcjxpbnQs
IGludD4+IHBhcnNlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBTdHJpbmcmKSB7IEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gaW5pdGlhbFZhbHVlKCk7IH0KICAgICBzdGF0aWMgU3Ry
aW5nIHRvU3RyaW5nKHN0ZDo6cGFpcjxpbnQsIGludD4pIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7
IHJldHVybiBlbXB0eVN0cmluZygpOyB9CkBAIC04OSwxNyArODksMTEgQEAgc3RydWN0IFNWR1By
b3BlcnR5VHJhaXRzPGZsb2F0PiB7CiAgICAgc3RhdGljIGZsb2F0IGluaXRpYWxWYWx1ZSgpIHsg
cmV0dXJuIDA7IH0KICAgICBzdGF0aWMgZmxvYXQgZnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHN0
cmluZykKICAgICB7Ci0gICAgICAgIGZsb2F0IG51bWJlciA9IDA7Ci0gICAgICAgIGlmICghcGFy
c2VOdW1iZXJGcm9tU3RyaW5nKHN0cmluZywgbnVtYmVyKSkKLSAgICAgICAgICAgIHJldHVybiAw
OwotICAgICAgICByZXR1cm4gbnVtYmVyOworICAgICAgICByZXR1cm4gcGFyc2VOdW1iZXIoc3Ry
aW5nKS52YWx1ZU9yKDApOwogICAgIH0KICAgICBzdGF0aWMgT3B0aW9uYWw8ZmxvYXQ+IHBhcnNl
KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBTdHJpbmcmIHN0cmluZykKICAgICB7Ci0gICAg
ICAgIGZsb2F0IG51bWJlcjsKLSAgICAgICAgaWYgKCFwYXJzZU51bWJlckZyb21TdHJpbmcoc3Ry
aW5nLCBudW1iZXIpKQotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAg
cmV0dXJuIG51bWJlcjsKKyAgICAgICAgcmV0dXJuIHBhcnNlTnVtYmVyKHN0cmluZyk7CiAgICAg
fQogICAgIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmcoZmxvYXQgdHlwZSkgeyByZXR1cm4gU3RyaW5n
OjpudW1iZXIodHlwZSk7IH0KIH07CkBAIC0xMDksMTAgKzEwMyw3IEBAIHN0cnVjdCBTVkdQcm9w
ZXJ0eVRyYWl0czxzdGQ6OnBhaXI8ZmxvYXQKICAgICBzdGF0aWMgc3RkOjpwYWlyPGZsb2F0LCBm
bG9hdD4gaW5pdGlhbFZhbHVlKCkgeyByZXR1cm4geyB9OyB9CiAgICAgc3RhdGljIHN0ZDo6cGFp
cjxmbG9hdCwgZmxvYXQ+IGZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiAgICAgewot
ICAgICAgICBmbG9hdCBmaXJzdE51bWJlciA9IDAsIHNlY29uZE51bWJlciA9IDA7Ci0gICAgICAg
IGlmICghcGFyc2VOdW1iZXJPcHRpb25hbE51bWJlcihzdHJpbmcsIGZpcnN0TnVtYmVyLCBzZWNv
bmROdW1iZXIpKQotICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgcmV0dXJuIHN0ZDo6
bWFrZV9wYWlyKGZpcnN0TnVtYmVyLCBzZWNvbmROdW1iZXIpOworICAgICAgICByZXR1cm4gcGFy
c2VOdW1iZXJPcHRpb25hbE51bWJlcihzdHJpbmcpLnZhbHVlT3Ioc3RkOjpwYWlyPGZsb2F0LCBm
bG9hdD4geyB9KTsKICAgICB9CiAgICAgc3RhdGljIE9wdGlvbmFsPHN0ZDo6cGFpcjxmbG9hdCwg
ZmxvYXQ+PiBwYXJzZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgU3RyaW5nJikgeyBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIGluaXRpYWxWYWx1ZSgpOyB9CiAgICAgc3RhdGljIFN0
cmluZyB0b1N0cmluZyhzdGQ6OnBhaXI8ZmxvYXQsIGZsb2F0PikgeyBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsgcmV0dXJuIGVtcHR5U3RyaW5nKCk7IH0KQEAgLTEyMywxNyArMTE0LDExIEBAIHN0cnVj
dCBTVkdQcm9wZXJ0eVRyYWl0czxGbG9hdFBvaW50PiB7CiAgICAgc3RhdGljIEZsb2F0UG9pbnQg
aW5pdGlhbFZhbHVlKCkgeyByZXR1cm4gRmxvYXRQb2ludCgpOyB9CiAgICAgc3RhdGljIEZsb2F0
UG9pbnQgZnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKICAgICB7Ci0gICAgICAgIEZs
b2F0UG9pbnQgcG9pbnQ7Ci0gICAgICAgIGlmICghcGFyc2VQb2ludChzdHJpbmcsIHBvaW50KSkK
LSAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgIHJldHVybiBwb2ludDsKKyAgICAgICAg
cmV0dXJuIHBhcnNlUG9pbnQoc3RyaW5nKS52YWx1ZU9yKEZsb2F0UG9pbnQgeyB9KTsKICAgICB9
CiAgICAgc3RhdGljIE9wdGlvbmFsPEZsb2F0UG9pbnQ+IHBhcnNlKGNvbnN0IFF1YWxpZmllZE5h
bWUmLCBjb25zdCBTdHJpbmcmIHN0cmluZykKICAgICB7Ci0gICAgICAgIEZsb2F0UG9pbnQgcG9p
bnQ7Ci0gICAgICAgIGlmICghcGFyc2VQb2ludChzdHJpbmcsIHBvaW50KSkKLSAgICAgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgICAgIHJldHVybiBwb2ludDsKKyAgICAgICAgcmV0
dXJuIHBhcnNlUG9pbnQoc3RyaW5nKTsKICAgICB9CiAgICAgc3RhdGljIFN0cmluZyB0b1N0cmlu
Zyhjb25zdCBGbG9hdFBvaW50JiB0eXBlKQogICAgIHsKQEAgLTE0NiwxNyArMTMxLDExIEBAIHN0
cnVjdCBTVkdQcm9wZXJ0eVRyYWl0czxGbG9hdFJlY3Q+IHsKICAgICBzdGF0aWMgRmxvYXRSZWN0
IGluaXRpYWxWYWx1ZSgpIHsgcmV0dXJuIEZsb2F0UmVjdCgpOyB9CiAgICAgc3RhdGljIEZsb2F0
UmVjdCBmcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKQogICAgIHsKLSAgICAgICAgRmxv
YXRSZWN0IHJlY3Q7Ci0gICAgICAgIGlmICghcGFyc2VSZWN0KHN0cmluZywgcmVjdCkpCi0gICAg
ICAgICAgICByZXR1cm4geyB9OwotICAgICAgICByZXR1cm4gcmVjdDsKKyAgICAgICAgcmV0dXJu
IHBhcnNlUmVjdChzdHJpbmcpLnZhbHVlT3IoRmxvYXRSZWN0IHsgfSk7CiAgICAgfQogICAgIHN0
YXRpYyBPcHRpb25hbDxGbG9hdFJlY3Q+IHBhcnNlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25z
dCBTdHJpbmcmIHN0cmluZykKICAgICB7Ci0gICAgICAgIEZsb2F0UmVjdCByZWN0OwotICAgICAg
ICBpZiAoIXBhcnNlUmVjdChzdHJpbmcsIHJlY3QpKQotICAgICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKLSAgICAgICAgcmV0dXJuIHJlY3Q7CisgICAgICAgIHJldHVybiBwYXJzZVJlY3Qo
c3RyaW5nKTsKICAgICB9CiAgICAgc3RhdGljIFN0cmluZyB0b1N0cmluZyhjb25zdCBGbG9hdFJl
Y3QmIHR5cGUpCiAgICAgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>402371</attachid>
            <date>2020-06-19 19:38:36 -0700</date>
            <delta_ts>2020-06-19 20:13:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213416-20200619193835.patch</filename>
            <type>text/plain</type>
            <size>144284</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MzI5NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3MSBAQAorMjAyMC0wNi0xOSAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQ29udmVydCBtdWNoIG9mIHRoZSBT
Vkcgc3RyaW5nIHBhcnNpbmcgY29kZSB0byB1c2UgT3B0aW9uYWwgYmFzZWQgcmV0dXJuIHZhbHVl
cyByYXRoZXIgdGhhbiBvdXQtcGFyYW1ldGVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEzNDE2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgV0lQCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogc3ZnL1NWR0FuZ2xlVmFsdWUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6cGFyc2VBbmdsZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5nbGVW
YWx1ZTo6c2V0VmFsdWVBc1N0cmluZyk6CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVNb3Rpb25F
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVNb3Rpb25FbGVtZW50Ojpj
YWxjdWxhdGVUb0F0RW5kT2ZEdXJhdGlvblZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0Fu
aW1hdGVNb3Rpb25FbGVtZW50OjpjYWxjdWxhdGVGcm9tQW5kVG9WYWx1ZXMpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OmNhbGN1bGF0ZUZyb21BbmRCeVZhbHVl
cyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6Y2FsY3VsYXRl
RGlzdGFuY2UpOgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OnBhcnNlS2V5U3BsaW5lcyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmlt
YXRpb25FbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisgICAgICAgICogc3ZnL1NWR0ZFQ29udm9s
dmVNYXRyaXhFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFQ29udm9sdmVNYXRy
aXhFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisgICAgICAgICogc3ZnL1NWR0ZFRGlmZnVzZUxp
Z2h0aW5nRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURpZmZ1c2VMaWdodGlu
Z0VsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKiBzdmcvU1ZHRkVEcm9wU2hhZG93
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURyb3BTaGFkb3dFbGVtZW50Ojpw
YXJzZUF0dHJpYnV0ZSk6CisgICAgICAgICogc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OnBhcnNlQXR0
cmlidXRlKToKKyAgICAgICAgKiBzdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRkVJbWFnZUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKiBz
dmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRU1v
cnBob2xvZ3lFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisgICAgICAgICogc3ZnL1NWR0ZFU3Bl
Y3VsYXJMaWdodGluZ0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVTcGVjdWxh
ckxpZ2h0aW5nRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAgICAgICAqIHN2Zy9TVkdGRVR1
cmJ1bGVuY2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFVHVyYnVsZW5jZUVs
ZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKiBzdmcvU1ZHRml0VG9WaWV3Qm94LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpdFRvVmlld0JveDo6cGFyc2VBdHRyaWJ1dGUpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRml0VG9WaWV3Qm94OjpwYXJzZVZpZXdCb3gpOgorICAgICAg
ICAqIHN2Zy9TVkdGaXRUb1ZpZXdCb3guaDoKKyAgICAgICAgKiBzdmcvU1ZHR2x5cGhSZWZFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlRmxvYXQpOgorICAgICAgICAqIHN2Zy9T
VkdIS2VybkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSEtlcm5FbGVtZW50Ojpi
dWlsZEhvcml6b250YWxLZXJuaW5nUGFpciBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0hLZXJu
RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdJbWFnZUVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHSW1hZ2VFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisgICAgICAgICogc3Zn
L1NWR0xlbmd0aFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0xlbmd0aFZhbHVlOjpz
ZXRWYWx1ZUFzU3RyaW5nKToKKyAgICAgICAgKiBzdmcvU1ZHTnVtYmVyTGlzdC5oOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHTnVtYmVyTGlzdDo6cGFyc2UpOgorICAgICAgICAqIHN2Zy9TVkdQYXJz
ZXJVdGlsaXRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2VuZXJpY1BhcnNlTnVtYmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OnBhcnNlTnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OmdlbmVy
aWNQYXJzZUFyY0ZsYWcpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VBcmNGbGFnKToKKyAgICAg
ICAgKFdlYkNvcmU6OnBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6cGFyc2VQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVJlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6cGFyc2VHbHlwaE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VVbmljb2Rl
UmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VLZXJuaW5nVW5pY29kZVN0cmluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpnZW5lcmljUGFyc2VGbG9hdFBvaW50KToKKyAgICAgICAgKFdlYkNv
cmU6OnBhcnNlRmxvYXRQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVNWR051bWJlcik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpwYXJzZU51bWJlckZyb21TdHJpbmcpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VEZWxpbWl0ZWRTdHJpbmcpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6cGFyc2VGbG9hdFBvaW50Mik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpwYXJzZUZsb2F0UG9pbnQzKTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHUGFy
c2VyVXRpbGl0aWVzLmg6CisgICAgICAgIChXZWJDb3JlOjppc1NWR1NwYWNlKToKKyAgICAgICAg
KFdlYkNvcmU6OnNraXBPcHRpb25hbFNWR1NwYWNlcyk6CisgICAgICAgIChXZWJDb3JlOjpza2lw
T3B0aW9uYWxTVkdTcGFjZXNPckRlbGltaXRlcik6CisgICAgICAgICogc3ZnL1NWR1BhdGhCbGVu
ZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnB1bGxGcm9tU291cmNlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdQYXRoQmxlbmRlcjo6YmxlbmRNb3ZlVG9TZWdtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1BhdGhCbGVuZGVyOjpibGVuZExpbmVUb1NlZ21lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHUGF0aEJsZW5kZXI6OmJsZW5kTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJsZW5kZXI6OmJsZW5kTGluZVRvVmVydGljYWxTZWdtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCbGVuZGVyOjpibGVuZEN1cnZlVG9DdWJpY1Nl
Z21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJsZW5kZXI6OmJsZW5kQ3VydmVUb0N1
YmljU21vb3RoU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQmxlbmRlcjo6Ymxl
bmRDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQmxl
bmRlcjo6YmxlbmRDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdQYXRoQmxlbmRlcjo6YmxlbmRBcmNUb1NlZ21lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHUGF0aEJsZW5kZXI6OmNhbkJsZW5kUGF0aHMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
UGF0aEJsZW5kZXI6OmJsZW5kQW5pbWF0ZWRQYXRoKToKKyAgICAgICAgKiBzdmcvU1ZHUGF0aEJ5
dGVTdHJlYW1Tb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW1T
b3VyY2U6Om5leHRDb21tYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFt
U291cmNlOjpwYXJzZVNWR1NlZ21lbnRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhC
eXRlU3RyZWFtU291cmNlOjpwYXJzZU1vdmVUb1NlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlTGluZVRvU2VnbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VMaW5lVG9Ib3Jpem9udGFsU2Vn
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VM
aW5lVG9WZXJ0aWNhbFNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJl
YW1Tb3VyY2U6OnBhcnNlQ3VydmVUb0N1YmljU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZUN1cnZlVG9R
dWFkcmF0aWNTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFtU291
cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZUFyY1RvU2VnbWVudCk6CisgICAgICAg
ICogc3ZnL1NWR1BhdGhCeXRlU3RyZWFtU291cmNlLmg6CisgICAgICAgICogc3ZnL1NWR1BhdGhQ
YXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFBhcnNlcjo6cGFyc2VNb3ZlVG9T
ZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhQYXJzZXI6OnBhcnNlTGluZVRvU2Vn
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoUGFyc2VyOjpwYXJzZUxpbmVUb0hvcml6
b250YWxTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhQYXJzZXI6OnBhcnNlTGlu
ZVRvVmVydGljYWxTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhQYXJzZXI6OnBh
cnNlQ3VydmVUb0N1YmljU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoUGFyc2Vy
OjpwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
UGF0aFBhcnNlcjo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdQYXRoUGFyc2VyOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhQYXJzZXI6OnBhcnNlQXJjVG9TZWdtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1BhdGhQYXJzZXI6OnBhcnNlUGF0aERhdGEpOgorICAgICAgICAq
IHN2Zy9TVkdQYXRoUGFyc2VyLmg6CisgICAgICAgICogc3ZnL1NWR1BhdGhTZWdMaXN0U291cmNl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdMaXN0U291cmNlOjpuZXh0Q29tbWFu
ZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VTVkdTZWdt
ZW50VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VN
b3ZlVG9TZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdMaXN0U291cmNlOjpw
YXJzZUxpbmVUb1NlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0xpc3RTb3Vy
Y2U6OnBhcnNlTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
UGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNlTGluZVRvVmVydGljYWxTZWdtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNlQ3VydmVUb0N1
YmljU21vb3RoU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnTGlzdFNvdXJj
ZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQ
YXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VBcmNUb1NlZ21lbnQp
OgorICAgICAgICAqIHN2Zy9TVkdQYXRoU2VnTGlzdFNvdXJjZS5oOgorICAgICAgICAqIHN2Zy9T
VkdQYXRoU291cmNlLmg6CisgICAgICAgICogc3ZnL1NWR1BhdGhTdHJpbmdTb3VyY2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6bmV4dENvbW1hbmRIZWxwZXIpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUGF0aFN0cmluZ1NvdXJjZTo6bmV4dENvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6cGFy
c2VTVkdTZWdtZW50VHlwZUhlbHBlcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU3RyaW5n
U291cmNlOjpwYXJzZVNWR1NlZ21lbnRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhT
dHJpbmdTb3VyY2U6OnBhcnNlTW92ZVRvU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQ
YXRoU3RyaW5nU291cmNlOjpwYXJzZUxpbmVUb1NlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUxpbmVUb1ZlcnRpY2FsU2Vn
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUN1cnZl
VG9DdWJpY1NlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZTo6
cGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Bh
dGhTdHJpbmdTb3VyY2U6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3Ro
U2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUFy
Y1RvU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUFyY1RvU2VnbWVudEhlbHBlcik6
IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR1BhdGhTdHJpbmdTb3VyY2UuaDoKKyAgICAgICAg
KiBzdmcvU1ZHUG9pbnRMaXN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdQb2ludExpc3Q6OnBh
cnNlKToKKyAgICAgICAgKiBzdmcvU1ZHVG9PVEZGb250Q29udmVyc2lvbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFkZEtlcm5pbmdQYWlyIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kS0VSTlN1YnRh
YmxlKToKKyAgICAgICAgKiBzdmcvU1ZHVHJhbnNmb3JtTGlzdC5oOgorICAgICAgICAqIHN2Zy9T
VkdUcmFuc2Zvcm1hYmxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlVHJhbnNmb3JtUGFy
YW1MaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNm
b3JtVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VBbmRT
a2lwVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZVRyYW5z
Zm9ybVR5cGUpOgorICAgICAgICAqIHN2Zy9TVkdUcmFuc2Zvcm1hYmxlLmg6CisgICAgICAgICog
c3ZnL1NWR1ZLZXJuRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdWS2VybkVsZW1l
bnQ6OmJ1aWxkVmVydGljYWxLZXJuaW5nUGFpciBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR1ZL
ZXJuRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdWaWV3U3BlYy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdWaWV3U3BlYzo6cGFyc2VWaWV3U3BlYyk6CisgICAgICAgICogc3ZnL3Byb3Bl
cnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oOgorICAgICAgICAq
IHN2Zy9wcm9wZXJ0aWVzL1NWR1Byb3BlcnR5VHJhaXRzLmg6CisgICAgICAgIChXZWJDb3JlOjpT
VkdQcm9wZXJ0eVRyYWl0czxmbG9hdD46OmZyb21TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUHJvcGVydHlUcmFpdHM8ZmxvYXQ+OjpwYXJzZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQ
cm9wZXJ0eVRyYWl0czxGbG9hdFBvaW50Pjo6ZnJvbVN0cmluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdQcm9wZXJ0eVRyYWl0czxGbG9hdFBvaW50Pjo6cGFyc2UpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHUHJvcGVydHlUcmFpdHM8RmxvYXRSZWN0Pjo6ZnJvbVN0cmluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxGbG9hdFJlY3Q+OjpwYXJzZSk6CisKIDIwMjAtMDYt
MTkgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBBdm9pZCBpbml0
aWFsaXppbmcgUmVuZGVyVGhlbWUgc2luZ2xldG9uIHVubmVjZXNzYXJpbHkgaW4gdGhlIFVJUHJv
Y2VzcwpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMDA4Myw2ICsxMDA4
Myw3IEBACiAJCTdDODNERTg1MUQwNENCRDQwMEZFQkNGMyAvKiBTcHJpbmdTb2x2ZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3ByaW5nU29sdmVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTdDODVCMjAxMjJGQjA0ODUwMDMwNjg0RiAvKiBXSExTTFVubmFt
ZWRUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMVW5uYW1lZFR5cGUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Qzg1QjIwNDIyRkIwNjMyMDAzMDY4NEYgLyogV0hM
U0xVbm5hbWVkVHlwZUhhc2guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xVbm5hbWVkVHlwZUhhc2gu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0M4ODI0QzQyNDlEN0IwNTAwRUQ4RkM0
IC8qIFNWR1BhdGhTZWdWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
VkdQYXRoU2VnVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0M4RTM0OTIx
RTRBMzM4RTAwNTRDRTIzIC8qIEpTRE9NQ29udmVydEFueS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU0RPTUNvbnZlcnRBbnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJN0M4RTM0OTMxRTRBMzM4RTAwNTRDRTIzIC8qIEpTRE9NQ29udmVydEJhc2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNET01Db252ZXJ0QmFzZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3QzhFMzQ5NDFFNEEzMzhFMDA1NENFMjMgLyogSlNET01D
b252ZXJ0Qm9vbGVhbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0RPTUNv
bnZlcnRCb29sZWFuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNTE4Niw2ICsy
NTE4Nyw3IEBACiAJCQkJODRCNkI5NzYxMjBGMTNFNTAwQjhFRkFGIC8qIFNWR1BhdGhTZWdMaXN0
U291cmNlLmggKi8sCiAJCQkJQjIyMjc4RUYwRDAwQkYyMTAwNzFCNzgyIC8qIFNWR1BhdGhTZWdN
b3ZldG9BYnMuaWRsICovLAogCQkJCUIyMjI3OEYwMEQwMEJGMjEwMDcxQjc4MiAvKiBTVkdQYXRo
U2VnTW92ZXRvUmVsLmlkbCAqLywKKwkJCQk3Qzg4MjRDNDI0OUQ3QjA1MDBFRDhGQzQgLyogU1ZH
UGF0aFNlZ1ZhbHVlLmggKi8sCiAJCQkJODQzMDBCRDcxMjBDOUFENDAwMjE5NTRBIC8qIFNWR1Bh
dGhTb3VyY2UuaCAqLywKIAkJCQk4NDE5RDJCNzEyMEUwQzc2MDAxNDFGOEYgLyogU1ZHUGF0aFN0
cmluZ0J1aWxkZXIuY3BwICovLAogCQkJCTg0MTlEMkI4MTIwRTBDNzYwMDE0MUY4RiAvKiBTVkdQ
YXRoU3RyaW5nQnVpbGRlci5oICovLApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuZ2xl
VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmdsZVZhbHVl
LmNwcAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuZ2xlVmFs
dWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3IEBAIFN0cmluZyBTVkdBbmdsZVZh
bHVlOjp2YWx1ZUFzU3RyaW5nKCkgY28KICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgU1ZHQW5nbGVWYWx1ZTo6VHlwZSBwYXJzZUFuZ2xlVHlwZShjb25zdCBVQ2hhciog
cHRyLCBjb25zdCBVQ2hhciogZW5kKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4g
c3RhdGljIGlubGluZSBTVkdBbmdsZVZhbHVlOjpUeXBlIHBhcnNlQW5nbGVUeXBlKGNvbnN0IENo
YXJhY3RlclR5cGUqIHB0ciwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kKQogewogICAgIHN3aXRj
aCAoZW5kIC0gcHRyKSB7CiAgICAgY2FzZSAwOgpAQCAtMTA2LDIxICsxMDYsMjkgQEAgRXhjZXB0
aW9uT3I8dm9pZD4gU1ZHQW5nbGVWYWx1ZTo6c2V0VmFsdQogICAgICAgICByZXR1cm4geyB9Owog
ICAgIH0KIAotICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyh2YWx1
ZSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIqIHB0ciA9IHVwY29u
dmVydGVkQ2hhcmFjdGVyczsKLSAgICBjb25zdCBVQ2hhciogZW5kID0gcHRyICsgdmFsdWUubGVu
Z3RoKCk7Ci0KLSAgICBmbG9hdCB2YWx1ZUluU3BlY2lmaWVkVW5pdHMgPSAwOwotICAgIGlmICgh
cGFyc2VOdW1iZXIocHRyLCBlbmQsIHZhbHVlSW5TcGVjaWZpZWRVbml0cywgZmFsc2UpKQotICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKLQotICAgIGF1dG8gdW5pdFR5
cGUgPSBwYXJzZUFuZ2xlVHlwZShwdHIsIGVuZCk7Ci0gICAgaWYgKHVuaXRUeXBlID09IFNWR19B
TkdMRVRZUEVfVU5LTk9XTikKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9y
IH07CisgICAgYXV0byBoZWxwZXIgPSBbJl0oY29uc3QgYXV0byogcHRyLCBjb25zdCBhdXRvKiBl
bmQpIC0+IEV4Y2VwdGlvbk9yPHZvaWQ+IHsKKyAgICAgICAgYXV0byB2YWx1ZUluU3BlY2lmaWVk
VW5pdHMgPSBwYXJzZU51bWJlcihwdHIsIGVuZCwgU3VmZml4U2tpcHBpbmdQb2xpY3k6OkRvbnRT
a2lwKTsKKyAgICAgICAgaWYgKCF2YWx1ZUluU3BlY2lmaWVkVW5pdHMpCisgICAgICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKKworICAgICAgICBhdXRvIHVuaXRUeXBl
ID0gcGFyc2VBbmdsZVR5cGUocHRyLCBlbmQpOworICAgICAgICBpZiAodW5pdFR5cGUgPT0gU1ZH
QW5nbGVWYWx1ZTo6U1ZHX0FOR0xFVFlQRV9VTktOT1dOKQorICAgICAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiAKLSAgICBtX3VuaXRUeXBlID0gdW5pdFR5cGU7Ci0g
ICAgbV92YWx1ZUluU3BlY2lmaWVkVW5pdHMgPSB2YWx1ZUluU3BlY2lmaWVkVW5pdHM7Ci0gICAg
cmV0dXJuIHsgfTsKKyAgICAgICAgbV91bml0VHlwZSA9IHVuaXRUeXBlOworICAgICAgICBtX3Zh
bHVlSW5TcGVjaWZpZWRVbml0cyA9ICp2YWx1ZUluU3BlY2lmaWVkVW5pdHM7CisgICAgICAgIHJl
dHVybiB7IH07CisgICAgfTsKKworICAgIGlmICh2YWx1ZS5pczhCaXQoKSkgeworICAgICAgICBj
b25zdCBhdXRvKiBwdHIgPSB2YWx1ZS5jaGFyYWN0ZXJzOCgpOworICAgICAgICBjb25zdCBhdXRv
KiBlbmQgPSBwdHIgKyB2YWx1ZS5sZW5ndGgoKTsKKyAgICAgICAgcmV0dXJuIGhlbHBlcihwdHIs
IGVuZCk7CisgICAgfQorCisgICAgY29uc3QgYXV0byogcHRyID0gdmFsdWUuY2hhcmFjdGVyczE2
KCk7CisgICAgY29uc3QgYXV0byogZW5kID0gcHRyICsgdmFsdWUubGVuZ3RoKCk7CisgICAgcmV0
dXJuIGhlbHBlcihwdHIsIGVuZCk7CiB9CiAKIEV4Y2VwdGlvbk9yPHZvaWQ+IFNWR0FuZ2xlVmFs
dWU6Om5ld1ZhbHVlU3BlY2lmaWVkVW5pdHModW5zaWduZWQgc2hvcnQgdW5pdFR5cGUsIGZsb2F0
IHZhbHVlSW5TcGVjaWZpZWRVbml0cykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmlt
YXRlTW90aW9uRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTYxLDcgKzE2MSw3IEBAIHZvaWQgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OnN0b3BBbmltYXQK
IAogYm9vbCBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6Y2FsY3VsYXRlVG9BdEVuZE9mRHVyYXRp
b25WYWx1ZShjb25zdCBTdHJpbmcmIHRvQXRFbmRPZkR1cmF0aW9uU3RyaW5nKQogewotICAgIHBh
cnNlUG9pbnQodG9BdEVuZE9mRHVyYXRpb25TdHJpbmcsIG1fdG9Qb2ludEF0RW5kT2ZEdXJhdGlv
bik7CisgICAgbV90b1BvaW50QXRFbmRPZkR1cmF0aW9uID0gcGFyc2VQb2ludCh0b0F0RW5kT2ZE
dXJhdGlvblN0cmluZykudmFsdWVPcihGbG9hdFBvaW50IHsgfSk7CiAgICAgbV9oYXNUb1BvaW50
QXRFbmRPZkR1cmF0aW9uID0gdHJ1ZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTE2OSw4ICsx
NjksOCBAQCBib29sIFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OjpjYWxjdWxhdGVUCiBib29sIFNW
R0FuaW1hdGVNb3Rpb25FbGVtZW50OjpjYWxjdWxhdGVGcm9tQW5kVG9WYWx1ZXMoY29uc3QgU3Ry
aW5nJiBmcm9tU3RyaW5nLCBjb25zdCBTdHJpbmcmIHRvU3RyaW5nKQogewogICAgIG1faGFzVG9Q
b2ludEF0RW5kT2ZEdXJhdGlvbiA9IGZhbHNlOwotICAgIHBhcnNlUG9pbnQoZnJvbVN0cmluZywg
bV9mcm9tUG9pbnQpOwotICAgIHBhcnNlUG9pbnQodG9TdHJpbmcsIG1fdG9Qb2ludCk7CisgICAg
bV9mcm9tUG9pbnQgPSBwYXJzZVBvaW50KGZyb21TdHJpbmcpLnZhbHVlT3IoRmxvYXRQb2ludCB7
IH0pOworICAgIG1fdG9Qb2ludCA9IHBhcnNlUG9pbnQodG9TdHJpbmcpLnZhbHVlT3IoRmxvYXRQ
b2ludCB7IH0pOwogICAgIHJldHVybiB0cnVlOwogfQogICAgIApAQCAtMTc5LDkgKzE3OSw4IEBA
IGJvb2wgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OmNhbGN1bGF0ZUYKICAgICBtX2hhc1RvUG9p
bnRBdEVuZE9mRHVyYXRpb24gPSBmYWxzZTsKICAgICBpZiAoYW5pbWF0aW9uTW9kZSgpID09IEFu
aW1hdGlvbk1vZGU6OkJ5ICYmICFpc0FkZGl0aXZlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBwYXJzZVBvaW50KGZyb21TdHJpbmcsIG1fZnJvbVBvaW50KTsKLSAgICBGbG9hdFBvaW50
IGJ5UG9pbnQ7Ci0gICAgcGFyc2VQb2ludChieVN0cmluZywgYnlQb2ludCk7CisgICAgbV9mcm9t
UG9pbnQgPSBwYXJzZVBvaW50KGZyb21TdHJpbmcpLnZhbHVlT3IoRmxvYXRQb2ludCB7IH0pOwor
ICAgIGF1dG8gYnlQb2ludCA9IHBhcnNlUG9pbnQoYnlTdHJpbmcpLnZhbHVlT3IoRmxvYXRQb2lu
dCB7IH0pOwogICAgIG1fdG9Qb2ludCA9IEZsb2F0UG9pbnQobV9mcm9tUG9pbnQueCgpICsgYnlQ
b2ludC54KCksIG1fZnJvbVBvaW50LnkoKSArIGJ5UG9pbnQueSgpKTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KQEAgLTI3NSwxMyArMjc0LDEzIEBAIHZvaWQgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6
OmFwcGx5UmVzdWwKIAogT3B0aW9uYWw8ZmxvYXQ+IFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50Ojpj
YWxjdWxhdGVEaXN0YW5jZShjb25zdCBTdHJpbmcmIGZyb21TdHJpbmcsIGNvbnN0IFN0cmluZyYg
dG9TdHJpbmcpCiB7Ci0gICAgRmxvYXRQb2ludCBmcm9tOwotICAgIEZsb2F0UG9pbnQgdG87Ci0g
ICAgaWYgKCFwYXJzZVBvaW50KGZyb21TdHJpbmcsIGZyb20pKQorICAgIGF1dG8gZnJvbSA9IHBh
cnNlUG9pbnQoZnJvbVN0cmluZyk7CisgICAgaWYgKCFmcm9tKQogICAgICAgICByZXR1cm4geyB9
OwotICAgIGlmICghcGFyc2VQb2ludCh0b1N0cmluZywgdG8pKQorICAgIGF1dG8gdG8gPSBwYXJz
ZVBvaW50KHRvU3RyaW5nKTsKKyAgICBpZiAoIXRvKQogICAgICAgICByZXR1cm4geyB9OwotICAg
IEZsb2F0U2l6ZSBkaWZmID0gdG8gLSBmcm9tOworICAgIGF1dG8gZGlmZiA9ICp0byAtICpmcm9t
OwogICAgIHJldHVybiBzdGQ6Omh5cG90KGRpZmYud2lkdGgoKSwgZGlmZi5oZWlnaHQoKSk7CiB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDI2MzE3NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsMTEgKzc3LDEwIEBAIGZhaWw6CiAgICAgcmVzdWx0
LmNsZWFyKCk7CiB9CiAKLXN0YXRpYyB2b2lkIHBhcnNlS2V5U3BsaW5lcyhjb25zdCBTdHJpbmcm
IHBhcnNlLCBWZWN0b3I8VW5pdEJlemllcj4mIHJlc3VsdCkKK3N0YXRpYyBPcHRpb25hbDxWZWN0
b3I8VW5pdEJlemllcj4+IHBhcnNlS2V5U3BsaW5lcyhjb25zdCBTdHJpbmcmIHBhcnNlKQogewot
ICAgIHJlc3VsdC5jbGVhcigpOwogICAgIGlmIChwYXJzZS5pc0VtcHR5KCkpCi0gICAgICAgIHJl
dHVybjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIGF1dG8gdXBjb252ZXJ0
ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyhwYXJzZSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7
CiAgICAgY29uc3QgVUNoYXIqIGN1ciA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKQEAgLTg5LDMy
ICs4OCwyNiBAQCBzdGF0aWMgdm9pZCBwYXJzZUtleVNwbGluZXMoY29uc3QgU3RyaW5nCiAKICAg
ICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoY3VyLCBlbmQpOwogCisgICAgVmVjdG9yPFVuaXRCZXpp
ZXI+IHJlc3VsdDsKKwogICAgIGJvb2wgZGVsaW1QYXJzZWQgPSBmYWxzZTsKICAgICB3aGlsZSAo
Y3VyIDwgZW5kKSB7CiAgICAgICAgIGRlbGltUGFyc2VkID0gZmFsc2U7Ci0gICAgICAgIGZsb2F0
IHBvc0EgPSAwOwotICAgICAgICBpZiAoIXBhcnNlTnVtYmVyKGN1ciwgZW5kLCBwb3NBKSkgewot
ICAgICAgICAgICAgcmVzdWx0LmNsZWFyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLQotICAgICAgICBmbG9hdCBwb3NCID0gMDsKLSAgICAgICAgaWYgKCFwYXJzZU51bWJlcihj
dXIsIGVuZCwgcG9zQikpIHsKLSAgICAgICAgICAgIHJlc3VsdC5jbGVhcigpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZmxvYXQgcG9zQyA9IDA7Ci0gICAgICAg
IGlmICghcGFyc2VOdW1iZXIoY3VyLCBlbmQsIHBvc0MpKSB7Ci0gICAgICAgICAgICByZXN1bHQu
Y2xlYXIoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGZsb2F0
IHBvc0QgPSAwOwotICAgICAgICBpZiAoIXBhcnNlTnVtYmVyKGN1ciwgZW5kLCBwb3NELCBmYWxz
ZSkpIHsKLSAgICAgICAgICAgIHJlc3VsdC5jbGVhcigpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9CisgICAgICAgIGF1dG8gcG9zQSA9IHBhcnNlTnVtYmVyKGN1ciwgZW5kKTsKKyAg
ICAgICAgaWYgKCFwb3NBKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAg
ICAgICBhdXRvIHBvc0IgPSBwYXJzZU51bWJlcihjdXIsIGVuZCk7CisgICAgICAgIGlmICghcG9z
QikKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICAgICAgYXV0byBwb3ND
ID0gcGFyc2VOdW1iZXIoY3VyLCBlbmQpOworICAgICAgICBpZiAoIXBvc0MpCisgICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgICAgIGF1dG8gcG9zRCA9IHBhcnNlTnVtYmVy
KGN1ciwgZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNraXApOworICAgICAgICBpZiAo
IXBvc0QpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgICAgIHNraXBP
cHRpb25hbFNWR1NwYWNlcyhjdXIsIGVuZCk7CiAKQEAgLTEyMiwxMiArMTE1LDE2IEBAIHN0YXRp
YyB2b2lkIHBhcnNlS2V5U3BsaW5lcyhjb25zdCBTdHJpbmcKICAgICAgICAgICAgIGRlbGltUGFy
c2VkID0gdHJ1ZTsKICAgICAgICAgICAgIGN1cisrOwogICAgICAgICB9CisKICAgICAgICAgc2tp
cE9wdGlvbmFsU1ZHU3BhY2VzKGN1ciwgZW5kKTsKIAotICAgICAgICByZXN1bHQuYXBwZW5kKFVu
aXRCZXppZXIocG9zQSwgcG9zQiwgcG9zQywgcG9zRCkpOworICAgICAgICByZXN1bHQuYXBwZW5k
KFVuaXRCZXppZXIgeyAqcG9zQSwgKnBvc0IsICpwb3NDLCAqcG9zRCB9KTsKICAgICB9CisKICAg
ICBpZiAoIShjdXIgPT0gZW5kICYmICFkZWxpbVBhcnNlZCkpCi0gICAgICAgIHJlc3VsdC5jbGVh
cigpOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAogYm9vbCBTVkdBbmltYXRpb25FbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25z
dCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKQEAgLTE4MCw3ICsxNzcsOCBAQCB2b2lkIFNWR0Fu
aW1hdGlvbkVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlCiAgICAgfQogCiAgICAgaWYgKG5hbWUgPT0g
U1ZHTmFtZXM6OmtleVNwbGluZXNBdHRyKSB7Ci0gICAgICAgIHBhcnNlS2V5U3BsaW5lcyh2YWx1
ZSwgbV9rZXlTcGxpbmVzKTsKKyAgICAgICAgaWYgKGF1dG8ga2V5U3BsaW5lcyA9IHBhcnNlS2V5
U3BsaW5lcyh2YWx1ZSkpCisgICAgICAgICAgICBtX2tleVNwbGluZXMgPSBXVEZNb3ZlKCprZXlT
cGxpbmVzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuY3BwCShyZXZpc2lvbiAyNjMx
NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02NywxMCArNjcsMTAgQEAgdm9pZCBTVkdGRUNvbnZvbHZlTWF0
cml4RWxlbWVudDo6cGFyc2VBdAogICAgIH0KIAogICAgIGlmIChuYW1lID09IFNWR05hbWVzOjpv
cmRlckF0dHIpIHsKLSAgICAgICAgZmxvYXQgeCwgeTsKLSAgICAgICAgaWYgKHBhcnNlTnVtYmVy
T3B0aW9uYWxOdW1iZXIodmFsdWUsIHgsIHkpICYmIHggPj0gMSAmJiB5ID49IDEpIHsKLSAgICAg
ICAgICAgIG1fb3JkZXJYLT5zZXRCYXNlVmFsSW50ZXJuYWwoeCk7Ci0gICAgICAgICAgICBtX29y
ZGVyWS0+c2V0QmFzZVZhbEludGVybmFsKHkpOworICAgICAgICBhdXRvIHJlc3VsdCA9IHBhcnNl
TnVtYmVyT3B0aW9uYWxOdW1iZXIodmFsdWUpOworICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3Vs
dC0+Zmlyc3QgPj0gMSAmJiByZXN1bHQtPnNlY29uZCA+PSAxKSB7CisgICAgICAgICAgICBtX29y
ZGVyWC0+c2V0QmFzZVZhbEludGVybmFsKHJlc3VsdC0+Zmlyc3QpOworICAgICAgICAgICAgbV9v
cmRlclktPnNldEJhc2VWYWxJbnRlcm5hbChyZXN1bHQtPnNlY29uZCk7CiAgICAgICAgIH0gZWxz
ZQogICAgICAgICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVwb3J0V2Fy
bmluZygiZmVDb252b2x2ZU1hdHJpeDogcHJvYmxlbSBwYXJzaW5nIG9yZGVyPVwiIiArIHZhbHVl
ICsgIlwiLiBGaWx0ZXJlZCBlbGVtZW50IHdpbGwgbm90IGJlIGRpc3BsYXllZC4iKTsKICAgICAg
ICAgcmV0dXJuOwpAQCAtMTE1LDEwICsxMTUsMTAgQEAgdm9pZCBTVkdGRUNvbnZvbHZlTWF0cml4
RWxlbWVudDo6cGFyc2VBdAogICAgIH0KIAogICAgIGlmIChuYW1lID09IFNWR05hbWVzOjprZXJu
ZWxVbml0TGVuZ3RoQXR0cikgewotICAgICAgICBmbG9hdCB4LCB5OwotICAgICAgICBpZiAocGFy
c2VOdW1iZXJPcHRpb25hbE51bWJlcih2YWx1ZSwgeCwgeSkgJiYgeCA+IDAgJiYgeSA+IDApIHsK
LSAgICAgICAgICAgIG1fa2VybmVsVW5pdExlbmd0aFgtPnNldEJhc2VWYWxJbnRlcm5hbCh4KTsK
LSAgICAgICAgICAgIG1fa2VybmVsVW5pdExlbmd0aFktPnNldEJhc2VWYWxJbnRlcm5hbCh5KTsK
KyAgICAgICAgYXV0byByZXN1bHQgPSBwYXJzZU51bWJlck9wdGlvbmFsTnVtYmVyKHZhbHVlKTsK
KyAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQtPmZpcnN0ID4gMCAmJiByZXN1bHQtPnNlY29u
ZCA+IDApIHsKKyAgICAgICAgICAgIG1fa2VybmVsVW5pdExlbmd0aFgtPnNldEJhc2VWYWxJbnRl
cm5hbChyZXN1bHQtPmZpcnN0KTsKKyAgICAgICAgICAgIG1fa2VybmVsVW5pdExlbmd0aFktPnNl
dEJhc2VWYWxJbnRlcm5hbChyZXN1bHQtPnNlY29uZCk7CiAgICAgICAgIH0gZWxzZQogICAgICAg
ICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVwb3J0V2FybmluZygiZmVD
b252b2x2ZU1hdHJpeDogcHJvYmxlbSBwYXJzaW5nIGtlcm5lbFVuaXRMZW5ndGg9XCIiICsgdmFs
dWUgKyAiXCIuIEZpbHRlcmVkIGVsZW1lbnQgd2lsbCBub3QgYmUgZGlzcGxheWVkLiIpOwogICAg
ICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRp
bmdFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZm
dXNlTGlnaHRpbmdFbGVtZW50LmNwcAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTcxLDEwICs3MSw5IEBAIHZvaWQgU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjpwYXJzZUEK
ICAgICB9CiAKICAgICBpZiAobmFtZSA9PSBTVkdOYW1lczo6a2VybmVsVW5pdExlbmd0aEF0dHIp
IHsKLSAgICAgICAgZmxvYXQgeCwgeTsKLSAgICAgICAgaWYgKHBhcnNlTnVtYmVyT3B0aW9uYWxO
dW1iZXIodmFsdWUsIHgsIHkpKSB7Ci0gICAgICAgICAgICBtX2tlcm5lbFVuaXRMZW5ndGhYLT5z
ZXRCYXNlVmFsSW50ZXJuYWwoeCk7Ci0gICAgICAgICAgICBtX2tlcm5lbFVuaXRMZW5ndGhZLT5z
ZXRCYXNlVmFsSW50ZXJuYWwoeSk7CisgICAgICAgIGlmIChhdXRvIHJlc3VsdCA9IHBhcnNlTnVt
YmVyT3B0aW9uYWxOdW1iZXIodmFsdWUpKSB7CisgICAgICAgICAgICBtX2tlcm5lbFVuaXRMZW5n
dGhYLT5zZXRCYXNlVmFsSW50ZXJuYWwocmVzdWx0LT5maXJzdCk7CisgICAgICAgICAgICBtX2tl
cm5lbFVuaXRMZW5ndGhZLT5zZXRCYXNlVmFsSW50ZXJuYWwocmVzdWx0LT5zZWNvbmQpOwogICAg
ICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVEcm9wU2hhZG93RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuY3BwCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTYxLDEwICs2MSw5IEBAIHZvaWQgU1ZHRkVEcm9wU2hhZG93RWxlbWVudDo6c2V0U3RkRGV2
aWEKIHZvaWQgU1ZHRkVEcm9wU2hhZG93RWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVh
bGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbVN0cmluZyYgdmFsdWUpCiB7CiAgICAgaWYgKG5h
bWUgPT0gU1ZHTmFtZXM6OnN0ZERldmlhdGlvbkF0dHIpIHsKLSAgICAgICAgZmxvYXQgeCwgeTsK
LSAgICAgICAgaWYgKHBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIodmFsdWUsIHgsIHkpKSB7Ci0g
ICAgICAgICAgICBtX3N0ZERldmlhdGlvblgtPnNldEJhc2VWYWxJbnRlcm5hbCh4KTsKLSAgICAg
ICAgICAgIG1fc3RkRGV2aWF0aW9uWS0+c2V0QmFzZVZhbEludGVybmFsKHkpOworICAgICAgICBp
ZiAoYXV0byByZXN1bHQgPSBwYXJzZU51bWJlck9wdGlvbmFsTnVtYmVyKHZhbHVlKSkgeworICAg
ICAgICAgICAgbV9zdGREZXZpYXRpb25YLT5zZXRCYXNlVmFsSW50ZXJuYWwocmVzdWx0LT5maXJz
dCk7CisgICAgICAgICAgICBtX3N0ZERldmlhdGlvblktPnNldEJhc2VWYWxJbnRlcm5hbChyZXN1
bHQtPnNlY29uZCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwCShyZXZp
c2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsMTAgKzYwLDkgQEAgdm9pZCBTVkdGRUdhdXNz
aWFuQmx1ckVsZW1lbnQ6OnNldFN0ZERldgogdm9pZCBTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6
OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21TdHJp
bmcmIHZhbHVlKQogewogICAgIGlmIChuYW1lID09IFNWR05hbWVzOjpzdGREZXZpYXRpb25BdHRy
KSB7Ci0gICAgICAgIGZsb2F0IHgsIHk7Ci0gICAgICAgIGlmIChwYXJzZU51bWJlck9wdGlvbmFs
TnVtYmVyKHZhbHVlLCB4LCB5KSkgewotICAgICAgICAgICAgbV9zdGREZXZpYXRpb25YLT5zZXRC
YXNlVmFsSW50ZXJuYWwoeCk7Ci0gICAgICAgICAgICBtX3N0ZERldmlhdGlvblktPnNldEJhc2VW
YWxJbnRlcm5hbCh5KTsKKyAgICAgICAgaWYgKGF1dG8gcmVzdWx0ID0gcGFyc2VOdW1iZXJPcHRp
b25hbE51bWJlcih2YWx1ZSkpIHsKKyAgICAgICAgICAgIG1fc3RkRGV2aWF0aW9uWC0+c2V0QmFz
ZVZhbEludGVybmFsKHJlc3VsdC0+Zmlyc3QpOworICAgICAgICAgICAgbV9zdGREZXZpYXRpb25Z
LT5zZXRCYXNlVmFsSW50ZXJuYWwocmVzdWx0LT5zZWNvbmQpOwogICAgICAgICB9CiAgICAgICAg
IHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDI2MzE3NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdl
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNyw5ICsxMTcsNyBAQCB2b2lkIFNWR0ZF
SW1hZ2VFbGVtZW50OjpidWlsZFBlbmRpbmdSZXNvCiB2b2lkIFNWR0ZFSW1hZ2VFbGVtZW50Ojpw
YXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9tU3RyaW5n
JiB2YWx1ZSkKIHsKICAgICBpZiAobmFtZSA9PSBTVkdOYW1lczo6cHJlc2VydmVBc3BlY3RSYXRp
b0F0dHIpIHsKLSAgICAgICAgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlIHByZXNlcnZlQXNw
ZWN0UmF0aW87Ci0gICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW8ucGFyc2UodmFsdWUpOwotICAg
ICAgICBtX3ByZXNlcnZlQXNwZWN0UmF0aW8tPnNldEJhc2VWYWxJbnRlcm5hbChwcmVzZXJ2ZUFz
cGVjdFJhdGlvKTsKKyAgICAgICAgbV9wcmVzZXJ2ZUFzcGVjdFJhdGlvLT5zZXRCYXNlVmFsSW50
ZXJuYWwoU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlIHsgdmFsdWUgfSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9s
b2d5RWxlbWVudC5jcHAJKHJldmlzaW9uIDI2MzE3NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRU1vcnBob2xvZ3lFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsMTAgKzcxLDkg
QEAgdm9pZCBTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpwYXJzZUF0dHJpYgogICAgIH0KIAogICAg
IGlmIChuYW1lID09IFNWR05hbWVzOjpyYWRpdXNBdHRyKSB7Ci0gICAgICAgIGZsb2F0IHgsIHk7
Ci0gICAgICAgIGlmIChwYXJzZU51bWJlck9wdGlvbmFsTnVtYmVyKHZhbHVlLCB4LCB5KSkgewot
ICAgICAgICAgICAgbV9yYWRpdXNYLT5zZXRCYXNlVmFsSW50ZXJuYWwoeCk7Ci0gICAgICAgICAg
ICBtX3JhZGl1c1ktPnNldEJhc2VWYWxJbnRlcm5hbCh5KTsKKyAgICAgICAgaWYgKGF1dG8gcmVz
dWx0ID0gcGFyc2VOdW1iZXJPcHRpb25hbE51bWJlcih2YWx1ZSkpIHsKKyAgICAgICAgICAgIG1f
cmFkaXVzWC0+c2V0QmFzZVZhbEludGVybmFsKHJlc3VsdC0+Zmlyc3QpOworICAgICAgICAgICAg
bV9yYWRpdXNZLT5zZXRCYXNlVmFsSW50ZXJuYWwocmVzdWx0LT5zZWNvbmQpOwogICAgICAgICB9
CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVT
cGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuY3BwCShyZXZpc2lvbiAyNjMxNzYpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTc4LDEwICs3OCw5IEBAIHZvaWQgU1ZHRkVTcGVjdWxhckxpZ2h0aW5n
RWxlbWVudDo6cGFyc2UKICAgICB9CiAKICAgICBpZiAobmFtZSA9PSBTVkdOYW1lczo6a2VybmVs
VW5pdExlbmd0aEF0dHIpIHsKLSAgICAgICAgZmxvYXQgeCwgeTsKLSAgICAgICAgaWYgKHBhcnNl
TnVtYmVyT3B0aW9uYWxOdW1iZXIodmFsdWUsIHgsIHkpKSB7Ci0gICAgICAgICAgICBtX2tlcm5l
bFVuaXRMZW5ndGhYLT5zZXRCYXNlVmFsSW50ZXJuYWwoeCk7Ci0gICAgICAgICAgICBtX2tlcm5l
bFVuaXRMZW5ndGhZLT5zZXRCYXNlVmFsSW50ZXJuYWwoeSk7CisgICAgICAgIGlmIChhdXRvIHJl
c3VsdCA9IHBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIodmFsdWUpKSB7CisgICAgICAgICAgICBt
X2tlcm5lbFVuaXRMZW5ndGhYLT5zZXRCYXNlVmFsSW50ZXJuYWwocmVzdWx0LT5maXJzdCk7Cisg
ICAgICAgICAgICBtX2tlcm5lbFVuaXRMZW5ndGhZLT5zZXRCYXNlVmFsSW50ZXJuYWwocmVzdWx0
LT5zZWNvbmQpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAy
NjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY3LDEwICs2Nyw5IEBAIHZvaWQgU1ZHRkVUdXJidWxlbmNlRWxl
bWVudDo6cGFyc2VBdHRyaWIKICAgICB9CiAKICAgICBpZiAobmFtZSA9PSBTVkdOYW1lczo6YmFz
ZUZyZXF1ZW5jeUF0dHIpIHsKLSAgICAgICAgZmxvYXQgeCwgeTsKLSAgICAgICAgaWYgKHBhcnNl
TnVtYmVyT3B0aW9uYWxOdW1iZXIodmFsdWUsIHgsIHkpKSB7Ci0gICAgICAgICAgICBtX2Jhc2VG
cmVxdWVuY3lYLT5zZXRCYXNlVmFsSW50ZXJuYWwoeCk7Ci0gICAgICAgICAgICBtX2Jhc2VGcmVx
dWVuY3lZLT5zZXRCYXNlVmFsSW50ZXJuYWwoeSk7CisgICAgICAgIGlmIChhdXRvIHJlc3VsdCA9
IHBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIodmFsdWUpKSB7CisgICAgICAgICAgICBtX2Jhc2VG
cmVxdWVuY3lYLT5zZXRCYXNlVmFsSW50ZXJuYWwocmVzdWx0LT5maXJzdCk7CisgICAgICAgICAg
ICBtX2Jhc2VGcmVxdWVuY3lZLT5zZXRCYXNlVmFsSW50ZXJuYWwocmVzdWx0LT5zZWNvbmQpOwog
ICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRml0VG9WaWV3Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRml0VG9WaWV3Qm94LmNwcAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZpdFRvVmlld0JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDczICs2Niw3MSBA
QCB2b2lkIFNWR0ZpdFRvVmlld0JveDo6cmVzZXQoKQogYm9vbCBTVkdGaXRUb1ZpZXdCb3g6OnBh
cnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21TdHJpbmcm
IHZhbHVlKQogewogICAgIGlmIChuYW1lID09IFNWR05hbWVzOjp2aWV3Qm94QXR0cikgewotICAg
ICAgICBGbG9hdFJlY3Qgdmlld0JveDsKLSAgICAgICAgaWYgKCF2YWx1ZS5pc051bGwoKSAmJiBw
YXJzZVZpZXdCb3godmFsdWUsIHZpZXdCb3gpKQotICAgICAgICAgICAgc2V0Vmlld0JveCh2aWV3
Qm94KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVzZXRWaWV3Qm94KCk7CisgICAgICAg
IGlmICghdmFsdWUuaXNOdWxsKCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIHJlc3VsdCA9IHBh
cnNlVmlld0JveCh2YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICBzZXRWaWV3Qm94KFdURk1vdmUo
KnJlc3VsdCkpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIHJlc2V0Vmlld0JveCgpOwogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CiAKICAgICBpZiAobmFtZSA9PSBTVkdOYW1lczo6cHJlc2VydmVBc3BlY3RSYXRpb0F0
dHIpIHsKLSAgICAgICAgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlIHByZXNlcnZlQXNwZWN0
UmF0aW87Ci0gICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW8ucGFyc2UodmFsdWUpOwotICAgICAg
ICBzZXRQcmVzZXJ2ZUFzcGVjdFJhdGlvKHByZXNlcnZlQXNwZWN0UmF0aW8pOworICAgICAgICBz
ZXRQcmVzZXJ2ZUFzcGVjdFJhdGlvKFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSB7IHZhbHVl
IH0pOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLWJvb2wgU1ZHRml0VG9WaWV3Qm94OjpwYXJzZVZpZXdCb3goY29uc3QgQXRvbVN0cmluZyYg
dmFsdWUsIEZsb2F0UmVjdCYgdmlld0JveCkKK09wdGlvbmFsPEZsb2F0UmVjdD4gU1ZHRml0VG9W
aWV3Qm94OjpwYXJzZVZpZXdCb3goY29uc3QgQXRvbVN0cmluZyYgdmFsdWUpCiB7CiAgICAgYXV0
byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KHZhbHVlKS51cGNvbnZlcnRlZENo
YXJhY3RlcnMoKTsKICAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycyA9IHVwY29udmVydGVkQ2hh
cmFjdGVyczsKLSAgICByZXR1cm4gcGFyc2VWaWV3Qm94KGNoYXJhY3RlcnMsIGNoYXJhY3RlcnMg
KyB2YWx1ZS5sZW5ndGgoKSwgdmlld0JveCk7CisgICAgcmV0dXJuIHBhcnNlVmlld0JveChjaGFy
YWN0ZXJzLCBjaGFyYWN0ZXJzICsgdmFsdWUubGVuZ3RoKCkpOwogfQogCi1ib29sIFNWR0ZpdFRv
Vmlld0JveDo6cGFyc2VWaWV3Qm94KGNvbnN0IFVDaGFyKiYgYywgY29uc3QgVUNoYXIqIGVuZCwg
RmxvYXRSZWN0JiB2aWV3Qm94LCBib29sIHZhbGlkYXRlKQorT3B0aW9uYWw8RmxvYXRSZWN0PiBT
VkdGaXRUb1ZpZXdCb3g6OnBhcnNlVmlld0JveChjb25zdCBVQ2hhciomIGMsIGNvbnN0IFVDaGFy
KiBlbmQsIGJvb2wgdmFsaWRhdGUpCiB7Ci0gICAgU3RyaW5nIHN0cihjLCBlbmQgLSBjKTsKKyAg
ICBTdHJpbmdWaWV3IHN0cihjLCBlbmQgLSBjKTsKIAogICAgIHNraXBPcHRpb25hbFNWR1NwYWNl
cyhjLCBlbmQpOwogCi0gICAgZmxvYXQgeCA9IDAuMGY7Ci0gICAgZmxvYXQgeSA9IDAuMGY7Ci0g
ICAgZmxvYXQgd2lkdGggPSAwLjBmOwotICAgIGZsb2F0IGhlaWdodCA9IDAuMGY7Ci0gICAgYm9v
bCB2YWxpZCA9IHBhcnNlTnVtYmVyKGMsIGVuZCwgeCkgJiYgcGFyc2VOdW1iZXIoYywgZW5kLCB5
KSAmJiBwYXJzZU51bWJlcihjLCBlbmQsIHdpZHRoKSAmJiBwYXJzZU51bWJlcihjLCBlbmQsIGhl
aWdodCwgZmFsc2UpOworICAgIGF1dG8geCA9IHBhcnNlTnVtYmVyKGMsIGVuZCk7CisgICAgYXV0
byB5ID0gcGFyc2VOdW1iZXIoYywgZW5kKTsKKyAgICBhdXRvIHdpZHRoID0gcGFyc2VOdW1iZXIo
YywgZW5kKTsKKyAgICBhdXRvIGhlaWdodCA9IHBhcnNlTnVtYmVyKGMsIGVuZCwgU3VmZml4U2tp
cHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsKIAogICAgIGlmICh2YWxpZGF0ZSkgewogICAgICAgICBE
b2N1bWVudCYgZG9jdW1lbnQgPSBtX3ZpZXdCb3gtPmNvbnRleHRFbGVtZW50KCktPmRvY3VtZW50
KCk7CiAKLSAgICAgICAgaWYgKCF2YWxpZCkgewotICAgICAgICAgICAgZG9jdW1lbnQuYWNjZXNz
U1ZHRXh0ZW5zaW9ucygpLnJlcG9ydFdhcm5pbmcoIlByb2JsZW0gcGFyc2luZyB2aWV3Qm94PVwi
IiArIHN0ciArICJcIiIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAo
IXggfHwgIXkgfHwgIXdpZHRoIHx8ICFoZWlnaHQpIHsKKyAgICAgICAgICAgIGRvY3VtZW50LmFj
Y2Vzc1NWR0V4dGVuc2lvbnMoKS5yZXBvcnRXYXJuaW5nKG1ha2VTdHJpbmcoIlByb2JsZW0gcGFy
c2luZyB2aWV3Qm94PVwiIiwgc3RyLCAiXCIiKSk7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogICAgICAgICB9CiAKICAgICAgICAgLy8gQ2hlY2sgdGhhdCB3aWR0aCBpcyBwb3Np
dGl2ZS4KLSAgICAgICAgaWYgKHdpZHRoIDwgMC4wKSB7CisgICAgICAgIGlmICgqd2lkdGggPCAw
LjApIHsKICAgICAgICAgICAgIGRvY3VtZW50LmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5yZXBvcnRF
cnJvcigiQSBuZWdhdGl2ZSB2YWx1ZSBmb3IgVmlld0JveCB3aWR0aCBpcyBub3QgYWxsb3dlZCIp
OwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKICAgICAgICAgfQogCiAgICAgICAgIC8vIENoZWNrIHRoYXQgaGVpZ2h0IGlzIHBvc2l0
aXZlLgotICAgICAgICBpZiAoaGVpZ2h0IDwgMC4wKSB7CisgICAgICAgIGlmICgqaGVpZ2h0IDwg
MC4wKSB7CiAgICAgICAgICAgICBkb2N1bWVudC5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVwb3J0
RXJyb3IoIkEgbmVnYXRpdmUgdmFsdWUgZm9yIFZpZXdCb3ggaGVpZ2h0IGlzIG5vdCBhbGxvd2Vk
Iik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogICAgICAgICB9CiAKICAgICAgICAgLy8gTm90aGluZyBzaG91bGQgY29tZSBhZnRl
ciB0aGUgbGFzdCwgZm91cnRoIG51bWJlci4KICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2Vz
KGMsIGVuZCk7CiAgICAgICAgIGlmIChjIDwgZW5kKSB7Ci0gICAgICAgICAgICBkb2N1bWVudC5h
Y2Nlc3NTVkdFeHRlbnNpb25zKCkucmVwb3J0V2FybmluZygiUHJvYmxlbSBwYXJzaW5nIHZpZXdC
b3g9XCIiICsgc3RyICsgIlwiIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICBkb2N1bWVudC5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVwb3J0V2FybmluZyhtYWtlU3Ry
aW5nKCJQcm9ibGVtIHBhcnNpbmcgdmlld0JveD1cIiIsIHN0ciwgIlwiIikpOworICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgfQogICAgIH0KIAotICAgIHZpZXdCb3gg
PSB7IHgsIHksIHdpZHRoLCBoZWlnaHQgfTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4g
RmxvYXRSZWN0IHsgeC52YWx1ZU9yKDApLCB5LnZhbHVlT3IoMCksIHdpZHRoLnZhbHVlT3IoMCks
IGhlaWdodC52YWx1ZU9yKDApIH07CiB9CiAKIEFmZmluZVRyYW5zZm9ybSBTVkdGaXRUb1ZpZXdC
b3g6OnZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0oY29uc3QgRmxvYXRSZWN0JiB2aWV3Qm94UmVjdCwg
Y29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJiBwcmVzZXJ2ZUFzcGVjdFJhdGlvLCBm
bG9hdCB2aWV3V2lkdGgsIGZsb2F0IHZpZXdIZWlnaHQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRml0VG9WaWV3Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZpdFRvVmlld0JveC5oCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRml0VG9WaWV3Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDggKzY1LDggQEAgcHJvdGVj
dGVkOgogCiAgICAgdm9pZCByZXNldCgpOwogICAgIGJvb2wgcGFyc2VBdHRyaWJ1dGUoY29uc3Qg
UXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21TdHJpbmcmKTsKLSAgICBib29sIHBhcnNlVmlld0Jv
eChjb25zdCBBdG9tU3RyaW5nJiB2YWx1ZSwgRmxvYXRSZWN0JiB2aWV3Qm94KTsKLSAgICBib29s
IHBhcnNlVmlld0JveChjb25zdCBVQ2hhciomIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kLCBGbG9h
dFJlY3QmIHZpZXdCb3gsIGJvb2wgdmFsaWRhdGUgPSB0cnVlKTsKKyAgICBPcHRpb25hbDxGbG9h
dFJlY3Q+IHBhcnNlVmlld0JveChjb25zdCBBdG9tU3RyaW5nJiB2YWx1ZSk7CisgICAgT3B0aW9u
YWw8RmxvYXRSZWN0PiBwYXJzZVZpZXdCb3goY29uc3QgVUNoYXIqJiBzdGFydCwgY29uc3QgVUNo
YXIqIGVuZCwgYm9vbCB2YWxpZGF0ZSA9IHRydWUpOwogCiBwcml2YXRlOgogICAgIFJlZjxTVkdB
bmltYXRlZFJlY3Q+IG1fdmlld0JveDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHbHlw
aFJlZkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHbHlw
aFJlZkVsZW1lbnQuY3BwCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHR2x5cGhSZWZFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsMTAgKzU4LDcgQEAg
Ym9vbCBTVkdHbHlwaFJlZkVsZW1lbnQ6Omhhc1ZhbGlkR2x5cGhFbAogCiBzdGF0aWMgZmxvYXQg
cGFyc2VGbG9hdChjb25zdCBBdG9tU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBmbG9hdCByZXN1bHQ7
Ci0gICAgaWYgKCFwYXJzZU51bWJlckZyb21TdHJpbmcodmFsdWUsIHJlc3VsdCkpCi0gICAgICAg
IHJldHVybiAwOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIHBhcnNlTnVtYmVyKHZh
bHVlKS52YWx1ZU9yKDApOwogfQogCiB2b2lkIFNWR0dseXBoUmVmRWxlbWVudDo6cGFyc2VBdHRy
aWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbVN0cmluZyYgdmFsdWUp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHSEtlcm5FbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHSEtlcm5FbGVtZW50LmNwcAkocmV2aXNpb24gMjYz
MTc2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0hLZXJuRWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ0LDI0ICs0NCw0NCBAQCBSZWY8U1ZHSEtlcm5FbGVtZW50PiBTVkdIS2VybkVs
ZW1lbnQ6OmNyCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZHSEtlcm5FbGVtZW50KHRhZ05h
bWUsIGRvY3VtZW50KSk7CiB9CiAKLWJvb2wgU1ZHSEtlcm5FbGVtZW50OjpidWlsZEhvcml6b250
YWxLZXJuaW5nUGFpcihTVkdLZXJuaW5nUGFpciYga2VybmluZ1BhaXIpIGNvbnN0CitPcHRpb25h
bDxTVkdLZXJuaW5nUGFpcj4gU1ZHSEtlcm5FbGVtZW50OjpidWlsZEhvcml6b250YWxLZXJuaW5n
UGFpcigpIGNvbnN0CiB7CisgICAgLy8gRklYTUU6IENhbiB0aGlzIGJlIHNoYXJlZCB3aXRoIFNW
R1ZLZXJuRWxlbWVudDo6YnVpbGRWZXJ0aWNhbEtlcm5pbmdQYWlyCisKICAgICBhdXRvJiB1MSA9
IGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oU1ZHTmFtZXM6OnUxQXR0cik7CiAgICAg
YXV0byYgZzEgPSBhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFNWR05hbWVzOjpnMUF0
dHIpOwogICAgIGF1dG8mIHUyID0gYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihTVkdO
YW1lczo6dTJBdHRyKTsKICAgICBhdXRvJiBnMiA9IGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6
YXRpb24oU1ZHTmFtZXM6OmcyQXR0cik7CiAgICAgaWYgKCh1MS5pc0VtcHR5KCkgJiYgZzEuaXNF
bXB0eSgpKSB8fCAodTIuaXNFbXB0eSgpICYmIGcyLmlzRW1wdHkoKSkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIGF1dG8gZ2x5cGhO
YW1lMSA9IHBhcnNlR2x5cGhOYW1lKGcxKTsKKyAgICBpZiAoIWdseXBoTmFtZTEpCisgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgYXV0byBnbHlwaE5hbWUyID0gcGFyc2VHbHlwaE5h
bWUoZzIpOworICAgIGlmICghZ2x5cGhOYW1lMikKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKyAgICBhdXRvIHVuaWNvZGVTdHJpbmcxID0gcGFyc2VLZXJuaW5nVW5pY29kZVN0cmluZyh1
MSk7CisgICAgaWYgKCF1bmljb2RlU3RyaW5nMSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKyAgICBhdXRvIHVuaWNvZGVTdHJpbmcyID0gcGFyc2VLZXJuaW5nVW5pY29kZVN0cmluZyh1
Mik7CisgICAgaWYgKCF1bmljb2RlU3RyaW5nMikKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKworICAgIGJvb2wgb2sgPSBmYWxzZTsKKyAgICBhdXRvIGtlcm5pbmcgPSBhdHRyaWJ1dGVX
aXRob3V0U3luY2hyb25pemF0aW9uKFNWR05hbWVzOjprQXR0cikuc3RyaW5nKCkudG9GbG9hdCgm
b2spOworICAgIGlmICghb2spCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBp
ZiAocGFyc2VHbHlwaE5hbWUoZzEsIGtlcm5pbmdQYWlyLmdseXBoTmFtZTEpCi0gICAgICAgICYm
IHBhcnNlR2x5cGhOYW1lKGcyLCBrZXJuaW5nUGFpci5nbHlwaE5hbWUyKQotICAgICAgICAmJiBw
YXJzZUtlcm5pbmdVbmljb2RlU3RyaW5nKHUxLCBrZXJuaW5nUGFpci51bmljb2RlUmFuZ2UxLCBr
ZXJuaW5nUGFpci51bmljb2RlTmFtZTEpCi0gICAgICAgICYmIHBhcnNlS2VybmluZ1VuaWNvZGVT
dHJpbmcodTIsIGtlcm5pbmdQYWlyLnVuaWNvZGVSYW5nZTIsIGtlcm5pbmdQYWlyLnVuaWNvZGVO
YW1lMikpIHsKLSAgICAgICAgYm9vbCBvayA9IGZhbHNlOwotICAgICAgICBrZXJuaW5nUGFpci5r
ZXJuaW5nID0gYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihTVkdOYW1lczo6a0F0dHIp
LnN0cmluZygpLnRvRmxvYXQoJm9rKTsKLSAgICAgICAgcmV0dXJuIG9rOwotICAgIH0KLSAgICBy
ZXR1cm4gZmFsc2U7CisgICAgU1ZHS2VybmluZ1BhaXIga2VybmluZ1BhaXI7CisgICAga2Vybmlu
Z1BhaXIuZ2x5cGhOYW1lMSA9IFdURk1vdmUoKmdseXBoTmFtZTEpOworICAgIGtlcm5pbmdQYWly
LmdseXBoTmFtZTIgPSBXVEZNb3ZlKCpnbHlwaE5hbWUyKTsKKyAgICBrZXJuaW5nUGFpci51bmlj
b2RlUmFuZ2UxID0gV1RGTW92ZSh1bmljb2RlU3RyaW5nMS0+Zmlyc3QpOworICAgIGtlcm5pbmdQ
YWlyLnVuaWNvZGVOYW1lMSA9IFdURk1vdmUodW5pY29kZVN0cmluZzEtPnNlY29uZCk7CisgICAg
a2VybmluZ1BhaXIudW5pY29kZVJhbmdlMiA9IFdURk1vdmUodW5pY29kZVN0cmluZzItPmZpcnN0
KTsKKyAgICBrZXJuaW5nUGFpci51bmljb2RlTmFtZTIgPSBXVEZNb3ZlKHVuaWNvZGVTdHJpbmcy
LT5zZWNvbmQpOworICAgIGtlcm5pbmdQYWlyLmtlcm5pbmcgPSBrZXJuaW5nOworICAgIHJldHVy
biBrZXJuaW5nUGFpcjsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0hLZXJu
RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdIS2VybkVsZW1l
bnQuaAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0hLZXJuRWxl
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBAIGNsYXNzIFNWR0hLZXJuRWxl
bWVudCBmaW5hbCA6IHB1YmxpYyBTVkcKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPFNWR0hLZXJu
RWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCYpOwogCi0gICAg
Ym9vbCBidWlsZEhvcml6b250YWxLZXJuaW5nUGFpcihTVkdLZXJuaW5nUGFpciYga2VybmluZ1Bh
aXIpIGNvbnN0OworICAgIE9wdGlvbmFsPFNWR0tlcm5pbmdQYWlyPiBidWlsZEhvcml6b250YWxL
ZXJuaW5nUGFpcigpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIFNWR0hLZXJuRWxlbWVudChjb25z
dCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdJbWFnZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdJ
bWFnZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHSW1hZ2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksOSArNjksNyBAQCBib29s
IFNWR0ltYWdlRWxlbWVudDo6aGFzU2luZ2xlU2VjdXJpdHlPCiB2b2lkIFNWR0ltYWdlRWxlbWVu
dDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbVN0
cmluZyYgdmFsdWUpCiB7CiAgICAgaWYgKG5hbWUgPT0gU1ZHTmFtZXM6OnByZXNlcnZlQXNwZWN0
UmF0aW9BdHRyKSB7Ci0gICAgICAgIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSBwcmVzZXJ2
ZUFzcGVjdFJhdGlvOwotICAgICAgICBwcmVzZXJ2ZUFzcGVjdFJhdGlvLnBhcnNlKHZhbHVlKTsK
LSAgICAgICAgbV9wcmVzZXJ2ZUFzcGVjdFJhdGlvLT5zZXRCYXNlVmFsSW50ZXJuYWwocHJlc2Vy
dmVBc3BlY3RSYXRpbyk7CisgICAgICAgIG1fcHJlc2VydmVBc3BlY3RSYXRpby0+c2V0QmFzZVZh
bEludGVybmFsKFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSB7IHZhbHVlIH0pOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoVmFs
dWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMZW5ndGhWYWx1ZS5j
cHAJKHJldmlzaW9uIDI2MzE3NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMZW5ndGhWYWx1
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5MSwxMiArMjkxLDEyIEBAIEV4Y2VwdGlvbk9yPHZv
aWQ+IFNWR0xlbmd0aFZhbHVlOjpzZXRWYWwKICAgICBpZiAoc3RyaW5nLmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGZsb2F0IGNvbnZlcnRlZE51bWJlciA9IDA7CiAgICAg
YXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KHN0cmluZykudXBjb252ZXJ0
ZWRDaGFyYWN0ZXJzKCk7CiAgICAgY29uc3QgVUNoYXIqIHB0ciA9IHVwY29udmVydGVkQ2hhcmFj
dGVyczsKICAgICBjb25zdCBVQ2hhciogZW5kID0gcHRyICsgc3RyaW5nLmxlbmd0aCgpOwogCi0g
ICAgaWYgKCFwYXJzZU51bWJlcihwdHIsIGVuZCwgY29udmVydGVkTnVtYmVyLCBmYWxzZSkpCisg
ICAgYXV0byBjb252ZXJ0ZWROdW1iZXIgPSBwYXJzZU51bWJlcihwdHIsIGVuZCwgU3VmZml4U2tp
cHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsKKyAgICBpZiAoIWNvbnZlcnRlZE51bWJlcikKICAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiAKICAgICBhdXRvIGxlbmd0aFR5
cGUgPSBwYXJzZUxlbmd0aFR5cGUocHRyLCBlbmQpOwpAQCAtMzA0LDcgKzMwNCw3IEBAIEV4Y2Vw
dGlvbk9yPHZvaWQ+IFNWR0xlbmd0aFZhbHVlOjpzZXRWYWwKICAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IFN5bnRheEVycm9yIH07CiAKICAgICBtX2xlbmd0aFR5cGUgPSBsZW5ndGhUeXBlOwot
ICAgIG1fdmFsdWVJblNwZWNpZmllZFVuaXRzID0gY29udmVydGVkTnVtYmVyOworICAgIG1fdmFs
dWVJblNwZWNpZmllZFVuaXRzID0gKmNvbnZlcnRlZE51bWJlcjsKICAgICByZXR1cm4geyB9Owog
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTnVtYmVyTGlzdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdOdW1iZXJMaXN0LmgJKHJldmlzaW9uIDI2MzE3NikK
KysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdOdW1iZXJMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTU0LDcgKzU0LDYgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgY2xlYXJJdGVtcygpOwogCi0g
ICAgICAgIGZsb2F0IG51bWJlciA9IDA7CiAgICAgICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0
ZXJzID0gU3RyaW5nVmlldyh2YWx1ZSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7CiAgICAgICAg
IGNvbnN0IFVDaGFyKiBwdHIgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7CiAgICAgICAgIGNvbnN0
IFVDaGFyKiBlbmQgPSBwdHIgKyB2YWx1ZS5sZW5ndGgoKTsKQEAgLTYyLDkgKzYxLDEwIEBAIHB1
YmxpYzoKICAgICAgICAgLy8gVGhlIHNwZWMgKHNlY3Rpb24gNC4xKSBzdHJhbmdlbHkgZG9lc24n
dCBhbGxvdyBsZWFkaW5nIHdoaXRlc3BhY2UuCiAgICAgICAgIC8vIFdlIG1pZ2h0IGNob29zZSB0
byB2aW9sYXRlIHRoYXQgaW50ZW50aW9uYWxseS4KICAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCkg
ewotICAgICAgICAgICAgaWYgKCFwYXJzZU51bWJlcihwdHIsIGVuZCwgbnVtYmVyKSkKKyAgICAg
ICAgICAgIGF1dG8gbnVtYmVyID0gcGFyc2VOdW1iZXIocHRyLCBlbmQpOworICAgICAgICAgICAg
aWYgKCFudW1iZXIpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBhcHBlbmQo
U1ZHTnVtYmVyOjpjcmVhdGUobnVtYmVyKSk7CisgICAgICAgICAgICBhcHBlbmQoU1ZHTnVtYmVy
OjpjcmVhdGUoKm51bWJlcikpOwogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIHB0ciA9PSBl
bmQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmNwcAkocmV2
aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDE5ICs0MCwxOCBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUg
RmxvYXRUeXBlPiBzdGF0aWMgaW5sCiAvLyBXZSB1c2UgdGhpcyBnZW5lcmljIHBhcnNlTnVtYmVy
IGZ1bmN0aW9uIHRvIGFsbG93IHRoZSBQYXRoIHBhcnNpbmcgY29kZSB0byB3b3JrIAogLy8gYXQg
YSBoaWdoZXIgcHJlY2lzaW9uIGludGVybmFsbHksIHdpdGhvdXQgYW55IHVubmVjZXNzYXJ5IHJ1
bnRpbWUgY29zdCBvciBjb2RlCiAvLyBjb21wbGV4aXR5LgotdGVtcGxhdGUgPHR5cGVuYW1lIENo
YXJhY3RlclR5cGUsIHR5cGVuYW1lIEZsb2F0VHlwZT4gc3RhdGljIGJvb2wgZ2VuZXJpY1BhcnNl
TnVtYmVyKGNvbnN0IENoYXJhY3RlclR5cGUqJiBwdHIsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVu
ZCwgRmxvYXRUeXBlJiBudW1iZXIsIGJvb2wgc2tpcCkKKy8vIEZJWE1FOiBDYW4gdGhpcyBiZSBz
aGFyZWQvcmVwbGFjZWQgd2l0aCBudW1iZXIgcGFyc2luZyBpbiBXVEY/Cit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5hbWUgRmxvYXRUeXBlID0gZmxvYXQ+IHN0YXRpYyBP
cHRpb25hbDxGbG9hdFR5cGU+IGdlbmVyaWNQYXJzZU51bWJlcihjb25zdCBDaGFyYWN0ZXJUeXBl
KiYgcHRyLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQsIFN1ZmZpeFNraXBwaW5nUG9saWN5IHNr
aXAgPSBTdWZmaXhTa2lwcGluZ1BvbGljeTo6U2tpcCkKIHsKLSAgICBGbG9hdFR5cGUgaW50ZWdl
ciwgZGVjaW1hbCwgZnJhYywgZXhwb25lbnQ7Ci0gICAgaW50IHNpZ24sIGV4cHNpZ247CisgICAg
RmxvYXRUeXBlIG51bWJlciA9IDA7CisgICAgRmxvYXRUeXBlIGludGVnZXIgPSAwOworICAgIEZs
b2F0VHlwZSBkZWNpbWFsID0gMDsKKyAgICBGbG9hdFR5cGUgZnJhYyA9IDE7CisgICAgRmxvYXRU
eXBlIGV4cG9uZW50ID0gMDsKKyAgICBpbnQgc2lnbiA9IDE7CisgICAgaW50IGV4cHNpZ24gPSAx
OwogICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIHN0YXJ0ID0gcHRyOwogCi0gICAgZXhwb25lbnQg
PSAwOwotICAgIGludGVnZXIgPSAwOwotICAgIGZyYWMgPSAxOwotICAgIGRlY2ltYWwgPSAwOwot
ICAgIHNpZ24gPSAxOwotICAgIGV4cHNpZ24gPSAxOwotCiAgICAgLy8gcmVhZCB0aGUgc2lnbgog
ICAgIGlmIChwdHIgPCBlbmQgJiYgKnB0ciA9PSAnKycpCiAgICAgICAgIHB0cisrOwpAQCAtNjIs
NyArNjEsNyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5hCiAgICAg
fSAKICAgICAKICAgICBpZiAocHRyID09IGVuZCB8fCAoIWlzQVNDSUlEaWdpdCgqcHRyKSAmJiAq
cHRyICE9ICcuJykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKIAogICAgIC8vIHJlYWQgdGhlIGludGVnZXIgcGFydCwgYnVpbGQgcmlnaHQtdG8t
bGVmdAogICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIHB0clN0YXJ0SW50UGFydCA9IHB0cjsKQEAg
LTc4LDcgKzc3LDcgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHR5cGVuYQog
ICAgICAgICB9CiAgICAgICAgIC8vIEJhaWwgb3V0IGVhcmx5IGlmIHRoaXMgb3ZlcmZsb3dzLgog
ICAgICAgICBpZiAoIWlzVmFsaWRSYW5nZShpbnRlZ2VyKSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQogCiAgICAgaWYg
KHB0ciA8IGVuZCAmJiAqcHRyID09ICcuJykgeyAvLyByZWFkIHRoZSBkZWNpbWFscwpAQCAtODYs
NyArODUsNyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5hCiAgICAg
ICAgIAogICAgICAgICAvLyBUaGVyZSBtdXN0IGJlIGEgbGVhc3Qgb25lIGRpZ2l0IGZvbGxvd2lu
ZyB0aGUgLgogICAgICAgICBpZiAocHRyID49IGVuZCB8fCAhaXNBU0NJSURpZ2l0KCpwdHIpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKICAgICAgICAgCiAgICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgaXNBU0NJSURpZ2l0KCpw
dHIpKQogICAgICAgICAgICAgZGVjaW1hbCArPSAoKihwdHIrKykgLSAnMCcpICogKGZyYWMgKj0g
c3RhdGljX2Nhc3Q8RmxvYXRUeXBlPigwLjEpKTsKQEAgLTEwNyw3ICsxMDYsNyBAQCB0ZW1wbGF0
ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5hCiAgICAgICAgIAogICAgICAgICAvLyBU
aGVyZSBtdXN0IGJlIGFuIGV4cG9uZW50CiAgICAgICAgIGlmIChwdHIgPj0gZW5kIHx8ICFpc0FT
Q0lJRGlnaXQoKnB0cikpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgaXNBU0NJ
SURpZ2l0KCpwdHIpKSB7CiAgICAgICAgICAgICBleHBvbmVudCAqPSBzdGF0aWNfY2FzdDxGbG9h
dFR5cGU+KDEwKTsKQEAgLTExNiw3ICsxMTUsNyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZSwgdHlwZW5hCiAgICAgICAgIH0KICAgICAgICAgLy8gTWFrZSBzdXJlIGV4cG9uZW50
IGlzIHZhbGlkLgogICAgICAgICBpZiAoIWlzVmFsaWRSYW5nZShleHBvbmVudCkgfHwgZXhwb25l
bnQgPiBzdGQ6Om51bWVyaWNfbGltaXRzPEZsb2F0VHlwZT46Om1heF9leHBvbmVudCkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAg
ICAgfQogCiAgICAgbnVtYmVyID0gaW50ZWdlciArIGRlY2ltYWw7CkBAIC0xMjcsMTQyICsxMjYs
MTQ3IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCB0eXBlbmEKIAogICAgIC8v
IERvbid0IHJldHVybiBJbmZpbml0eSgpIG9yIE5hTigpLgogICAgIGlmICghaXNWYWxpZFJhbmdl
KG51bWJlcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIAogICAgIGlmIChzdGFydCA9PSBwdHIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGlmIChza2lwKQorICAgIGlmIChza2lw
ID09IFN1ZmZpeFNraXBwaW5nUG9saWN5OjpTa2lwKQogICAgICAgICBza2lwT3B0aW9uYWxTVkdT
cGFjZXNPckRlbGltaXRlcihwdHIsIGVuZCk7CiAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdGVt
cGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1ib29sIHBhcnNlU1ZHTnVtYmVyKENoYXJh
Y3RlclR5cGUqIGJlZ2luLCBzaXplX3QgbGVuZ3RoLCBkb3VibGUmIG51bWJlcikKLXsKLSAgICBj
b25zdCBDaGFyYWN0ZXJUeXBlKiBwdHIgPSBiZWdpbjsKLSAgICBjb25zdCBDaGFyYWN0ZXJUeXBl
KiBlbmQgPSBwdHIgKyBsZW5ndGg7Ci0gICAgcmV0dXJuIGdlbmVyaWNQYXJzZU51bWJlcihwdHIs
IGVuZCwgbnVtYmVyLCBmYWxzZSk7CisgICAgcmV0dXJuIG51bWJlcjsKIH0KIAotLy8gRXhwbGlj
aXRseSBpbnN0YW50aWF0ZSB0aGUgdHdvIGZsYXZvcnMgb2YgcGFyc2VTVkdOdW1iZXIoKSB0byBz
YXRpc2Z5IGV4dGVybmFsIGNhbGxlcnMKLXRlbXBsYXRlIGJvb2wgcGFyc2VTVkdOdW1iZXIoTENo
YXIqIGJlZ2luLCBzaXplX3QgbGVuZ3RoLCBkb3VibGUmKTsKLXRlbXBsYXRlIGJvb2wgcGFyc2VT
VkdOdW1iZXIoVUNoYXIqIGJlZ2luLCBzaXplX3QgbGVuZ3RoLCBkb3VibGUmKTsKLQotYm9vbCBw
YXJzZU51bWJlcihjb25zdCBMQ2hhciomIHB0ciwgY29uc3QgTENoYXIqIGVuZCwgZmxvYXQmIG51
bWJlciwgYm9vbCBza2lwKQorT3B0aW9uYWw8ZmxvYXQ+IHBhcnNlTnVtYmVyKGNvbnN0IExDaGFy
KiYgcHRyLCBjb25zdCBMQ2hhciogZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeSBza2lwKQogewot
ICAgIHJldHVybiBnZW5lcmljUGFyc2VOdW1iZXIocHRyLCBlbmQsIG51bWJlciwgc2tpcCk7Cisg
ICAgcmV0dXJuIGdlbmVyaWNQYXJzZU51bWJlcihwdHIsIGVuZCwgc2tpcCk7CiB9CiAKLWJvb2wg
cGFyc2VOdW1iZXIoY29uc3QgVUNoYXIqJiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQsIGZsb2F0JiBu
dW1iZXIsIGJvb2wgc2tpcCkgCitPcHRpb25hbDxmbG9hdD4gcGFyc2VOdW1iZXIoY29uc3QgVUNo
YXIqJiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQsIFN1ZmZpeFNraXBwaW5nUG9saWN5IHNraXApCiB7
Ci0gICAgcmV0dXJuIGdlbmVyaWNQYXJzZU51bWJlcihwdHIsIGVuZCwgbnVtYmVyLCBza2lwKTsK
KyAgICByZXR1cm4gZ2VuZXJpY1BhcnNlTnVtYmVyKHB0ciwgZW5kLCBza2lwKTsKIH0KIAotYm9v
bCBwYXJzZU51bWJlckZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0JiBudW1i
ZXIsIGJvb2wgc2tpcCkKK09wdGlvbmFsPGZsb2F0PiBwYXJzZU51bWJlcihjb25zdCBTdHJpbmcm
IHN0cmluZywgU3VmZml4U2tpcHBpbmdQb2xpY3kgc2tpcCkKIHsKICAgICBhdXRvIHVwY29udmVy
dGVkQ2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcoc3RyaW5nKS51cGNvbnZlcnRlZENoYXJhY3RlcnMo
KTsKICAgICBjb25zdCBVQ2hhciogcHRyID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOwogICAgIGNv
bnN0IFVDaGFyKiBlbmQgPSBwdHIgKyBzdHJpbmcubGVuZ3RoKCk7Ci0gICAgcmV0dXJuIGdlbmVy
aWNQYXJzZU51bWJlcihwdHIsIGVuZCwgbnVtYmVyLCBza2lwKSAmJiBwdHIgPT0gZW5kOworICAg
IGF1dG8gcmVzdWx0ID0gZ2VuZXJpY1BhcnNlTnVtYmVyKHB0ciwgZW5kLCBza2lwKTsKKyAgICBp
ZiAocHRyICE9IGVuZCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4g
cmVzdWx0OwogfQogCiAvLyBvbmx5IHVzZWQgdG8gcGFyc2UgbGFyZ2VBcmNGbGFnIGFuZCBzd2Vl
cEZsYWcgd2hpY2ggbXVzdCBiZSBhICIwIiBvciAiMSIKIC8vIGFuZCBtaWdodCBub3QgaGF2ZSBh
bnkgd2hpdGVzcGFjZS9jb21tYSBhZnRlciBpdAotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+Ci1ib29sIGdlbmVyaWNQYXJzZUFyY0ZsYWcoY29uc3QgQ2hhcmFjdGVyVHlwZSomIHB0
ciwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kLCBib29sJiBmbGFnKQordGVtcGxhdGUgPHR5cGVu
YW1lIENoYXJhY3RlclR5cGU+IE9wdGlvbmFsPGJvb2w+IGdlbmVyaWNQYXJzZUFyY0ZsYWcoY29u
c3QgQ2hhcmFjdGVyVHlwZSomIHB0ciwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kKQogewogICAg
IGlmIChwdHIgPj0gZW5kKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CisKICAgICBjb25zdCBDaGFyYWN0ZXJUeXBlIGZsYWdDaGFyID0gKnB0cisr
OworCisgICAgYm9vbCBmbGFnOwogICAgIGlmIChmbGFnQ2hhciA9PSAnMCcpCiAgICAgICAgIGZs
YWcgPSBmYWxzZTsKICAgICBlbHNlIGlmIChmbGFnQ2hhciA9PSAnMScpCiAgICAgICAgIGZsYWcg
PSB0cnVlOwogICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAorICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworCiAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxpbWl0
ZXIocHRyLCBlbmQpOwogICAgIAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmbGFnOwog
fQogCi1ib29sIHBhcnNlQXJjRmxhZyhjb25zdCBMQ2hhciomIHB0ciwgY29uc3QgTENoYXIqIGVu
ZCwgYm9vbCYgZmxhZykKK09wdGlvbmFsPGJvb2w+IHBhcnNlQXJjRmxhZyhjb25zdCBMQ2hhciom
IHB0ciwgY29uc3QgTENoYXIqIGVuZCkKIHsKLSAgICByZXR1cm4gZ2VuZXJpY1BhcnNlQXJjRmxh
ZyhwdHIsIGVuZCwgZmxhZyk7CisgICAgcmV0dXJuIGdlbmVyaWNQYXJzZUFyY0ZsYWcocHRyLCBl
bmQpOwogfQogCi1ib29sIHBhcnNlQXJjRmxhZyhjb25zdCBVQ2hhciomIHB0ciwgY29uc3QgVUNo
YXIqIGVuZCwgYm9vbCYgZmxhZykKK09wdGlvbmFsPGJvb2w+IHBhcnNlQXJjRmxhZyhjb25zdCBV
Q2hhciomIHB0ciwgY29uc3QgVUNoYXIqIGVuZCkKIHsKLSAgICByZXR1cm4gZ2VuZXJpY1BhcnNl
QXJjRmxhZyhwdHIsIGVuZCwgZmxhZyk7CisgICAgcmV0dXJuIGdlbmVyaWNQYXJzZUFyY0ZsYWco
cHRyLCBlbmQpOwogfQogCi1ib29sIHBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIoY29uc3QgU3Ry
aW5nJiBzLCBmbG9hdCYgeCwgZmxvYXQmIHkpCitPcHRpb25hbDxzdGQ6OnBhaXI8ZmxvYXQsIGZs
b2F0Pj4gcGFyc2VOdW1iZXJPcHRpb25hbE51bWJlcihjb25zdCBTdHJpbmcmIHMpCiB7CiAgICAg
aWYgKHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiAKICAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IFN0cmluZ1Zp
ZXcocykudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7CiAgICAgY29uc3QgVUNoYXIqIGN1ciA9IHVw
Y29udmVydGVkQ2hhcmFjdGVyczsKICAgICBjb25zdCBVQ2hhciogZW5kID0gY3VyICsgcy5sZW5n
dGgoKTsKIAotICAgIGlmICghcGFyc2VOdW1iZXIoY3VyLCBlbmQsIHgpKQotICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgYXV0byB4ID0gcGFyc2VOdW1iZXIoY3VyLCBlbmQpOworICAgIGlmICgh
eCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIGlmIChjdXIgPT0gZW5kKQot
ICAgICAgICB5ID0geDsKLSAgICBlbHNlIGlmICghcGFyc2VOdW1iZXIoY3VyLCBlbmQsIHksIGZh
bHNlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3Bh
aXIoKngsICp4KTsKIAotICAgIHJldHVybiBjdXIgPT0gZW5kOworICAgIGF1dG8geSA9IHBhcnNl
TnVtYmVyKGN1ciwgZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNraXApOworICAgIGlm
ICgheSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIGlmIChjdXIgIT0gZW5k
KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgcmV0dXJuIHN0ZDo6bWFrZV9w
YWlyKCp4LCAqeSk7CiB9CiAKLWJvb2wgcGFyc2VQb2ludChjb25zdCBTdHJpbmcmIHMsIEZsb2F0
UG9pbnQmIHBvaW50KQorT3B0aW9uYWw8RmxvYXRQb2ludD4gcGFyc2VQb2ludChjb25zdCBTdHJp
bmcmIHMpCiB7CiAgICAgaWYgKHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKICAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFj
dGVycyA9IFN0cmluZ1ZpZXcocykudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7CiAgICAgY29uc3Qg
VUNoYXIqIGN1ciA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKICAgICBjb25zdCBVQ2hhciogZW5k
ID0gY3VyICsgcy5sZW5ndGgoKTsKIAogICAgIGlmICghc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGN1
ciwgZW5kKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogCi0gICAgZmxvYXQgeCA9IDA7Ci0gICAgaWYgKCFwYXJzZU51bWJlcihjdXIsIGVuZCwg
eCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGZsb2F0IHkgPSAwOwotICAgIGlmICgh
cGFyc2VOdW1iZXIoY3VyLCBlbmQsIHkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBw
b2ludCA9IEZsb2F0UG9pbnQoeCwgeSk7CisgICAgYXV0byBwb2ludCA9IHBhcnNlRmxvYXRQb2lu
dChjdXIsIGVuZCk7CisgICAgaWYgKCFwb2ludCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKIAogICAgIC8vIERpc2FsbG93IGFueXRoaW5nIGV4Y2VwdCBzcGFjZXMgYXQgdGhlIGVuZC4K
LSAgICByZXR1cm4gIXNraXBPcHRpb25hbFNWR1NwYWNlcyhjdXIsIGVuZCk7CisgICAgc2tpcE9w
dGlvbmFsU1ZHU3BhY2VzKGN1ciwgZW5kKTsKKyAgICAKKyAgICByZXR1cm4gcG9pbnQ7CiB9CiAK
LWJvb2wgcGFyc2VSZWN0KGNvbnN0IFN0cmluZyYgc3RyaW5nLCBGbG9hdFJlY3QmIHJlY3QpCitP
cHRpb25hbDxGbG9hdFJlY3Q+IHBhcnNlUmVjdChjb25zdCBTdHJpbmcmIHN0cmluZykKIHsKICAg
ICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcoc3RyaW5nKS51cGNvbnZl
cnRlZENoYXJhY3RlcnMoKTsKICAgICBjb25zdCBVQ2hhciogcHRyID0gdXBjb252ZXJ0ZWRDaGFy
YWN0ZXJzOwogICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBwdHIgKyBzdHJpbmcubGVuZ3RoKCk7Cisg
ICAgCiAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHB0ciwgZW5kKTsKICAgICAKLSAgICBmbG9h
dCB4ID0gMDsKLSAgICBmbG9hdCB5ID0gMDsKLSAgICBmbG9hdCB3aWR0aCA9IDA7Ci0gICAgZmxv
YXQgaGVpZ2h0ID0gMDsKLSAgICBib29sIHZhbGlkID0gcGFyc2VOdW1iZXIocHRyLCBlbmQsIHgp
ICYmIHBhcnNlTnVtYmVyKHB0ciwgZW5kLCB5KSAmJiBwYXJzZU51bWJlcihwdHIsIGVuZCwgd2lk
dGgpICYmIHBhcnNlTnVtYmVyKHB0ciwgZW5kLCBoZWlnaHQsIGZhbHNlKTsKLSAgICByZWN0ID0g
RmxvYXRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpOwotICAgIHJldHVybiB2YWxpZDsKKyAgICBh
dXRvIHggPSBwYXJzZU51bWJlcihwdHIsIGVuZCk7CisgICAgaWYgKCF4KQorICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OworICAgIGF1dG8geSA9IHBhcnNlTnVtYmVyKHB0ciwgZW5kKTsKKyAg
ICBpZiAoIXkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgYXV0byB3aWR0aCA9
IHBhcnNlTnVtYmVyKHB0ciwgZW5kKTsKKyAgICBpZiAoIXdpZHRoKQorICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworICAgIGF1dG8gaGVpZ2h0ID0gcGFyc2VOdW1iZXIocHRyLCBlbmQsIFN1
ZmZpeFNraXBwaW5nUG9saWN5OjpEb250U2tpcCk7CisgICAgaWYgKCFoZWlnaHQpCisgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gRmxvYXRSZWN0IHsgKngsICp5LCAq
d2lkdGgsICpoZWlnaHQgfTsKIH0KIAotYm9vbCBwYXJzZUdseXBoTmFtZShjb25zdCBTdHJpbmcm
IGlucHV0LCBIYXNoU2V0PFN0cmluZz4mIHZhbHVlcykKK09wdGlvbmFsPEhhc2hTZXQ8U3RyaW5n
Pj4gcGFyc2VHbHlwaE5hbWUoY29uc3QgU3RyaW5nJiBpbnB1dCkKIHsKICAgICAvLyBGSVhNRTog
UGFyc2luZyBlcnJvciBkZXRlY3Rpb24gaXMgbWlzc2luZy4KLSAgICB2YWx1ZXMuY2xlYXIoKTsK
KworICAgIEhhc2hTZXQ8U3RyaW5nPiB2YWx1ZXM7CiAKICAgICBhdXRvIHVwY29udmVydGVkQ2hh
cmFjdGVycyA9IFN0cmluZ1ZpZXcoaW5wdXQpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwogICAg
IGNvbnN0IFVDaGFyKiBwdHIgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7CkBAIC0yODcsMTMgKzI5
MSwxMyBAQCBib29sIHBhcnNlR2x5cGhOYW1lKGNvbnN0IFN0cmluZyYgaW5wdXQsCiAgICAgICAg
IHNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVsaW1pdGVyKHB0ciwgZW5kLCAnLCcpOwogICAgIH0K
IAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiB2YWx1ZXM7CiB9CiAKLXN0YXRpYyBib29s
IHBhcnNlVW5pY29kZVJhbmdlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5n
dGgsIFVuaWNvZGVSYW5nZSYgcmFuZ2UpCitzdGF0aWMgT3B0aW9uYWw8VW5pY29kZVJhbmdlPiBw
YXJzZVVuaWNvZGVSYW5nZShjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3Ro
KQogewogICAgIGlmIChsZW5ndGggPCAyIHx8IGNoYXJhY3RlcnNbMF0gIT0gJ1UnIHx8IGNoYXJh
Y3RlcnNbMV0gIT0gJysnKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiAgICAgCiAgICAgLy8gUGFyc2UgdGhlIHN0YXJ0aW5nIGhleCBudW1iZXIg
KG9yIGl0cyBwcmVmaXgpLgogICAgIHVuc2lnbmVkIHN0YXJ0UmFuZ2UgPSAwOwpAQCAtMzA2LDE1
ICszMTAsMTUgQEAgc3RhdGljIGJvb2wgcGFyc2VVbmljb2RlUmFuZ2UoY29uc3QgVUNoYQogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICsrc3RhcnRMZW5ndGg7CiAgICAgICAgIGlmIChzdGFy
dExlbmd0aCA+IDYpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogICAgICAgICBzdGFydFJhbmdlID0gKHN0YXJ0UmFuZ2UgPDwgNCkg
fCB0b0FTQ0lJSGV4VmFsdWUoKnB0cik7CiAgICAgICAgICsrcHRyOwogICAgIH0KLSAgICAKKwog
ICAgIC8vIEhhbmRsZSB0aGUgY2FzZSBvZiByYW5nZXMgc2VwYXJhdGVkIGJ5ICItIiBzaWduLgog
ICAgIGlmICgyICsgc3RhcnRMZW5ndGggPCBsZW5ndGggJiYgKnB0ciA9PSAnLScpIHsKICAgICAg
ICAgaWYgKCFzdGFydExlbmd0aCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIAogICAgICAgICAvLyBQYXJzZSB0aGUg
ZW5kaW5nIGhleCBudW1iZXIgKG9yIGl0cyBwcmVmaXgpLgogICAgICAgICB1bnNpZ25lZCBlbmRS
YW5nZSA9IDA7CkBAIC0zMjUsMTcgKzMyOSwxOCBAQCBzdGF0aWMgYm9vbCBwYXJzZVVuaWNvZGVS
YW5nZShjb25zdCBVQ2hhCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICArK2Vu
ZExlbmd0aDsKICAgICAgICAgICAgIGlmIChlbmRMZW5ndGggPiA2KQotICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAg
ICAgICAgICAgZW5kUmFuZ2UgPSAoZW5kUmFuZ2UgPDwgNCkgfCB0b0FTQ0lJSGV4VmFsdWUoKnB0
cik7CiAgICAgICAgICAgICArK3B0cjsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYg
KCFlbmRMZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogICAgICAgICAKKyAgICAgICAgVW5pY29kZVJhbmdlIHJhbmdlOwog
ICAgICAgICByYW5nZS5maXJzdCA9IHN0YXJ0UmFuZ2U7CiAgICAgICAgIHJhbmdlLnNlY29uZCA9
IGVuZFJhbmdlOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHJhbmdlOwog
ICAgIH0KICAgICAKICAgICAvLyBIYW5kbGUgdGhlIGNhc2Ugb2YgYSBudW1iZXIgd2l0aCBzb21l
IG9wdGlvbmFsIHRyYWlsaW5nIHF1ZXN0aW9uIG1hcmtzLgpAQCAtMzQ1LDI3ICszNTAsMzIgQEAg
c3RhdGljIGJvb2wgcGFyc2VVbmljb2RlUmFuZ2UoY29uc3QgVUNoYQogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICsrc3RhcnRMZW5ndGg7CiAgICAgICAgIGlmIChzdGFydExlbmd0aCA+IDYp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogICAgICAgICBzdGFydFJhbmdlIDw8PSA0OwogICAgICAgICBlbmRSYW5nZSA9IChlbmRS
YW5nZSA8PCA0KSB8IDB4RjsKICAgICAgICAgKytwdHI7CiAgICAgfQogICAgIAogICAgIGlmICgh
c3RhcnRMZW5ndGgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKICAgICAKKyAgICBVbmljb2RlUmFuZ2UgcmFuZ2U7CiAgICAgcmFuZ2UuZmlyc3Qg
PSBzdGFydFJhbmdlOwogICAgIHJhbmdlLnNlY29uZCA9IGVuZFJhbmdlOwotICAgIHJldHVybiB0
cnVlOworICAgIHJldHVybiByYW5nZTsKIH0KIAotYm9vbCBwYXJzZUtlcm5pbmdVbmljb2RlU3Ry
aW5nKGNvbnN0IFN0cmluZyYgaW5wdXQsIFVuaWNvZGVSYW5nZXMmIHJhbmdlTGlzdCwgSGFzaFNl
dDxTdHJpbmc+JiBzdHJpbmdMaXN0KQorT3B0aW9uYWw8c3RkOjpwYWlyPFVuaWNvZGVSYW5nZXMs
IEhhc2hTZXQ8U3RyaW5nPj4+IHBhcnNlS2VybmluZ1VuaWNvZGVTdHJpbmcoY29uc3QgU3RyaW5n
JiBpbnB1dCkKIHsKICAgICAvLyBGSVhNRTogUGFyc2luZyBlcnJvciBkZXRlY3Rpb24gaXMgbWlz
c2luZy4KKwogICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyhpbnB1
dCkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7CiAgICAgY29uc3QgVUNoYXIqIHB0ciA9IHVwY29u
dmVydGVkQ2hhcmFjdGVyczsKICAgICBjb25zdCBVQ2hhciogZW5kID0gcHRyICsgaW5wdXQubGVu
Z3RoKCk7CiAKKyAgICBVbmljb2RlUmFuZ2VzIHJhbmdlTGlzdDsKKyAgICBIYXNoU2V0PFN0cmlu
Zz4gc3RyaW5nTGlzdDsKKwogICAgIHdoaWxlIChwdHIgPCBlbmQpIHsKICAgICAgICAgY29uc3Qg
VUNoYXIqIGlucHV0U3RhcnQgPSBwdHI7CiAgICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgKnB0
ciAhPSAnLCcpCkBAIC0zNzUsMTA1ICszODUsMzcgQEAgYm9vbCBwYXJzZUtlcm5pbmdVbmljb2Rl
U3RyaW5nKGNvbnN0IFN0cgogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgLy8gVHJ5IHRv
IHBhcnNlIHVuaWNvZGUgcmFuZ2UgZmlyc3QKLSAgICAgICAgVW5pY29kZVJhbmdlIHJhbmdlOwot
ICAgICAgICBpZiAocGFyc2VVbmljb2RlUmFuZ2UoaW5wdXRTdGFydCwgcHRyIC0gaW5wdXRTdGFy
dCwgcmFuZ2UpKQotICAgICAgICAgICAgcmFuZ2VMaXN0LmFwcGVuZChyYW5nZSk7CisgICAgICAg
IGlmIChhdXRvIHJhbmdlID0gcGFyc2VVbmljb2RlUmFuZ2UoaW5wdXRTdGFydCwgcHRyIC0gaW5w
dXRTdGFydCkpCisgICAgICAgICAgICByYW5nZUxpc3QuYXBwZW5kKFdURk1vdmUoKnJhbmdlKSk7
CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHN0cmluZ0xpc3QuYWRkKFN0cmluZyhpbnB1dFN0
YXJ0LCBwdHIgLSBpbnB1dFN0YXJ0KSk7CiAgICAgICAgICsrcHRyOwogICAgIH0KIAotICAgIHJl
dHVybiB0cnVlOworICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihyYW5nZUxpc3QsIHN0cmluZ0xp
c3QpOwogfQogCi1WZWN0b3I8U3RyaW5nPiBwYXJzZURlbGltaXRlZFN0cmluZyhjb25zdCBTdHJp
bmcmIGlucHV0LCBjb25zdCBjaGFyIHNlcGVyYXRvcikKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlPiBzdGF0aWMgT3B0aW9uYWw8RmxvYXRQb2ludD4gZ2VuZXJpY1BhcnNlRmxvYXRQ
b2ludChjb25zdCBDaGFyYWN0ZXJUeXBlKiYgY3VycmVudCwgY29uc3QgQ2hhcmFjdGVyVHlwZSog
ZW5kKQogewotICAgIFZlY3RvcjxTdHJpbmc+IHZhbHVlczsKLQotICAgIGF1dG8gdXBjb252ZXJ0
ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyhpbnB1dCkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7
Ci0gICAgY29uc3QgVUNoYXIqIHB0ciA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKLSAgICBjb25z
dCBVQ2hhciogZW5kID0gcHRyICsgaW5wdXQubGVuZ3RoKCk7Ci0gICAgc2tpcE9wdGlvbmFsU1ZH
U3BhY2VzKHB0ciwgZW5kKTsKLQotICAgIHdoaWxlIChwdHIgPCBlbmQpIHsKLSAgICAgICAgLy8g
TGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGUgc3BhY2UsIGFuZCB3aGl0ZSBzcGFjZSBiZWZvcmUg
YW5kIGFmdGVyIHNlbWljb2xvbiBzZXBhcmF0b3JzLCB3aWxsIGJlIGlnbm9yZWQuCi0gICAgICAg
IGNvbnN0IFVDaGFyKiBpbnB1dFN0YXJ0ID0gcHRyOwotICAgICAgICB3aGlsZSAocHRyIDwgZW5k
ICYmICpwdHIgIT0gc2VwZXJhdG9yKSAvLyBjYXJlZnVsIG5vdCB0byBpZ25vcmUgd2hpdGVzcGFj
ZSBpbnNpZGUgaW5wdXRzCi0gICAgICAgICAgICBwdHIrKzsKKyAgICBhdXRvIHggPSBwYXJzZU51
bWJlcihjdXJyZW50LCBlbmQpOworICAgIGlmICgheCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIAotICAgICAgICBpZiAocHRyID09IGlucHV0U3RhcnQpCi0gICAgICAgICAgICBicmVh
azsKLQotICAgICAgICAvLyB3YWxrIGJhY2t3YXJkcyBmcm9tIHRoZSA7IHRvIGlnbm9yZSBhbnkg
d2hpdGVzcGFjZQotICAgICAgICBjb25zdCBVQ2hhciogaW5wdXRFbmQgPSBwdHIgLSAxOwotICAg
ICAgICB3aGlsZSAoaW5wdXRTdGFydCA8IGlucHV0RW5kICYmIGlzU1ZHU3BhY2UoKmlucHV0RW5k
KSkKLSAgICAgICAgICAgIGlucHV0RW5kLS07CisgICAgYXV0byB5ID0gcGFyc2VOdW1iZXIoY3Vy
cmVudCwgZW5kKTsKKyAgICBpZiAoIXkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAK
LSAgICAgICAgdmFsdWVzLmFwcGVuZChTdHJpbmcoaW5wdXRTdGFydCwgaW5wdXRFbmQgLSBpbnB1
dFN0YXJ0ICsgMSkpOwotICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXNPckRlbGltaXRlcihw
dHIsIGVuZCwgc2VwZXJhdG9yKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdmFsdWVzOworICAgIHJl
dHVybiBGbG9hdFBvaW50IHsgKngsICp5IH07CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlPgotYm9vbCBwYXJzZUZsb2F0UG9pbnQoY29uc3QgQ2hhcmFjdGVyVHlwZSomIGN1
cnJlbnQsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCwgRmxvYXRQb2ludCYgcG9pbnQpCitPcHRp
b25hbDxGbG9hdFBvaW50PiBwYXJzZUZsb2F0UG9pbnQoY29uc3QgTENoYXIqJiBjdXJyZW50LCBj
b25zdCBMQ2hhciogZW5kKQogewotICAgIGZsb2F0IHg7Ci0gICAgZmxvYXQgeTsKLSAgICBpZiAo
IXBhcnNlTnVtYmVyKGN1cnJlbnQsIGVuZCwgeCkKLSAgICAgICAgfHwgIXBhcnNlTnVtYmVyKGN1
cnJlbnQsIGVuZCwgeSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBwb2ludCA9IEZsb2F0
UG9pbnQoeCwgeSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXRlbXBsYXRlIGJvb2wgcGFyc2VG
bG9hdFBvaW50KGNvbnN0IExDaGFyKiYgY3VycmVudCwgY29uc3QgTENoYXIqIGVuZCwgRmxvYXRQ
b2ludCYgcG9pbnQxKTsKLXRlbXBsYXRlIGJvb2wgcGFyc2VGbG9hdFBvaW50KGNvbnN0IFVDaGFy
KiYgY3VycmVudCwgY29uc3QgVUNoYXIqIGVuZCwgRmxvYXRQb2ludCYgcG9pbnQxKTsKLQotdGVt
cGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1pbmxpbmUgYm9vbCBwYXJzZUZsb2F0UG9p
bnQyKGNvbnN0IENoYXJhY3RlclR5cGUqJiBjdXJyZW50LCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBl
bmQsIEZsb2F0UG9pbnQmIHBvaW50MSwgRmxvYXRQb2ludCYgcG9pbnQyKQotewotICAgIGZsb2F0
IHgxOwotICAgIGZsb2F0IHkxOwotICAgIGZsb2F0IHgyOwotICAgIGZsb2F0IHkyOwotICAgIGlm
ICghcGFyc2VOdW1iZXIoY3VycmVudCwgZW5kLCB4MSkKLSAgICAgICAgfHwgIXBhcnNlTnVtYmVy
KGN1cnJlbnQsIGVuZCwgeTEpCi0gICAgICAgIHx8ICFwYXJzZU51bWJlcihjdXJyZW50LCBlbmQs
IHgyKQotICAgICAgICB8fCAhcGFyc2VOdW1iZXIoY3VycmVudCwgZW5kLCB5MikpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBwb2ludDEgPSBGbG9hdFBvaW50KHgxLCB5MSk7Ci0gICAgcG9p
bnQyID0gRmxvYXRQb2ludCh4MiwgeTIpOwotICAgIHJldHVybiB0cnVlOwotfQotCi10ZW1wbGF0
ZSBib29sIHBhcnNlRmxvYXRQb2ludDIoY29uc3QgTENoYXIqJiBjdXJyZW50LCBjb25zdCBMQ2hh
ciogZW5kLCBGbG9hdFBvaW50JiBwb2ludDEsIEZsb2F0UG9pbnQmIHBvaW50Mik7Ci10ZW1wbGF0
ZSBib29sIHBhcnNlRmxvYXRQb2ludDIoY29uc3QgVUNoYXIqJiBjdXJyZW50LCBjb25zdCBVQ2hh
ciogZW5kLCBGbG9hdFBvaW50JiBwb2ludDEsIEZsb2F0UG9pbnQmIHBvaW50Mik7Ci0KLXRlbXBs
YXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotYm9vbCBwYXJzZUZsb2F0UG9pbnQzKGNvbnN0
IENoYXJhY3RlclR5cGUqJiBjdXJyZW50LCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQsIEZsb2F0
UG9pbnQmIHBvaW50MSwgRmxvYXRQb2ludCYgcG9pbnQyLCBGbG9hdFBvaW50JiBwb2ludDMpCi17
Ci0gICAgZmxvYXQgeDE7Ci0gICAgZmxvYXQgeTE7Ci0gICAgZmxvYXQgeDI7Ci0gICAgZmxvYXQg
eTI7Ci0gICAgZmxvYXQgeDM7Ci0gICAgZmxvYXQgeTM7Ci0gICAgaWYgKCFwYXJzZU51bWJlcihj
dXJyZW50LCBlbmQsIHgxKQotICAgICAgICB8fCAhcGFyc2VOdW1iZXIoY3VycmVudCwgZW5kLCB5
MSkKLSAgICAgICAgfHwgIXBhcnNlTnVtYmVyKGN1cnJlbnQsIGVuZCwgeDIpCi0gICAgICAgIHx8
ICFwYXJzZU51bWJlcihjdXJyZW50LCBlbmQsIHkyKQotICAgICAgICB8fCAhcGFyc2VOdW1iZXIo
Y3VycmVudCwgZW5kLCB4MykKLSAgICAgICAgfHwgIXBhcnNlTnVtYmVyKGN1cnJlbnQsIGVuZCwg
eTMpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcG9pbnQxID0gRmxvYXRQb2ludCh4MSwg
eTEpOwotICAgIHBvaW50MiA9IEZsb2F0UG9pbnQoeDIsIHkyKTsKLSAgICBwb2ludDMgPSBGbG9h
dFBvaW50KHgzLCB5Myk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGdlbmVyaWNQYXJz
ZUZsb2F0UG9pbnQoY3VycmVudCwgZW5kKTsKIH0KIAotdGVtcGxhdGUgYm9vbCBwYXJzZUZsb2F0
UG9pbnQzKGNvbnN0IExDaGFyKiYgY3VycmVudCwgY29uc3QgTENoYXIqIGVuZCwgRmxvYXRQb2lu
dCYgcG9pbnQxLCBGbG9hdFBvaW50JiBwb2ludDIsIEZsb2F0UG9pbnQmIHBvaW50Myk7Ci10ZW1w
bGF0ZSBib29sIHBhcnNlRmxvYXRQb2ludDMoY29uc3QgVUNoYXIqJiBjdXJyZW50LCBjb25zdCBV
Q2hhciogZW5kLCBGbG9hdFBvaW50JiBwb2ludDEsIEZsb2F0UG9pbnQmIHBvaW50MiwgRmxvYXRQ
b2ludCYgcG9pbnQzKTsKK09wdGlvbmFsPEZsb2F0UG9pbnQ+IHBhcnNlRmxvYXRQb2ludChjb25z
dCBVQ2hhciomIGN1cnJlbnQsIGNvbnN0IFVDaGFyKiBlbmQpCit7CisgICAgcmV0dXJuIGdlbmVy
aWNQYXJzZUZsb2F0UG9pbnQoY3VycmVudCwgZW5kKTsKK30KIAogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdQYXJzZXJVdGlsaXRpZXMuaAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3
ICsyNSw3IEBACiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgogCi10eXBlZGVmIHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+IFVuaWNv
ZGVSYW5nZTsKK3R5cGVkZWYgc3RkOjpwYWlyPFVDaGFyMzIsIFVDaGFyMzI+IFVuaWNvZGVSYW5n
ZTsKIHR5cGVkZWYgVmVjdG9yPFVuaWNvZGVSYW5nZT4gVW5pY29kZVJhbmdlczsKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpAQCAtMzMsNDIgKzMzLDQ1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNs
YXNzIEZsb2F0UG9pbnQ7CiBjbGFzcyBGbG9hdFJlY3Q7CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBD
aGFyYWN0ZXJUeXBlPgotYm9vbCBwYXJzZVNWR051bWJlcihDaGFyYWN0ZXJUeXBlKiBwdHIsIHNp
emVfdCBsZW5ndGgsIGRvdWJsZSYgbnVtYmVyKTsKLWJvb2wgcGFyc2VOdW1iZXIoY29uc3QgTENo
YXIqJiBwdHIsIGNvbnN0IExDaGFyKiBlbmQsIGZsb2F0JiBudW1iZXIsIGJvb2wgc2tpcCA9IHRy
dWUpOwotYm9vbCBwYXJzZU51bWJlcihjb25zdCBVQ2hhciomIHB0ciwgY29uc3QgVUNoYXIqIGVu
ZCwgZmxvYXQmIG51bWJlciwgYm9vbCBza2lwID0gdHJ1ZSk7Ci1ib29sIHBhcnNlTnVtYmVyRnJv
bVN0cmluZyhjb25zdCBTdHJpbmcmLCBmbG9hdCYgbnVtYmVyLCBib29sIHNraXAgPSB0cnVlKTsK
LWJvb2wgcGFyc2VOdW1iZXJPcHRpb25hbE51bWJlcihjb25zdCBTdHJpbmcmIHMsIGZsb2F0JiBo
LCBmbG9hdCYgdik7Ci1ib29sIHBhcnNlQXJjRmxhZyhjb25zdCBMQ2hhciomIHB0ciwgY29uc3Qg
TENoYXIqIGVuZCwgYm9vbCYgZmxhZyk7Ci1ib29sIHBhcnNlQXJjRmxhZyhjb25zdCBVQ2hhciom
IHB0ciwgY29uc3QgVUNoYXIqIGVuZCwgYm9vbCYgZmxhZyk7Ci1ib29sIHBhcnNlUG9pbnQoY29u
c3QgU3RyaW5nJiwgRmxvYXRQb2ludCYpOwotYm9vbCBwYXJzZVJlY3QoY29uc3QgU3RyaW5nJiwg
RmxvYXRSZWN0Jik7Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotYm9vbCBw
YXJzZUZsb2F0UG9pbnQoY29uc3QgQ2hhcmFjdGVyVHlwZSomIGN1cnJlbnQsIGNvbnN0IENoYXJh
Y3RlclR5cGUqIGVuZCwgRmxvYXRQb2ludCYpOwotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+Ci1ib29sIHBhcnNlRmxvYXRQb2ludDIoY29uc3QgQ2hhcmFjdGVyVHlwZSomIGN1cnJl
bnQsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCwgRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmKTsK
LXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotYm9vbCBwYXJzZUZsb2F0UG9pbnQz
KGNvbnN0IENoYXJhY3RlclR5cGUqJiBjdXJyZW50LCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQs
IEZsb2F0UG9pbnQmLCBGbG9hdFBvaW50JiwgRmxvYXRQb2ludCYpOworZW51bSBjbGFzcyBTdWZm
aXhTa2lwcGluZ1BvbGljeSB7CisgICAgRG9udFNraXAsCisgICAgU2tpcAorfTsKKworT3B0aW9u
YWw8ZmxvYXQ+IHBhcnNlTnVtYmVyKGNvbnN0IExDaGFyKiYgY3VycmVudCwgY29uc3QgTENoYXIq
IGVuZCwgU3VmZml4U2tpcHBpbmdQb2xpY3kgPSBTdWZmaXhTa2lwcGluZ1BvbGljeTo6U2tpcCk7
CitPcHRpb25hbDxmbG9hdD4gcGFyc2VOdW1iZXIoY29uc3QgVUNoYXIqJiBjdXJyZW50LCBjb25z
dCBVQ2hhciogZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeSA9IFN1ZmZpeFNraXBwaW5nUG9saWN5
OjpTa2lwKTsKK09wdGlvbmFsPGZsb2F0PiBwYXJzZU51bWJlcihjb25zdCBTdHJpbmcmLCBTdWZm
aXhTa2lwcGluZ1BvbGljeSA9IFN1ZmZpeFNraXBwaW5nUG9saWN5OjpTa2lwKTsKKworT3B0aW9u
YWw8c3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4+IHBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIoY29u
c3QgU3RyaW5nJik7CisKK09wdGlvbmFsPGJvb2w+IHBhcnNlQXJjRmxhZyhjb25zdCBMQ2hhciom
IGN1cnJlbnQsIGNvbnN0IExDaGFyKiBlbmQpOworT3B0aW9uYWw8Ym9vbD4gcGFyc2VBcmNGbGFn
KGNvbnN0IFVDaGFyKiYgY3VycmVudCwgY29uc3QgVUNoYXIqIGVuZCk7CisKK09wdGlvbmFsPEZs
b2F0UG9pbnQ+IHBhcnNlUG9pbnQoY29uc3QgU3RyaW5nJik7CitPcHRpb25hbDxGbG9hdFJlY3Q+
IHBhcnNlUmVjdChjb25zdCBTdHJpbmcmKTsKKworT3B0aW9uYWw8RmxvYXRQb2ludD4gcGFyc2VG
bG9hdFBvaW50KGNvbnN0IExDaGFyKiYgY3VycmVudCwgY29uc3QgTENoYXIqIGVuZCk7CitPcHRp
b25hbDxGbG9hdFBvaW50PiBwYXJzZUZsb2F0UG9pbnQoY29uc3QgVUNoYXIqJiBjdXJyZW50LCBj
b25zdCBVQ2hhciogZW5kKTsKKworT3B0aW9uYWw8c3RkOjpwYWlyPFVuaWNvZGVSYW5nZXMsIEhh
c2hTZXQ8U3RyaW5nPj4+IHBhcnNlS2VybmluZ1VuaWNvZGVTdHJpbmcoY29uc3QgU3RyaW5nJik7
CitPcHRpb25hbDxIYXNoU2V0PFN0cmluZz4+IHBhcnNlR2x5cGhOYW1lKGNvbnN0IFN0cmluZyYp
OworCiAKIC8vIFNWRyBhbGxvd3Mgc2V2ZXJhbCBkaWZmZXJlbnQgd2hpdGVzcGFjZSBjaGFyYWN0
ZXJzOgogLy8gaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHL3BhdGhzLmh0bWwjUGF0aERhdGFCTkYK
LXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotaW5saW5lIGJvb2wgaXNTVkdTcGFj
ZShDaGFyYWN0ZXJUeXBlIGMpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBpbmxp
bmUgYm9vbCBpc1NWR1NwYWNlKENoYXJhY3RlclR5cGUgYykKIHsKICAgICByZXR1cm4gYyA9PSAn
ICcgfHwgYyA9PSAnXHQnIHx8IGMgPT0gJ1xuJyB8fCBjID09ICdccic7CiB9CiAKLXRlbXBsYXRl
IDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotaW5saW5lIGJvb2wgc2tpcE9wdGlvbmFsU1ZHU3Bh
Y2VzKGNvbnN0IENoYXJhY3RlclR5cGUqJiBwdHIsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCkK
K3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGlubGluZSBib29sIHNraXBPcHRpb25h
bFNWR1NwYWNlcyhjb25zdCBDaGFyYWN0ZXJUeXBlKiYgcHRyLCBjb25zdCBDaGFyYWN0ZXJUeXBl
KiBlbmQpCiB7CiAgICAgd2hpbGUgKHB0ciA8IGVuZCAmJiBpc1NWR1NwYWNlKCpwdHIpKQogICAg
ICAgICBwdHIrKzsKICAgICByZXR1cm4gcHRyIDwgZW5kOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZT4KLWlubGluZSBib29sIHNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVs
aW1pdGVyKGNvbnN0IENoYXJhY3RlclR5cGUqJiBwdHIsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVu
ZCwgY2hhciBkZWxpbWl0ZXIgPSAnLCcpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBl
PiBpbmxpbmUgYm9vbCBza2lwT3B0aW9uYWxTVkdTcGFjZXNPckRlbGltaXRlcihjb25zdCBDaGFy
YWN0ZXJUeXBlKiYgcHRyLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQsIGNoYXIgZGVsaW1pdGVy
ID0gJywnKQogewogICAgIGlmIChwdHIgPCBlbmQgJiYgIWlzU1ZHU3BhY2UoKnB0cikgJiYgKnB0
ciAhPSBkZWxpbWl0ZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTgxLDEwICs4NCw2IEBA
IGlubGluZSBib29sIHNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVsaW0KICAgICByZXR1cm4gcHRy
IDwgZW5kOwogfQogCi1WZWN0b3I8U3RyaW5nPiBwYXJzZURlbGltaXRlZFN0cmluZyhjb25zdCBT
dHJpbmcmIGlucHV0LCBjb25zdCBjaGFyIHNlcGVyYXRvcik7Ci1ib29sIHBhcnNlS2VybmluZ1Vu
aWNvZGVTdHJpbmcoY29uc3QgU3RyaW5nJiBpbnB1dCwgVW5pY29kZVJhbmdlcyYsIEhhc2hTZXQ8
U3RyaW5nPiYgc3RyaW5nTGlzdCk7Ci1ib29sIHBhcnNlR2x5cGhOYW1lKGNvbnN0IFN0cmluZyYg
aW5wdXQsIEhhc2hTZXQ8U3RyaW5nPiYgdmFsdWVzKTsKLQogaW5saW5lIGJvb2wgc2tpcFN0cmlu
Zyhjb25zdCBVQ2hhciomIHB0ciwgY29uc3QgVUNoYXIqIGVuZCwgY29uc3QgVUNoYXIqIG5hbWUs
IGludCBsZW5ndGgpCiB7CiAgICAgaWYgKGVuZCAtIHB0ciA8IGxlbmd0aCkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQmxlbmRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1BhdGhCbGVuZGVyLmNwcAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1BhdGhCbGVuZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDIw
MCArMTE2LDE5OCBAQCBGbG9hdFBvaW50IFNWR1BhdGhCbGVuZGVyOjpibGVuZEFuaW1hdGVkCiAg
ICAgcmV0dXJuIGFuaW1hdGVkUG9pbnQ7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9u
PiB1c2luZyBQdWxsRnJvbVNvdXJjZXNSZXN1bHQgPSBzdGQ6OnBhaXI8dHlwZW5hbWUgc3RkOjpp
bnZva2VfcmVzdWx0X3Q8RnVuY3Rpb24sIFNWR1BhdGhTb3VyY2U+Ojp2YWx1ZV90eXBlLCB0eXBl
bmFtZSBzdGQ6Omludm9rZV9yZXN1bHRfdDxGdW5jdGlvbiwgU1ZHUGF0aFNvdXJjZT46OnZhbHVl
X3R5cGU+OwordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb24+IHN0YXRpYyBPcHRpb25hbDxQdWxs
RnJvbVNvdXJjZXNSZXN1bHQ8RnVuY3Rpb24+PiBwdWxsRnJvbVNvdXJjZXMoU1ZHUGF0aFNvdXJj
ZSYgZnJvbVNvdXJjZSwgU1ZHUGF0aFNvdXJjZSYgdG9Tb3VyY2UsIEZ1bmN0aW9uJiYgZnVuY3Rp
b24pCit7CisgICAgaWYgKCFmcm9tU291cmNlLmhhc01vcmVEYXRhKCkpCisgICAgICAgIHJldHVy
biBQdWxsRnJvbVNvdXJjZXNSZXN1bHQ8RnVuY3Rpb24+IHsgfTsKKworICAgIGF1dG8gcGFyc2Vk
RnJvbSA9IHN0ZDo6aW52b2tlKGZ1bmN0aW9uLCBmcm9tU291cmNlKTsKKyAgICBpZiAoIXBhcnNl
ZEZyb20pCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgYXV0byBwYXJzZWRUbyA9
IHN0ZDo6aW52b2tlKGZ1bmN0aW9uLCB0b1NvdXJjZSk7CisgICAgaWYgKCFwYXJzZWRUbykKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIHJldHVybiBQdWxsRnJvbVNvdXJjZXNS
ZXN1bHQ8RnVuY3Rpb24+IHsgV1RGTW92ZSgqcGFyc2VkRnJvbSksIFdURk1vdmUoKnBhcnNlZFRv
KSB9OworfQorCiBib29sIFNWR1BhdGhCbGVuZGVyOjpibGVuZE1vdmVUb1NlZ21lbnQoZmxvYXQg
cHJvZ3Jlc3MpCiB7Ci0gICAgRmxvYXRQb2ludCBmcm9tVGFyZ2V0UG9pbnQ7Ci0gICAgRmxvYXRQ
b2ludCB0b1RhcmdldFBvaW50OwotICAgIGlmICgobV9mcm9tU291cmNlLmhhc01vcmVEYXRhKCkg
JiYgIW1fZnJvbVNvdXJjZS5wYXJzZU1vdmVUb1NlZ21lbnQoZnJvbVRhcmdldFBvaW50KSkKLSAg
ICAgICAgfHwgIW1fdG9Tb3VyY2UucGFyc2VNb3ZlVG9TZWdtZW50KHRvVGFyZ2V0UG9pbnQpKQor
ICAgIGF1dG8gcmVzdWx0ID0gcHVsbEZyb21Tb3VyY2VzKG1fZnJvbVNvdXJjZSwgbV90b1NvdXJj
ZSwgJlNWR1BhdGhTb3VyY2U6OnBhcnNlTW92ZVRvU2VnbWVudCk7CisgICAgaWYgKCFyZXN1bHQp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmICghbV9jb25zdW1lcikKICAgICAgICAg
cmV0dXJuIHRydWU7CiAKLSAgICBtX2NvbnN1bWVyLT5tb3ZlVG8oYmxlbmRBbmltYXRlZEZsb2F0
UG9pbnQoZnJvbVRhcmdldFBvaW50LCB0b1RhcmdldFBvaW50LCBwcm9ncmVzcyksIGZhbHNlLCBt
X2lzSW5GaXJzdEhhbGZPZkFuaW1hdGlvbiA/IG1fZnJvbU1vZGUgOiBtX3RvTW9kZSk7Ci0gICAg
bV9mcm9tQ3VycmVudFBvaW50ID0gbV9mcm9tTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8g
ZnJvbVRhcmdldFBvaW50IDogbV9mcm9tQ3VycmVudFBvaW50ICsgZnJvbVRhcmdldFBvaW50Owot
ICAgIG1fdG9DdXJyZW50UG9pbnQgPSBtX3RvTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8g
dG9UYXJnZXRQb2ludCA6IG1fdG9DdXJyZW50UG9pbnQgKyB0b1RhcmdldFBvaW50OworICAgIGF1
dG8gW2Zyb20sIHRvXSA9ICpyZXN1bHQ7CisKKyAgICBtX2NvbnN1bWVyLT5tb3ZlVG8oYmxlbmRB
bmltYXRlZEZsb2F0UG9pbnQoZnJvbS50YXJnZXRQb2ludCwgdG8udGFyZ2V0UG9pbnQsIHByb2dy
ZXNzKSwgZmFsc2UsIG1faXNJbkZpcnN0SGFsZk9mQW5pbWF0aW9uID8gbV9mcm9tTW9kZSA6IG1f
dG9Nb2RlKTsKKyAgICBtX2Zyb21DdXJyZW50UG9pbnQgPSBtX2Zyb21Nb2RlID09IEFic29sdXRl
Q29vcmRpbmF0ZXMgPyBmcm9tLnRhcmdldFBvaW50IDogbV9mcm9tQ3VycmVudFBvaW50ICsgZnJv
bS50YXJnZXRQb2ludDsKKyAgICBtX3RvQ3VycmVudFBvaW50ID0gbV90b01vZGUgPT0gQWJzb2x1
dGVDb29yZGluYXRlcyA/IHRvLnRhcmdldFBvaW50IDogbV90b0N1cnJlbnRQb2ludCArIHRvLnRh
cmdldFBvaW50OwogICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIFNWR1BhdGhCbGVuZGVyOjpi
bGVuZExpbmVUb1NlZ21lbnQoZmxvYXQgcHJvZ3Jlc3MpCiB7Ci0gICAgRmxvYXRQb2ludCBmcm9t
VGFyZ2V0UG9pbnQ7Ci0gICAgRmxvYXRQb2ludCB0b1RhcmdldFBvaW50OwotICAgIGlmICgobV9m
cm9tU291cmNlLmhhc01vcmVEYXRhKCkgJiYgIW1fZnJvbVNvdXJjZS5wYXJzZUxpbmVUb1NlZ21l
bnQoZnJvbVRhcmdldFBvaW50KSkKLSAgICAgICAgfHwgIW1fdG9Tb3VyY2UucGFyc2VMaW5lVG9T
ZWdtZW50KHRvVGFyZ2V0UG9pbnQpKQorICAgIGF1dG8gcmVzdWx0ID0gcHVsbEZyb21Tb3VyY2Vz
KG1fZnJvbVNvdXJjZSwgbV90b1NvdXJjZSwgJlNWR1BhdGhTb3VyY2U6OnBhcnNlTGluZVRvU2Vn
bWVudCk7CisgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlm
ICghbV9jb25zdW1lcikKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBtX2NvbnN1bWVyLT5s
aW5lVG8oYmxlbmRBbmltYXRlZEZsb2F0UG9pbnQoZnJvbVRhcmdldFBvaW50LCB0b1RhcmdldFBv
aW50LCBwcm9ncmVzcyksIG1faXNJbkZpcnN0SGFsZk9mQW5pbWF0aW9uID8gbV9mcm9tTW9kZSA6
IG1fdG9Nb2RlKTsKLSAgICBtX2Zyb21DdXJyZW50UG9pbnQgPSBtX2Zyb21Nb2RlID09IEFic29s
dXRlQ29vcmRpbmF0ZXMgPyBmcm9tVGFyZ2V0UG9pbnQgOiBtX2Zyb21DdXJyZW50UG9pbnQgKyBm
cm9tVGFyZ2V0UG9pbnQ7Ci0gICAgbV90b0N1cnJlbnRQb2ludCA9IG1fdG9Nb2RlID09IEFic29s
dXRlQ29vcmRpbmF0ZXMgPyB0b1RhcmdldFBvaW50IDogbV90b0N1cnJlbnRQb2ludCArIHRvVGFy
Z2V0UG9pbnQ7CisgICAgYXV0byBbZnJvbSwgdG9dID0gKnJlc3VsdDsKKworICAgIG1fY29uc3Vt
ZXItPmxpbmVUbyhibGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tLnRhcmdldFBvaW50LCB0by50
YXJnZXRQb2ludCwgcHJvZ3Jlc3MpLCBtX2lzSW5GaXJzdEhhbGZPZkFuaW1hdGlvbiA/IG1fZnJv
bU1vZGUgOiBtX3RvTW9kZSk7CisgICAgbV9mcm9tQ3VycmVudFBvaW50ID0gbV9mcm9tTW9kZSA9
PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gZnJvbS50YXJnZXRQb2ludCA6IG1fZnJvbUN1cnJlbnRQ
b2ludCArIGZyb20udGFyZ2V0UG9pbnQ7CisgICAgbV90b0N1cnJlbnRQb2ludCA9IG1fdG9Nb2Rl
ID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyB0by50YXJnZXRQb2ludCA6IG1fdG9DdXJyZW50UG9p
bnQgKyB0by50YXJnZXRQb2ludDsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBTVkdQYXRo
QmxlbmRlcjo6YmxlbmRMaW5lVG9Ib3Jpem9udGFsU2VnbWVudChmbG9hdCBwcm9ncmVzcykKIHsK
LSAgICBmbG9hdCBmcm9tWCA9IDA7Ci0gICAgZmxvYXQgdG9YID0gMDsKLSAgICBpZiAoKG1fZnJv
bVNvdXJjZS5oYXNNb3JlRGF0YSgpICYmICFtX2Zyb21Tb3VyY2UucGFyc2VMaW5lVG9Ib3Jpem9u
dGFsU2VnbWVudChmcm9tWCkpCi0gICAgICAgIHx8ICFtX3RvU291cmNlLnBhcnNlTGluZVRvSG9y
aXpvbnRhbFNlZ21lbnQodG9YKSkKKyAgICBhdXRvIHJlc3VsdCA9IHB1bGxGcm9tU291cmNlcyht
X2Zyb21Tb3VyY2UsIG1fdG9Tb3VyY2UsICZTVkdQYXRoU291cmNlOjpwYXJzZUxpbmVUb0hvcml6
b250YWxTZWdtZW50KTsKKyAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgaWYgKCFtX2NvbnN1bWVyKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIG1fY29u
c3VtZXItPmxpbmVUb0hvcml6b250YWwoYmxlbmRBbmltYXRlZERpbWVuc29uYWxGbG9hdChmcm9t
WCwgdG9YLCBCbGVuZEhvcml6b250YWwsIHByb2dyZXNzKSwgbV9pc0luRmlyc3RIYWxmT2ZBbmlt
YXRpb24gPyBtX2Zyb21Nb2RlIDogbV90b01vZGUpOwotICAgIG1fZnJvbUN1cnJlbnRQb2ludC5z
ZXRYKG1fZnJvbU1vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IGZyb21YIDogbV9mcm9tQ3Vy
cmVudFBvaW50LngoKSArIGZyb21YKTsKLSAgICBtX3RvQ3VycmVudFBvaW50LnNldFgobV90b01v
ZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IHRvWCA6IG1fdG9DdXJyZW50UG9pbnQueCgpICsg
dG9YKTsKKyAgICBhdXRvIFtmcm9tLCB0b10gPSAqcmVzdWx0OworCisgICAgbV9jb25zdW1lci0+
bGluZVRvSG9yaXpvbnRhbChibGVuZEFuaW1hdGVkRGltZW5zb25hbEZsb2F0KGZyb20ueCwgdG8u
eCwgQmxlbmRIb3Jpem9udGFsLCBwcm9ncmVzcyksIG1faXNJbkZpcnN0SGFsZk9mQW5pbWF0aW9u
ID8gbV9mcm9tTW9kZSA6IG1fdG9Nb2RlKTsKKyAgICBtX2Zyb21DdXJyZW50UG9pbnQuc2V0WCht
X2Zyb21Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyBmcm9tLnggOiBtX2Zyb21DdXJyZW50
UG9pbnQueCgpICsgZnJvbS54KTsKKyAgICBtX3RvQ3VycmVudFBvaW50LnNldFgobV90b01vZGUg
PT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IHRvLnggOiBtX3RvQ3VycmVudFBvaW50LngoKSArIHRv
LngpOwogICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIFNWR1BhdGhCbGVuZGVyOjpibGVuZExp
bmVUb1ZlcnRpY2FsU2VnbWVudChmbG9hdCBwcm9ncmVzcykKIHsKLSAgICBmbG9hdCBmcm9tWSA9
IDA7Ci0gICAgZmxvYXQgdG9ZID0gMDsKLSAgICBpZiAoKG1fZnJvbVNvdXJjZS5oYXNNb3JlRGF0
YSgpICYmICFtX2Zyb21Tb3VyY2UucGFyc2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnQoZnJvbVkpKQot
ICAgICAgICB8fCAhbV90b1NvdXJjZS5wYXJzZUxpbmVUb1ZlcnRpY2FsU2VnbWVudCh0b1kpKQor
ICAgIGF1dG8gcmVzdWx0ID0gcHVsbEZyb21Tb3VyY2VzKG1fZnJvbVNvdXJjZSwgbV90b1NvdXJj
ZSwgJlNWR1BhdGhTb3VyY2U6OnBhcnNlTGluZVRvVmVydGljYWxTZWdtZW50KTsKKyAgICBpZiAo
IXJlc3VsdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKCFtX2NvbnN1bWVyKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIG1fY29uc3VtZXItPmxpbmVUb1ZlcnRpY2FsKGJs
ZW5kQW5pbWF0ZWREaW1lbnNvbmFsRmxvYXQoZnJvbVksIHRvWSwgQmxlbmRWZXJ0aWNhbCwgcHJv
Z3Jlc3MpLCBtX2lzSW5GaXJzdEhhbGZPZkFuaW1hdGlvbiA/IG1fZnJvbU1vZGUgOiBtX3RvTW9k
ZSk7Ci0gICAgbV9mcm9tQ3VycmVudFBvaW50LnNldFkobV9mcm9tTW9kZSA9PSBBYnNvbHV0ZUNv
b3JkaW5hdGVzID8gZnJvbVkgOiBtX2Zyb21DdXJyZW50UG9pbnQueSgpICsgZnJvbVkpOwotICAg
IG1fdG9DdXJyZW50UG9pbnQuc2V0WShtX3RvTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8g
dG9ZIDogbV90b0N1cnJlbnRQb2ludC55KCkgKyB0b1kpOworICAgIGF1dG8gW2Zyb20sIHRvXSA9
ICpyZXN1bHQ7CisKKyAgICBtX2NvbnN1bWVyLT5saW5lVG9WZXJ0aWNhbChibGVuZEFuaW1hdGVk
RGltZW5zb25hbEZsb2F0KGZyb20ueSwgdG8ueSwgQmxlbmRWZXJ0aWNhbCwgcHJvZ3Jlc3MpLCBt
X2lzSW5GaXJzdEhhbGZPZkFuaW1hdGlvbiA/IG1fZnJvbU1vZGUgOiBtX3RvTW9kZSk7CisgICAg
bV9mcm9tQ3VycmVudFBvaW50LnNldFkobV9mcm9tTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVz
ID8gZnJvbS55IDogbV9mcm9tQ3VycmVudFBvaW50LnkoKSArIGZyb20ueSk7CisgICAgbV90b0N1
cnJlbnRQb2ludC5zZXRZKG1fdG9Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyB0by55IDog
bV90b0N1cnJlbnRQb2ludC55KCkgKyB0by55KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9v
bCBTVkdQYXRoQmxlbmRlcjo6YmxlbmRDdXJ2ZVRvQ3ViaWNTZWdtZW50KGZsb2F0IHByb2dyZXNz
KQogewotICAgIEZsb2F0UG9pbnQgZnJvbVRhcmdldFBvaW50OwotICAgIEZsb2F0UG9pbnQgZnJv
bVBvaW50MTsKLSAgICBGbG9hdFBvaW50IGZyb21Qb2ludDI7Ci0gICAgRmxvYXRQb2ludCB0b1Rh
cmdldFBvaW50OwotICAgIEZsb2F0UG9pbnQgdG9Qb2ludDE7Ci0gICAgRmxvYXRQb2ludCB0b1Bv
aW50MjsKLSAgICBpZiAoKG1fZnJvbVNvdXJjZS5oYXNNb3JlRGF0YSgpICYmICFtX2Zyb21Tb3Vy
Y2UucGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KGZyb21Qb2ludDEsIGZyb21Qb2ludDIsIGZyb21U
YXJnZXRQb2ludCkpCi0gICAgICAgIHx8ICFtX3RvU291cmNlLnBhcnNlQ3VydmVUb0N1YmljU2Vn
bWVudCh0b1BvaW50MSwgdG9Qb2ludDIsIHRvVGFyZ2V0UG9pbnQpKQorICAgIGF1dG8gcmVzdWx0
ID0gcHVsbEZyb21Tb3VyY2VzKG1fZnJvbVNvdXJjZSwgbV90b1NvdXJjZSwgJlNWR1BhdGhTb3Vy
Y2U6OnBhcnNlQ3VydmVUb0N1YmljU2VnbWVudCk7CisgICAgaWYgKCFyZXN1bHQpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIGlmICghbV9jb25zdW1lcikKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAKLSAgICBtX2NvbnN1bWVyLT5jdXJ2ZVRvQ3ViaWMoYmxlbmRBbmltYXRlZEZsb2F0UG9p
bnQoZnJvbVBvaW50MSwgdG9Qb2ludDEsIHByb2dyZXNzKSwKLSAgICAgICAgYmxlbmRBbmltYXRl
ZEZsb2F0UG9pbnQoZnJvbVBvaW50MiwgdG9Qb2ludDIsIHByb2dyZXNzKSwKLSAgICAgICAgYmxl
bmRBbmltYXRlZEZsb2F0UG9pbnQoZnJvbVRhcmdldFBvaW50LCB0b1RhcmdldFBvaW50LCBwcm9n
cmVzcyksCisgICAgYXV0byBbZnJvbSwgdG9dID0gKnJlc3VsdDsKKworICAgIG1fY29uc3VtZXIt
PmN1cnZlVG9DdWJpYyhibGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tLnBvaW50MSwgdG8ucG9p
bnQxLCBwcm9ncmVzcyksCisgICAgICAgIGJsZW5kQW5pbWF0ZWRGbG9hdFBvaW50KGZyb20ucG9p
bnQyLCB0by5wb2ludDIsIHByb2dyZXNzKSwKKyAgICAgICAgYmxlbmRBbmltYXRlZEZsb2F0UG9p
bnQoZnJvbS50YXJnZXRQb2ludCwgdG8udGFyZ2V0UG9pbnQsIHByb2dyZXNzKSwKICAgICAgICAg
bV9pc0luRmlyc3RIYWxmT2ZBbmltYXRpb24gPyBtX2Zyb21Nb2RlIDogbV90b01vZGUpOwotICAg
IG1fZnJvbUN1cnJlbnRQb2ludCA9IG1fZnJvbU1vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/
IGZyb21UYXJnZXRQb2ludCA6IG1fZnJvbUN1cnJlbnRQb2ludCArIGZyb21UYXJnZXRQb2ludDsK
LSAgICBtX3RvQ3VycmVudFBvaW50ID0gbV90b01vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/
IHRvVGFyZ2V0UG9pbnQgOiBtX3RvQ3VycmVudFBvaW50ICsgdG9UYXJnZXRQb2ludDsKKyAgICBt
X2Zyb21DdXJyZW50UG9pbnQgPSBtX2Zyb21Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyBm
cm9tLnRhcmdldFBvaW50IDogbV9mcm9tQ3VycmVudFBvaW50ICsgZnJvbS50YXJnZXRQb2ludDsK
KyAgICBtX3RvQ3VycmVudFBvaW50ID0gbV90b01vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/
IHRvLnRhcmdldFBvaW50IDogbV90b0N1cnJlbnRQb2ludCArIHRvLnRhcmdldFBvaW50OwogICAg
IHJldHVybiB0cnVlOwogfQogCiBib29sIFNWR1BhdGhCbGVuZGVyOjpibGVuZEN1cnZlVG9DdWJp
Y1Ntb290aFNlZ21lbnQoZmxvYXQgcHJvZ3Jlc3MpCiB7Ci0gICAgRmxvYXRQb2ludCBmcm9tVGFy
Z2V0UG9pbnQ7Ci0gICAgRmxvYXRQb2ludCBmcm9tUG9pbnQyOwotICAgIEZsb2F0UG9pbnQgdG9U
YXJnZXRQb2ludDsKLSAgICBGbG9hdFBvaW50IHRvUG9pbnQyOwotICAgIGlmICgobV9mcm9tU291
cmNlLmhhc01vcmVEYXRhKCkgJiYgIW1fZnJvbVNvdXJjZS5wYXJzZUN1cnZlVG9DdWJpY1Ntb290
aFNlZ21lbnQoZnJvbVBvaW50MiwgZnJvbVRhcmdldFBvaW50KSkKLSAgICAgICAgfHwgIW1fdG9T
b3VyY2UucGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KHRvUG9pbnQyLCB0b1RhcmdldFBv
aW50KSkKKyAgICBhdXRvIHJlc3VsdCA9IHB1bGxGcm9tU291cmNlcyhtX2Zyb21Tb3VyY2UsIG1f
dG9Tb3VyY2UsICZTVkdQYXRoU291cmNlOjpwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQp
OworICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoIW1f
Y29uc3VtZXIpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgbV9jb25zdW1lci0+Y3VydmVU
b0N1YmljU21vb3RoKGJsZW5kQW5pbWF0ZWRGbG9hdFBvaW50KGZyb21Qb2ludDIsIHRvUG9pbnQy
LCBwcm9ncmVzcyksCi0gICAgICAgIGJsZW5kQW5pbWF0ZWRGbG9hdFBvaW50KGZyb21UYXJnZXRQ
b2ludCwgdG9UYXJnZXRQb2ludCwgcHJvZ3Jlc3MpLAorICAgIGF1dG8gW2Zyb20sIHRvXSA9ICpy
ZXN1bHQ7CisKKyAgICBtX2NvbnN1bWVyLT5jdXJ2ZVRvQ3ViaWNTbW9vdGgoYmxlbmRBbmltYXRl
ZEZsb2F0UG9pbnQoZnJvbS5wb2ludDIsIHRvLnBvaW50MiwgcHJvZ3Jlc3MpLAorICAgICAgICBi
bGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tLnRhcmdldFBvaW50LCB0by50YXJnZXRQb2ludCwg
cHJvZ3Jlc3MpLAogICAgICAgICBtX2lzSW5GaXJzdEhhbGZPZkFuaW1hdGlvbiA/IG1fZnJvbU1v
ZGUgOiBtX3RvTW9kZSk7Ci0gICAgbV9mcm9tQ3VycmVudFBvaW50ID0gbV9mcm9tTW9kZSA9PSBB
YnNvbHV0ZUNvb3JkaW5hdGVzID8gZnJvbVRhcmdldFBvaW50IDogbV9mcm9tQ3VycmVudFBvaW50
ICsgZnJvbVRhcmdldFBvaW50OwotICAgIG1fdG9DdXJyZW50UG9pbnQgPSBtX3RvTW9kZSA9PSBB
YnNvbHV0ZUNvb3JkaW5hdGVzID8gdG9UYXJnZXRQb2ludCA6IG1fdG9DdXJyZW50UG9pbnQgKyB0
b1RhcmdldFBvaW50OworICAgIG1fZnJvbUN1cnJlbnRQb2ludCA9IG1fZnJvbU1vZGUgPT0gQWJz
b2x1dGVDb29yZGluYXRlcyA/IGZyb20udGFyZ2V0UG9pbnQgOiBtX2Zyb21DdXJyZW50UG9pbnQg
KyBmcm9tLnRhcmdldFBvaW50OworICAgIG1fdG9DdXJyZW50UG9pbnQgPSBtX3RvTW9kZSA9PSBB
YnNvbHV0ZUNvb3JkaW5hdGVzID8gdG8udGFyZ2V0UG9pbnQgOiBtX3RvQ3VycmVudFBvaW50ICsg
dG8udGFyZ2V0UG9pbnQ7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgU1ZHUGF0aEJsZW5k
ZXI6OmJsZW5kQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQoZmxvYXQgcHJvZ3Jlc3MpCiB7Ci0gICAg
RmxvYXRQb2ludCBmcm9tVGFyZ2V0UG9pbnQ7Ci0gICAgRmxvYXRQb2ludCBmcm9tUG9pbnQxOwot
ICAgIEZsb2F0UG9pbnQgdG9UYXJnZXRQb2ludDsKLSAgICBGbG9hdFBvaW50IHRvUG9pbnQxOwot
ICAgIGlmICgobV9mcm9tU291cmNlLmhhc01vcmVEYXRhKCkgJiYgIW1fZnJvbVNvdXJjZS5wYXJz
ZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KGZyb21Qb2ludDEsIGZyb21UYXJnZXRQb2ludCkpCi0g
ICAgICAgIHx8ICFtX3RvU291cmNlLnBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQodG9Qb2lu
dDEsIHRvVGFyZ2V0UG9pbnQpKQorICAgIGF1dG8gcmVzdWx0ID0gcHVsbEZyb21Tb3VyY2VzKG1f
ZnJvbVNvdXJjZSwgbV90b1NvdXJjZSwgJlNWR1BhdGhTb3VyY2U6OnBhcnNlQ3VydmVUb1F1YWRy
YXRpY1NlZ21lbnQpOworICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICBpZiAoIW1fY29uc3VtZXIpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgbV9jb25z
dW1lci0+Y3VydmVUb1F1YWRyYXRpYyhibGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tUG9pbnQx
LCB0b1BvaW50MSwgcHJvZ3Jlc3MpLAotICAgICAgICBibGVuZEFuaW1hdGVkRmxvYXRQb2ludChm
cm9tVGFyZ2V0UG9pbnQsIHRvVGFyZ2V0UG9pbnQsIHByb2dyZXNzKSwKKyAgICBhdXRvIFtmcm9t
LCB0b10gPSAqcmVzdWx0OworCisgICAgbV9jb25zdW1lci0+Y3VydmVUb1F1YWRyYXRpYyhibGVu
ZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tLnBvaW50MSwgdG8ucG9pbnQxLCBwcm9ncmVzcyksCisg
ICAgICAgIGJsZW5kQW5pbWF0ZWRGbG9hdFBvaW50KGZyb20udGFyZ2V0UG9pbnQsIHRvLnRhcmdl
dFBvaW50LCBwcm9ncmVzcyksCiAgICAgICAgIG1faXNJbkZpcnN0SGFsZk9mQW5pbWF0aW9uID8g
bV9mcm9tTW9kZSA6IG1fdG9Nb2RlKTsKLSAgICBtX2Zyb21DdXJyZW50UG9pbnQgPSBtX2Zyb21N
b2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyBmcm9tVGFyZ2V0UG9pbnQgOiBtX2Zyb21DdXJy
ZW50UG9pbnQgKyBmcm9tVGFyZ2V0UG9pbnQ7Ci0gICAgbV90b0N1cnJlbnRQb2ludCA9IG1fdG9N
b2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyB0b1RhcmdldFBvaW50IDogbV90b0N1cnJlbnRQ
b2ludCArIHRvVGFyZ2V0UG9pbnQ7CisgICAgbV9mcm9tQ3VycmVudFBvaW50ID0gbV9mcm9tTW9k
ZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gZnJvbS50YXJnZXRQb2ludCA6IG1fZnJvbUN1cnJl
bnRQb2ludCArIGZyb20udGFyZ2V0UG9pbnQ7CisgICAgbV90b0N1cnJlbnRQb2ludCA9IG1fdG9N
b2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyB0by50YXJnZXRQb2ludCA6IG1fdG9DdXJyZW50
UG9pbnQgKyB0by50YXJnZXRQb2ludDsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBTVkdQ
YXRoQmxlbmRlcjo6YmxlbmRDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudChmbG9hdCBwcm9n
cmVzcykKIHsKLSAgICBGbG9hdFBvaW50IGZyb21UYXJnZXRQb2ludDsKLSAgICBGbG9hdFBvaW50
IHRvVGFyZ2V0UG9pbnQ7Ci0gICAgaWYgKChtX2Zyb21Tb3VyY2UuaGFzTW9yZURhdGEoKSAmJiAh
bV9mcm9tU291cmNlLnBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQoZnJvbVRhcmdl
dFBvaW50KSkKLSAgICAgICAgfHwgIW1fdG9Tb3VyY2UucGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21v
b3RoU2VnbWVudCh0b1RhcmdldFBvaW50KSkKKyAgICBhdXRvIHJlc3VsdCA9IHB1bGxGcm9tU291
cmNlcyhtX2Zyb21Tb3VyY2UsIG1fdG9Tb3VyY2UsICZTVkdQYXRoU291cmNlOjpwYXJzZUN1cnZl
VG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KTsKKyAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgaWYgKCFtX2NvbnN1bWVyKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
IAotICAgIG1fY29uc3VtZXItPmN1cnZlVG9RdWFkcmF0aWNTbW9vdGgoYmxlbmRBbmltYXRlZEZs
b2F0UG9pbnQoZnJvbVRhcmdldFBvaW50LCB0b1RhcmdldFBvaW50LCBwcm9ncmVzcyksIG1faXNJ
bkZpcnN0SGFsZk9mQW5pbWF0aW9uID8gbV9mcm9tTW9kZSA6IG1fdG9Nb2RlKTsKLSAgICBtX2Zy
b21DdXJyZW50UG9pbnQgPSBtX2Zyb21Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyBmcm9t
VGFyZ2V0UG9pbnQgOiBtX2Zyb21DdXJyZW50UG9pbnQgKyBmcm9tVGFyZ2V0UG9pbnQ7Ci0gICAg
bV90b0N1cnJlbnRQb2ludCA9IG1fdG9Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyB0b1Rh
cmdldFBvaW50IDogbV90b0N1cnJlbnRQb2ludCArIHRvVGFyZ2V0UG9pbnQ7CisgICAgYXV0byBb
ZnJvbSwgdG9dID0gKnJlc3VsdDsKKworICAgIG1fY29uc3VtZXItPmN1cnZlVG9RdWFkcmF0aWNT
bW9vdGgoYmxlbmRBbmltYXRlZEZsb2F0UG9pbnQoZnJvbS50YXJnZXRQb2ludCwgdG8udGFyZ2V0
UG9pbnQsIHByb2dyZXNzKSwgbV9pc0luRmlyc3RIYWxmT2ZBbmltYXRpb24gPyBtX2Zyb21Nb2Rl
IDogbV90b01vZGUpOworICAgIG1fZnJvbUN1cnJlbnRQb2ludCA9IG1fZnJvbU1vZGUgPT0gQWJz
b2x1dGVDb29yZGluYXRlcyA/IGZyb20udGFyZ2V0UG9pbnQgOiBtX2Zyb21DdXJyZW50UG9pbnQg
KyBmcm9tLnRhcmdldFBvaW50OworICAgIG1fdG9DdXJyZW50UG9pbnQgPSBtX3RvTW9kZSA9PSBB
YnNvbHV0ZUNvb3JkaW5hdGVzID8gdG8udGFyZ2V0UG9pbnQgOiBtX3RvQ3VycmVudFBvaW50ICsg
dG8udGFyZ2V0UG9pbnQ7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgU1ZHUGF0aEJsZW5k
ZXI6OmJsZW5kQXJjVG9TZWdtZW50KGZsb2F0IHByb2dyZXNzKQogewotICAgIGZsb2F0IGZyb21S
eCA9IDA7Ci0gICAgZmxvYXQgZnJvbVJ5ID0gMDsKLSAgICBmbG9hdCBmcm9tQW5nbGUgPSAwOwot
ICAgIGJvb2wgZnJvbUxhcmdlQXJjID0gZmFsc2U7Ci0gICAgYm9vbCBmcm9tU3dlZXAgPSBmYWxz
ZTsKLSAgICBGbG9hdFBvaW50IGZyb21UYXJnZXRQb2ludDsKLSAgICBmbG9hdCB0b1J4ID0gMDsK
LSAgICBmbG9hdCB0b1J5ID0gMDsKLSAgICBmbG9hdCB0b0FuZ2xlID0gMDsKLSAgICBib29sIHRv
TGFyZ2VBcmMgPSBmYWxzZTsKLSAgICBib29sIHRvU3dlZXAgPSBmYWxzZTsKLSAgICBGbG9hdFBv
aW50IHRvVGFyZ2V0UG9pbnQ7Ci0gICAgaWYgKChtX2Zyb21Tb3VyY2UuaGFzTW9yZURhdGEoKSAm
JiAhbV9mcm9tU291cmNlLnBhcnNlQXJjVG9TZWdtZW50KGZyb21SeCwgZnJvbVJ5LCBmcm9tQW5n
bGUsIGZyb21MYXJnZUFyYywgZnJvbVN3ZWVwLCBmcm9tVGFyZ2V0UG9pbnQpKQotICAgICAgICB8
fCAhbV90b1NvdXJjZS5wYXJzZUFyY1RvU2VnbWVudCh0b1J4LCB0b1J5LCB0b0FuZ2xlLCB0b0xh
cmdlQXJjLCB0b1N3ZWVwLCB0b1RhcmdldFBvaW50KSkKKyAgICBhdXRvIHJlc3VsdCA9IHB1bGxG
cm9tU291cmNlcyhtX2Zyb21Tb3VyY2UsIG1fdG9Tb3VyY2UsICZTVkdQYXRoU291cmNlOjpwYXJz
ZUFyY1RvU2VnbWVudCk7CisgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIGlmICghbV9jb25zdW1lcikKICAgICAgICAgcmV0dXJuIHRydWU7CiAKKyAgICBhdXRv
IFtmcm9tLCB0b10gPSAqcmVzdWx0OworCiAgICAgaWYgKG1fYWRkVHlwZXNDb3VudCkgewogICAg
ICAgICBBU1NFUlQobV9mcm9tTW9kZSA9PSBtX3RvTW9kZSk7Ci0gICAgICAgIEZsb2F0UG9pbnQg
c2NhbGVkVG9UYXJnZXRQb2ludCA9IHRvVGFyZ2V0UG9pbnQ7CisgICAgICAgIGF1dG8gc2NhbGVk
VG9UYXJnZXRQb2ludCA9IHRvLnRhcmdldFBvaW50OwogICAgICAgICBzY2FsZWRUb1RhcmdldFBv
aW50LnNjYWxlKG1fYWRkVHlwZXNDb3VudCk7Ci0gICAgICAgIG1fY29uc3VtZXItPmFyY1RvKGZy
b21SeCArIHRvUnggKiBtX2FkZFR5cGVzQ291bnQsCi0gICAgICAgICAgICBmcm9tUnkgKyB0b1J5
ICogbV9hZGRUeXBlc0NvdW50LAotICAgICAgICAgICAgZnJvbUFuZ2xlICsgdG9BbmdsZSAqIG1f
YWRkVHlwZXNDb3VudCwKLSAgICAgICAgICAgIGZyb21MYXJnZUFyYyB8fCB0b0xhcmdlQXJjLAot
ICAgICAgICAgICAgZnJvbVN3ZWVwIHx8IHRvU3dlZXAsCi0gICAgICAgICAgICBmcm9tVGFyZ2V0
UG9pbnQgKyBzY2FsZWRUb1RhcmdldFBvaW50LAorICAgICAgICBtX2NvbnN1bWVyLT5hcmNUbyhm
cm9tLnJ4ICsgdG8ucnggKiBtX2FkZFR5cGVzQ291bnQsCisgICAgICAgICAgICBmcm9tLnJ4ICsg
dG8ucnkgKiBtX2FkZFR5cGVzQ291bnQsCisgICAgICAgICAgICBmcm9tLmFuZ2xlICsgdG8uYW5n
bGUgKiBtX2FkZFR5cGVzQ291bnQsCisgICAgICAgICAgICBmcm9tLmxhcmdlQXJjIHx8IHRvLmxh
cmdlQXJjLAorICAgICAgICAgICAgZnJvbS5zd2VlcCB8fCB0by5zd2VlcCwKKyAgICAgICAgICAg
IGZyb20udGFyZ2V0UG9pbnQgKyBzY2FsZWRUb1RhcmdldFBvaW50LAogICAgICAgICAgICAgbV9m
cm9tTW9kZSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgbV9jb25zdW1lci0+YXJjVG8oYmxlbmQo
ZnJvbVJ4LCB0b1J4LCBwcm9ncmVzcyksCi0gICAgICAgICAgICBibGVuZChmcm9tUnksIHRvUnks
IHByb2dyZXNzKSwKLSAgICAgICAgICAgIGJsZW5kKGZyb21BbmdsZSwgdG9BbmdsZSwgcHJvZ3Jl
c3MpLAotICAgICAgICAgICAgbV9pc0luRmlyc3RIYWxmT2ZBbmltYXRpb24gPyBmcm9tTGFyZ2VB
cmMgOiB0b0xhcmdlQXJjLAotICAgICAgICAgICAgbV9pc0luRmlyc3RIYWxmT2ZBbmltYXRpb24g
PyBmcm9tU3dlZXAgOiB0b1N3ZWVwLAotICAgICAgICAgICAgYmxlbmRBbmltYXRlZEZsb2F0UG9p
bnQoZnJvbVRhcmdldFBvaW50LCB0b1RhcmdldFBvaW50LCBwcm9ncmVzcyksCisgICAgICAgIG1f
Y29uc3VtZXItPmFyY1RvKGJsZW5kKGZyb20ucngsIHRvLnJ4LCBwcm9ncmVzcyksCisgICAgICAg
ICAgICBibGVuZChmcm9tLnJ5LCB0by5yeSwgcHJvZ3Jlc3MpLAorICAgICAgICAgICAgYmxlbmQo
ZnJvbS5hbmdsZSwgdG8uYW5nbGUsIHByb2dyZXNzKSwKKyAgICAgICAgICAgIG1faXNJbkZpcnN0
SGFsZk9mQW5pbWF0aW9uID8gZnJvbS5sYXJnZUFyYyA6IHRvLmxhcmdlQXJjLAorICAgICAgICAg
ICAgbV9pc0luRmlyc3RIYWxmT2ZBbmltYXRpb24gPyBmcm9tLnN3ZWVwIDogdG8uc3dlZXAsCisg
ICAgICAgICAgICBibGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tLnRhcmdldFBvaW50LCB0by50
YXJnZXRQb2ludCwgcHJvZ3Jlc3MpLAogICAgICAgICAgICAgbV9pc0luRmlyc3RIYWxmT2ZBbmlt
YXRpb24gPyBtX2Zyb21Nb2RlIDogbV90b01vZGUpOwogICAgIH0KLSAgICBtX2Zyb21DdXJyZW50
UG9pbnQgPSBtX2Zyb21Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyBmcm9tVGFyZ2V0UG9p
bnQgOiBtX2Zyb21DdXJyZW50UG9pbnQgKyBmcm9tVGFyZ2V0UG9pbnQ7Ci0gICAgbV90b0N1cnJl
bnRQb2ludCA9IG1fdG9Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyB0b1RhcmdldFBvaW50
IDogbV90b0N1cnJlbnRQb2ludCArIHRvVGFyZ2V0UG9pbnQ7CisgICAgbV9mcm9tQ3VycmVudFBv
aW50ID0gbV9mcm9tTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gZnJvbS50YXJnZXRQb2lu
dCA6IG1fZnJvbUN1cnJlbnRQb2ludCArIGZyb20udGFyZ2V0UG9pbnQ7CisgICAgbV90b0N1cnJl
bnRQb2ludCA9IG1fdG9Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyB0by50YXJnZXRQb2lu
dCA6IG1fdG9DdXJyZW50UG9pbnQgKyB0by50YXJnZXRQb2ludDsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIApAQCAtMzUwLDIwICszNDgsMjIgQEAgYm9vbCBTVkdQYXRoQmxlbmRlcjo6Y2FuQmxlbmRQ
YXRocygpCiAgICAgZmxvYXQgcHJvZ3Jlc3MgPSAwLjU7CiAgICAgYm9vbCBmcm9tU291cmNlSGFk
RGF0YSA9IG1fZnJvbVNvdXJjZS5oYXNNb3JlRGF0YSgpOwogICAgIHdoaWxlIChtX3RvU291cmNl
Lmhhc01vcmVEYXRhKCkpIHsKLSAgICAgICAgU1ZHUGF0aFNlZ1R5cGUgZnJvbUNvbW1hbmQ7Ci0g
ICAgICAgIFNWR1BhdGhTZWdUeXBlIHRvQ29tbWFuZDsKLSAgICAgICAgaWYgKChmcm9tU291cmNl
SGFkRGF0YSAmJiAhbV9mcm9tU291cmNlLnBhcnNlU1ZHU2VnbWVudFR5cGUoZnJvbUNvbW1hbmQp
KSB8fCAhbV90b1NvdXJjZS5wYXJzZVNWR1NlZ21lbnRUeXBlKHRvQ29tbWFuZCkpCisgICAgICAg
IGF1dG8gZnJvbUNvbW1hbmQgPSBtX2Zyb21Tb3VyY2UucGFyc2VTVkdTZWdtZW50VHlwZSgpOwor
ICAgICAgICBpZiAoZnJvbVNvdXJjZUhhZERhdGEgJiYgIWZyb21Db21tYW5kKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICBhdXRvIHRvQ29tbWFuZCA9IG1fdG9Tb3VyY2UucGFy
c2VTVkdTZWdtZW50VHlwZSgpOworICAgICAgICBpZiAoIXRvQ29tbWFuZCkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgICAgICBtX3RvTW9kZSA9IGNvb3JkaW5hdGVNb2RlT2ZDb21t
YW5kKHRvQ29tbWFuZCk7Ci0gICAgICAgIG1fZnJvbU1vZGUgPSBmcm9tU291cmNlSGFkRGF0YSA/
IGNvb3JkaW5hdGVNb2RlT2ZDb21tYW5kKGZyb21Db21tYW5kKSA6IG1fdG9Nb2RlOworICAgICAg
ICBtX3RvTW9kZSA9IGNvb3JkaW5hdGVNb2RlT2ZDb21tYW5kKCp0b0NvbW1hbmQpOworICAgICAg
ICBtX2Zyb21Nb2RlID0gZnJvbVNvdXJjZUhhZERhdGEgPyBjb29yZGluYXRlTW9kZU9mQ29tbWFu
ZCgqZnJvbUNvbW1hbmQpIDogbV90b01vZGU7CiAgICAgICAgIGlmIChtX2Zyb21Nb2RlICE9IG1f
dG9Nb2RlICYmIG1fYWRkVHlwZXNDb3VudCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgICAgICBpZiAoZnJvbVNvdXJjZUhhZERhdGEgJiYgIWlzU2VnbWVudEVxdWFsKGZyb21Db21t
YW5kLCB0b0NvbW1hbmQsIG1fZnJvbU1vZGUsIG1fdG9Nb2RlKSkKKyAgICAgICAgaWYgKGZyb21T
b3VyY2VIYWREYXRhICYmICFpc1NlZ21lbnRFcXVhbCgqZnJvbUNvbW1hbmQsICp0b0NvbW1hbmQs
IG1fZnJvbU1vZGUsIG1fdG9Nb2RlKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
ICAgICBzd2l0Y2ggKHRvQ29tbWFuZCkgeworICAgICAgICBzd2l0Y2ggKCp0b0NvbW1hbmQpIHsK
ICAgICAgICAgY2FzZSBQYXRoU2VnTW92ZVRvUmVsOgogICAgICAgICBjYXNlIFBhdGhTZWdNb3Zl
VG9BYnM6CiAgICAgICAgICAgICBpZiAoIWJsZW5kTW92ZVRvU2VnbWVudChwcm9ncmVzcykpCkBA
IC00MzIsMjAgKzQzMiwyMiBAQCBib29sIFNWR1BhdGhCbGVuZGVyOjpibGVuZEFuaW1hdGVkUGF0
aChmCiAKICAgICBib29sIGZyb21Tb3VyY2VIYWREYXRhID0gbV9mcm9tU291cmNlLmhhc01vcmVE
YXRhKCk7CiAgICAgd2hpbGUgKG1fdG9Tb3VyY2UuaGFzTW9yZURhdGEoKSkgewotICAgICAgICBT
VkdQYXRoU2VnVHlwZSBmcm9tQ29tbWFuZDsKLSAgICAgICAgU1ZHUGF0aFNlZ1R5cGUgdG9Db21t
YW5kOwotICAgICAgICBpZiAoKGZyb21Tb3VyY2VIYWREYXRhICYmICFtX2Zyb21Tb3VyY2UucGFy
c2VTVkdTZWdtZW50VHlwZShmcm9tQ29tbWFuZCkpIHx8ICFtX3RvU291cmNlLnBhcnNlU1ZHU2Vn
bWVudFR5cGUodG9Db21tYW5kKSkKKyAgICAgICAgYXV0byBmcm9tQ29tbWFuZCA9IG1fZnJvbVNv
dXJjZS5wYXJzZVNWR1NlZ21lbnRUeXBlKCk7CisgICAgICAgIGlmIChmcm9tU291cmNlSGFkRGF0
YSAmJiAhZnJvbUNvbW1hbmQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGF1
dG8gdG9Db21tYW5kID0gbV90b1NvdXJjZS5wYXJzZVNWR1NlZ21lbnRUeXBlKCk7CisgICAgICAg
IGlmICghdG9Db21tYW5kKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIG1f
dG9Nb2RlID0gY29vcmRpbmF0ZU1vZGVPZkNvbW1hbmQodG9Db21tYW5kKTsKLSAgICAgICAgbV9m
cm9tTW9kZSA9IGZyb21Tb3VyY2VIYWREYXRhID8gY29vcmRpbmF0ZU1vZGVPZkNvbW1hbmQoZnJv
bUNvbW1hbmQpIDogbV90b01vZGU7CisgICAgICAgIG1fdG9Nb2RlID0gY29vcmRpbmF0ZU1vZGVP
ZkNvbW1hbmQoKnRvQ29tbWFuZCk7CisgICAgICAgIG1fZnJvbU1vZGUgPSBmcm9tU291cmNlSGFk
RGF0YSA/IGNvb3JkaW5hdGVNb2RlT2ZDb21tYW5kKCpmcm9tQ29tbWFuZCkgOiBtX3RvTW9kZTsK
ICAgICAgICAgaWYgKG1fZnJvbU1vZGUgIT0gbV90b01vZGUgJiYgbV9hZGRUeXBlc0NvdW50KQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGlmIChmcm9tU291cmNlSGFkRGF0
YSAmJiAhaXNTZWdtZW50RXF1YWwoZnJvbUNvbW1hbmQsIHRvQ29tbWFuZCwgbV9mcm9tTW9kZSwg
bV90b01vZGUpKQorICAgICAgICBpZiAoZnJvbVNvdXJjZUhhZERhdGEgJiYgIWlzU2VnbWVudEVx
dWFsKCpmcm9tQ29tbWFuZCwgKnRvQ29tbWFuZCwgbV9mcm9tTW9kZSwgbV90b01vZGUpKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIHN3aXRjaCAodG9Db21tYW5kKSB7Cisg
ICAgICAgIHN3aXRjaCAoKnRvQ29tbWFuZCkgewogICAgICAgICBjYXNlIFBhdGhTZWdNb3ZlVG9S
ZWw6CiAgICAgICAgIGNhc2UgUGF0aFNlZ01vdmVUb0FiczoKICAgICAgICAgICAgIGlmICghYmxl
bmRNb3ZlVG9TZWdtZW50KHByb2dyZXNzKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQ
YXRoQnl0ZVN0cmVhbVNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1BhdGhCeXRlU3RyZWFtU291cmNlLmNwcAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3RyZWFtU291cmNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzQsNzggKzM0LDg2IEBAIGJvb2wgU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6Omhhc01vcmVE
YXQKICAgICByZXR1cm4gbV9zdHJlYW1DdXJyZW50IDwgbV9zdHJlYW1FbmQ7CiB9CiAKLWJvb2wg
U1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlU1ZHU2VnbWVudFR5cGUoU1ZHUGF0aFNlZ1R5
cGUmIHBhdGhTZWdUeXBlKQorU1ZHUGF0aFNlZ1R5cGUgU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6
Om5leHRDb21tYW5kKFNWR1BhdGhTZWdUeXBlKQogewotICAgIHBhdGhTZWdUeXBlID0gc3RhdGlj
X2Nhc3Q8U1ZHUGF0aFNlZ1R5cGU+KHJlYWRTVkdTZWdtZW50VHlwZSgpKTsKLSAgICByZXR1cm4g
dHJ1ZTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ1R5cGU+KHJlYWRTVkdTZWdt
ZW50VHlwZSgpKTsKIH0KIAotU1ZHUGF0aFNlZ1R5cGUgU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6
Om5leHRDb21tYW5kKFNWR1BhdGhTZWdUeXBlKQorT3B0aW9uYWw8U1ZHUGF0aFNlZ1R5cGU+IFNW
R1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZVNWR1NlZ21lbnRUeXBlKCkKIHsKICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ1R5cGU+KHJlYWRTVkdTZWdtZW50VHlwZSgpKTsKIH0K
IAotYm9vbCBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VNb3ZlVG9TZWdtZW50KEZsb2F0
UG9pbnQmIHRhcmdldFBvaW50KQorT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6TW92ZVRvU2VnbWVu
dD4gU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlTW92ZVRvU2VnbWVudCgpCiB7Ci0gICAg
dGFyZ2V0UG9pbnQgPSByZWFkRmxvYXRQb2ludCgpOwotICAgIHJldHVybiB0cnVlOworICAgIE1v
dmVUb1NlZ21lbnQgc2VnbWVudDsKKyAgICBzZWdtZW50LnRhcmdldFBvaW50ID0gcmVhZEZsb2F0
UG9pbnQoKTsKKyAgICByZXR1cm4gc2VnbWVudDsKIH0KIAotYm9vbCBTVkdQYXRoQnl0ZVN0cmVh
bVNvdXJjZTo6cGFyc2VMaW5lVG9TZWdtZW50KEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQorT3B0
aW9uYWw8U1ZHUGF0aFNvdXJjZTo6TGluZVRvU2VnbWVudD4gU1ZHUGF0aEJ5dGVTdHJlYW1Tb3Vy
Y2U6OnBhcnNlTGluZVRvU2VnbWVudCgpCiB7Ci0gICAgdGFyZ2V0UG9pbnQgPSByZWFkRmxvYXRQ
b2ludCgpOwotICAgIHJldHVybiB0cnVlOworICAgIExpbmVUb1NlZ21lbnQgc2VnbWVudDsKKyAg
ICBzZWdtZW50LnRhcmdldFBvaW50ID0gcmVhZEZsb2F0UG9pbnQoKTsKKyAgICByZXR1cm4gc2Vn
bWVudDsKIH0KIAotYm9vbCBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VMaW5lVG9Ib3Jp
em9udGFsU2VnbWVudChmbG9hdCYgeCkKK09wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkxpbmVUb0hv
cml6b250YWxTZWdtZW50PiBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VMaW5lVG9Ib3Jp
em9udGFsU2VnbWVudCgpCiB7Ci0gICAgeCA9IHJlYWRGbG9hdCgpOwotICAgIHJldHVybiB0cnVl
OworICAgIExpbmVUb0hvcml6b250YWxTZWdtZW50IHNlZ21lbnQ7CisgICAgc2VnbWVudC54ID0g
cmVhZEZsb2F0KCk7CisgICAgcmV0dXJuIHNlZ21lbnQ7CiB9CiAKLWJvb2wgU1ZHUGF0aEJ5dGVT
dHJlYW1Tb3VyY2U6OnBhcnNlTGluZVRvVmVydGljYWxTZWdtZW50KGZsb2F0JiB5KQorT3B0aW9u
YWw8U1ZHUGF0aFNvdXJjZTo6TGluZVRvVmVydGljYWxTZWdtZW50PiBTVkdQYXRoQnl0ZVN0cmVh
bVNvdXJjZTo6cGFyc2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnQoKQogewotICAgIHkgPSByZWFkRmxv
YXQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBMaW5lVG9WZXJ0aWNhbFNlZ21lbnQgc2VnbWVu
dDsKKyAgICBzZWdtZW50LnkgPSByZWFkRmxvYXQoKTsKKyAgICByZXR1cm4gc2VnbWVudDsKIH0K
IAotYm9vbCBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50
KEZsb2F0UG9pbnQmIHBvaW50MSwgRmxvYXRQb2ludCYgcG9pbnQyLCBGbG9hdFBvaW50JiB0YXJn
ZXRQb2ludCkKK09wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkN1cnZlVG9DdWJpY1NlZ21lbnQ+IFNW
R1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQoKQogewotICAg
IHBvaW50MSA9IHJlYWRGbG9hdFBvaW50KCk7Ci0gICAgcG9pbnQyID0gcmVhZEZsb2F0UG9pbnQo
KTsKLSAgICB0YXJnZXRQb2ludCA9IHJlYWRGbG9hdFBvaW50KCk7Ci0gICAgcmV0dXJuIHRydWU7
CisgICAgQ3VydmVUb0N1YmljU2VnbWVudCBzZWdtZW50OworICAgIHNlZ21lbnQucG9pbnQxID0g
cmVhZEZsb2F0UG9pbnQoKTsKKyAgICBzZWdtZW50LnBvaW50MiA9IHJlYWRGbG9hdFBvaW50KCk7
CisgICAgc2VnbWVudC50YXJnZXRQb2ludCA9IHJlYWRGbG9hdFBvaW50KCk7CisgICAgcmV0dXJu
IHNlZ21lbnQ7CiB9CiAKLWJvb2wgU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlQ3VydmVU
b0N1YmljU21vb3RoU2VnbWVudChGbG9hdFBvaW50JiBwb2ludDIsIEZsb2F0UG9pbnQmIHRhcmdl
dFBvaW50KQorT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6Q3VydmVUb0N1YmljU21vb3RoU2VnbWVu
dD4gU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVu
dCgpCiB7Ci0gICAgcG9pbnQyID0gcmVhZEZsb2F0UG9pbnQoKTsKLSAgICB0YXJnZXRQb2ludCA9
IHJlYWRGbG9hdFBvaW50KCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgQ3VydmVUb0N1YmljU21v
b3RoU2VnbWVudCBzZWdtZW50OworICAgIHNlZ21lbnQucG9pbnQyID0gcmVhZEZsb2F0UG9pbnQo
KTsKKyAgICBzZWdtZW50LnRhcmdldFBvaW50ID0gcmVhZEZsb2F0UG9pbnQoKTsKKyAgICByZXR1
cm4gc2VnbWVudDsKIH0KIAotYm9vbCBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VDdXJ2
ZVRvUXVhZHJhdGljU2VnbWVudChGbG9hdFBvaW50JiBwb2ludDEsIEZsb2F0UG9pbnQmIHRhcmdl
dFBvaW50KQorT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6Q3VydmVUb1F1YWRyYXRpY1NlZ21lbnQ+
IFNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KCkK
IHsKLSAgICBwb2ludDEgPSByZWFkRmxvYXRQb2ludCgpOwotICAgIHRhcmdldFBvaW50ID0gcmVh
ZEZsb2F0UG9pbnQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBDdXJ2ZVRvUXVhZHJhdGljU2Vn
bWVudCBzZWdtZW50OworICAgIHNlZ21lbnQucG9pbnQxID0gcmVhZEZsb2F0UG9pbnQoKTsKKyAg
ICBzZWdtZW50LnRhcmdldFBvaW50ID0gcmVhZEZsb2F0UG9pbnQoKTsKKyAgICByZXR1cm4gc2Vn
bWVudDsKIH0KIAotYm9vbCBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVh
ZHJhdGljU21vb3RoU2VnbWVudChGbG9hdFBvaW50JiB0YXJnZXRQb2ludCkKK09wdGlvbmFsPFNW
R1BhdGhTb3VyY2U6OkN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50PiBTVkdQYXRoQnl0ZVN0
cmVhbVNvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudCgpCiB7Ci0gICAg
dGFyZ2V0UG9pbnQgPSByZWFkRmxvYXRQb2ludCgpOwotICAgIHJldHVybiB0cnVlOworICAgIEN1
cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50IHNlZ21lbnQ7CisgICAgc2VnbWVudC50YXJnZXRQ
b2ludCA9IHJlYWRGbG9hdFBvaW50KCk7CisgICAgcmV0dXJuIHNlZ21lbnQ7CiB9CiAKLWJvb2wg
U1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlQXJjVG9TZWdtZW50KGZsb2F0JiByeCwgZmxv
YXQmIHJ5LCBmbG9hdCYgYW5nbGUsIGJvb2wmIGxhcmdlQXJjLCBib29sJiBzd2VlcCwgRmxvYXRQ
b2ludCYgdGFyZ2V0UG9pbnQpCitPcHRpb25hbDxTVkdQYXRoU291cmNlOjpBcmNUb1NlZ21lbnQ+
IFNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZUFyY1RvU2VnbWVudCgpCiB7Ci0gICAgcngg
PSByZWFkRmxvYXQoKTsKLSAgICByeSA9IHJlYWRGbG9hdCgpOwotICAgIGFuZ2xlID0gcmVhZEZs
b2F0KCk7Ci0gICAgbGFyZ2VBcmMgPSByZWFkRmxhZygpOwotICAgIHN3ZWVwID0gcmVhZEZsYWco
KTsKLSAgICB0YXJnZXRQb2ludCA9IHJlYWRGbG9hdFBvaW50KCk7Ci0gICAgcmV0dXJuIHRydWU7
CisgICAgQXJjVG9TZWdtZW50IHNlZ21lbnQ7CisgICAgc2VnbWVudC5yeCA9IHJlYWRGbG9hdCgp
OworICAgIHNlZ21lbnQucnkgPSByZWFkRmxvYXQoKTsKKyAgICBzZWdtZW50LmFuZ2xlID0gcmVh
ZEZsb2F0KCk7CisgICAgc2VnbWVudC5sYXJnZUFyYyA9IHJlYWRGbGFnKCk7CisgICAgc2VnbWVu
dC5zd2VlcCA9IHJlYWRGbGFnKCk7CisgICAgc2VnbWVudC50YXJnZXRQb2ludCA9IHJlYWRGbG9h
dFBvaW50KCk7CisgICAgcmV0dXJuIHNlZ21lbnQ7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZS5oCShyZXZpc2lvbiAyNjMxNzYpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2UuaAkod29ya2luZyBj
b3B5KQpAQCAtMzIsMTggKzMyLDE4IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgYm9vbCBoYXNN
b3JlRGF0YSgpIGNvbnN0IGZpbmFsOwogICAgIGJvb2wgbW92ZVRvTmV4dFRva2VuKCkgZmluYWwg
eyByZXR1cm4gdHJ1ZTsgfQotICAgIGJvb2wgcGFyc2VTVkdTZWdtZW50VHlwZShTVkdQYXRoU2Vn
VHlwZSYpIGZpbmFsOwogICAgIFNWR1BhdGhTZWdUeXBlIG5leHRDb21tYW5kKFNWR1BhdGhTZWdU
eXBlKSBmaW5hbDsKIAotICAgIGJvb2wgcGFyc2VNb3ZlVG9TZWdtZW50KEZsb2F0UG9pbnQmKSBm
aW5hbDsKLSAgICBib29sIHBhcnNlTGluZVRvU2VnbWVudChGbG9hdFBvaW50JikgZmluYWw7Ci0g
ICAgYm9vbCBwYXJzZUxpbmVUb0hvcml6b250YWxTZWdtZW50KGZsb2F0JikgZmluYWw7Ci0gICAg
Ym9vbCBwYXJzZUxpbmVUb1ZlcnRpY2FsU2VnbWVudChmbG9hdCYpIGZpbmFsOwotICAgIGJvb2wg
cGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KEZsb2F0UG9pbnQmLCBGbG9hdFBvaW50JiwgRmxvYXRQ
b2ludCYpIGZpbmFsOwotICAgIGJvb2wgcGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KEZs
b2F0UG9pbnQmLCBGbG9hdFBvaW50JikgZmluYWw7Ci0gICAgYm9vbCBwYXJzZUN1cnZlVG9RdWFk
cmF0aWNTZWdtZW50KEZsb2F0UG9pbnQmLCBGbG9hdFBvaW50JikgZmluYWw7Ci0gICAgYm9vbCBw
YXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KEZsb2F0UG9pbnQmKSBmaW5hbDsKLSAg
ICBib29sIHBhcnNlQXJjVG9TZWdtZW50KGZsb2F0JiwgZmxvYXQmLCBmbG9hdCYsIGJvb2wmLCBi
b29sJiwgRmxvYXRQb2ludCYpIGZpbmFsOworICAgIE9wdGlvbmFsPFNWR1BhdGhTZWdUeXBlPiBw
YXJzZVNWR1NlZ21lbnRUeXBlKCkgZmluYWw7CisgICAgT3B0aW9uYWw8TW92ZVRvU2VnbWVudD4g
cGFyc2VNb3ZlVG9TZWdtZW50KCkgZmluYWw7CisgICAgT3B0aW9uYWw8TGluZVRvU2VnbWVudD4g
cGFyc2VMaW5lVG9TZWdtZW50KCkgZmluYWw7CisgICAgT3B0aW9uYWw8TGluZVRvSG9yaXpvbnRh
bFNlZ21lbnQ+IHBhcnNlTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQoKSBmaW5hbDsKKyAgICBPcHRp
b25hbDxMaW5lVG9WZXJ0aWNhbFNlZ21lbnQ+IHBhcnNlTGluZVRvVmVydGljYWxTZWdtZW50KCkg
ZmluYWw7CisgICAgT3B0aW9uYWw8Q3VydmVUb0N1YmljU2VnbWVudD4gcGFyc2VDdXJ2ZVRvQ3Vi
aWNTZWdtZW50KCkgZmluYWw7CisgICAgT3B0aW9uYWw8Q3VydmVUb0N1YmljU21vb3RoU2VnbWVu
dD4gcGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KCkgZmluYWw7CisgICAgT3B0aW9uYWw8
Q3VydmVUb1F1YWRyYXRpY1NlZ21lbnQ+IHBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQoKSBm
aW5hbDsKKyAgICBPcHRpb25hbDxDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudD4gcGFyc2VD
dXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudCgpIGZpbmFsOworICAgIE9wdGlvbmFsPEFyY1Rv
U2VnbWVudD4gcGFyc2VBcmNUb1NlZ21lbnQoKSBmaW5hbDsKIAogI2lmIENPTVBJTEVSKE1TVkMp
CiAjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDcwMSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdQYXRoUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
UGF0aFBhcnNlci5jcHAJKHJldmlzaW9uIDI2MzE3NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdQYXRoUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsMTAyICs3Myw5OSBAQCB2b2lk
IFNWR1BhdGhQYXJzZXI6OnBhcnNlQ2xvc2VQYXRoU2VnbWVuCiAKIGJvb2wgU1ZHUGF0aFBhcnNl
cjo6cGFyc2VNb3ZlVG9TZWdtZW50KCkKIHsKLSAgICBGbG9hdFBvaW50IHRhcmdldFBvaW50Owot
ICAgIGlmICghbV9zb3VyY2UucGFyc2VNb3ZlVG9TZWdtZW50KHRhcmdldFBvaW50KSkKKyAgICBh
dXRvIHJlc3VsdCA9IG1fc291cmNlLnBhcnNlTW92ZVRvU2VnbWVudCgpOworICAgIGlmICghcmVz
dWx0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAobV9wYXRoUGFyc2luZ01vZGUg
PT0gTm9ybWFsaXplZFBhcnNpbmcpIHsKICAgICAgICAgaWYgKG1fbW9kZSA9PSBSZWxhdGl2ZUNv
b3JkaW5hdGVzKQotICAgICAgICAgICAgbV9jdXJyZW50UG9pbnQgKz0gdGFyZ2V0UG9pbnQ7Cisg
ICAgICAgICAgICBtX2N1cnJlbnRQb2ludCArPSByZXN1bHQtPnRhcmdldFBvaW50OwogICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBtX2N1cnJlbnRQb2ludCA9IHRhcmdldFBvaW50OworICAgICAg
ICAgICAgbV9jdXJyZW50UG9pbnQgPSByZXN1bHQtPnRhcmdldFBvaW50OwogICAgICAgICBtX3N1
YlBhdGhQb2ludCA9IG1fY3VycmVudFBvaW50OwogICAgICAgICBtX2NvbnN1bWVyLm1vdmVUbyht
X2N1cnJlbnRQb2ludCwgbV9jbG9zZVBhdGgsIEFic29sdXRlQ29vcmRpbmF0ZXMpOwogICAgIH0g
ZWxzZQotICAgICAgICBtX2NvbnN1bWVyLm1vdmVUbyh0YXJnZXRQb2ludCwgbV9jbG9zZVBhdGgs
IG1fbW9kZSk7CisgICAgICAgIG1fY29uc3VtZXIubW92ZVRvKHJlc3VsdC0+dGFyZ2V0UG9pbnQs
IG1fY2xvc2VQYXRoLCBtX21vZGUpOwogICAgIG1fY2xvc2VQYXRoID0gZmFsc2U7CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKIGJvb2wgU1ZHUGF0aFBhcnNlcjo6cGFyc2VMaW5lVG9TZWdtZW50KCkK
IHsKLSAgICBGbG9hdFBvaW50IHRhcmdldFBvaW50OwotICAgIGlmICghbV9zb3VyY2UucGFyc2VM
aW5lVG9TZWdtZW50KHRhcmdldFBvaW50KSkKKyAgICBhdXRvIHJlc3VsdCA9IG1fc291cmNlLnBh
cnNlTGluZVRvU2VnbWVudCgpOworICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICAgICBpZiAobV9wYXRoUGFyc2luZ01vZGUgPT0gTm9ybWFsaXplZFBhcnNpbmcpIHsK
ICAgICAgICAgaWYgKG1fbW9kZSA9PSBSZWxhdGl2ZUNvb3JkaW5hdGVzKQotICAgICAgICAgICAg
bV9jdXJyZW50UG9pbnQgKz0gdGFyZ2V0UG9pbnQ7CisgICAgICAgICAgICBtX2N1cnJlbnRQb2lu
dCArPSByZXN1bHQtPnRhcmdldFBvaW50OwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2N1
cnJlbnRQb2ludCA9IHRhcmdldFBvaW50OworICAgICAgICAgICAgbV9jdXJyZW50UG9pbnQgPSBy
ZXN1bHQtPnRhcmdldFBvaW50OwogICAgICAgICBtX2NvbnN1bWVyLmxpbmVUbyhtX2N1cnJlbnRQ
b2ludCwgQWJzb2x1dGVDb29yZGluYXRlcyk7CiAgICAgfSBlbHNlCi0gICAgICAgIG1fY29uc3Vt
ZXIubGluZVRvKHRhcmdldFBvaW50LCBtX21vZGUpOworICAgICAgICBtX2NvbnN1bWVyLmxpbmVU
byhyZXN1bHQtPnRhcmdldFBvaW50LCBtX21vZGUpOwogICAgIHJldHVybiB0cnVlOwogfQogCiBi
b29sIFNWR1BhdGhQYXJzZXI6OnBhcnNlTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQoKQogewotICAg
IGZsb2F0IHRvWDsKLSAgICBpZiAoIW1fc291cmNlLnBhcnNlTGluZVRvSG9yaXpvbnRhbFNlZ21l
bnQodG9YKSkKKyAgICBhdXRvIHJlc3VsdCA9IG1fc291cmNlLnBhcnNlTGluZVRvSG9yaXpvbnRh
bFNlZ21lbnQoKTsKKyAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgaWYgKG1fcGF0aFBhcnNpbmdNb2RlID09IE5vcm1hbGl6ZWRQYXJzaW5nKSB7CiAgICAgICAg
IGlmIChtX21vZGUgPT0gUmVsYXRpdmVDb29yZGluYXRlcykKLSAgICAgICAgICAgIG1fY3VycmVu
dFBvaW50Lm1vdmUodG9YLCAwKTsKKyAgICAgICAgICAgIG1fY3VycmVudFBvaW50Lm1vdmUocmVz
dWx0LT54LCAwKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9jdXJyZW50UG9pbnQuc2V0
WCh0b1gpOworICAgICAgICAgICAgbV9jdXJyZW50UG9pbnQuc2V0WChyZXN1bHQtPngpOwogICAg
ICAgICBtX2NvbnN1bWVyLmxpbmVUbyhtX2N1cnJlbnRQb2ludCwgQWJzb2x1dGVDb29yZGluYXRl
cyk7CiAgICAgfSBlbHNlCi0gICAgICAgIG1fY29uc3VtZXIubGluZVRvSG9yaXpvbnRhbCh0b1gs
IG1fbW9kZSk7CisgICAgICAgIG1fY29uc3VtZXIubGluZVRvSG9yaXpvbnRhbChyZXN1bHQtPngs
IG1fbW9kZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgU1ZHUGF0aFBhcnNlcjo6cGFy
c2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnQoKQogewotICAgIGZsb2F0IHRvWTsKLSAgICBpZiAoIW1f
c291cmNlLnBhcnNlTGluZVRvVmVydGljYWxTZWdtZW50KHRvWSkpCisgICAgYXV0byByZXN1bHQg
PSBtX3NvdXJjZS5wYXJzZUxpbmVUb1ZlcnRpY2FsU2VnbWVudCgpOworICAgIGlmICghcmVzdWx0
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAobV9wYXRoUGFyc2luZ01vZGUgPT0g
Tm9ybWFsaXplZFBhcnNpbmcpIHsKICAgICAgICAgaWYgKG1fbW9kZSA9PSBSZWxhdGl2ZUNvb3Jk
aW5hdGVzKQotICAgICAgICAgICAgbV9jdXJyZW50UG9pbnQubW92ZSgwLCB0b1kpOworICAgICAg
ICAgICAgbV9jdXJyZW50UG9pbnQubW92ZSgwLCByZXN1bHQtPnkpOwogICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBtX2N1cnJlbnRQb2ludC5zZXRZKHRvWSk7CisgICAgICAgICAgICBtX2N1cnJl
bnRQb2ludC5zZXRZKHJlc3VsdC0+eSk7CiAgICAgICAgIG1fY29uc3VtZXIubGluZVRvKG1fY3Vy
cmVudFBvaW50LCBBYnNvbHV0ZUNvb3JkaW5hdGVzKTsKICAgICB9IGVsc2UKLSAgICAgICAgbV9j
b25zdW1lci5saW5lVG9WZXJ0aWNhbCh0b1ksIG1fbW9kZSk7CisgICAgICAgIG1fY29uc3VtZXIu
bGluZVRvVmVydGljYWwocmVzdWx0LT55LCBtX21vZGUpOwogICAgIHJldHVybiB0cnVlOwogfQog
CiBib29sIFNWR1BhdGhQYXJzZXI6OnBhcnNlQ3VydmVUb0N1YmljU2VnbWVudCgpCiB7Ci0gICAg
RmxvYXRQb2ludCBwb2ludDE7Ci0gICAgRmxvYXRQb2ludCBwb2ludDI7Ci0gICAgRmxvYXRQb2lu
dCB0YXJnZXRQb2ludDsKLSAgICBpZiAoIW1fc291cmNlLnBhcnNlQ3VydmVUb0N1YmljU2VnbWVu
dChwb2ludDEsIHBvaW50MiwgdGFyZ2V0UG9pbnQpKQorICAgIGF1dG8gcmVzdWx0ID0gbV9zb3Vy
Y2UucGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KCk7CisgICAgaWYgKCFyZXN1bHQpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIGlmIChtX3BhdGhQYXJzaW5nTW9kZSA9PSBOb3JtYWxpemVk
UGFyc2luZykgewogICAgICAgICBpZiAobV9tb2RlID09IFJlbGF0aXZlQ29vcmRpbmF0ZXMpIHsK
LSAgICAgICAgICAgIHBvaW50MSArPSBtX2N1cnJlbnRQb2ludDsKLSAgICAgICAgICAgIHBvaW50
MiArPSBtX2N1cnJlbnRQb2ludDsKLSAgICAgICAgICAgIHRhcmdldFBvaW50ICs9IG1fY3VycmVu
dFBvaW50OworICAgICAgICAgICAgcmVzdWx0LT5wb2ludDEgKz0gbV9jdXJyZW50UG9pbnQ7Cisg
ICAgICAgICAgICByZXN1bHQtPnBvaW50MiArPSBtX2N1cnJlbnRQb2ludDsKKyAgICAgICAgICAg
IHJlc3VsdC0+dGFyZ2V0UG9pbnQgKz0gbV9jdXJyZW50UG9pbnQ7CiAgICAgICAgIH0KLSAgICAg
ICAgbV9jb25zdW1lci5jdXJ2ZVRvQ3ViaWMocG9pbnQxLCBwb2ludDIsIHRhcmdldFBvaW50LCBB
YnNvbHV0ZUNvb3JkaW5hdGVzKTsKKyAgICAgICAgbV9jb25zdW1lci5jdXJ2ZVRvQ3ViaWMocmVz
dWx0LT5wb2ludDEsIHJlc3VsdC0+cG9pbnQyLCByZXN1bHQtPnRhcmdldFBvaW50LCBBYnNvbHV0
ZUNvb3JkaW5hdGVzKTsKIAotICAgICAgICBtX2NvbnRyb2xQb2ludCA9IHBvaW50MjsKLSAgICAg
ICAgbV9jdXJyZW50UG9pbnQgPSB0YXJnZXRQb2ludDsKKyAgICAgICAgbV9jb250cm9sUG9pbnQg
PSByZXN1bHQtPnBvaW50MjsKKyAgICAgICAgbV9jdXJyZW50UG9pbnQgPSByZXN1bHQtPnRhcmdl
dFBvaW50OwogICAgIH0gZWxzZQotICAgICAgICBtX2NvbnN1bWVyLmN1cnZlVG9DdWJpYyhwb2lu
dDEsIHBvaW50MiwgdGFyZ2V0UG9pbnQsIG1fbW9kZSk7CisgICAgICAgIG1fY29uc3VtZXIuY3Vy
dmVUb0N1YmljKHJlc3VsdC0+cG9pbnQxLCByZXN1bHQtPnBvaW50MiwgcmVzdWx0LT50YXJnZXRQ
b2ludCwgbV9tb2RlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBTVkdQYXRoUGFyc2Vy
OjpwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQoKQogewotICAgIEZsb2F0UG9pbnQgcG9p
bnQyOwotICAgIEZsb2F0UG9pbnQgdGFyZ2V0UG9pbnQ7Ci0gICAgaWYgKCFtX3NvdXJjZS5wYXJz
ZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQocG9pbnQyLCB0YXJnZXRQb2ludCkpCisgICAgYXV0
byByZXN1bHQgPSBtX3NvdXJjZS5wYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQoKTsKKyAg
ICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKG1fbGFzdENv
bW1hbmQgIT0gUGF0aFNlZ0N1cnZlVG9DdWJpY0FicwpAQCAtMTgyLDUzICsxNzksNTMgQEAgYm9v
bCBTVkdQYXRoUGFyc2VyOjpwYXJzZUN1cnZlVG9DdWJpY1NtbwogICAgICAgICBwb2ludDEuc2Nh
bGUoMik7CiAgICAgICAgIHBvaW50MS5tb3ZlKC1tX2NvbnRyb2xQb2ludC54KCksIC1tX2NvbnRy
b2xQb2ludC55KCkpOwogICAgICAgICBpZiAobV9tb2RlID09IFJlbGF0aXZlQ29vcmRpbmF0ZXMp
IHsKLSAgICAgICAgICAgIHBvaW50MiArPSBtX2N1cnJlbnRQb2ludDsKLSAgICAgICAgICAgIHRh
cmdldFBvaW50ICs9IG1fY3VycmVudFBvaW50OworICAgICAgICAgICAgcmVzdWx0LT5wb2ludDIg
Kz0gbV9jdXJyZW50UG9pbnQ7CisgICAgICAgICAgICByZXN1bHQtPnRhcmdldFBvaW50ICs9IG1f
Y3VycmVudFBvaW50OwogICAgICAgICB9CiAKLSAgICAgICAgbV9jb25zdW1lci5jdXJ2ZVRvQ3Vi
aWMocG9pbnQxLCBwb2ludDIsIHRhcmdldFBvaW50LCBBYnNvbHV0ZUNvb3JkaW5hdGVzKTsKKyAg
ICAgICAgbV9jb25zdW1lci5jdXJ2ZVRvQ3ViaWMocG9pbnQxLCByZXN1bHQtPnBvaW50MiwgcmVz
dWx0LT50YXJnZXRQb2ludCwgQWJzb2x1dGVDb29yZGluYXRlcyk7CiAKLSAgICAgICAgbV9jb250
cm9sUG9pbnQgPSBwb2ludDI7Ci0gICAgICAgIG1fY3VycmVudFBvaW50ID0gdGFyZ2V0UG9pbnQ7
CisgICAgICAgIG1fY29udHJvbFBvaW50ID0gcmVzdWx0LT5wb2ludDI7CisgICAgICAgIG1fY3Vy
cmVudFBvaW50ID0gcmVzdWx0LT50YXJnZXRQb2ludDsKICAgICB9IGVsc2UKLSAgICAgICAgbV9j
b25zdW1lci5jdXJ2ZVRvQ3ViaWNTbW9vdGgocG9pbnQyLCB0YXJnZXRQb2ludCwgbV9tb2RlKTsK
KyAgICAgICAgbV9jb25zdW1lci5jdXJ2ZVRvQ3ViaWNTbW9vdGgocmVzdWx0LT5wb2ludDIsIHJl
c3VsdC0+dGFyZ2V0UG9pbnQsIG1fbW9kZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wg
U1ZHUGF0aFBhcnNlcjo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCgpCiB7Ci0gICAgRmxv
YXRQb2ludCBwb2ludDE7Ci0gICAgRmxvYXRQb2ludCB0YXJnZXRQb2ludDsKLSAgICBpZiAoIW1f
c291cmNlLnBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQocG9pbnQxLCB0YXJnZXRQb2ludCkp
CisgICAgYXV0byByZXN1bHQgPSBtX3NvdXJjZS5wYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50
KCk7CisgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmICht
X3BhdGhQYXJzaW5nTW9kZSA9PSBOb3JtYWxpemVkUGFyc2luZykgewotICAgICAgICBtX2NvbnRy
b2xQb2ludCA9IHBvaW50MTsKKyAgICAgICAgbV9jb250cm9sUG9pbnQgPSByZXN1bHQtPnBvaW50
MTsKKwogICAgICAgICBGbG9hdFBvaW50IHBvaW50MSA9IG1fY3VycmVudFBvaW50OwogICAgICAg
ICBwb2ludDEubW92ZSgyICogbV9jb250cm9sUG9pbnQueCgpLCAyICogbV9jb250cm9sUG9pbnQu
eSgpKTsKLSAgICAgICAgRmxvYXRQb2ludCBwb2ludDIodGFyZ2V0UG9pbnQueCgpICsgMiAqIG1f
Y29udHJvbFBvaW50LngoKSwgdGFyZ2V0UG9pbnQueSgpICsgMiAqIG1fY29udHJvbFBvaW50Lnko
KSk7CisgICAgICAgIEZsb2F0UG9pbnQgcG9pbnQyKHJlc3VsdC0+dGFyZ2V0UG9pbnQueCgpICsg
MiAqIG1fY29udHJvbFBvaW50LngoKSwgcmVzdWx0LT50YXJnZXRQb2ludC55KCkgKyAyICogbV9j
b250cm9sUG9pbnQueSgpKTsKICAgICAgICAgaWYgKG1fbW9kZSA9PSBSZWxhdGl2ZUNvb3JkaW5h
dGVzKSB7CiAgICAgICAgICAgICBwb2ludDEubW92ZSgyICogbV9jdXJyZW50UG9pbnQueCgpLCAy
ICogbV9jdXJyZW50UG9pbnQueSgpKTsKICAgICAgICAgICAgIHBvaW50Mi5tb3ZlKDMgKiBtX2N1
cnJlbnRQb2ludC54KCksIDMgKiBtX2N1cnJlbnRQb2ludC55KCkpOwotICAgICAgICAgICAgdGFy
Z2V0UG9pbnQgKz0gbV9jdXJyZW50UG9pbnQ7CisgICAgICAgICAgICByZXN1bHQtPnRhcmdldFBv
aW50ICs9IG1fY3VycmVudFBvaW50OwogICAgICAgICB9CiAgICAgICAgIHBvaW50MS5zY2FsZShn
T25lT3ZlclRocmVlKTsKICAgICAgICAgcG9pbnQyLnNjYWxlKGdPbmVPdmVyVGhyZWUpOwogCi0g
ICAgICAgIG1fY29uc3VtZXIuY3VydmVUb0N1YmljKHBvaW50MSwgcG9pbnQyLCB0YXJnZXRQb2lu
dCwgQWJzb2x1dGVDb29yZGluYXRlcyk7CisgICAgICAgIG1fY29uc3VtZXIuY3VydmVUb0N1Ymlj
KHBvaW50MSwgcG9pbnQyLCByZXN1bHQtPnRhcmdldFBvaW50LCBBYnNvbHV0ZUNvb3JkaW5hdGVz
KTsKIAogICAgICAgICBpZiAobV9tb2RlID09IFJlbGF0aXZlQ29vcmRpbmF0ZXMpCiAgICAgICAg
ICAgICBtX2NvbnRyb2xQb2ludCArPSBtX2N1cnJlbnRQb2ludDsKLSAgICAgICAgbV9jdXJyZW50
UG9pbnQgPSB0YXJnZXRQb2ludDsKKyAgICAgICAgbV9jdXJyZW50UG9pbnQgPSByZXN1bHQtPnRh
cmdldFBvaW50OwogICAgIH0gZWxzZQotICAgICAgICBtX2NvbnN1bWVyLmN1cnZlVG9RdWFkcmF0
aWMocG9pbnQxLCB0YXJnZXRQb2ludCwgbV9tb2RlKTsKKyAgICAgICAgbV9jb25zdW1lci5jdXJ2
ZVRvUXVhZHJhdGljKHJlc3VsdC0+cG9pbnQxLCByZXN1bHQtPnRhcmdldFBvaW50LCBtX21vZGUp
OwogICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIFNWR1BhdGhQYXJzZXI6OnBhcnNlQ3VydmVU
b1F1YWRyYXRpY1Ntb290aFNlZ21lbnQoKQogewotICAgIEZsb2F0UG9pbnQgdGFyZ2V0UG9pbnQ7
Ci0gICAgaWYgKCFtX3NvdXJjZS5wYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KHRh
cmdldFBvaW50KSkKKyAgICBhdXRvIHJlc3VsdCA9IG1fc291cmNlLnBhcnNlQ3VydmVUb1F1YWRy
YXRpY1Ntb290aFNlZ21lbnQoKTsKKyAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgaWYgKG1fbGFzdENvbW1hbmQgIT0gUGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNB
YnMKQEAgLTI0Miw2NyArMjM5LDYyIEBAIGJvb2wgU1ZHUGF0aFBhcnNlcjo6cGFyc2VDdXJ2ZVRv
UXVhZHJhdGkKICAgICAgICAgY3ViaWNQb2ludC5zY2FsZSgyKTsKICAgICAgICAgY3ViaWNQb2lu
dC5tb3ZlKC1tX2NvbnRyb2xQb2ludC54KCksIC1tX2NvbnRyb2xQb2ludC55KCkpOwogICAgICAg
ICBGbG9hdFBvaW50IHBvaW50MShtX2N1cnJlbnRQb2ludC54KCkgKyAyICogY3ViaWNQb2ludC54
KCksIG1fY3VycmVudFBvaW50LnkoKSArIDIgKiBjdWJpY1BvaW50LnkoKSk7Ci0gICAgICAgIEZs
b2F0UG9pbnQgcG9pbnQyKHRhcmdldFBvaW50LngoKSArIDIgKiBjdWJpY1BvaW50LngoKSwgdGFy
Z2V0UG9pbnQueSgpICsgMiAqIGN1YmljUG9pbnQueSgpKTsKKyAgICAgICAgRmxvYXRQb2ludCBw
b2ludDIocmVzdWx0LT50YXJnZXRQb2ludC54KCkgKyAyICogY3ViaWNQb2ludC54KCksIHJlc3Vs
dC0+dGFyZ2V0UG9pbnQueSgpICsgMiAqIGN1YmljUG9pbnQueSgpKTsKICAgICAgICAgaWYgKG1f
bW9kZSA9PSBSZWxhdGl2ZUNvb3JkaW5hdGVzKSB7CiAgICAgICAgICAgICBwb2ludDIgKz0gbV9j
dXJyZW50UG9pbnQ7Ci0gICAgICAgICAgICB0YXJnZXRQb2ludCArPSBtX2N1cnJlbnRQb2ludDsK
KyAgICAgICAgICAgIHJlc3VsdC0+dGFyZ2V0UG9pbnQgKz0gbV9jdXJyZW50UG9pbnQ7CiAgICAg
ICAgIH0KICAgICAgICAgcG9pbnQxLnNjYWxlKGdPbmVPdmVyVGhyZWUpOwogICAgICAgICBwb2lu
dDIuc2NhbGUoZ09uZU92ZXJUaHJlZSk7CiAKLSAgICAgICAgbV9jb25zdW1lci5jdXJ2ZVRvQ3Vi
aWMocG9pbnQxLCBwb2ludDIsIHRhcmdldFBvaW50LCBBYnNvbHV0ZUNvb3JkaW5hdGVzKTsKKyAg
ICAgICAgbV9jb25zdW1lci5jdXJ2ZVRvQ3ViaWMocG9pbnQxLCBwb2ludDIsIHJlc3VsdC0+dGFy
Z2V0UG9pbnQsIEFic29sdXRlQ29vcmRpbmF0ZXMpOwogCiAgICAgICAgIG1fY29udHJvbFBvaW50
ID0gY3ViaWNQb2ludDsKLSAgICAgICAgbV9jdXJyZW50UG9pbnQgPSB0YXJnZXRQb2ludDsKKyAg
ICAgICAgbV9jdXJyZW50UG9pbnQgPSByZXN1bHQtPnRhcmdldFBvaW50OwogICAgIH0gZWxzZQot
ICAgICAgICBtX2NvbnN1bWVyLmN1cnZlVG9RdWFkcmF0aWNTbW9vdGgodGFyZ2V0UG9pbnQsIG1f
bW9kZSk7CisgICAgICAgIG1fY29uc3VtZXIuY3VydmVUb1F1YWRyYXRpY1Ntb290aChyZXN1bHQt
PnRhcmdldFBvaW50LCBtX21vZGUpOwogICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIFNWR1Bh
dGhQYXJzZXI6OnBhcnNlQXJjVG9TZWdtZW50KCkKIHsKLSAgICBmbG9hdCByeDsKLSAgICBmbG9h
dCByeTsKLSAgICBmbG9hdCBhbmdsZTsKLSAgICBib29sIGxhcmdlQXJjOwotICAgIGJvb2wgc3dl
ZXA7Ci0gICAgRmxvYXRQb2ludCB0YXJnZXRQb2ludDsKLSAgICBpZiAoIW1fc291cmNlLnBhcnNl
QXJjVG9TZWdtZW50KHJ4LCByeSwgYW5nbGUsIGxhcmdlQXJjLCBzd2VlcCwgdGFyZ2V0UG9pbnQp
KQorICAgIGF1dG8gcmVzdWx0ID0gbV9zb3VyY2UucGFyc2VBcmNUb1NlZ21lbnQoKTsKKyAgICBp
ZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gSWYgcnggPSAwIG9y
IHJ5ID0gMCB0aGVuIHRoaXMgYXJjIGlzIHRyZWF0ZWQgYXMgYSBzdHJhaWdodCBsaW5lIHNlZ21l
bnQgKGEgImxpbmV0byIpIGpvaW5pbmcgdGhlIGVuZHBvaW50cy4KICAgICAvLyBodHRwOi8vd3d3
LnczLm9yZy9UUi9TVkcvaW1wbG5vdGUuaHRtbCNBcmNPdXRPZlJhbmdlUGFyYW1ldGVycwogICAg
IC8vIElmIHRoZSBjdXJyZW50IHBvaW50IGFuZCB0YXJnZXQgcG9pbnQgZm9yIHRoZSBhcmMgYXJl
IGlkZW50aWNhbCwgaXQgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYSB6ZXJvIGxlbmd0aAogICAgIC8v
IHBhdGguIFRoaXMgZW5zdXJlcyBjb250aW51aXR5IGluIGFuaW1hdGlvbnMuCi0gICAgcnggPSBm
YWJzZihyeCk7Ci0gICAgcnkgPSBmYWJzZihyeSk7CisgICAgcmVzdWx0LT5yeCA9IGZhYnNmKHJl
c3VsdC0+cngpOworICAgIHJlc3VsdC0+cnkgPSBmYWJzZihyZXN1bHQtPnJ5KTsKICAgICBib29s
IGFyY0lzWmVyb0xlbmd0aCA9IGZhbHNlOwogICAgIGlmIChtX3BhdGhQYXJzaW5nTW9kZSA9PSBO
b3JtYWxpemVkUGFyc2luZykgewogICAgICAgICBpZiAobV9tb2RlID09IFJlbGF0aXZlQ29vcmRp
bmF0ZXMpCi0gICAgICAgICAgICBhcmNJc1plcm9MZW5ndGggPSB0YXJnZXRQb2ludCA9PSBGbG9h
dFBvaW50Ojp6ZXJvKCk7CisgICAgICAgICAgICBhcmNJc1plcm9MZW5ndGggPSByZXN1bHQtPnRh
cmdldFBvaW50ID09IEZsb2F0UG9pbnQ6Onplcm8oKTsKICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgYXJjSXNaZXJvTGVuZ3RoID0gdGFyZ2V0UG9pbnQgPT0gbV9jdXJyZW50UG9pbnQ7CisgICAg
ICAgICAgICBhcmNJc1plcm9MZW5ndGggPSByZXN1bHQtPnRhcmdldFBvaW50ID09IG1fY3VycmVu
dFBvaW50OwogICAgIH0KLSAgICBpZiAoIXJ4IHx8ICFyeSB8fCBhcmNJc1plcm9MZW5ndGgpIHsK
KyAgICBpZiAoIXJlc3VsdC0+cnggfHwgIXJlc3VsdC0+cnkgfHwgYXJjSXNaZXJvTGVuZ3RoKSB7
CiAgICAgICAgIGlmIChtX3BhdGhQYXJzaW5nTW9kZSA9PSBOb3JtYWxpemVkUGFyc2luZykgewog
ICAgICAgICAgICAgaWYgKG1fbW9kZSA9PSBSZWxhdGl2ZUNvb3JkaW5hdGVzKQotICAgICAgICAg
ICAgICAgIG1fY3VycmVudFBvaW50ICs9IHRhcmdldFBvaW50OworICAgICAgICAgICAgICAgIG1f
Y3VycmVudFBvaW50ICs9IHJlc3VsdC0+dGFyZ2V0UG9pbnQ7CiAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgbV9jdXJyZW50UG9pbnQgPSB0YXJnZXRQb2ludDsKKyAgICAgICAgICAg
ICAgICBtX2N1cnJlbnRQb2ludCA9IHJlc3VsdC0+dGFyZ2V0UG9pbnQ7CiAgICAgICAgICAgICBt
X2NvbnN1bWVyLmxpbmVUbyhtX2N1cnJlbnRQb2ludCwgQWJzb2x1dGVDb29yZGluYXRlcyk7CiAg
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV9jb25zdW1lci5saW5lVG8odGFyZ2V0UG9pbnQs
IG1fbW9kZSk7CisgICAgICAgICAgICBtX2NvbnN1bWVyLmxpbmVUbyhyZXN1bHQtPnRhcmdldFBv
aW50LCBtX21vZGUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICBpZiAobV9w
YXRoUGFyc2luZ01vZGUgPT0gTm9ybWFsaXplZFBhcnNpbmcpIHsKICAgICAgICAgRmxvYXRQb2lu
dCBwb2ludDEgPSBtX2N1cnJlbnRQb2ludDsKICAgICAgICAgaWYgKG1fbW9kZSA9PSBSZWxhdGl2
ZUNvb3JkaW5hdGVzKQotICAgICAgICAgICAgdGFyZ2V0UG9pbnQgKz0gbV9jdXJyZW50UG9pbnQ7
Ci0gICAgICAgIG1fY3VycmVudFBvaW50ID0gdGFyZ2V0UG9pbnQ7Ci0gICAgICAgIHJldHVybiBk
ZWNvbXBvc2VBcmNUb0N1YmljKGFuZ2xlLCByeCwgcnksIHBvaW50MSwgdGFyZ2V0UG9pbnQsIGxh
cmdlQXJjLCBzd2VlcCk7CisgICAgICAgICAgICByZXN1bHQtPnRhcmdldFBvaW50ICs9IG1fY3Vy
cmVudFBvaW50OworICAgICAgICBtX2N1cnJlbnRQb2ludCA9IHJlc3VsdC0+dGFyZ2V0UG9pbnQ7
CisgICAgICAgIHJldHVybiBkZWNvbXBvc2VBcmNUb0N1YmljKHJlc3VsdC0+YW5nbGUsIHJlc3Vs
dC0+cngsIHJlc3VsdC0+cnksIHBvaW50MSwgcmVzdWx0LT50YXJnZXRQb2ludCwgcmVzdWx0LT5s
YXJnZUFyYywgcmVzdWx0LT5zd2VlcCk7CiAgICAgfQotICAgIG1fY29uc3VtZXIuYXJjVG8ocngs
IHJ5LCBhbmdsZSwgbGFyZ2VBcmMsIHN3ZWVwLCB0YXJnZXRQb2ludCwgbV9tb2RlKTsKKyAgICBt
X2NvbnN1bWVyLmFyY1RvKHJlc3VsdC0+cngsIHJlc3VsdC0+cnksIHJlc3VsdC0+YW5nbGUsIHJl
c3VsdC0+bGFyZ2VBcmMsIHJlc3VsdC0+c3dlZXAsIHJlc3VsdC0+dGFyZ2V0UG9pbnQsIG1fbW9k
ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTMxMiw4ICszMDQsMTEgQEAgYm9vbCBTVkdQ
YXRoUGFyc2VyOjpwYXJzZVBhdGhEYXRhKGJvb2wgYwogICAgIGlmICghbV9zb3VyY2UubW92ZVRv
TmV4dFRva2VuKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgU1ZHUGF0aFNlZ1R5cGUg
Y29tbWFuZDsKLSAgICBtX3NvdXJjZS5wYXJzZVNWR1NlZ21lbnRUeXBlKGNvbW1hbmQpOworICAg
IGF1dG8gcGFyc2VkQ29tbWFuZCA9IG1fc291cmNlLnBhcnNlU1ZHU2VnbWVudFR5cGUoKTsKKyAg
ICBpZiAoIXBhcnNlZENvbW1hbmQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8g
Y29tbWFuZCA9ICpwYXJzZWRDb21tYW5kOwogCiAgICAgLy8gUGF0aCBtdXN0IHN0YXJ0IHdpdGgg
bW92ZXRvLgogICAgIGlmIChjaGVja0ZvckluaXRpYWxNb3ZlVG8gJiYgY29tbWFuZCAhPSBQYXRo
U2VnTW92ZVRvQWJzICYmIGNvbW1hbmQgIT0gUGF0aFNlZ01vdmVUb1JlbCkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdQYXRoUGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1BhdGhQYXJzZXIuaAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1BhdGhQYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBTVkdQYXRoQnl0ZVN0cmVhbTsKIGNsYXNzIFNWR1Bh
dGhTb3VyY2U7CiAKLWNsYXNzIFNWR1BhdGhQYXJzZXIgeworY2xhc3MgU1ZHUGF0aFBhcnNlciBm
aW5hbCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgcGFyc2UoU1ZHUGF0aFNvdXJjZSYsIFNW
R1BhdGhDb25zdW1lciYsIFBhdGhQYXJzaW5nTW9kZSA9IE5vcm1hbGl6ZWRQYXJzaW5nLCBib29s
IGNoZWNrRm9ySW5pdGlhbE1vdmVUbyA9IHRydWUpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHUGF0aFNlZ0xpc3RTb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdQYXRoU2VnTGlzdFNvdXJjZS5jcHAJKHJldmlzaW9uIDI2MzE3NikKKysrIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU2VnTGlzdFNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQwLDE1ICs0MCwxNSBAQCBib29sIFNWR1BhdGhTZWdMaXN0U291cmNlOjpoYXNNb3JlRGF0YSgp
CiAgICAgcmV0dXJuIG1faXRlbUN1cnJlbnQgPCBtX2l0ZW1FbmQ7CiB9CiAKLWJvb2wgU1ZHUGF0
aFNlZ0xpc3RTb3VyY2U6OnBhcnNlU1ZHU2VnbWVudFR5cGUoU1ZHUGF0aFNlZ1R5cGUmIHBhdGhT
ZWdUeXBlKQorU1ZHUGF0aFNlZ1R5cGUgU1ZHUGF0aFNlZ0xpc3RTb3VyY2U6Om5leHRDb21tYW5k
KFNWR1BhdGhTZWdUeXBlKQogewogICAgIG1fc2VnbWVudCA9IG1fcGF0aFNlZ0xpc3QuYXQobV9p
dGVtQ3VycmVudCk7Ci0gICAgcGF0aFNlZ1R5cGUgPSBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnVHlw
ZT4obV9zZWdtZW50LT5wYXRoU2VnVHlwZSgpKTsKKyAgICBTVkdQYXRoU2VnVHlwZSBwYXRoU2Vn
VHlwZSA9IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdUeXBlPihtX3NlZ21lbnQtPnBhdGhTZWdUeXBl
KCkpOwogICAgICsrbV9pdGVtQ3VycmVudDsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4g
cGF0aFNlZ1R5cGU7CiB9CiAKLVNWR1BhdGhTZWdUeXBlIFNWR1BhdGhTZWdMaXN0U291cmNlOjpu
ZXh0Q29tbWFuZChTVkdQYXRoU2VnVHlwZSkKK09wdGlvbmFsPFNWR1BhdGhTZWdUeXBlPiBTVkdQ
YXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VTVkdTZWdtZW50VHlwZSgpCiB7CiAgICAgbV9zZWdtZW50
ID0gbV9wYXRoU2VnTGlzdC5hdChtX2l0ZW1DdXJyZW50KTsKICAgICBTVkdQYXRoU2VnVHlwZSBw
YXRoU2VnVHlwZSA9IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdUeXBlPihtX3NlZ21lbnQtPnBhdGhT
ZWdUeXBlKCkpOwpAQCAtNTYsOTQgKzU2LDExMiBAQCBTVkdQYXRoU2VnVHlwZSBTVkdQYXRoU2Vn
TGlzdFNvdXJjZTo6bmV4CiAgICAgcmV0dXJuIHBhdGhTZWdUeXBlOwogfQogCi1ib29sIFNWR1Bh
dGhTZWdMaXN0U291cmNlOjpwYXJzZU1vdmVUb1NlZ21lbnQoRmxvYXRQb2ludCYgdGFyZ2V0UG9p
bnQpCitPcHRpb25hbDxTVkdQYXRoU291cmNlOjpNb3ZlVG9TZWdtZW50PiBTVkdQYXRoU2VnTGlz
dFNvdXJjZTo6cGFyc2VNb3ZlVG9TZWdtZW50KCkKIHsKICAgICBBU1NFUlQobV9zZWdtZW50KTsK
ICAgICBBU1NFUlQobV9zZWdtZW50LT5wYXRoU2VnVHlwZSgpID09IFBhdGhTZWdNb3ZlVG9BYnMg
fHwgbV9zZWdtZW50LT5wYXRoU2VnVHlwZSgpID09IFBhdGhTZWdNb3ZlVG9SZWwpOwogICAgIFNW
R1BhdGhTZWdTaW5nbGVDb29yZGluYXRlKiBtb3ZlVG8gPSBzdGF0aWNfY2FzdDxTVkdQYXRoU2Vn
U2luZ2xlQ29vcmRpbmF0ZSo+KG1fc2VnbWVudC5nZXQoKSk7Ci0gICAgdGFyZ2V0UG9pbnQgPSBG
bG9hdFBvaW50KG1vdmVUby0+eCgpLCBtb3ZlVG8tPnkoKSk7Ci0gICAgcmV0dXJuIHRydWU7Cisg
ICAgCisgICAgTW92ZVRvU2VnbWVudCBzZWdtZW50OworICAgIHNlZ21lbnQudGFyZ2V0UG9pbnQg
PSBGbG9hdFBvaW50KG1vdmVUby0+eCgpLCBtb3ZlVG8tPnkoKSk7CisgICAgcmV0dXJuIHNlZ21l
bnQ7CiB9CiAKLWJvb2wgU1ZHUGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNlTGluZVRvU2VnbWVudChG
bG9hdFBvaW50JiB0YXJnZXRQb2ludCkKK09wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkxpbmVUb1Nl
Z21lbnQ+IFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUxpbmVUb1NlZ21lbnQoKQogewogICAg
IEFTU0VSVChtX3NlZ21lbnQpOwogICAgIEFTU0VSVChtX3NlZ21lbnQtPnBhdGhTZWdUeXBlKCkg
PT0gUGF0aFNlZ0xpbmVUb0FicyB8fCBtX3NlZ21lbnQtPnBhdGhTZWdUeXBlKCkgPT0gUGF0aFNl
Z0xpbmVUb1JlbCk7CiAgICAgU1ZHUGF0aFNlZ1NpbmdsZUNvb3JkaW5hdGUqIGxpbmVUbyA9IHN0
YXRpY19jYXN0PFNWR1BhdGhTZWdTaW5nbGVDb29yZGluYXRlKj4obV9zZWdtZW50LmdldCgpKTsK
LSAgICB0YXJnZXRQb2ludCA9IEZsb2F0UG9pbnQobGluZVRvLT54KCksIGxpbmVUby0+eSgpKTsK
LSAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBMaW5lVG9TZWdtZW50IHNlZ21lbnQ7CisgICAg
c2VnbWVudC50YXJnZXRQb2ludCA9IEZsb2F0UG9pbnQobGluZVRvLT54KCksIGxpbmVUby0+eSgp
KTsKKyAgICByZXR1cm4gc2VnbWVudDsKIH0KIAotYm9vbCBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6
cGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudChmbG9hdCYgeCkKK09wdGlvbmFsPFNWR1BhdGhT
b3VyY2U6OkxpbmVUb0hvcml6b250YWxTZWdtZW50PiBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFy
c2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudCgpCiB7CiAgICAgQVNTRVJUKG1fc2VnbWVudCk7CiAg
ICAgQVNTRVJUKG1fc2VnbWVudC0+cGF0aFNlZ1R5cGUoKSA9PSBQYXRoU2VnTGluZVRvSG9yaXpv
bnRhbEFicyB8fCBtX3NlZ21lbnQtPnBhdGhTZWdUeXBlKCkgPT0gUGF0aFNlZ0xpbmVUb0hvcml6
b250YWxSZWwpOwogICAgIFNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsKiBob3Jpem9udGFsID0g
c3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWwqPihtX3NlZ21lbnQuZ2V0KCkp
OwotICAgIHggPSBob3Jpem9udGFsLT54KCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgCisgICAg
TGluZVRvSG9yaXpvbnRhbFNlZ21lbnQgc2VnbWVudDsKKyAgICBzZWdtZW50LnggPSBob3Jpem9u
dGFsLT54KCk7CisgICAgcmV0dXJuIHNlZ21lbnQ7CiB9CiAKLWJvb2wgU1ZHUGF0aFNlZ0xpc3RT
b3VyY2U6OnBhcnNlTGluZVRvVmVydGljYWxTZWdtZW50KGZsb2F0JiB5KQorT3B0aW9uYWw8U1ZH
UGF0aFNvdXJjZTo6TGluZVRvVmVydGljYWxTZWdtZW50PiBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6
cGFyc2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnQoKQogewogICAgIEFTU0VSVChtX3NlZ21lbnQpOwog
ICAgIEFTU0VSVChtX3NlZ21lbnQtPnBhdGhTZWdUeXBlKCkgPT0gUGF0aFNlZ0xpbmVUb1ZlcnRp
Y2FsQWJzIHx8IG1fc2VnbWVudC0+cGF0aFNlZ1R5cGUoKSA9PSBQYXRoU2VnTGluZVRvVmVydGlj
YWxSZWwpOwogICAgIFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbCogdmVydGljYWwgPSBzdGF0aWNf
Y2FzdDxTVkdQYXRoU2VnTGluZXRvVmVydGljYWwqPihtX3NlZ21lbnQuZ2V0KCkpOwotICAgIHkg
PSB2ZXJ0aWNhbC0+eSgpOwotICAgIHJldHVybiB0cnVlOworICAgIAorICAgIExpbmVUb1ZlcnRp
Y2FsU2VnbWVudCBzZWdtZW50OworICAgIHNlZ21lbnQueSA9IHZlcnRpY2FsLT55KCk7CisgICAg
cmV0dXJuIHNlZ21lbnQ7CiB9CiAKLWJvb2wgU1ZHUGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNlQ3Vy
dmVUb0N1YmljU2VnbWVudChGbG9hdFBvaW50JiBwb2ludDEsIEZsb2F0UG9pbnQmIHBvaW50Miwg
RmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCitPcHRpb25hbDxTVkdQYXRoU291cmNlOjpDdXJ2ZVRv
Q3ViaWNTZWdtZW50PiBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VDdXJ2ZVRvQ3ViaWNTZWdt
ZW50KCkKIHsKICAgICBBU1NFUlQobV9zZWdtZW50KTsKICAgICBBU1NFUlQobV9zZWdtZW50LT5w
YXRoU2VnVHlwZSgpID09IFBhdGhTZWdDdXJ2ZVRvQ3ViaWNBYnMgfHwgbV9zZWdtZW50LT5wYXRo
U2VnVHlwZSgpID09IFBhdGhTZWdDdXJ2ZVRvQ3ViaWNSZWwpOwogICAgIFNWR1BhdGhTZWdDdXJ2
ZXRvQ3ViaWMqIGN1YmljID0gc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0N1cnZldG9DdWJpYyo+KG1f
c2VnbWVudC5nZXQoKSk7Ci0gICAgcG9pbnQxID0gRmxvYXRQb2ludChjdWJpYy0+eDEoKSwgY3Vi
aWMtPnkxKCkpOwotICAgIHBvaW50MiA9IEZsb2F0UG9pbnQoY3ViaWMtPngyKCksIGN1YmljLT55
MigpKTsKLSAgICB0YXJnZXRQb2ludCA9IEZsb2F0UG9pbnQoY3ViaWMtPngoKSwgY3ViaWMtPnko
KSk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgQ3VydmVUb0N1YmljU2VnbWVudCBzZWdt
ZW50OworICAgIHNlZ21lbnQucG9pbnQxID0gRmxvYXRQb2ludChjdWJpYy0+eDEoKSwgY3ViaWMt
PnkxKCkpOworICAgIHNlZ21lbnQucG9pbnQyID0gRmxvYXRQb2ludChjdWJpYy0+eDIoKSwgY3Vi
aWMtPnkyKCkpOworICAgIHNlZ21lbnQudGFyZ2V0UG9pbnQgPSBGbG9hdFBvaW50KGN1YmljLT54
KCksIGN1YmljLT55KCkpOworICAgIHJldHVybiBzZWdtZW50OwogfQogCi1ib29sIFNWR1BhdGhT
ZWdMaXN0U291cmNlOjpwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQoRmxvYXRQb2ludCYg
cG9pbnQyLCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCkKK09wdGlvbmFsPFNWR1BhdGhTb3VyY2U6
OkN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQ+IFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUN1
cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQoKQogewogICAgIEFTU0VSVChtX3NlZ21lbnQpOwogICAg
IEFTU0VSVChtX3NlZ21lbnQtPnBhdGhTZWdUeXBlKCkgPT0gUGF0aFNlZ0N1cnZlVG9DdWJpY1Nt
b290aEFicyB8fCBtX3NlZ21lbnQtPnBhdGhTZWdUeXBlKCkgPT0gUGF0aFNlZ0N1cnZlVG9DdWJp
Y1Ntb290aFJlbCk7CiAgICAgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aCogY3ViaWNTbW9v
dGggPSBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoKj4obV9zZWdtZW50
LmdldCgpKTsKLSAgICBwb2ludDIgPSBGbG9hdFBvaW50KGN1YmljU21vb3RoLT54MigpLCBjdWJp
Y1Ntb290aC0+eTIoKSk7Ci0gICAgdGFyZ2V0UG9pbnQgPSBGbG9hdFBvaW50KGN1YmljU21vb3Ro
LT54KCksIGN1YmljU21vb3RoLT55KCkpOwotICAgIHJldHVybiB0cnVlOworICAgIAorICAgIEN1
cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQgc2VnbWVudDsKKyAgICBzZWdtZW50LnBvaW50MiA9IEZs
b2F0UG9pbnQoY3ViaWNTbW9vdGgtPngyKCksIGN1YmljU21vb3RoLT55MigpKTsKKyAgICBzZWdt
ZW50LnRhcmdldFBvaW50ID0gRmxvYXRQb2ludChjdWJpY1Ntb290aC0+eCgpLCBjdWJpY1Ntb290
aC0+eSgpKTsKKyAgICByZXR1cm4gc2VnbWVudDsKIH0KIAotYm9vbCBTVkdQYXRoU2VnTGlzdFNv
dXJjZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudChGbG9hdFBvaW50JiBwb2ludDEsIEZs
b2F0UG9pbnQmIHRhcmdldFBvaW50KQorT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6Q3VydmVUb1F1
YWRyYXRpY1NlZ21lbnQ+IFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0
aWNTZWdtZW50KCkKIHsKICAgICBBU1NFUlQobV9zZWdtZW50KTsKICAgICBBU1NFUlQobV9zZWdt
ZW50LT5wYXRoU2VnVHlwZSgpID09IFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljQWJzIHx8IG1fc2Vn
bWVudC0+cGF0aFNlZ1R5cGUoKSA9PSBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY1JlbCk7CiAgICAg
U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWMqIHF1YWRyYXRpYyA9IHN0YXRpY19jYXN0PFNWR1Bh
dGhTZWdDdXJ2ZXRvUXVhZHJhdGljKj4obV9zZWdtZW50LmdldCgpKTsKLSAgICBwb2ludDEgPSBG
bG9hdFBvaW50KHF1YWRyYXRpYy0+eDEoKSwgcXVhZHJhdGljLT55MSgpKTsKLSAgICB0YXJnZXRQ
b2ludCA9IEZsb2F0UG9pbnQocXVhZHJhdGljLT54KCksIHF1YWRyYXRpYy0+eSgpKTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCBzZWdtZW50Owor
ICAgIHNlZ21lbnQucG9pbnQxID0gRmxvYXRQb2ludChxdWFkcmF0aWMtPngxKCksIHF1YWRyYXRp
Yy0+eTEoKSk7CisgICAgc2VnbWVudC50YXJnZXRQb2ludCA9IEZsb2F0UG9pbnQocXVhZHJhdGlj
LT54KCksIHF1YWRyYXRpYy0+eSgpKTsKKyAgICByZXR1cm4gc2VnbWVudDsKIH0KIAotYm9vbCBT
VkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudChG
bG9hdFBvaW50JiB0YXJnZXRQb2ludCkKK09wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkN1cnZlVG9R
dWFkcmF0aWNTbW9vdGhTZWdtZW50PiBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VDdXJ2ZVRv
UXVhZHJhdGljU21vb3RoU2VnbWVudCgpCiB7CiAgICAgQVNTRVJUKG1fc2VnbWVudCk7CiAgICAg
QVNTRVJUKG1fc2VnbWVudC0+cGF0aFNlZ1R5cGUoKSA9PSBQYXRoU2VnQ3VydmVUb1F1YWRyYXRp
Y1Ntb290aEFicyB8fCBtX3NlZ21lbnQtPnBhdGhTZWdUeXBlKCkgPT0gUGF0aFNlZ0N1cnZlVG9R
dWFkcmF0aWNTbW9vdGhSZWwpOwogICAgIFNWR1BhdGhTZWdTaW5nbGVDb29yZGluYXRlKiBxdWFk
cmF0aWNTbW9vdGggPSBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnU2luZ2xlQ29vcmRpbmF0ZSo+KG1f
c2VnbWVudC5nZXQoKSk7Ci0gICAgdGFyZ2V0UG9pbnQgPSBGbG9hdFBvaW50KHF1YWRyYXRpY1Nt
b290aC0+eCgpLCBxdWFkcmF0aWNTbW9vdGgtPnkoKSk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAg
CisgICAgQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQgc2VnbWVudDsKKyAgICBzZWdtZW50
LnRhcmdldFBvaW50ID0gRmxvYXRQb2ludChxdWFkcmF0aWNTbW9vdGgtPngoKSwgcXVhZHJhdGlj
U21vb3RoLT55KCkpOworICAgIHJldHVybiBzZWdtZW50OwogfQogCi1ib29sIFNWR1BhdGhTZWdM
aXN0U291cmNlOjpwYXJzZUFyY1RvU2VnbWVudChmbG9hdCYgcngsIGZsb2F0JiByeSwgZmxvYXQm
IGFuZ2xlLCBib29sJiBsYXJnZUFyYywgYm9vbCYgc3dlZXAsIEZsb2F0UG9pbnQmIHRhcmdldFBv
aW50KQorT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6QXJjVG9TZWdtZW50PiBTVkdQYXRoU2VnTGlz
dFNvdXJjZTo6cGFyc2VBcmNUb1NlZ21lbnQoKQogewogICAgIEFTU0VSVChtX3NlZ21lbnQpOwog
ICAgIEFTU0VSVChtX3NlZ21lbnQtPnBhdGhTZWdUeXBlKCkgPT0gUGF0aFNlZ0FyY0FicyB8fCBt
X3NlZ21lbnQtPnBhdGhTZWdUeXBlKCkgPT0gUGF0aFNlZ0FyY1JlbCk7CiAgICAgU1ZHUGF0aFNl
Z0FyYyogYXJjVG8gPSBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnQXJjKj4obV9zZWdtZW50LmdldCgp
KTsKLSAgICByeCA9IGFyY1RvLT5yMSgpOwotICAgIHJ5ID0gYXJjVG8tPnIyKCk7Ci0gICAgYW5n
bGUgPSBhcmNUby0+YW5nbGUoKTsKLSAgICBsYXJnZUFyYyA9IGFyY1RvLT5sYXJnZUFyY0ZsYWco
KTsKLSAgICBzd2VlcCA9IGFyY1RvLT5zd2VlcEZsYWcoKTsKLSAgICB0YXJnZXRQb2ludCA9IEZs
b2F0UG9pbnQoYXJjVG8tPngoKSwgYXJjVG8tPnkoKSk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAg
CisgICAgQXJjVG9TZWdtZW50IHNlZ21lbnQ7CisgICAgc2VnbWVudC5yeCA9IGFyY1RvLT5yMSgp
OworICAgIHNlZ21lbnQucnkgPSBhcmNUby0+cjIoKTsKKyAgICBzZWdtZW50LmFuZ2xlID0gYXJj
VG8tPmFuZ2xlKCk7CisgICAgc2VnbWVudC5sYXJnZUFyYyA9IGFyY1RvLT5sYXJnZUFyY0ZsYWco
KTsKKyAgICBzZWdtZW50LnN3ZWVwID0gYXJjVG8tPnN3ZWVwRmxhZygpOworICAgIHNlZ21lbnQu
dGFyZ2V0UG9pbnQgPSBGbG9hdFBvaW50KGFyY1RvLT54KCksIGFyY1RvLT55KCkpOworICAgIHJl
dHVybiBzZWdtZW50OwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFNl
Z0xpc3RTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFNl
Z0xpc3RTb3VyY2UuaAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1BhdGhTZWdMaXN0U291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDE4ICszNiwxOCBAQCBw
dWJsaWM6CiBwcml2YXRlOgogICAgIGJvb2wgaGFzTW9yZURhdGEoKSBjb25zdCBmaW5hbDsKICAg
ICBib29sIG1vdmVUb05leHRUb2tlbigpIGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KLSAgICBib29s
IHBhcnNlU1ZHU2VnbWVudFR5cGUoU1ZHUGF0aFNlZ1R5cGUmKSBmaW5hbDsKICAgICBTVkdQYXRo
U2VnVHlwZSBuZXh0Q29tbWFuZChTVkdQYXRoU2VnVHlwZSkgZmluYWw7CiAKLSAgICBib29sIHBh
cnNlTW92ZVRvU2VnbWVudChGbG9hdFBvaW50JikgZmluYWw7Ci0gICAgYm9vbCBwYXJzZUxpbmVU
b1NlZ21lbnQoRmxvYXRQb2ludCYpIGZpbmFsOwotICAgIGJvb2wgcGFyc2VMaW5lVG9Ib3Jpem9u
dGFsU2VnbWVudChmbG9hdCYpIGZpbmFsOwotICAgIGJvb2wgcGFyc2VMaW5lVG9WZXJ0aWNhbFNl
Z21lbnQoZmxvYXQmKSBmaW5hbDsKLSAgICBib29sIHBhcnNlQ3VydmVUb0N1YmljU2VnbWVudChG
bG9hdFBvaW50JiwgRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmKSBmaW5hbDsKLSAgICBib29sIHBh
cnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudChGbG9hdFBvaW50JiwgRmxvYXRQb2ludCYpIGZp
bmFsOwotICAgIGJvb2wgcGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudChGbG9hdFBvaW50Jiwg
RmxvYXRQb2ludCYpIGZpbmFsOwotICAgIGJvb2wgcGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3Ro
U2VnbWVudChGbG9hdFBvaW50JikgZmluYWw7Ci0gICAgYm9vbCBwYXJzZUFyY1RvU2VnbWVudChm
bG9hdCYsIGZsb2F0JiwgZmxvYXQmLCBib29sJiwgYm9vbCYsIEZsb2F0UG9pbnQmKSBmaW5hbDsK
KyAgICBPcHRpb25hbDxTVkdQYXRoU2VnVHlwZT4gcGFyc2VTVkdTZWdtZW50VHlwZSgpIGZpbmFs
OworICAgIE9wdGlvbmFsPE1vdmVUb1NlZ21lbnQ+IHBhcnNlTW92ZVRvU2VnbWVudCgpIGZpbmFs
OworICAgIE9wdGlvbmFsPExpbmVUb1NlZ21lbnQ+IHBhcnNlTGluZVRvU2VnbWVudCgpIGZpbmFs
OworICAgIE9wdGlvbmFsPExpbmVUb0hvcml6b250YWxTZWdtZW50PiBwYXJzZUxpbmVUb0hvcml6
b250YWxTZWdtZW50KCkgZmluYWw7CisgICAgT3B0aW9uYWw8TGluZVRvVmVydGljYWxTZWdtZW50
PiBwYXJzZUxpbmVUb1ZlcnRpY2FsU2VnbWVudCgpIGZpbmFsOworICAgIE9wdGlvbmFsPEN1cnZl
VG9DdWJpY1NlZ21lbnQ+IHBhcnNlQ3VydmVUb0N1YmljU2VnbWVudCgpIGZpbmFsOworICAgIE9w
dGlvbmFsPEN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQ+IHBhcnNlQ3VydmVUb0N1YmljU21vb3Ro
U2VnbWVudCgpIGZpbmFsOworICAgIE9wdGlvbmFsPEN1cnZlVG9RdWFkcmF0aWNTZWdtZW50PiBw
YXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KCkgZmluYWw7CisgICAgT3B0aW9uYWw8Q3VydmVU
b1F1YWRyYXRpY1Ntb290aFNlZ21lbnQ+IHBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21l
bnQoKSBmaW5hbDsKKyAgICBPcHRpb25hbDxBcmNUb1NlZ21lbnQ+IHBhcnNlQXJjVG9TZWdtZW50
KCkgZmluYWw7CiAKICAgICBjb25zdCBTVkdQYXRoU2VnTGlzdCYgbV9wYXRoU2VnTGlzdDsKICAg
ICBSZWZQdHI8U1ZHUGF0aFNlZz4gbV9zZWdtZW50OwpJbmRleDogU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1BhdGhTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0
aFNvdXJjZS5oCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0
aFNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxOCArMzMsNjMgQEAgcHVibGljOgogCiAg
ICAgdmlydHVhbCBib29sIGhhc01vcmVEYXRhKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9v
bCBtb3ZlVG9OZXh0VG9rZW4oKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHBhcnNlU1ZHU2VnbWVu
dFR5cGUoU1ZHUGF0aFNlZ1R5cGUmKSA9IDA7CiAgICAgdmlydHVhbCBTVkdQYXRoU2VnVHlwZSBu
ZXh0Q29tbWFuZChTVkdQYXRoU2VnVHlwZSBwcmV2aW91c0NvbW1hbmQpID0gMDsKIAotICAgIHZp
cnR1YWwgYm9vbCBwYXJzZU1vdmVUb1NlZ21lbnQoRmxvYXRQb2ludCYpID0gMDsKLSAgICB2aXJ0
dWFsIGJvb2wgcGFyc2VMaW5lVG9TZWdtZW50KEZsb2F0UG9pbnQmKSA9IDA7Ci0gICAgdmlydHVh
bCBib29sIHBhcnNlTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQoZmxvYXQmKSA9IDA7Ci0gICAgdmly
dHVhbCBib29sIHBhcnNlTGluZVRvVmVydGljYWxTZWdtZW50KGZsb2F0JikgPSAwOwotICAgIHZp
cnR1YWwgYm9vbCBwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQoRmxvYXRQb2ludCYsIEZsb2F0UG9p
bnQmLCBGbG9hdFBvaW50JikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBwYXJzZUN1cnZlVG9DdWJp
Y1Ntb290aFNlZ21lbnQoRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmKSA9IDA7Ci0gICAgdmlydHVh
bCBib29sIHBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQoRmxvYXRQb2ludCYsIEZsb2F0UG9p
bnQmKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNl
Z21lbnQoRmxvYXRQb2ludCYpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VBcmNUb1NlZ21l
bnQoZmxvYXQmLCBmbG9hdCYsIGZsb2F0JiwgYm9vbCYsIGJvb2wmLCBGbG9hdFBvaW50JikgPSAw
OworICAgIHZpcnR1YWwgT3B0aW9uYWw8U1ZHUGF0aFNlZ1R5cGU+IHBhcnNlU1ZHU2VnbWVudFR5
cGUoKSA9IDA7CisKKyAgICBzdHJ1Y3QgTW92ZVRvU2VnbWVudCB7CisgICAgICAgIEZsb2F0UG9p
bnQgdGFyZ2V0UG9pbnQ7CisgICAgfTsKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPE1vdmVUb1NlZ21l
bnQ+IHBhcnNlTW92ZVRvU2VnbWVudCgpID0gMDsKKworICAgIHN0cnVjdCBMaW5lVG9TZWdtZW50
IHsKKyAgICAgICAgRmxvYXRQb2ludCB0YXJnZXRQb2ludDsKKyAgICB9OworICAgIHZpcnR1YWwg
T3B0aW9uYWw8TGluZVRvU2VnbWVudD4gcGFyc2VMaW5lVG9TZWdtZW50KCkgPSAwOworCisgICAg
c3RydWN0IExpbmVUb0hvcml6b250YWxTZWdtZW50IHsKKyAgICAgICAgZmxvYXQgeDsKKyAgICB9
OworICAgIHZpcnR1YWwgT3B0aW9uYWw8TGluZVRvSG9yaXpvbnRhbFNlZ21lbnQ+IHBhcnNlTGlu
ZVRvSG9yaXpvbnRhbFNlZ21lbnQoKSA9IDA7CisKKyAgICBzdHJ1Y3QgTGluZVRvVmVydGljYWxT
ZWdtZW50IHsKKyAgICAgICAgZmxvYXQgeTsKKyAgICB9OworICAgIHZpcnR1YWwgT3B0aW9uYWw8
TGluZVRvVmVydGljYWxTZWdtZW50PiBwYXJzZUxpbmVUb1ZlcnRpY2FsU2VnbWVudCgpID0gMDsK
KworICAgIHN0cnVjdCBDdXJ2ZVRvQ3ViaWNTZWdtZW50IHsKKyAgICAgICAgRmxvYXRQb2ludCBw
b2ludDE7CisgICAgICAgIEZsb2F0UG9pbnQgcG9pbnQyOworICAgICAgICBGbG9hdFBvaW50IHRh
cmdldFBvaW50OworICAgIH07CisgICAgdmlydHVhbCBPcHRpb25hbDxDdXJ2ZVRvQ3ViaWNTZWdt
ZW50PiBwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQoKSA9IDA7CisKKyAgICBzdHJ1Y3QgQ3VydmVU
b0N1YmljU21vb3RoU2VnbWVudCB7CisgICAgICAgIEZsb2F0UG9pbnQgcG9pbnQyOworICAgICAg
ICBGbG9hdFBvaW50IHRhcmdldFBvaW50OworICAgIH07CisgICAgdmlydHVhbCBPcHRpb25hbDxD
dXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50PiBwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQo
KSA9IDA7CisKKyAgICBzdHJ1Y3QgQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQgeworICAgICAgICBG
bG9hdFBvaW50IHBvaW50MTsKKyAgICAgICAgRmxvYXRQb2ludCB0YXJnZXRQb2ludDsKKyAgICB9
OworICAgIHZpcnR1YWwgT3B0aW9uYWw8Q3VydmVUb1F1YWRyYXRpY1NlZ21lbnQ+IHBhcnNlQ3Vy
dmVUb1F1YWRyYXRpY1NlZ21lbnQoKSA9IDA7CisKKyAgICBzdHJ1Y3QgQ3VydmVUb1F1YWRyYXRp
Y1Ntb290aFNlZ21lbnQgeworICAgICAgICBGbG9hdFBvaW50IHRhcmdldFBvaW50OworICAgIH07
CisgICAgdmlydHVhbCBPcHRpb25hbDxDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudD4gcGFy
c2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudCgpID0gMDsKKworICAgIHN0cnVjdCBBcmNU
b1NlZ21lbnQgeworICAgICAgICBmbG9hdCByeDsKKyAgICAgICAgZmxvYXQgcnk7CisgICAgICAg
IGZsb2F0IGFuZ2xlOworICAgICAgICBib29sIGxhcmdlQXJjOworICAgICAgICBib29sIHN3ZWVw
OworICAgICAgICBGbG9hdFBvaW50IHRhcmdldFBvaW50OworICAgIH07CisgICAgdmlydHVhbCBP
cHRpb25hbDxBcmNUb1NlZ21lbnQ+IHBhcnNlQXJjVG9TZWdtZW50KCkgPSAwOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTdHJp
bmdTb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU3Ry
aW5nU291cmNlLmNwcAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1BhdGhTdHJpbmdTb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSwxOTUgKzU1LDI4MCBA
QCBib29sIFNWR1BhdGhTdHJpbmdTb3VyY2U6Om1vdmVUb05leHRUb2tlCiAgICAgcmV0dXJuIHNr
aXBPcHRpb25hbFNWR1NwYWNlcyhtX2N1cnJlbnQubV9jaGFyYWN0ZXIxNiwgbV9lbmQubV9jaGFy
YWN0ZXIxNik7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGlj
IGJvb2wgcGFyc2VTVkdTZWdtZW50VHlwZUhlbHBlcihjb25zdCBDaGFyYWN0ZXJUeXBlKiYgY3Vy
cmVudCwgU1ZHUGF0aFNlZ1R5cGUmIHBhdGhTZWdUeXBlKQordGVtcGxhdGUgPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+IHN0YXRpYyBPcHRpb25hbDxTVkdQYXRoU2VnVHlwZT4gbmV4dENvbW1hbmRI
ZWxwZXIoY29uc3QgQ2hhcmFjdGVyVHlwZSomIGN1cnJlbnQsIFNWR1BhdGhTZWdUeXBlIHByZXZp
b3VzQ29tbWFuZCkKK3sKKyAgICAvLyBDaGVjayBmb3IgcmVtYWluaW5nIGNvb3JkaW5hdGVzIGlu
IHRoZSBjdXJyZW50IGNvbW1hbmQuCisgICAgaWYgKCgqY3VycmVudCA9PSAnKycgfHwgKmN1cnJl
bnQgPT0gJy0nIHx8ICpjdXJyZW50ID09ICcuJyB8fCBpc0FTQ0lJRGlnaXQoKmN1cnJlbnQpKQor
ICAgICAgICAmJiBwcmV2aW91c0NvbW1hbmQgIT0gUGF0aFNlZ0Nsb3NlUGF0aCkgeworICAgICAg
ICBpZiAocHJldmlvdXNDb21tYW5kID09IFBhdGhTZWdNb3ZlVG9BYnMpCisgICAgICAgICAgICBy
ZXR1cm4gUGF0aFNlZ0xpbmVUb0FiczsKKyAgICAgICAgaWYgKHByZXZpb3VzQ29tbWFuZCA9PSBQ
YXRoU2VnTW92ZVRvUmVsKQorICAgICAgICAgICAgcmV0dXJuIFBhdGhTZWdMaW5lVG9SZWw7Cisg
ICAgICAgIHJldHVybiBwcmV2aW91c0NvbW1hbmQ7CisgICAgfQorCisgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKK30KKworU1ZHUGF0aFNlZ1R5cGUgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6bmV4dENv
bW1hbmQoU1ZHUGF0aFNlZ1R5cGUgcHJldmlvdXNDb21tYW5kKQoreworICAgIGlmIChtX2lzOEJp
dFNvdXJjZSkgeworICAgICAgICBpZiAoYXV0byBuZXh0Q29tbWFuZCA9IG5leHRDb21tYW5kSGVs
cGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjgsIHByZXZpb3VzQ29tbWFuZCkpCisgICAgICAgICAg
ICByZXR1cm4gKm5leHRDb21tYW5kOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChhdXRvIG5l
eHRDb21tYW5kID0gbmV4dENvbW1hbmRIZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYsIHBy
ZXZpb3VzQ29tbWFuZCkpCisgICAgICAgICAgICByZXR1cm4gKm5leHRDb21tYW5kOworICAgIH0K
KworICAgIHJldHVybiAqcGFyc2VTVkdTZWdtZW50VHlwZSgpOworfQorCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIFNWR1BhdGhTZWdUeXBlIHBhcnNlU1ZHU2VnbWVu
dFR5cGVIZWxwZXIoY29uc3QgQ2hhcmFjdGVyVHlwZSomIGN1cnJlbnQpCiB7CiAgICAgc3dpdGNo
ICgqKGN1cnJlbnQrKykpIHsKICAgICBjYXNlICdaJzoKICAgICBjYXNlICd6JzoKLSAgICAgICAg
cGF0aFNlZ1R5cGUgPSBQYXRoU2VnQ2xvc2VQYXRoOwotICAgICAgICBicmVhazsKKyAgICAgICAg
cmV0dXJuIFBhdGhTZWdDbG9zZVBhdGg7CiAgICAgY2FzZSAnTSc6Ci0gICAgICAgIHBhdGhTZWdU
eXBlID0gUGF0aFNlZ01vdmVUb0FiczsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBQ
YXRoU2VnTW92ZVRvQWJzOwogICAgIGNhc2UgJ20nOgotICAgICAgICBwYXRoU2VnVHlwZSA9IFBh
dGhTZWdNb3ZlVG9SZWw7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gUGF0aFNlZ01v
dmVUb1JlbDsKICAgICBjYXNlICdMJzoKLSAgICAgICAgcGF0aFNlZ1R5cGUgPSBQYXRoU2VnTGlu
ZVRvQWJzOwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIFBhdGhTZWdMaW5lVG9BYnM7
CiAgICAgY2FzZSAnbCc6Ci0gICAgICAgIHBhdGhTZWdUeXBlID0gUGF0aFNlZ0xpbmVUb1JlbDsK
LSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBQYXRoU2VnTGluZVRvUmVsOwogICAgIGNh
c2UgJ0MnOgotICAgICAgICBwYXRoU2VnVHlwZSA9IFBhdGhTZWdDdXJ2ZVRvQ3ViaWNBYnM7Ci0g
ICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gUGF0aFNlZ0N1cnZlVG9DdWJpY0FiczsKICAg
ICBjYXNlICdjJzoKLSAgICAgICAgcGF0aFNlZ1R5cGUgPSBQYXRoU2VnQ3VydmVUb0N1YmljUmVs
OwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIFBhdGhTZWdDdXJ2ZVRvQ3ViaWNSZWw7
CiAgICAgY2FzZSAnUSc6Ci0gICAgICAgIHBhdGhTZWdUeXBlID0gUGF0aFNlZ0N1cnZlVG9RdWFk
cmF0aWNBYnM7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gUGF0aFNlZ0N1cnZlVG9R
dWFkcmF0aWNBYnM7CiAgICAgY2FzZSAncSc6Ci0gICAgICAgIHBhdGhTZWdUeXBlID0gUGF0aFNl
Z0N1cnZlVG9RdWFkcmF0aWNSZWw7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gUGF0
aFNlZ0N1cnZlVG9RdWFkcmF0aWNSZWw7CiAgICAgY2FzZSAnQSc6Ci0gICAgICAgIHBhdGhTZWdU
eXBlID0gUGF0aFNlZ0FyY0FiczsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBQYXRo
U2VnQXJjQWJzOwogICAgIGNhc2UgJ2EnOgotICAgICAgICBwYXRoU2VnVHlwZSA9IFBhdGhTZWdB
cmNSZWw7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gUGF0aFNlZ0FyY1JlbDsKICAg
ICBjYXNlICdIJzoKLSAgICAgICAgcGF0aFNlZ1R5cGUgPSBQYXRoU2VnTGluZVRvSG9yaXpvbnRh
bEFiczsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBQYXRoU2VnTGluZVRvSG9yaXpv
bnRhbEFiczsKICAgICBjYXNlICdoJzoKLSAgICAgICAgcGF0aFNlZ1R5cGUgPSBQYXRoU2VnTGlu
ZVRvSG9yaXpvbnRhbFJlbDsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBQYXRoU2Vn
TGluZVRvSG9yaXpvbnRhbFJlbDsKICAgICBjYXNlICdWJzoKLSAgICAgICAgcGF0aFNlZ1R5cGUg
PSBQYXRoU2VnTGluZVRvVmVydGljYWxBYnM7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1
cm4gUGF0aFNlZ0xpbmVUb1ZlcnRpY2FsQWJzOwogICAgIGNhc2UgJ3YnOgotICAgICAgICBwYXRo
U2VnVHlwZSA9IFBhdGhTZWdMaW5lVG9WZXJ0aWNhbFJlbDsKLSAgICAgICAgYnJlYWs7CisgICAg
ICAgIHJldHVybiBQYXRoU2VnTGluZVRvVmVydGljYWxSZWw7CiAgICAgY2FzZSAnUyc6Ci0gICAg
ICAgIHBhdGhTZWdUeXBlID0gUGF0aFNlZ0N1cnZlVG9DdWJpY1Ntb290aEFiczsKLSAgICAgICAg
YnJlYWs7CisgICAgICAgIHJldHVybiBQYXRoU2VnQ3VydmVUb0N1YmljU21vb3RoQWJzOwogICAg
IGNhc2UgJ3MnOgotICAgICAgICBwYXRoU2VnVHlwZSA9IFBhdGhTZWdDdXJ2ZVRvQ3ViaWNTbW9v
dGhSZWw7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gUGF0aFNlZ0N1cnZlVG9DdWJp
Y1Ntb290aFJlbDsKICAgICBjYXNlICdUJzoKLSAgICAgICAgcGF0aFNlZ1R5cGUgPSBQYXRoU2Vn
Q3VydmVUb1F1YWRyYXRpY1Ntb290aEFiczsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVy
biBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY1Ntb290aEFiczsKICAgICBjYXNlICd0JzoKLSAgICAg
ICAgcGF0aFNlZ1R5cGUgPSBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY1Ntb290aFJlbDsKLSAgICAg
ICAgYnJlYWs7CisgICAgICAgIHJldHVybiBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY1Ntb290aFJl
bDsKICAgICBkZWZhdWx0OgotICAgICAgICBwYXRoU2VnVHlwZSA9IFBhdGhTZWdVbmtub3duOwor
ICAgICAgICByZXR1cm4gUGF0aFNlZ1Vua25vd247CiAgICAgfQotICAgIHJldHVybiB0cnVlOwog
fQogCi1ib29sIFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlU1ZHU2VnbWVudFR5cGUoU1ZHUGF0
aFNlZ1R5cGUmIHBhdGhTZWdUeXBlKQorT3B0aW9uYWw8U1ZHUGF0aFNlZ1R5cGU+IFNWR1BhdGhT
dHJpbmdTb3VyY2U6OnBhcnNlU1ZHU2VnbWVudFR5cGUoKQogewogICAgIGlmIChtX2lzOEJpdFNv
dXJjZSkKLSAgICAgICAgcmV0dXJuIHBhcnNlU1ZHU2VnbWVudFR5cGVIZWxwZXIobV9jdXJyZW50
Lm1fY2hhcmFjdGVyOCwgcGF0aFNlZ1R5cGUpOwotICAgIHJldHVybiBwYXJzZVNWR1NlZ21lbnRU
eXBlSGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjE2LCBwYXRoU2VnVHlwZSk7CisgICAgICAg
IHJldHVybiBwYXJzZVNWR1NlZ21lbnRUeXBlSGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3Rlcjgp
OworICAgIHJldHVybiBwYXJzZVNWR1NlZ21lbnRUeXBlSGVscGVyKG1fY3VycmVudC5tX2NoYXJh
Y3RlcjE2KTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0aWMg
Ym9vbCBuZXh0Q29tbWFuZEhlbHBlcihjb25zdCBDaGFyYWN0ZXJUeXBlKiYgY3VycmVudCwgU1ZH
UGF0aFNlZ1R5cGUgcHJldmlvdXNDb21tYW5kLCBTVkdQYXRoU2VnVHlwZSYgbmV4dENvbW1hbmQp
CitPcHRpb25hbDxTVkdQYXRoU291cmNlOjpNb3ZlVG9TZWdtZW50PiBTVkdQYXRoU3RyaW5nU291
cmNlOjpwYXJzZU1vdmVUb1NlZ21lbnQoKQogewotICAgIC8vIENoZWNrIGZvciByZW1haW5pbmcg
Y29vcmRpbmF0ZXMgaW4gdGhlIGN1cnJlbnQgY29tbWFuZC4KLSAgICBpZiAoKCpjdXJyZW50ID09
ICcrJyB8fCAqY3VycmVudCA9PSAnLScgfHwgKmN1cnJlbnQgPT0gJy4nIHx8IGlzQVNDSUlEaWdp
dCgqY3VycmVudCkpCi0gICAgICAgICYmIHByZXZpb3VzQ29tbWFuZCAhPSBQYXRoU2VnQ2xvc2VQ
YXRoKSB7Ci0gICAgICAgIGlmIChwcmV2aW91c0NvbW1hbmQgPT0gUGF0aFNlZ01vdmVUb0Ficykg
ewotICAgICAgICAgICAgbmV4dENvbW1hbmQgPSBQYXRoU2VnTGluZVRvQWJzOwotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHByZXZpb3VzQ29tbWFuZCA9
PSBQYXRoU2VnTW92ZVRvUmVsKSB7Ci0gICAgICAgICAgICBuZXh0Q29tbWFuZCA9IFBhdGhTZWdM
aW5lVG9SZWw7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBu
ZXh0Q29tbWFuZCA9IHByZXZpb3VzQ29tbWFuZDsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQorICAgIGF1dG8gaGVscGVyID0gW10oY29uc3QgYXV0byomIGN1cnJlbnQsIGNvbnN0IGF1dG8q
IGVuZCkgLT4gT3B0aW9uYWw8TW92ZVRvU2VnbWVudD4geworICAgICAgICBhdXRvIHRhcmdldFBv
aW50ID0gcGFyc2VGbG9hdFBvaW50KGN1cnJlbnQsIGVuZCk7CisgICAgICAgIGlmICghdGFyZ2V0
UG9pbnQpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICAKKyAgICAg
ICAgTW92ZVRvU2VnbWVudCBzZWdtZW50OworICAgICAgICBzZWdtZW50LnRhcmdldFBvaW50ID0g
V1RGTW92ZSgqdGFyZ2V0UG9pbnQpOworICAgICAgICByZXR1cm4gc2VnbWVudDsKKyAgICB9Owog
Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX2lzOEJpdFNvdXJjZSkKKyAgICAgICAgcmV0
dXJuIGhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXI4LCBtX2VuZC5tX2NoYXJhY3RlcjgpOwor
ICAgIHJldHVybiBoZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYsIG1fZW5kLm1fY2hhcmFj
dGVyMTYpOwogfQogCi1TVkdQYXRoU2VnVHlwZSBTVkdQYXRoU3RyaW5nU291cmNlOjpuZXh0Q29t
bWFuZChTVkdQYXRoU2VnVHlwZSBwcmV2aW91c0NvbW1hbmQpCitPcHRpb25hbDxTVkdQYXRoU291
cmNlOjpMaW5lVG9TZWdtZW50PiBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUxpbmVUb1NlZ21l
bnQoKQogewotICAgIFNWR1BhdGhTZWdUeXBlIG5leHRDb21tYW5kOwotICAgIGlmIChtX2lzOEJp
dFNvdXJjZSkgewotICAgICAgICBpZiAobmV4dENvbW1hbmRIZWxwZXIobV9jdXJyZW50Lm1fY2hh
cmFjdGVyOCwgcHJldmlvdXNDb21tYW5kLCBuZXh0Q29tbWFuZCkpCi0gICAgICAgICAgICByZXR1
cm4gbmV4dENvbW1hbmQ7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKG5leHRDb21tYW5kSGVs
cGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjE2LCBwcmV2aW91c0NvbW1hbmQsIG5leHRDb21tYW5k
KSkKLSAgICAgICAgICAgIHJldHVybiBuZXh0Q29tbWFuZDsKLSAgICB9CisgICAgYXV0byBoZWxw
ZXIgPSBbXShjb25zdCBhdXRvKiYgY3VycmVudCwgY29uc3QgYXV0byogZW5kKSAtPiBPcHRpb25h
bDxMaW5lVG9TZWdtZW50PiB7CisgICAgICAgIGF1dG8gdGFyZ2V0UG9pbnQgPSBwYXJzZUZsb2F0
UG9pbnQoY3VycmVudCwgZW5kKTsKKyAgICAgICAgaWYgKCF0YXJnZXRQb2ludCkKKyAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIAorICAgICAgICBMaW5lVG9TZWdtZW50
IHNlZ21lbnQ7CisgICAgICAgIHNlZ21lbnQudGFyZ2V0UG9pbnQgPSBXVEZNb3ZlKCp0YXJnZXRQ
b2ludCk7CisgICAgICAgIHJldHVybiBzZWdtZW50OworICAgIH07CiAKLSAgICBwYXJzZVNWR1Nl
Z21lbnRUeXBlKG5leHRDb21tYW5kKTsKLSAgICByZXR1cm4gbmV4dENvbW1hbmQ7Ci19Ci0KLWJv
b2wgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VNb3ZlVG9TZWdtZW50KEZsb2F0UG9pbnQmIHRh
cmdldFBvaW50KQotewogICAgIGlmIChtX2lzOEJpdFNvdXJjZSkKLSAgICAgICAgcmV0dXJuIHBh
cnNlRmxvYXRQb2ludChtX2N1cnJlbnQubV9jaGFyYWN0ZXI4LCBtX2VuZC5tX2NoYXJhY3Rlcjgs
IHRhcmdldFBvaW50KTsKLSAgICByZXR1cm4gcGFyc2VGbG9hdFBvaW50KG1fY3VycmVudC5tX2No
YXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2LCB0YXJnZXRQb2ludCk7CisgICAgICAgIHJl
dHVybiBoZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4KTsK
KyAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJh
Y3RlcjE2KTsKIH0KIAotYm9vbCBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUxpbmVUb1NlZ21l
bnQoRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCitPcHRpb25hbDxTVkdQYXRoU291cmNlOjpMaW5l
VG9Ib3Jpem9udGFsU2VnbWVudD4gU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VMaW5lVG9Ib3Jp
em9udGFsU2VnbWVudCgpCiB7Ci0gICAgaWYgKG1faXM4Qml0U291cmNlKQotICAgICAgICByZXR1
cm4gcGFyc2VGbG9hdFBvaW50KG1fY3VycmVudC5tX2NoYXJhY3RlcjgsIG1fZW5kLm1fY2hhcmFj
dGVyOCwgdGFyZ2V0UG9pbnQpOwotICAgIHJldHVybiBwYXJzZUZsb2F0UG9pbnQobV9jdXJyZW50
Lm1fY2hhcmFjdGVyMTYsIG1fZW5kLm1fY2hhcmFjdGVyMTYsIHRhcmdldFBvaW50KTsKLX0KKyAg
ICBhdXRvIGhlbHBlciA9IFtdKGNvbnN0IGF1dG8qJiBjdXJyZW50LCBjb25zdCBhdXRvKiBlbmQp
IC0+IE9wdGlvbmFsPExpbmVUb0hvcml6b250YWxTZWdtZW50PiB7CisgICAgICAgIGF1dG8geCA9
IHBhcnNlTnVtYmVyKGN1cnJlbnQsIGVuZCk7CisgICAgICAgIGlmICgheCkKKyAgICAgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIAorICAgICAgICBMaW5lVG9Ib3Jpem9udGFs
U2VnbWVudCBzZWdtZW50OworICAgICAgICBzZWdtZW50LnggPSAqeDsKKyAgICAgICAgcmV0dXJu
IHNlZ21lbnQ7CisgICAgfTsKIAotYm9vbCBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUxpbmVU
b0hvcml6b250YWxTZWdtZW50KGZsb2F0JiB4KQotewogICAgIGlmIChtX2lzOEJpdFNvdXJjZSkK
LSAgICAgICAgcmV0dXJuIHBhcnNlTnVtYmVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjgsIG1fZW5k
Lm1fY2hhcmFjdGVyOCwgeCk7Ci0gICAgcmV0dXJuIHBhcnNlTnVtYmVyKG1fY3VycmVudC5tX2No
YXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2LCB4KTsKKyAgICAgICAgcmV0dXJuIGhlbHBl
cihtX2N1cnJlbnQubV9jaGFyYWN0ZXI4LCBtX2VuZC5tX2NoYXJhY3RlcjgpOworICAgIHJldHVy
biBoZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYsIG1fZW5kLm1fY2hhcmFjdGVyMTYpOwog
fQogCi1ib29sIFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlTGluZVRvVmVydGljYWxTZWdtZW50
KGZsb2F0JiB5KQorT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6TGluZVRvVmVydGljYWxTZWdtZW50
PiBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUxpbmVUb1ZlcnRpY2FsU2VnbWVudCgpCiB7Cisg
ICAgYXV0byBoZWxwZXIgPSBbXShjb25zdCBhdXRvKiYgY3VycmVudCwgY29uc3QgYXV0byogZW5k
KSAtPiBPcHRpb25hbDxMaW5lVG9WZXJ0aWNhbFNlZ21lbnQ+IHsKKyAgICAgICAgYXV0byB5ID0g
cGFyc2VOdW1iZXIoY3VycmVudCwgZW5kKTsKKyAgICAgICAgaWYgKCF5KQorICAgICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgCisgICAgICAgIExpbmVUb1ZlcnRpY2FsU2Vn
bWVudCBzZWdtZW50OworICAgICAgICBzZWdtZW50LnkgPSAqeTsKKyAgICAgICAgcmV0dXJuIHNl
Z21lbnQ7CisgICAgfTsKKwogICAgIGlmIChtX2lzOEJpdFNvdXJjZSkKLSAgICAgICAgcmV0dXJu
IHBhcnNlTnVtYmVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjgsIG1fZW5kLm1fY2hhcmFjdGVyOCwg
eSk7Ci0gICAgcmV0dXJuIHBhcnNlTnVtYmVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjE2LCBtX2Vu
ZC5tX2NoYXJhY3RlcjE2LCB5KTsKKyAgICAgICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9j
aGFyYWN0ZXI4LCBtX2VuZC5tX2NoYXJhY3RlcjgpOworICAgIHJldHVybiBoZWxwZXIobV9jdXJy
ZW50Lm1fY2hhcmFjdGVyMTYsIG1fZW5kLm1fY2hhcmFjdGVyMTYpOwogfQogCi1ib29sIFNWR1Bh
dGhTdHJpbmdTb3VyY2U6OnBhcnNlQ3VydmVUb0N1YmljU2VnbWVudChGbG9hdFBvaW50JiBwb2lu
dDEsIEZsb2F0UG9pbnQmIHBvaW50MiwgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCitPcHRpb25h
bDxTVkdQYXRoU291cmNlOjpDdXJ2ZVRvQ3ViaWNTZWdtZW50PiBTVkdQYXRoU3RyaW5nU291cmNl
OjpwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQoKQogeworICAgIGF1dG8gaGVscGVyID0gW10oY29u
c3QgYXV0byomIGN1cnJlbnQsIGNvbnN0IGF1dG8qIGVuZCkgLT4gT3B0aW9uYWw8Q3VydmVUb0N1
YmljU2VnbWVudD4geworICAgICAgICBhdXRvIHBvaW50MSA9IHBhcnNlRmxvYXRQb2ludChjdXJy
ZW50LCBlbmQpOworICAgICAgICBpZiAoIXBvaW50MSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisKKyAgICAgICAgYXV0byBwb2ludDIgPSBwYXJzZUZsb2F0UG9pbnQoY3VycmVu
dCwgZW5kKTsKKyAgICAgICAgaWYgKCFwb2ludDIpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworCisgICAgICAgIGF1dG8gdGFyZ2V0UG9pbnQgPSBwYXJzZUZsb2F0UG9pbnQoY3Vy
cmVudCwgZW5kKTsKKyAgICAgICAgaWYgKCF0YXJnZXRQb2ludCkKKyAgICAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CisKKyAgICAgICAgQ3VydmVUb0N1YmljU2VnbWVudCBzZWdtZW50Owor
ICAgICAgICBzZWdtZW50LnBvaW50MSA9ICpwb2ludDE7CisgICAgICAgIHNlZ21lbnQucG9pbnQy
ID0gKnBvaW50MjsKKyAgICAgICAgc2VnbWVudC50YXJnZXRQb2ludCA9ICp0YXJnZXRQb2ludDsK
KyAgICAgICAgcmV0dXJuIHNlZ21lbnQ7CisgICAgfTsKKwogICAgIGlmIChtX2lzOEJpdFNvdXJj
ZSkKLSAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXRQb2ludDMobV9jdXJyZW50Lm1fY2hhcmFjdGVy
OCwgbV9lbmQubV9jaGFyYWN0ZXI4LCBwb2ludDEsIHBvaW50MiwgdGFyZ2V0UG9pbnQpOwotICAg
IHJldHVybiBwYXJzZUZsb2F0UG9pbnQzKG1fY3VycmVudC5tX2NoYXJhY3RlcjE2LCBtX2VuZC5t
X2NoYXJhY3RlcjE2LCBwb2ludDEsIHBvaW50MiwgdGFyZ2V0UG9pbnQpOworICAgICAgICByZXR1
cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjgsIG1fZW5kLm1fY2hhcmFjdGVyOCk7Cisg
ICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXIxNiwgbV9lbmQubV9jaGFyYWN0
ZXIxNik7CiB9CiAKLWJvb2wgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VDdXJ2ZVRvQ3ViaWNT
bW9vdGhTZWdtZW50KEZsb2F0UG9pbnQmIHBvaW50MSwgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQp
CitPcHRpb25hbDxTVkdQYXRoU291cmNlOjpDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50PiBTVkdQ
YXRoU3RyaW5nU291cmNlOjpwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQoKQogeworICAg
IGF1dG8gaGVscGVyID0gW10oY29uc3QgYXV0byomIGN1cnJlbnQsIGNvbnN0IGF1dG8qIGVuZCkg
LT4gT3B0aW9uYWw8Q3VydmVUb0N1YmljU21vb3RoU2VnbWVudD4geworICAgICAgICBhdXRvIHBv
aW50MiA9IHBhcnNlRmxvYXRQb2ludChjdXJyZW50LCBlbmQpOworICAgICAgICBpZiAoIXBvaW50
MikKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICAgICAgYXV0byB0YXJn
ZXRQb2ludCA9IHBhcnNlRmxvYXRQb2ludChjdXJyZW50LCBlbmQpOworICAgICAgICBpZiAoIXRh
cmdldFBvaW50KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgICAgICBD
dXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50IHNlZ21lbnQ7CisgICAgICAgIHNlZ21lbnQucG9pbnQy
ID0gKnBvaW50MjsKKyAgICAgICAgc2VnbWVudC50YXJnZXRQb2ludCA9ICp0YXJnZXRQb2ludDsK
KyAgICAgICAgcmV0dXJuIHNlZ21lbnQ7CisgICAgfTsKKwogICAgIGlmIChtX2lzOEJpdFNvdXJj
ZSkKLSAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXRQb2ludDIobV9jdXJyZW50Lm1fY2hhcmFjdGVy
OCwgbV9lbmQubV9jaGFyYWN0ZXI4LCBwb2ludDEsIHRhcmdldFBvaW50KTsKLSAgICByZXR1cm4g
cGFyc2VGbG9hdFBvaW50MihtX2N1cnJlbnQubV9jaGFyYWN0ZXIxNiwgbV9lbmQubV9jaGFyYWN0
ZXIxNiwgcG9pbnQxLCB0YXJnZXRQb2ludCk7CisgICAgICAgIHJldHVybiBoZWxwZXIobV9jdXJy
ZW50Lm1fY2hhcmFjdGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4KTsKKyAgICByZXR1cm4gaGVscGVy
KG1fY3VycmVudC5tX2NoYXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2KTsKIH0KIAotYm9v
bCBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KEZsb2F0
UG9pbnQmIHBvaW50MiwgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCitPcHRpb25hbDxTVkdQYXRo
U291cmNlOjpDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudD4gU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFy
c2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCgpCiB7CisgICAgYXV0byBoZWxwZXIgPSBbXShjb25z
dCBhdXRvKiYgY3VycmVudCwgY29uc3QgYXV0byogZW5kKSAtPiBPcHRpb25hbDxDdXJ2ZVRvUXVh
ZHJhdGljU2VnbWVudD4geworICAgICAgICBhdXRvIHBvaW50MSA9IHBhcnNlRmxvYXRQb2ludChj
dXJyZW50LCBlbmQpOworICAgICAgICBpZiAoIXBvaW50MSkKKyAgICAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CisKKyAgICAgICAgYXV0byB0YXJnZXRQb2ludCA9IHBhcnNlRmxvYXRQb2lu
dChjdXJyZW50LCBlbmQpOworICAgICAgICBpZiAoIXRhcmdldFBvaW50KQorICAgICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgICAgICBDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCBz
ZWdtZW50OworICAgICAgICBzZWdtZW50LnBvaW50MSA9ICpwb2ludDE7CisgICAgICAgIHNlZ21l
bnQudGFyZ2V0UG9pbnQgPSAqdGFyZ2V0UG9pbnQ7CisgICAgICAgIHJldHVybiBzZWdtZW50Owor
ICAgIH07CisKICAgICBpZiAobV9pczhCaXRTb3VyY2UpCi0gICAgICAgIHJldHVybiBwYXJzZUZs
b2F0UG9pbnQyKG1fY3VycmVudC5tX2NoYXJhY3RlcjgsIG1fZW5kLm1fY2hhcmFjdGVyOCwgcG9p
bnQyLCB0YXJnZXRQb2ludCk7Ci0gICAgcmV0dXJuIHBhcnNlRmxvYXRQb2ludDIobV9jdXJyZW50
Lm1fY2hhcmFjdGVyMTYsIG1fZW5kLm1fY2hhcmFjdGVyMTYsIHBvaW50MiwgdGFyZ2V0UG9pbnQp
OworICAgICAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjgsIG1fZW5kLm1f
Y2hhcmFjdGVyOCk7CisgICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXIxNiwg
bV9lbmQubV9jaGFyYWN0ZXIxNik7CiB9CiAKLWJvb2wgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFy
c2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudChGbG9hdFBvaW50JiB0YXJnZXRQb2ludCkK
K09wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50PiBT
VkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KCkK
IHsKKyAgICBhdXRvIGhlbHBlciA9IFtdKGNvbnN0IGF1dG8qJiBjdXJyZW50LCBjb25zdCBhdXRv
KiBlbmQpIC0+IE9wdGlvbmFsPEN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50PiB7CisgICAg
ICAgIGF1dG8gdGFyZ2V0UG9pbnQgPSBwYXJzZUZsb2F0UG9pbnQoY3VycmVudCwgZW5kKTsKKyAg
ICAgICAgaWYgKCF0YXJnZXRQb2ludCkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CisKKyAgICAgICAgQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQgc2VnbWVudDsKKyAgICAg
ICAgc2VnbWVudC50YXJnZXRQb2ludCA9ICp0YXJnZXRQb2ludDsKKyAgICAgICAgcmV0dXJuIHNl
Z21lbnQ7CisgICAgfTsKKwogICAgIGlmIChtX2lzOEJpdFNvdXJjZSkKLSAgICAgICAgcmV0dXJu
IHBhcnNlRmxvYXRQb2ludChtX2N1cnJlbnQubV9jaGFyYWN0ZXI4LCBtX2VuZC5tX2NoYXJhY3Rl
cjgsIHRhcmdldFBvaW50KTsKLSAgICByZXR1cm4gcGFyc2VGbG9hdFBvaW50KG1fY3VycmVudC5t
X2NoYXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2LCB0YXJnZXRQb2ludCk7CisgICAgICAg
IHJldHVybiBoZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4
KTsKKyAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjE2LCBtX2VuZC5tX2No
YXJhY3RlcjE2KTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0
aWMgYm9vbCBwYXJzZUFyY1RvU2VnbWVudEhlbHBlcihjb25zdCBDaGFyYWN0ZXJUeXBlKiYgY3Vy
cmVudCwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kLCBmbG9hdCYgcngsIGZsb2F0JiByeSwgZmxv
YXQmIGFuZ2xlLCBib29sJiBsYXJnZUFyYywgYm9vbCYgc3dlZXAsIEZsb2F0UG9pbnQmIHRhcmdl
dFBvaW50KQorT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6QXJjVG9TZWdtZW50PiBTVkdQYXRoU3Ry
aW5nU291cmNlOjpwYXJzZUFyY1RvU2VnbWVudCgpCiB7Ci0gICAgZmxvYXQgdG9YOwotICAgIGZs
b2F0IHRvWTsKLSAgICBpZiAoIXBhcnNlTnVtYmVyKGN1cnJlbnQsIGVuZCwgcngpCi0gICAgICAg
IHx8ICFwYXJzZU51bWJlcihjdXJyZW50LCBlbmQsIHJ5KQotICAgICAgICB8fCAhcGFyc2VOdW1i
ZXIoY3VycmVudCwgZW5kLCBhbmdsZSkKLSAgICAgICAgfHwgIXBhcnNlQXJjRmxhZyhjdXJyZW50
LCBlbmQsIGxhcmdlQXJjKQotICAgICAgICB8fCAhcGFyc2VBcmNGbGFnKGN1cnJlbnQsIGVuZCwg
c3dlZXApCi0gICAgICAgIHx8ICFwYXJzZU51bWJlcihjdXJyZW50LCBlbmQsIHRvWCkKLSAgICAg
ICAgfHwgIXBhcnNlTnVtYmVyKGN1cnJlbnQsIGVuZCwgdG9ZKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIHRhcmdldFBvaW50ID0gRmxvYXRQb2ludCh0b1gsIHRvWSk7Ci0gICAgcmV0dXJu
IHRydWU7Ci19CisgICAgYXV0byBoZWxwZXIgPSBbXShjb25zdCBhdXRvKiYgY3VycmVudCwgY29u
c3QgYXV0byogZW5kKSAtPiBPcHRpb25hbDxBcmNUb1NlZ21lbnQ+CisgICAgeworICAgICAgICBh
dXRvIHJ4ID0gcGFyc2VOdW1iZXIoY3VycmVudCwgZW5kKTsKKyAgICAgICAgaWYgKCFyeCkKKyAg
ICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIGF1dG8gcnkgPSBwYXJzZU51
bWJlcihjdXJyZW50LCBlbmQpOworICAgICAgICBpZiAoIXJ5KQorICAgICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKyAgICAgICAgYXV0byBhbmdsZSA9IHBhcnNlTnVtYmVyKGN1cnJlbnQs
IGVuZCk7CisgICAgICAgIGlmICghYW5nbGUpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworICAgICAgICBhdXRvIGxhcmdlQXJjID0gcGFyc2VBcmNGbGFnKGN1cnJlbnQsIGVuZCk7
CisgICAgICAgIGlmICghbGFyZ2VBcmMpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworICAgICAgICBhdXRvIHN3ZWVwID0gcGFyc2VBcmNGbGFnKGN1cnJlbnQsIGVuZCk7CisgICAg
ICAgIGlmICghc3dlZXApCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAg
ICBhdXRvIHRhcmdldFBvaW50ID0gcGFyc2VGbG9hdFBvaW50KGN1cnJlbnQsIGVuZCk7CisgICAg
ICAgIGlmICghdGFyZ2V0UG9pbnQpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
CisgICAgICAgIEFyY1RvU2VnbWVudCBzZWdtZW50OworICAgICAgICBzZWdtZW50LnJ4ID0gKnJ4
OworICAgICAgICBzZWdtZW50LnJ5ID0gKnJ5OworICAgICAgICBzZWdtZW50LmFuZ2xlID0gKmFu
Z2xlOworICAgICAgICBzZWdtZW50LmxhcmdlQXJjID0gKmxhcmdlQXJjOworICAgICAgICBzZWdt
ZW50LnN3ZWVwID0gKnN3ZWVwOworICAgICAgICBzZWdtZW50LnRhcmdldFBvaW50ID0gKnRhcmdl
dFBvaW50OworICAgICAgICByZXR1cm4gc2VnbWVudDsKKyAgICB9OwogCi1ib29sIFNWR1BhdGhT
dHJpbmdTb3VyY2U6OnBhcnNlQXJjVG9TZWdtZW50KGZsb2F0JiByeCwgZmxvYXQmIHJ5LCBmbG9h
dCYgYW5nbGUsIGJvb2wmIGxhcmdlQXJjLCBib29sJiBzd2VlcCwgRmxvYXRQb2ludCYgdGFyZ2V0
UG9pbnQpCi17CiAgICAgaWYgKG1faXM4Qml0U291cmNlKQotICAgICAgICByZXR1cm4gcGFyc2VB
cmNUb1NlZ21lbnRIZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyOCwgbV9lbmQubV9jaGFyYWN0
ZXI4LCByeCwgcnksIGFuZ2xlLCBsYXJnZUFyYywgc3dlZXAsIHRhcmdldFBvaW50KTsKLSAgICBy
ZXR1cm4gcGFyc2VBcmNUb1NlZ21lbnRIZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYsIG1f
ZW5kLm1fY2hhcmFjdGVyMTYsIHJ4LCByeSwgYW5nbGUsIGxhcmdlQXJjLCBzd2VlcCwgdGFyZ2V0
UG9pbnQpOworICAgICAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjgsIG1f
ZW5kLm1fY2hhcmFjdGVyOCk7CisgICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0
ZXIxNiwgbV9lbmQubV9jaGFyYWN0ZXIxNik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJ
bmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTdHJpbmdTb3VyY2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFN0cmluZ1NvdXJjZS5oCShyZXZpc2lvbiAy
NjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFN0cmluZ1NvdXJjZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMiwxOCArMzIsMTggQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBib29s
IGhhc01vcmVEYXRhKCkgY29uc3QgZmluYWw7CiAgICAgYm9vbCBtb3ZlVG9OZXh0VG9rZW4oKSBm
aW5hbDsKLSAgICBib29sIHBhcnNlU1ZHU2VnbWVudFR5cGUoU1ZHUGF0aFNlZ1R5cGUmKSBmaW5h
bDsKICAgICBTVkdQYXRoU2VnVHlwZSBuZXh0Q29tbWFuZChTVkdQYXRoU2VnVHlwZSBwcmV2aW91
c0NvbW1hbmQpIGZpbmFsOwogCi0gICAgYm9vbCBwYXJzZU1vdmVUb1NlZ21lbnQoRmxvYXRQb2lu
dCYpIGZpbmFsOwotICAgIGJvb2wgcGFyc2VMaW5lVG9TZWdtZW50KEZsb2F0UG9pbnQmKSBmaW5h
bDsKLSAgICBib29sIHBhcnNlTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQoZmxvYXQmKSBmaW5hbDsK
LSAgICBib29sIHBhcnNlTGluZVRvVmVydGljYWxTZWdtZW50KGZsb2F0JikgZmluYWw7Ci0gICAg
Ym9vbCBwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQoRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmLCBG
bG9hdFBvaW50JikgZmluYWw7Ci0gICAgYm9vbCBwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21l
bnQoRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmKSBmaW5hbDsKLSAgICBib29sIHBhcnNlQ3VydmVU
b1F1YWRyYXRpY1NlZ21lbnQoRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmKSBmaW5hbDsKLSAgICBi
b29sIHBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQoRmxvYXRQb2ludCYpIGZpbmFs
OwotICAgIGJvb2wgcGFyc2VBcmNUb1NlZ21lbnQoZmxvYXQmLCBmbG9hdCYsIGZsb2F0JiwgYm9v
bCYsIGJvb2wmLCBGbG9hdFBvaW50JikgZmluYWw7CisgICAgT3B0aW9uYWw8U1ZHUGF0aFNlZ1R5
cGU+IHBhcnNlU1ZHU2VnbWVudFR5cGUoKSBmaW5hbDsKKyAgICBPcHRpb25hbDxNb3ZlVG9TZWdt
ZW50PiBwYXJzZU1vdmVUb1NlZ21lbnQoKSBmaW5hbDsKKyAgICBPcHRpb25hbDxMaW5lVG9TZWdt
ZW50PiBwYXJzZUxpbmVUb1NlZ21lbnQoKSBmaW5hbDsKKyAgICBPcHRpb25hbDxMaW5lVG9Ib3Jp
em9udGFsU2VnbWVudD4gcGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudCgpIGZpbmFsOworICAg
IE9wdGlvbmFsPExpbmVUb1ZlcnRpY2FsU2VnbWVudD4gcGFyc2VMaW5lVG9WZXJ0aWNhbFNlZ21l
bnQoKSBmaW5hbDsKKyAgICBPcHRpb25hbDxDdXJ2ZVRvQ3ViaWNTZWdtZW50PiBwYXJzZUN1cnZl
VG9DdWJpY1NlZ21lbnQoKSBmaW5hbDsKKyAgICBPcHRpb25hbDxDdXJ2ZVRvQ3ViaWNTbW9vdGhT
ZWdtZW50PiBwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQoKSBmaW5hbDsKKyAgICBPcHRp
b25hbDxDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudD4gcGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVu
dCgpIGZpbmFsOworICAgIE9wdGlvbmFsPEN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50PiBw
YXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KCkgZmluYWw7CisgICAgT3B0aW9uYWw8
QXJjVG9TZWdtZW50PiBwYXJzZUFyY1RvU2VnbWVudCgpIGZpbmFsOwogCiAgICAgU3RyaW5nIG1f
c3RyaW5nOwogICAgIGJvb2wgbV9pczhCaXRTb3VyY2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHUG9pbnRMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Bv
aW50TGlzdC5oCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9p
bnRMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDEyICs2MywxMyBAQCBwdWJsaWM6CiAgICAg
ICAgIGJvb2wgZGVsaW1QYXJzZWQgPSBmYWxzZTsKICAgICAgICAgd2hpbGUgKGN1ciA8IGVuZCkg
ewogICAgICAgICAgICAgZGVsaW1QYXJzZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIGZsb2F0IHhQ
b3MgPSAwLjBmOwotICAgICAgICAgICAgaWYgKCFwYXJzZU51bWJlcihjdXIsIGVuZCwgeFBvcykp
CisKKyAgICAgICAgICAgIGF1dG8geFBvcyA9IHBhcnNlTnVtYmVyKGN1ciwgZW5kKTsKKyAgICAg
ICAgICAgIGlmICgheFBvcykKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAg
ICAgICAgIGZsb2F0IHlQb3MgPSAwLjBmOwotICAgICAgICAgICAgaWYgKCFwYXJzZU51bWJlcihj
dXIsIGVuZCwgeVBvcywgZmFsc2UpKQorICAgICAgICAgICAgYXV0byB5UG9zID0gcGFyc2VOdW1i
ZXIoY3VyLCBlbmQsIFN1ZmZpeFNraXBwaW5nUG9saWN5OjpEb250U2tpcCk7CisgICAgICAgICAg
ICBpZiAoIXlQb3MpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAg
ICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoY3VyLCBlbmQpOwpAQCAtNzksNyArODAsNyBAQCBwdWJs
aWM6CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoY3Vy
LCBlbmQpOwogCi0gICAgICAgICAgICBhcHBlbmQoU1ZHUG9pbnQ6OmNyZWF0ZSh7IHhQb3MsIHlQ
b3MgfSkpOworICAgICAgICAgICAgYXBwZW5kKFNWR1BvaW50OjpjcmVhdGUoeyAqeFBvcywgKnlQ
b3MgfSkpOwogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuICFkZWxpbVBhcnNlZDsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUb09URkZvbnRDb252ZXJzaW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVG9PVEZGb250Q29udmVyc2lvbi5jcHAJKHJldmlz
aW9uIDI2MzE3NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUb09URkZvbnRDb252ZXJzaW9u
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI5LDggKzIyOSw4IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBhZGRDb2RlcG9pbnRSYW5nZXMoY29uc3QgVW5pY29kZVJhbmdlcyYsIEhhc2hTZXQ8R2x5cGg+
JiBnbHlwaFNldCkgY29uc3Q7CiAgICAgdm9pZCBhZGRDb2RlcG9pbnRzKGNvbnN0IEhhc2hTZXQ8
U3RyaW5nPiYgY29kZXBvaW50cywgSGFzaFNldDxHbHlwaD4mIGdseXBoU2V0KSBjb25zdDsKICAg
ICB2b2lkIGFkZEdseXBoTmFtZXMoY29uc3QgSGFzaFNldDxTdHJpbmc+JiBnbHlwaE5hbWVzLCBI
YXNoU2V0PEdseXBoPiYgZ2x5cGhTZXQpIGNvbnN0OwotICAgIHZvaWQgYWRkS2VybmluZ1BhaXIo
VmVjdG9yPEtlcm5pbmdEYXRhPiYsIGNvbnN0IFNWR0tlcm5pbmdQYWlyJikgY29uc3Q7Ci0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc2l6ZV90IGFwcGVuZEtFUk5TdWJ0YWJsZShib29sIChUOjoq
YnVpbGRLZXJuaW5nUGFpcikoU1ZHS2VybmluZ1BhaXImKSBjb25zdCwgdWludDE2X3QgY292ZXJh
Z2UpOworICAgIHZvaWQgYWRkS2VybmluZ1BhaXIoVmVjdG9yPEtlcm5pbmdEYXRhPiYsIFNWR0tl
cm5pbmdQYWlyJiYpIGNvbnN0OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHNpemVfdCBhcHBl
bmRLRVJOU3VidGFibGUoT3B0aW9uYWw8U1ZHS2VybmluZ1BhaXI+IChUOjoqYnVpbGRLZXJuaW5n
UGFpcikoKSBjb25zdCwgdWludDE2X3QgY292ZXJhZ2UpOwogICAgIHNpemVfdCBmaW5pc2hBcHBl
bmRpbmdLRVJOU3VidGFibGUoVmVjdG9yPEtlcm5pbmdEYXRhPiwgdWludDE2X3QgY292ZXJhZ2Up
OwogCiAgICAgdm9pZCBhcHBlbmRMaWdhdHVyZVN1YnRhYmxlKHNpemVfdCBzdWJ0YWJsZVJlY29y
ZExvY2F0aW9uKTsKQEAgLTEwNDAsNyArMTA0MCw3IEBAIHZvaWQgU1ZHVG9PVEZGb250Q29udmVy
dGVyOjphZGRHbHlwaE5hbWUKICAgICB9CiB9CiAKLXZvaWQgU1ZHVG9PVEZGb250Q29udmVydGVy
OjphZGRLZXJuaW5nUGFpcihWZWN0b3I8S2VybmluZ0RhdGE+JiBkYXRhLCBjb25zdCBTVkdLZXJu
aW5nUGFpciYga2VybmluZ1BhaXIpIGNvbnN0Cit2b2lkIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6
YWRkS2VybmluZ1BhaXIoVmVjdG9yPEtlcm5pbmdEYXRhPiYgZGF0YSwgU1ZHS2VybmluZ1BhaXIm
JiBrZXJuaW5nUGFpcikgY29uc3QKIHsKICAgICBIYXNoU2V0PEdseXBoPiBnbHlwaFNldDE7CiAg
ICAgSGFzaFNldDxHbHlwaD4gZ2x5cGhTZXQyOwpAQCAtMTA1OSwxMyArMTA1OSwxMiBAQCB2b2lk
IFNWR1RvT1RGRm9udENvbnZlcnRlcjo6YWRkS2VybmluZ1BhCiAgICAgfQogfQogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBpbmxpbmUgc2l6ZV90IFNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5k
S0VSTlN1YnRhYmxlKGJvb2wgKFQ6OipidWlsZEtlcm5pbmdQYWlyKShTVkdLZXJuaW5nUGFpciYp
IGNvbnN0LCB1aW50MTZfdCBjb3ZlcmFnZSkKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBz
aXplX3QgU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRLRVJOU3VidGFibGUoT3B0aW9uYWw8
U1ZHS2VybmluZ1BhaXI+IChUOjoqYnVpbGRLZXJuaW5nUGFpcikoKSBjb25zdCwgdWludDE2X3Qg
Y292ZXJhZ2UpCiB7CiAgICAgVmVjdG9yPEtlcm5pbmdEYXRhPiBrZXJuaW5nRGF0YTsKICAgICBm
b3IgKGF1dG8mIGVsZW1lbnQgOiBjaGlsZHJlbk9mVHlwZTxUPihtX2ZvbnRFbGVtZW50KSkgewot
ICAgICAgICBTVkdLZXJuaW5nUGFpciBrZXJuaW5nUGFpcjsKLSAgICAgICAgaWYgKChlbGVtZW50
LipidWlsZEtlcm5pbmdQYWlyKShrZXJuaW5nUGFpcikpCi0gICAgICAgICAgICBhZGRLZXJuaW5n
UGFpcihrZXJuaW5nRGF0YSwga2VybmluZ1BhaXIpOworICAgICAgICBpZiAoYXV0byBrZXJuaW5n
UGFpciA9IChlbGVtZW50LipidWlsZEtlcm5pbmdQYWlyKSgpKQorICAgICAgICAgICAgYWRkS2Vy
bmluZ1BhaXIoa2VybmluZ0RhdGEsIFdURk1vdmUoKmtlcm5pbmdQYWlyKSk7CiAgICAgfQogICAg
IHJldHVybiBmaW5pc2hBcHBlbmRpbmdLRVJOU3VidGFibGUoV1RGTW92ZShrZXJuaW5nRGF0YSks
IGNvdmVyYWdlKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm1MaXN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybUxpc3QuaAko
cmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybUxpc3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDE3ICsxMTQsMTggQEAgcHJpdmF0ZToKICAgICAgICAg
Ym9vbCBkZWxpbVBhcnNlZCA9IGZhbHNlOwogICAgICAgICB3aGlsZSAoc3RhcnQgPCBlbmQpIHsK
ICAgICAgICAgICAgIGRlbGltUGFyc2VkID0gZmFsc2U7Ci0gICAgICAgICAgICBTVkdUcmFuc2Zv
cm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZSB0eXBlID0gU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR19U
UkFOU0ZPUk1fVU5LTk9XTjsKICAgICAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhzdGFy
dCwgZW5kKTsKLQotICAgICAgICAgICAgaWYgKCFTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZUFuZFNr
aXBUeXBlKHN0YXJ0LCBlbmQsIHR5cGUpKQorICAgICAgICAgICAgCisgICAgICAgICAgICBhdXRv
IHR5cGUgPSBTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZUFuZFNraXBUeXBlKHN0YXJ0LCBlbmQpOwor
ICAgICAgICAgICAgaWYgKCF0eXBlKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgICAgICAgICAgUmVmPFNWR1RyYW5zZm9ybT4gdHJhbnNmb3JtID0gU1ZHVHJhbnNmb3JtOjpj
cmVhdGUodHlwZSk7Ci0gICAgICAgICAgICBpZiAoIVNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJh
bnNmb3JtVmFsdWUodHlwZSwgc3RhcnQsIGVuZCwgdHJhbnNmb3JtLT52YWx1ZSgpKSkKKyAgICAg
ICAgICAgIGF1dG8gcGFyc2VkVHJhbnNmb3JtVmFsdWUgPSBTVkdUcmFuc2Zvcm1hYmxlOjpwYXJz
ZVRyYW5zZm9ybVZhbHVlKCp0eXBlLCBzdGFydCwgZW5kKTsKKyAgICAgICAgICAgIGlmICghcGFy
c2VkVHJhbnNmb3JtVmFsdWUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
ICAgICAgICBhcHBlbmQoV1RGTW92ZSh0cmFuc2Zvcm0pKTsKKyAgICAgICAgICAgIGFwcGVuZChT
VkdUcmFuc2Zvcm06OmNyZWF0ZSgqcGFyc2VkVHJhbnNmb3JtVmFsdWUpKTsKKwogICAgICAgICAg
ICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHN0YXJ0LCBlbmQpOwogICAgICAgICAgICAgaWYgKHN0
YXJ0IDwgZW5kICYmICpzdGFydCA9PSAnLCcpIHsKICAgICAgICAgICAgICAgICBkZWxpbVBhcnNl
ZCA9IHRydWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtYWJsZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybWFibGUuY3BwCShy
ZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtYWJsZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDggKzQzLDEyIEBAIHN0YXRpYyBpbnQgcGFyc2VUcmFu
c2Zvcm1QYXJhbUxpc3QoY29uc3QKICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMocHRyLCBlbmQp
OwogCiAgICAgd2hpbGUgKHJlcXVpcmVkUGFyYW1zIDwgcmVxdWlyZWQpIHsKLSAgICAgICAgaWYg
KHB0ciA+PSBlbmQgfHwgIXBhcnNlTnVtYmVyKHB0ciwgZW5kLCB2YWx1ZXNbcmVxdWlyZWRQYXJh
bXNdLCBmYWxzZSkpCisgICAgICAgIGlmIChwdHIgPj0gZW5kKQogICAgICAgICAgICAgcmV0dXJu
IC0xOworICAgICAgICBhdXRvIHBhcnNlZE51bWJlciA9IHBhcnNlTnVtYmVyKHB0ciwgZW5kLCBT
dWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNraXApOworICAgICAgICBpZiAoIXBhcnNlZE51bWJl
cikKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgdmFsdWVzW3JlcXVpcmVkUGFyYW1z
XSA9ICpwYXJzZWROdW1iZXI7CiAgICAgICAgIHJlcXVpcmVkUGFyYW1zKys7CiAgICAgICAgIGlm
IChyZXF1aXJlZFBhcmFtcyA8IHJlcXVpcmVkKQogICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZH
U3BhY2VzT3JEZWxpbWl0ZXIocHRyLCBlbmQpOwpAQCAtNjMsOCArNjcsMTIgQEAgc3RhdGljIGlu
dCBwYXJzZVRyYW5zZm9ybVBhcmFtTGlzdChjb25zdAogICAgICAgICAgICAgcmV0dXJuIC0xOwog
ICAgIH0gZWxzZSB7CiAgICAgICAgIHdoaWxlIChvcHRpb25hbFBhcmFtcyA8IG9wdGlvbmFsKSB7
Ci0gICAgICAgICAgICBpZiAocHRyID49IGVuZCB8fCAhcGFyc2VOdW1iZXIocHRyLCBlbmQsIHZh
bHVlc1tyZXF1aXJlZFBhcmFtcyArIG9wdGlvbmFsUGFyYW1zXSwgZmFsc2UpKQorICAgICAgICAg
ICAgaWYgKHB0ciA+PSBlbmQpCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAg
ICAgYXV0byBwYXJzZWROdW1iZXIgPSBwYXJzZU51bWJlcihwdHIsIGVuZCwgU3VmZml4U2tpcHBp
bmdQb2xpY3k6OkRvbnRTa2lwKTsKKyAgICAgICAgICAgIGlmICghcGFyc2VkTnVtYmVyKQogICAg
ICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIHZhbHVlc1tyZXF1aXJlZFBhcmFt
cyArIG9wdGlvbmFsUGFyYW1zXSA9ICpwYXJzZWROdW1iZXI7CiAgICAgICAgICAgICBvcHRpb25h
bFBhcmFtcysrOwogICAgICAgICAgICAgaWYgKG9wdGlvbmFsUGFyYW1zIDwgb3B0aW9uYWwpCiAg
ICAgICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxpbWl0ZXIocHRyLCBlbmQp
OwpAQCAtOTAsMTYgKzk4LDE3IEBAIHN0YXRpYyBjb25zdCBpbnQgb3B0aW9uYWxWYWx1ZXNGb3JU
eXBlW10KIC8vIFRoaXMgZGVzdHJ1Y3RvciBpcyBuZWVkZWQgaW4gb3JkZXIgdG8gbGluayBjb3Jy
ZWN0bHkgd2l0aCBJbnRlbCBJQ0MuCiBTVkdUcmFuc2Zvcm1hYmxlOjp+U1ZHVHJhbnNmb3JtYWJs
ZSgpID0gZGVmYXVsdDsKIAotYm9vbCBTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZVRyYW5zZm9ybVZh
bHVlKFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlIHR5cGUsIGNvbnN0IFVDaGFy
KiYgcHRyLCBjb25zdCBVQ2hhciogZW5kLCBTVkdUcmFuc2Zvcm1WYWx1ZSYgdHJhbnNmb3JtKQor
T3B0aW9uYWw8U1ZHVHJhbnNmb3JtVmFsdWU+IFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNm
b3JtVmFsdWUoU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGUgdHlwZSwgY29uc3Qg
VUNoYXIqJiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQpCiB7CiAgICAgaWYgKHR5cGUgPT0gU1ZHVHJh
bnNmb3JtVmFsdWU6OlNWR19UUkFOU0ZPUk1fVU5LTk9XTikKLSAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgaW50IHZhbHVlQ291bnQgPSAw
OwogICAgIGZsb2F0IHZhbHVlc1tdID0gezAsIDAsIDAsIDAsIDAsIDB9OwogICAgIGlmICgodmFs
dWVDb3VudCA9IHBhcnNlVHJhbnNmb3JtUGFyYW1MaXN0KHB0ciwgZW5kLCB2YWx1ZXMsIHJlcXVp
cmVkVmFsdWVzRm9yVHlwZVt0eXBlXSwgb3B0aW9uYWxWYWx1ZXNGb3JUeXBlW3R5cGVdKSkgPCAw
KQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAK
KyAgICBTVkdUcmFuc2Zvcm1WYWx1ZSB0cmFuc2Zvcm07CiAgICAgc3dpdGNoICh0eXBlKSB7CiAg
ICAgY2FzZSBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RSQU5TRk9STV9VTktOT1dOOgogICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTEzMyw3ICsxNDIsNyBAQCBib29sIFNWR1RyYW5z
Zm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtVmFsCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAg
IHJldHVybiB0cnVlOworICAgIHJldHVybiB0cmFuc2Zvcm07CiB9CiAKIHN0YXRpYyBjb25zdCBV
Q2hhciBza2V3WERlc2NbXSA9ICB7J3MnLCAnaycsICdlJywgJ3cnLCAnWCd9OwpAQCAtMTQzLDM5
ICsxNTIsMzUgQEAgc3RhdGljIGNvbnN0IFVDaGFyIHRyYW5zbGF0ZURlc2NbXSA9ICB7Jwogc3Rh
dGljIGNvbnN0IFVDaGFyIHJvdGF0ZURlc2NbXSA9ICB7J3InLCAnbycsICd0JywgJ2EnLCAndCcs
ICdlJ307CiBzdGF0aWMgY29uc3QgVUNoYXIgbWF0cml4RGVzY1tdID0gIHsnbScsICdhJywgJ3Qn
LCAncicsICdpJywgJ3gnfTsKIAotYm9vbCBTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZUFuZFNraXBU
eXBlKGNvbnN0IFVDaGFyKiYgY3VyclRyYW5zZm9ybSwgY29uc3QgVUNoYXIqIGVuZCwgU1ZHVHJh
bnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGUmIHR5cGUpCitPcHRpb25hbDxTVkdUcmFuc2Zv
cm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZT4gU1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VBbmRTa2lw
VHlwZShjb25zdCBVQ2hhciomIGN1cnJUcmFuc2Zvcm0sIGNvbnN0IFVDaGFyKiBlbmQpCiB7CiAg
ICAgaWYgKGN1cnJUcmFuc2Zvcm0gPj0gZW5kKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBpZiAoKmN1cnJUcmFuc2Zvcm0gPT0gJ3Mn
KSB7CiAgICAgICAgIGlmIChza2lwU3RyaW5nKGN1cnJUcmFuc2Zvcm0sIGVuZCwgc2tld1hEZXNj
LCBXVEZfQVJSQVlfTEVOR1RIKHNrZXdYRGVzYykpKQotICAgICAgICAgICAgdHlwZSA9IFNWR1Ry
YW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX1NLRVdYOworICAgICAgICAgICAgcmV0dXJuIFNW
R1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX1NLRVdYOwogICAgICAgICBlbHNlIGlmIChz
a2lwU3RyaW5nKGN1cnJUcmFuc2Zvcm0sIGVuZCwgc2tld1lEZXNjLCBXVEZfQVJSQVlfTEVOR1RI
KHNrZXdZRGVzYykpKQotICAgICAgICAgICAgdHlwZSA9IFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdf
VFJBTlNGT1JNX1NLRVdZOworICAgICAgICAgICAgcmV0dXJuIFNWR1RyYW5zZm9ybVZhbHVlOjpT
VkdfVFJBTlNGT1JNX1NLRVdZOwogICAgICAgICBlbHNlIGlmIChza2lwU3RyaW5nKGN1cnJUcmFu
c2Zvcm0sIGVuZCwgc2NhbGVEZXNjLCBXVEZfQVJSQVlfTEVOR1RIKHNjYWxlRGVzYykpKQotICAg
ICAgICAgICAgdHlwZSA9IFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX1NDQUxFOwor
ICAgICAgICAgICAgcmV0dXJuIFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX1NDQUxF
OwogICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0gZWxzZSBpZiAoc2tpcFN0cmluZyhjdXJyVHJhbnNm
b3JtLCBlbmQsIHRyYW5zbGF0ZURlc2MsIFdURl9BUlJBWV9MRU5HVEgodHJhbnNsYXRlRGVzYykp
KQotICAgICAgICB0eXBlID0gU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR19UUkFOU0ZPUk1fVFJBTlNM
QVRFOworICAgICAgICByZXR1cm4gU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR19UUkFOU0ZPUk1fVFJB
TlNMQVRFOwogICAgIGVsc2UgaWYgKHNraXBTdHJpbmcoY3VyclRyYW5zZm9ybSwgZW5kLCByb3Rh
dGVEZXNjLCBXVEZfQVJSQVlfTEVOR1RIKHJvdGF0ZURlc2MpKSkKLSAgICAgICAgdHlwZSA9IFNW
R1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX1JPVEFURTsKKyAgICAgICAgcmV0dXJuIFNW
R1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX1JPVEFURTsKICAgICBlbHNlIGlmIChza2lw
U3RyaW5nKGN1cnJUcmFuc2Zvcm0sIGVuZCwgbWF0cml4RGVzYywgV1RGX0FSUkFZX0xFTkdUSCht
YXRyaXhEZXNjKSkpCi0gICAgICAgIHR5cGUgPSBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RSQU5T
Rk9STV9NQVRSSVg7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJl
dHVybiBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RSQU5TRk9STV9NQVRSSVg7CiAKLSAgICByZXR1
cm4gdHJ1ZTsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCiBTVkdUcmFuc2Zvcm1WYWx1
ZTo6U1ZHVHJhbnNmb3JtVHlwZSBTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZVRyYW5zZm9ybVR5cGUo
Y29uc3QgU3RyaW5nJiB0eXBlU3RyaW5nKQogewotICAgIFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdU
cmFuc2Zvcm1UeXBlIHR5cGUgPSBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RSQU5TRk9STV9VTktO
T1dOOwogICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyh0eXBlU3Ry
aW5nKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKICAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVy
cyA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKLSAgICBwYXJzZUFuZFNraXBUeXBlKGNoYXJhY3Rl
cnMsIGNoYXJhY3RlcnMgKyB0eXBlU3RyaW5nLmxlbmd0aCgpLCB0eXBlKTsKLSAgICByZXR1cm4g
dHlwZTsKKyAgICByZXR1cm4gcGFyc2VBbmRTa2lwVHlwZShjaGFyYWN0ZXJzLCBjaGFyYWN0ZXJz
ICsgdHlwZVN0cmluZy5sZW5ndGgoKSkudmFsdWVPcihTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RS
QU5TRk9STV9VTktOT1dOKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Ry
YW5zZm9ybWFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNm
b3JtYWJsZS5oCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJh
bnNmb3JtYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw5ICszMiw5IEBAIGNsYXNzIFNWR1Ry
YW5zZm9ybWFibGUgOiBwdWJsaWMgU1ZHTG9jYXQKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5TVkdU
cmFuc2Zvcm1hYmxlKCk7CiAKLSAgICBzdGF0aWMgYm9vbCBwYXJzZVRyYW5zZm9ybVZhbHVlKFNW
R1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlLCBjb25zdCBVQ2hhciomIHB0ciwgY29u
c3QgVUNoYXIqIGVuZCwgU1ZHVHJhbnNmb3JtVmFsdWUmKTsKKyAgICBzdGF0aWMgT3B0aW9uYWw8
U1ZHVHJhbnNmb3JtVmFsdWU+IHBhcnNlVHJhbnNmb3JtVmFsdWUoU1ZHVHJhbnNmb3JtVmFsdWU6
OlNWR1RyYW5zZm9ybVR5cGUsIGNvbnN0IFVDaGFyKiYgcHRyLCBjb25zdCBVQ2hhciogZW5kKTsK
ICAgICBzdGF0aWMgU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGUgcGFyc2VUcmFu
c2Zvcm1UeXBlKGNvbnN0IFN0cmluZyYpOwotICAgIHN0YXRpYyBib29sIHBhcnNlQW5kU2tpcFR5
cGUoY29uc3QgVUNoYXIqJiBjdXJyVHJhbnNmb3JtLCBjb25zdCBVQ2hhciogZW5kLCBTVkdUcmFu
c2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZSYpOworICAgIHN0YXRpYyBPcHRpb25hbDxTVkdU
cmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZT4gcGFyc2VBbmRTa2lwVHlwZShjb25zdCBV
Q2hhciomIGN1cnJUcmFuc2Zvcm0sIGNvbnN0IFVDaGFyKiBlbmQpOwogCiAgICAgQWZmaW5lVHJh
bnNmb3JtIGxvY2FsQ29vcmRpbmF0ZVNwYWNlVHJhbnNmb3JtKFNWR0xvY2F0YWJsZTo6Q1RNU2Nv
cGUpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKTsgfQog
ICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKSBjb25z
dCA9IDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVktlcm5FbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVktlcm5FbGVtZW50LmNwcAkocmV2aXNp
b24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ZLZXJuRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQzLDI0ICs0Myw0NCBAQCBSZWY8U1ZHVktlcm5FbGVtZW50PiBTVkdW
S2VybkVsZW1lbnQ6OmNyCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZHVktlcm5FbGVtZW50
KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKLWJvb2wgU1ZHVktlcm5FbGVtZW50OjpidWlsZFZl
cnRpY2FsS2VybmluZ1BhaXIoU1ZHS2VybmluZ1BhaXImIGtlcm5pbmdQYWlyKSBjb25zdAorT3B0
aW9uYWw8U1ZHS2VybmluZ1BhaXI+IFNWR1ZLZXJuRWxlbWVudDo6YnVpbGRWZXJ0aWNhbEtlcm5p
bmdQYWlyKCkgY29uc3QKIHsKKyAgICAvLyBGSVhNRTogQ2FuIHRoaXMgYmUgc2hhcmVkIHdpdGgg
U1ZHSEtlcm5FbGVtZW50OjpidWlsZFZlcnRpY2FsS2VybmluZ1BhaXI/CisKICAgICBhdXRvJiB1
MSA9IGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oU1ZHTmFtZXM6OnUxQXR0cik7CiAg
ICAgYXV0byYgZzEgPSBhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFNWR05hbWVzOjpn
MUF0dHIpOwogICAgIGF1dG8mIHUyID0gYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihT
VkdOYW1lczo6dTJBdHRyKTsKICAgICBhdXRvJiBnMiA9IGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJv
bml6YXRpb24oU1ZHTmFtZXM6OmcyQXR0cik7CiAgICAgaWYgKCh1MS5pc0VtcHR5KCkgJiYgZzEu
aXNFbXB0eSgpKSB8fCAodTIuaXNFbXB0eSgpICYmIGcyLmlzRW1wdHkoKSkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIGF1dG8gZ2x5
cGhOYW1lMSA9IHBhcnNlR2x5cGhOYW1lKGcxKTsKKyAgICBpZiAoIWdseXBoTmFtZTEpCisgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgYXV0byBnbHlwaE5hbWUyID0gcGFyc2VHbHlw
aE5hbWUoZzIpOworICAgIGlmICghZ2x5cGhOYW1lMikKKyAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKyAgICBhdXRvIHVuaWNvZGVTdHJpbmcxID0gcGFyc2VLZXJuaW5nVW5pY29kZVN0cmlu
Zyh1MSk7CisgICAgaWYgKCF1bmljb2RlU3RyaW5nMSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKyAgICBhdXRvIHVuaWNvZGVTdHJpbmcyID0gcGFyc2VLZXJuaW5nVW5pY29kZVN0cmlu
Zyh1Mik7CisgICAgaWYgKCF1bmljb2RlU3RyaW5nMikKKyAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKworICAgIGJvb2wgb2sgPSBmYWxzZTsKKyAgICBhdXRvIGtlcm5pbmcgPSBhdHRyaWJ1
dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFNWR05hbWVzOjprQXR0cikuc3RyaW5nKCkudG9GbG9h
dCgmb2spOworICAgIGlmICghb2spCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAg
ICBpZiAocGFyc2VHbHlwaE5hbWUoZzEsIGtlcm5pbmdQYWlyLmdseXBoTmFtZTEpCi0gICAgICAg
ICYmIHBhcnNlR2x5cGhOYW1lKGcyLCBrZXJuaW5nUGFpci5nbHlwaE5hbWUyKQotICAgICAgICAm
JiBwYXJzZUtlcm5pbmdVbmljb2RlU3RyaW5nKHUxLCBrZXJuaW5nUGFpci51bmljb2RlUmFuZ2Ux
LCBrZXJuaW5nUGFpci51bmljb2RlTmFtZTEpCi0gICAgICAgICYmIHBhcnNlS2VybmluZ1VuaWNv
ZGVTdHJpbmcodTIsIGtlcm5pbmdQYWlyLnVuaWNvZGVSYW5nZTIsIGtlcm5pbmdQYWlyLnVuaWNv
ZGVOYW1lMikpIHsKLSAgICAgICAgYm9vbCBvayA9IGZhbHNlOwotICAgICAgICBrZXJuaW5nUGFp
ci5rZXJuaW5nID0gYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihTVkdOYW1lczo6a0F0
dHIpLnN0cmluZygpLnRvRmxvYXQoJm9rKTsKLSAgICAgICAgcmV0dXJuIG9rOwotICAgIH0KLSAg
ICByZXR1cm4gZmFsc2U7CisgICAgU1ZHS2VybmluZ1BhaXIga2VybmluZ1BhaXI7CisgICAga2Vy
bmluZ1BhaXIuZ2x5cGhOYW1lMSA9IFdURk1vdmUoKmdseXBoTmFtZTEpOworICAgIGtlcm5pbmdQ
YWlyLmdseXBoTmFtZTIgPSBXVEZNb3ZlKCpnbHlwaE5hbWUyKTsKKyAgICBrZXJuaW5nUGFpci51
bmljb2RlUmFuZ2UxID0gV1RGTW92ZSh1bmljb2RlU3RyaW5nMS0+Zmlyc3QpOworICAgIGtlcm5p
bmdQYWlyLnVuaWNvZGVOYW1lMSA9IFdURk1vdmUodW5pY29kZVN0cmluZzEtPnNlY29uZCk7Cisg
ICAga2VybmluZ1BhaXIudW5pY29kZVJhbmdlMiA9IFdURk1vdmUodW5pY29kZVN0cmluZzItPmZp
cnN0KTsKKyAgICBrZXJuaW5nUGFpci51bmljb2RlTmFtZTIgPSBXVEZNb3ZlKHVuaWNvZGVTdHJp
bmcyLT5zZWNvbmQpOworICAgIGtlcm5pbmdQYWlyLmtlcm5pbmcgPSBrZXJuaW5nOworICAgIHJl
dHVybiBrZXJuaW5nUGFpcjsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ZL
ZXJuRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdWS2VybkVs
ZW1lbnQuaAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ZLZXJu
RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBAIGNsYXNzIFNWR1ZLZXJu
RWxlbWVudCBmaW5hbCA6IHB1YmxpYyBTVkcKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPFNWR1ZL
ZXJuRWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCYpOwogCi0g
ICAgYm9vbCBidWlsZFZlcnRpY2FsS2VybmluZ1BhaXIoU1ZHS2VybmluZ1BhaXImIGtlcm5pbmdQ
YWlyKSBjb25zdDsKKyAgICBPcHRpb25hbDxTVkdLZXJuaW5nUGFpcj4gYnVpbGRWZXJ0aWNhbEtl
cm5pbmdQYWlyKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgU1ZHVktlcm5FbGVtZW50KGNvbnN0
IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1ZpZXdTcGVjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVmlld1Nw
ZWMuY3BwCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVmlld1Nw
ZWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OSwxMCArODksNyBAQCBib29sIFNWR1ZpZXdTcGVj
OjpwYXJzZVZpZXdTcGVjKGNvbnN0IFN0CiAgICAgICAgICAgICAgICAgaWYgKGN1cnJWaWV3U3Bl
YyA+PSBlbmQgfHwgKmN1cnJWaWV3U3BlYyAhPSAnKCcpCiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICBjdXJyVmlld1NwZWMrKzsKLSAgICAgICAgICAg
ICAgICBGbG9hdFJlY3Qgdmlld0JveDsKLSAgICAgICAgICAgICAgICBpZiAoIVNWR0ZpdFRvVmll
d0JveDo6cGFyc2VWaWV3Qm94KGN1cnJWaWV3U3BlYywgZW5kLCB2aWV3Qm94LCBmYWxzZSkpCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBzZXRWaWV3
Qm94KHZpZXdCb3gpOworICAgICAgICAgICAgICAgIHNldFZpZXdCb3goU1ZHRml0VG9WaWV3Qm94
OjpwYXJzZVZpZXdCb3goY3VyclZpZXdTcGVjLCBlbmQsIGZhbHNlKS52YWx1ZSgpKTsKICAgICAg
ICAgICAgICAgICBpZiAoY3VyclZpZXdTcGVjID49IGVuZCB8fCAqY3VyclZpZXdTcGVjICE9ICcp
JykKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIGN1
cnJWaWV3U3BlYysrOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5p
bWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbklt
cGwuaAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMv
U1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNTQsMTAgKzI1NCw4IEBAIHB1YmxpYzoKIAogICAgIE9wdGlvbmFsPGZsb2F0PiBjYWxjdWxh
dGVEaXN0YW5jZShTVkdFbGVtZW50KiwgY29uc3QgU3RyaW5nJiBmcm9tLCBjb25zdCBTdHJpbmcm
IHRvKSBjb25zdCBvdmVycmlkZQogICAgIHsKLSAgICAgICAgZmxvYXQgZnJvbU51bWJlciA9IDA7
Ci0gICAgICAgIGZsb2F0IHRvTnVtYmVyID0gMDsKLSAgICAgICAgcGFyc2VOdW1iZXJGcm9tU3Ry
aW5nKGZyb20sIGZyb21OdW1iZXIpOwotICAgICAgICBwYXJzZU51bWJlckZyb21TdHJpbmcodG8s
IHRvTnVtYmVyKTsKKyAgICAgICAgZmxvYXQgZnJvbU51bWJlciA9IHBhcnNlTnVtYmVyKGZyb20p
LnZhbHVlT3IoMCk7CisgICAgICAgIGZsb2F0IHRvTnVtYmVyID0gcGFyc2VOdW1iZXIodG8pLnZh
bHVlT3IoMCk7CiAgICAgICAgIHJldHVybiBmYWJzZih0b051bWJlciAtIGZyb21OdW1iZXIpOwog
ICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHUHJvcGVydHlU
cmFpdHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdQ
cm9wZXJ0eVRyYWl0cy5oCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
cHJvcGVydGllcy9TVkdQcm9wZXJ0eVRyYWl0cy5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSwxMCAr
NzUsMTAgQEAgc3RydWN0IFNWR1Byb3BlcnR5VHJhaXRzPHN0ZDo6cGFpcjxpbnQsIAogICAgIHN0
YXRpYyBzdGQ6OnBhaXI8aW50LCBpbnQ+IGluaXRpYWxWYWx1ZSgpIHsgcmV0dXJuIHsgfTsgfQog
ICAgIHN0YXRpYyBzdGQ6OnBhaXI8aW50LCBpbnQ+IGZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBz
dHJpbmcpCiAgICAgewotICAgICAgICBmbG9hdCBmaXJzdE51bWJlciA9IDAsIHNlY29uZE51bWJl
ciA9IDA7Ci0gICAgICAgIGlmICghcGFyc2VOdW1iZXJPcHRpb25hbE51bWJlcihzdHJpbmcsIGZp
cnN0TnVtYmVyLCBzZWNvbmROdW1iZXIpKQorICAgICAgICBhdXRvIHJlc3VsdCA9IHBhcnNlTnVt
YmVyT3B0aW9uYWxOdW1iZXIoc3RyaW5nKTsKKyAgICAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAg
ICAgICByZXR1cm4geyB9OwotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoc3RhdGljX2Nh
c3Q8aW50Pihyb3VuZGYoZmlyc3ROdW1iZXIpKSwgc3RhdGljX2Nhc3Q8aW50Pihyb3VuZGYoc2Vj
b25kTnVtYmVyKSkpOworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoc3RhdGljX2Nhc3Q8
aW50Pihyb3VuZGYocmVzdWx0LT5maXJzdCkpLCBzdGF0aWNfY2FzdDxpbnQ+KHJvdW5kZihyZXN1
bHQtPnNlY29uZCkpKTsKICAgICB9CiAgICAgc3RhdGljIE9wdGlvbmFsPHN0ZDo6cGFpcjxpbnQs
IGludD4+IHBhcnNlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBTdHJpbmcmKSB7IEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gaW5pdGlhbFZhbHVlKCk7IH0KICAgICBzdGF0aWMgU3Ry
aW5nIHRvU3RyaW5nKHN0ZDo6cGFpcjxpbnQsIGludD4pIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7
IHJldHVybiBlbXB0eVN0cmluZygpOyB9CkBAIC04OSwxNyArODksMTEgQEAgc3RydWN0IFNWR1By
b3BlcnR5VHJhaXRzPGZsb2F0PiB7CiAgICAgc3RhdGljIGZsb2F0IGluaXRpYWxWYWx1ZSgpIHsg
cmV0dXJuIDA7IH0KICAgICBzdGF0aWMgZmxvYXQgZnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHN0
cmluZykKICAgICB7Ci0gICAgICAgIGZsb2F0IG51bWJlciA9IDA7Ci0gICAgICAgIGlmICghcGFy
c2VOdW1iZXJGcm9tU3RyaW5nKHN0cmluZywgbnVtYmVyKSkKLSAgICAgICAgICAgIHJldHVybiAw
OwotICAgICAgICByZXR1cm4gbnVtYmVyOworICAgICAgICByZXR1cm4gcGFyc2VOdW1iZXIoc3Ry
aW5nKS52YWx1ZU9yKDApOwogICAgIH0KICAgICBzdGF0aWMgT3B0aW9uYWw8ZmxvYXQ+IHBhcnNl
KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBTdHJpbmcmIHN0cmluZykKICAgICB7Ci0gICAg
ICAgIGZsb2F0IG51bWJlcjsKLSAgICAgICAgaWYgKCFwYXJzZU51bWJlckZyb21TdHJpbmcoc3Ry
aW5nLCBudW1iZXIpKQotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAg
cmV0dXJuIG51bWJlcjsKKyAgICAgICAgcmV0dXJuIHBhcnNlTnVtYmVyKHN0cmluZyk7CiAgICAg
fQogICAgIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmcoZmxvYXQgdHlwZSkgeyByZXR1cm4gU3RyaW5n
OjpudW1iZXIodHlwZSk7IH0KIH07CkBAIC0xMDksMTAgKzEwMyw3IEBAIHN0cnVjdCBTVkdQcm9w
ZXJ0eVRyYWl0czxzdGQ6OnBhaXI8ZmxvYXQKICAgICBzdGF0aWMgc3RkOjpwYWlyPGZsb2F0LCBm
bG9hdD4gaW5pdGlhbFZhbHVlKCkgeyByZXR1cm4geyB9OyB9CiAgICAgc3RhdGljIHN0ZDo6cGFp
cjxmbG9hdCwgZmxvYXQ+IGZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiAgICAgewot
ICAgICAgICBmbG9hdCBmaXJzdE51bWJlciA9IDAsIHNlY29uZE51bWJlciA9IDA7Ci0gICAgICAg
IGlmICghcGFyc2VOdW1iZXJPcHRpb25hbE51bWJlcihzdHJpbmcsIGZpcnN0TnVtYmVyLCBzZWNv
bmROdW1iZXIpKQotICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgcmV0dXJuIHN0ZDo6
bWFrZV9wYWlyKGZpcnN0TnVtYmVyLCBzZWNvbmROdW1iZXIpOworICAgICAgICByZXR1cm4gcGFy
c2VOdW1iZXJPcHRpb25hbE51bWJlcihzdHJpbmcpLnZhbHVlT3Ioc3RkOjpwYWlyPGZsb2F0LCBm
bG9hdD4geyB9KTsKICAgICB9CiAgICAgc3RhdGljIE9wdGlvbmFsPHN0ZDo6cGFpcjxmbG9hdCwg
ZmxvYXQ+PiBwYXJzZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgU3RyaW5nJikgeyBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIGluaXRpYWxWYWx1ZSgpOyB9CiAgICAgc3RhdGljIFN0
cmluZyB0b1N0cmluZyhzdGQ6OnBhaXI8ZmxvYXQsIGZsb2F0PikgeyBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsgcmV0dXJuIGVtcHR5U3RyaW5nKCk7IH0KQEAgLTEyMywxNyArMTE0LDExIEBAIHN0cnVj
dCBTVkdQcm9wZXJ0eVRyYWl0czxGbG9hdFBvaW50PiB7CiAgICAgc3RhdGljIEZsb2F0UG9pbnQg
aW5pdGlhbFZhbHVlKCkgeyByZXR1cm4gRmxvYXRQb2ludCgpOyB9CiAgICAgc3RhdGljIEZsb2F0
UG9pbnQgZnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKICAgICB7Ci0gICAgICAgIEZs
b2F0UG9pbnQgcG9pbnQ7Ci0gICAgICAgIGlmICghcGFyc2VQb2ludChzdHJpbmcsIHBvaW50KSkK
LSAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgIHJldHVybiBwb2ludDsKKyAgICAgICAg
cmV0dXJuIHBhcnNlUG9pbnQoc3RyaW5nKS52YWx1ZU9yKEZsb2F0UG9pbnQgeyB9KTsKICAgICB9
CiAgICAgc3RhdGljIE9wdGlvbmFsPEZsb2F0UG9pbnQ+IHBhcnNlKGNvbnN0IFF1YWxpZmllZE5h
bWUmLCBjb25zdCBTdHJpbmcmIHN0cmluZykKICAgICB7Ci0gICAgICAgIEZsb2F0UG9pbnQgcG9p
bnQ7Ci0gICAgICAgIGlmICghcGFyc2VQb2ludChzdHJpbmcsIHBvaW50KSkKLSAgICAgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgICAgIHJldHVybiBwb2ludDsKKyAgICAgICAgcmV0
dXJuIHBhcnNlUG9pbnQoc3RyaW5nKTsKICAgICB9CiAgICAgc3RhdGljIFN0cmluZyB0b1N0cmlu
Zyhjb25zdCBGbG9hdFBvaW50JiB0eXBlKQogICAgIHsKQEAgLTE0NiwxNyArMTMxLDExIEBAIHN0
cnVjdCBTVkdQcm9wZXJ0eVRyYWl0czxGbG9hdFJlY3Q+IHsKICAgICBzdGF0aWMgRmxvYXRSZWN0
IGluaXRpYWxWYWx1ZSgpIHsgcmV0dXJuIEZsb2F0UmVjdCgpOyB9CiAgICAgc3RhdGljIEZsb2F0
UmVjdCBmcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKQogICAgIHsKLSAgICAgICAgRmxv
YXRSZWN0IHJlY3Q7Ci0gICAgICAgIGlmICghcGFyc2VSZWN0KHN0cmluZywgcmVjdCkpCi0gICAg
ICAgICAgICByZXR1cm4geyB9OwotICAgICAgICByZXR1cm4gcmVjdDsKKyAgICAgICAgcmV0dXJu
IHBhcnNlUmVjdChzdHJpbmcpLnZhbHVlT3IoRmxvYXRSZWN0IHsgfSk7CiAgICAgfQogICAgIHN0
YXRpYyBPcHRpb25hbDxGbG9hdFJlY3Q+IHBhcnNlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25z
dCBTdHJpbmcmIHN0cmluZykKICAgICB7Ci0gICAgICAgIEZsb2F0UmVjdCByZWN0OwotICAgICAg
ICBpZiAoIXBhcnNlUmVjdChzdHJpbmcsIHJlY3QpKQotICAgICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKLSAgICAgICAgcmV0dXJuIHJlY3Q7CisgICAgICAgIHJldHVybiBwYXJzZVJlY3Qo
c3RyaW5nKTsKICAgICB9CiAgICAgc3RhdGljIFN0cmluZyB0b1N0cmluZyhjb25zdCBGbG9hdFJl
Y3QmIHR5cGUpCiAgICAgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>402373</attachid>
            <date>2020-06-19 20:13:37 -0700</date>
            <delta_ts>2020-06-19 21:06:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213416-20200619201336.patch</filename>
            <type>text/plain</type>
            <size>144424</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MzI5NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3MSBAQAorMjAyMC0wNi0xOSAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQ29udmVydCBtdWNoIG9mIHRoZSBT
Vkcgc3RyaW5nIHBhcnNpbmcgY29kZSB0byB1c2UgT3B0aW9uYWwgYmFzZWQgcmV0dXJuIHZhbHVl
cyByYXRoZXIgdGhhbiBvdXQtcGFyYW1ldGVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEzNDE2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgV0lQCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogc3ZnL1NWR0FuZ2xlVmFsdWUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6cGFyc2VBbmdsZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5nbGVW
YWx1ZTo6c2V0VmFsdWVBc1N0cmluZyk6CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVNb3Rpb25F
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVNb3Rpb25FbGVtZW50Ojpj
YWxjdWxhdGVUb0F0RW5kT2ZEdXJhdGlvblZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0Fu
aW1hdGVNb3Rpb25FbGVtZW50OjpjYWxjdWxhdGVGcm9tQW5kVG9WYWx1ZXMpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OmNhbGN1bGF0ZUZyb21BbmRCeVZhbHVl
cyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6Y2FsY3VsYXRl
RGlzdGFuY2UpOgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OnBhcnNlS2V5U3BsaW5lcyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmlt
YXRpb25FbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisgICAgICAgICogc3ZnL1NWR0ZFQ29udm9s
dmVNYXRyaXhFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFQ29udm9sdmVNYXRy
aXhFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisgICAgICAgICogc3ZnL1NWR0ZFRGlmZnVzZUxp
Z2h0aW5nRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURpZmZ1c2VMaWdodGlu
Z0VsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKiBzdmcvU1ZHRkVEcm9wU2hhZG93
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURyb3BTaGFkb3dFbGVtZW50Ojpw
YXJzZUF0dHJpYnV0ZSk6CisgICAgICAgICogc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OnBhcnNlQXR0
cmlidXRlKToKKyAgICAgICAgKiBzdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRkVJbWFnZUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKiBz
dmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRU1v
cnBob2xvZ3lFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisgICAgICAgICogc3ZnL1NWR0ZFU3Bl
Y3VsYXJMaWdodGluZ0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVTcGVjdWxh
ckxpZ2h0aW5nRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAgICAgICAqIHN2Zy9TVkdGRVR1
cmJ1bGVuY2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFVHVyYnVsZW5jZUVs
ZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKiBzdmcvU1ZHRml0VG9WaWV3Qm94LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpdFRvVmlld0JveDo6cGFyc2VBdHRyaWJ1dGUpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRml0VG9WaWV3Qm94OjpwYXJzZVZpZXdCb3gpOgorICAgICAg
ICAqIHN2Zy9TVkdGaXRUb1ZpZXdCb3guaDoKKyAgICAgICAgKiBzdmcvU1ZHR2x5cGhSZWZFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlRmxvYXQpOgorICAgICAgICAqIHN2Zy9T
VkdIS2VybkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSEtlcm5FbGVtZW50Ojpi
dWlsZEhvcml6b250YWxLZXJuaW5nUGFpciBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0hLZXJu
RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdJbWFnZUVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHSW1hZ2VFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisgICAgICAgICogc3Zn
L1NWR0xlbmd0aFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0xlbmd0aFZhbHVlOjpz
ZXRWYWx1ZUFzU3RyaW5nKToKKyAgICAgICAgKiBzdmcvU1ZHTnVtYmVyTGlzdC5oOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHTnVtYmVyTGlzdDo6cGFyc2UpOgorICAgICAgICAqIHN2Zy9TVkdQYXJz
ZXJVdGlsaXRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2VuZXJpY1BhcnNlTnVtYmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OnBhcnNlTnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OmdlbmVy
aWNQYXJzZUFyY0ZsYWcpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VBcmNGbGFnKToKKyAgICAg
ICAgKFdlYkNvcmU6OnBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6cGFyc2VQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVJlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6cGFyc2VHbHlwaE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VVbmljb2Rl
UmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VLZXJuaW5nVW5pY29kZVN0cmluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpnZW5lcmljUGFyc2VGbG9hdFBvaW50KToKKyAgICAgICAgKFdlYkNv
cmU6OnBhcnNlRmxvYXRQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVNWR051bWJlcik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpwYXJzZU51bWJlckZyb21TdHJpbmcpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VEZWxpbWl0ZWRTdHJpbmcpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6cGFyc2VGbG9hdFBvaW50Mik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpwYXJzZUZsb2F0UG9pbnQzKTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHUGFy
c2VyVXRpbGl0aWVzLmg6CisgICAgICAgIChXZWJDb3JlOjppc1NWR1NwYWNlKToKKyAgICAgICAg
KFdlYkNvcmU6OnNraXBPcHRpb25hbFNWR1NwYWNlcyk6CisgICAgICAgIChXZWJDb3JlOjpza2lw
T3B0aW9uYWxTVkdTcGFjZXNPckRlbGltaXRlcik6CisgICAgICAgICogc3ZnL1NWR1BhdGhCbGVu
ZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnB1bGxGcm9tU291cmNlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdQYXRoQmxlbmRlcjo6YmxlbmRNb3ZlVG9TZWdtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1BhdGhCbGVuZGVyOjpibGVuZExpbmVUb1NlZ21lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHUGF0aEJsZW5kZXI6OmJsZW5kTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJsZW5kZXI6OmJsZW5kTGluZVRvVmVydGljYWxTZWdtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCbGVuZGVyOjpibGVuZEN1cnZlVG9DdWJpY1Nl
Z21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJsZW5kZXI6OmJsZW5kQ3VydmVUb0N1
YmljU21vb3RoU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQmxlbmRlcjo6Ymxl
bmRDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQmxl
bmRlcjo6YmxlbmRDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdQYXRoQmxlbmRlcjo6YmxlbmRBcmNUb1NlZ21lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHUGF0aEJsZW5kZXI6OmNhbkJsZW5kUGF0aHMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
UGF0aEJsZW5kZXI6OmJsZW5kQW5pbWF0ZWRQYXRoKToKKyAgICAgICAgKiBzdmcvU1ZHUGF0aEJ5
dGVTdHJlYW1Tb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW1T
b3VyY2U6Om5leHRDb21tYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFt
U291cmNlOjpwYXJzZVNWR1NlZ21lbnRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhC
eXRlU3RyZWFtU291cmNlOjpwYXJzZU1vdmVUb1NlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlTGluZVRvU2VnbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VMaW5lVG9Ib3Jpem9udGFsU2Vn
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VM
aW5lVG9WZXJ0aWNhbFNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJl
YW1Tb3VyY2U6OnBhcnNlQ3VydmVUb0N1YmljU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZUN1cnZlVG9R
dWFkcmF0aWNTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFtU291
cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZUFyY1RvU2VnbWVudCk6CisgICAgICAg
ICogc3ZnL1NWR1BhdGhCeXRlU3RyZWFtU291cmNlLmg6CisgICAgICAgICogc3ZnL1NWR1BhdGhQ
YXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFBhcnNlcjo6cGFyc2VNb3ZlVG9T
ZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhQYXJzZXI6OnBhcnNlTGluZVRvU2Vn
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoUGFyc2VyOjpwYXJzZUxpbmVUb0hvcml6
b250YWxTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhQYXJzZXI6OnBhcnNlTGlu
ZVRvVmVydGljYWxTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhQYXJzZXI6OnBh
cnNlQ3VydmVUb0N1YmljU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoUGFyc2Vy
OjpwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
UGF0aFBhcnNlcjo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdQYXRoUGFyc2VyOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhQYXJzZXI6OnBhcnNlQXJjVG9TZWdtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1BhdGhQYXJzZXI6OnBhcnNlUGF0aERhdGEpOgorICAgICAgICAq
IHN2Zy9TVkdQYXRoUGFyc2VyLmg6CisgICAgICAgICogc3ZnL1NWR1BhdGhTZWdMaXN0U291cmNl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdMaXN0U291cmNlOjpuZXh0Q29tbWFu
ZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VTVkdTZWdt
ZW50VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VN
b3ZlVG9TZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdMaXN0U291cmNlOjpw
YXJzZUxpbmVUb1NlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0xpc3RTb3Vy
Y2U6OnBhcnNlTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
UGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNlTGluZVRvVmVydGljYWxTZWdtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNlQ3VydmVUb0N1
YmljU21vb3RoU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnTGlzdFNvdXJj
ZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQ
YXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VBcmNUb1NlZ21lbnQp
OgorICAgICAgICAqIHN2Zy9TVkdQYXRoU2VnTGlzdFNvdXJjZS5oOgorICAgICAgICAqIHN2Zy9T
VkdQYXRoU291cmNlLmg6CisgICAgICAgICogc3ZnL1NWR1BhdGhTdHJpbmdTb3VyY2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6bmV4dENvbW1hbmRIZWxwZXIpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUGF0aFN0cmluZ1NvdXJjZTo6bmV4dENvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6cGFy
c2VTVkdTZWdtZW50VHlwZUhlbHBlcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU3RyaW5n
U291cmNlOjpwYXJzZVNWR1NlZ21lbnRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhT
dHJpbmdTb3VyY2U6OnBhcnNlTW92ZVRvU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQ
YXRoU3RyaW5nU291cmNlOjpwYXJzZUxpbmVUb1NlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUxpbmVUb1ZlcnRpY2FsU2Vn
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUN1cnZl
VG9DdWJpY1NlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZTo6
cGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Bh
dGhTdHJpbmdTb3VyY2U6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3Ro
U2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUFy
Y1RvU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUFyY1RvU2VnbWVudEhlbHBlcik6
IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR1BhdGhTdHJpbmdTb3VyY2UuaDoKKyAgICAgICAg
KiBzdmcvU1ZHUG9pbnRMaXN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdQb2ludExpc3Q6OnBh
cnNlKToKKyAgICAgICAgKiBzdmcvU1ZHVG9PVEZGb250Q29udmVyc2lvbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFkZEtlcm5pbmdQYWlyIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kS0VSTlN1YnRh
YmxlKToKKyAgICAgICAgKiBzdmcvU1ZHVHJhbnNmb3JtTGlzdC5oOgorICAgICAgICAqIHN2Zy9T
VkdUcmFuc2Zvcm1hYmxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlVHJhbnNmb3JtUGFy
YW1MaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNm
b3JtVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VBbmRT
a2lwVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZVRyYW5z
Zm9ybVR5cGUpOgorICAgICAgICAqIHN2Zy9TVkdUcmFuc2Zvcm1hYmxlLmg6CisgICAgICAgICog
c3ZnL1NWR1ZLZXJuRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdWS2VybkVsZW1l
bnQ6OmJ1aWxkVmVydGljYWxLZXJuaW5nUGFpciBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR1ZL
ZXJuRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdWaWV3U3BlYy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdWaWV3U3BlYzo6cGFyc2VWaWV3U3BlYyk6CisgICAgICAgICogc3ZnL3Byb3Bl
cnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oOgorICAgICAgICAq
IHN2Zy9wcm9wZXJ0aWVzL1NWR1Byb3BlcnR5VHJhaXRzLmg6CisgICAgICAgIChXZWJDb3JlOjpT
VkdQcm9wZXJ0eVRyYWl0czxmbG9hdD46OmZyb21TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUHJvcGVydHlUcmFpdHM8ZmxvYXQ+OjpwYXJzZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQ
cm9wZXJ0eVRyYWl0czxGbG9hdFBvaW50Pjo6ZnJvbVN0cmluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdQcm9wZXJ0eVRyYWl0czxGbG9hdFBvaW50Pjo6cGFyc2UpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHUHJvcGVydHlUcmFpdHM8RmxvYXRSZWN0Pjo6ZnJvbVN0cmluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxGbG9hdFJlY3Q+OjpwYXJzZSk6CisKIDIwMjAtMDYt
MTkgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBBdm9pZCBpbml0
aWFsaXppbmcgUmVuZGVyVGhlbWUgc2luZ2xldG9uIHVubmVjZXNzYXJpbHkgaW4gdGhlIFVJUHJv
Y2VzcwpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMDA4Myw2ICsxMDA4
Myw3IEBACiAJCTdDODNERTg1MUQwNENCRDQwMEZFQkNGMyAvKiBTcHJpbmdTb2x2ZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3ByaW5nU29sdmVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTdDODVCMjAxMjJGQjA0ODUwMDMwNjg0RiAvKiBXSExTTFVubmFt
ZWRUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMVW5uYW1lZFR5cGUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Qzg1QjIwNDIyRkIwNjMyMDAzMDY4NEYgLyogV0hM
U0xVbm5hbWVkVHlwZUhhc2guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xVbm5hbWVkVHlwZUhhc2gu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0M4ODI0QzQyNDlEN0IwNTAwRUQ4RkM0
IC8qIFNWR1BhdGhTZWdWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
VkdQYXRoU2VnVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0M4RTM0OTIx
RTRBMzM4RTAwNTRDRTIzIC8qIEpTRE9NQ29udmVydEFueS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU0RPTUNvbnZlcnRBbnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJN0M4RTM0OTMxRTRBMzM4RTAwNTRDRTIzIC8qIEpTRE9NQ29udmVydEJhc2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNET01Db252ZXJ0QmFzZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3QzhFMzQ5NDFFNEEzMzhFMDA1NENFMjMgLyogSlNET01D
b252ZXJ0Qm9vbGVhbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0RPTUNv
bnZlcnRCb29sZWFuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNTE4Niw2ICsy
NTE4Nyw3IEBACiAJCQkJODRCNkI5NzYxMjBGMTNFNTAwQjhFRkFGIC8qIFNWR1BhdGhTZWdMaXN0
U291cmNlLmggKi8sCiAJCQkJQjIyMjc4RUYwRDAwQkYyMTAwNzFCNzgyIC8qIFNWR1BhdGhTZWdN
b3ZldG9BYnMuaWRsICovLAogCQkJCUIyMjI3OEYwMEQwMEJGMjEwMDcxQjc4MiAvKiBTVkdQYXRo
U2VnTW92ZXRvUmVsLmlkbCAqLywKKwkJCQk3Qzg4MjRDNDI0OUQ3QjA1MDBFRDhGQzQgLyogU1ZH
UGF0aFNlZ1ZhbHVlLmggKi8sCiAJCQkJODQzMDBCRDcxMjBDOUFENDAwMjE5NTRBIC8qIFNWR1Bh
dGhTb3VyY2UuaCAqLywKIAkJCQk4NDE5RDJCNzEyMEUwQzc2MDAxNDFGOEYgLyogU1ZHUGF0aFN0
cmluZ0J1aWxkZXIuY3BwICovLAogCQkJCTg0MTlEMkI4MTIwRTBDNzYwMDE0MUY4RiAvKiBTVkdQ
YXRoU3RyaW5nQnVpbGRlci5oICovLApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuZ2xl
VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmdsZVZhbHVl
LmNwcAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuZ2xlVmFs
dWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3IEBAIFN0cmluZyBTVkdBbmdsZVZh
bHVlOjp2YWx1ZUFzU3RyaW5nKCkgY28KICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgU1ZHQW5nbGVWYWx1ZTo6VHlwZSBwYXJzZUFuZ2xlVHlwZShjb25zdCBVQ2hhciog
cHRyLCBjb25zdCBVQ2hhciogZW5kKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4g
c3RhdGljIGlubGluZSBTVkdBbmdsZVZhbHVlOjpUeXBlIHBhcnNlQW5nbGVUeXBlKGNvbnN0IENo
YXJhY3RlclR5cGUqIHB0ciwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kKQogewogICAgIHN3aXRj
aCAoZW5kIC0gcHRyKSB7CiAgICAgY2FzZSAwOgpAQCAtMTA2LDIxICsxMDYsMjkgQEAgRXhjZXB0
aW9uT3I8dm9pZD4gU1ZHQW5nbGVWYWx1ZTo6c2V0VmFsdQogICAgICAgICByZXR1cm4geyB9Owog
ICAgIH0KIAotICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyh2YWx1
ZSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIqIHB0ciA9IHVwY29u
dmVydGVkQ2hhcmFjdGVyczsKLSAgICBjb25zdCBVQ2hhciogZW5kID0gcHRyICsgdmFsdWUubGVu
Z3RoKCk7Ci0KLSAgICBmbG9hdCB2YWx1ZUluU3BlY2lmaWVkVW5pdHMgPSAwOwotICAgIGlmICgh
cGFyc2VOdW1iZXIocHRyLCBlbmQsIHZhbHVlSW5TcGVjaWZpZWRVbml0cywgZmFsc2UpKQotICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKLQotICAgIGF1dG8gdW5pdFR5
cGUgPSBwYXJzZUFuZ2xlVHlwZShwdHIsIGVuZCk7Ci0gICAgaWYgKHVuaXRUeXBlID09IFNWR19B
TkdMRVRZUEVfVU5LTk9XTikKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9y
IH07CisgICAgYXV0byBoZWxwZXIgPSBbJl0oY29uc3QgYXV0byogcHRyLCBjb25zdCBhdXRvKiBl
bmQpIC0+IEV4Y2VwdGlvbk9yPHZvaWQ+IHsKKyAgICAgICAgYXV0byB2YWx1ZUluU3BlY2lmaWVk
VW5pdHMgPSBwYXJzZU51bWJlcihwdHIsIGVuZCwgU3VmZml4U2tpcHBpbmdQb2xpY3k6OkRvbnRT
a2lwKTsKKyAgICAgICAgaWYgKCF2YWx1ZUluU3BlY2lmaWVkVW5pdHMpCisgICAgICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKKworICAgICAgICBhdXRvIHVuaXRUeXBl
ID0gcGFyc2VBbmdsZVR5cGUocHRyLCBlbmQpOworICAgICAgICBpZiAodW5pdFR5cGUgPT0gU1ZH
QW5nbGVWYWx1ZTo6U1ZHX0FOR0xFVFlQRV9VTktOT1dOKQorICAgICAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiAKLSAgICBtX3VuaXRUeXBlID0gdW5pdFR5cGU7Ci0g
ICAgbV92YWx1ZUluU3BlY2lmaWVkVW5pdHMgPSB2YWx1ZUluU3BlY2lmaWVkVW5pdHM7Ci0gICAg
cmV0dXJuIHsgfTsKKyAgICAgICAgbV91bml0VHlwZSA9IHVuaXRUeXBlOworICAgICAgICBtX3Zh
bHVlSW5TcGVjaWZpZWRVbml0cyA9ICp2YWx1ZUluU3BlY2lmaWVkVW5pdHM7CisgICAgICAgIHJl
dHVybiB7IH07CisgICAgfTsKKworICAgIGlmICh2YWx1ZS5pczhCaXQoKSkgeworICAgICAgICBj
b25zdCBhdXRvKiBwdHIgPSB2YWx1ZS5jaGFyYWN0ZXJzOCgpOworICAgICAgICBjb25zdCBhdXRv
KiBlbmQgPSBwdHIgKyB2YWx1ZS5sZW5ndGgoKTsKKyAgICAgICAgcmV0dXJuIGhlbHBlcihwdHIs
IGVuZCk7CisgICAgfQorCisgICAgY29uc3QgYXV0byogcHRyID0gdmFsdWUuY2hhcmFjdGVyczE2
KCk7CisgICAgY29uc3QgYXV0byogZW5kID0gcHRyICsgdmFsdWUubGVuZ3RoKCk7CisgICAgcmV0
dXJuIGhlbHBlcihwdHIsIGVuZCk7CiB9CiAKIEV4Y2VwdGlvbk9yPHZvaWQ+IFNWR0FuZ2xlVmFs
dWU6Om5ld1ZhbHVlU3BlY2lmaWVkVW5pdHModW5zaWduZWQgc2hvcnQgdW5pdFR5cGUsIGZsb2F0
IHZhbHVlSW5TcGVjaWZpZWRVbml0cykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmlt
YXRlTW90aW9uRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTYxLDcgKzE2MSw3IEBAIHZvaWQgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OnN0b3BBbmltYXQK
IAogYm9vbCBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6Y2FsY3VsYXRlVG9BdEVuZE9mRHVyYXRp
b25WYWx1ZShjb25zdCBTdHJpbmcmIHRvQXRFbmRPZkR1cmF0aW9uU3RyaW5nKQogewotICAgIHBh
cnNlUG9pbnQodG9BdEVuZE9mRHVyYXRpb25TdHJpbmcsIG1fdG9Qb2ludEF0RW5kT2ZEdXJhdGlv
bik7CisgICAgbV90b1BvaW50QXRFbmRPZkR1cmF0aW9uID0gcGFyc2VQb2ludCh0b0F0RW5kT2ZE
dXJhdGlvblN0cmluZykudmFsdWVPcihGbG9hdFBvaW50IHsgfSk7CiAgICAgbV9oYXNUb1BvaW50
QXRFbmRPZkR1cmF0aW9uID0gdHJ1ZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTE2OSw4ICsx
NjksOCBAQCBib29sIFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OjpjYWxjdWxhdGVUCiBib29sIFNW
R0FuaW1hdGVNb3Rpb25FbGVtZW50OjpjYWxjdWxhdGVGcm9tQW5kVG9WYWx1ZXMoY29uc3QgU3Ry
aW5nJiBmcm9tU3RyaW5nLCBjb25zdCBTdHJpbmcmIHRvU3RyaW5nKQogewogICAgIG1faGFzVG9Q
b2ludEF0RW5kT2ZEdXJhdGlvbiA9IGZhbHNlOwotICAgIHBhcnNlUG9pbnQoZnJvbVN0cmluZywg
bV9mcm9tUG9pbnQpOwotICAgIHBhcnNlUG9pbnQodG9TdHJpbmcsIG1fdG9Qb2ludCk7CisgICAg
bV9mcm9tUG9pbnQgPSBwYXJzZVBvaW50KGZyb21TdHJpbmcpLnZhbHVlT3IoRmxvYXRQb2ludCB7
IH0pOworICAgIG1fdG9Qb2ludCA9IHBhcnNlUG9pbnQodG9TdHJpbmcpLnZhbHVlT3IoRmxvYXRQ
b2ludCB7IH0pOwogICAgIHJldHVybiB0cnVlOwogfQogICAgIApAQCAtMTc5LDkgKzE3OSw4IEBA
IGJvb2wgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OmNhbGN1bGF0ZUYKICAgICBtX2hhc1RvUG9p
bnRBdEVuZE9mRHVyYXRpb24gPSBmYWxzZTsKICAgICBpZiAoYW5pbWF0aW9uTW9kZSgpID09IEFu
aW1hdGlvbk1vZGU6OkJ5ICYmICFpc0FkZGl0aXZlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBwYXJzZVBvaW50KGZyb21TdHJpbmcsIG1fZnJvbVBvaW50KTsKLSAgICBGbG9hdFBvaW50
IGJ5UG9pbnQ7Ci0gICAgcGFyc2VQb2ludChieVN0cmluZywgYnlQb2ludCk7CisgICAgbV9mcm9t
UG9pbnQgPSBwYXJzZVBvaW50KGZyb21TdHJpbmcpLnZhbHVlT3IoRmxvYXRQb2ludCB7IH0pOwor
ICAgIGF1dG8gYnlQb2ludCA9IHBhcnNlUG9pbnQoYnlTdHJpbmcpLnZhbHVlT3IoRmxvYXRQb2lu
dCB7IH0pOwogICAgIG1fdG9Qb2ludCA9IEZsb2F0UG9pbnQobV9mcm9tUG9pbnQueCgpICsgYnlQ
b2ludC54KCksIG1fZnJvbVBvaW50LnkoKSArIGJ5UG9pbnQueSgpKTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KQEAgLTI3NSwxMyArMjc0LDEzIEBAIHZvaWQgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6
OmFwcGx5UmVzdWwKIAogT3B0aW9uYWw8ZmxvYXQ+IFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50Ojpj
YWxjdWxhdGVEaXN0YW5jZShjb25zdCBTdHJpbmcmIGZyb21TdHJpbmcsIGNvbnN0IFN0cmluZyYg
dG9TdHJpbmcpCiB7Ci0gICAgRmxvYXRQb2ludCBmcm9tOwotICAgIEZsb2F0UG9pbnQgdG87Ci0g
ICAgaWYgKCFwYXJzZVBvaW50KGZyb21TdHJpbmcsIGZyb20pKQorICAgIGF1dG8gZnJvbSA9IHBh
cnNlUG9pbnQoZnJvbVN0cmluZyk7CisgICAgaWYgKCFmcm9tKQogICAgICAgICByZXR1cm4geyB9
OwotICAgIGlmICghcGFyc2VQb2ludCh0b1N0cmluZywgdG8pKQorICAgIGF1dG8gdG8gPSBwYXJz
ZVBvaW50KHRvU3RyaW5nKTsKKyAgICBpZiAoIXRvKQogICAgICAgICByZXR1cm4geyB9OwotICAg
IEZsb2F0U2l6ZSBkaWZmID0gdG8gLSBmcm9tOworICAgIGF1dG8gZGlmZiA9ICp0byAtICpmcm9t
OwogICAgIHJldHVybiBzdGQ6Omh5cG90KGRpZmYud2lkdGgoKSwgZGlmZi5oZWlnaHQoKSk7CiB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDI2MzE3NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsMTEgKzc3LDEwIEBAIGZhaWw6CiAgICAgcmVzdWx0
LmNsZWFyKCk7CiB9CiAKLXN0YXRpYyB2b2lkIHBhcnNlS2V5U3BsaW5lcyhjb25zdCBTdHJpbmcm
IHBhcnNlLCBWZWN0b3I8VW5pdEJlemllcj4mIHJlc3VsdCkKK3N0YXRpYyBPcHRpb25hbDxWZWN0
b3I8VW5pdEJlemllcj4+IHBhcnNlS2V5U3BsaW5lcyhjb25zdCBTdHJpbmcmIHBhcnNlKQogewot
ICAgIHJlc3VsdC5jbGVhcigpOwogICAgIGlmIChwYXJzZS5pc0VtcHR5KCkpCi0gICAgICAgIHJl
dHVybjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIGF1dG8gdXBjb252ZXJ0
ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyhwYXJzZSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7
CiAgICAgY29uc3QgVUNoYXIqIGN1ciA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKQEAgLTg5LDMy
ICs4OCwyNiBAQCBzdGF0aWMgdm9pZCBwYXJzZUtleVNwbGluZXMoY29uc3QgU3RyaW5nCiAKICAg
ICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoY3VyLCBlbmQpOwogCisgICAgVmVjdG9yPFVuaXRCZXpp
ZXI+IHJlc3VsdDsKKwogICAgIGJvb2wgZGVsaW1QYXJzZWQgPSBmYWxzZTsKICAgICB3aGlsZSAo
Y3VyIDwgZW5kKSB7CiAgICAgICAgIGRlbGltUGFyc2VkID0gZmFsc2U7Ci0gICAgICAgIGZsb2F0
IHBvc0EgPSAwOwotICAgICAgICBpZiAoIXBhcnNlTnVtYmVyKGN1ciwgZW5kLCBwb3NBKSkgewot
ICAgICAgICAgICAgcmVzdWx0LmNsZWFyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLQotICAgICAgICBmbG9hdCBwb3NCID0gMDsKLSAgICAgICAgaWYgKCFwYXJzZU51bWJlcihj
dXIsIGVuZCwgcG9zQikpIHsKLSAgICAgICAgICAgIHJlc3VsdC5jbGVhcigpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZmxvYXQgcG9zQyA9IDA7Ci0gICAgICAg
IGlmICghcGFyc2VOdW1iZXIoY3VyLCBlbmQsIHBvc0MpKSB7Ci0gICAgICAgICAgICByZXN1bHQu
Y2xlYXIoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGZsb2F0
IHBvc0QgPSAwOwotICAgICAgICBpZiAoIXBhcnNlTnVtYmVyKGN1ciwgZW5kLCBwb3NELCBmYWxz
ZSkpIHsKLSAgICAgICAgICAgIHJlc3VsdC5jbGVhcigpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9CisgICAgICAgIGF1dG8gcG9zQSA9IHBhcnNlTnVtYmVyKGN1ciwgZW5kKTsKKyAg
ICAgICAgaWYgKCFwb3NBKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAg
ICAgICBhdXRvIHBvc0IgPSBwYXJzZU51bWJlcihjdXIsIGVuZCk7CisgICAgICAgIGlmICghcG9z
QikKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICAgICAgYXV0byBwb3ND
ID0gcGFyc2VOdW1iZXIoY3VyLCBlbmQpOworICAgICAgICBpZiAoIXBvc0MpCisgICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgICAgIGF1dG8gcG9zRCA9IHBhcnNlTnVtYmVy
KGN1ciwgZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNraXApOworICAgICAgICBpZiAo
IXBvc0QpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgICAgIHNraXBP
cHRpb25hbFNWR1NwYWNlcyhjdXIsIGVuZCk7CiAKQEAgLTEyMiwxMiArMTE1LDE2IEBAIHN0YXRp
YyB2b2lkIHBhcnNlS2V5U3BsaW5lcyhjb25zdCBTdHJpbmcKICAgICAgICAgICAgIGRlbGltUGFy
c2VkID0gdHJ1ZTsKICAgICAgICAgICAgIGN1cisrOwogICAgICAgICB9CisKICAgICAgICAgc2tp
cE9wdGlvbmFsU1ZHU3BhY2VzKGN1ciwgZW5kKTsKIAotICAgICAgICByZXN1bHQuYXBwZW5kKFVu
aXRCZXppZXIocG9zQSwgcG9zQiwgcG9zQywgcG9zRCkpOworICAgICAgICByZXN1bHQuYXBwZW5k
KFVuaXRCZXppZXIgeyAqcG9zQSwgKnBvc0IsICpwb3NDLCAqcG9zRCB9KTsKICAgICB9CisKICAg
ICBpZiAoIShjdXIgPT0gZW5kICYmICFkZWxpbVBhcnNlZCkpCi0gICAgICAgIHJlc3VsdC5jbGVh
cigpOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAogYm9vbCBTVkdBbmltYXRpb25FbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25z
dCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKQEAgLTE4MCw3ICsxNzcsOCBAQCB2b2lkIFNWR0Fu
aW1hdGlvbkVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlCiAgICAgfQogCiAgICAgaWYgKG5hbWUgPT0g
U1ZHTmFtZXM6OmtleVNwbGluZXNBdHRyKSB7Ci0gICAgICAgIHBhcnNlS2V5U3BsaW5lcyh2YWx1
ZSwgbV9rZXlTcGxpbmVzKTsKKyAgICAgICAgaWYgKGF1dG8ga2V5U3BsaW5lcyA9IHBhcnNlS2V5
U3BsaW5lcyh2YWx1ZSkpCisgICAgICAgICAgICBtX2tleVNwbGluZXMgPSBXVEZNb3ZlKCprZXlT
cGxpbmVzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuY3BwCShyZXZpc2lvbiAyNjMx
NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02NywxMCArNjcsMTAgQEAgdm9pZCBTVkdGRUNvbnZvbHZlTWF0
cml4RWxlbWVudDo6cGFyc2VBdAogICAgIH0KIAogICAgIGlmIChuYW1lID09IFNWR05hbWVzOjpv
cmRlckF0dHIpIHsKLSAgICAgICAgZmxvYXQgeCwgeTsKLSAgICAgICAgaWYgKHBhcnNlTnVtYmVy
T3B0aW9uYWxOdW1iZXIodmFsdWUsIHgsIHkpICYmIHggPj0gMSAmJiB5ID49IDEpIHsKLSAgICAg
ICAgICAgIG1fb3JkZXJYLT5zZXRCYXNlVmFsSW50ZXJuYWwoeCk7Ci0gICAgICAgICAgICBtX29y
ZGVyWS0+c2V0QmFzZVZhbEludGVybmFsKHkpOworICAgICAgICBhdXRvIHJlc3VsdCA9IHBhcnNl
TnVtYmVyT3B0aW9uYWxOdW1iZXIodmFsdWUpOworICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3Vs
dC0+Zmlyc3QgPj0gMSAmJiByZXN1bHQtPnNlY29uZCA+PSAxKSB7CisgICAgICAgICAgICBtX29y
ZGVyWC0+c2V0QmFzZVZhbEludGVybmFsKHJlc3VsdC0+Zmlyc3QpOworICAgICAgICAgICAgbV9v
cmRlclktPnNldEJhc2VWYWxJbnRlcm5hbChyZXN1bHQtPnNlY29uZCk7CiAgICAgICAgIH0gZWxz
ZQogICAgICAgICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVwb3J0V2Fy
bmluZygiZmVDb252b2x2ZU1hdHJpeDogcHJvYmxlbSBwYXJzaW5nIG9yZGVyPVwiIiArIHZhbHVl
ICsgIlwiLiBGaWx0ZXJlZCBlbGVtZW50IHdpbGwgbm90IGJlIGRpc3BsYXllZC4iKTsKICAgICAg
ICAgcmV0dXJuOwpAQCAtMTE1LDEwICsxMTUsMTAgQEAgdm9pZCBTVkdGRUNvbnZvbHZlTWF0cml4
RWxlbWVudDo6cGFyc2VBdAogICAgIH0KIAogICAgIGlmIChuYW1lID09IFNWR05hbWVzOjprZXJu
ZWxVbml0TGVuZ3RoQXR0cikgewotICAgICAgICBmbG9hdCB4LCB5OwotICAgICAgICBpZiAocGFy
c2VOdW1iZXJPcHRpb25hbE51bWJlcih2YWx1ZSwgeCwgeSkgJiYgeCA+IDAgJiYgeSA+IDApIHsK
LSAgICAgICAgICAgIG1fa2VybmVsVW5pdExlbmd0aFgtPnNldEJhc2VWYWxJbnRlcm5hbCh4KTsK
LSAgICAgICAgICAgIG1fa2VybmVsVW5pdExlbmd0aFktPnNldEJhc2VWYWxJbnRlcm5hbCh5KTsK
KyAgICAgICAgYXV0byByZXN1bHQgPSBwYXJzZU51bWJlck9wdGlvbmFsTnVtYmVyKHZhbHVlKTsK
KyAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQtPmZpcnN0ID4gMCAmJiByZXN1bHQtPnNlY29u
ZCA+IDApIHsKKyAgICAgICAgICAgIG1fa2VybmVsVW5pdExlbmd0aFgtPnNldEJhc2VWYWxJbnRl
cm5hbChyZXN1bHQtPmZpcnN0KTsKKyAgICAgICAgICAgIG1fa2VybmVsVW5pdExlbmd0aFktPnNl
dEJhc2VWYWxJbnRlcm5hbChyZXN1bHQtPnNlY29uZCk7CiAgICAgICAgIH0gZWxzZQogICAgICAg
ICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVwb3J0V2FybmluZygiZmVD
b252b2x2ZU1hdHJpeDogcHJvYmxlbSBwYXJzaW5nIGtlcm5lbFVuaXRMZW5ndGg9XCIiICsgdmFs
dWUgKyAiXCIuIEZpbHRlcmVkIGVsZW1lbnQgd2lsbCBub3QgYmUgZGlzcGxheWVkLiIpOwogICAg
ICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRp
bmdFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZm
dXNlTGlnaHRpbmdFbGVtZW50LmNwcAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTcxLDEwICs3MSw5IEBAIHZvaWQgU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjpwYXJzZUEK
ICAgICB9CiAKICAgICBpZiAobmFtZSA9PSBTVkdOYW1lczo6a2VybmVsVW5pdExlbmd0aEF0dHIp
IHsKLSAgICAgICAgZmxvYXQgeCwgeTsKLSAgICAgICAgaWYgKHBhcnNlTnVtYmVyT3B0aW9uYWxO
dW1iZXIodmFsdWUsIHgsIHkpKSB7Ci0gICAgICAgICAgICBtX2tlcm5lbFVuaXRMZW5ndGhYLT5z
ZXRCYXNlVmFsSW50ZXJuYWwoeCk7Ci0gICAgICAgICAgICBtX2tlcm5lbFVuaXRMZW5ndGhZLT5z
ZXRCYXNlVmFsSW50ZXJuYWwoeSk7CisgICAgICAgIGlmIChhdXRvIHJlc3VsdCA9IHBhcnNlTnVt
YmVyT3B0aW9uYWxOdW1iZXIodmFsdWUpKSB7CisgICAgICAgICAgICBtX2tlcm5lbFVuaXRMZW5n
dGhYLT5zZXRCYXNlVmFsSW50ZXJuYWwocmVzdWx0LT5maXJzdCk7CisgICAgICAgICAgICBtX2tl
cm5lbFVuaXRMZW5ndGhZLT5zZXRCYXNlVmFsSW50ZXJuYWwocmVzdWx0LT5zZWNvbmQpOwogICAg
ICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVEcm9wU2hhZG93RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuY3BwCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTYxLDEwICs2MSw5IEBAIHZvaWQgU1ZHRkVEcm9wU2hhZG93RWxlbWVudDo6c2V0U3RkRGV2
aWEKIHZvaWQgU1ZHRkVEcm9wU2hhZG93RWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVh
bGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbVN0cmluZyYgdmFsdWUpCiB7CiAgICAgaWYgKG5h
bWUgPT0gU1ZHTmFtZXM6OnN0ZERldmlhdGlvbkF0dHIpIHsKLSAgICAgICAgZmxvYXQgeCwgeTsK
LSAgICAgICAgaWYgKHBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIodmFsdWUsIHgsIHkpKSB7Ci0g
ICAgICAgICAgICBtX3N0ZERldmlhdGlvblgtPnNldEJhc2VWYWxJbnRlcm5hbCh4KTsKLSAgICAg
ICAgICAgIG1fc3RkRGV2aWF0aW9uWS0+c2V0QmFzZVZhbEludGVybmFsKHkpOworICAgICAgICBp
ZiAoYXV0byByZXN1bHQgPSBwYXJzZU51bWJlck9wdGlvbmFsTnVtYmVyKHZhbHVlKSkgeworICAg
ICAgICAgICAgbV9zdGREZXZpYXRpb25YLT5zZXRCYXNlVmFsSW50ZXJuYWwocmVzdWx0LT5maXJz
dCk7CisgICAgICAgICAgICBtX3N0ZERldmlhdGlvblktPnNldEJhc2VWYWxJbnRlcm5hbChyZXN1
bHQtPnNlY29uZCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwCShyZXZp
c2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsMTAgKzYwLDkgQEAgdm9pZCBTVkdGRUdhdXNz
aWFuQmx1ckVsZW1lbnQ6OnNldFN0ZERldgogdm9pZCBTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6
OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21TdHJp
bmcmIHZhbHVlKQogewogICAgIGlmIChuYW1lID09IFNWR05hbWVzOjpzdGREZXZpYXRpb25BdHRy
KSB7Ci0gICAgICAgIGZsb2F0IHgsIHk7Ci0gICAgICAgIGlmIChwYXJzZU51bWJlck9wdGlvbmFs
TnVtYmVyKHZhbHVlLCB4LCB5KSkgewotICAgICAgICAgICAgbV9zdGREZXZpYXRpb25YLT5zZXRC
YXNlVmFsSW50ZXJuYWwoeCk7Ci0gICAgICAgICAgICBtX3N0ZERldmlhdGlvblktPnNldEJhc2VW
YWxJbnRlcm5hbCh5KTsKKyAgICAgICAgaWYgKGF1dG8gcmVzdWx0ID0gcGFyc2VOdW1iZXJPcHRp
b25hbE51bWJlcih2YWx1ZSkpIHsKKyAgICAgICAgICAgIG1fc3RkRGV2aWF0aW9uWC0+c2V0QmFz
ZVZhbEludGVybmFsKHJlc3VsdC0+Zmlyc3QpOworICAgICAgICAgICAgbV9zdGREZXZpYXRpb25Z
LT5zZXRCYXNlVmFsSW50ZXJuYWwocmVzdWx0LT5zZWNvbmQpOwogICAgICAgICB9CiAgICAgICAg
IHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDI2MzE3NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdl
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNyw5ICsxMTcsNyBAQCB2b2lkIFNWR0ZF
SW1hZ2VFbGVtZW50OjpidWlsZFBlbmRpbmdSZXNvCiB2b2lkIFNWR0ZFSW1hZ2VFbGVtZW50Ojpw
YXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9tU3RyaW5n
JiB2YWx1ZSkKIHsKICAgICBpZiAobmFtZSA9PSBTVkdOYW1lczo6cHJlc2VydmVBc3BlY3RSYXRp
b0F0dHIpIHsKLSAgICAgICAgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlIHByZXNlcnZlQXNw
ZWN0UmF0aW87Ci0gICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW8ucGFyc2UodmFsdWUpOwotICAg
ICAgICBtX3ByZXNlcnZlQXNwZWN0UmF0aW8tPnNldEJhc2VWYWxJbnRlcm5hbChwcmVzZXJ2ZUFz
cGVjdFJhdGlvKTsKKyAgICAgICAgbV9wcmVzZXJ2ZUFzcGVjdFJhdGlvLT5zZXRCYXNlVmFsSW50
ZXJuYWwoU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlIHsgdmFsdWUgfSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9s
b2d5RWxlbWVudC5jcHAJKHJldmlzaW9uIDI2MzE3NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRU1vcnBob2xvZ3lFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsMTAgKzcxLDkg
QEAgdm9pZCBTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpwYXJzZUF0dHJpYgogICAgIH0KIAogICAg
IGlmIChuYW1lID09IFNWR05hbWVzOjpyYWRpdXNBdHRyKSB7Ci0gICAgICAgIGZsb2F0IHgsIHk7
Ci0gICAgICAgIGlmIChwYXJzZU51bWJlck9wdGlvbmFsTnVtYmVyKHZhbHVlLCB4LCB5KSkgewot
ICAgICAgICAgICAgbV9yYWRpdXNYLT5zZXRCYXNlVmFsSW50ZXJuYWwoeCk7Ci0gICAgICAgICAg
ICBtX3JhZGl1c1ktPnNldEJhc2VWYWxJbnRlcm5hbCh5KTsKKyAgICAgICAgaWYgKGF1dG8gcmVz
dWx0ID0gcGFyc2VOdW1iZXJPcHRpb25hbE51bWJlcih2YWx1ZSkpIHsKKyAgICAgICAgICAgIG1f
cmFkaXVzWC0+c2V0QmFzZVZhbEludGVybmFsKHJlc3VsdC0+Zmlyc3QpOworICAgICAgICAgICAg
bV9yYWRpdXNZLT5zZXRCYXNlVmFsSW50ZXJuYWwocmVzdWx0LT5zZWNvbmQpOwogICAgICAgICB9
CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVT
cGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuY3BwCShyZXZpc2lvbiAyNjMxNzYpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTc4LDEwICs3OCw5IEBAIHZvaWQgU1ZHRkVTcGVjdWxhckxpZ2h0aW5n
RWxlbWVudDo6cGFyc2UKICAgICB9CiAKICAgICBpZiAobmFtZSA9PSBTVkdOYW1lczo6a2VybmVs
VW5pdExlbmd0aEF0dHIpIHsKLSAgICAgICAgZmxvYXQgeCwgeTsKLSAgICAgICAgaWYgKHBhcnNl
TnVtYmVyT3B0aW9uYWxOdW1iZXIodmFsdWUsIHgsIHkpKSB7Ci0gICAgICAgICAgICBtX2tlcm5l
bFVuaXRMZW5ndGhYLT5zZXRCYXNlVmFsSW50ZXJuYWwoeCk7Ci0gICAgICAgICAgICBtX2tlcm5l
bFVuaXRMZW5ndGhZLT5zZXRCYXNlVmFsSW50ZXJuYWwoeSk7CisgICAgICAgIGlmIChhdXRvIHJl
c3VsdCA9IHBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIodmFsdWUpKSB7CisgICAgICAgICAgICBt
X2tlcm5lbFVuaXRMZW5ndGhYLT5zZXRCYXNlVmFsSW50ZXJuYWwocmVzdWx0LT5maXJzdCk7Cisg
ICAgICAgICAgICBtX2tlcm5lbFVuaXRMZW5ndGhZLT5zZXRCYXNlVmFsSW50ZXJuYWwocmVzdWx0
LT5zZWNvbmQpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAy
NjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY3LDEwICs2Nyw5IEBAIHZvaWQgU1ZHRkVUdXJidWxlbmNlRWxl
bWVudDo6cGFyc2VBdHRyaWIKICAgICB9CiAKICAgICBpZiAobmFtZSA9PSBTVkdOYW1lczo6YmFz
ZUZyZXF1ZW5jeUF0dHIpIHsKLSAgICAgICAgZmxvYXQgeCwgeTsKLSAgICAgICAgaWYgKHBhcnNl
TnVtYmVyT3B0aW9uYWxOdW1iZXIodmFsdWUsIHgsIHkpKSB7Ci0gICAgICAgICAgICBtX2Jhc2VG
cmVxdWVuY3lYLT5zZXRCYXNlVmFsSW50ZXJuYWwoeCk7Ci0gICAgICAgICAgICBtX2Jhc2VGcmVx
dWVuY3lZLT5zZXRCYXNlVmFsSW50ZXJuYWwoeSk7CisgICAgICAgIGlmIChhdXRvIHJlc3VsdCA9
IHBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIodmFsdWUpKSB7CisgICAgICAgICAgICBtX2Jhc2VG
cmVxdWVuY3lYLT5zZXRCYXNlVmFsSW50ZXJuYWwocmVzdWx0LT5maXJzdCk7CisgICAgICAgICAg
ICBtX2Jhc2VGcmVxdWVuY3lZLT5zZXRCYXNlVmFsSW50ZXJuYWwocmVzdWx0LT5zZWNvbmQpOwog
ICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRml0VG9WaWV3Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRml0VG9WaWV3Qm94LmNwcAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZpdFRvVmlld0JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDczICs2Niw3MSBA
QCB2b2lkIFNWR0ZpdFRvVmlld0JveDo6cmVzZXQoKQogYm9vbCBTVkdGaXRUb1ZpZXdCb3g6OnBh
cnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21TdHJpbmcm
IHZhbHVlKQogewogICAgIGlmIChuYW1lID09IFNWR05hbWVzOjp2aWV3Qm94QXR0cikgewotICAg
ICAgICBGbG9hdFJlY3Qgdmlld0JveDsKLSAgICAgICAgaWYgKCF2YWx1ZS5pc051bGwoKSAmJiBw
YXJzZVZpZXdCb3godmFsdWUsIHZpZXdCb3gpKQotICAgICAgICAgICAgc2V0Vmlld0JveCh2aWV3
Qm94KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVzZXRWaWV3Qm94KCk7CisgICAgICAg
IGlmICghdmFsdWUuaXNOdWxsKCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIHJlc3VsdCA9IHBh
cnNlVmlld0JveCh2YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICBzZXRWaWV3Qm94KFdURk1vdmUo
KnJlc3VsdCkpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIHJlc2V0Vmlld0JveCgpOwogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CiAKICAgICBpZiAobmFtZSA9PSBTVkdOYW1lczo6cHJlc2VydmVBc3BlY3RSYXRpb0F0
dHIpIHsKLSAgICAgICAgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlIHByZXNlcnZlQXNwZWN0
UmF0aW87Ci0gICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW8ucGFyc2UodmFsdWUpOwotICAgICAg
ICBzZXRQcmVzZXJ2ZUFzcGVjdFJhdGlvKHByZXNlcnZlQXNwZWN0UmF0aW8pOworICAgICAgICBz
ZXRQcmVzZXJ2ZUFzcGVjdFJhdGlvKFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSB7IHZhbHVl
IH0pOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLWJvb2wgU1ZHRml0VG9WaWV3Qm94OjpwYXJzZVZpZXdCb3goY29uc3QgQXRvbVN0cmluZyYg
dmFsdWUsIEZsb2F0UmVjdCYgdmlld0JveCkKK09wdGlvbmFsPEZsb2F0UmVjdD4gU1ZHRml0VG9W
aWV3Qm94OjpwYXJzZVZpZXdCb3goY29uc3QgQXRvbVN0cmluZyYgdmFsdWUpCiB7CiAgICAgYXV0
byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KHZhbHVlKS51cGNvbnZlcnRlZENo
YXJhY3RlcnMoKTsKICAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycyA9IHVwY29udmVydGVkQ2hh
cmFjdGVyczsKLSAgICByZXR1cm4gcGFyc2VWaWV3Qm94KGNoYXJhY3RlcnMsIGNoYXJhY3RlcnMg
KyB2YWx1ZS5sZW5ndGgoKSwgdmlld0JveCk7CisgICAgcmV0dXJuIHBhcnNlVmlld0JveChjaGFy
YWN0ZXJzLCBjaGFyYWN0ZXJzICsgdmFsdWUubGVuZ3RoKCkpOwogfQogCi1ib29sIFNWR0ZpdFRv
Vmlld0JveDo6cGFyc2VWaWV3Qm94KGNvbnN0IFVDaGFyKiYgYywgY29uc3QgVUNoYXIqIGVuZCwg
RmxvYXRSZWN0JiB2aWV3Qm94LCBib29sIHZhbGlkYXRlKQorT3B0aW9uYWw8RmxvYXRSZWN0PiBT
VkdGaXRUb1ZpZXdCb3g6OnBhcnNlVmlld0JveChjb25zdCBVQ2hhciomIGMsIGNvbnN0IFVDaGFy
KiBlbmQsIGJvb2wgdmFsaWRhdGUpCiB7Ci0gICAgU3RyaW5nIHN0cihjLCBlbmQgLSBjKTsKKyAg
ICBTdHJpbmdWaWV3IHN0cihjLCBlbmQgLSBjKTsKIAogICAgIHNraXBPcHRpb25hbFNWR1NwYWNl
cyhjLCBlbmQpOwogCi0gICAgZmxvYXQgeCA9IDAuMGY7Ci0gICAgZmxvYXQgeSA9IDAuMGY7Ci0g
ICAgZmxvYXQgd2lkdGggPSAwLjBmOwotICAgIGZsb2F0IGhlaWdodCA9IDAuMGY7Ci0gICAgYm9v
bCB2YWxpZCA9IHBhcnNlTnVtYmVyKGMsIGVuZCwgeCkgJiYgcGFyc2VOdW1iZXIoYywgZW5kLCB5
KSAmJiBwYXJzZU51bWJlcihjLCBlbmQsIHdpZHRoKSAmJiBwYXJzZU51bWJlcihjLCBlbmQsIGhl
aWdodCwgZmFsc2UpOworICAgIGF1dG8geCA9IHBhcnNlTnVtYmVyKGMsIGVuZCk7CisgICAgYXV0
byB5ID0gcGFyc2VOdW1iZXIoYywgZW5kKTsKKyAgICBhdXRvIHdpZHRoID0gcGFyc2VOdW1iZXIo
YywgZW5kKTsKKyAgICBhdXRvIGhlaWdodCA9IHBhcnNlTnVtYmVyKGMsIGVuZCwgU3VmZml4U2tp
cHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsKIAogICAgIGlmICh2YWxpZGF0ZSkgewogICAgICAgICBE
b2N1bWVudCYgZG9jdW1lbnQgPSBtX3ZpZXdCb3gtPmNvbnRleHRFbGVtZW50KCktPmRvY3VtZW50
KCk7CiAKLSAgICAgICAgaWYgKCF2YWxpZCkgewotICAgICAgICAgICAgZG9jdW1lbnQuYWNjZXNz
U1ZHRXh0ZW5zaW9ucygpLnJlcG9ydFdhcm5pbmcoIlByb2JsZW0gcGFyc2luZyB2aWV3Qm94PVwi
IiArIHN0ciArICJcIiIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAo
IXggfHwgIXkgfHwgIXdpZHRoIHx8ICFoZWlnaHQpIHsKKyAgICAgICAgICAgIGRvY3VtZW50LmFj
Y2Vzc1NWR0V4dGVuc2lvbnMoKS5yZXBvcnRXYXJuaW5nKG1ha2VTdHJpbmcoIlByb2JsZW0gcGFy
c2luZyB2aWV3Qm94PVwiIiwgc3RyLCAiXCIiKSk7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogICAgICAgICB9CiAKICAgICAgICAgLy8gQ2hlY2sgdGhhdCB3aWR0aCBpcyBwb3Np
dGl2ZS4KLSAgICAgICAgaWYgKHdpZHRoIDwgMC4wKSB7CisgICAgICAgIGlmICgqd2lkdGggPCAw
LjApIHsKICAgICAgICAgICAgIGRvY3VtZW50LmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5yZXBvcnRF
cnJvcigiQSBuZWdhdGl2ZSB2YWx1ZSBmb3IgVmlld0JveCB3aWR0aCBpcyBub3QgYWxsb3dlZCIp
OwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKICAgICAgICAgfQogCiAgICAgICAgIC8vIENoZWNrIHRoYXQgaGVpZ2h0IGlzIHBvc2l0
aXZlLgotICAgICAgICBpZiAoaGVpZ2h0IDwgMC4wKSB7CisgICAgICAgIGlmICgqaGVpZ2h0IDwg
MC4wKSB7CiAgICAgICAgICAgICBkb2N1bWVudC5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVwb3J0
RXJyb3IoIkEgbmVnYXRpdmUgdmFsdWUgZm9yIFZpZXdCb3ggaGVpZ2h0IGlzIG5vdCBhbGxvd2Vk
Iik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogICAgICAgICB9CiAKICAgICAgICAgLy8gTm90aGluZyBzaG91bGQgY29tZSBhZnRl
ciB0aGUgbGFzdCwgZm91cnRoIG51bWJlci4KICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2Vz
KGMsIGVuZCk7CiAgICAgICAgIGlmIChjIDwgZW5kKSB7Ci0gICAgICAgICAgICBkb2N1bWVudC5h
Y2Nlc3NTVkdFeHRlbnNpb25zKCkucmVwb3J0V2FybmluZygiUHJvYmxlbSBwYXJzaW5nIHZpZXdC
b3g9XCIiICsgc3RyICsgIlwiIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICBkb2N1bWVudC5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVwb3J0V2FybmluZyhtYWtlU3Ry
aW5nKCJQcm9ibGVtIHBhcnNpbmcgdmlld0JveD1cIiIsIHN0ciwgIlwiIikpOworICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgfQogICAgIH0KIAotICAgIHZpZXdCb3gg
PSB7IHgsIHksIHdpZHRoLCBoZWlnaHQgfTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4g
RmxvYXRSZWN0IHsgeC52YWx1ZU9yKDApLCB5LnZhbHVlT3IoMCksIHdpZHRoLnZhbHVlT3IoMCks
IGhlaWdodC52YWx1ZU9yKDApIH07CiB9CiAKIEFmZmluZVRyYW5zZm9ybSBTVkdGaXRUb1ZpZXdC
b3g6OnZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0oY29uc3QgRmxvYXRSZWN0JiB2aWV3Qm94UmVjdCwg
Y29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJiBwcmVzZXJ2ZUFzcGVjdFJhdGlvLCBm
bG9hdCB2aWV3V2lkdGgsIGZsb2F0IHZpZXdIZWlnaHQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRml0VG9WaWV3Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZpdFRvVmlld0JveC5oCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRml0VG9WaWV3Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDggKzY1LDggQEAgcHJvdGVj
dGVkOgogCiAgICAgdm9pZCByZXNldCgpOwogICAgIGJvb2wgcGFyc2VBdHRyaWJ1dGUoY29uc3Qg
UXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21TdHJpbmcmKTsKLSAgICBib29sIHBhcnNlVmlld0Jv
eChjb25zdCBBdG9tU3RyaW5nJiB2YWx1ZSwgRmxvYXRSZWN0JiB2aWV3Qm94KTsKLSAgICBib29s
IHBhcnNlVmlld0JveChjb25zdCBVQ2hhciomIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kLCBGbG9h
dFJlY3QmIHZpZXdCb3gsIGJvb2wgdmFsaWRhdGUgPSB0cnVlKTsKKyAgICBPcHRpb25hbDxGbG9h
dFJlY3Q+IHBhcnNlVmlld0JveChjb25zdCBBdG9tU3RyaW5nJiB2YWx1ZSk7CisgICAgT3B0aW9u
YWw8RmxvYXRSZWN0PiBwYXJzZVZpZXdCb3goY29uc3QgVUNoYXIqJiBzdGFydCwgY29uc3QgVUNo
YXIqIGVuZCwgYm9vbCB2YWxpZGF0ZSA9IHRydWUpOwogCiBwcml2YXRlOgogICAgIFJlZjxTVkdB
bmltYXRlZFJlY3Q+IG1fdmlld0JveDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHbHlw
aFJlZkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHbHlw
aFJlZkVsZW1lbnQuY3BwCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHR2x5cGhSZWZFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsMTAgKzU4LDcgQEAg
Ym9vbCBTVkdHbHlwaFJlZkVsZW1lbnQ6Omhhc1ZhbGlkR2x5cGhFbAogCiBzdGF0aWMgZmxvYXQg
cGFyc2VGbG9hdChjb25zdCBBdG9tU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBmbG9hdCByZXN1bHQ7
Ci0gICAgaWYgKCFwYXJzZU51bWJlckZyb21TdHJpbmcodmFsdWUsIHJlc3VsdCkpCi0gICAgICAg
IHJldHVybiAwOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIHBhcnNlTnVtYmVyKHZh
bHVlKS52YWx1ZU9yKDApOwogfQogCiB2b2lkIFNWR0dseXBoUmVmRWxlbWVudDo6cGFyc2VBdHRy
aWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbVN0cmluZyYgdmFsdWUp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHSEtlcm5FbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHSEtlcm5FbGVtZW50LmNwcAkocmV2aXNpb24gMjYz
MTc2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0hLZXJuRWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ0LDI0ICs0NCw0NCBAQCBSZWY8U1ZHSEtlcm5FbGVtZW50PiBTVkdIS2VybkVs
ZW1lbnQ6OmNyCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZHSEtlcm5FbGVtZW50KHRhZ05h
bWUsIGRvY3VtZW50KSk7CiB9CiAKLWJvb2wgU1ZHSEtlcm5FbGVtZW50OjpidWlsZEhvcml6b250
YWxLZXJuaW5nUGFpcihTVkdLZXJuaW5nUGFpciYga2VybmluZ1BhaXIpIGNvbnN0CitPcHRpb25h
bDxTVkdLZXJuaW5nUGFpcj4gU1ZHSEtlcm5FbGVtZW50OjpidWlsZEhvcml6b250YWxLZXJuaW5n
UGFpcigpIGNvbnN0CiB7CisgICAgLy8gRklYTUU6IENhbiB0aGlzIGJlIHNoYXJlZCB3aXRoIFNW
R1ZLZXJuRWxlbWVudDo6YnVpbGRWZXJ0aWNhbEtlcm5pbmdQYWlyCisKICAgICBhdXRvJiB1MSA9
IGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oU1ZHTmFtZXM6OnUxQXR0cik7CiAgICAg
YXV0byYgZzEgPSBhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFNWR05hbWVzOjpnMUF0
dHIpOwogICAgIGF1dG8mIHUyID0gYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihTVkdO
YW1lczo6dTJBdHRyKTsKICAgICBhdXRvJiBnMiA9IGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6
YXRpb24oU1ZHTmFtZXM6OmcyQXR0cik7CiAgICAgaWYgKCh1MS5pc0VtcHR5KCkgJiYgZzEuaXNF
bXB0eSgpKSB8fCAodTIuaXNFbXB0eSgpICYmIGcyLmlzRW1wdHkoKSkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIGF1dG8gZ2x5cGhO
YW1lMSA9IHBhcnNlR2x5cGhOYW1lKGcxKTsKKyAgICBpZiAoIWdseXBoTmFtZTEpCisgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgYXV0byBnbHlwaE5hbWUyID0gcGFyc2VHbHlwaE5h
bWUoZzIpOworICAgIGlmICghZ2x5cGhOYW1lMikKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKyAgICBhdXRvIHVuaWNvZGVTdHJpbmcxID0gcGFyc2VLZXJuaW5nVW5pY29kZVN0cmluZyh1
MSk7CisgICAgaWYgKCF1bmljb2RlU3RyaW5nMSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKyAgICBhdXRvIHVuaWNvZGVTdHJpbmcyID0gcGFyc2VLZXJuaW5nVW5pY29kZVN0cmluZyh1
Mik7CisgICAgaWYgKCF1bmljb2RlU3RyaW5nMikKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKworICAgIGJvb2wgb2sgPSBmYWxzZTsKKyAgICBhdXRvIGtlcm5pbmcgPSBhdHRyaWJ1dGVX
aXRob3V0U3luY2hyb25pemF0aW9uKFNWR05hbWVzOjprQXR0cikuc3RyaW5nKCkudG9GbG9hdCgm
b2spOworICAgIGlmICghb2spCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBp
ZiAocGFyc2VHbHlwaE5hbWUoZzEsIGtlcm5pbmdQYWlyLmdseXBoTmFtZTEpCi0gICAgICAgICYm
IHBhcnNlR2x5cGhOYW1lKGcyLCBrZXJuaW5nUGFpci5nbHlwaE5hbWUyKQotICAgICAgICAmJiBw
YXJzZUtlcm5pbmdVbmljb2RlU3RyaW5nKHUxLCBrZXJuaW5nUGFpci51bmljb2RlUmFuZ2UxLCBr
ZXJuaW5nUGFpci51bmljb2RlTmFtZTEpCi0gICAgICAgICYmIHBhcnNlS2VybmluZ1VuaWNvZGVT
dHJpbmcodTIsIGtlcm5pbmdQYWlyLnVuaWNvZGVSYW5nZTIsIGtlcm5pbmdQYWlyLnVuaWNvZGVO
YW1lMikpIHsKLSAgICAgICAgYm9vbCBvayA9IGZhbHNlOwotICAgICAgICBrZXJuaW5nUGFpci5r
ZXJuaW5nID0gYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihTVkdOYW1lczo6a0F0dHIp
LnN0cmluZygpLnRvRmxvYXQoJm9rKTsKLSAgICAgICAgcmV0dXJuIG9rOwotICAgIH0KLSAgICBy
ZXR1cm4gZmFsc2U7CisgICAgU1ZHS2VybmluZ1BhaXIga2VybmluZ1BhaXI7CisgICAga2Vybmlu
Z1BhaXIuZ2x5cGhOYW1lMSA9IFdURk1vdmUoKmdseXBoTmFtZTEpOworICAgIGtlcm5pbmdQYWly
LmdseXBoTmFtZTIgPSBXVEZNb3ZlKCpnbHlwaE5hbWUyKTsKKyAgICBrZXJuaW5nUGFpci51bmlj
b2RlUmFuZ2UxID0gV1RGTW92ZSh1bmljb2RlU3RyaW5nMS0+Zmlyc3QpOworICAgIGtlcm5pbmdQ
YWlyLnVuaWNvZGVOYW1lMSA9IFdURk1vdmUodW5pY29kZVN0cmluZzEtPnNlY29uZCk7CisgICAg
a2VybmluZ1BhaXIudW5pY29kZVJhbmdlMiA9IFdURk1vdmUodW5pY29kZVN0cmluZzItPmZpcnN0
KTsKKyAgICBrZXJuaW5nUGFpci51bmljb2RlTmFtZTIgPSBXVEZNb3ZlKHVuaWNvZGVTdHJpbmcy
LT5zZWNvbmQpOworICAgIGtlcm5pbmdQYWlyLmtlcm5pbmcgPSBrZXJuaW5nOworICAgIHJldHVy
biBrZXJuaW5nUGFpcjsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0hLZXJu
RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdIS2VybkVsZW1l
bnQuaAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0hLZXJuRWxl
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBAIGNsYXNzIFNWR0hLZXJuRWxl
bWVudCBmaW5hbCA6IHB1YmxpYyBTVkcKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPFNWR0hLZXJu
RWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCYpOwogCi0gICAg
Ym9vbCBidWlsZEhvcml6b250YWxLZXJuaW5nUGFpcihTVkdLZXJuaW5nUGFpciYga2VybmluZ1Bh
aXIpIGNvbnN0OworICAgIE9wdGlvbmFsPFNWR0tlcm5pbmdQYWlyPiBidWlsZEhvcml6b250YWxL
ZXJuaW5nUGFpcigpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIFNWR0hLZXJuRWxlbWVudChjb25z
dCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdJbWFnZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdJ
bWFnZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHSW1hZ2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksOSArNjksNyBAQCBib29s
IFNWR0ltYWdlRWxlbWVudDo6aGFzU2luZ2xlU2VjdXJpdHlPCiB2b2lkIFNWR0ltYWdlRWxlbWVu
dDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbVN0
cmluZyYgdmFsdWUpCiB7CiAgICAgaWYgKG5hbWUgPT0gU1ZHTmFtZXM6OnByZXNlcnZlQXNwZWN0
UmF0aW9BdHRyKSB7Ci0gICAgICAgIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSBwcmVzZXJ2
ZUFzcGVjdFJhdGlvOwotICAgICAgICBwcmVzZXJ2ZUFzcGVjdFJhdGlvLnBhcnNlKHZhbHVlKTsK
LSAgICAgICAgbV9wcmVzZXJ2ZUFzcGVjdFJhdGlvLT5zZXRCYXNlVmFsSW50ZXJuYWwocHJlc2Vy
dmVBc3BlY3RSYXRpbyk7CisgICAgICAgIG1fcHJlc2VydmVBc3BlY3RSYXRpby0+c2V0QmFzZVZh
bEludGVybmFsKFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSB7IHZhbHVlIH0pOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoVmFs
dWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMZW5ndGhWYWx1ZS5j
cHAJKHJldmlzaW9uIDI2MzE3NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMZW5ndGhWYWx1
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5MSwxMiArMjkxLDEyIEBAIEV4Y2VwdGlvbk9yPHZv
aWQ+IFNWR0xlbmd0aFZhbHVlOjpzZXRWYWwKICAgICBpZiAoc3RyaW5nLmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGZsb2F0IGNvbnZlcnRlZE51bWJlciA9IDA7CiAgICAg
YXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KHN0cmluZykudXBjb252ZXJ0
ZWRDaGFyYWN0ZXJzKCk7CiAgICAgY29uc3QgVUNoYXIqIHB0ciA9IHVwY29udmVydGVkQ2hhcmFj
dGVyczsKICAgICBjb25zdCBVQ2hhciogZW5kID0gcHRyICsgc3RyaW5nLmxlbmd0aCgpOwogCi0g
ICAgaWYgKCFwYXJzZU51bWJlcihwdHIsIGVuZCwgY29udmVydGVkTnVtYmVyLCBmYWxzZSkpCisg
ICAgYXV0byBjb252ZXJ0ZWROdW1iZXIgPSBwYXJzZU51bWJlcihwdHIsIGVuZCwgU3VmZml4U2tp
cHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsKKyAgICBpZiAoIWNvbnZlcnRlZE51bWJlcikKICAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiAKICAgICBhdXRvIGxlbmd0aFR5
cGUgPSBwYXJzZUxlbmd0aFR5cGUocHRyLCBlbmQpOwpAQCAtMzA0LDcgKzMwNCw3IEBAIEV4Y2Vw
dGlvbk9yPHZvaWQ+IFNWR0xlbmd0aFZhbHVlOjpzZXRWYWwKICAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IFN5bnRheEVycm9yIH07CiAKICAgICBtX2xlbmd0aFR5cGUgPSBsZW5ndGhUeXBlOwot
ICAgIG1fdmFsdWVJblNwZWNpZmllZFVuaXRzID0gY29udmVydGVkTnVtYmVyOworICAgIG1fdmFs
dWVJblNwZWNpZmllZFVuaXRzID0gKmNvbnZlcnRlZE51bWJlcjsKICAgICByZXR1cm4geyB9Owog
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTnVtYmVyTGlzdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdOdW1iZXJMaXN0LmgJKHJldmlzaW9uIDI2MzE3NikK
KysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdOdW1iZXJMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTU0LDcgKzU0LDYgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgY2xlYXJJdGVtcygpOwogCi0g
ICAgICAgIGZsb2F0IG51bWJlciA9IDA7CiAgICAgICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0
ZXJzID0gU3RyaW5nVmlldyh2YWx1ZSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7CiAgICAgICAg
IGNvbnN0IFVDaGFyKiBwdHIgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7CiAgICAgICAgIGNvbnN0
IFVDaGFyKiBlbmQgPSBwdHIgKyB2YWx1ZS5sZW5ndGgoKTsKQEAgLTYyLDkgKzYxLDEwIEBAIHB1
YmxpYzoKICAgICAgICAgLy8gVGhlIHNwZWMgKHNlY3Rpb24gNC4xKSBzdHJhbmdlbHkgZG9lc24n
dCBhbGxvdyBsZWFkaW5nIHdoaXRlc3BhY2UuCiAgICAgICAgIC8vIFdlIG1pZ2h0IGNob29zZSB0
byB2aW9sYXRlIHRoYXQgaW50ZW50aW9uYWxseS4KICAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCkg
ewotICAgICAgICAgICAgaWYgKCFwYXJzZU51bWJlcihwdHIsIGVuZCwgbnVtYmVyKSkKKyAgICAg
ICAgICAgIGF1dG8gbnVtYmVyID0gcGFyc2VOdW1iZXIocHRyLCBlbmQpOworICAgICAgICAgICAg
aWYgKCFudW1iZXIpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBhcHBlbmQo
U1ZHTnVtYmVyOjpjcmVhdGUobnVtYmVyKSk7CisgICAgICAgICAgICBhcHBlbmQoU1ZHTnVtYmVy
OjpjcmVhdGUoKm51bWJlcikpOwogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIHB0ciA9PSBl
bmQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmNwcAkocmV2
aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDE5ICs0MCwxOCBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUg
RmxvYXRUeXBlPiBzdGF0aWMgaW5sCiAvLyBXZSB1c2UgdGhpcyBnZW5lcmljIHBhcnNlTnVtYmVy
IGZ1bmN0aW9uIHRvIGFsbG93IHRoZSBQYXRoIHBhcnNpbmcgY29kZSB0byB3b3JrIAogLy8gYXQg
YSBoaWdoZXIgcHJlY2lzaW9uIGludGVybmFsbHksIHdpdGhvdXQgYW55IHVubmVjZXNzYXJ5IHJ1
bnRpbWUgY29zdCBvciBjb2RlCiAvLyBjb21wbGV4aXR5LgotdGVtcGxhdGUgPHR5cGVuYW1lIENo
YXJhY3RlclR5cGUsIHR5cGVuYW1lIEZsb2F0VHlwZT4gc3RhdGljIGJvb2wgZ2VuZXJpY1BhcnNl
TnVtYmVyKGNvbnN0IENoYXJhY3RlclR5cGUqJiBwdHIsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVu
ZCwgRmxvYXRUeXBlJiBudW1iZXIsIGJvb2wgc2tpcCkKKy8vIEZJWE1FOiBDYW4gdGhpcyBiZSBz
aGFyZWQvcmVwbGFjZWQgd2l0aCBudW1iZXIgcGFyc2luZyBpbiBXVEY/Cit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5hbWUgRmxvYXRUeXBlID0gZmxvYXQ+IHN0YXRpYyBP
cHRpb25hbDxGbG9hdFR5cGU+IGdlbmVyaWNQYXJzZU51bWJlcihjb25zdCBDaGFyYWN0ZXJUeXBl
KiYgcHRyLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQsIFN1ZmZpeFNraXBwaW5nUG9saWN5IHNr
aXAgPSBTdWZmaXhTa2lwcGluZ1BvbGljeTo6U2tpcCkKIHsKLSAgICBGbG9hdFR5cGUgaW50ZWdl
ciwgZGVjaW1hbCwgZnJhYywgZXhwb25lbnQ7Ci0gICAgaW50IHNpZ24sIGV4cHNpZ247CisgICAg
RmxvYXRUeXBlIG51bWJlciA9IDA7CisgICAgRmxvYXRUeXBlIGludGVnZXIgPSAwOworICAgIEZs
b2F0VHlwZSBkZWNpbWFsID0gMDsKKyAgICBGbG9hdFR5cGUgZnJhYyA9IDE7CisgICAgRmxvYXRU
eXBlIGV4cG9uZW50ID0gMDsKKyAgICBpbnQgc2lnbiA9IDE7CisgICAgaW50IGV4cHNpZ24gPSAx
OwogICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIHN0YXJ0ID0gcHRyOwogCi0gICAgZXhwb25lbnQg
PSAwOwotICAgIGludGVnZXIgPSAwOwotICAgIGZyYWMgPSAxOwotICAgIGRlY2ltYWwgPSAwOwot
ICAgIHNpZ24gPSAxOwotICAgIGV4cHNpZ24gPSAxOwotCiAgICAgLy8gcmVhZCB0aGUgc2lnbgog
ICAgIGlmIChwdHIgPCBlbmQgJiYgKnB0ciA9PSAnKycpCiAgICAgICAgIHB0cisrOwpAQCAtNjIs
NyArNjEsNyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5hCiAgICAg
fSAKICAgICAKICAgICBpZiAocHRyID09IGVuZCB8fCAoIWlzQVNDSUlEaWdpdCgqcHRyKSAmJiAq
cHRyICE9ICcuJykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKIAogICAgIC8vIHJlYWQgdGhlIGludGVnZXIgcGFydCwgYnVpbGQgcmlnaHQtdG8t
bGVmdAogICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIHB0clN0YXJ0SW50UGFydCA9IHB0cjsKQEAg
LTc4LDcgKzc3LDcgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHR5cGVuYQog
ICAgICAgICB9CiAgICAgICAgIC8vIEJhaWwgb3V0IGVhcmx5IGlmIHRoaXMgb3ZlcmZsb3dzLgog
ICAgICAgICBpZiAoIWlzVmFsaWRSYW5nZShpbnRlZ2VyKSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQogCiAgICAgaWYg
KHB0ciA8IGVuZCAmJiAqcHRyID09ICcuJykgeyAvLyByZWFkIHRoZSBkZWNpbWFscwpAQCAtODYs
NyArODUsNyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5hCiAgICAg
ICAgIAogICAgICAgICAvLyBUaGVyZSBtdXN0IGJlIGEgbGVhc3Qgb25lIGRpZ2l0IGZvbGxvd2lu
ZyB0aGUgLgogICAgICAgICBpZiAocHRyID49IGVuZCB8fCAhaXNBU0NJSURpZ2l0KCpwdHIpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKICAgICAgICAgCiAgICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgaXNBU0NJSURpZ2l0KCpw
dHIpKQogICAgICAgICAgICAgZGVjaW1hbCArPSAoKihwdHIrKykgLSAnMCcpICogKGZyYWMgKj0g
c3RhdGljX2Nhc3Q8RmxvYXRUeXBlPigwLjEpKTsKQEAgLTEwNyw3ICsxMDYsNyBAQCB0ZW1wbGF0
ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5hCiAgICAgICAgIAogICAgICAgICAvLyBU
aGVyZSBtdXN0IGJlIGFuIGV4cG9uZW50CiAgICAgICAgIGlmIChwdHIgPj0gZW5kIHx8ICFpc0FT
Q0lJRGlnaXQoKnB0cikpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgaXNBU0NJ
SURpZ2l0KCpwdHIpKSB7CiAgICAgICAgICAgICBleHBvbmVudCAqPSBzdGF0aWNfY2FzdDxGbG9h
dFR5cGU+KDEwKTsKQEAgLTExNiw3ICsxMTUsNyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZSwgdHlwZW5hCiAgICAgICAgIH0KICAgICAgICAgLy8gTWFrZSBzdXJlIGV4cG9uZW50
IGlzIHZhbGlkLgogICAgICAgICBpZiAoIWlzVmFsaWRSYW5nZShleHBvbmVudCkgfHwgZXhwb25l
bnQgPiBzdGQ6Om51bWVyaWNfbGltaXRzPEZsb2F0VHlwZT46Om1heF9leHBvbmVudCkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAg
ICAgfQogCiAgICAgbnVtYmVyID0gaW50ZWdlciArIGRlY2ltYWw7CkBAIC0xMjcsMTQyICsxMjYs
MTQ3IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCB0eXBlbmEKIAogICAgIC8v
IERvbid0IHJldHVybiBJbmZpbml0eSgpIG9yIE5hTigpLgogICAgIGlmICghaXNWYWxpZFJhbmdl
KG51bWJlcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIAogICAgIGlmIChzdGFydCA9PSBwdHIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGlmIChza2lwKQorICAgIGlmIChza2lw
ID09IFN1ZmZpeFNraXBwaW5nUG9saWN5OjpTa2lwKQogICAgICAgICBza2lwT3B0aW9uYWxTVkdT
cGFjZXNPckRlbGltaXRlcihwdHIsIGVuZCk7CiAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdGVt
cGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1ib29sIHBhcnNlU1ZHTnVtYmVyKENoYXJh
Y3RlclR5cGUqIGJlZ2luLCBzaXplX3QgbGVuZ3RoLCBkb3VibGUmIG51bWJlcikKLXsKLSAgICBj
b25zdCBDaGFyYWN0ZXJUeXBlKiBwdHIgPSBiZWdpbjsKLSAgICBjb25zdCBDaGFyYWN0ZXJUeXBl
KiBlbmQgPSBwdHIgKyBsZW5ndGg7Ci0gICAgcmV0dXJuIGdlbmVyaWNQYXJzZU51bWJlcihwdHIs
IGVuZCwgbnVtYmVyLCBmYWxzZSk7CisgICAgcmV0dXJuIG51bWJlcjsKIH0KIAotLy8gRXhwbGlj
aXRseSBpbnN0YW50aWF0ZSB0aGUgdHdvIGZsYXZvcnMgb2YgcGFyc2VTVkdOdW1iZXIoKSB0byBz
YXRpc2Z5IGV4dGVybmFsIGNhbGxlcnMKLXRlbXBsYXRlIGJvb2wgcGFyc2VTVkdOdW1iZXIoTENo
YXIqIGJlZ2luLCBzaXplX3QgbGVuZ3RoLCBkb3VibGUmKTsKLXRlbXBsYXRlIGJvb2wgcGFyc2VT
VkdOdW1iZXIoVUNoYXIqIGJlZ2luLCBzaXplX3QgbGVuZ3RoLCBkb3VibGUmKTsKLQotYm9vbCBw
YXJzZU51bWJlcihjb25zdCBMQ2hhciomIHB0ciwgY29uc3QgTENoYXIqIGVuZCwgZmxvYXQmIG51
bWJlciwgYm9vbCBza2lwKQorT3B0aW9uYWw8ZmxvYXQ+IHBhcnNlTnVtYmVyKGNvbnN0IExDaGFy
KiYgcHRyLCBjb25zdCBMQ2hhciogZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeSBza2lwKQogewot
ICAgIHJldHVybiBnZW5lcmljUGFyc2VOdW1iZXIocHRyLCBlbmQsIG51bWJlciwgc2tpcCk7Cisg
ICAgcmV0dXJuIGdlbmVyaWNQYXJzZU51bWJlcihwdHIsIGVuZCwgc2tpcCk7CiB9CiAKLWJvb2wg
cGFyc2VOdW1iZXIoY29uc3QgVUNoYXIqJiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQsIGZsb2F0JiBu
dW1iZXIsIGJvb2wgc2tpcCkgCitPcHRpb25hbDxmbG9hdD4gcGFyc2VOdW1iZXIoY29uc3QgVUNo
YXIqJiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQsIFN1ZmZpeFNraXBwaW5nUG9saWN5IHNraXApCiB7
Ci0gICAgcmV0dXJuIGdlbmVyaWNQYXJzZU51bWJlcihwdHIsIGVuZCwgbnVtYmVyLCBza2lwKTsK
KyAgICByZXR1cm4gZ2VuZXJpY1BhcnNlTnVtYmVyKHB0ciwgZW5kLCBza2lwKTsKIH0KIAotYm9v
bCBwYXJzZU51bWJlckZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0JiBudW1i
ZXIsIGJvb2wgc2tpcCkKK09wdGlvbmFsPGZsb2F0PiBwYXJzZU51bWJlcihjb25zdCBTdHJpbmcm
IHN0cmluZywgU3VmZml4U2tpcHBpbmdQb2xpY3kgc2tpcCkKIHsKICAgICBhdXRvIHVwY29udmVy
dGVkQ2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcoc3RyaW5nKS51cGNvbnZlcnRlZENoYXJhY3RlcnMo
KTsKICAgICBjb25zdCBVQ2hhciogcHRyID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOwogICAgIGNv
bnN0IFVDaGFyKiBlbmQgPSBwdHIgKyBzdHJpbmcubGVuZ3RoKCk7Ci0gICAgcmV0dXJuIGdlbmVy
aWNQYXJzZU51bWJlcihwdHIsIGVuZCwgbnVtYmVyLCBza2lwKSAmJiBwdHIgPT0gZW5kOworICAg
IGF1dG8gcmVzdWx0ID0gZ2VuZXJpY1BhcnNlTnVtYmVyKHB0ciwgZW5kLCBza2lwKTsKKyAgICBp
ZiAocHRyICE9IGVuZCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4g
cmVzdWx0OwogfQogCiAvLyBvbmx5IHVzZWQgdG8gcGFyc2UgbGFyZ2VBcmNGbGFnIGFuZCBzd2Vl
cEZsYWcgd2hpY2ggbXVzdCBiZSBhICIwIiBvciAiMSIKIC8vIGFuZCBtaWdodCBub3QgaGF2ZSBh
bnkgd2hpdGVzcGFjZS9jb21tYSBhZnRlciBpdAotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+Ci1ib29sIGdlbmVyaWNQYXJzZUFyY0ZsYWcoY29uc3QgQ2hhcmFjdGVyVHlwZSomIHB0
ciwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kLCBib29sJiBmbGFnKQordGVtcGxhdGUgPHR5cGVu
YW1lIENoYXJhY3RlclR5cGU+IE9wdGlvbmFsPGJvb2w+IGdlbmVyaWNQYXJzZUFyY0ZsYWcoY29u
c3QgQ2hhcmFjdGVyVHlwZSomIHB0ciwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kKQogewogICAg
IGlmIChwdHIgPj0gZW5kKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CisKICAgICBjb25zdCBDaGFyYWN0ZXJUeXBlIGZsYWdDaGFyID0gKnB0cisr
OworCisgICAgYm9vbCBmbGFnOwogICAgIGlmIChmbGFnQ2hhciA9PSAnMCcpCiAgICAgICAgIGZs
YWcgPSBmYWxzZTsKICAgICBlbHNlIGlmIChmbGFnQ2hhciA9PSAnMScpCiAgICAgICAgIGZsYWcg
PSB0cnVlOwogICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAorICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworCiAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxpbWl0
ZXIocHRyLCBlbmQpOwogICAgIAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmbGFnOwog
fQogCi1ib29sIHBhcnNlQXJjRmxhZyhjb25zdCBMQ2hhciomIHB0ciwgY29uc3QgTENoYXIqIGVu
ZCwgYm9vbCYgZmxhZykKK09wdGlvbmFsPGJvb2w+IHBhcnNlQXJjRmxhZyhjb25zdCBMQ2hhciom
IHB0ciwgY29uc3QgTENoYXIqIGVuZCkKIHsKLSAgICByZXR1cm4gZ2VuZXJpY1BhcnNlQXJjRmxh
ZyhwdHIsIGVuZCwgZmxhZyk7CisgICAgcmV0dXJuIGdlbmVyaWNQYXJzZUFyY0ZsYWcocHRyLCBl
bmQpOwogfQogCi1ib29sIHBhcnNlQXJjRmxhZyhjb25zdCBVQ2hhciomIHB0ciwgY29uc3QgVUNo
YXIqIGVuZCwgYm9vbCYgZmxhZykKK09wdGlvbmFsPGJvb2w+IHBhcnNlQXJjRmxhZyhjb25zdCBV
Q2hhciomIHB0ciwgY29uc3QgVUNoYXIqIGVuZCkKIHsKLSAgICByZXR1cm4gZ2VuZXJpY1BhcnNl
QXJjRmxhZyhwdHIsIGVuZCwgZmxhZyk7CisgICAgcmV0dXJuIGdlbmVyaWNQYXJzZUFyY0ZsYWco
cHRyLCBlbmQpOwogfQogCi1ib29sIHBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIoY29uc3QgU3Ry
aW5nJiBzLCBmbG9hdCYgeCwgZmxvYXQmIHkpCitPcHRpb25hbDxzdGQ6OnBhaXI8ZmxvYXQsIGZs
b2F0Pj4gcGFyc2VOdW1iZXJPcHRpb25hbE51bWJlcihjb25zdCBTdHJpbmcmIHMpCiB7CiAgICAg
aWYgKHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiAKICAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IFN0cmluZ1Zp
ZXcocykudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7CiAgICAgY29uc3QgVUNoYXIqIGN1ciA9IHVw
Y29udmVydGVkQ2hhcmFjdGVyczsKICAgICBjb25zdCBVQ2hhciogZW5kID0gY3VyICsgcy5sZW5n
dGgoKTsKIAotICAgIGlmICghcGFyc2VOdW1iZXIoY3VyLCBlbmQsIHgpKQotICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgYXV0byB4ID0gcGFyc2VOdW1iZXIoY3VyLCBlbmQpOworICAgIGlmICgh
eCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIGlmIChjdXIgPT0gZW5kKQot
ICAgICAgICB5ID0geDsKLSAgICBlbHNlIGlmICghcGFyc2VOdW1iZXIoY3VyLCBlbmQsIHksIGZh
bHNlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3Bh
aXIoKngsICp4KTsKIAotICAgIHJldHVybiBjdXIgPT0gZW5kOworICAgIGF1dG8geSA9IHBhcnNl
TnVtYmVyKGN1ciwgZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNraXApOworICAgIGlm
ICgheSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIGlmIChjdXIgIT0gZW5k
KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgcmV0dXJuIHN0ZDo6bWFrZV9w
YWlyKCp4LCAqeSk7CiB9CiAKLWJvb2wgcGFyc2VQb2ludChjb25zdCBTdHJpbmcmIHMsIEZsb2F0
UG9pbnQmIHBvaW50KQorT3B0aW9uYWw8RmxvYXRQb2ludD4gcGFyc2VQb2ludChjb25zdCBTdHJp
bmcmIHMpCiB7CiAgICAgaWYgKHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKICAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFj
dGVycyA9IFN0cmluZ1ZpZXcocykudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7CiAgICAgY29uc3Qg
VUNoYXIqIGN1ciA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKICAgICBjb25zdCBVQ2hhciogZW5k
ID0gY3VyICsgcy5sZW5ndGgoKTsKIAogICAgIGlmICghc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGN1
ciwgZW5kKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogCi0gICAgZmxvYXQgeCA9IDA7Ci0gICAgaWYgKCFwYXJzZU51bWJlcihjdXIsIGVuZCwg
eCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGZsb2F0IHkgPSAwOwotICAgIGlmICgh
cGFyc2VOdW1iZXIoY3VyLCBlbmQsIHkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBw
b2ludCA9IEZsb2F0UG9pbnQoeCwgeSk7CisgICAgYXV0byBwb2ludCA9IHBhcnNlRmxvYXRQb2lu
dChjdXIsIGVuZCk7CisgICAgaWYgKCFwb2ludCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKIAogICAgIC8vIERpc2FsbG93IGFueXRoaW5nIGV4Y2VwdCBzcGFjZXMgYXQgdGhlIGVuZC4K
LSAgICByZXR1cm4gIXNraXBPcHRpb25hbFNWR1NwYWNlcyhjdXIsIGVuZCk7CisgICAgc2tpcE9w
dGlvbmFsU1ZHU3BhY2VzKGN1ciwgZW5kKTsKKyAgICAKKyAgICByZXR1cm4gcG9pbnQ7CiB9CiAK
LWJvb2wgcGFyc2VSZWN0KGNvbnN0IFN0cmluZyYgc3RyaW5nLCBGbG9hdFJlY3QmIHJlY3QpCitP
cHRpb25hbDxGbG9hdFJlY3Q+IHBhcnNlUmVjdChjb25zdCBTdHJpbmcmIHN0cmluZykKIHsKICAg
ICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcoc3RyaW5nKS51cGNvbnZl
cnRlZENoYXJhY3RlcnMoKTsKICAgICBjb25zdCBVQ2hhciogcHRyID0gdXBjb252ZXJ0ZWRDaGFy
YWN0ZXJzOwogICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBwdHIgKyBzdHJpbmcubGVuZ3RoKCk7Cisg
ICAgCiAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHB0ciwgZW5kKTsKICAgICAKLSAgICBmbG9h
dCB4ID0gMDsKLSAgICBmbG9hdCB5ID0gMDsKLSAgICBmbG9hdCB3aWR0aCA9IDA7Ci0gICAgZmxv
YXQgaGVpZ2h0ID0gMDsKLSAgICBib29sIHZhbGlkID0gcGFyc2VOdW1iZXIocHRyLCBlbmQsIHgp
ICYmIHBhcnNlTnVtYmVyKHB0ciwgZW5kLCB5KSAmJiBwYXJzZU51bWJlcihwdHIsIGVuZCwgd2lk
dGgpICYmIHBhcnNlTnVtYmVyKHB0ciwgZW5kLCBoZWlnaHQsIGZhbHNlKTsKLSAgICByZWN0ID0g
RmxvYXRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpOwotICAgIHJldHVybiB2YWxpZDsKKyAgICBh
dXRvIHggPSBwYXJzZU51bWJlcihwdHIsIGVuZCk7CisgICAgaWYgKCF4KQorICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OworICAgIGF1dG8geSA9IHBhcnNlTnVtYmVyKHB0ciwgZW5kKTsKKyAg
ICBpZiAoIXkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgYXV0byB3aWR0aCA9
IHBhcnNlTnVtYmVyKHB0ciwgZW5kKTsKKyAgICBpZiAoIXdpZHRoKQorICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworICAgIGF1dG8gaGVpZ2h0ID0gcGFyc2VOdW1iZXIocHRyLCBlbmQsIFN1
ZmZpeFNraXBwaW5nUG9saWN5OjpEb250U2tpcCk7CisgICAgaWYgKCFoZWlnaHQpCisgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gRmxvYXRSZWN0IHsgKngsICp5LCAq
d2lkdGgsICpoZWlnaHQgfTsKIH0KIAotYm9vbCBwYXJzZUdseXBoTmFtZShjb25zdCBTdHJpbmcm
IGlucHV0LCBIYXNoU2V0PFN0cmluZz4mIHZhbHVlcykKK09wdGlvbmFsPEhhc2hTZXQ8U3RyaW5n
Pj4gcGFyc2VHbHlwaE5hbWUoY29uc3QgU3RyaW5nJiBpbnB1dCkKIHsKICAgICAvLyBGSVhNRTog
UGFyc2luZyBlcnJvciBkZXRlY3Rpb24gaXMgbWlzc2luZy4KLSAgICB2YWx1ZXMuY2xlYXIoKTsK
KworICAgIEhhc2hTZXQ8U3RyaW5nPiB2YWx1ZXM7CiAKICAgICBhdXRvIHVwY29udmVydGVkQ2hh
cmFjdGVycyA9IFN0cmluZ1ZpZXcoaW5wdXQpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwogICAg
IGNvbnN0IFVDaGFyKiBwdHIgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7CkBAIC0yODcsMTMgKzI5
MSwxMyBAQCBib29sIHBhcnNlR2x5cGhOYW1lKGNvbnN0IFN0cmluZyYgaW5wdXQsCiAgICAgICAg
IHNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVsaW1pdGVyKHB0ciwgZW5kLCAnLCcpOwogICAgIH0K
IAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiB2YWx1ZXM7CiB9CiAKLXN0YXRpYyBib29s
IHBhcnNlVW5pY29kZVJhbmdlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5n
dGgsIFVuaWNvZGVSYW5nZSYgcmFuZ2UpCitzdGF0aWMgT3B0aW9uYWw8VW5pY29kZVJhbmdlPiBw
YXJzZVVuaWNvZGVSYW5nZShjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3Ro
KQogewogICAgIGlmIChsZW5ndGggPCAyIHx8IGNoYXJhY3RlcnNbMF0gIT0gJ1UnIHx8IGNoYXJh
Y3RlcnNbMV0gIT0gJysnKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiAgICAgCiAgICAgLy8gUGFyc2UgdGhlIHN0YXJ0aW5nIGhleCBudW1iZXIg
KG9yIGl0cyBwcmVmaXgpLgogICAgIHVuc2lnbmVkIHN0YXJ0UmFuZ2UgPSAwOwpAQCAtMzA2LDE1
ICszMTAsMTUgQEAgc3RhdGljIGJvb2wgcGFyc2VVbmljb2RlUmFuZ2UoY29uc3QgVUNoYQogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICsrc3RhcnRMZW5ndGg7CiAgICAgICAgIGlmIChzdGFy
dExlbmd0aCA+IDYpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogICAgICAgICBzdGFydFJhbmdlID0gKHN0YXJ0UmFuZ2UgPDwgNCkg
fCB0b0FTQ0lJSGV4VmFsdWUoKnB0cik7CiAgICAgICAgICsrcHRyOwogICAgIH0KLSAgICAKKwog
ICAgIC8vIEhhbmRsZSB0aGUgY2FzZSBvZiByYW5nZXMgc2VwYXJhdGVkIGJ5ICItIiBzaWduLgog
ICAgIGlmICgyICsgc3RhcnRMZW5ndGggPCBsZW5ndGggJiYgKnB0ciA9PSAnLScpIHsKICAgICAg
ICAgaWYgKCFzdGFydExlbmd0aCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIAogICAgICAgICAvLyBQYXJzZSB0aGUg
ZW5kaW5nIGhleCBudW1iZXIgKG9yIGl0cyBwcmVmaXgpLgogICAgICAgICB1bnNpZ25lZCBlbmRS
YW5nZSA9IDA7CkBAIC0zMjUsMTcgKzMyOSwxOCBAQCBzdGF0aWMgYm9vbCBwYXJzZVVuaWNvZGVS
YW5nZShjb25zdCBVQ2hhCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICArK2Vu
ZExlbmd0aDsKICAgICAgICAgICAgIGlmIChlbmRMZW5ndGggPiA2KQotICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAg
ICAgICAgICAgZW5kUmFuZ2UgPSAoZW5kUmFuZ2UgPDwgNCkgfCB0b0FTQ0lJSGV4VmFsdWUoKnB0
cik7CiAgICAgICAgICAgICArK3B0cjsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYg
KCFlbmRMZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogICAgICAgICAKKyAgICAgICAgVW5pY29kZVJhbmdlIHJhbmdlOwog
ICAgICAgICByYW5nZS5maXJzdCA9IHN0YXJ0UmFuZ2U7CiAgICAgICAgIHJhbmdlLnNlY29uZCA9
IGVuZFJhbmdlOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHJhbmdlOwog
ICAgIH0KICAgICAKICAgICAvLyBIYW5kbGUgdGhlIGNhc2Ugb2YgYSBudW1iZXIgd2l0aCBzb21l
IG9wdGlvbmFsIHRyYWlsaW5nIHF1ZXN0aW9uIG1hcmtzLgpAQCAtMzQ1LDI3ICszNTAsMzIgQEAg
c3RhdGljIGJvb2wgcGFyc2VVbmljb2RlUmFuZ2UoY29uc3QgVUNoYQogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICsrc3RhcnRMZW5ndGg7CiAgICAgICAgIGlmIChzdGFydExlbmd0aCA+IDYp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogICAgICAgICBzdGFydFJhbmdlIDw8PSA0OwogICAgICAgICBlbmRSYW5nZSA9IChlbmRS
YW5nZSA8PCA0KSB8IDB4RjsKICAgICAgICAgKytwdHI7CiAgICAgfQogICAgIAogICAgIGlmICgh
c3RhcnRMZW5ndGgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKICAgICAKKyAgICBVbmljb2RlUmFuZ2UgcmFuZ2U7CiAgICAgcmFuZ2UuZmlyc3Qg
PSBzdGFydFJhbmdlOwogICAgIHJhbmdlLnNlY29uZCA9IGVuZFJhbmdlOwotICAgIHJldHVybiB0
cnVlOworICAgIHJldHVybiByYW5nZTsKIH0KIAotYm9vbCBwYXJzZUtlcm5pbmdVbmljb2RlU3Ry
aW5nKGNvbnN0IFN0cmluZyYgaW5wdXQsIFVuaWNvZGVSYW5nZXMmIHJhbmdlTGlzdCwgSGFzaFNl
dDxTdHJpbmc+JiBzdHJpbmdMaXN0KQorT3B0aW9uYWw8c3RkOjpwYWlyPFVuaWNvZGVSYW5nZXMs
IEhhc2hTZXQ8U3RyaW5nPj4+IHBhcnNlS2VybmluZ1VuaWNvZGVTdHJpbmcoY29uc3QgU3RyaW5n
JiBpbnB1dCkKIHsKICAgICAvLyBGSVhNRTogUGFyc2luZyBlcnJvciBkZXRlY3Rpb24gaXMgbWlz
c2luZy4KKwogICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyhpbnB1
dCkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7CiAgICAgY29uc3QgVUNoYXIqIHB0ciA9IHVwY29u
dmVydGVkQ2hhcmFjdGVyczsKICAgICBjb25zdCBVQ2hhciogZW5kID0gcHRyICsgaW5wdXQubGVu
Z3RoKCk7CiAKKyAgICBVbmljb2RlUmFuZ2VzIHJhbmdlTGlzdDsKKyAgICBIYXNoU2V0PFN0cmlu
Zz4gc3RyaW5nTGlzdDsKKwogICAgIHdoaWxlIChwdHIgPCBlbmQpIHsKICAgICAgICAgY29uc3Qg
VUNoYXIqIGlucHV0U3RhcnQgPSBwdHI7CiAgICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgKnB0
ciAhPSAnLCcpCkBAIC0zNzUsMTA1ICszODUsMzcgQEAgYm9vbCBwYXJzZUtlcm5pbmdVbmljb2Rl
U3RyaW5nKGNvbnN0IFN0cgogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgLy8gVHJ5IHRv
IHBhcnNlIHVuaWNvZGUgcmFuZ2UgZmlyc3QKLSAgICAgICAgVW5pY29kZVJhbmdlIHJhbmdlOwot
ICAgICAgICBpZiAocGFyc2VVbmljb2RlUmFuZ2UoaW5wdXRTdGFydCwgcHRyIC0gaW5wdXRTdGFy
dCwgcmFuZ2UpKQotICAgICAgICAgICAgcmFuZ2VMaXN0LmFwcGVuZChyYW5nZSk7CisgICAgICAg
IGlmIChhdXRvIHJhbmdlID0gcGFyc2VVbmljb2RlUmFuZ2UoaW5wdXRTdGFydCwgcHRyIC0gaW5w
dXRTdGFydCkpCisgICAgICAgICAgICByYW5nZUxpc3QuYXBwZW5kKFdURk1vdmUoKnJhbmdlKSk7
CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHN0cmluZ0xpc3QuYWRkKFN0cmluZyhpbnB1dFN0
YXJ0LCBwdHIgLSBpbnB1dFN0YXJ0KSk7CiAgICAgICAgICsrcHRyOwogICAgIH0KIAotICAgIHJl
dHVybiB0cnVlOworICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihyYW5nZUxpc3QsIHN0cmluZ0xp
c3QpOwogfQogCi1WZWN0b3I8U3RyaW5nPiBwYXJzZURlbGltaXRlZFN0cmluZyhjb25zdCBTdHJp
bmcmIGlucHV0LCBjb25zdCBjaGFyIHNlcGVyYXRvcikKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlPiBzdGF0aWMgT3B0aW9uYWw8RmxvYXRQb2ludD4gZ2VuZXJpY1BhcnNlRmxvYXRQ
b2ludChjb25zdCBDaGFyYWN0ZXJUeXBlKiYgY3VycmVudCwgY29uc3QgQ2hhcmFjdGVyVHlwZSog
ZW5kKQogewotICAgIFZlY3RvcjxTdHJpbmc+IHZhbHVlczsKLQotICAgIGF1dG8gdXBjb252ZXJ0
ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyhpbnB1dCkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7
Ci0gICAgY29uc3QgVUNoYXIqIHB0ciA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKLSAgICBjb25z
dCBVQ2hhciogZW5kID0gcHRyICsgaW5wdXQubGVuZ3RoKCk7Ci0gICAgc2tpcE9wdGlvbmFsU1ZH
U3BhY2VzKHB0ciwgZW5kKTsKLQotICAgIHdoaWxlIChwdHIgPCBlbmQpIHsKLSAgICAgICAgLy8g
TGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGUgc3BhY2UsIGFuZCB3aGl0ZSBzcGFjZSBiZWZvcmUg
YW5kIGFmdGVyIHNlbWljb2xvbiBzZXBhcmF0b3JzLCB3aWxsIGJlIGlnbm9yZWQuCi0gICAgICAg
IGNvbnN0IFVDaGFyKiBpbnB1dFN0YXJ0ID0gcHRyOwotICAgICAgICB3aGlsZSAocHRyIDwgZW5k
ICYmICpwdHIgIT0gc2VwZXJhdG9yKSAvLyBjYXJlZnVsIG5vdCB0byBpZ25vcmUgd2hpdGVzcGFj
ZSBpbnNpZGUgaW5wdXRzCi0gICAgICAgICAgICBwdHIrKzsKKyAgICBhdXRvIHggPSBwYXJzZU51
bWJlcihjdXJyZW50LCBlbmQpOworICAgIGlmICgheCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIAotICAgICAgICBpZiAocHRyID09IGlucHV0U3RhcnQpCi0gICAgICAgICAgICBicmVh
azsKLQotICAgICAgICAvLyB3YWxrIGJhY2t3YXJkcyBmcm9tIHRoZSA7IHRvIGlnbm9yZSBhbnkg
d2hpdGVzcGFjZQotICAgICAgICBjb25zdCBVQ2hhciogaW5wdXRFbmQgPSBwdHIgLSAxOwotICAg
ICAgICB3aGlsZSAoaW5wdXRTdGFydCA8IGlucHV0RW5kICYmIGlzU1ZHU3BhY2UoKmlucHV0RW5k
KSkKLSAgICAgICAgICAgIGlucHV0RW5kLS07CisgICAgYXV0byB5ID0gcGFyc2VOdW1iZXIoY3Vy
cmVudCwgZW5kKTsKKyAgICBpZiAoIXkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAK
LSAgICAgICAgdmFsdWVzLmFwcGVuZChTdHJpbmcoaW5wdXRTdGFydCwgaW5wdXRFbmQgLSBpbnB1
dFN0YXJ0ICsgMSkpOwotICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXNPckRlbGltaXRlcihw
dHIsIGVuZCwgc2VwZXJhdG9yKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdmFsdWVzOworICAgIHJl
dHVybiBGbG9hdFBvaW50IHsgKngsICp5IH07CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlPgotYm9vbCBwYXJzZUZsb2F0UG9pbnQoY29uc3QgQ2hhcmFjdGVyVHlwZSomIGN1
cnJlbnQsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCwgRmxvYXRQb2ludCYgcG9pbnQpCitPcHRp
b25hbDxGbG9hdFBvaW50PiBwYXJzZUZsb2F0UG9pbnQoY29uc3QgTENoYXIqJiBjdXJyZW50LCBj
b25zdCBMQ2hhciogZW5kKQogewotICAgIGZsb2F0IHg7Ci0gICAgZmxvYXQgeTsKLSAgICBpZiAo
IXBhcnNlTnVtYmVyKGN1cnJlbnQsIGVuZCwgeCkKLSAgICAgICAgfHwgIXBhcnNlTnVtYmVyKGN1
cnJlbnQsIGVuZCwgeSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBwb2ludCA9IEZsb2F0
UG9pbnQoeCwgeSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXRlbXBsYXRlIGJvb2wgcGFyc2VG
bG9hdFBvaW50KGNvbnN0IExDaGFyKiYgY3VycmVudCwgY29uc3QgTENoYXIqIGVuZCwgRmxvYXRQ
b2ludCYgcG9pbnQxKTsKLXRlbXBsYXRlIGJvb2wgcGFyc2VGbG9hdFBvaW50KGNvbnN0IFVDaGFy
KiYgY3VycmVudCwgY29uc3QgVUNoYXIqIGVuZCwgRmxvYXRQb2ludCYgcG9pbnQxKTsKLQotdGVt
cGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1pbmxpbmUgYm9vbCBwYXJzZUZsb2F0UG9p
bnQyKGNvbnN0IENoYXJhY3RlclR5cGUqJiBjdXJyZW50LCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBl
bmQsIEZsb2F0UG9pbnQmIHBvaW50MSwgRmxvYXRQb2ludCYgcG9pbnQyKQotewotICAgIGZsb2F0
IHgxOwotICAgIGZsb2F0IHkxOwotICAgIGZsb2F0IHgyOwotICAgIGZsb2F0IHkyOwotICAgIGlm
ICghcGFyc2VOdW1iZXIoY3VycmVudCwgZW5kLCB4MSkKLSAgICAgICAgfHwgIXBhcnNlTnVtYmVy
KGN1cnJlbnQsIGVuZCwgeTEpCi0gICAgICAgIHx8ICFwYXJzZU51bWJlcihjdXJyZW50LCBlbmQs
IHgyKQotICAgICAgICB8fCAhcGFyc2VOdW1iZXIoY3VycmVudCwgZW5kLCB5MikpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBwb2ludDEgPSBGbG9hdFBvaW50KHgxLCB5MSk7Ci0gICAgcG9p
bnQyID0gRmxvYXRQb2ludCh4MiwgeTIpOwotICAgIHJldHVybiB0cnVlOwotfQotCi10ZW1wbGF0
ZSBib29sIHBhcnNlRmxvYXRQb2ludDIoY29uc3QgTENoYXIqJiBjdXJyZW50LCBjb25zdCBMQ2hh
ciogZW5kLCBGbG9hdFBvaW50JiBwb2ludDEsIEZsb2F0UG9pbnQmIHBvaW50Mik7Ci10ZW1wbGF0
ZSBib29sIHBhcnNlRmxvYXRQb2ludDIoY29uc3QgVUNoYXIqJiBjdXJyZW50LCBjb25zdCBVQ2hh
ciogZW5kLCBGbG9hdFBvaW50JiBwb2ludDEsIEZsb2F0UG9pbnQmIHBvaW50Mik7Ci0KLXRlbXBs
YXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotYm9vbCBwYXJzZUZsb2F0UG9pbnQzKGNvbnN0
IENoYXJhY3RlclR5cGUqJiBjdXJyZW50LCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQsIEZsb2F0
UG9pbnQmIHBvaW50MSwgRmxvYXRQb2ludCYgcG9pbnQyLCBGbG9hdFBvaW50JiBwb2ludDMpCi17
Ci0gICAgZmxvYXQgeDE7Ci0gICAgZmxvYXQgeTE7Ci0gICAgZmxvYXQgeDI7Ci0gICAgZmxvYXQg
eTI7Ci0gICAgZmxvYXQgeDM7Ci0gICAgZmxvYXQgeTM7Ci0gICAgaWYgKCFwYXJzZU51bWJlcihj
dXJyZW50LCBlbmQsIHgxKQotICAgICAgICB8fCAhcGFyc2VOdW1iZXIoY3VycmVudCwgZW5kLCB5
MSkKLSAgICAgICAgfHwgIXBhcnNlTnVtYmVyKGN1cnJlbnQsIGVuZCwgeDIpCi0gICAgICAgIHx8
ICFwYXJzZU51bWJlcihjdXJyZW50LCBlbmQsIHkyKQotICAgICAgICB8fCAhcGFyc2VOdW1iZXIo
Y3VycmVudCwgZW5kLCB4MykKLSAgICAgICAgfHwgIXBhcnNlTnVtYmVyKGN1cnJlbnQsIGVuZCwg
eTMpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcG9pbnQxID0gRmxvYXRQb2ludCh4MSwg
eTEpOwotICAgIHBvaW50MiA9IEZsb2F0UG9pbnQoeDIsIHkyKTsKLSAgICBwb2ludDMgPSBGbG9h
dFBvaW50KHgzLCB5Myk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGdlbmVyaWNQYXJz
ZUZsb2F0UG9pbnQoY3VycmVudCwgZW5kKTsKIH0KIAotdGVtcGxhdGUgYm9vbCBwYXJzZUZsb2F0
UG9pbnQzKGNvbnN0IExDaGFyKiYgY3VycmVudCwgY29uc3QgTENoYXIqIGVuZCwgRmxvYXRQb2lu
dCYgcG9pbnQxLCBGbG9hdFBvaW50JiBwb2ludDIsIEZsb2F0UG9pbnQmIHBvaW50Myk7Ci10ZW1w
bGF0ZSBib29sIHBhcnNlRmxvYXRQb2ludDMoY29uc3QgVUNoYXIqJiBjdXJyZW50LCBjb25zdCBV
Q2hhciogZW5kLCBGbG9hdFBvaW50JiBwb2ludDEsIEZsb2F0UG9pbnQmIHBvaW50MiwgRmxvYXRQ
b2ludCYgcG9pbnQzKTsKK09wdGlvbmFsPEZsb2F0UG9pbnQ+IHBhcnNlRmxvYXRQb2ludChjb25z
dCBVQ2hhciomIGN1cnJlbnQsIGNvbnN0IFVDaGFyKiBlbmQpCit7CisgICAgcmV0dXJuIGdlbmVy
aWNQYXJzZUZsb2F0UG9pbnQoY3VycmVudCwgZW5kKTsKK30KIAogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdQYXJzZXJVdGlsaXRpZXMuaAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3
ICsyNSw3IEBACiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgogCi10eXBlZGVmIHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+IFVuaWNv
ZGVSYW5nZTsKK3R5cGVkZWYgc3RkOjpwYWlyPFVDaGFyMzIsIFVDaGFyMzI+IFVuaWNvZGVSYW5n
ZTsKIHR5cGVkZWYgVmVjdG9yPFVuaWNvZGVSYW5nZT4gVW5pY29kZVJhbmdlczsKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpAQCAtMzMsNDIgKzMzLDQ1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNs
YXNzIEZsb2F0UG9pbnQ7CiBjbGFzcyBGbG9hdFJlY3Q7CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBD
aGFyYWN0ZXJUeXBlPgotYm9vbCBwYXJzZVNWR051bWJlcihDaGFyYWN0ZXJUeXBlKiBwdHIsIHNp
emVfdCBsZW5ndGgsIGRvdWJsZSYgbnVtYmVyKTsKLWJvb2wgcGFyc2VOdW1iZXIoY29uc3QgTENo
YXIqJiBwdHIsIGNvbnN0IExDaGFyKiBlbmQsIGZsb2F0JiBudW1iZXIsIGJvb2wgc2tpcCA9IHRy
dWUpOwotYm9vbCBwYXJzZU51bWJlcihjb25zdCBVQ2hhciomIHB0ciwgY29uc3QgVUNoYXIqIGVu
ZCwgZmxvYXQmIG51bWJlciwgYm9vbCBza2lwID0gdHJ1ZSk7Ci1ib29sIHBhcnNlTnVtYmVyRnJv
bVN0cmluZyhjb25zdCBTdHJpbmcmLCBmbG9hdCYgbnVtYmVyLCBib29sIHNraXAgPSB0cnVlKTsK
LWJvb2wgcGFyc2VOdW1iZXJPcHRpb25hbE51bWJlcihjb25zdCBTdHJpbmcmIHMsIGZsb2F0JiBo
LCBmbG9hdCYgdik7Ci1ib29sIHBhcnNlQXJjRmxhZyhjb25zdCBMQ2hhciomIHB0ciwgY29uc3Qg
TENoYXIqIGVuZCwgYm9vbCYgZmxhZyk7Ci1ib29sIHBhcnNlQXJjRmxhZyhjb25zdCBVQ2hhciom
IHB0ciwgY29uc3QgVUNoYXIqIGVuZCwgYm9vbCYgZmxhZyk7Ci1ib29sIHBhcnNlUG9pbnQoY29u
c3QgU3RyaW5nJiwgRmxvYXRQb2ludCYpOwotYm9vbCBwYXJzZVJlY3QoY29uc3QgU3RyaW5nJiwg
RmxvYXRSZWN0Jik7Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotYm9vbCBw
YXJzZUZsb2F0UG9pbnQoY29uc3QgQ2hhcmFjdGVyVHlwZSomIGN1cnJlbnQsIGNvbnN0IENoYXJh
Y3RlclR5cGUqIGVuZCwgRmxvYXRQb2ludCYpOwotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+Ci1ib29sIHBhcnNlRmxvYXRQb2ludDIoY29uc3QgQ2hhcmFjdGVyVHlwZSomIGN1cnJl
bnQsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCwgRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmKTsK
LXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotYm9vbCBwYXJzZUZsb2F0UG9pbnQz
KGNvbnN0IENoYXJhY3RlclR5cGUqJiBjdXJyZW50LCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQs
IEZsb2F0UG9pbnQmLCBGbG9hdFBvaW50JiwgRmxvYXRQb2ludCYpOworZW51bSBjbGFzcyBTdWZm
aXhTa2lwcGluZ1BvbGljeSB7CisgICAgRG9udFNraXAsCisgICAgU2tpcAorfTsKKworT3B0aW9u
YWw8ZmxvYXQ+IHBhcnNlTnVtYmVyKGNvbnN0IExDaGFyKiYgY3VycmVudCwgY29uc3QgTENoYXIq
IGVuZCwgU3VmZml4U2tpcHBpbmdQb2xpY3kgPSBTdWZmaXhTa2lwcGluZ1BvbGljeTo6U2tpcCk7
CitPcHRpb25hbDxmbG9hdD4gcGFyc2VOdW1iZXIoY29uc3QgVUNoYXIqJiBjdXJyZW50LCBjb25z
dCBVQ2hhciogZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeSA9IFN1ZmZpeFNraXBwaW5nUG9saWN5
OjpTa2lwKTsKK09wdGlvbmFsPGZsb2F0PiBwYXJzZU51bWJlcihjb25zdCBTdHJpbmcmLCBTdWZm
aXhTa2lwcGluZ1BvbGljeSA9IFN1ZmZpeFNraXBwaW5nUG9saWN5OjpTa2lwKTsKKworT3B0aW9u
YWw8c3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4+IHBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIoY29u
c3QgU3RyaW5nJik7CisKK09wdGlvbmFsPGJvb2w+IHBhcnNlQXJjRmxhZyhjb25zdCBMQ2hhciom
IGN1cnJlbnQsIGNvbnN0IExDaGFyKiBlbmQpOworT3B0aW9uYWw8Ym9vbD4gcGFyc2VBcmNGbGFn
KGNvbnN0IFVDaGFyKiYgY3VycmVudCwgY29uc3QgVUNoYXIqIGVuZCk7CisKK09wdGlvbmFsPEZs
b2F0UG9pbnQ+IHBhcnNlUG9pbnQoY29uc3QgU3RyaW5nJik7CitPcHRpb25hbDxGbG9hdFJlY3Q+
IHBhcnNlUmVjdChjb25zdCBTdHJpbmcmKTsKKworT3B0aW9uYWw8RmxvYXRQb2ludD4gcGFyc2VG
bG9hdFBvaW50KGNvbnN0IExDaGFyKiYgY3VycmVudCwgY29uc3QgTENoYXIqIGVuZCk7CitPcHRp
b25hbDxGbG9hdFBvaW50PiBwYXJzZUZsb2F0UG9pbnQoY29uc3QgVUNoYXIqJiBjdXJyZW50LCBj
b25zdCBVQ2hhciogZW5kKTsKKworT3B0aW9uYWw8c3RkOjpwYWlyPFVuaWNvZGVSYW5nZXMsIEhh
c2hTZXQ8U3RyaW5nPj4+IHBhcnNlS2VybmluZ1VuaWNvZGVTdHJpbmcoY29uc3QgU3RyaW5nJik7
CitPcHRpb25hbDxIYXNoU2V0PFN0cmluZz4+IHBhcnNlR2x5cGhOYW1lKGNvbnN0IFN0cmluZyYp
OworCiAKIC8vIFNWRyBhbGxvd3Mgc2V2ZXJhbCBkaWZmZXJlbnQgd2hpdGVzcGFjZSBjaGFyYWN0
ZXJzOgogLy8gaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHL3BhdGhzLmh0bWwjUGF0aERhdGFCTkYK
LXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotaW5saW5lIGJvb2wgaXNTVkdTcGFj
ZShDaGFyYWN0ZXJUeXBlIGMpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBpbmxp
bmUgYm9vbCBpc1NWR1NwYWNlKENoYXJhY3RlclR5cGUgYykKIHsKICAgICByZXR1cm4gYyA9PSAn
ICcgfHwgYyA9PSAnXHQnIHx8IGMgPT0gJ1xuJyB8fCBjID09ICdccic7CiB9CiAKLXRlbXBsYXRl
IDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotaW5saW5lIGJvb2wgc2tpcE9wdGlvbmFsU1ZHU3Bh
Y2VzKGNvbnN0IENoYXJhY3RlclR5cGUqJiBwdHIsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCkK
K3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGlubGluZSBib29sIHNraXBPcHRpb25h
bFNWR1NwYWNlcyhjb25zdCBDaGFyYWN0ZXJUeXBlKiYgcHRyLCBjb25zdCBDaGFyYWN0ZXJUeXBl
KiBlbmQpCiB7CiAgICAgd2hpbGUgKHB0ciA8IGVuZCAmJiBpc1NWR1NwYWNlKCpwdHIpKQogICAg
ICAgICBwdHIrKzsKICAgICByZXR1cm4gcHRyIDwgZW5kOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZT4KLWlubGluZSBib29sIHNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVs
aW1pdGVyKGNvbnN0IENoYXJhY3RlclR5cGUqJiBwdHIsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVu
ZCwgY2hhciBkZWxpbWl0ZXIgPSAnLCcpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBl
PiBpbmxpbmUgYm9vbCBza2lwT3B0aW9uYWxTVkdTcGFjZXNPckRlbGltaXRlcihjb25zdCBDaGFy
YWN0ZXJUeXBlKiYgcHRyLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQsIGNoYXIgZGVsaW1pdGVy
ID0gJywnKQogewogICAgIGlmIChwdHIgPCBlbmQgJiYgIWlzU1ZHU3BhY2UoKnB0cikgJiYgKnB0
ciAhPSBkZWxpbWl0ZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTgxLDEwICs4NCw2IEBA
IGlubGluZSBib29sIHNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVsaW0KICAgICByZXR1cm4gcHRy
IDwgZW5kOwogfQogCi1WZWN0b3I8U3RyaW5nPiBwYXJzZURlbGltaXRlZFN0cmluZyhjb25zdCBT
dHJpbmcmIGlucHV0LCBjb25zdCBjaGFyIHNlcGVyYXRvcik7Ci1ib29sIHBhcnNlS2VybmluZ1Vu
aWNvZGVTdHJpbmcoY29uc3QgU3RyaW5nJiBpbnB1dCwgVW5pY29kZVJhbmdlcyYsIEhhc2hTZXQ8
U3RyaW5nPiYgc3RyaW5nTGlzdCk7Ci1ib29sIHBhcnNlR2x5cGhOYW1lKGNvbnN0IFN0cmluZyYg
aW5wdXQsIEhhc2hTZXQ8U3RyaW5nPiYgdmFsdWVzKTsKLQogaW5saW5lIGJvb2wgc2tpcFN0cmlu
Zyhjb25zdCBVQ2hhciomIHB0ciwgY29uc3QgVUNoYXIqIGVuZCwgY29uc3QgVUNoYXIqIG5hbWUs
IGludCBsZW5ndGgpCiB7CiAgICAgaWYgKGVuZCAtIHB0ciA8IGxlbmd0aCkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQmxlbmRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1BhdGhCbGVuZGVyLmNwcAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1BhdGhCbGVuZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDIw
MCArMTE2LDE5OCBAQCBGbG9hdFBvaW50IFNWR1BhdGhCbGVuZGVyOjpibGVuZEFuaW1hdGVkCiAg
ICAgcmV0dXJuIGFuaW1hdGVkUG9pbnQ7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9u
PiB1c2luZyBQdWxsRnJvbVNvdXJjZXNSZXN1bHQgPSBzdGQ6OnBhaXI8dHlwZW5hbWUgc3RkOjpp
bnZva2VfcmVzdWx0X3Q8RnVuY3Rpb24sIFNWR1BhdGhTb3VyY2U+Ojp2YWx1ZV90eXBlLCB0eXBl
bmFtZSBzdGQ6Omludm9rZV9yZXN1bHRfdDxGdW5jdGlvbiwgU1ZHUGF0aFNvdXJjZT46OnZhbHVl
X3R5cGU+OwordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb24+IHN0YXRpYyBPcHRpb25hbDxQdWxs
RnJvbVNvdXJjZXNSZXN1bHQ8RnVuY3Rpb24+PiBwdWxsRnJvbVNvdXJjZXMoU1ZHUGF0aFNvdXJj
ZSYgZnJvbVNvdXJjZSwgU1ZHUGF0aFNvdXJjZSYgdG9Tb3VyY2UsIEZ1bmN0aW9uJiYgZnVuY3Rp
b24pCit7CisgICAgaWYgKCFmcm9tU291cmNlLmhhc01vcmVEYXRhKCkpCisgICAgICAgIHJldHVy
biBQdWxsRnJvbVNvdXJjZXNSZXN1bHQ8RnVuY3Rpb24+IHsgfTsKKworICAgIGF1dG8gcGFyc2Vk
RnJvbSA9IHN0ZDo6aW52b2tlKGZ1bmN0aW9uLCBmcm9tU291cmNlKTsKKyAgICBpZiAoIXBhcnNl
ZEZyb20pCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgYXV0byBwYXJzZWRUbyA9
IHN0ZDo6aW52b2tlKGZ1bmN0aW9uLCB0b1NvdXJjZSk7CisgICAgaWYgKCFwYXJzZWRUbykKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIHJldHVybiBQdWxsRnJvbVNvdXJjZXNS
ZXN1bHQ8RnVuY3Rpb24+IHsgV1RGTW92ZSgqcGFyc2VkRnJvbSksIFdURk1vdmUoKnBhcnNlZFRv
KSB9OworfQorCiBib29sIFNWR1BhdGhCbGVuZGVyOjpibGVuZE1vdmVUb1NlZ21lbnQoZmxvYXQg
cHJvZ3Jlc3MpCiB7Ci0gICAgRmxvYXRQb2ludCBmcm9tVGFyZ2V0UG9pbnQ7Ci0gICAgRmxvYXRQ
b2ludCB0b1RhcmdldFBvaW50OwotICAgIGlmICgobV9mcm9tU291cmNlLmhhc01vcmVEYXRhKCkg
JiYgIW1fZnJvbVNvdXJjZS5wYXJzZU1vdmVUb1NlZ21lbnQoZnJvbVRhcmdldFBvaW50KSkKLSAg
ICAgICAgfHwgIW1fdG9Tb3VyY2UucGFyc2VNb3ZlVG9TZWdtZW50KHRvVGFyZ2V0UG9pbnQpKQor
ICAgIGF1dG8gcmVzdWx0ID0gcHVsbEZyb21Tb3VyY2VzKG1fZnJvbVNvdXJjZSwgbV90b1NvdXJj
ZSwgJlNWR1BhdGhTb3VyY2U6OnBhcnNlTW92ZVRvU2VnbWVudCk7CisgICAgaWYgKCFyZXN1bHQp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmICghbV9jb25zdW1lcikKICAgICAgICAg
cmV0dXJuIHRydWU7CiAKLSAgICBtX2NvbnN1bWVyLT5tb3ZlVG8oYmxlbmRBbmltYXRlZEZsb2F0
UG9pbnQoZnJvbVRhcmdldFBvaW50LCB0b1RhcmdldFBvaW50LCBwcm9ncmVzcyksIGZhbHNlLCBt
X2lzSW5GaXJzdEhhbGZPZkFuaW1hdGlvbiA/IG1fZnJvbU1vZGUgOiBtX3RvTW9kZSk7Ci0gICAg
bV9mcm9tQ3VycmVudFBvaW50ID0gbV9mcm9tTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8g
ZnJvbVRhcmdldFBvaW50IDogbV9mcm9tQ3VycmVudFBvaW50ICsgZnJvbVRhcmdldFBvaW50Owot
ICAgIG1fdG9DdXJyZW50UG9pbnQgPSBtX3RvTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8g
dG9UYXJnZXRQb2ludCA6IG1fdG9DdXJyZW50UG9pbnQgKyB0b1RhcmdldFBvaW50OworICAgIGF1
dG8gW2Zyb20sIHRvXSA9ICpyZXN1bHQ7CisKKyAgICBtX2NvbnN1bWVyLT5tb3ZlVG8oYmxlbmRB
bmltYXRlZEZsb2F0UG9pbnQoZnJvbS50YXJnZXRQb2ludCwgdG8udGFyZ2V0UG9pbnQsIHByb2dy
ZXNzKSwgZmFsc2UsIG1faXNJbkZpcnN0SGFsZk9mQW5pbWF0aW9uID8gbV9mcm9tTW9kZSA6IG1f
dG9Nb2RlKTsKKyAgICBtX2Zyb21DdXJyZW50UG9pbnQgPSBtX2Zyb21Nb2RlID09IEFic29sdXRl
Q29vcmRpbmF0ZXMgPyBmcm9tLnRhcmdldFBvaW50IDogbV9mcm9tQ3VycmVudFBvaW50ICsgZnJv
bS50YXJnZXRQb2ludDsKKyAgICBtX3RvQ3VycmVudFBvaW50ID0gbV90b01vZGUgPT0gQWJzb2x1
dGVDb29yZGluYXRlcyA/IHRvLnRhcmdldFBvaW50IDogbV90b0N1cnJlbnRQb2ludCArIHRvLnRh
cmdldFBvaW50OwogICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIFNWR1BhdGhCbGVuZGVyOjpi
bGVuZExpbmVUb1NlZ21lbnQoZmxvYXQgcHJvZ3Jlc3MpCiB7Ci0gICAgRmxvYXRQb2ludCBmcm9t
VGFyZ2V0UG9pbnQ7Ci0gICAgRmxvYXRQb2ludCB0b1RhcmdldFBvaW50OwotICAgIGlmICgobV9m
cm9tU291cmNlLmhhc01vcmVEYXRhKCkgJiYgIW1fZnJvbVNvdXJjZS5wYXJzZUxpbmVUb1NlZ21l
bnQoZnJvbVRhcmdldFBvaW50KSkKLSAgICAgICAgfHwgIW1fdG9Tb3VyY2UucGFyc2VMaW5lVG9T
ZWdtZW50KHRvVGFyZ2V0UG9pbnQpKQorICAgIGF1dG8gcmVzdWx0ID0gcHVsbEZyb21Tb3VyY2Vz
KG1fZnJvbVNvdXJjZSwgbV90b1NvdXJjZSwgJlNWR1BhdGhTb3VyY2U6OnBhcnNlTGluZVRvU2Vn
bWVudCk7CisgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlm
ICghbV9jb25zdW1lcikKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBtX2NvbnN1bWVyLT5s
aW5lVG8oYmxlbmRBbmltYXRlZEZsb2F0UG9pbnQoZnJvbVRhcmdldFBvaW50LCB0b1RhcmdldFBv
aW50LCBwcm9ncmVzcyksIG1faXNJbkZpcnN0SGFsZk9mQW5pbWF0aW9uID8gbV9mcm9tTW9kZSA6
IG1fdG9Nb2RlKTsKLSAgICBtX2Zyb21DdXJyZW50UG9pbnQgPSBtX2Zyb21Nb2RlID09IEFic29s
dXRlQ29vcmRpbmF0ZXMgPyBmcm9tVGFyZ2V0UG9pbnQgOiBtX2Zyb21DdXJyZW50UG9pbnQgKyBm
cm9tVGFyZ2V0UG9pbnQ7Ci0gICAgbV90b0N1cnJlbnRQb2ludCA9IG1fdG9Nb2RlID09IEFic29s
dXRlQ29vcmRpbmF0ZXMgPyB0b1RhcmdldFBvaW50IDogbV90b0N1cnJlbnRQb2ludCArIHRvVGFy
Z2V0UG9pbnQ7CisgICAgYXV0byBbZnJvbSwgdG9dID0gKnJlc3VsdDsKKworICAgIG1fY29uc3Vt
ZXItPmxpbmVUbyhibGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tLnRhcmdldFBvaW50LCB0by50
YXJnZXRQb2ludCwgcHJvZ3Jlc3MpLCBtX2lzSW5GaXJzdEhhbGZPZkFuaW1hdGlvbiA/IG1fZnJv
bU1vZGUgOiBtX3RvTW9kZSk7CisgICAgbV9mcm9tQ3VycmVudFBvaW50ID0gbV9mcm9tTW9kZSA9
PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gZnJvbS50YXJnZXRQb2ludCA6IG1fZnJvbUN1cnJlbnRQ
b2ludCArIGZyb20udGFyZ2V0UG9pbnQ7CisgICAgbV90b0N1cnJlbnRQb2ludCA9IG1fdG9Nb2Rl
ID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyB0by50YXJnZXRQb2ludCA6IG1fdG9DdXJyZW50UG9p
bnQgKyB0by50YXJnZXRQb2ludDsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBTVkdQYXRo
QmxlbmRlcjo6YmxlbmRMaW5lVG9Ib3Jpem9udGFsU2VnbWVudChmbG9hdCBwcm9ncmVzcykKIHsK
LSAgICBmbG9hdCBmcm9tWCA9IDA7Ci0gICAgZmxvYXQgdG9YID0gMDsKLSAgICBpZiAoKG1fZnJv
bVNvdXJjZS5oYXNNb3JlRGF0YSgpICYmICFtX2Zyb21Tb3VyY2UucGFyc2VMaW5lVG9Ib3Jpem9u
dGFsU2VnbWVudChmcm9tWCkpCi0gICAgICAgIHx8ICFtX3RvU291cmNlLnBhcnNlTGluZVRvSG9y
aXpvbnRhbFNlZ21lbnQodG9YKSkKKyAgICBhdXRvIHJlc3VsdCA9IHB1bGxGcm9tU291cmNlcyht
X2Zyb21Tb3VyY2UsIG1fdG9Tb3VyY2UsICZTVkdQYXRoU291cmNlOjpwYXJzZUxpbmVUb0hvcml6
b250YWxTZWdtZW50KTsKKyAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgaWYgKCFtX2NvbnN1bWVyKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIG1fY29u
c3VtZXItPmxpbmVUb0hvcml6b250YWwoYmxlbmRBbmltYXRlZERpbWVuc29uYWxGbG9hdChmcm9t
WCwgdG9YLCBCbGVuZEhvcml6b250YWwsIHByb2dyZXNzKSwgbV9pc0luRmlyc3RIYWxmT2ZBbmlt
YXRpb24gPyBtX2Zyb21Nb2RlIDogbV90b01vZGUpOwotICAgIG1fZnJvbUN1cnJlbnRQb2ludC5z
ZXRYKG1fZnJvbU1vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IGZyb21YIDogbV9mcm9tQ3Vy
cmVudFBvaW50LngoKSArIGZyb21YKTsKLSAgICBtX3RvQ3VycmVudFBvaW50LnNldFgobV90b01v
ZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IHRvWCA6IG1fdG9DdXJyZW50UG9pbnQueCgpICsg
dG9YKTsKKyAgICBhdXRvIFtmcm9tLCB0b10gPSAqcmVzdWx0OworCisgICAgbV9jb25zdW1lci0+
bGluZVRvSG9yaXpvbnRhbChibGVuZEFuaW1hdGVkRGltZW5zb25hbEZsb2F0KGZyb20ueCwgdG8u
eCwgQmxlbmRIb3Jpem9udGFsLCBwcm9ncmVzcyksIG1faXNJbkZpcnN0SGFsZk9mQW5pbWF0aW9u
ID8gbV9mcm9tTW9kZSA6IG1fdG9Nb2RlKTsKKyAgICBtX2Zyb21DdXJyZW50UG9pbnQuc2V0WCht
X2Zyb21Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyBmcm9tLnggOiBtX2Zyb21DdXJyZW50
UG9pbnQueCgpICsgZnJvbS54KTsKKyAgICBtX3RvQ3VycmVudFBvaW50LnNldFgobV90b01vZGUg
PT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IHRvLnggOiBtX3RvQ3VycmVudFBvaW50LngoKSArIHRv
LngpOwogICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIFNWR1BhdGhCbGVuZGVyOjpibGVuZExp
bmVUb1ZlcnRpY2FsU2VnbWVudChmbG9hdCBwcm9ncmVzcykKIHsKLSAgICBmbG9hdCBmcm9tWSA9
IDA7Ci0gICAgZmxvYXQgdG9ZID0gMDsKLSAgICBpZiAoKG1fZnJvbVNvdXJjZS5oYXNNb3JlRGF0
YSgpICYmICFtX2Zyb21Tb3VyY2UucGFyc2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnQoZnJvbVkpKQot
ICAgICAgICB8fCAhbV90b1NvdXJjZS5wYXJzZUxpbmVUb1ZlcnRpY2FsU2VnbWVudCh0b1kpKQor
ICAgIGF1dG8gcmVzdWx0ID0gcHVsbEZyb21Tb3VyY2VzKG1fZnJvbVNvdXJjZSwgbV90b1NvdXJj
ZSwgJlNWR1BhdGhTb3VyY2U6OnBhcnNlTGluZVRvVmVydGljYWxTZWdtZW50KTsKKyAgICBpZiAo
IXJlc3VsdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKCFtX2NvbnN1bWVyKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIG1fY29uc3VtZXItPmxpbmVUb1ZlcnRpY2FsKGJs
ZW5kQW5pbWF0ZWREaW1lbnNvbmFsRmxvYXQoZnJvbVksIHRvWSwgQmxlbmRWZXJ0aWNhbCwgcHJv
Z3Jlc3MpLCBtX2lzSW5GaXJzdEhhbGZPZkFuaW1hdGlvbiA/IG1fZnJvbU1vZGUgOiBtX3RvTW9k
ZSk7Ci0gICAgbV9mcm9tQ3VycmVudFBvaW50LnNldFkobV9mcm9tTW9kZSA9PSBBYnNvbHV0ZUNv
b3JkaW5hdGVzID8gZnJvbVkgOiBtX2Zyb21DdXJyZW50UG9pbnQueSgpICsgZnJvbVkpOwotICAg
IG1fdG9DdXJyZW50UG9pbnQuc2V0WShtX3RvTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8g
dG9ZIDogbV90b0N1cnJlbnRQb2ludC55KCkgKyB0b1kpOworICAgIGF1dG8gW2Zyb20sIHRvXSA9
ICpyZXN1bHQ7CisKKyAgICBtX2NvbnN1bWVyLT5saW5lVG9WZXJ0aWNhbChibGVuZEFuaW1hdGVk
RGltZW5zb25hbEZsb2F0KGZyb20ueSwgdG8ueSwgQmxlbmRWZXJ0aWNhbCwgcHJvZ3Jlc3MpLCBt
X2lzSW5GaXJzdEhhbGZPZkFuaW1hdGlvbiA/IG1fZnJvbU1vZGUgOiBtX3RvTW9kZSk7CisgICAg
bV9mcm9tQ3VycmVudFBvaW50LnNldFkobV9mcm9tTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVz
ID8gZnJvbS55IDogbV9mcm9tQ3VycmVudFBvaW50LnkoKSArIGZyb20ueSk7CisgICAgbV90b0N1
cnJlbnRQb2ludC5zZXRZKG1fdG9Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyB0by55IDog
bV90b0N1cnJlbnRQb2ludC55KCkgKyB0by55KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9v
bCBTVkdQYXRoQmxlbmRlcjo6YmxlbmRDdXJ2ZVRvQ3ViaWNTZWdtZW50KGZsb2F0IHByb2dyZXNz
KQogewotICAgIEZsb2F0UG9pbnQgZnJvbVRhcmdldFBvaW50OwotICAgIEZsb2F0UG9pbnQgZnJv
bVBvaW50MTsKLSAgICBGbG9hdFBvaW50IGZyb21Qb2ludDI7Ci0gICAgRmxvYXRQb2ludCB0b1Rh
cmdldFBvaW50OwotICAgIEZsb2F0UG9pbnQgdG9Qb2ludDE7Ci0gICAgRmxvYXRQb2ludCB0b1Bv
aW50MjsKLSAgICBpZiAoKG1fZnJvbVNvdXJjZS5oYXNNb3JlRGF0YSgpICYmICFtX2Zyb21Tb3Vy
Y2UucGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KGZyb21Qb2ludDEsIGZyb21Qb2ludDIsIGZyb21U
YXJnZXRQb2ludCkpCi0gICAgICAgIHx8ICFtX3RvU291cmNlLnBhcnNlQ3VydmVUb0N1YmljU2Vn
bWVudCh0b1BvaW50MSwgdG9Qb2ludDIsIHRvVGFyZ2V0UG9pbnQpKQorICAgIGF1dG8gcmVzdWx0
ID0gcHVsbEZyb21Tb3VyY2VzKG1fZnJvbVNvdXJjZSwgbV90b1NvdXJjZSwgJlNWR1BhdGhTb3Vy
Y2U6OnBhcnNlQ3VydmVUb0N1YmljU2VnbWVudCk7CisgICAgaWYgKCFyZXN1bHQpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIGlmICghbV9jb25zdW1lcikKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAKLSAgICBtX2NvbnN1bWVyLT5jdXJ2ZVRvQ3ViaWMoYmxlbmRBbmltYXRlZEZsb2F0UG9p
bnQoZnJvbVBvaW50MSwgdG9Qb2ludDEsIHByb2dyZXNzKSwKLSAgICAgICAgYmxlbmRBbmltYXRl
ZEZsb2F0UG9pbnQoZnJvbVBvaW50MiwgdG9Qb2ludDIsIHByb2dyZXNzKSwKLSAgICAgICAgYmxl
bmRBbmltYXRlZEZsb2F0UG9pbnQoZnJvbVRhcmdldFBvaW50LCB0b1RhcmdldFBvaW50LCBwcm9n
cmVzcyksCisgICAgYXV0byBbZnJvbSwgdG9dID0gKnJlc3VsdDsKKworICAgIG1fY29uc3VtZXIt
PmN1cnZlVG9DdWJpYyhibGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tLnBvaW50MSwgdG8ucG9p
bnQxLCBwcm9ncmVzcyksCisgICAgICAgIGJsZW5kQW5pbWF0ZWRGbG9hdFBvaW50KGZyb20ucG9p
bnQyLCB0by5wb2ludDIsIHByb2dyZXNzKSwKKyAgICAgICAgYmxlbmRBbmltYXRlZEZsb2F0UG9p
bnQoZnJvbS50YXJnZXRQb2ludCwgdG8udGFyZ2V0UG9pbnQsIHByb2dyZXNzKSwKICAgICAgICAg
bV9pc0luRmlyc3RIYWxmT2ZBbmltYXRpb24gPyBtX2Zyb21Nb2RlIDogbV90b01vZGUpOwotICAg
IG1fZnJvbUN1cnJlbnRQb2ludCA9IG1fZnJvbU1vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/
IGZyb21UYXJnZXRQb2ludCA6IG1fZnJvbUN1cnJlbnRQb2ludCArIGZyb21UYXJnZXRQb2ludDsK
LSAgICBtX3RvQ3VycmVudFBvaW50ID0gbV90b01vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/
IHRvVGFyZ2V0UG9pbnQgOiBtX3RvQ3VycmVudFBvaW50ICsgdG9UYXJnZXRQb2ludDsKKyAgICBt
X2Zyb21DdXJyZW50UG9pbnQgPSBtX2Zyb21Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyBm
cm9tLnRhcmdldFBvaW50IDogbV9mcm9tQ3VycmVudFBvaW50ICsgZnJvbS50YXJnZXRQb2ludDsK
KyAgICBtX3RvQ3VycmVudFBvaW50ID0gbV90b01vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/
IHRvLnRhcmdldFBvaW50IDogbV90b0N1cnJlbnRQb2ludCArIHRvLnRhcmdldFBvaW50OwogICAg
IHJldHVybiB0cnVlOwogfQogCiBib29sIFNWR1BhdGhCbGVuZGVyOjpibGVuZEN1cnZlVG9DdWJp
Y1Ntb290aFNlZ21lbnQoZmxvYXQgcHJvZ3Jlc3MpCiB7Ci0gICAgRmxvYXRQb2ludCBmcm9tVGFy
Z2V0UG9pbnQ7Ci0gICAgRmxvYXRQb2ludCBmcm9tUG9pbnQyOwotICAgIEZsb2F0UG9pbnQgdG9U
YXJnZXRQb2ludDsKLSAgICBGbG9hdFBvaW50IHRvUG9pbnQyOwotICAgIGlmICgobV9mcm9tU291
cmNlLmhhc01vcmVEYXRhKCkgJiYgIW1fZnJvbVNvdXJjZS5wYXJzZUN1cnZlVG9DdWJpY1Ntb290
aFNlZ21lbnQoZnJvbVBvaW50MiwgZnJvbVRhcmdldFBvaW50KSkKLSAgICAgICAgfHwgIW1fdG9T
b3VyY2UucGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KHRvUG9pbnQyLCB0b1RhcmdldFBv
aW50KSkKKyAgICBhdXRvIHJlc3VsdCA9IHB1bGxGcm9tU291cmNlcyhtX2Zyb21Tb3VyY2UsIG1f
dG9Tb3VyY2UsICZTVkdQYXRoU291cmNlOjpwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQp
OworICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoIW1f
Y29uc3VtZXIpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgbV9jb25zdW1lci0+Y3VydmVU
b0N1YmljU21vb3RoKGJsZW5kQW5pbWF0ZWRGbG9hdFBvaW50KGZyb21Qb2ludDIsIHRvUG9pbnQy
LCBwcm9ncmVzcyksCi0gICAgICAgIGJsZW5kQW5pbWF0ZWRGbG9hdFBvaW50KGZyb21UYXJnZXRQ
b2ludCwgdG9UYXJnZXRQb2ludCwgcHJvZ3Jlc3MpLAorICAgIGF1dG8gW2Zyb20sIHRvXSA9ICpy
ZXN1bHQ7CisKKyAgICBtX2NvbnN1bWVyLT5jdXJ2ZVRvQ3ViaWNTbW9vdGgoYmxlbmRBbmltYXRl
ZEZsb2F0UG9pbnQoZnJvbS5wb2ludDIsIHRvLnBvaW50MiwgcHJvZ3Jlc3MpLAorICAgICAgICBi
bGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tLnRhcmdldFBvaW50LCB0by50YXJnZXRQb2ludCwg
cHJvZ3Jlc3MpLAogICAgICAgICBtX2lzSW5GaXJzdEhhbGZPZkFuaW1hdGlvbiA/IG1fZnJvbU1v
ZGUgOiBtX3RvTW9kZSk7Ci0gICAgbV9mcm9tQ3VycmVudFBvaW50ID0gbV9mcm9tTW9kZSA9PSBB
YnNvbHV0ZUNvb3JkaW5hdGVzID8gZnJvbVRhcmdldFBvaW50IDogbV9mcm9tQ3VycmVudFBvaW50
ICsgZnJvbVRhcmdldFBvaW50OwotICAgIG1fdG9DdXJyZW50UG9pbnQgPSBtX3RvTW9kZSA9PSBB
YnNvbHV0ZUNvb3JkaW5hdGVzID8gdG9UYXJnZXRQb2ludCA6IG1fdG9DdXJyZW50UG9pbnQgKyB0
b1RhcmdldFBvaW50OworICAgIG1fZnJvbUN1cnJlbnRQb2ludCA9IG1fZnJvbU1vZGUgPT0gQWJz
b2x1dGVDb29yZGluYXRlcyA/IGZyb20udGFyZ2V0UG9pbnQgOiBtX2Zyb21DdXJyZW50UG9pbnQg
KyBmcm9tLnRhcmdldFBvaW50OworICAgIG1fdG9DdXJyZW50UG9pbnQgPSBtX3RvTW9kZSA9PSBB
YnNvbHV0ZUNvb3JkaW5hdGVzID8gdG8udGFyZ2V0UG9pbnQgOiBtX3RvQ3VycmVudFBvaW50ICsg
dG8udGFyZ2V0UG9pbnQ7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgU1ZHUGF0aEJsZW5k
ZXI6OmJsZW5kQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQoZmxvYXQgcHJvZ3Jlc3MpCiB7Ci0gICAg
RmxvYXRQb2ludCBmcm9tVGFyZ2V0UG9pbnQ7Ci0gICAgRmxvYXRQb2ludCBmcm9tUG9pbnQxOwot
ICAgIEZsb2F0UG9pbnQgdG9UYXJnZXRQb2ludDsKLSAgICBGbG9hdFBvaW50IHRvUG9pbnQxOwot
ICAgIGlmICgobV9mcm9tU291cmNlLmhhc01vcmVEYXRhKCkgJiYgIW1fZnJvbVNvdXJjZS5wYXJz
ZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KGZyb21Qb2ludDEsIGZyb21UYXJnZXRQb2ludCkpCi0g
ICAgICAgIHx8ICFtX3RvU291cmNlLnBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQodG9Qb2lu
dDEsIHRvVGFyZ2V0UG9pbnQpKQorICAgIGF1dG8gcmVzdWx0ID0gcHVsbEZyb21Tb3VyY2VzKG1f
ZnJvbVNvdXJjZSwgbV90b1NvdXJjZSwgJlNWR1BhdGhTb3VyY2U6OnBhcnNlQ3VydmVUb1F1YWRy
YXRpY1NlZ21lbnQpOworICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICBpZiAoIW1fY29uc3VtZXIpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgbV9jb25z
dW1lci0+Y3VydmVUb1F1YWRyYXRpYyhibGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tUG9pbnQx
LCB0b1BvaW50MSwgcHJvZ3Jlc3MpLAotICAgICAgICBibGVuZEFuaW1hdGVkRmxvYXRQb2ludChm
cm9tVGFyZ2V0UG9pbnQsIHRvVGFyZ2V0UG9pbnQsIHByb2dyZXNzKSwKKyAgICBhdXRvIFtmcm9t
LCB0b10gPSAqcmVzdWx0OworCisgICAgbV9jb25zdW1lci0+Y3VydmVUb1F1YWRyYXRpYyhibGVu
ZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tLnBvaW50MSwgdG8ucG9pbnQxLCBwcm9ncmVzcyksCisg
ICAgICAgIGJsZW5kQW5pbWF0ZWRGbG9hdFBvaW50KGZyb20udGFyZ2V0UG9pbnQsIHRvLnRhcmdl
dFBvaW50LCBwcm9ncmVzcyksCiAgICAgICAgIG1faXNJbkZpcnN0SGFsZk9mQW5pbWF0aW9uID8g
bV9mcm9tTW9kZSA6IG1fdG9Nb2RlKTsKLSAgICBtX2Zyb21DdXJyZW50UG9pbnQgPSBtX2Zyb21N
b2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyBmcm9tVGFyZ2V0UG9pbnQgOiBtX2Zyb21DdXJy
ZW50UG9pbnQgKyBmcm9tVGFyZ2V0UG9pbnQ7Ci0gICAgbV90b0N1cnJlbnRQb2ludCA9IG1fdG9N
b2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyB0b1RhcmdldFBvaW50IDogbV90b0N1cnJlbnRQ
b2ludCArIHRvVGFyZ2V0UG9pbnQ7CisgICAgbV9mcm9tQ3VycmVudFBvaW50ID0gbV9mcm9tTW9k
ZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gZnJvbS50YXJnZXRQb2ludCA6IG1fZnJvbUN1cnJl
bnRQb2ludCArIGZyb20udGFyZ2V0UG9pbnQ7CisgICAgbV90b0N1cnJlbnRQb2ludCA9IG1fdG9N
b2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyB0by50YXJnZXRQb2ludCA6IG1fdG9DdXJyZW50
UG9pbnQgKyB0by50YXJnZXRQb2ludDsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBTVkdQ
YXRoQmxlbmRlcjo6YmxlbmRDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudChmbG9hdCBwcm9n
cmVzcykKIHsKLSAgICBGbG9hdFBvaW50IGZyb21UYXJnZXRQb2ludDsKLSAgICBGbG9hdFBvaW50
IHRvVGFyZ2V0UG9pbnQ7Ci0gICAgaWYgKChtX2Zyb21Tb3VyY2UuaGFzTW9yZURhdGEoKSAmJiAh
bV9mcm9tU291cmNlLnBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQoZnJvbVRhcmdl
dFBvaW50KSkKLSAgICAgICAgfHwgIW1fdG9Tb3VyY2UucGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21v
b3RoU2VnbWVudCh0b1RhcmdldFBvaW50KSkKKyAgICBhdXRvIHJlc3VsdCA9IHB1bGxGcm9tU291
cmNlcyhtX2Zyb21Tb3VyY2UsIG1fdG9Tb3VyY2UsICZTVkdQYXRoU291cmNlOjpwYXJzZUN1cnZl
VG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KTsKKyAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgaWYgKCFtX2NvbnN1bWVyKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
IAotICAgIG1fY29uc3VtZXItPmN1cnZlVG9RdWFkcmF0aWNTbW9vdGgoYmxlbmRBbmltYXRlZEZs
b2F0UG9pbnQoZnJvbVRhcmdldFBvaW50LCB0b1RhcmdldFBvaW50LCBwcm9ncmVzcyksIG1faXNJ
bkZpcnN0SGFsZk9mQW5pbWF0aW9uID8gbV9mcm9tTW9kZSA6IG1fdG9Nb2RlKTsKLSAgICBtX2Zy
b21DdXJyZW50UG9pbnQgPSBtX2Zyb21Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyBmcm9t
VGFyZ2V0UG9pbnQgOiBtX2Zyb21DdXJyZW50UG9pbnQgKyBmcm9tVGFyZ2V0UG9pbnQ7Ci0gICAg
bV90b0N1cnJlbnRQb2ludCA9IG1fdG9Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyB0b1Rh
cmdldFBvaW50IDogbV90b0N1cnJlbnRQb2ludCArIHRvVGFyZ2V0UG9pbnQ7CisgICAgYXV0byBb
ZnJvbSwgdG9dID0gKnJlc3VsdDsKKworICAgIG1fY29uc3VtZXItPmN1cnZlVG9RdWFkcmF0aWNT
bW9vdGgoYmxlbmRBbmltYXRlZEZsb2F0UG9pbnQoZnJvbS50YXJnZXRQb2ludCwgdG8udGFyZ2V0
UG9pbnQsIHByb2dyZXNzKSwgbV9pc0luRmlyc3RIYWxmT2ZBbmltYXRpb24gPyBtX2Zyb21Nb2Rl
IDogbV90b01vZGUpOworICAgIG1fZnJvbUN1cnJlbnRQb2ludCA9IG1fZnJvbU1vZGUgPT0gQWJz
b2x1dGVDb29yZGluYXRlcyA/IGZyb20udGFyZ2V0UG9pbnQgOiBtX2Zyb21DdXJyZW50UG9pbnQg
KyBmcm9tLnRhcmdldFBvaW50OworICAgIG1fdG9DdXJyZW50UG9pbnQgPSBtX3RvTW9kZSA9PSBB
YnNvbHV0ZUNvb3JkaW5hdGVzID8gdG8udGFyZ2V0UG9pbnQgOiBtX3RvQ3VycmVudFBvaW50ICsg
dG8udGFyZ2V0UG9pbnQ7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgU1ZHUGF0aEJsZW5k
ZXI6OmJsZW5kQXJjVG9TZWdtZW50KGZsb2F0IHByb2dyZXNzKQogewotICAgIGZsb2F0IGZyb21S
eCA9IDA7Ci0gICAgZmxvYXQgZnJvbVJ5ID0gMDsKLSAgICBmbG9hdCBmcm9tQW5nbGUgPSAwOwot
ICAgIGJvb2wgZnJvbUxhcmdlQXJjID0gZmFsc2U7Ci0gICAgYm9vbCBmcm9tU3dlZXAgPSBmYWxz
ZTsKLSAgICBGbG9hdFBvaW50IGZyb21UYXJnZXRQb2ludDsKLSAgICBmbG9hdCB0b1J4ID0gMDsK
LSAgICBmbG9hdCB0b1J5ID0gMDsKLSAgICBmbG9hdCB0b0FuZ2xlID0gMDsKLSAgICBib29sIHRv
TGFyZ2VBcmMgPSBmYWxzZTsKLSAgICBib29sIHRvU3dlZXAgPSBmYWxzZTsKLSAgICBGbG9hdFBv
aW50IHRvVGFyZ2V0UG9pbnQ7Ci0gICAgaWYgKChtX2Zyb21Tb3VyY2UuaGFzTW9yZURhdGEoKSAm
JiAhbV9mcm9tU291cmNlLnBhcnNlQXJjVG9TZWdtZW50KGZyb21SeCwgZnJvbVJ5LCBmcm9tQW5n
bGUsIGZyb21MYXJnZUFyYywgZnJvbVN3ZWVwLCBmcm9tVGFyZ2V0UG9pbnQpKQotICAgICAgICB8
fCAhbV90b1NvdXJjZS5wYXJzZUFyY1RvU2VnbWVudCh0b1J4LCB0b1J5LCB0b0FuZ2xlLCB0b0xh
cmdlQXJjLCB0b1N3ZWVwLCB0b1RhcmdldFBvaW50KSkKKyAgICBhdXRvIHJlc3VsdCA9IHB1bGxG
cm9tU291cmNlcyhtX2Zyb21Tb3VyY2UsIG1fdG9Tb3VyY2UsICZTVkdQYXRoU291cmNlOjpwYXJz
ZUFyY1RvU2VnbWVudCk7CisgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIGlmICghbV9jb25zdW1lcikKICAgICAgICAgcmV0dXJuIHRydWU7CiAKKyAgICBhdXRv
IFtmcm9tLCB0b10gPSAqcmVzdWx0OworCiAgICAgaWYgKG1fYWRkVHlwZXNDb3VudCkgewogICAg
ICAgICBBU1NFUlQobV9mcm9tTW9kZSA9PSBtX3RvTW9kZSk7Ci0gICAgICAgIEZsb2F0UG9pbnQg
c2NhbGVkVG9UYXJnZXRQb2ludCA9IHRvVGFyZ2V0UG9pbnQ7CisgICAgICAgIGF1dG8gc2NhbGVk
VG9UYXJnZXRQb2ludCA9IHRvLnRhcmdldFBvaW50OwogICAgICAgICBzY2FsZWRUb1RhcmdldFBv
aW50LnNjYWxlKG1fYWRkVHlwZXNDb3VudCk7Ci0gICAgICAgIG1fY29uc3VtZXItPmFyY1RvKGZy
b21SeCArIHRvUnggKiBtX2FkZFR5cGVzQ291bnQsCi0gICAgICAgICAgICBmcm9tUnkgKyB0b1J5
ICogbV9hZGRUeXBlc0NvdW50LAotICAgICAgICAgICAgZnJvbUFuZ2xlICsgdG9BbmdsZSAqIG1f
YWRkVHlwZXNDb3VudCwKLSAgICAgICAgICAgIGZyb21MYXJnZUFyYyB8fCB0b0xhcmdlQXJjLAot
ICAgICAgICAgICAgZnJvbVN3ZWVwIHx8IHRvU3dlZXAsCi0gICAgICAgICAgICBmcm9tVGFyZ2V0
UG9pbnQgKyBzY2FsZWRUb1RhcmdldFBvaW50LAorICAgICAgICBtX2NvbnN1bWVyLT5hcmNUbyhm
cm9tLnJ4ICsgdG8ucnggKiBtX2FkZFR5cGVzQ291bnQsCisgICAgICAgICAgICBmcm9tLnJ4ICsg
dG8ucnkgKiBtX2FkZFR5cGVzQ291bnQsCisgICAgICAgICAgICBmcm9tLmFuZ2xlICsgdG8uYW5n
bGUgKiBtX2FkZFR5cGVzQ291bnQsCisgICAgICAgICAgICBmcm9tLmxhcmdlQXJjIHx8IHRvLmxh
cmdlQXJjLAorICAgICAgICAgICAgZnJvbS5zd2VlcCB8fCB0by5zd2VlcCwKKyAgICAgICAgICAg
IGZyb20udGFyZ2V0UG9pbnQgKyBzY2FsZWRUb1RhcmdldFBvaW50LAogICAgICAgICAgICAgbV9m
cm9tTW9kZSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgbV9jb25zdW1lci0+YXJjVG8oYmxlbmQo
ZnJvbVJ4LCB0b1J4LCBwcm9ncmVzcyksCi0gICAgICAgICAgICBibGVuZChmcm9tUnksIHRvUnks
IHByb2dyZXNzKSwKLSAgICAgICAgICAgIGJsZW5kKGZyb21BbmdsZSwgdG9BbmdsZSwgcHJvZ3Jl
c3MpLAotICAgICAgICAgICAgbV9pc0luRmlyc3RIYWxmT2ZBbmltYXRpb24gPyBmcm9tTGFyZ2VB
cmMgOiB0b0xhcmdlQXJjLAotICAgICAgICAgICAgbV9pc0luRmlyc3RIYWxmT2ZBbmltYXRpb24g
PyBmcm9tU3dlZXAgOiB0b1N3ZWVwLAotICAgICAgICAgICAgYmxlbmRBbmltYXRlZEZsb2F0UG9p
bnQoZnJvbVRhcmdldFBvaW50LCB0b1RhcmdldFBvaW50LCBwcm9ncmVzcyksCisgICAgICAgIG1f
Y29uc3VtZXItPmFyY1RvKGJsZW5kKGZyb20ucngsIHRvLnJ4LCBwcm9ncmVzcyksCisgICAgICAg
ICAgICBibGVuZChmcm9tLnJ5LCB0by5yeSwgcHJvZ3Jlc3MpLAorICAgICAgICAgICAgYmxlbmQo
ZnJvbS5hbmdsZSwgdG8uYW5nbGUsIHByb2dyZXNzKSwKKyAgICAgICAgICAgIG1faXNJbkZpcnN0
SGFsZk9mQW5pbWF0aW9uID8gZnJvbS5sYXJnZUFyYyA6IHRvLmxhcmdlQXJjLAorICAgICAgICAg
ICAgbV9pc0luRmlyc3RIYWxmT2ZBbmltYXRpb24gPyBmcm9tLnN3ZWVwIDogdG8uc3dlZXAsCisg
ICAgICAgICAgICBibGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tLnRhcmdldFBvaW50LCB0by50
YXJnZXRQb2ludCwgcHJvZ3Jlc3MpLAogICAgICAgICAgICAgbV9pc0luRmlyc3RIYWxmT2ZBbmlt
YXRpb24gPyBtX2Zyb21Nb2RlIDogbV90b01vZGUpOwogICAgIH0KLSAgICBtX2Zyb21DdXJyZW50
UG9pbnQgPSBtX2Zyb21Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyBmcm9tVGFyZ2V0UG9p
bnQgOiBtX2Zyb21DdXJyZW50UG9pbnQgKyBmcm9tVGFyZ2V0UG9pbnQ7Ci0gICAgbV90b0N1cnJl
bnRQb2ludCA9IG1fdG9Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyB0b1RhcmdldFBvaW50
IDogbV90b0N1cnJlbnRQb2ludCArIHRvVGFyZ2V0UG9pbnQ7CisgICAgbV9mcm9tQ3VycmVudFBv
aW50ID0gbV9mcm9tTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gZnJvbS50YXJnZXRQb2lu
dCA6IG1fZnJvbUN1cnJlbnRQb2ludCArIGZyb20udGFyZ2V0UG9pbnQ7CisgICAgbV90b0N1cnJl
bnRQb2ludCA9IG1fdG9Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyB0by50YXJnZXRQb2lu
dCA6IG1fdG9DdXJyZW50UG9pbnQgKyB0by50YXJnZXRQb2ludDsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIApAQCAtMzUwLDIwICszNDgsMjIgQEAgYm9vbCBTVkdQYXRoQmxlbmRlcjo6Y2FuQmxlbmRQ
YXRocygpCiAgICAgZmxvYXQgcHJvZ3Jlc3MgPSAwLjU7CiAgICAgYm9vbCBmcm9tU291cmNlSGFk
RGF0YSA9IG1fZnJvbVNvdXJjZS5oYXNNb3JlRGF0YSgpOwogICAgIHdoaWxlIChtX3RvU291cmNl
Lmhhc01vcmVEYXRhKCkpIHsKLSAgICAgICAgU1ZHUGF0aFNlZ1R5cGUgZnJvbUNvbW1hbmQ7Ci0g
ICAgICAgIFNWR1BhdGhTZWdUeXBlIHRvQ29tbWFuZDsKLSAgICAgICAgaWYgKChmcm9tU291cmNl
SGFkRGF0YSAmJiAhbV9mcm9tU291cmNlLnBhcnNlU1ZHU2VnbWVudFR5cGUoZnJvbUNvbW1hbmQp
KSB8fCAhbV90b1NvdXJjZS5wYXJzZVNWR1NlZ21lbnRUeXBlKHRvQ29tbWFuZCkpCisgICAgICAg
IGF1dG8gZnJvbUNvbW1hbmQgPSBtX2Zyb21Tb3VyY2UucGFyc2VTVkdTZWdtZW50VHlwZSgpOwor
ICAgICAgICBpZiAoZnJvbVNvdXJjZUhhZERhdGEgJiYgIWZyb21Db21tYW5kKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICBhdXRvIHRvQ29tbWFuZCA9IG1fdG9Tb3VyY2UucGFy
c2VTVkdTZWdtZW50VHlwZSgpOworICAgICAgICBpZiAoIXRvQ29tbWFuZCkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgICAgICBtX3RvTW9kZSA9IGNvb3JkaW5hdGVNb2RlT2ZDb21t
YW5kKHRvQ29tbWFuZCk7Ci0gICAgICAgIG1fZnJvbU1vZGUgPSBmcm9tU291cmNlSGFkRGF0YSA/
IGNvb3JkaW5hdGVNb2RlT2ZDb21tYW5kKGZyb21Db21tYW5kKSA6IG1fdG9Nb2RlOworICAgICAg
ICBtX3RvTW9kZSA9IGNvb3JkaW5hdGVNb2RlT2ZDb21tYW5kKCp0b0NvbW1hbmQpOworICAgICAg
ICBtX2Zyb21Nb2RlID0gZnJvbVNvdXJjZUhhZERhdGEgPyBjb29yZGluYXRlTW9kZU9mQ29tbWFu
ZCgqZnJvbUNvbW1hbmQpIDogbV90b01vZGU7CiAgICAgICAgIGlmIChtX2Zyb21Nb2RlICE9IG1f
dG9Nb2RlICYmIG1fYWRkVHlwZXNDb3VudCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgICAgICBpZiAoZnJvbVNvdXJjZUhhZERhdGEgJiYgIWlzU2VnbWVudEVxdWFsKGZyb21Db21t
YW5kLCB0b0NvbW1hbmQsIG1fZnJvbU1vZGUsIG1fdG9Nb2RlKSkKKyAgICAgICAgaWYgKGZyb21T
b3VyY2VIYWREYXRhICYmICFpc1NlZ21lbnRFcXVhbCgqZnJvbUNvbW1hbmQsICp0b0NvbW1hbmQs
IG1fZnJvbU1vZGUsIG1fdG9Nb2RlKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
ICAgICBzd2l0Y2ggKHRvQ29tbWFuZCkgeworICAgICAgICBzd2l0Y2ggKCp0b0NvbW1hbmQpIHsK
ICAgICAgICAgY2FzZSBQYXRoU2VnTW92ZVRvUmVsOgogICAgICAgICBjYXNlIFBhdGhTZWdNb3Zl
VG9BYnM6CiAgICAgICAgICAgICBpZiAoIWJsZW5kTW92ZVRvU2VnbWVudChwcm9ncmVzcykpCkBA
IC00MzMsMTkgKzQzMywyNiBAQCBib29sIFNWR1BhdGhCbGVuZGVyOjpibGVuZEFuaW1hdGVkUGF0
aChmCiAgICAgYm9vbCBmcm9tU291cmNlSGFkRGF0YSA9IG1fZnJvbVNvdXJjZS5oYXNNb3JlRGF0
YSgpOwogICAgIHdoaWxlIChtX3RvU291cmNlLmhhc01vcmVEYXRhKCkpIHsKICAgICAgICAgU1ZH
UGF0aFNlZ1R5cGUgZnJvbUNvbW1hbmQ7Ci0gICAgICAgIFNWR1BhdGhTZWdUeXBlIHRvQ29tbWFu
ZDsKLSAgICAgICAgaWYgKChmcm9tU291cmNlSGFkRGF0YSAmJiAhbV9mcm9tU291cmNlLnBhcnNl
U1ZHU2VnbWVudFR5cGUoZnJvbUNvbW1hbmQpKSB8fCAhbV90b1NvdXJjZS5wYXJzZVNWR1NlZ21l
bnRUeXBlKHRvQ29tbWFuZCkpCisgICAgICAgIGlmIChmcm9tU291cmNlSGFkRGF0YSkgeworICAg
ICAgICAgICAgYXV0byBwYXJzZWRGcm9tQ29tbWFuZCA9IG1fZnJvbVNvdXJjZS5wYXJzZVNWR1Nl
Z21lbnRUeXBlKCk7CisgICAgICAgICAgICBpZiAoIXBhcnNlZEZyb21Db21tYW5kKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGZyb21Db21tYW5kID0gKnBhcnNl
ZEZyb21Db21tYW5kCisgICAgICAgIH0KKyAgICAgICAgYXV0byB0b0NvbW1hbmQgPSBtX3RvU291
cmNlLnBhcnNlU1ZHU2VnbWVudFR5cGUoKTsKKyAgICAgICAgaWYgKCF0b0NvbW1hbmQpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIFNWR1BhdGhTZWdUeXBlIHRvQ29tbWFuZCA9
ICp0b0NvbW1hbmQ7CiAKLSAgICAgICAgbV90b01vZGUgPSBjb29yZGluYXRlTW9kZU9mQ29tbWFu
ZCh0b0NvbW1hbmQpOwotICAgICAgICBtX2Zyb21Nb2RlID0gZnJvbVNvdXJjZUhhZERhdGEgPyBj
b29yZGluYXRlTW9kZU9mQ29tbWFuZChmcm9tQ29tbWFuZCkgOiBtX3RvTW9kZTsKKyAgICAgICAg
bV90b01vZGUgPSBjb29yZGluYXRlTW9kZU9mQ29tbWFuZCgqdG9Db21tYW5kKTsKKyAgICAgICAg
bV9mcm9tTW9kZSA9IGZyb21Tb3VyY2VIYWREYXRhID8gY29vcmRpbmF0ZU1vZGVPZkNvbW1hbmQo
KmZyb21Db21tYW5kKSA6IG1fdG9Nb2RlOwogICAgICAgICBpZiAobV9mcm9tTW9kZSAhPSBtX3Rv
TW9kZSAmJiBtX2FkZFR5cGVzQ291bnQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICAgICAgaWYgKGZyb21Tb3VyY2VIYWREYXRhICYmICFpc1NlZ21lbnRFcXVhbChmcm9tQ29tbWFu
ZCwgdG9Db21tYW5kLCBtX2Zyb21Nb2RlLCBtX3RvTW9kZSkpCisgICAgICAgIGlmIChmcm9tU291
cmNlSGFkRGF0YSAmJiAhaXNTZWdtZW50RXF1YWwoKmZyb21Db21tYW5kLCAqdG9Db21tYW5kLCBt
X2Zyb21Nb2RlLCBtX3RvTW9kZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAg
ICAgc3dpdGNoICh0b0NvbW1hbmQpIHsKKyAgICAgICAgc3dpdGNoICgqdG9Db21tYW5kKSB7CiAg
ICAgICAgIGNhc2UgUGF0aFNlZ01vdmVUb1JlbDoKICAgICAgICAgY2FzZSBQYXRoU2VnTW92ZVRv
QWJzOgogICAgICAgICAgICAgaWYgKCFibGVuZE1vdmVUb1NlZ21lbnQocHJvZ3Jlc3MpKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3RyZWFtU291cmNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2UuY3BwCShy
ZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW1T
b3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3OCArMzQsODYgQEAgYm9vbCBTVkdQYXRo
Qnl0ZVN0cmVhbVNvdXJjZTo6aGFzTW9yZURhdAogICAgIHJldHVybiBtX3N0cmVhbUN1cnJlbnQg
PCBtX3N0cmVhbUVuZDsKIH0KIAotYm9vbCBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VT
VkdTZWdtZW50VHlwZShTVkdQYXRoU2VnVHlwZSYgcGF0aFNlZ1R5cGUpCitTVkdQYXRoU2VnVHlw
ZSBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6bmV4dENvbW1hbmQoU1ZHUGF0aFNlZ1R5cGUpCiB7
Ci0gICAgcGF0aFNlZ1R5cGUgPSBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnVHlwZT4ocmVhZFNWR1Nl
Z21lbnRUeXBlKCkpOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxT
VkdQYXRoU2VnVHlwZT4ocmVhZFNWR1NlZ21lbnRUeXBlKCkpOwogfQogCi1TVkdQYXRoU2VnVHlw
ZSBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6bmV4dENvbW1hbmQoU1ZHUGF0aFNlZ1R5cGUpCitP
cHRpb25hbDxTVkdQYXRoU2VnVHlwZT4gU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlU1ZH
U2VnbWVudFR5cGUoKQogewogICAgIHJldHVybiBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnVHlwZT4o
cmVhZFNWR1NlZ21lbnRUeXBlKCkpOwogfQogCi1ib29sIFNWR1BhdGhCeXRlU3RyZWFtU291cmNl
OjpwYXJzZU1vdmVUb1NlZ21lbnQoRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCitPcHRpb25hbDxT
VkdQYXRoU291cmNlOjpNb3ZlVG9TZWdtZW50PiBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFy
c2VNb3ZlVG9TZWdtZW50KCkKIHsKLSAgICB0YXJnZXRQb2ludCA9IHJlYWRGbG9hdFBvaW50KCk7
Ci0gICAgcmV0dXJuIHRydWU7CisgICAgTW92ZVRvU2VnbWVudCBzZWdtZW50OworICAgIHNlZ21l
bnQudGFyZ2V0UG9pbnQgPSByZWFkRmxvYXRQb2ludCgpOworICAgIHJldHVybiBzZWdtZW50Owog
fQogCi1ib29sIFNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZUxpbmVUb1NlZ21lbnQoRmxv
YXRQb2ludCYgdGFyZ2V0UG9pbnQpCitPcHRpb25hbDxTVkdQYXRoU291cmNlOjpMaW5lVG9TZWdt
ZW50PiBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VMaW5lVG9TZWdtZW50KCkKIHsKLSAg
ICB0YXJnZXRQb2ludCA9IHJlYWRGbG9hdFBvaW50KCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAg
TGluZVRvU2VnbWVudCBzZWdtZW50OworICAgIHNlZ21lbnQudGFyZ2V0UG9pbnQgPSByZWFkRmxv
YXRQb2ludCgpOworICAgIHJldHVybiBzZWdtZW50OwogfQogCi1ib29sIFNWR1BhdGhCeXRlU3Ry
ZWFtU291cmNlOjpwYXJzZUxpbmVUb0hvcml6b250YWxTZWdtZW50KGZsb2F0JiB4KQorT3B0aW9u
YWw8U1ZHUGF0aFNvdXJjZTo6TGluZVRvSG9yaXpvbnRhbFNlZ21lbnQ+IFNWR1BhdGhCeXRlU3Ry
ZWFtU291cmNlOjpwYXJzZUxpbmVUb0hvcml6b250YWxTZWdtZW50KCkKIHsKLSAgICB4ID0gcmVh
ZEZsb2F0KCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQg
c2VnbWVudDsKKyAgICBzZWdtZW50LnggPSByZWFkRmxvYXQoKTsKKyAgICByZXR1cm4gc2VnbWVu
dDsKIH0KIAotYm9vbCBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VMaW5lVG9WZXJ0aWNh
bFNlZ21lbnQoZmxvYXQmIHkpCitPcHRpb25hbDxTVkdQYXRoU291cmNlOjpMaW5lVG9WZXJ0aWNh
bFNlZ21lbnQ+IFNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZUxpbmVUb1ZlcnRpY2FsU2Vn
bWVudCgpCiB7Ci0gICAgeSA9IHJlYWRGbG9hdCgpOwotICAgIHJldHVybiB0cnVlOworICAgIExp
bmVUb1ZlcnRpY2FsU2VnbWVudCBzZWdtZW50OworICAgIHNlZ21lbnQueSA9IHJlYWRGbG9hdCgp
OworICAgIHJldHVybiBzZWdtZW50OwogfQogCi1ib29sIFNWR1BhdGhCeXRlU3RyZWFtU291cmNl
OjpwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQoRmxvYXRQb2ludCYgcG9pbnQxLCBGbG9hdFBvaW50
JiBwb2ludDIsIEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQorT3B0aW9uYWw8U1ZHUGF0aFNvdXJj
ZTo6Q3VydmVUb0N1YmljU2VnbWVudD4gU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlQ3Vy
dmVUb0N1YmljU2VnbWVudCgpCiB7Ci0gICAgcG9pbnQxID0gcmVhZEZsb2F0UG9pbnQoKTsKLSAg
ICBwb2ludDIgPSByZWFkRmxvYXRQb2ludCgpOwotICAgIHRhcmdldFBvaW50ID0gcmVhZEZsb2F0
UG9pbnQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBDdXJ2ZVRvQ3ViaWNTZWdtZW50IHNlZ21l
bnQ7CisgICAgc2VnbWVudC5wb2ludDEgPSByZWFkRmxvYXRQb2ludCgpOworICAgIHNlZ21lbnQu
cG9pbnQyID0gcmVhZEZsb2F0UG9pbnQoKTsKKyAgICBzZWdtZW50LnRhcmdldFBvaW50ID0gcmVh
ZEZsb2F0UG9pbnQoKTsKKyAgICByZXR1cm4gc2VnbWVudDsKIH0KIAotYm9vbCBTVkdQYXRoQnl0
ZVN0cmVhbVNvdXJjZTo6cGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KEZsb2F0UG9pbnQm
IHBvaW50MiwgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCitPcHRpb25hbDxTVkdQYXRoU291cmNl
OjpDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50PiBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFy
c2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KCkKIHsKLSAgICBwb2ludDIgPSByZWFkRmxvYXRQ
b2ludCgpOwotICAgIHRhcmdldFBvaW50ID0gcmVhZEZsb2F0UG9pbnQoKTsKLSAgICByZXR1cm4g
dHJ1ZTsKKyAgICBDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50IHNlZ21lbnQ7CisgICAgc2VnbWVu
dC5wb2ludDIgPSByZWFkRmxvYXRQb2ludCgpOworICAgIHNlZ21lbnQudGFyZ2V0UG9pbnQgPSBy
ZWFkRmxvYXRQb2ludCgpOworICAgIHJldHVybiBzZWdtZW50OwogfQogCi1ib29sIFNWR1BhdGhC
eXRlU3RyZWFtU291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KEZsb2F0UG9pbnQm
IHBvaW50MSwgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCitPcHRpb25hbDxTVkdQYXRoU291cmNl
OjpDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudD4gU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNl
Q3VydmVUb1F1YWRyYXRpY1NlZ21lbnQoKQogewotICAgIHBvaW50MSA9IHJlYWRGbG9hdFBvaW50
KCk7Ci0gICAgdGFyZ2V0UG9pbnQgPSByZWFkRmxvYXRQb2ludCgpOwotICAgIHJldHVybiB0cnVl
OworICAgIEN1cnZlVG9RdWFkcmF0aWNTZWdtZW50IHNlZ21lbnQ7CisgICAgc2VnbWVudC5wb2lu
dDEgPSByZWFkRmxvYXRQb2ludCgpOworICAgIHNlZ21lbnQudGFyZ2V0UG9pbnQgPSByZWFkRmxv
YXRQb2ludCgpOworICAgIHJldHVybiBzZWdtZW50OwogfQogCi1ib29sIFNWR1BhdGhCeXRlU3Ry
ZWFtU291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KEZsb2F0UG9pbnQm
IHRhcmdldFBvaW50KQorT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6Q3VydmVUb1F1YWRyYXRpY1Nt
b290aFNlZ21lbnQ+IFNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0
aWNTbW9vdGhTZWdtZW50KCkKIHsKLSAgICB0YXJnZXRQb2ludCA9IHJlYWRGbG9hdFBvaW50KCk7
Ci0gICAgcmV0dXJuIHRydWU7CisgICAgQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQgc2Vn
bWVudDsKKyAgICBzZWdtZW50LnRhcmdldFBvaW50ID0gcmVhZEZsb2F0UG9pbnQoKTsKKyAgICBy
ZXR1cm4gc2VnbWVudDsKIH0KIAotYm9vbCBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VB
cmNUb1NlZ21lbnQoZmxvYXQmIHJ4LCBmbG9hdCYgcnksIGZsb2F0JiBhbmdsZSwgYm9vbCYgbGFy
Z2VBcmMsIGJvb2wmIHN3ZWVwLCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCkKK09wdGlvbmFsPFNW
R1BhdGhTb3VyY2U6OkFyY1RvU2VnbWVudD4gU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNl
QXJjVG9TZWdtZW50KCkKIHsKLSAgICByeCA9IHJlYWRGbG9hdCgpOwotICAgIHJ5ID0gcmVhZEZs
b2F0KCk7Ci0gICAgYW5nbGUgPSByZWFkRmxvYXQoKTsKLSAgICBsYXJnZUFyYyA9IHJlYWRGbGFn
KCk7Ci0gICAgc3dlZXAgPSByZWFkRmxhZygpOwotICAgIHRhcmdldFBvaW50ID0gcmVhZEZsb2F0
UG9pbnQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBBcmNUb1NlZ21lbnQgc2VnbWVudDsKKyAg
ICBzZWdtZW50LnJ4ID0gcmVhZEZsb2F0KCk7CisgICAgc2VnbWVudC5yeSA9IHJlYWRGbG9hdCgp
OworICAgIHNlZ21lbnQuYW5nbGUgPSByZWFkRmxvYXQoKTsKKyAgICBzZWdtZW50LmxhcmdlQXJj
ID0gcmVhZEZsYWcoKTsKKyAgICBzZWdtZW50LnN3ZWVwID0gcmVhZEZsYWcoKTsKKyAgICBzZWdt
ZW50LnRhcmdldFBvaW50ID0gcmVhZEZsb2F0UG9pbnQoKTsKKyAgICByZXR1cm4gc2VnbWVudDsK
IH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3RyZWFtU291cmNl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3RyZWFtU291
cmNlLmgJKHJldmlzaW9uIDI2MzE3NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQnl0
ZVN0cmVhbVNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxOCArMzIsMTggQEAgcHVibGlj
OgogcHJpdmF0ZToKICAgICBib29sIGhhc01vcmVEYXRhKCkgY29uc3QgZmluYWw7CiAgICAgYm9v
bCBtb3ZlVG9OZXh0VG9rZW4oKSBmaW5hbCB7IHJldHVybiB0cnVlOyB9Ci0gICAgYm9vbCBwYXJz
ZVNWR1NlZ21lbnRUeXBlKFNWR1BhdGhTZWdUeXBlJikgZmluYWw7CiAgICAgU1ZHUGF0aFNlZ1R5
cGUgbmV4dENvbW1hbmQoU1ZHUGF0aFNlZ1R5cGUpIGZpbmFsOwogCi0gICAgYm9vbCBwYXJzZU1v
dmVUb1NlZ21lbnQoRmxvYXRQb2ludCYpIGZpbmFsOwotICAgIGJvb2wgcGFyc2VMaW5lVG9TZWdt
ZW50KEZsb2F0UG9pbnQmKSBmaW5hbDsKLSAgICBib29sIHBhcnNlTGluZVRvSG9yaXpvbnRhbFNl
Z21lbnQoZmxvYXQmKSBmaW5hbDsKLSAgICBib29sIHBhcnNlTGluZVRvVmVydGljYWxTZWdtZW50
KGZsb2F0JikgZmluYWw7Ci0gICAgYm9vbCBwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQoRmxvYXRQ
b2ludCYsIEZsb2F0UG9pbnQmLCBGbG9hdFBvaW50JikgZmluYWw7Ci0gICAgYm9vbCBwYXJzZUN1
cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQoRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmKSBmaW5hbDsK
LSAgICBib29sIHBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQoRmxvYXRQb2ludCYsIEZsb2F0
UG9pbnQmKSBmaW5hbDsKLSAgICBib29sIHBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21l
bnQoRmxvYXRQb2ludCYpIGZpbmFsOwotICAgIGJvb2wgcGFyc2VBcmNUb1NlZ21lbnQoZmxvYXQm
LCBmbG9hdCYsIGZsb2F0JiwgYm9vbCYsIGJvb2wmLCBGbG9hdFBvaW50JikgZmluYWw7CisgICAg
T3B0aW9uYWw8U1ZHUGF0aFNlZ1R5cGU+IHBhcnNlU1ZHU2VnbWVudFR5cGUoKSBmaW5hbDsKKyAg
ICBPcHRpb25hbDxNb3ZlVG9TZWdtZW50PiBwYXJzZU1vdmVUb1NlZ21lbnQoKSBmaW5hbDsKKyAg
ICBPcHRpb25hbDxMaW5lVG9TZWdtZW50PiBwYXJzZUxpbmVUb1NlZ21lbnQoKSBmaW5hbDsKKyAg
ICBPcHRpb25hbDxMaW5lVG9Ib3Jpem9udGFsU2VnbWVudD4gcGFyc2VMaW5lVG9Ib3Jpem9udGFs
U2VnbWVudCgpIGZpbmFsOworICAgIE9wdGlvbmFsPExpbmVUb1ZlcnRpY2FsU2VnbWVudD4gcGFy
c2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnQoKSBmaW5hbDsKKyAgICBPcHRpb25hbDxDdXJ2ZVRvQ3Vi
aWNTZWdtZW50PiBwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQoKSBmaW5hbDsKKyAgICBPcHRpb25h
bDxDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50PiBwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21l
bnQoKSBmaW5hbDsKKyAgICBPcHRpb25hbDxDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudD4gcGFyc2VD
dXJ2ZVRvUXVhZHJhdGljU2VnbWVudCgpIGZpbmFsOworICAgIE9wdGlvbmFsPEN1cnZlVG9RdWFk
cmF0aWNTbW9vdGhTZWdtZW50PiBwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KCkg
ZmluYWw7CisgICAgT3B0aW9uYWw8QXJjVG9TZWdtZW50PiBwYXJzZUFyY1RvU2VnbWVudCgpIGZp
bmFsOwogCiAjaWYgQ09NUElMRVIoTVNWQykKICNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NzAx
KQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhQYXJzZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoUGFyc2VyLmNwcAkocmV2aXNpb24gMjYzMTc2
KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03MywxMDIgKzczLDk5IEBAIHZvaWQgU1ZHUGF0aFBhcnNlcjo6cGFyc2VDbG9zZVBhdGhT
ZWdtZW4KIAogYm9vbCBTVkdQYXRoUGFyc2VyOjpwYXJzZU1vdmVUb1NlZ21lbnQoKQogewotICAg
IEZsb2F0UG9pbnQgdGFyZ2V0UG9pbnQ7Ci0gICAgaWYgKCFtX3NvdXJjZS5wYXJzZU1vdmVUb1Nl
Z21lbnQodGFyZ2V0UG9pbnQpKQorICAgIGF1dG8gcmVzdWx0ID0gbV9zb3VyY2UucGFyc2VNb3Zl
VG9TZWdtZW50KCk7CisgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIGlmIChtX3BhdGhQYXJzaW5nTW9kZSA9PSBOb3JtYWxpemVkUGFyc2luZykgewogICAgICAg
ICBpZiAobV9tb2RlID09IFJlbGF0aXZlQ29vcmRpbmF0ZXMpCi0gICAgICAgICAgICBtX2N1cnJl
bnRQb2ludCArPSB0YXJnZXRQb2ludDsKKyAgICAgICAgICAgIG1fY3VycmVudFBvaW50ICs9IHJl
c3VsdC0+dGFyZ2V0UG9pbnQ7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fY3VycmVudFBv
aW50ID0gdGFyZ2V0UG9pbnQ7CisgICAgICAgICAgICBtX2N1cnJlbnRQb2ludCA9IHJlc3VsdC0+
dGFyZ2V0UG9pbnQ7CiAgICAgICAgIG1fc3ViUGF0aFBvaW50ID0gbV9jdXJyZW50UG9pbnQ7CiAg
ICAgICAgIG1fY29uc3VtZXIubW92ZVRvKG1fY3VycmVudFBvaW50LCBtX2Nsb3NlUGF0aCwgQWJz
b2x1dGVDb29yZGluYXRlcyk7CiAgICAgfSBlbHNlCi0gICAgICAgIG1fY29uc3VtZXIubW92ZVRv
KHRhcmdldFBvaW50LCBtX2Nsb3NlUGF0aCwgbV9tb2RlKTsKKyAgICAgICAgbV9jb25zdW1lci5t
b3ZlVG8ocmVzdWx0LT50YXJnZXRQb2ludCwgbV9jbG9zZVBhdGgsIG1fbW9kZSk7CiAgICAgbV9j
bG9zZVBhdGggPSBmYWxzZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBTVkdQYXRoUGFy
c2VyOjpwYXJzZUxpbmVUb1NlZ21lbnQoKQogewotICAgIEZsb2F0UG9pbnQgdGFyZ2V0UG9pbnQ7
Ci0gICAgaWYgKCFtX3NvdXJjZS5wYXJzZUxpbmVUb1NlZ21lbnQodGFyZ2V0UG9pbnQpKQorICAg
IGF1dG8gcmVzdWx0ID0gbV9zb3VyY2UucGFyc2VMaW5lVG9TZWdtZW50KCk7CisgICAgaWYgKCFy
ZXN1bHQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChtX3BhdGhQYXJzaW5nTW9k
ZSA9PSBOb3JtYWxpemVkUGFyc2luZykgewogICAgICAgICBpZiAobV9tb2RlID09IFJlbGF0aXZl
Q29vcmRpbmF0ZXMpCi0gICAgICAgICAgICBtX2N1cnJlbnRQb2ludCArPSB0YXJnZXRQb2ludDsK
KyAgICAgICAgICAgIG1fY3VycmVudFBvaW50ICs9IHJlc3VsdC0+dGFyZ2V0UG9pbnQ7CiAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIG1fY3VycmVudFBvaW50ID0gdGFyZ2V0UG9pbnQ7CisgICAg
ICAgICAgICBtX2N1cnJlbnRQb2ludCA9IHJlc3VsdC0+dGFyZ2V0UG9pbnQ7CiAgICAgICAgIG1f
Y29uc3VtZXIubGluZVRvKG1fY3VycmVudFBvaW50LCBBYnNvbHV0ZUNvb3JkaW5hdGVzKTsKICAg
ICB9IGVsc2UKLSAgICAgICAgbV9jb25zdW1lci5saW5lVG8odGFyZ2V0UG9pbnQsIG1fbW9kZSk7
CisgICAgICAgIG1fY29uc3VtZXIubGluZVRvKHJlc3VsdC0+dGFyZ2V0UG9pbnQsIG1fbW9kZSk7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgU1ZHUGF0aFBhcnNlcjo6cGFyc2VMaW5lVG9I
b3Jpem9udGFsU2VnbWVudCgpCiB7Ci0gICAgZmxvYXQgdG9YOwotICAgIGlmICghbV9zb3VyY2Uu
cGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudCh0b1gpKQorICAgIGF1dG8gcmVzdWx0ID0gbV9z
b3VyY2UucGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudCgpOworICAgIGlmICghcmVzdWx0KQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAobV9wYXRoUGFyc2luZ01vZGUgPT0gTm9y
bWFsaXplZFBhcnNpbmcpIHsKICAgICAgICAgaWYgKG1fbW9kZSA9PSBSZWxhdGl2ZUNvb3JkaW5h
dGVzKQotICAgICAgICAgICAgbV9jdXJyZW50UG9pbnQubW92ZSh0b1gsIDApOworICAgICAgICAg
ICAgbV9jdXJyZW50UG9pbnQubW92ZShyZXN1bHQtPngsIDApOwogICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBtX2N1cnJlbnRQb2ludC5zZXRYKHRvWCk7CisgICAgICAgICAgICBtX2N1cnJlbnRQ
b2ludC5zZXRYKHJlc3VsdC0+eCk7CiAgICAgICAgIG1fY29uc3VtZXIubGluZVRvKG1fY3VycmVu
dFBvaW50LCBBYnNvbHV0ZUNvb3JkaW5hdGVzKTsKICAgICB9IGVsc2UKLSAgICAgICAgbV9jb25z
dW1lci5saW5lVG9Ib3Jpem9udGFsKHRvWCwgbV9tb2RlKTsKKyAgICAgICAgbV9jb25zdW1lci5s
aW5lVG9Ib3Jpem9udGFsKHJlc3VsdC0+eCwgbV9tb2RlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAogYm9vbCBTVkdQYXRoUGFyc2VyOjpwYXJzZUxpbmVUb1ZlcnRpY2FsU2VnbWVudCgpCiB7Ci0g
ICAgZmxvYXQgdG9ZOwotICAgIGlmICghbV9zb3VyY2UucGFyc2VMaW5lVG9WZXJ0aWNhbFNlZ21l
bnQodG9ZKSkKKyAgICBhdXRvIHJlc3VsdCA9IG1fc291cmNlLnBhcnNlTGluZVRvVmVydGljYWxT
ZWdtZW50KCk7CisgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IGlmIChtX3BhdGhQYXJzaW5nTW9kZSA9PSBOb3JtYWxpemVkUGFyc2luZykgewogICAgICAgICBp
ZiAobV9tb2RlID09IFJlbGF0aXZlQ29vcmRpbmF0ZXMpCi0gICAgICAgICAgICBtX2N1cnJlbnRQ
b2ludC5tb3ZlKDAsIHRvWSk7CisgICAgICAgICAgICBtX2N1cnJlbnRQb2ludC5tb3ZlKDAsIHJl
c3VsdC0+eSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fY3VycmVudFBvaW50LnNldFko
dG9ZKTsKKyAgICAgICAgICAgIG1fY3VycmVudFBvaW50LnNldFkocmVzdWx0LT55KTsKICAgICAg
ICAgbV9jb25zdW1lci5saW5lVG8obV9jdXJyZW50UG9pbnQsIEFic29sdXRlQ29vcmRpbmF0ZXMp
OwogICAgIH0gZWxzZQotICAgICAgICBtX2NvbnN1bWVyLmxpbmVUb1ZlcnRpY2FsKHRvWSwgbV9t
b2RlKTsKKyAgICAgICAgbV9jb25zdW1lci5saW5lVG9WZXJ0aWNhbChyZXN1bHQtPnksIG1fbW9k
ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgU1ZHUGF0aFBhcnNlcjo6cGFyc2VDdXJ2
ZVRvQ3ViaWNTZWdtZW50KCkKIHsKLSAgICBGbG9hdFBvaW50IHBvaW50MTsKLSAgICBGbG9hdFBv
aW50IHBvaW50MjsKLSAgICBGbG9hdFBvaW50IHRhcmdldFBvaW50OwotICAgIGlmICghbV9zb3Vy
Y2UucGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KHBvaW50MSwgcG9pbnQyLCB0YXJnZXRQb2ludCkp
CisgICAgYXV0byByZXN1bHQgPSBtX3NvdXJjZS5wYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQoKTsK
KyAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKG1fcGF0
aFBhcnNpbmdNb2RlID09IE5vcm1hbGl6ZWRQYXJzaW5nKSB7CiAgICAgICAgIGlmIChtX21vZGUg
PT0gUmVsYXRpdmVDb29yZGluYXRlcykgewotICAgICAgICAgICAgcG9pbnQxICs9IG1fY3VycmVu
dFBvaW50OwotICAgICAgICAgICAgcG9pbnQyICs9IG1fY3VycmVudFBvaW50OwotICAgICAgICAg
ICAgdGFyZ2V0UG9pbnQgKz0gbV9jdXJyZW50UG9pbnQ7CisgICAgICAgICAgICByZXN1bHQtPnBv
aW50MSArPSBtX2N1cnJlbnRQb2ludDsKKyAgICAgICAgICAgIHJlc3VsdC0+cG9pbnQyICs9IG1f
Y3VycmVudFBvaW50OworICAgICAgICAgICAgcmVzdWx0LT50YXJnZXRQb2ludCArPSBtX2N1cnJl
bnRQb2ludDsKICAgICAgICAgfQotICAgICAgICBtX2NvbnN1bWVyLmN1cnZlVG9DdWJpYyhwb2lu
dDEsIHBvaW50MiwgdGFyZ2V0UG9pbnQsIEFic29sdXRlQ29vcmRpbmF0ZXMpOworICAgICAgICBt
X2NvbnN1bWVyLmN1cnZlVG9DdWJpYyhyZXN1bHQtPnBvaW50MSwgcmVzdWx0LT5wb2ludDIsIHJl
c3VsdC0+dGFyZ2V0UG9pbnQsIEFic29sdXRlQ29vcmRpbmF0ZXMpOwogCi0gICAgICAgIG1fY29u
dHJvbFBvaW50ID0gcG9pbnQyOwotICAgICAgICBtX2N1cnJlbnRQb2ludCA9IHRhcmdldFBvaW50
OworICAgICAgICBtX2NvbnRyb2xQb2ludCA9IHJlc3VsdC0+cG9pbnQyOworICAgICAgICBtX2N1
cnJlbnRQb2ludCA9IHJlc3VsdC0+dGFyZ2V0UG9pbnQ7CiAgICAgfSBlbHNlCi0gICAgICAgIG1f
Y29uc3VtZXIuY3VydmVUb0N1YmljKHBvaW50MSwgcG9pbnQyLCB0YXJnZXRQb2ludCwgbV9tb2Rl
KTsKKyAgICAgICAgbV9jb25zdW1lci5jdXJ2ZVRvQ3ViaWMocmVzdWx0LT5wb2ludDEsIHJlc3Vs
dC0+cG9pbnQyLCByZXN1bHQtPnRhcmdldFBvaW50LCBtX21vZGUpOwogICAgIHJldHVybiB0cnVl
OwogfQogCiBib29sIFNWR1BhdGhQYXJzZXI6OnBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVu
dCgpCiB7Ci0gICAgRmxvYXRQb2ludCBwb2ludDI7Ci0gICAgRmxvYXRQb2ludCB0YXJnZXRQb2lu
dDsKLSAgICBpZiAoIW1fc291cmNlLnBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudChwb2lu
dDIsIHRhcmdldFBvaW50KSkKKyAgICBhdXRvIHJlc3VsdCA9IG1fc291cmNlLnBhcnNlQ3VydmVU
b0N1YmljU21vb3RoU2VnbWVudCgpOworICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICBpZiAobV9sYXN0Q29tbWFuZCAhPSBQYXRoU2VnQ3VydmVUb0N1YmljQWJz
CkBAIC0xODIsNTMgKzE3OSw1MyBAQCBib29sIFNWR1BhdGhQYXJzZXI6OnBhcnNlQ3VydmVUb0N1
YmljU21vCiAgICAgICAgIHBvaW50MS5zY2FsZSgyKTsKICAgICAgICAgcG9pbnQxLm1vdmUoLW1f
Y29udHJvbFBvaW50LngoKSwgLW1fY29udHJvbFBvaW50LnkoKSk7CiAgICAgICAgIGlmIChtX21v
ZGUgPT0gUmVsYXRpdmVDb29yZGluYXRlcykgewotICAgICAgICAgICAgcG9pbnQyICs9IG1fY3Vy
cmVudFBvaW50OwotICAgICAgICAgICAgdGFyZ2V0UG9pbnQgKz0gbV9jdXJyZW50UG9pbnQ7Cisg
ICAgICAgICAgICByZXN1bHQtPnBvaW50MiArPSBtX2N1cnJlbnRQb2ludDsKKyAgICAgICAgICAg
IHJlc3VsdC0+dGFyZ2V0UG9pbnQgKz0gbV9jdXJyZW50UG9pbnQ7CiAgICAgICAgIH0KIAotICAg
ICAgICBtX2NvbnN1bWVyLmN1cnZlVG9DdWJpYyhwb2ludDEsIHBvaW50MiwgdGFyZ2V0UG9pbnQs
IEFic29sdXRlQ29vcmRpbmF0ZXMpOworICAgICAgICBtX2NvbnN1bWVyLmN1cnZlVG9DdWJpYyhw
b2ludDEsIHJlc3VsdC0+cG9pbnQyLCByZXN1bHQtPnRhcmdldFBvaW50LCBBYnNvbHV0ZUNvb3Jk
aW5hdGVzKTsKIAotICAgICAgICBtX2NvbnRyb2xQb2ludCA9IHBvaW50MjsKLSAgICAgICAgbV9j
dXJyZW50UG9pbnQgPSB0YXJnZXRQb2ludDsKKyAgICAgICAgbV9jb250cm9sUG9pbnQgPSByZXN1
bHQtPnBvaW50MjsKKyAgICAgICAgbV9jdXJyZW50UG9pbnQgPSByZXN1bHQtPnRhcmdldFBvaW50
OwogICAgIH0gZWxzZQotICAgICAgICBtX2NvbnN1bWVyLmN1cnZlVG9DdWJpY1Ntb290aChwb2lu
dDIsIHRhcmdldFBvaW50LCBtX21vZGUpOworICAgICAgICBtX2NvbnN1bWVyLmN1cnZlVG9DdWJp
Y1Ntb290aChyZXN1bHQtPnBvaW50MiwgcmVzdWx0LT50YXJnZXRQb2ludCwgbV9tb2RlKTsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBTVkdQYXRoUGFyc2VyOjpwYXJzZUN1cnZlVG9RdWFk
cmF0aWNTZWdtZW50KCkKIHsKLSAgICBGbG9hdFBvaW50IHBvaW50MTsKLSAgICBGbG9hdFBvaW50
IHRhcmdldFBvaW50OwotICAgIGlmICghbV9zb3VyY2UucGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2Vn
bWVudChwb2ludDEsIHRhcmdldFBvaW50KSkKKyAgICBhdXRvIHJlc3VsdCA9IG1fc291cmNlLnBh
cnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQoKTsKKyAgICBpZiAoIXJlc3VsdCkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKG1fcGF0aFBhcnNpbmdNb2RlID09IE5vcm1hbGl6ZWRQ
YXJzaW5nKSB7Ci0gICAgICAgIG1fY29udHJvbFBvaW50ID0gcG9pbnQxOworICAgICAgICBtX2Nv
bnRyb2xQb2ludCA9IHJlc3VsdC0+cG9pbnQxOworCiAgICAgICAgIEZsb2F0UG9pbnQgcG9pbnQx
ID0gbV9jdXJyZW50UG9pbnQ7CiAgICAgICAgIHBvaW50MS5tb3ZlKDIgKiBtX2NvbnRyb2xQb2lu
dC54KCksIDIgKiBtX2NvbnRyb2xQb2ludC55KCkpOwotICAgICAgICBGbG9hdFBvaW50IHBvaW50
Mih0YXJnZXRQb2ludC54KCkgKyAyICogbV9jb250cm9sUG9pbnQueCgpLCB0YXJnZXRQb2ludC55
KCkgKyAyICogbV9jb250cm9sUG9pbnQueSgpKTsKKyAgICAgICAgRmxvYXRQb2ludCBwb2ludDIo
cmVzdWx0LT50YXJnZXRQb2ludC54KCkgKyAyICogbV9jb250cm9sUG9pbnQueCgpLCByZXN1bHQt
PnRhcmdldFBvaW50LnkoKSArIDIgKiBtX2NvbnRyb2xQb2ludC55KCkpOwogICAgICAgICBpZiAo
bV9tb2RlID09IFJlbGF0aXZlQ29vcmRpbmF0ZXMpIHsKICAgICAgICAgICAgIHBvaW50MS5tb3Zl
KDIgKiBtX2N1cnJlbnRQb2ludC54KCksIDIgKiBtX2N1cnJlbnRQb2ludC55KCkpOwogICAgICAg
ICAgICAgcG9pbnQyLm1vdmUoMyAqIG1fY3VycmVudFBvaW50LngoKSwgMyAqIG1fY3VycmVudFBv
aW50LnkoKSk7Ci0gICAgICAgICAgICB0YXJnZXRQb2ludCArPSBtX2N1cnJlbnRQb2ludDsKKyAg
ICAgICAgICAgIHJlc3VsdC0+dGFyZ2V0UG9pbnQgKz0gbV9jdXJyZW50UG9pbnQ7CiAgICAgICAg
IH0KICAgICAgICAgcG9pbnQxLnNjYWxlKGdPbmVPdmVyVGhyZWUpOwogICAgICAgICBwb2ludDIu
c2NhbGUoZ09uZU92ZXJUaHJlZSk7CiAKLSAgICAgICAgbV9jb25zdW1lci5jdXJ2ZVRvQ3ViaWMo
cG9pbnQxLCBwb2ludDIsIHRhcmdldFBvaW50LCBBYnNvbHV0ZUNvb3JkaW5hdGVzKTsKKyAgICAg
ICAgbV9jb25zdW1lci5jdXJ2ZVRvQ3ViaWMocG9pbnQxLCBwb2ludDIsIHJlc3VsdC0+dGFyZ2V0
UG9pbnQsIEFic29sdXRlQ29vcmRpbmF0ZXMpOwogCiAgICAgICAgIGlmIChtX21vZGUgPT0gUmVs
YXRpdmVDb29yZGluYXRlcykKICAgICAgICAgICAgIG1fY29udHJvbFBvaW50ICs9IG1fY3VycmVu
dFBvaW50OwotICAgICAgICBtX2N1cnJlbnRQb2ludCA9IHRhcmdldFBvaW50OworICAgICAgICBt
X2N1cnJlbnRQb2ludCA9IHJlc3VsdC0+dGFyZ2V0UG9pbnQ7CiAgICAgfSBlbHNlCi0gICAgICAg
IG1fY29uc3VtZXIuY3VydmVUb1F1YWRyYXRpYyhwb2ludDEsIHRhcmdldFBvaW50LCBtX21vZGUp
OworICAgICAgICBtX2NvbnN1bWVyLmN1cnZlVG9RdWFkcmF0aWMocmVzdWx0LT5wb2ludDEsIHJl
c3VsdC0+dGFyZ2V0UG9pbnQsIG1fbW9kZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wg
U1ZHUGF0aFBhcnNlcjo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudCgpCiB7Ci0g
ICAgRmxvYXRQb2ludCB0YXJnZXRQb2ludDsKLSAgICBpZiAoIW1fc291cmNlLnBhcnNlQ3VydmVU
b1F1YWRyYXRpY1Ntb290aFNlZ21lbnQodGFyZ2V0UG9pbnQpKQorICAgIGF1dG8gcmVzdWx0ID0g
bV9zb3VyY2UucGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudCgpOworICAgIGlmICgh
cmVzdWx0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAobV9sYXN0Q29tbWFuZCAh
PSBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY0FicwpAQCAtMjQyLDY3ICsyMzksNjIgQEAgYm9vbCBT
VkdQYXRoUGFyc2VyOjpwYXJzZUN1cnZlVG9RdWFkcmF0aQogICAgICAgICBjdWJpY1BvaW50LnNj
YWxlKDIpOwogICAgICAgICBjdWJpY1BvaW50Lm1vdmUoLW1fY29udHJvbFBvaW50LngoKSwgLW1f
Y29udHJvbFBvaW50LnkoKSk7CiAgICAgICAgIEZsb2F0UG9pbnQgcG9pbnQxKG1fY3VycmVudFBv
aW50LngoKSArIDIgKiBjdWJpY1BvaW50LngoKSwgbV9jdXJyZW50UG9pbnQueSgpICsgMiAqIGN1
YmljUG9pbnQueSgpKTsKLSAgICAgICAgRmxvYXRQb2ludCBwb2ludDIodGFyZ2V0UG9pbnQueCgp
ICsgMiAqIGN1YmljUG9pbnQueCgpLCB0YXJnZXRQb2ludC55KCkgKyAyICogY3ViaWNQb2ludC55
KCkpOworICAgICAgICBGbG9hdFBvaW50IHBvaW50MihyZXN1bHQtPnRhcmdldFBvaW50LngoKSAr
IDIgKiBjdWJpY1BvaW50LngoKSwgcmVzdWx0LT50YXJnZXRQb2ludC55KCkgKyAyICogY3ViaWNQ
b2ludC55KCkpOwogICAgICAgICBpZiAobV9tb2RlID09IFJlbGF0aXZlQ29vcmRpbmF0ZXMpIHsK
ICAgICAgICAgICAgIHBvaW50MiArPSBtX2N1cnJlbnRQb2ludDsKLSAgICAgICAgICAgIHRhcmdl
dFBvaW50ICs9IG1fY3VycmVudFBvaW50OworICAgICAgICAgICAgcmVzdWx0LT50YXJnZXRQb2lu
dCArPSBtX2N1cnJlbnRQb2ludDsKICAgICAgICAgfQogICAgICAgICBwb2ludDEuc2NhbGUoZ09u
ZU92ZXJUaHJlZSk7CiAgICAgICAgIHBvaW50Mi5zY2FsZShnT25lT3ZlclRocmVlKTsKIAotICAg
ICAgICBtX2NvbnN1bWVyLmN1cnZlVG9DdWJpYyhwb2ludDEsIHBvaW50MiwgdGFyZ2V0UG9pbnQs
IEFic29sdXRlQ29vcmRpbmF0ZXMpOworICAgICAgICBtX2NvbnN1bWVyLmN1cnZlVG9DdWJpYyhw
b2ludDEsIHBvaW50MiwgcmVzdWx0LT50YXJnZXRQb2ludCwgQWJzb2x1dGVDb29yZGluYXRlcyk7
CiAKICAgICAgICAgbV9jb250cm9sUG9pbnQgPSBjdWJpY1BvaW50OwotICAgICAgICBtX2N1cnJl
bnRQb2ludCA9IHRhcmdldFBvaW50OworICAgICAgICBtX2N1cnJlbnRQb2ludCA9IHJlc3VsdC0+
dGFyZ2V0UG9pbnQ7CiAgICAgfSBlbHNlCi0gICAgICAgIG1fY29uc3VtZXIuY3VydmVUb1F1YWRy
YXRpY1Ntb290aCh0YXJnZXRQb2ludCwgbV9tb2RlKTsKKyAgICAgICAgbV9jb25zdW1lci5jdXJ2
ZVRvUXVhZHJhdGljU21vb3RoKHJlc3VsdC0+dGFyZ2V0UG9pbnQsIG1fbW9kZSk7CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKIGJvb2wgU1ZHUGF0aFBhcnNlcjo6cGFyc2VBcmNUb1NlZ21lbnQoKQog
ewotICAgIGZsb2F0IHJ4OwotICAgIGZsb2F0IHJ5OwotICAgIGZsb2F0IGFuZ2xlOwotICAgIGJv
b2wgbGFyZ2VBcmM7Ci0gICAgYm9vbCBzd2VlcDsKLSAgICBGbG9hdFBvaW50IHRhcmdldFBvaW50
OwotICAgIGlmICghbV9zb3VyY2UucGFyc2VBcmNUb1NlZ21lbnQocngsIHJ5LCBhbmdsZSwgbGFy
Z2VBcmMsIHN3ZWVwLCB0YXJnZXRQb2ludCkpCisgICAgYXV0byByZXN1bHQgPSBtX3NvdXJjZS5w
YXJzZUFyY1RvU2VnbWVudCgpOworICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICAgICAvLyBJZiByeCA9IDAgb3IgcnkgPSAwIHRoZW4gdGhpcyBhcmMgaXMgdHJlYXRl
ZCBhcyBhIHN0cmFpZ2h0IGxpbmUgc2VnbWVudCAoYSAibGluZXRvIikgam9pbmluZyB0aGUgZW5k
cG9pbnRzLgogICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRy9pbXBsbm90ZS5odG1sI0Fy
Y091dE9mUmFuZ2VQYXJhbWV0ZXJzCiAgICAgLy8gSWYgdGhlIGN1cnJlbnQgcG9pbnQgYW5kIHRh
cmdldCBwb2ludCBmb3IgdGhlIGFyYyBhcmUgaWRlbnRpY2FsLCBpdCBzaG91bGQgYmUgdHJlYXRl
ZCBhcyBhIHplcm8gbGVuZ3RoCiAgICAgLy8gcGF0aC4gVGhpcyBlbnN1cmVzIGNvbnRpbnVpdHkg
aW4gYW5pbWF0aW9ucy4KLSAgICByeCA9IGZhYnNmKHJ4KTsKLSAgICByeSA9IGZhYnNmKHJ5KTsK
KyAgICByZXN1bHQtPnJ4ID0gZmFic2YocmVzdWx0LT5yeCk7CisgICAgcmVzdWx0LT5yeSA9IGZh
YnNmKHJlc3VsdC0+cnkpOwogICAgIGJvb2wgYXJjSXNaZXJvTGVuZ3RoID0gZmFsc2U7CiAgICAg
aWYgKG1fcGF0aFBhcnNpbmdNb2RlID09IE5vcm1hbGl6ZWRQYXJzaW5nKSB7CiAgICAgICAgIGlm
IChtX21vZGUgPT0gUmVsYXRpdmVDb29yZGluYXRlcykKLSAgICAgICAgICAgIGFyY0lzWmVyb0xl
bmd0aCA9IHRhcmdldFBvaW50ID09IEZsb2F0UG9pbnQ6Onplcm8oKTsKKyAgICAgICAgICAgIGFy
Y0lzWmVyb0xlbmd0aCA9IHJlc3VsdC0+dGFyZ2V0UG9pbnQgPT0gRmxvYXRQb2ludDo6emVybygp
OwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBhcmNJc1plcm9MZW5ndGggPSB0YXJnZXRQb2lu
dCA9PSBtX2N1cnJlbnRQb2ludDsKKyAgICAgICAgICAgIGFyY0lzWmVyb0xlbmd0aCA9IHJlc3Vs
dC0+dGFyZ2V0UG9pbnQgPT0gbV9jdXJyZW50UG9pbnQ7CiAgICAgfQotICAgIGlmICghcnggfHwg
IXJ5IHx8IGFyY0lzWmVyb0xlbmd0aCkgeworICAgIGlmICghcmVzdWx0LT5yeCB8fCAhcmVzdWx0
LT5yeSB8fCBhcmNJc1plcm9MZW5ndGgpIHsKICAgICAgICAgaWYgKG1fcGF0aFBhcnNpbmdNb2Rl
ID09IE5vcm1hbGl6ZWRQYXJzaW5nKSB7CiAgICAgICAgICAgICBpZiAobV9tb2RlID09IFJlbGF0
aXZlQ29vcmRpbmF0ZXMpCi0gICAgICAgICAgICAgICAgbV9jdXJyZW50UG9pbnQgKz0gdGFyZ2V0
UG9pbnQ7CisgICAgICAgICAgICAgICAgbV9jdXJyZW50UG9pbnQgKz0gcmVzdWx0LT50YXJnZXRQ
b2ludDsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX2N1cnJlbnRQb2ludCA9
IHRhcmdldFBvaW50OworICAgICAgICAgICAgICAgIG1fY3VycmVudFBvaW50ID0gcmVzdWx0LT50
YXJnZXRQb2ludDsKICAgICAgICAgICAgIG1fY29uc3VtZXIubGluZVRvKG1fY3VycmVudFBvaW50
LCBBYnNvbHV0ZUNvb3JkaW5hdGVzKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtX2Nv
bnN1bWVyLmxpbmVUbyh0YXJnZXRQb2ludCwgbV9tb2RlKTsKKyAgICAgICAgICAgIG1fY29uc3Vt
ZXIubGluZVRvKHJlc3VsdC0+dGFyZ2V0UG9pbnQsIG1fbW9kZSk7CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KIAogICAgIGlmIChtX3BhdGhQYXJzaW5nTW9kZSA9PSBOb3JtYWxpemVkUGFy
c2luZykgewogICAgICAgICBGbG9hdFBvaW50IHBvaW50MSA9IG1fY3VycmVudFBvaW50OwogICAg
ICAgICBpZiAobV9tb2RlID09IFJlbGF0aXZlQ29vcmRpbmF0ZXMpCi0gICAgICAgICAgICB0YXJn
ZXRQb2ludCArPSBtX2N1cnJlbnRQb2ludDsKLSAgICAgICAgbV9jdXJyZW50UG9pbnQgPSB0YXJn
ZXRQb2ludDsKLSAgICAgICAgcmV0dXJuIGRlY29tcG9zZUFyY1RvQ3ViaWMoYW5nbGUsIHJ4LCBy
eSwgcG9pbnQxLCB0YXJnZXRQb2ludCwgbGFyZ2VBcmMsIHN3ZWVwKTsKKyAgICAgICAgICAgIHJl
c3VsdC0+dGFyZ2V0UG9pbnQgKz0gbV9jdXJyZW50UG9pbnQ7CisgICAgICAgIG1fY3VycmVudFBv
aW50ID0gcmVzdWx0LT50YXJnZXRQb2ludDsKKyAgICAgICAgcmV0dXJuIGRlY29tcG9zZUFyY1Rv
Q3ViaWMocmVzdWx0LT5hbmdsZSwgcmVzdWx0LT5yeCwgcmVzdWx0LT5yeSwgcG9pbnQxLCByZXN1
bHQtPnRhcmdldFBvaW50LCByZXN1bHQtPmxhcmdlQXJjLCByZXN1bHQtPnN3ZWVwKTsKICAgICB9
Ci0gICAgbV9jb25zdW1lci5hcmNUbyhyeCwgcnksIGFuZ2xlLCBsYXJnZUFyYywgc3dlZXAsIHRh
cmdldFBvaW50LCBtX21vZGUpOworICAgIG1fY29uc3VtZXIuYXJjVG8ocmVzdWx0LT5yeCwgcmVz
dWx0LT5yeSwgcmVzdWx0LT5hbmdsZSwgcmVzdWx0LT5sYXJnZUFyYywgcmVzdWx0LT5zd2VlcCwg
cmVzdWx0LT50YXJnZXRQb2ludCwgbV9tb2RlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAt
MzEyLDggKzMwNCwxMSBAQCBib29sIFNWR1BhdGhQYXJzZXI6OnBhcnNlUGF0aERhdGEoYm9vbCBj
CiAgICAgaWYgKCFtX3NvdXJjZS5tb3ZlVG9OZXh0VG9rZW4oKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAKLSAgICBTVkdQYXRoU2VnVHlwZSBjb21tYW5kOwotICAgIG1fc291cmNlLnBhcnNlU1ZH
U2VnbWVudFR5cGUoY29tbWFuZCk7CisgICAgYXV0byBwYXJzZWRDb21tYW5kID0gbV9zb3VyY2Uu
cGFyc2VTVkdTZWdtZW50VHlwZSgpOworICAgIGlmICghcGFyc2VkQ29tbWFuZCkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgYXV0byBjb21tYW5kID0gKnBhcnNlZENvbW1hbmQ7CiAKICAg
ICAvLyBQYXRoIG11c3Qgc3RhcnQgd2l0aCBtb3ZldG8uCiAgICAgaWYgKGNoZWNrRm9ySW5pdGlh
bE1vdmVUbyAmJiBjb21tYW5kICE9IFBhdGhTZWdNb3ZlVG9BYnMgJiYgY29tbWFuZCAhPSBQYXRo
U2VnTW92ZVRvUmVsKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhQYXJzZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFBhcnNlci5oCShyZXZpc2lv
biAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFBhcnNlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMiw3ICszMiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIFNWR1Bh
dGhCeXRlU3RyZWFtOwogY2xhc3MgU1ZHUGF0aFNvdXJjZTsKIAotY2xhc3MgU1ZHUGF0aFBhcnNl
ciB7CitjbGFzcyBTVkdQYXRoUGFyc2VyIGZpbmFsIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgYm9v
bCBwYXJzZShTVkdQYXRoU291cmNlJiwgU1ZHUGF0aENvbnN1bWVyJiwgUGF0aFBhcnNpbmdNb2Rl
ID0gTm9ybWFsaXplZFBhcnNpbmcsIGJvb2wgY2hlY2tGb3JJbml0aWFsTW92ZVRvID0gdHJ1ZSk7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU2VnTGlzdFNvdXJjZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTZWdMaXN0U291cmNlLmNwcAko
cmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTZWdMaXN0U291
cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTUgKzQwLDE1IEBAIGJvb2wgU1ZHUGF0aFNl
Z0xpc3RTb3VyY2U6Omhhc01vcmVEYXRhKCkKICAgICByZXR1cm4gbV9pdGVtQ3VycmVudCA8IG1f
aXRlbUVuZDsKIH0KIAotYm9vbCBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VTVkdTZWdtZW50
VHlwZShTVkdQYXRoU2VnVHlwZSYgcGF0aFNlZ1R5cGUpCitTVkdQYXRoU2VnVHlwZSBTVkdQYXRo
U2VnTGlzdFNvdXJjZTo6bmV4dENvbW1hbmQoU1ZHUGF0aFNlZ1R5cGUpCiB7CiAgICAgbV9zZWdt
ZW50ID0gbV9wYXRoU2VnTGlzdC5hdChtX2l0ZW1DdXJyZW50KTsKLSAgICBwYXRoU2VnVHlwZSA9
IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdUeXBlPihtX3NlZ21lbnQtPnBhdGhTZWdUeXBlKCkpOwor
ICAgIFNWR1BhdGhTZWdUeXBlIHBhdGhTZWdUeXBlID0gc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ1R5
cGU+KG1fc2VnbWVudC0+cGF0aFNlZ1R5cGUoKSk7CiAgICAgKyttX2l0ZW1DdXJyZW50OwotICAg
IHJldHVybiB0cnVlOworICAgIHJldHVybiBwYXRoU2VnVHlwZTsKIH0KIAotU1ZHUGF0aFNlZ1R5
cGUgU1ZHUGF0aFNlZ0xpc3RTb3VyY2U6Om5leHRDb21tYW5kKFNWR1BhdGhTZWdUeXBlKQorT3B0
aW9uYWw8U1ZHUGF0aFNlZ1R5cGU+IFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZVNWR1NlZ21l
bnRUeXBlKCkKIHsKICAgICBtX3NlZ21lbnQgPSBtX3BhdGhTZWdMaXN0LmF0KG1faXRlbUN1cnJl
bnQpOwogICAgIFNWR1BhdGhTZWdUeXBlIHBhdGhTZWdUeXBlID0gc3RhdGljX2Nhc3Q8U1ZHUGF0
aFNlZ1R5cGU+KG1fc2VnbWVudC0+cGF0aFNlZ1R5cGUoKSk7CkBAIC01Niw5NCArNTYsMTEyIEBA
IFNWR1BhdGhTZWdUeXBlIFNWR1BhdGhTZWdMaXN0U291cmNlOjpuZXgKICAgICByZXR1cm4gcGF0
aFNlZ1R5cGU7CiB9CiAKLWJvb2wgU1ZHUGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNlTW92ZVRvU2Vn
bWVudChGbG9hdFBvaW50JiB0YXJnZXRQb2ludCkKK09wdGlvbmFsPFNWR1BhdGhTb3VyY2U6Ok1v
dmVUb1NlZ21lbnQ+IFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZU1vdmVUb1NlZ21lbnQoKQog
ewogICAgIEFTU0VSVChtX3NlZ21lbnQpOwogICAgIEFTU0VSVChtX3NlZ21lbnQtPnBhdGhTZWdU
eXBlKCkgPT0gUGF0aFNlZ01vdmVUb0FicyB8fCBtX3NlZ21lbnQtPnBhdGhTZWdUeXBlKCkgPT0g
UGF0aFNlZ01vdmVUb1JlbCk7CiAgICAgU1ZHUGF0aFNlZ1NpbmdsZUNvb3JkaW5hdGUqIG1vdmVU
byA9IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdTaW5nbGVDb29yZGluYXRlKj4obV9zZWdtZW50Lmdl
dCgpKTsKLSAgICB0YXJnZXRQb2ludCA9IEZsb2F0UG9pbnQobW92ZVRvLT54KCksIG1vdmVUby0+
eSgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBNb3ZlVG9TZWdtZW50IHNlZ21lbnQ7
CisgICAgc2VnbWVudC50YXJnZXRQb2ludCA9IEZsb2F0UG9pbnQobW92ZVRvLT54KCksIG1vdmVU
by0+eSgpKTsKKyAgICByZXR1cm4gc2VnbWVudDsKIH0KIAotYm9vbCBTVkdQYXRoU2VnTGlzdFNv
dXJjZTo6cGFyc2VMaW5lVG9TZWdtZW50KEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQorT3B0aW9u
YWw8U1ZHUGF0aFNvdXJjZTo6TGluZVRvU2VnbWVudD4gU1ZHUGF0aFNlZ0xpc3RTb3VyY2U6OnBh
cnNlTGluZVRvU2VnbWVudCgpCiB7CiAgICAgQVNTRVJUKG1fc2VnbWVudCk7CiAgICAgQVNTRVJU
KG1fc2VnbWVudC0+cGF0aFNlZ1R5cGUoKSA9PSBQYXRoU2VnTGluZVRvQWJzIHx8IG1fc2VnbWVu
dC0+cGF0aFNlZ1R5cGUoKSA9PSBQYXRoU2VnTGluZVRvUmVsKTsKICAgICBTVkdQYXRoU2VnU2lu
Z2xlQ29vcmRpbmF0ZSogbGluZVRvID0gc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ1NpbmdsZUNvb3Jk
aW5hdGUqPihtX3NlZ21lbnQuZ2V0KCkpOwotICAgIHRhcmdldFBvaW50ID0gRmxvYXRQb2ludChs
aW5lVG8tPngoKSwgbGluZVRvLT55KCkpOwotICAgIHJldHVybiB0cnVlOworICAgIAorICAgIExp
bmVUb1NlZ21lbnQgc2VnbWVudDsKKyAgICBzZWdtZW50LnRhcmdldFBvaW50ID0gRmxvYXRQb2lu
dChsaW5lVG8tPngoKSwgbGluZVRvLT55KCkpOworICAgIHJldHVybiBzZWdtZW50OwogfQogCi1i
b29sIFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUxpbmVUb0hvcml6b250YWxTZWdtZW50KGZs
b2F0JiB4KQorT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6TGluZVRvSG9yaXpvbnRhbFNlZ21lbnQ+
IFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUxpbmVUb0hvcml6b250YWxTZWdtZW50KCkKIHsK
ICAgICBBU1NFUlQobV9zZWdtZW50KTsKICAgICBBU1NFUlQobV9zZWdtZW50LT5wYXRoU2VnVHlw
ZSgpID09IFBhdGhTZWdMaW5lVG9Ib3Jpem9udGFsQWJzIHx8IG1fc2VnbWVudC0+cGF0aFNlZ1R5
cGUoKSA9PSBQYXRoU2VnTGluZVRvSG9yaXpvbnRhbFJlbCk7CiAgICAgU1ZHUGF0aFNlZ0xpbmV0
b0hvcml6b250YWwqIGhvcml6b250YWwgPSBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnTGluZXRvSG9y
aXpvbnRhbCo+KG1fc2VnbWVudC5nZXQoKSk7Ci0gICAgeCA9IGhvcml6b250YWwtPngoKTsKLSAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBMaW5lVG9Ib3Jpem9udGFsU2VnbWVudCBzZWdtZW50
OworICAgIHNlZ21lbnQueCA9IGhvcml6b250YWwtPngoKTsKKyAgICByZXR1cm4gc2VnbWVudDsK
IH0KIAotYm9vbCBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VMaW5lVG9WZXJ0aWNhbFNlZ21l
bnQoZmxvYXQmIHkpCitPcHRpb25hbDxTVkdQYXRoU291cmNlOjpMaW5lVG9WZXJ0aWNhbFNlZ21l
bnQ+IFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUxpbmVUb1ZlcnRpY2FsU2VnbWVudCgpCiB7
CiAgICAgQVNTRVJUKG1fc2VnbWVudCk7CiAgICAgQVNTRVJUKG1fc2VnbWVudC0+cGF0aFNlZ1R5
cGUoKSA9PSBQYXRoU2VnTGluZVRvVmVydGljYWxBYnMgfHwgbV9zZWdtZW50LT5wYXRoU2VnVHlw
ZSgpID09IFBhdGhTZWdMaW5lVG9WZXJ0aWNhbFJlbCk7CiAgICAgU1ZHUGF0aFNlZ0xpbmV0b1Zl
cnRpY2FsKiB2ZXJ0aWNhbCA9IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbCo+
KG1fc2VnbWVudC5nZXQoKSk7Ci0gICAgeSA9IHZlcnRpY2FsLT55KCk7Ci0gICAgcmV0dXJuIHRy
dWU7CisgICAgCisgICAgTGluZVRvVmVydGljYWxTZWdtZW50IHNlZ21lbnQ7CisgICAgc2VnbWVu
dC55ID0gdmVydGljYWwtPnkoKTsKKyAgICByZXR1cm4gc2VnbWVudDsKIH0KIAotYm9vbCBTVkdQ
YXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KEZsb2F0UG9pbnQmIHBv
aW50MSwgRmxvYXRQb2ludCYgcG9pbnQyLCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCkKK09wdGlv
bmFsPFNWR1BhdGhTb3VyY2U6OkN1cnZlVG9DdWJpY1NlZ21lbnQ+IFNWR1BhdGhTZWdMaXN0U291
cmNlOjpwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQoKQogewogICAgIEFTU0VSVChtX3NlZ21lbnQp
OwogICAgIEFTU0VSVChtX3NlZ21lbnQtPnBhdGhTZWdUeXBlKCkgPT0gUGF0aFNlZ0N1cnZlVG9D
dWJpY0FicyB8fCBtX3NlZ21lbnQtPnBhdGhTZWdUeXBlKCkgPT0gUGF0aFNlZ0N1cnZlVG9DdWJp
Y1JlbCk7CiAgICAgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpYyogY3ViaWMgPSBzdGF0aWNfY2FzdDxT
VkdQYXRoU2VnQ3VydmV0b0N1YmljKj4obV9zZWdtZW50LmdldCgpKTsKLSAgICBwb2ludDEgPSBG
bG9hdFBvaW50KGN1YmljLT54MSgpLCBjdWJpYy0+eTEoKSk7Ci0gICAgcG9pbnQyID0gRmxvYXRQ
b2ludChjdWJpYy0+eDIoKSwgY3ViaWMtPnkyKCkpOwotICAgIHRhcmdldFBvaW50ID0gRmxvYXRQ
b2ludChjdWJpYy0+eCgpLCBjdWJpYy0+eSgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAg
ICBDdXJ2ZVRvQ3ViaWNTZWdtZW50IHNlZ21lbnQ7CisgICAgc2VnbWVudC5wb2ludDEgPSBGbG9h
dFBvaW50KGN1YmljLT54MSgpLCBjdWJpYy0+eTEoKSk7CisgICAgc2VnbWVudC5wb2ludDIgPSBG
bG9hdFBvaW50KGN1YmljLT54MigpLCBjdWJpYy0+eTIoKSk7CisgICAgc2VnbWVudC50YXJnZXRQ
b2ludCA9IEZsb2F0UG9pbnQoY3ViaWMtPngoKSwgY3ViaWMtPnkoKSk7CisgICAgcmV0dXJuIHNl
Z21lbnQ7CiB9CiAKLWJvb2wgU1ZHUGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNlQ3VydmVUb0N1Ymlj
U21vb3RoU2VnbWVudChGbG9hdFBvaW50JiBwb2ludDIsIEZsb2F0UG9pbnQmIHRhcmdldFBvaW50
KQorT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6Q3VydmVUb0N1YmljU21vb3RoU2VnbWVudD4gU1ZH
UGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudCgpCiB7CiAg
ICAgQVNTRVJUKG1fc2VnbWVudCk7CiAgICAgQVNTRVJUKG1fc2VnbWVudC0+cGF0aFNlZ1R5cGUo
KSA9PSBQYXRoU2VnQ3VydmVUb0N1YmljU21vb3RoQWJzIHx8IG1fc2VnbWVudC0+cGF0aFNlZ1R5
cGUoKSA9PSBQYXRoU2VnQ3VydmVUb0N1YmljU21vb3RoUmVsKTsKICAgICBTVkdQYXRoU2VnQ3Vy
dmV0b0N1YmljU21vb3RoKiBjdWJpY1Ntb290aCA9IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdDdXJ2
ZXRvQ3ViaWNTbW9vdGgqPihtX3NlZ21lbnQuZ2V0KCkpOwotICAgIHBvaW50MiA9IEZsb2F0UG9p
bnQoY3ViaWNTbW9vdGgtPngyKCksIGN1YmljU21vb3RoLT55MigpKTsKLSAgICB0YXJnZXRQb2lu
dCA9IEZsb2F0UG9pbnQoY3ViaWNTbW9vdGgtPngoKSwgY3ViaWNTbW9vdGgtPnkoKSk7Ci0gICAg
cmV0dXJuIHRydWU7CisgICAgCisgICAgQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudCBzZWdtZW50
OworICAgIHNlZ21lbnQucG9pbnQyID0gRmxvYXRQb2ludChjdWJpY1Ntb290aC0+eDIoKSwgY3Vi
aWNTbW9vdGgtPnkyKCkpOworICAgIHNlZ21lbnQudGFyZ2V0UG9pbnQgPSBGbG9hdFBvaW50KGN1
YmljU21vb3RoLT54KCksIGN1YmljU21vb3RoLT55KCkpOworICAgIHJldHVybiBzZWdtZW50Owog
fQogCi1ib29sIFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdt
ZW50KEZsb2F0UG9pbnQmIHBvaW50MSwgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCitPcHRpb25h
bDxTVkdQYXRoU291cmNlOjpDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudD4gU1ZHUGF0aFNlZ0xpc3RT
b3VyY2U6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQoKQogewogICAgIEFTU0VSVChtX3Nl
Z21lbnQpOwogICAgIEFTU0VSVChtX3NlZ21lbnQtPnBhdGhTZWdUeXBlKCkgPT0gUGF0aFNlZ0N1
cnZlVG9RdWFkcmF0aWNBYnMgfHwgbV9zZWdtZW50LT5wYXRoU2VnVHlwZSgpID09IFBhdGhTZWdD
dXJ2ZVRvUXVhZHJhdGljUmVsKTsKICAgICBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpYyogcXVh
ZHJhdGljID0gc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWMqPihtX3NlZ21l
bnQuZ2V0KCkpOwotICAgIHBvaW50MSA9IEZsb2F0UG9pbnQocXVhZHJhdGljLT54MSgpLCBxdWFk
cmF0aWMtPnkxKCkpOwotICAgIHRhcmdldFBvaW50ID0gRmxvYXRQb2ludChxdWFkcmF0aWMtPngo
KSwgcXVhZHJhdGljLT55KCkpOwotICAgIHJldHVybiB0cnVlOworICAgIAorICAgIEN1cnZlVG9R
dWFkcmF0aWNTZWdtZW50IHNlZ21lbnQ7CisgICAgc2VnbWVudC5wb2ludDEgPSBGbG9hdFBvaW50
KHF1YWRyYXRpYy0+eDEoKSwgcXVhZHJhdGljLT55MSgpKTsKKyAgICBzZWdtZW50LnRhcmdldFBv
aW50ID0gRmxvYXRQb2ludChxdWFkcmF0aWMtPngoKSwgcXVhZHJhdGljLT55KCkpOworICAgIHJl
dHVybiBzZWdtZW50OwogfQogCi1ib29sIFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUN1cnZl
VG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQorT3B0aW9u
YWw8U1ZHUGF0aFNvdXJjZTo6Q3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQ+IFNWR1BhdGhT
ZWdMaXN0U291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KCkKIHsKICAg
ICBBU1NFUlQobV9zZWdtZW50KTsKICAgICBBU1NFUlQobV9zZWdtZW50LT5wYXRoU2VnVHlwZSgp
ID09IFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljU21vb3RoQWJzIHx8IG1fc2VnbWVudC0+cGF0aFNl
Z1R5cGUoKSA9PSBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY1Ntb290aFJlbCk7CiAgICAgU1ZHUGF0
aFNlZ1NpbmdsZUNvb3JkaW5hdGUqIHF1YWRyYXRpY1Ntb290aCA9IHN0YXRpY19jYXN0PFNWR1Bh
dGhTZWdTaW5nbGVDb29yZGluYXRlKj4obV9zZWdtZW50LmdldCgpKTsKLSAgICB0YXJnZXRQb2lu
dCA9IEZsb2F0UG9pbnQocXVhZHJhdGljU21vb3RoLT54KCksIHF1YWRyYXRpY1Ntb290aC0+eSgp
KTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2Vn
bWVudCBzZWdtZW50OworICAgIHNlZ21lbnQudGFyZ2V0UG9pbnQgPSBGbG9hdFBvaW50KHF1YWRy
YXRpY1Ntb290aC0+eCgpLCBxdWFkcmF0aWNTbW9vdGgtPnkoKSk7CisgICAgcmV0dXJuIHNlZ21l
bnQ7CiB9CiAKLWJvb2wgU1ZHUGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNlQXJjVG9TZWdtZW50KGZs
b2F0JiByeCwgZmxvYXQmIHJ5LCBmbG9hdCYgYW5nbGUsIGJvb2wmIGxhcmdlQXJjLCBib29sJiBz
d2VlcCwgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCitPcHRpb25hbDxTVkdQYXRoU291cmNlOjpB
cmNUb1NlZ21lbnQ+IFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUFyY1RvU2VnbWVudCgpCiB7
CiAgICAgQVNTRVJUKG1fc2VnbWVudCk7CiAgICAgQVNTRVJUKG1fc2VnbWVudC0+cGF0aFNlZ1R5
cGUoKSA9PSBQYXRoU2VnQXJjQWJzIHx8IG1fc2VnbWVudC0+cGF0aFNlZ1R5cGUoKSA9PSBQYXRo
U2VnQXJjUmVsKTsKICAgICBTVkdQYXRoU2VnQXJjKiBhcmNUbyA9IHN0YXRpY19jYXN0PFNWR1Bh
dGhTZWdBcmMqPihtX3NlZ21lbnQuZ2V0KCkpOwotICAgIHJ4ID0gYXJjVG8tPnIxKCk7Ci0gICAg
cnkgPSBhcmNUby0+cjIoKTsKLSAgICBhbmdsZSA9IGFyY1RvLT5hbmdsZSgpOwotICAgIGxhcmdl
QXJjID0gYXJjVG8tPmxhcmdlQXJjRmxhZygpOwotICAgIHN3ZWVwID0gYXJjVG8tPnN3ZWVwRmxh
ZygpOwotICAgIHRhcmdldFBvaW50ID0gRmxvYXRQb2ludChhcmNUby0+eCgpLCBhcmNUby0+eSgp
KTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBBcmNUb1NlZ21lbnQgc2VnbWVudDsKKyAg
ICBzZWdtZW50LnJ4ID0gYXJjVG8tPnIxKCk7CisgICAgc2VnbWVudC5yeSA9IGFyY1RvLT5yMigp
OworICAgIHNlZ21lbnQuYW5nbGUgPSBhcmNUby0+YW5nbGUoKTsKKyAgICBzZWdtZW50Lmxhcmdl
QXJjID0gYXJjVG8tPmxhcmdlQXJjRmxhZygpOworICAgIHNlZ21lbnQuc3dlZXAgPSBhcmNUby0+
c3dlZXBGbGFnKCk7CisgICAgc2VnbWVudC50YXJnZXRQb2ludCA9IEZsb2F0UG9pbnQoYXJjVG8t
PngoKSwgYXJjVG8tPnkoKSk7CisgICAgcmV0dXJuIHNlZ21lbnQ7CiB9CiAKIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU2VnTGlzdFNvdXJjZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU2VnTGlzdFNvdXJjZS5oCShyZXZpc2lvbiAyNjMxNzYp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFNlZ0xpc3RTb3VyY2UuaAkod29ya2luZyBj
b3B5KQpAQCAtMzYsMTggKzM2LDE4IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgYm9vbCBoYXNN
b3JlRGF0YSgpIGNvbnN0IGZpbmFsOwogICAgIGJvb2wgbW92ZVRvTmV4dFRva2VuKCkgZmluYWwg
eyByZXR1cm4gdHJ1ZTsgfQotICAgIGJvb2wgcGFyc2VTVkdTZWdtZW50VHlwZShTVkdQYXRoU2Vn
VHlwZSYpIGZpbmFsOwogICAgIFNWR1BhdGhTZWdUeXBlIG5leHRDb21tYW5kKFNWR1BhdGhTZWdU
eXBlKSBmaW5hbDsKIAotICAgIGJvb2wgcGFyc2VNb3ZlVG9TZWdtZW50KEZsb2F0UG9pbnQmKSBm
aW5hbDsKLSAgICBib29sIHBhcnNlTGluZVRvU2VnbWVudChGbG9hdFBvaW50JikgZmluYWw7Ci0g
ICAgYm9vbCBwYXJzZUxpbmVUb0hvcml6b250YWxTZWdtZW50KGZsb2F0JikgZmluYWw7Ci0gICAg
Ym9vbCBwYXJzZUxpbmVUb1ZlcnRpY2FsU2VnbWVudChmbG9hdCYpIGZpbmFsOwotICAgIGJvb2wg
cGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KEZsb2F0UG9pbnQmLCBGbG9hdFBvaW50JiwgRmxvYXRQ
b2ludCYpIGZpbmFsOwotICAgIGJvb2wgcGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KEZs
b2F0UG9pbnQmLCBGbG9hdFBvaW50JikgZmluYWw7Ci0gICAgYm9vbCBwYXJzZUN1cnZlVG9RdWFk
cmF0aWNTZWdtZW50KEZsb2F0UG9pbnQmLCBGbG9hdFBvaW50JikgZmluYWw7Ci0gICAgYm9vbCBw
YXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KEZsb2F0UG9pbnQmKSBmaW5hbDsKLSAg
ICBib29sIHBhcnNlQXJjVG9TZWdtZW50KGZsb2F0JiwgZmxvYXQmLCBmbG9hdCYsIGJvb2wmLCBi
b29sJiwgRmxvYXRQb2ludCYpIGZpbmFsOworICAgIE9wdGlvbmFsPFNWR1BhdGhTZWdUeXBlPiBw
YXJzZVNWR1NlZ21lbnRUeXBlKCkgZmluYWw7CisgICAgT3B0aW9uYWw8TW92ZVRvU2VnbWVudD4g
cGFyc2VNb3ZlVG9TZWdtZW50KCkgZmluYWw7CisgICAgT3B0aW9uYWw8TGluZVRvU2VnbWVudD4g
cGFyc2VMaW5lVG9TZWdtZW50KCkgZmluYWw7CisgICAgT3B0aW9uYWw8TGluZVRvSG9yaXpvbnRh
bFNlZ21lbnQ+IHBhcnNlTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQoKSBmaW5hbDsKKyAgICBPcHRp
b25hbDxMaW5lVG9WZXJ0aWNhbFNlZ21lbnQ+IHBhcnNlTGluZVRvVmVydGljYWxTZWdtZW50KCkg
ZmluYWw7CisgICAgT3B0aW9uYWw8Q3VydmVUb0N1YmljU2VnbWVudD4gcGFyc2VDdXJ2ZVRvQ3Vi
aWNTZWdtZW50KCkgZmluYWw7CisgICAgT3B0aW9uYWw8Q3VydmVUb0N1YmljU21vb3RoU2VnbWVu
dD4gcGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KCkgZmluYWw7CisgICAgT3B0aW9uYWw8
Q3VydmVUb1F1YWRyYXRpY1NlZ21lbnQ+IHBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQoKSBm
aW5hbDsKKyAgICBPcHRpb25hbDxDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudD4gcGFyc2VD
dXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudCgpIGZpbmFsOworICAgIE9wdGlvbmFsPEFyY1Rv
U2VnbWVudD4gcGFyc2VBcmNUb1NlZ21lbnQoKSBmaW5hbDsKIAogICAgIGNvbnN0IFNWR1BhdGhT
ZWdMaXN0JiBtX3BhdGhTZWdMaXN0OwogICAgIFJlZlB0cjxTVkdQYXRoU2VnPiBtX3NlZ21lbnQ7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFNvdXJjZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU291cmNlLmgJKHJldmlzaW9uIDI2MzE3NikKKysr
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMz
LDE4ICszMyw2MyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgaGFzTW9yZURhdGEoKSBj
b25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIG1vdmVUb05leHRUb2tlbigpID0gMDsKLSAgICB2
aXJ0dWFsIGJvb2wgcGFyc2VTVkdTZWdtZW50VHlwZShTVkdQYXRoU2VnVHlwZSYpID0gMDsKICAg
ICB2aXJ0dWFsIFNWR1BhdGhTZWdUeXBlIG5leHRDb21tYW5kKFNWR1BhdGhTZWdUeXBlIHByZXZp
b3VzQ29tbWFuZCkgPSAwOwogCi0gICAgdmlydHVhbCBib29sIHBhcnNlTW92ZVRvU2VnbWVudChG
bG9hdFBvaW50JikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBwYXJzZUxpbmVUb1NlZ21lbnQoRmxv
YXRQb2ludCYpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VMaW5lVG9Ib3Jpem9udGFsU2Vn
bWVudChmbG9hdCYpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VMaW5lVG9WZXJ0aWNhbFNl
Z21lbnQoZmxvYXQmKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHBhcnNlQ3VydmVUb0N1YmljU2Vn
bWVudChGbG9hdFBvaW50JiwgRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmKSA9IDA7Ci0gICAgdmly
dHVhbCBib29sIHBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudChGbG9hdFBvaW50JiwgRmxv
YXRQb2ludCYpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2Vn
bWVudChGbG9hdFBvaW50JiwgRmxvYXRQb2ludCYpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFy
c2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudChGbG9hdFBvaW50JikgPSAwOwotICAgIHZp
cnR1YWwgYm9vbCBwYXJzZUFyY1RvU2VnbWVudChmbG9hdCYsIGZsb2F0JiwgZmxvYXQmLCBib29s
JiwgYm9vbCYsIEZsb2F0UG9pbnQmKSA9IDA7CisgICAgdmlydHVhbCBPcHRpb25hbDxTVkdQYXRo
U2VnVHlwZT4gcGFyc2VTVkdTZWdtZW50VHlwZSgpID0gMDsKKworICAgIHN0cnVjdCBNb3ZlVG9T
ZWdtZW50IHsKKyAgICAgICAgRmxvYXRQb2ludCB0YXJnZXRQb2ludDsKKyAgICB9OworICAgIHZp
cnR1YWwgT3B0aW9uYWw8TW92ZVRvU2VnbWVudD4gcGFyc2VNb3ZlVG9TZWdtZW50KCkgPSAwOwor
CisgICAgc3RydWN0IExpbmVUb1NlZ21lbnQgeworICAgICAgICBGbG9hdFBvaW50IHRhcmdldFBv
aW50OworICAgIH07CisgICAgdmlydHVhbCBPcHRpb25hbDxMaW5lVG9TZWdtZW50PiBwYXJzZUxp
bmVUb1NlZ21lbnQoKSA9IDA7CisKKyAgICBzdHJ1Y3QgTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQg
eworICAgICAgICBmbG9hdCB4OworICAgIH07CisgICAgdmlydHVhbCBPcHRpb25hbDxMaW5lVG9I
b3Jpem9udGFsU2VnbWVudD4gcGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudCgpID0gMDsKKwor
ICAgIHN0cnVjdCBMaW5lVG9WZXJ0aWNhbFNlZ21lbnQgeworICAgICAgICBmbG9hdCB5OworICAg
IH07CisgICAgdmlydHVhbCBPcHRpb25hbDxMaW5lVG9WZXJ0aWNhbFNlZ21lbnQ+IHBhcnNlTGlu
ZVRvVmVydGljYWxTZWdtZW50KCkgPSAwOworCisgICAgc3RydWN0IEN1cnZlVG9DdWJpY1NlZ21l
bnQgeworICAgICAgICBGbG9hdFBvaW50IHBvaW50MTsKKyAgICAgICAgRmxvYXRQb2ludCBwb2lu
dDI7CisgICAgICAgIEZsb2F0UG9pbnQgdGFyZ2V0UG9pbnQ7CisgICAgfTsKKyAgICB2aXJ0dWFs
IE9wdGlvbmFsPEN1cnZlVG9DdWJpY1NlZ21lbnQ+IHBhcnNlQ3VydmVUb0N1YmljU2VnbWVudCgp
ID0gMDsKKworICAgIHN0cnVjdCBDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50IHsKKyAgICAgICAg
RmxvYXRQb2ludCBwb2ludDI7CisgICAgICAgIEZsb2F0UG9pbnQgdGFyZ2V0UG9pbnQ7CisgICAg
fTsKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPEN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQ+IHBhcnNl
Q3VydmVUb0N1YmljU21vb3RoU2VnbWVudCgpID0gMDsKKworICAgIHN0cnVjdCBDdXJ2ZVRvUXVh
ZHJhdGljU2VnbWVudCB7CisgICAgICAgIEZsb2F0UG9pbnQgcG9pbnQxOworICAgICAgICBGbG9h
dFBvaW50IHRhcmdldFBvaW50OworICAgIH07CisgICAgdmlydHVhbCBPcHRpb25hbDxDdXJ2ZVRv
UXVhZHJhdGljU2VnbWVudD4gcGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCgpID0gMDsKKwor
ICAgIHN0cnVjdCBDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudCB7CisgICAgICAgIEZsb2F0
UG9pbnQgdGFyZ2V0UG9pbnQ7CisgICAgfTsKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPEN1cnZlVG9R
dWFkcmF0aWNTbW9vdGhTZWdtZW50PiBwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50
KCkgPSAwOworCisgICAgc3RydWN0IEFyY1RvU2VnbWVudCB7CisgICAgICAgIGZsb2F0IHJ4Owor
ICAgICAgICBmbG9hdCByeTsKKyAgICAgICAgZmxvYXQgYW5nbGU7CisgICAgICAgIGJvb2wgbGFy
Z2VBcmM7CisgICAgICAgIGJvb2wgc3dlZXA7CisgICAgICAgIEZsb2F0UG9pbnQgdGFyZ2V0UG9p
bnQ7CisgICAgfTsKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPEFyY1RvU2VnbWVudD4gcGFyc2VBcmNU
b1NlZ21lbnQoKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFN0cmluZ1NvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTdHJpbmdTb3VyY2UuY3BwCShyZXZpc2lvbiAyNjMxNzYp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFN0cmluZ1NvdXJjZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU1LDE5NSArNTUsMjgwIEBAIGJvb2wgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6bW92
ZVRvTmV4dFRva2UKICAgICByZXR1cm4gc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKG1fY3VycmVudC5t
X2NoYXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2KTsKIH0KIAotdGVtcGxhdGUgPHR5cGVu
YW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgYm9vbCBwYXJzZVNWR1NlZ21lbnRUeXBlSGVscGVy
KGNvbnN0IENoYXJhY3RlclR5cGUqJiBjdXJyZW50LCBTVkdQYXRoU2VnVHlwZSYgcGF0aFNlZ1R5
cGUpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIE9wdGlvbmFsPFNW
R1BhdGhTZWdUeXBlPiBuZXh0Q29tbWFuZEhlbHBlcihjb25zdCBDaGFyYWN0ZXJUeXBlKiYgY3Vy
cmVudCwgU1ZHUGF0aFNlZ1R5cGUgcHJldmlvdXNDb21tYW5kKQoreworICAgIC8vIENoZWNrIGZv
ciByZW1haW5pbmcgY29vcmRpbmF0ZXMgaW4gdGhlIGN1cnJlbnQgY29tbWFuZC4KKyAgICBpZiAo
KCpjdXJyZW50ID09ICcrJyB8fCAqY3VycmVudCA9PSAnLScgfHwgKmN1cnJlbnQgPT0gJy4nIHx8
IGlzQVNDSUlEaWdpdCgqY3VycmVudCkpCisgICAgICAgICYmIHByZXZpb3VzQ29tbWFuZCAhPSBQ
YXRoU2VnQ2xvc2VQYXRoKSB7CisgICAgICAgIGlmIChwcmV2aW91c0NvbW1hbmQgPT0gUGF0aFNl
Z01vdmVUb0FicykKKyAgICAgICAgICAgIHJldHVybiBQYXRoU2VnTGluZVRvQWJzOworICAgICAg
ICBpZiAocHJldmlvdXNDb21tYW5kID09IFBhdGhTZWdNb3ZlVG9SZWwpCisgICAgICAgICAgICBy
ZXR1cm4gUGF0aFNlZ0xpbmVUb1JlbDsKKyAgICAgICAgcmV0dXJuIHByZXZpb3VzQ29tbWFuZDsK
KyAgICB9CisKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCitTVkdQYXRoU2VnVHlwZSBT
VkdQYXRoU3RyaW5nU291cmNlOjpuZXh0Q29tbWFuZChTVkdQYXRoU2VnVHlwZSBwcmV2aW91c0Nv
bW1hbmQpCit7CisgICAgaWYgKG1faXM4Qml0U291cmNlKSB7CisgICAgICAgIGlmIChhdXRvIG5l
eHRDb21tYW5kID0gbmV4dENvbW1hbmRIZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyOCwgcHJl
dmlvdXNDb21tYW5kKSkKKyAgICAgICAgICAgIHJldHVybiAqbmV4dENvbW1hbmQ7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgaWYgKGF1dG8gbmV4dENvbW1hbmQgPSBuZXh0Q29tbWFuZEhlbHBlciht
X2N1cnJlbnQubV9jaGFyYWN0ZXIxNiwgcHJldmlvdXNDb21tYW5kKSkKKyAgICAgICAgICAgIHJl
dHVybiAqbmV4dENvbW1hbmQ7CisgICAgfQorCisgICAgcmV0dXJuICpwYXJzZVNWR1NlZ21lbnRU
eXBlKCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgU1ZH
UGF0aFNlZ1R5cGUgcGFyc2VTVkdTZWdtZW50VHlwZUhlbHBlcihjb25zdCBDaGFyYWN0ZXJUeXBl
KiYgY3VycmVudCkKIHsKICAgICBzd2l0Y2ggKCooY3VycmVudCsrKSkgewogICAgIGNhc2UgJ1on
OgogICAgIGNhc2UgJ3onOgotICAgICAgICBwYXRoU2VnVHlwZSA9IFBhdGhTZWdDbG9zZVBhdGg7
Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gUGF0aFNlZ0Nsb3NlUGF0aDsKICAgICBj
YXNlICdNJzoKLSAgICAgICAgcGF0aFNlZ1R5cGUgPSBQYXRoU2VnTW92ZVRvQWJzOwotICAgICAg
ICBicmVhazsKKyAgICAgICAgcmV0dXJuIFBhdGhTZWdNb3ZlVG9BYnM7CiAgICAgY2FzZSAnbSc6
Ci0gICAgICAgIHBhdGhTZWdUeXBlID0gUGF0aFNlZ01vdmVUb1JlbDsKLSAgICAgICAgYnJlYWs7
CisgICAgICAgIHJldHVybiBQYXRoU2VnTW92ZVRvUmVsOwogICAgIGNhc2UgJ0wnOgotICAgICAg
ICBwYXRoU2VnVHlwZSA9IFBhdGhTZWdMaW5lVG9BYnM7Ci0gICAgICAgIGJyZWFrOworICAgICAg
ICByZXR1cm4gUGF0aFNlZ0xpbmVUb0FiczsKICAgICBjYXNlICdsJzoKLSAgICAgICAgcGF0aFNl
Z1R5cGUgPSBQYXRoU2VnTGluZVRvUmVsOwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJu
IFBhdGhTZWdMaW5lVG9SZWw7CiAgICAgY2FzZSAnQyc6Ci0gICAgICAgIHBhdGhTZWdUeXBlID0g
UGF0aFNlZ0N1cnZlVG9DdWJpY0FiczsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBQ
YXRoU2VnQ3VydmVUb0N1YmljQWJzOwogICAgIGNhc2UgJ2MnOgotICAgICAgICBwYXRoU2VnVHlw
ZSA9IFBhdGhTZWdDdXJ2ZVRvQ3ViaWNSZWw7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1
cm4gUGF0aFNlZ0N1cnZlVG9DdWJpY1JlbDsKICAgICBjYXNlICdRJzoKLSAgICAgICAgcGF0aFNl
Z1R5cGUgPSBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY0FiczsKLSAgICAgICAgYnJlYWs7CisgICAg
ICAgIHJldHVybiBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY0FiczsKICAgICBjYXNlICdxJzoKLSAg
ICAgICAgcGF0aFNlZ1R5cGUgPSBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY1JlbDsKLSAgICAgICAg
YnJlYWs7CisgICAgICAgIHJldHVybiBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY1JlbDsKICAgICBj
YXNlICdBJzoKLSAgICAgICAgcGF0aFNlZ1R5cGUgPSBQYXRoU2VnQXJjQWJzOwotICAgICAgICBi
cmVhazsKKyAgICAgICAgcmV0dXJuIFBhdGhTZWdBcmNBYnM7CiAgICAgY2FzZSAnYSc6Ci0gICAg
ICAgIHBhdGhTZWdUeXBlID0gUGF0aFNlZ0FyY1JlbDsKLSAgICAgICAgYnJlYWs7CisgICAgICAg
IHJldHVybiBQYXRoU2VnQXJjUmVsOwogICAgIGNhc2UgJ0gnOgotICAgICAgICBwYXRoU2VnVHlw
ZSA9IFBhdGhTZWdMaW5lVG9Ib3Jpem9udGFsQWJzOwotICAgICAgICBicmVhazsKKyAgICAgICAg
cmV0dXJuIFBhdGhTZWdMaW5lVG9Ib3Jpem9udGFsQWJzOwogICAgIGNhc2UgJ2gnOgotICAgICAg
ICBwYXRoU2VnVHlwZSA9IFBhdGhTZWdMaW5lVG9Ib3Jpem9udGFsUmVsOwotICAgICAgICBicmVh
azsKKyAgICAgICAgcmV0dXJuIFBhdGhTZWdMaW5lVG9Ib3Jpem9udGFsUmVsOwogICAgIGNhc2Ug
J1YnOgotICAgICAgICBwYXRoU2VnVHlwZSA9IFBhdGhTZWdMaW5lVG9WZXJ0aWNhbEFiczsKLSAg
ICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBQYXRoU2VnTGluZVRvVmVydGljYWxBYnM7CiAg
ICAgY2FzZSAndic6Ci0gICAgICAgIHBhdGhTZWdUeXBlID0gUGF0aFNlZ0xpbmVUb1ZlcnRpY2Fs
UmVsOwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIFBhdGhTZWdMaW5lVG9WZXJ0aWNh
bFJlbDsKICAgICBjYXNlICdTJzoKLSAgICAgICAgcGF0aFNlZ1R5cGUgPSBQYXRoU2VnQ3VydmVU
b0N1YmljU21vb3RoQWJzOwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIFBhdGhTZWdD
dXJ2ZVRvQ3ViaWNTbW9vdGhBYnM7CiAgICAgY2FzZSAncyc6Ci0gICAgICAgIHBhdGhTZWdUeXBl
ID0gUGF0aFNlZ0N1cnZlVG9DdWJpY1Ntb290aFJlbDsKLSAgICAgICAgYnJlYWs7CisgICAgICAg
IHJldHVybiBQYXRoU2VnQ3VydmVUb0N1YmljU21vb3RoUmVsOwogICAgIGNhc2UgJ1QnOgotICAg
ICAgICBwYXRoU2VnVHlwZSA9IFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljU21vb3RoQWJzOwotICAg
ICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljU21vb3Ro
QWJzOwogICAgIGNhc2UgJ3QnOgotICAgICAgICBwYXRoU2VnVHlwZSA9IFBhdGhTZWdDdXJ2ZVRv
UXVhZHJhdGljU21vb3RoUmVsOwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIFBhdGhT
ZWdDdXJ2ZVRvUXVhZHJhdGljU21vb3RoUmVsOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHBhdGhT
ZWdUeXBlID0gUGF0aFNlZ1Vua25vd247CisgICAgICAgIHJldHVybiBQYXRoU2VnVW5rbm93bjsK
ICAgICB9Ci0gICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6
cGFyc2VTVkdTZWdtZW50VHlwZShTVkdQYXRoU2VnVHlwZSYgcGF0aFNlZ1R5cGUpCitPcHRpb25h
bDxTVkdQYXRoU2VnVHlwZT4gU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VTVkdTZWdtZW50VHlw
ZSgpCiB7CiAgICAgaWYgKG1faXM4Qml0U291cmNlKQotICAgICAgICByZXR1cm4gcGFyc2VTVkdT
ZWdtZW50VHlwZUhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXI4LCBwYXRoU2VnVHlwZSk7Ci0g
ICAgcmV0dXJuIHBhcnNlU1ZHU2VnbWVudFR5cGVIZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVy
MTYsIHBhdGhTZWdUeXBlKTsKKyAgICAgICAgcmV0dXJuIHBhcnNlU1ZHU2VnbWVudFR5cGVIZWxw
ZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyOCk7CisgICAgcmV0dXJuIHBhcnNlU1ZHU2VnbWVudFR5
cGVIZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYpOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBib29sIG5leHRDb21tYW5kSGVscGVyKGNvbnN0IENo
YXJhY3RlclR5cGUqJiBjdXJyZW50LCBTVkdQYXRoU2VnVHlwZSBwcmV2aW91c0NvbW1hbmQsIFNW
R1BhdGhTZWdUeXBlJiBuZXh0Q29tbWFuZCkKK09wdGlvbmFsPFNWR1BhdGhTb3VyY2U6Ok1vdmVU
b1NlZ21lbnQ+IFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlTW92ZVRvU2VnbWVudCgpCiB7Ci0g
ICAgLy8gQ2hlY2sgZm9yIHJlbWFpbmluZyBjb29yZGluYXRlcyBpbiB0aGUgY3VycmVudCBjb21t
YW5kLgotICAgIGlmICgoKmN1cnJlbnQgPT0gJysnIHx8ICpjdXJyZW50ID09ICctJyB8fCAqY3Vy
cmVudCA9PSAnLicgfHwgaXNBU0NJSURpZ2l0KCpjdXJyZW50KSkKLSAgICAgICAgJiYgcHJldmlv
dXNDb21tYW5kICE9IFBhdGhTZWdDbG9zZVBhdGgpIHsKLSAgICAgICAgaWYgKHByZXZpb3VzQ29t
bWFuZCA9PSBQYXRoU2VnTW92ZVRvQWJzKSB7Ci0gICAgICAgICAgICBuZXh0Q29tbWFuZCA9IFBh
dGhTZWdMaW5lVG9BYnM7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAg
ICAgICBpZiAocHJldmlvdXNDb21tYW5kID09IFBhdGhTZWdNb3ZlVG9SZWwpIHsKLSAgICAgICAg
ICAgIG5leHRDb21tYW5kID0gUGF0aFNlZ0xpbmVUb1JlbDsKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICB9Ci0gICAgICAgIG5leHRDb21tYW5kID0gcHJldmlvdXNDb21tYW5kOwot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9CisgICAgYXV0byBoZWxwZXIgPSBbXShjb25zdCBh
dXRvKiYgY3VycmVudCwgY29uc3QgYXV0byogZW5kKSAtPiBPcHRpb25hbDxNb3ZlVG9TZWdtZW50
PiB7CisgICAgICAgIGF1dG8gdGFyZ2V0UG9pbnQgPSBwYXJzZUZsb2F0UG9pbnQoY3VycmVudCwg
ZW5kKTsKKyAgICAgICAgaWYgKCF0YXJnZXRQb2ludCkKKyAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisgICAgICAgIAorICAgICAgICBNb3ZlVG9TZWdtZW50IHNlZ21lbnQ7CisgICAg
ICAgIHNlZ21lbnQudGFyZ2V0UG9pbnQgPSBXVEZNb3ZlKCp0YXJnZXRQb2ludCk7CisgICAgICAg
IHJldHVybiBzZWdtZW50OworICAgIH07CiAKLSAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1f
aXM4Qml0U291cmNlKQorICAgICAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3Rl
cjgsIG1fZW5kLm1fY2hhcmFjdGVyOCk7CisgICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9j
aGFyYWN0ZXIxNiwgbV9lbmQubV9jaGFyYWN0ZXIxNik7CiB9CiAKLVNWR1BhdGhTZWdUeXBlIFNW
R1BhdGhTdHJpbmdTb3VyY2U6Om5leHRDb21tYW5kKFNWR1BhdGhTZWdUeXBlIHByZXZpb3VzQ29t
bWFuZCkKK09wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkxpbmVUb1NlZ21lbnQ+IFNWR1BhdGhTdHJp
bmdTb3VyY2U6OnBhcnNlTGluZVRvU2VnbWVudCgpCiB7Ci0gICAgU1ZHUGF0aFNlZ1R5cGUgbmV4
dENvbW1hbmQ7Ci0gICAgaWYgKG1faXM4Qml0U291cmNlKSB7Ci0gICAgICAgIGlmIChuZXh0Q29t
bWFuZEhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXI4LCBwcmV2aW91c0NvbW1hbmQsIG5leHRD
b21tYW5kKSkKLSAgICAgICAgICAgIHJldHVybiBuZXh0Q29tbWFuZDsKLSAgICB9IGVsc2Ugewot
ICAgICAgICBpZiAobmV4dENvbW1hbmRIZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYsIHBy
ZXZpb3VzQ29tbWFuZCwgbmV4dENvbW1hbmQpKQotICAgICAgICAgICAgcmV0dXJuIG5leHRDb21t
YW5kOwotICAgIH0KKyAgICBhdXRvIGhlbHBlciA9IFtdKGNvbnN0IGF1dG8qJiBjdXJyZW50LCBj
b25zdCBhdXRvKiBlbmQpIC0+IE9wdGlvbmFsPExpbmVUb1NlZ21lbnQ+IHsKKyAgICAgICAgYXV0
byB0YXJnZXRQb2ludCA9IHBhcnNlRmxvYXRQb2ludChjdXJyZW50LCBlbmQpOworICAgICAgICBp
ZiAoIXRhcmdldFBvaW50KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAg
ICAgCisgICAgICAgIExpbmVUb1NlZ21lbnQgc2VnbWVudDsKKyAgICAgICAgc2VnbWVudC50YXJn
ZXRQb2ludCA9IFdURk1vdmUoKnRhcmdldFBvaW50KTsKKyAgICAgICAgcmV0dXJuIHNlZ21lbnQ7
CisgICAgfTsKIAotICAgIHBhcnNlU1ZHU2VnbWVudFR5cGUobmV4dENvbW1hbmQpOwotICAgIHJl
dHVybiBuZXh0Q29tbWFuZDsKLX0KLQotYm9vbCBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZU1v
dmVUb1NlZ21lbnQoRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCi17CiAgICAgaWYgKG1faXM4Qml0
U291cmNlKQotICAgICAgICByZXR1cm4gcGFyc2VGbG9hdFBvaW50KG1fY3VycmVudC5tX2NoYXJh
Y3RlcjgsIG1fZW5kLm1fY2hhcmFjdGVyOCwgdGFyZ2V0UG9pbnQpOwotICAgIHJldHVybiBwYXJz
ZUZsb2F0UG9pbnQobV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYsIG1fZW5kLm1fY2hhcmFjdGVyMTYs
IHRhcmdldFBvaW50KTsKKyAgICAgICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0
ZXI4LCBtX2VuZC5tX2NoYXJhY3RlcjgpOworICAgIHJldHVybiBoZWxwZXIobV9jdXJyZW50Lm1f
Y2hhcmFjdGVyMTYsIG1fZW5kLm1fY2hhcmFjdGVyMTYpOwogfQogCi1ib29sIFNWR1BhdGhTdHJp
bmdTb3VyY2U6OnBhcnNlTGluZVRvU2VnbWVudChGbG9hdFBvaW50JiB0YXJnZXRQb2ludCkKK09w
dGlvbmFsPFNWR1BhdGhTb3VyY2U6OkxpbmVUb0hvcml6b250YWxTZWdtZW50PiBTVkdQYXRoU3Ry
aW5nU291cmNlOjpwYXJzZUxpbmVUb0hvcml6b250YWxTZWdtZW50KCkKIHsKLSAgICBpZiAobV9p
czhCaXRTb3VyY2UpCi0gICAgICAgIHJldHVybiBwYXJzZUZsb2F0UG9pbnQobV9jdXJyZW50Lm1f
Y2hhcmFjdGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4LCB0YXJnZXRQb2ludCk7Ci0gICAgcmV0dXJu
IHBhcnNlRmxvYXRQb2ludChtX2N1cnJlbnQubV9jaGFyYWN0ZXIxNiwgbV9lbmQubV9jaGFyYWN0
ZXIxNiwgdGFyZ2V0UG9pbnQpOwotfQorICAgIGF1dG8gaGVscGVyID0gW10oY29uc3QgYXV0byom
IGN1cnJlbnQsIGNvbnN0IGF1dG8qIGVuZCkgLT4gT3B0aW9uYWw8TGluZVRvSG9yaXpvbnRhbFNl
Z21lbnQ+IHsKKyAgICAgICAgYXV0byB4ID0gcGFyc2VOdW1iZXIoY3VycmVudCwgZW5kKTsKKyAg
ICAgICAgaWYgKCF4KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAg
CisgICAgICAgIExpbmVUb0hvcml6b250YWxTZWdtZW50IHNlZ21lbnQ7CisgICAgICAgIHNlZ21l
bnQueCA9ICp4OworICAgICAgICByZXR1cm4gc2VnbWVudDsKKyAgICB9OwogCi1ib29sIFNWR1Bh
dGhTdHJpbmdTb3VyY2U6OnBhcnNlTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQoZmxvYXQmIHgpCi17
CiAgICAgaWYgKG1faXM4Qml0U291cmNlKQotICAgICAgICByZXR1cm4gcGFyc2VOdW1iZXIobV9j
dXJyZW50Lm1fY2hhcmFjdGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4LCB4KTsKLSAgICByZXR1cm4g
cGFyc2VOdW1iZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYsIG1fZW5kLm1fY2hhcmFjdGVyMTYs
IHgpOworICAgICAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjgsIG1fZW5k
Lm1fY2hhcmFjdGVyOCk7CisgICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXIx
NiwgbV9lbmQubV9jaGFyYWN0ZXIxNik7CiB9CiAKLWJvb2wgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6
cGFyc2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnQoZmxvYXQmIHkpCitPcHRpb25hbDxTVkdQYXRoU291
cmNlOjpMaW5lVG9WZXJ0aWNhbFNlZ21lbnQ+IFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlTGlu
ZVRvVmVydGljYWxTZWdtZW50KCkKIHsKKyAgICBhdXRvIGhlbHBlciA9IFtdKGNvbnN0IGF1dG8q
JiBjdXJyZW50LCBjb25zdCBhdXRvKiBlbmQpIC0+IE9wdGlvbmFsPExpbmVUb1ZlcnRpY2FsU2Vn
bWVudD4geworICAgICAgICBhdXRvIHkgPSBwYXJzZU51bWJlcihjdXJyZW50LCBlbmQpOworICAg
ICAgICBpZiAoIXkpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICAK
KyAgICAgICAgTGluZVRvVmVydGljYWxTZWdtZW50IHNlZ21lbnQ7CisgICAgICAgIHNlZ21lbnQu
eSA9ICp5OworICAgICAgICByZXR1cm4gc2VnbWVudDsKKyAgICB9OworCiAgICAgaWYgKG1faXM4
Qml0U291cmNlKQotICAgICAgICByZXR1cm4gcGFyc2VOdW1iZXIobV9jdXJyZW50Lm1fY2hhcmFj
dGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4LCB5KTsKLSAgICByZXR1cm4gcGFyc2VOdW1iZXIobV9j
dXJyZW50Lm1fY2hhcmFjdGVyMTYsIG1fZW5kLm1fY2hhcmFjdGVyMTYsIHkpOworICAgICAgICBy
ZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjgsIG1fZW5kLm1fY2hhcmFjdGVyOCk7
CisgICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXIxNiwgbV9lbmQubV9jaGFy
YWN0ZXIxNik7CiB9CiAKLWJvb2wgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VDdXJ2ZVRvQ3Vi
aWNTZWdtZW50KEZsb2F0UG9pbnQmIHBvaW50MSwgRmxvYXRQb2ludCYgcG9pbnQyLCBGbG9hdFBv
aW50JiB0YXJnZXRQb2ludCkKK09wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkN1cnZlVG9DdWJpY1Nl
Z21lbnQ+IFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlQ3VydmVUb0N1YmljU2VnbWVudCgpCiB7
CisgICAgYXV0byBoZWxwZXIgPSBbXShjb25zdCBhdXRvKiYgY3VycmVudCwgY29uc3QgYXV0byog
ZW5kKSAtPiBPcHRpb25hbDxDdXJ2ZVRvQ3ViaWNTZWdtZW50PiB7CisgICAgICAgIGF1dG8gcG9p
bnQxID0gcGFyc2VGbG9hdFBvaW50KGN1cnJlbnQsIGVuZCk7CisgICAgICAgIGlmICghcG9pbnQx
KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgICAgICBhdXRvIHBvaW50
MiA9IHBhcnNlRmxvYXRQb2ludChjdXJyZW50LCBlbmQpOworICAgICAgICBpZiAoIXBvaW50MikK
KyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICAgICAgYXV0byB0YXJnZXRQ
b2ludCA9IHBhcnNlRmxvYXRQb2ludChjdXJyZW50LCBlbmQpOworICAgICAgICBpZiAoIXRhcmdl
dFBvaW50KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgICAgICBDdXJ2
ZVRvQ3ViaWNTZWdtZW50IHNlZ21lbnQ7CisgICAgICAgIHNlZ21lbnQucG9pbnQxID0gKnBvaW50
MTsKKyAgICAgICAgc2VnbWVudC5wb2ludDIgPSAqcG9pbnQyOworICAgICAgICBzZWdtZW50LnRh
cmdldFBvaW50ID0gKnRhcmdldFBvaW50OworICAgICAgICByZXR1cm4gc2VnbWVudDsKKyAgICB9
OworCiAgICAgaWYgKG1faXM4Qml0U291cmNlKQotICAgICAgICByZXR1cm4gcGFyc2VGbG9hdFBv
aW50MyhtX2N1cnJlbnQubV9jaGFyYWN0ZXI4LCBtX2VuZC5tX2NoYXJhY3RlcjgsIHBvaW50MSwg
cG9pbnQyLCB0YXJnZXRQb2ludCk7Ci0gICAgcmV0dXJuIHBhcnNlRmxvYXRQb2ludDMobV9jdXJy
ZW50Lm1fY2hhcmFjdGVyMTYsIG1fZW5kLm1fY2hhcmFjdGVyMTYsIHBvaW50MSwgcG9pbnQyLCB0
YXJnZXRQb2ludCk7CisgICAgICAgIHJldHVybiBoZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVy
OCwgbV9lbmQubV9jaGFyYWN0ZXI4KTsKKyAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2No
YXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2KTsKIH0KIAotYm9vbCBTVkdQYXRoU3RyaW5n
U291cmNlOjpwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQoRmxvYXRQb2ludCYgcG9pbnQx
LCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCkKK09wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkN1cnZl
VG9DdWJpY1Ntb290aFNlZ21lbnQ+IFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlQ3VydmVUb0N1
YmljU21vb3RoU2VnbWVudCgpCiB7CisgICAgYXV0byBoZWxwZXIgPSBbXShjb25zdCBhdXRvKiYg
Y3VycmVudCwgY29uc3QgYXV0byogZW5kKSAtPiBPcHRpb25hbDxDdXJ2ZVRvQ3ViaWNTbW9vdGhT
ZWdtZW50PiB7CisgICAgICAgIGF1dG8gcG9pbnQyID0gcGFyc2VGbG9hdFBvaW50KGN1cnJlbnQs
IGVuZCk7CisgICAgICAgIGlmICghcG9pbnQyKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKworICAgICAgICBhdXRvIHRhcmdldFBvaW50ID0gcGFyc2VGbG9hdFBvaW50KGN1cnJl
bnQsIGVuZCk7CisgICAgICAgIGlmICghdGFyZ2V0UG9pbnQpCisgICAgICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworCisgICAgICAgIEN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQgc2VnbWVu
dDsKKyAgICAgICAgc2VnbWVudC5wb2ludDIgPSAqcG9pbnQyOworICAgICAgICBzZWdtZW50LnRh
cmdldFBvaW50ID0gKnRhcmdldFBvaW50OworICAgICAgICByZXR1cm4gc2VnbWVudDsKKyAgICB9
OworCiAgICAgaWYgKG1faXM4Qml0U291cmNlKQotICAgICAgICByZXR1cm4gcGFyc2VGbG9hdFBv
aW50MihtX2N1cnJlbnQubV9jaGFyYWN0ZXI4LCBtX2VuZC5tX2NoYXJhY3RlcjgsIHBvaW50MSwg
dGFyZ2V0UG9pbnQpOwotICAgIHJldHVybiBwYXJzZUZsb2F0UG9pbnQyKG1fY3VycmVudC5tX2No
YXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2LCBwb2ludDEsIHRhcmdldFBvaW50KTsKKyAg
ICAgICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXI4LCBtX2VuZC5tX2NoYXJh
Y3RlcjgpOworICAgIHJldHVybiBoZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYsIG1fZW5k
Lm1fY2hhcmFjdGVyMTYpOwogfQogCi1ib29sIFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlQ3Vy
dmVUb1F1YWRyYXRpY1NlZ21lbnQoRmxvYXRQb2ludCYgcG9pbnQyLCBGbG9hdFBvaW50JiB0YXJn
ZXRQb2ludCkKK09wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkN1cnZlVG9RdWFkcmF0aWNTZWdtZW50
PiBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KCkKIHsK
KyAgICBhdXRvIGhlbHBlciA9IFtdKGNvbnN0IGF1dG8qJiBjdXJyZW50LCBjb25zdCBhdXRvKiBl
bmQpIC0+IE9wdGlvbmFsPEN1cnZlVG9RdWFkcmF0aWNTZWdtZW50PiB7CisgICAgICAgIGF1dG8g
cG9pbnQxID0gcGFyc2VGbG9hdFBvaW50KGN1cnJlbnQsIGVuZCk7CisgICAgICAgIGlmICghcG9p
bnQxKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgICAgICBhdXRvIHRh
cmdldFBvaW50ID0gcGFyc2VGbG9hdFBvaW50KGN1cnJlbnQsIGVuZCk7CisgICAgICAgIGlmICgh
dGFyZ2V0UG9pbnQpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgICAg
IEN1cnZlVG9RdWFkcmF0aWNTZWdtZW50IHNlZ21lbnQ7CisgICAgICAgIHNlZ21lbnQucG9pbnQx
ID0gKnBvaW50MTsKKyAgICAgICAgc2VnbWVudC50YXJnZXRQb2ludCA9ICp0YXJnZXRQb2ludDsK
KyAgICAgICAgcmV0dXJuIHNlZ21lbnQ7CisgICAgfTsKKwogICAgIGlmIChtX2lzOEJpdFNvdXJj
ZSkKLSAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXRQb2ludDIobV9jdXJyZW50Lm1fY2hhcmFjdGVy
OCwgbV9lbmQubV9jaGFyYWN0ZXI4LCBwb2ludDIsIHRhcmdldFBvaW50KTsKLSAgICByZXR1cm4g
cGFyc2VGbG9hdFBvaW50MihtX2N1cnJlbnQubV9jaGFyYWN0ZXIxNiwgbV9lbmQubV9jaGFyYWN0
ZXIxNiwgcG9pbnQyLCB0YXJnZXRQb2ludCk7CisgICAgICAgIHJldHVybiBoZWxwZXIobV9jdXJy
ZW50Lm1fY2hhcmFjdGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4KTsKKyAgICByZXR1cm4gaGVscGVy
KG1fY3VycmVudC5tX2NoYXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2KTsKIH0KIAotYm9v
bCBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50
KEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQorT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6Q3VydmVU
b1F1YWRyYXRpY1Ntb290aFNlZ21lbnQ+IFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlQ3VydmVU
b1F1YWRyYXRpY1Ntb290aFNlZ21lbnQoKQogeworICAgIGF1dG8gaGVscGVyID0gW10oY29uc3Qg
YXV0byomIGN1cnJlbnQsIGNvbnN0IGF1dG8qIGVuZCkgLT4gT3B0aW9uYWw8Q3VydmVUb1F1YWRy
YXRpY1Ntb290aFNlZ21lbnQ+IHsKKyAgICAgICAgYXV0byB0YXJnZXRQb2ludCA9IHBhcnNlRmxv
YXRQb2ludChjdXJyZW50LCBlbmQpOworICAgICAgICBpZiAoIXRhcmdldFBvaW50KQorICAgICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgICAgICBDdXJ2ZVRvUXVhZHJhdGljU21v
b3RoU2VnbWVudCBzZWdtZW50OworICAgICAgICBzZWdtZW50LnRhcmdldFBvaW50ID0gKnRhcmdl
dFBvaW50OworICAgICAgICByZXR1cm4gc2VnbWVudDsKKyAgICB9OworCiAgICAgaWYgKG1faXM4
Qml0U291cmNlKQotICAgICAgICByZXR1cm4gcGFyc2VGbG9hdFBvaW50KG1fY3VycmVudC5tX2No
YXJhY3RlcjgsIG1fZW5kLm1fY2hhcmFjdGVyOCwgdGFyZ2V0UG9pbnQpOwotICAgIHJldHVybiBw
YXJzZUZsb2F0UG9pbnQobV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYsIG1fZW5kLm1fY2hhcmFjdGVy
MTYsIHRhcmdldFBvaW50KTsKKyAgICAgICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9jaGFy
YWN0ZXI4LCBtX2VuZC5tX2NoYXJhY3RlcjgpOworICAgIHJldHVybiBoZWxwZXIobV9jdXJyZW50
Lm1fY2hhcmFjdGVyMTYsIG1fZW5kLm1fY2hhcmFjdGVyMTYpOwogfQogCi10ZW1wbGF0ZSA8dHlw
ZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBib29sIHBhcnNlQXJjVG9TZWdtZW50SGVscGVy
KGNvbnN0IENoYXJhY3RlclR5cGUqJiBjdXJyZW50LCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQs
IGZsb2F0JiByeCwgZmxvYXQmIHJ5LCBmbG9hdCYgYW5nbGUsIGJvb2wmIGxhcmdlQXJjLCBib29s
JiBzd2VlcCwgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCitPcHRpb25hbDxTVkdQYXRoU291cmNl
OjpBcmNUb1NlZ21lbnQ+IFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlQXJjVG9TZWdtZW50KCkK
IHsKLSAgICBmbG9hdCB0b1g7Ci0gICAgZmxvYXQgdG9ZOwotICAgIGlmICghcGFyc2VOdW1iZXIo
Y3VycmVudCwgZW5kLCByeCkKLSAgICAgICAgfHwgIXBhcnNlTnVtYmVyKGN1cnJlbnQsIGVuZCwg
cnkpCi0gICAgICAgIHx8ICFwYXJzZU51bWJlcihjdXJyZW50LCBlbmQsIGFuZ2xlKQotICAgICAg
ICB8fCAhcGFyc2VBcmNGbGFnKGN1cnJlbnQsIGVuZCwgbGFyZ2VBcmMpCi0gICAgICAgIHx8ICFw
YXJzZUFyY0ZsYWcoY3VycmVudCwgZW5kLCBzd2VlcCkKLSAgICAgICAgfHwgIXBhcnNlTnVtYmVy
KGN1cnJlbnQsIGVuZCwgdG9YKQotICAgICAgICB8fCAhcGFyc2VOdW1iZXIoY3VycmVudCwgZW5k
LCB0b1kpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgdGFyZ2V0UG9pbnQgPSBGbG9hdFBv
aW50KHRvWCwgdG9ZKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KKyAgICBhdXRvIGhlbHBlciA9IFtd
KGNvbnN0IGF1dG8qJiBjdXJyZW50LCBjb25zdCBhdXRvKiBlbmQpIC0+IE9wdGlvbmFsPEFyY1Rv
U2VnbWVudD4KKyAgICB7CisgICAgICAgIGF1dG8gcnggPSBwYXJzZU51bWJlcihjdXJyZW50LCBl
bmQpOworICAgICAgICBpZiAoIXJ4KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
KyAgICAgICAgYXV0byByeSA9IHBhcnNlTnVtYmVyKGN1cnJlbnQsIGVuZCk7CisgICAgICAgIGlm
ICghcnkpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBhdXRvIGFu
Z2xlID0gcGFyc2VOdW1iZXIoY3VycmVudCwgZW5kKTsKKyAgICAgICAgaWYgKCFhbmdsZSkKKyAg
ICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIGF1dG8gbGFyZ2VBcmMgPSBw
YXJzZUFyY0ZsYWcoY3VycmVudCwgZW5kKTsKKyAgICAgICAgaWYgKCFsYXJnZUFyYykKKyAgICAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIGF1dG8gc3dlZXAgPSBwYXJzZUFy
Y0ZsYWcoY3VycmVudCwgZW5kKTsKKyAgICAgICAgaWYgKCFzd2VlcCkKKyAgICAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIGF1dG8gdGFyZ2V0UG9pbnQgPSBwYXJzZUZsb2F0
UG9pbnQoY3VycmVudCwgZW5kKTsKKyAgICAgICAgaWYgKCF0YXJnZXRQb2ludCkKKyAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICAgICAgQXJjVG9TZWdtZW50IHNlZ21lbnQ7
CisgICAgICAgIHNlZ21lbnQucnggPSAqcng7CisgICAgICAgIHNlZ21lbnQucnkgPSAqcnk7Cisg
ICAgICAgIHNlZ21lbnQuYW5nbGUgPSAqYW5nbGU7CisgICAgICAgIHNlZ21lbnQubGFyZ2VBcmMg
PSAqbGFyZ2VBcmM7CisgICAgICAgIHNlZ21lbnQuc3dlZXAgPSAqc3dlZXA7CisgICAgICAgIHNl
Z21lbnQudGFyZ2V0UG9pbnQgPSAqdGFyZ2V0UG9pbnQ7CisgICAgICAgIHJldHVybiBzZWdtZW50
OworICAgIH07CiAKLWJvb2wgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VBcmNUb1NlZ21lbnQo
ZmxvYXQmIHJ4LCBmbG9hdCYgcnksIGZsb2F0JiBhbmdsZSwgYm9vbCYgbGFyZ2VBcmMsIGJvb2wm
IHN3ZWVwLCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCkKLXsKICAgICBpZiAobV9pczhCaXRTb3Vy
Y2UpCi0gICAgICAgIHJldHVybiBwYXJzZUFyY1RvU2VnbWVudEhlbHBlcihtX2N1cnJlbnQubV9j
aGFyYWN0ZXI4LCBtX2VuZC5tX2NoYXJhY3RlcjgsIHJ4LCByeSwgYW5nbGUsIGxhcmdlQXJjLCBz
d2VlcCwgdGFyZ2V0UG9pbnQpOwotICAgIHJldHVybiBwYXJzZUFyY1RvU2VnbWVudEhlbHBlciht
X2N1cnJlbnQubV9jaGFyYWN0ZXIxNiwgbV9lbmQubV9jaGFyYWN0ZXIxNiwgcngsIHJ5LCBhbmds
ZSwgbGFyZ2VBcmMsIHN3ZWVwLCB0YXJnZXRQb2ludCk7CisgICAgICAgIHJldHVybiBoZWxwZXIo
bV9jdXJyZW50Lm1fY2hhcmFjdGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4KTsKKyAgICByZXR1cm4g
aGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2KTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0
aFN0cmluZ1NvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRo
U3RyaW5nU291cmNlLmgJKHJldmlzaW9uIDI2MzE3NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdQYXRoU3RyaW5nU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDE4ICszMiwxOCBAQCBw
dWJsaWM6CiBwcml2YXRlOgogICAgIGJvb2wgaGFzTW9yZURhdGEoKSBjb25zdCBmaW5hbDsKICAg
ICBib29sIG1vdmVUb05leHRUb2tlbigpIGZpbmFsOwotICAgIGJvb2wgcGFyc2VTVkdTZWdtZW50
VHlwZShTVkdQYXRoU2VnVHlwZSYpIGZpbmFsOwogICAgIFNWR1BhdGhTZWdUeXBlIG5leHRDb21t
YW5kKFNWR1BhdGhTZWdUeXBlIHByZXZpb3VzQ29tbWFuZCkgZmluYWw7CiAKLSAgICBib29sIHBh
cnNlTW92ZVRvU2VnbWVudChGbG9hdFBvaW50JikgZmluYWw7Ci0gICAgYm9vbCBwYXJzZUxpbmVU
b1NlZ21lbnQoRmxvYXRQb2ludCYpIGZpbmFsOwotICAgIGJvb2wgcGFyc2VMaW5lVG9Ib3Jpem9u
dGFsU2VnbWVudChmbG9hdCYpIGZpbmFsOwotICAgIGJvb2wgcGFyc2VMaW5lVG9WZXJ0aWNhbFNl
Z21lbnQoZmxvYXQmKSBmaW5hbDsKLSAgICBib29sIHBhcnNlQ3VydmVUb0N1YmljU2VnbWVudChG
bG9hdFBvaW50JiwgRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmKSBmaW5hbDsKLSAgICBib29sIHBh
cnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudChGbG9hdFBvaW50JiwgRmxvYXRQb2ludCYpIGZp
bmFsOwotICAgIGJvb2wgcGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudChGbG9hdFBvaW50Jiwg
RmxvYXRQb2ludCYpIGZpbmFsOwotICAgIGJvb2wgcGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3Ro
U2VnbWVudChGbG9hdFBvaW50JikgZmluYWw7Ci0gICAgYm9vbCBwYXJzZUFyY1RvU2VnbWVudChm
bG9hdCYsIGZsb2F0JiwgZmxvYXQmLCBib29sJiwgYm9vbCYsIEZsb2F0UG9pbnQmKSBmaW5hbDsK
KyAgICBPcHRpb25hbDxTVkdQYXRoU2VnVHlwZT4gcGFyc2VTVkdTZWdtZW50VHlwZSgpIGZpbmFs
OworICAgIE9wdGlvbmFsPE1vdmVUb1NlZ21lbnQ+IHBhcnNlTW92ZVRvU2VnbWVudCgpIGZpbmFs
OworICAgIE9wdGlvbmFsPExpbmVUb1NlZ21lbnQ+IHBhcnNlTGluZVRvU2VnbWVudCgpIGZpbmFs
OworICAgIE9wdGlvbmFsPExpbmVUb0hvcml6b250YWxTZWdtZW50PiBwYXJzZUxpbmVUb0hvcml6
b250YWxTZWdtZW50KCkgZmluYWw7CisgICAgT3B0aW9uYWw8TGluZVRvVmVydGljYWxTZWdtZW50
PiBwYXJzZUxpbmVUb1ZlcnRpY2FsU2VnbWVudCgpIGZpbmFsOworICAgIE9wdGlvbmFsPEN1cnZl
VG9DdWJpY1NlZ21lbnQ+IHBhcnNlQ3VydmVUb0N1YmljU2VnbWVudCgpIGZpbmFsOworICAgIE9w
dGlvbmFsPEN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQ+IHBhcnNlQ3VydmVUb0N1YmljU21vb3Ro
U2VnbWVudCgpIGZpbmFsOworICAgIE9wdGlvbmFsPEN1cnZlVG9RdWFkcmF0aWNTZWdtZW50PiBw
YXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KCkgZmluYWw7CisgICAgT3B0aW9uYWw8Q3VydmVU
b1F1YWRyYXRpY1Ntb290aFNlZ21lbnQ+IHBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21l
bnQoKSBmaW5hbDsKKyAgICBPcHRpb25hbDxBcmNUb1NlZ21lbnQ+IHBhcnNlQXJjVG9TZWdtZW50
KCkgZmluYWw7CiAKICAgICBTdHJpbmcgbV9zdHJpbmc7CiAgICAgYm9vbCBtX2lzOEJpdFNvdXJj
ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2ludExpc3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9pbnRMaXN0LmgJKHJldmlzaW9uIDI2MzE3NikKKysr
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2ludExpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNjMs
MTIgKzYzLDEzIEBAIHB1YmxpYzoKICAgICAgICAgYm9vbCBkZWxpbVBhcnNlZCA9IGZhbHNlOwog
ICAgICAgICB3aGlsZSAoY3VyIDwgZW5kKSB7CiAgICAgICAgICAgICBkZWxpbVBhcnNlZCA9IGZh
bHNlOwotICAgICAgICAgICAgZmxvYXQgeFBvcyA9IDAuMGY7Ci0gICAgICAgICAgICBpZiAoIXBh
cnNlTnVtYmVyKGN1ciwgZW5kLCB4UG9zKSkKKworICAgICAgICAgICAgYXV0byB4UG9zID0gcGFy
c2VOdW1iZXIoY3VyLCBlbmQpOworICAgICAgICAgICAgaWYgKCF4UG9zKQogICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgZmxvYXQgeVBvcyA9IDAuMGY7Ci0gICAg
ICAgICAgICBpZiAoIXBhcnNlTnVtYmVyKGN1ciwgZW5kLCB5UG9zLCBmYWxzZSkpCisgICAgICAg
ICAgICBhdXRvIHlQb3MgPSBwYXJzZU51bWJlcihjdXIsIGVuZCwgU3VmZml4U2tpcHBpbmdQb2xp
Y3k6OkRvbnRTa2lwKTsKKyAgICAgICAgICAgIGlmICgheVBvcykKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhjdXIsIGVu
ZCk7CkBAIC03OSw3ICs4MCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IHNraXBPcHRpb25hbFNWR1NwYWNlcyhjdXIsIGVuZCk7CiAKLSAgICAgICAgICAgIGFwcGVuZChT
VkdQb2ludDo6Y3JlYXRlKHsgeFBvcywgeVBvcyB9KSk7CisgICAgICAgICAgICBhcHBlbmQoU1ZH
UG9pbnQ6OmNyZWF0ZSh7ICp4UG9zLCAqeVBvcyB9KSk7CiAgICAgICAgIH0KIAogICAgICAgICBy
ZXR1cm4gIWRlbGltUGFyc2VkOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RvT1RGRm9u
dENvbnZlcnNpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUb09U
RkZvbnRDb252ZXJzaW9uLmNwcAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1RvT1RGRm9udENvbnZlcnNpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjksOCAr
MjI5LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGFkZENvZGVwb2ludFJhbmdlcyhjb25zdCBVbmlj
b2RlUmFuZ2VzJiwgSGFzaFNldDxHbHlwaD4mIGdseXBoU2V0KSBjb25zdDsKICAgICB2b2lkIGFk
ZENvZGVwb2ludHMoY29uc3QgSGFzaFNldDxTdHJpbmc+JiBjb2RlcG9pbnRzLCBIYXNoU2V0PEds
eXBoPiYgZ2x5cGhTZXQpIGNvbnN0OwogICAgIHZvaWQgYWRkR2x5cGhOYW1lcyhjb25zdCBIYXNo
U2V0PFN0cmluZz4mIGdseXBoTmFtZXMsIEhhc2hTZXQ8R2x5cGg+JiBnbHlwaFNldCkgY29uc3Q7
Ci0gICAgdm9pZCBhZGRLZXJuaW5nUGFpcihWZWN0b3I8S2VybmluZ0RhdGE+JiwgY29uc3QgU1ZH
S2VybmluZ1BhaXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzaXplX3QgYXBw
ZW5kS0VSTlN1YnRhYmxlKGJvb2wgKFQ6OipidWlsZEtlcm5pbmdQYWlyKShTVkdLZXJuaW5nUGFp
ciYpIGNvbnN0LCB1aW50MTZfdCBjb3ZlcmFnZSk7CisgICAgdm9pZCBhZGRLZXJuaW5nUGFpcihW
ZWN0b3I8S2VybmluZ0RhdGE+JiwgU1ZHS2VybmluZ1BhaXImJikgY29uc3Q7CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4gc2l6ZV90IGFwcGVuZEtFUk5TdWJ0YWJsZShPcHRpb25hbDxTVkdLZXJu
aW5nUGFpcj4gKFQ6OipidWlsZEtlcm5pbmdQYWlyKSgpIGNvbnN0LCB1aW50MTZfdCBjb3ZlcmFn
ZSk7CiAgICAgc2l6ZV90IGZpbmlzaEFwcGVuZGluZ0tFUk5TdWJ0YWJsZShWZWN0b3I8S2Vybmlu
Z0RhdGE+LCB1aW50MTZfdCBjb3ZlcmFnZSk7CiAKICAgICB2b2lkIGFwcGVuZExpZ2F0dXJlU3Vi
dGFibGUoc2l6ZV90IHN1YnRhYmxlUmVjb3JkTG9jYXRpb24pOwpAQCAtMTA0MCw3ICsxMDQwLDcg
QEAgdm9pZCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFkZEdseXBoTmFtZQogICAgIH0KIH0KIAot
dm9pZCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFkZEtlcm5pbmdQYWlyKFZlY3RvcjxLZXJuaW5n
RGF0YT4mIGRhdGEsIGNvbnN0IFNWR0tlcm5pbmdQYWlyJiBrZXJuaW5nUGFpcikgY29uc3QKK3Zv
aWQgU1ZHVG9PVEZGb250Q29udmVydGVyOjphZGRLZXJuaW5nUGFpcihWZWN0b3I8S2VybmluZ0Rh
dGE+JiBkYXRhLCBTVkdLZXJuaW5nUGFpciYmIGtlcm5pbmdQYWlyKSBjb25zdAogewogICAgIEhh
c2hTZXQ8R2x5cGg+IGdseXBoU2V0MTsKICAgICBIYXNoU2V0PEdseXBoPiBnbHlwaFNldDI7CkBA
IC0xMDU5LDEzICsxMDU5LDEyIEBAIHZvaWQgU1ZHVG9PVEZGb250Q29udmVydGVyOjphZGRLZXJu
aW5nUGEKICAgICB9CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBzaXplX3QgU1ZH
VG9PVEZGb250Q29udmVydGVyOjphcHBlbmRLRVJOU3VidGFibGUoYm9vbCAoVDo6KmJ1aWxkS2Vy
bmluZ1BhaXIpKFNWR0tlcm5pbmdQYWlyJikgY29uc3QsIHVpbnQxNl90IGNvdmVyYWdlKQordGVt
cGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHNpemVfdCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFw
cGVuZEtFUk5TdWJ0YWJsZShPcHRpb25hbDxTVkdLZXJuaW5nUGFpcj4gKFQ6OipidWlsZEtlcm5p
bmdQYWlyKSgpIGNvbnN0LCB1aW50MTZfdCBjb3ZlcmFnZSkKIHsKICAgICBWZWN0b3I8S2Vybmlu
Z0RhdGE+IGtlcm5pbmdEYXRhOwogICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGNoaWxkcmVuT2ZU
eXBlPFQ+KG1fZm9udEVsZW1lbnQpKSB7Ci0gICAgICAgIFNWR0tlcm5pbmdQYWlyIGtlcm5pbmdQ
YWlyOwotICAgICAgICBpZiAoKGVsZW1lbnQuKmJ1aWxkS2VybmluZ1BhaXIpKGtlcm5pbmdQYWly
KSkKLSAgICAgICAgICAgIGFkZEtlcm5pbmdQYWlyKGtlcm5pbmdEYXRhLCBrZXJuaW5nUGFpcik7
CisgICAgICAgIGlmIChhdXRvIGtlcm5pbmdQYWlyID0gKGVsZW1lbnQuKmJ1aWxkS2VybmluZ1Bh
aXIpKCkpCisgICAgICAgICAgICBhZGRLZXJuaW5nUGFpcihrZXJuaW5nRGF0YSwgV1RGTW92ZSgq
a2VybmluZ1BhaXIpKTsKICAgICB9CiAgICAgcmV0dXJuIGZpbmlzaEFwcGVuZGluZ0tFUk5TdWJ0
YWJsZShXVEZNb3ZlKGtlcm5pbmdEYXRhKSwgY292ZXJhZ2UpOwogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1RyYW5zZm9ybUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHVHJhbnNmb3JtTGlzdC5oCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHVHJhbnNmb3JtTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsMTcgKzEx
NCwxOCBAQCBwcml2YXRlOgogICAgICAgICBib29sIGRlbGltUGFyc2VkID0gZmFsc2U7CiAgICAg
ICAgIHdoaWxlIChzdGFydCA8IGVuZCkgewogICAgICAgICAgICAgZGVsaW1QYXJzZWQgPSBmYWxz
ZTsKLSAgICAgICAgICAgIFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlIHR5cGUg
PSBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RSQU5TRk9STV9VTktOT1dOOwogICAgICAgICAgICAg
c2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHN0YXJ0LCBlbmQpOwotCi0gICAgICAgICAgICBpZiAoIVNW
R1RyYW5zZm9ybWFibGU6OnBhcnNlQW5kU2tpcFR5cGUoc3RhcnQsIGVuZCwgdHlwZSkpCisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGF1dG8gdHlwZSA9IFNWR1RyYW5zZm9ybWFibGU6OnBhcnNl
QW5kU2tpcFR5cGUoc3RhcnQsIGVuZCk7CisgICAgICAgICAgICBpZiAoIXR5cGUpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICBSZWY8U1ZHVHJhbnNmb3JtPiB0
cmFuc2Zvcm0gPSBTVkdUcmFuc2Zvcm06OmNyZWF0ZSh0eXBlKTsKLSAgICAgICAgICAgIGlmICgh
U1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VUcmFuc2Zvcm1WYWx1ZSh0eXBlLCBzdGFydCwgZW5kLCB0
cmFuc2Zvcm0tPnZhbHVlKCkpKQorICAgICAgICAgICAgYXV0byBwYXJzZWRUcmFuc2Zvcm1WYWx1
ZSA9IFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtVmFsdWUoKnR5cGUsIHN0YXJ0LCBl
bmQpOworICAgICAgICAgICAgaWYgKCFwYXJzZWRUcmFuc2Zvcm1WYWx1ZSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIGFwcGVuZChXVEZNb3ZlKHRyYW5zZm9y
bSkpOworICAgICAgICAgICAgYXBwZW5kKFNWR1RyYW5zZm9ybTo6Y3JlYXRlKCpwYXJzZWRUcmFu
c2Zvcm1WYWx1ZSkpOworCiAgICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoc3RhcnQs
IGVuZCk7CiAgICAgICAgICAgICBpZiAoc3RhcnQgPCBlbmQgJiYgKnN0YXJ0ID09ICcsJykgewog
ICAgICAgICAgICAgICAgIGRlbGltUGFyc2VkID0gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdUcmFuc2Zvcm1hYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHVHJhbnNmb3JtYWJsZS5jcHAJKHJldmlzaW9uIDI2MzE3NikKKysrIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdUcmFuc2Zvcm1hYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsOCArNDMs
MTIgQEAgc3RhdGljIGludCBwYXJzZVRyYW5zZm9ybVBhcmFtTGlzdChjb25zdAogICAgIHNraXBP
cHRpb25hbFNWR1NwYWNlcyhwdHIsIGVuZCk7CiAKICAgICB3aGlsZSAocmVxdWlyZWRQYXJhbXMg
PCByZXF1aXJlZCkgewotICAgICAgICBpZiAocHRyID49IGVuZCB8fCAhcGFyc2VOdW1iZXIocHRy
LCBlbmQsIHZhbHVlc1tyZXF1aXJlZFBhcmFtc10sIGZhbHNlKSkKKyAgICAgICAgaWYgKHB0ciA+
PSBlbmQpCiAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGF1dG8gcGFyc2VkTnVtYmVy
ID0gcGFyc2VOdW1iZXIocHRyLCBlbmQsIFN1ZmZpeFNraXBwaW5nUG9saWN5OjpEb250U2tpcCk7
CisgICAgICAgIGlmICghcGFyc2VkTnVtYmVyKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAg
ICAgICB2YWx1ZXNbcmVxdWlyZWRQYXJhbXNdID0gKnBhcnNlZE51bWJlcjsKICAgICAgICAgcmVx
dWlyZWRQYXJhbXMrKzsKICAgICAgICAgaWYgKHJlcXVpcmVkUGFyYW1zIDwgcmVxdWlyZWQpCiAg
ICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXNPckRlbGltaXRlcihwdHIsIGVuZCk7CkBA
IC02Myw4ICs2NywxMiBAQCBzdGF0aWMgaW50IHBhcnNlVHJhbnNmb3JtUGFyYW1MaXN0KGNvbnN0
CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgfSBlbHNlIHsKICAgICAgICAgd2hpbGUgKG9w
dGlvbmFsUGFyYW1zIDwgb3B0aW9uYWwpIHsKLSAgICAgICAgICAgIGlmIChwdHIgPj0gZW5kIHx8
ICFwYXJzZU51bWJlcihwdHIsIGVuZCwgdmFsdWVzW3JlcXVpcmVkUGFyYW1zICsgb3B0aW9uYWxQ
YXJhbXNdLCBmYWxzZSkpCisgICAgICAgICAgICBpZiAocHRyID49IGVuZCkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICBhdXRvIHBhcnNlZE51bWJlciA9IHBhcnNlTnVt
YmVyKHB0ciwgZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNraXApOworICAgICAgICAg
ICAgaWYgKCFwYXJzZWROdW1iZXIpCiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAg
ICAgICAgdmFsdWVzW3JlcXVpcmVkUGFyYW1zICsgb3B0aW9uYWxQYXJhbXNdID0gKnBhcnNlZE51
bWJlcjsKICAgICAgICAgICAgIG9wdGlvbmFsUGFyYW1zKys7CiAgICAgICAgICAgICBpZiAob3B0
aW9uYWxQYXJhbXMgPCBvcHRpb25hbCkKICAgICAgICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdT
cGFjZXNPckRlbGltaXRlcihwdHIsIGVuZCk7CkBAIC05MCwxNiArOTgsMTcgQEAgc3RhdGljIGNv
bnN0IGludCBvcHRpb25hbFZhbHVlc0ZvclR5cGVbXQogLy8gVGhpcyBkZXN0cnVjdG9yIGlzIG5l
ZWRlZCBpbiBvcmRlciB0byBsaW5rIGNvcnJlY3RseSB3aXRoIEludGVsIElDQy4KIFNWR1RyYW5z
Zm9ybWFibGU6On5TVkdUcmFuc2Zvcm1hYmxlKCkgPSBkZWZhdWx0OwogCi1ib29sIFNWR1RyYW5z
Zm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtVmFsdWUoU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5z
Zm9ybVR5cGUgdHlwZSwgY29uc3QgVUNoYXIqJiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQsIFNWR1Ry
YW5zZm9ybVZhbHVlJiB0cmFuc2Zvcm0pCitPcHRpb25hbDxTVkdUcmFuc2Zvcm1WYWx1ZT4gU1ZH
VHJhbnNmb3JtYWJsZTo6cGFyc2VUcmFuc2Zvcm1WYWx1ZShTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZH
VHJhbnNmb3JtVHlwZSB0eXBlLCBjb25zdCBVQ2hhciomIHB0ciwgY29uc3QgVUNoYXIqIGVuZCkK
IHsKICAgICBpZiAodHlwZSA9PSBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RSQU5TRk9STV9VTktO
T1dOKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAKICAgICBpbnQgdmFsdWVDb3VudCA9IDA7CiAgICAgZmxvYXQgdmFsdWVzW10gPSB7MCwgMCwg
MCwgMCwgMCwgMH07CiAgICAgaWYgKCh2YWx1ZUNvdW50ID0gcGFyc2VUcmFuc2Zvcm1QYXJhbUxp
c3QocHRyLCBlbmQsIHZhbHVlcywgcmVxdWlyZWRWYWx1ZXNGb3JUeXBlW3R5cGVdLCBvcHRpb25h
bFZhbHVlc0ZvclR5cGVbdHlwZV0pKSA8IDApCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAorICAgIFNWR1RyYW5zZm9ybVZhbHVlIHRyYW5zZm9y
bTsKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICBjYXNlIFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdf
VFJBTlNGT1JNX1VOS05PV046CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTMz
LDcgKzE0Miw3IEBAIGJvb2wgU1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VUcmFuc2Zvcm1WYWwKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHRyYW5z
Zm9ybTsKIH0KIAogc3RhdGljIGNvbnN0IFVDaGFyIHNrZXdYRGVzY1tdID0gIHsncycsICdrJywg
J2UnLCAndycsICdYJ307CkBAIC0xNDMsMzkgKzE1MiwzNSBAQCBzdGF0aWMgY29uc3QgVUNoYXIg
dHJhbnNsYXRlRGVzY1tdID0gIHsnCiBzdGF0aWMgY29uc3QgVUNoYXIgcm90YXRlRGVzY1tdID0g
IHsncicsICdvJywgJ3QnLCAnYScsICd0JywgJ2UnfTsKIHN0YXRpYyBjb25zdCBVQ2hhciBtYXRy
aXhEZXNjW10gPSAgeydtJywgJ2EnLCAndCcsICdyJywgJ2knLCAneCd9OwogCi1ib29sIFNWR1Ry
YW5zZm9ybWFibGU6OnBhcnNlQW5kU2tpcFR5cGUoY29uc3QgVUNoYXIqJiBjdXJyVHJhbnNmb3Jt
LCBjb25zdCBVQ2hhciogZW5kLCBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZSYg
dHlwZSkKK09wdGlvbmFsPFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlPiBTVkdU
cmFuc2Zvcm1hYmxlOjpwYXJzZUFuZFNraXBUeXBlKGNvbnN0IFVDaGFyKiYgY3VyclRyYW5zZm9y
bSwgY29uc3QgVUNoYXIqIGVuZCkKIHsKICAgICBpZiAoY3VyclRyYW5zZm9ybSA+PSBlbmQpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAg
IGlmICgqY3VyclRyYW5zZm9ybSA9PSAncycpIHsKICAgICAgICAgaWYgKHNraXBTdHJpbmcoY3Vy
clRyYW5zZm9ybSwgZW5kLCBza2V3WERlc2MsIFdURl9BUlJBWV9MRU5HVEgoc2tld1hEZXNjKSkp
Ci0gICAgICAgICAgICB0eXBlID0gU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR19UUkFOU0ZPUk1fU0tF
V1g7CisgICAgICAgICAgICByZXR1cm4gU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR19UUkFOU0ZPUk1f
U0tFV1g7CiAgICAgICAgIGVsc2UgaWYgKHNraXBTdHJpbmcoY3VyclRyYW5zZm9ybSwgZW5kLCBz
a2V3WURlc2MsIFdURl9BUlJBWV9MRU5HVEgoc2tld1lEZXNjKSkpCi0gICAgICAgICAgICB0eXBl
ID0gU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR19UUkFOU0ZPUk1fU0tFV1k7CisgICAgICAgICAgICBy
ZXR1cm4gU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR19UUkFOU0ZPUk1fU0tFV1k7CiAgICAgICAgIGVs
c2UgaWYgKHNraXBTdHJpbmcoY3VyclRyYW5zZm9ybSwgZW5kLCBzY2FsZURlc2MsIFdURl9BUlJB
WV9MRU5HVEgoc2NhbGVEZXNjKSkpCi0gICAgICAgICAgICB0eXBlID0gU1ZHVHJhbnNmb3JtVmFs
dWU6OlNWR19UUkFOU0ZPUk1fU0NBTEU7CisgICAgICAgICAgICByZXR1cm4gU1ZHVHJhbnNmb3Jt
VmFsdWU6OlNWR19UUkFOU0ZPUk1fU0NBTEU7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfSBlbHNl
IGlmIChza2lwU3RyaW5nKGN1cnJUcmFuc2Zvcm0sIGVuZCwgdHJhbnNsYXRlRGVzYywgV1RGX0FS
UkFZX0xFTkdUSCh0cmFuc2xhdGVEZXNjKSkpCi0gICAgICAgIHR5cGUgPSBTVkdUcmFuc2Zvcm1W
YWx1ZTo6U1ZHX1RSQU5TRk9STV9UUkFOU0xBVEU7CisgICAgICAgIHJldHVybiBTVkdUcmFuc2Zv
cm1WYWx1ZTo6U1ZHX1RSQU5TRk9STV9UUkFOU0xBVEU7CiAgICAgZWxzZSBpZiAoc2tpcFN0cmlu
ZyhjdXJyVHJhbnNmb3JtLCBlbmQsIHJvdGF0ZURlc2MsIFdURl9BUlJBWV9MRU5HVEgocm90YXRl
RGVzYykpKQotICAgICAgICB0eXBlID0gU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR19UUkFOU0ZPUk1f
Uk9UQVRFOworICAgICAgICByZXR1cm4gU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR19UUkFOU0ZPUk1f
Uk9UQVRFOwogICAgIGVsc2UgaWYgKHNraXBTdHJpbmcoY3VyclRyYW5zZm9ybSwgZW5kLCBtYXRy
aXhEZXNjLCBXVEZfQVJSQVlfTEVOR1RIKG1hdHJpeERlc2MpKSkKLSAgICAgICAgdHlwZSA9IFNW
R1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX01BVFJJWDsKLSAgICBlbHNlCi0gICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJB
TlNGT1JNX01BVFJJWDsKIAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiB9CiAKIFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlIFNWR1RyYW5zZm9y
bWFibGU6OnBhcnNlVHJhbnNmb3JtVHlwZShjb25zdCBTdHJpbmcmIHR5cGVTdHJpbmcpCiB7Ci0g
ICAgU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGUgdHlwZSA9IFNWR1RyYW5zZm9y
bVZhbHVlOjpTVkdfVFJBTlNGT1JNX1VOS05PV047CiAgICAgYXV0byB1cGNvbnZlcnRlZENoYXJh
Y3RlcnMgPSBTdHJpbmdWaWV3KHR5cGVTdHJpbmcpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwog
ICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOwotICAg
IHBhcnNlQW5kU2tpcFR5cGUoY2hhcmFjdGVycywgY2hhcmFjdGVycyArIHR5cGVTdHJpbmcubGVu
Z3RoKCksIHR5cGUpOwotICAgIHJldHVybiB0eXBlOworICAgIHJldHVybiBwYXJzZUFuZFNraXBU
eXBlKGNoYXJhY3RlcnMsIGNoYXJhY3RlcnMgKyB0eXBlU3RyaW5nLmxlbmd0aCgpKS52YWx1ZU9y
KFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX1VOS05PV04pOwogfQogCiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtYWJsZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm1hYmxlLmgJKHJldmlzaW9uIDI2MzE3NikKKysr
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm1hYmxlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMyLDkgKzMyLDkgQEAgY2xhc3MgU1ZHVHJhbnNmb3JtYWJsZSA6IHB1YmxpYyBTVkdMb2NhdAog
cHVibGljOgogICAgIHZpcnR1YWwgflNWR1RyYW5zZm9ybWFibGUoKTsKIAotICAgIHN0YXRpYyBi
b29sIHBhcnNlVHJhbnNmb3JtVmFsdWUoU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5
cGUsIGNvbnN0IFVDaGFyKiYgcHRyLCBjb25zdCBVQ2hhciogZW5kLCBTVkdUcmFuc2Zvcm1WYWx1
ZSYpOworICAgIHN0YXRpYyBPcHRpb25hbDxTVkdUcmFuc2Zvcm1WYWx1ZT4gcGFyc2VUcmFuc2Zv
cm1WYWx1ZShTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZSwgY29uc3QgVUNoYXIq
JiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQpOwogICAgIHN0YXRpYyBTVkdUcmFuc2Zvcm1WYWx1ZTo6
U1ZHVHJhbnNmb3JtVHlwZSBwYXJzZVRyYW5zZm9ybVR5cGUoY29uc3QgU3RyaW5nJik7Ci0gICAg
c3RhdGljIGJvb2wgcGFyc2VBbmRTa2lwVHlwZShjb25zdCBVQ2hhciomIGN1cnJUcmFuc2Zvcm0s
IGNvbnN0IFVDaGFyKiBlbmQsIFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlJik7
CisgICAgc3RhdGljIE9wdGlvbmFsPFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBl
PiBwYXJzZUFuZFNraXBUeXBlKGNvbnN0IFVDaGFyKiYgY3VyclRyYW5zZm9ybSwgY29uc3QgVUNo
YXIqIGVuZCk7CiAKICAgICBBZmZpbmVUcmFuc2Zvcm0gbG9jYWxDb29yZGluYXRlU3BhY2VUcmFu
c2Zvcm0oU1ZHTG9jYXRhYmxlOjpDVE1TY29wZSkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYW5p
bWF0ZWRMb2NhbFRyYW5zZm9ybSgpOyB9CiAgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gYW5p
bWF0ZWRMb2NhbFRyYW5zZm9ybSgpIGNvbnN0ID0gMDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdWS2VybkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdWS2VybkVsZW1lbnQuY3BwCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHVktlcm5FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsMjQgKzQzLDQ0IEBA
IFJlZjxTVkdWS2VybkVsZW1lbnQ+IFNWR1ZLZXJuRWxlbWVudDo6Y3IKICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBTVkdWS2VybkVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAotYm9v
bCBTVkdWS2VybkVsZW1lbnQ6OmJ1aWxkVmVydGljYWxLZXJuaW5nUGFpcihTVkdLZXJuaW5nUGFp
ciYga2VybmluZ1BhaXIpIGNvbnN0CitPcHRpb25hbDxTVkdLZXJuaW5nUGFpcj4gU1ZHVktlcm5F
bGVtZW50OjpidWlsZFZlcnRpY2FsS2VybmluZ1BhaXIoKSBjb25zdAogeworICAgIC8vIEZJWE1F
OiBDYW4gdGhpcyBiZSBzaGFyZWQgd2l0aCBTVkdIS2VybkVsZW1lbnQ6OmJ1aWxkVmVydGljYWxL
ZXJuaW5nUGFpcj8KKwogICAgIGF1dG8mIHUxID0gYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXph
dGlvbihTVkdOYW1lczo6dTFBdHRyKTsKICAgICBhdXRvJiBnMSA9IGF0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24oU1ZHTmFtZXM6OmcxQXR0cik7CiAgICAgYXV0byYgdTIgPSBhdHRyaWJ1
dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFNWR05hbWVzOjp1MkF0dHIpOwogICAgIGF1dG8mIGcy
ID0gYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihTVkdOYW1lczo6ZzJBdHRyKTsKICAg
ICBpZiAoKHUxLmlzRW1wdHkoKSAmJiBnMS5pc0VtcHR5KCkpIHx8ICh1Mi5pc0VtcHR5KCkgJiYg
ZzIuaXNFbXB0eSgpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OworCisgICAgYXV0byBnbHlwaE5hbWUxID0gcGFyc2VHbHlwaE5hbWUoZzEpOwor
ICAgIGlmICghZ2x5cGhOYW1lMSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBh
dXRvIGdseXBoTmFtZTIgPSBwYXJzZUdseXBoTmFtZShnMik7CisgICAgaWYgKCFnbHlwaE5hbWUy
KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGF1dG8gdW5pY29kZVN0cmluZzEg
PSBwYXJzZUtlcm5pbmdVbmljb2RlU3RyaW5nKHUxKTsKKyAgICBpZiAoIXVuaWNvZGVTdHJpbmcx
KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGF1dG8gdW5pY29kZVN0cmluZzIg
PSBwYXJzZUtlcm5pbmdVbmljb2RlU3RyaW5nKHUyKTsKKyAgICBpZiAoIXVuaWNvZGVTdHJpbmcy
KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgYm9vbCBvayA9IGZhbHNlOwor
ICAgIGF1dG8ga2VybmluZyA9IGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oU1ZHTmFt
ZXM6OmtBdHRyKS5zdHJpbmcoKS50b0Zsb2F0KCZvayk7CisgICAgaWYgKCFvaykKKyAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGlmIChwYXJzZUdseXBoTmFtZShnMSwga2Vybmlu
Z1BhaXIuZ2x5cGhOYW1lMSkKLSAgICAgICAgJiYgcGFyc2VHbHlwaE5hbWUoZzIsIGtlcm5pbmdQ
YWlyLmdseXBoTmFtZTIpCi0gICAgICAgICYmIHBhcnNlS2VybmluZ1VuaWNvZGVTdHJpbmcodTEs
IGtlcm5pbmdQYWlyLnVuaWNvZGVSYW5nZTEsIGtlcm5pbmdQYWlyLnVuaWNvZGVOYW1lMSkKLSAg
ICAgICAgJiYgcGFyc2VLZXJuaW5nVW5pY29kZVN0cmluZyh1Miwga2VybmluZ1BhaXIudW5pY29k
ZVJhbmdlMiwga2VybmluZ1BhaXIudW5pY29kZU5hbWUyKSkgewotICAgICAgICBib29sIG9rID0g
ZmFsc2U7Ci0gICAgICAgIGtlcm5pbmdQYWlyLmtlcm5pbmcgPSBhdHRyaWJ1dGVXaXRob3V0U3lu
Y2hyb25pemF0aW9uKFNWR05hbWVzOjprQXR0cikuc3RyaW5nKCkudG9GbG9hdCgmb2spOwotICAg
ICAgICByZXR1cm4gb2s7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKKyAgICBTVkdLZXJuaW5n
UGFpciBrZXJuaW5nUGFpcjsKKyAgICBrZXJuaW5nUGFpci5nbHlwaE5hbWUxID0gV1RGTW92ZSgq
Z2x5cGhOYW1lMSk7CisgICAga2VybmluZ1BhaXIuZ2x5cGhOYW1lMiA9IFdURk1vdmUoKmdseXBo
TmFtZTIpOworICAgIGtlcm5pbmdQYWlyLnVuaWNvZGVSYW5nZTEgPSBXVEZNb3ZlKHVuaWNvZGVT
dHJpbmcxLT5maXJzdCk7CisgICAga2VybmluZ1BhaXIudW5pY29kZU5hbWUxID0gV1RGTW92ZSh1
bmljb2RlU3RyaW5nMS0+c2Vjb25kKTsKKyAgICBrZXJuaW5nUGFpci51bmljb2RlUmFuZ2UyID0g
V1RGTW92ZSh1bmljb2RlU3RyaW5nMi0+Zmlyc3QpOworICAgIGtlcm5pbmdQYWlyLnVuaWNvZGVO
YW1lMiA9IFdURk1vdmUodW5pY29kZVN0cmluZzItPnNlY29uZCk7CisgICAga2VybmluZ1BhaXIu
a2VybmluZyA9IGtlcm5pbmc7CisgICAgcmV0dXJuIGtlcm5pbmdQYWlyOwogfQogCiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVktlcm5FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1ZLZXJuRWxlbWVudC5oCShyZXZpc2lvbiAyNjMxNzYpCisrKyBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHVktlcm5FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMx
LDcgKzMxLDcgQEAgY2xhc3MgU1ZHVktlcm5FbGVtZW50IGZpbmFsIDogcHVibGljIFNWRwogcHVi
bGljOgogICAgIHN0YXRpYyBSZWY8U1ZHVktlcm5FbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlm
aWVkTmFtZSYsIERvY3VtZW50Jik7CiAKLSAgICBib29sIGJ1aWxkVmVydGljYWxLZXJuaW5nUGFp
cihTVkdLZXJuaW5nUGFpciYga2VybmluZ1BhaXIpIGNvbnN0OworICAgIE9wdGlvbmFsPFNWR0tl
cm5pbmdQYWlyPiBidWlsZFZlcnRpY2FsS2VybmluZ1BhaXIoKSBjb25zdDsKIAogcHJpdmF0ZToK
ICAgICBTVkdWS2VybkVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Jik7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVmlld1NwZWMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdWaWV3U3BlYy5jcHAJKHJldmlzaW9uIDI2MzE3NikKKysrIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdWaWV3U3BlYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5LDEw
ICs4OSw3IEBAIGJvb2wgU1ZHVmlld1NwZWM6OnBhcnNlVmlld1NwZWMoY29uc3QgU3QKICAgICAg
ICAgICAgICAgICBpZiAoY3VyclZpZXdTcGVjID49IGVuZCB8fCAqY3VyclZpZXdTcGVjICE9ICco
JykKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIGN1
cnJWaWV3U3BlYysrOwotICAgICAgICAgICAgICAgIEZsb2F0UmVjdCB2aWV3Qm94OwotICAgICAg
ICAgICAgICAgIGlmICghU1ZHRml0VG9WaWV3Qm94OjpwYXJzZVZpZXdCb3goY3VyclZpZXdTcGVj
LCBlbmQsIHZpZXdCb3gsIGZhbHNlKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgICAgIHNldFZpZXdCb3godmlld0JveCk7CisgICAgICAgICAgICAgICAg
c2V0Vmlld0JveChTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlVmlld0JveChjdXJyVmlld1NwZWMsIGVu
ZCwgZmFsc2UpLnZhbHVlKCkpOwogICAgICAgICAgICAgICAgIGlmIChjdXJyVmlld1NwZWMgPj0g
ZW5kIHx8ICpjdXJyVmlld1NwZWMgIT0gJyknKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgICAgICAgICAgY3VyclZpZXdTcGVjKys7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBs
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0
aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rp
b25JbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1NCwxMCArMjU0LDggQEAgcHVibGljOgogCiAg
ICAgT3B0aW9uYWw8ZmxvYXQ+IGNhbGN1bGF0ZURpc3RhbmNlKFNWR0VsZW1lbnQqLCBjb25zdCBT
dHJpbmcmIGZyb20sIGNvbnN0IFN0cmluZyYgdG8pIGNvbnN0IG92ZXJyaWRlCiAgICAgewotICAg
ICAgICBmbG9hdCBmcm9tTnVtYmVyID0gMDsKLSAgICAgICAgZmxvYXQgdG9OdW1iZXIgPSAwOwot
ICAgICAgICBwYXJzZU51bWJlckZyb21TdHJpbmcoZnJvbSwgZnJvbU51bWJlcik7Ci0gICAgICAg
IHBhcnNlTnVtYmVyRnJvbVN0cmluZyh0bywgdG9OdW1iZXIpOworICAgICAgICBmbG9hdCBmcm9t
TnVtYmVyID0gcGFyc2VOdW1iZXIoZnJvbSkudmFsdWVPcigwKTsKKyAgICAgICAgZmxvYXQgdG9O
dW1iZXIgPSBwYXJzZU51bWJlcih0bykudmFsdWVPcigwKTsKICAgICAgICAgcmV0dXJuIGZhYnNm
KHRvTnVtYmVyIC0gZnJvbU51bWJlcik7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvcHJvcGVydGllcy9TVkdQcm9wZXJ0eVRyYWl0cy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR1Byb3BlcnR5VHJhaXRzLmgJKHJldmlzaW9uIDI2MzE3
NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR1Byb3BlcnR5VHJhaXRzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTc1LDEwICs3NSwxMCBAQCBzdHJ1Y3QgU1ZHUHJvcGVydHlUcmFp
dHM8c3RkOjpwYWlyPGludCwgCiAgICAgc3RhdGljIHN0ZDo6cGFpcjxpbnQsIGludD4gaW5pdGlh
bFZhbHVlKCkgeyByZXR1cm4geyB9OyB9CiAgICAgc3RhdGljIHN0ZDo6cGFpcjxpbnQsIGludD4g
ZnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKICAgICB7Ci0gICAgICAgIGZsb2F0IGZp
cnN0TnVtYmVyID0gMCwgc2Vjb25kTnVtYmVyID0gMDsKLSAgICAgICAgaWYgKCFwYXJzZU51bWJl
ck9wdGlvbmFsTnVtYmVyKHN0cmluZywgZmlyc3ROdW1iZXIsIHNlY29uZE51bWJlcikpCisgICAg
ICAgIGF1dG8gcmVzdWx0ID0gcGFyc2VOdW1iZXJPcHRpb25hbE51bWJlcihzdHJpbmcpOworICAg
ICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgIHJldHVy
biBzdGQ6Om1ha2VfcGFpcihzdGF0aWNfY2FzdDxpbnQ+KHJvdW5kZihmaXJzdE51bWJlcikpLCBz
dGF0aWNfY2FzdDxpbnQ+KHJvdW5kZihzZWNvbmROdW1iZXIpKSk7CisgICAgICAgIHJldHVybiBz
dGQ6Om1ha2VfcGFpcihzdGF0aWNfY2FzdDxpbnQ+KHJvdW5kZihyZXN1bHQtPmZpcnN0KSksIHN0
YXRpY19jYXN0PGludD4ocm91bmRmKHJlc3VsdC0+c2Vjb25kKSkpOwogICAgIH0KICAgICBzdGF0
aWMgT3B0aW9uYWw8c3RkOjpwYWlyPGludCwgaW50Pj4gcGFyc2UoY29uc3QgUXVhbGlmaWVkTmFt
ZSYsIGNvbnN0IFN0cmluZyYpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBpbml0aWFs
VmFsdWUoKTsgfQogICAgIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmcoc3RkOjpwYWlyPGludCwgaW50
PikgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIGVtcHR5U3RyaW5nKCk7IH0KQEAgLTg5
LDE3ICs4OSwxMSBAQCBzdHJ1Y3QgU1ZHUHJvcGVydHlUcmFpdHM8ZmxvYXQ+IHsKICAgICBzdGF0
aWMgZmxvYXQgaW5pdGlhbFZhbHVlKCkgeyByZXR1cm4gMDsgfQogICAgIHN0YXRpYyBmbG9hdCBm
cm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKQogICAgIHsKLSAgICAgICAgZmxvYXQgbnVt
YmVyID0gMDsKLSAgICAgICAgaWYgKCFwYXJzZU51bWJlckZyb21TdHJpbmcoc3RyaW5nLCBudW1i
ZXIpKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiBudW1iZXI7CisgICAg
ICAgIHJldHVybiBwYXJzZU51bWJlcihzdHJpbmcpLnZhbHVlT3IoMCk7CiAgICAgfQogICAgIHN0
YXRpYyBPcHRpb25hbDxmbG9hdD4gcGFyc2UoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IFN0
cmluZyYgc3RyaW5nKQogICAgIHsKLSAgICAgICAgZmxvYXQgbnVtYmVyOwotICAgICAgICBpZiAo
IXBhcnNlTnVtYmVyRnJvbVN0cmluZyhzdHJpbmcsIG51bWJlcikpCi0gICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwotICAgICAgICByZXR1cm4gbnVtYmVyOworICAgICAgICByZXR1cm4g
cGFyc2VOdW1iZXIoc3RyaW5nKTsKICAgICB9CiAgICAgc3RhdGljIFN0cmluZyB0b1N0cmluZyhm
bG9hdCB0eXBlKSB7IHJldHVybiBTdHJpbmc6Om51bWJlcih0eXBlKTsgfQogfTsKQEAgLTEwOSwx
MCArMTAzLDcgQEAgc3RydWN0IFNWR1Byb3BlcnR5VHJhaXRzPHN0ZDo6cGFpcjxmbG9hdAogICAg
IHN0YXRpYyBzdGQ6OnBhaXI8ZmxvYXQsIGZsb2F0PiBpbml0aWFsVmFsdWUoKSB7IHJldHVybiB7
IH07IH0KICAgICBzdGF0aWMgc3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4gZnJvbVN0cmluZyhjb25z
dCBTdHJpbmcmIHN0cmluZykKICAgICB7Ci0gICAgICAgIGZsb2F0IGZpcnN0TnVtYmVyID0gMCwg
c2Vjb25kTnVtYmVyID0gMDsKLSAgICAgICAgaWYgKCFwYXJzZU51bWJlck9wdGlvbmFsTnVtYmVy
KHN0cmluZywgZmlyc3ROdW1iZXIsIHNlY29uZE51bWJlcikpCi0gICAgICAgICAgICByZXR1cm4g
eyB9OwotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoZmlyc3ROdW1iZXIsIHNlY29uZE51
bWJlcik7CisgICAgICAgIHJldHVybiBwYXJzZU51bWJlck9wdGlvbmFsTnVtYmVyKHN0cmluZyku
dmFsdWVPcihzdGQ6OnBhaXI8ZmxvYXQsIGZsb2F0PiB7IH0pOwogICAgIH0KICAgICBzdGF0aWMg
T3B0aW9uYWw8c3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4+IHBhcnNlKGNvbnN0IFF1YWxpZmllZE5h
bWUmLCBjb25zdCBTdHJpbmcmKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gaW5pdGlh
bFZhbHVlKCk7IH0KICAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nKHN0ZDo6cGFpcjxmbG9hdCwg
ZmxvYXQ+KSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gZW1wdHlTdHJpbmcoKTsgfQpA
QCAtMTIzLDE3ICsxMTQsMTEgQEAgc3RydWN0IFNWR1Byb3BlcnR5VHJhaXRzPEZsb2F0UG9pbnQ+
IHsKICAgICBzdGF0aWMgRmxvYXRQb2ludCBpbml0aWFsVmFsdWUoKSB7IHJldHVybiBGbG9hdFBv
aW50KCk7IH0KICAgICBzdGF0aWMgRmxvYXRQb2ludCBmcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYg
c3RyaW5nKQogICAgIHsKLSAgICAgICAgRmxvYXRQb2ludCBwb2ludDsKLSAgICAgICAgaWYgKCFw
YXJzZVBvaW50KHN0cmluZywgcG9pbnQpKQotICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAg
ICAgcmV0dXJuIHBvaW50OworICAgICAgICByZXR1cm4gcGFyc2VQb2ludChzdHJpbmcpLnZhbHVl
T3IoRmxvYXRQb2ludCB7IH0pOwogICAgIH0KICAgICBzdGF0aWMgT3B0aW9uYWw8RmxvYXRQb2lu
dD4gcGFyc2UoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQogICAg
IHsKLSAgICAgICAgRmxvYXRQb2ludCBwb2ludDsKLSAgICAgICAgaWYgKCFwYXJzZVBvaW50KHN0
cmluZywgcG9pbnQpKQotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAg
cmV0dXJuIHBvaW50OworICAgICAgICByZXR1cm4gcGFyc2VQb2ludChzdHJpbmcpOwogICAgIH0K
ICAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nKGNvbnN0IEZsb2F0UG9pbnQmIHR5cGUpCiAgICAg
ewpAQCAtMTQ2LDE3ICsxMzEsMTEgQEAgc3RydWN0IFNWR1Byb3BlcnR5VHJhaXRzPEZsb2F0UmVj
dD4gewogICAgIHN0YXRpYyBGbG9hdFJlY3QgaW5pdGlhbFZhbHVlKCkgeyByZXR1cm4gRmxvYXRS
ZWN0KCk7IH0KICAgICBzdGF0aWMgRmxvYXRSZWN0IGZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBz
dHJpbmcpCiAgICAgewotICAgICAgICBGbG9hdFJlY3QgcmVjdDsKLSAgICAgICAgaWYgKCFwYXJz
ZVJlY3Qoc3RyaW5nLCByZWN0KSkKLSAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgIHJl
dHVybiByZWN0OworICAgICAgICByZXR1cm4gcGFyc2VSZWN0KHN0cmluZykudmFsdWVPcihGbG9h
dFJlY3QgeyB9KTsKICAgICB9CiAgICAgc3RhdGljIE9wdGlvbmFsPEZsb2F0UmVjdD4gcGFyc2Uo
Y29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQogICAgIHsKLSAgICAg
ICAgRmxvYXRSZWN0IHJlY3Q7Ci0gICAgICAgIGlmICghcGFyc2VSZWN0KHN0cmluZywgcmVjdCkp
Ci0gICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgICAgICByZXR1cm4gcmVjdDsK
KyAgICAgICAgcmV0dXJuIHBhcnNlUmVjdChzdHJpbmcpOwogICAgIH0KICAgICBzdGF0aWMgU3Ry
aW5nIHRvU3RyaW5nKGNvbnN0IEZsb2F0UmVjdCYgdHlwZSkKICAgICB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>402374</attachid>
            <date>2020-06-19 21:06:48 -0700</date>
            <delta_ts>2020-06-19 21:46:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213416-20200619210647.patch</filename>
            <type>text/plain</type>
            <size>144425</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MzI5NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3MSBAQAorMjAyMC0wNi0xOSAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQ29udmVydCBtdWNoIG9mIHRoZSBT
Vkcgc3RyaW5nIHBhcnNpbmcgY29kZSB0byB1c2UgT3B0aW9uYWwgYmFzZWQgcmV0dXJuIHZhbHVl
cyByYXRoZXIgdGhhbiBvdXQtcGFyYW1ldGVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEzNDE2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgV0lQCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogc3ZnL1NWR0FuZ2xlVmFsdWUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6cGFyc2VBbmdsZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5nbGVW
YWx1ZTo6c2V0VmFsdWVBc1N0cmluZyk6CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVNb3Rpb25F
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVNb3Rpb25FbGVtZW50Ojpj
YWxjdWxhdGVUb0F0RW5kT2ZEdXJhdGlvblZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0Fu
aW1hdGVNb3Rpb25FbGVtZW50OjpjYWxjdWxhdGVGcm9tQW5kVG9WYWx1ZXMpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OmNhbGN1bGF0ZUZyb21BbmRCeVZhbHVl
cyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6Y2FsY3VsYXRl
RGlzdGFuY2UpOgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OnBhcnNlS2V5U3BsaW5lcyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmlt
YXRpb25FbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisgICAgICAgICogc3ZnL1NWR0ZFQ29udm9s
dmVNYXRyaXhFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFQ29udm9sdmVNYXRy
aXhFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisgICAgICAgICogc3ZnL1NWR0ZFRGlmZnVzZUxp
Z2h0aW5nRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURpZmZ1c2VMaWdodGlu
Z0VsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKiBzdmcvU1ZHRkVEcm9wU2hhZG93
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURyb3BTaGFkb3dFbGVtZW50Ojpw
YXJzZUF0dHJpYnV0ZSk6CisgICAgICAgICogc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OnBhcnNlQXR0
cmlidXRlKToKKyAgICAgICAgKiBzdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRkVJbWFnZUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKiBz
dmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRU1v
cnBob2xvZ3lFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisgICAgICAgICogc3ZnL1NWR0ZFU3Bl
Y3VsYXJMaWdodGluZ0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVTcGVjdWxh
ckxpZ2h0aW5nRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAgICAgICAqIHN2Zy9TVkdGRVR1
cmJ1bGVuY2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFVHVyYnVsZW5jZUVs
ZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKiBzdmcvU1ZHRml0VG9WaWV3Qm94LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpdFRvVmlld0JveDo6cGFyc2VBdHRyaWJ1dGUpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRml0VG9WaWV3Qm94OjpwYXJzZVZpZXdCb3gpOgorICAgICAg
ICAqIHN2Zy9TVkdGaXRUb1ZpZXdCb3guaDoKKyAgICAgICAgKiBzdmcvU1ZHR2x5cGhSZWZFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlRmxvYXQpOgorICAgICAgICAqIHN2Zy9T
VkdIS2VybkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSEtlcm5FbGVtZW50Ojpi
dWlsZEhvcml6b250YWxLZXJuaW5nUGFpciBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0hLZXJu
RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdJbWFnZUVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHSW1hZ2VFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisgICAgICAgICogc3Zn
L1NWR0xlbmd0aFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0xlbmd0aFZhbHVlOjpz
ZXRWYWx1ZUFzU3RyaW5nKToKKyAgICAgICAgKiBzdmcvU1ZHTnVtYmVyTGlzdC5oOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHTnVtYmVyTGlzdDo6cGFyc2UpOgorICAgICAgICAqIHN2Zy9TVkdQYXJz
ZXJVdGlsaXRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2VuZXJpY1BhcnNlTnVtYmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OnBhcnNlTnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OmdlbmVy
aWNQYXJzZUFyY0ZsYWcpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VBcmNGbGFnKToKKyAgICAg
ICAgKFdlYkNvcmU6OnBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6cGFyc2VQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVJlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6cGFyc2VHbHlwaE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VVbmljb2Rl
UmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VLZXJuaW5nVW5pY29kZVN0cmluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpnZW5lcmljUGFyc2VGbG9hdFBvaW50KToKKyAgICAgICAgKFdlYkNv
cmU6OnBhcnNlRmxvYXRQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVNWR051bWJlcik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpwYXJzZU51bWJlckZyb21TdHJpbmcpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VEZWxpbWl0ZWRTdHJpbmcpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6cGFyc2VGbG9hdFBvaW50Mik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpwYXJzZUZsb2F0UG9pbnQzKTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHUGFy
c2VyVXRpbGl0aWVzLmg6CisgICAgICAgIChXZWJDb3JlOjppc1NWR1NwYWNlKToKKyAgICAgICAg
KFdlYkNvcmU6OnNraXBPcHRpb25hbFNWR1NwYWNlcyk6CisgICAgICAgIChXZWJDb3JlOjpza2lw
T3B0aW9uYWxTVkdTcGFjZXNPckRlbGltaXRlcik6CisgICAgICAgICogc3ZnL1NWR1BhdGhCbGVu
ZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnB1bGxGcm9tU291cmNlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdQYXRoQmxlbmRlcjo6YmxlbmRNb3ZlVG9TZWdtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1BhdGhCbGVuZGVyOjpibGVuZExpbmVUb1NlZ21lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHUGF0aEJsZW5kZXI6OmJsZW5kTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJsZW5kZXI6OmJsZW5kTGluZVRvVmVydGljYWxTZWdtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCbGVuZGVyOjpibGVuZEN1cnZlVG9DdWJpY1Nl
Z21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJsZW5kZXI6OmJsZW5kQ3VydmVUb0N1
YmljU21vb3RoU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQmxlbmRlcjo6Ymxl
bmRDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQmxl
bmRlcjo6YmxlbmRDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdQYXRoQmxlbmRlcjo6YmxlbmRBcmNUb1NlZ21lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHUGF0aEJsZW5kZXI6OmNhbkJsZW5kUGF0aHMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
UGF0aEJsZW5kZXI6OmJsZW5kQW5pbWF0ZWRQYXRoKToKKyAgICAgICAgKiBzdmcvU1ZHUGF0aEJ5
dGVTdHJlYW1Tb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW1T
b3VyY2U6Om5leHRDb21tYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFt
U291cmNlOjpwYXJzZVNWR1NlZ21lbnRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhC
eXRlU3RyZWFtU291cmNlOjpwYXJzZU1vdmVUb1NlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlTGluZVRvU2VnbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VMaW5lVG9Ib3Jpem9udGFsU2Vn
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VM
aW5lVG9WZXJ0aWNhbFNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJl
YW1Tb3VyY2U6OnBhcnNlQ3VydmVUb0N1YmljU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZUN1cnZlVG9R
dWFkcmF0aWNTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFtU291
cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZUFyY1RvU2VnbWVudCk6CisgICAgICAg
ICogc3ZnL1NWR1BhdGhCeXRlU3RyZWFtU291cmNlLmg6CisgICAgICAgICogc3ZnL1NWR1BhdGhQ
YXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFBhcnNlcjo6cGFyc2VNb3ZlVG9T
ZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhQYXJzZXI6OnBhcnNlTGluZVRvU2Vn
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoUGFyc2VyOjpwYXJzZUxpbmVUb0hvcml6
b250YWxTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhQYXJzZXI6OnBhcnNlTGlu
ZVRvVmVydGljYWxTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhQYXJzZXI6OnBh
cnNlQ3VydmVUb0N1YmljU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoUGFyc2Vy
OjpwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
UGF0aFBhcnNlcjo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdQYXRoUGFyc2VyOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhQYXJzZXI6OnBhcnNlQXJjVG9TZWdtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1BhdGhQYXJzZXI6OnBhcnNlUGF0aERhdGEpOgorICAgICAgICAq
IHN2Zy9TVkdQYXRoUGFyc2VyLmg6CisgICAgICAgICogc3ZnL1NWR1BhdGhTZWdMaXN0U291cmNl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdMaXN0U291cmNlOjpuZXh0Q29tbWFu
ZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VTVkdTZWdt
ZW50VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VN
b3ZlVG9TZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdMaXN0U291cmNlOjpw
YXJzZUxpbmVUb1NlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0xpc3RTb3Vy
Y2U6OnBhcnNlTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
UGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNlTGluZVRvVmVydGljYWxTZWdtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNlQ3VydmVUb0N1
YmljU21vb3RoU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnTGlzdFNvdXJj
ZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQ
YXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VBcmNUb1NlZ21lbnQp
OgorICAgICAgICAqIHN2Zy9TVkdQYXRoU2VnTGlzdFNvdXJjZS5oOgorICAgICAgICAqIHN2Zy9T
VkdQYXRoU291cmNlLmg6CisgICAgICAgICogc3ZnL1NWR1BhdGhTdHJpbmdTb3VyY2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6bmV4dENvbW1hbmRIZWxwZXIpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUGF0aFN0cmluZ1NvdXJjZTo6bmV4dENvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6cGFy
c2VTVkdTZWdtZW50VHlwZUhlbHBlcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU3RyaW5n
U291cmNlOjpwYXJzZVNWR1NlZ21lbnRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhT
dHJpbmdTb3VyY2U6OnBhcnNlTW92ZVRvU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQ
YXRoU3RyaW5nU291cmNlOjpwYXJzZUxpbmVUb1NlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUxpbmVUb1ZlcnRpY2FsU2Vn
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUN1cnZl
VG9DdWJpY1NlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZTo6
cGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Bh
dGhTdHJpbmdTb3VyY2U6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3Ro
U2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUFy
Y1RvU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUFyY1RvU2VnbWVudEhlbHBlcik6
IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR1BhdGhTdHJpbmdTb3VyY2UuaDoKKyAgICAgICAg
KiBzdmcvU1ZHUG9pbnRMaXN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdQb2ludExpc3Q6OnBh
cnNlKToKKyAgICAgICAgKiBzdmcvU1ZHVG9PVEZGb250Q29udmVyc2lvbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFkZEtlcm5pbmdQYWlyIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kS0VSTlN1YnRh
YmxlKToKKyAgICAgICAgKiBzdmcvU1ZHVHJhbnNmb3JtTGlzdC5oOgorICAgICAgICAqIHN2Zy9T
VkdUcmFuc2Zvcm1hYmxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlVHJhbnNmb3JtUGFy
YW1MaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNm
b3JtVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VBbmRT
a2lwVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZVRyYW5z
Zm9ybVR5cGUpOgorICAgICAgICAqIHN2Zy9TVkdUcmFuc2Zvcm1hYmxlLmg6CisgICAgICAgICog
c3ZnL1NWR1ZLZXJuRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdWS2VybkVsZW1l
bnQ6OmJ1aWxkVmVydGljYWxLZXJuaW5nUGFpciBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR1ZL
ZXJuRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdWaWV3U3BlYy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdWaWV3U3BlYzo6cGFyc2VWaWV3U3BlYyk6CisgICAgICAgICogc3ZnL3Byb3Bl
cnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oOgorICAgICAgICAq
IHN2Zy9wcm9wZXJ0aWVzL1NWR1Byb3BlcnR5VHJhaXRzLmg6CisgICAgICAgIChXZWJDb3JlOjpT
VkdQcm9wZXJ0eVRyYWl0czxmbG9hdD46OmZyb21TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUHJvcGVydHlUcmFpdHM8ZmxvYXQ+OjpwYXJzZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQ
cm9wZXJ0eVRyYWl0czxGbG9hdFBvaW50Pjo6ZnJvbVN0cmluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdQcm9wZXJ0eVRyYWl0czxGbG9hdFBvaW50Pjo6cGFyc2UpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHUHJvcGVydHlUcmFpdHM8RmxvYXRSZWN0Pjo6ZnJvbVN0cmluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxGbG9hdFJlY3Q+OjpwYXJzZSk6CisKIDIwMjAtMDYt
MTkgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBBdm9pZCBpbml0
aWFsaXppbmcgUmVuZGVyVGhlbWUgc2luZ2xldG9uIHVubmVjZXNzYXJpbHkgaW4gdGhlIFVJUHJv
Y2VzcwpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMDA4Myw2ICsxMDA4
Myw3IEBACiAJCTdDODNERTg1MUQwNENCRDQwMEZFQkNGMyAvKiBTcHJpbmdTb2x2ZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3ByaW5nU29sdmVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTdDODVCMjAxMjJGQjA0ODUwMDMwNjg0RiAvKiBXSExTTFVubmFt
ZWRUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMVW5uYW1lZFR5cGUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Qzg1QjIwNDIyRkIwNjMyMDAzMDY4NEYgLyogV0hM
U0xVbm5hbWVkVHlwZUhhc2guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xVbm5hbWVkVHlwZUhhc2gu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0M4ODI0QzQyNDlEN0IwNTAwRUQ4RkM0
IC8qIFNWR1BhdGhTZWdWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
VkdQYXRoU2VnVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0M4RTM0OTIx
RTRBMzM4RTAwNTRDRTIzIC8qIEpTRE9NQ29udmVydEFueS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU0RPTUNvbnZlcnRBbnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJN0M4RTM0OTMxRTRBMzM4RTAwNTRDRTIzIC8qIEpTRE9NQ29udmVydEJhc2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNET01Db252ZXJ0QmFzZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3QzhFMzQ5NDFFNEEzMzhFMDA1NENFMjMgLyogSlNET01D
b252ZXJ0Qm9vbGVhbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0RPTUNv
bnZlcnRCb29sZWFuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNTE4Niw2ICsy
NTE4Nyw3IEBACiAJCQkJODRCNkI5NzYxMjBGMTNFNTAwQjhFRkFGIC8qIFNWR1BhdGhTZWdMaXN0
U291cmNlLmggKi8sCiAJCQkJQjIyMjc4RUYwRDAwQkYyMTAwNzFCNzgyIC8qIFNWR1BhdGhTZWdN
b3ZldG9BYnMuaWRsICovLAogCQkJCUIyMjI3OEYwMEQwMEJGMjEwMDcxQjc4MiAvKiBTVkdQYXRo
U2VnTW92ZXRvUmVsLmlkbCAqLywKKwkJCQk3Qzg4MjRDNDI0OUQ3QjA1MDBFRDhGQzQgLyogU1ZH
UGF0aFNlZ1ZhbHVlLmggKi8sCiAJCQkJODQzMDBCRDcxMjBDOUFENDAwMjE5NTRBIC8qIFNWR1Bh
dGhTb3VyY2UuaCAqLywKIAkJCQk4NDE5RDJCNzEyMEUwQzc2MDAxNDFGOEYgLyogU1ZHUGF0aFN0
cmluZ0J1aWxkZXIuY3BwICovLAogCQkJCTg0MTlEMkI4MTIwRTBDNzYwMDE0MUY4RiAvKiBTVkdQ
YXRoU3RyaW5nQnVpbGRlci5oICovLApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuZ2xl
VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmdsZVZhbHVl
LmNwcAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuZ2xlVmFs
dWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3IEBAIFN0cmluZyBTVkdBbmdsZVZh
bHVlOjp2YWx1ZUFzU3RyaW5nKCkgY28KICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgU1ZHQW5nbGVWYWx1ZTo6VHlwZSBwYXJzZUFuZ2xlVHlwZShjb25zdCBVQ2hhciog
cHRyLCBjb25zdCBVQ2hhciogZW5kKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4g
c3RhdGljIGlubGluZSBTVkdBbmdsZVZhbHVlOjpUeXBlIHBhcnNlQW5nbGVUeXBlKGNvbnN0IENo
YXJhY3RlclR5cGUqIHB0ciwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kKQogewogICAgIHN3aXRj
aCAoZW5kIC0gcHRyKSB7CiAgICAgY2FzZSAwOgpAQCAtMTA2LDIxICsxMDYsMjkgQEAgRXhjZXB0
aW9uT3I8dm9pZD4gU1ZHQW5nbGVWYWx1ZTo6c2V0VmFsdQogICAgICAgICByZXR1cm4geyB9Owog
ICAgIH0KIAotICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyh2YWx1
ZSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIqIHB0ciA9IHVwY29u
dmVydGVkQ2hhcmFjdGVyczsKLSAgICBjb25zdCBVQ2hhciogZW5kID0gcHRyICsgdmFsdWUubGVu
Z3RoKCk7Ci0KLSAgICBmbG9hdCB2YWx1ZUluU3BlY2lmaWVkVW5pdHMgPSAwOwotICAgIGlmICgh
cGFyc2VOdW1iZXIocHRyLCBlbmQsIHZhbHVlSW5TcGVjaWZpZWRVbml0cywgZmFsc2UpKQotICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKLQotICAgIGF1dG8gdW5pdFR5
cGUgPSBwYXJzZUFuZ2xlVHlwZShwdHIsIGVuZCk7Ci0gICAgaWYgKHVuaXRUeXBlID09IFNWR19B
TkdMRVRZUEVfVU5LTk9XTikKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9y
IH07CisgICAgYXV0byBoZWxwZXIgPSBbJl0oY29uc3QgYXV0byogcHRyLCBjb25zdCBhdXRvKiBl
bmQpIC0+IEV4Y2VwdGlvbk9yPHZvaWQ+IHsKKyAgICAgICAgYXV0byB2YWx1ZUluU3BlY2lmaWVk
VW5pdHMgPSBwYXJzZU51bWJlcihwdHIsIGVuZCwgU3VmZml4U2tpcHBpbmdQb2xpY3k6OkRvbnRT
a2lwKTsKKyAgICAgICAgaWYgKCF2YWx1ZUluU3BlY2lmaWVkVW5pdHMpCisgICAgICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKKworICAgICAgICBhdXRvIHVuaXRUeXBl
ID0gcGFyc2VBbmdsZVR5cGUocHRyLCBlbmQpOworICAgICAgICBpZiAodW5pdFR5cGUgPT0gU1ZH
QW5nbGVWYWx1ZTo6U1ZHX0FOR0xFVFlQRV9VTktOT1dOKQorICAgICAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiAKLSAgICBtX3VuaXRUeXBlID0gdW5pdFR5cGU7Ci0g
ICAgbV92YWx1ZUluU3BlY2lmaWVkVW5pdHMgPSB2YWx1ZUluU3BlY2lmaWVkVW5pdHM7Ci0gICAg
cmV0dXJuIHsgfTsKKyAgICAgICAgbV91bml0VHlwZSA9IHVuaXRUeXBlOworICAgICAgICBtX3Zh
bHVlSW5TcGVjaWZpZWRVbml0cyA9ICp2YWx1ZUluU3BlY2lmaWVkVW5pdHM7CisgICAgICAgIHJl
dHVybiB7IH07CisgICAgfTsKKworICAgIGlmICh2YWx1ZS5pczhCaXQoKSkgeworICAgICAgICBj
b25zdCBhdXRvKiBwdHIgPSB2YWx1ZS5jaGFyYWN0ZXJzOCgpOworICAgICAgICBjb25zdCBhdXRv
KiBlbmQgPSBwdHIgKyB2YWx1ZS5sZW5ndGgoKTsKKyAgICAgICAgcmV0dXJuIGhlbHBlcihwdHIs
IGVuZCk7CisgICAgfQorCisgICAgY29uc3QgYXV0byogcHRyID0gdmFsdWUuY2hhcmFjdGVyczE2
KCk7CisgICAgY29uc3QgYXV0byogZW5kID0gcHRyICsgdmFsdWUubGVuZ3RoKCk7CisgICAgcmV0
dXJuIGhlbHBlcihwdHIsIGVuZCk7CiB9CiAKIEV4Y2VwdGlvbk9yPHZvaWQ+IFNWR0FuZ2xlVmFs
dWU6Om5ld1ZhbHVlU3BlY2lmaWVkVW5pdHModW5zaWduZWQgc2hvcnQgdW5pdFR5cGUsIGZsb2F0
IHZhbHVlSW5TcGVjaWZpZWRVbml0cykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmlt
YXRlTW90aW9uRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTYxLDcgKzE2MSw3IEBAIHZvaWQgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OnN0b3BBbmltYXQK
IAogYm9vbCBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6Y2FsY3VsYXRlVG9BdEVuZE9mRHVyYXRp
b25WYWx1ZShjb25zdCBTdHJpbmcmIHRvQXRFbmRPZkR1cmF0aW9uU3RyaW5nKQogewotICAgIHBh
cnNlUG9pbnQodG9BdEVuZE9mRHVyYXRpb25TdHJpbmcsIG1fdG9Qb2ludEF0RW5kT2ZEdXJhdGlv
bik7CisgICAgbV90b1BvaW50QXRFbmRPZkR1cmF0aW9uID0gcGFyc2VQb2ludCh0b0F0RW5kT2ZE
dXJhdGlvblN0cmluZykudmFsdWVPcihGbG9hdFBvaW50IHsgfSk7CiAgICAgbV9oYXNUb1BvaW50
QXRFbmRPZkR1cmF0aW9uID0gdHJ1ZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTE2OSw4ICsx
NjksOCBAQCBib29sIFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OjpjYWxjdWxhdGVUCiBib29sIFNW
R0FuaW1hdGVNb3Rpb25FbGVtZW50OjpjYWxjdWxhdGVGcm9tQW5kVG9WYWx1ZXMoY29uc3QgU3Ry
aW5nJiBmcm9tU3RyaW5nLCBjb25zdCBTdHJpbmcmIHRvU3RyaW5nKQogewogICAgIG1faGFzVG9Q
b2ludEF0RW5kT2ZEdXJhdGlvbiA9IGZhbHNlOwotICAgIHBhcnNlUG9pbnQoZnJvbVN0cmluZywg
bV9mcm9tUG9pbnQpOwotICAgIHBhcnNlUG9pbnQodG9TdHJpbmcsIG1fdG9Qb2ludCk7CisgICAg
bV9mcm9tUG9pbnQgPSBwYXJzZVBvaW50KGZyb21TdHJpbmcpLnZhbHVlT3IoRmxvYXRQb2ludCB7
IH0pOworICAgIG1fdG9Qb2ludCA9IHBhcnNlUG9pbnQodG9TdHJpbmcpLnZhbHVlT3IoRmxvYXRQ
b2ludCB7IH0pOwogICAgIHJldHVybiB0cnVlOwogfQogICAgIApAQCAtMTc5LDkgKzE3OSw4IEBA
IGJvb2wgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OmNhbGN1bGF0ZUYKICAgICBtX2hhc1RvUG9p
bnRBdEVuZE9mRHVyYXRpb24gPSBmYWxzZTsKICAgICBpZiAoYW5pbWF0aW9uTW9kZSgpID09IEFu
aW1hdGlvbk1vZGU6OkJ5ICYmICFpc0FkZGl0aXZlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBwYXJzZVBvaW50KGZyb21TdHJpbmcsIG1fZnJvbVBvaW50KTsKLSAgICBGbG9hdFBvaW50
IGJ5UG9pbnQ7Ci0gICAgcGFyc2VQb2ludChieVN0cmluZywgYnlQb2ludCk7CisgICAgbV9mcm9t
UG9pbnQgPSBwYXJzZVBvaW50KGZyb21TdHJpbmcpLnZhbHVlT3IoRmxvYXRQb2ludCB7IH0pOwor
ICAgIGF1dG8gYnlQb2ludCA9IHBhcnNlUG9pbnQoYnlTdHJpbmcpLnZhbHVlT3IoRmxvYXRQb2lu
dCB7IH0pOwogICAgIG1fdG9Qb2ludCA9IEZsb2F0UG9pbnQobV9mcm9tUG9pbnQueCgpICsgYnlQ
b2ludC54KCksIG1fZnJvbVBvaW50LnkoKSArIGJ5UG9pbnQueSgpKTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KQEAgLTI3NSwxMyArMjc0LDEzIEBAIHZvaWQgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6
OmFwcGx5UmVzdWwKIAogT3B0aW9uYWw8ZmxvYXQ+IFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50Ojpj
YWxjdWxhdGVEaXN0YW5jZShjb25zdCBTdHJpbmcmIGZyb21TdHJpbmcsIGNvbnN0IFN0cmluZyYg
dG9TdHJpbmcpCiB7Ci0gICAgRmxvYXRQb2ludCBmcm9tOwotICAgIEZsb2F0UG9pbnQgdG87Ci0g
ICAgaWYgKCFwYXJzZVBvaW50KGZyb21TdHJpbmcsIGZyb20pKQorICAgIGF1dG8gZnJvbSA9IHBh
cnNlUG9pbnQoZnJvbVN0cmluZyk7CisgICAgaWYgKCFmcm9tKQogICAgICAgICByZXR1cm4geyB9
OwotICAgIGlmICghcGFyc2VQb2ludCh0b1N0cmluZywgdG8pKQorICAgIGF1dG8gdG8gPSBwYXJz
ZVBvaW50KHRvU3RyaW5nKTsKKyAgICBpZiAoIXRvKQogICAgICAgICByZXR1cm4geyB9OwotICAg
IEZsb2F0U2l6ZSBkaWZmID0gdG8gLSBmcm9tOworICAgIGF1dG8gZGlmZiA9ICp0byAtICpmcm9t
OwogICAgIHJldHVybiBzdGQ6Omh5cG90KGRpZmYud2lkdGgoKSwgZGlmZi5oZWlnaHQoKSk7CiB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDI2MzE3NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsMTEgKzc3LDEwIEBAIGZhaWw6CiAgICAgcmVzdWx0
LmNsZWFyKCk7CiB9CiAKLXN0YXRpYyB2b2lkIHBhcnNlS2V5U3BsaW5lcyhjb25zdCBTdHJpbmcm
IHBhcnNlLCBWZWN0b3I8VW5pdEJlemllcj4mIHJlc3VsdCkKK3N0YXRpYyBPcHRpb25hbDxWZWN0
b3I8VW5pdEJlemllcj4+IHBhcnNlS2V5U3BsaW5lcyhjb25zdCBTdHJpbmcmIHBhcnNlKQogewot
ICAgIHJlc3VsdC5jbGVhcigpOwogICAgIGlmIChwYXJzZS5pc0VtcHR5KCkpCi0gICAgICAgIHJl
dHVybjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIGF1dG8gdXBjb252ZXJ0
ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyhwYXJzZSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7
CiAgICAgY29uc3QgVUNoYXIqIGN1ciA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKQEAgLTg5LDMy
ICs4OCwyNiBAQCBzdGF0aWMgdm9pZCBwYXJzZUtleVNwbGluZXMoY29uc3QgU3RyaW5nCiAKICAg
ICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoY3VyLCBlbmQpOwogCisgICAgVmVjdG9yPFVuaXRCZXpp
ZXI+IHJlc3VsdDsKKwogICAgIGJvb2wgZGVsaW1QYXJzZWQgPSBmYWxzZTsKICAgICB3aGlsZSAo
Y3VyIDwgZW5kKSB7CiAgICAgICAgIGRlbGltUGFyc2VkID0gZmFsc2U7Ci0gICAgICAgIGZsb2F0
IHBvc0EgPSAwOwotICAgICAgICBpZiAoIXBhcnNlTnVtYmVyKGN1ciwgZW5kLCBwb3NBKSkgewot
ICAgICAgICAgICAgcmVzdWx0LmNsZWFyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLQotICAgICAgICBmbG9hdCBwb3NCID0gMDsKLSAgICAgICAgaWYgKCFwYXJzZU51bWJlcihj
dXIsIGVuZCwgcG9zQikpIHsKLSAgICAgICAgICAgIHJlc3VsdC5jbGVhcigpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZmxvYXQgcG9zQyA9IDA7Ci0gICAgICAg
IGlmICghcGFyc2VOdW1iZXIoY3VyLCBlbmQsIHBvc0MpKSB7Ci0gICAgICAgICAgICByZXN1bHQu
Y2xlYXIoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGZsb2F0
IHBvc0QgPSAwOwotICAgICAgICBpZiAoIXBhcnNlTnVtYmVyKGN1ciwgZW5kLCBwb3NELCBmYWxz
ZSkpIHsKLSAgICAgICAgICAgIHJlc3VsdC5jbGVhcigpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9CisgICAgICAgIGF1dG8gcG9zQSA9IHBhcnNlTnVtYmVyKGN1ciwgZW5kKTsKKyAg
ICAgICAgaWYgKCFwb3NBKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAg
ICAgICBhdXRvIHBvc0IgPSBwYXJzZU51bWJlcihjdXIsIGVuZCk7CisgICAgICAgIGlmICghcG9z
QikKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICAgICAgYXV0byBwb3ND
ID0gcGFyc2VOdW1iZXIoY3VyLCBlbmQpOworICAgICAgICBpZiAoIXBvc0MpCisgICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgICAgIGF1dG8gcG9zRCA9IHBhcnNlTnVtYmVy
KGN1ciwgZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNraXApOworICAgICAgICBpZiAo
IXBvc0QpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgICAgIHNraXBP
cHRpb25hbFNWR1NwYWNlcyhjdXIsIGVuZCk7CiAKQEAgLTEyMiwxMiArMTE1LDE2IEBAIHN0YXRp
YyB2b2lkIHBhcnNlS2V5U3BsaW5lcyhjb25zdCBTdHJpbmcKICAgICAgICAgICAgIGRlbGltUGFy
c2VkID0gdHJ1ZTsKICAgICAgICAgICAgIGN1cisrOwogICAgICAgICB9CisKICAgICAgICAgc2tp
cE9wdGlvbmFsU1ZHU3BhY2VzKGN1ciwgZW5kKTsKIAotICAgICAgICByZXN1bHQuYXBwZW5kKFVu
aXRCZXppZXIocG9zQSwgcG9zQiwgcG9zQywgcG9zRCkpOworICAgICAgICByZXN1bHQuYXBwZW5k
KFVuaXRCZXppZXIgeyAqcG9zQSwgKnBvc0IsICpwb3NDLCAqcG9zRCB9KTsKICAgICB9CisKICAg
ICBpZiAoIShjdXIgPT0gZW5kICYmICFkZWxpbVBhcnNlZCkpCi0gICAgICAgIHJlc3VsdC5jbGVh
cigpOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAogYm9vbCBTVkdBbmltYXRpb25FbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25z
dCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKQEAgLTE4MCw3ICsxNzcsOCBAQCB2b2lkIFNWR0Fu
aW1hdGlvbkVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlCiAgICAgfQogCiAgICAgaWYgKG5hbWUgPT0g
U1ZHTmFtZXM6OmtleVNwbGluZXNBdHRyKSB7Ci0gICAgICAgIHBhcnNlS2V5U3BsaW5lcyh2YWx1
ZSwgbV9rZXlTcGxpbmVzKTsKKyAgICAgICAgaWYgKGF1dG8ga2V5U3BsaW5lcyA9IHBhcnNlS2V5
U3BsaW5lcyh2YWx1ZSkpCisgICAgICAgICAgICBtX2tleVNwbGluZXMgPSBXVEZNb3ZlKCprZXlT
cGxpbmVzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuY3BwCShyZXZpc2lvbiAyNjMx
NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02NywxMCArNjcsMTAgQEAgdm9pZCBTVkdGRUNvbnZvbHZlTWF0
cml4RWxlbWVudDo6cGFyc2VBdAogICAgIH0KIAogICAgIGlmIChuYW1lID09IFNWR05hbWVzOjpv
cmRlckF0dHIpIHsKLSAgICAgICAgZmxvYXQgeCwgeTsKLSAgICAgICAgaWYgKHBhcnNlTnVtYmVy
T3B0aW9uYWxOdW1iZXIodmFsdWUsIHgsIHkpICYmIHggPj0gMSAmJiB5ID49IDEpIHsKLSAgICAg
ICAgICAgIG1fb3JkZXJYLT5zZXRCYXNlVmFsSW50ZXJuYWwoeCk7Ci0gICAgICAgICAgICBtX29y
ZGVyWS0+c2V0QmFzZVZhbEludGVybmFsKHkpOworICAgICAgICBhdXRvIHJlc3VsdCA9IHBhcnNl
TnVtYmVyT3B0aW9uYWxOdW1iZXIodmFsdWUpOworICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3Vs
dC0+Zmlyc3QgPj0gMSAmJiByZXN1bHQtPnNlY29uZCA+PSAxKSB7CisgICAgICAgICAgICBtX29y
ZGVyWC0+c2V0QmFzZVZhbEludGVybmFsKHJlc3VsdC0+Zmlyc3QpOworICAgICAgICAgICAgbV9v
cmRlclktPnNldEJhc2VWYWxJbnRlcm5hbChyZXN1bHQtPnNlY29uZCk7CiAgICAgICAgIH0gZWxz
ZQogICAgICAgICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVwb3J0V2Fy
bmluZygiZmVDb252b2x2ZU1hdHJpeDogcHJvYmxlbSBwYXJzaW5nIG9yZGVyPVwiIiArIHZhbHVl
ICsgIlwiLiBGaWx0ZXJlZCBlbGVtZW50IHdpbGwgbm90IGJlIGRpc3BsYXllZC4iKTsKICAgICAg
ICAgcmV0dXJuOwpAQCAtMTE1LDEwICsxMTUsMTAgQEAgdm9pZCBTVkdGRUNvbnZvbHZlTWF0cml4
RWxlbWVudDo6cGFyc2VBdAogICAgIH0KIAogICAgIGlmIChuYW1lID09IFNWR05hbWVzOjprZXJu
ZWxVbml0TGVuZ3RoQXR0cikgewotICAgICAgICBmbG9hdCB4LCB5OwotICAgICAgICBpZiAocGFy
c2VOdW1iZXJPcHRpb25hbE51bWJlcih2YWx1ZSwgeCwgeSkgJiYgeCA+IDAgJiYgeSA+IDApIHsK
LSAgICAgICAgICAgIG1fa2VybmVsVW5pdExlbmd0aFgtPnNldEJhc2VWYWxJbnRlcm5hbCh4KTsK
LSAgICAgICAgICAgIG1fa2VybmVsVW5pdExlbmd0aFktPnNldEJhc2VWYWxJbnRlcm5hbCh5KTsK
KyAgICAgICAgYXV0byByZXN1bHQgPSBwYXJzZU51bWJlck9wdGlvbmFsTnVtYmVyKHZhbHVlKTsK
KyAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQtPmZpcnN0ID4gMCAmJiByZXN1bHQtPnNlY29u
ZCA+IDApIHsKKyAgICAgICAgICAgIG1fa2VybmVsVW5pdExlbmd0aFgtPnNldEJhc2VWYWxJbnRl
cm5hbChyZXN1bHQtPmZpcnN0KTsKKyAgICAgICAgICAgIG1fa2VybmVsVW5pdExlbmd0aFktPnNl
dEJhc2VWYWxJbnRlcm5hbChyZXN1bHQtPnNlY29uZCk7CiAgICAgICAgIH0gZWxzZQogICAgICAg
ICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVwb3J0V2FybmluZygiZmVD
b252b2x2ZU1hdHJpeDogcHJvYmxlbSBwYXJzaW5nIGtlcm5lbFVuaXRMZW5ndGg9XCIiICsgdmFs
dWUgKyAiXCIuIEZpbHRlcmVkIGVsZW1lbnQgd2lsbCBub3QgYmUgZGlzcGxheWVkLiIpOwogICAg
ICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRp
bmdFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZm
dXNlTGlnaHRpbmdFbGVtZW50LmNwcAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTcxLDEwICs3MSw5IEBAIHZvaWQgU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjpwYXJzZUEK
ICAgICB9CiAKICAgICBpZiAobmFtZSA9PSBTVkdOYW1lczo6a2VybmVsVW5pdExlbmd0aEF0dHIp
IHsKLSAgICAgICAgZmxvYXQgeCwgeTsKLSAgICAgICAgaWYgKHBhcnNlTnVtYmVyT3B0aW9uYWxO
dW1iZXIodmFsdWUsIHgsIHkpKSB7Ci0gICAgICAgICAgICBtX2tlcm5lbFVuaXRMZW5ndGhYLT5z
ZXRCYXNlVmFsSW50ZXJuYWwoeCk7Ci0gICAgICAgICAgICBtX2tlcm5lbFVuaXRMZW5ndGhZLT5z
ZXRCYXNlVmFsSW50ZXJuYWwoeSk7CisgICAgICAgIGlmIChhdXRvIHJlc3VsdCA9IHBhcnNlTnVt
YmVyT3B0aW9uYWxOdW1iZXIodmFsdWUpKSB7CisgICAgICAgICAgICBtX2tlcm5lbFVuaXRMZW5n
dGhYLT5zZXRCYXNlVmFsSW50ZXJuYWwocmVzdWx0LT5maXJzdCk7CisgICAgICAgICAgICBtX2tl
cm5lbFVuaXRMZW5ndGhZLT5zZXRCYXNlVmFsSW50ZXJuYWwocmVzdWx0LT5zZWNvbmQpOwogICAg
ICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVEcm9wU2hhZG93RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuY3BwCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTYxLDEwICs2MSw5IEBAIHZvaWQgU1ZHRkVEcm9wU2hhZG93RWxlbWVudDo6c2V0U3RkRGV2
aWEKIHZvaWQgU1ZHRkVEcm9wU2hhZG93RWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVh
bGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbVN0cmluZyYgdmFsdWUpCiB7CiAgICAgaWYgKG5h
bWUgPT0gU1ZHTmFtZXM6OnN0ZERldmlhdGlvbkF0dHIpIHsKLSAgICAgICAgZmxvYXQgeCwgeTsK
LSAgICAgICAgaWYgKHBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIodmFsdWUsIHgsIHkpKSB7Ci0g
ICAgICAgICAgICBtX3N0ZERldmlhdGlvblgtPnNldEJhc2VWYWxJbnRlcm5hbCh4KTsKLSAgICAg
ICAgICAgIG1fc3RkRGV2aWF0aW9uWS0+c2V0QmFzZVZhbEludGVybmFsKHkpOworICAgICAgICBp
ZiAoYXV0byByZXN1bHQgPSBwYXJzZU51bWJlck9wdGlvbmFsTnVtYmVyKHZhbHVlKSkgeworICAg
ICAgICAgICAgbV9zdGREZXZpYXRpb25YLT5zZXRCYXNlVmFsSW50ZXJuYWwocmVzdWx0LT5maXJz
dCk7CisgICAgICAgICAgICBtX3N0ZERldmlhdGlvblktPnNldEJhc2VWYWxJbnRlcm5hbChyZXN1
bHQtPnNlY29uZCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwCShyZXZp
c2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsMTAgKzYwLDkgQEAgdm9pZCBTVkdGRUdhdXNz
aWFuQmx1ckVsZW1lbnQ6OnNldFN0ZERldgogdm9pZCBTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6
OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21TdHJp
bmcmIHZhbHVlKQogewogICAgIGlmIChuYW1lID09IFNWR05hbWVzOjpzdGREZXZpYXRpb25BdHRy
KSB7Ci0gICAgICAgIGZsb2F0IHgsIHk7Ci0gICAgICAgIGlmIChwYXJzZU51bWJlck9wdGlvbmFs
TnVtYmVyKHZhbHVlLCB4LCB5KSkgewotICAgICAgICAgICAgbV9zdGREZXZpYXRpb25YLT5zZXRC
YXNlVmFsSW50ZXJuYWwoeCk7Ci0gICAgICAgICAgICBtX3N0ZERldmlhdGlvblktPnNldEJhc2VW
YWxJbnRlcm5hbCh5KTsKKyAgICAgICAgaWYgKGF1dG8gcmVzdWx0ID0gcGFyc2VOdW1iZXJPcHRp
b25hbE51bWJlcih2YWx1ZSkpIHsKKyAgICAgICAgICAgIG1fc3RkRGV2aWF0aW9uWC0+c2V0QmFz
ZVZhbEludGVybmFsKHJlc3VsdC0+Zmlyc3QpOworICAgICAgICAgICAgbV9zdGREZXZpYXRpb25Z
LT5zZXRCYXNlVmFsSW50ZXJuYWwocmVzdWx0LT5zZWNvbmQpOwogICAgICAgICB9CiAgICAgICAg
IHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDI2MzE3NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdl
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNyw5ICsxMTcsNyBAQCB2b2lkIFNWR0ZF
SW1hZ2VFbGVtZW50OjpidWlsZFBlbmRpbmdSZXNvCiB2b2lkIFNWR0ZFSW1hZ2VFbGVtZW50Ojpw
YXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9tU3RyaW5n
JiB2YWx1ZSkKIHsKICAgICBpZiAobmFtZSA9PSBTVkdOYW1lczo6cHJlc2VydmVBc3BlY3RSYXRp
b0F0dHIpIHsKLSAgICAgICAgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlIHByZXNlcnZlQXNw
ZWN0UmF0aW87Ci0gICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW8ucGFyc2UodmFsdWUpOwotICAg
ICAgICBtX3ByZXNlcnZlQXNwZWN0UmF0aW8tPnNldEJhc2VWYWxJbnRlcm5hbChwcmVzZXJ2ZUFz
cGVjdFJhdGlvKTsKKyAgICAgICAgbV9wcmVzZXJ2ZUFzcGVjdFJhdGlvLT5zZXRCYXNlVmFsSW50
ZXJuYWwoU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlIHsgdmFsdWUgfSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9s
b2d5RWxlbWVudC5jcHAJKHJldmlzaW9uIDI2MzE3NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRU1vcnBob2xvZ3lFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsMTAgKzcxLDkg
QEAgdm9pZCBTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpwYXJzZUF0dHJpYgogICAgIH0KIAogICAg
IGlmIChuYW1lID09IFNWR05hbWVzOjpyYWRpdXNBdHRyKSB7Ci0gICAgICAgIGZsb2F0IHgsIHk7
Ci0gICAgICAgIGlmIChwYXJzZU51bWJlck9wdGlvbmFsTnVtYmVyKHZhbHVlLCB4LCB5KSkgewot
ICAgICAgICAgICAgbV9yYWRpdXNYLT5zZXRCYXNlVmFsSW50ZXJuYWwoeCk7Ci0gICAgICAgICAg
ICBtX3JhZGl1c1ktPnNldEJhc2VWYWxJbnRlcm5hbCh5KTsKKyAgICAgICAgaWYgKGF1dG8gcmVz
dWx0ID0gcGFyc2VOdW1iZXJPcHRpb25hbE51bWJlcih2YWx1ZSkpIHsKKyAgICAgICAgICAgIG1f
cmFkaXVzWC0+c2V0QmFzZVZhbEludGVybmFsKHJlc3VsdC0+Zmlyc3QpOworICAgICAgICAgICAg
bV9yYWRpdXNZLT5zZXRCYXNlVmFsSW50ZXJuYWwocmVzdWx0LT5zZWNvbmQpOwogICAgICAgICB9
CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVT
cGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuY3BwCShyZXZpc2lvbiAyNjMxNzYpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTc4LDEwICs3OCw5IEBAIHZvaWQgU1ZHRkVTcGVjdWxhckxpZ2h0aW5n
RWxlbWVudDo6cGFyc2UKICAgICB9CiAKICAgICBpZiAobmFtZSA9PSBTVkdOYW1lczo6a2VybmVs
VW5pdExlbmd0aEF0dHIpIHsKLSAgICAgICAgZmxvYXQgeCwgeTsKLSAgICAgICAgaWYgKHBhcnNl
TnVtYmVyT3B0aW9uYWxOdW1iZXIodmFsdWUsIHgsIHkpKSB7Ci0gICAgICAgICAgICBtX2tlcm5l
bFVuaXRMZW5ndGhYLT5zZXRCYXNlVmFsSW50ZXJuYWwoeCk7Ci0gICAgICAgICAgICBtX2tlcm5l
bFVuaXRMZW5ndGhZLT5zZXRCYXNlVmFsSW50ZXJuYWwoeSk7CisgICAgICAgIGlmIChhdXRvIHJl
c3VsdCA9IHBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIodmFsdWUpKSB7CisgICAgICAgICAgICBt
X2tlcm5lbFVuaXRMZW5ndGhYLT5zZXRCYXNlVmFsSW50ZXJuYWwocmVzdWx0LT5maXJzdCk7Cisg
ICAgICAgICAgICBtX2tlcm5lbFVuaXRMZW5ndGhZLT5zZXRCYXNlVmFsSW50ZXJuYWwocmVzdWx0
LT5zZWNvbmQpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAy
NjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY3LDEwICs2Nyw5IEBAIHZvaWQgU1ZHRkVUdXJidWxlbmNlRWxl
bWVudDo6cGFyc2VBdHRyaWIKICAgICB9CiAKICAgICBpZiAobmFtZSA9PSBTVkdOYW1lczo6YmFz
ZUZyZXF1ZW5jeUF0dHIpIHsKLSAgICAgICAgZmxvYXQgeCwgeTsKLSAgICAgICAgaWYgKHBhcnNl
TnVtYmVyT3B0aW9uYWxOdW1iZXIodmFsdWUsIHgsIHkpKSB7Ci0gICAgICAgICAgICBtX2Jhc2VG
cmVxdWVuY3lYLT5zZXRCYXNlVmFsSW50ZXJuYWwoeCk7Ci0gICAgICAgICAgICBtX2Jhc2VGcmVx
dWVuY3lZLT5zZXRCYXNlVmFsSW50ZXJuYWwoeSk7CisgICAgICAgIGlmIChhdXRvIHJlc3VsdCA9
IHBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIodmFsdWUpKSB7CisgICAgICAgICAgICBtX2Jhc2VG
cmVxdWVuY3lYLT5zZXRCYXNlVmFsSW50ZXJuYWwocmVzdWx0LT5maXJzdCk7CisgICAgICAgICAg
ICBtX2Jhc2VGcmVxdWVuY3lZLT5zZXRCYXNlVmFsSW50ZXJuYWwocmVzdWx0LT5zZWNvbmQpOwog
ICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRml0VG9WaWV3Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRml0VG9WaWV3Qm94LmNwcAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZpdFRvVmlld0JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDczICs2Niw3MSBA
QCB2b2lkIFNWR0ZpdFRvVmlld0JveDo6cmVzZXQoKQogYm9vbCBTVkdGaXRUb1ZpZXdCb3g6OnBh
cnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21TdHJpbmcm
IHZhbHVlKQogewogICAgIGlmIChuYW1lID09IFNWR05hbWVzOjp2aWV3Qm94QXR0cikgewotICAg
ICAgICBGbG9hdFJlY3Qgdmlld0JveDsKLSAgICAgICAgaWYgKCF2YWx1ZS5pc051bGwoKSAmJiBw
YXJzZVZpZXdCb3godmFsdWUsIHZpZXdCb3gpKQotICAgICAgICAgICAgc2V0Vmlld0JveCh2aWV3
Qm94KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVzZXRWaWV3Qm94KCk7CisgICAgICAg
IGlmICghdmFsdWUuaXNOdWxsKCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIHJlc3VsdCA9IHBh
cnNlVmlld0JveCh2YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICBzZXRWaWV3Qm94KFdURk1vdmUo
KnJlc3VsdCkpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIHJlc2V0Vmlld0JveCgpOwogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CiAKICAgICBpZiAobmFtZSA9PSBTVkdOYW1lczo6cHJlc2VydmVBc3BlY3RSYXRpb0F0
dHIpIHsKLSAgICAgICAgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlIHByZXNlcnZlQXNwZWN0
UmF0aW87Ci0gICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW8ucGFyc2UodmFsdWUpOwotICAgICAg
ICBzZXRQcmVzZXJ2ZUFzcGVjdFJhdGlvKHByZXNlcnZlQXNwZWN0UmF0aW8pOworICAgICAgICBz
ZXRQcmVzZXJ2ZUFzcGVjdFJhdGlvKFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSB7IHZhbHVl
IH0pOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLWJvb2wgU1ZHRml0VG9WaWV3Qm94OjpwYXJzZVZpZXdCb3goY29uc3QgQXRvbVN0cmluZyYg
dmFsdWUsIEZsb2F0UmVjdCYgdmlld0JveCkKK09wdGlvbmFsPEZsb2F0UmVjdD4gU1ZHRml0VG9W
aWV3Qm94OjpwYXJzZVZpZXdCb3goY29uc3QgQXRvbVN0cmluZyYgdmFsdWUpCiB7CiAgICAgYXV0
byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KHZhbHVlKS51cGNvbnZlcnRlZENo
YXJhY3RlcnMoKTsKICAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycyA9IHVwY29udmVydGVkQ2hh
cmFjdGVyczsKLSAgICByZXR1cm4gcGFyc2VWaWV3Qm94KGNoYXJhY3RlcnMsIGNoYXJhY3RlcnMg
KyB2YWx1ZS5sZW5ndGgoKSwgdmlld0JveCk7CisgICAgcmV0dXJuIHBhcnNlVmlld0JveChjaGFy
YWN0ZXJzLCBjaGFyYWN0ZXJzICsgdmFsdWUubGVuZ3RoKCkpOwogfQogCi1ib29sIFNWR0ZpdFRv
Vmlld0JveDo6cGFyc2VWaWV3Qm94KGNvbnN0IFVDaGFyKiYgYywgY29uc3QgVUNoYXIqIGVuZCwg
RmxvYXRSZWN0JiB2aWV3Qm94LCBib29sIHZhbGlkYXRlKQorT3B0aW9uYWw8RmxvYXRSZWN0PiBT
VkdGaXRUb1ZpZXdCb3g6OnBhcnNlVmlld0JveChjb25zdCBVQ2hhciomIGMsIGNvbnN0IFVDaGFy
KiBlbmQsIGJvb2wgdmFsaWRhdGUpCiB7Ci0gICAgU3RyaW5nIHN0cihjLCBlbmQgLSBjKTsKKyAg
ICBTdHJpbmdWaWV3IHN0cihjLCBlbmQgLSBjKTsKIAogICAgIHNraXBPcHRpb25hbFNWR1NwYWNl
cyhjLCBlbmQpOwogCi0gICAgZmxvYXQgeCA9IDAuMGY7Ci0gICAgZmxvYXQgeSA9IDAuMGY7Ci0g
ICAgZmxvYXQgd2lkdGggPSAwLjBmOwotICAgIGZsb2F0IGhlaWdodCA9IDAuMGY7Ci0gICAgYm9v
bCB2YWxpZCA9IHBhcnNlTnVtYmVyKGMsIGVuZCwgeCkgJiYgcGFyc2VOdW1iZXIoYywgZW5kLCB5
KSAmJiBwYXJzZU51bWJlcihjLCBlbmQsIHdpZHRoKSAmJiBwYXJzZU51bWJlcihjLCBlbmQsIGhl
aWdodCwgZmFsc2UpOworICAgIGF1dG8geCA9IHBhcnNlTnVtYmVyKGMsIGVuZCk7CisgICAgYXV0
byB5ID0gcGFyc2VOdW1iZXIoYywgZW5kKTsKKyAgICBhdXRvIHdpZHRoID0gcGFyc2VOdW1iZXIo
YywgZW5kKTsKKyAgICBhdXRvIGhlaWdodCA9IHBhcnNlTnVtYmVyKGMsIGVuZCwgU3VmZml4U2tp
cHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsKIAogICAgIGlmICh2YWxpZGF0ZSkgewogICAgICAgICBE
b2N1bWVudCYgZG9jdW1lbnQgPSBtX3ZpZXdCb3gtPmNvbnRleHRFbGVtZW50KCktPmRvY3VtZW50
KCk7CiAKLSAgICAgICAgaWYgKCF2YWxpZCkgewotICAgICAgICAgICAgZG9jdW1lbnQuYWNjZXNz
U1ZHRXh0ZW5zaW9ucygpLnJlcG9ydFdhcm5pbmcoIlByb2JsZW0gcGFyc2luZyB2aWV3Qm94PVwi
IiArIHN0ciArICJcIiIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAo
IXggfHwgIXkgfHwgIXdpZHRoIHx8ICFoZWlnaHQpIHsKKyAgICAgICAgICAgIGRvY3VtZW50LmFj
Y2Vzc1NWR0V4dGVuc2lvbnMoKS5yZXBvcnRXYXJuaW5nKG1ha2VTdHJpbmcoIlByb2JsZW0gcGFy
c2luZyB2aWV3Qm94PVwiIiwgc3RyLCAiXCIiKSk7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogICAgICAgICB9CiAKICAgICAgICAgLy8gQ2hlY2sgdGhhdCB3aWR0aCBpcyBwb3Np
dGl2ZS4KLSAgICAgICAgaWYgKHdpZHRoIDwgMC4wKSB7CisgICAgICAgIGlmICgqd2lkdGggPCAw
LjApIHsKICAgICAgICAgICAgIGRvY3VtZW50LmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5yZXBvcnRF
cnJvcigiQSBuZWdhdGl2ZSB2YWx1ZSBmb3IgVmlld0JveCB3aWR0aCBpcyBub3QgYWxsb3dlZCIp
OwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKICAgICAgICAgfQogCiAgICAgICAgIC8vIENoZWNrIHRoYXQgaGVpZ2h0IGlzIHBvc2l0
aXZlLgotICAgICAgICBpZiAoaGVpZ2h0IDwgMC4wKSB7CisgICAgICAgIGlmICgqaGVpZ2h0IDwg
MC4wKSB7CiAgICAgICAgICAgICBkb2N1bWVudC5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVwb3J0
RXJyb3IoIkEgbmVnYXRpdmUgdmFsdWUgZm9yIFZpZXdCb3ggaGVpZ2h0IGlzIG5vdCBhbGxvd2Vk
Iik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogICAgICAgICB9CiAKICAgICAgICAgLy8gTm90aGluZyBzaG91bGQgY29tZSBhZnRl
ciB0aGUgbGFzdCwgZm91cnRoIG51bWJlci4KICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2Vz
KGMsIGVuZCk7CiAgICAgICAgIGlmIChjIDwgZW5kKSB7Ci0gICAgICAgICAgICBkb2N1bWVudC5h
Y2Nlc3NTVkdFeHRlbnNpb25zKCkucmVwb3J0V2FybmluZygiUHJvYmxlbSBwYXJzaW5nIHZpZXdC
b3g9XCIiICsgc3RyICsgIlwiIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICBkb2N1bWVudC5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVwb3J0V2FybmluZyhtYWtlU3Ry
aW5nKCJQcm9ibGVtIHBhcnNpbmcgdmlld0JveD1cIiIsIHN0ciwgIlwiIikpOworICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgfQogICAgIH0KIAotICAgIHZpZXdCb3gg
PSB7IHgsIHksIHdpZHRoLCBoZWlnaHQgfTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4g
RmxvYXRSZWN0IHsgeC52YWx1ZU9yKDApLCB5LnZhbHVlT3IoMCksIHdpZHRoLnZhbHVlT3IoMCks
IGhlaWdodC52YWx1ZU9yKDApIH07CiB9CiAKIEFmZmluZVRyYW5zZm9ybSBTVkdGaXRUb1ZpZXdC
b3g6OnZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0oY29uc3QgRmxvYXRSZWN0JiB2aWV3Qm94UmVjdCwg
Y29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJiBwcmVzZXJ2ZUFzcGVjdFJhdGlvLCBm
bG9hdCB2aWV3V2lkdGgsIGZsb2F0IHZpZXdIZWlnaHQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRml0VG9WaWV3Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZpdFRvVmlld0JveC5oCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRml0VG9WaWV3Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDggKzY1LDggQEAgcHJvdGVj
dGVkOgogCiAgICAgdm9pZCByZXNldCgpOwogICAgIGJvb2wgcGFyc2VBdHRyaWJ1dGUoY29uc3Qg
UXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21TdHJpbmcmKTsKLSAgICBib29sIHBhcnNlVmlld0Jv
eChjb25zdCBBdG9tU3RyaW5nJiB2YWx1ZSwgRmxvYXRSZWN0JiB2aWV3Qm94KTsKLSAgICBib29s
IHBhcnNlVmlld0JveChjb25zdCBVQ2hhciomIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kLCBGbG9h
dFJlY3QmIHZpZXdCb3gsIGJvb2wgdmFsaWRhdGUgPSB0cnVlKTsKKyAgICBPcHRpb25hbDxGbG9h
dFJlY3Q+IHBhcnNlVmlld0JveChjb25zdCBBdG9tU3RyaW5nJiB2YWx1ZSk7CisgICAgT3B0aW9u
YWw8RmxvYXRSZWN0PiBwYXJzZVZpZXdCb3goY29uc3QgVUNoYXIqJiBzdGFydCwgY29uc3QgVUNo
YXIqIGVuZCwgYm9vbCB2YWxpZGF0ZSA9IHRydWUpOwogCiBwcml2YXRlOgogICAgIFJlZjxTVkdB
bmltYXRlZFJlY3Q+IG1fdmlld0JveDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHbHlw
aFJlZkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHbHlw
aFJlZkVsZW1lbnQuY3BwCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHR2x5cGhSZWZFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsMTAgKzU4LDcgQEAg
Ym9vbCBTVkdHbHlwaFJlZkVsZW1lbnQ6Omhhc1ZhbGlkR2x5cGhFbAogCiBzdGF0aWMgZmxvYXQg
cGFyc2VGbG9hdChjb25zdCBBdG9tU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBmbG9hdCByZXN1bHQ7
Ci0gICAgaWYgKCFwYXJzZU51bWJlckZyb21TdHJpbmcodmFsdWUsIHJlc3VsdCkpCi0gICAgICAg
IHJldHVybiAwOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIHBhcnNlTnVtYmVyKHZh
bHVlKS52YWx1ZU9yKDApOwogfQogCiB2b2lkIFNWR0dseXBoUmVmRWxlbWVudDo6cGFyc2VBdHRy
aWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbVN0cmluZyYgdmFsdWUp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHSEtlcm5FbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHSEtlcm5FbGVtZW50LmNwcAkocmV2aXNpb24gMjYz
MTc2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0hLZXJuRWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ0LDI0ICs0NCw0NCBAQCBSZWY8U1ZHSEtlcm5FbGVtZW50PiBTVkdIS2VybkVs
ZW1lbnQ6OmNyCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZHSEtlcm5FbGVtZW50KHRhZ05h
bWUsIGRvY3VtZW50KSk7CiB9CiAKLWJvb2wgU1ZHSEtlcm5FbGVtZW50OjpidWlsZEhvcml6b250
YWxLZXJuaW5nUGFpcihTVkdLZXJuaW5nUGFpciYga2VybmluZ1BhaXIpIGNvbnN0CitPcHRpb25h
bDxTVkdLZXJuaW5nUGFpcj4gU1ZHSEtlcm5FbGVtZW50OjpidWlsZEhvcml6b250YWxLZXJuaW5n
UGFpcigpIGNvbnN0CiB7CisgICAgLy8gRklYTUU6IENhbiB0aGlzIGJlIHNoYXJlZCB3aXRoIFNW
R1ZLZXJuRWxlbWVudDo6YnVpbGRWZXJ0aWNhbEtlcm5pbmdQYWlyCisKICAgICBhdXRvJiB1MSA9
IGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oU1ZHTmFtZXM6OnUxQXR0cik7CiAgICAg
YXV0byYgZzEgPSBhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFNWR05hbWVzOjpnMUF0
dHIpOwogICAgIGF1dG8mIHUyID0gYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihTVkdO
YW1lczo6dTJBdHRyKTsKICAgICBhdXRvJiBnMiA9IGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6
YXRpb24oU1ZHTmFtZXM6OmcyQXR0cik7CiAgICAgaWYgKCh1MS5pc0VtcHR5KCkgJiYgZzEuaXNF
bXB0eSgpKSB8fCAodTIuaXNFbXB0eSgpICYmIGcyLmlzRW1wdHkoKSkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIGF1dG8gZ2x5cGhO
YW1lMSA9IHBhcnNlR2x5cGhOYW1lKGcxKTsKKyAgICBpZiAoIWdseXBoTmFtZTEpCisgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgYXV0byBnbHlwaE5hbWUyID0gcGFyc2VHbHlwaE5h
bWUoZzIpOworICAgIGlmICghZ2x5cGhOYW1lMikKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKyAgICBhdXRvIHVuaWNvZGVTdHJpbmcxID0gcGFyc2VLZXJuaW5nVW5pY29kZVN0cmluZyh1
MSk7CisgICAgaWYgKCF1bmljb2RlU3RyaW5nMSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKyAgICBhdXRvIHVuaWNvZGVTdHJpbmcyID0gcGFyc2VLZXJuaW5nVW5pY29kZVN0cmluZyh1
Mik7CisgICAgaWYgKCF1bmljb2RlU3RyaW5nMikKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKworICAgIGJvb2wgb2sgPSBmYWxzZTsKKyAgICBhdXRvIGtlcm5pbmcgPSBhdHRyaWJ1dGVX
aXRob3V0U3luY2hyb25pemF0aW9uKFNWR05hbWVzOjprQXR0cikuc3RyaW5nKCkudG9GbG9hdCgm
b2spOworICAgIGlmICghb2spCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBp
ZiAocGFyc2VHbHlwaE5hbWUoZzEsIGtlcm5pbmdQYWlyLmdseXBoTmFtZTEpCi0gICAgICAgICYm
IHBhcnNlR2x5cGhOYW1lKGcyLCBrZXJuaW5nUGFpci5nbHlwaE5hbWUyKQotICAgICAgICAmJiBw
YXJzZUtlcm5pbmdVbmljb2RlU3RyaW5nKHUxLCBrZXJuaW5nUGFpci51bmljb2RlUmFuZ2UxLCBr
ZXJuaW5nUGFpci51bmljb2RlTmFtZTEpCi0gICAgICAgICYmIHBhcnNlS2VybmluZ1VuaWNvZGVT
dHJpbmcodTIsIGtlcm5pbmdQYWlyLnVuaWNvZGVSYW5nZTIsIGtlcm5pbmdQYWlyLnVuaWNvZGVO
YW1lMikpIHsKLSAgICAgICAgYm9vbCBvayA9IGZhbHNlOwotICAgICAgICBrZXJuaW5nUGFpci5r
ZXJuaW5nID0gYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihTVkdOYW1lczo6a0F0dHIp
LnN0cmluZygpLnRvRmxvYXQoJm9rKTsKLSAgICAgICAgcmV0dXJuIG9rOwotICAgIH0KLSAgICBy
ZXR1cm4gZmFsc2U7CisgICAgU1ZHS2VybmluZ1BhaXIga2VybmluZ1BhaXI7CisgICAga2Vybmlu
Z1BhaXIuZ2x5cGhOYW1lMSA9IFdURk1vdmUoKmdseXBoTmFtZTEpOworICAgIGtlcm5pbmdQYWly
LmdseXBoTmFtZTIgPSBXVEZNb3ZlKCpnbHlwaE5hbWUyKTsKKyAgICBrZXJuaW5nUGFpci51bmlj
b2RlUmFuZ2UxID0gV1RGTW92ZSh1bmljb2RlU3RyaW5nMS0+Zmlyc3QpOworICAgIGtlcm5pbmdQ
YWlyLnVuaWNvZGVOYW1lMSA9IFdURk1vdmUodW5pY29kZVN0cmluZzEtPnNlY29uZCk7CisgICAg
a2VybmluZ1BhaXIudW5pY29kZVJhbmdlMiA9IFdURk1vdmUodW5pY29kZVN0cmluZzItPmZpcnN0
KTsKKyAgICBrZXJuaW5nUGFpci51bmljb2RlTmFtZTIgPSBXVEZNb3ZlKHVuaWNvZGVTdHJpbmcy
LT5zZWNvbmQpOworICAgIGtlcm5pbmdQYWlyLmtlcm5pbmcgPSBrZXJuaW5nOworICAgIHJldHVy
biBrZXJuaW5nUGFpcjsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0hLZXJu
RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdIS2VybkVsZW1l
bnQuaAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0hLZXJuRWxl
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBAIGNsYXNzIFNWR0hLZXJuRWxl
bWVudCBmaW5hbCA6IHB1YmxpYyBTVkcKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPFNWR0hLZXJu
RWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCYpOwogCi0gICAg
Ym9vbCBidWlsZEhvcml6b250YWxLZXJuaW5nUGFpcihTVkdLZXJuaW5nUGFpciYga2VybmluZ1Bh
aXIpIGNvbnN0OworICAgIE9wdGlvbmFsPFNWR0tlcm5pbmdQYWlyPiBidWlsZEhvcml6b250YWxL
ZXJuaW5nUGFpcigpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIFNWR0hLZXJuRWxlbWVudChjb25z
dCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdJbWFnZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdJ
bWFnZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHSW1hZ2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksOSArNjksNyBAQCBib29s
IFNWR0ltYWdlRWxlbWVudDo6aGFzU2luZ2xlU2VjdXJpdHlPCiB2b2lkIFNWR0ltYWdlRWxlbWVu
dDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbVN0
cmluZyYgdmFsdWUpCiB7CiAgICAgaWYgKG5hbWUgPT0gU1ZHTmFtZXM6OnByZXNlcnZlQXNwZWN0
UmF0aW9BdHRyKSB7Ci0gICAgICAgIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSBwcmVzZXJ2
ZUFzcGVjdFJhdGlvOwotICAgICAgICBwcmVzZXJ2ZUFzcGVjdFJhdGlvLnBhcnNlKHZhbHVlKTsK
LSAgICAgICAgbV9wcmVzZXJ2ZUFzcGVjdFJhdGlvLT5zZXRCYXNlVmFsSW50ZXJuYWwocHJlc2Vy
dmVBc3BlY3RSYXRpbyk7CisgICAgICAgIG1fcHJlc2VydmVBc3BlY3RSYXRpby0+c2V0QmFzZVZh
bEludGVybmFsKFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSB7IHZhbHVlIH0pOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoVmFs
dWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMZW5ndGhWYWx1ZS5j
cHAJKHJldmlzaW9uIDI2MzE3NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMZW5ndGhWYWx1
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5MSwxMiArMjkxLDEyIEBAIEV4Y2VwdGlvbk9yPHZv
aWQ+IFNWR0xlbmd0aFZhbHVlOjpzZXRWYWwKICAgICBpZiAoc3RyaW5nLmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGZsb2F0IGNvbnZlcnRlZE51bWJlciA9IDA7CiAgICAg
YXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KHN0cmluZykudXBjb252ZXJ0
ZWRDaGFyYWN0ZXJzKCk7CiAgICAgY29uc3QgVUNoYXIqIHB0ciA9IHVwY29udmVydGVkQ2hhcmFj
dGVyczsKICAgICBjb25zdCBVQ2hhciogZW5kID0gcHRyICsgc3RyaW5nLmxlbmd0aCgpOwogCi0g
ICAgaWYgKCFwYXJzZU51bWJlcihwdHIsIGVuZCwgY29udmVydGVkTnVtYmVyLCBmYWxzZSkpCisg
ICAgYXV0byBjb252ZXJ0ZWROdW1iZXIgPSBwYXJzZU51bWJlcihwdHIsIGVuZCwgU3VmZml4U2tp
cHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsKKyAgICBpZiAoIWNvbnZlcnRlZE51bWJlcikKICAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiAKICAgICBhdXRvIGxlbmd0aFR5
cGUgPSBwYXJzZUxlbmd0aFR5cGUocHRyLCBlbmQpOwpAQCAtMzA0LDcgKzMwNCw3IEBAIEV4Y2Vw
dGlvbk9yPHZvaWQ+IFNWR0xlbmd0aFZhbHVlOjpzZXRWYWwKICAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IFN5bnRheEVycm9yIH07CiAKICAgICBtX2xlbmd0aFR5cGUgPSBsZW5ndGhUeXBlOwot
ICAgIG1fdmFsdWVJblNwZWNpZmllZFVuaXRzID0gY29udmVydGVkTnVtYmVyOworICAgIG1fdmFs
dWVJblNwZWNpZmllZFVuaXRzID0gKmNvbnZlcnRlZE51bWJlcjsKICAgICByZXR1cm4geyB9Owog
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTnVtYmVyTGlzdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdOdW1iZXJMaXN0LmgJKHJldmlzaW9uIDI2MzE3NikK
KysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdOdW1iZXJMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTU0LDcgKzU0LDYgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgY2xlYXJJdGVtcygpOwogCi0g
ICAgICAgIGZsb2F0IG51bWJlciA9IDA7CiAgICAgICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0
ZXJzID0gU3RyaW5nVmlldyh2YWx1ZSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7CiAgICAgICAg
IGNvbnN0IFVDaGFyKiBwdHIgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7CiAgICAgICAgIGNvbnN0
IFVDaGFyKiBlbmQgPSBwdHIgKyB2YWx1ZS5sZW5ndGgoKTsKQEAgLTYyLDkgKzYxLDEwIEBAIHB1
YmxpYzoKICAgICAgICAgLy8gVGhlIHNwZWMgKHNlY3Rpb24gNC4xKSBzdHJhbmdlbHkgZG9lc24n
dCBhbGxvdyBsZWFkaW5nIHdoaXRlc3BhY2UuCiAgICAgICAgIC8vIFdlIG1pZ2h0IGNob29zZSB0
byB2aW9sYXRlIHRoYXQgaW50ZW50aW9uYWxseS4KICAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCkg
ewotICAgICAgICAgICAgaWYgKCFwYXJzZU51bWJlcihwdHIsIGVuZCwgbnVtYmVyKSkKKyAgICAg
ICAgICAgIGF1dG8gbnVtYmVyID0gcGFyc2VOdW1iZXIocHRyLCBlbmQpOworICAgICAgICAgICAg
aWYgKCFudW1iZXIpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBhcHBlbmQo
U1ZHTnVtYmVyOjpjcmVhdGUobnVtYmVyKSk7CisgICAgICAgICAgICBhcHBlbmQoU1ZHTnVtYmVy
OjpjcmVhdGUoKm51bWJlcikpOwogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIHB0ciA9PSBl
bmQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmNwcAkocmV2
aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDE5ICs0MCwxOCBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUg
RmxvYXRUeXBlPiBzdGF0aWMgaW5sCiAvLyBXZSB1c2UgdGhpcyBnZW5lcmljIHBhcnNlTnVtYmVy
IGZ1bmN0aW9uIHRvIGFsbG93IHRoZSBQYXRoIHBhcnNpbmcgY29kZSB0byB3b3JrIAogLy8gYXQg
YSBoaWdoZXIgcHJlY2lzaW9uIGludGVybmFsbHksIHdpdGhvdXQgYW55IHVubmVjZXNzYXJ5IHJ1
bnRpbWUgY29zdCBvciBjb2RlCiAvLyBjb21wbGV4aXR5LgotdGVtcGxhdGUgPHR5cGVuYW1lIENo
YXJhY3RlclR5cGUsIHR5cGVuYW1lIEZsb2F0VHlwZT4gc3RhdGljIGJvb2wgZ2VuZXJpY1BhcnNl
TnVtYmVyKGNvbnN0IENoYXJhY3RlclR5cGUqJiBwdHIsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVu
ZCwgRmxvYXRUeXBlJiBudW1iZXIsIGJvb2wgc2tpcCkKKy8vIEZJWE1FOiBDYW4gdGhpcyBiZSBz
aGFyZWQvcmVwbGFjZWQgd2l0aCBudW1iZXIgcGFyc2luZyBpbiBXVEY/Cit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5hbWUgRmxvYXRUeXBlID0gZmxvYXQ+IHN0YXRpYyBP
cHRpb25hbDxGbG9hdFR5cGU+IGdlbmVyaWNQYXJzZU51bWJlcihjb25zdCBDaGFyYWN0ZXJUeXBl
KiYgcHRyLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQsIFN1ZmZpeFNraXBwaW5nUG9saWN5IHNr
aXAgPSBTdWZmaXhTa2lwcGluZ1BvbGljeTo6U2tpcCkKIHsKLSAgICBGbG9hdFR5cGUgaW50ZWdl
ciwgZGVjaW1hbCwgZnJhYywgZXhwb25lbnQ7Ci0gICAgaW50IHNpZ24sIGV4cHNpZ247CisgICAg
RmxvYXRUeXBlIG51bWJlciA9IDA7CisgICAgRmxvYXRUeXBlIGludGVnZXIgPSAwOworICAgIEZs
b2F0VHlwZSBkZWNpbWFsID0gMDsKKyAgICBGbG9hdFR5cGUgZnJhYyA9IDE7CisgICAgRmxvYXRU
eXBlIGV4cG9uZW50ID0gMDsKKyAgICBpbnQgc2lnbiA9IDE7CisgICAgaW50IGV4cHNpZ24gPSAx
OwogICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIHN0YXJ0ID0gcHRyOwogCi0gICAgZXhwb25lbnQg
PSAwOwotICAgIGludGVnZXIgPSAwOwotICAgIGZyYWMgPSAxOwotICAgIGRlY2ltYWwgPSAwOwot
ICAgIHNpZ24gPSAxOwotICAgIGV4cHNpZ24gPSAxOwotCiAgICAgLy8gcmVhZCB0aGUgc2lnbgog
ICAgIGlmIChwdHIgPCBlbmQgJiYgKnB0ciA9PSAnKycpCiAgICAgICAgIHB0cisrOwpAQCAtNjIs
NyArNjEsNyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5hCiAgICAg
fSAKICAgICAKICAgICBpZiAocHRyID09IGVuZCB8fCAoIWlzQVNDSUlEaWdpdCgqcHRyKSAmJiAq
cHRyICE9ICcuJykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKIAogICAgIC8vIHJlYWQgdGhlIGludGVnZXIgcGFydCwgYnVpbGQgcmlnaHQtdG8t
bGVmdAogICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIHB0clN0YXJ0SW50UGFydCA9IHB0cjsKQEAg
LTc4LDcgKzc3LDcgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHR5cGVuYQog
ICAgICAgICB9CiAgICAgICAgIC8vIEJhaWwgb3V0IGVhcmx5IGlmIHRoaXMgb3ZlcmZsb3dzLgog
ICAgICAgICBpZiAoIWlzVmFsaWRSYW5nZShpbnRlZ2VyKSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQogCiAgICAgaWYg
KHB0ciA8IGVuZCAmJiAqcHRyID09ICcuJykgeyAvLyByZWFkIHRoZSBkZWNpbWFscwpAQCAtODYs
NyArODUsNyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5hCiAgICAg
ICAgIAogICAgICAgICAvLyBUaGVyZSBtdXN0IGJlIGEgbGVhc3Qgb25lIGRpZ2l0IGZvbGxvd2lu
ZyB0aGUgLgogICAgICAgICBpZiAocHRyID49IGVuZCB8fCAhaXNBU0NJSURpZ2l0KCpwdHIpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKICAgICAgICAgCiAgICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgaXNBU0NJSURpZ2l0KCpw
dHIpKQogICAgICAgICAgICAgZGVjaW1hbCArPSAoKihwdHIrKykgLSAnMCcpICogKGZyYWMgKj0g
c3RhdGljX2Nhc3Q8RmxvYXRUeXBlPigwLjEpKTsKQEAgLTEwNyw3ICsxMDYsNyBAQCB0ZW1wbGF0
ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5hCiAgICAgICAgIAogICAgICAgICAvLyBU
aGVyZSBtdXN0IGJlIGFuIGV4cG9uZW50CiAgICAgICAgIGlmIChwdHIgPj0gZW5kIHx8ICFpc0FT
Q0lJRGlnaXQoKnB0cikpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgaXNBU0NJ
SURpZ2l0KCpwdHIpKSB7CiAgICAgICAgICAgICBleHBvbmVudCAqPSBzdGF0aWNfY2FzdDxGbG9h
dFR5cGU+KDEwKTsKQEAgLTExNiw3ICsxMTUsNyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZSwgdHlwZW5hCiAgICAgICAgIH0KICAgICAgICAgLy8gTWFrZSBzdXJlIGV4cG9uZW50
IGlzIHZhbGlkLgogICAgICAgICBpZiAoIWlzVmFsaWRSYW5nZShleHBvbmVudCkgfHwgZXhwb25l
bnQgPiBzdGQ6Om51bWVyaWNfbGltaXRzPEZsb2F0VHlwZT46Om1heF9leHBvbmVudCkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAg
ICAgfQogCiAgICAgbnVtYmVyID0gaW50ZWdlciArIGRlY2ltYWw7CkBAIC0xMjcsMTQyICsxMjYs
MTQ3IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCB0eXBlbmEKIAogICAgIC8v
IERvbid0IHJldHVybiBJbmZpbml0eSgpIG9yIE5hTigpLgogICAgIGlmICghaXNWYWxpZFJhbmdl
KG51bWJlcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIAogICAgIGlmIChzdGFydCA9PSBwdHIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGlmIChza2lwKQorICAgIGlmIChza2lw
ID09IFN1ZmZpeFNraXBwaW5nUG9saWN5OjpTa2lwKQogICAgICAgICBza2lwT3B0aW9uYWxTVkdT
cGFjZXNPckRlbGltaXRlcihwdHIsIGVuZCk7CiAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdGVt
cGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1ib29sIHBhcnNlU1ZHTnVtYmVyKENoYXJh
Y3RlclR5cGUqIGJlZ2luLCBzaXplX3QgbGVuZ3RoLCBkb3VibGUmIG51bWJlcikKLXsKLSAgICBj
b25zdCBDaGFyYWN0ZXJUeXBlKiBwdHIgPSBiZWdpbjsKLSAgICBjb25zdCBDaGFyYWN0ZXJUeXBl
KiBlbmQgPSBwdHIgKyBsZW5ndGg7Ci0gICAgcmV0dXJuIGdlbmVyaWNQYXJzZU51bWJlcihwdHIs
IGVuZCwgbnVtYmVyLCBmYWxzZSk7CisgICAgcmV0dXJuIG51bWJlcjsKIH0KIAotLy8gRXhwbGlj
aXRseSBpbnN0YW50aWF0ZSB0aGUgdHdvIGZsYXZvcnMgb2YgcGFyc2VTVkdOdW1iZXIoKSB0byBz
YXRpc2Z5IGV4dGVybmFsIGNhbGxlcnMKLXRlbXBsYXRlIGJvb2wgcGFyc2VTVkdOdW1iZXIoTENo
YXIqIGJlZ2luLCBzaXplX3QgbGVuZ3RoLCBkb3VibGUmKTsKLXRlbXBsYXRlIGJvb2wgcGFyc2VT
VkdOdW1iZXIoVUNoYXIqIGJlZ2luLCBzaXplX3QgbGVuZ3RoLCBkb3VibGUmKTsKLQotYm9vbCBw
YXJzZU51bWJlcihjb25zdCBMQ2hhciomIHB0ciwgY29uc3QgTENoYXIqIGVuZCwgZmxvYXQmIG51
bWJlciwgYm9vbCBza2lwKQorT3B0aW9uYWw8ZmxvYXQ+IHBhcnNlTnVtYmVyKGNvbnN0IExDaGFy
KiYgcHRyLCBjb25zdCBMQ2hhciogZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeSBza2lwKQogewot
ICAgIHJldHVybiBnZW5lcmljUGFyc2VOdW1iZXIocHRyLCBlbmQsIG51bWJlciwgc2tpcCk7Cisg
ICAgcmV0dXJuIGdlbmVyaWNQYXJzZU51bWJlcihwdHIsIGVuZCwgc2tpcCk7CiB9CiAKLWJvb2wg
cGFyc2VOdW1iZXIoY29uc3QgVUNoYXIqJiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQsIGZsb2F0JiBu
dW1iZXIsIGJvb2wgc2tpcCkgCitPcHRpb25hbDxmbG9hdD4gcGFyc2VOdW1iZXIoY29uc3QgVUNo
YXIqJiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQsIFN1ZmZpeFNraXBwaW5nUG9saWN5IHNraXApCiB7
Ci0gICAgcmV0dXJuIGdlbmVyaWNQYXJzZU51bWJlcihwdHIsIGVuZCwgbnVtYmVyLCBza2lwKTsK
KyAgICByZXR1cm4gZ2VuZXJpY1BhcnNlTnVtYmVyKHB0ciwgZW5kLCBza2lwKTsKIH0KIAotYm9v
bCBwYXJzZU51bWJlckZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0JiBudW1i
ZXIsIGJvb2wgc2tpcCkKK09wdGlvbmFsPGZsb2F0PiBwYXJzZU51bWJlcihjb25zdCBTdHJpbmcm
IHN0cmluZywgU3VmZml4U2tpcHBpbmdQb2xpY3kgc2tpcCkKIHsKICAgICBhdXRvIHVwY29udmVy
dGVkQ2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcoc3RyaW5nKS51cGNvbnZlcnRlZENoYXJhY3RlcnMo
KTsKICAgICBjb25zdCBVQ2hhciogcHRyID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOwogICAgIGNv
bnN0IFVDaGFyKiBlbmQgPSBwdHIgKyBzdHJpbmcubGVuZ3RoKCk7Ci0gICAgcmV0dXJuIGdlbmVy
aWNQYXJzZU51bWJlcihwdHIsIGVuZCwgbnVtYmVyLCBza2lwKSAmJiBwdHIgPT0gZW5kOworICAg
IGF1dG8gcmVzdWx0ID0gZ2VuZXJpY1BhcnNlTnVtYmVyKHB0ciwgZW5kLCBza2lwKTsKKyAgICBp
ZiAocHRyICE9IGVuZCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4g
cmVzdWx0OwogfQogCiAvLyBvbmx5IHVzZWQgdG8gcGFyc2UgbGFyZ2VBcmNGbGFnIGFuZCBzd2Vl
cEZsYWcgd2hpY2ggbXVzdCBiZSBhICIwIiBvciAiMSIKIC8vIGFuZCBtaWdodCBub3QgaGF2ZSBh
bnkgd2hpdGVzcGFjZS9jb21tYSBhZnRlciBpdAotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+Ci1ib29sIGdlbmVyaWNQYXJzZUFyY0ZsYWcoY29uc3QgQ2hhcmFjdGVyVHlwZSomIHB0
ciwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kLCBib29sJiBmbGFnKQordGVtcGxhdGUgPHR5cGVu
YW1lIENoYXJhY3RlclR5cGU+IE9wdGlvbmFsPGJvb2w+IGdlbmVyaWNQYXJzZUFyY0ZsYWcoY29u
c3QgQ2hhcmFjdGVyVHlwZSomIHB0ciwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kKQogewogICAg
IGlmIChwdHIgPj0gZW5kKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CisKICAgICBjb25zdCBDaGFyYWN0ZXJUeXBlIGZsYWdDaGFyID0gKnB0cisr
OworCisgICAgYm9vbCBmbGFnOwogICAgIGlmIChmbGFnQ2hhciA9PSAnMCcpCiAgICAgICAgIGZs
YWcgPSBmYWxzZTsKICAgICBlbHNlIGlmIChmbGFnQ2hhciA9PSAnMScpCiAgICAgICAgIGZsYWcg
PSB0cnVlOwogICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAorICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworCiAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxpbWl0
ZXIocHRyLCBlbmQpOwogICAgIAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmbGFnOwog
fQogCi1ib29sIHBhcnNlQXJjRmxhZyhjb25zdCBMQ2hhciomIHB0ciwgY29uc3QgTENoYXIqIGVu
ZCwgYm9vbCYgZmxhZykKK09wdGlvbmFsPGJvb2w+IHBhcnNlQXJjRmxhZyhjb25zdCBMQ2hhciom
IHB0ciwgY29uc3QgTENoYXIqIGVuZCkKIHsKLSAgICByZXR1cm4gZ2VuZXJpY1BhcnNlQXJjRmxh
ZyhwdHIsIGVuZCwgZmxhZyk7CisgICAgcmV0dXJuIGdlbmVyaWNQYXJzZUFyY0ZsYWcocHRyLCBl
bmQpOwogfQogCi1ib29sIHBhcnNlQXJjRmxhZyhjb25zdCBVQ2hhciomIHB0ciwgY29uc3QgVUNo
YXIqIGVuZCwgYm9vbCYgZmxhZykKK09wdGlvbmFsPGJvb2w+IHBhcnNlQXJjRmxhZyhjb25zdCBV
Q2hhciomIHB0ciwgY29uc3QgVUNoYXIqIGVuZCkKIHsKLSAgICByZXR1cm4gZ2VuZXJpY1BhcnNl
QXJjRmxhZyhwdHIsIGVuZCwgZmxhZyk7CisgICAgcmV0dXJuIGdlbmVyaWNQYXJzZUFyY0ZsYWco
cHRyLCBlbmQpOwogfQogCi1ib29sIHBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIoY29uc3QgU3Ry
aW5nJiBzLCBmbG9hdCYgeCwgZmxvYXQmIHkpCitPcHRpb25hbDxzdGQ6OnBhaXI8ZmxvYXQsIGZs
b2F0Pj4gcGFyc2VOdW1iZXJPcHRpb25hbE51bWJlcihjb25zdCBTdHJpbmcmIHMpCiB7CiAgICAg
aWYgKHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiAKICAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IFN0cmluZ1Zp
ZXcocykudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7CiAgICAgY29uc3QgVUNoYXIqIGN1ciA9IHVw
Y29udmVydGVkQ2hhcmFjdGVyczsKICAgICBjb25zdCBVQ2hhciogZW5kID0gY3VyICsgcy5sZW5n
dGgoKTsKIAotICAgIGlmICghcGFyc2VOdW1iZXIoY3VyLCBlbmQsIHgpKQotICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgYXV0byB4ID0gcGFyc2VOdW1iZXIoY3VyLCBlbmQpOworICAgIGlmICgh
eCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIGlmIChjdXIgPT0gZW5kKQot
ICAgICAgICB5ID0geDsKLSAgICBlbHNlIGlmICghcGFyc2VOdW1iZXIoY3VyLCBlbmQsIHksIGZh
bHNlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3Bh
aXIoKngsICp4KTsKIAotICAgIHJldHVybiBjdXIgPT0gZW5kOworICAgIGF1dG8geSA9IHBhcnNl
TnVtYmVyKGN1ciwgZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNraXApOworICAgIGlm
ICgheSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIGlmIChjdXIgIT0gZW5k
KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgcmV0dXJuIHN0ZDo6bWFrZV9w
YWlyKCp4LCAqeSk7CiB9CiAKLWJvb2wgcGFyc2VQb2ludChjb25zdCBTdHJpbmcmIHMsIEZsb2F0
UG9pbnQmIHBvaW50KQorT3B0aW9uYWw8RmxvYXRQb2ludD4gcGFyc2VQb2ludChjb25zdCBTdHJp
bmcmIHMpCiB7CiAgICAgaWYgKHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKICAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFj
dGVycyA9IFN0cmluZ1ZpZXcocykudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7CiAgICAgY29uc3Qg
VUNoYXIqIGN1ciA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKICAgICBjb25zdCBVQ2hhciogZW5k
ID0gY3VyICsgcy5sZW5ndGgoKTsKIAogICAgIGlmICghc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGN1
ciwgZW5kKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogCi0gICAgZmxvYXQgeCA9IDA7Ci0gICAgaWYgKCFwYXJzZU51bWJlcihjdXIsIGVuZCwg
eCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGZsb2F0IHkgPSAwOwotICAgIGlmICgh
cGFyc2VOdW1iZXIoY3VyLCBlbmQsIHkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBw
b2ludCA9IEZsb2F0UG9pbnQoeCwgeSk7CisgICAgYXV0byBwb2ludCA9IHBhcnNlRmxvYXRQb2lu
dChjdXIsIGVuZCk7CisgICAgaWYgKCFwb2ludCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKIAogICAgIC8vIERpc2FsbG93IGFueXRoaW5nIGV4Y2VwdCBzcGFjZXMgYXQgdGhlIGVuZC4K
LSAgICByZXR1cm4gIXNraXBPcHRpb25hbFNWR1NwYWNlcyhjdXIsIGVuZCk7CisgICAgc2tpcE9w
dGlvbmFsU1ZHU3BhY2VzKGN1ciwgZW5kKTsKKyAgICAKKyAgICByZXR1cm4gcG9pbnQ7CiB9CiAK
LWJvb2wgcGFyc2VSZWN0KGNvbnN0IFN0cmluZyYgc3RyaW5nLCBGbG9hdFJlY3QmIHJlY3QpCitP
cHRpb25hbDxGbG9hdFJlY3Q+IHBhcnNlUmVjdChjb25zdCBTdHJpbmcmIHN0cmluZykKIHsKICAg
ICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcoc3RyaW5nKS51cGNvbnZl
cnRlZENoYXJhY3RlcnMoKTsKICAgICBjb25zdCBVQ2hhciogcHRyID0gdXBjb252ZXJ0ZWRDaGFy
YWN0ZXJzOwogICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBwdHIgKyBzdHJpbmcubGVuZ3RoKCk7Cisg
ICAgCiAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHB0ciwgZW5kKTsKICAgICAKLSAgICBmbG9h
dCB4ID0gMDsKLSAgICBmbG9hdCB5ID0gMDsKLSAgICBmbG9hdCB3aWR0aCA9IDA7Ci0gICAgZmxv
YXQgaGVpZ2h0ID0gMDsKLSAgICBib29sIHZhbGlkID0gcGFyc2VOdW1iZXIocHRyLCBlbmQsIHgp
ICYmIHBhcnNlTnVtYmVyKHB0ciwgZW5kLCB5KSAmJiBwYXJzZU51bWJlcihwdHIsIGVuZCwgd2lk
dGgpICYmIHBhcnNlTnVtYmVyKHB0ciwgZW5kLCBoZWlnaHQsIGZhbHNlKTsKLSAgICByZWN0ID0g
RmxvYXRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpOwotICAgIHJldHVybiB2YWxpZDsKKyAgICBh
dXRvIHggPSBwYXJzZU51bWJlcihwdHIsIGVuZCk7CisgICAgaWYgKCF4KQorICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OworICAgIGF1dG8geSA9IHBhcnNlTnVtYmVyKHB0ciwgZW5kKTsKKyAg
ICBpZiAoIXkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgYXV0byB3aWR0aCA9
IHBhcnNlTnVtYmVyKHB0ciwgZW5kKTsKKyAgICBpZiAoIXdpZHRoKQorICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworICAgIGF1dG8gaGVpZ2h0ID0gcGFyc2VOdW1iZXIocHRyLCBlbmQsIFN1
ZmZpeFNraXBwaW5nUG9saWN5OjpEb250U2tpcCk7CisgICAgaWYgKCFoZWlnaHQpCisgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gRmxvYXRSZWN0IHsgKngsICp5LCAq
d2lkdGgsICpoZWlnaHQgfTsKIH0KIAotYm9vbCBwYXJzZUdseXBoTmFtZShjb25zdCBTdHJpbmcm
IGlucHV0LCBIYXNoU2V0PFN0cmluZz4mIHZhbHVlcykKK09wdGlvbmFsPEhhc2hTZXQ8U3RyaW5n
Pj4gcGFyc2VHbHlwaE5hbWUoY29uc3QgU3RyaW5nJiBpbnB1dCkKIHsKICAgICAvLyBGSVhNRTog
UGFyc2luZyBlcnJvciBkZXRlY3Rpb24gaXMgbWlzc2luZy4KLSAgICB2YWx1ZXMuY2xlYXIoKTsK
KworICAgIEhhc2hTZXQ8U3RyaW5nPiB2YWx1ZXM7CiAKICAgICBhdXRvIHVwY29udmVydGVkQ2hh
cmFjdGVycyA9IFN0cmluZ1ZpZXcoaW5wdXQpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwogICAg
IGNvbnN0IFVDaGFyKiBwdHIgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7CkBAIC0yODcsMTMgKzI5
MSwxMyBAQCBib29sIHBhcnNlR2x5cGhOYW1lKGNvbnN0IFN0cmluZyYgaW5wdXQsCiAgICAgICAg
IHNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVsaW1pdGVyKHB0ciwgZW5kLCAnLCcpOwogICAgIH0K
IAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiB2YWx1ZXM7CiB9CiAKLXN0YXRpYyBib29s
IHBhcnNlVW5pY29kZVJhbmdlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5n
dGgsIFVuaWNvZGVSYW5nZSYgcmFuZ2UpCitzdGF0aWMgT3B0aW9uYWw8VW5pY29kZVJhbmdlPiBw
YXJzZVVuaWNvZGVSYW5nZShjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3Ro
KQogewogICAgIGlmIChsZW5ndGggPCAyIHx8IGNoYXJhY3RlcnNbMF0gIT0gJ1UnIHx8IGNoYXJh
Y3RlcnNbMV0gIT0gJysnKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiAgICAgCiAgICAgLy8gUGFyc2UgdGhlIHN0YXJ0aW5nIGhleCBudW1iZXIg
KG9yIGl0cyBwcmVmaXgpLgogICAgIHVuc2lnbmVkIHN0YXJ0UmFuZ2UgPSAwOwpAQCAtMzA2LDE1
ICszMTAsMTUgQEAgc3RhdGljIGJvb2wgcGFyc2VVbmljb2RlUmFuZ2UoY29uc3QgVUNoYQogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICsrc3RhcnRMZW5ndGg7CiAgICAgICAgIGlmIChzdGFy
dExlbmd0aCA+IDYpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogICAgICAgICBzdGFydFJhbmdlID0gKHN0YXJ0UmFuZ2UgPDwgNCkg
fCB0b0FTQ0lJSGV4VmFsdWUoKnB0cik7CiAgICAgICAgICsrcHRyOwogICAgIH0KLSAgICAKKwog
ICAgIC8vIEhhbmRsZSB0aGUgY2FzZSBvZiByYW5nZXMgc2VwYXJhdGVkIGJ5ICItIiBzaWduLgog
ICAgIGlmICgyICsgc3RhcnRMZW5ndGggPCBsZW5ndGggJiYgKnB0ciA9PSAnLScpIHsKICAgICAg
ICAgaWYgKCFzdGFydExlbmd0aCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIAogICAgICAgICAvLyBQYXJzZSB0aGUg
ZW5kaW5nIGhleCBudW1iZXIgKG9yIGl0cyBwcmVmaXgpLgogICAgICAgICB1bnNpZ25lZCBlbmRS
YW5nZSA9IDA7CkBAIC0zMjUsMTcgKzMyOSwxOCBAQCBzdGF0aWMgYm9vbCBwYXJzZVVuaWNvZGVS
YW5nZShjb25zdCBVQ2hhCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICArK2Vu
ZExlbmd0aDsKICAgICAgICAgICAgIGlmIChlbmRMZW5ndGggPiA2KQotICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAg
ICAgICAgICAgZW5kUmFuZ2UgPSAoZW5kUmFuZ2UgPDwgNCkgfCB0b0FTQ0lJSGV4VmFsdWUoKnB0
cik7CiAgICAgICAgICAgICArK3B0cjsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYg
KCFlbmRMZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogICAgICAgICAKKyAgICAgICAgVW5pY29kZVJhbmdlIHJhbmdlOwog
ICAgICAgICByYW5nZS5maXJzdCA9IHN0YXJ0UmFuZ2U7CiAgICAgICAgIHJhbmdlLnNlY29uZCA9
IGVuZFJhbmdlOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHJhbmdlOwog
ICAgIH0KICAgICAKICAgICAvLyBIYW5kbGUgdGhlIGNhc2Ugb2YgYSBudW1iZXIgd2l0aCBzb21l
IG9wdGlvbmFsIHRyYWlsaW5nIHF1ZXN0aW9uIG1hcmtzLgpAQCAtMzQ1LDI3ICszNTAsMzIgQEAg
c3RhdGljIGJvb2wgcGFyc2VVbmljb2RlUmFuZ2UoY29uc3QgVUNoYQogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICsrc3RhcnRMZW5ndGg7CiAgICAgICAgIGlmIChzdGFydExlbmd0aCA+IDYp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogICAgICAgICBzdGFydFJhbmdlIDw8PSA0OwogICAgICAgICBlbmRSYW5nZSA9IChlbmRS
YW5nZSA8PCA0KSB8IDB4RjsKICAgICAgICAgKytwdHI7CiAgICAgfQogICAgIAogICAgIGlmICgh
c3RhcnRMZW5ndGgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKICAgICAKKyAgICBVbmljb2RlUmFuZ2UgcmFuZ2U7CiAgICAgcmFuZ2UuZmlyc3Qg
PSBzdGFydFJhbmdlOwogICAgIHJhbmdlLnNlY29uZCA9IGVuZFJhbmdlOwotICAgIHJldHVybiB0
cnVlOworICAgIHJldHVybiByYW5nZTsKIH0KIAotYm9vbCBwYXJzZUtlcm5pbmdVbmljb2RlU3Ry
aW5nKGNvbnN0IFN0cmluZyYgaW5wdXQsIFVuaWNvZGVSYW5nZXMmIHJhbmdlTGlzdCwgSGFzaFNl
dDxTdHJpbmc+JiBzdHJpbmdMaXN0KQorT3B0aW9uYWw8c3RkOjpwYWlyPFVuaWNvZGVSYW5nZXMs
IEhhc2hTZXQ8U3RyaW5nPj4+IHBhcnNlS2VybmluZ1VuaWNvZGVTdHJpbmcoY29uc3QgU3RyaW5n
JiBpbnB1dCkKIHsKICAgICAvLyBGSVhNRTogUGFyc2luZyBlcnJvciBkZXRlY3Rpb24gaXMgbWlz
c2luZy4KKwogICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyhpbnB1
dCkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7CiAgICAgY29uc3QgVUNoYXIqIHB0ciA9IHVwY29u
dmVydGVkQ2hhcmFjdGVyczsKICAgICBjb25zdCBVQ2hhciogZW5kID0gcHRyICsgaW5wdXQubGVu
Z3RoKCk7CiAKKyAgICBVbmljb2RlUmFuZ2VzIHJhbmdlTGlzdDsKKyAgICBIYXNoU2V0PFN0cmlu
Zz4gc3RyaW5nTGlzdDsKKwogICAgIHdoaWxlIChwdHIgPCBlbmQpIHsKICAgICAgICAgY29uc3Qg
VUNoYXIqIGlucHV0U3RhcnQgPSBwdHI7CiAgICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgKnB0
ciAhPSAnLCcpCkBAIC0zNzUsMTA1ICszODUsMzcgQEAgYm9vbCBwYXJzZUtlcm5pbmdVbmljb2Rl
U3RyaW5nKGNvbnN0IFN0cgogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgLy8gVHJ5IHRv
IHBhcnNlIHVuaWNvZGUgcmFuZ2UgZmlyc3QKLSAgICAgICAgVW5pY29kZVJhbmdlIHJhbmdlOwot
ICAgICAgICBpZiAocGFyc2VVbmljb2RlUmFuZ2UoaW5wdXRTdGFydCwgcHRyIC0gaW5wdXRTdGFy
dCwgcmFuZ2UpKQotICAgICAgICAgICAgcmFuZ2VMaXN0LmFwcGVuZChyYW5nZSk7CisgICAgICAg
IGlmIChhdXRvIHJhbmdlID0gcGFyc2VVbmljb2RlUmFuZ2UoaW5wdXRTdGFydCwgcHRyIC0gaW5w
dXRTdGFydCkpCisgICAgICAgICAgICByYW5nZUxpc3QuYXBwZW5kKFdURk1vdmUoKnJhbmdlKSk7
CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHN0cmluZ0xpc3QuYWRkKFN0cmluZyhpbnB1dFN0
YXJ0LCBwdHIgLSBpbnB1dFN0YXJ0KSk7CiAgICAgICAgICsrcHRyOwogICAgIH0KIAotICAgIHJl
dHVybiB0cnVlOworICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihyYW5nZUxpc3QsIHN0cmluZ0xp
c3QpOwogfQogCi1WZWN0b3I8U3RyaW5nPiBwYXJzZURlbGltaXRlZFN0cmluZyhjb25zdCBTdHJp
bmcmIGlucHV0LCBjb25zdCBjaGFyIHNlcGVyYXRvcikKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlPiBzdGF0aWMgT3B0aW9uYWw8RmxvYXRQb2ludD4gZ2VuZXJpY1BhcnNlRmxvYXRQ
b2ludChjb25zdCBDaGFyYWN0ZXJUeXBlKiYgY3VycmVudCwgY29uc3QgQ2hhcmFjdGVyVHlwZSog
ZW5kKQogewotICAgIFZlY3RvcjxTdHJpbmc+IHZhbHVlczsKLQotICAgIGF1dG8gdXBjb252ZXJ0
ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyhpbnB1dCkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7
Ci0gICAgY29uc3QgVUNoYXIqIHB0ciA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKLSAgICBjb25z
dCBVQ2hhciogZW5kID0gcHRyICsgaW5wdXQubGVuZ3RoKCk7Ci0gICAgc2tpcE9wdGlvbmFsU1ZH
U3BhY2VzKHB0ciwgZW5kKTsKLQotICAgIHdoaWxlIChwdHIgPCBlbmQpIHsKLSAgICAgICAgLy8g
TGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGUgc3BhY2UsIGFuZCB3aGl0ZSBzcGFjZSBiZWZvcmUg
YW5kIGFmdGVyIHNlbWljb2xvbiBzZXBhcmF0b3JzLCB3aWxsIGJlIGlnbm9yZWQuCi0gICAgICAg
IGNvbnN0IFVDaGFyKiBpbnB1dFN0YXJ0ID0gcHRyOwotICAgICAgICB3aGlsZSAocHRyIDwgZW5k
ICYmICpwdHIgIT0gc2VwZXJhdG9yKSAvLyBjYXJlZnVsIG5vdCB0byBpZ25vcmUgd2hpdGVzcGFj
ZSBpbnNpZGUgaW5wdXRzCi0gICAgICAgICAgICBwdHIrKzsKKyAgICBhdXRvIHggPSBwYXJzZU51
bWJlcihjdXJyZW50LCBlbmQpOworICAgIGlmICgheCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIAotICAgICAgICBpZiAocHRyID09IGlucHV0U3RhcnQpCi0gICAgICAgICAgICBicmVh
azsKLQotICAgICAgICAvLyB3YWxrIGJhY2t3YXJkcyBmcm9tIHRoZSA7IHRvIGlnbm9yZSBhbnkg
d2hpdGVzcGFjZQotICAgICAgICBjb25zdCBVQ2hhciogaW5wdXRFbmQgPSBwdHIgLSAxOwotICAg
ICAgICB3aGlsZSAoaW5wdXRTdGFydCA8IGlucHV0RW5kICYmIGlzU1ZHU3BhY2UoKmlucHV0RW5k
KSkKLSAgICAgICAgICAgIGlucHV0RW5kLS07CisgICAgYXV0byB5ID0gcGFyc2VOdW1iZXIoY3Vy
cmVudCwgZW5kKTsKKyAgICBpZiAoIXkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAK
LSAgICAgICAgdmFsdWVzLmFwcGVuZChTdHJpbmcoaW5wdXRTdGFydCwgaW5wdXRFbmQgLSBpbnB1
dFN0YXJ0ICsgMSkpOwotICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXNPckRlbGltaXRlcihw
dHIsIGVuZCwgc2VwZXJhdG9yKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdmFsdWVzOworICAgIHJl
dHVybiBGbG9hdFBvaW50IHsgKngsICp5IH07CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlPgotYm9vbCBwYXJzZUZsb2F0UG9pbnQoY29uc3QgQ2hhcmFjdGVyVHlwZSomIGN1
cnJlbnQsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCwgRmxvYXRQb2ludCYgcG9pbnQpCitPcHRp
b25hbDxGbG9hdFBvaW50PiBwYXJzZUZsb2F0UG9pbnQoY29uc3QgTENoYXIqJiBjdXJyZW50LCBj
b25zdCBMQ2hhciogZW5kKQogewotICAgIGZsb2F0IHg7Ci0gICAgZmxvYXQgeTsKLSAgICBpZiAo
IXBhcnNlTnVtYmVyKGN1cnJlbnQsIGVuZCwgeCkKLSAgICAgICAgfHwgIXBhcnNlTnVtYmVyKGN1
cnJlbnQsIGVuZCwgeSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBwb2ludCA9IEZsb2F0
UG9pbnQoeCwgeSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXRlbXBsYXRlIGJvb2wgcGFyc2VG
bG9hdFBvaW50KGNvbnN0IExDaGFyKiYgY3VycmVudCwgY29uc3QgTENoYXIqIGVuZCwgRmxvYXRQ
b2ludCYgcG9pbnQxKTsKLXRlbXBsYXRlIGJvb2wgcGFyc2VGbG9hdFBvaW50KGNvbnN0IFVDaGFy
KiYgY3VycmVudCwgY29uc3QgVUNoYXIqIGVuZCwgRmxvYXRQb2ludCYgcG9pbnQxKTsKLQotdGVt
cGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1pbmxpbmUgYm9vbCBwYXJzZUZsb2F0UG9p
bnQyKGNvbnN0IENoYXJhY3RlclR5cGUqJiBjdXJyZW50LCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBl
bmQsIEZsb2F0UG9pbnQmIHBvaW50MSwgRmxvYXRQb2ludCYgcG9pbnQyKQotewotICAgIGZsb2F0
IHgxOwotICAgIGZsb2F0IHkxOwotICAgIGZsb2F0IHgyOwotICAgIGZsb2F0IHkyOwotICAgIGlm
ICghcGFyc2VOdW1iZXIoY3VycmVudCwgZW5kLCB4MSkKLSAgICAgICAgfHwgIXBhcnNlTnVtYmVy
KGN1cnJlbnQsIGVuZCwgeTEpCi0gICAgICAgIHx8ICFwYXJzZU51bWJlcihjdXJyZW50LCBlbmQs
IHgyKQotICAgICAgICB8fCAhcGFyc2VOdW1iZXIoY3VycmVudCwgZW5kLCB5MikpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBwb2ludDEgPSBGbG9hdFBvaW50KHgxLCB5MSk7Ci0gICAgcG9p
bnQyID0gRmxvYXRQb2ludCh4MiwgeTIpOwotICAgIHJldHVybiB0cnVlOwotfQotCi10ZW1wbGF0
ZSBib29sIHBhcnNlRmxvYXRQb2ludDIoY29uc3QgTENoYXIqJiBjdXJyZW50LCBjb25zdCBMQ2hh
ciogZW5kLCBGbG9hdFBvaW50JiBwb2ludDEsIEZsb2F0UG9pbnQmIHBvaW50Mik7Ci10ZW1wbGF0
ZSBib29sIHBhcnNlRmxvYXRQb2ludDIoY29uc3QgVUNoYXIqJiBjdXJyZW50LCBjb25zdCBVQ2hh
ciogZW5kLCBGbG9hdFBvaW50JiBwb2ludDEsIEZsb2F0UG9pbnQmIHBvaW50Mik7Ci0KLXRlbXBs
YXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotYm9vbCBwYXJzZUZsb2F0UG9pbnQzKGNvbnN0
IENoYXJhY3RlclR5cGUqJiBjdXJyZW50LCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQsIEZsb2F0
UG9pbnQmIHBvaW50MSwgRmxvYXRQb2ludCYgcG9pbnQyLCBGbG9hdFBvaW50JiBwb2ludDMpCi17
Ci0gICAgZmxvYXQgeDE7Ci0gICAgZmxvYXQgeTE7Ci0gICAgZmxvYXQgeDI7Ci0gICAgZmxvYXQg
eTI7Ci0gICAgZmxvYXQgeDM7Ci0gICAgZmxvYXQgeTM7Ci0gICAgaWYgKCFwYXJzZU51bWJlcihj
dXJyZW50LCBlbmQsIHgxKQotICAgICAgICB8fCAhcGFyc2VOdW1iZXIoY3VycmVudCwgZW5kLCB5
MSkKLSAgICAgICAgfHwgIXBhcnNlTnVtYmVyKGN1cnJlbnQsIGVuZCwgeDIpCi0gICAgICAgIHx8
ICFwYXJzZU51bWJlcihjdXJyZW50LCBlbmQsIHkyKQotICAgICAgICB8fCAhcGFyc2VOdW1iZXIo
Y3VycmVudCwgZW5kLCB4MykKLSAgICAgICAgfHwgIXBhcnNlTnVtYmVyKGN1cnJlbnQsIGVuZCwg
eTMpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcG9pbnQxID0gRmxvYXRQb2ludCh4MSwg
eTEpOwotICAgIHBvaW50MiA9IEZsb2F0UG9pbnQoeDIsIHkyKTsKLSAgICBwb2ludDMgPSBGbG9h
dFBvaW50KHgzLCB5Myk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGdlbmVyaWNQYXJz
ZUZsb2F0UG9pbnQoY3VycmVudCwgZW5kKTsKIH0KIAotdGVtcGxhdGUgYm9vbCBwYXJzZUZsb2F0
UG9pbnQzKGNvbnN0IExDaGFyKiYgY3VycmVudCwgY29uc3QgTENoYXIqIGVuZCwgRmxvYXRQb2lu
dCYgcG9pbnQxLCBGbG9hdFBvaW50JiBwb2ludDIsIEZsb2F0UG9pbnQmIHBvaW50Myk7Ci10ZW1w
bGF0ZSBib29sIHBhcnNlRmxvYXRQb2ludDMoY29uc3QgVUNoYXIqJiBjdXJyZW50LCBjb25zdCBV
Q2hhciogZW5kLCBGbG9hdFBvaW50JiBwb2ludDEsIEZsb2F0UG9pbnQmIHBvaW50MiwgRmxvYXRQ
b2ludCYgcG9pbnQzKTsKK09wdGlvbmFsPEZsb2F0UG9pbnQ+IHBhcnNlRmxvYXRQb2ludChjb25z
dCBVQ2hhciomIGN1cnJlbnQsIGNvbnN0IFVDaGFyKiBlbmQpCit7CisgICAgcmV0dXJuIGdlbmVy
aWNQYXJzZUZsb2F0UG9pbnQoY3VycmVudCwgZW5kKTsKK30KIAogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdQYXJzZXJVdGlsaXRpZXMuaAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3
ICsyNSw3IEBACiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgogCi10eXBlZGVmIHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+IFVuaWNv
ZGVSYW5nZTsKK3R5cGVkZWYgc3RkOjpwYWlyPFVDaGFyMzIsIFVDaGFyMzI+IFVuaWNvZGVSYW5n
ZTsKIHR5cGVkZWYgVmVjdG9yPFVuaWNvZGVSYW5nZT4gVW5pY29kZVJhbmdlczsKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpAQCAtMzMsNDIgKzMzLDQ1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNs
YXNzIEZsb2F0UG9pbnQ7CiBjbGFzcyBGbG9hdFJlY3Q7CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBD
aGFyYWN0ZXJUeXBlPgotYm9vbCBwYXJzZVNWR051bWJlcihDaGFyYWN0ZXJUeXBlKiBwdHIsIHNp
emVfdCBsZW5ndGgsIGRvdWJsZSYgbnVtYmVyKTsKLWJvb2wgcGFyc2VOdW1iZXIoY29uc3QgTENo
YXIqJiBwdHIsIGNvbnN0IExDaGFyKiBlbmQsIGZsb2F0JiBudW1iZXIsIGJvb2wgc2tpcCA9IHRy
dWUpOwotYm9vbCBwYXJzZU51bWJlcihjb25zdCBVQ2hhciomIHB0ciwgY29uc3QgVUNoYXIqIGVu
ZCwgZmxvYXQmIG51bWJlciwgYm9vbCBza2lwID0gdHJ1ZSk7Ci1ib29sIHBhcnNlTnVtYmVyRnJv
bVN0cmluZyhjb25zdCBTdHJpbmcmLCBmbG9hdCYgbnVtYmVyLCBib29sIHNraXAgPSB0cnVlKTsK
LWJvb2wgcGFyc2VOdW1iZXJPcHRpb25hbE51bWJlcihjb25zdCBTdHJpbmcmIHMsIGZsb2F0JiBo
LCBmbG9hdCYgdik7Ci1ib29sIHBhcnNlQXJjRmxhZyhjb25zdCBMQ2hhciomIHB0ciwgY29uc3Qg
TENoYXIqIGVuZCwgYm9vbCYgZmxhZyk7Ci1ib29sIHBhcnNlQXJjRmxhZyhjb25zdCBVQ2hhciom
IHB0ciwgY29uc3QgVUNoYXIqIGVuZCwgYm9vbCYgZmxhZyk7Ci1ib29sIHBhcnNlUG9pbnQoY29u
c3QgU3RyaW5nJiwgRmxvYXRQb2ludCYpOwotYm9vbCBwYXJzZVJlY3QoY29uc3QgU3RyaW5nJiwg
RmxvYXRSZWN0Jik7Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotYm9vbCBw
YXJzZUZsb2F0UG9pbnQoY29uc3QgQ2hhcmFjdGVyVHlwZSomIGN1cnJlbnQsIGNvbnN0IENoYXJh
Y3RlclR5cGUqIGVuZCwgRmxvYXRQb2ludCYpOwotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+Ci1ib29sIHBhcnNlRmxvYXRQb2ludDIoY29uc3QgQ2hhcmFjdGVyVHlwZSomIGN1cnJl
bnQsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCwgRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmKTsK
LXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotYm9vbCBwYXJzZUZsb2F0UG9pbnQz
KGNvbnN0IENoYXJhY3RlclR5cGUqJiBjdXJyZW50LCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQs
IEZsb2F0UG9pbnQmLCBGbG9hdFBvaW50JiwgRmxvYXRQb2ludCYpOworZW51bSBjbGFzcyBTdWZm
aXhTa2lwcGluZ1BvbGljeSB7CisgICAgRG9udFNraXAsCisgICAgU2tpcAorfTsKKworT3B0aW9u
YWw8ZmxvYXQ+IHBhcnNlTnVtYmVyKGNvbnN0IExDaGFyKiYgY3VycmVudCwgY29uc3QgTENoYXIq
IGVuZCwgU3VmZml4U2tpcHBpbmdQb2xpY3kgPSBTdWZmaXhTa2lwcGluZ1BvbGljeTo6U2tpcCk7
CitPcHRpb25hbDxmbG9hdD4gcGFyc2VOdW1iZXIoY29uc3QgVUNoYXIqJiBjdXJyZW50LCBjb25z
dCBVQ2hhciogZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeSA9IFN1ZmZpeFNraXBwaW5nUG9saWN5
OjpTa2lwKTsKK09wdGlvbmFsPGZsb2F0PiBwYXJzZU51bWJlcihjb25zdCBTdHJpbmcmLCBTdWZm
aXhTa2lwcGluZ1BvbGljeSA9IFN1ZmZpeFNraXBwaW5nUG9saWN5OjpTa2lwKTsKKworT3B0aW9u
YWw8c3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4+IHBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIoY29u
c3QgU3RyaW5nJik7CisKK09wdGlvbmFsPGJvb2w+IHBhcnNlQXJjRmxhZyhjb25zdCBMQ2hhciom
IGN1cnJlbnQsIGNvbnN0IExDaGFyKiBlbmQpOworT3B0aW9uYWw8Ym9vbD4gcGFyc2VBcmNGbGFn
KGNvbnN0IFVDaGFyKiYgY3VycmVudCwgY29uc3QgVUNoYXIqIGVuZCk7CisKK09wdGlvbmFsPEZs
b2F0UG9pbnQ+IHBhcnNlUG9pbnQoY29uc3QgU3RyaW5nJik7CitPcHRpb25hbDxGbG9hdFJlY3Q+
IHBhcnNlUmVjdChjb25zdCBTdHJpbmcmKTsKKworT3B0aW9uYWw8RmxvYXRQb2ludD4gcGFyc2VG
bG9hdFBvaW50KGNvbnN0IExDaGFyKiYgY3VycmVudCwgY29uc3QgTENoYXIqIGVuZCk7CitPcHRp
b25hbDxGbG9hdFBvaW50PiBwYXJzZUZsb2F0UG9pbnQoY29uc3QgVUNoYXIqJiBjdXJyZW50LCBj
b25zdCBVQ2hhciogZW5kKTsKKworT3B0aW9uYWw8c3RkOjpwYWlyPFVuaWNvZGVSYW5nZXMsIEhh
c2hTZXQ8U3RyaW5nPj4+IHBhcnNlS2VybmluZ1VuaWNvZGVTdHJpbmcoY29uc3QgU3RyaW5nJik7
CitPcHRpb25hbDxIYXNoU2V0PFN0cmluZz4+IHBhcnNlR2x5cGhOYW1lKGNvbnN0IFN0cmluZyYp
OworCiAKIC8vIFNWRyBhbGxvd3Mgc2V2ZXJhbCBkaWZmZXJlbnQgd2hpdGVzcGFjZSBjaGFyYWN0
ZXJzOgogLy8gaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHL3BhdGhzLmh0bWwjUGF0aERhdGFCTkYK
LXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotaW5saW5lIGJvb2wgaXNTVkdTcGFj
ZShDaGFyYWN0ZXJUeXBlIGMpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBpbmxp
bmUgYm9vbCBpc1NWR1NwYWNlKENoYXJhY3RlclR5cGUgYykKIHsKICAgICByZXR1cm4gYyA9PSAn
ICcgfHwgYyA9PSAnXHQnIHx8IGMgPT0gJ1xuJyB8fCBjID09ICdccic7CiB9CiAKLXRlbXBsYXRl
IDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotaW5saW5lIGJvb2wgc2tpcE9wdGlvbmFsU1ZHU3Bh
Y2VzKGNvbnN0IENoYXJhY3RlclR5cGUqJiBwdHIsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCkK
K3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGlubGluZSBib29sIHNraXBPcHRpb25h
bFNWR1NwYWNlcyhjb25zdCBDaGFyYWN0ZXJUeXBlKiYgcHRyLCBjb25zdCBDaGFyYWN0ZXJUeXBl
KiBlbmQpCiB7CiAgICAgd2hpbGUgKHB0ciA8IGVuZCAmJiBpc1NWR1NwYWNlKCpwdHIpKQogICAg
ICAgICBwdHIrKzsKICAgICByZXR1cm4gcHRyIDwgZW5kOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZT4KLWlubGluZSBib29sIHNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVs
aW1pdGVyKGNvbnN0IENoYXJhY3RlclR5cGUqJiBwdHIsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVu
ZCwgY2hhciBkZWxpbWl0ZXIgPSAnLCcpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBl
PiBpbmxpbmUgYm9vbCBza2lwT3B0aW9uYWxTVkdTcGFjZXNPckRlbGltaXRlcihjb25zdCBDaGFy
YWN0ZXJUeXBlKiYgcHRyLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQsIGNoYXIgZGVsaW1pdGVy
ID0gJywnKQogewogICAgIGlmIChwdHIgPCBlbmQgJiYgIWlzU1ZHU3BhY2UoKnB0cikgJiYgKnB0
ciAhPSBkZWxpbWl0ZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTgxLDEwICs4NCw2IEBA
IGlubGluZSBib29sIHNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVsaW0KICAgICByZXR1cm4gcHRy
IDwgZW5kOwogfQogCi1WZWN0b3I8U3RyaW5nPiBwYXJzZURlbGltaXRlZFN0cmluZyhjb25zdCBT
dHJpbmcmIGlucHV0LCBjb25zdCBjaGFyIHNlcGVyYXRvcik7Ci1ib29sIHBhcnNlS2VybmluZ1Vu
aWNvZGVTdHJpbmcoY29uc3QgU3RyaW5nJiBpbnB1dCwgVW5pY29kZVJhbmdlcyYsIEhhc2hTZXQ8
U3RyaW5nPiYgc3RyaW5nTGlzdCk7Ci1ib29sIHBhcnNlR2x5cGhOYW1lKGNvbnN0IFN0cmluZyYg
aW5wdXQsIEhhc2hTZXQ8U3RyaW5nPiYgdmFsdWVzKTsKLQogaW5saW5lIGJvb2wgc2tpcFN0cmlu
Zyhjb25zdCBVQ2hhciomIHB0ciwgY29uc3QgVUNoYXIqIGVuZCwgY29uc3QgVUNoYXIqIG5hbWUs
IGludCBsZW5ndGgpCiB7CiAgICAgaWYgKGVuZCAtIHB0ciA8IGxlbmd0aCkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQmxlbmRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1BhdGhCbGVuZGVyLmNwcAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1BhdGhCbGVuZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDIw
MCArMTE2LDE5OCBAQCBGbG9hdFBvaW50IFNWR1BhdGhCbGVuZGVyOjpibGVuZEFuaW1hdGVkCiAg
ICAgcmV0dXJuIGFuaW1hdGVkUG9pbnQ7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9u
PiB1c2luZyBQdWxsRnJvbVNvdXJjZXNSZXN1bHQgPSBzdGQ6OnBhaXI8dHlwZW5hbWUgc3RkOjpp
bnZva2VfcmVzdWx0X3Q8RnVuY3Rpb24sIFNWR1BhdGhTb3VyY2U+Ojp2YWx1ZV90eXBlLCB0eXBl
bmFtZSBzdGQ6Omludm9rZV9yZXN1bHRfdDxGdW5jdGlvbiwgU1ZHUGF0aFNvdXJjZT46OnZhbHVl
X3R5cGU+OwordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb24+IHN0YXRpYyBPcHRpb25hbDxQdWxs
RnJvbVNvdXJjZXNSZXN1bHQ8RnVuY3Rpb24+PiBwdWxsRnJvbVNvdXJjZXMoU1ZHUGF0aFNvdXJj
ZSYgZnJvbVNvdXJjZSwgU1ZHUGF0aFNvdXJjZSYgdG9Tb3VyY2UsIEZ1bmN0aW9uJiYgZnVuY3Rp
b24pCit7CisgICAgaWYgKCFmcm9tU291cmNlLmhhc01vcmVEYXRhKCkpCisgICAgICAgIHJldHVy
biBQdWxsRnJvbVNvdXJjZXNSZXN1bHQ8RnVuY3Rpb24+IHsgfTsKKworICAgIGF1dG8gcGFyc2Vk
RnJvbSA9IHN0ZDo6aW52b2tlKGZ1bmN0aW9uLCBmcm9tU291cmNlKTsKKyAgICBpZiAoIXBhcnNl
ZEZyb20pCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgYXV0byBwYXJzZWRUbyA9
IHN0ZDo6aW52b2tlKGZ1bmN0aW9uLCB0b1NvdXJjZSk7CisgICAgaWYgKCFwYXJzZWRUbykKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIHJldHVybiBQdWxsRnJvbVNvdXJjZXNS
ZXN1bHQ8RnVuY3Rpb24+IHsgV1RGTW92ZSgqcGFyc2VkRnJvbSksIFdURk1vdmUoKnBhcnNlZFRv
KSB9OworfQorCiBib29sIFNWR1BhdGhCbGVuZGVyOjpibGVuZE1vdmVUb1NlZ21lbnQoZmxvYXQg
cHJvZ3Jlc3MpCiB7Ci0gICAgRmxvYXRQb2ludCBmcm9tVGFyZ2V0UG9pbnQ7Ci0gICAgRmxvYXRQ
b2ludCB0b1RhcmdldFBvaW50OwotICAgIGlmICgobV9mcm9tU291cmNlLmhhc01vcmVEYXRhKCkg
JiYgIW1fZnJvbVNvdXJjZS5wYXJzZU1vdmVUb1NlZ21lbnQoZnJvbVRhcmdldFBvaW50KSkKLSAg
ICAgICAgfHwgIW1fdG9Tb3VyY2UucGFyc2VNb3ZlVG9TZWdtZW50KHRvVGFyZ2V0UG9pbnQpKQor
ICAgIGF1dG8gcmVzdWx0ID0gcHVsbEZyb21Tb3VyY2VzKG1fZnJvbVNvdXJjZSwgbV90b1NvdXJj
ZSwgJlNWR1BhdGhTb3VyY2U6OnBhcnNlTW92ZVRvU2VnbWVudCk7CisgICAgaWYgKCFyZXN1bHQp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmICghbV9jb25zdW1lcikKICAgICAgICAg
cmV0dXJuIHRydWU7CiAKLSAgICBtX2NvbnN1bWVyLT5tb3ZlVG8oYmxlbmRBbmltYXRlZEZsb2F0
UG9pbnQoZnJvbVRhcmdldFBvaW50LCB0b1RhcmdldFBvaW50LCBwcm9ncmVzcyksIGZhbHNlLCBt
X2lzSW5GaXJzdEhhbGZPZkFuaW1hdGlvbiA/IG1fZnJvbU1vZGUgOiBtX3RvTW9kZSk7Ci0gICAg
bV9mcm9tQ3VycmVudFBvaW50ID0gbV9mcm9tTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8g
ZnJvbVRhcmdldFBvaW50IDogbV9mcm9tQ3VycmVudFBvaW50ICsgZnJvbVRhcmdldFBvaW50Owot
ICAgIG1fdG9DdXJyZW50UG9pbnQgPSBtX3RvTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8g
dG9UYXJnZXRQb2ludCA6IG1fdG9DdXJyZW50UG9pbnQgKyB0b1RhcmdldFBvaW50OworICAgIGF1
dG8gW2Zyb20sIHRvXSA9ICpyZXN1bHQ7CisKKyAgICBtX2NvbnN1bWVyLT5tb3ZlVG8oYmxlbmRB
bmltYXRlZEZsb2F0UG9pbnQoZnJvbS50YXJnZXRQb2ludCwgdG8udGFyZ2V0UG9pbnQsIHByb2dy
ZXNzKSwgZmFsc2UsIG1faXNJbkZpcnN0SGFsZk9mQW5pbWF0aW9uID8gbV9mcm9tTW9kZSA6IG1f
dG9Nb2RlKTsKKyAgICBtX2Zyb21DdXJyZW50UG9pbnQgPSBtX2Zyb21Nb2RlID09IEFic29sdXRl
Q29vcmRpbmF0ZXMgPyBmcm9tLnRhcmdldFBvaW50IDogbV9mcm9tQ3VycmVudFBvaW50ICsgZnJv
bS50YXJnZXRQb2ludDsKKyAgICBtX3RvQ3VycmVudFBvaW50ID0gbV90b01vZGUgPT0gQWJzb2x1
dGVDb29yZGluYXRlcyA/IHRvLnRhcmdldFBvaW50IDogbV90b0N1cnJlbnRQb2ludCArIHRvLnRh
cmdldFBvaW50OwogICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIFNWR1BhdGhCbGVuZGVyOjpi
bGVuZExpbmVUb1NlZ21lbnQoZmxvYXQgcHJvZ3Jlc3MpCiB7Ci0gICAgRmxvYXRQb2ludCBmcm9t
VGFyZ2V0UG9pbnQ7Ci0gICAgRmxvYXRQb2ludCB0b1RhcmdldFBvaW50OwotICAgIGlmICgobV9m
cm9tU291cmNlLmhhc01vcmVEYXRhKCkgJiYgIW1fZnJvbVNvdXJjZS5wYXJzZUxpbmVUb1NlZ21l
bnQoZnJvbVRhcmdldFBvaW50KSkKLSAgICAgICAgfHwgIW1fdG9Tb3VyY2UucGFyc2VMaW5lVG9T
ZWdtZW50KHRvVGFyZ2V0UG9pbnQpKQorICAgIGF1dG8gcmVzdWx0ID0gcHVsbEZyb21Tb3VyY2Vz
KG1fZnJvbVNvdXJjZSwgbV90b1NvdXJjZSwgJlNWR1BhdGhTb3VyY2U6OnBhcnNlTGluZVRvU2Vn
bWVudCk7CisgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlm
ICghbV9jb25zdW1lcikKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBtX2NvbnN1bWVyLT5s
aW5lVG8oYmxlbmRBbmltYXRlZEZsb2F0UG9pbnQoZnJvbVRhcmdldFBvaW50LCB0b1RhcmdldFBv
aW50LCBwcm9ncmVzcyksIG1faXNJbkZpcnN0SGFsZk9mQW5pbWF0aW9uID8gbV9mcm9tTW9kZSA6
IG1fdG9Nb2RlKTsKLSAgICBtX2Zyb21DdXJyZW50UG9pbnQgPSBtX2Zyb21Nb2RlID09IEFic29s
dXRlQ29vcmRpbmF0ZXMgPyBmcm9tVGFyZ2V0UG9pbnQgOiBtX2Zyb21DdXJyZW50UG9pbnQgKyBm
cm9tVGFyZ2V0UG9pbnQ7Ci0gICAgbV90b0N1cnJlbnRQb2ludCA9IG1fdG9Nb2RlID09IEFic29s
dXRlQ29vcmRpbmF0ZXMgPyB0b1RhcmdldFBvaW50IDogbV90b0N1cnJlbnRQb2ludCArIHRvVGFy
Z2V0UG9pbnQ7CisgICAgYXV0byBbZnJvbSwgdG9dID0gKnJlc3VsdDsKKworICAgIG1fY29uc3Vt
ZXItPmxpbmVUbyhibGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tLnRhcmdldFBvaW50LCB0by50
YXJnZXRQb2ludCwgcHJvZ3Jlc3MpLCBtX2lzSW5GaXJzdEhhbGZPZkFuaW1hdGlvbiA/IG1fZnJv
bU1vZGUgOiBtX3RvTW9kZSk7CisgICAgbV9mcm9tQ3VycmVudFBvaW50ID0gbV9mcm9tTW9kZSA9
PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gZnJvbS50YXJnZXRQb2ludCA6IG1fZnJvbUN1cnJlbnRQ
b2ludCArIGZyb20udGFyZ2V0UG9pbnQ7CisgICAgbV90b0N1cnJlbnRQb2ludCA9IG1fdG9Nb2Rl
ID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyB0by50YXJnZXRQb2ludCA6IG1fdG9DdXJyZW50UG9p
bnQgKyB0by50YXJnZXRQb2ludDsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBTVkdQYXRo
QmxlbmRlcjo6YmxlbmRMaW5lVG9Ib3Jpem9udGFsU2VnbWVudChmbG9hdCBwcm9ncmVzcykKIHsK
LSAgICBmbG9hdCBmcm9tWCA9IDA7Ci0gICAgZmxvYXQgdG9YID0gMDsKLSAgICBpZiAoKG1fZnJv
bVNvdXJjZS5oYXNNb3JlRGF0YSgpICYmICFtX2Zyb21Tb3VyY2UucGFyc2VMaW5lVG9Ib3Jpem9u
dGFsU2VnbWVudChmcm9tWCkpCi0gICAgICAgIHx8ICFtX3RvU291cmNlLnBhcnNlTGluZVRvSG9y
aXpvbnRhbFNlZ21lbnQodG9YKSkKKyAgICBhdXRvIHJlc3VsdCA9IHB1bGxGcm9tU291cmNlcyht
X2Zyb21Tb3VyY2UsIG1fdG9Tb3VyY2UsICZTVkdQYXRoU291cmNlOjpwYXJzZUxpbmVUb0hvcml6
b250YWxTZWdtZW50KTsKKyAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgaWYgKCFtX2NvbnN1bWVyKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIG1fY29u
c3VtZXItPmxpbmVUb0hvcml6b250YWwoYmxlbmRBbmltYXRlZERpbWVuc29uYWxGbG9hdChmcm9t
WCwgdG9YLCBCbGVuZEhvcml6b250YWwsIHByb2dyZXNzKSwgbV9pc0luRmlyc3RIYWxmT2ZBbmlt
YXRpb24gPyBtX2Zyb21Nb2RlIDogbV90b01vZGUpOwotICAgIG1fZnJvbUN1cnJlbnRQb2ludC5z
ZXRYKG1fZnJvbU1vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IGZyb21YIDogbV9mcm9tQ3Vy
cmVudFBvaW50LngoKSArIGZyb21YKTsKLSAgICBtX3RvQ3VycmVudFBvaW50LnNldFgobV90b01v
ZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IHRvWCA6IG1fdG9DdXJyZW50UG9pbnQueCgpICsg
dG9YKTsKKyAgICBhdXRvIFtmcm9tLCB0b10gPSAqcmVzdWx0OworCisgICAgbV9jb25zdW1lci0+
bGluZVRvSG9yaXpvbnRhbChibGVuZEFuaW1hdGVkRGltZW5zb25hbEZsb2F0KGZyb20ueCwgdG8u
eCwgQmxlbmRIb3Jpem9udGFsLCBwcm9ncmVzcyksIG1faXNJbkZpcnN0SGFsZk9mQW5pbWF0aW9u
ID8gbV9mcm9tTW9kZSA6IG1fdG9Nb2RlKTsKKyAgICBtX2Zyb21DdXJyZW50UG9pbnQuc2V0WCht
X2Zyb21Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyBmcm9tLnggOiBtX2Zyb21DdXJyZW50
UG9pbnQueCgpICsgZnJvbS54KTsKKyAgICBtX3RvQ3VycmVudFBvaW50LnNldFgobV90b01vZGUg
PT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IHRvLnggOiBtX3RvQ3VycmVudFBvaW50LngoKSArIHRv
LngpOwogICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIFNWR1BhdGhCbGVuZGVyOjpibGVuZExp
bmVUb1ZlcnRpY2FsU2VnbWVudChmbG9hdCBwcm9ncmVzcykKIHsKLSAgICBmbG9hdCBmcm9tWSA9
IDA7Ci0gICAgZmxvYXQgdG9ZID0gMDsKLSAgICBpZiAoKG1fZnJvbVNvdXJjZS5oYXNNb3JlRGF0
YSgpICYmICFtX2Zyb21Tb3VyY2UucGFyc2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnQoZnJvbVkpKQot
ICAgICAgICB8fCAhbV90b1NvdXJjZS5wYXJzZUxpbmVUb1ZlcnRpY2FsU2VnbWVudCh0b1kpKQor
ICAgIGF1dG8gcmVzdWx0ID0gcHVsbEZyb21Tb3VyY2VzKG1fZnJvbVNvdXJjZSwgbV90b1NvdXJj
ZSwgJlNWR1BhdGhTb3VyY2U6OnBhcnNlTGluZVRvVmVydGljYWxTZWdtZW50KTsKKyAgICBpZiAo
IXJlc3VsdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKCFtX2NvbnN1bWVyKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIG1fY29uc3VtZXItPmxpbmVUb1ZlcnRpY2FsKGJs
ZW5kQW5pbWF0ZWREaW1lbnNvbmFsRmxvYXQoZnJvbVksIHRvWSwgQmxlbmRWZXJ0aWNhbCwgcHJv
Z3Jlc3MpLCBtX2lzSW5GaXJzdEhhbGZPZkFuaW1hdGlvbiA/IG1fZnJvbU1vZGUgOiBtX3RvTW9k
ZSk7Ci0gICAgbV9mcm9tQ3VycmVudFBvaW50LnNldFkobV9mcm9tTW9kZSA9PSBBYnNvbHV0ZUNv
b3JkaW5hdGVzID8gZnJvbVkgOiBtX2Zyb21DdXJyZW50UG9pbnQueSgpICsgZnJvbVkpOwotICAg
IG1fdG9DdXJyZW50UG9pbnQuc2V0WShtX3RvTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8g
dG9ZIDogbV90b0N1cnJlbnRQb2ludC55KCkgKyB0b1kpOworICAgIGF1dG8gW2Zyb20sIHRvXSA9
ICpyZXN1bHQ7CisKKyAgICBtX2NvbnN1bWVyLT5saW5lVG9WZXJ0aWNhbChibGVuZEFuaW1hdGVk
RGltZW5zb25hbEZsb2F0KGZyb20ueSwgdG8ueSwgQmxlbmRWZXJ0aWNhbCwgcHJvZ3Jlc3MpLCBt
X2lzSW5GaXJzdEhhbGZPZkFuaW1hdGlvbiA/IG1fZnJvbU1vZGUgOiBtX3RvTW9kZSk7CisgICAg
bV9mcm9tQ3VycmVudFBvaW50LnNldFkobV9mcm9tTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVz
ID8gZnJvbS55IDogbV9mcm9tQ3VycmVudFBvaW50LnkoKSArIGZyb20ueSk7CisgICAgbV90b0N1
cnJlbnRQb2ludC5zZXRZKG1fdG9Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyB0by55IDog
bV90b0N1cnJlbnRQb2ludC55KCkgKyB0by55KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9v
bCBTVkdQYXRoQmxlbmRlcjo6YmxlbmRDdXJ2ZVRvQ3ViaWNTZWdtZW50KGZsb2F0IHByb2dyZXNz
KQogewotICAgIEZsb2F0UG9pbnQgZnJvbVRhcmdldFBvaW50OwotICAgIEZsb2F0UG9pbnQgZnJv
bVBvaW50MTsKLSAgICBGbG9hdFBvaW50IGZyb21Qb2ludDI7Ci0gICAgRmxvYXRQb2ludCB0b1Rh
cmdldFBvaW50OwotICAgIEZsb2F0UG9pbnQgdG9Qb2ludDE7Ci0gICAgRmxvYXRQb2ludCB0b1Bv
aW50MjsKLSAgICBpZiAoKG1fZnJvbVNvdXJjZS5oYXNNb3JlRGF0YSgpICYmICFtX2Zyb21Tb3Vy
Y2UucGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KGZyb21Qb2ludDEsIGZyb21Qb2ludDIsIGZyb21U
YXJnZXRQb2ludCkpCi0gICAgICAgIHx8ICFtX3RvU291cmNlLnBhcnNlQ3VydmVUb0N1YmljU2Vn
bWVudCh0b1BvaW50MSwgdG9Qb2ludDIsIHRvVGFyZ2V0UG9pbnQpKQorICAgIGF1dG8gcmVzdWx0
ID0gcHVsbEZyb21Tb3VyY2VzKG1fZnJvbVNvdXJjZSwgbV90b1NvdXJjZSwgJlNWR1BhdGhTb3Vy
Y2U6OnBhcnNlQ3VydmVUb0N1YmljU2VnbWVudCk7CisgICAgaWYgKCFyZXN1bHQpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIGlmICghbV9jb25zdW1lcikKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAKLSAgICBtX2NvbnN1bWVyLT5jdXJ2ZVRvQ3ViaWMoYmxlbmRBbmltYXRlZEZsb2F0UG9p
bnQoZnJvbVBvaW50MSwgdG9Qb2ludDEsIHByb2dyZXNzKSwKLSAgICAgICAgYmxlbmRBbmltYXRl
ZEZsb2F0UG9pbnQoZnJvbVBvaW50MiwgdG9Qb2ludDIsIHByb2dyZXNzKSwKLSAgICAgICAgYmxl
bmRBbmltYXRlZEZsb2F0UG9pbnQoZnJvbVRhcmdldFBvaW50LCB0b1RhcmdldFBvaW50LCBwcm9n
cmVzcyksCisgICAgYXV0byBbZnJvbSwgdG9dID0gKnJlc3VsdDsKKworICAgIG1fY29uc3VtZXIt
PmN1cnZlVG9DdWJpYyhibGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tLnBvaW50MSwgdG8ucG9p
bnQxLCBwcm9ncmVzcyksCisgICAgICAgIGJsZW5kQW5pbWF0ZWRGbG9hdFBvaW50KGZyb20ucG9p
bnQyLCB0by5wb2ludDIsIHByb2dyZXNzKSwKKyAgICAgICAgYmxlbmRBbmltYXRlZEZsb2F0UG9p
bnQoZnJvbS50YXJnZXRQb2ludCwgdG8udGFyZ2V0UG9pbnQsIHByb2dyZXNzKSwKICAgICAgICAg
bV9pc0luRmlyc3RIYWxmT2ZBbmltYXRpb24gPyBtX2Zyb21Nb2RlIDogbV90b01vZGUpOwotICAg
IG1fZnJvbUN1cnJlbnRQb2ludCA9IG1fZnJvbU1vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/
IGZyb21UYXJnZXRQb2ludCA6IG1fZnJvbUN1cnJlbnRQb2ludCArIGZyb21UYXJnZXRQb2ludDsK
LSAgICBtX3RvQ3VycmVudFBvaW50ID0gbV90b01vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/
IHRvVGFyZ2V0UG9pbnQgOiBtX3RvQ3VycmVudFBvaW50ICsgdG9UYXJnZXRQb2ludDsKKyAgICBt
X2Zyb21DdXJyZW50UG9pbnQgPSBtX2Zyb21Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyBm
cm9tLnRhcmdldFBvaW50IDogbV9mcm9tQ3VycmVudFBvaW50ICsgZnJvbS50YXJnZXRQb2ludDsK
KyAgICBtX3RvQ3VycmVudFBvaW50ID0gbV90b01vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/
IHRvLnRhcmdldFBvaW50IDogbV90b0N1cnJlbnRQb2ludCArIHRvLnRhcmdldFBvaW50OwogICAg
IHJldHVybiB0cnVlOwogfQogCiBib29sIFNWR1BhdGhCbGVuZGVyOjpibGVuZEN1cnZlVG9DdWJp
Y1Ntb290aFNlZ21lbnQoZmxvYXQgcHJvZ3Jlc3MpCiB7Ci0gICAgRmxvYXRQb2ludCBmcm9tVGFy
Z2V0UG9pbnQ7Ci0gICAgRmxvYXRQb2ludCBmcm9tUG9pbnQyOwotICAgIEZsb2F0UG9pbnQgdG9U
YXJnZXRQb2ludDsKLSAgICBGbG9hdFBvaW50IHRvUG9pbnQyOwotICAgIGlmICgobV9mcm9tU291
cmNlLmhhc01vcmVEYXRhKCkgJiYgIW1fZnJvbVNvdXJjZS5wYXJzZUN1cnZlVG9DdWJpY1Ntb290
aFNlZ21lbnQoZnJvbVBvaW50MiwgZnJvbVRhcmdldFBvaW50KSkKLSAgICAgICAgfHwgIW1fdG9T
b3VyY2UucGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KHRvUG9pbnQyLCB0b1RhcmdldFBv
aW50KSkKKyAgICBhdXRvIHJlc3VsdCA9IHB1bGxGcm9tU291cmNlcyhtX2Zyb21Tb3VyY2UsIG1f
dG9Tb3VyY2UsICZTVkdQYXRoU291cmNlOjpwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQp
OworICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoIW1f
Y29uc3VtZXIpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgbV9jb25zdW1lci0+Y3VydmVU
b0N1YmljU21vb3RoKGJsZW5kQW5pbWF0ZWRGbG9hdFBvaW50KGZyb21Qb2ludDIsIHRvUG9pbnQy
LCBwcm9ncmVzcyksCi0gICAgICAgIGJsZW5kQW5pbWF0ZWRGbG9hdFBvaW50KGZyb21UYXJnZXRQ
b2ludCwgdG9UYXJnZXRQb2ludCwgcHJvZ3Jlc3MpLAorICAgIGF1dG8gW2Zyb20sIHRvXSA9ICpy
ZXN1bHQ7CisKKyAgICBtX2NvbnN1bWVyLT5jdXJ2ZVRvQ3ViaWNTbW9vdGgoYmxlbmRBbmltYXRl
ZEZsb2F0UG9pbnQoZnJvbS5wb2ludDIsIHRvLnBvaW50MiwgcHJvZ3Jlc3MpLAorICAgICAgICBi
bGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tLnRhcmdldFBvaW50LCB0by50YXJnZXRQb2ludCwg
cHJvZ3Jlc3MpLAogICAgICAgICBtX2lzSW5GaXJzdEhhbGZPZkFuaW1hdGlvbiA/IG1fZnJvbU1v
ZGUgOiBtX3RvTW9kZSk7Ci0gICAgbV9mcm9tQ3VycmVudFBvaW50ID0gbV9mcm9tTW9kZSA9PSBB
YnNvbHV0ZUNvb3JkaW5hdGVzID8gZnJvbVRhcmdldFBvaW50IDogbV9mcm9tQ3VycmVudFBvaW50
ICsgZnJvbVRhcmdldFBvaW50OwotICAgIG1fdG9DdXJyZW50UG9pbnQgPSBtX3RvTW9kZSA9PSBB
YnNvbHV0ZUNvb3JkaW5hdGVzID8gdG9UYXJnZXRQb2ludCA6IG1fdG9DdXJyZW50UG9pbnQgKyB0
b1RhcmdldFBvaW50OworICAgIG1fZnJvbUN1cnJlbnRQb2ludCA9IG1fZnJvbU1vZGUgPT0gQWJz
b2x1dGVDb29yZGluYXRlcyA/IGZyb20udGFyZ2V0UG9pbnQgOiBtX2Zyb21DdXJyZW50UG9pbnQg
KyBmcm9tLnRhcmdldFBvaW50OworICAgIG1fdG9DdXJyZW50UG9pbnQgPSBtX3RvTW9kZSA9PSBB
YnNvbHV0ZUNvb3JkaW5hdGVzID8gdG8udGFyZ2V0UG9pbnQgOiBtX3RvQ3VycmVudFBvaW50ICsg
dG8udGFyZ2V0UG9pbnQ7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgU1ZHUGF0aEJsZW5k
ZXI6OmJsZW5kQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQoZmxvYXQgcHJvZ3Jlc3MpCiB7Ci0gICAg
RmxvYXRQb2ludCBmcm9tVGFyZ2V0UG9pbnQ7Ci0gICAgRmxvYXRQb2ludCBmcm9tUG9pbnQxOwot
ICAgIEZsb2F0UG9pbnQgdG9UYXJnZXRQb2ludDsKLSAgICBGbG9hdFBvaW50IHRvUG9pbnQxOwot
ICAgIGlmICgobV9mcm9tU291cmNlLmhhc01vcmVEYXRhKCkgJiYgIW1fZnJvbVNvdXJjZS5wYXJz
ZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KGZyb21Qb2ludDEsIGZyb21UYXJnZXRQb2ludCkpCi0g
ICAgICAgIHx8ICFtX3RvU291cmNlLnBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQodG9Qb2lu
dDEsIHRvVGFyZ2V0UG9pbnQpKQorICAgIGF1dG8gcmVzdWx0ID0gcHVsbEZyb21Tb3VyY2VzKG1f
ZnJvbVNvdXJjZSwgbV90b1NvdXJjZSwgJlNWR1BhdGhTb3VyY2U6OnBhcnNlQ3VydmVUb1F1YWRy
YXRpY1NlZ21lbnQpOworICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICBpZiAoIW1fY29uc3VtZXIpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgbV9jb25z
dW1lci0+Y3VydmVUb1F1YWRyYXRpYyhibGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tUG9pbnQx
LCB0b1BvaW50MSwgcHJvZ3Jlc3MpLAotICAgICAgICBibGVuZEFuaW1hdGVkRmxvYXRQb2ludChm
cm9tVGFyZ2V0UG9pbnQsIHRvVGFyZ2V0UG9pbnQsIHByb2dyZXNzKSwKKyAgICBhdXRvIFtmcm9t
LCB0b10gPSAqcmVzdWx0OworCisgICAgbV9jb25zdW1lci0+Y3VydmVUb1F1YWRyYXRpYyhibGVu
ZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tLnBvaW50MSwgdG8ucG9pbnQxLCBwcm9ncmVzcyksCisg
ICAgICAgIGJsZW5kQW5pbWF0ZWRGbG9hdFBvaW50KGZyb20udGFyZ2V0UG9pbnQsIHRvLnRhcmdl
dFBvaW50LCBwcm9ncmVzcyksCiAgICAgICAgIG1faXNJbkZpcnN0SGFsZk9mQW5pbWF0aW9uID8g
bV9mcm9tTW9kZSA6IG1fdG9Nb2RlKTsKLSAgICBtX2Zyb21DdXJyZW50UG9pbnQgPSBtX2Zyb21N
b2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyBmcm9tVGFyZ2V0UG9pbnQgOiBtX2Zyb21DdXJy
ZW50UG9pbnQgKyBmcm9tVGFyZ2V0UG9pbnQ7Ci0gICAgbV90b0N1cnJlbnRQb2ludCA9IG1fdG9N
b2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyB0b1RhcmdldFBvaW50IDogbV90b0N1cnJlbnRQ
b2ludCArIHRvVGFyZ2V0UG9pbnQ7CisgICAgbV9mcm9tQ3VycmVudFBvaW50ID0gbV9mcm9tTW9k
ZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gZnJvbS50YXJnZXRQb2ludCA6IG1fZnJvbUN1cnJl
bnRQb2ludCArIGZyb20udGFyZ2V0UG9pbnQ7CisgICAgbV90b0N1cnJlbnRQb2ludCA9IG1fdG9N
b2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyB0by50YXJnZXRQb2ludCA6IG1fdG9DdXJyZW50
UG9pbnQgKyB0by50YXJnZXRQb2ludDsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBTVkdQ
YXRoQmxlbmRlcjo6YmxlbmRDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudChmbG9hdCBwcm9n
cmVzcykKIHsKLSAgICBGbG9hdFBvaW50IGZyb21UYXJnZXRQb2ludDsKLSAgICBGbG9hdFBvaW50
IHRvVGFyZ2V0UG9pbnQ7Ci0gICAgaWYgKChtX2Zyb21Tb3VyY2UuaGFzTW9yZURhdGEoKSAmJiAh
bV9mcm9tU291cmNlLnBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQoZnJvbVRhcmdl
dFBvaW50KSkKLSAgICAgICAgfHwgIW1fdG9Tb3VyY2UucGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21v
b3RoU2VnbWVudCh0b1RhcmdldFBvaW50KSkKKyAgICBhdXRvIHJlc3VsdCA9IHB1bGxGcm9tU291
cmNlcyhtX2Zyb21Tb3VyY2UsIG1fdG9Tb3VyY2UsICZTVkdQYXRoU291cmNlOjpwYXJzZUN1cnZl
VG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KTsKKyAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgaWYgKCFtX2NvbnN1bWVyKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
IAotICAgIG1fY29uc3VtZXItPmN1cnZlVG9RdWFkcmF0aWNTbW9vdGgoYmxlbmRBbmltYXRlZEZs
b2F0UG9pbnQoZnJvbVRhcmdldFBvaW50LCB0b1RhcmdldFBvaW50LCBwcm9ncmVzcyksIG1faXNJ
bkZpcnN0SGFsZk9mQW5pbWF0aW9uID8gbV9mcm9tTW9kZSA6IG1fdG9Nb2RlKTsKLSAgICBtX2Zy
b21DdXJyZW50UG9pbnQgPSBtX2Zyb21Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyBmcm9t
VGFyZ2V0UG9pbnQgOiBtX2Zyb21DdXJyZW50UG9pbnQgKyBmcm9tVGFyZ2V0UG9pbnQ7Ci0gICAg
bV90b0N1cnJlbnRQb2ludCA9IG1fdG9Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyB0b1Rh
cmdldFBvaW50IDogbV90b0N1cnJlbnRQb2ludCArIHRvVGFyZ2V0UG9pbnQ7CisgICAgYXV0byBb
ZnJvbSwgdG9dID0gKnJlc3VsdDsKKworICAgIG1fY29uc3VtZXItPmN1cnZlVG9RdWFkcmF0aWNT
bW9vdGgoYmxlbmRBbmltYXRlZEZsb2F0UG9pbnQoZnJvbS50YXJnZXRQb2ludCwgdG8udGFyZ2V0
UG9pbnQsIHByb2dyZXNzKSwgbV9pc0luRmlyc3RIYWxmT2ZBbmltYXRpb24gPyBtX2Zyb21Nb2Rl
IDogbV90b01vZGUpOworICAgIG1fZnJvbUN1cnJlbnRQb2ludCA9IG1fZnJvbU1vZGUgPT0gQWJz
b2x1dGVDb29yZGluYXRlcyA/IGZyb20udGFyZ2V0UG9pbnQgOiBtX2Zyb21DdXJyZW50UG9pbnQg
KyBmcm9tLnRhcmdldFBvaW50OworICAgIG1fdG9DdXJyZW50UG9pbnQgPSBtX3RvTW9kZSA9PSBB
YnNvbHV0ZUNvb3JkaW5hdGVzID8gdG8udGFyZ2V0UG9pbnQgOiBtX3RvQ3VycmVudFBvaW50ICsg
dG8udGFyZ2V0UG9pbnQ7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgU1ZHUGF0aEJsZW5k
ZXI6OmJsZW5kQXJjVG9TZWdtZW50KGZsb2F0IHByb2dyZXNzKQogewotICAgIGZsb2F0IGZyb21S
eCA9IDA7Ci0gICAgZmxvYXQgZnJvbVJ5ID0gMDsKLSAgICBmbG9hdCBmcm9tQW5nbGUgPSAwOwot
ICAgIGJvb2wgZnJvbUxhcmdlQXJjID0gZmFsc2U7Ci0gICAgYm9vbCBmcm9tU3dlZXAgPSBmYWxz
ZTsKLSAgICBGbG9hdFBvaW50IGZyb21UYXJnZXRQb2ludDsKLSAgICBmbG9hdCB0b1J4ID0gMDsK
LSAgICBmbG9hdCB0b1J5ID0gMDsKLSAgICBmbG9hdCB0b0FuZ2xlID0gMDsKLSAgICBib29sIHRv
TGFyZ2VBcmMgPSBmYWxzZTsKLSAgICBib29sIHRvU3dlZXAgPSBmYWxzZTsKLSAgICBGbG9hdFBv
aW50IHRvVGFyZ2V0UG9pbnQ7Ci0gICAgaWYgKChtX2Zyb21Tb3VyY2UuaGFzTW9yZURhdGEoKSAm
JiAhbV9mcm9tU291cmNlLnBhcnNlQXJjVG9TZWdtZW50KGZyb21SeCwgZnJvbVJ5LCBmcm9tQW5n
bGUsIGZyb21MYXJnZUFyYywgZnJvbVN3ZWVwLCBmcm9tVGFyZ2V0UG9pbnQpKQotICAgICAgICB8
fCAhbV90b1NvdXJjZS5wYXJzZUFyY1RvU2VnbWVudCh0b1J4LCB0b1J5LCB0b0FuZ2xlLCB0b0xh
cmdlQXJjLCB0b1N3ZWVwLCB0b1RhcmdldFBvaW50KSkKKyAgICBhdXRvIHJlc3VsdCA9IHB1bGxG
cm9tU291cmNlcyhtX2Zyb21Tb3VyY2UsIG1fdG9Tb3VyY2UsICZTVkdQYXRoU291cmNlOjpwYXJz
ZUFyY1RvU2VnbWVudCk7CisgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIGlmICghbV9jb25zdW1lcikKICAgICAgICAgcmV0dXJuIHRydWU7CiAKKyAgICBhdXRv
IFtmcm9tLCB0b10gPSAqcmVzdWx0OworCiAgICAgaWYgKG1fYWRkVHlwZXNDb3VudCkgewogICAg
ICAgICBBU1NFUlQobV9mcm9tTW9kZSA9PSBtX3RvTW9kZSk7Ci0gICAgICAgIEZsb2F0UG9pbnQg
c2NhbGVkVG9UYXJnZXRQb2ludCA9IHRvVGFyZ2V0UG9pbnQ7CisgICAgICAgIGF1dG8gc2NhbGVk
VG9UYXJnZXRQb2ludCA9IHRvLnRhcmdldFBvaW50OwogICAgICAgICBzY2FsZWRUb1RhcmdldFBv
aW50LnNjYWxlKG1fYWRkVHlwZXNDb3VudCk7Ci0gICAgICAgIG1fY29uc3VtZXItPmFyY1RvKGZy
b21SeCArIHRvUnggKiBtX2FkZFR5cGVzQ291bnQsCi0gICAgICAgICAgICBmcm9tUnkgKyB0b1J5
ICogbV9hZGRUeXBlc0NvdW50LAotICAgICAgICAgICAgZnJvbUFuZ2xlICsgdG9BbmdsZSAqIG1f
YWRkVHlwZXNDb3VudCwKLSAgICAgICAgICAgIGZyb21MYXJnZUFyYyB8fCB0b0xhcmdlQXJjLAot
ICAgICAgICAgICAgZnJvbVN3ZWVwIHx8IHRvU3dlZXAsCi0gICAgICAgICAgICBmcm9tVGFyZ2V0
UG9pbnQgKyBzY2FsZWRUb1RhcmdldFBvaW50LAorICAgICAgICBtX2NvbnN1bWVyLT5hcmNUbyhm
cm9tLnJ4ICsgdG8ucnggKiBtX2FkZFR5cGVzQ291bnQsCisgICAgICAgICAgICBmcm9tLnJ4ICsg
dG8ucnkgKiBtX2FkZFR5cGVzQ291bnQsCisgICAgICAgICAgICBmcm9tLmFuZ2xlICsgdG8uYW5n
bGUgKiBtX2FkZFR5cGVzQ291bnQsCisgICAgICAgICAgICBmcm9tLmxhcmdlQXJjIHx8IHRvLmxh
cmdlQXJjLAorICAgICAgICAgICAgZnJvbS5zd2VlcCB8fCB0by5zd2VlcCwKKyAgICAgICAgICAg
IGZyb20udGFyZ2V0UG9pbnQgKyBzY2FsZWRUb1RhcmdldFBvaW50LAogICAgICAgICAgICAgbV9m
cm9tTW9kZSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgbV9jb25zdW1lci0+YXJjVG8oYmxlbmQo
ZnJvbVJ4LCB0b1J4LCBwcm9ncmVzcyksCi0gICAgICAgICAgICBibGVuZChmcm9tUnksIHRvUnks
IHByb2dyZXNzKSwKLSAgICAgICAgICAgIGJsZW5kKGZyb21BbmdsZSwgdG9BbmdsZSwgcHJvZ3Jl
c3MpLAotICAgICAgICAgICAgbV9pc0luRmlyc3RIYWxmT2ZBbmltYXRpb24gPyBmcm9tTGFyZ2VB
cmMgOiB0b0xhcmdlQXJjLAotICAgICAgICAgICAgbV9pc0luRmlyc3RIYWxmT2ZBbmltYXRpb24g
PyBmcm9tU3dlZXAgOiB0b1N3ZWVwLAotICAgICAgICAgICAgYmxlbmRBbmltYXRlZEZsb2F0UG9p
bnQoZnJvbVRhcmdldFBvaW50LCB0b1RhcmdldFBvaW50LCBwcm9ncmVzcyksCisgICAgICAgIG1f
Y29uc3VtZXItPmFyY1RvKGJsZW5kKGZyb20ucngsIHRvLnJ4LCBwcm9ncmVzcyksCisgICAgICAg
ICAgICBibGVuZChmcm9tLnJ5LCB0by5yeSwgcHJvZ3Jlc3MpLAorICAgICAgICAgICAgYmxlbmQo
ZnJvbS5hbmdsZSwgdG8uYW5nbGUsIHByb2dyZXNzKSwKKyAgICAgICAgICAgIG1faXNJbkZpcnN0
SGFsZk9mQW5pbWF0aW9uID8gZnJvbS5sYXJnZUFyYyA6IHRvLmxhcmdlQXJjLAorICAgICAgICAg
ICAgbV9pc0luRmlyc3RIYWxmT2ZBbmltYXRpb24gPyBmcm9tLnN3ZWVwIDogdG8uc3dlZXAsCisg
ICAgICAgICAgICBibGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tLnRhcmdldFBvaW50LCB0by50
YXJnZXRQb2ludCwgcHJvZ3Jlc3MpLAogICAgICAgICAgICAgbV9pc0luRmlyc3RIYWxmT2ZBbmlt
YXRpb24gPyBtX2Zyb21Nb2RlIDogbV90b01vZGUpOwogICAgIH0KLSAgICBtX2Zyb21DdXJyZW50
UG9pbnQgPSBtX2Zyb21Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyBmcm9tVGFyZ2V0UG9p
bnQgOiBtX2Zyb21DdXJyZW50UG9pbnQgKyBmcm9tVGFyZ2V0UG9pbnQ7Ci0gICAgbV90b0N1cnJl
bnRQb2ludCA9IG1fdG9Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyB0b1RhcmdldFBvaW50
IDogbV90b0N1cnJlbnRQb2ludCArIHRvVGFyZ2V0UG9pbnQ7CisgICAgbV9mcm9tQ3VycmVudFBv
aW50ID0gbV9mcm9tTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gZnJvbS50YXJnZXRQb2lu
dCA6IG1fZnJvbUN1cnJlbnRQb2ludCArIGZyb20udGFyZ2V0UG9pbnQ7CisgICAgbV90b0N1cnJl
bnRQb2ludCA9IG1fdG9Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyB0by50YXJnZXRQb2lu
dCA6IG1fdG9DdXJyZW50UG9pbnQgKyB0by50YXJnZXRQb2ludDsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIApAQCAtMzUwLDIwICszNDgsMjIgQEAgYm9vbCBTVkdQYXRoQmxlbmRlcjo6Y2FuQmxlbmRQ
YXRocygpCiAgICAgZmxvYXQgcHJvZ3Jlc3MgPSAwLjU7CiAgICAgYm9vbCBmcm9tU291cmNlSGFk
RGF0YSA9IG1fZnJvbVNvdXJjZS5oYXNNb3JlRGF0YSgpOwogICAgIHdoaWxlIChtX3RvU291cmNl
Lmhhc01vcmVEYXRhKCkpIHsKLSAgICAgICAgU1ZHUGF0aFNlZ1R5cGUgZnJvbUNvbW1hbmQ7Ci0g
ICAgICAgIFNWR1BhdGhTZWdUeXBlIHRvQ29tbWFuZDsKLSAgICAgICAgaWYgKChmcm9tU291cmNl
SGFkRGF0YSAmJiAhbV9mcm9tU291cmNlLnBhcnNlU1ZHU2VnbWVudFR5cGUoZnJvbUNvbW1hbmQp
KSB8fCAhbV90b1NvdXJjZS5wYXJzZVNWR1NlZ21lbnRUeXBlKHRvQ29tbWFuZCkpCisgICAgICAg
IGF1dG8gZnJvbUNvbW1hbmQgPSBtX2Zyb21Tb3VyY2UucGFyc2VTVkdTZWdtZW50VHlwZSgpOwor
ICAgICAgICBpZiAoZnJvbVNvdXJjZUhhZERhdGEgJiYgIWZyb21Db21tYW5kKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICBhdXRvIHRvQ29tbWFuZCA9IG1fdG9Tb3VyY2UucGFy
c2VTVkdTZWdtZW50VHlwZSgpOworICAgICAgICBpZiAoIXRvQ29tbWFuZCkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgICAgICBtX3RvTW9kZSA9IGNvb3JkaW5hdGVNb2RlT2ZDb21t
YW5kKHRvQ29tbWFuZCk7Ci0gICAgICAgIG1fZnJvbU1vZGUgPSBmcm9tU291cmNlSGFkRGF0YSA/
IGNvb3JkaW5hdGVNb2RlT2ZDb21tYW5kKGZyb21Db21tYW5kKSA6IG1fdG9Nb2RlOworICAgICAg
ICBtX3RvTW9kZSA9IGNvb3JkaW5hdGVNb2RlT2ZDb21tYW5kKCp0b0NvbW1hbmQpOworICAgICAg
ICBtX2Zyb21Nb2RlID0gZnJvbVNvdXJjZUhhZERhdGEgPyBjb29yZGluYXRlTW9kZU9mQ29tbWFu
ZCgqZnJvbUNvbW1hbmQpIDogbV90b01vZGU7CiAgICAgICAgIGlmIChtX2Zyb21Nb2RlICE9IG1f
dG9Nb2RlICYmIG1fYWRkVHlwZXNDb3VudCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgICAgICBpZiAoZnJvbVNvdXJjZUhhZERhdGEgJiYgIWlzU2VnbWVudEVxdWFsKGZyb21Db21t
YW5kLCB0b0NvbW1hbmQsIG1fZnJvbU1vZGUsIG1fdG9Nb2RlKSkKKyAgICAgICAgaWYgKGZyb21T
b3VyY2VIYWREYXRhICYmICFpc1NlZ21lbnRFcXVhbCgqZnJvbUNvbW1hbmQsICp0b0NvbW1hbmQs
IG1fZnJvbU1vZGUsIG1fdG9Nb2RlKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
ICAgICBzd2l0Y2ggKHRvQ29tbWFuZCkgeworICAgICAgICBzd2l0Y2ggKCp0b0NvbW1hbmQpIHsK
ICAgICAgICAgY2FzZSBQYXRoU2VnTW92ZVRvUmVsOgogICAgICAgICBjYXNlIFBhdGhTZWdNb3Zl
VG9BYnM6CiAgICAgICAgICAgICBpZiAoIWJsZW5kTW92ZVRvU2VnbWVudChwcm9ncmVzcykpCkBA
IC00MzMsMTkgKzQzMywyNiBAQCBib29sIFNWR1BhdGhCbGVuZGVyOjpibGVuZEFuaW1hdGVkUGF0
aChmCiAgICAgYm9vbCBmcm9tU291cmNlSGFkRGF0YSA9IG1fZnJvbVNvdXJjZS5oYXNNb3JlRGF0
YSgpOwogICAgIHdoaWxlIChtX3RvU291cmNlLmhhc01vcmVEYXRhKCkpIHsKICAgICAgICAgU1ZH
UGF0aFNlZ1R5cGUgZnJvbUNvbW1hbmQ7Ci0gICAgICAgIFNWR1BhdGhTZWdUeXBlIHRvQ29tbWFu
ZDsKLSAgICAgICAgaWYgKChmcm9tU291cmNlSGFkRGF0YSAmJiAhbV9mcm9tU291cmNlLnBhcnNl
U1ZHU2VnbWVudFR5cGUoZnJvbUNvbW1hbmQpKSB8fCAhbV90b1NvdXJjZS5wYXJzZVNWR1NlZ21l
bnRUeXBlKHRvQ29tbWFuZCkpCisgICAgICAgIGlmIChmcm9tU291cmNlSGFkRGF0YSkgeworICAg
ICAgICAgICAgYXV0byBwYXJzZWRGcm9tQ29tbWFuZCA9IG1fZnJvbVNvdXJjZS5wYXJzZVNWR1Nl
Z21lbnRUeXBlKCk7CisgICAgICAgICAgICBpZiAoIXBhcnNlZEZyb21Db21tYW5kKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGZyb21Db21tYW5kID0gKnBhcnNl
ZEZyb21Db21tYW5kOworICAgICAgICB9CisgICAgICAgIGF1dG8gdG9Db21tYW5kID0gbV90b1Nv
dXJjZS5wYXJzZVNWR1NlZ21lbnRUeXBlKCk7CisgICAgICAgIGlmICghdG9Db21tYW5kKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBTVkdQYXRoU2VnVHlwZSB0b0NvbW1hbmQg
PSAqdG9Db21tYW5kOwogCi0gICAgICAgIG1fdG9Nb2RlID0gY29vcmRpbmF0ZU1vZGVPZkNvbW1h
bmQodG9Db21tYW5kKTsKLSAgICAgICAgbV9mcm9tTW9kZSA9IGZyb21Tb3VyY2VIYWREYXRhID8g
Y29vcmRpbmF0ZU1vZGVPZkNvbW1hbmQoZnJvbUNvbW1hbmQpIDogbV90b01vZGU7CisgICAgICAg
IG1fdG9Nb2RlID0gY29vcmRpbmF0ZU1vZGVPZkNvbW1hbmQoKnRvQ29tbWFuZCk7CisgICAgICAg
IG1fZnJvbU1vZGUgPSBmcm9tU291cmNlSGFkRGF0YSA/IGNvb3JkaW5hdGVNb2RlT2ZDb21tYW5k
KCpmcm9tQ29tbWFuZCkgOiBtX3RvTW9kZTsKICAgICAgICAgaWYgKG1fZnJvbU1vZGUgIT0gbV90
b01vZGUgJiYgbV9hZGRUeXBlc0NvdW50KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgICAgIGlmIChmcm9tU291cmNlSGFkRGF0YSAmJiAhaXNTZWdtZW50RXF1YWwoZnJvbUNvbW1h
bmQsIHRvQ29tbWFuZCwgbV9mcm9tTW9kZSwgbV90b01vZGUpKQorICAgICAgICBpZiAoZnJvbVNv
dXJjZUhhZERhdGEgJiYgIWlzU2VnbWVudEVxdWFsKCpmcm9tQ29tbWFuZCwgKnRvQ29tbWFuZCwg
bV9mcm9tTW9kZSwgbV90b01vZGUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
ICAgIHN3aXRjaCAodG9Db21tYW5kKSB7CisgICAgICAgIHN3aXRjaCAoKnRvQ29tbWFuZCkgewog
ICAgICAgICBjYXNlIFBhdGhTZWdNb3ZlVG9SZWw6CiAgICAgICAgIGNhc2UgUGF0aFNlZ01vdmVU
b0FiczoKICAgICAgICAgICAgIGlmICghYmxlbmRNb3ZlVG9TZWdtZW50KHByb2dyZXNzKSkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3RyZWFtU291cmNlLmNwcAko
cmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3RyZWFt
U291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNzggKzM0LDg2IEBAIGJvb2wgU1ZHUGF0
aEJ5dGVTdHJlYW1Tb3VyY2U6Omhhc01vcmVEYXQKICAgICByZXR1cm4gbV9zdHJlYW1DdXJyZW50
IDwgbV9zdHJlYW1FbmQ7CiB9CiAKLWJvb2wgU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNl
U1ZHU2VnbWVudFR5cGUoU1ZHUGF0aFNlZ1R5cGUmIHBhdGhTZWdUeXBlKQorU1ZHUGF0aFNlZ1R5
cGUgU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6Om5leHRDb21tYW5kKFNWR1BhdGhTZWdUeXBlKQog
ewotICAgIHBhdGhTZWdUeXBlID0gc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ1R5cGU+KHJlYWRTVkdT
ZWdtZW50VHlwZSgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
U1ZHUGF0aFNlZ1R5cGU+KHJlYWRTVkdTZWdtZW50VHlwZSgpKTsKIH0KIAotU1ZHUGF0aFNlZ1R5
cGUgU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6Om5leHRDb21tYW5kKFNWR1BhdGhTZWdUeXBlKQor
T3B0aW9uYWw8U1ZHUGF0aFNlZ1R5cGU+IFNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZVNW
R1NlZ21lbnRUeXBlKCkKIHsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ1R5cGU+
KHJlYWRTVkdTZWdtZW50VHlwZSgpKTsKIH0KIAotYm9vbCBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJj
ZTo6cGFyc2VNb3ZlVG9TZWdtZW50KEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQorT3B0aW9uYWw8
U1ZHUGF0aFNvdXJjZTo6TW92ZVRvU2VnbWVudD4gU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBh
cnNlTW92ZVRvU2VnbWVudCgpCiB7Ci0gICAgdGFyZ2V0UG9pbnQgPSByZWFkRmxvYXRQb2ludCgp
OwotICAgIHJldHVybiB0cnVlOworICAgIE1vdmVUb1NlZ21lbnQgc2VnbWVudDsKKyAgICBzZWdt
ZW50LnRhcmdldFBvaW50ID0gcmVhZEZsb2F0UG9pbnQoKTsKKyAgICByZXR1cm4gc2VnbWVudDsK
IH0KIAotYm9vbCBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VMaW5lVG9TZWdtZW50KEZs
b2F0UG9pbnQmIHRhcmdldFBvaW50KQorT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6TGluZVRvU2Vn
bWVudD4gU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlTGluZVRvU2VnbWVudCgpCiB7Ci0g
ICAgdGFyZ2V0UG9pbnQgPSByZWFkRmxvYXRQb2ludCgpOwotICAgIHJldHVybiB0cnVlOworICAg
IExpbmVUb1NlZ21lbnQgc2VnbWVudDsKKyAgICBzZWdtZW50LnRhcmdldFBvaW50ID0gcmVhZEZs
b2F0UG9pbnQoKTsKKyAgICByZXR1cm4gc2VnbWVudDsKIH0KIAotYm9vbCBTVkdQYXRoQnl0ZVN0
cmVhbVNvdXJjZTo6cGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudChmbG9hdCYgeCkKK09wdGlv
bmFsPFNWR1BhdGhTb3VyY2U6OkxpbmVUb0hvcml6b250YWxTZWdtZW50PiBTVkdQYXRoQnl0ZVN0
cmVhbVNvdXJjZTo6cGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudCgpCiB7Ci0gICAgeCA9IHJl
YWRGbG9hdCgpOwotICAgIHJldHVybiB0cnVlOworICAgIExpbmVUb0hvcml6b250YWxTZWdtZW50
IHNlZ21lbnQ7CisgICAgc2VnbWVudC54ID0gcmVhZEZsb2F0KCk7CisgICAgcmV0dXJuIHNlZ21l
bnQ7CiB9CiAKLWJvb2wgU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlTGluZVRvVmVydGlj
YWxTZWdtZW50KGZsb2F0JiB5KQorT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6TGluZVRvVmVydGlj
YWxTZWdtZW50PiBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VMaW5lVG9WZXJ0aWNhbFNl
Z21lbnQoKQogewotICAgIHkgPSByZWFkRmxvYXQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBM
aW5lVG9WZXJ0aWNhbFNlZ21lbnQgc2VnbWVudDsKKyAgICBzZWdtZW50LnkgPSByZWFkRmxvYXQo
KTsKKyAgICByZXR1cm4gc2VnbWVudDsKIH0KIAotYm9vbCBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJj
ZTo6cGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KEZsb2F0UG9pbnQmIHBvaW50MSwgRmxvYXRQb2lu
dCYgcG9pbnQyLCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCkKK09wdGlvbmFsPFNWR1BhdGhTb3Vy
Y2U6OkN1cnZlVG9DdWJpY1NlZ21lbnQ+IFNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZUN1
cnZlVG9DdWJpY1NlZ21lbnQoKQogewotICAgIHBvaW50MSA9IHJlYWRGbG9hdFBvaW50KCk7Ci0g
ICAgcG9pbnQyID0gcmVhZEZsb2F0UG9pbnQoKTsKLSAgICB0YXJnZXRQb2ludCA9IHJlYWRGbG9h
dFBvaW50KCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgQ3VydmVUb0N1YmljU2VnbWVudCBzZWdt
ZW50OworICAgIHNlZ21lbnQucG9pbnQxID0gcmVhZEZsb2F0UG9pbnQoKTsKKyAgICBzZWdtZW50
LnBvaW50MiA9IHJlYWRGbG9hdFBvaW50KCk7CisgICAgc2VnbWVudC50YXJnZXRQb2ludCA9IHJl
YWRGbG9hdFBvaW50KCk7CisgICAgcmV0dXJuIHNlZ21lbnQ7CiB9CiAKLWJvb2wgU1ZHUGF0aEJ5
dGVTdHJlYW1Tb3VyY2U6OnBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudChGbG9hdFBvaW50
JiBwb2ludDIsIEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQorT3B0aW9uYWw8U1ZHUGF0aFNvdXJj
ZTo6Q3VydmVUb0N1YmljU21vb3RoU2VnbWVudD4gU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBh
cnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudCgpCiB7Ci0gICAgcG9pbnQyID0gcmVhZEZsb2F0
UG9pbnQoKTsKLSAgICB0YXJnZXRQb2ludCA9IHJlYWRGbG9hdFBvaW50KCk7Ci0gICAgcmV0dXJu
IHRydWU7CisgICAgQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudCBzZWdtZW50OworICAgIHNlZ21l
bnQucG9pbnQyID0gcmVhZEZsb2F0UG9pbnQoKTsKKyAgICBzZWdtZW50LnRhcmdldFBvaW50ID0g
cmVhZEZsb2F0UG9pbnQoKTsKKyAgICByZXR1cm4gc2VnbWVudDsKIH0KIAotYm9vbCBTVkdQYXRo
Qnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudChGbG9hdFBvaW50
JiBwb2ludDEsIEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQorT3B0aW9uYWw8U1ZHUGF0aFNvdXJj
ZTo6Q3VydmVUb1F1YWRyYXRpY1NlZ21lbnQ+IFNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJz
ZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KCkKIHsKLSAgICBwb2ludDEgPSByZWFkRmxvYXRQb2lu
dCgpOwotICAgIHRhcmdldFBvaW50ID0gcmVhZEZsb2F0UG9pbnQoKTsKLSAgICByZXR1cm4gdHJ1
ZTsKKyAgICBDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCBzZWdtZW50OworICAgIHNlZ21lbnQucG9p
bnQxID0gcmVhZEZsb2F0UG9pbnQoKTsKKyAgICBzZWdtZW50LnRhcmdldFBvaW50ID0gcmVhZEZs
b2F0UG9pbnQoKTsKKyAgICByZXR1cm4gc2VnbWVudDsKIH0KIAotYm9vbCBTVkdQYXRoQnl0ZVN0
cmVhbVNvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudChGbG9hdFBvaW50
JiB0YXJnZXRQb2ludCkKK09wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkN1cnZlVG9RdWFkcmF0aWNT
bW9vdGhTZWdtZW50PiBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVhZHJh
dGljU21vb3RoU2VnbWVudCgpCiB7Ci0gICAgdGFyZ2V0UG9pbnQgPSByZWFkRmxvYXRQb2ludCgp
OwotICAgIHJldHVybiB0cnVlOworICAgIEN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50IHNl
Z21lbnQ7CisgICAgc2VnbWVudC50YXJnZXRQb2ludCA9IHJlYWRGbG9hdFBvaW50KCk7CisgICAg
cmV0dXJuIHNlZ21lbnQ7CiB9CiAKLWJvb2wgU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNl
QXJjVG9TZWdtZW50KGZsb2F0JiByeCwgZmxvYXQmIHJ5LCBmbG9hdCYgYW5nbGUsIGJvb2wmIGxh
cmdlQXJjLCBib29sJiBzd2VlcCwgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCitPcHRpb25hbDxT
VkdQYXRoU291cmNlOjpBcmNUb1NlZ21lbnQ+IFNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJz
ZUFyY1RvU2VnbWVudCgpCiB7Ci0gICAgcnggPSByZWFkRmxvYXQoKTsKLSAgICByeSA9IHJlYWRG
bG9hdCgpOwotICAgIGFuZ2xlID0gcmVhZEZsb2F0KCk7Ci0gICAgbGFyZ2VBcmMgPSByZWFkRmxh
ZygpOwotICAgIHN3ZWVwID0gcmVhZEZsYWcoKTsKLSAgICB0YXJnZXRQb2ludCA9IHJlYWRGbG9h
dFBvaW50KCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgQXJjVG9TZWdtZW50IHNlZ21lbnQ7Cisg
ICAgc2VnbWVudC5yeCA9IHJlYWRGbG9hdCgpOworICAgIHNlZ21lbnQucnkgPSByZWFkRmxvYXQo
KTsKKyAgICBzZWdtZW50LmFuZ2xlID0gcmVhZEZsb2F0KCk7CisgICAgc2VnbWVudC5sYXJnZUFy
YyA9IHJlYWRGbGFnKCk7CisgICAgc2VnbWVudC5zd2VlcCA9IHJlYWRGbGFnKCk7CisgICAgc2Vn
bWVudC50YXJnZXRQb2ludCA9IHJlYWRGbG9hdFBvaW50KCk7CisgICAgcmV0dXJuIHNlZ21lbnQ7
CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbVNvdXJj
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbVNv
dXJjZS5oCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEJ5
dGVTdHJlYW1Tb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTggKzMyLDE4IEBAIHB1Ymxp
YzoKIHByaXZhdGU6CiAgICAgYm9vbCBoYXNNb3JlRGF0YSgpIGNvbnN0IGZpbmFsOwogICAgIGJv
b2wgbW92ZVRvTmV4dFRva2VuKCkgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQotICAgIGJvb2wgcGFy
c2VTVkdTZWdtZW50VHlwZShTVkdQYXRoU2VnVHlwZSYpIGZpbmFsOwogICAgIFNWR1BhdGhTZWdU
eXBlIG5leHRDb21tYW5kKFNWR1BhdGhTZWdUeXBlKSBmaW5hbDsKIAotICAgIGJvb2wgcGFyc2VN
b3ZlVG9TZWdtZW50KEZsb2F0UG9pbnQmKSBmaW5hbDsKLSAgICBib29sIHBhcnNlTGluZVRvU2Vn
bWVudChGbG9hdFBvaW50JikgZmluYWw7Ci0gICAgYm9vbCBwYXJzZUxpbmVUb0hvcml6b250YWxT
ZWdtZW50KGZsb2F0JikgZmluYWw7Ci0gICAgYm9vbCBwYXJzZUxpbmVUb1ZlcnRpY2FsU2VnbWVu
dChmbG9hdCYpIGZpbmFsOwotICAgIGJvb2wgcGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KEZsb2F0
UG9pbnQmLCBGbG9hdFBvaW50JiwgRmxvYXRQb2ludCYpIGZpbmFsOwotICAgIGJvb2wgcGFyc2VD
dXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KEZsb2F0UG9pbnQmLCBGbG9hdFBvaW50JikgZmluYWw7
Ci0gICAgYm9vbCBwYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KEZsb2F0UG9pbnQmLCBGbG9h
dFBvaW50JikgZmluYWw7Ci0gICAgYm9vbCBwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdt
ZW50KEZsb2F0UG9pbnQmKSBmaW5hbDsKLSAgICBib29sIHBhcnNlQXJjVG9TZWdtZW50KGZsb2F0
JiwgZmxvYXQmLCBmbG9hdCYsIGJvb2wmLCBib29sJiwgRmxvYXRQb2ludCYpIGZpbmFsOworICAg
IE9wdGlvbmFsPFNWR1BhdGhTZWdUeXBlPiBwYXJzZVNWR1NlZ21lbnRUeXBlKCkgZmluYWw7Cisg
ICAgT3B0aW9uYWw8TW92ZVRvU2VnbWVudD4gcGFyc2VNb3ZlVG9TZWdtZW50KCkgZmluYWw7Cisg
ICAgT3B0aW9uYWw8TGluZVRvU2VnbWVudD4gcGFyc2VMaW5lVG9TZWdtZW50KCkgZmluYWw7Cisg
ICAgT3B0aW9uYWw8TGluZVRvSG9yaXpvbnRhbFNlZ21lbnQ+IHBhcnNlTGluZVRvSG9yaXpvbnRh
bFNlZ21lbnQoKSBmaW5hbDsKKyAgICBPcHRpb25hbDxMaW5lVG9WZXJ0aWNhbFNlZ21lbnQ+IHBh
cnNlTGluZVRvVmVydGljYWxTZWdtZW50KCkgZmluYWw7CisgICAgT3B0aW9uYWw8Q3VydmVUb0N1
YmljU2VnbWVudD4gcGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KCkgZmluYWw7CisgICAgT3B0aW9u
YWw8Q3VydmVUb0N1YmljU21vb3RoU2VnbWVudD4gcGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdt
ZW50KCkgZmluYWw7CisgICAgT3B0aW9uYWw8Q3VydmVUb1F1YWRyYXRpY1NlZ21lbnQ+IHBhcnNl
Q3VydmVUb1F1YWRyYXRpY1NlZ21lbnQoKSBmaW5hbDsKKyAgICBPcHRpb25hbDxDdXJ2ZVRvUXVh
ZHJhdGljU21vb3RoU2VnbWVudD4gcGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudCgp
IGZpbmFsOworICAgIE9wdGlvbmFsPEFyY1RvU2VnbWVudD4gcGFyc2VBcmNUb1NlZ21lbnQoKSBm
aW5hbDsKIAogI2lmIENPTVBJTEVSKE1TVkMpCiAjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDcw
MSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoUGFyc2VyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFBhcnNlci5jcHAJKHJldmlzaW9uIDI2MzE3
NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoUGFyc2VyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzMsMTAyICs3Myw5OSBAQCB2b2lkIFNWR1BhdGhQYXJzZXI6OnBhcnNlQ2xvc2VQYXRo
U2VnbWVuCiAKIGJvb2wgU1ZHUGF0aFBhcnNlcjo6cGFyc2VNb3ZlVG9TZWdtZW50KCkKIHsKLSAg
ICBGbG9hdFBvaW50IHRhcmdldFBvaW50OwotICAgIGlmICghbV9zb3VyY2UucGFyc2VNb3ZlVG9T
ZWdtZW50KHRhcmdldFBvaW50KSkKKyAgICBhdXRvIHJlc3VsdCA9IG1fc291cmNlLnBhcnNlTW92
ZVRvU2VnbWVudCgpOworICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICBpZiAobV9wYXRoUGFyc2luZ01vZGUgPT0gTm9ybWFsaXplZFBhcnNpbmcpIHsKICAgICAg
ICAgaWYgKG1fbW9kZSA9PSBSZWxhdGl2ZUNvb3JkaW5hdGVzKQotICAgICAgICAgICAgbV9jdXJy
ZW50UG9pbnQgKz0gdGFyZ2V0UG9pbnQ7CisgICAgICAgICAgICBtX2N1cnJlbnRQb2ludCArPSBy
ZXN1bHQtPnRhcmdldFBvaW50OwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2N1cnJlbnRQ
b2ludCA9IHRhcmdldFBvaW50OworICAgICAgICAgICAgbV9jdXJyZW50UG9pbnQgPSByZXN1bHQt
PnRhcmdldFBvaW50OwogICAgICAgICBtX3N1YlBhdGhQb2ludCA9IG1fY3VycmVudFBvaW50Owog
ICAgICAgICBtX2NvbnN1bWVyLm1vdmVUbyhtX2N1cnJlbnRQb2ludCwgbV9jbG9zZVBhdGgsIEFi
c29sdXRlQ29vcmRpbmF0ZXMpOwogICAgIH0gZWxzZQotICAgICAgICBtX2NvbnN1bWVyLm1vdmVU
byh0YXJnZXRQb2ludCwgbV9jbG9zZVBhdGgsIG1fbW9kZSk7CisgICAgICAgIG1fY29uc3VtZXIu
bW92ZVRvKHJlc3VsdC0+dGFyZ2V0UG9pbnQsIG1fY2xvc2VQYXRoLCBtX21vZGUpOwogICAgIG1f
Y2xvc2VQYXRoID0gZmFsc2U7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgU1ZHUGF0aFBh
cnNlcjo6cGFyc2VMaW5lVG9TZWdtZW50KCkKIHsKLSAgICBGbG9hdFBvaW50IHRhcmdldFBvaW50
OwotICAgIGlmICghbV9zb3VyY2UucGFyc2VMaW5lVG9TZWdtZW50KHRhcmdldFBvaW50KSkKKyAg
ICBhdXRvIHJlc3VsdCA9IG1fc291cmNlLnBhcnNlTGluZVRvU2VnbWVudCgpOworICAgIGlmICgh
cmVzdWx0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAobV9wYXRoUGFyc2luZ01v
ZGUgPT0gTm9ybWFsaXplZFBhcnNpbmcpIHsKICAgICAgICAgaWYgKG1fbW9kZSA9PSBSZWxhdGl2
ZUNvb3JkaW5hdGVzKQotICAgICAgICAgICAgbV9jdXJyZW50UG9pbnQgKz0gdGFyZ2V0UG9pbnQ7
CisgICAgICAgICAgICBtX2N1cnJlbnRQb2ludCArPSByZXN1bHQtPnRhcmdldFBvaW50OwogICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBtX2N1cnJlbnRQb2ludCA9IHRhcmdldFBvaW50OworICAg
ICAgICAgICAgbV9jdXJyZW50UG9pbnQgPSByZXN1bHQtPnRhcmdldFBvaW50OwogICAgICAgICBt
X2NvbnN1bWVyLmxpbmVUbyhtX2N1cnJlbnRQb2ludCwgQWJzb2x1dGVDb29yZGluYXRlcyk7CiAg
ICAgfSBlbHNlCi0gICAgICAgIG1fY29uc3VtZXIubGluZVRvKHRhcmdldFBvaW50LCBtX21vZGUp
OworICAgICAgICBtX2NvbnN1bWVyLmxpbmVUbyhyZXN1bHQtPnRhcmdldFBvaW50LCBtX21vZGUp
OwogICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIFNWR1BhdGhQYXJzZXI6OnBhcnNlTGluZVRv
SG9yaXpvbnRhbFNlZ21lbnQoKQogewotICAgIGZsb2F0IHRvWDsKLSAgICBpZiAoIW1fc291cmNl
LnBhcnNlTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQodG9YKSkKKyAgICBhdXRvIHJlc3VsdCA9IG1f
c291cmNlLnBhcnNlTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQoKTsKKyAgICBpZiAoIXJlc3VsdCkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKG1fcGF0aFBhcnNpbmdNb2RlID09IE5v
cm1hbGl6ZWRQYXJzaW5nKSB7CiAgICAgICAgIGlmIChtX21vZGUgPT0gUmVsYXRpdmVDb29yZGlu
YXRlcykKLSAgICAgICAgICAgIG1fY3VycmVudFBvaW50Lm1vdmUodG9YLCAwKTsKKyAgICAgICAg
ICAgIG1fY3VycmVudFBvaW50Lm1vdmUocmVzdWx0LT54LCAwKTsKICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgbV9jdXJyZW50UG9pbnQuc2V0WCh0b1gpOworICAgICAgICAgICAgbV9jdXJyZW50
UG9pbnQuc2V0WChyZXN1bHQtPngpOwogICAgICAgICBtX2NvbnN1bWVyLmxpbmVUbyhtX2N1cnJl
bnRQb2ludCwgQWJzb2x1dGVDb29yZGluYXRlcyk7CiAgICAgfSBlbHNlCi0gICAgICAgIG1fY29u
c3VtZXIubGluZVRvSG9yaXpvbnRhbCh0b1gsIG1fbW9kZSk7CisgICAgICAgIG1fY29uc3VtZXIu
bGluZVRvSG9yaXpvbnRhbChyZXN1bHQtPngsIG1fbW9kZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKIGJvb2wgU1ZHUGF0aFBhcnNlcjo6cGFyc2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnQoKQogewot
ICAgIGZsb2F0IHRvWTsKLSAgICBpZiAoIW1fc291cmNlLnBhcnNlTGluZVRvVmVydGljYWxTZWdt
ZW50KHRvWSkpCisgICAgYXV0byByZXN1bHQgPSBtX3NvdXJjZS5wYXJzZUxpbmVUb1ZlcnRpY2Fs
U2VnbWVudCgpOworICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICBpZiAobV9wYXRoUGFyc2luZ01vZGUgPT0gTm9ybWFsaXplZFBhcnNpbmcpIHsKICAgICAgICAg
aWYgKG1fbW9kZSA9PSBSZWxhdGl2ZUNvb3JkaW5hdGVzKQotICAgICAgICAgICAgbV9jdXJyZW50
UG9pbnQubW92ZSgwLCB0b1kpOworICAgICAgICAgICAgbV9jdXJyZW50UG9pbnQubW92ZSgwLCBy
ZXN1bHQtPnkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2N1cnJlbnRQb2ludC5zZXRZ
KHRvWSk7CisgICAgICAgICAgICBtX2N1cnJlbnRQb2ludC5zZXRZKHJlc3VsdC0+eSk7CiAgICAg
ICAgIG1fY29uc3VtZXIubGluZVRvKG1fY3VycmVudFBvaW50LCBBYnNvbHV0ZUNvb3JkaW5hdGVz
KTsKICAgICB9IGVsc2UKLSAgICAgICAgbV9jb25zdW1lci5saW5lVG9WZXJ0aWNhbCh0b1ksIG1f
bW9kZSk7CisgICAgICAgIG1fY29uc3VtZXIubGluZVRvVmVydGljYWwocmVzdWx0LT55LCBtX21v
ZGUpOwogICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIFNWR1BhdGhQYXJzZXI6OnBhcnNlQ3Vy
dmVUb0N1YmljU2VnbWVudCgpCiB7Ci0gICAgRmxvYXRQb2ludCBwb2ludDE7Ci0gICAgRmxvYXRQ
b2ludCBwb2ludDI7Ci0gICAgRmxvYXRQb2ludCB0YXJnZXRQb2ludDsKLSAgICBpZiAoIW1fc291
cmNlLnBhcnNlQ3VydmVUb0N1YmljU2VnbWVudChwb2ludDEsIHBvaW50MiwgdGFyZ2V0UG9pbnQp
KQorICAgIGF1dG8gcmVzdWx0ID0gbV9zb3VyY2UucGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KCk7
CisgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChtX3Bh
dGhQYXJzaW5nTW9kZSA9PSBOb3JtYWxpemVkUGFyc2luZykgewogICAgICAgICBpZiAobV9tb2Rl
ID09IFJlbGF0aXZlQ29vcmRpbmF0ZXMpIHsKLSAgICAgICAgICAgIHBvaW50MSArPSBtX2N1cnJl
bnRQb2ludDsKLSAgICAgICAgICAgIHBvaW50MiArPSBtX2N1cnJlbnRQb2ludDsKLSAgICAgICAg
ICAgIHRhcmdldFBvaW50ICs9IG1fY3VycmVudFBvaW50OworICAgICAgICAgICAgcmVzdWx0LT5w
b2ludDEgKz0gbV9jdXJyZW50UG9pbnQ7CisgICAgICAgICAgICByZXN1bHQtPnBvaW50MiArPSBt
X2N1cnJlbnRQb2ludDsKKyAgICAgICAgICAgIHJlc3VsdC0+dGFyZ2V0UG9pbnQgKz0gbV9jdXJy
ZW50UG9pbnQ7CiAgICAgICAgIH0KLSAgICAgICAgbV9jb25zdW1lci5jdXJ2ZVRvQ3ViaWMocG9p
bnQxLCBwb2ludDIsIHRhcmdldFBvaW50LCBBYnNvbHV0ZUNvb3JkaW5hdGVzKTsKKyAgICAgICAg
bV9jb25zdW1lci5jdXJ2ZVRvQ3ViaWMocmVzdWx0LT5wb2ludDEsIHJlc3VsdC0+cG9pbnQyLCBy
ZXN1bHQtPnRhcmdldFBvaW50LCBBYnNvbHV0ZUNvb3JkaW5hdGVzKTsKIAotICAgICAgICBtX2Nv
bnRyb2xQb2ludCA9IHBvaW50MjsKLSAgICAgICAgbV9jdXJyZW50UG9pbnQgPSB0YXJnZXRQb2lu
dDsKKyAgICAgICAgbV9jb250cm9sUG9pbnQgPSByZXN1bHQtPnBvaW50MjsKKyAgICAgICAgbV9j
dXJyZW50UG9pbnQgPSByZXN1bHQtPnRhcmdldFBvaW50OwogICAgIH0gZWxzZQotICAgICAgICBt
X2NvbnN1bWVyLmN1cnZlVG9DdWJpYyhwb2ludDEsIHBvaW50MiwgdGFyZ2V0UG9pbnQsIG1fbW9k
ZSk7CisgICAgICAgIG1fY29uc3VtZXIuY3VydmVUb0N1YmljKHJlc3VsdC0+cG9pbnQxLCByZXN1
bHQtPnBvaW50MiwgcmVzdWx0LT50YXJnZXRQb2ludCwgbV9tb2RlKTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAogYm9vbCBTVkdQYXRoUGFyc2VyOjpwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21l
bnQoKQogewotICAgIEZsb2F0UG9pbnQgcG9pbnQyOwotICAgIEZsb2F0UG9pbnQgdGFyZ2V0UG9p
bnQ7Ci0gICAgaWYgKCFtX3NvdXJjZS5wYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQocG9p
bnQyLCB0YXJnZXRQb2ludCkpCisgICAgYXV0byByZXN1bHQgPSBtX3NvdXJjZS5wYXJzZUN1cnZl
VG9DdWJpY1Ntb290aFNlZ21lbnQoKTsKKyAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgaWYgKG1fbGFzdENvbW1hbmQgIT0gUGF0aFNlZ0N1cnZlVG9DdWJpY0Fi
cwpAQCAtMTgyLDUzICsxNzksNTMgQEAgYm9vbCBTVkdQYXRoUGFyc2VyOjpwYXJzZUN1cnZlVG9D
dWJpY1NtbwogICAgICAgICBwb2ludDEuc2NhbGUoMik7CiAgICAgICAgIHBvaW50MS5tb3ZlKC1t
X2NvbnRyb2xQb2ludC54KCksIC1tX2NvbnRyb2xQb2ludC55KCkpOwogICAgICAgICBpZiAobV9t
b2RlID09IFJlbGF0aXZlQ29vcmRpbmF0ZXMpIHsKLSAgICAgICAgICAgIHBvaW50MiArPSBtX2N1
cnJlbnRQb2ludDsKLSAgICAgICAgICAgIHRhcmdldFBvaW50ICs9IG1fY3VycmVudFBvaW50Owor
ICAgICAgICAgICAgcmVzdWx0LT5wb2ludDIgKz0gbV9jdXJyZW50UG9pbnQ7CisgICAgICAgICAg
ICByZXN1bHQtPnRhcmdldFBvaW50ICs9IG1fY3VycmVudFBvaW50OwogICAgICAgICB9CiAKLSAg
ICAgICAgbV9jb25zdW1lci5jdXJ2ZVRvQ3ViaWMocG9pbnQxLCBwb2ludDIsIHRhcmdldFBvaW50
LCBBYnNvbHV0ZUNvb3JkaW5hdGVzKTsKKyAgICAgICAgbV9jb25zdW1lci5jdXJ2ZVRvQ3ViaWMo
cG9pbnQxLCByZXN1bHQtPnBvaW50MiwgcmVzdWx0LT50YXJnZXRQb2ludCwgQWJzb2x1dGVDb29y
ZGluYXRlcyk7CiAKLSAgICAgICAgbV9jb250cm9sUG9pbnQgPSBwb2ludDI7Ci0gICAgICAgIG1f
Y3VycmVudFBvaW50ID0gdGFyZ2V0UG9pbnQ7CisgICAgICAgIG1fY29udHJvbFBvaW50ID0gcmVz
dWx0LT5wb2ludDI7CisgICAgICAgIG1fY3VycmVudFBvaW50ID0gcmVzdWx0LT50YXJnZXRQb2lu
dDsKICAgICB9IGVsc2UKLSAgICAgICAgbV9jb25zdW1lci5jdXJ2ZVRvQ3ViaWNTbW9vdGgocG9p
bnQyLCB0YXJnZXRQb2ludCwgbV9tb2RlKTsKKyAgICAgICAgbV9jb25zdW1lci5jdXJ2ZVRvQ3Vi
aWNTbW9vdGgocmVzdWx0LT5wb2ludDIsIHJlc3VsdC0+dGFyZ2V0UG9pbnQsIG1fbW9kZSk7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgU1ZHUGF0aFBhcnNlcjo6cGFyc2VDdXJ2ZVRvUXVh
ZHJhdGljU2VnbWVudCgpCiB7Ci0gICAgRmxvYXRQb2ludCBwb2ludDE7Ci0gICAgRmxvYXRQb2lu
dCB0YXJnZXRQb2ludDsKLSAgICBpZiAoIW1fc291cmNlLnBhcnNlQ3VydmVUb1F1YWRyYXRpY1Nl
Z21lbnQocG9pbnQxLCB0YXJnZXRQb2ludCkpCisgICAgYXV0byByZXN1bHQgPSBtX3NvdXJjZS5w
YXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KCk7CisgICAgaWYgKCFyZXN1bHQpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIGlmIChtX3BhdGhQYXJzaW5nTW9kZSA9PSBOb3JtYWxpemVk
UGFyc2luZykgewotICAgICAgICBtX2NvbnRyb2xQb2ludCA9IHBvaW50MTsKKyAgICAgICAgbV9j
b250cm9sUG9pbnQgPSByZXN1bHQtPnBvaW50MTsKKwogICAgICAgICBGbG9hdFBvaW50IHBvaW50
MSA9IG1fY3VycmVudFBvaW50OwogICAgICAgICBwb2ludDEubW92ZSgyICogbV9jb250cm9sUG9p
bnQueCgpLCAyICogbV9jb250cm9sUG9pbnQueSgpKTsKLSAgICAgICAgRmxvYXRQb2ludCBwb2lu
dDIodGFyZ2V0UG9pbnQueCgpICsgMiAqIG1fY29udHJvbFBvaW50LngoKSwgdGFyZ2V0UG9pbnQu
eSgpICsgMiAqIG1fY29udHJvbFBvaW50LnkoKSk7CisgICAgICAgIEZsb2F0UG9pbnQgcG9pbnQy
KHJlc3VsdC0+dGFyZ2V0UG9pbnQueCgpICsgMiAqIG1fY29udHJvbFBvaW50LngoKSwgcmVzdWx0
LT50YXJnZXRQb2ludC55KCkgKyAyICogbV9jb250cm9sUG9pbnQueSgpKTsKICAgICAgICAgaWYg
KG1fbW9kZSA9PSBSZWxhdGl2ZUNvb3JkaW5hdGVzKSB7CiAgICAgICAgICAgICBwb2ludDEubW92
ZSgyICogbV9jdXJyZW50UG9pbnQueCgpLCAyICogbV9jdXJyZW50UG9pbnQueSgpKTsKICAgICAg
ICAgICAgIHBvaW50Mi5tb3ZlKDMgKiBtX2N1cnJlbnRQb2ludC54KCksIDMgKiBtX2N1cnJlbnRQ
b2ludC55KCkpOwotICAgICAgICAgICAgdGFyZ2V0UG9pbnQgKz0gbV9jdXJyZW50UG9pbnQ7Cisg
ICAgICAgICAgICByZXN1bHQtPnRhcmdldFBvaW50ICs9IG1fY3VycmVudFBvaW50OwogICAgICAg
ICB9CiAgICAgICAgIHBvaW50MS5zY2FsZShnT25lT3ZlclRocmVlKTsKICAgICAgICAgcG9pbnQy
LnNjYWxlKGdPbmVPdmVyVGhyZWUpOwogCi0gICAgICAgIG1fY29uc3VtZXIuY3VydmVUb0N1Ymlj
KHBvaW50MSwgcG9pbnQyLCB0YXJnZXRQb2ludCwgQWJzb2x1dGVDb29yZGluYXRlcyk7CisgICAg
ICAgIG1fY29uc3VtZXIuY3VydmVUb0N1YmljKHBvaW50MSwgcG9pbnQyLCByZXN1bHQtPnRhcmdl
dFBvaW50LCBBYnNvbHV0ZUNvb3JkaW5hdGVzKTsKIAogICAgICAgICBpZiAobV9tb2RlID09IFJl
bGF0aXZlQ29vcmRpbmF0ZXMpCiAgICAgICAgICAgICBtX2NvbnRyb2xQb2ludCArPSBtX2N1cnJl
bnRQb2ludDsKLSAgICAgICAgbV9jdXJyZW50UG9pbnQgPSB0YXJnZXRQb2ludDsKKyAgICAgICAg
bV9jdXJyZW50UG9pbnQgPSByZXN1bHQtPnRhcmdldFBvaW50OwogICAgIH0gZWxzZQotICAgICAg
ICBtX2NvbnN1bWVyLmN1cnZlVG9RdWFkcmF0aWMocG9pbnQxLCB0YXJnZXRQb2ludCwgbV9tb2Rl
KTsKKyAgICAgICAgbV9jb25zdW1lci5jdXJ2ZVRvUXVhZHJhdGljKHJlc3VsdC0+cG9pbnQxLCBy
ZXN1bHQtPnRhcmdldFBvaW50LCBtX21vZGUpOwogICAgIHJldHVybiB0cnVlOwogfQogCiBib29s
IFNWR1BhdGhQYXJzZXI6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQoKQogewot
ICAgIEZsb2F0UG9pbnQgdGFyZ2V0UG9pbnQ7Ci0gICAgaWYgKCFtX3NvdXJjZS5wYXJzZUN1cnZl
VG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KHRhcmdldFBvaW50KSkKKyAgICBhdXRvIHJlc3VsdCA9
IG1fc291cmNlLnBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQoKTsKKyAgICBpZiAo
IXJlc3VsdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKG1fbGFzdENvbW1hbmQg
IT0gUGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNBYnMKQEAgLTI0Miw2NyArMjM5LDYyIEBAIGJvb2wg
U1ZHUGF0aFBhcnNlcjo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGkKICAgICAgICAgY3ViaWNQb2ludC5z
Y2FsZSgyKTsKICAgICAgICAgY3ViaWNQb2ludC5tb3ZlKC1tX2NvbnRyb2xQb2ludC54KCksIC1t
X2NvbnRyb2xQb2ludC55KCkpOwogICAgICAgICBGbG9hdFBvaW50IHBvaW50MShtX2N1cnJlbnRQ
b2ludC54KCkgKyAyICogY3ViaWNQb2ludC54KCksIG1fY3VycmVudFBvaW50LnkoKSArIDIgKiBj
dWJpY1BvaW50LnkoKSk7Ci0gICAgICAgIEZsb2F0UG9pbnQgcG9pbnQyKHRhcmdldFBvaW50Lngo
KSArIDIgKiBjdWJpY1BvaW50LngoKSwgdGFyZ2V0UG9pbnQueSgpICsgMiAqIGN1YmljUG9pbnQu
eSgpKTsKKyAgICAgICAgRmxvYXRQb2ludCBwb2ludDIocmVzdWx0LT50YXJnZXRQb2ludC54KCkg
KyAyICogY3ViaWNQb2ludC54KCksIHJlc3VsdC0+dGFyZ2V0UG9pbnQueSgpICsgMiAqIGN1Ymlj
UG9pbnQueSgpKTsKICAgICAgICAgaWYgKG1fbW9kZSA9PSBSZWxhdGl2ZUNvb3JkaW5hdGVzKSB7
CiAgICAgICAgICAgICBwb2ludDIgKz0gbV9jdXJyZW50UG9pbnQ7Ci0gICAgICAgICAgICB0YXJn
ZXRQb2ludCArPSBtX2N1cnJlbnRQb2ludDsKKyAgICAgICAgICAgIHJlc3VsdC0+dGFyZ2V0UG9p
bnQgKz0gbV9jdXJyZW50UG9pbnQ7CiAgICAgICAgIH0KICAgICAgICAgcG9pbnQxLnNjYWxlKGdP
bmVPdmVyVGhyZWUpOwogICAgICAgICBwb2ludDIuc2NhbGUoZ09uZU92ZXJUaHJlZSk7CiAKLSAg
ICAgICAgbV9jb25zdW1lci5jdXJ2ZVRvQ3ViaWMocG9pbnQxLCBwb2ludDIsIHRhcmdldFBvaW50
LCBBYnNvbHV0ZUNvb3JkaW5hdGVzKTsKKyAgICAgICAgbV9jb25zdW1lci5jdXJ2ZVRvQ3ViaWMo
cG9pbnQxLCBwb2ludDIsIHJlc3VsdC0+dGFyZ2V0UG9pbnQsIEFic29sdXRlQ29vcmRpbmF0ZXMp
OwogCiAgICAgICAgIG1fY29udHJvbFBvaW50ID0gY3ViaWNQb2ludDsKLSAgICAgICAgbV9jdXJy
ZW50UG9pbnQgPSB0YXJnZXRQb2ludDsKKyAgICAgICAgbV9jdXJyZW50UG9pbnQgPSByZXN1bHQt
PnRhcmdldFBvaW50OwogICAgIH0gZWxzZQotICAgICAgICBtX2NvbnN1bWVyLmN1cnZlVG9RdWFk
cmF0aWNTbW9vdGgodGFyZ2V0UG9pbnQsIG1fbW9kZSk7CisgICAgICAgIG1fY29uc3VtZXIuY3Vy
dmVUb1F1YWRyYXRpY1Ntb290aChyZXN1bHQtPnRhcmdldFBvaW50LCBtX21vZGUpOwogICAgIHJl
dHVybiB0cnVlOwogfQogCiBib29sIFNWR1BhdGhQYXJzZXI6OnBhcnNlQXJjVG9TZWdtZW50KCkK
IHsKLSAgICBmbG9hdCByeDsKLSAgICBmbG9hdCByeTsKLSAgICBmbG9hdCBhbmdsZTsKLSAgICBi
b29sIGxhcmdlQXJjOwotICAgIGJvb2wgc3dlZXA7Ci0gICAgRmxvYXRQb2ludCB0YXJnZXRQb2lu
dDsKLSAgICBpZiAoIW1fc291cmNlLnBhcnNlQXJjVG9TZWdtZW50KHJ4LCByeSwgYW5nbGUsIGxh
cmdlQXJjLCBzd2VlcCwgdGFyZ2V0UG9pbnQpKQorICAgIGF1dG8gcmVzdWx0ID0gbV9zb3VyY2Uu
cGFyc2VBcmNUb1NlZ21lbnQoKTsKKyAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgLy8gSWYgcnggPSAwIG9yIHJ5ID0gMCB0aGVuIHRoaXMgYXJjIGlzIHRyZWF0
ZWQgYXMgYSBzdHJhaWdodCBsaW5lIHNlZ21lbnQgKGEgImxpbmV0byIpIGpvaW5pbmcgdGhlIGVu
ZHBvaW50cy4KICAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcvaW1wbG5vdGUuaHRtbCNB
cmNPdXRPZlJhbmdlUGFyYW1ldGVycwogICAgIC8vIElmIHRoZSBjdXJyZW50IHBvaW50IGFuZCB0
YXJnZXQgcG9pbnQgZm9yIHRoZSBhcmMgYXJlIGlkZW50aWNhbCwgaXQgc2hvdWxkIGJlIHRyZWF0
ZWQgYXMgYSB6ZXJvIGxlbmd0aAogICAgIC8vIHBhdGguIFRoaXMgZW5zdXJlcyBjb250aW51aXR5
IGluIGFuaW1hdGlvbnMuCi0gICAgcnggPSBmYWJzZihyeCk7Ci0gICAgcnkgPSBmYWJzZihyeSk7
CisgICAgcmVzdWx0LT5yeCA9IGZhYnNmKHJlc3VsdC0+cngpOworICAgIHJlc3VsdC0+cnkgPSBm
YWJzZihyZXN1bHQtPnJ5KTsKICAgICBib29sIGFyY0lzWmVyb0xlbmd0aCA9IGZhbHNlOwogICAg
IGlmIChtX3BhdGhQYXJzaW5nTW9kZSA9PSBOb3JtYWxpemVkUGFyc2luZykgewogICAgICAgICBp
ZiAobV9tb2RlID09IFJlbGF0aXZlQ29vcmRpbmF0ZXMpCi0gICAgICAgICAgICBhcmNJc1plcm9M
ZW5ndGggPSB0YXJnZXRQb2ludCA9PSBGbG9hdFBvaW50Ojp6ZXJvKCk7CisgICAgICAgICAgICBh
cmNJc1plcm9MZW5ndGggPSByZXN1bHQtPnRhcmdldFBvaW50ID09IEZsb2F0UG9pbnQ6Onplcm8o
KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgYXJjSXNaZXJvTGVuZ3RoID0gdGFyZ2V0UG9p
bnQgPT0gbV9jdXJyZW50UG9pbnQ7CisgICAgICAgICAgICBhcmNJc1plcm9MZW5ndGggPSByZXN1
bHQtPnRhcmdldFBvaW50ID09IG1fY3VycmVudFBvaW50OwogICAgIH0KLSAgICBpZiAoIXJ4IHx8
ICFyeSB8fCBhcmNJc1plcm9MZW5ndGgpIHsKKyAgICBpZiAoIXJlc3VsdC0+cnggfHwgIXJlc3Vs
dC0+cnkgfHwgYXJjSXNaZXJvTGVuZ3RoKSB7CiAgICAgICAgIGlmIChtX3BhdGhQYXJzaW5nTW9k
ZSA9PSBOb3JtYWxpemVkUGFyc2luZykgewogICAgICAgICAgICAgaWYgKG1fbW9kZSA9PSBSZWxh
dGl2ZUNvb3JkaW5hdGVzKQotICAgICAgICAgICAgICAgIG1fY3VycmVudFBvaW50ICs9IHRhcmdl
dFBvaW50OworICAgICAgICAgICAgICAgIG1fY3VycmVudFBvaW50ICs9IHJlc3VsdC0+dGFyZ2V0
UG9pbnQ7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9jdXJyZW50UG9pbnQg
PSB0YXJnZXRQb2ludDsKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRQb2ludCA9IHJlc3VsdC0+
dGFyZ2V0UG9pbnQ7CiAgICAgICAgICAgICBtX2NvbnN1bWVyLmxpbmVUbyhtX2N1cnJlbnRQb2lu
dCwgQWJzb2x1dGVDb29yZGluYXRlcyk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV9j
b25zdW1lci5saW5lVG8odGFyZ2V0UG9pbnQsIG1fbW9kZSk7CisgICAgICAgICAgICBtX2NvbnN1
bWVyLmxpbmVUbyhyZXN1bHQtPnRhcmdldFBvaW50LCBtX21vZGUpOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAKICAgICBpZiAobV9wYXRoUGFyc2luZ01vZGUgPT0gTm9ybWFsaXplZFBh
cnNpbmcpIHsKICAgICAgICAgRmxvYXRQb2ludCBwb2ludDEgPSBtX2N1cnJlbnRQb2ludDsKICAg
ICAgICAgaWYgKG1fbW9kZSA9PSBSZWxhdGl2ZUNvb3JkaW5hdGVzKQotICAgICAgICAgICAgdGFy
Z2V0UG9pbnQgKz0gbV9jdXJyZW50UG9pbnQ7Ci0gICAgICAgIG1fY3VycmVudFBvaW50ID0gdGFy
Z2V0UG9pbnQ7Ci0gICAgICAgIHJldHVybiBkZWNvbXBvc2VBcmNUb0N1YmljKGFuZ2xlLCByeCwg
cnksIHBvaW50MSwgdGFyZ2V0UG9pbnQsIGxhcmdlQXJjLCBzd2VlcCk7CisgICAgICAgICAgICBy
ZXN1bHQtPnRhcmdldFBvaW50ICs9IG1fY3VycmVudFBvaW50OworICAgICAgICBtX2N1cnJlbnRQ
b2ludCA9IHJlc3VsdC0+dGFyZ2V0UG9pbnQ7CisgICAgICAgIHJldHVybiBkZWNvbXBvc2VBcmNU
b0N1YmljKHJlc3VsdC0+YW5nbGUsIHJlc3VsdC0+cngsIHJlc3VsdC0+cnksIHBvaW50MSwgcmVz
dWx0LT50YXJnZXRQb2ludCwgcmVzdWx0LT5sYXJnZUFyYywgcmVzdWx0LT5zd2VlcCk7CiAgICAg
fQotICAgIG1fY29uc3VtZXIuYXJjVG8ocngsIHJ5LCBhbmdsZSwgbGFyZ2VBcmMsIHN3ZWVwLCB0
YXJnZXRQb2ludCwgbV9tb2RlKTsKKyAgICBtX2NvbnN1bWVyLmFyY1RvKHJlc3VsdC0+cngsIHJl
c3VsdC0+cnksIHJlc3VsdC0+YW5nbGUsIHJlc3VsdC0+bGFyZ2VBcmMsIHJlc3VsdC0+c3dlZXAs
IHJlc3VsdC0+dGFyZ2V0UG9pbnQsIG1fbW9kZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAg
LTMxMiw4ICszMDQsMTEgQEAgYm9vbCBTVkdQYXRoUGFyc2VyOjpwYXJzZVBhdGhEYXRhKGJvb2wg
YwogICAgIGlmICghbV9zb3VyY2UubW92ZVRvTmV4dFRva2VuKCkpCiAgICAgICAgIHJldHVybiB0
cnVlOwogCi0gICAgU1ZHUGF0aFNlZ1R5cGUgY29tbWFuZDsKLSAgICBtX3NvdXJjZS5wYXJzZVNW
R1NlZ21lbnRUeXBlKGNvbW1hbmQpOworICAgIGF1dG8gcGFyc2VkQ29tbWFuZCA9IG1fc291cmNl
LnBhcnNlU1ZHU2VnbWVudFR5cGUoKTsKKyAgICBpZiAoIXBhcnNlZENvbW1hbmQpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gY29tbWFuZCA9ICpwYXJzZWRDb21tYW5kOwogCiAg
ICAgLy8gUGF0aCBtdXN0IHN0YXJ0IHdpdGggbW92ZXRvLgogICAgIGlmIChjaGVja0ZvckluaXRp
YWxNb3ZlVG8gJiYgY29tbWFuZCAhPSBQYXRoU2VnTW92ZVRvQWJzICYmIGNvbW1hbmQgIT0gUGF0
aFNlZ01vdmVUb1JlbCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoUGFyc2VyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhQYXJzZXIuaAkocmV2aXNp
b24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhQYXJzZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBTVkdQ
YXRoQnl0ZVN0cmVhbTsKIGNsYXNzIFNWR1BhdGhTb3VyY2U7CiAKLWNsYXNzIFNWR1BhdGhQYXJz
ZXIgeworY2xhc3MgU1ZHUGF0aFBhcnNlciBmaW5hbCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIGJv
b2wgcGFyc2UoU1ZHUGF0aFNvdXJjZSYsIFNWR1BhdGhDb25zdW1lciYsIFBhdGhQYXJzaW5nTW9k
ZSA9IE5vcm1hbGl6ZWRQYXJzaW5nLCBib29sIGNoZWNrRm9ySW5pdGlhbE1vdmVUbyA9IHRydWUp
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFNlZ0xpc3RTb3VyY2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU2VnTGlzdFNvdXJjZS5jcHAJ
KHJldmlzaW9uIDI2MzE3NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU2VnTGlzdFNv
dXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDE1ICs0MCwxNSBAQCBib29sIFNWR1BhdGhT
ZWdMaXN0U291cmNlOjpoYXNNb3JlRGF0YSgpCiAgICAgcmV0dXJuIG1faXRlbUN1cnJlbnQgPCBt
X2l0ZW1FbmQ7CiB9CiAKLWJvb2wgU1ZHUGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNlU1ZHU2VnbWVu
dFR5cGUoU1ZHUGF0aFNlZ1R5cGUmIHBhdGhTZWdUeXBlKQorU1ZHUGF0aFNlZ1R5cGUgU1ZHUGF0
aFNlZ0xpc3RTb3VyY2U6Om5leHRDb21tYW5kKFNWR1BhdGhTZWdUeXBlKQogewogICAgIG1fc2Vn
bWVudCA9IG1fcGF0aFNlZ0xpc3QuYXQobV9pdGVtQ3VycmVudCk7Ci0gICAgcGF0aFNlZ1R5cGUg
PSBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnVHlwZT4obV9zZWdtZW50LT5wYXRoU2VnVHlwZSgpKTsK
KyAgICBTVkdQYXRoU2VnVHlwZSBwYXRoU2VnVHlwZSA9IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdU
eXBlPihtX3NlZ21lbnQtPnBhdGhTZWdUeXBlKCkpOwogICAgICsrbV9pdGVtQ3VycmVudDsKLSAg
ICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gcGF0aFNlZ1R5cGU7CiB9CiAKLVNWR1BhdGhTZWdU
eXBlIFNWR1BhdGhTZWdMaXN0U291cmNlOjpuZXh0Q29tbWFuZChTVkdQYXRoU2VnVHlwZSkKK09w
dGlvbmFsPFNWR1BhdGhTZWdUeXBlPiBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VTVkdTZWdt
ZW50VHlwZSgpCiB7CiAgICAgbV9zZWdtZW50ID0gbV9wYXRoU2VnTGlzdC5hdChtX2l0ZW1DdXJy
ZW50KTsKICAgICBTVkdQYXRoU2VnVHlwZSBwYXRoU2VnVHlwZSA9IHN0YXRpY19jYXN0PFNWR1Bh
dGhTZWdUeXBlPihtX3NlZ21lbnQtPnBhdGhTZWdUeXBlKCkpOwpAQCAtNTYsOTQgKzU2LDExMiBA
QCBTVkdQYXRoU2VnVHlwZSBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6bmV4CiAgICAgcmV0dXJuIHBh
dGhTZWdUeXBlOwogfQogCi1ib29sIFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZU1vdmVUb1Nl
Z21lbnQoRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCitPcHRpb25hbDxTVkdQYXRoU291cmNlOjpN
b3ZlVG9TZWdtZW50PiBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VNb3ZlVG9TZWdtZW50KCkK
IHsKICAgICBBU1NFUlQobV9zZWdtZW50KTsKICAgICBBU1NFUlQobV9zZWdtZW50LT5wYXRoU2Vn
VHlwZSgpID09IFBhdGhTZWdNb3ZlVG9BYnMgfHwgbV9zZWdtZW50LT5wYXRoU2VnVHlwZSgpID09
IFBhdGhTZWdNb3ZlVG9SZWwpOwogICAgIFNWR1BhdGhTZWdTaW5nbGVDb29yZGluYXRlKiBtb3Zl
VG8gPSBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnU2luZ2xlQ29vcmRpbmF0ZSo+KG1fc2VnbWVudC5n
ZXQoKSk7Ci0gICAgdGFyZ2V0UG9pbnQgPSBGbG9hdFBvaW50KG1vdmVUby0+eCgpLCBtb3ZlVG8t
PnkoKSk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgTW92ZVRvU2VnbWVudCBzZWdtZW50
OworICAgIHNlZ21lbnQudGFyZ2V0UG9pbnQgPSBGbG9hdFBvaW50KG1vdmVUby0+eCgpLCBtb3Zl
VG8tPnkoKSk7CisgICAgcmV0dXJuIHNlZ21lbnQ7CiB9CiAKLWJvb2wgU1ZHUGF0aFNlZ0xpc3RT
b3VyY2U6OnBhcnNlTGluZVRvU2VnbWVudChGbG9hdFBvaW50JiB0YXJnZXRQb2ludCkKK09wdGlv
bmFsPFNWR1BhdGhTb3VyY2U6OkxpbmVUb1NlZ21lbnQ+IFNWR1BhdGhTZWdMaXN0U291cmNlOjpw
YXJzZUxpbmVUb1NlZ21lbnQoKQogewogICAgIEFTU0VSVChtX3NlZ21lbnQpOwogICAgIEFTU0VS
VChtX3NlZ21lbnQtPnBhdGhTZWdUeXBlKCkgPT0gUGF0aFNlZ0xpbmVUb0FicyB8fCBtX3NlZ21l
bnQtPnBhdGhTZWdUeXBlKCkgPT0gUGF0aFNlZ0xpbmVUb1JlbCk7CiAgICAgU1ZHUGF0aFNlZ1Np
bmdsZUNvb3JkaW5hdGUqIGxpbmVUbyA9IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdTaW5nbGVDb29y
ZGluYXRlKj4obV9zZWdtZW50LmdldCgpKTsKLSAgICB0YXJnZXRQb2ludCA9IEZsb2F0UG9pbnQo
bGluZVRvLT54KCksIGxpbmVUby0+eSgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBM
aW5lVG9TZWdtZW50IHNlZ21lbnQ7CisgICAgc2VnbWVudC50YXJnZXRQb2ludCA9IEZsb2F0UG9p
bnQobGluZVRvLT54KCksIGxpbmVUby0+eSgpKTsKKyAgICByZXR1cm4gc2VnbWVudDsKIH0KIAot
Ym9vbCBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudChm
bG9hdCYgeCkKK09wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkxpbmVUb0hvcml6b250YWxTZWdtZW50
PiBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudCgpCiB7
CiAgICAgQVNTRVJUKG1fc2VnbWVudCk7CiAgICAgQVNTRVJUKG1fc2VnbWVudC0+cGF0aFNlZ1R5
cGUoKSA9PSBQYXRoU2VnTGluZVRvSG9yaXpvbnRhbEFicyB8fCBtX3NlZ21lbnQtPnBhdGhTZWdU
eXBlKCkgPT0gUGF0aFNlZ0xpbmVUb0hvcml6b250YWxSZWwpOwogICAgIFNWR1BhdGhTZWdMaW5l
dG9Ib3Jpem9udGFsKiBob3Jpem9udGFsID0gc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0xpbmV0b0hv
cml6b250YWwqPihtX3NlZ21lbnQuZ2V0KCkpOwotICAgIHggPSBob3Jpem9udGFsLT54KCk7Ci0g
ICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQgc2VnbWVu
dDsKKyAgICBzZWdtZW50LnggPSBob3Jpem9udGFsLT54KCk7CisgICAgcmV0dXJuIHNlZ21lbnQ7
CiB9CiAKLWJvb2wgU1ZHUGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNlTGluZVRvVmVydGljYWxTZWdt
ZW50KGZsb2F0JiB5KQorT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6TGluZVRvVmVydGljYWxTZWdt
ZW50PiBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnQoKQog
ewogICAgIEFTU0VSVChtX3NlZ21lbnQpOwogICAgIEFTU0VSVChtX3NlZ21lbnQtPnBhdGhTZWdU
eXBlKCkgPT0gUGF0aFNlZ0xpbmVUb1ZlcnRpY2FsQWJzIHx8IG1fc2VnbWVudC0+cGF0aFNlZ1R5
cGUoKSA9PSBQYXRoU2VnTGluZVRvVmVydGljYWxSZWwpOwogICAgIFNWR1BhdGhTZWdMaW5ldG9W
ZXJ0aWNhbCogdmVydGljYWwgPSBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnTGluZXRvVmVydGljYWwq
PihtX3NlZ21lbnQuZ2V0KCkpOwotICAgIHkgPSB2ZXJ0aWNhbC0+eSgpOwotICAgIHJldHVybiB0
cnVlOworICAgIAorICAgIExpbmVUb1ZlcnRpY2FsU2VnbWVudCBzZWdtZW50OworICAgIHNlZ21l
bnQueSA9IHZlcnRpY2FsLT55KCk7CisgICAgcmV0dXJuIHNlZ21lbnQ7CiB9CiAKLWJvb2wgU1ZH
UGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNlQ3VydmVUb0N1YmljU2VnbWVudChGbG9hdFBvaW50JiBw
b2ludDEsIEZsb2F0UG9pbnQmIHBvaW50MiwgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCitPcHRp
b25hbDxTVkdQYXRoU291cmNlOjpDdXJ2ZVRvQ3ViaWNTZWdtZW50PiBTVkdQYXRoU2VnTGlzdFNv
dXJjZTo6cGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KCkKIHsKICAgICBBU1NFUlQobV9zZWdtZW50
KTsKICAgICBBU1NFUlQobV9zZWdtZW50LT5wYXRoU2VnVHlwZSgpID09IFBhdGhTZWdDdXJ2ZVRv
Q3ViaWNBYnMgfHwgbV9zZWdtZW50LT5wYXRoU2VnVHlwZSgpID09IFBhdGhTZWdDdXJ2ZVRvQ3Vi
aWNSZWwpOwogICAgIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWMqIGN1YmljID0gc3RhdGljX2Nhc3Q8
U1ZHUGF0aFNlZ0N1cnZldG9DdWJpYyo+KG1fc2VnbWVudC5nZXQoKSk7Ci0gICAgcG9pbnQxID0g
RmxvYXRQb2ludChjdWJpYy0+eDEoKSwgY3ViaWMtPnkxKCkpOwotICAgIHBvaW50MiA9IEZsb2F0
UG9pbnQoY3ViaWMtPngyKCksIGN1YmljLT55MigpKTsKLSAgICB0YXJnZXRQb2ludCA9IEZsb2F0
UG9pbnQoY3ViaWMtPngoKSwgY3ViaWMtPnkoKSk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgCisg
ICAgQ3VydmVUb0N1YmljU2VnbWVudCBzZWdtZW50OworICAgIHNlZ21lbnQucG9pbnQxID0gRmxv
YXRQb2ludChjdWJpYy0+eDEoKSwgY3ViaWMtPnkxKCkpOworICAgIHNlZ21lbnQucG9pbnQyID0g
RmxvYXRQb2ludChjdWJpYy0+eDIoKSwgY3ViaWMtPnkyKCkpOworICAgIHNlZ21lbnQudGFyZ2V0
UG9pbnQgPSBGbG9hdFBvaW50KGN1YmljLT54KCksIGN1YmljLT55KCkpOworICAgIHJldHVybiBz
ZWdtZW50OwogfQogCi1ib29sIFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUN1cnZlVG9DdWJp
Y1Ntb290aFNlZ21lbnQoRmxvYXRQb2ludCYgcG9pbnQyLCBGbG9hdFBvaW50JiB0YXJnZXRQb2lu
dCkKK09wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQ+IFNW
R1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQoKQogewog
ICAgIEFTU0VSVChtX3NlZ21lbnQpOwogICAgIEFTU0VSVChtX3NlZ21lbnQtPnBhdGhTZWdUeXBl
KCkgPT0gUGF0aFNlZ0N1cnZlVG9DdWJpY1Ntb290aEFicyB8fCBtX3NlZ21lbnQtPnBhdGhTZWdU
eXBlKCkgPT0gUGF0aFNlZ0N1cnZlVG9DdWJpY1Ntb290aFJlbCk7CiAgICAgU1ZHUGF0aFNlZ0N1
cnZldG9DdWJpY1Ntb290aCogY3ViaWNTbW9vdGggPSBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnQ3Vy
dmV0b0N1YmljU21vb3RoKj4obV9zZWdtZW50LmdldCgpKTsKLSAgICBwb2ludDIgPSBGbG9hdFBv
aW50KGN1YmljU21vb3RoLT54MigpLCBjdWJpY1Ntb290aC0+eTIoKSk7Ci0gICAgdGFyZ2V0UG9p
bnQgPSBGbG9hdFBvaW50KGN1YmljU21vb3RoLT54KCksIGN1YmljU21vb3RoLT55KCkpOwotICAg
IHJldHVybiB0cnVlOworICAgIAorICAgIEN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQgc2VnbWVu
dDsKKyAgICBzZWdtZW50LnBvaW50MiA9IEZsb2F0UG9pbnQoY3ViaWNTbW9vdGgtPngyKCksIGN1
YmljU21vb3RoLT55MigpKTsKKyAgICBzZWdtZW50LnRhcmdldFBvaW50ID0gRmxvYXRQb2ludChj
dWJpY1Ntb290aC0+eCgpLCBjdWJpY1Ntb290aC0+eSgpKTsKKyAgICByZXR1cm4gc2VnbWVudDsK
IH0KIAotYm9vbCBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2Vn
bWVudChGbG9hdFBvaW50JiBwb2ludDEsIEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQorT3B0aW9u
YWw8U1ZHUGF0aFNvdXJjZTo6Q3VydmVUb1F1YWRyYXRpY1NlZ21lbnQ+IFNWR1BhdGhTZWdMaXN0
U291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KCkKIHsKICAgICBBU1NFUlQobV9z
ZWdtZW50KTsKICAgICBBU1NFUlQobV9zZWdtZW50LT5wYXRoU2VnVHlwZSgpID09IFBhdGhTZWdD
dXJ2ZVRvUXVhZHJhdGljQWJzIHx8IG1fc2VnbWVudC0+cGF0aFNlZ1R5cGUoKSA9PSBQYXRoU2Vn
Q3VydmVUb1F1YWRyYXRpY1JlbCk7CiAgICAgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWMqIHF1
YWRyYXRpYyA9IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljKj4obV9zZWdt
ZW50LmdldCgpKTsKLSAgICBwb2ludDEgPSBGbG9hdFBvaW50KHF1YWRyYXRpYy0+eDEoKSwgcXVh
ZHJhdGljLT55MSgpKTsKLSAgICB0YXJnZXRQb2ludCA9IEZsb2F0UG9pbnQocXVhZHJhdGljLT54
KCksIHF1YWRyYXRpYy0+eSgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBDdXJ2ZVRv
UXVhZHJhdGljU2VnbWVudCBzZWdtZW50OworICAgIHNlZ21lbnQucG9pbnQxID0gRmxvYXRQb2lu
dChxdWFkcmF0aWMtPngxKCksIHF1YWRyYXRpYy0+eTEoKSk7CisgICAgc2VnbWVudC50YXJnZXRQ
b2ludCA9IEZsb2F0UG9pbnQocXVhZHJhdGljLT54KCksIHF1YWRyYXRpYy0+eSgpKTsKKyAgICBy
ZXR1cm4gc2VnbWVudDsKIH0KIAotYm9vbCBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VDdXJ2
ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudChGbG9hdFBvaW50JiB0YXJnZXRQb2ludCkKK09wdGlv
bmFsPFNWR1BhdGhTb3VyY2U6OkN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50PiBTVkdQYXRo
U2VnTGlzdFNvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudCgpCiB7CiAg
ICAgQVNTRVJUKG1fc2VnbWVudCk7CiAgICAgQVNTRVJUKG1fc2VnbWVudC0+cGF0aFNlZ1R5cGUo
KSA9PSBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY1Ntb290aEFicyB8fCBtX3NlZ21lbnQtPnBhdGhT
ZWdUeXBlKCkgPT0gUGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNTbW9vdGhSZWwpOwogICAgIFNWR1Bh
dGhTZWdTaW5nbGVDb29yZGluYXRlKiBxdWFkcmF0aWNTbW9vdGggPSBzdGF0aWNfY2FzdDxTVkdQ
YXRoU2VnU2luZ2xlQ29vcmRpbmF0ZSo+KG1fc2VnbWVudC5nZXQoKSk7Ci0gICAgdGFyZ2V0UG9p
bnQgPSBGbG9hdFBvaW50KHF1YWRyYXRpY1Ntb290aC0+eCgpLCBxdWFkcmF0aWNTbW9vdGgtPnko
KSk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNl
Z21lbnQgc2VnbWVudDsKKyAgICBzZWdtZW50LnRhcmdldFBvaW50ID0gRmxvYXRQb2ludChxdWFk
cmF0aWNTbW9vdGgtPngoKSwgcXVhZHJhdGljU21vb3RoLT55KCkpOworICAgIHJldHVybiBzZWdt
ZW50OwogfQogCi1ib29sIFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUFyY1RvU2VnbWVudChm
bG9hdCYgcngsIGZsb2F0JiByeSwgZmxvYXQmIGFuZ2xlLCBib29sJiBsYXJnZUFyYywgYm9vbCYg
c3dlZXAsIEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQorT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6
QXJjVG9TZWdtZW50PiBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VBcmNUb1NlZ21lbnQoKQog
ewogICAgIEFTU0VSVChtX3NlZ21lbnQpOwogICAgIEFTU0VSVChtX3NlZ21lbnQtPnBhdGhTZWdU
eXBlKCkgPT0gUGF0aFNlZ0FyY0FicyB8fCBtX3NlZ21lbnQtPnBhdGhTZWdUeXBlKCkgPT0gUGF0
aFNlZ0FyY1JlbCk7CiAgICAgU1ZHUGF0aFNlZ0FyYyogYXJjVG8gPSBzdGF0aWNfY2FzdDxTVkdQ
YXRoU2VnQXJjKj4obV9zZWdtZW50LmdldCgpKTsKLSAgICByeCA9IGFyY1RvLT5yMSgpOwotICAg
IHJ5ID0gYXJjVG8tPnIyKCk7Ci0gICAgYW5nbGUgPSBhcmNUby0+YW5nbGUoKTsKLSAgICBsYXJn
ZUFyYyA9IGFyY1RvLT5sYXJnZUFyY0ZsYWcoKTsKLSAgICBzd2VlcCA9IGFyY1RvLT5zd2VlcEZs
YWcoKTsKLSAgICB0YXJnZXRQb2ludCA9IEZsb2F0UG9pbnQoYXJjVG8tPngoKSwgYXJjVG8tPnko
KSk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgQXJjVG9TZWdtZW50IHNlZ21lbnQ7Cisg
ICAgc2VnbWVudC5yeCA9IGFyY1RvLT5yMSgpOworICAgIHNlZ21lbnQucnkgPSBhcmNUby0+cjIo
KTsKKyAgICBzZWdtZW50LmFuZ2xlID0gYXJjVG8tPmFuZ2xlKCk7CisgICAgc2VnbWVudC5sYXJn
ZUFyYyA9IGFyY1RvLT5sYXJnZUFyY0ZsYWcoKTsKKyAgICBzZWdtZW50LnN3ZWVwID0gYXJjVG8t
PnN3ZWVwRmxhZygpOworICAgIHNlZ21lbnQudGFyZ2V0UG9pbnQgPSBGbG9hdFBvaW50KGFyY1Rv
LT54KCksIGFyY1RvLT55KCkpOworICAgIHJldHVybiBzZWdtZW50OwogfQogCiB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFNlZ0xpc3RTb3VyY2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFNlZ0xpc3RTb3VyY2UuaAkocmV2aXNpb24gMjYzMTc2
KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTZWdMaXN0U291cmNlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM2LDE4ICszNiwxOCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGJvb2wgaGFz
TW9yZURhdGEoKSBjb25zdCBmaW5hbDsKICAgICBib29sIG1vdmVUb05leHRUb2tlbigpIGZpbmFs
IHsgcmV0dXJuIHRydWU7IH0KLSAgICBib29sIHBhcnNlU1ZHU2VnbWVudFR5cGUoU1ZHUGF0aFNl
Z1R5cGUmKSBmaW5hbDsKICAgICBTVkdQYXRoU2VnVHlwZSBuZXh0Q29tbWFuZChTVkdQYXRoU2Vn
VHlwZSkgZmluYWw7CiAKLSAgICBib29sIHBhcnNlTW92ZVRvU2VnbWVudChGbG9hdFBvaW50Jikg
ZmluYWw7Ci0gICAgYm9vbCBwYXJzZUxpbmVUb1NlZ21lbnQoRmxvYXRQb2ludCYpIGZpbmFsOwot
ICAgIGJvb2wgcGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudChmbG9hdCYpIGZpbmFsOwotICAg
IGJvb2wgcGFyc2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnQoZmxvYXQmKSBmaW5hbDsKLSAgICBib29s
IHBhcnNlQ3VydmVUb0N1YmljU2VnbWVudChGbG9hdFBvaW50JiwgRmxvYXRQb2ludCYsIEZsb2F0
UG9pbnQmKSBmaW5hbDsKLSAgICBib29sIHBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudChG
bG9hdFBvaW50JiwgRmxvYXRQb2ludCYpIGZpbmFsOwotICAgIGJvb2wgcGFyc2VDdXJ2ZVRvUXVh
ZHJhdGljU2VnbWVudChGbG9hdFBvaW50JiwgRmxvYXRQb2ludCYpIGZpbmFsOwotICAgIGJvb2wg
cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudChGbG9hdFBvaW50JikgZmluYWw7Ci0g
ICAgYm9vbCBwYXJzZUFyY1RvU2VnbWVudChmbG9hdCYsIGZsb2F0JiwgZmxvYXQmLCBib29sJiwg
Ym9vbCYsIEZsb2F0UG9pbnQmKSBmaW5hbDsKKyAgICBPcHRpb25hbDxTVkdQYXRoU2VnVHlwZT4g
cGFyc2VTVkdTZWdtZW50VHlwZSgpIGZpbmFsOworICAgIE9wdGlvbmFsPE1vdmVUb1NlZ21lbnQ+
IHBhcnNlTW92ZVRvU2VnbWVudCgpIGZpbmFsOworICAgIE9wdGlvbmFsPExpbmVUb1NlZ21lbnQ+
IHBhcnNlTGluZVRvU2VnbWVudCgpIGZpbmFsOworICAgIE9wdGlvbmFsPExpbmVUb0hvcml6b250
YWxTZWdtZW50PiBwYXJzZUxpbmVUb0hvcml6b250YWxTZWdtZW50KCkgZmluYWw7CisgICAgT3B0
aW9uYWw8TGluZVRvVmVydGljYWxTZWdtZW50PiBwYXJzZUxpbmVUb1ZlcnRpY2FsU2VnbWVudCgp
IGZpbmFsOworICAgIE9wdGlvbmFsPEN1cnZlVG9DdWJpY1NlZ21lbnQ+IHBhcnNlQ3VydmVUb0N1
YmljU2VnbWVudCgpIGZpbmFsOworICAgIE9wdGlvbmFsPEN1cnZlVG9DdWJpY1Ntb290aFNlZ21l
bnQ+IHBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudCgpIGZpbmFsOworICAgIE9wdGlvbmFs
PEN1cnZlVG9RdWFkcmF0aWNTZWdtZW50PiBwYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KCkg
ZmluYWw7CisgICAgT3B0aW9uYWw8Q3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQ+IHBhcnNl
Q3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQoKSBmaW5hbDsKKyAgICBPcHRpb25hbDxBcmNU
b1NlZ21lbnQ+IHBhcnNlQXJjVG9TZWdtZW50KCkgZmluYWw7CiAKICAgICBjb25zdCBTVkdQYXRo
U2VnTGlzdCYgbV9wYXRoU2VnTGlzdDsKICAgICBSZWZQdHI8U1ZHUGF0aFNlZz4gbV9zZWdtZW50
OwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTb3VyY2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFNvdXJjZS5oCShyZXZpc2lvbiAyNjMxNzYpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MywxOCArMzMsNjMgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIGhhc01vcmVEYXRhKCkg
Y29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBtb3ZlVG9OZXh0VG9rZW4oKSA9IDA7Ci0gICAg
dmlydHVhbCBib29sIHBhcnNlU1ZHU2VnbWVudFR5cGUoU1ZHUGF0aFNlZ1R5cGUmKSA9IDA7CiAg
ICAgdmlydHVhbCBTVkdQYXRoU2VnVHlwZSBuZXh0Q29tbWFuZChTVkdQYXRoU2VnVHlwZSBwcmV2
aW91c0NvbW1hbmQpID0gMDsKIAotICAgIHZpcnR1YWwgYm9vbCBwYXJzZU1vdmVUb1NlZ21lbnQo
RmxvYXRQb2ludCYpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VMaW5lVG9TZWdtZW50KEZs
b2F0UG9pbnQmKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHBhcnNlTGluZVRvSG9yaXpvbnRhbFNl
Z21lbnQoZmxvYXQmKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHBhcnNlTGluZVRvVmVydGljYWxT
ZWdtZW50KGZsb2F0JikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBwYXJzZUN1cnZlVG9DdWJpY1Nl
Z21lbnQoRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmLCBGbG9hdFBvaW50JikgPSAwOwotICAgIHZp
cnR1YWwgYm9vbCBwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQoRmxvYXRQb2ludCYsIEZs
b2F0UG9pbnQmKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHBhcnNlQ3VydmVUb1F1YWRyYXRpY1Nl
Z21lbnQoRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHBh
cnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQoRmxvYXRQb2ludCYpID0gMDsKLSAgICB2
aXJ0dWFsIGJvb2wgcGFyc2VBcmNUb1NlZ21lbnQoZmxvYXQmLCBmbG9hdCYsIGZsb2F0JiwgYm9v
bCYsIGJvb2wmLCBGbG9hdFBvaW50JikgPSAwOworICAgIHZpcnR1YWwgT3B0aW9uYWw8U1ZHUGF0
aFNlZ1R5cGU+IHBhcnNlU1ZHU2VnbWVudFR5cGUoKSA9IDA7CisKKyAgICBzdHJ1Y3QgTW92ZVRv
U2VnbWVudCB7CisgICAgICAgIEZsb2F0UG9pbnQgdGFyZ2V0UG9pbnQ7CisgICAgfTsKKyAgICB2
aXJ0dWFsIE9wdGlvbmFsPE1vdmVUb1NlZ21lbnQ+IHBhcnNlTW92ZVRvU2VnbWVudCgpID0gMDsK
KworICAgIHN0cnVjdCBMaW5lVG9TZWdtZW50IHsKKyAgICAgICAgRmxvYXRQb2ludCB0YXJnZXRQ
b2ludDsKKyAgICB9OworICAgIHZpcnR1YWwgT3B0aW9uYWw8TGluZVRvU2VnbWVudD4gcGFyc2VM
aW5lVG9TZWdtZW50KCkgPSAwOworCisgICAgc3RydWN0IExpbmVUb0hvcml6b250YWxTZWdtZW50
IHsKKyAgICAgICAgZmxvYXQgeDsKKyAgICB9OworICAgIHZpcnR1YWwgT3B0aW9uYWw8TGluZVRv
SG9yaXpvbnRhbFNlZ21lbnQ+IHBhcnNlTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQoKSA9IDA7CisK
KyAgICBzdHJ1Y3QgTGluZVRvVmVydGljYWxTZWdtZW50IHsKKyAgICAgICAgZmxvYXQgeTsKKyAg
ICB9OworICAgIHZpcnR1YWwgT3B0aW9uYWw8TGluZVRvVmVydGljYWxTZWdtZW50PiBwYXJzZUxp
bmVUb1ZlcnRpY2FsU2VnbWVudCgpID0gMDsKKworICAgIHN0cnVjdCBDdXJ2ZVRvQ3ViaWNTZWdt
ZW50IHsKKyAgICAgICAgRmxvYXRQb2ludCBwb2ludDE7CisgICAgICAgIEZsb2F0UG9pbnQgcG9p
bnQyOworICAgICAgICBGbG9hdFBvaW50IHRhcmdldFBvaW50OworICAgIH07CisgICAgdmlydHVh
bCBPcHRpb25hbDxDdXJ2ZVRvQ3ViaWNTZWdtZW50PiBwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQo
KSA9IDA7CisKKyAgICBzdHJ1Y3QgQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudCB7CisgICAgICAg
IEZsb2F0UG9pbnQgcG9pbnQyOworICAgICAgICBGbG9hdFBvaW50IHRhcmdldFBvaW50OworICAg
IH07CisgICAgdmlydHVhbCBPcHRpb25hbDxDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50PiBwYXJz
ZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQoKSA9IDA7CisKKyAgICBzdHJ1Y3QgQ3VydmVUb1F1
YWRyYXRpY1NlZ21lbnQgeworICAgICAgICBGbG9hdFBvaW50IHBvaW50MTsKKyAgICAgICAgRmxv
YXRQb2ludCB0YXJnZXRQb2ludDsKKyAgICB9OworICAgIHZpcnR1YWwgT3B0aW9uYWw8Q3VydmVU
b1F1YWRyYXRpY1NlZ21lbnQ+IHBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQoKSA9IDA7CisK
KyAgICBzdHJ1Y3QgQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQgeworICAgICAgICBGbG9h
dFBvaW50IHRhcmdldFBvaW50OworICAgIH07CisgICAgdmlydHVhbCBPcHRpb25hbDxDdXJ2ZVRv
UXVhZHJhdGljU21vb3RoU2VnbWVudD4gcGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVu
dCgpID0gMDsKKworICAgIHN0cnVjdCBBcmNUb1NlZ21lbnQgeworICAgICAgICBmbG9hdCByeDsK
KyAgICAgICAgZmxvYXQgcnk7CisgICAgICAgIGZsb2F0IGFuZ2xlOworICAgICAgICBib29sIGxh
cmdlQXJjOworICAgICAgICBib29sIHN3ZWVwOworICAgICAgICBGbG9hdFBvaW50IHRhcmdldFBv
aW50OworICAgIH07CisgICAgdmlydHVhbCBPcHRpb25hbDxBcmNUb1NlZ21lbnQ+IHBhcnNlQXJj
VG9TZWdtZW50KCkgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTdHJpbmdTb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU3RyaW5nU291cmNlLmNwcAkocmV2aXNpb24gMjYzMTc2
KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTdHJpbmdTb3VyY2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01NSwxOTUgKzU1LDI4MCBAQCBib29sIFNWR1BhdGhTdHJpbmdTb3VyY2U6Om1v
dmVUb05leHRUb2tlCiAgICAgcmV0dXJuIHNraXBPcHRpb25hbFNWR1NwYWNlcyhtX2N1cnJlbnQu
bV9jaGFyYWN0ZXIxNiwgbV9lbmQubV9jaGFyYWN0ZXIxNik7CiB9CiAKLXRlbXBsYXRlIDx0eXBl
bmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGljIGJvb2wgcGFyc2VTVkdTZWdtZW50VHlwZUhlbHBl
cihjb25zdCBDaGFyYWN0ZXJUeXBlKiYgY3VycmVudCwgU1ZHUGF0aFNlZ1R5cGUmIHBhdGhTZWdU
eXBlKQordGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBPcHRpb25hbDxT
VkdQYXRoU2VnVHlwZT4gbmV4dENvbW1hbmRIZWxwZXIoY29uc3QgQ2hhcmFjdGVyVHlwZSomIGN1
cnJlbnQsIFNWR1BhdGhTZWdUeXBlIHByZXZpb3VzQ29tbWFuZCkKK3sKKyAgICAvLyBDaGVjayBm
b3IgcmVtYWluaW5nIGNvb3JkaW5hdGVzIGluIHRoZSBjdXJyZW50IGNvbW1hbmQuCisgICAgaWYg
KCgqY3VycmVudCA9PSAnKycgfHwgKmN1cnJlbnQgPT0gJy0nIHx8ICpjdXJyZW50ID09ICcuJyB8
fCBpc0FTQ0lJRGlnaXQoKmN1cnJlbnQpKQorICAgICAgICAmJiBwcmV2aW91c0NvbW1hbmQgIT0g
UGF0aFNlZ0Nsb3NlUGF0aCkgeworICAgICAgICBpZiAocHJldmlvdXNDb21tYW5kID09IFBhdGhT
ZWdNb3ZlVG9BYnMpCisgICAgICAgICAgICByZXR1cm4gUGF0aFNlZ0xpbmVUb0FiczsKKyAgICAg
ICAgaWYgKHByZXZpb3VzQ29tbWFuZCA9PSBQYXRoU2VnTW92ZVRvUmVsKQorICAgICAgICAgICAg
cmV0dXJuIFBhdGhTZWdMaW5lVG9SZWw7CisgICAgICAgIHJldHVybiBwcmV2aW91c0NvbW1hbmQ7
CisgICAgfQorCisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworU1ZHUGF0aFNlZ1R5cGUg
U1ZHUGF0aFN0cmluZ1NvdXJjZTo6bmV4dENvbW1hbmQoU1ZHUGF0aFNlZ1R5cGUgcHJldmlvdXND
b21tYW5kKQoreworICAgIGlmIChtX2lzOEJpdFNvdXJjZSkgeworICAgICAgICBpZiAoYXV0byBu
ZXh0Q29tbWFuZCA9IG5leHRDb21tYW5kSGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjgsIHBy
ZXZpb3VzQ29tbWFuZCkpCisgICAgICAgICAgICByZXR1cm4gKm5leHRDb21tYW5kOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGlmIChhdXRvIG5leHRDb21tYW5kID0gbmV4dENvbW1hbmRIZWxwZXIo
bV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYsIHByZXZpb3VzQ29tbWFuZCkpCisgICAgICAgICAgICBy
ZXR1cm4gKm5leHRDb21tYW5kOworICAgIH0KKworICAgIHJldHVybiAqcGFyc2VTVkdTZWdtZW50
VHlwZSgpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIFNW
R1BhdGhTZWdUeXBlIHBhcnNlU1ZHU2VnbWVudFR5cGVIZWxwZXIoY29uc3QgQ2hhcmFjdGVyVHlw
ZSomIGN1cnJlbnQpCiB7CiAgICAgc3dpdGNoICgqKGN1cnJlbnQrKykpIHsKICAgICBjYXNlICda
JzoKICAgICBjYXNlICd6JzoKLSAgICAgICAgcGF0aFNlZ1R5cGUgPSBQYXRoU2VnQ2xvc2VQYXRo
OwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIFBhdGhTZWdDbG9zZVBhdGg7CiAgICAg
Y2FzZSAnTSc6Ci0gICAgICAgIHBhdGhTZWdUeXBlID0gUGF0aFNlZ01vdmVUb0FiczsKLSAgICAg
ICAgYnJlYWs7CisgICAgICAgIHJldHVybiBQYXRoU2VnTW92ZVRvQWJzOwogICAgIGNhc2UgJ20n
OgotICAgICAgICBwYXRoU2VnVHlwZSA9IFBhdGhTZWdNb3ZlVG9SZWw7Ci0gICAgICAgIGJyZWFr
OworICAgICAgICByZXR1cm4gUGF0aFNlZ01vdmVUb1JlbDsKICAgICBjYXNlICdMJzoKLSAgICAg
ICAgcGF0aFNlZ1R5cGUgPSBQYXRoU2VnTGluZVRvQWJzOwotICAgICAgICBicmVhazsKKyAgICAg
ICAgcmV0dXJuIFBhdGhTZWdMaW5lVG9BYnM7CiAgICAgY2FzZSAnbCc6Ci0gICAgICAgIHBhdGhT
ZWdUeXBlID0gUGF0aFNlZ0xpbmVUb1JlbDsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVy
biBQYXRoU2VnTGluZVRvUmVsOwogICAgIGNhc2UgJ0MnOgotICAgICAgICBwYXRoU2VnVHlwZSA9
IFBhdGhTZWdDdXJ2ZVRvQ3ViaWNBYnM7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4g
UGF0aFNlZ0N1cnZlVG9DdWJpY0FiczsKICAgICBjYXNlICdjJzoKLSAgICAgICAgcGF0aFNlZ1R5
cGUgPSBQYXRoU2VnQ3VydmVUb0N1YmljUmVsOwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0
dXJuIFBhdGhTZWdDdXJ2ZVRvQ3ViaWNSZWw7CiAgICAgY2FzZSAnUSc6Ci0gICAgICAgIHBhdGhT
ZWdUeXBlID0gUGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNBYnM7Ci0gICAgICAgIGJyZWFrOworICAg
ICAgICByZXR1cm4gUGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNBYnM7CiAgICAgY2FzZSAncSc6Ci0g
ICAgICAgIHBhdGhTZWdUeXBlID0gUGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNSZWw7Ci0gICAgICAg
IGJyZWFrOworICAgICAgICByZXR1cm4gUGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNSZWw7CiAgICAg
Y2FzZSAnQSc6Ci0gICAgICAgIHBhdGhTZWdUeXBlID0gUGF0aFNlZ0FyY0FiczsKLSAgICAgICAg
YnJlYWs7CisgICAgICAgIHJldHVybiBQYXRoU2VnQXJjQWJzOwogICAgIGNhc2UgJ2EnOgotICAg
ICAgICBwYXRoU2VnVHlwZSA9IFBhdGhTZWdBcmNSZWw7Ci0gICAgICAgIGJyZWFrOworICAgICAg
ICByZXR1cm4gUGF0aFNlZ0FyY1JlbDsKICAgICBjYXNlICdIJzoKLSAgICAgICAgcGF0aFNlZ1R5
cGUgPSBQYXRoU2VnTGluZVRvSG9yaXpvbnRhbEFiczsKLSAgICAgICAgYnJlYWs7CisgICAgICAg
IHJldHVybiBQYXRoU2VnTGluZVRvSG9yaXpvbnRhbEFiczsKICAgICBjYXNlICdoJzoKLSAgICAg
ICAgcGF0aFNlZ1R5cGUgPSBQYXRoU2VnTGluZVRvSG9yaXpvbnRhbFJlbDsKLSAgICAgICAgYnJl
YWs7CisgICAgICAgIHJldHVybiBQYXRoU2VnTGluZVRvSG9yaXpvbnRhbFJlbDsKICAgICBjYXNl
ICdWJzoKLSAgICAgICAgcGF0aFNlZ1R5cGUgPSBQYXRoU2VnTGluZVRvVmVydGljYWxBYnM7Ci0g
ICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gUGF0aFNlZ0xpbmVUb1ZlcnRpY2FsQWJzOwog
ICAgIGNhc2UgJ3YnOgotICAgICAgICBwYXRoU2VnVHlwZSA9IFBhdGhTZWdMaW5lVG9WZXJ0aWNh
bFJlbDsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBQYXRoU2VnTGluZVRvVmVydGlj
YWxSZWw7CiAgICAgY2FzZSAnUyc6Ci0gICAgICAgIHBhdGhTZWdUeXBlID0gUGF0aFNlZ0N1cnZl
VG9DdWJpY1Ntb290aEFiczsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBQYXRoU2Vn
Q3VydmVUb0N1YmljU21vb3RoQWJzOwogICAgIGNhc2UgJ3MnOgotICAgICAgICBwYXRoU2VnVHlw
ZSA9IFBhdGhTZWdDdXJ2ZVRvQ3ViaWNTbW9vdGhSZWw7Ci0gICAgICAgIGJyZWFrOworICAgICAg
ICByZXR1cm4gUGF0aFNlZ0N1cnZlVG9DdWJpY1Ntb290aFJlbDsKICAgICBjYXNlICdUJzoKLSAg
ICAgICAgcGF0aFNlZ1R5cGUgPSBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY1Ntb290aEFiczsKLSAg
ICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY1Ntb290
aEFiczsKICAgICBjYXNlICd0JzoKLSAgICAgICAgcGF0aFNlZ1R5cGUgPSBQYXRoU2VnQ3VydmVU
b1F1YWRyYXRpY1Ntb290aFJlbDsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBQYXRo
U2VnQ3VydmVUb1F1YWRyYXRpY1Ntb290aFJlbDsKICAgICBkZWZhdWx0OgotICAgICAgICBwYXRo
U2VnVHlwZSA9IFBhdGhTZWdVbmtub3duOworICAgICAgICByZXR1cm4gUGF0aFNlZ1Vua25vd247
CiAgICAgfQotICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFNWR1BhdGhTdHJpbmdTb3VyY2U6
OnBhcnNlU1ZHU2VnbWVudFR5cGUoU1ZHUGF0aFNlZ1R5cGUmIHBhdGhTZWdUeXBlKQorT3B0aW9u
YWw8U1ZHUGF0aFNlZ1R5cGU+IFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlU1ZHU2VnbWVudFR5
cGUoKQogewogICAgIGlmIChtX2lzOEJpdFNvdXJjZSkKLSAgICAgICAgcmV0dXJuIHBhcnNlU1ZH
U2VnbWVudFR5cGVIZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyOCwgcGF0aFNlZ1R5cGUpOwot
ICAgIHJldHVybiBwYXJzZVNWR1NlZ21lbnRUeXBlSGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3Rl
cjE2LCBwYXRoU2VnVHlwZSk7CisgICAgICAgIHJldHVybiBwYXJzZVNWR1NlZ21lbnRUeXBlSGVs
cGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjgpOworICAgIHJldHVybiBwYXJzZVNWR1NlZ21lbnRU
eXBlSGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjE2KTsKIH0KIAotdGVtcGxhdGUgPHR5cGVu
YW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgYm9vbCBuZXh0Q29tbWFuZEhlbHBlcihjb25zdCBD
aGFyYWN0ZXJUeXBlKiYgY3VycmVudCwgU1ZHUGF0aFNlZ1R5cGUgcHJldmlvdXNDb21tYW5kLCBT
VkdQYXRoU2VnVHlwZSYgbmV4dENvbW1hbmQpCitPcHRpb25hbDxTVkdQYXRoU291cmNlOjpNb3Zl
VG9TZWdtZW50PiBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZU1vdmVUb1NlZ21lbnQoKQogewot
ICAgIC8vIENoZWNrIGZvciByZW1haW5pbmcgY29vcmRpbmF0ZXMgaW4gdGhlIGN1cnJlbnQgY29t
bWFuZC4KLSAgICBpZiAoKCpjdXJyZW50ID09ICcrJyB8fCAqY3VycmVudCA9PSAnLScgfHwgKmN1
cnJlbnQgPT0gJy4nIHx8IGlzQVNDSUlEaWdpdCgqY3VycmVudCkpCi0gICAgICAgICYmIHByZXZp
b3VzQ29tbWFuZCAhPSBQYXRoU2VnQ2xvc2VQYXRoKSB7Ci0gICAgICAgIGlmIChwcmV2aW91c0Nv
bW1hbmQgPT0gUGF0aFNlZ01vdmVUb0FicykgewotICAgICAgICAgICAgbmV4dENvbW1hbmQgPSBQ
YXRoU2VnTGluZVRvQWJzOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAg
ICAgICAgaWYgKHByZXZpb3VzQ29tbWFuZCA9PSBQYXRoU2VnTW92ZVRvUmVsKSB7Ci0gICAgICAg
ICAgICBuZXh0Q29tbWFuZCA9IFBhdGhTZWdMaW5lVG9SZWw7Ci0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBuZXh0Q29tbWFuZCA9IHByZXZpb3VzQ29tbWFuZDsK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQorICAgIGF1dG8gaGVscGVyID0gW10oY29uc3Qg
YXV0byomIGN1cnJlbnQsIGNvbnN0IGF1dG8qIGVuZCkgLT4gT3B0aW9uYWw8TW92ZVRvU2VnbWVu
dD4geworICAgICAgICBhdXRvIHRhcmdldFBvaW50ID0gcGFyc2VGbG9hdFBvaW50KGN1cnJlbnQs
IGVuZCk7CisgICAgICAgIGlmICghdGFyZ2V0UG9pbnQpCisgICAgICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OworICAgICAgICAKKyAgICAgICAgTW92ZVRvU2VnbWVudCBzZWdtZW50OworICAg
ICAgICBzZWdtZW50LnRhcmdldFBvaW50ID0gV1RGTW92ZSgqdGFyZ2V0UG9pbnQpOworICAgICAg
ICByZXR1cm4gc2VnbWVudDsKKyAgICB9OwogCi0gICAgcmV0dXJuIGZhbHNlOworICAgIGlmICht
X2lzOEJpdFNvdXJjZSkKKyAgICAgICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0
ZXI4LCBtX2VuZC5tX2NoYXJhY3RlcjgpOworICAgIHJldHVybiBoZWxwZXIobV9jdXJyZW50Lm1f
Y2hhcmFjdGVyMTYsIG1fZW5kLm1fY2hhcmFjdGVyMTYpOwogfQogCi1TVkdQYXRoU2VnVHlwZSBT
VkdQYXRoU3RyaW5nU291cmNlOjpuZXh0Q29tbWFuZChTVkdQYXRoU2VnVHlwZSBwcmV2aW91c0Nv
bW1hbmQpCitPcHRpb25hbDxTVkdQYXRoU291cmNlOjpMaW5lVG9TZWdtZW50PiBTVkdQYXRoU3Ry
aW5nU291cmNlOjpwYXJzZUxpbmVUb1NlZ21lbnQoKQogewotICAgIFNWR1BhdGhTZWdUeXBlIG5l
eHRDb21tYW5kOwotICAgIGlmIChtX2lzOEJpdFNvdXJjZSkgewotICAgICAgICBpZiAobmV4dENv
bW1hbmRIZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyOCwgcHJldmlvdXNDb21tYW5kLCBuZXh0
Q29tbWFuZCkpCi0gICAgICAgICAgICByZXR1cm4gbmV4dENvbW1hbmQ7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgaWYgKG5leHRDb21tYW5kSGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjE2LCBw
cmV2aW91c0NvbW1hbmQsIG5leHRDb21tYW5kKSkKLSAgICAgICAgICAgIHJldHVybiBuZXh0Q29t
bWFuZDsKLSAgICB9CisgICAgYXV0byBoZWxwZXIgPSBbXShjb25zdCBhdXRvKiYgY3VycmVudCwg
Y29uc3QgYXV0byogZW5kKSAtPiBPcHRpb25hbDxMaW5lVG9TZWdtZW50PiB7CisgICAgICAgIGF1
dG8gdGFyZ2V0UG9pbnQgPSBwYXJzZUZsb2F0UG9pbnQoY3VycmVudCwgZW5kKTsKKyAgICAgICAg
aWYgKCF0YXJnZXRQb2ludCkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAg
ICAgIAorICAgICAgICBMaW5lVG9TZWdtZW50IHNlZ21lbnQ7CisgICAgICAgIHNlZ21lbnQudGFy
Z2V0UG9pbnQgPSBXVEZNb3ZlKCp0YXJnZXRQb2ludCk7CisgICAgICAgIHJldHVybiBzZWdtZW50
OworICAgIH07CiAKLSAgICBwYXJzZVNWR1NlZ21lbnRUeXBlKG5leHRDb21tYW5kKTsKLSAgICBy
ZXR1cm4gbmV4dENvbW1hbmQ7Ci19Ci0KLWJvb2wgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VN
b3ZlVG9TZWdtZW50KEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQotewogICAgIGlmIChtX2lzOEJp
dFNvdXJjZSkKLSAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXRQb2ludChtX2N1cnJlbnQubV9jaGFy
YWN0ZXI4LCBtX2VuZC5tX2NoYXJhY3RlcjgsIHRhcmdldFBvaW50KTsKLSAgICByZXR1cm4gcGFy
c2VGbG9hdFBvaW50KG1fY3VycmVudC5tX2NoYXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2
LCB0YXJnZXRQb2ludCk7CisgICAgICAgIHJldHVybiBoZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFj
dGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4KTsKKyAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5t
X2NoYXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2KTsKIH0KIAotYm9vbCBTVkdQYXRoU3Ry
aW5nU291cmNlOjpwYXJzZUxpbmVUb1NlZ21lbnQoRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCitP
cHRpb25hbDxTVkdQYXRoU291cmNlOjpMaW5lVG9Ib3Jpem9udGFsU2VnbWVudD4gU1ZHUGF0aFN0
cmluZ1NvdXJjZTo6cGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudCgpCiB7Ci0gICAgaWYgKG1f
aXM4Qml0U291cmNlKQotICAgICAgICByZXR1cm4gcGFyc2VGbG9hdFBvaW50KG1fY3VycmVudC5t
X2NoYXJhY3RlcjgsIG1fZW5kLm1fY2hhcmFjdGVyOCwgdGFyZ2V0UG9pbnQpOwotICAgIHJldHVy
biBwYXJzZUZsb2F0UG9pbnQobV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYsIG1fZW5kLm1fY2hhcmFj
dGVyMTYsIHRhcmdldFBvaW50KTsKLX0KKyAgICBhdXRvIGhlbHBlciA9IFtdKGNvbnN0IGF1dG8q
JiBjdXJyZW50LCBjb25zdCBhdXRvKiBlbmQpIC0+IE9wdGlvbmFsPExpbmVUb0hvcml6b250YWxT
ZWdtZW50PiB7CisgICAgICAgIGF1dG8geCA9IHBhcnNlTnVtYmVyKGN1cnJlbnQsIGVuZCk7Cisg
ICAgICAgIGlmICgheCkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAg
IAorICAgICAgICBMaW5lVG9Ib3Jpem9udGFsU2VnbWVudCBzZWdtZW50OworICAgICAgICBzZWdt
ZW50LnggPSAqeDsKKyAgICAgICAgcmV0dXJuIHNlZ21lbnQ7CisgICAgfTsKIAotYm9vbCBTVkdQ
YXRoU3RyaW5nU291cmNlOjpwYXJzZUxpbmVUb0hvcml6b250YWxTZWdtZW50KGZsb2F0JiB4KQot
ewogICAgIGlmIChtX2lzOEJpdFNvdXJjZSkKLSAgICAgICAgcmV0dXJuIHBhcnNlTnVtYmVyKG1f
Y3VycmVudC5tX2NoYXJhY3RlcjgsIG1fZW5kLm1fY2hhcmFjdGVyOCwgeCk7Ci0gICAgcmV0dXJu
IHBhcnNlTnVtYmVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2
LCB4KTsKKyAgICAgICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXI4LCBtX2Vu
ZC5tX2NoYXJhY3RlcjgpOworICAgIHJldHVybiBoZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVy
MTYsIG1fZW5kLm1fY2hhcmFjdGVyMTYpOwogfQogCi1ib29sIFNWR1BhdGhTdHJpbmdTb3VyY2U6
OnBhcnNlTGluZVRvVmVydGljYWxTZWdtZW50KGZsb2F0JiB5KQorT3B0aW9uYWw8U1ZHUGF0aFNv
dXJjZTo6TGluZVRvVmVydGljYWxTZWdtZW50PiBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUxp
bmVUb1ZlcnRpY2FsU2VnbWVudCgpCiB7CisgICAgYXV0byBoZWxwZXIgPSBbXShjb25zdCBhdXRv
KiYgY3VycmVudCwgY29uc3QgYXV0byogZW5kKSAtPiBPcHRpb25hbDxMaW5lVG9WZXJ0aWNhbFNl
Z21lbnQ+IHsKKyAgICAgICAgYXV0byB5ID0gcGFyc2VOdW1iZXIoY3VycmVudCwgZW5kKTsKKyAg
ICAgICAgaWYgKCF5KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAg
CisgICAgICAgIExpbmVUb1ZlcnRpY2FsU2VnbWVudCBzZWdtZW50OworICAgICAgICBzZWdtZW50
LnkgPSAqeTsKKyAgICAgICAgcmV0dXJuIHNlZ21lbnQ7CisgICAgfTsKKwogICAgIGlmIChtX2lz
OEJpdFNvdXJjZSkKLSAgICAgICAgcmV0dXJuIHBhcnNlTnVtYmVyKG1fY3VycmVudC5tX2NoYXJh
Y3RlcjgsIG1fZW5kLm1fY2hhcmFjdGVyOCwgeSk7Ci0gICAgcmV0dXJuIHBhcnNlTnVtYmVyKG1f
Y3VycmVudC5tX2NoYXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2LCB5KTsKKyAgICAgICAg
cmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXI4LCBtX2VuZC5tX2NoYXJhY3Rlcjgp
OworICAgIHJldHVybiBoZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYsIG1fZW5kLm1fY2hh
cmFjdGVyMTYpOwogfQogCi1ib29sIFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlQ3VydmVUb0N1
YmljU2VnbWVudChGbG9hdFBvaW50JiBwb2ludDEsIEZsb2F0UG9pbnQmIHBvaW50MiwgRmxvYXRQ
b2ludCYgdGFyZ2V0UG9pbnQpCitPcHRpb25hbDxTVkdQYXRoU291cmNlOjpDdXJ2ZVRvQ3ViaWNT
ZWdtZW50PiBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQoKQog
eworICAgIGF1dG8gaGVscGVyID0gW10oY29uc3QgYXV0byomIGN1cnJlbnQsIGNvbnN0IGF1dG8q
IGVuZCkgLT4gT3B0aW9uYWw8Q3VydmVUb0N1YmljU2VnbWVudD4geworICAgICAgICBhdXRvIHBv
aW50MSA9IHBhcnNlRmxvYXRQb2ludChjdXJyZW50LCBlbmQpOworICAgICAgICBpZiAoIXBvaW50
MSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICAgICAgYXV0byBwb2lu
dDIgPSBwYXJzZUZsb2F0UG9pbnQoY3VycmVudCwgZW5kKTsKKyAgICAgICAgaWYgKCFwb2ludDIp
CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgICAgIGF1dG8gdGFyZ2V0
UG9pbnQgPSBwYXJzZUZsb2F0UG9pbnQoY3VycmVudCwgZW5kKTsKKyAgICAgICAgaWYgKCF0YXJn
ZXRQb2ludCkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICAgICAgQ3Vy
dmVUb0N1YmljU2VnbWVudCBzZWdtZW50OworICAgICAgICBzZWdtZW50LnBvaW50MSA9ICpwb2lu
dDE7CisgICAgICAgIHNlZ21lbnQucG9pbnQyID0gKnBvaW50MjsKKyAgICAgICAgc2VnbWVudC50
YXJnZXRQb2ludCA9ICp0YXJnZXRQb2ludDsKKyAgICAgICAgcmV0dXJuIHNlZ21lbnQ7CisgICAg
fTsKKwogICAgIGlmIChtX2lzOEJpdFNvdXJjZSkKLSAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXRQ
b2ludDMobV9jdXJyZW50Lm1fY2hhcmFjdGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4LCBwb2ludDEs
IHBvaW50MiwgdGFyZ2V0UG9pbnQpOwotICAgIHJldHVybiBwYXJzZUZsb2F0UG9pbnQzKG1fY3Vy
cmVudC5tX2NoYXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2LCBwb2ludDEsIHBvaW50Miwg
dGFyZ2V0UG9pbnQpOworICAgICAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3Rl
cjgsIG1fZW5kLm1fY2hhcmFjdGVyOCk7CisgICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9j
aGFyYWN0ZXIxNiwgbV9lbmQubV9jaGFyYWN0ZXIxNik7CiB9CiAKLWJvb2wgU1ZHUGF0aFN0cmlu
Z1NvdXJjZTo6cGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KEZsb2F0UG9pbnQmIHBvaW50
MSwgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCitPcHRpb25hbDxTVkdQYXRoU291cmNlOjpDdXJ2
ZVRvQ3ViaWNTbW9vdGhTZWdtZW50PiBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUN1cnZlVG9D
dWJpY1Ntb290aFNlZ21lbnQoKQogeworICAgIGF1dG8gaGVscGVyID0gW10oY29uc3QgYXV0byom
IGN1cnJlbnQsIGNvbnN0IGF1dG8qIGVuZCkgLT4gT3B0aW9uYWw8Q3VydmVUb0N1YmljU21vb3Ro
U2VnbWVudD4geworICAgICAgICBhdXRvIHBvaW50MiA9IHBhcnNlRmxvYXRQb2ludChjdXJyZW50
LCBlbmQpOworICAgICAgICBpZiAoIXBvaW50MikKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CisKKyAgICAgICAgYXV0byB0YXJnZXRQb2ludCA9IHBhcnNlRmxvYXRQb2ludChjdXJy
ZW50LCBlbmQpOworICAgICAgICBpZiAoIXRhcmdldFBvaW50KQorICAgICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKworICAgICAgICBDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50IHNlZ21l
bnQ7CisgICAgICAgIHNlZ21lbnQucG9pbnQyID0gKnBvaW50MjsKKyAgICAgICAgc2VnbWVudC50
YXJnZXRQb2ludCA9ICp0YXJnZXRQb2ludDsKKyAgICAgICAgcmV0dXJuIHNlZ21lbnQ7CisgICAg
fTsKKwogICAgIGlmIChtX2lzOEJpdFNvdXJjZSkKLSAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXRQ
b2ludDIobV9jdXJyZW50Lm1fY2hhcmFjdGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4LCBwb2ludDEs
IHRhcmdldFBvaW50KTsKLSAgICByZXR1cm4gcGFyc2VGbG9hdFBvaW50MihtX2N1cnJlbnQubV9j
aGFyYWN0ZXIxNiwgbV9lbmQubV9jaGFyYWN0ZXIxNiwgcG9pbnQxLCB0YXJnZXRQb2ludCk7Cisg
ICAgICAgIHJldHVybiBoZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyOCwgbV9lbmQubV9jaGFy
YWN0ZXI4KTsKKyAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjE2LCBtX2Vu
ZC5tX2NoYXJhY3RlcjE2KTsKIH0KIAotYm9vbCBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUN1
cnZlVG9RdWFkcmF0aWNTZWdtZW50KEZsb2F0UG9pbnQmIHBvaW50MiwgRmxvYXRQb2ludCYgdGFy
Z2V0UG9pbnQpCitPcHRpb25hbDxTVkdQYXRoU291cmNlOjpDdXJ2ZVRvUXVhZHJhdGljU2VnbWVu
dD4gU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCgpCiB7
CisgICAgYXV0byBoZWxwZXIgPSBbXShjb25zdCBhdXRvKiYgY3VycmVudCwgY29uc3QgYXV0byog
ZW5kKSAtPiBPcHRpb25hbDxDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudD4geworICAgICAgICBhdXRv
IHBvaW50MSA9IHBhcnNlRmxvYXRQb2ludChjdXJyZW50LCBlbmQpOworICAgICAgICBpZiAoIXBv
aW50MSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICAgICAgYXV0byB0
YXJnZXRQb2ludCA9IHBhcnNlRmxvYXRQb2ludChjdXJyZW50LCBlbmQpOworICAgICAgICBpZiAo
IXRhcmdldFBvaW50KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgICAg
ICBDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCBzZWdtZW50OworICAgICAgICBzZWdtZW50LnBvaW50
MSA9ICpwb2ludDE7CisgICAgICAgIHNlZ21lbnQudGFyZ2V0UG9pbnQgPSAqdGFyZ2V0UG9pbnQ7
CisgICAgICAgIHJldHVybiBzZWdtZW50OworICAgIH07CisKICAgICBpZiAobV9pczhCaXRTb3Vy
Y2UpCi0gICAgICAgIHJldHVybiBwYXJzZUZsb2F0UG9pbnQyKG1fY3VycmVudC5tX2NoYXJhY3Rl
cjgsIG1fZW5kLm1fY2hhcmFjdGVyOCwgcG9pbnQyLCB0YXJnZXRQb2ludCk7Ci0gICAgcmV0dXJu
IHBhcnNlRmxvYXRQb2ludDIobV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYsIG1fZW5kLm1fY2hhcmFj
dGVyMTYsIHBvaW50MiwgdGFyZ2V0UG9pbnQpOworICAgICAgICByZXR1cm4gaGVscGVyKG1fY3Vy
cmVudC5tX2NoYXJhY3RlcjgsIG1fZW5kLm1fY2hhcmFjdGVyOCk7CisgICAgcmV0dXJuIGhlbHBl
cihtX2N1cnJlbnQubV9jaGFyYWN0ZXIxNiwgbV9lbmQubV9jaGFyYWN0ZXIxNik7CiB9CiAKLWJv
b2wgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVu
dChGbG9hdFBvaW50JiB0YXJnZXRQb2ludCkKK09wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkN1cnZl
VG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50PiBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUN1cnZl
VG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KCkKIHsKKyAgICBhdXRvIGhlbHBlciA9IFtdKGNvbnN0
IGF1dG8qJiBjdXJyZW50LCBjb25zdCBhdXRvKiBlbmQpIC0+IE9wdGlvbmFsPEN1cnZlVG9RdWFk
cmF0aWNTbW9vdGhTZWdtZW50PiB7CisgICAgICAgIGF1dG8gdGFyZ2V0UG9pbnQgPSBwYXJzZUZs
b2F0UG9pbnQoY3VycmVudCwgZW5kKTsKKyAgICAgICAgaWYgKCF0YXJnZXRQb2ludCkKKyAgICAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICAgICAgQ3VydmVUb1F1YWRyYXRpY1Nt
b290aFNlZ21lbnQgc2VnbWVudDsKKyAgICAgICAgc2VnbWVudC50YXJnZXRQb2ludCA9ICp0YXJn
ZXRQb2ludDsKKyAgICAgICAgcmV0dXJuIHNlZ21lbnQ7CisgICAgfTsKKwogICAgIGlmIChtX2lz
OEJpdFNvdXJjZSkKLSAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXRQb2ludChtX2N1cnJlbnQubV9j
aGFyYWN0ZXI4LCBtX2VuZC5tX2NoYXJhY3RlcjgsIHRhcmdldFBvaW50KTsKLSAgICByZXR1cm4g
cGFyc2VGbG9hdFBvaW50KG1fY3VycmVudC5tX2NoYXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3Rl
cjE2LCB0YXJnZXRQb2ludCk7CisgICAgICAgIHJldHVybiBoZWxwZXIobV9jdXJyZW50Lm1fY2hh
cmFjdGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4KTsKKyAgICByZXR1cm4gaGVscGVyKG1fY3VycmVu
dC5tX2NoYXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2KTsKIH0KIAotdGVtcGxhdGUgPHR5
cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgYm9vbCBwYXJzZUFyY1RvU2VnbWVudEhlbHBl
cihjb25zdCBDaGFyYWN0ZXJUeXBlKiYgY3VycmVudCwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5k
LCBmbG9hdCYgcngsIGZsb2F0JiByeSwgZmxvYXQmIGFuZ2xlLCBib29sJiBsYXJnZUFyYywgYm9v
bCYgc3dlZXAsIEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQorT3B0aW9uYWw8U1ZHUGF0aFNvdXJj
ZTo6QXJjVG9TZWdtZW50PiBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUFyY1RvU2VnbWVudCgp
CiB7Ci0gICAgZmxvYXQgdG9YOwotICAgIGZsb2F0IHRvWTsKLSAgICBpZiAoIXBhcnNlTnVtYmVy
KGN1cnJlbnQsIGVuZCwgcngpCi0gICAgICAgIHx8ICFwYXJzZU51bWJlcihjdXJyZW50LCBlbmQs
IHJ5KQotICAgICAgICB8fCAhcGFyc2VOdW1iZXIoY3VycmVudCwgZW5kLCBhbmdsZSkKLSAgICAg
ICAgfHwgIXBhcnNlQXJjRmxhZyhjdXJyZW50LCBlbmQsIGxhcmdlQXJjKQotICAgICAgICB8fCAh
cGFyc2VBcmNGbGFnKGN1cnJlbnQsIGVuZCwgc3dlZXApCi0gICAgICAgIHx8ICFwYXJzZU51bWJl
cihjdXJyZW50LCBlbmQsIHRvWCkKLSAgICAgICAgfHwgIXBhcnNlTnVtYmVyKGN1cnJlbnQsIGVu
ZCwgdG9ZKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHRhcmdldFBvaW50ID0gRmxvYXRQ
b2ludCh0b1gsIHRvWSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19CisgICAgYXV0byBoZWxwZXIgPSBb
XShjb25zdCBhdXRvKiYgY3VycmVudCwgY29uc3QgYXV0byogZW5kKSAtPiBPcHRpb25hbDxBcmNU
b1NlZ21lbnQ+CisgICAgeworICAgICAgICBhdXRvIHJ4ID0gcGFyc2VOdW1iZXIoY3VycmVudCwg
ZW5kKTsKKyAgICAgICAgaWYgKCFyeCkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CisgICAgICAgIGF1dG8gcnkgPSBwYXJzZU51bWJlcihjdXJyZW50LCBlbmQpOworICAgICAgICBp
ZiAoIXJ5KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgYXV0byBh
bmdsZSA9IHBhcnNlTnVtYmVyKGN1cnJlbnQsIGVuZCk7CisgICAgICAgIGlmICghYW5nbGUpCisg
ICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBhdXRvIGxhcmdlQXJjID0g
cGFyc2VBcmNGbGFnKGN1cnJlbnQsIGVuZCk7CisgICAgICAgIGlmICghbGFyZ2VBcmMpCisgICAg
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBhdXRvIHN3ZWVwID0gcGFyc2VB
cmNGbGFnKGN1cnJlbnQsIGVuZCk7CisgICAgICAgIGlmICghc3dlZXApCisgICAgICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBhdXRvIHRhcmdldFBvaW50ID0gcGFyc2VGbG9h
dFBvaW50KGN1cnJlbnQsIGVuZCk7CisgICAgICAgIGlmICghdGFyZ2V0UG9pbnQpCisgICAgICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgICAgIEFyY1RvU2VnbWVudCBzZWdtZW50
OworICAgICAgICBzZWdtZW50LnJ4ID0gKnJ4OworICAgICAgICBzZWdtZW50LnJ5ID0gKnJ5Owor
ICAgICAgICBzZWdtZW50LmFuZ2xlID0gKmFuZ2xlOworICAgICAgICBzZWdtZW50LmxhcmdlQXJj
ID0gKmxhcmdlQXJjOworICAgICAgICBzZWdtZW50LnN3ZWVwID0gKnN3ZWVwOworICAgICAgICBz
ZWdtZW50LnRhcmdldFBvaW50ID0gKnRhcmdldFBvaW50OworICAgICAgICByZXR1cm4gc2VnbWVu
dDsKKyAgICB9OwogCi1ib29sIFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlQXJjVG9TZWdtZW50
KGZsb2F0JiByeCwgZmxvYXQmIHJ5LCBmbG9hdCYgYW5nbGUsIGJvb2wmIGxhcmdlQXJjLCBib29s
JiBzd2VlcCwgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCi17CiAgICAgaWYgKG1faXM4Qml0U291
cmNlKQotICAgICAgICByZXR1cm4gcGFyc2VBcmNUb1NlZ21lbnRIZWxwZXIobV9jdXJyZW50Lm1f
Y2hhcmFjdGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4LCByeCwgcnksIGFuZ2xlLCBsYXJnZUFyYywg
c3dlZXAsIHRhcmdldFBvaW50KTsKLSAgICByZXR1cm4gcGFyc2VBcmNUb1NlZ21lbnRIZWxwZXIo
bV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYsIG1fZW5kLm1fY2hhcmFjdGVyMTYsIHJ4LCByeSwgYW5n
bGUsIGxhcmdlQXJjLCBzd2VlcCwgdGFyZ2V0UG9pbnQpOworICAgICAgICByZXR1cm4gaGVscGVy
KG1fY3VycmVudC5tX2NoYXJhY3RlcjgsIG1fZW5kLm1fY2hhcmFjdGVyOCk7CisgICAgcmV0dXJu
IGhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXIxNiwgbV9lbmQubV9jaGFyYWN0ZXIxNik7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Bh
dGhTdHJpbmdTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0
aFN0cmluZ1NvdXJjZS5oCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHUGF0aFN0cmluZ1NvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxOCArMzIsMTggQEAg
cHVibGljOgogcHJpdmF0ZToKICAgICBib29sIGhhc01vcmVEYXRhKCkgY29uc3QgZmluYWw7CiAg
ICAgYm9vbCBtb3ZlVG9OZXh0VG9rZW4oKSBmaW5hbDsKLSAgICBib29sIHBhcnNlU1ZHU2VnbWVu
dFR5cGUoU1ZHUGF0aFNlZ1R5cGUmKSBmaW5hbDsKICAgICBTVkdQYXRoU2VnVHlwZSBuZXh0Q29t
bWFuZChTVkdQYXRoU2VnVHlwZSBwcmV2aW91c0NvbW1hbmQpIGZpbmFsOwogCi0gICAgYm9vbCBw
YXJzZU1vdmVUb1NlZ21lbnQoRmxvYXRQb2ludCYpIGZpbmFsOwotICAgIGJvb2wgcGFyc2VMaW5l
VG9TZWdtZW50KEZsb2F0UG9pbnQmKSBmaW5hbDsKLSAgICBib29sIHBhcnNlTGluZVRvSG9yaXpv
bnRhbFNlZ21lbnQoZmxvYXQmKSBmaW5hbDsKLSAgICBib29sIHBhcnNlTGluZVRvVmVydGljYWxT
ZWdtZW50KGZsb2F0JikgZmluYWw7Ci0gICAgYm9vbCBwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQo
RmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmLCBGbG9hdFBvaW50JikgZmluYWw7Ci0gICAgYm9vbCBw
YXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQoRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmKSBm
aW5hbDsKLSAgICBib29sIHBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQoRmxvYXRQb2ludCYs
IEZsb2F0UG9pbnQmKSBmaW5hbDsKLSAgICBib29sIHBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290
aFNlZ21lbnQoRmxvYXRQb2ludCYpIGZpbmFsOwotICAgIGJvb2wgcGFyc2VBcmNUb1NlZ21lbnQo
ZmxvYXQmLCBmbG9hdCYsIGZsb2F0JiwgYm9vbCYsIGJvb2wmLCBGbG9hdFBvaW50JikgZmluYWw7
CisgICAgT3B0aW9uYWw8U1ZHUGF0aFNlZ1R5cGU+IHBhcnNlU1ZHU2VnbWVudFR5cGUoKSBmaW5h
bDsKKyAgICBPcHRpb25hbDxNb3ZlVG9TZWdtZW50PiBwYXJzZU1vdmVUb1NlZ21lbnQoKSBmaW5h
bDsKKyAgICBPcHRpb25hbDxMaW5lVG9TZWdtZW50PiBwYXJzZUxpbmVUb1NlZ21lbnQoKSBmaW5h
bDsKKyAgICBPcHRpb25hbDxMaW5lVG9Ib3Jpem9udGFsU2VnbWVudD4gcGFyc2VMaW5lVG9Ib3Jp
em9udGFsU2VnbWVudCgpIGZpbmFsOworICAgIE9wdGlvbmFsPExpbmVUb1ZlcnRpY2FsU2VnbWVu
dD4gcGFyc2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnQoKSBmaW5hbDsKKyAgICBPcHRpb25hbDxDdXJ2
ZVRvQ3ViaWNTZWdtZW50PiBwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQoKSBmaW5hbDsKKyAgICBP
cHRpb25hbDxDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50PiBwYXJzZUN1cnZlVG9DdWJpY1Ntb290
aFNlZ21lbnQoKSBmaW5hbDsKKyAgICBPcHRpb25hbDxDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudD4g
cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCgpIGZpbmFsOworICAgIE9wdGlvbmFsPEN1cnZl
VG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50PiBwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdt
ZW50KCkgZmluYWw7CisgICAgT3B0aW9uYWw8QXJjVG9TZWdtZW50PiBwYXJzZUFyY1RvU2VnbWVu
dCgpIGZpbmFsOwogCiAgICAgU3RyaW5nIG1fc3RyaW5nOwogICAgIGJvb2wgbV9pczhCaXRTb3Vy
Y2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9pbnRMaXN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BvaW50TGlzdC5oCShyZXZpc2lvbiAyNjMxNzYpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9pbnRMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTYz
LDEyICs2MywxMyBAQCBwdWJsaWM6CiAgICAgICAgIGJvb2wgZGVsaW1QYXJzZWQgPSBmYWxzZTsK
ICAgICAgICAgd2hpbGUgKGN1ciA8IGVuZCkgewogICAgICAgICAgICAgZGVsaW1QYXJzZWQgPSBm
YWxzZTsKLSAgICAgICAgICAgIGZsb2F0IHhQb3MgPSAwLjBmOwotICAgICAgICAgICAgaWYgKCFw
YXJzZU51bWJlcihjdXIsIGVuZCwgeFBvcykpCisKKyAgICAgICAgICAgIGF1dG8geFBvcyA9IHBh
cnNlTnVtYmVyKGN1ciwgZW5kKTsKKyAgICAgICAgICAgIGlmICgheFBvcykKICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIGZsb2F0IHlQb3MgPSAwLjBmOwotICAg
ICAgICAgICAgaWYgKCFwYXJzZU51bWJlcihjdXIsIGVuZCwgeVBvcywgZmFsc2UpKQorICAgICAg
ICAgICAgYXV0byB5UG9zID0gcGFyc2VOdW1iZXIoY3VyLCBlbmQsIFN1ZmZpeFNraXBwaW5nUG9s
aWN5OjpEb250U2tpcCk7CisgICAgICAgICAgICBpZiAoIXlQb3MpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoY3VyLCBl
bmQpOwpAQCAtNzksNyArODAsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoY3VyLCBlbmQpOwogCi0gICAgICAgICAgICBhcHBlbmQo
U1ZHUG9pbnQ6OmNyZWF0ZSh7IHhQb3MsIHlQb3MgfSkpOworICAgICAgICAgICAgYXBwZW5kKFNW
R1BvaW50OjpjcmVhdGUoeyAqeFBvcywgKnlQb3MgfSkpOwogICAgICAgICB9CiAKICAgICAgICAg
cmV0dXJuICFkZWxpbVBhcnNlZDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUb09URkZv
bnRDb252ZXJzaW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVG9P
VEZGb250Q29udmVyc2lvbi5jcHAJKHJldmlzaW9uIDI2MzE3NikKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdUb09URkZvbnRDb252ZXJzaW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI5LDgg
KzIyOSw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBhZGRDb2RlcG9pbnRSYW5nZXMoY29uc3QgVW5p
Y29kZVJhbmdlcyYsIEhhc2hTZXQ8R2x5cGg+JiBnbHlwaFNldCkgY29uc3Q7CiAgICAgdm9pZCBh
ZGRDb2RlcG9pbnRzKGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgY29kZXBvaW50cywgSGFzaFNldDxH
bHlwaD4mIGdseXBoU2V0KSBjb25zdDsKICAgICB2b2lkIGFkZEdseXBoTmFtZXMoY29uc3QgSGFz
aFNldDxTdHJpbmc+JiBnbHlwaE5hbWVzLCBIYXNoU2V0PEdseXBoPiYgZ2x5cGhTZXQpIGNvbnN0
OwotICAgIHZvaWQgYWRkS2VybmluZ1BhaXIoVmVjdG9yPEtlcm5pbmdEYXRhPiYsIGNvbnN0IFNW
R0tlcm5pbmdQYWlyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc2l6ZV90IGFw
cGVuZEtFUk5TdWJ0YWJsZShib29sIChUOjoqYnVpbGRLZXJuaW5nUGFpcikoU1ZHS2VybmluZ1Bh
aXImKSBjb25zdCwgdWludDE2X3QgY292ZXJhZ2UpOworICAgIHZvaWQgYWRkS2VybmluZ1BhaXIo
VmVjdG9yPEtlcm5pbmdEYXRhPiYsIFNWR0tlcm5pbmdQYWlyJiYpIGNvbnN0OworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+IHNpemVfdCBhcHBlbmRLRVJOU3VidGFibGUoT3B0aW9uYWw8U1ZHS2Vy
bmluZ1BhaXI+IChUOjoqYnVpbGRLZXJuaW5nUGFpcikoKSBjb25zdCwgdWludDE2X3QgY292ZXJh
Z2UpOwogICAgIHNpemVfdCBmaW5pc2hBcHBlbmRpbmdLRVJOU3VidGFibGUoVmVjdG9yPEtlcm5p
bmdEYXRhPiwgdWludDE2X3QgY292ZXJhZ2UpOwogCiAgICAgdm9pZCBhcHBlbmRMaWdhdHVyZVN1
YnRhYmxlKHNpemVfdCBzdWJ0YWJsZVJlY29yZExvY2F0aW9uKTsKQEAgLTEwNDAsNyArMTA0MCw3
IEBAIHZvaWQgU1ZHVG9PVEZGb250Q29udmVydGVyOjphZGRHbHlwaE5hbWUKICAgICB9CiB9CiAK
LXZvaWQgU1ZHVG9PVEZGb250Q29udmVydGVyOjphZGRLZXJuaW5nUGFpcihWZWN0b3I8S2Vybmlu
Z0RhdGE+JiBkYXRhLCBjb25zdCBTVkdLZXJuaW5nUGFpciYga2VybmluZ1BhaXIpIGNvbnN0Cit2
b2lkIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6YWRkS2VybmluZ1BhaXIoVmVjdG9yPEtlcm5pbmdE
YXRhPiYgZGF0YSwgU1ZHS2VybmluZ1BhaXImJiBrZXJuaW5nUGFpcikgY29uc3QKIHsKICAgICBI
YXNoU2V0PEdseXBoPiBnbHlwaFNldDE7CiAgICAgSGFzaFNldDxHbHlwaD4gZ2x5cGhTZXQyOwpA
QCAtMTA1OSwxMyArMTA1OSwxMiBAQCB2b2lkIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6YWRkS2Vy
bmluZ1BhCiAgICAgfQogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgc2l6ZV90IFNW
R1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kS0VSTlN1YnRhYmxlKGJvb2wgKFQ6OipidWlsZEtl
cm5pbmdQYWlyKShTVkdLZXJuaW5nUGFpciYpIGNvbnN0LCB1aW50MTZfdCBjb3ZlcmFnZSkKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBzaXplX3QgU1ZHVG9PVEZGb250Q29udmVydGVyOjph
cHBlbmRLRVJOU3VidGFibGUoT3B0aW9uYWw8U1ZHS2VybmluZ1BhaXI+IChUOjoqYnVpbGRLZXJu
aW5nUGFpcikoKSBjb25zdCwgdWludDE2X3QgY292ZXJhZ2UpCiB7CiAgICAgVmVjdG9yPEtlcm5p
bmdEYXRhPiBrZXJuaW5nRGF0YTsKICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBjaGlsZHJlbk9m
VHlwZTxUPihtX2ZvbnRFbGVtZW50KSkgewotICAgICAgICBTVkdLZXJuaW5nUGFpciBrZXJuaW5n
UGFpcjsKLSAgICAgICAgaWYgKChlbGVtZW50LipidWlsZEtlcm5pbmdQYWlyKShrZXJuaW5nUGFp
cikpCi0gICAgICAgICAgICBhZGRLZXJuaW5nUGFpcihrZXJuaW5nRGF0YSwga2VybmluZ1BhaXIp
OworICAgICAgICBpZiAoYXV0byBrZXJuaW5nUGFpciA9IChlbGVtZW50LipidWlsZEtlcm5pbmdQ
YWlyKSgpKQorICAgICAgICAgICAgYWRkS2VybmluZ1BhaXIoa2VybmluZ0RhdGEsIFdURk1vdmUo
Kmtlcm5pbmdQYWlyKSk7CiAgICAgfQogICAgIHJldHVybiBmaW5pc2hBcHBlbmRpbmdLRVJOU3Vi
dGFibGUoV1RGTW92ZShrZXJuaW5nRGF0YSksIGNvdmVyYWdlKTsKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm1MaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1RyYW5zZm9ybUxpc3QuaAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1RyYW5zZm9ybUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDE3ICsx
MTQsMTggQEAgcHJpdmF0ZToKICAgICAgICAgYm9vbCBkZWxpbVBhcnNlZCA9IGZhbHNlOwogICAg
ICAgICB3aGlsZSAoc3RhcnQgPCBlbmQpIHsKICAgICAgICAgICAgIGRlbGltUGFyc2VkID0gZmFs
c2U7Ci0gICAgICAgICAgICBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZSB0eXBl
ID0gU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR19UUkFOU0ZPUk1fVU5LTk9XTjsKICAgICAgICAgICAg
IHNraXBPcHRpb25hbFNWR1NwYWNlcyhzdGFydCwgZW5kKTsKLQotICAgICAgICAgICAgaWYgKCFT
VkdUcmFuc2Zvcm1hYmxlOjpwYXJzZUFuZFNraXBUeXBlKHN0YXJ0LCBlbmQsIHR5cGUpKQorICAg
ICAgICAgICAgCisgICAgICAgICAgICBhdXRvIHR5cGUgPSBTVkdUcmFuc2Zvcm1hYmxlOjpwYXJz
ZUFuZFNraXBUeXBlKHN0YXJ0LCBlbmQpOworICAgICAgICAgICAgaWYgKCF0eXBlKQogICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgUmVmPFNWR1RyYW5zZm9ybT4g
dHJhbnNmb3JtID0gU1ZHVHJhbnNmb3JtOjpjcmVhdGUodHlwZSk7Ci0gICAgICAgICAgICBpZiAo
IVNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtVmFsdWUodHlwZSwgc3RhcnQsIGVuZCwg
dHJhbnNmb3JtLT52YWx1ZSgpKSkKKyAgICAgICAgICAgIGF1dG8gcGFyc2VkVHJhbnNmb3JtVmFs
dWUgPSBTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZVRyYW5zZm9ybVZhbHVlKCp0eXBlLCBzdGFydCwg
ZW5kKTsKKyAgICAgICAgICAgIGlmICghcGFyc2VkVHJhbnNmb3JtVmFsdWUpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICBhcHBlbmQoV1RGTW92ZSh0cmFuc2Zv
cm0pKTsKKyAgICAgICAgICAgIGFwcGVuZChTVkdUcmFuc2Zvcm06OmNyZWF0ZSgqcGFyc2VkVHJh
bnNmb3JtVmFsdWUpKTsKKwogICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHN0YXJ0
LCBlbmQpOwogICAgICAgICAgICAgaWYgKHN0YXJ0IDwgZW5kICYmICpzdGFydCA9PSAnLCcpIHsK
ICAgICAgICAgICAgICAgICBkZWxpbVBhcnNlZCA9IHRydWU7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHVHJhbnNmb3JtYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1RyYW5zZm9ybWFibGUuY3BwCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHVHJhbnNmb3JtYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDggKzQz
LDEyIEBAIHN0YXRpYyBpbnQgcGFyc2VUcmFuc2Zvcm1QYXJhbUxpc3QoY29uc3QKICAgICBza2lw
T3B0aW9uYWxTVkdTcGFjZXMocHRyLCBlbmQpOwogCiAgICAgd2hpbGUgKHJlcXVpcmVkUGFyYW1z
IDwgcmVxdWlyZWQpIHsKLSAgICAgICAgaWYgKHB0ciA+PSBlbmQgfHwgIXBhcnNlTnVtYmVyKHB0
ciwgZW5kLCB2YWx1ZXNbcmVxdWlyZWRQYXJhbXNdLCBmYWxzZSkpCisgICAgICAgIGlmIChwdHIg
Pj0gZW5kKQogICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBhdXRvIHBhcnNlZE51bWJl
ciA9IHBhcnNlTnVtYmVyKHB0ciwgZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNraXAp
OworICAgICAgICBpZiAoIXBhcnNlZE51bWJlcikKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAg
ICAgICAgdmFsdWVzW3JlcXVpcmVkUGFyYW1zXSA9ICpwYXJzZWROdW1iZXI7CiAgICAgICAgIHJl
cXVpcmVkUGFyYW1zKys7CiAgICAgICAgIGlmIChyZXF1aXJlZFBhcmFtcyA8IHJlcXVpcmVkKQog
ICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxpbWl0ZXIocHRyLCBlbmQpOwpA
QCAtNjMsOCArNjcsMTIgQEAgc3RhdGljIGludCBwYXJzZVRyYW5zZm9ybVBhcmFtTGlzdChjb25z
dAogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHdoaWxlIChv
cHRpb25hbFBhcmFtcyA8IG9wdGlvbmFsKSB7Ci0gICAgICAgICAgICBpZiAocHRyID49IGVuZCB8
fCAhcGFyc2VOdW1iZXIocHRyLCBlbmQsIHZhbHVlc1tyZXF1aXJlZFBhcmFtcyArIG9wdGlvbmFs
UGFyYW1zXSwgZmFsc2UpKQorICAgICAgICAgICAgaWYgKHB0ciA+PSBlbmQpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgYXV0byBwYXJzZWROdW1iZXIgPSBwYXJzZU51
bWJlcihwdHIsIGVuZCwgU3VmZml4U2tpcHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsKKyAgICAgICAg
ICAgIGlmICghcGFyc2VkTnVtYmVyKQogICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAg
ICAgICAgIHZhbHVlc1tyZXF1aXJlZFBhcmFtcyArIG9wdGlvbmFsUGFyYW1zXSA9ICpwYXJzZWRO
dW1iZXI7CiAgICAgICAgICAgICBvcHRpb25hbFBhcmFtcysrOwogICAgICAgICAgICAgaWYgKG9w
dGlvbmFsUGFyYW1zIDwgb3B0aW9uYWwpCiAgICAgICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZH
U3BhY2VzT3JEZWxpbWl0ZXIocHRyLCBlbmQpOwpAQCAtOTAsMTYgKzk4LDE3IEBAIHN0YXRpYyBj
b25zdCBpbnQgb3B0aW9uYWxWYWx1ZXNGb3JUeXBlW10KIC8vIFRoaXMgZGVzdHJ1Y3RvciBpcyBu
ZWVkZWQgaW4gb3JkZXIgdG8gbGluayBjb3JyZWN0bHkgd2l0aCBJbnRlbCBJQ0MuCiBTVkdUcmFu
c2Zvcm1hYmxlOjp+U1ZHVHJhbnNmb3JtYWJsZSgpID0gZGVmYXVsdDsKIAotYm9vbCBTVkdUcmFu
c2Zvcm1hYmxlOjpwYXJzZVRyYW5zZm9ybVZhbHVlKFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFu
c2Zvcm1UeXBlIHR5cGUsIGNvbnN0IFVDaGFyKiYgcHRyLCBjb25zdCBVQ2hhciogZW5kLCBTVkdU
cmFuc2Zvcm1WYWx1ZSYgdHJhbnNmb3JtKQorT3B0aW9uYWw8U1ZHVHJhbnNmb3JtVmFsdWU+IFNW
R1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtVmFsdWUoU1ZHVHJhbnNmb3JtVmFsdWU6OlNW
R1RyYW5zZm9ybVR5cGUgdHlwZSwgY29uc3QgVUNoYXIqJiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQp
CiB7CiAgICAgaWYgKHR5cGUgPT0gU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR19UUkFOU0ZPUk1fVU5L
Tk9XTikKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogCiAgICAgaW50IHZhbHVlQ291bnQgPSAwOwogICAgIGZsb2F0IHZhbHVlc1tdID0gezAsIDAs
IDAsIDAsIDAsIDB9OwogICAgIGlmICgodmFsdWVDb3VudCA9IHBhcnNlVHJhbnNmb3JtUGFyYW1M
aXN0KHB0ciwgZW5kLCB2YWx1ZXMsIHJlcXVpcmVkVmFsdWVzRm9yVHlwZVt0eXBlXSwgb3B0aW9u
YWxWYWx1ZXNGb3JUeXBlW3R5cGVdKSkgPCAwKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKKyAgICBTVkdUcmFuc2Zvcm1WYWx1ZSB0cmFuc2Zv
cm07CiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgY2FzZSBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZH
X1RSQU5TRk9STV9VTktOT1dOOgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTEz
Myw3ICsxNDIsNyBAQCBib29sIFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtVmFsCiAg
ICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiB0cmFu
c2Zvcm07CiB9CiAKIHN0YXRpYyBjb25zdCBVQ2hhciBza2V3WERlc2NbXSA9ICB7J3MnLCAnaycs
ICdlJywgJ3cnLCAnWCd9OwpAQCAtMTQzLDM5ICsxNTIsMzUgQEAgc3RhdGljIGNvbnN0IFVDaGFy
IHRyYW5zbGF0ZURlc2NbXSA9ICB7Jwogc3RhdGljIGNvbnN0IFVDaGFyIHJvdGF0ZURlc2NbXSA9
ICB7J3InLCAnbycsICd0JywgJ2EnLCAndCcsICdlJ307CiBzdGF0aWMgY29uc3QgVUNoYXIgbWF0
cml4RGVzY1tdID0gIHsnbScsICdhJywgJ3QnLCAncicsICdpJywgJ3gnfTsKIAotYm9vbCBTVkdU
cmFuc2Zvcm1hYmxlOjpwYXJzZUFuZFNraXBUeXBlKGNvbnN0IFVDaGFyKiYgY3VyclRyYW5zZm9y
bSwgY29uc3QgVUNoYXIqIGVuZCwgU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGUm
IHR5cGUpCitPcHRpb25hbDxTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZT4gU1ZH
VHJhbnNmb3JtYWJsZTo6cGFyc2VBbmRTa2lwVHlwZShjb25zdCBVQ2hhciomIGN1cnJUcmFuc2Zv
cm0sIGNvbnN0IFVDaGFyKiBlbmQpCiB7CiAgICAgaWYgKGN1cnJUcmFuc2Zvcm0gPj0gZW5kKQot
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAg
ICBpZiAoKmN1cnJUcmFuc2Zvcm0gPT0gJ3MnKSB7CiAgICAgICAgIGlmIChza2lwU3RyaW5nKGN1
cnJUcmFuc2Zvcm0sIGVuZCwgc2tld1hEZXNjLCBXVEZfQVJSQVlfTEVOR1RIKHNrZXdYRGVzYykp
KQotICAgICAgICAgICAgdHlwZSA9IFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX1NL
RVdYOworICAgICAgICAgICAgcmV0dXJuIFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JN
X1NLRVdYOwogICAgICAgICBlbHNlIGlmIChza2lwU3RyaW5nKGN1cnJUcmFuc2Zvcm0sIGVuZCwg
c2tld1lEZXNjLCBXVEZfQVJSQVlfTEVOR1RIKHNrZXdZRGVzYykpKQotICAgICAgICAgICAgdHlw
ZSA9IFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX1NLRVdZOworICAgICAgICAgICAg
cmV0dXJuIFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX1NLRVdZOwogICAgICAgICBl
bHNlIGlmIChza2lwU3RyaW5nKGN1cnJUcmFuc2Zvcm0sIGVuZCwgc2NhbGVEZXNjLCBXVEZfQVJS
QVlfTEVOR1RIKHNjYWxlRGVzYykpKQotICAgICAgICAgICAgdHlwZSA9IFNWR1RyYW5zZm9ybVZh
bHVlOjpTVkdfVFJBTlNGT1JNX1NDQUxFOworICAgICAgICAgICAgcmV0dXJuIFNWR1RyYW5zZm9y
bVZhbHVlOjpTVkdfVFJBTlNGT1JNX1NDQUxFOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0gZWxz
ZSBpZiAoc2tpcFN0cmluZyhjdXJyVHJhbnNmb3JtLCBlbmQsIHRyYW5zbGF0ZURlc2MsIFdURl9B
UlJBWV9MRU5HVEgodHJhbnNsYXRlRGVzYykpKQotICAgICAgICB0eXBlID0gU1ZHVHJhbnNmb3Jt
VmFsdWU6OlNWR19UUkFOU0ZPUk1fVFJBTlNMQVRFOworICAgICAgICByZXR1cm4gU1ZHVHJhbnNm
b3JtVmFsdWU6OlNWR19UUkFOU0ZPUk1fVFJBTlNMQVRFOwogICAgIGVsc2UgaWYgKHNraXBTdHJp
bmcoY3VyclRyYW5zZm9ybSwgZW5kLCByb3RhdGVEZXNjLCBXVEZfQVJSQVlfTEVOR1RIKHJvdGF0
ZURlc2MpKSkKLSAgICAgICAgdHlwZSA9IFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JN
X1JPVEFURTsKKyAgICAgICAgcmV0dXJuIFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JN
X1JPVEFURTsKICAgICBlbHNlIGlmIChza2lwU3RyaW5nKGN1cnJUcmFuc2Zvcm0sIGVuZCwgbWF0
cml4RGVzYywgV1RGX0FSUkFZX0xFTkdUSChtYXRyaXhEZXNjKSkpCi0gICAgICAgIHR5cGUgPSBT
VkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RSQU5TRk9STV9NQVRSSVg7Ci0gICAgZWxzZQotICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RS
QU5TRk9STV9NQVRSSVg7CiAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogfQogCiBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZSBTVkdUcmFuc2Zv
cm1hYmxlOjpwYXJzZVRyYW5zZm9ybVR5cGUoY29uc3QgU3RyaW5nJiB0eXBlU3RyaW5nKQogewot
ICAgIFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlIHR5cGUgPSBTVkdUcmFuc2Zv
cm1WYWx1ZTo6U1ZHX1RSQU5TRk9STV9VTktOT1dOOwogICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFy
YWN0ZXJzID0gU3RyaW5nVmlldyh0eXBlU3RyaW5nKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsK
ICAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycyA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKLSAg
ICBwYXJzZUFuZFNraXBUeXBlKGNoYXJhY3RlcnMsIGNoYXJhY3RlcnMgKyB0eXBlU3RyaW5nLmxl
bmd0aCgpLCB0eXBlKTsKLSAgICByZXR1cm4gdHlwZTsKKyAgICByZXR1cm4gcGFyc2VBbmRTa2lw
VHlwZShjaGFyYWN0ZXJzLCBjaGFyYWN0ZXJzICsgdHlwZVN0cmluZy5sZW5ndGgoKSkudmFsdWVP
cihTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RSQU5TRk9STV9VTktOT1dOKTsKIH0KIAogfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybWFibGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtYWJsZS5oCShyZXZpc2lvbiAyNjMxNzYpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMiw5ICszMiw5IEBAIGNsYXNzIFNWR1RyYW5zZm9ybWFibGUgOiBwdWJsaWMgU1ZHTG9jYXQK
IHB1YmxpYzoKICAgICB2aXJ0dWFsIH5TVkdUcmFuc2Zvcm1hYmxlKCk7CiAKLSAgICBzdGF0aWMg
Ym9vbCBwYXJzZVRyYW5zZm9ybVZhbHVlKFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1U
eXBlLCBjb25zdCBVQ2hhciomIHB0ciwgY29uc3QgVUNoYXIqIGVuZCwgU1ZHVHJhbnNmb3JtVmFs
dWUmKTsKKyAgICBzdGF0aWMgT3B0aW9uYWw8U1ZHVHJhbnNmb3JtVmFsdWU+IHBhcnNlVHJhbnNm
b3JtVmFsdWUoU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGUsIGNvbnN0IFVDaGFy
KiYgcHRyLCBjb25zdCBVQ2hhciogZW5kKTsKICAgICBzdGF0aWMgU1ZHVHJhbnNmb3JtVmFsdWU6
OlNWR1RyYW5zZm9ybVR5cGUgcGFyc2VUcmFuc2Zvcm1UeXBlKGNvbnN0IFN0cmluZyYpOwotICAg
IHN0YXRpYyBib29sIHBhcnNlQW5kU2tpcFR5cGUoY29uc3QgVUNoYXIqJiBjdXJyVHJhbnNmb3Jt
LCBjb25zdCBVQ2hhciogZW5kLCBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZSYp
OworICAgIHN0YXRpYyBPcHRpb25hbDxTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlw
ZT4gcGFyc2VBbmRTa2lwVHlwZShjb25zdCBVQ2hhciomIGN1cnJUcmFuc2Zvcm0sIGNvbnN0IFVD
aGFyKiBlbmQpOwogCiAgICAgQWZmaW5lVHJhbnNmb3JtIGxvY2FsQ29vcmRpbmF0ZVNwYWNlVHJh
bnNmb3JtKFNWR0xvY2F0YWJsZTo6Q1RNU2NvcGUpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGFu
aW1hdGVkTG9jYWxUcmFuc2Zvcm0oKTsgfQogICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGFu
aW1hdGVkTG9jYWxUcmFuc2Zvcm0oKSBjb25zdCA9IDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHVktlcm5FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHVktlcm5FbGVtZW50LmNwcAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1ZLZXJuRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDI0ICs0Myw0NCBA
QCBSZWY8U1ZHVktlcm5FbGVtZW50PiBTVkdWS2VybkVsZW1lbnQ6OmNyCiAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgU1ZHVktlcm5FbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKLWJv
b2wgU1ZHVktlcm5FbGVtZW50OjpidWlsZFZlcnRpY2FsS2VybmluZ1BhaXIoU1ZHS2VybmluZ1Bh
aXImIGtlcm5pbmdQYWlyKSBjb25zdAorT3B0aW9uYWw8U1ZHS2VybmluZ1BhaXI+IFNWR1ZLZXJu
RWxlbWVudDo6YnVpbGRWZXJ0aWNhbEtlcm5pbmdQYWlyKCkgY29uc3QKIHsKKyAgICAvLyBGSVhN
RTogQ2FuIHRoaXMgYmUgc2hhcmVkIHdpdGggU1ZHSEtlcm5FbGVtZW50OjpidWlsZFZlcnRpY2Fs
S2VybmluZ1BhaXI/CisKICAgICBhdXRvJiB1MSA9IGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6
YXRpb24oU1ZHTmFtZXM6OnUxQXR0cik7CiAgICAgYXV0byYgZzEgPSBhdHRyaWJ1dGVXaXRob3V0
U3luY2hyb25pemF0aW9uKFNWR05hbWVzOjpnMUF0dHIpOwogICAgIGF1dG8mIHUyID0gYXR0cmli
dXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihTVkdOYW1lczo6dTJBdHRyKTsKICAgICBhdXRvJiBn
MiA9IGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oU1ZHTmFtZXM6OmcyQXR0cik7CiAg
ICAgaWYgKCh1MS5pc0VtcHR5KCkgJiYgZzEuaXNFbXB0eSgpKSB8fCAodTIuaXNFbXB0eSgpICYm
IGcyLmlzRW1wdHkoKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKworICAgIGF1dG8gZ2x5cGhOYW1lMSA9IHBhcnNlR2x5cGhOYW1lKGcxKTsK
KyAgICBpZiAoIWdseXBoTmFtZTEpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAg
YXV0byBnbHlwaE5hbWUyID0gcGFyc2VHbHlwaE5hbWUoZzIpOworICAgIGlmICghZ2x5cGhOYW1l
MikKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBhdXRvIHVuaWNvZGVTdHJpbmcx
ID0gcGFyc2VLZXJuaW5nVW5pY29kZVN0cmluZyh1MSk7CisgICAgaWYgKCF1bmljb2RlU3RyaW5n
MSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBhdXRvIHVuaWNvZGVTdHJpbmcy
ID0gcGFyc2VLZXJuaW5nVW5pY29kZVN0cmluZyh1Mik7CisgICAgaWYgKCF1bmljb2RlU3RyaW5n
MikKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIGJvb2wgb2sgPSBmYWxzZTsK
KyAgICBhdXRvIGtlcm5pbmcgPSBhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFNWR05h
bWVzOjprQXR0cikuc3RyaW5nKCkudG9GbG9hdCgmb2spOworICAgIGlmICghb2spCisgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBpZiAocGFyc2VHbHlwaE5hbWUoZzEsIGtlcm5p
bmdQYWlyLmdseXBoTmFtZTEpCi0gICAgICAgICYmIHBhcnNlR2x5cGhOYW1lKGcyLCBrZXJuaW5n
UGFpci5nbHlwaE5hbWUyKQotICAgICAgICAmJiBwYXJzZUtlcm5pbmdVbmljb2RlU3RyaW5nKHUx
LCBrZXJuaW5nUGFpci51bmljb2RlUmFuZ2UxLCBrZXJuaW5nUGFpci51bmljb2RlTmFtZTEpCi0g
ICAgICAgICYmIHBhcnNlS2VybmluZ1VuaWNvZGVTdHJpbmcodTIsIGtlcm5pbmdQYWlyLnVuaWNv
ZGVSYW5nZTIsIGtlcm5pbmdQYWlyLnVuaWNvZGVOYW1lMikpIHsKLSAgICAgICAgYm9vbCBvayA9
IGZhbHNlOwotICAgICAgICBrZXJuaW5nUGFpci5rZXJuaW5nID0gYXR0cmlidXRlV2l0aG91dFN5
bmNocm9uaXphdGlvbihTVkdOYW1lczo6a0F0dHIpLnN0cmluZygpLnRvRmxvYXQoJm9rKTsKLSAg
ICAgICAgcmV0dXJuIG9rOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7CisgICAgU1ZHS2Vybmlu
Z1BhaXIga2VybmluZ1BhaXI7CisgICAga2VybmluZ1BhaXIuZ2x5cGhOYW1lMSA9IFdURk1vdmUo
KmdseXBoTmFtZTEpOworICAgIGtlcm5pbmdQYWlyLmdseXBoTmFtZTIgPSBXVEZNb3ZlKCpnbHlw
aE5hbWUyKTsKKyAgICBrZXJuaW5nUGFpci51bmljb2RlUmFuZ2UxID0gV1RGTW92ZSh1bmljb2Rl
U3RyaW5nMS0+Zmlyc3QpOworICAgIGtlcm5pbmdQYWlyLnVuaWNvZGVOYW1lMSA9IFdURk1vdmUo
dW5pY29kZVN0cmluZzEtPnNlY29uZCk7CisgICAga2VybmluZ1BhaXIudW5pY29kZVJhbmdlMiA9
IFdURk1vdmUodW5pY29kZVN0cmluZzItPmZpcnN0KTsKKyAgICBrZXJuaW5nUGFpci51bmljb2Rl
TmFtZTIgPSBXVEZNb3ZlKHVuaWNvZGVTdHJpbmcyLT5zZWNvbmQpOworICAgIGtlcm5pbmdQYWly
Lmtlcm5pbmcgPSBrZXJuaW5nOworICAgIHJldHVybiBrZXJuaW5nUGFpcjsKIH0KIAogfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ZLZXJuRWxlbWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdWS2VybkVsZW1lbnQuaAkocmV2aXNpb24gMjYzMTc2KQorKysg
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1ZLZXJuRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSw3ICszMSw3IEBAIGNsYXNzIFNWR1ZLZXJuRWxlbWVudCBmaW5hbCA6IHB1YmxpYyBTVkcKIHB1
YmxpYzoKICAgICBzdGF0aWMgUmVmPFNWR1ZLZXJuRWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxp
ZmllZE5hbWUmLCBEb2N1bWVudCYpOwogCi0gICAgYm9vbCBidWlsZFZlcnRpY2FsS2VybmluZ1Bh
aXIoU1ZHS2VybmluZ1BhaXImIGtlcm5pbmdQYWlyKSBjb25zdDsKKyAgICBPcHRpb25hbDxTVkdL
ZXJuaW5nUGFpcj4gYnVpbGRWZXJ0aWNhbEtlcm5pbmdQYWlyKCkgY29uc3Q7CiAKIHByaXZhdGU6
CiAgICAgU1ZHVktlcm5FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCYpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ZpZXdTcGVjLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHVmlld1NwZWMuY3BwCShyZXZpc2lvbiAyNjMxNzYpCisrKyBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHVmlld1NwZWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OSwx
MCArODksNyBAQCBib29sIFNWR1ZpZXdTcGVjOjpwYXJzZVZpZXdTcGVjKGNvbnN0IFN0CiAgICAg
ICAgICAgICAgICAgaWYgKGN1cnJWaWV3U3BlYyA+PSBlbmQgfHwgKmN1cnJWaWV3U3BlYyAhPSAn
KCcpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICBj
dXJyVmlld1NwZWMrKzsKLSAgICAgICAgICAgICAgICBGbG9hdFJlY3Qgdmlld0JveDsKLSAgICAg
ICAgICAgICAgICBpZiAoIVNWR0ZpdFRvVmlld0JveDo6cGFyc2VWaWV3Qm94KGN1cnJWaWV3U3Bl
YywgZW5kLCB2aWV3Qm94LCBmYWxzZSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgICAgICBzZXRWaWV3Qm94KHZpZXdCb3gpOworICAgICAgICAgICAgICAg
IHNldFZpZXdCb3goU1ZHRml0VG9WaWV3Qm94OjpwYXJzZVZpZXdCb3goY3VyclZpZXdTcGVjLCBl
bmQsIGZhbHNlKS52YWx1ZSgpKTsKICAgICAgICAgICAgICAgICBpZiAoY3VyclZpZXdTcGVjID49
IGVuZCB8fCAqY3VyclZpZXdTcGVjICE9ICcpJykKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICAgICAgICAgIGN1cnJWaWV3U3BlYysrOwpJbmRleDogU291cmNlL1dl
YkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1w
bC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1h
dGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbkltcGwuaAkocmV2aXNpb24gMjYzMTc2KQorKysgU291
cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0
aW9uSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTQsMTAgKzI1NCw4IEBAIHB1YmxpYzoKIAog
ICAgIE9wdGlvbmFsPGZsb2F0PiBjYWxjdWxhdGVEaXN0YW5jZShTVkdFbGVtZW50KiwgY29uc3Qg
U3RyaW5nJiBmcm9tLCBjb25zdCBTdHJpbmcmIHRvKSBjb25zdCBvdmVycmlkZQogICAgIHsKLSAg
ICAgICAgZmxvYXQgZnJvbU51bWJlciA9IDA7Ci0gICAgICAgIGZsb2F0IHRvTnVtYmVyID0gMDsK
LSAgICAgICAgcGFyc2VOdW1iZXJGcm9tU3RyaW5nKGZyb20sIGZyb21OdW1iZXIpOwotICAgICAg
ICBwYXJzZU51bWJlckZyb21TdHJpbmcodG8sIHRvTnVtYmVyKTsKKyAgICAgICAgZmxvYXQgZnJv
bU51bWJlciA9IHBhcnNlTnVtYmVyKGZyb20pLnZhbHVlT3IoMCk7CisgICAgICAgIGZsb2F0IHRv
TnVtYmVyID0gcGFyc2VOdW1iZXIodG8pLnZhbHVlT3IoMCk7CiAgICAgICAgIHJldHVybiBmYWJz
Zih0b051bWJlciAtIGZyb21OdW1iZXIpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
c3ZnL3Byb3BlcnRpZXMvU1ZHUHJvcGVydHlUcmFpdHMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdQcm9wZXJ0eVRyYWl0cy5oCShyZXZpc2lvbiAyNjMx
NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdQcm9wZXJ0eVRyYWl0cy5o
CSh3b3JraW5nIGNvcHkpCkBAIC03NSwxMCArNzUsMTAgQEAgc3RydWN0IFNWR1Byb3BlcnR5VHJh
aXRzPHN0ZDo6cGFpcjxpbnQsIAogICAgIHN0YXRpYyBzdGQ6OnBhaXI8aW50LCBpbnQ+IGluaXRp
YWxWYWx1ZSgpIHsgcmV0dXJuIHsgfTsgfQogICAgIHN0YXRpYyBzdGQ6OnBhaXI8aW50LCBpbnQ+
IGZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiAgICAgewotICAgICAgICBmbG9hdCBm
aXJzdE51bWJlciA9IDAsIHNlY29uZE51bWJlciA9IDA7Ci0gICAgICAgIGlmICghcGFyc2VOdW1i
ZXJPcHRpb25hbE51bWJlcihzdHJpbmcsIGZpcnN0TnVtYmVyLCBzZWNvbmROdW1iZXIpKQorICAg
ICAgICBhdXRvIHJlc3VsdCA9IHBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIoc3RyaW5nKTsKKyAg
ICAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICByZXR1
cm4gc3RkOjptYWtlX3BhaXIoc3RhdGljX2Nhc3Q8aW50Pihyb3VuZGYoZmlyc3ROdW1iZXIpKSwg
c3RhdGljX2Nhc3Q8aW50Pihyb3VuZGYoc2Vjb25kTnVtYmVyKSkpOworICAgICAgICByZXR1cm4g
c3RkOjptYWtlX3BhaXIoc3RhdGljX2Nhc3Q8aW50Pihyb3VuZGYocmVzdWx0LT5maXJzdCkpLCBz
dGF0aWNfY2FzdDxpbnQ+KHJvdW5kZihyZXN1bHQtPnNlY29uZCkpKTsKICAgICB9CiAgICAgc3Rh
dGljIE9wdGlvbmFsPHN0ZDo6cGFpcjxpbnQsIGludD4+IHBhcnNlKGNvbnN0IFF1YWxpZmllZE5h
bWUmLCBjb25zdCBTdHJpbmcmKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gaW5pdGlh
bFZhbHVlKCk7IH0KICAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nKHN0ZDo6cGFpcjxpbnQsIGlu
dD4pIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBlbXB0eVN0cmluZygpOyB9CkBAIC04
OSwxNyArODksMTEgQEAgc3RydWN0IFNWR1Byb3BlcnR5VHJhaXRzPGZsb2F0PiB7CiAgICAgc3Rh
dGljIGZsb2F0IGluaXRpYWxWYWx1ZSgpIHsgcmV0dXJuIDA7IH0KICAgICBzdGF0aWMgZmxvYXQg
ZnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKICAgICB7Ci0gICAgICAgIGZsb2F0IG51
bWJlciA9IDA7Ci0gICAgICAgIGlmICghcGFyc2VOdW1iZXJGcm9tU3RyaW5nKHN0cmluZywgbnVt
YmVyKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4gbnVtYmVyOworICAg
ICAgICByZXR1cm4gcGFyc2VOdW1iZXIoc3RyaW5nKS52YWx1ZU9yKDApOwogICAgIH0KICAgICBz
dGF0aWMgT3B0aW9uYWw8ZmxvYXQ+IHBhcnNlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBT
dHJpbmcmIHN0cmluZykKICAgICB7Ci0gICAgICAgIGZsb2F0IG51bWJlcjsKLSAgICAgICAgaWYg
KCFwYXJzZU51bWJlckZyb21TdHJpbmcoc3RyaW5nLCBudW1iZXIpKQotICAgICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAgcmV0dXJuIG51bWJlcjsKKyAgICAgICAgcmV0dXJu
IHBhcnNlTnVtYmVyKHN0cmluZyk7CiAgICAgfQogICAgIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmco
ZmxvYXQgdHlwZSkgeyByZXR1cm4gU3RyaW5nOjpudW1iZXIodHlwZSk7IH0KIH07CkBAIC0xMDks
MTAgKzEwMyw3IEBAIHN0cnVjdCBTVkdQcm9wZXJ0eVRyYWl0czxzdGQ6OnBhaXI8ZmxvYXQKICAg
ICBzdGF0aWMgc3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4gaW5pdGlhbFZhbHVlKCkgeyByZXR1cm4g
eyB9OyB9CiAgICAgc3RhdGljIHN0ZDo6cGFpcjxmbG9hdCwgZmxvYXQ+IGZyb21TdHJpbmcoY29u
c3QgU3RyaW5nJiBzdHJpbmcpCiAgICAgewotICAgICAgICBmbG9hdCBmaXJzdE51bWJlciA9IDAs
IHNlY29uZE51bWJlciA9IDA7Ci0gICAgICAgIGlmICghcGFyc2VOdW1iZXJPcHRpb25hbE51bWJl
cihzdHJpbmcsIGZpcnN0TnVtYmVyLCBzZWNvbmROdW1iZXIpKQotICAgICAgICAgICAgcmV0dXJu
IHsgfTsKLSAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGZpcnN0TnVtYmVyLCBzZWNvbmRO
dW1iZXIpOworICAgICAgICByZXR1cm4gcGFyc2VOdW1iZXJPcHRpb25hbE51bWJlcihzdHJpbmcp
LnZhbHVlT3Ioc3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4geyB9KTsKICAgICB9CiAgICAgc3RhdGlj
IE9wdGlvbmFsPHN0ZDo6cGFpcjxmbG9hdCwgZmxvYXQ+PiBwYXJzZShjb25zdCBRdWFsaWZpZWRO
YW1lJiwgY29uc3QgU3RyaW5nJikgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIGluaXRp
YWxWYWx1ZSgpOyB9CiAgICAgc3RhdGljIFN0cmluZyB0b1N0cmluZyhzdGQ6OnBhaXI8ZmxvYXQs
IGZsb2F0PikgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIGVtcHR5U3RyaW5nKCk7IH0K
QEAgLTEyMywxNyArMTE0LDExIEBAIHN0cnVjdCBTVkdQcm9wZXJ0eVRyYWl0czxGbG9hdFBvaW50
PiB7CiAgICAgc3RhdGljIEZsb2F0UG9pbnQgaW5pdGlhbFZhbHVlKCkgeyByZXR1cm4gRmxvYXRQ
b2ludCgpOyB9CiAgICAgc3RhdGljIEZsb2F0UG9pbnQgZnJvbVN0cmluZyhjb25zdCBTdHJpbmcm
IHN0cmluZykKICAgICB7Ci0gICAgICAgIEZsb2F0UG9pbnQgcG9pbnQ7Ci0gICAgICAgIGlmICgh
cGFyc2VQb2ludChzdHJpbmcsIHBvaW50KSkKLSAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAg
ICAgIHJldHVybiBwb2ludDsKKyAgICAgICAgcmV0dXJuIHBhcnNlUG9pbnQoc3RyaW5nKS52YWx1
ZU9yKEZsb2F0UG9pbnQgeyB9KTsKICAgICB9CiAgICAgc3RhdGljIE9wdGlvbmFsPEZsb2F0UG9p
bnQ+IHBhcnNlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBTdHJpbmcmIHN0cmluZykKICAg
ICB7Ci0gICAgICAgIEZsb2F0UG9pbnQgcG9pbnQ7Ci0gICAgICAgIGlmICghcGFyc2VQb2ludChz
dHJpbmcsIHBvaW50KSkKLSAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgICAg
IHJldHVybiBwb2ludDsKKyAgICAgICAgcmV0dXJuIHBhcnNlUG9pbnQoc3RyaW5nKTsKICAgICB9
CiAgICAgc3RhdGljIFN0cmluZyB0b1N0cmluZyhjb25zdCBGbG9hdFBvaW50JiB0eXBlKQogICAg
IHsKQEAgLTE0NiwxNyArMTMxLDExIEBAIHN0cnVjdCBTVkdQcm9wZXJ0eVRyYWl0czxGbG9hdFJl
Y3Q+IHsKICAgICBzdGF0aWMgRmxvYXRSZWN0IGluaXRpYWxWYWx1ZSgpIHsgcmV0dXJuIEZsb2F0
UmVjdCgpOyB9CiAgICAgc3RhdGljIEZsb2F0UmVjdCBmcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYg
c3RyaW5nKQogICAgIHsKLSAgICAgICAgRmxvYXRSZWN0IHJlY3Q7Ci0gICAgICAgIGlmICghcGFy
c2VSZWN0KHN0cmluZywgcmVjdCkpCi0gICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICBy
ZXR1cm4gcmVjdDsKKyAgICAgICAgcmV0dXJuIHBhcnNlUmVjdChzdHJpbmcpLnZhbHVlT3IoRmxv
YXRSZWN0IHsgfSk7CiAgICAgfQogICAgIHN0YXRpYyBPcHRpb25hbDxGbG9hdFJlY3Q+IHBhcnNl
KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBTdHJpbmcmIHN0cmluZykKICAgICB7Ci0gICAg
ICAgIEZsb2F0UmVjdCByZWN0OwotICAgICAgICBpZiAoIXBhcnNlUmVjdChzdHJpbmcsIHJlY3Qp
KQotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAgcmV0dXJuIHJlY3Q7
CisgICAgICAgIHJldHVybiBwYXJzZVJlY3Qoc3RyaW5nKTsKICAgICB9CiAgICAgc3RhdGljIFN0
cmluZyB0b1N0cmluZyhjb25zdCBGbG9hdFJlY3QmIHR5cGUpCiAgICAgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>402376</attachid>
            <date>2020-06-19 21:46:32 -0700</date>
            <delta_ts>2020-06-20 11:37:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213416-20200619214631.patch</filename>
            <type>text/plain</type>
            <size>143311</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MzI5NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3MSBAQAorMjAyMC0wNi0xOSAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQ29udmVydCBtdWNoIG9mIHRoZSBT
Vkcgc3RyaW5nIHBhcnNpbmcgY29kZSB0byB1c2UgT3B0aW9uYWwgYmFzZWQgcmV0dXJuIHZhbHVl
cyByYXRoZXIgdGhhbiBvdXQtcGFyYW1ldGVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEzNDE2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgV0lQCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogc3ZnL1NWR0FuZ2xlVmFsdWUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6cGFyc2VBbmdsZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5nbGVW
YWx1ZTo6c2V0VmFsdWVBc1N0cmluZyk6CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVNb3Rpb25F
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVNb3Rpb25FbGVtZW50Ojpj
YWxjdWxhdGVUb0F0RW5kT2ZEdXJhdGlvblZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0Fu
aW1hdGVNb3Rpb25FbGVtZW50OjpjYWxjdWxhdGVGcm9tQW5kVG9WYWx1ZXMpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OmNhbGN1bGF0ZUZyb21BbmRCeVZhbHVl
cyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6Y2FsY3VsYXRl
RGlzdGFuY2UpOgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OnBhcnNlS2V5U3BsaW5lcyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmlt
YXRpb25FbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisgICAgICAgICogc3ZnL1NWR0ZFQ29udm9s
dmVNYXRyaXhFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFQ29udm9sdmVNYXRy
aXhFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisgICAgICAgICogc3ZnL1NWR0ZFRGlmZnVzZUxp
Z2h0aW5nRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURpZmZ1c2VMaWdodGlu
Z0VsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKiBzdmcvU1ZHRkVEcm9wU2hhZG93
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURyb3BTaGFkb3dFbGVtZW50Ojpw
YXJzZUF0dHJpYnV0ZSk6CisgICAgICAgICogc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OnBhcnNlQXR0
cmlidXRlKToKKyAgICAgICAgKiBzdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRkVJbWFnZUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKiBz
dmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRU1v
cnBob2xvZ3lFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisgICAgICAgICogc3ZnL1NWR0ZFU3Bl
Y3VsYXJMaWdodGluZ0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVTcGVjdWxh
ckxpZ2h0aW5nRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAgICAgICAqIHN2Zy9TVkdGRVR1
cmJ1bGVuY2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFVHVyYnVsZW5jZUVs
ZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKiBzdmcvU1ZHRml0VG9WaWV3Qm94LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpdFRvVmlld0JveDo6cGFyc2VBdHRyaWJ1dGUpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRml0VG9WaWV3Qm94OjpwYXJzZVZpZXdCb3gpOgorICAgICAg
ICAqIHN2Zy9TVkdGaXRUb1ZpZXdCb3guaDoKKyAgICAgICAgKiBzdmcvU1ZHR2x5cGhSZWZFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlRmxvYXQpOgorICAgICAgICAqIHN2Zy9T
VkdIS2VybkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSEtlcm5FbGVtZW50Ojpi
dWlsZEhvcml6b250YWxLZXJuaW5nUGFpciBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0hLZXJu
RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdJbWFnZUVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHSW1hZ2VFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisgICAgICAgICogc3Zn
L1NWR0xlbmd0aFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0xlbmd0aFZhbHVlOjpz
ZXRWYWx1ZUFzU3RyaW5nKToKKyAgICAgICAgKiBzdmcvU1ZHTnVtYmVyTGlzdC5oOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHTnVtYmVyTGlzdDo6cGFyc2UpOgorICAgICAgICAqIHN2Zy9TVkdQYXJz
ZXJVdGlsaXRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2VuZXJpY1BhcnNlTnVtYmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OnBhcnNlTnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OmdlbmVy
aWNQYXJzZUFyY0ZsYWcpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VBcmNGbGFnKToKKyAgICAg
ICAgKFdlYkNvcmU6OnBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6cGFyc2VQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVJlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6cGFyc2VHbHlwaE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VVbmljb2Rl
UmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VLZXJuaW5nVW5pY29kZVN0cmluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpnZW5lcmljUGFyc2VGbG9hdFBvaW50KToKKyAgICAgICAgKFdlYkNv
cmU6OnBhcnNlRmxvYXRQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVNWR051bWJlcik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpwYXJzZU51bWJlckZyb21TdHJpbmcpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VEZWxpbWl0ZWRTdHJpbmcpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6cGFyc2VGbG9hdFBvaW50Mik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpwYXJzZUZsb2F0UG9pbnQzKTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvU1ZHUGFy
c2VyVXRpbGl0aWVzLmg6CisgICAgICAgIChXZWJDb3JlOjppc1NWR1NwYWNlKToKKyAgICAgICAg
KFdlYkNvcmU6OnNraXBPcHRpb25hbFNWR1NwYWNlcyk6CisgICAgICAgIChXZWJDb3JlOjpza2lw
T3B0aW9uYWxTVkdTcGFjZXNPckRlbGltaXRlcik6CisgICAgICAgICogc3ZnL1NWR1BhdGhCbGVu
ZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnB1bGxGcm9tU291cmNlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdQYXRoQmxlbmRlcjo6YmxlbmRNb3ZlVG9TZWdtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1BhdGhCbGVuZGVyOjpibGVuZExpbmVUb1NlZ21lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHUGF0aEJsZW5kZXI6OmJsZW5kTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJsZW5kZXI6OmJsZW5kTGluZVRvVmVydGljYWxTZWdtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCbGVuZGVyOjpibGVuZEN1cnZlVG9DdWJpY1Nl
Z21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJsZW5kZXI6OmJsZW5kQ3VydmVUb0N1
YmljU21vb3RoU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQmxlbmRlcjo6Ymxl
bmRDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQmxl
bmRlcjo6YmxlbmRDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdQYXRoQmxlbmRlcjo6YmxlbmRBcmNUb1NlZ21lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHUGF0aEJsZW5kZXI6OmNhbkJsZW5kUGF0aHMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
UGF0aEJsZW5kZXI6OmJsZW5kQW5pbWF0ZWRQYXRoKToKKyAgICAgICAgKiBzdmcvU1ZHUGF0aEJ5
dGVTdHJlYW1Tb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW1T
b3VyY2U6Om5leHRDb21tYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFt
U291cmNlOjpwYXJzZVNWR1NlZ21lbnRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhC
eXRlU3RyZWFtU291cmNlOjpwYXJzZU1vdmVUb1NlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlTGluZVRvU2VnbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VMaW5lVG9Ib3Jpem9udGFsU2Vn
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VM
aW5lVG9WZXJ0aWNhbFNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJl
YW1Tb3VyY2U6OnBhcnNlQ3VydmVUb0N1YmljU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZUN1cnZlVG9R
dWFkcmF0aWNTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFtU291
cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZUFyY1RvU2VnbWVudCk6CisgICAgICAg
ICogc3ZnL1NWR1BhdGhCeXRlU3RyZWFtU291cmNlLmg6CisgICAgICAgICogc3ZnL1NWR1BhdGhQ
YXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFBhcnNlcjo6cGFyc2VNb3ZlVG9T
ZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhQYXJzZXI6OnBhcnNlTGluZVRvU2Vn
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoUGFyc2VyOjpwYXJzZUxpbmVUb0hvcml6
b250YWxTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhQYXJzZXI6OnBhcnNlTGlu
ZVRvVmVydGljYWxTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhQYXJzZXI6OnBh
cnNlQ3VydmVUb0N1YmljU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoUGFyc2Vy
OjpwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
UGF0aFBhcnNlcjo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdQYXRoUGFyc2VyOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhQYXJzZXI6OnBhcnNlQXJjVG9TZWdtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1BhdGhQYXJzZXI6OnBhcnNlUGF0aERhdGEpOgorICAgICAgICAq
IHN2Zy9TVkdQYXRoUGFyc2VyLmg6CisgICAgICAgICogc3ZnL1NWR1BhdGhTZWdMaXN0U291cmNl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdMaXN0U291cmNlOjpuZXh0Q29tbWFu
ZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VTVkdTZWdt
ZW50VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VN
b3ZlVG9TZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdMaXN0U291cmNlOjpw
YXJzZUxpbmVUb1NlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0xpc3RTb3Vy
Y2U6OnBhcnNlTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
UGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNlTGluZVRvVmVydGljYWxTZWdtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNlQ3VydmVUb0N1
YmljU21vb3RoU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnTGlzdFNvdXJj
ZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQ
YXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VBcmNUb1NlZ21lbnQp
OgorICAgICAgICAqIHN2Zy9TVkdQYXRoU2VnTGlzdFNvdXJjZS5oOgorICAgICAgICAqIHN2Zy9T
VkdQYXRoU291cmNlLmg6CisgICAgICAgICogc3ZnL1NWR1BhdGhTdHJpbmdTb3VyY2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6bmV4dENvbW1hbmRIZWxwZXIpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUGF0aFN0cmluZ1NvdXJjZTo6bmV4dENvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6cGFy
c2VTVkdTZWdtZW50VHlwZUhlbHBlcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU3RyaW5n
U291cmNlOjpwYXJzZVNWR1NlZ21lbnRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhT
dHJpbmdTb3VyY2U6OnBhcnNlTW92ZVRvU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQ
YXRoU3RyaW5nU291cmNlOjpwYXJzZUxpbmVUb1NlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUxpbmVUb1ZlcnRpY2FsU2Vn
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUN1cnZl
VG9DdWJpY1NlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZTo6
cGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Bh
dGhTdHJpbmdTb3VyY2U6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3Ro
U2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUFy
Y1RvU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUFyY1RvU2VnbWVudEhlbHBlcik6
IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR1BhdGhTdHJpbmdTb3VyY2UuaDoKKyAgICAgICAg
KiBzdmcvU1ZHUG9pbnRMaXN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdQb2ludExpc3Q6OnBh
cnNlKToKKyAgICAgICAgKiBzdmcvU1ZHVG9PVEZGb250Q29udmVyc2lvbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFkZEtlcm5pbmdQYWlyIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kS0VSTlN1YnRh
YmxlKToKKyAgICAgICAgKiBzdmcvU1ZHVHJhbnNmb3JtTGlzdC5oOgorICAgICAgICAqIHN2Zy9T
VkdUcmFuc2Zvcm1hYmxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlVHJhbnNmb3JtUGFy
YW1MaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNm
b3JtVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VBbmRT
a2lwVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZVRyYW5z
Zm9ybVR5cGUpOgorICAgICAgICAqIHN2Zy9TVkdUcmFuc2Zvcm1hYmxlLmg6CisgICAgICAgICog
c3ZnL1NWR1ZLZXJuRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdWS2VybkVsZW1l
bnQ6OmJ1aWxkVmVydGljYWxLZXJuaW5nUGFpciBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR1ZL
ZXJuRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdWaWV3U3BlYy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdWaWV3U3BlYzo6cGFyc2VWaWV3U3BlYyk6CisgICAgICAgICogc3ZnL3Byb3Bl
cnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oOgorICAgICAgICAq
IHN2Zy9wcm9wZXJ0aWVzL1NWR1Byb3BlcnR5VHJhaXRzLmg6CisgICAgICAgIChXZWJDb3JlOjpT
VkdQcm9wZXJ0eVRyYWl0czxmbG9hdD46OmZyb21TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUHJvcGVydHlUcmFpdHM8ZmxvYXQ+OjpwYXJzZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQ
cm9wZXJ0eVRyYWl0czxGbG9hdFBvaW50Pjo6ZnJvbVN0cmluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdQcm9wZXJ0eVRyYWl0czxGbG9hdFBvaW50Pjo6cGFyc2UpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHUHJvcGVydHlUcmFpdHM8RmxvYXRSZWN0Pjo6ZnJvbVN0cmluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdQcm9wZXJ0eVRyYWl0czxGbG9hdFJlY3Q+OjpwYXJzZSk6CisKIDIwMjAtMDYt
MTkgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBBdm9pZCBpbml0
aWFsaXppbmcgUmVuZGVyVGhlbWUgc2luZ2xldG9uIHVubmVjZXNzYXJpbHkgaW4gdGhlIFVJUHJv
Y2VzcwpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMDA4Myw2ICsxMDA4
Myw3IEBACiAJCTdDODNERTg1MUQwNENCRDQwMEZFQkNGMyAvKiBTcHJpbmdTb2x2ZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3ByaW5nU29sdmVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTdDODVCMjAxMjJGQjA0ODUwMDMwNjg0RiAvKiBXSExTTFVubmFt
ZWRUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMVW5uYW1lZFR5cGUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Qzg1QjIwNDIyRkIwNjMyMDAzMDY4NEYgLyogV0hM
U0xVbm5hbWVkVHlwZUhhc2guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xVbm5hbWVkVHlwZUhhc2gu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0M4ODI0QzQyNDlEN0IwNTAwRUQ4RkM0
IC8qIFNWR1BhdGhTZWdWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
VkdQYXRoU2VnVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0M4RTM0OTIx
RTRBMzM4RTAwNTRDRTIzIC8qIEpTRE9NQ29udmVydEFueS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU0RPTUNvbnZlcnRBbnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJN0M4RTM0OTMxRTRBMzM4RTAwNTRDRTIzIC8qIEpTRE9NQ29udmVydEJhc2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNET01Db252ZXJ0QmFzZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3QzhFMzQ5NDFFNEEzMzhFMDA1NENFMjMgLyogSlNET01D
b252ZXJ0Qm9vbGVhbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0RPTUNv
bnZlcnRCb29sZWFuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNTE4Niw2ICsy
NTE4Nyw3IEBACiAJCQkJODRCNkI5NzYxMjBGMTNFNTAwQjhFRkFGIC8qIFNWR1BhdGhTZWdMaXN0
U291cmNlLmggKi8sCiAJCQkJQjIyMjc4RUYwRDAwQkYyMTAwNzFCNzgyIC8qIFNWR1BhdGhTZWdN
b3ZldG9BYnMuaWRsICovLAogCQkJCUIyMjI3OEYwMEQwMEJGMjEwMDcxQjc4MiAvKiBTVkdQYXRo
U2VnTW92ZXRvUmVsLmlkbCAqLywKKwkJCQk3Qzg4MjRDNDI0OUQ3QjA1MDBFRDhGQzQgLyogU1ZH
UGF0aFNlZ1ZhbHVlLmggKi8sCiAJCQkJODQzMDBCRDcxMjBDOUFENDAwMjE5NTRBIC8qIFNWR1Bh
dGhTb3VyY2UuaCAqLywKIAkJCQk4NDE5RDJCNzEyMEUwQzc2MDAxNDFGOEYgLyogU1ZHUGF0aFN0
cmluZ0J1aWxkZXIuY3BwICovLAogCQkJCTg0MTlEMkI4MTIwRTBDNzYwMDE0MUY4RiAvKiBTVkdQ
YXRoU3RyaW5nQnVpbGRlci5oICovLApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuZ2xl
VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmdsZVZhbHVl
LmNwcAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuZ2xlVmFs
dWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3IEBAIFN0cmluZyBTVkdBbmdsZVZh
bHVlOjp2YWx1ZUFzU3RyaW5nKCkgY28KICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgU1ZHQW5nbGVWYWx1ZTo6VHlwZSBwYXJzZUFuZ2xlVHlwZShjb25zdCBVQ2hhciog
cHRyLCBjb25zdCBVQ2hhciogZW5kKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4g
c3RhdGljIGlubGluZSBTVkdBbmdsZVZhbHVlOjpUeXBlIHBhcnNlQW5nbGVUeXBlKGNvbnN0IENo
YXJhY3RlclR5cGUqIHB0ciwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kKQogewogICAgIHN3aXRj
aCAoZW5kIC0gcHRyKSB7CiAgICAgY2FzZSAwOgpAQCAtMTA2LDIxICsxMDYsMjkgQEAgRXhjZXB0
aW9uT3I8dm9pZD4gU1ZHQW5nbGVWYWx1ZTo6c2V0VmFsdQogICAgICAgICByZXR1cm4geyB9Owog
ICAgIH0KIAotICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyh2YWx1
ZSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIqIHB0ciA9IHVwY29u
dmVydGVkQ2hhcmFjdGVyczsKLSAgICBjb25zdCBVQ2hhciogZW5kID0gcHRyICsgdmFsdWUubGVu
Z3RoKCk7Ci0KLSAgICBmbG9hdCB2YWx1ZUluU3BlY2lmaWVkVW5pdHMgPSAwOwotICAgIGlmICgh
cGFyc2VOdW1iZXIocHRyLCBlbmQsIHZhbHVlSW5TcGVjaWZpZWRVbml0cywgZmFsc2UpKQotICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKLQotICAgIGF1dG8gdW5pdFR5
cGUgPSBwYXJzZUFuZ2xlVHlwZShwdHIsIGVuZCk7Ci0gICAgaWYgKHVuaXRUeXBlID09IFNWR19B
TkdMRVRZUEVfVU5LTk9XTikKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9y
IH07CisgICAgYXV0byBoZWxwZXIgPSBbJl0oY29uc3QgYXV0byogcHRyLCBjb25zdCBhdXRvKiBl
bmQpIC0+IEV4Y2VwdGlvbk9yPHZvaWQ+IHsKKyAgICAgICAgYXV0byB2YWx1ZUluU3BlY2lmaWVk
VW5pdHMgPSBwYXJzZU51bWJlcihwdHIsIGVuZCwgU3VmZml4U2tpcHBpbmdQb2xpY3k6OkRvbnRT
a2lwKTsKKyAgICAgICAgaWYgKCF2YWx1ZUluU3BlY2lmaWVkVW5pdHMpCisgICAgICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKKworICAgICAgICBhdXRvIHVuaXRUeXBl
ID0gcGFyc2VBbmdsZVR5cGUocHRyLCBlbmQpOworICAgICAgICBpZiAodW5pdFR5cGUgPT0gU1ZH
QW5nbGVWYWx1ZTo6U1ZHX0FOR0xFVFlQRV9VTktOT1dOKQorICAgICAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiAKLSAgICBtX3VuaXRUeXBlID0gdW5pdFR5cGU7Ci0g
ICAgbV92YWx1ZUluU3BlY2lmaWVkVW5pdHMgPSB2YWx1ZUluU3BlY2lmaWVkVW5pdHM7Ci0gICAg
cmV0dXJuIHsgfTsKKyAgICAgICAgbV91bml0VHlwZSA9IHVuaXRUeXBlOworICAgICAgICBtX3Zh
bHVlSW5TcGVjaWZpZWRVbml0cyA9ICp2YWx1ZUluU3BlY2lmaWVkVW5pdHM7CisgICAgICAgIHJl
dHVybiB7IH07CisgICAgfTsKKworICAgIGlmICh2YWx1ZS5pczhCaXQoKSkgeworICAgICAgICBj
b25zdCBhdXRvKiBwdHIgPSB2YWx1ZS5jaGFyYWN0ZXJzOCgpOworICAgICAgICBjb25zdCBhdXRv
KiBlbmQgPSBwdHIgKyB2YWx1ZS5sZW5ndGgoKTsKKyAgICAgICAgcmV0dXJuIGhlbHBlcihwdHIs
IGVuZCk7CisgICAgfQorCisgICAgY29uc3QgYXV0byogcHRyID0gdmFsdWUuY2hhcmFjdGVyczE2
KCk7CisgICAgY29uc3QgYXV0byogZW5kID0gcHRyICsgdmFsdWUubGVuZ3RoKCk7CisgICAgcmV0
dXJuIGhlbHBlcihwdHIsIGVuZCk7CiB9CiAKIEV4Y2VwdGlvbk9yPHZvaWQ+IFNWR0FuZ2xlVmFs
dWU6Om5ld1ZhbHVlU3BlY2lmaWVkVW5pdHModW5zaWduZWQgc2hvcnQgdW5pdFR5cGUsIGZsb2F0
IHZhbHVlSW5TcGVjaWZpZWRVbml0cykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmlt
YXRlTW90aW9uRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTYxLDcgKzE2MSw3IEBAIHZvaWQgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OnN0b3BBbmltYXQK
IAogYm9vbCBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6Y2FsY3VsYXRlVG9BdEVuZE9mRHVyYXRp
b25WYWx1ZShjb25zdCBTdHJpbmcmIHRvQXRFbmRPZkR1cmF0aW9uU3RyaW5nKQogewotICAgIHBh
cnNlUG9pbnQodG9BdEVuZE9mRHVyYXRpb25TdHJpbmcsIG1fdG9Qb2ludEF0RW5kT2ZEdXJhdGlv
bik7CisgICAgbV90b1BvaW50QXRFbmRPZkR1cmF0aW9uID0gcGFyc2VQb2ludCh0b0F0RW5kT2ZE
dXJhdGlvblN0cmluZykudmFsdWVPcihGbG9hdFBvaW50IHsgfSk7CiAgICAgbV9oYXNUb1BvaW50
QXRFbmRPZkR1cmF0aW9uID0gdHJ1ZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTE2OSw4ICsx
NjksOCBAQCBib29sIFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OjpjYWxjdWxhdGVUCiBib29sIFNW
R0FuaW1hdGVNb3Rpb25FbGVtZW50OjpjYWxjdWxhdGVGcm9tQW5kVG9WYWx1ZXMoY29uc3QgU3Ry
aW5nJiBmcm9tU3RyaW5nLCBjb25zdCBTdHJpbmcmIHRvU3RyaW5nKQogewogICAgIG1faGFzVG9Q
b2ludEF0RW5kT2ZEdXJhdGlvbiA9IGZhbHNlOwotICAgIHBhcnNlUG9pbnQoZnJvbVN0cmluZywg
bV9mcm9tUG9pbnQpOwotICAgIHBhcnNlUG9pbnQodG9TdHJpbmcsIG1fdG9Qb2ludCk7CisgICAg
bV9mcm9tUG9pbnQgPSBwYXJzZVBvaW50KGZyb21TdHJpbmcpLnZhbHVlT3IoRmxvYXRQb2ludCB7
IH0pOworICAgIG1fdG9Qb2ludCA9IHBhcnNlUG9pbnQodG9TdHJpbmcpLnZhbHVlT3IoRmxvYXRQ
b2ludCB7IH0pOwogICAgIHJldHVybiB0cnVlOwogfQogICAgIApAQCAtMTc5LDkgKzE3OSw4IEBA
IGJvb2wgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OmNhbGN1bGF0ZUYKICAgICBtX2hhc1RvUG9p
bnRBdEVuZE9mRHVyYXRpb24gPSBmYWxzZTsKICAgICBpZiAoYW5pbWF0aW9uTW9kZSgpID09IEFu
aW1hdGlvbk1vZGU6OkJ5ICYmICFpc0FkZGl0aXZlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBwYXJzZVBvaW50KGZyb21TdHJpbmcsIG1fZnJvbVBvaW50KTsKLSAgICBGbG9hdFBvaW50
IGJ5UG9pbnQ7Ci0gICAgcGFyc2VQb2ludChieVN0cmluZywgYnlQb2ludCk7CisgICAgbV9mcm9t
UG9pbnQgPSBwYXJzZVBvaW50KGZyb21TdHJpbmcpLnZhbHVlT3IoRmxvYXRQb2ludCB7IH0pOwor
ICAgIGF1dG8gYnlQb2ludCA9IHBhcnNlUG9pbnQoYnlTdHJpbmcpLnZhbHVlT3IoRmxvYXRQb2lu
dCB7IH0pOwogICAgIG1fdG9Qb2ludCA9IEZsb2F0UG9pbnQobV9mcm9tUG9pbnQueCgpICsgYnlQ
b2ludC54KCksIG1fZnJvbVBvaW50LnkoKSArIGJ5UG9pbnQueSgpKTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KQEAgLTI3NSwxMyArMjc0LDEzIEBAIHZvaWQgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6
OmFwcGx5UmVzdWwKIAogT3B0aW9uYWw8ZmxvYXQ+IFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50Ojpj
YWxjdWxhdGVEaXN0YW5jZShjb25zdCBTdHJpbmcmIGZyb21TdHJpbmcsIGNvbnN0IFN0cmluZyYg
dG9TdHJpbmcpCiB7Ci0gICAgRmxvYXRQb2ludCBmcm9tOwotICAgIEZsb2F0UG9pbnQgdG87Ci0g
ICAgaWYgKCFwYXJzZVBvaW50KGZyb21TdHJpbmcsIGZyb20pKQorICAgIGF1dG8gZnJvbSA9IHBh
cnNlUG9pbnQoZnJvbVN0cmluZyk7CisgICAgaWYgKCFmcm9tKQogICAgICAgICByZXR1cm4geyB9
OwotICAgIGlmICghcGFyc2VQb2ludCh0b1N0cmluZywgdG8pKQorICAgIGF1dG8gdG8gPSBwYXJz
ZVBvaW50KHRvU3RyaW5nKTsKKyAgICBpZiAoIXRvKQogICAgICAgICByZXR1cm4geyB9OwotICAg
IEZsb2F0U2l6ZSBkaWZmID0gdG8gLSBmcm9tOworICAgIGF1dG8gZGlmZiA9ICp0byAtICpmcm9t
OwogICAgIHJldHVybiBzdGQ6Omh5cG90KGRpZmYud2lkdGgoKSwgZGlmZi5oZWlnaHQoKSk7CiB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDI2MzE3NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsMTEgKzc3LDEwIEBAIGZhaWw6CiAgICAgcmVzdWx0
LmNsZWFyKCk7CiB9CiAKLXN0YXRpYyB2b2lkIHBhcnNlS2V5U3BsaW5lcyhjb25zdCBTdHJpbmcm
IHBhcnNlLCBWZWN0b3I8VW5pdEJlemllcj4mIHJlc3VsdCkKK3N0YXRpYyBPcHRpb25hbDxWZWN0
b3I8VW5pdEJlemllcj4+IHBhcnNlS2V5U3BsaW5lcyhjb25zdCBTdHJpbmcmIHBhcnNlKQogewot
ICAgIHJlc3VsdC5jbGVhcigpOwogICAgIGlmIChwYXJzZS5pc0VtcHR5KCkpCi0gICAgICAgIHJl
dHVybjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIGF1dG8gdXBjb252ZXJ0
ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyhwYXJzZSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7
CiAgICAgY29uc3QgVUNoYXIqIGN1ciA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKQEAgLTg5LDMy
ICs4OCwyNiBAQCBzdGF0aWMgdm9pZCBwYXJzZUtleVNwbGluZXMoY29uc3QgU3RyaW5nCiAKICAg
ICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoY3VyLCBlbmQpOwogCisgICAgVmVjdG9yPFVuaXRCZXpp
ZXI+IHJlc3VsdDsKKwogICAgIGJvb2wgZGVsaW1QYXJzZWQgPSBmYWxzZTsKICAgICB3aGlsZSAo
Y3VyIDwgZW5kKSB7CiAgICAgICAgIGRlbGltUGFyc2VkID0gZmFsc2U7Ci0gICAgICAgIGZsb2F0
IHBvc0EgPSAwOwotICAgICAgICBpZiAoIXBhcnNlTnVtYmVyKGN1ciwgZW5kLCBwb3NBKSkgewot
ICAgICAgICAgICAgcmVzdWx0LmNsZWFyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLQotICAgICAgICBmbG9hdCBwb3NCID0gMDsKLSAgICAgICAgaWYgKCFwYXJzZU51bWJlcihj
dXIsIGVuZCwgcG9zQikpIHsKLSAgICAgICAgICAgIHJlc3VsdC5jbGVhcigpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZmxvYXQgcG9zQyA9IDA7Ci0gICAgICAg
IGlmICghcGFyc2VOdW1iZXIoY3VyLCBlbmQsIHBvc0MpKSB7Ci0gICAgICAgICAgICByZXN1bHQu
Y2xlYXIoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGZsb2F0
IHBvc0QgPSAwOwotICAgICAgICBpZiAoIXBhcnNlTnVtYmVyKGN1ciwgZW5kLCBwb3NELCBmYWxz
ZSkpIHsKLSAgICAgICAgICAgIHJlc3VsdC5jbGVhcigpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9CisgICAgICAgIGF1dG8gcG9zQSA9IHBhcnNlTnVtYmVyKGN1ciwgZW5kKTsKKyAg
ICAgICAgaWYgKCFwb3NBKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAg
ICAgICBhdXRvIHBvc0IgPSBwYXJzZU51bWJlcihjdXIsIGVuZCk7CisgICAgICAgIGlmICghcG9z
QikKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICAgICAgYXV0byBwb3ND
ID0gcGFyc2VOdW1iZXIoY3VyLCBlbmQpOworICAgICAgICBpZiAoIXBvc0MpCisgICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgICAgIGF1dG8gcG9zRCA9IHBhcnNlTnVtYmVy
KGN1ciwgZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNraXApOworICAgICAgICBpZiAo
IXBvc0QpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgICAgIHNraXBP
cHRpb25hbFNWR1NwYWNlcyhjdXIsIGVuZCk7CiAKQEAgLTEyMiwxMiArMTE1LDE2IEBAIHN0YXRp
YyB2b2lkIHBhcnNlS2V5U3BsaW5lcyhjb25zdCBTdHJpbmcKICAgICAgICAgICAgIGRlbGltUGFy
c2VkID0gdHJ1ZTsKICAgICAgICAgICAgIGN1cisrOwogICAgICAgICB9CisKICAgICAgICAgc2tp
cE9wdGlvbmFsU1ZHU3BhY2VzKGN1ciwgZW5kKTsKIAotICAgICAgICByZXN1bHQuYXBwZW5kKFVu
aXRCZXppZXIocG9zQSwgcG9zQiwgcG9zQywgcG9zRCkpOworICAgICAgICByZXN1bHQuYXBwZW5k
KFVuaXRCZXppZXIgeyAqcG9zQSwgKnBvc0IsICpwb3NDLCAqcG9zRCB9KTsKICAgICB9CisKICAg
ICBpZiAoIShjdXIgPT0gZW5kICYmICFkZWxpbVBhcnNlZCkpCi0gICAgICAgIHJlc3VsdC5jbGVh
cigpOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAogYm9vbCBTVkdBbmltYXRpb25FbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25z
dCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKQEAgLTE4MCw3ICsxNzcsOCBAQCB2b2lkIFNWR0Fu
aW1hdGlvbkVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlCiAgICAgfQogCiAgICAgaWYgKG5hbWUgPT0g
U1ZHTmFtZXM6OmtleVNwbGluZXNBdHRyKSB7Ci0gICAgICAgIHBhcnNlS2V5U3BsaW5lcyh2YWx1
ZSwgbV9rZXlTcGxpbmVzKTsKKyAgICAgICAgaWYgKGF1dG8ga2V5U3BsaW5lcyA9IHBhcnNlS2V5
U3BsaW5lcyh2YWx1ZSkpCisgICAgICAgICAgICBtX2tleVNwbGluZXMgPSBXVEZNb3ZlKCprZXlT
cGxpbmVzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuY3BwCShyZXZpc2lvbiAyNjMx
NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02NywxMCArNjcsMTAgQEAgdm9pZCBTVkdGRUNvbnZvbHZlTWF0
cml4RWxlbWVudDo6cGFyc2VBdAogICAgIH0KIAogICAgIGlmIChuYW1lID09IFNWR05hbWVzOjpv
cmRlckF0dHIpIHsKLSAgICAgICAgZmxvYXQgeCwgeTsKLSAgICAgICAgaWYgKHBhcnNlTnVtYmVy
T3B0aW9uYWxOdW1iZXIodmFsdWUsIHgsIHkpICYmIHggPj0gMSAmJiB5ID49IDEpIHsKLSAgICAg
ICAgICAgIG1fb3JkZXJYLT5zZXRCYXNlVmFsSW50ZXJuYWwoeCk7Ci0gICAgICAgICAgICBtX29y
ZGVyWS0+c2V0QmFzZVZhbEludGVybmFsKHkpOworICAgICAgICBhdXRvIHJlc3VsdCA9IHBhcnNl
TnVtYmVyT3B0aW9uYWxOdW1iZXIodmFsdWUpOworICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3Vs
dC0+Zmlyc3QgPj0gMSAmJiByZXN1bHQtPnNlY29uZCA+PSAxKSB7CisgICAgICAgICAgICBtX29y
ZGVyWC0+c2V0QmFzZVZhbEludGVybmFsKHJlc3VsdC0+Zmlyc3QpOworICAgICAgICAgICAgbV9v
cmRlclktPnNldEJhc2VWYWxJbnRlcm5hbChyZXN1bHQtPnNlY29uZCk7CiAgICAgICAgIH0gZWxz
ZQogICAgICAgICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVwb3J0V2Fy
bmluZygiZmVDb252b2x2ZU1hdHJpeDogcHJvYmxlbSBwYXJzaW5nIG9yZGVyPVwiIiArIHZhbHVl
ICsgIlwiLiBGaWx0ZXJlZCBlbGVtZW50IHdpbGwgbm90IGJlIGRpc3BsYXllZC4iKTsKICAgICAg
ICAgcmV0dXJuOwpAQCAtMTE1LDEwICsxMTUsMTAgQEAgdm9pZCBTVkdGRUNvbnZvbHZlTWF0cml4
RWxlbWVudDo6cGFyc2VBdAogICAgIH0KIAogICAgIGlmIChuYW1lID09IFNWR05hbWVzOjprZXJu
ZWxVbml0TGVuZ3RoQXR0cikgewotICAgICAgICBmbG9hdCB4LCB5OwotICAgICAgICBpZiAocGFy
c2VOdW1iZXJPcHRpb25hbE51bWJlcih2YWx1ZSwgeCwgeSkgJiYgeCA+IDAgJiYgeSA+IDApIHsK
LSAgICAgICAgICAgIG1fa2VybmVsVW5pdExlbmd0aFgtPnNldEJhc2VWYWxJbnRlcm5hbCh4KTsK
LSAgICAgICAgICAgIG1fa2VybmVsVW5pdExlbmd0aFktPnNldEJhc2VWYWxJbnRlcm5hbCh5KTsK
KyAgICAgICAgYXV0byByZXN1bHQgPSBwYXJzZU51bWJlck9wdGlvbmFsTnVtYmVyKHZhbHVlKTsK
KyAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQtPmZpcnN0ID4gMCAmJiByZXN1bHQtPnNlY29u
ZCA+IDApIHsKKyAgICAgICAgICAgIG1fa2VybmVsVW5pdExlbmd0aFgtPnNldEJhc2VWYWxJbnRl
cm5hbChyZXN1bHQtPmZpcnN0KTsKKyAgICAgICAgICAgIG1fa2VybmVsVW5pdExlbmd0aFktPnNl
dEJhc2VWYWxJbnRlcm5hbChyZXN1bHQtPnNlY29uZCk7CiAgICAgICAgIH0gZWxzZQogICAgICAg
ICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVwb3J0V2FybmluZygiZmVD
b252b2x2ZU1hdHJpeDogcHJvYmxlbSBwYXJzaW5nIGtlcm5lbFVuaXRMZW5ndGg9XCIiICsgdmFs
dWUgKyAiXCIuIEZpbHRlcmVkIGVsZW1lbnQgd2lsbCBub3QgYmUgZGlzcGxheWVkLiIpOwogICAg
ICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRp
bmdFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZm
dXNlTGlnaHRpbmdFbGVtZW50LmNwcAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTcxLDEwICs3MSw5IEBAIHZvaWQgU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjpwYXJzZUEK
ICAgICB9CiAKICAgICBpZiAobmFtZSA9PSBTVkdOYW1lczo6a2VybmVsVW5pdExlbmd0aEF0dHIp
IHsKLSAgICAgICAgZmxvYXQgeCwgeTsKLSAgICAgICAgaWYgKHBhcnNlTnVtYmVyT3B0aW9uYWxO
dW1iZXIodmFsdWUsIHgsIHkpKSB7Ci0gICAgICAgICAgICBtX2tlcm5lbFVuaXRMZW5ndGhYLT5z
ZXRCYXNlVmFsSW50ZXJuYWwoeCk7Ci0gICAgICAgICAgICBtX2tlcm5lbFVuaXRMZW5ndGhZLT5z
ZXRCYXNlVmFsSW50ZXJuYWwoeSk7CisgICAgICAgIGlmIChhdXRvIHJlc3VsdCA9IHBhcnNlTnVt
YmVyT3B0aW9uYWxOdW1iZXIodmFsdWUpKSB7CisgICAgICAgICAgICBtX2tlcm5lbFVuaXRMZW5n
dGhYLT5zZXRCYXNlVmFsSW50ZXJuYWwocmVzdWx0LT5maXJzdCk7CisgICAgICAgICAgICBtX2tl
cm5lbFVuaXRMZW5ndGhZLT5zZXRCYXNlVmFsSW50ZXJuYWwocmVzdWx0LT5zZWNvbmQpOwogICAg
ICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVEcm9wU2hhZG93RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuY3BwCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTYxLDEwICs2MSw5IEBAIHZvaWQgU1ZHRkVEcm9wU2hhZG93RWxlbWVudDo6c2V0U3RkRGV2
aWEKIHZvaWQgU1ZHRkVEcm9wU2hhZG93RWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVh
bGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbVN0cmluZyYgdmFsdWUpCiB7CiAgICAgaWYgKG5h
bWUgPT0gU1ZHTmFtZXM6OnN0ZERldmlhdGlvbkF0dHIpIHsKLSAgICAgICAgZmxvYXQgeCwgeTsK
LSAgICAgICAgaWYgKHBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIodmFsdWUsIHgsIHkpKSB7Ci0g
ICAgICAgICAgICBtX3N0ZERldmlhdGlvblgtPnNldEJhc2VWYWxJbnRlcm5hbCh4KTsKLSAgICAg
ICAgICAgIG1fc3RkRGV2aWF0aW9uWS0+c2V0QmFzZVZhbEludGVybmFsKHkpOworICAgICAgICBp
ZiAoYXV0byByZXN1bHQgPSBwYXJzZU51bWJlck9wdGlvbmFsTnVtYmVyKHZhbHVlKSkgeworICAg
ICAgICAgICAgbV9zdGREZXZpYXRpb25YLT5zZXRCYXNlVmFsSW50ZXJuYWwocmVzdWx0LT5maXJz
dCk7CisgICAgICAgICAgICBtX3N0ZERldmlhdGlvblktPnNldEJhc2VWYWxJbnRlcm5hbChyZXN1
bHQtPnNlY29uZCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwCShyZXZp
c2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsMTAgKzYwLDkgQEAgdm9pZCBTVkdGRUdhdXNz
aWFuQmx1ckVsZW1lbnQ6OnNldFN0ZERldgogdm9pZCBTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6
OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21TdHJp
bmcmIHZhbHVlKQogewogICAgIGlmIChuYW1lID09IFNWR05hbWVzOjpzdGREZXZpYXRpb25BdHRy
KSB7Ci0gICAgICAgIGZsb2F0IHgsIHk7Ci0gICAgICAgIGlmIChwYXJzZU51bWJlck9wdGlvbmFs
TnVtYmVyKHZhbHVlLCB4LCB5KSkgewotICAgICAgICAgICAgbV9zdGREZXZpYXRpb25YLT5zZXRC
YXNlVmFsSW50ZXJuYWwoeCk7Ci0gICAgICAgICAgICBtX3N0ZERldmlhdGlvblktPnNldEJhc2VW
YWxJbnRlcm5hbCh5KTsKKyAgICAgICAgaWYgKGF1dG8gcmVzdWx0ID0gcGFyc2VOdW1iZXJPcHRp
b25hbE51bWJlcih2YWx1ZSkpIHsKKyAgICAgICAgICAgIG1fc3RkRGV2aWF0aW9uWC0+c2V0QmFz
ZVZhbEludGVybmFsKHJlc3VsdC0+Zmlyc3QpOworICAgICAgICAgICAgbV9zdGREZXZpYXRpb25Z
LT5zZXRCYXNlVmFsSW50ZXJuYWwocmVzdWx0LT5zZWNvbmQpOwogICAgICAgICB9CiAgICAgICAg
IHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDI2MzE3NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdl
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNyw5ICsxMTcsNyBAQCB2b2lkIFNWR0ZF
SW1hZ2VFbGVtZW50OjpidWlsZFBlbmRpbmdSZXNvCiB2b2lkIFNWR0ZFSW1hZ2VFbGVtZW50Ojpw
YXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9tU3RyaW5n
JiB2YWx1ZSkKIHsKICAgICBpZiAobmFtZSA9PSBTVkdOYW1lczo6cHJlc2VydmVBc3BlY3RSYXRp
b0F0dHIpIHsKLSAgICAgICAgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlIHByZXNlcnZlQXNw
ZWN0UmF0aW87Ci0gICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW8ucGFyc2UodmFsdWUpOwotICAg
ICAgICBtX3ByZXNlcnZlQXNwZWN0UmF0aW8tPnNldEJhc2VWYWxJbnRlcm5hbChwcmVzZXJ2ZUFz
cGVjdFJhdGlvKTsKKyAgICAgICAgbV9wcmVzZXJ2ZUFzcGVjdFJhdGlvLT5zZXRCYXNlVmFsSW50
ZXJuYWwoU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlIHsgdmFsdWUgfSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9s
b2d5RWxlbWVudC5jcHAJKHJldmlzaW9uIDI2MzE3NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRU1vcnBob2xvZ3lFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsMTAgKzcxLDkg
QEAgdm9pZCBTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpwYXJzZUF0dHJpYgogICAgIH0KIAogICAg
IGlmIChuYW1lID09IFNWR05hbWVzOjpyYWRpdXNBdHRyKSB7Ci0gICAgICAgIGZsb2F0IHgsIHk7
Ci0gICAgICAgIGlmIChwYXJzZU51bWJlck9wdGlvbmFsTnVtYmVyKHZhbHVlLCB4LCB5KSkgewot
ICAgICAgICAgICAgbV9yYWRpdXNYLT5zZXRCYXNlVmFsSW50ZXJuYWwoeCk7Ci0gICAgICAgICAg
ICBtX3JhZGl1c1ktPnNldEJhc2VWYWxJbnRlcm5hbCh5KTsKKyAgICAgICAgaWYgKGF1dG8gcmVz
dWx0ID0gcGFyc2VOdW1iZXJPcHRpb25hbE51bWJlcih2YWx1ZSkpIHsKKyAgICAgICAgICAgIG1f
cmFkaXVzWC0+c2V0QmFzZVZhbEludGVybmFsKHJlc3VsdC0+Zmlyc3QpOworICAgICAgICAgICAg
bV9yYWRpdXNZLT5zZXRCYXNlVmFsSW50ZXJuYWwocmVzdWx0LT5zZWNvbmQpOwogICAgICAgICB9
CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVT
cGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuY3BwCShyZXZpc2lvbiAyNjMxNzYpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTc4LDEwICs3OCw5IEBAIHZvaWQgU1ZHRkVTcGVjdWxhckxpZ2h0aW5n
RWxlbWVudDo6cGFyc2UKICAgICB9CiAKICAgICBpZiAobmFtZSA9PSBTVkdOYW1lczo6a2VybmVs
VW5pdExlbmd0aEF0dHIpIHsKLSAgICAgICAgZmxvYXQgeCwgeTsKLSAgICAgICAgaWYgKHBhcnNl
TnVtYmVyT3B0aW9uYWxOdW1iZXIodmFsdWUsIHgsIHkpKSB7Ci0gICAgICAgICAgICBtX2tlcm5l
bFVuaXRMZW5ndGhYLT5zZXRCYXNlVmFsSW50ZXJuYWwoeCk7Ci0gICAgICAgICAgICBtX2tlcm5l
bFVuaXRMZW5ndGhZLT5zZXRCYXNlVmFsSW50ZXJuYWwoeSk7CisgICAgICAgIGlmIChhdXRvIHJl
c3VsdCA9IHBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIodmFsdWUpKSB7CisgICAgICAgICAgICBt
X2tlcm5lbFVuaXRMZW5ndGhYLT5zZXRCYXNlVmFsSW50ZXJuYWwocmVzdWx0LT5maXJzdCk7Cisg
ICAgICAgICAgICBtX2tlcm5lbFVuaXRMZW5ndGhZLT5zZXRCYXNlVmFsSW50ZXJuYWwocmVzdWx0
LT5zZWNvbmQpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAy
NjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY3LDEwICs2Nyw5IEBAIHZvaWQgU1ZHRkVUdXJidWxlbmNlRWxl
bWVudDo6cGFyc2VBdHRyaWIKICAgICB9CiAKICAgICBpZiAobmFtZSA9PSBTVkdOYW1lczo6YmFz
ZUZyZXF1ZW5jeUF0dHIpIHsKLSAgICAgICAgZmxvYXQgeCwgeTsKLSAgICAgICAgaWYgKHBhcnNl
TnVtYmVyT3B0aW9uYWxOdW1iZXIodmFsdWUsIHgsIHkpKSB7Ci0gICAgICAgICAgICBtX2Jhc2VG
cmVxdWVuY3lYLT5zZXRCYXNlVmFsSW50ZXJuYWwoeCk7Ci0gICAgICAgICAgICBtX2Jhc2VGcmVx
dWVuY3lZLT5zZXRCYXNlVmFsSW50ZXJuYWwoeSk7CisgICAgICAgIGlmIChhdXRvIHJlc3VsdCA9
IHBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIodmFsdWUpKSB7CisgICAgICAgICAgICBtX2Jhc2VG
cmVxdWVuY3lYLT5zZXRCYXNlVmFsSW50ZXJuYWwocmVzdWx0LT5maXJzdCk7CisgICAgICAgICAg
ICBtX2Jhc2VGcmVxdWVuY3lZLT5zZXRCYXNlVmFsSW50ZXJuYWwocmVzdWx0LT5zZWNvbmQpOwog
ICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRml0VG9WaWV3Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRml0VG9WaWV3Qm94LmNwcAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZpdFRvVmlld0JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDczICs2Niw3MSBA
QCB2b2lkIFNWR0ZpdFRvVmlld0JveDo6cmVzZXQoKQogYm9vbCBTVkdGaXRUb1ZpZXdCb3g6OnBh
cnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21TdHJpbmcm
IHZhbHVlKQogewogICAgIGlmIChuYW1lID09IFNWR05hbWVzOjp2aWV3Qm94QXR0cikgewotICAg
ICAgICBGbG9hdFJlY3Qgdmlld0JveDsKLSAgICAgICAgaWYgKCF2YWx1ZS5pc051bGwoKSAmJiBw
YXJzZVZpZXdCb3godmFsdWUsIHZpZXdCb3gpKQotICAgICAgICAgICAgc2V0Vmlld0JveCh2aWV3
Qm94KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVzZXRWaWV3Qm94KCk7CisgICAgICAg
IGlmICghdmFsdWUuaXNOdWxsKCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIHJlc3VsdCA9IHBh
cnNlVmlld0JveCh2YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICBzZXRWaWV3Qm94KFdURk1vdmUo
KnJlc3VsdCkpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIHJlc2V0Vmlld0JveCgpOwogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CiAKICAgICBpZiAobmFtZSA9PSBTVkdOYW1lczo6cHJlc2VydmVBc3BlY3RSYXRpb0F0
dHIpIHsKLSAgICAgICAgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlIHByZXNlcnZlQXNwZWN0
UmF0aW87Ci0gICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW8ucGFyc2UodmFsdWUpOwotICAgICAg
ICBzZXRQcmVzZXJ2ZUFzcGVjdFJhdGlvKHByZXNlcnZlQXNwZWN0UmF0aW8pOworICAgICAgICBz
ZXRQcmVzZXJ2ZUFzcGVjdFJhdGlvKFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSB7IHZhbHVl
IH0pOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLWJvb2wgU1ZHRml0VG9WaWV3Qm94OjpwYXJzZVZpZXdCb3goY29uc3QgQXRvbVN0cmluZyYg
dmFsdWUsIEZsb2F0UmVjdCYgdmlld0JveCkKK09wdGlvbmFsPEZsb2F0UmVjdD4gU1ZHRml0VG9W
aWV3Qm94OjpwYXJzZVZpZXdCb3goY29uc3QgQXRvbVN0cmluZyYgdmFsdWUpCiB7CiAgICAgYXV0
byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KHZhbHVlKS51cGNvbnZlcnRlZENo
YXJhY3RlcnMoKTsKICAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycyA9IHVwY29udmVydGVkQ2hh
cmFjdGVyczsKLSAgICByZXR1cm4gcGFyc2VWaWV3Qm94KGNoYXJhY3RlcnMsIGNoYXJhY3RlcnMg
KyB2YWx1ZS5sZW5ndGgoKSwgdmlld0JveCk7CisgICAgcmV0dXJuIHBhcnNlVmlld0JveChjaGFy
YWN0ZXJzLCBjaGFyYWN0ZXJzICsgdmFsdWUubGVuZ3RoKCkpOwogfQogCi1ib29sIFNWR0ZpdFRv
Vmlld0JveDo6cGFyc2VWaWV3Qm94KGNvbnN0IFVDaGFyKiYgYywgY29uc3QgVUNoYXIqIGVuZCwg
RmxvYXRSZWN0JiB2aWV3Qm94LCBib29sIHZhbGlkYXRlKQorT3B0aW9uYWw8RmxvYXRSZWN0PiBT
VkdGaXRUb1ZpZXdCb3g6OnBhcnNlVmlld0JveChjb25zdCBVQ2hhciomIGMsIGNvbnN0IFVDaGFy
KiBlbmQsIGJvb2wgdmFsaWRhdGUpCiB7Ci0gICAgU3RyaW5nIHN0cihjLCBlbmQgLSBjKTsKKyAg
ICBTdHJpbmdWaWV3IHN0cihjLCBlbmQgLSBjKTsKIAogICAgIHNraXBPcHRpb25hbFNWR1NwYWNl
cyhjLCBlbmQpOwogCi0gICAgZmxvYXQgeCA9IDAuMGY7Ci0gICAgZmxvYXQgeSA9IDAuMGY7Ci0g
ICAgZmxvYXQgd2lkdGggPSAwLjBmOwotICAgIGZsb2F0IGhlaWdodCA9IDAuMGY7Ci0gICAgYm9v
bCB2YWxpZCA9IHBhcnNlTnVtYmVyKGMsIGVuZCwgeCkgJiYgcGFyc2VOdW1iZXIoYywgZW5kLCB5
KSAmJiBwYXJzZU51bWJlcihjLCBlbmQsIHdpZHRoKSAmJiBwYXJzZU51bWJlcihjLCBlbmQsIGhl
aWdodCwgZmFsc2UpOworICAgIGF1dG8geCA9IHBhcnNlTnVtYmVyKGMsIGVuZCk7CisgICAgYXV0
byB5ID0gcGFyc2VOdW1iZXIoYywgZW5kKTsKKyAgICBhdXRvIHdpZHRoID0gcGFyc2VOdW1iZXIo
YywgZW5kKTsKKyAgICBhdXRvIGhlaWdodCA9IHBhcnNlTnVtYmVyKGMsIGVuZCwgU3VmZml4U2tp
cHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsKIAogICAgIGlmICh2YWxpZGF0ZSkgewogICAgICAgICBE
b2N1bWVudCYgZG9jdW1lbnQgPSBtX3ZpZXdCb3gtPmNvbnRleHRFbGVtZW50KCktPmRvY3VtZW50
KCk7CiAKLSAgICAgICAgaWYgKCF2YWxpZCkgewotICAgICAgICAgICAgZG9jdW1lbnQuYWNjZXNz
U1ZHRXh0ZW5zaW9ucygpLnJlcG9ydFdhcm5pbmcoIlByb2JsZW0gcGFyc2luZyB2aWV3Qm94PVwi
IiArIHN0ciArICJcIiIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAo
IXggfHwgIXkgfHwgIXdpZHRoIHx8ICFoZWlnaHQpIHsKKyAgICAgICAgICAgIGRvY3VtZW50LmFj
Y2Vzc1NWR0V4dGVuc2lvbnMoKS5yZXBvcnRXYXJuaW5nKG1ha2VTdHJpbmcoIlByb2JsZW0gcGFy
c2luZyB2aWV3Qm94PVwiIiwgc3RyLCAiXCIiKSk7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogICAgICAgICB9CiAKICAgICAgICAgLy8gQ2hlY2sgdGhhdCB3aWR0aCBpcyBwb3Np
dGl2ZS4KLSAgICAgICAgaWYgKHdpZHRoIDwgMC4wKSB7CisgICAgICAgIGlmICgqd2lkdGggPCAw
LjApIHsKICAgICAgICAgICAgIGRvY3VtZW50LmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5yZXBvcnRF
cnJvcigiQSBuZWdhdGl2ZSB2YWx1ZSBmb3IgVmlld0JveCB3aWR0aCBpcyBub3QgYWxsb3dlZCIp
OwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKICAgICAgICAgfQogCiAgICAgICAgIC8vIENoZWNrIHRoYXQgaGVpZ2h0IGlzIHBvc2l0
aXZlLgotICAgICAgICBpZiAoaGVpZ2h0IDwgMC4wKSB7CisgICAgICAgIGlmICgqaGVpZ2h0IDwg
MC4wKSB7CiAgICAgICAgICAgICBkb2N1bWVudC5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVwb3J0
RXJyb3IoIkEgbmVnYXRpdmUgdmFsdWUgZm9yIFZpZXdCb3ggaGVpZ2h0IGlzIG5vdCBhbGxvd2Vk
Iik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogICAgICAgICB9CiAKICAgICAgICAgLy8gTm90aGluZyBzaG91bGQgY29tZSBhZnRl
ciB0aGUgbGFzdCwgZm91cnRoIG51bWJlci4KICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2Vz
KGMsIGVuZCk7CiAgICAgICAgIGlmIChjIDwgZW5kKSB7Ci0gICAgICAgICAgICBkb2N1bWVudC5h
Y2Nlc3NTVkdFeHRlbnNpb25zKCkucmVwb3J0V2FybmluZygiUHJvYmxlbSBwYXJzaW5nIHZpZXdC
b3g9XCIiICsgc3RyICsgIlwiIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICBkb2N1bWVudC5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVwb3J0V2FybmluZyhtYWtlU3Ry
aW5nKCJQcm9ibGVtIHBhcnNpbmcgdmlld0JveD1cIiIsIHN0ciwgIlwiIikpOworICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgfQogICAgIH0KIAotICAgIHZpZXdCb3gg
PSB7IHgsIHksIHdpZHRoLCBoZWlnaHQgfTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4g
RmxvYXRSZWN0IHsgeC52YWx1ZU9yKDApLCB5LnZhbHVlT3IoMCksIHdpZHRoLnZhbHVlT3IoMCks
IGhlaWdodC52YWx1ZU9yKDApIH07CiB9CiAKIEFmZmluZVRyYW5zZm9ybSBTVkdGaXRUb1ZpZXdC
b3g6OnZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0oY29uc3QgRmxvYXRSZWN0JiB2aWV3Qm94UmVjdCwg
Y29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJiBwcmVzZXJ2ZUFzcGVjdFJhdGlvLCBm
bG9hdCB2aWV3V2lkdGgsIGZsb2F0IHZpZXdIZWlnaHQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRml0VG9WaWV3Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZpdFRvVmlld0JveC5oCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRml0VG9WaWV3Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDggKzY1LDggQEAgcHJvdGVj
dGVkOgogCiAgICAgdm9pZCByZXNldCgpOwogICAgIGJvb2wgcGFyc2VBdHRyaWJ1dGUoY29uc3Qg
UXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21TdHJpbmcmKTsKLSAgICBib29sIHBhcnNlVmlld0Jv
eChjb25zdCBBdG9tU3RyaW5nJiB2YWx1ZSwgRmxvYXRSZWN0JiB2aWV3Qm94KTsKLSAgICBib29s
IHBhcnNlVmlld0JveChjb25zdCBVQ2hhciomIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kLCBGbG9h
dFJlY3QmIHZpZXdCb3gsIGJvb2wgdmFsaWRhdGUgPSB0cnVlKTsKKyAgICBPcHRpb25hbDxGbG9h
dFJlY3Q+IHBhcnNlVmlld0JveChjb25zdCBBdG9tU3RyaW5nJiB2YWx1ZSk7CisgICAgT3B0aW9u
YWw8RmxvYXRSZWN0PiBwYXJzZVZpZXdCb3goY29uc3QgVUNoYXIqJiBzdGFydCwgY29uc3QgVUNo
YXIqIGVuZCwgYm9vbCB2YWxpZGF0ZSA9IHRydWUpOwogCiBwcml2YXRlOgogICAgIFJlZjxTVkdB
bmltYXRlZFJlY3Q+IG1fdmlld0JveDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHbHlw
aFJlZkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHbHlw
aFJlZkVsZW1lbnQuY3BwCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHR2x5cGhSZWZFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsMTAgKzU4LDcgQEAg
Ym9vbCBTVkdHbHlwaFJlZkVsZW1lbnQ6Omhhc1ZhbGlkR2x5cGhFbAogCiBzdGF0aWMgZmxvYXQg
cGFyc2VGbG9hdChjb25zdCBBdG9tU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBmbG9hdCByZXN1bHQ7
Ci0gICAgaWYgKCFwYXJzZU51bWJlckZyb21TdHJpbmcodmFsdWUsIHJlc3VsdCkpCi0gICAgICAg
IHJldHVybiAwOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIHBhcnNlTnVtYmVyKHZh
bHVlKS52YWx1ZU9yKDApOwogfQogCiB2b2lkIFNWR0dseXBoUmVmRWxlbWVudDo6cGFyc2VBdHRy
aWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbVN0cmluZyYgdmFsdWUp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHSEtlcm5FbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHSEtlcm5FbGVtZW50LmNwcAkocmV2aXNpb24gMjYz
MTc2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0hLZXJuRWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ0LDI0ICs0NCw0NCBAQCBSZWY8U1ZHSEtlcm5FbGVtZW50PiBTVkdIS2VybkVs
ZW1lbnQ6OmNyCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZHSEtlcm5FbGVtZW50KHRhZ05h
bWUsIGRvY3VtZW50KSk7CiB9CiAKLWJvb2wgU1ZHSEtlcm5FbGVtZW50OjpidWlsZEhvcml6b250
YWxLZXJuaW5nUGFpcihTVkdLZXJuaW5nUGFpciYga2VybmluZ1BhaXIpIGNvbnN0CitPcHRpb25h
bDxTVkdLZXJuaW5nUGFpcj4gU1ZHSEtlcm5FbGVtZW50OjpidWlsZEhvcml6b250YWxLZXJuaW5n
UGFpcigpIGNvbnN0CiB7CisgICAgLy8gRklYTUU6IENhbiB0aGlzIGJlIHNoYXJlZCB3aXRoIFNW
R1ZLZXJuRWxlbWVudDo6YnVpbGRWZXJ0aWNhbEtlcm5pbmdQYWlyCisKICAgICBhdXRvJiB1MSA9
IGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oU1ZHTmFtZXM6OnUxQXR0cik7CiAgICAg
YXV0byYgZzEgPSBhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFNWR05hbWVzOjpnMUF0
dHIpOwogICAgIGF1dG8mIHUyID0gYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihTVkdO
YW1lczo6dTJBdHRyKTsKICAgICBhdXRvJiBnMiA9IGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6
YXRpb24oU1ZHTmFtZXM6OmcyQXR0cik7CiAgICAgaWYgKCh1MS5pc0VtcHR5KCkgJiYgZzEuaXNF
bXB0eSgpKSB8fCAodTIuaXNFbXB0eSgpICYmIGcyLmlzRW1wdHkoKSkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIGF1dG8gZ2x5cGhO
YW1lMSA9IHBhcnNlR2x5cGhOYW1lKGcxKTsKKyAgICBpZiAoIWdseXBoTmFtZTEpCisgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgYXV0byBnbHlwaE5hbWUyID0gcGFyc2VHbHlwaE5h
bWUoZzIpOworICAgIGlmICghZ2x5cGhOYW1lMikKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKyAgICBhdXRvIHVuaWNvZGVTdHJpbmcxID0gcGFyc2VLZXJuaW5nVW5pY29kZVN0cmluZyh1
MSk7CisgICAgaWYgKCF1bmljb2RlU3RyaW5nMSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKyAgICBhdXRvIHVuaWNvZGVTdHJpbmcyID0gcGFyc2VLZXJuaW5nVW5pY29kZVN0cmluZyh1
Mik7CisgICAgaWYgKCF1bmljb2RlU3RyaW5nMikKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKworICAgIGJvb2wgb2sgPSBmYWxzZTsKKyAgICBhdXRvIGtlcm5pbmcgPSBhdHRyaWJ1dGVX
aXRob3V0U3luY2hyb25pemF0aW9uKFNWR05hbWVzOjprQXR0cikuc3RyaW5nKCkudG9GbG9hdCgm
b2spOworICAgIGlmICghb2spCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBp
ZiAocGFyc2VHbHlwaE5hbWUoZzEsIGtlcm5pbmdQYWlyLmdseXBoTmFtZTEpCi0gICAgICAgICYm
IHBhcnNlR2x5cGhOYW1lKGcyLCBrZXJuaW5nUGFpci5nbHlwaE5hbWUyKQotICAgICAgICAmJiBw
YXJzZUtlcm5pbmdVbmljb2RlU3RyaW5nKHUxLCBrZXJuaW5nUGFpci51bmljb2RlUmFuZ2UxLCBr
ZXJuaW5nUGFpci51bmljb2RlTmFtZTEpCi0gICAgICAgICYmIHBhcnNlS2VybmluZ1VuaWNvZGVT
dHJpbmcodTIsIGtlcm5pbmdQYWlyLnVuaWNvZGVSYW5nZTIsIGtlcm5pbmdQYWlyLnVuaWNvZGVO
YW1lMikpIHsKLSAgICAgICAgYm9vbCBvayA9IGZhbHNlOwotICAgICAgICBrZXJuaW5nUGFpci5r
ZXJuaW5nID0gYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihTVkdOYW1lczo6a0F0dHIp
LnN0cmluZygpLnRvRmxvYXQoJm9rKTsKLSAgICAgICAgcmV0dXJuIG9rOwotICAgIH0KLSAgICBy
ZXR1cm4gZmFsc2U7CisgICAgU1ZHS2VybmluZ1BhaXIga2VybmluZ1BhaXI7CisgICAga2Vybmlu
Z1BhaXIuZ2x5cGhOYW1lMSA9IFdURk1vdmUoKmdseXBoTmFtZTEpOworICAgIGtlcm5pbmdQYWly
LmdseXBoTmFtZTIgPSBXVEZNb3ZlKCpnbHlwaE5hbWUyKTsKKyAgICBrZXJuaW5nUGFpci51bmlj
b2RlUmFuZ2UxID0gV1RGTW92ZSh1bmljb2RlU3RyaW5nMS0+Zmlyc3QpOworICAgIGtlcm5pbmdQ
YWlyLnVuaWNvZGVOYW1lMSA9IFdURk1vdmUodW5pY29kZVN0cmluZzEtPnNlY29uZCk7CisgICAg
a2VybmluZ1BhaXIudW5pY29kZVJhbmdlMiA9IFdURk1vdmUodW5pY29kZVN0cmluZzItPmZpcnN0
KTsKKyAgICBrZXJuaW5nUGFpci51bmljb2RlTmFtZTIgPSBXVEZNb3ZlKHVuaWNvZGVTdHJpbmcy
LT5zZWNvbmQpOworICAgIGtlcm5pbmdQYWlyLmtlcm5pbmcgPSBrZXJuaW5nOworICAgIHJldHVy
biBrZXJuaW5nUGFpcjsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0hLZXJu
RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdIS2VybkVsZW1l
bnQuaAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0hLZXJuRWxl
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBAIGNsYXNzIFNWR0hLZXJuRWxl
bWVudCBmaW5hbCA6IHB1YmxpYyBTVkcKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPFNWR0hLZXJu
RWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCYpOwogCi0gICAg
Ym9vbCBidWlsZEhvcml6b250YWxLZXJuaW5nUGFpcihTVkdLZXJuaW5nUGFpciYga2VybmluZ1Bh
aXIpIGNvbnN0OworICAgIE9wdGlvbmFsPFNWR0tlcm5pbmdQYWlyPiBidWlsZEhvcml6b250YWxL
ZXJuaW5nUGFpcigpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIFNWR0hLZXJuRWxlbWVudChjb25z
dCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdJbWFnZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdJ
bWFnZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHSW1hZ2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksOSArNjksNyBAQCBib29s
IFNWR0ltYWdlRWxlbWVudDo6aGFzU2luZ2xlU2VjdXJpdHlPCiB2b2lkIFNWR0ltYWdlRWxlbWVu
dDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbVN0
cmluZyYgdmFsdWUpCiB7CiAgICAgaWYgKG5hbWUgPT0gU1ZHTmFtZXM6OnByZXNlcnZlQXNwZWN0
UmF0aW9BdHRyKSB7Ci0gICAgICAgIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSBwcmVzZXJ2
ZUFzcGVjdFJhdGlvOwotICAgICAgICBwcmVzZXJ2ZUFzcGVjdFJhdGlvLnBhcnNlKHZhbHVlKTsK
LSAgICAgICAgbV9wcmVzZXJ2ZUFzcGVjdFJhdGlvLT5zZXRCYXNlVmFsSW50ZXJuYWwocHJlc2Vy
dmVBc3BlY3RSYXRpbyk7CisgICAgICAgIG1fcHJlc2VydmVBc3BlY3RSYXRpby0+c2V0QmFzZVZh
bEludGVybmFsKFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSB7IHZhbHVlIH0pOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoVmFs
dWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMZW5ndGhWYWx1ZS5j
cHAJKHJldmlzaW9uIDI2MzE3NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMZW5ndGhWYWx1
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5MSwxMiArMjkxLDEyIEBAIEV4Y2VwdGlvbk9yPHZv
aWQ+IFNWR0xlbmd0aFZhbHVlOjpzZXRWYWwKICAgICBpZiAoc3RyaW5nLmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGZsb2F0IGNvbnZlcnRlZE51bWJlciA9IDA7CiAgICAg
YXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KHN0cmluZykudXBjb252ZXJ0
ZWRDaGFyYWN0ZXJzKCk7CiAgICAgY29uc3QgVUNoYXIqIHB0ciA9IHVwY29udmVydGVkQ2hhcmFj
dGVyczsKICAgICBjb25zdCBVQ2hhciogZW5kID0gcHRyICsgc3RyaW5nLmxlbmd0aCgpOwogCi0g
ICAgaWYgKCFwYXJzZU51bWJlcihwdHIsIGVuZCwgY29udmVydGVkTnVtYmVyLCBmYWxzZSkpCisg
ICAgYXV0byBjb252ZXJ0ZWROdW1iZXIgPSBwYXJzZU51bWJlcihwdHIsIGVuZCwgU3VmZml4U2tp
cHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsKKyAgICBpZiAoIWNvbnZlcnRlZE51bWJlcikKICAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiAKICAgICBhdXRvIGxlbmd0aFR5
cGUgPSBwYXJzZUxlbmd0aFR5cGUocHRyLCBlbmQpOwpAQCAtMzA0LDcgKzMwNCw3IEBAIEV4Y2Vw
dGlvbk9yPHZvaWQ+IFNWR0xlbmd0aFZhbHVlOjpzZXRWYWwKICAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IFN5bnRheEVycm9yIH07CiAKICAgICBtX2xlbmd0aFR5cGUgPSBsZW5ndGhUeXBlOwot
ICAgIG1fdmFsdWVJblNwZWNpZmllZFVuaXRzID0gY29udmVydGVkTnVtYmVyOworICAgIG1fdmFs
dWVJblNwZWNpZmllZFVuaXRzID0gKmNvbnZlcnRlZE51bWJlcjsKICAgICByZXR1cm4geyB9Owog
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTnVtYmVyTGlzdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdOdW1iZXJMaXN0LmgJKHJldmlzaW9uIDI2MzE3NikK
KysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdOdW1iZXJMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTU0LDcgKzU0LDYgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgY2xlYXJJdGVtcygpOwogCi0g
ICAgICAgIGZsb2F0IG51bWJlciA9IDA7CiAgICAgICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0
ZXJzID0gU3RyaW5nVmlldyh2YWx1ZSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7CiAgICAgICAg
IGNvbnN0IFVDaGFyKiBwdHIgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7CiAgICAgICAgIGNvbnN0
IFVDaGFyKiBlbmQgPSBwdHIgKyB2YWx1ZS5sZW5ndGgoKTsKQEAgLTYyLDkgKzYxLDEwIEBAIHB1
YmxpYzoKICAgICAgICAgLy8gVGhlIHNwZWMgKHNlY3Rpb24gNC4xKSBzdHJhbmdlbHkgZG9lc24n
dCBhbGxvdyBsZWFkaW5nIHdoaXRlc3BhY2UuCiAgICAgICAgIC8vIFdlIG1pZ2h0IGNob29zZSB0
byB2aW9sYXRlIHRoYXQgaW50ZW50aW9uYWxseS4KICAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCkg
ewotICAgICAgICAgICAgaWYgKCFwYXJzZU51bWJlcihwdHIsIGVuZCwgbnVtYmVyKSkKKyAgICAg
ICAgICAgIGF1dG8gbnVtYmVyID0gcGFyc2VOdW1iZXIocHRyLCBlbmQpOworICAgICAgICAgICAg
aWYgKCFudW1iZXIpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBhcHBlbmQo
U1ZHTnVtYmVyOjpjcmVhdGUobnVtYmVyKSk7CisgICAgICAgICAgICBhcHBlbmQoU1ZHTnVtYmVy
OjpjcmVhdGUoKm51bWJlcikpOwogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIHB0ciA9PSBl
bmQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmNwcAkocmV2
aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDE5ICs0MCwxOCBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUg
RmxvYXRUeXBlPiBzdGF0aWMgaW5sCiAvLyBXZSB1c2UgdGhpcyBnZW5lcmljIHBhcnNlTnVtYmVy
IGZ1bmN0aW9uIHRvIGFsbG93IHRoZSBQYXRoIHBhcnNpbmcgY29kZSB0byB3b3JrIAogLy8gYXQg
YSBoaWdoZXIgcHJlY2lzaW9uIGludGVybmFsbHksIHdpdGhvdXQgYW55IHVubmVjZXNzYXJ5IHJ1
bnRpbWUgY29zdCBvciBjb2RlCiAvLyBjb21wbGV4aXR5LgotdGVtcGxhdGUgPHR5cGVuYW1lIENo
YXJhY3RlclR5cGUsIHR5cGVuYW1lIEZsb2F0VHlwZT4gc3RhdGljIGJvb2wgZ2VuZXJpY1BhcnNl
TnVtYmVyKGNvbnN0IENoYXJhY3RlclR5cGUqJiBwdHIsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVu
ZCwgRmxvYXRUeXBlJiBudW1iZXIsIGJvb2wgc2tpcCkKKy8vIEZJWE1FOiBDYW4gdGhpcyBiZSBz
aGFyZWQvcmVwbGFjZWQgd2l0aCBudW1iZXIgcGFyc2luZyBpbiBXVEY/Cit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5hbWUgRmxvYXRUeXBlID0gZmxvYXQ+IHN0YXRpYyBP
cHRpb25hbDxGbG9hdFR5cGU+IGdlbmVyaWNQYXJzZU51bWJlcihjb25zdCBDaGFyYWN0ZXJUeXBl
KiYgcHRyLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQsIFN1ZmZpeFNraXBwaW5nUG9saWN5IHNr
aXAgPSBTdWZmaXhTa2lwcGluZ1BvbGljeTo6U2tpcCkKIHsKLSAgICBGbG9hdFR5cGUgaW50ZWdl
ciwgZGVjaW1hbCwgZnJhYywgZXhwb25lbnQ7Ci0gICAgaW50IHNpZ24sIGV4cHNpZ247CisgICAg
RmxvYXRUeXBlIG51bWJlciA9IDA7CisgICAgRmxvYXRUeXBlIGludGVnZXIgPSAwOworICAgIEZs
b2F0VHlwZSBkZWNpbWFsID0gMDsKKyAgICBGbG9hdFR5cGUgZnJhYyA9IDE7CisgICAgRmxvYXRU
eXBlIGV4cG9uZW50ID0gMDsKKyAgICBpbnQgc2lnbiA9IDE7CisgICAgaW50IGV4cHNpZ24gPSAx
OwogICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIHN0YXJ0ID0gcHRyOwogCi0gICAgZXhwb25lbnQg
PSAwOwotICAgIGludGVnZXIgPSAwOwotICAgIGZyYWMgPSAxOwotICAgIGRlY2ltYWwgPSAwOwot
ICAgIHNpZ24gPSAxOwotICAgIGV4cHNpZ24gPSAxOwotCiAgICAgLy8gcmVhZCB0aGUgc2lnbgog
ICAgIGlmIChwdHIgPCBlbmQgJiYgKnB0ciA9PSAnKycpCiAgICAgICAgIHB0cisrOwpAQCAtNjIs
NyArNjEsNyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5hCiAgICAg
fSAKICAgICAKICAgICBpZiAocHRyID09IGVuZCB8fCAoIWlzQVNDSUlEaWdpdCgqcHRyKSAmJiAq
cHRyICE9ICcuJykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKIAogICAgIC8vIHJlYWQgdGhlIGludGVnZXIgcGFydCwgYnVpbGQgcmlnaHQtdG8t
bGVmdAogICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIHB0clN0YXJ0SW50UGFydCA9IHB0cjsKQEAg
LTc4LDcgKzc3LDcgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHR5cGVuYQog
ICAgICAgICB9CiAgICAgICAgIC8vIEJhaWwgb3V0IGVhcmx5IGlmIHRoaXMgb3ZlcmZsb3dzLgog
ICAgICAgICBpZiAoIWlzVmFsaWRSYW5nZShpbnRlZ2VyKSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQogCiAgICAgaWYg
KHB0ciA8IGVuZCAmJiAqcHRyID09ICcuJykgeyAvLyByZWFkIHRoZSBkZWNpbWFscwpAQCAtODYs
NyArODUsNyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5hCiAgICAg
ICAgIAogICAgICAgICAvLyBUaGVyZSBtdXN0IGJlIGEgbGVhc3Qgb25lIGRpZ2l0IGZvbGxvd2lu
ZyB0aGUgLgogICAgICAgICBpZiAocHRyID49IGVuZCB8fCAhaXNBU0NJSURpZ2l0KCpwdHIpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKICAgICAgICAgCiAgICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgaXNBU0NJSURpZ2l0KCpw
dHIpKQogICAgICAgICAgICAgZGVjaW1hbCArPSAoKihwdHIrKykgLSAnMCcpICogKGZyYWMgKj0g
c3RhdGljX2Nhc3Q8RmxvYXRUeXBlPigwLjEpKTsKQEAgLTEwNyw3ICsxMDYsNyBAQCB0ZW1wbGF0
ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5hCiAgICAgICAgIAogICAgICAgICAvLyBU
aGVyZSBtdXN0IGJlIGFuIGV4cG9uZW50CiAgICAgICAgIGlmIChwdHIgPj0gZW5kIHx8ICFpc0FT
Q0lJRGlnaXQoKnB0cikpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgaXNBU0NJ
SURpZ2l0KCpwdHIpKSB7CiAgICAgICAgICAgICBleHBvbmVudCAqPSBzdGF0aWNfY2FzdDxGbG9h
dFR5cGU+KDEwKTsKQEAgLTExNiw3ICsxMTUsNyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZSwgdHlwZW5hCiAgICAgICAgIH0KICAgICAgICAgLy8gTWFrZSBzdXJlIGV4cG9uZW50
IGlzIHZhbGlkLgogICAgICAgICBpZiAoIWlzVmFsaWRSYW5nZShleHBvbmVudCkgfHwgZXhwb25l
bnQgPiBzdGQ6Om51bWVyaWNfbGltaXRzPEZsb2F0VHlwZT46Om1heF9leHBvbmVudCkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAg
ICAgfQogCiAgICAgbnVtYmVyID0gaW50ZWdlciArIGRlY2ltYWw7CkBAIC0xMjcsMTQyICsxMjYs
MTQ3IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCB0eXBlbmEKIAogICAgIC8v
IERvbid0IHJldHVybiBJbmZpbml0eSgpIG9yIE5hTigpLgogICAgIGlmICghaXNWYWxpZFJhbmdl
KG51bWJlcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIAogICAgIGlmIChzdGFydCA9PSBwdHIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGlmIChza2lwKQorICAgIGlmIChza2lw
ID09IFN1ZmZpeFNraXBwaW5nUG9saWN5OjpTa2lwKQogICAgICAgICBza2lwT3B0aW9uYWxTVkdT
cGFjZXNPckRlbGltaXRlcihwdHIsIGVuZCk7CiAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdGVt
cGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1ib29sIHBhcnNlU1ZHTnVtYmVyKENoYXJh
Y3RlclR5cGUqIGJlZ2luLCBzaXplX3QgbGVuZ3RoLCBkb3VibGUmIG51bWJlcikKLXsKLSAgICBj
b25zdCBDaGFyYWN0ZXJUeXBlKiBwdHIgPSBiZWdpbjsKLSAgICBjb25zdCBDaGFyYWN0ZXJUeXBl
KiBlbmQgPSBwdHIgKyBsZW5ndGg7Ci0gICAgcmV0dXJuIGdlbmVyaWNQYXJzZU51bWJlcihwdHIs
IGVuZCwgbnVtYmVyLCBmYWxzZSk7CisgICAgcmV0dXJuIG51bWJlcjsKIH0KIAotLy8gRXhwbGlj
aXRseSBpbnN0YW50aWF0ZSB0aGUgdHdvIGZsYXZvcnMgb2YgcGFyc2VTVkdOdW1iZXIoKSB0byBz
YXRpc2Z5IGV4dGVybmFsIGNhbGxlcnMKLXRlbXBsYXRlIGJvb2wgcGFyc2VTVkdOdW1iZXIoTENo
YXIqIGJlZ2luLCBzaXplX3QgbGVuZ3RoLCBkb3VibGUmKTsKLXRlbXBsYXRlIGJvb2wgcGFyc2VT
VkdOdW1iZXIoVUNoYXIqIGJlZ2luLCBzaXplX3QgbGVuZ3RoLCBkb3VibGUmKTsKLQotYm9vbCBw
YXJzZU51bWJlcihjb25zdCBMQ2hhciomIHB0ciwgY29uc3QgTENoYXIqIGVuZCwgZmxvYXQmIG51
bWJlciwgYm9vbCBza2lwKQorT3B0aW9uYWw8ZmxvYXQ+IHBhcnNlTnVtYmVyKGNvbnN0IExDaGFy
KiYgcHRyLCBjb25zdCBMQ2hhciogZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeSBza2lwKQogewot
ICAgIHJldHVybiBnZW5lcmljUGFyc2VOdW1iZXIocHRyLCBlbmQsIG51bWJlciwgc2tpcCk7Cisg
ICAgcmV0dXJuIGdlbmVyaWNQYXJzZU51bWJlcihwdHIsIGVuZCwgc2tpcCk7CiB9CiAKLWJvb2wg
cGFyc2VOdW1iZXIoY29uc3QgVUNoYXIqJiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQsIGZsb2F0JiBu
dW1iZXIsIGJvb2wgc2tpcCkgCitPcHRpb25hbDxmbG9hdD4gcGFyc2VOdW1iZXIoY29uc3QgVUNo
YXIqJiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQsIFN1ZmZpeFNraXBwaW5nUG9saWN5IHNraXApCiB7
Ci0gICAgcmV0dXJuIGdlbmVyaWNQYXJzZU51bWJlcihwdHIsIGVuZCwgbnVtYmVyLCBza2lwKTsK
KyAgICByZXR1cm4gZ2VuZXJpY1BhcnNlTnVtYmVyKHB0ciwgZW5kLCBza2lwKTsKIH0KIAotYm9v
bCBwYXJzZU51bWJlckZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0JiBudW1i
ZXIsIGJvb2wgc2tpcCkKK09wdGlvbmFsPGZsb2F0PiBwYXJzZU51bWJlcihjb25zdCBTdHJpbmcm
IHN0cmluZywgU3VmZml4U2tpcHBpbmdQb2xpY3kgc2tpcCkKIHsKICAgICBhdXRvIHVwY29udmVy
dGVkQ2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcoc3RyaW5nKS51cGNvbnZlcnRlZENoYXJhY3RlcnMo
KTsKICAgICBjb25zdCBVQ2hhciogcHRyID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOwogICAgIGNv
bnN0IFVDaGFyKiBlbmQgPSBwdHIgKyBzdHJpbmcubGVuZ3RoKCk7Ci0gICAgcmV0dXJuIGdlbmVy
aWNQYXJzZU51bWJlcihwdHIsIGVuZCwgbnVtYmVyLCBza2lwKSAmJiBwdHIgPT0gZW5kOworICAg
IGF1dG8gcmVzdWx0ID0gZ2VuZXJpY1BhcnNlTnVtYmVyKHB0ciwgZW5kLCBza2lwKTsKKyAgICBp
ZiAocHRyICE9IGVuZCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4g
cmVzdWx0OwogfQogCiAvLyBvbmx5IHVzZWQgdG8gcGFyc2UgbGFyZ2VBcmNGbGFnIGFuZCBzd2Vl
cEZsYWcgd2hpY2ggbXVzdCBiZSBhICIwIiBvciAiMSIKIC8vIGFuZCBtaWdodCBub3QgaGF2ZSBh
bnkgd2hpdGVzcGFjZS9jb21tYSBhZnRlciBpdAotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+Ci1ib29sIGdlbmVyaWNQYXJzZUFyY0ZsYWcoY29uc3QgQ2hhcmFjdGVyVHlwZSomIHB0
ciwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kLCBib29sJiBmbGFnKQordGVtcGxhdGUgPHR5cGVu
YW1lIENoYXJhY3RlclR5cGU+IE9wdGlvbmFsPGJvb2w+IGdlbmVyaWNQYXJzZUFyY0ZsYWcoY29u
c3QgQ2hhcmFjdGVyVHlwZSomIHB0ciwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kKQogewogICAg
IGlmIChwdHIgPj0gZW5kKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CisKICAgICBjb25zdCBDaGFyYWN0ZXJUeXBlIGZsYWdDaGFyID0gKnB0cisr
OworCisgICAgYm9vbCBmbGFnOwogICAgIGlmIChmbGFnQ2hhciA9PSAnMCcpCiAgICAgICAgIGZs
YWcgPSBmYWxzZTsKICAgICBlbHNlIGlmIChmbGFnQ2hhciA9PSAnMScpCiAgICAgICAgIGZsYWcg
PSB0cnVlOwogICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAorICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworCiAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxpbWl0
ZXIocHRyLCBlbmQpOwogICAgIAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmbGFnOwog
fQogCi1ib29sIHBhcnNlQXJjRmxhZyhjb25zdCBMQ2hhciomIHB0ciwgY29uc3QgTENoYXIqIGVu
ZCwgYm9vbCYgZmxhZykKK09wdGlvbmFsPGJvb2w+IHBhcnNlQXJjRmxhZyhjb25zdCBMQ2hhciom
IHB0ciwgY29uc3QgTENoYXIqIGVuZCkKIHsKLSAgICByZXR1cm4gZ2VuZXJpY1BhcnNlQXJjRmxh
ZyhwdHIsIGVuZCwgZmxhZyk7CisgICAgcmV0dXJuIGdlbmVyaWNQYXJzZUFyY0ZsYWcocHRyLCBl
bmQpOwogfQogCi1ib29sIHBhcnNlQXJjRmxhZyhjb25zdCBVQ2hhciomIHB0ciwgY29uc3QgVUNo
YXIqIGVuZCwgYm9vbCYgZmxhZykKK09wdGlvbmFsPGJvb2w+IHBhcnNlQXJjRmxhZyhjb25zdCBV
Q2hhciomIHB0ciwgY29uc3QgVUNoYXIqIGVuZCkKIHsKLSAgICByZXR1cm4gZ2VuZXJpY1BhcnNl
QXJjRmxhZyhwdHIsIGVuZCwgZmxhZyk7CisgICAgcmV0dXJuIGdlbmVyaWNQYXJzZUFyY0ZsYWco
cHRyLCBlbmQpOwogfQogCi1ib29sIHBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIoY29uc3QgU3Ry
aW5nJiBzLCBmbG9hdCYgeCwgZmxvYXQmIHkpCitPcHRpb25hbDxzdGQ6OnBhaXI8ZmxvYXQsIGZs
b2F0Pj4gcGFyc2VOdW1iZXJPcHRpb25hbE51bWJlcihjb25zdCBTdHJpbmcmIHMpCiB7CiAgICAg
aWYgKHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiAKICAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IFN0cmluZ1Zp
ZXcocykudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7CiAgICAgY29uc3QgVUNoYXIqIGN1ciA9IHVw
Y29udmVydGVkQ2hhcmFjdGVyczsKICAgICBjb25zdCBVQ2hhciogZW5kID0gY3VyICsgcy5sZW5n
dGgoKTsKIAotICAgIGlmICghcGFyc2VOdW1iZXIoY3VyLCBlbmQsIHgpKQotICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgYXV0byB4ID0gcGFyc2VOdW1iZXIoY3VyLCBlbmQpOworICAgIGlmICgh
eCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIGlmIChjdXIgPT0gZW5kKQot
ICAgICAgICB5ID0geDsKLSAgICBlbHNlIGlmICghcGFyc2VOdW1iZXIoY3VyLCBlbmQsIHksIGZh
bHNlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3Bh
aXIoKngsICp4KTsKIAotICAgIHJldHVybiBjdXIgPT0gZW5kOworICAgIGF1dG8geSA9IHBhcnNl
TnVtYmVyKGN1ciwgZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNraXApOworICAgIGlm
ICgheSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIGlmIChjdXIgIT0gZW5k
KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgcmV0dXJuIHN0ZDo6bWFrZV9w
YWlyKCp4LCAqeSk7CiB9CiAKLWJvb2wgcGFyc2VQb2ludChjb25zdCBTdHJpbmcmIHMsIEZsb2F0
UG9pbnQmIHBvaW50KQorT3B0aW9uYWw8RmxvYXRQb2ludD4gcGFyc2VQb2ludChjb25zdCBTdHJp
bmcmIHMpCiB7CiAgICAgaWYgKHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKICAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFj
dGVycyA9IFN0cmluZ1ZpZXcocykudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7CiAgICAgY29uc3Qg
VUNoYXIqIGN1ciA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKICAgICBjb25zdCBVQ2hhciogZW5k
ID0gY3VyICsgcy5sZW5ndGgoKTsKIAogICAgIGlmICghc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGN1
ciwgZW5kKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogCi0gICAgZmxvYXQgeCA9IDA7Ci0gICAgaWYgKCFwYXJzZU51bWJlcihjdXIsIGVuZCwg
eCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGZsb2F0IHkgPSAwOwotICAgIGlmICgh
cGFyc2VOdW1iZXIoY3VyLCBlbmQsIHkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBw
b2ludCA9IEZsb2F0UG9pbnQoeCwgeSk7CisgICAgYXV0byBwb2ludCA9IHBhcnNlRmxvYXRQb2lu
dChjdXIsIGVuZCk7CisgICAgaWYgKCFwb2ludCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKIAogICAgIC8vIERpc2FsbG93IGFueXRoaW5nIGV4Y2VwdCBzcGFjZXMgYXQgdGhlIGVuZC4K
LSAgICByZXR1cm4gIXNraXBPcHRpb25hbFNWR1NwYWNlcyhjdXIsIGVuZCk7CisgICAgc2tpcE9w
dGlvbmFsU1ZHU3BhY2VzKGN1ciwgZW5kKTsKKyAgICAKKyAgICByZXR1cm4gcG9pbnQ7CiB9CiAK
LWJvb2wgcGFyc2VSZWN0KGNvbnN0IFN0cmluZyYgc3RyaW5nLCBGbG9hdFJlY3QmIHJlY3QpCitP
cHRpb25hbDxGbG9hdFJlY3Q+IHBhcnNlUmVjdChjb25zdCBTdHJpbmcmIHN0cmluZykKIHsKICAg
ICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcoc3RyaW5nKS51cGNvbnZl
cnRlZENoYXJhY3RlcnMoKTsKICAgICBjb25zdCBVQ2hhciogcHRyID0gdXBjb252ZXJ0ZWRDaGFy
YWN0ZXJzOwogICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBwdHIgKyBzdHJpbmcubGVuZ3RoKCk7Cisg
ICAgCiAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHB0ciwgZW5kKTsKICAgICAKLSAgICBmbG9h
dCB4ID0gMDsKLSAgICBmbG9hdCB5ID0gMDsKLSAgICBmbG9hdCB3aWR0aCA9IDA7Ci0gICAgZmxv
YXQgaGVpZ2h0ID0gMDsKLSAgICBib29sIHZhbGlkID0gcGFyc2VOdW1iZXIocHRyLCBlbmQsIHgp
ICYmIHBhcnNlTnVtYmVyKHB0ciwgZW5kLCB5KSAmJiBwYXJzZU51bWJlcihwdHIsIGVuZCwgd2lk
dGgpICYmIHBhcnNlTnVtYmVyKHB0ciwgZW5kLCBoZWlnaHQsIGZhbHNlKTsKLSAgICByZWN0ID0g
RmxvYXRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpOwotICAgIHJldHVybiB2YWxpZDsKKyAgICBh
dXRvIHggPSBwYXJzZU51bWJlcihwdHIsIGVuZCk7CisgICAgaWYgKCF4KQorICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OworICAgIGF1dG8geSA9IHBhcnNlTnVtYmVyKHB0ciwgZW5kKTsKKyAg
ICBpZiAoIXkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgYXV0byB3aWR0aCA9
IHBhcnNlTnVtYmVyKHB0ciwgZW5kKTsKKyAgICBpZiAoIXdpZHRoKQorICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworICAgIGF1dG8gaGVpZ2h0ID0gcGFyc2VOdW1iZXIocHRyLCBlbmQsIFN1
ZmZpeFNraXBwaW5nUG9saWN5OjpEb250U2tpcCk7CisgICAgaWYgKCFoZWlnaHQpCisgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gRmxvYXRSZWN0IHsgKngsICp5LCAq
d2lkdGgsICpoZWlnaHQgfTsKIH0KIAotYm9vbCBwYXJzZUdseXBoTmFtZShjb25zdCBTdHJpbmcm
IGlucHV0LCBIYXNoU2V0PFN0cmluZz4mIHZhbHVlcykKK09wdGlvbmFsPEhhc2hTZXQ8U3RyaW5n
Pj4gcGFyc2VHbHlwaE5hbWUoY29uc3QgU3RyaW5nJiBpbnB1dCkKIHsKICAgICAvLyBGSVhNRTog
UGFyc2luZyBlcnJvciBkZXRlY3Rpb24gaXMgbWlzc2luZy4KLSAgICB2YWx1ZXMuY2xlYXIoKTsK
KworICAgIEhhc2hTZXQ8U3RyaW5nPiB2YWx1ZXM7CiAKICAgICBhdXRvIHVwY29udmVydGVkQ2hh
cmFjdGVycyA9IFN0cmluZ1ZpZXcoaW5wdXQpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwogICAg
IGNvbnN0IFVDaGFyKiBwdHIgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7CkBAIC0yODcsMTMgKzI5
MSwxMyBAQCBib29sIHBhcnNlR2x5cGhOYW1lKGNvbnN0IFN0cmluZyYgaW5wdXQsCiAgICAgICAg
IHNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVsaW1pdGVyKHB0ciwgZW5kLCAnLCcpOwogICAgIH0K
IAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiB2YWx1ZXM7CiB9CiAKLXN0YXRpYyBib29s
IHBhcnNlVW5pY29kZVJhbmdlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5n
dGgsIFVuaWNvZGVSYW5nZSYgcmFuZ2UpCitzdGF0aWMgT3B0aW9uYWw8VW5pY29kZVJhbmdlPiBw
YXJzZVVuaWNvZGVSYW5nZShjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3Ro
KQogewogICAgIGlmIChsZW5ndGggPCAyIHx8IGNoYXJhY3RlcnNbMF0gIT0gJ1UnIHx8IGNoYXJh
Y3RlcnNbMV0gIT0gJysnKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiAgICAgCiAgICAgLy8gUGFyc2UgdGhlIHN0YXJ0aW5nIGhleCBudW1iZXIg
KG9yIGl0cyBwcmVmaXgpLgogICAgIHVuc2lnbmVkIHN0YXJ0UmFuZ2UgPSAwOwpAQCAtMzA2LDE1
ICszMTAsMTUgQEAgc3RhdGljIGJvb2wgcGFyc2VVbmljb2RlUmFuZ2UoY29uc3QgVUNoYQogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICsrc3RhcnRMZW5ndGg7CiAgICAgICAgIGlmIChzdGFy
dExlbmd0aCA+IDYpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogICAgICAgICBzdGFydFJhbmdlID0gKHN0YXJ0UmFuZ2UgPDwgNCkg
fCB0b0FTQ0lJSGV4VmFsdWUoKnB0cik7CiAgICAgICAgICsrcHRyOwogICAgIH0KLSAgICAKKwog
ICAgIC8vIEhhbmRsZSB0aGUgY2FzZSBvZiByYW5nZXMgc2VwYXJhdGVkIGJ5ICItIiBzaWduLgog
ICAgIGlmICgyICsgc3RhcnRMZW5ndGggPCBsZW5ndGggJiYgKnB0ciA9PSAnLScpIHsKICAgICAg
ICAgaWYgKCFzdGFydExlbmd0aCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIAogICAgICAgICAvLyBQYXJzZSB0aGUg
ZW5kaW5nIGhleCBudW1iZXIgKG9yIGl0cyBwcmVmaXgpLgogICAgICAgICB1bnNpZ25lZCBlbmRS
YW5nZSA9IDA7CkBAIC0zMjUsMTcgKzMyOSwxOCBAQCBzdGF0aWMgYm9vbCBwYXJzZVVuaWNvZGVS
YW5nZShjb25zdCBVQ2hhCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICArK2Vu
ZExlbmd0aDsKICAgICAgICAgICAgIGlmIChlbmRMZW5ndGggPiA2KQotICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAg
ICAgICAgICAgZW5kUmFuZ2UgPSAoZW5kUmFuZ2UgPDwgNCkgfCB0b0FTQ0lJSGV4VmFsdWUoKnB0
cik7CiAgICAgICAgICAgICArK3B0cjsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYg
KCFlbmRMZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogICAgICAgICAKKyAgICAgICAgVW5pY29kZVJhbmdlIHJhbmdlOwog
ICAgICAgICByYW5nZS5maXJzdCA9IHN0YXJ0UmFuZ2U7CiAgICAgICAgIHJhbmdlLnNlY29uZCA9
IGVuZFJhbmdlOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHJhbmdlOwog
ICAgIH0KICAgICAKICAgICAvLyBIYW5kbGUgdGhlIGNhc2Ugb2YgYSBudW1iZXIgd2l0aCBzb21l
IG9wdGlvbmFsIHRyYWlsaW5nIHF1ZXN0aW9uIG1hcmtzLgpAQCAtMzQ1LDI3ICszNTAsMzIgQEAg
c3RhdGljIGJvb2wgcGFyc2VVbmljb2RlUmFuZ2UoY29uc3QgVUNoYQogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICsrc3RhcnRMZW5ndGg7CiAgICAgICAgIGlmIChzdGFydExlbmd0aCA+IDYp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogICAgICAgICBzdGFydFJhbmdlIDw8PSA0OwogICAgICAgICBlbmRSYW5nZSA9IChlbmRS
YW5nZSA8PCA0KSB8IDB4RjsKICAgICAgICAgKytwdHI7CiAgICAgfQogICAgIAogICAgIGlmICgh
c3RhcnRMZW5ndGgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKICAgICAKKyAgICBVbmljb2RlUmFuZ2UgcmFuZ2U7CiAgICAgcmFuZ2UuZmlyc3Qg
PSBzdGFydFJhbmdlOwogICAgIHJhbmdlLnNlY29uZCA9IGVuZFJhbmdlOwotICAgIHJldHVybiB0
cnVlOworICAgIHJldHVybiByYW5nZTsKIH0KIAotYm9vbCBwYXJzZUtlcm5pbmdVbmljb2RlU3Ry
aW5nKGNvbnN0IFN0cmluZyYgaW5wdXQsIFVuaWNvZGVSYW5nZXMmIHJhbmdlTGlzdCwgSGFzaFNl
dDxTdHJpbmc+JiBzdHJpbmdMaXN0KQorT3B0aW9uYWw8c3RkOjpwYWlyPFVuaWNvZGVSYW5nZXMs
IEhhc2hTZXQ8U3RyaW5nPj4+IHBhcnNlS2VybmluZ1VuaWNvZGVTdHJpbmcoY29uc3QgU3RyaW5n
JiBpbnB1dCkKIHsKICAgICAvLyBGSVhNRTogUGFyc2luZyBlcnJvciBkZXRlY3Rpb24gaXMgbWlz
c2luZy4KKwogICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyhpbnB1
dCkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7CiAgICAgY29uc3QgVUNoYXIqIHB0ciA9IHVwY29u
dmVydGVkQ2hhcmFjdGVyczsKICAgICBjb25zdCBVQ2hhciogZW5kID0gcHRyICsgaW5wdXQubGVu
Z3RoKCk7CiAKKyAgICBVbmljb2RlUmFuZ2VzIHJhbmdlTGlzdDsKKyAgICBIYXNoU2V0PFN0cmlu
Zz4gc3RyaW5nTGlzdDsKKwogICAgIHdoaWxlIChwdHIgPCBlbmQpIHsKICAgICAgICAgY29uc3Qg
VUNoYXIqIGlucHV0U3RhcnQgPSBwdHI7CiAgICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgKnB0
ciAhPSAnLCcpCkBAIC0zNzUsMTA1ICszODUsMzcgQEAgYm9vbCBwYXJzZUtlcm5pbmdVbmljb2Rl
U3RyaW5nKGNvbnN0IFN0cgogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgLy8gVHJ5IHRv
IHBhcnNlIHVuaWNvZGUgcmFuZ2UgZmlyc3QKLSAgICAgICAgVW5pY29kZVJhbmdlIHJhbmdlOwot
ICAgICAgICBpZiAocGFyc2VVbmljb2RlUmFuZ2UoaW5wdXRTdGFydCwgcHRyIC0gaW5wdXRTdGFy
dCwgcmFuZ2UpKQotICAgICAgICAgICAgcmFuZ2VMaXN0LmFwcGVuZChyYW5nZSk7CisgICAgICAg
IGlmIChhdXRvIHJhbmdlID0gcGFyc2VVbmljb2RlUmFuZ2UoaW5wdXRTdGFydCwgcHRyIC0gaW5w
dXRTdGFydCkpCisgICAgICAgICAgICByYW5nZUxpc3QuYXBwZW5kKFdURk1vdmUoKnJhbmdlKSk7
CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHN0cmluZ0xpc3QuYWRkKFN0cmluZyhpbnB1dFN0
YXJ0LCBwdHIgLSBpbnB1dFN0YXJ0KSk7CiAgICAgICAgICsrcHRyOwogICAgIH0KIAotICAgIHJl
dHVybiB0cnVlOworICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihyYW5nZUxpc3QsIHN0cmluZ0xp
c3QpOwogfQogCi1WZWN0b3I8U3RyaW5nPiBwYXJzZURlbGltaXRlZFN0cmluZyhjb25zdCBTdHJp
bmcmIGlucHV0LCBjb25zdCBjaGFyIHNlcGVyYXRvcikKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlPiBzdGF0aWMgT3B0aW9uYWw8RmxvYXRQb2ludD4gZ2VuZXJpY1BhcnNlRmxvYXRQ
b2ludChjb25zdCBDaGFyYWN0ZXJUeXBlKiYgY3VycmVudCwgY29uc3QgQ2hhcmFjdGVyVHlwZSog
ZW5kKQogewotICAgIFZlY3RvcjxTdHJpbmc+IHZhbHVlczsKLQotICAgIGF1dG8gdXBjb252ZXJ0
ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyhpbnB1dCkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7
Ci0gICAgY29uc3QgVUNoYXIqIHB0ciA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKLSAgICBjb25z
dCBVQ2hhciogZW5kID0gcHRyICsgaW5wdXQubGVuZ3RoKCk7Ci0gICAgc2tpcE9wdGlvbmFsU1ZH
U3BhY2VzKHB0ciwgZW5kKTsKLQotICAgIHdoaWxlIChwdHIgPCBlbmQpIHsKLSAgICAgICAgLy8g
TGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGUgc3BhY2UsIGFuZCB3aGl0ZSBzcGFjZSBiZWZvcmUg
YW5kIGFmdGVyIHNlbWljb2xvbiBzZXBhcmF0b3JzLCB3aWxsIGJlIGlnbm9yZWQuCi0gICAgICAg
IGNvbnN0IFVDaGFyKiBpbnB1dFN0YXJ0ID0gcHRyOwotICAgICAgICB3aGlsZSAocHRyIDwgZW5k
ICYmICpwdHIgIT0gc2VwZXJhdG9yKSAvLyBjYXJlZnVsIG5vdCB0byBpZ25vcmUgd2hpdGVzcGFj
ZSBpbnNpZGUgaW5wdXRzCi0gICAgICAgICAgICBwdHIrKzsKKyAgICBhdXRvIHggPSBwYXJzZU51
bWJlcihjdXJyZW50LCBlbmQpOworICAgIGlmICgheCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIAotICAgICAgICBpZiAocHRyID09IGlucHV0U3RhcnQpCi0gICAgICAgICAgICBicmVh
azsKLQotICAgICAgICAvLyB3YWxrIGJhY2t3YXJkcyBmcm9tIHRoZSA7IHRvIGlnbm9yZSBhbnkg
d2hpdGVzcGFjZQotICAgICAgICBjb25zdCBVQ2hhciogaW5wdXRFbmQgPSBwdHIgLSAxOwotICAg
ICAgICB3aGlsZSAoaW5wdXRTdGFydCA8IGlucHV0RW5kICYmIGlzU1ZHU3BhY2UoKmlucHV0RW5k
KSkKLSAgICAgICAgICAgIGlucHV0RW5kLS07CisgICAgYXV0byB5ID0gcGFyc2VOdW1iZXIoY3Vy
cmVudCwgZW5kKTsKKyAgICBpZiAoIXkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAK
LSAgICAgICAgdmFsdWVzLmFwcGVuZChTdHJpbmcoaW5wdXRTdGFydCwgaW5wdXRFbmQgLSBpbnB1
dFN0YXJ0ICsgMSkpOwotICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXNPckRlbGltaXRlcihw
dHIsIGVuZCwgc2VwZXJhdG9yKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdmFsdWVzOworICAgIHJl
dHVybiBGbG9hdFBvaW50IHsgKngsICp5IH07CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlPgotYm9vbCBwYXJzZUZsb2F0UG9pbnQoY29uc3QgQ2hhcmFjdGVyVHlwZSomIGN1
cnJlbnQsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCwgRmxvYXRQb2ludCYgcG9pbnQpCitPcHRp
b25hbDxGbG9hdFBvaW50PiBwYXJzZUZsb2F0UG9pbnQoY29uc3QgTENoYXIqJiBjdXJyZW50LCBj
b25zdCBMQ2hhciogZW5kKQogewotICAgIGZsb2F0IHg7Ci0gICAgZmxvYXQgeTsKLSAgICBpZiAo
IXBhcnNlTnVtYmVyKGN1cnJlbnQsIGVuZCwgeCkKLSAgICAgICAgfHwgIXBhcnNlTnVtYmVyKGN1
cnJlbnQsIGVuZCwgeSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBwb2ludCA9IEZsb2F0
UG9pbnQoeCwgeSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXRlbXBsYXRlIGJvb2wgcGFyc2VG
bG9hdFBvaW50KGNvbnN0IExDaGFyKiYgY3VycmVudCwgY29uc3QgTENoYXIqIGVuZCwgRmxvYXRQ
b2ludCYgcG9pbnQxKTsKLXRlbXBsYXRlIGJvb2wgcGFyc2VGbG9hdFBvaW50KGNvbnN0IFVDaGFy
KiYgY3VycmVudCwgY29uc3QgVUNoYXIqIGVuZCwgRmxvYXRQb2ludCYgcG9pbnQxKTsKLQotdGVt
cGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1pbmxpbmUgYm9vbCBwYXJzZUZsb2F0UG9p
bnQyKGNvbnN0IENoYXJhY3RlclR5cGUqJiBjdXJyZW50LCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBl
bmQsIEZsb2F0UG9pbnQmIHBvaW50MSwgRmxvYXRQb2ludCYgcG9pbnQyKQotewotICAgIGZsb2F0
IHgxOwotICAgIGZsb2F0IHkxOwotICAgIGZsb2F0IHgyOwotICAgIGZsb2F0IHkyOwotICAgIGlm
ICghcGFyc2VOdW1iZXIoY3VycmVudCwgZW5kLCB4MSkKLSAgICAgICAgfHwgIXBhcnNlTnVtYmVy
KGN1cnJlbnQsIGVuZCwgeTEpCi0gICAgICAgIHx8ICFwYXJzZU51bWJlcihjdXJyZW50LCBlbmQs
IHgyKQotICAgICAgICB8fCAhcGFyc2VOdW1iZXIoY3VycmVudCwgZW5kLCB5MikpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBwb2ludDEgPSBGbG9hdFBvaW50KHgxLCB5MSk7Ci0gICAgcG9p
bnQyID0gRmxvYXRQb2ludCh4MiwgeTIpOwotICAgIHJldHVybiB0cnVlOwotfQotCi10ZW1wbGF0
ZSBib29sIHBhcnNlRmxvYXRQb2ludDIoY29uc3QgTENoYXIqJiBjdXJyZW50LCBjb25zdCBMQ2hh
ciogZW5kLCBGbG9hdFBvaW50JiBwb2ludDEsIEZsb2F0UG9pbnQmIHBvaW50Mik7Ci10ZW1wbGF0
ZSBib29sIHBhcnNlRmxvYXRQb2ludDIoY29uc3QgVUNoYXIqJiBjdXJyZW50LCBjb25zdCBVQ2hh
ciogZW5kLCBGbG9hdFBvaW50JiBwb2ludDEsIEZsb2F0UG9pbnQmIHBvaW50Mik7Ci0KLXRlbXBs
YXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotYm9vbCBwYXJzZUZsb2F0UG9pbnQzKGNvbnN0
IENoYXJhY3RlclR5cGUqJiBjdXJyZW50LCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQsIEZsb2F0
UG9pbnQmIHBvaW50MSwgRmxvYXRQb2ludCYgcG9pbnQyLCBGbG9hdFBvaW50JiBwb2ludDMpCi17
Ci0gICAgZmxvYXQgeDE7Ci0gICAgZmxvYXQgeTE7Ci0gICAgZmxvYXQgeDI7Ci0gICAgZmxvYXQg
eTI7Ci0gICAgZmxvYXQgeDM7Ci0gICAgZmxvYXQgeTM7Ci0gICAgaWYgKCFwYXJzZU51bWJlcihj
dXJyZW50LCBlbmQsIHgxKQotICAgICAgICB8fCAhcGFyc2VOdW1iZXIoY3VycmVudCwgZW5kLCB5
MSkKLSAgICAgICAgfHwgIXBhcnNlTnVtYmVyKGN1cnJlbnQsIGVuZCwgeDIpCi0gICAgICAgIHx8
ICFwYXJzZU51bWJlcihjdXJyZW50LCBlbmQsIHkyKQotICAgICAgICB8fCAhcGFyc2VOdW1iZXIo
Y3VycmVudCwgZW5kLCB4MykKLSAgICAgICAgfHwgIXBhcnNlTnVtYmVyKGN1cnJlbnQsIGVuZCwg
eTMpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcG9pbnQxID0gRmxvYXRQb2ludCh4MSwg
eTEpOwotICAgIHBvaW50MiA9IEZsb2F0UG9pbnQoeDIsIHkyKTsKLSAgICBwb2ludDMgPSBGbG9h
dFBvaW50KHgzLCB5Myk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGdlbmVyaWNQYXJz
ZUZsb2F0UG9pbnQoY3VycmVudCwgZW5kKTsKIH0KIAotdGVtcGxhdGUgYm9vbCBwYXJzZUZsb2F0
UG9pbnQzKGNvbnN0IExDaGFyKiYgY3VycmVudCwgY29uc3QgTENoYXIqIGVuZCwgRmxvYXRQb2lu
dCYgcG9pbnQxLCBGbG9hdFBvaW50JiBwb2ludDIsIEZsb2F0UG9pbnQmIHBvaW50Myk7Ci10ZW1w
bGF0ZSBib29sIHBhcnNlRmxvYXRQb2ludDMoY29uc3QgVUNoYXIqJiBjdXJyZW50LCBjb25zdCBV
Q2hhciogZW5kLCBGbG9hdFBvaW50JiBwb2ludDEsIEZsb2F0UG9pbnQmIHBvaW50MiwgRmxvYXRQ
b2ludCYgcG9pbnQzKTsKK09wdGlvbmFsPEZsb2F0UG9pbnQ+IHBhcnNlRmxvYXRQb2ludChjb25z
dCBVQ2hhciomIGN1cnJlbnQsIGNvbnN0IFVDaGFyKiBlbmQpCit7CisgICAgcmV0dXJuIGdlbmVy
aWNQYXJzZUZsb2F0UG9pbnQoY3VycmVudCwgZW5kKTsKK30KIAogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdQYXJzZXJVdGlsaXRpZXMuaAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3
ICsyNSw3IEBACiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgogCi10eXBlZGVmIHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+IFVuaWNv
ZGVSYW5nZTsKK3R5cGVkZWYgc3RkOjpwYWlyPFVDaGFyMzIsIFVDaGFyMzI+IFVuaWNvZGVSYW5n
ZTsKIHR5cGVkZWYgVmVjdG9yPFVuaWNvZGVSYW5nZT4gVW5pY29kZVJhbmdlczsKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpAQCAtMzMsNDIgKzMzLDQ1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNs
YXNzIEZsb2F0UG9pbnQ7CiBjbGFzcyBGbG9hdFJlY3Q7CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBD
aGFyYWN0ZXJUeXBlPgotYm9vbCBwYXJzZVNWR051bWJlcihDaGFyYWN0ZXJUeXBlKiBwdHIsIHNp
emVfdCBsZW5ndGgsIGRvdWJsZSYgbnVtYmVyKTsKLWJvb2wgcGFyc2VOdW1iZXIoY29uc3QgTENo
YXIqJiBwdHIsIGNvbnN0IExDaGFyKiBlbmQsIGZsb2F0JiBudW1iZXIsIGJvb2wgc2tpcCA9IHRy
dWUpOwotYm9vbCBwYXJzZU51bWJlcihjb25zdCBVQ2hhciomIHB0ciwgY29uc3QgVUNoYXIqIGVu
ZCwgZmxvYXQmIG51bWJlciwgYm9vbCBza2lwID0gdHJ1ZSk7Ci1ib29sIHBhcnNlTnVtYmVyRnJv
bVN0cmluZyhjb25zdCBTdHJpbmcmLCBmbG9hdCYgbnVtYmVyLCBib29sIHNraXAgPSB0cnVlKTsK
LWJvb2wgcGFyc2VOdW1iZXJPcHRpb25hbE51bWJlcihjb25zdCBTdHJpbmcmIHMsIGZsb2F0JiBo
LCBmbG9hdCYgdik7Ci1ib29sIHBhcnNlQXJjRmxhZyhjb25zdCBMQ2hhciomIHB0ciwgY29uc3Qg
TENoYXIqIGVuZCwgYm9vbCYgZmxhZyk7Ci1ib29sIHBhcnNlQXJjRmxhZyhjb25zdCBVQ2hhciom
IHB0ciwgY29uc3QgVUNoYXIqIGVuZCwgYm9vbCYgZmxhZyk7Ci1ib29sIHBhcnNlUG9pbnQoY29u
c3QgU3RyaW5nJiwgRmxvYXRQb2ludCYpOwotYm9vbCBwYXJzZVJlY3QoY29uc3QgU3RyaW5nJiwg
RmxvYXRSZWN0Jik7Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotYm9vbCBw
YXJzZUZsb2F0UG9pbnQoY29uc3QgQ2hhcmFjdGVyVHlwZSomIGN1cnJlbnQsIGNvbnN0IENoYXJh
Y3RlclR5cGUqIGVuZCwgRmxvYXRQb2ludCYpOwotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+Ci1ib29sIHBhcnNlRmxvYXRQb2ludDIoY29uc3QgQ2hhcmFjdGVyVHlwZSomIGN1cnJl
bnQsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCwgRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmKTsK
LXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotYm9vbCBwYXJzZUZsb2F0UG9pbnQz
KGNvbnN0IENoYXJhY3RlclR5cGUqJiBjdXJyZW50LCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQs
IEZsb2F0UG9pbnQmLCBGbG9hdFBvaW50JiwgRmxvYXRQb2ludCYpOworZW51bSBjbGFzcyBTdWZm
aXhTa2lwcGluZ1BvbGljeSB7CisgICAgRG9udFNraXAsCisgICAgU2tpcAorfTsKKworT3B0aW9u
YWw8ZmxvYXQ+IHBhcnNlTnVtYmVyKGNvbnN0IExDaGFyKiYgY3VycmVudCwgY29uc3QgTENoYXIq
IGVuZCwgU3VmZml4U2tpcHBpbmdQb2xpY3kgPSBTdWZmaXhTa2lwcGluZ1BvbGljeTo6U2tpcCk7
CitPcHRpb25hbDxmbG9hdD4gcGFyc2VOdW1iZXIoY29uc3QgVUNoYXIqJiBjdXJyZW50LCBjb25z
dCBVQ2hhciogZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeSA9IFN1ZmZpeFNraXBwaW5nUG9saWN5
OjpTa2lwKTsKK09wdGlvbmFsPGZsb2F0PiBwYXJzZU51bWJlcihjb25zdCBTdHJpbmcmLCBTdWZm
aXhTa2lwcGluZ1BvbGljeSA9IFN1ZmZpeFNraXBwaW5nUG9saWN5OjpTa2lwKTsKKworT3B0aW9u
YWw8c3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4+IHBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIoY29u
c3QgU3RyaW5nJik7CisKK09wdGlvbmFsPGJvb2w+IHBhcnNlQXJjRmxhZyhjb25zdCBMQ2hhciom
IGN1cnJlbnQsIGNvbnN0IExDaGFyKiBlbmQpOworT3B0aW9uYWw8Ym9vbD4gcGFyc2VBcmNGbGFn
KGNvbnN0IFVDaGFyKiYgY3VycmVudCwgY29uc3QgVUNoYXIqIGVuZCk7CisKK09wdGlvbmFsPEZs
b2F0UG9pbnQ+IHBhcnNlUG9pbnQoY29uc3QgU3RyaW5nJik7CitPcHRpb25hbDxGbG9hdFJlY3Q+
IHBhcnNlUmVjdChjb25zdCBTdHJpbmcmKTsKKworT3B0aW9uYWw8RmxvYXRQb2ludD4gcGFyc2VG
bG9hdFBvaW50KGNvbnN0IExDaGFyKiYgY3VycmVudCwgY29uc3QgTENoYXIqIGVuZCk7CitPcHRp
b25hbDxGbG9hdFBvaW50PiBwYXJzZUZsb2F0UG9pbnQoY29uc3QgVUNoYXIqJiBjdXJyZW50LCBj
b25zdCBVQ2hhciogZW5kKTsKKworT3B0aW9uYWw8c3RkOjpwYWlyPFVuaWNvZGVSYW5nZXMsIEhh
c2hTZXQ8U3RyaW5nPj4+IHBhcnNlS2VybmluZ1VuaWNvZGVTdHJpbmcoY29uc3QgU3RyaW5nJik7
CitPcHRpb25hbDxIYXNoU2V0PFN0cmluZz4+IHBhcnNlR2x5cGhOYW1lKGNvbnN0IFN0cmluZyYp
OworCiAKIC8vIFNWRyBhbGxvd3Mgc2V2ZXJhbCBkaWZmZXJlbnQgd2hpdGVzcGFjZSBjaGFyYWN0
ZXJzOgogLy8gaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHL3BhdGhzLmh0bWwjUGF0aERhdGFCTkYK
LXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotaW5saW5lIGJvb2wgaXNTVkdTcGFj
ZShDaGFyYWN0ZXJUeXBlIGMpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBpbmxp
bmUgYm9vbCBpc1NWR1NwYWNlKENoYXJhY3RlclR5cGUgYykKIHsKICAgICByZXR1cm4gYyA9PSAn
ICcgfHwgYyA9PSAnXHQnIHx8IGMgPT0gJ1xuJyB8fCBjID09ICdccic7CiB9CiAKLXRlbXBsYXRl
IDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotaW5saW5lIGJvb2wgc2tpcE9wdGlvbmFsU1ZHU3Bh
Y2VzKGNvbnN0IENoYXJhY3RlclR5cGUqJiBwdHIsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCkK
K3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IGlubGluZSBib29sIHNraXBPcHRpb25h
bFNWR1NwYWNlcyhjb25zdCBDaGFyYWN0ZXJUeXBlKiYgcHRyLCBjb25zdCBDaGFyYWN0ZXJUeXBl
KiBlbmQpCiB7CiAgICAgd2hpbGUgKHB0ciA8IGVuZCAmJiBpc1NWR1NwYWNlKCpwdHIpKQogICAg
ICAgICBwdHIrKzsKICAgICByZXR1cm4gcHRyIDwgZW5kOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZT4KLWlubGluZSBib29sIHNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVs
aW1pdGVyKGNvbnN0IENoYXJhY3RlclR5cGUqJiBwdHIsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVu
ZCwgY2hhciBkZWxpbWl0ZXIgPSAnLCcpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBl
PiBpbmxpbmUgYm9vbCBza2lwT3B0aW9uYWxTVkdTcGFjZXNPckRlbGltaXRlcihjb25zdCBDaGFy
YWN0ZXJUeXBlKiYgcHRyLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQsIGNoYXIgZGVsaW1pdGVy
ID0gJywnKQogewogICAgIGlmIChwdHIgPCBlbmQgJiYgIWlzU1ZHU3BhY2UoKnB0cikgJiYgKnB0
ciAhPSBkZWxpbWl0ZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTgxLDEwICs4NCw2IEBA
IGlubGluZSBib29sIHNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVsaW0KICAgICByZXR1cm4gcHRy
IDwgZW5kOwogfQogCi1WZWN0b3I8U3RyaW5nPiBwYXJzZURlbGltaXRlZFN0cmluZyhjb25zdCBT
dHJpbmcmIGlucHV0LCBjb25zdCBjaGFyIHNlcGVyYXRvcik7Ci1ib29sIHBhcnNlS2VybmluZ1Vu
aWNvZGVTdHJpbmcoY29uc3QgU3RyaW5nJiBpbnB1dCwgVW5pY29kZVJhbmdlcyYsIEhhc2hTZXQ8
U3RyaW5nPiYgc3RyaW5nTGlzdCk7Ci1ib29sIHBhcnNlR2x5cGhOYW1lKGNvbnN0IFN0cmluZyYg
aW5wdXQsIEhhc2hTZXQ8U3RyaW5nPiYgdmFsdWVzKTsKLQogaW5saW5lIGJvb2wgc2tpcFN0cmlu
Zyhjb25zdCBVQ2hhciomIHB0ciwgY29uc3QgVUNoYXIqIGVuZCwgY29uc3QgVUNoYXIqIG5hbWUs
IGludCBsZW5ndGgpCiB7CiAgICAgaWYgKGVuZCAtIHB0ciA8IGxlbmd0aCkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQmxlbmRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1BhdGhCbGVuZGVyLmNwcAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1BhdGhCbGVuZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDIw
MCArMTE2LDE5OCBAQCBGbG9hdFBvaW50IFNWR1BhdGhCbGVuZGVyOjpibGVuZEFuaW1hdGVkCiAg
ICAgcmV0dXJuIGFuaW1hdGVkUG9pbnQ7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9u
PiB1c2luZyBQdWxsRnJvbVNvdXJjZXNSZXN1bHQgPSBzdGQ6OnBhaXI8dHlwZW5hbWUgc3RkOjpp
bnZva2VfcmVzdWx0X3Q8RnVuY3Rpb24sIFNWR1BhdGhTb3VyY2U+Ojp2YWx1ZV90eXBlLCB0eXBl
bmFtZSBzdGQ6Omludm9rZV9yZXN1bHRfdDxGdW5jdGlvbiwgU1ZHUGF0aFNvdXJjZT46OnZhbHVl
X3R5cGU+OwordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb24+IHN0YXRpYyBPcHRpb25hbDxQdWxs
RnJvbVNvdXJjZXNSZXN1bHQ8RnVuY3Rpb24+PiBwdWxsRnJvbVNvdXJjZXMoU1ZHUGF0aFNvdXJj
ZSYgZnJvbVNvdXJjZSwgU1ZHUGF0aFNvdXJjZSYgdG9Tb3VyY2UsIEZ1bmN0aW9uJiYgZnVuY3Rp
b24pCit7CisgICAgaWYgKCFmcm9tU291cmNlLmhhc01vcmVEYXRhKCkpCisgICAgICAgIHJldHVy
biBQdWxsRnJvbVNvdXJjZXNSZXN1bHQ8RnVuY3Rpb24+IHsgfTsKKworICAgIGF1dG8gcGFyc2Vk
RnJvbSA9IHN0ZDo6aW52b2tlKGZ1bmN0aW9uLCBmcm9tU291cmNlKTsKKyAgICBpZiAoIXBhcnNl
ZEZyb20pCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgYXV0byBwYXJzZWRUbyA9
IHN0ZDo6aW52b2tlKGZ1bmN0aW9uLCB0b1NvdXJjZSk7CisgICAgaWYgKCFwYXJzZWRUbykKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIHJldHVybiBQdWxsRnJvbVNvdXJjZXNS
ZXN1bHQ8RnVuY3Rpb24+IHsgV1RGTW92ZSgqcGFyc2VkRnJvbSksIFdURk1vdmUoKnBhcnNlZFRv
KSB9OworfQorCiBib29sIFNWR1BhdGhCbGVuZGVyOjpibGVuZE1vdmVUb1NlZ21lbnQoZmxvYXQg
cHJvZ3Jlc3MpCiB7Ci0gICAgRmxvYXRQb2ludCBmcm9tVGFyZ2V0UG9pbnQ7Ci0gICAgRmxvYXRQ
b2ludCB0b1RhcmdldFBvaW50OwotICAgIGlmICgobV9mcm9tU291cmNlLmhhc01vcmVEYXRhKCkg
JiYgIW1fZnJvbVNvdXJjZS5wYXJzZU1vdmVUb1NlZ21lbnQoZnJvbVRhcmdldFBvaW50KSkKLSAg
ICAgICAgfHwgIW1fdG9Tb3VyY2UucGFyc2VNb3ZlVG9TZWdtZW50KHRvVGFyZ2V0UG9pbnQpKQor
ICAgIGF1dG8gcmVzdWx0ID0gcHVsbEZyb21Tb3VyY2VzKG1fZnJvbVNvdXJjZSwgbV90b1NvdXJj
ZSwgJlNWR1BhdGhTb3VyY2U6OnBhcnNlTW92ZVRvU2VnbWVudCk7CisgICAgaWYgKCFyZXN1bHQp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmICghbV9jb25zdW1lcikKICAgICAgICAg
cmV0dXJuIHRydWU7CiAKLSAgICBtX2NvbnN1bWVyLT5tb3ZlVG8oYmxlbmRBbmltYXRlZEZsb2F0
UG9pbnQoZnJvbVRhcmdldFBvaW50LCB0b1RhcmdldFBvaW50LCBwcm9ncmVzcyksIGZhbHNlLCBt
X2lzSW5GaXJzdEhhbGZPZkFuaW1hdGlvbiA/IG1fZnJvbU1vZGUgOiBtX3RvTW9kZSk7Ci0gICAg
bV9mcm9tQ3VycmVudFBvaW50ID0gbV9mcm9tTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8g
ZnJvbVRhcmdldFBvaW50IDogbV9mcm9tQ3VycmVudFBvaW50ICsgZnJvbVRhcmdldFBvaW50Owot
ICAgIG1fdG9DdXJyZW50UG9pbnQgPSBtX3RvTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8g
dG9UYXJnZXRQb2ludCA6IG1fdG9DdXJyZW50UG9pbnQgKyB0b1RhcmdldFBvaW50OworICAgIGF1
dG8gW2Zyb20sIHRvXSA9ICpyZXN1bHQ7CisKKyAgICBtX2NvbnN1bWVyLT5tb3ZlVG8oYmxlbmRB
bmltYXRlZEZsb2F0UG9pbnQoZnJvbS50YXJnZXRQb2ludCwgdG8udGFyZ2V0UG9pbnQsIHByb2dy
ZXNzKSwgZmFsc2UsIG1faXNJbkZpcnN0SGFsZk9mQW5pbWF0aW9uID8gbV9mcm9tTW9kZSA6IG1f
dG9Nb2RlKTsKKyAgICBtX2Zyb21DdXJyZW50UG9pbnQgPSBtX2Zyb21Nb2RlID09IEFic29sdXRl
Q29vcmRpbmF0ZXMgPyBmcm9tLnRhcmdldFBvaW50IDogbV9mcm9tQ3VycmVudFBvaW50ICsgZnJv
bS50YXJnZXRQb2ludDsKKyAgICBtX3RvQ3VycmVudFBvaW50ID0gbV90b01vZGUgPT0gQWJzb2x1
dGVDb29yZGluYXRlcyA/IHRvLnRhcmdldFBvaW50IDogbV90b0N1cnJlbnRQb2ludCArIHRvLnRh
cmdldFBvaW50OwogICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIFNWR1BhdGhCbGVuZGVyOjpi
bGVuZExpbmVUb1NlZ21lbnQoZmxvYXQgcHJvZ3Jlc3MpCiB7Ci0gICAgRmxvYXRQb2ludCBmcm9t
VGFyZ2V0UG9pbnQ7Ci0gICAgRmxvYXRQb2ludCB0b1RhcmdldFBvaW50OwotICAgIGlmICgobV9m
cm9tU291cmNlLmhhc01vcmVEYXRhKCkgJiYgIW1fZnJvbVNvdXJjZS5wYXJzZUxpbmVUb1NlZ21l
bnQoZnJvbVRhcmdldFBvaW50KSkKLSAgICAgICAgfHwgIW1fdG9Tb3VyY2UucGFyc2VMaW5lVG9T
ZWdtZW50KHRvVGFyZ2V0UG9pbnQpKQorICAgIGF1dG8gcmVzdWx0ID0gcHVsbEZyb21Tb3VyY2Vz
KG1fZnJvbVNvdXJjZSwgbV90b1NvdXJjZSwgJlNWR1BhdGhTb3VyY2U6OnBhcnNlTGluZVRvU2Vn
bWVudCk7CisgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlm
ICghbV9jb25zdW1lcikKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBtX2NvbnN1bWVyLT5s
aW5lVG8oYmxlbmRBbmltYXRlZEZsb2F0UG9pbnQoZnJvbVRhcmdldFBvaW50LCB0b1RhcmdldFBv
aW50LCBwcm9ncmVzcyksIG1faXNJbkZpcnN0SGFsZk9mQW5pbWF0aW9uID8gbV9mcm9tTW9kZSA6
IG1fdG9Nb2RlKTsKLSAgICBtX2Zyb21DdXJyZW50UG9pbnQgPSBtX2Zyb21Nb2RlID09IEFic29s
dXRlQ29vcmRpbmF0ZXMgPyBmcm9tVGFyZ2V0UG9pbnQgOiBtX2Zyb21DdXJyZW50UG9pbnQgKyBm
cm9tVGFyZ2V0UG9pbnQ7Ci0gICAgbV90b0N1cnJlbnRQb2ludCA9IG1fdG9Nb2RlID09IEFic29s
dXRlQ29vcmRpbmF0ZXMgPyB0b1RhcmdldFBvaW50IDogbV90b0N1cnJlbnRQb2ludCArIHRvVGFy
Z2V0UG9pbnQ7CisgICAgYXV0byBbZnJvbSwgdG9dID0gKnJlc3VsdDsKKworICAgIG1fY29uc3Vt
ZXItPmxpbmVUbyhibGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tLnRhcmdldFBvaW50LCB0by50
YXJnZXRQb2ludCwgcHJvZ3Jlc3MpLCBtX2lzSW5GaXJzdEhhbGZPZkFuaW1hdGlvbiA/IG1fZnJv
bU1vZGUgOiBtX3RvTW9kZSk7CisgICAgbV9mcm9tQ3VycmVudFBvaW50ID0gbV9mcm9tTW9kZSA9
PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gZnJvbS50YXJnZXRQb2ludCA6IG1fZnJvbUN1cnJlbnRQ
b2ludCArIGZyb20udGFyZ2V0UG9pbnQ7CisgICAgbV90b0N1cnJlbnRQb2ludCA9IG1fdG9Nb2Rl
ID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyB0by50YXJnZXRQb2ludCA6IG1fdG9DdXJyZW50UG9p
bnQgKyB0by50YXJnZXRQb2ludDsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBTVkdQYXRo
QmxlbmRlcjo6YmxlbmRMaW5lVG9Ib3Jpem9udGFsU2VnbWVudChmbG9hdCBwcm9ncmVzcykKIHsK
LSAgICBmbG9hdCBmcm9tWCA9IDA7Ci0gICAgZmxvYXQgdG9YID0gMDsKLSAgICBpZiAoKG1fZnJv
bVNvdXJjZS5oYXNNb3JlRGF0YSgpICYmICFtX2Zyb21Tb3VyY2UucGFyc2VMaW5lVG9Ib3Jpem9u
dGFsU2VnbWVudChmcm9tWCkpCi0gICAgICAgIHx8ICFtX3RvU291cmNlLnBhcnNlTGluZVRvSG9y
aXpvbnRhbFNlZ21lbnQodG9YKSkKKyAgICBhdXRvIHJlc3VsdCA9IHB1bGxGcm9tU291cmNlcyht
X2Zyb21Tb3VyY2UsIG1fdG9Tb3VyY2UsICZTVkdQYXRoU291cmNlOjpwYXJzZUxpbmVUb0hvcml6
b250YWxTZWdtZW50KTsKKyAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgaWYgKCFtX2NvbnN1bWVyKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIG1fY29u
c3VtZXItPmxpbmVUb0hvcml6b250YWwoYmxlbmRBbmltYXRlZERpbWVuc29uYWxGbG9hdChmcm9t
WCwgdG9YLCBCbGVuZEhvcml6b250YWwsIHByb2dyZXNzKSwgbV9pc0luRmlyc3RIYWxmT2ZBbmlt
YXRpb24gPyBtX2Zyb21Nb2RlIDogbV90b01vZGUpOwotICAgIG1fZnJvbUN1cnJlbnRQb2ludC5z
ZXRYKG1fZnJvbU1vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IGZyb21YIDogbV9mcm9tQ3Vy
cmVudFBvaW50LngoKSArIGZyb21YKTsKLSAgICBtX3RvQ3VycmVudFBvaW50LnNldFgobV90b01v
ZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IHRvWCA6IG1fdG9DdXJyZW50UG9pbnQueCgpICsg
dG9YKTsKKyAgICBhdXRvIFtmcm9tLCB0b10gPSAqcmVzdWx0OworCisgICAgbV9jb25zdW1lci0+
bGluZVRvSG9yaXpvbnRhbChibGVuZEFuaW1hdGVkRGltZW5zb25hbEZsb2F0KGZyb20ueCwgdG8u
eCwgQmxlbmRIb3Jpem9udGFsLCBwcm9ncmVzcyksIG1faXNJbkZpcnN0SGFsZk9mQW5pbWF0aW9u
ID8gbV9mcm9tTW9kZSA6IG1fdG9Nb2RlKTsKKyAgICBtX2Zyb21DdXJyZW50UG9pbnQuc2V0WCht
X2Zyb21Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyBmcm9tLnggOiBtX2Zyb21DdXJyZW50
UG9pbnQueCgpICsgZnJvbS54KTsKKyAgICBtX3RvQ3VycmVudFBvaW50LnNldFgobV90b01vZGUg
PT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IHRvLnggOiBtX3RvQ3VycmVudFBvaW50LngoKSArIHRv
LngpOwogICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIFNWR1BhdGhCbGVuZGVyOjpibGVuZExp
bmVUb1ZlcnRpY2FsU2VnbWVudChmbG9hdCBwcm9ncmVzcykKIHsKLSAgICBmbG9hdCBmcm9tWSA9
IDA7Ci0gICAgZmxvYXQgdG9ZID0gMDsKLSAgICBpZiAoKG1fZnJvbVNvdXJjZS5oYXNNb3JlRGF0
YSgpICYmICFtX2Zyb21Tb3VyY2UucGFyc2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnQoZnJvbVkpKQot
ICAgICAgICB8fCAhbV90b1NvdXJjZS5wYXJzZUxpbmVUb1ZlcnRpY2FsU2VnbWVudCh0b1kpKQor
ICAgIGF1dG8gcmVzdWx0ID0gcHVsbEZyb21Tb3VyY2VzKG1fZnJvbVNvdXJjZSwgbV90b1NvdXJj
ZSwgJlNWR1BhdGhTb3VyY2U6OnBhcnNlTGluZVRvVmVydGljYWxTZWdtZW50KTsKKyAgICBpZiAo
IXJlc3VsdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKCFtX2NvbnN1bWVyKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIG1fY29uc3VtZXItPmxpbmVUb1ZlcnRpY2FsKGJs
ZW5kQW5pbWF0ZWREaW1lbnNvbmFsRmxvYXQoZnJvbVksIHRvWSwgQmxlbmRWZXJ0aWNhbCwgcHJv
Z3Jlc3MpLCBtX2lzSW5GaXJzdEhhbGZPZkFuaW1hdGlvbiA/IG1fZnJvbU1vZGUgOiBtX3RvTW9k
ZSk7Ci0gICAgbV9mcm9tQ3VycmVudFBvaW50LnNldFkobV9mcm9tTW9kZSA9PSBBYnNvbHV0ZUNv
b3JkaW5hdGVzID8gZnJvbVkgOiBtX2Zyb21DdXJyZW50UG9pbnQueSgpICsgZnJvbVkpOwotICAg
IG1fdG9DdXJyZW50UG9pbnQuc2V0WShtX3RvTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8g
dG9ZIDogbV90b0N1cnJlbnRQb2ludC55KCkgKyB0b1kpOworICAgIGF1dG8gW2Zyb20sIHRvXSA9
ICpyZXN1bHQ7CisKKyAgICBtX2NvbnN1bWVyLT5saW5lVG9WZXJ0aWNhbChibGVuZEFuaW1hdGVk
RGltZW5zb25hbEZsb2F0KGZyb20ueSwgdG8ueSwgQmxlbmRWZXJ0aWNhbCwgcHJvZ3Jlc3MpLCBt
X2lzSW5GaXJzdEhhbGZPZkFuaW1hdGlvbiA/IG1fZnJvbU1vZGUgOiBtX3RvTW9kZSk7CisgICAg
bV9mcm9tQ3VycmVudFBvaW50LnNldFkobV9mcm9tTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVz
ID8gZnJvbS55IDogbV9mcm9tQ3VycmVudFBvaW50LnkoKSArIGZyb20ueSk7CisgICAgbV90b0N1
cnJlbnRQb2ludC5zZXRZKG1fdG9Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyB0by55IDog
bV90b0N1cnJlbnRQb2ludC55KCkgKyB0by55KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9v
bCBTVkdQYXRoQmxlbmRlcjo6YmxlbmRDdXJ2ZVRvQ3ViaWNTZWdtZW50KGZsb2F0IHByb2dyZXNz
KQogewotICAgIEZsb2F0UG9pbnQgZnJvbVRhcmdldFBvaW50OwotICAgIEZsb2F0UG9pbnQgZnJv
bVBvaW50MTsKLSAgICBGbG9hdFBvaW50IGZyb21Qb2ludDI7Ci0gICAgRmxvYXRQb2ludCB0b1Rh
cmdldFBvaW50OwotICAgIEZsb2F0UG9pbnQgdG9Qb2ludDE7Ci0gICAgRmxvYXRQb2ludCB0b1Bv
aW50MjsKLSAgICBpZiAoKG1fZnJvbVNvdXJjZS5oYXNNb3JlRGF0YSgpICYmICFtX2Zyb21Tb3Vy
Y2UucGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KGZyb21Qb2ludDEsIGZyb21Qb2ludDIsIGZyb21U
YXJnZXRQb2ludCkpCi0gICAgICAgIHx8ICFtX3RvU291cmNlLnBhcnNlQ3VydmVUb0N1YmljU2Vn
bWVudCh0b1BvaW50MSwgdG9Qb2ludDIsIHRvVGFyZ2V0UG9pbnQpKQorICAgIGF1dG8gcmVzdWx0
ID0gcHVsbEZyb21Tb3VyY2VzKG1fZnJvbVNvdXJjZSwgbV90b1NvdXJjZSwgJlNWR1BhdGhTb3Vy
Y2U6OnBhcnNlQ3VydmVUb0N1YmljU2VnbWVudCk7CisgICAgaWYgKCFyZXN1bHQpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIGlmICghbV9jb25zdW1lcikKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAKLSAgICBtX2NvbnN1bWVyLT5jdXJ2ZVRvQ3ViaWMoYmxlbmRBbmltYXRlZEZsb2F0UG9p
bnQoZnJvbVBvaW50MSwgdG9Qb2ludDEsIHByb2dyZXNzKSwKLSAgICAgICAgYmxlbmRBbmltYXRl
ZEZsb2F0UG9pbnQoZnJvbVBvaW50MiwgdG9Qb2ludDIsIHByb2dyZXNzKSwKLSAgICAgICAgYmxl
bmRBbmltYXRlZEZsb2F0UG9pbnQoZnJvbVRhcmdldFBvaW50LCB0b1RhcmdldFBvaW50LCBwcm9n
cmVzcyksCisgICAgYXV0byBbZnJvbSwgdG9dID0gKnJlc3VsdDsKKworICAgIG1fY29uc3VtZXIt
PmN1cnZlVG9DdWJpYyhibGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tLnBvaW50MSwgdG8ucG9p
bnQxLCBwcm9ncmVzcyksCisgICAgICAgIGJsZW5kQW5pbWF0ZWRGbG9hdFBvaW50KGZyb20ucG9p
bnQyLCB0by5wb2ludDIsIHByb2dyZXNzKSwKKyAgICAgICAgYmxlbmRBbmltYXRlZEZsb2F0UG9p
bnQoZnJvbS50YXJnZXRQb2ludCwgdG8udGFyZ2V0UG9pbnQsIHByb2dyZXNzKSwKICAgICAgICAg
bV9pc0luRmlyc3RIYWxmT2ZBbmltYXRpb24gPyBtX2Zyb21Nb2RlIDogbV90b01vZGUpOwotICAg
IG1fZnJvbUN1cnJlbnRQb2ludCA9IG1fZnJvbU1vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/
IGZyb21UYXJnZXRQb2ludCA6IG1fZnJvbUN1cnJlbnRQb2ludCArIGZyb21UYXJnZXRQb2ludDsK
LSAgICBtX3RvQ3VycmVudFBvaW50ID0gbV90b01vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/
IHRvVGFyZ2V0UG9pbnQgOiBtX3RvQ3VycmVudFBvaW50ICsgdG9UYXJnZXRQb2ludDsKKyAgICBt
X2Zyb21DdXJyZW50UG9pbnQgPSBtX2Zyb21Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyBm
cm9tLnRhcmdldFBvaW50IDogbV9mcm9tQ3VycmVudFBvaW50ICsgZnJvbS50YXJnZXRQb2ludDsK
KyAgICBtX3RvQ3VycmVudFBvaW50ID0gbV90b01vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/
IHRvLnRhcmdldFBvaW50IDogbV90b0N1cnJlbnRQb2ludCArIHRvLnRhcmdldFBvaW50OwogICAg
IHJldHVybiB0cnVlOwogfQogCiBib29sIFNWR1BhdGhCbGVuZGVyOjpibGVuZEN1cnZlVG9DdWJp
Y1Ntb290aFNlZ21lbnQoZmxvYXQgcHJvZ3Jlc3MpCiB7Ci0gICAgRmxvYXRQb2ludCBmcm9tVGFy
Z2V0UG9pbnQ7Ci0gICAgRmxvYXRQb2ludCBmcm9tUG9pbnQyOwotICAgIEZsb2F0UG9pbnQgdG9U
YXJnZXRQb2ludDsKLSAgICBGbG9hdFBvaW50IHRvUG9pbnQyOwotICAgIGlmICgobV9mcm9tU291
cmNlLmhhc01vcmVEYXRhKCkgJiYgIW1fZnJvbVNvdXJjZS5wYXJzZUN1cnZlVG9DdWJpY1Ntb290
aFNlZ21lbnQoZnJvbVBvaW50MiwgZnJvbVRhcmdldFBvaW50KSkKLSAgICAgICAgfHwgIW1fdG9T
b3VyY2UucGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KHRvUG9pbnQyLCB0b1RhcmdldFBv
aW50KSkKKyAgICBhdXRvIHJlc3VsdCA9IHB1bGxGcm9tU291cmNlcyhtX2Zyb21Tb3VyY2UsIG1f
dG9Tb3VyY2UsICZTVkdQYXRoU291cmNlOjpwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQp
OworICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoIW1f
Y29uc3VtZXIpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgbV9jb25zdW1lci0+Y3VydmVU
b0N1YmljU21vb3RoKGJsZW5kQW5pbWF0ZWRGbG9hdFBvaW50KGZyb21Qb2ludDIsIHRvUG9pbnQy
LCBwcm9ncmVzcyksCi0gICAgICAgIGJsZW5kQW5pbWF0ZWRGbG9hdFBvaW50KGZyb21UYXJnZXRQ
b2ludCwgdG9UYXJnZXRQb2ludCwgcHJvZ3Jlc3MpLAorICAgIGF1dG8gW2Zyb20sIHRvXSA9ICpy
ZXN1bHQ7CisKKyAgICBtX2NvbnN1bWVyLT5jdXJ2ZVRvQ3ViaWNTbW9vdGgoYmxlbmRBbmltYXRl
ZEZsb2F0UG9pbnQoZnJvbS5wb2ludDIsIHRvLnBvaW50MiwgcHJvZ3Jlc3MpLAorICAgICAgICBi
bGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tLnRhcmdldFBvaW50LCB0by50YXJnZXRQb2ludCwg
cHJvZ3Jlc3MpLAogICAgICAgICBtX2lzSW5GaXJzdEhhbGZPZkFuaW1hdGlvbiA/IG1fZnJvbU1v
ZGUgOiBtX3RvTW9kZSk7Ci0gICAgbV9mcm9tQ3VycmVudFBvaW50ID0gbV9mcm9tTW9kZSA9PSBB
YnNvbHV0ZUNvb3JkaW5hdGVzID8gZnJvbVRhcmdldFBvaW50IDogbV9mcm9tQ3VycmVudFBvaW50
ICsgZnJvbVRhcmdldFBvaW50OwotICAgIG1fdG9DdXJyZW50UG9pbnQgPSBtX3RvTW9kZSA9PSBB
YnNvbHV0ZUNvb3JkaW5hdGVzID8gdG9UYXJnZXRQb2ludCA6IG1fdG9DdXJyZW50UG9pbnQgKyB0
b1RhcmdldFBvaW50OworICAgIG1fZnJvbUN1cnJlbnRQb2ludCA9IG1fZnJvbU1vZGUgPT0gQWJz
b2x1dGVDb29yZGluYXRlcyA/IGZyb20udGFyZ2V0UG9pbnQgOiBtX2Zyb21DdXJyZW50UG9pbnQg
KyBmcm9tLnRhcmdldFBvaW50OworICAgIG1fdG9DdXJyZW50UG9pbnQgPSBtX3RvTW9kZSA9PSBB
YnNvbHV0ZUNvb3JkaW5hdGVzID8gdG8udGFyZ2V0UG9pbnQgOiBtX3RvQ3VycmVudFBvaW50ICsg
dG8udGFyZ2V0UG9pbnQ7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgU1ZHUGF0aEJsZW5k
ZXI6OmJsZW5kQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQoZmxvYXQgcHJvZ3Jlc3MpCiB7Ci0gICAg
RmxvYXRQb2ludCBmcm9tVGFyZ2V0UG9pbnQ7Ci0gICAgRmxvYXRQb2ludCBmcm9tUG9pbnQxOwot
ICAgIEZsb2F0UG9pbnQgdG9UYXJnZXRQb2ludDsKLSAgICBGbG9hdFBvaW50IHRvUG9pbnQxOwot
ICAgIGlmICgobV9mcm9tU291cmNlLmhhc01vcmVEYXRhKCkgJiYgIW1fZnJvbVNvdXJjZS5wYXJz
ZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KGZyb21Qb2ludDEsIGZyb21UYXJnZXRQb2ludCkpCi0g
ICAgICAgIHx8ICFtX3RvU291cmNlLnBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQodG9Qb2lu
dDEsIHRvVGFyZ2V0UG9pbnQpKQorICAgIGF1dG8gcmVzdWx0ID0gcHVsbEZyb21Tb3VyY2VzKG1f
ZnJvbVNvdXJjZSwgbV90b1NvdXJjZSwgJlNWR1BhdGhTb3VyY2U6OnBhcnNlQ3VydmVUb1F1YWRy
YXRpY1NlZ21lbnQpOworICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICBpZiAoIW1fY29uc3VtZXIpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgbV9jb25z
dW1lci0+Y3VydmVUb1F1YWRyYXRpYyhibGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tUG9pbnQx
LCB0b1BvaW50MSwgcHJvZ3Jlc3MpLAotICAgICAgICBibGVuZEFuaW1hdGVkRmxvYXRQb2ludChm
cm9tVGFyZ2V0UG9pbnQsIHRvVGFyZ2V0UG9pbnQsIHByb2dyZXNzKSwKKyAgICBhdXRvIFtmcm9t
LCB0b10gPSAqcmVzdWx0OworCisgICAgbV9jb25zdW1lci0+Y3VydmVUb1F1YWRyYXRpYyhibGVu
ZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tLnBvaW50MSwgdG8ucG9pbnQxLCBwcm9ncmVzcyksCisg
ICAgICAgIGJsZW5kQW5pbWF0ZWRGbG9hdFBvaW50KGZyb20udGFyZ2V0UG9pbnQsIHRvLnRhcmdl
dFBvaW50LCBwcm9ncmVzcyksCiAgICAgICAgIG1faXNJbkZpcnN0SGFsZk9mQW5pbWF0aW9uID8g
bV9mcm9tTW9kZSA6IG1fdG9Nb2RlKTsKLSAgICBtX2Zyb21DdXJyZW50UG9pbnQgPSBtX2Zyb21N
b2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyBmcm9tVGFyZ2V0UG9pbnQgOiBtX2Zyb21DdXJy
ZW50UG9pbnQgKyBmcm9tVGFyZ2V0UG9pbnQ7Ci0gICAgbV90b0N1cnJlbnRQb2ludCA9IG1fdG9N
b2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyB0b1RhcmdldFBvaW50IDogbV90b0N1cnJlbnRQ
b2ludCArIHRvVGFyZ2V0UG9pbnQ7CisgICAgbV9mcm9tQ3VycmVudFBvaW50ID0gbV9mcm9tTW9k
ZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gZnJvbS50YXJnZXRQb2ludCA6IG1fZnJvbUN1cnJl
bnRQb2ludCArIGZyb20udGFyZ2V0UG9pbnQ7CisgICAgbV90b0N1cnJlbnRQb2ludCA9IG1fdG9N
b2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyB0by50YXJnZXRQb2ludCA6IG1fdG9DdXJyZW50
UG9pbnQgKyB0by50YXJnZXRQb2ludDsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBTVkdQ
YXRoQmxlbmRlcjo6YmxlbmRDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudChmbG9hdCBwcm9n
cmVzcykKIHsKLSAgICBGbG9hdFBvaW50IGZyb21UYXJnZXRQb2ludDsKLSAgICBGbG9hdFBvaW50
IHRvVGFyZ2V0UG9pbnQ7Ci0gICAgaWYgKChtX2Zyb21Tb3VyY2UuaGFzTW9yZURhdGEoKSAmJiAh
bV9mcm9tU291cmNlLnBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQoZnJvbVRhcmdl
dFBvaW50KSkKLSAgICAgICAgfHwgIW1fdG9Tb3VyY2UucGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21v
b3RoU2VnbWVudCh0b1RhcmdldFBvaW50KSkKKyAgICBhdXRvIHJlc3VsdCA9IHB1bGxGcm9tU291
cmNlcyhtX2Zyb21Tb3VyY2UsIG1fdG9Tb3VyY2UsICZTVkdQYXRoU291cmNlOjpwYXJzZUN1cnZl
VG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KTsKKyAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgaWYgKCFtX2NvbnN1bWVyKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
IAotICAgIG1fY29uc3VtZXItPmN1cnZlVG9RdWFkcmF0aWNTbW9vdGgoYmxlbmRBbmltYXRlZEZs
b2F0UG9pbnQoZnJvbVRhcmdldFBvaW50LCB0b1RhcmdldFBvaW50LCBwcm9ncmVzcyksIG1faXNJ
bkZpcnN0SGFsZk9mQW5pbWF0aW9uID8gbV9mcm9tTW9kZSA6IG1fdG9Nb2RlKTsKLSAgICBtX2Zy
b21DdXJyZW50UG9pbnQgPSBtX2Zyb21Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyBmcm9t
VGFyZ2V0UG9pbnQgOiBtX2Zyb21DdXJyZW50UG9pbnQgKyBmcm9tVGFyZ2V0UG9pbnQ7Ci0gICAg
bV90b0N1cnJlbnRQb2ludCA9IG1fdG9Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyB0b1Rh
cmdldFBvaW50IDogbV90b0N1cnJlbnRQb2ludCArIHRvVGFyZ2V0UG9pbnQ7CisgICAgYXV0byBb
ZnJvbSwgdG9dID0gKnJlc3VsdDsKKworICAgIG1fY29uc3VtZXItPmN1cnZlVG9RdWFkcmF0aWNT
bW9vdGgoYmxlbmRBbmltYXRlZEZsb2F0UG9pbnQoZnJvbS50YXJnZXRQb2ludCwgdG8udGFyZ2V0
UG9pbnQsIHByb2dyZXNzKSwgbV9pc0luRmlyc3RIYWxmT2ZBbmltYXRpb24gPyBtX2Zyb21Nb2Rl
IDogbV90b01vZGUpOworICAgIG1fZnJvbUN1cnJlbnRQb2ludCA9IG1fZnJvbU1vZGUgPT0gQWJz
b2x1dGVDb29yZGluYXRlcyA/IGZyb20udGFyZ2V0UG9pbnQgOiBtX2Zyb21DdXJyZW50UG9pbnQg
KyBmcm9tLnRhcmdldFBvaW50OworICAgIG1fdG9DdXJyZW50UG9pbnQgPSBtX3RvTW9kZSA9PSBB
YnNvbHV0ZUNvb3JkaW5hdGVzID8gdG8udGFyZ2V0UG9pbnQgOiBtX3RvQ3VycmVudFBvaW50ICsg
dG8udGFyZ2V0UG9pbnQ7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgU1ZHUGF0aEJsZW5k
ZXI6OmJsZW5kQXJjVG9TZWdtZW50KGZsb2F0IHByb2dyZXNzKQogewotICAgIGZsb2F0IGZyb21S
eCA9IDA7Ci0gICAgZmxvYXQgZnJvbVJ5ID0gMDsKLSAgICBmbG9hdCBmcm9tQW5nbGUgPSAwOwot
ICAgIGJvb2wgZnJvbUxhcmdlQXJjID0gZmFsc2U7Ci0gICAgYm9vbCBmcm9tU3dlZXAgPSBmYWxz
ZTsKLSAgICBGbG9hdFBvaW50IGZyb21UYXJnZXRQb2ludDsKLSAgICBmbG9hdCB0b1J4ID0gMDsK
LSAgICBmbG9hdCB0b1J5ID0gMDsKLSAgICBmbG9hdCB0b0FuZ2xlID0gMDsKLSAgICBib29sIHRv
TGFyZ2VBcmMgPSBmYWxzZTsKLSAgICBib29sIHRvU3dlZXAgPSBmYWxzZTsKLSAgICBGbG9hdFBv
aW50IHRvVGFyZ2V0UG9pbnQ7Ci0gICAgaWYgKChtX2Zyb21Tb3VyY2UuaGFzTW9yZURhdGEoKSAm
JiAhbV9mcm9tU291cmNlLnBhcnNlQXJjVG9TZWdtZW50KGZyb21SeCwgZnJvbVJ5LCBmcm9tQW5n
bGUsIGZyb21MYXJnZUFyYywgZnJvbVN3ZWVwLCBmcm9tVGFyZ2V0UG9pbnQpKQotICAgICAgICB8
fCAhbV90b1NvdXJjZS5wYXJzZUFyY1RvU2VnbWVudCh0b1J4LCB0b1J5LCB0b0FuZ2xlLCB0b0xh
cmdlQXJjLCB0b1N3ZWVwLCB0b1RhcmdldFBvaW50KSkKKyAgICBhdXRvIHJlc3VsdCA9IHB1bGxG
cm9tU291cmNlcyhtX2Zyb21Tb3VyY2UsIG1fdG9Tb3VyY2UsICZTVkdQYXRoU291cmNlOjpwYXJz
ZUFyY1RvU2VnbWVudCk7CisgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIGlmICghbV9jb25zdW1lcikKICAgICAgICAgcmV0dXJuIHRydWU7CiAKKyAgICBhdXRv
IFtmcm9tLCB0b10gPSAqcmVzdWx0OworCiAgICAgaWYgKG1fYWRkVHlwZXNDb3VudCkgewogICAg
ICAgICBBU1NFUlQobV9mcm9tTW9kZSA9PSBtX3RvTW9kZSk7Ci0gICAgICAgIEZsb2F0UG9pbnQg
c2NhbGVkVG9UYXJnZXRQb2ludCA9IHRvVGFyZ2V0UG9pbnQ7CisgICAgICAgIGF1dG8gc2NhbGVk
VG9UYXJnZXRQb2ludCA9IHRvLnRhcmdldFBvaW50OwogICAgICAgICBzY2FsZWRUb1RhcmdldFBv
aW50LnNjYWxlKG1fYWRkVHlwZXNDb3VudCk7Ci0gICAgICAgIG1fY29uc3VtZXItPmFyY1RvKGZy
b21SeCArIHRvUnggKiBtX2FkZFR5cGVzQ291bnQsCi0gICAgICAgICAgICBmcm9tUnkgKyB0b1J5
ICogbV9hZGRUeXBlc0NvdW50LAotICAgICAgICAgICAgZnJvbUFuZ2xlICsgdG9BbmdsZSAqIG1f
YWRkVHlwZXNDb3VudCwKLSAgICAgICAgICAgIGZyb21MYXJnZUFyYyB8fCB0b0xhcmdlQXJjLAot
ICAgICAgICAgICAgZnJvbVN3ZWVwIHx8IHRvU3dlZXAsCi0gICAgICAgICAgICBmcm9tVGFyZ2V0
UG9pbnQgKyBzY2FsZWRUb1RhcmdldFBvaW50LAorICAgICAgICBtX2NvbnN1bWVyLT5hcmNUbyhm
cm9tLnJ4ICsgdG8ucnggKiBtX2FkZFR5cGVzQ291bnQsCisgICAgICAgICAgICBmcm9tLnJ4ICsg
dG8ucnkgKiBtX2FkZFR5cGVzQ291bnQsCisgICAgICAgICAgICBmcm9tLmFuZ2xlICsgdG8uYW5n
bGUgKiBtX2FkZFR5cGVzQ291bnQsCisgICAgICAgICAgICBmcm9tLmxhcmdlQXJjIHx8IHRvLmxh
cmdlQXJjLAorICAgICAgICAgICAgZnJvbS5zd2VlcCB8fCB0by5zd2VlcCwKKyAgICAgICAgICAg
IGZyb20udGFyZ2V0UG9pbnQgKyBzY2FsZWRUb1RhcmdldFBvaW50LAogICAgICAgICAgICAgbV9m
cm9tTW9kZSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgbV9jb25zdW1lci0+YXJjVG8oYmxlbmQo
ZnJvbVJ4LCB0b1J4LCBwcm9ncmVzcyksCi0gICAgICAgICAgICBibGVuZChmcm9tUnksIHRvUnks
IHByb2dyZXNzKSwKLSAgICAgICAgICAgIGJsZW5kKGZyb21BbmdsZSwgdG9BbmdsZSwgcHJvZ3Jl
c3MpLAotICAgICAgICAgICAgbV9pc0luRmlyc3RIYWxmT2ZBbmltYXRpb24gPyBmcm9tTGFyZ2VB
cmMgOiB0b0xhcmdlQXJjLAotICAgICAgICAgICAgbV9pc0luRmlyc3RIYWxmT2ZBbmltYXRpb24g
PyBmcm9tU3dlZXAgOiB0b1N3ZWVwLAotICAgICAgICAgICAgYmxlbmRBbmltYXRlZEZsb2F0UG9p
bnQoZnJvbVRhcmdldFBvaW50LCB0b1RhcmdldFBvaW50LCBwcm9ncmVzcyksCisgICAgICAgIG1f
Y29uc3VtZXItPmFyY1RvKGJsZW5kKGZyb20ucngsIHRvLnJ4LCBwcm9ncmVzcyksCisgICAgICAg
ICAgICBibGVuZChmcm9tLnJ5LCB0by5yeSwgcHJvZ3Jlc3MpLAorICAgICAgICAgICAgYmxlbmQo
ZnJvbS5hbmdsZSwgdG8uYW5nbGUsIHByb2dyZXNzKSwKKyAgICAgICAgICAgIG1faXNJbkZpcnN0
SGFsZk9mQW5pbWF0aW9uID8gZnJvbS5sYXJnZUFyYyA6IHRvLmxhcmdlQXJjLAorICAgICAgICAg
ICAgbV9pc0luRmlyc3RIYWxmT2ZBbmltYXRpb24gPyBmcm9tLnN3ZWVwIDogdG8uc3dlZXAsCisg
ICAgICAgICAgICBibGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tLnRhcmdldFBvaW50LCB0by50
YXJnZXRQb2ludCwgcHJvZ3Jlc3MpLAogICAgICAgICAgICAgbV9pc0luRmlyc3RIYWxmT2ZBbmlt
YXRpb24gPyBtX2Zyb21Nb2RlIDogbV90b01vZGUpOwogICAgIH0KLSAgICBtX2Zyb21DdXJyZW50
UG9pbnQgPSBtX2Zyb21Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyBmcm9tVGFyZ2V0UG9p
bnQgOiBtX2Zyb21DdXJyZW50UG9pbnQgKyBmcm9tVGFyZ2V0UG9pbnQ7Ci0gICAgbV90b0N1cnJl
bnRQb2ludCA9IG1fdG9Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyB0b1RhcmdldFBvaW50
IDogbV90b0N1cnJlbnRQb2ludCArIHRvVGFyZ2V0UG9pbnQ7CisgICAgbV9mcm9tQ3VycmVudFBv
aW50ID0gbV9mcm9tTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gZnJvbS50YXJnZXRQb2lu
dCA6IG1fZnJvbUN1cnJlbnRQb2ludCArIGZyb20udGFyZ2V0UG9pbnQ7CisgICAgbV90b0N1cnJl
bnRQb2ludCA9IG1fdG9Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyB0by50YXJnZXRQb2lu
dCA6IG1fdG9DdXJyZW50UG9pbnQgKyB0by50YXJnZXRQb2ludDsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIApAQCAtMzUxLDkgKzM0OSwxNiBAQCBib29sIFNWR1BhdGhCbGVuZGVyOjpjYW5CbGVuZFBh
dGhzKCkKICAgICBib29sIGZyb21Tb3VyY2VIYWREYXRhID0gbV9mcm9tU291cmNlLmhhc01vcmVE
YXRhKCk7CiAgICAgd2hpbGUgKG1fdG9Tb3VyY2UuaGFzTW9yZURhdGEoKSkgewogICAgICAgICBT
VkdQYXRoU2VnVHlwZSBmcm9tQ29tbWFuZDsKLSAgICAgICAgU1ZHUGF0aFNlZ1R5cGUgdG9Db21t
YW5kOwotICAgICAgICBpZiAoKGZyb21Tb3VyY2VIYWREYXRhICYmICFtX2Zyb21Tb3VyY2UucGFy
c2VTVkdTZWdtZW50VHlwZShmcm9tQ29tbWFuZCkpIHx8ICFtX3RvU291cmNlLnBhcnNlU1ZHU2Vn
bWVudFR5cGUodG9Db21tYW5kKSkKKyAgICAgICAgaWYgKGZyb21Tb3VyY2VIYWREYXRhKSB7Cisg
ICAgICAgICAgICBhdXRvIHBhcnNlZEZyb21Db21tYW5kID0gbV9mcm9tU291cmNlLnBhcnNlU1ZH
U2VnbWVudFR5cGUoKTsKKyAgICAgICAgICAgIGlmICghcGFyc2VkRnJvbUNvbW1hbmQpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgZnJvbUNvbW1hbmQgPSAqcGFy
c2VkRnJvbUNvbW1hbmQ7CisgICAgICAgIH0KKyAgICAgICAgYXV0byBwYXJzZWR0b0NvbW1hbmQg
PSBtX3RvU291cmNlLnBhcnNlU1ZHU2VnbWVudFR5cGUoKTsKKyAgICAgICAgaWYgKCFwYXJzZWR0
b0NvbW1hbmQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIFNWR1BhdGhTZWdU
eXBlIHRvQ29tbWFuZCA9ICpwYXJzZWR0b0NvbW1hbmQ7CiAKICAgICAgICAgbV90b01vZGUgPSBj
b29yZGluYXRlTW9kZU9mQ29tbWFuZCh0b0NvbW1hbmQpOwogICAgICAgICBtX2Zyb21Nb2RlID0g
ZnJvbVNvdXJjZUhhZERhdGEgPyBjb29yZGluYXRlTW9kZU9mQ29tbWFuZChmcm9tQ29tbWFuZCkg
OiBtX3RvTW9kZTsKQEAgLTQzMyw5ICs0MzgsMTYgQEAgYm9vbCBTVkdQYXRoQmxlbmRlcjo6Ymxl
bmRBbmltYXRlZFBhdGgoZgogICAgIGJvb2wgZnJvbVNvdXJjZUhhZERhdGEgPSBtX2Zyb21Tb3Vy
Y2UuaGFzTW9yZURhdGEoKTsKICAgICB3aGlsZSAobV90b1NvdXJjZS5oYXNNb3JlRGF0YSgpKSB7
CiAgICAgICAgIFNWR1BhdGhTZWdUeXBlIGZyb21Db21tYW5kOwotICAgICAgICBTVkdQYXRoU2Vn
VHlwZSB0b0NvbW1hbmQ7Ci0gICAgICAgIGlmICgoZnJvbVNvdXJjZUhhZERhdGEgJiYgIW1fZnJv
bVNvdXJjZS5wYXJzZVNWR1NlZ21lbnRUeXBlKGZyb21Db21tYW5kKSkgfHwgIW1fdG9Tb3VyY2Uu
cGFyc2VTVkdTZWdtZW50VHlwZSh0b0NvbW1hbmQpKQorICAgICAgICBpZiAoZnJvbVNvdXJjZUhh
ZERhdGEpIHsKKyAgICAgICAgICAgIGF1dG8gcGFyc2VkRnJvbUNvbW1hbmQgPSBtX2Zyb21Tb3Vy
Y2UucGFyc2VTVkdTZWdtZW50VHlwZSgpOworICAgICAgICAgICAgaWYgKCFwYXJzZWRGcm9tQ29t
bWFuZCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBmcm9tQ29t
bWFuZCA9ICpwYXJzZWRGcm9tQ29tbWFuZDsKKyAgICAgICAgfQorICAgICAgICBhdXRvIHBhcnNl
ZHRvQ29tbWFuZCA9IG1fdG9Tb3VyY2UucGFyc2VTVkdTZWdtZW50VHlwZSgpOworICAgICAgICBp
ZiAoIXBhcnNlZHRvQ29tbWFuZCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
U1ZHUGF0aFNlZ1R5cGUgdG9Db21tYW5kID0gKnBhcnNlZHRvQ29tbWFuZDsKIAogICAgICAgICBt
X3RvTW9kZSA9IGNvb3JkaW5hdGVNb2RlT2ZDb21tYW5kKHRvQ29tbWFuZCk7CiAgICAgICAgIG1f
ZnJvbU1vZGUgPSBmcm9tU291cmNlSGFkRGF0YSA/IGNvb3JkaW5hdGVNb2RlT2ZDb21tYW5kKGZy
b21Db21tYW5kKSA6IG1fdG9Nb2RlOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhC
eXRlU3RyZWFtU291cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
UGF0aEJ5dGVTdHJlYW1Tb3VyY2UuY3BwCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NCw3OCArMzQsODYgQEAgYm9vbCBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6aGFzTW9yZURhdAog
ICAgIHJldHVybiBtX3N0cmVhbUN1cnJlbnQgPCBtX3N0cmVhbUVuZDsKIH0KIAotYm9vbCBTVkdQ
YXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VTVkdTZWdtZW50VHlwZShTVkdQYXRoU2VnVHlwZSYg
cGF0aFNlZ1R5cGUpCitTVkdQYXRoU2VnVHlwZSBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6bmV4
dENvbW1hbmQoU1ZHUGF0aFNlZ1R5cGUpCiB7Ci0gICAgcGF0aFNlZ1R5cGUgPSBzdGF0aWNfY2Fz
dDxTVkdQYXRoU2VnVHlwZT4ocmVhZFNWR1NlZ21lbnRUeXBlKCkpOwotICAgIHJldHVybiB0cnVl
OworICAgIHJldHVybiBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnVHlwZT4ocmVhZFNWR1NlZ21lbnRU
eXBlKCkpOwogfQogCi1TVkdQYXRoU2VnVHlwZSBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6bmV4
dENvbW1hbmQoU1ZHUGF0aFNlZ1R5cGUpCitPcHRpb25hbDxTVkdQYXRoU2VnVHlwZT4gU1ZHUGF0
aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlU1ZHU2VnbWVudFR5cGUoKQogewogICAgIHJldHVybiBz
dGF0aWNfY2FzdDxTVkdQYXRoU2VnVHlwZT4ocmVhZFNWR1NlZ21lbnRUeXBlKCkpOwogfQogCi1i
b29sIFNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZU1vdmVUb1NlZ21lbnQoRmxvYXRQb2lu
dCYgdGFyZ2V0UG9pbnQpCitPcHRpb25hbDxTVkdQYXRoU291cmNlOjpNb3ZlVG9TZWdtZW50PiBT
VkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VNb3ZlVG9TZWdtZW50KCkKIHsKLSAgICB0YXJn
ZXRQb2ludCA9IHJlYWRGbG9hdFBvaW50KCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgTW92ZVRv
U2VnbWVudCBzZWdtZW50OworICAgIHNlZ21lbnQudGFyZ2V0UG9pbnQgPSByZWFkRmxvYXRQb2lu
dCgpOworICAgIHJldHVybiBzZWdtZW50OwogfQogCi1ib29sIFNWR1BhdGhCeXRlU3RyZWFtU291
cmNlOjpwYXJzZUxpbmVUb1NlZ21lbnQoRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCitPcHRpb25h
bDxTVkdQYXRoU291cmNlOjpMaW5lVG9TZWdtZW50PiBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6
cGFyc2VMaW5lVG9TZWdtZW50KCkKIHsKLSAgICB0YXJnZXRQb2ludCA9IHJlYWRGbG9hdFBvaW50
KCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgTGluZVRvU2VnbWVudCBzZWdtZW50OworICAgIHNl
Z21lbnQudGFyZ2V0UG9pbnQgPSByZWFkRmxvYXRQb2ludCgpOworICAgIHJldHVybiBzZWdtZW50
OwogfQogCi1ib29sIFNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZUxpbmVUb0hvcml6b250
YWxTZWdtZW50KGZsb2F0JiB4KQorT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6TGluZVRvSG9yaXpv
bnRhbFNlZ21lbnQ+IFNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZUxpbmVUb0hvcml6b250
YWxTZWdtZW50KCkKIHsKLSAgICB4ID0gcmVhZEZsb2F0KCk7Ci0gICAgcmV0dXJuIHRydWU7Cisg
ICAgTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQgc2VnbWVudDsKKyAgICBzZWdtZW50LnggPSByZWFk
RmxvYXQoKTsKKyAgICByZXR1cm4gc2VnbWVudDsKIH0KIAotYm9vbCBTVkdQYXRoQnl0ZVN0cmVh
bVNvdXJjZTo6cGFyc2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnQoZmxvYXQmIHkpCitPcHRpb25hbDxT
VkdQYXRoU291cmNlOjpMaW5lVG9WZXJ0aWNhbFNlZ21lbnQ+IFNWR1BhdGhCeXRlU3RyZWFtU291
cmNlOjpwYXJzZUxpbmVUb1ZlcnRpY2FsU2VnbWVudCgpCiB7Ci0gICAgeSA9IHJlYWRGbG9hdCgp
OwotICAgIHJldHVybiB0cnVlOworICAgIExpbmVUb1ZlcnRpY2FsU2VnbWVudCBzZWdtZW50Owor
ICAgIHNlZ21lbnQueSA9IHJlYWRGbG9hdCgpOworICAgIHJldHVybiBzZWdtZW50OwogfQogCi1i
b29sIFNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQoRmxv
YXRQb2ludCYgcG9pbnQxLCBGbG9hdFBvaW50JiBwb2ludDIsIEZsb2F0UG9pbnQmIHRhcmdldFBv
aW50KQorT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6Q3VydmVUb0N1YmljU2VnbWVudD4gU1ZHUGF0
aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlQ3VydmVUb0N1YmljU2VnbWVudCgpCiB7Ci0gICAgcG9p
bnQxID0gcmVhZEZsb2F0UG9pbnQoKTsKLSAgICBwb2ludDIgPSByZWFkRmxvYXRQb2ludCgpOwot
ICAgIHRhcmdldFBvaW50ID0gcmVhZEZsb2F0UG9pbnQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAg
ICBDdXJ2ZVRvQ3ViaWNTZWdtZW50IHNlZ21lbnQ7CisgICAgc2VnbWVudC5wb2ludDEgPSByZWFk
RmxvYXRQb2ludCgpOworICAgIHNlZ21lbnQucG9pbnQyID0gcmVhZEZsb2F0UG9pbnQoKTsKKyAg
ICBzZWdtZW50LnRhcmdldFBvaW50ID0gcmVhZEZsb2F0UG9pbnQoKTsKKyAgICByZXR1cm4gc2Vn
bWVudDsKIH0KIAotYm9vbCBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VDdXJ2ZVRvQ3Vi
aWNTbW9vdGhTZWdtZW50KEZsb2F0UG9pbnQmIHBvaW50MiwgRmxvYXRQb2ludCYgdGFyZ2V0UG9p
bnQpCitPcHRpb25hbDxTVkdQYXRoU291cmNlOjpDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50PiBT
VkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KCkK
IHsKLSAgICBwb2ludDIgPSByZWFkRmxvYXRQb2ludCgpOwotICAgIHRhcmdldFBvaW50ID0gcmVh
ZEZsb2F0UG9pbnQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBDdXJ2ZVRvQ3ViaWNTbW9vdGhT
ZWdtZW50IHNlZ21lbnQ7CisgICAgc2VnbWVudC5wb2ludDIgPSByZWFkRmxvYXRQb2ludCgpOwor
ICAgIHNlZ21lbnQudGFyZ2V0UG9pbnQgPSByZWFkRmxvYXRQb2ludCgpOworICAgIHJldHVybiBz
ZWdtZW50OwogfQogCi1ib29sIFNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZUN1cnZlVG9R
dWFkcmF0aWNTZWdtZW50KEZsb2F0UG9pbnQmIHBvaW50MSwgRmxvYXRQb2ludCYgdGFyZ2V0UG9p
bnQpCitPcHRpb25hbDxTVkdQYXRoU291cmNlOjpDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudD4gU1ZH
UGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQoKQogewot
ICAgIHBvaW50MSA9IHJlYWRGbG9hdFBvaW50KCk7Ci0gICAgdGFyZ2V0UG9pbnQgPSByZWFkRmxv
YXRQb2ludCgpOwotICAgIHJldHVybiB0cnVlOworICAgIEN1cnZlVG9RdWFkcmF0aWNTZWdtZW50
IHNlZ21lbnQ7CisgICAgc2VnbWVudC5wb2ludDEgPSByZWFkRmxvYXRQb2ludCgpOworICAgIHNl
Z21lbnQudGFyZ2V0UG9pbnQgPSByZWFkRmxvYXRQb2ludCgpOworICAgIHJldHVybiBzZWdtZW50
OwogfQogCi1ib29sIFNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0
aWNTbW9vdGhTZWdtZW50KEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQorT3B0aW9uYWw8U1ZHUGF0
aFNvdXJjZTo6Q3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQ+IFNWR1BhdGhCeXRlU3RyZWFt
U291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KCkKIHsKLSAgICB0YXJn
ZXRQb2ludCA9IHJlYWRGbG9hdFBvaW50KCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgQ3VydmVU
b1F1YWRyYXRpY1Ntb290aFNlZ21lbnQgc2VnbWVudDsKKyAgICBzZWdtZW50LnRhcmdldFBvaW50
ID0gcmVhZEZsb2F0UG9pbnQoKTsKKyAgICByZXR1cm4gc2VnbWVudDsKIH0KIAotYm9vbCBTVkdQ
YXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VBcmNUb1NlZ21lbnQoZmxvYXQmIHJ4LCBmbG9hdCYg
cnksIGZsb2F0JiBhbmdsZSwgYm9vbCYgbGFyZ2VBcmMsIGJvb2wmIHN3ZWVwLCBGbG9hdFBvaW50
JiB0YXJnZXRQb2ludCkKK09wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkFyY1RvU2VnbWVudD4gU1ZH
UGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlQXJjVG9TZWdtZW50KCkKIHsKLSAgICByeCA9IHJl
YWRGbG9hdCgpOwotICAgIHJ5ID0gcmVhZEZsb2F0KCk7Ci0gICAgYW5nbGUgPSByZWFkRmxvYXQo
KTsKLSAgICBsYXJnZUFyYyA9IHJlYWRGbGFnKCk7Ci0gICAgc3dlZXAgPSByZWFkRmxhZygpOwot
ICAgIHRhcmdldFBvaW50ID0gcmVhZEZsb2F0UG9pbnQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAg
ICBBcmNUb1NlZ21lbnQgc2VnbWVudDsKKyAgICBzZWdtZW50LnJ4ID0gcmVhZEZsb2F0KCk7Cisg
ICAgc2VnbWVudC5yeSA9IHJlYWRGbG9hdCgpOworICAgIHNlZ21lbnQuYW5nbGUgPSByZWFkRmxv
YXQoKTsKKyAgICBzZWdtZW50LmxhcmdlQXJjID0gcmVhZEZsYWcoKTsKKyAgICBzZWdtZW50LnN3
ZWVwID0gcmVhZEZsYWcoKTsKKyAgICBzZWdtZW50LnRhcmdldFBvaW50ID0gcmVhZEZsb2F0UG9p
bnQoKTsKKyAgICByZXR1cm4gc2VnbWVudDsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1BhdGhCeXRlU3RyZWFtU291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1BhdGhCeXRlU3RyZWFtU291cmNlLmgJKHJldmlzaW9uIDI2MzE3NikKKysrIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMiwxOCArMzIsMTggQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBib29sIGhhc01vcmVE
YXRhKCkgY29uc3QgZmluYWw7CiAgICAgYm9vbCBtb3ZlVG9OZXh0VG9rZW4oKSBmaW5hbCB7IHJl
dHVybiB0cnVlOyB9Ci0gICAgYm9vbCBwYXJzZVNWR1NlZ21lbnRUeXBlKFNWR1BhdGhTZWdUeXBl
JikgZmluYWw7CiAgICAgU1ZHUGF0aFNlZ1R5cGUgbmV4dENvbW1hbmQoU1ZHUGF0aFNlZ1R5cGUp
IGZpbmFsOwogCi0gICAgYm9vbCBwYXJzZU1vdmVUb1NlZ21lbnQoRmxvYXRQb2ludCYpIGZpbmFs
OwotICAgIGJvb2wgcGFyc2VMaW5lVG9TZWdtZW50KEZsb2F0UG9pbnQmKSBmaW5hbDsKLSAgICBi
b29sIHBhcnNlTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQoZmxvYXQmKSBmaW5hbDsKLSAgICBib29s
IHBhcnNlTGluZVRvVmVydGljYWxTZWdtZW50KGZsb2F0JikgZmluYWw7Ci0gICAgYm9vbCBwYXJz
ZUN1cnZlVG9DdWJpY1NlZ21lbnQoRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmLCBGbG9hdFBvaW50
JikgZmluYWw7Ci0gICAgYm9vbCBwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQoRmxvYXRQ
b2ludCYsIEZsb2F0UG9pbnQmKSBmaW5hbDsKLSAgICBib29sIHBhcnNlQ3VydmVUb1F1YWRyYXRp
Y1NlZ21lbnQoRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmKSBmaW5hbDsKLSAgICBib29sIHBhcnNl
Q3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQoRmxvYXRQb2ludCYpIGZpbmFsOwotICAgIGJv
b2wgcGFyc2VBcmNUb1NlZ21lbnQoZmxvYXQmLCBmbG9hdCYsIGZsb2F0JiwgYm9vbCYsIGJvb2wm
LCBGbG9hdFBvaW50JikgZmluYWw7CisgICAgT3B0aW9uYWw8U1ZHUGF0aFNlZ1R5cGU+IHBhcnNl
U1ZHU2VnbWVudFR5cGUoKSBmaW5hbDsKKyAgICBPcHRpb25hbDxNb3ZlVG9TZWdtZW50PiBwYXJz
ZU1vdmVUb1NlZ21lbnQoKSBmaW5hbDsKKyAgICBPcHRpb25hbDxMaW5lVG9TZWdtZW50PiBwYXJz
ZUxpbmVUb1NlZ21lbnQoKSBmaW5hbDsKKyAgICBPcHRpb25hbDxMaW5lVG9Ib3Jpem9udGFsU2Vn
bWVudD4gcGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudCgpIGZpbmFsOworICAgIE9wdGlvbmFs
PExpbmVUb1ZlcnRpY2FsU2VnbWVudD4gcGFyc2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnQoKSBmaW5h
bDsKKyAgICBPcHRpb25hbDxDdXJ2ZVRvQ3ViaWNTZWdtZW50PiBwYXJzZUN1cnZlVG9DdWJpY1Nl
Z21lbnQoKSBmaW5hbDsKKyAgICBPcHRpb25hbDxDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50PiBw
YXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQoKSBmaW5hbDsKKyAgICBPcHRpb25hbDxDdXJ2
ZVRvUXVhZHJhdGljU2VnbWVudD4gcGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCgpIGZpbmFs
OworICAgIE9wdGlvbmFsPEN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50PiBwYXJzZUN1cnZl
VG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KCkgZmluYWw7CisgICAgT3B0aW9uYWw8QXJjVG9TZWdt
ZW50PiBwYXJzZUFyY1RvU2VnbWVudCgpIGZpbmFsOwogCiAjaWYgQ09NUElMRVIoTVNWQykKICNw
cmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NzAxKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1BhdGhQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRo
UGFyc2VyLmNwcAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Bh
dGhQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MywxMDIgKzczLDk5IEBAIHZvaWQgU1ZH
UGF0aFBhcnNlcjo6cGFyc2VDbG9zZVBhdGhTZWdtZW4KIAogYm9vbCBTVkdQYXRoUGFyc2VyOjpw
YXJzZU1vdmVUb1NlZ21lbnQoKQogewotICAgIEZsb2F0UG9pbnQgdGFyZ2V0UG9pbnQ7Ci0gICAg
aWYgKCFtX3NvdXJjZS5wYXJzZU1vdmVUb1NlZ21lbnQodGFyZ2V0UG9pbnQpKQorICAgIGF1dG8g
cmVzdWx0ID0gbV9zb3VyY2UucGFyc2VNb3ZlVG9TZWdtZW50KCk7CisgICAgaWYgKCFyZXN1bHQp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChtX3BhdGhQYXJzaW5nTW9kZSA9PSBO
b3JtYWxpemVkUGFyc2luZykgewogICAgICAgICBpZiAobV9tb2RlID09IFJlbGF0aXZlQ29vcmRp
bmF0ZXMpCi0gICAgICAgICAgICBtX2N1cnJlbnRQb2ludCArPSB0YXJnZXRQb2ludDsKKyAgICAg
ICAgICAgIG1fY3VycmVudFBvaW50ICs9IHJlc3VsdC0+dGFyZ2V0UG9pbnQ7CiAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIG1fY3VycmVudFBvaW50ID0gdGFyZ2V0UG9pbnQ7CisgICAgICAgICAg
ICBtX2N1cnJlbnRQb2ludCA9IHJlc3VsdC0+dGFyZ2V0UG9pbnQ7CiAgICAgICAgIG1fc3ViUGF0
aFBvaW50ID0gbV9jdXJyZW50UG9pbnQ7CiAgICAgICAgIG1fY29uc3VtZXIubW92ZVRvKG1fY3Vy
cmVudFBvaW50LCBtX2Nsb3NlUGF0aCwgQWJzb2x1dGVDb29yZGluYXRlcyk7CiAgICAgfSBlbHNl
Ci0gICAgICAgIG1fY29uc3VtZXIubW92ZVRvKHRhcmdldFBvaW50LCBtX2Nsb3NlUGF0aCwgbV9t
b2RlKTsKKyAgICAgICAgbV9jb25zdW1lci5tb3ZlVG8ocmVzdWx0LT50YXJnZXRQb2ludCwgbV9j
bG9zZVBhdGgsIG1fbW9kZSk7CiAgICAgbV9jbG9zZVBhdGggPSBmYWxzZTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAogYm9vbCBTVkdQYXRoUGFyc2VyOjpwYXJzZUxpbmVUb1NlZ21lbnQoKQogewot
ICAgIEZsb2F0UG9pbnQgdGFyZ2V0UG9pbnQ7Ci0gICAgaWYgKCFtX3NvdXJjZS5wYXJzZUxpbmVU
b1NlZ21lbnQodGFyZ2V0UG9pbnQpKQorICAgIGF1dG8gcmVzdWx0ID0gbV9zb3VyY2UucGFyc2VM
aW5lVG9TZWdtZW50KCk7CisgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIGlmIChtX3BhdGhQYXJzaW5nTW9kZSA9PSBOb3JtYWxpemVkUGFyc2luZykgewogICAg
ICAgICBpZiAobV9tb2RlID09IFJlbGF0aXZlQ29vcmRpbmF0ZXMpCi0gICAgICAgICAgICBtX2N1
cnJlbnRQb2ludCArPSB0YXJnZXRQb2ludDsKKyAgICAgICAgICAgIG1fY3VycmVudFBvaW50ICs9
IHJlc3VsdC0+dGFyZ2V0UG9pbnQ7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fY3VycmVu
dFBvaW50ID0gdGFyZ2V0UG9pbnQ7CisgICAgICAgICAgICBtX2N1cnJlbnRQb2ludCA9IHJlc3Vs
dC0+dGFyZ2V0UG9pbnQ7CiAgICAgICAgIG1fY29uc3VtZXIubGluZVRvKG1fY3VycmVudFBvaW50
LCBBYnNvbHV0ZUNvb3JkaW5hdGVzKTsKICAgICB9IGVsc2UKLSAgICAgICAgbV9jb25zdW1lci5s
aW5lVG8odGFyZ2V0UG9pbnQsIG1fbW9kZSk7CisgICAgICAgIG1fY29uc3VtZXIubGluZVRvKHJl
c3VsdC0+dGFyZ2V0UG9pbnQsIG1fbW9kZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wg
U1ZHUGF0aFBhcnNlcjo6cGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudCgpCiB7Ci0gICAgZmxv
YXQgdG9YOwotICAgIGlmICghbV9zb3VyY2UucGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudCh0
b1gpKQorICAgIGF1dG8gcmVzdWx0ID0gbV9zb3VyY2UucGFyc2VMaW5lVG9Ib3Jpem9udGFsU2Vn
bWVudCgpOworICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBp
ZiAobV9wYXRoUGFyc2luZ01vZGUgPT0gTm9ybWFsaXplZFBhcnNpbmcpIHsKICAgICAgICAgaWYg
KG1fbW9kZSA9PSBSZWxhdGl2ZUNvb3JkaW5hdGVzKQotICAgICAgICAgICAgbV9jdXJyZW50UG9p
bnQubW92ZSh0b1gsIDApOworICAgICAgICAgICAgbV9jdXJyZW50UG9pbnQubW92ZShyZXN1bHQt
PngsIDApOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2N1cnJlbnRQb2ludC5zZXRYKHRv
WCk7CisgICAgICAgICAgICBtX2N1cnJlbnRQb2ludC5zZXRYKHJlc3VsdC0+eCk7CiAgICAgICAg
IG1fY29uc3VtZXIubGluZVRvKG1fY3VycmVudFBvaW50LCBBYnNvbHV0ZUNvb3JkaW5hdGVzKTsK
ICAgICB9IGVsc2UKLSAgICAgICAgbV9jb25zdW1lci5saW5lVG9Ib3Jpem9udGFsKHRvWCwgbV9t
b2RlKTsKKyAgICAgICAgbV9jb25zdW1lci5saW5lVG9Ib3Jpem9udGFsKHJlc3VsdC0+eCwgbV9t
b2RlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBTVkdQYXRoUGFyc2VyOjpwYXJzZUxp
bmVUb1ZlcnRpY2FsU2VnbWVudCgpCiB7Ci0gICAgZmxvYXQgdG9ZOwotICAgIGlmICghbV9zb3Vy
Y2UucGFyc2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnQodG9ZKSkKKyAgICBhdXRvIHJlc3VsdCA9IG1f
c291cmNlLnBhcnNlTGluZVRvVmVydGljYWxTZWdtZW50KCk7CisgICAgaWYgKCFyZXN1bHQpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChtX3BhdGhQYXJzaW5nTW9kZSA9PSBOb3Jt
YWxpemVkUGFyc2luZykgewogICAgICAgICBpZiAobV9tb2RlID09IFJlbGF0aXZlQ29vcmRpbmF0
ZXMpCi0gICAgICAgICAgICBtX2N1cnJlbnRQb2ludC5tb3ZlKDAsIHRvWSk7CisgICAgICAgICAg
ICBtX2N1cnJlbnRQb2ludC5tb3ZlKDAsIHJlc3VsdC0+eSk7CiAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIG1fY3VycmVudFBvaW50LnNldFkodG9ZKTsKKyAgICAgICAgICAgIG1fY3VycmVudFBv
aW50LnNldFkocmVzdWx0LT55KTsKICAgICAgICAgbV9jb25zdW1lci5saW5lVG8obV9jdXJyZW50
UG9pbnQsIEFic29sdXRlQ29vcmRpbmF0ZXMpOwogICAgIH0gZWxzZQotICAgICAgICBtX2NvbnN1
bWVyLmxpbmVUb1ZlcnRpY2FsKHRvWSwgbV9tb2RlKTsKKyAgICAgICAgbV9jb25zdW1lci5saW5l
VG9WZXJ0aWNhbChyZXN1bHQtPnksIG1fbW9kZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJv
b2wgU1ZHUGF0aFBhcnNlcjo6cGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KCkKIHsKLSAgICBGbG9h
dFBvaW50IHBvaW50MTsKLSAgICBGbG9hdFBvaW50IHBvaW50MjsKLSAgICBGbG9hdFBvaW50IHRh
cmdldFBvaW50OwotICAgIGlmICghbV9zb3VyY2UucGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KHBv
aW50MSwgcG9pbnQyLCB0YXJnZXRQb2ludCkpCisgICAgYXV0byByZXN1bHQgPSBtX3NvdXJjZS5w
YXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQoKTsKKyAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgaWYgKG1fcGF0aFBhcnNpbmdNb2RlID09IE5vcm1hbGl6ZWRQYXJz
aW5nKSB7CiAgICAgICAgIGlmIChtX21vZGUgPT0gUmVsYXRpdmVDb29yZGluYXRlcykgewotICAg
ICAgICAgICAgcG9pbnQxICs9IG1fY3VycmVudFBvaW50OwotICAgICAgICAgICAgcG9pbnQyICs9
IG1fY3VycmVudFBvaW50OwotICAgICAgICAgICAgdGFyZ2V0UG9pbnQgKz0gbV9jdXJyZW50UG9p
bnQ7CisgICAgICAgICAgICByZXN1bHQtPnBvaW50MSArPSBtX2N1cnJlbnRQb2ludDsKKyAgICAg
ICAgICAgIHJlc3VsdC0+cG9pbnQyICs9IG1fY3VycmVudFBvaW50OworICAgICAgICAgICAgcmVz
dWx0LT50YXJnZXRQb2ludCArPSBtX2N1cnJlbnRQb2ludDsKICAgICAgICAgfQotICAgICAgICBt
X2NvbnN1bWVyLmN1cnZlVG9DdWJpYyhwb2ludDEsIHBvaW50MiwgdGFyZ2V0UG9pbnQsIEFic29s
dXRlQ29vcmRpbmF0ZXMpOworICAgICAgICBtX2NvbnN1bWVyLmN1cnZlVG9DdWJpYyhyZXN1bHQt
PnBvaW50MSwgcmVzdWx0LT5wb2ludDIsIHJlc3VsdC0+dGFyZ2V0UG9pbnQsIEFic29sdXRlQ29v
cmRpbmF0ZXMpOwogCi0gICAgICAgIG1fY29udHJvbFBvaW50ID0gcG9pbnQyOwotICAgICAgICBt
X2N1cnJlbnRQb2ludCA9IHRhcmdldFBvaW50OworICAgICAgICBtX2NvbnRyb2xQb2ludCA9IHJl
c3VsdC0+cG9pbnQyOworICAgICAgICBtX2N1cnJlbnRQb2ludCA9IHJlc3VsdC0+dGFyZ2V0UG9p
bnQ7CiAgICAgfSBlbHNlCi0gICAgICAgIG1fY29uc3VtZXIuY3VydmVUb0N1YmljKHBvaW50MSwg
cG9pbnQyLCB0YXJnZXRQb2ludCwgbV9tb2RlKTsKKyAgICAgICAgbV9jb25zdW1lci5jdXJ2ZVRv
Q3ViaWMocmVzdWx0LT5wb2ludDEsIHJlc3VsdC0+cG9pbnQyLCByZXN1bHQtPnRhcmdldFBvaW50
LCBtX21vZGUpOwogICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIFNWR1BhdGhQYXJzZXI6OnBh
cnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudCgpCiB7Ci0gICAgRmxvYXRQb2ludCBwb2ludDI7
Ci0gICAgRmxvYXRQb2ludCB0YXJnZXRQb2ludDsKLSAgICBpZiAoIW1fc291cmNlLnBhcnNlQ3Vy
dmVUb0N1YmljU21vb3RoU2VnbWVudChwb2ludDIsIHRhcmdldFBvaW50KSkKKyAgICBhdXRvIHJl
c3VsdCA9IG1fc291cmNlLnBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudCgpOworICAgIGlm
ICghcmVzdWx0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAobV9sYXN0Q29tbWFu
ZCAhPSBQYXRoU2VnQ3VydmVUb0N1YmljQWJzCkBAIC0xODIsNTMgKzE3OSw1MyBAQCBib29sIFNW
R1BhdGhQYXJzZXI6OnBhcnNlQ3VydmVUb0N1YmljU21vCiAgICAgICAgIHBvaW50MS5zY2FsZSgy
KTsKICAgICAgICAgcG9pbnQxLm1vdmUoLW1fY29udHJvbFBvaW50LngoKSwgLW1fY29udHJvbFBv
aW50LnkoKSk7CiAgICAgICAgIGlmIChtX21vZGUgPT0gUmVsYXRpdmVDb29yZGluYXRlcykgewot
ICAgICAgICAgICAgcG9pbnQyICs9IG1fY3VycmVudFBvaW50OwotICAgICAgICAgICAgdGFyZ2V0
UG9pbnQgKz0gbV9jdXJyZW50UG9pbnQ7CisgICAgICAgICAgICByZXN1bHQtPnBvaW50MiArPSBt
X2N1cnJlbnRQb2ludDsKKyAgICAgICAgICAgIHJlc3VsdC0+dGFyZ2V0UG9pbnQgKz0gbV9jdXJy
ZW50UG9pbnQ7CiAgICAgICAgIH0KIAotICAgICAgICBtX2NvbnN1bWVyLmN1cnZlVG9DdWJpYyhw
b2ludDEsIHBvaW50MiwgdGFyZ2V0UG9pbnQsIEFic29sdXRlQ29vcmRpbmF0ZXMpOworICAgICAg
ICBtX2NvbnN1bWVyLmN1cnZlVG9DdWJpYyhwb2ludDEsIHJlc3VsdC0+cG9pbnQyLCByZXN1bHQt
PnRhcmdldFBvaW50LCBBYnNvbHV0ZUNvb3JkaW5hdGVzKTsKIAotICAgICAgICBtX2NvbnRyb2xQ
b2ludCA9IHBvaW50MjsKLSAgICAgICAgbV9jdXJyZW50UG9pbnQgPSB0YXJnZXRQb2ludDsKKyAg
ICAgICAgbV9jb250cm9sUG9pbnQgPSByZXN1bHQtPnBvaW50MjsKKyAgICAgICAgbV9jdXJyZW50
UG9pbnQgPSByZXN1bHQtPnRhcmdldFBvaW50OwogICAgIH0gZWxzZQotICAgICAgICBtX2NvbnN1
bWVyLmN1cnZlVG9DdWJpY1Ntb290aChwb2ludDIsIHRhcmdldFBvaW50LCBtX21vZGUpOworICAg
ICAgICBtX2NvbnN1bWVyLmN1cnZlVG9DdWJpY1Ntb290aChyZXN1bHQtPnBvaW50MiwgcmVzdWx0
LT50YXJnZXRQb2ludCwgbV9tb2RlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBTVkdQ
YXRoUGFyc2VyOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KCkKIHsKLSAgICBGbG9hdFBv
aW50IHBvaW50MTsKLSAgICBGbG9hdFBvaW50IHRhcmdldFBvaW50OwotICAgIGlmICghbV9zb3Vy
Y2UucGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudChwb2ludDEsIHRhcmdldFBvaW50KSkKKyAg
ICBhdXRvIHJlc3VsdCA9IG1fc291cmNlLnBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQoKTsK
KyAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKG1fcGF0
aFBhcnNpbmdNb2RlID09IE5vcm1hbGl6ZWRQYXJzaW5nKSB7Ci0gICAgICAgIG1fY29udHJvbFBv
aW50ID0gcG9pbnQxOworICAgICAgICBtX2NvbnRyb2xQb2ludCA9IHJlc3VsdC0+cG9pbnQxOwor
CiAgICAgICAgIEZsb2F0UG9pbnQgcG9pbnQxID0gbV9jdXJyZW50UG9pbnQ7CiAgICAgICAgIHBv
aW50MS5tb3ZlKDIgKiBtX2NvbnRyb2xQb2ludC54KCksIDIgKiBtX2NvbnRyb2xQb2ludC55KCkp
OwotICAgICAgICBGbG9hdFBvaW50IHBvaW50Mih0YXJnZXRQb2ludC54KCkgKyAyICogbV9jb250
cm9sUG9pbnQueCgpLCB0YXJnZXRQb2ludC55KCkgKyAyICogbV9jb250cm9sUG9pbnQueSgpKTsK
KyAgICAgICAgRmxvYXRQb2ludCBwb2ludDIocmVzdWx0LT50YXJnZXRQb2ludC54KCkgKyAyICog
bV9jb250cm9sUG9pbnQueCgpLCByZXN1bHQtPnRhcmdldFBvaW50LnkoKSArIDIgKiBtX2NvbnRy
b2xQb2ludC55KCkpOwogICAgICAgICBpZiAobV9tb2RlID09IFJlbGF0aXZlQ29vcmRpbmF0ZXMp
IHsKICAgICAgICAgICAgIHBvaW50MS5tb3ZlKDIgKiBtX2N1cnJlbnRQb2ludC54KCksIDIgKiBt
X2N1cnJlbnRQb2ludC55KCkpOwogICAgICAgICAgICAgcG9pbnQyLm1vdmUoMyAqIG1fY3VycmVu
dFBvaW50LngoKSwgMyAqIG1fY3VycmVudFBvaW50LnkoKSk7Ci0gICAgICAgICAgICB0YXJnZXRQ
b2ludCArPSBtX2N1cnJlbnRQb2ludDsKKyAgICAgICAgICAgIHJlc3VsdC0+dGFyZ2V0UG9pbnQg
Kz0gbV9jdXJyZW50UG9pbnQ7CiAgICAgICAgIH0KICAgICAgICAgcG9pbnQxLnNjYWxlKGdPbmVP
dmVyVGhyZWUpOwogICAgICAgICBwb2ludDIuc2NhbGUoZ09uZU92ZXJUaHJlZSk7CiAKLSAgICAg
ICAgbV9jb25zdW1lci5jdXJ2ZVRvQ3ViaWMocG9pbnQxLCBwb2ludDIsIHRhcmdldFBvaW50LCBB
YnNvbHV0ZUNvb3JkaW5hdGVzKTsKKyAgICAgICAgbV9jb25zdW1lci5jdXJ2ZVRvQ3ViaWMocG9p
bnQxLCBwb2ludDIsIHJlc3VsdC0+dGFyZ2V0UG9pbnQsIEFic29sdXRlQ29vcmRpbmF0ZXMpOwog
CiAgICAgICAgIGlmIChtX21vZGUgPT0gUmVsYXRpdmVDb29yZGluYXRlcykKICAgICAgICAgICAg
IG1fY29udHJvbFBvaW50ICs9IG1fY3VycmVudFBvaW50OwotICAgICAgICBtX2N1cnJlbnRQb2lu
dCA9IHRhcmdldFBvaW50OworICAgICAgICBtX2N1cnJlbnRQb2ludCA9IHJlc3VsdC0+dGFyZ2V0
UG9pbnQ7CiAgICAgfSBlbHNlCi0gICAgICAgIG1fY29uc3VtZXIuY3VydmVUb1F1YWRyYXRpYyhw
b2ludDEsIHRhcmdldFBvaW50LCBtX21vZGUpOworICAgICAgICBtX2NvbnN1bWVyLmN1cnZlVG9R
dWFkcmF0aWMocmVzdWx0LT5wb2ludDEsIHJlc3VsdC0+dGFyZ2V0UG9pbnQsIG1fbW9kZSk7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgU1ZHUGF0aFBhcnNlcjo6cGFyc2VDdXJ2ZVRvUXVh
ZHJhdGljU21vb3RoU2VnbWVudCgpCiB7Ci0gICAgRmxvYXRQb2ludCB0YXJnZXRQb2ludDsKLSAg
ICBpZiAoIW1fc291cmNlLnBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQodGFyZ2V0
UG9pbnQpKQorICAgIGF1dG8gcmVzdWx0ID0gbV9zb3VyY2UucGFyc2VDdXJ2ZVRvUXVhZHJhdGlj
U21vb3RoU2VnbWVudCgpOworICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICBpZiAobV9sYXN0Q29tbWFuZCAhPSBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY0FicwpA
QCAtMjQyLDY3ICsyMzksNjIgQEAgYm9vbCBTVkdQYXRoUGFyc2VyOjpwYXJzZUN1cnZlVG9RdWFk
cmF0aQogICAgICAgICBjdWJpY1BvaW50LnNjYWxlKDIpOwogICAgICAgICBjdWJpY1BvaW50Lm1v
dmUoLW1fY29udHJvbFBvaW50LngoKSwgLW1fY29udHJvbFBvaW50LnkoKSk7CiAgICAgICAgIEZs
b2F0UG9pbnQgcG9pbnQxKG1fY3VycmVudFBvaW50LngoKSArIDIgKiBjdWJpY1BvaW50LngoKSwg
bV9jdXJyZW50UG9pbnQueSgpICsgMiAqIGN1YmljUG9pbnQueSgpKTsKLSAgICAgICAgRmxvYXRQ
b2ludCBwb2ludDIodGFyZ2V0UG9pbnQueCgpICsgMiAqIGN1YmljUG9pbnQueCgpLCB0YXJnZXRQ
b2ludC55KCkgKyAyICogY3ViaWNQb2ludC55KCkpOworICAgICAgICBGbG9hdFBvaW50IHBvaW50
MihyZXN1bHQtPnRhcmdldFBvaW50LngoKSArIDIgKiBjdWJpY1BvaW50LngoKSwgcmVzdWx0LT50
YXJnZXRQb2ludC55KCkgKyAyICogY3ViaWNQb2ludC55KCkpOwogICAgICAgICBpZiAobV9tb2Rl
ID09IFJlbGF0aXZlQ29vcmRpbmF0ZXMpIHsKICAgICAgICAgICAgIHBvaW50MiArPSBtX2N1cnJl
bnRQb2ludDsKLSAgICAgICAgICAgIHRhcmdldFBvaW50ICs9IG1fY3VycmVudFBvaW50OworICAg
ICAgICAgICAgcmVzdWx0LT50YXJnZXRQb2ludCArPSBtX2N1cnJlbnRQb2ludDsKICAgICAgICAg
fQogICAgICAgICBwb2ludDEuc2NhbGUoZ09uZU92ZXJUaHJlZSk7CiAgICAgICAgIHBvaW50Mi5z
Y2FsZShnT25lT3ZlclRocmVlKTsKIAotICAgICAgICBtX2NvbnN1bWVyLmN1cnZlVG9DdWJpYyhw
b2ludDEsIHBvaW50MiwgdGFyZ2V0UG9pbnQsIEFic29sdXRlQ29vcmRpbmF0ZXMpOworICAgICAg
ICBtX2NvbnN1bWVyLmN1cnZlVG9DdWJpYyhwb2ludDEsIHBvaW50MiwgcmVzdWx0LT50YXJnZXRQ
b2ludCwgQWJzb2x1dGVDb29yZGluYXRlcyk7CiAKICAgICAgICAgbV9jb250cm9sUG9pbnQgPSBj
dWJpY1BvaW50OwotICAgICAgICBtX2N1cnJlbnRQb2ludCA9IHRhcmdldFBvaW50OworICAgICAg
ICBtX2N1cnJlbnRQb2ludCA9IHJlc3VsdC0+dGFyZ2V0UG9pbnQ7CiAgICAgfSBlbHNlCi0gICAg
ICAgIG1fY29uc3VtZXIuY3VydmVUb1F1YWRyYXRpY1Ntb290aCh0YXJnZXRQb2ludCwgbV9tb2Rl
KTsKKyAgICAgICAgbV9jb25zdW1lci5jdXJ2ZVRvUXVhZHJhdGljU21vb3RoKHJlc3VsdC0+dGFy
Z2V0UG9pbnQsIG1fbW9kZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgU1ZHUGF0aFBh
cnNlcjo6cGFyc2VBcmNUb1NlZ21lbnQoKQogewotICAgIGZsb2F0IHJ4OwotICAgIGZsb2F0IHJ5
OwotICAgIGZsb2F0IGFuZ2xlOwotICAgIGJvb2wgbGFyZ2VBcmM7Ci0gICAgYm9vbCBzd2VlcDsK
LSAgICBGbG9hdFBvaW50IHRhcmdldFBvaW50OwotICAgIGlmICghbV9zb3VyY2UucGFyc2VBcmNU
b1NlZ21lbnQocngsIHJ5LCBhbmdsZSwgbGFyZ2VBcmMsIHN3ZWVwLCB0YXJnZXRQb2ludCkpCisg
ICAgYXV0byByZXN1bHQgPSBtX3NvdXJjZS5wYXJzZUFyY1RvU2VnbWVudCgpOworICAgIGlmICgh
cmVzdWx0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBJZiByeCA9IDAgb3Igcnkg
PSAwIHRoZW4gdGhpcyBhcmMgaXMgdHJlYXRlZCBhcyBhIHN0cmFpZ2h0IGxpbmUgc2VnbWVudCAo
YSAibGluZXRvIikgam9pbmluZyB0aGUgZW5kcG9pbnRzLgogICAgIC8vIGh0dHA6Ly93d3cudzMu
b3JnL1RSL1NWRy9pbXBsbm90ZS5odG1sI0FyY091dE9mUmFuZ2VQYXJhbWV0ZXJzCiAgICAgLy8g
SWYgdGhlIGN1cnJlbnQgcG9pbnQgYW5kIHRhcmdldCBwb2ludCBmb3IgdGhlIGFyYyBhcmUgaWRl
bnRpY2FsLCBpdCBzaG91bGQgYmUgdHJlYXRlZCBhcyBhIHplcm8gbGVuZ3RoCiAgICAgLy8gcGF0
aC4gVGhpcyBlbnN1cmVzIGNvbnRpbnVpdHkgaW4gYW5pbWF0aW9ucy4KLSAgICByeCA9IGZhYnNm
KHJ4KTsKLSAgICByeSA9IGZhYnNmKHJ5KTsKKyAgICByZXN1bHQtPnJ4ID0gZmFic2YocmVzdWx0
LT5yeCk7CisgICAgcmVzdWx0LT5yeSA9IGZhYnNmKHJlc3VsdC0+cnkpOwogICAgIGJvb2wgYXJj
SXNaZXJvTGVuZ3RoID0gZmFsc2U7CiAgICAgaWYgKG1fcGF0aFBhcnNpbmdNb2RlID09IE5vcm1h
bGl6ZWRQYXJzaW5nKSB7CiAgICAgICAgIGlmIChtX21vZGUgPT0gUmVsYXRpdmVDb29yZGluYXRl
cykKLSAgICAgICAgICAgIGFyY0lzWmVyb0xlbmd0aCA9IHRhcmdldFBvaW50ID09IEZsb2F0UG9p
bnQ6Onplcm8oKTsKKyAgICAgICAgICAgIGFyY0lzWmVyb0xlbmd0aCA9IHJlc3VsdC0+dGFyZ2V0
UG9pbnQgPT0gRmxvYXRQb2ludDo6emVybygpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBh
cmNJc1plcm9MZW5ndGggPSB0YXJnZXRQb2ludCA9PSBtX2N1cnJlbnRQb2ludDsKKyAgICAgICAg
ICAgIGFyY0lzWmVyb0xlbmd0aCA9IHJlc3VsdC0+dGFyZ2V0UG9pbnQgPT0gbV9jdXJyZW50UG9p
bnQ7CiAgICAgfQotICAgIGlmICghcnggfHwgIXJ5IHx8IGFyY0lzWmVyb0xlbmd0aCkgeworICAg
IGlmICghcmVzdWx0LT5yeCB8fCAhcmVzdWx0LT5yeSB8fCBhcmNJc1plcm9MZW5ndGgpIHsKICAg
ICAgICAgaWYgKG1fcGF0aFBhcnNpbmdNb2RlID09IE5vcm1hbGl6ZWRQYXJzaW5nKSB7CiAgICAg
ICAgICAgICBpZiAobV9tb2RlID09IFJlbGF0aXZlQ29vcmRpbmF0ZXMpCi0gICAgICAgICAgICAg
ICAgbV9jdXJyZW50UG9pbnQgKz0gdGFyZ2V0UG9pbnQ7CisgICAgICAgICAgICAgICAgbV9jdXJy
ZW50UG9pbnQgKz0gcmVzdWx0LT50YXJnZXRQb2ludDsKICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBtX2N1cnJlbnRQb2ludCA9IHRhcmdldFBvaW50OworICAgICAgICAgICAgICAg
IG1fY3VycmVudFBvaW50ID0gcmVzdWx0LT50YXJnZXRQb2ludDsKICAgICAgICAgICAgIG1fY29u
c3VtZXIubGluZVRvKG1fY3VycmVudFBvaW50LCBBYnNvbHV0ZUNvb3JkaW5hdGVzKTsKICAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICBtX2NvbnN1bWVyLmxpbmVUbyh0YXJnZXRQb2ludCwgbV9t
b2RlKTsKKyAgICAgICAgICAgIG1fY29uc3VtZXIubGluZVRvKHJlc3VsdC0+dGFyZ2V0UG9pbnQs
IG1fbW9kZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIGlmIChtX3BhdGhQ
YXJzaW5nTW9kZSA9PSBOb3JtYWxpemVkUGFyc2luZykgewogICAgICAgICBGbG9hdFBvaW50IHBv
aW50MSA9IG1fY3VycmVudFBvaW50OwogICAgICAgICBpZiAobV9tb2RlID09IFJlbGF0aXZlQ29v
cmRpbmF0ZXMpCi0gICAgICAgICAgICB0YXJnZXRQb2ludCArPSBtX2N1cnJlbnRQb2ludDsKLSAg
ICAgICAgbV9jdXJyZW50UG9pbnQgPSB0YXJnZXRQb2ludDsKLSAgICAgICAgcmV0dXJuIGRlY29t
cG9zZUFyY1RvQ3ViaWMoYW5nbGUsIHJ4LCByeSwgcG9pbnQxLCB0YXJnZXRQb2ludCwgbGFyZ2VB
cmMsIHN3ZWVwKTsKKyAgICAgICAgICAgIHJlc3VsdC0+dGFyZ2V0UG9pbnQgKz0gbV9jdXJyZW50
UG9pbnQ7CisgICAgICAgIG1fY3VycmVudFBvaW50ID0gcmVzdWx0LT50YXJnZXRQb2ludDsKKyAg
ICAgICAgcmV0dXJuIGRlY29tcG9zZUFyY1RvQ3ViaWMocmVzdWx0LT5hbmdsZSwgcmVzdWx0LT5y
eCwgcmVzdWx0LT5yeSwgcG9pbnQxLCByZXN1bHQtPnRhcmdldFBvaW50LCByZXN1bHQtPmxhcmdl
QXJjLCByZXN1bHQtPnN3ZWVwKTsKICAgICB9Ci0gICAgbV9jb25zdW1lci5hcmNUbyhyeCwgcnks
IGFuZ2xlLCBsYXJnZUFyYywgc3dlZXAsIHRhcmdldFBvaW50LCBtX21vZGUpOworICAgIG1fY29u
c3VtZXIuYXJjVG8ocmVzdWx0LT5yeCwgcmVzdWx0LT5yeSwgcmVzdWx0LT5hbmdsZSwgcmVzdWx0
LT5sYXJnZUFyYywgcmVzdWx0LT5zd2VlcCwgcmVzdWx0LT50YXJnZXRQb2ludCwgbV9tb2RlKTsK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMzEyLDggKzMwNCwxMSBAQCBib29sIFNWR1BhdGhQ
YXJzZXI6OnBhcnNlUGF0aERhdGEoYm9vbCBjCiAgICAgaWYgKCFtX3NvdXJjZS5tb3ZlVG9OZXh0
VG9rZW4oKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBTVkdQYXRoU2VnVHlwZSBjb21t
YW5kOwotICAgIG1fc291cmNlLnBhcnNlU1ZHU2VnbWVudFR5cGUoY29tbWFuZCk7CisgICAgYXV0
byBwYXJzZWRDb21tYW5kID0gbV9zb3VyY2UucGFyc2VTVkdTZWdtZW50VHlwZSgpOworICAgIGlm
ICghcGFyc2VkQ29tbWFuZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBjb21t
YW5kID0gKnBhcnNlZENvbW1hbmQ7CiAKICAgICAvLyBQYXRoIG11c3Qgc3RhcnQgd2l0aCBtb3Zl
dG8uCiAgICAgaWYgKGNoZWNrRm9ySW5pdGlhbE1vdmVUbyAmJiBjb21tYW5kICE9IFBhdGhTZWdN
b3ZlVG9BYnMgJiYgY29tbWFuZCAhPSBQYXRoU2VnTW92ZVRvUmVsKQpJbmRleDogU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1BhdGhQYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHUGF0aFBhcnNlci5oCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHUGF0aFBhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIGNsYXNzIFNWR1BhdGhCeXRlU3RyZWFtOwogY2xhc3MgU1ZHUGF0aFNv
dXJjZTsKIAotY2xhc3MgU1ZHUGF0aFBhcnNlciB7CitjbGFzcyBTVkdQYXRoUGFyc2VyIGZpbmFs
IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBwYXJzZShTVkdQYXRoU291cmNlJiwgU1ZHUGF0
aENvbnN1bWVyJiwgUGF0aFBhcnNpbmdNb2RlID0gTm9ybWFsaXplZFBhcnNpbmcsIGJvb2wgY2hl
Y2tGb3JJbml0aWFsTW92ZVRvID0gdHJ1ZSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdQYXRoU2VnTGlzdFNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1BhdGhTZWdMaXN0U291cmNlLmNwcAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1BhdGhTZWdMaXN0U291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAs
MTUgKzQwLDE1IEBAIGJvb2wgU1ZHUGF0aFNlZ0xpc3RTb3VyY2U6Omhhc01vcmVEYXRhKCkKICAg
ICByZXR1cm4gbV9pdGVtQ3VycmVudCA8IG1faXRlbUVuZDsKIH0KIAotYm9vbCBTVkdQYXRoU2Vn
TGlzdFNvdXJjZTo6cGFyc2VTVkdTZWdtZW50VHlwZShTVkdQYXRoU2VnVHlwZSYgcGF0aFNlZ1R5
cGUpCitTVkdQYXRoU2VnVHlwZSBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6bmV4dENvbW1hbmQoU1ZH
UGF0aFNlZ1R5cGUpCiB7CiAgICAgbV9zZWdtZW50ID0gbV9wYXRoU2VnTGlzdC5hdChtX2l0ZW1D
dXJyZW50KTsKLSAgICBwYXRoU2VnVHlwZSA9IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdUeXBlPiht
X3NlZ21lbnQtPnBhdGhTZWdUeXBlKCkpOworICAgIFNWR1BhdGhTZWdUeXBlIHBhdGhTZWdUeXBl
ID0gc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ1R5cGU+KG1fc2VnbWVudC0+cGF0aFNlZ1R5cGUoKSk7
CiAgICAgKyttX2l0ZW1DdXJyZW50OwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBwYXRo
U2VnVHlwZTsKIH0KIAotU1ZHUGF0aFNlZ1R5cGUgU1ZHUGF0aFNlZ0xpc3RTb3VyY2U6Om5leHRD
b21tYW5kKFNWR1BhdGhTZWdUeXBlKQorT3B0aW9uYWw8U1ZHUGF0aFNlZ1R5cGU+IFNWR1BhdGhT
ZWdMaXN0U291cmNlOjpwYXJzZVNWR1NlZ21lbnRUeXBlKCkKIHsKICAgICBtX3NlZ21lbnQgPSBt
X3BhdGhTZWdMaXN0LmF0KG1faXRlbUN1cnJlbnQpOwogICAgIFNWR1BhdGhTZWdUeXBlIHBhdGhT
ZWdUeXBlID0gc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ1R5cGU+KG1fc2VnbWVudC0+cGF0aFNlZ1R5
cGUoKSk7CkBAIC01Niw5NCArNTYsMTEyIEBAIFNWR1BhdGhTZWdUeXBlIFNWR1BhdGhTZWdMaXN0
U291cmNlOjpuZXgKICAgICByZXR1cm4gcGF0aFNlZ1R5cGU7CiB9CiAKLWJvb2wgU1ZHUGF0aFNl
Z0xpc3RTb3VyY2U6OnBhcnNlTW92ZVRvU2VnbWVudChGbG9hdFBvaW50JiB0YXJnZXRQb2ludCkK
K09wdGlvbmFsPFNWR1BhdGhTb3VyY2U6Ok1vdmVUb1NlZ21lbnQ+IFNWR1BhdGhTZWdMaXN0U291
cmNlOjpwYXJzZU1vdmVUb1NlZ21lbnQoKQogewogICAgIEFTU0VSVChtX3NlZ21lbnQpOwogICAg
IEFTU0VSVChtX3NlZ21lbnQtPnBhdGhTZWdUeXBlKCkgPT0gUGF0aFNlZ01vdmVUb0FicyB8fCBt
X3NlZ21lbnQtPnBhdGhTZWdUeXBlKCkgPT0gUGF0aFNlZ01vdmVUb1JlbCk7CiAgICAgU1ZHUGF0
aFNlZ1NpbmdsZUNvb3JkaW5hdGUqIG1vdmVUbyA9IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdTaW5n
bGVDb29yZGluYXRlKj4obV9zZWdtZW50LmdldCgpKTsKLSAgICB0YXJnZXRQb2ludCA9IEZsb2F0
UG9pbnQobW92ZVRvLT54KCksIG1vdmVUby0+eSgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICAK
KyAgICBNb3ZlVG9TZWdtZW50IHNlZ21lbnQ7CisgICAgc2VnbWVudC50YXJnZXRQb2ludCA9IEZs
b2F0UG9pbnQobW92ZVRvLT54KCksIG1vdmVUby0+eSgpKTsKKyAgICByZXR1cm4gc2VnbWVudDsK
IH0KIAotYm9vbCBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VMaW5lVG9TZWdtZW50KEZsb2F0
UG9pbnQmIHRhcmdldFBvaW50KQorT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6TGluZVRvU2VnbWVu
dD4gU1ZHUGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNlTGluZVRvU2VnbWVudCgpCiB7CiAgICAgQVNT
RVJUKG1fc2VnbWVudCk7CiAgICAgQVNTRVJUKG1fc2VnbWVudC0+cGF0aFNlZ1R5cGUoKSA9PSBQ
YXRoU2VnTGluZVRvQWJzIHx8IG1fc2VnbWVudC0+cGF0aFNlZ1R5cGUoKSA9PSBQYXRoU2VnTGlu
ZVRvUmVsKTsKICAgICBTVkdQYXRoU2VnU2luZ2xlQ29vcmRpbmF0ZSogbGluZVRvID0gc3RhdGlj
X2Nhc3Q8U1ZHUGF0aFNlZ1NpbmdsZUNvb3JkaW5hdGUqPihtX3NlZ21lbnQuZ2V0KCkpOwotICAg
IHRhcmdldFBvaW50ID0gRmxvYXRQb2ludChsaW5lVG8tPngoKSwgbGluZVRvLT55KCkpOwotICAg
IHJldHVybiB0cnVlOworICAgIAorICAgIExpbmVUb1NlZ21lbnQgc2VnbWVudDsKKyAgICBzZWdt
ZW50LnRhcmdldFBvaW50ID0gRmxvYXRQb2ludChsaW5lVG8tPngoKSwgbGluZVRvLT55KCkpOwor
ICAgIHJldHVybiBzZWdtZW50OwogfQogCi1ib29sIFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJz
ZUxpbmVUb0hvcml6b250YWxTZWdtZW50KGZsb2F0JiB4KQorT3B0aW9uYWw8U1ZHUGF0aFNvdXJj
ZTo6TGluZVRvSG9yaXpvbnRhbFNlZ21lbnQ+IFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUxp
bmVUb0hvcml6b250YWxTZWdtZW50KCkKIHsKICAgICBBU1NFUlQobV9zZWdtZW50KTsKICAgICBB
U1NFUlQobV9zZWdtZW50LT5wYXRoU2VnVHlwZSgpID09IFBhdGhTZWdMaW5lVG9Ib3Jpem9udGFs
QWJzIHx8IG1fc2VnbWVudC0+cGF0aFNlZ1R5cGUoKSA9PSBQYXRoU2VnTGluZVRvSG9yaXpvbnRh
bFJlbCk7CiAgICAgU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWwqIGhvcml6b250YWwgPSBzdGF0
aWNfY2FzdDxTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbCo+KG1fc2VnbWVudC5nZXQoKSk7Ci0g
ICAgeCA9IGhvcml6b250YWwtPngoKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBMaW5l
VG9Ib3Jpem9udGFsU2VnbWVudCBzZWdtZW50OworICAgIHNlZ21lbnQueCA9IGhvcml6b250YWwt
PngoKTsKKyAgICByZXR1cm4gc2VnbWVudDsKIH0KIAotYm9vbCBTVkdQYXRoU2VnTGlzdFNvdXJj
ZTo6cGFyc2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnQoZmxvYXQmIHkpCitPcHRpb25hbDxTVkdQYXRo
U291cmNlOjpMaW5lVG9WZXJ0aWNhbFNlZ21lbnQ+IFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJz
ZUxpbmVUb1ZlcnRpY2FsU2VnbWVudCgpCiB7CiAgICAgQVNTRVJUKG1fc2VnbWVudCk7CiAgICAg
QVNTRVJUKG1fc2VnbWVudC0+cGF0aFNlZ1R5cGUoKSA9PSBQYXRoU2VnTGluZVRvVmVydGljYWxB
YnMgfHwgbV9zZWdtZW50LT5wYXRoU2VnVHlwZSgpID09IFBhdGhTZWdMaW5lVG9WZXJ0aWNhbFJl
bCk7CiAgICAgU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsKiB2ZXJ0aWNhbCA9IHN0YXRpY19jYXN0
PFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbCo+KG1fc2VnbWVudC5nZXQoKSk7Ci0gICAgeSA9IHZl
cnRpY2FsLT55KCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgTGluZVRvVmVydGljYWxT
ZWdtZW50IHNlZ21lbnQ7CisgICAgc2VnbWVudC55ID0gdmVydGljYWwtPnkoKTsKKyAgICByZXR1
cm4gc2VnbWVudDsKIH0KIAotYm9vbCBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VDdXJ2ZVRv
Q3ViaWNTZWdtZW50KEZsb2F0UG9pbnQmIHBvaW50MSwgRmxvYXRQb2ludCYgcG9pbnQyLCBGbG9h
dFBvaW50JiB0YXJnZXRQb2ludCkKK09wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkN1cnZlVG9DdWJp
Y1NlZ21lbnQ+IFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQo
KQogewogICAgIEFTU0VSVChtX3NlZ21lbnQpOwogICAgIEFTU0VSVChtX3NlZ21lbnQtPnBhdGhT
ZWdUeXBlKCkgPT0gUGF0aFNlZ0N1cnZlVG9DdWJpY0FicyB8fCBtX3NlZ21lbnQtPnBhdGhTZWdU
eXBlKCkgPT0gUGF0aFNlZ0N1cnZlVG9DdWJpY1JlbCk7CiAgICAgU1ZHUGF0aFNlZ0N1cnZldG9D
dWJpYyogY3ViaWMgPSBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnQ3VydmV0b0N1YmljKj4obV9zZWdt
ZW50LmdldCgpKTsKLSAgICBwb2ludDEgPSBGbG9hdFBvaW50KGN1YmljLT54MSgpLCBjdWJpYy0+
eTEoKSk7Ci0gICAgcG9pbnQyID0gRmxvYXRQb2ludChjdWJpYy0+eDIoKSwgY3ViaWMtPnkyKCkp
OwotICAgIHRhcmdldFBvaW50ID0gRmxvYXRQb2ludChjdWJpYy0+eCgpLCBjdWJpYy0+eSgpKTsK
LSAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBDdXJ2ZVRvQ3ViaWNTZWdtZW50IHNlZ21lbnQ7
CisgICAgc2VnbWVudC5wb2ludDEgPSBGbG9hdFBvaW50KGN1YmljLT54MSgpLCBjdWJpYy0+eTEo
KSk7CisgICAgc2VnbWVudC5wb2ludDIgPSBGbG9hdFBvaW50KGN1YmljLT54MigpLCBjdWJpYy0+
eTIoKSk7CisgICAgc2VnbWVudC50YXJnZXRQb2ludCA9IEZsb2F0UG9pbnQoY3ViaWMtPngoKSwg
Y3ViaWMtPnkoKSk7CisgICAgcmV0dXJuIHNlZ21lbnQ7CiB9CiAKLWJvb2wgU1ZHUGF0aFNlZ0xp
c3RTb3VyY2U6OnBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudChGbG9hdFBvaW50JiBwb2lu
dDIsIEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQorT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6Q3Vy
dmVUb0N1YmljU21vb3RoU2VnbWVudD4gU1ZHUGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNlQ3VydmVU
b0N1YmljU21vb3RoU2VnbWVudCgpCiB7CiAgICAgQVNTRVJUKG1fc2VnbWVudCk7CiAgICAgQVNT
RVJUKG1fc2VnbWVudC0+cGF0aFNlZ1R5cGUoKSA9PSBQYXRoU2VnQ3VydmVUb0N1YmljU21vb3Ro
QWJzIHx8IG1fc2VnbWVudC0+cGF0aFNlZ1R5cGUoKSA9PSBQYXRoU2VnQ3VydmVUb0N1YmljU21v
b3RoUmVsKTsKICAgICBTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoKiBjdWJpY1Ntb290aCA9
IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGgqPihtX3NlZ21lbnQuZ2V0
KCkpOwotICAgIHBvaW50MiA9IEZsb2F0UG9pbnQoY3ViaWNTbW9vdGgtPngyKCksIGN1YmljU21v
b3RoLT55MigpKTsKLSAgICB0YXJnZXRQb2ludCA9IEZsb2F0UG9pbnQoY3ViaWNTbW9vdGgtPngo
KSwgY3ViaWNTbW9vdGgtPnkoKSk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgQ3VydmVU
b0N1YmljU21vb3RoU2VnbWVudCBzZWdtZW50OworICAgIHNlZ21lbnQucG9pbnQyID0gRmxvYXRQ
b2ludChjdWJpY1Ntb290aC0+eDIoKSwgY3ViaWNTbW9vdGgtPnkyKCkpOworICAgIHNlZ21lbnQu
dGFyZ2V0UG9pbnQgPSBGbG9hdFBvaW50KGN1YmljU21vb3RoLT54KCksIGN1YmljU21vb3RoLT55
KCkpOworICAgIHJldHVybiBzZWdtZW50OwogfQogCi1ib29sIFNWR1BhdGhTZWdMaXN0U291cmNl
OjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KEZsb2F0UG9pbnQmIHBvaW50MSwgRmxvYXRQ
b2ludCYgdGFyZ2V0UG9pbnQpCitPcHRpb25hbDxTVkdQYXRoU291cmNlOjpDdXJ2ZVRvUXVhZHJh
dGljU2VnbWVudD4gU1ZHUGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1Nl
Z21lbnQoKQogewogICAgIEFTU0VSVChtX3NlZ21lbnQpOwogICAgIEFTU0VSVChtX3NlZ21lbnQt
PnBhdGhTZWdUeXBlKCkgPT0gUGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNBYnMgfHwgbV9zZWdtZW50
LT5wYXRoU2VnVHlwZSgpID09IFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljUmVsKTsKICAgICBTVkdQ
YXRoU2VnQ3VydmV0b1F1YWRyYXRpYyogcXVhZHJhdGljID0gc3RhdGljX2Nhc3Q8U1ZHUGF0aFNl
Z0N1cnZldG9RdWFkcmF0aWMqPihtX3NlZ21lbnQuZ2V0KCkpOwotICAgIHBvaW50MSA9IEZsb2F0
UG9pbnQocXVhZHJhdGljLT54MSgpLCBxdWFkcmF0aWMtPnkxKCkpOwotICAgIHRhcmdldFBvaW50
ID0gRmxvYXRQb2ludChxdWFkcmF0aWMtPngoKSwgcXVhZHJhdGljLT55KCkpOwotICAgIHJldHVy
biB0cnVlOworICAgIAorICAgIEN1cnZlVG9RdWFkcmF0aWNTZWdtZW50IHNlZ21lbnQ7CisgICAg
c2VnbWVudC5wb2ludDEgPSBGbG9hdFBvaW50KHF1YWRyYXRpYy0+eDEoKSwgcXVhZHJhdGljLT55
MSgpKTsKKyAgICBzZWdtZW50LnRhcmdldFBvaW50ID0gRmxvYXRQb2ludChxdWFkcmF0aWMtPngo
KSwgcXVhZHJhdGljLT55KCkpOworICAgIHJldHVybiBzZWdtZW50OwogfQogCi1ib29sIFNWR1Bh
dGhTZWdMaXN0U291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KEZsb2F0
UG9pbnQmIHRhcmdldFBvaW50KQorT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6Q3VydmVUb1F1YWRy
YXRpY1Ntb290aFNlZ21lbnQ+IFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUN1cnZlVG9RdWFk
cmF0aWNTbW9vdGhTZWdtZW50KCkKIHsKICAgICBBU1NFUlQobV9zZWdtZW50KTsKICAgICBBU1NF
UlQobV9zZWdtZW50LT5wYXRoU2VnVHlwZSgpID09IFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljU21v
b3RoQWJzIHx8IG1fc2VnbWVudC0+cGF0aFNlZ1R5cGUoKSA9PSBQYXRoU2VnQ3VydmVUb1F1YWRy
YXRpY1Ntb290aFJlbCk7CiAgICAgU1ZHUGF0aFNlZ1NpbmdsZUNvb3JkaW5hdGUqIHF1YWRyYXRp
Y1Ntb290aCA9IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdTaW5nbGVDb29yZGluYXRlKj4obV9zZWdt
ZW50LmdldCgpKTsKLSAgICB0YXJnZXRQb2ludCA9IEZsb2F0UG9pbnQocXVhZHJhdGljU21vb3Ro
LT54KCksIHF1YWRyYXRpY1Ntb290aC0+eSgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAg
ICBDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudCBzZWdtZW50OworICAgIHNlZ21lbnQudGFy
Z2V0UG9pbnQgPSBGbG9hdFBvaW50KHF1YWRyYXRpY1Ntb290aC0+eCgpLCBxdWFkcmF0aWNTbW9v
dGgtPnkoKSk7CisgICAgcmV0dXJuIHNlZ21lbnQ7CiB9CiAKLWJvb2wgU1ZHUGF0aFNlZ0xpc3RT
b3VyY2U6OnBhcnNlQXJjVG9TZWdtZW50KGZsb2F0JiByeCwgZmxvYXQmIHJ5LCBmbG9hdCYgYW5n
bGUsIGJvb2wmIGxhcmdlQXJjLCBib29sJiBzd2VlcCwgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQp
CitPcHRpb25hbDxTVkdQYXRoU291cmNlOjpBcmNUb1NlZ21lbnQ+IFNWR1BhdGhTZWdMaXN0U291
cmNlOjpwYXJzZUFyY1RvU2VnbWVudCgpCiB7CiAgICAgQVNTRVJUKG1fc2VnbWVudCk7CiAgICAg
QVNTRVJUKG1fc2VnbWVudC0+cGF0aFNlZ1R5cGUoKSA9PSBQYXRoU2VnQXJjQWJzIHx8IG1fc2Vn
bWVudC0+cGF0aFNlZ1R5cGUoKSA9PSBQYXRoU2VnQXJjUmVsKTsKICAgICBTVkdQYXRoU2VnQXJj
KiBhcmNUbyA9IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdBcmMqPihtX3NlZ21lbnQuZ2V0KCkpOwot
ICAgIHJ4ID0gYXJjVG8tPnIxKCk7Ci0gICAgcnkgPSBhcmNUby0+cjIoKTsKLSAgICBhbmdsZSA9
IGFyY1RvLT5hbmdsZSgpOwotICAgIGxhcmdlQXJjID0gYXJjVG8tPmxhcmdlQXJjRmxhZygpOwot
ICAgIHN3ZWVwID0gYXJjVG8tPnN3ZWVwRmxhZygpOwotICAgIHRhcmdldFBvaW50ID0gRmxvYXRQ
b2ludChhcmNUby0+eCgpLCBhcmNUby0+eSgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAg
ICBBcmNUb1NlZ21lbnQgc2VnbWVudDsKKyAgICBzZWdtZW50LnJ4ID0gYXJjVG8tPnIxKCk7Cisg
ICAgc2VnbWVudC5yeSA9IGFyY1RvLT5yMigpOworICAgIHNlZ21lbnQuYW5nbGUgPSBhcmNUby0+
YW5nbGUoKTsKKyAgICBzZWdtZW50LmxhcmdlQXJjID0gYXJjVG8tPmxhcmdlQXJjRmxhZygpOwor
ICAgIHNlZ21lbnQuc3dlZXAgPSBhcmNUby0+c3dlZXBGbGFnKCk7CisgICAgc2VnbWVudC50YXJn
ZXRQb2ludCA9IEZsb2F0UG9pbnQoYXJjVG8tPngoKSwgYXJjVG8tPnkoKSk7CisgICAgcmV0dXJu
IHNlZ21lbnQ7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU2VnTGlz
dFNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU2VnTGlz
dFNvdXJjZS5oCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0
aFNlZ0xpc3RTb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTggKzM2LDE4IEBAIHB1Ymxp
YzoKIHByaXZhdGU6CiAgICAgYm9vbCBoYXNNb3JlRGF0YSgpIGNvbnN0IGZpbmFsOwogICAgIGJv
b2wgbW92ZVRvTmV4dFRva2VuKCkgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQotICAgIGJvb2wgcGFy
c2VTVkdTZWdtZW50VHlwZShTVkdQYXRoU2VnVHlwZSYpIGZpbmFsOwogICAgIFNWR1BhdGhTZWdU
eXBlIG5leHRDb21tYW5kKFNWR1BhdGhTZWdUeXBlKSBmaW5hbDsKIAotICAgIGJvb2wgcGFyc2VN
b3ZlVG9TZWdtZW50KEZsb2F0UG9pbnQmKSBmaW5hbDsKLSAgICBib29sIHBhcnNlTGluZVRvU2Vn
bWVudChGbG9hdFBvaW50JikgZmluYWw7Ci0gICAgYm9vbCBwYXJzZUxpbmVUb0hvcml6b250YWxT
ZWdtZW50KGZsb2F0JikgZmluYWw7Ci0gICAgYm9vbCBwYXJzZUxpbmVUb1ZlcnRpY2FsU2VnbWVu
dChmbG9hdCYpIGZpbmFsOwotICAgIGJvb2wgcGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KEZsb2F0
UG9pbnQmLCBGbG9hdFBvaW50JiwgRmxvYXRQb2ludCYpIGZpbmFsOwotICAgIGJvb2wgcGFyc2VD
dXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KEZsb2F0UG9pbnQmLCBGbG9hdFBvaW50JikgZmluYWw7
Ci0gICAgYm9vbCBwYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KEZsb2F0UG9pbnQmLCBGbG9h
dFBvaW50JikgZmluYWw7Ci0gICAgYm9vbCBwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdt
ZW50KEZsb2F0UG9pbnQmKSBmaW5hbDsKLSAgICBib29sIHBhcnNlQXJjVG9TZWdtZW50KGZsb2F0
JiwgZmxvYXQmLCBmbG9hdCYsIGJvb2wmLCBib29sJiwgRmxvYXRQb2ludCYpIGZpbmFsOworICAg
IE9wdGlvbmFsPFNWR1BhdGhTZWdUeXBlPiBwYXJzZVNWR1NlZ21lbnRUeXBlKCkgZmluYWw7Cisg
ICAgT3B0aW9uYWw8TW92ZVRvU2VnbWVudD4gcGFyc2VNb3ZlVG9TZWdtZW50KCkgZmluYWw7Cisg
ICAgT3B0aW9uYWw8TGluZVRvU2VnbWVudD4gcGFyc2VMaW5lVG9TZWdtZW50KCkgZmluYWw7Cisg
ICAgT3B0aW9uYWw8TGluZVRvSG9yaXpvbnRhbFNlZ21lbnQ+IHBhcnNlTGluZVRvSG9yaXpvbnRh
bFNlZ21lbnQoKSBmaW5hbDsKKyAgICBPcHRpb25hbDxMaW5lVG9WZXJ0aWNhbFNlZ21lbnQ+IHBh
cnNlTGluZVRvVmVydGljYWxTZWdtZW50KCkgZmluYWw7CisgICAgT3B0aW9uYWw8Q3VydmVUb0N1
YmljU2VnbWVudD4gcGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KCkgZmluYWw7CisgICAgT3B0aW9u
YWw8Q3VydmVUb0N1YmljU21vb3RoU2VnbWVudD4gcGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdt
ZW50KCkgZmluYWw7CisgICAgT3B0aW9uYWw8Q3VydmVUb1F1YWRyYXRpY1NlZ21lbnQ+IHBhcnNl
Q3VydmVUb1F1YWRyYXRpY1NlZ21lbnQoKSBmaW5hbDsKKyAgICBPcHRpb25hbDxDdXJ2ZVRvUXVh
ZHJhdGljU21vb3RoU2VnbWVudD4gcGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudCgp
IGZpbmFsOworICAgIE9wdGlvbmFsPEFyY1RvU2VnbWVudD4gcGFyc2VBcmNUb1NlZ21lbnQoKSBm
aW5hbDsKIAogICAgIGNvbnN0IFNWR1BhdGhTZWdMaXN0JiBtX3BhdGhTZWdMaXN0OwogICAgIFJl
ZlB0cjxTVkdQYXRoU2VnPiBtX3NlZ21lbnQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
UGF0aFNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU291
cmNlLmgJKHJldmlzaW9uIDI2MzE3NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU291
cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDE4ICszMyw2MyBAQCBwdWJsaWM6CiAKICAgICB2
aXJ0dWFsIGJvb2wgaGFzTW9yZURhdGEoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIG1v
dmVUb05leHRUb2tlbigpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VTVkdTZWdtZW50VHlw
ZShTVkdQYXRoU2VnVHlwZSYpID0gMDsKICAgICB2aXJ0dWFsIFNWR1BhdGhTZWdUeXBlIG5leHRD
b21tYW5kKFNWR1BhdGhTZWdUeXBlIHByZXZpb3VzQ29tbWFuZCkgPSAwOwogCi0gICAgdmlydHVh
bCBib29sIHBhcnNlTW92ZVRvU2VnbWVudChGbG9hdFBvaW50JikgPSAwOwotICAgIHZpcnR1YWwg
Ym9vbCBwYXJzZUxpbmVUb1NlZ21lbnQoRmxvYXRQb2ludCYpID0gMDsKLSAgICB2aXJ0dWFsIGJv
b2wgcGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudChmbG9hdCYpID0gMDsKLSAgICB2aXJ0dWFs
IGJvb2wgcGFyc2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnQoZmxvYXQmKSA9IDA7Ci0gICAgdmlydHVh
bCBib29sIHBhcnNlQ3VydmVUb0N1YmljU2VnbWVudChGbG9hdFBvaW50JiwgRmxvYXRQb2ludCYs
IEZsb2F0UG9pbnQmKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHBhcnNlQ3VydmVUb0N1YmljU21v
b3RoU2VnbWVudChGbG9hdFBvaW50JiwgRmxvYXRQb2ludCYpID0gMDsKLSAgICB2aXJ0dWFsIGJv
b2wgcGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudChGbG9hdFBvaW50JiwgRmxvYXRQb2ludCYp
ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVu
dChGbG9hdFBvaW50JikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBwYXJzZUFyY1RvU2VnbWVudChm
bG9hdCYsIGZsb2F0JiwgZmxvYXQmLCBib29sJiwgYm9vbCYsIEZsb2F0UG9pbnQmKSA9IDA7Cisg
ICAgdmlydHVhbCBPcHRpb25hbDxTVkdQYXRoU2VnVHlwZT4gcGFyc2VTVkdTZWdtZW50VHlwZSgp
ID0gMDsKKworICAgIHN0cnVjdCBNb3ZlVG9TZWdtZW50IHsKKyAgICAgICAgRmxvYXRQb2ludCB0
YXJnZXRQb2ludDsKKyAgICB9OworICAgIHZpcnR1YWwgT3B0aW9uYWw8TW92ZVRvU2VnbWVudD4g
cGFyc2VNb3ZlVG9TZWdtZW50KCkgPSAwOworCisgICAgc3RydWN0IExpbmVUb1NlZ21lbnQgewor
ICAgICAgICBGbG9hdFBvaW50IHRhcmdldFBvaW50OworICAgIH07CisgICAgdmlydHVhbCBPcHRp
b25hbDxMaW5lVG9TZWdtZW50PiBwYXJzZUxpbmVUb1NlZ21lbnQoKSA9IDA7CisKKyAgICBzdHJ1
Y3QgTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQgeworICAgICAgICBmbG9hdCB4OworICAgIH07Cisg
ICAgdmlydHVhbCBPcHRpb25hbDxMaW5lVG9Ib3Jpem9udGFsU2VnbWVudD4gcGFyc2VMaW5lVG9I
b3Jpem9udGFsU2VnbWVudCgpID0gMDsKKworICAgIHN0cnVjdCBMaW5lVG9WZXJ0aWNhbFNlZ21l
bnQgeworICAgICAgICBmbG9hdCB5OworICAgIH07CisgICAgdmlydHVhbCBPcHRpb25hbDxMaW5l
VG9WZXJ0aWNhbFNlZ21lbnQ+IHBhcnNlTGluZVRvVmVydGljYWxTZWdtZW50KCkgPSAwOworCisg
ICAgc3RydWN0IEN1cnZlVG9DdWJpY1NlZ21lbnQgeworICAgICAgICBGbG9hdFBvaW50IHBvaW50
MTsKKyAgICAgICAgRmxvYXRQb2ludCBwb2ludDI7CisgICAgICAgIEZsb2F0UG9pbnQgdGFyZ2V0
UG9pbnQ7CisgICAgfTsKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPEN1cnZlVG9DdWJpY1NlZ21lbnQ+
IHBhcnNlQ3VydmVUb0N1YmljU2VnbWVudCgpID0gMDsKKworICAgIHN0cnVjdCBDdXJ2ZVRvQ3Vi
aWNTbW9vdGhTZWdtZW50IHsKKyAgICAgICAgRmxvYXRQb2ludCBwb2ludDI7CisgICAgICAgIEZs
b2F0UG9pbnQgdGFyZ2V0UG9pbnQ7CisgICAgfTsKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPEN1cnZl
VG9DdWJpY1Ntb290aFNlZ21lbnQ+IHBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudCgpID0g
MDsKKworICAgIHN0cnVjdCBDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCB7CisgICAgICAgIEZsb2F0
UG9pbnQgcG9pbnQxOworICAgICAgICBGbG9hdFBvaW50IHRhcmdldFBvaW50OworICAgIH07Cisg
ICAgdmlydHVhbCBPcHRpb25hbDxDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudD4gcGFyc2VDdXJ2ZVRv
UXVhZHJhdGljU2VnbWVudCgpID0gMDsKKworICAgIHN0cnVjdCBDdXJ2ZVRvUXVhZHJhdGljU21v
b3RoU2VnbWVudCB7CisgICAgICAgIEZsb2F0UG9pbnQgdGFyZ2V0UG9pbnQ7CisgICAgfTsKKyAg
ICB2aXJ0dWFsIE9wdGlvbmFsPEN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50PiBwYXJzZUN1
cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KCkgPSAwOworCisgICAgc3RydWN0IEFyY1RvU2Vn
bWVudCB7CisgICAgICAgIGZsb2F0IHJ4OworICAgICAgICBmbG9hdCByeTsKKyAgICAgICAgZmxv
YXQgYW5nbGU7CisgICAgICAgIGJvb2wgbGFyZ2VBcmM7CisgICAgICAgIGJvb2wgc3dlZXA7Cisg
ICAgICAgIEZsb2F0UG9pbnQgdGFyZ2V0UG9pbnQ7CisgICAgfTsKKyAgICB2aXJ0dWFsIE9wdGlv
bmFsPEFyY1RvU2VnbWVudD4gcGFyc2VBcmNUb1NlZ21lbnQoKSA9IDA7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFN0cmluZ1Nv
dXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTdHJpbmdT
b3VyY2UuY3BwCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0
aFN0cmluZ1NvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDE5NSArNTUsMjgwIEBAIGJv
b2wgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6bW92ZVRvTmV4dFRva2UKICAgICByZXR1cm4gc2tpcE9w
dGlvbmFsU1ZHU3BhY2VzKG1fY3VycmVudC5tX2NoYXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3Rl
cjE2KTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgYm9v
bCBwYXJzZVNWR1NlZ21lbnRUeXBlSGVscGVyKGNvbnN0IENoYXJhY3RlclR5cGUqJiBjdXJyZW50
LCBTVkdQYXRoU2VnVHlwZSYgcGF0aFNlZ1R5cGUpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZT4gc3RhdGljIE9wdGlvbmFsPFNWR1BhdGhTZWdUeXBlPiBuZXh0Q29tbWFuZEhlbHBl
cihjb25zdCBDaGFyYWN0ZXJUeXBlKiYgY3VycmVudCwgU1ZHUGF0aFNlZ1R5cGUgcHJldmlvdXND
b21tYW5kKQoreworICAgIC8vIENoZWNrIGZvciByZW1haW5pbmcgY29vcmRpbmF0ZXMgaW4gdGhl
IGN1cnJlbnQgY29tbWFuZC4KKyAgICBpZiAoKCpjdXJyZW50ID09ICcrJyB8fCAqY3VycmVudCA9
PSAnLScgfHwgKmN1cnJlbnQgPT0gJy4nIHx8IGlzQVNDSUlEaWdpdCgqY3VycmVudCkpCisgICAg
ICAgICYmIHByZXZpb3VzQ29tbWFuZCAhPSBQYXRoU2VnQ2xvc2VQYXRoKSB7CisgICAgICAgIGlm
IChwcmV2aW91c0NvbW1hbmQgPT0gUGF0aFNlZ01vdmVUb0FicykKKyAgICAgICAgICAgIHJldHVy
biBQYXRoU2VnTGluZVRvQWJzOworICAgICAgICBpZiAocHJldmlvdXNDb21tYW5kID09IFBhdGhT
ZWdNb3ZlVG9SZWwpCisgICAgICAgICAgICByZXR1cm4gUGF0aFNlZ0xpbmVUb1JlbDsKKyAgICAg
ICAgcmV0dXJuIHByZXZpb3VzQ29tbWFuZDsKKyAgICB9CisKKyAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworfQorCitTVkdQYXRoU2VnVHlwZSBTVkdQYXRoU3RyaW5nU291cmNlOjpuZXh0Q29tbWFu
ZChTVkdQYXRoU2VnVHlwZSBwcmV2aW91c0NvbW1hbmQpCit7CisgICAgaWYgKG1faXM4Qml0U291
cmNlKSB7CisgICAgICAgIGlmIChhdXRvIG5leHRDb21tYW5kID0gbmV4dENvbW1hbmRIZWxwZXIo
bV9jdXJyZW50Lm1fY2hhcmFjdGVyOCwgcHJldmlvdXNDb21tYW5kKSkKKyAgICAgICAgICAgIHJl
dHVybiAqbmV4dENvbW1hbmQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGF1dG8gbmV4dENv
bW1hbmQgPSBuZXh0Q29tbWFuZEhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXIxNiwgcHJldmlv
dXNDb21tYW5kKSkKKyAgICAgICAgICAgIHJldHVybiAqbmV4dENvbW1hbmQ7CisgICAgfQorCisg
ICAgcmV0dXJuICpwYXJzZVNWR1NlZ21lbnRUeXBlKCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgU1ZHUGF0aFNlZ1R5cGUgcGFyc2VTVkdTZWdtZW50VHlw
ZUhlbHBlcihjb25zdCBDaGFyYWN0ZXJUeXBlKiYgY3VycmVudCkKIHsKICAgICBzd2l0Y2ggKCoo
Y3VycmVudCsrKSkgewogICAgIGNhc2UgJ1onOgogICAgIGNhc2UgJ3onOgotICAgICAgICBwYXRo
U2VnVHlwZSA9IFBhdGhTZWdDbG9zZVBhdGg7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1
cm4gUGF0aFNlZ0Nsb3NlUGF0aDsKICAgICBjYXNlICdNJzoKLSAgICAgICAgcGF0aFNlZ1R5cGUg
PSBQYXRoU2VnTW92ZVRvQWJzOwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIFBhdGhT
ZWdNb3ZlVG9BYnM7CiAgICAgY2FzZSAnbSc6Ci0gICAgICAgIHBhdGhTZWdUeXBlID0gUGF0aFNl
Z01vdmVUb1JlbDsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBQYXRoU2VnTW92ZVRv
UmVsOwogICAgIGNhc2UgJ0wnOgotICAgICAgICBwYXRoU2VnVHlwZSA9IFBhdGhTZWdMaW5lVG9B
YnM7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gUGF0aFNlZ0xpbmVUb0FiczsKICAg
ICBjYXNlICdsJzoKLSAgICAgICAgcGF0aFNlZ1R5cGUgPSBQYXRoU2VnTGluZVRvUmVsOwotICAg
ICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIFBhdGhTZWdMaW5lVG9SZWw7CiAgICAgY2FzZSAn
Qyc6Ci0gICAgICAgIHBhdGhTZWdUeXBlID0gUGF0aFNlZ0N1cnZlVG9DdWJpY0FiczsKLSAgICAg
ICAgYnJlYWs7CisgICAgICAgIHJldHVybiBQYXRoU2VnQ3VydmVUb0N1YmljQWJzOwogICAgIGNh
c2UgJ2MnOgotICAgICAgICBwYXRoU2VnVHlwZSA9IFBhdGhTZWdDdXJ2ZVRvQ3ViaWNSZWw7Ci0g
ICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gUGF0aFNlZ0N1cnZlVG9DdWJpY1JlbDsKICAg
ICBjYXNlICdRJzoKLSAgICAgICAgcGF0aFNlZ1R5cGUgPSBQYXRoU2VnQ3VydmVUb1F1YWRyYXRp
Y0FiczsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBQYXRoU2VnQ3VydmVUb1F1YWRy
YXRpY0FiczsKICAgICBjYXNlICdxJzoKLSAgICAgICAgcGF0aFNlZ1R5cGUgPSBQYXRoU2VnQ3Vy
dmVUb1F1YWRyYXRpY1JlbDsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBQYXRoU2Vn
Q3VydmVUb1F1YWRyYXRpY1JlbDsKICAgICBjYXNlICdBJzoKLSAgICAgICAgcGF0aFNlZ1R5cGUg
PSBQYXRoU2VnQXJjQWJzOwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIFBhdGhTZWdB
cmNBYnM7CiAgICAgY2FzZSAnYSc6Ci0gICAgICAgIHBhdGhTZWdUeXBlID0gUGF0aFNlZ0FyY1Jl
bDsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBQYXRoU2VnQXJjUmVsOwogICAgIGNh
c2UgJ0gnOgotICAgICAgICBwYXRoU2VnVHlwZSA9IFBhdGhTZWdMaW5lVG9Ib3Jpem9udGFsQWJz
OwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIFBhdGhTZWdMaW5lVG9Ib3Jpem9udGFs
QWJzOwogICAgIGNhc2UgJ2gnOgotICAgICAgICBwYXRoU2VnVHlwZSA9IFBhdGhTZWdMaW5lVG9I
b3Jpem9udGFsUmVsOwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIFBhdGhTZWdMaW5l
VG9Ib3Jpem9udGFsUmVsOwogICAgIGNhc2UgJ1YnOgotICAgICAgICBwYXRoU2VnVHlwZSA9IFBh
dGhTZWdMaW5lVG9WZXJ0aWNhbEFiczsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBQ
YXRoU2VnTGluZVRvVmVydGljYWxBYnM7CiAgICAgY2FzZSAndic6Ci0gICAgICAgIHBhdGhTZWdU
eXBlID0gUGF0aFNlZ0xpbmVUb1ZlcnRpY2FsUmVsOwotICAgICAgICBicmVhazsKKyAgICAgICAg
cmV0dXJuIFBhdGhTZWdMaW5lVG9WZXJ0aWNhbFJlbDsKICAgICBjYXNlICdTJzoKLSAgICAgICAg
cGF0aFNlZ1R5cGUgPSBQYXRoU2VnQ3VydmVUb0N1YmljU21vb3RoQWJzOwotICAgICAgICBicmVh
azsKKyAgICAgICAgcmV0dXJuIFBhdGhTZWdDdXJ2ZVRvQ3ViaWNTbW9vdGhBYnM7CiAgICAgY2Fz
ZSAncyc6Ci0gICAgICAgIHBhdGhTZWdUeXBlID0gUGF0aFNlZ0N1cnZlVG9DdWJpY1Ntb290aFJl
bDsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBQYXRoU2VnQ3VydmVUb0N1YmljU21v
b3RoUmVsOwogICAgIGNhc2UgJ1QnOgotICAgICAgICBwYXRoU2VnVHlwZSA9IFBhdGhTZWdDdXJ2
ZVRvUXVhZHJhdGljU21vb3RoQWJzOwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIFBh
dGhTZWdDdXJ2ZVRvUXVhZHJhdGljU21vb3RoQWJzOwogICAgIGNhc2UgJ3QnOgotICAgICAgICBw
YXRoU2VnVHlwZSA9IFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljU21vb3RoUmVsOwotICAgICAgICBi
cmVhazsKKyAgICAgICAgcmV0dXJuIFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljU21vb3RoUmVsOwog
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIHBhdGhTZWdUeXBlID0gUGF0aFNlZ1Vua25vd247CisgICAg
ICAgIHJldHVybiBQYXRoU2VnVW5rbm93bjsKICAgICB9Ci0gICAgcmV0dXJuIHRydWU7CiB9CiAK
LWJvb2wgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VTVkdTZWdtZW50VHlwZShTVkdQYXRoU2Vn
VHlwZSYgcGF0aFNlZ1R5cGUpCitPcHRpb25hbDxTVkdQYXRoU2VnVHlwZT4gU1ZHUGF0aFN0cmlu
Z1NvdXJjZTo6cGFyc2VTVkdTZWdtZW50VHlwZSgpCiB7CiAgICAgaWYgKG1faXM4Qml0U291cmNl
KQotICAgICAgICByZXR1cm4gcGFyc2VTVkdTZWdtZW50VHlwZUhlbHBlcihtX2N1cnJlbnQubV9j
aGFyYWN0ZXI4LCBwYXRoU2VnVHlwZSk7Ci0gICAgcmV0dXJuIHBhcnNlU1ZHU2VnbWVudFR5cGVI
ZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYsIHBhdGhTZWdUeXBlKTsKKyAgICAgICAgcmV0
dXJuIHBhcnNlU1ZHU2VnbWVudFR5cGVIZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyOCk7Cisg
ICAgcmV0dXJuIHBhcnNlU1ZHU2VnbWVudFR5cGVIZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVy
MTYpOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBib29s
IG5leHRDb21tYW5kSGVscGVyKGNvbnN0IENoYXJhY3RlclR5cGUqJiBjdXJyZW50LCBTVkdQYXRo
U2VnVHlwZSBwcmV2aW91c0NvbW1hbmQsIFNWR1BhdGhTZWdUeXBlJiBuZXh0Q29tbWFuZCkKK09w
dGlvbmFsPFNWR1BhdGhTb3VyY2U6Ok1vdmVUb1NlZ21lbnQ+IFNWR1BhdGhTdHJpbmdTb3VyY2U6
OnBhcnNlTW92ZVRvU2VnbWVudCgpCiB7Ci0gICAgLy8gQ2hlY2sgZm9yIHJlbWFpbmluZyBjb29y
ZGluYXRlcyBpbiB0aGUgY3VycmVudCBjb21tYW5kLgotICAgIGlmICgoKmN1cnJlbnQgPT0gJysn
IHx8ICpjdXJyZW50ID09ICctJyB8fCAqY3VycmVudCA9PSAnLicgfHwgaXNBU0NJSURpZ2l0KCpj
dXJyZW50KSkKLSAgICAgICAgJiYgcHJldmlvdXNDb21tYW5kICE9IFBhdGhTZWdDbG9zZVBhdGgp
IHsKLSAgICAgICAgaWYgKHByZXZpb3VzQ29tbWFuZCA9PSBQYXRoU2VnTW92ZVRvQWJzKSB7Ci0g
ICAgICAgICAgICBuZXh0Q29tbWFuZCA9IFBhdGhTZWdMaW5lVG9BYnM7Ci0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAocHJldmlvdXNDb21tYW5kID09IFBh
dGhTZWdNb3ZlVG9SZWwpIHsKLSAgICAgICAgICAgIG5leHRDb21tYW5kID0gUGF0aFNlZ0xpbmVU
b1JlbDsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIG5leHRD
b21tYW5kID0gcHJldmlvdXNDb21tYW5kOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Cisg
ICAgYXV0byBoZWxwZXIgPSBbXShjb25zdCBhdXRvKiYgY3VycmVudCwgY29uc3QgYXV0byogZW5k
KSAtPiBPcHRpb25hbDxNb3ZlVG9TZWdtZW50PiB7CisgICAgICAgIGF1dG8gdGFyZ2V0UG9pbnQg
PSBwYXJzZUZsb2F0UG9pbnQoY3VycmVudCwgZW5kKTsKKyAgICAgICAgaWYgKCF0YXJnZXRQb2lu
dCkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIAorICAgICAgICBN
b3ZlVG9TZWdtZW50IHNlZ21lbnQ7CisgICAgICAgIHNlZ21lbnQudGFyZ2V0UG9pbnQgPSBXVEZN
b3ZlKCp0YXJnZXRQb2ludCk7CisgICAgICAgIHJldHVybiBzZWdtZW50OworICAgIH07CiAKLSAg
ICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1faXM4Qml0U291cmNlKQorICAgICAgICByZXR1cm4g
aGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjgsIG1fZW5kLm1fY2hhcmFjdGVyOCk7CisgICAg
cmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXIxNiwgbV9lbmQubV9jaGFyYWN0ZXIx
Nik7CiB9CiAKLVNWR1BhdGhTZWdUeXBlIFNWR1BhdGhTdHJpbmdTb3VyY2U6Om5leHRDb21tYW5k
KFNWR1BhdGhTZWdUeXBlIHByZXZpb3VzQ29tbWFuZCkKK09wdGlvbmFsPFNWR1BhdGhTb3VyY2U6
OkxpbmVUb1NlZ21lbnQ+IFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlTGluZVRvU2VnbWVudCgp
CiB7Ci0gICAgU1ZHUGF0aFNlZ1R5cGUgbmV4dENvbW1hbmQ7Ci0gICAgaWYgKG1faXM4Qml0U291
cmNlKSB7Ci0gICAgICAgIGlmIChuZXh0Q29tbWFuZEhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0
ZXI4LCBwcmV2aW91c0NvbW1hbmQsIG5leHRDb21tYW5kKSkKLSAgICAgICAgICAgIHJldHVybiBu
ZXh0Q29tbWFuZDsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAobmV4dENvbW1hbmRIZWxwZXIo
bV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYsIHByZXZpb3VzQ29tbWFuZCwgbmV4dENvbW1hbmQpKQot
ICAgICAgICAgICAgcmV0dXJuIG5leHRDb21tYW5kOwotICAgIH0KKyAgICBhdXRvIGhlbHBlciA9
IFtdKGNvbnN0IGF1dG8qJiBjdXJyZW50LCBjb25zdCBhdXRvKiBlbmQpIC0+IE9wdGlvbmFsPExp
bmVUb1NlZ21lbnQ+IHsKKyAgICAgICAgYXV0byB0YXJnZXRQb2ludCA9IHBhcnNlRmxvYXRQb2lu
dChjdXJyZW50LCBlbmQpOworICAgICAgICBpZiAoIXRhcmdldFBvaW50KQorICAgICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgCisgICAgICAgIExpbmVUb1NlZ21lbnQgc2Vn
bWVudDsKKyAgICAgICAgc2VnbWVudC50YXJnZXRQb2ludCA9IFdURk1vdmUoKnRhcmdldFBvaW50
KTsKKyAgICAgICAgcmV0dXJuIHNlZ21lbnQ7CisgICAgfTsKIAotICAgIHBhcnNlU1ZHU2VnbWVu
dFR5cGUobmV4dENvbW1hbmQpOwotICAgIHJldHVybiBuZXh0Q29tbWFuZDsKLX0KLQotYm9vbCBT
VkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZU1vdmVUb1NlZ21lbnQoRmxvYXRQb2ludCYgdGFyZ2V0
UG9pbnQpCi17CiAgICAgaWYgKG1faXM4Qml0U291cmNlKQotICAgICAgICByZXR1cm4gcGFyc2VG
bG9hdFBvaW50KG1fY3VycmVudC5tX2NoYXJhY3RlcjgsIG1fZW5kLm1fY2hhcmFjdGVyOCwgdGFy
Z2V0UG9pbnQpOwotICAgIHJldHVybiBwYXJzZUZsb2F0UG9pbnQobV9jdXJyZW50Lm1fY2hhcmFj
dGVyMTYsIG1fZW5kLm1fY2hhcmFjdGVyMTYsIHRhcmdldFBvaW50KTsKKyAgICAgICAgcmV0dXJu
IGhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXI4LCBtX2VuZC5tX2NoYXJhY3RlcjgpOworICAg
IHJldHVybiBoZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYsIG1fZW5kLm1fY2hhcmFjdGVy
MTYpOwogfQogCi1ib29sIFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlTGluZVRvU2VnbWVudChG
bG9hdFBvaW50JiB0YXJnZXRQb2ludCkKK09wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkxpbmVUb0hv
cml6b250YWxTZWdtZW50PiBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUxpbmVUb0hvcml6b250
YWxTZWdtZW50KCkKIHsKLSAgICBpZiAobV9pczhCaXRTb3VyY2UpCi0gICAgICAgIHJldHVybiBw
YXJzZUZsb2F0UG9pbnQobV9jdXJyZW50Lm1fY2hhcmFjdGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4
LCB0YXJnZXRQb2ludCk7Ci0gICAgcmV0dXJuIHBhcnNlRmxvYXRQb2ludChtX2N1cnJlbnQubV9j
aGFyYWN0ZXIxNiwgbV9lbmQubV9jaGFyYWN0ZXIxNiwgdGFyZ2V0UG9pbnQpOwotfQorICAgIGF1
dG8gaGVscGVyID0gW10oY29uc3QgYXV0byomIGN1cnJlbnQsIGNvbnN0IGF1dG8qIGVuZCkgLT4g
T3B0aW9uYWw8TGluZVRvSG9yaXpvbnRhbFNlZ21lbnQ+IHsKKyAgICAgICAgYXV0byB4ID0gcGFy
c2VOdW1iZXIoY3VycmVudCwgZW5kKTsKKyAgICAgICAgaWYgKCF4KQorICAgICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgCisgICAgICAgIExpbmVUb0hvcml6b250YWxTZWdt
ZW50IHNlZ21lbnQ7CisgICAgICAgIHNlZ21lbnQueCA9ICp4OworICAgICAgICByZXR1cm4gc2Vn
bWVudDsKKyAgICB9OwogCi1ib29sIFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlTGluZVRvSG9y
aXpvbnRhbFNlZ21lbnQoZmxvYXQmIHgpCi17CiAgICAgaWYgKG1faXM4Qml0U291cmNlKQotICAg
ICAgICByZXR1cm4gcGFyc2VOdW1iZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyOCwgbV9lbmQubV9j
aGFyYWN0ZXI4LCB4KTsKLSAgICByZXR1cm4gcGFyc2VOdW1iZXIobV9jdXJyZW50Lm1fY2hhcmFj
dGVyMTYsIG1fZW5kLm1fY2hhcmFjdGVyMTYsIHgpOworICAgICAgICByZXR1cm4gaGVscGVyKG1f
Y3VycmVudC5tX2NoYXJhY3RlcjgsIG1fZW5kLm1fY2hhcmFjdGVyOCk7CisgICAgcmV0dXJuIGhl
bHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXIxNiwgbV9lbmQubV9jaGFyYWN0ZXIxNik7CiB9CiAK
LWJvb2wgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnQoZmxv
YXQmIHkpCitPcHRpb25hbDxTVkdQYXRoU291cmNlOjpMaW5lVG9WZXJ0aWNhbFNlZ21lbnQ+IFNW
R1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlTGluZVRvVmVydGljYWxTZWdtZW50KCkKIHsKKyAgICBh
dXRvIGhlbHBlciA9IFtdKGNvbnN0IGF1dG8qJiBjdXJyZW50LCBjb25zdCBhdXRvKiBlbmQpIC0+
IE9wdGlvbmFsPExpbmVUb1ZlcnRpY2FsU2VnbWVudD4geworICAgICAgICBhdXRvIHkgPSBwYXJz
ZU51bWJlcihjdXJyZW50LCBlbmQpOworICAgICAgICBpZiAoIXkpCisgICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OworICAgICAgICAKKyAgICAgICAgTGluZVRvVmVydGljYWxTZWdtZW50
IHNlZ21lbnQ7CisgICAgICAgIHNlZ21lbnQueSA9ICp5OworICAgICAgICByZXR1cm4gc2VnbWVu
dDsKKyAgICB9OworCiAgICAgaWYgKG1faXM4Qml0U291cmNlKQotICAgICAgICByZXR1cm4gcGFy
c2VOdW1iZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4LCB5KTsK
LSAgICByZXR1cm4gcGFyc2VOdW1iZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYsIG1fZW5kLm1f
Y2hhcmFjdGVyMTYsIHkpOworICAgICAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJh
Y3RlcjgsIG1fZW5kLm1fY2hhcmFjdGVyOCk7CisgICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQu
bV9jaGFyYWN0ZXIxNiwgbV9lbmQubV9jaGFyYWN0ZXIxNik7CiB9CiAKLWJvb2wgU1ZHUGF0aFN0
cmluZ1NvdXJjZTo6cGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KEZsb2F0UG9pbnQmIHBvaW50MSwg
RmxvYXRQb2ludCYgcG9pbnQyLCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCkKK09wdGlvbmFsPFNW
R1BhdGhTb3VyY2U6OkN1cnZlVG9DdWJpY1NlZ21lbnQ+IFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBh
cnNlQ3VydmVUb0N1YmljU2VnbWVudCgpCiB7CisgICAgYXV0byBoZWxwZXIgPSBbXShjb25zdCBh
dXRvKiYgY3VycmVudCwgY29uc3QgYXV0byogZW5kKSAtPiBPcHRpb25hbDxDdXJ2ZVRvQ3ViaWNT
ZWdtZW50PiB7CisgICAgICAgIGF1dG8gcG9pbnQxID0gcGFyc2VGbG9hdFBvaW50KGN1cnJlbnQs
IGVuZCk7CisgICAgICAgIGlmICghcG9pbnQxKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKworICAgICAgICBhdXRvIHBvaW50MiA9IHBhcnNlRmxvYXRQb2ludChjdXJyZW50LCBl
bmQpOworICAgICAgICBpZiAoIXBvaW50MikKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CisKKyAgICAgICAgYXV0byB0YXJnZXRQb2ludCA9IHBhcnNlRmxvYXRQb2ludChjdXJyZW50
LCBlbmQpOworICAgICAgICBpZiAoIXRhcmdldFBvaW50KQorICAgICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKworICAgICAgICBDdXJ2ZVRvQ3ViaWNTZWdtZW50IHNlZ21lbnQ7CisgICAg
ICAgIHNlZ21lbnQucG9pbnQxID0gKnBvaW50MTsKKyAgICAgICAgc2VnbWVudC5wb2ludDIgPSAq
cG9pbnQyOworICAgICAgICBzZWdtZW50LnRhcmdldFBvaW50ID0gKnRhcmdldFBvaW50OworICAg
ICAgICByZXR1cm4gc2VnbWVudDsKKyAgICB9OworCiAgICAgaWYgKG1faXM4Qml0U291cmNlKQot
ICAgICAgICByZXR1cm4gcGFyc2VGbG9hdFBvaW50MyhtX2N1cnJlbnQubV9jaGFyYWN0ZXI4LCBt
X2VuZC5tX2NoYXJhY3RlcjgsIHBvaW50MSwgcG9pbnQyLCB0YXJnZXRQb2ludCk7Ci0gICAgcmV0
dXJuIHBhcnNlRmxvYXRQb2ludDMobV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYsIG1fZW5kLm1fY2hh
cmFjdGVyMTYsIHBvaW50MSwgcG9pbnQyLCB0YXJnZXRQb2ludCk7CisgICAgICAgIHJldHVybiBo
ZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4KTsKKyAgICBy
ZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2
KTsKIH0KIAotYm9vbCBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUN1cnZlVG9DdWJpY1Ntb290
aFNlZ21lbnQoRmxvYXRQb2ludCYgcG9pbnQxLCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCkKK09w
dGlvbmFsPFNWR1BhdGhTb3VyY2U6OkN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQ+IFNWR1BhdGhT
dHJpbmdTb3VyY2U6OnBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudCgpCiB7CisgICAgYXV0
byBoZWxwZXIgPSBbXShjb25zdCBhdXRvKiYgY3VycmVudCwgY29uc3QgYXV0byogZW5kKSAtPiBP
cHRpb25hbDxDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50PiB7CisgICAgICAgIGF1dG8gcG9pbnQy
ID0gcGFyc2VGbG9hdFBvaW50KGN1cnJlbnQsIGVuZCk7CisgICAgICAgIGlmICghcG9pbnQyKQor
ICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgICAgICBhdXRvIHRhcmdldFBv
aW50ID0gcGFyc2VGbG9hdFBvaW50KGN1cnJlbnQsIGVuZCk7CisgICAgICAgIGlmICghdGFyZ2V0
UG9pbnQpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgICAgIEN1cnZl
VG9DdWJpY1Ntb290aFNlZ21lbnQgc2VnbWVudDsKKyAgICAgICAgc2VnbWVudC5wb2ludDIgPSAq
cG9pbnQyOworICAgICAgICBzZWdtZW50LnRhcmdldFBvaW50ID0gKnRhcmdldFBvaW50OworICAg
ICAgICByZXR1cm4gc2VnbWVudDsKKyAgICB9OworCiAgICAgaWYgKG1faXM4Qml0U291cmNlKQot
ICAgICAgICByZXR1cm4gcGFyc2VGbG9hdFBvaW50MihtX2N1cnJlbnQubV9jaGFyYWN0ZXI4LCBt
X2VuZC5tX2NoYXJhY3RlcjgsIHBvaW50MSwgdGFyZ2V0UG9pbnQpOwotICAgIHJldHVybiBwYXJz
ZUZsb2F0UG9pbnQyKG1fY3VycmVudC5tX2NoYXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2
LCBwb2ludDEsIHRhcmdldFBvaW50KTsKKyAgICAgICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQu
bV9jaGFyYWN0ZXI4LCBtX2VuZC5tX2NoYXJhY3RlcjgpOworICAgIHJldHVybiBoZWxwZXIobV9j
dXJyZW50Lm1fY2hhcmFjdGVyMTYsIG1fZW5kLm1fY2hhcmFjdGVyMTYpOwogfQogCi1ib29sIFNW
R1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQoRmxvYXRQb2lu
dCYgcG9pbnQyLCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCkKK09wdGlvbmFsPFNWR1BhdGhTb3Vy
Y2U6OkN1cnZlVG9RdWFkcmF0aWNTZWdtZW50PiBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUN1
cnZlVG9RdWFkcmF0aWNTZWdtZW50KCkKIHsKKyAgICBhdXRvIGhlbHBlciA9IFtdKGNvbnN0IGF1
dG8qJiBjdXJyZW50LCBjb25zdCBhdXRvKiBlbmQpIC0+IE9wdGlvbmFsPEN1cnZlVG9RdWFkcmF0
aWNTZWdtZW50PiB7CisgICAgICAgIGF1dG8gcG9pbnQxID0gcGFyc2VGbG9hdFBvaW50KGN1cnJl
bnQsIGVuZCk7CisgICAgICAgIGlmICghcG9pbnQxKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKKworICAgICAgICBhdXRvIHRhcmdldFBvaW50ID0gcGFyc2VGbG9hdFBvaW50KGN1
cnJlbnQsIGVuZCk7CisgICAgICAgIGlmICghdGFyZ2V0UG9pbnQpCisgICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OworCisgICAgICAgIEN1cnZlVG9RdWFkcmF0aWNTZWdtZW50IHNlZ21l
bnQ7CisgICAgICAgIHNlZ21lbnQucG9pbnQxID0gKnBvaW50MTsKKyAgICAgICAgc2VnbWVudC50
YXJnZXRQb2ludCA9ICp0YXJnZXRQb2ludDsKKyAgICAgICAgcmV0dXJuIHNlZ21lbnQ7CisgICAg
fTsKKwogICAgIGlmIChtX2lzOEJpdFNvdXJjZSkKLSAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXRQ
b2ludDIobV9jdXJyZW50Lm1fY2hhcmFjdGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4LCBwb2ludDIs
IHRhcmdldFBvaW50KTsKLSAgICByZXR1cm4gcGFyc2VGbG9hdFBvaW50MihtX2N1cnJlbnQubV9j
aGFyYWN0ZXIxNiwgbV9lbmQubV9jaGFyYWN0ZXIxNiwgcG9pbnQyLCB0YXJnZXRQb2ludCk7Cisg
ICAgICAgIHJldHVybiBoZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyOCwgbV9lbmQubV9jaGFy
YWN0ZXI4KTsKKyAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjE2LCBtX2Vu
ZC5tX2NoYXJhY3RlcjE2KTsKIH0KIAotYm9vbCBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUN1
cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQorT3B0
aW9uYWw8U1ZHUGF0aFNvdXJjZTo6Q3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQ+IFNWR1Bh
dGhTdHJpbmdTb3VyY2U6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQoKQogewor
ICAgIGF1dG8gaGVscGVyID0gW10oY29uc3QgYXV0byomIGN1cnJlbnQsIGNvbnN0IGF1dG8qIGVu
ZCkgLT4gT3B0aW9uYWw8Q3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQ+IHsKKyAgICAgICAg
YXV0byB0YXJnZXRQb2ludCA9IHBhcnNlRmxvYXRQb2ludChjdXJyZW50LCBlbmQpOworICAgICAg
ICBpZiAoIXRhcmdldFBvaW50KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKwor
ICAgICAgICBDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudCBzZWdtZW50OworICAgICAgICBz
ZWdtZW50LnRhcmdldFBvaW50ID0gKnRhcmdldFBvaW50OworICAgICAgICByZXR1cm4gc2VnbWVu
dDsKKyAgICB9OworCiAgICAgaWYgKG1faXM4Qml0U291cmNlKQotICAgICAgICByZXR1cm4gcGFy
c2VGbG9hdFBvaW50KG1fY3VycmVudC5tX2NoYXJhY3RlcjgsIG1fZW5kLm1fY2hhcmFjdGVyOCwg
dGFyZ2V0UG9pbnQpOwotICAgIHJldHVybiBwYXJzZUZsb2F0UG9pbnQobV9jdXJyZW50Lm1fY2hh
cmFjdGVyMTYsIG1fZW5kLm1fY2hhcmFjdGVyMTYsIHRhcmdldFBvaW50KTsKKyAgICAgICAgcmV0
dXJuIGhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXI4LCBtX2VuZC5tX2NoYXJhY3RlcjgpOwor
ICAgIHJldHVybiBoZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYsIG1fZW5kLm1fY2hhcmFj
dGVyMTYpOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBi
b29sIHBhcnNlQXJjVG9TZWdtZW50SGVscGVyKGNvbnN0IENoYXJhY3RlclR5cGUqJiBjdXJyZW50
LCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQsIGZsb2F0JiByeCwgZmxvYXQmIHJ5LCBmbG9hdCYg
YW5nbGUsIGJvb2wmIGxhcmdlQXJjLCBib29sJiBzd2VlcCwgRmxvYXRQb2ludCYgdGFyZ2V0UG9p
bnQpCitPcHRpb25hbDxTVkdQYXRoU291cmNlOjpBcmNUb1NlZ21lbnQ+IFNWR1BhdGhTdHJpbmdT
b3VyY2U6OnBhcnNlQXJjVG9TZWdtZW50KCkKIHsKLSAgICBmbG9hdCB0b1g7Ci0gICAgZmxvYXQg
dG9ZOwotICAgIGlmICghcGFyc2VOdW1iZXIoY3VycmVudCwgZW5kLCByeCkKLSAgICAgICAgfHwg
IXBhcnNlTnVtYmVyKGN1cnJlbnQsIGVuZCwgcnkpCi0gICAgICAgIHx8ICFwYXJzZU51bWJlcihj
dXJyZW50LCBlbmQsIGFuZ2xlKQotICAgICAgICB8fCAhcGFyc2VBcmNGbGFnKGN1cnJlbnQsIGVu
ZCwgbGFyZ2VBcmMpCi0gICAgICAgIHx8ICFwYXJzZUFyY0ZsYWcoY3VycmVudCwgZW5kLCBzd2Vl
cCkKLSAgICAgICAgfHwgIXBhcnNlTnVtYmVyKGN1cnJlbnQsIGVuZCwgdG9YKQotICAgICAgICB8
fCAhcGFyc2VOdW1iZXIoY3VycmVudCwgZW5kLCB0b1kpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgdGFyZ2V0UG9pbnQgPSBGbG9hdFBvaW50KHRvWCwgdG9ZKTsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KKyAgICBhdXRvIGhlbHBlciA9IFtdKGNvbnN0IGF1dG8qJiBjdXJyZW50LCBjb25zdCBh
dXRvKiBlbmQpIC0+IE9wdGlvbmFsPEFyY1RvU2VnbWVudD4KKyAgICB7CisgICAgICAgIGF1dG8g
cnggPSBwYXJzZU51bWJlcihjdXJyZW50LCBlbmQpOworICAgICAgICBpZiAoIXJ4KQorICAgICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgYXV0byByeSA9IHBhcnNlTnVtYmVy
KGN1cnJlbnQsIGVuZCk7CisgICAgICAgIGlmICghcnkpCisgICAgICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OworICAgICAgICBhdXRvIGFuZ2xlID0gcGFyc2VOdW1iZXIoY3VycmVudCwgZW5k
KTsKKyAgICAgICAgaWYgKCFhbmdsZSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CisgICAgICAgIGF1dG8gbGFyZ2VBcmMgPSBwYXJzZUFyY0ZsYWcoY3VycmVudCwgZW5kKTsKKyAg
ICAgICAgaWYgKCFsYXJnZUFyYykKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cisg
ICAgICAgIGF1dG8gc3dlZXAgPSBwYXJzZUFyY0ZsYWcoY3VycmVudCwgZW5kKTsKKyAgICAgICAg
aWYgKCFzd2VlcCkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIGF1
dG8gdGFyZ2V0UG9pbnQgPSBwYXJzZUZsb2F0UG9pbnQoY3VycmVudCwgZW5kKTsKKyAgICAgICAg
aWYgKCF0YXJnZXRQb2ludCkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAg
ICAgICAgQXJjVG9TZWdtZW50IHNlZ21lbnQ7CisgICAgICAgIHNlZ21lbnQucnggPSAqcng7Cisg
ICAgICAgIHNlZ21lbnQucnkgPSAqcnk7CisgICAgICAgIHNlZ21lbnQuYW5nbGUgPSAqYW5nbGU7
CisgICAgICAgIHNlZ21lbnQubGFyZ2VBcmMgPSAqbGFyZ2VBcmM7CisgICAgICAgIHNlZ21lbnQu
c3dlZXAgPSAqc3dlZXA7CisgICAgICAgIHNlZ21lbnQudGFyZ2V0UG9pbnQgPSAqdGFyZ2V0UG9p
bnQ7CisgICAgICAgIHJldHVybiBzZWdtZW50OworICAgIH07CiAKLWJvb2wgU1ZHUGF0aFN0cmlu
Z1NvdXJjZTo6cGFyc2VBcmNUb1NlZ21lbnQoZmxvYXQmIHJ4LCBmbG9hdCYgcnksIGZsb2F0JiBh
bmdsZSwgYm9vbCYgbGFyZ2VBcmMsIGJvb2wmIHN3ZWVwLCBGbG9hdFBvaW50JiB0YXJnZXRQb2lu
dCkKLXsKICAgICBpZiAobV9pczhCaXRTb3VyY2UpCi0gICAgICAgIHJldHVybiBwYXJzZUFyY1Rv
U2VnbWVudEhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXI4LCBtX2VuZC5tX2NoYXJhY3Rlcjgs
IHJ4LCByeSwgYW5nbGUsIGxhcmdlQXJjLCBzd2VlcCwgdGFyZ2V0UG9pbnQpOwotICAgIHJldHVy
biBwYXJzZUFyY1RvU2VnbWVudEhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXIxNiwgbV9lbmQu
bV9jaGFyYWN0ZXIxNiwgcngsIHJ5LCBhbmdsZSwgbGFyZ2VBcmMsIHN3ZWVwLCB0YXJnZXRQb2lu
dCk7CisgICAgICAgIHJldHVybiBoZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyOCwgbV9lbmQu
bV9jaGFyYWN0ZXI4KTsKKyAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjE2
LCBtX2VuZC5tX2NoYXJhY3RlcjE2KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFN0cmluZ1NvdXJjZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU3RyaW5nU291cmNlLmgJKHJldmlzaW9uIDI2MzE3
NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU3RyaW5nU291cmNlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMyLDE4ICszMiwxOCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGJvb2wgaGFz
TW9yZURhdGEoKSBjb25zdCBmaW5hbDsKICAgICBib29sIG1vdmVUb05leHRUb2tlbigpIGZpbmFs
OwotICAgIGJvb2wgcGFyc2VTVkdTZWdtZW50VHlwZShTVkdQYXRoU2VnVHlwZSYpIGZpbmFsOwog
ICAgIFNWR1BhdGhTZWdUeXBlIG5leHRDb21tYW5kKFNWR1BhdGhTZWdUeXBlIHByZXZpb3VzQ29t
bWFuZCkgZmluYWw7CiAKLSAgICBib29sIHBhcnNlTW92ZVRvU2VnbWVudChGbG9hdFBvaW50Jikg
ZmluYWw7Ci0gICAgYm9vbCBwYXJzZUxpbmVUb1NlZ21lbnQoRmxvYXRQb2ludCYpIGZpbmFsOwot
ICAgIGJvb2wgcGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudChmbG9hdCYpIGZpbmFsOwotICAg
IGJvb2wgcGFyc2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnQoZmxvYXQmKSBmaW5hbDsKLSAgICBib29s
IHBhcnNlQ3VydmVUb0N1YmljU2VnbWVudChGbG9hdFBvaW50JiwgRmxvYXRQb2ludCYsIEZsb2F0
UG9pbnQmKSBmaW5hbDsKLSAgICBib29sIHBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudChG
bG9hdFBvaW50JiwgRmxvYXRQb2ludCYpIGZpbmFsOwotICAgIGJvb2wgcGFyc2VDdXJ2ZVRvUXVh
ZHJhdGljU2VnbWVudChGbG9hdFBvaW50JiwgRmxvYXRQb2ludCYpIGZpbmFsOwotICAgIGJvb2wg
cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudChGbG9hdFBvaW50JikgZmluYWw7Ci0g
ICAgYm9vbCBwYXJzZUFyY1RvU2VnbWVudChmbG9hdCYsIGZsb2F0JiwgZmxvYXQmLCBib29sJiwg
Ym9vbCYsIEZsb2F0UG9pbnQmKSBmaW5hbDsKKyAgICBPcHRpb25hbDxTVkdQYXRoU2VnVHlwZT4g
cGFyc2VTVkdTZWdtZW50VHlwZSgpIGZpbmFsOworICAgIE9wdGlvbmFsPE1vdmVUb1NlZ21lbnQ+
IHBhcnNlTW92ZVRvU2VnbWVudCgpIGZpbmFsOworICAgIE9wdGlvbmFsPExpbmVUb1NlZ21lbnQ+
IHBhcnNlTGluZVRvU2VnbWVudCgpIGZpbmFsOworICAgIE9wdGlvbmFsPExpbmVUb0hvcml6b250
YWxTZWdtZW50PiBwYXJzZUxpbmVUb0hvcml6b250YWxTZWdtZW50KCkgZmluYWw7CisgICAgT3B0
aW9uYWw8TGluZVRvVmVydGljYWxTZWdtZW50PiBwYXJzZUxpbmVUb1ZlcnRpY2FsU2VnbWVudCgp
IGZpbmFsOworICAgIE9wdGlvbmFsPEN1cnZlVG9DdWJpY1NlZ21lbnQ+IHBhcnNlQ3VydmVUb0N1
YmljU2VnbWVudCgpIGZpbmFsOworICAgIE9wdGlvbmFsPEN1cnZlVG9DdWJpY1Ntb290aFNlZ21l
bnQ+IHBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudCgpIGZpbmFsOworICAgIE9wdGlvbmFs
PEN1cnZlVG9RdWFkcmF0aWNTZWdtZW50PiBwYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KCkg
ZmluYWw7CisgICAgT3B0aW9uYWw8Q3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQ+IHBhcnNl
Q3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQoKSBmaW5hbDsKKyAgICBPcHRpb25hbDxBcmNU
b1NlZ21lbnQ+IHBhcnNlQXJjVG9TZWdtZW50KCkgZmluYWw7CiAKICAgICBTdHJpbmcgbV9zdHJp
bmc7CiAgICAgYm9vbCBtX2lzOEJpdFNvdXJjZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdQb2ludExpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9pbnRM
aXN0LmgJKHJldmlzaW9uIDI2MzE3NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2ludExp
c3QuaAkod29ya2luZyBjb3B5KQpAQCAtNjMsMTIgKzYzLDEzIEBAIHB1YmxpYzoKICAgICAgICAg
Ym9vbCBkZWxpbVBhcnNlZCA9IGZhbHNlOwogICAgICAgICB3aGlsZSAoY3VyIDwgZW5kKSB7CiAg
ICAgICAgICAgICBkZWxpbVBhcnNlZCA9IGZhbHNlOwotICAgICAgICAgICAgZmxvYXQgeFBvcyA9
IDAuMGY7Ci0gICAgICAgICAgICBpZiAoIXBhcnNlTnVtYmVyKGN1ciwgZW5kLCB4UG9zKSkKKwor
ICAgICAgICAgICAgYXV0byB4UG9zID0gcGFyc2VOdW1iZXIoY3VyLCBlbmQpOworICAgICAgICAg
ICAgaWYgKCF4UG9zKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAg
ICAgZmxvYXQgeVBvcyA9IDAuMGY7Ci0gICAgICAgICAgICBpZiAoIXBhcnNlTnVtYmVyKGN1ciwg
ZW5kLCB5UG9zLCBmYWxzZSkpCisgICAgICAgICAgICBhdXRvIHlQb3MgPSBwYXJzZU51bWJlcihj
dXIsIGVuZCwgU3VmZml4U2tpcHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsKKyAgICAgICAgICAgIGlm
ICgheVBvcykKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgICAgIHNr
aXBPcHRpb25hbFNWR1NwYWNlcyhjdXIsIGVuZCk7CkBAIC03OSw3ICs4MCw3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhjdXIsIGVu
ZCk7CiAKLSAgICAgICAgICAgIGFwcGVuZChTVkdQb2ludDo6Y3JlYXRlKHsgeFBvcywgeVBvcyB9
KSk7CisgICAgICAgICAgICBhcHBlbmQoU1ZHUG9pbnQ6OmNyZWF0ZSh7ICp4UG9zLCAqeVBvcyB9
KSk7CiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gIWRlbGltUGFyc2VkOwpJbmRleDogU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1RvT1RGRm9udENvbnZlcnNpb24uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUb09URkZvbnRDb252ZXJzaW9uLmNwcAkocmV2aXNpb24g
MjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RvT1RGRm9udENvbnZlcnNpb24uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMjksOCArMjI5LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGFk
ZENvZGVwb2ludFJhbmdlcyhjb25zdCBVbmljb2RlUmFuZ2VzJiwgSGFzaFNldDxHbHlwaD4mIGds
eXBoU2V0KSBjb25zdDsKICAgICB2b2lkIGFkZENvZGVwb2ludHMoY29uc3QgSGFzaFNldDxTdHJp
bmc+JiBjb2RlcG9pbnRzLCBIYXNoU2V0PEdseXBoPiYgZ2x5cGhTZXQpIGNvbnN0OwogICAgIHZv
aWQgYWRkR2x5cGhOYW1lcyhjb25zdCBIYXNoU2V0PFN0cmluZz4mIGdseXBoTmFtZXMsIEhhc2hT
ZXQ8R2x5cGg+JiBnbHlwaFNldCkgY29uc3Q7Ci0gICAgdm9pZCBhZGRLZXJuaW5nUGFpcihWZWN0
b3I8S2VybmluZ0RhdGE+JiwgY29uc3QgU1ZHS2VybmluZ1BhaXImKSBjb25zdDsKLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzaXplX3QgYXBwZW5kS0VSTlN1YnRhYmxlKGJvb2wgKFQ6OipidWls
ZEtlcm5pbmdQYWlyKShTVkdLZXJuaW5nUGFpciYpIGNvbnN0LCB1aW50MTZfdCBjb3ZlcmFnZSk7
CisgICAgdm9pZCBhZGRLZXJuaW5nUGFpcihWZWN0b3I8S2VybmluZ0RhdGE+JiwgU1ZHS2Vybmlu
Z1BhaXImJikgY29uc3Q7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc2l6ZV90IGFwcGVuZEtF
Uk5TdWJ0YWJsZShPcHRpb25hbDxTVkdLZXJuaW5nUGFpcj4gKFQ6OipidWlsZEtlcm5pbmdQYWly
KSgpIGNvbnN0LCB1aW50MTZfdCBjb3ZlcmFnZSk7CiAgICAgc2l6ZV90IGZpbmlzaEFwcGVuZGlu
Z0tFUk5TdWJ0YWJsZShWZWN0b3I8S2VybmluZ0RhdGE+LCB1aW50MTZfdCBjb3ZlcmFnZSk7CiAK
ICAgICB2b2lkIGFwcGVuZExpZ2F0dXJlU3VidGFibGUoc2l6ZV90IHN1YnRhYmxlUmVjb3JkTG9j
YXRpb24pOwpAQCAtMTA0MCw3ICsxMDQwLDcgQEAgdm9pZCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6
OmFkZEdseXBoTmFtZQogICAgIH0KIH0KIAotdm9pZCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFk
ZEtlcm5pbmdQYWlyKFZlY3RvcjxLZXJuaW5nRGF0YT4mIGRhdGEsIGNvbnN0IFNWR0tlcm5pbmdQ
YWlyJiBrZXJuaW5nUGFpcikgY29uc3QKK3ZvaWQgU1ZHVG9PVEZGb250Q29udmVydGVyOjphZGRL
ZXJuaW5nUGFpcihWZWN0b3I8S2VybmluZ0RhdGE+JiBkYXRhLCBTVkdLZXJuaW5nUGFpciYmIGtl
cm5pbmdQYWlyKSBjb25zdAogewogICAgIEhhc2hTZXQ8R2x5cGg+IGdseXBoU2V0MTsKICAgICBI
YXNoU2V0PEdseXBoPiBnbHlwaFNldDI7CkBAIC0xMDU5LDEzICsxMDU5LDEyIEBAIHZvaWQgU1ZH
VG9PVEZGb250Q29udmVydGVyOjphZGRLZXJuaW5nUGEKICAgICB9CiB9CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+IGlubGluZSBzaXplX3QgU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRLRVJO
U3VidGFibGUoYm9vbCAoVDo6KmJ1aWxkS2VybmluZ1BhaXIpKFNWR0tlcm5pbmdQYWlyJikgY29u
c3QsIHVpbnQxNl90IGNvdmVyYWdlKQordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHNpemVf
dCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZEtFUk5TdWJ0YWJsZShPcHRpb25hbDxTVkdL
ZXJuaW5nUGFpcj4gKFQ6OipidWlsZEtlcm5pbmdQYWlyKSgpIGNvbnN0LCB1aW50MTZfdCBjb3Zl
cmFnZSkKIHsKICAgICBWZWN0b3I8S2VybmluZ0RhdGE+IGtlcm5pbmdEYXRhOwogICAgIGZvciAo
YXV0byYgZWxlbWVudCA6IGNoaWxkcmVuT2ZUeXBlPFQ+KG1fZm9udEVsZW1lbnQpKSB7Ci0gICAg
ICAgIFNWR0tlcm5pbmdQYWlyIGtlcm5pbmdQYWlyOwotICAgICAgICBpZiAoKGVsZW1lbnQuKmJ1
aWxkS2VybmluZ1BhaXIpKGtlcm5pbmdQYWlyKSkKLSAgICAgICAgICAgIGFkZEtlcm5pbmdQYWly
KGtlcm5pbmdEYXRhLCBrZXJuaW5nUGFpcik7CisgICAgICAgIGlmIChhdXRvIGtlcm5pbmdQYWly
ID0gKGVsZW1lbnQuKmJ1aWxkS2VybmluZ1BhaXIpKCkpCisgICAgICAgICAgICBhZGRLZXJuaW5n
UGFpcihrZXJuaW5nRGF0YSwgV1RGTW92ZSgqa2VybmluZ1BhaXIpKTsKICAgICB9CiAgICAgcmV0
dXJuIGZpbmlzaEFwcGVuZGluZ0tFUk5TdWJ0YWJsZShXVEZNb3ZlKGtlcm5pbmdEYXRhKSwgY292
ZXJhZ2UpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybUxpc3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtTGlzdC5oCShyZXZp
c2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtTGlzdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTQsMTcgKzExNCwxOCBAQCBwcml2YXRlOgogICAgICAgICBib29s
IGRlbGltUGFyc2VkID0gZmFsc2U7CiAgICAgICAgIHdoaWxlIChzdGFydCA8IGVuZCkgewogICAg
ICAgICAgICAgZGVsaW1QYXJzZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIFNWR1RyYW5zZm9ybVZh
bHVlOjpTVkdUcmFuc2Zvcm1UeXBlIHR5cGUgPSBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RSQU5T
Rk9STV9VTktOT1dOOwogICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHN0YXJ0LCBl
bmQpOwotCi0gICAgICAgICAgICBpZiAoIVNWR1RyYW5zZm9ybWFibGU6OnBhcnNlQW5kU2tpcFR5
cGUoc3RhcnQsIGVuZCwgdHlwZSkpCisgICAgICAgICAgICAKKyAgICAgICAgICAgIGF1dG8gdHlw
ZSA9IFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlQW5kU2tpcFR5cGUoc3RhcnQsIGVuZCk7CisgICAg
ICAgICAgICBpZiAoIXR5cGUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
ICAgICAgICBSZWY8U1ZHVHJhbnNmb3JtPiB0cmFuc2Zvcm0gPSBTVkdUcmFuc2Zvcm06OmNyZWF0
ZSh0eXBlKTsKLSAgICAgICAgICAgIGlmICghU1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VUcmFuc2Zv
cm1WYWx1ZSh0eXBlLCBzdGFydCwgZW5kLCB0cmFuc2Zvcm0tPnZhbHVlKCkpKQorICAgICAgICAg
ICAgYXV0byBwYXJzZWRUcmFuc2Zvcm1WYWx1ZSA9IFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJh
bnNmb3JtVmFsdWUoKnR5cGUsIHN0YXJ0LCBlbmQpOworICAgICAgICAgICAgaWYgKCFwYXJzZWRU
cmFuc2Zvcm1WYWx1ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAg
ICAgIGFwcGVuZChXVEZNb3ZlKHRyYW5zZm9ybSkpOworICAgICAgICAgICAgYXBwZW5kKFNWR1Ry
YW5zZm9ybTo6Y3JlYXRlKCpwYXJzZWRUcmFuc2Zvcm1WYWx1ZSkpOworCiAgICAgICAgICAgICBz
a2lwT3B0aW9uYWxTVkdTcGFjZXMoc3RhcnQsIGVuZCk7CiAgICAgICAgICAgICBpZiAoc3RhcnQg
PCBlbmQgJiYgKnN0YXJ0ID09ICcsJykgewogICAgICAgICAgICAgICAgIGRlbGltUGFyc2VkID0g
dHJ1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm1hYmxlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtYWJsZS5jcHAJKHJldmlz
aW9uIDI2MzE3NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm1hYmxlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDMsOCArNDMsMTIgQEAgc3RhdGljIGludCBwYXJzZVRyYW5zZm9y
bVBhcmFtTGlzdChjb25zdAogICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhwdHIsIGVuZCk7CiAK
ICAgICB3aGlsZSAocmVxdWlyZWRQYXJhbXMgPCByZXF1aXJlZCkgewotICAgICAgICBpZiAocHRy
ID49IGVuZCB8fCAhcGFyc2VOdW1iZXIocHRyLCBlbmQsIHZhbHVlc1tyZXF1aXJlZFBhcmFtc10s
IGZhbHNlKSkKKyAgICAgICAgaWYgKHB0ciA+PSBlbmQpCiAgICAgICAgICAgICByZXR1cm4gLTE7
CisgICAgICAgIGF1dG8gcGFyc2VkTnVtYmVyID0gcGFyc2VOdW1iZXIocHRyLCBlbmQsIFN1ZmZp
eFNraXBwaW5nUG9saWN5OjpEb250U2tpcCk7CisgICAgICAgIGlmICghcGFyc2VkTnVtYmVyKQor
ICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB2YWx1ZXNbcmVxdWlyZWRQYXJhbXNdID0g
KnBhcnNlZE51bWJlcjsKICAgICAgICAgcmVxdWlyZWRQYXJhbXMrKzsKICAgICAgICAgaWYgKHJl
cXVpcmVkUGFyYW1zIDwgcmVxdWlyZWQpCiAgICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFj
ZXNPckRlbGltaXRlcihwdHIsIGVuZCk7CkBAIC02Myw4ICs2NywxMiBAQCBzdGF0aWMgaW50IHBh
cnNlVHJhbnNmb3JtUGFyYW1MaXN0KGNvbnN0CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAg
fSBlbHNlIHsKICAgICAgICAgd2hpbGUgKG9wdGlvbmFsUGFyYW1zIDwgb3B0aW9uYWwpIHsKLSAg
ICAgICAgICAgIGlmIChwdHIgPj0gZW5kIHx8ICFwYXJzZU51bWJlcihwdHIsIGVuZCwgdmFsdWVz
W3JlcXVpcmVkUGFyYW1zICsgb3B0aW9uYWxQYXJhbXNdLCBmYWxzZSkpCisgICAgICAgICAgICBp
ZiAocHRyID49IGVuZCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICBh
dXRvIHBhcnNlZE51bWJlciA9IHBhcnNlTnVtYmVyKHB0ciwgZW5kLCBTdWZmaXhTa2lwcGluZ1Bv
bGljeTo6RG9udFNraXApOworICAgICAgICAgICAgaWYgKCFwYXJzZWROdW1iZXIpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgdmFsdWVzW3JlcXVpcmVkUGFyYW1zICsg
b3B0aW9uYWxQYXJhbXNdID0gKnBhcnNlZE51bWJlcjsKICAgICAgICAgICAgIG9wdGlvbmFsUGFy
YW1zKys7CiAgICAgICAgICAgICBpZiAob3B0aW9uYWxQYXJhbXMgPCBvcHRpb25hbCkKICAgICAg
ICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXNPckRlbGltaXRlcihwdHIsIGVuZCk7CkBA
IC05MCwxNiArOTgsMTcgQEAgc3RhdGljIGNvbnN0IGludCBvcHRpb25hbFZhbHVlc0ZvclR5cGVb
XQogLy8gVGhpcyBkZXN0cnVjdG9yIGlzIG5lZWRlZCBpbiBvcmRlciB0byBsaW5rIGNvcnJlY3Rs
eSB3aXRoIEludGVsIElDQy4KIFNWR1RyYW5zZm9ybWFibGU6On5TVkdUcmFuc2Zvcm1hYmxlKCkg
PSBkZWZhdWx0OwogCi1ib29sIFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtVmFsdWUo
U1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGUgdHlwZSwgY29uc3QgVUNoYXIqJiBw
dHIsIGNvbnN0IFVDaGFyKiBlbmQsIFNWR1RyYW5zZm9ybVZhbHVlJiB0cmFuc2Zvcm0pCitPcHRp
b25hbDxTVkdUcmFuc2Zvcm1WYWx1ZT4gU1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VUcmFuc2Zvcm1W
YWx1ZShTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZSB0eXBlLCBjb25zdCBVQ2hh
ciomIHB0ciwgY29uc3QgVUNoYXIqIGVuZCkKIHsKICAgICBpZiAodHlwZSA9PSBTVkdUcmFuc2Zv
cm1WYWx1ZTo6U1ZHX1RSQU5TRk9STV9VTktOT1dOKQotICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBpbnQgdmFsdWVDb3VudCA9IDA7CiAg
ICAgZmxvYXQgdmFsdWVzW10gPSB7MCwgMCwgMCwgMCwgMCwgMH07CiAgICAgaWYgKCh2YWx1ZUNv
dW50ID0gcGFyc2VUcmFuc2Zvcm1QYXJhbUxpc3QocHRyLCBlbmQsIHZhbHVlcywgcmVxdWlyZWRW
YWx1ZXNGb3JUeXBlW3R5cGVdLCBvcHRpb25hbFZhbHVlc0ZvclR5cGVbdHlwZV0pKSA8IDApCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAorICAg
IFNWR1RyYW5zZm9ybVZhbHVlIHRyYW5zZm9ybTsKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICBj
YXNlIFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX1VOS05PV046CiAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTMzLDcgKzE0Miw3IEBAIGJvb2wgU1ZHVHJhbnNmb3Jt
YWJsZTo6cGFyc2VUcmFuc2Zvcm1WYWwKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgcmV0
dXJuIHRydWU7CisgICAgcmV0dXJuIHRyYW5zZm9ybTsKIH0KIAogc3RhdGljIGNvbnN0IFVDaGFy
IHNrZXdYRGVzY1tdID0gIHsncycsICdrJywgJ2UnLCAndycsICdYJ307CkBAIC0xNDMsMzkgKzE1
MiwzNSBAQCBzdGF0aWMgY29uc3QgVUNoYXIgdHJhbnNsYXRlRGVzY1tdID0gIHsnCiBzdGF0aWMg
Y29uc3QgVUNoYXIgcm90YXRlRGVzY1tdID0gIHsncicsICdvJywgJ3QnLCAnYScsICd0JywgJ2Un
fTsKIHN0YXRpYyBjb25zdCBVQ2hhciBtYXRyaXhEZXNjW10gPSAgeydtJywgJ2EnLCAndCcsICdy
JywgJ2knLCAneCd9OwogCi1ib29sIFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlQW5kU2tpcFR5cGUo
Y29uc3QgVUNoYXIqJiBjdXJyVHJhbnNmb3JtLCBjb25zdCBVQ2hhciogZW5kLCBTVkdUcmFuc2Zv
cm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZSYgdHlwZSkKK09wdGlvbmFsPFNWR1RyYW5zZm9ybVZh
bHVlOjpTVkdUcmFuc2Zvcm1UeXBlPiBTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZUFuZFNraXBUeXBl
KGNvbnN0IFVDaGFyKiYgY3VyclRyYW5zZm9ybSwgY29uc3QgVUNoYXIqIGVuZCkKIHsKICAgICBp
ZiAoY3VyclRyYW5zZm9ybSA+PSBlbmQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIGlmICgqY3VyclRyYW5zZm9ybSA9PSAncycpIHsK
ICAgICAgICAgaWYgKHNraXBTdHJpbmcoY3VyclRyYW5zZm9ybSwgZW5kLCBza2V3WERlc2MsIFdU
Rl9BUlJBWV9MRU5HVEgoc2tld1hEZXNjKSkpCi0gICAgICAgICAgICB0eXBlID0gU1ZHVHJhbnNm
b3JtVmFsdWU6OlNWR19UUkFOU0ZPUk1fU0tFV1g7CisgICAgICAgICAgICByZXR1cm4gU1ZHVHJh
bnNmb3JtVmFsdWU6OlNWR19UUkFOU0ZPUk1fU0tFV1g7CiAgICAgICAgIGVsc2UgaWYgKHNraXBT
dHJpbmcoY3VyclRyYW5zZm9ybSwgZW5kLCBza2V3WURlc2MsIFdURl9BUlJBWV9MRU5HVEgoc2tl
d1lEZXNjKSkpCi0gICAgICAgICAgICB0eXBlID0gU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR19UUkFO
U0ZPUk1fU0tFV1k7CisgICAgICAgICAgICByZXR1cm4gU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR19U
UkFOU0ZPUk1fU0tFV1k7CiAgICAgICAgIGVsc2UgaWYgKHNraXBTdHJpbmcoY3VyclRyYW5zZm9y
bSwgZW5kLCBzY2FsZURlc2MsIFdURl9BUlJBWV9MRU5HVEgoc2NhbGVEZXNjKSkpCi0gICAgICAg
ICAgICB0eXBlID0gU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR19UUkFOU0ZPUk1fU0NBTEU7CisgICAg
ICAgICAgICByZXR1cm4gU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR19UUkFOU0ZPUk1fU0NBTEU7CiAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAgICAgfSBlbHNlIGlmIChza2lwU3RyaW5nKGN1cnJUcmFuc2Zvcm0s
IGVuZCwgdHJhbnNsYXRlRGVzYywgV1RGX0FSUkFZX0xFTkdUSCh0cmFuc2xhdGVEZXNjKSkpCi0g
ICAgICAgIHR5cGUgPSBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RSQU5TRk9STV9UUkFOU0xBVEU7
CisgICAgICAgIHJldHVybiBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RSQU5TRk9STV9UUkFOU0xB
VEU7CiAgICAgZWxzZSBpZiAoc2tpcFN0cmluZyhjdXJyVHJhbnNmb3JtLCBlbmQsIHJvdGF0ZURl
c2MsIFdURl9BUlJBWV9MRU5HVEgocm90YXRlRGVzYykpKQotICAgICAgICB0eXBlID0gU1ZHVHJh
bnNmb3JtVmFsdWU6OlNWR19UUkFOU0ZPUk1fUk9UQVRFOworICAgICAgICByZXR1cm4gU1ZHVHJh
bnNmb3JtVmFsdWU6OlNWR19UUkFOU0ZPUk1fUk9UQVRFOwogICAgIGVsc2UgaWYgKHNraXBTdHJp
bmcoY3VyclRyYW5zZm9ybSwgZW5kLCBtYXRyaXhEZXNjLCBXVEZfQVJSQVlfTEVOR1RIKG1hdHJp
eERlc2MpKSkKLSAgICAgICAgdHlwZSA9IFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JN
X01BVFJJWDsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJu
IFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX01BVFJJWDsKIAotICAgIHJldHVybiB0
cnVlOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKIFNWR1RyYW5zZm9ybVZhbHVlOjpT
VkdUcmFuc2Zvcm1UeXBlIFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtVHlwZShjb25z
dCBTdHJpbmcmIHR5cGVTdHJpbmcpCiB7Ci0gICAgU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5z
Zm9ybVR5cGUgdHlwZSA9IFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX1VOS05PV047
CiAgICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KHR5cGVTdHJpbmcp
LnVwY29udmVydGVkQ2hhcmFjdGVycygpOwogICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0g
dXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOwotICAgIHBhcnNlQW5kU2tpcFR5cGUoY2hhcmFjdGVycywg
Y2hhcmFjdGVycyArIHR5cGVTdHJpbmcubGVuZ3RoKCksIHR5cGUpOwotICAgIHJldHVybiB0eXBl
OworICAgIHJldHVybiBwYXJzZUFuZFNraXBUeXBlKGNoYXJhY3RlcnMsIGNoYXJhY3RlcnMgKyB0
eXBlU3RyaW5nLmxlbmd0aCgpKS52YWx1ZU9yKFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNG
T1JNX1VOS05PV04pOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNm
b3JtYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm1h
YmxlLmgJKHJldmlzaW9uIDI2MzE3NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zv
cm1hYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDkgKzMyLDkgQEAgY2xhc3MgU1ZHVHJhbnNm
b3JtYWJsZSA6IHB1YmxpYyBTVkdMb2NhdAogcHVibGljOgogICAgIHZpcnR1YWwgflNWR1RyYW5z
Zm9ybWFibGUoKTsKIAotICAgIHN0YXRpYyBib29sIHBhcnNlVHJhbnNmb3JtVmFsdWUoU1ZHVHJh
bnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGUsIGNvbnN0IFVDaGFyKiYgcHRyLCBjb25zdCBV
Q2hhciogZW5kLCBTVkdUcmFuc2Zvcm1WYWx1ZSYpOworICAgIHN0YXRpYyBPcHRpb25hbDxTVkdU
cmFuc2Zvcm1WYWx1ZT4gcGFyc2VUcmFuc2Zvcm1WYWx1ZShTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZH
VHJhbnNmb3JtVHlwZSwgY29uc3QgVUNoYXIqJiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQpOwogICAg
IHN0YXRpYyBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZSBwYXJzZVRyYW5zZm9y
bVR5cGUoY29uc3QgU3RyaW5nJik7Ci0gICAgc3RhdGljIGJvb2wgcGFyc2VBbmRTa2lwVHlwZShj
b25zdCBVQ2hhciomIGN1cnJUcmFuc2Zvcm0sIGNvbnN0IFVDaGFyKiBlbmQsIFNWR1RyYW5zZm9y
bVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlJik7CisgICAgc3RhdGljIE9wdGlvbmFsPFNWR1RyYW5z
Zm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlPiBwYXJzZUFuZFNraXBUeXBlKGNvbnN0IFVDaGFy
KiYgY3VyclRyYW5zZm9ybSwgY29uc3QgVUNoYXIqIGVuZCk7CiAKICAgICBBZmZpbmVUcmFuc2Zv
cm0gbG9jYWxDb29yZGluYXRlU3BhY2VUcmFuc2Zvcm0oU1ZHTG9jYXRhYmxlOjpDVE1TY29wZSkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgpOyB9CiAgICAg
dmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gYW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgpIGNvbnN0ID0g
MDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdWS2VybkVsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdWS2VybkVsZW1lbnQuY3BwCShyZXZpc2lvbiAy
NjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVktlcm5FbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDMsMjQgKzQzLDQ0IEBAIFJlZjxTVkdWS2VybkVsZW1lbnQ+IFNWR1ZLZXJu
RWxlbWVudDo6Y3IKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTVkdWS2VybkVsZW1lbnQodGFn
TmFtZSwgZG9jdW1lbnQpKTsKIH0KIAotYm9vbCBTVkdWS2VybkVsZW1lbnQ6OmJ1aWxkVmVydGlj
YWxLZXJuaW5nUGFpcihTVkdLZXJuaW5nUGFpciYga2VybmluZ1BhaXIpIGNvbnN0CitPcHRpb25h
bDxTVkdLZXJuaW5nUGFpcj4gU1ZHVktlcm5FbGVtZW50OjpidWlsZFZlcnRpY2FsS2VybmluZ1Bh
aXIoKSBjb25zdAogeworICAgIC8vIEZJWE1FOiBDYW4gdGhpcyBiZSBzaGFyZWQgd2l0aCBTVkdI
S2VybkVsZW1lbnQ6OmJ1aWxkVmVydGljYWxLZXJuaW5nUGFpcj8KKwogICAgIGF1dG8mIHUxID0g
YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihTVkdOYW1lczo6dTFBdHRyKTsKICAgICBh
dXRvJiBnMSA9IGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oU1ZHTmFtZXM6OmcxQXR0
cik7CiAgICAgYXV0byYgdTIgPSBhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFNWR05h
bWVzOjp1MkF0dHIpOwogICAgIGF1dG8mIGcyID0gYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXph
dGlvbihTVkdOYW1lczo6ZzJBdHRyKTsKICAgICBpZiAoKHUxLmlzRW1wdHkoKSAmJiBnMS5pc0Vt
cHR5KCkpIHx8ICh1Mi5pc0VtcHR5KCkgJiYgZzIuaXNFbXB0eSgpKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgYXV0byBnbHlwaE5h
bWUxID0gcGFyc2VHbHlwaE5hbWUoZzEpOworICAgIGlmICghZ2x5cGhOYW1lMSkKKyAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBhdXRvIGdseXBoTmFtZTIgPSBwYXJzZUdseXBoTmFt
ZShnMik7CisgICAgaWYgKCFnbHlwaE5hbWUyKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworICAgIGF1dG8gdW5pY29kZVN0cmluZzEgPSBwYXJzZUtlcm5pbmdVbmljb2RlU3RyaW5nKHUx
KTsKKyAgICBpZiAoIXVuaWNvZGVTdHJpbmcxKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworICAgIGF1dG8gdW5pY29kZVN0cmluZzIgPSBwYXJzZUtlcm5pbmdVbmljb2RlU3RyaW5nKHUy
KTsKKyAgICBpZiAoIXVuaWNvZGVTdHJpbmcyKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworCisgICAgYm9vbCBvayA9IGZhbHNlOworICAgIGF1dG8ga2VybmluZyA9IGF0dHJpYnV0ZVdp
dGhvdXRTeW5jaHJvbml6YXRpb24oU1ZHTmFtZXM6OmtBdHRyKS5zdHJpbmcoKS50b0Zsb2F0KCZv
ayk7CisgICAgaWYgKCFvaykKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGlm
IChwYXJzZUdseXBoTmFtZShnMSwga2VybmluZ1BhaXIuZ2x5cGhOYW1lMSkKLSAgICAgICAgJiYg
cGFyc2VHbHlwaE5hbWUoZzIsIGtlcm5pbmdQYWlyLmdseXBoTmFtZTIpCi0gICAgICAgICYmIHBh
cnNlS2VybmluZ1VuaWNvZGVTdHJpbmcodTEsIGtlcm5pbmdQYWlyLnVuaWNvZGVSYW5nZTEsIGtl
cm5pbmdQYWlyLnVuaWNvZGVOYW1lMSkKLSAgICAgICAgJiYgcGFyc2VLZXJuaW5nVW5pY29kZVN0
cmluZyh1Miwga2VybmluZ1BhaXIudW5pY29kZVJhbmdlMiwga2VybmluZ1BhaXIudW5pY29kZU5h
bWUyKSkgewotICAgICAgICBib29sIG9rID0gZmFsc2U7Ci0gICAgICAgIGtlcm5pbmdQYWlyLmtl
cm5pbmcgPSBhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFNWR05hbWVzOjprQXR0ciku
c3RyaW5nKCkudG9GbG9hdCgmb2spOwotICAgICAgICByZXR1cm4gb2s7Ci0gICAgfQotICAgIHJl
dHVybiBmYWxzZTsKKyAgICBTVkdLZXJuaW5nUGFpciBrZXJuaW5nUGFpcjsKKyAgICBrZXJuaW5n
UGFpci5nbHlwaE5hbWUxID0gV1RGTW92ZSgqZ2x5cGhOYW1lMSk7CisgICAga2VybmluZ1BhaXIu
Z2x5cGhOYW1lMiA9IFdURk1vdmUoKmdseXBoTmFtZTIpOworICAgIGtlcm5pbmdQYWlyLnVuaWNv
ZGVSYW5nZTEgPSBXVEZNb3ZlKHVuaWNvZGVTdHJpbmcxLT5maXJzdCk7CisgICAga2VybmluZ1Bh
aXIudW5pY29kZU5hbWUxID0gV1RGTW92ZSh1bmljb2RlU3RyaW5nMS0+c2Vjb25kKTsKKyAgICBr
ZXJuaW5nUGFpci51bmljb2RlUmFuZ2UyID0gV1RGTW92ZSh1bmljb2RlU3RyaW5nMi0+Zmlyc3Qp
OworICAgIGtlcm5pbmdQYWlyLnVuaWNvZGVOYW1lMiA9IFdURk1vdmUodW5pY29kZVN0cmluZzIt
PnNlY29uZCk7CisgICAga2VybmluZ1BhaXIua2VybmluZyA9IGtlcm5pbmc7CisgICAgcmV0dXJu
IGtlcm5pbmdQYWlyOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVktlcm5F
bGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ZLZXJuRWxlbWVu
dC5oCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVktlcm5FbGVt
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAgY2xhc3MgU1ZHVktlcm5FbGVt
ZW50IGZpbmFsIDogcHVibGljIFNWRwogcHVibGljOgogICAgIHN0YXRpYyBSZWY8U1ZHVktlcm5F
bGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Jik7CiAKLSAgICBi
b29sIGJ1aWxkVmVydGljYWxLZXJuaW5nUGFpcihTVkdLZXJuaW5nUGFpciYga2VybmluZ1BhaXIp
IGNvbnN0OworICAgIE9wdGlvbmFsPFNWR0tlcm5pbmdQYWlyPiBidWlsZFZlcnRpY2FsS2Vybmlu
Z1BhaXIoKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBTVkdWS2VybkVsZW1lbnQoY29uc3QgUXVh
bGlmaWVkTmFtZSYsIERvY3VtZW50Jik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVmll
d1NwZWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdWaWV3U3BlYy5j
cHAJKHJldmlzaW9uIDI2MzE3NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdWaWV3U3BlYy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTg5LDEwICs4OSw3IEBAIGJvb2wgU1ZHVmlld1NwZWM6OnBh
cnNlVmlld1NwZWMoY29uc3QgU3QKICAgICAgICAgICAgICAgICBpZiAoY3VyclZpZXdTcGVjID49
IGVuZCB8fCAqY3VyclZpZXdTcGVjICE9ICcoJykKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICAgICAgICAgIGN1cnJWaWV3U3BlYysrOwotICAgICAgICAgICAgICAg
IEZsb2F0UmVjdCB2aWV3Qm94OwotICAgICAgICAgICAgICAgIGlmICghU1ZHRml0VG9WaWV3Qm94
OjpwYXJzZVZpZXdCb3goY3VyclZpZXdTcGVjLCBlbmQsIHZpZXdCb3gsIGZhbHNlKSkKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIHNldFZpZXdCb3go
dmlld0JveCk7CisgICAgICAgICAgICAgICAgc2V0Vmlld0JveChTVkdGaXRUb1ZpZXdCb3g6OnBh
cnNlVmlld0JveChjdXJyVmlld1NwZWMsIGVuZCwgZmFsc2UpLnZhbHVlKCkpOwogICAgICAgICAg
ICAgICAgIGlmIChjdXJyVmlld1NwZWMgPj0gZW5kIHx8ICpjdXJyVmlld1NwZWMgIT0gJyknKQog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgY3VyclZp
ZXdTcGVjKys7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRp
b25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5o
CShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdB
bmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1
NCwxMCArMjU0LDggQEAgcHVibGljOgogCiAgICAgT3B0aW9uYWw8ZmxvYXQ+IGNhbGN1bGF0ZURp
c3RhbmNlKFNWR0VsZW1lbnQqLCBjb25zdCBTdHJpbmcmIGZyb20sIGNvbnN0IFN0cmluZyYgdG8p
IGNvbnN0IG92ZXJyaWRlCiAgICAgewotICAgICAgICBmbG9hdCBmcm9tTnVtYmVyID0gMDsKLSAg
ICAgICAgZmxvYXQgdG9OdW1iZXIgPSAwOwotICAgICAgICBwYXJzZU51bWJlckZyb21TdHJpbmco
ZnJvbSwgZnJvbU51bWJlcik7Ci0gICAgICAgIHBhcnNlTnVtYmVyRnJvbVN0cmluZyh0bywgdG9O
dW1iZXIpOworICAgICAgICBmbG9hdCBmcm9tTnVtYmVyID0gcGFyc2VOdW1iZXIoZnJvbSkudmFs
dWVPcigwKTsKKyAgICAgICAgZmxvYXQgdG9OdW1iZXIgPSBwYXJzZU51bWJlcih0bykudmFsdWVP
cigwKTsKICAgICAgICAgcmV0dXJuIGZhYnNmKHRvTnVtYmVyIC0gZnJvbU51bWJlcik7CiAgICAg
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdQcm9wZXJ0eVRyYWl0
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR1Byb3Bl
cnR5VHJhaXRzLmgJKHJldmlzaW9uIDI2MzE3NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9w
ZXJ0aWVzL1NWR1Byb3BlcnR5VHJhaXRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTc1LDEwICs3NSwx
MCBAQCBzdHJ1Y3QgU1ZHUHJvcGVydHlUcmFpdHM8c3RkOjpwYWlyPGludCwgCiAgICAgc3RhdGlj
IHN0ZDo6cGFpcjxpbnQsIGludD4gaW5pdGlhbFZhbHVlKCkgeyByZXR1cm4geyB9OyB9CiAgICAg
c3RhdGljIHN0ZDo6cGFpcjxpbnQsIGludD4gZnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmlu
ZykKICAgICB7Ci0gICAgICAgIGZsb2F0IGZpcnN0TnVtYmVyID0gMCwgc2Vjb25kTnVtYmVyID0g
MDsKLSAgICAgICAgaWYgKCFwYXJzZU51bWJlck9wdGlvbmFsTnVtYmVyKHN0cmluZywgZmlyc3RO
dW1iZXIsIHNlY29uZE51bWJlcikpCisgICAgICAgIGF1dG8gcmVzdWx0ID0gcGFyc2VOdW1iZXJP
cHRpb25hbE51bWJlcihzdHJpbmcpOworICAgICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgICAg
IHJldHVybiB7IH07Ci0gICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihzdGF0aWNfY2FzdDxp
bnQ+KHJvdW5kZihmaXJzdE51bWJlcikpLCBzdGF0aWNfY2FzdDxpbnQ+KHJvdW5kZihzZWNvbmRO
dW1iZXIpKSk7CisgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihzdGF0aWNfY2FzdDxpbnQ+
KHJvdW5kZihyZXN1bHQtPmZpcnN0KSksIHN0YXRpY19jYXN0PGludD4ocm91bmRmKHJlc3VsdC0+
c2Vjb25kKSkpOwogICAgIH0KICAgICBzdGF0aWMgT3B0aW9uYWw8c3RkOjpwYWlyPGludCwgaW50
Pj4gcGFyc2UoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IFN0cmluZyYpIHsgQVNTRVJUX05P
VF9SRUFDSEVEKCk7IHJldHVybiBpbml0aWFsVmFsdWUoKTsgfQogICAgIHN0YXRpYyBTdHJpbmcg
dG9TdHJpbmcoc3RkOjpwYWlyPGludCwgaW50PikgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0
dXJuIGVtcHR5U3RyaW5nKCk7IH0KQEAgLTg5LDE3ICs4OSwxMSBAQCBzdHJ1Y3QgU1ZHUHJvcGVy
dHlUcmFpdHM8ZmxvYXQ+IHsKICAgICBzdGF0aWMgZmxvYXQgaW5pdGlhbFZhbHVlKCkgeyByZXR1
cm4gMDsgfQogICAgIHN0YXRpYyBmbG9hdCBmcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5n
KQogICAgIHsKLSAgICAgICAgZmxvYXQgbnVtYmVyID0gMDsKLSAgICAgICAgaWYgKCFwYXJzZU51
bWJlckZyb21TdHJpbmcoc3RyaW5nLCBudW1iZXIpKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgICAgIHJldHVybiBudW1iZXI7CisgICAgICAgIHJldHVybiBwYXJzZU51bWJlcihzdHJpbmcp
LnZhbHVlT3IoMCk7CiAgICAgfQogICAgIHN0YXRpYyBPcHRpb25hbDxmbG9hdD4gcGFyc2UoY29u
c3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQogICAgIHsKLSAgICAgICAg
ZmxvYXQgbnVtYmVyOwotICAgICAgICBpZiAoIXBhcnNlTnVtYmVyRnJvbVN0cmluZyhzdHJpbmcs
IG51bWJlcikpCi0gICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgICAgICByZXR1
cm4gbnVtYmVyOworICAgICAgICByZXR1cm4gcGFyc2VOdW1iZXIoc3RyaW5nKTsKICAgICB9CiAg
ICAgc3RhdGljIFN0cmluZyB0b1N0cmluZyhmbG9hdCB0eXBlKSB7IHJldHVybiBTdHJpbmc6Om51
bWJlcih0eXBlKTsgfQogfTsKQEAgLTEwOSwxMCArMTAzLDcgQEAgc3RydWN0IFNWR1Byb3BlcnR5
VHJhaXRzPHN0ZDo6cGFpcjxmbG9hdAogICAgIHN0YXRpYyBzdGQ6OnBhaXI8ZmxvYXQsIGZsb2F0
PiBpbml0aWFsVmFsdWUoKSB7IHJldHVybiB7IH07IH0KICAgICBzdGF0aWMgc3RkOjpwYWlyPGZs
b2F0LCBmbG9hdD4gZnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKICAgICB7Ci0gICAg
ICAgIGZsb2F0IGZpcnN0TnVtYmVyID0gMCwgc2Vjb25kTnVtYmVyID0gMDsKLSAgICAgICAgaWYg
KCFwYXJzZU51bWJlck9wdGlvbmFsTnVtYmVyKHN0cmluZywgZmlyc3ROdW1iZXIsIHNlY29uZE51
bWJlcikpCi0gICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICByZXR1cm4gc3RkOjptYWtl
X3BhaXIoZmlyc3ROdW1iZXIsIHNlY29uZE51bWJlcik7CisgICAgICAgIHJldHVybiBwYXJzZU51
bWJlck9wdGlvbmFsTnVtYmVyKHN0cmluZykudmFsdWVPcihzdGQ6OnBhaXI8ZmxvYXQsIGZsb2F0
PiB7IH0pOwogICAgIH0KICAgICBzdGF0aWMgT3B0aW9uYWw8c3RkOjpwYWlyPGZsb2F0LCBmbG9h
dD4+IHBhcnNlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBTdHJpbmcmKSB7IEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOyByZXR1cm4gaW5pdGlhbFZhbHVlKCk7IH0KICAgICBzdGF0aWMgU3RyaW5n
IHRvU3RyaW5nKHN0ZDo6cGFpcjxmbG9hdCwgZmxvYXQ+KSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OyByZXR1cm4gZW1wdHlTdHJpbmcoKTsgfQpAQCAtMTIzLDE3ICsxMTQsMTEgQEAgc3RydWN0IFNW
R1Byb3BlcnR5VHJhaXRzPEZsb2F0UG9pbnQ+IHsKICAgICBzdGF0aWMgRmxvYXRQb2ludCBpbml0
aWFsVmFsdWUoKSB7IHJldHVybiBGbG9hdFBvaW50KCk7IH0KICAgICBzdGF0aWMgRmxvYXRQb2lu
dCBmcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKQogICAgIHsKLSAgICAgICAgRmxvYXRQ
b2ludCBwb2ludDsKLSAgICAgICAgaWYgKCFwYXJzZVBvaW50KHN0cmluZywgcG9pbnQpKQotICAg
ICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgcmV0dXJuIHBvaW50OworICAgICAgICByZXR1
cm4gcGFyc2VQb2ludChzdHJpbmcpLnZhbHVlT3IoRmxvYXRQb2ludCB7IH0pOwogICAgIH0KICAg
ICBzdGF0aWMgT3B0aW9uYWw8RmxvYXRQb2ludD4gcGFyc2UoY29uc3QgUXVhbGlmaWVkTmFtZSYs
IGNvbnN0IFN0cmluZyYgc3RyaW5nKQogICAgIHsKLSAgICAgICAgRmxvYXRQb2ludCBwb2ludDsK
LSAgICAgICAgaWYgKCFwYXJzZVBvaW50KHN0cmluZywgcG9pbnQpKQotICAgICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAgcmV0dXJuIHBvaW50OworICAgICAgICByZXR1cm4g
cGFyc2VQb2ludChzdHJpbmcpOwogICAgIH0KICAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nKGNv
bnN0IEZsb2F0UG9pbnQmIHR5cGUpCiAgICAgewpAQCAtMTQ2LDE3ICsxMzEsMTEgQEAgc3RydWN0
IFNWR1Byb3BlcnR5VHJhaXRzPEZsb2F0UmVjdD4gewogICAgIHN0YXRpYyBGbG9hdFJlY3QgaW5p
dGlhbFZhbHVlKCkgeyByZXR1cm4gRmxvYXRSZWN0KCk7IH0KICAgICBzdGF0aWMgRmxvYXRSZWN0
IGZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiAgICAgewotICAgICAgICBGbG9hdFJl
Y3QgcmVjdDsKLSAgICAgICAgaWYgKCFwYXJzZVJlY3Qoc3RyaW5nLCByZWN0KSkKLSAgICAgICAg
ICAgIHJldHVybiB7IH07Ci0gICAgICAgIHJldHVybiByZWN0OworICAgICAgICByZXR1cm4gcGFy
c2VSZWN0KHN0cmluZykudmFsdWVPcihGbG9hdFJlY3QgeyB9KTsKICAgICB9CiAgICAgc3RhdGlj
IE9wdGlvbmFsPEZsb2F0UmVjdD4gcGFyc2UoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IFN0
cmluZyYgc3RyaW5nKQogICAgIHsKLSAgICAgICAgRmxvYXRSZWN0IHJlY3Q7Ci0gICAgICAgIGlm
ICghcGFyc2VSZWN0KHN0cmluZywgcmVjdCkpCi0gICAgICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwotICAgICAgICByZXR1cm4gcmVjdDsKKyAgICAgICAgcmV0dXJuIHBhcnNlUmVjdChzdHJp
bmcpOwogICAgIH0KICAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nKGNvbnN0IEZsb2F0UmVjdCYg
dHlwZSkKICAgICB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>402395</attachid>
            <date>2020-06-20 11:37:21 -0700</date>
            <delta_ts>2020-06-20 17:06:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213416-20200620113720.patch</filename>
            <type>text/plain</type>
            <size>146528</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MzI5NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0NyBAQAorMjAyMC0wNi0xOSAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQ29udmVydCBtdWNoIG9mIHRoZSBT
Vkcgc3RyaW5nIHBhcnNpbmcgY29kZSB0byB1c2UgT3B0aW9uYWwgYmFzZWQgcmV0dXJuIHZhbHVl
cyByYXRoZXIgdGhhbiBvdXQtcGFyYW1ldGVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEzNDE2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlIFNWRyBwYXJzZXJzIHRvIHVzZSBPcHRpb25hbCBz
dHlsZSByZXR1cm4gcHJvZ3JhbW1pbmcgcmF0aGVyIHRoYW4gb3V0IHBhcmFtZXRlcnMuCisgICAg
ICAgIFRvIG1ha2UgdGhpbmdzIGV2ZW4gbmljZXIsIFNWR1BhdGhTb3VyY2UgYmFzZWQgcGFyc2Vy
cyBub3cgaGF2ZSBhIHR5cGUgcGVyLXBhcnNlIGZ1bmN0aW9uLAorICAgICAgICB3aGljaCBtYWtl
cyB3b3JraW5nIHdpdGggdGhlbSBtdWNoIGVhc2llci4gSW4gdGhlIGZ1dHVyZSwgd2Ugc2hvdWxk
IGNvbnNpZGVyIGV4YW5kaW5nIHRoZXNlCisgICAgICAgIG5ldyB0eXBlcyB0byBiZSB1c2VkIGJ5
IFNWR1BhdGhDb25zdW1lciBmYW1pbHkgb2YgY2xhc3NlcyBhcyB3ZWxsLgorCisgICAgICAgICog
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICBBZGQgU1ZHUGF0aFNl
Z1ZhbHVlLmgsIHdoaWNoIHdhcyBtaXNzaW5nIGZyb20gdGhlIFhjb2RlIHByb2plY3QuCisKKyAg
ICAgICAgKiBzdmcvU1ZHQW5nbGVWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUFu
Z2xlVHlwZSk6IAorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5nbGVWYWx1ZTo6c2V0VmFsdWVBc1N0
cmluZyk6CisgICAgICAgIEFkb3B0IHVwZGF0ZWQgcGFyc2VOdW1iZXIoKSBmdW5jdGlvbiwgYW5k
IGRvIGEgZHJpdmUgYnkgcmVtb3ZhbCBvZiBhbiBlYXN5IHRvIHJlbW92ZQorICAgICAgICB1cGNv
bnZlcnRlZENoYXJhY3RlcnMuCisgCisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OjpjYWxj
dWxhdGVUb0F0RW5kT2ZEdXJhdGlvblZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1h
dGVNb3Rpb25FbGVtZW50OjpjYWxjdWxhdGVGcm9tQW5kVG9WYWx1ZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OmNhbGN1bGF0ZUZyb21BbmRCeVZhbHVlcyk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6Y2FsY3VsYXRlRGlz
dGFuY2UpOgorICAgICAgICBOb3cgdXNlcyBuZXcgcGFyc2VQb2ludCgpIGZ1bmN0aW9uLiBVc2lu
ZyBPcHRpb25hbC52YWx1ZU9yKCkgd2hlcmUKKyAgICAgICAgdGhlIG9sZCBjb2RlIHdvdWxkIGhh
dmUgaGFkIHBhcnNlUG9pbnQoKSBkb2luZyB0aGUgY2xlYXJpbmcuCisgICAgCisgICAgICAgICog
c3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VLZXlT
cGxpbmVzKToKKyAgICAgICAgTm93IHJldHVybnMgYW4gT3B0aW9uYWw8VmVjdG9yPFVuaXRCZXpp
ZXI+Pi4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OnBhcnNlQXR0cmli
dXRlKToKKyAgICAgICAgTm93IHVzZXMgbmV3IHBhcnNlS2V5U3BsaW5lcywgYW5kIGRvZXMgYW4g
ZXhwbGljaXQgY2xlYXIgb24gcGFyc2UgZmFpbHVyZSAob2xkIGNvZGUgCisgICAgICAgIGRpZCBp
dCBpbXBsaWNpdGx5IGluIHRoZSBwYXJzZSBmdW5jdGlvbikuCisKKyAgICAgICAgKiBzdmcvU1ZH
RkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb252
b2x2ZU1hdHJpeEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKiBzdmcvU1ZHRkVE
aWZmdXNlTGlnaHRpbmdFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFRGlmZnVz
ZUxpZ2h0aW5nRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAgICAgICAqIHN2Zy9TVkdGRURy
b3BTaGFkb3dFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFRHJvcFNoYWRvd0Vs
ZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKiBzdmcvU1ZHRkVHYXVzc2lhbkJsdXJF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6
cGFyc2VBdHRyaWJ1dGUpOgorICAgICAgICAqIHN2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6OnBhcnNlQXR0cmli
dXRlKToKKyAgICAgICAgKiBzdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpwYXJzZUF0dHJp
YnV0ZSk6CisgICAgICAgICogc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAg
ICAgICBBZG9wdCBPcHRpb25hbCBiYXNlZCBwYXJzZU51bWJlck9wdGlvbmFsTnVtYmVyLgorCisg
ICAgICAgICogc3ZnL1NWR0ltYWdlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdJ
bWFnZUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKiBzdmcvU1ZHRkVJbWFnZUVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVJbWFnZUVsZW1lbnQ6OnBhcnNlQXR0
cmlidXRlKToKKyAgICAgICAgU2ltcGxpZnkgYnkgdXNpbmcgdGhlIFNWR1ByZXNlcnZlQXNwZWN0
UmF0aW9WYWx1ZSBjb25zdHJ1Y3RvcgorICAgICAgICB3aGljaCBjYWxscyBwYXJzZS4gTm8gbmVl
ZCBmb3IgdGhyZWUgbGluZXMuCisKKyAgICAgICAgKiBzdmcvU1ZHRml0VG9WaWV3Qm94LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpdFRvVmlld0JveDo6cGFyc2VBdHRyaWJ1dGUpOgorICAg
ICAgICBBZG9wdCBuZXcgT3B0aW9uYWwgYmFzZWQgcGFyc2VWaWV3Qm94LgorICAgICAgICBTaW1w
bGlmeSBieSB1c2luZyB0aGUgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlIGNvbnN0cnVjdG9y
CisgICAgICAgIHdoaWNoIGNhbGxzIHBhcnNlLiBObyBuZWVkIGZvciB0aHJlZSBsaW5lcy4KKwor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRml0VG9WaWV3Qm94OjpwYXJzZVZpZXdCb3gpOgorICAgICAg
ICBDb252ZXJ0IHRvIGJlIE9wdGlvbmFsIGJhc2VkLCBhbmQgYWRvcHQgbmV3IHBhcnNlTnVtYmVy
IGZ1bmN0aW9ucy4KKworICAgICAgICAqIHN2Zy9TVkdGaXRUb1ZpZXdCb3guaDoKKyAgICAgICAg
VXBkYXRlZCBzaWduYXR1cmVzIGZvciBuZXcgT3B0aW9uYWwgYmFzZWQgZnVuY3Rpb25zLgorCisg
ICAgICAgICogc3ZnL1NWR0dseXBoUmVmRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpw
YXJzZUZsb2F0KToKKyAgICAgICAgQWRvcHQgT3B0aW9uYWwgYmFzZWQgcGFyc2VOdW1iZXIuCisg
ICAgICAgIAorICAgICAgICAqIHN2Zy9TVkdIS2VybkVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHSEtlcm5FbGVtZW50OjpidWlsZEhvcml6b250YWxLZXJuaW5nUGFpciBjb25zdCk6
CisgICAgICAgICogc3ZnL1NWR0hLZXJuRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdWS2Vy
bkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVktlcm5FbGVtZW50OjpidWlsZFZl
cnRpY2FsS2VybmluZ1BhaXIgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdWS2VybkVsZW1lbnQu
aDoKKyAgICAgICAgQ29udmVydCB0byBiZSBPcHRpb25hbCBiYXNlZC4gVXBkYXRlIGEgZmV3IGNh
bGxlcnMgdG8gdXNlIG1ha2VTdHJpbmcuCisKKyAgICAgICAgKiBzdmcvU1ZHVG9PVEZGb250Q29u
dmVyc2lvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFk
ZEtlcm5pbmdQYWlyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RvT1RGRm9udENvbnZl
cnRlcjo6YXBwZW5kS0VSTlN1YnRhYmxlKToKKyAgICAgICAgQWRvcHQgbmV3IE9wdGlvbmFsIGJh
c2VkIGtlcm5pbmcgcGFpciBidWlsZGVycy4gQWRkIHNvbWUgbW92ZXMKKyAgICAgICAgdG8gYXZv
aWQgc29tZSBjb3BpZXMuCisKKyAgICAgICAgKiBzdmcvU1ZHTGVuZ3RoVmFsdWUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHTGVuZ3RoVmFsdWU6OnNldFZhbHVlQXNTdHJpbmcpOgorICAgICAg
ICBBZG9wdCBPcHRpb25hbCBiYXNlZCBwYXJzZU51bWJlci4KKworICAgICAgICAqIHN2Zy9TVkdO
dW1iZXJMaXN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdOdW1iZXJMaXN0OjpwYXJzZSk6Cisg
ICAgICAgIEFkb3B0IE9wdGlvbmFsIGJhc2VkIHBhcnNlTnVtYmVyLgorCisgICAgICAgICogc3Zn
L1NWR1BhcnNlclV0aWxpdGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZW5lcmljUGFyc2VO
dW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VOdW1iZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6Z2VuZXJpY1BhcnNlQXJjRmxhZyk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUFyY0ZsYWcp
OgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VOdW1iZXJPcHRpb25hbE51bWJlcik6CisgICAgICAg
IChXZWJDb3JlOjpwYXJzZVBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlUmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpwYXJzZUdseXBoTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpwYXJz
ZVVuaWNvZGVSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUtlcm5pbmdVbmljb2RlU3Ry
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OmdlbmVyaWNQYXJzZUZsb2F0UG9pbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6cGFyc2VGbG9hdFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlU1ZH
TnVtYmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlTnVtYmVyRnJvbVN0cmlu
Zyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpwYXJzZURlbGltaXRlZFN0cmluZyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpwYXJzZUZsb2F0UG9pbnQyKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OnBhcnNlRmxvYXRQb2ludDMpOiBEZWxldGVkLgorICAgICAgICAqIHN2
Zy9TVkdQYXJzZXJVdGlsaXRpZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OmlzU1ZHU3BhY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6c2tpcE9wdGlvbmFsU1ZHU3BhY2VzKToKKyAgICAgICAgKFdlYkNv
cmU6OnNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVsaW1pdGVyKToKKyAgICAgICAgLSBDb252ZXJ0
cyBwYXJzZSogZnVuY3Rpb25zIHRvIHJldHVybiBPcHRpb25hbCB2YWx1ZXMgcmF0aGVyIHRoYW4g
dXNpbmcgb3V0cGFyYW1ldGVycy4KKyAgICAgICAgLSBSZW1vdmVzIHVudXNlZCBwYXJzZVNWR051
bWJlciBhbmQgcGFyc2VEZWxpbWl0ZWRTdHJpbmcuCisgICAgICAgIC0gUmVtb3ZlcyBwYXJzZUZs
b2F0UG9pbnQyIGFuZCBwYXJzZUZsb2F0UG9pbnQzLiBUaGV5IHdlcmVuJ3QgdXNlZnVsIGVub3Vn
aCB0byBrZWVwIGFyb3VuZC4KKyAgICAgICAgLSBSZW5hbWVzIHBhcnNlTnVtYmVyRnJvbVN0cmlu
ZyB0byBwYXJzZU51bWJlci4gVGhlIGFyZ3VtZW50IGlzIGEgU3RyaW5nLCBpdCdzIGNsZWFyIGVu
b3VnaC4KKyAgICAgICAgLSBSZXBsYWNlIGJvb2xlYW4gc2tpcCBwYXJhbWV0ZXJzIHdpdGggbmV3
IGVudW0gU3VmZml4U2tpcHBpbmdQb2xpY3kuCisgICAgICAgIC0gTWFrZSBwYXJzZUZsb2F0UG9p
bnQgaGF2ZSB0d28gb3ZlcmxvYWRzIHJhdGhlciB0aGFuIGJlaW5nIHRlbXBsYXRpemVkIHRvIGJl
IGNvbnNpc3RlbnQuCisKKworICAgICAgICAqIHN2Zy9TVkdQYXRoQmxlbmRlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpwdWxsRnJvbVNvdXJjZXMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0
aEJsZW5kZXI6OmJsZW5kTW92ZVRvU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRo
QmxlbmRlcjo6YmxlbmRMaW5lVG9TZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhC
bGVuZGVyOjpibGVuZExpbmVUb0hvcml6b250YWxTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1BhdGhCbGVuZGVyOjpibGVuZExpbmVUb1ZlcnRpY2FsU2VnbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdQYXRoQmxlbmRlcjo6YmxlbmRDdXJ2ZVRvQ3ViaWNTZWdtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1BhdGhCbGVuZGVyOjpibGVuZEN1cnZlVG9DdWJpY1Ntb290aFNlZ21l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJsZW5kZXI6OmJsZW5kQ3VydmVUb1F1YWRy
YXRpY1NlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJsZW5kZXI6OmJsZW5kQ3Vy
dmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJs
ZW5kZXI6OmJsZW5kQXJjVG9TZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCbGVu
ZGVyOjpjYW5CbGVuZFBhdGhzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCbGVuZGVyOjpi
bGVuZEFuaW1hdGVkUGF0aCk6CisgICAgICAgIFVwZGF0ZSB0byBhZG9wdCBuZXcgU1ZHUGF0aFNv
dXJjZSBpbnRlcmZhY2UuIEFkZGVkIHB1bGxGcm9tU291cmNlcyBoZWxwZXIKKyAgICAgICAgd2hp
Y2ggc3Vic3RhbnRpYWxseSBzaW1wbGlmaWVzIHB1bGxpbmcgZnJvbSBib3RoIHRoZSBmcm9tIGFu
ZCB0byBzb3VyY2UgYXQKKyAgICAgICAgdGhlIHNhbWUgdGltZSBhbmQgaXMgbm93IHBvc3NpYmxl
IGR1ZSB0byBhbGwgdGhlIFNWR1BhdGhTb3VyY2UgZnVuY3Rpb25zCisgICAgICAgIHJldHVybmlu
ZyB0aGUgc2VnbWVudCB0eXBlcyByYXRoZXIgdGhhbiB0YWtpbmcgdGhlbSBhcyBvdXQgcGFyYW1l
dGVycy4KKworICAgICAgICAqIHN2Zy9TVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6bmV4dENvbW1hbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlU1ZHU2VnbWVudFR5
cGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlTW92
ZVRvU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6
cGFyc2VMaW5lVG9TZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFt
U291cmNlOjpwYXJzZUxpbmVUb0hvcml6b250YWxTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZUxpbmVUb1ZlcnRpY2FsU2VnbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VDdXJ2ZVRvQ3Vi
aWNTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpw
YXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0
aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlQ3VydmVUb1F1YWRyYXRp
Y1Ntb290aFNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW1Tb3Vy
Y2U6OnBhcnNlQXJjVG9TZWdtZW50KToKKyAgICAgICAgKiBzdmcvU1ZHUGF0aEJ5dGVTdHJlYW1T
b3VyY2UuaDoKKyAgICAgICAgQWRvcHQgbmV3IFNWR1BhdGhTb3VyY2UgaW50ZXJmYWNlLgorCisg
ICAgICAgICogc3ZnL1NWR1BhdGhQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0
aFBhcnNlcjo6cGFyc2VNb3ZlVG9TZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhQ
YXJzZXI6OnBhcnNlTGluZVRvU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoUGFy
c2VyOjpwYXJzZUxpbmVUb0hvcml6b250YWxTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1BhdGhQYXJzZXI6OnBhcnNlTGluZVRvVmVydGljYWxTZWdtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1BhdGhQYXJzZXI6OnBhcnNlQ3VydmVUb0N1YmljU2VnbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdQYXRoUGFyc2VyOjpwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFBhcnNlcjo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2Vn
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoUGFyc2VyOjpwYXJzZUN1cnZlVG9RdWFk
cmF0aWNTbW9vdGhTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhQYXJzZXI6OnBh
cnNlQXJjVG9TZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhQYXJzZXI6OnBhcnNl
UGF0aERhdGEpOgorICAgICAgICBBZGFwdCB0byBuZXcgU1ZHUGF0aFNvdXJjZSBpbnRlcmZhY2Uu
IENvZGUgcmVhZHMgYSBiaXQgbmljZXIgbm93CisgICAgICAgIHRoYXQgd2UgZG9uJ3QgaGF2ZSBh
IHRvbiBvZiBsb2NhbCB2YXJpYWJsZXMgaW4gZWFjaCBtZXRob2QuIENvdWxkCisgICAgICAgIGJl
IG1hZGUgbmljZXIgaW4gdGhlIGZ1dHVyZSBieSBhZG9wdGluZyBTZWdtZW50IHR5cGVzIGluIHRo
ZSBwYXRoCisgICAgICAgIGNvbnN1bWVyIGNvZGUuCisKKyAgICAgICAgKiBzdmcvU1ZHUGF0aFNl
Z0xpc3RTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0xpc3RTb3VyY2U6
Om5leHRDb21tYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdMaXN0U291cmNlOjpw
YXJzZVNWR1NlZ21lbnRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdMaXN0U291
cmNlOjpwYXJzZU1vdmVUb1NlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0xp
c3RTb3VyY2U6OnBhcnNlTGluZVRvU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRo
U2VnTGlzdFNvdXJjZTo6cGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNlQ3VydmVUb0N1
YmljU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFy
c2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhT
ZWdMaXN0U291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhT
ZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUFy
Y1RvU2VnbWVudCk6CisgICAgICAgICogc3ZnL1NWR1BhdGhTZWdMaXN0U291cmNlLmg6CisgICAg
ICAgIEFkb3B0IG5ldyBTVkdQYXRoU291cmNlIGludGVyZmFjZS4KKworICAgICAgICAqIHN2Zy9T
VkdQYXRoU291cmNlLmg6CisgICAgICAgIFVwZGF0ZSBpbnRlcmZhY2UgdG8gcmV0dXJuIE9wdGlv
bmFscywgd2l0aCBhIHNwZWNpZmljIHR5cGUgZm9yCisgICAgICAgIHNlZ21lbnQga2luZCB0aGF0
IGJlIHBhcnNlZC4KKworICAgICAgICAqIHN2Zy9TVkdQYXRoU3RyaW5nU291cmNlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Om5leHRDb21tYW5kSGVscGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1BhdGhTdHJpbmdTb3VyY2U6Om5leHRDb21tYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNl
U1ZHU2VnbWVudFR5cGVIZWxwZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFN0cmluZ1Nv
dXJjZTo6cGFyc2VTVkdTZWdtZW50VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU3Ry
aW5nU291cmNlOjpwYXJzZU1vdmVUb1NlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0
aFN0cmluZ1NvdXJjZTo6cGFyc2VMaW5lVG9TZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VMaW5lVG9WZXJ0aWNhbFNlZ21l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VDdXJ2ZVRv
Q3ViaWNTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTdHJpbmdTb3VyY2U6OnBh
cnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRo
U3RyaW5nU291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNl
Z21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VBcmNU
b1NlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VBcmNUb1NlZ21lbnRIZWxwZXIpOiBE
ZWxldGVkLgorICAgICAgICAqIHN2Zy9TVkdQYXRoU3RyaW5nU291cmNlLmg6CisgICAgICAgIEFk
b3B0IG5ldyBTVkdQYXRoU291cmNlIGludGVyZmFjZS4gUmVwbGFjZSBvdXQgb2YgbGluZSBoZWxw
ZXJzIChvciB1c2Ugb2YgdGhpbmdzCisgICAgICAgIGxpa2UgcGFyc2VGbG9hdFBvaW50Mikgd2l0
aCBnZW5lcmljIGxhbWJkYSBoZWxwZXJzLCBoZWxwaW5nIHRvIGtlZXAgdGhlIGNvZGUgbW9yZQor
ICAgICAgICBsb2NhbGl6ZWQuCisgICAgCisgICAgICAgICogc3ZnL1NWR1BvaW50TGlzdC5oOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHUG9pbnRMaXN0OjpwYXJzZSk6CisgICAgICAgIEFkb3B0IE9w
dGlvbmFsIGJhc2VkIHBhcnNlTnVtYmVyLgorCisgICAgICAgICogc3ZnL1NWR1RyYW5zZm9ybUxp
c3QuaDoKKyAgICAgICAgKiBzdmcvU1ZHVHJhbnNmb3JtYWJsZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpwYXJzZVRyYW5zZm9ybVBhcmFtTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUcmFu
c2Zvcm1hYmxlOjpwYXJzZVRyYW5zZm9ybVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Ry
YW5zZm9ybWFibGU6OnBhcnNlQW5kU2tpcFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVHJh
bnNmb3JtYWJsZTo6cGFyc2VUcmFuc2Zvcm1UeXBlKToKKyAgICAgICAgKiBzdmcvU1ZHVHJhbnNm
b3JtYWJsZS5oOgorICAgICAgICBDb252ZXJ0IHBhcnNlVHJhbnNmb3JtVmFsdWUvcGFyc2VBbmRT
a2lwVHlwZSB0byBiZSBPcHRpb25hbCBiYXNlZC4KKworICAgICAgICAqIHN2Zy9TVkdWaWV3U3Bl
Yy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdWaWV3U3BlYzo6cGFyc2VWaWV3U3BlYyk6Cisg
ICAgICAgIEFkb3B0IE9wdGlvbmFsIGJhc2VkIHBhcnNlVmlld0JveC4KKworICAgICAgICAqIHN2
Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbkltcGwuaDoKKyAg
ICAgICAgQWRvcHQgT3B0aW9uYWwgYmFzZWQgcGFyc2VOdW1iZXIuCisKKyAgICAgICAgKiBzdmcv
cHJvcGVydGllcy9TVkdQcm9wZXJ0eVRyYWl0cy5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJv
cGVydHlUcmFpdHM8ZmxvYXQ+Ojpmcm9tU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1By
b3BlcnR5VHJhaXRzPGZsb2F0Pjo6cGFyc2UpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVy
dHlUcmFpdHM8RmxvYXRQb2ludD46OmZyb21TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
UHJvcGVydHlUcmFpdHM8RmxvYXRQb2ludD46OnBhcnNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1Byb3BlcnR5VHJhaXRzPEZsb2F0UmVjdD46OmZyb21TdHJpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHUHJvcGVydHlUcmFpdHM8RmxvYXRSZWN0Pjo6cGFyc2UpOgorICAgICAgICBBZG9wdCBP
cHRpb25hbCBiYXNlZCBwYXJzZXJzLgorCiAyMDIwLTA2LTE5ICBDaHJpcyBEdW1leiAgPGNkdW1l
ekBhcHBsZS5jb20+CiAKICAgICAgICAgQXZvaWQgaW5pdGlhbGl6aW5nIFJlbmRlclRoZW1lIHNp
bmdsZXRvbiB1bm5lY2Vzc2FyaWx5IGluIHRoZSBVSVByb2Nlc3MKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI2
MzE3NikKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtMTAwODMsNiArMTAwODMsNyBAQAogCQk3QzgzREU4NTFEMDRD
QkQ0MDBGRUJDRjMgLyogU3ByaW5nU29sdmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNwcmluZ1NvbHZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Qzg1
QjIwMTIyRkIwNDg1MDAzMDY4NEYgLyogV0hMU0xVbm5hbWVkVHlwZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBXSExTTFVubmFtZWRUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJN0M4NUIyMDQyMkZCMDYzMjAwMzA2ODRGIC8qIFdITFNMVW5uYW1lZFR5cGVIYXNoLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdITFNMVW5uYW1lZFR5cGVIYXNoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTdDODgyNEM0MjQ5RDdCMDUwMEVEOEZDNCAvKiBTVkdQYXRoU2VnVmFsdWUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHUGF0aFNlZ1ZhbHVlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDOEUzNDkyMUU0QTMzOEUwMDU0Q0UyMyAvKiBKU0RP
TUNvbnZlcnRBbnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNET01Db252
ZXJ0QW55Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDOEUzNDkzMUU0QTMzOEUw
MDU0Q0UyMyAvKiBKU0RPTUNvbnZlcnRCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEpTRE9NQ29udmVydEJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
N0M4RTM0OTQxRTRBMzM4RTAwNTRDRTIzIC8qIEpTRE9NQ29udmVydEJvb2xlYW4uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNET01Db252ZXJ0Qm9vbGVhbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjUxODYsNiArMjUxODcsNyBAQAogCQkJCTg0QjZCOTc2
MTIwRjEzRTUwMEI4RUZBRiAvKiBTVkdQYXRoU2VnTGlzdFNvdXJjZS5oICovLAogCQkJCUIyMjI3
OEVGMEQwMEJGMjEwMDcxQjc4MiAvKiBTVkdQYXRoU2VnTW92ZXRvQWJzLmlkbCAqLywKIAkJCQlC
MjIyNzhGMDBEMDBCRjIxMDA3MUI3ODIgLyogU1ZHUGF0aFNlZ01vdmV0b1JlbC5pZGwgKi8sCisJ
CQkJN0M4ODI0QzQyNDlEN0IwNTAwRUQ4RkM0IC8qIFNWR1BhdGhTZWdWYWx1ZS5oICovLAogCQkJ
CTg0MzAwQkQ3MTIwQzlBRDQwMDIxOTU0QSAvKiBTVkdQYXRoU291cmNlLmggKi8sCiAJCQkJODQx
OUQyQjcxMjBFMEM3NjAwMTQxRjhGIC8qIFNWR1BhdGhTdHJpbmdCdWlsZGVyLmNwcCAqLywKIAkJ
CQk4NDE5RDJCODEyMEUwQzc2MDAxNDFGOEYgLyogU1ZHUGF0aFN0cmluZ0J1aWxkZXIuaCAqLywK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmdsZVZhbHVlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5nbGVWYWx1ZS5jcHAJKHJldmlzaW9uIDI2MzE3NikK
KysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmdsZVZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODAsNyArODAsNyBAQCBTdHJpbmcgU1ZHQW5nbGVWYWx1ZTo6dmFsdWVBc1N0cmluZygpIGNv
CiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCi1zdGF0aWMgaW5saW5lIFNWR0FuZ2xlVmFsdWU6
OlR5cGUgcGFyc2VBbmdsZVR5cGUoY29uc3QgVUNoYXIqIHB0ciwgY29uc3QgVUNoYXIqIGVuZCkK
K3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBpbmxpbmUgU1ZHQW5nbGVW
YWx1ZTo6VHlwZSBwYXJzZUFuZ2xlVHlwZShjb25zdCBDaGFyYWN0ZXJUeXBlKiBwdHIsIGNvbnN0
IENoYXJhY3RlclR5cGUqIGVuZCkKIHsKICAgICBzd2l0Y2ggKGVuZCAtIHB0cikgewogICAgIGNh
c2UgMDoKQEAgLTEwNiwyMSArMTA2LDI5IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFNWR0FuZ2xlVmFs
dWU6OnNldFZhbHUKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKLSAgICBhdXRvIHVwY29u
dmVydGVkQ2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcodmFsdWUpLnVwY29udmVydGVkQ2hhcmFjdGVy
cygpOwotICAgIGNvbnN0IFVDaGFyKiBwdHIgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7Ci0gICAg
Y29uc3QgVUNoYXIqIGVuZCA9IHB0ciArIHZhbHVlLmxlbmd0aCgpOwotCi0gICAgZmxvYXQgdmFs
dWVJblNwZWNpZmllZFVuaXRzID0gMDsKLSAgICBpZiAoIXBhcnNlTnVtYmVyKHB0ciwgZW5kLCB2
YWx1ZUluU3BlY2lmaWVkVW5pdHMsIGZhbHNlKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IFN5bnRheEVycm9yIH07Ci0KLSAgICBhdXRvIHVuaXRUeXBlID0gcGFyc2VBbmdsZVR5cGUocHRy
LCBlbmQpOwotICAgIGlmICh1bml0VHlwZSA9PSBTVkdfQU5HTEVUWVBFX1VOS05PV04pCi0gICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9OworICAgIGF1dG8gaGVscGVyID0g
WyZdKGNvbnN0IGF1dG8qIHB0ciwgY29uc3QgYXV0byogZW5kKSAtPiBFeGNlcHRpb25Pcjx2b2lk
PiB7CisgICAgICAgIGF1dG8gdmFsdWVJblNwZWNpZmllZFVuaXRzID0gcGFyc2VOdW1iZXIocHRy
LCBlbmQsIFN1ZmZpeFNraXBwaW5nUG9saWN5OjpEb250U2tpcCk7CisgICAgICAgIGlmICghdmFs
dWVJblNwZWNpZmllZFVuaXRzKQorICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRh
eEVycm9yIH07CisKKyAgICAgICAgYXV0byB1bml0VHlwZSA9IHBhcnNlQW5nbGVUeXBlKHB0ciwg
ZW5kKTsKKyAgICAgICAgaWYgKHVuaXRUeXBlID09IFNWR0FuZ2xlVmFsdWU6OlNWR19BTkdMRVRZ
UEVfVU5LTk9XTikKKyAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9
OwogCi0gICAgbV91bml0VHlwZSA9IHVuaXRUeXBlOwotICAgIG1fdmFsdWVJblNwZWNpZmllZFVu
aXRzID0gdmFsdWVJblNwZWNpZmllZFVuaXRzOwotICAgIHJldHVybiB7IH07CisgICAgICAgIG1f
dW5pdFR5cGUgPSB1bml0VHlwZTsKKyAgICAgICAgbV92YWx1ZUluU3BlY2lmaWVkVW5pdHMgPSAq
dmFsdWVJblNwZWNpZmllZFVuaXRzOworICAgICAgICByZXR1cm4geyB9OworICAgIH07CisKKyAg
ICBpZiAodmFsdWUuaXM4Qml0KCkpIHsKKyAgICAgICAgY29uc3QgYXV0byogcHRyID0gdmFsdWUu
Y2hhcmFjdGVyczgoKTsKKyAgICAgICAgY29uc3QgYXV0byogZW5kID0gcHRyICsgdmFsdWUubGVu
Z3RoKCk7CisgICAgICAgIHJldHVybiBoZWxwZXIocHRyLCBlbmQpOworICAgIH0KKworICAgIGNv
bnN0IGF1dG8qIHB0ciA9IHZhbHVlLmNoYXJhY3RlcnMxNigpOworICAgIGNvbnN0IGF1dG8qIGVu
ZCA9IHB0ciArIHZhbHVlLmxlbmd0aCgpOworICAgIHJldHVybiBoZWxwZXIocHRyLCBlbmQpOwog
fQogCiBFeGNlcHRpb25Pcjx2b2lkPiBTVkdBbmdsZVZhbHVlOjpuZXdWYWx1ZVNwZWNpZmllZFVu
aXRzKHVuc2lnbmVkIHNob3J0IHVuaXRUeXBlLCBmbG9hdCB2YWx1ZUluU3BlY2lmaWVkVW5pdHMp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5j
cHAJKHJldmlzaW9uIDI2MzE3NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlTW90
aW9uRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MSw3ICsxNjEsNyBAQCB2b2lkIFNW
R0FuaW1hdGVNb3Rpb25FbGVtZW50OjpzdG9wQW5pbWF0CiAKIGJvb2wgU1ZHQW5pbWF0ZU1vdGlv
bkVsZW1lbnQ6OmNhbGN1bGF0ZVRvQXRFbmRPZkR1cmF0aW9uVmFsdWUoY29uc3QgU3RyaW5nJiB0
b0F0RW5kT2ZEdXJhdGlvblN0cmluZykKIHsKLSAgICBwYXJzZVBvaW50KHRvQXRFbmRPZkR1cmF0
aW9uU3RyaW5nLCBtX3RvUG9pbnRBdEVuZE9mRHVyYXRpb24pOworICAgIG1fdG9Qb2ludEF0RW5k
T2ZEdXJhdGlvbiA9IHBhcnNlUG9pbnQodG9BdEVuZE9mRHVyYXRpb25TdHJpbmcpLnZhbHVlT3Io
RmxvYXRQb2ludCB7IH0pOwogICAgIG1faGFzVG9Qb2ludEF0RW5kT2ZEdXJhdGlvbiA9IHRydWU7
CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0xNjksOCArMTY5LDggQEAgYm9vbCBTVkdBbmltYXRl
TW90aW9uRWxlbWVudDo6Y2FsY3VsYXRlVAogYm9vbCBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6
Y2FsY3VsYXRlRnJvbUFuZFRvVmFsdWVzKGNvbnN0IFN0cmluZyYgZnJvbVN0cmluZywgY29uc3Qg
U3RyaW5nJiB0b1N0cmluZykKIHsKICAgICBtX2hhc1RvUG9pbnRBdEVuZE9mRHVyYXRpb24gPSBm
YWxzZTsKLSAgICBwYXJzZVBvaW50KGZyb21TdHJpbmcsIG1fZnJvbVBvaW50KTsKLSAgICBwYXJz
ZVBvaW50KHRvU3RyaW5nLCBtX3RvUG9pbnQpOworICAgIG1fZnJvbVBvaW50ID0gcGFyc2VQb2lu
dChmcm9tU3RyaW5nKS52YWx1ZU9yKEZsb2F0UG9pbnQgeyB9KTsKKyAgICBtX3RvUG9pbnQgPSBw
YXJzZVBvaW50KHRvU3RyaW5nKS52YWx1ZU9yKEZsb2F0UG9pbnQgeyB9KTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KICAgICAKQEAgLTE3OSw5ICsxNzksOCBAQCBib29sIFNWR0FuaW1hdGVNb3Rpb25F
bGVtZW50OjpjYWxjdWxhdGVGCiAgICAgbV9oYXNUb1BvaW50QXRFbmRPZkR1cmF0aW9uID0gZmFs
c2U7CiAgICAgaWYgKGFuaW1hdGlvbk1vZGUoKSA9PSBBbmltYXRpb25Nb2RlOjpCeSAmJiAhaXNB
ZGRpdGl2ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcGFyc2VQb2ludChmcm9tU3Ry
aW5nLCBtX2Zyb21Qb2ludCk7Ci0gICAgRmxvYXRQb2ludCBieVBvaW50OwotICAgIHBhcnNlUG9p
bnQoYnlTdHJpbmcsIGJ5UG9pbnQpOworICAgIG1fZnJvbVBvaW50ID0gcGFyc2VQb2ludChmcm9t
U3RyaW5nKS52YWx1ZU9yKEZsb2F0UG9pbnQgeyB9KTsKKyAgICBhdXRvIGJ5UG9pbnQgPSBwYXJz
ZVBvaW50KGJ5U3RyaW5nKS52YWx1ZU9yKEZsb2F0UG9pbnQgeyB9KTsKICAgICBtX3RvUG9pbnQg
PSBGbG9hdFBvaW50KG1fZnJvbVBvaW50LngoKSArIGJ5UG9pbnQueCgpLCBtX2Zyb21Qb2ludC55
KCkgKyBieVBvaW50LnkoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0yNzUsMTMgKzI3NCwx
MyBAQCB2b2lkIFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OjphcHBseVJlc3VsCiAKIE9wdGlvbmFs
PGZsb2F0PiBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6Y2FsY3VsYXRlRGlzdGFuY2UoY29uc3Qg
U3RyaW5nJiBmcm9tU3RyaW5nLCBjb25zdCBTdHJpbmcmIHRvU3RyaW5nKQogewotICAgIEZsb2F0
UG9pbnQgZnJvbTsKLSAgICBGbG9hdFBvaW50IHRvOwotICAgIGlmICghcGFyc2VQb2ludChmcm9t
U3RyaW5nLCBmcm9tKSkKKyAgICBhdXRvIGZyb20gPSBwYXJzZVBvaW50KGZyb21TdHJpbmcpOwor
ICAgIGlmICghZnJvbSkKICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICBpZiAoIXBhcnNlUG9pbnQo
dG9TdHJpbmcsIHRvKSkKKyAgICBhdXRvIHRvID0gcGFyc2VQb2ludCh0b1N0cmluZyk7CisgICAg
aWYgKCF0bykKICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICBGbG9hdFNpemUgZGlmZiA9IHRvIC0g
ZnJvbTsKKyAgICBhdXRvIGRpZmYgPSAqdG8gLSAqZnJvbTsKICAgICByZXR1cm4gc3RkOjpoeXBv
dChkaWZmLndpZHRoKCksIGRpZmYuaGVpZ2h0KCkpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTc3LDExICs3NywxMCBAQCBmYWlsOgogICAgIHJlc3VsdC5jbGVhcigpOwogfQogCi1zdGF0aWMg
dm9pZCBwYXJzZUtleVNwbGluZXMoY29uc3QgU3RyaW5nJiBwYXJzZSwgVmVjdG9yPFVuaXRCZXpp
ZXI+JiByZXN1bHQpCitzdGF0aWMgT3B0aW9uYWw8VmVjdG9yPFVuaXRCZXppZXI+PiBwYXJzZUtl
eVNwbGluZXMoY29uc3QgU3RyaW5nJiBwYXJzZSkKIHsKLSAgICByZXN1bHQuY2xlYXIoKTsKICAg
ICBpZiAocGFyc2UuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiAKICAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IFN0cmluZ1Zp
ZXcocGFyc2UpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwogICAgIGNvbnN0IFVDaGFyKiBjdXIg
PSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7CkBAIC04OSwzMiArODgsMjYgQEAgc3RhdGljIHZvaWQg
cGFyc2VLZXlTcGxpbmVzKGNvbnN0IFN0cmluZwogCiAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2Vz
KGN1ciwgZW5kKTsKIAorICAgIFZlY3RvcjxVbml0QmV6aWVyPiByZXN1bHQ7CisKICAgICBib29s
IGRlbGltUGFyc2VkID0gZmFsc2U7CiAgICAgd2hpbGUgKGN1ciA8IGVuZCkgewogICAgICAgICBk
ZWxpbVBhcnNlZCA9IGZhbHNlOwotICAgICAgICBmbG9hdCBwb3NBID0gMDsKLSAgICAgICAgaWYg
KCFwYXJzZU51bWJlcihjdXIsIGVuZCwgcG9zQSkpIHsKLSAgICAgICAgICAgIHJlc3VsdC5jbGVh
cigpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZmxvYXQgcG9z
QiA9IDA7Ci0gICAgICAgIGlmICghcGFyc2VOdW1iZXIoY3VyLCBlbmQsIHBvc0IpKSB7Ci0gICAg
ICAgICAgICByZXN1bHQuY2xlYXIoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
Ci0gICAgICAgIGZsb2F0IHBvc0MgPSAwOwotICAgICAgICBpZiAoIXBhcnNlTnVtYmVyKGN1ciwg
ZW5kLCBwb3NDKSkgewotICAgICAgICAgICAgcmVzdWx0LmNsZWFyKCk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBmbG9hdCBwb3NEID0gMDsKLSAgICAgICAgaWYg
KCFwYXJzZU51bWJlcihjdXIsIGVuZCwgcG9zRCwgZmFsc2UpKSB7Ci0gICAgICAgICAgICByZXN1
bHQuY2xlYXIoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgICAgICBhdXRv
IHBvc0EgPSBwYXJzZU51bWJlcihjdXIsIGVuZCk7CisgICAgICAgIGlmICghcG9zQSkKKyAgICAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICAgICAgYXV0byBwb3NCID0gcGFyc2VO
dW1iZXIoY3VyLCBlbmQpOworICAgICAgICBpZiAoIXBvc0IpCisgICAgICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworCisgICAgICAgIGF1dG8gcG9zQyA9IHBhcnNlTnVtYmVyKGN1ciwgZW5k
KTsKKyAgICAgICAgaWYgKCFwb3NDKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
KworICAgICAgICBhdXRvIHBvc0QgPSBwYXJzZU51bWJlcihjdXIsIGVuZCwgU3VmZml4U2tpcHBp
bmdQb2xpY3k6OkRvbnRTa2lwKTsKKyAgICAgICAgaWYgKCFwb3NEKQorICAgICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKIAogICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoY3VyLCBl
bmQpOwogCkBAIC0xMjIsMTIgKzExNSwxNiBAQCBzdGF0aWMgdm9pZCBwYXJzZUtleVNwbGluZXMo
Y29uc3QgU3RyaW5nCiAgICAgICAgICAgICBkZWxpbVBhcnNlZCA9IHRydWU7CiAgICAgICAgICAg
ICBjdXIrKzsKICAgICAgICAgfQorCiAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhjdXIs
IGVuZCk7CiAKLSAgICAgICAgcmVzdWx0LmFwcGVuZChVbml0QmV6aWVyKHBvc0EsIHBvc0IsIHBv
c0MsIHBvc0QpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChVbml0QmV6aWVyIHsgKnBvc0EsICpw
b3NCLCAqcG9zQywgKnBvc0QgfSk7CiAgICAgfQorCiAgICAgaWYgKCEoY3VyID09IGVuZCAmJiAh
ZGVsaW1QYXJzZWQpKQotICAgICAgICByZXN1bHQuY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIGJvb2wgU1ZHQW5pbWF0aW9u
RWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5h
bWUpCkBAIC0xODAsNyArMTc3LDEwIEBAIHZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6cGFyc2VB
dHRyaWJ1dGUKICAgICB9CiAKICAgICBpZiAobmFtZSA9PSBTVkdOYW1lczo6a2V5U3BsaW5lc0F0
dHIpIHsKLSAgICAgICAgcGFyc2VLZXlTcGxpbmVzKHZhbHVlLCBtX2tleVNwbGluZXMpOworICAg
ICAgICBpZiAoYXV0byBrZXlTcGxpbmVzID0gcGFyc2VLZXlTcGxpbmVzKHZhbHVlKSkKKyAgICAg
ICAgICAgIG1fa2V5U3BsaW5lcyA9IFdURk1vdmUoKmtleVNwbGluZXMpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBtX2tleVNwbGluZXMuY2xlYXIoKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJp
eEVsZW1lbnQuY3BwCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NywxMCArNjcs
MTAgQEAgdm9pZCBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6cGFyc2VBdAogICAgIH0KIAog
ICAgIGlmIChuYW1lID09IFNWR05hbWVzOjpvcmRlckF0dHIpIHsKLSAgICAgICAgZmxvYXQgeCwg
eTsKLSAgICAgICAgaWYgKHBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIodmFsdWUsIHgsIHkpICYm
IHggPj0gMSAmJiB5ID49IDEpIHsKLSAgICAgICAgICAgIG1fb3JkZXJYLT5zZXRCYXNlVmFsSW50
ZXJuYWwoeCk7Ci0gICAgICAgICAgICBtX29yZGVyWS0+c2V0QmFzZVZhbEludGVybmFsKHkpOwor
ICAgICAgICBhdXRvIHJlc3VsdCA9IHBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIodmFsdWUpOwor
ICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdC0+Zmlyc3QgPj0gMSAmJiByZXN1bHQtPnNlY29u
ZCA+PSAxKSB7CisgICAgICAgICAgICBtX29yZGVyWC0+c2V0QmFzZVZhbEludGVybmFsKHJlc3Vs
dC0+Zmlyc3QpOworICAgICAgICAgICAgbV9vcmRlclktPnNldEJhc2VWYWxJbnRlcm5hbChyZXN1
bHQtPnNlY29uZCk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgZG9jdW1lbnQoKS5hY2Nl
c3NTVkdFeHRlbnNpb25zKCkucmVwb3J0V2FybmluZygiZmVDb252b2x2ZU1hdHJpeDogcHJvYmxl
bSBwYXJzaW5nIG9yZGVyPVwiIiArIHZhbHVlICsgIlwiLiBGaWx0ZXJlZCBlbGVtZW50IHdpbGwg
bm90IGJlIGRpc3BsYXllZC4iKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTE1LDEwICsxMTUsMTAg
QEAgdm9pZCBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6cGFyc2VBdAogICAgIH0KIAogICAg
IGlmIChuYW1lID09IFNWR05hbWVzOjprZXJuZWxVbml0TGVuZ3RoQXR0cikgewotICAgICAgICBm
bG9hdCB4LCB5OwotICAgICAgICBpZiAocGFyc2VOdW1iZXJPcHRpb25hbE51bWJlcih2YWx1ZSwg
eCwgeSkgJiYgeCA+IDAgJiYgeSA+IDApIHsKLSAgICAgICAgICAgIG1fa2VybmVsVW5pdExlbmd0
aFgtPnNldEJhc2VWYWxJbnRlcm5hbCh4KTsKLSAgICAgICAgICAgIG1fa2VybmVsVW5pdExlbmd0
aFktPnNldEJhc2VWYWxJbnRlcm5hbCh5KTsKKyAgICAgICAgYXV0byByZXN1bHQgPSBwYXJzZU51
bWJlck9wdGlvbmFsTnVtYmVyKHZhbHVlKTsKKyAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQt
PmZpcnN0ID4gMCAmJiByZXN1bHQtPnNlY29uZCA+IDApIHsKKyAgICAgICAgICAgIG1fa2VybmVs
VW5pdExlbmd0aFgtPnNldEJhc2VWYWxJbnRlcm5hbChyZXN1bHQtPmZpcnN0KTsKKyAgICAgICAg
ICAgIG1fa2VybmVsVW5pdExlbmd0aFktPnNldEJhc2VWYWxJbnRlcm5hbChyZXN1bHQtPnNlY29u
ZCk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRl
bnNpb25zKCkucmVwb3J0V2FybmluZygiZmVDb252b2x2ZU1hdHJpeDogcHJvYmxlbSBwYXJzaW5n
IGtlcm5lbFVuaXRMZW5ndGg9XCIiICsgdmFsdWUgKyAiXCIuIEZpbHRlcmVkIGVsZW1lbnQgd2ls
bCBub3QgYmUgZGlzcGxheWVkLiIpOwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmNwcAkocmV2aXNp
b24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxLDEwICs3MSw5IEBAIHZvaWQgU1ZHRkVEaWZm
dXNlTGlnaHRpbmdFbGVtZW50OjpwYXJzZUEKICAgICB9CiAKICAgICBpZiAobmFtZSA9PSBTVkdO
YW1lczo6a2VybmVsVW5pdExlbmd0aEF0dHIpIHsKLSAgICAgICAgZmxvYXQgeCwgeTsKLSAgICAg
ICAgaWYgKHBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIodmFsdWUsIHgsIHkpKSB7Ci0gICAgICAg
ICAgICBtX2tlcm5lbFVuaXRMZW5ndGhYLT5zZXRCYXNlVmFsSW50ZXJuYWwoeCk7Ci0gICAgICAg
ICAgICBtX2tlcm5lbFVuaXRMZW5ndGhZLT5zZXRCYXNlVmFsSW50ZXJuYWwoeSk7CisgICAgICAg
IGlmIChhdXRvIHJlc3VsdCA9IHBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIodmFsdWUpKSB7Cisg
ICAgICAgICAgICBtX2tlcm5lbFVuaXRMZW5ndGhYLT5zZXRCYXNlVmFsSW50ZXJuYWwocmVzdWx0
LT5maXJzdCk7CisgICAgICAgICAgICBtX2tlcm5lbFVuaXRMZW5ndGhZLT5zZXRCYXNlVmFsSW50
ZXJuYWwocmVzdWx0LT5zZWNvbmQpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuY3Bw
CShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDEwICs2MSw5IEBAIHZvaWQgU1ZHRkVE
cm9wU2hhZG93RWxlbWVudDo6c2V0U3RkRGV2aWEKIHZvaWQgU1ZHRkVEcm9wU2hhZG93RWxlbWVu
dDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbVN0
cmluZyYgdmFsdWUpCiB7CiAgICAgaWYgKG5hbWUgPT0gU1ZHTmFtZXM6OnN0ZERldmlhdGlvbkF0
dHIpIHsKLSAgICAgICAgZmxvYXQgeCwgeTsKLSAgICAgICAgaWYgKHBhcnNlTnVtYmVyT3B0aW9u
YWxOdW1iZXIodmFsdWUsIHgsIHkpKSB7Ci0gICAgICAgICAgICBtX3N0ZERldmlhdGlvblgtPnNl
dEJhc2VWYWxJbnRlcm5hbCh4KTsKLSAgICAgICAgICAgIG1fc3RkRGV2aWF0aW9uWS0+c2V0QmFz
ZVZhbEludGVybmFsKHkpOworICAgICAgICBpZiAoYXV0byByZXN1bHQgPSBwYXJzZU51bWJlck9w
dGlvbmFsTnVtYmVyKHZhbHVlKSkgeworICAgICAgICAgICAgbV9zdGREZXZpYXRpb25YLT5zZXRC
YXNlVmFsSW50ZXJuYWwocmVzdWx0LT5maXJzdCk7CisgICAgICAgICAgICBtX3N0ZERldmlhdGlv
blktPnNldEJhc2VWYWxJbnRlcm5hbChyZXN1bHQtPnNlY29uZCk7CiAgICAgICAgIH0KICAgICAg
ICAgcmV0dXJuOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFu
Qmx1ckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdh
dXNzaWFuQmx1ckVsZW1lbnQuY3BwCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAs
MTAgKzYwLDkgQEAgdm9pZCBTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OnNldFN0ZERldgogdm9p
ZCBTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmll
ZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21TdHJpbmcmIHZhbHVlKQogewogICAgIGlmIChuYW1lID09
IFNWR05hbWVzOjpzdGREZXZpYXRpb25BdHRyKSB7Ci0gICAgICAgIGZsb2F0IHgsIHk7Ci0gICAg
ICAgIGlmIChwYXJzZU51bWJlck9wdGlvbmFsTnVtYmVyKHZhbHVlLCB4LCB5KSkgewotICAgICAg
ICAgICAgbV9zdGREZXZpYXRpb25YLT5zZXRCYXNlVmFsSW50ZXJuYWwoeCk7Ci0gICAgICAgICAg
ICBtX3N0ZERldmlhdGlvblktPnNldEJhc2VWYWxJbnRlcm5hbCh5KTsKKyAgICAgICAgaWYgKGF1
dG8gcmVzdWx0ID0gcGFyc2VOdW1iZXJPcHRpb25hbE51bWJlcih2YWx1ZSkpIHsKKyAgICAgICAg
ICAgIG1fc3RkRGV2aWF0aW9uWC0+c2V0QmFzZVZhbEludGVybmFsKHJlc3VsdC0+Zmlyc3QpOwor
ICAgICAgICAgICAgbV9zdGREZXZpYXRpb25ZLT5zZXRCYXNlVmFsSW50ZXJuYWwocmVzdWx0LT5z
ZWNvbmQpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHAJKHJldmlzaW9uIDI2MzE3NikKKysrIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTExNyw5ICsxMTcsNyBAQCB2b2lkIFNWR0ZFSW1hZ2VFbGVtZW50OjpidWlsZFBlbmRpbmdSZXNv
CiB2b2lkIFNWR0ZFSW1hZ2VFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWRO
YW1lJiBuYW1lLCBjb25zdCBBdG9tU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBpZiAobmFtZSA9PSBT
VkdOYW1lczo6cHJlc2VydmVBc3BlY3RSYXRpb0F0dHIpIHsKLSAgICAgICAgU1ZHUHJlc2VydmVB
c3BlY3RSYXRpb1ZhbHVlIHByZXNlcnZlQXNwZWN0UmF0aW87Ci0gICAgICAgIHByZXNlcnZlQXNw
ZWN0UmF0aW8ucGFyc2UodmFsdWUpOwotICAgICAgICBtX3ByZXNlcnZlQXNwZWN0UmF0aW8tPnNl
dEJhc2VWYWxJbnRlcm5hbChwcmVzZXJ2ZUFzcGVjdFJhdGlvKTsKKyAgICAgICAgbV9wcmVzZXJ2
ZUFzcGVjdFJhdGlvLT5zZXRCYXNlVmFsSW50ZXJuYWwoU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1Zh
bHVlIHsgdmFsdWUgfSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5jcHAJKHJldmlzaW9uIDI2MzE3
NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzEsMTAgKzcxLDkgQEAgdm9pZCBTVkdGRU1vcnBob2xvZ3lFbGVtZW50
OjpwYXJzZUF0dHJpYgogICAgIH0KIAogICAgIGlmIChuYW1lID09IFNWR05hbWVzOjpyYWRpdXNB
dHRyKSB7Ci0gICAgICAgIGZsb2F0IHgsIHk7Ci0gICAgICAgIGlmIChwYXJzZU51bWJlck9wdGlv
bmFsTnVtYmVyKHZhbHVlLCB4LCB5KSkgewotICAgICAgICAgICAgbV9yYWRpdXNYLT5zZXRCYXNl
VmFsSW50ZXJuYWwoeCk7Ci0gICAgICAgICAgICBtX3JhZGl1c1ktPnNldEJhc2VWYWxJbnRlcm5h
bCh5KTsKKyAgICAgICAgaWYgKGF1dG8gcmVzdWx0ID0gcGFyc2VOdW1iZXJPcHRpb25hbE51bWJl
cih2YWx1ZSkpIHsKKyAgICAgICAgICAgIG1fcmFkaXVzWC0+c2V0QmFzZVZhbEludGVybmFsKHJl
c3VsdC0+Zmlyc3QpOworICAgICAgICAgICAgbV9yYWRpdXNZLT5zZXRCYXNlVmFsSW50ZXJuYWwo
cmVzdWx0LT5zZWNvbmQpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1l
bnQuY3BwCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVj
dWxhckxpZ2h0aW5nRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDEwICs3OCw5IEBA
IHZvaWQgU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6cGFyc2UKICAgICB9CiAKICAgICBp
ZiAobmFtZSA9PSBTVkdOYW1lczo6a2VybmVsVW5pdExlbmd0aEF0dHIpIHsKLSAgICAgICAgZmxv
YXQgeCwgeTsKLSAgICAgICAgaWYgKHBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIodmFsdWUsIHgs
IHkpKSB7Ci0gICAgICAgICAgICBtX2tlcm5lbFVuaXRMZW5ndGhYLT5zZXRCYXNlVmFsSW50ZXJu
YWwoeCk7Ci0gICAgICAgICAgICBtX2tlcm5lbFVuaXRMZW5ndGhZLT5zZXRCYXNlVmFsSW50ZXJu
YWwoeSk7CisgICAgICAgIGlmIChhdXRvIHJlc3VsdCA9IHBhcnNlTnVtYmVyT3B0aW9uYWxOdW1i
ZXIodmFsdWUpKSB7CisgICAgICAgICAgICBtX2tlcm5lbFVuaXRMZW5ndGhYLT5zZXRCYXNlVmFs
SW50ZXJuYWwocmVzdWx0LT5maXJzdCk7CisgICAgICAgICAgICBtX2tlcm5lbFVuaXRMZW5ndGhZ
LT5zZXRCYXNlVmFsSW50ZXJuYWwocmVzdWx0LT5zZWNvbmQpOwogICAgICAgICB9CiAgICAgICAg
IHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNl
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVHVyYnVs
ZW5jZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVUdXJidWxlbmNlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDEwICs2Nyw5
IEBAIHZvaWQgU1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6cGFyc2VBdHRyaWIKICAgICB9CiAKICAg
ICBpZiAobmFtZSA9PSBTVkdOYW1lczo6YmFzZUZyZXF1ZW5jeUF0dHIpIHsKLSAgICAgICAgZmxv
YXQgeCwgeTsKLSAgICAgICAgaWYgKHBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIodmFsdWUsIHgs
IHkpKSB7Ci0gICAgICAgICAgICBtX2Jhc2VGcmVxdWVuY3lYLT5zZXRCYXNlVmFsSW50ZXJuYWwo
eCk7Ci0gICAgICAgICAgICBtX2Jhc2VGcmVxdWVuY3lZLT5zZXRCYXNlVmFsSW50ZXJuYWwoeSk7
CisgICAgICAgIGlmIChhdXRvIHJlc3VsdCA9IHBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIodmFs
dWUpKSB7CisgICAgICAgICAgICBtX2Jhc2VGcmVxdWVuY3lYLT5zZXRCYXNlVmFsSW50ZXJuYWwo
cmVzdWx0LT5maXJzdCk7CisgICAgICAgICAgICBtX2Jhc2VGcmVxdWVuY3lZLT5zZXRCYXNlVmFs
SW50ZXJuYWwocmVzdWx0LT5zZWNvbmQpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAg
ICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRml0VG9WaWV3Qm94LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRml0VG9WaWV3Qm94LmNwcAkocmV2aXNpb24g
MjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpdFRvVmlld0JveC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY2LDczICs2Niw3MSBAQCB2b2lkIFNWR0ZpdFRvVmlld0JveDo6cmVzZXQo
KQogYm9vbCBTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5h
bWUmIG5hbWUsIGNvbnN0IEF0b21TdHJpbmcmIHZhbHVlKQogewogICAgIGlmIChuYW1lID09IFNW
R05hbWVzOjp2aWV3Qm94QXR0cikgewotICAgICAgICBGbG9hdFJlY3Qgdmlld0JveDsKLSAgICAg
ICAgaWYgKCF2YWx1ZS5pc051bGwoKSAmJiBwYXJzZVZpZXdCb3godmFsdWUsIHZpZXdCb3gpKQot
ICAgICAgICAgICAgc2V0Vmlld0JveCh2aWV3Qm94KTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgcmVzZXRWaWV3Qm94KCk7CisgICAgICAgIGlmICghdmFsdWUuaXNOdWxsKCkpIHsKKyAgICAg
ICAgICAgIGlmIChhdXRvIHJlc3VsdCA9IHBhcnNlVmlld0JveCh2YWx1ZSkpIHsKKyAgICAgICAg
ICAgICAgICBzZXRWaWV3Qm94KFdURk1vdmUoKnJlc3VsdCkpOworICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJlc2V0Vmlld0Jv
eCgpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICBpZiAobmFtZSA9PSBTVkdO
YW1lczo6cHJlc2VydmVBc3BlY3RSYXRpb0F0dHIpIHsKLSAgICAgICAgU1ZHUHJlc2VydmVBc3Bl
Y3RSYXRpb1ZhbHVlIHByZXNlcnZlQXNwZWN0UmF0aW87Ci0gICAgICAgIHByZXNlcnZlQXNwZWN0
UmF0aW8ucGFyc2UodmFsdWUpOwotICAgICAgICBzZXRQcmVzZXJ2ZUFzcGVjdFJhdGlvKHByZXNl
cnZlQXNwZWN0UmF0aW8pOworICAgICAgICBzZXRQcmVzZXJ2ZUFzcGVjdFJhdGlvKFNWR1ByZXNl
cnZlQXNwZWN0UmF0aW9WYWx1ZSB7IHZhbHVlIH0pOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgU1ZHRml0VG9WaWV3Qm94OjpwYXJz
ZVZpZXdCb3goY29uc3QgQXRvbVN0cmluZyYgdmFsdWUsIEZsb2F0UmVjdCYgdmlld0JveCkKK09w
dGlvbmFsPEZsb2F0UmVjdD4gU1ZHRml0VG9WaWV3Qm94OjpwYXJzZVZpZXdCb3goY29uc3QgQXRv
bVN0cmluZyYgdmFsdWUpCiB7CiAgICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBTdHJp
bmdWaWV3KHZhbHVlKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKICAgICBjb25zdCBVQ2hhciog
Y2hhcmFjdGVycyA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKLSAgICByZXR1cm4gcGFyc2VWaWV3
Qm94KGNoYXJhY3RlcnMsIGNoYXJhY3RlcnMgKyB2YWx1ZS5sZW5ndGgoKSwgdmlld0JveCk7Cisg
ICAgcmV0dXJuIHBhcnNlVmlld0JveChjaGFyYWN0ZXJzLCBjaGFyYWN0ZXJzICsgdmFsdWUubGVu
Z3RoKCkpOwogfQogCi1ib29sIFNWR0ZpdFRvVmlld0JveDo6cGFyc2VWaWV3Qm94KGNvbnN0IFVD
aGFyKiYgYywgY29uc3QgVUNoYXIqIGVuZCwgRmxvYXRSZWN0JiB2aWV3Qm94LCBib29sIHZhbGlk
YXRlKQorT3B0aW9uYWw8RmxvYXRSZWN0PiBTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlVmlld0JveChj
b25zdCBVQ2hhciomIGMsIGNvbnN0IFVDaGFyKiBlbmQsIGJvb2wgdmFsaWRhdGUpCiB7Ci0gICAg
U3RyaW5nIHN0cihjLCBlbmQgLSBjKTsKKyAgICBTdHJpbmdWaWV3IHN0cihjLCBlbmQgLSBjKTsK
IAogICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhjLCBlbmQpOwogCi0gICAgZmxvYXQgeCA9IDAu
MGY7Ci0gICAgZmxvYXQgeSA9IDAuMGY7Ci0gICAgZmxvYXQgd2lkdGggPSAwLjBmOwotICAgIGZs
b2F0IGhlaWdodCA9IDAuMGY7Ci0gICAgYm9vbCB2YWxpZCA9IHBhcnNlTnVtYmVyKGMsIGVuZCwg
eCkgJiYgcGFyc2VOdW1iZXIoYywgZW5kLCB5KSAmJiBwYXJzZU51bWJlcihjLCBlbmQsIHdpZHRo
KSAmJiBwYXJzZU51bWJlcihjLCBlbmQsIGhlaWdodCwgZmFsc2UpOworICAgIGF1dG8geCA9IHBh
cnNlTnVtYmVyKGMsIGVuZCk7CisgICAgYXV0byB5ID0gcGFyc2VOdW1iZXIoYywgZW5kKTsKKyAg
ICBhdXRvIHdpZHRoID0gcGFyc2VOdW1iZXIoYywgZW5kKTsKKyAgICBhdXRvIGhlaWdodCA9IHBh
cnNlTnVtYmVyKGMsIGVuZCwgU3VmZml4U2tpcHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsKIAogICAg
IGlmICh2YWxpZGF0ZSkgewogICAgICAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBtX3ZpZXdCb3gt
PmNvbnRleHRFbGVtZW50KCktPmRvY3VtZW50KCk7CiAKLSAgICAgICAgaWYgKCF2YWxpZCkgewot
ICAgICAgICAgICAgZG9jdW1lbnQuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnJlcG9ydFdhcm5pbmco
IlByb2JsZW0gcGFyc2luZyB2aWV3Qm94PVwiIiArIHN0ciArICJcIiIpOwotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIXggfHwgIXkgfHwgIXdpZHRoIHx8ICFoZWlnaHQp
IHsKKyAgICAgICAgICAgIGRvY3VtZW50LmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5yZXBvcnRXYXJu
aW5nKG1ha2VTdHJpbmcoIlByb2JsZW0gcGFyc2luZyB2aWV3Qm94PVwiIiwgc3RyLCAiXCIiKSk7
CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICB9CiAKICAgICAgICAg
Ly8gQ2hlY2sgdGhhdCB3aWR0aCBpcyBwb3NpdGl2ZS4KLSAgICAgICAgaWYgKHdpZHRoIDwgMC4w
KSB7CisgICAgICAgIGlmICgqd2lkdGggPCAwLjApIHsKICAgICAgICAgICAgIGRvY3VtZW50LmFj
Y2Vzc1NWR0V4dGVuc2lvbnMoKS5yZXBvcnRFcnJvcigiQSBuZWdhdGl2ZSB2YWx1ZSBmb3IgVmll
d0JveCB3aWR0aCBpcyBub3QgYWxsb3dlZCIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgfQogCiAgICAgICAgIC8v
IENoZWNrIHRoYXQgaGVpZ2h0IGlzIHBvc2l0aXZlLgotICAgICAgICBpZiAoaGVpZ2h0IDwgMC4w
KSB7CisgICAgICAgIGlmICgqaGVpZ2h0IDwgMC4wKSB7CiAgICAgICAgICAgICBkb2N1bWVudC5h
Y2Nlc3NTVkdFeHRlbnNpb25zKCkucmVwb3J0RXJyb3IoIkEgbmVnYXRpdmUgdmFsdWUgZm9yIFZp
ZXdCb3ggaGVpZ2h0IGlzIG5vdCBhbGxvd2VkIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICB9CiAKICAgICAgICAg
Ly8gTm90aGluZyBzaG91bGQgY29tZSBhZnRlciB0aGUgbGFzdCwgZm91cnRoIG51bWJlci4KICAg
ICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGMsIGVuZCk7CiAgICAgICAgIGlmIChjIDwgZW5k
KSB7Ci0gICAgICAgICAgICBkb2N1bWVudC5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVwb3J0V2Fy
bmluZygiUHJvYmxlbSBwYXJzaW5nIHZpZXdCb3g9XCIiICsgc3RyICsgIlwiIik7Ci0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBkb2N1bWVudC5hY2Nlc3NTVkdFeHRlbnNp
b25zKCkucmVwb3J0V2FybmluZyhtYWtlU3RyaW5nKCJQcm9ibGVtIHBhcnNpbmcgdmlld0JveD1c
IiIsIHN0ciwgIlwiIikpOworICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAg
ICAgfQogICAgIH0KIAotICAgIHZpZXdCb3ggPSB7IHgsIHksIHdpZHRoLCBoZWlnaHQgfTsKLSAg
ICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gRmxvYXRSZWN0IHsgeC52YWx1ZU9yKDApLCB5LnZh
bHVlT3IoMCksIHdpZHRoLnZhbHVlT3IoMCksIGhlaWdodC52YWx1ZU9yKDApIH07CiB9CiAKIEFm
ZmluZVRyYW5zZm9ybSBTVkdGaXRUb1ZpZXdCb3g6OnZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0oY29u
c3QgRmxvYXRSZWN0JiB2aWV3Qm94UmVjdCwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1Zh
bHVlJiBwcmVzZXJ2ZUFzcGVjdFJhdGlvLCBmbG9hdCB2aWV3V2lkdGgsIGZsb2F0IHZpZXdIZWln
aHQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRml0VG9WaWV3Qm94LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpdFRvVmlld0JveC5oCShyZXZpc2lvbiAyNjMx
NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRml0VG9WaWV3Qm94LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTY1LDggKzY1LDggQEAgcHJvdGVjdGVkOgogCiAgICAgdm9pZCByZXNldCgpOwogICAg
IGJvb2wgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21TdHJp
bmcmKTsKLSAgICBib29sIHBhcnNlVmlld0JveChjb25zdCBBdG9tU3RyaW5nJiB2YWx1ZSwgRmxv
YXRSZWN0JiB2aWV3Qm94KTsKLSAgICBib29sIHBhcnNlVmlld0JveChjb25zdCBVQ2hhciomIHN0
YXJ0LCBjb25zdCBVQ2hhciogZW5kLCBGbG9hdFJlY3QmIHZpZXdCb3gsIGJvb2wgdmFsaWRhdGUg
PSB0cnVlKTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IHBhcnNlVmlld0JveChjb25zdCBBdG9t
U3RyaW5nJiB2YWx1ZSk7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBwYXJzZVZpZXdCb3goY29u
c3QgVUNoYXIqJiBzdGFydCwgY29uc3QgVUNoYXIqIGVuZCwgYm9vbCB2YWxpZGF0ZSA9IHRydWUp
OwogCiBwcml2YXRlOgogICAgIFJlZjxTVkdBbmltYXRlZFJlY3Q+IG1fdmlld0JveDsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHbHlwaFJlZkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHbHlwaFJlZkVsZW1lbnQuY3BwCShyZXZpc2lvbiAyNjMx
NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHR2x5cGhSZWZFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTgsMTAgKzU4LDcgQEAgYm9vbCBTVkdHbHlwaFJlZkVsZW1lbnQ6Omhhc1Zh
bGlkR2x5cGhFbAogCiBzdGF0aWMgZmxvYXQgcGFyc2VGbG9hdChjb25zdCBBdG9tU3RyaW5nJiB2
YWx1ZSkKIHsKLSAgICBmbG9hdCByZXN1bHQ7Ci0gICAgaWYgKCFwYXJzZU51bWJlckZyb21TdHJp
bmcodmFsdWUsIHJlc3VsdCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiByZXN1bHQ7
CisgICAgcmV0dXJuIHBhcnNlTnVtYmVyKHZhbHVlKS52YWx1ZU9yKDApOwogfQogCiB2b2lkIFNW
R0dseXBoUmVmRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFt
ZSwgY29uc3QgQXRvbVN0cmluZyYgdmFsdWUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
SEtlcm5FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHSEtl
cm5FbGVtZW50LmNwcAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0hLZXJuRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDI0ICs0NCw0NCBAQCBSZWY8
U1ZHSEtlcm5FbGVtZW50PiBTVkdIS2VybkVsZW1lbnQ6OmNyCiAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgU1ZHSEtlcm5FbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKLWJvb2wgU1ZH
SEtlcm5FbGVtZW50OjpidWlsZEhvcml6b250YWxLZXJuaW5nUGFpcihTVkdLZXJuaW5nUGFpciYg
a2VybmluZ1BhaXIpIGNvbnN0CitPcHRpb25hbDxTVkdLZXJuaW5nUGFpcj4gU1ZHSEtlcm5FbGVt
ZW50OjpidWlsZEhvcml6b250YWxLZXJuaW5nUGFpcigpIGNvbnN0CiB7CisgICAgLy8gRklYTUU6
IENhbiB0aGlzIGJlIHNoYXJlZCB3aXRoIFNWR1ZLZXJuRWxlbWVudDo6YnVpbGRWZXJ0aWNhbEtl
cm5pbmdQYWlyCisKICAgICBhdXRvJiB1MSA9IGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRp
b24oU1ZHTmFtZXM6OnUxQXR0cik7CiAgICAgYXV0byYgZzEgPSBhdHRyaWJ1dGVXaXRob3V0U3lu
Y2hyb25pemF0aW9uKFNWR05hbWVzOjpnMUF0dHIpOwogICAgIGF1dG8mIHUyID0gYXR0cmlidXRl
V2l0aG91dFN5bmNocm9uaXphdGlvbihTVkdOYW1lczo6dTJBdHRyKTsKICAgICBhdXRvJiBnMiA9
IGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oU1ZHTmFtZXM6OmcyQXR0cik7CiAgICAg
aWYgKCh1MS5pc0VtcHR5KCkgJiYgZzEuaXNFbXB0eSgpKSB8fCAodTIuaXNFbXB0eSgpICYmIGcy
LmlzRW1wdHkoKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKKworICAgIGF1dG8gZ2x5cGhOYW1lMSA9IHBhcnNlR2x5cGhOYW1lKGcxKTsKKyAg
ICBpZiAoIWdseXBoTmFtZTEpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgYXV0
byBnbHlwaE5hbWUyID0gcGFyc2VHbHlwaE5hbWUoZzIpOworICAgIGlmICghZ2x5cGhOYW1lMikK
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBhdXRvIHVuaWNvZGVTdHJpbmcxID0g
cGFyc2VLZXJuaW5nVW5pY29kZVN0cmluZyh1MSk7CisgICAgaWYgKCF1bmljb2RlU3RyaW5nMSkK
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBhdXRvIHVuaWNvZGVTdHJpbmcyID0g
cGFyc2VLZXJuaW5nVW5pY29kZVN0cmluZyh1Mik7CisgICAgaWYgKCF1bmljb2RlU3RyaW5nMikK
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIGJvb2wgb2sgPSBmYWxzZTsKKyAg
ICBhdXRvIGtlcm5pbmcgPSBhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFNWR05hbWVz
OjprQXR0cikuc3RyaW5nKCkudG9GbG9hdCgmb2spOworICAgIGlmICghb2spCisgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBpZiAocGFyc2VHbHlwaE5hbWUoZzEsIGtlcm5pbmdQ
YWlyLmdseXBoTmFtZTEpCi0gICAgICAgICYmIHBhcnNlR2x5cGhOYW1lKGcyLCBrZXJuaW5nUGFp
ci5nbHlwaE5hbWUyKQotICAgICAgICAmJiBwYXJzZUtlcm5pbmdVbmljb2RlU3RyaW5nKHUxLCBr
ZXJuaW5nUGFpci51bmljb2RlUmFuZ2UxLCBrZXJuaW5nUGFpci51bmljb2RlTmFtZTEpCi0gICAg
ICAgICYmIHBhcnNlS2VybmluZ1VuaWNvZGVTdHJpbmcodTIsIGtlcm5pbmdQYWlyLnVuaWNvZGVS
YW5nZTIsIGtlcm5pbmdQYWlyLnVuaWNvZGVOYW1lMikpIHsKLSAgICAgICAgYm9vbCBvayA9IGZh
bHNlOwotICAgICAgICBrZXJuaW5nUGFpci5rZXJuaW5nID0gYXR0cmlidXRlV2l0aG91dFN5bmNo
cm9uaXphdGlvbihTVkdOYW1lczo6a0F0dHIpLnN0cmluZygpLnRvRmxvYXQoJm9rKTsKLSAgICAg
ICAgcmV0dXJuIG9rOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7CisgICAgU1ZHS2VybmluZ1Bh
aXIga2VybmluZ1BhaXI7CisgICAga2VybmluZ1BhaXIuZ2x5cGhOYW1lMSA9IFdURk1vdmUoKmds
eXBoTmFtZTEpOworICAgIGtlcm5pbmdQYWlyLmdseXBoTmFtZTIgPSBXVEZNb3ZlKCpnbHlwaE5h
bWUyKTsKKyAgICBrZXJuaW5nUGFpci51bmljb2RlUmFuZ2UxID0gV1RGTW92ZSh1bmljb2RlU3Ry
aW5nMS0+Zmlyc3QpOworICAgIGtlcm5pbmdQYWlyLnVuaWNvZGVOYW1lMSA9IFdURk1vdmUodW5p
Y29kZVN0cmluZzEtPnNlY29uZCk7CisgICAga2VybmluZ1BhaXIudW5pY29kZVJhbmdlMiA9IFdU
Rk1vdmUodW5pY29kZVN0cmluZzItPmZpcnN0KTsKKyAgICBrZXJuaW5nUGFpci51bmljb2RlTmFt
ZTIgPSBXVEZNb3ZlKHVuaWNvZGVTdHJpbmcyLT5zZWNvbmQpOworICAgIGtlcm5pbmdQYWlyLmtl
cm5pbmcgPSBrZXJuaW5nOworICAgIHJldHVybiBrZXJuaW5nUGFpcjsKIH0KIAogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0hLZXJuRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdIS2VybkVsZW1lbnQuaAkocmV2aXNpb24gMjYzMTc2KQorKysgU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0hLZXJuRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3
ICszMiw3IEBAIGNsYXNzIFNWR0hLZXJuRWxlbWVudCBmaW5hbCA6IHB1YmxpYyBTVkcKIHB1Ymxp
YzoKICAgICBzdGF0aWMgUmVmPFNWR0hLZXJuRWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmll
ZE5hbWUmLCBEb2N1bWVudCYpOwogCi0gICAgYm9vbCBidWlsZEhvcml6b250YWxLZXJuaW5nUGFp
cihTVkdLZXJuaW5nUGFpciYga2VybmluZ1BhaXIpIGNvbnN0OworICAgIE9wdGlvbmFsPFNWR0tl
cm5pbmdQYWlyPiBidWlsZEhvcml6b250YWxLZXJuaW5nUGFpcigpIGNvbnN0OwogCiBwcml2YXRl
OgogICAgIFNWR0hLZXJuRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQmKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdJbWFnZUVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdJbWFnZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAyNjMx
NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHSW1hZ2VFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjksOSArNjksNyBAQCBib29sIFNWR0ltYWdlRWxlbWVudDo6aGFzU2luZ2xlU2Vj
dXJpdHlPCiB2b2lkIFNWR0ltYWdlRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlm
aWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbVN0cmluZyYgdmFsdWUpCiB7CiAgICAgaWYgKG5hbWUg
PT0gU1ZHTmFtZXM6OnByZXNlcnZlQXNwZWN0UmF0aW9BdHRyKSB7Ci0gICAgICAgIFNWR1ByZXNl
cnZlQXNwZWN0UmF0aW9WYWx1ZSBwcmVzZXJ2ZUFzcGVjdFJhdGlvOwotICAgICAgICBwcmVzZXJ2
ZUFzcGVjdFJhdGlvLnBhcnNlKHZhbHVlKTsKLSAgICAgICAgbV9wcmVzZXJ2ZUFzcGVjdFJhdGlv
LT5zZXRCYXNlVmFsSW50ZXJuYWwocHJlc2VydmVBc3BlY3RSYXRpbyk7CisgICAgICAgIG1fcHJl
c2VydmVBc3BlY3RSYXRpby0+c2V0QmFzZVZhbEludGVybmFsKFNWR1ByZXNlcnZlQXNwZWN0UmF0
aW9WYWx1ZSB7IHZhbHVlIH0pOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdMZW5ndGhWYWx1ZS5jcHAJKHJldmlzaW9uIDI2MzE3NikKKysrIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdMZW5ndGhWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5MSwx
MiArMjkxLDEyIEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFNWR0xlbmd0aFZhbHVlOjpzZXRWYWwKICAg
ICBpZiAoc3RyaW5nLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGZsb2F0
IGNvbnZlcnRlZE51bWJlciA9IDA7CiAgICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBT
dHJpbmdWaWV3KHN0cmluZykudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7CiAgICAgY29uc3QgVUNo
YXIqIHB0ciA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKICAgICBjb25zdCBVQ2hhciogZW5kID0g
cHRyICsgc3RyaW5nLmxlbmd0aCgpOwogCi0gICAgaWYgKCFwYXJzZU51bWJlcihwdHIsIGVuZCwg
Y29udmVydGVkTnVtYmVyLCBmYWxzZSkpCisgICAgYXV0byBjb252ZXJ0ZWROdW1iZXIgPSBwYXJz
ZU51bWJlcihwdHIsIGVuZCwgU3VmZml4U2tpcHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsKKyAgICBp
ZiAoIWNvbnZlcnRlZE51bWJlcikKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVy
cm9yIH07CiAKICAgICBhdXRvIGxlbmd0aFR5cGUgPSBwYXJzZUxlbmd0aFR5cGUocHRyLCBlbmQp
OwpAQCAtMzA0LDcgKzMwNCw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFNWR0xlbmd0aFZhbHVlOjpz
ZXRWYWwKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiAKICAgICBt
X2xlbmd0aFR5cGUgPSBsZW5ndGhUeXBlOwotICAgIG1fdmFsdWVJblNwZWNpZmllZFVuaXRzID0g
Y29udmVydGVkTnVtYmVyOworICAgIG1fdmFsdWVJblNwZWNpZmllZFVuaXRzID0gKmNvbnZlcnRl
ZE51bWJlcjsKICAgICByZXR1cm4geyB9OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHTnVtYmVyTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdOdW1i
ZXJMaXN0LmgJKHJldmlzaW9uIDI2MzE3NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdOdW1i
ZXJMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDYgQEAgcHVibGljOgogICAgIHsK
ICAgICAgICAgY2xlYXJJdGVtcygpOwogCi0gICAgICAgIGZsb2F0IG51bWJlciA9IDA7CiAgICAg
ICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyh2YWx1ZSkudXBjb252
ZXJ0ZWRDaGFyYWN0ZXJzKCk7CiAgICAgICAgIGNvbnN0IFVDaGFyKiBwdHIgPSB1cGNvbnZlcnRl
ZENoYXJhY3RlcnM7CiAgICAgICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBwdHIgKyB2YWx1ZS5sZW5n
dGgoKTsKQEAgLTYyLDkgKzYxLDEwIEBAIHB1YmxpYzoKICAgICAgICAgLy8gVGhlIHNwZWMgKHNl
Y3Rpb24gNC4xKSBzdHJhbmdlbHkgZG9lc24ndCBhbGxvdyBsZWFkaW5nIHdoaXRlc3BhY2UuCiAg
ICAgICAgIC8vIFdlIG1pZ2h0IGNob29zZSB0byB2aW9sYXRlIHRoYXQgaW50ZW50aW9uYWxseS4K
ICAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCkgewotICAgICAgICAgICAgaWYgKCFwYXJzZU51bWJl
cihwdHIsIGVuZCwgbnVtYmVyKSkKKyAgICAgICAgICAgIGF1dG8gbnVtYmVyID0gcGFyc2VOdW1i
ZXIocHRyLCBlbmQpOworICAgICAgICAgICAgaWYgKCFudW1iZXIpCiAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBhcHBlbmQoU1ZHTnVtYmVyOjpjcmVhdGUobnVtYmVyKSk7Cisg
ICAgICAgICAgICBhcHBlbmQoU1ZHTnVtYmVyOjpjcmVhdGUoKm51bWJlcikpOwogICAgICAgICB9
CiAKICAgICAgICAgcmV0dXJuIHB0ciA9PSBlbmQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHUGFyc2VyVXRpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHUGFyc2VyVXRpbGl0aWVzLmNwcAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDE5ICs0
MCwxOCBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgRmxvYXRUeXBlPiBzdGF0aWMgaW5sCiAvLyBXZSB1
c2UgdGhpcyBnZW5lcmljIHBhcnNlTnVtYmVyIGZ1bmN0aW9uIHRvIGFsbG93IHRoZSBQYXRoIHBh
cnNpbmcgY29kZSB0byB3b3JrIAogLy8gYXQgYSBoaWdoZXIgcHJlY2lzaW9uIGludGVybmFsbHks
IHdpdGhvdXQgYW55IHVubmVjZXNzYXJ5IHJ1bnRpbWUgY29zdCBvciBjb2RlCiAvLyBjb21wbGV4
aXR5LgotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHR5cGVuYW1lIEZsb2F0VHlw
ZT4gc3RhdGljIGJvb2wgZ2VuZXJpY1BhcnNlTnVtYmVyKGNvbnN0IENoYXJhY3RlclR5cGUqJiBw
dHIsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCwgRmxvYXRUeXBlJiBudW1iZXIsIGJvb2wgc2tp
cCkKKy8vIEZJWE1FOiBDYW4gdGhpcyBiZSBzaGFyZWQvcmVwbGFjZWQgd2l0aCBudW1iZXIgcGFy
c2luZyBpbiBXVEY/Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5hbWUg
RmxvYXRUeXBlID0gZmxvYXQ+IHN0YXRpYyBPcHRpb25hbDxGbG9hdFR5cGU+IGdlbmVyaWNQYXJz
ZU51bWJlcihjb25zdCBDaGFyYWN0ZXJUeXBlKiYgcHRyLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBl
bmQsIFN1ZmZpeFNraXBwaW5nUG9saWN5IHNraXAgPSBTdWZmaXhTa2lwcGluZ1BvbGljeTo6U2tp
cCkKIHsKLSAgICBGbG9hdFR5cGUgaW50ZWdlciwgZGVjaW1hbCwgZnJhYywgZXhwb25lbnQ7Ci0g
ICAgaW50IHNpZ24sIGV4cHNpZ247CisgICAgRmxvYXRUeXBlIG51bWJlciA9IDA7CisgICAgRmxv
YXRUeXBlIGludGVnZXIgPSAwOworICAgIEZsb2F0VHlwZSBkZWNpbWFsID0gMDsKKyAgICBGbG9h
dFR5cGUgZnJhYyA9IDE7CisgICAgRmxvYXRUeXBlIGV4cG9uZW50ID0gMDsKKyAgICBpbnQgc2ln
biA9IDE7CisgICAgaW50IGV4cHNpZ24gPSAxOwogICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIHN0
YXJ0ID0gcHRyOwogCi0gICAgZXhwb25lbnQgPSAwOwotICAgIGludGVnZXIgPSAwOwotICAgIGZy
YWMgPSAxOwotICAgIGRlY2ltYWwgPSAwOwotICAgIHNpZ24gPSAxOwotICAgIGV4cHNpZ24gPSAx
OwotCiAgICAgLy8gcmVhZCB0aGUgc2lnbgogICAgIGlmIChwdHIgPCBlbmQgJiYgKnB0ciA9PSAn
KycpCiAgICAgICAgIHB0cisrOwpAQCAtNjIsNyArNjEsNyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUg
Q2hhcmFjdGVyVHlwZSwgdHlwZW5hCiAgICAgfSAKICAgICAKICAgICBpZiAocHRyID09IGVuZCB8
fCAoIWlzQVNDSUlEaWdpdCgqcHRyKSAmJiAqcHRyICE9ICcuJykpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIC8vIHJlYWQgdGhlIGlu
dGVnZXIgcGFydCwgYnVpbGQgcmlnaHQtdG8tbGVmdAogICAgIGNvbnN0IENoYXJhY3RlclR5cGUq
IHB0clN0YXJ0SW50UGFydCA9IHB0cjsKQEAgLTc4LDcgKzc3LDcgQEAgdGVtcGxhdGUgPHR5cGVu
YW1lIENoYXJhY3RlclR5cGUsIHR5cGVuYQogICAgICAgICB9CiAgICAgICAgIC8vIEJhaWwgb3V0
IGVhcmx5IGlmIHRoaXMgb3ZlcmZsb3dzLgogICAgICAgICBpZiAoIWlzVmFsaWRSYW5nZShpbnRl
Z2VyKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAgICAgfQogCiAgICAgaWYgKHB0ciA8IGVuZCAmJiAqcHRyID09ICcuJykgeyAv
LyByZWFkIHRoZSBkZWNpbWFscwpAQCAtODYsNyArODUsNyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUg
Q2hhcmFjdGVyVHlwZSwgdHlwZW5hCiAgICAgICAgIAogICAgICAgICAvLyBUaGVyZSBtdXN0IGJl
IGEgbGVhc3Qgb25lIGRpZ2l0IGZvbGxvd2luZyB0aGUgLgogICAgICAgICBpZiAocHRyID49IGVu
ZCB8fCAhaXNBU0NJSURpZ2l0KCpwdHIpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgCiAgICAgICAgIHdoaWxlIChw
dHIgPCBlbmQgJiYgaXNBU0NJSURpZ2l0KCpwdHIpKQogICAgICAgICAgICAgZGVjaW1hbCArPSAo
KihwdHIrKykgLSAnMCcpICogKGZyYWMgKj0gc3RhdGljX2Nhc3Q8RmxvYXRUeXBlPigwLjEpKTsK
QEAgLTEwNyw3ICsxMDYsNyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlw
ZW5hCiAgICAgICAgIAogICAgICAgICAvLyBUaGVyZSBtdXN0IGJlIGFuIGV4cG9uZW50CiAgICAg
ICAgIGlmIChwdHIgPj0gZW5kIHx8ICFpc0FTQ0lJRGlnaXQoKnB0cikpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgICAg
IHdoaWxlIChwdHIgPCBlbmQgJiYgaXNBU0NJSURpZ2l0KCpwdHIpKSB7CiAgICAgICAgICAgICBl
eHBvbmVudCAqPSBzdGF0aWNfY2FzdDxGbG9hdFR5cGU+KDEwKTsKQEAgLTExNiw3ICsxMTUsNyBA
QCB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5hCiAgICAgICAgIH0KICAg
ICAgICAgLy8gTWFrZSBzdXJlIGV4cG9uZW50IGlzIHZhbGlkLgogICAgICAgICBpZiAoIWlzVmFs
aWRSYW5nZShleHBvbmVudCkgfHwgZXhwb25lbnQgPiBzdGQ6Om51bWVyaWNfbGltaXRzPEZsb2F0
VHlwZT46Om1heF9leHBvbmVudCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQogCiAgICAgbnVtYmVyID0gaW50ZWdlciAr
IGRlY2ltYWw7CkBAIC0xMjcsMTQyICsxMjYsMTQ3IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlLCB0eXBlbmEKIAogICAgIC8vIERvbid0IHJldHVybiBJbmZpbml0eSgpIG9yIE5h
TigpLgogICAgIGlmICghaXNWYWxpZFJhbmdlKG51bWJlcikpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIGlmIChzdGFydCA9PSBwdHIp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAot
ICAgIGlmIChza2lwKQorICAgIGlmIChza2lwID09IFN1ZmZpeFNraXBwaW5nUG9saWN5OjpTa2lw
KQogICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXNPckRlbGltaXRlcihwdHIsIGVuZCk7CiAK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+
Ci1ib29sIHBhcnNlU1ZHTnVtYmVyKENoYXJhY3RlclR5cGUqIGJlZ2luLCBzaXplX3QgbGVuZ3Ro
LCBkb3VibGUmIG51bWJlcikKLXsKLSAgICBjb25zdCBDaGFyYWN0ZXJUeXBlKiBwdHIgPSBiZWdp
bjsKLSAgICBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQgPSBwdHIgKyBsZW5ndGg7Ci0gICAgcmV0
dXJuIGdlbmVyaWNQYXJzZU51bWJlcihwdHIsIGVuZCwgbnVtYmVyLCBmYWxzZSk7CisgICAgcmV0
dXJuIG51bWJlcjsKIH0KIAotLy8gRXhwbGljaXRseSBpbnN0YW50aWF0ZSB0aGUgdHdvIGZsYXZv
cnMgb2YgcGFyc2VTVkdOdW1iZXIoKSB0byBzYXRpc2Z5IGV4dGVybmFsIGNhbGxlcnMKLXRlbXBs
YXRlIGJvb2wgcGFyc2VTVkdOdW1iZXIoTENoYXIqIGJlZ2luLCBzaXplX3QgbGVuZ3RoLCBkb3Vi
bGUmKTsKLXRlbXBsYXRlIGJvb2wgcGFyc2VTVkdOdW1iZXIoVUNoYXIqIGJlZ2luLCBzaXplX3Qg
bGVuZ3RoLCBkb3VibGUmKTsKLQotYm9vbCBwYXJzZU51bWJlcihjb25zdCBMQ2hhciomIHB0ciwg
Y29uc3QgTENoYXIqIGVuZCwgZmxvYXQmIG51bWJlciwgYm9vbCBza2lwKQorT3B0aW9uYWw8Zmxv
YXQ+IHBhcnNlTnVtYmVyKGNvbnN0IExDaGFyKiYgcHRyLCBjb25zdCBMQ2hhciogZW5kLCBTdWZm
aXhTa2lwcGluZ1BvbGljeSBza2lwKQogewotICAgIHJldHVybiBnZW5lcmljUGFyc2VOdW1iZXIo
cHRyLCBlbmQsIG51bWJlciwgc2tpcCk7CisgICAgcmV0dXJuIGdlbmVyaWNQYXJzZU51bWJlcihw
dHIsIGVuZCwgc2tpcCk7CiB9CiAKLWJvb2wgcGFyc2VOdW1iZXIoY29uc3QgVUNoYXIqJiBwdHIs
IGNvbnN0IFVDaGFyKiBlbmQsIGZsb2F0JiBudW1iZXIsIGJvb2wgc2tpcCkgCitPcHRpb25hbDxm
bG9hdD4gcGFyc2VOdW1iZXIoY29uc3QgVUNoYXIqJiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQsIFN1
ZmZpeFNraXBwaW5nUG9saWN5IHNraXApCiB7Ci0gICAgcmV0dXJuIGdlbmVyaWNQYXJzZU51bWJl
cihwdHIsIGVuZCwgbnVtYmVyLCBza2lwKTsKKyAgICByZXR1cm4gZ2VuZXJpY1BhcnNlTnVtYmVy
KHB0ciwgZW5kLCBza2lwKTsKIH0KIAotYm9vbCBwYXJzZU51bWJlckZyb21TdHJpbmcoY29uc3Qg
U3RyaW5nJiBzdHJpbmcsIGZsb2F0JiBudW1iZXIsIGJvb2wgc2tpcCkKK09wdGlvbmFsPGZsb2F0
PiBwYXJzZU51bWJlcihjb25zdCBTdHJpbmcmIHN0cmluZywgU3VmZml4U2tpcHBpbmdQb2xpY3kg
c2tpcCkKIHsKICAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcoc3Ry
aW5nKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKICAgICBjb25zdCBVQ2hhciogcHRyID0gdXBj
b252ZXJ0ZWRDaGFyYWN0ZXJzOwogICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBwdHIgKyBzdHJpbmcu
bGVuZ3RoKCk7Ci0gICAgcmV0dXJuIGdlbmVyaWNQYXJzZU51bWJlcihwdHIsIGVuZCwgbnVtYmVy
LCBza2lwKSAmJiBwdHIgPT0gZW5kOworICAgIGF1dG8gcmVzdWx0ID0gZ2VuZXJpY1BhcnNlTnVt
YmVyKHB0ciwgZW5kLCBza2lwKTsKKyAgICBpZiAocHRyICE9IGVuZCkKKyAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAvLyBvbmx5IHVzZWQgdG8g
cGFyc2UgbGFyZ2VBcmNGbGFnIGFuZCBzd2VlcEZsYWcgd2hpY2ggbXVzdCBiZSBhICIwIiBvciAi
MSIKIC8vIGFuZCBtaWdodCBub3QgaGF2ZSBhbnkgd2hpdGVzcGFjZS9jb21tYSBhZnRlciBpdAot
dGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1ib29sIGdlbmVyaWNQYXJzZUFyY0Zs
YWcoY29uc3QgQ2hhcmFjdGVyVHlwZSomIHB0ciwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kLCBi
b29sJiBmbGFnKQordGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IE9wdGlvbmFsPGJv
b2w+IGdlbmVyaWNQYXJzZUFyY0ZsYWcoY29uc3QgQ2hhcmFjdGVyVHlwZSomIHB0ciwgY29uc3Qg
Q2hhcmFjdGVyVHlwZSogZW5kKQogewogICAgIGlmIChwdHIgPj0gZW5kKQotICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKICAgICBjb25zdCBDaGFy
YWN0ZXJUeXBlIGZsYWdDaGFyID0gKnB0cisrOworCisgICAgYm9vbCBmbGFnOwogICAgIGlmIChm
bGFnQ2hhciA9PSAnMCcpCiAgICAgICAgIGZsYWcgPSBmYWxzZTsKICAgICBlbHNlIGlmIChmbGFn
Q2hhciA9PSAnMScpCiAgICAgICAgIGZsYWcgPSB0cnVlOwogICAgIGVsc2UKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIAorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCiAgICAgc2tp
cE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxpbWl0ZXIocHRyLCBlbmQpOwogICAgIAotICAgIHJldHVy
biB0cnVlOworICAgIHJldHVybiBmbGFnOwogfQogCi1ib29sIHBhcnNlQXJjRmxhZyhjb25zdCBM
Q2hhciomIHB0ciwgY29uc3QgTENoYXIqIGVuZCwgYm9vbCYgZmxhZykKK09wdGlvbmFsPGJvb2w+
IHBhcnNlQXJjRmxhZyhjb25zdCBMQ2hhciomIHB0ciwgY29uc3QgTENoYXIqIGVuZCkKIHsKLSAg
ICByZXR1cm4gZ2VuZXJpY1BhcnNlQXJjRmxhZyhwdHIsIGVuZCwgZmxhZyk7CisgICAgcmV0dXJu
IGdlbmVyaWNQYXJzZUFyY0ZsYWcocHRyLCBlbmQpOwogfQogCi1ib29sIHBhcnNlQXJjRmxhZyhj
b25zdCBVQ2hhciomIHB0ciwgY29uc3QgVUNoYXIqIGVuZCwgYm9vbCYgZmxhZykKK09wdGlvbmFs
PGJvb2w+IHBhcnNlQXJjRmxhZyhjb25zdCBVQ2hhciomIHB0ciwgY29uc3QgVUNoYXIqIGVuZCkK
IHsKLSAgICByZXR1cm4gZ2VuZXJpY1BhcnNlQXJjRmxhZyhwdHIsIGVuZCwgZmxhZyk7CisgICAg
cmV0dXJuIGdlbmVyaWNQYXJzZUFyY0ZsYWcocHRyLCBlbmQpOwogfQogCi1ib29sIHBhcnNlTnVt
YmVyT3B0aW9uYWxOdW1iZXIoY29uc3QgU3RyaW5nJiBzLCBmbG9hdCYgeCwgZmxvYXQmIHkpCitP
cHRpb25hbDxzdGQ6OnBhaXI8ZmxvYXQsIGZsb2F0Pj4gcGFyc2VOdW1iZXJPcHRpb25hbE51bWJl
cihjb25zdCBTdHJpbmcmIHMpCiB7CiAgICAgaWYgKHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBhdXRvIHVwY29u
dmVydGVkQ2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcocykudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7
CiAgICAgY29uc3QgVUNoYXIqIGN1ciA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKICAgICBjb25z
dCBVQ2hhciogZW5kID0gY3VyICsgcy5sZW5ndGgoKTsKIAotICAgIGlmICghcGFyc2VOdW1iZXIo
Y3VyLCBlbmQsIHgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYXV0byB4ID0gcGFyc2VO
dW1iZXIoY3VyLCBlbmQpOworICAgIGlmICgheCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKIAogICAgIGlmIChjdXIgPT0gZW5kKQotICAgICAgICB5ID0geDsKLSAgICBlbHNlIGlmICgh
cGFyc2VOdW1iZXIoY3VyLCBlbmQsIHksIGZhbHNlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoKngsICp4KTsKIAotICAgIHJldHVybiBjdXIg
PT0gZW5kOworICAgIGF1dG8geSA9IHBhcnNlTnVtYmVyKGN1ciwgZW5kLCBTdWZmaXhTa2lwcGlu
Z1BvbGljeTo6RG9udFNraXApOworICAgIGlmICgheSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKworICAgIGlmIChjdXIgIT0gZW5kKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworCisgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKCp4LCAqeSk7CiB9CiAKLWJvb2wgcGFyc2VQ
b2ludChjb25zdCBTdHJpbmcmIHMsIEZsb2F0UG9pbnQmIHBvaW50KQorT3B0aW9uYWw8RmxvYXRQ
b2ludD4gcGFyc2VQb2ludChjb25zdCBTdHJpbmcmIHMpCiB7CiAgICAgaWYgKHMuaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisK
ICAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcocykudXBjb252ZXJ0
ZWRDaGFyYWN0ZXJzKCk7CiAgICAgY29uc3QgVUNoYXIqIGN1ciA9IHVwY29udmVydGVkQ2hhcmFj
dGVyczsKICAgICBjb25zdCBVQ2hhciogZW5kID0gY3VyICsgcy5sZW5ndGgoKTsKIAogICAgIGlm
ICghc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGN1ciwgZW5kKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgZmxvYXQgeCA9IDA7Ci0gICAg
aWYgKCFwYXJzZU51bWJlcihjdXIsIGVuZCwgeCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIGZsb2F0IHkgPSAwOwotICAgIGlmICghcGFyc2VOdW1iZXIoY3VyLCBlbmQsIHkpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBwb2ludCA9IEZsb2F0UG9pbnQoeCwgeSk7CisgICAg
YXV0byBwb2ludCA9IHBhcnNlRmxvYXRQb2ludChjdXIsIGVuZCk7CisgICAgaWYgKCFwb2ludCkK
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIC8vIERpc2FsbG93IGFueXRoaW5n
IGV4Y2VwdCBzcGFjZXMgYXQgdGhlIGVuZC4KLSAgICByZXR1cm4gIXNraXBPcHRpb25hbFNWR1Nw
YWNlcyhjdXIsIGVuZCk7CisgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGN1ciwgZW5kKTsKKyAg
ICAKKyAgICByZXR1cm4gcG9pbnQ7CiB9CiAKLWJvb2wgcGFyc2VSZWN0KGNvbnN0IFN0cmluZyYg
c3RyaW5nLCBGbG9hdFJlY3QmIHJlY3QpCitPcHRpb25hbDxGbG9hdFJlY3Q+IHBhcnNlUmVjdChj
b25zdCBTdHJpbmcmIHN0cmluZykKIHsKICAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9
IFN0cmluZ1ZpZXcoc3RyaW5nKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKICAgICBjb25zdCBV
Q2hhciogcHRyID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOwogICAgIGNvbnN0IFVDaGFyKiBlbmQg
PSBwdHIgKyBzdHJpbmcubGVuZ3RoKCk7CisgICAgCiAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2Vz
KHB0ciwgZW5kKTsKICAgICAKLSAgICBmbG9hdCB4ID0gMDsKLSAgICBmbG9hdCB5ID0gMDsKLSAg
ICBmbG9hdCB3aWR0aCA9IDA7Ci0gICAgZmxvYXQgaGVpZ2h0ID0gMDsKLSAgICBib29sIHZhbGlk
ID0gcGFyc2VOdW1iZXIocHRyLCBlbmQsIHgpICYmIHBhcnNlTnVtYmVyKHB0ciwgZW5kLCB5KSAm
JiBwYXJzZU51bWJlcihwdHIsIGVuZCwgd2lkdGgpICYmIHBhcnNlTnVtYmVyKHB0ciwgZW5kLCBo
ZWlnaHQsIGZhbHNlKTsKLSAgICByZWN0ID0gRmxvYXRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQp
OwotICAgIHJldHVybiB2YWxpZDsKKyAgICBhdXRvIHggPSBwYXJzZU51bWJlcihwdHIsIGVuZCk7
CisgICAgaWYgKCF4KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGF1dG8geSA9
IHBhcnNlTnVtYmVyKHB0ciwgZW5kKTsKKyAgICBpZiAoIXkpCisgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisgICAgYXV0byB3aWR0aCA9IHBhcnNlTnVtYmVyKHB0ciwgZW5kKTsKKyAgICBp
ZiAoIXdpZHRoKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGF1dG8gaGVpZ2h0
ID0gcGFyc2VOdW1iZXIocHRyLCBlbmQsIFN1ZmZpeFNraXBwaW5nUG9saWN5OjpEb250U2tpcCk7
CisgICAgaWYgKCFoZWlnaHQpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBy
ZXR1cm4gRmxvYXRSZWN0IHsgKngsICp5LCAqd2lkdGgsICpoZWlnaHQgfTsKIH0KIAotYm9vbCBw
YXJzZUdseXBoTmFtZShjb25zdCBTdHJpbmcmIGlucHV0LCBIYXNoU2V0PFN0cmluZz4mIHZhbHVl
cykKK09wdGlvbmFsPEhhc2hTZXQ8U3RyaW5nPj4gcGFyc2VHbHlwaE5hbWUoY29uc3QgU3RyaW5n
JiBpbnB1dCkKIHsKICAgICAvLyBGSVhNRTogUGFyc2luZyBlcnJvciBkZXRlY3Rpb24gaXMgbWlz
c2luZy4KLSAgICB2YWx1ZXMuY2xlYXIoKTsKKworICAgIEhhc2hTZXQ8U3RyaW5nPiB2YWx1ZXM7
CiAKICAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcoaW5wdXQpLnVw
Y29udmVydGVkQ2hhcmFjdGVycygpOwogICAgIGNvbnN0IFVDaGFyKiBwdHIgPSB1cGNvbnZlcnRl
ZENoYXJhY3RlcnM7CkBAIC0yODcsMTMgKzI5MSwxMyBAQCBib29sIHBhcnNlR2x5cGhOYW1lKGNv
bnN0IFN0cmluZyYgaW5wdXQsCiAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVsaW1p
dGVyKHB0ciwgZW5kLCAnLCcpOwogICAgIH0KIAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVy
biB2YWx1ZXM7CiB9CiAKLXN0YXRpYyBib29sIHBhcnNlVW5pY29kZVJhbmdlKGNvbnN0IFVDaGFy
KiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIFVuaWNvZGVSYW5nZSYgcmFuZ2UpCitzdGF0
aWMgT3B0aW9uYWw8VW5pY29kZVJhbmdlPiBwYXJzZVVuaWNvZGVSYW5nZShjb25zdCBVQ2hhciog
Y2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIGlmIChsZW5ndGggPCAyIHx8IGNo
YXJhY3RlcnNbMF0gIT0gJ1UnIHx8IGNoYXJhY3RlcnNbMV0gIT0gJysnKQotICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgCiAgICAgLy8gUGFy
c2UgdGhlIHN0YXJ0aW5nIGhleCBudW1iZXIgKG9yIGl0cyBwcmVmaXgpLgogICAgIHVuc2lnbmVk
IHN0YXJ0UmFuZ2UgPSAwOwpAQCAtMzA2LDE1ICszMTAsMTUgQEAgc3RhdGljIGJvb2wgcGFyc2VV
bmljb2RlUmFuZ2UoY29uc3QgVUNoYQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICsrc3Rh
cnRMZW5ndGg7CiAgICAgICAgIGlmIChzdGFydExlbmd0aCA+IDYpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICBzdGFy
dFJhbmdlID0gKHN0YXJ0UmFuZ2UgPDwgNCkgfCB0b0FTQ0lJSGV4VmFsdWUoKnB0cik7CiAgICAg
ICAgICsrcHRyOwogICAgIH0KLSAgICAKKwogICAgIC8vIEhhbmRsZSB0aGUgY2FzZSBvZiByYW5n
ZXMgc2VwYXJhdGVkIGJ5ICItIiBzaWduLgogICAgIGlmICgyICsgc3RhcnRMZW5ndGggPCBsZW5n
dGggJiYgKnB0ciA9PSAnLScpIHsKICAgICAgICAgaWYgKCFzdGFydExlbmd0aCkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAg
ICAgIAogICAgICAgICAvLyBQYXJzZSB0aGUgZW5kaW5nIGhleCBudW1iZXIgKG9yIGl0cyBwcmVm
aXgpLgogICAgICAgICB1bnNpZ25lZCBlbmRSYW5nZSA9IDA7CkBAIC0zMjUsMTcgKzMyOSwxOCBA
QCBzdGF0aWMgYm9vbCBwYXJzZVVuaWNvZGVSYW5nZShjb25zdCBVQ2hhCiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICArK2VuZExlbmd0aDsKICAgICAgICAgICAgIGlmIChlbmRM
ZW5ndGggPiA2KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICAgICAgZW5kUmFuZ2UgPSAoZW5kUmFuZ2Ug
PDwgNCkgfCB0b0FTQ0lJSGV4VmFsdWUoKnB0cik7CiAgICAgICAgICAgICArK3B0cjsKICAgICAg
ICAgfQogICAgICAgICAKICAgICAgICAgaWYgKCFlbmRMZW5ndGgpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICAKKyAg
ICAgICAgVW5pY29kZVJhbmdlIHJhbmdlOwogICAgICAgICByYW5nZS5maXJzdCA9IHN0YXJ0UmFu
Z2U7CiAgICAgICAgIHJhbmdlLnNlY29uZCA9IGVuZFJhbmdlOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgIH0KICAgICAKICAgICAvLyBIYW5kbGUgdGhl
IGNhc2Ugb2YgYSBudW1iZXIgd2l0aCBzb21lIG9wdGlvbmFsIHRyYWlsaW5nIHF1ZXN0aW9uIG1h
cmtzLgpAQCAtMzQ1LDI3ICszNTAsMzIgQEAgc3RhdGljIGJvb2wgcGFyc2VVbmljb2RlUmFuZ2Uo
Y29uc3QgVUNoYQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICsrc3RhcnRMZW5ndGg7CiAg
ICAgICAgIGlmIChzdGFydExlbmd0aCA+IDYpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICBzdGFydFJhbmdlIDw8PSA0
OwogICAgICAgICBlbmRSYW5nZSA9IChlbmRSYW5nZSA8PCA0KSB8IDB4RjsKICAgICAgICAgKytw
dHI7CiAgICAgfQogICAgIAogICAgIGlmICghc3RhcnRMZW5ndGgpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAKKyAgICBVbmljb2RlUmFu
Z2UgcmFuZ2U7CiAgICAgcmFuZ2UuZmlyc3QgPSBzdGFydFJhbmdlOwogICAgIHJhbmdlLnNlY29u
ZCA9IGVuZFJhbmdlOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiByYW5nZTsKIH0KIAot
Ym9vbCBwYXJzZUtlcm5pbmdVbmljb2RlU3RyaW5nKGNvbnN0IFN0cmluZyYgaW5wdXQsIFVuaWNv
ZGVSYW5nZXMmIHJhbmdlTGlzdCwgSGFzaFNldDxTdHJpbmc+JiBzdHJpbmdMaXN0KQorT3B0aW9u
YWw8c3RkOjpwYWlyPFVuaWNvZGVSYW5nZXMsIEhhc2hTZXQ8U3RyaW5nPj4+IHBhcnNlS2Vybmlu
Z1VuaWNvZGVTdHJpbmcoY29uc3QgU3RyaW5nJiBpbnB1dCkKIHsKICAgICAvLyBGSVhNRTogUGFy
c2luZyBlcnJvciBkZXRlY3Rpb24gaXMgbWlzc2luZy4KKwogICAgIGF1dG8gdXBjb252ZXJ0ZWRD
aGFyYWN0ZXJzID0gU3RyaW5nVmlldyhpbnB1dCkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7CiAg
ICAgY29uc3QgVUNoYXIqIHB0ciA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKICAgICBjb25zdCBV
Q2hhciogZW5kID0gcHRyICsgaW5wdXQubGVuZ3RoKCk7CiAKKyAgICBVbmljb2RlUmFuZ2VzIHJh
bmdlTGlzdDsKKyAgICBIYXNoU2V0PFN0cmluZz4gc3RyaW5nTGlzdDsKKwogICAgIHdoaWxlIChw
dHIgPCBlbmQpIHsKICAgICAgICAgY29uc3QgVUNoYXIqIGlucHV0U3RhcnQgPSBwdHI7CiAgICAg
ICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgKnB0ciAhPSAnLCcpCkBAIC0zNzUsMTA1ICszODUsMzcg
QEAgYm9vbCBwYXJzZUtlcm5pbmdVbmljb2RlU3RyaW5nKGNvbnN0IFN0cgogICAgICAgICAgICAg
YnJlYWs7CiAKICAgICAgICAgLy8gVHJ5IHRvIHBhcnNlIHVuaWNvZGUgcmFuZ2UgZmlyc3QKLSAg
ICAgICAgVW5pY29kZVJhbmdlIHJhbmdlOwotICAgICAgICBpZiAocGFyc2VVbmljb2RlUmFuZ2Uo
aW5wdXRTdGFydCwgcHRyIC0gaW5wdXRTdGFydCwgcmFuZ2UpKQotICAgICAgICAgICAgcmFuZ2VM
aXN0LmFwcGVuZChyYW5nZSk7CisgICAgICAgIGlmIChhdXRvIHJhbmdlID0gcGFyc2VVbmljb2Rl
UmFuZ2UoaW5wdXRTdGFydCwgcHRyIC0gaW5wdXRTdGFydCkpCisgICAgICAgICAgICByYW5nZUxp
c3QuYXBwZW5kKFdURk1vdmUoKnJhbmdlKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHN0
cmluZ0xpc3QuYWRkKFN0cmluZyhpbnB1dFN0YXJ0LCBwdHIgLSBpbnB1dFN0YXJ0KSk7CiAgICAg
ICAgICsrcHRyOwogICAgIH0KIAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBzdGQ6Om1h
a2VfcGFpcihyYW5nZUxpc3QsIHN0cmluZ0xpc3QpOwogfQogCi1WZWN0b3I8U3RyaW5nPiBwYXJz
ZURlbGltaXRlZFN0cmluZyhjb25zdCBTdHJpbmcmIGlucHV0LCBjb25zdCBjaGFyIHNlcGVyYXRv
cikKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgT3B0aW9uYWw8Rmxv
YXRQb2ludD4gZ2VuZXJpY1BhcnNlRmxvYXRQb2ludChjb25zdCBDaGFyYWN0ZXJUeXBlKiYgY3Vy
cmVudCwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kKQogewotICAgIFZlY3RvcjxTdHJpbmc+IHZh
bHVlczsKLQotICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyhpbnB1
dCkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIqIHB0ciA9IHVwY29u
dmVydGVkQ2hhcmFjdGVyczsKLSAgICBjb25zdCBVQ2hhciogZW5kID0gcHRyICsgaW5wdXQubGVu
Z3RoKCk7Ci0gICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHB0ciwgZW5kKTsKLQotICAgIHdoaWxl
IChwdHIgPCBlbmQpIHsKLSAgICAgICAgLy8gTGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGUgc3Bh
Y2UsIGFuZCB3aGl0ZSBzcGFjZSBiZWZvcmUgYW5kIGFmdGVyIHNlbWljb2xvbiBzZXBhcmF0b3Jz
LCB3aWxsIGJlIGlnbm9yZWQuCi0gICAgICAgIGNvbnN0IFVDaGFyKiBpbnB1dFN0YXJ0ID0gcHRy
OwotICAgICAgICB3aGlsZSAocHRyIDwgZW5kICYmICpwdHIgIT0gc2VwZXJhdG9yKSAvLyBjYXJl
ZnVsIG5vdCB0byBpZ25vcmUgd2hpdGVzcGFjZSBpbnNpZGUgaW5wdXRzCi0gICAgICAgICAgICBw
dHIrKzsKKyAgICBhdXRvIHggPSBwYXJzZU51bWJlcihjdXJyZW50LCBlbmQpOworICAgIGlmICgh
eCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgICAgICBpZiAocHRyID09IGlu
cHV0U3RhcnQpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAvLyB3YWxrIGJhY2t3YXJk
cyBmcm9tIHRoZSA7IHRvIGlnbm9yZSBhbnkgd2hpdGVzcGFjZQotICAgICAgICBjb25zdCBVQ2hh
ciogaW5wdXRFbmQgPSBwdHIgLSAxOwotICAgICAgICB3aGlsZSAoaW5wdXRTdGFydCA8IGlucHV0
RW5kICYmIGlzU1ZHU3BhY2UoKmlucHV0RW5kKSkKLSAgICAgICAgICAgIGlucHV0RW5kLS07Cisg
ICAgYXV0byB5ID0gcGFyc2VOdW1iZXIoY3VycmVudCwgZW5kKTsKKyAgICBpZiAoIXkpCisgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICAgICAgdmFsdWVzLmFwcGVuZChTdHJpbmco
aW5wdXRTdGFydCwgaW5wdXRFbmQgLSBpbnB1dFN0YXJ0ICsgMSkpOwotICAgICAgICBza2lwT3B0
aW9uYWxTVkdTcGFjZXNPckRlbGltaXRlcihwdHIsIGVuZCwgc2VwZXJhdG9yKTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gdmFsdWVzOworICAgIHJldHVybiBGbG9hdFBvaW50IHsgKngsICp5IH07CiB9
CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotYm9vbCBwYXJzZUZsb2F0UG9p
bnQoY29uc3QgQ2hhcmFjdGVyVHlwZSomIGN1cnJlbnQsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVu
ZCwgRmxvYXRQb2ludCYgcG9pbnQpCitPcHRpb25hbDxGbG9hdFBvaW50PiBwYXJzZUZsb2F0UG9p
bnQoY29uc3QgTENoYXIqJiBjdXJyZW50LCBjb25zdCBMQ2hhciogZW5kKQogewotICAgIGZsb2F0
IHg7Ci0gICAgZmxvYXQgeTsKLSAgICBpZiAoIXBhcnNlTnVtYmVyKGN1cnJlbnQsIGVuZCwgeCkK
LSAgICAgICAgfHwgIXBhcnNlTnVtYmVyKGN1cnJlbnQsIGVuZCwgeSkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBwb2ludCA9IEZsb2F0UG9pbnQoeCwgeSk7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLXRlbXBsYXRlIGJvb2wgcGFyc2VGbG9hdFBvaW50KGNvbnN0IExDaGFyKiYgY3VycmVu
dCwgY29uc3QgTENoYXIqIGVuZCwgRmxvYXRQb2ludCYgcG9pbnQxKTsKLXRlbXBsYXRlIGJvb2wg
cGFyc2VGbG9hdFBvaW50KGNvbnN0IFVDaGFyKiYgY3VycmVudCwgY29uc3QgVUNoYXIqIGVuZCwg
RmxvYXRQb2ludCYgcG9pbnQxKTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+
Ci1pbmxpbmUgYm9vbCBwYXJzZUZsb2F0UG9pbnQyKGNvbnN0IENoYXJhY3RlclR5cGUqJiBjdXJy
ZW50LCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQsIEZsb2F0UG9pbnQmIHBvaW50MSwgRmxvYXRQ
b2ludCYgcG9pbnQyKQotewotICAgIGZsb2F0IHgxOwotICAgIGZsb2F0IHkxOwotICAgIGZsb2F0
IHgyOwotICAgIGZsb2F0IHkyOwotICAgIGlmICghcGFyc2VOdW1iZXIoY3VycmVudCwgZW5kLCB4
MSkKLSAgICAgICAgfHwgIXBhcnNlTnVtYmVyKGN1cnJlbnQsIGVuZCwgeTEpCi0gICAgICAgIHx8
ICFwYXJzZU51bWJlcihjdXJyZW50LCBlbmQsIHgyKQotICAgICAgICB8fCAhcGFyc2VOdW1iZXIo
Y3VycmVudCwgZW5kLCB5MikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBwb2ludDEgPSBG
bG9hdFBvaW50KHgxLCB5MSk7Ci0gICAgcG9pbnQyID0gRmxvYXRQb2ludCh4MiwgeTIpOwotICAg
IHJldHVybiB0cnVlOwotfQotCi10ZW1wbGF0ZSBib29sIHBhcnNlRmxvYXRQb2ludDIoY29uc3Qg
TENoYXIqJiBjdXJyZW50LCBjb25zdCBMQ2hhciogZW5kLCBGbG9hdFBvaW50JiBwb2ludDEsIEZs
b2F0UG9pbnQmIHBvaW50Mik7Ci10ZW1wbGF0ZSBib29sIHBhcnNlRmxvYXRQb2ludDIoY29uc3Qg
VUNoYXIqJiBjdXJyZW50LCBjb25zdCBVQ2hhciogZW5kLCBGbG9hdFBvaW50JiBwb2ludDEsIEZs
b2F0UG9pbnQmIHBvaW50Mik7Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgot
Ym9vbCBwYXJzZUZsb2F0UG9pbnQzKGNvbnN0IENoYXJhY3RlclR5cGUqJiBjdXJyZW50LCBjb25z
dCBDaGFyYWN0ZXJUeXBlKiBlbmQsIEZsb2F0UG9pbnQmIHBvaW50MSwgRmxvYXRQb2ludCYgcG9p
bnQyLCBGbG9hdFBvaW50JiBwb2ludDMpCi17Ci0gICAgZmxvYXQgeDE7Ci0gICAgZmxvYXQgeTE7
Ci0gICAgZmxvYXQgeDI7Ci0gICAgZmxvYXQgeTI7Ci0gICAgZmxvYXQgeDM7Ci0gICAgZmxvYXQg
eTM7Ci0gICAgaWYgKCFwYXJzZU51bWJlcihjdXJyZW50LCBlbmQsIHgxKQotICAgICAgICB8fCAh
cGFyc2VOdW1iZXIoY3VycmVudCwgZW5kLCB5MSkKLSAgICAgICAgfHwgIXBhcnNlTnVtYmVyKGN1
cnJlbnQsIGVuZCwgeDIpCi0gICAgICAgIHx8ICFwYXJzZU51bWJlcihjdXJyZW50LCBlbmQsIHky
KQotICAgICAgICB8fCAhcGFyc2VOdW1iZXIoY3VycmVudCwgZW5kLCB4MykKLSAgICAgICAgfHwg
IXBhcnNlTnVtYmVyKGN1cnJlbnQsIGVuZCwgeTMpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgcG9pbnQxID0gRmxvYXRQb2ludCh4MSwgeTEpOwotICAgIHBvaW50MiA9IEZsb2F0UG9pbnQo
eDIsIHkyKTsKLSAgICBwb2ludDMgPSBGbG9hdFBvaW50KHgzLCB5Myk7Ci0gICAgcmV0dXJuIHRy
dWU7CisgICAgcmV0dXJuIGdlbmVyaWNQYXJzZUZsb2F0UG9pbnQoY3VycmVudCwgZW5kKTsKIH0K
IAotdGVtcGxhdGUgYm9vbCBwYXJzZUZsb2F0UG9pbnQzKGNvbnN0IExDaGFyKiYgY3VycmVudCwg
Y29uc3QgTENoYXIqIGVuZCwgRmxvYXRQb2ludCYgcG9pbnQxLCBGbG9hdFBvaW50JiBwb2ludDIs
IEZsb2F0UG9pbnQmIHBvaW50Myk7Ci10ZW1wbGF0ZSBib29sIHBhcnNlRmxvYXRQb2ludDMoY29u
c3QgVUNoYXIqJiBjdXJyZW50LCBjb25zdCBVQ2hhciogZW5kLCBGbG9hdFBvaW50JiBwb2ludDEs
IEZsb2F0UG9pbnQmIHBvaW50MiwgRmxvYXRQb2ludCYgcG9pbnQzKTsKK09wdGlvbmFsPEZsb2F0
UG9pbnQ+IHBhcnNlRmxvYXRQb2ludChjb25zdCBVQ2hhciomIGN1cnJlbnQsIGNvbnN0IFVDaGFy
KiBlbmQpCit7CisgICAgcmV0dXJuIGdlbmVyaWNQYXJzZUZsb2F0UG9pbnQoY3VycmVudCwgZW5k
KTsKK30KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXJzZXJVdGlsaXRpZXMuaAko
cmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhcnNlclV0aWxpdGll
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBACiAjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCi10eXBlZGVmIHN0ZDo6cGFp
cjx1bnNpZ25lZCwgdW5zaWduZWQ+IFVuaWNvZGVSYW5nZTsKK3R5cGVkZWYgc3RkOjpwYWlyPFVD
aGFyMzIsIFVDaGFyMzI+IFVuaWNvZGVSYW5nZTsKIHR5cGVkZWYgVmVjdG9yPFVuaWNvZGVSYW5n
ZT4gVW5pY29kZVJhbmdlczsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzMsNDIgKzMzLDQ1
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEZsb2F0UG9pbnQ7CiBjbGFzcyBGbG9hdFJl
Y3Q7CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotYm9vbCBwYXJzZVNWR051
bWJlcihDaGFyYWN0ZXJUeXBlKiBwdHIsIHNpemVfdCBsZW5ndGgsIGRvdWJsZSYgbnVtYmVyKTsK
LWJvb2wgcGFyc2VOdW1iZXIoY29uc3QgTENoYXIqJiBwdHIsIGNvbnN0IExDaGFyKiBlbmQsIGZs
b2F0JiBudW1iZXIsIGJvb2wgc2tpcCA9IHRydWUpOwotYm9vbCBwYXJzZU51bWJlcihjb25zdCBV
Q2hhciomIHB0ciwgY29uc3QgVUNoYXIqIGVuZCwgZmxvYXQmIG51bWJlciwgYm9vbCBza2lwID0g
dHJ1ZSk7Ci1ib29sIHBhcnNlTnVtYmVyRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmLCBmbG9hdCYg
bnVtYmVyLCBib29sIHNraXAgPSB0cnVlKTsKLWJvb2wgcGFyc2VOdW1iZXJPcHRpb25hbE51bWJl
cihjb25zdCBTdHJpbmcmIHMsIGZsb2F0JiBoLCBmbG9hdCYgdik7Ci1ib29sIHBhcnNlQXJjRmxh
Zyhjb25zdCBMQ2hhciomIHB0ciwgY29uc3QgTENoYXIqIGVuZCwgYm9vbCYgZmxhZyk7Ci1ib29s
IHBhcnNlQXJjRmxhZyhjb25zdCBVQ2hhciomIHB0ciwgY29uc3QgVUNoYXIqIGVuZCwgYm9vbCYg
ZmxhZyk7Ci1ib29sIHBhcnNlUG9pbnQoY29uc3QgU3RyaW5nJiwgRmxvYXRQb2ludCYpOwotYm9v
bCBwYXJzZVJlY3QoY29uc3QgU3RyaW5nJiwgRmxvYXRSZWN0Jik7Ci0KLXRlbXBsYXRlIDx0eXBl
bmFtZSBDaGFyYWN0ZXJUeXBlPgotYm9vbCBwYXJzZUZsb2F0UG9pbnQoY29uc3QgQ2hhcmFjdGVy
VHlwZSomIGN1cnJlbnQsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCwgRmxvYXRQb2ludCYpOwot
dGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1ib29sIHBhcnNlRmxvYXRQb2ludDIo
Y29uc3QgQ2hhcmFjdGVyVHlwZSomIGN1cnJlbnQsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCwg
RmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmKTsKLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJU
eXBlPgotYm9vbCBwYXJzZUZsb2F0UG9pbnQzKGNvbnN0IENoYXJhY3RlclR5cGUqJiBjdXJyZW50
LCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQsIEZsb2F0UG9pbnQmLCBGbG9hdFBvaW50JiwgRmxv
YXRQb2ludCYpOworZW51bSBjbGFzcyBTdWZmaXhTa2lwcGluZ1BvbGljeSB7CisgICAgRG9udFNr
aXAsCisgICAgU2tpcAorfTsKKworT3B0aW9uYWw8ZmxvYXQ+IHBhcnNlTnVtYmVyKGNvbnN0IExD
aGFyKiYgY3VycmVudCwgY29uc3QgTENoYXIqIGVuZCwgU3VmZml4U2tpcHBpbmdQb2xpY3kgPSBT
dWZmaXhTa2lwcGluZ1BvbGljeTo6U2tpcCk7CitPcHRpb25hbDxmbG9hdD4gcGFyc2VOdW1iZXIo
Y29uc3QgVUNoYXIqJiBjdXJyZW50LCBjb25zdCBVQ2hhciogZW5kLCBTdWZmaXhTa2lwcGluZ1Bv
bGljeSA9IFN1ZmZpeFNraXBwaW5nUG9saWN5OjpTa2lwKTsKK09wdGlvbmFsPGZsb2F0PiBwYXJz
ZU51bWJlcihjb25zdCBTdHJpbmcmLCBTdWZmaXhTa2lwcGluZ1BvbGljeSA9IFN1ZmZpeFNraXBw
aW5nUG9saWN5OjpTa2lwKTsKKworT3B0aW9uYWw8c3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4+IHBh
cnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIoY29uc3QgU3RyaW5nJik7CisKK09wdGlvbmFsPGJvb2w+
IHBhcnNlQXJjRmxhZyhjb25zdCBMQ2hhciomIGN1cnJlbnQsIGNvbnN0IExDaGFyKiBlbmQpOwor
T3B0aW9uYWw8Ym9vbD4gcGFyc2VBcmNGbGFnKGNvbnN0IFVDaGFyKiYgY3VycmVudCwgY29uc3Qg
VUNoYXIqIGVuZCk7CisKK09wdGlvbmFsPEZsb2F0UG9pbnQ+IHBhcnNlUG9pbnQoY29uc3QgU3Ry
aW5nJik7CitPcHRpb25hbDxGbG9hdFJlY3Q+IHBhcnNlUmVjdChjb25zdCBTdHJpbmcmKTsKKwor
T3B0aW9uYWw8RmxvYXRQb2ludD4gcGFyc2VGbG9hdFBvaW50KGNvbnN0IExDaGFyKiYgY3VycmVu
dCwgY29uc3QgTENoYXIqIGVuZCk7CitPcHRpb25hbDxGbG9hdFBvaW50PiBwYXJzZUZsb2F0UG9p
bnQoY29uc3QgVUNoYXIqJiBjdXJyZW50LCBjb25zdCBVQ2hhciogZW5kKTsKKworT3B0aW9uYWw8
c3RkOjpwYWlyPFVuaWNvZGVSYW5nZXMsIEhhc2hTZXQ8U3RyaW5nPj4+IHBhcnNlS2VybmluZ1Vu
aWNvZGVTdHJpbmcoY29uc3QgU3RyaW5nJik7CitPcHRpb25hbDxIYXNoU2V0PFN0cmluZz4+IHBh
cnNlR2x5cGhOYW1lKGNvbnN0IFN0cmluZyYpOworCiAKIC8vIFNWRyBhbGxvd3Mgc2V2ZXJhbCBk
aWZmZXJlbnQgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzOgogLy8gaHR0cDovL3d3dy53My5vcmcvVFIv
U1ZHL3BhdGhzLmh0bWwjUGF0aERhdGFCTkYKLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJU
eXBlPgotaW5saW5lIGJvb2wgaXNTVkdTcGFjZShDaGFyYWN0ZXJUeXBlIGMpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBpbmxpbmUgYm9vbCBpc1NWR1NwYWNlKENoYXJhY3RlclR5
cGUgYykKIHsKICAgICByZXR1cm4gYyA9PSAnICcgfHwgYyA9PSAnXHQnIHx8IGMgPT0gJ1xuJyB8
fCBjID09ICdccic7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotaW5s
aW5lIGJvb2wgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGNvbnN0IENoYXJhY3RlclR5cGUqJiBwdHIs
IGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5
cGU+IGlubGluZSBib29sIHNraXBPcHRpb25hbFNWR1NwYWNlcyhjb25zdCBDaGFyYWN0ZXJUeXBl
KiYgcHRyLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQpCiB7CiAgICAgd2hpbGUgKHB0ciA8IGVu
ZCAmJiBpc1NWR1NwYWNlKCpwdHIpKQogICAgICAgICBwdHIrKzsKICAgICByZXR1cm4gcHRyIDwg
ZW5kOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLWlubGluZSBib29s
IHNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVsaW1pdGVyKGNvbnN0IENoYXJhY3RlclR5cGUqJiBw
dHIsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCwgY2hhciBkZWxpbWl0ZXIgPSAnLCcpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBpbmxpbmUgYm9vbCBza2lwT3B0aW9uYWxTVkdT
cGFjZXNPckRlbGltaXRlcihjb25zdCBDaGFyYWN0ZXJUeXBlKiYgcHRyLCBjb25zdCBDaGFyYWN0
ZXJUeXBlKiBlbmQsIGNoYXIgZGVsaW1pdGVyID0gJywnKQogewogICAgIGlmIChwdHIgPCBlbmQg
JiYgIWlzU1ZHU3BhY2UoKnB0cikgJiYgKnB0ciAhPSBkZWxpbWl0ZXIpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTgxLDEwICs4NCw2IEBAIGlubGluZSBib29sIHNraXBPcHRpb25hbFNWR1Nw
YWNlc09yRGVsaW0KICAgICByZXR1cm4gcHRyIDwgZW5kOwogfQogCi1WZWN0b3I8U3RyaW5nPiBw
YXJzZURlbGltaXRlZFN0cmluZyhjb25zdCBTdHJpbmcmIGlucHV0LCBjb25zdCBjaGFyIHNlcGVy
YXRvcik7Ci1ib29sIHBhcnNlS2VybmluZ1VuaWNvZGVTdHJpbmcoY29uc3QgU3RyaW5nJiBpbnB1
dCwgVW5pY29kZVJhbmdlcyYsIEhhc2hTZXQ8U3RyaW5nPiYgc3RyaW5nTGlzdCk7Ci1ib29sIHBh
cnNlR2x5cGhOYW1lKGNvbnN0IFN0cmluZyYgaW5wdXQsIEhhc2hTZXQ8U3RyaW5nPiYgdmFsdWVz
KTsKLQogaW5saW5lIGJvb2wgc2tpcFN0cmluZyhjb25zdCBVQ2hhciomIHB0ciwgY29uc3QgVUNo
YXIqIGVuZCwgY29uc3QgVUNoYXIqIG5hbWUsIGludCBsZW5ndGgpCiB7CiAgICAgaWYgKGVuZCAt
IHB0ciA8IGxlbmd0aCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQmxlbmRlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhCbGVuZGVyLmNwcAko
cmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhCbGVuZGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDIwMCArMTE2LDIwMSBAQCBGbG9hdFBvaW50IFNWR1Bh
dGhCbGVuZGVyOjpibGVuZEFuaW1hdGVkCiAgICAgcmV0dXJuIGFuaW1hdGVkUG9pbnQ7CiB9CiAK
K3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9uPiB1c2luZyBJbnZva2VSZXN1bHQgPSB0eXBlbmFt
ZSBzdGQ6Omludm9rZV9yZXN1bHRfdDxGdW5jdGlvbiwgU1ZHUGF0aFNvdXJjZT46OnZhbHVlX3R5
cGU7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvbj4gdXNpbmcgUmVzdWx0UGFpciA9IHN0ZDo6
cGFpcjxJbnZva2VSZXN1bHQ8RnVuY3Rpb24+LCBJbnZva2VSZXN1bHQ8RnVuY3Rpb24+PjsKK3Rl
bXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9uPiBzdGF0aWMgT3B0aW9uYWw8UmVzdWx0UGFpcjxGdW5j
dGlvbj4+IHB1bGxGcm9tU291cmNlcyhTVkdQYXRoU291cmNlJiBmcm9tU291cmNlLCBTVkdQYXRo
U291cmNlJiB0b1NvdXJjZSwgRnVuY3Rpb24mJiBmdW5jdGlvbikKK3sKKyAgICBJbnZva2VSZXN1
bHQ8RnVuY3Rpb24+IGZyb21SZXN1bHQ7CisgICAgaWYgKGZyb21Tb3VyY2UuaGFzTW9yZURhdGEo
KSkgeworICAgICAgICBhdXRvIHBhcnNlZEZyb20gPSBzdGQ6Omludm9rZShmdW5jdGlvbiwgZnJv
bVNvdXJjZSk7CisgICAgICAgIGlmICghcGFyc2VkRnJvbSkKKyAgICAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CisgICAgICAgIGZyb21SZXN1bHQgPSBXVEZNb3ZlKCpwYXJzZWRGcm9tKTsK
KyAgICB9CisKKyAgICBhdXRvIHBhcnNlZFRvID0gc3RkOjppbnZva2UoZnVuY3Rpb24sIHRvU291
cmNlKTsKKyAgICBpZiAoIXBhcnNlZFRvKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
CisgICAgcmV0dXJuIFJlc3VsdFBhaXI8RnVuY3Rpb24+IHsgV1RGTW92ZShmcm9tUmVzdWx0KSwg
V1RGTW92ZSgqcGFyc2VkVG8pIH07Cit9CisKIGJvb2wgU1ZHUGF0aEJsZW5kZXI6OmJsZW5kTW92
ZVRvU2VnbWVudChmbG9hdCBwcm9ncmVzcykKIHsKLSAgICBGbG9hdFBvaW50IGZyb21UYXJnZXRQ
b2ludDsKLSAgICBGbG9hdFBvaW50IHRvVGFyZ2V0UG9pbnQ7Ci0gICAgaWYgKChtX2Zyb21Tb3Vy
Y2UuaGFzTW9yZURhdGEoKSAmJiAhbV9mcm9tU291cmNlLnBhcnNlTW92ZVRvU2VnbWVudChmcm9t
VGFyZ2V0UG9pbnQpKQotICAgICAgICB8fCAhbV90b1NvdXJjZS5wYXJzZU1vdmVUb1NlZ21lbnQo
dG9UYXJnZXRQb2ludCkpCisgICAgYXV0byByZXN1bHQgPSBwdWxsRnJvbVNvdXJjZXMobV9mcm9t
U291cmNlLCBtX3RvU291cmNlLCAmU1ZHUGF0aFNvdXJjZTo6cGFyc2VNb3ZlVG9TZWdtZW50KTsK
KyAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKCFtX2Nv
bnN1bWVyKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIG1fY29uc3VtZXItPm1vdmVUbyhi
bGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tVGFyZ2V0UG9pbnQsIHRvVGFyZ2V0UG9pbnQsIHBy
b2dyZXNzKSwgZmFsc2UsIG1faXNJbkZpcnN0SGFsZk9mQW5pbWF0aW9uID8gbV9mcm9tTW9kZSA6
IG1fdG9Nb2RlKTsKLSAgICBtX2Zyb21DdXJyZW50UG9pbnQgPSBtX2Zyb21Nb2RlID09IEFic29s
dXRlQ29vcmRpbmF0ZXMgPyBmcm9tVGFyZ2V0UG9pbnQgOiBtX2Zyb21DdXJyZW50UG9pbnQgKyBm
cm9tVGFyZ2V0UG9pbnQ7Ci0gICAgbV90b0N1cnJlbnRQb2ludCA9IG1fdG9Nb2RlID09IEFic29s
dXRlQ29vcmRpbmF0ZXMgPyB0b1RhcmdldFBvaW50IDogbV90b0N1cnJlbnRQb2ludCArIHRvVGFy
Z2V0UG9pbnQ7CisgICAgYXV0byBbZnJvbSwgdG9dID0gKnJlc3VsdDsKKworICAgIG1fY29uc3Vt
ZXItPm1vdmVUbyhibGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tLnRhcmdldFBvaW50LCB0by50
YXJnZXRQb2ludCwgcHJvZ3Jlc3MpLCBmYWxzZSwgbV9pc0luRmlyc3RIYWxmT2ZBbmltYXRpb24g
PyBtX2Zyb21Nb2RlIDogbV90b01vZGUpOworICAgIG1fZnJvbUN1cnJlbnRQb2ludCA9IG1fZnJv
bU1vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IGZyb20udGFyZ2V0UG9pbnQgOiBtX2Zyb21D
dXJyZW50UG9pbnQgKyBmcm9tLnRhcmdldFBvaW50OworICAgIG1fdG9DdXJyZW50UG9pbnQgPSBt
X3RvTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gdG8udGFyZ2V0UG9pbnQgOiBtX3RvQ3Vy
cmVudFBvaW50ICsgdG8udGFyZ2V0UG9pbnQ7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wg
U1ZHUGF0aEJsZW5kZXI6OmJsZW5kTGluZVRvU2VnbWVudChmbG9hdCBwcm9ncmVzcykKIHsKLSAg
ICBGbG9hdFBvaW50IGZyb21UYXJnZXRQb2ludDsKLSAgICBGbG9hdFBvaW50IHRvVGFyZ2V0UG9p
bnQ7Ci0gICAgaWYgKChtX2Zyb21Tb3VyY2UuaGFzTW9yZURhdGEoKSAmJiAhbV9mcm9tU291cmNl
LnBhcnNlTGluZVRvU2VnbWVudChmcm9tVGFyZ2V0UG9pbnQpKQotICAgICAgICB8fCAhbV90b1Nv
dXJjZS5wYXJzZUxpbmVUb1NlZ21lbnQodG9UYXJnZXRQb2ludCkpCisgICAgYXV0byByZXN1bHQg
PSBwdWxsRnJvbVNvdXJjZXMobV9mcm9tU291cmNlLCBtX3RvU291cmNlLCAmU1ZHUGF0aFNvdXJj
ZTo6cGFyc2VMaW5lVG9TZWdtZW50KTsKKyAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgaWYgKCFtX2NvbnN1bWVyKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAot
ICAgIG1fY29uc3VtZXItPmxpbmVUbyhibGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tVGFyZ2V0
UG9pbnQsIHRvVGFyZ2V0UG9pbnQsIHByb2dyZXNzKSwgbV9pc0luRmlyc3RIYWxmT2ZBbmltYXRp
b24gPyBtX2Zyb21Nb2RlIDogbV90b01vZGUpOwotICAgIG1fZnJvbUN1cnJlbnRQb2ludCA9IG1f
ZnJvbU1vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IGZyb21UYXJnZXRQb2ludCA6IG1fZnJv
bUN1cnJlbnRQb2ludCArIGZyb21UYXJnZXRQb2ludDsKLSAgICBtX3RvQ3VycmVudFBvaW50ID0g
bV90b01vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IHRvVGFyZ2V0UG9pbnQgOiBtX3RvQ3Vy
cmVudFBvaW50ICsgdG9UYXJnZXRQb2ludDsKKyAgICBhdXRvIFtmcm9tLCB0b10gPSAqcmVzdWx0
OworCisgICAgbV9jb25zdW1lci0+bGluZVRvKGJsZW5kQW5pbWF0ZWRGbG9hdFBvaW50KGZyb20u
dGFyZ2V0UG9pbnQsIHRvLnRhcmdldFBvaW50LCBwcm9ncmVzcyksIG1faXNJbkZpcnN0SGFsZk9m
QW5pbWF0aW9uID8gbV9mcm9tTW9kZSA6IG1fdG9Nb2RlKTsKKyAgICBtX2Zyb21DdXJyZW50UG9p
bnQgPSBtX2Zyb21Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyBmcm9tLnRhcmdldFBvaW50
IDogbV9mcm9tQ3VycmVudFBvaW50ICsgZnJvbS50YXJnZXRQb2ludDsKKyAgICBtX3RvQ3VycmVu
dFBvaW50ID0gbV90b01vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IHRvLnRhcmdldFBvaW50
IDogbV90b0N1cnJlbnRQb2ludCArIHRvLnRhcmdldFBvaW50OwogICAgIHJldHVybiB0cnVlOwog
fQogCiBib29sIFNWR1BhdGhCbGVuZGVyOjpibGVuZExpbmVUb0hvcml6b250YWxTZWdtZW50KGZs
b2F0IHByb2dyZXNzKQogewotICAgIGZsb2F0IGZyb21YID0gMDsKLSAgICBmbG9hdCB0b1ggPSAw
OwotICAgIGlmICgobV9mcm9tU291cmNlLmhhc01vcmVEYXRhKCkgJiYgIW1fZnJvbVNvdXJjZS5w
YXJzZUxpbmVUb0hvcml6b250YWxTZWdtZW50KGZyb21YKSkKLSAgICAgICAgfHwgIW1fdG9Tb3Vy
Y2UucGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudCh0b1gpKQorICAgIGF1dG8gcmVzdWx0ID0g
cHVsbEZyb21Tb3VyY2VzKG1fZnJvbVNvdXJjZSwgbV90b1NvdXJjZSwgJlNWR1BhdGhTb3VyY2U6
OnBhcnNlTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQpOworICAgIGlmICghcmVzdWx0KQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoIW1fY29uc3VtZXIpCiAgICAgICAgIHJldHVybiB0
cnVlOwogCi0gICAgbV9jb25zdW1lci0+bGluZVRvSG9yaXpvbnRhbChibGVuZEFuaW1hdGVkRGlt
ZW5zb25hbEZsb2F0KGZyb21YLCB0b1gsIEJsZW5kSG9yaXpvbnRhbCwgcHJvZ3Jlc3MpLCBtX2lz
SW5GaXJzdEhhbGZPZkFuaW1hdGlvbiA/IG1fZnJvbU1vZGUgOiBtX3RvTW9kZSk7Ci0gICAgbV9m
cm9tQ3VycmVudFBvaW50LnNldFgobV9mcm9tTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8g
ZnJvbVggOiBtX2Zyb21DdXJyZW50UG9pbnQueCgpICsgZnJvbVgpOwotICAgIG1fdG9DdXJyZW50
UG9pbnQuc2V0WChtX3RvTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gdG9YIDogbV90b0N1
cnJlbnRQb2ludC54KCkgKyB0b1gpOworICAgIGF1dG8gW2Zyb20sIHRvXSA9ICpyZXN1bHQ7CisK
KyAgICBtX2NvbnN1bWVyLT5saW5lVG9Ib3Jpem9udGFsKGJsZW5kQW5pbWF0ZWREaW1lbnNvbmFs
RmxvYXQoZnJvbS54LCB0by54LCBCbGVuZEhvcml6b250YWwsIHByb2dyZXNzKSwgbV9pc0luRmly
c3RIYWxmT2ZBbmltYXRpb24gPyBtX2Zyb21Nb2RlIDogbV90b01vZGUpOworICAgIG1fZnJvbUN1
cnJlbnRQb2ludC5zZXRYKG1fZnJvbU1vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IGZyb20u
eCA6IG1fZnJvbUN1cnJlbnRQb2ludC54KCkgKyBmcm9tLngpOworICAgIG1fdG9DdXJyZW50UG9p
bnQuc2V0WChtX3RvTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gdG8ueCA6IG1fdG9DdXJy
ZW50UG9pbnQueCgpICsgdG8ueCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgU1ZHUGF0
aEJsZW5kZXI6OmJsZW5kTGluZVRvVmVydGljYWxTZWdtZW50KGZsb2F0IHByb2dyZXNzKQogewot
ICAgIGZsb2F0IGZyb21ZID0gMDsKLSAgICBmbG9hdCB0b1kgPSAwOwotICAgIGlmICgobV9mcm9t
U291cmNlLmhhc01vcmVEYXRhKCkgJiYgIW1fZnJvbVNvdXJjZS5wYXJzZUxpbmVUb1ZlcnRpY2Fs
U2VnbWVudChmcm9tWSkpCi0gICAgICAgIHx8ICFtX3RvU291cmNlLnBhcnNlTGluZVRvVmVydGlj
YWxTZWdtZW50KHRvWSkpCisgICAgYXV0byByZXN1bHQgPSBwdWxsRnJvbVNvdXJjZXMobV9mcm9t
U291cmNlLCBtX3RvU291cmNlLCAmU1ZHUGF0aFNvdXJjZTo6cGFyc2VMaW5lVG9WZXJ0aWNhbFNl
Z21lbnQpOworICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBp
ZiAoIW1fY29uc3VtZXIpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgbV9jb25zdW1lci0+
bGluZVRvVmVydGljYWwoYmxlbmRBbmltYXRlZERpbWVuc29uYWxGbG9hdChmcm9tWSwgdG9ZLCBC
bGVuZFZlcnRpY2FsLCBwcm9ncmVzcyksIG1faXNJbkZpcnN0SGFsZk9mQW5pbWF0aW9uID8gbV9m
cm9tTW9kZSA6IG1fdG9Nb2RlKTsKLSAgICBtX2Zyb21DdXJyZW50UG9pbnQuc2V0WShtX2Zyb21N
b2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyBmcm9tWSA6IG1fZnJvbUN1cnJlbnRQb2ludC55
KCkgKyBmcm9tWSk7Ci0gICAgbV90b0N1cnJlbnRQb2ludC5zZXRZKG1fdG9Nb2RlID09IEFic29s
dXRlQ29vcmRpbmF0ZXMgPyB0b1kgOiBtX3RvQ3VycmVudFBvaW50LnkoKSArIHRvWSk7CisgICAg
YXV0byBbZnJvbSwgdG9dID0gKnJlc3VsdDsKKworICAgIG1fY29uc3VtZXItPmxpbmVUb1ZlcnRp
Y2FsKGJsZW5kQW5pbWF0ZWREaW1lbnNvbmFsRmxvYXQoZnJvbS55LCB0by55LCBCbGVuZFZlcnRp
Y2FsLCBwcm9ncmVzcyksIG1faXNJbkZpcnN0SGFsZk9mQW5pbWF0aW9uID8gbV9mcm9tTW9kZSA6
IG1fdG9Nb2RlKTsKKyAgICBtX2Zyb21DdXJyZW50UG9pbnQuc2V0WShtX2Zyb21Nb2RlID09IEFi
c29sdXRlQ29vcmRpbmF0ZXMgPyBmcm9tLnkgOiBtX2Zyb21DdXJyZW50UG9pbnQueSgpICsgZnJv
bS55KTsKKyAgICBtX3RvQ3VycmVudFBvaW50LnNldFkobV90b01vZGUgPT0gQWJzb2x1dGVDb29y
ZGluYXRlcyA/IHRvLnkgOiBtX3RvQ3VycmVudFBvaW50LnkoKSArIHRvLnkpOwogICAgIHJldHVy
biB0cnVlOwogfQogCiBib29sIFNWR1BhdGhCbGVuZGVyOjpibGVuZEN1cnZlVG9DdWJpY1NlZ21l
bnQoZmxvYXQgcHJvZ3Jlc3MpCiB7Ci0gICAgRmxvYXRQb2ludCBmcm9tVGFyZ2V0UG9pbnQ7Ci0g
ICAgRmxvYXRQb2ludCBmcm9tUG9pbnQxOwotICAgIEZsb2F0UG9pbnQgZnJvbVBvaW50MjsKLSAg
ICBGbG9hdFBvaW50IHRvVGFyZ2V0UG9pbnQ7Ci0gICAgRmxvYXRQb2ludCB0b1BvaW50MTsKLSAg
ICBGbG9hdFBvaW50IHRvUG9pbnQyOwotICAgIGlmICgobV9mcm9tU291cmNlLmhhc01vcmVEYXRh
KCkgJiYgIW1fZnJvbVNvdXJjZS5wYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQoZnJvbVBvaW50MSwg
ZnJvbVBvaW50MiwgZnJvbVRhcmdldFBvaW50KSkKLSAgICAgICAgfHwgIW1fdG9Tb3VyY2UucGFy
c2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KHRvUG9pbnQxLCB0b1BvaW50MiwgdG9UYXJnZXRQb2ludCkp
CisgICAgYXV0byByZXN1bHQgPSBwdWxsRnJvbVNvdXJjZXMobV9mcm9tU291cmNlLCBtX3RvU291
cmNlLCAmU1ZHUGF0aFNvdXJjZTo6cGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KTsKKyAgICBpZiAo
IXJlc3VsdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKCFtX2NvbnN1bWVyKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIG1fY29uc3VtZXItPmN1cnZlVG9DdWJpYyhibGVu
ZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tUG9pbnQxLCB0b1BvaW50MSwgcHJvZ3Jlc3MpLAotICAg
ICAgICBibGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tUG9pbnQyLCB0b1BvaW50MiwgcHJvZ3Jl
c3MpLAotICAgICAgICBibGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tVGFyZ2V0UG9pbnQsIHRv
VGFyZ2V0UG9pbnQsIHByb2dyZXNzKSwKKyAgICBhdXRvIFtmcm9tLCB0b10gPSAqcmVzdWx0Owor
CisgICAgbV9jb25zdW1lci0+Y3VydmVUb0N1YmljKGJsZW5kQW5pbWF0ZWRGbG9hdFBvaW50KGZy
b20ucG9pbnQxLCB0by5wb2ludDEsIHByb2dyZXNzKSwKKyAgICAgICAgYmxlbmRBbmltYXRlZEZs
b2F0UG9pbnQoZnJvbS5wb2ludDIsIHRvLnBvaW50MiwgcHJvZ3Jlc3MpLAorICAgICAgICBibGVu
ZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tLnRhcmdldFBvaW50LCB0by50YXJnZXRQb2ludCwgcHJv
Z3Jlc3MpLAogICAgICAgICBtX2lzSW5GaXJzdEhhbGZPZkFuaW1hdGlvbiA/IG1fZnJvbU1vZGUg
OiBtX3RvTW9kZSk7Ci0gICAgbV9mcm9tQ3VycmVudFBvaW50ID0gbV9mcm9tTW9kZSA9PSBBYnNv
bHV0ZUNvb3JkaW5hdGVzID8gZnJvbVRhcmdldFBvaW50IDogbV9mcm9tQ3VycmVudFBvaW50ICsg
ZnJvbVRhcmdldFBvaW50OwotICAgIG1fdG9DdXJyZW50UG9pbnQgPSBtX3RvTW9kZSA9PSBBYnNv
bHV0ZUNvb3JkaW5hdGVzID8gdG9UYXJnZXRQb2ludCA6IG1fdG9DdXJyZW50UG9pbnQgKyB0b1Rh
cmdldFBvaW50OworICAgIG1fZnJvbUN1cnJlbnRQb2ludCA9IG1fZnJvbU1vZGUgPT0gQWJzb2x1
dGVDb29yZGluYXRlcyA/IGZyb20udGFyZ2V0UG9pbnQgOiBtX2Zyb21DdXJyZW50UG9pbnQgKyBm
cm9tLnRhcmdldFBvaW50OworICAgIG1fdG9DdXJyZW50UG9pbnQgPSBtX3RvTW9kZSA9PSBBYnNv
bHV0ZUNvb3JkaW5hdGVzID8gdG8udGFyZ2V0UG9pbnQgOiBtX3RvQ3VycmVudFBvaW50ICsgdG8u
dGFyZ2V0UG9pbnQ7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgU1ZHUGF0aEJsZW5kZXI6
OmJsZW5kQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudChmbG9hdCBwcm9ncmVzcykKIHsKLSAgICBG
bG9hdFBvaW50IGZyb21UYXJnZXRQb2ludDsKLSAgICBGbG9hdFBvaW50IGZyb21Qb2ludDI7Ci0g
ICAgRmxvYXRQb2ludCB0b1RhcmdldFBvaW50OwotICAgIEZsb2F0UG9pbnQgdG9Qb2ludDI7Ci0g
ICAgaWYgKChtX2Zyb21Tb3VyY2UuaGFzTW9yZURhdGEoKSAmJiAhbV9mcm9tU291cmNlLnBhcnNl
Q3VydmVUb0N1YmljU21vb3RoU2VnbWVudChmcm9tUG9pbnQyLCBmcm9tVGFyZ2V0UG9pbnQpKQot
ICAgICAgICB8fCAhbV90b1NvdXJjZS5wYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQodG9Q
b2ludDIsIHRvVGFyZ2V0UG9pbnQpKQorICAgIGF1dG8gcmVzdWx0ID0gcHVsbEZyb21Tb3VyY2Vz
KG1fZnJvbVNvdXJjZSwgbV90b1NvdXJjZSwgJlNWR1BhdGhTb3VyY2U6OnBhcnNlQ3VydmVUb0N1
YmljU21vb3RoU2VnbWVudCk7CisgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIGlmICghbV9jb25zdW1lcikKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBt
X2NvbnN1bWVyLT5jdXJ2ZVRvQ3ViaWNTbW9vdGgoYmxlbmRBbmltYXRlZEZsb2F0UG9pbnQoZnJv
bVBvaW50MiwgdG9Qb2ludDIsIHByb2dyZXNzKSwKLSAgICAgICAgYmxlbmRBbmltYXRlZEZsb2F0
UG9pbnQoZnJvbVRhcmdldFBvaW50LCB0b1RhcmdldFBvaW50LCBwcm9ncmVzcyksCisgICAgYXV0
byBbZnJvbSwgdG9dID0gKnJlc3VsdDsKKworICAgIG1fY29uc3VtZXItPmN1cnZlVG9DdWJpY1Nt
b290aChibGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tLnBvaW50MiwgdG8ucG9pbnQyLCBwcm9n
cmVzcyksCisgICAgICAgIGJsZW5kQW5pbWF0ZWRGbG9hdFBvaW50KGZyb20udGFyZ2V0UG9pbnQs
IHRvLnRhcmdldFBvaW50LCBwcm9ncmVzcyksCiAgICAgICAgIG1faXNJbkZpcnN0SGFsZk9mQW5p
bWF0aW9uID8gbV9mcm9tTW9kZSA6IG1fdG9Nb2RlKTsKLSAgICBtX2Zyb21DdXJyZW50UG9pbnQg
PSBtX2Zyb21Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyBmcm9tVGFyZ2V0UG9pbnQgOiBt
X2Zyb21DdXJyZW50UG9pbnQgKyBmcm9tVGFyZ2V0UG9pbnQ7Ci0gICAgbV90b0N1cnJlbnRQb2lu
dCA9IG1fdG9Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyB0b1RhcmdldFBvaW50IDogbV90
b0N1cnJlbnRQb2ludCArIHRvVGFyZ2V0UG9pbnQ7CisgICAgbV9mcm9tQ3VycmVudFBvaW50ID0g
bV9mcm9tTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gZnJvbS50YXJnZXRQb2ludCA6IG1f
ZnJvbUN1cnJlbnRQb2ludCArIGZyb20udGFyZ2V0UG9pbnQ7CisgICAgbV90b0N1cnJlbnRQb2lu
dCA9IG1fdG9Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyB0by50YXJnZXRQb2ludCA6IG1f
dG9DdXJyZW50UG9pbnQgKyB0by50YXJnZXRQb2ludDsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAog
Ym9vbCBTVkdQYXRoQmxlbmRlcjo6YmxlbmRDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudChmbG9hdCBw
cm9ncmVzcykKIHsKLSAgICBGbG9hdFBvaW50IGZyb21UYXJnZXRQb2ludDsKLSAgICBGbG9hdFBv
aW50IGZyb21Qb2ludDE7Ci0gICAgRmxvYXRQb2ludCB0b1RhcmdldFBvaW50OwotICAgIEZsb2F0
UG9pbnQgdG9Qb2ludDE7Ci0gICAgaWYgKChtX2Zyb21Tb3VyY2UuaGFzTW9yZURhdGEoKSAmJiAh
bV9mcm9tU291cmNlLnBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQoZnJvbVBvaW50MSwgZnJv
bVRhcmdldFBvaW50KSkKLSAgICAgICAgfHwgIW1fdG9Tb3VyY2UucGFyc2VDdXJ2ZVRvUXVhZHJh
dGljU2VnbWVudCh0b1BvaW50MSwgdG9UYXJnZXRQb2ludCkpCisgICAgYXV0byByZXN1bHQgPSBw
dWxsRnJvbVNvdXJjZXMobV9mcm9tU291cmNlLCBtX3RvU291cmNlLCAmU1ZHUGF0aFNvdXJjZTo6
cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCk7CisgICAgaWYgKCFyZXN1bHQpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIGlmICghbV9jb25zdW1lcikKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAKLSAgICBtX2NvbnN1bWVyLT5jdXJ2ZVRvUXVhZHJhdGljKGJsZW5kQW5pbWF0ZWRGbG9h
dFBvaW50KGZyb21Qb2ludDEsIHRvUG9pbnQxLCBwcm9ncmVzcyksCi0gICAgICAgIGJsZW5kQW5p
bWF0ZWRGbG9hdFBvaW50KGZyb21UYXJnZXRQb2ludCwgdG9UYXJnZXRQb2ludCwgcHJvZ3Jlc3Mp
LAorICAgIGF1dG8gW2Zyb20sIHRvXSA9ICpyZXN1bHQ7CisKKyAgICBtX2NvbnN1bWVyLT5jdXJ2
ZVRvUXVhZHJhdGljKGJsZW5kQW5pbWF0ZWRGbG9hdFBvaW50KGZyb20ucG9pbnQxLCB0by5wb2lu
dDEsIHByb2dyZXNzKSwKKyAgICAgICAgYmxlbmRBbmltYXRlZEZsb2F0UG9pbnQoZnJvbS50YXJn
ZXRQb2ludCwgdG8udGFyZ2V0UG9pbnQsIHByb2dyZXNzKSwKICAgICAgICAgbV9pc0luRmlyc3RI
YWxmT2ZBbmltYXRpb24gPyBtX2Zyb21Nb2RlIDogbV90b01vZGUpOwotICAgIG1fZnJvbUN1cnJl
bnRQb2ludCA9IG1fZnJvbU1vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IGZyb21UYXJnZXRQ
b2ludCA6IG1fZnJvbUN1cnJlbnRQb2ludCArIGZyb21UYXJnZXRQb2ludDsKLSAgICBtX3RvQ3Vy
cmVudFBvaW50ID0gbV90b01vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IHRvVGFyZ2V0UG9p
bnQgOiBtX3RvQ3VycmVudFBvaW50ICsgdG9UYXJnZXRQb2ludDsKKyAgICBtX2Zyb21DdXJyZW50
UG9pbnQgPSBtX2Zyb21Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyBmcm9tLnRhcmdldFBv
aW50IDogbV9mcm9tQ3VycmVudFBvaW50ICsgZnJvbS50YXJnZXRQb2ludDsKKyAgICBtX3RvQ3Vy
cmVudFBvaW50ID0gbV90b01vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IHRvLnRhcmdldFBv
aW50IDogbV90b0N1cnJlbnRQb2ludCArIHRvLnRhcmdldFBvaW50OwogICAgIHJldHVybiB0cnVl
OwogfQogCiBib29sIFNWR1BhdGhCbGVuZGVyOjpibGVuZEN1cnZlVG9RdWFkcmF0aWNTbW9vdGhT
ZWdtZW50KGZsb2F0IHByb2dyZXNzKQogewotICAgIEZsb2F0UG9pbnQgZnJvbVRhcmdldFBvaW50
OwotICAgIEZsb2F0UG9pbnQgdG9UYXJnZXRQb2ludDsKLSAgICBpZiAoKG1fZnJvbVNvdXJjZS5o
YXNNb3JlRGF0YSgpICYmICFtX2Zyb21Tb3VyY2UucGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3Ro
U2VnbWVudChmcm9tVGFyZ2V0UG9pbnQpKQotICAgICAgICB8fCAhbV90b1NvdXJjZS5wYXJzZUN1
cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KHRvVGFyZ2V0UG9pbnQpKQorICAgIGF1dG8gcmVz
dWx0ID0gcHVsbEZyb21Tb3VyY2VzKG1fZnJvbVNvdXJjZSwgbV90b1NvdXJjZSwgJlNWR1BhdGhT
b3VyY2U6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQpOworICAgIGlmICghcmVz
dWx0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoIW1fY29uc3VtZXIpCiAgICAg
ICAgIHJldHVybiB0cnVlOwogCi0gICAgbV9jb25zdW1lci0+Y3VydmVUb1F1YWRyYXRpY1Ntb290
aChibGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tVGFyZ2V0UG9pbnQsIHRvVGFyZ2V0UG9pbnQs
IHByb2dyZXNzKSwgbV9pc0luRmlyc3RIYWxmT2ZBbmltYXRpb24gPyBtX2Zyb21Nb2RlIDogbV90
b01vZGUpOwotICAgIG1fZnJvbUN1cnJlbnRQb2ludCA9IG1fZnJvbU1vZGUgPT0gQWJzb2x1dGVD
b29yZGluYXRlcyA/IGZyb21UYXJnZXRQb2ludCA6IG1fZnJvbUN1cnJlbnRQb2ludCArIGZyb21U
YXJnZXRQb2ludDsKLSAgICBtX3RvQ3VycmVudFBvaW50ID0gbV90b01vZGUgPT0gQWJzb2x1dGVD
b29yZGluYXRlcyA/IHRvVGFyZ2V0UG9pbnQgOiBtX3RvQ3VycmVudFBvaW50ICsgdG9UYXJnZXRQ
b2ludDsKKyAgICBhdXRvIFtmcm9tLCB0b10gPSAqcmVzdWx0OworCisgICAgbV9jb25zdW1lci0+
Y3VydmVUb1F1YWRyYXRpY1Ntb290aChibGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tLnRhcmdl
dFBvaW50LCB0by50YXJnZXRQb2ludCwgcHJvZ3Jlc3MpLCBtX2lzSW5GaXJzdEhhbGZPZkFuaW1h
dGlvbiA/IG1fZnJvbU1vZGUgOiBtX3RvTW9kZSk7CisgICAgbV9mcm9tQ3VycmVudFBvaW50ID0g
bV9mcm9tTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gZnJvbS50YXJnZXRQb2ludCA6IG1f
ZnJvbUN1cnJlbnRQb2ludCArIGZyb20udGFyZ2V0UG9pbnQ7CisgICAgbV90b0N1cnJlbnRQb2lu
dCA9IG1fdG9Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyB0by50YXJnZXRQb2ludCA6IG1f
dG9DdXJyZW50UG9pbnQgKyB0by50YXJnZXRQb2ludDsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAog
Ym9vbCBTVkdQYXRoQmxlbmRlcjo6YmxlbmRBcmNUb1NlZ21lbnQoZmxvYXQgcHJvZ3Jlc3MpCiB7
Ci0gICAgZmxvYXQgZnJvbVJ4ID0gMDsKLSAgICBmbG9hdCBmcm9tUnkgPSAwOwotICAgIGZsb2F0
IGZyb21BbmdsZSA9IDA7Ci0gICAgYm9vbCBmcm9tTGFyZ2VBcmMgPSBmYWxzZTsKLSAgICBib29s
IGZyb21Td2VlcCA9IGZhbHNlOwotICAgIEZsb2F0UG9pbnQgZnJvbVRhcmdldFBvaW50OwotICAg
IGZsb2F0IHRvUnggPSAwOwotICAgIGZsb2F0IHRvUnkgPSAwOwotICAgIGZsb2F0IHRvQW5nbGUg
PSAwOwotICAgIGJvb2wgdG9MYXJnZUFyYyA9IGZhbHNlOwotICAgIGJvb2wgdG9Td2VlcCA9IGZh
bHNlOwotICAgIEZsb2F0UG9pbnQgdG9UYXJnZXRQb2ludDsKLSAgICBpZiAoKG1fZnJvbVNvdXJj
ZS5oYXNNb3JlRGF0YSgpICYmICFtX2Zyb21Tb3VyY2UucGFyc2VBcmNUb1NlZ21lbnQoZnJvbVJ4
LCBmcm9tUnksIGZyb21BbmdsZSwgZnJvbUxhcmdlQXJjLCBmcm9tU3dlZXAsIGZyb21UYXJnZXRQ
b2ludCkpCi0gICAgICAgIHx8ICFtX3RvU291cmNlLnBhcnNlQXJjVG9TZWdtZW50KHRvUngsIHRv
UnksIHRvQW5nbGUsIHRvTGFyZ2VBcmMsIHRvU3dlZXAsIHRvVGFyZ2V0UG9pbnQpKQorICAgIGF1
dG8gcmVzdWx0ID0gcHVsbEZyb21Tb3VyY2VzKG1fZnJvbVNvdXJjZSwgbV90b1NvdXJjZSwgJlNW
R1BhdGhTb3VyY2U6OnBhcnNlQXJjVG9TZWdtZW50KTsKKyAgICBpZiAoIXJlc3VsdCkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKCFtX2NvbnN1bWVyKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKIAorICAgIGF1dG8gW2Zyb20sIHRvXSA9ICpyZXN1bHQ7CisKICAgICBpZiAobV9hZGRU
eXBlc0NvdW50KSB7CiAgICAgICAgIEFTU0VSVChtX2Zyb21Nb2RlID09IG1fdG9Nb2RlKTsKLSAg
ICAgICAgRmxvYXRQb2ludCBzY2FsZWRUb1RhcmdldFBvaW50ID0gdG9UYXJnZXRQb2ludDsKKyAg
ICAgICAgYXV0byBzY2FsZWRUb1RhcmdldFBvaW50ID0gdG8udGFyZ2V0UG9pbnQ7CiAgICAgICAg
IHNjYWxlZFRvVGFyZ2V0UG9pbnQuc2NhbGUobV9hZGRUeXBlc0NvdW50KTsKLSAgICAgICAgbV9j
b25zdW1lci0+YXJjVG8oZnJvbVJ4ICsgdG9SeCAqIG1fYWRkVHlwZXNDb3VudCwKLSAgICAgICAg
ICAgIGZyb21SeSArIHRvUnkgKiBtX2FkZFR5cGVzQ291bnQsCi0gICAgICAgICAgICBmcm9tQW5n
bGUgKyB0b0FuZ2xlICogbV9hZGRUeXBlc0NvdW50LAotICAgICAgICAgICAgZnJvbUxhcmdlQXJj
IHx8IHRvTGFyZ2VBcmMsCi0gICAgICAgICAgICBmcm9tU3dlZXAgfHwgdG9Td2VlcCwKLSAgICAg
ICAgICAgIGZyb21UYXJnZXRQb2ludCArIHNjYWxlZFRvVGFyZ2V0UG9pbnQsCisgICAgICAgIG1f
Y29uc3VtZXItPmFyY1RvKGZyb20ucnggKyB0by5yeCAqIG1fYWRkVHlwZXNDb3VudCwKKyAgICAg
ICAgICAgIGZyb20ucnggKyB0by5yeSAqIG1fYWRkVHlwZXNDb3VudCwKKyAgICAgICAgICAgIGZy
b20uYW5nbGUgKyB0by5hbmdsZSAqIG1fYWRkVHlwZXNDb3VudCwKKyAgICAgICAgICAgIGZyb20u
bGFyZ2VBcmMgfHwgdG8ubGFyZ2VBcmMsCisgICAgICAgICAgICBmcm9tLnN3ZWVwIHx8IHRvLnN3
ZWVwLAorICAgICAgICAgICAgZnJvbS50YXJnZXRQb2ludCArIHNjYWxlZFRvVGFyZ2V0UG9pbnQs
CiAgICAgICAgICAgICBtX2Zyb21Nb2RlKTsKICAgICB9IGVsc2UgewotICAgICAgICBtX2NvbnN1
bWVyLT5hcmNUbyhibGVuZChmcm9tUngsIHRvUngsIHByb2dyZXNzKSwKLSAgICAgICAgICAgIGJs
ZW5kKGZyb21SeSwgdG9SeSwgcHJvZ3Jlc3MpLAotICAgICAgICAgICAgYmxlbmQoZnJvbUFuZ2xl
LCB0b0FuZ2xlLCBwcm9ncmVzcyksCi0gICAgICAgICAgICBtX2lzSW5GaXJzdEhhbGZPZkFuaW1h
dGlvbiA/IGZyb21MYXJnZUFyYyA6IHRvTGFyZ2VBcmMsCi0gICAgICAgICAgICBtX2lzSW5GaXJz
dEhhbGZPZkFuaW1hdGlvbiA/IGZyb21Td2VlcCA6IHRvU3dlZXAsCi0gICAgICAgICAgICBibGVu
ZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tVGFyZ2V0UG9pbnQsIHRvVGFyZ2V0UG9pbnQsIHByb2dy
ZXNzKSwKKyAgICAgICAgbV9jb25zdW1lci0+YXJjVG8oYmxlbmQoZnJvbS5yeCwgdG8ucngsIHBy
b2dyZXNzKSwKKyAgICAgICAgICAgIGJsZW5kKGZyb20ucnksIHRvLnJ5LCBwcm9ncmVzcyksCisg
ICAgICAgICAgICBibGVuZChmcm9tLmFuZ2xlLCB0by5hbmdsZSwgcHJvZ3Jlc3MpLAorICAgICAg
ICAgICAgbV9pc0luRmlyc3RIYWxmT2ZBbmltYXRpb24gPyBmcm9tLmxhcmdlQXJjIDogdG8ubGFy
Z2VBcmMsCisgICAgICAgICAgICBtX2lzSW5GaXJzdEhhbGZPZkFuaW1hdGlvbiA/IGZyb20uc3dl
ZXAgOiB0by5zd2VlcCwKKyAgICAgICAgICAgIGJsZW5kQW5pbWF0ZWRGbG9hdFBvaW50KGZyb20u
dGFyZ2V0UG9pbnQsIHRvLnRhcmdldFBvaW50LCBwcm9ncmVzcyksCiAgICAgICAgICAgICBtX2lz
SW5GaXJzdEhhbGZPZkFuaW1hdGlvbiA/IG1fZnJvbU1vZGUgOiBtX3RvTW9kZSk7CiAgICAgfQot
ICAgIG1fZnJvbUN1cnJlbnRQb2ludCA9IG1fZnJvbU1vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRl
cyA/IGZyb21UYXJnZXRQb2ludCA6IG1fZnJvbUN1cnJlbnRQb2ludCArIGZyb21UYXJnZXRQb2lu
dDsKLSAgICBtX3RvQ3VycmVudFBvaW50ID0gbV90b01vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRl
cyA/IHRvVGFyZ2V0UG9pbnQgOiBtX3RvQ3VycmVudFBvaW50ICsgdG9UYXJnZXRQb2ludDsKKyAg
ICBtX2Zyb21DdXJyZW50UG9pbnQgPSBtX2Zyb21Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMg
PyBmcm9tLnRhcmdldFBvaW50IDogbV9mcm9tQ3VycmVudFBvaW50ICsgZnJvbS50YXJnZXRQb2lu
dDsKKyAgICBtX3RvQ3VycmVudFBvaW50ID0gbV90b01vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRl
cyA/IHRvLnRhcmdldFBvaW50IDogbV90b0N1cnJlbnRQb2ludCArIHRvLnRhcmdldFBvaW50Owog
ICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0zNTEsOSArMzUyLDE2IEBAIGJvb2wgU1ZHUGF0aEJs
ZW5kZXI6OmNhbkJsZW5kUGF0aHMoKQogICAgIGJvb2wgZnJvbVNvdXJjZUhhZERhdGEgPSBtX2Zy
b21Tb3VyY2UuaGFzTW9yZURhdGEoKTsKICAgICB3aGlsZSAobV90b1NvdXJjZS5oYXNNb3JlRGF0
YSgpKSB7CiAgICAgICAgIFNWR1BhdGhTZWdUeXBlIGZyb21Db21tYW5kOwotICAgICAgICBTVkdQ
YXRoU2VnVHlwZSB0b0NvbW1hbmQ7Ci0gICAgICAgIGlmICgoZnJvbVNvdXJjZUhhZERhdGEgJiYg
IW1fZnJvbVNvdXJjZS5wYXJzZVNWR1NlZ21lbnRUeXBlKGZyb21Db21tYW5kKSkgfHwgIW1fdG9T
b3VyY2UucGFyc2VTVkdTZWdtZW50VHlwZSh0b0NvbW1hbmQpKQorICAgICAgICBpZiAoZnJvbVNv
dXJjZUhhZERhdGEpIHsKKyAgICAgICAgICAgIGF1dG8gcGFyc2VkRnJvbUNvbW1hbmQgPSBtX2Zy
b21Tb3VyY2UucGFyc2VTVkdTZWdtZW50VHlwZSgpOworICAgICAgICAgICAgaWYgKCFwYXJzZWRG
cm9tQ29tbWFuZCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBm
cm9tQ29tbWFuZCA9ICpwYXJzZWRGcm9tQ29tbWFuZDsKKyAgICAgICAgfQorICAgICAgICBhdXRv
IHBhcnNlZHRvQ29tbWFuZCA9IG1fdG9Tb3VyY2UucGFyc2VTVkdTZWdtZW50VHlwZSgpOworICAg
ICAgICBpZiAoIXBhcnNlZHRvQ29tbWFuZCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgU1ZHUGF0aFNlZ1R5cGUgdG9Db21tYW5kID0gKnBhcnNlZHRvQ29tbWFuZDsKIAogICAg
ICAgICBtX3RvTW9kZSA9IGNvb3JkaW5hdGVNb2RlT2ZDb21tYW5kKHRvQ29tbWFuZCk7CiAgICAg
ICAgIG1fZnJvbU1vZGUgPSBmcm9tU291cmNlSGFkRGF0YSA/IGNvb3JkaW5hdGVNb2RlT2ZDb21t
YW5kKGZyb21Db21tYW5kKSA6IG1fdG9Nb2RlOwpAQCAtNDMzLDkgKzQ0MSwxNiBAQCBib29sIFNW
R1BhdGhCbGVuZGVyOjpibGVuZEFuaW1hdGVkUGF0aChmCiAgICAgYm9vbCBmcm9tU291cmNlSGFk
RGF0YSA9IG1fZnJvbVNvdXJjZS5oYXNNb3JlRGF0YSgpOwogICAgIHdoaWxlIChtX3RvU291cmNl
Lmhhc01vcmVEYXRhKCkpIHsKICAgICAgICAgU1ZHUGF0aFNlZ1R5cGUgZnJvbUNvbW1hbmQ7Ci0g
ICAgICAgIFNWR1BhdGhTZWdUeXBlIHRvQ29tbWFuZDsKLSAgICAgICAgaWYgKChmcm9tU291cmNl
SGFkRGF0YSAmJiAhbV9mcm9tU291cmNlLnBhcnNlU1ZHU2VnbWVudFR5cGUoZnJvbUNvbW1hbmQp
KSB8fCAhbV90b1NvdXJjZS5wYXJzZVNWR1NlZ21lbnRUeXBlKHRvQ29tbWFuZCkpCisgICAgICAg
IGlmIChmcm9tU291cmNlSGFkRGF0YSkgeworICAgICAgICAgICAgYXV0byBwYXJzZWRGcm9tQ29t
bWFuZCA9IG1fZnJvbVNvdXJjZS5wYXJzZVNWR1NlZ21lbnRUeXBlKCk7CisgICAgICAgICAgICBp
ZiAoIXBhcnNlZEZyb21Db21tYW5kKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIGZyb21Db21tYW5kID0gKnBhcnNlZEZyb21Db21tYW5kOworICAgICAgICB9Cisg
ICAgICAgIGF1dG8gcGFyc2VkVG9Db21tYW5kID0gbV90b1NvdXJjZS5wYXJzZVNWR1NlZ21lbnRU
eXBlKCk7CisgICAgICAgIGlmICghcGFyc2VkVG9Db21tYW5kKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICBTVkdQYXRoU2VnVHlwZSB0b0NvbW1hbmQgPSAqcGFyc2VkVG9Db21t
YW5kOwogCiAgICAgICAgIG1fdG9Nb2RlID0gY29vcmRpbmF0ZU1vZGVPZkNvbW1hbmQodG9Db21t
YW5kKTsKICAgICAgICAgbV9mcm9tTW9kZSA9IGZyb21Tb3VyY2VIYWREYXRhID8gY29vcmRpbmF0
ZU1vZGVPZkNvbW1hbmQoZnJvbUNvbW1hbmQpIDogbV90b01vZGU7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZS5jcHAJKHJldmlzaW9uIDI2MzE3
NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM0LDc4ICszNCw4NiBAQCBib29sIFNWR1BhdGhCeXRlU3RyZWFtU291
cmNlOjpoYXNNb3JlRGF0CiAgICAgcmV0dXJuIG1fc3RyZWFtQ3VycmVudCA8IG1fc3RyZWFtRW5k
OwogfQogCi1ib29sIFNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZVNWR1NlZ21lbnRUeXBl
KFNWR1BhdGhTZWdUeXBlJiBwYXRoU2VnVHlwZSkKK1NWR1BhdGhTZWdUeXBlIFNWR1BhdGhCeXRl
U3RyZWFtU291cmNlOjpuZXh0Q29tbWFuZChTVkdQYXRoU2VnVHlwZSkKIHsKLSAgICBwYXRoU2Vn
VHlwZSA9IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdUeXBlPihyZWFkU1ZHU2VnbWVudFR5cGUoKSk7
Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFNWR1BhdGhTZWdUeXBl
PihyZWFkU1ZHU2VnbWVudFR5cGUoKSk7CiB9CiAKLVNWR1BhdGhTZWdUeXBlIFNWR1BhdGhCeXRl
U3RyZWFtU291cmNlOjpuZXh0Q29tbWFuZChTVkdQYXRoU2VnVHlwZSkKK09wdGlvbmFsPFNWR1Bh
dGhTZWdUeXBlPiBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VTVkdTZWdtZW50VHlwZSgp
CiB7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFNWR1BhdGhTZWdUeXBlPihyZWFkU1ZHU2VnbWVu
dFR5cGUoKSk7CiB9CiAKLWJvb2wgU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlTW92ZVRv
U2VnbWVudChGbG9hdFBvaW50JiB0YXJnZXRQb2ludCkKK09wdGlvbmFsPFNWR1BhdGhTb3VyY2U6
Ok1vdmVUb1NlZ21lbnQ+IFNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZU1vdmVUb1NlZ21l
bnQoKQogewotICAgIHRhcmdldFBvaW50ID0gcmVhZEZsb2F0UG9pbnQoKTsKLSAgICByZXR1cm4g
dHJ1ZTsKKyAgICBNb3ZlVG9TZWdtZW50IHNlZ21lbnQ7CisgICAgc2VnbWVudC50YXJnZXRQb2lu
dCA9IHJlYWRGbG9hdFBvaW50KCk7CisgICAgcmV0dXJuIHNlZ21lbnQ7CiB9CiAKLWJvb2wgU1ZH
UGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlTGluZVRvU2VnbWVudChGbG9hdFBvaW50JiB0YXJn
ZXRQb2ludCkKK09wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkxpbmVUb1NlZ21lbnQ+IFNWR1BhdGhC
eXRlU3RyZWFtU291cmNlOjpwYXJzZUxpbmVUb1NlZ21lbnQoKQogewotICAgIHRhcmdldFBvaW50
ID0gcmVhZEZsb2F0UG9pbnQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBMaW5lVG9TZWdtZW50
IHNlZ21lbnQ7CisgICAgc2VnbWVudC50YXJnZXRQb2ludCA9IHJlYWRGbG9hdFBvaW50KCk7Cisg
ICAgcmV0dXJuIHNlZ21lbnQ7CiB9CiAKLWJvb2wgU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBh
cnNlTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQoZmxvYXQmIHgpCitPcHRpb25hbDxTVkdQYXRoU291
cmNlOjpMaW5lVG9Ib3Jpem9udGFsU2VnbWVudD4gU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBh
cnNlTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQoKQogewotICAgIHggPSByZWFkRmxvYXQoKTsKLSAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBMaW5lVG9Ib3Jpem9udGFsU2VnbWVudCBzZWdtZW50OworICAg
IHNlZ21lbnQueCA9IHJlYWRGbG9hdCgpOworICAgIHJldHVybiBzZWdtZW50OwogfQogCi1ib29s
IFNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZUxpbmVUb1ZlcnRpY2FsU2VnbWVudChmbG9h
dCYgeSkKK09wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkxpbmVUb1ZlcnRpY2FsU2VnbWVudD4gU1ZH
UGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlTGluZVRvVmVydGljYWxTZWdtZW50KCkKIHsKLSAg
ICB5ID0gcmVhZEZsb2F0KCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgTGluZVRvVmVydGljYWxT
ZWdtZW50IHNlZ21lbnQ7CisgICAgc2VnbWVudC55ID0gcmVhZEZsb2F0KCk7CisgICAgcmV0dXJu
IHNlZ21lbnQ7CiB9CiAKLWJvb2wgU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlQ3VydmVU
b0N1YmljU2VnbWVudChGbG9hdFBvaW50JiBwb2ludDEsIEZsb2F0UG9pbnQmIHBvaW50MiwgRmxv
YXRQb2ludCYgdGFyZ2V0UG9pbnQpCitPcHRpb25hbDxTVkdQYXRoU291cmNlOjpDdXJ2ZVRvQ3Vi
aWNTZWdtZW50PiBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VDdXJ2ZVRvQ3ViaWNTZWdt
ZW50KCkKIHsKLSAgICBwb2ludDEgPSByZWFkRmxvYXRQb2ludCgpOwotICAgIHBvaW50MiA9IHJl
YWRGbG9hdFBvaW50KCk7Ci0gICAgdGFyZ2V0UG9pbnQgPSByZWFkRmxvYXRQb2ludCgpOwotICAg
IHJldHVybiB0cnVlOworICAgIEN1cnZlVG9DdWJpY1NlZ21lbnQgc2VnbWVudDsKKyAgICBzZWdt
ZW50LnBvaW50MSA9IHJlYWRGbG9hdFBvaW50KCk7CisgICAgc2VnbWVudC5wb2ludDIgPSByZWFk
RmxvYXRQb2ludCgpOworICAgIHNlZ21lbnQudGFyZ2V0UG9pbnQgPSByZWFkRmxvYXRQb2ludCgp
OworICAgIHJldHVybiBzZWdtZW50OwogfQogCi1ib29sIFNWR1BhdGhCeXRlU3RyZWFtU291cmNl
OjpwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQoRmxvYXRQb2ludCYgcG9pbnQyLCBGbG9h
dFBvaW50JiB0YXJnZXRQb2ludCkKK09wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkN1cnZlVG9DdWJp
Y1Ntb290aFNlZ21lbnQ+IFNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZUN1cnZlVG9DdWJp
Y1Ntb290aFNlZ21lbnQoKQogewotICAgIHBvaW50MiA9IHJlYWRGbG9hdFBvaW50KCk7Ci0gICAg
dGFyZ2V0UG9pbnQgPSByZWFkRmxvYXRQb2ludCgpOwotICAgIHJldHVybiB0cnVlOworICAgIEN1
cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQgc2VnbWVudDsKKyAgICBzZWdtZW50LnBvaW50MiA9IHJl
YWRGbG9hdFBvaW50KCk7CisgICAgc2VnbWVudC50YXJnZXRQb2ludCA9IHJlYWRGbG9hdFBvaW50
KCk7CisgICAgcmV0dXJuIHNlZ21lbnQ7CiB9CiAKLWJvb2wgU1ZHUGF0aEJ5dGVTdHJlYW1Tb3Vy
Y2U6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQoRmxvYXRQb2ludCYgcG9pbnQxLCBGbG9h
dFBvaW50JiB0YXJnZXRQb2ludCkKK09wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkN1cnZlVG9RdWFk
cmF0aWNTZWdtZW50PiBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVhZHJh
dGljU2VnbWVudCgpCiB7Ci0gICAgcG9pbnQxID0gcmVhZEZsb2F0UG9pbnQoKTsKLSAgICB0YXJn
ZXRQb2ludCA9IHJlYWRGbG9hdFBvaW50KCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgQ3VydmVU
b1F1YWRyYXRpY1NlZ21lbnQgc2VnbWVudDsKKyAgICBzZWdtZW50LnBvaW50MSA9IHJlYWRGbG9h
dFBvaW50KCk7CisgICAgc2VnbWVudC50YXJnZXRQb2ludCA9IHJlYWRGbG9hdFBvaW50KCk7Cisg
ICAgcmV0dXJuIHNlZ21lbnQ7CiB9CiAKLWJvb2wgU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBh
cnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQoRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQp
CitPcHRpb25hbDxTVkdQYXRoU291cmNlOjpDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudD4g
U1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21l
bnQoKQogewotICAgIHRhcmdldFBvaW50ID0gcmVhZEZsb2F0UG9pbnQoKTsKLSAgICByZXR1cm4g
dHJ1ZTsKKyAgICBDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudCBzZWdtZW50OworICAgIHNl
Z21lbnQudGFyZ2V0UG9pbnQgPSByZWFkRmxvYXRQb2ludCgpOworICAgIHJldHVybiBzZWdtZW50
OwogfQogCi1ib29sIFNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZUFyY1RvU2VnbWVudChm
bG9hdCYgcngsIGZsb2F0JiByeSwgZmxvYXQmIGFuZ2xlLCBib29sJiBsYXJnZUFyYywgYm9vbCYg
c3dlZXAsIEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQorT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6
QXJjVG9TZWdtZW50PiBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VBcmNUb1NlZ21lbnQo
KQogewotICAgIHJ4ID0gcmVhZEZsb2F0KCk7Ci0gICAgcnkgPSByZWFkRmxvYXQoKTsKLSAgICBh
bmdsZSA9IHJlYWRGbG9hdCgpOwotICAgIGxhcmdlQXJjID0gcmVhZEZsYWcoKTsKLSAgICBzd2Vl
cCA9IHJlYWRGbGFnKCk7Ci0gICAgdGFyZ2V0UG9pbnQgPSByZWFkRmxvYXRQb2ludCgpOwotICAg
IHJldHVybiB0cnVlOworICAgIEFyY1RvU2VnbWVudCBzZWdtZW50OworICAgIHNlZ21lbnQucngg
PSByZWFkRmxvYXQoKTsKKyAgICBzZWdtZW50LnJ5ID0gcmVhZEZsb2F0KCk7CisgICAgc2VnbWVu
dC5hbmdsZSA9IHJlYWRGbG9hdCgpOworICAgIHNlZ21lbnQubGFyZ2VBcmMgPSByZWFkRmxhZygp
OworICAgIHNlZ21lbnQuc3dlZXAgPSByZWFkRmxhZygpOworICAgIHNlZ21lbnQudGFyZ2V0UG9p
bnQgPSByZWFkRmxvYXRQb2ludCgpOworICAgIHJldHVybiBzZWdtZW50OwogfQogCiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2UuaAkocmV2aXNp
b24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3RyZWFtU291cmNl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDE4ICszMiwxOCBAQCBwdWJsaWM6CiBwcml2YXRlOgog
ICAgIGJvb2wgaGFzTW9yZURhdGEoKSBjb25zdCBmaW5hbDsKICAgICBib29sIG1vdmVUb05leHRU
b2tlbigpIGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KLSAgICBib29sIHBhcnNlU1ZHU2VnbWVudFR5
cGUoU1ZHUGF0aFNlZ1R5cGUmKSBmaW5hbDsKICAgICBTVkdQYXRoU2VnVHlwZSBuZXh0Q29tbWFu
ZChTVkdQYXRoU2VnVHlwZSkgZmluYWw7CiAKLSAgICBib29sIHBhcnNlTW92ZVRvU2VnbWVudChG
bG9hdFBvaW50JikgZmluYWw7Ci0gICAgYm9vbCBwYXJzZUxpbmVUb1NlZ21lbnQoRmxvYXRQb2lu
dCYpIGZpbmFsOwotICAgIGJvb2wgcGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudChmbG9hdCYp
IGZpbmFsOwotICAgIGJvb2wgcGFyc2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnQoZmxvYXQmKSBmaW5h
bDsKLSAgICBib29sIHBhcnNlQ3VydmVUb0N1YmljU2VnbWVudChGbG9hdFBvaW50JiwgRmxvYXRQ
b2ludCYsIEZsb2F0UG9pbnQmKSBmaW5hbDsKLSAgICBib29sIHBhcnNlQ3VydmVUb0N1YmljU21v
b3RoU2VnbWVudChGbG9hdFBvaW50JiwgRmxvYXRQb2ludCYpIGZpbmFsOwotICAgIGJvb2wgcGFy
c2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudChGbG9hdFBvaW50JiwgRmxvYXRQb2ludCYpIGZpbmFs
OwotICAgIGJvb2wgcGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudChGbG9hdFBvaW50
JikgZmluYWw7Ci0gICAgYm9vbCBwYXJzZUFyY1RvU2VnbWVudChmbG9hdCYsIGZsb2F0JiwgZmxv
YXQmLCBib29sJiwgYm9vbCYsIEZsb2F0UG9pbnQmKSBmaW5hbDsKKyAgICBPcHRpb25hbDxTVkdQ
YXRoU2VnVHlwZT4gcGFyc2VTVkdTZWdtZW50VHlwZSgpIGZpbmFsOworICAgIE9wdGlvbmFsPE1v
dmVUb1NlZ21lbnQ+IHBhcnNlTW92ZVRvU2VnbWVudCgpIGZpbmFsOworICAgIE9wdGlvbmFsPExp
bmVUb1NlZ21lbnQ+IHBhcnNlTGluZVRvU2VnbWVudCgpIGZpbmFsOworICAgIE9wdGlvbmFsPExp
bmVUb0hvcml6b250YWxTZWdtZW50PiBwYXJzZUxpbmVUb0hvcml6b250YWxTZWdtZW50KCkgZmlu
YWw7CisgICAgT3B0aW9uYWw8TGluZVRvVmVydGljYWxTZWdtZW50PiBwYXJzZUxpbmVUb1ZlcnRp
Y2FsU2VnbWVudCgpIGZpbmFsOworICAgIE9wdGlvbmFsPEN1cnZlVG9DdWJpY1NlZ21lbnQ+IHBh
cnNlQ3VydmVUb0N1YmljU2VnbWVudCgpIGZpbmFsOworICAgIE9wdGlvbmFsPEN1cnZlVG9DdWJp
Y1Ntb290aFNlZ21lbnQ+IHBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudCgpIGZpbmFsOwor
ICAgIE9wdGlvbmFsPEN1cnZlVG9RdWFkcmF0aWNTZWdtZW50PiBwYXJzZUN1cnZlVG9RdWFkcmF0
aWNTZWdtZW50KCkgZmluYWw7CisgICAgT3B0aW9uYWw8Q3VydmVUb1F1YWRyYXRpY1Ntb290aFNl
Z21lbnQ+IHBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQoKSBmaW5hbDsKKyAgICBP
cHRpb25hbDxBcmNUb1NlZ21lbnQ+IHBhcnNlQXJjVG9TZWdtZW50KCkgZmluYWw7CiAKICNpZiBD
T01QSUxFUihNU1ZDKQogI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ3MDEpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1BhdGhQYXJzZXIuY3BwCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHUGF0aFBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDEwMiAr
NzMsOTkgQEAgdm9pZCBTVkdQYXRoUGFyc2VyOjpwYXJzZUNsb3NlUGF0aFNlZ21lbgogCiBib29s
IFNWR1BhdGhQYXJzZXI6OnBhcnNlTW92ZVRvU2VnbWVudCgpCiB7Ci0gICAgRmxvYXRQb2ludCB0
YXJnZXRQb2ludDsKLSAgICBpZiAoIW1fc291cmNlLnBhcnNlTW92ZVRvU2VnbWVudCh0YXJnZXRQ
b2ludCkpCisgICAgYXV0byByZXN1bHQgPSBtX3NvdXJjZS5wYXJzZU1vdmVUb1NlZ21lbnQoKTsK
KyAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKG1fcGF0
aFBhcnNpbmdNb2RlID09IE5vcm1hbGl6ZWRQYXJzaW5nKSB7CiAgICAgICAgIGlmIChtX21vZGUg
PT0gUmVsYXRpdmVDb29yZGluYXRlcykKLSAgICAgICAgICAgIG1fY3VycmVudFBvaW50ICs9IHRh
cmdldFBvaW50OworICAgICAgICAgICAgbV9jdXJyZW50UG9pbnQgKz0gcmVzdWx0LT50YXJnZXRQ
b2ludDsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9jdXJyZW50UG9pbnQgPSB0YXJnZXRQ
b2ludDsKKyAgICAgICAgICAgIG1fY3VycmVudFBvaW50ID0gcmVzdWx0LT50YXJnZXRQb2ludDsK
ICAgICAgICAgbV9zdWJQYXRoUG9pbnQgPSBtX2N1cnJlbnRQb2ludDsKICAgICAgICAgbV9jb25z
dW1lci5tb3ZlVG8obV9jdXJyZW50UG9pbnQsIG1fY2xvc2VQYXRoLCBBYnNvbHV0ZUNvb3JkaW5h
dGVzKTsKICAgICB9IGVsc2UKLSAgICAgICAgbV9jb25zdW1lci5tb3ZlVG8odGFyZ2V0UG9pbnQs
IG1fY2xvc2VQYXRoLCBtX21vZGUpOworICAgICAgICBtX2NvbnN1bWVyLm1vdmVUbyhyZXN1bHQt
PnRhcmdldFBvaW50LCBtX2Nsb3NlUGF0aCwgbV9tb2RlKTsKICAgICBtX2Nsb3NlUGF0aCA9IGZh
bHNlOwogICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIFNWR1BhdGhQYXJzZXI6OnBhcnNlTGlu
ZVRvU2VnbWVudCgpCiB7Ci0gICAgRmxvYXRQb2ludCB0YXJnZXRQb2ludDsKLSAgICBpZiAoIW1f
c291cmNlLnBhcnNlTGluZVRvU2VnbWVudCh0YXJnZXRQb2ludCkpCisgICAgYXV0byByZXN1bHQg
PSBtX3NvdXJjZS5wYXJzZUxpbmVUb1NlZ21lbnQoKTsKKyAgICBpZiAoIXJlc3VsdCkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKG1fcGF0aFBhcnNpbmdNb2RlID09IE5vcm1hbGl6
ZWRQYXJzaW5nKSB7CiAgICAgICAgIGlmIChtX21vZGUgPT0gUmVsYXRpdmVDb29yZGluYXRlcykK
LSAgICAgICAgICAgIG1fY3VycmVudFBvaW50ICs9IHRhcmdldFBvaW50OworICAgICAgICAgICAg
bV9jdXJyZW50UG9pbnQgKz0gcmVzdWx0LT50YXJnZXRQb2ludDsKICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgbV9jdXJyZW50UG9pbnQgPSB0YXJnZXRQb2ludDsKKyAgICAgICAgICAgIG1fY3Vy
cmVudFBvaW50ID0gcmVzdWx0LT50YXJnZXRQb2ludDsKICAgICAgICAgbV9jb25zdW1lci5saW5l
VG8obV9jdXJyZW50UG9pbnQsIEFic29sdXRlQ29vcmRpbmF0ZXMpOwogICAgIH0gZWxzZQotICAg
ICAgICBtX2NvbnN1bWVyLmxpbmVUbyh0YXJnZXRQb2ludCwgbV9tb2RlKTsKKyAgICAgICAgbV9j
b25zdW1lci5saW5lVG8ocmVzdWx0LT50YXJnZXRQb2ludCwgbV9tb2RlKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAogYm9vbCBTVkdQYXRoUGFyc2VyOjpwYXJzZUxpbmVUb0hvcml6b250YWxTZWdt
ZW50KCkKIHsKLSAgICBmbG9hdCB0b1g7Ci0gICAgaWYgKCFtX3NvdXJjZS5wYXJzZUxpbmVUb0hv
cml6b250YWxTZWdtZW50KHRvWCkpCisgICAgYXV0byByZXN1bHQgPSBtX3NvdXJjZS5wYXJzZUxp
bmVUb0hvcml6b250YWxTZWdtZW50KCk7CisgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIGlmIChtX3BhdGhQYXJzaW5nTW9kZSA9PSBOb3JtYWxpemVkUGFyc2lu
ZykgewogICAgICAgICBpZiAobV9tb2RlID09IFJlbGF0aXZlQ29vcmRpbmF0ZXMpCi0gICAgICAg
ICAgICBtX2N1cnJlbnRQb2ludC5tb3ZlKHRvWCwgMCk7CisgICAgICAgICAgICBtX2N1cnJlbnRQ
b2ludC5tb3ZlKHJlc3VsdC0+eCwgMCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fY3Vy
cmVudFBvaW50LnNldFgodG9YKTsKKyAgICAgICAgICAgIG1fY3VycmVudFBvaW50LnNldFgocmVz
dWx0LT54KTsKICAgICAgICAgbV9jb25zdW1lci5saW5lVG8obV9jdXJyZW50UG9pbnQsIEFic29s
dXRlQ29vcmRpbmF0ZXMpOwogICAgIH0gZWxzZQotICAgICAgICBtX2NvbnN1bWVyLmxpbmVUb0hv
cml6b250YWwodG9YLCBtX21vZGUpOworICAgICAgICBtX2NvbnN1bWVyLmxpbmVUb0hvcml6b250
YWwocmVzdWx0LT54LCBtX21vZGUpOwogICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIFNWR1Bh
dGhQYXJzZXI6OnBhcnNlTGluZVRvVmVydGljYWxTZWdtZW50KCkKIHsKLSAgICBmbG9hdCB0b1k7
Ci0gICAgaWYgKCFtX3NvdXJjZS5wYXJzZUxpbmVUb1ZlcnRpY2FsU2VnbWVudCh0b1kpKQorICAg
IGF1dG8gcmVzdWx0ID0gbV9zb3VyY2UucGFyc2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnQoKTsKKyAg
ICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKG1fcGF0aFBh
cnNpbmdNb2RlID09IE5vcm1hbGl6ZWRQYXJzaW5nKSB7CiAgICAgICAgIGlmIChtX21vZGUgPT0g
UmVsYXRpdmVDb29yZGluYXRlcykKLSAgICAgICAgICAgIG1fY3VycmVudFBvaW50Lm1vdmUoMCwg
dG9ZKTsKKyAgICAgICAgICAgIG1fY3VycmVudFBvaW50Lm1vdmUoMCwgcmVzdWx0LT55KTsKICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgbV9jdXJyZW50UG9pbnQuc2V0WSh0b1kpOworICAgICAg
ICAgICAgbV9jdXJyZW50UG9pbnQuc2V0WShyZXN1bHQtPnkpOwogICAgICAgICBtX2NvbnN1bWVy
LmxpbmVUbyhtX2N1cnJlbnRQb2ludCwgQWJzb2x1dGVDb29yZGluYXRlcyk7CiAgICAgfSBlbHNl
Ci0gICAgICAgIG1fY29uc3VtZXIubGluZVRvVmVydGljYWwodG9ZLCBtX21vZGUpOworICAgICAg
ICBtX2NvbnN1bWVyLmxpbmVUb1ZlcnRpY2FsKHJlc3VsdC0+eSwgbV9tb2RlKTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAogYm9vbCBTVkdQYXRoUGFyc2VyOjpwYXJzZUN1cnZlVG9DdWJpY1NlZ21l
bnQoKQogewotICAgIEZsb2F0UG9pbnQgcG9pbnQxOwotICAgIEZsb2F0UG9pbnQgcG9pbnQyOwot
ICAgIEZsb2F0UG9pbnQgdGFyZ2V0UG9pbnQ7Ci0gICAgaWYgKCFtX3NvdXJjZS5wYXJzZUN1cnZl
VG9DdWJpY1NlZ21lbnQocG9pbnQxLCBwb2ludDIsIHRhcmdldFBvaW50KSkKKyAgICBhdXRvIHJl
c3VsdCA9IG1fc291cmNlLnBhcnNlQ3VydmVUb0N1YmljU2VnbWVudCgpOworICAgIGlmICghcmVz
dWx0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAobV9wYXRoUGFyc2luZ01vZGUg
PT0gTm9ybWFsaXplZFBhcnNpbmcpIHsKICAgICAgICAgaWYgKG1fbW9kZSA9PSBSZWxhdGl2ZUNv
b3JkaW5hdGVzKSB7Ci0gICAgICAgICAgICBwb2ludDEgKz0gbV9jdXJyZW50UG9pbnQ7Ci0gICAg
ICAgICAgICBwb2ludDIgKz0gbV9jdXJyZW50UG9pbnQ7Ci0gICAgICAgICAgICB0YXJnZXRQb2lu
dCArPSBtX2N1cnJlbnRQb2ludDsKKyAgICAgICAgICAgIHJlc3VsdC0+cG9pbnQxICs9IG1fY3Vy
cmVudFBvaW50OworICAgICAgICAgICAgcmVzdWx0LT5wb2ludDIgKz0gbV9jdXJyZW50UG9pbnQ7
CisgICAgICAgICAgICByZXN1bHQtPnRhcmdldFBvaW50ICs9IG1fY3VycmVudFBvaW50OwogICAg
ICAgICB9Ci0gICAgICAgIG1fY29uc3VtZXIuY3VydmVUb0N1YmljKHBvaW50MSwgcG9pbnQyLCB0
YXJnZXRQb2ludCwgQWJzb2x1dGVDb29yZGluYXRlcyk7CisgICAgICAgIG1fY29uc3VtZXIuY3Vy
dmVUb0N1YmljKHJlc3VsdC0+cG9pbnQxLCByZXN1bHQtPnBvaW50MiwgcmVzdWx0LT50YXJnZXRQ
b2ludCwgQWJzb2x1dGVDb29yZGluYXRlcyk7CiAKLSAgICAgICAgbV9jb250cm9sUG9pbnQgPSBw
b2ludDI7Ci0gICAgICAgIG1fY3VycmVudFBvaW50ID0gdGFyZ2V0UG9pbnQ7CisgICAgICAgIG1f
Y29udHJvbFBvaW50ID0gcmVzdWx0LT5wb2ludDI7CisgICAgICAgIG1fY3VycmVudFBvaW50ID0g
cmVzdWx0LT50YXJnZXRQb2ludDsKICAgICB9IGVsc2UKLSAgICAgICAgbV9jb25zdW1lci5jdXJ2
ZVRvQ3ViaWMocG9pbnQxLCBwb2ludDIsIHRhcmdldFBvaW50LCBtX21vZGUpOworICAgICAgICBt
X2NvbnN1bWVyLmN1cnZlVG9DdWJpYyhyZXN1bHQtPnBvaW50MSwgcmVzdWx0LT5wb2ludDIsIHJl
c3VsdC0+dGFyZ2V0UG9pbnQsIG1fbW9kZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wg
U1ZHUGF0aFBhcnNlcjo6cGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KCkKIHsKLSAgICBG
bG9hdFBvaW50IHBvaW50MjsKLSAgICBGbG9hdFBvaW50IHRhcmdldFBvaW50OwotICAgIGlmICgh
bV9zb3VyY2UucGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KHBvaW50MiwgdGFyZ2V0UG9p
bnQpKQorICAgIGF1dG8gcmVzdWx0ID0gbV9zb3VyY2UucGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhT
ZWdtZW50KCk7CisgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IGlmIChtX2xhc3RDb21tYW5kICE9IFBhdGhTZWdDdXJ2ZVRvQ3ViaWNBYnMKQEAgLTE4Miw1MyAr
MTc5LDUzIEBAIGJvb2wgU1ZHUGF0aFBhcnNlcjo6cGFyc2VDdXJ2ZVRvQ3ViaWNTbW8KICAgICAg
ICAgcG9pbnQxLnNjYWxlKDIpOwogICAgICAgICBwb2ludDEubW92ZSgtbV9jb250cm9sUG9pbnQu
eCgpLCAtbV9jb250cm9sUG9pbnQueSgpKTsKICAgICAgICAgaWYgKG1fbW9kZSA9PSBSZWxhdGl2
ZUNvb3JkaW5hdGVzKSB7Ci0gICAgICAgICAgICBwb2ludDIgKz0gbV9jdXJyZW50UG9pbnQ7Ci0g
ICAgICAgICAgICB0YXJnZXRQb2ludCArPSBtX2N1cnJlbnRQb2ludDsKKyAgICAgICAgICAgIHJl
c3VsdC0+cG9pbnQyICs9IG1fY3VycmVudFBvaW50OworICAgICAgICAgICAgcmVzdWx0LT50YXJn
ZXRQb2ludCArPSBtX2N1cnJlbnRQb2ludDsKICAgICAgICAgfQogCi0gICAgICAgIG1fY29uc3Vt
ZXIuY3VydmVUb0N1YmljKHBvaW50MSwgcG9pbnQyLCB0YXJnZXRQb2ludCwgQWJzb2x1dGVDb29y
ZGluYXRlcyk7CisgICAgICAgIG1fY29uc3VtZXIuY3VydmVUb0N1YmljKHBvaW50MSwgcmVzdWx0
LT5wb2ludDIsIHJlc3VsdC0+dGFyZ2V0UG9pbnQsIEFic29sdXRlQ29vcmRpbmF0ZXMpOwogCi0g
ICAgICAgIG1fY29udHJvbFBvaW50ID0gcG9pbnQyOwotICAgICAgICBtX2N1cnJlbnRQb2ludCA9
IHRhcmdldFBvaW50OworICAgICAgICBtX2NvbnRyb2xQb2ludCA9IHJlc3VsdC0+cG9pbnQyOwor
ICAgICAgICBtX2N1cnJlbnRQb2ludCA9IHJlc3VsdC0+dGFyZ2V0UG9pbnQ7CiAgICAgfSBlbHNl
Ci0gICAgICAgIG1fY29uc3VtZXIuY3VydmVUb0N1YmljU21vb3RoKHBvaW50MiwgdGFyZ2V0UG9p
bnQsIG1fbW9kZSk7CisgICAgICAgIG1fY29uc3VtZXIuY3VydmVUb0N1YmljU21vb3RoKHJlc3Vs
dC0+cG9pbnQyLCByZXN1bHQtPnRhcmdldFBvaW50LCBtX21vZGUpOwogICAgIHJldHVybiB0cnVl
OwogfQogCiBib29sIFNWR1BhdGhQYXJzZXI6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQo
KQogewotICAgIEZsb2F0UG9pbnQgcG9pbnQxOwotICAgIEZsb2F0UG9pbnQgdGFyZ2V0UG9pbnQ7
Ci0gICAgaWYgKCFtX3NvdXJjZS5wYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KHBvaW50MSwg
dGFyZ2V0UG9pbnQpKQorICAgIGF1dG8gcmVzdWx0ID0gbV9zb3VyY2UucGFyc2VDdXJ2ZVRvUXVh
ZHJhdGljU2VnbWVudCgpOworICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICBpZiAobV9wYXRoUGFyc2luZ01vZGUgPT0gTm9ybWFsaXplZFBhcnNpbmcpIHsKLSAg
ICAgICAgbV9jb250cm9sUG9pbnQgPSBwb2ludDE7CisgICAgICAgIG1fY29udHJvbFBvaW50ID0g
cmVzdWx0LT5wb2ludDE7CisKICAgICAgICAgRmxvYXRQb2ludCBwb2ludDEgPSBtX2N1cnJlbnRQ
b2ludDsKICAgICAgICAgcG9pbnQxLm1vdmUoMiAqIG1fY29udHJvbFBvaW50LngoKSwgMiAqIG1f
Y29udHJvbFBvaW50LnkoKSk7Ci0gICAgICAgIEZsb2F0UG9pbnQgcG9pbnQyKHRhcmdldFBvaW50
LngoKSArIDIgKiBtX2NvbnRyb2xQb2ludC54KCksIHRhcmdldFBvaW50LnkoKSArIDIgKiBtX2Nv
bnRyb2xQb2ludC55KCkpOworICAgICAgICBGbG9hdFBvaW50IHBvaW50MihyZXN1bHQtPnRhcmdl
dFBvaW50LngoKSArIDIgKiBtX2NvbnRyb2xQb2ludC54KCksIHJlc3VsdC0+dGFyZ2V0UG9pbnQu
eSgpICsgMiAqIG1fY29udHJvbFBvaW50LnkoKSk7CiAgICAgICAgIGlmIChtX21vZGUgPT0gUmVs
YXRpdmVDb29yZGluYXRlcykgewogICAgICAgICAgICAgcG9pbnQxLm1vdmUoMiAqIG1fY3VycmVu
dFBvaW50LngoKSwgMiAqIG1fY3VycmVudFBvaW50LnkoKSk7CiAgICAgICAgICAgICBwb2ludDIu
bW92ZSgzICogbV9jdXJyZW50UG9pbnQueCgpLCAzICogbV9jdXJyZW50UG9pbnQueSgpKTsKLSAg
ICAgICAgICAgIHRhcmdldFBvaW50ICs9IG1fY3VycmVudFBvaW50OworICAgICAgICAgICAgcmVz
dWx0LT50YXJnZXRQb2ludCArPSBtX2N1cnJlbnRQb2ludDsKICAgICAgICAgfQogICAgICAgICBw
b2ludDEuc2NhbGUoZ09uZU92ZXJUaHJlZSk7CiAgICAgICAgIHBvaW50Mi5zY2FsZShnT25lT3Zl
clRocmVlKTsKIAotICAgICAgICBtX2NvbnN1bWVyLmN1cnZlVG9DdWJpYyhwb2ludDEsIHBvaW50
MiwgdGFyZ2V0UG9pbnQsIEFic29sdXRlQ29vcmRpbmF0ZXMpOworICAgICAgICBtX2NvbnN1bWVy
LmN1cnZlVG9DdWJpYyhwb2ludDEsIHBvaW50MiwgcmVzdWx0LT50YXJnZXRQb2ludCwgQWJzb2x1
dGVDb29yZGluYXRlcyk7CiAKICAgICAgICAgaWYgKG1fbW9kZSA9PSBSZWxhdGl2ZUNvb3JkaW5h
dGVzKQogICAgICAgICAgICAgbV9jb250cm9sUG9pbnQgKz0gbV9jdXJyZW50UG9pbnQ7Ci0gICAg
ICAgIG1fY3VycmVudFBvaW50ID0gdGFyZ2V0UG9pbnQ7CisgICAgICAgIG1fY3VycmVudFBvaW50
ID0gcmVzdWx0LT50YXJnZXRQb2ludDsKICAgICB9IGVsc2UKLSAgICAgICAgbV9jb25zdW1lci5j
dXJ2ZVRvUXVhZHJhdGljKHBvaW50MSwgdGFyZ2V0UG9pbnQsIG1fbW9kZSk7CisgICAgICAgIG1f
Y29uc3VtZXIuY3VydmVUb1F1YWRyYXRpYyhyZXN1bHQtPnBvaW50MSwgcmVzdWx0LT50YXJnZXRQ
b2ludCwgbV9tb2RlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBTVkdQYXRoUGFyc2Vy
OjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KCkKIHsKLSAgICBGbG9hdFBvaW50
IHRhcmdldFBvaW50OwotICAgIGlmICghbV9zb3VyY2UucGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21v
b3RoU2VnbWVudCh0YXJnZXRQb2ludCkpCisgICAgYXV0byByZXN1bHQgPSBtX3NvdXJjZS5wYXJz
ZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KCk7CisgICAgaWYgKCFyZXN1bHQpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChtX2xhc3RDb21tYW5kICE9IFBhdGhTZWdDdXJ2
ZVRvUXVhZHJhdGljQWJzCkBAIC0yNDIsNjcgKzIzOSw2MiBAQCBib29sIFNWR1BhdGhQYXJzZXI6
OnBhcnNlQ3VydmVUb1F1YWRyYXRpCiAgICAgICAgIGN1YmljUG9pbnQuc2NhbGUoMik7CiAgICAg
ICAgIGN1YmljUG9pbnQubW92ZSgtbV9jb250cm9sUG9pbnQueCgpLCAtbV9jb250cm9sUG9pbnQu
eSgpKTsKICAgICAgICAgRmxvYXRQb2ludCBwb2ludDEobV9jdXJyZW50UG9pbnQueCgpICsgMiAq
IGN1YmljUG9pbnQueCgpLCBtX2N1cnJlbnRQb2ludC55KCkgKyAyICogY3ViaWNQb2ludC55KCkp
OwotICAgICAgICBGbG9hdFBvaW50IHBvaW50Mih0YXJnZXRQb2ludC54KCkgKyAyICogY3ViaWNQ
b2ludC54KCksIHRhcmdldFBvaW50LnkoKSArIDIgKiBjdWJpY1BvaW50LnkoKSk7CisgICAgICAg
IEZsb2F0UG9pbnQgcG9pbnQyKHJlc3VsdC0+dGFyZ2V0UG9pbnQueCgpICsgMiAqIGN1YmljUG9p
bnQueCgpLCByZXN1bHQtPnRhcmdldFBvaW50LnkoKSArIDIgKiBjdWJpY1BvaW50LnkoKSk7CiAg
ICAgICAgIGlmIChtX21vZGUgPT0gUmVsYXRpdmVDb29yZGluYXRlcykgewogICAgICAgICAgICAg
cG9pbnQyICs9IG1fY3VycmVudFBvaW50OwotICAgICAgICAgICAgdGFyZ2V0UG9pbnQgKz0gbV9j
dXJyZW50UG9pbnQ7CisgICAgICAgICAgICByZXN1bHQtPnRhcmdldFBvaW50ICs9IG1fY3VycmVu
dFBvaW50OwogICAgICAgICB9CiAgICAgICAgIHBvaW50MS5zY2FsZShnT25lT3ZlclRocmVlKTsK
ICAgICAgICAgcG9pbnQyLnNjYWxlKGdPbmVPdmVyVGhyZWUpOwogCi0gICAgICAgIG1fY29uc3Vt
ZXIuY3VydmVUb0N1YmljKHBvaW50MSwgcG9pbnQyLCB0YXJnZXRQb2ludCwgQWJzb2x1dGVDb29y
ZGluYXRlcyk7CisgICAgICAgIG1fY29uc3VtZXIuY3VydmVUb0N1YmljKHBvaW50MSwgcG9pbnQy
LCByZXN1bHQtPnRhcmdldFBvaW50LCBBYnNvbHV0ZUNvb3JkaW5hdGVzKTsKIAogICAgICAgICBt
X2NvbnRyb2xQb2ludCA9IGN1YmljUG9pbnQ7Ci0gICAgICAgIG1fY3VycmVudFBvaW50ID0gdGFy
Z2V0UG9pbnQ7CisgICAgICAgIG1fY3VycmVudFBvaW50ID0gcmVzdWx0LT50YXJnZXRQb2ludDsK
ICAgICB9IGVsc2UKLSAgICAgICAgbV9jb25zdW1lci5jdXJ2ZVRvUXVhZHJhdGljU21vb3RoKHRh
cmdldFBvaW50LCBtX21vZGUpOworICAgICAgICBtX2NvbnN1bWVyLmN1cnZlVG9RdWFkcmF0aWNT
bW9vdGgocmVzdWx0LT50YXJnZXRQb2ludCwgbV9tb2RlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAogYm9vbCBTVkdQYXRoUGFyc2VyOjpwYXJzZUFyY1RvU2VnbWVudCgpCiB7Ci0gICAgZmxvYXQg
cng7Ci0gICAgZmxvYXQgcnk7Ci0gICAgZmxvYXQgYW5nbGU7Ci0gICAgYm9vbCBsYXJnZUFyYzsK
LSAgICBib29sIHN3ZWVwOwotICAgIEZsb2F0UG9pbnQgdGFyZ2V0UG9pbnQ7Ci0gICAgaWYgKCFt
X3NvdXJjZS5wYXJzZUFyY1RvU2VnbWVudChyeCwgcnksIGFuZ2xlLCBsYXJnZUFyYywgc3dlZXAs
IHRhcmdldFBvaW50KSkKKyAgICBhdXRvIHJlc3VsdCA9IG1fc291cmNlLnBhcnNlQXJjVG9TZWdt
ZW50KCk7CisgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8v
IElmIHJ4ID0gMCBvciByeSA9IDAgdGhlbiB0aGlzIGFyYyBpcyB0cmVhdGVkIGFzIGEgc3RyYWln
aHQgbGluZSBzZWdtZW50IChhICJsaW5ldG8iKSBqb2luaW5nIHRoZSBlbmRwb2ludHMuCiAgICAg
Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHL2ltcGxub3RlLmh0bWwjQXJjT3V0T2ZSYW5nZVBh
cmFtZXRlcnMKICAgICAvLyBJZiB0aGUgY3VycmVudCBwb2ludCBhbmQgdGFyZ2V0IHBvaW50IGZv
ciB0aGUgYXJjIGFyZSBpZGVudGljYWwsIGl0IHNob3VsZCBiZSB0cmVhdGVkIGFzIGEgemVybyBs
ZW5ndGgKICAgICAvLyBwYXRoLiBUaGlzIGVuc3VyZXMgY29udGludWl0eSBpbiBhbmltYXRpb25z
LgotICAgIHJ4ID0gZmFic2YocngpOwotICAgIHJ5ID0gZmFic2YocnkpOworICAgIHJlc3VsdC0+
cnggPSBmYWJzZihyZXN1bHQtPnJ4KTsKKyAgICByZXN1bHQtPnJ5ID0gZmFic2YocmVzdWx0LT5y
eSk7CiAgICAgYm9vbCBhcmNJc1plcm9MZW5ndGggPSBmYWxzZTsKICAgICBpZiAobV9wYXRoUGFy
c2luZ01vZGUgPT0gTm9ybWFsaXplZFBhcnNpbmcpIHsKICAgICAgICAgaWYgKG1fbW9kZSA9PSBS
ZWxhdGl2ZUNvb3JkaW5hdGVzKQotICAgICAgICAgICAgYXJjSXNaZXJvTGVuZ3RoID0gdGFyZ2V0
UG9pbnQgPT0gRmxvYXRQb2ludDo6emVybygpOworICAgICAgICAgICAgYXJjSXNaZXJvTGVuZ3Ro
ID0gcmVzdWx0LT50YXJnZXRQb2ludCA9PSBGbG9hdFBvaW50Ojp6ZXJvKCk7CiAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIGFyY0lzWmVyb0xlbmd0aCA9IHRhcmdldFBvaW50ID09IG1fY3VycmVu
dFBvaW50OworICAgICAgICAgICAgYXJjSXNaZXJvTGVuZ3RoID0gcmVzdWx0LT50YXJnZXRQb2lu
dCA9PSBtX2N1cnJlbnRQb2ludDsKICAgICB9Ci0gICAgaWYgKCFyeCB8fCAhcnkgfHwgYXJjSXNa
ZXJvTGVuZ3RoKSB7CisgICAgaWYgKCFyZXN1bHQtPnJ4IHx8ICFyZXN1bHQtPnJ5IHx8IGFyY0lz
WmVyb0xlbmd0aCkgewogICAgICAgICBpZiAobV9wYXRoUGFyc2luZ01vZGUgPT0gTm9ybWFsaXpl
ZFBhcnNpbmcpIHsKICAgICAgICAgICAgIGlmIChtX21vZGUgPT0gUmVsYXRpdmVDb29yZGluYXRl
cykKLSAgICAgICAgICAgICAgICBtX2N1cnJlbnRQb2ludCArPSB0YXJnZXRQb2ludDsKKyAgICAg
ICAgICAgICAgICBtX2N1cnJlbnRQb2ludCArPSByZXN1bHQtPnRhcmdldFBvaW50OwogICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1fY3VycmVudFBvaW50ID0gdGFyZ2V0UG9pbnQ7
CisgICAgICAgICAgICAgICAgbV9jdXJyZW50UG9pbnQgPSByZXN1bHQtPnRhcmdldFBvaW50Owog
ICAgICAgICAgICAgbV9jb25zdW1lci5saW5lVG8obV9jdXJyZW50UG9pbnQsIEFic29sdXRlQ29v
cmRpbmF0ZXMpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1fY29uc3VtZXIubGluZVRv
KHRhcmdldFBvaW50LCBtX21vZGUpOworICAgICAgICAgICAgbV9jb25zdW1lci5saW5lVG8ocmVz
dWx0LT50YXJnZXRQb2ludCwgbV9tb2RlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
CiAgICAgaWYgKG1fcGF0aFBhcnNpbmdNb2RlID09IE5vcm1hbGl6ZWRQYXJzaW5nKSB7CiAgICAg
ICAgIEZsb2F0UG9pbnQgcG9pbnQxID0gbV9jdXJyZW50UG9pbnQ7CiAgICAgICAgIGlmIChtX21v
ZGUgPT0gUmVsYXRpdmVDb29yZGluYXRlcykKLSAgICAgICAgICAgIHRhcmdldFBvaW50ICs9IG1f
Y3VycmVudFBvaW50OwotICAgICAgICBtX2N1cnJlbnRQb2ludCA9IHRhcmdldFBvaW50OwotICAg
ICAgICByZXR1cm4gZGVjb21wb3NlQXJjVG9DdWJpYyhhbmdsZSwgcngsIHJ5LCBwb2ludDEsIHRh
cmdldFBvaW50LCBsYXJnZUFyYywgc3dlZXApOworICAgICAgICAgICAgcmVzdWx0LT50YXJnZXRQ
b2ludCArPSBtX2N1cnJlbnRQb2ludDsKKyAgICAgICAgbV9jdXJyZW50UG9pbnQgPSByZXN1bHQt
PnRhcmdldFBvaW50OworICAgICAgICByZXR1cm4gZGVjb21wb3NlQXJjVG9DdWJpYyhyZXN1bHQt
PmFuZ2xlLCByZXN1bHQtPnJ4LCByZXN1bHQtPnJ5LCBwb2ludDEsIHJlc3VsdC0+dGFyZ2V0UG9p
bnQsIHJlc3VsdC0+bGFyZ2VBcmMsIHJlc3VsdC0+c3dlZXApOwogICAgIH0KLSAgICBtX2NvbnN1
bWVyLmFyY1RvKHJ4LCByeSwgYW5nbGUsIGxhcmdlQXJjLCBzd2VlcCwgdGFyZ2V0UG9pbnQsIG1f
bW9kZSk7CisgICAgbV9jb25zdW1lci5hcmNUbyhyZXN1bHQtPnJ4LCByZXN1bHQtPnJ5LCByZXN1
bHQtPmFuZ2xlLCByZXN1bHQtPmxhcmdlQXJjLCByZXN1bHQtPnN3ZWVwLCByZXN1bHQtPnRhcmdl
dFBvaW50LCBtX21vZGUpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0zMTIsOCArMzA0LDEx
IEBAIGJvb2wgU1ZHUGF0aFBhcnNlcjo6cGFyc2VQYXRoRGF0YShib29sIGMKICAgICBpZiAoIW1f
c291cmNlLm1vdmVUb05leHRUb2tlbigpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIFNW
R1BhdGhTZWdUeXBlIGNvbW1hbmQ7Ci0gICAgbV9zb3VyY2UucGFyc2VTVkdTZWdtZW50VHlwZShj
b21tYW5kKTsKKyAgICBhdXRvIHBhcnNlZENvbW1hbmQgPSBtX3NvdXJjZS5wYXJzZVNWR1NlZ21l
bnRUeXBlKCk7CisgICAgaWYgKCFwYXJzZWRDb21tYW5kKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBhdXRvIGNvbW1hbmQgPSAqcGFyc2VkQ29tbWFuZDsKIAogICAgIC8vIFBhdGggbXVz
dCBzdGFydCB3aXRoIG1vdmV0by4KICAgICBpZiAoY2hlY2tGb3JJbml0aWFsTW92ZVRvICYmIGNv
bW1hbmQgIT0gUGF0aFNlZ01vdmVUb0FicyAmJiBjb21tYW5kICE9IFBhdGhTZWdNb3ZlVG9SZWwp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFNlZ0xpc3RTb3VyY2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU2VnTGlzdFNvdXJjZS5jcHAJKHJl
dmlzaW9uIDI2MzE3NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU2VnTGlzdFNvdXJj
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDE1ICs0MCwxNSBAQCBib29sIFNWR1BhdGhTZWdM
aXN0U291cmNlOjpoYXNNb3JlRGF0YSgpCiAgICAgcmV0dXJuIG1faXRlbUN1cnJlbnQgPCBtX2l0
ZW1FbmQ7CiB9CiAKLWJvb2wgU1ZHUGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNlU1ZHU2VnbWVudFR5
cGUoU1ZHUGF0aFNlZ1R5cGUmIHBhdGhTZWdUeXBlKQorU1ZHUGF0aFNlZ1R5cGUgU1ZHUGF0aFNl
Z0xpc3RTb3VyY2U6Om5leHRDb21tYW5kKFNWR1BhdGhTZWdUeXBlKQogewogICAgIG1fc2VnbWVu
dCA9IG1fcGF0aFNlZ0xpc3QuYXQobV9pdGVtQ3VycmVudCk7Ci0gICAgcGF0aFNlZ1R5cGUgPSBz
dGF0aWNfY2FzdDxTVkdQYXRoU2VnVHlwZT4obV9zZWdtZW50LT5wYXRoU2VnVHlwZSgpKTsKKyAg
ICBTVkdQYXRoU2VnVHlwZSBwYXRoU2VnVHlwZSA9IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdUeXBl
PihtX3NlZ21lbnQtPnBhdGhTZWdUeXBlKCkpOwogICAgICsrbV9pdGVtQ3VycmVudDsKLSAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gcGF0aFNlZ1R5cGU7CiB9CiAKLVNWR1BhdGhTZWdUeXBl
IFNWR1BhdGhTZWdMaXN0U291cmNlOjpuZXh0Q29tbWFuZChTVkdQYXRoU2VnVHlwZSkKK09wdGlv
bmFsPFNWR1BhdGhTZWdUeXBlPiBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VTVkdTZWdtZW50
VHlwZSgpCiB7CiAgICAgbV9zZWdtZW50ID0gbV9wYXRoU2VnTGlzdC5hdChtX2l0ZW1DdXJyZW50
KTsKICAgICBTVkdQYXRoU2VnVHlwZSBwYXRoU2VnVHlwZSA9IHN0YXRpY19jYXN0PFNWR1BhdGhT
ZWdUeXBlPihtX3NlZ21lbnQtPnBhdGhTZWdUeXBlKCkpOwpAQCAtNTYsOTQgKzU2LDExMiBAQCBT
VkdQYXRoU2VnVHlwZSBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6bmV4CiAgICAgcmV0dXJuIHBhdGhT
ZWdUeXBlOwogfQogCi1ib29sIFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZU1vdmVUb1NlZ21l
bnQoRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCitPcHRpb25hbDxTVkdQYXRoU291cmNlOjpNb3Zl
VG9TZWdtZW50PiBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VNb3ZlVG9TZWdtZW50KCkKIHsK
ICAgICBBU1NFUlQobV9zZWdtZW50KTsKICAgICBBU1NFUlQobV9zZWdtZW50LT5wYXRoU2VnVHlw
ZSgpID09IFBhdGhTZWdNb3ZlVG9BYnMgfHwgbV9zZWdtZW50LT5wYXRoU2VnVHlwZSgpID09IFBh
dGhTZWdNb3ZlVG9SZWwpOwogICAgIFNWR1BhdGhTZWdTaW5nbGVDb29yZGluYXRlKiBtb3ZlVG8g
PSBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnU2luZ2xlQ29vcmRpbmF0ZSo+KG1fc2VnbWVudC5nZXQo
KSk7Ci0gICAgdGFyZ2V0UG9pbnQgPSBGbG9hdFBvaW50KG1vdmVUby0+eCgpLCBtb3ZlVG8tPnko
KSk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgTW92ZVRvU2VnbWVudCBzZWdtZW50Owor
ICAgIHNlZ21lbnQudGFyZ2V0UG9pbnQgPSBGbG9hdFBvaW50KG1vdmVUby0+eCgpLCBtb3ZlVG8t
PnkoKSk7CisgICAgcmV0dXJuIHNlZ21lbnQ7CiB9CiAKLWJvb2wgU1ZHUGF0aFNlZ0xpc3RTb3Vy
Y2U6OnBhcnNlTGluZVRvU2VnbWVudChGbG9hdFBvaW50JiB0YXJnZXRQb2ludCkKK09wdGlvbmFs
PFNWR1BhdGhTb3VyY2U6OkxpbmVUb1NlZ21lbnQ+IFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJz
ZUxpbmVUb1NlZ21lbnQoKQogewogICAgIEFTU0VSVChtX3NlZ21lbnQpOwogICAgIEFTU0VSVCht
X3NlZ21lbnQtPnBhdGhTZWdUeXBlKCkgPT0gUGF0aFNlZ0xpbmVUb0FicyB8fCBtX3NlZ21lbnQt
PnBhdGhTZWdUeXBlKCkgPT0gUGF0aFNlZ0xpbmVUb1JlbCk7CiAgICAgU1ZHUGF0aFNlZ1Npbmds
ZUNvb3JkaW5hdGUqIGxpbmVUbyA9IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdTaW5nbGVDb29yZGlu
YXRlKj4obV9zZWdtZW50LmdldCgpKTsKLSAgICB0YXJnZXRQb2ludCA9IEZsb2F0UG9pbnQobGlu
ZVRvLT54KCksIGxpbmVUby0+eSgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBMaW5l
VG9TZWdtZW50IHNlZ21lbnQ7CisgICAgc2VnbWVudC50YXJnZXRQb2ludCA9IEZsb2F0UG9pbnQo
bGluZVRvLT54KCksIGxpbmVUby0+eSgpKTsKKyAgICByZXR1cm4gc2VnbWVudDsKIH0KIAotYm9v
bCBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudChmbG9h
dCYgeCkKK09wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkxpbmVUb0hvcml6b250YWxTZWdtZW50PiBT
VkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudCgpCiB7CiAg
ICAgQVNTRVJUKG1fc2VnbWVudCk7CiAgICAgQVNTRVJUKG1fc2VnbWVudC0+cGF0aFNlZ1R5cGUo
KSA9PSBQYXRoU2VnTGluZVRvSG9yaXpvbnRhbEFicyB8fCBtX3NlZ21lbnQtPnBhdGhTZWdUeXBl
KCkgPT0gUGF0aFNlZ0xpbmVUb0hvcml6b250YWxSZWwpOwogICAgIFNWR1BhdGhTZWdMaW5ldG9I
b3Jpem9udGFsKiBob3Jpem9udGFsID0gc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0xpbmV0b0hvcml6
b250YWwqPihtX3NlZ21lbnQuZ2V0KCkpOwotICAgIHggPSBob3Jpem9udGFsLT54KCk7Ci0gICAg
cmV0dXJuIHRydWU7CisgICAgCisgICAgTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQgc2VnbWVudDsK
KyAgICBzZWdtZW50LnggPSBob3Jpem9udGFsLT54KCk7CisgICAgcmV0dXJuIHNlZ21lbnQ7CiB9
CiAKLWJvb2wgU1ZHUGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNlTGluZVRvVmVydGljYWxTZWdtZW50
KGZsb2F0JiB5KQorT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6TGluZVRvVmVydGljYWxTZWdtZW50
PiBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnQoKQogewog
ICAgIEFTU0VSVChtX3NlZ21lbnQpOwogICAgIEFTU0VSVChtX3NlZ21lbnQtPnBhdGhTZWdUeXBl
KCkgPT0gUGF0aFNlZ0xpbmVUb1ZlcnRpY2FsQWJzIHx8IG1fc2VnbWVudC0+cGF0aFNlZ1R5cGUo
KSA9PSBQYXRoU2VnTGluZVRvVmVydGljYWxSZWwpOwogICAgIFNWR1BhdGhTZWdMaW5ldG9WZXJ0
aWNhbCogdmVydGljYWwgPSBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnTGluZXRvVmVydGljYWwqPiht
X3NlZ21lbnQuZ2V0KCkpOwotICAgIHkgPSB2ZXJ0aWNhbC0+eSgpOwotICAgIHJldHVybiB0cnVl
OworICAgIAorICAgIExpbmVUb1ZlcnRpY2FsU2VnbWVudCBzZWdtZW50OworICAgIHNlZ21lbnQu
eSA9IHZlcnRpY2FsLT55KCk7CisgICAgcmV0dXJuIHNlZ21lbnQ7CiB9CiAKLWJvb2wgU1ZHUGF0
aFNlZ0xpc3RTb3VyY2U6OnBhcnNlQ3VydmVUb0N1YmljU2VnbWVudChGbG9hdFBvaW50JiBwb2lu
dDEsIEZsb2F0UG9pbnQmIHBvaW50MiwgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCitPcHRpb25h
bDxTVkdQYXRoU291cmNlOjpDdXJ2ZVRvQ3ViaWNTZWdtZW50PiBTVkdQYXRoU2VnTGlzdFNvdXJj
ZTo6cGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KCkKIHsKICAgICBBU1NFUlQobV9zZWdtZW50KTsK
ICAgICBBU1NFUlQobV9zZWdtZW50LT5wYXRoU2VnVHlwZSgpID09IFBhdGhTZWdDdXJ2ZVRvQ3Vi
aWNBYnMgfHwgbV9zZWdtZW50LT5wYXRoU2VnVHlwZSgpID09IFBhdGhTZWdDdXJ2ZVRvQ3ViaWNS
ZWwpOwogICAgIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWMqIGN1YmljID0gc3RhdGljX2Nhc3Q8U1ZH
UGF0aFNlZ0N1cnZldG9DdWJpYyo+KG1fc2VnbWVudC5nZXQoKSk7Ci0gICAgcG9pbnQxID0gRmxv
YXRQb2ludChjdWJpYy0+eDEoKSwgY3ViaWMtPnkxKCkpOwotICAgIHBvaW50MiA9IEZsb2F0UG9p
bnQoY3ViaWMtPngyKCksIGN1YmljLT55MigpKTsKLSAgICB0YXJnZXRQb2ludCA9IEZsb2F0UG9p
bnQoY3ViaWMtPngoKSwgY3ViaWMtPnkoKSk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgCisgICAg
Q3VydmVUb0N1YmljU2VnbWVudCBzZWdtZW50OworICAgIHNlZ21lbnQucG9pbnQxID0gRmxvYXRQ
b2ludChjdWJpYy0+eDEoKSwgY3ViaWMtPnkxKCkpOworICAgIHNlZ21lbnQucG9pbnQyID0gRmxv
YXRQb2ludChjdWJpYy0+eDIoKSwgY3ViaWMtPnkyKCkpOworICAgIHNlZ21lbnQudGFyZ2V0UG9p
bnQgPSBGbG9hdFBvaW50KGN1YmljLT54KCksIGN1YmljLT55KCkpOworICAgIHJldHVybiBzZWdt
ZW50OwogfQogCi1ib29sIFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUN1cnZlVG9DdWJpY1Nt
b290aFNlZ21lbnQoRmxvYXRQb2ludCYgcG9pbnQyLCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCkK
K09wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQ+IFNWR1Bh
dGhTZWdMaXN0U291cmNlOjpwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQoKQogewogICAg
IEFTU0VSVChtX3NlZ21lbnQpOwogICAgIEFTU0VSVChtX3NlZ21lbnQtPnBhdGhTZWdUeXBlKCkg
PT0gUGF0aFNlZ0N1cnZlVG9DdWJpY1Ntb290aEFicyB8fCBtX3NlZ21lbnQtPnBhdGhTZWdUeXBl
KCkgPT0gUGF0aFNlZ0N1cnZlVG9DdWJpY1Ntb290aFJlbCk7CiAgICAgU1ZHUGF0aFNlZ0N1cnZl
dG9DdWJpY1Ntb290aCogY3ViaWNTbW9vdGggPSBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnQ3VydmV0
b0N1YmljU21vb3RoKj4obV9zZWdtZW50LmdldCgpKTsKLSAgICBwb2ludDIgPSBGbG9hdFBvaW50
KGN1YmljU21vb3RoLT54MigpLCBjdWJpY1Ntb290aC0+eTIoKSk7Ci0gICAgdGFyZ2V0UG9pbnQg
PSBGbG9hdFBvaW50KGN1YmljU21vb3RoLT54KCksIGN1YmljU21vb3RoLT55KCkpOwotICAgIHJl
dHVybiB0cnVlOworICAgIAorICAgIEN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQgc2VnbWVudDsK
KyAgICBzZWdtZW50LnBvaW50MiA9IEZsb2F0UG9pbnQoY3ViaWNTbW9vdGgtPngyKCksIGN1Ymlj
U21vb3RoLT55MigpKTsKKyAgICBzZWdtZW50LnRhcmdldFBvaW50ID0gRmxvYXRQb2ludChjdWJp
Y1Ntb290aC0+eCgpLCBjdWJpY1Ntb290aC0+eSgpKTsKKyAgICByZXR1cm4gc2VnbWVudDsKIH0K
IAotYm9vbCBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVu
dChGbG9hdFBvaW50JiBwb2ludDEsIEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQorT3B0aW9uYWw8
U1ZHUGF0aFNvdXJjZTo6Q3VydmVUb1F1YWRyYXRpY1NlZ21lbnQ+IFNWR1BhdGhTZWdMaXN0U291
cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KCkKIHsKICAgICBBU1NFUlQobV9zZWdt
ZW50KTsKICAgICBBU1NFUlQobV9zZWdtZW50LT5wYXRoU2VnVHlwZSgpID09IFBhdGhTZWdDdXJ2
ZVRvUXVhZHJhdGljQWJzIHx8IG1fc2VnbWVudC0+cGF0aFNlZ1R5cGUoKSA9PSBQYXRoU2VnQ3Vy
dmVUb1F1YWRyYXRpY1JlbCk7CiAgICAgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWMqIHF1YWRy
YXRpYyA9IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljKj4obV9zZWdtZW50
LmdldCgpKTsKLSAgICBwb2ludDEgPSBGbG9hdFBvaW50KHF1YWRyYXRpYy0+eDEoKSwgcXVhZHJh
dGljLT55MSgpKTsKLSAgICB0YXJnZXRQb2ludCA9IEZsb2F0UG9pbnQocXVhZHJhdGljLT54KCks
IHF1YWRyYXRpYy0+eSgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBDdXJ2ZVRvUXVh
ZHJhdGljU2VnbWVudCBzZWdtZW50OworICAgIHNlZ21lbnQucG9pbnQxID0gRmxvYXRQb2ludChx
dWFkcmF0aWMtPngxKCksIHF1YWRyYXRpYy0+eTEoKSk7CisgICAgc2VnbWVudC50YXJnZXRQb2lu
dCA9IEZsb2F0UG9pbnQocXVhZHJhdGljLT54KCksIHF1YWRyYXRpYy0+eSgpKTsKKyAgICByZXR1
cm4gc2VnbWVudDsKIH0KIAotYm9vbCBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VDdXJ2ZVRv
UXVhZHJhdGljU21vb3RoU2VnbWVudChGbG9hdFBvaW50JiB0YXJnZXRQb2ludCkKK09wdGlvbmFs
PFNWR1BhdGhTb3VyY2U6OkN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50PiBTVkdQYXRoU2Vn
TGlzdFNvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudCgpCiB7CiAgICAg
QVNTRVJUKG1fc2VnbWVudCk7CiAgICAgQVNTRVJUKG1fc2VnbWVudC0+cGF0aFNlZ1R5cGUoKSA9
PSBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY1Ntb290aEFicyB8fCBtX3NlZ21lbnQtPnBhdGhTZWdU
eXBlKCkgPT0gUGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNTbW9vdGhSZWwpOwogICAgIFNWR1BhdGhT
ZWdTaW5nbGVDb29yZGluYXRlKiBxdWFkcmF0aWNTbW9vdGggPSBzdGF0aWNfY2FzdDxTVkdQYXRo
U2VnU2luZ2xlQ29vcmRpbmF0ZSo+KG1fc2VnbWVudC5nZXQoKSk7Ci0gICAgdGFyZ2V0UG9pbnQg
PSBGbG9hdFBvaW50KHF1YWRyYXRpY1Ntb290aC0+eCgpLCBxdWFkcmF0aWNTbW9vdGgtPnkoKSk7
Ci0gICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21l
bnQgc2VnbWVudDsKKyAgICBzZWdtZW50LnRhcmdldFBvaW50ID0gRmxvYXRQb2ludChxdWFkcmF0
aWNTbW9vdGgtPngoKSwgcXVhZHJhdGljU21vb3RoLT55KCkpOworICAgIHJldHVybiBzZWdtZW50
OwogfQogCi1ib29sIFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUFyY1RvU2VnbWVudChmbG9h
dCYgcngsIGZsb2F0JiByeSwgZmxvYXQmIGFuZ2xlLCBib29sJiBsYXJnZUFyYywgYm9vbCYgc3dl
ZXAsIEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQorT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6QXJj
VG9TZWdtZW50PiBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VBcmNUb1NlZ21lbnQoKQogewog
ICAgIEFTU0VSVChtX3NlZ21lbnQpOwogICAgIEFTU0VSVChtX3NlZ21lbnQtPnBhdGhTZWdUeXBl
KCkgPT0gUGF0aFNlZ0FyY0FicyB8fCBtX3NlZ21lbnQtPnBhdGhTZWdUeXBlKCkgPT0gUGF0aFNl
Z0FyY1JlbCk7CiAgICAgU1ZHUGF0aFNlZ0FyYyogYXJjVG8gPSBzdGF0aWNfY2FzdDxTVkdQYXRo
U2VnQXJjKj4obV9zZWdtZW50LmdldCgpKTsKLSAgICByeCA9IGFyY1RvLT5yMSgpOwotICAgIHJ5
ID0gYXJjVG8tPnIyKCk7Ci0gICAgYW5nbGUgPSBhcmNUby0+YW5nbGUoKTsKLSAgICBsYXJnZUFy
YyA9IGFyY1RvLT5sYXJnZUFyY0ZsYWcoKTsKLSAgICBzd2VlcCA9IGFyY1RvLT5zd2VlcEZsYWco
KTsKLSAgICB0YXJnZXRQb2ludCA9IEZsb2F0UG9pbnQoYXJjVG8tPngoKSwgYXJjVG8tPnkoKSk7
Ci0gICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgQXJjVG9TZWdtZW50IHNlZ21lbnQ7CisgICAg
c2VnbWVudC5yeCA9IGFyY1RvLT5yMSgpOworICAgIHNlZ21lbnQucnkgPSBhcmNUby0+cjIoKTsK
KyAgICBzZWdtZW50LmFuZ2xlID0gYXJjVG8tPmFuZ2xlKCk7CisgICAgc2VnbWVudC5sYXJnZUFy
YyA9IGFyY1RvLT5sYXJnZUFyY0ZsYWcoKTsKKyAgICBzZWdtZW50LnN3ZWVwID0gYXJjVG8tPnN3
ZWVwRmxhZygpOworICAgIHNlZ21lbnQudGFyZ2V0UG9pbnQgPSBGbG9hdFBvaW50KGFyY1RvLT54
KCksIGFyY1RvLT55KCkpOworICAgIHJldHVybiBzZWdtZW50OwogfQogCiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFNlZ0xpc3RTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFNlZ0xpc3RTb3VyY2UuaAkocmV2aXNpb24gMjYzMTc2KQor
KysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTZWdMaXN0U291cmNlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM2LDE4ICszNiwxOCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGJvb2wgaGFzTW9y
ZURhdGEoKSBjb25zdCBmaW5hbDsKICAgICBib29sIG1vdmVUb05leHRUb2tlbigpIGZpbmFsIHsg
cmV0dXJuIHRydWU7IH0KLSAgICBib29sIHBhcnNlU1ZHU2VnbWVudFR5cGUoU1ZHUGF0aFNlZ1R5
cGUmKSBmaW5hbDsKICAgICBTVkdQYXRoU2VnVHlwZSBuZXh0Q29tbWFuZChTVkdQYXRoU2VnVHlw
ZSkgZmluYWw7CiAKLSAgICBib29sIHBhcnNlTW92ZVRvU2VnbWVudChGbG9hdFBvaW50JikgZmlu
YWw7Ci0gICAgYm9vbCBwYXJzZUxpbmVUb1NlZ21lbnQoRmxvYXRQb2ludCYpIGZpbmFsOwotICAg
IGJvb2wgcGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudChmbG9hdCYpIGZpbmFsOwotICAgIGJv
b2wgcGFyc2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnQoZmxvYXQmKSBmaW5hbDsKLSAgICBib29sIHBh
cnNlQ3VydmVUb0N1YmljU2VnbWVudChGbG9hdFBvaW50JiwgRmxvYXRQb2ludCYsIEZsb2F0UG9p
bnQmKSBmaW5hbDsKLSAgICBib29sIHBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudChGbG9h
dFBvaW50JiwgRmxvYXRQb2ludCYpIGZpbmFsOwotICAgIGJvb2wgcGFyc2VDdXJ2ZVRvUXVhZHJh
dGljU2VnbWVudChGbG9hdFBvaW50JiwgRmxvYXRQb2ludCYpIGZpbmFsOwotICAgIGJvb2wgcGFy
c2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudChGbG9hdFBvaW50JikgZmluYWw7Ci0gICAg
Ym9vbCBwYXJzZUFyY1RvU2VnbWVudChmbG9hdCYsIGZsb2F0JiwgZmxvYXQmLCBib29sJiwgYm9v
bCYsIEZsb2F0UG9pbnQmKSBmaW5hbDsKKyAgICBPcHRpb25hbDxTVkdQYXRoU2VnVHlwZT4gcGFy
c2VTVkdTZWdtZW50VHlwZSgpIGZpbmFsOworICAgIE9wdGlvbmFsPE1vdmVUb1NlZ21lbnQ+IHBh
cnNlTW92ZVRvU2VnbWVudCgpIGZpbmFsOworICAgIE9wdGlvbmFsPExpbmVUb1NlZ21lbnQ+IHBh
cnNlTGluZVRvU2VnbWVudCgpIGZpbmFsOworICAgIE9wdGlvbmFsPExpbmVUb0hvcml6b250YWxT
ZWdtZW50PiBwYXJzZUxpbmVUb0hvcml6b250YWxTZWdtZW50KCkgZmluYWw7CisgICAgT3B0aW9u
YWw8TGluZVRvVmVydGljYWxTZWdtZW50PiBwYXJzZUxpbmVUb1ZlcnRpY2FsU2VnbWVudCgpIGZp
bmFsOworICAgIE9wdGlvbmFsPEN1cnZlVG9DdWJpY1NlZ21lbnQ+IHBhcnNlQ3VydmVUb0N1Ymlj
U2VnbWVudCgpIGZpbmFsOworICAgIE9wdGlvbmFsPEN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQ+
IHBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudCgpIGZpbmFsOworICAgIE9wdGlvbmFsPEN1
cnZlVG9RdWFkcmF0aWNTZWdtZW50PiBwYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KCkgZmlu
YWw7CisgICAgT3B0aW9uYWw8Q3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQ+IHBhcnNlQ3Vy
dmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQoKSBmaW5hbDsKKyAgICBPcHRpb25hbDxBcmNUb1Nl
Z21lbnQ+IHBhcnNlQXJjVG9TZWdtZW50KCkgZmluYWw7CiAKICAgICBjb25zdCBTVkdQYXRoU2Vn
TGlzdCYgbV9wYXRoU2VnTGlzdDsKICAgICBSZWZQdHI8U1ZHUGF0aFNlZz4gbV9zZWdtZW50OwpJ
bmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTb3VyY2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFNvdXJjZS5oCShyZXZpc2lvbiAyNjMxNzYpCisrKyBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMywx
OCArMzMsNjMgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIGhhc01vcmVEYXRhKCkgY29u
c3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBtb3ZlVG9OZXh0VG9rZW4oKSA9IDA7Ci0gICAgdmly
dHVhbCBib29sIHBhcnNlU1ZHU2VnbWVudFR5cGUoU1ZHUGF0aFNlZ1R5cGUmKSA9IDA7CiAgICAg
dmlydHVhbCBTVkdQYXRoU2VnVHlwZSBuZXh0Q29tbWFuZChTVkdQYXRoU2VnVHlwZSBwcmV2aW91
c0NvbW1hbmQpID0gMDsKIAotICAgIHZpcnR1YWwgYm9vbCBwYXJzZU1vdmVUb1NlZ21lbnQoRmxv
YXRQb2ludCYpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VMaW5lVG9TZWdtZW50KEZsb2F0
UG9pbnQmKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHBhcnNlTGluZVRvSG9yaXpvbnRhbFNlZ21l
bnQoZmxvYXQmKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHBhcnNlTGluZVRvVmVydGljYWxTZWdt
ZW50KGZsb2F0JikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBwYXJzZUN1cnZlVG9DdWJpY1NlZ21l
bnQoRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmLCBGbG9hdFBvaW50JikgPSAwOwotICAgIHZpcnR1
YWwgYm9vbCBwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQoRmxvYXRQb2ludCYsIEZsb2F0
UG9pbnQmKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21l
bnQoRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHBhcnNl
Q3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQoRmxvYXRQb2ludCYpID0gMDsKLSAgICB2aXJ0
dWFsIGJvb2wgcGFyc2VBcmNUb1NlZ21lbnQoZmxvYXQmLCBmbG9hdCYsIGZsb2F0JiwgYm9vbCYs
IGJvb2wmLCBGbG9hdFBvaW50JikgPSAwOworICAgIHZpcnR1YWwgT3B0aW9uYWw8U1ZHUGF0aFNl
Z1R5cGU+IHBhcnNlU1ZHU2VnbWVudFR5cGUoKSA9IDA7CisKKyAgICBzdHJ1Y3QgTW92ZVRvU2Vn
bWVudCB7CisgICAgICAgIEZsb2F0UG9pbnQgdGFyZ2V0UG9pbnQ7CisgICAgfTsKKyAgICB2aXJ0
dWFsIE9wdGlvbmFsPE1vdmVUb1NlZ21lbnQ+IHBhcnNlTW92ZVRvU2VnbWVudCgpID0gMDsKKwor
ICAgIHN0cnVjdCBMaW5lVG9TZWdtZW50IHsKKyAgICAgICAgRmxvYXRQb2ludCB0YXJnZXRQb2lu
dDsKKyAgICB9OworICAgIHZpcnR1YWwgT3B0aW9uYWw8TGluZVRvU2VnbWVudD4gcGFyc2VMaW5l
VG9TZWdtZW50KCkgPSAwOworCisgICAgc3RydWN0IExpbmVUb0hvcml6b250YWxTZWdtZW50IHsK
KyAgICAgICAgZmxvYXQgeCA9IDA7CisgICAgfTsKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPExpbmVU
b0hvcml6b250YWxTZWdtZW50PiBwYXJzZUxpbmVUb0hvcml6b250YWxTZWdtZW50KCkgPSAwOwor
CisgICAgc3RydWN0IExpbmVUb1ZlcnRpY2FsU2VnbWVudCB7CisgICAgICAgIGZsb2F0IHkgPSAw
OworICAgIH07CisgICAgdmlydHVhbCBPcHRpb25hbDxMaW5lVG9WZXJ0aWNhbFNlZ21lbnQ+IHBh
cnNlTGluZVRvVmVydGljYWxTZWdtZW50KCkgPSAwOworCisgICAgc3RydWN0IEN1cnZlVG9DdWJp
Y1NlZ21lbnQgeworICAgICAgICBGbG9hdFBvaW50IHBvaW50MTsKKyAgICAgICAgRmxvYXRQb2lu
dCBwb2ludDI7CisgICAgICAgIEZsb2F0UG9pbnQgdGFyZ2V0UG9pbnQ7CisgICAgfTsKKyAgICB2
aXJ0dWFsIE9wdGlvbmFsPEN1cnZlVG9DdWJpY1NlZ21lbnQ+IHBhcnNlQ3VydmVUb0N1YmljU2Vn
bWVudCgpID0gMDsKKworICAgIHN0cnVjdCBDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50IHsKKyAg
ICAgICAgRmxvYXRQb2ludCBwb2ludDI7CisgICAgICAgIEZsb2F0UG9pbnQgdGFyZ2V0UG9pbnQ7
CisgICAgfTsKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPEN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQ+
IHBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudCgpID0gMDsKKworICAgIHN0cnVjdCBDdXJ2
ZVRvUXVhZHJhdGljU2VnbWVudCB7CisgICAgICAgIEZsb2F0UG9pbnQgcG9pbnQxOworICAgICAg
ICBGbG9hdFBvaW50IHRhcmdldFBvaW50OworICAgIH07CisgICAgdmlydHVhbCBPcHRpb25hbDxD
dXJ2ZVRvUXVhZHJhdGljU2VnbWVudD4gcGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCgpID0g
MDsKKworICAgIHN0cnVjdCBDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudCB7CisgICAgICAg
IEZsb2F0UG9pbnQgdGFyZ2V0UG9pbnQ7CisgICAgfTsKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPEN1
cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50PiBwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhT
ZWdtZW50KCkgPSAwOworCisgICAgc3RydWN0IEFyY1RvU2VnbWVudCB7CisgICAgICAgIGZsb2F0
IHJ4ID0gMDsKKyAgICAgICAgZmxvYXQgcnkgPSAwOworICAgICAgICBmbG9hdCBhbmdsZSA9IDA7
CisgICAgICAgIGJvb2wgbGFyZ2VBcmMgPSBmYWxzZTsKKyAgICAgICAgYm9vbCBzd2VlcCA9IGZh
bHNlOworICAgICAgICBGbG9hdFBvaW50IHRhcmdldFBvaW50OworICAgIH07CisgICAgdmlydHVh
bCBPcHRpb25hbDxBcmNUb1NlZ21lbnQ+IHBhcnNlQXJjVG9TZWdtZW50KCkgPSAwOwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhT
dHJpbmdTb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRo
U3RyaW5nU291cmNlLmNwcAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1BhdGhTdHJpbmdTb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSwxOTUgKzU1LDI4
MCBAQCBib29sIFNWR1BhdGhTdHJpbmdTb3VyY2U6Om1vdmVUb05leHRUb2tlCiAgICAgcmV0dXJu
IHNraXBPcHRpb25hbFNWR1NwYWNlcyhtX2N1cnJlbnQubV9jaGFyYWN0ZXIxNiwgbV9lbmQubV9j
aGFyYWN0ZXIxNik7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3Rh
dGljIGJvb2wgcGFyc2VTVkdTZWdtZW50VHlwZUhlbHBlcihjb25zdCBDaGFyYWN0ZXJUeXBlKiYg
Y3VycmVudCwgU1ZHUGF0aFNlZ1R5cGUmIHBhdGhTZWdUeXBlKQordGVtcGxhdGUgPHR5cGVuYW1l
IENoYXJhY3RlclR5cGU+IHN0YXRpYyBPcHRpb25hbDxTVkdQYXRoU2VnVHlwZT4gbmV4dENvbW1h
bmRIZWxwZXIoY29uc3QgQ2hhcmFjdGVyVHlwZSomIGN1cnJlbnQsIFNWR1BhdGhTZWdUeXBlIHBy
ZXZpb3VzQ29tbWFuZCkKK3sKKyAgICAvLyBDaGVjayBmb3IgcmVtYWluaW5nIGNvb3JkaW5hdGVz
IGluIHRoZSBjdXJyZW50IGNvbW1hbmQuCisgICAgaWYgKCgqY3VycmVudCA9PSAnKycgfHwgKmN1
cnJlbnQgPT0gJy0nIHx8ICpjdXJyZW50ID09ICcuJyB8fCBpc0FTQ0lJRGlnaXQoKmN1cnJlbnQp
KQorICAgICAgICAmJiBwcmV2aW91c0NvbW1hbmQgIT0gUGF0aFNlZ0Nsb3NlUGF0aCkgeworICAg
ICAgICBpZiAocHJldmlvdXNDb21tYW5kID09IFBhdGhTZWdNb3ZlVG9BYnMpCisgICAgICAgICAg
ICByZXR1cm4gUGF0aFNlZ0xpbmVUb0FiczsKKyAgICAgICAgaWYgKHByZXZpb3VzQ29tbWFuZCA9
PSBQYXRoU2VnTW92ZVRvUmVsKQorICAgICAgICAgICAgcmV0dXJuIFBhdGhTZWdMaW5lVG9SZWw7
CisgICAgICAgIHJldHVybiBwcmV2aW91c0NvbW1hbmQ7CisgICAgfQorCisgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKK30KKworU1ZHUGF0aFNlZ1R5cGUgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6bmV4
dENvbW1hbmQoU1ZHUGF0aFNlZ1R5cGUgcHJldmlvdXNDb21tYW5kKQoreworICAgIGlmIChtX2lz
OEJpdFNvdXJjZSkgeworICAgICAgICBpZiAoYXV0byBuZXh0Q29tbWFuZCA9IG5leHRDb21tYW5k
SGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjgsIHByZXZpb3VzQ29tbWFuZCkpCisgICAgICAg
ICAgICByZXR1cm4gKm5leHRDb21tYW5kOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChhdXRv
IG5leHRDb21tYW5kID0gbmV4dENvbW1hbmRIZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYs
IHByZXZpb3VzQ29tbWFuZCkpCisgICAgICAgICAgICByZXR1cm4gKm5leHRDb21tYW5kOworICAg
IH0KKworICAgIHJldHVybiAqcGFyc2VTVkdTZWdtZW50VHlwZSgpOworfQorCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIFNWR1BhdGhTZWdUeXBlIHBhcnNlU1ZHU2Vn
bWVudFR5cGVIZWxwZXIoY29uc3QgQ2hhcmFjdGVyVHlwZSomIGN1cnJlbnQpCiB7CiAgICAgc3dp
dGNoICgqKGN1cnJlbnQrKykpIHsKICAgICBjYXNlICdaJzoKICAgICBjYXNlICd6JzoKLSAgICAg
ICAgcGF0aFNlZ1R5cGUgPSBQYXRoU2VnQ2xvc2VQYXRoOwotICAgICAgICBicmVhazsKKyAgICAg
ICAgcmV0dXJuIFBhdGhTZWdDbG9zZVBhdGg7CiAgICAgY2FzZSAnTSc6Ci0gICAgICAgIHBhdGhT
ZWdUeXBlID0gUGF0aFNlZ01vdmVUb0FiczsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVy
biBQYXRoU2VnTW92ZVRvQWJzOwogICAgIGNhc2UgJ20nOgotICAgICAgICBwYXRoU2VnVHlwZSA9
IFBhdGhTZWdNb3ZlVG9SZWw7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gUGF0aFNl
Z01vdmVUb1JlbDsKICAgICBjYXNlICdMJzoKLSAgICAgICAgcGF0aFNlZ1R5cGUgPSBQYXRoU2Vn
TGluZVRvQWJzOwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIFBhdGhTZWdMaW5lVG9B
YnM7CiAgICAgY2FzZSAnbCc6Ci0gICAgICAgIHBhdGhTZWdUeXBlID0gUGF0aFNlZ0xpbmVUb1Jl
bDsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBQYXRoU2VnTGluZVRvUmVsOwogICAg
IGNhc2UgJ0MnOgotICAgICAgICBwYXRoU2VnVHlwZSA9IFBhdGhTZWdDdXJ2ZVRvQ3ViaWNBYnM7
Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gUGF0aFNlZ0N1cnZlVG9DdWJpY0FiczsK
ICAgICBjYXNlICdjJzoKLSAgICAgICAgcGF0aFNlZ1R5cGUgPSBQYXRoU2VnQ3VydmVUb0N1Ymlj
UmVsOwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIFBhdGhTZWdDdXJ2ZVRvQ3ViaWNS
ZWw7CiAgICAgY2FzZSAnUSc6Ci0gICAgICAgIHBhdGhTZWdUeXBlID0gUGF0aFNlZ0N1cnZlVG9R
dWFkcmF0aWNBYnM7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gUGF0aFNlZ0N1cnZl
VG9RdWFkcmF0aWNBYnM7CiAgICAgY2FzZSAncSc6Ci0gICAgICAgIHBhdGhTZWdUeXBlID0gUGF0
aFNlZ0N1cnZlVG9RdWFkcmF0aWNSZWw7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4g
UGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNSZWw7CiAgICAgY2FzZSAnQSc6Ci0gICAgICAgIHBhdGhT
ZWdUeXBlID0gUGF0aFNlZ0FyY0FiczsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBQ
YXRoU2VnQXJjQWJzOwogICAgIGNhc2UgJ2EnOgotICAgICAgICBwYXRoU2VnVHlwZSA9IFBhdGhT
ZWdBcmNSZWw7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gUGF0aFNlZ0FyY1JlbDsK
ICAgICBjYXNlICdIJzoKLSAgICAgICAgcGF0aFNlZ1R5cGUgPSBQYXRoU2VnTGluZVRvSG9yaXpv
bnRhbEFiczsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBQYXRoU2VnTGluZVRvSG9y
aXpvbnRhbEFiczsKICAgICBjYXNlICdoJzoKLSAgICAgICAgcGF0aFNlZ1R5cGUgPSBQYXRoU2Vn
TGluZVRvSG9yaXpvbnRhbFJlbDsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBQYXRo
U2VnTGluZVRvSG9yaXpvbnRhbFJlbDsKICAgICBjYXNlICdWJzoKLSAgICAgICAgcGF0aFNlZ1R5
cGUgPSBQYXRoU2VnTGluZVRvVmVydGljYWxBYnM7Ci0gICAgICAgIGJyZWFrOworICAgICAgICBy
ZXR1cm4gUGF0aFNlZ0xpbmVUb1ZlcnRpY2FsQWJzOwogICAgIGNhc2UgJ3YnOgotICAgICAgICBw
YXRoU2VnVHlwZSA9IFBhdGhTZWdMaW5lVG9WZXJ0aWNhbFJlbDsKLSAgICAgICAgYnJlYWs7Cisg
ICAgICAgIHJldHVybiBQYXRoU2VnTGluZVRvVmVydGljYWxSZWw7CiAgICAgY2FzZSAnUyc6Ci0g
ICAgICAgIHBhdGhTZWdUeXBlID0gUGF0aFNlZ0N1cnZlVG9DdWJpY1Ntb290aEFiczsKLSAgICAg
ICAgYnJlYWs7CisgICAgICAgIHJldHVybiBQYXRoU2VnQ3VydmVUb0N1YmljU21vb3RoQWJzOwog
ICAgIGNhc2UgJ3MnOgotICAgICAgICBwYXRoU2VnVHlwZSA9IFBhdGhTZWdDdXJ2ZVRvQ3ViaWNT
bW9vdGhSZWw7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gUGF0aFNlZ0N1cnZlVG9D
dWJpY1Ntb290aFJlbDsKICAgICBjYXNlICdUJzoKLSAgICAgICAgcGF0aFNlZ1R5cGUgPSBQYXRo
U2VnQ3VydmVUb1F1YWRyYXRpY1Ntb290aEFiczsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJl
dHVybiBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY1Ntb290aEFiczsKICAgICBjYXNlICd0JzoKLSAg
ICAgICAgcGF0aFNlZ1R5cGUgPSBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY1Ntb290aFJlbDsKLSAg
ICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY1Ntb290
aFJlbDsKICAgICBkZWZhdWx0OgotICAgICAgICBwYXRoU2VnVHlwZSA9IFBhdGhTZWdVbmtub3du
OworICAgICAgICByZXR1cm4gUGF0aFNlZ1Vua25vd247CiAgICAgfQotICAgIHJldHVybiB0cnVl
OwogfQogCi1ib29sIFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlU1ZHU2VnbWVudFR5cGUoU1ZH
UGF0aFNlZ1R5cGUmIHBhdGhTZWdUeXBlKQorT3B0aW9uYWw8U1ZHUGF0aFNlZ1R5cGU+IFNWR1Bh
dGhTdHJpbmdTb3VyY2U6OnBhcnNlU1ZHU2VnbWVudFR5cGUoKQogewogICAgIGlmIChtX2lzOEJp
dFNvdXJjZSkKLSAgICAgICAgcmV0dXJuIHBhcnNlU1ZHU2VnbWVudFR5cGVIZWxwZXIobV9jdXJy
ZW50Lm1fY2hhcmFjdGVyOCwgcGF0aFNlZ1R5cGUpOwotICAgIHJldHVybiBwYXJzZVNWR1NlZ21l
bnRUeXBlSGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjE2LCBwYXRoU2VnVHlwZSk7CisgICAg
ICAgIHJldHVybiBwYXJzZVNWR1NlZ21lbnRUeXBlSGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3Rl
cjgpOworICAgIHJldHVybiBwYXJzZVNWR1NlZ21lbnRUeXBlSGVscGVyKG1fY3VycmVudC5tX2No
YXJhY3RlcjE2KTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0
aWMgYm9vbCBuZXh0Q29tbWFuZEhlbHBlcihjb25zdCBDaGFyYWN0ZXJUeXBlKiYgY3VycmVudCwg
U1ZHUGF0aFNlZ1R5cGUgcHJldmlvdXNDb21tYW5kLCBTVkdQYXRoU2VnVHlwZSYgbmV4dENvbW1h
bmQpCitPcHRpb25hbDxTVkdQYXRoU291cmNlOjpNb3ZlVG9TZWdtZW50PiBTVkdQYXRoU3RyaW5n
U291cmNlOjpwYXJzZU1vdmVUb1NlZ21lbnQoKQogewotICAgIC8vIENoZWNrIGZvciByZW1haW5p
bmcgY29vcmRpbmF0ZXMgaW4gdGhlIGN1cnJlbnQgY29tbWFuZC4KLSAgICBpZiAoKCpjdXJyZW50
ID09ICcrJyB8fCAqY3VycmVudCA9PSAnLScgfHwgKmN1cnJlbnQgPT0gJy4nIHx8IGlzQVNDSUlE
aWdpdCgqY3VycmVudCkpCi0gICAgICAgICYmIHByZXZpb3VzQ29tbWFuZCAhPSBQYXRoU2VnQ2xv
c2VQYXRoKSB7Ci0gICAgICAgIGlmIChwcmV2aW91c0NvbW1hbmQgPT0gUGF0aFNlZ01vdmVUb0Fi
cykgewotICAgICAgICAgICAgbmV4dENvbW1hbmQgPSBQYXRoU2VnTGluZVRvQWJzOwotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHByZXZpb3VzQ29tbWFu
ZCA9PSBQYXRoU2VnTW92ZVRvUmVsKSB7Ci0gICAgICAgICAgICBuZXh0Q29tbWFuZCA9IFBhdGhT
ZWdMaW5lVG9SZWw7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAg
ICBuZXh0Q29tbWFuZCA9IHByZXZpb3VzQ29tbWFuZDsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQorICAgIGF1dG8gaGVscGVyID0gW10oY29uc3QgYXV0byomIGN1cnJlbnQsIGNvbnN0IGF1
dG8qIGVuZCkgLT4gT3B0aW9uYWw8TW92ZVRvU2VnbWVudD4geworICAgICAgICBhdXRvIHRhcmdl
dFBvaW50ID0gcGFyc2VGbG9hdFBvaW50KGN1cnJlbnQsIGVuZCk7CisgICAgICAgIGlmICghdGFy
Z2V0UG9pbnQpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICAKKyAg
ICAgICAgTW92ZVRvU2VnbWVudCBzZWdtZW50OworICAgICAgICBzZWdtZW50LnRhcmdldFBvaW50
ID0gV1RGTW92ZSgqdGFyZ2V0UG9pbnQpOworICAgICAgICByZXR1cm4gc2VnbWVudDsKKyAgICB9
OwogCi0gICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX2lzOEJpdFNvdXJjZSkKKyAgICAgICAg
cmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXI4LCBtX2VuZC5tX2NoYXJhY3Rlcjgp
OworICAgIHJldHVybiBoZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYsIG1fZW5kLm1fY2hh
cmFjdGVyMTYpOwogfQogCi1TVkdQYXRoU2VnVHlwZSBTVkdQYXRoU3RyaW5nU291cmNlOjpuZXh0
Q29tbWFuZChTVkdQYXRoU2VnVHlwZSBwcmV2aW91c0NvbW1hbmQpCitPcHRpb25hbDxTVkdQYXRo
U291cmNlOjpMaW5lVG9TZWdtZW50PiBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUxpbmVUb1Nl
Z21lbnQoKQogewotICAgIFNWR1BhdGhTZWdUeXBlIG5leHRDb21tYW5kOwotICAgIGlmIChtX2lz
OEJpdFNvdXJjZSkgewotICAgICAgICBpZiAobmV4dENvbW1hbmRIZWxwZXIobV9jdXJyZW50Lm1f
Y2hhcmFjdGVyOCwgcHJldmlvdXNDb21tYW5kLCBuZXh0Q29tbWFuZCkpCi0gICAgICAgICAgICBy
ZXR1cm4gbmV4dENvbW1hbmQ7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKG5leHRDb21tYW5k
SGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjE2LCBwcmV2aW91c0NvbW1hbmQsIG5leHRDb21t
YW5kKSkKLSAgICAgICAgICAgIHJldHVybiBuZXh0Q29tbWFuZDsKLSAgICB9CisgICAgYXV0byBo
ZWxwZXIgPSBbXShjb25zdCBhdXRvKiYgY3VycmVudCwgY29uc3QgYXV0byogZW5kKSAtPiBPcHRp
b25hbDxMaW5lVG9TZWdtZW50PiB7CisgICAgICAgIGF1dG8gdGFyZ2V0UG9pbnQgPSBwYXJzZUZs
b2F0UG9pbnQoY3VycmVudCwgZW5kKTsKKyAgICAgICAgaWYgKCF0YXJnZXRQb2ludCkKKyAgICAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIAorICAgICAgICBMaW5lVG9TZWdt
ZW50IHNlZ21lbnQ7CisgICAgICAgIHNlZ21lbnQudGFyZ2V0UG9pbnQgPSBXVEZNb3ZlKCp0YXJn
ZXRQb2ludCk7CisgICAgICAgIHJldHVybiBzZWdtZW50OworICAgIH07CiAKLSAgICBwYXJzZVNW
R1NlZ21lbnRUeXBlKG5leHRDb21tYW5kKTsKLSAgICByZXR1cm4gbmV4dENvbW1hbmQ7Ci19Ci0K
LWJvb2wgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VNb3ZlVG9TZWdtZW50KEZsb2F0UG9pbnQm
IHRhcmdldFBvaW50KQotewogICAgIGlmIChtX2lzOEJpdFNvdXJjZSkKLSAgICAgICAgcmV0dXJu
IHBhcnNlRmxvYXRQb2ludChtX2N1cnJlbnQubV9jaGFyYWN0ZXI4LCBtX2VuZC5tX2NoYXJhY3Rl
cjgsIHRhcmdldFBvaW50KTsKLSAgICByZXR1cm4gcGFyc2VGbG9hdFBvaW50KG1fY3VycmVudC5t
X2NoYXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2LCB0YXJnZXRQb2ludCk7CisgICAgICAg
IHJldHVybiBoZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4
KTsKKyAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjE2LCBtX2VuZC5tX2No
YXJhY3RlcjE2KTsKIH0KIAotYm9vbCBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUxpbmVUb1Nl
Z21lbnQoRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCitPcHRpb25hbDxTVkdQYXRoU291cmNlOjpM
aW5lVG9Ib3Jpem9udGFsU2VnbWVudD4gU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VMaW5lVG9I
b3Jpem9udGFsU2VnbWVudCgpCiB7Ci0gICAgaWYgKG1faXM4Qml0U291cmNlKQotICAgICAgICBy
ZXR1cm4gcGFyc2VGbG9hdFBvaW50KG1fY3VycmVudC5tX2NoYXJhY3RlcjgsIG1fZW5kLm1fY2hh
cmFjdGVyOCwgdGFyZ2V0UG9pbnQpOwotICAgIHJldHVybiBwYXJzZUZsb2F0UG9pbnQobV9jdXJy
ZW50Lm1fY2hhcmFjdGVyMTYsIG1fZW5kLm1fY2hhcmFjdGVyMTYsIHRhcmdldFBvaW50KTsKLX0K
KyAgICBhdXRvIGhlbHBlciA9IFtdKGNvbnN0IGF1dG8qJiBjdXJyZW50LCBjb25zdCBhdXRvKiBl
bmQpIC0+IE9wdGlvbmFsPExpbmVUb0hvcml6b250YWxTZWdtZW50PiB7CisgICAgICAgIGF1dG8g
eCA9IHBhcnNlTnVtYmVyKGN1cnJlbnQsIGVuZCk7CisgICAgICAgIGlmICgheCkKKyAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIAorICAgICAgICBMaW5lVG9Ib3Jpem9u
dGFsU2VnbWVudCBzZWdtZW50OworICAgICAgICBzZWdtZW50LnggPSAqeDsKKyAgICAgICAgcmV0
dXJuIHNlZ21lbnQ7CisgICAgfTsKIAotYm9vbCBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUxp
bmVUb0hvcml6b250YWxTZWdtZW50KGZsb2F0JiB4KQotewogICAgIGlmIChtX2lzOEJpdFNvdXJj
ZSkKLSAgICAgICAgcmV0dXJuIHBhcnNlTnVtYmVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjgsIG1f
ZW5kLm1fY2hhcmFjdGVyOCwgeCk7Ci0gICAgcmV0dXJuIHBhcnNlTnVtYmVyKG1fY3VycmVudC5t
X2NoYXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2LCB4KTsKKyAgICAgICAgcmV0dXJuIGhl
bHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXI4LCBtX2VuZC5tX2NoYXJhY3RlcjgpOworICAgIHJl
dHVybiBoZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYsIG1fZW5kLm1fY2hhcmFjdGVyMTYp
OwogfQogCi1ib29sIFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlTGluZVRvVmVydGljYWxTZWdt
ZW50KGZsb2F0JiB5KQorT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6TGluZVRvVmVydGljYWxTZWdt
ZW50PiBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUxpbmVUb1ZlcnRpY2FsU2VnbWVudCgpCiB7
CisgICAgYXV0byBoZWxwZXIgPSBbXShjb25zdCBhdXRvKiYgY3VycmVudCwgY29uc3QgYXV0byog
ZW5kKSAtPiBPcHRpb25hbDxMaW5lVG9WZXJ0aWNhbFNlZ21lbnQ+IHsKKyAgICAgICAgYXV0byB5
ID0gcGFyc2VOdW1iZXIoY3VycmVudCwgZW5kKTsKKyAgICAgICAgaWYgKCF5KQorICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgCisgICAgICAgIExpbmVUb1ZlcnRpY2Fs
U2VnbWVudCBzZWdtZW50OworICAgICAgICBzZWdtZW50LnkgPSAqeTsKKyAgICAgICAgcmV0dXJu
IHNlZ21lbnQ7CisgICAgfTsKKwogICAgIGlmIChtX2lzOEJpdFNvdXJjZSkKLSAgICAgICAgcmV0
dXJuIHBhcnNlTnVtYmVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjgsIG1fZW5kLm1fY2hhcmFjdGVy
OCwgeSk7Ci0gICAgcmV0dXJuIHBhcnNlTnVtYmVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjE2LCBt
X2VuZC5tX2NoYXJhY3RlcjE2LCB5KTsKKyAgICAgICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQu
bV9jaGFyYWN0ZXI4LCBtX2VuZC5tX2NoYXJhY3RlcjgpOworICAgIHJldHVybiBoZWxwZXIobV9j
dXJyZW50Lm1fY2hhcmFjdGVyMTYsIG1fZW5kLm1fY2hhcmFjdGVyMTYpOwogfQogCi1ib29sIFNW
R1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlQ3VydmVUb0N1YmljU2VnbWVudChGbG9hdFBvaW50JiBw
b2ludDEsIEZsb2F0UG9pbnQmIHBvaW50MiwgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCitPcHRp
b25hbDxTVkdQYXRoU291cmNlOjpDdXJ2ZVRvQ3ViaWNTZWdtZW50PiBTVkdQYXRoU3RyaW5nU291
cmNlOjpwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQoKQogeworICAgIGF1dG8gaGVscGVyID0gW10o
Y29uc3QgYXV0byomIGN1cnJlbnQsIGNvbnN0IGF1dG8qIGVuZCkgLT4gT3B0aW9uYWw8Q3VydmVU
b0N1YmljU2VnbWVudD4geworICAgICAgICBhdXRvIHBvaW50MSA9IHBhcnNlRmxvYXRQb2ludChj
dXJyZW50LCBlbmQpOworICAgICAgICBpZiAoIXBvaW50MSkKKyAgICAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CisKKyAgICAgICAgYXV0byBwb2ludDIgPSBwYXJzZUZsb2F0UG9pbnQoY3Vy
cmVudCwgZW5kKTsKKyAgICAgICAgaWYgKCFwb2ludDIpCisgICAgICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OworCisgICAgICAgIGF1dG8gdGFyZ2V0UG9pbnQgPSBwYXJzZUZsb2F0UG9pbnQo
Y3VycmVudCwgZW5kKTsKKyAgICAgICAgaWYgKCF0YXJnZXRQb2ludCkKKyAgICAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICAgICAgQ3VydmVUb0N1YmljU2VnbWVudCBzZWdtZW50
OworICAgICAgICBzZWdtZW50LnBvaW50MSA9ICpwb2ludDE7CisgICAgICAgIHNlZ21lbnQucG9p
bnQyID0gKnBvaW50MjsKKyAgICAgICAgc2VnbWVudC50YXJnZXRQb2ludCA9ICp0YXJnZXRQb2lu
dDsKKyAgICAgICAgcmV0dXJuIHNlZ21lbnQ7CisgICAgfTsKKwogICAgIGlmIChtX2lzOEJpdFNv
dXJjZSkKLSAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXRQb2ludDMobV9jdXJyZW50Lm1fY2hhcmFj
dGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4LCBwb2ludDEsIHBvaW50MiwgdGFyZ2V0UG9pbnQpOwot
ICAgIHJldHVybiBwYXJzZUZsb2F0UG9pbnQzKG1fY3VycmVudC5tX2NoYXJhY3RlcjE2LCBtX2Vu
ZC5tX2NoYXJhY3RlcjE2LCBwb2ludDEsIHBvaW50MiwgdGFyZ2V0UG9pbnQpOworICAgICAgICBy
ZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjgsIG1fZW5kLm1fY2hhcmFjdGVyOCk7
CisgICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXIxNiwgbV9lbmQubV9jaGFy
YWN0ZXIxNik7CiB9CiAKLWJvb2wgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VDdXJ2ZVRvQ3Vi
aWNTbW9vdGhTZWdtZW50KEZsb2F0UG9pbnQmIHBvaW50MSwgRmxvYXRQb2ludCYgdGFyZ2V0UG9p
bnQpCitPcHRpb25hbDxTVkdQYXRoU291cmNlOjpDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50PiBT
VkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQoKQogewor
ICAgIGF1dG8gaGVscGVyID0gW10oY29uc3QgYXV0byomIGN1cnJlbnQsIGNvbnN0IGF1dG8qIGVu
ZCkgLT4gT3B0aW9uYWw8Q3VydmVUb0N1YmljU21vb3RoU2VnbWVudD4geworICAgICAgICBhdXRv
IHBvaW50MiA9IHBhcnNlRmxvYXRQb2ludChjdXJyZW50LCBlbmQpOworICAgICAgICBpZiAoIXBv
aW50MikKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICAgICAgYXV0byB0
YXJnZXRQb2ludCA9IHBhcnNlRmxvYXRQb2ludChjdXJyZW50LCBlbmQpOworICAgICAgICBpZiAo
IXRhcmdldFBvaW50KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgICAg
ICBDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50IHNlZ21lbnQ7CisgICAgICAgIHNlZ21lbnQucG9p
bnQyID0gKnBvaW50MjsKKyAgICAgICAgc2VnbWVudC50YXJnZXRQb2ludCA9ICp0YXJnZXRQb2lu
dDsKKyAgICAgICAgcmV0dXJuIHNlZ21lbnQ7CisgICAgfTsKKwogICAgIGlmIChtX2lzOEJpdFNv
dXJjZSkKLSAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXRQb2ludDIobV9jdXJyZW50Lm1fY2hhcmFj
dGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4LCBwb2ludDEsIHRhcmdldFBvaW50KTsKLSAgICByZXR1
cm4gcGFyc2VGbG9hdFBvaW50MihtX2N1cnJlbnQubV9jaGFyYWN0ZXIxNiwgbV9lbmQubV9jaGFy
YWN0ZXIxNiwgcG9pbnQxLCB0YXJnZXRQb2ludCk7CisgICAgICAgIHJldHVybiBoZWxwZXIobV9j
dXJyZW50Lm1fY2hhcmFjdGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4KTsKKyAgICByZXR1cm4gaGVs
cGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2KTsKIH0KIAot
Ym9vbCBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KEZs
b2F0UG9pbnQmIHBvaW50MiwgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCitPcHRpb25hbDxTVkdQ
YXRoU291cmNlOjpDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudD4gU1ZHUGF0aFN0cmluZ1NvdXJjZTo6
cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCgpCiB7CisgICAgYXV0byBoZWxwZXIgPSBbXShj
b25zdCBhdXRvKiYgY3VycmVudCwgY29uc3QgYXV0byogZW5kKSAtPiBPcHRpb25hbDxDdXJ2ZVRv
UXVhZHJhdGljU2VnbWVudD4geworICAgICAgICBhdXRvIHBvaW50MSA9IHBhcnNlRmxvYXRQb2lu
dChjdXJyZW50LCBlbmQpOworICAgICAgICBpZiAoIXBvaW50MSkKKyAgICAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CisKKyAgICAgICAgYXV0byB0YXJnZXRQb2ludCA9IHBhcnNlRmxvYXRQ
b2ludChjdXJyZW50LCBlbmQpOworICAgICAgICBpZiAoIXRhcmdldFBvaW50KQorICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgICAgICBDdXJ2ZVRvUXVhZHJhdGljU2VnbWVu
dCBzZWdtZW50OworICAgICAgICBzZWdtZW50LnBvaW50MSA9ICpwb2ludDE7CisgICAgICAgIHNl
Z21lbnQudGFyZ2V0UG9pbnQgPSAqdGFyZ2V0UG9pbnQ7CisgICAgICAgIHJldHVybiBzZWdtZW50
OworICAgIH07CisKICAgICBpZiAobV9pczhCaXRTb3VyY2UpCi0gICAgICAgIHJldHVybiBwYXJz
ZUZsb2F0UG9pbnQyKG1fY3VycmVudC5tX2NoYXJhY3RlcjgsIG1fZW5kLm1fY2hhcmFjdGVyOCwg
cG9pbnQyLCB0YXJnZXRQb2ludCk7Ci0gICAgcmV0dXJuIHBhcnNlRmxvYXRQb2ludDIobV9jdXJy
ZW50Lm1fY2hhcmFjdGVyMTYsIG1fZW5kLm1fY2hhcmFjdGVyMTYsIHBvaW50MiwgdGFyZ2V0UG9p
bnQpOworICAgICAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjgsIG1fZW5k
Lm1fY2hhcmFjdGVyOCk7CisgICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXIx
NiwgbV9lbmQubV9jaGFyYWN0ZXIxNik7CiB9CiAKLWJvb2wgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6
cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudChGbG9hdFBvaW50JiB0YXJnZXRQb2lu
dCkKK09wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50
PiBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50
KCkKIHsKKyAgICBhdXRvIGhlbHBlciA9IFtdKGNvbnN0IGF1dG8qJiBjdXJyZW50LCBjb25zdCBh
dXRvKiBlbmQpIC0+IE9wdGlvbmFsPEN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50PiB7Cisg
ICAgICAgIGF1dG8gdGFyZ2V0UG9pbnQgPSBwYXJzZUZsb2F0UG9pbnQoY3VycmVudCwgZW5kKTsK
KyAgICAgICAgaWYgKCF0YXJnZXRQb2ludCkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CisKKyAgICAgICAgQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQgc2VnbWVudDsKKyAg
ICAgICAgc2VnbWVudC50YXJnZXRQb2ludCA9ICp0YXJnZXRQb2ludDsKKyAgICAgICAgcmV0dXJu
IHNlZ21lbnQ7CisgICAgfTsKKwogICAgIGlmIChtX2lzOEJpdFNvdXJjZSkKLSAgICAgICAgcmV0
dXJuIHBhcnNlRmxvYXRQb2ludChtX2N1cnJlbnQubV9jaGFyYWN0ZXI4LCBtX2VuZC5tX2NoYXJh
Y3RlcjgsIHRhcmdldFBvaW50KTsKLSAgICByZXR1cm4gcGFyc2VGbG9hdFBvaW50KG1fY3VycmVu
dC5tX2NoYXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2LCB0YXJnZXRQb2ludCk7CisgICAg
ICAgIHJldHVybiBoZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyOCwgbV9lbmQubV9jaGFyYWN0
ZXI4KTsKKyAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjE2LCBtX2VuZC5t
X2NoYXJhY3RlcjE2KTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1z
dGF0aWMgYm9vbCBwYXJzZUFyY1RvU2VnbWVudEhlbHBlcihjb25zdCBDaGFyYWN0ZXJUeXBlKiYg
Y3VycmVudCwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kLCBmbG9hdCYgcngsIGZsb2F0JiByeSwg
ZmxvYXQmIGFuZ2xlLCBib29sJiBsYXJnZUFyYywgYm9vbCYgc3dlZXAsIEZsb2F0UG9pbnQmIHRh
cmdldFBvaW50KQorT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6QXJjVG9TZWdtZW50PiBTVkdQYXRo
U3RyaW5nU291cmNlOjpwYXJzZUFyY1RvU2VnbWVudCgpCiB7Ci0gICAgZmxvYXQgdG9YOwotICAg
IGZsb2F0IHRvWTsKLSAgICBpZiAoIXBhcnNlTnVtYmVyKGN1cnJlbnQsIGVuZCwgcngpCi0gICAg
ICAgIHx8ICFwYXJzZU51bWJlcihjdXJyZW50LCBlbmQsIHJ5KQotICAgICAgICB8fCAhcGFyc2VO
dW1iZXIoY3VycmVudCwgZW5kLCBhbmdsZSkKLSAgICAgICAgfHwgIXBhcnNlQXJjRmxhZyhjdXJy
ZW50LCBlbmQsIGxhcmdlQXJjKQotICAgICAgICB8fCAhcGFyc2VBcmNGbGFnKGN1cnJlbnQsIGVu
ZCwgc3dlZXApCi0gICAgICAgIHx8ICFwYXJzZU51bWJlcihjdXJyZW50LCBlbmQsIHRvWCkKLSAg
ICAgICAgfHwgIXBhcnNlTnVtYmVyKGN1cnJlbnQsIGVuZCwgdG9ZKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIHRhcmdldFBvaW50ID0gRmxvYXRQb2ludCh0b1gsIHRvWSk7Ci0gICAgcmV0
dXJuIHRydWU7Ci19CisgICAgYXV0byBoZWxwZXIgPSBbXShjb25zdCBhdXRvKiYgY3VycmVudCwg
Y29uc3QgYXV0byogZW5kKSAtPiBPcHRpb25hbDxBcmNUb1NlZ21lbnQ+CisgICAgeworICAgICAg
ICBhdXRvIHJ4ID0gcGFyc2VOdW1iZXIoY3VycmVudCwgZW5kKTsKKyAgICAgICAgaWYgKCFyeCkK
KyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIGF1dG8gcnkgPSBwYXJz
ZU51bWJlcihjdXJyZW50LCBlbmQpOworICAgICAgICBpZiAoIXJ5KQorICAgICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgYXV0byBhbmdsZSA9IHBhcnNlTnVtYmVyKGN1cnJl
bnQsIGVuZCk7CisgICAgICAgIGlmICghYW5nbGUpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworICAgICAgICBhdXRvIGxhcmdlQXJjID0gcGFyc2VBcmNGbGFnKGN1cnJlbnQsIGVu
ZCk7CisgICAgICAgIGlmICghbGFyZ2VBcmMpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworICAgICAgICBhdXRvIHN3ZWVwID0gcGFyc2VBcmNGbGFnKGN1cnJlbnQsIGVuZCk7Cisg
ICAgICAgIGlmICghc3dlZXApCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAg
ICAgICBhdXRvIHRhcmdldFBvaW50ID0gcGFyc2VGbG9hdFBvaW50KGN1cnJlbnQsIGVuZCk7Cisg
ICAgICAgIGlmICghdGFyZ2V0UG9pbnQpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworCisgICAgICAgIEFyY1RvU2VnbWVudCBzZWdtZW50OworICAgICAgICBzZWdtZW50LnJ4ID0g
KnJ4OworICAgICAgICBzZWdtZW50LnJ5ID0gKnJ5OworICAgICAgICBzZWdtZW50LmFuZ2xlID0g
KmFuZ2xlOworICAgICAgICBzZWdtZW50LmxhcmdlQXJjID0gKmxhcmdlQXJjOworICAgICAgICBz
ZWdtZW50LnN3ZWVwID0gKnN3ZWVwOworICAgICAgICBzZWdtZW50LnRhcmdldFBvaW50ID0gKnRh
cmdldFBvaW50OworICAgICAgICByZXR1cm4gc2VnbWVudDsKKyAgICB9OwogCi1ib29sIFNWR1Bh
dGhTdHJpbmdTb3VyY2U6OnBhcnNlQXJjVG9TZWdtZW50KGZsb2F0JiByeCwgZmxvYXQmIHJ5LCBm
bG9hdCYgYW5nbGUsIGJvb2wmIGxhcmdlQXJjLCBib29sJiBzd2VlcCwgRmxvYXRQb2ludCYgdGFy
Z2V0UG9pbnQpCi17CiAgICAgaWYgKG1faXM4Qml0U291cmNlKQotICAgICAgICByZXR1cm4gcGFy
c2VBcmNUb1NlZ21lbnRIZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyOCwgbV9lbmQubV9jaGFy
YWN0ZXI4LCByeCwgcnksIGFuZ2xlLCBsYXJnZUFyYywgc3dlZXAsIHRhcmdldFBvaW50KTsKLSAg
ICByZXR1cm4gcGFyc2VBcmNUb1NlZ21lbnRIZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYs
IG1fZW5kLm1fY2hhcmFjdGVyMTYsIHJ4LCByeSwgYW5nbGUsIGxhcmdlQXJjLCBzd2VlcCwgdGFy
Z2V0UG9pbnQpOworICAgICAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3Rlcjgs
IG1fZW5kLm1fY2hhcmFjdGVyOCk7CisgICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9jaGFy
YWN0ZXIxNiwgbV9lbmQubV9jaGFyYWN0ZXIxNik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTdHJpbmdTb3VyY2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFN0cmluZ1NvdXJjZS5oCShyZXZpc2lv
biAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFN0cmluZ1NvdXJjZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMiwxOCArMzIsMTggQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBi
b29sIGhhc01vcmVEYXRhKCkgY29uc3QgZmluYWw7CiAgICAgYm9vbCBtb3ZlVG9OZXh0VG9rZW4o
KSBmaW5hbDsKLSAgICBib29sIHBhcnNlU1ZHU2VnbWVudFR5cGUoU1ZHUGF0aFNlZ1R5cGUmKSBm
aW5hbDsKICAgICBTVkdQYXRoU2VnVHlwZSBuZXh0Q29tbWFuZChTVkdQYXRoU2VnVHlwZSBwcmV2
aW91c0NvbW1hbmQpIGZpbmFsOwogCi0gICAgYm9vbCBwYXJzZU1vdmVUb1NlZ21lbnQoRmxvYXRQ
b2ludCYpIGZpbmFsOwotICAgIGJvb2wgcGFyc2VMaW5lVG9TZWdtZW50KEZsb2F0UG9pbnQmKSBm
aW5hbDsKLSAgICBib29sIHBhcnNlTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQoZmxvYXQmKSBmaW5h
bDsKLSAgICBib29sIHBhcnNlTGluZVRvVmVydGljYWxTZWdtZW50KGZsb2F0JikgZmluYWw7Ci0g
ICAgYm9vbCBwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQoRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQm
LCBGbG9hdFBvaW50JikgZmluYWw7Ci0gICAgYm9vbCBwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNl
Z21lbnQoRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmKSBmaW5hbDsKLSAgICBib29sIHBhcnNlQ3Vy
dmVUb1F1YWRyYXRpY1NlZ21lbnQoRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmKSBmaW5hbDsKLSAg
ICBib29sIHBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQoRmxvYXRQb2ludCYpIGZp
bmFsOwotICAgIGJvb2wgcGFyc2VBcmNUb1NlZ21lbnQoZmxvYXQmLCBmbG9hdCYsIGZsb2F0Jiwg
Ym9vbCYsIGJvb2wmLCBGbG9hdFBvaW50JikgZmluYWw7CisgICAgT3B0aW9uYWw8U1ZHUGF0aFNl
Z1R5cGU+IHBhcnNlU1ZHU2VnbWVudFR5cGUoKSBmaW5hbDsKKyAgICBPcHRpb25hbDxNb3ZlVG9T
ZWdtZW50PiBwYXJzZU1vdmVUb1NlZ21lbnQoKSBmaW5hbDsKKyAgICBPcHRpb25hbDxMaW5lVG9T
ZWdtZW50PiBwYXJzZUxpbmVUb1NlZ21lbnQoKSBmaW5hbDsKKyAgICBPcHRpb25hbDxMaW5lVG9I
b3Jpem9udGFsU2VnbWVudD4gcGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudCgpIGZpbmFsOwor
ICAgIE9wdGlvbmFsPExpbmVUb1ZlcnRpY2FsU2VnbWVudD4gcGFyc2VMaW5lVG9WZXJ0aWNhbFNl
Z21lbnQoKSBmaW5hbDsKKyAgICBPcHRpb25hbDxDdXJ2ZVRvQ3ViaWNTZWdtZW50PiBwYXJzZUN1
cnZlVG9DdWJpY1NlZ21lbnQoKSBmaW5hbDsKKyAgICBPcHRpb25hbDxDdXJ2ZVRvQ3ViaWNTbW9v
dGhTZWdtZW50PiBwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQoKSBmaW5hbDsKKyAgICBP
cHRpb25hbDxDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudD4gcGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2Vn
bWVudCgpIGZpbmFsOworICAgIE9wdGlvbmFsPEN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50
PiBwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KCkgZmluYWw7CisgICAgT3B0aW9u
YWw8QXJjVG9TZWdtZW50PiBwYXJzZUFyY1RvU2VnbWVudCgpIGZpbmFsOwogCiAgICAgU3RyaW5n
IG1fc3RyaW5nOwogICAgIGJvb2wgbV9pczhCaXRTb3VyY2U7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHUG9pbnRMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1BvaW50TGlzdC5oCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
UG9pbnRMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDEyICs2MywxMyBAQCBwdWJsaWM6CiAg
ICAgICAgIGJvb2wgZGVsaW1QYXJzZWQgPSBmYWxzZTsKICAgICAgICAgd2hpbGUgKGN1ciA8IGVu
ZCkgewogICAgICAgICAgICAgZGVsaW1QYXJzZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIGZsb2F0
IHhQb3MgPSAwLjBmOwotICAgICAgICAgICAgaWYgKCFwYXJzZU51bWJlcihjdXIsIGVuZCwgeFBv
cykpCisKKyAgICAgICAgICAgIGF1dG8geFBvcyA9IHBhcnNlTnVtYmVyKGN1ciwgZW5kKTsKKyAg
ICAgICAgICAgIGlmICgheFBvcykKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICAgICAgICAgIGZsb2F0IHlQb3MgPSAwLjBmOwotICAgICAgICAgICAgaWYgKCFwYXJzZU51bWJl
cihjdXIsIGVuZCwgeVBvcywgZmFsc2UpKQorICAgICAgICAgICAgYXV0byB5UG9zID0gcGFyc2VO
dW1iZXIoY3VyLCBlbmQsIFN1ZmZpeFNraXBwaW5nUG9saWN5OjpEb250U2tpcCk7CisgICAgICAg
ICAgICBpZiAoIXlQb3MpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAg
ICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoY3VyLCBlbmQpOwpAQCAtNzksNyArODAsNyBAQCBw
dWJsaWM6CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMo
Y3VyLCBlbmQpOwogCi0gICAgICAgICAgICBhcHBlbmQoU1ZHUG9pbnQ6OmNyZWF0ZSh7IHhQb3Ms
IHlQb3MgfSkpOworICAgICAgICAgICAgYXBwZW5kKFNWR1BvaW50OjpjcmVhdGUoeyAqeFBvcywg
KnlQb3MgfSkpOwogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuICFkZWxpbVBhcnNlZDsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUb09URkZvbnRDb252ZXJzaW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVG9PVEZGb250Q29udmVyc2lvbi5jcHAJKHJl
dmlzaW9uIDI2MzE3NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUb09URkZvbnRDb252ZXJz
aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI5LDggKzIyOSw4IEBAIHByaXZhdGU6CiAgICAg
dm9pZCBhZGRDb2RlcG9pbnRSYW5nZXMoY29uc3QgVW5pY29kZVJhbmdlcyYsIEhhc2hTZXQ8R2x5
cGg+JiBnbHlwaFNldCkgY29uc3Q7CiAgICAgdm9pZCBhZGRDb2RlcG9pbnRzKGNvbnN0IEhhc2hT
ZXQ8U3RyaW5nPiYgY29kZXBvaW50cywgSGFzaFNldDxHbHlwaD4mIGdseXBoU2V0KSBjb25zdDsK
ICAgICB2b2lkIGFkZEdseXBoTmFtZXMoY29uc3QgSGFzaFNldDxTdHJpbmc+JiBnbHlwaE5hbWVz
LCBIYXNoU2V0PEdseXBoPiYgZ2x5cGhTZXQpIGNvbnN0OwotICAgIHZvaWQgYWRkS2VybmluZ1Bh
aXIoVmVjdG9yPEtlcm5pbmdEYXRhPiYsIGNvbnN0IFNWR0tlcm5pbmdQYWlyJikgY29uc3Q7Ci0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc2l6ZV90IGFwcGVuZEtFUk5TdWJ0YWJsZShib29sIChU
OjoqYnVpbGRLZXJuaW5nUGFpcikoU1ZHS2VybmluZ1BhaXImKSBjb25zdCwgdWludDE2X3QgY292
ZXJhZ2UpOworICAgIHZvaWQgYWRkS2VybmluZ1BhaXIoVmVjdG9yPEtlcm5pbmdEYXRhPiYsIFNW
R0tlcm5pbmdQYWlyJiYpIGNvbnN0OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHNpemVfdCBh
cHBlbmRLRVJOU3VidGFibGUoT3B0aW9uYWw8U1ZHS2VybmluZ1BhaXI+IChUOjoqYnVpbGRLZXJu
aW5nUGFpcikoKSBjb25zdCwgdWludDE2X3QgY292ZXJhZ2UpOwogICAgIHNpemVfdCBmaW5pc2hB
cHBlbmRpbmdLRVJOU3VidGFibGUoVmVjdG9yPEtlcm5pbmdEYXRhPiwgdWludDE2X3QgY292ZXJh
Z2UpOwogCiAgICAgdm9pZCBhcHBlbmRMaWdhdHVyZVN1YnRhYmxlKHNpemVfdCBzdWJ0YWJsZVJl
Y29yZExvY2F0aW9uKTsKQEAgLTEwNDAsNyArMTA0MCw3IEBAIHZvaWQgU1ZHVG9PVEZGb250Q29u
dmVydGVyOjphZGRHbHlwaE5hbWUKICAgICB9CiB9CiAKLXZvaWQgU1ZHVG9PVEZGb250Q29udmVy
dGVyOjphZGRLZXJuaW5nUGFpcihWZWN0b3I8S2VybmluZ0RhdGE+JiBkYXRhLCBjb25zdCBTVkdL
ZXJuaW5nUGFpciYga2VybmluZ1BhaXIpIGNvbnN0Cit2b2lkIFNWR1RvT1RGRm9udENvbnZlcnRl
cjo6YWRkS2VybmluZ1BhaXIoVmVjdG9yPEtlcm5pbmdEYXRhPiYgZGF0YSwgU1ZHS2VybmluZ1Bh
aXImJiBrZXJuaW5nUGFpcikgY29uc3QKIHsKICAgICBIYXNoU2V0PEdseXBoPiBnbHlwaFNldDE7
CiAgICAgSGFzaFNldDxHbHlwaD4gZ2x5cGhTZXQyOwpAQCAtMTA1OSwxMyArMTA1OSwxMiBAQCB2
b2lkIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6YWRkS2VybmluZ1BhCiAgICAgfQogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgc2l6ZV90IFNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBw
ZW5kS0VSTlN1YnRhYmxlKGJvb2wgKFQ6OipidWlsZEtlcm5pbmdQYWlyKShTVkdLZXJuaW5nUGFp
ciYpIGNvbnN0LCB1aW50MTZfdCBjb3ZlcmFnZSkKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGlu
ZSBzaXplX3QgU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRLRVJOU3VidGFibGUoT3B0aW9u
YWw8U1ZHS2VybmluZ1BhaXI+IChUOjoqYnVpbGRLZXJuaW5nUGFpcikoKSBjb25zdCwgdWludDE2
X3QgY292ZXJhZ2UpCiB7CiAgICAgVmVjdG9yPEtlcm5pbmdEYXRhPiBrZXJuaW5nRGF0YTsKICAg
ICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBjaGlsZHJlbk9mVHlwZTxUPihtX2ZvbnRFbGVtZW50KSkg
ewotICAgICAgICBTVkdLZXJuaW5nUGFpciBrZXJuaW5nUGFpcjsKLSAgICAgICAgaWYgKChlbGVt
ZW50LipidWlsZEtlcm5pbmdQYWlyKShrZXJuaW5nUGFpcikpCi0gICAgICAgICAgICBhZGRLZXJu
aW5nUGFpcihrZXJuaW5nRGF0YSwga2VybmluZ1BhaXIpOworICAgICAgICBpZiAoYXV0byBrZXJu
aW5nUGFpciA9IChlbGVtZW50LipidWlsZEtlcm5pbmdQYWlyKSgpKQorICAgICAgICAgICAgYWRk
S2VybmluZ1BhaXIoa2VybmluZ0RhdGEsIFdURk1vdmUoKmtlcm5pbmdQYWlyKSk7CiAgICAgfQog
ICAgIHJldHVybiBmaW5pc2hBcHBlbmRpbmdLRVJOU3VidGFibGUoV1RGTW92ZShrZXJuaW5nRGF0
YSksIGNvdmVyYWdlKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm1M
aXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybUxpc3Qu
aAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybUxp
c3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDE3ICsxMTQsMTggQEAgcHJpdmF0ZToKICAgICAg
ICAgYm9vbCBkZWxpbVBhcnNlZCA9IGZhbHNlOwogICAgICAgICB3aGlsZSAoc3RhcnQgPCBlbmQp
IHsKICAgICAgICAgICAgIGRlbGltUGFyc2VkID0gZmFsc2U7Ci0gICAgICAgICAgICBTVkdUcmFu
c2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZSB0eXBlID0gU1ZHVHJhbnNmb3JtVmFsdWU6OlNW
R19UUkFOU0ZPUk1fVU5LTk9XTjsKICAgICAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhz
dGFydCwgZW5kKTsKLQotICAgICAgICAgICAgaWYgKCFTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZUFu
ZFNraXBUeXBlKHN0YXJ0LCBlbmQsIHR5cGUpKQorICAgICAgICAgICAgCisgICAgICAgICAgICBh
dXRvIHR5cGUgPSBTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZUFuZFNraXBUeXBlKHN0YXJ0LCBlbmQp
OworICAgICAgICAgICAgaWYgKCF0eXBlKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgICAgICAgICAgUmVmPFNWR1RyYW5zZm9ybT4gdHJhbnNmb3JtID0gU1ZHVHJhbnNmb3Jt
OjpjcmVhdGUodHlwZSk7Ci0gICAgICAgICAgICBpZiAoIVNWR1RyYW5zZm9ybWFibGU6OnBhcnNl
VHJhbnNmb3JtVmFsdWUodHlwZSwgc3RhcnQsIGVuZCwgdHJhbnNmb3JtLT52YWx1ZSgpKSkKKyAg
ICAgICAgICAgIGF1dG8gcGFyc2VkVHJhbnNmb3JtVmFsdWUgPSBTVkdUcmFuc2Zvcm1hYmxlOjpw
YXJzZVRyYW5zZm9ybVZhbHVlKCp0eXBlLCBzdGFydCwgZW5kKTsKKyAgICAgICAgICAgIGlmICgh
cGFyc2VkVHJhbnNmb3JtVmFsdWUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgICAgICAgICBhcHBlbmQoV1RGTW92ZSh0cmFuc2Zvcm0pKTsKKyAgICAgICAgICAgIGFwcGVu
ZChTVkdUcmFuc2Zvcm06OmNyZWF0ZSgqcGFyc2VkVHJhbnNmb3JtVmFsdWUpKTsKKwogICAgICAg
ICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHN0YXJ0LCBlbmQpOwogICAgICAgICAgICAgaWYg
KHN0YXJ0IDwgZW5kICYmICpzdGFydCA9PSAnLCcpIHsKICAgICAgICAgICAgICAgICBkZWxpbVBh
cnNlZCA9IHRydWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtYWJsZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybWFibGUuY3Bw
CShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtYWJs
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDggKzQzLDEyIEBAIHN0YXRpYyBpbnQgcGFyc2VU
cmFuc2Zvcm1QYXJhbUxpc3QoY29uc3QKICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMocHRyLCBl
bmQpOwogCiAgICAgd2hpbGUgKHJlcXVpcmVkUGFyYW1zIDwgcmVxdWlyZWQpIHsKLSAgICAgICAg
aWYgKHB0ciA+PSBlbmQgfHwgIXBhcnNlTnVtYmVyKHB0ciwgZW5kLCB2YWx1ZXNbcmVxdWlyZWRQ
YXJhbXNdLCBmYWxzZSkpCisgICAgICAgIGlmIChwdHIgPj0gZW5kKQogICAgICAgICAgICAgcmV0
dXJuIC0xOworICAgICAgICBhdXRvIHBhcnNlZE51bWJlciA9IHBhcnNlTnVtYmVyKHB0ciwgZW5k
LCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNraXApOworICAgICAgICBpZiAoIXBhcnNlZE51
bWJlcikKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgdmFsdWVzW3JlcXVpcmVkUGFy
YW1zXSA9ICpwYXJzZWROdW1iZXI7CiAgICAgICAgIHJlcXVpcmVkUGFyYW1zKys7CiAgICAgICAg
IGlmIChyZXF1aXJlZFBhcmFtcyA8IHJlcXVpcmVkKQogICAgICAgICAgICAgc2tpcE9wdGlvbmFs
U1ZHU3BhY2VzT3JEZWxpbWl0ZXIocHRyLCBlbmQpOwpAQCAtNjMsOCArNjcsMTIgQEAgc3RhdGlj
IGludCBwYXJzZVRyYW5zZm9ybVBhcmFtTGlzdChjb25zdAogICAgICAgICAgICAgcmV0dXJuIC0x
OwogICAgIH0gZWxzZSB7CiAgICAgICAgIHdoaWxlIChvcHRpb25hbFBhcmFtcyA8IG9wdGlvbmFs
KSB7Ci0gICAgICAgICAgICBpZiAocHRyID49IGVuZCB8fCAhcGFyc2VOdW1iZXIocHRyLCBlbmQs
IHZhbHVlc1tyZXF1aXJlZFBhcmFtcyArIG9wdGlvbmFsUGFyYW1zXSwgZmFsc2UpKQorICAgICAg
ICAgICAgaWYgKHB0ciA+PSBlbmQpCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAg
ICAgICAgYXV0byBwYXJzZWROdW1iZXIgPSBwYXJzZU51bWJlcihwdHIsIGVuZCwgU3VmZml4U2tp
cHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsKKyAgICAgICAgICAgIGlmICghcGFyc2VkTnVtYmVyKQog
ICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIHZhbHVlc1tyZXF1aXJlZFBh
cmFtcyArIG9wdGlvbmFsUGFyYW1zXSA9ICpwYXJzZWROdW1iZXI7CiAgICAgICAgICAgICBvcHRp
b25hbFBhcmFtcysrOwogICAgICAgICAgICAgaWYgKG9wdGlvbmFsUGFyYW1zIDwgb3B0aW9uYWwp
CiAgICAgICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxpbWl0ZXIocHRyLCBl
bmQpOwpAQCAtOTAsMTYgKzk4LDE3IEBAIHN0YXRpYyBjb25zdCBpbnQgb3B0aW9uYWxWYWx1ZXNG
b3JUeXBlW10KIC8vIFRoaXMgZGVzdHJ1Y3RvciBpcyBuZWVkZWQgaW4gb3JkZXIgdG8gbGluayBj
b3JyZWN0bHkgd2l0aCBJbnRlbCBJQ0MuCiBTVkdUcmFuc2Zvcm1hYmxlOjp+U1ZHVHJhbnNmb3Jt
YWJsZSgpID0gZGVmYXVsdDsKIAotYm9vbCBTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZVRyYW5zZm9y
bVZhbHVlKFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlIHR5cGUsIGNvbnN0IFVD
aGFyKiYgcHRyLCBjb25zdCBVQ2hhciogZW5kLCBTVkdUcmFuc2Zvcm1WYWx1ZSYgdHJhbnNmb3Jt
KQorT3B0aW9uYWw8U1ZHVHJhbnNmb3JtVmFsdWU+IFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJh
bnNmb3JtVmFsdWUoU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGUgdHlwZSwgY29u
c3QgVUNoYXIqJiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQpCiB7CiAgICAgaWYgKHR5cGUgPT0gU1ZH
VHJhbnNmb3JtVmFsdWU6OlNWR19UUkFOU0ZPUk1fVU5LTk9XTikKLSAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgaW50IHZhbHVlQ291bnQg
PSAwOwogICAgIGZsb2F0IHZhbHVlc1tdID0gezAsIDAsIDAsIDAsIDAsIDB9OwogICAgIGlmICgo
dmFsdWVDb3VudCA9IHBhcnNlVHJhbnNmb3JtUGFyYW1MaXN0KHB0ciwgZW5kLCB2YWx1ZXMsIHJl
cXVpcmVkVmFsdWVzRm9yVHlwZVt0eXBlXSwgb3B0aW9uYWxWYWx1ZXNGb3JUeXBlW3R5cGVdKSkg
PCAwKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAKKyAgICBTVkdUcmFuc2Zvcm1WYWx1ZSB0cmFuc2Zvcm07CiAgICAgc3dpdGNoICh0eXBlKSB7
CiAgICAgY2FzZSBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RSQU5TRk9STV9VTktOT1dOOgogICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTEzMyw3ICsxNDIsNyBAQCBib29sIFNWR1Ry
YW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtVmFsCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAot
ICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiB0cmFuc2Zvcm07CiB9CiAKIHN0YXRpYyBjb25z
dCBVQ2hhciBza2V3WERlc2NbXSA9ICB7J3MnLCAnaycsICdlJywgJ3cnLCAnWCd9OwpAQCAtMTQz
LDM5ICsxNTIsMzUgQEAgc3RhdGljIGNvbnN0IFVDaGFyIHRyYW5zbGF0ZURlc2NbXSA9ICB7Jwog
c3RhdGljIGNvbnN0IFVDaGFyIHJvdGF0ZURlc2NbXSA9ICB7J3InLCAnbycsICd0JywgJ2EnLCAn
dCcsICdlJ307CiBzdGF0aWMgY29uc3QgVUNoYXIgbWF0cml4RGVzY1tdID0gIHsnbScsICdhJywg
J3QnLCAncicsICdpJywgJ3gnfTsKIAotYm9vbCBTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZUFuZFNr
aXBUeXBlKGNvbnN0IFVDaGFyKiYgY3VyclRyYW5zZm9ybSwgY29uc3QgVUNoYXIqIGVuZCwgU1ZH
VHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGUmIHR5cGUpCitPcHRpb25hbDxTVkdUcmFu
c2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZT4gU1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VBbmRT
a2lwVHlwZShjb25zdCBVQ2hhciomIGN1cnJUcmFuc2Zvcm0sIGNvbnN0IFVDaGFyKiBlbmQpCiB7
CiAgICAgaWYgKGN1cnJUcmFuc2Zvcm0gPj0gZW5kKQotICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBpZiAoKmN1cnJUcmFuc2Zvcm0gPT0g
J3MnKSB7CiAgICAgICAgIGlmIChza2lwU3RyaW5nKGN1cnJUcmFuc2Zvcm0sIGVuZCwgc2tld1hE
ZXNjLCBXVEZfQVJSQVlfTEVOR1RIKHNrZXdYRGVzYykpKQotICAgICAgICAgICAgdHlwZSA9IFNW
R1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX1NLRVdYOworICAgICAgICAgICAgcmV0dXJu
IFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX1NLRVdYOwogICAgICAgICBlbHNlIGlm
IChza2lwU3RyaW5nKGN1cnJUcmFuc2Zvcm0sIGVuZCwgc2tld1lEZXNjLCBXVEZfQVJSQVlfTEVO
R1RIKHNrZXdZRGVzYykpKQotICAgICAgICAgICAgdHlwZSA9IFNWR1RyYW5zZm9ybVZhbHVlOjpT
VkdfVFJBTlNGT1JNX1NLRVdZOworICAgICAgICAgICAgcmV0dXJuIFNWR1RyYW5zZm9ybVZhbHVl
OjpTVkdfVFJBTlNGT1JNX1NLRVdZOwogICAgICAgICBlbHNlIGlmIChza2lwU3RyaW5nKGN1cnJU
cmFuc2Zvcm0sIGVuZCwgc2NhbGVEZXNjLCBXVEZfQVJSQVlfTEVOR1RIKHNjYWxlRGVzYykpKQot
ICAgICAgICAgICAgdHlwZSA9IFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX1NDQUxF
OworICAgICAgICAgICAgcmV0dXJuIFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX1ND
QUxFOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0gZWxzZSBpZiAoc2tpcFN0cmluZyhjdXJyVHJh
bnNmb3JtLCBlbmQsIHRyYW5zbGF0ZURlc2MsIFdURl9BUlJBWV9MRU5HVEgodHJhbnNsYXRlRGVz
YykpKQotICAgICAgICB0eXBlID0gU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR19UUkFOU0ZPUk1fVFJB
TlNMQVRFOworICAgICAgICByZXR1cm4gU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR19UUkFOU0ZPUk1f
VFJBTlNMQVRFOwogICAgIGVsc2UgaWYgKHNraXBTdHJpbmcoY3VyclRyYW5zZm9ybSwgZW5kLCBy
b3RhdGVEZXNjLCBXVEZfQVJSQVlfTEVOR1RIKHJvdGF0ZURlc2MpKSkKLSAgICAgICAgdHlwZSA9
IFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX1JPVEFURTsKKyAgICAgICAgcmV0dXJu
IFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX1JPVEFURTsKICAgICBlbHNlIGlmIChz
a2lwU3RyaW5nKGN1cnJUcmFuc2Zvcm0sIGVuZCwgbWF0cml4RGVzYywgV1RGX0FSUkFZX0xFTkdU
SChtYXRyaXhEZXNjKSkpCi0gICAgICAgIHR5cGUgPSBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RS
QU5TRk9STV9NQVRSSVg7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IHJldHVybiBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RSQU5TRk9STV9NQVRSSVg7CiAKLSAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCiBTVkdUcmFuc2Zvcm1W
YWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZSBTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZVRyYW5zZm9ybVR5
cGUoY29uc3QgU3RyaW5nJiB0eXBlU3RyaW5nKQogewotICAgIFNWR1RyYW5zZm9ybVZhbHVlOjpT
VkdUcmFuc2Zvcm1UeXBlIHR5cGUgPSBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RSQU5TRk9STV9V
TktOT1dOOwogICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyh0eXBl
U3RyaW5nKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKICAgICBjb25zdCBVQ2hhciogY2hhcmFj
dGVycyA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKLSAgICBwYXJzZUFuZFNraXBUeXBlKGNoYXJh
Y3RlcnMsIGNoYXJhY3RlcnMgKyB0eXBlU3RyaW5nLmxlbmd0aCgpLCB0eXBlKTsKLSAgICByZXR1
cm4gdHlwZTsKKyAgICByZXR1cm4gcGFyc2VBbmRTa2lwVHlwZShjaGFyYWN0ZXJzLCBjaGFyYWN0
ZXJzICsgdHlwZVN0cmluZy5sZW5ndGgoKSkudmFsdWVPcihTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZH
X1RSQU5TRk9STV9VTktOT1dOKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1RyYW5zZm9ybWFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJh
bnNmb3JtYWJsZS5oCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
VHJhbnNmb3JtYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw5ICszMiw5IEBAIGNsYXNzIFNW
R1RyYW5zZm9ybWFibGUgOiBwdWJsaWMgU1ZHTG9jYXQKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5T
VkdUcmFuc2Zvcm1hYmxlKCk7CiAKLSAgICBzdGF0aWMgYm9vbCBwYXJzZVRyYW5zZm9ybVZhbHVl
KFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlLCBjb25zdCBVQ2hhciomIHB0ciwg
Y29uc3QgVUNoYXIqIGVuZCwgU1ZHVHJhbnNmb3JtVmFsdWUmKTsKKyAgICBzdGF0aWMgT3B0aW9u
YWw8U1ZHVHJhbnNmb3JtVmFsdWU+IHBhcnNlVHJhbnNmb3JtVmFsdWUoU1ZHVHJhbnNmb3JtVmFs
dWU6OlNWR1RyYW5zZm9ybVR5cGUsIGNvbnN0IFVDaGFyKiYgcHRyLCBjb25zdCBVQ2hhciogZW5k
KTsKICAgICBzdGF0aWMgU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGUgcGFyc2VU
cmFuc2Zvcm1UeXBlKGNvbnN0IFN0cmluZyYpOwotICAgIHN0YXRpYyBib29sIHBhcnNlQW5kU2tp
cFR5cGUoY29uc3QgVUNoYXIqJiBjdXJyVHJhbnNmb3JtLCBjb25zdCBVQ2hhciogZW5kLCBTVkdU
cmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZSYpOworICAgIHN0YXRpYyBPcHRpb25hbDxT
VkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZT4gcGFyc2VBbmRTa2lwVHlwZShjb25z
dCBVQ2hhciomIGN1cnJUcmFuc2Zvcm0sIGNvbnN0IFVDaGFyKiBlbmQpOwogCiAgICAgQWZmaW5l
VHJhbnNmb3JtIGxvY2FsQ29vcmRpbmF0ZVNwYWNlVHJhbnNmb3JtKFNWR0xvY2F0YWJsZTo6Q1RN
U2NvcGUpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKTsg
fQogICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKSBj
b25zdCA9IDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVktlcm5FbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVktlcm5FbGVtZW50LmNwcAkocmV2
aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ZLZXJuRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQzLDI0ICs0Myw0NCBAQCBSZWY8U1ZHVktlcm5FbGVtZW50PiBT
VkdWS2VybkVsZW1lbnQ6OmNyCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZHVktlcm5FbGVt
ZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKLWJvb2wgU1ZHVktlcm5FbGVtZW50OjpidWls
ZFZlcnRpY2FsS2VybmluZ1BhaXIoU1ZHS2VybmluZ1BhaXImIGtlcm5pbmdQYWlyKSBjb25zdAor
T3B0aW9uYWw8U1ZHS2VybmluZ1BhaXI+IFNWR1ZLZXJuRWxlbWVudDo6YnVpbGRWZXJ0aWNhbEtl
cm5pbmdQYWlyKCkgY29uc3QKIHsKKyAgICAvLyBGSVhNRTogQ2FuIHRoaXMgYmUgc2hhcmVkIHdp
dGggU1ZHSEtlcm5FbGVtZW50OjpidWlsZFZlcnRpY2FsS2VybmluZ1BhaXI/CisKICAgICBhdXRv
JiB1MSA9IGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oU1ZHTmFtZXM6OnUxQXR0cik7
CiAgICAgYXV0byYgZzEgPSBhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFNWR05hbWVz
OjpnMUF0dHIpOwogICAgIGF1dG8mIHUyID0gYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlv
bihTVkdOYW1lczo6dTJBdHRyKTsKICAgICBhdXRvJiBnMiA9IGF0dHJpYnV0ZVdpdGhvdXRTeW5j
aHJvbml6YXRpb24oU1ZHTmFtZXM6OmcyQXR0cik7CiAgICAgaWYgKCh1MS5pc0VtcHR5KCkgJiYg
ZzEuaXNFbXB0eSgpKSB8fCAodTIuaXNFbXB0eSgpICYmIGcyLmlzRW1wdHkoKSkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIGF1dG8g
Z2x5cGhOYW1lMSA9IHBhcnNlR2x5cGhOYW1lKGcxKTsKKyAgICBpZiAoIWdseXBoTmFtZTEpCisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgYXV0byBnbHlwaE5hbWUyID0gcGFyc2VH
bHlwaE5hbWUoZzIpOworICAgIGlmICghZ2x5cGhOYW1lMikKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKKyAgICBhdXRvIHVuaWNvZGVTdHJpbmcxID0gcGFyc2VLZXJuaW5nVW5pY29kZVN0
cmluZyh1MSk7CisgICAgaWYgKCF1bmljb2RlU3RyaW5nMSkKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKKyAgICBhdXRvIHVuaWNvZGVTdHJpbmcyID0gcGFyc2VLZXJuaW5nVW5pY29kZVN0
cmluZyh1Mik7CisgICAgaWYgKCF1bmljb2RlU3RyaW5nMikKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKKworICAgIGJvb2wgb2sgPSBmYWxzZTsKKyAgICBhdXRvIGtlcm5pbmcgPSBhdHRy
aWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFNWR05hbWVzOjprQXR0cikuc3RyaW5nKCkudG9G
bG9hdCgmb2spOworICAgIGlmICghb2spCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAK
LSAgICBpZiAocGFyc2VHbHlwaE5hbWUoZzEsIGtlcm5pbmdQYWlyLmdseXBoTmFtZTEpCi0gICAg
ICAgICYmIHBhcnNlR2x5cGhOYW1lKGcyLCBrZXJuaW5nUGFpci5nbHlwaE5hbWUyKQotICAgICAg
ICAmJiBwYXJzZUtlcm5pbmdVbmljb2RlU3RyaW5nKHUxLCBrZXJuaW5nUGFpci51bmljb2RlUmFu
Z2UxLCBrZXJuaW5nUGFpci51bmljb2RlTmFtZTEpCi0gICAgICAgICYmIHBhcnNlS2VybmluZ1Vu
aWNvZGVTdHJpbmcodTIsIGtlcm5pbmdQYWlyLnVuaWNvZGVSYW5nZTIsIGtlcm5pbmdQYWlyLnVu
aWNvZGVOYW1lMikpIHsKLSAgICAgICAgYm9vbCBvayA9IGZhbHNlOwotICAgICAgICBrZXJuaW5n
UGFpci5rZXJuaW5nID0gYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihTVkdOYW1lczo6
a0F0dHIpLnN0cmluZygpLnRvRmxvYXQoJm9rKTsKLSAgICAgICAgcmV0dXJuIG9rOwotICAgIH0K
LSAgICByZXR1cm4gZmFsc2U7CisgICAgU1ZHS2VybmluZ1BhaXIga2VybmluZ1BhaXI7CisgICAg
a2VybmluZ1BhaXIuZ2x5cGhOYW1lMSA9IFdURk1vdmUoKmdseXBoTmFtZTEpOworICAgIGtlcm5p
bmdQYWlyLmdseXBoTmFtZTIgPSBXVEZNb3ZlKCpnbHlwaE5hbWUyKTsKKyAgICBrZXJuaW5nUGFp
ci51bmljb2RlUmFuZ2UxID0gV1RGTW92ZSh1bmljb2RlU3RyaW5nMS0+Zmlyc3QpOworICAgIGtl
cm5pbmdQYWlyLnVuaWNvZGVOYW1lMSA9IFdURk1vdmUodW5pY29kZVN0cmluZzEtPnNlY29uZCk7
CisgICAga2VybmluZ1BhaXIudW5pY29kZVJhbmdlMiA9IFdURk1vdmUodW5pY29kZVN0cmluZzIt
PmZpcnN0KTsKKyAgICBrZXJuaW5nUGFpci51bmljb2RlTmFtZTIgPSBXVEZNb3ZlKHVuaWNvZGVT
dHJpbmcyLT5zZWNvbmQpOworICAgIGtlcm5pbmdQYWlyLmtlcm5pbmcgPSBrZXJuaW5nOworICAg
IHJldHVybiBrZXJuaW5nUGFpcjsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1ZLZXJuRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdWS2Vy
bkVsZW1lbnQuaAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ZL
ZXJuRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBAIGNsYXNzIFNWR1ZL
ZXJuRWxlbWVudCBmaW5hbCA6IHB1YmxpYyBTVkcKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPFNW
R1ZLZXJuRWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCYpOwog
Ci0gICAgYm9vbCBidWlsZFZlcnRpY2FsS2VybmluZ1BhaXIoU1ZHS2VybmluZ1BhaXImIGtlcm5p
bmdQYWlyKSBjb25zdDsKKyAgICBPcHRpb25hbDxTVkdLZXJuaW5nUGFpcj4gYnVpbGRWZXJ0aWNh
bEtlcm5pbmdQYWlyKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgU1ZHVktlcm5FbGVtZW50KGNv
bnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1ZpZXdTcGVjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVmll
d1NwZWMuY3BwCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVmll
d1NwZWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OSwxMCArODksMTAgQEAgYm9vbCBTVkdWaWV3
U3BlYzo6cGFyc2VWaWV3U3BlYyhjb25zdCBTdAogICAgICAgICAgICAgICAgIGlmIChjdXJyVmll
d1NwZWMgPj0gZW5kIHx8ICpjdXJyVmlld1NwZWMgIT0gJygnKQogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgY3VyclZpZXdTcGVjKys7Ci0gICAgICAg
ICAgICAgICAgRmxvYXRSZWN0IHZpZXdCb3g7Ci0gICAgICAgICAgICAgICAgaWYgKCFTVkdGaXRU
b1ZpZXdCb3g6OnBhcnNlVmlld0JveChjdXJyVmlld1NwZWMsIGVuZCwgdmlld0JveCwgZmFsc2Up
KQorICAgICAgICAgICAgICAgIGF1dG8gdmlld0JveCA9IFNWR0ZpdFRvVmlld0JveDo6cGFyc2VW
aWV3Qm94KGN1cnJWaWV3U3BlYywgZW5kLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgaWYgKCF2
aWV3Qm94KQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAg
ICAgc2V0Vmlld0JveCh2aWV3Qm94KTsKKyAgICAgICAgICAgICAgICBzZXRWaWV3Qm94KFdURk1v
dmUoKnZpZXdCb3gpKTsKICAgICAgICAgICAgICAgICBpZiAoY3VyclZpZXdTcGVjID49IGVuZCB8
fCAqY3VyclZpZXdTcGVjICE9ICcpJykKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICAgICAgICAgIGN1cnJWaWV3U3BlYysrOwpJbmRleDogU291cmNlL1dlYkNvcmUv
c3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkFk
ZGl0aXZlVmFsdWVGdW5jdGlvbkltcGwuaAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dl
YkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1w
bC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTQsMTAgKzI1NCw4IEBAIHB1YmxpYzoKIAogICAgIE9w
dGlvbmFsPGZsb2F0PiBjYWxjdWxhdGVEaXN0YW5jZShTVkdFbGVtZW50KiwgY29uc3QgU3RyaW5n
JiBmcm9tLCBjb25zdCBTdHJpbmcmIHRvKSBjb25zdCBvdmVycmlkZQogICAgIHsKLSAgICAgICAg
ZmxvYXQgZnJvbU51bWJlciA9IDA7Ci0gICAgICAgIGZsb2F0IHRvTnVtYmVyID0gMDsKLSAgICAg
ICAgcGFyc2VOdW1iZXJGcm9tU3RyaW5nKGZyb20sIGZyb21OdW1iZXIpOwotICAgICAgICBwYXJz
ZU51bWJlckZyb21TdHJpbmcodG8sIHRvTnVtYmVyKTsKKyAgICAgICAgZmxvYXQgZnJvbU51bWJl
ciA9IHBhcnNlTnVtYmVyKGZyb20pLnZhbHVlT3IoMCk7CisgICAgICAgIGZsb2F0IHRvTnVtYmVy
ID0gcGFyc2VOdW1iZXIodG8pLnZhbHVlT3IoMCk7CiAgICAgICAgIHJldHVybiBmYWJzZih0b051
bWJlciAtIGZyb21OdW1iZXIpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL3By
b3BlcnRpZXMvU1ZHUHJvcGVydHlUcmFpdHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdmcvcHJvcGVydGllcy9TVkdQcm9wZXJ0eVRyYWl0cy5oCShyZXZpc2lvbiAyNjMxNzYpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdQcm9wZXJ0eVRyYWl0cy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03NSwxMCArNzUsMTAgQEAgc3RydWN0IFNWR1Byb3BlcnR5VHJhaXRzPHN0
ZDo6cGFpcjxpbnQsIAogICAgIHN0YXRpYyBzdGQ6OnBhaXI8aW50LCBpbnQ+IGluaXRpYWxWYWx1
ZSgpIHsgcmV0dXJuIHsgfTsgfQogICAgIHN0YXRpYyBzdGQ6OnBhaXI8aW50LCBpbnQ+IGZyb21T
dHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiAgICAgewotICAgICAgICBmbG9hdCBmaXJzdE51
bWJlciA9IDAsIHNlY29uZE51bWJlciA9IDA7Ci0gICAgICAgIGlmICghcGFyc2VOdW1iZXJPcHRp
b25hbE51bWJlcihzdHJpbmcsIGZpcnN0TnVtYmVyLCBzZWNvbmROdW1iZXIpKQorICAgICAgICBh
dXRvIHJlc3VsdCA9IHBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIoc3RyaW5nKTsKKyAgICAgICAg
aWYgKCFyZXN1bHQpCiAgICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICByZXR1cm4gc3Rk
OjptYWtlX3BhaXIoc3RhdGljX2Nhc3Q8aW50Pihyb3VuZGYoZmlyc3ROdW1iZXIpKSwgc3RhdGlj
X2Nhc3Q8aW50Pihyb3VuZGYoc2Vjb25kTnVtYmVyKSkpOworICAgICAgICByZXR1cm4gc3RkOjpt
YWtlX3BhaXIoc3RhdGljX2Nhc3Q8aW50Pihyb3VuZGYocmVzdWx0LT5maXJzdCkpLCBzdGF0aWNf
Y2FzdDxpbnQ+KHJvdW5kZihyZXN1bHQtPnNlY29uZCkpKTsKICAgICB9CiAgICAgc3RhdGljIE9w
dGlvbmFsPHN0ZDo6cGFpcjxpbnQsIGludD4+IHBhcnNlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBj
b25zdCBTdHJpbmcmKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gaW5pdGlhbFZhbHVl
KCk7IH0KICAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nKHN0ZDo6cGFpcjxpbnQsIGludD4pIHsg
QVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBlbXB0eVN0cmluZygpOyB9CkBAIC04OSwxNyAr
ODksMTEgQEAgc3RydWN0IFNWR1Byb3BlcnR5VHJhaXRzPGZsb2F0PiB7CiAgICAgc3RhdGljIGZs
b2F0IGluaXRpYWxWYWx1ZSgpIHsgcmV0dXJuIDA7IH0KICAgICBzdGF0aWMgZmxvYXQgZnJvbVN0
cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKICAgICB7Ci0gICAgICAgIGZsb2F0IG51bWJlciA9
IDA7Ci0gICAgICAgIGlmICghcGFyc2VOdW1iZXJGcm9tU3RyaW5nKHN0cmluZywgbnVtYmVyKSkK
LSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4gbnVtYmVyOworICAgICAgICBy
ZXR1cm4gcGFyc2VOdW1iZXIoc3RyaW5nKS52YWx1ZU9yKDApOwogICAgIH0KICAgICBzdGF0aWMg
T3B0aW9uYWw8ZmxvYXQ+IHBhcnNlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBTdHJpbmcm
IHN0cmluZykKICAgICB7Ci0gICAgICAgIGZsb2F0IG51bWJlcjsKLSAgICAgICAgaWYgKCFwYXJz
ZU51bWJlckZyb21TdHJpbmcoc3RyaW5nLCBudW1iZXIpKQotICAgICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKLSAgICAgICAgcmV0dXJuIG51bWJlcjsKKyAgICAgICAgcmV0dXJuIHBhcnNl
TnVtYmVyKHN0cmluZyk7CiAgICAgfQogICAgIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmcoZmxvYXQg
dHlwZSkgeyByZXR1cm4gU3RyaW5nOjpudW1iZXIodHlwZSk7IH0KIH07CkBAIC0xMDksMTAgKzEw
Myw3IEBAIHN0cnVjdCBTVkdQcm9wZXJ0eVRyYWl0czxzdGQ6OnBhaXI8ZmxvYXQKICAgICBzdGF0
aWMgc3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4gaW5pdGlhbFZhbHVlKCkgeyByZXR1cm4geyB9OyB9
CiAgICAgc3RhdGljIHN0ZDo6cGFpcjxmbG9hdCwgZmxvYXQ+IGZyb21TdHJpbmcoY29uc3QgU3Ry
aW5nJiBzdHJpbmcpCiAgICAgewotICAgICAgICBmbG9hdCBmaXJzdE51bWJlciA9IDAsIHNlY29u
ZE51bWJlciA9IDA7Ci0gICAgICAgIGlmICghcGFyc2VOdW1iZXJPcHRpb25hbE51bWJlcihzdHJp
bmcsIGZpcnN0TnVtYmVyLCBzZWNvbmROdW1iZXIpKQotICAgICAgICAgICAgcmV0dXJuIHsgfTsK
LSAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGZpcnN0TnVtYmVyLCBzZWNvbmROdW1iZXIp
OworICAgICAgICByZXR1cm4gcGFyc2VOdW1iZXJPcHRpb25hbE51bWJlcihzdHJpbmcpLnZhbHVl
T3Ioc3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4geyB9KTsKICAgICB9CiAgICAgc3RhdGljIE9wdGlv
bmFsPHN0ZDo6cGFpcjxmbG9hdCwgZmxvYXQ+PiBwYXJzZShjb25zdCBRdWFsaWZpZWROYW1lJiwg
Y29uc3QgU3RyaW5nJikgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIGluaXRpYWxWYWx1
ZSgpOyB9CiAgICAgc3RhdGljIFN0cmluZyB0b1N0cmluZyhzdGQ6OnBhaXI8ZmxvYXQsIGZsb2F0
PikgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIGVtcHR5U3RyaW5nKCk7IH0KQEAgLTEy
MywxNyArMTE0LDExIEBAIHN0cnVjdCBTVkdQcm9wZXJ0eVRyYWl0czxGbG9hdFBvaW50PiB7CiAg
ICAgc3RhdGljIEZsb2F0UG9pbnQgaW5pdGlhbFZhbHVlKCkgeyByZXR1cm4gRmxvYXRQb2ludCgp
OyB9CiAgICAgc3RhdGljIEZsb2F0UG9pbnQgZnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmlu
ZykKICAgICB7Ci0gICAgICAgIEZsb2F0UG9pbnQgcG9pbnQ7Ci0gICAgICAgIGlmICghcGFyc2VQ
b2ludChzdHJpbmcsIHBvaW50KSkKLSAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgIHJl
dHVybiBwb2ludDsKKyAgICAgICAgcmV0dXJuIHBhcnNlUG9pbnQoc3RyaW5nKS52YWx1ZU9yKEZs
b2F0UG9pbnQgeyB9KTsKICAgICB9CiAgICAgc3RhdGljIE9wdGlvbmFsPEZsb2F0UG9pbnQ+IHBh
cnNlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBTdHJpbmcmIHN0cmluZykKICAgICB7Ci0g
ICAgICAgIEZsb2F0UG9pbnQgcG9pbnQ7Ci0gICAgICAgIGlmICghcGFyc2VQb2ludChzdHJpbmcs
IHBvaW50KSkKLSAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgICAgIHJldHVy
biBwb2ludDsKKyAgICAgICAgcmV0dXJuIHBhcnNlUG9pbnQoc3RyaW5nKTsKICAgICB9CiAgICAg
c3RhdGljIFN0cmluZyB0b1N0cmluZyhjb25zdCBGbG9hdFBvaW50JiB0eXBlKQogICAgIHsKQEAg
LTE0NiwxNyArMTMxLDExIEBAIHN0cnVjdCBTVkdQcm9wZXJ0eVRyYWl0czxGbG9hdFJlY3Q+IHsK
ICAgICBzdGF0aWMgRmxvYXRSZWN0IGluaXRpYWxWYWx1ZSgpIHsgcmV0dXJuIEZsb2F0UmVjdCgp
OyB9CiAgICAgc3RhdGljIEZsb2F0UmVjdCBmcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5n
KQogICAgIHsKLSAgICAgICAgRmxvYXRSZWN0IHJlY3Q7Ci0gICAgICAgIGlmICghcGFyc2VSZWN0
KHN0cmluZywgcmVjdCkpCi0gICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICByZXR1cm4g
cmVjdDsKKyAgICAgICAgcmV0dXJuIHBhcnNlUmVjdChzdHJpbmcpLnZhbHVlT3IoRmxvYXRSZWN0
IHsgfSk7CiAgICAgfQogICAgIHN0YXRpYyBPcHRpb25hbDxGbG9hdFJlY3Q+IHBhcnNlKGNvbnN0
IFF1YWxpZmllZE5hbWUmLCBjb25zdCBTdHJpbmcmIHN0cmluZykKICAgICB7Ci0gICAgICAgIEZs
b2F0UmVjdCByZWN0OwotICAgICAgICBpZiAoIXBhcnNlUmVjdChzdHJpbmcsIHJlY3QpKQotICAg
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAgcmV0dXJuIHJlY3Q7CisgICAg
ICAgIHJldHVybiBwYXJzZVJlY3Qoc3RyaW5nKTsKICAgICB9CiAgICAgc3RhdGljIFN0cmluZyB0
b1N0cmluZyhjb25zdCBGbG9hdFJlY3QmIHR5cGUpCiAgICAgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>402407</attachid>
            <date>2020-06-20 17:06:41 -0700</date>
            <delta_ts>2020-06-21 15:18:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213416-20200620170640.patch</filename>
            <type>text/plain</type>
            <size>146528</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MzI5NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0NyBAQAorMjAyMC0wNi0xOSAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQ29udmVydCBtdWNoIG9mIHRoZSBT
Vkcgc3RyaW5nIHBhcnNpbmcgY29kZSB0byB1c2UgT3B0aW9uYWwgYmFzZWQgcmV0dXJuIHZhbHVl
cyByYXRoZXIgdGhhbiBvdXQtcGFyYW1ldGVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEzNDE2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlIFNWRyBwYXJzZXJzIHRvIHVzZSBPcHRpb25hbCBz
dHlsZSByZXR1cm4gcHJvZ3JhbW1pbmcgcmF0aGVyIHRoYW4gb3V0IHBhcmFtZXRlcnMuCisgICAg
ICAgIFRvIG1ha2UgdGhpbmdzIGV2ZW4gbmljZXIsIFNWR1BhdGhTb3VyY2UgYmFzZWQgcGFyc2Vy
cyBub3cgaGF2ZSBhIHR5cGUgcGVyLXBhcnNlIGZ1bmN0aW9uLAorICAgICAgICB3aGljaCBtYWtl
cyB3b3JraW5nIHdpdGggdGhlbSBtdWNoIGVhc2llci4gSW4gdGhlIGZ1dHVyZSwgd2Ugc2hvdWxk
IGNvbnNpZGVyIGV4YW5kaW5nIHRoZXNlCisgICAgICAgIG5ldyB0eXBlcyB0byBiZSB1c2VkIGJ5
IFNWR1BhdGhDb25zdW1lciBmYW1pbHkgb2YgY2xhc3NlcyBhcyB3ZWxsLgorCisgICAgICAgICog
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICBBZGQgU1ZHUGF0aFNl
Z1ZhbHVlLmgsIHdoaWNoIHdhcyBtaXNzaW5nIGZyb20gdGhlIFhjb2RlIHByb2plY3QuCisKKyAg
ICAgICAgKiBzdmcvU1ZHQW5nbGVWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUFu
Z2xlVHlwZSk6IAorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5nbGVWYWx1ZTo6c2V0VmFsdWVBc1N0
cmluZyk6CisgICAgICAgIEFkb3B0IHVwZGF0ZWQgcGFyc2VOdW1iZXIoKSBmdW5jdGlvbiwgYW5k
IGRvIGEgZHJpdmUgYnkgcmVtb3ZhbCBvZiBhbiBlYXN5IHRvIHJlbW92ZQorICAgICAgICB1cGNv
bnZlcnRlZENoYXJhY3RlcnMuCisgCisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OjpjYWxj
dWxhdGVUb0F0RW5kT2ZEdXJhdGlvblZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1h
dGVNb3Rpb25FbGVtZW50OjpjYWxjdWxhdGVGcm9tQW5kVG9WYWx1ZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OmNhbGN1bGF0ZUZyb21BbmRCeVZhbHVlcyk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6Y2FsY3VsYXRlRGlz
dGFuY2UpOgorICAgICAgICBOb3cgdXNlcyBuZXcgcGFyc2VQb2ludCgpIGZ1bmN0aW9uLiBVc2lu
ZyBPcHRpb25hbC52YWx1ZU9yKCkgd2hlcmUKKyAgICAgICAgdGhlIG9sZCBjb2RlIHdvdWxkIGhh
dmUgaGFkIHBhcnNlUG9pbnQoKSBkb2luZyB0aGUgY2xlYXJpbmcuCisgICAgCisgICAgICAgICog
c3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VLZXlT
cGxpbmVzKToKKyAgICAgICAgTm93IHJldHVybnMgYW4gT3B0aW9uYWw8VmVjdG9yPFVuaXRCZXpp
ZXI+Pi4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OnBhcnNlQXR0cmli
dXRlKToKKyAgICAgICAgTm93IHVzZXMgbmV3IHBhcnNlS2V5U3BsaW5lcywgYW5kIGRvZXMgYW4g
ZXhwbGljaXQgY2xlYXIgb24gcGFyc2UgZmFpbHVyZSAob2xkIGNvZGUgCisgICAgICAgIGRpZCBp
dCBpbXBsaWNpdGx5IGluIHRoZSBwYXJzZSBmdW5jdGlvbikuCisKKyAgICAgICAgKiBzdmcvU1ZH
RkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb252
b2x2ZU1hdHJpeEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKiBzdmcvU1ZHRkVE
aWZmdXNlTGlnaHRpbmdFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFRGlmZnVz
ZUxpZ2h0aW5nRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAgICAgICAqIHN2Zy9TVkdGRURy
b3BTaGFkb3dFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFRHJvcFNoYWRvd0Vs
ZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKiBzdmcvU1ZHRkVHYXVzc2lhbkJsdXJF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6
cGFyc2VBdHRyaWJ1dGUpOgorICAgICAgICAqIHN2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6OnBhcnNlQXR0cmli
dXRlKToKKyAgICAgICAgKiBzdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpwYXJzZUF0dHJp
YnV0ZSk6CisgICAgICAgICogc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAg
ICAgICBBZG9wdCBPcHRpb25hbCBiYXNlZCBwYXJzZU51bWJlck9wdGlvbmFsTnVtYmVyLgorCisg
ICAgICAgICogc3ZnL1NWR0ltYWdlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdJ
bWFnZUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKiBzdmcvU1ZHRkVJbWFnZUVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVJbWFnZUVsZW1lbnQ6OnBhcnNlQXR0
cmlidXRlKToKKyAgICAgICAgU2ltcGxpZnkgYnkgdXNpbmcgdGhlIFNWR1ByZXNlcnZlQXNwZWN0
UmF0aW9WYWx1ZSBjb25zdHJ1Y3RvcgorICAgICAgICB3aGljaCBjYWxscyBwYXJzZS4gTm8gbmVl
ZCBmb3IgdGhyZWUgbGluZXMuCisKKyAgICAgICAgKiBzdmcvU1ZHRml0VG9WaWV3Qm94LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpdFRvVmlld0JveDo6cGFyc2VBdHRyaWJ1dGUpOgorICAg
ICAgICBBZG9wdCBuZXcgT3B0aW9uYWwgYmFzZWQgcGFyc2VWaWV3Qm94LgorICAgICAgICBTaW1w
bGlmeSBieSB1c2luZyB0aGUgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlIGNvbnN0cnVjdG9y
CisgICAgICAgIHdoaWNoIGNhbGxzIHBhcnNlLiBObyBuZWVkIGZvciB0aHJlZSBsaW5lcy4KKwor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRml0VG9WaWV3Qm94OjpwYXJzZVZpZXdCb3gpOgorICAgICAg
ICBDb252ZXJ0IHRvIGJlIE9wdGlvbmFsIGJhc2VkLCBhbmQgYWRvcHQgbmV3IHBhcnNlTnVtYmVy
IGZ1bmN0aW9ucy4KKworICAgICAgICAqIHN2Zy9TVkdGaXRUb1ZpZXdCb3guaDoKKyAgICAgICAg
VXBkYXRlZCBzaWduYXR1cmVzIGZvciBuZXcgT3B0aW9uYWwgYmFzZWQgZnVuY3Rpb25zLgorCisg
ICAgICAgICogc3ZnL1NWR0dseXBoUmVmRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpw
YXJzZUZsb2F0KToKKyAgICAgICAgQWRvcHQgT3B0aW9uYWwgYmFzZWQgcGFyc2VOdW1iZXIuCisg
ICAgICAgIAorICAgICAgICAqIHN2Zy9TVkdIS2VybkVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHSEtlcm5FbGVtZW50OjpidWlsZEhvcml6b250YWxLZXJuaW5nUGFpciBjb25zdCk6
CisgICAgICAgICogc3ZnL1NWR0hLZXJuRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdWS2Vy
bkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVktlcm5FbGVtZW50OjpidWlsZFZl
cnRpY2FsS2VybmluZ1BhaXIgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdWS2VybkVsZW1lbnQu
aDoKKyAgICAgICAgQ29udmVydCB0byBiZSBPcHRpb25hbCBiYXNlZC4gVXBkYXRlIGEgZmV3IGNh
bGxlcnMgdG8gdXNlIG1ha2VTdHJpbmcuCisKKyAgICAgICAgKiBzdmcvU1ZHVG9PVEZGb250Q29u
dmVyc2lvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFk
ZEtlcm5pbmdQYWlyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RvT1RGRm9udENvbnZl
cnRlcjo6YXBwZW5kS0VSTlN1YnRhYmxlKToKKyAgICAgICAgQWRvcHQgbmV3IE9wdGlvbmFsIGJh
c2VkIGtlcm5pbmcgcGFpciBidWlsZGVycy4gQWRkIHNvbWUgbW92ZXMKKyAgICAgICAgdG8gYXZv
aWQgc29tZSBjb3BpZXMuCisKKyAgICAgICAgKiBzdmcvU1ZHTGVuZ3RoVmFsdWUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHTGVuZ3RoVmFsdWU6OnNldFZhbHVlQXNTdHJpbmcpOgorICAgICAg
ICBBZG9wdCBPcHRpb25hbCBiYXNlZCBwYXJzZU51bWJlci4KKworICAgICAgICAqIHN2Zy9TVkdO
dW1iZXJMaXN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdOdW1iZXJMaXN0OjpwYXJzZSk6Cisg
ICAgICAgIEFkb3B0IE9wdGlvbmFsIGJhc2VkIHBhcnNlTnVtYmVyLgorCisgICAgICAgICogc3Zn
L1NWR1BhcnNlclV0aWxpdGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZW5lcmljUGFyc2VO
dW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VOdW1iZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6Z2VuZXJpY1BhcnNlQXJjRmxhZyk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUFyY0ZsYWcp
OgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VOdW1iZXJPcHRpb25hbE51bWJlcik6CisgICAgICAg
IChXZWJDb3JlOjpwYXJzZVBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlUmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpwYXJzZUdseXBoTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpwYXJz
ZVVuaWNvZGVSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUtlcm5pbmdVbmljb2RlU3Ry
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OmdlbmVyaWNQYXJzZUZsb2F0UG9pbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6cGFyc2VGbG9hdFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlU1ZH
TnVtYmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlTnVtYmVyRnJvbVN0cmlu
Zyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpwYXJzZURlbGltaXRlZFN0cmluZyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpwYXJzZUZsb2F0UG9pbnQyKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OnBhcnNlRmxvYXRQb2ludDMpOiBEZWxldGVkLgorICAgICAgICAqIHN2
Zy9TVkdQYXJzZXJVdGlsaXRpZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OmlzU1ZHU3BhY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6c2tpcE9wdGlvbmFsU1ZHU3BhY2VzKToKKyAgICAgICAgKFdlYkNv
cmU6OnNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVsaW1pdGVyKToKKyAgICAgICAgLSBDb252ZXJ0
cyBwYXJzZSogZnVuY3Rpb25zIHRvIHJldHVybiBPcHRpb25hbCB2YWx1ZXMgcmF0aGVyIHRoYW4g
dXNpbmcgb3V0cGFyYW1ldGVycy4KKyAgICAgICAgLSBSZW1vdmVzIHVudXNlZCBwYXJzZVNWR051
bWJlciBhbmQgcGFyc2VEZWxpbWl0ZWRTdHJpbmcuCisgICAgICAgIC0gUmVtb3ZlcyBwYXJzZUZs
b2F0UG9pbnQyIGFuZCBwYXJzZUZsb2F0UG9pbnQzLiBUaGV5IHdlcmVuJ3QgdXNlZnVsIGVub3Vn
aCB0byBrZWVwIGFyb3VuZC4KKyAgICAgICAgLSBSZW5hbWVzIHBhcnNlTnVtYmVyRnJvbVN0cmlu
ZyB0byBwYXJzZU51bWJlci4gVGhlIGFyZ3VtZW50IGlzIGEgU3RyaW5nLCBpdCdzIGNsZWFyIGVu
b3VnaC4KKyAgICAgICAgLSBSZXBsYWNlIGJvb2xlYW4gc2tpcCBwYXJhbWV0ZXJzIHdpdGggbmV3
IGVudW0gU3VmZml4U2tpcHBpbmdQb2xpY3kuCisgICAgICAgIC0gTWFrZSBwYXJzZUZsb2F0UG9p
bnQgaGF2ZSB0d28gb3ZlcmxvYWRzIHJhdGhlciB0aGFuIGJlaW5nIHRlbXBsYXRpemVkIHRvIGJl
IGNvbnNpc3RlbnQuCisKKworICAgICAgICAqIHN2Zy9TVkdQYXRoQmxlbmRlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpwdWxsRnJvbVNvdXJjZXMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0
aEJsZW5kZXI6OmJsZW5kTW92ZVRvU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRo
QmxlbmRlcjo6YmxlbmRMaW5lVG9TZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhC
bGVuZGVyOjpibGVuZExpbmVUb0hvcml6b250YWxTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1BhdGhCbGVuZGVyOjpibGVuZExpbmVUb1ZlcnRpY2FsU2VnbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdQYXRoQmxlbmRlcjo6YmxlbmRDdXJ2ZVRvQ3ViaWNTZWdtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1BhdGhCbGVuZGVyOjpibGVuZEN1cnZlVG9DdWJpY1Ntb290aFNlZ21l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJsZW5kZXI6OmJsZW5kQ3VydmVUb1F1YWRy
YXRpY1NlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJsZW5kZXI6OmJsZW5kQ3Vy
dmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJs
ZW5kZXI6OmJsZW5kQXJjVG9TZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCbGVu
ZGVyOjpjYW5CbGVuZFBhdGhzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCbGVuZGVyOjpi
bGVuZEFuaW1hdGVkUGF0aCk6CisgICAgICAgIFVwZGF0ZSB0byBhZG9wdCBuZXcgU1ZHUGF0aFNv
dXJjZSBpbnRlcmZhY2UuIEFkZGVkIHB1bGxGcm9tU291cmNlcyBoZWxwZXIKKyAgICAgICAgd2hp
Y2ggc3Vic3RhbnRpYWxseSBzaW1wbGlmaWVzIHB1bGxpbmcgZnJvbSBib3RoIHRoZSBmcm9tIGFu
ZCB0byBzb3VyY2UgYXQKKyAgICAgICAgdGhlIHNhbWUgdGltZSBhbmQgaXMgbm93IHBvc3NpYmxl
IGR1ZSB0byBhbGwgdGhlIFNWR1BhdGhTb3VyY2UgZnVuY3Rpb25zCisgICAgICAgIHJldHVybmlu
ZyB0aGUgc2VnbWVudCB0eXBlcyByYXRoZXIgdGhhbiB0YWtpbmcgdGhlbSBhcyBvdXQgcGFyYW1l
dGVycy4KKworICAgICAgICAqIHN2Zy9TVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6bmV4dENvbW1hbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlU1ZHU2VnbWVudFR5
cGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlTW92
ZVRvU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6
cGFyc2VMaW5lVG9TZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFt
U291cmNlOjpwYXJzZUxpbmVUb0hvcml6b250YWxTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZUxpbmVUb1ZlcnRpY2FsU2VnbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VDdXJ2ZVRvQ3Vi
aWNTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpw
YXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0
aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlQ3VydmVUb1F1YWRyYXRp
Y1Ntb290aFNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW1Tb3Vy
Y2U6OnBhcnNlQXJjVG9TZWdtZW50KToKKyAgICAgICAgKiBzdmcvU1ZHUGF0aEJ5dGVTdHJlYW1T
b3VyY2UuaDoKKyAgICAgICAgQWRvcHQgbmV3IFNWR1BhdGhTb3VyY2UgaW50ZXJmYWNlLgorCisg
ICAgICAgICogc3ZnL1NWR1BhdGhQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0
aFBhcnNlcjo6cGFyc2VNb3ZlVG9TZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhQ
YXJzZXI6OnBhcnNlTGluZVRvU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoUGFy
c2VyOjpwYXJzZUxpbmVUb0hvcml6b250YWxTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1BhdGhQYXJzZXI6OnBhcnNlTGluZVRvVmVydGljYWxTZWdtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1BhdGhQYXJzZXI6OnBhcnNlQ3VydmVUb0N1YmljU2VnbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdQYXRoUGFyc2VyOjpwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFBhcnNlcjo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2Vn
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoUGFyc2VyOjpwYXJzZUN1cnZlVG9RdWFk
cmF0aWNTbW9vdGhTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhQYXJzZXI6OnBh
cnNlQXJjVG9TZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhQYXJzZXI6OnBhcnNl
UGF0aERhdGEpOgorICAgICAgICBBZGFwdCB0byBuZXcgU1ZHUGF0aFNvdXJjZSBpbnRlcmZhY2Uu
IENvZGUgcmVhZHMgYSBiaXQgbmljZXIgbm93CisgICAgICAgIHRoYXQgd2UgZG9uJ3QgaGF2ZSBh
IHRvbiBvZiBsb2NhbCB2YXJpYWJsZXMgaW4gZWFjaCBtZXRob2QuIENvdWxkCisgICAgICAgIGJl
IG1hZGUgbmljZXIgaW4gdGhlIGZ1dHVyZSBieSBhZG9wdGluZyBTZWdtZW50IHR5cGVzIGluIHRo
ZSBwYXRoCisgICAgICAgIGNvbnN1bWVyIGNvZGUuCisKKyAgICAgICAgKiBzdmcvU1ZHUGF0aFNl
Z0xpc3RTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0xpc3RTb3VyY2U6
Om5leHRDb21tYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdMaXN0U291cmNlOjpw
YXJzZVNWR1NlZ21lbnRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdMaXN0U291
cmNlOjpwYXJzZU1vdmVUb1NlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0xp
c3RTb3VyY2U6OnBhcnNlTGluZVRvU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRo
U2VnTGlzdFNvdXJjZTo6cGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNlQ3VydmVUb0N1
YmljU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFy
c2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhT
ZWdMaXN0U291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhT
ZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUFy
Y1RvU2VnbWVudCk6CisgICAgICAgICogc3ZnL1NWR1BhdGhTZWdMaXN0U291cmNlLmg6CisgICAg
ICAgIEFkb3B0IG5ldyBTVkdQYXRoU291cmNlIGludGVyZmFjZS4KKworICAgICAgICAqIHN2Zy9T
VkdQYXRoU291cmNlLmg6CisgICAgICAgIFVwZGF0ZSBpbnRlcmZhY2UgdG8gcmV0dXJuIE9wdGlv
bmFscywgd2l0aCBhIHNwZWNpZmljIHR5cGUgZm9yCisgICAgICAgIHNlZ21lbnQga2luZCB0aGF0
IGJlIHBhcnNlZC4KKworICAgICAgICAqIHN2Zy9TVkdQYXRoU3RyaW5nU291cmNlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Om5leHRDb21tYW5kSGVscGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1BhdGhTdHJpbmdTb3VyY2U6Om5leHRDb21tYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNl
U1ZHU2VnbWVudFR5cGVIZWxwZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFN0cmluZ1Nv
dXJjZTo6cGFyc2VTVkdTZWdtZW50VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU3Ry
aW5nU291cmNlOjpwYXJzZU1vdmVUb1NlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0
aFN0cmluZ1NvdXJjZTo6cGFyc2VMaW5lVG9TZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VMaW5lVG9WZXJ0aWNhbFNlZ21l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VDdXJ2ZVRv
Q3ViaWNTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTdHJpbmdTb3VyY2U6OnBh
cnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRo
U3RyaW5nU291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNl
Z21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VBcmNU
b1NlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VBcmNUb1NlZ21lbnRIZWxwZXIpOiBE
ZWxldGVkLgorICAgICAgICAqIHN2Zy9TVkdQYXRoU3RyaW5nU291cmNlLmg6CisgICAgICAgIEFk
b3B0IG5ldyBTVkdQYXRoU291cmNlIGludGVyZmFjZS4gUmVwbGFjZSBvdXQgb2YgbGluZSBoZWxw
ZXJzIChvciB1c2Ugb2YgdGhpbmdzCisgICAgICAgIGxpa2UgcGFyc2VGbG9hdFBvaW50Mikgd2l0
aCBnZW5lcmljIGxhbWJkYSBoZWxwZXJzLCBoZWxwaW5nIHRvIGtlZXAgdGhlIGNvZGUgbW9yZQor
ICAgICAgICBsb2NhbGl6ZWQuCisgICAgCisgICAgICAgICogc3ZnL1NWR1BvaW50TGlzdC5oOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHUG9pbnRMaXN0OjpwYXJzZSk6CisgICAgICAgIEFkb3B0IE9w
dGlvbmFsIGJhc2VkIHBhcnNlTnVtYmVyLgorCisgICAgICAgICogc3ZnL1NWR1RyYW5zZm9ybUxp
c3QuaDoKKyAgICAgICAgKiBzdmcvU1ZHVHJhbnNmb3JtYWJsZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpwYXJzZVRyYW5zZm9ybVBhcmFtTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUcmFu
c2Zvcm1hYmxlOjpwYXJzZVRyYW5zZm9ybVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Ry
YW5zZm9ybWFibGU6OnBhcnNlQW5kU2tpcFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVHJh
bnNmb3JtYWJsZTo6cGFyc2VUcmFuc2Zvcm1UeXBlKToKKyAgICAgICAgKiBzdmcvU1ZHVHJhbnNm
b3JtYWJsZS5oOgorICAgICAgICBDb252ZXJ0IHBhcnNlVHJhbnNmb3JtVmFsdWUvcGFyc2VBbmRT
a2lwVHlwZSB0byBiZSBPcHRpb25hbCBiYXNlZC4KKworICAgICAgICAqIHN2Zy9TVkdWaWV3U3Bl
Yy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdWaWV3U3BlYzo6cGFyc2VWaWV3U3BlYyk6Cisg
ICAgICAgIEFkb3B0IE9wdGlvbmFsIGJhc2VkIHBhcnNlVmlld0JveC4KKworICAgICAgICAqIHN2
Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbkltcGwuaDoKKyAg
ICAgICAgQWRvcHQgT3B0aW9uYWwgYmFzZWQgcGFyc2VOdW1iZXIuCisKKyAgICAgICAgKiBzdmcv
cHJvcGVydGllcy9TVkdQcm9wZXJ0eVRyYWl0cy5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJv
cGVydHlUcmFpdHM8ZmxvYXQ+Ojpmcm9tU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1By
b3BlcnR5VHJhaXRzPGZsb2F0Pjo6cGFyc2UpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVy
dHlUcmFpdHM8RmxvYXRQb2ludD46OmZyb21TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
UHJvcGVydHlUcmFpdHM8RmxvYXRQb2ludD46OnBhcnNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1Byb3BlcnR5VHJhaXRzPEZsb2F0UmVjdD46OmZyb21TdHJpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHUHJvcGVydHlUcmFpdHM8RmxvYXRSZWN0Pjo6cGFyc2UpOgorICAgICAgICBBZG9wdCBP
cHRpb25hbCBiYXNlZCBwYXJzZXJzLgorCiAyMDIwLTA2LTE5ICBDaHJpcyBEdW1leiAgPGNkdW1l
ekBhcHBsZS5jb20+CiAKICAgICAgICAgQXZvaWQgaW5pdGlhbGl6aW5nIFJlbmRlclRoZW1lIHNp
bmdsZXRvbiB1bm5lY2Vzc2FyaWx5IGluIHRoZSBVSVByb2Nlc3MKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI2
MzE3NikKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtMTAwODMsNiArMTAwODMsNyBAQAogCQk3QzgzREU4NTFEMDRD
QkQ0MDBGRUJDRjMgLyogU3ByaW5nU29sdmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNwcmluZ1NvbHZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Qzg1
QjIwMTIyRkIwNDg1MDAzMDY4NEYgLyogV0hMU0xVbm5hbWVkVHlwZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBXSExTTFVubmFtZWRUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJN0M4NUIyMDQyMkZCMDYzMjAwMzA2ODRGIC8qIFdITFNMVW5uYW1lZFR5cGVIYXNoLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdITFNMVW5uYW1lZFR5cGVIYXNoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTdDODgyNEM0MjQ5RDdCMDUwMEVEOEZDNCAvKiBTVkdQYXRoU2VnVmFsdWUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHUGF0aFNlZ1ZhbHVlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDOEUzNDkyMUU0QTMzOEUwMDU0Q0UyMyAvKiBKU0RP
TUNvbnZlcnRBbnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNET01Db252
ZXJ0QW55Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDOEUzNDkzMUU0QTMzOEUw
MDU0Q0UyMyAvKiBKU0RPTUNvbnZlcnRCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEpTRE9NQ29udmVydEJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
N0M4RTM0OTQxRTRBMzM4RTAwNTRDRTIzIC8qIEpTRE9NQ29udmVydEJvb2xlYW4uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNET01Db252ZXJ0Qm9vbGVhbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjUxODYsNiArMjUxODcsNyBAQAogCQkJCTg0QjZCOTc2
MTIwRjEzRTUwMEI4RUZBRiAvKiBTVkdQYXRoU2VnTGlzdFNvdXJjZS5oICovLAogCQkJCUIyMjI3
OEVGMEQwMEJGMjEwMDcxQjc4MiAvKiBTVkdQYXRoU2VnTW92ZXRvQWJzLmlkbCAqLywKIAkJCQlC
MjIyNzhGMDBEMDBCRjIxMDA3MUI3ODIgLyogU1ZHUGF0aFNlZ01vdmV0b1JlbC5pZGwgKi8sCisJ
CQkJN0M4ODI0QzQyNDlEN0IwNTAwRUQ4RkM0IC8qIFNWR1BhdGhTZWdWYWx1ZS5oICovLAogCQkJ
CTg0MzAwQkQ3MTIwQzlBRDQwMDIxOTU0QSAvKiBTVkdQYXRoU291cmNlLmggKi8sCiAJCQkJODQx
OUQyQjcxMjBFMEM3NjAwMTQxRjhGIC8qIFNWR1BhdGhTdHJpbmdCdWlsZGVyLmNwcCAqLywKIAkJ
CQk4NDE5RDJCODEyMEUwQzc2MDAxNDFGOEYgLyogU1ZHUGF0aFN0cmluZ0J1aWxkZXIuaCAqLywK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmdsZVZhbHVlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5nbGVWYWx1ZS5jcHAJKHJldmlzaW9uIDI2MzE3NikK
KysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmdsZVZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODAsNyArODAsNyBAQCBTdHJpbmcgU1ZHQW5nbGVWYWx1ZTo6dmFsdWVBc1N0cmluZygpIGNv
CiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCi1zdGF0aWMgaW5saW5lIFNWR0FuZ2xlVmFsdWU6
OlR5cGUgcGFyc2VBbmdsZVR5cGUoY29uc3QgVUNoYXIqIHB0ciwgY29uc3QgVUNoYXIqIGVuZCkK
K3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBpbmxpbmUgU1ZHQW5nbGVW
YWx1ZTo6VHlwZSBwYXJzZUFuZ2xlVHlwZShjb25zdCBDaGFyYWN0ZXJUeXBlKiBwdHIsIGNvbnN0
IENoYXJhY3RlclR5cGUqIGVuZCkKIHsKICAgICBzd2l0Y2ggKGVuZCAtIHB0cikgewogICAgIGNh
c2UgMDoKQEAgLTEwNiwyMSArMTA2LDI5IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFNWR0FuZ2xlVmFs
dWU6OnNldFZhbHUKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKLSAgICBhdXRvIHVwY29u
dmVydGVkQ2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcodmFsdWUpLnVwY29udmVydGVkQ2hhcmFjdGVy
cygpOwotICAgIGNvbnN0IFVDaGFyKiBwdHIgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7Ci0gICAg
Y29uc3QgVUNoYXIqIGVuZCA9IHB0ciArIHZhbHVlLmxlbmd0aCgpOwotCi0gICAgZmxvYXQgdmFs
dWVJblNwZWNpZmllZFVuaXRzID0gMDsKLSAgICBpZiAoIXBhcnNlTnVtYmVyKHB0ciwgZW5kLCB2
YWx1ZUluU3BlY2lmaWVkVW5pdHMsIGZhbHNlKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IFN5bnRheEVycm9yIH07Ci0KLSAgICBhdXRvIHVuaXRUeXBlID0gcGFyc2VBbmdsZVR5cGUocHRy
LCBlbmQpOwotICAgIGlmICh1bml0VHlwZSA9PSBTVkdfQU5HTEVUWVBFX1VOS05PV04pCi0gICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9OworICAgIGF1dG8gaGVscGVyID0g
WyZdKGNvbnN0IGF1dG8qIHB0ciwgY29uc3QgYXV0byogZW5kKSAtPiBFeGNlcHRpb25Pcjx2b2lk
PiB7CisgICAgICAgIGF1dG8gdmFsdWVJblNwZWNpZmllZFVuaXRzID0gcGFyc2VOdW1iZXIocHRy
LCBlbmQsIFN1ZmZpeFNraXBwaW5nUG9saWN5OjpEb250U2tpcCk7CisgICAgICAgIGlmICghdmFs
dWVJblNwZWNpZmllZFVuaXRzKQorICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRh
eEVycm9yIH07CisKKyAgICAgICAgYXV0byB1bml0VHlwZSA9IHBhcnNlQW5nbGVUeXBlKHB0ciwg
ZW5kKTsKKyAgICAgICAgaWYgKHVuaXRUeXBlID09IFNWR0FuZ2xlVmFsdWU6OlNWR19BTkdMRVRZ
UEVfVU5LTk9XTikKKyAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9
OwogCi0gICAgbV91bml0VHlwZSA9IHVuaXRUeXBlOwotICAgIG1fdmFsdWVJblNwZWNpZmllZFVu
aXRzID0gdmFsdWVJblNwZWNpZmllZFVuaXRzOwotICAgIHJldHVybiB7IH07CisgICAgICAgIG1f
dW5pdFR5cGUgPSB1bml0VHlwZTsKKyAgICAgICAgbV92YWx1ZUluU3BlY2lmaWVkVW5pdHMgPSAq
dmFsdWVJblNwZWNpZmllZFVuaXRzOworICAgICAgICByZXR1cm4geyB9OworICAgIH07CisKKyAg
ICBpZiAodmFsdWUuaXM4Qml0KCkpIHsKKyAgICAgICAgY29uc3QgYXV0byogcHRyID0gdmFsdWUu
Y2hhcmFjdGVyczgoKTsKKyAgICAgICAgY29uc3QgYXV0byogZW5kID0gcHRyICsgdmFsdWUubGVu
Z3RoKCk7CisgICAgICAgIHJldHVybiBoZWxwZXIocHRyLCBlbmQpOworICAgIH0KKworICAgIGNv
bnN0IGF1dG8qIHB0ciA9IHZhbHVlLmNoYXJhY3RlcnMxNigpOworICAgIGNvbnN0IGF1dG8qIGVu
ZCA9IHB0ciArIHZhbHVlLmxlbmd0aCgpOworICAgIHJldHVybiBoZWxwZXIocHRyLCBlbmQpOwog
fQogCiBFeGNlcHRpb25Pcjx2b2lkPiBTVkdBbmdsZVZhbHVlOjpuZXdWYWx1ZVNwZWNpZmllZFVu
aXRzKHVuc2lnbmVkIHNob3J0IHVuaXRUeXBlLCBmbG9hdCB2YWx1ZUluU3BlY2lmaWVkVW5pdHMp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5j
cHAJKHJldmlzaW9uIDI2MzE3NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlTW90
aW9uRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MSw3ICsxNjEsNyBAQCB2b2lkIFNW
R0FuaW1hdGVNb3Rpb25FbGVtZW50OjpzdG9wQW5pbWF0CiAKIGJvb2wgU1ZHQW5pbWF0ZU1vdGlv
bkVsZW1lbnQ6OmNhbGN1bGF0ZVRvQXRFbmRPZkR1cmF0aW9uVmFsdWUoY29uc3QgU3RyaW5nJiB0
b0F0RW5kT2ZEdXJhdGlvblN0cmluZykKIHsKLSAgICBwYXJzZVBvaW50KHRvQXRFbmRPZkR1cmF0
aW9uU3RyaW5nLCBtX3RvUG9pbnRBdEVuZE9mRHVyYXRpb24pOworICAgIG1fdG9Qb2ludEF0RW5k
T2ZEdXJhdGlvbiA9IHBhcnNlUG9pbnQodG9BdEVuZE9mRHVyYXRpb25TdHJpbmcpLnZhbHVlT3Io
RmxvYXRQb2ludCB7IH0pOwogICAgIG1faGFzVG9Qb2ludEF0RW5kT2ZEdXJhdGlvbiA9IHRydWU7
CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0xNjksOCArMTY5LDggQEAgYm9vbCBTVkdBbmltYXRl
TW90aW9uRWxlbWVudDo6Y2FsY3VsYXRlVAogYm9vbCBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6
Y2FsY3VsYXRlRnJvbUFuZFRvVmFsdWVzKGNvbnN0IFN0cmluZyYgZnJvbVN0cmluZywgY29uc3Qg
U3RyaW5nJiB0b1N0cmluZykKIHsKICAgICBtX2hhc1RvUG9pbnRBdEVuZE9mRHVyYXRpb24gPSBm
YWxzZTsKLSAgICBwYXJzZVBvaW50KGZyb21TdHJpbmcsIG1fZnJvbVBvaW50KTsKLSAgICBwYXJz
ZVBvaW50KHRvU3RyaW5nLCBtX3RvUG9pbnQpOworICAgIG1fZnJvbVBvaW50ID0gcGFyc2VQb2lu
dChmcm9tU3RyaW5nKS52YWx1ZU9yKEZsb2F0UG9pbnQgeyB9KTsKKyAgICBtX3RvUG9pbnQgPSBw
YXJzZVBvaW50KHRvU3RyaW5nKS52YWx1ZU9yKEZsb2F0UG9pbnQgeyB9KTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KICAgICAKQEAgLTE3OSw5ICsxNzksOCBAQCBib29sIFNWR0FuaW1hdGVNb3Rpb25F
bGVtZW50OjpjYWxjdWxhdGVGCiAgICAgbV9oYXNUb1BvaW50QXRFbmRPZkR1cmF0aW9uID0gZmFs
c2U7CiAgICAgaWYgKGFuaW1hdGlvbk1vZGUoKSA9PSBBbmltYXRpb25Nb2RlOjpCeSAmJiAhaXNB
ZGRpdGl2ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcGFyc2VQb2ludChmcm9tU3Ry
aW5nLCBtX2Zyb21Qb2ludCk7Ci0gICAgRmxvYXRQb2ludCBieVBvaW50OwotICAgIHBhcnNlUG9p
bnQoYnlTdHJpbmcsIGJ5UG9pbnQpOworICAgIG1fZnJvbVBvaW50ID0gcGFyc2VQb2ludChmcm9t
U3RyaW5nKS52YWx1ZU9yKEZsb2F0UG9pbnQgeyB9KTsKKyAgICBhdXRvIGJ5UG9pbnQgPSBwYXJz
ZVBvaW50KGJ5U3RyaW5nKS52YWx1ZU9yKEZsb2F0UG9pbnQgeyB9KTsKICAgICBtX3RvUG9pbnQg
PSBGbG9hdFBvaW50KG1fZnJvbVBvaW50LngoKSArIGJ5UG9pbnQueCgpLCBtX2Zyb21Qb2ludC55
KCkgKyBieVBvaW50LnkoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0yNzUsMTMgKzI3NCwx
MyBAQCB2b2lkIFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OjphcHBseVJlc3VsCiAKIE9wdGlvbmFs
PGZsb2F0PiBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6Y2FsY3VsYXRlRGlzdGFuY2UoY29uc3Qg
U3RyaW5nJiBmcm9tU3RyaW5nLCBjb25zdCBTdHJpbmcmIHRvU3RyaW5nKQogewotICAgIEZsb2F0
UG9pbnQgZnJvbTsKLSAgICBGbG9hdFBvaW50IHRvOwotICAgIGlmICghcGFyc2VQb2ludChmcm9t
U3RyaW5nLCBmcm9tKSkKKyAgICBhdXRvIGZyb20gPSBwYXJzZVBvaW50KGZyb21TdHJpbmcpOwor
ICAgIGlmICghZnJvbSkKICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICBpZiAoIXBhcnNlUG9pbnQo
dG9TdHJpbmcsIHRvKSkKKyAgICBhdXRvIHRvID0gcGFyc2VQb2ludCh0b1N0cmluZyk7CisgICAg
aWYgKCF0bykKICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICBGbG9hdFNpemUgZGlmZiA9IHRvIC0g
ZnJvbTsKKyAgICBhdXRvIGRpZmYgPSAqdG8gLSAqZnJvbTsKICAgICByZXR1cm4gc3RkOjpoeXBv
dChkaWZmLndpZHRoKCksIGRpZmYuaGVpZ2h0KCkpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTc3LDExICs3NywxMCBAQCBmYWlsOgogICAgIHJlc3VsdC5jbGVhcigpOwogfQogCi1zdGF0aWMg
dm9pZCBwYXJzZUtleVNwbGluZXMoY29uc3QgU3RyaW5nJiBwYXJzZSwgVmVjdG9yPFVuaXRCZXpp
ZXI+JiByZXN1bHQpCitzdGF0aWMgT3B0aW9uYWw8VmVjdG9yPFVuaXRCZXppZXI+PiBwYXJzZUtl
eVNwbGluZXMoY29uc3QgU3RyaW5nJiBwYXJzZSkKIHsKLSAgICByZXN1bHQuY2xlYXIoKTsKICAg
ICBpZiAocGFyc2UuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiAKICAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IFN0cmluZ1Zp
ZXcocGFyc2UpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwogICAgIGNvbnN0IFVDaGFyKiBjdXIg
PSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7CkBAIC04OSwzMiArODgsMjYgQEAgc3RhdGljIHZvaWQg
cGFyc2VLZXlTcGxpbmVzKGNvbnN0IFN0cmluZwogCiAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2Vz
KGN1ciwgZW5kKTsKIAorICAgIFZlY3RvcjxVbml0QmV6aWVyPiByZXN1bHQ7CisKICAgICBib29s
IGRlbGltUGFyc2VkID0gZmFsc2U7CiAgICAgd2hpbGUgKGN1ciA8IGVuZCkgewogICAgICAgICBk
ZWxpbVBhcnNlZCA9IGZhbHNlOwotICAgICAgICBmbG9hdCBwb3NBID0gMDsKLSAgICAgICAgaWYg
KCFwYXJzZU51bWJlcihjdXIsIGVuZCwgcG9zQSkpIHsKLSAgICAgICAgICAgIHJlc3VsdC5jbGVh
cigpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZmxvYXQgcG9z
QiA9IDA7Ci0gICAgICAgIGlmICghcGFyc2VOdW1iZXIoY3VyLCBlbmQsIHBvc0IpKSB7Ci0gICAg
ICAgICAgICByZXN1bHQuY2xlYXIoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
Ci0gICAgICAgIGZsb2F0IHBvc0MgPSAwOwotICAgICAgICBpZiAoIXBhcnNlTnVtYmVyKGN1ciwg
ZW5kLCBwb3NDKSkgewotICAgICAgICAgICAgcmVzdWx0LmNsZWFyKCk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBmbG9hdCBwb3NEID0gMDsKLSAgICAgICAgaWYg
KCFwYXJzZU51bWJlcihjdXIsIGVuZCwgcG9zRCwgZmFsc2UpKSB7Ci0gICAgICAgICAgICByZXN1
bHQuY2xlYXIoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgICAgICBhdXRv
IHBvc0EgPSBwYXJzZU51bWJlcihjdXIsIGVuZCk7CisgICAgICAgIGlmICghcG9zQSkKKyAgICAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICAgICAgYXV0byBwb3NCID0gcGFyc2VO
dW1iZXIoY3VyLCBlbmQpOworICAgICAgICBpZiAoIXBvc0IpCisgICAgICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworCisgICAgICAgIGF1dG8gcG9zQyA9IHBhcnNlTnVtYmVyKGN1ciwgZW5k
KTsKKyAgICAgICAgaWYgKCFwb3NDKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
KworICAgICAgICBhdXRvIHBvc0QgPSBwYXJzZU51bWJlcihjdXIsIGVuZCwgU3VmZml4U2tpcHBp
bmdQb2xpY3k6OkRvbnRTa2lwKTsKKyAgICAgICAgaWYgKCFwb3NEKQorICAgICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKIAogICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoY3VyLCBl
bmQpOwogCkBAIC0xMjIsMTIgKzExNSwxNiBAQCBzdGF0aWMgdm9pZCBwYXJzZUtleVNwbGluZXMo
Y29uc3QgU3RyaW5nCiAgICAgICAgICAgICBkZWxpbVBhcnNlZCA9IHRydWU7CiAgICAgICAgICAg
ICBjdXIrKzsKICAgICAgICAgfQorCiAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhjdXIs
IGVuZCk7CiAKLSAgICAgICAgcmVzdWx0LmFwcGVuZChVbml0QmV6aWVyKHBvc0EsIHBvc0IsIHBv
c0MsIHBvc0QpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChVbml0QmV6aWVyIHsgKnBvc0EsICpw
b3NCLCAqcG9zQywgKnBvc0QgfSk7CiAgICAgfQorCiAgICAgaWYgKCEoY3VyID09IGVuZCAmJiAh
ZGVsaW1QYXJzZWQpKQotICAgICAgICByZXN1bHQuY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIGJvb2wgU1ZHQW5pbWF0aW9u
RWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5h
bWUpCkBAIC0xODAsNyArMTc3LDEwIEBAIHZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6cGFyc2VB
dHRyaWJ1dGUKICAgICB9CiAKICAgICBpZiAobmFtZSA9PSBTVkdOYW1lczo6a2V5U3BsaW5lc0F0
dHIpIHsKLSAgICAgICAgcGFyc2VLZXlTcGxpbmVzKHZhbHVlLCBtX2tleVNwbGluZXMpOworICAg
ICAgICBpZiAoYXV0byBrZXlTcGxpbmVzID0gcGFyc2VLZXlTcGxpbmVzKHZhbHVlKSkKKyAgICAg
ICAgICAgIG1fa2V5U3BsaW5lcyA9IFdURk1vdmUoKmtleVNwbGluZXMpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBtX2tleVNwbGluZXMuY2xlYXIoKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJp
eEVsZW1lbnQuY3BwCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NywxMCArNjcs
MTAgQEAgdm9pZCBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6cGFyc2VBdAogICAgIH0KIAog
ICAgIGlmIChuYW1lID09IFNWR05hbWVzOjpvcmRlckF0dHIpIHsKLSAgICAgICAgZmxvYXQgeCwg
eTsKLSAgICAgICAgaWYgKHBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIodmFsdWUsIHgsIHkpICYm
IHggPj0gMSAmJiB5ID49IDEpIHsKLSAgICAgICAgICAgIG1fb3JkZXJYLT5zZXRCYXNlVmFsSW50
ZXJuYWwoeCk7Ci0gICAgICAgICAgICBtX29yZGVyWS0+c2V0QmFzZVZhbEludGVybmFsKHkpOwor
ICAgICAgICBhdXRvIHJlc3VsdCA9IHBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIodmFsdWUpOwor
ICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdC0+Zmlyc3QgPj0gMSAmJiByZXN1bHQtPnNlY29u
ZCA+PSAxKSB7CisgICAgICAgICAgICBtX29yZGVyWC0+c2V0QmFzZVZhbEludGVybmFsKHJlc3Vs
dC0+Zmlyc3QpOworICAgICAgICAgICAgbV9vcmRlclktPnNldEJhc2VWYWxJbnRlcm5hbChyZXN1
bHQtPnNlY29uZCk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgZG9jdW1lbnQoKS5hY2Nl
c3NTVkdFeHRlbnNpb25zKCkucmVwb3J0V2FybmluZygiZmVDb252b2x2ZU1hdHJpeDogcHJvYmxl
bSBwYXJzaW5nIG9yZGVyPVwiIiArIHZhbHVlICsgIlwiLiBGaWx0ZXJlZCBlbGVtZW50IHdpbGwg
bm90IGJlIGRpc3BsYXllZC4iKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTE1LDEwICsxMTUsMTAg
QEAgdm9pZCBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6cGFyc2VBdAogICAgIH0KIAogICAg
IGlmIChuYW1lID09IFNWR05hbWVzOjprZXJuZWxVbml0TGVuZ3RoQXR0cikgewotICAgICAgICBm
bG9hdCB4LCB5OwotICAgICAgICBpZiAocGFyc2VOdW1iZXJPcHRpb25hbE51bWJlcih2YWx1ZSwg
eCwgeSkgJiYgeCA+IDAgJiYgeSA+IDApIHsKLSAgICAgICAgICAgIG1fa2VybmVsVW5pdExlbmd0
aFgtPnNldEJhc2VWYWxJbnRlcm5hbCh4KTsKLSAgICAgICAgICAgIG1fa2VybmVsVW5pdExlbmd0
aFktPnNldEJhc2VWYWxJbnRlcm5hbCh5KTsKKyAgICAgICAgYXV0byByZXN1bHQgPSBwYXJzZU51
bWJlck9wdGlvbmFsTnVtYmVyKHZhbHVlKTsKKyAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQt
PmZpcnN0ID4gMCAmJiByZXN1bHQtPnNlY29uZCA+IDApIHsKKyAgICAgICAgICAgIG1fa2VybmVs
VW5pdExlbmd0aFgtPnNldEJhc2VWYWxJbnRlcm5hbChyZXN1bHQtPmZpcnN0KTsKKyAgICAgICAg
ICAgIG1fa2VybmVsVW5pdExlbmd0aFktPnNldEJhc2VWYWxJbnRlcm5hbChyZXN1bHQtPnNlY29u
ZCk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRl
bnNpb25zKCkucmVwb3J0V2FybmluZygiZmVDb252b2x2ZU1hdHJpeDogcHJvYmxlbSBwYXJzaW5n
IGtlcm5lbFVuaXRMZW5ndGg9XCIiICsgdmFsdWUgKyAiXCIuIEZpbHRlcmVkIGVsZW1lbnQgd2ls
bCBub3QgYmUgZGlzcGxheWVkLiIpOwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmNwcAkocmV2aXNp
b24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxLDEwICs3MSw5IEBAIHZvaWQgU1ZHRkVEaWZm
dXNlTGlnaHRpbmdFbGVtZW50OjpwYXJzZUEKICAgICB9CiAKICAgICBpZiAobmFtZSA9PSBTVkdO
YW1lczo6a2VybmVsVW5pdExlbmd0aEF0dHIpIHsKLSAgICAgICAgZmxvYXQgeCwgeTsKLSAgICAg
ICAgaWYgKHBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIodmFsdWUsIHgsIHkpKSB7Ci0gICAgICAg
ICAgICBtX2tlcm5lbFVuaXRMZW5ndGhYLT5zZXRCYXNlVmFsSW50ZXJuYWwoeCk7Ci0gICAgICAg
ICAgICBtX2tlcm5lbFVuaXRMZW5ndGhZLT5zZXRCYXNlVmFsSW50ZXJuYWwoeSk7CisgICAgICAg
IGlmIChhdXRvIHJlc3VsdCA9IHBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIodmFsdWUpKSB7Cisg
ICAgICAgICAgICBtX2tlcm5lbFVuaXRMZW5ndGhYLT5zZXRCYXNlVmFsSW50ZXJuYWwocmVzdWx0
LT5maXJzdCk7CisgICAgICAgICAgICBtX2tlcm5lbFVuaXRMZW5ndGhZLT5zZXRCYXNlVmFsSW50
ZXJuYWwocmVzdWx0LT5zZWNvbmQpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuY3Bw
CShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDEwICs2MSw5IEBAIHZvaWQgU1ZHRkVE
cm9wU2hhZG93RWxlbWVudDo6c2V0U3RkRGV2aWEKIHZvaWQgU1ZHRkVEcm9wU2hhZG93RWxlbWVu
dDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbVN0
cmluZyYgdmFsdWUpCiB7CiAgICAgaWYgKG5hbWUgPT0gU1ZHTmFtZXM6OnN0ZERldmlhdGlvbkF0
dHIpIHsKLSAgICAgICAgZmxvYXQgeCwgeTsKLSAgICAgICAgaWYgKHBhcnNlTnVtYmVyT3B0aW9u
YWxOdW1iZXIodmFsdWUsIHgsIHkpKSB7Ci0gICAgICAgICAgICBtX3N0ZERldmlhdGlvblgtPnNl
dEJhc2VWYWxJbnRlcm5hbCh4KTsKLSAgICAgICAgICAgIG1fc3RkRGV2aWF0aW9uWS0+c2V0QmFz
ZVZhbEludGVybmFsKHkpOworICAgICAgICBpZiAoYXV0byByZXN1bHQgPSBwYXJzZU51bWJlck9w
dGlvbmFsTnVtYmVyKHZhbHVlKSkgeworICAgICAgICAgICAgbV9zdGREZXZpYXRpb25YLT5zZXRC
YXNlVmFsSW50ZXJuYWwocmVzdWx0LT5maXJzdCk7CisgICAgICAgICAgICBtX3N0ZERldmlhdGlv
blktPnNldEJhc2VWYWxJbnRlcm5hbChyZXN1bHQtPnNlY29uZCk7CiAgICAgICAgIH0KICAgICAg
ICAgcmV0dXJuOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFu
Qmx1ckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdh
dXNzaWFuQmx1ckVsZW1lbnQuY3BwCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAs
MTAgKzYwLDkgQEAgdm9pZCBTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OnNldFN0ZERldgogdm9p
ZCBTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmll
ZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21TdHJpbmcmIHZhbHVlKQogewogICAgIGlmIChuYW1lID09
IFNWR05hbWVzOjpzdGREZXZpYXRpb25BdHRyKSB7Ci0gICAgICAgIGZsb2F0IHgsIHk7Ci0gICAg
ICAgIGlmIChwYXJzZU51bWJlck9wdGlvbmFsTnVtYmVyKHZhbHVlLCB4LCB5KSkgewotICAgICAg
ICAgICAgbV9zdGREZXZpYXRpb25YLT5zZXRCYXNlVmFsSW50ZXJuYWwoeCk7Ci0gICAgICAgICAg
ICBtX3N0ZERldmlhdGlvblktPnNldEJhc2VWYWxJbnRlcm5hbCh5KTsKKyAgICAgICAgaWYgKGF1
dG8gcmVzdWx0ID0gcGFyc2VOdW1iZXJPcHRpb25hbE51bWJlcih2YWx1ZSkpIHsKKyAgICAgICAg
ICAgIG1fc3RkRGV2aWF0aW9uWC0+c2V0QmFzZVZhbEludGVybmFsKHJlc3VsdC0+Zmlyc3QpOwor
ICAgICAgICAgICAgbV9zdGREZXZpYXRpb25ZLT5zZXRCYXNlVmFsSW50ZXJuYWwocmVzdWx0LT5z
ZWNvbmQpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHAJKHJldmlzaW9uIDI2MzE3NikKKysrIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTExNyw5ICsxMTcsNyBAQCB2b2lkIFNWR0ZFSW1hZ2VFbGVtZW50OjpidWlsZFBlbmRpbmdSZXNv
CiB2b2lkIFNWR0ZFSW1hZ2VFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWRO
YW1lJiBuYW1lLCBjb25zdCBBdG9tU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBpZiAobmFtZSA9PSBT
VkdOYW1lczo6cHJlc2VydmVBc3BlY3RSYXRpb0F0dHIpIHsKLSAgICAgICAgU1ZHUHJlc2VydmVB
c3BlY3RSYXRpb1ZhbHVlIHByZXNlcnZlQXNwZWN0UmF0aW87Ci0gICAgICAgIHByZXNlcnZlQXNw
ZWN0UmF0aW8ucGFyc2UodmFsdWUpOwotICAgICAgICBtX3ByZXNlcnZlQXNwZWN0UmF0aW8tPnNl
dEJhc2VWYWxJbnRlcm5hbChwcmVzZXJ2ZUFzcGVjdFJhdGlvKTsKKyAgICAgICAgbV9wcmVzZXJ2
ZUFzcGVjdFJhdGlvLT5zZXRCYXNlVmFsSW50ZXJuYWwoU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1Zh
bHVlIHsgdmFsdWUgfSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5jcHAJKHJldmlzaW9uIDI2MzE3
NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzEsMTAgKzcxLDkgQEAgdm9pZCBTVkdGRU1vcnBob2xvZ3lFbGVtZW50
OjpwYXJzZUF0dHJpYgogICAgIH0KIAogICAgIGlmIChuYW1lID09IFNWR05hbWVzOjpyYWRpdXNB
dHRyKSB7Ci0gICAgICAgIGZsb2F0IHgsIHk7Ci0gICAgICAgIGlmIChwYXJzZU51bWJlck9wdGlv
bmFsTnVtYmVyKHZhbHVlLCB4LCB5KSkgewotICAgICAgICAgICAgbV9yYWRpdXNYLT5zZXRCYXNl
VmFsSW50ZXJuYWwoeCk7Ci0gICAgICAgICAgICBtX3JhZGl1c1ktPnNldEJhc2VWYWxJbnRlcm5h
bCh5KTsKKyAgICAgICAgaWYgKGF1dG8gcmVzdWx0ID0gcGFyc2VOdW1iZXJPcHRpb25hbE51bWJl
cih2YWx1ZSkpIHsKKyAgICAgICAgICAgIG1fcmFkaXVzWC0+c2V0QmFzZVZhbEludGVybmFsKHJl
c3VsdC0+Zmlyc3QpOworICAgICAgICAgICAgbV9yYWRpdXNZLT5zZXRCYXNlVmFsSW50ZXJuYWwo
cmVzdWx0LT5zZWNvbmQpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1l
bnQuY3BwCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVj
dWxhckxpZ2h0aW5nRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDEwICs3OCw5IEBA
IHZvaWQgU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6cGFyc2UKICAgICB9CiAKICAgICBp
ZiAobmFtZSA9PSBTVkdOYW1lczo6a2VybmVsVW5pdExlbmd0aEF0dHIpIHsKLSAgICAgICAgZmxv
YXQgeCwgeTsKLSAgICAgICAgaWYgKHBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIodmFsdWUsIHgs
IHkpKSB7Ci0gICAgICAgICAgICBtX2tlcm5lbFVuaXRMZW5ndGhYLT5zZXRCYXNlVmFsSW50ZXJu
YWwoeCk7Ci0gICAgICAgICAgICBtX2tlcm5lbFVuaXRMZW5ndGhZLT5zZXRCYXNlVmFsSW50ZXJu
YWwoeSk7CisgICAgICAgIGlmIChhdXRvIHJlc3VsdCA9IHBhcnNlTnVtYmVyT3B0aW9uYWxOdW1i
ZXIodmFsdWUpKSB7CisgICAgICAgICAgICBtX2tlcm5lbFVuaXRMZW5ndGhYLT5zZXRCYXNlVmFs
SW50ZXJuYWwocmVzdWx0LT5maXJzdCk7CisgICAgICAgICAgICBtX2tlcm5lbFVuaXRMZW5ndGhZ
LT5zZXRCYXNlVmFsSW50ZXJuYWwocmVzdWx0LT5zZWNvbmQpOwogICAgICAgICB9CiAgICAgICAg
IHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNl
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVHVyYnVs
ZW5jZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVUdXJidWxlbmNlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDEwICs2Nyw5
IEBAIHZvaWQgU1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6cGFyc2VBdHRyaWIKICAgICB9CiAKICAg
ICBpZiAobmFtZSA9PSBTVkdOYW1lczo6YmFzZUZyZXF1ZW5jeUF0dHIpIHsKLSAgICAgICAgZmxv
YXQgeCwgeTsKLSAgICAgICAgaWYgKHBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIodmFsdWUsIHgs
IHkpKSB7Ci0gICAgICAgICAgICBtX2Jhc2VGcmVxdWVuY3lYLT5zZXRCYXNlVmFsSW50ZXJuYWwo
eCk7Ci0gICAgICAgICAgICBtX2Jhc2VGcmVxdWVuY3lZLT5zZXRCYXNlVmFsSW50ZXJuYWwoeSk7
CisgICAgICAgIGlmIChhdXRvIHJlc3VsdCA9IHBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIodmFs
dWUpKSB7CisgICAgICAgICAgICBtX2Jhc2VGcmVxdWVuY3lYLT5zZXRCYXNlVmFsSW50ZXJuYWwo
cmVzdWx0LT5maXJzdCk7CisgICAgICAgICAgICBtX2Jhc2VGcmVxdWVuY3lZLT5zZXRCYXNlVmFs
SW50ZXJuYWwocmVzdWx0LT5zZWNvbmQpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAg
ICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRml0VG9WaWV3Qm94LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRml0VG9WaWV3Qm94LmNwcAkocmV2aXNpb24g
MjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpdFRvVmlld0JveC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY2LDczICs2Niw3MSBAQCB2b2lkIFNWR0ZpdFRvVmlld0JveDo6cmVzZXQo
KQogYm9vbCBTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5h
bWUmIG5hbWUsIGNvbnN0IEF0b21TdHJpbmcmIHZhbHVlKQogewogICAgIGlmIChuYW1lID09IFNW
R05hbWVzOjp2aWV3Qm94QXR0cikgewotICAgICAgICBGbG9hdFJlY3Qgdmlld0JveDsKLSAgICAg
ICAgaWYgKCF2YWx1ZS5pc051bGwoKSAmJiBwYXJzZVZpZXdCb3godmFsdWUsIHZpZXdCb3gpKQot
ICAgICAgICAgICAgc2V0Vmlld0JveCh2aWV3Qm94KTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgcmVzZXRWaWV3Qm94KCk7CisgICAgICAgIGlmICghdmFsdWUuaXNOdWxsKCkpIHsKKyAgICAg
ICAgICAgIGlmIChhdXRvIHJlc3VsdCA9IHBhcnNlVmlld0JveCh2YWx1ZSkpIHsKKyAgICAgICAg
ICAgICAgICBzZXRWaWV3Qm94KFdURk1vdmUoKnJlc3VsdCkpOworICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJlc2V0Vmlld0Jv
eCgpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICBpZiAobmFtZSA9PSBTVkdO
YW1lczo6cHJlc2VydmVBc3BlY3RSYXRpb0F0dHIpIHsKLSAgICAgICAgU1ZHUHJlc2VydmVBc3Bl
Y3RSYXRpb1ZhbHVlIHByZXNlcnZlQXNwZWN0UmF0aW87Ci0gICAgICAgIHByZXNlcnZlQXNwZWN0
UmF0aW8ucGFyc2UodmFsdWUpOwotICAgICAgICBzZXRQcmVzZXJ2ZUFzcGVjdFJhdGlvKHByZXNl
cnZlQXNwZWN0UmF0aW8pOworICAgICAgICBzZXRQcmVzZXJ2ZUFzcGVjdFJhdGlvKFNWR1ByZXNl
cnZlQXNwZWN0UmF0aW9WYWx1ZSB7IHZhbHVlIH0pOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgU1ZHRml0VG9WaWV3Qm94OjpwYXJz
ZVZpZXdCb3goY29uc3QgQXRvbVN0cmluZyYgdmFsdWUsIEZsb2F0UmVjdCYgdmlld0JveCkKK09w
dGlvbmFsPEZsb2F0UmVjdD4gU1ZHRml0VG9WaWV3Qm94OjpwYXJzZVZpZXdCb3goY29uc3QgQXRv
bVN0cmluZyYgdmFsdWUpCiB7CiAgICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBTdHJp
bmdWaWV3KHZhbHVlKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKICAgICBjb25zdCBVQ2hhciog
Y2hhcmFjdGVycyA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKLSAgICByZXR1cm4gcGFyc2VWaWV3
Qm94KGNoYXJhY3RlcnMsIGNoYXJhY3RlcnMgKyB2YWx1ZS5sZW5ndGgoKSwgdmlld0JveCk7Cisg
ICAgcmV0dXJuIHBhcnNlVmlld0JveChjaGFyYWN0ZXJzLCBjaGFyYWN0ZXJzICsgdmFsdWUubGVu
Z3RoKCkpOwogfQogCi1ib29sIFNWR0ZpdFRvVmlld0JveDo6cGFyc2VWaWV3Qm94KGNvbnN0IFVD
aGFyKiYgYywgY29uc3QgVUNoYXIqIGVuZCwgRmxvYXRSZWN0JiB2aWV3Qm94LCBib29sIHZhbGlk
YXRlKQorT3B0aW9uYWw8RmxvYXRSZWN0PiBTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlVmlld0JveChj
b25zdCBVQ2hhciomIGMsIGNvbnN0IFVDaGFyKiBlbmQsIGJvb2wgdmFsaWRhdGUpCiB7Ci0gICAg
U3RyaW5nIHN0cihjLCBlbmQgLSBjKTsKKyAgICBTdHJpbmdWaWV3IHN0cihjLCBlbmQgLSBjKTsK
IAogICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhjLCBlbmQpOwogCi0gICAgZmxvYXQgeCA9IDAu
MGY7Ci0gICAgZmxvYXQgeSA9IDAuMGY7Ci0gICAgZmxvYXQgd2lkdGggPSAwLjBmOwotICAgIGZs
b2F0IGhlaWdodCA9IDAuMGY7Ci0gICAgYm9vbCB2YWxpZCA9IHBhcnNlTnVtYmVyKGMsIGVuZCwg
eCkgJiYgcGFyc2VOdW1iZXIoYywgZW5kLCB5KSAmJiBwYXJzZU51bWJlcihjLCBlbmQsIHdpZHRo
KSAmJiBwYXJzZU51bWJlcihjLCBlbmQsIGhlaWdodCwgZmFsc2UpOworICAgIGF1dG8geCA9IHBh
cnNlTnVtYmVyKGMsIGVuZCk7CisgICAgYXV0byB5ID0gcGFyc2VOdW1iZXIoYywgZW5kKTsKKyAg
ICBhdXRvIHdpZHRoID0gcGFyc2VOdW1iZXIoYywgZW5kKTsKKyAgICBhdXRvIGhlaWdodCA9IHBh
cnNlTnVtYmVyKGMsIGVuZCwgU3VmZml4U2tpcHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsKIAogICAg
IGlmICh2YWxpZGF0ZSkgewogICAgICAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBtX3ZpZXdCb3gt
PmNvbnRleHRFbGVtZW50KCktPmRvY3VtZW50KCk7CiAKLSAgICAgICAgaWYgKCF2YWxpZCkgewot
ICAgICAgICAgICAgZG9jdW1lbnQuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnJlcG9ydFdhcm5pbmco
IlByb2JsZW0gcGFyc2luZyB2aWV3Qm94PVwiIiArIHN0ciArICJcIiIpOwotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIXggfHwgIXkgfHwgIXdpZHRoIHx8ICFoZWlnaHQp
IHsKKyAgICAgICAgICAgIGRvY3VtZW50LmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5yZXBvcnRXYXJu
aW5nKG1ha2VTdHJpbmcoIlByb2JsZW0gcGFyc2luZyB2aWV3Qm94PVwiIiwgc3RyLCAiXCIiKSk7
CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICB9CiAKICAgICAgICAg
Ly8gQ2hlY2sgdGhhdCB3aWR0aCBpcyBwb3NpdGl2ZS4KLSAgICAgICAgaWYgKHdpZHRoIDwgMC4w
KSB7CisgICAgICAgIGlmICgqd2lkdGggPCAwLjApIHsKICAgICAgICAgICAgIGRvY3VtZW50LmFj
Y2Vzc1NWR0V4dGVuc2lvbnMoKS5yZXBvcnRFcnJvcigiQSBuZWdhdGl2ZSB2YWx1ZSBmb3IgVmll
d0JveCB3aWR0aCBpcyBub3QgYWxsb3dlZCIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgfQogCiAgICAgICAgIC8v
IENoZWNrIHRoYXQgaGVpZ2h0IGlzIHBvc2l0aXZlLgotICAgICAgICBpZiAoaGVpZ2h0IDwgMC4w
KSB7CisgICAgICAgIGlmICgqaGVpZ2h0IDwgMC4wKSB7CiAgICAgICAgICAgICBkb2N1bWVudC5h
Y2Nlc3NTVkdFeHRlbnNpb25zKCkucmVwb3J0RXJyb3IoIkEgbmVnYXRpdmUgdmFsdWUgZm9yIFZp
ZXdCb3ggaGVpZ2h0IGlzIG5vdCBhbGxvd2VkIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICB9CiAKICAgICAgICAg
Ly8gTm90aGluZyBzaG91bGQgY29tZSBhZnRlciB0aGUgbGFzdCwgZm91cnRoIG51bWJlci4KICAg
ICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGMsIGVuZCk7CiAgICAgICAgIGlmIChjIDwgZW5k
KSB7Ci0gICAgICAgICAgICBkb2N1bWVudC5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVwb3J0V2Fy
bmluZygiUHJvYmxlbSBwYXJzaW5nIHZpZXdCb3g9XCIiICsgc3RyICsgIlwiIik7Ci0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBkb2N1bWVudC5hY2Nlc3NTVkdFeHRlbnNp
b25zKCkucmVwb3J0V2FybmluZyhtYWtlU3RyaW5nKCJQcm9ibGVtIHBhcnNpbmcgdmlld0JveD1c
IiIsIHN0ciwgIlwiIikpOworICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAg
ICAgfQogICAgIH0KIAotICAgIHZpZXdCb3ggPSB7IHgsIHksIHdpZHRoLCBoZWlnaHQgfTsKLSAg
ICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gRmxvYXRSZWN0IHsgeC52YWx1ZU9yKDApLCB5LnZh
bHVlT3IoMCksIHdpZHRoLnZhbHVlT3IoMCksIGhlaWdodC52YWx1ZU9yKDApIH07CiB9CiAKIEFm
ZmluZVRyYW5zZm9ybSBTVkdGaXRUb1ZpZXdCb3g6OnZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0oY29u
c3QgRmxvYXRSZWN0JiB2aWV3Qm94UmVjdCwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1Zh
bHVlJiBwcmVzZXJ2ZUFzcGVjdFJhdGlvLCBmbG9hdCB2aWV3V2lkdGgsIGZsb2F0IHZpZXdIZWln
aHQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRml0VG9WaWV3Qm94LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpdFRvVmlld0JveC5oCShyZXZpc2lvbiAyNjMx
NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRml0VG9WaWV3Qm94LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTY1LDggKzY1LDggQEAgcHJvdGVjdGVkOgogCiAgICAgdm9pZCByZXNldCgpOwogICAg
IGJvb2wgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21TdHJp
bmcmKTsKLSAgICBib29sIHBhcnNlVmlld0JveChjb25zdCBBdG9tU3RyaW5nJiB2YWx1ZSwgRmxv
YXRSZWN0JiB2aWV3Qm94KTsKLSAgICBib29sIHBhcnNlVmlld0JveChjb25zdCBVQ2hhciomIHN0
YXJ0LCBjb25zdCBVQ2hhciogZW5kLCBGbG9hdFJlY3QmIHZpZXdCb3gsIGJvb2wgdmFsaWRhdGUg
PSB0cnVlKTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IHBhcnNlVmlld0JveChjb25zdCBBdG9t
U3RyaW5nJiB2YWx1ZSk7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBwYXJzZVZpZXdCb3goY29u
c3QgVUNoYXIqJiBzdGFydCwgY29uc3QgVUNoYXIqIGVuZCwgYm9vbCB2YWxpZGF0ZSA9IHRydWUp
OwogCiBwcml2YXRlOgogICAgIFJlZjxTVkdBbmltYXRlZFJlY3Q+IG1fdmlld0JveDsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHbHlwaFJlZkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHbHlwaFJlZkVsZW1lbnQuY3BwCShyZXZpc2lvbiAyNjMx
NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHR2x5cGhSZWZFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTgsMTAgKzU4LDcgQEAgYm9vbCBTVkdHbHlwaFJlZkVsZW1lbnQ6Omhhc1Zh
bGlkR2x5cGhFbAogCiBzdGF0aWMgZmxvYXQgcGFyc2VGbG9hdChjb25zdCBBdG9tU3RyaW5nJiB2
YWx1ZSkKIHsKLSAgICBmbG9hdCByZXN1bHQ7Ci0gICAgaWYgKCFwYXJzZU51bWJlckZyb21TdHJp
bmcodmFsdWUsIHJlc3VsdCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiByZXN1bHQ7
CisgICAgcmV0dXJuIHBhcnNlTnVtYmVyKHZhbHVlKS52YWx1ZU9yKDApOwogfQogCiB2b2lkIFNW
R0dseXBoUmVmRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFt
ZSwgY29uc3QgQXRvbVN0cmluZyYgdmFsdWUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
SEtlcm5FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHSEtl
cm5FbGVtZW50LmNwcAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0hLZXJuRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDI0ICs0NCw0NCBAQCBSZWY8
U1ZHSEtlcm5FbGVtZW50PiBTVkdIS2VybkVsZW1lbnQ6OmNyCiAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgU1ZHSEtlcm5FbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKLWJvb2wgU1ZH
SEtlcm5FbGVtZW50OjpidWlsZEhvcml6b250YWxLZXJuaW5nUGFpcihTVkdLZXJuaW5nUGFpciYg
a2VybmluZ1BhaXIpIGNvbnN0CitPcHRpb25hbDxTVkdLZXJuaW5nUGFpcj4gU1ZHSEtlcm5FbGVt
ZW50OjpidWlsZEhvcml6b250YWxLZXJuaW5nUGFpcigpIGNvbnN0CiB7CisgICAgLy8gRklYTUU6
IENhbiB0aGlzIGJlIHNoYXJlZCB3aXRoIFNWR1ZLZXJuRWxlbWVudDo6YnVpbGRWZXJ0aWNhbEtl
cm5pbmdQYWlyCisKICAgICBhdXRvJiB1MSA9IGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRp
b24oU1ZHTmFtZXM6OnUxQXR0cik7CiAgICAgYXV0byYgZzEgPSBhdHRyaWJ1dGVXaXRob3V0U3lu
Y2hyb25pemF0aW9uKFNWR05hbWVzOjpnMUF0dHIpOwogICAgIGF1dG8mIHUyID0gYXR0cmlidXRl
V2l0aG91dFN5bmNocm9uaXphdGlvbihTVkdOYW1lczo6dTJBdHRyKTsKICAgICBhdXRvJiBnMiA9
IGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oU1ZHTmFtZXM6OmcyQXR0cik7CiAgICAg
aWYgKCh1MS5pc0VtcHR5KCkgJiYgZzEuaXNFbXB0eSgpKSB8fCAodTIuaXNFbXB0eSgpICYmIGcy
LmlzRW1wdHkoKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKKworICAgIGF1dG8gZ2x5cGhOYW1lMSA9IHBhcnNlR2x5cGhOYW1lKGcxKTsKKyAg
ICBpZiAoIWdseXBoTmFtZTEpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgYXV0
byBnbHlwaE5hbWUyID0gcGFyc2VHbHlwaE5hbWUoZzIpOworICAgIGlmICghZ2x5cGhOYW1lMikK
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBhdXRvIHVuaWNvZGVTdHJpbmcxID0g
cGFyc2VLZXJuaW5nVW5pY29kZVN0cmluZyh1MSk7CisgICAgaWYgKCF1bmljb2RlU3RyaW5nMSkK
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBhdXRvIHVuaWNvZGVTdHJpbmcyID0g
cGFyc2VLZXJuaW5nVW5pY29kZVN0cmluZyh1Mik7CisgICAgaWYgKCF1bmljb2RlU3RyaW5nMikK
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIGJvb2wgb2sgPSBmYWxzZTsKKyAg
ICBhdXRvIGtlcm5pbmcgPSBhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFNWR05hbWVz
OjprQXR0cikuc3RyaW5nKCkudG9GbG9hdCgmb2spOworICAgIGlmICghb2spCisgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBpZiAocGFyc2VHbHlwaE5hbWUoZzEsIGtlcm5pbmdQ
YWlyLmdseXBoTmFtZTEpCi0gICAgICAgICYmIHBhcnNlR2x5cGhOYW1lKGcyLCBrZXJuaW5nUGFp
ci5nbHlwaE5hbWUyKQotICAgICAgICAmJiBwYXJzZUtlcm5pbmdVbmljb2RlU3RyaW5nKHUxLCBr
ZXJuaW5nUGFpci51bmljb2RlUmFuZ2UxLCBrZXJuaW5nUGFpci51bmljb2RlTmFtZTEpCi0gICAg
ICAgICYmIHBhcnNlS2VybmluZ1VuaWNvZGVTdHJpbmcodTIsIGtlcm5pbmdQYWlyLnVuaWNvZGVS
YW5nZTIsIGtlcm5pbmdQYWlyLnVuaWNvZGVOYW1lMikpIHsKLSAgICAgICAgYm9vbCBvayA9IGZh
bHNlOwotICAgICAgICBrZXJuaW5nUGFpci5rZXJuaW5nID0gYXR0cmlidXRlV2l0aG91dFN5bmNo
cm9uaXphdGlvbihTVkdOYW1lczo6a0F0dHIpLnN0cmluZygpLnRvRmxvYXQoJm9rKTsKLSAgICAg
ICAgcmV0dXJuIG9rOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7CisgICAgU1ZHS2VybmluZ1Bh
aXIga2VybmluZ1BhaXI7CisgICAga2VybmluZ1BhaXIuZ2x5cGhOYW1lMSA9IFdURk1vdmUoKmds
eXBoTmFtZTEpOworICAgIGtlcm5pbmdQYWlyLmdseXBoTmFtZTIgPSBXVEZNb3ZlKCpnbHlwaE5h
bWUyKTsKKyAgICBrZXJuaW5nUGFpci51bmljb2RlUmFuZ2UxID0gV1RGTW92ZSh1bmljb2RlU3Ry
aW5nMS0+Zmlyc3QpOworICAgIGtlcm5pbmdQYWlyLnVuaWNvZGVOYW1lMSA9IFdURk1vdmUodW5p
Y29kZVN0cmluZzEtPnNlY29uZCk7CisgICAga2VybmluZ1BhaXIudW5pY29kZVJhbmdlMiA9IFdU
Rk1vdmUodW5pY29kZVN0cmluZzItPmZpcnN0KTsKKyAgICBrZXJuaW5nUGFpci51bmljb2RlTmFt
ZTIgPSBXVEZNb3ZlKHVuaWNvZGVTdHJpbmcyLT5zZWNvbmQpOworICAgIGtlcm5pbmdQYWlyLmtl
cm5pbmcgPSBrZXJuaW5nOworICAgIHJldHVybiBrZXJuaW5nUGFpcjsKIH0KIAogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0hLZXJuRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdIS2VybkVsZW1lbnQuaAkocmV2aXNpb24gMjYzMTc2KQorKysgU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0hLZXJuRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3
ICszMiw3IEBAIGNsYXNzIFNWR0hLZXJuRWxlbWVudCBmaW5hbCA6IHB1YmxpYyBTVkcKIHB1Ymxp
YzoKICAgICBzdGF0aWMgUmVmPFNWR0hLZXJuRWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmll
ZE5hbWUmLCBEb2N1bWVudCYpOwogCi0gICAgYm9vbCBidWlsZEhvcml6b250YWxLZXJuaW5nUGFp
cihTVkdLZXJuaW5nUGFpciYga2VybmluZ1BhaXIpIGNvbnN0OworICAgIE9wdGlvbmFsPFNWR0tl
cm5pbmdQYWlyPiBidWlsZEhvcml6b250YWxLZXJuaW5nUGFpcigpIGNvbnN0OwogCiBwcml2YXRl
OgogICAgIFNWR0hLZXJuRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQmKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdJbWFnZUVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdJbWFnZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAyNjMx
NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHSW1hZ2VFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjksOSArNjksNyBAQCBib29sIFNWR0ltYWdlRWxlbWVudDo6aGFzU2luZ2xlU2Vj
dXJpdHlPCiB2b2lkIFNWR0ltYWdlRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlm
aWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbVN0cmluZyYgdmFsdWUpCiB7CiAgICAgaWYgKG5hbWUg
PT0gU1ZHTmFtZXM6OnByZXNlcnZlQXNwZWN0UmF0aW9BdHRyKSB7Ci0gICAgICAgIFNWR1ByZXNl
cnZlQXNwZWN0UmF0aW9WYWx1ZSBwcmVzZXJ2ZUFzcGVjdFJhdGlvOwotICAgICAgICBwcmVzZXJ2
ZUFzcGVjdFJhdGlvLnBhcnNlKHZhbHVlKTsKLSAgICAgICAgbV9wcmVzZXJ2ZUFzcGVjdFJhdGlv
LT5zZXRCYXNlVmFsSW50ZXJuYWwocHJlc2VydmVBc3BlY3RSYXRpbyk7CisgICAgICAgIG1fcHJl
c2VydmVBc3BlY3RSYXRpby0+c2V0QmFzZVZhbEludGVybmFsKFNWR1ByZXNlcnZlQXNwZWN0UmF0
aW9WYWx1ZSB7IHZhbHVlIH0pOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdMZW5ndGhWYWx1ZS5jcHAJKHJldmlzaW9uIDI2MzE3NikKKysrIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdMZW5ndGhWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5MSwx
MiArMjkxLDEyIEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFNWR0xlbmd0aFZhbHVlOjpzZXRWYWwKICAg
ICBpZiAoc3RyaW5nLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGZsb2F0
IGNvbnZlcnRlZE51bWJlciA9IDA7CiAgICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBT
dHJpbmdWaWV3KHN0cmluZykudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7CiAgICAgY29uc3QgVUNo
YXIqIHB0ciA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKICAgICBjb25zdCBVQ2hhciogZW5kID0g
cHRyICsgc3RyaW5nLmxlbmd0aCgpOwogCi0gICAgaWYgKCFwYXJzZU51bWJlcihwdHIsIGVuZCwg
Y29udmVydGVkTnVtYmVyLCBmYWxzZSkpCisgICAgYXV0byBjb252ZXJ0ZWROdW1iZXIgPSBwYXJz
ZU51bWJlcihwdHIsIGVuZCwgU3VmZml4U2tpcHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsKKyAgICBp
ZiAoIWNvbnZlcnRlZE51bWJlcikKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVy
cm9yIH07CiAKICAgICBhdXRvIGxlbmd0aFR5cGUgPSBwYXJzZUxlbmd0aFR5cGUocHRyLCBlbmQp
OwpAQCAtMzA0LDcgKzMwNCw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFNWR0xlbmd0aFZhbHVlOjpz
ZXRWYWwKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiAKICAgICBt
X2xlbmd0aFR5cGUgPSBsZW5ndGhUeXBlOwotICAgIG1fdmFsdWVJblNwZWNpZmllZFVuaXRzID0g
Y29udmVydGVkTnVtYmVyOworICAgIG1fdmFsdWVJblNwZWNpZmllZFVuaXRzID0gKmNvbnZlcnRl
ZE51bWJlcjsKICAgICByZXR1cm4geyB9OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHTnVtYmVyTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdOdW1i
ZXJMaXN0LmgJKHJldmlzaW9uIDI2MzE3NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdOdW1i
ZXJMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDYgQEAgcHVibGljOgogICAgIHsK
ICAgICAgICAgY2xlYXJJdGVtcygpOwogCi0gICAgICAgIGZsb2F0IG51bWJlciA9IDA7CiAgICAg
ICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyh2YWx1ZSkudXBjb252
ZXJ0ZWRDaGFyYWN0ZXJzKCk7CiAgICAgICAgIGNvbnN0IFVDaGFyKiBwdHIgPSB1cGNvbnZlcnRl
ZENoYXJhY3RlcnM7CiAgICAgICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBwdHIgKyB2YWx1ZS5sZW5n
dGgoKTsKQEAgLTYyLDkgKzYxLDEwIEBAIHB1YmxpYzoKICAgICAgICAgLy8gVGhlIHNwZWMgKHNl
Y3Rpb24gNC4xKSBzdHJhbmdlbHkgZG9lc24ndCBhbGxvdyBsZWFkaW5nIHdoaXRlc3BhY2UuCiAg
ICAgICAgIC8vIFdlIG1pZ2h0IGNob29zZSB0byB2aW9sYXRlIHRoYXQgaW50ZW50aW9uYWxseS4K
ICAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCkgewotICAgICAgICAgICAgaWYgKCFwYXJzZU51bWJl
cihwdHIsIGVuZCwgbnVtYmVyKSkKKyAgICAgICAgICAgIGF1dG8gbnVtYmVyID0gcGFyc2VOdW1i
ZXIocHRyLCBlbmQpOworICAgICAgICAgICAgaWYgKCFudW1iZXIpCiAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBhcHBlbmQoU1ZHTnVtYmVyOjpjcmVhdGUobnVtYmVyKSk7Cisg
ICAgICAgICAgICBhcHBlbmQoU1ZHTnVtYmVyOjpjcmVhdGUoKm51bWJlcikpOwogICAgICAgICB9
CiAKICAgICAgICAgcmV0dXJuIHB0ciA9PSBlbmQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHUGFyc2VyVXRpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHUGFyc2VyVXRpbGl0aWVzLmNwcAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDE5ICs0
MCwxOCBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgRmxvYXRUeXBlPiBzdGF0aWMgaW5sCiAvLyBXZSB1
c2UgdGhpcyBnZW5lcmljIHBhcnNlTnVtYmVyIGZ1bmN0aW9uIHRvIGFsbG93IHRoZSBQYXRoIHBh
cnNpbmcgY29kZSB0byB3b3JrIAogLy8gYXQgYSBoaWdoZXIgcHJlY2lzaW9uIGludGVybmFsbHks
IHdpdGhvdXQgYW55IHVubmVjZXNzYXJ5IHJ1bnRpbWUgY29zdCBvciBjb2RlCiAvLyBjb21wbGV4
aXR5LgotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHR5cGVuYW1lIEZsb2F0VHlw
ZT4gc3RhdGljIGJvb2wgZ2VuZXJpY1BhcnNlTnVtYmVyKGNvbnN0IENoYXJhY3RlclR5cGUqJiBw
dHIsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCwgRmxvYXRUeXBlJiBudW1iZXIsIGJvb2wgc2tp
cCkKKy8vIEZJWE1FOiBDYW4gdGhpcyBiZSBzaGFyZWQvcmVwbGFjZWQgd2l0aCBudW1iZXIgcGFy
c2luZyBpbiBXVEY/Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5hbWUg
RmxvYXRUeXBlID0gZmxvYXQ+IHN0YXRpYyBPcHRpb25hbDxGbG9hdFR5cGU+IGdlbmVyaWNQYXJz
ZU51bWJlcihjb25zdCBDaGFyYWN0ZXJUeXBlKiYgcHRyLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBl
bmQsIFN1ZmZpeFNraXBwaW5nUG9saWN5IHNraXAgPSBTdWZmaXhTa2lwcGluZ1BvbGljeTo6U2tp
cCkKIHsKLSAgICBGbG9hdFR5cGUgaW50ZWdlciwgZGVjaW1hbCwgZnJhYywgZXhwb25lbnQ7Ci0g
ICAgaW50IHNpZ24sIGV4cHNpZ247CisgICAgRmxvYXRUeXBlIG51bWJlciA9IDA7CisgICAgRmxv
YXRUeXBlIGludGVnZXIgPSAwOworICAgIEZsb2F0VHlwZSBkZWNpbWFsID0gMDsKKyAgICBGbG9h
dFR5cGUgZnJhYyA9IDE7CisgICAgRmxvYXRUeXBlIGV4cG9uZW50ID0gMDsKKyAgICBpbnQgc2ln
biA9IDE7CisgICAgaW50IGV4cHNpZ24gPSAxOwogICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIHN0
YXJ0ID0gcHRyOwogCi0gICAgZXhwb25lbnQgPSAwOwotICAgIGludGVnZXIgPSAwOwotICAgIGZy
YWMgPSAxOwotICAgIGRlY2ltYWwgPSAwOwotICAgIHNpZ24gPSAxOwotICAgIGV4cHNpZ24gPSAx
OwotCiAgICAgLy8gcmVhZCB0aGUgc2lnbgogICAgIGlmIChwdHIgPCBlbmQgJiYgKnB0ciA9PSAn
KycpCiAgICAgICAgIHB0cisrOwpAQCAtNjIsNyArNjEsNyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUg
Q2hhcmFjdGVyVHlwZSwgdHlwZW5hCiAgICAgfSAKICAgICAKICAgICBpZiAocHRyID09IGVuZCB8
fCAoIWlzQVNDSUlEaWdpdCgqcHRyKSAmJiAqcHRyICE9ICcuJykpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIC8vIHJlYWQgdGhlIGlu
dGVnZXIgcGFydCwgYnVpbGQgcmlnaHQtdG8tbGVmdAogICAgIGNvbnN0IENoYXJhY3RlclR5cGUq
IHB0clN0YXJ0SW50UGFydCA9IHB0cjsKQEAgLTc4LDcgKzc3LDcgQEAgdGVtcGxhdGUgPHR5cGVu
YW1lIENoYXJhY3RlclR5cGUsIHR5cGVuYQogICAgICAgICB9CiAgICAgICAgIC8vIEJhaWwgb3V0
IGVhcmx5IGlmIHRoaXMgb3ZlcmZsb3dzLgogICAgICAgICBpZiAoIWlzVmFsaWRSYW5nZShpbnRl
Z2VyKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAgICAgfQogCiAgICAgaWYgKHB0ciA8IGVuZCAmJiAqcHRyID09ICcuJykgeyAv
LyByZWFkIHRoZSBkZWNpbWFscwpAQCAtODYsNyArODUsNyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUg
Q2hhcmFjdGVyVHlwZSwgdHlwZW5hCiAgICAgICAgIAogICAgICAgICAvLyBUaGVyZSBtdXN0IGJl
IGEgbGVhc3Qgb25lIGRpZ2l0IGZvbGxvd2luZyB0aGUgLgogICAgICAgICBpZiAocHRyID49IGVu
ZCB8fCAhaXNBU0NJSURpZ2l0KCpwdHIpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgCiAgICAgICAgIHdoaWxlIChw
dHIgPCBlbmQgJiYgaXNBU0NJSURpZ2l0KCpwdHIpKQogICAgICAgICAgICAgZGVjaW1hbCArPSAo
KihwdHIrKykgLSAnMCcpICogKGZyYWMgKj0gc3RhdGljX2Nhc3Q8RmxvYXRUeXBlPigwLjEpKTsK
QEAgLTEwNyw3ICsxMDYsNyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlw
ZW5hCiAgICAgICAgIAogICAgICAgICAvLyBUaGVyZSBtdXN0IGJlIGFuIGV4cG9uZW50CiAgICAg
ICAgIGlmIChwdHIgPj0gZW5kIHx8ICFpc0FTQ0lJRGlnaXQoKnB0cikpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgICAg
IHdoaWxlIChwdHIgPCBlbmQgJiYgaXNBU0NJSURpZ2l0KCpwdHIpKSB7CiAgICAgICAgICAgICBl
eHBvbmVudCAqPSBzdGF0aWNfY2FzdDxGbG9hdFR5cGU+KDEwKTsKQEAgLTExNiw3ICsxMTUsNyBA
QCB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5hCiAgICAgICAgIH0KICAg
ICAgICAgLy8gTWFrZSBzdXJlIGV4cG9uZW50IGlzIHZhbGlkLgogICAgICAgICBpZiAoIWlzVmFs
aWRSYW5nZShleHBvbmVudCkgfHwgZXhwb25lbnQgPiBzdGQ6Om51bWVyaWNfbGltaXRzPEZsb2F0
VHlwZT46Om1heF9leHBvbmVudCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQogCiAgICAgbnVtYmVyID0gaW50ZWdlciAr
IGRlY2ltYWw7CkBAIC0xMjcsMTQyICsxMjYsMTQ3IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlLCB0eXBlbmEKIAogICAgIC8vIERvbid0IHJldHVybiBJbmZpbml0eSgpIG9yIE5h
TigpLgogICAgIGlmICghaXNWYWxpZFJhbmdlKG51bWJlcikpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIGlmIChzdGFydCA9PSBwdHIp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAot
ICAgIGlmIChza2lwKQorICAgIGlmIChza2lwID09IFN1ZmZpeFNraXBwaW5nUG9saWN5OjpTa2lw
KQogICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXNPckRlbGltaXRlcihwdHIsIGVuZCk7CiAK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+
Ci1ib29sIHBhcnNlU1ZHTnVtYmVyKENoYXJhY3RlclR5cGUqIGJlZ2luLCBzaXplX3QgbGVuZ3Ro
LCBkb3VibGUmIG51bWJlcikKLXsKLSAgICBjb25zdCBDaGFyYWN0ZXJUeXBlKiBwdHIgPSBiZWdp
bjsKLSAgICBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQgPSBwdHIgKyBsZW5ndGg7Ci0gICAgcmV0
dXJuIGdlbmVyaWNQYXJzZU51bWJlcihwdHIsIGVuZCwgbnVtYmVyLCBmYWxzZSk7CisgICAgcmV0
dXJuIG51bWJlcjsKIH0KIAotLy8gRXhwbGljaXRseSBpbnN0YW50aWF0ZSB0aGUgdHdvIGZsYXZv
cnMgb2YgcGFyc2VTVkdOdW1iZXIoKSB0byBzYXRpc2Z5IGV4dGVybmFsIGNhbGxlcnMKLXRlbXBs
YXRlIGJvb2wgcGFyc2VTVkdOdW1iZXIoTENoYXIqIGJlZ2luLCBzaXplX3QgbGVuZ3RoLCBkb3Vi
bGUmKTsKLXRlbXBsYXRlIGJvb2wgcGFyc2VTVkdOdW1iZXIoVUNoYXIqIGJlZ2luLCBzaXplX3Qg
bGVuZ3RoLCBkb3VibGUmKTsKLQotYm9vbCBwYXJzZU51bWJlcihjb25zdCBMQ2hhciomIHB0ciwg
Y29uc3QgTENoYXIqIGVuZCwgZmxvYXQmIG51bWJlciwgYm9vbCBza2lwKQorT3B0aW9uYWw8Zmxv
YXQ+IHBhcnNlTnVtYmVyKGNvbnN0IExDaGFyKiYgcHRyLCBjb25zdCBMQ2hhciogZW5kLCBTdWZm
aXhTa2lwcGluZ1BvbGljeSBza2lwKQogewotICAgIHJldHVybiBnZW5lcmljUGFyc2VOdW1iZXIo
cHRyLCBlbmQsIG51bWJlciwgc2tpcCk7CisgICAgcmV0dXJuIGdlbmVyaWNQYXJzZU51bWJlcihw
dHIsIGVuZCwgc2tpcCk7CiB9CiAKLWJvb2wgcGFyc2VOdW1iZXIoY29uc3QgVUNoYXIqJiBwdHIs
IGNvbnN0IFVDaGFyKiBlbmQsIGZsb2F0JiBudW1iZXIsIGJvb2wgc2tpcCkgCitPcHRpb25hbDxm
bG9hdD4gcGFyc2VOdW1iZXIoY29uc3QgVUNoYXIqJiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQsIFN1
ZmZpeFNraXBwaW5nUG9saWN5IHNraXApCiB7Ci0gICAgcmV0dXJuIGdlbmVyaWNQYXJzZU51bWJl
cihwdHIsIGVuZCwgbnVtYmVyLCBza2lwKTsKKyAgICByZXR1cm4gZ2VuZXJpY1BhcnNlTnVtYmVy
KHB0ciwgZW5kLCBza2lwKTsKIH0KIAotYm9vbCBwYXJzZU51bWJlckZyb21TdHJpbmcoY29uc3Qg
U3RyaW5nJiBzdHJpbmcsIGZsb2F0JiBudW1iZXIsIGJvb2wgc2tpcCkKK09wdGlvbmFsPGZsb2F0
PiBwYXJzZU51bWJlcihjb25zdCBTdHJpbmcmIHN0cmluZywgU3VmZml4U2tpcHBpbmdQb2xpY3kg
c2tpcCkKIHsKICAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcoc3Ry
aW5nKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKICAgICBjb25zdCBVQ2hhciogcHRyID0gdXBj
b252ZXJ0ZWRDaGFyYWN0ZXJzOwogICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBwdHIgKyBzdHJpbmcu
bGVuZ3RoKCk7Ci0gICAgcmV0dXJuIGdlbmVyaWNQYXJzZU51bWJlcihwdHIsIGVuZCwgbnVtYmVy
LCBza2lwKSAmJiBwdHIgPT0gZW5kOworICAgIGF1dG8gcmVzdWx0ID0gZ2VuZXJpY1BhcnNlTnVt
YmVyKHB0ciwgZW5kLCBza2lwKTsKKyAgICBpZiAocHRyICE9IGVuZCkKKyAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAvLyBvbmx5IHVzZWQgdG8g
cGFyc2UgbGFyZ2VBcmNGbGFnIGFuZCBzd2VlcEZsYWcgd2hpY2ggbXVzdCBiZSBhICIwIiBvciAi
MSIKIC8vIGFuZCBtaWdodCBub3QgaGF2ZSBhbnkgd2hpdGVzcGFjZS9jb21tYSBhZnRlciBpdAot
dGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1ib29sIGdlbmVyaWNQYXJzZUFyY0Zs
YWcoY29uc3QgQ2hhcmFjdGVyVHlwZSomIHB0ciwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kLCBi
b29sJiBmbGFnKQordGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IE9wdGlvbmFsPGJv
b2w+IGdlbmVyaWNQYXJzZUFyY0ZsYWcoY29uc3QgQ2hhcmFjdGVyVHlwZSomIHB0ciwgY29uc3Qg
Q2hhcmFjdGVyVHlwZSogZW5kKQogewogICAgIGlmIChwdHIgPj0gZW5kKQotICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKICAgICBjb25zdCBDaGFy
YWN0ZXJUeXBlIGZsYWdDaGFyID0gKnB0cisrOworCisgICAgYm9vbCBmbGFnOwogICAgIGlmIChm
bGFnQ2hhciA9PSAnMCcpCiAgICAgICAgIGZsYWcgPSBmYWxzZTsKICAgICBlbHNlIGlmIChmbGFn
Q2hhciA9PSAnMScpCiAgICAgICAgIGZsYWcgPSB0cnVlOwogICAgIGVsc2UKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIAorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCiAgICAgc2tp
cE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxpbWl0ZXIocHRyLCBlbmQpOwogICAgIAotICAgIHJldHVy
biB0cnVlOworICAgIHJldHVybiBmbGFnOwogfQogCi1ib29sIHBhcnNlQXJjRmxhZyhjb25zdCBM
Q2hhciomIHB0ciwgY29uc3QgTENoYXIqIGVuZCwgYm9vbCYgZmxhZykKK09wdGlvbmFsPGJvb2w+
IHBhcnNlQXJjRmxhZyhjb25zdCBMQ2hhciomIHB0ciwgY29uc3QgTENoYXIqIGVuZCkKIHsKLSAg
ICByZXR1cm4gZ2VuZXJpY1BhcnNlQXJjRmxhZyhwdHIsIGVuZCwgZmxhZyk7CisgICAgcmV0dXJu
IGdlbmVyaWNQYXJzZUFyY0ZsYWcocHRyLCBlbmQpOwogfQogCi1ib29sIHBhcnNlQXJjRmxhZyhj
b25zdCBVQ2hhciomIHB0ciwgY29uc3QgVUNoYXIqIGVuZCwgYm9vbCYgZmxhZykKK09wdGlvbmFs
PGJvb2w+IHBhcnNlQXJjRmxhZyhjb25zdCBVQ2hhciomIHB0ciwgY29uc3QgVUNoYXIqIGVuZCkK
IHsKLSAgICByZXR1cm4gZ2VuZXJpY1BhcnNlQXJjRmxhZyhwdHIsIGVuZCwgZmxhZyk7CisgICAg
cmV0dXJuIGdlbmVyaWNQYXJzZUFyY0ZsYWcocHRyLCBlbmQpOwogfQogCi1ib29sIHBhcnNlTnVt
YmVyT3B0aW9uYWxOdW1iZXIoY29uc3QgU3RyaW5nJiBzLCBmbG9hdCYgeCwgZmxvYXQmIHkpCitP
cHRpb25hbDxzdGQ6OnBhaXI8ZmxvYXQsIGZsb2F0Pj4gcGFyc2VOdW1iZXJPcHRpb25hbE51bWJl
cihjb25zdCBTdHJpbmcmIHMpCiB7CiAgICAgaWYgKHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBhdXRvIHVwY29u
dmVydGVkQ2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcocykudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7
CiAgICAgY29uc3QgVUNoYXIqIGN1ciA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKICAgICBjb25z
dCBVQ2hhciogZW5kID0gY3VyICsgcy5sZW5ndGgoKTsKIAotICAgIGlmICghcGFyc2VOdW1iZXIo
Y3VyLCBlbmQsIHgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYXV0byB4ID0gcGFyc2VO
dW1iZXIoY3VyLCBlbmQpOworICAgIGlmICgheCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKIAogICAgIGlmIChjdXIgPT0gZW5kKQotICAgICAgICB5ID0geDsKLSAgICBlbHNlIGlmICgh
cGFyc2VOdW1iZXIoY3VyLCBlbmQsIHksIGZhbHNlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoKngsICp4KTsKIAotICAgIHJldHVybiBjdXIg
PT0gZW5kOworICAgIGF1dG8geSA9IHBhcnNlTnVtYmVyKGN1ciwgZW5kLCBTdWZmaXhTa2lwcGlu
Z1BvbGljeTo6RG9udFNraXApOworICAgIGlmICgheSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKworICAgIGlmIChjdXIgIT0gZW5kKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworCisgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKCp4LCAqeSk7CiB9CiAKLWJvb2wgcGFyc2VQ
b2ludChjb25zdCBTdHJpbmcmIHMsIEZsb2F0UG9pbnQmIHBvaW50KQorT3B0aW9uYWw8RmxvYXRQ
b2ludD4gcGFyc2VQb2ludChjb25zdCBTdHJpbmcmIHMpCiB7CiAgICAgaWYgKHMuaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisK
ICAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcocykudXBjb252ZXJ0
ZWRDaGFyYWN0ZXJzKCk7CiAgICAgY29uc3QgVUNoYXIqIGN1ciA9IHVwY29udmVydGVkQ2hhcmFj
dGVyczsKICAgICBjb25zdCBVQ2hhciogZW5kID0gY3VyICsgcy5sZW5ndGgoKTsKIAogICAgIGlm
ICghc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGN1ciwgZW5kKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgZmxvYXQgeCA9IDA7Ci0gICAg
aWYgKCFwYXJzZU51bWJlcihjdXIsIGVuZCwgeCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIGZsb2F0IHkgPSAwOwotICAgIGlmICghcGFyc2VOdW1iZXIoY3VyLCBlbmQsIHkpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBwb2ludCA9IEZsb2F0UG9pbnQoeCwgeSk7CisgICAg
YXV0byBwb2ludCA9IHBhcnNlRmxvYXRQb2ludChjdXIsIGVuZCk7CisgICAgaWYgKCFwb2ludCkK
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIC8vIERpc2FsbG93IGFueXRoaW5n
IGV4Y2VwdCBzcGFjZXMgYXQgdGhlIGVuZC4KLSAgICByZXR1cm4gIXNraXBPcHRpb25hbFNWR1Nw
YWNlcyhjdXIsIGVuZCk7CisgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGN1ciwgZW5kKTsKKyAg
ICAKKyAgICByZXR1cm4gcG9pbnQ7CiB9CiAKLWJvb2wgcGFyc2VSZWN0KGNvbnN0IFN0cmluZyYg
c3RyaW5nLCBGbG9hdFJlY3QmIHJlY3QpCitPcHRpb25hbDxGbG9hdFJlY3Q+IHBhcnNlUmVjdChj
b25zdCBTdHJpbmcmIHN0cmluZykKIHsKICAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9
IFN0cmluZ1ZpZXcoc3RyaW5nKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKICAgICBjb25zdCBV
Q2hhciogcHRyID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOwogICAgIGNvbnN0IFVDaGFyKiBlbmQg
PSBwdHIgKyBzdHJpbmcubGVuZ3RoKCk7CisgICAgCiAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2Vz
KHB0ciwgZW5kKTsKICAgICAKLSAgICBmbG9hdCB4ID0gMDsKLSAgICBmbG9hdCB5ID0gMDsKLSAg
ICBmbG9hdCB3aWR0aCA9IDA7Ci0gICAgZmxvYXQgaGVpZ2h0ID0gMDsKLSAgICBib29sIHZhbGlk
ID0gcGFyc2VOdW1iZXIocHRyLCBlbmQsIHgpICYmIHBhcnNlTnVtYmVyKHB0ciwgZW5kLCB5KSAm
JiBwYXJzZU51bWJlcihwdHIsIGVuZCwgd2lkdGgpICYmIHBhcnNlTnVtYmVyKHB0ciwgZW5kLCBo
ZWlnaHQsIGZhbHNlKTsKLSAgICByZWN0ID0gRmxvYXRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQp
OwotICAgIHJldHVybiB2YWxpZDsKKyAgICBhdXRvIHggPSBwYXJzZU51bWJlcihwdHIsIGVuZCk7
CisgICAgaWYgKCF4KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGF1dG8geSA9
IHBhcnNlTnVtYmVyKHB0ciwgZW5kKTsKKyAgICBpZiAoIXkpCisgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisgICAgYXV0byB3aWR0aCA9IHBhcnNlTnVtYmVyKHB0ciwgZW5kKTsKKyAgICBp
ZiAoIXdpZHRoKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGF1dG8gaGVpZ2h0
ID0gcGFyc2VOdW1iZXIocHRyLCBlbmQsIFN1ZmZpeFNraXBwaW5nUG9saWN5OjpEb250U2tpcCk7
CisgICAgaWYgKCFoZWlnaHQpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBy
ZXR1cm4gRmxvYXRSZWN0IHsgKngsICp5LCAqd2lkdGgsICpoZWlnaHQgfTsKIH0KIAotYm9vbCBw
YXJzZUdseXBoTmFtZShjb25zdCBTdHJpbmcmIGlucHV0LCBIYXNoU2V0PFN0cmluZz4mIHZhbHVl
cykKK09wdGlvbmFsPEhhc2hTZXQ8U3RyaW5nPj4gcGFyc2VHbHlwaE5hbWUoY29uc3QgU3RyaW5n
JiBpbnB1dCkKIHsKICAgICAvLyBGSVhNRTogUGFyc2luZyBlcnJvciBkZXRlY3Rpb24gaXMgbWlz
c2luZy4KLSAgICB2YWx1ZXMuY2xlYXIoKTsKKworICAgIEhhc2hTZXQ8U3RyaW5nPiB2YWx1ZXM7
CiAKICAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcoaW5wdXQpLnVw
Y29udmVydGVkQ2hhcmFjdGVycygpOwogICAgIGNvbnN0IFVDaGFyKiBwdHIgPSB1cGNvbnZlcnRl
ZENoYXJhY3RlcnM7CkBAIC0yODcsMTMgKzI5MSwxMyBAQCBib29sIHBhcnNlR2x5cGhOYW1lKGNv
bnN0IFN0cmluZyYgaW5wdXQsCiAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVsaW1p
dGVyKHB0ciwgZW5kLCAnLCcpOwogICAgIH0KIAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVy
biB2YWx1ZXM7CiB9CiAKLXN0YXRpYyBib29sIHBhcnNlVW5pY29kZVJhbmdlKGNvbnN0IFVDaGFy
KiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIFVuaWNvZGVSYW5nZSYgcmFuZ2UpCitzdGF0
aWMgT3B0aW9uYWw8VW5pY29kZVJhbmdlPiBwYXJzZVVuaWNvZGVSYW5nZShjb25zdCBVQ2hhciog
Y2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIGlmIChsZW5ndGggPCAyIHx8IGNo
YXJhY3RlcnNbMF0gIT0gJ1UnIHx8IGNoYXJhY3RlcnNbMV0gIT0gJysnKQotICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgCiAgICAgLy8gUGFy
c2UgdGhlIHN0YXJ0aW5nIGhleCBudW1iZXIgKG9yIGl0cyBwcmVmaXgpLgogICAgIHVuc2lnbmVk
IHN0YXJ0UmFuZ2UgPSAwOwpAQCAtMzA2LDE1ICszMTAsMTUgQEAgc3RhdGljIGJvb2wgcGFyc2VV
bmljb2RlUmFuZ2UoY29uc3QgVUNoYQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICsrc3Rh
cnRMZW5ndGg7CiAgICAgICAgIGlmIChzdGFydExlbmd0aCA+IDYpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICBzdGFy
dFJhbmdlID0gKHN0YXJ0UmFuZ2UgPDwgNCkgfCB0b0FTQ0lJSGV4VmFsdWUoKnB0cik7CiAgICAg
ICAgICsrcHRyOwogICAgIH0KLSAgICAKKwogICAgIC8vIEhhbmRsZSB0aGUgY2FzZSBvZiByYW5n
ZXMgc2VwYXJhdGVkIGJ5ICItIiBzaWduLgogICAgIGlmICgyICsgc3RhcnRMZW5ndGggPCBsZW5n
dGggJiYgKnB0ciA9PSAnLScpIHsKICAgICAgICAgaWYgKCFzdGFydExlbmd0aCkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAg
ICAgIAogICAgICAgICAvLyBQYXJzZSB0aGUgZW5kaW5nIGhleCBudW1iZXIgKG9yIGl0cyBwcmVm
aXgpLgogICAgICAgICB1bnNpZ25lZCBlbmRSYW5nZSA9IDA7CkBAIC0zMjUsMTcgKzMyOSwxOCBA
QCBzdGF0aWMgYm9vbCBwYXJzZVVuaWNvZGVSYW5nZShjb25zdCBVQ2hhCiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICArK2VuZExlbmd0aDsKICAgICAgICAgICAgIGlmIChlbmRM
ZW5ndGggPiA2KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICAgICAgZW5kUmFuZ2UgPSAoZW5kUmFuZ2Ug
PDwgNCkgfCB0b0FTQ0lJSGV4VmFsdWUoKnB0cik7CiAgICAgICAgICAgICArK3B0cjsKICAgICAg
ICAgfQogICAgICAgICAKICAgICAgICAgaWYgKCFlbmRMZW5ndGgpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICAKKyAg
ICAgICAgVW5pY29kZVJhbmdlIHJhbmdlOwogICAgICAgICByYW5nZS5maXJzdCA9IHN0YXJ0UmFu
Z2U7CiAgICAgICAgIHJhbmdlLnNlY29uZCA9IGVuZFJhbmdlOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgIH0KICAgICAKICAgICAvLyBIYW5kbGUgdGhl
IGNhc2Ugb2YgYSBudW1iZXIgd2l0aCBzb21lIG9wdGlvbmFsIHRyYWlsaW5nIHF1ZXN0aW9uIG1h
cmtzLgpAQCAtMzQ1LDI3ICszNTAsMzIgQEAgc3RhdGljIGJvb2wgcGFyc2VVbmljb2RlUmFuZ2Uo
Y29uc3QgVUNoYQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICsrc3RhcnRMZW5ndGg7CiAg
ICAgICAgIGlmIChzdGFydExlbmd0aCA+IDYpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICBzdGFydFJhbmdlIDw8PSA0
OwogICAgICAgICBlbmRSYW5nZSA9IChlbmRSYW5nZSA8PCA0KSB8IDB4RjsKICAgICAgICAgKytw
dHI7CiAgICAgfQogICAgIAogICAgIGlmICghc3RhcnRMZW5ndGgpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAKKyAgICBVbmljb2RlUmFu
Z2UgcmFuZ2U7CiAgICAgcmFuZ2UuZmlyc3QgPSBzdGFydFJhbmdlOwogICAgIHJhbmdlLnNlY29u
ZCA9IGVuZFJhbmdlOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiByYW5nZTsKIH0KIAot
Ym9vbCBwYXJzZUtlcm5pbmdVbmljb2RlU3RyaW5nKGNvbnN0IFN0cmluZyYgaW5wdXQsIFVuaWNv
ZGVSYW5nZXMmIHJhbmdlTGlzdCwgSGFzaFNldDxTdHJpbmc+JiBzdHJpbmdMaXN0KQorT3B0aW9u
YWw8c3RkOjpwYWlyPFVuaWNvZGVSYW5nZXMsIEhhc2hTZXQ8U3RyaW5nPj4+IHBhcnNlS2Vybmlu
Z1VuaWNvZGVTdHJpbmcoY29uc3QgU3RyaW5nJiBpbnB1dCkKIHsKICAgICAvLyBGSVhNRTogUGFy
c2luZyBlcnJvciBkZXRlY3Rpb24gaXMgbWlzc2luZy4KKwogICAgIGF1dG8gdXBjb252ZXJ0ZWRD
aGFyYWN0ZXJzID0gU3RyaW5nVmlldyhpbnB1dCkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7CiAg
ICAgY29uc3QgVUNoYXIqIHB0ciA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKICAgICBjb25zdCBV
Q2hhciogZW5kID0gcHRyICsgaW5wdXQubGVuZ3RoKCk7CiAKKyAgICBVbmljb2RlUmFuZ2VzIHJh
bmdlTGlzdDsKKyAgICBIYXNoU2V0PFN0cmluZz4gc3RyaW5nTGlzdDsKKwogICAgIHdoaWxlIChw
dHIgPCBlbmQpIHsKICAgICAgICAgY29uc3QgVUNoYXIqIGlucHV0U3RhcnQgPSBwdHI7CiAgICAg
ICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgKnB0ciAhPSAnLCcpCkBAIC0zNzUsMTA1ICszODUsMzcg
QEAgYm9vbCBwYXJzZUtlcm5pbmdVbmljb2RlU3RyaW5nKGNvbnN0IFN0cgogICAgICAgICAgICAg
YnJlYWs7CiAKICAgICAgICAgLy8gVHJ5IHRvIHBhcnNlIHVuaWNvZGUgcmFuZ2UgZmlyc3QKLSAg
ICAgICAgVW5pY29kZVJhbmdlIHJhbmdlOwotICAgICAgICBpZiAocGFyc2VVbmljb2RlUmFuZ2Uo
aW5wdXRTdGFydCwgcHRyIC0gaW5wdXRTdGFydCwgcmFuZ2UpKQotICAgICAgICAgICAgcmFuZ2VM
aXN0LmFwcGVuZChyYW5nZSk7CisgICAgICAgIGlmIChhdXRvIHJhbmdlID0gcGFyc2VVbmljb2Rl
UmFuZ2UoaW5wdXRTdGFydCwgcHRyIC0gaW5wdXRTdGFydCkpCisgICAgICAgICAgICByYW5nZUxp
c3QuYXBwZW5kKFdURk1vdmUoKnJhbmdlKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHN0
cmluZ0xpc3QuYWRkKFN0cmluZyhpbnB1dFN0YXJ0LCBwdHIgLSBpbnB1dFN0YXJ0KSk7CiAgICAg
ICAgICsrcHRyOwogICAgIH0KIAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBzdGQ6Om1h
a2VfcGFpcihyYW5nZUxpc3QsIHN0cmluZ0xpc3QpOwogfQogCi1WZWN0b3I8U3RyaW5nPiBwYXJz
ZURlbGltaXRlZFN0cmluZyhjb25zdCBTdHJpbmcmIGlucHV0LCBjb25zdCBjaGFyIHNlcGVyYXRv
cikKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgT3B0aW9uYWw8Rmxv
YXRQb2ludD4gZ2VuZXJpY1BhcnNlRmxvYXRQb2ludChjb25zdCBDaGFyYWN0ZXJUeXBlKiYgY3Vy
cmVudCwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kKQogewotICAgIFZlY3RvcjxTdHJpbmc+IHZh
bHVlczsKLQotICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyhpbnB1
dCkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIqIHB0ciA9IHVwY29u
dmVydGVkQ2hhcmFjdGVyczsKLSAgICBjb25zdCBVQ2hhciogZW5kID0gcHRyICsgaW5wdXQubGVu
Z3RoKCk7Ci0gICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHB0ciwgZW5kKTsKLQotICAgIHdoaWxl
IChwdHIgPCBlbmQpIHsKLSAgICAgICAgLy8gTGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGUgc3Bh
Y2UsIGFuZCB3aGl0ZSBzcGFjZSBiZWZvcmUgYW5kIGFmdGVyIHNlbWljb2xvbiBzZXBhcmF0b3Jz
LCB3aWxsIGJlIGlnbm9yZWQuCi0gICAgICAgIGNvbnN0IFVDaGFyKiBpbnB1dFN0YXJ0ID0gcHRy
OwotICAgICAgICB3aGlsZSAocHRyIDwgZW5kICYmICpwdHIgIT0gc2VwZXJhdG9yKSAvLyBjYXJl
ZnVsIG5vdCB0byBpZ25vcmUgd2hpdGVzcGFjZSBpbnNpZGUgaW5wdXRzCi0gICAgICAgICAgICBw
dHIrKzsKKyAgICBhdXRvIHggPSBwYXJzZU51bWJlcihjdXJyZW50LCBlbmQpOworICAgIGlmICgh
eCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgICAgICBpZiAocHRyID09IGlu
cHV0U3RhcnQpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAvLyB3YWxrIGJhY2t3YXJk
cyBmcm9tIHRoZSA7IHRvIGlnbm9yZSBhbnkgd2hpdGVzcGFjZQotICAgICAgICBjb25zdCBVQ2hh
ciogaW5wdXRFbmQgPSBwdHIgLSAxOwotICAgICAgICB3aGlsZSAoaW5wdXRTdGFydCA8IGlucHV0
RW5kICYmIGlzU1ZHU3BhY2UoKmlucHV0RW5kKSkKLSAgICAgICAgICAgIGlucHV0RW5kLS07Cisg
ICAgYXV0byB5ID0gcGFyc2VOdW1iZXIoY3VycmVudCwgZW5kKTsKKyAgICBpZiAoIXkpCisgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICAgICAgdmFsdWVzLmFwcGVuZChTdHJpbmco
aW5wdXRTdGFydCwgaW5wdXRFbmQgLSBpbnB1dFN0YXJ0ICsgMSkpOwotICAgICAgICBza2lwT3B0
aW9uYWxTVkdTcGFjZXNPckRlbGltaXRlcihwdHIsIGVuZCwgc2VwZXJhdG9yKTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gdmFsdWVzOworICAgIHJldHVybiBGbG9hdFBvaW50IHsgKngsICp5IH07CiB9
CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotYm9vbCBwYXJzZUZsb2F0UG9p
bnQoY29uc3QgQ2hhcmFjdGVyVHlwZSomIGN1cnJlbnQsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVu
ZCwgRmxvYXRQb2ludCYgcG9pbnQpCitPcHRpb25hbDxGbG9hdFBvaW50PiBwYXJzZUZsb2F0UG9p
bnQoY29uc3QgTENoYXIqJiBjdXJyZW50LCBjb25zdCBMQ2hhciogZW5kKQogewotICAgIGZsb2F0
IHg7Ci0gICAgZmxvYXQgeTsKLSAgICBpZiAoIXBhcnNlTnVtYmVyKGN1cnJlbnQsIGVuZCwgeCkK
LSAgICAgICAgfHwgIXBhcnNlTnVtYmVyKGN1cnJlbnQsIGVuZCwgeSkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBwb2ludCA9IEZsb2F0UG9pbnQoeCwgeSk7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLXRlbXBsYXRlIGJvb2wgcGFyc2VGbG9hdFBvaW50KGNvbnN0IExDaGFyKiYgY3VycmVu
dCwgY29uc3QgTENoYXIqIGVuZCwgRmxvYXRQb2ludCYgcG9pbnQxKTsKLXRlbXBsYXRlIGJvb2wg
cGFyc2VGbG9hdFBvaW50KGNvbnN0IFVDaGFyKiYgY3VycmVudCwgY29uc3QgVUNoYXIqIGVuZCwg
RmxvYXRQb2ludCYgcG9pbnQxKTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+
Ci1pbmxpbmUgYm9vbCBwYXJzZUZsb2F0UG9pbnQyKGNvbnN0IENoYXJhY3RlclR5cGUqJiBjdXJy
ZW50LCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQsIEZsb2F0UG9pbnQmIHBvaW50MSwgRmxvYXRQ
b2ludCYgcG9pbnQyKQotewotICAgIGZsb2F0IHgxOwotICAgIGZsb2F0IHkxOwotICAgIGZsb2F0
IHgyOwotICAgIGZsb2F0IHkyOwotICAgIGlmICghcGFyc2VOdW1iZXIoY3VycmVudCwgZW5kLCB4
MSkKLSAgICAgICAgfHwgIXBhcnNlTnVtYmVyKGN1cnJlbnQsIGVuZCwgeTEpCi0gICAgICAgIHx8
ICFwYXJzZU51bWJlcihjdXJyZW50LCBlbmQsIHgyKQotICAgICAgICB8fCAhcGFyc2VOdW1iZXIo
Y3VycmVudCwgZW5kLCB5MikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBwb2ludDEgPSBG
bG9hdFBvaW50KHgxLCB5MSk7Ci0gICAgcG9pbnQyID0gRmxvYXRQb2ludCh4MiwgeTIpOwotICAg
IHJldHVybiB0cnVlOwotfQotCi10ZW1wbGF0ZSBib29sIHBhcnNlRmxvYXRQb2ludDIoY29uc3Qg
TENoYXIqJiBjdXJyZW50LCBjb25zdCBMQ2hhciogZW5kLCBGbG9hdFBvaW50JiBwb2ludDEsIEZs
b2F0UG9pbnQmIHBvaW50Mik7Ci10ZW1wbGF0ZSBib29sIHBhcnNlRmxvYXRQb2ludDIoY29uc3Qg
VUNoYXIqJiBjdXJyZW50LCBjb25zdCBVQ2hhciogZW5kLCBGbG9hdFBvaW50JiBwb2ludDEsIEZs
b2F0UG9pbnQmIHBvaW50Mik7Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgot
Ym9vbCBwYXJzZUZsb2F0UG9pbnQzKGNvbnN0IENoYXJhY3RlclR5cGUqJiBjdXJyZW50LCBjb25z
dCBDaGFyYWN0ZXJUeXBlKiBlbmQsIEZsb2F0UG9pbnQmIHBvaW50MSwgRmxvYXRQb2ludCYgcG9p
bnQyLCBGbG9hdFBvaW50JiBwb2ludDMpCi17Ci0gICAgZmxvYXQgeDE7Ci0gICAgZmxvYXQgeTE7
Ci0gICAgZmxvYXQgeDI7Ci0gICAgZmxvYXQgeTI7Ci0gICAgZmxvYXQgeDM7Ci0gICAgZmxvYXQg
eTM7Ci0gICAgaWYgKCFwYXJzZU51bWJlcihjdXJyZW50LCBlbmQsIHgxKQotICAgICAgICB8fCAh
cGFyc2VOdW1iZXIoY3VycmVudCwgZW5kLCB5MSkKLSAgICAgICAgfHwgIXBhcnNlTnVtYmVyKGN1
cnJlbnQsIGVuZCwgeDIpCi0gICAgICAgIHx8ICFwYXJzZU51bWJlcihjdXJyZW50LCBlbmQsIHky
KQotICAgICAgICB8fCAhcGFyc2VOdW1iZXIoY3VycmVudCwgZW5kLCB4MykKLSAgICAgICAgfHwg
IXBhcnNlTnVtYmVyKGN1cnJlbnQsIGVuZCwgeTMpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgcG9pbnQxID0gRmxvYXRQb2ludCh4MSwgeTEpOwotICAgIHBvaW50MiA9IEZsb2F0UG9pbnQo
eDIsIHkyKTsKLSAgICBwb2ludDMgPSBGbG9hdFBvaW50KHgzLCB5Myk7Ci0gICAgcmV0dXJuIHRy
dWU7CisgICAgcmV0dXJuIGdlbmVyaWNQYXJzZUZsb2F0UG9pbnQoY3VycmVudCwgZW5kKTsKIH0K
IAotdGVtcGxhdGUgYm9vbCBwYXJzZUZsb2F0UG9pbnQzKGNvbnN0IExDaGFyKiYgY3VycmVudCwg
Y29uc3QgTENoYXIqIGVuZCwgRmxvYXRQb2ludCYgcG9pbnQxLCBGbG9hdFBvaW50JiBwb2ludDIs
IEZsb2F0UG9pbnQmIHBvaW50Myk7Ci10ZW1wbGF0ZSBib29sIHBhcnNlRmxvYXRQb2ludDMoY29u
c3QgVUNoYXIqJiBjdXJyZW50LCBjb25zdCBVQ2hhciogZW5kLCBGbG9hdFBvaW50JiBwb2ludDEs
IEZsb2F0UG9pbnQmIHBvaW50MiwgRmxvYXRQb2ludCYgcG9pbnQzKTsKK09wdGlvbmFsPEZsb2F0
UG9pbnQ+IHBhcnNlRmxvYXRQb2ludChjb25zdCBVQ2hhciomIGN1cnJlbnQsIGNvbnN0IFVDaGFy
KiBlbmQpCit7CisgICAgcmV0dXJuIGdlbmVyaWNQYXJzZUZsb2F0UG9pbnQoY3VycmVudCwgZW5k
KTsKK30KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXJzZXJVdGlsaXRpZXMuaAko
cmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhcnNlclV0aWxpdGll
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBACiAjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCi10eXBlZGVmIHN0ZDo6cGFp
cjx1bnNpZ25lZCwgdW5zaWduZWQ+IFVuaWNvZGVSYW5nZTsKK3R5cGVkZWYgc3RkOjpwYWlyPFVD
aGFyMzIsIFVDaGFyMzI+IFVuaWNvZGVSYW5nZTsKIHR5cGVkZWYgVmVjdG9yPFVuaWNvZGVSYW5n
ZT4gVW5pY29kZVJhbmdlczsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzMsNDIgKzMzLDQ1
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEZsb2F0UG9pbnQ7CiBjbGFzcyBGbG9hdFJl
Y3Q7CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotYm9vbCBwYXJzZVNWR051
bWJlcihDaGFyYWN0ZXJUeXBlKiBwdHIsIHNpemVfdCBsZW5ndGgsIGRvdWJsZSYgbnVtYmVyKTsK
LWJvb2wgcGFyc2VOdW1iZXIoY29uc3QgTENoYXIqJiBwdHIsIGNvbnN0IExDaGFyKiBlbmQsIGZs
b2F0JiBudW1iZXIsIGJvb2wgc2tpcCA9IHRydWUpOwotYm9vbCBwYXJzZU51bWJlcihjb25zdCBV
Q2hhciomIHB0ciwgY29uc3QgVUNoYXIqIGVuZCwgZmxvYXQmIG51bWJlciwgYm9vbCBza2lwID0g
dHJ1ZSk7Ci1ib29sIHBhcnNlTnVtYmVyRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmLCBmbG9hdCYg
bnVtYmVyLCBib29sIHNraXAgPSB0cnVlKTsKLWJvb2wgcGFyc2VOdW1iZXJPcHRpb25hbE51bWJl
cihjb25zdCBTdHJpbmcmIHMsIGZsb2F0JiBoLCBmbG9hdCYgdik7Ci1ib29sIHBhcnNlQXJjRmxh
Zyhjb25zdCBMQ2hhciomIHB0ciwgY29uc3QgTENoYXIqIGVuZCwgYm9vbCYgZmxhZyk7Ci1ib29s
IHBhcnNlQXJjRmxhZyhjb25zdCBVQ2hhciomIHB0ciwgY29uc3QgVUNoYXIqIGVuZCwgYm9vbCYg
ZmxhZyk7Ci1ib29sIHBhcnNlUG9pbnQoY29uc3QgU3RyaW5nJiwgRmxvYXRQb2ludCYpOwotYm9v
bCBwYXJzZVJlY3QoY29uc3QgU3RyaW5nJiwgRmxvYXRSZWN0Jik7Ci0KLXRlbXBsYXRlIDx0eXBl
bmFtZSBDaGFyYWN0ZXJUeXBlPgotYm9vbCBwYXJzZUZsb2F0UG9pbnQoY29uc3QgQ2hhcmFjdGVy
VHlwZSomIGN1cnJlbnQsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCwgRmxvYXRQb2ludCYpOwot
dGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1ib29sIHBhcnNlRmxvYXRQb2ludDIo
Y29uc3QgQ2hhcmFjdGVyVHlwZSomIGN1cnJlbnQsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCwg
RmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmKTsKLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJU
eXBlPgotYm9vbCBwYXJzZUZsb2F0UG9pbnQzKGNvbnN0IENoYXJhY3RlclR5cGUqJiBjdXJyZW50
LCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQsIEZsb2F0UG9pbnQmLCBGbG9hdFBvaW50JiwgRmxv
YXRQb2ludCYpOworZW51bSBjbGFzcyBTdWZmaXhTa2lwcGluZ1BvbGljeSB7CisgICAgRG9udFNr
aXAsCisgICAgU2tpcAorfTsKKworT3B0aW9uYWw8ZmxvYXQ+IHBhcnNlTnVtYmVyKGNvbnN0IExD
aGFyKiYgY3VycmVudCwgY29uc3QgTENoYXIqIGVuZCwgU3VmZml4U2tpcHBpbmdQb2xpY3kgPSBT
dWZmaXhTa2lwcGluZ1BvbGljeTo6U2tpcCk7CitPcHRpb25hbDxmbG9hdD4gcGFyc2VOdW1iZXIo
Y29uc3QgVUNoYXIqJiBjdXJyZW50LCBjb25zdCBVQ2hhciogZW5kLCBTdWZmaXhTa2lwcGluZ1Bv
bGljeSA9IFN1ZmZpeFNraXBwaW5nUG9saWN5OjpTa2lwKTsKK09wdGlvbmFsPGZsb2F0PiBwYXJz
ZU51bWJlcihjb25zdCBTdHJpbmcmLCBTdWZmaXhTa2lwcGluZ1BvbGljeSA9IFN1ZmZpeFNraXBw
aW5nUG9saWN5OjpTa2lwKTsKKworT3B0aW9uYWw8c3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4+IHBh
cnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIoY29uc3QgU3RyaW5nJik7CisKK09wdGlvbmFsPGJvb2w+
IHBhcnNlQXJjRmxhZyhjb25zdCBMQ2hhciomIGN1cnJlbnQsIGNvbnN0IExDaGFyKiBlbmQpOwor
T3B0aW9uYWw8Ym9vbD4gcGFyc2VBcmNGbGFnKGNvbnN0IFVDaGFyKiYgY3VycmVudCwgY29uc3Qg
VUNoYXIqIGVuZCk7CisKK09wdGlvbmFsPEZsb2F0UG9pbnQ+IHBhcnNlUG9pbnQoY29uc3QgU3Ry
aW5nJik7CitPcHRpb25hbDxGbG9hdFJlY3Q+IHBhcnNlUmVjdChjb25zdCBTdHJpbmcmKTsKKwor
T3B0aW9uYWw8RmxvYXRQb2ludD4gcGFyc2VGbG9hdFBvaW50KGNvbnN0IExDaGFyKiYgY3VycmVu
dCwgY29uc3QgTENoYXIqIGVuZCk7CitPcHRpb25hbDxGbG9hdFBvaW50PiBwYXJzZUZsb2F0UG9p
bnQoY29uc3QgVUNoYXIqJiBjdXJyZW50LCBjb25zdCBVQ2hhciogZW5kKTsKKworT3B0aW9uYWw8
c3RkOjpwYWlyPFVuaWNvZGVSYW5nZXMsIEhhc2hTZXQ8U3RyaW5nPj4+IHBhcnNlS2VybmluZ1Vu
aWNvZGVTdHJpbmcoY29uc3QgU3RyaW5nJik7CitPcHRpb25hbDxIYXNoU2V0PFN0cmluZz4+IHBh
cnNlR2x5cGhOYW1lKGNvbnN0IFN0cmluZyYpOworCiAKIC8vIFNWRyBhbGxvd3Mgc2V2ZXJhbCBk
aWZmZXJlbnQgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzOgogLy8gaHR0cDovL3d3dy53My5vcmcvVFIv
U1ZHL3BhdGhzLmh0bWwjUGF0aERhdGFCTkYKLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJU
eXBlPgotaW5saW5lIGJvb2wgaXNTVkdTcGFjZShDaGFyYWN0ZXJUeXBlIGMpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBpbmxpbmUgYm9vbCBpc1NWR1NwYWNlKENoYXJhY3RlclR5
cGUgYykKIHsKICAgICByZXR1cm4gYyA9PSAnICcgfHwgYyA9PSAnXHQnIHx8IGMgPT0gJ1xuJyB8
fCBjID09ICdccic7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotaW5s
aW5lIGJvb2wgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGNvbnN0IENoYXJhY3RlclR5cGUqJiBwdHIs
IGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCkKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5
cGU+IGlubGluZSBib29sIHNraXBPcHRpb25hbFNWR1NwYWNlcyhjb25zdCBDaGFyYWN0ZXJUeXBl
KiYgcHRyLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQpCiB7CiAgICAgd2hpbGUgKHB0ciA8IGVu
ZCAmJiBpc1NWR1NwYWNlKCpwdHIpKQogICAgICAgICBwdHIrKzsKICAgICByZXR1cm4gcHRyIDwg
ZW5kOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLWlubGluZSBib29s
IHNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVsaW1pdGVyKGNvbnN0IENoYXJhY3RlclR5cGUqJiBw
dHIsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCwgY2hhciBkZWxpbWl0ZXIgPSAnLCcpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBpbmxpbmUgYm9vbCBza2lwT3B0aW9uYWxTVkdT
cGFjZXNPckRlbGltaXRlcihjb25zdCBDaGFyYWN0ZXJUeXBlKiYgcHRyLCBjb25zdCBDaGFyYWN0
ZXJUeXBlKiBlbmQsIGNoYXIgZGVsaW1pdGVyID0gJywnKQogewogICAgIGlmIChwdHIgPCBlbmQg
JiYgIWlzU1ZHU3BhY2UoKnB0cikgJiYgKnB0ciAhPSBkZWxpbWl0ZXIpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTgxLDEwICs4NCw2IEBAIGlubGluZSBib29sIHNraXBPcHRpb25hbFNWR1Nw
YWNlc09yRGVsaW0KICAgICByZXR1cm4gcHRyIDwgZW5kOwogfQogCi1WZWN0b3I8U3RyaW5nPiBw
YXJzZURlbGltaXRlZFN0cmluZyhjb25zdCBTdHJpbmcmIGlucHV0LCBjb25zdCBjaGFyIHNlcGVy
YXRvcik7Ci1ib29sIHBhcnNlS2VybmluZ1VuaWNvZGVTdHJpbmcoY29uc3QgU3RyaW5nJiBpbnB1
dCwgVW5pY29kZVJhbmdlcyYsIEhhc2hTZXQ8U3RyaW5nPiYgc3RyaW5nTGlzdCk7Ci1ib29sIHBh
cnNlR2x5cGhOYW1lKGNvbnN0IFN0cmluZyYgaW5wdXQsIEhhc2hTZXQ8U3RyaW5nPiYgdmFsdWVz
KTsKLQogaW5saW5lIGJvb2wgc2tpcFN0cmluZyhjb25zdCBVQ2hhciomIHB0ciwgY29uc3QgVUNo
YXIqIGVuZCwgY29uc3QgVUNoYXIqIG5hbWUsIGludCBsZW5ndGgpCiB7CiAgICAgaWYgKGVuZCAt
IHB0ciA8IGxlbmd0aCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQmxlbmRlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhCbGVuZGVyLmNwcAko
cmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhCbGVuZGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDIwMCArMTE2LDIwMSBAQCBGbG9hdFBvaW50IFNWR1Bh
dGhCbGVuZGVyOjpibGVuZEFuaW1hdGVkCiAgICAgcmV0dXJuIGFuaW1hdGVkUG9pbnQ7CiB9CiAK
K3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9uPiB1c2luZyBJbnZva2VSZXN1bHQgPSB0eXBlbmFt
ZSBzdGQ6Omludm9rZV9yZXN1bHRfdDxGdW5jdGlvbiwgU1ZHUGF0aFNvdXJjZT46OnZhbHVlX3R5
cGU7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvbj4gdXNpbmcgUmVzdWx0UGFpciA9IHN0ZDo6
cGFpcjxJbnZva2VSZXN1bHQ8RnVuY3Rpb24+LCBJbnZva2VSZXN1bHQ8RnVuY3Rpb24+PjsKK3Rl
bXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9uPiBzdGF0aWMgT3B0aW9uYWw8UmVzdWx0UGFpcjxGdW5j
dGlvbj4+IHB1bGxGcm9tU291cmNlcyhTVkdQYXRoU291cmNlJiBmcm9tU291cmNlLCBTVkdQYXRo
U291cmNlJiB0b1NvdXJjZSwgRnVuY3Rpb24mJiBmdW5jdGlvbikKK3sKKyAgICBJbnZva2VSZXN1
bHQ8RnVuY3Rpb24+IGZyb21SZXN1bHQ7CisgICAgaWYgKGZyb21Tb3VyY2UuaGFzTW9yZURhdGEo
KSkgeworICAgICAgICBhdXRvIHBhcnNlZEZyb20gPSBzdGQ6Omludm9rZShmdW5jdGlvbiwgZnJv
bVNvdXJjZSk7CisgICAgICAgIGlmICghcGFyc2VkRnJvbSkKKyAgICAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CisgICAgICAgIGZyb21SZXN1bHQgPSBXVEZNb3ZlKCpwYXJzZWRGcm9tKTsK
KyAgICB9CisKKyAgICBhdXRvIHBhcnNlZFRvID0gc3RkOjppbnZva2UoZnVuY3Rpb24sIHRvU291
cmNlKTsKKyAgICBpZiAoIXBhcnNlZFRvKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
CisgICAgcmV0dXJuIFJlc3VsdFBhaXI8RnVuY3Rpb24+IHsgV1RGTW92ZShmcm9tUmVzdWx0KSwg
V1RGTW92ZSgqcGFyc2VkVG8pIH07Cit9CisKIGJvb2wgU1ZHUGF0aEJsZW5kZXI6OmJsZW5kTW92
ZVRvU2VnbWVudChmbG9hdCBwcm9ncmVzcykKIHsKLSAgICBGbG9hdFBvaW50IGZyb21UYXJnZXRQ
b2ludDsKLSAgICBGbG9hdFBvaW50IHRvVGFyZ2V0UG9pbnQ7Ci0gICAgaWYgKChtX2Zyb21Tb3Vy
Y2UuaGFzTW9yZURhdGEoKSAmJiAhbV9mcm9tU291cmNlLnBhcnNlTW92ZVRvU2VnbWVudChmcm9t
VGFyZ2V0UG9pbnQpKQotICAgICAgICB8fCAhbV90b1NvdXJjZS5wYXJzZU1vdmVUb1NlZ21lbnQo
dG9UYXJnZXRQb2ludCkpCisgICAgYXV0byByZXN1bHQgPSBwdWxsRnJvbVNvdXJjZXMobV9mcm9t
U291cmNlLCBtX3RvU291cmNlLCAmU1ZHUGF0aFNvdXJjZTo6cGFyc2VNb3ZlVG9TZWdtZW50KTsK
KyAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKCFtX2Nv
bnN1bWVyKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIG1fY29uc3VtZXItPm1vdmVUbyhi
bGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tVGFyZ2V0UG9pbnQsIHRvVGFyZ2V0UG9pbnQsIHBy
b2dyZXNzKSwgZmFsc2UsIG1faXNJbkZpcnN0SGFsZk9mQW5pbWF0aW9uID8gbV9mcm9tTW9kZSA6
IG1fdG9Nb2RlKTsKLSAgICBtX2Zyb21DdXJyZW50UG9pbnQgPSBtX2Zyb21Nb2RlID09IEFic29s
dXRlQ29vcmRpbmF0ZXMgPyBmcm9tVGFyZ2V0UG9pbnQgOiBtX2Zyb21DdXJyZW50UG9pbnQgKyBm
cm9tVGFyZ2V0UG9pbnQ7Ci0gICAgbV90b0N1cnJlbnRQb2ludCA9IG1fdG9Nb2RlID09IEFic29s
dXRlQ29vcmRpbmF0ZXMgPyB0b1RhcmdldFBvaW50IDogbV90b0N1cnJlbnRQb2ludCArIHRvVGFy
Z2V0UG9pbnQ7CisgICAgYXV0byBbZnJvbSwgdG9dID0gKnJlc3VsdDsKKworICAgIG1fY29uc3Vt
ZXItPm1vdmVUbyhibGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tLnRhcmdldFBvaW50LCB0by50
YXJnZXRQb2ludCwgcHJvZ3Jlc3MpLCBmYWxzZSwgbV9pc0luRmlyc3RIYWxmT2ZBbmltYXRpb24g
PyBtX2Zyb21Nb2RlIDogbV90b01vZGUpOworICAgIG1fZnJvbUN1cnJlbnRQb2ludCA9IG1fZnJv
bU1vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IGZyb20udGFyZ2V0UG9pbnQgOiBtX2Zyb21D
dXJyZW50UG9pbnQgKyBmcm9tLnRhcmdldFBvaW50OworICAgIG1fdG9DdXJyZW50UG9pbnQgPSBt
X3RvTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gdG8udGFyZ2V0UG9pbnQgOiBtX3RvQ3Vy
cmVudFBvaW50ICsgdG8udGFyZ2V0UG9pbnQ7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wg
U1ZHUGF0aEJsZW5kZXI6OmJsZW5kTGluZVRvU2VnbWVudChmbG9hdCBwcm9ncmVzcykKIHsKLSAg
ICBGbG9hdFBvaW50IGZyb21UYXJnZXRQb2ludDsKLSAgICBGbG9hdFBvaW50IHRvVGFyZ2V0UG9p
bnQ7Ci0gICAgaWYgKChtX2Zyb21Tb3VyY2UuaGFzTW9yZURhdGEoKSAmJiAhbV9mcm9tU291cmNl
LnBhcnNlTGluZVRvU2VnbWVudChmcm9tVGFyZ2V0UG9pbnQpKQotICAgICAgICB8fCAhbV90b1Nv
dXJjZS5wYXJzZUxpbmVUb1NlZ21lbnQodG9UYXJnZXRQb2ludCkpCisgICAgYXV0byByZXN1bHQg
PSBwdWxsRnJvbVNvdXJjZXMobV9mcm9tU291cmNlLCBtX3RvU291cmNlLCAmU1ZHUGF0aFNvdXJj
ZTo6cGFyc2VMaW5lVG9TZWdtZW50KTsKKyAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgaWYgKCFtX2NvbnN1bWVyKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAot
ICAgIG1fY29uc3VtZXItPmxpbmVUbyhibGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tVGFyZ2V0
UG9pbnQsIHRvVGFyZ2V0UG9pbnQsIHByb2dyZXNzKSwgbV9pc0luRmlyc3RIYWxmT2ZBbmltYXRp
b24gPyBtX2Zyb21Nb2RlIDogbV90b01vZGUpOwotICAgIG1fZnJvbUN1cnJlbnRQb2ludCA9IG1f
ZnJvbU1vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IGZyb21UYXJnZXRQb2ludCA6IG1fZnJv
bUN1cnJlbnRQb2ludCArIGZyb21UYXJnZXRQb2ludDsKLSAgICBtX3RvQ3VycmVudFBvaW50ID0g
bV90b01vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IHRvVGFyZ2V0UG9pbnQgOiBtX3RvQ3Vy
cmVudFBvaW50ICsgdG9UYXJnZXRQb2ludDsKKyAgICBhdXRvIFtmcm9tLCB0b10gPSAqcmVzdWx0
OworCisgICAgbV9jb25zdW1lci0+bGluZVRvKGJsZW5kQW5pbWF0ZWRGbG9hdFBvaW50KGZyb20u
dGFyZ2V0UG9pbnQsIHRvLnRhcmdldFBvaW50LCBwcm9ncmVzcyksIG1faXNJbkZpcnN0SGFsZk9m
QW5pbWF0aW9uID8gbV9mcm9tTW9kZSA6IG1fdG9Nb2RlKTsKKyAgICBtX2Zyb21DdXJyZW50UG9p
bnQgPSBtX2Zyb21Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyBmcm9tLnRhcmdldFBvaW50
IDogbV9mcm9tQ3VycmVudFBvaW50ICsgZnJvbS50YXJnZXRQb2ludDsKKyAgICBtX3RvQ3VycmVu
dFBvaW50ID0gbV90b01vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IHRvLnRhcmdldFBvaW50
IDogbV90b0N1cnJlbnRQb2ludCArIHRvLnRhcmdldFBvaW50OwogICAgIHJldHVybiB0cnVlOwog
fQogCiBib29sIFNWR1BhdGhCbGVuZGVyOjpibGVuZExpbmVUb0hvcml6b250YWxTZWdtZW50KGZs
b2F0IHByb2dyZXNzKQogewotICAgIGZsb2F0IGZyb21YID0gMDsKLSAgICBmbG9hdCB0b1ggPSAw
OwotICAgIGlmICgobV9mcm9tU291cmNlLmhhc01vcmVEYXRhKCkgJiYgIW1fZnJvbVNvdXJjZS5w
YXJzZUxpbmVUb0hvcml6b250YWxTZWdtZW50KGZyb21YKSkKLSAgICAgICAgfHwgIW1fdG9Tb3Vy
Y2UucGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudCh0b1gpKQorICAgIGF1dG8gcmVzdWx0ID0g
cHVsbEZyb21Tb3VyY2VzKG1fZnJvbVNvdXJjZSwgbV90b1NvdXJjZSwgJlNWR1BhdGhTb3VyY2U6
OnBhcnNlTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQpOworICAgIGlmICghcmVzdWx0KQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoIW1fY29uc3VtZXIpCiAgICAgICAgIHJldHVybiB0
cnVlOwogCi0gICAgbV9jb25zdW1lci0+bGluZVRvSG9yaXpvbnRhbChibGVuZEFuaW1hdGVkRGlt
ZW5zb25hbEZsb2F0KGZyb21YLCB0b1gsIEJsZW5kSG9yaXpvbnRhbCwgcHJvZ3Jlc3MpLCBtX2lz
SW5GaXJzdEhhbGZPZkFuaW1hdGlvbiA/IG1fZnJvbU1vZGUgOiBtX3RvTW9kZSk7Ci0gICAgbV9m
cm9tQ3VycmVudFBvaW50LnNldFgobV9mcm9tTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8g
ZnJvbVggOiBtX2Zyb21DdXJyZW50UG9pbnQueCgpICsgZnJvbVgpOwotICAgIG1fdG9DdXJyZW50
UG9pbnQuc2V0WChtX3RvTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gdG9YIDogbV90b0N1
cnJlbnRQb2ludC54KCkgKyB0b1gpOworICAgIGF1dG8gW2Zyb20sIHRvXSA9ICpyZXN1bHQ7CisK
KyAgICBtX2NvbnN1bWVyLT5saW5lVG9Ib3Jpem9udGFsKGJsZW5kQW5pbWF0ZWREaW1lbnNvbmFs
RmxvYXQoZnJvbS54LCB0by54LCBCbGVuZEhvcml6b250YWwsIHByb2dyZXNzKSwgbV9pc0luRmly
c3RIYWxmT2ZBbmltYXRpb24gPyBtX2Zyb21Nb2RlIDogbV90b01vZGUpOworICAgIG1fZnJvbUN1
cnJlbnRQb2ludC5zZXRYKG1fZnJvbU1vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IGZyb20u
eCA6IG1fZnJvbUN1cnJlbnRQb2ludC54KCkgKyBmcm9tLngpOworICAgIG1fdG9DdXJyZW50UG9p
bnQuc2V0WChtX3RvTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gdG8ueCA6IG1fdG9DdXJy
ZW50UG9pbnQueCgpICsgdG8ueCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgU1ZHUGF0
aEJsZW5kZXI6OmJsZW5kTGluZVRvVmVydGljYWxTZWdtZW50KGZsb2F0IHByb2dyZXNzKQogewot
ICAgIGZsb2F0IGZyb21ZID0gMDsKLSAgICBmbG9hdCB0b1kgPSAwOwotICAgIGlmICgobV9mcm9t
U291cmNlLmhhc01vcmVEYXRhKCkgJiYgIW1fZnJvbVNvdXJjZS5wYXJzZUxpbmVUb1ZlcnRpY2Fs
U2VnbWVudChmcm9tWSkpCi0gICAgICAgIHx8ICFtX3RvU291cmNlLnBhcnNlTGluZVRvVmVydGlj
YWxTZWdtZW50KHRvWSkpCisgICAgYXV0byByZXN1bHQgPSBwdWxsRnJvbVNvdXJjZXMobV9mcm9t
U291cmNlLCBtX3RvU291cmNlLCAmU1ZHUGF0aFNvdXJjZTo6cGFyc2VMaW5lVG9WZXJ0aWNhbFNl
Z21lbnQpOworICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBp
ZiAoIW1fY29uc3VtZXIpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgbV9jb25zdW1lci0+
bGluZVRvVmVydGljYWwoYmxlbmRBbmltYXRlZERpbWVuc29uYWxGbG9hdChmcm9tWSwgdG9ZLCBC
bGVuZFZlcnRpY2FsLCBwcm9ncmVzcyksIG1faXNJbkZpcnN0SGFsZk9mQW5pbWF0aW9uID8gbV9m
cm9tTW9kZSA6IG1fdG9Nb2RlKTsKLSAgICBtX2Zyb21DdXJyZW50UG9pbnQuc2V0WShtX2Zyb21N
b2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyBmcm9tWSA6IG1fZnJvbUN1cnJlbnRQb2ludC55
KCkgKyBmcm9tWSk7Ci0gICAgbV90b0N1cnJlbnRQb2ludC5zZXRZKG1fdG9Nb2RlID09IEFic29s
dXRlQ29vcmRpbmF0ZXMgPyB0b1kgOiBtX3RvQ3VycmVudFBvaW50LnkoKSArIHRvWSk7CisgICAg
YXV0byBbZnJvbSwgdG9dID0gKnJlc3VsdDsKKworICAgIG1fY29uc3VtZXItPmxpbmVUb1ZlcnRp
Y2FsKGJsZW5kQW5pbWF0ZWREaW1lbnNvbmFsRmxvYXQoZnJvbS55LCB0by55LCBCbGVuZFZlcnRp
Y2FsLCBwcm9ncmVzcyksIG1faXNJbkZpcnN0SGFsZk9mQW5pbWF0aW9uID8gbV9mcm9tTW9kZSA6
IG1fdG9Nb2RlKTsKKyAgICBtX2Zyb21DdXJyZW50UG9pbnQuc2V0WShtX2Zyb21Nb2RlID09IEFi
c29sdXRlQ29vcmRpbmF0ZXMgPyBmcm9tLnkgOiBtX2Zyb21DdXJyZW50UG9pbnQueSgpICsgZnJv
bS55KTsKKyAgICBtX3RvQ3VycmVudFBvaW50LnNldFkobV90b01vZGUgPT0gQWJzb2x1dGVDb29y
ZGluYXRlcyA/IHRvLnkgOiBtX3RvQ3VycmVudFBvaW50LnkoKSArIHRvLnkpOwogICAgIHJldHVy
biB0cnVlOwogfQogCiBib29sIFNWR1BhdGhCbGVuZGVyOjpibGVuZEN1cnZlVG9DdWJpY1NlZ21l
bnQoZmxvYXQgcHJvZ3Jlc3MpCiB7Ci0gICAgRmxvYXRQb2ludCBmcm9tVGFyZ2V0UG9pbnQ7Ci0g
ICAgRmxvYXRQb2ludCBmcm9tUG9pbnQxOwotICAgIEZsb2F0UG9pbnQgZnJvbVBvaW50MjsKLSAg
ICBGbG9hdFBvaW50IHRvVGFyZ2V0UG9pbnQ7Ci0gICAgRmxvYXRQb2ludCB0b1BvaW50MTsKLSAg
ICBGbG9hdFBvaW50IHRvUG9pbnQyOwotICAgIGlmICgobV9mcm9tU291cmNlLmhhc01vcmVEYXRh
KCkgJiYgIW1fZnJvbVNvdXJjZS5wYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQoZnJvbVBvaW50MSwg
ZnJvbVBvaW50MiwgZnJvbVRhcmdldFBvaW50KSkKLSAgICAgICAgfHwgIW1fdG9Tb3VyY2UucGFy
c2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KHRvUG9pbnQxLCB0b1BvaW50MiwgdG9UYXJnZXRQb2ludCkp
CisgICAgYXV0byByZXN1bHQgPSBwdWxsRnJvbVNvdXJjZXMobV9mcm9tU291cmNlLCBtX3RvU291
cmNlLCAmU1ZHUGF0aFNvdXJjZTo6cGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KTsKKyAgICBpZiAo
IXJlc3VsdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKCFtX2NvbnN1bWVyKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIG1fY29uc3VtZXItPmN1cnZlVG9DdWJpYyhibGVu
ZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tUG9pbnQxLCB0b1BvaW50MSwgcHJvZ3Jlc3MpLAotICAg
ICAgICBibGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tUG9pbnQyLCB0b1BvaW50MiwgcHJvZ3Jl
c3MpLAotICAgICAgICBibGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tVGFyZ2V0UG9pbnQsIHRv
VGFyZ2V0UG9pbnQsIHByb2dyZXNzKSwKKyAgICBhdXRvIFtmcm9tLCB0b10gPSAqcmVzdWx0Owor
CisgICAgbV9jb25zdW1lci0+Y3VydmVUb0N1YmljKGJsZW5kQW5pbWF0ZWRGbG9hdFBvaW50KGZy
b20ucG9pbnQxLCB0by5wb2ludDEsIHByb2dyZXNzKSwKKyAgICAgICAgYmxlbmRBbmltYXRlZEZs
b2F0UG9pbnQoZnJvbS5wb2ludDIsIHRvLnBvaW50MiwgcHJvZ3Jlc3MpLAorICAgICAgICBibGVu
ZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tLnRhcmdldFBvaW50LCB0by50YXJnZXRQb2ludCwgcHJv
Z3Jlc3MpLAogICAgICAgICBtX2lzSW5GaXJzdEhhbGZPZkFuaW1hdGlvbiA/IG1fZnJvbU1vZGUg
OiBtX3RvTW9kZSk7Ci0gICAgbV9mcm9tQ3VycmVudFBvaW50ID0gbV9mcm9tTW9kZSA9PSBBYnNv
bHV0ZUNvb3JkaW5hdGVzID8gZnJvbVRhcmdldFBvaW50IDogbV9mcm9tQ3VycmVudFBvaW50ICsg
ZnJvbVRhcmdldFBvaW50OwotICAgIG1fdG9DdXJyZW50UG9pbnQgPSBtX3RvTW9kZSA9PSBBYnNv
bHV0ZUNvb3JkaW5hdGVzID8gdG9UYXJnZXRQb2ludCA6IG1fdG9DdXJyZW50UG9pbnQgKyB0b1Rh
cmdldFBvaW50OworICAgIG1fZnJvbUN1cnJlbnRQb2ludCA9IG1fZnJvbU1vZGUgPT0gQWJzb2x1
dGVDb29yZGluYXRlcyA/IGZyb20udGFyZ2V0UG9pbnQgOiBtX2Zyb21DdXJyZW50UG9pbnQgKyBm
cm9tLnRhcmdldFBvaW50OworICAgIG1fdG9DdXJyZW50UG9pbnQgPSBtX3RvTW9kZSA9PSBBYnNv
bHV0ZUNvb3JkaW5hdGVzID8gdG8udGFyZ2V0UG9pbnQgOiBtX3RvQ3VycmVudFBvaW50ICsgdG8u
dGFyZ2V0UG9pbnQ7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgU1ZHUGF0aEJsZW5kZXI6
OmJsZW5kQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudChmbG9hdCBwcm9ncmVzcykKIHsKLSAgICBG
bG9hdFBvaW50IGZyb21UYXJnZXRQb2ludDsKLSAgICBGbG9hdFBvaW50IGZyb21Qb2ludDI7Ci0g
ICAgRmxvYXRQb2ludCB0b1RhcmdldFBvaW50OwotICAgIEZsb2F0UG9pbnQgdG9Qb2ludDI7Ci0g
ICAgaWYgKChtX2Zyb21Tb3VyY2UuaGFzTW9yZURhdGEoKSAmJiAhbV9mcm9tU291cmNlLnBhcnNl
Q3VydmVUb0N1YmljU21vb3RoU2VnbWVudChmcm9tUG9pbnQyLCBmcm9tVGFyZ2V0UG9pbnQpKQot
ICAgICAgICB8fCAhbV90b1NvdXJjZS5wYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQodG9Q
b2ludDIsIHRvVGFyZ2V0UG9pbnQpKQorICAgIGF1dG8gcmVzdWx0ID0gcHVsbEZyb21Tb3VyY2Vz
KG1fZnJvbVNvdXJjZSwgbV90b1NvdXJjZSwgJlNWR1BhdGhTb3VyY2U6OnBhcnNlQ3VydmVUb0N1
YmljU21vb3RoU2VnbWVudCk7CisgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIGlmICghbV9jb25zdW1lcikKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBt
X2NvbnN1bWVyLT5jdXJ2ZVRvQ3ViaWNTbW9vdGgoYmxlbmRBbmltYXRlZEZsb2F0UG9pbnQoZnJv
bVBvaW50MiwgdG9Qb2ludDIsIHByb2dyZXNzKSwKLSAgICAgICAgYmxlbmRBbmltYXRlZEZsb2F0
UG9pbnQoZnJvbVRhcmdldFBvaW50LCB0b1RhcmdldFBvaW50LCBwcm9ncmVzcyksCisgICAgYXV0
byBbZnJvbSwgdG9dID0gKnJlc3VsdDsKKworICAgIG1fY29uc3VtZXItPmN1cnZlVG9DdWJpY1Nt
b290aChibGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tLnBvaW50MiwgdG8ucG9pbnQyLCBwcm9n
cmVzcyksCisgICAgICAgIGJsZW5kQW5pbWF0ZWRGbG9hdFBvaW50KGZyb20udGFyZ2V0UG9pbnQs
IHRvLnRhcmdldFBvaW50LCBwcm9ncmVzcyksCiAgICAgICAgIG1faXNJbkZpcnN0SGFsZk9mQW5p
bWF0aW9uID8gbV9mcm9tTW9kZSA6IG1fdG9Nb2RlKTsKLSAgICBtX2Zyb21DdXJyZW50UG9pbnQg
PSBtX2Zyb21Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyBmcm9tVGFyZ2V0UG9pbnQgOiBt
X2Zyb21DdXJyZW50UG9pbnQgKyBmcm9tVGFyZ2V0UG9pbnQ7Ci0gICAgbV90b0N1cnJlbnRQb2lu
dCA9IG1fdG9Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyB0b1RhcmdldFBvaW50IDogbV90
b0N1cnJlbnRQb2ludCArIHRvVGFyZ2V0UG9pbnQ7CisgICAgbV9mcm9tQ3VycmVudFBvaW50ID0g
bV9mcm9tTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gZnJvbS50YXJnZXRQb2ludCA6IG1f
ZnJvbUN1cnJlbnRQb2ludCArIGZyb20udGFyZ2V0UG9pbnQ7CisgICAgbV90b0N1cnJlbnRQb2lu
dCA9IG1fdG9Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyB0by50YXJnZXRQb2ludCA6IG1f
dG9DdXJyZW50UG9pbnQgKyB0by50YXJnZXRQb2ludDsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAog
Ym9vbCBTVkdQYXRoQmxlbmRlcjo6YmxlbmRDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudChmbG9hdCBw
cm9ncmVzcykKIHsKLSAgICBGbG9hdFBvaW50IGZyb21UYXJnZXRQb2ludDsKLSAgICBGbG9hdFBv
aW50IGZyb21Qb2ludDE7Ci0gICAgRmxvYXRQb2ludCB0b1RhcmdldFBvaW50OwotICAgIEZsb2F0
UG9pbnQgdG9Qb2ludDE7Ci0gICAgaWYgKChtX2Zyb21Tb3VyY2UuaGFzTW9yZURhdGEoKSAmJiAh
bV9mcm9tU291cmNlLnBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQoZnJvbVBvaW50MSwgZnJv
bVRhcmdldFBvaW50KSkKLSAgICAgICAgfHwgIW1fdG9Tb3VyY2UucGFyc2VDdXJ2ZVRvUXVhZHJh
dGljU2VnbWVudCh0b1BvaW50MSwgdG9UYXJnZXRQb2ludCkpCisgICAgYXV0byByZXN1bHQgPSBw
dWxsRnJvbVNvdXJjZXMobV9mcm9tU291cmNlLCBtX3RvU291cmNlLCAmU1ZHUGF0aFNvdXJjZTo6
cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCk7CisgICAgaWYgKCFyZXN1bHQpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIGlmICghbV9jb25zdW1lcikKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAKLSAgICBtX2NvbnN1bWVyLT5jdXJ2ZVRvUXVhZHJhdGljKGJsZW5kQW5pbWF0ZWRGbG9h
dFBvaW50KGZyb21Qb2ludDEsIHRvUG9pbnQxLCBwcm9ncmVzcyksCi0gICAgICAgIGJsZW5kQW5p
bWF0ZWRGbG9hdFBvaW50KGZyb21UYXJnZXRQb2ludCwgdG9UYXJnZXRQb2ludCwgcHJvZ3Jlc3Mp
LAorICAgIGF1dG8gW2Zyb20sIHRvXSA9ICpyZXN1bHQ7CisKKyAgICBtX2NvbnN1bWVyLT5jdXJ2
ZVRvUXVhZHJhdGljKGJsZW5kQW5pbWF0ZWRGbG9hdFBvaW50KGZyb20ucG9pbnQxLCB0by5wb2lu
dDEsIHByb2dyZXNzKSwKKyAgICAgICAgYmxlbmRBbmltYXRlZEZsb2F0UG9pbnQoZnJvbS50YXJn
ZXRQb2ludCwgdG8udGFyZ2V0UG9pbnQsIHByb2dyZXNzKSwKICAgICAgICAgbV9pc0luRmlyc3RI
YWxmT2ZBbmltYXRpb24gPyBtX2Zyb21Nb2RlIDogbV90b01vZGUpOwotICAgIG1fZnJvbUN1cnJl
bnRQb2ludCA9IG1fZnJvbU1vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IGZyb21UYXJnZXRQ
b2ludCA6IG1fZnJvbUN1cnJlbnRQb2ludCArIGZyb21UYXJnZXRQb2ludDsKLSAgICBtX3RvQ3Vy
cmVudFBvaW50ID0gbV90b01vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IHRvVGFyZ2V0UG9p
bnQgOiBtX3RvQ3VycmVudFBvaW50ICsgdG9UYXJnZXRQb2ludDsKKyAgICBtX2Zyb21DdXJyZW50
UG9pbnQgPSBtX2Zyb21Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyBmcm9tLnRhcmdldFBv
aW50IDogbV9mcm9tQ3VycmVudFBvaW50ICsgZnJvbS50YXJnZXRQb2ludDsKKyAgICBtX3RvQ3Vy
cmVudFBvaW50ID0gbV90b01vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IHRvLnRhcmdldFBv
aW50IDogbV90b0N1cnJlbnRQb2ludCArIHRvLnRhcmdldFBvaW50OwogICAgIHJldHVybiB0cnVl
OwogfQogCiBib29sIFNWR1BhdGhCbGVuZGVyOjpibGVuZEN1cnZlVG9RdWFkcmF0aWNTbW9vdGhT
ZWdtZW50KGZsb2F0IHByb2dyZXNzKQogewotICAgIEZsb2F0UG9pbnQgZnJvbVRhcmdldFBvaW50
OwotICAgIEZsb2F0UG9pbnQgdG9UYXJnZXRQb2ludDsKLSAgICBpZiAoKG1fZnJvbVNvdXJjZS5o
YXNNb3JlRGF0YSgpICYmICFtX2Zyb21Tb3VyY2UucGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3Ro
U2VnbWVudChmcm9tVGFyZ2V0UG9pbnQpKQotICAgICAgICB8fCAhbV90b1NvdXJjZS5wYXJzZUN1
cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KHRvVGFyZ2V0UG9pbnQpKQorICAgIGF1dG8gcmVz
dWx0ID0gcHVsbEZyb21Tb3VyY2VzKG1fZnJvbVNvdXJjZSwgbV90b1NvdXJjZSwgJlNWR1BhdGhT
b3VyY2U6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQpOworICAgIGlmICghcmVz
dWx0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoIW1fY29uc3VtZXIpCiAgICAg
ICAgIHJldHVybiB0cnVlOwogCi0gICAgbV9jb25zdW1lci0+Y3VydmVUb1F1YWRyYXRpY1Ntb290
aChibGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tVGFyZ2V0UG9pbnQsIHRvVGFyZ2V0UG9pbnQs
IHByb2dyZXNzKSwgbV9pc0luRmlyc3RIYWxmT2ZBbmltYXRpb24gPyBtX2Zyb21Nb2RlIDogbV90
b01vZGUpOwotICAgIG1fZnJvbUN1cnJlbnRQb2ludCA9IG1fZnJvbU1vZGUgPT0gQWJzb2x1dGVD
b29yZGluYXRlcyA/IGZyb21UYXJnZXRQb2ludCA6IG1fZnJvbUN1cnJlbnRQb2ludCArIGZyb21U
YXJnZXRQb2ludDsKLSAgICBtX3RvQ3VycmVudFBvaW50ID0gbV90b01vZGUgPT0gQWJzb2x1dGVD
b29yZGluYXRlcyA/IHRvVGFyZ2V0UG9pbnQgOiBtX3RvQ3VycmVudFBvaW50ICsgdG9UYXJnZXRQ
b2ludDsKKyAgICBhdXRvIFtmcm9tLCB0b10gPSAqcmVzdWx0OworCisgICAgbV9jb25zdW1lci0+
Y3VydmVUb1F1YWRyYXRpY1Ntb290aChibGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tLnRhcmdl
dFBvaW50LCB0by50YXJnZXRQb2ludCwgcHJvZ3Jlc3MpLCBtX2lzSW5GaXJzdEhhbGZPZkFuaW1h
dGlvbiA/IG1fZnJvbU1vZGUgOiBtX3RvTW9kZSk7CisgICAgbV9mcm9tQ3VycmVudFBvaW50ID0g
bV9mcm9tTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gZnJvbS50YXJnZXRQb2ludCA6IG1f
ZnJvbUN1cnJlbnRQb2ludCArIGZyb20udGFyZ2V0UG9pbnQ7CisgICAgbV90b0N1cnJlbnRQb2lu
dCA9IG1fdG9Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyB0by50YXJnZXRQb2ludCA6IG1f
dG9DdXJyZW50UG9pbnQgKyB0by50YXJnZXRQb2ludDsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAog
Ym9vbCBTVkdQYXRoQmxlbmRlcjo6YmxlbmRBcmNUb1NlZ21lbnQoZmxvYXQgcHJvZ3Jlc3MpCiB7
Ci0gICAgZmxvYXQgZnJvbVJ4ID0gMDsKLSAgICBmbG9hdCBmcm9tUnkgPSAwOwotICAgIGZsb2F0
IGZyb21BbmdsZSA9IDA7Ci0gICAgYm9vbCBmcm9tTGFyZ2VBcmMgPSBmYWxzZTsKLSAgICBib29s
IGZyb21Td2VlcCA9IGZhbHNlOwotICAgIEZsb2F0UG9pbnQgZnJvbVRhcmdldFBvaW50OwotICAg
IGZsb2F0IHRvUnggPSAwOwotICAgIGZsb2F0IHRvUnkgPSAwOwotICAgIGZsb2F0IHRvQW5nbGUg
PSAwOwotICAgIGJvb2wgdG9MYXJnZUFyYyA9IGZhbHNlOwotICAgIGJvb2wgdG9Td2VlcCA9IGZh
bHNlOwotICAgIEZsb2F0UG9pbnQgdG9UYXJnZXRQb2ludDsKLSAgICBpZiAoKG1fZnJvbVNvdXJj
ZS5oYXNNb3JlRGF0YSgpICYmICFtX2Zyb21Tb3VyY2UucGFyc2VBcmNUb1NlZ21lbnQoZnJvbVJ4
LCBmcm9tUnksIGZyb21BbmdsZSwgZnJvbUxhcmdlQXJjLCBmcm9tU3dlZXAsIGZyb21UYXJnZXRQ
b2ludCkpCi0gICAgICAgIHx8ICFtX3RvU291cmNlLnBhcnNlQXJjVG9TZWdtZW50KHRvUngsIHRv
UnksIHRvQW5nbGUsIHRvTGFyZ2VBcmMsIHRvU3dlZXAsIHRvVGFyZ2V0UG9pbnQpKQorICAgIGF1
dG8gcmVzdWx0ID0gcHVsbEZyb21Tb3VyY2VzKG1fZnJvbVNvdXJjZSwgbV90b1NvdXJjZSwgJlNW
R1BhdGhTb3VyY2U6OnBhcnNlQXJjVG9TZWdtZW50KTsKKyAgICBpZiAoIXJlc3VsdCkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKCFtX2NvbnN1bWVyKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKIAorICAgIGF1dG8gW2Zyb20sIHRvXSA9ICpyZXN1bHQ7CisKICAgICBpZiAobV9hZGRU
eXBlc0NvdW50KSB7CiAgICAgICAgIEFTU0VSVChtX2Zyb21Nb2RlID09IG1fdG9Nb2RlKTsKLSAg
ICAgICAgRmxvYXRQb2ludCBzY2FsZWRUb1RhcmdldFBvaW50ID0gdG9UYXJnZXRQb2ludDsKKyAg
ICAgICAgYXV0byBzY2FsZWRUb1RhcmdldFBvaW50ID0gdG8udGFyZ2V0UG9pbnQ7CiAgICAgICAg
IHNjYWxlZFRvVGFyZ2V0UG9pbnQuc2NhbGUobV9hZGRUeXBlc0NvdW50KTsKLSAgICAgICAgbV9j
b25zdW1lci0+YXJjVG8oZnJvbVJ4ICsgdG9SeCAqIG1fYWRkVHlwZXNDb3VudCwKLSAgICAgICAg
ICAgIGZyb21SeSArIHRvUnkgKiBtX2FkZFR5cGVzQ291bnQsCi0gICAgICAgICAgICBmcm9tQW5n
bGUgKyB0b0FuZ2xlICogbV9hZGRUeXBlc0NvdW50LAotICAgICAgICAgICAgZnJvbUxhcmdlQXJj
IHx8IHRvTGFyZ2VBcmMsCi0gICAgICAgICAgICBmcm9tU3dlZXAgfHwgdG9Td2VlcCwKLSAgICAg
ICAgICAgIGZyb21UYXJnZXRQb2ludCArIHNjYWxlZFRvVGFyZ2V0UG9pbnQsCisgICAgICAgIG1f
Y29uc3VtZXItPmFyY1RvKGZyb20ucnggKyB0by5yeCAqIG1fYWRkVHlwZXNDb3VudCwKKyAgICAg
ICAgICAgIGZyb20ucnkgKyB0by5yeSAqIG1fYWRkVHlwZXNDb3VudCwKKyAgICAgICAgICAgIGZy
b20uYW5nbGUgKyB0by5hbmdsZSAqIG1fYWRkVHlwZXNDb3VudCwKKyAgICAgICAgICAgIGZyb20u
bGFyZ2VBcmMgfHwgdG8ubGFyZ2VBcmMsCisgICAgICAgICAgICBmcm9tLnN3ZWVwIHx8IHRvLnN3
ZWVwLAorICAgICAgICAgICAgZnJvbS50YXJnZXRQb2ludCArIHNjYWxlZFRvVGFyZ2V0UG9pbnQs
CiAgICAgICAgICAgICBtX2Zyb21Nb2RlKTsKICAgICB9IGVsc2UgewotICAgICAgICBtX2NvbnN1
bWVyLT5hcmNUbyhibGVuZChmcm9tUngsIHRvUngsIHByb2dyZXNzKSwKLSAgICAgICAgICAgIGJs
ZW5kKGZyb21SeSwgdG9SeSwgcHJvZ3Jlc3MpLAotICAgICAgICAgICAgYmxlbmQoZnJvbUFuZ2xl
LCB0b0FuZ2xlLCBwcm9ncmVzcyksCi0gICAgICAgICAgICBtX2lzSW5GaXJzdEhhbGZPZkFuaW1h
dGlvbiA/IGZyb21MYXJnZUFyYyA6IHRvTGFyZ2VBcmMsCi0gICAgICAgICAgICBtX2lzSW5GaXJz
dEhhbGZPZkFuaW1hdGlvbiA/IGZyb21Td2VlcCA6IHRvU3dlZXAsCi0gICAgICAgICAgICBibGVu
ZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tVGFyZ2V0UG9pbnQsIHRvVGFyZ2V0UG9pbnQsIHByb2dy
ZXNzKSwKKyAgICAgICAgbV9jb25zdW1lci0+YXJjVG8oYmxlbmQoZnJvbS5yeCwgdG8ucngsIHBy
b2dyZXNzKSwKKyAgICAgICAgICAgIGJsZW5kKGZyb20ucnksIHRvLnJ5LCBwcm9ncmVzcyksCisg
ICAgICAgICAgICBibGVuZChmcm9tLmFuZ2xlLCB0by5hbmdsZSwgcHJvZ3Jlc3MpLAorICAgICAg
ICAgICAgbV9pc0luRmlyc3RIYWxmT2ZBbmltYXRpb24gPyBmcm9tLmxhcmdlQXJjIDogdG8ubGFy
Z2VBcmMsCisgICAgICAgICAgICBtX2lzSW5GaXJzdEhhbGZPZkFuaW1hdGlvbiA/IGZyb20uc3dl
ZXAgOiB0by5zd2VlcCwKKyAgICAgICAgICAgIGJsZW5kQW5pbWF0ZWRGbG9hdFBvaW50KGZyb20u
dGFyZ2V0UG9pbnQsIHRvLnRhcmdldFBvaW50LCBwcm9ncmVzcyksCiAgICAgICAgICAgICBtX2lz
SW5GaXJzdEhhbGZPZkFuaW1hdGlvbiA/IG1fZnJvbU1vZGUgOiBtX3RvTW9kZSk7CiAgICAgfQot
ICAgIG1fZnJvbUN1cnJlbnRQb2ludCA9IG1fZnJvbU1vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRl
cyA/IGZyb21UYXJnZXRQb2ludCA6IG1fZnJvbUN1cnJlbnRQb2ludCArIGZyb21UYXJnZXRQb2lu
dDsKLSAgICBtX3RvQ3VycmVudFBvaW50ID0gbV90b01vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRl
cyA/IHRvVGFyZ2V0UG9pbnQgOiBtX3RvQ3VycmVudFBvaW50ICsgdG9UYXJnZXRQb2ludDsKKyAg
ICBtX2Zyb21DdXJyZW50UG9pbnQgPSBtX2Zyb21Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMg
PyBmcm9tLnRhcmdldFBvaW50IDogbV9mcm9tQ3VycmVudFBvaW50ICsgZnJvbS50YXJnZXRQb2lu
dDsKKyAgICBtX3RvQ3VycmVudFBvaW50ID0gbV90b01vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRl
cyA/IHRvLnRhcmdldFBvaW50IDogbV90b0N1cnJlbnRQb2ludCArIHRvLnRhcmdldFBvaW50Owog
ICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0zNTEsOSArMzUyLDE2IEBAIGJvb2wgU1ZHUGF0aEJs
ZW5kZXI6OmNhbkJsZW5kUGF0aHMoKQogICAgIGJvb2wgZnJvbVNvdXJjZUhhZERhdGEgPSBtX2Zy
b21Tb3VyY2UuaGFzTW9yZURhdGEoKTsKICAgICB3aGlsZSAobV90b1NvdXJjZS5oYXNNb3JlRGF0
YSgpKSB7CiAgICAgICAgIFNWR1BhdGhTZWdUeXBlIGZyb21Db21tYW5kOwotICAgICAgICBTVkdQ
YXRoU2VnVHlwZSB0b0NvbW1hbmQ7Ci0gICAgICAgIGlmICgoZnJvbVNvdXJjZUhhZERhdGEgJiYg
IW1fZnJvbVNvdXJjZS5wYXJzZVNWR1NlZ21lbnRUeXBlKGZyb21Db21tYW5kKSkgfHwgIW1fdG9T
b3VyY2UucGFyc2VTVkdTZWdtZW50VHlwZSh0b0NvbW1hbmQpKQorICAgICAgICBpZiAoZnJvbVNv
dXJjZUhhZERhdGEpIHsKKyAgICAgICAgICAgIGF1dG8gcGFyc2VkRnJvbUNvbW1hbmQgPSBtX2Zy
b21Tb3VyY2UucGFyc2VTVkdTZWdtZW50VHlwZSgpOworICAgICAgICAgICAgaWYgKCFwYXJzZWRG
cm9tQ29tbWFuZCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBm
cm9tQ29tbWFuZCA9ICpwYXJzZWRGcm9tQ29tbWFuZDsKKyAgICAgICAgfQorICAgICAgICBhdXRv
IHBhcnNlZHRvQ29tbWFuZCA9IG1fdG9Tb3VyY2UucGFyc2VTVkdTZWdtZW50VHlwZSgpOworICAg
ICAgICBpZiAoIXBhcnNlZHRvQ29tbWFuZCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgU1ZHUGF0aFNlZ1R5cGUgdG9Db21tYW5kID0gKnBhcnNlZHRvQ29tbWFuZDsKIAogICAg
ICAgICBtX3RvTW9kZSA9IGNvb3JkaW5hdGVNb2RlT2ZDb21tYW5kKHRvQ29tbWFuZCk7CiAgICAg
ICAgIG1fZnJvbU1vZGUgPSBmcm9tU291cmNlSGFkRGF0YSA/IGNvb3JkaW5hdGVNb2RlT2ZDb21t
YW5kKGZyb21Db21tYW5kKSA6IG1fdG9Nb2RlOwpAQCAtNDMzLDkgKzQ0MSwxNiBAQCBib29sIFNW
R1BhdGhCbGVuZGVyOjpibGVuZEFuaW1hdGVkUGF0aChmCiAgICAgYm9vbCBmcm9tU291cmNlSGFk
RGF0YSA9IG1fZnJvbVNvdXJjZS5oYXNNb3JlRGF0YSgpOwogICAgIHdoaWxlIChtX3RvU291cmNl
Lmhhc01vcmVEYXRhKCkpIHsKICAgICAgICAgU1ZHUGF0aFNlZ1R5cGUgZnJvbUNvbW1hbmQ7Ci0g
ICAgICAgIFNWR1BhdGhTZWdUeXBlIHRvQ29tbWFuZDsKLSAgICAgICAgaWYgKChmcm9tU291cmNl
SGFkRGF0YSAmJiAhbV9mcm9tU291cmNlLnBhcnNlU1ZHU2VnbWVudFR5cGUoZnJvbUNvbW1hbmQp
KSB8fCAhbV90b1NvdXJjZS5wYXJzZVNWR1NlZ21lbnRUeXBlKHRvQ29tbWFuZCkpCisgICAgICAg
IGlmIChmcm9tU291cmNlSGFkRGF0YSkgeworICAgICAgICAgICAgYXV0byBwYXJzZWRGcm9tQ29t
bWFuZCA9IG1fZnJvbVNvdXJjZS5wYXJzZVNWR1NlZ21lbnRUeXBlKCk7CisgICAgICAgICAgICBp
ZiAoIXBhcnNlZEZyb21Db21tYW5kKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIGZyb21Db21tYW5kID0gKnBhcnNlZEZyb21Db21tYW5kOworICAgICAgICB9Cisg
ICAgICAgIGF1dG8gcGFyc2VkVG9Db21tYW5kID0gbV90b1NvdXJjZS5wYXJzZVNWR1NlZ21lbnRU
eXBlKCk7CisgICAgICAgIGlmICghcGFyc2VkVG9Db21tYW5kKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICBTVkdQYXRoU2VnVHlwZSB0b0NvbW1hbmQgPSAqcGFyc2VkVG9Db21t
YW5kOwogCiAgICAgICAgIG1fdG9Nb2RlID0gY29vcmRpbmF0ZU1vZGVPZkNvbW1hbmQodG9Db21t
YW5kKTsKICAgICAgICAgbV9mcm9tTW9kZSA9IGZyb21Tb3VyY2VIYWREYXRhID8gY29vcmRpbmF0
ZU1vZGVPZkNvbW1hbmQoZnJvbUNvbW1hbmQpIDogbV90b01vZGU7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZS5jcHAJKHJldmlzaW9uIDI2MzE3
NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM0LDc4ICszNCw4NiBAQCBib29sIFNWR1BhdGhCeXRlU3RyZWFtU291
cmNlOjpoYXNNb3JlRGF0CiAgICAgcmV0dXJuIG1fc3RyZWFtQ3VycmVudCA8IG1fc3RyZWFtRW5k
OwogfQogCi1ib29sIFNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZVNWR1NlZ21lbnRUeXBl
KFNWR1BhdGhTZWdUeXBlJiBwYXRoU2VnVHlwZSkKK1NWR1BhdGhTZWdUeXBlIFNWR1BhdGhCeXRl
U3RyZWFtU291cmNlOjpuZXh0Q29tbWFuZChTVkdQYXRoU2VnVHlwZSkKIHsKLSAgICBwYXRoU2Vn
VHlwZSA9IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdUeXBlPihyZWFkU1ZHU2VnbWVudFR5cGUoKSk7
Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFNWR1BhdGhTZWdUeXBl
PihyZWFkU1ZHU2VnbWVudFR5cGUoKSk7CiB9CiAKLVNWR1BhdGhTZWdUeXBlIFNWR1BhdGhCeXRl
U3RyZWFtU291cmNlOjpuZXh0Q29tbWFuZChTVkdQYXRoU2VnVHlwZSkKK09wdGlvbmFsPFNWR1Bh
dGhTZWdUeXBlPiBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VTVkdTZWdtZW50VHlwZSgp
CiB7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFNWR1BhdGhTZWdUeXBlPihyZWFkU1ZHU2VnbWVu
dFR5cGUoKSk7CiB9CiAKLWJvb2wgU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlTW92ZVRv
U2VnbWVudChGbG9hdFBvaW50JiB0YXJnZXRQb2ludCkKK09wdGlvbmFsPFNWR1BhdGhTb3VyY2U6
Ok1vdmVUb1NlZ21lbnQ+IFNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZU1vdmVUb1NlZ21l
bnQoKQogewotICAgIHRhcmdldFBvaW50ID0gcmVhZEZsb2F0UG9pbnQoKTsKLSAgICByZXR1cm4g
dHJ1ZTsKKyAgICBNb3ZlVG9TZWdtZW50IHNlZ21lbnQ7CisgICAgc2VnbWVudC50YXJnZXRQb2lu
dCA9IHJlYWRGbG9hdFBvaW50KCk7CisgICAgcmV0dXJuIHNlZ21lbnQ7CiB9CiAKLWJvb2wgU1ZH
UGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlTGluZVRvU2VnbWVudChGbG9hdFBvaW50JiB0YXJn
ZXRQb2ludCkKK09wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkxpbmVUb1NlZ21lbnQ+IFNWR1BhdGhC
eXRlU3RyZWFtU291cmNlOjpwYXJzZUxpbmVUb1NlZ21lbnQoKQogewotICAgIHRhcmdldFBvaW50
ID0gcmVhZEZsb2F0UG9pbnQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBMaW5lVG9TZWdtZW50
IHNlZ21lbnQ7CisgICAgc2VnbWVudC50YXJnZXRQb2ludCA9IHJlYWRGbG9hdFBvaW50KCk7Cisg
ICAgcmV0dXJuIHNlZ21lbnQ7CiB9CiAKLWJvb2wgU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBh
cnNlTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQoZmxvYXQmIHgpCitPcHRpb25hbDxTVkdQYXRoU291
cmNlOjpMaW5lVG9Ib3Jpem9udGFsU2VnbWVudD4gU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBh
cnNlTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQoKQogewotICAgIHggPSByZWFkRmxvYXQoKTsKLSAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBMaW5lVG9Ib3Jpem9udGFsU2VnbWVudCBzZWdtZW50OworICAg
IHNlZ21lbnQueCA9IHJlYWRGbG9hdCgpOworICAgIHJldHVybiBzZWdtZW50OwogfQogCi1ib29s
IFNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZUxpbmVUb1ZlcnRpY2FsU2VnbWVudChmbG9h
dCYgeSkKK09wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkxpbmVUb1ZlcnRpY2FsU2VnbWVudD4gU1ZH
UGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlTGluZVRvVmVydGljYWxTZWdtZW50KCkKIHsKLSAg
ICB5ID0gcmVhZEZsb2F0KCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgTGluZVRvVmVydGljYWxT
ZWdtZW50IHNlZ21lbnQ7CisgICAgc2VnbWVudC55ID0gcmVhZEZsb2F0KCk7CisgICAgcmV0dXJu
IHNlZ21lbnQ7CiB9CiAKLWJvb2wgU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlQ3VydmVU
b0N1YmljU2VnbWVudChGbG9hdFBvaW50JiBwb2ludDEsIEZsb2F0UG9pbnQmIHBvaW50MiwgRmxv
YXRQb2ludCYgdGFyZ2V0UG9pbnQpCitPcHRpb25hbDxTVkdQYXRoU291cmNlOjpDdXJ2ZVRvQ3Vi
aWNTZWdtZW50PiBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VDdXJ2ZVRvQ3ViaWNTZWdt
ZW50KCkKIHsKLSAgICBwb2ludDEgPSByZWFkRmxvYXRQb2ludCgpOwotICAgIHBvaW50MiA9IHJl
YWRGbG9hdFBvaW50KCk7Ci0gICAgdGFyZ2V0UG9pbnQgPSByZWFkRmxvYXRQb2ludCgpOwotICAg
IHJldHVybiB0cnVlOworICAgIEN1cnZlVG9DdWJpY1NlZ21lbnQgc2VnbWVudDsKKyAgICBzZWdt
ZW50LnBvaW50MSA9IHJlYWRGbG9hdFBvaW50KCk7CisgICAgc2VnbWVudC5wb2ludDIgPSByZWFk
RmxvYXRQb2ludCgpOworICAgIHNlZ21lbnQudGFyZ2V0UG9pbnQgPSByZWFkRmxvYXRQb2ludCgp
OworICAgIHJldHVybiBzZWdtZW50OwogfQogCi1ib29sIFNWR1BhdGhCeXRlU3RyZWFtU291cmNl
OjpwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQoRmxvYXRQb2ludCYgcG9pbnQyLCBGbG9h
dFBvaW50JiB0YXJnZXRQb2ludCkKK09wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkN1cnZlVG9DdWJp
Y1Ntb290aFNlZ21lbnQ+IFNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZUN1cnZlVG9DdWJp
Y1Ntb290aFNlZ21lbnQoKQogewotICAgIHBvaW50MiA9IHJlYWRGbG9hdFBvaW50KCk7Ci0gICAg
dGFyZ2V0UG9pbnQgPSByZWFkRmxvYXRQb2ludCgpOwotICAgIHJldHVybiB0cnVlOworICAgIEN1
cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQgc2VnbWVudDsKKyAgICBzZWdtZW50LnBvaW50MiA9IHJl
YWRGbG9hdFBvaW50KCk7CisgICAgc2VnbWVudC50YXJnZXRQb2ludCA9IHJlYWRGbG9hdFBvaW50
KCk7CisgICAgcmV0dXJuIHNlZ21lbnQ7CiB9CiAKLWJvb2wgU1ZHUGF0aEJ5dGVTdHJlYW1Tb3Vy
Y2U6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQoRmxvYXRQb2ludCYgcG9pbnQxLCBGbG9h
dFBvaW50JiB0YXJnZXRQb2ludCkKK09wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkN1cnZlVG9RdWFk
cmF0aWNTZWdtZW50PiBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVhZHJh
dGljU2VnbWVudCgpCiB7Ci0gICAgcG9pbnQxID0gcmVhZEZsb2F0UG9pbnQoKTsKLSAgICB0YXJn
ZXRQb2ludCA9IHJlYWRGbG9hdFBvaW50KCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgQ3VydmVU
b1F1YWRyYXRpY1NlZ21lbnQgc2VnbWVudDsKKyAgICBzZWdtZW50LnBvaW50MSA9IHJlYWRGbG9h
dFBvaW50KCk7CisgICAgc2VnbWVudC50YXJnZXRQb2ludCA9IHJlYWRGbG9hdFBvaW50KCk7Cisg
ICAgcmV0dXJuIHNlZ21lbnQ7CiB9CiAKLWJvb2wgU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBh
cnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQoRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQp
CitPcHRpb25hbDxTVkdQYXRoU291cmNlOjpDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudD4g
U1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21l
bnQoKQogewotICAgIHRhcmdldFBvaW50ID0gcmVhZEZsb2F0UG9pbnQoKTsKLSAgICByZXR1cm4g
dHJ1ZTsKKyAgICBDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudCBzZWdtZW50OworICAgIHNl
Z21lbnQudGFyZ2V0UG9pbnQgPSByZWFkRmxvYXRQb2ludCgpOworICAgIHJldHVybiBzZWdtZW50
OwogfQogCi1ib29sIFNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZUFyY1RvU2VnbWVudChm
bG9hdCYgcngsIGZsb2F0JiByeSwgZmxvYXQmIGFuZ2xlLCBib29sJiBsYXJnZUFyYywgYm9vbCYg
c3dlZXAsIEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQorT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6
QXJjVG9TZWdtZW50PiBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VBcmNUb1NlZ21lbnQo
KQogewotICAgIHJ4ID0gcmVhZEZsb2F0KCk7Ci0gICAgcnkgPSByZWFkRmxvYXQoKTsKLSAgICBh
bmdsZSA9IHJlYWRGbG9hdCgpOwotICAgIGxhcmdlQXJjID0gcmVhZEZsYWcoKTsKLSAgICBzd2Vl
cCA9IHJlYWRGbGFnKCk7Ci0gICAgdGFyZ2V0UG9pbnQgPSByZWFkRmxvYXRQb2ludCgpOwotICAg
IHJldHVybiB0cnVlOworICAgIEFyY1RvU2VnbWVudCBzZWdtZW50OworICAgIHNlZ21lbnQucngg
PSByZWFkRmxvYXQoKTsKKyAgICBzZWdtZW50LnJ5ID0gcmVhZEZsb2F0KCk7CisgICAgc2VnbWVu
dC5hbmdsZSA9IHJlYWRGbG9hdCgpOworICAgIHNlZ21lbnQubGFyZ2VBcmMgPSByZWFkRmxhZygp
OworICAgIHNlZ21lbnQuc3dlZXAgPSByZWFkRmxhZygpOworICAgIHNlZ21lbnQudGFyZ2V0UG9p
bnQgPSByZWFkRmxvYXRQb2ludCgpOworICAgIHJldHVybiBzZWdtZW50OwogfQogCiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2UuaAkocmV2aXNp
b24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3RyZWFtU291cmNl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDE4ICszMiwxOCBAQCBwdWJsaWM6CiBwcml2YXRlOgog
ICAgIGJvb2wgaGFzTW9yZURhdGEoKSBjb25zdCBmaW5hbDsKICAgICBib29sIG1vdmVUb05leHRU
b2tlbigpIGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KLSAgICBib29sIHBhcnNlU1ZHU2VnbWVudFR5
cGUoU1ZHUGF0aFNlZ1R5cGUmKSBmaW5hbDsKICAgICBTVkdQYXRoU2VnVHlwZSBuZXh0Q29tbWFu
ZChTVkdQYXRoU2VnVHlwZSkgZmluYWw7CiAKLSAgICBib29sIHBhcnNlTW92ZVRvU2VnbWVudChG
bG9hdFBvaW50JikgZmluYWw7Ci0gICAgYm9vbCBwYXJzZUxpbmVUb1NlZ21lbnQoRmxvYXRQb2lu
dCYpIGZpbmFsOwotICAgIGJvb2wgcGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudChmbG9hdCYp
IGZpbmFsOwotICAgIGJvb2wgcGFyc2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnQoZmxvYXQmKSBmaW5h
bDsKLSAgICBib29sIHBhcnNlQ3VydmVUb0N1YmljU2VnbWVudChGbG9hdFBvaW50JiwgRmxvYXRQ
b2ludCYsIEZsb2F0UG9pbnQmKSBmaW5hbDsKLSAgICBib29sIHBhcnNlQ3VydmVUb0N1YmljU21v
b3RoU2VnbWVudChGbG9hdFBvaW50JiwgRmxvYXRQb2ludCYpIGZpbmFsOwotICAgIGJvb2wgcGFy
c2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudChGbG9hdFBvaW50JiwgRmxvYXRQb2ludCYpIGZpbmFs
OwotICAgIGJvb2wgcGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudChGbG9hdFBvaW50
JikgZmluYWw7Ci0gICAgYm9vbCBwYXJzZUFyY1RvU2VnbWVudChmbG9hdCYsIGZsb2F0JiwgZmxv
YXQmLCBib29sJiwgYm9vbCYsIEZsb2F0UG9pbnQmKSBmaW5hbDsKKyAgICBPcHRpb25hbDxTVkdQ
YXRoU2VnVHlwZT4gcGFyc2VTVkdTZWdtZW50VHlwZSgpIGZpbmFsOworICAgIE9wdGlvbmFsPE1v
dmVUb1NlZ21lbnQ+IHBhcnNlTW92ZVRvU2VnbWVudCgpIGZpbmFsOworICAgIE9wdGlvbmFsPExp
bmVUb1NlZ21lbnQ+IHBhcnNlTGluZVRvU2VnbWVudCgpIGZpbmFsOworICAgIE9wdGlvbmFsPExp
bmVUb0hvcml6b250YWxTZWdtZW50PiBwYXJzZUxpbmVUb0hvcml6b250YWxTZWdtZW50KCkgZmlu
YWw7CisgICAgT3B0aW9uYWw8TGluZVRvVmVydGljYWxTZWdtZW50PiBwYXJzZUxpbmVUb1ZlcnRp
Y2FsU2VnbWVudCgpIGZpbmFsOworICAgIE9wdGlvbmFsPEN1cnZlVG9DdWJpY1NlZ21lbnQ+IHBh
cnNlQ3VydmVUb0N1YmljU2VnbWVudCgpIGZpbmFsOworICAgIE9wdGlvbmFsPEN1cnZlVG9DdWJp
Y1Ntb290aFNlZ21lbnQ+IHBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudCgpIGZpbmFsOwor
ICAgIE9wdGlvbmFsPEN1cnZlVG9RdWFkcmF0aWNTZWdtZW50PiBwYXJzZUN1cnZlVG9RdWFkcmF0
aWNTZWdtZW50KCkgZmluYWw7CisgICAgT3B0aW9uYWw8Q3VydmVUb1F1YWRyYXRpY1Ntb290aFNl
Z21lbnQ+IHBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQoKSBmaW5hbDsKKyAgICBP
cHRpb25hbDxBcmNUb1NlZ21lbnQ+IHBhcnNlQXJjVG9TZWdtZW50KCkgZmluYWw7CiAKICNpZiBD
T01QSUxFUihNU1ZDKQogI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ3MDEpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1BhdGhQYXJzZXIuY3BwCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHUGF0aFBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDEwMiAr
NzMsOTkgQEAgdm9pZCBTVkdQYXRoUGFyc2VyOjpwYXJzZUNsb3NlUGF0aFNlZ21lbgogCiBib29s
IFNWR1BhdGhQYXJzZXI6OnBhcnNlTW92ZVRvU2VnbWVudCgpCiB7Ci0gICAgRmxvYXRQb2ludCB0
YXJnZXRQb2ludDsKLSAgICBpZiAoIW1fc291cmNlLnBhcnNlTW92ZVRvU2VnbWVudCh0YXJnZXRQ
b2ludCkpCisgICAgYXV0byByZXN1bHQgPSBtX3NvdXJjZS5wYXJzZU1vdmVUb1NlZ21lbnQoKTsK
KyAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKG1fcGF0
aFBhcnNpbmdNb2RlID09IE5vcm1hbGl6ZWRQYXJzaW5nKSB7CiAgICAgICAgIGlmIChtX21vZGUg
PT0gUmVsYXRpdmVDb29yZGluYXRlcykKLSAgICAgICAgICAgIG1fY3VycmVudFBvaW50ICs9IHRh
cmdldFBvaW50OworICAgICAgICAgICAgbV9jdXJyZW50UG9pbnQgKz0gcmVzdWx0LT50YXJnZXRQ
b2ludDsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9jdXJyZW50UG9pbnQgPSB0YXJnZXRQ
b2ludDsKKyAgICAgICAgICAgIG1fY3VycmVudFBvaW50ID0gcmVzdWx0LT50YXJnZXRQb2ludDsK
ICAgICAgICAgbV9zdWJQYXRoUG9pbnQgPSBtX2N1cnJlbnRQb2ludDsKICAgICAgICAgbV9jb25z
dW1lci5tb3ZlVG8obV9jdXJyZW50UG9pbnQsIG1fY2xvc2VQYXRoLCBBYnNvbHV0ZUNvb3JkaW5h
dGVzKTsKICAgICB9IGVsc2UKLSAgICAgICAgbV9jb25zdW1lci5tb3ZlVG8odGFyZ2V0UG9pbnQs
IG1fY2xvc2VQYXRoLCBtX21vZGUpOworICAgICAgICBtX2NvbnN1bWVyLm1vdmVUbyhyZXN1bHQt
PnRhcmdldFBvaW50LCBtX2Nsb3NlUGF0aCwgbV9tb2RlKTsKICAgICBtX2Nsb3NlUGF0aCA9IGZh
bHNlOwogICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIFNWR1BhdGhQYXJzZXI6OnBhcnNlTGlu
ZVRvU2VnbWVudCgpCiB7Ci0gICAgRmxvYXRQb2ludCB0YXJnZXRQb2ludDsKLSAgICBpZiAoIW1f
c291cmNlLnBhcnNlTGluZVRvU2VnbWVudCh0YXJnZXRQb2ludCkpCisgICAgYXV0byByZXN1bHQg
PSBtX3NvdXJjZS5wYXJzZUxpbmVUb1NlZ21lbnQoKTsKKyAgICBpZiAoIXJlc3VsdCkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKG1fcGF0aFBhcnNpbmdNb2RlID09IE5vcm1hbGl6
ZWRQYXJzaW5nKSB7CiAgICAgICAgIGlmIChtX21vZGUgPT0gUmVsYXRpdmVDb29yZGluYXRlcykK
LSAgICAgICAgICAgIG1fY3VycmVudFBvaW50ICs9IHRhcmdldFBvaW50OworICAgICAgICAgICAg
bV9jdXJyZW50UG9pbnQgKz0gcmVzdWx0LT50YXJnZXRQb2ludDsKICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgbV9jdXJyZW50UG9pbnQgPSB0YXJnZXRQb2ludDsKKyAgICAgICAgICAgIG1fY3Vy
cmVudFBvaW50ID0gcmVzdWx0LT50YXJnZXRQb2ludDsKICAgICAgICAgbV9jb25zdW1lci5saW5l
VG8obV9jdXJyZW50UG9pbnQsIEFic29sdXRlQ29vcmRpbmF0ZXMpOwogICAgIH0gZWxzZQotICAg
ICAgICBtX2NvbnN1bWVyLmxpbmVUbyh0YXJnZXRQb2ludCwgbV9tb2RlKTsKKyAgICAgICAgbV9j
b25zdW1lci5saW5lVG8ocmVzdWx0LT50YXJnZXRQb2ludCwgbV9tb2RlKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAogYm9vbCBTVkdQYXRoUGFyc2VyOjpwYXJzZUxpbmVUb0hvcml6b250YWxTZWdt
ZW50KCkKIHsKLSAgICBmbG9hdCB0b1g7Ci0gICAgaWYgKCFtX3NvdXJjZS5wYXJzZUxpbmVUb0hv
cml6b250YWxTZWdtZW50KHRvWCkpCisgICAgYXV0byByZXN1bHQgPSBtX3NvdXJjZS5wYXJzZUxp
bmVUb0hvcml6b250YWxTZWdtZW50KCk7CisgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIGlmIChtX3BhdGhQYXJzaW5nTW9kZSA9PSBOb3JtYWxpemVkUGFyc2lu
ZykgewogICAgICAgICBpZiAobV9tb2RlID09IFJlbGF0aXZlQ29vcmRpbmF0ZXMpCi0gICAgICAg
ICAgICBtX2N1cnJlbnRQb2ludC5tb3ZlKHRvWCwgMCk7CisgICAgICAgICAgICBtX2N1cnJlbnRQ
b2ludC5tb3ZlKHJlc3VsdC0+eCwgMCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fY3Vy
cmVudFBvaW50LnNldFgodG9YKTsKKyAgICAgICAgICAgIG1fY3VycmVudFBvaW50LnNldFgocmVz
dWx0LT54KTsKICAgICAgICAgbV9jb25zdW1lci5saW5lVG8obV9jdXJyZW50UG9pbnQsIEFic29s
dXRlQ29vcmRpbmF0ZXMpOwogICAgIH0gZWxzZQotICAgICAgICBtX2NvbnN1bWVyLmxpbmVUb0hv
cml6b250YWwodG9YLCBtX21vZGUpOworICAgICAgICBtX2NvbnN1bWVyLmxpbmVUb0hvcml6b250
YWwocmVzdWx0LT54LCBtX21vZGUpOwogICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIFNWR1Bh
dGhQYXJzZXI6OnBhcnNlTGluZVRvVmVydGljYWxTZWdtZW50KCkKIHsKLSAgICBmbG9hdCB0b1k7
Ci0gICAgaWYgKCFtX3NvdXJjZS5wYXJzZUxpbmVUb1ZlcnRpY2FsU2VnbWVudCh0b1kpKQorICAg
IGF1dG8gcmVzdWx0ID0gbV9zb3VyY2UucGFyc2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnQoKTsKKyAg
ICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKG1fcGF0aFBh
cnNpbmdNb2RlID09IE5vcm1hbGl6ZWRQYXJzaW5nKSB7CiAgICAgICAgIGlmIChtX21vZGUgPT0g
UmVsYXRpdmVDb29yZGluYXRlcykKLSAgICAgICAgICAgIG1fY3VycmVudFBvaW50Lm1vdmUoMCwg
dG9ZKTsKKyAgICAgICAgICAgIG1fY3VycmVudFBvaW50Lm1vdmUoMCwgcmVzdWx0LT55KTsKICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgbV9jdXJyZW50UG9pbnQuc2V0WSh0b1kpOworICAgICAg
ICAgICAgbV9jdXJyZW50UG9pbnQuc2V0WShyZXN1bHQtPnkpOwogICAgICAgICBtX2NvbnN1bWVy
LmxpbmVUbyhtX2N1cnJlbnRQb2ludCwgQWJzb2x1dGVDb29yZGluYXRlcyk7CiAgICAgfSBlbHNl
Ci0gICAgICAgIG1fY29uc3VtZXIubGluZVRvVmVydGljYWwodG9ZLCBtX21vZGUpOworICAgICAg
ICBtX2NvbnN1bWVyLmxpbmVUb1ZlcnRpY2FsKHJlc3VsdC0+eSwgbV9tb2RlKTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAogYm9vbCBTVkdQYXRoUGFyc2VyOjpwYXJzZUN1cnZlVG9DdWJpY1NlZ21l
bnQoKQogewotICAgIEZsb2F0UG9pbnQgcG9pbnQxOwotICAgIEZsb2F0UG9pbnQgcG9pbnQyOwot
ICAgIEZsb2F0UG9pbnQgdGFyZ2V0UG9pbnQ7Ci0gICAgaWYgKCFtX3NvdXJjZS5wYXJzZUN1cnZl
VG9DdWJpY1NlZ21lbnQocG9pbnQxLCBwb2ludDIsIHRhcmdldFBvaW50KSkKKyAgICBhdXRvIHJl
c3VsdCA9IG1fc291cmNlLnBhcnNlQ3VydmVUb0N1YmljU2VnbWVudCgpOworICAgIGlmICghcmVz
dWx0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAobV9wYXRoUGFyc2luZ01vZGUg
PT0gTm9ybWFsaXplZFBhcnNpbmcpIHsKICAgICAgICAgaWYgKG1fbW9kZSA9PSBSZWxhdGl2ZUNv
b3JkaW5hdGVzKSB7Ci0gICAgICAgICAgICBwb2ludDEgKz0gbV9jdXJyZW50UG9pbnQ7Ci0gICAg
ICAgICAgICBwb2ludDIgKz0gbV9jdXJyZW50UG9pbnQ7Ci0gICAgICAgICAgICB0YXJnZXRQb2lu
dCArPSBtX2N1cnJlbnRQb2ludDsKKyAgICAgICAgICAgIHJlc3VsdC0+cG9pbnQxICs9IG1fY3Vy
cmVudFBvaW50OworICAgICAgICAgICAgcmVzdWx0LT5wb2ludDIgKz0gbV9jdXJyZW50UG9pbnQ7
CisgICAgICAgICAgICByZXN1bHQtPnRhcmdldFBvaW50ICs9IG1fY3VycmVudFBvaW50OwogICAg
ICAgICB9Ci0gICAgICAgIG1fY29uc3VtZXIuY3VydmVUb0N1YmljKHBvaW50MSwgcG9pbnQyLCB0
YXJnZXRQb2ludCwgQWJzb2x1dGVDb29yZGluYXRlcyk7CisgICAgICAgIG1fY29uc3VtZXIuY3Vy
dmVUb0N1YmljKHJlc3VsdC0+cG9pbnQxLCByZXN1bHQtPnBvaW50MiwgcmVzdWx0LT50YXJnZXRQ
b2ludCwgQWJzb2x1dGVDb29yZGluYXRlcyk7CiAKLSAgICAgICAgbV9jb250cm9sUG9pbnQgPSBw
b2ludDI7Ci0gICAgICAgIG1fY3VycmVudFBvaW50ID0gdGFyZ2V0UG9pbnQ7CisgICAgICAgIG1f
Y29udHJvbFBvaW50ID0gcmVzdWx0LT5wb2ludDI7CisgICAgICAgIG1fY3VycmVudFBvaW50ID0g
cmVzdWx0LT50YXJnZXRQb2ludDsKICAgICB9IGVsc2UKLSAgICAgICAgbV9jb25zdW1lci5jdXJ2
ZVRvQ3ViaWMocG9pbnQxLCBwb2ludDIsIHRhcmdldFBvaW50LCBtX21vZGUpOworICAgICAgICBt
X2NvbnN1bWVyLmN1cnZlVG9DdWJpYyhyZXN1bHQtPnBvaW50MSwgcmVzdWx0LT5wb2ludDIsIHJl
c3VsdC0+dGFyZ2V0UG9pbnQsIG1fbW9kZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wg
U1ZHUGF0aFBhcnNlcjo6cGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KCkKIHsKLSAgICBG
bG9hdFBvaW50IHBvaW50MjsKLSAgICBGbG9hdFBvaW50IHRhcmdldFBvaW50OwotICAgIGlmICgh
bV9zb3VyY2UucGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KHBvaW50MiwgdGFyZ2V0UG9p
bnQpKQorICAgIGF1dG8gcmVzdWx0ID0gbV9zb3VyY2UucGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhT
ZWdtZW50KCk7CisgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IGlmIChtX2xhc3RDb21tYW5kICE9IFBhdGhTZWdDdXJ2ZVRvQ3ViaWNBYnMKQEAgLTE4Miw1MyAr
MTc5LDUzIEBAIGJvb2wgU1ZHUGF0aFBhcnNlcjo6cGFyc2VDdXJ2ZVRvQ3ViaWNTbW8KICAgICAg
ICAgcG9pbnQxLnNjYWxlKDIpOwogICAgICAgICBwb2ludDEubW92ZSgtbV9jb250cm9sUG9pbnQu
eCgpLCAtbV9jb250cm9sUG9pbnQueSgpKTsKICAgICAgICAgaWYgKG1fbW9kZSA9PSBSZWxhdGl2
ZUNvb3JkaW5hdGVzKSB7Ci0gICAgICAgICAgICBwb2ludDIgKz0gbV9jdXJyZW50UG9pbnQ7Ci0g
ICAgICAgICAgICB0YXJnZXRQb2ludCArPSBtX2N1cnJlbnRQb2ludDsKKyAgICAgICAgICAgIHJl
c3VsdC0+cG9pbnQyICs9IG1fY3VycmVudFBvaW50OworICAgICAgICAgICAgcmVzdWx0LT50YXJn
ZXRQb2ludCArPSBtX2N1cnJlbnRQb2ludDsKICAgICAgICAgfQogCi0gICAgICAgIG1fY29uc3Vt
ZXIuY3VydmVUb0N1YmljKHBvaW50MSwgcG9pbnQyLCB0YXJnZXRQb2ludCwgQWJzb2x1dGVDb29y
ZGluYXRlcyk7CisgICAgICAgIG1fY29uc3VtZXIuY3VydmVUb0N1YmljKHBvaW50MSwgcmVzdWx0
LT5wb2ludDIsIHJlc3VsdC0+dGFyZ2V0UG9pbnQsIEFic29sdXRlQ29vcmRpbmF0ZXMpOwogCi0g
ICAgICAgIG1fY29udHJvbFBvaW50ID0gcG9pbnQyOwotICAgICAgICBtX2N1cnJlbnRQb2ludCA9
IHRhcmdldFBvaW50OworICAgICAgICBtX2NvbnRyb2xQb2ludCA9IHJlc3VsdC0+cG9pbnQyOwor
ICAgICAgICBtX2N1cnJlbnRQb2ludCA9IHJlc3VsdC0+dGFyZ2V0UG9pbnQ7CiAgICAgfSBlbHNl
Ci0gICAgICAgIG1fY29uc3VtZXIuY3VydmVUb0N1YmljU21vb3RoKHBvaW50MiwgdGFyZ2V0UG9p
bnQsIG1fbW9kZSk7CisgICAgICAgIG1fY29uc3VtZXIuY3VydmVUb0N1YmljU21vb3RoKHJlc3Vs
dC0+cG9pbnQyLCByZXN1bHQtPnRhcmdldFBvaW50LCBtX21vZGUpOwogICAgIHJldHVybiB0cnVl
OwogfQogCiBib29sIFNWR1BhdGhQYXJzZXI6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQo
KQogewotICAgIEZsb2F0UG9pbnQgcG9pbnQxOwotICAgIEZsb2F0UG9pbnQgdGFyZ2V0UG9pbnQ7
Ci0gICAgaWYgKCFtX3NvdXJjZS5wYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KHBvaW50MSwg
dGFyZ2V0UG9pbnQpKQorICAgIGF1dG8gcmVzdWx0ID0gbV9zb3VyY2UucGFyc2VDdXJ2ZVRvUXVh
ZHJhdGljU2VnbWVudCgpOworICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICBpZiAobV9wYXRoUGFyc2luZ01vZGUgPT0gTm9ybWFsaXplZFBhcnNpbmcpIHsKLSAg
ICAgICAgbV9jb250cm9sUG9pbnQgPSBwb2ludDE7CisgICAgICAgIG1fY29udHJvbFBvaW50ID0g
cmVzdWx0LT5wb2ludDE7CisKICAgICAgICAgRmxvYXRQb2ludCBwb2ludDEgPSBtX2N1cnJlbnRQ
b2ludDsKICAgICAgICAgcG9pbnQxLm1vdmUoMiAqIG1fY29udHJvbFBvaW50LngoKSwgMiAqIG1f
Y29udHJvbFBvaW50LnkoKSk7Ci0gICAgICAgIEZsb2F0UG9pbnQgcG9pbnQyKHRhcmdldFBvaW50
LngoKSArIDIgKiBtX2NvbnRyb2xQb2ludC54KCksIHRhcmdldFBvaW50LnkoKSArIDIgKiBtX2Nv
bnRyb2xQb2ludC55KCkpOworICAgICAgICBGbG9hdFBvaW50IHBvaW50MihyZXN1bHQtPnRhcmdl
dFBvaW50LngoKSArIDIgKiBtX2NvbnRyb2xQb2ludC54KCksIHJlc3VsdC0+dGFyZ2V0UG9pbnQu
eSgpICsgMiAqIG1fY29udHJvbFBvaW50LnkoKSk7CiAgICAgICAgIGlmIChtX21vZGUgPT0gUmVs
YXRpdmVDb29yZGluYXRlcykgewogICAgICAgICAgICAgcG9pbnQxLm1vdmUoMiAqIG1fY3VycmVu
dFBvaW50LngoKSwgMiAqIG1fY3VycmVudFBvaW50LnkoKSk7CiAgICAgICAgICAgICBwb2ludDIu
bW92ZSgzICogbV9jdXJyZW50UG9pbnQueCgpLCAzICogbV9jdXJyZW50UG9pbnQueSgpKTsKLSAg
ICAgICAgICAgIHRhcmdldFBvaW50ICs9IG1fY3VycmVudFBvaW50OworICAgICAgICAgICAgcmVz
dWx0LT50YXJnZXRQb2ludCArPSBtX2N1cnJlbnRQb2ludDsKICAgICAgICAgfQogICAgICAgICBw
b2ludDEuc2NhbGUoZ09uZU92ZXJUaHJlZSk7CiAgICAgICAgIHBvaW50Mi5zY2FsZShnT25lT3Zl
clRocmVlKTsKIAotICAgICAgICBtX2NvbnN1bWVyLmN1cnZlVG9DdWJpYyhwb2ludDEsIHBvaW50
MiwgdGFyZ2V0UG9pbnQsIEFic29sdXRlQ29vcmRpbmF0ZXMpOworICAgICAgICBtX2NvbnN1bWVy
LmN1cnZlVG9DdWJpYyhwb2ludDEsIHBvaW50MiwgcmVzdWx0LT50YXJnZXRQb2ludCwgQWJzb2x1
dGVDb29yZGluYXRlcyk7CiAKICAgICAgICAgaWYgKG1fbW9kZSA9PSBSZWxhdGl2ZUNvb3JkaW5h
dGVzKQogICAgICAgICAgICAgbV9jb250cm9sUG9pbnQgKz0gbV9jdXJyZW50UG9pbnQ7Ci0gICAg
ICAgIG1fY3VycmVudFBvaW50ID0gdGFyZ2V0UG9pbnQ7CisgICAgICAgIG1fY3VycmVudFBvaW50
ID0gcmVzdWx0LT50YXJnZXRQb2ludDsKICAgICB9IGVsc2UKLSAgICAgICAgbV9jb25zdW1lci5j
dXJ2ZVRvUXVhZHJhdGljKHBvaW50MSwgdGFyZ2V0UG9pbnQsIG1fbW9kZSk7CisgICAgICAgIG1f
Y29uc3VtZXIuY3VydmVUb1F1YWRyYXRpYyhyZXN1bHQtPnBvaW50MSwgcmVzdWx0LT50YXJnZXRQ
b2ludCwgbV9tb2RlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBTVkdQYXRoUGFyc2Vy
OjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KCkKIHsKLSAgICBGbG9hdFBvaW50
IHRhcmdldFBvaW50OwotICAgIGlmICghbV9zb3VyY2UucGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21v
b3RoU2VnbWVudCh0YXJnZXRQb2ludCkpCisgICAgYXV0byByZXN1bHQgPSBtX3NvdXJjZS5wYXJz
ZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KCk7CisgICAgaWYgKCFyZXN1bHQpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChtX2xhc3RDb21tYW5kICE9IFBhdGhTZWdDdXJ2
ZVRvUXVhZHJhdGljQWJzCkBAIC0yNDIsNjcgKzIzOSw2MiBAQCBib29sIFNWR1BhdGhQYXJzZXI6
OnBhcnNlQ3VydmVUb1F1YWRyYXRpCiAgICAgICAgIGN1YmljUG9pbnQuc2NhbGUoMik7CiAgICAg
ICAgIGN1YmljUG9pbnQubW92ZSgtbV9jb250cm9sUG9pbnQueCgpLCAtbV9jb250cm9sUG9pbnQu
eSgpKTsKICAgICAgICAgRmxvYXRQb2ludCBwb2ludDEobV9jdXJyZW50UG9pbnQueCgpICsgMiAq
IGN1YmljUG9pbnQueCgpLCBtX2N1cnJlbnRQb2ludC55KCkgKyAyICogY3ViaWNQb2ludC55KCkp
OwotICAgICAgICBGbG9hdFBvaW50IHBvaW50Mih0YXJnZXRQb2ludC54KCkgKyAyICogY3ViaWNQ
b2ludC54KCksIHRhcmdldFBvaW50LnkoKSArIDIgKiBjdWJpY1BvaW50LnkoKSk7CisgICAgICAg
IEZsb2F0UG9pbnQgcG9pbnQyKHJlc3VsdC0+dGFyZ2V0UG9pbnQueCgpICsgMiAqIGN1YmljUG9p
bnQueCgpLCByZXN1bHQtPnRhcmdldFBvaW50LnkoKSArIDIgKiBjdWJpY1BvaW50LnkoKSk7CiAg
ICAgICAgIGlmIChtX21vZGUgPT0gUmVsYXRpdmVDb29yZGluYXRlcykgewogICAgICAgICAgICAg
cG9pbnQyICs9IG1fY3VycmVudFBvaW50OwotICAgICAgICAgICAgdGFyZ2V0UG9pbnQgKz0gbV9j
dXJyZW50UG9pbnQ7CisgICAgICAgICAgICByZXN1bHQtPnRhcmdldFBvaW50ICs9IG1fY3VycmVu
dFBvaW50OwogICAgICAgICB9CiAgICAgICAgIHBvaW50MS5zY2FsZShnT25lT3ZlclRocmVlKTsK
ICAgICAgICAgcG9pbnQyLnNjYWxlKGdPbmVPdmVyVGhyZWUpOwogCi0gICAgICAgIG1fY29uc3Vt
ZXIuY3VydmVUb0N1YmljKHBvaW50MSwgcG9pbnQyLCB0YXJnZXRQb2ludCwgQWJzb2x1dGVDb29y
ZGluYXRlcyk7CisgICAgICAgIG1fY29uc3VtZXIuY3VydmVUb0N1YmljKHBvaW50MSwgcG9pbnQy
LCByZXN1bHQtPnRhcmdldFBvaW50LCBBYnNvbHV0ZUNvb3JkaW5hdGVzKTsKIAogICAgICAgICBt
X2NvbnRyb2xQb2ludCA9IGN1YmljUG9pbnQ7Ci0gICAgICAgIG1fY3VycmVudFBvaW50ID0gdGFy
Z2V0UG9pbnQ7CisgICAgICAgIG1fY3VycmVudFBvaW50ID0gcmVzdWx0LT50YXJnZXRQb2ludDsK
ICAgICB9IGVsc2UKLSAgICAgICAgbV9jb25zdW1lci5jdXJ2ZVRvUXVhZHJhdGljU21vb3RoKHRh
cmdldFBvaW50LCBtX21vZGUpOworICAgICAgICBtX2NvbnN1bWVyLmN1cnZlVG9RdWFkcmF0aWNT
bW9vdGgocmVzdWx0LT50YXJnZXRQb2ludCwgbV9tb2RlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAogYm9vbCBTVkdQYXRoUGFyc2VyOjpwYXJzZUFyY1RvU2VnbWVudCgpCiB7Ci0gICAgZmxvYXQg
cng7Ci0gICAgZmxvYXQgcnk7Ci0gICAgZmxvYXQgYW5nbGU7Ci0gICAgYm9vbCBsYXJnZUFyYzsK
LSAgICBib29sIHN3ZWVwOwotICAgIEZsb2F0UG9pbnQgdGFyZ2V0UG9pbnQ7Ci0gICAgaWYgKCFt
X3NvdXJjZS5wYXJzZUFyY1RvU2VnbWVudChyeCwgcnksIGFuZ2xlLCBsYXJnZUFyYywgc3dlZXAs
IHRhcmdldFBvaW50KSkKKyAgICBhdXRvIHJlc3VsdCA9IG1fc291cmNlLnBhcnNlQXJjVG9TZWdt
ZW50KCk7CisgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8v
IElmIHJ4ID0gMCBvciByeSA9IDAgdGhlbiB0aGlzIGFyYyBpcyB0cmVhdGVkIGFzIGEgc3RyYWln
aHQgbGluZSBzZWdtZW50IChhICJsaW5ldG8iKSBqb2luaW5nIHRoZSBlbmRwb2ludHMuCiAgICAg
Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHL2ltcGxub3RlLmh0bWwjQXJjT3V0T2ZSYW5nZVBh
cmFtZXRlcnMKICAgICAvLyBJZiB0aGUgY3VycmVudCBwb2ludCBhbmQgdGFyZ2V0IHBvaW50IGZv
ciB0aGUgYXJjIGFyZSBpZGVudGljYWwsIGl0IHNob3VsZCBiZSB0cmVhdGVkIGFzIGEgemVybyBs
ZW5ndGgKICAgICAvLyBwYXRoLiBUaGlzIGVuc3VyZXMgY29udGludWl0eSBpbiBhbmltYXRpb25z
LgotICAgIHJ4ID0gZmFic2YocngpOwotICAgIHJ5ID0gZmFic2YocnkpOworICAgIHJlc3VsdC0+
cnggPSBmYWJzZihyZXN1bHQtPnJ4KTsKKyAgICByZXN1bHQtPnJ5ID0gZmFic2YocmVzdWx0LT5y
eSk7CiAgICAgYm9vbCBhcmNJc1plcm9MZW5ndGggPSBmYWxzZTsKICAgICBpZiAobV9wYXRoUGFy
c2luZ01vZGUgPT0gTm9ybWFsaXplZFBhcnNpbmcpIHsKICAgICAgICAgaWYgKG1fbW9kZSA9PSBS
ZWxhdGl2ZUNvb3JkaW5hdGVzKQotICAgICAgICAgICAgYXJjSXNaZXJvTGVuZ3RoID0gdGFyZ2V0
UG9pbnQgPT0gRmxvYXRQb2ludDo6emVybygpOworICAgICAgICAgICAgYXJjSXNaZXJvTGVuZ3Ro
ID0gcmVzdWx0LT50YXJnZXRQb2ludCA9PSBGbG9hdFBvaW50Ojp6ZXJvKCk7CiAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIGFyY0lzWmVyb0xlbmd0aCA9IHRhcmdldFBvaW50ID09IG1fY3VycmVu
dFBvaW50OworICAgICAgICAgICAgYXJjSXNaZXJvTGVuZ3RoID0gcmVzdWx0LT50YXJnZXRQb2lu
dCA9PSBtX2N1cnJlbnRQb2ludDsKICAgICB9Ci0gICAgaWYgKCFyeCB8fCAhcnkgfHwgYXJjSXNa
ZXJvTGVuZ3RoKSB7CisgICAgaWYgKCFyZXN1bHQtPnJ4IHx8ICFyZXN1bHQtPnJ5IHx8IGFyY0lz
WmVyb0xlbmd0aCkgewogICAgICAgICBpZiAobV9wYXRoUGFyc2luZ01vZGUgPT0gTm9ybWFsaXpl
ZFBhcnNpbmcpIHsKICAgICAgICAgICAgIGlmIChtX21vZGUgPT0gUmVsYXRpdmVDb29yZGluYXRl
cykKLSAgICAgICAgICAgICAgICBtX2N1cnJlbnRQb2ludCArPSB0YXJnZXRQb2ludDsKKyAgICAg
ICAgICAgICAgICBtX2N1cnJlbnRQb2ludCArPSByZXN1bHQtPnRhcmdldFBvaW50OwogICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1fY3VycmVudFBvaW50ID0gdGFyZ2V0UG9pbnQ7
CisgICAgICAgICAgICAgICAgbV9jdXJyZW50UG9pbnQgPSByZXN1bHQtPnRhcmdldFBvaW50Owog
ICAgICAgICAgICAgbV9jb25zdW1lci5saW5lVG8obV9jdXJyZW50UG9pbnQsIEFic29sdXRlQ29v
cmRpbmF0ZXMpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1fY29uc3VtZXIubGluZVRv
KHRhcmdldFBvaW50LCBtX21vZGUpOworICAgICAgICAgICAgbV9jb25zdW1lci5saW5lVG8ocmVz
dWx0LT50YXJnZXRQb2ludCwgbV9tb2RlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
CiAgICAgaWYgKG1fcGF0aFBhcnNpbmdNb2RlID09IE5vcm1hbGl6ZWRQYXJzaW5nKSB7CiAgICAg
ICAgIEZsb2F0UG9pbnQgcG9pbnQxID0gbV9jdXJyZW50UG9pbnQ7CiAgICAgICAgIGlmIChtX21v
ZGUgPT0gUmVsYXRpdmVDb29yZGluYXRlcykKLSAgICAgICAgICAgIHRhcmdldFBvaW50ICs9IG1f
Y3VycmVudFBvaW50OwotICAgICAgICBtX2N1cnJlbnRQb2ludCA9IHRhcmdldFBvaW50OwotICAg
ICAgICByZXR1cm4gZGVjb21wb3NlQXJjVG9DdWJpYyhhbmdsZSwgcngsIHJ5LCBwb2ludDEsIHRh
cmdldFBvaW50LCBsYXJnZUFyYywgc3dlZXApOworICAgICAgICAgICAgcmVzdWx0LT50YXJnZXRQ
b2ludCArPSBtX2N1cnJlbnRQb2ludDsKKyAgICAgICAgbV9jdXJyZW50UG9pbnQgPSByZXN1bHQt
PnRhcmdldFBvaW50OworICAgICAgICByZXR1cm4gZGVjb21wb3NlQXJjVG9DdWJpYyhyZXN1bHQt
PmFuZ2xlLCByZXN1bHQtPnJ4LCByZXN1bHQtPnJ5LCBwb2ludDEsIHJlc3VsdC0+dGFyZ2V0UG9p
bnQsIHJlc3VsdC0+bGFyZ2VBcmMsIHJlc3VsdC0+c3dlZXApOwogICAgIH0KLSAgICBtX2NvbnN1
bWVyLmFyY1RvKHJ4LCByeSwgYW5nbGUsIGxhcmdlQXJjLCBzd2VlcCwgdGFyZ2V0UG9pbnQsIG1f
bW9kZSk7CisgICAgbV9jb25zdW1lci5hcmNUbyhyZXN1bHQtPnJ4LCByZXN1bHQtPnJ5LCByZXN1
bHQtPmFuZ2xlLCByZXN1bHQtPmxhcmdlQXJjLCByZXN1bHQtPnN3ZWVwLCByZXN1bHQtPnRhcmdl
dFBvaW50LCBtX21vZGUpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0zMTIsOCArMzA0LDEx
IEBAIGJvb2wgU1ZHUGF0aFBhcnNlcjo6cGFyc2VQYXRoRGF0YShib29sIGMKICAgICBpZiAoIW1f
c291cmNlLm1vdmVUb05leHRUb2tlbigpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIFNW
R1BhdGhTZWdUeXBlIGNvbW1hbmQ7Ci0gICAgbV9zb3VyY2UucGFyc2VTVkdTZWdtZW50VHlwZShj
b21tYW5kKTsKKyAgICBhdXRvIHBhcnNlZENvbW1hbmQgPSBtX3NvdXJjZS5wYXJzZVNWR1NlZ21l
bnRUeXBlKCk7CisgICAgaWYgKCFwYXJzZWRDb21tYW5kKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBhdXRvIGNvbW1hbmQgPSAqcGFyc2VkQ29tbWFuZDsKIAogICAgIC8vIFBhdGggbXVz
dCBzdGFydCB3aXRoIG1vdmV0by4KICAgICBpZiAoY2hlY2tGb3JJbml0aWFsTW92ZVRvICYmIGNv
bW1hbmQgIT0gUGF0aFNlZ01vdmVUb0FicyAmJiBjb21tYW5kICE9IFBhdGhTZWdNb3ZlVG9SZWwp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFNlZ0xpc3RTb3VyY2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU2VnTGlzdFNvdXJjZS5jcHAJKHJl
dmlzaW9uIDI2MzE3NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU2VnTGlzdFNvdXJj
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDE1ICs0MCwxNSBAQCBib29sIFNWR1BhdGhTZWdM
aXN0U291cmNlOjpoYXNNb3JlRGF0YSgpCiAgICAgcmV0dXJuIG1faXRlbUN1cnJlbnQgPCBtX2l0
ZW1FbmQ7CiB9CiAKLWJvb2wgU1ZHUGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNlU1ZHU2VnbWVudFR5
cGUoU1ZHUGF0aFNlZ1R5cGUmIHBhdGhTZWdUeXBlKQorU1ZHUGF0aFNlZ1R5cGUgU1ZHUGF0aFNl
Z0xpc3RTb3VyY2U6Om5leHRDb21tYW5kKFNWR1BhdGhTZWdUeXBlKQogewogICAgIG1fc2VnbWVu
dCA9IG1fcGF0aFNlZ0xpc3QuYXQobV9pdGVtQ3VycmVudCk7Ci0gICAgcGF0aFNlZ1R5cGUgPSBz
dGF0aWNfY2FzdDxTVkdQYXRoU2VnVHlwZT4obV9zZWdtZW50LT5wYXRoU2VnVHlwZSgpKTsKKyAg
ICBTVkdQYXRoU2VnVHlwZSBwYXRoU2VnVHlwZSA9IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdUeXBl
PihtX3NlZ21lbnQtPnBhdGhTZWdUeXBlKCkpOwogICAgICsrbV9pdGVtQ3VycmVudDsKLSAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gcGF0aFNlZ1R5cGU7CiB9CiAKLVNWR1BhdGhTZWdUeXBl
IFNWR1BhdGhTZWdMaXN0U291cmNlOjpuZXh0Q29tbWFuZChTVkdQYXRoU2VnVHlwZSkKK09wdGlv
bmFsPFNWR1BhdGhTZWdUeXBlPiBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VTVkdTZWdtZW50
VHlwZSgpCiB7CiAgICAgbV9zZWdtZW50ID0gbV9wYXRoU2VnTGlzdC5hdChtX2l0ZW1DdXJyZW50
KTsKICAgICBTVkdQYXRoU2VnVHlwZSBwYXRoU2VnVHlwZSA9IHN0YXRpY19jYXN0PFNWR1BhdGhT
ZWdUeXBlPihtX3NlZ21lbnQtPnBhdGhTZWdUeXBlKCkpOwpAQCAtNTYsOTQgKzU2LDExMiBAQCBT
VkdQYXRoU2VnVHlwZSBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6bmV4CiAgICAgcmV0dXJuIHBhdGhT
ZWdUeXBlOwogfQogCi1ib29sIFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZU1vdmVUb1NlZ21l
bnQoRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCitPcHRpb25hbDxTVkdQYXRoU291cmNlOjpNb3Zl
VG9TZWdtZW50PiBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VNb3ZlVG9TZWdtZW50KCkKIHsK
ICAgICBBU1NFUlQobV9zZWdtZW50KTsKICAgICBBU1NFUlQobV9zZWdtZW50LT5wYXRoU2VnVHlw
ZSgpID09IFBhdGhTZWdNb3ZlVG9BYnMgfHwgbV9zZWdtZW50LT5wYXRoU2VnVHlwZSgpID09IFBh
dGhTZWdNb3ZlVG9SZWwpOwogICAgIFNWR1BhdGhTZWdTaW5nbGVDb29yZGluYXRlKiBtb3ZlVG8g
PSBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnU2luZ2xlQ29vcmRpbmF0ZSo+KG1fc2VnbWVudC5nZXQo
KSk7Ci0gICAgdGFyZ2V0UG9pbnQgPSBGbG9hdFBvaW50KG1vdmVUby0+eCgpLCBtb3ZlVG8tPnko
KSk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgTW92ZVRvU2VnbWVudCBzZWdtZW50Owor
ICAgIHNlZ21lbnQudGFyZ2V0UG9pbnQgPSBGbG9hdFBvaW50KG1vdmVUby0+eCgpLCBtb3ZlVG8t
PnkoKSk7CisgICAgcmV0dXJuIHNlZ21lbnQ7CiB9CiAKLWJvb2wgU1ZHUGF0aFNlZ0xpc3RTb3Vy
Y2U6OnBhcnNlTGluZVRvU2VnbWVudChGbG9hdFBvaW50JiB0YXJnZXRQb2ludCkKK09wdGlvbmFs
PFNWR1BhdGhTb3VyY2U6OkxpbmVUb1NlZ21lbnQ+IFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJz
ZUxpbmVUb1NlZ21lbnQoKQogewogICAgIEFTU0VSVChtX3NlZ21lbnQpOwogICAgIEFTU0VSVCht
X3NlZ21lbnQtPnBhdGhTZWdUeXBlKCkgPT0gUGF0aFNlZ0xpbmVUb0FicyB8fCBtX3NlZ21lbnQt
PnBhdGhTZWdUeXBlKCkgPT0gUGF0aFNlZ0xpbmVUb1JlbCk7CiAgICAgU1ZHUGF0aFNlZ1Npbmds
ZUNvb3JkaW5hdGUqIGxpbmVUbyA9IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdTaW5nbGVDb29yZGlu
YXRlKj4obV9zZWdtZW50LmdldCgpKTsKLSAgICB0YXJnZXRQb2ludCA9IEZsb2F0UG9pbnQobGlu
ZVRvLT54KCksIGxpbmVUby0+eSgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBMaW5l
VG9TZWdtZW50IHNlZ21lbnQ7CisgICAgc2VnbWVudC50YXJnZXRQb2ludCA9IEZsb2F0UG9pbnQo
bGluZVRvLT54KCksIGxpbmVUby0+eSgpKTsKKyAgICByZXR1cm4gc2VnbWVudDsKIH0KIAotYm9v
bCBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudChmbG9h
dCYgeCkKK09wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkxpbmVUb0hvcml6b250YWxTZWdtZW50PiBT
VkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudCgpCiB7CiAg
ICAgQVNTRVJUKG1fc2VnbWVudCk7CiAgICAgQVNTRVJUKG1fc2VnbWVudC0+cGF0aFNlZ1R5cGUo
KSA9PSBQYXRoU2VnTGluZVRvSG9yaXpvbnRhbEFicyB8fCBtX3NlZ21lbnQtPnBhdGhTZWdUeXBl
KCkgPT0gUGF0aFNlZ0xpbmVUb0hvcml6b250YWxSZWwpOwogICAgIFNWR1BhdGhTZWdMaW5ldG9I
b3Jpem9udGFsKiBob3Jpem9udGFsID0gc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0xpbmV0b0hvcml6
b250YWwqPihtX3NlZ21lbnQuZ2V0KCkpOwotICAgIHggPSBob3Jpem9udGFsLT54KCk7Ci0gICAg
cmV0dXJuIHRydWU7CisgICAgCisgICAgTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQgc2VnbWVudDsK
KyAgICBzZWdtZW50LnggPSBob3Jpem9udGFsLT54KCk7CisgICAgcmV0dXJuIHNlZ21lbnQ7CiB9
CiAKLWJvb2wgU1ZHUGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNlTGluZVRvVmVydGljYWxTZWdtZW50
KGZsb2F0JiB5KQorT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6TGluZVRvVmVydGljYWxTZWdtZW50
PiBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnQoKQogewog
ICAgIEFTU0VSVChtX3NlZ21lbnQpOwogICAgIEFTU0VSVChtX3NlZ21lbnQtPnBhdGhTZWdUeXBl
KCkgPT0gUGF0aFNlZ0xpbmVUb1ZlcnRpY2FsQWJzIHx8IG1fc2VnbWVudC0+cGF0aFNlZ1R5cGUo
KSA9PSBQYXRoU2VnTGluZVRvVmVydGljYWxSZWwpOwogICAgIFNWR1BhdGhTZWdMaW5ldG9WZXJ0
aWNhbCogdmVydGljYWwgPSBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnTGluZXRvVmVydGljYWwqPiht
X3NlZ21lbnQuZ2V0KCkpOwotICAgIHkgPSB2ZXJ0aWNhbC0+eSgpOwotICAgIHJldHVybiB0cnVl
OworICAgIAorICAgIExpbmVUb1ZlcnRpY2FsU2VnbWVudCBzZWdtZW50OworICAgIHNlZ21lbnQu
eSA9IHZlcnRpY2FsLT55KCk7CisgICAgcmV0dXJuIHNlZ21lbnQ7CiB9CiAKLWJvb2wgU1ZHUGF0
aFNlZ0xpc3RTb3VyY2U6OnBhcnNlQ3VydmVUb0N1YmljU2VnbWVudChGbG9hdFBvaW50JiBwb2lu
dDEsIEZsb2F0UG9pbnQmIHBvaW50MiwgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCitPcHRpb25h
bDxTVkdQYXRoU291cmNlOjpDdXJ2ZVRvQ3ViaWNTZWdtZW50PiBTVkdQYXRoU2VnTGlzdFNvdXJj
ZTo6cGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KCkKIHsKICAgICBBU1NFUlQobV9zZWdtZW50KTsK
ICAgICBBU1NFUlQobV9zZWdtZW50LT5wYXRoU2VnVHlwZSgpID09IFBhdGhTZWdDdXJ2ZVRvQ3Vi
aWNBYnMgfHwgbV9zZWdtZW50LT5wYXRoU2VnVHlwZSgpID09IFBhdGhTZWdDdXJ2ZVRvQ3ViaWNS
ZWwpOwogICAgIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWMqIGN1YmljID0gc3RhdGljX2Nhc3Q8U1ZH
UGF0aFNlZ0N1cnZldG9DdWJpYyo+KG1fc2VnbWVudC5nZXQoKSk7Ci0gICAgcG9pbnQxID0gRmxv
YXRQb2ludChjdWJpYy0+eDEoKSwgY3ViaWMtPnkxKCkpOwotICAgIHBvaW50MiA9IEZsb2F0UG9p
bnQoY3ViaWMtPngyKCksIGN1YmljLT55MigpKTsKLSAgICB0YXJnZXRQb2ludCA9IEZsb2F0UG9p
bnQoY3ViaWMtPngoKSwgY3ViaWMtPnkoKSk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgCisgICAg
Q3VydmVUb0N1YmljU2VnbWVudCBzZWdtZW50OworICAgIHNlZ21lbnQucG9pbnQxID0gRmxvYXRQ
b2ludChjdWJpYy0+eDEoKSwgY3ViaWMtPnkxKCkpOworICAgIHNlZ21lbnQucG9pbnQyID0gRmxv
YXRQb2ludChjdWJpYy0+eDIoKSwgY3ViaWMtPnkyKCkpOworICAgIHNlZ21lbnQudGFyZ2V0UG9p
bnQgPSBGbG9hdFBvaW50KGN1YmljLT54KCksIGN1YmljLT55KCkpOworICAgIHJldHVybiBzZWdt
ZW50OwogfQogCi1ib29sIFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUN1cnZlVG9DdWJpY1Nt
b290aFNlZ21lbnQoRmxvYXRQb2ludCYgcG9pbnQyLCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCkK
K09wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQ+IFNWR1Bh
dGhTZWdMaXN0U291cmNlOjpwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQoKQogewogICAg
IEFTU0VSVChtX3NlZ21lbnQpOwogICAgIEFTU0VSVChtX3NlZ21lbnQtPnBhdGhTZWdUeXBlKCkg
PT0gUGF0aFNlZ0N1cnZlVG9DdWJpY1Ntb290aEFicyB8fCBtX3NlZ21lbnQtPnBhdGhTZWdUeXBl
KCkgPT0gUGF0aFNlZ0N1cnZlVG9DdWJpY1Ntb290aFJlbCk7CiAgICAgU1ZHUGF0aFNlZ0N1cnZl
dG9DdWJpY1Ntb290aCogY3ViaWNTbW9vdGggPSBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnQ3VydmV0
b0N1YmljU21vb3RoKj4obV9zZWdtZW50LmdldCgpKTsKLSAgICBwb2ludDIgPSBGbG9hdFBvaW50
KGN1YmljU21vb3RoLT54MigpLCBjdWJpY1Ntb290aC0+eTIoKSk7Ci0gICAgdGFyZ2V0UG9pbnQg
PSBGbG9hdFBvaW50KGN1YmljU21vb3RoLT54KCksIGN1YmljU21vb3RoLT55KCkpOwotICAgIHJl
dHVybiB0cnVlOworICAgIAorICAgIEN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQgc2VnbWVudDsK
KyAgICBzZWdtZW50LnBvaW50MiA9IEZsb2F0UG9pbnQoY3ViaWNTbW9vdGgtPngyKCksIGN1Ymlj
U21vb3RoLT55MigpKTsKKyAgICBzZWdtZW50LnRhcmdldFBvaW50ID0gRmxvYXRQb2ludChjdWJp
Y1Ntb290aC0+eCgpLCBjdWJpY1Ntb290aC0+eSgpKTsKKyAgICByZXR1cm4gc2VnbWVudDsKIH0K
IAotYm9vbCBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVu
dChGbG9hdFBvaW50JiBwb2ludDEsIEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQorT3B0aW9uYWw8
U1ZHUGF0aFNvdXJjZTo6Q3VydmVUb1F1YWRyYXRpY1NlZ21lbnQ+IFNWR1BhdGhTZWdMaXN0U291
cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KCkKIHsKICAgICBBU1NFUlQobV9zZWdt
ZW50KTsKICAgICBBU1NFUlQobV9zZWdtZW50LT5wYXRoU2VnVHlwZSgpID09IFBhdGhTZWdDdXJ2
ZVRvUXVhZHJhdGljQWJzIHx8IG1fc2VnbWVudC0+cGF0aFNlZ1R5cGUoKSA9PSBQYXRoU2VnQ3Vy
dmVUb1F1YWRyYXRpY1JlbCk7CiAgICAgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWMqIHF1YWRy
YXRpYyA9IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljKj4obV9zZWdtZW50
LmdldCgpKTsKLSAgICBwb2ludDEgPSBGbG9hdFBvaW50KHF1YWRyYXRpYy0+eDEoKSwgcXVhZHJh
dGljLT55MSgpKTsKLSAgICB0YXJnZXRQb2ludCA9IEZsb2F0UG9pbnQocXVhZHJhdGljLT54KCks
IHF1YWRyYXRpYy0+eSgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBDdXJ2ZVRvUXVh
ZHJhdGljU2VnbWVudCBzZWdtZW50OworICAgIHNlZ21lbnQucG9pbnQxID0gRmxvYXRQb2ludChx
dWFkcmF0aWMtPngxKCksIHF1YWRyYXRpYy0+eTEoKSk7CisgICAgc2VnbWVudC50YXJnZXRQb2lu
dCA9IEZsb2F0UG9pbnQocXVhZHJhdGljLT54KCksIHF1YWRyYXRpYy0+eSgpKTsKKyAgICByZXR1
cm4gc2VnbWVudDsKIH0KIAotYm9vbCBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VDdXJ2ZVRv
UXVhZHJhdGljU21vb3RoU2VnbWVudChGbG9hdFBvaW50JiB0YXJnZXRQb2ludCkKK09wdGlvbmFs
PFNWR1BhdGhTb3VyY2U6OkN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50PiBTVkdQYXRoU2Vn
TGlzdFNvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudCgpCiB7CiAgICAg
QVNTRVJUKG1fc2VnbWVudCk7CiAgICAgQVNTRVJUKG1fc2VnbWVudC0+cGF0aFNlZ1R5cGUoKSA9
PSBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY1Ntb290aEFicyB8fCBtX3NlZ21lbnQtPnBhdGhTZWdU
eXBlKCkgPT0gUGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNTbW9vdGhSZWwpOwogICAgIFNWR1BhdGhT
ZWdTaW5nbGVDb29yZGluYXRlKiBxdWFkcmF0aWNTbW9vdGggPSBzdGF0aWNfY2FzdDxTVkdQYXRo
U2VnU2luZ2xlQ29vcmRpbmF0ZSo+KG1fc2VnbWVudC5nZXQoKSk7Ci0gICAgdGFyZ2V0UG9pbnQg
PSBGbG9hdFBvaW50KHF1YWRyYXRpY1Ntb290aC0+eCgpLCBxdWFkcmF0aWNTbW9vdGgtPnkoKSk7
Ci0gICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21l
bnQgc2VnbWVudDsKKyAgICBzZWdtZW50LnRhcmdldFBvaW50ID0gRmxvYXRQb2ludChxdWFkcmF0
aWNTbW9vdGgtPngoKSwgcXVhZHJhdGljU21vb3RoLT55KCkpOworICAgIHJldHVybiBzZWdtZW50
OwogfQogCi1ib29sIFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUFyY1RvU2VnbWVudChmbG9h
dCYgcngsIGZsb2F0JiByeSwgZmxvYXQmIGFuZ2xlLCBib29sJiBsYXJnZUFyYywgYm9vbCYgc3dl
ZXAsIEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQorT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6QXJj
VG9TZWdtZW50PiBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VBcmNUb1NlZ21lbnQoKQogewog
ICAgIEFTU0VSVChtX3NlZ21lbnQpOwogICAgIEFTU0VSVChtX3NlZ21lbnQtPnBhdGhTZWdUeXBl
KCkgPT0gUGF0aFNlZ0FyY0FicyB8fCBtX3NlZ21lbnQtPnBhdGhTZWdUeXBlKCkgPT0gUGF0aFNl
Z0FyY1JlbCk7CiAgICAgU1ZHUGF0aFNlZ0FyYyogYXJjVG8gPSBzdGF0aWNfY2FzdDxTVkdQYXRo
U2VnQXJjKj4obV9zZWdtZW50LmdldCgpKTsKLSAgICByeCA9IGFyY1RvLT5yMSgpOwotICAgIHJ5
ID0gYXJjVG8tPnIyKCk7Ci0gICAgYW5nbGUgPSBhcmNUby0+YW5nbGUoKTsKLSAgICBsYXJnZUFy
YyA9IGFyY1RvLT5sYXJnZUFyY0ZsYWcoKTsKLSAgICBzd2VlcCA9IGFyY1RvLT5zd2VlcEZsYWco
KTsKLSAgICB0YXJnZXRQb2ludCA9IEZsb2F0UG9pbnQoYXJjVG8tPngoKSwgYXJjVG8tPnkoKSk7
Ci0gICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgQXJjVG9TZWdtZW50IHNlZ21lbnQ7CisgICAg
c2VnbWVudC5yeCA9IGFyY1RvLT5yMSgpOworICAgIHNlZ21lbnQucnkgPSBhcmNUby0+cjIoKTsK
KyAgICBzZWdtZW50LmFuZ2xlID0gYXJjVG8tPmFuZ2xlKCk7CisgICAgc2VnbWVudC5sYXJnZUFy
YyA9IGFyY1RvLT5sYXJnZUFyY0ZsYWcoKTsKKyAgICBzZWdtZW50LnN3ZWVwID0gYXJjVG8tPnN3
ZWVwRmxhZygpOworICAgIHNlZ21lbnQudGFyZ2V0UG9pbnQgPSBGbG9hdFBvaW50KGFyY1RvLT54
KCksIGFyY1RvLT55KCkpOworICAgIHJldHVybiBzZWdtZW50OwogfQogCiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFNlZ0xpc3RTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFNlZ0xpc3RTb3VyY2UuaAkocmV2aXNpb24gMjYzMTc2KQor
KysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTZWdMaXN0U291cmNlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM2LDE4ICszNiwxOCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGJvb2wgaGFzTW9y
ZURhdGEoKSBjb25zdCBmaW5hbDsKICAgICBib29sIG1vdmVUb05leHRUb2tlbigpIGZpbmFsIHsg
cmV0dXJuIHRydWU7IH0KLSAgICBib29sIHBhcnNlU1ZHU2VnbWVudFR5cGUoU1ZHUGF0aFNlZ1R5
cGUmKSBmaW5hbDsKICAgICBTVkdQYXRoU2VnVHlwZSBuZXh0Q29tbWFuZChTVkdQYXRoU2VnVHlw
ZSkgZmluYWw7CiAKLSAgICBib29sIHBhcnNlTW92ZVRvU2VnbWVudChGbG9hdFBvaW50JikgZmlu
YWw7Ci0gICAgYm9vbCBwYXJzZUxpbmVUb1NlZ21lbnQoRmxvYXRQb2ludCYpIGZpbmFsOwotICAg
IGJvb2wgcGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudChmbG9hdCYpIGZpbmFsOwotICAgIGJv
b2wgcGFyc2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnQoZmxvYXQmKSBmaW5hbDsKLSAgICBib29sIHBh
cnNlQ3VydmVUb0N1YmljU2VnbWVudChGbG9hdFBvaW50JiwgRmxvYXRQb2ludCYsIEZsb2F0UG9p
bnQmKSBmaW5hbDsKLSAgICBib29sIHBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudChGbG9h
dFBvaW50JiwgRmxvYXRQb2ludCYpIGZpbmFsOwotICAgIGJvb2wgcGFyc2VDdXJ2ZVRvUXVhZHJh
dGljU2VnbWVudChGbG9hdFBvaW50JiwgRmxvYXRQb2ludCYpIGZpbmFsOwotICAgIGJvb2wgcGFy
c2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudChGbG9hdFBvaW50JikgZmluYWw7Ci0gICAg
Ym9vbCBwYXJzZUFyY1RvU2VnbWVudChmbG9hdCYsIGZsb2F0JiwgZmxvYXQmLCBib29sJiwgYm9v
bCYsIEZsb2F0UG9pbnQmKSBmaW5hbDsKKyAgICBPcHRpb25hbDxTVkdQYXRoU2VnVHlwZT4gcGFy
c2VTVkdTZWdtZW50VHlwZSgpIGZpbmFsOworICAgIE9wdGlvbmFsPE1vdmVUb1NlZ21lbnQ+IHBh
cnNlTW92ZVRvU2VnbWVudCgpIGZpbmFsOworICAgIE9wdGlvbmFsPExpbmVUb1NlZ21lbnQ+IHBh
cnNlTGluZVRvU2VnbWVudCgpIGZpbmFsOworICAgIE9wdGlvbmFsPExpbmVUb0hvcml6b250YWxT
ZWdtZW50PiBwYXJzZUxpbmVUb0hvcml6b250YWxTZWdtZW50KCkgZmluYWw7CisgICAgT3B0aW9u
YWw8TGluZVRvVmVydGljYWxTZWdtZW50PiBwYXJzZUxpbmVUb1ZlcnRpY2FsU2VnbWVudCgpIGZp
bmFsOworICAgIE9wdGlvbmFsPEN1cnZlVG9DdWJpY1NlZ21lbnQ+IHBhcnNlQ3VydmVUb0N1Ymlj
U2VnbWVudCgpIGZpbmFsOworICAgIE9wdGlvbmFsPEN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQ+
IHBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudCgpIGZpbmFsOworICAgIE9wdGlvbmFsPEN1
cnZlVG9RdWFkcmF0aWNTZWdtZW50PiBwYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KCkgZmlu
YWw7CisgICAgT3B0aW9uYWw8Q3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQ+IHBhcnNlQ3Vy
dmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQoKSBmaW5hbDsKKyAgICBPcHRpb25hbDxBcmNUb1Nl
Z21lbnQ+IHBhcnNlQXJjVG9TZWdtZW50KCkgZmluYWw7CiAKICAgICBjb25zdCBTVkdQYXRoU2Vn
TGlzdCYgbV9wYXRoU2VnTGlzdDsKICAgICBSZWZQdHI8U1ZHUGF0aFNlZz4gbV9zZWdtZW50OwpJ
bmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTb3VyY2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFNvdXJjZS5oCShyZXZpc2lvbiAyNjMxNzYpCisrKyBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMywx
OCArMzMsNjMgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIGhhc01vcmVEYXRhKCkgY29u
c3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBtb3ZlVG9OZXh0VG9rZW4oKSA9IDA7Ci0gICAgdmly
dHVhbCBib29sIHBhcnNlU1ZHU2VnbWVudFR5cGUoU1ZHUGF0aFNlZ1R5cGUmKSA9IDA7CiAgICAg
dmlydHVhbCBTVkdQYXRoU2VnVHlwZSBuZXh0Q29tbWFuZChTVkdQYXRoU2VnVHlwZSBwcmV2aW91
c0NvbW1hbmQpID0gMDsKIAotICAgIHZpcnR1YWwgYm9vbCBwYXJzZU1vdmVUb1NlZ21lbnQoRmxv
YXRQb2ludCYpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VMaW5lVG9TZWdtZW50KEZsb2F0
UG9pbnQmKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHBhcnNlTGluZVRvSG9yaXpvbnRhbFNlZ21l
bnQoZmxvYXQmKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHBhcnNlTGluZVRvVmVydGljYWxTZWdt
ZW50KGZsb2F0JikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBwYXJzZUN1cnZlVG9DdWJpY1NlZ21l
bnQoRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmLCBGbG9hdFBvaW50JikgPSAwOwotICAgIHZpcnR1
YWwgYm9vbCBwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQoRmxvYXRQb2ludCYsIEZsb2F0
UG9pbnQmKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21l
bnQoRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHBhcnNl
Q3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQoRmxvYXRQb2ludCYpID0gMDsKLSAgICB2aXJ0
dWFsIGJvb2wgcGFyc2VBcmNUb1NlZ21lbnQoZmxvYXQmLCBmbG9hdCYsIGZsb2F0JiwgYm9vbCYs
IGJvb2wmLCBGbG9hdFBvaW50JikgPSAwOworICAgIHZpcnR1YWwgT3B0aW9uYWw8U1ZHUGF0aFNl
Z1R5cGU+IHBhcnNlU1ZHU2VnbWVudFR5cGUoKSA9IDA7CisKKyAgICBzdHJ1Y3QgTW92ZVRvU2Vn
bWVudCB7CisgICAgICAgIEZsb2F0UG9pbnQgdGFyZ2V0UG9pbnQ7CisgICAgfTsKKyAgICB2aXJ0
dWFsIE9wdGlvbmFsPE1vdmVUb1NlZ21lbnQ+IHBhcnNlTW92ZVRvU2VnbWVudCgpID0gMDsKKwor
ICAgIHN0cnVjdCBMaW5lVG9TZWdtZW50IHsKKyAgICAgICAgRmxvYXRQb2ludCB0YXJnZXRQb2lu
dDsKKyAgICB9OworICAgIHZpcnR1YWwgT3B0aW9uYWw8TGluZVRvU2VnbWVudD4gcGFyc2VMaW5l
VG9TZWdtZW50KCkgPSAwOworCisgICAgc3RydWN0IExpbmVUb0hvcml6b250YWxTZWdtZW50IHsK
KyAgICAgICAgZmxvYXQgeCA9IDA7CisgICAgfTsKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPExpbmVU
b0hvcml6b250YWxTZWdtZW50PiBwYXJzZUxpbmVUb0hvcml6b250YWxTZWdtZW50KCkgPSAwOwor
CisgICAgc3RydWN0IExpbmVUb1ZlcnRpY2FsU2VnbWVudCB7CisgICAgICAgIGZsb2F0IHkgPSAw
OworICAgIH07CisgICAgdmlydHVhbCBPcHRpb25hbDxMaW5lVG9WZXJ0aWNhbFNlZ21lbnQ+IHBh
cnNlTGluZVRvVmVydGljYWxTZWdtZW50KCkgPSAwOworCisgICAgc3RydWN0IEN1cnZlVG9DdWJp
Y1NlZ21lbnQgeworICAgICAgICBGbG9hdFBvaW50IHBvaW50MTsKKyAgICAgICAgRmxvYXRQb2lu
dCBwb2ludDI7CisgICAgICAgIEZsb2F0UG9pbnQgdGFyZ2V0UG9pbnQ7CisgICAgfTsKKyAgICB2
aXJ0dWFsIE9wdGlvbmFsPEN1cnZlVG9DdWJpY1NlZ21lbnQ+IHBhcnNlQ3VydmVUb0N1YmljU2Vn
bWVudCgpID0gMDsKKworICAgIHN0cnVjdCBDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50IHsKKyAg
ICAgICAgRmxvYXRQb2ludCBwb2ludDI7CisgICAgICAgIEZsb2F0UG9pbnQgdGFyZ2V0UG9pbnQ7
CisgICAgfTsKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPEN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQ+
IHBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudCgpID0gMDsKKworICAgIHN0cnVjdCBDdXJ2
ZVRvUXVhZHJhdGljU2VnbWVudCB7CisgICAgICAgIEZsb2F0UG9pbnQgcG9pbnQxOworICAgICAg
ICBGbG9hdFBvaW50IHRhcmdldFBvaW50OworICAgIH07CisgICAgdmlydHVhbCBPcHRpb25hbDxD
dXJ2ZVRvUXVhZHJhdGljU2VnbWVudD4gcGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCgpID0g
MDsKKworICAgIHN0cnVjdCBDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudCB7CisgICAgICAg
IEZsb2F0UG9pbnQgdGFyZ2V0UG9pbnQ7CisgICAgfTsKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPEN1
cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50PiBwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhT
ZWdtZW50KCkgPSAwOworCisgICAgc3RydWN0IEFyY1RvU2VnbWVudCB7CisgICAgICAgIGZsb2F0
IHJ4ID0gMDsKKyAgICAgICAgZmxvYXQgcnkgPSAwOworICAgICAgICBmbG9hdCBhbmdsZSA9IDA7
CisgICAgICAgIGJvb2wgbGFyZ2VBcmMgPSBmYWxzZTsKKyAgICAgICAgYm9vbCBzd2VlcCA9IGZh
bHNlOworICAgICAgICBGbG9hdFBvaW50IHRhcmdldFBvaW50OworICAgIH07CisgICAgdmlydHVh
bCBPcHRpb25hbDxBcmNUb1NlZ21lbnQ+IHBhcnNlQXJjVG9TZWdtZW50KCkgPSAwOwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhT
dHJpbmdTb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRo
U3RyaW5nU291cmNlLmNwcAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1BhdGhTdHJpbmdTb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSwxOTUgKzU1LDI4
MCBAQCBib29sIFNWR1BhdGhTdHJpbmdTb3VyY2U6Om1vdmVUb05leHRUb2tlCiAgICAgcmV0dXJu
IHNraXBPcHRpb25hbFNWR1NwYWNlcyhtX2N1cnJlbnQubV9jaGFyYWN0ZXIxNiwgbV9lbmQubV9j
aGFyYWN0ZXIxNik7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3Rh
dGljIGJvb2wgcGFyc2VTVkdTZWdtZW50VHlwZUhlbHBlcihjb25zdCBDaGFyYWN0ZXJUeXBlKiYg
Y3VycmVudCwgU1ZHUGF0aFNlZ1R5cGUmIHBhdGhTZWdUeXBlKQordGVtcGxhdGUgPHR5cGVuYW1l
IENoYXJhY3RlclR5cGU+IHN0YXRpYyBPcHRpb25hbDxTVkdQYXRoU2VnVHlwZT4gbmV4dENvbW1h
bmRIZWxwZXIoY29uc3QgQ2hhcmFjdGVyVHlwZSomIGN1cnJlbnQsIFNWR1BhdGhTZWdUeXBlIHBy
ZXZpb3VzQ29tbWFuZCkKK3sKKyAgICAvLyBDaGVjayBmb3IgcmVtYWluaW5nIGNvb3JkaW5hdGVz
IGluIHRoZSBjdXJyZW50IGNvbW1hbmQuCisgICAgaWYgKCgqY3VycmVudCA9PSAnKycgfHwgKmN1
cnJlbnQgPT0gJy0nIHx8ICpjdXJyZW50ID09ICcuJyB8fCBpc0FTQ0lJRGlnaXQoKmN1cnJlbnQp
KQorICAgICAgICAmJiBwcmV2aW91c0NvbW1hbmQgIT0gUGF0aFNlZ0Nsb3NlUGF0aCkgeworICAg
ICAgICBpZiAocHJldmlvdXNDb21tYW5kID09IFBhdGhTZWdNb3ZlVG9BYnMpCisgICAgICAgICAg
ICByZXR1cm4gUGF0aFNlZ0xpbmVUb0FiczsKKyAgICAgICAgaWYgKHByZXZpb3VzQ29tbWFuZCA9
PSBQYXRoU2VnTW92ZVRvUmVsKQorICAgICAgICAgICAgcmV0dXJuIFBhdGhTZWdMaW5lVG9SZWw7
CisgICAgICAgIHJldHVybiBwcmV2aW91c0NvbW1hbmQ7CisgICAgfQorCisgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKK30KKworU1ZHUGF0aFNlZ1R5cGUgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6bmV4
dENvbW1hbmQoU1ZHUGF0aFNlZ1R5cGUgcHJldmlvdXNDb21tYW5kKQoreworICAgIGlmIChtX2lz
OEJpdFNvdXJjZSkgeworICAgICAgICBpZiAoYXV0byBuZXh0Q29tbWFuZCA9IG5leHRDb21tYW5k
SGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjgsIHByZXZpb3VzQ29tbWFuZCkpCisgICAgICAg
ICAgICByZXR1cm4gKm5leHRDb21tYW5kOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChhdXRv
IG5leHRDb21tYW5kID0gbmV4dENvbW1hbmRIZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYs
IHByZXZpb3VzQ29tbWFuZCkpCisgICAgICAgICAgICByZXR1cm4gKm5leHRDb21tYW5kOworICAg
IH0KKworICAgIHJldHVybiAqcGFyc2VTVkdTZWdtZW50VHlwZSgpOworfQorCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIFNWR1BhdGhTZWdUeXBlIHBhcnNlU1ZHU2Vn
bWVudFR5cGVIZWxwZXIoY29uc3QgQ2hhcmFjdGVyVHlwZSomIGN1cnJlbnQpCiB7CiAgICAgc3dp
dGNoICgqKGN1cnJlbnQrKykpIHsKICAgICBjYXNlICdaJzoKICAgICBjYXNlICd6JzoKLSAgICAg
ICAgcGF0aFNlZ1R5cGUgPSBQYXRoU2VnQ2xvc2VQYXRoOwotICAgICAgICBicmVhazsKKyAgICAg
ICAgcmV0dXJuIFBhdGhTZWdDbG9zZVBhdGg7CiAgICAgY2FzZSAnTSc6Ci0gICAgICAgIHBhdGhT
ZWdUeXBlID0gUGF0aFNlZ01vdmVUb0FiczsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVy
biBQYXRoU2VnTW92ZVRvQWJzOwogICAgIGNhc2UgJ20nOgotICAgICAgICBwYXRoU2VnVHlwZSA9
IFBhdGhTZWdNb3ZlVG9SZWw7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gUGF0aFNl
Z01vdmVUb1JlbDsKICAgICBjYXNlICdMJzoKLSAgICAgICAgcGF0aFNlZ1R5cGUgPSBQYXRoU2Vn
TGluZVRvQWJzOwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIFBhdGhTZWdMaW5lVG9B
YnM7CiAgICAgY2FzZSAnbCc6Ci0gICAgICAgIHBhdGhTZWdUeXBlID0gUGF0aFNlZ0xpbmVUb1Jl
bDsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBQYXRoU2VnTGluZVRvUmVsOwogICAg
IGNhc2UgJ0MnOgotICAgICAgICBwYXRoU2VnVHlwZSA9IFBhdGhTZWdDdXJ2ZVRvQ3ViaWNBYnM7
Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gUGF0aFNlZ0N1cnZlVG9DdWJpY0FiczsK
ICAgICBjYXNlICdjJzoKLSAgICAgICAgcGF0aFNlZ1R5cGUgPSBQYXRoU2VnQ3VydmVUb0N1Ymlj
UmVsOwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIFBhdGhTZWdDdXJ2ZVRvQ3ViaWNS
ZWw7CiAgICAgY2FzZSAnUSc6Ci0gICAgICAgIHBhdGhTZWdUeXBlID0gUGF0aFNlZ0N1cnZlVG9R
dWFkcmF0aWNBYnM7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gUGF0aFNlZ0N1cnZl
VG9RdWFkcmF0aWNBYnM7CiAgICAgY2FzZSAncSc6Ci0gICAgICAgIHBhdGhTZWdUeXBlID0gUGF0
aFNlZ0N1cnZlVG9RdWFkcmF0aWNSZWw7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4g
UGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNSZWw7CiAgICAgY2FzZSAnQSc6Ci0gICAgICAgIHBhdGhT
ZWdUeXBlID0gUGF0aFNlZ0FyY0FiczsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBQ
YXRoU2VnQXJjQWJzOwogICAgIGNhc2UgJ2EnOgotICAgICAgICBwYXRoU2VnVHlwZSA9IFBhdGhT
ZWdBcmNSZWw7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gUGF0aFNlZ0FyY1JlbDsK
ICAgICBjYXNlICdIJzoKLSAgICAgICAgcGF0aFNlZ1R5cGUgPSBQYXRoU2VnTGluZVRvSG9yaXpv
bnRhbEFiczsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBQYXRoU2VnTGluZVRvSG9y
aXpvbnRhbEFiczsKICAgICBjYXNlICdoJzoKLSAgICAgICAgcGF0aFNlZ1R5cGUgPSBQYXRoU2Vn
TGluZVRvSG9yaXpvbnRhbFJlbDsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBQYXRo
U2VnTGluZVRvSG9yaXpvbnRhbFJlbDsKICAgICBjYXNlICdWJzoKLSAgICAgICAgcGF0aFNlZ1R5
cGUgPSBQYXRoU2VnTGluZVRvVmVydGljYWxBYnM7Ci0gICAgICAgIGJyZWFrOworICAgICAgICBy
ZXR1cm4gUGF0aFNlZ0xpbmVUb1ZlcnRpY2FsQWJzOwogICAgIGNhc2UgJ3YnOgotICAgICAgICBw
YXRoU2VnVHlwZSA9IFBhdGhTZWdMaW5lVG9WZXJ0aWNhbFJlbDsKLSAgICAgICAgYnJlYWs7Cisg
ICAgICAgIHJldHVybiBQYXRoU2VnTGluZVRvVmVydGljYWxSZWw7CiAgICAgY2FzZSAnUyc6Ci0g
ICAgICAgIHBhdGhTZWdUeXBlID0gUGF0aFNlZ0N1cnZlVG9DdWJpY1Ntb290aEFiczsKLSAgICAg
ICAgYnJlYWs7CisgICAgICAgIHJldHVybiBQYXRoU2VnQ3VydmVUb0N1YmljU21vb3RoQWJzOwog
ICAgIGNhc2UgJ3MnOgotICAgICAgICBwYXRoU2VnVHlwZSA9IFBhdGhTZWdDdXJ2ZVRvQ3ViaWNT
bW9vdGhSZWw7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gUGF0aFNlZ0N1cnZlVG9D
dWJpY1Ntb290aFJlbDsKICAgICBjYXNlICdUJzoKLSAgICAgICAgcGF0aFNlZ1R5cGUgPSBQYXRo
U2VnQ3VydmVUb1F1YWRyYXRpY1Ntb290aEFiczsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJl
dHVybiBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY1Ntb290aEFiczsKICAgICBjYXNlICd0JzoKLSAg
ICAgICAgcGF0aFNlZ1R5cGUgPSBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY1Ntb290aFJlbDsKLSAg
ICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY1Ntb290
aFJlbDsKICAgICBkZWZhdWx0OgotICAgICAgICBwYXRoU2VnVHlwZSA9IFBhdGhTZWdVbmtub3du
OworICAgICAgICByZXR1cm4gUGF0aFNlZ1Vua25vd247CiAgICAgfQotICAgIHJldHVybiB0cnVl
OwogfQogCi1ib29sIFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlU1ZHU2VnbWVudFR5cGUoU1ZH
UGF0aFNlZ1R5cGUmIHBhdGhTZWdUeXBlKQorT3B0aW9uYWw8U1ZHUGF0aFNlZ1R5cGU+IFNWR1Bh
dGhTdHJpbmdTb3VyY2U6OnBhcnNlU1ZHU2VnbWVudFR5cGUoKQogewogICAgIGlmIChtX2lzOEJp
dFNvdXJjZSkKLSAgICAgICAgcmV0dXJuIHBhcnNlU1ZHU2VnbWVudFR5cGVIZWxwZXIobV9jdXJy
ZW50Lm1fY2hhcmFjdGVyOCwgcGF0aFNlZ1R5cGUpOwotICAgIHJldHVybiBwYXJzZVNWR1NlZ21l
bnRUeXBlSGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjE2LCBwYXRoU2VnVHlwZSk7CisgICAg
ICAgIHJldHVybiBwYXJzZVNWR1NlZ21lbnRUeXBlSGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3Rl
cjgpOworICAgIHJldHVybiBwYXJzZVNWR1NlZ21lbnRUeXBlSGVscGVyKG1fY3VycmVudC5tX2No
YXJhY3RlcjE2KTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0
aWMgYm9vbCBuZXh0Q29tbWFuZEhlbHBlcihjb25zdCBDaGFyYWN0ZXJUeXBlKiYgY3VycmVudCwg
U1ZHUGF0aFNlZ1R5cGUgcHJldmlvdXNDb21tYW5kLCBTVkdQYXRoU2VnVHlwZSYgbmV4dENvbW1h
bmQpCitPcHRpb25hbDxTVkdQYXRoU291cmNlOjpNb3ZlVG9TZWdtZW50PiBTVkdQYXRoU3RyaW5n
U291cmNlOjpwYXJzZU1vdmVUb1NlZ21lbnQoKQogewotICAgIC8vIENoZWNrIGZvciByZW1haW5p
bmcgY29vcmRpbmF0ZXMgaW4gdGhlIGN1cnJlbnQgY29tbWFuZC4KLSAgICBpZiAoKCpjdXJyZW50
ID09ICcrJyB8fCAqY3VycmVudCA9PSAnLScgfHwgKmN1cnJlbnQgPT0gJy4nIHx8IGlzQVNDSUlE
aWdpdCgqY3VycmVudCkpCi0gICAgICAgICYmIHByZXZpb3VzQ29tbWFuZCAhPSBQYXRoU2VnQ2xv
c2VQYXRoKSB7Ci0gICAgICAgIGlmIChwcmV2aW91c0NvbW1hbmQgPT0gUGF0aFNlZ01vdmVUb0Fi
cykgewotICAgICAgICAgICAgbmV4dENvbW1hbmQgPSBQYXRoU2VnTGluZVRvQWJzOwotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHByZXZpb3VzQ29tbWFu
ZCA9PSBQYXRoU2VnTW92ZVRvUmVsKSB7Ci0gICAgICAgICAgICBuZXh0Q29tbWFuZCA9IFBhdGhT
ZWdMaW5lVG9SZWw7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAg
ICBuZXh0Q29tbWFuZCA9IHByZXZpb3VzQ29tbWFuZDsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQorICAgIGF1dG8gaGVscGVyID0gW10oY29uc3QgYXV0byomIGN1cnJlbnQsIGNvbnN0IGF1
dG8qIGVuZCkgLT4gT3B0aW9uYWw8TW92ZVRvU2VnbWVudD4geworICAgICAgICBhdXRvIHRhcmdl
dFBvaW50ID0gcGFyc2VGbG9hdFBvaW50KGN1cnJlbnQsIGVuZCk7CisgICAgICAgIGlmICghdGFy
Z2V0UG9pbnQpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICAKKyAg
ICAgICAgTW92ZVRvU2VnbWVudCBzZWdtZW50OworICAgICAgICBzZWdtZW50LnRhcmdldFBvaW50
ID0gV1RGTW92ZSgqdGFyZ2V0UG9pbnQpOworICAgICAgICByZXR1cm4gc2VnbWVudDsKKyAgICB9
OwogCi0gICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX2lzOEJpdFNvdXJjZSkKKyAgICAgICAg
cmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXI4LCBtX2VuZC5tX2NoYXJhY3Rlcjgp
OworICAgIHJldHVybiBoZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYsIG1fZW5kLm1fY2hh
cmFjdGVyMTYpOwogfQogCi1TVkdQYXRoU2VnVHlwZSBTVkdQYXRoU3RyaW5nU291cmNlOjpuZXh0
Q29tbWFuZChTVkdQYXRoU2VnVHlwZSBwcmV2aW91c0NvbW1hbmQpCitPcHRpb25hbDxTVkdQYXRo
U291cmNlOjpMaW5lVG9TZWdtZW50PiBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUxpbmVUb1Nl
Z21lbnQoKQogewotICAgIFNWR1BhdGhTZWdUeXBlIG5leHRDb21tYW5kOwotICAgIGlmIChtX2lz
OEJpdFNvdXJjZSkgewotICAgICAgICBpZiAobmV4dENvbW1hbmRIZWxwZXIobV9jdXJyZW50Lm1f
Y2hhcmFjdGVyOCwgcHJldmlvdXNDb21tYW5kLCBuZXh0Q29tbWFuZCkpCi0gICAgICAgICAgICBy
ZXR1cm4gbmV4dENvbW1hbmQ7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKG5leHRDb21tYW5k
SGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjE2LCBwcmV2aW91c0NvbW1hbmQsIG5leHRDb21t
YW5kKSkKLSAgICAgICAgICAgIHJldHVybiBuZXh0Q29tbWFuZDsKLSAgICB9CisgICAgYXV0byBo
ZWxwZXIgPSBbXShjb25zdCBhdXRvKiYgY3VycmVudCwgY29uc3QgYXV0byogZW5kKSAtPiBPcHRp
b25hbDxMaW5lVG9TZWdtZW50PiB7CisgICAgICAgIGF1dG8gdGFyZ2V0UG9pbnQgPSBwYXJzZUZs
b2F0UG9pbnQoY3VycmVudCwgZW5kKTsKKyAgICAgICAgaWYgKCF0YXJnZXRQb2ludCkKKyAgICAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIAorICAgICAgICBMaW5lVG9TZWdt
ZW50IHNlZ21lbnQ7CisgICAgICAgIHNlZ21lbnQudGFyZ2V0UG9pbnQgPSBXVEZNb3ZlKCp0YXJn
ZXRQb2ludCk7CisgICAgICAgIHJldHVybiBzZWdtZW50OworICAgIH07CiAKLSAgICBwYXJzZVNW
R1NlZ21lbnRUeXBlKG5leHRDb21tYW5kKTsKLSAgICByZXR1cm4gbmV4dENvbW1hbmQ7Ci19Ci0K
LWJvb2wgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VNb3ZlVG9TZWdtZW50KEZsb2F0UG9pbnQm
IHRhcmdldFBvaW50KQotewogICAgIGlmIChtX2lzOEJpdFNvdXJjZSkKLSAgICAgICAgcmV0dXJu
IHBhcnNlRmxvYXRQb2ludChtX2N1cnJlbnQubV9jaGFyYWN0ZXI4LCBtX2VuZC5tX2NoYXJhY3Rl
cjgsIHRhcmdldFBvaW50KTsKLSAgICByZXR1cm4gcGFyc2VGbG9hdFBvaW50KG1fY3VycmVudC5t
X2NoYXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2LCB0YXJnZXRQb2ludCk7CisgICAgICAg
IHJldHVybiBoZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4
KTsKKyAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjE2LCBtX2VuZC5tX2No
YXJhY3RlcjE2KTsKIH0KIAotYm9vbCBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUxpbmVUb1Nl
Z21lbnQoRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCitPcHRpb25hbDxTVkdQYXRoU291cmNlOjpM
aW5lVG9Ib3Jpem9udGFsU2VnbWVudD4gU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VMaW5lVG9I
b3Jpem9udGFsU2VnbWVudCgpCiB7Ci0gICAgaWYgKG1faXM4Qml0U291cmNlKQotICAgICAgICBy
ZXR1cm4gcGFyc2VGbG9hdFBvaW50KG1fY3VycmVudC5tX2NoYXJhY3RlcjgsIG1fZW5kLm1fY2hh
cmFjdGVyOCwgdGFyZ2V0UG9pbnQpOwotICAgIHJldHVybiBwYXJzZUZsb2F0UG9pbnQobV9jdXJy
ZW50Lm1fY2hhcmFjdGVyMTYsIG1fZW5kLm1fY2hhcmFjdGVyMTYsIHRhcmdldFBvaW50KTsKLX0K
KyAgICBhdXRvIGhlbHBlciA9IFtdKGNvbnN0IGF1dG8qJiBjdXJyZW50LCBjb25zdCBhdXRvKiBl
bmQpIC0+IE9wdGlvbmFsPExpbmVUb0hvcml6b250YWxTZWdtZW50PiB7CisgICAgICAgIGF1dG8g
eCA9IHBhcnNlTnVtYmVyKGN1cnJlbnQsIGVuZCk7CisgICAgICAgIGlmICgheCkKKyAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIAorICAgICAgICBMaW5lVG9Ib3Jpem9u
dGFsU2VnbWVudCBzZWdtZW50OworICAgICAgICBzZWdtZW50LnggPSAqeDsKKyAgICAgICAgcmV0
dXJuIHNlZ21lbnQ7CisgICAgfTsKIAotYm9vbCBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUxp
bmVUb0hvcml6b250YWxTZWdtZW50KGZsb2F0JiB4KQotewogICAgIGlmIChtX2lzOEJpdFNvdXJj
ZSkKLSAgICAgICAgcmV0dXJuIHBhcnNlTnVtYmVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjgsIG1f
ZW5kLm1fY2hhcmFjdGVyOCwgeCk7Ci0gICAgcmV0dXJuIHBhcnNlTnVtYmVyKG1fY3VycmVudC5t
X2NoYXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2LCB4KTsKKyAgICAgICAgcmV0dXJuIGhl
bHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXI4LCBtX2VuZC5tX2NoYXJhY3RlcjgpOworICAgIHJl
dHVybiBoZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYsIG1fZW5kLm1fY2hhcmFjdGVyMTYp
OwogfQogCi1ib29sIFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlTGluZVRvVmVydGljYWxTZWdt
ZW50KGZsb2F0JiB5KQorT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6TGluZVRvVmVydGljYWxTZWdt
ZW50PiBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUxpbmVUb1ZlcnRpY2FsU2VnbWVudCgpCiB7
CisgICAgYXV0byBoZWxwZXIgPSBbXShjb25zdCBhdXRvKiYgY3VycmVudCwgY29uc3QgYXV0byog
ZW5kKSAtPiBPcHRpb25hbDxMaW5lVG9WZXJ0aWNhbFNlZ21lbnQ+IHsKKyAgICAgICAgYXV0byB5
ID0gcGFyc2VOdW1iZXIoY3VycmVudCwgZW5kKTsKKyAgICAgICAgaWYgKCF5KQorICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgCisgICAgICAgIExpbmVUb1ZlcnRpY2Fs
U2VnbWVudCBzZWdtZW50OworICAgICAgICBzZWdtZW50LnkgPSAqeTsKKyAgICAgICAgcmV0dXJu
IHNlZ21lbnQ7CisgICAgfTsKKwogICAgIGlmIChtX2lzOEJpdFNvdXJjZSkKLSAgICAgICAgcmV0
dXJuIHBhcnNlTnVtYmVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjgsIG1fZW5kLm1fY2hhcmFjdGVy
OCwgeSk7Ci0gICAgcmV0dXJuIHBhcnNlTnVtYmVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjE2LCBt
X2VuZC5tX2NoYXJhY3RlcjE2LCB5KTsKKyAgICAgICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQu
bV9jaGFyYWN0ZXI4LCBtX2VuZC5tX2NoYXJhY3RlcjgpOworICAgIHJldHVybiBoZWxwZXIobV9j
dXJyZW50Lm1fY2hhcmFjdGVyMTYsIG1fZW5kLm1fY2hhcmFjdGVyMTYpOwogfQogCi1ib29sIFNW
R1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlQ3VydmVUb0N1YmljU2VnbWVudChGbG9hdFBvaW50JiBw
b2ludDEsIEZsb2F0UG9pbnQmIHBvaW50MiwgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCitPcHRp
b25hbDxTVkdQYXRoU291cmNlOjpDdXJ2ZVRvQ3ViaWNTZWdtZW50PiBTVkdQYXRoU3RyaW5nU291
cmNlOjpwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQoKQogeworICAgIGF1dG8gaGVscGVyID0gW10o
Y29uc3QgYXV0byomIGN1cnJlbnQsIGNvbnN0IGF1dG8qIGVuZCkgLT4gT3B0aW9uYWw8Q3VydmVU
b0N1YmljU2VnbWVudD4geworICAgICAgICBhdXRvIHBvaW50MSA9IHBhcnNlRmxvYXRQb2ludChj
dXJyZW50LCBlbmQpOworICAgICAgICBpZiAoIXBvaW50MSkKKyAgICAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CisKKyAgICAgICAgYXV0byBwb2ludDIgPSBwYXJzZUZsb2F0UG9pbnQoY3Vy
cmVudCwgZW5kKTsKKyAgICAgICAgaWYgKCFwb2ludDIpCisgICAgICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OworCisgICAgICAgIGF1dG8gdGFyZ2V0UG9pbnQgPSBwYXJzZUZsb2F0UG9pbnQo
Y3VycmVudCwgZW5kKTsKKyAgICAgICAgaWYgKCF0YXJnZXRQb2ludCkKKyAgICAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICAgICAgQ3VydmVUb0N1YmljU2VnbWVudCBzZWdtZW50
OworICAgICAgICBzZWdtZW50LnBvaW50MSA9ICpwb2ludDE7CisgICAgICAgIHNlZ21lbnQucG9p
bnQyID0gKnBvaW50MjsKKyAgICAgICAgc2VnbWVudC50YXJnZXRQb2ludCA9ICp0YXJnZXRQb2lu
dDsKKyAgICAgICAgcmV0dXJuIHNlZ21lbnQ7CisgICAgfTsKKwogICAgIGlmIChtX2lzOEJpdFNv
dXJjZSkKLSAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXRQb2ludDMobV9jdXJyZW50Lm1fY2hhcmFj
dGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4LCBwb2ludDEsIHBvaW50MiwgdGFyZ2V0UG9pbnQpOwot
ICAgIHJldHVybiBwYXJzZUZsb2F0UG9pbnQzKG1fY3VycmVudC5tX2NoYXJhY3RlcjE2LCBtX2Vu
ZC5tX2NoYXJhY3RlcjE2LCBwb2ludDEsIHBvaW50MiwgdGFyZ2V0UG9pbnQpOworICAgICAgICBy
ZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjgsIG1fZW5kLm1fY2hhcmFjdGVyOCk7
CisgICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXIxNiwgbV9lbmQubV9jaGFy
YWN0ZXIxNik7CiB9CiAKLWJvb2wgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VDdXJ2ZVRvQ3Vi
aWNTbW9vdGhTZWdtZW50KEZsb2F0UG9pbnQmIHBvaW50MSwgRmxvYXRQb2ludCYgdGFyZ2V0UG9p
bnQpCitPcHRpb25hbDxTVkdQYXRoU291cmNlOjpDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50PiBT
VkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQoKQogewor
ICAgIGF1dG8gaGVscGVyID0gW10oY29uc3QgYXV0byomIGN1cnJlbnQsIGNvbnN0IGF1dG8qIGVu
ZCkgLT4gT3B0aW9uYWw8Q3VydmVUb0N1YmljU21vb3RoU2VnbWVudD4geworICAgICAgICBhdXRv
IHBvaW50MiA9IHBhcnNlRmxvYXRQb2ludChjdXJyZW50LCBlbmQpOworICAgICAgICBpZiAoIXBv
aW50MikKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICAgICAgYXV0byB0
YXJnZXRQb2ludCA9IHBhcnNlRmxvYXRQb2ludChjdXJyZW50LCBlbmQpOworICAgICAgICBpZiAo
IXRhcmdldFBvaW50KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgICAg
ICBDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50IHNlZ21lbnQ7CisgICAgICAgIHNlZ21lbnQucG9p
bnQyID0gKnBvaW50MjsKKyAgICAgICAgc2VnbWVudC50YXJnZXRQb2ludCA9ICp0YXJnZXRQb2lu
dDsKKyAgICAgICAgcmV0dXJuIHNlZ21lbnQ7CisgICAgfTsKKwogICAgIGlmIChtX2lzOEJpdFNv
dXJjZSkKLSAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXRQb2ludDIobV9jdXJyZW50Lm1fY2hhcmFj
dGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4LCBwb2ludDEsIHRhcmdldFBvaW50KTsKLSAgICByZXR1
cm4gcGFyc2VGbG9hdFBvaW50MihtX2N1cnJlbnQubV9jaGFyYWN0ZXIxNiwgbV9lbmQubV9jaGFy
YWN0ZXIxNiwgcG9pbnQxLCB0YXJnZXRQb2ludCk7CisgICAgICAgIHJldHVybiBoZWxwZXIobV9j
dXJyZW50Lm1fY2hhcmFjdGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4KTsKKyAgICByZXR1cm4gaGVs
cGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2KTsKIH0KIAot
Ym9vbCBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KEZs
b2F0UG9pbnQmIHBvaW50MiwgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCitPcHRpb25hbDxTVkdQ
YXRoU291cmNlOjpDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudD4gU1ZHUGF0aFN0cmluZ1NvdXJjZTo6
cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCgpCiB7CisgICAgYXV0byBoZWxwZXIgPSBbXShj
b25zdCBhdXRvKiYgY3VycmVudCwgY29uc3QgYXV0byogZW5kKSAtPiBPcHRpb25hbDxDdXJ2ZVRv
UXVhZHJhdGljU2VnbWVudD4geworICAgICAgICBhdXRvIHBvaW50MSA9IHBhcnNlRmxvYXRQb2lu
dChjdXJyZW50LCBlbmQpOworICAgICAgICBpZiAoIXBvaW50MSkKKyAgICAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CisKKyAgICAgICAgYXV0byB0YXJnZXRQb2ludCA9IHBhcnNlRmxvYXRQ
b2ludChjdXJyZW50LCBlbmQpOworICAgICAgICBpZiAoIXRhcmdldFBvaW50KQorICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgICAgICBDdXJ2ZVRvUXVhZHJhdGljU2VnbWVu
dCBzZWdtZW50OworICAgICAgICBzZWdtZW50LnBvaW50MSA9ICpwb2ludDE7CisgICAgICAgIHNl
Z21lbnQudGFyZ2V0UG9pbnQgPSAqdGFyZ2V0UG9pbnQ7CisgICAgICAgIHJldHVybiBzZWdtZW50
OworICAgIH07CisKICAgICBpZiAobV9pczhCaXRTb3VyY2UpCi0gICAgICAgIHJldHVybiBwYXJz
ZUZsb2F0UG9pbnQyKG1fY3VycmVudC5tX2NoYXJhY3RlcjgsIG1fZW5kLm1fY2hhcmFjdGVyOCwg
cG9pbnQyLCB0YXJnZXRQb2ludCk7Ci0gICAgcmV0dXJuIHBhcnNlRmxvYXRQb2ludDIobV9jdXJy
ZW50Lm1fY2hhcmFjdGVyMTYsIG1fZW5kLm1fY2hhcmFjdGVyMTYsIHBvaW50MiwgdGFyZ2V0UG9p
bnQpOworICAgICAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjgsIG1fZW5k
Lm1fY2hhcmFjdGVyOCk7CisgICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXIx
NiwgbV9lbmQubV9jaGFyYWN0ZXIxNik7CiB9CiAKLWJvb2wgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6
cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudChGbG9hdFBvaW50JiB0YXJnZXRQb2lu
dCkKK09wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50
PiBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50
KCkKIHsKKyAgICBhdXRvIGhlbHBlciA9IFtdKGNvbnN0IGF1dG8qJiBjdXJyZW50LCBjb25zdCBh
dXRvKiBlbmQpIC0+IE9wdGlvbmFsPEN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50PiB7Cisg
ICAgICAgIGF1dG8gdGFyZ2V0UG9pbnQgPSBwYXJzZUZsb2F0UG9pbnQoY3VycmVudCwgZW5kKTsK
KyAgICAgICAgaWYgKCF0YXJnZXRQb2ludCkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CisKKyAgICAgICAgQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQgc2VnbWVudDsKKyAg
ICAgICAgc2VnbWVudC50YXJnZXRQb2ludCA9ICp0YXJnZXRQb2ludDsKKyAgICAgICAgcmV0dXJu
IHNlZ21lbnQ7CisgICAgfTsKKwogICAgIGlmIChtX2lzOEJpdFNvdXJjZSkKLSAgICAgICAgcmV0
dXJuIHBhcnNlRmxvYXRQb2ludChtX2N1cnJlbnQubV9jaGFyYWN0ZXI4LCBtX2VuZC5tX2NoYXJh
Y3RlcjgsIHRhcmdldFBvaW50KTsKLSAgICByZXR1cm4gcGFyc2VGbG9hdFBvaW50KG1fY3VycmVu
dC5tX2NoYXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2LCB0YXJnZXRQb2ludCk7CisgICAg
ICAgIHJldHVybiBoZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyOCwgbV9lbmQubV9jaGFyYWN0
ZXI4KTsKKyAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjE2LCBtX2VuZC5t
X2NoYXJhY3RlcjE2KTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1z
dGF0aWMgYm9vbCBwYXJzZUFyY1RvU2VnbWVudEhlbHBlcihjb25zdCBDaGFyYWN0ZXJUeXBlKiYg
Y3VycmVudCwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kLCBmbG9hdCYgcngsIGZsb2F0JiByeSwg
ZmxvYXQmIGFuZ2xlLCBib29sJiBsYXJnZUFyYywgYm9vbCYgc3dlZXAsIEZsb2F0UG9pbnQmIHRh
cmdldFBvaW50KQorT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6QXJjVG9TZWdtZW50PiBTVkdQYXRo
U3RyaW5nU291cmNlOjpwYXJzZUFyY1RvU2VnbWVudCgpCiB7Ci0gICAgZmxvYXQgdG9YOwotICAg
IGZsb2F0IHRvWTsKLSAgICBpZiAoIXBhcnNlTnVtYmVyKGN1cnJlbnQsIGVuZCwgcngpCi0gICAg
ICAgIHx8ICFwYXJzZU51bWJlcihjdXJyZW50LCBlbmQsIHJ5KQotICAgICAgICB8fCAhcGFyc2VO
dW1iZXIoY3VycmVudCwgZW5kLCBhbmdsZSkKLSAgICAgICAgfHwgIXBhcnNlQXJjRmxhZyhjdXJy
ZW50LCBlbmQsIGxhcmdlQXJjKQotICAgICAgICB8fCAhcGFyc2VBcmNGbGFnKGN1cnJlbnQsIGVu
ZCwgc3dlZXApCi0gICAgICAgIHx8ICFwYXJzZU51bWJlcihjdXJyZW50LCBlbmQsIHRvWCkKLSAg
ICAgICAgfHwgIXBhcnNlTnVtYmVyKGN1cnJlbnQsIGVuZCwgdG9ZKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIHRhcmdldFBvaW50ID0gRmxvYXRQb2ludCh0b1gsIHRvWSk7Ci0gICAgcmV0
dXJuIHRydWU7Ci19CisgICAgYXV0byBoZWxwZXIgPSBbXShjb25zdCBhdXRvKiYgY3VycmVudCwg
Y29uc3QgYXV0byogZW5kKSAtPiBPcHRpb25hbDxBcmNUb1NlZ21lbnQ+CisgICAgeworICAgICAg
ICBhdXRvIHJ4ID0gcGFyc2VOdW1iZXIoY3VycmVudCwgZW5kKTsKKyAgICAgICAgaWYgKCFyeCkK
KyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIGF1dG8gcnkgPSBwYXJz
ZU51bWJlcihjdXJyZW50LCBlbmQpOworICAgICAgICBpZiAoIXJ5KQorICAgICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgYXV0byBhbmdsZSA9IHBhcnNlTnVtYmVyKGN1cnJl
bnQsIGVuZCk7CisgICAgICAgIGlmICghYW5nbGUpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworICAgICAgICBhdXRvIGxhcmdlQXJjID0gcGFyc2VBcmNGbGFnKGN1cnJlbnQsIGVu
ZCk7CisgICAgICAgIGlmICghbGFyZ2VBcmMpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworICAgICAgICBhdXRvIHN3ZWVwID0gcGFyc2VBcmNGbGFnKGN1cnJlbnQsIGVuZCk7Cisg
ICAgICAgIGlmICghc3dlZXApCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAg
ICAgICBhdXRvIHRhcmdldFBvaW50ID0gcGFyc2VGbG9hdFBvaW50KGN1cnJlbnQsIGVuZCk7Cisg
ICAgICAgIGlmICghdGFyZ2V0UG9pbnQpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworCisgICAgICAgIEFyY1RvU2VnbWVudCBzZWdtZW50OworICAgICAgICBzZWdtZW50LnJ4ID0g
KnJ4OworICAgICAgICBzZWdtZW50LnJ5ID0gKnJ5OworICAgICAgICBzZWdtZW50LmFuZ2xlID0g
KmFuZ2xlOworICAgICAgICBzZWdtZW50LmxhcmdlQXJjID0gKmxhcmdlQXJjOworICAgICAgICBz
ZWdtZW50LnN3ZWVwID0gKnN3ZWVwOworICAgICAgICBzZWdtZW50LnRhcmdldFBvaW50ID0gKnRh
cmdldFBvaW50OworICAgICAgICByZXR1cm4gc2VnbWVudDsKKyAgICB9OwogCi1ib29sIFNWR1Bh
dGhTdHJpbmdTb3VyY2U6OnBhcnNlQXJjVG9TZWdtZW50KGZsb2F0JiByeCwgZmxvYXQmIHJ5LCBm
bG9hdCYgYW5nbGUsIGJvb2wmIGxhcmdlQXJjLCBib29sJiBzd2VlcCwgRmxvYXRQb2ludCYgdGFy
Z2V0UG9pbnQpCi17CiAgICAgaWYgKG1faXM4Qml0U291cmNlKQotICAgICAgICByZXR1cm4gcGFy
c2VBcmNUb1NlZ21lbnRIZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyOCwgbV9lbmQubV9jaGFy
YWN0ZXI4LCByeCwgcnksIGFuZ2xlLCBsYXJnZUFyYywgc3dlZXAsIHRhcmdldFBvaW50KTsKLSAg
ICByZXR1cm4gcGFyc2VBcmNUb1NlZ21lbnRIZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYs
IG1fZW5kLm1fY2hhcmFjdGVyMTYsIHJ4LCByeSwgYW5nbGUsIGxhcmdlQXJjLCBzd2VlcCwgdGFy
Z2V0UG9pbnQpOworICAgICAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3Rlcjgs
IG1fZW5kLm1fY2hhcmFjdGVyOCk7CisgICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9jaGFy
YWN0ZXIxNiwgbV9lbmQubV9jaGFyYWN0ZXIxNik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTdHJpbmdTb3VyY2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFN0cmluZ1NvdXJjZS5oCShyZXZpc2lv
biAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFN0cmluZ1NvdXJjZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMiwxOCArMzIsMTggQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBi
b29sIGhhc01vcmVEYXRhKCkgY29uc3QgZmluYWw7CiAgICAgYm9vbCBtb3ZlVG9OZXh0VG9rZW4o
KSBmaW5hbDsKLSAgICBib29sIHBhcnNlU1ZHU2VnbWVudFR5cGUoU1ZHUGF0aFNlZ1R5cGUmKSBm
aW5hbDsKICAgICBTVkdQYXRoU2VnVHlwZSBuZXh0Q29tbWFuZChTVkdQYXRoU2VnVHlwZSBwcmV2
aW91c0NvbW1hbmQpIGZpbmFsOwogCi0gICAgYm9vbCBwYXJzZU1vdmVUb1NlZ21lbnQoRmxvYXRQ
b2ludCYpIGZpbmFsOwotICAgIGJvb2wgcGFyc2VMaW5lVG9TZWdtZW50KEZsb2F0UG9pbnQmKSBm
aW5hbDsKLSAgICBib29sIHBhcnNlTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQoZmxvYXQmKSBmaW5h
bDsKLSAgICBib29sIHBhcnNlTGluZVRvVmVydGljYWxTZWdtZW50KGZsb2F0JikgZmluYWw7Ci0g
ICAgYm9vbCBwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQoRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQm
LCBGbG9hdFBvaW50JikgZmluYWw7Ci0gICAgYm9vbCBwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNl
Z21lbnQoRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmKSBmaW5hbDsKLSAgICBib29sIHBhcnNlQ3Vy
dmVUb1F1YWRyYXRpY1NlZ21lbnQoRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmKSBmaW5hbDsKLSAg
ICBib29sIHBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQoRmxvYXRQb2ludCYpIGZp
bmFsOwotICAgIGJvb2wgcGFyc2VBcmNUb1NlZ21lbnQoZmxvYXQmLCBmbG9hdCYsIGZsb2F0Jiwg
Ym9vbCYsIGJvb2wmLCBGbG9hdFBvaW50JikgZmluYWw7CisgICAgT3B0aW9uYWw8U1ZHUGF0aFNl
Z1R5cGU+IHBhcnNlU1ZHU2VnbWVudFR5cGUoKSBmaW5hbDsKKyAgICBPcHRpb25hbDxNb3ZlVG9T
ZWdtZW50PiBwYXJzZU1vdmVUb1NlZ21lbnQoKSBmaW5hbDsKKyAgICBPcHRpb25hbDxMaW5lVG9T
ZWdtZW50PiBwYXJzZUxpbmVUb1NlZ21lbnQoKSBmaW5hbDsKKyAgICBPcHRpb25hbDxMaW5lVG9I
b3Jpem9udGFsU2VnbWVudD4gcGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudCgpIGZpbmFsOwor
ICAgIE9wdGlvbmFsPExpbmVUb1ZlcnRpY2FsU2VnbWVudD4gcGFyc2VMaW5lVG9WZXJ0aWNhbFNl
Z21lbnQoKSBmaW5hbDsKKyAgICBPcHRpb25hbDxDdXJ2ZVRvQ3ViaWNTZWdtZW50PiBwYXJzZUN1
cnZlVG9DdWJpY1NlZ21lbnQoKSBmaW5hbDsKKyAgICBPcHRpb25hbDxDdXJ2ZVRvQ3ViaWNTbW9v
dGhTZWdtZW50PiBwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQoKSBmaW5hbDsKKyAgICBP
cHRpb25hbDxDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudD4gcGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2Vn
bWVudCgpIGZpbmFsOworICAgIE9wdGlvbmFsPEN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50
PiBwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KCkgZmluYWw7CisgICAgT3B0aW9u
YWw8QXJjVG9TZWdtZW50PiBwYXJzZUFyY1RvU2VnbWVudCgpIGZpbmFsOwogCiAgICAgU3RyaW5n
IG1fc3RyaW5nOwogICAgIGJvb2wgbV9pczhCaXRTb3VyY2U7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHUG9pbnRMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1BvaW50TGlzdC5oCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
UG9pbnRMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDEyICs2MywxMyBAQCBwdWJsaWM6CiAg
ICAgICAgIGJvb2wgZGVsaW1QYXJzZWQgPSBmYWxzZTsKICAgICAgICAgd2hpbGUgKGN1ciA8IGVu
ZCkgewogICAgICAgICAgICAgZGVsaW1QYXJzZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIGZsb2F0
IHhQb3MgPSAwLjBmOwotICAgICAgICAgICAgaWYgKCFwYXJzZU51bWJlcihjdXIsIGVuZCwgeFBv
cykpCisKKyAgICAgICAgICAgIGF1dG8geFBvcyA9IHBhcnNlTnVtYmVyKGN1ciwgZW5kKTsKKyAg
ICAgICAgICAgIGlmICgheFBvcykKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICAgICAgICAgIGZsb2F0IHlQb3MgPSAwLjBmOwotICAgICAgICAgICAgaWYgKCFwYXJzZU51bWJl
cihjdXIsIGVuZCwgeVBvcywgZmFsc2UpKQorICAgICAgICAgICAgYXV0byB5UG9zID0gcGFyc2VO
dW1iZXIoY3VyLCBlbmQsIFN1ZmZpeFNraXBwaW5nUG9saWN5OjpEb250U2tpcCk7CisgICAgICAg
ICAgICBpZiAoIXlQb3MpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAg
ICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoY3VyLCBlbmQpOwpAQCAtNzksNyArODAsNyBAQCBw
dWJsaWM6CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMo
Y3VyLCBlbmQpOwogCi0gICAgICAgICAgICBhcHBlbmQoU1ZHUG9pbnQ6OmNyZWF0ZSh7IHhQb3Ms
IHlQb3MgfSkpOworICAgICAgICAgICAgYXBwZW5kKFNWR1BvaW50OjpjcmVhdGUoeyAqeFBvcywg
KnlQb3MgfSkpOwogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuICFkZWxpbVBhcnNlZDsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUb09URkZvbnRDb252ZXJzaW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVG9PVEZGb250Q29udmVyc2lvbi5jcHAJKHJl
dmlzaW9uIDI2MzE3NikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUb09URkZvbnRDb252ZXJz
aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI5LDggKzIyOSw4IEBAIHByaXZhdGU6CiAgICAg
dm9pZCBhZGRDb2RlcG9pbnRSYW5nZXMoY29uc3QgVW5pY29kZVJhbmdlcyYsIEhhc2hTZXQ8R2x5
cGg+JiBnbHlwaFNldCkgY29uc3Q7CiAgICAgdm9pZCBhZGRDb2RlcG9pbnRzKGNvbnN0IEhhc2hT
ZXQ8U3RyaW5nPiYgY29kZXBvaW50cywgSGFzaFNldDxHbHlwaD4mIGdseXBoU2V0KSBjb25zdDsK
ICAgICB2b2lkIGFkZEdseXBoTmFtZXMoY29uc3QgSGFzaFNldDxTdHJpbmc+JiBnbHlwaE5hbWVz
LCBIYXNoU2V0PEdseXBoPiYgZ2x5cGhTZXQpIGNvbnN0OwotICAgIHZvaWQgYWRkS2VybmluZ1Bh
aXIoVmVjdG9yPEtlcm5pbmdEYXRhPiYsIGNvbnN0IFNWR0tlcm5pbmdQYWlyJikgY29uc3Q7Ci0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc2l6ZV90IGFwcGVuZEtFUk5TdWJ0YWJsZShib29sIChU
OjoqYnVpbGRLZXJuaW5nUGFpcikoU1ZHS2VybmluZ1BhaXImKSBjb25zdCwgdWludDE2X3QgY292
ZXJhZ2UpOworICAgIHZvaWQgYWRkS2VybmluZ1BhaXIoVmVjdG9yPEtlcm5pbmdEYXRhPiYsIFNW
R0tlcm5pbmdQYWlyJiYpIGNvbnN0OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHNpemVfdCBh
cHBlbmRLRVJOU3VidGFibGUoT3B0aW9uYWw8U1ZHS2VybmluZ1BhaXI+IChUOjoqYnVpbGRLZXJu
aW5nUGFpcikoKSBjb25zdCwgdWludDE2X3QgY292ZXJhZ2UpOwogICAgIHNpemVfdCBmaW5pc2hB
cHBlbmRpbmdLRVJOU3VidGFibGUoVmVjdG9yPEtlcm5pbmdEYXRhPiwgdWludDE2X3QgY292ZXJh
Z2UpOwogCiAgICAgdm9pZCBhcHBlbmRMaWdhdHVyZVN1YnRhYmxlKHNpemVfdCBzdWJ0YWJsZVJl
Y29yZExvY2F0aW9uKTsKQEAgLTEwNDAsNyArMTA0MCw3IEBAIHZvaWQgU1ZHVG9PVEZGb250Q29u
dmVydGVyOjphZGRHbHlwaE5hbWUKICAgICB9CiB9CiAKLXZvaWQgU1ZHVG9PVEZGb250Q29udmVy
dGVyOjphZGRLZXJuaW5nUGFpcihWZWN0b3I8S2VybmluZ0RhdGE+JiBkYXRhLCBjb25zdCBTVkdL
ZXJuaW5nUGFpciYga2VybmluZ1BhaXIpIGNvbnN0Cit2b2lkIFNWR1RvT1RGRm9udENvbnZlcnRl
cjo6YWRkS2VybmluZ1BhaXIoVmVjdG9yPEtlcm5pbmdEYXRhPiYgZGF0YSwgU1ZHS2VybmluZ1Bh
aXImJiBrZXJuaW5nUGFpcikgY29uc3QKIHsKICAgICBIYXNoU2V0PEdseXBoPiBnbHlwaFNldDE7
CiAgICAgSGFzaFNldDxHbHlwaD4gZ2x5cGhTZXQyOwpAQCAtMTA1OSwxMyArMTA1OSwxMiBAQCB2
b2lkIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6YWRkS2VybmluZ1BhCiAgICAgfQogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgc2l6ZV90IFNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBw
ZW5kS0VSTlN1YnRhYmxlKGJvb2wgKFQ6OipidWlsZEtlcm5pbmdQYWlyKShTVkdLZXJuaW5nUGFp
ciYpIGNvbnN0LCB1aW50MTZfdCBjb3ZlcmFnZSkKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGlu
ZSBzaXplX3QgU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRLRVJOU3VidGFibGUoT3B0aW9u
YWw8U1ZHS2VybmluZ1BhaXI+IChUOjoqYnVpbGRLZXJuaW5nUGFpcikoKSBjb25zdCwgdWludDE2
X3QgY292ZXJhZ2UpCiB7CiAgICAgVmVjdG9yPEtlcm5pbmdEYXRhPiBrZXJuaW5nRGF0YTsKICAg
ICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBjaGlsZHJlbk9mVHlwZTxUPihtX2ZvbnRFbGVtZW50KSkg
ewotICAgICAgICBTVkdLZXJuaW5nUGFpciBrZXJuaW5nUGFpcjsKLSAgICAgICAgaWYgKChlbGVt
ZW50LipidWlsZEtlcm5pbmdQYWlyKShrZXJuaW5nUGFpcikpCi0gICAgICAgICAgICBhZGRLZXJu
aW5nUGFpcihrZXJuaW5nRGF0YSwga2VybmluZ1BhaXIpOworICAgICAgICBpZiAoYXV0byBrZXJu
aW5nUGFpciA9IChlbGVtZW50LipidWlsZEtlcm5pbmdQYWlyKSgpKQorICAgICAgICAgICAgYWRk
S2VybmluZ1BhaXIoa2VybmluZ0RhdGEsIFdURk1vdmUoKmtlcm5pbmdQYWlyKSk7CiAgICAgfQog
ICAgIHJldHVybiBmaW5pc2hBcHBlbmRpbmdLRVJOU3VidGFibGUoV1RGTW92ZShrZXJuaW5nRGF0
YSksIGNvdmVyYWdlKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm1M
aXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybUxpc3Qu
aAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybUxp
c3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDE3ICsxMTQsMTggQEAgcHJpdmF0ZToKICAgICAg
ICAgYm9vbCBkZWxpbVBhcnNlZCA9IGZhbHNlOwogICAgICAgICB3aGlsZSAoc3RhcnQgPCBlbmQp
IHsKICAgICAgICAgICAgIGRlbGltUGFyc2VkID0gZmFsc2U7Ci0gICAgICAgICAgICBTVkdUcmFu
c2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZSB0eXBlID0gU1ZHVHJhbnNmb3JtVmFsdWU6OlNW
R19UUkFOU0ZPUk1fVU5LTk9XTjsKICAgICAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhz
dGFydCwgZW5kKTsKLQotICAgICAgICAgICAgaWYgKCFTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZUFu
ZFNraXBUeXBlKHN0YXJ0LCBlbmQsIHR5cGUpKQorICAgICAgICAgICAgCisgICAgICAgICAgICBh
dXRvIHR5cGUgPSBTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZUFuZFNraXBUeXBlKHN0YXJ0LCBlbmQp
OworICAgICAgICAgICAgaWYgKCF0eXBlKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgICAgICAgICAgUmVmPFNWR1RyYW5zZm9ybT4gdHJhbnNmb3JtID0gU1ZHVHJhbnNmb3Jt
OjpjcmVhdGUodHlwZSk7Ci0gICAgICAgICAgICBpZiAoIVNWR1RyYW5zZm9ybWFibGU6OnBhcnNl
VHJhbnNmb3JtVmFsdWUodHlwZSwgc3RhcnQsIGVuZCwgdHJhbnNmb3JtLT52YWx1ZSgpKSkKKyAg
ICAgICAgICAgIGF1dG8gcGFyc2VkVHJhbnNmb3JtVmFsdWUgPSBTVkdUcmFuc2Zvcm1hYmxlOjpw
YXJzZVRyYW5zZm9ybVZhbHVlKCp0eXBlLCBzdGFydCwgZW5kKTsKKyAgICAgICAgICAgIGlmICgh
cGFyc2VkVHJhbnNmb3JtVmFsdWUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgICAgICAgICBhcHBlbmQoV1RGTW92ZSh0cmFuc2Zvcm0pKTsKKyAgICAgICAgICAgIGFwcGVu
ZChTVkdUcmFuc2Zvcm06OmNyZWF0ZSgqcGFyc2VkVHJhbnNmb3JtVmFsdWUpKTsKKwogICAgICAg
ICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHN0YXJ0LCBlbmQpOwogICAgICAgICAgICAgaWYg
KHN0YXJ0IDwgZW5kICYmICpzdGFydCA9PSAnLCcpIHsKICAgICAgICAgICAgICAgICBkZWxpbVBh
cnNlZCA9IHRydWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtYWJsZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybWFibGUuY3Bw
CShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtYWJs
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDggKzQzLDEyIEBAIHN0YXRpYyBpbnQgcGFyc2VU
cmFuc2Zvcm1QYXJhbUxpc3QoY29uc3QKICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMocHRyLCBl
bmQpOwogCiAgICAgd2hpbGUgKHJlcXVpcmVkUGFyYW1zIDwgcmVxdWlyZWQpIHsKLSAgICAgICAg
aWYgKHB0ciA+PSBlbmQgfHwgIXBhcnNlTnVtYmVyKHB0ciwgZW5kLCB2YWx1ZXNbcmVxdWlyZWRQ
YXJhbXNdLCBmYWxzZSkpCisgICAgICAgIGlmIChwdHIgPj0gZW5kKQogICAgICAgICAgICAgcmV0
dXJuIC0xOworICAgICAgICBhdXRvIHBhcnNlZE51bWJlciA9IHBhcnNlTnVtYmVyKHB0ciwgZW5k
LCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNraXApOworICAgICAgICBpZiAoIXBhcnNlZE51
bWJlcikKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgdmFsdWVzW3JlcXVpcmVkUGFy
YW1zXSA9ICpwYXJzZWROdW1iZXI7CiAgICAgICAgIHJlcXVpcmVkUGFyYW1zKys7CiAgICAgICAg
IGlmIChyZXF1aXJlZFBhcmFtcyA8IHJlcXVpcmVkKQogICAgICAgICAgICAgc2tpcE9wdGlvbmFs
U1ZHU3BhY2VzT3JEZWxpbWl0ZXIocHRyLCBlbmQpOwpAQCAtNjMsOCArNjcsMTIgQEAgc3RhdGlj
IGludCBwYXJzZVRyYW5zZm9ybVBhcmFtTGlzdChjb25zdAogICAgICAgICAgICAgcmV0dXJuIC0x
OwogICAgIH0gZWxzZSB7CiAgICAgICAgIHdoaWxlIChvcHRpb25hbFBhcmFtcyA8IG9wdGlvbmFs
KSB7Ci0gICAgICAgICAgICBpZiAocHRyID49IGVuZCB8fCAhcGFyc2VOdW1iZXIocHRyLCBlbmQs
IHZhbHVlc1tyZXF1aXJlZFBhcmFtcyArIG9wdGlvbmFsUGFyYW1zXSwgZmFsc2UpKQorICAgICAg
ICAgICAgaWYgKHB0ciA+PSBlbmQpCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAg
ICAgICAgYXV0byBwYXJzZWROdW1iZXIgPSBwYXJzZU51bWJlcihwdHIsIGVuZCwgU3VmZml4U2tp
cHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsKKyAgICAgICAgICAgIGlmICghcGFyc2VkTnVtYmVyKQog
ICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIHZhbHVlc1tyZXF1aXJlZFBh
cmFtcyArIG9wdGlvbmFsUGFyYW1zXSA9ICpwYXJzZWROdW1iZXI7CiAgICAgICAgICAgICBvcHRp
b25hbFBhcmFtcysrOwogICAgICAgICAgICAgaWYgKG9wdGlvbmFsUGFyYW1zIDwgb3B0aW9uYWwp
CiAgICAgICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxpbWl0ZXIocHRyLCBl
bmQpOwpAQCAtOTAsMTYgKzk4LDE3IEBAIHN0YXRpYyBjb25zdCBpbnQgb3B0aW9uYWxWYWx1ZXNG
b3JUeXBlW10KIC8vIFRoaXMgZGVzdHJ1Y3RvciBpcyBuZWVkZWQgaW4gb3JkZXIgdG8gbGluayBj
b3JyZWN0bHkgd2l0aCBJbnRlbCBJQ0MuCiBTVkdUcmFuc2Zvcm1hYmxlOjp+U1ZHVHJhbnNmb3Jt
YWJsZSgpID0gZGVmYXVsdDsKIAotYm9vbCBTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZVRyYW5zZm9y
bVZhbHVlKFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlIHR5cGUsIGNvbnN0IFVD
aGFyKiYgcHRyLCBjb25zdCBVQ2hhciogZW5kLCBTVkdUcmFuc2Zvcm1WYWx1ZSYgdHJhbnNmb3Jt
KQorT3B0aW9uYWw8U1ZHVHJhbnNmb3JtVmFsdWU+IFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJh
bnNmb3JtVmFsdWUoU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGUgdHlwZSwgY29u
c3QgVUNoYXIqJiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQpCiB7CiAgICAgaWYgKHR5cGUgPT0gU1ZH
VHJhbnNmb3JtVmFsdWU6OlNWR19UUkFOU0ZPUk1fVU5LTk9XTikKLSAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgaW50IHZhbHVlQ291bnQg
PSAwOwogICAgIGZsb2F0IHZhbHVlc1tdID0gezAsIDAsIDAsIDAsIDAsIDB9OwogICAgIGlmICgo
dmFsdWVDb3VudCA9IHBhcnNlVHJhbnNmb3JtUGFyYW1MaXN0KHB0ciwgZW5kLCB2YWx1ZXMsIHJl
cXVpcmVkVmFsdWVzRm9yVHlwZVt0eXBlXSwgb3B0aW9uYWxWYWx1ZXNGb3JUeXBlW3R5cGVdKSkg
PCAwKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAKKyAgICBTVkdUcmFuc2Zvcm1WYWx1ZSB0cmFuc2Zvcm07CiAgICAgc3dpdGNoICh0eXBlKSB7
CiAgICAgY2FzZSBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RSQU5TRk9STV9VTktOT1dOOgogICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTEzMyw3ICsxNDIsNyBAQCBib29sIFNWR1Ry
YW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtVmFsCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAot
ICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiB0cmFuc2Zvcm07CiB9CiAKIHN0YXRpYyBjb25z
dCBVQ2hhciBza2V3WERlc2NbXSA9ICB7J3MnLCAnaycsICdlJywgJ3cnLCAnWCd9OwpAQCAtMTQz
LDM5ICsxNTIsMzUgQEAgc3RhdGljIGNvbnN0IFVDaGFyIHRyYW5zbGF0ZURlc2NbXSA9ICB7Jwog
c3RhdGljIGNvbnN0IFVDaGFyIHJvdGF0ZURlc2NbXSA9ICB7J3InLCAnbycsICd0JywgJ2EnLCAn
dCcsICdlJ307CiBzdGF0aWMgY29uc3QgVUNoYXIgbWF0cml4RGVzY1tdID0gIHsnbScsICdhJywg
J3QnLCAncicsICdpJywgJ3gnfTsKIAotYm9vbCBTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZUFuZFNr
aXBUeXBlKGNvbnN0IFVDaGFyKiYgY3VyclRyYW5zZm9ybSwgY29uc3QgVUNoYXIqIGVuZCwgU1ZH
VHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGUmIHR5cGUpCitPcHRpb25hbDxTVkdUcmFu
c2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZT4gU1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VBbmRT
a2lwVHlwZShjb25zdCBVQ2hhciomIGN1cnJUcmFuc2Zvcm0sIGNvbnN0IFVDaGFyKiBlbmQpCiB7
CiAgICAgaWYgKGN1cnJUcmFuc2Zvcm0gPj0gZW5kKQotICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBpZiAoKmN1cnJUcmFuc2Zvcm0gPT0g
J3MnKSB7CiAgICAgICAgIGlmIChza2lwU3RyaW5nKGN1cnJUcmFuc2Zvcm0sIGVuZCwgc2tld1hE
ZXNjLCBXVEZfQVJSQVlfTEVOR1RIKHNrZXdYRGVzYykpKQotICAgICAgICAgICAgdHlwZSA9IFNW
R1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX1NLRVdYOworICAgICAgICAgICAgcmV0dXJu
IFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX1NLRVdYOwogICAgICAgICBlbHNlIGlm
IChza2lwU3RyaW5nKGN1cnJUcmFuc2Zvcm0sIGVuZCwgc2tld1lEZXNjLCBXVEZfQVJSQVlfTEVO
R1RIKHNrZXdZRGVzYykpKQotICAgICAgICAgICAgdHlwZSA9IFNWR1RyYW5zZm9ybVZhbHVlOjpT
VkdfVFJBTlNGT1JNX1NLRVdZOworICAgICAgICAgICAgcmV0dXJuIFNWR1RyYW5zZm9ybVZhbHVl
OjpTVkdfVFJBTlNGT1JNX1NLRVdZOwogICAgICAgICBlbHNlIGlmIChza2lwU3RyaW5nKGN1cnJU
cmFuc2Zvcm0sIGVuZCwgc2NhbGVEZXNjLCBXVEZfQVJSQVlfTEVOR1RIKHNjYWxlRGVzYykpKQot
ICAgICAgICAgICAgdHlwZSA9IFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX1NDQUxF
OworICAgICAgICAgICAgcmV0dXJuIFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX1ND
QUxFOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0gZWxzZSBpZiAoc2tpcFN0cmluZyhjdXJyVHJh
bnNmb3JtLCBlbmQsIHRyYW5zbGF0ZURlc2MsIFdURl9BUlJBWV9MRU5HVEgodHJhbnNsYXRlRGVz
YykpKQotICAgICAgICB0eXBlID0gU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR19UUkFOU0ZPUk1fVFJB
TlNMQVRFOworICAgICAgICByZXR1cm4gU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR19UUkFOU0ZPUk1f
VFJBTlNMQVRFOwogICAgIGVsc2UgaWYgKHNraXBTdHJpbmcoY3VyclRyYW5zZm9ybSwgZW5kLCBy
b3RhdGVEZXNjLCBXVEZfQVJSQVlfTEVOR1RIKHJvdGF0ZURlc2MpKSkKLSAgICAgICAgdHlwZSA9
IFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX1JPVEFURTsKKyAgICAgICAgcmV0dXJu
IFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX1JPVEFURTsKICAgICBlbHNlIGlmIChz
a2lwU3RyaW5nKGN1cnJUcmFuc2Zvcm0sIGVuZCwgbWF0cml4RGVzYywgV1RGX0FSUkFZX0xFTkdU
SChtYXRyaXhEZXNjKSkpCi0gICAgICAgIHR5cGUgPSBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RS
QU5TRk9STV9NQVRSSVg7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IHJldHVybiBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RSQU5TRk9STV9NQVRSSVg7CiAKLSAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCiBTVkdUcmFuc2Zvcm1W
YWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZSBTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZVRyYW5zZm9ybVR5
cGUoY29uc3QgU3RyaW5nJiB0eXBlU3RyaW5nKQogewotICAgIFNWR1RyYW5zZm9ybVZhbHVlOjpT
VkdUcmFuc2Zvcm1UeXBlIHR5cGUgPSBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RSQU5TRk9STV9V
TktOT1dOOwogICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyh0eXBl
U3RyaW5nKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKICAgICBjb25zdCBVQ2hhciogY2hhcmFj
dGVycyA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKLSAgICBwYXJzZUFuZFNraXBUeXBlKGNoYXJh
Y3RlcnMsIGNoYXJhY3RlcnMgKyB0eXBlU3RyaW5nLmxlbmd0aCgpLCB0eXBlKTsKLSAgICByZXR1
cm4gdHlwZTsKKyAgICByZXR1cm4gcGFyc2VBbmRTa2lwVHlwZShjaGFyYWN0ZXJzLCBjaGFyYWN0
ZXJzICsgdHlwZVN0cmluZy5sZW5ndGgoKSkudmFsdWVPcihTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZH
X1RSQU5TRk9STV9VTktOT1dOKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1RyYW5zZm9ybWFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJh
bnNmb3JtYWJsZS5oCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
VHJhbnNmb3JtYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw5ICszMiw5IEBAIGNsYXNzIFNW
R1RyYW5zZm9ybWFibGUgOiBwdWJsaWMgU1ZHTG9jYXQKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5T
VkdUcmFuc2Zvcm1hYmxlKCk7CiAKLSAgICBzdGF0aWMgYm9vbCBwYXJzZVRyYW5zZm9ybVZhbHVl
KFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlLCBjb25zdCBVQ2hhciomIHB0ciwg
Y29uc3QgVUNoYXIqIGVuZCwgU1ZHVHJhbnNmb3JtVmFsdWUmKTsKKyAgICBzdGF0aWMgT3B0aW9u
YWw8U1ZHVHJhbnNmb3JtVmFsdWU+IHBhcnNlVHJhbnNmb3JtVmFsdWUoU1ZHVHJhbnNmb3JtVmFs
dWU6OlNWR1RyYW5zZm9ybVR5cGUsIGNvbnN0IFVDaGFyKiYgcHRyLCBjb25zdCBVQ2hhciogZW5k
KTsKICAgICBzdGF0aWMgU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGUgcGFyc2VU
cmFuc2Zvcm1UeXBlKGNvbnN0IFN0cmluZyYpOwotICAgIHN0YXRpYyBib29sIHBhcnNlQW5kU2tp
cFR5cGUoY29uc3QgVUNoYXIqJiBjdXJyVHJhbnNmb3JtLCBjb25zdCBVQ2hhciogZW5kLCBTVkdU
cmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZSYpOworICAgIHN0YXRpYyBPcHRpb25hbDxT
VkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZT4gcGFyc2VBbmRTa2lwVHlwZShjb25z
dCBVQ2hhciomIGN1cnJUcmFuc2Zvcm0sIGNvbnN0IFVDaGFyKiBlbmQpOwogCiAgICAgQWZmaW5l
VHJhbnNmb3JtIGxvY2FsQ29vcmRpbmF0ZVNwYWNlVHJhbnNmb3JtKFNWR0xvY2F0YWJsZTo6Q1RN
U2NvcGUpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKTsg
fQogICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKSBj
b25zdCA9IDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVktlcm5FbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVktlcm5FbGVtZW50LmNwcAkocmV2
aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ZLZXJuRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQzLDI0ICs0Myw0NCBAQCBSZWY8U1ZHVktlcm5FbGVtZW50PiBT
VkdWS2VybkVsZW1lbnQ6OmNyCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZHVktlcm5FbGVt
ZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKLWJvb2wgU1ZHVktlcm5FbGVtZW50OjpidWls
ZFZlcnRpY2FsS2VybmluZ1BhaXIoU1ZHS2VybmluZ1BhaXImIGtlcm5pbmdQYWlyKSBjb25zdAor
T3B0aW9uYWw8U1ZHS2VybmluZ1BhaXI+IFNWR1ZLZXJuRWxlbWVudDo6YnVpbGRWZXJ0aWNhbEtl
cm5pbmdQYWlyKCkgY29uc3QKIHsKKyAgICAvLyBGSVhNRTogQ2FuIHRoaXMgYmUgc2hhcmVkIHdp
dGggU1ZHSEtlcm5FbGVtZW50OjpidWlsZFZlcnRpY2FsS2VybmluZ1BhaXI/CisKICAgICBhdXRv
JiB1MSA9IGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oU1ZHTmFtZXM6OnUxQXR0cik7
CiAgICAgYXV0byYgZzEgPSBhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFNWR05hbWVz
OjpnMUF0dHIpOwogICAgIGF1dG8mIHUyID0gYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlv
bihTVkdOYW1lczo6dTJBdHRyKTsKICAgICBhdXRvJiBnMiA9IGF0dHJpYnV0ZVdpdGhvdXRTeW5j
aHJvbml6YXRpb24oU1ZHTmFtZXM6OmcyQXR0cik7CiAgICAgaWYgKCh1MS5pc0VtcHR5KCkgJiYg
ZzEuaXNFbXB0eSgpKSB8fCAodTIuaXNFbXB0eSgpICYmIGcyLmlzRW1wdHkoKSkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIGF1dG8g
Z2x5cGhOYW1lMSA9IHBhcnNlR2x5cGhOYW1lKGcxKTsKKyAgICBpZiAoIWdseXBoTmFtZTEpCisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgYXV0byBnbHlwaE5hbWUyID0gcGFyc2VH
bHlwaE5hbWUoZzIpOworICAgIGlmICghZ2x5cGhOYW1lMikKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKKyAgICBhdXRvIHVuaWNvZGVTdHJpbmcxID0gcGFyc2VLZXJuaW5nVW5pY29kZVN0
cmluZyh1MSk7CisgICAgaWYgKCF1bmljb2RlU3RyaW5nMSkKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKKyAgICBhdXRvIHVuaWNvZGVTdHJpbmcyID0gcGFyc2VLZXJuaW5nVW5pY29kZVN0
cmluZyh1Mik7CisgICAgaWYgKCF1bmljb2RlU3RyaW5nMikKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKKworICAgIGJvb2wgb2sgPSBmYWxzZTsKKyAgICBhdXRvIGtlcm5pbmcgPSBhdHRy
aWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFNWR05hbWVzOjprQXR0cikuc3RyaW5nKCkudG9G
bG9hdCgmb2spOworICAgIGlmICghb2spCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAK
LSAgICBpZiAocGFyc2VHbHlwaE5hbWUoZzEsIGtlcm5pbmdQYWlyLmdseXBoTmFtZTEpCi0gICAg
ICAgICYmIHBhcnNlR2x5cGhOYW1lKGcyLCBrZXJuaW5nUGFpci5nbHlwaE5hbWUyKQotICAgICAg
ICAmJiBwYXJzZUtlcm5pbmdVbmljb2RlU3RyaW5nKHUxLCBrZXJuaW5nUGFpci51bmljb2RlUmFu
Z2UxLCBrZXJuaW5nUGFpci51bmljb2RlTmFtZTEpCi0gICAgICAgICYmIHBhcnNlS2VybmluZ1Vu
aWNvZGVTdHJpbmcodTIsIGtlcm5pbmdQYWlyLnVuaWNvZGVSYW5nZTIsIGtlcm5pbmdQYWlyLnVu
aWNvZGVOYW1lMikpIHsKLSAgICAgICAgYm9vbCBvayA9IGZhbHNlOwotICAgICAgICBrZXJuaW5n
UGFpci5rZXJuaW5nID0gYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihTVkdOYW1lczo6
a0F0dHIpLnN0cmluZygpLnRvRmxvYXQoJm9rKTsKLSAgICAgICAgcmV0dXJuIG9rOwotICAgIH0K
LSAgICByZXR1cm4gZmFsc2U7CisgICAgU1ZHS2VybmluZ1BhaXIga2VybmluZ1BhaXI7CisgICAg
a2VybmluZ1BhaXIuZ2x5cGhOYW1lMSA9IFdURk1vdmUoKmdseXBoTmFtZTEpOworICAgIGtlcm5p
bmdQYWlyLmdseXBoTmFtZTIgPSBXVEZNb3ZlKCpnbHlwaE5hbWUyKTsKKyAgICBrZXJuaW5nUGFp
ci51bmljb2RlUmFuZ2UxID0gV1RGTW92ZSh1bmljb2RlU3RyaW5nMS0+Zmlyc3QpOworICAgIGtl
cm5pbmdQYWlyLnVuaWNvZGVOYW1lMSA9IFdURk1vdmUodW5pY29kZVN0cmluZzEtPnNlY29uZCk7
CisgICAga2VybmluZ1BhaXIudW5pY29kZVJhbmdlMiA9IFdURk1vdmUodW5pY29kZVN0cmluZzIt
PmZpcnN0KTsKKyAgICBrZXJuaW5nUGFpci51bmljb2RlTmFtZTIgPSBXVEZNb3ZlKHVuaWNvZGVT
dHJpbmcyLT5zZWNvbmQpOworICAgIGtlcm5pbmdQYWlyLmtlcm5pbmcgPSBrZXJuaW5nOworICAg
IHJldHVybiBrZXJuaW5nUGFpcjsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1ZLZXJuRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdWS2Vy
bkVsZW1lbnQuaAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ZL
ZXJuRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBAIGNsYXNzIFNWR1ZL
ZXJuRWxlbWVudCBmaW5hbCA6IHB1YmxpYyBTVkcKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPFNW
R1ZLZXJuRWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCYpOwog
Ci0gICAgYm9vbCBidWlsZFZlcnRpY2FsS2VybmluZ1BhaXIoU1ZHS2VybmluZ1BhaXImIGtlcm5p
bmdQYWlyKSBjb25zdDsKKyAgICBPcHRpb25hbDxTVkdLZXJuaW5nUGFpcj4gYnVpbGRWZXJ0aWNh
bEtlcm5pbmdQYWlyKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgU1ZHVktlcm5FbGVtZW50KGNv
bnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1ZpZXdTcGVjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVmll
d1NwZWMuY3BwCShyZXZpc2lvbiAyNjMxNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVmll
d1NwZWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OSwxMCArODksMTAgQEAgYm9vbCBTVkdWaWV3
U3BlYzo6cGFyc2VWaWV3U3BlYyhjb25zdCBTdAogICAgICAgICAgICAgICAgIGlmIChjdXJyVmll
d1NwZWMgPj0gZW5kIHx8ICpjdXJyVmlld1NwZWMgIT0gJygnKQogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgY3VyclZpZXdTcGVjKys7Ci0gICAgICAg
ICAgICAgICAgRmxvYXRSZWN0IHZpZXdCb3g7Ci0gICAgICAgICAgICAgICAgaWYgKCFTVkdGaXRU
b1ZpZXdCb3g6OnBhcnNlVmlld0JveChjdXJyVmlld1NwZWMsIGVuZCwgdmlld0JveCwgZmFsc2Up
KQorICAgICAgICAgICAgICAgIGF1dG8gdmlld0JveCA9IFNWR0ZpdFRvVmlld0JveDo6cGFyc2VW
aWV3Qm94KGN1cnJWaWV3U3BlYywgZW5kLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgaWYgKCF2
aWV3Qm94KQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAg
ICAgc2V0Vmlld0JveCh2aWV3Qm94KTsKKyAgICAgICAgICAgICAgICBzZXRWaWV3Qm94KFdURk1v
dmUoKnZpZXdCb3gpKTsKICAgICAgICAgICAgICAgICBpZiAoY3VyclZpZXdTcGVjID49IGVuZCB8
fCAqY3VyclZpZXdTcGVjICE9ICcpJykKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICAgICAgICAgIGN1cnJWaWV3U3BlYysrOwpJbmRleDogU291cmNlL1dlYkNvcmUv
c3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkFk
ZGl0aXZlVmFsdWVGdW5jdGlvbkltcGwuaAkocmV2aXNpb24gMjYzMTc2KQorKysgU291cmNlL1dl
YkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1w
bC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTQsMTAgKzI1NCw4IEBAIHB1YmxpYzoKIAogICAgIE9w
dGlvbmFsPGZsb2F0PiBjYWxjdWxhdGVEaXN0YW5jZShTVkdFbGVtZW50KiwgY29uc3QgU3RyaW5n
JiBmcm9tLCBjb25zdCBTdHJpbmcmIHRvKSBjb25zdCBvdmVycmlkZQogICAgIHsKLSAgICAgICAg
ZmxvYXQgZnJvbU51bWJlciA9IDA7Ci0gICAgICAgIGZsb2F0IHRvTnVtYmVyID0gMDsKLSAgICAg
ICAgcGFyc2VOdW1iZXJGcm9tU3RyaW5nKGZyb20sIGZyb21OdW1iZXIpOwotICAgICAgICBwYXJz
ZU51bWJlckZyb21TdHJpbmcodG8sIHRvTnVtYmVyKTsKKyAgICAgICAgZmxvYXQgZnJvbU51bWJl
ciA9IHBhcnNlTnVtYmVyKGZyb20pLnZhbHVlT3IoMCk7CisgICAgICAgIGZsb2F0IHRvTnVtYmVy
ID0gcGFyc2VOdW1iZXIodG8pLnZhbHVlT3IoMCk7CiAgICAgICAgIHJldHVybiBmYWJzZih0b051
bWJlciAtIGZyb21OdW1iZXIpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL3By
b3BlcnRpZXMvU1ZHUHJvcGVydHlUcmFpdHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdmcvcHJvcGVydGllcy9TVkdQcm9wZXJ0eVRyYWl0cy5oCShyZXZpc2lvbiAyNjMxNzYpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdQcm9wZXJ0eVRyYWl0cy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03NSwxMCArNzUsMTAgQEAgc3RydWN0IFNWR1Byb3BlcnR5VHJhaXRzPHN0
ZDo6cGFpcjxpbnQsIAogICAgIHN0YXRpYyBzdGQ6OnBhaXI8aW50LCBpbnQ+IGluaXRpYWxWYWx1
ZSgpIHsgcmV0dXJuIHsgfTsgfQogICAgIHN0YXRpYyBzdGQ6OnBhaXI8aW50LCBpbnQ+IGZyb21T
dHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiAgICAgewotICAgICAgICBmbG9hdCBmaXJzdE51
bWJlciA9IDAsIHNlY29uZE51bWJlciA9IDA7Ci0gICAgICAgIGlmICghcGFyc2VOdW1iZXJPcHRp
b25hbE51bWJlcihzdHJpbmcsIGZpcnN0TnVtYmVyLCBzZWNvbmROdW1iZXIpKQorICAgICAgICBh
dXRvIHJlc3VsdCA9IHBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIoc3RyaW5nKTsKKyAgICAgICAg
aWYgKCFyZXN1bHQpCiAgICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICByZXR1cm4gc3Rk
OjptYWtlX3BhaXIoc3RhdGljX2Nhc3Q8aW50Pihyb3VuZGYoZmlyc3ROdW1iZXIpKSwgc3RhdGlj
X2Nhc3Q8aW50Pihyb3VuZGYoc2Vjb25kTnVtYmVyKSkpOworICAgICAgICByZXR1cm4gc3RkOjpt
YWtlX3BhaXIoc3RhdGljX2Nhc3Q8aW50Pihyb3VuZGYocmVzdWx0LT5maXJzdCkpLCBzdGF0aWNf
Y2FzdDxpbnQ+KHJvdW5kZihyZXN1bHQtPnNlY29uZCkpKTsKICAgICB9CiAgICAgc3RhdGljIE9w
dGlvbmFsPHN0ZDo6cGFpcjxpbnQsIGludD4+IHBhcnNlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBj
b25zdCBTdHJpbmcmKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gaW5pdGlhbFZhbHVl
KCk7IH0KICAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nKHN0ZDo6cGFpcjxpbnQsIGludD4pIHsg
QVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBlbXB0eVN0cmluZygpOyB9CkBAIC04OSwxNyAr
ODksMTEgQEAgc3RydWN0IFNWR1Byb3BlcnR5VHJhaXRzPGZsb2F0PiB7CiAgICAgc3RhdGljIGZs
b2F0IGluaXRpYWxWYWx1ZSgpIHsgcmV0dXJuIDA7IH0KICAgICBzdGF0aWMgZmxvYXQgZnJvbVN0
cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKICAgICB7Ci0gICAgICAgIGZsb2F0IG51bWJlciA9
IDA7Ci0gICAgICAgIGlmICghcGFyc2VOdW1iZXJGcm9tU3RyaW5nKHN0cmluZywgbnVtYmVyKSkK
LSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4gbnVtYmVyOworICAgICAgICBy
ZXR1cm4gcGFyc2VOdW1iZXIoc3RyaW5nKS52YWx1ZU9yKDApOwogICAgIH0KICAgICBzdGF0aWMg
T3B0aW9uYWw8ZmxvYXQ+IHBhcnNlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBTdHJpbmcm
IHN0cmluZykKICAgICB7Ci0gICAgICAgIGZsb2F0IG51bWJlcjsKLSAgICAgICAgaWYgKCFwYXJz
ZU51bWJlckZyb21TdHJpbmcoc3RyaW5nLCBudW1iZXIpKQotICAgICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKLSAgICAgICAgcmV0dXJuIG51bWJlcjsKKyAgICAgICAgcmV0dXJuIHBhcnNl
TnVtYmVyKHN0cmluZyk7CiAgICAgfQogICAgIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmcoZmxvYXQg
dHlwZSkgeyByZXR1cm4gU3RyaW5nOjpudW1iZXIodHlwZSk7IH0KIH07CkBAIC0xMDksMTAgKzEw
Myw3IEBAIHN0cnVjdCBTVkdQcm9wZXJ0eVRyYWl0czxzdGQ6OnBhaXI8ZmxvYXQKICAgICBzdGF0
aWMgc3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4gaW5pdGlhbFZhbHVlKCkgeyByZXR1cm4geyB9OyB9
CiAgICAgc3RhdGljIHN0ZDo6cGFpcjxmbG9hdCwgZmxvYXQ+IGZyb21TdHJpbmcoY29uc3QgU3Ry
aW5nJiBzdHJpbmcpCiAgICAgewotICAgICAgICBmbG9hdCBmaXJzdE51bWJlciA9IDAsIHNlY29u
ZE51bWJlciA9IDA7Ci0gICAgICAgIGlmICghcGFyc2VOdW1iZXJPcHRpb25hbE51bWJlcihzdHJp
bmcsIGZpcnN0TnVtYmVyLCBzZWNvbmROdW1iZXIpKQotICAgICAgICAgICAgcmV0dXJuIHsgfTsK
LSAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGZpcnN0TnVtYmVyLCBzZWNvbmROdW1iZXIp
OworICAgICAgICByZXR1cm4gcGFyc2VOdW1iZXJPcHRpb25hbE51bWJlcihzdHJpbmcpLnZhbHVl
T3Ioc3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4geyB9KTsKICAgICB9CiAgICAgc3RhdGljIE9wdGlv
bmFsPHN0ZDo6cGFpcjxmbG9hdCwgZmxvYXQ+PiBwYXJzZShjb25zdCBRdWFsaWZpZWROYW1lJiwg
Y29uc3QgU3RyaW5nJikgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIGluaXRpYWxWYWx1
ZSgpOyB9CiAgICAgc3RhdGljIFN0cmluZyB0b1N0cmluZyhzdGQ6OnBhaXI8ZmxvYXQsIGZsb2F0
PikgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIGVtcHR5U3RyaW5nKCk7IH0KQEAgLTEy
MywxNyArMTE0LDExIEBAIHN0cnVjdCBTVkdQcm9wZXJ0eVRyYWl0czxGbG9hdFBvaW50PiB7CiAg
ICAgc3RhdGljIEZsb2F0UG9pbnQgaW5pdGlhbFZhbHVlKCkgeyByZXR1cm4gRmxvYXRQb2ludCgp
OyB9CiAgICAgc3RhdGljIEZsb2F0UG9pbnQgZnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmlu
ZykKICAgICB7Ci0gICAgICAgIEZsb2F0UG9pbnQgcG9pbnQ7Ci0gICAgICAgIGlmICghcGFyc2VQ
b2ludChzdHJpbmcsIHBvaW50KSkKLSAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgIHJl
dHVybiBwb2ludDsKKyAgICAgICAgcmV0dXJuIHBhcnNlUG9pbnQoc3RyaW5nKS52YWx1ZU9yKEZs
b2F0UG9pbnQgeyB9KTsKICAgICB9CiAgICAgc3RhdGljIE9wdGlvbmFsPEZsb2F0UG9pbnQ+IHBh
cnNlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBTdHJpbmcmIHN0cmluZykKICAgICB7Ci0g
ICAgICAgIEZsb2F0UG9pbnQgcG9pbnQ7Ci0gICAgICAgIGlmICghcGFyc2VQb2ludChzdHJpbmcs
IHBvaW50KSkKLSAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgICAgIHJldHVy
biBwb2ludDsKKyAgICAgICAgcmV0dXJuIHBhcnNlUG9pbnQoc3RyaW5nKTsKICAgICB9CiAgICAg
c3RhdGljIFN0cmluZyB0b1N0cmluZyhjb25zdCBGbG9hdFBvaW50JiB0eXBlKQogICAgIHsKQEAg
LTE0NiwxNyArMTMxLDExIEBAIHN0cnVjdCBTVkdQcm9wZXJ0eVRyYWl0czxGbG9hdFJlY3Q+IHsK
ICAgICBzdGF0aWMgRmxvYXRSZWN0IGluaXRpYWxWYWx1ZSgpIHsgcmV0dXJuIEZsb2F0UmVjdCgp
OyB9CiAgICAgc3RhdGljIEZsb2F0UmVjdCBmcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5n
KQogICAgIHsKLSAgICAgICAgRmxvYXRSZWN0IHJlY3Q7Ci0gICAgICAgIGlmICghcGFyc2VSZWN0
KHN0cmluZywgcmVjdCkpCi0gICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICByZXR1cm4g
cmVjdDsKKyAgICAgICAgcmV0dXJuIHBhcnNlUmVjdChzdHJpbmcpLnZhbHVlT3IoRmxvYXRSZWN0
IHsgfSk7CiAgICAgfQogICAgIHN0YXRpYyBPcHRpb25hbDxGbG9hdFJlY3Q+IHBhcnNlKGNvbnN0
IFF1YWxpZmllZE5hbWUmLCBjb25zdCBTdHJpbmcmIHN0cmluZykKICAgICB7Ci0gICAgICAgIEZs
b2F0UmVjdCByZWN0OwotICAgICAgICBpZiAoIXBhcnNlUmVjdChzdHJpbmcsIHJlY3QpKQotICAg
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAgcmV0dXJuIHJlY3Q7CisgICAg
ICAgIHJldHVybiBwYXJzZVJlY3Qoc3RyaW5nKTsKICAgICB9CiAgICAgc3RhdGljIFN0cmluZyB0
b1N0cmluZyhjb25zdCBGbG9hdFJlY3QmIHR5cGUpCiAgICAgewo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>402431</attachid>
            <date>2020-06-21 15:18:49 -0700</date>
            <delta_ts>2020-06-21 15:47:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213416-20200621151848.patch</filename>
            <type>text/plain</type>
            <size>149777</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MzMzMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0NyBAQAorMjAyMC0wNi0yMSAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQ29udmVydCBtdWNoIG9mIHRoZSBT
Vkcgc3RyaW5nIHBhcnNpbmcgY29kZSB0byB1c2UgT3B0aW9uYWwgYmFzZWQgcmV0dXJuIHZhbHVl
cyByYXRoZXIgdGhhbiBvdXQtcGFyYW1ldGVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEzNDE2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4g
QWRsZXIuCisKKyAgICAgICAgVXBkYXRlIFNWRyBwYXJzZXJzIHRvIHVzZSBPcHRpb25hbCBzdHls
ZSByZXR1cm4gcHJvZ3JhbW1pbmcgcmF0aGVyIHRoYW4gb3V0IHBhcmFtZXRlcnMuCisgICAgICAg
IFRvIG1ha2UgdGhpbmdzIGV2ZW4gbmljZXIsIFNWR1BhdGhTb3VyY2UgYmFzZWQgcGFyc2VycyBu
b3cgaGF2ZSBhIHR5cGUgcGVyLXBhcnNlIGZ1bmN0aW9uLAorICAgICAgICB3aGljaCBtYWtlcyB3
b3JraW5nIHdpdGggdGhlbSBtdWNoIGVhc2llci4gSW4gdGhlIGZ1dHVyZSwgd2Ugc2hvdWxkIGNv
bnNpZGVyIGV4YW5kaW5nIHRoZXNlCisgICAgICAgIG5ldyB0eXBlcyB0byBiZSB1c2VkIGJ5IFNW
R1BhdGhDb25zdW1lciBmYW1pbHkgb2YgY2xhc3NlcyBhcyB3ZWxsLgorCisgICAgICAgICogV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICBBZGQgU1ZHUGF0aFNlZ1Zh
bHVlLmgsIHdoaWNoIHdhcyBtaXNzaW5nIGZyb20gdGhlIFhjb2RlIHByb2plY3QuCisKKyAgICAg
ICAgKiBzdmcvU1ZHQW5nbGVWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUFuZ2xl
VHlwZSk6IAorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5nbGVWYWx1ZTo6c2V0VmFsdWVBc1N0cmlu
Zyk6CisgICAgICAgIEFkb3B0IHVwZGF0ZWQgcGFyc2VOdW1iZXIoKSBmdW5jdGlvbiwgYW5kIGRv
IGEgZHJpdmUgYnkgcmVtb3ZhbCBvZiBhbiBlYXN5IHRvIHJlbW92ZQorICAgICAgICB1cGNvbnZl
cnRlZENoYXJhY3RlcnMuCisgCisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OjpjYWxjdWxh
dGVUb0F0RW5kT2ZEdXJhdGlvblZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVN
b3Rpb25FbGVtZW50OjpjYWxjdWxhdGVGcm9tQW5kVG9WYWx1ZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OmNhbGN1bGF0ZUZyb21BbmRCeVZhbHVlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6Y2FsY3VsYXRlRGlzdGFu
Y2UpOgorICAgICAgICBOb3cgdXNlcyBuZXcgcGFyc2VQb2ludCgpIGZ1bmN0aW9uLiBVc2luZyBP
cHRpb25hbC52YWx1ZU9yKCkgd2hlcmUKKyAgICAgICAgdGhlIG9sZCBjb2RlIHdvdWxkIGhhdmUg
aGFkIHBhcnNlUG9pbnQoKSBkb2luZyB0aGUgY2xlYXJpbmcuCisgICAgCisgICAgICAgICogc3Zn
L1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VLZXlTcGxp
bmVzKToKKyAgICAgICAgTm93IHJldHVybnMgYW4gT3B0aW9uYWw8VmVjdG9yPFVuaXRCZXppZXI+
Pi4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OnBhcnNlQXR0cmlidXRl
KToKKyAgICAgICAgTm93IHVzZXMgbmV3IHBhcnNlS2V5U3BsaW5lcywgYW5kIGRvZXMgYW4gZXhw
bGljaXQgY2xlYXIgb24gcGFyc2UgZmFpbHVyZSAob2xkIGNvZGUgCisgICAgICAgIGRpZCBpdCBp
bXBsaWNpdGx5IGluIHRoZSBwYXJzZSBmdW5jdGlvbikuCisKKyAgICAgICAgKiBzdmcvU1ZHRkVD
b252b2x2ZU1hdHJpeEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb252b2x2
ZU1hdHJpeEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKiBzdmcvU1ZHRkVEaWZm
dXNlTGlnaHRpbmdFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFRGlmZnVzZUxp
Z2h0aW5nRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAgICAgICAqIHN2Zy9TVkdGRURyb3BT
aGFkb3dFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFRHJvcFNoYWRvd0VsZW1l
bnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKiBzdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6cGFy
c2VBdHRyaWJ1dGUpOgorICAgICAgICAqIHN2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRl
KToKKyAgICAgICAgKiBzdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpwYXJzZUF0dHJpYnV0
ZSk6CisgICAgICAgICogc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAgICAg
ICBBZG9wdCBPcHRpb25hbCBiYXNlZCBwYXJzZU51bWJlck9wdGlvbmFsTnVtYmVyLgorCisgICAg
ICAgICogc3ZnL1NWR0ltYWdlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFn
ZUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKiBzdmcvU1ZHRkVJbWFnZUVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVJbWFnZUVsZW1lbnQ6OnBhcnNlQXR0cmli
dXRlKToKKyAgICAgICAgU2ltcGxpZnkgYnkgdXNpbmcgdGhlIFNWR1ByZXNlcnZlQXNwZWN0UmF0
aW9WYWx1ZSBjb25zdHJ1Y3RvcgorICAgICAgICB3aGljaCBjYWxscyBwYXJzZS4gTm8gbmVlZCBm
b3IgdGhyZWUgbGluZXMuCisKKyAgICAgICAgKiBzdmcvU1ZHRml0VG9WaWV3Qm94LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0ZpdFRvVmlld0JveDo6cGFyc2VBdHRyaWJ1dGUpOgorICAgICAg
ICBBZG9wdCBuZXcgT3B0aW9uYWwgYmFzZWQgcGFyc2VWaWV3Qm94LgorICAgICAgICBTaW1wbGlm
eSBieSB1c2luZyB0aGUgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlIGNvbnN0cnVjdG9yCisg
ICAgICAgIHdoaWNoIGNhbGxzIHBhcnNlLiBObyBuZWVkIGZvciB0aHJlZSBsaW5lcy4KKworICAg
ICAgICAoV2ViQ29yZTo6U1ZHRml0VG9WaWV3Qm94OjpwYXJzZVZpZXdCb3gpOgorICAgICAgICBD
b252ZXJ0IHRvIGJlIE9wdGlvbmFsIGJhc2VkLCBhbmQgYWRvcHQgbmV3IHBhcnNlTnVtYmVyIGZ1
bmN0aW9ucy4KKworICAgICAgICAqIHN2Zy9TVkdGaXRUb1ZpZXdCb3guaDoKKyAgICAgICAgVXBk
YXRlZCBzaWduYXR1cmVzIGZvciBuZXcgT3B0aW9uYWwgYmFzZWQgZnVuY3Rpb25zLgorCisgICAg
ICAgICogc3ZnL1NWR0dseXBoUmVmRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJz
ZUZsb2F0KToKKyAgICAgICAgQWRvcHQgT3B0aW9uYWwgYmFzZWQgcGFyc2VOdW1iZXIuCisgICAg
ICAgIAorICAgICAgICAqIHN2Zy9TVkdIS2VybkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHSEtlcm5FbGVtZW50OjpidWlsZEhvcml6b250YWxLZXJuaW5nUGFpciBjb25zdCk6Cisg
ICAgICAgICogc3ZnL1NWR0hLZXJuRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdWS2VybkVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVktlcm5FbGVtZW50OjpidWlsZFZlcnRp
Y2FsS2VybmluZ1BhaXIgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdWS2VybkVsZW1lbnQuaDoK
KyAgICAgICAgQ29udmVydCB0byBiZSBPcHRpb25hbCBiYXNlZC4gVXBkYXRlIGEgZmV3IGNhbGxl
cnMgdG8gdXNlIG1ha2VTdHJpbmcuCisKKyAgICAgICAgKiBzdmcvU1ZHVG9PVEZGb250Q29udmVy
c2lvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFkZEtl
cm5pbmdQYWlyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RvT1RGRm9udENvbnZlcnRl
cjo6YXBwZW5kS0VSTlN1YnRhYmxlKToKKyAgICAgICAgQWRvcHQgbmV3IE9wdGlvbmFsIGJhc2Vk
IGtlcm5pbmcgcGFpciBidWlsZGVycy4gQWRkIHNvbWUgbW92ZXMKKyAgICAgICAgdG8gYXZvaWQg
c29tZSBjb3BpZXMuCisKKyAgICAgICAgKiBzdmcvU1ZHTGVuZ3RoVmFsdWUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHTGVuZ3RoVmFsdWU6OnNldFZhbHVlQXNTdHJpbmcpOgorICAgICAgICBB
ZG9wdCBPcHRpb25hbCBiYXNlZCBwYXJzZU51bWJlci4KKworICAgICAgICAqIHN2Zy9TVkdOdW1i
ZXJMaXN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdOdW1iZXJMaXN0OjpwYXJzZSk6CisgICAg
ICAgIEFkb3B0IE9wdGlvbmFsIGJhc2VkIHBhcnNlTnVtYmVyLgorCisgICAgICAgICogc3ZnL1NW
R1BhcnNlclV0aWxpdGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZW5lcmljUGFyc2VOdW1i
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VOdW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6
Z2VuZXJpY1BhcnNlQXJjRmxhZyk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUFyY0ZsYWcpOgor
ICAgICAgICAoV2ViQ29yZTo6cGFyc2VOdW1iZXJPcHRpb25hbE51bWJlcik6CisgICAgICAgIChX
ZWJDb3JlOjpwYXJzZVBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlUmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpwYXJzZUdseXBoTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVVu
aWNvZGVSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUtlcm5pbmdVbmljb2RlU3RyaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OmdlbmVyaWNQYXJzZUZsb2F0UG9pbnQpOgorICAgICAgICAo
V2ViQ29yZTo6cGFyc2VGbG9hdFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlU1ZHTnVt
YmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlTnVtYmVyRnJvbVN0cmluZyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpwYXJzZURlbGltaXRlZFN0cmluZyk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpwYXJzZUZsb2F0UG9pbnQyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OnBhcnNlRmxvYXRQb2ludDMpOiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9T
VkdQYXJzZXJVdGlsaXRpZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OmlzU1ZHU3BhY2UpOgorICAg
ICAgICAoV2ViQ29yZTo6c2tpcE9wdGlvbmFsU1ZHU3BhY2VzKToKKyAgICAgICAgKFdlYkNvcmU6
OnNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVsaW1pdGVyKToKKyAgICAgICAgLSBDb252ZXJ0cyBw
YXJzZSogZnVuY3Rpb25zIHRvIHJldHVybiBPcHRpb25hbCB2YWx1ZXMgcmF0aGVyIHRoYW4gdXNp
bmcgb3V0cGFyYW1ldGVycy4KKyAgICAgICAgLSBSZW1vdmVzIHVudXNlZCBwYXJzZVNWR051bWJl
ciBhbmQgcGFyc2VEZWxpbWl0ZWRTdHJpbmcuCisgICAgICAgIC0gUmVtb3ZlcyBwYXJzZUZsb2F0
UG9pbnQyIGFuZCBwYXJzZUZsb2F0UG9pbnQzLiBUaGV5IHdlcmVuJ3QgdXNlZnVsIGVub3VnaCB0
byBrZWVwIGFyb3VuZC4KKyAgICAgICAgLSBSZW5hbWVzIHBhcnNlTnVtYmVyRnJvbVN0cmluZyB0
byBwYXJzZU51bWJlci4gVGhlIGFyZ3VtZW50IGlzIGEgU3RyaW5nLCBpdCdzIGNsZWFyIGVub3Vn
aC4KKyAgICAgICAgLSBSZXBsYWNlIGJvb2xlYW4gc2tpcCBwYXJhbWV0ZXJzIHdpdGggbmV3IGVu
dW0gU3VmZml4U2tpcHBpbmdQb2xpY3kuCisgICAgICAgIC0gTWFrZSBwYXJzZUZsb2F0UG9pbnQg
aGF2ZSB0d28gb3ZlcmxvYWRzIHJhdGhlciB0aGFuIGJlaW5nIHRlbXBsYXRpemVkIHRvIGJlIGNv
bnNpc3RlbnQuCisKKworICAgICAgICAqIHN2Zy9TVkdQYXRoQmxlbmRlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpwdWxsRnJvbVNvdXJjZXMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJs
ZW5kZXI6OmJsZW5kTW92ZVRvU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQmxl
bmRlcjo6YmxlbmRMaW5lVG9TZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCbGVu
ZGVyOjpibGVuZExpbmVUb0hvcml6b250YWxTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1BhdGhCbGVuZGVyOjpibGVuZExpbmVUb1ZlcnRpY2FsU2VnbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdQYXRoQmxlbmRlcjo6YmxlbmRDdXJ2ZVRvQ3ViaWNTZWdtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1BhdGhCbGVuZGVyOjpibGVuZEN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJsZW5kZXI6OmJsZW5kQ3VydmVUb1F1YWRyYXRp
Y1NlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJsZW5kZXI6OmJsZW5kQ3VydmVU
b1F1YWRyYXRpY1Ntb290aFNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJsZW5k
ZXI6OmJsZW5kQXJjVG9TZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCbGVuZGVy
OjpjYW5CbGVuZFBhdGhzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCbGVuZGVyOjpibGVu
ZEFuaW1hdGVkUGF0aCk6CisgICAgICAgIFVwZGF0ZSB0byBhZG9wdCBuZXcgU1ZHUGF0aFNvdXJj
ZSBpbnRlcmZhY2UuIEFkZGVkIHB1bGxGcm9tU291cmNlcyBoZWxwZXIKKyAgICAgICAgd2hpY2gg
c3Vic3RhbnRpYWxseSBzaW1wbGlmaWVzIHB1bGxpbmcgZnJvbSBib3RoIHRoZSBmcm9tIGFuZCB0
byBzb3VyY2UgYXQKKyAgICAgICAgdGhlIHNhbWUgdGltZSBhbmQgaXMgbm93IHBvc3NpYmxlIGR1
ZSB0byBhbGwgdGhlIFNWR1BhdGhTb3VyY2UgZnVuY3Rpb25zCisgICAgICAgIHJldHVybmluZyB0
aGUgc2VnbWVudCB0eXBlcyByYXRoZXIgdGhhbiB0YWtpbmcgdGhlbSBhcyBvdXQgcGFyYW1ldGVy
cy4KKworICAgICAgICAqIHN2Zy9TVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6bmV4dENvbW1hbmQpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlU1ZHU2VnbWVudFR5cGUp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlTW92ZVRv
U2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFy
c2VMaW5lVG9TZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFtU291
cmNlOjpwYXJzZUxpbmVUb0hvcml6b250YWxTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZUxpbmVUb1ZlcnRpY2FsU2VnbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VDdXJ2ZVRvQ3ViaWNT
ZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJz
ZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5
dGVTdHJlYW1Tb3VyY2U6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1Nt
b290aFNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6
OnBhcnNlQXJjVG9TZWdtZW50KToKKyAgICAgICAgKiBzdmcvU1ZHUGF0aEJ5dGVTdHJlYW1Tb3Vy
Y2UuaDoKKyAgICAgICAgQWRvcHQgbmV3IFNWR1BhdGhTb3VyY2UgaW50ZXJmYWNlLgorCisgICAg
ICAgICogc3ZnL1NWR1BhdGhQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFBh
cnNlcjo6cGFyc2VNb3ZlVG9TZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhQYXJz
ZXI6OnBhcnNlTGluZVRvU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoUGFyc2Vy
OjpwYXJzZUxpbmVUb0hvcml6b250YWxTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Bh
dGhQYXJzZXI6OnBhcnNlTGluZVRvVmVydGljYWxTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1BhdGhQYXJzZXI6OnBhcnNlQ3VydmVUb0N1YmljU2VnbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdQYXRoUGFyc2VyOjpwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHUGF0aFBhcnNlcjo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoUGFyc2VyOjpwYXJzZUN1cnZlVG9RdWFkcmF0
aWNTbW9vdGhTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhQYXJzZXI6OnBhcnNl
QXJjVG9TZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhQYXJzZXI6OnBhcnNlUGF0
aERhdGEpOgorICAgICAgICBBZGFwdCB0byBuZXcgU1ZHUGF0aFNvdXJjZSBpbnRlcmZhY2UuIENv
ZGUgcmVhZHMgYSBiaXQgbmljZXIgbm93CisgICAgICAgIHRoYXQgd2UgZG9uJ3QgaGF2ZSBhIHRv
biBvZiBsb2NhbCB2YXJpYWJsZXMgaW4gZWFjaCBtZXRob2QuIENvdWxkCisgICAgICAgIGJlIG1h
ZGUgbmljZXIgaW4gdGhlIGZ1dHVyZSBieSBhZG9wdGluZyBTZWdtZW50IHR5cGVzIGluIHRoZSBw
YXRoCisgICAgICAgIGNvbnN1bWVyIGNvZGUuCisKKyAgICAgICAgKiBzdmcvU1ZHUGF0aFNlZ0xp
c3RTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0xpc3RTb3VyY2U6Om5l
eHRDb21tYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJz
ZVNWR1NlZ21lbnRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdMaXN0U291cmNl
OjpwYXJzZU1vdmVUb1NlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0xpc3RT
b3VyY2U6OnBhcnNlTGluZVRvU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2Vn
TGlzdFNvdXJjZTo6cGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNlQ3VydmVUb0N1Ymlj
U2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VD
dXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdM
aXN0U291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUFyY1Rv
U2VnbWVudCk6CisgICAgICAgICogc3ZnL1NWR1BhdGhTZWdMaXN0U291cmNlLmg6CisgICAgICAg
IEFkb3B0IG5ldyBTVkdQYXRoU291cmNlIGludGVyZmFjZS4KKworICAgICAgICAqIHN2Zy9TVkdQ
YXRoU291cmNlLmg6CisgICAgICAgIFVwZGF0ZSBpbnRlcmZhY2UgdG8gcmV0dXJuIE9wdGlvbmFs
cywgd2l0aCBhIHNwZWNpZmljIHR5cGUgZm9yCisgICAgICAgIHNlZ21lbnQga2luZCB0aGF0IGJl
IHBhcnNlZC4KKworICAgICAgICAqIHN2Zy9TVkdQYXRoU3RyaW5nU291cmNlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Om5leHRDb21tYW5kSGVscGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Bh
dGhTdHJpbmdTb3VyY2U6Om5leHRDb21tYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlU1ZH
U2VnbWVudFR5cGVIZWxwZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFN0cmluZ1NvdXJj
ZTo6cGFyc2VTVkdTZWdtZW50VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU3RyaW5n
U291cmNlOjpwYXJzZU1vdmVUb1NlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFN0
cmluZ1NvdXJjZTo6cGFyc2VMaW5lVG9TZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Bh
dGhTdHJpbmdTb3VyY2U6OnBhcnNlTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VDdXJ2ZVRvQ3Vi
aWNTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNl
Q3VydmVUb0N1YmljU21vb3RoU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU3Ry
aW5nU291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VBcmNUb1Nl
Z21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VBcmNUb1NlZ21lbnRIZWxwZXIpOiBEZWxl
dGVkLgorICAgICAgICAqIHN2Zy9TVkdQYXRoU3RyaW5nU291cmNlLmg6CisgICAgICAgIEFkb3B0
IG5ldyBTVkdQYXRoU291cmNlIGludGVyZmFjZS4gUmVwbGFjZSBvdXQgb2YgbGluZSBoZWxwZXJz
IChvciB1c2Ugb2YgdGhpbmdzCisgICAgICAgIGxpa2UgcGFyc2VGbG9hdFBvaW50Mikgd2l0aCBn
ZW5lcmljIGxhbWJkYSBoZWxwZXJzLCBoZWxwaW5nIHRvIGtlZXAgdGhlIGNvZGUgbW9yZQorICAg
ICAgICBsb2NhbGl6ZWQuCisgICAgCisgICAgICAgICogc3ZnL1NWR1BvaW50TGlzdC5oOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHUG9pbnRMaXN0OjpwYXJzZSk6CisgICAgICAgIEFkb3B0IE9wdGlv
bmFsIGJhc2VkIHBhcnNlTnVtYmVyLgorCisgICAgICAgICogc3ZnL1NWR1RyYW5zZm9ybUxpc3Qu
aDoKKyAgICAgICAgKiBzdmcvU1ZHVHJhbnNmb3JtYWJsZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpwYXJzZVRyYW5zZm9ybVBhcmFtTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUcmFuc2Zv
cm1hYmxlOjpwYXJzZVRyYW5zZm9ybVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RyYW5z
Zm9ybWFibGU6OnBhcnNlQW5kU2tpcFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVHJhbnNm
b3JtYWJsZTo6cGFyc2VUcmFuc2Zvcm1UeXBlKToKKyAgICAgICAgKiBzdmcvU1ZHVHJhbnNmb3Jt
YWJsZS5oOgorICAgICAgICBDb252ZXJ0IHBhcnNlVHJhbnNmb3JtVmFsdWUvcGFyc2VBbmRTa2lw
VHlwZSB0byBiZSBPcHRpb25hbCBiYXNlZC4KKworICAgICAgICAqIHN2Zy9TVkdWaWV3U3BlYy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdWaWV3U3BlYzo6cGFyc2VWaWV3U3BlYyk6CisgICAg
ICAgIEFkb3B0IE9wdGlvbmFsIGJhc2VkIHBhcnNlVmlld0JveC4KKworICAgICAgICAqIHN2Zy9w
cm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbkltcGwuaDoKKyAgICAg
ICAgQWRvcHQgT3B0aW9uYWwgYmFzZWQgcGFyc2VOdW1iZXIuCisKKyAgICAgICAgKiBzdmcvcHJv
cGVydGllcy9TVkdQcm9wZXJ0eVRyYWl0cy5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVy
dHlUcmFpdHM8ZmxvYXQ+Ojpmcm9tU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Byb3Bl
cnR5VHJhaXRzPGZsb2F0Pjo6cGFyc2UpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJvcGVydHlU
cmFpdHM8RmxvYXRQb2ludD46OmZyb21TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUHJv
cGVydHlUcmFpdHM8RmxvYXRQb2ludD46OnBhcnNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1By
b3BlcnR5VHJhaXRzPEZsb2F0UmVjdD46OmZyb21TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUHJvcGVydHlUcmFpdHM8RmxvYXRSZWN0Pjo6cGFyc2UpOgorICAgICAgICBBZG9wdCBPcHRp
b25hbCBiYXNlZCBwYXJzZXJzLgorCiAyMDIwLTA2LTIxICBTYW0gV2VpbmlnICA8d2VpbmlnQGFw
cGxlLmNvbT4KIAogICAgICAgICBDb252ZXJ0IERhdGVDb21wb25lbnRzIHBhcnNpbmcgY29kZSB0
byB1c2UgT3B0aW9uYWwgYmFzZWQgcmV0dXJuIHZhbHVlcyByYXRoZXIgdGhhbiBvdXQtcGFyYW1l
dGVycwpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gMjYzMzMzKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMDA5MCw2ICsxMDA5
MCw3IEBACiAJCTdDODNERTg1MUQwNENCRDQwMEZFQkNGMyAvKiBTcHJpbmdTb2x2ZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3ByaW5nU29sdmVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTdDODVCMjAxMjJGQjA0ODUwMDMwNjg0RiAvKiBXSExTTFVubmFt
ZWRUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMVW5uYW1lZFR5cGUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Qzg1QjIwNDIyRkIwNjMyMDAzMDY4NEYgLyogV0hM
U0xVbm5hbWVkVHlwZUhhc2guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xVbm5hbWVkVHlwZUhhc2gu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0M4ODI0QzQyNDlEN0IwNTAwRUQ4RkM0
IC8qIFNWR1BhdGhTZWdWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
VkdQYXRoU2VnVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0M4RTM0OTIx
RTRBMzM4RTAwNTRDRTIzIC8qIEpTRE9NQ29udmVydEFueS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU0RPTUNvbnZlcnRBbnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJN0M4RTM0OTMxRTRBMzM4RTAwNTRDRTIzIC8qIEpTRE9NQ29udmVydEJhc2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNET01Db252ZXJ0QmFzZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3QzhFMzQ5NDFFNEEzMzhFMDA1NENFMjMgLyogSlNET01D
b252ZXJ0Qm9vbGVhbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0RPTUNv
bnZlcnRCb29sZWFuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNTIwOSw2ICsy
NTIxMCw3IEBACiAJCQkJODRCNkI5NzYxMjBGMTNFNTAwQjhFRkFGIC8qIFNWR1BhdGhTZWdMaXN0
U291cmNlLmggKi8sCiAJCQkJQjIyMjc4RUYwRDAwQkYyMTAwNzFCNzgyIC8qIFNWR1BhdGhTZWdN
b3ZldG9BYnMuaWRsICovLAogCQkJCUIyMjI3OEYwMEQwMEJGMjEwMDcxQjc4MiAvKiBTVkdQYXRo
U2VnTW92ZXRvUmVsLmlkbCAqLywKKwkJCQk3Qzg4MjRDNDI0OUQ3QjA1MDBFRDhGQzQgLyogU1ZH
UGF0aFNlZ1ZhbHVlLmggKi8sCiAJCQkJODQzMDBCRDcxMjBDOUFENDAwMjE5NTRBIC8qIFNWR1Bh
dGhTb3VyY2UuaCAqLywKIAkJCQk4NDE5RDJCNzEyMEUwQzc2MDAxNDFGOEYgLyogU1ZHUGF0aFN0
cmluZ0J1aWxkZXIuY3BwICovLAogCQkJCTg0MTlEMkI4MTIwRTBDNzYwMDE0MUY4RiAvKiBTVkdQ
YXRoU3RyaW5nQnVpbGRlci5oICovLApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuZ2xl
VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmdsZVZhbHVl
LmNwcAkocmV2aXNpb24gMjYzMzMzKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuZ2xlVmFs
dWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3IEBAIFN0cmluZyBTVkdBbmdsZVZh
bHVlOjp2YWx1ZUFzU3RyaW5nKCkgY28KICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgU1ZHQW5nbGVWYWx1ZTo6VHlwZSBwYXJzZUFuZ2xlVHlwZShjb25zdCBVQ2hhciog
cHRyLCBjb25zdCBVQ2hhciogZW5kKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4g
c3RhdGljIGlubGluZSBTVkdBbmdsZVZhbHVlOjpUeXBlIHBhcnNlQW5nbGVUeXBlKGNvbnN0IENo
YXJhY3RlclR5cGUqIHB0ciwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kKQogewogICAgIHN3aXRj
aCAoZW5kIC0gcHRyKSB7CiAgICAgY2FzZSAwOgpAQCAtMTA2LDIxICsxMDYsMjcgQEAgRXhjZXB0
aW9uT3I8dm9pZD4gU1ZHQW5nbGVWYWx1ZTo6c2V0VmFsdQogICAgICAgICByZXR1cm4geyB9Owog
ICAgIH0KIAotICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyh2YWx1
ZSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIqIHB0ciA9IHVwY29u
dmVydGVkQ2hhcmFjdGVyczsKLSAgICBjb25zdCBVQ2hhciogZW5kID0gcHRyICsgdmFsdWUubGVu
Z3RoKCk7Ci0KLSAgICBmbG9hdCB2YWx1ZUluU3BlY2lmaWVkVW5pdHMgPSAwOwotICAgIGlmICgh
cGFyc2VOdW1iZXIocHRyLCBlbmQsIHZhbHVlSW5TcGVjaWZpZWRVbml0cywgZmFsc2UpKQotICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKLQotICAgIGF1dG8gdW5pdFR5
cGUgPSBwYXJzZUFuZ2xlVHlwZShwdHIsIGVuZCk7Ci0gICAgaWYgKHVuaXRUeXBlID09IFNWR19B
TkdMRVRZUEVfVU5LTk9XTikKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9y
IH07CisgICAgYXV0byBoZWxwZXIgPSBbJl0oYXV0byogcHRyLCBhdXRvKiBlbmQpIC0+IEV4Y2Vw
dGlvbk9yPHZvaWQ+IHsKKyAgICAgICAgYXV0byB2YWx1ZUluU3BlY2lmaWVkVW5pdHMgPSBwYXJz
ZU51bWJlcihwdHIsIGVuZCwgU3VmZml4U2tpcHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsKKyAgICAg
ICAgaWYgKCF2YWx1ZUluU3BlY2lmaWVkVW5pdHMpCisgICAgICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgU3ludGF4RXJyb3IgfTsKKworICAgICAgICBhdXRvIHVuaXRUeXBlID0gcGFyc2VBbmds
ZVR5cGUocHRyLCBlbmQpOworICAgICAgICBpZiAodW5pdFR5cGUgPT0gU1ZHQW5nbGVWYWx1ZTo6
U1ZHX0FOR0xFVFlQRV9VTktOT1dOKQorICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5
bnRheEVycm9yIH07CiAKLSAgICBtX3VuaXRUeXBlID0gdW5pdFR5cGU7Ci0gICAgbV92YWx1ZUlu
U3BlY2lmaWVkVW5pdHMgPSB2YWx1ZUluU3BlY2lmaWVkVW5pdHM7Ci0gICAgcmV0dXJuIHsgfTsK
KyAgICAgICAgbV91bml0VHlwZSA9IHVuaXRUeXBlOworICAgICAgICBtX3ZhbHVlSW5TcGVjaWZp
ZWRVbml0cyA9ICp2YWx1ZUluU3BlY2lmaWVkVW5pdHM7CisgICAgICAgIHJldHVybiB7IH07Cisg
ICAgfTsKKworICAgIGlmICh2YWx1ZS5pczhCaXQoKSkgeworICAgICAgICBhdXRvKiBwdHIgPSB2
YWx1ZS5jaGFyYWN0ZXJzOCgpOworICAgICAgICByZXR1cm4gaGVscGVyKHB0ciwgcHRyICsgdmFs
dWUubGVuZ3RoKCkpOworICAgIH0KKworICAgIGF1dG8qIHB0ciA9IHZhbHVlLmNoYXJhY3RlcnMx
NigpOworICAgIHJldHVybiBoZWxwZXIocHRyLCBwdHIgKyB2YWx1ZS5sZW5ndGgoKSk7CiB9CiAK
IEV4Y2VwdGlvbk9yPHZvaWQ+IFNWR0FuZ2xlVmFsdWU6Om5ld1ZhbHVlU3BlY2lmaWVkVW5pdHMo
dW5zaWduZWQgc2hvcnQgdW5pdFR5cGUsIGZsb2F0IHZhbHVlSW5TcGVjaWZpZWRVbml0cykKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcAko
cmV2aXNpb24gMjYzMzMzKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25F
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNiBAQCB1c2luZyBuYW1lc3Bh
Y2UgU1ZHTmFtZXM7CiAKIGlubGluZSBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6U1ZHQW5pbWF0
ZU1vdGlvbkVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQmIGRv
Y3VtZW50KQogICAgIDogU1ZHQW5pbWF0aW9uRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkKLSAg
ICAsIG1faGFzVG9Qb2ludEF0RW5kT2ZEdXJhdGlvbihmYWxzZSkKIHsKICAgICBzZXRDYWxjTW9k
ZShDYWxjTW9kZTo6UGFjZWQpOwogICAgIEFTU0VSVChoYXNUYWdOYW1lKGFuaW1hdGVNb3Rpb25U
YWcpKTsKQEAgLTE2MSwyNyArMTYwLDI1IEBAIHZvaWQgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6
OnN0b3BBbmltYXQKIAogYm9vbCBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6Y2FsY3VsYXRlVG9B
dEVuZE9mRHVyYXRpb25WYWx1ZShjb25zdCBTdHJpbmcmIHRvQXRFbmRPZkR1cmF0aW9uU3RyaW5n
KQogewotICAgIHBhcnNlUG9pbnQodG9BdEVuZE9mRHVyYXRpb25TdHJpbmcsIG1fdG9Qb2ludEF0
RW5kT2ZEdXJhdGlvbik7Ci0gICAgbV9oYXNUb1BvaW50QXRFbmRPZkR1cmF0aW9uID0gdHJ1ZTsK
KyAgICBtX3RvUG9pbnRBdEVuZE9mRHVyYXRpb24gPSBwYXJzZVBvaW50KHRvQXRFbmRPZkR1cmF0
aW9uU3RyaW5nKS52YWx1ZU9yKEZsb2F0UG9pbnQgeyB9KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAogYm9vbCBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6Y2FsY3VsYXRlRnJvbUFuZFRvVmFsdWVz
KGNvbnN0IFN0cmluZyYgZnJvbVN0cmluZywgY29uc3QgU3RyaW5nJiB0b1N0cmluZykKIHsKLSAg
ICBtX2hhc1RvUG9pbnRBdEVuZE9mRHVyYXRpb24gPSBmYWxzZTsKLSAgICBwYXJzZVBvaW50KGZy
b21TdHJpbmcsIG1fZnJvbVBvaW50KTsKLSAgICBwYXJzZVBvaW50KHRvU3RyaW5nLCBtX3RvUG9p
bnQpOworICAgIG1fdG9Qb2ludEF0RW5kT2ZEdXJhdGlvbiA9IFdURjo6bnVsbG9wdDsKKyAgICBt
X2Zyb21Qb2ludCA9IHBhcnNlUG9pbnQoZnJvbVN0cmluZykudmFsdWVPcihGbG9hdFBvaW50IHsg
fSk7CisgICAgbV90b1BvaW50ID0gcGFyc2VQb2ludCh0b1N0cmluZykudmFsdWVPcihGbG9hdFBv
aW50IHsgfSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAgICAgCiBib29sIFNWR0FuaW1hdGVNb3Rp
b25FbGVtZW50OjpjYWxjdWxhdGVGcm9tQW5kQnlWYWx1ZXMoY29uc3QgU3RyaW5nJiBmcm9tU3Ry
aW5nLCBjb25zdCBTdHJpbmcmIGJ5U3RyaW5nKQogewotICAgIG1faGFzVG9Qb2ludEF0RW5kT2ZE
dXJhdGlvbiA9IGZhbHNlOworICAgIG1fdG9Qb2ludEF0RW5kT2ZEdXJhdGlvbiA9IFdURjo6bnVs
bG9wdDsKICAgICBpZiAoYW5pbWF0aW9uTW9kZSgpID09IEFuaW1hdGlvbk1vZGU6OkJ5ICYmICFp
c0FkZGl0aXZlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBwYXJzZVBvaW50KGZyb21T
dHJpbmcsIG1fZnJvbVBvaW50KTsKLSAgICBGbG9hdFBvaW50IGJ5UG9pbnQ7Ci0gICAgcGFyc2VQ
b2ludChieVN0cmluZywgYnlQb2ludCk7CisgICAgbV9mcm9tUG9pbnQgPSBwYXJzZVBvaW50KGZy
b21TdHJpbmcpLnZhbHVlT3IoRmxvYXRQb2ludCB7IH0pOworICAgIGF1dG8gYnlQb2ludCA9IHBh
cnNlUG9pbnQoYnlTdHJpbmcpLnZhbHVlT3IoRmxvYXRQb2ludCB7IH0pOwogICAgIG1fdG9Qb2lu
dCA9IEZsb2F0UG9pbnQobV9mcm9tUG9pbnQueCgpICsgYnlQb2ludC54KCksIG1fZnJvbVBvaW50
LnkoKSArIGJ5UG9pbnQueSgpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTIyMiw4ICsyMTks
OCBAQCB2b2lkIFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OjpjYWxjdWxhdGVBCiAKICAgICBpZiAo
YW5pbWF0aW9uTW9kZSgpICE9IEFuaW1hdGlvbk1vZGU6OlBhdGgpIHsKICAgICAgICAgRmxvYXRQ
b2ludCB0b1BvaW50QXRFbmRPZkR1cmF0aW9uID0gbV90b1BvaW50OwotICAgICAgICBpZiAoaXNB
Y2N1bXVsYXRlZCgpICYmIHJlcGVhdENvdW50ICYmIG1faGFzVG9Qb2ludEF0RW5kT2ZEdXJhdGlv
bikKLSAgICAgICAgICAgIHRvUG9pbnRBdEVuZE9mRHVyYXRpb24gPSBtX3RvUG9pbnRBdEVuZE9m
RHVyYXRpb247CisgICAgICAgIGlmIChpc0FjY3VtdWxhdGVkKCkgJiYgcmVwZWF0Q291bnQgJiYg
bV90b1BvaW50QXRFbmRPZkR1cmF0aW9uKQorICAgICAgICAgICAgdG9Qb2ludEF0RW5kT2ZEdXJh
dGlvbiA9ICptX3RvUG9pbnRBdEVuZE9mRHVyYXRpb247CiAKICAgICAgICAgZmxvYXQgYW5pbWF0
ZWRYID0gMDsKICAgICAgICAgYW5pbWF0ZUFkZGl0aXZlTnVtYmVyKHBlcmNlbnRhZ2UsIHJlcGVh
dENvdW50LCBtX2Zyb21Qb2ludC54KCksIG1fdG9Qb2ludC54KCksIHRvUG9pbnRBdEVuZE9mRHVy
YXRpb24ueCgpLCBhbmltYXRlZFgpOwpAQCAtMjc1LDEzICsyNzIsMTMgQEAgdm9pZCBTVkdBbmlt
YXRlTW90aW9uRWxlbWVudDo6YXBwbHlSZXN1bAogCiBPcHRpb25hbDxmbG9hdD4gU1ZHQW5pbWF0
ZU1vdGlvbkVsZW1lbnQ6OmNhbGN1bGF0ZURpc3RhbmNlKGNvbnN0IFN0cmluZyYgZnJvbVN0cmlu
ZywgY29uc3QgU3RyaW5nJiB0b1N0cmluZykKIHsKLSAgICBGbG9hdFBvaW50IGZyb207Ci0gICAg
RmxvYXRQb2ludCB0bzsKLSAgICBpZiAoIXBhcnNlUG9pbnQoZnJvbVN0cmluZywgZnJvbSkpCisg
ICAgYXV0byBmcm9tID0gcGFyc2VQb2ludChmcm9tU3RyaW5nKTsKKyAgICBpZiAoIWZyb20pCiAg
ICAgICAgIHJldHVybiB7IH07Ci0gICAgaWYgKCFwYXJzZVBvaW50KHRvU3RyaW5nLCB0bykpCisg
ICAgYXV0byB0byA9IHBhcnNlUG9pbnQodG9TdHJpbmcpOworICAgIGlmICghdG8pCiAgICAgICAg
IHJldHVybiB7IH07Ci0gICAgRmxvYXRTaXplIGRpZmYgPSB0byAtIGZyb207CisgICAgYXV0byBk
aWZmID0gKnRvIC0gKmZyb207CiAgICAgcmV0dXJuIHN0ZDo6aHlwb3QoZGlmZi53aWR0aCgpLCBk
aWZmLmhlaWdodCgpKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVN
b3Rpb25FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1h
dGVNb3Rpb25FbGVtZW50LmgJKHJldmlzaW9uIDI2MzMzMykKKysrIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCwxNCArNTgs
MTIgQEAgcHJpdmF0ZToKICAgICBSb3RhdGVNb2RlIHJvdGF0ZU1vZGUoKSBjb25zdDsKICAgICB2
b2lkIGJ1aWxkVHJhbnNmb3JtRm9yUHJvZ3Jlc3MoQWZmaW5lVHJhbnNmb3JtKiwgZmxvYXQgcGVy
Y2VudGFnZSk7CiAKLSAgICBib29sIG1faGFzVG9Qb2ludEF0RW5kT2ZEdXJhdGlvbjsKLQogICAg
IHZvaWQgdXBkYXRlQW5pbWF0aW9uTW9kZSgpIG92ZXJyaWRlOwogCiAgICAgLy8gTm90ZTogd2Ug
ZG8gbm90IHN1cHBvcnQgcGVyY2VudGFnZSB2YWx1ZXMgZm9yIHRvL2Zyb20gY29vcmRzIGFzIHRo
ZSBzcGVjIGltcGxpZXMgd2Ugc2hvdWxkIChvcGVyYSBkb2Vzbid0IGVpdGhlcikKICAgICBGbG9h
dFBvaW50IG1fZnJvbVBvaW50OwogICAgIEZsb2F0UG9pbnQgbV90b1BvaW50OwotICAgIEZsb2F0
UG9pbnQgbV90b1BvaW50QXRFbmRPZkR1cmF0aW9uOworICAgIE9wdGlvbmFsPEZsb2F0UG9pbnQ+
IG1fdG9Qb2ludEF0RW5kT2ZEdXJhdGlvbjsKIAogICAgIFBhdGggbV9wYXRoOwogICAgIFBhdGgg
bV9hbmltYXRpb25QYXRoOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRpb25F
bGVtZW50LmNwcAkocmV2aXNpb24gMjYzMzMzKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Fu
aW1hdGlvbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw0NCArNzcsMzcgQEAgZmFp
bDoKICAgICByZXN1bHQuY2xlYXIoKTsKIH0KIAotc3RhdGljIHZvaWQgcGFyc2VLZXlTcGxpbmVz
KGNvbnN0IFN0cmluZyYgcGFyc2UsIFZlY3RvcjxVbml0QmV6aWVyPiYgcmVzdWx0KQorc3RhdGlj
IE9wdGlvbmFsPFZlY3RvcjxVbml0QmV6aWVyPj4gcGFyc2VLZXlTcGxpbmVzKGNvbnN0IFN0cmlu
Z1ZpZXcmIHBhcnNlKQogewotICAgIHJlc3VsdC5jbGVhcigpOwogICAgIGlmIChwYXJzZS5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAot
ICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyhwYXJzZSkudXBjb252
ZXJ0ZWRDaGFyYWN0ZXJzKCk7CisgICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBwYXJz
ZS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKICAgICBjb25zdCBVQ2hhciogY3VyID0gdXBjb252
ZXJ0ZWRDaGFyYWN0ZXJzOwogICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBjdXIgKyBwYXJzZS5sZW5n
dGgoKTsKIAogICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhjdXIsIGVuZCk7CiAKKyAgICBWZWN0
b3I8VW5pdEJlemllcj4gcmVzdWx0OworCiAgICAgYm9vbCBkZWxpbVBhcnNlZCA9IGZhbHNlOwog
ICAgIHdoaWxlIChjdXIgPCBlbmQpIHsKICAgICAgICAgZGVsaW1QYXJzZWQgPSBmYWxzZTsKLSAg
ICAgICAgZmxvYXQgcG9zQSA9IDA7Ci0gICAgICAgIGlmICghcGFyc2VOdW1iZXIoY3VyLCBlbmQs
IHBvc0EpKSB7Ci0gICAgICAgICAgICByZXN1bHQuY2xlYXIoKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotCi0gICAgICAgIGZsb2F0IHBvc0IgPSAwOwotICAgICAgICBpZiAoIXBh
cnNlTnVtYmVyKGN1ciwgZW5kLCBwb3NCKSkgewotICAgICAgICAgICAgcmVzdWx0LmNsZWFyKCk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBmbG9hdCBwb3NDID0g
MDsKLSAgICAgICAgaWYgKCFwYXJzZU51bWJlcihjdXIsIGVuZCwgcG9zQykpIHsKLSAgICAgICAg
ICAgIHJlc3VsdC5jbGVhcigpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAg
ICAgICAgZmxvYXQgcG9zRCA9IDA7Ci0gICAgICAgIGlmICghcGFyc2VOdW1iZXIoY3VyLCBlbmQs
IHBvc0QsIGZhbHNlKSkgewotICAgICAgICAgICAgcmVzdWx0LmNsZWFyKCk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KKyAgICAgICAgYXV0byBwb3NBID0gcGFyc2VOdW1iZXIoY3Vy
LCBlbmQpOworICAgICAgICBpZiAoIXBvc0EpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworCisgICAgICAgIGF1dG8gcG9zQiA9IHBhcnNlTnVtYmVyKGN1ciwgZW5kKTsKKyAgICAg
ICAgaWYgKCFwb3NCKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgICAg
ICBhdXRvIHBvc0MgPSBwYXJzZU51bWJlcihjdXIsIGVuZCk7CisgICAgICAgIGlmICghcG9zQykK
KyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICAgICAgYXV0byBwb3NEID0g
cGFyc2VOdW1iZXIoY3VyLCBlbmQsIFN1ZmZpeFNraXBwaW5nUG9saWN5OjpEb250U2tpcCk7Cisg
ICAgICAgIGlmICghcG9zRCkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAg
ICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGN1ciwgZW5kKTsKIApAQCAtMTIyLDEyICsxMTUs
MTYgQEAgc3RhdGljIHZvaWQgcGFyc2VLZXlTcGxpbmVzKGNvbnN0IFN0cmluZwogICAgICAgICAg
ICAgZGVsaW1QYXJzZWQgPSB0cnVlOwogICAgICAgICAgICAgY3VyKys7CiAgICAgICAgIH0KKwog
ICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoY3VyLCBlbmQpOwogCi0gICAgICAgIHJlc3Vs
dC5hcHBlbmQoVW5pdEJlemllcihwb3NBLCBwb3NCLCBwb3NDLCBwb3NEKSk7CisgICAgICAgIHJl
c3VsdC5hcHBlbmQoVW5pdEJlemllciB7ICpwb3NBLCAqcG9zQiwgKnBvc0MsICpwb3NEIH0pOwog
ICAgIH0KKwogICAgIGlmICghKGN1ciA9PSBlbmQgJiYgIWRlbGltUGFyc2VkKSkKLSAgICAgICAg
cmVzdWx0LmNsZWFyKCk7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICByZXR1
cm4gcmVzdWx0OwogfQogCiBib29sIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0
cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQpAQCAtMTgwLDcgKzE3NywxMCBA
QCB2b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlCiAgICAgfQogCiAgICAg
aWYgKG5hbWUgPT0gU1ZHTmFtZXM6OmtleVNwbGluZXNBdHRyKSB7Ci0gICAgICAgIHBhcnNlS2V5
U3BsaW5lcyh2YWx1ZSwgbV9rZXlTcGxpbmVzKTsKKyAgICAgICAgaWYgKGF1dG8ga2V5U3BsaW5l
cyA9IHBhcnNlS2V5U3BsaW5lcyh2YWx1ZSkpCisgICAgICAgICAgICBtX2tleVNwbGluZXMgPSBX
VEZNb3ZlKCprZXlTcGxpbmVzKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9rZXlTcGxp
bmVzLmNsZWFyKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmNwcAkocmV2aXNpb24g
MjYzMzMzKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsMTAgKzY3LDEwIEBAIHZvaWQgU1ZHRkVDb252b2x2
ZU1hdHJpeEVsZW1lbnQ6OnBhcnNlQXQKICAgICB9CiAKICAgICBpZiAobmFtZSA9PSBTVkdOYW1l
czo6b3JkZXJBdHRyKSB7Ci0gICAgICAgIGZsb2F0IHgsIHk7Ci0gICAgICAgIGlmIChwYXJzZU51
bWJlck9wdGlvbmFsTnVtYmVyKHZhbHVlLCB4LCB5KSAmJiB4ID49IDEgJiYgeSA+PSAxKSB7Ci0g
ICAgICAgICAgICBtX29yZGVyWC0+c2V0QmFzZVZhbEludGVybmFsKHgpOwotICAgICAgICAgICAg
bV9vcmRlclktPnNldEJhc2VWYWxJbnRlcm5hbCh5KTsKKyAgICAgICAgYXV0byByZXN1bHQgPSBw
YXJzZU51bWJlck9wdGlvbmFsTnVtYmVyKHZhbHVlKTsKKyAgICAgICAgaWYgKHJlc3VsdCAmJiBy
ZXN1bHQtPmZpcnN0ID49IDEgJiYgcmVzdWx0LT5zZWNvbmQgPj0gMSkgeworICAgICAgICAgICAg
bV9vcmRlclgtPnNldEJhc2VWYWxJbnRlcm5hbChyZXN1bHQtPmZpcnN0KTsKKyAgICAgICAgICAg
IG1fb3JkZXJZLT5zZXRCYXNlVmFsSW50ZXJuYWwocmVzdWx0LT5zZWNvbmQpOwogICAgICAgICB9
IGVsc2UKICAgICAgICAgICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnJlcG9y
dFdhcm5pbmcoImZlQ29udm9sdmVNYXRyaXg6IHByb2JsZW0gcGFyc2luZyBvcmRlcj1cIiIgKyB2
YWx1ZSArICJcIi4gRmlsdGVyZWQgZWxlbWVudCB3aWxsIG5vdCBiZSBkaXNwbGF5ZWQuIik7CiAg
ICAgICAgIHJldHVybjsKQEAgLTExNSwxMCArMTE1LDEwIEBAIHZvaWQgU1ZHRkVDb252b2x2ZU1h
dHJpeEVsZW1lbnQ6OnBhcnNlQXQKICAgICB9CiAKICAgICBpZiAobmFtZSA9PSBTVkdOYW1lczo6
a2VybmVsVW5pdExlbmd0aEF0dHIpIHsKLSAgICAgICAgZmxvYXQgeCwgeTsKLSAgICAgICAgaWYg
KHBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIodmFsdWUsIHgsIHkpICYmIHggPiAwICYmIHkgPiAw
KSB7Ci0gICAgICAgICAgICBtX2tlcm5lbFVuaXRMZW5ndGhYLT5zZXRCYXNlVmFsSW50ZXJuYWwo
eCk7Ci0gICAgICAgICAgICBtX2tlcm5lbFVuaXRMZW5ndGhZLT5zZXRCYXNlVmFsSW50ZXJuYWwo
eSk7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gcGFyc2VOdW1iZXJPcHRpb25hbE51bWJlcih2YWx1
ZSk7CisgICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LT5maXJzdCA+IDAgJiYgcmVzdWx0LT5z
ZWNvbmQgPiAwKSB7CisgICAgICAgICAgICBtX2tlcm5lbFVuaXRMZW5ndGhYLT5zZXRCYXNlVmFs
SW50ZXJuYWwocmVzdWx0LT5maXJzdCk7CisgICAgICAgICAgICBtX2tlcm5lbFVuaXRMZW5ndGhZ
LT5zZXRCYXNlVmFsSW50ZXJuYWwocmVzdWx0LT5zZWNvbmQpOwogICAgICAgICB9IGVsc2UKICAg
ICAgICAgICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnJlcG9ydFdhcm5pbmco
ImZlQ29udm9sdmVNYXRyaXg6IHByb2JsZW0gcGFyc2luZyBrZXJuZWxVbml0TGVuZ3RoPVwiIiAr
IHZhbHVlICsgIlwiLiBGaWx0ZXJlZCBlbGVtZW50IHdpbGwgbm90IGJlIGRpc3BsYXllZC4iKTsK
ICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxp
Z2h0aW5nRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
RGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHAJKHJldmlzaW9uIDI2MzMzMykKKysrIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03MSwxMCArNzEsOSBAQCB2b2lkIFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6cGFy
c2VBCiAgICAgfQogCiAgICAgaWYgKG5hbWUgPT0gU1ZHTmFtZXM6Omtlcm5lbFVuaXRMZW5ndGhB
dHRyKSB7Ci0gICAgICAgIGZsb2F0IHgsIHk7Ci0gICAgICAgIGlmIChwYXJzZU51bWJlck9wdGlv
bmFsTnVtYmVyKHZhbHVlLCB4LCB5KSkgewotICAgICAgICAgICAgbV9rZXJuZWxVbml0TGVuZ3Ro
WC0+c2V0QmFzZVZhbEludGVybmFsKHgpOwotICAgICAgICAgICAgbV9rZXJuZWxVbml0TGVuZ3Ro
WS0+c2V0QmFzZVZhbEludGVybmFsKHkpOworICAgICAgICBpZiAoYXV0byByZXN1bHQgPSBwYXJz
ZU51bWJlck9wdGlvbmFsTnVtYmVyKHZhbHVlKSkgeworICAgICAgICAgICAgbV9rZXJuZWxVbml0
TGVuZ3RoWC0+c2V0QmFzZVZhbEludGVybmFsKHJlc3VsdC0+Zmlyc3QpOworICAgICAgICAgICAg
bV9rZXJuZWxVbml0TGVuZ3RoWS0+c2V0QmFzZVZhbEludGVybmFsKHJlc3VsdC0+c2Vjb25kKTsK
ICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmNwcAkocmV2aXNpb24gMjYzMzMzKQorKysg
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02MSwxMCArNjEsOSBAQCB2b2lkIFNWR0ZFRHJvcFNoYWRvd0VsZW1lbnQ6OnNldFN0
ZERldmlhCiB2b2lkIFNWR0ZFRHJvcFNoYWRvd0VsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0
IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21TdHJpbmcmIHZhbHVlKQogewogICAgIGlm
IChuYW1lID09IFNWR05hbWVzOjpzdGREZXZpYXRpb25BdHRyKSB7Ci0gICAgICAgIGZsb2F0IHgs
IHk7Ci0gICAgICAgIGlmIChwYXJzZU51bWJlck9wdGlvbmFsTnVtYmVyKHZhbHVlLCB4LCB5KSkg
ewotICAgICAgICAgICAgbV9zdGREZXZpYXRpb25YLT5zZXRCYXNlVmFsSW50ZXJuYWwoeCk7Ci0g
ICAgICAgICAgICBtX3N0ZERldmlhdGlvblktPnNldEJhc2VWYWxJbnRlcm5hbCh5KTsKKyAgICAg
ICAgaWYgKGF1dG8gcmVzdWx0ID0gcGFyc2VOdW1iZXJPcHRpb25hbE51bWJlcih2YWx1ZSkpIHsK
KyAgICAgICAgICAgIG1fc3RkRGV2aWF0aW9uWC0+c2V0QmFzZVZhbEludGVybmFsKHJlc3VsdC0+
Zmlyc3QpOworICAgICAgICAgICAgbV9zdGREZXZpYXRpb25ZLT5zZXRCYXNlVmFsSW50ZXJuYWwo
cmVzdWx0LT5zZWNvbmQpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmNwcAko
cmV2aXNpb24gMjYzMzMzKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVy
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwLDEwICs2MCw5IEBAIHZvaWQgU1ZHRkVH
YXVzc2lhbkJsdXJFbGVtZW50OjpzZXRTdGREZXYKIHZvaWQgU1ZHRkVHYXVzc2lhbkJsdXJFbGVt
ZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9t
U3RyaW5nJiB2YWx1ZSkKIHsKICAgICBpZiAobmFtZSA9PSBTVkdOYW1lczo6c3RkRGV2aWF0aW9u
QXR0cikgewotICAgICAgICBmbG9hdCB4LCB5OwotICAgICAgICBpZiAocGFyc2VOdW1iZXJPcHRp
b25hbE51bWJlcih2YWx1ZSwgeCwgeSkpIHsKLSAgICAgICAgICAgIG1fc3RkRGV2aWF0aW9uWC0+
c2V0QmFzZVZhbEludGVybmFsKHgpOwotICAgICAgICAgICAgbV9zdGREZXZpYXRpb25ZLT5zZXRC
YXNlVmFsSW50ZXJuYWwoeSk7CisgICAgICAgIGlmIChhdXRvIHJlc3VsdCA9IHBhcnNlTnVtYmVy
T3B0aW9uYWxOdW1iZXIodmFsdWUpKSB7CisgICAgICAgICAgICBtX3N0ZERldmlhdGlvblgtPnNl
dEJhc2VWYWxJbnRlcm5hbChyZXN1bHQtPmZpcnN0KTsKKyAgICAgICAgICAgIG1fc3RkRGV2aWF0
aW9uWS0+c2V0QmFzZVZhbEludGVybmFsKHJlc3VsdC0+c2Vjb25kKTsKICAgICAgICAgfQogICAg
ICAgICByZXR1cm47CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVs
ZW1lbnQuY3BwCShyZXZpc2lvbiAyNjMzMzMpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJ
bWFnZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcsOSArMTE3LDcgQEAgdm9pZCBT
VkdGRUltYWdlRWxlbWVudDo6YnVpbGRQZW5kaW5nUmVzbwogdm9pZCBTVkdGRUltYWdlRWxlbWVu
dDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbVN0
cmluZyYgdmFsdWUpCiB7CiAgICAgaWYgKG5hbWUgPT0gU1ZHTmFtZXM6OnByZXNlcnZlQXNwZWN0
UmF0aW9BdHRyKSB7Ci0gICAgICAgIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSBwcmVzZXJ2
ZUFzcGVjdFJhdGlvOwotICAgICAgICBwcmVzZXJ2ZUFzcGVjdFJhdGlvLnBhcnNlKHZhbHVlKTsK
LSAgICAgICAgbV9wcmVzZXJ2ZUFzcGVjdFJhdGlvLT5zZXRCYXNlVmFsSW50ZXJuYWwocHJlc2Vy
dmVBc3BlY3RSYXRpbyk7CisgICAgICAgIG1fcHJlc2VydmVBc3BlY3RSYXRpby0+c2V0QmFzZVZh
bEludGVybmFsKFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSB7IHZhbHVlIH0pOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9s
b2d5RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9y
cGhvbG9neUVsZW1lbnQuY3BwCShyZXZpc2lvbiAyNjMzMzMpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxLDEwICs3
MSw5IEBAIHZvaWQgU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6cGFyc2VBdHRyaWIKICAgICB9CiAK
ICAgICBpZiAobmFtZSA9PSBTVkdOYW1lczo6cmFkaXVzQXR0cikgewotICAgICAgICBmbG9hdCB4
LCB5OwotICAgICAgICBpZiAocGFyc2VOdW1iZXJPcHRpb25hbE51bWJlcih2YWx1ZSwgeCwgeSkp
IHsKLSAgICAgICAgICAgIG1fcmFkaXVzWC0+c2V0QmFzZVZhbEludGVybmFsKHgpOwotICAgICAg
ICAgICAgbV9yYWRpdXNZLT5zZXRCYXNlVmFsSW50ZXJuYWwoeSk7CisgICAgICAgIGlmIChhdXRv
IHJlc3VsdCA9IHBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIodmFsdWUpKSB7CisgICAgICAgICAg
ICBtX3JhZGl1c1gtPnNldEJhc2VWYWxJbnRlcm5hbChyZXN1bHQtPmZpcnN0KTsKKyAgICAgICAg
ICAgIG1fcmFkaXVzWS0+c2V0QmFzZVZhbEludGVybmFsKHJlc3VsdC0+c2Vjb25kKTsKICAgICAg
ICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmNwcAkocmV2aXNpb24gMjYzMzMz
KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03OCwxMCArNzgsOSBAQCB2b2lkIFNWR0ZFU3BlY3VsYXJMaWdo
dGluZ0VsZW1lbnQ6OnBhcnNlCiAgICAgfQogCiAgICAgaWYgKG5hbWUgPT0gU1ZHTmFtZXM6Omtl
cm5lbFVuaXRMZW5ndGhBdHRyKSB7Ci0gICAgICAgIGZsb2F0IHgsIHk7Ci0gICAgICAgIGlmIChw
YXJzZU51bWJlck9wdGlvbmFsTnVtYmVyKHZhbHVlLCB4LCB5KSkgewotICAgICAgICAgICAgbV9r
ZXJuZWxVbml0TGVuZ3RoWC0+c2V0QmFzZVZhbEludGVybmFsKHgpOwotICAgICAgICAgICAgbV9r
ZXJuZWxVbml0TGVuZ3RoWS0+c2V0QmFzZVZhbEludGVybmFsKHkpOworICAgICAgICBpZiAoYXV0
byByZXN1bHQgPSBwYXJzZU51bWJlck9wdGlvbmFsTnVtYmVyKHZhbHVlKSkgeworICAgICAgICAg
ICAgbV9rZXJuZWxVbml0TGVuZ3RoWC0+c2V0QmFzZVZhbEludGVybmFsKHJlc3VsdC0+Zmlyc3Qp
OworICAgICAgICAgICAgbV9rZXJuZWxVbml0TGVuZ3RoWS0+c2V0QmFzZVZhbEludGVybmFsKHJl
c3VsdC0+c2Vjb25kKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDog
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmNwcAkocmV2aXNp
b24gMjYzMzMzKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NywxMCArNjcsOSBAQCB2b2lkIFNWR0ZFVHVyYnVsZW5j
ZUVsZW1lbnQ6OnBhcnNlQXR0cmliCiAgICAgfQogCiAgICAgaWYgKG5hbWUgPT0gU1ZHTmFtZXM6
OmJhc2VGcmVxdWVuY3lBdHRyKSB7Ci0gICAgICAgIGZsb2F0IHgsIHk7Ci0gICAgICAgIGlmIChw
YXJzZU51bWJlck9wdGlvbmFsTnVtYmVyKHZhbHVlLCB4LCB5KSkgewotICAgICAgICAgICAgbV9i
YXNlRnJlcXVlbmN5WC0+c2V0QmFzZVZhbEludGVybmFsKHgpOwotICAgICAgICAgICAgbV9iYXNl
RnJlcXVlbmN5WS0+c2V0QmFzZVZhbEludGVybmFsKHkpOworICAgICAgICBpZiAoYXV0byByZXN1
bHQgPSBwYXJzZU51bWJlck9wdGlvbmFsTnVtYmVyKHZhbHVlKSkgeworICAgICAgICAgICAgbV9i
YXNlRnJlcXVlbmN5WC0+c2V0QmFzZVZhbEludGVybmFsKHJlc3VsdC0+Zmlyc3QpOworICAgICAg
ICAgICAgbV9iYXNlRnJlcXVlbmN5WS0+c2V0QmFzZVZhbEludGVybmFsKHJlc3VsdC0+c2Vjb25k
KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZpdFRvVmlld0JveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZpdFRvVmlld0JveC5jcHAJKHJldmlzaW9uIDI2MzMzMykKKysrIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGaXRUb1ZpZXdCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3MyArNjYs
NzEgQEAgdm9pZCBTVkdGaXRUb1ZpZXdCb3g6OnJlc2V0KCkKIGJvb2wgU1ZHRml0VG9WaWV3Qm94
OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9tU3Ry
aW5nJiB2YWx1ZSkKIHsKICAgICBpZiAobmFtZSA9PSBTVkdOYW1lczo6dmlld0JveEF0dHIpIHsK
LSAgICAgICAgRmxvYXRSZWN0IHZpZXdCb3g7Ci0gICAgICAgIGlmICghdmFsdWUuaXNOdWxsKCkg
JiYgcGFyc2VWaWV3Qm94KHZhbHVlLCB2aWV3Qm94KSkKLSAgICAgICAgICAgIHNldFZpZXdCb3go
dmlld0JveCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJlc2V0Vmlld0JveCgpOworICAg
ICAgICBpZiAoIXZhbHVlLmlzTnVsbCgpKSB7CisgICAgICAgICAgICBpZiAoYXV0byByZXN1bHQg
PSBwYXJzZVZpZXdCb3godmFsdWUpKSB7CisgICAgICAgICAgICAgICAgc2V0Vmlld0JveChXVEZN
b3ZlKCpyZXN1bHQpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICByZXNldFZpZXdCb3goKTsKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogCiAgICAgaWYgKG5hbWUgPT0gU1ZHTmFtZXM6OnByZXNlcnZlQXNwZWN0UmF0
aW9BdHRyKSB7Ci0gICAgICAgIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSBwcmVzZXJ2ZUFz
cGVjdFJhdGlvOwotICAgICAgICBwcmVzZXJ2ZUFzcGVjdFJhdGlvLnBhcnNlKHZhbHVlKTsKLSAg
ICAgICAgc2V0UHJlc2VydmVBc3BlY3RSYXRpbyhwcmVzZXJ2ZUFzcGVjdFJhdGlvKTsKKyAgICAg
ICAgc2V0UHJlc2VydmVBc3BlY3RSYXRpbyhTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUgeyB2
YWx1ZSB9KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi1ib29sIFNWR0ZpdFRvVmlld0JveDo6cGFyc2VWaWV3Qm94KGNvbnN0IEF0b21TdHJp
bmcmIHZhbHVlLCBGbG9hdFJlY3QmIHZpZXdCb3gpCitPcHRpb25hbDxGbG9hdFJlY3Q+IFNWR0Zp
dFRvVmlld0JveDo6cGFyc2VWaWV3Qm94KGNvbnN0IFN0cmluZ1ZpZXcmIHZhbHVlKQogewotICAg
IGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyh2YWx1ZSkudXBjb252ZXJ0
ZWRDaGFyYWN0ZXJzKCk7CisgICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSB2YWx1ZS51
cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKICAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycyA9IHVw
Y29udmVydGVkQ2hhcmFjdGVyczsKLSAgICByZXR1cm4gcGFyc2VWaWV3Qm94KGNoYXJhY3RlcnMs
IGNoYXJhY3RlcnMgKyB2YWx1ZS5sZW5ndGgoKSwgdmlld0JveCk7CisgICAgcmV0dXJuIHBhcnNl
Vmlld0JveChjaGFyYWN0ZXJzLCBjaGFyYWN0ZXJzICsgdmFsdWUubGVuZ3RoKCkpOwogfQogCi1i
b29sIFNWR0ZpdFRvVmlld0JveDo6cGFyc2VWaWV3Qm94KGNvbnN0IFVDaGFyKiYgYywgY29uc3Qg
VUNoYXIqIGVuZCwgRmxvYXRSZWN0JiB2aWV3Qm94LCBib29sIHZhbGlkYXRlKQorT3B0aW9uYWw8
RmxvYXRSZWN0PiBTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlVmlld0JveChjb25zdCBVQ2hhciomIGMs
IGNvbnN0IFVDaGFyKiBlbmQsIGJvb2wgdmFsaWRhdGUpCiB7Ci0gICAgU3RyaW5nIHN0cihjLCBl
bmQgLSBjKTsKKyAgICBTdHJpbmdWaWV3IHN0cihjLCBlbmQgLSBjKTsKIAogICAgIHNraXBPcHRp
b25hbFNWR1NwYWNlcyhjLCBlbmQpOwogCi0gICAgZmxvYXQgeCA9IDAuMGY7Ci0gICAgZmxvYXQg
eSA9IDAuMGY7Ci0gICAgZmxvYXQgd2lkdGggPSAwLjBmOwotICAgIGZsb2F0IGhlaWdodCA9IDAu
MGY7Ci0gICAgYm9vbCB2YWxpZCA9IHBhcnNlTnVtYmVyKGMsIGVuZCwgeCkgJiYgcGFyc2VOdW1i
ZXIoYywgZW5kLCB5KSAmJiBwYXJzZU51bWJlcihjLCBlbmQsIHdpZHRoKSAmJiBwYXJzZU51bWJl
cihjLCBlbmQsIGhlaWdodCwgZmFsc2UpOworICAgIGF1dG8geCA9IHBhcnNlTnVtYmVyKGMsIGVu
ZCk7CisgICAgYXV0byB5ID0gcGFyc2VOdW1iZXIoYywgZW5kKTsKKyAgICBhdXRvIHdpZHRoID0g
cGFyc2VOdW1iZXIoYywgZW5kKTsKKyAgICBhdXRvIGhlaWdodCA9IHBhcnNlTnVtYmVyKGMsIGVu
ZCwgU3VmZml4U2tpcHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsKIAogICAgIGlmICh2YWxpZGF0ZSkg
ewogICAgICAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBtX3ZpZXdCb3gtPmNvbnRleHRFbGVtZW50
KCktPmRvY3VtZW50KCk7CiAKLSAgICAgICAgaWYgKCF2YWxpZCkgewotICAgICAgICAgICAgZG9j
dW1lbnQuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnJlcG9ydFdhcm5pbmcoIlByb2JsZW0gcGFyc2lu
ZyB2aWV3Qm94PVwiIiArIHN0ciArICJcIiIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBpZiAoIXggfHwgIXkgfHwgIXdpZHRoIHx8ICFoZWlnaHQpIHsKKyAgICAgICAgICAg
IGRvY3VtZW50LmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5yZXBvcnRXYXJuaW5nKG1ha2VTdHJpbmco
IlByb2JsZW0gcGFyc2luZyB2aWV3Qm94PVwiIiwgc3RyLCAiXCIiKSk7CisgICAgICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICB9CiAKICAgICAgICAgLy8gQ2hlY2sgdGhhdCB3
aWR0aCBpcyBwb3NpdGl2ZS4KLSAgICAgICAgaWYgKHdpZHRoIDwgMC4wKSB7CisgICAgICAgIGlm
ICgqd2lkdGggPCAwLjApIHsKICAgICAgICAgICAgIGRvY3VtZW50LmFjY2Vzc1NWR0V4dGVuc2lv
bnMoKS5yZXBvcnRFcnJvcigiQSBuZWdhdGl2ZSB2YWx1ZSBmb3IgVmlld0JveCB3aWR0aCBpcyBu
b3QgYWxsb3dlZCIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgfQogCiAgICAgICAgIC8vIENoZWNrIHRoYXQgaGVp
Z2h0IGlzIHBvc2l0aXZlLgotICAgICAgICBpZiAoaGVpZ2h0IDwgMC4wKSB7CisgICAgICAgIGlm
ICgqaGVpZ2h0IDwgMC4wKSB7CiAgICAgICAgICAgICBkb2N1bWVudC5hY2Nlc3NTVkdFeHRlbnNp
b25zKCkucmVwb3J0RXJyb3IoIkEgbmVnYXRpdmUgdmFsdWUgZm9yIFZpZXdCb3ggaGVpZ2h0IGlz
IG5vdCBhbGxvd2VkIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICB9CiAKICAgICAgICAgLy8gTm90aGluZyBzaG91
bGQgY29tZSBhZnRlciB0aGUgbGFzdCwgZm91cnRoIG51bWJlci4KICAgICAgICAgc2tpcE9wdGlv
bmFsU1ZHU3BhY2VzKGMsIGVuZCk7CiAgICAgICAgIGlmIChjIDwgZW5kKSB7Ci0gICAgICAgICAg
ICBkb2N1bWVudC5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVwb3J0V2FybmluZygiUHJvYmxlbSBw
YXJzaW5nIHZpZXdCb3g9XCIiICsgc3RyICsgIlwiIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICBkb2N1bWVudC5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVwb3J0V2Fy
bmluZyhtYWtlU3RyaW5nKCJQcm9ibGVtIHBhcnNpbmcgdmlld0JveD1cIiIsIHN0ciwgIlwiIikp
OworICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgfQogICAgIH0KIAot
ICAgIHZpZXdCb3ggPSB7IHgsIHksIHdpZHRoLCBoZWlnaHQgfTsKLSAgICByZXR1cm4gdHJ1ZTsK
KyAgICByZXR1cm4gRmxvYXRSZWN0IHsgeC52YWx1ZU9yKDApLCB5LnZhbHVlT3IoMCksIHdpZHRo
LnZhbHVlT3IoMCksIGhlaWdodC52YWx1ZU9yKDApIH07CiB9CiAKIEFmZmluZVRyYW5zZm9ybSBT
VkdGaXRUb1ZpZXdCb3g6OnZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0oY29uc3QgRmxvYXRSZWN0JiB2
aWV3Qm94UmVjdCwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJiBwcmVzZXJ2ZUFz
cGVjdFJhdGlvLCBmbG9hdCB2aWV3V2lkdGgsIGZsb2F0IHZpZXdIZWlnaHQpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRml0VG9WaWV3Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZpdFRvVmlld0JveC5oCShyZXZpc2lvbiAyNjMzMzMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRml0VG9WaWV3Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDggKzY1
LDggQEAgcHJvdGVjdGVkOgogCiAgICAgdm9pZCByZXNldCgpOwogICAgIGJvb2wgcGFyc2VBdHRy
aWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21TdHJpbmcmKTsKLSAgICBib29s
IHBhcnNlVmlld0JveChjb25zdCBBdG9tU3RyaW5nJiB2YWx1ZSwgRmxvYXRSZWN0JiB2aWV3Qm94
KTsKLSAgICBib29sIHBhcnNlVmlld0JveChjb25zdCBVQ2hhciomIHN0YXJ0LCBjb25zdCBVQ2hh
ciogZW5kLCBGbG9hdFJlY3QmIHZpZXdCb3gsIGJvb2wgdmFsaWRhdGUgPSB0cnVlKTsKKyAgICBP
cHRpb25hbDxGbG9hdFJlY3Q+IHBhcnNlVmlld0JveChjb25zdCBTdHJpbmdWaWV3JiB2YWx1ZSk7
CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBwYXJzZVZpZXdCb3goY29uc3QgVUNoYXIqJiBzdGFy
dCwgY29uc3QgVUNoYXIqIGVuZCwgYm9vbCB2YWxpZGF0ZSA9IHRydWUpOwogCiBwcml2YXRlOgog
ICAgIFJlZjxTVkdBbmltYXRlZFJlY3Q+IG1fdmlld0JveDsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdHbHlwaFJlZkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdHbHlwaFJlZkVsZW1lbnQuY3BwCShyZXZpc2lvbiAyNjMzMzMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHR2x5cGhSZWZFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgs
MTAgKzU4LDcgQEAgYm9vbCBTVkdHbHlwaFJlZkVsZW1lbnQ6Omhhc1ZhbGlkR2x5cGhFbAogCiBz
dGF0aWMgZmxvYXQgcGFyc2VGbG9hdChjb25zdCBBdG9tU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBm
bG9hdCByZXN1bHQ7Ci0gICAgaWYgKCFwYXJzZU51bWJlckZyb21TdHJpbmcodmFsdWUsIHJlc3Vs
dCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIHBh
cnNlTnVtYmVyKHZhbHVlKS52YWx1ZU9yKDApOwogfQogCiB2b2lkIFNWR0dseXBoUmVmRWxlbWVu
dDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbVN0
cmluZyYgdmFsdWUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHSEtlcm5FbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHSEtlcm5FbGVtZW50LmNwcAko
cmV2aXNpb24gMjYzMzMzKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0hLZXJuRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDI0ICs0NCw0NyBAQCBSZWY8U1ZHSEtlcm5FbGVtZW50
PiBTVkdIS2VybkVsZW1lbnQ6OmNyCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZHSEtlcm5F
bGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKLWJvb2wgU1ZHSEtlcm5FbGVtZW50Ojpi
dWlsZEhvcml6b250YWxLZXJuaW5nUGFpcihTVkdLZXJuaW5nUGFpciYga2VybmluZ1BhaXIpIGNv
bnN0CitPcHRpb25hbDxTVkdLZXJuaW5nUGFpcj4gU1ZHSEtlcm5FbGVtZW50OjpidWlsZEhvcml6
b250YWxLZXJuaW5nUGFpcigpIGNvbnN0CiB7CisgICAgLy8gRklYTUU6IENhbiB0aGlzIGJlIHNo
YXJlZCB3aXRoIFNWR1ZLZXJuRWxlbWVudDo6YnVpbGRWZXJ0aWNhbEtlcm5pbmdQYWlyPworCiAg
ICAgYXV0byYgdTEgPSBhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFNWR05hbWVzOjp1
MUF0dHIpOwogICAgIGF1dG8mIGcxID0gYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihT
VkdOYW1lczo6ZzFBdHRyKTsKKyAgICBpZiAodTEuaXNFbXB0eSgpICYmIGcxLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKwogICAgIGF1dG8mIHUyID0gYXR0cmlidXRl
V2l0aG91dFN5bmNocm9uaXphdGlvbihTVkdOYW1lczo6dTJBdHRyKTsKICAgICBhdXRvJiBnMiA9
IGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oU1ZHTmFtZXM6OmcyQXR0cik7Ci0gICAg
aWYgKCh1MS5pc0VtcHR5KCkgJiYgZzEuaXNFbXB0eSgpKSB8fCAodTIuaXNFbXB0eSgpICYmIGcy
LmlzRW1wdHkoKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAodTIuaXNFbXB0eSgp
ICYmIGcyLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIGF1
dG8gZ2x5cGhOYW1lMSA9IHBhcnNlR2x5cGhOYW1lKGcxKTsKKyAgICBpZiAoIWdseXBoTmFtZTEp
CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgYXV0byBnbHlwaE5hbWUyID0gcGFy
c2VHbHlwaE5hbWUoZzIpOworICAgIGlmICghZ2x5cGhOYW1lMikKKyAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKyAgICBhdXRvIHVuaWNvZGVTdHJpbmcxID0gcGFyc2VLZXJuaW5nVW5pY29k
ZVN0cmluZyh1MSk7CisgICAgaWYgKCF1bmljb2RlU3RyaW5nMSkKKyAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKyAgICBhdXRvIHVuaWNvZGVTdHJpbmcyID0gcGFyc2VLZXJuaW5nVW5pY29k
ZVN0cmluZyh1Mik7CisgICAgaWYgKCF1bmljb2RlU3RyaW5nMikKKyAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKworICAgIGJvb2wgb2sgPSBmYWxzZTsKKyAgICBhdXRvIGtlcm5pbmcgPSBh
dHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFNWR05hbWVzOjprQXR0cikuc3RyaW5nKCku
dG9GbG9hdCgmb2spOworICAgIGlmICghb2spCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAKLSAgICBpZiAocGFyc2VHbHlwaE5hbWUoZzEsIGtlcm5pbmdQYWlyLmdseXBoTmFtZTEpCi0g
ICAgICAgICYmIHBhcnNlR2x5cGhOYW1lKGcyLCBrZXJuaW5nUGFpci5nbHlwaE5hbWUyKQotICAg
ICAgICAmJiBwYXJzZUtlcm5pbmdVbmljb2RlU3RyaW5nKHUxLCBrZXJuaW5nUGFpci51bmljb2Rl
UmFuZ2UxLCBrZXJuaW5nUGFpci51bmljb2RlTmFtZTEpCi0gICAgICAgICYmIHBhcnNlS2Vybmlu
Z1VuaWNvZGVTdHJpbmcodTIsIGtlcm5pbmdQYWlyLnVuaWNvZGVSYW5nZTIsIGtlcm5pbmdQYWly
LnVuaWNvZGVOYW1lMikpIHsKLSAgICAgICAgYm9vbCBvayA9IGZhbHNlOwotICAgICAgICBrZXJu
aW5nUGFpci5rZXJuaW5nID0gYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihTVkdOYW1l
czo6a0F0dHIpLnN0cmluZygpLnRvRmxvYXQoJm9rKTsKLSAgICAgICAgcmV0dXJuIG9rOwotICAg
IH0KLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIFNWR0tlcm5pbmdQYWlyIHsKKyAgICAg
ICAgV1RGTW92ZSh1bmljb2RlU3RyaW5nMS0+Zmlyc3QpLAorICAgICAgICBXVEZNb3ZlKHVuaWNv
ZGVTdHJpbmcxLT5zZWNvbmQpLAorICAgICAgICBXVEZNb3ZlKCpnbHlwaE5hbWUxKSwKKyAgICAg
ICAgV1RGTW92ZSh1bmljb2RlU3RyaW5nMi0+Zmlyc3QpLAorICAgICAgICBXVEZNb3ZlKHVuaWNv
ZGVTdHJpbmcyLT5zZWNvbmQpLAorICAgICAgICBXVEZNb3ZlKCpnbHlwaE5hbWUyKSwKKyAgICAg
ICAga2VybmluZworICAgIH07CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdI
S2VybkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHSEtlcm5F
bGVtZW50LmgJKHJldmlzaW9uIDI2MzMzMykKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdIS2Vy
bkVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBjbGFzcyBTVkdIS2Vy
bkVsZW1lbnQgZmluYWwgOiBwdWJsaWMgU1ZHCiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxTVkdI
S2VybkVsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQmKTsKIAot
ICAgIGJvb2wgYnVpbGRIb3Jpem9udGFsS2VybmluZ1BhaXIoU1ZHS2VybmluZ1BhaXImIGtlcm5p
bmdQYWlyKSBjb25zdDsKKyAgICBPcHRpb25hbDxTVkdLZXJuaW5nUGFpcj4gYnVpbGRIb3Jpem9u
dGFsS2VybmluZ1BhaXIoKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBTVkdIS2VybkVsZW1lbnQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Jik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHSW1hZ2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHSW1hZ2VFbGVtZW50LmNwcAkocmV2aXNpb24gMjYzMzMzKQorKysgU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ltYWdlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDkgKzY5LDcgQEAg
Ym9vbCBTVkdJbWFnZUVsZW1lbnQ6Omhhc1NpbmdsZVNlY3VyaXR5Twogdm9pZCBTVkdJbWFnZUVs
ZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0
b21TdHJpbmcmIHZhbHVlKQogewogICAgIGlmIChuYW1lID09IFNWR05hbWVzOjpwcmVzZXJ2ZUFz
cGVjdFJhdGlvQXR0cikgewotICAgICAgICBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUgcHJl
c2VydmVBc3BlY3RSYXRpbzsKLSAgICAgICAgcHJlc2VydmVBc3BlY3RSYXRpby5wYXJzZSh2YWx1
ZSk7Ci0gICAgICAgIG1fcHJlc2VydmVBc3BlY3RSYXRpby0+c2V0QmFzZVZhbEludGVybmFsKHBy
ZXNlcnZlQXNwZWN0UmF0aW8pOworICAgICAgICBtX3ByZXNlcnZlQXNwZWN0UmF0aW8tPnNldEJh
c2VWYWxJbnRlcm5hbChTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUgeyB2YWx1ZSB9KTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xlbmd0
aFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoVmFs
dWUuY3BwCShyZXZpc2lvbiAyNjMzMzMpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3Ro
VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTEsMTIgKzI5MSwxMiBAQCBFeGNlcHRpb25P
cjx2b2lkPiBTVkdMZW5ndGhWYWx1ZTo6c2V0VmFsCiAgICAgaWYgKHN0cmluZy5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBmbG9hdCBjb252ZXJ0ZWROdW1iZXIgPSAwOwog
ICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyhzdHJpbmcpLnVwY29u
dmVydGVkQ2hhcmFjdGVycygpOwogICAgIGNvbnN0IFVDaGFyKiBwdHIgPSB1cGNvbnZlcnRlZENo
YXJhY3RlcnM7CiAgICAgY29uc3QgVUNoYXIqIGVuZCA9IHB0ciArIHN0cmluZy5sZW5ndGgoKTsK
IAotICAgIGlmICghcGFyc2VOdW1iZXIocHRyLCBlbmQsIGNvbnZlcnRlZE51bWJlciwgZmFsc2Up
KQorICAgIGF1dG8gY29udmVydGVkTnVtYmVyID0gcGFyc2VOdW1iZXIocHRyLCBlbmQsIFN1ZmZp
eFNraXBwaW5nUG9saWN5OjpEb250U2tpcCk7CisgICAgaWYgKCFjb252ZXJ0ZWROdW1iZXIpCiAg
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9OwogCiAgICAgYXV0byBsZW5n
dGhUeXBlID0gcGFyc2VMZW5ndGhUeXBlKHB0ciwgZW5kKTsKQEAgLTMwNCw3ICszMDQsNyBAQCBF
eGNlcHRpb25Pcjx2b2lkPiBTVkdMZW5ndGhWYWx1ZTo6c2V0VmFsCiAgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBTeW50YXhFcnJvciB9OwogCiAgICAgbV9sZW5ndGhUeXBlID0gbGVuZ3RoVHlw
ZTsKLSAgICBtX3ZhbHVlSW5TcGVjaWZpZWRVbml0cyA9IGNvbnZlcnRlZE51bWJlcjsKKyAgICBt
X3ZhbHVlSW5TcGVjaWZpZWRVbml0cyA9ICpjb252ZXJ0ZWROdW1iZXI7CiAgICAgcmV0dXJuIHsg
fTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR051bWJlckxpc3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTnVtYmVyTGlzdC5oCShyZXZpc2lvbiAyNjMz
MzMpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTnVtYmVyTGlzdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC01NCw3ICs1NCw2IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGNsZWFySXRlbXMoKTsK
IAotICAgICAgICBmbG9hdCBudW1iZXIgPSAwOwogICAgICAgICBhdXRvIHVwY29udmVydGVkQ2hh
cmFjdGVycyA9IFN0cmluZ1ZpZXcodmFsdWUpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwogICAg
ICAgICBjb25zdCBVQ2hhciogcHRyID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOwogICAgICAgICBj
b25zdCBVQ2hhciogZW5kID0gcHRyICsgdmFsdWUubGVuZ3RoKCk7CkBAIC02Miw5ICs2MSwxMCBA
QCBwdWJsaWM6CiAgICAgICAgIC8vIFRoZSBzcGVjIChzZWN0aW9uIDQuMSkgc3RyYW5nZWx5IGRv
ZXNuJ3QgYWxsb3cgbGVhZGluZyB3aGl0ZXNwYWNlLgogICAgICAgICAvLyBXZSBtaWdodCBjaG9v
c2UgdG8gdmlvbGF0ZSB0aGF0IGludGVudGlvbmFsbHkuCiAgICAgICAgIHdoaWxlIChwdHIgPCBl
bmQpIHsKLSAgICAgICAgICAgIGlmICghcGFyc2VOdW1iZXIocHRyLCBlbmQsIG51bWJlcikpCisg
ICAgICAgICAgICBhdXRvIG51bWJlciA9IHBhcnNlTnVtYmVyKHB0ciwgZW5kKTsKKyAgICAgICAg
ICAgIGlmICghbnVtYmVyKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgYXBw
ZW5kKFNWR051bWJlcjo6Y3JlYXRlKG51bWJlcikpOworICAgICAgICAgICAgYXBwZW5kKFNWR051
bWJlcjo6Y3JlYXRlKCpudW1iZXIpKTsKICAgICAgICAgfQogCiAgICAgICAgIHJldHVybiBwdHIg
PT0gZW5kOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5jcHAJ
KHJldmlzaW9uIDI2MzMzMykKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXJzZXJVdGlsaXRp
ZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxOSArNDAsMTggQEAgdGVtcGxhdGUgPHR5cGVu
YW1lIEZsb2F0VHlwZT4gc3RhdGljIGlubAogLy8gV2UgdXNlIHRoaXMgZ2VuZXJpYyBwYXJzZU51
bWJlciBmdW5jdGlvbiB0byBhbGxvdyB0aGUgUGF0aCBwYXJzaW5nIGNvZGUgdG8gd29yayAKIC8v
IGF0IGEgaGlnaGVyIHByZWNpc2lvbiBpbnRlcm5hbGx5LCB3aXRob3V0IGFueSB1bm5lY2Vzc2Fy
eSBydW50aW1lIGNvc3Qgb3IgY29kZQogLy8gY29tcGxleGl0eS4KLXRlbXBsYXRlIDx0eXBlbmFt
ZSBDaGFyYWN0ZXJUeXBlLCB0eXBlbmFtZSBGbG9hdFR5cGU+IHN0YXRpYyBib29sIGdlbmVyaWNQ
YXJzZU51bWJlcihjb25zdCBDaGFyYWN0ZXJUeXBlKiYgcHRyLCBjb25zdCBDaGFyYWN0ZXJUeXBl
KiBlbmQsIEZsb2F0VHlwZSYgbnVtYmVyLCBib29sIHNraXApCisvLyBGSVhNRTogQ2FuIHRoaXMg
YmUgc2hhcmVkL3JlcGxhY2VkIHdpdGggbnVtYmVyIHBhcnNpbmcgaW4gV1RGPwordGVtcGxhdGUg
PHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHR5cGVuYW1lIEZsb2F0VHlwZSA9IGZsb2F0PiBzdGF0
aWMgT3B0aW9uYWw8RmxvYXRUeXBlPiBnZW5lcmljUGFyc2VOdW1iZXIoY29uc3QgQ2hhcmFjdGVy
VHlwZSomIHB0ciwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGlj
eSBza2lwID0gU3VmZml4U2tpcHBpbmdQb2xpY3k6OlNraXApCiB7Ci0gICAgRmxvYXRUeXBlIGlu
dGVnZXIsIGRlY2ltYWwsIGZyYWMsIGV4cG9uZW50OwotICAgIGludCBzaWduLCBleHBzaWduOwor
ICAgIEZsb2F0VHlwZSBudW1iZXIgPSAwOworICAgIEZsb2F0VHlwZSBpbnRlZ2VyID0gMDsKKyAg
ICBGbG9hdFR5cGUgZGVjaW1hbCA9IDA7CisgICAgRmxvYXRUeXBlIGZyYWMgPSAxOworICAgIEZs
b2F0VHlwZSBleHBvbmVudCA9IDA7CisgICAgaW50IHNpZ24gPSAxOworICAgIGludCBleHBzaWdu
ID0gMTsKICAgICBjb25zdCBDaGFyYWN0ZXJUeXBlKiBzdGFydCA9IHB0cjsKIAotICAgIGV4cG9u
ZW50ID0gMDsKLSAgICBpbnRlZ2VyID0gMDsKLSAgICBmcmFjID0gMTsKLSAgICBkZWNpbWFsID0g
MDsKLSAgICBzaWduID0gMTsKLSAgICBleHBzaWduID0gMTsKLQogICAgIC8vIHJlYWQgdGhlIHNp
Z24KICAgICBpZiAocHRyIDwgZW5kICYmICpwdHIgPT0gJysnKQogICAgICAgICBwdHIrKzsKQEAg
LTYyLDcgKzYxLDcgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHR5cGVuYQog
ICAgIH0gCiAgICAgCiAgICAgaWYgKHB0ciA9PSBlbmQgfHwgKCFpc0FTQ0lJRGlnaXQoKnB0cikg
JiYgKnB0ciAhPSAnLicpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiAKICAgICAvLyByZWFkIHRoZSBpbnRlZ2VyIHBhcnQsIGJ1aWxkIHJpZ2h0
LXRvLWxlZnQKICAgICBjb25zdCBDaGFyYWN0ZXJUeXBlKiBwdHJTdGFydEludFBhcnQgPSBwdHI7
CkBAIC03OCw3ICs3Nyw3IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCB0eXBl
bmEKICAgICAgICAgfQogICAgICAgICAvLyBCYWlsIG91dCBlYXJseSBpZiB0aGlzIG92ZXJmbG93
cy4KICAgICAgICAgaWYgKCFpc1ZhbGlkUmFuZ2UoaW50ZWdlcikpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KIAogICAg
IGlmIChwdHIgPCBlbmQgJiYgKnB0ciA9PSAnLicpIHsgLy8gcmVhZCB0aGUgZGVjaW1hbHMKQEAg
LTg2LDcgKzg1LDcgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHR5cGVuYQog
ICAgICAgICAKICAgICAgICAgLy8gVGhlcmUgbXVzdCBiZSBhIGxlYXN0IG9uZSBkaWdpdCBmb2xs
b3dpbmcgdGhlIC4KICAgICAgICAgaWYgKHB0ciA+PSBlbmQgfHwgIWlzQVNDSUlEaWdpdCgqcHRy
KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiAgICAgICAgIAogICAgICAgICB3aGlsZSAocHRyIDwgZW5kICYmIGlzQVNDSUlEaWdp
dCgqcHRyKSkKICAgICAgICAgICAgIGRlY2ltYWwgKz0gKCoocHRyKyspIC0gJzAnKSAqIChmcmFj
ICo9IHN0YXRpY19jYXN0PEZsb2F0VHlwZT4oMC4xKSk7CkBAIC0xMDcsNyArMTA2LDcgQEAgdGVt
cGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHR5cGVuYQogICAgICAgICAKICAgICAgICAg
Ly8gVGhlcmUgbXVzdCBiZSBhbiBleHBvbmVudAogICAgICAgICBpZiAocHRyID49IGVuZCB8fCAh
aXNBU0NJSURpZ2l0KCpwdHIpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgICAgICB3aGlsZSAocHRyIDwgZW5kICYmIGlz
QVNDSUlEaWdpdCgqcHRyKSkgewogICAgICAgICAgICAgZXhwb25lbnQgKj0gc3RhdGljX2Nhc3Q8
RmxvYXRUeXBlPigxMCk7CkBAIC0xMTYsNyArMTE1LDcgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIENo
YXJhY3RlclR5cGUsIHR5cGVuYQogICAgICAgICB9CiAgICAgICAgIC8vIE1ha2Ugc3VyZSBleHBv
bmVudCBpcyB2YWxpZC4KICAgICAgICAgaWYgKCFpc1ZhbGlkUmFuZ2UoZXhwb25lbnQpIHx8IGV4
cG9uZW50ID4gc3RkOjpudW1lcmljX2xpbWl0czxGbG9hdFR5cGU+OjptYXhfZXhwb25lbnQpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogICAgIH0KIAogICAgIG51bWJlciA9IGludGVnZXIgKyBkZWNpbWFsOwpAQCAtMTI3LDE0OCAr
MTI2LDE1MyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5hCiAKICAg
ICAvLyBEb24ndCByZXR1cm4gSW5maW5pdHkoKSBvciBOYU4oKS4KICAgICBpZiAoIWlzVmFsaWRS
YW5nZShudW1iZXIpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAKICAgICBpZiAoc3RhcnQgPT0gcHRyKQotICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBpZiAoc2tpcCkKKyAgICBpZiAo
c2tpcCA9PSBTdWZmaXhTa2lwcGluZ1BvbGljeTo6U2tpcCkKICAgICAgICAgc2tpcE9wdGlvbmFs
U1ZHU3BhY2VzT3JEZWxpbWl0ZXIocHRyLCBlbmQpOwogCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotYm9vbCBwYXJzZVNWR051bWJlcihD
aGFyYWN0ZXJUeXBlKiBiZWdpbiwgc2l6ZV90IGxlbmd0aCwgZG91YmxlJiBudW1iZXIpCi17Ci0g
ICAgY29uc3QgQ2hhcmFjdGVyVHlwZSogcHRyID0gYmVnaW47Ci0gICAgY29uc3QgQ2hhcmFjdGVy
VHlwZSogZW5kID0gcHRyICsgbGVuZ3RoOwotICAgIHJldHVybiBnZW5lcmljUGFyc2VOdW1iZXIo
cHRyLCBlbmQsIG51bWJlciwgZmFsc2UpOworICAgIHJldHVybiBudW1iZXI7CiB9CiAKLS8vIEV4
cGxpY2l0bHkgaW5zdGFudGlhdGUgdGhlIHR3byBmbGF2b3JzIG9mIHBhcnNlU1ZHTnVtYmVyKCkg
dG8gc2F0aXNmeSBleHRlcm5hbCBjYWxsZXJzCi10ZW1wbGF0ZSBib29sIHBhcnNlU1ZHTnVtYmVy
KExDaGFyKiBiZWdpbiwgc2l6ZV90IGxlbmd0aCwgZG91YmxlJik7Ci10ZW1wbGF0ZSBib29sIHBh
cnNlU1ZHTnVtYmVyKFVDaGFyKiBiZWdpbiwgc2l6ZV90IGxlbmd0aCwgZG91YmxlJik7Ci0KLWJv
b2wgcGFyc2VOdW1iZXIoY29uc3QgTENoYXIqJiBwdHIsIGNvbnN0IExDaGFyKiBlbmQsIGZsb2F0
JiBudW1iZXIsIGJvb2wgc2tpcCkKK09wdGlvbmFsPGZsb2F0PiBwYXJzZU51bWJlcihjb25zdCBM
Q2hhciomIHB0ciwgY29uc3QgTENoYXIqIGVuZCwgU3VmZml4U2tpcHBpbmdQb2xpY3kgc2tpcCkK
IHsKLSAgICByZXR1cm4gZ2VuZXJpY1BhcnNlTnVtYmVyKHB0ciwgZW5kLCBudW1iZXIsIHNraXAp
OworICAgIHJldHVybiBnZW5lcmljUGFyc2VOdW1iZXIocHRyLCBlbmQsIHNraXApOwogfQogCi1i
b29sIHBhcnNlTnVtYmVyKGNvbnN0IFVDaGFyKiYgcHRyLCBjb25zdCBVQ2hhciogZW5kLCBmbG9h
dCYgbnVtYmVyLCBib29sIHNraXApIAorT3B0aW9uYWw8ZmxvYXQ+IHBhcnNlTnVtYmVyKGNvbnN0
IFVDaGFyKiYgcHRyLCBjb25zdCBVQ2hhciogZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeSBza2lw
KQogewotICAgIHJldHVybiBnZW5lcmljUGFyc2VOdW1iZXIocHRyLCBlbmQsIG51bWJlciwgc2tp
cCk7CisgICAgcmV0dXJuIGdlbmVyaWNQYXJzZU51bWJlcihwdHIsIGVuZCwgc2tpcCk7CiB9CiAK
LWJvb2wgcGFyc2VOdW1iZXJGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBmbG9hdCYg
bnVtYmVyLCBib29sIHNraXApCitPcHRpb25hbDxmbG9hdD4gcGFyc2VOdW1iZXIoY29uc3QgU3Ry
aW5nVmlldyYgc3RyaW5nLCBTdWZmaXhTa2lwcGluZ1BvbGljeSBza2lwKQogewotICAgIGF1dG8g
dXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyhzdHJpbmcpLnVwY29udmVydGVkQ2hh
cmFjdGVycygpOworICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gc3RyaW5nLnVwY29u
dmVydGVkQ2hhcmFjdGVycygpOwogICAgIGNvbnN0IFVDaGFyKiBwdHIgPSB1cGNvbnZlcnRlZENo
YXJhY3RlcnM7CiAgICAgY29uc3QgVUNoYXIqIGVuZCA9IHB0ciArIHN0cmluZy5sZW5ndGgoKTsK
LSAgICByZXR1cm4gZ2VuZXJpY1BhcnNlTnVtYmVyKHB0ciwgZW5kLCBudW1iZXIsIHNraXApICYm
IHB0ciA9PSBlbmQ7CisgICAgYXV0byByZXN1bHQgPSBnZW5lcmljUGFyc2VOdW1iZXIocHRyLCBl
bmQsIHNraXApOworICAgIGlmIChwdHIgIT0gZW5kKQorICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIC8vIG9ubHkgdXNlZCB0byBwYXJzZSBsYXJn
ZUFyY0ZsYWcgYW5kIHN3ZWVwRmxhZyB3aGljaCBtdXN0IGJlIGEgIjAiIG9yICIxIgogLy8gYW5k
IG1pZ2h0IG5vdCBoYXZlIGFueSB3aGl0ZXNwYWNlL2NvbW1hIGFmdGVyIGl0Ci10ZW1wbGF0ZSA8
dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLWJvb2wgZ2VuZXJpY1BhcnNlQXJjRmxhZyhjb25zdCBD
aGFyYWN0ZXJUeXBlKiYgcHRyLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQsIGJvb2wmIGZsYWcp
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gT3B0aW9uYWw8Ym9vbD4gZ2VuZXJp
Y1BhcnNlQXJjRmxhZyhjb25zdCBDaGFyYWN0ZXJUeXBlKiYgcHRyLCBjb25zdCBDaGFyYWN0ZXJU
eXBlKiBlbmQpCiB7CiAgICAgaWYgKHB0ciA+PSBlbmQpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKwogICAgIGNvbnN0IENoYXJhY3RlclR5cGUg
ZmxhZ0NoYXIgPSAqcHRyKys7CisKKyAgICBib29sIGZsYWc7CiAgICAgaWYgKGZsYWdDaGFyID09
ICcwJykKICAgICAgICAgZmxhZyA9IGZhbHNlOwogICAgIGVsc2UgaWYgKGZsYWdDaGFyID09ICcx
JykKICAgICAgICAgZmxhZyA9IHRydWU7CiAgICAgZWxzZQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKICAgICBza2lwT3B0aW9uYWxT
VkdTcGFjZXNPckRlbGltaXRlcihwdHIsIGVuZCk7CiAgICAgCi0gICAgcmV0dXJuIHRydWU7Cisg
ICAgcmV0dXJuIGZsYWc7CiB9CiAKLWJvb2wgcGFyc2VBcmNGbGFnKGNvbnN0IExDaGFyKiYgcHRy
LCBjb25zdCBMQ2hhciogZW5kLCBib29sJiBmbGFnKQorT3B0aW9uYWw8Ym9vbD4gcGFyc2VBcmNG
bGFnKGNvbnN0IExDaGFyKiYgcHRyLCBjb25zdCBMQ2hhciogZW5kKQogewotICAgIHJldHVybiBn
ZW5lcmljUGFyc2VBcmNGbGFnKHB0ciwgZW5kLCBmbGFnKTsKKyAgICByZXR1cm4gZ2VuZXJpY1Bh
cnNlQXJjRmxhZyhwdHIsIGVuZCk7CiB9CiAKLWJvb2wgcGFyc2VBcmNGbGFnKGNvbnN0IFVDaGFy
KiYgcHRyLCBjb25zdCBVQ2hhciogZW5kLCBib29sJiBmbGFnKQorT3B0aW9uYWw8Ym9vbD4gcGFy
c2VBcmNGbGFnKGNvbnN0IFVDaGFyKiYgcHRyLCBjb25zdCBVQ2hhciogZW5kKQogewotICAgIHJl
dHVybiBnZW5lcmljUGFyc2VBcmNGbGFnKHB0ciwgZW5kLCBmbGFnKTsKKyAgICByZXR1cm4gZ2Vu
ZXJpY1BhcnNlQXJjRmxhZyhwdHIsIGVuZCk7CiB9CiAKLWJvb2wgcGFyc2VOdW1iZXJPcHRpb25h
bE51bWJlcihjb25zdCBTdHJpbmcmIHMsIGZsb2F0JiB4LCBmbG9hdCYgeSkKK09wdGlvbmFsPHN0
ZDo6cGFpcjxmbG9hdCwgZmxvYXQ+PiBwYXJzZU51bWJlck9wdGlvbmFsTnVtYmVyKGNvbnN0IFN0
cmluZ1ZpZXcmIHN0cmluZykKIHsKLSAgICBpZiAocy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBpZiAoc3RyaW5nLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKIAotICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyhz
KS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKKyAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVy
cyA9IHN0cmluZy51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKICAgICBjb25zdCBVQ2hhciogY3Vy
ID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBjdXIgKyBz
Lmxlbmd0aCgpOworICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBjdXIgKyBzdHJpbmcubGVuZ3RoKCk7
CiAKLSAgICBpZiAoIXBhcnNlTnVtYmVyKGN1ciwgZW5kLCB4KSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGF1dG8geCA9IHBhcnNlTnVtYmVyKGN1ciwgZW5kKTsKKyAgICBpZiAoIXgpCisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBpZiAoY3VyID09IGVuZCkKLSAgICAg
ICAgeSA9IHg7Ci0gICAgZWxzZSBpZiAoIXBhcnNlTnVtYmVyKGN1ciwgZW5kLCB5LCBmYWxzZSkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKCp4
LCAqeCk7CiAKLSAgICByZXR1cm4gY3VyID09IGVuZDsKKyAgICBhdXRvIHkgPSBwYXJzZU51bWJl
cihjdXIsIGVuZCwgU3VmZml4U2tpcHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsKKyAgICBpZiAoIXkp
CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBpZiAoY3VyICE9IGVuZCkKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcigq
eCwgKnkpOwogfQogCi1ib29sIHBhcnNlUG9pbnQoY29uc3QgU3RyaW5nJiBzLCBGbG9hdFBvaW50
JiBwb2ludCkKK09wdGlvbmFsPEZsb2F0UG9pbnQ+IHBhcnNlUG9pbnQoY29uc3QgU3RyaW5nVmll
dyYgc3RyaW5nKQogewotICAgIGlmIChzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyhzKS51cGNvbnZl
cnRlZENoYXJhY3RlcnMoKTsKKyAgICBpZiAoc3RyaW5nLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKKworICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gc3Ry
aW5nLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwogICAgIGNvbnN0IFVDaGFyKiBjdXIgPSB1cGNv
bnZlcnRlZENoYXJhY3RlcnM7Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9IGN1ciArIHMubGVuZ3Ro
KCk7CisgICAgY29uc3QgVUNoYXIqIGVuZCA9IGN1ciArIHN0cmluZy5sZW5ndGgoKTsKIAogICAg
IGlmICghc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGN1ciwgZW5kKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgZmxvYXQgeCA9IDA7Ci0g
ICAgaWYgKCFwYXJzZU51bWJlcihjdXIsIGVuZCwgeCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGZsb2F0IHkgPSAwOwotICAgIGlmICghcGFyc2VOdW1iZXIoY3VyLCBlbmQsIHkpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBwb2ludCA9IEZsb2F0UG9pbnQoeCwgeSk7Cisg
ICAgYXV0byBwb2ludCA9IHBhcnNlRmxvYXRQb2ludChjdXIsIGVuZCk7CisgICAgaWYgKCFwb2lu
dCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIC8vIERpc2FsbG93IGFueXRo
aW5nIGV4Y2VwdCBzcGFjZXMgYXQgdGhlIGVuZC4KLSAgICByZXR1cm4gIXNraXBPcHRpb25hbFNW
R1NwYWNlcyhjdXIsIGVuZCk7CisgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKGN1ciwgZW5kKTsK
KyAgICAKKyAgICByZXR1cm4gcG9pbnQ7CiB9CiAKLWJvb2wgcGFyc2VSZWN0KGNvbnN0IFN0cmlu
ZyYgc3RyaW5nLCBGbG9hdFJlY3QmIHJlY3QpCitPcHRpb25hbDxGbG9hdFJlY3Q+IHBhcnNlUmVj
dChjb25zdCBTdHJpbmdWaWV3JiBzdHJpbmcpCiB7Ci0gICAgYXV0byB1cGNvbnZlcnRlZENoYXJh
Y3RlcnMgPSBTdHJpbmdWaWV3KHN0cmluZykudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7CisgICAg
YXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBzdHJpbmcudXBjb252ZXJ0ZWRDaGFyYWN0ZXJz
KCk7CiAgICAgY29uc3QgVUNoYXIqIHB0ciA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKICAgICBj
b25zdCBVQ2hhciogZW5kID0gcHRyICsgc3RyaW5nLmxlbmd0aCgpOworICAgIAogICAgIHNraXBP
cHRpb25hbFNWR1NwYWNlcyhwdHIsIGVuZCk7CiAgICAgCi0gICAgZmxvYXQgeCA9IDA7Ci0gICAg
ZmxvYXQgeSA9IDA7Ci0gICAgZmxvYXQgd2lkdGggPSAwOwotICAgIGZsb2F0IGhlaWdodCA9IDA7
Ci0gICAgYm9vbCB2YWxpZCA9IHBhcnNlTnVtYmVyKHB0ciwgZW5kLCB4KSAmJiBwYXJzZU51bWJl
cihwdHIsIGVuZCwgeSkgJiYgcGFyc2VOdW1iZXIocHRyLCBlbmQsIHdpZHRoKSAmJiBwYXJzZU51
bWJlcihwdHIsIGVuZCwgaGVpZ2h0LCBmYWxzZSk7Ci0gICAgcmVjdCA9IEZsb2F0UmVjdCh4LCB5
LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICByZXR1cm4gdmFsaWQ7CisgICAgYXV0byB4ID0gcGFyc2VO
dW1iZXIocHRyLCBlbmQpOworICAgIGlmICgheCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKyAgICBhdXRvIHkgPSBwYXJzZU51bWJlcihwdHIsIGVuZCk7CisgICAgaWYgKCF5KQorICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGF1dG8gd2lkdGggPSBwYXJzZU51bWJlcihw
dHIsIGVuZCk7CisgICAgaWYgKCF3aWR0aCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
KyAgICBhdXRvIGhlaWdodCA9IHBhcnNlTnVtYmVyKHB0ciwgZW5kLCBTdWZmaXhTa2lwcGluZ1Bv
bGljeTo6RG9udFNraXApOworICAgIGlmICghaGVpZ2h0KQorICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworCisgICAgcmV0dXJuIEZsb2F0UmVjdCB7ICp4LCAqeSwgKndpZHRoLCAqaGVpZ2h0
IH07CiB9CiAKLWJvb2wgcGFyc2VHbHlwaE5hbWUoY29uc3QgU3RyaW5nJiBpbnB1dCwgSGFzaFNl
dDxTdHJpbmc+JiB2YWx1ZXMpCitPcHRpb25hbDxIYXNoU2V0PFN0cmluZz4+IHBhcnNlR2x5cGhO
YW1lKGNvbnN0IFN0cmluZ1ZpZXcmIHN0cmluZykKIHsKICAgICAvLyBGSVhNRTogUGFyc2luZyBl
cnJvciBkZXRlY3Rpb24gaXMgbWlzc2luZy4KLSAgICB2YWx1ZXMuY2xlYXIoKTsKIAotICAgIGF1
dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gU3RyaW5nVmlldyhpbnB1dCkudXBjb252ZXJ0ZWRD
aGFyYWN0ZXJzKCk7CisgICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBzdHJpbmcudXBj
b252ZXJ0ZWRDaGFyYWN0ZXJzKCk7CiAgICAgY29uc3QgVUNoYXIqIHB0ciA9IHVwY29udmVydGVk
Q2hhcmFjdGVyczsKLSAgICBjb25zdCBVQ2hhciogZW5kID0gcHRyICsgaW5wdXQubGVuZ3RoKCk7
CisgICAgY29uc3QgVUNoYXIqIGVuZCA9IHB0ciArIHN0cmluZy5sZW5ndGgoKTsKICAgICBza2lw
T3B0aW9uYWxTVkdTcGFjZXMocHRyLCBlbmQpOwogCisgICAgSGFzaFNldDxTdHJpbmc+IHZhbHVl
czsKKwogICAgIHdoaWxlIChwdHIgPCBlbmQpIHsKICAgICAgICAgLy8gTGVhZGluZyBhbmQgdHJh
aWxpbmcgd2hpdGUgc3BhY2UsIGFuZCB3aGl0ZSBzcGFjZSBiZWZvcmUgYW5kIGFmdGVyIHNlcGFy
YXRvcnMsIHdpbGwgYmUgaWdub3JlZC4KICAgICAgICAgY29uc3QgVUNoYXIqIGlucHV0U3RhcnQg
PSBwdHI7CkBAIC0yODcsMTMgKzI5MSwxMyBAQCBib29sIHBhcnNlR2x5cGhOYW1lKGNvbnN0IFN0
cmluZyYgaW5wdXQsCiAgICAgICAgIHNraXBPcHRpb25hbFNWR1NwYWNlc09yRGVsaW1pdGVyKHB0
ciwgZW5kLCAnLCcpOwogICAgIH0KIAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiB2YWx1
ZXM7CiB9CiAKLXN0YXRpYyBib29sIHBhcnNlVW5pY29kZVJhbmdlKGNvbnN0IFVDaGFyKiBjaGFy
YWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIFVuaWNvZGVSYW5nZSYgcmFuZ2UpCitzdGF0aWMgT3B0
aW9uYWw8VW5pY29kZVJhbmdlPiBwYXJzZVVuaWNvZGVSYW5nZShjb25zdCBVQ2hhciogY2hhcmFj
dGVycywgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIGlmIChsZW5ndGggPCAyIHx8IGNoYXJhY3Rl
cnNbMF0gIT0gJ1UnIHx8IGNoYXJhY3RlcnNbMV0gIT0gJysnKQotICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgCiAgICAgLy8gUGFyc2UgdGhl
IHN0YXJ0aW5nIGhleCBudW1iZXIgKG9yIGl0cyBwcmVmaXgpLgogICAgIHVuc2lnbmVkIHN0YXJ0
UmFuZ2UgPSAwOwpAQCAtMzA2LDE1ICszMTAsMTUgQEAgc3RhdGljIGJvb2wgcGFyc2VVbmljb2Rl
UmFuZ2UoY29uc3QgVUNoYQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICsrc3RhcnRMZW5n
dGg7CiAgICAgICAgIGlmIChzdGFydExlbmd0aCA+IDYpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICBzdGFydFJhbmdl
ID0gKHN0YXJ0UmFuZ2UgPDwgNCkgfCB0b0FTQ0lJSGV4VmFsdWUoKnB0cik7CiAgICAgICAgICsr
cHRyOwogICAgIH0KLSAgICAKKwogICAgIC8vIEhhbmRsZSB0aGUgY2FzZSBvZiByYW5nZXMgc2Vw
YXJhdGVkIGJ5ICItIiBzaWduLgogICAgIGlmICgyICsgc3RhcnRMZW5ndGggPCBsZW5ndGggJiYg
KnB0ciA9PSAnLScpIHsKICAgICAgICAgaWYgKCFzdGFydExlbmd0aCkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIAog
ICAgICAgICAvLyBQYXJzZSB0aGUgZW5kaW5nIGhleCBudW1iZXIgKG9yIGl0cyBwcmVmaXgpLgog
ICAgICAgICB1bnNpZ25lZCBlbmRSYW5nZSA9IDA7CkBAIC0zMjUsMTcgKzMyOSwxOCBAQCBzdGF0
aWMgYm9vbCBwYXJzZVVuaWNvZGVSYW5nZShjb25zdCBVQ2hhCiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICArK2VuZExlbmd0aDsKICAgICAgICAgICAgIGlmIChlbmRMZW5ndGgg
PiA2KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogICAgICAgICAgICAgZW5kUmFuZ2UgPSAoZW5kUmFuZ2UgPDwgNCkg
fCB0b0FTQ0lJSGV4VmFsdWUoKnB0cik7CiAgICAgICAgICAgICArK3B0cjsKICAgICAgICAgfQog
ICAgICAgICAKICAgICAgICAgaWYgKCFlbmRMZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICAKKyAgICAgICAg
VW5pY29kZVJhbmdlIHJhbmdlOwogICAgICAgICByYW5nZS5maXJzdCA9IHN0YXJ0UmFuZ2U7CiAg
ICAgICAgIHJhbmdlLnNlY29uZCA9IGVuZFJhbmdlOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgcmV0dXJuIHJhbmdlOwogICAgIH0KICAgICAKICAgICAvLyBIYW5kbGUgdGhlIGNhc2Ug
b2YgYSBudW1iZXIgd2l0aCBzb21lIG9wdGlvbmFsIHRyYWlsaW5nIHF1ZXN0aW9uIG1hcmtzLgpA
QCAtMzQ1LDI2ICszNTAsMzEgQEAgc3RhdGljIGJvb2wgcGFyc2VVbmljb2RlUmFuZ2UoY29uc3Qg
VUNoYQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICsrc3RhcnRMZW5ndGg7CiAgICAgICAg
IGlmIChzdGFydExlbmd0aCA+IDYpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICBzdGFydFJhbmdlIDw8PSA0OwogICAg
ICAgICBlbmRSYW5nZSA9IChlbmRSYW5nZSA8PCA0KSB8IDB4RjsKICAgICAgICAgKytwdHI7CiAg
ICAgfQogICAgIAogICAgIGlmICghc3RhcnRMZW5ndGgpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAKKyAgICBVbmljb2RlUmFuZ2UgcmFu
Z2U7CiAgICAgcmFuZ2UuZmlyc3QgPSBzdGFydFJhbmdlOwogICAgIHJhbmdlLnNlY29uZCA9IGVu
ZFJhbmdlOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiByYW5nZTsKIH0KIAotYm9vbCBw
YXJzZUtlcm5pbmdVbmljb2RlU3RyaW5nKGNvbnN0IFN0cmluZyYgaW5wdXQsIFVuaWNvZGVSYW5n
ZXMmIHJhbmdlTGlzdCwgSGFzaFNldDxTdHJpbmc+JiBzdHJpbmdMaXN0KQorT3B0aW9uYWw8c3Rk
OjpwYWlyPFVuaWNvZGVSYW5nZXMsIEhhc2hTZXQ8U3RyaW5nPj4+IHBhcnNlS2VybmluZ1VuaWNv
ZGVTdHJpbmcoY29uc3QgU3RyaW5nVmlldyYgc3RyaW5nKQogewogICAgIC8vIEZJWE1FOiBQYXJz
aW5nIGVycm9yIGRldGVjdGlvbiBpcyBtaXNzaW5nLgotICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFy
YWN0ZXJzID0gU3RyaW5nVmlldyhpbnB1dCkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7CisKKyAg
ICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IHN0cmluZy51cGNvbnZlcnRlZENoYXJhY3Rl
cnMoKTsKICAgICBjb25zdCBVQ2hhciogcHRyID0gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzOwotICAg
IGNvbnN0IFVDaGFyKiBlbmQgPSBwdHIgKyBpbnB1dC5sZW5ndGgoKTsKKyAgICBjb25zdCBVQ2hh
ciogZW5kID0gcHRyICsgc3RyaW5nLmxlbmd0aCgpOworCisgICAgVW5pY29kZVJhbmdlcyByYW5n
ZUxpc3Q7CisgICAgSGFzaFNldDxTdHJpbmc+IHN0cmluZ0xpc3Q7CiAKICAgICB3aGlsZSAocHRy
IDwgZW5kKSB7CiAgICAgICAgIGNvbnN0IFVDaGFyKiBpbnB1dFN0YXJ0ID0gcHRyOwpAQCAtMzc1
LDEwNSArMzg1LDM3IEBAIGJvb2wgcGFyc2VLZXJuaW5nVW5pY29kZVN0cmluZyhjb25zdCBTdHIK
ICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIC8vIFRyeSB0byBwYXJzZSB1bmljb2RlIHJh
bmdlIGZpcnN0Ci0gICAgICAgIFVuaWNvZGVSYW5nZSByYW5nZTsKLSAgICAgICAgaWYgKHBhcnNl
VW5pY29kZVJhbmdlKGlucHV0U3RhcnQsIHB0ciAtIGlucHV0U3RhcnQsIHJhbmdlKSkKLSAgICAg
ICAgICAgIHJhbmdlTGlzdC5hcHBlbmQocmFuZ2UpOworICAgICAgICBpZiAoYXV0byByYW5nZSA9
IHBhcnNlVW5pY29kZVJhbmdlKGlucHV0U3RhcnQsIHB0ciAtIGlucHV0U3RhcnQpKQorICAgICAg
ICAgICAgcmFuZ2VMaXN0LmFwcGVuZChXVEZNb3ZlKCpyYW5nZSkpOwogICAgICAgICBlbHNlCiAg
ICAgICAgICAgICBzdHJpbmdMaXN0LmFkZChTdHJpbmcoaW5wdXRTdGFydCwgcHRyIC0gaW5wdXRT
dGFydCkpOwogICAgICAgICArK3B0cjsKICAgICB9CiAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBy
ZXR1cm4gc3RkOjptYWtlX3BhaXIocmFuZ2VMaXN0LCBzdHJpbmdMaXN0KTsKIH0KIAotVmVjdG9y
PFN0cmluZz4gcGFyc2VEZWxpbWl0ZWRTdHJpbmcoY29uc3QgU3RyaW5nJiBpbnB1dCwgY29uc3Qg
Y2hhciBzZXBlcmF0b3IpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGlj
IE9wdGlvbmFsPEZsb2F0UG9pbnQ+IGdlbmVyaWNQYXJzZUZsb2F0UG9pbnQoY29uc3QgQ2hhcmFj
dGVyVHlwZSomIGN1cnJlbnQsIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCkKIHsKLSAgICBWZWN0
b3I8U3RyaW5nPiB2YWx1ZXM7Ci0KLSAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IFN0
cmluZ1ZpZXcoaW5wdXQpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwotICAgIGNvbnN0IFVDaGFy
KiBwdHIgPSB1cGNvbnZlcnRlZENoYXJhY3RlcnM7Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9IHB0
ciArIGlucHV0Lmxlbmd0aCgpOwotICAgIHNraXBPcHRpb25hbFNWR1NwYWNlcyhwdHIsIGVuZCk7
Ci0KLSAgICB3aGlsZSAocHRyIDwgZW5kKSB7Ci0gICAgICAgIC8vIExlYWRpbmcgYW5kIHRyYWls
aW5nIHdoaXRlIHNwYWNlLCBhbmQgd2hpdGUgc3BhY2UgYmVmb3JlIGFuZCBhZnRlciBzZW1pY29s
b24gc2VwYXJhdG9ycywgd2lsbCBiZSBpZ25vcmVkLgotICAgICAgICBjb25zdCBVQ2hhciogaW5w
dXRTdGFydCA9IHB0cjsKLSAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCAmJiAqcHRyICE9IHNlcGVy
YXRvcikgLy8gY2FyZWZ1bCBub3QgdG8gaWdub3JlIHdoaXRlc3BhY2UgaW5zaWRlIGlucHV0cwot
ICAgICAgICAgICAgcHRyKys7CisgICAgYXV0byB4ID0gcGFyc2VOdW1iZXIoY3VycmVudCwgZW5k
KTsKKyAgICBpZiAoIXgpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICAgICAg
aWYgKHB0ciA9PSBpbnB1dFN0YXJ0KQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgLy8g
d2FsayBiYWNrd2FyZHMgZnJvbSB0aGUgOyB0byBpZ25vcmUgYW55IHdoaXRlc3BhY2UKLSAgICAg
ICAgY29uc3QgVUNoYXIqIGlucHV0RW5kID0gcHRyIC0gMTsKLSAgICAgICAgd2hpbGUgKGlucHV0
U3RhcnQgPCBpbnB1dEVuZCAmJiBpc1NWR1NwYWNlKCppbnB1dEVuZCkpCi0gICAgICAgICAgICBp
bnB1dEVuZC0tOworICAgIGF1dG8geSA9IHBhcnNlTnVtYmVyKGN1cnJlbnQsIGVuZCk7CisgICAg
aWYgKCF5KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgICAgIHZhbHVlcy5h
cHBlbmQoU3RyaW5nKGlucHV0U3RhcnQsIGlucHV0RW5kIC0gaW5wdXRTdGFydCArIDEpKTsKLSAg
ICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxpbWl0ZXIocHRyLCBlbmQsIHNlcGVyYXRv
cik7Ci0gICAgfQotCi0gICAgcmV0dXJuIHZhbHVlczsKKyAgICByZXR1cm4gRmxvYXRQb2ludCB7
ICp4LCAqeSB9OwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLWJvb2wg
cGFyc2VGbG9hdFBvaW50KGNvbnN0IENoYXJhY3RlclR5cGUqJiBjdXJyZW50LCBjb25zdCBDaGFy
YWN0ZXJUeXBlKiBlbmQsIEZsb2F0UG9pbnQmIHBvaW50KQorT3B0aW9uYWw8RmxvYXRQb2ludD4g
cGFyc2VGbG9hdFBvaW50KGNvbnN0IExDaGFyKiYgY3VycmVudCwgY29uc3QgTENoYXIqIGVuZCkK
IHsKLSAgICBmbG9hdCB4OwotICAgIGZsb2F0IHk7Ci0gICAgaWYgKCFwYXJzZU51bWJlcihjdXJy
ZW50LCBlbmQsIHgpCi0gICAgICAgIHx8ICFwYXJzZU51bWJlcihjdXJyZW50LCBlbmQsIHkpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcG9pbnQgPSBGbG9hdFBvaW50KHgsIHkpOwotICAg
IHJldHVybiB0cnVlOwotfQotCi10ZW1wbGF0ZSBib29sIHBhcnNlRmxvYXRQb2ludChjb25zdCBM
Q2hhciomIGN1cnJlbnQsIGNvbnN0IExDaGFyKiBlbmQsIEZsb2F0UG9pbnQmIHBvaW50MSk7Ci10
ZW1wbGF0ZSBib29sIHBhcnNlRmxvYXRQb2ludChjb25zdCBVQ2hhciomIGN1cnJlbnQsIGNvbnN0
IFVDaGFyKiBlbmQsIEZsb2F0UG9pbnQmIHBvaW50MSk7Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBD
aGFyYWN0ZXJUeXBlPgotaW5saW5lIGJvb2wgcGFyc2VGbG9hdFBvaW50Mihjb25zdCBDaGFyYWN0
ZXJUeXBlKiYgY3VycmVudCwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kLCBGbG9hdFBvaW50JiBw
b2ludDEsIEZsb2F0UG9pbnQmIHBvaW50MikKLXsKLSAgICBmbG9hdCB4MTsKLSAgICBmbG9hdCB5
MTsKLSAgICBmbG9hdCB4MjsKLSAgICBmbG9hdCB5MjsKLSAgICBpZiAoIXBhcnNlTnVtYmVyKGN1
cnJlbnQsIGVuZCwgeDEpCi0gICAgICAgIHx8ICFwYXJzZU51bWJlcihjdXJyZW50LCBlbmQsIHkx
KQotICAgICAgICB8fCAhcGFyc2VOdW1iZXIoY3VycmVudCwgZW5kLCB4MikKLSAgICAgICAgfHwg
IXBhcnNlTnVtYmVyKGN1cnJlbnQsIGVuZCwgeTIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgcG9pbnQxID0gRmxvYXRQb2ludCh4MSwgeTEpOwotICAgIHBvaW50MiA9IEZsb2F0UG9pbnQo
eDIsIHkyKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdGVtcGxhdGUgYm9vbCBwYXJzZUZsb2F0
UG9pbnQyKGNvbnN0IExDaGFyKiYgY3VycmVudCwgY29uc3QgTENoYXIqIGVuZCwgRmxvYXRQb2lu
dCYgcG9pbnQxLCBGbG9hdFBvaW50JiBwb2ludDIpOwotdGVtcGxhdGUgYm9vbCBwYXJzZUZsb2F0
UG9pbnQyKGNvbnN0IFVDaGFyKiYgY3VycmVudCwgY29uc3QgVUNoYXIqIGVuZCwgRmxvYXRQb2lu
dCYgcG9pbnQxLCBGbG9hdFBvaW50JiBwb2ludDIpOwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hh
cmFjdGVyVHlwZT4KLWJvb2wgcGFyc2VGbG9hdFBvaW50Myhjb25zdCBDaGFyYWN0ZXJUeXBlKiYg
Y3VycmVudCwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kLCBGbG9hdFBvaW50JiBwb2ludDEsIEZs
b2F0UG9pbnQmIHBvaW50MiwgRmxvYXRQb2ludCYgcG9pbnQzKQotewotICAgIGZsb2F0IHgxOwot
ICAgIGZsb2F0IHkxOwotICAgIGZsb2F0IHgyOwotICAgIGZsb2F0IHkyOwotICAgIGZsb2F0IHgz
OwotICAgIGZsb2F0IHkzOwotICAgIGlmICghcGFyc2VOdW1iZXIoY3VycmVudCwgZW5kLCB4MSkK
LSAgICAgICAgfHwgIXBhcnNlTnVtYmVyKGN1cnJlbnQsIGVuZCwgeTEpCi0gICAgICAgIHx8ICFw
YXJzZU51bWJlcihjdXJyZW50LCBlbmQsIHgyKQotICAgICAgICB8fCAhcGFyc2VOdW1iZXIoY3Vy
cmVudCwgZW5kLCB5MikKLSAgICAgICAgfHwgIXBhcnNlTnVtYmVyKGN1cnJlbnQsIGVuZCwgeDMp
Ci0gICAgICAgIHx8ICFwYXJzZU51bWJlcihjdXJyZW50LCBlbmQsIHkzKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIHBvaW50MSA9IEZsb2F0UG9pbnQoeDEsIHkxKTsKLSAgICBwb2ludDIg
PSBGbG9hdFBvaW50KHgyLCB5Mik7Ci0gICAgcG9pbnQzID0gRmxvYXRQb2ludCh4MywgeTMpOwot
ICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBnZW5lcmljUGFyc2VGbG9hdFBvaW50KGN1cnJl
bnQsIGVuZCk7CiB9CiAKLXRlbXBsYXRlIGJvb2wgcGFyc2VGbG9hdFBvaW50Myhjb25zdCBMQ2hh
ciomIGN1cnJlbnQsIGNvbnN0IExDaGFyKiBlbmQsIEZsb2F0UG9pbnQmIHBvaW50MSwgRmxvYXRQ
b2ludCYgcG9pbnQyLCBGbG9hdFBvaW50JiBwb2ludDMpOwotdGVtcGxhdGUgYm9vbCBwYXJzZUZs
b2F0UG9pbnQzKGNvbnN0IFVDaGFyKiYgY3VycmVudCwgY29uc3QgVUNoYXIqIGVuZCwgRmxvYXRQ
b2ludCYgcG9pbnQxLCBGbG9hdFBvaW50JiBwb2ludDIsIEZsb2F0UG9pbnQmIHBvaW50Myk7CitP
cHRpb25hbDxGbG9hdFBvaW50PiBwYXJzZUZsb2F0UG9pbnQoY29uc3QgVUNoYXIqJiBjdXJyZW50
LCBjb25zdCBVQ2hhciogZW5kKQoreworICAgIHJldHVybiBnZW5lcmljUGFyc2VGbG9hdFBvaW50
KGN1cnJlbnQsIGVuZCk7Cit9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXJz
ZXJVdGlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGFyc2Vy
VXRpbGl0aWVzLmgJKHJldmlzaW9uIDI2MzMzMykKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQ
YXJzZXJVdGlsaXRpZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQAogI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAotdHlw
ZWRlZiBzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiBVbmljb2RlUmFuZ2U7Cit0eXBlZGVm
IHN0ZDo6cGFpcjxVQ2hhcjMyLCBVQ2hhcjMyPiBVbmljb2RlUmFuZ2U7CiB0eXBlZGVmIFZlY3Rv
cjxVbmljb2RlUmFuZ2U+IFVuaWNvZGVSYW5nZXM7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAg
LTMzLDQyICszMyw0NSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBGbG9hdFBvaW50Owog
Y2xhc3MgRmxvYXRSZWN0OwogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLWJv
b2wgcGFyc2VTVkdOdW1iZXIoQ2hhcmFjdGVyVHlwZSogcHRyLCBzaXplX3QgbGVuZ3RoLCBkb3Vi
bGUmIG51bWJlcik7Ci1ib29sIHBhcnNlTnVtYmVyKGNvbnN0IExDaGFyKiYgcHRyLCBjb25zdCBM
Q2hhciogZW5kLCBmbG9hdCYgbnVtYmVyLCBib29sIHNraXAgPSB0cnVlKTsKLWJvb2wgcGFyc2VO
dW1iZXIoY29uc3QgVUNoYXIqJiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQsIGZsb2F0JiBudW1iZXIs
IGJvb2wgc2tpcCA9IHRydWUpOwotYm9vbCBwYXJzZU51bWJlckZyb21TdHJpbmcoY29uc3QgU3Ry
aW5nJiwgZmxvYXQmIG51bWJlciwgYm9vbCBza2lwID0gdHJ1ZSk7Ci1ib29sIHBhcnNlTnVtYmVy
T3B0aW9uYWxOdW1iZXIoY29uc3QgU3RyaW5nJiBzLCBmbG9hdCYgaCwgZmxvYXQmIHYpOwotYm9v
bCBwYXJzZUFyY0ZsYWcoY29uc3QgTENoYXIqJiBwdHIsIGNvbnN0IExDaGFyKiBlbmQsIGJvb2wm
IGZsYWcpOwotYm9vbCBwYXJzZUFyY0ZsYWcoY29uc3QgVUNoYXIqJiBwdHIsIGNvbnN0IFVDaGFy
KiBlbmQsIGJvb2wmIGZsYWcpOwotYm9vbCBwYXJzZVBvaW50KGNvbnN0IFN0cmluZyYsIEZsb2F0
UG9pbnQmKTsKLWJvb2wgcGFyc2VSZWN0KGNvbnN0IFN0cmluZyYsIEZsb2F0UmVjdCYpOwotCi10
ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLWJvb2wgcGFyc2VGbG9hdFBvaW50KGNv
bnN0IENoYXJhY3RlclR5cGUqJiBjdXJyZW50LCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQsIEZs
b2F0UG9pbnQmKTsKLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotYm9vbCBwYXJz
ZUZsb2F0UG9pbnQyKGNvbnN0IENoYXJhY3RlclR5cGUqJiBjdXJyZW50LCBjb25zdCBDaGFyYWN0
ZXJUeXBlKiBlbmQsIEZsb2F0UG9pbnQmLCBGbG9hdFBvaW50Jik7Ci10ZW1wbGF0ZSA8dHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZT4KLWJvb2wgcGFyc2VGbG9hdFBvaW50Myhjb25zdCBDaGFyYWN0ZXJU
eXBlKiYgY3VycmVudCwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kLCBGbG9hdFBvaW50JiwgRmxv
YXRQb2ludCYsIEZsb2F0UG9pbnQmKTsKK2VudW0gY2xhc3MgU3VmZml4U2tpcHBpbmdQb2xpY3kg
eworICAgIERvbnRTa2lwLAorICAgIFNraXAKK307CisKK09wdGlvbmFsPGZsb2F0PiBwYXJzZU51
bWJlcihjb25zdCBMQ2hhciomIGN1cnJlbnQsIGNvbnN0IExDaGFyKiBlbmQsIFN1ZmZpeFNraXBw
aW5nUG9saWN5ID0gU3VmZml4U2tpcHBpbmdQb2xpY3k6OlNraXApOworT3B0aW9uYWw8ZmxvYXQ+
IHBhcnNlTnVtYmVyKGNvbnN0IFVDaGFyKiYgY3VycmVudCwgY29uc3QgVUNoYXIqIGVuZCwgU3Vm
Zml4U2tpcHBpbmdQb2xpY3kgPSBTdWZmaXhTa2lwcGluZ1BvbGljeTo6U2tpcCk7CitPcHRpb25h
bDxmbG9hdD4gcGFyc2VOdW1iZXIoY29uc3QgU3RyaW5nVmlldyYsIFN1ZmZpeFNraXBwaW5nUG9s
aWN5ID0gU3VmZml4U2tpcHBpbmdQb2xpY3k6OlNraXApOworCitPcHRpb25hbDxzdGQ6OnBhaXI8
ZmxvYXQsIGZsb2F0Pj4gcGFyc2VOdW1iZXJPcHRpb25hbE51bWJlcihjb25zdCBTdHJpbmdWaWV3
Jik7CisKK09wdGlvbmFsPGJvb2w+IHBhcnNlQXJjRmxhZyhjb25zdCBMQ2hhciomIGN1cnJlbnQs
IGNvbnN0IExDaGFyKiBlbmQpOworT3B0aW9uYWw8Ym9vbD4gcGFyc2VBcmNGbGFnKGNvbnN0IFVD
aGFyKiYgY3VycmVudCwgY29uc3QgVUNoYXIqIGVuZCk7CisKK09wdGlvbmFsPEZsb2F0UG9pbnQ+
IHBhcnNlUG9pbnQoY29uc3QgU3RyaW5nVmlldyYpOworT3B0aW9uYWw8RmxvYXRSZWN0PiBwYXJz
ZVJlY3QoY29uc3QgU3RyaW5nVmlldyYpOworCitPcHRpb25hbDxGbG9hdFBvaW50PiBwYXJzZUZs
b2F0UG9pbnQoY29uc3QgTENoYXIqJiBjdXJyZW50LCBjb25zdCBMQ2hhciogZW5kKTsKK09wdGlv
bmFsPEZsb2F0UG9pbnQ+IHBhcnNlRmxvYXRQb2ludChjb25zdCBVQ2hhciomIGN1cnJlbnQsIGNv
bnN0IFVDaGFyKiBlbmQpOworCitPcHRpb25hbDxzdGQ6OnBhaXI8VW5pY29kZVJhbmdlcywgSGFz
aFNldDxTdHJpbmc+Pj4gcGFyc2VLZXJuaW5nVW5pY29kZVN0cmluZyhjb25zdCBTdHJpbmdWaWV3
Jik7CitPcHRpb25hbDxIYXNoU2V0PFN0cmluZz4+IHBhcnNlR2x5cGhOYW1lKGNvbnN0IFN0cmlu
Z1ZpZXcmKTsKKwogCiAvLyBTVkcgYWxsb3dzIHNldmVyYWwgZGlmZmVyZW50IHdoaXRlc3BhY2Ug
Y2hhcmFjdGVyczoKIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRy9wYXRocy5odG1sI1BhdGhE
YXRhQk5GCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLWlubGluZSBib29sIGlz
U1ZHU3BhY2UoQ2hhcmFjdGVyVHlwZSBjKQordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlw
ZT4gY29uc3RleHByIGJvb2wgaXNTVkdTcGFjZShDaGFyYWN0ZXJUeXBlIGMpCiB7CiAgICAgcmV0
dXJuIGMgPT0gJyAnIHx8IGMgPT0gJ1x0JyB8fCBjID09ICdcbicgfHwgYyA9PSAnXHInOwogfQog
Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLWlubGluZSBib29sIHNraXBPcHRp
b25hbFNWR1NwYWNlcyhjb25zdCBDaGFyYWN0ZXJUeXBlKiYgcHRyLCBjb25zdCBDaGFyYWN0ZXJU
eXBlKiBlbmQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBjb25zdGV4cHIgYm9v
bCBza2lwT3B0aW9uYWxTVkdTcGFjZXMoY29uc3QgQ2hhcmFjdGVyVHlwZSomIHB0ciwgY29uc3Qg
Q2hhcmFjdGVyVHlwZSogZW5kKQogewogICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgaXNTVkdTcGFj
ZSgqcHRyKSkKICAgICAgICAgcHRyKys7CiAgICAgcmV0dXJuIHB0ciA8IGVuZDsKIH0KIAotdGVt
cGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1pbmxpbmUgYm9vbCBza2lwT3B0aW9uYWxT
VkdTcGFjZXNPckRlbGltaXRlcihjb25zdCBDaGFyYWN0ZXJUeXBlKiYgcHRyLCBjb25zdCBDaGFy
YWN0ZXJUeXBlKiBlbmQsIGNoYXIgZGVsaW1pdGVyID0gJywnKQordGVtcGxhdGU8dHlwZW5hbWUg
Q2hhcmFjdGVyVHlwZT4gY29uc3RleHByIGJvb2wgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxp
bWl0ZXIoY29uc3QgQ2hhcmFjdGVyVHlwZSomIHB0ciwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5k
LCBjaGFyIGRlbGltaXRlciA9ICcsJykKIHsKICAgICBpZiAocHRyIDwgZW5kICYmICFpc1NWR1Nw
YWNlKCpwdHIpICYmICpwdHIgIT0gZGVsaW1pdGVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBA
IC04MSwxMSArODQsNyBAQCBpbmxpbmUgYm9vbCBza2lwT3B0aW9uYWxTVkdTcGFjZXNPckRlbGlt
CiAgICAgcmV0dXJuIHB0ciA8IGVuZDsKIH0KIAotVmVjdG9yPFN0cmluZz4gcGFyc2VEZWxpbWl0
ZWRTdHJpbmcoY29uc3QgU3RyaW5nJiBpbnB1dCwgY29uc3QgY2hhciBzZXBlcmF0b3IpOwotYm9v
bCBwYXJzZUtlcm5pbmdVbmljb2RlU3RyaW5nKGNvbnN0IFN0cmluZyYgaW5wdXQsIFVuaWNvZGVS
YW5nZXMmLCBIYXNoU2V0PFN0cmluZz4mIHN0cmluZ0xpc3QpOwotYm9vbCBwYXJzZUdseXBoTmFt
ZShjb25zdCBTdHJpbmcmIGlucHV0LCBIYXNoU2V0PFN0cmluZz4mIHZhbHVlcyk7Ci0KLWlubGlu
ZSBib29sIHNraXBTdHJpbmcoY29uc3QgVUNoYXIqJiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQsIGNv
bnN0IFVDaGFyKiBuYW1lLCBpbnQgbGVuZ3RoKQorY29uc3RleHByIGJvb2wgc2tpcFN0cmluZyhj
b25zdCBVQ2hhciomIHB0ciwgY29uc3QgVUNoYXIqIGVuZCwgY29uc3QgVUNoYXIqIG5hbWUsIGlu
dCBsZW5ndGgpCiB7CiAgICAgaWYgKGVuZCAtIHB0ciA8IGxlbmd0aCkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwpAQCAtOTUsOSArOTQsMTAgQEAgaW5saW5lIGJvb2wgc2tpcFN0cmluZyhjb25zdCBV
Q2hhciomIHB0cgogICAgIHJldHVybiB0cnVlOwogfQogCi1pbmxpbmUgYm9vbCBza2lwU3RyaW5n
KGNvbnN0IFVDaGFyKiYgcHRyLCBjb25zdCBVQ2hhciogZW5kLCBjb25zdCBjaGFyKiBzdHIpCit0
ZW1wbGF0ZTx1bnNpZ25lZCBjaGFyYWN0ZXJDb3VudD4KK2lubGluZSBib29sIHNraXBTdHJpbmco
Y29uc3QgVUNoYXIqJiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQsIGNvbnN0IGNoYXIgKCZzdHIpW2No
YXJhY3RlckNvdW50XSkKIHsKLSAgICBpbnQgbGVuZ3RoID0gc3RybGVuKHN0cik7CisgICAgaW50
IGxlbmd0aCA9IGNoYXJhY3RlckNvdW50IC0gMTsKICAgICBpZiAoZW5kIC0gcHRyIDwgbGVuZ3Ro
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7
ICsraSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhCbGVuZGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEJsZW5kZXIuY3BwCShyZXZpc2lv
biAyNjMzMzMpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEJsZW5kZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTYsMjAwICsxMTYsMjAxIEBAIEZsb2F0UG9pbnQgU1ZHUGF0aEJsZW5k
ZXI6OmJsZW5kQW5pbWF0ZWQKICAgICByZXR1cm4gYW5pbWF0ZWRQb2ludDsKIH0KIAordGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3Rpb24+IHVzaW5nIEludm9rZVJlc3VsdCA9IHR5cGVuYW1lIHN0ZDo6
aW52b2tlX3Jlc3VsdF90PEZ1bmN0aW9uLCBTVkdQYXRoU291cmNlPjo6dmFsdWVfdHlwZTsKK3Rl
bXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9uPiB1c2luZyBSZXN1bHRQYWlyID0gc3RkOjpwYWlyPElu
dm9rZVJlc3VsdDxGdW5jdGlvbj4sIEludm9rZVJlc3VsdDxGdW5jdGlvbj4+OwordGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rpb24+IHN0YXRpYyBPcHRpb25hbDxSZXN1bHRQYWlyPEZ1bmN0aW9uPj4g
cHVsbEZyb21Tb3VyY2VzKFNWR1BhdGhTb3VyY2UmIGZyb21Tb3VyY2UsIFNWR1BhdGhTb3VyY2Um
IHRvU291cmNlLCBGdW5jdGlvbiYmIGZ1bmN0aW9uKQoreworICAgIEludm9rZVJlc3VsdDxGdW5j
dGlvbj4gZnJvbVJlc3VsdDsKKyAgICBpZiAoZnJvbVNvdXJjZS5oYXNNb3JlRGF0YSgpKSB7Cisg
ICAgICAgIGF1dG8gcGFyc2VkRnJvbSA9IHN0ZDo6aW52b2tlKGZ1bmN0aW9uLCBmcm9tU291cmNl
KTsKKyAgICAgICAgaWYgKCFwYXJzZWRGcm9tKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKyAgICAgICAgZnJvbVJlc3VsdCA9IFdURk1vdmUoKnBhcnNlZEZyb20pOworICAgIH0K
KworICAgIGF1dG8gcGFyc2VkVG8gPSBzdGQ6Omludm9rZShzdGQ6OmZvcndhcmQ8RnVuY3Rpb24+
KGZ1bmN0aW9uKSwgdG9Tb3VyY2UpOworICAgIGlmICghcGFyc2VkVG8pCisgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gUmVzdWx0UGFpcjxGdW5jdGlvbj4geyBXVEZN
b3ZlKGZyb21SZXN1bHQpLCBXVEZNb3ZlKCpwYXJzZWRUbykgfTsKK30KKwogYm9vbCBTVkdQYXRo
QmxlbmRlcjo6YmxlbmRNb3ZlVG9TZWdtZW50KGZsb2F0IHByb2dyZXNzKQogewotICAgIEZsb2F0
UG9pbnQgZnJvbVRhcmdldFBvaW50OwotICAgIEZsb2F0UG9pbnQgdG9UYXJnZXRQb2ludDsKLSAg
ICBpZiAoKG1fZnJvbVNvdXJjZS5oYXNNb3JlRGF0YSgpICYmICFtX2Zyb21Tb3VyY2UucGFyc2VN
b3ZlVG9TZWdtZW50KGZyb21UYXJnZXRQb2ludCkpCi0gICAgICAgIHx8ICFtX3RvU291cmNlLnBh
cnNlTW92ZVRvU2VnbWVudCh0b1RhcmdldFBvaW50KSkKKyAgICBhdXRvIHJlc3VsdCA9IHB1bGxG
cm9tU291cmNlcyhtX2Zyb21Tb3VyY2UsIG1fdG9Tb3VyY2UsICZTVkdQYXRoU291cmNlOjpwYXJz
ZU1vdmVUb1NlZ21lbnQpOworICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICBpZiAoIW1fY29uc3VtZXIpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgbV9j
b25zdW1lci0+bW92ZVRvKGJsZW5kQW5pbWF0ZWRGbG9hdFBvaW50KGZyb21UYXJnZXRQb2ludCwg
dG9UYXJnZXRQb2ludCwgcHJvZ3Jlc3MpLCBmYWxzZSwgbV9pc0luRmlyc3RIYWxmT2ZBbmltYXRp
b24gPyBtX2Zyb21Nb2RlIDogbV90b01vZGUpOwotICAgIG1fZnJvbUN1cnJlbnRQb2ludCA9IG1f
ZnJvbU1vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IGZyb21UYXJnZXRQb2ludCA6IG1fZnJv
bUN1cnJlbnRQb2ludCArIGZyb21UYXJnZXRQb2ludDsKLSAgICBtX3RvQ3VycmVudFBvaW50ID0g
bV90b01vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IHRvVGFyZ2V0UG9pbnQgOiBtX3RvQ3Vy
cmVudFBvaW50ICsgdG9UYXJnZXRQb2ludDsKKyAgICBhdXRvIFtmcm9tLCB0b10gPSAqcmVzdWx0
OworCisgICAgbV9jb25zdW1lci0+bW92ZVRvKGJsZW5kQW5pbWF0ZWRGbG9hdFBvaW50KGZyb20u
dGFyZ2V0UG9pbnQsIHRvLnRhcmdldFBvaW50LCBwcm9ncmVzcyksIGZhbHNlLCBtX2lzSW5GaXJz
dEhhbGZPZkFuaW1hdGlvbiA/IG1fZnJvbU1vZGUgOiBtX3RvTW9kZSk7CisgICAgbV9mcm9tQ3Vy
cmVudFBvaW50ID0gbV9mcm9tTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gZnJvbS50YXJn
ZXRQb2ludCA6IG1fZnJvbUN1cnJlbnRQb2ludCArIGZyb20udGFyZ2V0UG9pbnQ7CisgICAgbV90
b0N1cnJlbnRQb2ludCA9IG1fdG9Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyB0by50YXJn
ZXRQb2ludCA6IG1fdG9DdXJyZW50UG9pbnQgKyB0by50YXJnZXRQb2ludDsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAogYm9vbCBTVkdQYXRoQmxlbmRlcjo6YmxlbmRMaW5lVG9TZWdtZW50KGZsb2F0
IHByb2dyZXNzKQogewotICAgIEZsb2F0UG9pbnQgZnJvbVRhcmdldFBvaW50OwotICAgIEZsb2F0
UG9pbnQgdG9UYXJnZXRQb2ludDsKLSAgICBpZiAoKG1fZnJvbVNvdXJjZS5oYXNNb3JlRGF0YSgp
ICYmICFtX2Zyb21Tb3VyY2UucGFyc2VMaW5lVG9TZWdtZW50KGZyb21UYXJnZXRQb2ludCkpCi0g
ICAgICAgIHx8ICFtX3RvU291cmNlLnBhcnNlTGluZVRvU2VnbWVudCh0b1RhcmdldFBvaW50KSkK
KyAgICBhdXRvIHJlc3VsdCA9IHB1bGxGcm9tU291cmNlcyhtX2Zyb21Tb3VyY2UsIG1fdG9Tb3Vy
Y2UsICZTVkdQYXRoU291cmNlOjpwYXJzZUxpbmVUb1NlZ21lbnQpOworICAgIGlmICghcmVzdWx0
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoIW1fY29uc3VtZXIpCiAgICAgICAg
IHJldHVybiB0cnVlOwogCi0gICAgbV9jb25zdW1lci0+bGluZVRvKGJsZW5kQW5pbWF0ZWRGbG9h
dFBvaW50KGZyb21UYXJnZXRQb2ludCwgdG9UYXJnZXRQb2ludCwgcHJvZ3Jlc3MpLCBtX2lzSW5G
aXJzdEhhbGZPZkFuaW1hdGlvbiA/IG1fZnJvbU1vZGUgOiBtX3RvTW9kZSk7Ci0gICAgbV9mcm9t
Q3VycmVudFBvaW50ID0gbV9mcm9tTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gZnJvbVRh
cmdldFBvaW50IDogbV9mcm9tQ3VycmVudFBvaW50ICsgZnJvbVRhcmdldFBvaW50OwotICAgIG1f
dG9DdXJyZW50UG9pbnQgPSBtX3RvTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gdG9UYXJn
ZXRQb2ludCA6IG1fdG9DdXJyZW50UG9pbnQgKyB0b1RhcmdldFBvaW50OworICAgIGF1dG8gW2Zy
b20sIHRvXSA9ICpyZXN1bHQ7CisKKyAgICBtX2NvbnN1bWVyLT5saW5lVG8oYmxlbmRBbmltYXRl
ZEZsb2F0UG9pbnQoZnJvbS50YXJnZXRQb2ludCwgdG8udGFyZ2V0UG9pbnQsIHByb2dyZXNzKSwg
bV9pc0luRmlyc3RIYWxmT2ZBbmltYXRpb24gPyBtX2Zyb21Nb2RlIDogbV90b01vZGUpOworICAg
IG1fZnJvbUN1cnJlbnRQb2ludCA9IG1fZnJvbU1vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/
IGZyb20udGFyZ2V0UG9pbnQgOiBtX2Zyb21DdXJyZW50UG9pbnQgKyBmcm9tLnRhcmdldFBvaW50
OworICAgIG1fdG9DdXJyZW50UG9pbnQgPSBtX3RvTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVz
ID8gdG8udGFyZ2V0UG9pbnQgOiBtX3RvQ3VycmVudFBvaW50ICsgdG8udGFyZ2V0UG9pbnQ7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgU1ZHUGF0aEJsZW5kZXI6OmJsZW5kTGluZVRvSG9y
aXpvbnRhbFNlZ21lbnQoZmxvYXQgcHJvZ3Jlc3MpCiB7Ci0gICAgZmxvYXQgZnJvbVggPSAwOwot
ICAgIGZsb2F0IHRvWCA9IDA7Ci0gICAgaWYgKChtX2Zyb21Tb3VyY2UuaGFzTW9yZURhdGEoKSAm
JiAhbV9mcm9tU291cmNlLnBhcnNlTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQoZnJvbVgpKQotICAg
ICAgICB8fCAhbV90b1NvdXJjZS5wYXJzZUxpbmVUb0hvcml6b250YWxTZWdtZW50KHRvWCkpCisg
ICAgYXV0byByZXN1bHQgPSBwdWxsRnJvbVNvdXJjZXMobV9mcm9tU291cmNlLCBtX3RvU291cmNl
LCAmU1ZHUGF0aFNvdXJjZTo6cGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudCk7CisgICAgaWYg
KCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmICghbV9jb25zdW1lcikK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBtX2NvbnN1bWVyLT5saW5lVG9Ib3Jpem9udGFs
KGJsZW5kQW5pbWF0ZWREaW1lbnNvbmFsRmxvYXQoZnJvbVgsIHRvWCwgQmxlbmRIb3Jpem9udGFs
LCBwcm9ncmVzcyksIG1faXNJbkZpcnN0SGFsZk9mQW5pbWF0aW9uID8gbV9mcm9tTW9kZSA6IG1f
dG9Nb2RlKTsKLSAgICBtX2Zyb21DdXJyZW50UG9pbnQuc2V0WChtX2Zyb21Nb2RlID09IEFic29s
dXRlQ29vcmRpbmF0ZXMgPyBmcm9tWCA6IG1fZnJvbUN1cnJlbnRQb2ludC54KCkgKyBmcm9tWCk7
Ci0gICAgbV90b0N1cnJlbnRQb2ludC5zZXRYKG1fdG9Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0
ZXMgPyB0b1ggOiBtX3RvQ3VycmVudFBvaW50LngoKSArIHRvWCk7CisgICAgYXV0byBbZnJvbSwg
dG9dID0gKnJlc3VsdDsKKworICAgIG1fY29uc3VtZXItPmxpbmVUb0hvcml6b250YWwoYmxlbmRB
bmltYXRlZERpbWVuc29uYWxGbG9hdChmcm9tLngsIHRvLngsIEJsZW5kSG9yaXpvbnRhbCwgcHJv
Z3Jlc3MpLCBtX2lzSW5GaXJzdEhhbGZPZkFuaW1hdGlvbiA/IG1fZnJvbU1vZGUgOiBtX3RvTW9k
ZSk7CisgICAgbV9mcm9tQ3VycmVudFBvaW50LnNldFgobV9mcm9tTW9kZSA9PSBBYnNvbHV0ZUNv
b3JkaW5hdGVzID8gZnJvbS54IDogbV9mcm9tQ3VycmVudFBvaW50LngoKSArIGZyb20ueCk7Cisg
ICAgbV90b0N1cnJlbnRQb2ludC5zZXRYKG1fdG9Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMg
PyB0by54IDogbV90b0N1cnJlbnRQb2ludC54KCkgKyB0by54KTsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAogYm9vbCBTVkdQYXRoQmxlbmRlcjo6YmxlbmRMaW5lVG9WZXJ0aWNhbFNlZ21lbnQoZmxv
YXQgcHJvZ3Jlc3MpCiB7Ci0gICAgZmxvYXQgZnJvbVkgPSAwOwotICAgIGZsb2F0IHRvWSA9IDA7
Ci0gICAgaWYgKChtX2Zyb21Tb3VyY2UuaGFzTW9yZURhdGEoKSAmJiAhbV9mcm9tU291cmNlLnBh
cnNlTGluZVRvVmVydGljYWxTZWdtZW50KGZyb21ZKSkKLSAgICAgICAgfHwgIW1fdG9Tb3VyY2Uu
cGFyc2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnQodG9ZKSkKKyAgICBhdXRvIHJlc3VsdCA9IHB1bGxG
cm9tU291cmNlcyhtX2Zyb21Tb3VyY2UsIG1fdG9Tb3VyY2UsICZTVkdQYXRoU291cmNlOjpwYXJz
ZUxpbmVUb1ZlcnRpY2FsU2VnbWVudCk7CisgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIGlmICghbV9jb25zdW1lcikKICAgICAgICAgcmV0dXJuIHRydWU7CiAK
LSAgICBtX2NvbnN1bWVyLT5saW5lVG9WZXJ0aWNhbChibGVuZEFuaW1hdGVkRGltZW5zb25hbEZs
b2F0KGZyb21ZLCB0b1ksIEJsZW5kVmVydGljYWwsIHByb2dyZXNzKSwgbV9pc0luRmlyc3RIYWxm
T2ZBbmltYXRpb24gPyBtX2Zyb21Nb2RlIDogbV90b01vZGUpOwotICAgIG1fZnJvbUN1cnJlbnRQ
b2ludC5zZXRZKG1fZnJvbU1vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IGZyb21ZIDogbV9m
cm9tQ3VycmVudFBvaW50LnkoKSArIGZyb21ZKTsKLSAgICBtX3RvQ3VycmVudFBvaW50LnNldFko
bV90b01vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IHRvWSA6IG1fdG9DdXJyZW50UG9pbnQu
eSgpICsgdG9ZKTsKKyAgICBhdXRvIFtmcm9tLCB0b10gPSAqcmVzdWx0OworCisgICAgbV9jb25z
dW1lci0+bGluZVRvVmVydGljYWwoYmxlbmRBbmltYXRlZERpbWVuc29uYWxGbG9hdChmcm9tLnks
IHRvLnksIEJsZW5kVmVydGljYWwsIHByb2dyZXNzKSwgbV9pc0luRmlyc3RIYWxmT2ZBbmltYXRp
b24gPyBtX2Zyb21Nb2RlIDogbV90b01vZGUpOworICAgIG1fZnJvbUN1cnJlbnRQb2ludC5zZXRZ
KG1fZnJvbU1vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IGZyb20ueSA6IG1fZnJvbUN1cnJl
bnRQb2ludC55KCkgKyBmcm9tLnkpOworICAgIG1fdG9DdXJyZW50UG9pbnQuc2V0WShtX3RvTW9k
ZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gdG8ueSA6IG1fdG9DdXJyZW50UG9pbnQueSgpICsg
dG8ueSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgU1ZHUGF0aEJsZW5kZXI6OmJsZW5k
Q3VydmVUb0N1YmljU2VnbWVudChmbG9hdCBwcm9ncmVzcykKIHsKLSAgICBGbG9hdFBvaW50IGZy
b21UYXJnZXRQb2ludDsKLSAgICBGbG9hdFBvaW50IGZyb21Qb2ludDE7Ci0gICAgRmxvYXRQb2lu
dCBmcm9tUG9pbnQyOwotICAgIEZsb2F0UG9pbnQgdG9UYXJnZXRQb2ludDsKLSAgICBGbG9hdFBv
aW50IHRvUG9pbnQxOwotICAgIEZsb2F0UG9pbnQgdG9Qb2ludDI7Ci0gICAgaWYgKChtX2Zyb21T
b3VyY2UuaGFzTW9yZURhdGEoKSAmJiAhbV9mcm9tU291cmNlLnBhcnNlQ3VydmVUb0N1YmljU2Vn
bWVudChmcm9tUG9pbnQxLCBmcm9tUG9pbnQyLCBmcm9tVGFyZ2V0UG9pbnQpKQotICAgICAgICB8
fCAhbV90b1NvdXJjZS5wYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQodG9Qb2ludDEsIHRvUG9pbnQy
LCB0b1RhcmdldFBvaW50KSkKKyAgICBhdXRvIHJlc3VsdCA9IHB1bGxGcm9tU291cmNlcyhtX2Zy
b21Tb3VyY2UsIG1fdG9Tb3VyY2UsICZTVkdQYXRoU291cmNlOjpwYXJzZUN1cnZlVG9DdWJpY1Nl
Z21lbnQpOworICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBp
ZiAoIW1fY29uc3VtZXIpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgbV9jb25zdW1lci0+
Y3VydmVUb0N1YmljKGJsZW5kQW5pbWF0ZWRGbG9hdFBvaW50KGZyb21Qb2ludDEsIHRvUG9pbnQx
LCBwcm9ncmVzcyksCi0gICAgICAgIGJsZW5kQW5pbWF0ZWRGbG9hdFBvaW50KGZyb21Qb2ludDIs
IHRvUG9pbnQyLCBwcm9ncmVzcyksCi0gICAgICAgIGJsZW5kQW5pbWF0ZWRGbG9hdFBvaW50KGZy
b21UYXJnZXRQb2ludCwgdG9UYXJnZXRQb2ludCwgcHJvZ3Jlc3MpLAorICAgIGF1dG8gW2Zyb20s
IHRvXSA9ICpyZXN1bHQ7CisKKyAgICBtX2NvbnN1bWVyLT5jdXJ2ZVRvQ3ViaWMoYmxlbmRBbmlt
YXRlZEZsb2F0UG9pbnQoZnJvbS5wb2ludDEsIHRvLnBvaW50MSwgcHJvZ3Jlc3MpLAorICAgICAg
ICBibGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tLnBvaW50MiwgdG8ucG9pbnQyLCBwcm9ncmVz
cyksCisgICAgICAgIGJsZW5kQW5pbWF0ZWRGbG9hdFBvaW50KGZyb20udGFyZ2V0UG9pbnQsIHRv
LnRhcmdldFBvaW50LCBwcm9ncmVzcyksCiAgICAgICAgIG1faXNJbkZpcnN0SGFsZk9mQW5pbWF0
aW9uID8gbV9mcm9tTW9kZSA6IG1fdG9Nb2RlKTsKLSAgICBtX2Zyb21DdXJyZW50UG9pbnQgPSBt
X2Zyb21Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyBmcm9tVGFyZ2V0UG9pbnQgOiBtX2Zy
b21DdXJyZW50UG9pbnQgKyBmcm9tVGFyZ2V0UG9pbnQ7Ci0gICAgbV90b0N1cnJlbnRQb2ludCA9
IG1fdG9Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyB0b1RhcmdldFBvaW50IDogbV90b0N1
cnJlbnRQb2ludCArIHRvVGFyZ2V0UG9pbnQ7CisgICAgbV9mcm9tQ3VycmVudFBvaW50ID0gbV9m
cm9tTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gZnJvbS50YXJnZXRQb2ludCA6IG1fZnJv
bUN1cnJlbnRQb2ludCArIGZyb20udGFyZ2V0UG9pbnQ7CisgICAgbV90b0N1cnJlbnRQb2ludCA9
IG1fdG9Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyB0by50YXJnZXRQb2ludCA6IG1fdG9D
dXJyZW50UG9pbnQgKyB0by50YXJnZXRQb2ludDsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9v
bCBTVkdQYXRoQmxlbmRlcjo6YmxlbmRDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KGZsb2F0IHBy
b2dyZXNzKQogewotICAgIEZsb2F0UG9pbnQgZnJvbVRhcmdldFBvaW50OwotICAgIEZsb2F0UG9p
bnQgZnJvbVBvaW50MjsKLSAgICBGbG9hdFBvaW50IHRvVGFyZ2V0UG9pbnQ7Ci0gICAgRmxvYXRQ
b2ludCB0b1BvaW50MjsKLSAgICBpZiAoKG1fZnJvbVNvdXJjZS5oYXNNb3JlRGF0YSgpICYmICFt
X2Zyb21Tb3VyY2UucGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KGZyb21Qb2ludDIsIGZy
b21UYXJnZXRQb2ludCkpCi0gICAgICAgIHx8ICFtX3RvU291cmNlLnBhcnNlQ3VydmVUb0N1Ymlj
U21vb3RoU2VnbWVudCh0b1BvaW50MiwgdG9UYXJnZXRQb2ludCkpCisgICAgYXV0byByZXN1bHQg
PSBwdWxsRnJvbVNvdXJjZXMobV9mcm9tU291cmNlLCBtX3RvU291cmNlLCAmU1ZHUGF0aFNvdXJj
ZTo6cGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KTsKKyAgICBpZiAoIXJlc3VsdCkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKCFtX2NvbnN1bWVyKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKIAotICAgIG1fY29uc3VtZXItPmN1cnZlVG9DdWJpY1Ntb290aChibGVuZEFuaW1h
dGVkRmxvYXRQb2ludChmcm9tUG9pbnQyLCB0b1BvaW50MiwgcHJvZ3Jlc3MpLAotICAgICAgICBi
bGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tVGFyZ2V0UG9pbnQsIHRvVGFyZ2V0UG9pbnQsIHBy
b2dyZXNzKSwKKyAgICBhdXRvIFtmcm9tLCB0b10gPSAqcmVzdWx0OworCisgICAgbV9jb25zdW1l
ci0+Y3VydmVUb0N1YmljU21vb3RoKGJsZW5kQW5pbWF0ZWRGbG9hdFBvaW50KGZyb20ucG9pbnQy
LCB0by5wb2ludDIsIHByb2dyZXNzKSwKKyAgICAgICAgYmxlbmRBbmltYXRlZEZsb2F0UG9pbnQo
ZnJvbS50YXJnZXRQb2ludCwgdG8udGFyZ2V0UG9pbnQsIHByb2dyZXNzKSwKICAgICAgICAgbV9p
c0luRmlyc3RIYWxmT2ZBbmltYXRpb24gPyBtX2Zyb21Nb2RlIDogbV90b01vZGUpOwotICAgIG1f
ZnJvbUN1cnJlbnRQb2ludCA9IG1fZnJvbU1vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IGZy
b21UYXJnZXRQb2ludCA6IG1fZnJvbUN1cnJlbnRQb2ludCArIGZyb21UYXJnZXRQb2ludDsKLSAg
ICBtX3RvQ3VycmVudFBvaW50ID0gbV90b01vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IHRv
VGFyZ2V0UG9pbnQgOiBtX3RvQ3VycmVudFBvaW50ICsgdG9UYXJnZXRQb2ludDsKKyAgICBtX2Zy
b21DdXJyZW50UG9pbnQgPSBtX2Zyb21Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyBmcm9t
LnRhcmdldFBvaW50IDogbV9mcm9tQ3VycmVudFBvaW50ICsgZnJvbS50YXJnZXRQb2ludDsKKyAg
ICBtX3RvQ3VycmVudFBvaW50ID0gbV90b01vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IHRv
LnRhcmdldFBvaW50IDogbV90b0N1cnJlbnRQb2ludCArIHRvLnRhcmdldFBvaW50OwogICAgIHJl
dHVybiB0cnVlOwogfQogCiBib29sIFNWR1BhdGhCbGVuZGVyOjpibGVuZEN1cnZlVG9RdWFkcmF0
aWNTZWdtZW50KGZsb2F0IHByb2dyZXNzKQogewotICAgIEZsb2F0UG9pbnQgZnJvbVRhcmdldFBv
aW50OwotICAgIEZsb2F0UG9pbnQgZnJvbVBvaW50MTsKLSAgICBGbG9hdFBvaW50IHRvVGFyZ2V0
UG9pbnQ7Ci0gICAgRmxvYXRQb2ludCB0b1BvaW50MTsKLSAgICBpZiAoKG1fZnJvbVNvdXJjZS5o
YXNNb3JlRGF0YSgpICYmICFtX2Zyb21Tb3VyY2UucGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVu
dChmcm9tUG9pbnQxLCBmcm9tVGFyZ2V0UG9pbnQpKQotICAgICAgICB8fCAhbV90b1NvdXJjZS5w
YXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KHRvUG9pbnQxLCB0b1RhcmdldFBvaW50KSkKKyAg
ICBhdXRvIHJlc3VsdCA9IHB1bGxGcm9tU291cmNlcyhtX2Zyb21Tb3VyY2UsIG1fdG9Tb3VyY2Us
ICZTVkdQYXRoU291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KTsKKyAgICBpZiAo
IXJlc3VsdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKCFtX2NvbnN1bWVyKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIG1fY29uc3VtZXItPmN1cnZlVG9RdWFkcmF0aWMo
YmxlbmRBbmltYXRlZEZsb2F0UG9pbnQoZnJvbVBvaW50MSwgdG9Qb2ludDEsIHByb2dyZXNzKSwK
LSAgICAgICAgYmxlbmRBbmltYXRlZEZsb2F0UG9pbnQoZnJvbVRhcmdldFBvaW50LCB0b1Rhcmdl
dFBvaW50LCBwcm9ncmVzcyksCisgICAgYXV0byBbZnJvbSwgdG9dID0gKnJlc3VsdDsKKworICAg
IG1fY29uc3VtZXItPmN1cnZlVG9RdWFkcmF0aWMoYmxlbmRBbmltYXRlZEZsb2F0UG9pbnQoZnJv
bS5wb2ludDEsIHRvLnBvaW50MSwgcHJvZ3Jlc3MpLAorICAgICAgICBibGVuZEFuaW1hdGVkRmxv
YXRQb2ludChmcm9tLnRhcmdldFBvaW50LCB0by50YXJnZXRQb2ludCwgcHJvZ3Jlc3MpLAogICAg
ICAgICBtX2lzSW5GaXJzdEhhbGZPZkFuaW1hdGlvbiA/IG1fZnJvbU1vZGUgOiBtX3RvTW9kZSk7
Ci0gICAgbV9mcm9tQ3VycmVudFBvaW50ID0gbV9mcm9tTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5h
dGVzID8gZnJvbVRhcmdldFBvaW50IDogbV9mcm9tQ3VycmVudFBvaW50ICsgZnJvbVRhcmdldFBv
aW50OwotICAgIG1fdG9DdXJyZW50UG9pbnQgPSBtX3RvTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5h
dGVzID8gdG9UYXJnZXRQb2ludCA6IG1fdG9DdXJyZW50UG9pbnQgKyB0b1RhcmdldFBvaW50Owor
ICAgIG1fZnJvbUN1cnJlbnRQb2ludCA9IG1fZnJvbU1vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRl
cyA/IGZyb20udGFyZ2V0UG9pbnQgOiBtX2Zyb21DdXJyZW50UG9pbnQgKyBmcm9tLnRhcmdldFBv
aW50OworICAgIG1fdG9DdXJyZW50UG9pbnQgPSBtX3RvTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5h
dGVzID8gdG8udGFyZ2V0UG9pbnQgOiBtX3RvQ3VycmVudFBvaW50ICsgdG8udGFyZ2V0UG9pbnQ7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgU1ZHUGF0aEJsZW5kZXI6OmJsZW5kQ3VydmVU
b1F1YWRyYXRpY1Ntb290aFNlZ21lbnQoZmxvYXQgcHJvZ3Jlc3MpCiB7Ci0gICAgRmxvYXRQb2lu
dCBmcm9tVGFyZ2V0UG9pbnQ7Ci0gICAgRmxvYXRQb2ludCB0b1RhcmdldFBvaW50OwotICAgIGlm
ICgobV9mcm9tU291cmNlLmhhc01vcmVEYXRhKCkgJiYgIW1fZnJvbVNvdXJjZS5wYXJzZUN1cnZl
VG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KGZyb21UYXJnZXRQb2ludCkpCi0gICAgICAgIHx8ICFt
X3RvU291cmNlLnBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQodG9UYXJnZXRQb2lu
dCkpCisgICAgYXV0byByZXN1bHQgPSBwdWxsRnJvbVNvdXJjZXMobV9mcm9tU291cmNlLCBtX3Rv
U291cmNlLCAmU1ZHUGF0aFNvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVu
dCk7CisgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmICgh
bV9jb25zdW1lcikKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBtX2NvbnN1bWVyLT5jdXJ2
ZVRvUXVhZHJhdGljU21vb3RoKGJsZW5kQW5pbWF0ZWRGbG9hdFBvaW50KGZyb21UYXJnZXRQb2lu
dCwgdG9UYXJnZXRQb2ludCwgcHJvZ3Jlc3MpLCBtX2lzSW5GaXJzdEhhbGZPZkFuaW1hdGlvbiA/
IG1fZnJvbU1vZGUgOiBtX3RvTW9kZSk7Ci0gICAgbV9mcm9tQ3VycmVudFBvaW50ID0gbV9mcm9t
TW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gZnJvbVRhcmdldFBvaW50IDogbV9mcm9tQ3Vy
cmVudFBvaW50ICsgZnJvbVRhcmdldFBvaW50OwotICAgIG1fdG9DdXJyZW50UG9pbnQgPSBtX3Rv
TW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gdG9UYXJnZXRQb2ludCA6IG1fdG9DdXJyZW50
UG9pbnQgKyB0b1RhcmdldFBvaW50OworICAgIGF1dG8gW2Zyb20sIHRvXSA9ICpyZXN1bHQ7CisK
KyAgICBtX2NvbnN1bWVyLT5jdXJ2ZVRvUXVhZHJhdGljU21vb3RoKGJsZW5kQW5pbWF0ZWRGbG9h
dFBvaW50KGZyb20udGFyZ2V0UG9pbnQsIHRvLnRhcmdldFBvaW50LCBwcm9ncmVzcyksIG1faXNJ
bkZpcnN0SGFsZk9mQW5pbWF0aW9uID8gbV9mcm9tTW9kZSA6IG1fdG9Nb2RlKTsKKyAgICBtX2Zy
b21DdXJyZW50UG9pbnQgPSBtX2Zyb21Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyBmcm9t
LnRhcmdldFBvaW50IDogbV9mcm9tQ3VycmVudFBvaW50ICsgZnJvbS50YXJnZXRQb2ludDsKKyAg
ICBtX3RvQ3VycmVudFBvaW50ID0gbV90b01vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IHRv
LnRhcmdldFBvaW50IDogbV90b0N1cnJlbnRQb2ludCArIHRvLnRhcmdldFBvaW50OwogICAgIHJl
dHVybiB0cnVlOwogfQogCiBib29sIFNWR1BhdGhCbGVuZGVyOjpibGVuZEFyY1RvU2VnbWVudChm
bG9hdCBwcm9ncmVzcykKIHsKLSAgICBmbG9hdCBmcm9tUnggPSAwOwotICAgIGZsb2F0IGZyb21S
eSA9IDA7Ci0gICAgZmxvYXQgZnJvbUFuZ2xlID0gMDsKLSAgICBib29sIGZyb21MYXJnZUFyYyA9
IGZhbHNlOwotICAgIGJvb2wgZnJvbVN3ZWVwID0gZmFsc2U7Ci0gICAgRmxvYXRQb2ludCBmcm9t
VGFyZ2V0UG9pbnQ7Ci0gICAgZmxvYXQgdG9SeCA9IDA7Ci0gICAgZmxvYXQgdG9SeSA9IDA7Ci0g
ICAgZmxvYXQgdG9BbmdsZSA9IDA7Ci0gICAgYm9vbCB0b0xhcmdlQXJjID0gZmFsc2U7Ci0gICAg
Ym9vbCB0b1N3ZWVwID0gZmFsc2U7Ci0gICAgRmxvYXRQb2ludCB0b1RhcmdldFBvaW50OwotICAg
IGlmICgobV9mcm9tU291cmNlLmhhc01vcmVEYXRhKCkgJiYgIW1fZnJvbVNvdXJjZS5wYXJzZUFy
Y1RvU2VnbWVudChmcm9tUngsIGZyb21SeSwgZnJvbUFuZ2xlLCBmcm9tTGFyZ2VBcmMsIGZyb21T
d2VlcCwgZnJvbVRhcmdldFBvaW50KSkKLSAgICAgICAgfHwgIW1fdG9Tb3VyY2UucGFyc2VBcmNU
b1NlZ21lbnQodG9SeCwgdG9SeSwgdG9BbmdsZSwgdG9MYXJnZUFyYywgdG9Td2VlcCwgdG9UYXJn
ZXRQb2ludCkpCisgICAgYXV0byByZXN1bHQgPSBwdWxsRnJvbVNvdXJjZXMobV9mcm9tU291cmNl
LCBtX3RvU291cmNlLCAmU1ZHUGF0aFNvdXJjZTo6cGFyc2VBcmNUb1NlZ21lbnQpOworICAgIGlm
ICghcmVzdWx0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoIW1fY29uc3VtZXIp
CiAgICAgICAgIHJldHVybiB0cnVlOwogCisgICAgYXV0byBbZnJvbSwgdG9dID0gKnJlc3VsdDsK
KwogICAgIGlmIChtX2FkZFR5cGVzQ291bnQpIHsKICAgICAgICAgQVNTRVJUKG1fZnJvbU1vZGUg
PT0gbV90b01vZGUpOwotICAgICAgICBGbG9hdFBvaW50IHNjYWxlZFRvVGFyZ2V0UG9pbnQgPSB0
b1RhcmdldFBvaW50OworICAgICAgICBhdXRvIHNjYWxlZFRvVGFyZ2V0UG9pbnQgPSB0by50YXJn
ZXRQb2ludDsKICAgICAgICAgc2NhbGVkVG9UYXJnZXRQb2ludC5zY2FsZShtX2FkZFR5cGVzQ291
bnQpOwotICAgICAgICBtX2NvbnN1bWVyLT5hcmNUbyhmcm9tUnggKyB0b1J4ICogbV9hZGRUeXBl
c0NvdW50LAotICAgICAgICAgICAgZnJvbVJ5ICsgdG9SeSAqIG1fYWRkVHlwZXNDb3VudCwKLSAg
ICAgICAgICAgIGZyb21BbmdsZSArIHRvQW5nbGUgKiBtX2FkZFR5cGVzQ291bnQsCi0gICAgICAg
ICAgICBmcm9tTGFyZ2VBcmMgfHwgdG9MYXJnZUFyYywKLSAgICAgICAgICAgIGZyb21Td2VlcCB8
fCB0b1N3ZWVwLAotICAgICAgICAgICAgZnJvbVRhcmdldFBvaW50ICsgc2NhbGVkVG9UYXJnZXRQ
b2ludCwKKyAgICAgICAgbV9jb25zdW1lci0+YXJjVG8oZnJvbS5yeCArIHRvLnJ4ICogbV9hZGRU
eXBlc0NvdW50LAorICAgICAgICAgICAgZnJvbS5yeSArIHRvLnJ5ICogbV9hZGRUeXBlc0NvdW50
LAorICAgICAgICAgICAgZnJvbS5hbmdsZSArIHRvLmFuZ2xlICogbV9hZGRUeXBlc0NvdW50LAor
ICAgICAgICAgICAgZnJvbS5sYXJnZUFyYyB8fCB0by5sYXJnZUFyYywKKyAgICAgICAgICAgIGZy
b20uc3dlZXAgfHwgdG8uc3dlZXAsCisgICAgICAgICAgICBmcm9tLnRhcmdldFBvaW50ICsgc2Nh
bGVkVG9UYXJnZXRQb2ludCwKICAgICAgICAgICAgIG1fZnJvbU1vZGUpOwogICAgIH0gZWxzZSB7
Ci0gICAgICAgIG1fY29uc3VtZXItPmFyY1RvKGJsZW5kKGZyb21SeCwgdG9SeCwgcHJvZ3Jlc3Mp
LAotICAgICAgICAgICAgYmxlbmQoZnJvbVJ5LCB0b1J5LCBwcm9ncmVzcyksCi0gICAgICAgICAg
ICBibGVuZChmcm9tQW5nbGUsIHRvQW5nbGUsIHByb2dyZXNzKSwKLSAgICAgICAgICAgIG1faXNJ
bkZpcnN0SGFsZk9mQW5pbWF0aW9uID8gZnJvbUxhcmdlQXJjIDogdG9MYXJnZUFyYywKLSAgICAg
ICAgICAgIG1faXNJbkZpcnN0SGFsZk9mQW5pbWF0aW9uID8gZnJvbVN3ZWVwIDogdG9Td2VlcCwK
LSAgICAgICAgICAgIGJsZW5kQW5pbWF0ZWRGbG9hdFBvaW50KGZyb21UYXJnZXRQb2ludCwgdG9U
YXJnZXRQb2ludCwgcHJvZ3Jlc3MpLAorICAgICAgICBtX2NvbnN1bWVyLT5hcmNUbyhibGVuZChm
cm9tLnJ4LCB0by5yeCwgcHJvZ3Jlc3MpLAorICAgICAgICAgICAgYmxlbmQoZnJvbS5yeSwgdG8u
cnksIHByb2dyZXNzKSwKKyAgICAgICAgICAgIGJsZW5kKGZyb20uYW5nbGUsIHRvLmFuZ2xlLCBw
cm9ncmVzcyksCisgICAgICAgICAgICBtX2lzSW5GaXJzdEhhbGZPZkFuaW1hdGlvbiA/IGZyb20u
bGFyZ2VBcmMgOiB0by5sYXJnZUFyYywKKyAgICAgICAgICAgIG1faXNJbkZpcnN0SGFsZk9mQW5p
bWF0aW9uID8gZnJvbS5zd2VlcCA6IHRvLnN3ZWVwLAorICAgICAgICAgICAgYmxlbmRBbmltYXRl
ZEZsb2F0UG9pbnQoZnJvbS50YXJnZXRQb2ludCwgdG8udGFyZ2V0UG9pbnQsIHByb2dyZXNzKSwK
ICAgICAgICAgICAgIG1faXNJbkZpcnN0SGFsZk9mQW5pbWF0aW9uID8gbV9mcm9tTW9kZSA6IG1f
dG9Nb2RlKTsKICAgICB9Ci0gICAgbV9mcm9tQ3VycmVudFBvaW50ID0gbV9mcm9tTW9kZSA9PSBB
YnNvbHV0ZUNvb3JkaW5hdGVzID8gZnJvbVRhcmdldFBvaW50IDogbV9mcm9tQ3VycmVudFBvaW50
ICsgZnJvbVRhcmdldFBvaW50OwotICAgIG1fdG9DdXJyZW50UG9pbnQgPSBtX3RvTW9kZSA9PSBB
YnNvbHV0ZUNvb3JkaW5hdGVzID8gdG9UYXJnZXRQb2ludCA6IG1fdG9DdXJyZW50UG9pbnQgKyB0
b1RhcmdldFBvaW50OworICAgIG1fZnJvbUN1cnJlbnRQb2ludCA9IG1fZnJvbU1vZGUgPT0gQWJz
b2x1dGVDb29yZGluYXRlcyA/IGZyb20udGFyZ2V0UG9pbnQgOiBtX2Zyb21DdXJyZW50UG9pbnQg
KyBmcm9tLnRhcmdldFBvaW50OworICAgIG1fdG9DdXJyZW50UG9pbnQgPSBtX3RvTW9kZSA9PSBB
YnNvbHV0ZUNvb3JkaW5hdGVzID8gdG8udGFyZ2V0UG9pbnQgOiBtX3RvQ3VycmVudFBvaW50ICsg
dG8udGFyZ2V0UG9pbnQ7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTM1MSw5ICszNTIsMTYg
QEAgYm9vbCBTVkdQYXRoQmxlbmRlcjo6Y2FuQmxlbmRQYXRocygpCiAgICAgYm9vbCBmcm9tU291
cmNlSGFkRGF0YSA9IG1fZnJvbVNvdXJjZS5oYXNNb3JlRGF0YSgpOwogICAgIHdoaWxlIChtX3Rv
U291cmNlLmhhc01vcmVEYXRhKCkpIHsKICAgICAgICAgU1ZHUGF0aFNlZ1R5cGUgZnJvbUNvbW1h
bmQ7Ci0gICAgICAgIFNWR1BhdGhTZWdUeXBlIHRvQ29tbWFuZDsKLSAgICAgICAgaWYgKChmcm9t
U291cmNlSGFkRGF0YSAmJiAhbV9mcm9tU291cmNlLnBhcnNlU1ZHU2VnbWVudFR5cGUoZnJvbUNv
bW1hbmQpKSB8fCAhbV90b1NvdXJjZS5wYXJzZVNWR1NlZ21lbnRUeXBlKHRvQ29tbWFuZCkpCisg
ICAgICAgIGlmIChmcm9tU291cmNlSGFkRGF0YSkgeworICAgICAgICAgICAgYXV0byBwYXJzZWRG
cm9tQ29tbWFuZCA9IG1fZnJvbVNvdXJjZS5wYXJzZVNWR1NlZ21lbnRUeXBlKCk7CisgICAgICAg
ICAgICBpZiAoIXBhcnNlZEZyb21Db21tYW5kKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIGZyb21Db21tYW5kID0gKnBhcnNlZEZyb21Db21tYW5kOworICAgICAg
ICB9CisgICAgICAgIGF1dG8gcGFyc2VkdG9Db21tYW5kID0gbV90b1NvdXJjZS5wYXJzZVNWR1Nl
Z21lbnRUeXBlKCk7CisgICAgICAgIGlmICghcGFyc2VkdG9Db21tYW5kKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICBTVkdQYXRoU2VnVHlwZSB0b0NvbW1hbmQgPSAqcGFyc2Vk
dG9Db21tYW5kOwogCiAgICAgICAgIG1fdG9Nb2RlID0gY29vcmRpbmF0ZU1vZGVPZkNvbW1hbmQo
dG9Db21tYW5kKTsKICAgICAgICAgbV9mcm9tTW9kZSA9IGZyb21Tb3VyY2VIYWREYXRhID8gY29v
cmRpbmF0ZU1vZGVPZkNvbW1hbmQoZnJvbUNvbW1hbmQpIDogbV90b01vZGU7CkBAIC00MzMsOSAr
NDQxLDE2IEBAIGJvb2wgU1ZHUGF0aEJsZW5kZXI6OmJsZW5kQW5pbWF0ZWRQYXRoKGYKICAgICBi
b29sIGZyb21Tb3VyY2VIYWREYXRhID0gbV9mcm9tU291cmNlLmhhc01vcmVEYXRhKCk7CiAgICAg
d2hpbGUgKG1fdG9Tb3VyY2UuaGFzTW9yZURhdGEoKSkgewogICAgICAgICBTVkdQYXRoU2VnVHlw
ZSBmcm9tQ29tbWFuZDsKLSAgICAgICAgU1ZHUGF0aFNlZ1R5cGUgdG9Db21tYW5kOwotICAgICAg
ICBpZiAoKGZyb21Tb3VyY2VIYWREYXRhICYmICFtX2Zyb21Tb3VyY2UucGFyc2VTVkdTZWdtZW50
VHlwZShmcm9tQ29tbWFuZCkpIHx8ICFtX3RvU291cmNlLnBhcnNlU1ZHU2VnbWVudFR5cGUodG9D
b21tYW5kKSkKKyAgICAgICAgaWYgKGZyb21Tb3VyY2VIYWREYXRhKSB7CisgICAgICAgICAgICBh
dXRvIHBhcnNlZEZyb21Db21tYW5kID0gbV9mcm9tU291cmNlLnBhcnNlU1ZHU2VnbWVudFR5cGUo
KTsKKyAgICAgICAgICAgIGlmICghcGFyc2VkRnJvbUNvbW1hbmQpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgZnJvbUNvbW1hbmQgPSAqcGFyc2VkRnJvbUNvbW1h
bmQ7CisgICAgICAgIH0KKyAgICAgICAgYXV0byBwYXJzZWRUb0NvbW1hbmQgPSBtX3RvU291cmNl
LnBhcnNlU1ZHU2VnbWVudFR5cGUoKTsKKyAgICAgICAgaWYgKCFwYXJzZWRUb0NvbW1hbmQpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIFNWR1BhdGhTZWdUeXBlIHRvQ29tbWFu
ZCA9ICpwYXJzZWRUb0NvbW1hbmQ7CiAKICAgICAgICAgbV90b01vZGUgPSBjb29yZGluYXRlTW9k
ZU9mQ29tbWFuZCh0b0NvbW1hbmQpOwogICAgICAgICBtX2Zyb21Nb2RlID0gZnJvbVNvdXJjZUhh
ZERhdGEgPyBjb29yZGluYXRlTW9kZU9mQ29tbWFuZChmcm9tQ29tbWFuZCkgOiBtX3RvTW9kZTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3RyZWFtU291cmNlLmNw
cAkocmV2aXNpb24gMjYzMzMzKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3Ry
ZWFtU291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNzggKzM0LDg2IEBAIGJvb2wgU1ZH
UGF0aEJ5dGVTdHJlYW1Tb3VyY2U6Omhhc01vcmVEYXQKICAgICByZXR1cm4gbV9zdHJlYW1DdXJy
ZW50IDwgbV9zdHJlYW1FbmQ7CiB9CiAKLWJvb2wgU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBh
cnNlU1ZHU2VnbWVudFR5cGUoU1ZHUGF0aFNlZ1R5cGUmIHBhdGhTZWdUeXBlKQorU1ZHUGF0aFNl
Z1R5cGUgU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6Om5leHRDb21tYW5kKFNWR1BhdGhTZWdUeXBl
KQogewotICAgIHBhdGhTZWdUeXBlID0gc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ1R5cGU+KHJlYWRT
VkdTZWdtZW50VHlwZSgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8U1ZHUGF0aFNlZ1R5cGU+KHJlYWRTVkdTZWdtZW50VHlwZSgpKTsKIH0KIAotU1ZHUGF0aFNl
Z1R5cGUgU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6Om5leHRDb21tYW5kKFNWR1BhdGhTZWdUeXBl
KQorT3B0aW9uYWw8U1ZHUGF0aFNlZ1R5cGU+IFNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJz
ZVNWR1NlZ21lbnRUeXBlKCkKIHsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ1R5
cGU+KHJlYWRTVkdTZWdtZW50VHlwZSgpKTsKIH0KIAotYm9vbCBTVkdQYXRoQnl0ZVN0cmVhbVNv
dXJjZTo6cGFyc2VNb3ZlVG9TZWdtZW50KEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQorT3B0aW9u
YWw8U1ZHUGF0aFNvdXJjZTo6TW92ZVRvU2VnbWVudD4gU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6
OnBhcnNlTW92ZVRvU2VnbWVudCgpCiB7Ci0gICAgdGFyZ2V0UG9pbnQgPSByZWFkRmxvYXRQb2lu
dCgpOwotICAgIHJldHVybiB0cnVlOworICAgIE1vdmVUb1NlZ21lbnQgc2VnbWVudDsKKyAgICBz
ZWdtZW50LnRhcmdldFBvaW50ID0gcmVhZEZsb2F0UG9pbnQoKTsKKyAgICByZXR1cm4gc2VnbWVu
dDsKIH0KIAotYm9vbCBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VMaW5lVG9TZWdtZW50
KEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQorT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6TGluZVRv
U2VnbWVudD4gU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlTGluZVRvU2VnbWVudCgpCiB7
Ci0gICAgdGFyZ2V0UG9pbnQgPSByZWFkRmxvYXRQb2ludCgpOwotICAgIHJldHVybiB0cnVlOwor
ICAgIExpbmVUb1NlZ21lbnQgc2VnbWVudDsKKyAgICBzZWdtZW50LnRhcmdldFBvaW50ID0gcmVh
ZEZsb2F0UG9pbnQoKTsKKyAgICByZXR1cm4gc2VnbWVudDsKIH0KIAotYm9vbCBTVkdQYXRoQnl0
ZVN0cmVhbVNvdXJjZTo6cGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudChmbG9hdCYgeCkKK09w
dGlvbmFsPFNWR1BhdGhTb3VyY2U6OkxpbmVUb0hvcml6b250YWxTZWdtZW50PiBTVkdQYXRoQnl0
ZVN0cmVhbVNvdXJjZTo6cGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudCgpCiB7Ci0gICAgeCA9
IHJlYWRGbG9hdCgpOwotICAgIHJldHVybiB0cnVlOworICAgIExpbmVUb0hvcml6b250YWxTZWdt
ZW50IHNlZ21lbnQ7CisgICAgc2VnbWVudC54ID0gcmVhZEZsb2F0KCk7CisgICAgcmV0dXJuIHNl
Z21lbnQ7CiB9CiAKLWJvb2wgU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlTGluZVRvVmVy
dGljYWxTZWdtZW50KGZsb2F0JiB5KQorT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6TGluZVRvVmVy
dGljYWxTZWdtZW50PiBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VMaW5lVG9WZXJ0aWNh
bFNlZ21lbnQoKQogewotICAgIHkgPSByZWFkRmxvYXQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAg
ICBMaW5lVG9WZXJ0aWNhbFNlZ21lbnQgc2VnbWVudDsKKyAgICBzZWdtZW50LnkgPSByZWFkRmxv
YXQoKTsKKyAgICByZXR1cm4gc2VnbWVudDsKIH0KIAotYm9vbCBTVkdQYXRoQnl0ZVN0cmVhbVNv
dXJjZTo6cGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KEZsb2F0UG9pbnQmIHBvaW50MSwgRmxvYXRQ
b2ludCYgcG9pbnQyLCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCkKK09wdGlvbmFsPFNWR1BhdGhT
b3VyY2U6OkN1cnZlVG9DdWJpY1NlZ21lbnQ+IFNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJz
ZUN1cnZlVG9DdWJpY1NlZ21lbnQoKQogewotICAgIHBvaW50MSA9IHJlYWRGbG9hdFBvaW50KCk7
Ci0gICAgcG9pbnQyID0gcmVhZEZsb2F0UG9pbnQoKTsKLSAgICB0YXJnZXRQb2ludCA9IHJlYWRG
bG9hdFBvaW50KCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgQ3VydmVUb0N1YmljU2VnbWVudCBz
ZWdtZW50OworICAgIHNlZ21lbnQucG9pbnQxID0gcmVhZEZsb2F0UG9pbnQoKTsKKyAgICBzZWdt
ZW50LnBvaW50MiA9IHJlYWRGbG9hdFBvaW50KCk7CisgICAgc2VnbWVudC50YXJnZXRQb2ludCA9
IHJlYWRGbG9hdFBvaW50KCk7CisgICAgcmV0dXJuIHNlZ21lbnQ7CiB9CiAKLWJvb2wgU1ZHUGF0
aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudChGbG9hdFBv
aW50JiBwb2ludDIsIEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQorT3B0aW9uYWw8U1ZHUGF0aFNv
dXJjZTo6Q3VydmVUb0N1YmljU21vb3RoU2VnbWVudD4gU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6
OnBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudCgpCiB7Ci0gICAgcG9pbnQyID0gcmVhZEZs
b2F0UG9pbnQoKTsKLSAgICB0YXJnZXRQb2ludCA9IHJlYWRGbG9hdFBvaW50KCk7Ci0gICAgcmV0
dXJuIHRydWU7CisgICAgQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudCBzZWdtZW50OworICAgIHNl
Z21lbnQucG9pbnQyID0gcmVhZEZsb2F0UG9pbnQoKTsKKyAgICBzZWdtZW50LnRhcmdldFBvaW50
ID0gcmVhZEZsb2F0UG9pbnQoKTsKKyAgICByZXR1cm4gc2VnbWVudDsKIH0KIAotYm9vbCBTVkdQ
YXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudChGbG9hdFBv
aW50JiBwb2ludDEsIEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQorT3B0aW9uYWw8U1ZHUGF0aFNv
dXJjZTo6Q3VydmVUb1F1YWRyYXRpY1NlZ21lbnQ+IFNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpw
YXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KCkKIHsKLSAgICBwb2ludDEgPSByZWFkRmxvYXRQ
b2ludCgpOwotICAgIHRhcmdldFBvaW50ID0gcmVhZEZsb2F0UG9pbnQoKTsKLSAgICByZXR1cm4g
dHJ1ZTsKKyAgICBDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCBzZWdtZW50OworICAgIHNlZ21lbnQu
cG9pbnQxID0gcmVhZEZsb2F0UG9pbnQoKTsKKyAgICBzZWdtZW50LnRhcmdldFBvaW50ID0gcmVh
ZEZsb2F0UG9pbnQoKTsKKyAgICByZXR1cm4gc2VnbWVudDsKIH0KIAotYm9vbCBTVkdQYXRoQnl0
ZVN0cmVhbVNvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudChGbG9hdFBv
aW50JiB0YXJnZXRQb2ludCkKK09wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkN1cnZlVG9RdWFkcmF0
aWNTbW9vdGhTZWdtZW50PiBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVh
ZHJhdGljU21vb3RoU2VnbWVudCgpCiB7Ci0gICAgdGFyZ2V0UG9pbnQgPSByZWFkRmxvYXRQb2lu
dCgpOwotICAgIHJldHVybiB0cnVlOworICAgIEN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50
IHNlZ21lbnQ7CisgICAgc2VnbWVudC50YXJnZXRQb2ludCA9IHJlYWRGbG9hdFBvaW50KCk7Cisg
ICAgcmV0dXJuIHNlZ21lbnQ7CiB9CiAKLWJvb2wgU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBh
cnNlQXJjVG9TZWdtZW50KGZsb2F0JiByeCwgZmxvYXQmIHJ5LCBmbG9hdCYgYW5nbGUsIGJvb2wm
IGxhcmdlQXJjLCBib29sJiBzd2VlcCwgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCitPcHRpb25h
bDxTVkdQYXRoU291cmNlOjpBcmNUb1NlZ21lbnQ+IFNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpw
YXJzZUFyY1RvU2VnbWVudCgpCiB7Ci0gICAgcnggPSByZWFkRmxvYXQoKTsKLSAgICByeSA9IHJl
YWRGbG9hdCgpOwotICAgIGFuZ2xlID0gcmVhZEZsb2F0KCk7Ci0gICAgbGFyZ2VBcmMgPSByZWFk
RmxhZygpOwotICAgIHN3ZWVwID0gcmVhZEZsYWcoKTsKLSAgICB0YXJnZXRQb2ludCA9IHJlYWRG
bG9hdFBvaW50KCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgQXJjVG9TZWdtZW50IHNlZ21lbnQ7
CisgICAgc2VnbWVudC5yeCA9IHJlYWRGbG9hdCgpOworICAgIHNlZ21lbnQucnkgPSByZWFkRmxv
YXQoKTsKKyAgICBzZWdtZW50LmFuZ2xlID0gcmVhZEZsb2F0KCk7CisgICAgc2VnbWVudC5sYXJn
ZUFyYyA9IHJlYWRGbGFnKCk7CisgICAgc2VnbWVudC5zd2VlcCA9IHJlYWRGbGFnKCk7CisgICAg
c2VnbWVudC50YXJnZXRQb2ludCA9IHJlYWRGbG9hdFBvaW50KCk7CisgICAgcmV0dXJuIHNlZ21l
bnQ7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbVNv
dXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVh
bVNvdXJjZS5oCShyZXZpc2lvbiAyNjMzMzMpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0
aEJ5dGVTdHJlYW1Tb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTggKzMyLDE4IEBAIHB1
YmxpYzoKIHByaXZhdGU6CiAgICAgYm9vbCBoYXNNb3JlRGF0YSgpIGNvbnN0IGZpbmFsOwogICAg
IGJvb2wgbW92ZVRvTmV4dFRva2VuKCkgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQotICAgIGJvb2wg
cGFyc2VTVkdTZWdtZW50VHlwZShTVkdQYXRoU2VnVHlwZSYpIGZpbmFsOwogICAgIFNWR1BhdGhT
ZWdUeXBlIG5leHRDb21tYW5kKFNWR1BhdGhTZWdUeXBlKSBmaW5hbDsKIAotICAgIGJvb2wgcGFy
c2VNb3ZlVG9TZWdtZW50KEZsb2F0UG9pbnQmKSBmaW5hbDsKLSAgICBib29sIHBhcnNlTGluZVRv
U2VnbWVudChGbG9hdFBvaW50JikgZmluYWw7Ci0gICAgYm9vbCBwYXJzZUxpbmVUb0hvcml6b250
YWxTZWdtZW50KGZsb2F0JikgZmluYWw7Ci0gICAgYm9vbCBwYXJzZUxpbmVUb1ZlcnRpY2FsU2Vn
bWVudChmbG9hdCYpIGZpbmFsOwotICAgIGJvb2wgcGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KEZs
b2F0UG9pbnQmLCBGbG9hdFBvaW50JiwgRmxvYXRQb2ludCYpIGZpbmFsOwotICAgIGJvb2wgcGFy
c2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KEZsb2F0UG9pbnQmLCBGbG9hdFBvaW50JikgZmlu
YWw7Ci0gICAgYm9vbCBwYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KEZsb2F0UG9pbnQmLCBG
bG9hdFBvaW50JikgZmluYWw7Ci0gICAgYm9vbCBwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhT
ZWdtZW50KEZsb2F0UG9pbnQmKSBmaW5hbDsKLSAgICBib29sIHBhcnNlQXJjVG9TZWdtZW50KGZs
b2F0JiwgZmxvYXQmLCBmbG9hdCYsIGJvb2wmLCBib29sJiwgRmxvYXRQb2ludCYpIGZpbmFsOwor
ICAgIE9wdGlvbmFsPFNWR1BhdGhTZWdUeXBlPiBwYXJzZVNWR1NlZ21lbnRUeXBlKCkgZmluYWw7
CisgICAgT3B0aW9uYWw8TW92ZVRvU2VnbWVudD4gcGFyc2VNb3ZlVG9TZWdtZW50KCkgZmluYWw7
CisgICAgT3B0aW9uYWw8TGluZVRvU2VnbWVudD4gcGFyc2VMaW5lVG9TZWdtZW50KCkgZmluYWw7
CisgICAgT3B0aW9uYWw8TGluZVRvSG9yaXpvbnRhbFNlZ21lbnQ+IHBhcnNlTGluZVRvSG9yaXpv
bnRhbFNlZ21lbnQoKSBmaW5hbDsKKyAgICBPcHRpb25hbDxMaW5lVG9WZXJ0aWNhbFNlZ21lbnQ+
IHBhcnNlTGluZVRvVmVydGljYWxTZWdtZW50KCkgZmluYWw7CisgICAgT3B0aW9uYWw8Q3VydmVU
b0N1YmljU2VnbWVudD4gcGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KCkgZmluYWw7CisgICAgT3B0
aW9uYWw8Q3VydmVUb0N1YmljU21vb3RoU2VnbWVudD4gcGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhT
ZWdtZW50KCkgZmluYWw7CisgICAgT3B0aW9uYWw8Q3VydmVUb1F1YWRyYXRpY1NlZ21lbnQ+IHBh
cnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQoKSBmaW5hbDsKKyAgICBPcHRpb25hbDxDdXJ2ZVRv
UXVhZHJhdGljU21vb3RoU2VnbWVudD4gcGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVu
dCgpIGZpbmFsOworICAgIE9wdGlvbmFsPEFyY1RvU2VnbWVudD4gcGFyc2VBcmNUb1NlZ21lbnQo
KSBmaW5hbDsKIAogI2lmIENPTVBJTEVSKE1TVkMpCiAjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTog
NDcwMSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoUGFyc2VyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFBhcnNlci5jcHAJKHJldmlzaW9uIDI2
MzMzMykKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoUGFyc2VyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzMsMTAyICs3Myw5OSBAQCB2b2lkIFNWR1BhdGhQYXJzZXI6OnBhcnNlQ2xvc2VQ
YXRoU2VnbWVuCiAKIGJvb2wgU1ZHUGF0aFBhcnNlcjo6cGFyc2VNb3ZlVG9TZWdtZW50KCkKIHsK
LSAgICBGbG9hdFBvaW50IHRhcmdldFBvaW50OwotICAgIGlmICghbV9zb3VyY2UucGFyc2VNb3Zl
VG9TZWdtZW50KHRhcmdldFBvaW50KSkKKyAgICBhdXRvIHJlc3VsdCA9IG1fc291cmNlLnBhcnNl
TW92ZVRvU2VnbWVudCgpOworICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICBpZiAobV9wYXRoUGFyc2luZ01vZGUgPT0gTm9ybWFsaXplZFBhcnNpbmcpIHsKICAg
ICAgICAgaWYgKG1fbW9kZSA9PSBSZWxhdGl2ZUNvb3JkaW5hdGVzKQotICAgICAgICAgICAgbV9j
dXJyZW50UG9pbnQgKz0gdGFyZ2V0UG9pbnQ7CisgICAgICAgICAgICBtX2N1cnJlbnRQb2ludCAr
PSByZXN1bHQtPnRhcmdldFBvaW50OwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2N1cnJl
bnRQb2ludCA9IHRhcmdldFBvaW50OworICAgICAgICAgICAgbV9jdXJyZW50UG9pbnQgPSByZXN1
bHQtPnRhcmdldFBvaW50OwogICAgICAgICBtX3N1YlBhdGhQb2ludCA9IG1fY3VycmVudFBvaW50
OwogICAgICAgICBtX2NvbnN1bWVyLm1vdmVUbyhtX2N1cnJlbnRQb2ludCwgbV9jbG9zZVBhdGgs
IEFic29sdXRlQ29vcmRpbmF0ZXMpOwogICAgIH0gZWxzZQotICAgICAgICBtX2NvbnN1bWVyLm1v
dmVUbyh0YXJnZXRQb2ludCwgbV9jbG9zZVBhdGgsIG1fbW9kZSk7CisgICAgICAgIG1fY29uc3Vt
ZXIubW92ZVRvKHJlc3VsdC0+dGFyZ2V0UG9pbnQsIG1fY2xvc2VQYXRoLCBtX21vZGUpOwogICAg
IG1fY2xvc2VQYXRoID0gZmFsc2U7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgU1ZHUGF0
aFBhcnNlcjo6cGFyc2VMaW5lVG9TZWdtZW50KCkKIHsKLSAgICBGbG9hdFBvaW50IHRhcmdldFBv
aW50OwotICAgIGlmICghbV9zb3VyY2UucGFyc2VMaW5lVG9TZWdtZW50KHRhcmdldFBvaW50KSkK
KyAgICBhdXRvIHJlc3VsdCA9IG1fc291cmNlLnBhcnNlTGluZVRvU2VnbWVudCgpOworICAgIGlm
ICghcmVzdWx0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAobV9wYXRoUGFyc2lu
Z01vZGUgPT0gTm9ybWFsaXplZFBhcnNpbmcpIHsKICAgICAgICAgaWYgKG1fbW9kZSA9PSBSZWxh
dGl2ZUNvb3JkaW5hdGVzKQotICAgICAgICAgICAgbV9jdXJyZW50UG9pbnQgKz0gdGFyZ2V0UG9p
bnQ7CisgICAgICAgICAgICBtX2N1cnJlbnRQb2ludCArPSByZXN1bHQtPnRhcmdldFBvaW50Owog
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2N1cnJlbnRQb2ludCA9IHRhcmdldFBvaW50Owor
ICAgICAgICAgICAgbV9jdXJyZW50UG9pbnQgPSByZXN1bHQtPnRhcmdldFBvaW50OwogICAgICAg
ICBtX2NvbnN1bWVyLmxpbmVUbyhtX2N1cnJlbnRQb2ludCwgQWJzb2x1dGVDb29yZGluYXRlcyk7
CiAgICAgfSBlbHNlCi0gICAgICAgIG1fY29uc3VtZXIubGluZVRvKHRhcmdldFBvaW50LCBtX21v
ZGUpOworICAgICAgICBtX2NvbnN1bWVyLmxpbmVUbyhyZXN1bHQtPnRhcmdldFBvaW50LCBtX21v
ZGUpOwogICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIFNWR1BhdGhQYXJzZXI6OnBhcnNlTGlu
ZVRvSG9yaXpvbnRhbFNlZ21lbnQoKQogewotICAgIGZsb2F0IHRvWDsKLSAgICBpZiAoIW1fc291
cmNlLnBhcnNlTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQodG9YKSkKKyAgICBhdXRvIHJlc3VsdCA9
IG1fc291cmNlLnBhcnNlTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQoKTsKKyAgICBpZiAoIXJlc3Vs
dCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKG1fcGF0aFBhcnNpbmdNb2RlID09
IE5vcm1hbGl6ZWRQYXJzaW5nKSB7CiAgICAgICAgIGlmIChtX21vZGUgPT0gUmVsYXRpdmVDb29y
ZGluYXRlcykKLSAgICAgICAgICAgIG1fY3VycmVudFBvaW50Lm1vdmUodG9YLCAwKTsKKyAgICAg
ICAgICAgIG1fY3VycmVudFBvaW50Lm1vdmUocmVzdWx0LT54LCAwKTsKICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgbV9jdXJyZW50UG9pbnQuc2V0WCh0b1gpOworICAgICAgICAgICAgbV9jdXJy
ZW50UG9pbnQuc2V0WChyZXN1bHQtPngpOwogICAgICAgICBtX2NvbnN1bWVyLmxpbmVUbyhtX2N1
cnJlbnRQb2ludCwgQWJzb2x1dGVDb29yZGluYXRlcyk7CiAgICAgfSBlbHNlCi0gICAgICAgIG1f
Y29uc3VtZXIubGluZVRvSG9yaXpvbnRhbCh0b1gsIG1fbW9kZSk7CisgICAgICAgIG1fY29uc3Vt
ZXIubGluZVRvSG9yaXpvbnRhbChyZXN1bHQtPngsIG1fbW9kZSk7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKIGJvb2wgU1ZHUGF0aFBhcnNlcjo6cGFyc2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnQoKQog
ewotICAgIGZsb2F0IHRvWTsKLSAgICBpZiAoIW1fc291cmNlLnBhcnNlTGluZVRvVmVydGljYWxT
ZWdtZW50KHRvWSkpCisgICAgYXV0byByZXN1bHQgPSBtX3NvdXJjZS5wYXJzZUxpbmVUb1ZlcnRp
Y2FsU2VnbWVudCgpOworICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICBpZiAobV9wYXRoUGFyc2luZ01vZGUgPT0gTm9ybWFsaXplZFBhcnNpbmcpIHsKICAgICAg
ICAgaWYgKG1fbW9kZSA9PSBSZWxhdGl2ZUNvb3JkaW5hdGVzKQotICAgICAgICAgICAgbV9jdXJy
ZW50UG9pbnQubW92ZSgwLCB0b1kpOworICAgICAgICAgICAgbV9jdXJyZW50UG9pbnQubW92ZSgw
LCByZXN1bHQtPnkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2N1cnJlbnRQb2ludC5z
ZXRZKHRvWSk7CisgICAgICAgICAgICBtX2N1cnJlbnRQb2ludC5zZXRZKHJlc3VsdC0+eSk7CiAg
ICAgICAgIG1fY29uc3VtZXIubGluZVRvKG1fY3VycmVudFBvaW50LCBBYnNvbHV0ZUNvb3JkaW5h
dGVzKTsKICAgICB9IGVsc2UKLSAgICAgICAgbV9jb25zdW1lci5saW5lVG9WZXJ0aWNhbCh0b1ks
IG1fbW9kZSk7CisgICAgICAgIG1fY29uc3VtZXIubGluZVRvVmVydGljYWwocmVzdWx0LT55LCBt
X21vZGUpOwogICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIFNWR1BhdGhQYXJzZXI6OnBhcnNl
Q3VydmVUb0N1YmljU2VnbWVudCgpCiB7Ci0gICAgRmxvYXRQb2ludCBwb2ludDE7Ci0gICAgRmxv
YXRQb2ludCBwb2ludDI7Ci0gICAgRmxvYXRQb2ludCB0YXJnZXRQb2ludDsKLSAgICBpZiAoIW1f
c291cmNlLnBhcnNlQ3VydmVUb0N1YmljU2VnbWVudChwb2ludDEsIHBvaW50MiwgdGFyZ2V0UG9p
bnQpKQorICAgIGF1dG8gcmVzdWx0ID0gbV9zb3VyY2UucGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50
KCk7CisgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmICht
X3BhdGhQYXJzaW5nTW9kZSA9PSBOb3JtYWxpemVkUGFyc2luZykgewogICAgICAgICBpZiAobV9t
b2RlID09IFJlbGF0aXZlQ29vcmRpbmF0ZXMpIHsKLSAgICAgICAgICAgIHBvaW50MSArPSBtX2N1
cnJlbnRQb2ludDsKLSAgICAgICAgICAgIHBvaW50MiArPSBtX2N1cnJlbnRQb2ludDsKLSAgICAg
ICAgICAgIHRhcmdldFBvaW50ICs9IG1fY3VycmVudFBvaW50OworICAgICAgICAgICAgcmVzdWx0
LT5wb2ludDEgKz0gbV9jdXJyZW50UG9pbnQ7CisgICAgICAgICAgICByZXN1bHQtPnBvaW50MiAr
PSBtX2N1cnJlbnRQb2ludDsKKyAgICAgICAgICAgIHJlc3VsdC0+dGFyZ2V0UG9pbnQgKz0gbV9j
dXJyZW50UG9pbnQ7CiAgICAgICAgIH0KLSAgICAgICAgbV9jb25zdW1lci5jdXJ2ZVRvQ3ViaWMo
cG9pbnQxLCBwb2ludDIsIHRhcmdldFBvaW50LCBBYnNvbHV0ZUNvb3JkaW5hdGVzKTsKKyAgICAg
ICAgbV9jb25zdW1lci5jdXJ2ZVRvQ3ViaWMocmVzdWx0LT5wb2ludDEsIHJlc3VsdC0+cG9pbnQy
LCByZXN1bHQtPnRhcmdldFBvaW50LCBBYnNvbHV0ZUNvb3JkaW5hdGVzKTsKIAotICAgICAgICBt
X2NvbnRyb2xQb2ludCA9IHBvaW50MjsKLSAgICAgICAgbV9jdXJyZW50UG9pbnQgPSB0YXJnZXRQ
b2ludDsKKyAgICAgICAgbV9jb250cm9sUG9pbnQgPSByZXN1bHQtPnBvaW50MjsKKyAgICAgICAg
bV9jdXJyZW50UG9pbnQgPSByZXN1bHQtPnRhcmdldFBvaW50OwogICAgIH0gZWxzZQotICAgICAg
ICBtX2NvbnN1bWVyLmN1cnZlVG9DdWJpYyhwb2ludDEsIHBvaW50MiwgdGFyZ2V0UG9pbnQsIG1f
bW9kZSk7CisgICAgICAgIG1fY29uc3VtZXIuY3VydmVUb0N1YmljKHJlc3VsdC0+cG9pbnQxLCBy
ZXN1bHQtPnBvaW50MiwgcmVzdWx0LT50YXJnZXRQb2ludCwgbV9tb2RlKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAogYm9vbCBTVkdQYXRoUGFyc2VyOjpwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNl
Z21lbnQoKQogewotICAgIEZsb2F0UG9pbnQgcG9pbnQyOwotICAgIEZsb2F0UG9pbnQgdGFyZ2V0
UG9pbnQ7Ci0gICAgaWYgKCFtX3NvdXJjZS5wYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQo
cG9pbnQyLCB0YXJnZXRQb2ludCkpCisgICAgYXV0byByZXN1bHQgPSBtX3NvdXJjZS5wYXJzZUN1
cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQoKTsKKyAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgaWYgKG1fbGFzdENvbW1hbmQgIT0gUGF0aFNlZ0N1cnZlVG9DdWJp
Y0FicwpAQCAtMTgyLDUzICsxNzksNTMgQEAgYm9vbCBTVkdQYXRoUGFyc2VyOjpwYXJzZUN1cnZl
VG9DdWJpY1NtbwogICAgICAgICBwb2ludDEuc2NhbGUoMik7CiAgICAgICAgIHBvaW50MS5tb3Zl
KC1tX2NvbnRyb2xQb2ludC54KCksIC1tX2NvbnRyb2xQb2ludC55KCkpOwogICAgICAgICBpZiAo
bV9tb2RlID09IFJlbGF0aXZlQ29vcmRpbmF0ZXMpIHsKLSAgICAgICAgICAgIHBvaW50MiArPSBt
X2N1cnJlbnRQb2ludDsKLSAgICAgICAgICAgIHRhcmdldFBvaW50ICs9IG1fY3VycmVudFBvaW50
OworICAgICAgICAgICAgcmVzdWx0LT5wb2ludDIgKz0gbV9jdXJyZW50UG9pbnQ7CisgICAgICAg
ICAgICByZXN1bHQtPnRhcmdldFBvaW50ICs9IG1fY3VycmVudFBvaW50OwogICAgICAgICB9CiAK
LSAgICAgICAgbV9jb25zdW1lci5jdXJ2ZVRvQ3ViaWMocG9pbnQxLCBwb2ludDIsIHRhcmdldFBv
aW50LCBBYnNvbHV0ZUNvb3JkaW5hdGVzKTsKKyAgICAgICAgbV9jb25zdW1lci5jdXJ2ZVRvQ3Vi
aWMocG9pbnQxLCByZXN1bHQtPnBvaW50MiwgcmVzdWx0LT50YXJnZXRQb2ludCwgQWJzb2x1dGVD
b29yZGluYXRlcyk7CiAKLSAgICAgICAgbV9jb250cm9sUG9pbnQgPSBwb2ludDI7Ci0gICAgICAg
IG1fY3VycmVudFBvaW50ID0gdGFyZ2V0UG9pbnQ7CisgICAgICAgIG1fY29udHJvbFBvaW50ID0g
cmVzdWx0LT5wb2ludDI7CisgICAgICAgIG1fY3VycmVudFBvaW50ID0gcmVzdWx0LT50YXJnZXRQ
b2ludDsKICAgICB9IGVsc2UKLSAgICAgICAgbV9jb25zdW1lci5jdXJ2ZVRvQ3ViaWNTbW9vdGgo
cG9pbnQyLCB0YXJnZXRQb2ludCwgbV9tb2RlKTsKKyAgICAgICAgbV9jb25zdW1lci5jdXJ2ZVRv
Q3ViaWNTbW9vdGgocmVzdWx0LT5wb2ludDIsIHJlc3VsdC0+dGFyZ2V0UG9pbnQsIG1fbW9kZSk7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgU1ZHUGF0aFBhcnNlcjo6cGFyc2VDdXJ2ZVRv
UXVhZHJhdGljU2VnbWVudCgpCiB7Ci0gICAgRmxvYXRQb2ludCBwb2ludDE7Ci0gICAgRmxvYXRQ
b2ludCB0YXJnZXRQb2ludDsKLSAgICBpZiAoIW1fc291cmNlLnBhcnNlQ3VydmVUb1F1YWRyYXRp
Y1NlZ21lbnQocG9pbnQxLCB0YXJnZXRQb2ludCkpCisgICAgYXV0byByZXN1bHQgPSBtX3NvdXJj
ZS5wYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KCk7CisgICAgaWYgKCFyZXN1bHQpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChtX3BhdGhQYXJzaW5nTW9kZSA9PSBOb3JtYWxp
emVkUGFyc2luZykgewotICAgICAgICBtX2NvbnRyb2xQb2ludCA9IHBvaW50MTsKKyAgICAgICAg
bV9jb250cm9sUG9pbnQgPSByZXN1bHQtPnBvaW50MTsKKwogICAgICAgICBGbG9hdFBvaW50IHBv
aW50MSA9IG1fY3VycmVudFBvaW50OwogICAgICAgICBwb2ludDEubW92ZSgyICogbV9jb250cm9s
UG9pbnQueCgpLCAyICogbV9jb250cm9sUG9pbnQueSgpKTsKLSAgICAgICAgRmxvYXRQb2ludCBw
b2ludDIodGFyZ2V0UG9pbnQueCgpICsgMiAqIG1fY29udHJvbFBvaW50LngoKSwgdGFyZ2V0UG9p
bnQueSgpICsgMiAqIG1fY29udHJvbFBvaW50LnkoKSk7CisgICAgICAgIEZsb2F0UG9pbnQgcG9p
bnQyKHJlc3VsdC0+dGFyZ2V0UG9pbnQueCgpICsgMiAqIG1fY29udHJvbFBvaW50LngoKSwgcmVz
dWx0LT50YXJnZXRQb2ludC55KCkgKyAyICogbV9jb250cm9sUG9pbnQueSgpKTsKICAgICAgICAg
aWYgKG1fbW9kZSA9PSBSZWxhdGl2ZUNvb3JkaW5hdGVzKSB7CiAgICAgICAgICAgICBwb2ludDEu
bW92ZSgyICogbV9jdXJyZW50UG9pbnQueCgpLCAyICogbV9jdXJyZW50UG9pbnQueSgpKTsKICAg
ICAgICAgICAgIHBvaW50Mi5tb3ZlKDMgKiBtX2N1cnJlbnRQb2ludC54KCksIDMgKiBtX2N1cnJl
bnRQb2ludC55KCkpOwotICAgICAgICAgICAgdGFyZ2V0UG9pbnQgKz0gbV9jdXJyZW50UG9pbnQ7
CisgICAgICAgICAgICByZXN1bHQtPnRhcmdldFBvaW50ICs9IG1fY3VycmVudFBvaW50OwogICAg
ICAgICB9CiAgICAgICAgIHBvaW50MS5zY2FsZShnT25lT3ZlclRocmVlKTsKICAgICAgICAgcG9p
bnQyLnNjYWxlKGdPbmVPdmVyVGhyZWUpOwogCi0gICAgICAgIG1fY29uc3VtZXIuY3VydmVUb0N1
YmljKHBvaW50MSwgcG9pbnQyLCB0YXJnZXRQb2ludCwgQWJzb2x1dGVDb29yZGluYXRlcyk7Cisg
ICAgICAgIG1fY29uc3VtZXIuY3VydmVUb0N1YmljKHBvaW50MSwgcG9pbnQyLCByZXN1bHQtPnRh
cmdldFBvaW50LCBBYnNvbHV0ZUNvb3JkaW5hdGVzKTsKIAogICAgICAgICBpZiAobV9tb2RlID09
IFJlbGF0aXZlQ29vcmRpbmF0ZXMpCiAgICAgICAgICAgICBtX2NvbnRyb2xQb2ludCArPSBtX2N1
cnJlbnRQb2ludDsKLSAgICAgICAgbV9jdXJyZW50UG9pbnQgPSB0YXJnZXRQb2ludDsKKyAgICAg
ICAgbV9jdXJyZW50UG9pbnQgPSByZXN1bHQtPnRhcmdldFBvaW50OwogICAgIH0gZWxzZQotICAg
ICAgICBtX2NvbnN1bWVyLmN1cnZlVG9RdWFkcmF0aWMocG9pbnQxLCB0YXJnZXRQb2ludCwgbV9t
b2RlKTsKKyAgICAgICAgbV9jb25zdW1lci5jdXJ2ZVRvUXVhZHJhdGljKHJlc3VsdC0+cG9pbnQx
LCByZXN1bHQtPnRhcmdldFBvaW50LCBtX21vZGUpOwogICAgIHJldHVybiB0cnVlOwogfQogCiBi
b29sIFNWR1BhdGhQYXJzZXI6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQoKQog
ewotICAgIEZsb2F0UG9pbnQgdGFyZ2V0UG9pbnQ7Ci0gICAgaWYgKCFtX3NvdXJjZS5wYXJzZUN1
cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KHRhcmdldFBvaW50KSkKKyAgICBhdXRvIHJlc3Vs
dCA9IG1fc291cmNlLnBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQoKTsKKyAgICBp
ZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKG1fbGFzdENvbW1h
bmQgIT0gUGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNBYnMKQEAgLTI0Miw2NyArMjM5LDYyIEBAIGJv
b2wgU1ZHUGF0aFBhcnNlcjo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGkKICAgICAgICAgY3ViaWNQb2lu
dC5zY2FsZSgyKTsKICAgICAgICAgY3ViaWNQb2ludC5tb3ZlKC1tX2NvbnRyb2xQb2ludC54KCks
IC1tX2NvbnRyb2xQb2ludC55KCkpOwogICAgICAgICBGbG9hdFBvaW50IHBvaW50MShtX2N1cnJl
bnRQb2ludC54KCkgKyAyICogY3ViaWNQb2ludC54KCksIG1fY3VycmVudFBvaW50LnkoKSArIDIg
KiBjdWJpY1BvaW50LnkoKSk7Ci0gICAgICAgIEZsb2F0UG9pbnQgcG9pbnQyKHRhcmdldFBvaW50
LngoKSArIDIgKiBjdWJpY1BvaW50LngoKSwgdGFyZ2V0UG9pbnQueSgpICsgMiAqIGN1YmljUG9p
bnQueSgpKTsKKyAgICAgICAgRmxvYXRQb2ludCBwb2ludDIocmVzdWx0LT50YXJnZXRQb2ludC54
KCkgKyAyICogY3ViaWNQb2ludC54KCksIHJlc3VsdC0+dGFyZ2V0UG9pbnQueSgpICsgMiAqIGN1
YmljUG9pbnQueSgpKTsKICAgICAgICAgaWYgKG1fbW9kZSA9PSBSZWxhdGl2ZUNvb3JkaW5hdGVz
KSB7CiAgICAgICAgICAgICBwb2ludDIgKz0gbV9jdXJyZW50UG9pbnQ7Ci0gICAgICAgICAgICB0
YXJnZXRQb2ludCArPSBtX2N1cnJlbnRQb2ludDsKKyAgICAgICAgICAgIHJlc3VsdC0+dGFyZ2V0
UG9pbnQgKz0gbV9jdXJyZW50UG9pbnQ7CiAgICAgICAgIH0KICAgICAgICAgcG9pbnQxLnNjYWxl
KGdPbmVPdmVyVGhyZWUpOwogICAgICAgICBwb2ludDIuc2NhbGUoZ09uZU92ZXJUaHJlZSk7CiAK
LSAgICAgICAgbV9jb25zdW1lci5jdXJ2ZVRvQ3ViaWMocG9pbnQxLCBwb2ludDIsIHRhcmdldFBv
aW50LCBBYnNvbHV0ZUNvb3JkaW5hdGVzKTsKKyAgICAgICAgbV9jb25zdW1lci5jdXJ2ZVRvQ3Vi
aWMocG9pbnQxLCBwb2ludDIsIHJlc3VsdC0+dGFyZ2V0UG9pbnQsIEFic29sdXRlQ29vcmRpbmF0
ZXMpOwogCiAgICAgICAgIG1fY29udHJvbFBvaW50ID0gY3ViaWNQb2ludDsKLSAgICAgICAgbV9j
dXJyZW50UG9pbnQgPSB0YXJnZXRQb2ludDsKKyAgICAgICAgbV9jdXJyZW50UG9pbnQgPSByZXN1
bHQtPnRhcmdldFBvaW50OwogICAgIH0gZWxzZQotICAgICAgICBtX2NvbnN1bWVyLmN1cnZlVG9R
dWFkcmF0aWNTbW9vdGgodGFyZ2V0UG9pbnQsIG1fbW9kZSk7CisgICAgICAgIG1fY29uc3VtZXIu
Y3VydmVUb1F1YWRyYXRpY1Ntb290aChyZXN1bHQtPnRhcmdldFBvaW50LCBtX21vZGUpOwogICAg
IHJldHVybiB0cnVlOwogfQogCiBib29sIFNWR1BhdGhQYXJzZXI6OnBhcnNlQXJjVG9TZWdtZW50
KCkKIHsKLSAgICBmbG9hdCByeDsKLSAgICBmbG9hdCByeTsKLSAgICBmbG9hdCBhbmdsZTsKLSAg
ICBib29sIGxhcmdlQXJjOwotICAgIGJvb2wgc3dlZXA7Ci0gICAgRmxvYXRQb2ludCB0YXJnZXRQ
b2ludDsKLSAgICBpZiAoIW1fc291cmNlLnBhcnNlQXJjVG9TZWdtZW50KHJ4LCByeSwgYW5nbGUs
IGxhcmdlQXJjLCBzd2VlcCwgdGFyZ2V0UG9pbnQpKQorICAgIGF1dG8gcmVzdWx0ID0gbV9zb3Vy
Y2UucGFyc2VBcmNUb1NlZ21lbnQoKTsKKyAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgLy8gSWYgcnggPSAwIG9yIHJ5ID0gMCB0aGVuIHRoaXMgYXJjIGlzIHRy
ZWF0ZWQgYXMgYSBzdHJhaWdodCBsaW5lIHNlZ21lbnQgKGEgImxpbmV0byIpIGpvaW5pbmcgdGhl
IGVuZHBvaW50cy4KICAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcvaW1wbG5vdGUuaHRt
bCNBcmNPdXRPZlJhbmdlUGFyYW1ldGVycwogICAgIC8vIElmIHRoZSBjdXJyZW50IHBvaW50IGFu
ZCB0YXJnZXQgcG9pbnQgZm9yIHRoZSBhcmMgYXJlIGlkZW50aWNhbCwgaXQgc2hvdWxkIGJlIHRy
ZWF0ZWQgYXMgYSB6ZXJvIGxlbmd0aAogICAgIC8vIHBhdGguIFRoaXMgZW5zdXJlcyBjb250aW51
aXR5IGluIGFuaW1hdGlvbnMuCi0gICAgcnggPSBmYWJzZihyeCk7Ci0gICAgcnkgPSBmYWJzZihy
eSk7CisgICAgcmVzdWx0LT5yeCA9IHN0ZDo6YWJzKHJlc3VsdC0+cngpOworICAgIHJlc3VsdC0+
cnkgPSBzdGQ6OmFicyhyZXN1bHQtPnJ5KTsKICAgICBib29sIGFyY0lzWmVyb0xlbmd0aCA9IGZh
bHNlOwogICAgIGlmIChtX3BhdGhQYXJzaW5nTW9kZSA9PSBOb3JtYWxpemVkUGFyc2luZykgewog
ICAgICAgICBpZiAobV9tb2RlID09IFJlbGF0aXZlQ29vcmRpbmF0ZXMpCi0gICAgICAgICAgICBh
cmNJc1plcm9MZW5ndGggPSB0YXJnZXRQb2ludCA9PSBGbG9hdFBvaW50Ojp6ZXJvKCk7CisgICAg
ICAgICAgICBhcmNJc1plcm9MZW5ndGggPSByZXN1bHQtPnRhcmdldFBvaW50ID09IEZsb2F0UG9p
bnQ6Onplcm8oKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgYXJjSXNaZXJvTGVuZ3RoID0g
dGFyZ2V0UG9pbnQgPT0gbV9jdXJyZW50UG9pbnQ7CisgICAgICAgICAgICBhcmNJc1plcm9MZW5n
dGggPSByZXN1bHQtPnRhcmdldFBvaW50ID09IG1fY3VycmVudFBvaW50OwogICAgIH0KLSAgICBp
ZiAoIXJ4IHx8ICFyeSB8fCBhcmNJc1plcm9MZW5ndGgpIHsKKyAgICBpZiAoIXJlc3VsdC0+cngg
fHwgIXJlc3VsdC0+cnkgfHwgYXJjSXNaZXJvTGVuZ3RoKSB7CiAgICAgICAgIGlmIChtX3BhdGhQ
YXJzaW5nTW9kZSA9PSBOb3JtYWxpemVkUGFyc2luZykgewogICAgICAgICAgICAgaWYgKG1fbW9k
ZSA9PSBSZWxhdGl2ZUNvb3JkaW5hdGVzKQotICAgICAgICAgICAgICAgIG1fY3VycmVudFBvaW50
ICs9IHRhcmdldFBvaW50OworICAgICAgICAgICAgICAgIG1fY3VycmVudFBvaW50ICs9IHJlc3Vs
dC0+dGFyZ2V0UG9pbnQ7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9jdXJy
ZW50UG9pbnQgPSB0YXJnZXRQb2ludDsKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRQb2ludCA9
IHJlc3VsdC0+dGFyZ2V0UG9pbnQ7CiAgICAgICAgICAgICBtX2NvbnN1bWVyLmxpbmVUbyhtX2N1
cnJlbnRQb2ludCwgQWJzb2x1dGVDb29yZGluYXRlcyk7CiAgICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgbV9jb25zdW1lci5saW5lVG8odGFyZ2V0UG9pbnQsIG1fbW9kZSk7CisgICAgICAgICAg
ICBtX2NvbnN1bWVyLmxpbmVUbyhyZXN1bHQtPnRhcmdldFBvaW50LCBtX21vZGUpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICBpZiAobV9wYXRoUGFyc2luZ01vZGUgPT0gTm9y
bWFsaXplZFBhcnNpbmcpIHsKICAgICAgICAgRmxvYXRQb2ludCBwb2ludDEgPSBtX2N1cnJlbnRQ
b2ludDsKICAgICAgICAgaWYgKG1fbW9kZSA9PSBSZWxhdGl2ZUNvb3JkaW5hdGVzKQotICAgICAg
ICAgICAgdGFyZ2V0UG9pbnQgKz0gbV9jdXJyZW50UG9pbnQ7Ci0gICAgICAgIG1fY3VycmVudFBv
aW50ID0gdGFyZ2V0UG9pbnQ7Ci0gICAgICAgIHJldHVybiBkZWNvbXBvc2VBcmNUb0N1YmljKGFu
Z2xlLCByeCwgcnksIHBvaW50MSwgdGFyZ2V0UG9pbnQsIGxhcmdlQXJjLCBzd2VlcCk7CisgICAg
ICAgICAgICByZXN1bHQtPnRhcmdldFBvaW50ICs9IG1fY3VycmVudFBvaW50OworICAgICAgICBt
X2N1cnJlbnRQb2ludCA9IHJlc3VsdC0+dGFyZ2V0UG9pbnQ7CisgICAgICAgIHJldHVybiBkZWNv
bXBvc2VBcmNUb0N1YmljKHJlc3VsdC0+YW5nbGUsIHJlc3VsdC0+cngsIHJlc3VsdC0+cnksIHBv
aW50MSwgcmVzdWx0LT50YXJnZXRQb2ludCwgcmVzdWx0LT5sYXJnZUFyYywgcmVzdWx0LT5zd2Vl
cCk7CiAgICAgfQotICAgIG1fY29uc3VtZXIuYXJjVG8ocngsIHJ5LCBhbmdsZSwgbGFyZ2VBcmMs
IHN3ZWVwLCB0YXJnZXRQb2ludCwgbV9tb2RlKTsKKyAgICBtX2NvbnN1bWVyLmFyY1RvKHJlc3Vs
dC0+cngsIHJlc3VsdC0+cnksIHJlc3VsdC0+YW5nbGUsIHJlc3VsdC0+bGFyZ2VBcmMsIHJlc3Vs
dC0+c3dlZXAsIHJlc3VsdC0+dGFyZ2V0UG9pbnQsIG1fbW9kZSk7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKQEAgLTMxMiw4ICszMDQsMTEgQEAgYm9vbCBTVkdQYXRoUGFyc2VyOjpwYXJzZVBhdGhE
YXRhKGJvb2wgYwogICAgIGlmICghbV9zb3VyY2UubW92ZVRvTmV4dFRva2VuKCkpCiAgICAgICAg
IHJldHVybiB0cnVlOwogCi0gICAgU1ZHUGF0aFNlZ1R5cGUgY29tbWFuZDsKLSAgICBtX3NvdXJj
ZS5wYXJzZVNWR1NlZ21lbnRUeXBlKGNvbW1hbmQpOworICAgIGF1dG8gcGFyc2VkQ29tbWFuZCA9
IG1fc291cmNlLnBhcnNlU1ZHU2VnbWVudFR5cGUoKTsKKyAgICBpZiAoIXBhcnNlZENvbW1hbmQp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gY29tbWFuZCA9ICpwYXJzZWRDb21t
YW5kOwogCiAgICAgLy8gUGF0aCBtdXN0IHN0YXJ0IHdpdGggbW92ZXRvLgogICAgIGlmIChjaGVj
a0ZvckluaXRpYWxNb3ZlVG8gJiYgY29tbWFuZCAhPSBQYXRoU2VnTW92ZVRvQWJzICYmIGNvbW1h
bmQgIT0gUGF0aFNlZ01vdmVUb1JlbCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRo
U2VnTGlzdFNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Bh
dGhTZWdMaXN0U291cmNlLmNwcAkocmV2aXNpb24gMjYzMzMzKQorKysgU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1BhdGhTZWdMaXN0U291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTUgKzQw
LDE1IEBAIGJvb2wgU1ZHUGF0aFNlZ0xpc3RTb3VyY2U6Omhhc01vcmVEYXRhKCkKICAgICByZXR1
cm4gbV9pdGVtQ3VycmVudCA8IG1faXRlbUVuZDsKIH0KIAotYm9vbCBTVkdQYXRoU2VnTGlzdFNv
dXJjZTo6cGFyc2VTVkdTZWdtZW50VHlwZShTVkdQYXRoU2VnVHlwZSYgcGF0aFNlZ1R5cGUpCitT
VkdQYXRoU2VnVHlwZSBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6bmV4dENvbW1hbmQoU1ZHUGF0aFNl
Z1R5cGUpCiB7CiAgICAgbV9zZWdtZW50ID0gbV9wYXRoU2VnTGlzdC5hdChtX2l0ZW1DdXJyZW50
KTsKLSAgICBwYXRoU2VnVHlwZSA9IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdUeXBlPihtX3NlZ21l
bnQtPnBhdGhTZWdUeXBlKCkpOworICAgIFNWR1BhdGhTZWdUeXBlIHBhdGhTZWdUeXBlID0gc3Rh
dGljX2Nhc3Q8U1ZHUGF0aFNlZ1R5cGU+KG1fc2VnbWVudC0+cGF0aFNlZ1R5cGUoKSk7CiAgICAg
KyttX2l0ZW1DdXJyZW50OwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBwYXRoU2VnVHlw
ZTsKIH0KIAotU1ZHUGF0aFNlZ1R5cGUgU1ZHUGF0aFNlZ0xpc3RTb3VyY2U6Om5leHRDb21tYW5k
KFNWR1BhdGhTZWdUeXBlKQorT3B0aW9uYWw8U1ZHUGF0aFNlZ1R5cGU+IFNWR1BhdGhTZWdMaXN0
U291cmNlOjpwYXJzZVNWR1NlZ21lbnRUeXBlKCkKIHsKICAgICBtX3NlZ21lbnQgPSBtX3BhdGhT
ZWdMaXN0LmF0KG1faXRlbUN1cnJlbnQpOwogICAgIFNWR1BhdGhTZWdUeXBlIHBhdGhTZWdUeXBl
ID0gc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ1R5cGU+KG1fc2VnbWVudC0+cGF0aFNlZ1R5cGUoKSk7
CkBAIC01Niw5NCArNTYsMTEyIEBAIFNWR1BhdGhTZWdUeXBlIFNWR1BhdGhTZWdMaXN0U291cmNl
OjpuZXgKICAgICByZXR1cm4gcGF0aFNlZ1R5cGU7CiB9CiAKLWJvb2wgU1ZHUGF0aFNlZ0xpc3RT
b3VyY2U6OnBhcnNlTW92ZVRvU2VnbWVudChGbG9hdFBvaW50JiB0YXJnZXRQb2ludCkKK09wdGlv
bmFsPFNWR1BhdGhTb3VyY2U6Ok1vdmVUb1NlZ21lbnQ+IFNWR1BhdGhTZWdMaXN0U291cmNlOjpw
YXJzZU1vdmVUb1NlZ21lbnQoKQogewogICAgIEFTU0VSVChtX3NlZ21lbnQpOwogICAgIEFTU0VS
VChtX3NlZ21lbnQtPnBhdGhTZWdUeXBlKCkgPT0gUGF0aFNlZ01vdmVUb0FicyB8fCBtX3NlZ21l
bnQtPnBhdGhTZWdUeXBlKCkgPT0gUGF0aFNlZ01vdmVUb1JlbCk7CiAgICAgU1ZHUGF0aFNlZ1Np
bmdsZUNvb3JkaW5hdGUqIG1vdmVUbyA9IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdTaW5nbGVDb29y
ZGluYXRlKj4obV9zZWdtZW50LmdldCgpKTsKLSAgICB0YXJnZXRQb2ludCA9IEZsb2F0UG9pbnQo
bW92ZVRvLT54KCksIG1vdmVUby0+eSgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBN
b3ZlVG9TZWdtZW50IHNlZ21lbnQ7CisgICAgc2VnbWVudC50YXJnZXRQb2ludCA9IEZsb2F0UG9p
bnQobW92ZVRvLT54KCksIG1vdmVUby0+eSgpKTsKKyAgICByZXR1cm4gc2VnbWVudDsKIH0KIAot
Ym9vbCBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VMaW5lVG9TZWdtZW50KEZsb2F0UG9pbnQm
IHRhcmdldFBvaW50KQorT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6TGluZVRvU2VnbWVudD4gU1ZH
UGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNlTGluZVRvU2VnbWVudCgpCiB7CiAgICAgQVNTRVJUKG1f
c2VnbWVudCk7CiAgICAgQVNTRVJUKG1fc2VnbWVudC0+cGF0aFNlZ1R5cGUoKSA9PSBQYXRoU2Vn
TGluZVRvQWJzIHx8IG1fc2VnbWVudC0+cGF0aFNlZ1R5cGUoKSA9PSBQYXRoU2VnTGluZVRvUmVs
KTsKICAgICBTVkdQYXRoU2VnU2luZ2xlQ29vcmRpbmF0ZSogbGluZVRvID0gc3RhdGljX2Nhc3Q8
U1ZHUGF0aFNlZ1NpbmdsZUNvb3JkaW5hdGUqPihtX3NlZ21lbnQuZ2V0KCkpOwotICAgIHRhcmdl
dFBvaW50ID0gRmxvYXRQb2ludChsaW5lVG8tPngoKSwgbGluZVRvLT55KCkpOwotICAgIHJldHVy
biB0cnVlOworICAgIAorICAgIExpbmVUb1NlZ21lbnQgc2VnbWVudDsKKyAgICBzZWdtZW50LnRh
cmdldFBvaW50ID0gRmxvYXRQb2ludChsaW5lVG8tPngoKSwgbGluZVRvLT55KCkpOworICAgIHJl
dHVybiBzZWdtZW50OwogfQogCi1ib29sIFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUxpbmVU
b0hvcml6b250YWxTZWdtZW50KGZsb2F0JiB4KQorT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6TGlu
ZVRvSG9yaXpvbnRhbFNlZ21lbnQ+IFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUxpbmVUb0hv
cml6b250YWxTZWdtZW50KCkKIHsKICAgICBBU1NFUlQobV9zZWdtZW50KTsKICAgICBBU1NFUlQo
bV9zZWdtZW50LT5wYXRoU2VnVHlwZSgpID09IFBhdGhTZWdMaW5lVG9Ib3Jpem9udGFsQWJzIHx8
IG1fc2VnbWVudC0+cGF0aFNlZ1R5cGUoKSA9PSBQYXRoU2VnTGluZVRvSG9yaXpvbnRhbFJlbCk7
CiAgICAgU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWwqIGhvcml6b250YWwgPSBzdGF0aWNfY2Fz
dDxTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbCo+KG1fc2VnbWVudC5nZXQoKSk7Ci0gICAgeCA9
IGhvcml6b250YWwtPngoKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBMaW5lVG9Ib3Jp
em9udGFsU2VnbWVudCBzZWdtZW50OworICAgIHNlZ21lbnQueCA9IGhvcml6b250YWwtPngoKTsK
KyAgICByZXR1cm4gc2VnbWVudDsKIH0KIAotYm9vbCBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFy
c2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnQoZmxvYXQmIHkpCitPcHRpb25hbDxTVkdQYXRoU291cmNl
OjpMaW5lVG9WZXJ0aWNhbFNlZ21lbnQ+IFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUxpbmVU
b1ZlcnRpY2FsU2VnbWVudCgpCiB7CiAgICAgQVNTRVJUKG1fc2VnbWVudCk7CiAgICAgQVNTRVJU
KG1fc2VnbWVudC0+cGF0aFNlZ1R5cGUoKSA9PSBQYXRoU2VnTGluZVRvVmVydGljYWxBYnMgfHwg
bV9zZWdtZW50LT5wYXRoU2VnVHlwZSgpID09IFBhdGhTZWdMaW5lVG9WZXJ0aWNhbFJlbCk7CiAg
ICAgU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsKiB2ZXJ0aWNhbCA9IHN0YXRpY19jYXN0PFNWR1Bh
dGhTZWdMaW5ldG9WZXJ0aWNhbCo+KG1fc2VnbWVudC5nZXQoKSk7Ci0gICAgeSA9IHZlcnRpY2Fs
LT55KCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgTGluZVRvVmVydGljYWxTZWdtZW50
IHNlZ21lbnQ7CisgICAgc2VnbWVudC55ID0gdmVydGljYWwtPnkoKTsKKyAgICByZXR1cm4gc2Vn
bWVudDsKIH0KIAotYm9vbCBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VDdXJ2ZVRvQ3ViaWNT
ZWdtZW50KEZsb2F0UG9pbnQmIHBvaW50MSwgRmxvYXRQb2ludCYgcG9pbnQyLCBGbG9hdFBvaW50
JiB0YXJnZXRQb2ludCkKK09wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkN1cnZlVG9DdWJpY1NlZ21l
bnQ+IFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQoKQogewog
ICAgIEFTU0VSVChtX3NlZ21lbnQpOwogICAgIEFTU0VSVChtX3NlZ21lbnQtPnBhdGhTZWdUeXBl
KCkgPT0gUGF0aFNlZ0N1cnZlVG9DdWJpY0FicyB8fCBtX3NlZ21lbnQtPnBhdGhTZWdUeXBlKCkg
PT0gUGF0aFNlZ0N1cnZlVG9DdWJpY1JlbCk7CiAgICAgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpYyog
Y3ViaWMgPSBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnQ3VydmV0b0N1YmljKj4obV9zZWdtZW50Lmdl
dCgpKTsKLSAgICBwb2ludDEgPSBGbG9hdFBvaW50KGN1YmljLT54MSgpLCBjdWJpYy0+eTEoKSk7
Ci0gICAgcG9pbnQyID0gRmxvYXRQb2ludChjdWJpYy0+eDIoKSwgY3ViaWMtPnkyKCkpOwotICAg
IHRhcmdldFBvaW50ID0gRmxvYXRQb2ludChjdWJpYy0+eCgpLCBjdWJpYy0+eSgpKTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBDdXJ2ZVRvQ3ViaWNTZWdtZW50IHNlZ21lbnQ7CisgICAg
c2VnbWVudC5wb2ludDEgPSBGbG9hdFBvaW50KGN1YmljLT54MSgpLCBjdWJpYy0+eTEoKSk7Cisg
ICAgc2VnbWVudC5wb2ludDIgPSBGbG9hdFBvaW50KGN1YmljLT54MigpLCBjdWJpYy0+eTIoKSk7
CisgICAgc2VnbWVudC50YXJnZXRQb2ludCA9IEZsb2F0UG9pbnQoY3ViaWMtPngoKSwgY3ViaWMt
PnkoKSk7CisgICAgcmV0dXJuIHNlZ21lbnQ7CiB9CiAKLWJvb2wgU1ZHUGF0aFNlZ0xpc3RTb3Vy
Y2U6OnBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudChGbG9hdFBvaW50JiBwb2ludDIsIEZs
b2F0UG9pbnQmIHRhcmdldFBvaW50KQorT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6Q3VydmVUb0N1
YmljU21vb3RoU2VnbWVudD4gU1ZHUGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNlQ3VydmVUb0N1Ymlj
U21vb3RoU2VnbWVudCgpCiB7CiAgICAgQVNTRVJUKG1fc2VnbWVudCk7CiAgICAgQVNTRVJUKG1f
c2VnbWVudC0+cGF0aFNlZ1R5cGUoKSA9PSBQYXRoU2VnQ3VydmVUb0N1YmljU21vb3RoQWJzIHx8
IG1fc2VnbWVudC0+cGF0aFNlZ1R5cGUoKSA9PSBQYXRoU2VnQ3VydmVUb0N1YmljU21vb3RoUmVs
KTsKICAgICBTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoKiBjdWJpY1Ntb290aCA9IHN0YXRp
Y19jYXN0PFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGgqPihtX3NlZ21lbnQuZ2V0KCkpOwot
ICAgIHBvaW50MiA9IEZsb2F0UG9pbnQoY3ViaWNTbW9vdGgtPngyKCksIGN1YmljU21vb3RoLT55
MigpKTsKLSAgICB0YXJnZXRQb2ludCA9IEZsb2F0UG9pbnQoY3ViaWNTbW9vdGgtPngoKSwgY3Vi
aWNTbW9vdGgtPnkoKSk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgQ3VydmVUb0N1Ymlj
U21vb3RoU2VnbWVudCBzZWdtZW50OworICAgIHNlZ21lbnQucG9pbnQyID0gRmxvYXRQb2ludChj
dWJpY1Ntb290aC0+eDIoKSwgY3ViaWNTbW9vdGgtPnkyKCkpOworICAgIHNlZ21lbnQudGFyZ2V0
UG9pbnQgPSBGbG9hdFBvaW50KGN1YmljU21vb3RoLT54KCksIGN1YmljU21vb3RoLT55KCkpOwor
ICAgIHJldHVybiBzZWdtZW50OwogfQogCi1ib29sIFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJz
ZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KEZsb2F0UG9pbnQmIHBvaW50MSwgRmxvYXRQb2ludCYg
dGFyZ2V0UG9pbnQpCitPcHRpb25hbDxTVkdQYXRoU291cmNlOjpDdXJ2ZVRvUXVhZHJhdGljU2Vn
bWVudD4gU1ZHUGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQo
KQogewogICAgIEFTU0VSVChtX3NlZ21lbnQpOwogICAgIEFTU0VSVChtX3NlZ21lbnQtPnBhdGhT
ZWdUeXBlKCkgPT0gUGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNBYnMgfHwgbV9zZWdtZW50LT5wYXRo
U2VnVHlwZSgpID09IFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljUmVsKTsKICAgICBTVkdQYXRoU2Vn
Q3VydmV0b1F1YWRyYXRpYyogcXVhZHJhdGljID0gc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0N1cnZl
dG9RdWFkcmF0aWMqPihtX3NlZ21lbnQuZ2V0KCkpOwotICAgIHBvaW50MSA9IEZsb2F0UG9pbnQo
cXVhZHJhdGljLT54MSgpLCBxdWFkcmF0aWMtPnkxKCkpOwotICAgIHRhcmdldFBvaW50ID0gRmxv
YXRQb2ludChxdWFkcmF0aWMtPngoKSwgcXVhZHJhdGljLT55KCkpOwotICAgIHJldHVybiB0cnVl
OworICAgIAorICAgIEN1cnZlVG9RdWFkcmF0aWNTZWdtZW50IHNlZ21lbnQ7CisgICAgc2VnbWVu
dC5wb2ludDEgPSBGbG9hdFBvaW50KHF1YWRyYXRpYy0+eDEoKSwgcXVhZHJhdGljLT55MSgpKTsK
KyAgICBzZWdtZW50LnRhcmdldFBvaW50ID0gRmxvYXRQb2ludChxdWFkcmF0aWMtPngoKSwgcXVh
ZHJhdGljLT55KCkpOworICAgIHJldHVybiBzZWdtZW50OwogfQogCi1ib29sIFNWR1BhdGhTZWdM
aXN0U291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KEZsb2F0UG9pbnQm
IHRhcmdldFBvaW50KQorT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6Q3VydmVUb1F1YWRyYXRpY1Nt
b290aFNlZ21lbnQ+IFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNT
bW9vdGhTZWdtZW50KCkKIHsKICAgICBBU1NFUlQobV9zZWdtZW50KTsKICAgICBBU1NFUlQobV9z
ZWdtZW50LT5wYXRoU2VnVHlwZSgpID09IFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljU21vb3RoQWJz
IHx8IG1fc2VnbWVudC0+cGF0aFNlZ1R5cGUoKSA9PSBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY1Nt
b290aFJlbCk7CiAgICAgU1ZHUGF0aFNlZ1NpbmdsZUNvb3JkaW5hdGUqIHF1YWRyYXRpY1Ntb290
aCA9IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdTaW5nbGVDb29yZGluYXRlKj4obV9zZWdtZW50Lmdl
dCgpKTsKLSAgICB0YXJnZXRQb2ludCA9IEZsb2F0UG9pbnQocXVhZHJhdGljU21vb3RoLT54KCks
IHF1YWRyYXRpY1Ntb290aC0+eSgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBDdXJ2
ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudCBzZWdtZW50OworICAgIHNlZ21lbnQudGFyZ2V0UG9p
bnQgPSBGbG9hdFBvaW50KHF1YWRyYXRpY1Ntb290aC0+eCgpLCBxdWFkcmF0aWNTbW9vdGgtPnko
KSk7CisgICAgcmV0dXJuIHNlZ21lbnQ7CiB9CiAKLWJvb2wgU1ZHUGF0aFNlZ0xpc3RTb3VyY2U6
OnBhcnNlQXJjVG9TZWdtZW50KGZsb2F0JiByeCwgZmxvYXQmIHJ5LCBmbG9hdCYgYW5nbGUsIGJv
b2wmIGxhcmdlQXJjLCBib29sJiBzd2VlcCwgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCitPcHRp
b25hbDxTVkdQYXRoU291cmNlOjpBcmNUb1NlZ21lbnQ+IFNWR1BhdGhTZWdMaXN0U291cmNlOjpw
YXJzZUFyY1RvU2VnbWVudCgpCiB7CiAgICAgQVNTRVJUKG1fc2VnbWVudCk7CiAgICAgQVNTRVJU
KG1fc2VnbWVudC0+cGF0aFNlZ1R5cGUoKSA9PSBQYXRoU2VnQXJjQWJzIHx8IG1fc2VnbWVudC0+
cGF0aFNlZ1R5cGUoKSA9PSBQYXRoU2VnQXJjUmVsKTsKICAgICBTVkdQYXRoU2VnQXJjKiBhcmNU
byA9IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdBcmMqPihtX3NlZ21lbnQuZ2V0KCkpOwotICAgIHJ4
ID0gYXJjVG8tPnIxKCk7Ci0gICAgcnkgPSBhcmNUby0+cjIoKTsKLSAgICBhbmdsZSA9IGFyY1Rv
LT5hbmdsZSgpOwotICAgIGxhcmdlQXJjID0gYXJjVG8tPmxhcmdlQXJjRmxhZygpOwotICAgIHN3
ZWVwID0gYXJjVG8tPnN3ZWVwRmxhZygpOwotICAgIHRhcmdldFBvaW50ID0gRmxvYXRQb2ludChh
cmNUby0+eCgpLCBhcmNUby0+eSgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBBcmNU
b1NlZ21lbnQgc2VnbWVudDsKKyAgICBzZWdtZW50LnJ4ID0gYXJjVG8tPnIxKCk7CisgICAgc2Vn
bWVudC5yeSA9IGFyY1RvLT5yMigpOworICAgIHNlZ21lbnQuYW5nbGUgPSBhcmNUby0+YW5nbGUo
KTsKKyAgICBzZWdtZW50LmxhcmdlQXJjID0gYXJjVG8tPmxhcmdlQXJjRmxhZygpOworICAgIHNl
Z21lbnQuc3dlZXAgPSBhcmNUby0+c3dlZXBGbGFnKCk7CisgICAgc2VnbWVudC50YXJnZXRQb2lu
dCA9IEZsb2F0UG9pbnQoYXJjVG8tPngoKSwgYXJjVG8tPnkoKSk7CisgICAgcmV0dXJuIHNlZ21l
bnQ7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU2VnTGlzdFNvdXJj
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU2VnTGlzdFNvdXJj
ZS5oCShyZXZpc2lvbiAyNjMzMzMpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFNlZ0xp
c3RTb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTggKzM2LDE4IEBAIHB1YmxpYzoKIHBy
aXZhdGU6CiAgICAgYm9vbCBoYXNNb3JlRGF0YSgpIGNvbnN0IGZpbmFsOwogICAgIGJvb2wgbW92
ZVRvTmV4dFRva2VuKCkgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQotICAgIGJvb2wgcGFyc2VTVkdT
ZWdtZW50VHlwZShTVkdQYXRoU2VnVHlwZSYpIGZpbmFsOwogICAgIFNWR1BhdGhTZWdUeXBlIG5l
eHRDb21tYW5kKFNWR1BhdGhTZWdUeXBlKSBmaW5hbDsKIAotICAgIGJvb2wgcGFyc2VNb3ZlVG9T
ZWdtZW50KEZsb2F0UG9pbnQmKSBmaW5hbDsKLSAgICBib29sIHBhcnNlTGluZVRvU2VnbWVudChG
bG9hdFBvaW50JikgZmluYWw7Ci0gICAgYm9vbCBwYXJzZUxpbmVUb0hvcml6b250YWxTZWdtZW50
KGZsb2F0JikgZmluYWw7Ci0gICAgYm9vbCBwYXJzZUxpbmVUb1ZlcnRpY2FsU2VnbWVudChmbG9h
dCYpIGZpbmFsOwotICAgIGJvb2wgcGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KEZsb2F0UG9pbnQm
LCBGbG9hdFBvaW50JiwgRmxvYXRQb2ludCYpIGZpbmFsOwotICAgIGJvb2wgcGFyc2VDdXJ2ZVRv
Q3ViaWNTbW9vdGhTZWdtZW50KEZsb2F0UG9pbnQmLCBGbG9hdFBvaW50JikgZmluYWw7Ci0gICAg
Ym9vbCBwYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KEZsb2F0UG9pbnQmLCBGbG9hdFBvaW50
JikgZmluYWw7Ci0gICAgYm9vbCBwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KEZs
b2F0UG9pbnQmKSBmaW5hbDsKLSAgICBib29sIHBhcnNlQXJjVG9TZWdtZW50KGZsb2F0JiwgZmxv
YXQmLCBmbG9hdCYsIGJvb2wmLCBib29sJiwgRmxvYXRQb2ludCYpIGZpbmFsOworICAgIE9wdGlv
bmFsPFNWR1BhdGhTZWdUeXBlPiBwYXJzZVNWR1NlZ21lbnRUeXBlKCkgZmluYWw7CisgICAgT3B0
aW9uYWw8TW92ZVRvU2VnbWVudD4gcGFyc2VNb3ZlVG9TZWdtZW50KCkgZmluYWw7CisgICAgT3B0
aW9uYWw8TGluZVRvU2VnbWVudD4gcGFyc2VMaW5lVG9TZWdtZW50KCkgZmluYWw7CisgICAgT3B0
aW9uYWw8TGluZVRvSG9yaXpvbnRhbFNlZ21lbnQ+IHBhcnNlTGluZVRvSG9yaXpvbnRhbFNlZ21l
bnQoKSBmaW5hbDsKKyAgICBPcHRpb25hbDxMaW5lVG9WZXJ0aWNhbFNlZ21lbnQ+IHBhcnNlTGlu
ZVRvVmVydGljYWxTZWdtZW50KCkgZmluYWw7CisgICAgT3B0aW9uYWw8Q3VydmVUb0N1YmljU2Vn
bWVudD4gcGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KCkgZmluYWw7CisgICAgT3B0aW9uYWw8Q3Vy
dmVUb0N1YmljU21vb3RoU2VnbWVudD4gcGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KCkg
ZmluYWw7CisgICAgT3B0aW9uYWw8Q3VydmVUb1F1YWRyYXRpY1NlZ21lbnQ+IHBhcnNlQ3VydmVU
b1F1YWRyYXRpY1NlZ21lbnQoKSBmaW5hbDsKKyAgICBPcHRpb25hbDxDdXJ2ZVRvUXVhZHJhdGlj
U21vb3RoU2VnbWVudD4gcGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudCgpIGZpbmFs
OworICAgIE9wdGlvbmFsPEFyY1RvU2VnbWVudD4gcGFyc2VBcmNUb1NlZ21lbnQoKSBmaW5hbDsK
IAogICAgIGNvbnN0IFNWR1BhdGhTZWdMaXN0JiBtX3BhdGhTZWdMaXN0OwogICAgIFJlZlB0cjxT
VkdQYXRoU2VnPiBtX3NlZ21lbnQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFNv
dXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU291cmNlLmgJ
KHJldmlzaW9uIDI2MzMzMykKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU291cmNlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMzLDE4ICszMyw2MyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFs
IGJvb2wgaGFzTW9yZURhdGEoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIG1vdmVUb05l
eHRUb2tlbigpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VTVkdTZWdtZW50VHlwZShTVkdQ
YXRoU2VnVHlwZSYpID0gMDsKICAgICB2aXJ0dWFsIFNWR1BhdGhTZWdUeXBlIG5leHRDb21tYW5k
KFNWR1BhdGhTZWdUeXBlIHByZXZpb3VzQ29tbWFuZCkgPSAwOwogCi0gICAgdmlydHVhbCBib29s
IHBhcnNlTW92ZVRvU2VnbWVudChGbG9hdFBvaW50JikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBw
YXJzZUxpbmVUb1NlZ21lbnQoRmxvYXRQb2ludCYpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFy
c2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudChmbG9hdCYpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wg
cGFyc2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnQoZmxvYXQmKSA9IDA7Ci0gICAgdmlydHVhbCBib29s
IHBhcnNlQ3VydmVUb0N1YmljU2VnbWVudChGbG9hdFBvaW50JiwgRmxvYXRQb2ludCYsIEZsb2F0
UG9pbnQmKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2Vn
bWVudChGbG9hdFBvaW50JiwgRmxvYXRQb2ludCYpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFy
c2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudChGbG9hdFBvaW50JiwgRmxvYXRQb2ludCYpID0gMDsK
LSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudChGbG9h
dFBvaW50JikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBwYXJzZUFyY1RvU2VnbWVudChmbG9hdCYs
IGZsb2F0JiwgZmxvYXQmLCBib29sJiwgYm9vbCYsIEZsb2F0UG9pbnQmKSA9IDA7CisgICAgdmly
dHVhbCBPcHRpb25hbDxTVkdQYXRoU2VnVHlwZT4gcGFyc2VTVkdTZWdtZW50VHlwZSgpID0gMDsK
KworICAgIHN0cnVjdCBNb3ZlVG9TZWdtZW50IHsKKyAgICAgICAgRmxvYXRQb2ludCB0YXJnZXRQ
b2ludDsKKyAgICB9OworICAgIHZpcnR1YWwgT3B0aW9uYWw8TW92ZVRvU2VnbWVudD4gcGFyc2VN
b3ZlVG9TZWdtZW50KCkgPSAwOworCisgICAgc3RydWN0IExpbmVUb1NlZ21lbnQgeworICAgICAg
ICBGbG9hdFBvaW50IHRhcmdldFBvaW50OworICAgIH07CisgICAgdmlydHVhbCBPcHRpb25hbDxM
aW5lVG9TZWdtZW50PiBwYXJzZUxpbmVUb1NlZ21lbnQoKSA9IDA7CisKKyAgICBzdHJ1Y3QgTGlu
ZVRvSG9yaXpvbnRhbFNlZ21lbnQgeworICAgICAgICBmbG9hdCB4ID0gMDsKKyAgICB9OworICAg
IHZpcnR1YWwgT3B0aW9uYWw8TGluZVRvSG9yaXpvbnRhbFNlZ21lbnQ+IHBhcnNlTGluZVRvSG9y
aXpvbnRhbFNlZ21lbnQoKSA9IDA7CisKKyAgICBzdHJ1Y3QgTGluZVRvVmVydGljYWxTZWdtZW50
IHsKKyAgICAgICAgZmxvYXQgeSA9IDA7CisgICAgfTsKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPExp
bmVUb1ZlcnRpY2FsU2VnbWVudD4gcGFyc2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnQoKSA9IDA7CisK
KyAgICBzdHJ1Y3QgQ3VydmVUb0N1YmljU2VnbWVudCB7CisgICAgICAgIEZsb2F0UG9pbnQgcG9p
bnQxOworICAgICAgICBGbG9hdFBvaW50IHBvaW50MjsKKyAgICAgICAgRmxvYXRQb2ludCB0YXJn
ZXRQb2ludDsKKyAgICB9OworICAgIHZpcnR1YWwgT3B0aW9uYWw8Q3VydmVUb0N1YmljU2VnbWVu
dD4gcGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KCkgPSAwOworCisgICAgc3RydWN0IEN1cnZlVG9D
dWJpY1Ntb290aFNlZ21lbnQgeworICAgICAgICBGbG9hdFBvaW50IHBvaW50MjsKKyAgICAgICAg
RmxvYXRQb2ludCB0YXJnZXRQb2ludDsKKyAgICB9OworICAgIHZpcnR1YWwgT3B0aW9uYWw8Q3Vy
dmVUb0N1YmljU21vb3RoU2VnbWVudD4gcGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KCkg
PSAwOworCisgICAgc3RydWN0IEN1cnZlVG9RdWFkcmF0aWNTZWdtZW50IHsKKyAgICAgICAgRmxv
YXRQb2ludCBwb2ludDE7CisgICAgICAgIEZsb2F0UG9pbnQgdGFyZ2V0UG9pbnQ7CisgICAgfTsK
KyAgICB2aXJ0dWFsIE9wdGlvbmFsPEN1cnZlVG9RdWFkcmF0aWNTZWdtZW50PiBwYXJzZUN1cnZl
VG9RdWFkcmF0aWNTZWdtZW50KCkgPSAwOworCisgICAgc3RydWN0IEN1cnZlVG9RdWFkcmF0aWNT
bW9vdGhTZWdtZW50IHsKKyAgICAgICAgRmxvYXRQb2ludCB0YXJnZXRQb2ludDsKKyAgICB9Owor
ICAgIHZpcnR1YWwgT3B0aW9uYWw8Q3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQ+IHBhcnNl
Q3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQoKSA9IDA7CisKKyAgICBzdHJ1Y3QgQXJjVG9T
ZWdtZW50IHsKKyAgICAgICAgZmxvYXQgcnggPSAwOworICAgICAgICBmbG9hdCByeSA9IDA7Cisg
ICAgICAgIGZsb2F0IGFuZ2xlID0gMDsKKyAgICAgICAgYm9vbCBsYXJnZUFyYyA9IGZhbHNlOwor
ICAgICAgICBib29sIHN3ZWVwID0gZmFsc2U7CisgICAgICAgIEZsb2F0UG9pbnQgdGFyZ2V0UG9p
bnQ7CisgICAgfTsKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPEFyY1RvU2VnbWVudD4gcGFyc2VBcmNU
b1NlZ21lbnQoKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFN0cmluZ1NvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTdHJpbmdTb3VyY2UuY3BwCShyZXZpc2lvbiAyNjMzMzMp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFN0cmluZ1NvdXJjZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU1LDE5NSArNTUsMjc5IEBAIGJvb2wgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6bW92
ZVRvTmV4dFRva2UKICAgICByZXR1cm4gc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKG1fY3VycmVudC5t
X2NoYXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2KTsKIH0KIAotdGVtcGxhdGUgPHR5cGVu
YW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgYm9vbCBwYXJzZVNWR1NlZ21lbnRUeXBlSGVscGVy
KGNvbnN0IENoYXJhY3RlclR5cGUqJiBjdXJyZW50LCBTVkdQYXRoU2VnVHlwZSYgcGF0aFNlZ1R5
cGUpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIE9wdGlvbmFsPFNW
R1BhdGhTZWdUeXBlPiBuZXh0Q29tbWFuZEhlbHBlcihjb25zdCBDaGFyYWN0ZXJUeXBlKiYgY3Vy
cmVudCwgU1ZHUGF0aFNlZ1R5cGUgcHJldmlvdXNDb21tYW5kKQoreworICAgIC8vIENoZWNrIGZv
ciByZW1haW5pbmcgY29vcmRpbmF0ZXMgaW4gdGhlIGN1cnJlbnQgY29tbWFuZC4KKyAgICBpZiAo
KCpjdXJyZW50ID09ICcrJyB8fCAqY3VycmVudCA9PSAnLScgfHwgKmN1cnJlbnQgPT0gJy4nIHx8
IGlzQVNDSUlEaWdpdCgqY3VycmVudCkpCisgICAgICAgICYmIHByZXZpb3VzQ29tbWFuZCAhPSBQ
YXRoU2VnQ2xvc2VQYXRoKSB7CisgICAgICAgIGlmIChwcmV2aW91c0NvbW1hbmQgPT0gUGF0aFNl
Z01vdmVUb0FicykKKyAgICAgICAgICAgIHJldHVybiBQYXRoU2VnTGluZVRvQWJzOworICAgICAg
ICBpZiAocHJldmlvdXNDb21tYW5kID09IFBhdGhTZWdNb3ZlVG9SZWwpCisgICAgICAgICAgICBy
ZXR1cm4gUGF0aFNlZ0xpbmVUb1JlbDsKKyAgICAgICAgcmV0dXJuIHByZXZpb3VzQ29tbWFuZDsK
KyAgICB9CisKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCitTVkdQYXRoU2VnVHlwZSBT
VkdQYXRoU3RyaW5nU291cmNlOjpuZXh0Q29tbWFuZChTVkdQYXRoU2VnVHlwZSBwcmV2aW91c0Nv
bW1hbmQpCit7CisgICAgaWYgKG1faXM4Qml0U291cmNlKSB7CisgICAgICAgIGlmIChhdXRvIG5l
eHRDb21tYW5kID0gbmV4dENvbW1hbmRIZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyOCwgcHJl
dmlvdXNDb21tYW5kKSkKKyAgICAgICAgICAgIHJldHVybiAqbmV4dENvbW1hbmQ7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgaWYgKGF1dG8gbmV4dENvbW1hbmQgPSBuZXh0Q29tbWFuZEhlbHBlciht
X2N1cnJlbnQubV9jaGFyYWN0ZXIxNiwgcHJldmlvdXNDb21tYW5kKSkKKyAgICAgICAgICAgIHJl
dHVybiAqbmV4dENvbW1hbmQ7CisgICAgfQorCisgICAgcmV0dXJuICpwYXJzZVNWR1NlZ21lbnRU
eXBlKCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgU1ZH
UGF0aFNlZ1R5cGUgcGFyc2VTVkdTZWdtZW50VHlwZUhlbHBlcihjb25zdCBDaGFyYWN0ZXJUeXBl
KiYgY3VycmVudCkKIHsKICAgICBzd2l0Y2ggKCooY3VycmVudCsrKSkgewogICAgIGNhc2UgJ1on
OgogICAgIGNhc2UgJ3onOgotICAgICAgICBwYXRoU2VnVHlwZSA9IFBhdGhTZWdDbG9zZVBhdGg7
Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gUGF0aFNlZ0Nsb3NlUGF0aDsKICAgICBj
YXNlICdNJzoKLSAgICAgICAgcGF0aFNlZ1R5cGUgPSBQYXRoU2VnTW92ZVRvQWJzOwotICAgICAg
ICBicmVhazsKKyAgICAgICAgcmV0dXJuIFBhdGhTZWdNb3ZlVG9BYnM7CiAgICAgY2FzZSAnbSc6
Ci0gICAgICAgIHBhdGhTZWdUeXBlID0gUGF0aFNlZ01vdmVUb1JlbDsKLSAgICAgICAgYnJlYWs7
CisgICAgICAgIHJldHVybiBQYXRoU2VnTW92ZVRvUmVsOwogICAgIGNhc2UgJ0wnOgotICAgICAg
ICBwYXRoU2VnVHlwZSA9IFBhdGhTZWdMaW5lVG9BYnM7Ci0gICAgICAgIGJyZWFrOworICAgICAg
ICByZXR1cm4gUGF0aFNlZ0xpbmVUb0FiczsKICAgICBjYXNlICdsJzoKLSAgICAgICAgcGF0aFNl
Z1R5cGUgPSBQYXRoU2VnTGluZVRvUmVsOwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJu
IFBhdGhTZWdMaW5lVG9SZWw7CiAgICAgY2FzZSAnQyc6Ci0gICAgICAgIHBhdGhTZWdUeXBlID0g
UGF0aFNlZ0N1cnZlVG9DdWJpY0FiczsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBQ
YXRoU2VnQ3VydmVUb0N1YmljQWJzOwogICAgIGNhc2UgJ2MnOgotICAgICAgICBwYXRoU2VnVHlw
ZSA9IFBhdGhTZWdDdXJ2ZVRvQ3ViaWNSZWw7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1
cm4gUGF0aFNlZ0N1cnZlVG9DdWJpY1JlbDsKICAgICBjYXNlICdRJzoKLSAgICAgICAgcGF0aFNl
Z1R5cGUgPSBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY0FiczsKLSAgICAgICAgYnJlYWs7CisgICAg
ICAgIHJldHVybiBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY0FiczsKICAgICBjYXNlICdxJzoKLSAg
ICAgICAgcGF0aFNlZ1R5cGUgPSBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY1JlbDsKLSAgICAgICAg
YnJlYWs7CisgICAgICAgIHJldHVybiBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY1JlbDsKICAgICBj
YXNlICdBJzoKLSAgICAgICAgcGF0aFNlZ1R5cGUgPSBQYXRoU2VnQXJjQWJzOwotICAgICAgICBi
cmVhazsKKyAgICAgICAgcmV0dXJuIFBhdGhTZWdBcmNBYnM7CiAgICAgY2FzZSAnYSc6Ci0gICAg
ICAgIHBhdGhTZWdUeXBlID0gUGF0aFNlZ0FyY1JlbDsKLSAgICAgICAgYnJlYWs7CisgICAgICAg
IHJldHVybiBQYXRoU2VnQXJjUmVsOwogICAgIGNhc2UgJ0gnOgotICAgICAgICBwYXRoU2VnVHlw
ZSA9IFBhdGhTZWdMaW5lVG9Ib3Jpem9udGFsQWJzOwotICAgICAgICBicmVhazsKKyAgICAgICAg
cmV0dXJuIFBhdGhTZWdMaW5lVG9Ib3Jpem9udGFsQWJzOwogICAgIGNhc2UgJ2gnOgotICAgICAg
ICBwYXRoU2VnVHlwZSA9IFBhdGhTZWdMaW5lVG9Ib3Jpem9udGFsUmVsOwotICAgICAgICBicmVh
azsKKyAgICAgICAgcmV0dXJuIFBhdGhTZWdMaW5lVG9Ib3Jpem9udGFsUmVsOwogICAgIGNhc2Ug
J1YnOgotICAgICAgICBwYXRoU2VnVHlwZSA9IFBhdGhTZWdMaW5lVG9WZXJ0aWNhbEFiczsKLSAg
ICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBQYXRoU2VnTGluZVRvVmVydGljYWxBYnM7CiAg
ICAgY2FzZSAndic6Ci0gICAgICAgIHBhdGhTZWdUeXBlID0gUGF0aFNlZ0xpbmVUb1ZlcnRpY2Fs
UmVsOwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIFBhdGhTZWdMaW5lVG9WZXJ0aWNh
bFJlbDsKICAgICBjYXNlICdTJzoKLSAgICAgICAgcGF0aFNlZ1R5cGUgPSBQYXRoU2VnQ3VydmVU
b0N1YmljU21vb3RoQWJzOwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIFBhdGhTZWdD
dXJ2ZVRvQ3ViaWNTbW9vdGhBYnM7CiAgICAgY2FzZSAncyc6Ci0gICAgICAgIHBhdGhTZWdUeXBl
ID0gUGF0aFNlZ0N1cnZlVG9DdWJpY1Ntb290aFJlbDsKLSAgICAgICAgYnJlYWs7CisgICAgICAg
IHJldHVybiBQYXRoU2VnQ3VydmVUb0N1YmljU21vb3RoUmVsOwogICAgIGNhc2UgJ1QnOgotICAg
ICAgICBwYXRoU2VnVHlwZSA9IFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljU21vb3RoQWJzOwotICAg
ICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljU21vb3Ro
QWJzOwogICAgIGNhc2UgJ3QnOgotICAgICAgICBwYXRoU2VnVHlwZSA9IFBhdGhTZWdDdXJ2ZVRv
UXVhZHJhdGljU21vb3RoUmVsOwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIFBhdGhT
ZWdDdXJ2ZVRvUXVhZHJhdGljU21vb3RoUmVsOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHBhdGhT
ZWdUeXBlID0gUGF0aFNlZ1Vua25vd247CisgICAgICAgIHJldHVybiBQYXRoU2VnVW5rbm93bjsK
ICAgICB9Ci0gICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6
cGFyc2VTVkdTZWdtZW50VHlwZShTVkdQYXRoU2VnVHlwZSYgcGF0aFNlZ1R5cGUpCitPcHRpb25h
bDxTVkdQYXRoU2VnVHlwZT4gU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VTVkdTZWdtZW50VHlw
ZSgpCiB7CiAgICAgaWYgKG1faXM4Qml0U291cmNlKQotICAgICAgICByZXR1cm4gcGFyc2VTVkdT
ZWdtZW50VHlwZUhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXI4LCBwYXRoU2VnVHlwZSk7Ci0g
ICAgcmV0dXJuIHBhcnNlU1ZHU2VnbWVudFR5cGVIZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVy
MTYsIHBhdGhTZWdUeXBlKTsKKyAgICAgICAgcmV0dXJuIHBhcnNlU1ZHU2VnbWVudFR5cGVIZWxw
ZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyOCk7CisgICAgcmV0dXJuIHBhcnNlU1ZHU2VnbWVudFR5
cGVIZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYpOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBib29sIG5leHRDb21tYW5kSGVscGVyKGNvbnN0IENo
YXJhY3RlclR5cGUqJiBjdXJyZW50LCBTVkdQYXRoU2VnVHlwZSBwcmV2aW91c0NvbW1hbmQsIFNW
R1BhdGhTZWdUeXBlJiBuZXh0Q29tbWFuZCkKK09wdGlvbmFsPFNWR1BhdGhTb3VyY2U6Ok1vdmVU
b1NlZ21lbnQ+IFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlTW92ZVRvU2VnbWVudCgpCiB7Ci0g
ICAgLy8gQ2hlY2sgZm9yIHJlbWFpbmluZyBjb29yZGluYXRlcyBpbiB0aGUgY3VycmVudCBjb21t
YW5kLgotICAgIGlmICgoKmN1cnJlbnQgPT0gJysnIHx8ICpjdXJyZW50ID09ICctJyB8fCAqY3Vy
cmVudCA9PSAnLicgfHwgaXNBU0NJSURpZ2l0KCpjdXJyZW50KSkKLSAgICAgICAgJiYgcHJldmlv
dXNDb21tYW5kICE9IFBhdGhTZWdDbG9zZVBhdGgpIHsKLSAgICAgICAgaWYgKHByZXZpb3VzQ29t
bWFuZCA9PSBQYXRoU2VnTW92ZVRvQWJzKSB7Ci0gICAgICAgICAgICBuZXh0Q29tbWFuZCA9IFBh
dGhTZWdMaW5lVG9BYnM7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAg
ICAgICBpZiAocHJldmlvdXNDb21tYW5kID09IFBhdGhTZWdNb3ZlVG9SZWwpIHsKLSAgICAgICAg
ICAgIG5leHRDb21tYW5kID0gUGF0aFNlZ0xpbmVUb1JlbDsKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICB9Ci0gICAgICAgIG5leHRDb21tYW5kID0gcHJldmlvdXNDb21tYW5kOwot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9CisgICAgYXV0byBoZWxwZXIgPSBbXShjb25zdCBh
dXRvKiYgY3VycmVudCwgY29uc3QgYXV0byogZW5kKSAtPiBPcHRpb25hbDxNb3ZlVG9TZWdtZW50
PiB7CisgICAgICAgIGF1dG8gdGFyZ2V0UG9pbnQgPSBwYXJzZUZsb2F0UG9pbnQoY3VycmVudCwg
ZW5kKTsKKyAgICAgICAgaWYgKCF0YXJnZXRQb2ludCkKKyAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisgICAgICAgIAorICAgICAgICBNb3ZlVG9TZWdtZW50IHNlZ21lbnQ7CisgICAg
ICAgIHNlZ21lbnQudGFyZ2V0UG9pbnQgPSBXVEZNb3ZlKCp0YXJnZXRQb2ludCk7CisgICAgICAg
IHJldHVybiBzZWdtZW50OworICAgIH07CiAKLSAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1f
aXM4Qml0U291cmNlKQorICAgICAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3Rl
cjgsIG1fZW5kLm1fY2hhcmFjdGVyOCk7CisgICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9j
aGFyYWN0ZXIxNiwgbV9lbmQubV9jaGFyYWN0ZXIxNik7CiB9CiAKLVNWR1BhdGhTZWdUeXBlIFNW
R1BhdGhTdHJpbmdTb3VyY2U6Om5leHRDb21tYW5kKFNWR1BhdGhTZWdUeXBlIHByZXZpb3VzQ29t
bWFuZCkKK09wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkxpbmVUb1NlZ21lbnQ+IFNWR1BhdGhTdHJp
bmdTb3VyY2U6OnBhcnNlTGluZVRvU2VnbWVudCgpCiB7Ci0gICAgU1ZHUGF0aFNlZ1R5cGUgbmV4
dENvbW1hbmQ7Ci0gICAgaWYgKG1faXM4Qml0U291cmNlKSB7Ci0gICAgICAgIGlmIChuZXh0Q29t
bWFuZEhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXI4LCBwcmV2aW91c0NvbW1hbmQsIG5leHRD
b21tYW5kKSkKLSAgICAgICAgICAgIHJldHVybiBuZXh0Q29tbWFuZDsKLSAgICB9IGVsc2Ugewot
ICAgICAgICBpZiAobmV4dENvbW1hbmRIZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYsIHBy
ZXZpb3VzQ29tbWFuZCwgbmV4dENvbW1hbmQpKQotICAgICAgICAgICAgcmV0dXJuIG5leHRDb21t
YW5kOwotICAgIH0KKyAgICBhdXRvIGhlbHBlciA9IFtdKGNvbnN0IGF1dG8qJiBjdXJyZW50LCBj
b25zdCBhdXRvKiBlbmQpIC0+IE9wdGlvbmFsPExpbmVUb1NlZ21lbnQ+IHsKKyAgICAgICAgYXV0
byB0YXJnZXRQb2ludCA9IHBhcnNlRmxvYXRQb2ludChjdXJyZW50LCBlbmQpOworICAgICAgICBp
ZiAoIXRhcmdldFBvaW50KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAg
ICAgCisgICAgICAgIExpbmVUb1NlZ21lbnQgc2VnbWVudDsKKyAgICAgICAgc2VnbWVudC50YXJn
ZXRQb2ludCA9IFdURk1vdmUoKnRhcmdldFBvaW50KTsKKyAgICAgICAgcmV0dXJuIHNlZ21lbnQ7
CisgICAgfTsKIAotICAgIHBhcnNlU1ZHU2VnbWVudFR5cGUobmV4dENvbW1hbmQpOwotICAgIHJl
dHVybiBuZXh0Q29tbWFuZDsKLX0KLQotYm9vbCBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZU1v
dmVUb1NlZ21lbnQoRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCi17CiAgICAgaWYgKG1faXM4Qml0
U291cmNlKQotICAgICAgICByZXR1cm4gcGFyc2VGbG9hdFBvaW50KG1fY3VycmVudC5tX2NoYXJh
Y3RlcjgsIG1fZW5kLm1fY2hhcmFjdGVyOCwgdGFyZ2V0UG9pbnQpOwotICAgIHJldHVybiBwYXJz
ZUZsb2F0UG9pbnQobV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYsIG1fZW5kLm1fY2hhcmFjdGVyMTYs
IHRhcmdldFBvaW50KTsKKyAgICAgICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0
ZXI4LCBtX2VuZC5tX2NoYXJhY3RlcjgpOworICAgIHJldHVybiBoZWxwZXIobV9jdXJyZW50Lm1f
Y2hhcmFjdGVyMTYsIG1fZW5kLm1fY2hhcmFjdGVyMTYpOwogfQogCi1ib29sIFNWR1BhdGhTdHJp
bmdTb3VyY2U6OnBhcnNlTGluZVRvU2VnbWVudChGbG9hdFBvaW50JiB0YXJnZXRQb2ludCkKK09w
dGlvbmFsPFNWR1BhdGhTb3VyY2U6OkxpbmVUb0hvcml6b250YWxTZWdtZW50PiBTVkdQYXRoU3Ry
aW5nU291cmNlOjpwYXJzZUxpbmVUb0hvcml6b250YWxTZWdtZW50KCkKIHsKLSAgICBpZiAobV9p
czhCaXRTb3VyY2UpCi0gICAgICAgIHJldHVybiBwYXJzZUZsb2F0UG9pbnQobV9jdXJyZW50Lm1f
Y2hhcmFjdGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4LCB0YXJnZXRQb2ludCk7Ci0gICAgcmV0dXJu
IHBhcnNlRmxvYXRQb2ludChtX2N1cnJlbnQubV9jaGFyYWN0ZXIxNiwgbV9lbmQubV9jaGFyYWN0
ZXIxNiwgdGFyZ2V0UG9pbnQpOwotfQorICAgIGF1dG8gaGVscGVyID0gW10oY29uc3QgYXV0byom
IGN1cnJlbnQsIGNvbnN0IGF1dG8qIGVuZCkgLT4gT3B0aW9uYWw8TGluZVRvSG9yaXpvbnRhbFNl
Z21lbnQ+IHsKKyAgICAgICAgYXV0byB4ID0gcGFyc2VOdW1iZXIoY3VycmVudCwgZW5kKTsKKyAg
ICAgICAgaWYgKCF4KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAg
CisgICAgICAgIExpbmVUb0hvcml6b250YWxTZWdtZW50IHNlZ21lbnQ7CisgICAgICAgIHNlZ21l
bnQueCA9ICp4OworICAgICAgICByZXR1cm4gc2VnbWVudDsKKyAgICB9OwogCi1ib29sIFNWR1Bh
dGhTdHJpbmdTb3VyY2U6OnBhcnNlTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQoZmxvYXQmIHgpCi17
CiAgICAgaWYgKG1faXM4Qml0U291cmNlKQotICAgICAgICByZXR1cm4gcGFyc2VOdW1iZXIobV9j
dXJyZW50Lm1fY2hhcmFjdGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4LCB4KTsKLSAgICByZXR1cm4g
cGFyc2VOdW1iZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYsIG1fZW5kLm1fY2hhcmFjdGVyMTYs
IHgpOworICAgICAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjgsIG1fZW5k
Lm1fY2hhcmFjdGVyOCk7CisgICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXIx
NiwgbV9lbmQubV9jaGFyYWN0ZXIxNik7CiB9CiAKLWJvb2wgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6
cGFyc2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnQoZmxvYXQmIHkpCitPcHRpb25hbDxTVkdQYXRoU291
cmNlOjpMaW5lVG9WZXJ0aWNhbFNlZ21lbnQ+IFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlTGlu
ZVRvVmVydGljYWxTZWdtZW50KCkKIHsKKyAgICBhdXRvIGhlbHBlciA9IFtdKGNvbnN0IGF1dG8q
JiBjdXJyZW50LCBjb25zdCBhdXRvKiBlbmQpIC0+IE9wdGlvbmFsPExpbmVUb1ZlcnRpY2FsU2Vn
bWVudD4geworICAgICAgICBhdXRvIHkgPSBwYXJzZU51bWJlcihjdXJyZW50LCBlbmQpOworICAg
ICAgICBpZiAoIXkpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICAK
KyAgICAgICAgTGluZVRvVmVydGljYWxTZWdtZW50IHNlZ21lbnQ7CisgICAgICAgIHNlZ21lbnQu
eSA9ICp5OworICAgICAgICByZXR1cm4gc2VnbWVudDsKKyAgICB9OworCiAgICAgaWYgKG1faXM4
Qml0U291cmNlKQotICAgICAgICByZXR1cm4gcGFyc2VOdW1iZXIobV9jdXJyZW50Lm1fY2hhcmFj
dGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4LCB5KTsKLSAgICByZXR1cm4gcGFyc2VOdW1iZXIobV9j
dXJyZW50Lm1fY2hhcmFjdGVyMTYsIG1fZW5kLm1fY2hhcmFjdGVyMTYsIHkpOworICAgICAgICBy
ZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2NoYXJhY3RlcjgsIG1fZW5kLm1fY2hhcmFjdGVyOCk7
CisgICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXIxNiwgbV9lbmQubV9jaGFy
YWN0ZXIxNik7CiB9CiAKLWJvb2wgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VDdXJ2ZVRvQ3Vi
aWNTZWdtZW50KEZsb2F0UG9pbnQmIHBvaW50MSwgRmxvYXRQb2ludCYgcG9pbnQyLCBGbG9hdFBv
aW50JiB0YXJnZXRQb2ludCkKK09wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkN1cnZlVG9DdWJpY1Nl
Z21lbnQ+IFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlQ3VydmVUb0N1YmljU2VnbWVudCgpCiB7
CisgICAgYXV0byBoZWxwZXIgPSBbXShjb25zdCBhdXRvKiYgY3VycmVudCwgY29uc3QgYXV0byog
ZW5kKSAtPiBPcHRpb25hbDxDdXJ2ZVRvQ3ViaWNTZWdtZW50PiB7CisgICAgICAgIGF1dG8gcG9p
bnQxID0gcGFyc2VGbG9hdFBvaW50KGN1cnJlbnQsIGVuZCk7CisgICAgICAgIGlmICghcG9pbnQx
KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgICAgICBhdXRvIHBvaW50
MiA9IHBhcnNlRmxvYXRQb2ludChjdXJyZW50LCBlbmQpOworICAgICAgICBpZiAoIXBvaW50MikK
KyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICAgICAgYXV0byB0YXJnZXRQ
b2ludCA9IHBhcnNlRmxvYXRQb2ludChjdXJyZW50LCBlbmQpOworICAgICAgICBpZiAoIXRhcmdl
dFBvaW50KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgICAgICBDdXJ2
ZVRvQ3ViaWNTZWdtZW50IHNlZ21lbnQ7CisgICAgICAgIHNlZ21lbnQucG9pbnQxID0gKnBvaW50
MTsKKyAgICAgICAgc2VnbWVudC5wb2ludDIgPSAqcG9pbnQyOworICAgICAgICBzZWdtZW50LnRh
cmdldFBvaW50ID0gKnRhcmdldFBvaW50OworICAgICAgICByZXR1cm4gc2VnbWVudDsKKyAgICB9
OworCiAgICAgaWYgKG1faXM4Qml0U291cmNlKQotICAgICAgICByZXR1cm4gcGFyc2VGbG9hdFBv
aW50MyhtX2N1cnJlbnQubV9jaGFyYWN0ZXI4LCBtX2VuZC5tX2NoYXJhY3RlcjgsIHBvaW50MSwg
cG9pbnQyLCB0YXJnZXRQb2ludCk7Ci0gICAgcmV0dXJuIHBhcnNlRmxvYXRQb2ludDMobV9jdXJy
ZW50Lm1fY2hhcmFjdGVyMTYsIG1fZW5kLm1fY2hhcmFjdGVyMTYsIHBvaW50MSwgcG9pbnQyLCB0
YXJnZXRQb2ludCk7CisgICAgICAgIHJldHVybiBoZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVy
OCwgbV9lbmQubV9jaGFyYWN0ZXI4KTsKKyAgICByZXR1cm4gaGVscGVyKG1fY3VycmVudC5tX2No
YXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2KTsKIH0KIAotYm9vbCBTVkdQYXRoU3RyaW5n
U291cmNlOjpwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQoRmxvYXRQb2ludCYgcG9pbnQx
LCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCkKK09wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkN1cnZl
VG9DdWJpY1Ntb290aFNlZ21lbnQ+IFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlQ3VydmVUb0N1
YmljU21vb3RoU2VnbWVudCgpCiB7CisgICAgYXV0byBoZWxwZXIgPSBbXShjb25zdCBhdXRvKiYg
Y3VycmVudCwgY29uc3QgYXV0byogZW5kKSAtPiBPcHRpb25hbDxDdXJ2ZVRvQ3ViaWNTbW9vdGhT
ZWdtZW50PiB7CisgICAgICAgIGF1dG8gcG9pbnQyID0gcGFyc2VGbG9hdFBvaW50KGN1cnJlbnQs
IGVuZCk7CisgICAgICAgIGlmICghcG9pbnQyKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKworICAgICAgICBhdXRvIHRhcmdldFBvaW50ID0gcGFyc2VGbG9hdFBvaW50KGN1cnJl
bnQsIGVuZCk7CisgICAgICAgIGlmICghdGFyZ2V0UG9pbnQpCisgICAgICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworCisgICAgICAgIEN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQgc2VnbWVu
dDsKKyAgICAgICAgc2VnbWVudC5wb2ludDIgPSAqcG9pbnQyOworICAgICAgICBzZWdtZW50LnRh
cmdldFBvaW50ID0gKnRhcmdldFBvaW50OworICAgICAgICByZXR1cm4gc2VnbWVudDsKKyAgICB9
OworCiAgICAgaWYgKG1faXM4Qml0U291cmNlKQotICAgICAgICByZXR1cm4gcGFyc2VGbG9hdFBv
aW50MihtX2N1cnJlbnQubV9jaGFyYWN0ZXI4LCBtX2VuZC5tX2NoYXJhY3RlcjgsIHBvaW50MSwg
dGFyZ2V0UG9pbnQpOwotICAgIHJldHVybiBwYXJzZUZsb2F0UG9pbnQyKG1fY3VycmVudC5tX2No
YXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2LCBwb2ludDEsIHRhcmdldFBvaW50KTsKKyAg
ICAgICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9jaGFyYWN0ZXI4LCBtX2VuZC5tX2NoYXJh
Y3RlcjgpOworICAgIHJldHVybiBoZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYsIG1fZW5k
Lm1fY2hhcmFjdGVyMTYpOwogfQogCi1ib29sIFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlQ3Vy
dmVUb1F1YWRyYXRpY1NlZ21lbnQoRmxvYXRQb2ludCYgcG9pbnQyLCBGbG9hdFBvaW50JiB0YXJn
ZXRQb2ludCkKK09wdGlvbmFsPFNWR1BhdGhTb3VyY2U6OkN1cnZlVG9RdWFkcmF0aWNTZWdtZW50
PiBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KCkKIHsK
KyAgICBhdXRvIGhlbHBlciA9IFtdKGNvbnN0IGF1dG8qJiBjdXJyZW50LCBjb25zdCBhdXRvKiBl
bmQpIC0+IE9wdGlvbmFsPEN1cnZlVG9RdWFkcmF0aWNTZWdtZW50PiB7CisgICAgICAgIGF1dG8g
cG9pbnQxID0gcGFyc2VGbG9hdFBvaW50KGN1cnJlbnQsIGVuZCk7CisgICAgICAgIGlmICghcG9p
bnQxKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgICAgICBhdXRvIHRh
cmdldFBvaW50ID0gcGFyc2VGbG9hdFBvaW50KGN1cnJlbnQsIGVuZCk7CisgICAgICAgIGlmICgh
dGFyZ2V0UG9pbnQpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgICAg
IEN1cnZlVG9RdWFkcmF0aWNTZWdtZW50IHNlZ21lbnQ7CisgICAgICAgIHNlZ21lbnQucG9pbnQx
ID0gKnBvaW50MTsKKyAgICAgICAgc2VnbWVudC50YXJnZXRQb2ludCA9ICp0YXJnZXRQb2ludDsK
KyAgICAgICAgcmV0dXJuIHNlZ21lbnQ7CisgICAgfTsKKwogICAgIGlmIChtX2lzOEJpdFNvdXJj
ZSkKLSAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXRQb2ludDIobV9jdXJyZW50Lm1fY2hhcmFjdGVy
OCwgbV9lbmQubV9jaGFyYWN0ZXI4LCBwb2ludDIsIHRhcmdldFBvaW50KTsKLSAgICByZXR1cm4g
cGFyc2VGbG9hdFBvaW50MihtX2N1cnJlbnQubV9jaGFyYWN0ZXIxNiwgbV9lbmQubV9jaGFyYWN0
ZXIxNiwgcG9pbnQyLCB0YXJnZXRQb2ludCk7CisgICAgICAgIHJldHVybiBoZWxwZXIobV9jdXJy
ZW50Lm1fY2hhcmFjdGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4KTsKKyAgICByZXR1cm4gaGVscGVy
KG1fY3VycmVudC5tX2NoYXJhY3RlcjE2LCBtX2VuZC5tX2NoYXJhY3RlcjE2KTsKIH0KIAotYm9v
bCBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50
KEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQorT3B0aW9uYWw8U1ZHUGF0aFNvdXJjZTo6Q3VydmVU
b1F1YWRyYXRpY1Ntb290aFNlZ21lbnQ+IFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlQ3VydmVU
b1F1YWRyYXRpY1Ntb290aFNlZ21lbnQoKQogeworICAgIGF1dG8gaGVscGVyID0gW10oY29uc3Qg
YXV0byomIGN1cnJlbnQsIGNvbnN0IGF1dG8qIGVuZCkgLT4gT3B0aW9uYWw8Q3VydmVUb1F1YWRy
YXRpY1Ntb290aFNlZ21lbnQ+IHsKKyAgICAgICAgYXV0byB0YXJnZXRQb2ludCA9IHBhcnNlRmxv
YXRQb2ludChjdXJyZW50LCBlbmQpOworICAgICAgICBpZiAoIXRhcmdldFBvaW50KQorICAgICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgICAgICBDdXJ2ZVRvUXVhZHJhdGljU21v
b3RoU2VnbWVudCBzZWdtZW50OworICAgICAgICBzZWdtZW50LnRhcmdldFBvaW50ID0gKnRhcmdl
dFBvaW50OworICAgICAgICByZXR1cm4gc2VnbWVudDsKKyAgICB9OworCiAgICAgaWYgKG1faXM4
Qml0U291cmNlKQotICAgICAgICByZXR1cm4gcGFyc2VGbG9hdFBvaW50KG1fY3VycmVudC5tX2No
YXJhY3RlcjgsIG1fZW5kLm1fY2hhcmFjdGVyOCwgdGFyZ2V0UG9pbnQpOwotICAgIHJldHVybiBw
YXJzZUZsb2F0UG9pbnQobV9jdXJyZW50Lm1fY2hhcmFjdGVyMTYsIG1fZW5kLm1fY2hhcmFjdGVy
MTYsIHRhcmdldFBvaW50KTsKKyAgICAgICAgcmV0dXJuIGhlbHBlcihtX2N1cnJlbnQubV9jaGFy
YWN0ZXI4LCBtX2VuZC5tX2NoYXJhY3RlcjgpOworICAgIHJldHVybiBoZWxwZXIobV9jdXJyZW50
Lm1fY2hhcmFjdGVyMTYsIG1fZW5kLm1fY2hhcmFjdGVyMTYpOwogfQogCi10ZW1wbGF0ZSA8dHlw
ZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBib29sIHBhcnNlQXJjVG9TZWdtZW50SGVscGVy
KGNvbnN0IENoYXJhY3RlclR5cGUqJiBjdXJyZW50LCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQs
IGZsb2F0JiByeCwgZmxvYXQmIHJ5LCBmbG9hdCYgYW5nbGUsIGJvb2wmIGxhcmdlQXJjLCBib29s
JiBzd2VlcCwgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCitPcHRpb25hbDxTVkdQYXRoU291cmNl
OjpBcmNUb1NlZ21lbnQ+IFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlQXJjVG9TZWdtZW50KCkK
IHsKLSAgICBmbG9hdCB0b1g7Ci0gICAgZmxvYXQgdG9ZOwotICAgIGlmICghcGFyc2VOdW1iZXIo
Y3VycmVudCwgZW5kLCByeCkKLSAgICAgICAgfHwgIXBhcnNlTnVtYmVyKGN1cnJlbnQsIGVuZCwg
cnkpCi0gICAgICAgIHx8ICFwYXJzZU51bWJlcihjdXJyZW50LCBlbmQsIGFuZ2xlKQotICAgICAg
ICB8fCAhcGFyc2VBcmNGbGFnKGN1cnJlbnQsIGVuZCwgbGFyZ2VBcmMpCi0gICAgICAgIHx8ICFw
YXJzZUFyY0ZsYWcoY3VycmVudCwgZW5kLCBzd2VlcCkKLSAgICAgICAgfHwgIXBhcnNlTnVtYmVy
KGN1cnJlbnQsIGVuZCwgdG9YKQotICAgICAgICB8fCAhcGFyc2VOdW1iZXIoY3VycmVudCwgZW5k
LCB0b1kpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgdGFyZ2V0UG9pbnQgPSBGbG9hdFBv
aW50KHRvWCwgdG9ZKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KKyAgICBhdXRvIGhlbHBlciA9IFtd
KGNvbnN0IGF1dG8qJiBjdXJyZW50LCBjb25zdCBhdXRvKiBlbmQpIC0+IE9wdGlvbmFsPEFyY1Rv
U2VnbWVudD4geworICAgICAgICBhdXRvIHJ4ID0gcGFyc2VOdW1iZXIoY3VycmVudCwgZW5kKTsK
KyAgICAgICAgaWYgKCFyeCkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAg
ICAgIGF1dG8gcnkgPSBwYXJzZU51bWJlcihjdXJyZW50LCBlbmQpOworICAgICAgICBpZiAoIXJ5
KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgYXV0byBhbmdsZSA9
IHBhcnNlTnVtYmVyKGN1cnJlbnQsIGVuZCk7CisgICAgICAgIGlmICghYW5nbGUpCisgICAgICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBhdXRvIGxhcmdlQXJjID0gcGFyc2VB
cmNGbGFnKGN1cnJlbnQsIGVuZCk7CisgICAgICAgIGlmICghbGFyZ2VBcmMpCisgICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBhdXRvIHN3ZWVwID0gcGFyc2VBcmNGbGFn
KGN1cnJlbnQsIGVuZCk7CisgICAgICAgIGlmICghc3dlZXApCisgICAgICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworICAgICAgICBhdXRvIHRhcmdldFBvaW50ID0gcGFyc2VGbG9hdFBvaW50
KGN1cnJlbnQsIGVuZCk7CisgICAgICAgIGlmICghdGFyZ2V0UG9pbnQpCisgICAgICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgICAgIEFyY1RvU2VnbWVudCBzZWdtZW50OworICAg
ICAgICBzZWdtZW50LnJ4ID0gKnJ4OworICAgICAgICBzZWdtZW50LnJ5ID0gKnJ5OworICAgICAg
ICBzZWdtZW50LmFuZ2xlID0gKmFuZ2xlOworICAgICAgICBzZWdtZW50LmxhcmdlQXJjID0gKmxh
cmdlQXJjOworICAgICAgICBzZWdtZW50LnN3ZWVwID0gKnN3ZWVwOworICAgICAgICBzZWdtZW50
LnRhcmdldFBvaW50ID0gKnRhcmdldFBvaW50OworICAgICAgICByZXR1cm4gc2VnbWVudDsKKyAg
ICB9OwogCi1ib29sIFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlQXJjVG9TZWdtZW50KGZsb2F0
JiByeCwgZmxvYXQmIHJ5LCBmbG9hdCYgYW5nbGUsIGJvb2wmIGxhcmdlQXJjLCBib29sJiBzd2Vl
cCwgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCi17CiAgICAgaWYgKG1faXM4Qml0U291cmNlKQot
ICAgICAgICByZXR1cm4gcGFyc2VBcmNUb1NlZ21lbnRIZWxwZXIobV9jdXJyZW50Lm1fY2hhcmFj
dGVyOCwgbV9lbmQubV9jaGFyYWN0ZXI4LCByeCwgcnksIGFuZ2xlLCBsYXJnZUFyYywgc3dlZXAs
IHRhcmdldFBvaW50KTsKLSAgICByZXR1cm4gcGFyc2VBcmNUb1NlZ21lbnRIZWxwZXIobV9jdXJy
ZW50Lm1fY2hhcmFjdGVyMTYsIG1fZW5kLm1fY2hhcmFjdGVyMTYsIHJ4LCByeSwgYW5nbGUsIGxh
cmdlQXJjLCBzd2VlcCwgdGFyZ2V0UG9pbnQpOworICAgICAgICByZXR1cm4gaGVscGVyKG1fY3Vy
cmVudC5tX2NoYXJhY3RlcjgsIG1fZW5kLm1fY2hhcmFjdGVyOCk7CisgICAgcmV0dXJuIGhlbHBl
cihtX2N1cnJlbnQubV9jaGFyYWN0ZXIxNiwgbV9lbmQubV9jaGFyYWN0ZXIxNik7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTdHJp
bmdTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFN0cmlu
Z1NvdXJjZS5oCShyZXZpc2lvbiAyNjMzMzMpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0
aFN0cmluZ1NvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxOCArMzIsMTggQEAgcHVibGlj
OgogcHJpdmF0ZToKICAgICBib29sIGhhc01vcmVEYXRhKCkgY29uc3QgZmluYWw7CiAgICAgYm9v
bCBtb3ZlVG9OZXh0VG9rZW4oKSBmaW5hbDsKLSAgICBib29sIHBhcnNlU1ZHU2VnbWVudFR5cGUo
U1ZHUGF0aFNlZ1R5cGUmKSBmaW5hbDsKICAgICBTVkdQYXRoU2VnVHlwZSBuZXh0Q29tbWFuZChT
VkdQYXRoU2VnVHlwZSBwcmV2aW91c0NvbW1hbmQpIGZpbmFsOwogCi0gICAgYm9vbCBwYXJzZU1v
dmVUb1NlZ21lbnQoRmxvYXRQb2ludCYpIGZpbmFsOwotICAgIGJvb2wgcGFyc2VMaW5lVG9TZWdt
ZW50KEZsb2F0UG9pbnQmKSBmaW5hbDsKLSAgICBib29sIHBhcnNlTGluZVRvSG9yaXpvbnRhbFNl
Z21lbnQoZmxvYXQmKSBmaW5hbDsKLSAgICBib29sIHBhcnNlTGluZVRvVmVydGljYWxTZWdtZW50
KGZsb2F0JikgZmluYWw7Ci0gICAgYm9vbCBwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQoRmxvYXRQ
b2ludCYsIEZsb2F0UG9pbnQmLCBGbG9hdFBvaW50JikgZmluYWw7Ci0gICAgYm9vbCBwYXJzZUN1
cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQoRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmKSBmaW5hbDsK
LSAgICBib29sIHBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQoRmxvYXRQb2ludCYsIEZsb2F0
UG9pbnQmKSBmaW5hbDsKLSAgICBib29sIHBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21l
bnQoRmxvYXRQb2ludCYpIGZpbmFsOwotICAgIGJvb2wgcGFyc2VBcmNUb1NlZ21lbnQoZmxvYXQm
LCBmbG9hdCYsIGZsb2F0JiwgYm9vbCYsIGJvb2wmLCBGbG9hdFBvaW50JikgZmluYWw7CisgICAg
T3B0aW9uYWw8U1ZHUGF0aFNlZ1R5cGU+IHBhcnNlU1ZHU2VnbWVudFR5cGUoKSBmaW5hbDsKKyAg
ICBPcHRpb25hbDxNb3ZlVG9TZWdtZW50PiBwYXJzZU1vdmVUb1NlZ21lbnQoKSBmaW5hbDsKKyAg
ICBPcHRpb25hbDxMaW5lVG9TZWdtZW50PiBwYXJzZUxpbmVUb1NlZ21lbnQoKSBmaW5hbDsKKyAg
ICBPcHRpb25hbDxMaW5lVG9Ib3Jpem9udGFsU2VnbWVudD4gcGFyc2VMaW5lVG9Ib3Jpem9udGFs
U2VnbWVudCgpIGZpbmFsOworICAgIE9wdGlvbmFsPExpbmVUb1ZlcnRpY2FsU2VnbWVudD4gcGFy
c2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnQoKSBmaW5hbDsKKyAgICBPcHRpb25hbDxDdXJ2ZVRvQ3Vi
aWNTZWdtZW50PiBwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQoKSBmaW5hbDsKKyAgICBPcHRpb25h
bDxDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50PiBwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21l
bnQoKSBmaW5hbDsKKyAgICBPcHRpb25hbDxDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudD4gcGFyc2VD
dXJ2ZVRvUXVhZHJhdGljU2VnbWVudCgpIGZpbmFsOworICAgIE9wdGlvbmFsPEN1cnZlVG9RdWFk
cmF0aWNTbW9vdGhTZWdtZW50PiBwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KCkg
ZmluYWw7CisgICAgT3B0aW9uYWw8QXJjVG9TZWdtZW50PiBwYXJzZUFyY1RvU2VnbWVudCgpIGZp
bmFsOwogCiAgICAgU3RyaW5nIG1fc3RyaW5nOwogICAgIGJvb2wgbV9pczhCaXRTb3VyY2U7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9pbnRMaXN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1BvaW50TGlzdC5oCShyZXZpc2lvbiAyNjMzMzMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHUG9pbnRMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDEyICs2
MywxMyBAQCBwdWJsaWM6CiAgICAgICAgIGJvb2wgZGVsaW1QYXJzZWQgPSBmYWxzZTsKICAgICAg
ICAgd2hpbGUgKGN1ciA8IGVuZCkgewogICAgICAgICAgICAgZGVsaW1QYXJzZWQgPSBmYWxzZTsK
LSAgICAgICAgICAgIGZsb2F0IHhQb3MgPSAwLjBmOwotICAgICAgICAgICAgaWYgKCFwYXJzZU51
bWJlcihjdXIsIGVuZCwgeFBvcykpCisKKyAgICAgICAgICAgIGF1dG8geFBvcyA9IHBhcnNlTnVt
YmVyKGN1ciwgZW5kKTsKKyAgICAgICAgICAgIGlmICgheFBvcykKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIGZsb2F0IHlQb3MgPSAwLjBmOwotICAgICAgICAg
ICAgaWYgKCFwYXJzZU51bWJlcihjdXIsIGVuZCwgeVBvcywgZmFsc2UpKQorICAgICAgICAgICAg
YXV0byB5UG9zID0gcGFyc2VOdW1iZXIoY3VyLCBlbmQsIFN1ZmZpeFNraXBwaW5nUG9saWN5OjpE
b250U2tpcCk7CisgICAgICAgICAgICBpZiAoIXlQb3MpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgICAgICAgICBza2lwT3B0aW9uYWxTVkdTcGFjZXMoY3VyLCBlbmQpOwpA
QCAtNzksNyArODAsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBza2lw
T3B0aW9uYWxTVkdTcGFjZXMoY3VyLCBlbmQpOwogCi0gICAgICAgICAgICBhcHBlbmQoU1ZHUG9p
bnQ6OmNyZWF0ZSh7IHhQb3MsIHlQb3MgfSkpOworICAgICAgICAgICAgYXBwZW5kKFNWR1BvaW50
OjpjcmVhdGUoeyAqeFBvcywgKnlQb3MgfSkpOwogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJu
ICFkZWxpbVBhcnNlZDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUb09URkZvbnRDb252
ZXJzaW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVG9PVEZGb250
Q29udmVyc2lvbi5jcHAJKHJldmlzaW9uIDI2MzMzMykKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdUb09URkZvbnRDb252ZXJzaW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI5LDggKzIyOSw4
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBhZGRDb2RlcG9pbnRSYW5nZXMoY29uc3QgVW5pY29kZVJh
bmdlcyYsIEhhc2hTZXQ8R2x5cGg+JiBnbHlwaFNldCkgY29uc3Q7CiAgICAgdm9pZCBhZGRDb2Rl
cG9pbnRzKGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgY29kZXBvaW50cywgSGFzaFNldDxHbHlwaD4m
IGdseXBoU2V0KSBjb25zdDsKICAgICB2b2lkIGFkZEdseXBoTmFtZXMoY29uc3QgSGFzaFNldDxT
dHJpbmc+JiBnbHlwaE5hbWVzLCBIYXNoU2V0PEdseXBoPiYgZ2x5cGhTZXQpIGNvbnN0OwotICAg
IHZvaWQgYWRkS2VybmluZ1BhaXIoVmVjdG9yPEtlcm5pbmdEYXRhPiYsIGNvbnN0IFNWR0tlcm5p
bmdQYWlyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc2l6ZV90IGFwcGVuZEtF
Uk5TdWJ0YWJsZShib29sIChUOjoqYnVpbGRLZXJuaW5nUGFpcikoU1ZHS2VybmluZ1BhaXImKSBj
b25zdCwgdWludDE2X3QgY292ZXJhZ2UpOworICAgIHZvaWQgYWRkS2VybmluZ1BhaXIoVmVjdG9y
PEtlcm5pbmdEYXRhPiYsIFNWR0tlcm5pbmdQYWlyJiYpIGNvbnN0OworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IHNpemVfdCBhcHBlbmRLRVJOU3VidGFibGUoT3B0aW9uYWw8U1ZHS2VybmluZ1Bh
aXI+IChUOjoqYnVpbGRLZXJuaW5nUGFpcikoKSBjb25zdCwgdWludDE2X3QgY292ZXJhZ2UpOwog
ICAgIHNpemVfdCBmaW5pc2hBcHBlbmRpbmdLRVJOU3VidGFibGUoVmVjdG9yPEtlcm5pbmdEYXRh
PiwgdWludDE2X3QgY292ZXJhZ2UpOwogCiAgICAgdm9pZCBhcHBlbmRMaWdhdHVyZVN1YnRhYmxl
KHNpemVfdCBzdWJ0YWJsZVJlY29yZExvY2F0aW9uKTsKQEAgLTEwNDAsNyArMTA0MCw3IEBAIHZv
aWQgU1ZHVG9PVEZGb250Q29udmVydGVyOjphZGRHbHlwaE5hbWUKICAgICB9CiB9CiAKLXZvaWQg
U1ZHVG9PVEZGb250Q29udmVydGVyOjphZGRLZXJuaW5nUGFpcihWZWN0b3I8S2VybmluZ0RhdGE+
JiBkYXRhLCBjb25zdCBTVkdLZXJuaW5nUGFpciYga2VybmluZ1BhaXIpIGNvbnN0Cit2b2lkIFNW
R1RvT1RGRm9udENvbnZlcnRlcjo6YWRkS2VybmluZ1BhaXIoVmVjdG9yPEtlcm5pbmdEYXRhPiYg
ZGF0YSwgU1ZHS2VybmluZ1BhaXImJiBrZXJuaW5nUGFpcikgY29uc3QKIHsKICAgICBIYXNoU2V0
PEdseXBoPiBnbHlwaFNldDE7CiAgICAgSGFzaFNldDxHbHlwaD4gZ2x5cGhTZXQyOwpAQCAtMTA1
OSwxMyArMTA1OSwxMiBAQCB2b2lkIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6YWRkS2VybmluZ1Bh
CiAgICAgfQogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgc2l6ZV90IFNWR1RvT1RG
Rm9udENvbnZlcnRlcjo6YXBwZW5kS0VSTlN1YnRhYmxlKGJvb2wgKFQ6OipidWlsZEtlcm5pbmdQ
YWlyKShTVkdLZXJuaW5nUGFpciYpIGNvbnN0LCB1aW50MTZfdCBjb3ZlcmFnZSkKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IGlubGluZSBzaXplX3QgU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRL
RVJOU3VidGFibGUoT3B0aW9uYWw8U1ZHS2VybmluZ1BhaXI+IChUOjoqYnVpbGRLZXJuaW5nUGFp
cikoKSBjb25zdCwgdWludDE2X3QgY292ZXJhZ2UpCiB7CiAgICAgVmVjdG9yPEtlcm5pbmdEYXRh
PiBrZXJuaW5nRGF0YTsKICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBjaGlsZHJlbk9mVHlwZTxU
PihtX2ZvbnRFbGVtZW50KSkgewotICAgICAgICBTVkdLZXJuaW5nUGFpciBrZXJuaW5nUGFpcjsK
LSAgICAgICAgaWYgKChlbGVtZW50LipidWlsZEtlcm5pbmdQYWlyKShrZXJuaW5nUGFpcikpCi0g
ICAgICAgICAgICBhZGRLZXJuaW5nUGFpcihrZXJuaW5nRGF0YSwga2VybmluZ1BhaXIpOworICAg
ICAgICBpZiAoYXV0byBrZXJuaW5nUGFpciA9IChlbGVtZW50LipidWlsZEtlcm5pbmdQYWlyKSgp
KQorICAgICAgICAgICAgYWRkS2VybmluZ1BhaXIoa2VybmluZ0RhdGEsIFdURk1vdmUoKmtlcm5p
bmdQYWlyKSk7CiAgICAgfQogICAgIHJldHVybiBmaW5pc2hBcHBlbmRpbmdLRVJOU3VidGFibGUo
V1RGTW92ZShrZXJuaW5nRGF0YSksIGNvdmVyYWdlKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdUcmFuc2Zvcm1MaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1RyYW5zZm9ybUxpc3QuaAkocmV2aXNpb24gMjYzMzMzKQorKysgU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1RyYW5zZm9ybUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDE3ICsxMTQsMTgg
QEAgcHJpdmF0ZToKICAgICAgICAgYm9vbCBkZWxpbVBhcnNlZCA9IGZhbHNlOwogICAgICAgICB3
aGlsZSAoc3RhcnQgPCBlbmQpIHsKICAgICAgICAgICAgIGRlbGltUGFyc2VkID0gZmFsc2U7Ci0g
ICAgICAgICAgICBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZSB0eXBlID0gU1ZH
VHJhbnNmb3JtVmFsdWU6OlNWR19UUkFOU0ZPUk1fVU5LTk9XTjsKICAgICAgICAgICAgIHNraXBP
cHRpb25hbFNWR1NwYWNlcyhzdGFydCwgZW5kKTsKLQotICAgICAgICAgICAgaWYgKCFTVkdUcmFu
c2Zvcm1hYmxlOjpwYXJzZUFuZFNraXBUeXBlKHN0YXJ0LCBlbmQsIHR5cGUpKQorICAgICAgICAg
ICAgCisgICAgICAgICAgICBhdXRvIHR5cGUgPSBTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZUFuZFNr
aXBUeXBlKHN0YXJ0LCBlbmQpOworICAgICAgICAgICAgaWYgKCF0eXBlKQogICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgUmVmPFNWR1RyYW5zZm9ybT4gdHJhbnNm
b3JtID0gU1ZHVHJhbnNmb3JtOjpjcmVhdGUodHlwZSk7Ci0gICAgICAgICAgICBpZiAoIVNWR1Ry
YW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtVmFsdWUodHlwZSwgc3RhcnQsIGVuZCwgdHJhbnNm
b3JtLT52YWx1ZSgpKSkKKyAgICAgICAgICAgIGF1dG8gcGFyc2VkVHJhbnNmb3JtVmFsdWUgPSBT
VkdUcmFuc2Zvcm1hYmxlOjpwYXJzZVRyYW5zZm9ybVZhbHVlKCp0eXBlLCBzdGFydCwgZW5kKTsK
KyAgICAgICAgICAgIGlmICghcGFyc2VkVHJhbnNmb3JtVmFsdWUpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICBhcHBlbmQoV1RGTW92ZSh0cmFuc2Zvcm0pKTsK
KyAgICAgICAgICAgIGFwcGVuZChTVkdUcmFuc2Zvcm06OmNyZWF0ZSgqcGFyc2VkVHJhbnNmb3Jt
VmFsdWUpKTsKKwogICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKHN0YXJ0LCBlbmQp
OwogICAgICAgICAgICAgaWYgKHN0YXJ0IDwgZW5kICYmICpzdGFydCA9PSAnLCcpIHsKICAgICAg
ICAgICAgICAgICBkZWxpbVBhcnNlZCA9IHRydWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHVHJhbnNmb3JtYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1RyYW5zZm9ybWFibGUuY3BwCShyZXZpc2lvbiAyNjMzMzMpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHVHJhbnNmb3JtYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDggKzQzLDEyIEBA
IHN0YXRpYyBpbnQgcGFyc2VUcmFuc2Zvcm1QYXJhbUxpc3QoY29uc3QKICAgICBza2lwT3B0aW9u
YWxTVkdTcGFjZXMocHRyLCBlbmQpOwogCiAgICAgd2hpbGUgKHJlcXVpcmVkUGFyYW1zIDwgcmVx
dWlyZWQpIHsKLSAgICAgICAgaWYgKHB0ciA+PSBlbmQgfHwgIXBhcnNlTnVtYmVyKHB0ciwgZW5k
LCB2YWx1ZXNbcmVxdWlyZWRQYXJhbXNdLCBmYWxzZSkpCisgICAgICAgIGlmIChwdHIgPj0gZW5k
KQogICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBhdXRvIHBhcnNlZE51bWJlciA9IHBh
cnNlTnVtYmVyKHB0ciwgZW5kLCBTdWZmaXhTa2lwcGluZ1BvbGljeTo6RG9udFNraXApOworICAg
ICAgICBpZiAoIXBhcnNlZE51bWJlcikKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAg
dmFsdWVzW3JlcXVpcmVkUGFyYW1zXSA9ICpwYXJzZWROdW1iZXI7CiAgICAgICAgIHJlcXVpcmVk
UGFyYW1zKys7CiAgICAgICAgIGlmIChyZXF1aXJlZFBhcmFtcyA8IHJlcXVpcmVkKQogICAgICAg
ICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2VzT3JEZWxpbWl0ZXIocHRyLCBlbmQpOwpAQCAtNjMs
OCArNjcsMTIgQEAgc3RhdGljIGludCBwYXJzZVRyYW5zZm9ybVBhcmFtTGlzdChjb25zdAogICAg
ICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHdoaWxlIChvcHRpb25h
bFBhcmFtcyA8IG9wdGlvbmFsKSB7Ci0gICAgICAgICAgICBpZiAocHRyID49IGVuZCB8fCAhcGFy
c2VOdW1iZXIocHRyLCBlbmQsIHZhbHVlc1tyZXF1aXJlZFBhcmFtcyArIG9wdGlvbmFsUGFyYW1z
XSwgZmFsc2UpKQorICAgICAgICAgICAgaWYgKHB0ciA+PSBlbmQpCisgICAgICAgICAgICAgICAg
cmV0dXJuIC0xOworICAgICAgICAgICAgYXV0byBwYXJzZWROdW1iZXIgPSBwYXJzZU51bWJlcihw
dHIsIGVuZCwgU3VmZml4U2tpcHBpbmdQb2xpY3k6OkRvbnRTa2lwKTsKKyAgICAgICAgICAgIGlm
ICghcGFyc2VkTnVtYmVyKQogICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAg
IHZhbHVlc1tyZXF1aXJlZFBhcmFtcyArIG9wdGlvbmFsUGFyYW1zXSA9ICpwYXJzZWROdW1iZXI7
CiAgICAgICAgICAgICBvcHRpb25hbFBhcmFtcysrOwogICAgICAgICAgICAgaWYgKG9wdGlvbmFs
UGFyYW1zIDwgb3B0aW9uYWwpCiAgICAgICAgICAgICAgICAgc2tpcE9wdGlvbmFsU1ZHU3BhY2Vz
T3JEZWxpbWl0ZXIocHRyLCBlbmQpOwpAQCAtOTAsMTYgKzk4LDE3IEBAIHN0YXRpYyBjb25zdCBp
bnQgb3B0aW9uYWxWYWx1ZXNGb3JUeXBlW10KIC8vIFRoaXMgZGVzdHJ1Y3RvciBpcyBuZWVkZWQg
aW4gb3JkZXIgdG8gbGluayBjb3JyZWN0bHkgd2l0aCBJbnRlbCBJQ0MuCiBTVkdUcmFuc2Zvcm1h
YmxlOjp+U1ZHVHJhbnNmb3JtYWJsZSgpID0gZGVmYXVsdDsKIAotYm9vbCBTVkdUcmFuc2Zvcm1h
YmxlOjpwYXJzZVRyYW5zZm9ybVZhbHVlKFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1U
eXBlIHR5cGUsIGNvbnN0IFVDaGFyKiYgcHRyLCBjb25zdCBVQ2hhciogZW5kLCBTVkdUcmFuc2Zv
cm1WYWx1ZSYgdHJhbnNmb3JtKQorT3B0aW9uYWw8U1ZHVHJhbnNmb3JtVmFsdWU+IFNWR1RyYW5z
Zm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtVmFsdWUoU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5z
Zm9ybVR5cGUgdHlwZSwgY29uc3QgVUNoYXIqJiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQpCiB7CiAg
ICAgaWYgKHR5cGUgPT0gU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR19UUkFOU0ZPUk1fVU5LTk9XTikK
LSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAg
ICAgaW50IHZhbHVlQ291bnQgPSAwOwogICAgIGZsb2F0IHZhbHVlc1tdID0gezAsIDAsIDAsIDAs
IDAsIDB9OwogICAgIGlmICgodmFsdWVDb3VudCA9IHBhcnNlVHJhbnNmb3JtUGFyYW1MaXN0KHB0
ciwgZW5kLCB2YWx1ZXMsIHJlcXVpcmVkVmFsdWVzRm9yVHlwZVt0eXBlXSwgb3B0aW9uYWxWYWx1
ZXNGb3JUeXBlW3R5cGVdKSkgPCAwKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiAKKyAgICBTVkdUcmFuc2Zvcm1WYWx1ZSB0cmFuc2Zvcm07CiAg
ICAgc3dpdGNoICh0eXBlKSB7CiAgICAgY2FzZSBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RSQU5T
Rk9STV9VTktOT1dOOgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTEzMyw3ICsx
NDIsNyBAQCBib29sIFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtVmFsCiAgICAgICAg
IGJyZWFrOwogICAgIH0KIAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiB0cmFuc2Zvcm07
CiB9CiAKIHN0YXRpYyBjb25zdCBVQ2hhciBza2V3WERlc2NbXSA9ICB7J3MnLCAnaycsICdlJywg
J3cnLCAnWCd9OwpAQCAtMTQzLDM5ICsxNTIsMzUgQEAgc3RhdGljIGNvbnN0IFVDaGFyIHRyYW5z
bGF0ZURlc2NbXSA9ICB7Jwogc3RhdGljIGNvbnN0IFVDaGFyIHJvdGF0ZURlc2NbXSA9ICB7J3In
LCAnbycsICd0JywgJ2EnLCAndCcsICdlJ307CiBzdGF0aWMgY29uc3QgVUNoYXIgbWF0cml4RGVz
Y1tdID0gIHsnbScsICdhJywgJ3QnLCAncicsICdpJywgJ3gnfTsKIAotYm9vbCBTVkdUcmFuc2Zv
cm1hYmxlOjpwYXJzZUFuZFNraXBUeXBlKGNvbnN0IFVDaGFyKiYgY3VyclRyYW5zZm9ybSwgY29u
c3QgVUNoYXIqIGVuZCwgU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGUmIHR5cGUp
CitPcHRpb25hbDxTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZT4gU1ZHVHJhbnNm
b3JtYWJsZTo6cGFyc2VBbmRTa2lwVHlwZShjb25zdCBVQ2hhciomIGN1cnJUcmFuc2Zvcm0sIGNv
bnN0IFVDaGFyKiBlbmQpCiB7CiAgICAgaWYgKGN1cnJUcmFuc2Zvcm0gPj0gZW5kKQotICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBpZiAo
KmN1cnJUcmFuc2Zvcm0gPT0gJ3MnKSB7CiAgICAgICAgIGlmIChza2lwU3RyaW5nKGN1cnJUcmFu
c2Zvcm0sIGVuZCwgc2tld1hEZXNjLCBXVEZfQVJSQVlfTEVOR1RIKHNrZXdYRGVzYykpKQotICAg
ICAgICAgICAgdHlwZSA9IFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX1NLRVdYOwor
ICAgICAgICAgICAgcmV0dXJuIFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX1NLRVdY
OwogICAgICAgICBlbHNlIGlmIChza2lwU3RyaW5nKGN1cnJUcmFuc2Zvcm0sIGVuZCwgc2tld1lE
ZXNjLCBXVEZfQVJSQVlfTEVOR1RIKHNrZXdZRGVzYykpKQotICAgICAgICAgICAgdHlwZSA9IFNW
R1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX1NLRVdZOworICAgICAgICAgICAgcmV0dXJu
IFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX1NLRVdZOwogICAgICAgICBlbHNlIGlm
IChza2lwU3RyaW5nKGN1cnJUcmFuc2Zvcm0sIGVuZCwgc2NhbGVEZXNjLCBXVEZfQVJSQVlfTEVO
R1RIKHNjYWxlRGVzYykpKQotICAgICAgICAgICAgdHlwZSA9IFNWR1RyYW5zZm9ybVZhbHVlOjpT
VkdfVFJBTlNGT1JNX1NDQUxFOworICAgICAgICAgICAgcmV0dXJuIFNWR1RyYW5zZm9ybVZhbHVl
OjpTVkdfVFJBTlNGT1JNX1NDQUxFOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0gZWxzZSBpZiAo
c2tpcFN0cmluZyhjdXJyVHJhbnNmb3JtLCBlbmQsIHRyYW5zbGF0ZURlc2MsIFdURl9BUlJBWV9M
RU5HVEgodHJhbnNsYXRlRGVzYykpKQotICAgICAgICB0eXBlID0gU1ZHVHJhbnNmb3JtVmFsdWU6
OlNWR19UUkFOU0ZPUk1fVFJBTlNMQVRFOworICAgICAgICByZXR1cm4gU1ZHVHJhbnNmb3JtVmFs
dWU6OlNWR19UUkFOU0ZPUk1fVFJBTlNMQVRFOwogICAgIGVsc2UgaWYgKHNraXBTdHJpbmcoY3Vy
clRyYW5zZm9ybSwgZW5kLCByb3RhdGVEZXNjLCBXVEZfQVJSQVlfTEVOR1RIKHJvdGF0ZURlc2Mp
KSkKLSAgICAgICAgdHlwZSA9IFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX1JPVEFU
RTsKKyAgICAgICAgcmV0dXJuIFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdfVFJBTlNGT1JNX1JPVEFU
RTsKICAgICBlbHNlIGlmIChza2lwU3RyaW5nKGN1cnJUcmFuc2Zvcm0sIGVuZCwgbWF0cml4RGVz
YywgV1RGX0FSUkFZX0xFTkdUSChtYXRyaXhEZXNjKSkpCi0gICAgICAgIHR5cGUgPSBTVkdUcmFu
c2Zvcm1WYWx1ZTo6U1ZHX1RSQU5TRk9STV9NQVRSSVg7Ci0gICAgZWxzZQotICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHX1RSQU5TRk9S
TV9NQVRSSVg7CiAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0Owog
fQogCiBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZSBTVkdUcmFuc2Zvcm1hYmxl
OjpwYXJzZVRyYW5zZm9ybVR5cGUoY29uc3QgU3RyaW5nJiB0eXBlU3RyaW5nKQogewotICAgIFNW
R1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlIHR5cGUgPSBTVkdUcmFuc2Zvcm1WYWx1
ZTo6U1ZHX1RSQU5TRk9STV9VTktOT1dOOwogICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJz
ID0gU3RyaW5nVmlldyh0eXBlU3RyaW5nKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKICAgICBj
b25zdCBVQ2hhciogY2hhcmFjdGVycyA9IHVwY29udmVydGVkQ2hhcmFjdGVyczsKLSAgICBwYXJz
ZUFuZFNraXBUeXBlKGNoYXJhY3RlcnMsIGNoYXJhY3RlcnMgKyB0eXBlU3RyaW5nLmxlbmd0aCgp
LCB0eXBlKTsKLSAgICByZXR1cm4gdHlwZTsKKyAgICByZXR1cm4gcGFyc2VBbmRTa2lwVHlwZShj
aGFyYWN0ZXJzLCBjaGFyYWN0ZXJzICsgdHlwZVN0cmluZy5sZW5ndGgoKSkudmFsdWVPcihTVkdU
cmFuc2Zvcm1WYWx1ZTo6U1ZHX1RSQU5TRk9STV9VTktOT1dOKTsKIH0KIAogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybWFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtYWJsZS5oCShyZXZpc2lvbiAyNjMzMzMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw5
ICszMiw5IEBAIGNsYXNzIFNWR1RyYW5zZm9ybWFibGUgOiBwdWJsaWMgU1ZHTG9jYXQKIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIH5TVkdUcmFuc2Zvcm1hYmxlKCk7CiAKLSAgICBzdGF0aWMgYm9vbCBw
YXJzZVRyYW5zZm9ybVZhbHVlKFNWR1RyYW5zZm9ybVZhbHVlOjpTVkdUcmFuc2Zvcm1UeXBlLCBj
b25zdCBVQ2hhciomIHB0ciwgY29uc3QgVUNoYXIqIGVuZCwgU1ZHVHJhbnNmb3JtVmFsdWUmKTsK
KyAgICBzdGF0aWMgT3B0aW9uYWw8U1ZHVHJhbnNmb3JtVmFsdWU+IHBhcnNlVHJhbnNmb3JtVmFs
dWUoU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1RyYW5zZm9ybVR5cGUsIGNvbnN0IFVDaGFyKiYgcHRy
LCBjb25zdCBVQ2hhciogZW5kKTsKICAgICBzdGF0aWMgU1ZHVHJhbnNmb3JtVmFsdWU6OlNWR1Ry
YW5zZm9ybVR5cGUgcGFyc2VUcmFuc2Zvcm1UeXBlKGNvbnN0IFN0cmluZyYpOwotICAgIHN0YXRp
YyBib29sIHBhcnNlQW5kU2tpcFR5cGUoY29uc3QgVUNoYXIqJiBjdXJyVHJhbnNmb3JtLCBjb25z
dCBVQ2hhciogZW5kLCBTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZSYpOworICAg
IHN0YXRpYyBPcHRpb25hbDxTVkdUcmFuc2Zvcm1WYWx1ZTo6U1ZHVHJhbnNmb3JtVHlwZT4gcGFy
c2VBbmRTa2lwVHlwZShjb25zdCBVQ2hhciomIGN1cnJUcmFuc2Zvcm0sIGNvbnN0IFVDaGFyKiBl
bmQpOwogCiAgICAgQWZmaW5lVHJhbnNmb3JtIGxvY2FsQ29vcmRpbmF0ZVNwYWNlVHJhbnNmb3Jt
KFNWR0xvY2F0YWJsZTo6Q1RNU2NvcGUpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGFuaW1hdGVk
TG9jYWxUcmFuc2Zvcm0oKTsgfQogICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGFuaW1hdGVk
TG9jYWxUcmFuc2Zvcm0oKSBjb25zdCA9IDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
Vktlcm5FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVktl
cm5FbGVtZW50LmNwcAkocmV2aXNpb24gMjYzMzMzKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1ZLZXJuRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDI0ICs0Myw0NyBAQCBSZWY8
U1ZHVktlcm5FbGVtZW50PiBTVkdWS2VybkVsZW1lbnQ6OmNyCiAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgU1ZHVktlcm5FbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKLWJvb2wgU1ZH
Vktlcm5FbGVtZW50OjpidWlsZFZlcnRpY2FsS2VybmluZ1BhaXIoU1ZHS2VybmluZ1BhaXImIGtl
cm5pbmdQYWlyKSBjb25zdAorT3B0aW9uYWw8U1ZHS2VybmluZ1BhaXI+IFNWR1ZLZXJuRWxlbWVu
dDo6YnVpbGRWZXJ0aWNhbEtlcm5pbmdQYWlyKCkgY29uc3QKIHsKKyAgICAvLyBGSVhNRTogQ2Fu
IHRoaXMgYmUgc2hhcmVkIHdpdGggU1ZHSEtlcm5FbGVtZW50OjpidWlsZFZlcnRpY2FsS2Vybmlu
Z1BhaXI/CisKICAgICBhdXRvJiB1MSA9IGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24o
U1ZHTmFtZXM6OnUxQXR0cik7CiAgICAgYXV0byYgZzEgPSBhdHRyaWJ1dGVXaXRob3V0U3luY2hy
b25pemF0aW9uKFNWR05hbWVzOjpnMUF0dHIpOworICAgIGlmICh1MS5pc0VtcHR5KCkgJiYgZzEu
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCiAgICAgYXV0byYgdTIg
PSBhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFNWR05hbWVzOjp1MkF0dHIpOwogICAg
IGF1dG8mIGcyID0gYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihTVkdOYW1lczo6ZzJB
dHRyKTsKLSAgICBpZiAoKHUxLmlzRW1wdHkoKSAmJiBnMS5pc0VtcHR5KCkpIHx8ICh1Mi5pc0Vt
cHR5KCkgJiYgZzIuaXNFbXB0eSgpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICh1
Mi5pc0VtcHR5KCkgJiYgZzIuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworCisgICAgYXV0byBnbHlwaE5hbWUxID0gcGFyc2VHbHlwaE5hbWUoZzEpOworICAgIGlmICgh
Z2x5cGhOYW1lMSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBhdXRvIGdseXBo
TmFtZTIgPSBwYXJzZUdseXBoTmFtZShnMik7CisgICAgaWYgKCFnbHlwaE5hbWUyKQorICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGF1dG8gdW5pY29kZVN0cmluZzEgPSBwYXJzZUtl
cm5pbmdVbmljb2RlU3RyaW5nKHUxKTsKKyAgICBpZiAoIXVuaWNvZGVTdHJpbmcxKQorICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGF1dG8gdW5pY29kZVN0cmluZzIgPSBwYXJzZUtl
cm5pbmdVbmljb2RlU3RyaW5nKHUyKTsKKyAgICBpZiAoIXVuaWNvZGVTdHJpbmcyKQorICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgYm9vbCBvayA9IGZhbHNlOworICAgIGF1dG8g
a2VybmluZyA9IGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oU1ZHTmFtZXM6OmtBdHRy
KS5zdHJpbmcoKS50b0Zsb2F0KCZvayk7CisgICAgaWYgKCFvaykKKyAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKIAotICAgIGlmIChwYXJzZUdseXBoTmFtZShnMSwga2VybmluZ1BhaXIuZ2x5
cGhOYW1lMSkKLSAgICAgICAgJiYgcGFyc2VHbHlwaE5hbWUoZzIsIGtlcm5pbmdQYWlyLmdseXBo
TmFtZTIpCi0gICAgICAgICYmIHBhcnNlS2VybmluZ1VuaWNvZGVTdHJpbmcodTEsIGtlcm5pbmdQ
YWlyLnVuaWNvZGVSYW5nZTEsIGtlcm5pbmdQYWlyLnVuaWNvZGVOYW1lMSkKLSAgICAgICAgJiYg
cGFyc2VLZXJuaW5nVW5pY29kZVN0cmluZyh1Miwga2VybmluZ1BhaXIudW5pY29kZVJhbmdlMiwg
a2VybmluZ1BhaXIudW5pY29kZU5hbWUyKSkgewotICAgICAgICBib29sIG9rID0gZmFsc2U7Ci0g
ICAgICAgIGtlcm5pbmdQYWlyLmtlcm5pbmcgPSBhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0
aW9uKFNWR05hbWVzOjprQXR0cikuc3RyaW5nKCkudG9GbG9hdCgmb2spOwotICAgICAgICByZXR1
cm4gb2s7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gU1ZHS2VybmluZ1Bh
aXIgeworICAgICAgICBXVEZNb3ZlKHVuaWNvZGVTdHJpbmcxLT5maXJzdCksCisgICAgICAgIFdU
Rk1vdmUodW5pY29kZVN0cmluZzEtPnNlY29uZCksCisgICAgICAgIFdURk1vdmUoKmdseXBoTmFt
ZTEpLAorICAgICAgICBXVEZNb3ZlKHVuaWNvZGVTdHJpbmcyLT5maXJzdCksCisgICAgICAgIFdU
Rk1vdmUodW5pY29kZVN0cmluZzItPnNlY29uZCksCisgICAgICAgIFdURk1vdmUoKmdseXBoTmFt
ZTIpLAorICAgICAgICBrZXJuaW5nCisgICAgfTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1ZLZXJuRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdWS2VybkVsZW1lbnQuaAkocmV2aXNpb24gMjYzMzMzKQorKysgU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1ZLZXJuRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBAIGNs
YXNzIFNWR1ZLZXJuRWxlbWVudCBmaW5hbCA6IHB1YmxpYyBTVkcKIHB1YmxpYzoKICAgICBzdGF0
aWMgUmVmPFNWR1ZLZXJuRWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1
bWVudCYpOwogCi0gICAgYm9vbCBidWlsZFZlcnRpY2FsS2VybmluZ1BhaXIoU1ZHS2VybmluZ1Bh
aXImIGtlcm5pbmdQYWlyKSBjb25zdDsKKyAgICBPcHRpb25hbDxTVkdLZXJuaW5nUGFpcj4gYnVp
bGRWZXJ0aWNhbEtlcm5pbmdQYWlyKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgU1ZHVktlcm5F
bGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCYpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1ZpZXdTcGVjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHVmlld1NwZWMuY3BwCShyZXZpc2lvbiAyNjMzMzMpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHVmlld1NwZWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OSwxMCArODksMTAgQEAgYm9v
bCBTVkdWaWV3U3BlYzo6cGFyc2VWaWV3U3BlYyhjb25zdCBTdAogICAgICAgICAgICAgICAgIGlm
IChjdXJyVmlld1NwZWMgPj0gZW5kIHx8ICpjdXJyVmlld1NwZWMgIT0gJygnKQogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgY3VyclZpZXdTcGVjKys7
Ci0gICAgICAgICAgICAgICAgRmxvYXRSZWN0IHZpZXdCb3g7Ci0gICAgICAgICAgICAgICAgaWYg
KCFTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlVmlld0JveChjdXJyVmlld1NwZWMsIGVuZCwgdmlld0Jv
eCwgZmFsc2UpKQorICAgICAgICAgICAgICAgIGF1dG8gdmlld0JveCA9IFNWR0ZpdFRvVmlld0Jv
eDo6cGFyc2VWaWV3Qm94KGN1cnJWaWV3U3BlYywgZW5kLCBmYWxzZSk7CisgICAgICAgICAgICAg
ICAgaWYgKCF2aWV3Qm94KQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgICAgICAgc2V0Vmlld0JveCh2aWV3Qm94KTsKKyAgICAgICAgICAgICAgICBzZXRWaWV3
Qm94KFdURk1vdmUoKnZpZXdCb3gpKTsKICAgICAgICAgICAgICAgICBpZiAoY3VyclZpZXdTcGVj
ID49IGVuZCB8fCAqY3VyclZpZXdTcGVjICE9ICcpJykKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIGN1cnJWaWV3U3BlYysrOwpJbmRleDogU291cmNl
L1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9u
SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0Fu
aW1hdGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbkltcGwuaAkocmV2aXNpb24gMjYzMzMzKQorKysg
U291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1
bmN0aW9uSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTQsMTEgKzI1NCw3IEBAIHB1YmxpYzoK
IAogICAgIE9wdGlvbmFsPGZsb2F0PiBjYWxjdWxhdGVEaXN0YW5jZShTVkdFbGVtZW50KiwgY29u
c3QgU3RyaW5nJiBmcm9tLCBjb25zdCBTdHJpbmcmIHRvKSBjb25zdCBvdmVycmlkZQogICAgIHsK
LSAgICAgICAgZmxvYXQgZnJvbU51bWJlciA9IDA7Ci0gICAgICAgIGZsb2F0IHRvTnVtYmVyID0g
MDsKLSAgICAgICAgcGFyc2VOdW1iZXJGcm9tU3RyaW5nKGZyb20sIGZyb21OdW1iZXIpOwotICAg
ICAgICBwYXJzZU51bWJlckZyb21TdHJpbmcodG8sIHRvTnVtYmVyKTsKLSAgICAgICAgcmV0dXJu
IGZhYnNmKHRvTnVtYmVyIC0gZnJvbU51bWJlcik7CisgICAgICAgIHJldHVybiBzdGQ6OmFicyhw
YXJzZU51bWJlcih0bykudmFsdWVPcigwKSAtIHBhcnNlTnVtYmVyKGZyb20pLnZhbHVlT3IoMCkp
OwogICAgIH0KIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVz
L1NWR1Byb3BlcnR5VHJhaXRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL3By
b3BlcnRpZXMvU1ZHUHJvcGVydHlUcmFpdHMuaAkocmV2aXNpb24gMjYzMzMzKQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHUHJvcGVydHlUcmFpdHMuaAkod29ya2luZyBjb3B5
KQpAQCAtNzUsMTAgKzc1LDEwIEBAIHN0cnVjdCBTVkdQcm9wZXJ0eVRyYWl0czxzdGQ6OnBhaXI8
aW50LCAKICAgICBzdGF0aWMgc3RkOjpwYWlyPGludCwgaW50PiBpbml0aWFsVmFsdWUoKSB7IHJl
dHVybiB7IH07IH0KICAgICBzdGF0aWMgc3RkOjpwYWlyPGludCwgaW50PiBmcm9tU3RyaW5nKGNv
bnN0IFN0cmluZyYgc3RyaW5nKQogICAgIHsKLSAgICAgICAgZmxvYXQgZmlyc3ROdW1iZXIgPSAw
LCBzZWNvbmROdW1iZXIgPSAwOwotICAgICAgICBpZiAoIXBhcnNlTnVtYmVyT3B0aW9uYWxOdW1i
ZXIoc3RyaW5nLCBmaXJzdE51bWJlciwgc2Vjb25kTnVtYmVyKSkKKyAgICAgICAgYXV0byByZXN1
bHQgPSBwYXJzZU51bWJlck9wdGlvbmFsTnVtYmVyKHN0cmluZyk7CisgICAgICAgIGlmICghcmVz
dWx0KQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9w
YWlyKHN0YXRpY19jYXN0PGludD4ocm91bmRmKGZpcnN0TnVtYmVyKSksIHN0YXRpY19jYXN0PGlu
dD4ocm91bmRmKHNlY29uZE51bWJlcikpKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWly
KHN0YXRpY19jYXN0PGludD4oc3RkOjpyb3VuZChyZXN1bHQtPmZpcnN0KSksIHN0YXRpY19jYXN0
PGludD4oc3RkOjpyb3VuZChyZXN1bHQtPnNlY29uZCkpKTsKICAgICB9CiAgICAgc3RhdGljIE9w
dGlvbmFsPHN0ZDo6cGFpcjxpbnQsIGludD4+IHBhcnNlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBj
b25zdCBTdHJpbmcmKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gaW5pdGlhbFZhbHVl
KCk7IH0KICAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nKHN0ZDo6cGFpcjxpbnQsIGludD4pIHsg
QVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBlbXB0eVN0cmluZygpOyB9CkBAIC04OSwxNyAr
ODksMTEgQEAgc3RydWN0IFNWR1Byb3BlcnR5VHJhaXRzPGZsb2F0PiB7CiAgICAgc3RhdGljIGZs
b2F0IGluaXRpYWxWYWx1ZSgpIHsgcmV0dXJuIDA7IH0KICAgICBzdGF0aWMgZmxvYXQgZnJvbVN0
cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKICAgICB7Ci0gICAgICAgIGZsb2F0IG51bWJlciA9
IDA7Ci0gICAgICAgIGlmICghcGFyc2VOdW1iZXJGcm9tU3RyaW5nKHN0cmluZywgbnVtYmVyKSkK
LSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4gbnVtYmVyOworICAgICAgICBy
ZXR1cm4gcGFyc2VOdW1iZXIoc3RyaW5nKS52YWx1ZU9yKDApOwogICAgIH0KICAgICBzdGF0aWMg
T3B0aW9uYWw8ZmxvYXQ+IHBhcnNlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBTdHJpbmcm
IHN0cmluZykKICAgICB7Ci0gICAgICAgIGZsb2F0IG51bWJlcjsKLSAgICAgICAgaWYgKCFwYXJz
ZU51bWJlckZyb21TdHJpbmcoc3RyaW5nLCBudW1iZXIpKQotICAgICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKLSAgICAgICAgcmV0dXJuIG51bWJlcjsKKyAgICAgICAgcmV0dXJuIHBhcnNl
TnVtYmVyKHN0cmluZyk7CiAgICAgfQogICAgIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmcoZmxvYXQg
dHlwZSkgeyByZXR1cm4gU3RyaW5nOjpudW1iZXIodHlwZSk7IH0KIH07CkBAIC0xMDksMTAgKzEw
Myw3IEBAIHN0cnVjdCBTVkdQcm9wZXJ0eVRyYWl0czxzdGQ6OnBhaXI8ZmxvYXQKICAgICBzdGF0
aWMgc3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4gaW5pdGlhbFZhbHVlKCkgeyByZXR1cm4geyB9OyB9
CiAgICAgc3RhdGljIHN0ZDo6cGFpcjxmbG9hdCwgZmxvYXQ+IGZyb21TdHJpbmcoY29uc3QgU3Ry
aW5nJiBzdHJpbmcpCiAgICAgewotICAgICAgICBmbG9hdCBmaXJzdE51bWJlciA9IDAsIHNlY29u
ZE51bWJlciA9IDA7Ci0gICAgICAgIGlmICghcGFyc2VOdW1iZXJPcHRpb25hbE51bWJlcihzdHJp
bmcsIGZpcnN0TnVtYmVyLCBzZWNvbmROdW1iZXIpKQotICAgICAgICAgICAgcmV0dXJuIHsgfTsK
LSAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGZpcnN0TnVtYmVyLCBzZWNvbmROdW1iZXIp
OworICAgICAgICByZXR1cm4gcGFyc2VOdW1iZXJPcHRpb25hbE51bWJlcihzdHJpbmcpLnZhbHVl
T3Ioc3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4geyB9KTsKICAgICB9CiAgICAgc3RhdGljIE9wdGlv
bmFsPHN0ZDo6cGFpcjxmbG9hdCwgZmxvYXQ+PiBwYXJzZShjb25zdCBRdWFsaWZpZWROYW1lJiwg
Y29uc3QgU3RyaW5nJikgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIGluaXRpYWxWYWx1
ZSgpOyB9CiAgICAgc3RhdGljIFN0cmluZyB0b1N0cmluZyhzdGQ6OnBhaXI8ZmxvYXQsIGZsb2F0
PikgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIGVtcHR5U3RyaW5nKCk7IH0KQEAgLTEy
MywxNyArMTE0LDExIEBAIHN0cnVjdCBTVkdQcm9wZXJ0eVRyYWl0czxGbG9hdFBvaW50PiB7CiAg
ICAgc3RhdGljIEZsb2F0UG9pbnQgaW5pdGlhbFZhbHVlKCkgeyByZXR1cm4gRmxvYXRQb2ludCgp
OyB9CiAgICAgc3RhdGljIEZsb2F0UG9pbnQgZnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmlu
ZykKICAgICB7Ci0gICAgICAgIEZsb2F0UG9pbnQgcG9pbnQ7Ci0gICAgICAgIGlmICghcGFyc2VQ
b2ludChzdHJpbmcsIHBvaW50KSkKLSAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgIHJl
dHVybiBwb2ludDsKKyAgICAgICAgcmV0dXJuIHBhcnNlUG9pbnQoc3RyaW5nKS52YWx1ZU9yKEZs
b2F0UG9pbnQgeyB9KTsKICAgICB9CiAgICAgc3RhdGljIE9wdGlvbmFsPEZsb2F0UG9pbnQ+IHBh
cnNlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBTdHJpbmcmIHN0cmluZykKICAgICB7Ci0g
ICAgICAgIEZsb2F0UG9pbnQgcG9pbnQ7Ci0gICAgICAgIGlmICghcGFyc2VQb2ludChzdHJpbmcs
IHBvaW50KSkKLSAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgICAgIHJldHVy
biBwb2ludDsKKyAgICAgICAgcmV0dXJuIHBhcnNlUG9pbnQoc3RyaW5nKTsKICAgICB9CiAgICAg
c3RhdGljIFN0cmluZyB0b1N0cmluZyhjb25zdCBGbG9hdFBvaW50JiB0eXBlKQogICAgIHsKQEAg
LTE0NiwxNyArMTMxLDExIEBAIHN0cnVjdCBTVkdQcm9wZXJ0eVRyYWl0czxGbG9hdFJlY3Q+IHsK
ICAgICBzdGF0aWMgRmxvYXRSZWN0IGluaXRpYWxWYWx1ZSgpIHsgcmV0dXJuIEZsb2F0UmVjdCgp
OyB9CiAgICAgc3RhdGljIEZsb2F0UmVjdCBmcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5n
KQogICAgIHsKLSAgICAgICAgRmxvYXRSZWN0IHJlY3Q7Ci0gICAgICAgIGlmICghcGFyc2VSZWN0
KHN0cmluZywgcmVjdCkpCi0gICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICByZXR1cm4g
cmVjdDsKKyAgICAgICAgcmV0dXJuIHBhcnNlUmVjdChzdHJpbmcpLnZhbHVlT3IoRmxvYXRSZWN0
IHsgfSk7CiAgICAgfQogICAgIHN0YXRpYyBPcHRpb25hbDxGbG9hdFJlY3Q+IHBhcnNlKGNvbnN0
IFF1YWxpZmllZE5hbWUmLCBjb25zdCBTdHJpbmcmIHN0cmluZykKICAgICB7Ci0gICAgICAgIEZs
b2F0UmVjdCByZWN0OwotICAgICAgICBpZiAoIXBhcnNlUmVjdChzdHJpbmcsIHJlY3QpKQotICAg
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAgcmV0dXJuIHJlY3Q7CisgICAg
ICAgIHJldHVybiBwYXJzZVJlY3Qoc3RyaW5nKTsKICAgICB9CiAgICAgc3RhdGljIFN0cmluZyB0
b1N0cmluZyhjb25zdCBGbG9hdFJlY3QmIHR5cGUpCiAgICAgewo=
</data>

          </attachment>
      

    </bug>

</bugzilla>