<?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>209435</bug_id>
          
          <creation_ts>2020-03-23 12:36:15 -0700</creation_ts>
          <short_desc>Refactor YARR Stack Overflow checks</short_desc>
          <delta_ts>2020-03-26 16:27:59 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>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="Michael Saboff">msaboff</reporter>
          <assigned_to name="Michael Saboff">msaboff</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1632976</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2020-03-23 12:36:15 -0700</bug_when>
    <thetext>Currently the YARR compiler, ByteCode compiler and JIT generated code handle stack overflow checks differently or not at all.

These should be unified to check for available stack space in a consist manner.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1632977</commentid>
    <comment_count>1</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2020-03-23 12:36:29 -0700</bug_when>
    <thetext>&lt;rdar://problem/58988252&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1633009</commentid>
    <comment_count>2</comment_count>
      <attachid>394299</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2020-03-23 13:53:16 -0700</bug_when>
    <thetext>Created attachment 394299
Draft patch for EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1633095</commentid>
    <comment_count>3</comment_count>
      <attachid>394317</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2020-03-23 16:04:02 -0700</bug_when>
    <thetext>Created attachment 394317
Updated patch for EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1633194</commentid>
    <comment_count>4</comment_count>
      <attachid>394342</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2020-03-23 19:11:27 -0700</bug_when>
    <thetext>Created attachment 394342
Speculative fixes for ARMv7 and Windows</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1633297</commentid>
    <comment_count>5</comment_count>
      <attachid>394366</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2020-03-24 07:41:27 -0700</bug_when>
    <thetext>Created attachment 394366
Speculative fix for MIPS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1633907</commentid>
    <comment_count>6</comment_count>
      <attachid>394508</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2020-03-25 09:47:39 -0700</bug_when>
    <thetext>Created attachment 394508
Patch for Landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1634484</commentid>
    <comment_count>7</comment_count>
      <attachid>394508</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-03-26 12:24:09 -0700</bug_when>
    <thetext>Comment on attachment 394508
Patch for Landing

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

r=me with suggested improvements.

&gt; JSTests/ChangeLog:9
&gt; +	Added a new test and removed a now obsolete test.

Fix indentation.  Can you also explain why the old test is obsolete?

&gt; JSTests/stress/regexp-huge-oom.js:1
&gt; +// Test that throw an OOM exception when compiling / executing a pathologically large RegExp&apos;s

Should this test be skipped for memoryLimited devices?  Or will it fail fast?

&gt; Source/JavaScriptCore/runtime/RegExp.cpp:302
&gt; +    position = matchInline&lt;Vector&lt;int&gt;&amp;, Yarr::MatchFrom::CompilerThread&gt;(vm, s, startOffset, ovector);

Previously, we called match() instead of matchInline() because I think we deliberately didn&apos;t want to inline it here.  matchInline is ALWAYS_INLINE.  I don&apos;t know the reason for the decision to not inline, but unless you have a reason to change this, I suggest you add a not inlined matchFromCompilerThread() that calls matchInline to preserve the previous behavior.  We also don&apos;t want to bloat the code size unnecessarily.

&gt; Source/JavaScriptCore/runtime/RegExp.cpp:365
&gt; +    result = matchInline&lt;Yarr::MatchFrom::CompilerThread&gt;(vm, s, startOffset);

Ditto.  Use a not inlined matchFromCompilerThread().

&gt; Source/JavaScriptCore/runtime/RegExpInlines.h:133
&gt; +            Yarr::MatchingContextHolder regExpContext(vm, m_regExpJITCode.get(), matchFrom);

Can we call this MatchContext instead?  Then you can declare this consistently as:
    Yarr::MatchContext matchContext(vm, m_regExpJITCode.get(), matchFrom);

I don&apos;t think &quot;Matching&quot; adds anything over &quot;Match&quot;, and &quot;Holder&quot; doesn&apos;t add anything in addition to &quot;Context&quot;.

&gt; Source/JavaScriptCore/runtime/RegExpInlines.h:136
&gt; +                result = m_regExpJITCode-&gt;execute(s.characters8(), startOffset, s.length(), offsetVector, &amp;regExpContext).start;

Can we mate the execute() functions take a MatchContext&amp; instead?  We don&apos;t allow execute() to ever be called without a MatchContext, right?

&gt; Source/JavaScriptCore/yarr/YarrJIT.cpp:93
&gt; +    static const RegisterID matchingContext = ARM64Registers::x4;

Let&apos;s call this matchContext.

&gt; Source/JavaScriptCore/yarr/YarrJIT.cpp:3893
&gt; +#if CPU(X86_64) &amp;&amp; OS(WINDOWS)
&gt; +            RegisterID matchingContext = regT1;
&gt; +            loadPtr(Address(X86Registers::ebp, 7 * sizeof(void*)), matchingContext);
&gt; +#elif CPU(ARM_THUMB2) || CPU(MIPS)
&gt; +            RegisterID matchingContext = regT1;
&gt; +            loadPtr(Address(stackPointerRegister, 4 * sizeof(void*)), matchingContext);
&gt; +#endif

After staring at this code for a while, it finally dawned on me that you&apos;re loading the 5th argument passed in execute() to the YarrCodeBlock JIT generated function here, and the 5th argument in this case happens to be at the stack locations.  Please add a comment here to document this detail.  Currently, it&apos;s difficult to tell from just reading this code where these constants came from and why it would work.

&gt; Source/JavaScriptCore/yarr/YarrJIT.cpp:3898
&gt; +            move(TrustedImmPtr((void*)static_cast&lt;size_t&gt;(-2)), returnRegister);
&gt; +            move(TrustedImm32(0), returnRegister2);

You&apos;re returning a MatchResult here.  Is -2 the start or the end?  I presume it&apos;s the start (CPU(BIG_ENDIAN) folks may have trouble ... I suggest pinging Caio as an FYI).

According to MatchResult, return WTF::notFound (i.e. -1) for start means the match failed.  Why not return WTF::notFound here?
If there&apos;s a need for a different error code (and I suspect this is the case), let&apos;s make -2 an official error code in MatchResult and give it a name instead of using a literal here.

Wait a minute ... I see that you already have a name for this: JSRegExpJITCodeFailure.  We check for that in RegExp::matchInline().  Let&apos;s use JSRegExpJITCodeFailure here instead.

&gt; Source/JavaScriptCore/yarr/YarrJIT.h:58
&gt; +class MatchingContextHolder {

Let&apos;s call this MatchContext.

&gt; Source/JavaScriptCore/yarr/YarrJIT.h:109
&gt; +    MatchResult execute(const LChar* input, unsigned start, unsigned length, int* output, MatchingContextHolder* matchingContext)

Let&apos;s have these execute functions take a MatchContext&amp; because it is a mandatory argument and can never be null.

&gt; Source/JavaScriptCore/yarr/YarrJIT.h:112
&gt; +        return MatchResult(untagCFunctionPtr&lt;YarrJITCode8, Yarr8BitPtrTag&gt;(m_ref8.code().executableAddress())(input, start, length, output, matchingContext));

Here&apos;s we can pass &amp;matchContext instead to the JITted code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1634607</commentid>
    <comment_count>8</comment_count>
      <attachid>394508</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2020-03-26 15:49:55 -0700</bug_when>
    <thetext>Comment on attachment 394508
Patch for Landing

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

&gt;&gt; JSTests/ChangeLog:9
&gt;&gt; +	Added a new test and removed a now obsolete test.
&gt; 
&gt; Fix indentation.  Can you also explain why the old test is obsolete?

Will do.

&gt;&gt; JSTests/stress/regexp-huge-oom.js:1
&gt;&gt; +// Test that throw an OOM exception when compiling / executing a pathologically large RegExp&apos;s
&gt; 
&gt; Should this test be skipped for memoryLimited devices?  Or will it fail fast?

I&apos;ll skip for memory limited devices.

&gt;&gt; Source/JavaScriptCore/runtime/RegExp.cpp:302
&gt;&gt; +    position = matchInline&lt;Vector&lt;int&gt;&amp;, Yarr::MatchFrom::CompilerThread&gt;(vm, s, startOffset, ovector);
&gt; 
&gt; Previously, we called match() instead of matchInline() because I think we deliberately didn&apos;t want to inline it here.  matchInline is ALWAYS_INLINE.  I don&apos;t know the reason for the decision to not inline, but unless you have a reason to change this, I suggest you add a not inlined matchFromCompilerThread() that calls matchInline to preserve the previous behavior.  We also don&apos;t want to bloat the code size unnecessarily.

I call matchInline directly since it is a templated method.  Plain match() is used in many other places, all from the VM thread.  We won&apos;t save any code bloat by creating a new matchFromCompilerThread() method that does the inlining of matchInline and is only used here, in fact it will create a little more code bloat.

&gt;&gt; Source/JavaScriptCore/runtime/RegExp.cpp:365
&gt;&gt; +    result = matchInline&lt;Yarr::MatchFrom::CompilerThread&gt;(vm, s, startOffset);
&gt; 
&gt; Ditto.  Use a not inlined matchFromCompilerThread().

Ditto with my response.  This would be require a  different matchFromCompilerThread()since this variant doesn&apos;t pass a Vector reference.

&gt;&gt; Source/JavaScriptCore/runtime/RegExpInlines.h:133
&gt;&gt; +            Yarr::MatchingContextHolder regExpContext(vm, m_regExpJITCode.get(), matchFrom);
&gt; 
&gt; Can we call this MatchContext instead?  Then you can declare this consistently as:
&gt;     Yarr::MatchContext matchContext(vm, m_regExpJITCode.get(), matchFrom);
&gt; 
&gt; I don&apos;t think &quot;Matching&quot; adds anything over &quot;Match&quot;, and &quot;Holder&quot; doesn&apos;t add anything in addition to &quot;Context&quot;.

I chose the verb form &quot;Matching&quot; over the noun form &quot;Match&quot; since this is used for the process of matching.  I also don&apos;t want to confuse with the unrelated MatchResult type.  The suffix &quot;Holder&quot; was added because this is an RAII object that keeps the MatchingContext alive while in scope.

&gt;&gt; Source/JavaScriptCore/yarr/YarrJIT.cpp:93
&gt;&gt; +    static const RegisterID matchingContext = ARM64Registers::x4;
&gt; 
&gt; Let&apos;s call this matchContext.

See above.

&gt;&gt; Source/JavaScriptCore/yarr/YarrJIT.cpp:3898
&gt;&gt; +            move(TrustedImm32(0), returnRegister2);
&gt; 
&gt; You&apos;re returning a MatchResult here.  Is -2 the start or the end?  I presume it&apos;s the start (CPU(BIG_ENDIAN) folks may have trouble ... I suggest pinging Caio as an FYI).
&gt; 
&gt; According to MatchResult, return WTF::notFound (i.e. -1) for start means the match failed.  Why not return WTF::notFound here?
&gt; If there&apos;s a need for a different error code (and I suspect this is the case), let&apos;s make -2 an official error code in MatchResult and give it a name instead of using a literal here.
&gt; 
&gt; Wait a minute ... I see that you already have a name for this: JSRegExpJITCodeFailure.  We check for that in RegExp::matchInline().  Let&apos;s use JSRegExpJITCodeFailure here instead.

Done.

&gt;&gt; Source/JavaScriptCore/yarr/YarrJIT.h:58
&gt;&gt; +class MatchingContextHolder {
&gt; 
&gt; Let&apos;s call this MatchContext.

See above.

&gt;&gt; Source/JavaScriptCore/yarr/YarrJIT.h:109
&gt;&gt; +    MatchResult execute(const LChar* input, unsigned start, unsigned length, int* output, MatchingContextHolder* matchingContext)
&gt; 
&gt; Let&apos;s have these execute functions take a MatchContext&amp; because it is a mandatory argument and can never be null.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1634632</commentid>
    <comment_count>9</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2020-03-26 16:27:59 -0700</bug_when>
    <thetext>Committed r259092: &lt;https://trac.webkit.org/changeset/259092&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>394299</attachid>
            <date>2020-03-23 13:53:16 -0700</date>
            <delta_ts>2020-03-23 16:04:41 -0700</delta_ts>
            <desc>Draft patch for EWS</desc>
            <filename>209435-wip1.patch</filename>
            <type>text/plain</type>
            <size>29147</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjU4ODY1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBA
CisyMDIwLTAzLTIzICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIFJlZmFjdG9yIFlBUlIgU3RhY2sgT3ZlcmZsb3cgQ2hlY2tzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDk0MzUKKwlyZGFyOi8vcHJvYmxlbS81
ODk4ODI1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisJUmVmYWN0
b3JlZCBzdGFjayBjaGVja3MgaW4gWUFSUiBjb2RlIGluY2x1ZGluZyBhZGRpbmcgYSBzdGFjayBj
aGVjayB0byB0aGUgWUFSUiBKSVQnZWQgY29kZS4KKwlUaGUgQysrIGNvZGUgaW5jbHVkaW5nIHRo
ZSBwYXJzZXIsIGJ5dGUgY29kZSBjb21waWxlciBhbmQgaW50ZXJwcmV0ZXIgbm93IGFsbCB1c2Ug
U3RhY2tDaGVjay4KKwlUaGUgSklUJ2VkIGNvZGUgbmVlZHMgYSBzdGFjayBsaW1pdCBwYXNzZWQg
dmlhIGEgcGFyYW1ldGVyIHNpbmNlIHRoZSBKSVQnZWQgY29kZSBjYW4gYmUgCisJY2FsbGVkIGZy
b20gdGhlIGNvbXBpbGVyIHRocmVhZCB3aGVuIGNvbXBpbGluZyBERkcgLyBGVEwgY29kZS4KKwor
CUluc3RlYWQgb2YgYWRkaW5nIGEgbmV3IHBhcmFtZXRlciwgY29uc29saWRhdGVkIHRoZSB0d28g
cGF0dGVybiBjb250ZXh0IGJ1ZmZlciB2YWx1ZXMsIGJ1ZmZlcgorCXBvaW50ZXIgYW5kIHNpemUs
IHdpdGggdGhlIG5ldyBzdGFjayBsaW1pdCBpbnRvIGEgbmV3IE1hdGNoaW5nQ29udGV4dEhvbGRl
ciwgYW4gUkFJSSBvYmplY3QuCisJVGhlIE1hdGNoaW5nQ29udGV4dEhvbGRlciBjb25zdHJ1Y3Rv
ciB1c2VzIGVpdGhlciB0aGUgVk0gc3RhY2sgbGltaXQgb3IgdGhlIGN1cnJlbnQgdGhyZWFkJ3MK
KwlzdGFjayBsaW1pdCBkZXBlbmRpbmcgb24gaG93IGl0IGlzIGNhbGxlZC4KKworICAgICAgICAq
IHJ1bnRpbWUvUmVnRXhwLmNwcDoKKyAgICAgICAgKEpTQzo6UmVnRXhwOjpmaW5pc2hDcmVhdGlv
bik6CisgICAgICAgIChKU0M6OlJlZ0V4cDo6Ynl0ZUNvZGVDb21waWxlSWZOZWNlc3NhcnkpOgor
ICAgICAgICAoSlNDOjpSZWdFeHA6OmNvbXBpbGUpOgorICAgICAgICAoSlNDOjpSZWdFeHA6Om1h
dGNoQ29uY3VycmVudGx5KToKKyAgICAgICAgKEpTQzo6UmVnRXhwOjpjb21waWxlTWF0Y2hPbmx5
KToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cC5oOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhw
SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpSZWdFeHA6Om1hdGNoSW5saW5lKToKKyAgICAgICAg
KEpTQzo6UGF0dGVybkNvbnRleHRCdWZmZXJIb2xkZXI6OlBhdHRlcm5Db250ZXh0QnVmZmVySG9s
ZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6UGF0dGVybkNvbnRleHRCdWZmZXJIb2xkZXI6
On5QYXR0ZXJuQ29udGV4dEJ1ZmZlckhvbGRlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlBh
dHRlcm5Db250ZXh0QnVmZmVySG9sZGVyOjpidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpQYXR0ZXJuQ29udGV4dEJ1ZmZlckhvbGRlcjo6c2l6ZSk6IERlbGV0ZWQuCisgICAgICAgICgp
OiBEZWxldGVkLgorICAgICAgICAqIHlhcnIvWWFyci5oOgorICAgICAgICAqIHlhcnIvWWFycklu
dGVycHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6WWFycjo6SW50ZXJwcmV0ZXI6Om1hdGNoRGlz
anVuY3Rpb24pOgorICAgICAgICAoSlNDOjpZYXJyOjpJbnRlcnByZXRlcjo6aXNTYWZlVG9SZWN1
cnNlKToKKyAgICAgICAgKiB5YXJyL1lhcnJKSVQuY3BwOgorICAgICAgICAoSlNDOjpZYXJyOjpN
YXRjaGluZ0NvbnRleHRIb2xkZXI6Ok1hdGNoaW5nQ29udGV4dEhvbGRlcik6CisgICAgICAgIChK
U0M6OllhcnI6Ok1hdGNoaW5nQ29udGV4dEhvbGRlcjo6fk1hdGNoaW5nQ29udGV4dEhvbGRlcik6
CisgICAgICAgIChKU0M6OllhcnI6OllhcnJHZW5lcmF0b3I6OmluaXRQYXJlbkNvbnRleHRGcmVl
TGlzdCk6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJHZW5lcmF0b3I6OmFsaWduQ2FsbEZyYW1l
U2l6ZUluQnl0ZXMpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjpjb21waWxl
KToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckdlbmVyYXRvcjo6aW5pdENhbGxGcmFtZSk6IERl
bGV0ZWQuCisgICAgICAgICogeWFyci9ZYXJySklULmg6CisgICAgICAgIChKU0M6OllhcnI6Ok1h
dGNoaW5nQ29udGV4dEhvbGRlcjo6b2Zmc2V0T2ZTdGFja0xpbWl0KToKKyAgICAgICAgKEpTQzo6
WWFycjo6TWF0Y2hpbmdDb250ZXh0SG9sZGVyOjpvZmZzZXRPZlBhdHRlcm5Db250ZXh0QnVmZmVy
KToKKyAgICAgICAgKEpTQzo6WWFycjo6TWF0Y2hpbmdDb250ZXh0SG9sZGVyOjpvZmZzZXRPZlBh
dHRlcm5Db250ZXh0QnVmZmVyU2l6ZSk6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJDb2RlQmxv
Y2s6OmV4ZWN1dGUpOgorICAgICAgICAqIHlhcnIvWWFyclBhdHRlcm4uY3BwOgorICAgICAgICAo
SlNDOjpZYXJyOjpZYXJyUGF0dGVybkNvbnN0cnVjdG9yOjpZYXJyUGF0dGVybkNvbnN0cnVjdG9y
KToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyclBhdHRlcm5Db25zdHJ1Y3Rvcjo6aXNTYWZlVG9S
ZWN1cnNlKToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyclBhdHRlcm46OmNvbXBpbGUpOgorICAg
ICAgICAoSlNDOjpZYXJyOjpZYXJyUGF0dGVybjo6WWFyclBhdHRlcm4pOgorICAgICAgICAoSlND
OjpZYXJyOjpZYXJyUGF0dGVybkNvbnN0cnVjdG9yOjppc1NhZmVUb1JlY3Vyc2UgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAqIHlhcnIvWWFyclBhdHRlcm4uaDoKKwogMjAyMC0wMy0yMyAgUm9z
cyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29ueS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdl
ZCwgYWRkcmVzcyBZdXN1a2UncyBmZWVkYmFjayBvbiByMjU4ODAxLgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAuY3BwCShyZXZpc2lvbiAyNTg4NjUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NzAsNyArMTcwLDcgQEAgUmVnRXhwOjpSZWdFeHAoVk0mIHZtLCBjb25zdCBTdHJpbmcmIHBhdAog
dm9pZCBSZWdFeHA6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKIHsKICAgICBCYXNlOjpmaW5pc2hD
cmVhdGlvbih2bSk7Ci0gICAgWWFycjo6WWFyclBhdHRlcm4gcGF0dGVybihtX3BhdHRlcm5TdHJp
bmcsIG1fZmxhZ3MsIG1fY29uc3RydWN0aW9uRXJyb3JDb2RlLCB2bS5zdGFja0xpbWl0KCkpOwor
ICAgIFlhcnI6OllhcnJQYXR0ZXJuIHBhdHRlcm4obV9wYXR0ZXJuU3RyaW5nLCBtX2ZsYWdzLCBt
X2NvbnN0cnVjdGlvbkVycm9yQ29kZSk7CiAgICAgaWYgKCFpc1ZhbGlkKCkpIHsKICAgICAgICAg
bV9zdGF0ZSA9IFBhcnNlRXJyb3I7CiAgICAgICAgIHJldHVybjsKQEAgLTIyNywxMyArMjI3LDEw
IEBAIHZvaWQgUmVnRXhwOjpieXRlQ29kZUNvbXBpbGVJZk5lY2Vzc2FyeSgKICAgICBpZiAobV9y
ZWdFeHBCeXRlY29kZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgWWFycjo6WWFyclBhdHRlcm4g
cGF0dGVybihtX3BhdHRlcm5TdHJpbmcsIG1fZmxhZ3MsIG1fY29uc3RydWN0aW9uRXJyb3JDb2Rl
LCB2bS0+c3RhY2tMaW1pdCgpKTsKKyAgICBZYXJyOjpZYXJyUGF0dGVybiBwYXR0ZXJuKG1fcGF0
dGVyblN0cmluZywgbV9mbGFncywgbV9jb25zdHJ1Y3Rpb25FcnJvckNvZGUpOwogICAgIGlmICho
YXNFcnJvcihtX2NvbnN0cnVjdGlvbkVycm9yQ29kZSkpIHsKLSAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSNpZiBDT01QSUxFUl9RVUlSSyhDT05TSURFUlNfVU5SRUFDSEFC
TEVfQ09ERSkKICAgICAgICAgbV9zdGF0ZSA9IFBhcnNlRXJyb3I7CiAgICAgICAgIHJldHVybjsK
LSNlbmRpZgogICAgIH0KICAgICBBU1NFUlQobV9udW1TdWJwYXR0ZXJucyA9PSBwYXR0ZXJuLm1f
bnVtU3VicGF0dGVybnMpOwogCkBAIC0yNDgsNyArMjQ1LDcgQEAgdm9pZCBSZWdFeHA6OmNvbXBp
bGUoVk0qIHZtLCBZYXJyOjpZYXJyQwogewogICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soY2Vs
bExvY2soKSk7CiAgICAgCi0gICAgWWFycjo6WWFyclBhdHRlcm4gcGF0dGVybihtX3BhdHRlcm5T
dHJpbmcsIG1fZmxhZ3MsIG1fY29uc3RydWN0aW9uRXJyb3JDb2RlLCB2bS0+c3RhY2tMaW1pdCgp
KTsKKyAgICBZYXJyOjpZYXJyUGF0dGVybiBwYXR0ZXJuKG1fcGF0dGVyblN0cmluZywgbV9mbGFn
cywgbV9jb25zdHJ1Y3Rpb25FcnJvckNvZGUpOwogICAgIGlmIChoYXNFcnJvcihtX2NvbnN0cnVj
dGlvbkVycm9yQ29kZSkpIHsKICAgICAgICAgbV9zdGF0ZSA9IFBhcnNlRXJyb3I7CiAgICAgICAg
IHJldHVybjsKQEAgLTMwMiw3ICsyOTksOSBAQCBib29sIFJlZ0V4cDo6bWF0Y2hDb25jdXJyZW50
bHkoCiAgICAgaWYgKCFoYXNDb2RlRm9yKHMuaXM4Qml0KCkgPyBZYXJyOjpDaGFyOCA6IFlhcnI6
OkNoYXIxNikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHBvc2l0aW9uID0gbWF0Y2go
dm0sIHMsIHN0YXJ0T2Zmc2V0LCBvdmVjdG9yKTsKKyAgICBwb3NpdGlvbiA9IG1hdGNoSW5saW5l
PFZlY3RvcjxpbnQ+JiwgWWFycjo6TWF0Y2hGcm9tOjpDb21waWxlclRocmVhZD4odm0sIHMsIHN0
YXJ0T2Zmc2V0LCBvdmVjdG9yKTsKKyAgICBpZiAobV9zdGF0ZSA9PSBQYXJzZUVycm9yKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTMxMCw3ICszMDks
NyBAQCB2b2lkIFJlZ0V4cDo6Y29tcGlsZU1hdGNoT25seShWTSogdm0sIFlhCiB7CiAgICAgYXV0
byBsb2NrZXIgPSBob2xkTG9jayhjZWxsTG9jaygpKTsKICAgICAKLSAgICBZYXJyOjpZYXJyUGF0
dGVybiBwYXR0ZXJuKG1fcGF0dGVyblN0cmluZywgbV9mbGFncywgbV9jb25zdHJ1Y3Rpb25FcnJv
ckNvZGUsIHZtLT5zdGFja0xpbWl0KCkpOworICAgIFlhcnI6OllhcnJQYXR0ZXJuIHBhdHRlcm4o
bV9wYXR0ZXJuU3RyaW5nLCBtX2ZsYWdzLCBtX2NvbnN0cnVjdGlvbkVycm9yQ29kZSk7CiAgICAg
aWYgKGhhc0Vycm9yKG1fY29uc3RydWN0aW9uRXJyb3JDb2RlKSkgewogICAgICAgICBtX3N0YXRl
ID0gUGFyc2VFcnJvcjsKICAgICAgICAgcmV0dXJuOwpAQCAtMzYzLDcgKzM2Miw3IEBAIGJvb2wg
UmVnRXhwOjptYXRjaENvbmN1cnJlbnRseShWTSYgdm0sIGMKICAgICBpZiAoIWhhc01hdGNoT25s
eUNvZGVGb3Iocy5pczhCaXQoKSA/IFlhcnI6OkNoYXI4IDogWWFycjo6Q2hhcjE2KSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmVzdWx0ID0gbWF0Y2godm0sIHMsIHN0YXJ0T2Zmc2V0
KTsKKyAgICByZXN1bHQgPSBtYXRjaElubGluZTxZYXJyOjpNYXRjaEZyb206OkNvbXBpbGVyVGhy
ZWFkPih2bSwgcywgc3RhcnRPZmZzZXQpOwogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAuaAkocmV2aXNpb24gMjU4ODY1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmgJKHdvcmtpbmcgY29weSkKQEAg
LTg2LDggKzg2LDkgQEAgcHVibGljOgogICAgIGJvb2wgbWF0Y2hDb25jdXJyZW50bHkoVk0mLCBj
b25zdCBTdHJpbmcmLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgTWF0Y2hSZXN1bHQmKTsKIAogICAg
IC8vIENhbGwgdGhlc2UgdmVyc2lvbnMgb2YgdGhlIG1hdGNoIGZ1bmN0aW9ucyBpZiB5b3UncmUg
ZGVzcGVyYXRlIGZvciBwZXJmb3JtYW5jZS4KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWZWN0b3JU
eXBlPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZlY3RvclR5cGUsIFlhcnI6Ok1hdGNoRnJvbSB0
aHJlYWQgPSBZYXJyOjpNYXRjaEZyb206OlZNVGhyZWFkPgogICAgIGludCBtYXRjaElubGluZShW
TSYsIGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCBWZWN0b3JUeXBlJiBvdmVj
dG9yKTsKKyAgICB0ZW1wbGF0ZTxZYXJyOjpNYXRjaEZyb20gdGhyZWFkID0gWWFycjo6TWF0Y2hG
cm9tOjpWTVRocmVhZD4KICAgICBNYXRjaFJlc3VsdCBtYXRjaElubGluZShWTSYsIGNvbnN0IFN0
cmluZyYsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0KTsKICAgICAKICAgICB1bnNpZ25lZCBudW1TdWJw
YXR0ZXJucygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtU3VicGF0dGVybnM7IH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cElubGluZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBJbmxpbmVzLmgJKHJldmlzaW9uIDI1
ODg2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cElubGluZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtODYsMzggKzg2LDYgQEAgQUxXQVlTX0lOTElORSBib29sIFJlZ0V4
cDo6aGFzQ29kZUZvcihZYQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotY2xhc3MgUGF0dGVybkNv
bnRleHRCdWZmZXJIb2xkZXIgewotICAgIFdURl9GT1JCSURfSEVBUF9BTExPQ0FUSU9OOwotcHVi
bGljOgotICAgIFBhdHRlcm5Db250ZXh0QnVmZmVySG9sZGVyKFZNJiB2bSwgYm9vbCBuZWVkQnVm
ZmVyKQotICAgICAgICA6IG1fdm0odm0pCi0gICAgewotI2lmIEVOQUJMRShZQVJSX0pJVF9BTExf
UEFSRU5TX0VYUFJFU1NJT05TKQotICAgICAgICBpZiAobmVlZEJ1ZmZlcikKLSAgICAgICAgICAg
IG1fYnVmZmVyID0gbV92bS5hY3F1aXJlUmVnRXhwUGF0dGVybkNvbnRleEJ1ZmZlcigpOwotI2Vs
c2UKLSAgICAgICAgVU5VU0VEX1BBUkFNKG5lZWRCdWZmZXIpOwotI2VuZGlmCi0gICAgfQotCi0g
ICAgflBhdHRlcm5Db250ZXh0QnVmZmVySG9sZGVyKCkKLSAgICB7Ci0jaWYgRU5BQkxFKFlBUlJf
SklUX0FMTF9QQVJFTlNfRVhQUkVTU0lPTlMpCi0gICAgICAgIGlmIChidWZmZXIoKSkKLSAgICAg
ICAgICAgIG1fdm0ucmVsZWFzZVJlZ0V4cFBhdHRlcm5Db250ZXhCdWZmZXIoKTsKLSNlbHNlCi0g
ICAgICAgIFVOVVNFRF9QQVJBTShtX3ZtKTsKLSNlbmRpZgotICAgIH0KLQotICAgIHZvaWQqIGJ1
ZmZlcigpIHsgcmV0dXJuIG1fYnVmZmVyOyB9Ci0gICAgdW5zaWduZWQgc2l6ZSgpIHsgcmV0dXJu
IGJ1ZmZlcigpID8gVk06OnBhdHRlcm5Db250ZXh0QnVmZmVyU2l6ZSA6IDA7IH0KLQotcHJpdmF0
ZToKLSAgICBWTSYgbV92bTsKLSAgICB2b2lkKiBtX2J1ZmZlciB7IG51bGxwdHIgfTsKLX07Ci0K
IEFMV0FZU19JTkxJTkUgdm9pZCBSZWdFeHA6OmNvbXBpbGVJZk5lY2Vzc2FyeShWTSYgdm0sIFlh
cnI6OllhcnJDaGFyU2l6ZSBjaGFyU2l6ZSkKIHsKICAgICBpZiAoaGFzQ29kZUZvcihjaGFyU2l6
ZSkpCkBAIC0xMjksNyArOTcsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgUmVnRXhwOjpjb21waWxl
SWZOZWNlCiAgICAgY29tcGlsZSgmdm0sIGNoYXJTaXplKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgVmVjdG9yVHlwZT4KK3RlbXBsYXRlPHR5cGVuYW1lIFZlY3RvclR5cGUsIFlhcnI6Ok1hdGNo
RnJvbSBtYXRjaEZyb20+CiBBTFdBWVNfSU5MSU5FIGludCBSZWdFeHA6Om1hdGNoSW5saW5lKFZN
JiB2bSwgY29uc3QgU3RyaW5nJiBzLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgVmVjdG9yVHlwZSYg
b3ZlY3RvcikKIHsKICNpZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcpCkBAIC0xNjIsMTkgKzEzMCwy
MiBAQCBBTFdBWVNfSU5MSU5FIGludCBSZWdFeHA6Om1hdGNoSW5saW5lKFZNCiAgICAgaWYgKG1f
c3RhdGUgPT0gSklUQ29kZSkgewogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQobV9yZWdF
eHBKSVRDb2RlKTsKLSAgICAgICAgICAgIFBhdHRlcm5Db250ZXh0QnVmZmVySG9sZGVyIHBhdHRl
cm5Db250ZXh0QnVmZmVySG9sZGVyKHZtLCBtX3JlZ0V4cEpJVENvZGUtPnVzZXNQYXR0ZXJuQ29u
dGV4dEJ1ZmZlcigpKTsKKyAgICAgICAgICAgIFlhcnI6Ok1hdGNoaW5nQ29udGV4dEhvbGRlciBy
ZWdFeHBDb250ZXh0KHZtLCBtX3JlZ0V4cEpJVENvZGUuZ2V0KCksIG1hdGNoRnJvbSk7CiAKICAg
ICAgICAgICAgIGlmIChzLmlzOEJpdCgpKQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1fcmVn
RXhwSklUQ29kZS0+ZXhlY3V0ZShzLmNoYXJhY3RlcnM4KCksIHN0YXJ0T2Zmc2V0LCBzLmxlbmd0
aCgpLCBvZmZzZXRWZWN0b3IsIHBhdHRlcm5Db250ZXh0QnVmZmVySG9sZGVyLmJ1ZmZlcigpLCBw
YXR0ZXJuQ29udGV4dEJ1ZmZlckhvbGRlci5zaXplKCkpLnN0YXJ0OworICAgICAgICAgICAgICAg
IHJlc3VsdCA9IG1fcmVnRXhwSklUQ29kZS0+ZXhlY3V0ZShzLmNoYXJhY3RlcnM4KCksIHN0YXJ0
T2Zmc2V0LCBzLmxlbmd0aCgpLCBvZmZzZXRWZWN0b3IsICZyZWdFeHBDb250ZXh0KS5zdGFydDsK
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBtX3JlZ0V4cEpJVENv
ZGUtPmV4ZWN1dGUocy5jaGFyYWN0ZXJzMTYoKSwgc3RhcnRPZmZzZXQsIHMubGVuZ3RoKCksIG9m
ZnNldFZlY3RvciwgcGF0dGVybkNvbnRleHRCdWZmZXJIb2xkZXIuYnVmZmVyKCksIHBhdHRlcm5D
b250ZXh0QnVmZmVySG9sZGVyLnNpemUoKSkuc3RhcnQ7CisgICAgICAgICAgICAgICAgcmVzdWx0
ID0gbV9yZWdFeHBKSVRDb2RlLT5leGVjdXRlKHMuY2hhcmFjdGVyczE2KCksIHN0YXJ0T2Zmc2V0
LCBzLmxlbmd0aCgpLCBvZmZzZXRWZWN0b3IsICZyZWdFeHBDb250ZXh0KS5zdGFydDsKICAgICAg
ICAgfQogCiAgICAgICAgIGlmIChyZXN1bHQgPT0gWWFycjo6SlNSZWdFeHBKSVRDb2RlRmFpbHVy
ZSkgewogICAgICAgICAgICAgLy8gSklUJ2VkIGNvZGUgY291bGRuJ3QgaGFuZGxlIGV4cHJlc3Np
b24sIHNvIHB1bnQgYmFjayB0byB0aGUgaW50ZXJwcmV0ZXIuCiAgICAgICAgICAgICBieXRlQ29k
ZUNvbXBpbGVJZk5lY2Vzc2FyeSgmdm0pOwotICAgICAgICAgICAgaWYgKG1fc3RhdGUgPT0gUGFy
c2VFcnJvcikKKyAgICAgICAgICAgIGlmIChtX3N0YXRlID09IFBhcnNlRXJyb3IpIHsKKyAgICAg
ICAgICAgICAgICBpZiAobWF0Y2hGcm9tID09IFlhcnI6Ok1hdGNoRnJvbTo6Q29tcGlsZXJUaHJl
YWQpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgICAgICByZXR1
cm4gdGhyb3dFcnJvcigpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgcmVzdWx0ID0gWWFy
cjo6aW50ZXJwcmV0KG1fcmVnRXhwQnl0ZWNvZGUuZ2V0KCksIHMsIHN0YXJ0T2Zmc2V0LCByZWlu
dGVycHJldF9jYXN0PHVuc2lnbmVkKj4ob2Zmc2V0VmVjdG9yKSk7CiAgICAgICAgIH0KIApAQCAt
MjYwLDYgKzIzMSw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBSZWdFeHA6OmNvbXBpbGVJZk5lY2UK
ICAgICBjb21waWxlTWF0Y2hPbmx5KCZ2bSwgY2hhclNpemUpOwogfQogCit0ZW1wbGF0ZTxZYXJy
OjpNYXRjaEZyb20gbWF0Y2hGcm9tPgogQUxXQVlTX0lOTElORSBNYXRjaFJlc3VsdCBSZWdFeHA6
Om1hdGNoSW5saW5lKFZNJiB2bSwgY29uc3QgU3RyaW5nJiBzLCB1bnNpZ25lZCBzdGFydE9mZnNl
dCkKIHsKICNpZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcpCkBAIC0yODksMTEgKzI2MSwxMiBAQCBB
TFdBWVNfSU5MSU5FIE1hdGNoUmVzdWx0IFJlZ0V4cDo6bWF0Y2hJCiAgICAgaWYgKG1fc3RhdGUg
PT0gSklUQ29kZSkgewogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQobV9yZWdFeHBKSVRD
b2RlKTsKLSAgICAgICAgICAgIFBhdHRlcm5Db250ZXh0QnVmZmVySG9sZGVyIHBhdHRlcm5Db250
ZXh0QnVmZmVySG9sZGVyKHZtLCBtX3JlZ0V4cEpJVENvZGUtPnVzZXNQYXR0ZXJuQ29udGV4dEJ1
ZmZlcigpKTsKKyAgICAgICAgICAgIFlhcnI6Ok1hdGNoaW5nQ29udGV4dEhvbGRlciByZWdFeHBD
b250ZXh0KHZtLCBtX3JlZ0V4cEpJVENvZGUuZ2V0KCksIG1hdGNoRnJvbSk7CisKICAgICAgICAg
ICAgIGlmIChzLmlzOEJpdCgpKQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1fcmVnRXhwSklU
Q29kZS0+ZXhlY3V0ZShzLmNoYXJhY3RlcnM4KCksIHN0YXJ0T2Zmc2V0LCBzLmxlbmd0aCgpLCBw
YXR0ZXJuQ29udGV4dEJ1ZmZlckhvbGRlci5idWZmZXIoKSwgcGF0dGVybkNvbnRleHRCdWZmZXJI
b2xkZXIuc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBtX3JlZ0V4cEpJVENvZGUt
PmV4ZWN1dGUocy5jaGFyYWN0ZXJzOCgpLCBzdGFydE9mZnNldCwgcy5sZW5ndGgoKSwgJnJlZ0V4
cENvbnRleHQpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1f
cmVnRXhwSklUQ29kZS0+ZXhlY3V0ZShzLmNoYXJhY3RlcnMxNigpLCBzdGFydE9mZnNldCwgcy5s
ZW5ndGgoKSwgcGF0dGVybkNvbnRleHRCdWZmZXJIb2xkZXIuYnVmZmVyKCksIHBhdHRlcm5Db250
ZXh0QnVmZmVySG9sZGVyLnNpemUoKSk7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9yZWdF
eHBKSVRDb2RlLT5leGVjdXRlKHMuY2hhcmFjdGVyczE2KCksIHN0YXJ0T2Zmc2V0LCBzLmxlbmd0
aCgpLCAmcmVnRXhwQ29udGV4dCk7CiAgICAgICAgIH0KIAogI2lmIEVOQUJMRShSRUdFWFBfVFJB
Q0lORykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJyLmgJKHJldmlzaW9uIDI1ODg2NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnIuaAkod29ya2luZyBjb3B5KQpAQCAt
NDksNiArNDksNDggQEAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBvZmZzZXROb01hdGNoIAog
Ly8gYXZvaWQgc3BlbmRpbmcgZXhwb25lbnRpYWwgdGltZSBvbiBjb21wbGV4IHJlZ3VsYXIgZXhw
cmVzc2lvbnMuCiBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1hdGNoTGltaXQgPSAxMDAwMDAw
OwogCisvKiAgJiYmJgorY2xhc3MgUmVnRXhwTWF0Y2hpbmdDb250ZXh0IHsKK3B1YmxpYzoKKyAg
ICBSZWdFeHBNYXRjaGluZ0NvbnRleHQodm9pZCogc3RhY2tMaW1pdCkKKyAgICAgICAgOiBtX3N0
YWNrTGltaXQoc3RhY2tMaW1pdCkKKyNpZiBFTkFCTEUoWUFSUl9KSVQpCisgICAgICAgICwgbV9w
YXR0ZXJuQ29udGV4dEJ1ZmZlcihudWxscHRyKQorICAgICAgICAsIG1fcGF0dGVybkNvbnRleHRC
dWZmZXJTaXplKDApCisjZW5kaWYKKyAgICB7IH0KKworICAgIHZvaWQqIHN0YWNrTGltaXQoKSB7
IHJldHVybiBtX3N0YWNrTGltaXQ7IH0KKworI2lmIEVOQUJMRShZQVJSX0pJVCkKKyAgICBzdGF0
aWMgcHRyZGlmZl90IG9mZnNldE9mU3RhY2tMaW1pdCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihSZWdFeHBNYXRjaGluZ0NvbnRleHQsIG1fc3RhY2tMaW1pdCk7IH0KKyAgICAKKyAgICB2b2lk
IHNldFBhdHRlcm5Db250ZXh0KHZvaWQqIHBhdHRlcm5Db250ZXh0QnVmZmVyLCB1bnNpZ25lZCBw
YXR0ZXJuQ29udGV4dEJ1ZmZlclNpemUpCisgICAgeworICAgICAgICBtX3BhdHRlcm5Db250ZXh0
QnVmZmVyID0gcGF0dGVybkNvbnRleHRCdWZmZXI7CisgICAgICAgIG1fcGF0dGVybkNvbnRleHRC
dWZmZXJTaXplID0gcGF0dGVybkNvbnRleHRCdWZmZXJTaXplOworICAgIH0KKworICAgIHZvaWQg
Y2xlYXJQYXR0ZXJuQ29udGV4dCgpCisgICAgeworICAgICAgICBtX3BhdHRlcm5Db250ZXh0QnVm
ZmVyID0gbnVsbHB0cjsKKyAgICAgICAgbV9wYXR0ZXJuQ29udGV4dEJ1ZmZlclNpemUgPSAwOwor
ICAgIH0KKworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZQYXR0ZXJuQ29udGV4dEJ1ZmZl
cigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihSZWdFeHBNYXRjaGluZ0NvbnRleHQsIG1fcGF0
dGVybkNvbnRleHRCdWZmZXIpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlBhdHRl
cm5Db250ZXh0QnVmZmVyU2l6ZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihSZWdFeHBNYXRj
aGluZ0NvbnRleHQsIG1fcGF0dGVybkNvbnRleHRCdWZmZXJTaXplKTsgfQorI2VuZGlmCisKK3By
aXZhdGU6CisgICAgdm9pZCogbV9zdGFja0xpbWl0OworCisjaWYgRU5BQkxFKFlBUlJfSklUKQor
ICAgIHZvaWQqIG1fcGF0dGVybkNvbnRleHRCdWZmZXI7CisgICAgdW5zaWduZWQgbV9wYXR0ZXJu
Q29udGV4dEJ1ZmZlclNpemU7CisjZW5kaWYKK307CisgKi8KKwogZW51bSBKU1JlZ0V4cFJlc3Vs
dCB7CiAgICAgSlNSZWdFeHBNYXRjaCA9IDEsCiAgICAgSlNSZWdFeHBOb01hdGNoID0gMCwKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJJbnRlcnByZXRlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckludGVycHJldGVyLmNwcAko
cmV2aXNpb24gMjU4ODY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckludGVy
cHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI3Miw2ICsxMjcyLDkgQEAgcHVibGljOgog
I2RlZmluZSBjdXJyZW50VGVybSgpIChkaXNqdW5jdGlvbi0+dGVybXNbY29udGV4dC0+dGVybV0p
CiAgICAgSlNSZWdFeHBSZXN1bHQgbWF0Y2hEaXNqdW5jdGlvbihCeXRlRGlzanVuY3Rpb24qIGRp
c2p1bmN0aW9uLCBEaXNqdW5jdGlvbkNvbnRleHQqIGNvbnRleHQsIGJvb2wgYnRyYWNrID0gZmFs
c2UpCiAgICAgeworICAgICAgICBpZiAoVU5MSUtFTFkoIWlzU2FmZVRvUmVjdXJzZSgpKSkKKyAg
ICAgICAgICAgIHJldHVybiBKU1JlZ0V4cEVycm9yTm9NZW1vcnk7CisKICAgICAgICAgaWYgKCEt
LXJlbWFpbmluZ01hdGNoQ291bnQpCiAgICAgICAgICAgICByZXR1cm4gSlNSZWdFeHBFcnJvckhp
dExpbWl0OwogCkBAIC0xNjY3LDEwICsxNjcwLDEzIEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZh
dGU6CisgICAgaW5saW5lIGJvb2wgaXNTYWZlVG9SZWN1cnNlKCkgeyByZXR1cm4gbV9zdGFja0No
ZWNrLmlzU2FmZVRvUmVjdXJzZSgpOyB9CisKICAgICBCeXRlY29kZVBhdHRlcm4qIHBhdHRlcm47
CiAgICAgYm9vbCB1bmljb2RlOwogICAgIHVuc2lnbmVkKiBvdXRwdXQ7CiAgICAgSW5wdXRTdHJl
YW0gaW5wdXQ7CisgICAgU3RhY2tDaGVjayBtX3N0YWNrQ2hlY2s7CiAgICAgV1RGOjpCdW1wUG9p
bnRlclBvb2wqIGFsbG9jYXRvclBvb2wgeyBudWxscHRyIH07CiAgICAgdW5zaWduZWQgc3RhcnRP
ZmZzZXQ7CiAgICAgdW5zaWduZWQgcmVtYWluaW5nTWF0Y2hDb3VudDsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwCShyZXZpc2lvbiAyNTg4NjUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTgg
KzI2LDQ4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiWWFyckpJVC5oIgogCi0j
aW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAjaW5j
bHVkZSAiT3B0aW9ucy5oIgogI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiWWFyci5oIgogI2lu
Y2x1ZGUgIllhcnJDYW5vbmljYWxpemUuaCIKICNpbmNsdWRlICJZYXJyRGlzYXNzZW1ibGVyLmgi
CisjaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+
CisKIAogI2lmIEVOQUJMRShZQVJSX0pJVCkKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBZ
YXJyIHsKIAorTWF0Y2hpbmdDb250ZXh0SG9sZGVyOjpNYXRjaGluZ0NvbnRleHRIb2xkZXIoVk0m
IHZtLCBZYXJyQ29kZUJsb2NrKiB5YXJyQ29kZUJsb2NrLCBNYXRjaEZyb20gbWF0Y2hGcm9tKQor
ICAgIDogbV92bSh2bSkKK3sKKyAgICBpZiAobWF0Y2hGcm9tID09IE1hdGNoRnJvbTo6Vk1UaHJl
YWQpCisgICAgICAgIG1fc3RhY2tMaW1pdCA9IHZtLnNvZnRTdGFja0xpbWl0KCk7CisgICAgZWxz
ZSB7CisgICAgICAgIFN0YWNrQm91bmRzIHN0YWNrID0gVGhyZWFkOjpjdXJyZW50KCkuc3RhY2so
KTsKKyAgICAgICAgbV9zdGFja0xpbWl0ID0gc3RhY2sucmVjdXJzaW9uTGltaXQoT3B0aW9uczo6
cmVzZXJ2ZWRab25lU2l6ZSgpKTsKKyAgICB9CisKKyNpZiBFTkFCTEUoWUFSUl9KSVRfQUxMX1BB
UkVOU19FWFBSRVNTSU9OUykKKyAgICBpZiAoeWFyckNvZGVCbG9jay0+dXNlc1BhdHRlcm5Db250
ZXh0QnVmZmVyKCkpIHsKKyAgICAgICAgbV9wYXR0ZXJuQ29udGV4dEJ1ZmZlciA9IG1fdm0uYWNx
dWlyZVJlZ0V4cFBhdHRlcm5Db250ZXhCdWZmZXIoKTsKKyAgICAgICAgbV9wYXR0ZXJuQ29udGV4
dEJ1ZmZlclNpemUgPSBWTTo6cGF0dGVybkNvbnRleHRCdWZmZXJTaXplOworICAgIH0KKyNlbHNl
CisgICAgVU5VU0VEX1BBUkFNKHlhcnJDb2RlQmxvY2spOworI2VuZGlmCit9CisKK01hdGNoaW5n
Q29udGV4dEhvbGRlcjo6fk1hdGNoaW5nQ29udGV4dEhvbGRlcigpCit7CisjaWYgRU5BQkxFKFlB
UlJfSklUX0FMTF9QQVJFTlNfRVhQUkVTU0lPTlMpCisgICAgaWYgKG1fcGF0dGVybkNvbnRleHRC
dWZmZXIpCisgICAgICAgIG1fdm0ucmVsZWFzZVJlZ0V4cFBhdHRlcm5Db250ZXhCdWZmZXIoKTsK
KyNlbmRpZgorfQorCiB0ZW1wbGF0ZTxZYXJySklUQ29tcGlsZU1vZGUgY29tcGlsZU1vZGU+CiBj
bGFzcyBZYXJyR2VuZXJhdG9yIDogcHVibGljIFlhcnJKSVRJbmZvLCBwcml2YXRlIE1hY3JvQXNz
ZW1ibGVyIHsKIApAQCAtNjAsNyArOTAsOCBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIDogcHVibGlj
IFlhcnJKSVRJbmZvCiAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgaW5kZXggPSBBUk02NFJl
Z2lzdGVyczo6eDE7CiAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgbGVuZ3RoID0gQVJNNjRS
ZWdpc3RlcnM6OngyOwogICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIG91dHB1dCA9IEFSTTY0
UmVnaXN0ZXJzOjp4MzsKLSAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBmcmVlbGlzdFJlZ2lz
dGVyID0gQVJNNjRSZWdpc3RlcnM6Ong0OworICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIG1h
dGNoaW5nQ29udGV4dCA9IEFSTTY0UmVnaXN0ZXJzOjp4NDsKKyAgICBzdGF0aWMgY29uc3QgUmVn
aXN0ZXJJRCBmcmVlbGlzdFJlZ2lzdGVyID0gQVJNNjRSZWdpc3RlcnM6Ong0OyAvLyBMb2FkZWQg
ZnJvbSB0aGUgTWF0Y2hpbmdDb250ZXh0SG9sZGVyIGluIHRoZSBwcm9sb2d1ZS4KICAgICBzdGF0
aWMgY29uc3QgUmVnaXN0ZXJJRCBmcmVlbGlzdFNpemVSZWdpc3RlciA9IEFSTTY0UmVnaXN0ZXJz
Ojp4NTsgLy8gT25seSB1c2VkIGR1cmluZyBpbml0aWFsaXphdGlvbi4KIAogICAgIC8vIFNjcmF0
Y2ggcmVnaXN0ZXJzCkBAIC0xMDEsNyArMTMyLDggQEAgY2xhc3MgWWFyckdlbmVyYXRvciA6IHB1
YmxpYyBZYXJySklUSW5mbwogICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIGluZGV4ID0gWDg2
UmVnaXN0ZXJzOjplc2k7CiAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgbGVuZ3RoID0gWDg2
UmVnaXN0ZXJzOjplZHg7CiAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgb3V0cHV0ID0gWDg2
UmVnaXN0ZXJzOjplY3g7Ci0gICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgZnJlZWxpc3RSZWdp
c3RlciA9IFg4NlJlZ2lzdGVyczo6cjg7CisgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgbWF0
Y2hpbmdDb250ZXh0ID0gWDg2UmVnaXN0ZXJzOjpyODsKKyAgICBzdGF0aWMgY29uc3QgUmVnaXN0
ZXJJRCBmcmVlbGlzdFJlZ2lzdGVyID0gWDg2UmVnaXN0ZXJzOjpyODsgLy8gTG9hZGVkIGZyb20g
dGhlIE1hdGNoaW5nQ29udGV4dEhvbGRlciBpbiB0aGUgcHJvbG9ndWUuCiAgICAgc3RhdGljIGNv
bnN0IFJlZ2lzdGVySUQgZnJlZWxpc3RTaXplUmVnaXN0ZXIgPSBYODZSZWdpc3RlcnM6OnI5OyAv
LyBPbmx5IHVzZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uLgogI2Vsc2UKICAgICAvLyBJZiB0aGUg
cmV0dXJuIHZhbHVlIGRvZXNuJ3QgZml0IGluIDY0Yml0cywgaXRzIGRlc3RpbmF0aW9uIGlzIHBv
aW50ZWQgYnkgcmN4IGFuZCB0aGUgcGFyYW1ldGVycyBhcmUgc2hpZnRlZC4KQEAgLTIyMCw2ICsy
NTIsOSBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIDogcHVibGljIFlhcnJKSVRJbmZvCiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KIAorICAgICAgICBsb2FkMzIoQWRkcmVzcyhtYXRjaGlu
Z0NvbnRleHQsIE1hdGNoaW5nQ29udGV4dEhvbGRlcjo6b2Zmc2V0T2ZQYXR0ZXJuQ29udGV4dEJ1
ZmZlclNpemUoKSksIGZyZWVsaXN0U2l6ZVJlZ2lzdGVyKTsKKyAgICAgICAgLy8gTm90ZSB0aGF0
IG1hdGNoaW5nQ29udGV4dCBhbmQgZnJlZWxpc3RSZWdpc3RlciBhcmUgbGlrZWx5IHRoZSBzYW1l
IHJlZ2lzdGVyLgorICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWF0Y2hpbmdDb250ZXh0LCBNYXRj
aGluZ0NvbnRleHRIb2xkZXI6Om9mZnNldE9mUGF0dGVybkNvbnRleHRCdWZmZXIoKSksIGZyZWVs
aXN0UmVnaXN0ZXIpOwogICAgICAgICBKdW1wIGVtcHR5RnJlZUxpc3QgPSBicmFuY2hUZXN0UHRy
KFplcm8sIGZyZWVsaXN0UmVnaXN0ZXIpOwogICAgICAgICBtb3ZlKGZyZWVsaXN0UmVnaXN0ZXIs
IHBhcmVuQ29udGV4dFBvaW50ZXIpOwogICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHBhcmVu
Q29udGV4dFNpemUpLCBmcmVlbGlzdFJlZ2lzdGVyLCBuZXh0UGFyZW5Db250ZXh0UG9pbnRlcik7
CkBAIC02MzUsMTIgKzY3MCw2IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgOiBwdWJsaWMgWWFyckpJ
VEluZm8KICAgICAgICAgY2FsbEZyYW1lU2l6ZSA9IChjYWxsRnJhbWVTaXplICsgMHgzZikgJiB+
MHgzZjsKICAgICAgICAgcmV0dXJuIGNhbGxGcmFtZVNpemU7CiAgICAgfQotICAgIHZvaWQgaW5p
dENhbGxGcmFtZSgpCi0gICAgewotICAgICAgICB1bnNpZ25lZCBjYWxsRnJhbWVTaXplSW5CeXRl
cyA9IGFsaWduQ2FsbEZyYW1lU2l6ZUluQnl0ZXMobV9wYXR0ZXJuLm1fYm9keS0+bV9jYWxsRnJh
bWVTaXplKTsKLSAgICAgICAgaWYgKGNhbGxGcmFtZVNpemVJbkJ5dGVzKQotICAgICAgICAgICAg
c3ViUHRyKEltbTMyKGNhbGxGcmFtZVNpemVJbkJ5dGVzKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIp
OwotICAgIH0KICAgICB2b2lkIHJlbW92ZUNhbGxGcmFtZSgpCiAgICAgewogICAgICAgICB1bnNp
Z25lZCBjYWxsRnJhbWVTaXplSW5CeXRlcyA9IGFsaWduQ2FsbEZyYW1lU2l6ZUluQnl0ZXMobV9w
YXR0ZXJuLm1fYm9keS0+bV9jYWxsRnJhbWVTaXplKTsKQEAgLTM4NTEsNiArMzg4MCwyOCBAQCBw
dWJsaWM6CiAgICAgICAgIGdlbmVyYXRlRmFpbFJldHVybigpOwogICAgICAgICBoYXNJbnB1dC5s
aW5rKHRoaXMpOwogCisgICAgICAgIHVuc2lnbmVkIGNhbGxGcmFtZVNpemVJbkJ5dGVzID0gYWxp
Z25DYWxsRnJhbWVTaXplSW5CeXRlcyhtX3BhdHRlcm4ubV9ib2R5LT5tX2NhbGxGcmFtZVNpemUp
OworICAgICAgICBpZiAoY2FsbEZyYW1lU2l6ZUluQnl0ZXMpIHsKKyAgICAgICAgICAgIC8vIENo
ZWNrIHN0YWNrIHNpemUKKyAgICAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLWNhbGxGcmFt
ZVNpemVJbkJ5dGVzKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJlZ1QwKTsKKyNpZiBDUFUoQVJN
X1RIVU1CMikKKyAgICAgICAgICAgIFJlZ2lzdGVySUQgbWF0Y2hpbmdDb250ZXh0ID0gcmVnVDE7
CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIDQgKiBz
aXplb2YodWludDMyX3QpKSwgbWF0Y2hpbmdDb250ZXh0KTsKKyNlbGlmIENQVShNSVBTKQorICAg
ICAgICAgICAgUmVnaXN0ZXJJRCBtYXRjaGluZ0NvbnRleHQgPSByZWdUMTsKKyAgICAgICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciksIG1hdGNoaW5nQ29udGV4dCk7
CisjZW5kaWYKKyAgICAgICAgICAgIEp1bXAgc3RhY2tPayA9IGJyYW5jaFB0cihCZWxvd09yRXF1
YWwsIEFkZHJlc3MobWF0Y2hpbmdDb250ZXh0LCBNYXRjaGluZ0NvbnRleHRIb2xkZXI6Om9mZnNl
dE9mU3RhY2tMaW1pdCgpKSwgcmVnVDApOworCisgICAgICAgICAgICAvLyBFeGNlZWRlZCBzdGFj
ayBsaW1pdCwgcHVudCB0byB0aGUgaW50ZXJwcmV0ZXIuCisgICAgICAgICAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIoKHZvaWQqKXN0YXRpY19jYXN0PHNpemVfdD4oLTIpKSwgcmV0dXJuUmVnaXN0ZXIp
OworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJldHVyblJlZ2lzdGVyMik7Cisg
ICAgICAgICAgICBnZW5lcmF0ZVJldHVybigpOworCisgICAgICAgICAgICBzdGFja09rLmxpbmso
dGhpcyk7CisgICAgICAgICAgICBtb3ZlKHJlZ1QwLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Cisg
ICAgICAgIH0KKwogI2lmZGVmIEpJVF9VTklDT0RFX0VYUFJFU1NJT05TCiAgICAgICAgIGlmICht
X2RlY29kZVN1cnJvZ2F0ZVBhaXJzKQogICAgICAgICAgICAgZ2V0RWZmZWN0aXZlQWRkcmVzcyhC
YXNlSW5kZXgoaW5wdXQsIGxlbmd0aCwgVGltZXNUd28pLCBlbmRPZlN0cmluZ0FkZHJlc3MpOwpA
QCAtMzg2OSw4ICszOTIwLDYgQEAgcHVibGljOgogICAgICAgICBpZiAoIW1fcGF0dGVybi5tX2Jv
ZHktPm1faGFzRml4ZWRTaXplKQogICAgICAgICAgICAgc2V0TWF0Y2hTdGFydChpbmRleCk7CiAK
LSAgICAgICAgaW5pdENhbGxGcmFtZSgpOwotCiAjaWYgRU5BQkxFKFlBUlJfSklUX0FMTF9QQVJF
TlNfRVhQUkVTU0lPTlMpCiAgICAgICAgIGlmIChtX2NvbnRhaW5zTmVzdGVkU3VicGF0dGVybnMp
IHsKICAgICAgICAgICAgIGluaXRQYXJlbkNvbnRleHRGcmVlTGlzdCgpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuaAkocmV2aXNpb24gMjU4ODY1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3
IEBACiAKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKICNpbmNsdWRlICJNYXRj
aFJlc3VsdC5oIgorI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiWWFyci5oIgogI2luY2x1ZGUg
IllhcnJQYXR0ZXJuLmgiCiAKQEAgLTQxLDYgKzQyLDEwIEBAIGNsYXNzIEV4ZWN1dGFibGVQb29s
OwogCiBuYW1lc3BhY2UgWWFyciB7CiAKK2NsYXNzIFlhcnJDb2RlQmxvY2s7CisKK2VudW0gTWF0
Y2hGcm9tIHsgVk1UaHJlYWQsIENvbXBpbGVyVGhyZWFkIH07CisKIGVudW0gY2xhc3MgSklURmFp
bHVyZVJlYXNvbiA6IHVpbnQ4X3QgewogICAgIERlY29kZVN1cnJvZ2F0ZVBhaXIsCiAgICAgQmFj
a1JlZmVyZW5jZSwKQEAgLTUyLDE1ICs1NywzNSBAQCBlbnVtIGNsYXNzIEpJVEZhaWx1cmVSZWFz
b24gOiB1aW50OF90IHsKICAgICBFeGVjdXRhYmxlTWVtb3J5QWxsb2NhdGlvbkZhaWx1cmUsCiB9
OwogCitjbGFzcyBNYXRjaGluZ0NvbnRleHRIb2xkZXIgeworICAgIFdURl9GT1JCSURfSEVBUF9B
TExPQ0FUSU9OOworcHVibGljOgorICAgIE1hdGNoaW5nQ29udGV4dEhvbGRlcihWTSYsIFlhcnJD
b2RlQmxvY2sqLCBNYXRjaEZyb20gbWF0Y2hGcm9tID0gTWF0Y2hGcm9tOjpWTVRocmVhZCk7Cisg
ICAgfk1hdGNoaW5nQ29udGV4dEhvbGRlcigpOworCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZz
ZXRPZlN0YWNrTGltaXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoTWF0Y2hpbmdDb250ZXh0
SG9sZGVyLCBtX3N0YWNrTGltaXQpOyB9CisjaWYgRU5BQkxFKFlBUlJfSklUX0FMTF9QQVJFTlNf
RVhQUkVTU0lPTlMpCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlBhdHRlcm5Db250ZXh0
QnVmZmVyKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKE1hdGNoaW5nQ29udGV4dEhvbGRlciwg
bV9wYXR0ZXJuQ29udGV4dEJ1ZmZlcik7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9m
UGF0dGVybkNvbnRleHRCdWZmZXJTaXplKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKE1hdGNo
aW5nQ29udGV4dEhvbGRlciwgbV9wYXR0ZXJuQ29udGV4dEJ1ZmZlclNpemUpOyB9CisjZW5kaWYK
KworcHJpdmF0ZToKKyAgICBWTSYgbV92bTsKKyAgICB2b2lkKiBtX3N0YWNrTGltaXQ7CisjaWYg
RU5BQkxFKFlBUlJfSklUX0FMTF9QQVJFTlNfRVhQUkVTU0lPTlMpCisgICAgdm9pZCogbV9wYXR0
ZXJuQ29udGV4dEJ1ZmZlciB7IG51bGxwdHIgfTsKKyAgICB1bnNpZ25lZCBtX3BhdHRlcm5Db250
ZXh0QnVmZmVyU2l6ZSB7IDAgfTsKKyNlbmRpZgorfTsKKwogY2xhc3MgWWFyckNvZGVCbG9jayB7
CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
WWFyckNvZGVCbG9jayk7CiAKLSAgICAvLyBUZWNobmljYWxseSBmcmVlUGFyZW5Db250ZXh0IGFu
ZCBwYXJlbkNvbnRleHRTaXplIGFyZSBvbmx5IHVzZWQgaWYgRU5BQkxFKFlBUlJfSklUX0FMTF9Q
QVJFTlNfRVhQUkVTU0lPTlMpIGlzIHNldC4gRm9ydHVuYXRlbHksIGFsbCB0aGUgY2FsbGluZyBj
b252ZW50aW9ucyB3ZSBzdXBwb3J0IGhhdmUgY2FsbGVyIHNhdmUgYXJndW1lbnQgcmVnaXN0ZXJz
LgotICAgIHVzaW5nIFlhcnJKSVRDb2RlOCA9IEVuY29kZWRNYXRjaFJlc3VsdCAoKikoY29uc3Qg
TENoYXIqIGlucHV0LCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoLCBpbnQqIG91dHB1
dCwgdm9pZCogZnJlZVBhcmVuQ29udGV4dCwgdW5zaWduZWQgcGFyZW5Db250ZXh0U2l6ZSkgWUFS
Ul9DQUxMOwotICAgIHVzaW5nIFlhcnJKSVRDb2RlMTYgPSBFbmNvZGVkTWF0Y2hSZXN1bHQgKCop
KGNvbnN0IFVDaGFyKiBpbnB1dCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCwgaW50
KiBvdXRwdXQsIHZvaWQqIGZyZWVQYXJlbkNvbnRleHQsIHVuc2lnbmVkIHBhcmVuQ29udGV4dFNp
emUpIFlBUlJfQ0FMTDsKLSAgICB1c2luZyBZYXJySklUQ29kZU1hdGNoT25seTggPSBFbmNvZGVk
TWF0Y2hSZXN1bHQgKCopKGNvbnN0IExDaGFyKiBpbnB1dCwgdW5zaWduZWQgc3RhcnQsIHVuc2ln
bmVkIGxlbmd0aCwgdm9pZCosIHZvaWQqIGZyZWVQYXJlbkNvbnRleHQsIHVuc2lnbmVkIHBhcmVu
Q29udGV4dFNpemUpIFlBUlJfQ0FMTDsKLSAgICB1c2luZyBZYXJySklUQ29kZU1hdGNoT25seTE2
ID0gRW5jb2RlZE1hdGNoUmVzdWx0ICgqKShjb25zdCBVQ2hhciogaW5wdXQsIHVuc2lnbmVkIHN0
YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIHZvaWQqLCB2b2lkKiBmcmVlUGFyZW5Db250ZXh0LCB1bnNp
Z25lZCBwYXJlbkNvbnRleHRTaXplKSBZQVJSX0NBTEw7CisgICAgdXNpbmcgWWFyckpJVENvZGU4
ID0gRW5jb2RlZE1hdGNoUmVzdWx0ICgqKShjb25zdCBMQ2hhciogaW5wdXQsIHVuc2lnbmVkIHN0
YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIGludCogb3V0cHV0LCBNYXRjaGluZ0NvbnRleHRIb2xkZXIq
IG1hdGNoaW5nQ29udGV4dCkgWUFSUl9DQUxMOworICAgIHVzaW5nIFlhcnJKSVRDb2RlMTYgPSBF
bmNvZGVkTWF0Y2hSZXN1bHQgKCopKGNvbnN0IFVDaGFyKiBpbnB1dCwgdW5zaWduZWQgc3RhcnQs
IHVuc2lnbmVkIGxlbmd0aCwgaW50KiBvdXRwdXQsIE1hdGNoaW5nQ29udGV4dEhvbGRlciogbWF0
Y2hpbmdDb250ZXh0KSBZQVJSX0NBTEw7CisgICAgdXNpbmcgWWFyckpJVENvZGVNYXRjaE9ubHk4
ID0gRW5jb2RlZE1hdGNoUmVzdWx0ICgqKShjb25zdCBMQ2hhciogaW5wdXQsIHVuc2lnbmVkIHN0
YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIHZvaWQqLCBNYXRjaGluZ0NvbnRleHRIb2xkZXIqIG1hdGNo
aW5nQ29udGV4dCkgWUFSUl9DQUxMOworICAgIHVzaW5nIFlhcnJKSVRDb2RlTWF0Y2hPbmx5MTYg
PSBFbmNvZGVkTWF0Y2hSZXN1bHQgKCopKGNvbnN0IFVDaGFyKiBpbnB1dCwgdW5zaWduZWQgc3Rh
cnQsIHVuc2lnbmVkIGxlbmd0aCwgdm9pZCosIE1hdGNoaW5nQ29udGV4dEhvbGRlciogbWF0Y2hp
bmdDb250ZXh0KSBZQVJSX0NBTEw7CiAKIHB1YmxpYzoKICAgICBZYXJyQ29kZUJsb2NrKCkgPSBk
ZWZhdWx0OwpAQCAtODMsMjggKzEwOCwyOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRVc2VzUGF0
dGVybkNvbnRleHRCdWZmZXIoKSB7IG1fdXNlc1BhdHRlcm5Db250ZXh0QnVmZmVyID0gdHJ1ZTsg
fQogI2VuZGlmCiAKLSAgICBNYXRjaFJlc3VsdCBleGVjdXRlKGNvbnN0IExDaGFyKiBpbnB1dCwg
dW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCwgaW50KiBvdXRwdXQsIHZvaWQqIGZyZWVQ
YXJlbkNvbnRleHQsIHVuc2lnbmVkIHBhcmVuQ29udGV4dFNpemUpCisgICAgTWF0Y2hSZXN1bHQg
ZXhlY3V0ZShjb25zdCBMQ2hhciogaW5wdXQsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5n
dGgsIGludCogb3V0cHV0LCBNYXRjaGluZ0NvbnRleHRIb2xkZXIqIG1hdGNoaW5nQ29udGV4dCkK
ICAgICB7CiAgICAgICAgIEFTU0VSVChoYXM4Qml0Q29kZSgpKTsKLSAgICAgICAgcmV0dXJuIE1h
dGNoUmVzdWx0KHVudGFnQ0Z1bmN0aW9uUHRyPFlhcnJKSVRDb2RlOCwgWWFycjhCaXRQdHJUYWc+
KG1fcmVmOC5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkoaW5wdXQsIHN0YXJ0LCBsZW5ndGgs
IG91dHB1dCwgZnJlZVBhcmVuQ29udGV4dCwgcGFyZW5Db250ZXh0U2l6ZSkpOworICAgICAgICBy
ZXR1cm4gTWF0Y2hSZXN1bHQodW50YWdDRnVuY3Rpb25QdHI8WWFyckpJVENvZGU4LCBZYXJyOEJp
dFB0clRhZz4obV9yZWY4LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKShpbnB1dCwgc3RhcnQs
IGxlbmd0aCwgb3V0cHV0LCBtYXRjaGluZ0NvbnRleHQpKTsKICAgICB9CiAKLSAgICBNYXRjaFJl
c3VsdCBleGVjdXRlKGNvbnN0IFVDaGFyKiBpbnB1dCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVk
IGxlbmd0aCwgaW50KiBvdXRwdXQsIHZvaWQqIGZyZWVQYXJlbkNvbnRleHQsIHVuc2lnbmVkIHBh
cmVuQ29udGV4dFNpemUpCisgICAgTWF0Y2hSZXN1bHQgZXhlY3V0ZShjb25zdCBVQ2hhciogaW5w
dXQsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIGludCogb3V0cHV0LCBNYXRjaGlu
Z0NvbnRleHRIb2xkZXIqIG1hdGNoaW5nQ29udGV4dCkKICAgICB7CiAgICAgICAgIEFTU0VSVCho
YXMxNkJpdENvZGUoKSk7Ci0gICAgICAgIHJldHVybiBNYXRjaFJlc3VsdCh1bnRhZ0NGdW5jdGlv
blB0cjxZYXJySklUQ29kZTE2LCBZYXJyMTZCaXRQdHJUYWc+KG1fcmVmMTYuY29kZSgpLmV4ZWN1
dGFibGVBZGRyZXNzKCkpKGlucHV0LCBzdGFydCwgbGVuZ3RoLCBvdXRwdXQsIGZyZWVQYXJlbkNv
bnRleHQsIHBhcmVuQ29udGV4dFNpemUpKTsKKyAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0KHVu
dGFnQ0Z1bmN0aW9uUHRyPFlhcnJKSVRDb2RlMTYsIFlhcnIxNkJpdFB0clRhZz4obV9yZWYxNi5j
b2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkoaW5wdXQsIHN0YXJ0LCBsZW5ndGgsIG91dHB1dCwg
bWF0Y2hpbmdDb250ZXh0KSk7CiAgICAgfQogCi0gICAgTWF0Y2hSZXN1bHQgZXhlY3V0ZShjb25z
dCBMQ2hhciogaW5wdXQsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIHZvaWQqIGZy
ZWVQYXJlbkNvbnRleHQsIHVuc2lnbmVkIHBhcmVuQ29udGV4dFNpemUpCisgICAgTWF0Y2hSZXN1
bHQgZXhlY3V0ZShjb25zdCBMQ2hhciogaW5wdXQsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBs
ZW5ndGgsIE1hdGNoaW5nQ29udGV4dEhvbGRlciogbWF0Y2hpbmdDb250ZXh0KQogICAgIHsKICAg
ICAgICAgQVNTRVJUKGhhczhCaXRDb2RlTWF0Y2hPbmx5KCkpOwotICAgICAgICByZXR1cm4gTWF0
Y2hSZXN1bHQodW50YWdDRnVuY3Rpb25QdHI8WWFyckpJVENvZGVNYXRjaE9ubHk4LCBZYXJyTWF0
Y2hPbmx5OEJpdFB0clRhZz4obV9tYXRjaE9ubHk4LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygp
KShpbnB1dCwgc3RhcnQsIGxlbmd0aCwgMCwgZnJlZVBhcmVuQ29udGV4dCwgcGFyZW5Db250ZXh0
U2l6ZSkpOworICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQodW50YWdDRnVuY3Rpb25QdHI8WWFy
ckpJVENvZGVNYXRjaE9ubHk4LCBZYXJyTWF0Y2hPbmx5OEJpdFB0clRhZz4obV9tYXRjaE9ubHk4
LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKShpbnB1dCwgc3RhcnQsIGxlbmd0aCwgMCwgbWF0
Y2hpbmdDb250ZXh0KSk7CiAgICAgfQogCi0gICAgTWF0Y2hSZXN1bHQgZXhlY3V0ZShjb25zdCBV
Q2hhciogaW5wdXQsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIHZvaWQqIGZyZWVQ
YXJlbkNvbnRleHQsIHVuc2lnbmVkIHBhcmVuQ29udGV4dFNpemUpCisgICAgTWF0Y2hSZXN1bHQg
ZXhlY3V0ZShjb25zdCBVQ2hhciogaW5wdXQsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5n
dGgsIE1hdGNoaW5nQ29udGV4dEhvbGRlciogbWF0Y2hpbmdDb250ZXh0KQogICAgIHsKICAgICAg
ICAgQVNTRVJUKGhhczE2Qml0Q29kZU1hdGNoT25seSgpKTsKLSAgICAgICAgcmV0dXJuIE1hdGNo
UmVzdWx0KHVudGFnQ0Z1bmN0aW9uUHRyPFlhcnJKSVRDb2RlTWF0Y2hPbmx5MTYsIFlhcnJNYXRj
aE9ubHkxNkJpdFB0clRhZz4obV9tYXRjaE9ubHkxNi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3Mo
KSkoaW5wdXQsIHN0YXJ0LCBsZW5ndGgsIDAsIGZyZWVQYXJlbkNvbnRleHQsIHBhcmVuQ29udGV4
dFNpemUpKTsKKyAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0KHVudGFnQ0Z1bmN0aW9uUHRyPFlh
cnJKSVRDb2RlTWF0Y2hPbmx5MTYsIFlhcnJNYXRjaE9ubHkxNkJpdFB0clRhZz4obV9tYXRjaE9u
bHkxNi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkoaW5wdXQsIHN0YXJ0LCBsZW5ndGgsIDAs
IG1hdGNoaW5nQ29udGV4dCkpOwogICAgIH0KIAogI2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lORykK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJQYXR0ZXJuLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJyUGF0dGVybi5jcHAJKHJldmlz
aW9uIDI1ODg2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJQYXR0ZXJuLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQAogI2luY2x1ZGUgIllhcnJQYXJzZXIu
aCIKICNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgot
I2luY2x1ZGUgPHd0Zi9TdGFja1BvaW50ZXIuaD4KKyNpbmNsdWRlIDx3dGYvU3RhY2tDaGVjay5o
PgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAK
QEAgLTQzNiwxMCArNDM2LDkgQEAgcHJpdmF0ZToKIAogY2xhc3MgWWFyclBhdHRlcm5Db25zdHJ1
Y3RvciB7CiBwdWJsaWM6Ci0gICAgWWFyclBhdHRlcm5Db25zdHJ1Y3RvcihZYXJyUGF0dGVybiYg
cGF0dGVybiwgdm9pZCogc3RhY2tMaW1pdCkKKyAgICBZYXJyUGF0dGVybkNvbnN0cnVjdG9yKFlh
cnJQYXR0ZXJuJiBwYXR0ZXJuKQogICAgICAgICA6IG1fcGF0dGVybihwYXR0ZXJuKQogICAgICAg
ICAsIG1fY2hhcmFjdGVyQ2xhc3NDb25zdHJ1Y3RvcihwYXR0ZXJuLmlnbm9yZUNhc2UoKSwgcGF0
dGVybi51bmljb2RlKCkgPyBDYW5vbmljYWxNb2RlOjpVbmljb2RlIDogQ2Fub25pY2FsTW9kZTo6
VUNTMikKLSAgICAgICAgLCBtX3N0YWNrTGltaXQoc3RhY2tMaW1pdCkKICAgICB7CiAgICAgICAg
IGF1dG8gYm9keSA9IG1ha2VVbmlxdWU8UGF0dGVybkRpc2p1bmN0aW9uPigpOwogICAgICAgICBt
X3BhdHRlcm4ubV9ib2R5ID0gYm9keS5nZXQoKTsKQEAgLTExMTgsMjggKzExMTcsMjEgQEAgcHVi
bGljOgogICAgIEVycm9yQ29kZSBlcnJvcigpIHsgcmV0dXJuIG1fZXJyb3I7IH0KIAogcHJpdmF0
ZToKLSAgICBib29sIGlzU2FmZVRvUmVjdXJzZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAo
IW1fc3RhY2tMaW1pdCkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpbnQ4X3Qq
IGN1cnIgPSByZWludGVycHJldF9jYXN0PGludDhfdCo+KGN1cnJlbnRTdGFja1BvaW50ZXIoKSk7
Ci0gICAgICAgIGludDhfdCogbGltaXQgPSByZWludGVycHJldF9jYXN0PGludDhfdCo+KG1fc3Rh
Y2tMaW1pdCk7Ci0gICAgICAgIHJldHVybiBjdXJyID49IGxpbWl0OwotICAgIH0KKyAgICBpbmxp
bmUgYm9vbCBpc1NhZmVUb1JlY3Vyc2UoKSB7IHJldHVybiBtX3N0YWNrQ2hlY2suaXNTYWZlVG9S
ZWN1cnNlKCk7IH0KIAogICAgIFlhcnJQYXR0ZXJuJiBtX3BhdHRlcm47CiAgICAgUGF0dGVybkFs
dGVybmF0aXZlKiBtX2FsdGVybmF0aXZlOwogICAgIENoYXJhY3RlckNsYXNzQ29uc3RydWN0b3Ig
bV9jaGFyYWN0ZXJDbGFzc0NvbnN0cnVjdG9yOwogICAgIFZlY3RvcjxTdHJpbmc+IG1fdW5tYXRj
aGVkTmFtZWRGb3J3YXJkUmVmZXJlbmNlczsKLSAgICB2b2lkKiBtX3N0YWNrTGltaXQ7CisgICAg
U3RhY2tDaGVjayBtX3N0YWNrQ2hlY2s7CiAgICAgRXJyb3JDb2RlIG1fZXJyb3IgeyBFcnJvckNv
ZGU6Ok5vRXJyb3IgfTsKICAgICBib29sIG1faW52ZXJ0Q2hhcmFjdGVyQ2xhc3M7CiAgICAgYm9v
bCBtX2ludmVydFBhcmVudGhldGljYWxBc3NlcnRpb24geyBmYWxzZSB9OwogfTsKIAotRXJyb3JD
b2RlIFlhcnJQYXR0ZXJuOjpjb21waWxlKGNvbnN0IFN0cmluZyYgcGF0dGVyblN0cmluZywgdm9p
ZCogc3RhY2tMaW1pdCkKK0Vycm9yQ29kZSBZYXJyUGF0dGVybjo6Y29tcGlsZShjb25zdCBTdHJp
bmcmIHBhdHRlcm5TdHJpbmcpCiB7Ci0gICAgWWFyclBhdHRlcm5Db25zdHJ1Y3RvciBjb25zdHJ1
Y3RvcigqdGhpcywgc3RhY2tMaW1pdCk7CisgICAgWWFyclBhdHRlcm5Db25zdHJ1Y3RvciBjb25z
dHJ1Y3RvcigqdGhpcyk7CiAKICAgICB7CiAgICAgICAgIEVycm9yQ29kZSBlcnJvciA9IHBhcnNl
KGNvbnN0cnVjdG9yLCBwYXR0ZXJuU3RyaW5nLCB1bmljb2RlKCkpOwpAQCAtMTE4Myw3ICsxMTc1
LDcgQEAgRXJyb3JDb2RlIFlhcnJQYXR0ZXJuOjpjb21waWxlKGNvbnN0IFN0cgogICAgIHJldHVy
biBFcnJvckNvZGU6Ok5vRXJyb3I7CiB9CiAKLVlhcnJQYXR0ZXJuOjpZYXJyUGF0dGVybihjb25z
dCBTdHJpbmcmIHBhdHRlcm4sIE9wdGlvblNldDxGbGFncz4gZmxhZ3MsIEVycm9yQ29kZSYgZXJy
b3IsIHZvaWQqIHN0YWNrTGltaXQpCitZYXJyUGF0dGVybjo6WWFyclBhdHRlcm4oY29uc3QgU3Ry
aW5nJiBwYXR0ZXJuLCBPcHRpb25TZXQ8RmxhZ3M+IGZsYWdzLCBFcnJvckNvZGUmIGVycm9yKQog
ICAgIDogbV9jb250YWluc0JhY2tyZWZlcmVuY2VzKGZhbHNlKQogICAgICwgbV9jb250YWluc0JP
TChmYWxzZSkKICAgICAsIG1fY29udGFpbnNVbnNpZ25lZExlbmd0aFBhdHRlcm4oZmFsc2UpCkBA
IC0xMTkyLDcgKzExODQsNyBAQCBZYXJyUGF0dGVybjo6WWFyclBhdHRlcm4oY29uc3QgU3RyaW5n
JiBwCiAgICAgLCBtX2ZsYWdzKGZsYWdzKQogewogICAgIEFTU0VSVChtX2ZsYWdzICE9IEZsYWdz
OjpEZWxldGVkVmFsdWUpOwotICAgIGVycm9yID0gY29tcGlsZShwYXR0ZXJuLCBzdGFja0xpbWl0
KTsKKyAgICBlcnJvciA9IGNvbXBpbGUocGF0dGVybik7CiB9CiAKIHZvaWQgaW5kZW50Rm9yTmVz
dGluZ0xldmVsKFByaW50U3RyZWFtJiBvdXQsIHVuc2lnbmVkIG5lc3RpbmdEZXB0aCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJQYXR0ZXJuLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyclBhdHRlcm4uaAkocmV2aXNpb24gMjU4ODY1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyclBhdHRlcm4uaAkod29ya2luZyBj
b3B5KQpAQCAtMzg2LDcgKzM4Niw3IEBAIHN0cnVjdCBUZXJtQ2hhaW4gewogCiAKIHN0cnVjdCBZ
YXJyUGF0dGVybiB7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgWWFyclBhdHRlcm4oY29uc3QgU3Ry
aW5nJiBwYXR0ZXJuLCBPcHRpb25TZXQ8RmxhZ3M+LCBFcnJvckNvZGUmLCB2b2lkKiBzdGFja0xp
bWl0ID0gbnVsbHB0cik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgWWFyclBhdHRlcm4oY29uc3Qg
U3RyaW5nJiBwYXR0ZXJuLCBPcHRpb25TZXQ8RmxhZ3M+LCBFcnJvckNvZGUmKTsKIAogICAgIHZv
aWQgcmVzZXRGb3JSZXBhcnNpbmcoKQogICAgIHsKQEAgLTU2NSw3ICs1NjUsNyBAQCBzdHJ1Y3Qg
WWFyclBhdHRlcm4gewogICAgIEhhc2hNYXA8U3RyaW5nLCB1bnNpZ25lZD4gbV9uYW1lZEdyb3Vw
VG9QYXJlbkluZGV4OwogCiBwcml2YXRlOgotICAgIEVycm9yQ29kZSBjb21waWxlKGNvbnN0IFN0
cmluZyYgcGF0dGVyblN0cmluZywgdm9pZCogc3RhY2tMaW1pdCk7CisgICAgRXJyb3JDb2RlIGNv
bXBpbGUoY29uc3QgU3RyaW5nJiBwYXR0ZXJuU3RyaW5nKTsKIAogICAgIENoYXJhY3RlckNsYXNz
KiBhbnljaGFyQ2FjaGVkIHsgbnVsbHB0ciB9OwogICAgIENoYXJhY3RlckNsYXNzKiBuZXdsaW5l
Q2FjaGVkIHsgbnVsbHB0ciB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>394317</attachid>
            <date>2020-03-23 16:04:02 -0700</date>
            <delta_ts>2020-03-23 19:11:27 -0700</delta_ts>
            <desc>Updated patch for EWS</desc>
            <filename>209435-wip2.patch</filename>
            <type>text/plain</type>
            <size>29007</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjU4ODY1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBA
CisyMDIwLTAzLTIzICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIFJlZmFjdG9yIFlBUlIgU3RhY2sgT3ZlcmZsb3cgQ2hlY2tzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDk0MzUKKyAgICAgICAgcmRhcjovL3By
b2JsZW0vNTg5ODgyNTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBSZWZhY3RvcmVkIHN0YWNrIGNoZWNrcyBpbiBZQVJSIGNvZGUgaW5jbHVkaW5nIGFk
ZGluZyBhIHN0YWNrIGNoZWNrIHRvIHRoZSBZQVJSIEpJVCdlZCBjb2RlLgorICAgICAgICBUaGUg
QysrIGNvZGUgaW5jbHVkaW5nIHRoZSBwYXJzZXIsIGJ5dGUgY29kZSBjb21waWxlciBhbmQgaW50
ZXJwcmV0ZXIgbm93IGFsbCB1c2UgU3RhY2tDaGVjay4KKyAgICAgICAgVGhlIEpJVCdlZCBjb2Rl
IG5lZWRzIGEgc3RhY2sgbGltaXQgcGFzc2VkIHZpYSBhIHBhcmFtZXRlciBzaW5jZSB0aGUgSklU
J2VkIGNvZGUgY2FuIGJlIAorICAgICAgICBjYWxsZWQgZnJvbSB0aGUgY29tcGlsZXIgdGhyZWFk
IHdoZW4gY29tcGlsaW5nIERGRyAvIEZUTCBjb2RlLgorCisgICAgICAgIEluc3RlYWQgb2YgYWRk
aW5nIGEgbmV3IHBhcmFtZXRlciwgY29uc29saWRhdGVkIHRoZSB0d28gcGF0dGVybiBjb250ZXh0
IGJ1ZmZlciB2YWx1ZXMsIGJ1ZmZlcgorICAgICAgICBwb2ludGVyIGFuZCBzaXplLCB3aXRoIHRo
ZSBuZXcgc3RhY2sgbGltaXQgaW50byBhIG5ldyBNYXRjaGluZ0NvbnRleHRIb2xkZXIsIGFuIFJB
SUkgb2JqZWN0LgorICAgICAgICBUaGUgTWF0Y2hpbmdDb250ZXh0SG9sZGVyIGNvbnN0cnVjdG9y
IHVzZXMgZWl0aGVyIHRoZSBWTSBzdGFjayBsaW1pdCBvciB0aGUgY3VycmVudCB0aHJlYWQncwor
ICAgICAgICBzdGFjayBsaW1pdCBkZXBlbmRpbmcgb24gaG93IGl0IGlzIGNhbGxlZC4KKworICAg
ICAgICAqIHJ1bnRpbWUvUmVnRXhwLmNwcDoKKyAgICAgICAgKEpTQzo6UmVnRXhwOjpmaW5pc2hD
cmVhdGlvbik6CisgICAgICAgIChKU0M6OlJlZ0V4cDo6Ynl0ZUNvZGVDb21waWxlSWZOZWNlc3Nh
cnkpOgorICAgICAgICAoSlNDOjpSZWdFeHA6OmNvbXBpbGUpOgorICAgICAgICAoSlNDOjpSZWdF
eHA6Om1hdGNoQ29uY3VycmVudGx5KToKKyAgICAgICAgKEpTQzo6UmVnRXhwOjpjb21waWxlTWF0
Y2hPbmx5KToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cC5oOgorICAgICAgICAqIHJ1bnRpbWUv
UmVnRXhwSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpSZWdFeHA6Om1hdGNoSW5saW5lKToKKyAg
ICAgICAgKEpTQzo6UGF0dGVybkNvbnRleHRCdWZmZXJIb2xkZXI6OlBhdHRlcm5Db250ZXh0QnVm
ZmVySG9sZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6UGF0dGVybkNvbnRleHRCdWZmZXJI
b2xkZXI6On5QYXR0ZXJuQ29udGV4dEJ1ZmZlckhvbGRlcik6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OlBhdHRlcm5Db250ZXh0QnVmZmVySG9sZGVyOjpidWZmZXIpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpQYXR0ZXJuQ29udGV4dEJ1ZmZlckhvbGRlcjo6c2l6ZSk6IERlbGV0ZWQuCisgICAg
ICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIHlhcnIvWWFyci5oOgorICAgICAgICAqIHlhcnIv
WWFyckludGVycHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6WWFycjo6SW50ZXJwcmV0ZXI6Om1h
dGNoRGlzanVuY3Rpb24pOgorICAgICAgICAoSlNDOjpZYXJyOjpJbnRlcnByZXRlcjo6aXNTYWZl
VG9SZWN1cnNlKToKKyAgICAgICAgKiB5YXJyL1lhcnJKSVQuY3BwOgorICAgICAgICAoSlNDOjpZ
YXJyOjpNYXRjaGluZ0NvbnRleHRIb2xkZXI6Ok1hdGNoaW5nQ29udGV4dEhvbGRlcik6CisgICAg
ICAgIChKU0M6OllhcnI6Ok1hdGNoaW5nQ29udGV4dEhvbGRlcjo6fk1hdGNoaW5nQ29udGV4dEhv
bGRlcik6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJHZW5lcmF0b3I6OmluaXRQYXJlbkNvbnRl
eHRGcmVlTGlzdCk6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJHZW5lcmF0b3I6OmFsaWduQ2Fs
bEZyYW1lU2l6ZUluQnl0ZXMpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjpj
b21waWxlKToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckdlbmVyYXRvcjo6aW5pdENhbGxGcmFt
ZSk6IERlbGV0ZWQuCisgICAgICAgICogeWFyci9ZYXJySklULmg6CisgICAgICAgIChKU0M6Ollh
cnI6Ok1hdGNoaW5nQ29udGV4dEhvbGRlcjo6b2Zmc2V0T2ZTdGFja0xpbWl0KToKKyAgICAgICAg
KEpTQzo6WWFycjo6TWF0Y2hpbmdDb250ZXh0SG9sZGVyOjpvZmZzZXRPZlBhdHRlcm5Db250ZXh0
QnVmZmVyKToKKyAgICAgICAgKEpTQzo6WWFycjo6TWF0Y2hpbmdDb250ZXh0SG9sZGVyOjpvZmZz
ZXRPZlBhdHRlcm5Db250ZXh0QnVmZmVyU2l6ZSk6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJD
b2RlQmxvY2s6OmV4ZWN1dGUpOgorICAgICAgICAqIHlhcnIvWWFyclBhdHRlcm4uY3BwOgorICAg
ICAgICAoSlNDOjpZYXJyOjpZYXJyUGF0dGVybkNvbnN0cnVjdG9yOjpZYXJyUGF0dGVybkNvbnN0
cnVjdG9yKToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyclBhdHRlcm5Db25zdHJ1Y3Rvcjo6aXNT
YWZlVG9SZWN1cnNlKToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyclBhdHRlcm46OmNvbXBpbGUp
OgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyUGF0dGVybjo6WWFyclBhdHRlcm4pOgorICAgICAg
ICAoSlNDOjpZYXJyOjpZYXJyUGF0dGVybkNvbnN0cnVjdG9yOjppc1NhZmVUb1JlY3Vyc2UgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAqIHlhcnIvWWFyclBhdHRlcm4uaDoKKwogMjAyMC0wMy0y
MyAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29ueS5jb20+CiAKICAgICAgICAgVW5y
ZXZpZXdlZCwgYWRkcmVzcyBZdXN1a2UncyBmZWVkYmFjayBvbiByMjU4ODAxLgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HUFJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9HUFJJbmZvLmgJKHJldmlzaW9uIDI1ODg2NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvR1BSSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC00NzIsNyArNDcy
LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgR1BSUmVnIHBhdGNocG9pbnRTY3Jh
dGNoUmVnaXN0ZXIgPSBNYWNyb0Fzc2VtYmxlcjo6c19zY3JhdGNoUmVnaXN0ZXI7CiAKICAgICBz
dGF0aWMgR1BSUmVnIHRvUmVnaXN0ZXIodW5zaWduZWQgaW5kZXgpCi0gICAgeworICAgIHsgCiAg
ICAgICAgIEFTU0VSVChpbmRleCA8IG51bWJlck9mUmVnaXN0ZXJzKTsKICNpZiAhT1MoV0lORE9X
UykKICAgICAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyByZWdpc3RlckZvckluZGV4W251bWJlck9m
UmVnaXN0ZXJzXSA9IHsgcmVnVDAsIHJlZ1QxLCByZWdUMiwgcmVnVDMsIHJlZ1Q0LCByZWdUNSwg
cmVnVDYsIHJlZ1Q3LCByZWdDUzAsIHJlZ0NTMSwgcmVnQ1MyIH07CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5jcHAJKHJldmlzaW9uIDI1ODg2NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3
MCw3ICsxNzAsNyBAQCBSZWdFeHA6OlJlZ0V4cChWTSYgdm0sIGNvbnN0IFN0cmluZyYgcGF0CiB2
b2lkIFJlZ0V4cDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogewogICAgIEJhc2U6OmZpbmlzaENy
ZWF0aW9uKHZtKTsKLSAgICBZYXJyOjpZYXJyUGF0dGVybiBwYXR0ZXJuKG1fcGF0dGVyblN0cmlu
ZywgbV9mbGFncywgbV9jb25zdHJ1Y3Rpb25FcnJvckNvZGUsIHZtLnN0YWNrTGltaXQoKSk7Cisg
ICAgWWFycjo6WWFyclBhdHRlcm4gcGF0dGVybihtX3BhdHRlcm5TdHJpbmcsIG1fZmxhZ3MsIG1f
Y29uc3RydWN0aW9uRXJyb3JDb2RlKTsKICAgICBpZiAoIWlzVmFsaWQoKSkgewogICAgICAgICBt
X3N0YXRlID0gUGFyc2VFcnJvcjsKICAgICAgICAgcmV0dXJuOwpAQCAtMjI3LDEzICsyMjcsMTAg
QEAgdm9pZCBSZWdFeHA6OmJ5dGVDb2RlQ29tcGlsZUlmTmVjZXNzYXJ5KAogICAgIGlmIChtX3Jl
Z0V4cEJ5dGVjb2RlKQogICAgICAgICByZXR1cm47CiAKLSAgICBZYXJyOjpZYXJyUGF0dGVybiBw
YXR0ZXJuKG1fcGF0dGVyblN0cmluZywgbV9mbGFncywgbV9jb25zdHJ1Y3Rpb25FcnJvckNvZGUs
IHZtLT5zdGFja0xpbWl0KCkpOworICAgIFlhcnI6OllhcnJQYXR0ZXJuIHBhdHRlcm4obV9wYXR0
ZXJuU3RyaW5nLCBtX2ZsYWdzLCBtX2NvbnN0cnVjdGlvbkVycm9yQ29kZSk7CiAgICAgaWYgKGhh
c0Vycm9yKG1fY29uc3RydWN0aW9uRXJyb3JDb2RlKSkgewotICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotI2lmIENPTVBJTEVSX1FVSVJLKENPTlNJREVSU19VTlJFQUNIQUJM
RV9DT0RFKQogICAgICAgICBtX3N0YXRlID0gUGFyc2VFcnJvcjsKICAgICAgICAgcmV0dXJuOwot
I2VuZGlmCiAgICAgfQogICAgIEFTU0VSVChtX251bVN1YnBhdHRlcm5zID09IHBhdHRlcm4ubV9u
dW1TdWJwYXR0ZXJucyk7CiAKQEAgLTI0OCw3ICsyNDUsNyBAQCB2b2lkIFJlZ0V4cDo6Y29tcGls
ZShWTSogdm0sIFlhcnI6OllhcnJDCiB7CiAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhjZWxs
TG9jaygpKTsKICAgICAKLSAgICBZYXJyOjpZYXJyUGF0dGVybiBwYXR0ZXJuKG1fcGF0dGVyblN0
cmluZywgbV9mbGFncywgbV9jb25zdHJ1Y3Rpb25FcnJvckNvZGUsIHZtLT5zdGFja0xpbWl0KCkp
OworICAgIFlhcnI6OllhcnJQYXR0ZXJuIHBhdHRlcm4obV9wYXR0ZXJuU3RyaW5nLCBtX2ZsYWdz
LCBtX2NvbnN0cnVjdGlvbkVycm9yQ29kZSk7CiAgICAgaWYgKGhhc0Vycm9yKG1fY29uc3RydWN0
aW9uRXJyb3JDb2RlKSkgewogICAgICAgICBtX3N0YXRlID0gUGFyc2VFcnJvcjsKICAgICAgICAg
cmV0dXJuOwpAQCAtMzAyLDcgKzI5OSw5IEBAIGJvb2wgUmVnRXhwOjptYXRjaENvbmN1cnJlbnRs
eSgKICAgICBpZiAoIWhhc0NvZGVGb3Iocy5pczhCaXQoKSA/IFlhcnI6OkNoYXI4IDogWWFycjo6
Q2hhcjE2KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcG9zaXRpb24gPSBtYXRjaCh2
bSwgcywgc3RhcnRPZmZzZXQsIG92ZWN0b3IpOworICAgIHBvc2l0aW9uID0gbWF0Y2hJbmxpbmU8
VmVjdG9yPGludD4mLCBZYXJyOjpNYXRjaEZyb206OkNvbXBpbGVyVGhyZWFkPih2bSwgcywgc3Rh
cnRPZmZzZXQsIG92ZWN0b3IpOworICAgIGlmIChtX3N0YXRlID09IFBhcnNlRXJyb3IpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMzEwLDcgKzMwOSw3
IEBAIHZvaWQgUmVnRXhwOjpjb21waWxlTWF0Y2hPbmx5KFZNKiB2bSwgWWEKIHsKICAgICBhdXRv
IGxvY2tlciA9IGhvbGRMb2NrKGNlbGxMb2NrKCkpOwogICAgIAotICAgIFlhcnI6OllhcnJQYXR0
ZXJuIHBhdHRlcm4obV9wYXR0ZXJuU3RyaW5nLCBtX2ZsYWdzLCBtX2NvbnN0cnVjdGlvbkVycm9y
Q29kZSwgdm0tPnN0YWNrTGltaXQoKSk7CisgICAgWWFycjo6WWFyclBhdHRlcm4gcGF0dGVybiht
X3BhdHRlcm5TdHJpbmcsIG1fZmxhZ3MsIG1fY29uc3RydWN0aW9uRXJyb3JDb2RlKTsKICAgICBp
ZiAoaGFzRXJyb3IobV9jb25zdHJ1Y3Rpb25FcnJvckNvZGUpKSB7CiAgICAgICAgIG1fc3RhdGUg
PSBQYXJzZUVycm9yOwogICAgICAgICByZXR1cm47CkBAIC0zNjMsNyArMzYyLDcgQEAgYm9vbCBS
ZWdFeHA6Om1hdGNoQ29uY3VycmVudGx5KFZNJiB2bSwgYwogICAgIGlmICghaGFzTWF0Y2hPbmx5
Q29kZUZvcihzLmlzOEJpdCgpID8gWWFycjo6Q2hhcjggOiBZYXJyOjpDaGFyMTYpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXN1bHQgPSBtYXRjaCh2bSwgcywgc3RhcnRPZmZzZXQp
OworICAgIHJlc3VsdCA9IG1hdGNoSW5saW5lPFlhcnI6Ok1hdGNoRnJvbTo6Q29tcGlsZXJUaHJl
YWQ+KHZtLCBzLCBzdGFydE9mZnNldCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5oCShyZXZpc2lvbiAyNTg4NjUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAuaAkod29ya2luZyBjb3B5KQpAQCAt
ODYsOCArODYsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBtYXRjaENvbmN1cnJlbnRseShWTSYsIGNv
bnN0IFN0cmluZyYsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCBNYXRjaFJlc3VsdCYpOwogCiAgICAg
Ly8gQ2FsbCB0aGVzZSB2ZXJzaW9ucyBvZiB0aGUgbWF0Y2ggZnVuY3Rpb25zIGlmIHlvdSdyZSBk
ZXNwZXJhdGUgZm9yIHBlcmZvcm1hbmNlLgotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZlY3RvclR5
cGU+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmVjdG9yVHlwZSwgWWFycjo6TWF0Y2hGcm9tIHRo
cmVhZCA9IFlhcnI6Ok1hdGNoRnJvbTo6Vk1UaHJlYWQ+CiAgICAgaW50IG1hdGNoSW5saW5lKFZN
JiwgY29uc3QgU3RyaW5nJiwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIFZlY3RvclR5cGUmIG92ZWN0
b3IpOworICAgIHRlbXBsYXRlPFlhcnI6Ok1hdGNoRnJvbSB0aHJlYWQgPSBZYXJyOjpNYXRjaEZy
b206OlZNVGhyZWFkPgogICAgIE1hdGNoUmVzdWx0IG1hdGNoSW5saW5lKFZNJiwgY29uc3QgU3Ry
aW5nJiwgdW5zaWduZWQgc3RhcnRPZmZzZXQpOwogICAgIAogICAgIHVuc2lnbmVkIG51bVN1YnBh
dHRlcm5zKCkgY29uc3QgeyByZXR1cm4gbV9udW1TdWJwYXR0ZXJuczsgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwSW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cElubGluZXMuaAkocmV2aXNpb24gMjU4
ODY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwSW5saW5lcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC04NiwzOCArODYsNiBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgUmVnRXhw
OjpoYXNDb2RlRm9yKFlhCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1jbGFzcyBQYXR0ZXJuQ29u
dGV4dEJ1ZmZlckhvbGRlciB7Ci0gICAgV1RGX0ZPUkJJRF9IRUFQX0FMTE9DQVRJT047Ci1wdWJs
aWM6Ci0gICAgUGF0dGVybkNvbnRleHRCdWZmZXJIb2xkZXIoVk0mIHZtLCBib29sIG5lZWRCdWZm
ZXIpCi0gICAgICAgIDogbV92bSh2bSkKLSAgICB7Ci0jaWYgRU5BQkxFKFlBUlJfSklUX0FMTF9Q
QVJFTlNfRVhQUkVTU0lPTlMpCi0gICAgICAgIGlmIChuZWVkQnVmZmVyKQotICAgICAgICAgICAg
bV9idWZmZXIgPSBtX3ZtLmFjcXVpcmVSZWdFeHBQYXR0ZXJuQ29udGV4QnVmZmVyKCk7Ci0jZWxz
ZQotICAgICAgICBVTlVTRURfUEFSQU0obmVlZEJ1ZmZlcik7Ci0jZW5kaWYKLSAgICB9Ci0KLSAg
ICB+UGF0dGVybkNvbnRleHRCdWZmZXJIb2xkZXIoKQotICAgIHsKLSNpZiBFTkFCTEUoWUFSUl9K
SVRfQUxMX1BBUkVOU19FWFBSRVNTSU9OUykKLSAgICAgICAgaWYgKGJ1ZmZlcigpKQotICAgICAg
ICAgICAgbV92bS5yZWxlYXNlUmVnRXhwUGF0dGVybkNvbnRleEJ1ZmZlcigpOwotI2Vsc2UKLSAg
ICAgICAgVU5VU0VEX1BBUkFNKG1fdm0pOwotI2VuZGlmCi0gICAgfQotCi0gICAgdm9pZCogYnVm
ZmVyKCkgeyByZXR1cm4gbV9idWZmZXI7IH0KLSAgICB1bnNpZ25lZCBzaXplKCkgeyByZXR1cm4g
YnVmZmVyKCkgPyBWTTo6cGF0dGVybkNvbnRleHRCdWZmZXJTaXplIDogMDsgfQotCi1wcml2YXRl
OgotICAgIFZNJiBtX3ZtOwotICAgIHZvaWQqIG1fYnVmZmVyIHsgbnVsbHB0ciB9OwotfTsKLQog
QUxXQVlTX0lOTElORSB2b2lkIFJlZ0V4cDo6Y29tcGlsZUlmTmVjZXNzYXJ5KFZNJiB2bSwgWWFy
cjo6WWFyckNoYXJTaXplIGNoYXJTaXplKQogewogICAgIGlmIChoYXNDb2RlRm9yKGNoYXJTaXpl
KSkKQEAgLTEyOSw3ICs5Nyw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBSZWdFeHA6OmNvbXBpbGVJ
Zk5lY2UKICAgICBjb21waWxlKCZ2bSwgY2hhclNpemUpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBWZWN0b3JUeXBlPgordGVtcGxhdGU8dHlwZW5hbWUgVmVjdG9yVHlwZSwgWWFycjo6TWF0Y2hG
cm9tIG1hdGNoRnJvbT4KIEFMV0FZU19JTkxJTkUgaW50IFJlZ0V4cDo6bWF0Y2hJbmxpbmUoVk0m
IHZtLCBjb25zdCBTdHJpbmcmIHMsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCBWZWN0b3JUeXBlJiBv
dmVjdG9yKQogewogI2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lORykKQEAgLTE2MiwxOSArMTMwLDIy
IEBAIEFMV0FZU19JTkxJTkUgaW50IFJlZ0V4cDo6bWF0Y2hJbmxpbmUoVk0KICAgICBpZiAobV9z
dGF0ZSA9PSBKSVRDb2RlKSB7CiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVChtX3JlZ0V4
cEpJVENvZGUpOwotICAgICAgICAgICAgUGF0dGVybkNvbnRleHRCdWZmZXJIb2xkZXIgcGF0dGVy
bkNvbnRleHRCdWZmZXJIb2xkZXIodm0sIG1fcmVnRXhwSklUQ29kZS0+dXNlc1BhdHRlcm5Db250
ZXh0QnVmZmVyKCkpOworICAgICAgICAgICAgWWFycjo6TWF0Y2hpbmdDb250ZXh0SG9sZGVyIHJl
Z0V4cENvbnRleHQodm0sIG1fcmVnRXhwSklUQ29kZS5nZXQoKSwgbWF0Y2hGcm9tKTsKIAogICAg
ICAgICAgICAgaWYgKHMuaXM4Qml0KCkpCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9yZWdF
eHBKSVRDb2RlLT5leGVjdXRlKHMuY2hhcmFjdGVyczgoKSwgc3RhcnRPZmZzZXQsIHMubGVuZ3Ro
KCksIG9mZnNldFZlY3RvciwgcGF0dGVybkNvbnRleHRCdWZmZXJIb2xkZXIuYnVmZmVyKCksIHBh
dHRlcm5Db250ZXh0QnVmZmVySG9sZGVyLnNpemUoKSkuc3RhcnQ7CisgICAgICAgICAgICAgICAg
cmVzdWx0ID0gbV9yZWdFeHBKSVRDb2RlLT5leGVjdXRlKHMuY2hhcmFjdGVyczgoKSwgc3RhcnRP
ZmZzZXQsIHMubGVuZ3RoKCksIG9mZnNldFZlY3RvciwgJnJlZ0V4cENvbnRleHQpLnN0YXJ0Owog
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1fcmVnRXhwSklUQ29k
ZS0+ZXhlY3V0ZShzLmNoYXJhY3RlcnMxNigpLCBzdGFydE9mZnNldCwgcy5sZW5ndGgoKSwgb2Zm
c2V0VmVjdG9yLCBwYXR0ZXJuQ29udGV4dEJ1ZmZlckhvbGRlci5idWZmZXIoKSwgcGF0dGVybkNv
bnRleHRCdWZmZXJIb2xkZXIuc2l6ZSgpKS5zdGFydDsKKyAgICAgICAgICAgICAgICByZXN1bHQg
PSBtX3JlZ0V4cEpJVENvZGUtPmV4ZWN1dGUocy5jaGFyYWN0ZXJzMTYoKSwgc3RhcnRPZmZzZXQs
IHMubGVuZ3RoKCksIG9mZnNldFZlY3RvciwgJnJlZ0V4cENvbnRleHQpLnN0YXJ0OwogICAgICAg
ICB9CiAKICAgICAgICAgaWYgKHJlc3VsdCA9PSBZYXJyOjpKU1JlZ0V4cEpJVENvZGVGYWlsdXJl
KSB7CiAgICAgICAgICAgICAvLyBKSVQnZWQgY29kZSBjb3VsZG4ndCBoYW5kbGUgZXhwcmVzc2lv
biwgc28gcHVudCBiYWNrIHRvIHRoZSBpbnRlcnByZXRlci4KICAgICAgICAgICAgIGJ5dGVDb2Rl
Q29tcGlsZUlmTmVjZXNzYXJ5KCZ2bSk7Ci0gICAgICAgICAgICBpZiAobV9zdGF0ZSA9PSBQYXJz
ZUVycm9yKQorICAgICAgICAgICAgaWYgKG1fc3RhdGUgPT0gUGFyc2VFcnJvcikgeworICAgICAg
ICAgICAgICAgIGlmIChtYXRjaEZyb20gPT0gWWFycjo6TWF0Y2hGcm9tOjpDb21waWxlclRocmVh
ZCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICAgICAgIHJldHVy
biB0aHJvd0Vycm9yKCk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXN1bHQgPSBZYXJy
OjppbnRlcnByZXQobV9yZWdFeHBCeXRlY29kZS5nZXQoKSwgcywgc3RhcnRPZmZzZXQsIHJlaW50
ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihvZmZzZXRWZWN0b3IpKTsKICAgICAgICAgfQogCkBAIC0y
NjAsNiArMjMxLDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIFJlZ0V4cDo6Y29tcGlsZUlmTmVjZQog
ICAgIGNvbXBpbGVNYXRjaE9ubHkoJnZtLCBjaGFyU2l6ZSk7CiB9CiAKK3RlbXBsYXRlPFlhcnI6
Ok1hdGNoRnJvbSBtYXRjaEZyb20+CiBBTFdBWVNfSU5MSU5FIE1hdGNoUmVzdWx0IFJlZ0V4cDo6
bWF0Y2hJbmxpbmUoVk0mIHZtLCBjb25zdCBTdHJpbmcmIHMsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0
KQogewogI2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lORykKQEAgLTI4OSwxMSArMjYxLDEyIEBAIEFM
V0FZU19JTkxJTkUgTWF0Y2hSZXN1bHQgUmVnRXhwOjptYXRjaEkKICAgICBpZiAobV9zdGF0ZSA9
PSBKSVRDb2RlKSB7CiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVChtX3JlZ0V4cEpJVENv
ZGUpOwotICAgICAgICAgICAgUGF0dGVybkNvbnRleHRCdWZmZXJIb2xkZXIgcGF0dGVybkNvbnRl
eHRCdWZmZXJIb2xkZXIodm0sIG1fcmVnRXhwSklUQ29kZS0+dXNlc1BhdHRlcm5Db250ZXh0QnVm
ZmVyKCkpOworICAgICAgICAgICAgWWFycjo6TWF0Y2hpbmdDb250ZXh0SG9sZGVyIHJlZ0V4cENv
bnRleHQodm0sIG1fcmVnRXhwSklUQ29kZS5nZXQoKSwgbWF0Y2hGcm9tKTsKKwogICAgICAgICAg
ICAgaWYgKHMuaXM4Qml0KCkpCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9yZWdFeHBKSVRD
b2RlLT5leGVjdXRlKHMuY2hhcmFjdGVyczgoKSwgc3RhcnRPZmZzZXQsIHMubGVuZ3RoKCksIHBh
dHRlcm5Db250ZXh0QnVmZmVySG9sZGVyLmJ1ZmZlcigpLCBwYXR0ZXJuQ29udGV4dEJ1ZmZlckhv
bGRlci5zaXplKCkpOworICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1fcmVnRXhwSklUQ29kZS0+
ZXhlY3V0ZShzLmNoYXJhY3RlcnM4KCksIHN0YXJ0T2Zmc2V0LCBzLmxlbmd0aCgpLCAmcmVnRXhw
Q29udGV4dCk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9y
ZWdFeHBKSVRDb2RlLT5leGVjdXRlKHMuY2hhcmFjdGVyczE2KCksIHN0YXJ0T2Zmc2V0LCBzLmxl
bmd0aCgpLCBwYXR0ZXJuQ29udGV4dEJ1ZmZlckhvbGRlci5idWZmZXIoKSwgcGF0dGVybkNvbnRl
eHRCdWZmZXJIb2xkZXIuc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBtX3JlZ0V4
cEpJVENvZGUtPmV4ZWN1dGUocy5jaGFyYWN0ZXJzMTYoKSwgc3RhcnRPZmZzZXQsIHMubGVuZ3Ro
KCksICZyZWdFeHBDb250ZXh0KTsKICAgICAgICAgfQogCiAjaWYgRU5BQkxFKFJFR0VYUF9UUkFD
SU5HKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnIuaAkocmV2aXNpb24gMjU4ODY1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyci5oCSh3b3JraW5nIGNvcHkpCkBAIC00
OSw2ICs0OSw4IEBAIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgb2Zmc2V0Tm9NYXRjaCAKIC8v
IGF2b2lkIHNwZW5kaW5nIGV4cG9uZW50aWFsIHRpbWUgb24gY29tcGxleCByZWd1bGFyIGV4cHJl
c3Npb25zLgogc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXRjaExpbWl0ID0gMTAwMDAwMDsK
IAorZW51bSBNYXRjaEZyb20geyBWTVRocmVhZCwgQ29tcGlsZXJUaHJlYWQgfTsKKwogZW51bSBK
U1JlZ0V4cFJlc3VsdCB7CiAgICAgSlNSZWdFeHBNYXRjaCA9IDEsCiAgICAgSlNSZWdFeHBOb01h
dGNoID0gMCwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJJbnRlcnByZXRl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckludGVy
cHJldGVyLmNwcAkocmV2aXNpb24gMjU4ODY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3lh
cnIvWWFyckludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI3Miw2ICsxMjcyLDkg
QEAgcHVibGljOgogI2RlZmluZSBjdXJyZW50VGVybSgpIChkaXNqdW5jdGlvbi0+dGVybXNbY29u
dGV4dC0+dGVybV0pCiAgICAgSlNSZWdFeHBSZXN1bHQgbWF0Y2hEaXNqdW5jdGlvbihCeXRlRGlz
anVuY3Rpb24qIGRpc2p1bmN0aW9uLCBEaXNqdW5jdGlvbkNvbnRleHQqIGNvbnRleHQsIGJvb2wg
YnRyYWNrID0gZmFsc2UpCiAgICAgeworICAgICAgICBpZiAoVU5MSUtFTFkoIWlzU2FmZVRvUmVj
dXJzZSgpKSkKKyAgICAgICAgICAgIHJldHVybiBKU1JlZ0V4cEVycm9yTm9NZW1vcnk7CisKICAg
ICAgICAgaWYgKCEtLXJlbWFpbmluZ01hdGNoQ291bnQpCiAgICAgICAgICAgICByZXR1cm4gSlNS
ZWdFeHBFcnJvckhpdExpbWl0OwogCkBAIC0xNjY3LDEwICsxNjcwLDEzIEBAIHB1YmxpYzoKICAg
ICB9CiAKIHByaXZhdGU6CisgICAgaW5saW5lIGJvb2wgaXNTYWZlVG9SZWN1cnNlKCkgeyByZXR1
cm4gbV9zdGFja0NoZWNrLmlzU2FmZVRvUmVjdXJzZSgpOyB9CisKICAgICBCeXRlY29kZVBhdHRl
cm4qIHBhdHRlcm47CiAgICAgYm9vbCB1bmljb2RlOwogICAgIHVuc2lnbmVkKiBvdXRwdXQ7CiAg
ICAgSW5wdXRTdHJlYW0gaW5wdXQ7CisgICAgU3RhY2tDaGVjayBtX3N0YWNrQ2hlY2s7CiAgICAg
V1RGOjpCdW1wUG9pbnRlclBvb2wqIGFsbG9jYXRvclBvb2wgeyBudWxscHRyIH07CiAgICAgdW5z
aWduZWQgc3RhcnRPZmZzZXQ7CiAgICAgdW5zaWduZWQgcmVtYWluaW5nTWF0Y2hDb3VudDsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwCShyZXZpc2lvbiAyNTg4NjUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjYsMTggKzI2LDQ4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiWWFy
ckpJVC5oIgogCi0jaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KICNpbmNsdWRlICJMaW5rQnVm
ZmVyLmgiCiAjaW5jbHVkZSAiT3B0aW9ucy5oIgogI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAi
WWFyci5oIgogI2luY2x1ZGUgIllhcnJDYW5vbmljYWxpemUuaCIKICNpbmNsdWRlICJZYXJyRGlz
YXNzZW1ibGVyLmgiCisjaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KKyNpbmNsdWRlIDx3dGYv
VGhyZWFkaW5nLmg+CisKIAogI2lmIEVOQUJMRShZQVJSX0pJVCkKIAogbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBZYXJyIHsKIAorTWF0Y2hpbmdDb250ZXh0SG9sZGVyOjpNYXRjaGluZ0NvbnRl
eHRIb2xkZXIoVk0mIHZtLCBZYXJyQ29kZUJsb2NrKiB5YXJyQ29kZUJsb2NrLCBNYXRjaEZyb20g
bWF0Y2hGcm9tKQorICAgIDogbV92bSh2bSkKK3sKKyAgICBpZiAobWF0Y2hGcm9tID09IE1hdGNo
RnJvbTo6Vk1UaHJlYWQpCisgICAgICAgIG1fc3RhY2tMaW1pdCA9IHZtLnNvZnRTdGFja0xpbWl0
KCk7CisgICAgZWxzZSB7CisgICAgICAgIFN0YWNrQm91bmRzIHN0YWNrID0gVGhyZWFkOjpjdXJy
ZW50KCkuc3RhY2soKTsKKyAgICAgICAgbV9zdGFja0xpbWl0ID0gc3RhY2sucmVjdXJzaW9uTGlt
aXQoT3B0aW9uczo6cmVzZXJ2ZWRab25lU2l6ZSgpKTsKKyAgICB9CisKKyNpZiBFTkFCTEUoWUFS
Ul9KSVRfQUxMX1BBUkVOU19FWFBSRVNTSU9OUykKKyAgICBpZiAoeWFyckNvZGVCbG9jay0+dXNl
c1BhdHRlcm5Db250ZXh0QnVmZmVyKCkpIHsKKyAgICAgICAgbV9wYXR0ZXJuQ29udGV4dEJ1ZmZl
ciA9IG1fdm0uYWNxdWlyZVJlZ0V4cFBhdHRlcm5Db250ZXhCdWZmZXIoKTsKKyAgICAgICAgbV9w
YXR0ZXJuQ29udGV4dEJ1ZmZlclNpemUgPSBWTTo6cGF0dGVybkNvbnRleHRCdWZmZXJTaXplOwor
ICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHlhcnJDb2RlQmxvY2spOworI2VuZGlmCit9
CisKK01hdGNoaW5nQ29udGV4dEhvbGRlcjo6fk1hdGNoaW5nQ29udGV4dEhvbGRlcigpCit7Cisj
aWYgRU5BQkxFKFlBUlJfSklUX0FMTF9QQVJFTlNfRVhQUkVTU0lPTlMpCisgICAgaWYgKG1fcGF0
dGVybkNvbnRleHRCdWZmZXIpCisgICAgICAgIG1fdm0ucmVsZWFzZVJlZ0V4cFBhdHRlcm5Db250
ZXhCdWZmZXIoKTsKKyNlbmRpZgorfQorCiB0ZW1wbGF0ZTxZYXJySklUQ29tcGlsZU1vZGUgY29t
cGlsZU1vZGU+CiBjbGFzcyBZYXJyR2VuZXJhdG9yIDogcHVibGljIFlhcnJKSVRJbmZvLCBwcml2
YXRlIE1hY3JvQXNzZW1ibGVyIHsKIApAQCAtNjAsNyArOTAsOCBAQCBjbGFzcyBZYXJyR2VuZXJh
dG9yIDogcHVibGljIFlhcnJKSVRJbmZvCiAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgaW5k
ZXggPSBBUk02NFJlZ2lzdGVyczo6eDE7CiAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgbGVu
Z3RoID0gQVJNNjRSZWdpc3RlcnM6OngyOwogICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIG91
dHB1dCA9IEFSTTY0UmVnaXN0ZXJzOjp4MzsKLSAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBm
cmVlbGlzdFJlZ2lzdGVyID0gQVJNNjRSZWdpc3RlcnM6Ong0OworICAgIHN0YXRpYyBjb25zdCBS
ZWdpc3RlcklEIG1hdGNoaW5nQ29udGV4dCA9IEFSTTY0UmVnaXN0ZXJzOjp4NDsKKyAgICBzdGF0
aWMgY29uc3QgUmVnaXN0ZXJJRCBmcmVlbGlzdFJlZ2lzdGVyID0gQVJNNjRSZWdpc3RlcnM6Ong0
OyAvLyBMb2FkZWQgZnJvbSB0aGUgTWF0Y2hpbmdDb250ZXh0SG9sZGVyIGluIHRoZSBwcm9sb2d1
ZS4KICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBmcmVlbGlzdFNpemVSZWdpc3RlciA9IEFS
TTY0UmVnaXN0ZXJzOjp4NTsgLy8gT25seSB1c2VkIGR1cmluZyBpbml0aWFsaXphdGlvbi4KIAog
ICAgIC8vIFNjcmF0Y2ggcmVnaXN0ZXJzCkBAIC0xMDEsNyArMTMyLDggQEAgY2xhc3MgWWFyckdl
bmVyYXRvciA6IHB1YmxpYyBZYXJySklUSW5mbwogICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklE
IGluZGV4ID0gWDg2UmVnaXN0ZXJzOjplc2k7CiAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQg
bGVuZ3RoID0gWDg2UmVnaXN0ZXJzOjplZHg7CiAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQg
b3V0cHV0ID0gWDg2UmVnaXN0ZXJzOjplY3g7Ci0gICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQg
ZnJlZWxpc3RSZWdpc3RlciA9IFg4NlJlZ2lzdGVyczo6cjg7CisgICAgc3RhdGljIGNvbnN0IFJl
Z2lzdGVySUQgbWF0Y2hpbmdDb250ZXh0ID0gWDg2UmVnaXN0ZXJzOjpyODsKKyAgICBzdGF0aWMg
Y29uc3QgUmVnaXN0ZXJJRCBmcmVlbGlzdFJlZ2lzdGVyID0gWDg2UmVnaXN0ZXJzOjpyODsgLy8g
TG9hZGVkIGZyb20gdGhlIE1hdGNoaW5nQ29udGV4dEhvbGRlciBpbiB0aGUgcHJvbG9ndWUuCiAg
ICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgZnJlZWxpc3RTaXplUmVnaXN0ZXIgPSBYODZSZWdp
c3RlcnM6OnI5OyAvLyBPbmx5IHVzZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uLgogI2Vsc2UKICAg
ICAvLyBJZiB0aGUgcmV0dXJuIHZhbHVlIGRvZXNuJ3QgZml0IGluIDY0Yml0cywgaXRzIGRlc3Rp
bmF0aW9uIGlzIHBvaW50ZWQgYnkgcmN4IGFuZCB0aGUgcGFyYW1ldGVycyBhcmUgc2hpZnRlZC4K
QEAgLTIyMCw2ICsyNTIsOSBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIDogcHVibGljIFlhcnJKSVRJ
bmZvCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAorICAgICAgICBsb2FkMzIoQWRk
cmVzcyhtYXRjaGluZ0NvbnRleHQsIE1hdGNoaW5nQ29udGV4dEhvbGRlcjo6b2Zmc2V0T2ZQYXR0
ZXJuQ29udGV4dEJ1ZmZlclNpemUoKSksIGZyZWVsaXN0U2l6ZVJlZ2lzdGVyKTsKKyAgICAgICAg
Ly8gTm90ZSB0aGF0IG1hdGNoaW5nQ29udGV4dCBhbmQgZnJlZWxpc3RSZWdpc3RlciBhcmUgbGlr
ZWx5IHRoZSBzYW1lIHJlZ2lzdGVyLgorICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWF0Y2hpbmdD
b250ZXh0LCBNYXRjaGluZ0NvbnRleHRIb2xkZXI6Om9mZnNldE9mUGF0dGVybkNvbnRleHRCdWZm
ZXIoKSksIGZyZWVsaXN0UmVnaXN0ZXIpOwogICAgICAgICBKdW1wIGVtcHR5RnJlZUxpc3QgPSBi
cmFuY2hUZXN0UHRyKFplcm8sIGZyZWVsaXN0UmVnaXN0ZXIpOwogICAgICAgICBtb3ZlKGZyZWVs
aXN0UmVnaXN0ZXIsIHBhcmVuQ29udGV4dFBvaW50ZXIpOwogICAgICAgICBhZGRQdHIoVHJ1c3Rl
ZEltbTMyKHBhcmVuQ29udGV4dFNpemUpLCBmcmVlbGlzdFJlZ2lzdGVyLCBuZXh0UGFyZW5Db250
ZXh0UG9pbnRlcik7CkBAIC02MzUsMTIgKzY3MCw2IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgOiBw
dWJsaWMgWWFyckpJVEluZm8KICAgICAgICAgY2FsbEZyYW1lU2l6ZSA9IChjYWxsRnJhbWVTaXpl
ICsgMHgzZikgJiB+MHgzZjsKICAgICAgICAgcmV0dXJuIGNhbGxGcmFtZVNpemU7CiAgICAgfQot
ICAgIHZvaWQgaW5pdENhbGxGcmFtZSgpCi0gICAgewotICAgICAgICB1bnNpZ25lZCBjYWxsRnJh
bWVTaXplSW5CeXRlcyA9IGFsaWduQ2FsbEZyYW1lU2l6ZUluQnl0ZXMobV9wYXR0ZXJuLm1fYm9k
eS0+bV9jYWxsRnJhbWVTaXplKTsKLSAgICAgICAgaWYgKGNhbGxGcmFtZVNpemVJbkJ5dGVzKQot
ICAgICAgICAgICAgc3ViUHRyKEltbTMyKGNhbGxGcmFtZVNpemVJbkJ5dGVzKSwgc3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOwotICAgIH0KICAgICB2b2lkIHJlbW92ZUNhbGxGcmFtZSgpCiAgICAgewog
ICAgICAgICB1bnNpZ25lZCBjYWxsRnJhbWVTaXplSW5CeXRlcyA9IGFsaWduQ2FsbEZyYW1lU2l6
ZUluQnl0ZXMobV9wYXR0ZXJuLm1fYm9keS0+bV9jYWxsRnJhbWVTaXplKTsKQEAgLTM4NTEsNiAr
Mzg4MCwzNSBAQCBwdWJsaWM6CiAgICAgICAgIGdlbmVyYXRlRmFpbFJldHVybigpOwogICAgICAg
ICBoYXNJbnB1dC5saW5rKHRoaXMpOwogCisgICAgICAgIHVuc2lnbmVkIGNhbGxGcmFtZVNpemVJ
bkJ5dGVzID0gYWxpZ25DYWxsRnJhbWVTaXplSW5CeXRlcyhtX3BhdHRlcm4ubV9ib2R5LT5tX2Nh
bGxGcmFtZVNpemUpOworICAgICAgICBpZiAoY2FsbEZyYW1lU2l6ZUluQnl0ZXMpIHsKKyAgICAg
ICAgICAgIC8vIENoZWNrIHN0YWNrIHNpemUKKyAgICAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1t
MzIoLWNhbGxGcmFtZVNpemVJbkJ5dGVzKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJlZ1QwKTsK
KyNpZiBDUFUoWDg2XzY0KSAmJiBPUyhXSU5ET1dTKQorICAgICAgICAgICAgUmVnaXN0ZXJJRCBt
YXRjaGluZ0NvbnRleHQgPSByZWdUMTsKKyAgICAgICAgICAgIC8vIEFjY291bnQgZm9yICJvdXRw
dXQiIGFyZ3VtZW50IGlmIHdlIGFyZSByZWNvcmRpbmcgc3VicGF0dGVybnMuCisgICAgICAgICAg
ICBpZiAoY29tcGlsZU1vZGUgPT0gSW5jbHVkZVN1YnBhdHRlcm5zKQorICAgICAgICAgICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhYODZSZWdpc3RlcnM6OmVicCwgNyAqIHNpemVvZih2b2lkKikpLCBt
YXRjaGluZ0NvbnRleHQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGxvYWRQ
dHIoQWRkcmVzcyhYODZSZWdpc3RlcnM6OmVicCwgNiAqIHNpemVvZih2b2lkKikpLCBtYXRjaGlu
Z0NvbnRleHQpOworI2VsaWYgQ1BVKEFSTV9USFVNQjIpCisgICAgICAgICAgICBSZWdpc3RlcklE
IG1hdGNoaW5nQ29udGV4dCA9IHJlZ1QxOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHN0
YWNrUG9pbnRlclJlZ2lzdGVyLCA0ICogc2l6ZW9mKHZvaWQqKSkpLCBtYXRjaGluZ0NvbnRleHQp
OworI2VsaWYgQ1BVKE1JUFMpCisgICAgICAgICAgICBSZWdpc3RlcklEIG1hdGNoaW5nQ29udGV4
dCA9IHJlZ1QxOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lz
dGVyKSwgbWF0Y2hpbmdDb250ZXh0KTsKKyNlbmRpZgorICAgICAgICAgICAgSnVtcCBzdGFja09r
ID0gYnJhbmNoUHRyKEJlbG93T3JFcXVhbCwgQWRkcmVzcyhtYXRjaGluZ0NvbnRleHQsIE1hdGNo
aW5nQ29udGV4dEhvbGRlcjo6b2Zmc2V0T2ZTdGFja0xpbWl0KCkpLCByZWdUMCk7CisKKyAgICAg
ICAgICAgIC8vIEV4Y2VlZGVkIHN0YWNrIGxpbWl0LCBwdW50IHRvIHRoZSBpbnRlcnByZXRlci4K
KyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cigodm9pZCopc3RhdGljX2Nhc3Q8c2l6ZV90
PigtMikpLCByZXR1cm5SZWdpc3Rlcik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMigw
KSwgcmV0dXJuUmVnaXN0ZXIyKTsKKyAgICAgICAgICAgIGdlbmVyYXRlUmV0dXJuKCk7CisKKyAg
ICAgICAgICAgIHN0YWNrT2subGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUocmVnVDAsIHN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAgICAgfQorCiAjaWZkZWYgSklUX1VOSUNPREVfRVhQ
UkVTU0lPTlMKICAgICAgICAgaWYgKG1fZGVjb2RlU3Vycm9nYXRlUGFpcnMpCiAgICAgICAgICAg
ICBnZXRFZmZlY3RpdmVBZGRyZXNzKEJhc2VJbmRleChpbnB1dCwgbGVuZ3RoLCBUaW1lc1R3byks
IGVuZE9mU3RyaW5nQWRkcmVzcyk7CkBAIC0zODY5LDggKzM5MjcsNiBAQCBwdWJsaWM6CiAgICAg
ICAgIGlmICghbV9wYXR0ZXJuLm1fYm9keS0+bV9oYXNGaXhlZFNpemUpCiAgICAgICAgICAgICBz
ZXRNYXRjaFN0YXJ0KGluZGV4KTsKIAotICAgICAgICBpbml0Q2FsbEZyYW1lKCk7Ci0KICNpZiBF
TkFCTEUoWUFSUl9KSVRfQUxMX1BBUkVOU19FWFBSRVNTSU9OUykKICAgICAgICAgaWYgKG1fY29u
dGFpbnNOZXN0ZWRTdWJwYXR0ZXJucykgewogICAgICAgICAgICAgaW5pdFBhcmVuQ29udGV4dEZy
ZWVMaXN0KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5oCShyZXZpc2lv
biAyNTg4NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmgJKHdvcmtp
bmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29k
ZVJlZi5oIgogI2luY2x1ZGUgIk1hdGNoUmVzdWx0LmgiCisjaW5jbHVkZSAiVk0uaCIKICNpbmNs
dWRlICJZYXJyLmgiCiAjaW5jbHVkZSAiWWFyclBhdHRlcm4uaCIKIApAQCAtNDEsNiArNDIsOCBA
QCBjbGFzcyBFeGVjdXRhYmxlUG9vbDsKIAogbmFtZXNwYWNlIFlhcnIgewogCitjbGFzcyBZYXJy
Q29kZUJsb2NrOworCiBlbnVtIGNsYXNzIEpJVEZhaWx1cmVSZWFzb24gOiB1aW50OF90IHsKICAg
ICBEZWNvZGVTdXJyb2dhdGVQYWlyLAogICAgIEJhY2tSZWZlcmVuY2UsCkBAIC01MiwxNSArNTUs
MzUgQEAgZW51bSBjbGFzcyBKSVRGYWlsdXJlUmVhc29uIDogdWludDhfdCB7CiAgICAgRXhlY3V0
YWJsZU1lbW9yeUFsbG9jYXRpb25GYWlsdXJlLAogfTsKIAorY2xhc3MgTWF0Y2hpbmdDb250ZXh0
SG9sZGVyIHsKKyAgICBXVEZfRk9SQklEX0hFQVBfQUxMT0NBVElPTjsKK3B1YmxpYzoKKyAgICBN
YXRjaGluZ0NvbnRleHRIb2xkZXIoVk0mLCBZYXJyQ29kZUJsb2NrKiwgTWF0Y2hGcm9tIG1hdGNo
RnJvbSA9IE1hdGNoRnJvbTo6Vk1UaHJlYWQpOworICAgIH5NYXRjaGluZ0NvbnRleHRIb2xkZXIo
KTsKKworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTdGFja0xpbWl0KCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKE1hdGNoaW5nQ29udGV4dEhvbGRlciwgbV9zdGFja0xpbWl0KTsgfQor
I2lmIEVOQUJMRShZQVJSX0pJVF9BTExfUEFSRU5TX0VYUFJFU1NJT05TKQorICAgIHN0YXRpYyBw
dHJkaWZmX3Qgb2Zmc2V0T2ZQYXR0ZXJuQ29udGV4dEJ1ZmZlcigpIHsgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihNYXRjaGluZ0NvbnRleHRIb2xkZXIsIG1fcGF0dGVybkNvbnRleHRCdWZmZXIpOyB9
CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlBhdHRlcm5Db250ZXh0QnVmZmVyU2l6ZSgp
IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihNYXRjaGluZ0NvbnRleHRIb2xkZXIsIG1fcGF0dGVy
bkNvbnRleHRCdWZmZXJTaXplKTsgfQorI2VuZGlmCisKK3ByaXZhdGU6CisgICAgVk0mIG1fdm07
CisgICAgdm9pZCogbV9zdGFja0xpbWl0OworI2lmIEVOQUJMRShZQVJSX0pJVF9BTExfUEFSRU5T
X0VYUFJFU1NJT05TKQorICAgIHZvaWQqIG1fcGF0dGVybkNvbnRleHRCdWZmZXIgeyBudWxscHRy
IH07CisgICAgdW5zaWduZWQgbV9wYXR0ZXJuQ29udGV4dEJ1ZmZlclNpemUgeyAwIH07CisjZW5k
aWYKK307CisKIGNsYXNzIFlhcnJDb2RlQmxvY2sgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFlhcnJDb2RlQmxvY2spOwogCi0gICAgLy8g
VGVjaG5pY2FsbHkgZnJlZVBhcmVuQ29udGV4dCBhbmQgcGFyZW5Db250ZXh0U2l6ZSBhcmUgb25s
eSB1c2VkIGlmIEVOQUJMRShZQVJSX0pJVF9BTExfUEFSRU5TX0VYUFJFU1NJT05TKSBpcyBzZXQu
IEZvcnR1bmF0ZWx5LCBhbGwgdGhlIGNhbGxpbmcgY29udmVudGlvbnMgd2Ugc3VwcG9ydCBoYXZl
IGNhbGxlciBzYXZlIGFyZ3VtZW50IHJlZ2lzdGVycy4KLSAgICB1c2luZyBZYXJySklUQ29kZTgg
PSBFbmNvZGVkTWF0Y2hSZXN1bHQgKCopKGNvbnN0IExDaGFyKiBpbnB1dCwgdW5zaWduZWQgc3Rh
cnQsIHVuc2lnbmVkIGxlbmd0aCwgaW50KiBvdXRwdXQsIHZvaWQqIGZyZWVQYXJlbkNvbnRleHQs
IHVuc2lnbmVkIHBhcmVuQ29udGV4dFNpemUpIFlBUlJfQ0FMTDsKLSAgICB1c2luZyBZYXJySklU
Q29kZTE2ID0gRW5jb2RlZE1hdGNoUmVzdWx0ICgqKShjb25zdCBVQ2hhciogaW5wdXQsIHVuc2ln
bmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIGludCogb3V0cHV0LCB2b2lkKiBmcmVlUGFyZW5D
b250ZXh0LCB1bnNpZ25lZCBwYXJlbkNvbnRleHRTaXplKSBZQVJSX0NBTEw7Ci0gICAgdXNpbmcg
WWFyckpJVENvZGVNYXRjaE9ubHk4ID0gRW5jb2RlZE1hdGNoUmVzdWx0ICgqKShjb25zdCBMQ2hh
ciogaW5wdXQsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIHZvaWQqLCB2b2lkKiBm
cmVlUGFyZW5Db250ZXh0LCB1bnNpZ25lZCBwYXJlbkNvbnRleHRTaXplKSBZQVJSX0NBTEw7Ci0g
ICAgdXNpbmcgWWFyckpJVENvZGVNYXRjaE9ubHkxNiA9IEVuY29kZWRNYXRjaFJlc3VsdCAoKiko
Y29uc3QgVUNoYXIqIGlucHV0LCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoLCB2b2lk
Kiwgdm9pZCogZnJlZVBhcmVuQ29udGV4dCwgdW5zaWduZWQgcGFyZW5Db250ZXh0U2l6ZSkgWUFS
Ul9DQUxMOworICAgIHVzaW5nIFlhcnJKSVRDb2RlOCA9IEVuY29kZWRNYXRjaFJlc3VsdCAoKiko
Y29uc3QgTENoYXIqIGlucHV0LCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoLCBpbnQq
IG91dHB1dCwgTWF0Y2hpbmdDb250ZXh0SG9sZGVyKiBtYXRjaGluZ0NvbnRleHQpIFlBUlJfQ0FM
TDsKKyAgICB1c2luZyBZYXJySklUQ29kZTE2ID0gRW5jb2RlZE1hdGNoUmVzdWx0ICgqKShjb25z
dCBVQ2hhciogaW5wdXQsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIGludCogb3V0
cHV0LCBNYXRjaGluZ0NvbnRleHRIb2xkZXIqIG1hdGNoaW5nQ29udGV4dCkgWUFSUl9DQUxMOwor
ICAgIHVzaW5nIFlhcnJKSVRDb2RlTWF0Y2hPbmx5OCA9IEVuY29kZWRNYXRjaFJlc3VsdCAoKiko
Y29uc3QgTENoYXIqIGlucHV0LCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoLCB2b2lk
KiwgTWF0Y2hpbmdDb250ZXh0SG9sZGVyKiBtYXRjaGluZ0NvbnRleHQpIFlBUlJfQ0FMTDsKKyAg
ICB1c2luZyBZYXJySklUQ29kZU1hdGNoT25seTE2ID0gRW5jb2RlZE1hdGNoUmVzdWx0ICgqKShj
b25zdCBVQ2hhciogaW5wdXQsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIHZvaWQq
LCBNYXRjaGluZ0NvbnRleHRIb2xkZXIqIG1hdGNoaW5nQ29udGV4dCkgWUFSUl9DQUxMOwogCiBw
dWJsaWM6CiAgICAgWWFyckNvZGVCbG9jaygpID0gZGVmYXVsdDsKQEAgLTgzLDI4ICsxMDYsMjgg
QEAgcHVibGljOgogICAgIHZvaWQgc2V0VXNlc1BhdHRlcm5Db250ZXh0QnVmZmVyKCkgeyBtX3Vz
ZXNQYXR0ZXJuQ29udGV4dEJ1ZmZlciA9IHRydWU7IH0KICNlbmRpZgogCi0gICAgTWF0Y2hSZXN1
bHQgZXhlY3V0ZShjb25zdCBMQ2hhciogaW5wdXQsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBs
ZW5ndGgsIGludCogb3V0cHV0LCB2b2lkKiBmcmVlUGFyZW5Db250ZXh0LCB1bnNpZ25lZCBwYXJl
bkNvbnRleHRTaXplKQorICAgIE1hdGNoUmVzdWx0IGV4ZWN1dGUoY29uc3QgTENoYXIqIGlucHV0
LCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoLCBpbnQqIG91dHB1dCwgTWF0Y2hpbmdD
b250ZXh0SG9sZGVyKiBtYXRjaGluZ0NvbnRleHQpCiAgICAgewogICAgICAgICBBU1NFUlQoaGFz
OEJpdENvZGUoKSk7Ci0gICAgICAgIHJldHVybiBNYXRjaFJlc3VsdCh1bnRhZ0NGdW5jdGlvblB0
cjxZYXJySklUQ29kZTgsIFlhcnI4Qml0UHRyVGFnPihtX3JlZjguY29kZSgpLmV4ZWN1dGFibGVB
ZGRyZXNzKCkpKGlucHV0LCBzdGFydCwgbGVuZ3RoLCBvdXRwdXQsIGZyZWVQYXJlbkNvbnRleHQs
IHBhcmVuQ29udGV4dFNpemUpKTsKKyAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0KHVudGFnQ0Z1
bmN0aW9uUHRyPFlhcnJKSVRDb2RlOCwgWWFycjhCaXRQdHJUYWc+KG1fcmVmOC5jb2RlKCkuZXhl
Y3V0YWJsZUFkZHJlc3MoKSkoaW5wdXQsIHN0YXJ0LCBsZW5ndGgsIG91dHB1dCwgbWF0Y2hpbmdD
b250ZXh0KSk7CiAgICAgfQogCi0gICAgTWF0Y2hSZXN1bHQgZXhlY3V0ZShjb25zdCBVQ2hhciog
aW5wdXQsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIGludCogb3V0cHV0LCB2b2lk
KiBmcmVlUGFyZW5Db250ZXh0LCB1bnNpZ25lZCBwYXJlbkNvbnRleHRTaXplKQorICAgIE1hdGNo
UmVzdWx0IGV4ZWN1dGUoY29uc3QgVUNoYXIqIGlucHV0LCB1bnNpZ25lZCBzdGFydCwgdW5zaWdu
ZWQgbGVuZ3RoLCBpbnQqIG91dHB1dCwgTWF0Y2hpbmdDb250ZXh0SG9sZGVyKiBtYXRjaGluZ0Nv
bnRleHQpCiAgICAgewogICAgICAgICBBU1NFUlQoaGFzMTZCaXRDb2RlKCkpOwotICAgICAgICBy
ZXR1cm4gTWF0Y2hSZXN1bHQodW50YWdDRnVuY3Rpb25QdHI8WWFyckpJVENvZGUxNiwgWWFycjE2
Qml0UHRyVGFnPihtX3JlZjE2LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKShpbnB1dCwgc3Rh
cnQsIGxlbmd0aCwgb3V0cHV0LCBmcmVlUGFyZW5Db250ZXh0LCBwYXJlbkNvbnRleHRTaXplKSk7
CisgICAgICAgIHJldHVybiBNYXRjaFJlc3VsdCh1bnRhZ0NGdW5jdGlvblB0cjxZYXJySklUQ29k
ZTE2LCBZYXJyMTZCaXRQdHJUYWc+KG1fcmVmMTYuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkp
KGlucHV0LCBzdGFydCwgbGVuZ3RoLCBvdXRwdXQsIG1hdGNoaW5nQ29udGV4dCkpOwogICAgIH0K
IAotICAgIE1hdGNoUmVzdWx0IGV4ZWN1dGUoY29uc3QgTENoYXIqIGlucHV0LCB1bnNpZ25lZCBz
dGFydCwgdW5zaWduZWQgbGVuZ3RoLCB2b2lkKiBmcmVlUGFyZW5Db250ZXh0LCB1bnNpZ25lZCBw
YXJlbkNvbnRleHRTaXplKQorICAgIE1hdGNoUmVzdWx0IGV4ZWN1dGUoY29uc3QgTENoYXIqIGlu
cHV0LCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoLCBNYXRjaGluZ0NvbnRleHRIb2xk
ZXIqIG1hdGNoaW5nQ29udGV4dCkKICAgICB7CiAgICAgICAgIEFTU0VSVChoYXM4Qml0Q29kZU1h
dGNoT25seSgpKTsKLSAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0KHVudGFnQ0Z1bmN0aW9uUHRy
PFlhcnJKSVRDb2RlTWF0Y2hPbmx5OCwgWWFyck1hdGNoT25seThCaXRQdHJUYWc+KG1fbWF0Y2hP
bmx5OC5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkoaW5wdXQsIHN0YXJ0LCBsZW5ndGgsIDAs
IGZyZWVQYXJlbkNvbnRleHQsIHBhcmVuQ29udGV4dFNpemUpKTsKKyAgICAgICAgcmV0dXJuIE1h
dGNoUmVzdWx0KHVudGFnQ0Z1bmN0aW9uUHRyPFlhcnJKSVRDb2RlTWF0Y2hPbmx5OCwgWWFyck1h
dGNoT25seThCaXRQdHJUYWc+KG1fbWF0Y2hPbmx5OC5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3Mo
KSkoaW5wdXQsIHN0YXJ0LCBsZW5ndGgsIDAsIG1hdGNoaW5nQ29udGV4dCkpOwogICAgIH0KIAot
ICAgIE1hdGNoUmVzdWx0IGV4ZWN1dGUoY29uc3QgVUNoYXIqIGlucHV0LCB1bnNpZ25lZCBzdGFy
dCwgdW5zaWduZWQgbGVuZ3RoLCB2b2lkKiBmcmVlUGFyZW5Db250ZXh0LCB1bnNpZ25lZCBwYXJl
bkNvbnRleHRTaXplKQorICAgIE1hdGNoUmVzdWx0IGV4ZWN1dGUoY29uc3QgVUNoYXIqIGlucHV0
LCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoLCBNYXRjaGluZ0NvbnRleHRIb2xkZXIq
IG1hdGNoaW5nQ29udGV4dCkKICAgICB7CiAgICAgICAgIEFTU0VSVChoYXMxNkJpdENvZGVNYXRj
aE9ubHkoKSk7Ci0gICAgICAgIHJldHVybiBNYXRjaFJlc3VsdCh1bnRhZ0NGdW5jdGlvblB0cjxZ
YXJySklUQ29kZU1hdGNoT25seTE2LCBZYXJyTWF0Y2hPbmx5MTZCaXRQdHJUYWc+KG1fbWF0Y2hP
bmx5MTYuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKGlucHV0LCBzdGFydCwgbGVuZ3RoLCAw
LCBmcmVlUGFyZW5Db250ZXh0LCBwYXJlbkNvbnRleHRTaXplKSk7CisgICAgICAgIHJldHVybiBN
YXRjaFJlc3VsdCh1bnRhZ0NGdW5jdGlvblB0cjxZYXJySklUQ29kZU1hdGNoT25seTE2LCBZYXJy
TWF0Y2hPbmx5MTZCaXRQdHJUYWc+KG1fbWF0Y2hPbmx5MTYuY29kZSgpLmV4ZWN1dGFibGVBZGRy
ZXNzKCkpKGlucHV0LCBzdGFydCwgbGVuZ3RoLCAwLCBtYXRjaGluZ0NvbnRleHQpKTsKICAgICB9
CiAKICNpZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUveWFyci9ZYXJyUGF0dGVybi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3lhcnIvWWFyclBhdHRlcm4uY3BwCShyZXZpc2lvbiAyNTg4NjUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUveWFyci9ZYXJyUGF0dGVybi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcg
KzMzLDcgQEAKICNpbmNsdWRlICJZYXJyUGFyc2VyLmgiCiAjaW5jbHVkZSA8d3RmL0RhdGFMb2cu
aD4KICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvU3RhY2tQb2ludGVy
Lmg+CisjaW5jbHVkZSA8d3RmL1N0YWNrQ2hlY2suaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5n
Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC00MzYsMTAgKzQzNiw5IEBAIHByaXZh
dGU6CiAKIGNsYXNzIFlhcnJQYXR0ZXJuQ29uc3RydWN0b3IgewogcHVibGljOgotICAgIFlhcnJQ
YXR0ZXJuQ29uc3RydWN0b3IoWWFyclBhdHRlcm4mIHBhdHRlcm4sIHZvaWQqIHN0YWNrTGltaXQp
CisgICAgWWFyclBhdHRlcm5Db25zdHJ1Y3RvcihZYXJyUGF0dGVybiYgcGF0dGVybikKICAgICAg
ICAgOiBtX3BhdHRlcm4ocGF0dGVybikKICAgICAgICAgLCBtX2NoYXJhY3RlckNsYXNzQ29uc3Ry
dWN0b3IocGF0dGVybi5pZ25vcmVDYXNlKCksIHBhdHRlcm4udW5pY29kZSgpID8gQ2Fub25pY2Fs
TW9kZTo6VW5pY29kZSA6IENhbm9uaWNhbE1vZGU6OlVDUzIpCi0gICAgICAgICwgbV9zdGFja0xp
bWl0KHN0YWNrTGltaXQpCiAgICAgewogICAgICAgICBhdXRvIGJvZHkgPSBtYWtlVW5pcXVlPFBh
dHRlcm5EaXNqdW5jdGlvbj4oKTsKICAgICAgICAgbV9wYXR0ZXJuLm1fYm9keSA9IGJvZHkuZ2V0
KCk7CkBAIC0xMTE4LDI4ICsxMTE3LDIxIEBAIHB1YmxpYzoKICAgICBFcnJvckNvZGUgZXJyb3Io
KSB7IHJldHVybiBtX2Vycm9yOyB9CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBpc1NhZmVUb1JlY3Vy
c2UoKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKCFtX3N0YWNrTGltaXQpCi0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaW50OF90KiBjdXJyID0gcmVpbnRlcnByZXRfY2FzdDxp
bnQ4X3QqPihjdXJyZW50U3RhY2tQb2ludGVyKCkpOwotICAgICAgICBpbnQ4X3QqIGxpbWl0ID0g
cmVpbnRlcnByZXRfY2FzdDxpbnQ4X3QqPihtX3N0YWNrTGltaXQpOwotICAgICAgICByZXR1cm4g
Y3VyciA+PSBsaW1pdDsKLSAgICB9CisgICAgaW5saW5lIGJvb2wgaXNTYWZlVG9SZWN1cnNlKCkg
eyByZXR1cm4gbV9zdGFja0NoZWNrLmlzU2FmZVRvUmVjdXJzZSgpOyB9CiAKICAgICBZYXJyUGF0
dGVybiYgbV9wYXR0ZXJuOwogICAgIFBhdHRlcm5BbHRlcm5hdGl2ZSogbV9hbHRlcm5hdGl2ZTsK
ICAgICBDaGFyYWN0ZXJDbGFzc0NvbnN0cnVjdG9yIG1fY2hhcmFjdGVyQ2xhc3NDb25zdHJ1Y3Rv
cjsKICAgICBWZWN0b3I8U3RyaW5nPiBtX3VubWF0Y2hlZE5hbWVkRm9yd2FyZFJlZmVyZW5jZXM7
Ci0gICAgdm9pZCogbV9zdGFja0xpbWl0OworICAgIFN0YWNrQ2hlY2sgbV9zdGFja0NoZWNrOwog
ICAgIEVycm9yQ29kZSBtX2Vycm9yIHsgRXJyb3JDb2RlOjpOb0Vycm9yIH07CiAgICAgYm9vbCBt
X2ludmVydENoYXJhY3RlckNsYXNzOwogICAgIGJvb2wgbV9pbnZlcnRQYXJlbnRoZXRpY2FsQXNz
ZXJ0aW9uIHsgZmFsc2UgfTsKIH07CiAKLUVycm9yQ29kZSBZYXJyUGF0dGVybjo6Y29tcGlsZShj
b25zdCBTdHJpbmcmIHBhdHRlcm5TdHJpbmcsIHZvaWQqIHN0YWNrTGltaXQpCitFcnJvckNvZGUg
WWFyclBhdHRlcm46OmNvbXBpbGUoY29uc3QgU3RyaW5nJiBwYXR0ZXJuU3RyaW5nKQogewotICAg
IFlhcnJQYXR0ZXJuQ29uc3RydWN0b3IgY29uc3RydWN0b3IoKnRoaXMsIHN0YWNrTGltaXQpOwor
ICAgIFlhcnJQYXR0ZXJuQ29uc3RydWN0b3IgY29uc3RydWN0b3IoKnRoaXMpOwogCiAgICAgewog
ICAgICAgICBFcnJvckNvZGUgZXJyb3IgPSBwYXJzZShjb25zdHJ1Y3RvciwgcGF0dGVyblN0cmlu
ZywgdW5pY29kZSgpKTsKQEAgLTExODMsNyArMTE3NSw3IEBAIEVycm9yQ29kZSBZYXJyUGF0dGVy
bjo6Y29tcGlsZShjb25zdCBTdHIKICAgICByZXR1cm4gRXJyb3JDb2RlOjpOb0Vycm9yOwogfQog
Ci1ZYXJyUGF0dGVybjo6WWFyclBhdHRlcm4oY29uc3QgU3RyaW5nJiBwYXR0ZXJuLCBPcHRpb25T
ZXQ8RmxhZ3M+IGZsYWdzLCBFcnJvckNvZGUmIGVycm9yLCB2b2lkKiBzdGFja0xpbWl0KQorWWFy
clBhdHRlcm46OllhcnJQYXR0ZXJuKGNvbnN0IFN0cmluZyYgcGF0dGVybiwgT3B0aW9uU2V0PEZs
YWdzPiBmbGFncywgRXJyb3JDb2RlJiBlcnJvcikKICAgICA6IG1fY29udGFpbnNCYWNrcmVmZXJl
bmNlcyhmYWxzZSkKICAgICAsIG1fY29udGFpbnNCT0woZmFsc2UpCiAgICAgLCBtX2NvbnRhaW5z
VW5zaWduZWRMZW5ndGhQYXR0ZXJuKGZhbHNlKQpAQCAtMTE5Miw3ICsxMTg0LDcgQEAgWWFyclBh
dHRlcm46OllhcnJQYXR0ZXJuKGNvbnN0IFN0cmluZyYgcAogICAgICwgbV9mbGFncyhmbGFncykK
IHsKICAgICBBU1NFUlQobV9mbGFncyAhPSBGbGFnczo6RGVsZXRlZFZhbHVlKTsKLSAgICBlcnJv
ciA9IGNvbXBpbGUocGF0dGVybiwgc3RhY2tMaW1pdCk7CisgICAgZXJyb3IgPSBjb21waWxlKHBh
dHRlcm4pOwogfQogCiB2b2lkIGluZGVudEZvck5lc3RpbmdMZXZlbChQcmludFN0cmVhbSYgb3V0
LCB1bnNpZ25lZCBuZXN0aW5nRGVwdGgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFy
ci9ZYXJyUGF0dGVybi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJy
L1lhcnJQYXR0ZXJuLmgJKHJldmlzaW9uIDI1ODg2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS95YXJyL1lhcnJQYXR0ZXJuLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4Niw3ICszODYsNyBAQCBz
dHJ1Y3QgVGVybUNoYWluIHsKIAogCiBzdHJ1Y3QgWWFyclBhdHRlcm4gewotICAgIEpTX0VYUE9S
VF9QUklWQVRFIFlhcnJQYXR0ZXJuKGNvbnN0IFN0cmluZyYgcGF0dGVybiwgT3B0aW9uU2V0PEZs
YWdzPiwgRXJyb3JDb2RlJiwgdm9pZCogc3RhY2tMaW1pdCA9IG51bGxwdHIpOworICAgIEpTX0VY
UE9SVF9QUklWQVRFIFlhcnJQYXR0ZXJuKGNvbnN0IFN0cmluZyYgcGF0dGVybiwgT3B0aW9uU2V0
PEZsYWdzPiwgRXJyb3JDb2RlJik7CiAKICAgICB2b2lkIHJlc2V0Rm9yUmVwYXJzaW5nKCkKICAg
ICB7CkBAIC01NjUsNyArNTY1LDcgQEAgc3RydWN0IFlhcnJQYXR0ZXJuIHsKICAgICBIYXNoTWFw
PFN0cmluZywgdW5zaWduZWQ+IG1fbmFtZWRHcm91cFRvUGFyZW5JbmRleDsKIAogcHJpdmF0ZToK
LSAgICBFcnJvckNvZGUgY29tcGlsZShjb25zdCBTdHJpbmcmIHBhdHRlcm5TdHJpbmcsIHZvaWQq
IHN0YWNrTGltaXQpOworICAgIEVycm9yQ29kZSBjb21waWxlKGNvbnN0IFN0cmluZyYgcGF0dGVy
blN0cmluZyk7CiAKICAgICBDaGFyYWN0ZXJDbGFzcyogYW55Y2hhckNhY2hlZCB7IG51bGxwdHIg
fTsKICAgICBDaGFyYWN0ZXJDbGFzcyogbmV3bGluZUNhY2hlZCB7IG51bGxwdHIgfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>394342</attachid>
            <date>2020-03-23 19:11:27 -0700</date>
            <delta_ts>2020-03-24 07:41:27 -0700</delta_ts>
            <desc>Speculative fixes for ARMv7 and Windows</desc>
            <filename>209435-wip3.patch</filename>
            <type>text/plain</type>
            <size>28143</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjU4ODY1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBA
CisyMDIwLTAzLTIzICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIFJlZmFjdG9yIFlBUlIgU3RhY2sgT3ZlcmZsb3cgQ2hlY2tzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDk0MzUKKyAgICAgICAgcmRhcjovL3By
b2JsZW0vNTg5ODgyNTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBSZWZhY3RvcmVkIHN0YWNrIGNoZWNrcyBpbiBZQVJSIGNvZGUgaW5jbHVkaW5nIGFk
ZGluZyBhIHN0YWNrIGNoZWNrIHRvIHRoZSBZQVJSIEpJVCdlZCBjb2RlLgorICAgICAgICBUaGUg
QysrIGNvZGUgaW5jbHVkaW5nIHRoZSBwYXJzZXIsIGJ5dGUgY29kZSBjb21waWxlciBhbmQgaW50
ZXJwcmV0ZXIgbm93IGFsbCB1c2UgU3RhY2tDaGVjay4KKyAgICAgICAgVGhlIEpJVCdlZCBjb2Rl
IG5lZWRzIGEgc3RhY2sgbGltaXQgcGFzc2VkIHZpYSBhIHBhcmFtZXRlciBzaW5jZSB0aGUgSklU
J2VkIGNvZGUgY2FuIGJlIAorICAgICAgICBjYWxsZWQgZnJvbSB0aGUgY29tcGlsZXIgdGhyZWFk
IHdoZW4gY29tcGlsaW5nIERGRyAvIEZUTCBjb2RlLgorCisgICAgICAgIEluc3RlYWQgb2YgYWRk
aW5nIGEgbmV3IHBhcmFtZXRlciwgY29uc29saWRhdGVkIHRoZSB0d28gcGF0dGVybiBjb250ZXh0
IGJ1ZmZlciB2YWx1ZXMsIGJ1ZmZlcgorICAgICAgICBwb2ludGVyIGFuZCBzaXplLCB3aXRoIHRo
ZSBuZXcgc3RhY2sgbGltaXQgaW50byBhIG5ldyBNYXRjaGluZ0NvbnRleHRIb2xkZXIsIGFuIFJB
SUkgb2JqZWN0LgorICAgICAgICBUaGUgTWF0Y2hpbmdDb250ZXh0SG9sZGVyIGNvbnN0cnVjdG9y
IHVzZXMgZWl0aGVyIHRoZSBWTSBzdGFjayBsaW1pdCBvciB0aGUgY3VycmVudCB0aHJlYWQncwor
ICAgICAgICBzdGFjayBsaW1pdCBkZXBlbmRpbmcgb24gaG93IGl0IGlzIGNhbGxlZC4KKworICAg
ICAgICAqIHJ1bnRpbWUvUmVnRXhwLmNwcDoKKyAgICAgICAgKEpTQzo6UmVnRXhwOjpmaW5pc2hD
cmVhdGlvbik6CisgICAgICAgIChKU0M6OlJlZ0V4cDo6Ynl0ZUNvZGVDb21waWxlSWZOZWNlc3Nh
cnkpOgorICAgICAgICAoSlNDOjpSZWdFeHA6OmNvbXBpbGUpOgorICAgICAgICAoSlNDOjpSZWdF
eHA6Om1hdGNoQ29uY3VycmVudGx5KToKKyAgICAgICAgKEpTQzo6UmVnRXhwOjpjb21waWxlTWF0
Y2hPbmx5KToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cC5oOgorICAgICAgICAqIHJ1bnRpbWUv
UmVnRXhwSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpSZWdFeHA6Om1hdGNoSW5saW5lKToKKyAg
ICAgICAgKEpTQzo6UGF0dGVybkNvbnRleHRCdWZmZXJIb2xkZXI6OlBhdHRlcm5Db250ZXh0QnVm
ZmVySG9sZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6UGF0dGVybkNvbnRleHRCdWZmZXJI
b2xkZXI6On5QYXR0ZXJuQ29udGV4dEJ1ZmZlckhvbGRlcik6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OlBhdHRlcm5Db250ZXh0QnVmZmVySG9sZGVyOjpidWZmZXIpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpQYXR0ZXJuQ29udGV4dEJ1ZmZlckhvbGRlcjo6c2l6ZSk6IERlbGV0ZWQuCisgICAg
ICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIHlhcnIvWWFyci5oOgorICAgICAgICAqIHlhcnIv
WWFyckludGVycHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6WWFycjo6SW50ZXJwcmV0ZXI6Om1h
dGNoRGlzanVuY3Rpb24pOgorICAgICAgICAoSlNDOjpZYXJyOjpJbnRlcnByZXRlcjo6aXNTYWZl
VG9SZWN1cnNlKToKKyAgICAgICAgKiB5YXJyL1lhcnJKSVQuY3BwOgorICAgICAgICAoSlNDOjpZ
YXJyOjpNYXRjaGluZ0NvbnRleHRIb2xkZXI6Ok1hdGNoaW5nQ29udGV4dEhvbGRlcik6CisgICAg
ICAgIChKU0M6OllhcnI6Ok1hdGNoaW5nQ29udGV4dEhvbGRlcjo6fk1hdGNoaW5nQ29udGV4dEhv
bGRlcik6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJHZW5lcmF0b3I6OmluaXRQYXJlbkNvbnRl
eHRGcmVlTGlzdCk6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJHZW5lcmF0b3I6OmFsaWduQ2Fs
bEZyYW1lU2l6ZUluQnl0ZXMpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjpj
b21waWxlKToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckdlbmVyYXRvcjo6aW5pdENhbGxGcmFt
ZSk6IERlbGV0ZWQuCisgICAgICAgICogeWFyci9ZYXJySklULmg6CisgICAgICAgIChKU0M6Ollh
cnI6Ok1hdGNoaW5nQ29udGV4dEhvbGRlcjo6b2Zmc2V0T2ZTdGFja0xpbWl0KToKKyAgICAgICAg
KEpTQzo6WWFycjo6TWF0Y2hpbmdDb250ZXh0SG9sZGVyOjpvZmZzZXRPZlBhdHRlcm5Db250ZXh0
QnVmZmVyKToKKyAgICAgICAgKEpTQzo6WWFycjo6TWF0Y2hpbmdDb250ZXh0SG9sZGVyOjpvZmZz
ZXRPZlBhdHRlcm5Db250ZXh0QnVmZmVyU2l6ZSk6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJD
b2RlQmxvY2s6OmV4ZWN1dGUpOgorICAgICAgICAqIHlhcnIvWWFyclBhdHRlcm4uY3BwOgorICAg
ICAgICAoSlNDOjpZYXJyOjpZYXJyUGF0dGVybkNvbnN0cnVjdG9yOjpZYXJyUGF0dGVybkNvbnN0
cnVjdG9yKToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyclBhdHRlcm5Db25zdHJ1Y3Rvcjo6aXNT
YWZlVG9SZWN1cnNlKToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyclBhdHRlcm46OmNvbXBpbGUp
OgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyUGF0dGVybjo6WWFyclBhdHRlcm4pOgorICAgICAg
ICAoSlNDOjpZYXJyOjpZYXJyUGF0dGVybkNvbnN0cnVjdG9yOjppc1NhZmVUb1JlY3Vyc2UgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAqIHlhcnIvWWFyclBhdHRlcm4uaDoKKwogMjAyMC0wMy0y
MyAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29ueS5jb20+CiAKICAgICAgICAgVW5y
ZXZpZXdlZCwgYWRkcmVzcyBZdXN1a2UncyBmZWVkYmFjayBvbiByMjU4ODAxLgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAuY3BwCShyZXZpc2lvbiAyNTg4NjUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNzAsNyArMTcwLDcgQEAgUmVnRXhwOjpSZWdFeHAoVk0mIHZtLCBjb25zdCBTdHJpbmcm
IHBhdAogdm9pZCBSZWdFeHA6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKIHsKICAgICBCYXNlOjpm
aW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgWWFycjo6WWFyclBhdHRlcm4gcGF0dGVybihtX3BhdHRl
cm5TdHJpbmcsIG1fZmxhZ3MsIG1fY29uc3RydWN0aW9uRXJyb3JDb2RlLCB2bS5zdGFja0xpbWl0
KCkpOworICAgIFlhcnI6OllhcnJQYXR0ZXJuIHBhdHRlcm4obV9wYXR0ZXJuU3RyaW5nLCBtX2Zs
YWdzLCBtX2NvbnN0cnVjdGlvbkVycm9yQ29kZSk7CiAgICAgaWYgKCFpc1ZhbGlkKCkpIHsKICAg
ICAgICAgbV9zdGF0ZSA9IFBhcnNlRXJyb3I7CiAgICAgICAgIHJldHVybjsKQEAgLTIyNywxMyAr
MjI3LDEwIEBAIHZvaWQgUmVnRXhwOjpieXRlQ29kZUNvbXBpbGVJZk5lY2Vzc2FyeSgKICAgICBp
ZiAobV9yZWdFeHBCeXRlY29kZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgWWFycjo6WWFyclBh
dHRlcm4gcGF0dGVybihtX3BhdHRlcm5TdHJpbmcsIG1fZmxhZ3MsIG1fY29uc3RydWN0aW9uRXJy
b3JDb2RlLCB2bS0+c3RhY2tMaW1pdCgpKTsKKyAgICBZYXJyOjpZYXJyUGF0dGVybiBwYXR0ZXJu
KG1fcGF0dGVyblN0cmluZywgbV9mbGFncywgbV9jb25zdHJ1Y3Rpb25FcnJvckNvZGUpOwogICAg
IGlmIChoYXNFcnJvcihtX2NvbnN0cnVjdGlvbkVycm9yQ29kZSkpIHsKLSAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNpZiBDT01QSUxFUl9RVUlSSyhDT05TSURFUlNfVU5S
RUFDSEFCTEVfQ09ERSkKICAgICAgICAgbV9zdGF0ZSA9IFBhcnNlRXJyb3I7CiAgICAgICAgIHJl
dHVybjsKLSNlbmRpZgogICAgIH0KICAgICBBU1NFUlQobV9udW1TdWJwYXR0ZXJucyA9PSBwYXR0
ZXJuLm1fbnVtU3VicGF0dGVybnMpOwogCkBAIC0yNDgsNyArMjQ1LDcgQEAgdm9pZCBSZWdFeHA6
OmNvbXBpbGUoVk0qIHZtLCBZYXJyOjpZYXJyQwogewogICAgIGF1dG8gbG9ja2VyID0gaG9sZExv
Y2soY2VsbExvY2soKSk7CiAgICAgCi0gICAgWWFycjo6WWFyclBhdHRlcm4gcGF0dGVybihtX3Bh
dHRlcm5TdHJpbmcsIG1fZmxhZ3MsIG1fY29uc3RydWN0aW9uRXJyb3JDb2RlLCB2bS0+c3RhY2tM
aW1pdCgpKTsKKyAgICBZYXJyOjpZYXJyUGF0dGVybiBwYXR0ZXJuKG1fcGF0dGVyblN0cmluZywg
bV9mbGFncywgbV9jb25zdHJ1Y3Rpb25FcnJvckNvZGUpOwogICAgIGlmIChoYXNFcnJvcihtX2Nv
bnN0cnVjdGlvbkVycm9yQ29kZSkpIHsKICAgICAgICAgbV9zdGF0ZSA9IFBhcnNlRXJyb3I7CiAg
ICAgICAgIHJldHVybjsKQEAgLTMwMiw3ICsyOTksOSBAQCBib29sIFJlZ0V4cDo6bWF0Y2hDb25j
dXJyZW50bHkoCiAgICAgaWYgKCFoYXNDb2RlRm9yKHMuaXM4Qml0KCkgPyBZYXJyOjpDaGFyOCA6
IFlhcnI6OkNoYXIxNikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHBvc2l0aW9uID0g
bWF0Y2godm0sIHMsIHN0YXJ0T2Zmc2V0LCBvdmVjdG9yKTsKKyAgICBwb3NpdGlvbiA9IG1hdGNo
SW5saW5lPFZlY3RvcjxpbnQ+JiwgWWFycjo6TWF0Y2hGcm9tOjpDb21waWxlclRocmVhZD4odm0s
IHMsIHN0YXJ0T2Zmc2V0LCBvdmVjdG9yKTsKKyAgICBpZiAobV9zdGF0ZSA9PSBQYXJzZUVycm9y
KQorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTMxMCw3
ICszMDksNyBAQCB2b2lkIFJlZ0V4cDo6Y29tcGlsZU1hdGNoT25seShWTSogdm0sIFlhCiB7CiAg
ICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhjZWxsTG9jaygpKTsKICAgICAKLSAgICBZYXJyOjpZ
YXJyUGF0dGVybiBwYXR0ZXJuKG1fcGF0dGVyblN0cmluZywgbV9mbGFncywgbV9jb25zdHJ1Y3Rp
b25FcnJvckNvZGUsIHZtLT5zdGFja0xpbWl0KCkpOworICAgIFlhcnI6OllhcnJQYXR0ZXJuIHBh
dHRlcm4obV9wYXR0ZXJuU3RyaW5nLCBtX2ZsYWdzLCBtX2NvbnN0cnVjdGlvbkVycm9yQ29kZSk7
CiAgICAgaWYgKGhhc0Vycm9yKG1fY29uc3RydWN0aW9uRXJyb3JDb2RlKSkgewogICAgICAgICBt
X3N0YXRlID0gUGFyc2VFcnJvcjsKICAgICAgICAgcmV0dXJuOwpAQCAtMzYzLDcgKzM2Miw3IEBA
IGJvb2wgUmVnRXhwOjptYXRjaENvbmN1cnJlbnRseShWTSYgdm0sIGMKICAgICBpZiAoIWhhc01h
dGNoT25seUNvZGVGb3Iocy5pczhCaXQoKSA/IFlhcnI6OkNoYXI4IDogWWFycjo6Q2hhcjE2KSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmVzdWx0ID0gbWF0Y2godm0sIHMsIHN0YXJ0
T2Zmc2V0KTsKKyAgICByZXN1bHQgPSBtYXRjaElubGluZTxZYXJyOjpNYXRjaEZyb206OkNvbXBp
bGVyVGhyZWFkPih2bSwgcywgc3RhcnRPZmZzZXQpOwogICAgIHJldHVybiB0cnVlOwogfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAuaAkocmV2aXNpb24gMjU4ODY1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTg2LDggKzg2LDkgQEAgcHVibGljOgogICAgIGJvb2wgbWF0Y2hDb25jdXJyZW50bHko
Vk0mLCBjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgTWF0Y2hSZXN1bHQmKTsK
IAogICAgIC8vIENhbGwgdGhlc2UgdmVyc2lvbnMgb2YgdGhlIG1hdGNoIGZ1bmN0aW9ucyBpZiB5
b3UncmUgZGVzcGVyYXRlIGZvciBwZXJmb3JtYW5jZS4KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBW
ZWN0b3JUeXBlPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZlY3RvclR5cGUsIFlhcnI6Ok1hdGNo
RnJvbSB0aHJlYWQgPSBZYXJyOjpNYXRjaEZyb206OlZNVGhyZWFkPgogICAgIGludCBtYXRjaElu
bGluZShWTSYsIGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCBWZWN0b3JUeXBl
JiBvdmVjdG9yKTsKKyAgICB0ZW1wbGF0ZTxZYXJyOjpNYXRjaEZyb20gdGhyZWFkID0gWWFycjo6
TWF0Y2hGcm9tOjpWTVRocmVhZD4KICAgICBNYXRjaFJlc3VsdCBtYXRjaElubGluZShWTSYsIGNv
bnN0IFN0cmluZyYsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0KTsKICAgICAKICAgICB1bnNpZ25lZCBu
dW1TdWJwYXR0ZXJucygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtU3VicGF0dGVybnM7IH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cElubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBJbmxpbmVzLmgJKHJldmlz
aW9uIDI1ODg2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cElubGlu
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtODYsMzggKzg2LDYgQEAgQUxXQVlTX0lOTElORSBib29s
IFJlZ0V4cDo6aGFzQ29kZUZvcihZYQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotY2xhc3MgUGF0
dGVybkNvbnRleHRCdWZmZXJIb2xkZXIgewotICAgIFdURl9GT1JCSURfSEVBUF9BTExPQ0FUSU9O
OwotcHVibGljOgotICAgIFBhdHRlcm5Db250ZXh0QnVmZmVySG9sZGVyKFZNJiB2bSwgYm9vbCBu
ZWVkQnVmZmVyKQotICAgICAgICA6IG1fdm0odm0pCi0gICAgewotI2lmIEVOQUJMRShZQVJSX0pJ
VF9BTExfUEFSRU5TX0VYUFJFU1NJT05TKQotICAgICAgICBpZiAobmVlZEJ1ZmZlcikKLSAgICAg
ICAgICAgIG1fYnVmZmVyID0gbV92bS5hY3F1aXJlUmVnRXhwUGF0dGVybkNvbnRleEJ1ZmZlcigp
OwotI2Vsc2UKLSAgICAgICAgVU5VU0VEX1BBUkFNKG5lZWRCdWZmZXIpOwotI2VuZGlmCi0gICAg
fQotCi0gICAgflBhdHRlcm5Db250ZXh0QnVmZmVySG9sZGVyKCkKLSAgICB7Ci0jaWYgRU5BQkxF
KFlBUlJfSklUX0FMTF9QQVJFTlNfRVhQUkVTU0lPTlMpCi0gICAgICAgIGlmIChidWZmZXIoKSkK
LSAgICAgICAgICAgIG1fdm0ucmVsZWFzZVJlZ0V4cFBhdHRlcm5Db250ZXhCdWZmZXIoKTsKLSNl
bHNlCi0gICAgICAgIFVOVVNFRF9QQVJBTShtX3ZtKTsKLSNlbmRpZgotICAgIH0KLQotICAgIHZv
aWQqIGJ1ZmZlcigpIHsgcmV0dXJuIG1fYnVmZmVyOyB9Ci0gICAgdW5zaWduZWQgc2l6ZSgpIHsg
cmV0dXJuIGJ1ZmZlcigpID8gVk06OnBhdHRlcm5Db250ZXh0QnVmZmVyU2l6ZSA6IDA7IH0KLQot
cHJpdmF0ZToKLSAgICBWTSYgbV92bTsKLSAgICB2b2lkKiBtX2J1ZmZlciB7IG51bGxwdHIgfTsK
LX07Ci0KIEFMV0FZU19JTkxJTkUgdm9pZCBSZWdFeHA6OmNvbXBpbGVJZk5lY2Vzc2FyeShWTSYg
dm0sIFlhcnI6OllhcnJDaGFyU2l6ZSBjaGFyU2l6ZSkKIHsKICAgICBpZiAoaGFzQ29kZUZvcihj
aGFyU2l6ZSkpCkBAIC0xMjksNyArOTcsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgUmVnRXhwOjpj
b21waWxlSWZOZWNlCiAgICAgY29tcGlsZSgmdm0sIGNoYXJTaXplKTsKIH0KIAotdGVtcGxhdGU8
dHlwZW5hbWUgVmVjdG9yVHlwZT4KK3RlbXBsYXRlPHR5cGVuYW1lIFZlY3RvclR5cGUsIFlhcnI6
Ok1hdGNoRnJvbSBtYXRjaEZyb20+CiBBTFdBWVNfSU5MSU5FIGludCBSZWdFeHA6Om1hdGNoSW5s
aW5lKFZNJiB2bSwgY29uc3QgU3RyaW5nJiBzLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgVmVjdG9y
VHlwZSYgb3ZlY3RvcikKIHsKICNpZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcpCkBAIC0xNjIsMTkg
KzEzMCwyMiBAQCBBTFdBWVNfSU5MSU5FIGludCBSZWdFeHA6Om1hdGNoSW5saW5lKFZNCiAgICAg
aWYgKG1fc3RhdGUgPT0gSklUQ29kZSkgewogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQo
bV9yZWdFeHBKSVRDb2RlKTsKLSAgICAgICAgICAgIFBhdHRlcm5Db250ZXh0QnVmZmVySG9sZGVy
IHBhdHRlcm5Db250ZXh0QnVmZmVySG9sZGVyKHZtLCBtX3JlZ0V4cEpJVENvZGUtPnVzZXNQYXR0
ZXJuQ29udGV4dEJ1ZmZlcigpKTsKKyAgICAgICAgICAgIFlhcnI6Ok1hdGNoaW5nQ29udGV4dEhv
bGRlciByZWdFeHBDb250ZXh0KHZtLCBtX3JlZ0V4cEpJVENvZGUuZ2V0KCksIG1hdGNoRnJvbSk7
CiAKICAgICAgICAgICAgIGlmIChzLmlzOEJpdCgpKQotICAgICAgICAgICAgICAgIHJlc3VsdCA9
IG1fcmVnRXhwSklUQ29kZS0+ZXhlY3V0ZShzLmNoYXJhY3RlcnM4KCksIHN0YXJ0T2Zmc2V0LCBz
Lmxlbmd0aCgpLCBvZmZzZXRWZWN0b3IsIHBhdHRlcm5Db250ZXh0QnVmZmVySG9sZGVyLmJ1ZmZl
cigpLCBwYXR0ZXJuQ29udGV4dEJ1ZmZlckhvbGRlci5zaXplKCkpLnN0YXJ0OworICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IG1fcmVnRXhwSklUQ29kZS0+ZXhlY3V0ZShzLmNoYXJhY3RlcnM4KCks
IHN0YXJ0T2Zmc2V0LCBzLmxlbmd0aCgpLCBvZmZzZXRWZWN0b3IsICZyZWdFeHBDb250ZXh0KS5z
dGFydDsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBtX3JlZ0V4
cEpJVENvZGUtPmV4ZWN1dGUocy5jaGFyYWN0ZXJzMTYoKSwgc3RhcnRPZmZzZXQsIHMubGVuZ3Ro
KCksIG9mZnNldFZlY3RvciwgcGF0dGVybkNvbnRleHRCdWZmZXJIb2xkZXIuYnVmZmVyKCksIHBh
dHRlcm5Db250ZXh0QnVmZmVySG9sZGVyLnNpemUoKSkuc3RhcnQ7CisgICAgICAgICAgICAgICAg
cmVzdWx0ID0gbV9yZWdFeHBKSVRDb2RlLT5leGVjdXRlKHMuY2hhcmFjdGVyczE2KCksIHN0YXJ0
T2Zmc2V0LCBzLmxlbmd0aCgpLCBvZmZzZXRWZWN0b3IsICZyZWdFeHBDb250ZXh0KS5zdGFydDsK
ICAgICAgICAgfQogCiAgICAgICAgIGlmIChyZXN1bHQgPT0gWWFycjo6SlNSZWdFeHBKSVRDb2Rl
RmFpbHVyZSkgewogICAgICAgICAgICAgLy8gSklUJ2VkIGNvZGUgY291bGRuJ3QgaGFuZGxlIGV4
cHJlc3Npb24sIHNvIHB1bnQgYmFjayB0byB0aGUgaW50ZXJwcmV0ZXIuCiAgICAgICAgICAgICBi
eXRlQ29kZUNvbXBpbGVJZk5lY2Vzc2FyeSgmdm0pOwotICAgICAgICAgICAgaWYgKG1fc3RhdGUg
PT0gUGFyc2VFcnJvcikKKyAgICAgICAgICAgIGlmIChtX3N0YXRlID09IFBhcnNlRXJyb3IpIHsK
KyAgICAgICAgICAgICAgICBpZiAobWF0Y2hGcm9tID09IFlhcnI6Ok1hdGNoRnJvbTo6Q29tcGls
ZXJUaHJlYWQpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgICAg
ICByZXR1cm4gdGhyb3dFcnJvcigpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgcmVzdWx0
ID0gWWFycjo6aW50ZXJwcmV0KG1fcmVnRXhwQnl0ZWNvZGUuZ2V0KCksIHMsIHN0YXJ0T2Zmc2V0
LCByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4ob2Zmc2V0VmVjdG9yKSk7CiAgICAgICAgIH0K
IApAQCAtMjYwLDYgKzIzMSw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBSZWdFeHA6OmNvbXBpbGVJ
Zk5lY2UKICAgICBjb21waWxlTWF0Y2hPbmx5KCZ2bSwgY2hhclNpemUpOwogfQogCit0ZW1wbGF0
ZTxZYXJyOjpNYXRjaEZyb20gbWF0Y2hGcm9tPgogQUxXQVlTX0lOTElORSBNYXRjaFJlc3VsdCBS
ZWdFeHA6Om1hdGNoSW5saW5lKFZNJiB2bSwgY29uc3QgU3RyaW5nJiBzLCB1bnNpZ25lZCBzdGFy
dE9mZnNldCkKIHsKICNpZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcpCkBAIC0yODksMTEgKzI2MSwx
MiBAQCBBTFdBWVNfSU5MSU5FIE1hdGNoUmVzdWx0IFJlZ0V4cDo6bWF0Y2hJCiAgICAgaWYgKG1f
c3RhdGUgPT0gSklUQ29kZSkgewogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQobV9yZWdF
eHBKSVRDb2RlKTsKLSAgICAgICAgICAgIFBhdHRlcm5Db250ZXh0QnVmZmVySG9sZGVyIHBhdHRl
cm5Db250ZXh0QnVmZmVySG9sZGVyKHZtLCBtX3JlZ0V4cEpJVENvZGUtPnVzZXNQYXR0ZXJuQ29u
dGV4dEJ1ZmZlcigpKTsKKyAgICAgICAgICAgIFlhcnI6Ok1hdGNoaW5nQ29udGV4dEhvbGRlciBy
ZWdFeHBDb250ZXh0KHZtLCBtX3JlZ0V4cEpJVENvZGUuZ2V0KCksIG1hdGNoRnJvbSk7CisKICAg
ICAgICAgICAgIGlmIChzLmlzOEJpdCgpKQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1fcmVn
RXhwSklUQ29kZS0+ZXhlY3V0ZShzLmNoYXJhY3RlcnM4KCksIHN0YXJ0T2Zmc2V0LCBzLmxlbmd0
aCgpLCBwYXR0ZXJuQ29udGV4dEJ1ZmZlckhvbGRlci5idWZmZXIoKSwgcGF0dGVybkNvbnRleHRC
dWZmZXJIb2xkZXIuc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBtX3JlZ0V4cEpJ
VENvZGUtPmV4ZWN1dGUocy5jaGFyYWN0ZXJzOCgpLCBzdGFydE9mZnNldCwgcy5sZW5ndGgoKSwg
JnJlZ0V4cENvbnRleHQpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IG1fcmVnRXhwSklUQ29kZS0+ZXhlY3V0ZShzLmNoYXJhY3RlcnMxNigpLCBzdGFydE9mZnNl
dCwgcy5sZW5ndGgoKSwgcGF0dGVybkNvbnRleHRCdWZmZXJIb2xkZXIuYnVmZmVyKCksIHBhdHRl
cm5Db250ZXh0QnVmZmVySG9sZGVyLnNpemUoKSk7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0g
bV9yZWdFeHBKSVRDb2RlLT5leGVjdXRlKHMuY2hhcmFjdGVyczE2KCksIHN0YXJ0T2Zmc2V0LCBz
Lmxlbmd0aCgpLCAmcmVnRXhwQ29udGV4dCk7CiAgICAgICAgIH0KIAogI2lmIEVOQUJMRShSRUdF
WFBfVFJBQ0lORykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJyLmgJKHJldmlzaW9uIDI1
ODg2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnIuaAkod29ya2luZyBjb3B5
KQpAQCAtNDksNiArNDksOCBAQCBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG9mZnNldE5vTWF0
Y2ggCiAvLyBhdm9pZCBzcGVuZGluZyBleHBvbmVudGlhbCB0aW1lIG9uIGNvbXBsZXggcmVndWxh
ciBleHByZXNzaW9ucy4KIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF0Y2hMaW1pdCA9IDEw
MDAwMDA7CiAKK2VudW0gTWF0Y2hGcm9tIHsgVk1UaHJlYWQsIENvbXBpbGVyVGhyZWFkIH07CisK
IGVudW0gSlNSZWdFeHBSZXN1bHQgewogICAgIEpTUmVnRXhwTWF0Y2ggPSAxLAogICAgIEpTUmVn
RXhwTm9NYXRjaCA9IDAsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySW50
ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lh
cnJJbnRlcnByZXRlci5jcHAJKHJldmlzaW9uIDI1ODg2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS95YXJyL1lhcnJJbnRlcnByZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNzIsNiAr
MTI3Miw5IEBAIHB1YmxpYzoKICNkZWZpbmUgY3VycmVudFRlcm0oKSAoZGlzanVuY3Rpb24tPnRl
cm1zW2NvbnRleHQtPnRlcm1dKQogICAgIEpTUmVnRXhwUmVzdWx0IG1hdGNoRGlzanVuY3Rpb24o
Qnl0ZURpc2p1bmN0aW9uKiBkaXNqdW5jdGlvbiwgRGlzanVuY3Rpb25Db250ZXh0KiBjb250ZXh0
LCBib29sIGJ0cmFjayA9IGZhbHNlKQogICAgIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFpc1Nh
ZmVUb1JlY3Vyc2UoKSkpCisgICAgICAgICAgICByZXR1cm4gSlNSZWdFeHBFcnJvck5vTWVtb3J5
OworCiAgICAgICAgIGlmICghLS1yZW1haW5pbmdNYXRjaENvdW50KQogICAgICAgICAgICAgcmV0
dXJuIEpTUmVnRXhwRXJyb3JIaXRMaW1pdDsKIApAQCAtMTY2NywxMCArMTY3MCwxMyBAQCBwdWJs
aWM6CiAgICAgfQogCiBwcml2YXRlOgorICAgIGlubGluZSBib29sIGlzU2FmZVRvUmVjdXJzZSgp
IHsgcmV0dXJuIG1fc3RhY2tDaGVjay5pc1NhZmVUb1JlY3Vyc2UoKTsgfQorCiAgICAgQnl0ZWNv
ZGVQYXR0ZXJuKiBwYXR0ZXJuOwogICAgIGJvb2wgdW5pY29kZTsKICAgICB1bnNpZ25lZCogb3V0
cHV0OwogICAgIElucHV0U3RyZWFtIGlucHV0OworICAgIFN0YWNrQ2hlY2sgbV9zdGFja0NoZWNr
OwogICAgIFdURjo6QnVtcFBvaW50ZXJQb29sKiBhbGxvY2F0b3JQb29sIHsgbnVsbHB0ciB9Owog
ICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0OwogICAgIHVuc2lnbmVkIHJlbWFpbmluZ01hdGNoQ291
bnQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmNwcAkocmV2aXNpb24g
MjU4ODY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI2LDE4ICsyNiw0OCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIllhcnJKSVQuaCIKIAotI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CiAjaW5jbHVkZSAi
TGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIk9wdGlvbnMuaCIKICNpbmNsdWRlICJWTS5oIgogI2lu
Y2x1ZGUgIllhcnIuaCIKICNpbmNsdWRlICJZYXJyQ2Fub25pY2FsaXplLmgiCiAjaW5jbHVkZSAi
WWFyckRpc2Fzc2VtYmxlci5oIgorI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CisjaW5jbHVk
ZSA8d3RmL1RocmVhZGluZy5oPgorCiAKICNpZiBFTkFCTEUoWUFSUl9KSVQpCiAKIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgWWFyciB7CiAKK01hdGNoaW5nQ29udGV4dEhvbGRlcjo6TWF0Y2hp
bmdDb250ZXh0SG9sZGVyKFZNJiB2bSwgWWFyckNvZGVCbG9jayogeWFyckNvZGVCbG9jaywgTWF0
Y2hGcm9tIG1hdGNoRnJvbSkKKyAgICA6IG1fdm0odm0pCit7CisgICAgaWYgKG1hdGNoRnJvbSA9
PSBNYXRjaEZyb206OlZNVGhyZWFkKQorICAgICAgICBtX3N0YWNrTGltaXQgPSB2bS5zb2Z0U3Rh
Y2tMaW1pdCgpOworICAgIGVsc2UgeworICAgICAgICBTdGFja0JvdW5kcyBzdGFjayA9IFRocmVh
ZDo6Y3VycmVudCgpLnN0YWNrKCk7CisgICAgICAgIG1fc3RhY2tMaW1pdCA9IHN0YWNrLnJlY3Vy
c2lvbkxpbWl0KE9wdGlvbnM6OnJlc2VydmVkWm9uZVNpemUoKSk7CisgICAgfQorCisjaWYgRU5B
QkxFKFlBUlJfSklUX0FMTF9QQVJFTlNfRVhQUkVTU0lPTlMpCisgICAgaWYgKHlhcnJDb2RlQmxv
Y2stPnVzZXNQYXR0ZXJuQ29udGV4dEJ1ZmZlcigpKSB7CisgICAgICAgIG1fcGF0dGVybkNvbnRl
eHRCdWZmZXIgPSBtX3ZtLmFjcXVpcmVSZWdFeHBQYXR0ZXJuQ29udGV4QnVmZmVyKCk7CisgICAg
ICAgIG1fcGF0dGVybkNvbnRleHRCdWZmZXJTaXplID0gVk06OnBhdHRlcm5Db250ZXh0QnVmZmVy
U2l6ZTsKKyAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh5YXJyQ29kZUJsb2NrKTsKKyNl
bmRpZgorfQorCitNYXRjaGluZ0NvbnRleHRIb2xkZXI6On5NYXRjaGluZ0NvbnRleHRIb2xkZXIo
KQoreworI2lmIEVOQUJMRShZQVJSX0pJVF9BTExfUEFSRU5TX0VYUFJFU1NJT05TKQorICAgIGlm
IChtX3BhdHRlcm5Db250ZXh0QnVmZmVyKQorICAgICAgICBtX3ZtLnJlbGVhc2VSZWdFeHBQYXR0
ZXJuQ29udGV4QnVmZmVyKCk7CisjZW5kaWYKK30KKwogdGVtcGxhdGU8WWFyckpJVENvbXBpbGVN
b2RlIGNvbXBpbGVNb2RlPgogY2xhc3MgWWFyckdlbmVyYXRvciA6IHB1YmxpYyBZYXJySklUSW5m
bywgcHJpdmF0ZSBNYWNyb0Fzc2VtYmxlciB7CiAKQEAgLTYwLDcgKzkwLDggQEAgY2xhc3MgWWFy
ckdlbmVyYXRvciA6IHB1YmxpYyBZYXJySklUSW5mbwogICAgIHN0YXRpYyBjb25zdCBSZWdpc3Rl
cklEIGluZGV4ID0gQVJNNjRSZWdpc3RlcnM6OngxOwogICAgIHN0YXRpYyBjb25zdCBSZWdpc3Rl
cklEIGxlbmd0aCA9IEFSTTY0UmVnaXN0ZXJzOjp4MjsKICAgICBzdGF0aWMgY29uc3QgUmVnaXN0
ZXJJRCBvdXRwdXQgPSBBUk02NFJlZ2lzdGVyczo6eDM7Ci0gICAgc3RhdGljIGNvbnN0IFJlZ2lz
dGVySUQgZnJlZWxpc3RSZWdpc3RlciA9IEFSTTY0UmVnaXN0ZXJzOjp4NDsKKyAgICBzdGF0aWMg
Y29uc3QgUmVnaXN0ZXJJRCBtYXRjaGluZ0NvbnRleHQgPSBBUk02NFJlZ2lzdGVyczo6eDQ7Cisg
ICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgZnJlZWxpc3RSZWdpc3RlciA9IEFSTTY0UmVnaXN0
ZXJzOjp4NDsgLy8gTG9hZGVkIGZyb20gdGhlIE1hdGNoaW5nQ29udGV4dEhvbGRlciBpbiB0aGUg
cHJvbG9ndWUuCiAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgZnJlZWxpc3RTaXplUmVnaXN0
ZXIgPSBBUk02NFJlZ2lzdGVyczo6eDU7IC8vIE9ubHkgdXNlZCBkdXJpbmcgaW5pdGlhbGl6YXRp
b24uCiAKICAgICAvLyBTY3JhdGNoIHJlZ2lzdGVycwpAQCAtMTAxLDcgKzEzMiw4IEBAIGNsYXNz
IFlhcnJHZW5lcmF0b3IgOiBwdWJsaWMgWWFyckpJVEluZm8KICAgICBzdGF0aWMgY29uc3QgUmVn
aXN0ZXJJRCBpbmRleCA9IFg4NlJlZ2lzdGVyczo6ZXNpOwogICAgIHN0YXRpYyBjb25zdCBSZWdp
c3RlcklEIGxlbmd0aCA9IFg4NlJlZ2lzdGVyczo6ZWR4OwogICAgIHN0YXRpYyBjb25zdCBSZWdp
c3RlcklEIG91dHB1dCA9IFg4NlJlZ2lzdGVyczo6ZWN4OwotICAgIHN0YXRpYyBjb25zdCBSZWdp
c3RlcklEIGZyZWVsaXN0UmVnaXN0ZXIgPSBYODZSZWdpc3RlcnM6OnI4OworICAgIHN0YXRpYyBj
b25zdCBSZWdpc3RlcklEIG1hdGNoaW5nQ29udGV4dCA9IFg4NlJlZ2lzdGVyczo6cjg7CisgICAg
c3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgZnJlZWxpc3RSZWdpc3RlciA9IFg4NlJlZ2lzdGVyczo6
cjg7IC8vIExvYWRlZCBmcm9tIHRoZSBNYXRjaGluZ0NvbnRleHRIb2xkZXIgaW4gdGhlIHByb2xv
Z3VlLgogICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIGZyZWVsaXN0U2l6ZVJlZ2lzdGVyID0g
WDg2UmVnaXN0ZXJzOjpyOTsgLy8gT25seSB1c2VkIGR1cmluZyBpbml0aWFsaXphdGlvbi4KICNl
bHNlCiAgICAgLy8gSWYgdGhlIHJldHVybiB2YWx1ZSBkb2Vzbid0IGZpdCBpbiA2NGJpdHMsIGl0
cyBkZXN0aW5hdGlvbiBpcyBwb2ludGVkIGJ5IHJjeCBhbmQgdGhlIHBhcmFtZXRlcnMgYXJlIHNo
aWZ0ZWQuCkBAIC0yMjAsNiArMjUyLDkgQEAgY2xhc3MgWWFyckdlbmVyYXRvciA6IHB1YmxpYyBZ
YXJySklUSW5mbwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKKyAgICAgICAgbG9h
ZDMyKEFkZHJlc3MobWF0Y2hpbmdDb250ZXh0LCBNYXRjaGluZ0NvbnRleHRIb2xkZXI6Om9mZnNl
dE9mUGF0dGVybkNvbnRleHRCdWZmZXJTaXplKCkpLCBmcmVlbGlzdFNpemVSZWdpc3Rlcik7Cisg
ICAgICAgIC8vIE5vdGUgdGhhdCBtYXRjaGluZ0NvbnRleHQgYW5kIGZyZWVsaXN0UmVnaXN0ZXIg
YXJlIGxpa2VseSB0aGUgc2FtZSByZWdpc3Rlci4KKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1h
dGNoaW5nQ29udGV4dCwgTWF0Y2hpbmdDb250ZXh0SG9sZGVyOjpvZmZzZXRPZlBhdHRlcm5Db250
ZXh0QnVmZmVyKCkpLCBmcmVlbGlzdFJlZ2lzdGVyKTsKICAgICAgICAgSnVtcCBlbXB0eUZyZWVM
aXN0ID0gYnJhbmNoVGVzdFB0cihaZXJvLCBmcmVlbGlzdFJlZ2lzdGVyKTsKICAgICAgICAgbW92
ZShmcmVlbGlzdFJlZ2lzdGVyLCBwYXJlbkNvbnRleHRQb2ludGVyKTsKICAgICAgICAgYWRkUHRy
KFRydXN0ZWRJbW0zMihwYXJlbkNvbnRleHRTaXplKSwgZnJlZWxpc3RSZWdpc3RlciwgbmV4dFBh
cmVuQ29udGV4dFBvaW50ZXIpOwpAQCAtNjM1LDEyICs2NzAsNiBAQCBjbGFzcyBZYXJyR2VuZXJh
dG9yIDogcHVibGljIFlhcnJKSVRJbmZvCiAgICAgICAgIGNhbGxGcmFtZVNpemUgPSAoY2FsbEZy
YW1lU2l6ZSArIDB4M2YpICYgfjB4M2Y7CiAgICAgICAgIHJldHVybiBjYWxsRnJhbWVTaXplOwog
ICAgIH0KLSAgICB2b2lkIGluaXRDYWxsRnJhbWUoKQotICAgIHsKLSAgICAgICAgdW5zaWduZWQg
Y2FsbEZyYW1lU2l6ZUluQnl0ZXMgPSBhbGlnbkNhbGxGcmFtZVNpemVJbkJ5dGVzKG1fcGF0dGVy
bi5tX2JvZHktPm1fY2FsbEZyYW1lU2l6ZSk7Ci0gICAgICAgIGlmIChjYWxsRnJhbWVTaXplSW5C
eXRlcykKLSAgICAgICAgICAgIHN1YlB0cihJbW0zMihjYWxsRnJhbWVTaXplSW5CeXRlcyksIHN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICB9CiAgICAgdm9pZCByZW1vdmVDYWxsRnJhbWUoKQog
ICAgIHsKICAgICAgICAgdW5zaWduZWQgY2FsbEZyYW1lU2l6ZUluQnl0ZXMgPSBhbGlnbkNhbGxG
cmFtZVNpemVJbkJ5dGVzKG1fcGF0dGVybi5tX2JvZHktPm1fY2FsbEZyYW1lU2l6ZSk7CkBAIC0z
ODUxLDYgKzM4ODAsMzEgQEAgcHVibGljOgogICAgICAgICBnZW5lcmF0ZUZhaWxSZXR1cm4oKTsK
ICAgICAgICAgaGFzSW5wdXQubGluayh0aGlzKTsKIAorICAgICAgICB1bnNpZ25lZCBjYWxsRnJh
bWVTaXplSW5CeXRlcyA9IGFsaWduQ2FsbEZyYW1lU2l6ZUluQnl0ZXMobV9wYXR0ZXJuLm1fYm9k
eS0+bV9jYWxsRnJhbWVTaXplKTsKKyAgICAgICAgaWYgKGNhbGxGcmFtZVNpemVJbkJ5dGVzKSB7
CisgICAgICAgICAgICAvLyBDaGVjayBzdGFjayBzaXplCisgICAgICAgICAgICBhZGRQdHIoVHJ1
c3RlZEltbTMyKC1jYWxsRnJhbWVTaXplSW5CeXRlcyksIHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBy
ZWdUMCk7CisjaWYgQ1BVKFg4Nl82NCkgJiYgT1MoV0lORE9XUykKKyAgICAgICAgICAgIFJlZ2lz
dGVySUQgbWF0Y2hpbmdDb250ZXh0ID0gcmVnVDE7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJl
c3MoWDg2UmVnaXN0ZXJzOjplYnAsIDcgKiBzaXplb2Yodm9pZCopKSwgbWF0Y2hpbmdDb250ZXh0
KTsKKyNlbGlmIENQVShBUk1fVEhVTUIyKQorICAgICAgICAgICAgUmVnaXN0ZXJJRCBtYXRjaGlu
Z0NvbnRleHQgPSByZWdUMTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzdGFja1BvaW50
ZXJSZWdpc3RlciwgNCAqIHNpemVvZih2b2lkKikpLCBtYXRjaGluZ0NvbnRleHQpOworI2VsaWYg
Q1BVKE1JUFMpCisgICAgICAgICAgICBSZWdpc3RlcklEIG1hdGNoaW5nQ29udGV4dCA9IHJlZ1Qx
OworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyKSwgbWF0
Y2hpbmdDb250ZXh0KTsKKyNlbmRpZgorICAgICAgICAgICAgSnVtcCBzdGFja09rID0gYnJhbmNo
UHRyKEJlbG93T3JFcXVhbCwgQWRkcmVzcyhtYXRjaGluZ0NvbnRleHQsIE1hdGNoaW5nQ29udGV4
dEhvbGRlcjo6b2Zmc2V0T2ZTdGFja0xpbWl0KCkpLCByZWdUMCk7CisKKyAgICAgICAgICAgIC8v
IEV4Y2VlZGVkIHN0YWNrIGxpbWl0LCBwdW50IHRvIHRoZSBpbnRlcnByZXRlci4KKyAgICAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cigodm9pZCopc3RhdGljX2Nhc3Q8c2l6ZV90PigtMikpLCBy
ZXR1cm5SZWdpc3Rlcik7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmV0dXJu
UmVnaXN0ZXIyKTsKKyAgICAgICAgICAgIGdlbmVyYXRlUmV0dXJuKCk7CisKKyAgICAgICAgICAg
IHN0YWNrT2subGluayh0aGlzKTsKKyAgICAgICAgICAgIG1vdmUocmVnVDAsIHN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKKyAgICAgICAgfQorCiAjaWZkZWYgSklUX1VOSUNPREVfRVhQUkVTU0lPTlMK
ICAgICAgICAgaWYgKG1fZGVjb2RlU3Vycm9nYXRlUGFpcnMpCiAgICAgICAgICAgICBnZXRFZmZl
Y3RpdmVBZGRyZXNzKEJhc2VJbmRleChpbnB1dCwgbGVuZ3RoLCBUaW1lc1R3byksIGVuZE9mU3Ry
aW5nQWRkcmVzcyk7CkBAIC0zODY5LDggKzM5MjMsNiBAQCBwdWJsaWM6CiAgICAgICAgIGlmICgh
bV9wYXR0ZXJuLm1fYm9keS0+bV9oYXNGaXhlZFNpemUpCiAgICAgICAgICAgICBzZXRNYXRjaFN0
YXJ0KGluZGV4KTsKIAotICAgICAgICBpbml0Q2FsbEZyYW1lKCk7Ci0KICNpZiBFTkFCTEUoWUFS
Ul9KSVRfQUxMX1BBUkVOU19FWFBSRVNTSU9OUykKICAgICAgICAgaWYgKG1fY29udGFpbnNOZXN0
ZWRTdWJwYXR0ZXJucykgewogICAgICAgICAgICAgaW5pdFBhcmVuQ29udGV4dEZyZWVMaXN0KCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5oCShyZXZpc2lvbiAyNTg4NjUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmgJKHdvcmtpbmcgY29weSkK
QEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgog
I2luY2x1ZGUgIk1hdGNoUmVzdWx0LmgiCisjaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlICJZYXJy
LmgiCiAjaW5jbHVkZSAiWWFyclBhdHRlcm4uaCIKIApAQCAtNDEsNiArNDIsOCBAQCBjbGFzcyBF
eGVjdXRhYmxlUG9vbDsKIAogbmFtZXNwYWNlIFlhcnIgewogCitjbGFzcyBZYXJyQ29kZUJsb2Nr
OworCiBlbnVtIGNsYXNzIEpJVEZhaWx1cmVSZWFzb24gOiB1aW50OF90IHsKICAgICBEZWNvZGVT
dXJyb2dhdGVQYWlyLAogICAgIEJhY2tSZWZlcmVuY2UsCkBAIC01MiwxNSArNTUsMzUgQEAgZW51
bSBjbGFzcyBKSVRGYWlsdXJlUmVhc29uIDogdWludDhfdCB7CiAgICAgRXhlY3V0YWJsZU1lbW9y
eUFsbG9jYXRpb25GYWlsdXJlLAogfTsKIAorY2xhc3MgTWF0Y2hpbmdDb250ZXh0SG9sZGVyIHsK
KyAgICBXVEZfRk9SQklEX0hFQVBfQUxMT0NBVElPTjsKK3B1YmxpYzoKKyAgICBNYXRjaGluZ0Nv
bnRleHRIb2xkZXIoVk0mLCBZYXJyQ29kZUJsb2NrKiwgTWF0Y2hGcm9tIG1hdGNoRnJvbSA9IE1h
dGNoRnJvbTo6Vk1UaHJlYWQpOworICAgIH5NYXRjaGluZ0NvbnRleHRIb2xkZXIoKTsKKworICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTdGFja0xpbWl0KCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKE1hdGNoaW5nQ29udGV4dEhvbGRlciwgbV9zdGFja0xpbWl0KTsgfQorI2lmIEVOQUJM
RShZQVJSX0pJVF9BTExfUEFSRU5TX0VYUFJFU1NJT05TKQorICAgIHN0YXRpYyBwdHJkaWZmX3Qg
b2Zmc2V0T2ZQYXR0ZXJuQ29udGV4dEJ1ZmZlcigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihN
YXRjaGluZ0NvbnRleHRIb2xkZXIsIG1fcGF0dGVybkNvbnRleHRCdWZmZXIpOyB9CisgICAgc3Rh
dGljIHB0cmRpZmZfdCBvZmZzZXRPZlBhdHRlcm5Db250ZXh0QnVmZmVyU2l6ZSgpIHsgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihNYXRjaGluZ0NvbnRleHRIb2xkZXIsIG1fcGF0dGVybkNvbnRleHRC
dWZmZXJTaXplKTsgfQorI2VuZGlmCisKK3ByaXZhdGU6CisgICAgVk0mIG1fdm07CisgICAgdm9p
ZCogbV9zdGFja0xpbWl0OworI2lmIEVOQUJMRShZQVJSX0pJVF9BTExfUEFSRU5TX0VYUFJFU1NJ
T05TKQorICAgIHZvaWQqIG1fcGF0dGVybkNvbnRleHRCdWZmZXIgeyBudWxscHRyIH07CisgICAg
dW5zaWduZWQgbV9wYXR0ZXJuQ29udGV4dEJ1ZmZlclNpemUgeyAwIH07CisjZW5kaWYKK307CisK
IGNsYXNzIFlhcnJDb2RlQmxvY2sgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKFlhcnJDb2RlQmxvY2spOwogCi0gICAgLy8gVGVjaG5pY2Fs
bHkgZnJlZVBhcmVuQ29udGV4dCBhbmQgcGFyZW5Db250ZXh0U2l6ZSBhcmUgb25seSB1c2VkIGlm
IEVOQUJMRShZQVJSX0pJVF9BTExfUEFSRU5TX0VYUFJFU1NJT05TKSBpcyBzZXQuIEZvcnR1bmF0
ZWx5LCBhbGwgdGhlIGNhbGxpbmcgY29udmVudGlvbnMgd2Ugc3VwcG9ydCBoYXZlIGNhbGxlciBz
YXZlIGFyZ3VtZW50IHJlZ2lzdGVycy4KLSAgICB1c2luZyBZYXJySklUQ29kZTggPSBFbmNvZGVk
TWF0Y2hSZXN1bHQgKCopKGNvbnN0IExDaGFyKiBpbnB1dCwgdW5zaWduZWQgc3RhcnQsIHVuc2ln
bmVkIGxlbmd0aCwgaW50KiBvdXRwdXQsIHZvaWQqIGZyZWVQYXJlbkNvbnRleHQsIHVuc2lnbmVk
IHBhcmVuQ29udGV4dFNpemUpIFlBUlJfQ0FMTDsKLSAgICB1c2luZyBZYXJySklUQ29kZTE2ID0g
RW5jb2RlZE1hdGNoUmVzdWx0ICgqKShjb25zdCBVQ2hhciogaW5wdXQsIHVuc2lnbmVkIHN0YXJ0
LCB1bnNpZ25lZCBsZW5ndGgsIGludCogb3V0cHV0LCB2b2lkKiBmcmVlUGFyZW5Db250ZXh0LCB1
bnNpZ25lZCBwYXJlbkNvbnRleHRTaXplKSBZQVJSX0NBTEw7Ci0gICAgdXNpbmcgWWFyckpJVENv
ZGVNYXRjaE9ubHk4ID0gRW5jb2RlZE1hdGNoUmVzdWx0ICgqKShjb25zdCBMQ2hhciogaW5wdXQs
IHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIHZvaWQqLCB2b2lkKiBmcmVlUGFyZW5D
b250ZXh0LCB1bnNpZ25lZCBwYXJlbkNvbnRleHRTaXplKSBZQVJSX0NBTEw7Ci0gICAgdXNpbmcg
WWFyckpJVENvZGVNYXRjaE9ubHkxNiA9IEVuY29kZWRNYXRjaFJlc3VsdCAoKikoY29uc3QgVUNo
YXIqIGlucHV0LCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoLCB2b2lkKiwgdm9pZCog
ZnJlZVBhcmVuQ29udGV4dCwgdW5zaWduZWQgcGFyZW5Db250ZXh0U2l6ZSkgWUFSUl9DQUxMOwor
ICAgIHVzaW5nIFlhcnJKSVRDb2RlOCA9IEVuY29kZWRNYXRjaFJlc3VsdCAoKikoY29uc3QgTENo
YXIqIGlucHV0LCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoLCBpbnQqIG91dHB1dCwg
TWF0Y2hpbmdDb250ZXh0SG9sZGVyKiBtYXRjaGluZ0NvbnRleHQpIFlBUlJfQ0FMTDsKKyAgICB1
c2luZyBZYXJySklUQ29kZTE2ID0gRW5jb2RlZE1hdGNoUmVzdWx0ICgqKShjb25zdCBVQ2hhciog
aW5wdXQsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIGludCogb3V0cHV0LCBNYXRj
aGluZ0NvbnRleHRIb2xkZXIqIG1hdGNoaW5nQ29udGV4dCkgWUFSUl9DQUxMOworICAgIHVzaW5n
IFlhcnJKSVRDb2RlTWF0Y2hPbmx5OCA9IEVuY29kZWRNYXRjaFJlc3VsdCAoKikoY29uc3QgTENo
YXIqIGlucHV0LCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoLCB2b2lkKiwgTWF0Y2hp
bmdDb250ZXh0SG9sZGVyKiBtYXRjaGluZ0NvbnRleHQpIFlBUlJfQ0FMTDsKKyAgICB1c2luZyBZ
YXJySklUQ29kZU1hdGNoT25seTE2ID0gRW5jb2RlZE1hdGNoUmVzdWx0ICgqKShjb25zdCBVQ2hh
ciogaW5wdXQsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIHZvaWQqLCBNYXRjaGlu
Z0NvbnRleHRIb2xkZXIqIG1hdGNoaW5nQ29udGV4dCkgWUFSUl9DQUxMOwogCiBwdWJsaWM6CiAg
ICAgWWFyckNvZGVCbG9jaygpID0gZGVmYXVsdDsKQEAgLTgzLDI4ICsxMDYsMjggQEAgcHVibGlj
OgogICAgIHZvaWQgc2V0VXNlc1BhdHRlcm5Db250ZXh0QnVmZmVyKCkgeyBtX3VzZXNQYXR0ZXJu
Q29udGV4dEJ1ZmZlciA9IHRydWU7IH0KICNlbmRpZgogCi0gICAgTWF0Y2hSZXN1bHQgZXhlY3V0
ZShjb25zdCBMQ2hhciogaW5wdXQsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIGlu
dCogb3V0cHV0LCB2b2lkKiBmcmVlUGFyZW5Db250ZXh0LCB1bnNpZ25lZCBwYXJlbkNvbnRleHRT
aXplKQorICAgIE1hdGNoUmVzdWx0IGV4ZWN1dGUoY29uc3QgTENoYXIqIGlucHV0LCB1bnNpZ25l
ZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoLCBpbnQqIG91dHB1dCwgTWF0Y2hpbmdDb250ZXh0SG9s
ZGVyKiBtYXRjaGluZ0NvbnRleHQpCiAgICAgewogICAgICAgICBBU1NFUlQoaGFzOEJpdENvZGUo
KSk7Ci0gICAgICAgIHJldHVybiBNYXRjaFJlc3VsdCh1bnRhZ0NGdW5jdGlvblB0cjxZYXJySklU
Q29kZTgsIFlhcnI4Qml0UHRyVGFnPihtX3JlZjguY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkp
KGlucHV0LCBzdGFydCwgbGVuZ3RoLCBvdXRwdXQsIGZyZWVQYXJlbkNvbnRleHQsIHBhcmVuQ29u
dGV4dFNpemUpKTsKKyAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0KHVudGFnQ0Z1bmN0aW9uUHRy
PFlhcnJKSVRDb2RlOCwgWWFycjhCaXRQdHJUYWc+KG1fcmVmOC5jb2RlKCkuZXhlY3V0YWJsZUFk
ZHJlc3MoKSkoaW5wdXQsIHN0YXJ0LCBsZW5ndGgsIG91dHB1dCwgbWF0Y2hpbmdDb250ZXh0KSk7
CiAgICAgfQogCi0gICAgTWF0Y2hSZXN1bHQgZXhlY3V0ZShjb25zdCBVQ2hhciogaW5wdXQsIHVu
c2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIGludCogb3V0cHV0LCB2b2lkKiBmcmVlUGFy
ZW5Db250ZXh0LCB1bnNpZ25lZCBwYXJlbkNvbnRleHRTaXplKQorICAgIE1hdGNoUmVzdWx0IGV4
ZWN1dGUoY29uc3QgVUNoYXIqIGlucHV0LCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3Ro
LCBpbnQqIG91dHB1dCwgTWF0Y2hpbmdDb250ZXh0SG9sZGVyKiBtYXRjaGluZ0NvbnRleHQpCiAg
ICAgewogICAgICAgICBBU1NFUlQoaGFzMTZCaXRDb2RlKCkpOwotICAgICAgICByZXR1cm4gTWF0
Y2hSZXN1bHQodW50YWdDRnVuY3Rpb25QdHI8WWFyckpJVENvZGUxNiwgWWFycjE2Qml0UHRyVGFn
PihtX3JlZjE2LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKShpbnB1dCwgc3RhcnQsIGxlbmd0
aCwgb3V0cHV0LCBmcmVlUGFyZW5Db250ZXh0LCBwYXJlbkNvbnRleHRTaXplKSk7CisgICAgICAg
IHJldHVybiBNYXRjaFJlc3VsdCh1bnRhZ0NGdW5jdGlvblB0cjxZYXJySklUQ29kZTE2LCBZYXJy
MTZCaXRQdHJUYWc+KG1fcmVmMTYuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKGlucHV0LCBz
dGFydCwgbGVuZ3RoLCBvdXRwdXQsIG1hdGNoaW5nQ29udGV4dCkpOwogICAgIH0KIAotICAgIE1h
dGNoUmVzdWx0IGV4ZWN1dGUoY29uc3QgTENoYXIqIGlucHV0LCB1bnNpZ25lZCBzdGFydCwgdW5z
aWduZWQgbGVuZ3RoLCB2b2lkKiBmcmVlUGFyZW5Db250ZXh0LCB1bnNpZ25lZCBwYXJlbkNvbnRl
eHRTaXplKQorICAgIE1hdGNoUmVzdWx0IGV4ZWN1dGUoY29uc3QgTENoYXIqIGlucHV0LCB1bnNp
Z25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoLCBNYXRjaGluZ0NvbnRleHRIb2xkZXIqIG1hdGNo
aW5nQ29udGV4dCkKICAgICB7CiAgICAgICAgIEFTU0VSVChoYXM4Qml0Q29kZU1hdGNoT25seSgp
KTsKLSAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0KHVudGFnQ0Z1bmN0aW9uUHRyPFlhcnJKSVRD
b2RlTWF0Y2hPbmx5OCwgWWFyck1hdGNoT25seThCaXRQdHJUYWc+KG1fbWF0Y2hPbmx5OC5jb2Rl
KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkoaW5wdXQsIHN0YXJ0LCBsZW5ndGgsIDAsIGZyZWVQYXJl
bkNvbnRleHQsIHBhcmVuQ29udGV4dFNpemUpKTsKKyAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0
KHVudGFnQ0Z1bmN0aW9uUHRyPFlhcnJKSVRDb2RlTWF0Y2hPbmx5OCwgWWFyck1hdGNoT25seThC
aXRQdHJUYWc+KG1fbWF0Y2hPbmx5OC5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkoaW5wdXQs
IHN0YXJ0LCBsZW5ndGgsIDAsIG1hdGNoaW5nQ29udGV4dCkpOwogICAgIH0KIAotICAgIE1hdGNo
UmVzdWx0IGV4ZWN1dGUoY29uc3QgVUNoYXIqIGlucHV0LCB1bnNpZ25lZCBzdGFydCwgdW5zaWdu
ZWQgbGVuZ3RoLCB2b2lkKiBmcmVlUGFyZW5Db250ZXh0LCB1bnNpZ25lZCBwYXJlbkNvbnRleHRT
aXplKQorICAgIE1hdGNoUmVzdWx0IGV4ZWN1dGUoY29uc3QgVUNoYXIqIGlucHV0LCB1bnNpZ25l
ZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoLCBNYXRjaGluZ0NvbnRleHRIb2xkZXIqIG1hdGNoaW5n
Q29udGV4dCkKICAgICB7CiAgICAgICAgIEFTU0VSVChoYXMxNkJpdENvZGVNYXRjaE9ubHkoKSk7
Ci0gICAgICAgIHJldHVybiBNYXRjaFJlc3VsdCh1bnRhZ0NGdW5jdGlvblB0cjxZYXJySklUQ29k
ZU1hdGNoT25seTE2LCBZYXJyTWF0Y2hPbmx5MTZCaXRQdHJUYWc+KG1fbWF0Y2hPbmx5MTYuY29k
ZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKGlucHV0LCBzdGFydCwgbGVuZ3RoLCAwLCBmcmVlUGFy
ZW5Db250ZXh0LCBwYXJlbkNvbnRleHRTaXplKSk7CisgICAgICAgIHJldHVybiBNYXRjaFJlc3Vs
dCh1bnRhZ0NGdW5jdGlvblB0cjxZYXJySklUQ29kZU1hdGNoT25seTE2LCBZYXJyTWF0Y2hPbmx5
MTZCaXRQdHJUYWc+KG1fbWF0Y2hPbmx5MTYuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKGlu
cHV0LCBzdGFydCwgbGVuZ3RoLCAwLCBtYXRjaGluZ0NvbnRleHQpKTsKICAgICB9CiAKICNpZiBF
TkFCTEUoUkVHRVhQX1RSQUNJTkcpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9Z
YXJyUGF0dGVybi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIv
WWFyclBhdHRlcm4uY3BwCShyZXZpc2lvbiAyNTg4NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUveWFyci9ZYXJyUGF0dGVybi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAK
ICNpbmNsdWRlICJZYXJyUGFyc2VyLmgiCiAjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KICNpbmNs
dWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvU3RhY2tQb2ludGVyLmg+CisjaW5j
bHVkZSA8d3RmL1N0YWNrQ2hlY2suaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC00MzYsMTAgKzQzNiw5IEBAIHByaXZhdGU6CiAKIGNs
YXNzIFlhcnJQYXR0ZXJuQ29uc3RydWN0b3IgewogcHVibGljOgotICAgIFlhcnJQYXR0ZXJuQ29u
c3RydWN0b3IoWWFyclBhdHRlcm4mIHBhdHRlcm4sIHZvaWQqIHN0YWNrTGltaXQpCisgICAgWWFy
clBhdHRlcm5Db25zdHJ1Y3RvcihZYXJyUGF0dGVybiYgcGF0dGVybikKICAgICAgICAgOiBtX3Bh
dHRlcm4ocGF0dGVybikKICAgICAgICAgLCBtX2NoYXJhY3RlckNsYXNzQ29uc3RydWN0b3IocGF0
dGVybi5pZ25vcmVDYXNlKCksIHBhdHRlcm4udW5pY29kZSgpID8gQ2Fub25pY2FsTW9kZTo6VW5p
Y29kZSA6IENhbm9uaWNhbE1vZGU6OlVDUzIpCi0gICAgICAgICwgbV9zdGFja0xpbWl0KHN0YWNr
TGltaXQpCiAgICAgewogICAgICAgICBhdXRvIGJvZHkgPSBtYWtlVW5pcXVlPFBhdHRlcm5EaXNq
dW5jdGlvbj4oKTsKICAgICAgICAgbV9wYXR0ZXJuLm1fYm9keSA9IGJvZHkuZ2V0KCk7CkBAIC0x
MTE4LDI4ICsxMTE3LDIxIEBAIHB1YmxpYzoKICAgICBFcnJvckNvZGUgZXJyb3IoKSB7IHJldHVy
biBtX2Vycm9yOyB9CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBpc1NhZmVUb1JlY3Vyc2UoKSBjb25z
dAotICAgIHsKLSAgICAgICAgaWYgKCFtX3N0YWNrTGltaXQpCi0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgaW50OF90KiBjdXJyID0gcmVpbnRlcnByZXRfY2FzdDxpbnQ4X3QqPihj
dXJyZW50U3RhY2tQb2ludGVyKCkpOwotICAgICAgICBpbnQ4X3QqIGxpbWl0ID0gcmVpbnRlcnBy
ZXRfY2FzdDxpbnQ4X3QqPihtX3N0YWNrTGltaXQpOwotICAgICAgICByZXR1cm4gY3VyciA+PSBs
aW1pdDsKLSAgICB9CisgICAgaW5saW5lIGJvb2wgaXNTYWZlVG9SZWN1cnNlKCkgeyByZXR1cm4g
bV9zdGFja0NoZWNrLmlzU2FmZVRvUmVjdXJzZSgpOyB9CiAKICAgICBZYXJyUGF0dGVybiYgbV9w
YXR0ZXJuOwogICAgIFBhdHRlcm5BbHRlcm5hdGl2ZSogbV9hbHRlcm5hdGl2ZTsKICAgICBDaGFy
YWN0ZXJDbGFzc0NvbnN0cnVjdG9yIG1fY2hhcmFjdGVyQ2xhc3NDb25zdHJ1Y3RvcjsKICAgICBW
ZWN0b3I8U3RyaW5nPiBtX3VubWF0Y2hlZE5hbWVkRm9yd2FyZFJlZmVyZW5jZXM7Ci0gICAgdm9p
ZCogbV9zdGFja0xpbWl0OworICAgIFN0YWNrQ2hlY2sgbV9zdGFja0NoZWNrOwogICAgIEVycm9y
Q29kZSBtX2Vycm9yIHsgRXJyb3JDb2RlOjpOb0Vycm9yIH07CiAgICAgYm9vbCBtX2ludmVydENo
YXJhY3RlckNsYXNzOwogICAgIGJvb2wgbV9pbnZlcnRQYXJlbnRoZXRpY2FsQXNzZXJ0aW9uIHsg
ZmFsc2UgfTsKIH07CiAKLUVycm9yQ29kZSBZYXJyUGF0dGVybjo6Y29tcGlsZShjb25zdCBTdHJp
bmcmIHBhdHRlcm5TdHJpbmcsIHZvaWQqIHN0YWNrTGltaXQpCitFcnJvckNvZGUgWWFyclBhdHRl
cm46OmNvbXBpbGUoY29uc3QgU3RyaW5nJiBwYXR0ZXJuU3RyaW5nKQogewotICAgIFlhcnJQYXR0
ZXJuQ29uc3RydWN0b3IgY29uc3RydWN0b3IoKnRoaXMsIHN0YWNrTGltaXQpOworICAgIFlhcnJQ
YXR0ZXJuQ29uc3RydWN0b3IgY29uc3RydWN0b3IoKnRoaXMpOwogCiAgICAgewogICAgICAgICBF
cnJvckNvZGUgZXJyb3IgPSBwYXJzZShjb25zdHJ1Y3RvciwgcGF0dGVyblN0cmluZywgdW5pY29k
ZSgpKTsKQEAgLTExODMsNyArMTE3NSw3IEBAIEVycm9yQ29kZSBZYXJyUGF0dGVybjo6Y29tcGls
ZShjb25zdCBTdHIKICAgICByZXR1cm4gRXJyb3JDb2RlOjpOb0Vycm9yOwogfQogCi1ZYXJyUGF0
dGVybjo6WWFyclBhdHRlcm4oY29uc3QgU3RyaW5nJiBwYXR0ZXJuLCBPcHRpb25TZXQ8RmxhZ3M+
IGZsYWdzLCBFcnJvckNvZGUmIGVycm9yLCB2b2lkKiBzdGFja0xpbWl0KQorWWFyclBhdHRlcm46
OllhcnJQYXR0ZXJuKGNvbnN0IFN0cmluZyYgcGF0dGVybiwgT3B0aW9uU2V0PEZsYWdzPiBmbGFn
cywgRXJyb3JDb2RlJiBlcnJvcikKICAgICA6IG1fY29udGFpbnNCYWNrcmVmZXJlbmNlcyhmYWxz
ZSkKICAgICAsIG1fY29udGFpbnNCT0woZmFsc2UpCiAgICAgLCBtX2NvbnRhaW5zVW5zaWduZWRM
ZW5ndGhQYXR0ZXJuKGZhbHNlKQpAQCAtMTE5Miw3ICsxMTg0LDcgQEAgWWFyclBhdHRlcm46Ollh
cnJQYXR0ZXJuKGNvbnN0IFN0cmluZyYgcAogICAgICwgbV9mbGFncyhmbGFncykKIHsKICAgICBB
U1NFUlQobV9mbGFncyAhPSBGbGFnczo6RGVsZXRlZFZhbHVlKTsKLSAgICBlcnJvciA9IGNvbXBp
bGUocGF0dGVybiwgc3RhY2tMaW1pdCk7CisgICAgZXJyb3IgPSBjb21waWxlKHBhdHRlcm4pOwog
fQogCiB2b2lkIGluZGVudEZvck5lc3RpbmdMZXZlbChQcmludFN0cmVhbSYgb3V0LCB1bnNpZ25l
ZCBuZXN0aW5nRGVwdGgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJyUGF0
dGVybi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJQYXR0
ZXJuLmgJKHJldmlzaW9uIDI1ODg2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lh
cnJQYXR0ZXJuLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4Niw3ICszODYsNyBAQCBzdHJ1Y3QgVGVy
bUNoYWluIHsKIAogCiBzdHJ1Y3QgWWFyclBhdHRlcm4gewotICAgIEpTX0VYUE9SVF9QUklWQVRF
IFlhcnJQYXR0ZXJuKGNvbnN0IFN0cmluZyYgcGF0dGVybiwgT3B0aW9uU2V0PEZsYWdzPiwgRXJy
b3JDb2RlJiwgdm9pZCogc3RhY2tMaW1pdCA9IG51bGxwdHIpOworICAgIEpTX0VYUE9SVF9QUklW
QVRFIFlhcnJQYXR0ZXJuKGNvbnN0IFN0cmluZyYgcGF0dGVybiwgT3B0aW9uU2V0PEZsYWdzPiwg
RXJyb3JDb2RlJik7CiAKICAgICB2b2lkIHJlc2V0Rm9yUmVwYXJzaW5nKCkKICAgICB7CkBAIC01
NjUsNyArNTY1LDcgQEAgc3RydWN0IFlhcnJQYXR0ZXJuIHsKICAgICBIYXNoTWFwPFN0cmluZywg
dW5zaWduZWQ+IG1fbmFtZWRHcm91cFRvUGFyZW5JbmRleDsKIAogcHJpdmF0ZToKLSAgICBFcnJv
ckNvZGUgY29tcGlsZShjb25zdCBTdHJpbmcmIHBhdHRlcm5TdHJpbmcsIHZvaWQqIHN0YWNrTGlt
aXQpOworICAgIEVycm9yQ29kZSBjb21waWxlKGNvbnN0IFN0cmluZyYgcGF0dGVyblN0cmluZyk7
CiAKICAgICBDaGFyYWN0ZXJDbGFzcyogYW55Y2hhckNhY2hlZCB7IG51bGxwdHIgfTsKICAgICBD
aGFyYWN0ZXJDbGFzcyogbmV3bGluZUNhY2hlZCB7IG51bGxwdHIgfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>394366</attachid>
            <date>2020-03-24 07:41:27 -0700</date>
            <delta_ts>2020-03-25 09:47:39 -0700</delta_ts>
            <desc>Speculative fix for MIPS</desc>
            <filename>209435-wip4.patch</filename>
            <type>text/plain</type>
            <size>29009</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvc3RyZXNzL3JlZ2V4cC1jb21waWxlLW9vbS5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKU1Rlc3RzL3N0cmVzcy9yZWdleHAtY29tcGlsZS1vb20uanMJKHJldmlzaW9uIDI1ODg2NSkK
KysrIEpTVGVzdHMvc3RyZXNzL3JlZ2V4cC1jb21waWxlLW9vbS5qcwkod29ya2luZyBjb3B5KQpA
QCAtMSw0ICsxLDQgQEAKLS8vQCBza2lwIGlmICRob3N0T1MgIT0gImRhcndpbiIgb3IgJGFyY2hp
dGVjdHVyZSA9PSAiYXJtIiBvciAkYXJjaGl0ZWN0dXJlID09ICJ4ODYiIG9yIG5vdCAkaml0VGVz
dHMKKy8vQCBza2lwCiAvLyBUZXN0IHRoYXQgdGhyb3cgYW4gT09NIGV4Y2VwdGlvbiB3aGVuIGNv
bXBpbGluZyBhIHBhdGhvbG9naWNhbCwgYnV0IHZhbGlkIG5lc3RlZCBSZWdFeHAuCiAKIHZhciBm
YWlsdXJlcyA9IFtdOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNTg4
NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTkgQEAKKzIwMjAtMDMtMjMgIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBs
ZS5jb20+CisKKyAgICAgICAgUmVmYWN0b3IgWUFSUiBTdGFjayBPdmVyZmxvdyBDaGVja3MKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwOTQzNQorICAg
ICAgICByZGFyOi8vcHJvYmxlbS81ODk4ODI1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yZWQgc3RhY2sgY2hlY2tzIGluIFlBUlIgY29k
ZSBpbmNsdWRpbmcgYWRkaW5nIGEgc3RhY2sgY2hlY2sgdG8gdGhlIFlBUlIgSklUJ2VkIGNvZGUu
CisgICAgICAgIFRoZSBDKysgY29kZSBpbmNsdWRpbmcgdGhlIHBhcnNlciwgYnl0ZSBjb2RlIGNv
bXBpbGVyIGFuZCBpbnRlcnByZXRlciBub3cgYWxsIHVzZSBTdGFja0NoZWNrLgorICAgICAgICBU
aGUgSklUJ2VkIGNvZGUgbmVlZHMgYSBzdGFjayBsaW1pdCBwYXNzZWQgdmlhIGEgcGFyYW1ldGVy
IHNpbmNlIHRoZSBKSVQnZWQgY29kZSBjYW4gYmUgCisgICAgICAgIGNhbGxlZCBmcm9tIHRoZSBj
b21waWxlciB0aHJlYWQgd2hlbiBjb21waWxpbmcgREZHIC8gRlRMIGNvZGUuCisKKyAgICAgICAg
SW5zdGVhZCBvZiBhZGRpbmcgYSBuZXcgcGFyYW1ldGVyLCBjb25zb2xpZGF0ZWQgdGhlIHR3byBw
YXR0ZXJuIGNvbnRleHQgYnVmZmVyIHZhbHVlcywgYnVmZmVyCisgICAgICAgIHBvaW50ZXIgYW5k
IHNpemUsIHdpdGggdGhlIG5ldyBzdGFjayBsaW1pdCBpbnRvIGEgbmV3IE1hdGNoaW5nQ29udGV4
dEhvbGRlciwgYW4gUkFJSSBvYmplY3QuCisgICAgICAgIFRoZSBNYXRjaGluZ0NvbnRleHRIb2xk
ZXIgY29uc3RydWN0b3IgdXNlcyBlaXRoZXIgdGhlIFZNIHN0YWNrIGxpbWl0IG9yIHRoZSBjdXJy
ZW50IHRocmVhZCdzCisgICAgICAgIHN0YWNrIGxpbWl0IGRlcGVuZGluZyBvbiBob3cgaXQgaXMg
Y2FsbGVkLgorCisgICAgICAgICogcnVudGltZS9SZWdFeHAuY3BwOgorICAgICAgICAoSlNDOjpS
ZWdFeHA6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6UmVnRXhwOjpieXRlQ29kZUNv
bXBpbGVJZk5lY2Vzc2FyeSk6CisgICAgICAgIChKU0M6OlJlZ0V4cDo6Y29tcGlsZSk6CisgICAg
ICAgIChKU0M6OlJlZ0V4cDo6bWF0Y2hDb25jdXJyZW50bHkpOgorICAgICAgICAoSlNDOjpSZWdF
eHA6OmNvbXBpbGVNYXRjaE9ubHkpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwLmg6CisgICAg
ICAgICogcnVudGltZS9SZWdFeHBJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OlJlZ0V4cDo6bWF0
Y2hJbmxpbmUpOgorICAgICAgICAoSlNDOjpQYXR0ZXJuQ29udGV4dEJ1ZmZlckhvbGRlcjo6UGF0
dGVybkNvbnRleHRCdWZmZXJIb2xkZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpQYXR0ZXJu
Q29udGV4dEJ1ZmZlckhvbGRlcjo6flBhdHRlcm5Db250ZXh0QnVmZmVySG9sZGVyKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6UGF0dGVybkNvbnRleHRCdWZmZXJIb2xkZXI6OmJ1ZmZlcik6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OlBhdHRlcm5Db250ZXh0QnVmZmVySG9sZGVyOjpzaXplKTog
RGVsZXRlZC4KKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogeWFyci9ZYXJyLmg6Cisg
ICAgICAgICogeWFyci9ZYXJySW50ZXJwcmV0ZXIuY3BwOgorICAgICAgICAoSlNDOjpZYXJyOjpJ
bnRlcnByZXRlcjo6bWF0Y2hEaXNqdW5jdGlvbik6CisgICAgICAgIChKU0M6OllhcnI6OkludGVy
cHJldGVyOjppc1NhZmVUb1JlY3Vyc2UpOgorICAgICAgICAqIHlhcnIvWWFyckpJVC5jcHA6Cisg
ICAgICAgIChKU0M6OllhcnI6Ok1hdGNoaW5nQ29udGV4dEhvbGRlcjo6TWF0Y2hpbmdDb250ZXh0
SG9sZGVyKToKKyAgICAgICAgKEpTQzo6WWFycjo6TWF0Y2hpbmdDb250ZXh0SG9sZGVyOjp+TWF0
Y2hpbmdDb250ZXh0SG9sZGVyKToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckdlbmVyYXRvcjo6
aW5pdFBhcmVuQ29udGV4dEZyZWVMaXN0KToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckdlbmVy
YXRvcjo6YWxpZ25DYWxsRnJhbWVTaXplSW5CeXRlcyk6CisgICAgICAgIChKU0M6OllhcnI6Ollh
cnJHZW5lcmF0b3I6OmNvbXBpbGUpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9y
Ojppbml0Q2FsbEZyYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKiB5YXJyL1lhcnJKSVQuaDoKKyAg
ICAgICAgKEpTQzo6WWFycjo6TWF0Y2hpbmdDb250ZXh0SG9sZGVyOjpvZmZzZXRPZlN0YWNrTGlt
aXQpOgorICAgICAgICAoSlNDOjpZYXJyOjpNYXRjaGluZ0NvbnRleHRIb2xkZXI6Om9mZnNldE9m
UGF0dGVybkNvbnRleHRCdWZmZXIpOgorICAgICAgICAoSlNDOjpZYXJyOjpNYXRjaGluZ0NvbnRl
eHRIb2xkZXI6Om9mZnNldE9mUGF0dGVybkNvbnRleHRCdWZmZXJTaXplKToKKyAgICAgICAgKEpT
Qzo6WWFycjo6WWFyckNvZGVCbG9jazo6ZXhlY3V0ZSk6CisgICAgICAgICogeWFyci9ZYXJyUGF0
dGVybi5jcHA6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJQYXR0ZXJuQ29uc3RydWN0b3I6Ollh
cnJQYXR0ZXJuQ29uc3RydWN0b3IpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyUGF0dGVybkNv
bnN0cnVjdG9yOjppc1NhZmVUb1JlY3Vyc2UpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyUGF0
dGVybjo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJQYXR0ZXJuOjpZYXJyUGF0
dGVybik6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJQYXR0ZXJuQ29uc3RydWN0b3I6OmlzU2Fm
ZVRvUmVjdXJzZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogeWFyci9ZYXJyUGF0dGVybi5o
OgorCiAyMDIwLTAzLTIzICBSb3NzIEtpcnNsaW5nICA8cm9zcy5raXJzbGluZ0Bzb255LmNvbT4K
IAogICAgICAgICBVbnJldmlld2VkLCBhZGRyZXNzIFl1c3VrZSdzIGZlZWRiYWNrIG9uIHIyNTg4
MDEuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5jcHAJKHJldmlz
aW9uIDI1ODg2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE3MCw3ICsxNzAsNyBAQCBSZWdFeHA6OlJlZ0V4cChWTSYgdm0s
IGNvbnN0IFN0cmluZyYgcGF0CiB2b2lkIFJlZ0V4cDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQog
ewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICBZYXJyOjpZYXJyUGF0dGVybiBw
YXR0ZXJuKG1fcGF0dGVyblN0cmluZywgbV9mbGFncywgbV9jb25zdHJ1Y3Rpb25FcnJvckNvZGUs
IHZtLnN0YWNrTGltaXQoKSk7CisgICAgWWFycjo6WWFyclBhdHRlcm4gcGF0dGVybihtX3BhdHRl
cm5TdHJpbmcsIG1fZmxhZ3MsIG1fY29uc3RydWN0aW9uRXJyb3JDb2RlKTsKICAgICBpZiAoIWlz
VmFsaWQoKSkgewogICAgICAgICBtX3N0YXRlID0gUGFyc2VFcnJvcjsKICAgICAgICAgcmV0dXJu
OwpAQCAtMjI3LDEzICsyMjcsMTAgQEAgdm9pZCBSZWdFeHA6OmJ5dGVDb2RlQ29tcGlsZUlmTmVj
ZXNzYXJ5KAogICAgIGlmIChtX3JlZ0V4cEJ5dGVjb2RlKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBZYXJyOjpZYXJyUGF0dGVybiBwYXR0ZXJuKG1fcGF0dGVyblN0cmluZywgbV9mbGFncywgbV9j
b25zdHJ1Y3Rpb25FcnJvckNvZGUsIHZtLT5zdGFja0xpbWl0KCkpOworICAgIFlhcnI6OllhcnJQ
YXR0ZXJuIHBhdHRlcm4obV9wYXR0ZXJuU3RyaW5nLCBtX2ZsYWdzLCBtX2NvbnN0cnVjdGlvbkVy
cm9yQ29kZSk7CiAgICAgaWYgKGhhc0Vycm9yKG1fY29uc3RydWN0aW9uRXJyb3JDb2RlKSkgewot
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2lmIENPTVBJTEVSX1FVSVJL
KENPTlNJREVSU19VTlJFQUNIQUJMRV9DT0RFKQogICAgICAgICBtX3N0YXRlID0gUGFyc2VFcnJv
cjsKICAgICAgICAgcmV0dXJuOwotI2VuZGlmCiAgICAgfQogICAgIEFTU0VSVChtX251bVN1YnBh
dHRlcm5zID09IHBhdHRlcm4ubV9udW1TdWJwYXR0ZXJucyk7CiAKQEAgLTI0OCw3ICsyNDUsNyBA
QCB2b2lkIFJlZ0V4cDo6Y29tcGlsZShWTSogdm0sIFlhcnI6OllhcnJDCiB7CiAgICAgYXV0byBs
b2NrZXIgPSBob2xkTG9jayhjZWxsTG9jaygpKTsKICAgICAKLSAgICBZYXJyOjpZYXJyUGF0dGVy
biBwYXR0ZXJuKG1fcGF0dGVyblN0cmluZywgbV9mbGFncywgbV9jb25zdHJ1Y3Rpb25FcnJvckNv
ZGUsIHZtLT5zdGFja0xpbWl0KCkpOworICAgIFlhcnI6OllhcnJQYXR0ZXJuIHBhdHRlcm4obV9w
YXR0ZXJuU3RyaW5nLCBtX2ZsYWdzLCBtX2NvbnN0cnVjdGlvbkVycm9yQ29kZSk7CiAgICAgaWYg
KGhhc0Vycm9yKG1fY29uc3RydWN0aW9uRXJyb3JDb2RlKSkgewogICAgICAgICBtX3N0YXRlID0g
UGFyc2VFcnJvcjsKICAgICAgICAgcmV0dXJuOwpAQCAtMzAyLDcgKzI5OSw5IEBAIGJvb2wgUmVn
RXhwOjptYXRjaENvbmN1cnJlbnRseSgKICAgICBpZiAoIWhhc0NvZGVGb3Iocy5pczhCaXQoKSA/
IFlhcnI6OkNoYXI4IDogWWFycjo6Q2hhcjE2KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgcG9zaXRpb24gPSBtYXRjaCh2bSwgcywgc3RhcnRPZmZzZXQsIG92ZWN0b3IpOworICAgIHBv
c2l0aW9uID0gbWF0Y2hJbmxpbmU8VmVjdG9yPGludD4mLCBZYXJyOjpNYXRjaEZyb206OkNvbXBp
bGVyVGhyZWFkPih2bSwgcywgc3RhcnRPZmZzZXQsIG92ZWN0b3IpOworICAgIGlmIChtX3N0YXRl
ID09IFBhcnNlRXJyb3IpCisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIApAQCAtMzEwLDcgKzMwOSw3IEBAIHZvaWQgUmVnRXhwOjpjb21waWxlTWF0Y2hPbmx5KFZN
KiB2bSwgWWEKIHsKICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGNlbGxMb2NrKCkpOwogICAg
IAotICAgIFlhcnI6OllhcnJQYXR0ZXJuIHBhdHRlcm4obV9wYXR0ZXJuU3RyaW5nLCBtX2ZsYWdz
LCBtX2NvbnN0cnVjdGlvbkVycm9yQ29kZSwgdm0tPnN0YWNrTGltaXQoKSk7CisgICAgWWFycjo6
WWFyclBhdHRlcm4gcGF0dGVybihtX3BhdHRlcm5TdHJpbmcsIG1fZmxhZ3MsIG1fY29uc3RydWN0
aW9uRXJyb3JDb2RlKTsKICAgICBpZiAoaGFzRXJyb3IobV9jb25zdHJ1Y3Rpb25FcnJvckNvZGUp
KSB7CiAgICAgICAgIG1fc3RhdGUgPSBQYXJzZUVycm9yOwogICAgICAgICByZXR1cm47CkBAIC0z
NjMsNyArMzYyLDcgQEAgYm9vbCBSZWdFeHA6Om1hdGNoQ29uY3VycmVudGx5KFZNJiB2bSwgYwog
ICAgIGlmICghaGFzTWF0Y2hPbmx5Q29kZUZvcihzLmlzOEJpdCgpID8gWWFycjo6Q2hhcjggOiBZ
YXJyOjpDaGFyMTYpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXN1bHQgPSBtYXRj
aCh2bSwgcywgc3RhcnRPZmZzZXQpOworICAgIHJlc3VsdCA9IG1hdGNoSW5saW5lPFlhcnI6Ok1h
dGNoRnJvbTo6Q29tcGlsZXJUaHJlYWQ+KHZtLCBzLCBzdGFydE9mZnNldCk7CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5oCShy
ZXZpc2lvbiAyNTg4NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAu
aAkod29ya2luZyBjb3B5KQpAQCAtODYsOCArODYsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBtYXRj
aENvbmN1cnJlbnRseShWTSYsIGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCBN
YXRjaFJlc3VsdCYpOwogCiAgICAgLy8gQ2FsbCB0aGVzZSB2ZXJzaW9ucyBvZiB0aGUgbWF0Y2gg
ZnVuY3Rpb25zIGlmIHlvdSdyZSBkZXNwZXJhdGUgZm9yIHBlcmZvcm1hbmNlLgotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFZlY3RvclR5cGU+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmVjdG9yVHlw
ZSwgWWFycjo6TWF0Y2hGcm9tIHRocmVhZCA9IFlhcnI6Ok1hdGNoRnJvbTo6Vk1UaHJlYWQ+CiAg
ICAgaW50IG1hdGNoSW5saW5lKFZNJiwgY29uc3QgU3RyaW5nJiwgdW5zaWduZWQgc3RhcnRPZmZz
ZXQsIFZlY3RvclR5cGUmIG92ZWN0b3IpOworICAgIHRlbXBsYXRlPFlhcnI6Ok1hdGNoRnJvbSB0
aHJlYWQgPSBZYXJyOjpNYXRjaEZyb206OlZNVGhyZWFkPgogICAgIE1hdGNoUmVzdWx0IG1hdGNo
SW5saW5lKFZNJiwgY29uc3QgU3RyaW5nJiwgdW5zaWduZWQgc3RhcnRPZmZzZXQpOwogICAgIAog
ICAgIHVuc2lnbmVkIG51bVN1YnBhdHRlcm5zKCkgY29uc3QgeyByZXR1cm4gbV9udW1TdWJwYXR0
ZXJuczsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwSW5saW5l
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cElu
bGluZXMuaAkocmV2aXNpb24gMjU4ODY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUmVnRXhwSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC04NiwzOCArODYsNiBAQCBBTFdB
WVNfSU5MSU5FIGJvb2wgUmVnRXhwOjpoYXNDb2RlRm9yKFlhCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi1jbGFzcyBQYXR0ZXJuQ29udGV4dEJ1ZmZlckhvbGRlciB7Ci0gICAgV1RGX0ZPUkJJRF9I
RUFQX0FMTE9DQVRJT047Ci1wdWJsaWM6Ci0gICAgUGF0dGVybkNvbnRleHRCdWZmZXJIb2xkZXIo
Vk0mIHZtLCBib29sIG5lZWRCdWZmZXIpCi0gICAgICAgIDogbV92bSh2bSkKLSAgICB7Ci0jaWYg
RU5BQkxFKFlBUlJfSklUX0FMTF9QQVJFTlNfRVhQUkVTU0lPTlMpCi0gICAgICAgIGlmIChuZWVk
QnVmZmVyKQotICAgICAgICAgICAgbV9idWZmZXIgPSBtX3ZtLmFjcXVpcmVSZWdFeHBQYXR0ZXJu
Q29udGV4QnVmZmVyKCk7Ci0jZWxzZQotICAgICAgICBVTlVTRURfUEFSQU0obmVlZEJ1ZmZlcik7
Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICB+UGF0dGVybkNvbnRleHRCdWZmZXJIb2xkZXIoKQotICAg
IHsKLSNpZiBFTkFCTEUoWUFSUl9KSVRfQUxMX1BBUkVOU19FWFBSRVNTSU9OUykKLSAgICAgICAg
aWYgKGJ1ZmZlcigpKQotICAgICAgICAgICAgbV92bS5yZWxlYXNlUmVnRXhwUGF0dGVybkNvbnRl
eEJ1ZmZlcigpOwotI2Vsc2UKLSAgICAgICAgVU5VU0VEX1BBUkFNKG1fdm0pOwotI2VuZGlmCi0g
ICAgfQotCi0gICAgdm9pZCogYnVmZmVyKCkgeyByZXR1cm4gbV9idWZmZXI7IH0KLSAgICB1bnNp
Z25lZCBzaXplKCkgeyByZXR1cm4gYnVmZmVyKCkgPyBWTTo6cGF0dGVybkNvbnRleHRCdWZmZXJT
aXplIDogMDsgfQotCi1wcml2YXRlOgotICAgIFZNJiBtX3ZtOwotICAgIHZvaWQqIG1fYnVmZmVy
IHsgbnVsbHB0ciB9OwotfTsKLQogQUxXQVlTX0lOTElORSB2b2lkIFJlZ0V4cDo6Y29tcGlsZUlm
TmVjZXNzYXJ5KFZNJiB2bSwgWWFycjo6WWFyckNoYXJTaXplIGNoYXJTaXplKQogewogICAgIGlm
IChoYXNDb2RlRm9yKGNoYXJTaXplKSkKQEAgLTEyOSw3ICs5Nyw3IEBAIEFMV0FZU19JTkxJTkUg
dm9pZCBSZWdFeHA6OmNvbXBpbGVJZk5lY2UKICAgICBjb21waWxlKCZ2bSwgY2hhclNpemUpOwog
fQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBWZWN0b3JUeXBlPgordGVtcGxhdGU8dHlwZW5hbWUgVmVj
dG9yVHlwZSwgWWFycjo6TWF0Y2hGcm9tIG1hdGNoRnJvbT4KIEFMV0FZU19JTkxJTkUgaW50IFJl
Z0V4cDo6bWF0Y2hJbmxpbmUoVk0mIHZtLCBjb25zdCBTdHJpbmcmIHMsIHVuc2lnbmVkIHN0YXJ0
T2Zmc2V0LCBWZWN0b3JUeXBlJiBvdmVjdG9yKQogewogI2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lO
RykKQEAgLTE2MiwxOSArMTMwLDIyIEBAIEFMV0FZU19JTkxJTkUgaW50IFJlZ0V4cDo6bWF0Y2hJ
bmxpbmUoVk0KICAgICBpZiAobV9zdGF0ZSA9PSBKSVRDb2RlKSB7CiAgICAgICAgIHsKICAgICAg
ICAgICAgIEFTU0VSVChtX3JlZ0V4cEpJVENvZGUpOwotICAgICAgICAgICAgUGF0dGVybkNvbnRl
eHRCdWZmZXJIb2xkZXIgcGF0dGVybkNvbnRleHRCdWZmZXJIb2xkZXIodm0sIG1fcmVnRXhwSklU
Q29kZS0+dXNlc1BhdHRlcm5Db250ZXh0QnVmZmVyKCkpOworICAgICAgICAgICAgWWFycjo6TWF0
Y2hpbmdDb250ZXh0SG9sZGVyIHJlZ0V4cENvbnRleHQodm0sIG1fcmVnRXhwSklUQ29kZS5nZXQo
KSwgbWF0Y2hGcm9tKTsKIAogICAgICAgICAgICAgaWYgKHMuaXM4Qml0KCkpCi0gICAgICAgICAg
ICAgICAgcmVzdWx0ID0gbV9yZWdFeHBKSVRDb2RlLT5leGVjdXRlKHMuY2hhcmFjdGVyczgoKSwg
c3RhcnRPZmZzZXQsIHMubGVuZ3RoKCksIG9mZnNldFZlY3RvciwgcGF0dGVybkNvbnRleHRCdWZm
ZXJIb2xkZXIuYnVmZmVyKCksIHBhdHRlcm5Db250ZXh0QnVmZmVySG9sZGVyLnNpemUoKSkuc3Rh
cnQ7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9yZWdFeHBKSVRDb2RlLT5leGVjdXRlKHMu
Y2hhcmFjdGVyczgoKSwgc3RhcnRPZmZzZXQsIHMubGVuZ3RoKCksIG9mZnNldFZlY3RvciwgJnJl
Z0V4cENvbnRleHQpLnN0YXJ0OwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJl
c3VsdCA9IG1fcmVnRXhwSklUQ29kZS0+ZXhlY3V0ZShzLmNoYXJhY3RlcnMxNigpLCBzdGFydE9m
ZnNldCwgcy5sZW5ndGgoKSwgb2Zmc2V0VmVjdG9yLCBwYXR0ZXJuQ29udGV4dEJ1ZmZlckhvbGRl
ci5idWZmZXIoKSwgcGF0dGVybkNvbnRleHRCdWZmZXJIb2xkZXIuc2l6ZSgpKS5zdGFydDsKKyAg
ICAgICAgICAgICAgICByZXN1bHQgPSBtX3JlZ0V4cEpJVENvZGUtPmV4ZWN1dGUocy5jaGFyYWN0
ZXJzMTYoKSwgc3RhcnRPZmZzZXQsIHMubGVuZ3RoKCksIG9mZnNldFZlY3RvciwgJnJlZ0V4cENv
bnRleHQpLnN0YXJ0OwogICAgICAgICB9CiAKICAgICAgICAgaWYgKHJlc3VsdCA9PSBZYXJyOjpK
U1JlZ0V4cEpJVENvZGVGYWlsdXJlKSB7CiAgICAgICAgICAgICAvLyBKSVQnZWQgY29kZSBjb3Vs
ZG4ndCBoYW5kbGUgZXhwcmVzc2lvbiwgc28gcHVudCBiYWNrIHRvIHRoZSBpbnRlcnByZXRlci4K
ICAgICAgICAgICAgIGJ5dGVDb2RlQ29tcGlsZUlmTmVjZXNzYXJ5KCZ2bSk7Ci0gICAgICAgICAg
ICBpZiAobV9zdGF0ZSA9PSBQYXJzZUVycm9yKQorICAgICAgICAgICAgaWYgKG1fc3RhdGUgPT0g
UGFyc2VFcnJvcikgeworICAgICAgICAgICAgICAgIGlmIChtYXRjaEZyb20gPT0gWWFycjo6TWF0
Y2hGcm9tOjpDb21waWxlclRocmVhZCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwog
ICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCk7CisgICAgICAgICAgICB9CiAgICAg
ICAgICAgICByZXN1bHQgPSBZYXJyOjppbnRlcnByZXQobV9yZWdFeHBCeXRlY29kZS5nZXQoKSwg
cywgc3RhcnRPZmZzZXQsIHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihvZmZzZXRWZWN0b3Ip
KTsKICAgICAgICAgfQogCkBAIC0yNjAsNiArMjMxLDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIFJl
Z0V4cDo6Y29tcGlsZUlmTmVjZQogICAgIGNvbXBpbGVNYXRjaE9ubHkoJnZtLCBjaGFyU2l6ZSk7
CiB9CiAKK3RlbXBsYXRlPFlhcnI6Ok1hdGNoRnJvbSBtYXRjaEZyb20+CiBBTFdBWVNfSU5MSU5F
IE1hdGNoUmVzdWx0IFJlZ0V4cDo6bWF0Y2hJbmxpbmUoVk0mIHZtLCBjb25zdCBTdHJpbmcmIHMs
IHVuc2lnbmVkIHN0YXJ0T2Zmc2V0KQogewogI2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lORykKQEAg
LTI4OSwxMSArMjYxLDEyIEBAIEFMV0FZU19JTkxJTkUgTWF0Y2hSZXN1bHQgUmVnRXhwOjptYXRj
aEkKICAgICBpZiAobV9zdGF0ZSA9PSBKSVRDb2RlKSB7CiAgICAgICAgIHsKICAgICAgICAgICAg
IEFTU0VSVChtX3JlZ0V4cEpJVENvZGUpOwotICAgICAgICAgICAgUGF0dGVybkNvbnRleHRCdWZm
ZXJIb2xkZXIgcGF0dGVybkNvbnRleHRCdWZmZXJIb2xkZXIodm0sIG1fcmVnRXhwSklUQ29kZS0+
dXNlc1BhdHRlcm5Db250ZXh0QnVmZmVyKCkpOworICAgICAgICAgICAgWWFycjo6TWF0Y2hpbmdD
b250ZXh0SG9sZGVyIHJlZ0V4cENvbnRleHQodm0sIG1fcmVnRXhwSklUQ29kZS5nZXQoKSwgbWF0
Y2hGcm9tKTsKKwogICAgICAgICAgICAgaWYgKHMuaXM4Qml0KCkpCi0gICAgICAgICAgICAgICAg
cmVzdWx0ID0gbV9yZWdFeHBKSVRDb2RlLT5leGVjdXRlKHMuY2hhcmFjdGVyczgoKSwgc3RhcnRP
ZmZzZXQsIHMubGVuZ3RoKCksIHBhdHRlcm5Db250ZXh0QnVmZmVySG9sZGVyLmJ1ZmZlcigpLCBw
YXR0ZXJuQ29udGV4dEJ1ZmZlckhvbGRlci5zaXplKCkpOworICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IG1fcmVnRXhwSklUQ29kZS0+ZXhlY3V0ZShzLmNoYXJhY3RlcnM4KCksIHN0YXJ0T2Zmc2V0
LCBzLmxlbmd0aCgpLCAmcmVnRXhwQ29udGV4dCk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgcmVzdWx0ID0gbV9yZWdFeHBKSVRDb2RlLT5leGVjdXRlKHMuY2hhcmFjdGVyczE2
KCksIHN0YXJ0T2Zmc2V0LCBzLmxlbmd0aCgpLCBwYXR0ZXJuQ29udGV4dEJ1ZmZlckhvbGRlci5i
dWZmZXIoKSwgcGF0dGVybkNvbnRleHRCdWZmZXJIb2xkZXIuc2l6ZSgpKTsKKyAgICAgICAgICAg
ICAgICByZXN1bHQgPSBtX3JlZ0V4cEpJVENvZGUtPmV4ZWN1dGUocy5jaGFyYWN0ZXJzMTYoKSwg
c3RhcnRPZmZzZXQsIHMubGVuZ3RoKCksICZyZWdFeHBDb250ZXh0KTsKICAgICAgICAgfQogCiAj
aWYgRU5BQkxFKFJFR0VYUF9UUkFDSU5HKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3lh
cnIvWWFyci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnIu
aAkocmV2aXNpb24gMjU4ODY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyci5o
CSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSw4IEBAIHN0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgb2Zmc2V0Tm9NYXRjaCAKIC8vIGF2b2lkIHNwZW5kaW5nIGV4cG9uZW50aWFsIHRpbWUgb24g
Y29tcGxleCByZWd1bGFyIGV4cHJlc3Npb25zLgogc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBt
YXRjaExpbWl0ID0gMTAwMDAwMDsKIAorZW51bSBNYXRjaEZyb20geyBWTVRocmVhZCwgQ29tcGls
ZXJUaHJlYWQgfTsKKwogZW51bSBKU1JlZ0V4cFJlc3VsdCB7CiAgICAgSlNSZWdFeHBNYXRjaCA9
IDEsCiAgICAgSlNSZWdFeHBOb01hdGNoID0gMCwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS95YXJyL1lhcnJJbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3lhcnIvWWFyckludGVycHJldGVyLmNwcAkocmV2aXNpb24gMjU4ODY1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTI3Miw2ICsxMjcyLDkgQEAgcHVibGljOgogI2RlZmluZSBjdXJyZW50VGVybSgpIChk
aXNqdW5jdGlvbi0+dGVybXNbY29udGV4dC0+dGVybV0pCiAgICAgSlNSZWdFeHBSZXN1bHQgbWF0
Y2hEaXNqdW5jdGlvbihCeXRlRGlzanVuY3Rpb24qIGRpc2p1bmN0aW9uLCBEaXNqdW5jdGlvbkNv
bnRleHQqIGNvbnRleHQsIGJvb2wgYnRyYWNrID0gZmFsc2UpCiAgICAgeworICAgICAgICBpZiAo
VU5MSUtFTFkoIWlzU2FmZVRvUmVjdXJzZSgpKSkKKyAgICAgICAgICAgIHJldHVybiBKU1JlZ0V4
cEVycm9yTm9NZW1vcnk7CisKICAgICAgICAgaWYgKCEtLXJlbWFpbmluZ01hdGNoQ291bnQpCiAg
ICAgICAgICAgICByZXR1cm4gSlNSZWdFeHBFcnJvckhpdExpbWl0OwogCkBAIC0xNjY3LDEwICsx
NjcwLDEzIEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6CisgICAgaW5saW5lIGJvb2wgaXNT
YWZlVG9SZWN1cnNlKCkgeyByZXR1cm4gbV9zdGFja0NoZWNrLmlzU2FmZVRvUmVjdXJzZSgpOyB9
CisKICAgICBCeXRlY29kZVBhdHRlcm4qIHBhdHRlcm47CiAgICAgYm9vbCB1bmljb2RlOwogICAg
IHVuc2lnbmVkKiBvdXRwdXQ7CiAgICAgSW5wdXRTdHJlYW0gaW5wdXQ7CisgICAgU3RhY2tDaGVj
ayBtX3N0YWNrQ2hlY2s7CiAgICAgV1RGOjpCdW1wUG9pbnRlclBvb2wqIGFsbG9jYXRvclBvb2wg
eyBudWxscHRyIH07CiAgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQ7CiAgICAgdW5zaWduZWQgcmVt
YWluaW5nTWF0Y2hDb3VudDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJK
SVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQu
Y3BwCShyZXZpc2lvbiAyNTg4NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJy
SklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTggKzI2LDQ4IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiWWFyckpJVC5oIgogCi0jaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUu
aD4KICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAiT3B0aW9ucy5oIgogI2luY2x1
ZGUgIlZNLmgiCiAjaW5jbHVkZSAiWWFyci5oIgogI2luY2x1ZGUgIllhcnJDYW5vbmljYWxpemUu
aCIKICNpbmNsdWRlICJZYXJyRGlzYXNzZW1ibGVyLmgiCisjaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5
cGUuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisKIAogI2lmIEVOQUJMRShZQVJSX0pJ
VCkKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBZYXJyIHsKIAorTWF0Y2hpbmdDb250ZXh0
SG9sZGVyOjpNYXRjaGluZ0NvbnRleHRIb2xkZXIoVk0mIHZtLCBZYXJyQ29kZUJsb2NrKiB5YXJy
Q29kZUJsb2NrLCBNYXRjaEZyb20gbWF0Y2hGcm9tKQorICAgIDogbV92bSh2bSkKK3sKKyAgICBp
ZiAobWF0Y2hGcm9tID09IE1hdGNoRnJvbTo6Vk1UaHJlYWQpCisgICAgICAgIG1fc3RhY2tMaW1p
dCA9IHZtLnNvZnRTdGFja0xpbWl0KCk7CisgICAgZWxzZSB7CisgICAgICAgIFN0YWNrQm91bmRz
IHN0YWNrID0gVGhyZWFkOjpjdXJyZW50KCkuc3RhY2soKTsKKyAgICAgICAgbV9zdGFja0xpbWl0
ID0gc3RhY2sucmVjdXJzaW9uTGltaXQoT3B0aW9uczo6cmVzZXJ2ZWRab25lU2l6ZSgpKTsKKyAg
ICB9CisKKyNpZiBFTkFCTEUoWUFSUl9KSVRfQUxMX1BBUkVOU19FWFBSRVNTSU9OUykKKyAgICBp
ZiAoeWFyckNvZGVCbG9jay0+dXNlc1BhdHRlcm5Db250ZXh0QnVmZmVyKCkpIHsKKyAgICAgICAg
bV9wYXR0ZXJuQ29udGV4dEJ1ZmZlciA9IG1fdm0uYWNxdWlyZVJlZ0V4cFBhdHRlcm5Db250ZXhC
dWZmZXIoKTsKKyAgICAgICAgbV9wYXR0ZXJuQ29udGV4dEJ1ZmZlclNpemUgPSBWTTo6cGF0dGVy
bkNvbnRleHRCdWZmZXJTaXplOworICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHlhcnJD
b2RlQmxvY2spOworI2VuZGlmCit9CisKK01hdGNoaW5nQ29udGV4dEhvbGRlcjo6fk1hdGNoaW5n
Q29udGV4dEhvbGRlcigpCit7CisjaWYgRU5BQkxFKFlBUlJfSklUX0FMTF9QQVJFTlNfRVhQUkVT
U0lPTlMpCisgICAgaWYgKG1fcGF0dGVybkNvbnRleHRCdWZmZXIpCisgICAgICAgIG1fdm0ucmVs
ZWFzZVJlZ0V4cFBhdHRlcm5Db250ZXhCdWZmZXIoKTsKKyNlbmRpZgorfQorCiB0ZW1wbGF0ZTxZ
YXJySklUQ29tcGlsZU1vZGUgY29tcGlsZU1vZGU+CiBjbGFzcyBZYXJyR2VuZXJhdG9yIDogcHVi
bGljIFlhcnJKSVRJbmZvLCBwcml2YXRlIE1hY3JvQXNzZW1ibGVyIHsKIApAQCAtNjAsNyArOTAs
OCBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIDogcHVibGljIFlhcnJKSVRJbmZvCiAgICAgc3RhdGlj
IGNvbnN0IFJlZ2lzdGVySUQgaW5kZXggPSBBUk02NFJlZ2lzdGVyczo6eDE7CiAgICAgc3RhdGlj
IGNvbnN0IFJlZ2lzdGVySUQgbGVuZ3RoID0gQVJNNjRSZWdpc3RlcnM6OngyOwogICAgIHN0YXRp
YyBjb25zdCBSZWdpc3RlcklEIG91dHB1dCA9IEFSTTY0UmVnaXN0ZXJzOjp4MzsKLSAgICBzdGF0
aWMgY29uc3QgUmVnaXN0ZXJJRCBmcmVlbGlzdFJlZ2lzdGVyID0gQVJNNjRSZWdpc3RlcnM6Ong0
OworICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIG1hdGNoaW5nQ29udGV4dCA9IEFSTTY0UmVn
aXN0ZXJzOjp4NDsKKyAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBmcmVlbGlzdFJlZ2lzdGVy
ID0gQVJNNjRSZWdpc3RlcnM6Ong0OyAvLyBMb2FkZWQgZnJvbSB0aGUgTWF0Y2hpbmdDb250ZXh0
SG9sZGVyIGluIHRoZSBwcm9sb2d1ZS4KICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBmcmVl
bGlzdFNpemVSZWdpc3RlciA9IEFSTTY0UmVnaXN0ZXJzOjp4NTsgLy8gT25seSB1c2VkIGR1cmlu
ZyBpbml0aWFsaXphdGlvbi4KIAogICAgIC8vIFNjcmF0Y2ggcmVnaXN0ZXJzCkBAIC0xMDEsNyAr
MTMyLDggQEAgY2xhc3MgWWFyckdlbmVyYXRvciA6IHB1YmxpYyBZYXJySklUSW5mbwogICAgIHN0
YXRpYyBjb25zdCBSZWdpc3RlcklEIGluZGV4ID0gWDg2UmVnaXN0ZXJzOjplc2k7CiAgICAgc3Rh
dGljIGNvbnN0IFJlZ2lzdGVySUQgbGVuZ3RoID0gWDg2UmVnaXN0ZXJzOjplZHg7CiAgICAgc3Rh
dGljIGNvbnN0IFJlZ2lzdGVySUQgb3V0cHV0ID0gWDg2UmVnaXN0ZXJzOjplY3g7Ci0gICAgc3Rh
dGljIGNvbnN0IFJlZ2lzdGVySUQgZnJlZWxpc3RSZWdpc3RlciA9IFg4NlJlZ2lzdGVyczo6cjg7
CisgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgbWF0Y2hpbmdDb250ZXh0ID0gWDg2UmVnaXN0
ZXJzOjpyODsKKyAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBmcmVlbGlzdFJlZ2lzdGVyID0g
WDg2UmVnaXN0ZXJzOjpyODsgLy8gTG9hZGVkIGZyb20gdGhlIE1hdGNoaW5nQ29udGV4dEhvbGRl
ciBpbiB0aGUgcHJvbG9ndWUuCiAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgZnJlZWxpc3RT
aXplUmVnaXN0ZXIgPSBYODZSZWdpc3RlcnM6OnI5OyAvLyBPbmx5IHVzZWQgZHVyaW5nIGluaXRp
YWxpemF0aW9uLgogI2Vsc2UKICAgICAvLyBJZiB0aGUgcmV0dXJuIHZhbHVlIGRvZXNuJ3QgZml0
IGluIDY0Yml0cywgaXRzIGRlc3RpbmF0aW9uIGlzIHBvaW50ZWQgYnkgcmN4IGFuZCB0aGUgcGFy
YW1ldGVycyBhcmUgc2hpZnRlZC4KQEAgLTIyMCw2ICsyNTIsOSBAQCBjbGFzcyBZYXJyR2VuZXJh
dG9yIDogcHVibGljIFlhcnJKSVRJbmZvCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
IAorICAgICAgICBsb2FkMzIoQWRkcmVzcyhtYXRjaGluZ0NvbnRleHQsIE1hdGNoaW5nQ29udGV4
dEhvbGRlcjo6b2Zmc2V0T2ZQYXR0ZXJuQ29udGV4dEJ1ZmZlclNpemUoKSksIGZyZWVsaXN0U2l6
ZVJlZ2lzdGVyKTsKKyAgICAgICAgLy8gTm90ZSB0aGF0IG1hdGNoaW5nQ29udGV4dCBhbmQgZnJl
ZWxpc3RSZWdpc3RlciBhcmUgbGlrZWx5IHRoZSBzYW1lIHJlZ2lzdGVyLgorICAgICAgICBsb2Fk
UHRyKEFkZHJlc3MobWF0Y2hpbmdDb250ZXh0LCBNYXRjaGluZ0NvbnRleHRIb2xkZXI6Om9mZnNl
dE9mUGF0dGVybkNvbnRleHRCdWZmZXIoKSksIGZyZWVsaXN0UmVnaXN0ZXIpOwogICAgICAgICBK
dW1wIGVtcHR5RnJlZUxpc3QgPSBicmFuY2hUZXN0UHRyKFplcm8sIGZyZWVsaXN0UmVnaXN0ZXIp
OwogICAgICAgICBtb3ZlKGZyZWVsaXN0UmVnaXN0ZXIsIHBhcmVuQ29udGV4dFBvaW50ZXIpOwog
ICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHBhcmVuQ29udGV4dFNpemUpLCBmcmVlbGlzdFJl
Z2lzdGVyLCBuZXh0UGFyZW5Db250ZXh0UG9pbnRlcik7CkBAIC02MzUsMTIgKzY3MCw2IEBAIGNs
YXNzIFlhcnJHZW5lcmF0b3IgOiBwdWJsaWMgWWFyckpJVEluZm8KICAgICAgICAgY2FsbEZyYW1l
U2l6ZSA9IChjYWxsRnJhbWVTaXplICsgMHgzZikgJiB+MHgzZjsKICAgICAgICAgcmV0dXJuIGNh
bGxGcmFtZVNpemU7CiAgICAgfQotICAgIHZvaWQgaW5pdENhbGxGcmFtZSgpCi0gICAgewotICAg
ICAgICB1bnNpZ25lZCBjYWxsRnJhbWVTaXplSW5CeXRlcyA9IGFsaWduQ2FsbEZyYW1lU2l6ZUlu
Qnl0ZXMobV9wYXR0ZXJuLm1fYm9keS0+bV9jYWxsRnJhbWVTaXplKTsKLSAgICAgICAgaWYgKGNh
bGxGcmFtZVNpemVJbkJ5dGVzKQotICAgICAgICAgICAgc3ViUHRyKEltbTMyKGNhbGxGcmFtZVNp
emVJbkJ5dGVzKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgIH0KICAgICB2b2lkIHJlbW92
ZUNhbGxGcmFtZSgpCiAgICAgewogICAgICAgICB1bnNpZ25lZCBjYWxsRnJhbWVTaXplSW5CeXRl
cyA9IGFsaWduQ2FsbEZyYW1lU2l6ZUluQnl0ZXMobV9wYXR0ZXJuLm1fYm9keS0+bV9jYWxsRnJh
bWVTaXplKTsKQEAgLTM4NTEsNiArMzg4MCwyOCBAQCBwdWJsaWM6CiAgICAgICAgIGdlbmVyYXRl
RmFpbFJldHVybigpOwogICAgICAgICBoYXNJbnB1dC5saW5rKHRoaXMpOwogCisgICAgICAgIHVu
c2lnbmVkIGNhbGxGcmFtZVNpemVJbkJ5dGVzID0gYWxpZ25DYWxsRnJhbWVTaXplSW5CeXRlcyht
X3BhdHRlcm4ubV9ib2R5LT5tX2NhbGxGcmFtZVNpemUpOworICAgICAgICBpZiAoY2FsbEZyYW1l
U2l6ZUluQnl0ZXMpIHsKKyAgICAgICAgICAgIC8vIENoZWNrIHN0YWNrIHNpemUKKyAgICAgICAg
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLWNhbGxGcmFtZVNpemVJbkJ5dGVzKSwgc3RhY2tQb2lu
dGVyUmVnaXN0ZXIsIHJlZ1QwKTsKKyNpZiBDUFUoWDg2XzY0KSAmJiBPUyhXSU5ET1dTKQorICAg
ICAgICAgICAgUmVnaXN0ZXJJRCBtYXRjaGluZ0NvbnRleHQgPSByZWdUMTsKKyAgICAgICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhYODZSZWdpc3RlcnM6OmVicCwgNyAqIHNpemVvZih2b2lkKikpLCBt
YXRjaGluZ0NvbnRleHQpOworI2VsaWYgQ1BVKEFSTV9USFVNQjIpIHx8IENQVShNSVBTKQorICAg
ICAgICAgICAgUmVnaXN0ZXJJRCBtYXRjaGluZ0NvbnRleHQgPSByZWdUMTsKKyAgICAgICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgNCAqIHNpemVvZih2b2lkKikp
LCBtYXRjaGluZ0NvbnRleHQpOworI2VuZGlmCisgICAgICAgICAgICBKdW1wIHN0YWNrT2sgPSBi
cmFuY2hQdHIoQmVsb3dPckVxdWFsLCBBZGRyZXNzKG1hdGNoaW5nQ29udGV4dCwgTWF0Y2hpbmdD
b250ZXh0SG9sZGVyOjpvZmZzZXRPZlN0YWNrTGltaXQoKSksIHJlZ1QwKTsKKworICAgICAgICAg
ICAgLy8gRXhjZWVkZWQgc3RhY2sgbGltaXQsIHB1bnQgdG8gdGhlIGludGVycHJldGVyLgorICAg
ICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKCh2b2lkKilzdGF0aWNfY2FzdDxzaXplX3Q+KC0y
KSksIHJldHVyblJlZ2lzdGVyKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCBy
ZXR1cm5SZWdpc3RlcjIpOworICAgICAgICAgICAgZ2VuZXJhdGVSZXR1cm4oKTsKKworICAgICAg
ICAgICAgc3RhY2tPay5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShyZWdUMCwgc3RhY2tQ
b2ludGVyUmVnaXN0ZXIpOworICAgICAgICB9CisKICNpZmRlZiBKSVRfVU5JQ09ERV9FWFBSRVNT
SU9OUwogICAgICAgICBpZiAobV9kZWNvZGVTdXJyb2dhdGVQYWlycykKICAgICAgICAgICAgIGdl
dEVmZmVjdGl2ZUFkZHJlc3MoQmFzZUluZGV4KGlucHV0LCBsZW5ndGgsIFRpbWVzVHdvKSwgZW5k
T2ZTdHJpbmdBZGRyZXNzKTsKQEAgLTM4NjksOCArMzkyMCw2IEBAIHB1YmxpYzoKICAgICAgICAg
aWYgKCFtX3BhdHRlcm4ubV9ib2R5LT5tX2hhc0ZpeGVkU2l6ZSkKICAgICAgICAgICAgIHNldE1h
dGNoU3RhcnQoaW5kZXgpOwogCi0gICAgICAgIGluaXRDYWxsRnJhbWUoKTsKLQogI2lmIEVOQUJM
RShZQVJSX0pJVF9BTExfUEFSRU5TX0VYUFJFU1NJT05TKQogICAgICAgICBpZiAobV9jb250YWlu
c05lc3RlZFN1YnBhdHRlcm5zKSB7CiAgICAgICAgICAgICBpbml0UGFyZW5Db250ZXh0RnJlZUxp
c3QoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmgJKHJldmlzaW9uIDI1
ODg2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuaAkod29ya2luZyBj
b3B5KQpAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
LmgiCiAjaW5jbHVkZSAiTWF0Y2hSZXN1bHQuaCIKKyNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUg
IllhcnIuaCIKICNpbmNsdWRlICJZYXJyUGF0dGVybi5oIgogCkBAIC00MSw2ICs0Miw4IEBAIGNs
YXNzIEV4ZWN1dGFibGVQb29sOwogCiBuYW1lc3BhY2UgWWFyciB7CiAKK2NsYXNzIFlhcnJDb2Rl
QmxvY2s7CisKIGVudW0gY2xhc3MgSklURmFpbHVyZVJlYXNvbiA6IHVpbnQ4X3QgewogICAgIERl
Y29kZVN1cnJvZ2F0ZVBhaXIsCiAgICAgQmFja1JlZmVyZW5jZSwKQEAgLTUyLDE1ICs1NSwzNSBA
QCBlbnVtIGNsYXNzIEpJVEZhaWx1cmVSZWFzb24gOiB1aW50OF90IHsKICAgICBFeGVjdXRhYmxl
TWVtb3J5QWxsb2NhdGlvbkZhaWx1cmUsCiB9OwogCitjbGFzcyBNYXRjaGluZ0NvbnRleHRIb2xk
ZXIgeworICAgIFdURl9GT1JCSURfSEVBUF9BTExPQ0FUSU9OOworcHVibGljOgorICAgIE1hdGNo
aW5nQ29udGV4dEhvbGRlcihWTSYsIFlhcnJDb2RlQmxvY2sqLCBNYXRjaEZyb20gbWF0Y2hGcm9t
ID0gTWF0Y2hGcm9tOjpWTVRocmVhZCk7CisgICAgfk1hdGNoaW5nQ29udGV4dEhvbGRlcigpOwor
CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlN0YWNrTGltaXQoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoTWF0Y2hpbmdDb250ZXh0SG9sZGVyLCBtX3N0YWNrTGltaXQpOyB9CisjaWYg
RU5BQkxFKFlBUlJfSklUX0FMTF9QQVJFTlNfRVhQUkVTU0lPTlMpCisgICAgc3RhdGljIHB0cmRp
ZmZfdCBvZmZzZXRPZlBhdHRlcm5Db250ZXh0QnVmZmVyKCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKE1hdGNoaW5nQ29udGV4dEhvbGRlciwgbV9wYXR0ZXJuQ29udGV4dEJ1ZmZlcik7IH0KKyAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mUGF0dGVybkNvbnRleHRCdWZmZXJTaXplKCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKE1hdGNoaW5nQ29udGV4dEhvbGRlciwgbV9wYXR0ZXJuQ29u
dGV4dEJ1ZmZlclNpemUpOyB9CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBWTSYgbV92bTsKKyAg
ICB2b2lkKiBtX3N0YWNrTGltaXQ7CisjaWYgRU5BQkxFKFlBUlJfSklUX0FMTF9QQVJFTlNfRVhQ
UkVTU0lPTlMpCisgICAgdm9pZCogbV9wYXR0ZXJuQ29udGV4dEJ1ZmZlciB7IG51bGxwdHIgfTsK
KyAgICB1bnNpZ25lZCBtX3BhdHRlcm5Db250ZXh0QnVmZmVyU2l6ZSB7IDAgfTsKKyNlbmRpZgor
fTsKKwogY2xhc3MgWWFyckNvZGVCbG9jayB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoWWFyckNvZGVCbG9jayk7CiAKLSAgICAvLyBUZWNo
bmljYWxseSBmcmVlUGFyZW5Db250ZXh0IGFuZCBwYXJlbkNvbnRleHRTaXplIGFyZSBvbmx5IHVz
ZWQgaWYgRU5BQkxFKFlBUlJfSklUX0FMTF9QQVJFTlNfRVhQUkVTU0lPTlMpIGlzIHNldC4gRm9y
dHVuYXRlbHksIGFsbCB0aGUgY2FsbGluZyBjb252ZW50aW9ucyB3ZSBzdXBwb3J0IGhhdmUgY2Fs
bGVyIHNhdmUgYXJndW1lbnQgcmVnaXN0ZXJzLgotICAgIHVzaW5nIFlhcnJKSVRDb2RlOCA9IEVu
Y29kZWRNYXRjaFJlc3VsdCAoKikoY29uc3QgTENoYXIqIGlucHV0LCB1bnNpZ25lZCBzdGFydCwg
dW5zaWduZWQgbGVuZ3RoLCBpbnQqIG91dHB1dCwgdm9pZCogZnJlZVBhcmVuQ29udGV4dCwgdW5z
aWduZWQgcGFyZW5Db250ZXh0U2l6ZSkgWUFSUl9DQUxMOwotICAgIHVzaW5nIFlhcnJKSVRDb2Rl
MTYgPSBFbmNvZGVkTWF0Y2hSZXN1bHQgKCopKGNvbnN0IFVDaGFyKiBpbnB1dCwgdW5zaWduZWQg
c3RhcnQsIHVuc2lnbmVkIGxlbmd0aCwgaW50KiBvdXRwdXQsIHZvaWQqIGZyZWVQYXJlbkNvbnRl
eHQsIHVuc2lnbmVkIHBhcmVuQ29udGV4dFNpemUpIFlBUlJfQ0FMTDsKLSAgICB1c2luZyBZYXJy
SklUQ29kZU1hdGNoT25seTggPSBFbmNvZGVkTWF0Y2hSZXN1bHQgKCopKGNvbnN0IExDaGFyKiBp
bnB1dCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCwgdm9pZCosIHZvaWQqIGZyZWVQ
YXJlbkNvbnRleHQsIHVuc2lnbmVkIHBhcmVuQ29udGV4dFNpemUpIFlBUlJfQ0FMTDsKLSAgICB1
c2luZyBZYXJySklUQ29kZU1hdGNoT25seTE2ID0gRW5jb2RlZE1hdGNoUmVzdWx0ICgqKShjb25z
dCBVQ2hhciogaW5wdXQsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIHZvaWQqLCB2
b2lkKiBmcmVlUGFyZW5Db250ZXh0LCB1bnNpZ25lZCBwYXJlbkNvbnRleHRTaXplKSBZQVJSX0NB
TEw7CisgICAgdXNpbmcgWWFyckpJVENvZGU4ID0gRW5jb2RlZE1hdGNoUmVzdWx0ICgqKShjb25z
dCBMQ2hhciogaW5wdXQsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIGludCogb3V0
cHV0LCBNYXRjaGluZ0NvbnRleHRIb2xkZXIqIG1hdGNoaW5nQ29udGV4dCkgWUFSUl9DQUxMOwor
ICAgIHVzaW5nIFlhcnJKSVRDb2RlMTYgPSBFbmNvZGVkTWF0Y2hSZXN1bHQgKCopKGNvbnN0IFVD
aGFyKiBpbnB1dCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCwgaW50KiBvdXRwdXQs
IE1hdGNoaW5nQ29udGV4dEhvbGRlciogbWF0Y2hpbmdDb250ZXh0KSBZQVJSX0NBTEw7CisgICAg
dXNpbmcgWWFyckpJVENvZGVNYXRjaE9ubHk4ID0gRW5jb2RlZE1hdGNoUmVzdWx0ICgqKShjb25z
dCBMQ2hhciogaW5wdXQsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIHZvaWQqLCBN
YXRjaGluZ0NvbnRleHRIb2xkZXIqIG1hdGNoaW5nQ29udGV4dCkgWUFSUl9DQUxMOworICAgIHVz
aW5nIFlhcnJKSVRDb2RlTWF0Y2hPbmx5MTYgPSBFbmNvZGVkTWF0Y2hSZXN1bHQgKCopKGNvbnN0
IFVDaGFyKiBpbnB1dCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCwgdm9pZCosIE1h
dGNoaW5nQ29udGV4dEhvbGRlciogbWF0Y2hpbmdDb250ZXh0KSBZQVJSX0NBTEw7CiAKIHB1Ymxp
YzoKICAgICBZYXJyQ29kZUJsb2NrKCkgPSBkZWZhdWx0OwpAQCAtODMsMjggKzEwNiwyOCBAQCBw
dWJsaWM6CiAgICAgdm9pZCBzZXRVc2VzUGF0dGVybkNvbnRleHRCdWZmZXIoKSB7IG1fdXNlc1Bh
dHRlcm5Db250ZXh0QnVmZmVyID0gdHJ1ZTsgfQogI2VuZGlmCiAKLSAgICBNYXRjaFJlc3VsdCBl
eGVjdXRlKGNvbnN0IExDaGFyKiBpbnB1dCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0
aCwgaW50KiBvdXRwdXQsIHZvaWQqIGZyZWVQYXJlbkNvbnRleHQsIHVuc2lnbmVkIHBhcmVuQ29u
dGV4dFNpemUpCisgICAgTWF0Y2hSZXN1bHQgZXhlY3V0ZShjb25zdCBMQ2hhciogaW5wdXQsIHVu
c2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIGludCogb3V0cHV0LCBNYXRjaGluZ0NvbnRl
eHRIb2xkZXIqIG1hdGNoaW5nQ29udGV4dCkKICAgICB7CiAgICAgICAgIEFTU0VSVChoYXM4Qml0
Q29kZSgpKTsKLSAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0KHVudGFnQ0Z1bmN0aW9uUHRyPFlh
cnJKSVRDb2RlOCwgWWFycjhCaXRQdHJUYWc+KG1fcmVmOC5jb2RlKCkuZXhlY3V0YWJsZUFkZHJl
c3MoKSkoaW5wdXQsIHN0YXJ0LCBsZW5ndGgsIG91dHB1dCwgZnJlZVBhcmVuQ29udGV4dCwgcGFy
ZW5Db250ZXh0U2l6ZSkpOworICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQodW50YWdDRnVuY3Rp
b25QdHI8WWFyckpJVENvZGU4LCBZYXJyOEJpdFB0clRhZz4obV9yZWY4LmNvZGUoKS5leGVjdXRh
YmxlQWRkcmVzcygpKShpbnB1dCwgc3RhcnQsIGxlbmd0aCwgb3V0cHV0LCBtYXRjaGluZ0NvbnRl
eHQpKTsKICAgICB9CiAKLSAgICBNYXRjaFJlc3VsdCBleGVjdXRlKGNvbnN0IFVDaGFyKiBpbnB1
dCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCwgaW50KiBvdXRwdXQsIHZvaWQqIGZy
ZWVQYXJlbkNvbnRleHQsIHVuc2lnbmVkIHBhcmVuQ29udGV4dFNpemUpCisgICAgTWF0Y2hSZXN1
bHQgZXhlY3V0ZShjb25zdCBVQ2hhciogaW5wdXQsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBs
ZW5ndGgsIGludCogb3V0cHV0LCBNYXRjaGluZ0NvbnRleHRIb2xkZXIqIG1hdGNoaW5nQ29udGV4
dCkKICAgICB7CiAgICAgICAgIEFTU0VSVChoYXMxNkJpdENvZGUoKSk7Ci0gICAgICAgIHJldHVy
biBNYXRjaFJlc3VsdCh1bnRhZ0NGdW5jdGlvblB0cjxZYXJySklUQ29kZTE2LCBZYXJyMTZCaXRQ
dHJUYWc+KG1fcmVmMTYuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKGlucHV0LCBzdGFydCwg
bGVuZ3RoLCBvdXRwdXQsIGZyZWVQYXJlbkNvbnRleHQsIHBhcmVuQ29udGV4dFNpemUpKTsKKyAg
ICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0KHVudGFnQ0Z1bmN0aW9uUHRyPFlhcnJKSVRDb2RlMTYs
IFlhcnIxNkJpdFB0clRhZz4obV9yZWYxNi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkoaW5w
dXQsIHN0YXJ0LCBsZW5ndGgsIG91dHB1dCwgbWF0Y2hpbmdDb250ZXh0KSk7CiAgICAgfQogCi0g
ICAgTWF0Y2hSZXN1bHQgZXhlY3V0ZShjb25zdCBMQ2hhciogaW5wdXQsIHVuc2lnbmVkIHN0YXJ0
LCB1bnNpZ25lZCBsZW5ndGgsIHZvaWQqIGZyZWVQYXJlbkNvbnRleHQsIHVuc2lnbmVkIHBhcmVu
Q29udGV4dFNpemUpCisgICAgTWF0Y2hSZXN1bHQgZXhlY3V0ZShjb25zdCBMQ2hhciogaW5wdXQs
IHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIE1hdGNoaW5nQ29udGV4dEhvbGRlciog
bWF0Y2hpbmdDb250ZXh0KQogICAgIHsKICAgICAgICAgQVNTRVJUKGhhczhCaXRDb2RlTWF0Y2hP
bmx5KCkpOwotICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQodW50YWdDRnVuY3Rpb25QdHI8WWFy
ckpJVENvZGVNYXRjaE9ubHk4LCBZYXJyTWF0Y2hPbmx5OEJpdFB0clRhZz4obV9tYXRjaE9ubHk4
LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKShpbnB1dCwgc3RhcnQsIGxlbmd0aCwgMCwgZnJl
ZVBhcmVuQ29udGV4dCwgcGFyZW5Db250ZXh0U2l6ZSkpOworICAgICAgICByZXR1cm4gTWF0Y2hS
ZXN1bHQodW50YWdDRnVuY3Rpb25QdHI8WWFyckpJVENvZGVNYXRjaE9ubHk4LCBZYXJyTWF0Y2hP
bmx5OEJpdFB0clRhZz4obV9tYXRjaE9ubHk4LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKShp
bnB1dCwgc3RhcnQsIGxlbmd0aCwgMCwgbWF0Y2hpbmdDb250ZXh0KSk7CiAgICAgfQogCi0gICAg
TWF0Y2hSZXN1bHQgZXhlY3V0ZShjb25zdCBVQ2hhciogaW5wdXQsIHVuc2lnbmVkIHN0YXJ0LCB1
bnNpZ25lZCBsZW5ndGgsIHZvaWQqIGZyZWVQYXJlbkNvbnRleHQsIHVuc2lnbmVkIHBhcmVuQ29u
dGV4dFNpemUpCisgICAgTWF0Y2hSZXN1bHQgZXhlY3V0ZShjb25zdCBVQ2hhciogaW5wdXQsIHVu
c2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIE1hdGNoaW5nQ29udGV4dEhvbGRlciogbWF0
Y2hpbmdDb250ZXh0KQogICAgIHsKICAgICAgICAgQVNTRVJUKGhhczE2Qml0Q29kZU1hdGNoT25s
eSgpKTsKLSAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0KHVudGFnQ0Z1bmN0aW9uUHRyPFlhcnJK
SVRDb2RlTWF0Y2hPbmx5MTYsIFlhcnJNYXRjaE9ubHkxNkJpdFB0clRhZz4obV9tYXRjaE9ubHkx
Ni5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkoaW5wdXQsIHN0YXJ0LCBsZW5ndGgsIDAsIGZy
ZWVQYXJlbkNvbnRleHQsIHBhcmVuQ29udGV4dFNpemUpKTsKKyAgICAgICAgcmV0dXJuIE1hdGNo
UmVzdWx0KHVudGFnQ0Z1bmN0aW9uUHRyPFlhcnJKSVRDb2RlTWF0Y2hPbmx5MTYsIFlhcnJNYXRj
aE9ubHkxNkJpdFB0clRhZz4obV9tYXRjaE9ubHkxNi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3Mo
KSkoaW5wdXQsIHN0YXJ0LCBsZW5ndGgsIDAsIG1hdGNoaW5nQ29udGV4dCkpOwogICAgIH0KIAog
I2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lORykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95
YXJyL1lhcnJQYXR0ZXJuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
eWFyci9ZYXJyUGF0dGVybi5jcHAJKHJldmlzaW9uIDI1ODg2NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS95YXJyL1lhcnJQYXR0ZXJuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMs
NyBAQAogI2luY2x1ZGUgIllhcnJQYXJzZXIuaCIKICNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgog
I2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi9TdGFja1BvaW50ZXIuaD4K
KyNpbmNsdWRlIDx3dGYvU3RhY2tDaGVjay5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4K
ICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTQzNiwxMCArNDM2LDkgQEAgcHJpdmF0ZToK
IAogY2xhc3MgWWFyclBhdHRlcm5Db25zdHJ1Y3RvciB7CiBwdWJsaWM6Ci0gICAgWWFyclBhdHRl
cm5Db25zdHJ1Y3RvcihZYXJyUGF0dGVybiYgcGF0dGVybiwgdm9pZCogc3RhY2tMaW1pdCkKKyAg
ICBZYXJyUGF0dGVybkNvbnN0cnVjdG9yKFlhcnJQYXR0ZXJuJiBwYXR0ZXJuKQogICAgICAgICA6
IG1fcGF0dGVybihwYXR0ZXJuKQogICAgICAgICAsIG1fY2hhcmFjdGVyQ2xhc3NDb25zdHJ1Y3Rv
cihwYXR0ZXJuLmlnbm9yZUNhc2UoKSwgcGF0dGVybi51bmljb2RlKCkgPyBDYW5vbmljYWxNb2Rl
OjpVbmljb2RlIDogQ2Fub25pY2FsTW9kZTo6VUNTMikKLSAgICAgICAgLCBtX3N0YWNrTGltaXQo
c3RhY2tMaW1pdCkKICAgICB7CiAgICAgICAgIGF1dG8gYm9keSA9IG1ha2VVbmlxdWU8UGF0dGVy
bkRpc2p1bmN0aW9uPigpOwogICAgICAgICBtX3BhdHRlcm4ubV9ib2R5ID0gYm9keS5nZXQoKTsK
QEAgLTExMTgsMjggKzExMTcsMjEgQEAgcHVibGljOgogICAgIEVycm9yQ29kZSBlcnJvcigpIHsg
cmV0dXJuIG1fZXJyb3I7IH0KIAogcHJpdmF0ZToKLSAgICBib29sIGlzU2FmZVRvUmVjdXJzZSgp
IGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoIW1fc3RhY2tMaW1pdCkKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICBpbnQ4X3QqIGN1cnIgPSByZWludGVycHJldF9jYXN0PGludDhf
dCo+KGN1cnJlbnRTdGFja1BvaW50ZXIoKSk7Ci0gICAgICAgIGludDhfdCogbGltaXQgPSByZWlu
dGVycHJldF9jYXN0PGludDhfdCo+KG1fc3RhY2tMaW1pdCk7Ci0gICAgICAgIHJldHVybiBjdXJy
ID49IGxpbWl0OwotICAgIH0KKyAgICBpbmxpbmUgYm9vbCBpc1NhZmVUb1JlY3Vyc2UoKSB7IHJl
dHVybiBtX3N0YWNrQ2hlY2suaXNTYWZlVG9SZWN1cnNlKCk7IH0KIAogICAgIFlhcnJQYXR0ZXJu
JiBtX3BhdHRlcm47CiAgICAgUGF0dGVybkFsdGVybmF0aXZlKiBtX2FsdGVybmF0aXZlOwogICAg
IENoYXJhY3RlckNsYXNzQ29uc3RydWN0b3IgbV9jaGFyYWN0ZXJDbGFzc0NvbnN0cnVjdG9yOwog
ICAgIFZlY3RvcjxTdHJpbmc+IG1fdW5tYXRjaGVkTmFtZWRGb3J3YXJkUmVmZXJlbmNlczsKLSAg
ICB2b2lkKiBtX3N0YWNrTGltaXQ7CisgICAgU3RhY2tDaGVjayBtX3N0YWNrQ2hlY2s7CiAgICAg
RXJyb3JDb2RlIG1fZXJyb3IgeyBFcnJvckNvZGU6Ok5vRXJyb3IgfTsKICAgICBib29sIG1faW52
ZXJ0Q2hhcmFjdGVyQ2xhc3M7CiAgICAgYm9vbCBtX2ludmVydFBhcmVudGhldGljYWxBc3NlcnRp
b24geyBmYWxzZSB9OwogfTsKIAotRXJyb3JDb2RlIFlhcnJQYXR0ZXJuOjpjb21waWxlKGNvbnN0
IFN0cmluZyYgcGF0dGVyblN0cmluZywgdm9pZCogc3RhY2tMaW1pdCkKK0Vycm9yQ29kZSBZYXJy
UGF0dGVybjo6Y29tcGlsZShjb25zdCBTdHJpbmcmIHBhdHRlcm5TdHJpbmcpCiB7Ci0gICAgWWFy
clBhdHRlcm5Db25zdHJ1Y3RvciBjb25zdHJ1Y3RvcigqdGhpcywgc3RhY2tMaW1pdCk7CisgICAg
WWFyclBhdHRlcm5Db25zdHJ1Y3RvciBjb25zdHJ1Y3RvcigqdGhpcyk7CiAKICAgICB7CiAgICAg
ICAgIEVycm9yQ29kZSBlcnJvciA9IHBhcnNlKGNvbnN0cnVjdG9yLCBwYXR0ZXJuU3RyaW5nLCB1
bmljb2RlKCkpOwpAQCAtMTE4Myw3ICsxMTc1LDcgQEAgRXJyb3JDb2RlIFlhcnJQYXR0ZXJuOjpj
b21waWxlKGNvbnN0IFN0cgogICAgIHJldHVybiBFcnJvckNvZGU6Ok5vRXJyb3I7CiB9CiAKLVlh
cnJQYXR0ZXJuOjpZYXJyUGF0dGVybihjb25zdCBTdHJpbmcmIHBhdHRlcm4sIE9wdGlvblNldDxG
bGFncz4gZmxhZ3MsIEVycm9yQ29kZSYgZXJyb3IsIHZvaWQqIHN0YWNrTGltaXQpCitZYXJyUGF0
dGVybjo6WWFyclBhdHRlcm4oY29uc3QgU3RyaW5nJiBwYXR0ZXJuLCBPcHRpb25TZXQ8RmxhZ3M+
IGZsYWdzLCBFcnJvckNvZGUmIGVycm9yKQogICAgIDogbV9jb250YWluc0JhY2tyZWZlcmVuY2Vz
KGZhbHNlKQogICAgICwgbV9jb250YWluc0JPTChmYWxzZSkKICAgICAsIG1fY29udGFpbnNVbnNp
Z25lZExlbmd0aFBhdHRlcm4oZmFsc2UpCkBAIC0xMTkyLDcgKzExODQsNyBAQCBZYXJyUGF0dGVy
bjo6WWFyclBhdHRlcm4oY29uc3QgU3RyaW5nJiBwCiAgICAgLCBtX2ZsYWdzKGZsYWdzKQogewog
ICAgIEFTU0VSVChtX2ZsYWdzICE9IEZsYWdzOjpEZWxldGVkVmFsdWUpOwotICAgIGVycm9yID0g
Y29tcGlsZShwYXR0ZXJuLCBzdGFja0xpbWl0KTsKKyAgICBlcnJvciA9IGNvbXBpbGUocGF0dGVy
bik7CiB9CiAKIHZvaWQgaW5kZW50Rm9yTmVzdGluZ0xldmVsKFByaW50U3RyZWFtJiBvdXQsIHVu
c2lnbmVkIG5lc3RpbmdEZXB0aCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lh
cnJQYXR0ZXJuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFy
clBhdHRlcm4uaAkocmV2aXNpb24gMjU4ODY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3lh
cnIvWWFyclBhdHRlcm4uaAkod29ya2luZyBjb3B5KQpAQCAtMzg2LDcgKzM4Niw3IEBAIHN0cnVj
dCBUZXJtQ2hhaW4gewogCiAKIHN0cnVjdCBZYXJyUGF0dGVybiB7Ci0gICAgSlNfRVhQT1JUX1BS
SVZBVEUgWWFyclBhdHRlcm4oY29uc3QgU3RyaW5nJiBwYXR0ZXJuLCBPcHRpb25TZXQ8RmxhZ3M+
LCBFcnJvckNvZGUmLCB2b2lkKiBzdGFja0xpbWl0ID0gbnVsbHB0cik7CisgICAgSlNfRVhQT1JU
X1BSSVZBVEUgWWFyclBhdHRlcm4oY29uc3QgU3RyaW5nJiBwYXR0ZXJuLCBPcHRpb25TZXQ8Rmxh
Z3M+LCBFcnJvckNvZGUmKTsKIAogICAgIHZvaWQgcmVzZXRGb3JSZXBhcnNpbmcoKQogICAgIHsK
QEAgLTU2NSw3ICs1NjUsNyBAQCBzdHJ1Y3QgWWFyclBhdHRlcm4gewogICAgIEhhc2hNYXA8U3Ry
aW5nLCB1bnNpZ25lZD4gbV9uYW1lZEdyb3VwVG9QYXJlbkluZGV4OwogCiBwcml2YXRlOgotICAg
IEVycm9yQ29kZSBjb21waWxlKGNvbnN0IFN0cmluZyYgcGF0dGVyblN0cmluZywgdm9pZCogc3Rh
Y2tMaW1pdCk7CisgICAgRXJyb3JDb2RlIGNvbXBpbGUoY29uc3QgU3RyaW5nJiBwYXR0ZXJuU3Ry
aW5nKTsKIAogICAgIENoYXJhY3RlckNsYXNzKiBhbnljaGFyQ2FjaGVkIHsgbnVsbHB0ciB9Owog
ICAgIENoYXJhY3RlckNsYXNzKiBuZXdsaW5lQ2FjaGVkIHsgbnVsbHB0ciB9OwpJbmRleDogTGF5
b3V0VGVzdHMvanMvc2NyaXB0LXRlc3RzL3N0YWNrLW92ZXJmbG93LXJlZ2V4cC5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvc3RhY2stb3ZlcmZsb3ctcmVnZXhw
LmpzCShyZXZpc2lvbiAyNTg4NjUpCisrKyBMYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvc3Rh
Y2stb3ZlcmZsb3ctcmVnZXhwLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MDc1NQotLy9AIHNraXAg
aWYgJGFyY2hpdGVjdHVyZSA9PSAiYXJtIiBhbmQgJGhvc3RPUyA9PSAibGludXgiCisvL0Agc2tp
cAogZGVzY3JpcHRpb24oJ1Rlc3QgdGhhdCB3ZSBkbyBub3Qgb3ZlcmZsb3cgdGhlIHN0YWNrIHdo
aWxlIGhhbmRsaW5nIHJlZ3VsYXIgZXhwcmVzc2lvbnMnKTsKIAogLy8gQmFzZSBjYXNlLgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>394508</attachid>
            <date>2020-03-25 09:47:39 -0700</date>
            <delta_ts>2020-03-26 12:24:09 -0700</delta_ts>
            <desc>Patch for Landing</desc>
            <filename>209435.patch</filename>
            <type>text/plain</type>
            <size>42508</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNTg5ODcpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE4IEBACisyMDIwLTAzLTI1ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBw
bGUuY29tPgorCisgICAgICAgIFJlZmFjdG9yIFlBUlIgU3RhY2sgT3ZlcmZsb3cgQ2hlY2tzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDk0MzUKKyAg
ICAgICAgcmRhcjovL3Byb2JsZW0vNTg5ODgyNTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworCUFkZGVkIGEgbmV3IHRlc3QgYW5kIHJlbW92ZWQgYSBub3cgb2Jzb2xl
dGUgdGVzdC4KKworICAgICAgICAqIHN0cmVzcy9yZWdleHAtY29tcGlsZS1vb20uanM6IFJlbW92
ZWQuCisgICAgICAgICogc3RyZXNzL3JlZ2V4cC1odWdlLW9vbS5qczogQWRkZWQuCisgICAgICAg
IChzaG91bGRCZSk6CisgICAgICAgIChzaG91bGRUaHJvdyk6CisKIDIwMjAtMDMtMjUgIEFsZXhl
eSBTaHZheWthICA8c2h2YWlrYWxlc2hAZ21haWwuY29tPgogCiAgICAgICAgIFxiIGVzY2FwZXMg
aW5zaWRlIGNoYXJhY3RlciBjbGFzc2VzIHNob3VsZCBiZSB2YWxpZCBpbiBVbmljb2RlIHBhdHRl
cm5zCkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9yZWdleHAtY29tcGlsZS1vb20uanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSlNUZXN0cy9zdHJlc3MvcmVnZXhwLWNvbXBpbGUtb29tLmpzCShyZXZpc2lvbiAyNTg5
ODcpCisrKyBKU1Rlc3RzL3N0cmVzcy9yZWdleHAtY29tcGlsZS1vb20uanMJKG5vbmV4aXN0ZW50
KQpAQCAtMSw5OSArMCwwIEBACi0vL0Agc2tpcCBpZiAkaG9zdE9TICE9ICJkYXJ3aW4iIG9yICRh
cmNoaXRlY3R1cmUgPT0gImFybSIgb3IgJGFyY2hpdGVjdHVyZSA9PSAieDg2IiBvciBub3QgJGpp
dFRlc3RzCi0vLyBUZXN0IHRoYXQgdGhyb3cgYW4gT09NIGV4Y2VwdGlvbiB3aGVuIGNvbXBpbGlu
ZyBhIHBhdGhvbG9naWNhbCwgYnV0IHZhbGlkIG5lc3RlZCBSZWdFeHAuCi0KLXZhciBmYWlsdXJl
cyA9IFtdOwotCi1jbGFzcyBUZXN0QW5kRXhwZWN0ZWRFeGNlcHRpb24KLXsKLSAgICBjb25zdHJ1
Y3RvcihmdW5jLCBleGNlcHRpb24pCi0gICAgewotICAgICAgICB0aGlzLmZ1bmMgPSBmdW5jOwot
ICAgICAgICB0aGlzLmV4Y2VwdGlvbiA9IGV4Y2VwdGlvbjsKLSAgICB9Ci0KLSAgICBydW5UZXN0
KCkKLSAgICB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICB0aGlzLmZ1bmMoKTsKLSAgICAg
ICAgICAgIGZhaWx1cmVzLnB1c2goIlJ1bm5pbmcgIiArIHRoaXMuZnVuYyArICIsIGV4cGVjdGVk
IE9PTSBleGNlcHRpb24sIGJ1dCBkaWRuJ3QgZ2V0IG9uZSIpOwotICAgICAgICB9IGNhdGNoIChl
KSB7Ci0gICAgICAgICAgICBsZXQgZXJyU3RyID0gZS50b1N0cmluZygpOwotICAgICAgICAgICAg
aWYgKGVyclN0ciAhPSB0aGlzLmV4Y2VwdGlvbikKLSAgICAgICAgICAgICAgICBmYWlsdXJlcy5w
dXNoKCJSdW5uaW5nICIgKyB0aGlzLmZ1bmMgKyAiLCBleHBlY3RlZDogXCIiICsgdGhpcy5leGNl
cHRpb24gKyAiXCIgYnV0IGdvdCBcIiIgKyBlcnJTdHIgKyAiXCIiKTsKLSAgICAgICAgfSAgICAg
ICAKLSAgICB9Ci19Ci0KLWZ1bmN0aW9uIHJlY3Vyc2VBbmRUZXN0KGRlcHRoLCB0ZXN0TGlzdCkK
LXsKLSAgICAvLyBQcm9iZSBzdGFjayBkZXB0aAotICAgIHRyeSB7Ci0gICAgICAgIGxldCByZXN1
bHQgPSByZWN1cnNlQW5kVGVzdChkZXB0aCArIDEsIHRlc3RMaXN0KTsKLSAgICAgICAgaWYgKHJl
c3VsdCA9PSAwKSB7Ci0gICAgICAgICAgICAvLyBDYWxsIHRoZSB0ZXN0IGZ1bmN0aW9ucyB3aXRo
IGEgbmVhcmx5IGZ1bGwgc3RhY2suCi0gICAgICAgICAgICBmb3IgKGNvbnN0IHRlc3Qgb2YgdGVz
dExpc3QpCi0gICAgICAgICAgICAgICAgdGVzdC5ydW5UZXN0KCk7Ci0KLSAgICAgICAgICAgIHJl
dHVybiAxOwotICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdCA8IDApCi0gICAgICAgICAgICByZXR1
cm4gcmVzdWx0ICsgMTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
LSAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgIC8vIEdvIHVwIGEgc2V2ZXJhbCBmcmFtZXMgYW5k
IHRoZW4gY2FsbCB0aGUgdGVzdCBmdW5jdGlvbnMKLSAgICAgICAgcmV0dXJuIC0yNDsKLSAgICB9
Ci0KLSAgICByZXR1cm4gMTsKLX0KLQotbGV0IGRlZXBSRSA9IG5ldyBSZWdFeHAoIigoKCgoKCgo
KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo
KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo
KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo
KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo
KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo
KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo
KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCh4KSkpKSkp
KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp
KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp
KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp
KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp
KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp
KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkp
KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSIpOwot
bGV0IGRlZXBHbG9iYWxSRSA9IG5ldyBSZWdFeHAoZGVlcFJFLCAiZyIpOwotCi1sZXQgbWF0Y2hM
ZW4gPSA0MDE7IC8vIFRoZSBudW1iZXIgb2YgcGFyZW5zIHBsdXMgMSBmb3IgdGhlIHdob2xlIG1h
dGNoLgotCi1sZXQgcmVnRXhwT09NRXJyb3IgPSAiRXJyb3I6IE91dCBvZiBtZW1vcnk6IEludmFs
aWQgcmVndWxhciBleHByZXNzaW9uOiB0b28gbWFueSBuZXN0ZWQgZGlzanVuY3Rpb25zIjsKLQot
dGVzdExpc3QgPSBbXTsKLQotLy8gVGVzdCB0aGF0IGFsbCBSZWdFeHAgcmVsYXRlZCBBUElzIHRo
YXQgY29tcGlsZSBSRSdzIHByb3Blcmx5IGhhbmRsZSBPT00uCi10ZXN0TGlzdC5wdXNoKG5ldyBU
ZXN0QW5kRXhwZWN0ZWRFeGNlcHRpb24oKCkgPT4geyBkZWVwUkUuZXhlYygieCIpOyB9LCByZWdF
eHBPT01FcnJvcikpOwotdGVzdExpc3QucHVzaChuZXcgVGVzdEFuZEV4cGVjdGVkRXhjZXB0aW9u
KCgpID0+IHsgZGVlcFJFLnRlc3QoIngiKTsgfSwgcmVnRXhwT09NRXJyb3IpKTsKLXRlc3RMaXN0
LnB1c2gobmV3IFRlc3RBbmRFeHBlY3RlZEV4Y2VwdGlvbigoKSA9PiB7ICJ4Ii5tYXRjaChkZWVw
UkUpOyB9LCByZWdFeHBPT01FcnJvcikpOwotdGVzdExpc3QucHVzaChuZXcgVGVzdEFuZEV4cGVj
dGVkRXhjZXB0aW9uKCgpID0+IHsgIngiLm1hdGNoKGRlZXBHbG9iYWxSRSk7IH0sIHJlZ0V4cE9P
TUVycm9yKSk7Ci10ZXN0TGlzdC5wdXNoKG5ldyBUZXN0QW5kRXhwZWN0ZWRFeGNlcHRpb24oKCkg
PT4geyAieCIucmVwbGFjZShkZWVwR2xvYmFsUkUsICIiKTsgfSwgcmVnRXhwT09NRXJyb3IpKTsK
LXRlc3RMaXN0LnB1c2gobmV3IFRlc3RBbmRFeHBlY3RlZEV4Y2VwdGlvbigoKSA9PiB7ICJ4Ii5y
ZXBsYWNlKGRlZXBHbG9iYWxSRSwgIlgiKTsgfSwgcmVnRXhwT09NRXJyb3IpKTsKLXRlc3RMaXN0
LnB1c2gobmV3IFRlc3RBbmRFeHBlY3RlZEV4Y2VwdGlvbigoKSA9PiB7ICJ4Ii5yZXBsYWNlKGRl
ZXBHbG9iYWxSRSwgKCkgPT4geyByZXR1cm4gIlgiIH0pOyB9LCByZWdFeHBPT01FcnJvcikpOwot
dGVzdExpc3QucHVzaChuZXcgVGVzdEFuZEV4cGVjdGVkRXhjZXB0aW9uKCgpID0+IHsgIngiLnNl
YXJjaChkZWVwUkUpOyB9LCByZWdFeHBPT01FcnJvcikpOwotCi1yZWN1cnNlQW5kVGVzdCgxLCB0
ZXN0TGlzdCk7Ci0KLWlmIChmYWlsdXJlcy5sZW5ndGgpIHsKLSAgICBwcmludCgiR290IHRoZSBm
b2xsb3dpbmcgZmFpbHVyZXM6Iik7Ci0gICAgZm9yIChjb25zdCBmYWlsdXJlIG9mIGZhaWx1cmVz
KQotICAgICAgICBwcmludChmYWlsdXJlKTsKLSAgICB0aHJvdyAiR290IGZhaWx1cmVzIjsKLX0K
LQotLy8gVGVzdCB0aGF0IHRoZSBSZWdFeHAgd29ya3MgY29ycmVjdGx5IHdpdGggUmVnRXhwLmV4
ZWMoKSBhbmQgUmVnRXhwLnRlc3QoKSB3aGVuIHRoZXJlIGlzIHN1ZmZpY2llbnQgc3RhY2sgc3Bh
Y2UgdG8gY29tcGlsZSBpdC4KLWxldCBtID0gZGVlcFJFLmV4ZWMoIngiKTsKLWxldCBtYXRjaGVk
ID0gdHJ1ZTsKLWlmIChtLmxlbmd0aCAhPSBtYXRjaExlbikKLSAgICBtYXRjaGVkID0gZmFsc2UK
LWVsc2UgewotICAgIGZvciAoaSA9IDA7IGkgPCBtYXRjaExlbjsgaSsrKSB7Ci0gICAgICAgIGlm
IChtW2ldICE9ICJ4IikKLSAgICAgICAgICAgIG1hdGNoZWQgPSBmYWxzZTsKLSAgICB9Ci19Ci0K
LWlmICghbWF0Y2hlZCkgewotICAgIGxldCBleHBlY3RlZE1hdGNoID0gW107Ci0gICAgZm9yIChp
ID0gMDsgaSA8IG1hdGNoTGVuOyBpKyspCi0gICAgICAgIGV4cGVjdGVkTWF0Y2hbaV0gPSAieCI7
Ci0KLSAgICB0aHJvdyAiRXhwZWN0ZWQgUmVnRXhwLmV4ZWMoLi4uKSB0byBiZSBbIiArIGV4cGVj
dGVkTWF0Y2ggKyAiXSBidXQgZ290IFsiICsgbSArICJdIjsKLX0KLQotaWYgKCFkZWVwUkUudGVz
dCgieCIpKQotICAgIHRocm93ICJFeHBlY3RlZCBSZWdFeHAudGVzdCguLi4pIHRvIGJlIHRydWUs
IGJ1dCB3YXMgZmFsc2UiOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvcmVnZXhwLWh1Z2Utb29tLmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL3JlZ2V4cC1odWdlLW9vbS5qcwkobm9uZXhp
c3RlbnQpCisrKyBKU1Rlc3RzL3N0cmVzcy9yZWdleHAtaHVnZS1vb20uanMJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwzMiBAQAorLy8gVGVzdCB0aGF0IHRocm93IGFuIE9PTSBleGNlcHRpb24g
d2hlbiBjb21waWxpbmcgLyBleGVjdXRpbmcgYSBwYXRob2xvZ2ljYWxseSBsYXJnZSBSZWdFeHAn
cworCitmdW5jdGlvbiBzaG91bGRCZShhY3R1YWwsIGV4cGVjdGVkKQoreworICAgIGlmIChhY3R1
YWwgIT09IGV4cGVjdGVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCB2YWx1ZTogLCBl
eHBlY3RlZCBcIiIgKyBleHBlY3RlZCArICJcIiwgYnV0IGdvdCBcIiIgKyBhY3R1YWwgKyAiXCIi
KTsKK30KKworZnVuY3Rpb24gc2hvdWxkVGhyb3cocnVuLCBlcnJvclR5cGUpCit7CisgICAgbGV0
IGFjdHVhbDsKKyAgICB2YXIgaGFkRXJyb3IgPSBmYWxzZTsKKworICAgIHRyeSB7CisgICAgICAg
IGFjdHVhbCA9IHJ1bigpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgaGFkRXJyb3IgPSB0
cnVlOworICAgICAgICBhY3R1YWwgPSBlOworICAgIH0KKworICAgIGlmICghaGFkRXJyb3IpCisg
ICAgICAgIHRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgIiArIHJ1biArICIoKSB0byB0aHJvdyAi
ICsgZXJyb3JUeXBlLm5hbWUgKyAiLCBidXQgZGlkIG5vdCB0aHJvdy4iKTsKKyAgICBpZiAoIShh
Y3R1YWwgaW5zdGFuY2VvZiBlcnJvclR5cGUpKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkV4
cGVjZWQgIiArIHJ1biArICIoKSB0byB0aHJvdyAiICsgZXJyb3JUeXBlLm5hbWUgKyAiICwgYnV0
IHRocmV3ICciICsgYWN0dWFsICsgIiciKTsKK30KKworLy8gVGhpcyBzaG91bGQgdGhyb3cgZHVy
aW5nIHBhdHRlcm4gY29tcGlsYXRpb24uCitzaG91bGRUaHJvdygoKSA9PiBSZWdFeHAoJ2E/Jy5y
ZXBlYXQoMioqMTkpICsgJ2InKS5leGVjKCd4JyksIFN5bnRheEVycm9yKTsKKworLy8gVGhpcyB0
ZXN0IHNob3VsZCBmYWlsIGV4ZWN1dGlvbiBpbiB0aGUgSklUJ2VkIGNvZGUgYW5kIHRoZW4gZmFs
bCBiYWNrIHRvIHRoZSBpbnRlcnByZXRlciBhbnMgc3VjY2VlZC4KK3Nob3VsZEJlKFJlZ0V4cCgn
YT8nLnJlcGVhdCgyKioxOSkpLmV4ZWMoJ3gnKVswXSwgIiIpOworCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1ODk4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw1OSBAQAorMjAyMC0wMy0yNSAgTWlj
aGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KKworICAgICAgICBSZWZhY3RvciBZQVJS
IFN0YWNrIE92ZXJmbG93IENoZWNrcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjA5NDM1CisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzU4OTg4MjUyCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVmYWN0b3Jl
ZCBzdGFjayBjaGVja3MgaW4gWUFSUiBjb2RlIGluY2x1ZGluZyBhZGRpbmcgYSBzdGFjayBjaGVj
ayB0byB0aGUgWUFSUiBKSVQnZWQgY29kZS4KKyAgICAgICAgVGhlIEMrKyBjb2RlIGluY2x1ZGlu
ZyB0aGUgcGFyc2VyLCBieXRlIGNvZGUgY29tcGlsZXIgYW5kIGludGVycHJldGVyIG5vdyBhbGwg
dXNlIFN0YWNrQ2hlY2suCisgICAgICAgIFRoZSBKSVQnZWQgY29kZSBuZWVkcyBhIHN0YWNrIGxp
bWl0IHBhc3NlZCB2aWEgYSBwYXJhbWV0ZXIgc2luY2UgdGhlIEpJVCdlZCBjb2RlIGNhbiBiZSAK
KyAgICAgICAgY2FsbGVkIGZyb20gdGhlIGNvbXBpbGVyIHRocmVhZCB3aGVuIGNvbXBpbGluZyBE
RkcgLyBGVEwgY29kZS4KKworICAgICAgICBJbnN0ZWFkIG9mIGFkZGluZyBhIG5ldyBwYXJhbWV0
ZXIsIGNvbnNvbGlkYXRlZCB0aGUgdHdvIHBhdHRlcm4gY29udGV4dCBidWZmZXIgdmFsdWVzLCBi
dWZmZXIKKyAgICAgICAgcG9pbnRlciBhbmQgc2l6ZSwgd2l0aCB0aGUgbmV3IHN0YWNrIGxpbWl0
IGludG8gYSBuZXcgTWF0Y2hpbmdDb250ZXh0SG9sZGVyLCBhbiBSQUlJIG9iamVjdC4KKyAgICAg
ICAgVGhlIE1hdGNoaW5nQ29udGV4dEhvbGRlciBjb25zdHJ1Y3RvciB1c2VzIGVpdGhlciB0aGUg
Vk0gc3RhY2sgbGltaXQgb3IgdGhlIGN1cnJlbnQgdGhyZWFkJ3MKKyAgICAgICAgc3RhY2sgbGlt
aXQgZGVwZW5kaW5nIG9uIGhvdyBpdCBpcyBjYWxsZWQuCisKKyAgICAgICAgKiBydW50aW1lL1Jl
Z0V4cC5jcHA6CisgICAgICAgIChKU0M6OlJlZ0V4cDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAg
ICAoSlNDOjpSZWdFeHA6OmJ5dGVDb2RlQ29tcGlsZUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKEpT
Qzo6UmVnRXhwOjpjb21waWxlKToKKyAgICAgICAgKEpTQzo6UmVnRXhwOjptYXRjaENvbmN1cnJl
bnRseSk6CisgICAgICAgIChKU0M6OlJlZ0V4cDo6Y29tcGlsZU1hdGNoT25seSk6CisgICAgICAg
ICogcnVudGltZS9SZWdFeHAuaDoKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cElubGluZXMuaDoK
KyAgICAgICAgKEpTQzo6UmVnRXhwOjptYXRjaElubGluZSk6CisgICAgICAgIChKU0M6OlBhdHRl
cm5Db250ZXh0QnVmZmVySG9sZGVyOjpQYXR0ZXJuQ29udGV4dEJ1ZmZlckhvbGRlcik6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OlBhdHRlcm5Db250ZXh0QnVmZmVySG9sZGVyOjp+UGF0dGVybkNv
bnRleHRCdWZmZXJIb2xkZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpQYXR0ZXJuQ29udGV4
dEJ1ZmZlckhvbGRlcjo6YnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6UGF0dGVybkNv
bnRleHRCdWZmZXJIb2xkZXI6OnNpemUpOiBEZWxldGVkLgorICAgICAgICAoKTogRGVsZXRlZC4K
KyAgICAgICAgKiB5YXJyL1lhcnIuaDoKKyAgICAgICAgKiB5YXJyL1lhcnJJbnRlcnByZXRlci5j
cHA6CisgICAgICAgIChKU0M6OllhcnI6OkludGVycHJldGVyOjptYXRjaERpc2p1bmN0aW9uKToK
KyAgICAgICAgKEpTQzo6WWFycjo6SW50ZXJwcmV0ZXI6OmlzU2FmZVRvUmVjdXJzZSk6CisgICAg
ICAgICogeWFyci9ZYXJySklULmNwcDoKKyAgICAgICAgKEpTQzo6WWFycjo6TWF0Y2hpbmdDb250
ZXh0SG9sZGVyOjpNYXRjaGluZ0NvbnRleHRIb2xkZXIpOgorICAgICAgICAoSlNDOjpZYXJyOjpN
YXRjaGluZ0NvbnRleHRIb2xkZXI6On5NYXRjaGluZ0NvbnRleHRIb2xkZXIpOgorICAgICAgICAo
SlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjppbml0UGFyZW5Db250ZXh0RnJlZUxpc3QpOgorICAg
ICAgICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjphbGlnbkNhbGxGcmFtZVNpemVJbkJ5dGVz
KToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckdlbmVyYXRvcjo6Y29tcGlsZSk6CisgICAgICAg
IChKU0M6OllhcnI6OllhcnJHZW5lcmF0b3I6OmluaXRDYWxsRnJhbWUpOiBEZWxldGVkLgorICAg
ICAgICAqIHlhcnIvWWFyckpJVC5oOgorICAgICAgICAoSlNDOjpZYXJyOjpNYXRjaGluZ0NvbnRl
eHRIb2xkZXI6Om9mZnNldE9mU3RhY2tMaW1pdCk6CisgICAgICAgIChKU0M6OllhcnI6Ok1hdGNo
aW5nQ29udGV4dEhvbGRlcjo6b2Zmc2V0T2ZQYXR0ZXJuQ29udGV4dEJ1ZmZlcik6CisgICAgICAg
IChKU0M6OllhcnI6Ok1hdGNoaW5nQ29udGV4dEhvbGRlcjo6b2Zmc2V0T2ZQYXR0ZXJuQ29udGV4
dEJ1ZmZlclNpemUpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyQ29kZUJsb2NrOjpleGVjdXRl
KToKKyAgICAgICAgKiB5YXJyL1lhcnJQYXR0ZXJuLmNwcDoKKyAgICAgICAgKEpTQzo6WWFycjo6
WWFyclBhdHRlcm5Db25zdHJ1Y3Rvcjo6WWFyclBhdHRlcm5Db25zdHJ1Y3Rvcik6CisgICAgICAg
IChKU0M6OllhcnI6OllhcnJQYXR0ZXJuQ29uc3RydWN0b3I6OmlzU2FmZVRvUmVjdXJzZSk6Cisg
ICAgICAgIChKU0M6OllhcnI6OllhcnJQYXR0ZXJuOjpjb21waWxlKToKKyAgICAgICAgKEpTQzo6
WWFycjo6WWFyclBhdHRlcm46OllhcnJQYXR0ZXJuKToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFy
clBhdHRlcm5Db25zdHJ1Y3Rvcjo6aXNTYWZlVG9SZWN1cnNlIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKiB5YXJyL1lhcnJQYXR0ZXJuLmg6CisKIDIwMjAtMDMtMjUgIEFsZXhleSBTaHZheWth
ICA8c2h2YWlrYWxlc2hAZ21haWwuY29tPgogCiAgICAgICAgIFxiIGVzY2FwZXMgaW5zaWRlIGNo
YXJhY3RlciBjbGFzc2VzIHNob3VsZCBiZSB2YWxpZCBpbiBVbmljb2RlIHBhdHRlcm5zCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5jcHAJKHJldmlzaW9uIDI1ODk4
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE3MCw3ICsxNzAsNyBAQCBSZWdFeHA6OlJlZ0V4cChWTSYgdm0sIGNvbnN0IFN0
cmluZyYgcGF0CiB2b2lkIFJlZ0V4cDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogewogICAgIEJh
c2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICBZYXJyOjpZYXJyUGF0dGVybiBwYXR0ZXJuKG1f
cGF0dGVyblN0cmluZywgbV9mbGFncywgbV9jb25zdHJ1Y3Rpb25FcnJvckNvZGUsIHZtLnN0YWNr
TGltaXQoKSk7CisgICAgWWFycjo6WWFyclBhdHRlcm4gcGF0dGVybihtX3BhdHRlcm5TdHJpbmcs
IG1fZmxhZ3MsIG1fY29uc3RydWN0aW9uRXJyb3JDb2RlKTsKICAgICBpZiAoIWlzVmFsaWQoKSkg
ewogICAgICAgICBtX3N0YXRlID0gUGFyc2VFcnJvcjsKICAgICAgICAgcmV0dXJuOwpAQCAtMjI3
LDEzICsyMjcsMTAgQEAgdm9pZCBSZWdFeHA6OmJ5dGVDb2RlQ29tcGlsZUlmTmVjZXNzYXJ5KAog
ICAgIGlmIChtX3JlZ0V4cEJ5dGVjb2RlKQogICAgICAgICByZXR1cm47CiAKLSAgICBZYXJyOjpZ
YXJyUGF0dGVybiBwYXR0ZXJuKG1fcGF0dGVyblN0cmluZywgbV9mbGFncywgbV9jb25zdHJ1Y3Rp
b25FcnJvckNvZGUsIHZtLT5zdGFja0xpbWl0KCkpOworICAgIFlhcnI6OllhcnJQYXR0ZXJuIHBh
dHRlcm4obV9wYXR0ZXJuU3RyaW5nLCBtX2ZsYWdzLCBtX2NvbnN0cnVjdGlvbkVycm9yQ29kZSk7
CiAgICAgaWYgKGhhc0Vycm9yKG1fY29uc3RydWN0aW9uRXJyb3JDb2RlKSkgewotICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2lmIENPTVBJTEVSX1FVSVJLKENPTlNJREVS
U19VTlJFQUNIQUJMRV9DT0RFKQogICAgICAgICBtX3N0YXRlID0gUGFyc2VFcnJvcjsKICAgICAg
ICAgcmV0dXJuOwotI2VuZGlmCiAgICAgfQogICAgIEFTU0VSVChtX251bVN1YnBhdHRlcm5zID09
IHBhdHRlcm4ubV9udW1TdWJwYXR0ZXJucyk7CiAKQEAgLTI0OCw3ICsyNDUsNyBAQCB2b2lkIFJl
Z0V4cDo6Y29tcGlsZShWTSogdm0sIFlhcnI6OllhcnJDCiB7CiAgICAgYXV0byBsb2NrZXIgPSBo
b2xkTG9jayhjZWxsTG9jaygpKTsKICAgICAKLSAgICBZYXJyOjpZYXJyUGF0dGVybiBwYXR0ZXJu
KG1fcGF0dGVyblN0cmluZywgbV9mbGFncywgbV9jb25zdHJ1Y3Rpb25FcnJvckNvZGUsIHZtLT5z
dGFja0xpbWl0KCkpOworICAgIFlhcnI6OllhcnJQYXR0ZXJuIHBhdHRlcm4obV9wYXR0ZXJuU3Ry
aW5nLCBtX2ZsYWdzLCBtX2NvbnN0cnVjdGlvbkVycm9yQ29kZSk7CiAgICAgaWYgKGhhc0Vycm9y
KG1fY29uc3RydWN0aW9uRXJyb3JDb2RlKSkgewogICAgICAgICBtX3N0YXRlID0gUGFyc2VFcnJv
cjsKICAgICAgICAgcmV0dXJuOwpAQCAtMzAyLDcgKzI5OSw5IEBAIGJvb2wgUmVnRXhwOjptYXRj
aENvbmN1cnJlbnRseSgKICAgICBpZiAoIWhhc0NvZGVGb3Iocy5pczhCaXQoKSA/IFlhcnI6OkNo
YXI4IDogWWFycjo6Q2hhcjE2KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcG9zaXRp
b24gPSBtYXRjaCh2bSwgcywgc3RhcnRPZmZzZXQsIG92ZWN0b3IpOworICAgIHBvc2l0aW9uID0g
bWF0Y2hJbmxpbmU8VmVjdG9yPGludD4mLCBZYXJyOjpNYXRjaEZyb206OkNvbXBpbGVyVGhyZWFk
Pih2bSwgcywgc3RhcnRPZmZzZXQsIG92ZWN0b3IpOworICAgIGlmIChtX3N0YXRlID09IFBhcnNl
RXJyb3IpCisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAt
MzEwLDcgKzMwOSw3IEBAIHZvaWQgUmVnRXhwOjpjb21waWxlTWF0Y2hPbmx5KFZNKiB2bSwgWWEK
IHsKICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGNlbGxMb2NrKCkpOwogICAgIAotICAgIFlh
cnI6OllhcnJQYXR0ZXJuIHBhdHRlcm4obV9wYXR0ZXJuU3RyaW5nLCBtX2ZsYWdzLCBtX2NvbnN0
cnVjdGlvbkVycm9yQ29kZSwgdm0tPnN0YWNrTGltaXQoKSk7CisgICAgWWFycjo6WWFyclBhdHRl
cm4gcGF0dGVybihtX3BhdHRlcm5TdHJpbmcsIG1fZmxhZ3MsIG1fY29uc3RydWN0aW9uRXJyb3JD
b2RlKTsKICAgICBpZiAoaGFzRXJyb3IobV9jb25zdHJ1Y3Rpb25FcnJvckNvZGUpKSB7CiAgICAg
ICAgIG1fc3RhdGUgPSBQYXJzZUVycm9yOwogICAgICAgICByZXR1cm47CkBAIC0zNjMsNyArMzYy
LDcgQEAgYm9vbCBSZWdFeHA6Om1hdGNoQ29uY3VycmVudGx5KFZNJiB2bSwgYwogICAgIGlmICgh
aGFzTWF0Y2hPbmx5Q29kZUZvcihzLmlzOEJpdCgpID8gWWFycjo6Q2hhcjggOiBZYXJyOjpDaGFy
MTYpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXN1bHQgPSBtYXRjaCh2bSwgcywg
c3RhcnRPZmZzZXQpOworICAgIHJlc3VsdCA9IG1hdGNoSW5saW5lPFlhcnI6Ok1hdGNoRnJvbTo6
Q29tcGlsZXJUaHJlYWQ+KHZtLCBzLCBzdGFydE9mZnNldCk7CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5oCShyZXZpc2lvbiAy
NTg5ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAuaAkod29ya2lu
ZyBjb3B5KQpAQCAtODYsOCArODYsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBtYXRjaENvbmN1cnJl
bnRseShWTSYsIGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCBNYXRjaFJlc3Vs
dCYpOwogCiAgICAgLy8gQ2FsbCB0aGVzZSB2ZXJzaW9ucyBvZiB0aGUgbWF0Y2ggZnVuY3Rpb25z
IGlmIHlvdSdyZSBkZXNwZXJhdGUgZm9yIHBlcmZvcm1hbmNlLgotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFZlY3RvclR5cGU+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmVjdG9yVHlwZSwgWWFycjo6
TWF0Y2hGcm9tIHRocmVhZCA9IFlhcnI6Ok1hdGNoRnJvbTo6Vk1UaHJlYWQ+CiAgICAgaW50IG1h
dGNoSW5saW5lKFZNJiwgY29uc3QgU3RyaW5nJiwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIFZlY3Rv
clR5cGUmIG92ZWN0b3IpOworICAgIHRlbXBsYXRlPFlhcnI6Ok1hdGNoRnJvbSB0aHJlYWQgPSBZ
YXJyOjpNYXRjaEZyb206OlZNVGhyZWFkPgogICAgIE1hdGNoUmVzdWx0IG1hdGNoSW5saW5lKFZN
JiwgY29uc3QgU3RyaW5nJiwgdW5zaWduZWQgc3RhcnRPZmZzZXQpOwogICAgIAogICAgIHVuc2ln
bmVkIG51bVN1YnBhdHRlcm5zKCkgY29uc3QgeyByZXR1cm4gbV9udW1TdWJwYXR0ZXJuczsgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwSW5saW5lcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cElubGluZXMuaAko
cmV2aXNpb24gMjU4OTg3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC04NiwzOCArODYsNiBAQCBBTFdBWVNfSU5MSU5F
IGJvb2wgUmVnRXhwOjpoYXNDb2RlRm9yKFlhCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1jbGFz
cyBQYXR0ZXJuQ29udGV4dEJ1ZmZlckhvbGRlciB7Ci0gICAgV1RGX0ZPUkJJRF9IRUFQX0FMTE9D
QVRJT047Ci1wdWJsaWM6Ci0gICAgUGF0dGVybkNvbnRleHRCdWZmZXJIb2xkZXIoVk0mIHZtLCBi
b29sIG5lZWRCdWZmZXIpCi0gICAgICAgIDogbV92bSh2bSkKLSAgICB7Ci0jaWYgRU5BQkxFKFlB
UlJfSklUX0FMTF9QQVJFTlNfRVhQUkVTU0lPTlMpCi0gICAgICAgIGlmIChuZWVkQnVmZmVyKQot
ICAgICAgICAgICAgbV9idWZmZXIgPSBtX3ZtLmFjcXVpcmVSZWdFeHBQYXR0ZXJuQ29udGV4QnVm
ZmVyKCk7Ci0jZWxzZQotICAgICAgICBVTlVTRURfUEFSQU0obmVlZEJ1ZmZlcik7Ci0jZW5kaWYK
LSAgICB9Ci0KLSAgICB+UGF0dGVybkNvbnRleHRCdWZmZXJIb2xkZXIoKQotICAgIHsKLSNpZiBF
TkFCTEUoWUFSUl9KSVRfQUxMX1BBUkVOU19FWFBSRVNTSU9OUykKLSAgICAgICAgaWYgKGJ1ZmZl
cigpKQotICAgICAgICAgICAgbV92bS5yZWxlYXNlUmVnRXhwUGF0dGVybkNvbnRleEJ1ZmZlcigp
OwotI2Vsc2UKLSAgICAgICAgVU5VU0VEX1BBUkFNKG1fdm0pOwotI2VuZGlmCi0gICAgfQotCi0g
ICAgdm9pZCogYnVmZmVyKCkgeyByZXR1cm4gbV9idWZmZXI7IH0KLSAgICB1bnNpZ25lZCBzaXpl
KCkgeyByZXR1cm4gYnVmZmVyKCkgPyBWTTo6cGF0dGVybkNvbnRleHRCdWZmZXJTaXplIDogMDsg
fQotCi1wcml2YXRlOgotICAgIFZNJiBtX3ZtOwotICAgIHZvaWQqIG1fYnVmZmVyIHsgbnVsbHB0
ciB9OwotfTsKLQogQUxXQVlTX0lOTElORSB2b2lkIFJlZ0V4cDo6Y29tcGlsZUlmTmVjZXNzYXJ5
KFZNJiB2bSwgWWFycjo6WWFyckNoYXJTaXplIGNoYXJTaXplKQogewogICAgIGlmIChoYXNDb2Rl
Rm9yKGNoYXJTaXplKSkKQEAgLTEyOSw3ICs5Nyw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBSZWdF
eHA6OmNvbXBpbGVJZk5lY2UKICAgICBjb21waWxlKCZ2bSwgY2hhclNpemUpOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBWZWN0b3JUeXBlPgordGVtcGxhdGU8dHlwZW5hbWUgVmVjdG9yVHlwZSwg
WWFycjo6TWF0Y2hGcm9tIG1hdGNoRnJvbT4KIEFMV0FZU19JTkxJTkUgaW50IFJlZ0V4cDo6bWF0
Y2hJbmxpbmUoVk0mIHZtLCBjb25zdCBTdHJpbmcmIHMsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCBW
ZWN0b3JUeXBlJiBvdmVjdG9yKQogewogI2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lORykKQEAgLTE2
MiwxOSArMTMwLDIyIEBAIEFMV0FZU19JTkxJTkUgaW50IFJlZ0V4cDo6bWF0Y2hJbmxpbmUoVk0K
ICAgICBpZiAobV9zdGF0ZSA9PSBKSVRDb2RlKSB7CiAgICAgICAgIHsKICAgICAgICAgICAgIEFT
U0VSVChtX3JlZ0V4cEpJVENvZGUpOwotICAgICAgICAgICAgUGF0dGVybkNvbnRleHRCdWZmZXJI
b2xkZXIgcGF0dGVybkNvbnRleHRCdWZmZXJIb2xkZXIodm0sIG1fcmVnRXhwSklUQ29kZS0+dXNl
c1BhdHRlcm5Db250ZXh0QnVmZmVyKCkpOworICAgICAgICAgICAgWWFycjo6TWF0Y2hpbmdDb250
ZXh0SG9sZGVyIHJlZ0V4cENvbnRleHQodm0sIG1fcmVnRXhwSklUQ29kZS5nZXQoKSwgbWF0Y2hG
cm9tKTsKIAogICAgICAgICAgICAgaWYgKHMuaXM4Qml0KCkpCi0gICAgICAgICAgICAgICAgcmVz
dWx0ID0gbV9yZWdFeHBKSVRDb2RlLT5leGVjdXRlKHMuY2hhcmFjdGVyczgoKSwgc3RhcnRPZmZz
ZXQsIHMubGVuZ3RoKCksIG9mZnNldFZlY3RvciwgcGF0dGVybkNvbnRleHRCdWZmZXJIb2xkZXIu
YnVmZmVyKCksIHBhdHRlcm5Db250ZXh0QnVmZmVySG9sZGVyLnNpemUoKSkuc3RhcnQ7CisgICAg
ICAgICAgICAgICAgcmVzdWx0ID0gbV9yZWdFeHBKSVRDb2RlLT5leGVjdXRlKHMuY2hhcmFjdGVy
czgoKSwgc3RhcnRPZmZzZXQsIHMubGVuZ3RoKCksIG9mZnNldFZlY3RvciwgJnJlZ0V4cENvbnRl
eHQpLnN0YXJ0OwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1f
cmVnRXhwSklUQ29kZS0+ZXhlY3V0ZShzLmNoYXJhY3RlcnMxNigpLCBzdGFydE9mZnNldCwgcy5s
ZW5ndGgoKSwgb2Zmc2V0VmVjdG9yLCBwYXR0ZXJuQ29udGV4dEJ1ZmZlckhvbGRlci5idWZmZXIo
KSwgcGF0dGVybkNvbnRleHRCdWZmZXJIb2xkZXIuc2l6ZSgpKS5zdGFydDsKKyAgICAgICAgICAg
ICAgICByZXN1bHQgPSBtX3JlZ0V4cEpJVENvZGUtPmV4ZWN1dGUocy5jaGFyYWN0ZXJzMTYoKSwg
c3RhcnRPZmZzZXQsIHMubGVuZ3RoKCksIG9mZnNldFZlY3RvciwgJnJlZ0V4cENvbnRleHQpLnN0
YXJ0OwogICAgICAgICB9CiAKICAgICAgICAgaWYgKHJlc3VsdCA9PSBZYXJyOjpKU1JlZ0V4cEpJ
VENvZGVGYWlsdXJlKSB7CiAgICAgICAgICAgICAvLyBKSVQnZWQgY29kZSBjb3VsZG4ndCBoYW5k
bGUgZXhwcmVzc2lvbiwgc28gcHVudCBiYWNrIHRvIHRoZSBpbnRlcnByZXRlci4KICAgICAgICAg
ICAgIGJ5dGVDb2RlQ29tcGlsZUlmTmVjZXNzYXJ5KCZ2bSk7Ci0gICAgICAgICAgICBpZiAobV9z
dGF0ZSA9PSBQYXJzZUVycm9yKQorICAgICAgICAgICAgaWYgKG1fc3RhdGUgPT0gUGFyc2VFcnJv
cikgeworICAgICAgICAgICAgICAgIGlmIChtYXRjaEZyb20gPT0gWWFycjo6TWF0Y2hGcm9tOjpD
b21waWxlclRocmVhZCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAg
ICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBy
ZXN1bHQgPSBZYXJyOjppbnRlcnByZXQobV9yZWdFeHBCeXRlY29kZS5nZXQoKSwgcywgc3RhcnRP
ZmZzZXQsIHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihvZmZzZXRWZWN0b3IpKTsKICAgICAg
ICAgfQogCkBAIC0yNjAsNiArMjMxLDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIFJlZ0V4cDo6Y29t
cGlsZUlmTmVjZQogICAgIGNvbXBpbGVNYXRjaE9ubHkoJnZtLCBjaGFyU2l6ZSk7CiB9CiAKK3Rl
bXBsYXRlPFlhcnI6Ok1hdGNoRnJvbSBtYXRjaEZyb20+CiBBTFdBWVNfSU5MSU5FIE1hdGNoUmVz
dWx0IFJlZ0V4cDo6bWF0Y2hJbmxpbmUoVk0mIHZtLCBjb25zdCBTdHJpbmcmIHMsIHVuc2lnbmVk
IHN0YXJ0T2Zmc2V0KQogewogI2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lORykKQEAgLTI4OSwxMSAr
MjYxLDEyIEBAIEFMV0FZU19JTkxJTkUgTWF0Y2hSZXN1bHQgUmVnRXhwOjptYXRjaEkKICAgICBp
ZiAobV9zdGF0ZSA9PSBKSVRDb2RlKSB7CiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVCht
X3JlZ0V4cEpJVENvZGUpOwotICAgICAgICAgICAgUGF0dGVybkNvbnRleHRCdWZmZXJIb2xkZXIg
cGF0dGVybkNvbnRleHRCdWZmZXJIb2xkZXIodm0sIG1fcmVnRXhwSklUQ29kZS0+dXNlc1BhdHRl
cm5Db250ZXh0QnVmZmVyKCkpOworICAgICAgICAgICAgWWFycjo6TWF0Y2hpbmdDb250ZXh0SG9s
ZGVyIHJlZ0V4cENvbnRleHQodm0sIG1fcmVnRXhwSklUQ29kZS5nZXQoKSwgbWF0Y2hGcm9tKTsK
KwogICAgICAgICAgICAgaWYgKHMuaXM4Qml0KCkpCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0g
bV9yZWdFeHBKSVRDb2RlLT5leGVjdXRlKHMuY2hhcmFjdGVyczgoKSwgc3RhcnRPZmZzZXQsIHMu
bGVuZ3RoKCksIHBhdHRlcm5Db250ZXh0QnVmZmVySG9sZGVyLmJ1ZmZlcigpLCBwYXR0ZXJuQ29u
dGV4dEJ1ZmZlckhvbGRlci5zaXplKCkpOworICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1fcmVn
RXhwSklUQ29kZS0+ZXhlY3V0ZShzLmNoYXJhY3RlcnM4KCksIHN0YXJ0T2Zmc2V0LCBzLmxlbmd0
aCgpLCAmcmVnRXhwQ29udGV4dCk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
cmVzdWx0ID0gbV9yZWdFeHBKSVRDb2RlLT5leGVjdXRlKHMuY2hhcmFjdGVyczE2KCksIHN0YXJ0
T2Zmc2V0LCBzLmxlbmd0aCgpLCBwYXR0ZXJuQ29udGV4dEJ1ZmZlckhvbGRlci5idWZmZXIoKSwg
cGF0dGVybkNvbnRleHRCdWZmZXJIb2xkZXIuc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICByZXN1
bHQgPSBtX3JlZ0V4cEpJVENvZGUtPmV4ZWN1dGUocy5jaGFyYWN0ZXJzMTYoKSwgc3RhcnRPZmZz
ZXQsIHMubGVuZ3RoKCksICZyZWdFeHBDb250ZXh0KTsKICAgICAgICAgfQogCiAjaWYgRU5BQkxF
KFJFR0VYUF9UUkFDSU5HKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnIuaAkocmV2aXNp
b24gMjU4OTg3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyci5oCSh3b3JraW5n
IGNvcHkpCkBAIC00OSw2ICs0OSw4IEBAIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgb2Zmc2V0
Tm9NYXRjaCAKIC8vIGF2b2lkIHNwZW5kaW5nIGV4cG9uZW50aWFsIHRpbWUgb24gY29tcGxleCBy
ZWd1bGFyIGV4cHJlc3Npb25zLgogc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXRjaExpbWl0
ID0gMTAwMDAwMDsKIAorZW51bSBNYXRjaEZyb20geyBWTVRocmVhZCwgQ29tcGlsZXJUaHJlYWQg
fTsKKwogZW51bSBKU1JlZ0V4cFJlc3VsdCB7CiAgICAgSlNSZWdFeHBNYXRjaCA9IDEsCiAgICAg
SlNSZWdFeHBOb01hdGNoID0gMCwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lh
cnJJbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3lh
cnIvWWFyckludGVycHJldGVyLmNwcAkocmV2aXNpb24gMjU4OTg3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3lhcnIvWWFyckludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI3
Miw2ICsxMjcyLDkgQEAgcHVibGljOgogI2RlZmluZSBjdXJyZW50VGVybSgpIChkaXNqdW5jdGlv
bi0+dGVybXNbY29udGV4dC0+dGVybV0pCiAgICAgSlNSZWdFeHBSZXN1bHQgbWF0Y2hEaXNqdW5j
dGlvbihCeXRlRGlzanVuY3Rpb24qIGRpc2p1bmN0aW9uLCBEaXNqdW5jdGlvbkNvbnRleHQqIGNv
bnRleHQsIGJvb2wgYnRyYWNrID0gZmFsc2UpCiAgICAgeworICAgICAgICBpZiAoVU5MSUtFTFko
IWlzU2FmZVRvUmVjdXJzZSgpKSkKKyAgICAgICAgICAgIHJldHVybiBKU1JlZ0V4cEVycm9yTm9N
ZW1vcnk7CisKICAgICAgICAgaWYgKCEtLXJlbWFpbmluZ01hdGNoQ291bnQpCiAgICAgICAgICAg
ICByZXR1cm4gSlNSZWdFeHBFcnJvckhpdExpbWl0OwogCkBAIC0xNjY3LDEwICsxNjcwLDEzIEBA
IHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6CisgICAgaW5saW5lIGJvb2wgaXNTYWZlVG9SZWN1
cnNlKCkgeyByZXR1cm4gbV9zdGFja0NoZWNrLmlzU2FmZVRvUmVjdXJzZSgpOyB9CisKICAgICBC
eXRlY29kZVBhdHRlcm4qIHBhdHRlcm47CiAgICAgYm9vbCB1bmljb2RlOwogICAgIHVuc2lnbmVk
KiBvdXRwdXQ7CiAgICAgSW5wdXRTdHJlYW0gaW5wdXQ7CisgICAgU3RhY2tDaGVjayBtX3N0YWNr
Q2hlY2s7CiAgICAgV1RGOjpCdW1wUG9pbnRlclBvb2wqIGFsbG9jYXRvclBvb2wgeyBudWxscHRy
IH07CiAgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQ7CiAgICAgdW5zaWduZWQgcmVtYWluaW5nTWF0
Y2hDb3VudDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwCShyZXZp
c2lvbiAyNTg5ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjYsMTggKzI2LDQ4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiWWFyckpJVC5oIgogCi0jaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KICNpbmNs
dWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAiT3B0aW9ucy5oIgogI2luY2x1ZGUgIlZNLmgi
CiAjaW5jbHVkZSAiWWFyci5oIgogI2luY2x1ZGUgIllhcnJDYW5vbmljYWxpemUuaCIKICNpbmNs
dWRlICJZYXJyRGlzYXNzZW1ibGVyLmgiCisjaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KKyNp
bmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisKIAogI2lmIEVOQUJMRShZQVJSX0pJVCkKIAogbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBZYXJyIHsKIAorTWF0Y2hpbmdDb250ZXh0SG9sZGVyOjpN
YXRjaGluZ0NvbnRleHRIb2xkZXIoVk0mIHZtLCBZYXJyQ29kZUJsb2NrKiB5YXJyQ29kZUJsb2Nr
LCBNYXRjaEZyb20gbWF0Y2hGcm9tKQorICAgIDogbV92bSh2bSkKK3sKKyAgICBpZiAobWF0Y2hG
cm9tID09IE1hdGNoRnJvbTo6Vk1UaHJlYWQpCisgICAgICAgIG1fc3RhY2tMaW1pdCA9IHZtLnNv
ZnRTdGFja0xpbWl0KCk7CisgICAgZWxzZSB7CisgICAgICAgIFN0YWNrQm91bmRzIHN0YWNrID0g
VGhyZWFkOjpjdXJyZW50KCkuc3RhY2soKTsKKyAgICAgICAgbV9zdGFja0xpbWl0ID0gc3RhY2su
cmVjdXJzaW9uTGltaXQoT3B0aW9uczo6cmVzZXJ2ZWRab25lU2l6ZSgpKTsKKyAgICB9CisKKyNp
ZiBFTkFCTEUoWUFSUl9KSVRfQUxMX1BBUkVOU19FWFBSRVNTSU9OUykKKyAgICBpZiAoeWFyckNv
ZGVCbG9jay0+dXNlc1BhdHRlcm5Db250ZXh0QnVmZmVyKCkpIHsKKyAgICAgICAgbV9wYXR0ZXJu
Q29udGV4dEJ1ZmZlciA9IG1fdm0uYWNxdWlyZVJlZ0V4cFBhdHRlcm5Db250ZXhCdWZmZXIoKTsK
KyAgICAgICAgbV9wYXR0ZXJuQ29udGV4dEJ1ZmZlclNpemUgPSBWTTo6cGF0dGVybkNvbnRleHRC
dWZmZXJTaXplOworICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHlhcnJDb2RlQmxvY2sp
OworI2VuZGlmCit9CisKK01hdGNoaW5nQ29udGV4dEhvbGRlcjo6fk1hdGNoaW5nQ29udGV4dEhv
bGRlcigpCit7CisjaWYgRU5BQkxFKFlBUlJfSklUX0FMTF9QQVJFTlNfRVhQUkVTU0lPTlMpCisg
ICAgaWYgKG1fcGF0dGVybkNvbnRleHRCdWZmZXIpCisgICAgICAgIG1fdm0ucmVsZWFzZVJlZ0V4
cFBhdHRlcm5Db250ZXhCdWZmZXIoKTsKKyNlbmRpZgorfQorCiB0ZW1wbGF0ZTxZYXJySklUQ29t
cGlsZU1vZGUgY29tcGlsZU1vZGU+CiBjbGFzcyBZYXJyR2VuZXJhdG9yIDogcHVibGljIFlhcnJK
SVRJbmZvLCBwcml2YXRlIE1hY3JvQXNzZW1ibGVyIHsKIApAQCAtNjAsNyArOTAsOCBAQCBjbGFz
cyBZYXJyR2VuZXJhdG9yIDogcHVibGljIFlhcnJKSVRJbmZvCiAgICAgc3RhdGljIGNvbnN0IFJl
Z2lzdGVySUQgaW5kZXggPSBBUk02NFJlZ2lzdGVyczo6eDE7CiAgICAgc3RhdGljIGNvbnN0IFJl
Z2lzdGVySUQgbGVuZ3RoID0gQVJNNjRSZWdpc3RlcnM6OngyOwogICAgIHN0YXRpYyBjb25zdCBS
ZWdpc3RlcklEIG91dHB1dCA9IEFSTTY0UmVnaXN0ZXJzOjp4MzsKLSAgICBzdGF0aWMgY29uc3Qg
UmVnaXN0ZXJJRCBmcmVlbGlzdFJlZ2lzdGVyID0gQVJNNjRSZWdpc3RlcnM6Ong0OworICAgIHN0
YXRpYyBjb25zdCBSZWdpc3RlcklEIG1hdGNoaW5nQ29udGV4dCA9IEFSTTY0UmVnaXN0ZXJzOjp4
NDsKKyAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBmcmVlbGlzdFJlZ2lzdGVyID0gQVJNNjRS
ZWdpc3RlcnM6Ong0OyAvLyBMb2FkZWQgZnJvbSB0aGUgTWF0Y2hpbmdDb250ZXh0SG9sZGVyIGlu
IHRoZSBwcm9sb2d1ZS4KICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBmcmVlbGlzdFNpemVS
ZWdpc3RlciA9IEFSTTY0UmVnaXN0ZXJzOjp4NTsgLy8gT25seSB1c2VkIGR1cmluZyBpbml0aWFs
aXphdGlvbi4KIAogICAgIC8vIFNjcmF0Y2ggcmVnaXN0ZXJzCkBAIC0xMDEsNyArMTMyLDggQEAg
Y2xhc3MgWWFyckdlbmVyYXRvciA6IHB1YmxpYyBZYXJySklUSW5mbwogICAgIHN0YXRpYyBjb25z
dCBSZWdpc3RlcklEIGluZGV4ID0gWDg2UmVnaXN0ZXJzOjplc2k7CiAgICAgc3RhdGljIGNvbnN0
IFJlZ2lzdGVySUQgbGVuZ3RoID0gWDg2UmVnaXN0ZXJzOjplZHg7CiAgICAgc3RhdGljIGNvbnN0
IFJlZ2lzdGVySUQgb3V0cHV0ID0gWDg2UmVnaXN0ZXJzOjplY3g7Ci0gICAgc3RhdGljIGNvbnN0
IFJlZ2lzdGVySUQgZnJlZWxpc3RSZWdpc3RlciA9IFg4NlJlZ2lzdGVyczo6cjg7CisgICAgc3Rh
dGljIGNvbnN0IFJlZ2lzdGVySUQgbWF0Y2hpbmdDb250ZXh0ID0gWDg2UmVnaXN0ZXJzOjpyODsK
KyAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBmcmVlbGlzdFJlZ2lzdGVyID0gWDg2UmVnaXN0
ZXJzOjpyODsgLy8gTG9hZGVkIGZyb20gdGhlIE1hdGNoaW5nQ29udGV4dEhvbGRlciBpbiB0aGUg
cHJvbG9ndWUuCiAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgZnJlZWxpc3RTaXplUmVnaXN0
ZXIgPSBYODZSZWdpc3RlcnM6OnI5OyAvLyBPbmx5IHVzZWQgZHVyaW5nIGluaXRpYWxpemF0aW9u
LgogI2Vsc2UKICAgICAvLyBJZiB0aGUgcmV0dXJuIHZhbHVlIGRvZXNuJ3QgZml0IGluIDY0Yml0
cywgaXRzIGRlc3RpbmF0aW9uIGlzIHBvaW50ZWQgYnkgcmN4IGFuZCB0aGUgcGFyYW1ldGVycyBh
cmUgc2hpZnRlZC4KQEAgLTIyMCw2ICsyNTIsOSBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIDogcHVi
bGljIFlhcnJKSVRJbmZvCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAorICAgICAg
ICBsb2FkMzIoQWRkcmVzcyhtYXRjaGluZ0NvbnRleHQsIE1hdGNoaW5nQ29udGV4dEhvbGRlcjo6
b2Zmc2V0T2ZQYXR0ZXJuQ29udGV4dEJ1ZmZlclNpemUoKSksIGZyZWVsaXN0U2l6ZVJlZ2lzdGVy
KTsKKyAgICAgICAgLy8gTm90ZSB0aGF0IG1hdGNoaW5nQ29udGV4dCBhbmQgZnJlZWxpc3RSZWdp
c3RlciBhcmUgbGlrZWx5IHRoZSBzYW1lIHJlZ2lzdGVyLgorICAgICAgICBsb2FkUHRyKEFkZHJl
c3MobWF0Y2hpbmdDb250ZXh0LCBNYXRjaGluZ0NvbnRleHRIb2xkZXI6Om9mZnNldE9mUGF0dGVy
bkNvbnRleHRCdWZmZXIoKSksIGZyZWVsaXN0UmVnaXN0ZXIpOwogICAgICAgICBKdW1wIGVtcHR5
RnJlZUxpc3QgPSBicmFuY2hUZXN0UHRyKFplcm8sIGZyZWVsaXN0UmVnaXN0ZXIpOwogICAgICAg
ICBtb3ZlKGZyZWVsaXN0UmVnaXN0ZXIsIHBhcmVuQ29udGV4dFBvaW50ZXIpOwogICAgICAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKHBhcmVuQ29udGV4dFNpemUpLCBmcmVlbGlzdFJlZ2lzdGVyLCBu
ZXh0UGFyZW5Db250ZXh0UG9pbnRlcik7CkBAIC02MzUsMTIgKzY3MCw2IEBAIGNsYXNzIFlhcnJH
ZW5lcmF0b3IgOiBwdWJsaWMgWWFyckpJVEluZm8KICAgICAgICAgY2FsbEZyYW1lU2l6ZSA9IChj
YWxsRnJhbWVTaXplICsgMHgzZikgJiB+MHgzZjsKICAgICAgICAgcmV0dXJuIGNhbGxGcmFtZVNp
emU7CiAgICAgfQotICAgIHZvaWQgaW5pdENhbGxGcmFtZSgpCi0gICAgewotICAgICAgICB1bnNp
Z25lZCBjYWxsRnJhbWVTaXplSW5CeXRlcyA9IGFsaWduQ2FsbEZyYW1lU2l6ZUluQnl0ZXMobV9w
YXR0ZXJuLm1fYm9keS0+bV9jYWxsRnJhbWVTaXplKTsKLSAgICAgICAgaWYgKGNhbGxGcmFtZVNp
emVJbkJ5dGVzKQotICAgICAgICAgICAgc3ViUHRyKEltbTMyKGNhbGxGcmFtZVNpemVJbkJ5dGVz
KSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgIH0KICAgICB2b2lkIHJlbW92ZUNhbGxGcmFt
ZSgpCiAgICAgewogICAgICAgICB1bnNpZ25lZCBjYWxsRnJhbWVTaXplSW5CeXRlcyA9IGFsaWdu
Q2FsbEZyYW1lU2l6ZUluQnl0ZXMobV9wYXR0ZXJuLm1fYm9keS0+bV9jYWxsRnJhbWVTaXplKTsK
QEAgLTM4NTEsNiArMzg4MCwyOCBAQCBwdWJsaWM6CiAgICAgICAgIGdlbmVyYXRlRmFpbFJldHVy
bigpOwogICAgICAgICBoYXNJbnB1dC5saW5rKHRoaXMpOwogCisgICAgICAgIHVuc2lnbmVkIGNh
bGxGcmFtZVNpemVJbkJ5dGVzID0gYWxpZ25DYWxsRnJhbWVTaXplSW5CeXRlcyhtX3BhdHRlcm4u
bV9ib2R5LT5tX2NhbGxGcmFtZVNpemUpOworICAgICAgICBpZiAoY2FsbEZyYW1lU2l6ZUluQnl0
ZXMpIHsKKyAgICAgICAgICAgIC8vIENoZWNrIHN0YWNrIHNpemUKKyAgICAgICAgICAgIGFkZFB0
cihUcnVzdGVkSW1tMzIoLWNhbGxGcmFtZVNpemVJbkJ5dGVzKSwgc3RhY2tQb2ludGVyUmVnaXN0
ZXIsIHJlZ1QwKTsKKyNpZiBDUFUoWDg2XzY0KSAmJiBPUyhXSU5ET1dTKQorICAgICAgICAgICAg
UmVnaXN0ZXJJRCBtYXRjaGluZ0NvbnRleHQgPSByZWdUMTsKKyAgICAgICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhYODZSZWdpc3RlcnM6OmVicCwgNyAqIHNpemVvZih2b2lkKikpLCBtYXRjaGluZ0Nv
bnRleHQpOworI2VsaWYgQ1BVKEFSTV9USFVNQjIpIHx8IENQVShNSVBTKQorICAgICAgICAgICAg
UmVnaXN0ZXJJRCBtYXRjaGluZ0NvbnRleHQgPSByZWdUMTsKKyAgICAgICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgNCAqIHNpemVvZih2b2lkKikpLCBtYXRjaGlu
Z0NvbnRleHQpOworI2VuZGlmCisgICAgICAgICAgICBKdW1wIHN0YWNrT2sgPSBicmFuY2hQdHIo
QmVsb3dPckVxdWFsLCBBZGRyZXNzKG1hdGNoaW5nQ29udGV4dCwgTWF0Y2hpbmdDb250ZXh0SG9s
ZGVyOjpvZmZzZXRPZlN0YWNrTGltaXQoKSksIHJlZ1QwKTsKKworICAgICAgICAgICAgLy8gRXhj
ZWVkZWQgc3RhY2sgbGltaXQsIHB1bnQgdG8gdGhlIGludGVycHJldGVyLgorICAgICAgICAgICAg
bW92ZShUcnVzdGVkSW1tUHRyKCh2b2lkKilzdGF0aWNfY2FzdDxzaXplX3Q+KC0yKSksIHJldHVy
blJlZ2lzdGVyKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZXR1cm5SZWdp
c3RlcjIpOworICAgICAgICAgICAgZ2VuZXJhdGVSZXR1cm4oKTsKKworICAgICAgICAgICAgc3Rh
Y2tPay5saW5rKHRoaXMpOworICAgICAgICAgICAgbW92ZShyZWdUMCwgc3RhY2tQb2ludGVyUmVn
aXN0ZXIpOworICAgICAgICB9CisKICNpZmRlZiBKSVRfVU5JQ09ERV9FWFBSRVNTSU9OUwogICAg
ICAgICBpZiAobV9kZWNvZGVTdXJyb2dhdGVQYWlycykKICAgICAgICAgICAgIGdldEVmZmVjdGl2
ZUFkZHJlc3MoQmFzZUluZGV4KGlucHV0LCBsZW5ndGgsIFRpbWVzVHdvKSwgZW5kT2ZTdHJpbmdB
ZGRyZXNzKTsKQEAgLTM4NjksOCArMzkyMCw2IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKCFtX3Bh
dHRlcm4ubV9ib2R5LT5tX2hhc0ZpeGVkU2l6ZSkKICAgICAgICAgICAgIHNldE1hdGNoU3RhcnQo
aW5kZXgpOwogCi0gICAgICAgIGluaXRDYWxsRnJhbWUoKTsKLQogI2lmIEVOQUJMRShZQVJSX0pJ
VF9BTExfUEFSRU5TX0VYUFJFU1NJT05TKQogICAgICAgICBpZiAobV9jb250YWluc05lc3RlZFN1
YnBhdHRlcm5zKSB7CiAgICAgICAgICAgICBpbml0UGFyZW5Db250ZXh0RnJlZUxpc3QoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmgJKHJldmlzaW9uIDI1ODk4NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuaAkod29ya2luZyBjb3B5KQpAQCAt
MjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCiAjaW5j
bHVkZSAiTWF0Y2hSZXN1bHQuaCIKKyNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgIllhcnIuaCIK
ICNpbmNsdWRlICJZYXJyUGF0dGVybi5oIgogCkBAIC00MSw2ICs0Miw4IEBAIGNsYXNzIEV4ZWN1
dGFibGVQb29sOwogCiBuYW1lc3BhY2UgWWFyciB7CiAKK2NsYXNzIFlhcnJDb2RlQmxvY2s7CisK
IGVudW0gY2xhc3MgSklURmFpbHVyZVJlYXNvbiA6IHVpbnQ4X3QgewogICAgIERlY29kZVN1cnJv
Z2F0ZVBhaXIsCiAgICAgQmFja1JlZmVyZW5jZSwKQEAgLTUyLDE1ICs1NSwzNSBAQCBlbnVtIGNs
YXNzIEpJVEZhaWx1cmVSZWFzb24gOiB1aW50OF90IHsKICAgICBFeGVjdXRhYmxlTWVtb3J5QWxs
b2NhdGlvbkZhaWx1cmUsCiB9OwogCitjbGFzcyBNYXRjaGluZ0NvbnRleHRIb2xkZXIgeworICAg
IFdURl9GT1JCSURfSEVBUF9BTExPQ0FUSU9OOworcHVibGljOgorICAgIE1hdGNoaW5nQ29udGV4
dEhvbGRlcihWTSYsIFlhcnJDb2RlQmxvY2sqLCBNYXRjaEZyb20gbWF0Y2hGcm9tID0gTWF0Y2hG
cm9tOjpWTVRocmVhZCk7CisgICAgfk1hdGNoaW5nQ29udGV4dEhvbGRlcigpOworCisgICAgc3Rh
dGljIHB0cmRpZmZfdCBvZmZzZXRPZlN0YWNrTGltaXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoTWF0Y2hpbmdDb250ZXh0SG9sZGVyLCBtX3N0YWNrTGltaXQpOyB9CisjaWYgRU5BQkxFKFlB
UlJfSklUX0FMTF9QQVJFTlNfRVhQUkVTU0lPTlMpCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZz
ZXRPZlBhdHRlcm5Db250ZXh0QnVmZmVyKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKE1hdGNo
aW5nQ29udGV4dEhvbGRlciwgbV9wYXR0ZXJuQ29udGV4dEJ1ZmZlcik7IH0KKyAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mUGF0dGVybkNvbnRleHRCdWZmZXJTaXplKCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKE1hdGNoaW5nQ29udGV4dEhvbGRlciwgbV9wYXR0ZXJuQ29udGV4dEJ1ZmZl
clNpemUpOyB9CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBWTSYgbV92bTsKKyAgICB2b2lkKiBt
X3N0YWNrTGltaXQ7CisjaWYgRU5BQkxFKFlBUlJfSklUX0FMTF9QQVJFTlNfRVhQUkVTU0lPTlMp
CisgICAgdm9pZCogbV9wYXR0ZXJuQ29udGV4dEJ1ZmZlciB7IG51bGxwdHIgfTsKKyAgICB1bnNp
Z25lZCBtX3BhdHRlcm5Db250ZXh0QnVmZmVyU2l6ZSB7IDAgfTsKKyNlbmRpZgorfTsKKwogY2xh
c3MgWWFyckNvZGVCbG9jayB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoWWFyckNvZGVCbG9jayk7CiAKLSAgICAvLyBUZWNobmljYWxseSBm
cmVlUGFyZW5Db250ZXh0IGFuZCBwYXJlbkNvbnRleHRTaXplIGFyZSBvbmx5IHVzZWQgaWYgRU5B
QkxFKFlBUlJfSklUX0FMTF9QQVJFTlNfRVhQUkVTU0lPTlMpIGlzIHNldC4gRm9ydHVuYXRlbHks
IGFsbCB0aGUgY2FsbGluZyBjb252ZW50aW9ucyB3ZSBzdXBwb3J0IGhhdmUgY2FsbGVyIHNhdmUg
YXJndW1lbnQgcmVnaXN0ZXJzLgotICAgIHVzaW5nIFlhcnJKSVRDb2RlOCA9IEVuY29kZWRNYXRj
aFJlc3VsdCAoKikoY29uc3QgTENoYXIqIGlucHV0LCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQg
bGVuZ3RoLCBpbnQqIG91dHB1dCwgdm9pZCogZnJlZVBhcmVuQ29udGV4dCwgdW5zaWduZWQgcGFy
ZW5Db250ZXh0U2l6ZSkgWUFSUl9DQUxMOwotICAgIHVzaW5nIFlhcnJKSVRDb2RlMTYgPSBFbmNv
ZGVkTWF0Y2hSZXN1bHQgKCopKGNvbnN0IFVDaGFyKiBpbnB1dCwgdW5zaWduZWQgc3RhcnQsIHVu
c2lnbmVkIGxlbmd0aCwgaW50KiBvdXRwdXQsIHZvaWQqIGZyZWVQYXJlbkNvbnRleHQsIHVuc2ln
bmVkIHBhcmVuQ29udGV4dFNpemUpIFlBUlJfQ0FMTDsKLSAgICB1c2luZyBZYXJySklUQ29kZU1h
dGNoT25seTggPSBFbmNvZGVkTWF0Y2hSZXN1bHQgKCopKGNvbnN0IExDaGFyKiBpbnB1dCwgdW5z
aWduZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCwgdm9pZCosIHZvaWQqIGZyZWVQYXJlbkNvbnRl
eHQsIHVuc2lnbmVkIHBhcmVuQ29udGV4dFNpemUpIFlBUlJfQ0FMTDsKLSAgICB1c2luZyBZYXJy
SklUQ29kZU1hdGNoT25seTE2ID0gRW5jb2RlZE1hdGNoUmVzdWx0ICgqKShjb25zdCBVQ2hhciog
aW5wdXQsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIHZvaWQqLCB2b2lkKiBmcmVl
UGFyZW5Db250ZXh0LCB1bnNpZ25lZCBwYXJlbkNvbnRleHRTaXplKSBZQVJSX0NBTEw7CisgICAg
dXNpbmcgWWFyckpJVENvZGU4ID0gRW5jb2RlZE1hdGNoUmVzdWx0ICgqKShjb25zdCBMQ2hhciog
aW5wdXQsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIGludCogb3V0cHV0LCBNYXRj
aGluZ0NvbnRleHRIb2xkZXIqIG1hdGNoaW5nQ29udGV4dCkgWUFSUl9DQUxMOworICAgIHVzaW5n
IFlhcnJKSVRDb2RlMTYgPSBFbmNvZGVkTWF0Y2hSZXN1bHQgKCopKGNvbnN0IFVDaGFyKiBpbnB1
dCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCwgaW50KiBvdXRwdXQsIE1hdGNoaW5n
Q29udGV4dEhvbGRlciogbWF0Y2hpbmdDb250ZXh0KSBZQVJSX0NBTEw7CisgICAgdXNpbmcgWWFy
ckpJVENvZGVNYXRjaE9ubHk4ID0gRW5jb2RlZE1hdGNoUmVzdWx0ICgqKShjb25zdCBMQ2hhciog
aW5wdXQsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIHZvaWQqLCBNYXRjaGluZ0Nv
bnRleHRIb2xkZXIqIG1hdGNoaW5nQ29udGV4dCkgWUFSUl9DQUxMOworICAgIHVzaW5nIFlhcnJK
SVRDb2RlTWF0Y2hPbmx5MTYgPSBFbmNvZGVkTWF0Y2hSZXN1bHQgKCopKGNvbnN0IFVDaGFyKiBp
bnB1dCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCwgdm9pZCosIE1hdGNoaW5nQ29u
dGV4dEhvbGRlciogbWF0Y2hpbmdDb250ZXh0KSBZQVJSX0NBTEw7CiAKIHB1YmxpYzoKICAgICBZ
YXJyQ29kZUJsb2NrKCkgPSBkZWZhdWx0OwpAQCAtODMsMjggKzEwNiwyOCBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBzZXRVc2VzUGF0dGVybkNvbnRleHRCdWZmZXIoKSB7IG1fdXNlc1BhdHRlcm5Db250
ZXh0QnVmZmVyID0gdHJ1ZTsgfQogI2VuZGlmCiAKLSAgICBNYXRjaFJlc3VsdCBleGVjdXRlKGNv
bnN0IExDaGFyKiBpbnB1dCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCwgaW50KiBv
dXRwdXQsIHZvaWQqIGZyZWVQYXJlbkNvbnRleHQsIHVuc2lnbmVkIHBhcmVuQ29udGV4dFNpemUp
CisgICAgTWF0Y2hSZXN1bHQgZXhlY3V0ZShjb25zdCBMQ2hhciogaW5wdXQsIHVuc2lnbmVkIHN0
YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIGludCogb3V0cHV0LCBNYXRjaGluZ0NvbnRleHRIb2xkZXIq
IG1hdGNoaW5nQ29udGV4dCkKICAgICB7CiAgICAgICAgIEFTU0VSVChoYXM4Qml0Q29kZSgpKTsK
LSAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0KHVudGFnQ0Z1bmN0aW9uUHRyPFlhcnJKSVRDb2Rl
OCwgWWFycjhCaXRQdHJUYWc+KG1fcmVmOC5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkoaW5w
dXQsIHN0YXJ0LCBsZW5ndGgsIG91dHB1dCwgZnJlZVBhcmVuQ29udGV4dCwgcGFyZW5Db250ZXh0
U2l6ZSkpOworICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQodW50YWdDRnVuY3Rpb25QdHI8WWFy
ckpJVENvZGU4LCBZYXJyOEJpdFB0clRhZz4obV9yZWY4LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVz
cygpKShpbnB1dCwgc3RhcnQsIGxlbmd0aCwgb3V0cHV0LCBtYXRjaGluZ0NvbnRleHQpKTsKICAg
ICB9CiAKLSAgICBNYXRjaFJlc3VsdCBleGVjdXRlKGNvbnN0IFVDaGFyKiBpbnB1dCwgdW5zaWdu
ZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCwgaW50KiBvdXRwdXQsIHZvaWQqIGZyZWVQYXJlbkNv
bnRleHQsIHVuc2lnbmVkIHBhcmVuQ29udGV4dFNpemUpCisgICAgTWF0Y2hSZXN1bHQgZXhlY3V0
ZShjb25zdCBVQ2hhciogaW5wdXQsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIGlu
dCogb3V0cHV0LCBNYXRjaGluZ0NvbnRleHRIb2xkZXIqIG1hdGNoaW5nQ29udGV4dCkKICAgICB7
CiAgICAgICAgIEFTU0VSVChoYXMxNkJpdENvZGUoKSk7Ci0gICAgICAgIHJldHVybiBNYXRjaFJl
c3VsdCh1bnRhZ0NGdW5jdGlvblB0cjxZYXJySklUQ29kZTE2LCBZYXJyMTZCaXRQdHJUYWc+KG1f
cmVmMTYuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKGlucHV0LCBzdGFydCwgbGVuZ3RoLCBv
dXRwdXQsIGZyZWVQYXJlbkNvbnRleHQsIHBhcmVuQ29udGV4dFNpemUpKTsKKyAgICAgICAgcmV0
dXJuIE1hdGNoUmVzdWx0KHVudGFnQ0Z1bmN0aW9uUHRyPFlhcnJKSVRDb2RlMTYsIFlhcnIxNkJp
dFB0clRhZz4obV9yZWYxNi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkoaW5wdXQsIHN0YXJ0
LCBsZW5ndGgsIG91dHB1dCwgbWF0Y2hpbmdDb250ZXh0KSk7CiAgICAgfQogCi0gICAgTWF0Y2hS
ZXN1bHQgZXhlY3V0ZShjb25zdCBMQ2hhciogaW5wdXQsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25l
ZCBsZW5ndGgsIHZvaWQqIGZyZWVQYXJlbkNvbnRleHQsIHVuc2lnbmVkIHBhcmVuQ29udGV4dFNp
emUpCisgICAgTWF0Y2hSZXN1bHQgZXhlY3V0ZShjb25zdCBMQ2hhciogaW5wdXQsIHVuc2lnbmVk
IHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIE1hdGNoaW5nQ29udGV4dEhvbGRlciogbWF0Y2hpbmdD
b250ZXh0KQogICAgIHsKICAgICAgICAgQVNTRVJUKGhhczhCaXRDb2RlTWF0Y2hPbmx5KCkpOwot
ICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQodW50YWdDRnVuY3Rpb25QdHI8WWFyckpJVENvZGVN
YXRjaE9ubHk4LCBZYXJyTWF0Y2hPbmx5OEJpdFB0clRhZz4obV9tYXRjaE9ubHk4LmNvZGUoKS5l
eGVjdXRhYmxlQWRkcmVzcygpKShpbnB1dCwgc3RhcnQsIGxlbmd0aCwgMCwgZnJlZVBhcmVuQ29u
dGV4dCwgcGFyZW5Db250ZXh0U2l6ZSkpOworICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQodW50
YWdDRnVuY3Rpb25QdHI8WWFyckpJVENvZGVNYXRjaE9ubHk4LCBZYXJyTWF0Y2hPbmx5OEJpdFB0
clRhZz4obV9tYXRjaE9ubHk4LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKShpbnB1dCwgc3Rh
cnQsIGxlbmd0aCwgMCwgbWF0Y2hpbmdDb250ZXh0KSk7CiAgICAgfQogCi0gICAgTWF0Y2hSZXN1
bHQgZXhlY3V0ZShjb25zdCBVQ2hhciogaW5wdXQsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBs
ZW5ndGgsIHZvaWQqIGZyZWVQYXJlbkNvbnRleHQsIHVuc2lnbmVkIHBhcmVuQ29udGV4dFNpemUp
CisgICAgTWF0Y2hSZXN1bHQgZXhlY3V0ZShjb25zdCBVQ2hhciogaW5wdXQsIHVuc2lnbmVkIHN0
YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIE1hdGNoaW5nQ29udGV4dEhvbGRlciogbWF0Y2hpbmdDb250
ZXh0KQogICAgIHsKICAgICAgICAgQVNTRVJUKGhhczE2Qml0Q29kZU1hdGNoT25seSgpKTsKLSAg
ICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0KHVudGFnQ0Z1bmN0aW9uUHRyPFlhcnJKSVRDb2RlTWF0
Y2hPbmx5MTYsIFlhcnJNYXRjaE9ubHkxNkJpdFB0clRhZz4obV9tYXRjaE9ubHkxNi5jb2RlKCku
ZXhlY3V0YWJsZUFkZHJlc3MoKSkoaW5wdXQsIHN0YXJ0LCBsZW5ndGgsIDAsIGZyZWVQYXJlbkNv
bnRleHQsIHBhcmVuQ29udGV4dFNpemUpKTsKKyAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0KHVu
dGFnQ0Z1bmN0aW9uUHRyPFlhcnJKSVRDb2RlTWF0Y2hPbmx5MTYsIFlhcnJNYXRjaE9ubHkxNkJp
dFB0clRhZz4obV9tYXRjaE9ubHkxNi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkoaW5wdXQs
IHN0YXJ0LCBsZW5ndGgsIDAsIG1hdGNoaW5nQ29udGV4dCkpOwogICAgIH0KIAogI2lmIEVOQUJM
RShSRUdFWFBfVFJBQ0lORykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJQ
YXR0ZXJuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJy
UGF0dGVybi5jcHAJKHJldmlzaW9uIDI1ODk4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95
YXJyL1lhcnJQYXR0ZXJuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQAogI2lu
Y2x1ZGUgIllhcnJQYXJzZXIuaCIKICNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogI2luY2x1ZGUg
PHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi9TdGFja1BvaW50ZXIuaD4KKyNpbmNsdWRl
IDx3dGYvU3RhY2tDaGVjay5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KICNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CiAKQEAgLTQzNiwxMCArNDM2LDkgQEAgcHJpdmF0ZToKIAogY2xhc3Mg
WWFyclBhdHRlcm5Db25zdHJ1Y3RvciB7CiBwdWJsaWM6Ci0gICAgWWFyclBhdHRlcm5Db25zdHJ1
Y3RvcihZYXJyUGF0dGVybiYgcGF0dGVybiwgdm9pZCogc3RhY2tMaW1pdCkKKyAgICBZYXJyUGF0
dGVybkNvbnN0cnVjdG9yKFlhcnJQYXR0ZXJuJiBwYXR0ZXJuKQogICAgICAgICA6IG1fcGF0dGVy
bihwYXR0ZXJuKQogICAgICAgICAsIG1fY2hhcmFjdGVyQ2xhc3NDb25zdHJ1Y3RvcihwYXR0ZXJu
Lmlnbm9yZUNhc2UoKSwgcGF0dGVybi51bmljb2RlKCkgPyBDYW5vbmljYWxNb2RlOjpVbmljb2Rl
IDogQ2Fub25pY2FsTW9kZTo6VUNTMikKLSAgICAgICAgLCBtX3N0YWNrTGltaXQoc3RhY2tMaW1p
dCkKICAgICB7CiAgICAgICAgIGF1dG8gYm9keSA9IG1ha2VVbmlxdWU8UGF0dGVybkRpc2p1bmN0
aW9uPigpOwogICAgICAgICBtX3BhdHRlcm4ubV9ib2R5ID0gYm9keS5nZXQoKTsKQEAgLTExMTgs
MjggKzExMTcsMjEgQEAgcHVibGljOgogICAgIEVycm9yQ29kZSBlcnJvcigpIHsgcmV0dXJuIG1f
ZXJyb3I7IH0KIAogcHJpdmF0ZToKLSAgICBib29sIGlzU2FmZVRvUmVjdXJzZSgpIGNvbnN0Ci0g
ICAgewotICAgICAgICBpZiAoIW1fc3RhY2tMaW1pdCkKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICBpbnQ4X3QqIGN1cnIgPSByZWludGVycHJldF9jYXN0PGludDhfdCo+KGN1cnJl
bnRTdGFja1BvaW50ZXIoKSk7Ci0gICAgICAgIGludDhfdCogbGltaXQgPSByZWludGVycHJldF9j
YXN0PGludDhfdCo+KG1fc3RhY2tMaW1pdCk7Ci0gICAgICAgIHJldHVybiBjdXJyID49IGxpbWl0
OwotICAgIH0KKyAgICBpbmxpbmUgYm9vbCBpc1NhZmVUb1JlY3Vyc2UoKSB7IHJldHVybiBtX3N0
YWNrQ2hlY2suaXNTYWZlVG9SZWN1cnNlKCk7IH0KIAogICAgIFlhcnJQYXR0ZXJuJiBtX3BhdHRl
cm47CiAgICAgUGF0dGVybkFsdGVybmF0aXZlKiBtX2FsdGVybmF0aXZlOwogICAgIENoYXJhY3Rl
ckNsYXNzQ29uc3RydWN0b3IgbV9jaGFyYWN0ZXJDbGFzc0NvbnN0cnVjdG9yOwogICAgIFZlY3Rv
cjxTdHJpbmc+IG1fdW5tYXRjaGVkTmFtZWRGb3J3YXJkUmVmZXJlbmNlczsKLSAgICB2b2lkKiBt
X3N0YWNrTGltaXQ7CisgICAgU3RhY2tDaGVjayBtX3N0YWNrQ2hlY2s7CiAgICAgRXJyb3JDb2Rl
IG1fZXJyb3IgeyBFcnJvckNvZGU6Ok5vRXJyb3IgfTsKICAgICBib29sIG1faW52ZXJ0Q2hhcmFj
dGVyQ2xhc3M7CiAgICAgYm9vbCBtX2ludmVydFBhcmVudGhldGljYWxBc3NlcnRpb24geyBmYWxz
ZSB9OwogfTsKIAotRXJyb3JDb2RlIFlhcnJQYXR0ZXJuOjpjb21waWxlKGNvbnN0IFN0cmluZyYg
cGF0dGVyblN0cmluZywgdm9pZCogc3RhY2tMaW1pdCkKK0Vycm9yQ29kZSBZYXJyUGF0dGVybjo6
Y29tcGlsZShjb25zdCBTdHJpbmcmIHBhdHRlcm5TdHJpbmcpCiB7Ci0gICAgWWFyclBhdHRlcm5D
b25zdHJ1Y3RvciBjb25zdHJ1Y3RvcigqdGhpcywgc3RhY2tMaW1pdCk7CisgICAgWWFyclBhdHRl
cm5Db25zdHJ1Y3RvciBjb25zdHJ1Y3RvcigqdGhpcyk7CiAKICAgICB7CiAgICAgICAgIEVycm9y
Q29kZSBlcnJvciA9IHBhcnNlKGNvbnN0cnVjdG9yLCBwYXR0ZXJuU3RyaW5nLCB1bmljb2RlKCkp
OwpAQCAtMTE4Myw3ICsxMTc1LDcgQEAgRXJyb3JDb2RlIFlhcnJQYXR0ZXJuOjpjb21waWxlKGNv
bnN0IFN0cgogICAgIHJldHVybiBFcnJvckNvZGU6Ok5vRXJyb3I7CiB9CiAKLVlhcnJQYXR0ZXJu
OjpZYXJyUGF0dGVybihjb25zdCBTdHJpbmcmIHBhdHRlcm4sIE9wdGlvblNldDxGbGFncz4gZmxh
Z3MsIEVycm9yQ29kZSYgZXJyb3IsIHZvaWQqIHN0YWNrTGltaXQpCitZYXJyUGF0dGVybjo6WWFy
clBhdHRlcm4oY29uc3QgU3RyaW5nJiBwYXR0ZXJuLCBPcHRpb25TZXQ8RmxhZ3M+IGZsYWdzLCBF
cnJvckNvZGUmIGVycm9yKQogICAgIDogbV9jb250YWluc0JhY2tyZWZlcmVuY2VzKGZhbHNlKQog
ICAgICwgbV9jb250YWluc0JPTChmYWxzZSkKICAgICAsIG1fY29udGFpbnNVbnNpZ25lZExlbmd0
aFBhdHRlcm4oZmFsc2UpCkBAIC0xMTkyLDcgKzExODQsNyBAQCBZYXJyUGF0dGVybjo6WWFyclBh
dHRlcm4oY29uc3QgU3RyaW5nJiBwCiAgICAgLCBtX2ZsYWdzKGZsYWdzKQogewogICAgIEFTU0VS
VChtX2ZsYWdzICE9IEZsYWdzOjpEZWxldGVkVmFsdWUpOwotICAgIGVycm9yID0gY29tcGlsZShw
YXR0ZXJuLCBzdGFja0xpbWl0KTsKKyAgICBlcnJvciA9IGNvbXBpbGUocGF0dGVybik7CiB9CiAK
IHZvaWQgaW5kZW50Rm9yTmVzdGluZ0xldmVsKFByaW50U3RyZWFtJiBvdXQsIHVuc2lnbmVkIG5l
c3RpbmdEZXB0aCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJQYXR0ZXJu
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyclBhdHRlcm4u
aAkocmV2aXNpb24gMjU4OTg3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyclBh
dHRlcm4uaAkod29ya2luZyBjb3B5KQpAQCAtMzg2LDcgKzM4Niw3IEBAIHN0cnVjdCBUZXJtQ2hh
aW4gewogCiAKIHN0cnVjdCBZYXJyUGF0dGVybiB7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgWWFy
clBhdHRlcm4oY29uc3QgU3RyaW5nJiBwYXR0ZXJuLCBPcHRpb25TZXQ8RmxhZ3M+LCBFcnJvckNv
ZGUmLCB2b2lkKiBzdGFja0xpbWl0ID0gbnVsbHB0cik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
WWFyclBhdHRlcm4oY29uc3QgU3RyaW5nJiBwYXR0ZXJuLCBPcHRpb25TZXQ8RmxhZ3M+LCBFcnJv
ckNvZGUmKTsKIAogICAgIHZvaWQgcmVzZXRGb3JSZXBhcnNpbmcoKQogICAgIHsKQEAgLTU2NSw3
ICs1NjUsNyBAQCBzdHJ1Y3QgWWFyclBhdHRlcm4gewogICAgIEhhc2hNYXA8U3RyaW5nLCB1bnNp
Z25lZD4gbV9uYW1lZEdyb3VwVG9QYXJlbkluZGV4OwogCiBwcml2YXRlOgotICAgIEVycm9yQ29k
ZSBjb21waWxlKGNvbnN0IFN0cmluZyYgcGF0dGVyblN0cmluZywgdm9pZCogc3RhY2tMaW1pdCk7
CisgICAgRXJyb3JDb2RlIGNvbXBpbGUoY29uc3QgU3RyaW5nJiBwYXR0ZXJuU3RyaW5nKTsKIAog
ICAgIENoYXJhY3RlckNsYXNzKiBhbnljaGFyQ2FjaGVkIHsgbnVsbHB0ciB9OwogICAgIENoYXJh
Y3RlckNsYXNzKiBuZXdsaW5lQ2FjaGVkIHsgbnVsbHB0ciB9OwpJbmRleDogTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24g
MjU4OTg3KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTkgQEAKKzIwMjAtMDMtMjUgIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+
CisKKyAgICAgICAgUmVmYWN0b3IgWUFSUiBTdGFjayBPdmVyZmxvdyBDaGVja3MKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwOTQzNQorICAgICAgICBy
ZGFyOi8vcHJvYmxlbS81ODk4ODI1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisJVXBkYXRlZCB0ZXN0IGZvciBpbXByb3ZlZCBzdGFjayBvdmVyZmxvdyBjaGVja2lu
Zy4KKworICAgICAgICAqIGpzL3NjcmlwdC10ZXN0cy9zdGFjay1vdmVyZmxvdy1yZWdleHAuanM6
CisgICAgICAgIChzaG91bGRUaHJvdy5yZWN1cnNpdmVDYWxsKToKKyAgICAgICAgKHNob3VsZFRo
cm93KToKKyAgICAgICAgKHJlY3Vyc2l2ZUNhbGwpOgorICAgICAgICAqIGpzL3N0YWNrLW92ZXJm
bG93LXJlZ2V4cC1leHBlY3RlZC50eHQ6CisKIDIwMjAtMDMtMjUgIFNpbW9uIEZyYXNlciAgPHNp
bW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTiAocjI1MTM4NSk6IGJv
eC1zaGFkb3cgaW50ZXJmZXJlcyB3aXRoIGJhY2tkcm9wLWZpbHRlcgpJbmRleDogTGF5b3V0VGVz
dHMvanMvc3RhY2stb3ZlcmZsb3ctcmVnZXhwLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9qcy9zdGFjay1vdmVyZmxvdy1yZWdleHAtZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAyNTg5ODcpCisrKyBMYXlvdXRUZXN0cy9qcy9zdGFjay1vdmVyZmxvdy1yZWdleHAtZXhwZWN0
ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0zLDMwICszLDMwIEBAIFRlc3QgdGhhdCB3ZSBkbyBu
b3Qgb3ZlcmZsb3cgdGhlIHN0YWNrIHcKIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmll
cyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KIAogCi1Q
QVNTIG5ldyBSZWdFeHAoQXJyYXkoNTAwMDApLmpvaW4oIigiKSArICJhIiArIEFycmF5KDUwMDAw
KS5qb2luKCIpIikpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogT3V0IG9mIG1lbW9yeTogSW52YWxp
ZCByZWd1bGFyIGV4cHJlc3Npb246IHRvbyBtYW55IG5lc3RlZCBkaXNqdW5jdGlvbnMuCitQQVNT
IG5ldyBSZWdFeHAoQXJyYXkoNTAwMDAwKS5qb2luKCIoIikgKyAiYSIgKyBBcnJheSg1MDAwMDAp
LmpvaW4oIikiKSkgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBPdXQgb2YgbWVtb3J5OiBJbnZhbGlk
IHJlZ3VsYXIgZXhwcmVzc2lvbjogdG9vIG1hbnkgbmVzdGVkIGRpc2p1bmN0aW9ucy4KIENyZWF0
aW5nIFJlZ0V4cCBhdCBkZXB0aCAwCi1QQVNTIG5ldyBSZWdFeHAoQXJyYXkoNTAwMDApLmpvaW4o
IigiKSArICJhIiArIEFycmF5KDUwMDAwKS5qb2luKCIpIikpIHRocmV3IGV4Y2VwdGlvbiBFcnJv
cjogT3V0IG9mIG1lbW9yeTogSW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb246IHRvbyBtYW55IG5l
c3RlZCBkaXNqdW5jdGlvbnMuCitQQVNTIG5ldyBSZWdFeHAoQXJyYXkoNTAwMDAwKS5qb2luKCIo
IikgKyAiYSIgKyBBcnJheSg1MDAwMDApLmpvaW4oIikiKSkgdGhyZXcgZXhjZXB0aW9uIEVycm9y
OiBPdXQgb2YgbWVtb3J5OiBJbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbjogdG9vIG1hbnkgbmVz
dGVkIGRpc2p1bmN0aW9ucy4KIENyZWF0aW5nIFJlZ0V4cCBhdCBkZXB0aCAxMAotUEFTUyBuZXcg
UmVnRXhwKEFycmF5KDUwMDAwKS5qb2luKCIoIikgKyAiYSIgKyBBcnJheSg1MDAwMCkuam9pbigi
KSIpKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IE91dCBvZiBtZW1vcnk6IEludmFsaWQgcmVndWxh
ciBleHByZXNzaW9uOiB0b28gbWFueSBuZXN0ZWQgZGlzanVuY3Rpb25zLgorUEFTUyBuZXcgUmVn
RXhwKEFycmF5KDUwMDAwMCkuam9pbigiKCIpICsgImEiICsgQXJyYXkoNTAwMDAwKS5qb2luKCIp
IikpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogT3V0IG9mIG1lbW9yeTogSW52YWxpZCByZWd1bGFy
IGV4cHJlc3Npb246IHRvbyBtYW55IG5lc3RlZCBkaXNqdW5jdGlvbnMuCiBDcmVhdGluZyBSZWdF
eHAgYXQgZGVwdGggMjAKLVBBU1MgbmV3IFJlZ0V4cChBcnJheSg1MDAwMCkuam9pbigiKCIpICsg
ImEiICsgQXJyYXkoNTAwMDApLmpvaW4oIikiKSkgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBPdXQg
b2YgbWVtb3J5OiBJbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbjogdG9vIG1hbnkgbmVzdGVkIGRp
c2p1bmN0aW9ucy4KK1BBU1MgbmV3IFJlZ0V4cChBcnJheSg1MDAwMDApLmpvaW4oIigiKSArICJh
IiArIEFycmF5KDUwMDAwMCkuam9pbigiKSIpKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IE91dCBv
ZiBtZW1vcnk6IEludmFsaWQgcmVndWxhciBleHByZXNzaW9uOiB0b28gbWFueSBuZXN0ZWQgZGlz
anVuY3Rpb25zLgogQ3JlYXRpbmcgUmVnRXhwIGF0IGRlcHRoIDMwCi1QQVNTIG5ldyBSZWdFeHAo
QXJyYXkoNTAwMDApLmpvaW4oIigiKSArICJhIiArIEFycmF5KDUwMDAwKS5qb2luKCIpIikpIHRo
cmV3IGV4Y2VwdGlvbiBFcnJvcjogT3V0IG9mIG1lbW9yeTogSW52YWxpZCByZWd1bGFyIGV4cHJl
c3Npb246IHRvbyBtYW55IG5lc3RlZCBkaXNqdW5jdGlvbnMuCitQQVNTIG5ldyBSZWdFeHAoQXJy
YXkoNTAwMDAwKS5qb2luKCIoIikgKyAiYSIgKyBBcnJheSg1MDAwMDApLmpvaW4oIikiKSkgdGhy
ZXcgZXhjZXB0aW9uIEVycm9yOiBPdXQgb2YgbWVtb3J5OiBJbnZhbGlkIHJlZ3VsYXIgZXhwcmVz
c2lvbjogdG9vIG1hbnkgbmVzdGVkIGRpc2p1bmN0aW9ucy4KIENyZWF0aW5nIFJlZ0V4cCBhdCBk
ZXB0aCA0MAotUEFTUyBuZXcgUmVnRXhwKEFycmF5KDUwMDAwKS5qb2luKCIoIikgKyAiYSIgKyBB
cnJheSg1MDAwMCkuam9pbigiKSIpKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IE91dCBvZiBtZW1v
cnk6IEludmFsaWQgcmVndWxhciBleHByZXNzaW9uOiB0b28gbWFueSBuZXN0ZWQgZGlzanVuY3Rp
b25zLgorUEFTUyBuZXcgUmVnRXhwKEFycmF5KDUwMDAwMCkuam9pbigiKCIpICsgImEiICsgQXJy
YXkoNTAwMDAwKS5qb2luKCIpIikpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogT3V0IG9mIG1lbW9y
eTogSW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb246IHRvbyBtYW55IG5lc3RlZCBkaXNqdW5jdGlv
bnMuCiBDcmVhdGluZyBSZWdFeHAgYXQgZGVwdGggNTAKLVBBU1MgbmV3IFJlZ0V4cChBcnJheSg1
MDAwMCkuam9pbigiKCIpICsgImEiICsgQXJyYXkoNTAwMDApLmpvaW4oIikiKSkgdGhyZXcgZXhj
ZXB0aW9uIEVycm9yOiBPdXQgb2YgbWVtb3J5OiBJbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbjog
dG9vIG1hbnkgbmVzdGVkIGRpc2p1bmN0aW9ucy4KK1BBU1MgbmV3IFJlZ0V4cChBcnJheSg1MDAw
MDApLmpvaW4oIigiKSArICJhIiArIEFycmF5KDUwMDAwMCkuam9pbigiKSIpKSB0aHJldyBleGNl
cHRpb24gRXJyb3I6IE91dCBvZiBtZW1vcnk6IEludmFsaWQgcmVndWxhciBleHByZXNzaW9uOiB0
b28gbWFueSBuZXN0ZWQgZGlzanVuY3Rpb25zLgogQ3JlYXRpbmcgUmVnRXhwIGF0IGRlcHRoIDYw
Ci1QQVNTIG5ldyBSZWdFeHAoQXJyYXkoNTAwMDApLmpvaW4oIigiKSArICJhIiArIEFycmF5KDUw
MDAwKS5qb2luKCIpIikpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogT3V0IG9mIG1lbW9yeTogSW52
YWxpZCByZWd1bGFyIGV4cHJlc3Npb246IHRvbyBtYW55IG5lc3RlZCBkaXNqdW5jdGlvbnMuCitQ
QVNTIG5ldyBSZWdFeHAoQXJyYXkoNTAwMDAwKS5qb2luKCIoIikgKyAiYSIgKyBBcnJheSg1MDAw
MDApLmpvaW4oIikiKSkgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBPdXQgb2YgbWVtb3J5OiBJbnZh
bGlkIHJlZ3VsYXIgZXhwcmVzc2lvbjogdG9vIG1hbnkgbmVzdGVkIGRpc2p1bmN0aW9ucy4KIENy
ZWF0aW5nIFJlZ0V4cCBhdCBkZXB0aCA3MAotUEFTUyBuZXcgUmVnRXhwKEFycmF5KDUwMDAwKS5q
b2luKCIoIikgKyAiYSIgKyBBcnJheSg1MDAwMCkuam9pbigiKSIpKSB0aHJldyBleGNlcHRpb24g
RXJyb3I6IE91dCBvZiBtZW1vcnk6IEludmFsaWQgcmVndWxhciBleHByZXNzaW9uOiB0b28gbWFu
eSBuZXN0ZWQgZGlzanVuY3Rpb25zLgorUEFTUyBuZXcgUmVnRXhwKEFycmF5KDUwMDAwMCkuam9p
bigiKCIpICsgImEiICsgQXJyYXkoNTAwMDAwKS5qb2luKCIpIikpIHRocmV3IGV4Y2VwdGlvbiBF
cnJvcjogT3V0IG9mIG1lbW9yeTogSW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb246IHRvbyBtYW55
IG5lc3RlZCBkaXNqdW5jdGlvbnMuCiBDcmVhdGluZyBSZWdFeHAgYXQgZGVwdGggODAKLVBBU1Mg
bmV3IFJlZ0V4cChBcnJheSg1MDAwMCkuam9pbigiKCIpICsgImEiICsgQXJyYXkoNTAwMDApLmpv
aW4oIikiKSkgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBPdXQgb2YgbWVtb3J5OiBJbnZhbGlkIHJl
Z3VsYXIgZXhwcmVzc2lvbjogdG9vIG1hbnkgbmVzdGVkIGRpc2p1bmN0aW9ucy4KK1BBU1MgbmV3
IFJlZ0V4cChBcnJheSg1MDAwMDApLmpvaW4oIigiKSArICJhIiArIEFycmF5KDUwMDAwMCkuam9p
bigiKSIpKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IE91dCBvZiBtZW1vcnk6IEludmFsaWQgcmVn
dWxhciBleHByZXNzaW9uOiB0b28gbWFueSBuZXN0ZWQgZGlzanVuY3Rpb25zLgogQ3JlYXRpbmcg
UmVnRXhwIGF0IGRlcHRoIDkwCi1QQVNTIG5ldyBSZWdFeHAoQXJyYXkoNTAwMDApLmpvaW4oIigi
KSArICJhIiArIEFycmF5KDUwMDAwKS5qb2luKCIpIikpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjog
T3V0IG9mIG1lbW9yeTogSW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb246IHRvbyBtYW55IG5lc3Rl
ZCBkaXNqdW5jdGlvbnMuCitQQVNTIG5ldyBSZWdFeHAoQXJyYXkoNTAwMDAwKS5qb2luKCIoIikg
KyAiYSIgKyBBcnJheSg1MDAwMDApLmpvaW4oIikiKSkgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBP
dXQgb2YgbWVtb3J5OiBJbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbjogdG9vIG1hbnkgbmVzdGVk
IGRpc2p1bmN0aW9ucy4KIENyZWF0aW5nIFJlZ0V4cCBhdCBkZXB0aCAxMDAKLVBBU1MgbmV3IFJl
Z0V4cChBcnJheSg1MDAwMCkuam9pbigiKCIpICsgImEiICsgQXJyYXkoNTAwMDApLmpvaW4oIiki
KSkgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBPdXQgb2YgbWVtb3J5OiBJbnZhbGlkIHJlZ3VsYXIg
ZXhwcmVzc2lvbjogdG9vIG1hbnkgbmVzdGVkIGRpc2p1bmN0aW9ucy4KLVBBU1MgbmV3IFJlZ0V4
cChleHByZXNzaW9uKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IE91dCBvZiBtZW1vcnk6IEludmFs
aWQgcmVndWxhciBleHByZXNzaW9uOiB0b28gbWFueSBuZXN0ZWQgZGlzanVuY3Rpb25zLgorUEFT
UyBuZXcgUmVnRXhwKEFycmF5KDUwMDAwMCkuam9pbigiKCIpICsgImEiICsgQXJyYXkoNTAwMDAw
KS5qb2luKCIpIikpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogT3V0IG9mIG1lbW9yeTogSW52YWxp
ZCByZWd1bGFyIGV4cHJlc3Npb246IHRvbyBtYW55IG5lc3RlZCBkaXNqdW5jdGlvbnMuCitQQVNT
IG5ldyBSZWdFeHAoZXhwcmVzc2lvbikgdGhyZXcgZXhjZXB0aW9uIFN5bnRheEVycm9yOiBJbnZh
bGlkIHJlZ3VsYXIgZXhwcmVzc2lvbjogcmVndWxhciBleHByZXNzaW9uIHRvbyBsYXJnZS4KIFBB
U1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIAogVEVTVCBDT01QTEVURQpJbmRleDogTGF5
b3V0VGVzdHMvanMvc2NyaXB0LXRlc3RzL3N0YWNrLW92ZXJmbG93LXJlZ2V4cC5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvc3RhY2stb3ZlcmZsb3ctcmVnZXhw
LmpzCShyZXZpc2lvbiAyNTg5ODcpCisrKyBMYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvc3Rh
Y2stb3ZlcmZsb3ctcmVnZXhwLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE1ICsxLDE2IEBACiAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkwNzU1CiAvL0Agc2tp
cCBpZiAkYXJjaGl0ZWN0dXJlID09ICJhcm0iIGFuZCAkaG9zdE9TID09ICJsaW51eCIKKy8vICAm
JiYmCiBkZXNjcmlwdGlvbignVGVzdCB0aGF0IHdlIGRvIG5vdCBvdmVyZmxvdyB0aGUgc3RhY2sg
d2hpbGUgaGFuZGxpbmcgcmVndWxhciBleHByZXNzaW9ucycpOwogCiAvLyBCYXNlIGNhc2UuCi1z
aG91bGRUaHJvdygnbmV3IFJlZ0V4cChBcnJheSg1MDAwMCkuam9pbigiKCIpICsgImEiICsgQXJy
YXkoNTAwMDApLmpvaW4oIikiKSknLCAnIkVycm9yOiBPdXQgb2YgbWVtb3J5OiBJbnZhbGlkIHJl
Z3VsYXIgZXhwcmVzc2lvbjogdG9vIG1hbnkgbmVzdGVkIGRpc2p1bmN0aW9ucyInKTsKK3Nob3Vs
ZFRocm93KCduZXcgUmVnRXhwKEFycmF5KDUwMDAwMCkuam9pbigiKCIpICsgImEiICsgQXJyYXko
NTAwMDAwKS5qb2luKCIpIikpJywgJyJFcnJvcjogT3V0IG9mIG1lbW9yeTogSW52YWxpZCByZWd1
bGFyIGV4cHJlc3Npb246IHRvbyBtYW55IG5lc3RlZCBkaXNqdW5jdGlvbnMiJyk7CiAKIHsgLy8g
VmVyaWZ5IHRoYXQgYSBkZWVwIEpTIHN0YWNrIGRvZXMgbm90IGhlbHAgYXZvaWRpbmcgdGhlIGVy
cm9yLgogICAgIGZ1bmN0aW9uIHJlY3Vyc2l2ZUNhbGwoZGVwdGgpIHsKICAgICAgICAgaWYgKCEo
ZGVwdGggJSAxMCkpIHsKICAgICAgICAgICAgIGRlYnVnKCJDcmVhdGluZyBSZWdFeHAgYXQgZGVw
dGggIiArIGRlcHRoKTsKLSAgICAgICAgICAgIHNob3VsZFRocm93KCduZXcgUmVnRXhwKEFycmF5
KDUwMDAwKS5qb2luKCIoIikgKyAiYSIgKyBBcnJheSg1MDAwMCkuam9pbigiKSIpKScsICciRXJy
b3I6IE91dCBvZiBtZW1vcnk6IEludmFsaWQgcmVndWxhciBleHByZXNzaW9uOiB0b28gbWFueSBu
ZXN0ZWQgZGlzanVuY3Rpb25zIicpOworICAgICAgICAgICAgc2hvdWxkVGhyb3coJ25ldyBSZWdF
eHAoQXJyYXkoNTAwMDAwKS5qb2luKCIoIikgKyAiYSIgKyBBcnJheSg1MDAwMDApLmpvaW4oIiki
KSknLCAnIkVycm9yOiBPdXQgb2YgbWVtb3J5OiBJbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbjog
dG9vIG1hbnkgbmVzdGVkIGRpc2p1bmN0aW9ucyInKTsKICAgICAgICAgfQogICAgICAgICBpZiAo
ZGVwdGggPCAxMDApIHsKICAgICAgICAgICAgIHJlY3Vyc2l2ZUNhbGwoZGVwdGggKyAxKTsKQEAg
LTIwLDEyICsyMSwxMiBAQCBzaG91bGRUaHJvdygnbmV3IFJlZ0V4cChBcnJheSg1MDAwMCkuam9p
CiAKIHsgLy8gSGF2ZSB0aGUgZGVlcGVzdCBuZXN0ZWQgc3VicGF0dGVybiBzdXJyb3VuZGVkIGJ5
IG90aGVyIGV4cHJlc3Npb25zLgogICAgIHZhciBleHByZXNzaW9uID0gIiI7Ci0gICAgZm9yIChs
ZXQgaSA9IDA7IGkgPCA1MDAwMDsgKytpKSB7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA1MDAw
MDA7ICsraSkgewogICAgICAgICBleHByZXNzaW9uICs9ICIoKGEpKCI7CiAgICAgfQogICAgIGV4
cHJlc3Npb24gKz0gImIiOwotICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNTAwMDA7ICsraSkgewor
ICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNTAwMDAwOyArK2kpIHsKICAgICAgICAgZXhwcmVzc2lv
biArPSAiKShjKSkiOwogICAgIH0KLSAgICBzaG91bGRUaHJvdygnbmV3IFJlZ0V4cChleHByZXNz
aW9uKScsICciRXJyb3I6IE91dCBvZiBtZW1vcnk6IEludmFsaWQgcmVndWxhciBleHByZXNzaW9u
OiB0b28gbWFueSBuZXN0ZWQgZGlzanVuY3Rpb25zIicpOworICAgIHNob3VsZFRocm93KCduZXcg
UmVnRXhwKGV4cHJlc3Npb24pJywgJyJTeW50YXhFcnJvcjogSW52YWxpZCByZWd1bGFyIGV4cHJl
c3Npb246IHJlZ3VsYXIgZXhwcmVzc2lvbiB0b28gbGFyZ2UiJyk7CiB9Cg==
</data>
<flag name="review"
          id="409924"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
      

    </bug>

</bugzilla>