<?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>220322</bug_id>
          
          <creation_ts>2021-01-05 05:12:34 -0800</creation_ts>
          <short_desc>BooleanConstructor should be inlined in DFG / FTL</short_desc>
          <delta_ts>2021-03-06 22:54:30 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>Trivial</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Shvayka">ashvayka</reporter>
          <assigned_to name="Alexey Shvayka">ashvayka</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>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1717284</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2021-01-05 05:12:34 -0800</bug_when>
    <thetext>BooleanConstructor should be inlined in DFG / FTL</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717290</commentid>
    <comment_count>1</comment_count>
      <attachid>416996</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2021-01-05 05:25:13 -0800</bug_when>
    <thetext>Created attachment 416996
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717292</commentid>
    <comment_count>2</comment_count>
      <attachid>416996</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2021-01-05 05:27:15 -0800</bug_when>
    <thetext>Comment on attachment 416996
Patch

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

&gt; Source/JavaScriptCore/ChangeLog:8
&gt; +        `array.filter(Boolean)` is a rather popular idiom for compacting an array (removing falsy items).

For example https://github.com/you-dont-need/You-Dont-Need-Lodash-Underscore#_compact

&gt; Source/JavaScriptCore/ChangeLog:18
&gt; +        This change advances provided microbenchmark by 110%, and is neutral for other ToBoolean cases.

                                           r270932                    patch                                       

array-filter-boolean-constructor      130.0720+-2.7747     ^     61.4302+-1.1755        ^ definitely 2.1174x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717430</commentid>
    <comment_count>3</comment_count>
      <attachid>416996</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-01-05 12:24:25 -0800</bug_when>
    <thetext>Comment on attachment 416996
Patch

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

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:1803
&gt; +void SpeculativeJIT::compileToBooleanObjectOrOther(Edge nodeUse, bool invert)

While this function cares about masqueradesAsUndefined, I don&apos;t think this is necessary for Boolean constructor.
Can you change the following things?

1. Let&apos;s change ToBoolean DFG node to CallBooleanConstructor node to make it more explicit that this is boolean constructor call (ToBoolean sounds like we should care masqueradesAsUndefined too).
2. Let&apos;s remove masqueradesAsUndefined handlings for CallBooleanConstructor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717562</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2021-01-05 17:38:13 -0800</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #3)
&gt; While this function cares about masqueradesAsUndefined, I don&apos;t think this
&gt; is necessary for Boolean constructor.

Sadly, it is necessary: Annex B for [[IsHTMLDDA]] modifies ToBoolean operation itself: https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot-to-boolean.
Chrome and Firefox follow it for `Boolean(document.all) =&gt; false`, as does this patch.
Updated stress tests do cover masqueraders, I will make sure to note this in ChangeLog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717574</commentid>
    <comment_count>5</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-01-05 19:23:16 -0800</bug_when>
    <thetext>Oh, wow! Fun…</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717605</commentid>
    <comment_count>6</comment_count>
      <attachid>416996</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-01-06 01:25:08 -0800</bug_when>
    <thetext>Comment on attachment 416996
Patch

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

Looks good. But putting r- since I found several bugs.

&gt; Source/JavaScriptCore/ChangeLog:20
&gt; +        * dfg/DFGAbstractInterpreterInlines.h:

Yeah, please add notes about masquerade as undefined thing in ChangeLog, and please add tests for that :)
That&apos;s awesome.

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:1538
&gt;          GPRTemporary result(this, Reuse, value);
&gt; -        m_jit.xor32(TrustedImm32(1), value.gpr(), result.gpr());
&gt; +        if (invert)
&gt; +            m_jit.xor32(TrustedImm32(1), value.gpr(), result.gpr());
&gt;          booleanResult(result.gpr(), node);

Reuse is &quot;Reuse if it is possible&quot; If node-&gt;child1&apos;s use count is not zero at this point, GPRTemporary allocates a new register.
So, if you do not move value to result, result can contain a garbage.

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:1905
&gt;              GPRTemporary result(this, Reuse, value);

While this is old code, I wonder if SpeculateBooleanOperand is correct here.
Can you check what format is generated from SpeculateBooleanOperand? JSValue? Or 0/1?
Maybe, in 64bit, we never use DataFormatBoolean in DFG?

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:1924
&gt; +        if (invert)
&gt; +            m_jit.xor64(TrustedImm32(JSValue::ValueTrue), result.gpr());

Is it correct? If `invert` is false, is result the JSValue format? I think result is 0/1 at this point, and it is not JSBoolean.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1718968</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-01-12 05:13:13 -0800</bug_when>
    <thetext>&lt;rdar://problem/73036835&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1735270</commentid>
    <comment_count>8</comment_count>
      <attachid>422080</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2021-03-03 07:41:20 -0800</bug_when>
    <thetext>Created attachment 422080
Patch

Move value into Reuse register, fix !invert case of BooleanUse, improve tests, and add note on masquerader to ChangeLog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1735271</commentid>
    <comment_count>9</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2021-03-03 07:49:33 -0800</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #6)

Thank you for meticulous review, Yusuke!

&gt; Yeah, please add notes about masquerade as undefined thing in ChangeLog, and
&gt; please add tests for that :)

Added.

&gt; Reuse is &quot;Reuse if it is possible&quot; If node-&gt;child1&apos;s use count is not zero
&gt; at this point, GPRTemporary allocates a new register.
&gt; So, if you do not move value to result, result can contain a garbage.

Fixed by emitting a `mov`, as we do in 64-bit version.

&gt; While this is old code, I wonder if SpeculateBooleanOperand is correct here.
&gt; Can you check what format is generated from SpeculateBooleanOperand?
&gt; JSValue? Or 0/1?

I can confirm it is JSValue, so XOR against 1 is correct.

&gt; Maybe, in 64bit, we never use DataFormatBoolean in DFG?

That seems to be the case.

&gt; &gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:1924
&gt; &gt; +        if (invert)
&gt; &gt; +            m_jit.xor64(TrustedImm32(JSValue::ValueTrue), result.gpr());
&gt; 
&gt; Is it correct? If `invert` is false, is result the JSValue format? I think
&gt; result is 0/1 at this point, and it is not JSBoolean.

Yeah, it was 0/1, and non-invert case was not covered by the tests.
I&apos;ve updated the coverage so it now crashes with previous patch, and fixed to XOR against JSValue::ValueFalse.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1735931</commentid>
    <comment_count>10</comment_count>
      <attachid>422080</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-03-04 10:57:13 -0800</bug_when>
    <thetext>Comment on attachment 422080
Patch

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

r=me

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:1539
&gt; +        m_jit.move(value.gpr(), result.gpr());
&gt; +        if (invert)
&gt; +            m_jit.xor32(TrustedImm32(1), value.gpr(), result.gpr());

Maybe,

if (invert)
    m_jit.xor32(TrustedImm32(1), value.gpr(), result.gpr());
else
    m_jit.move(value.gpr(), result.gpr());

is clearer.

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:1909
&gt;              m_jit.move(value.gpr(), result.gpr());
&gt; -            m_jit.xor64(TrustedImm32(true), result.gpr());
&gt; +            if (invert)
&gt; +                m_jit.xor64(TrustedImm32(1), result.gpr());

Ditto.

if (invert)
    m_jit.xor32(TrustedImm32(1), value.gpr(), result.gpr());
else
    m_jit.move(value.gpr(), result.gpr());</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1736796</commentid>
    <comment_count>11</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2021-03-06 06:42:47 -0800</bug_when>
    <thetext>Committed r274037 (234973@main): &lt;https://commits.webkit.org/234973@main&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1736798</commentid>
    <comment_count>12</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2021-03-06 06:52:14 -0800</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #10)
&gt; Maybe,
&gt; 
&gt; if (invert)
&gt;     m_jit.xor32(TrustedImm32(1), value.gpr(), result.gpr());
&gt; else
&gt;     m_jit.move(value.gpr(), result.gpr());
&gt; 
&gt; is clearer.

Nice suggestion, landed.

I wonder if there might be a bug because 32-bit compileToBoolean() has no path with type check for BooleanUse?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1736902</commentid>
    <comment_count>13</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-03-06 22:54:30 -0800</bug_when>
    <thetext>(In reply to Alexey Shvayka from comment #12)
&gt; (In reply to Yusuke Suzuki from comment #10)
&gt; &gt; Maybe,
&gt; &gt; 
&gt; &gt; if (invert)
&gt; &gt;     m_jit.xor32(TrustedImm32(1), value.gpr(), result.gpr());
&gt; &gt; else
&gt; &gt;     m_jit.move(value.gpr(), result.gpr());
&gt; &gt; 
&gt; &gt; is clearer.
&gt; 
&gt; Nice suggestion, landed.
&gt; 
&gt; I wonder if there might be a bug because 32-bit compileToBoolean() has no
&gt; path with type check for BooleanUse?

Isn&apos;t it checking the type with SpeculateBooleanOperand?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>416996</attachid>
            <date>2021-01-05 05:25:13 -0800</date>
            <delta_ts>2021-03-03 07:41:15 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-220322-20210105152512.patch</filename>
            <type>text/plain</type>
            <size>40552</size>
            <attacher name="Alexey Shvayka">ashvayka</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNzExNDUpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDIwIEBACisyMDIxLTAxLTA1ICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNo
QGdtYWlsLmNvbT4KKworICAgICAgICBCb29sZWFuQ29uc3RydWN0b3Igc2hvdWxkIGJlIGlubGlu
ZWQgaW4gREZHIC8gRlRMCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMjAzMjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBSZW9yZ2FuaXplIHRlc3RzIHRvIG1ha2Ugc3VyZSBldmVyeSBVc2VLaW5kIGlzIGNv
dmVyZWQuCisKKyAgICAgICAgKiBtaWNyb2JlbmNobWFya3MvYXJyYXktZmlsdGVyLWJvb2xlYW4t
Y29uc3RydWN0b3IuanM6IEFkZGVkLgorICAgICAgICAqIHN0cmVzcy9kZmctYnJhbmNoLmpzOiBB
ZGRlZC4KKyAgICAgICAgKiBzdHJlc3MvZGZnLXRvLWJvb2xlYW4uanM6IEFkZGVkLgorICAgICAg
ICAqIHN0cmVzcy9sb2dpY2FsLW5vdC1tYXNxdWVyYWRlcy1hcy11bmRlZmluZWQuanM6IFJlbW92
ZWQuCisgICAgICAgICogc3RyZXNzL2xvZ2ljYWwtbm90LW1hc3F1ZXJhZGVzLmpzOiBSZW1vdmVk
LgorICAgICAgICAqIHN0cmVzcy9sb2dpY2FsLW5vdC5qczogUmVtb3ZlZC4KKyAgICAgICAgKiBz
dHJlc3MvdmFsdWUtdG8tYm9vbGVhbi5qczogUmVtb3ZlZC4KKwogMjAyMS0wMS0wNSAgRG1pdHJ5
IEJlemhldHNrb3YgIDxkYmV6aGV0c2tvdkBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtXQVNNLVJl
ZmVyZW5jZXNdIEFkZGVkIGZldyB1bnJlYWNoZWQtaW52YWxpZCB0ZXN0cwpJbmRleDogSlNUZXN0
cy9taWNyb2JlbmNobWFya3MvYXJyYXktZmlsdGVyLWJvb2xlYW4tY29uc3RydWN0b3IuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSlNUZXN0cy9taWNyb2JlbmNobWFya3MvYXJyYXktZmlsdGVyLWJvb2xlYW4t
Y29uc3RydWN0b3IuanMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9taWNyb2JlbmNobWFya3Mv
YXJyYXktZmlsdGVyLWJvb2xlYW4tY29uc3RydWN0b3IuanMJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxMiBAQAorKGZ1bmN0aW9uKCkgeworICAgIHZhciBhcnJheSA9IG5ldyBBcnJheSgzMDAp
OworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMzAwOyBpKyspCisgICAgICAgIGFycmF5W2ldID0g
aSAlIDEwOworCisgICAgdmFyIGNvbXBhY3RlZDsKKyAgICBmb3IgKHZhciBqID0gMDsgaiA8IDMw
MDAwOyBqKyspCisgICAgICAgIGNvbXBhY3RlZCA9IGFycmF5LmZpbHRlcihCb29sZWFuKTsKKwor
ICAgIGlmIChjb21wYWN0ZWQubGVuZ3RoICE9PSAyNzApCisgICAgICAgIHRocm93IG5ldyBFcnJv
cigiQmFkIGFzc2VydCEiKTsKK30pKCk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9kZmctYnJhbmNo
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL2RmZy1icmFuY2guanMJKG5vbmV4aXN0
ZW50KQorKysgSlNUZXN0cy9zdHJlc3MvZGZnLWJyYW5jaC5qcwkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDE1MyBAQAorLy9AIGlmICRidWlsZFR5cGUgPT0gInJlbGVhc2UiIHRoZW4gcnVuRGVm
YXVsdCBlbHNlIHNraXAgZW5kCisKK2Z1bmN0aW9uIHNob3VsZEJlKGFjdHVhbCwgZXhwZWN0ZWQp
IHsKKyAgICBpZiAoYWN0dWFsICE9PSBleHBlY3RlZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9y
KGBCYWQgdmFsdWU6ICR7YWN0dWFsfSFgKTsKK30KK25vSW5saW5lKHNob3VsZEJlKTsKKworKGZ1
bmN0aW9uIE9iamVjdE9yT3RoZXJVc2UoKSB7CisgICAgZnVuY3Rpb24gdGVzdDEoeCkgeyBpZiAo
eCkgcmV0dXJuIHRydWU7IGVsc2UgcmV0dXJuIGZhbHNlOyB9CisgICAgZnVuY3Rpb24gdGVzdDIo
eCkgeyByZXR1cm4geCA/IHRydWUgOiBmYWxzZTsgfQorICAgIGZ1bmN0aW9uIHRlc3RJbnZlcnQo
eCkgeyBpZiAoIXgpIHJldHVybiB0cnVlOyBlbHNlIHJldHVybiBmYWxzZTsgfQorCisgICAgbm9J
bmxpbmUodGVzdDEpOworICAgIG5vSW5saW5lKHRlc3QyKTsKKyAgICBub0lubGluZSh0ZXN0SW52
ZXJ0KTsKKworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMWU1OyBpKyspIHsKKyAgICAgICAgc2hv
dWxkQmUodGVzdDEodW5kZWZpbmVkKSwgZmFsc2UpOworICAgICAgICBzaG91bGRCZSh0ZXN0MSh7
fSksIHRydWUpOworICAgICAgICBzaG91bGRCZSh0ZXN0MihbXSksIHRydWUpOworICAgICAgICBz
aG91bGRCZSh0ZXN0MihtYWtlTWFzcXVlcmFkZXIoKSksIGZhbHNlKTsKKyAgICAgICAgc2hvdWxk
QmUodGVzdEludmVydChuZXcgU3RyaW5nKCIiKSksIGZhbHNlKTsKKyAgICAgICAgc2hvdWxkQmUo
dGVzdEludmVydChudWxsKSwgdHJ1ZSk7CisgICAgfQorfSkoKTsKKworKGZ1bmN0aW9uIEludDMy
VXNlKCkgeworICAgIGZ1bmN0aW9uIHRlc3QxKHgpIHsgaWYgKHgpIHJldHVybiB0cnVlOyBlbHNl
IHJldHVybiBmYWxzZTsgfQorICAgIGZ1bmN0aW9uIHRlc3QyKHgpIHsgcmV0dXJuIHggPyB0cnVl
IDogZmFsc2U7IH0KKyAgICBmdW5jdGlvbiB0ZXN0SW52ZXJ0KHgpIHsgaWYgKCF4KSByZXR1cm4g
dHJ1ZTsgZWxzZSByZXR1cm4gZmFsc2U7IH0KKworICAgIG5vSW5saW5lKHRlc3QxKTsKKyAgICBu
b0lubGluZSh0ZXN0Mik7CisgICAgbm9JbmxpbmUodGVzdEludmVydCk7CisKKyAgICBmb3IgKGxl
dCBpID0gMDsgaSA8IDFlNTsgaSsrKSB7CisgICAgICAgIHNob3VsZEJlKHRlc3QxKDEpLCB0cnVl
KTsKKyAgICAgICAgc2hvdWxkQmUodGVzdDIoMCksIGZhbHNlKTsKKyAgICAgICAgc2hvdWxkQmUo
dGVzdDIoMjE0NzQ4MzY0NyksIHRydWUpOworICAgICAgICBzaG91bGRCZSh0ZXN0SW52ZXJ0KC0y
MTQ3NDgzNjQ4KSwgZmFsc2UpOworICAgIH0KK30pKCk7CisKKyhmdW5jdGlvbiBEb3VibGVSZXBV
c2UoKSB7CisgICAgZnVuY3Rpb24gdGVzdDEoeCkgeyBpZiAoeCkgcmV0dXJuIHRydWU7IGVsc2Ug
cmV0dXJuIGZhbHNlOyB9CisgICAgZnVuY3Rpb24gdGVzdDIoeCkgeyByZXR1cm4geCA/IHRydWUg
OiBmYWxzZTsgfQorICAgIGZ1bmN0aW9uIHRlc3RJbnZlcnQoeCkgeyBpZiAoIXgpIHJldHVybiB0
cnVlOyBlbHNlIHJldHVybiBmYWxzZTsgfQorCisgICAgbm9JbmxpbmUodGVzdDEpOworICAgIG5v
SW5saW5lKHRlc3QyKTsKKyAgICBub0lubGluZSh0ZXN0SW52ZXJ0KTsKKworICAgIGZvciAobGV0
IGkgPSAwOyBpIDwgMWU1OyBpKyspIHsKKyAgICAgICAgc2hvdWxkQmUodGVzdDEoMC41KSwgdHJ1
ZSk7CisgICAgICAgIHNob3VsZEJlKHRlc3QxKC1JbmZpbml0eSksIHRydWUpOworICAgICAgICBz
aG91bGRCZSh0ZXN0MigtMCksIGZhbHNlKTsKKyAgICAgICAgc2hvdWxkQmUodGVzdEludmVydChO
YU4pLCB0cnVlKTsKKyAgICB9Cit9KSgpOworCisoZnVuY3Rpb24gQm9vbGVhblVzZSgpIHsKKyAg
ICBmdW5jdGlvbiB0ZXN0MSh4KSB7IGlmICh4KSByZXR1cm4gdHJ1ZTsgZWxzZSByZXR1cm4gZmFs
c2U7IH0KKyAgICBmdW5jdGlvbiB0ZXN0Mih4KSB7IHJldHVybiB4ID8gdHJ1ZSA6IGZhbHNlOyB9
CisgICAgZnVuY3Rpb24gdGVzdEludmVydCh4KSB7IGlmICgheCkgcmV0dXJuIHRydWU7IGVsc2Ug
cmV0dXJuIGZhbHNlOyB9CisKKyAgICBub0lubGluZSh0ZXN0MSk7CisgICAgbm9JbmxpbmUodGVz
dDIpOworICAgIG5vSW5saW5lKHRlc3RJbnZlcnQpOworCisgICAgZm9yIChsZXQgaSA9IDA7IGkg
PCAxZTU7IGkrKykgeworICAgICAgICBzaG91bGRCZSh0ZXN0MSh0cnVlKSwgdHJ1ZSk7CisgICAg
ICAgIHNob3VsZEJlKCF0ZXN0MShmYWxzZSksIHRydWUpOworICAgICAgICBzaG91bGRCZSghdGVz
dDIodHJ1ZSksIGZhbHNlKTsKKyAgICAgICAgc2hvdWxkQmUodGVzdDIoZmFsc2UpLCBmYWxzZSk7
CisgICAgICAgIHNob3VsZEJlKHRlc3RJbnZlcnQodHJ1ZSksIGZhbHNlKTsKKyAgICAgICAgc2hv
dWxkQmUoIXRlc3RJbnZlcnQoZmFsc2UpLCBmYWxzZSk7CisgICAgfQorfSkoKTsKKworKGZ1bmN0
aW9uIFVudHlwZWRVc2UoKSB7CisgICAgZnVuY3Rpb24gdGVzdDEoeCkgeyBpZiAoeCkgcmV0dXJu
IHRydWU7IGVsc2UgcmV0dXJuIGZhbHNlOyB9CisgICAgZnVuY3Rpb24gdGVzdDIoeCkgeyByZXR1
cm4geCA/IHRydWUgOiBmYWxzZTsgfQorICAgIGZ1bmN0aW9uIHRlc3RJbnZlcnQoeCkgeyBpZiAo
IXgpIHJldHVybiB0cnVlOyBlbHNlIHJldHVybiBmYWxzZTsgfQorCisgICAgbm9JbmxpbmUodGVz
dDEpOworICAgIG5vSW5saW5lKHRlc3QyKTsKKyAgICBub0lubGluZSh0ZXN0SW52ZXJ0KTsKKwor
ICAgIGNvbnN0IHRlc3RDYXNlcyA9IFsKKyAgICAgICAgW3VuZGVmaW5lZCwgZmFsc2VdLAorICAg
ICAgICBbbnVsbCwgZmFsc2VdLAorICAgICAgICBbMCwgZmFsc2VdLAorICAgICAgICBbMjE0NzQ4
MzY0NywgdHJ1ZV0sCisgICAgICAgIFtmYWxzZSwgZmFsc2VdLAorICAgICAgICBbdHJ1ZSwgdHJ1
ZV0sCisgICAgICAgIFsiIiArICIiICsgIiIsIGZhbHNlXSwKKyAgICAgICAgWyJmb28iLCB0cnVl
XSwKKyAgICAgICAgWy0wLCBmYWxzZV0sCisgICAgICAgIFszLjE0LCB0cnVlXSwKKyAgICAgICAg
W05hTiwgZmFsc2VdLAorICAgICAgICBbSW5maW5pdHksIHRydWVdLAorICAgICAgICBbU3ltYm9s
KCksIHRydWVdLAorICAgICAgICBbe30sIHRydWVdLAorICAgICAgICBbW10sIHRydWVdLAorICAg
ICAgICBbZnVuY3Rpb24oKSB7fSwgdHJ1ZV0sCisgICAgICAgIFttYWtlTWFzcXVlcmFkZXIoKSwg
ZmFsc2VdLAorICAgIF07CisKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDFlNTsgaSsrKSB7Cisg
ICAgICAgIGZvciAoY29uc3QgW3ZhbHVlLCBleHBlY3RlZF0gb2YgdGVzdENhc2VzKSB7CisgICAg
ICAgICAgICBzaG91bGRCZSh0ZXN0MSh2YWx1ZSksIGV4cGVjdGVkKTsKKyAgICAgICAgICAgIHNo
b3VsZEJlKHRlc3QyKHZhbHVlKSwgZXhwZWN0ZWQpOworICAgICAgICAgICAgc2hvdWxkQmUodGVz
dEludmVydCh2YWx1ZSksICFleHBlY3RlZCk7CisgICAgICAgIH0KKyAgICB9Cit9KSgpOworCiso
ZnVuY3Rpb24gU3RyaW5nVXNlKCkgeworICAgIGZ1bmN0aW9uIHRlc3QxKHgpIHsgaWYgKHgpIHJl
dHVybiB0cnVlOyBlbHNlIHJldHVybiBmYWxzZTsgfQorICAgIGZ1bmN0aW9uIHRlc3QyKHgpIHsg
cmV0dXJuIHggPyB0cnVlIDogZmFsc2U7IH0KKyAgICBmdW5jdGlvbiB0ZXN0SW52ZXJ0KHgpIHsg
aWYgKCF4KSByZXR1cm4gdHJ1ZTsgZWxzZSByZXR1cm4gZmFsc2U7IH0KKworICAgIG5vSW5saW5l
KHRlc3QxKTsKKyAgICBub0lubGluZSh0ZXN0Mik7CisgICAgbm9JbmxpbmUodGVzdEludmVydCk7
CisKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDFlNTsgaSsrKSB7CisgICAgICAgIHNob3VsZEJl
KHRlc3QxKCJcMCIpLCB0cnVlKTsKKyAgICAgICAgc2hvdWxkQmUodGVzdDIoIiIpLCBmYWxzZSk7
CisgICAgICAgIHNob3VsZEJlKHRlc3RJbnZlcnQoIiIgKyAiIiArICIiKSwgdHJ1ZSk7CisgICAg
ICAgIHNob3VsZEJlKHRlc3RJbnZlcnQoImZvbyIgKyAiZm9vIiArICJmb28iKSwgZmFsc2UpOwor
ICAgIH0KK30pKCk7CisKKyhmdW5jdGlvbiBTdHJpbmdPck90aGVyVXNlKCkgeworICAgIGZ1bmN0
aW9uIHRlc3QxKHgpIHsgaWYgKHgpIHJldHVybiB0cnVlOyBlbHNlIHJldHVybiBmYWxzZTsgfQor
ICAgIGZ1bmN0aW9uIHRlc3QyKHgpIHsgcmV0dXJuIHggPyB0cnVlIDogZmFsc2U7IH0KKyAgICBm
dW5jdGlvbiB0ZXN0SW52ZXJ0KHgpIHsgaWYgKCF4KSByZXR1cm4gdHJ1ZTsgZWxzZSByZXR1cm4g
ZmFsc2U7IH0KKworICAgIG5vSW5saW5lKHRlc3QxKTsKKyAgICBub0lubGluZSh0ZXN0Mik7Cisg
ICAgbm9JbmxpbmUodGVzdEludmVydCk7CisKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDFlNTsg
aSsrKSB7CisgICAgICAgIHNob3VsZEJlKHRlc3QxKCIiICsgIiIgKyAiIiksIGZhbHNlKTsKKyAg
ICAgICAgc2hvdWxkQmUodGVzdDEobnVsbCksIGZhbHNlKTsKKyAgICAgICAgc2hvdWxkQmUodGVz
dDIoImZvbyIpLCB0cnVlKTsKKyAgICAgICAgc2hvdWxkQmUodGVzdDIodW5kZWZpbmVkKSwgZmFs
c2UpOworICAgICAgICBzaG91bGRCZSh0ZXN0SW52ZXJ0KCIiKSwgdHJ1ZSk7CisgICAgICAgIHNo
b3VsZEJlKHRlc3RJbnZlcnQobnVsbCksIHRydWUpOworICAgIH0KK30pKCk7CkluZGV4OiBKU1Rl
c3RzL3N0cmVzcy9kZmctdG8tYm9vbGVhbi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVz
cy9kZmctdG8tYm9vbGVhbi5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL3N0cmVzcy9kZmct
dG8tYm9vbGVhbi5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1MyBAQAorLy9AIGlmICRi
dWlsZFR5cGUgPT0gInJlbGVhc2UiIHRoZW4gcnVuRGVmYXVsdCBlbHNlIHNraXAgZW5kCisKK2Z1
bmN0aW9uIHNob3VsZEJlKGFjdHVhbCwgZXhwZWN0ZWQpIHsKKyAgICBpZiAoYWN0dWFsICE9PSBl
eHBlY3RlZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBCYWQgdmFsdWU6ICR7YWN0dWFsfSFg
KTsKK30KK25vSW5saW5lKHNob3VsZEJlKTsKKworKGZ1bmN0aW9uIE9iamVjdE9yT3RoZXJVc2Uo
KSB7CisgICAgZnVuY3Rpb24gdGVzdDEoeCkgeyByZXR1cm4gISF4OyB9CisgICAgZnVuY3Rpb24g
dGVzdDIoeCkgeyByZXR1cm4gQm9vbGVhbih4KTsgfQorICAgIGZ1bmN0aW9uIHRlc3RJbnZlcnQo
eCkgeyByZXR1cm4gIXg7IH0KKworICAgIG5vSW5saW5lKHRlc3QxKTsKKyAgICBub0lubGluZSh0
ZXN0Mik7CisgICAgbm9JbmxpbmUodGVzdEludmVydCk7CisKKyAgICBmb3IgKGxldCBpID0gMDsg
aSA8IDFlNTsgaSsrKSB7CisgICAgICAgIHNob3VsZEJlKHRlc3QxKHVuZGVmaW5lZCksIGZhbHNl
KTsKKyAgICAgICAgc2hvdWxkQmUodGVzdDEoe30pLCB0cnVlKTsKKyAgICAgICAgc2hvdWxkQmUo
dGVzdDIoW10pLCB0cnVlKTsKKyAgICAgICAgc2hvdWxkQmUodGVzdDIobWFrZU1hc3F1ZXJhZGVy
KCkpLCBmYWxzZSk7CisgICAgICAgIHNob3VsZEJlKHRlc3RJbnZlcnQobmV3IFN0cmluZygiIikp
LCBmYWxzZSk7CisgICAgICAgIHNob3VsZEJlKHRlc3RJbnZlcnQobnVsbCksIHRydWUpOworICAg
IH0KK30pKCk7CisKKyhmdW5jdGlvbiBJbnQzMlVzZSgpIHsKKyAgICBmdW5jdGlvbiB0ZXN0MSh4
KSB7IHJldHVybiAhIXg7IH0KKyAgICBmdW5jdGlvbiB0ZXN0Mih4KSB7IHJldHVybiBCb29sZWFu
KHgpOyB9CisgICAgZnVuY3Rpb24gdGVzdEludmVydCh4KSB7IHJldHVybiAheDsgfQorCisgICAg
bm9JbmxpbmUodGVzdDEpOworICAgIG5vSW5saW5lKHRlc3QyKTsKKyAgICBub0lubGluZSh0ZXN0
SW52ZXJ0KTsKKworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMWU1OyBpKyspIHsKKyAgICAgICAg
c2hvdWxkQmUodGVzdDEoMSksIHRydWUpOworICAgICAgICBzaG91bGRCZSh0ZXN0MigwKSwgZmFs
c2UpOworICAgICAgICBzaG91bGRCZSh0ZXN0MigyMTQ3NDgzNjQ3KSwgdHJ1ZSk7CisgICAgICAg
IHNob3VsZEJlKHRlc3RJbnZlcnQoLTIxNDc0ODM2NDgpLCBmYWxzZSk7CisgICAgfQorfSkoKTsK
KworKGZ1bmN0aW9uIERvdWJsZVJlcFVzZSgpIHsKKyAgICBmdW5jdGlvbiB0ZXN0MSh4KSB7IHJl
dHVybiAhIXg7IH0KKyAgICBmdW5jdGlvbiB0ZXN0Mih4KSB7IHJldHVybiBCb29sZWFuKHgpOyB9
CisgICAgZnVuY3Rpb24gdGVzdEludmVydCh4KSB7IHJldHVybiAheDsgfQorCisgICAgbm9Jbmxp
bmUodGVzdDEpOworICAgIG5vSW5saW5lKHRlc3QyKTsKKyAgICBub0lubGluZSh0ZXN0SW52ZXJ0
KTsKKworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMWU1OyBpKyspIHsKKyAgICAgICAgc2hvdWxk
QmUodGVzdDEoMC41KSwgdHJ1ZSk7CisgICAgICAgIHNob3VsZEJlKHRlc3QxKC1JbmZpbml0eSks
IHRydWUpOworICAgICAgICBzaG91bGRCZSh0ZXN0MigtMCksIGZhbHNlKTsKKyAgICAgICAgc2hv
dWxkQmUodGVzdEludmVydChOYU4pLCB0cnVlKTsKKyAgICB9Cit9KSgpOworCisoZnVuY3Rpb24g
Qm9vbGVhblVzZSgpIHsKKyAgICBmdW5jdGlvbiB0ZXN0MSh4KSB7IHJldHVybiAhIXg7IH0KKyAg
ICBmdW5jdGlvbiB0ZXN0Mih4KSB7IHJldHVybiBCb29sZWFuKHgpOyB9CisgICAgZnVuY3Rpb24g
dGVzdEludmVydCh4KSB7IHJldHVybiAheDsgfQorCisgICAgbm9JbmxpbmUodGVzdDEpOworICAg
IG5vSW5saW5lKHRlc3QyKTsKKyAgICBub0lubGluZSh0ZXN0SW52ZXJ0KTsKKworICAgIGZvciAo
bGV0IGkgPSAwOyBpIDwgMWU1OyBpKyspIHsKKyAgICAgICAgc2hvdWxkQmUodGVzdDEodHJ1ZSks
IHRydWUpOworICAgICAgICBzaG91bGRCZSghdGVzdDEoZmFsc2UpLCB0cnVlKTsKKyAgICAgICAg
c2hvdWxkQmUoIXRlc3QyKHRydWUpLCBmYWxzZSk7CisgICAgICAgIHNob3VsZEJlKHRlc3QyKGZh
bHNlKSwgZmFsc2UpOworICAgICAgICBzaG91bGRCZSh0ZXN0SW52ZXJ0KHRydWUpLCBmYWxzZSk7
CisgICAgICAgIHNob3VsZEJlKCF0ZXN0SW52ZXJ0KGZhbHNlKSwgZmFsc2UpOworICAgIH0KK30p
KCk7CisKKyhmdW5jdGlvbiBVbnR5cGVkVXNlKCkgeworICAgIGZ1bmN0aW9uIHRlc3QxKHgpIHsg
cmV0dXJuICEheDsgfQorICAgIGZ1bmN0aW9uIHRlc3QyKHgpIHsgcmV0dXJuIEJvb2xlYW4oeCk7
IH0KKyAgICBmdW5jdGlvbiB0ZXN0SW52ZXJ0KHgpIHsgcmV0dXJuICF4OyB9CisKKyAgICBub0lu
bGluZSh0ZXN0MSk7CisgICAgbm9JbmxpbmUodGVzdDIpOworICAgIG5vSW5saW5lKHRlc3RJbnZl
cnQpOworCisgICAgY29uc3QgdGVzdENhc2VzID0gWworICAgICAgICBbdW5kZWZpbmVkLCBmYWxz
ZV0sCisgICAgICAgIFtudWxsLCBmYWxzZV0sCisgICAgICAgIFswLCBmYWxzZV0sCisgICAgICAg
IFsyMTQ3NDgzNjQ3LCB0cnVlXSwKKyAgICAgICAgW2ZhbHNlLCBmYWxzZV0sCisgICAgICAgIFt0
cnVlLCB0cnVlXSwKKyAgICAgICAgWyIiICsgIiIgKyAiIiwgZmFsc2VdLAorICAgICAgICBbImZv
byIsIHRydWVdLAorICAgICAgICBbLTAsIGZhbHNlXSwKKyAgICAgICAgWzMuMTQsIHRydWVdLAor
ICAgICAgICBbTmFOLCBmYWxzZV0sCisgICAgICAgIFtJbmZpbml0eSwgdHJ1ZV0sCisgICAgICAg
IFtTeW1ib2woKSwgdHJ1ZV0sCisgICAgICAgIFt7fSwgdHJ1ZV0sCisgICAgICAgIFtbXSwgdHJ1
ZV0sCisgICAgICAgIFtmdW5jdGlvbigpIHt9LCB0cnVlXSwKKyAgICAgICAgW21ha2VNYXNxdWVy
YWRlcigpLCBmYWxzZV0sCisgICAgXTsKKworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMWU1OyBp
KyspIHsKKyAgICAgICAgZm9yIChjb25zdCBbdmFsdWUsIGV4cGVjdGVkXSBvZiB0ZXN0Q2FzZXMp
IHsKKyAgICAgICAgICAgIHNob3VsZEJlKHRlc3QxKHZhbHVlKSwgZXhwZWN0ZWQpOworICAgICAg
ICAgICAgc2hvdWxkQmUodGVzdDIodmFsdWUpLCBleHBlY3RlZCk7CisgICAgICAgICAgICBzaG91
bGRCZSh0ZXN0SW52ZXJ0KHZhbHVlKSwgIWV4cGVjdGVkKTsKKyAgICAgICAgfQorICAgIH0KK30p
KCk7CisKKyhmdW5jdGlvbiBTdHJpbmdVc2UoKSB7CisgICAgZnVuY3Rpb24gdGVzdDEoeCkgeyBy
ZXR1cm4gISF4OyB9CisgICAgZnVuY3Rpb24gdGVzdDIoeCkgeyByZXR1cm4gQm9vbGVhbih4KTsg
fQorICAgIGZ1bmN0aW9uIHRlc3RJbnZlcnQoeCkgeyByZXR1cm4gIXg7IH0KKworICAgIG5vSW5s
aW5lKHRlc3QxKTsKKyAgICBub0lubGluZSh0ZXN0Mik7CisgICAgbm9JbmxpbmUodGVzdEludmVy
dCk7CisKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDFlNTsgaSsrKSB7CisgICAgICAgIHNob3Vs
ZEJlKHRlc3QxKCJcMCIpLCB0cnVlKTsKKyAgICAgICAgc2hvdWxkQmUodGVzdDIoIiIpLCBmYWxz
ZSk7CisgICAgICAgIHNob3VsZEJlKHRlc3RJbnZlcnQoIiIgKyAiIiArICIiKSwgdHJ1ZSk7Cisg
ICAgICAgIHNob3VsZEJlKHRlc3RJbnZlcnQoImZvbyIgKyAiZm9vIiArICJmb28iKSwgZmFsc2Up
OworICAgIH0KK30pKCk7CisKKyhmdW5jdGlvbiBTdHJpbmdPck90aGVyVXNlKCkgeworICAgIGZ1
bmN0aW9uIHRlc3QxKHgpIHsgcmV0dXJuICEheDsgfQorICAgIGZ1bmN0aW9uIHRlc3QyKHgpIHsg
cmV0dXJuIEJvb2xlYW4oeCk7IH0KKyAgICBmdW5jdGlvbiB0ZXN0SW52ZXJ0KHgpIHsgcmV0dXJu
ICF4OyB9CisKKyAgICBub0lubGluZSh0ZXN0MSk7CisgICAgbm9JbmxpbmUodGVzdDIpOworICAg
IG5vSW5saW5lKHRlc3RJbnZlcnQpOworCisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxZTU7IGkr
KykgeworICAgICAgICBzaG91bGRCZSh0ZXN0MSgiIiArICIiICsgIiIpLCBmYWxzZSk7CisgICAg
ICAgIHNob3VsZEJlKHRlc3QxKG51bGwpLCBmYWxzZSk7CisgICAgICAgIHNob3VsZEJlKHRlc3Qy
KCJmb28iKSwgdHJ1ZSk7CisgICAgICAgIHNob3VsZEJlKHRlc3QyKHVuZGVmaW5lZCksIGZhbHNl
KTsKKyAgICAgICAgc2hvdWxkQmUodGVzdEludmVydCgiIiksIHRydWUpOworICAgICAgICBzaG91
bGRCZSh0ZXN0SW52ZXJ0KG51bGwpLCB0cnVlKTsKKyAgICB9Cit9KSgpOwpJbmRleDogSlNUZXN0
cy9zdHJlc3MvbG9naWNhbC1ub3QtbWFzcXVlcmFkZXMtYXMtdW5kZWZpbmVkLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEpTVGVzdHMvc3RyZXNzL2xvZ2ljYWwtbm90LW1hc3F1ZXJhZGVzLWFzLXVuZGVmaW5l
ZC5qcwkocmV2aXNpb24gMjcxMTMxKQorKysgSlNUZXN0cy9zdHJlc3MvbG9naWNhbC1ub3QtbWFz
cXVlcmFkZXMtYXMtdW5kZWZpbmVkLmpzCShub25leGlzdGVudCkKQEAgLTEsMzUgKzAsMCBAQAot
ZnVuY3Rpb24gc2hvdWxkQmUoYWN0dWFsLCBleHBlY3RlZCkgewotICAgIGlmIChhY3R1YWwgIT09
IGV4cGVjdGVkKQotICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2JhZCB2YWx1ZTogJyArIGFjdHVh
bCk7Ci19Ci0KLWZ1bmN0aW9uIHRlc3QodmFsdWUpCi17Ci0gICAgcmV0dXJuICF2YWx1ZTsKLX0K
LW5vSW5saW5lKHRlc3QpOwotCi12YXIgZGF0YSA9IFsKLSAgICBbIHt9LCB0cnVlIF0sCi0gICAg
WyB0cnVlLCB0cnVlIF0sCi0gICAgWyBmYWxzZSwgZmFsc2UgXSwKLSAgICBbIC0wLCBmYWxzZSBd
LAotICAgIFsgMSwgdHJ1ZSBdLAotICAgIFsgNC4yLCB0cnVlIF0sCi0gICAgWyBOYU4sIGZhbHNl
IF0sCi0gICAgWyBJbmZpbml0eSwgdHJ1ZSBdLAotICAgIFsgW10sIHRydWUgXSwKLSAgICBbIG5l
dyBEYXRlKCksIHRydWUgXSwKLSAgICBbICIiLCBmYWxzZSBdLAotICAgIFsgIiIgKyAiIiArICIi
LCBmYWxzZSBdLAotICAgIFsgIkNvY29hIiwgdHJ1ZSBdLAotICAgIFsgdW5kZWZpbmVkLCBmYWxz
ZSBdLAotICAgIFsgbnVsbCwgZmFsc2UgXSwKLSAgICBbIFN5bWJvbCgpLCB0cnVlIF0sCi0gICAg
WyBtYWtlTWFzcXVlcmFkZXIoKSAsIGZhbHNlXQotXTsKLQotZm9yICh2YXIgaSA9IDA7IGkgPCAx
ZTQ7ICsraSkgewotICAgIGZvciAobGV0IFsgdmFsdWUsIHJlc3VsdCBdIG9mIGRhdGEpCi0gICAg
ICAgIHNob3VsZEJlKCF0ZXN0KHZhbHVlKSwgcmVzdWx0KTsKLX0KSW5kZXg6IEpTVGVzdHMvc3Ry
ZXNzL2xvZ2ljYWwtbm90LW1hc3F1ZXJhZGVzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3Ry
ZXNzL2xvZ2ljYWwtbm90LW1hc3F1ZXJhZGVzLmpzCShyZXZpc2lvbiAyNzExMzEpCisrKyBKU1Rl
c3RzL3N0cmVzcy9sb2dpY2FsLW5vdC1tYXNxdWVyYWRlcy5qcwkobm9uZXhpc3RlbnQpCkBAIC0x
LDMzICswLDAgQEAKLWZ1bmN0aW9uIGZvbyh2YWx1ZSkgewotICAgIHJldHVybiAhIXZhbHVlOwot
fQotCi1ub0lubGluZShmb28pOwotCi12YXIgdGVzdHMgPSBbCi0gICAgWzAsIGZhbHNlXSwKLSAg
ICBbMSwgdHJ1ZV0sCi0gICAgWzAvMCwgZmFsc2VdLAotICAgIFswLy0xLCBmYWxzZV0sCi0gICAg
WzAuMCwgZmFsc2VdLAotICAgIFsiIiwgZmFsc2VdLAotICAgIFsiZiIsIHRydWVdLAotICAgIFsi
aGVsbG8iLCB0cnVlXSwKLSAgICBbe30sIHRydWVdLAotICAgIFtbXSwgdHJ1ZV0sCi0gICAgW251
bGwsIGZhbHNlXSwKLSAgICBbdm9pZCAwLCBmYWxzZV0sCi0gICAgW2ZhbHNlLCBmYWxzZV0sCi0g
ICAgW3RydWUsIHRydWVdLAotICAgIFttYWtlTWFzcXVlcmFkZXIoKSwgZmFsc2VdCi1dOwotCi1m
b3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKLSAgICBmb3IgKHZhciBqID0gMDsgaiA8
IHRlc3RzLmxlbmd0aDsgKytqKSB7Ci0gICAgICAgIHZhciBpbnB1dCA9IHRlc3RzW2pdWzBdOwot
ICAgICAgICB2YXIgZXhwZWN0ZWQgPSB0ZXN0c1tqXVsxXTsKLSAgICAgICAgdmFyIHJlc3VsdCA9
IGZvbyhpbnB1dCk7Ci0gICAgICAgIGlmIChyZXN1bHQgIT09IGV4cGVjdGVkKQotICAgICAgICAg
ICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0IGZvciAiICsgaW5wdXQgKyAiOiAiICsgcmVzdWx0
OwotICAgIH0KLX0KSW5kZXg6IEpTVGVzdHMvc3RyZXNzL2xvZ2ljYWwtbm90LmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEpTVGVzdHMvc3RyZXNzL2xvZ2ljYWwtbm90LmpzCShyZXZpc2lvbiAyNzExMzEpCisr
KyBKU1Rlc3RzL3N0cmVzcy9sb2dpY2FsLW5vdC5qcwkobm9uZXhpc3RlbnQpCkBAIC0xLDM0ICsw
LDAgQEAKLWZ1bmN0aW9uIHNob3VsZEJlKGFjdHVhbCwgZXhwZWN0ZWQpIHsKLSAgICBpZiAoYWN0
dWFsICE9PSBleHBlY3RlZCkKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdiYWQgdmFsdWU6ICcg
KyBhY3R1YWwpOwotfQotCi1mdW5jdGlvbiB0ZXN0KHZhbHVlKQotewotICAgIHJldHVybiAhdmFs
dWU7Ci19Ci1ub0lubGluZSh0ZXN0KTsKLQotdmFyIGRhdGEgPSBbCi0gICAgWyB7fSwgdHJ1ZSBd
LAotICAgIFsgdHJ1ZSwgdHJ1ZSBdLAotICAgIFsgZmFsc2UsIGZhbHNlIF0sCi0gICAgWyAtMCwg
ZmFsc2UgXSwKLSAgICBbIDEsIHRydWUgXSwKLSAgICBbIDQuMiwgdHJ1ZSBdLAotICAgIFsgTmFO
LCBmYWxzZSBdLAotICAgIFsgSW5maW5pdHksIHRydWUgXSwKLSAgICBbIFtdLCB0cnVlIF0sCi0g
ICAgWyBuZXcgRGF0ZSgpLCB0cnVlIF0sCi0gICAgWyAiIiwgZmFsc2UgXSwKLSAgICBbICIiICsg
IiIgKyAiIiwgZmFsc2UgXSwKLSAgICBbICJDb2NvYSIsIHRydWUgXSwKLSAgICBbIHVuZGVmaW5l
ZCwgZmFsc2UgXSwKLSAgICBbIG51bGwsIGZhbHNlIF0sCi0gICAgWyBTeW1ib2woKSwgdHJ1ZSBd
LAotXTsKLQotZm9yICh2YXIgaSA9IDA7IGkgPCAxZTQ7ICsraSkgewotICAgIGZvciAobGV0IFsg
dmFsdWUsIHJlc3VsdCBdIG9mIGRhdGEpCi0gICAgICAgIHNob3VsZEJlKCF0ZXN0KHZhbHVlKSwg
cmVzdWx0KTsKLX0KSW5kZXg6IEpTVGVzdHMvc3RyZXNzL3ZhbHVlLXRvLWJvb2xlYW4uanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvdmFsdWUtdG8tYm9vbGVhbi5qcwkocmV2aXNpb24g
MjcxMTMxKQorKysgSlNUZXN0cy9zdHJlc3MvdmFsdWUtdG8tYm9vbGVhbi5qcwkobm9uZXhpc3Rl
bnQpCkBAIC0xLDY1ICswLDAgQEAKLS8vQCBpZiAkYnVpbGRUeXBlID09ICJyZWxlYXNlIiB0aGVu
IHJ1bkRlZmF1bHQgZWxzZSBza2lwIGVuZAotCi1mdW5jdGlvbiBhc3NlcnQoYikgewotICAgIGlm
ICghYikKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgYXNzZXJ0aW9uIikKLX0KLW5vSW5s
aW5lKGFzc2VydCk7Ci0KLWxldCB0ZXN0cyA9IFsKLSAgICBbdHJ1ZSwgdHJ1ZV0sCi0gICAgW2Zh
bHNlLCBmYWxzZV0sCi0gICAgWyIiLCBmYWxzZV0sCi0gICAgWyIiICsgIiIgKyAiIiwgZmFsc2Vd
LAotICAgIFsiZm9vIiwgdHJ1ZV0sCi0gICAgWyJmb28iICsgImJhciIsIHRydWVdLAotICAgIFt7
fSwgdHJ1ZV0sCi0gICAgW1N5bWJvbCgpLCB0cnVlXSwKLSAgICBbdW5kZWZpbmVkLCBmYWxzZV0s
Ci0gICAgW251bGwsIGZhbHNlXSwKLSAgICBbMCwgZmFsc2VdLAotICAgIFstMCwgZmFsc2VdLAot
ICAgIFsrMCwgZmFsc2VdLAotICAgIFtOYU4sIGZhbHNlXSwKLSAgICBbMTAsIHRydWVdLAotICAg
IFsxMC4yMDEyLCB0cnVlXSwKLSAgICBbZnVuY3Rpb24oKSB7IH0sIHRydWVdLAotICAgIFtuZXcg
U3RyaW5nKCJmb28iKSwgdHJ1ZV0sCi0gICAgW25ldyBTdHJpbmcoIiIpLCB0cnVlXSwKLSAgICBb
bmV3IFN0cmluZywgdHJ1ZV0KLV07Ci0KLWZ1bmN0aW9uIHRlc3QxKGMpIHsKLSAgICByZXR1cm4g
ISFjOwotfQotbm9JbmxpbmUodGVzdDEpOwotCi1mdW5jdGlvbiB0ZXN0MihjKSB7Ci0gICAgaWYg
KGMpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBmYWxzZTsKLX0KLW5vSW5saW5l
KHRlc3QyKTsKLQotZnVuY3Rpb24gdGVzdDMoYykgewotICAgIGlmICghYykKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotfQotbm9JbmxpbmUodGVzdDMpOwotCi1sZXQg
dGVzdEZ1bmN0aW9ucyA9IFt0ZXN0MSwgdGVzdDIsIHRlc3QzXTsKLQotZm9yIChsZXQgdGVzdEZ1
bmN0aW9uIG9mIHRlc3RGdW5jdGlvbnMpIHsKLSAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAw
OyBpKyspIHsKLSAgICAgICAgbGV0IGl0ZW0gPSB0ZXN0c1tpICUgdGVzdHMubGVuZ3RoXTsKLSAg
ICAgICAgYXNzZXJ0KHRlc3RGdW5jdGlvbihpdGVtWzBdKSA9PT0gaXRlbVsxXSk7Ci0gICAgfQot
fQotCi1sZXQgbWFzcXVlcmFkZXIgPSBtYWtlTWFzcXVlcmFkZXIoKTsKLWZvciAobGV0IHRlc3RG
dW5jdGlvbiBvZiB0ZXN0RnVuY3Rpb25zKSB7Ci0gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAw
MDsgaSsrKSB7Ci0gICAgICAgIGFzc2VydCh0ZXN0RnVuY3Rpb24obWFzcXVlcmFkZXIpID09PSBm
YWxzZSk7Ci0gICAgfQotfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAy
NzExMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsNjMgQEAKKzIwMjEtMDEtMDUgIEFsZXhleSBTaHZheWthICA8c2h2YWlrYWxl
c2hAZ21haWwuY29tPgorCisgICAgICAgIEJvb2xlYW5Db25zdHJ1Y3RvciBzaG91bGQgYmUgaW5s
aW5lZCBpbiBERkcgLyBGVEwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIyMDMyMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIGBhcnJheS5maWx0ZXIoQm9vbGVhbilgIGlzIGEgcmF0aGVyIHBvcHVsYXIgaWRp
b20gZm9yIGNvbXBhY3RpbmcgYW4gYXJyYXkgKHJlbW92aW5nIGZhbHN5IGl0ZW1zKS4KKyAgICAg
ICAgQWxzbywgYEJvb2xlYW4oWClgIGlzIHNvbWV0aW1lcyB1c2VkIGZvciBleHBsaWNpdCB0eXBl
IGNhc3RpbmcuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIFRvQm9vbGVhbiBERkcg
bm9kZSBhbmQgcmVvcmdhbml6ZXMgYGNvbXBpbGVMb2dpY2FsTm90KG5vZGUpYCBpbnRvCisgICAg
ICAgIGBjb21waWxlVG9Cb29sZWFuKG5vZGUsIGJvb2wgaW52ZXJ0KWAsIGxldmVyYWdpbmcgYWxy
ZWFkeSBleGlzdGluZyBlbWl0Q29udmVydFZhbHVlVG9Cb29sZWFuKCkuCisKKyAgICAgICAgVGhp
cyBhcHByb2FjaCBpcyBiZXR0ZXIgdGhhbiBlbWl0dGluZyBMb2dpY2FsTm90PEtub3duQm9vbGVh
blVzZT4oTG9naWNhbE5vdChYKSkgYXMgaXQgcmVzdWx0cworICAgICAgICBpbiBjbGVhbmVyIERG
RyBub2RlIHRyZWUgYW5kIGlzIH43JSBmYXN0ZXIgdy9vIEZUTC4gSXQgYWxzbyBhbGxvd3MgdXMg
dG8gYWRkIGEgb3BfdG9fYm9vbGVhbgorICAgICAgICBieXRlY29kZSB0aGF0IHdpbGwgYmUgZ2Vu
ZXJhdGVkIGZvciB2ZXJ5IGNvbW1vbiBgISFYYCBwYXR0ZXJucywgcmVkdWNpbmcgaW5zdHJ1Y3Rp
b24gY291bnQuCisKKyAgICAgICAgVGhpcyBjaGFuZ2UgYWR2YW5jZXMgcHJvdmlkZWQgbWljcm9i
ZW5jaG1hcmsgYnkgMTEwJSwgYW5kIGlzIG5ldXRyYWwgZm9yIG90aGVyIFRvQm9vbGVhbiBjYXNl
cy4KKworICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oOgorICAg
ICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+Ojpl
eGVjdXRlRWZmZWN0cyk6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ29uc3RhbnRJbnRlcm5hbEZ1
bmN0aW9uKToKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJlcml6ZS5oOgorICAgICAgICAoSlNDOjpE
Rkc6OmNsb2JiZXJpemUpOgorICAgICAgICAqIGRmZy9ERkdEb2VzR0MuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OmRvZXNHQyk6CisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2UuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9kZSk6CisgICAgICAgICogZGZnL0RG
R01heUV4aXQuY3BwOgorICAgICAgICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAqIGRm
Zy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR1Nh
ZmVUb0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRlKToKKyAgICAg
ICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlVG9Cb29sZWFuU3RyaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVRvQm9vbGVhblN0cmluZ09yT3RoZXIpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RyaW5nWmVyb0xlbmd0aCk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2dpY2FsTm90
U3RyaW5nT3JPdGhlcik6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklU
Lmg6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlVG9Cb29sZWFuT2JqZWN0T3JPdGhlcik6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVUb0Jvb2xlYW4pOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9yT3RoZXJMb2dpY2FsTm90KTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ2lj
YWxOb3QpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVRvQm9vbGVhbk9iamVj
dE9yT3RoZXIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlVG9C
b29sZWFuKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RPck90aGVyTG9n
aWNhbE5vdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVMb2dpY2FsTm90KTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHV2F0Y2hwb2ludENv
bGxlY3Rpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6V2F0Y2hwb2ludENvbGxlY3Rp
b25QaGFzZTo6aGFuZGxlKToKKyAgICAgICAgKiBmdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcDoKKyAg
ICAgICAgKEpTQzo6RlRMOjpjYW5Db21waWxlKToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdU
b0IzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU5v
ZGUpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlVG9Cb29s
ZWFuKToKKwogMjAyMS0wMS0wNCAgSmVmZiBNaWxsZXIgIDxqZWZmbUBhcHBsZS5jb20+CiAKICAg
ICAgICAgVXBkYXRlIHVzZXItdmlzaWJsZSBjb3B5cmlnaHQgc3RyaW5ncyB0byBpbmNsdWRlIDIw
MjEKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRl
cklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDI3MTEzMSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTM0NSwxOCArMTM0NSwxOCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8
QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGV4ZWN1dGVEb3VibGVVbmFyeU9wRWZmZWN0cyhub2Rl
LCBhcml0aFVuYXJ5RnVuY3Rpb24obm9kZS0+YXJpdGhVbmFyeVR5cGUoKSkpOwogICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIAorICAgIGNhc2UgVG9Cb29sZWFuOgogICAgIGNhc2UgTG9naWNh
bE5vdDogewotICAgICAgICBzd2l0Y2ggKGJvb2xlYW5SZXN1bHQobm9kZSwgZm9yTm9kZShub2Rl
LT5jaGlsZDEoKSkpKSB7Ci0gICAgICAgIGNhc2UgVHJpU3RhdGU6OlRydWU6Ci0gICAgICAgICAg
ICBzZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4oZmFsc2UpKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIFRyaVN0YXRlOjpGYWxzZToKLSAgICAgICAgICAgIHNldENvbnN0YW50
KG5vZGUsIGpzQm9vbGVhbih0cnVlKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBUcmlTdGF0ZTo6SW5kZXRlcm1pbmF0ZToKKyAgICAgICAgVHJpU3RhdGUgcmVzdWx0ID0gYm9v
bGVhblJlc3VsdChub2RlLCBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKSk7CisgICAgICAgIGlmIChy
ZXN1bHQgPT0gVHJpU3RhdGU6OkluZGV0ZXJtaW5hdGUpIHsKICAgICAgICAgICAgIHNldE5vbkNl
bGxUeXBlRm9yTm9kZShub2RlLCBTcGVjQm9vbGVhbik7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQorCisgICAgICAgIGJvb2wgcmVzdWx0QXNCb29sID0gcmVzdWx0ID09IFRyaVN0YXRl
OjpUcnVlOworICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBMb2dpY2FsTm90KQorICAgICAgICAg
ICAgcmVzdWx0QXNCb29sID0gIXJlc3VsdEFzQm9vbDsKKyAgICAgICAgc2V0Q29uc3RhbnQobm9k
ZSwganNCb29sZWFuKHJlc3VsdEFzQm9vbCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3Bw
CShyZXZpc2lvbiAyNzExMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUg
IkFyaXRoUHJvZmlsZS5oIgogI2luY2x1ZGUgIkFycmF5Q29uc3RydWN0b3IuaCIKICNpbmNsdWRl
ICJBcnJheVByb3RvdHlwZS5oIgorI2luY2x1ZGUgIkJvb2xlYW5Db25zdHJ1Y3Rvci5oIgogI2lu
Y2x1ZGUgIkJ1aWx0aW5OYW1lcy5oIgogI2luY2x1ZGUgIkJ5VmFsSW5mby5oIgogI2luY2x1ZGUg
IkJ5dGVjb2RlR2VuZXJhdG9yLmgiCkBAIC00MDYyLDYgKzQwNjMsMjIgQEAgYm9vbCBCeXRlQ29k
ZVBhcnNlcjo6aGFuZGxlQ29uc3RhbnRJbnRlcgogCiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KKworICAgIGlmIChmdW5jdGlvbi0+Y2xhc3NJbmZvKCptX3ZtKSA9PSBCb29sZWFuQ29uc3Ry
dWN0b3I6OmluZm8oKSkgeworICAgICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGluc2VydENoZWNrcygpOworCisg
ICAgICAgIE5vZGUqIHJlc3VsdE5vZGU7CisgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyA8PSAxKQorICAgICAgICAgICAgcmVzdWx0Tm9kZSA9IGpzQ29uc3RhbnQoanNCb29s
ZWFuKGZhbHNlKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlc3VsdE5vZGUgPSBhZGRU
b0dyYXBoKFRvQm9vbGVhbiwgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5n
VGhpcygxLCByZWdpc3Rlck9mZnNldCkpKTsKKworICAgICAgICBzZXQocmVzdWx0LCByZXN1bHRO
b2RlKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogICAgIAogICAgIGlmIChmdW5jdGlv
bi0+Y2xhc3NJbmZvKCptX3ZtKSA9PSBTdHJpbmdDb25zdHJ1Y3Rvcjo6aW5mbygpKSB7CiAgICAg
ICAgIGluc2VydENoZWNrcygpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
bG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
bG9iYmVyaXplLmgJKHJldmlzaW9uIDI3MTEzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzMsNiArMjMzLDcgQEAgdm9p
ZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgIGNhc2UgTnVtYmVySXNJ
bnRlZ2VyOgogICAgIGNhc2UgSXNPYmplY3Q6CiAgICAgY2FzZSBJc1R5cGVkQXJyYXlWaWV3Ogor
ICAgIGNhc2UgVG9Cb29sZWFuOgogICAgIGNhc2UgTG9naWNhbE5vdDoKICAgICBjYXNlIENoZWNr
SW5Cb3VuZHM6CiAgICAgY2FzZSBEb3VibGVSZXA6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0RvZXNHQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEb2VzR0MuY3BwCShyZXZpc2lvbiAyNzExMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1Niw2ICsxNTYsNyBA
QCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAgY2FzZSBJc0NlbGxX
aXRoVHlwZToKICAgICBjYXNlIElzVHlwZWRBcnJheVZpZXc6CiAgICAgY2FzZSBUeXBlT2Y6Cisg
ICAgY2FzZSBUb0Jvb2xlYW46CiAgICAgY2FzZSBMb2dpY2FsTm90OgogICAgIGNhc2UgSnVtcDoK
ICAgICBjYXNlIEJyYW5jaDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4
dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdG
aXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMjcxMTMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMzLDYgKzgzMyw3IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCisg
ICAgICAgIGNhc2UgVG9Cb29sZWFuOgogICAgICAgICBjYXNlIExvZ2ljYWxOb3Q6IHsKICAgICAg
ICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlQm9vbGVhbigpKSB7CiAg
ICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5yZXN1bHQoKSA9PSBOb2RlUmVzdWx0
Qm9vbGVhbikgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3Bw
CShyZXZpc2lvbiAyNzExMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4
aXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Myw2ICs5Myw3IEBAIEV4aXRNb2RlIG1heUV4aXRJ
bXBsKEdyYXBoJiBncmFwaCwgTm9kZSoKICAgICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxvY2FsOgog
ICAgIGNhc2UgRXh0cmFjdENhdGNoTG9jYWw6CiAgICAgY2FzZSBDbGVhckNhdGNoTG9jYWxzOgor
ICAgIGNhc2UgVG9Cb29sZWFuOgogICAgIGNhc2UgTG9naWNhbE5vdDoKICAgICBjYXNlIE5vdGlm
eVdyaXRlOgogICAgIGNhc2UgUHV0U3RydWN0dXJlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMjcxMTMxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MTMsNiArNDEzLDcg
QEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKElzQ29uc3RydWN0
b3IsIE5vZGVSZXN1bHRCb29sZWFuKSBcCiAgICAgbWFjcm8oSXNUeXBlZEFycmF5VmlldywgTm9k
ZVJlc3VsdEJvb2xlYW4pIFwKICAgICBtYWNybyhUeXBlT2YsIE5vZGVSZXN1bHRKUykgXAorICAg
IG1hY3JvKFRvQm9vbGVhbiwgTm9kZVJlc3VsdEJvb2xlYW4pIFwKICAgICBtYWNybyhMb2dpY2Fs
Tm90LCBOb2RlUmVzdWx0Qm9vbGVhbikgXAogICAgIG1hY3JvKFRvUHJpbWl0aXZlLCBOb2RlUmVz
dWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oVG9Qcm9wZXJ0eUtleSwgTm9k
ZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5j
cHAJKHJldmlzaW9uIDI3MTEzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJl
ZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIxLDYgKzEw
MjEsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIERlbGV0ZUJ5VmFsOgogICAgICAgICBjYXNl
IERlbGV0ZUJ5SWQ6CiAgICAgICAgIGNhc2UgTXVsdGlEZWxldGVCeU9mZnNldDoKKyAgICAgICAg
Y2FzZSBUb0Jvb2xlYW46CiAgICAgICAgIGNhc2UgTG9naWNhbE5vdDoKICAgICAgICAgY2FzZSBD
b21wYXJlTGVzczoKICAgICAgICAgY2FzZSBDb21wYXJlTGVzc0VxOgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJldmlzaW9uIDI3MTEzMSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNzAsNiArMjcwLDcgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3Rh
dGVUeXBlJiBzdAogICAgIGNhc2UgSXNDZWxsV2l0aFR5cGU6CiAgICAgY2FzZSBJc1R5cGVkQXJy
YXlWaWV3OgogICAgIGNhc2UgVHlwZU9mOgorICAgIGNhc2UgVG9Cb29sZWFuOgogICAgIGNhc2Ug
TG9naWNhbE5vdDoKICAgICBjYXNlIFRvU3RyaW5nOgogICAgIGNhc2UgTnVtYmVyVG9TdHJpbmdX
aXRoVmFsaWRSYWRpeENvbnN0YW50OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAyNzExMzEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNDU4LDcgKzE0NTgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlU3ltYm9sVW50eXBlCiAgICAgYm9vbGVhblJlc3VsdChyZXN1bHRQYXlsb2FkR1BSLCBu
b2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9yT3RoZXJMb2dp
Y2FsTm90KEVkZ2Ugbm9kZVVzZSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVUb0Jvb2xl
YW5PYmplY3RPck90aGVyKEVkZ2Ugbm9kZVVzZSwgYm9vbCBpbnZlcnQpCiB7CiAgICAgSlNWYWx1
ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZVVzZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsK
ICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0UGF5bG9hZCh0aGlzKTsKQEAgLTE1MDQsNyArMTUwNCw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RPck90aGUKIAogICAgICAgICBp
c05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluaygmbV9qaXQpOwogICAgIH0KLSAgICBtX2pp
dC5tb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVzdWx0UGF5bG9hZEdQUik7CisgICAgbV9qaXQubW92
ZShpbnZlcnQgPyBUcnVzdGVkSW1tMzIoMCkgOiBUcnVzdGVkSW1tMzIoMSksIHJlc3VsdFBheWxv
YWRHUFIpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CiAg
ICAgCiAgICAgbm90Q2VsbC5saW5rKCZtX2ppdCk7CkBAIC0xNTE5LDM0ICsxNTE5LDM1IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RPck90aGUKICAgICAgICAgICAgICAgICBy
ZXN1bHRQYXlsb2FkR1BSLCAKICAgICAgICAgICAgICAgICBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
TnVsbFRhZykpKTsKICAgICB9Ci0gICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoMSksIHJlc3Vs
dFBheWxvYWRHUFIpOworICAgIG1faml0Lm1vdmUoaW52ZXJ0ID8gVHJ1c3RlZEltbTMyKDEpIDog
VHJ1c3RlZEltbTMyKDApLCByZXN1bHRQYXlsb2FkR1BSKTsKICAgICAKICAgICBkb25lLmxpbmso
Jm1faml0KTsKICAgICAKICAgICBib29sZWFuUmVzdWx0KHJlc3VsdFBheWxvYWRHUFIsIG1fY3Vy
cmVudE5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9naWNhbE5vdChO
b2RlKiBub2RlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVRvQm9vbGVhbihOb2RlKiBu
b2RlLCBib29sIGludmVydCkKIHsKICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQo
KSkgewogICAgIGNhc2UgQm9vbGVhblVzZToKICAgICBjYXNlIEtub3duQm9vbGVhblVzZTogewog
ICAgICAgICBTcGVjdWxhdGVCb29sZWFuT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEo
KSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIHZhbHVlKTsKLSAg
ICAgICAgbV9qaXQueG9yMzIoVHJ1c3RlZEltbTMyKDEpLCB2YWx1ZS5ncHIoKSwgcmVzdWx0Lmdw
cigpKTsKKyAgICAgICAgaWYgKGludmVydCkKKyAgICAgICAgICAgIG1faml0LnhvcjMyKFRydXN0
ZWRJbW0zMigxKSwgdmFsdWUuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgIGJvb2xlYW5S
ZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAg
ICAgCiAgICAgY2FzZSBPYmplY3RPck90aGVyVXNlOiB7Ci0gICAgICAgIGNvbXBpbGVPYmplY3RP
ck90aGVyTG9naWNhbE5vdChub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIGNvbXBpbGVUb0Jvb2xl
YW5PYmplY3RPck90aGVyKG5vZGUtPmNoaWxkMSgpLCBpbnZlcnQpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEludDMyVXNlOiB7CiAgICAgICAgIFNwZWN1bGF0
ZUludDMyT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlRl
bXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMsIFJldXNlLCB2YWx1ZSk7Ci0gICAgICAgIG1faml0
LmNvbXBhcmUzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlLmdwcigpLCBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKDApLCByZXN1bHRQYXlsb2FkLmdwcigpKTsKKyAgICAgICAgbV9q
aXQuY29tcGFyZTMyKGludmVydCA/IE1hY3JvQXNzZW1ibGVyOjpFcXVhbCA6IE1hY3JvQXNzZW1i
bGVyOjpOb3RFcXVhbCwgdmFsdWUuZ3ByKCksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
MCksIHJlc3VsdFBheWxvYWQuZ3ByKCkpOwogICAgICAgICBib29sZWFuUmVzdWx0KHJlc3VsdFBh
eWxvYWQuZ3ByKCksIG5vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTU1NSw5ICsx
NTU2LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ2ljYWxOb3QoTgogICAgICAg
ICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAg
ICAgICAgRlBSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBy
ZXN1bHRQYXlsb2FkKHRoaXMpOwotICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMigwKSwg
cmVzdWx0UGF5bG9hZC5ncHIoKSk7CisgICAgICAgIG1faml0Lm1vdmUoaW52ZXJ0ID8gVHJ1c3Rl
ZEltbTMyKDApIDogVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRQYXlsb2FkLmdwcigpKTsKICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm9uWmVybyA9IG1faml0LmJyYW5jaERvdWJsZU5vblpl
cm8odmFsdWUuZnByKCksIHNjcmF0Y2guZnByKCkpOwotICAgICAgICBtX2ppdC5tb3ZlKFRydXN0
ZWRJbW0zMigxKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSk7CisgICAgICAgIG1faml0Lm1vdmUoaW52
ZXJ0ID8gVHJ1c3RlZEltbTMyKDEpIDogVHJ1c3RlZEltbTMyKDApLCByZXN1bHRQYXlsb2FkLmdw
cigpKTsKICAgICAgICAgbm9uWmVyby5saW5rKCZtX2ppdCk7CiAgICAgICAgIGJvb2xlYW5SZXN1
bHQocmVzdWx0UGF5bG9hZC5ncHIoKSwgbm9kZSk7CiAgICAgICAgIHJldHVybjsKQEAgLTE1NzQs
MTYgKzE1NzUsMTcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ2ljYWxOb3QoTgog
CiAgICAgICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gIW1hc3F1
ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50SXNTdGlsbFZhbGlkKCk7CiAgICAgICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihu
b2RlLT5vcmlnaW4uc2VtYW50aWMpOwotICAgICAgICBib29sIG5lZ2F0ZVJlc3VsdCA9IHRydWU7
Ci0gICAgICAgIG1faml0LmVtaXRDb252ZXJ0VmFsdWVUb0Jvb2xlYW4odm0oKSwgYXJnMS5qc1Zh
bHVlUmVncygpLCByZXN1bHRHUFIsIHRlbXAuZ3ByKCksIHZhbHVlRlBSLmZwcigpLCB0ZW1wRlBS
LmZwcigpLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIGdsb2JhbE9iamVjdCwg
bmVnYXRlUmVzdWx0KTsKKyAgICAgICAgbV9qaXQuZW1pdENvbnZlcnRWYWx1ZVRvQm9vbGVhbih2
bSgpLCBhcmcxLmpzVmFsdWVSZWdzKCksIHJlc3VsdEdQUiwgdGVtcC5ncHIoKSwgdmFsdWVGUFIu
ZnByKCksIHRlbXBGUFIuZnByKCksIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwg
Z2xvYmFsT2JqZWN0LCBpbnZlcnQpOwogICAgICAgICBib29sZWFuUmVzdWx0KHJlc3VsdEdQUiwg
bm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgY2FzZSBTdHJpbmdVc2U6Ci0gICAg
ICAgIHJldHVybiBjb21waWxlU3RyaW5nWmVyb0xlbmd0aChub2RlKTsKKyAgICAgICAgY29tcGls
ZVRvQm9vbGVhblN0cmluZyhub2RlLCBpbnZlcnQpOworICAgICAgICByZXR1cm47CiAKICAgICBj
YXNlIFN0cmluZ09yT3RoZXJVc2U6Ci0gICAgICAgIHJldHVybiBjb21waWxlTG9naWNhbE5vdFN0
cmluZ09yT3RoZXIobm9kZSk7CisgICAgICAgIGNvbXBpbGVUb0Jvb2xlYW5TdHJpbmdPck90aGVy
KG5vZGUsIGludmVydCk7CisgICAgICAgIHJldHVybjsKIAogICAgIGRlZmF1bHQ6CiAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0yMTU5LDkgKzIxNjEsMTcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBjb21waWxlQXJp
dGhVbmFyeShub2RlKTsKICAgICAgICAgYnJlYWs7CiAKLSAgICBjYXNlIExvZ2ljYWxOb3Q6Ci0g
ICAgICAgIGNvbXBpbGVMb2dpY2FsTm90KG5vZGUpOworICAgIGNhc2UgVG9Cb29sZWFuOiB7Cisg
ICAgICAgIGJvb2wgaW52ZXJ0ID0gZmFsc2U7CisgICAgICAgIGNvbXBpbGVUb0Jvb2xlYW4obm9k
ZSwgaW52ZXJ0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBMb2dpY2FsTm90
OiB7CisgICAgICAgIGJvb2wgaW52ZXJ0ID0gdHJ1ZTsKKyAgICAgICAgY29tcGlsZVRvQm9vbGVh
bihub2RlLCBpbnZlcnQpOwogICAgICAgICBicmVhazsKKyAgICB9CiAKICAgICBjYXNlIENvbXBh
cmVMZXNzOgogICAgICAgICBpZiAoY29tcGFyZShub2RlLCBKSVRDb21waWxlcjo6TGVzc1RoYW4s
IEpJVENvbXBpbGVyOjpEb3VibGVMZXNzVGhhbkFuZE9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVM
ZXNzKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2
NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMjcxMTMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgwMCw3ICsx
ODAwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNvbXBhcmVFcVB0cgogICAgIHVu
Ymxlc3NlZEJvb2xlYW5SZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKIH0KIAotdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9yT3RoZXJMb2dpY2FsTm90KEVkZ2Ugbm9kZVVzZSkKK3Zv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVUb0Jvb2xlYW5PYmplY3RPck90aGVyKEVkZ2Ugbm9k
ZVVzZSwgYm9vbCBpbnZlcnQpCiB7CiAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9k
ZVVzZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0
KHRoaXMpOwpAQCAtMTg0OCw3ICsxODQ4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZU9iamVjdE9yT3RoZQogCiAgICAgICAgIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5r
KCZtX2ppdCk7CiAgICAgfQotICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZh
bHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgIG1faml0Lm1vdmUoaW52ZXJ0ID8gVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpIDogVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1
ZSksIHJlc3VsdEdQUik7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1
bXAoKTsKICAgICAKICAgICBub3RDZWxsLmxpbmsoJm1faml0KTsKQEAgLTE4NjIsMjUgKzE4NjIs
MjUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9yT3RoZQogICAgICAgICAg
ICAgICAgIHJlc3VsdEdQUiwgCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW02NChKU1ZhbHVlOjpWYWx1ZU51bGwpKSk7CiAgICAgfQotICAgIG1faml0Lm1vdmUoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgbV9qaXQubW92
ZShpbnZlcnQgPyBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSA6IFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKICAgICAKICAgICBkb25lLmxpbmso
Jm1faml0KTsKICAgICAKICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbV9jdXJyZW50Tm9k
ZSwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVMb2dpY2FsTm90KE5vZGUqIG5vZGUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVG9C
b29sZWFuKE5vZGUqIG5vZGUsIGJvb2wgaW52ZXJ0KQogewogICAgIHN3aXRjaCAobm9kZS0+Y2hp
bGQxKCkudXNlS2luZCgpKSB7CiAgICAgY2FzZSBPYmplY3RPck90aGVyVXNlOiB7Ci0gICAgICAg
IGNvbXBpbGVPYmplY3RPck90aGVyTG9naWNhbE5vdChub2RlLT5jaGlsZDEoKSk7CisgICAgICAg
IGNvbXBpbGVUb0Jvb2xlYW5PYmplY3RPck90aGVyKG5vZGUtPmNoaWxkMSgpLCBpbnZlcnQpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEludDMyVXNlOiB7CiAg
ICAgICAgIFNwZWN1bGF0ZUludDMyT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7
CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIHZhbHVlKTsKLSAgICAg
ICAgbV9qaXQuY29tcGFyZTMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWUuZ3ByKCksIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgIG1f
aml0LmNvbXBhcmUzMihpbnZlcnQgPyBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwgOiBNYWNyb0Fzc2Vt
Ymxlcjo6Tm90RXF1YWwsIHZhbHVlLmdwcigpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KDApLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICBtX2ppdC5vcjMyKFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0LmdwcigpKTsKICAgICAgICAganNWYWx1ZVJlc3VsdChy
ZXN1bHQuZ3ByKCksIG5vZGUsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOwogICAgICAgICByZXR1cm47
CkBAIC0xODkwLDkgKzE4OTAsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9naWNh
bE5vdChOCiAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+
Y2hpbGQxKCkpOwogICAgICAgICBGUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICAgICAg
R1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgIG1faml0Lm1v
dmUoaW52ZXJ0ID8gVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpIDogVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIG5vblplcm8gPSBtX2ppdC5icmFuY2hEb3VibGVOb25aZXJvKHZhbHVlLmZw
cigpLCBzY3JhdGNoLmZwcigpKTsKLSAgICAgICAgbV9qaXQueG9yMzIoVHJ1c3RlZEltbTMyKHRy
dWUpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICBtX2ppdC5tb3ZlKGludmVydCA/IFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpIDogVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFs
c2UpLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICBub25aZXJvLmxpbmsoJm1faml0KTsKICAgICAg
ICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUsIERhdGFGb3JtYXRKU0Jvb2xlYW4p
OwogICAgICAgICByZXR1cm47CkBAIC0xOTA1LDcgKzE5MDUsOCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlTG9naWNhbE5vdChOCiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0
KHRoaXMsIFJldXNlLCB2YWx1ZSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1faml0Lm1v
dmUodmFsdWUuZ3ByKCksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgICAgICBtX2ppdC54b3I2NChU
cnVzdGVkSW1tMzIodHJ1ZSksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICBpZiAoaW52ZXJ0
KQorICAgICAgICAgICAgICAgIG1faml0LnhvcjY0KFRydXN0ZWRJbW0zMih0cnVlKSwgcmVzdWx0
LmdwcigpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQu
Z3ByKCksIG5vZGUsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOwogICAgICAgICAgICAgcmV0dXJuOwpA
QCAtMTkxOSw3ICsxOTIwLDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ2ljYWxO
b3QoTgogICAgICAgICB0eXBlQ2hlY2soCiAgICAgICAgICAgICBKU1ZhbHVlUmVncyh2YWx1ZS5n
cHIoKSksIG5vZGUtPmNoaWxkMSgpLCBTcGVjQm9vbGVhbiwgbV9qaXQuYnJhbmNoVGVzdDY0KAog
ICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb25aZXJvLCByZXN1bHQuZ3ByKCksIFRydXN0
ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSk7Ci0gICAgICAgIG1faml0LnhvcjY0
KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHQuZ3ByKCkpOworICAgICAg
ICBpZiAoaW52ZXJ0KQorICAgICAgICAgICAgbV9qaXQueG9yNjQoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlZhbHVlVHJ1ZSksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgIAogICAgICAgICAvLyBJZiB3
ZSBhZGQgYSBEYXRhRm9ybWF0Qm9vbCwgd2Ugc2hvdWxkIHVzZSBpdCBoZXJlLgogICAgICAgICBq
c1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CkBA
IC0xOTQ0LDE3ICsxOTQ2LDE4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2dpY2Fs
Tm90KE4KICAgICAgICAgICAgIHNjcmF0Y2guZW1wbGFjZSh0aGlzKTsKICAgICAgICAgICAgIHNj
cmF0Y2hHUFIgPSBzY3JhdGNoLT5ncHIoKTsKICAgICAgICAgfQotICAgICAgICBib29sIG5lZ2F0
ZVJlc3VsdCA9IHRydWU7Ci0gICAgICAgIG1faml0LmVtaXRDb252ZXJ0VmFsdWVUb0Jvb2xlYW4o
dm0oKSwgSlNWYWx1ZVJlZ3MoYXJnMUdQUiksIHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgdmFsdWVG
UFIuZnByKCksIHRlbXBGUFIuZnByKCksIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCwgZ2xvYmFsT2JqZWN0LCBuZWdhdGVSZXN1bHQpOworICAgICAgICBtX2ppdC5lbWl0Q29udmVy
dFZhbHVlVG9Cb29sZWFuKHZtKCksIEpTVmFsdWVSZWdzKGFyZzFHUFIpLCByZXN1bHRHUFIsIHNj
cmF0Y2hHUFIsIHZhbHVlRlBSLmZwcigpLCB0ZW1wRlBSLmZwcigpLCBzaG91bGRDaGVja01hc3F1
ZXJhZGVzQXNVbmRlZmluZWQsIGdsb2JhbE9iamVjdCwgaW52ZXJ0KTsKICAgICAgICAgbV9qaXQu
b3IzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CiAgICAg
ICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2RlLCBEYXRhRm9ybWF0SlNCb29sZWFuKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNlIFN0cmluZ1VzZToKLSAgICAgICAgcmV0
dXJuIGNvbXBpbGVTdHJpbmdaZXJvTGVuZ3RoKG5vZGUpOworICAgICAgICBjb21waWxlVG9Cb29s
ZWFuU3RyaW5nKG5vZGUsIGludmVydCk7CisgICAgICAgIHJldHVybjsKIAogICAgIGNhc2UgU3Ry
aW5nT3JPdGhlclVzZToKLSAgICAgICAgcmV0dXJuIGNvbXBpbGVMb2dpY2FsTm90U3RyaW5nT3JP
dGhlcihub2RlKTsKKyAgICAgICAgY29tcGlsZVRvQm9vbGVhblN0cmluZ09yT3RoZXIobm9kZSwg
aW52ZXJ0KTsKKyAgICAgICAgcmV0dXJuOwogCiAgICAgZGVmYXVsdDoKICAgICAgICAgREZHX0NS
QVNIKG1faml0LmdyYXBoKCksIG5vZGUsICJCYWQgdXNlIGtpbmQiKTsKQEAgLTI1MjksOSArMjUz
MiwxNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAg
IGNvbXBpbGVBcml0aFVuYXJ5KG5vZGUpOwogICAgICAgICBicmVhazsKIAotICAgIGNhc2UgTG9n
aWNhbE5vdDoKLSAgICAgICAgY29tcGlsZUxvZ2ljYWxOb3Qobm9kZSk7CisgICAgY2FzZSBUb0Jv
b2xlYW46IHsKKyAgICAgICAgYm9vbCBpbnZlcnQgPSBmYWxzZTsKKyAgICAgICAgY29tcGlsZVRv
Qm9vbGVhbihub2RlLCBpbnZlcnQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNl
IExvZ2ljYWxOb3Q6IHsKKyAgICAgICAgYm9vbCBpbnZlcnQgPSB0cnVlOworICAgICAgICBjb21w
aWxlVG9Cb29sZWFuKG5vZGUsIGludmVydCk7CiAgICAgICAgIGJyZWFrOworICAgIH0KIAogICAg
IGNhc2UgQ29tcGFyZUxlc3M6CiAgICAgICAgIGlmIChjb21wYXJlKG5vZGUsIEpJVENvbXBpbGVy
OjpMZXNzVGhhbiwgSklUQ29tcGlsZXI6OkRvdWJsZUxlc3NUaGFuQW5kT3JkZXJlZCwgb3BlcmF0
aW9uQ29tcGFyZUxlc3MpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDI3MTEzMSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Mjk4
LDcgKzcyOTgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU2FtZVZhbHVlKE5vCiAg
ICAgdW5ibGVzc2VkQm9vbGVhblJlc3VsdChyZXN1bHRHUFIsIG5vZGUsIFVzZUNoaWxkcmVuQ2Fs
bGVkRXhwbGljaXRseSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJpbmda
ZXJvTGVuZ3RoKE5vZGUqIG5vZGUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVG9Cb29s
ZWFuU3RyaW5nKE5vZGUqIG5vZGUsIGJvb2wgaW52ZXJ0KQogewogICAgIFNwZWN1bGF0ZUNlbGxP
cGVyYW5kIHN0cih0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgR1BSUmVnIHN0ckdQUiA9IHN0
ci5ncHIoKTsKQEAgLTczMTAsMTEgKzczMTAsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVN0cmluZ1plcm9MZQogICAgIEdQUlJlZyBlcUdQUiA9IGVxLmdwcigpOwogCiAgICAgbV9q
aXQubW92ZShUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2ppdC5ncmFwaCgpLCBqc0VtcHR5
U3RyaW5nKHZtKCkpKSwgZXFHUFIpOwotICAgIG1faml0LmNvbXBhcmVQdHIoQ0NhbGxIZWxwZXJz
OjpFcXVhbCwgc3RyR1BSLCBlcUdQUiwgZXFHUFIpOworICAgIG1faml0LmNvbXBhcmVQdHIoaW52
ZXJ0ID8gQ0NhbGxIZWxwZXJzOjpFcXVhbCA6IENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHN0ckdQ
UiwgZXFHUFIsIGVxR1BSKTsKICAgICB1bmJsZXNzZWRCb29sZWFuUmVzdWx0KGVxR1BSLCBub2Rl
KTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ2ljYWxOb3RTdHJpbmdPck90
aGVyKE5vZGUqIG5vZGUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVG9Cb29sZWFuU3Ry
aW5nT3JPdGhlcihOb2RlKiBub2RlLCBib29sIGludmVydCkKIHsKICAgICBKU1ZhbHVlT3BlcmFu
ZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsK
ICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKQEAgLTczMjcsMTcgKzczMjcsMTYgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ2ljYWxOb3RTdAogICAgICAgICB2YWx1ZVJlZ3Ms
IG5vZGUtPmNoaWxkMSgpLCAoflNwZWNDZWxsQ2hlY2spIHwgU3BlY1N0cmluZywgbV9qaXQuYnJh
bmNoSWZOb3RTdHJpbmcoY2VsbEdQUikpOwogCiAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRy
Ojp3ZWFrUG9pbnRlcihtX2ppdC5ncmFwaCgpLCBqc0VtcHR5U3RyaW5nKHZtKCkpKSwgdGVtcEdQ
Uik7Ci0gICAgbV9qaXQuY29tcGFyZVB0cihDQ2FsbEhlbHBlcnM6OkVxdWFsLCBjZWxsR1BSLCB0
ZW1wR1BSLCB0ZW1wR1BSKTsKKyAgICBtX2ppdC5jb21wYXJlUHRyKGludmVydCA/IENDYWxsSGVs
cGVyczo6RXF1YWwgOiBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBjZWxsR1BSLCB0ZW1wR1BSLCB0
ZW1wR1BSKTsKICAgICBhdXRvIGRvbmUgPSBtX2ppdC5qdW1wKCk7CiAKICAgICBub3RDZWxsLmxp
bmsoJm1faml0KTsKICAgICBERkdfVFlQRV9DSEVDSygKICAgICAgICAgdmFsdWVSZWdzLCBub2Rl
LT5jaGlsZDEoKSwgU3BlY0NlbGxDaGVjayB8IFNwZWNPdGhlciwgbV9qaXQuYnJhbmNoSWZOb3RP
dGhlcih2YWx1ZVJlZ3MsIHRlbXBHUFIpKTsKLSAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMigx
KSwgdGVtcEdQUik7CisgICAgbV9qaXQubW92ZShpbnZlcnQgPyBUcnVzdGVkSW1tMzIoMSkgOiBU
cnVzdGVkSW1tMzIoMCksIHRlbXBHUFIpOwogCiAgICAgZG9uZS5saW5rKCZtX2ppdCk7CiAgICAg
dW5ibGVzc2VkQm9vbGVhblJlc3VsdCh0ZW1wR1BSLCBub2RlKTsKLQogfQogCiB2b2lkIFNwZWN1
bGF0aXZlSklUOjplbWl0U3RyaW5nQnJhbmNoKEVkZ2Ugbm9kZVVzZSwgQmFzaWNCbG9jayogdGFr
ZW4sIEJhc2ljQmxvY2sqIG5vdFRha2VuKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMjcxMTMxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTYyLDkgKzExNjIsMTAgQEAgcHVibGljOgogICAgIHZvaWQgY29tcGlsZU9iamVjdEVxdWFsaXR5
KE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVPYmplY3RTdHJpY3RFcXVhbGl0eShFZGdlIG9iamVj
dENoaWxkLCBFZGdlIG90aGVyQ2hpbGQpOwogICAgIHZvaWQgY29tcGlsZU9iamVjdFRvT2JqZWN0
T3JPdGhlckVxdWFsaXR5KEVkZ2UgbGVmdENoaWxkLCBFZGdlIHJpZ2h0Q2hpbGQpOwotICAgIHZv
aWQgY29tcGlsZU9iamVjdE9yT3RoZXJMb2dpY2FsTm90KEVkZ2UgdmFsdWUpOwotICAgIHZvaWQg
Y29tcGlsZUxvZ2ljYWxOb3QoTm9kZSopOwotICAgIHZvaWQgY29tcGlsZUxvZ2ljYWxOb3RTdHJp
bmdPck90aGVyKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVUb0Jvb2xlYW4oTm9kZSosIGJvb2wg
aW52ZXJ0KTsKKyAgICB2b2lkIGNvbXBpbGVUb0Jvb2xlYW5PYmplY3RPck90aGVyKEVkZ2UgdmFs
dWUsIGJvb2wgaW52ZXJ0KTsKKyAgICB2b2lkIGNvbXBpbGVUb0Jvb2xlYW5TdHJpbmcoTm9kZSos
IGJvb2wgaW52ZXJ0KTsKKyAgICB2b2lkIGNvbXBpbGVUb0Jvb2xlYW5TdHJpbmdPck90aGVyKE5v
ZGUqLCBib29sIGludmVydCk7CiAgICAgdm9pZCBjb21waWxlU3RyaW5nRXF1YWxpdHkoCiAgICAg
ICAgIE5vZGUqLCBHUFJSZWcgbGVmdEdQUiwgR1BSUmVnIHJpZ2h0R1BSLCBHUFJSZWcgbGVuZ3Ro
R1BSLAogICAgICAgICBHUFJSZWcgbGVmdFRlbXBHUFIsIEdQUlJlZyByaWdodFRlbXBHUFIsIEdQ
UlJlZyBsZWZ0VGVtcDJHUFIsCkBAIC0xMTc0LDcgKzExNzUsNiBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBjb21waWxlU3RyaW5nSWRlbnRFcXVhbGl0eShOb2RlKik7CiAgICAgdm9pZCBjb21waWxlU3Ry
aW5nVG9VbnR5cGVkRXF1YWxpdHkoTm9kZSosIEVkZ2Ugc3RyaW5nRWRnZSwgRWRnZSB1bnR5cGVk
RWRnZSk7CiAgICAgdm9pZCBjb21waWxlU3RyaW5nSWRlbnRUb05vdFN0cmluZ1ZhckVxdWFsaXR5
KE5vZGUqLCBFZGdlIHN0cmluZ0VkZ2UsIEVkZ2Ugbm90U3RyaW5nVmFyRWRnZSk7Ci0gICAgdm9p
ZCBjb21waWxlU3RyaW5nWmVyb0xlbmd0aChOb2RlKik7CiAgICAgdm9pZCBjb21waWxlTWlzY1N0
cmljdEVxKE5vZGUqKTsKIAogICAgIHZvaWQgY29tcGlsZVN5bWJvbEVxdWFsaXR5KE5vZGUqKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV2F0Y2hwb2ludENvbGxlY3Rpb25Q
aGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXYXRj
aHBvaW50Q29sbGVjdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMjcxMTMxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtODMsNiArODMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGhhbmRs
ZU1hc3F1ZXJhZGVzQXNVbmRlZmluZWQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgCisgICAgICAgIGNhc2UgVG9Cb29sZWFuOgogICAgICAgICBjYXNlIExvZ2ljYWxOb3Q6CiAg
ICAgICAgIGNhc2UgQnJhbmNoOgogICAgICAgICAgICAgc3dpdGNoIChtX25vZGUtPmNoaWxkMSgp
LnVzZUtpbmQoKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmls
aXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2Fw
YWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMjcxMTMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTUsNiArMTk1LDcg
QEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIAogICAgIGNhc2UgTG9h
ZFZhcmFyZ3M6CiAgICAgY2FzZSBWYWx1ZVRvSW50MzI6CiAgICAgY2FzZSBCcmFuY2g6CisgICAg
Y2FzZSBUb0Jvb2xlYW46CiAgICAgY2FzZSBMb2dpY2FsTm90OgogICAgIGNhc2UgQXNzZXJ0SW5C
b3VuZHM6CiAgICAgY2FzZSBDaGVja0luQm91bmRzOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjcxMTMxKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzE0LDYgKzEzMTQsOSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFNhbWVWYWx1ZToK
ICAgICAgICAgICAgIGNvbXBpbGVTYW1lVmFsdWUoKTsKICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFRvQm9vbGVhbjoKKyAgICAgICAgICAgIGNvbXBpbGVUb0Jvb2xlYW4oKTsKKyAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExvZ2ljYWxOb3Q6CiAgICAgICAgICAgICBj
b21waWxlTG9naWNhbE5vdCgpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC05NTE1LDYgKzk1MTgs
MTEgQEAgcHJpdmF0ZToKICAgICAgICAgc2V0Qm9vbGVhbih2bUNhbGwoSW50MzIsIG9wZXJhdGlv
blNhbWVWYWx1ZSwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgbG93SlNWYWx1ZShtX25vZGUt
PmNoaWxkMSgpKSwgbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMigpKSkpOwogICAgIH0KICAgICAK
KyAgICB2b2lkIGNvbXBpbGVUb0Jvb2xlYW4oKQorICAgIHsKKyAgICAgICAgc2V0Qm9vbGVhbihi
b29saWZ5KG1fbm9kZS0+Y2hpbGQxKCkpKTsKKyAgICB9CisKICAgICB2b2lkIGNvbXBpbGVMb2dp
Y2FsTm90KCkKICAgICB7CiAgICAgICAgIHNldEJvb2xlYW4obV9vdXQubG9naWNhbE5vdChib29s
aWZ5KG1fbm9kZS0+Y2hpbGQxKCkpKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>422080</attachid>
            <date>2021-03-03 07:41:20 -0800</date>
            <delta_ts>2021-03-04 10:57:13 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-220322-20210303174118.patch</filename>
            <type>text/plain</type>
            <size>41263</size>
            <attacher name="Alexey Shvayka">ashvayka</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNzM3NDkpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDIwIEBACisyMDIxLTAzLTAyICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNo
QGdtYWlsLmNvbT4KKworICAgICAgICBCb29sZWFuQ29uc3RydWN0b3Igc2hvdWxkIGJlIGlubGlu
ZWQgaW4gREZHIC8gRlRMCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMjAzMjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBSZW9yZ2FuaXplIHRlc3RzIHRvIG1ha2Ugc3VyZSBldmVyeSBVc2VLaW5kIC8gaW52
ZXJ0IGNvbWJpbmF0aW9uIGlzIGNvdmVyZWQuCisKKyAgICAgICAgKiBtaWNyb2JlbmNobWFya3Mv
YXJyYXktZmlsdGVyLWJvb2xlYW4tY29uc3RydWN0b3IuanM6IEFkZGVkLgorICAgICAgICAqIHN0
cmVzcy9kZmctYnJhbmNoLmpzOiBBZGRlZC4KKyAgICAgICAgKiBzdHJlc3MvZGZnLXRvLWJvb2xl
YW4uanM6IEFkZGVkLgorICAgICAgICAqIHN0cmVzcy9sb2dpY2FsLW5vdC1tYXNxdWVyYWRlcy1h
cy11bmRlZmluZWQuanM6IFJlbW92ZWQuCisgICAgICAgICogc3RyZXNzL2xvZ2ljYWwtbm90LW1h
c3F1ZXJhZGVzLmpzOiBSZW1vdmVkLgorICAgICAgICAqIHN0cmVzcy9sb2dpY2FsLW5vdC5qczog
UmVtb3ZlZC4KKyAgICAgICAgKiBzdHJlc3MvdmFsdWUtdG8tYm9vbGVhbi5qczogUmVtb3ZlZC4K
KwogMjAyMS0wMy0wMSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgogCiAgICAg
ICAgIFJFR1JFU1NJT046IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzIHRyaWdnZXJpbmcgYSBzZXR0
ZXIKSW5kZXg6IEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2FycmF5LWZpbHRlci1ib29sZWFuLWNv
bnN0cnVjdG9yLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2FycmF5
LWZpbHRlci1ib29sZWFuLWNvbnN0cnVjdG9yLmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMv
bWljcm9iZW5jaG1hcmtzL2FycmF5LWZpbHRlci1ib29sZWFuLWNvbnN0cnVjdG9yLmpzCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKKyhmdW5jdGlvbigpIHsKKyAgICB2YXIgYXJyYXkg
PSBuZXcgQXJyYXkoMzAwKTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDMwMDsgaSsrKQorICAg
ICAgICBhcnJheVtpXSA9IGkgJSAxMDsKKworICAgIHZhciBjb21wYWN0ZWQ7CisgICAgZm9yICh2
YXIgaiA9IDA7IGogPCAzMDAwMDsgaisrKQorICAgICAgICBjb21wYWN0ZWQgPSBhcnJheS5maWx0
ZXIoQm9vbGVhbik7CisKKyAgICBpZiAoY29tcGFjdGVkLmxlbmd0aCAhPT0gMjcwKQorICAgICAg
ICB0aHJvdyBuZXcgRXJyb3IoIkJhZCBhc3NlcnQhIik7Cit9KSgpOwpJbmRleDogSlNUZXN0cy9z
dHJlc3MvZGZnLWJyYW5jaC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9kZmctYnJh
bmNoLmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvc3RyZXNzL2RmZy1icmFuY2guanMJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTkgQEAKKy8vQCBpZiAkYnVpbGRUeXBlID09ICJyZWxl
YXNlIiB0aGVuIHJ1bkRlZmF1bHQgZWxzZSBza2lwIGVuZAorCitmdW5jdGlvbiBzaG91bGRCZShh
Y3R1YWwsIGV4cGVjdGVkKSB7CisgICAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpCisgICAgICAg
IHRocm93IG5ldyBFcnJvcihgQmFkIHZhbHVlOiAke2FjdHVhbH0hYCk7Cit9Citub0lubGluZShz
aG91bGRCZSk7CisKKyhmdW5jdGlvbiBPYmplY3RPck90aGVyVXNlKCkgeworICAgIGZ1bmN0aW9u
IHRlc3QxKHgpIHsgaWYgKHgpIHJldHVybiB0cnVlOyBlbHNlIHJldHVybiBmYWxzZTsgfQorICAg
IGZ1bmN0aW9uIHRlc3QyKHgpIHsgcmV0dXJuIHggPyB0cnVlIDogZmFsc2U7IH0KKyAgICBmdW5j
dGlvbiB0ZXN0SW52ZXJ0KHgpIHsgaWYgKCF4KSByZXR1cm4gdHJ1ZTsgZWxzZSByZXR1cm4gZmFs
c2U7IH0KKworICAgIG5vSW5saW5lKHRlc3QxKTsKKyAgICBub0lubGluZSh0ZXN0Mik7CisgICAg
bm9JbmxpbmUodGVzdEludmVydCk7CisKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDFlNTsgaSsr
KSB7CisgICAgICAgIHNob3VsZEJlKHRlc3QxKHVuZGVmaW5lZCksIGZhbHNlKTsKKyAgICAgICAg
c2hvdWxkQmUodGVzdDEoe30pLCB0cnVlKTsKKyAgICAgICAgc2hvdWxkQmUodGVzdDIoW10pLCB0
cnVlKTsKKyAgICAgICAgc2hvdWxkQmUodGVzdEludmVydChuZXcgU3RyaW5nKCIiKSksIGZhbHNl
KTsKKyAgICAgICAgc2hvdWxkQmUodGVzdEludmVydChudWxsKSwgdHJ1ZSk7CisKKyAgICAgICAg
c2hvdWxkQmUodGVzdDEobWFrZU1hc3F1ZXJhZGVyKCkpLCBmYWxzZSk7CisgICAgICAgIHNob3Vs
ZEJlKHRlc3QyKG1ha2VNYXNxdWVyYWRlcigpKSwgZmFsc2UpOworICAgICAgICBzaG91bGRCZSh0
ZXN0SW52ZXJ0KG1ha2VNYXNxdWVyYWRlcigpKSwgdHJ1ZSk7CisgICAgfQorfSkoKTsKKworKGZ1
bmN0aW9uIEludDMyVXNlKCkgeworICAgIGZ1bmN0aW9uIHRlc3QxKHgpIHsgaWYgKHgpIHJldHVy
biB0cnVlOyBlbHNlIHJldHVybiBmYWxzZTsgfQorICAgIGZ1bmN0aW9uIHRlc3QyKHgpIHsgcmV0
dXJuIHggPyB0cnVlIDogZmFsc2U7IH0KKyAgICBmdW5jdGlvbiB0ZXN0SW52ZXJ0KHgpIHsgaWYg
KCF4KSByZXR1cm4gdHJ1ZTsgZWxzZSByZXR1cm4gZmFsc2U7IH0KKworICAgIG5vSW5saW5lKHRl
c3QxKTsKKyAgICBub0lubGluZSh0ZXN0Mik7CisgICAgbm9JbmxpbmUodGVzdEludmVydCk7CisK
KyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDFlNTsgaSsrKSB7CisgICAgICAgIHNob3VsZEJlKHRl
c3QxKDEpLCB0cnVlKTsKKyAgICAgICAgc2hvdWxkQmUodGVzdDIoMCksIGZhbHNlKTsKKyAgICAg
ICAgc2hvdWxkQmUodGVzdDIoMjE0NzQ4MzY0NyksIHRydWUpOworICAgICAgICBzaG91bGRCZSh0
ZXN0SW52ZXJ0KC0yMTQ3NDgzNjQ4KSwgZmFsc2UpOworICAgIH0KK30pKCk7CisKKyhmdW5jdGlv
biBEb3VibGVSZXBVc2UoKSB7CisgICAgZnVuY3Rpb24gdGVzdDEoeCkgeyBpZiAoeCkgcmV0dXJu
IHRydWU7IGVsc2UgcmV0dXJuIGZhbHNlOyB9CisgICAgZnVuY3Rpb24gdGVzdDIoeCkgeyByZXR1
cm4geCA/IHRydWUgOiBmYWxzZTsgfQorICAgIGZ1bmN0aW9uIHRlc3RJbnZlcnQoeCkgeyBpZiAo
IXgpIHJldHVybiB0cnVlOyBlbHNlIHJldHVybiBmYWxzZTsgfQorCisgICAgbm9JbmxpbmUodGVz
dDEpOworICAgIG5vSW5saW5lKHRlc3QyKTsKKyAgICBub0lubGluZSh0ZXN0SW52ZXJ0KTsKKwor
ICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMWU1OyBpKyspIHsKKyAgICAgICAgc2hvdWxkQmUodGVz
dDEoMC41KSwgdHJ1ZSk7CisgICAgICAgIHNob3VsZEJlKHRlc3QxKC1JbmZpbml0eSksIHRydWUp
OworICAgICAgICBzaG91bGRCZSh0ZXN0MigtMCksIGZhbHNlKTsKKyAgICAgICAgc2hvdWxkQmUo
dGVzdEludmVydChOYU4pLCB0cnVlKTsKKyAgICB9Cit9KSgpOworCisoZnVuY3Rpb24gQm9vbGVh
blVzZSgpIHsKKyAgICBmdW5jdGlvbiB0ZXN0MSh4KSB7IGlmICh4KSByZXR1cm4gdHJ1ZTsgZWxz
ZSByZXR1cm4gZmFsc2U7IH0KKyAgICBmdW5jdGlvbiB0ZXN0Mih4KSB7IHJldHVybiB4ID8gdHJ1
ZSA6IGZhbHNlOyB9CisgICAgZnVuY3Rpb24gdGVzdEludmVydCh4KSB7IGlmICgheCkgcmV0dXJu
IHRydWU7IGVsc2UgcmV0dXJuIGZhbHNlOyB9CisgICAgZnVuY3Rpb24gdGVzdFR5cGVDaGVjayh4
KSB7IHJldHVybiB0ZXN0MSh4KSA/IHRydWUgOiBmYWxzZTsgfQorCisgICAgbm9JbmxpbmUodGVz
dDEpOworICAgIG5vSW5saW5lKHRlc3QyKTsKKyAgICBub0lubGluZSh0ZXN0SW52ZXJ0KTsKKyAg
ICBub0lubGluZSh0ZXN0VHlwZUNoZWNrKTsKKworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMWU1
OyBpKyspIHsKKyAgICAgICAgLy8gbmVlZHNUeXBlQ2hlY2s6IGZhbHNlCisgICAgICAgIHNob3Vs
ZEJlKHRlc3QxKHRydWUpLCB0cnVlKTsKKyAgICAgICAgc2hvdWxkQmUodGVzdDIoZmFsc2UpLCBm
YWxzZSk7CisgICAgICAgIHNob3VsZEJlKHRlc3RJbnZlcnQodHJ1ZSksIGZhbHNlKTsKKworICAg
ICAgICAvLyBuZWVkc1R5cGVDaGVjazogdHJ1ZQorICAgICAgICBzaG91bGRCZSh0ZXN0VHlwZUNo
ZWNrKHRydWUpLCB0cnVlKTsKKyAgICB9Cit9KSgpOworCisoZnVuY3Rpb24gVW50eXBlZFVzZSgp
IHsKKyAgICBmdW5jdGlvbiB0ZXN0MSh4KSB7IGlmICh4KSByZXR1cm4gdHJ1ZTsgZWxzZSByZXR1
cm4gZmFsc2U7IH0KKyAgICBmdW5jdGlvbiB0ZXN0Mih4KSB7IHJldHVybiB4ID8gdHJ1ZSA6IGZh
bHNlOyB9CisgICAgZnVuY3Rpb24gdGVzdEludmVydCh4KSB7IGlmICgheCkgcmV0dXJuIHRydWU7
IGVsc2UgcmV0dXJuIGZhbHNlOyB9CisKKyAgICBub0lubGluZSh0ZXN0MSk7CisgICAgbm9Jbmxp
bmUodGVzdDIpOworICAgIG5vSW5saW5lKHRlc3RJbnZlcnQpOworCisgICAgY29uc3QgdGVzdENh
c2VzID0gWworICAgICAgICBbdW5kZWZpbmVkLCBmYWxzZV0sCisgICAgICAgIFtudWxsLCBmYWxz
ZV0sCisgICAgICAgIFswLCBmYWxzZV0sCisgICAgICAgIFsyMTQ3NDgzNjQ3LCB0cnVlXSwKKyAg
ICAgICAgW2ZhbHNlLCBmYWxzZV0sCisgICAgICAgIFt0cnVlLCB0cnVlXSwKKyAgICAgICAgWyIi
ICsgIiIgKyAiIiwgZmFsc2VdLAorICAgICAgICBbImZvbyIsIHRydWVdLAorICAgICAgICBbLTAs
IGZhbHNlXSwKKyAgICAgICAgWzMuMTQsIHRydWVdLAorICAgICAgICBbTmFOLCBmYWxzZV0sCisg
ICAgICAgIFtJbmZpbml0eSwgdHJ1ZV0sCisgICAgICAgIFtTeW1ib2woKSwgdHJ1ZV0sCisgICAg
ICAgIFt7fSwgdHJ1ZV0sCisgICAgICAgIFtbXSwgdHJ1ZV0sCisgICAgICAgIFtmdW5jdGlvbigp
IHt9LCB0cnVlXSwKKyAgICAgICAgW21ha2VNYXNxdWVyYWRlcigpLCBmYWxzZV0sCisgICAgXTsK
KworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMWU1OyBpKyspIHsKKyAgICAgICAgZm9yIChjb25z
dCBbdmFsdWUsIGV4cGVjdGVkXSBvZiB0ZXN0Q2FzZXMpIHsKKyAgICAgICAgICAgIHNob3VsZEJl
KHRlc3QxKHZhbHVlKSwgZXhwZWN0ZWQpOworICAgICAgICAgICAgc2hvdWxkQmUodGVzdDIodmFs
dWUpLCBleHBlY3RlZCk7CisgICAgICAgICAgICBzaG91bGRCZSh0ZXN0SW52ZXJ0KHZhbHVlKSwg
IWV4cGVjdGVkKTsKKyAgICAgICAgfQorICAgIH0KK30pKCk7CisKKyhmdW5jdGlvbiBTdHJpbmdV
c2UoKSB7CisgICAgZnVuY3Rpb24gdGVzdDEoeCkgeyBpZiAoeCkgcmV0dXJuIHRydWU7IGVsc2Ug
cmV0dXJuIGZhbHNlOyB9CisgICAgZnVuY3Rpb24gdGVzdDIoeCkgeyByZXR1cm4geCA/IHRydWUg
OiBmYWxzZTsgfQorICAgIGZ1bmN0aW9uIHRlc3RJbnZlcnQoeCkgeyBpZiAoIXgpIHJldHVybiB0
cnVlOyBlbHNlIHJldHVybiBmYWxzZTsgfQorCisgICAgbm9JbmxpbmUodGVzdDEpOworICAgIG5v
SW5saW5lKHRlc3QyKTsKKyAgICBub0lubGluZSh0ZXN0SW52ZXJ0KTsKKworICAgIGZvciAobGV0
IGkgPSAwOyBpIDwgMWU1OyBpKyspIHsKKyAgICAgICAgc2hvdWxkQmUodGVzdDEoIlwwIiksIHRy
dWUpOworICAgICAgICBzaG91bGRCZSh0ZXN0MigiIiksIGZhbHNlKTsKKyAgICAgICAgc2hvdWxk
QmUodGVzdEludmVydCgiIiArICIiICsgIiIpLCB0cnVlKTsKKyAgICAgICAgc2hvdWxkQmUodGVz
dEludmVydCgiZm9vIiArICJmb28iICsgImZvbyIpLCBmYWxzZSk7CisgICAgfQorfSkoKTsKKwor
KGZ1bmN0aW9uIFN0cmluZ09yT3RoZXJVc2UoKSB7CisgICAgZnVuY3Rpb24gdGVzdDEoeCkgeyBp
ZiAoeCkgcmV0dXJuIHRydWU7IGVsc2UgcmV0dXJuIGZhbHNlOyB9CisgICAgZnVuY3Rpb24gdGVz
dDIoeCkgeyByZXR1cm4geCA/IHRydWUgOiBmYWxzZTsgfQorICAgIGZ1bmN0aW9uIHRlc3RJbnZl
cnQoeCkgeyBpZiAoIXgpIHJldHVybiB0cnVlOyBlbHNlIHJldHVybiBmYWxzZTsgfQorCisgICAg
bm9JbmxpbmUodGVzdDEpOworICAgIG5vSW5saW5lKHRlc3QyKTsKKyAgICBub0lubGluZSh0ZXN0
SW52ZXJ0KTsKKworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMWU1OyBpKyspIHsKKyAgICAgICAg
c2hvdWxkQmUodGVzdDEoIiIgKyAiIiArICIiKSwgZmFsc2UpOworICAgICAgICBzaG91bGRCZSh0
ZXN0MShudWxsKSwgZmFsc2UpOworICAgICAgICBzaG91bGRCZSh0ZXN0MigiZm9vIiksIHRydWUp
OworICAgICAgICBzaG91bGRCZSh0ZXN0Mih1bmRlZmluZWQpLCBmYWxzZSk7CisgICAgICAgIHNo
b3VsZEJlKHRlc3RJbnZlcnQoIiIpLCB0cnVlKTsKKyAgICAgICAgc2hvdWxkQmUodGVzdEludmVy
dChudWxsKSwgdHJ1ZSk7CisgICAgfQorfSkoKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL2RmZy10
by1ib29sZWFuLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL2RmZy10by1ib29sZWFu
LmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvc3RyZXNzL2RmZy10by1ib29sZWFuLmpzCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTU5IEBACisvL0AgaWYgJGJ1aWxkVHlwZSA9PSAicmVs
ZWFzZSIgdGhlbiBydW5EZWZhdWx0IGVsc2Ugc2tpcCBlbmQKKworZnVuY3Rpb24gc2hvdWxkQmUo
YWN0dWFsLCBleHBlY3RlZCkgeworICAgIGlmIChhY3R1YWwgIT09IGV4cGVjdGVkKQorICAgICAg
ICB0aHJvdyBuZXcgRXJyb3IoYEJhZCB2YWx1ZTogJHthY3R1YWx9IWApOworfQorbm9JbmxpbmUo
c2hvdWxkQmUpOworCisoZnVuY3Rpb24gT2JqZWN0T3JPdGhlclVzZSgpIHsKKyAgICBmdW5jdGlv
biB0ZXN0MSh4KSB7IHJldHVybiAhIXg7IH0KKyAgICBmdW5jdGlvbiB0ZXN0Mih4KSB7IHJldHVy
biBCb29sZWFuKHgpOyB9CisgICAgZnVuY3Rpb24gdGVzdEludmVydCh4KSB7IHJldHVybiAheDsg
fQorCisgICAgbm9JbmxpbmUodGVzdDEpOworICAgIG5vSW5saW5lKHRlc3QyKTsKKyAgICBub0lu
bGluZSh0ZXN0SW52ZXJ0KTsKKworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMWU1OyBpKyspIHsK
KyAgICAgICAgc2hvdWxkQmUodGVzdDEodW5kZWZpbmVkKSwgZmFsc2UpOworICAgICAgICBzaG91
bGRCZSh0ZXN0MSh7fSksIHRydWUpOworICAgICAgICBzaG91bGRCZSh0ZXN0MihbXSksIHRydWUp
OworICAgICAgICBzaG91bGRCZSh0ZXN0SW52ZXJ0KG5ldyBTdHJpbmcoIiIpKSwgZmFsc2UpOwor
ICAgICAgICBzaG91bGRCZSh0ZXN0SW52ZXJ0KG51bGwpLCB0cnVlKTsKKworICAgICAgICBzaG91
bGRCZSh0ZXN0MShtYWtlTWFzcXVlcmFkZXIoKSksIGZhbHNlKTsKKyAgICAgICAgc2hvdWxkQmUo
dGVzdDIobWFrZU1hc3F1ZXJhZGVyKCkpLCBmYWxzZSk7CisgICAgICAgIHNob3VsZEJlKHRlc3RJ
bnZlcnQobWFrZU1hc3F1ZXJhZGVyKCkpLCB0cnVlKTsKKyAgICB9Cit9KSgpOworCisoZnVuY3Rp
b24gSW50MzJVc2UoKSB7CisgICAgZnVuY3Rpb24gdGVzdDEoeCkgeyByZXR1cm4gISF4OyB9Cisg
ICAgZnVuY3Rpb24gdGVzdDIoeCkgeyByZXR1cm4gQm9vbGVhbih4KTsgfQorICAgIGZ1bmN0aW9u
IHRlc3RJbnZlcnQoeCkgeyByZXR1cm4gIXg7IH0KKworICAgIG5vSW5saW5lKHRlc3QxKTsKKyAg
ICBub0lubGluZSh0ZXN0Mik7CisgICAgbm9JbmxpbmUodGVzdEludmVydCk7CisKKyAgICBmb3Ig
KGxldCBpID0gMDsgaSA8IDFlNTsgaSsrKSB7CisgICAgICAgIHNob3VsZEJlKHRlc3QxKDEpLCB0
cnVlKTsKKyAgICAgICAgc2hvdWxkQmUodGVzdDIoMCksIGZhbHNlKTsKKyAgICAgICAgc2hvdWxk
QmUodGVzdDIoMjE0NzQ4MzY0NyksIHRydWUpOworICAgICAgICBzaG91bGRCZSh0ZXN0SW52ZXJ0
KC0yMTQ3NDgzNjQ4KSwgZmFsc2UpOworICAgIH0KK30pKCk7CisKKyhmdW5jdGlvbiBEb3VibGVS
ZXBVc2UoKSB7CisgICAgZnVuY3Rpb24gdGVzdDEoeCkgeyByZXR1cm4gISF4OyB9CisgICAgZnVu
Y3Rpb24gdGVzdDIoeCkgeyByZXR1cm4gQm9vbGVhbih4KTsgfQorICAgIGZ1bmN0aW9uIHRlc3RJ
bnZlcnQoeCkgeyByZXR1cm4gIXg7IH0KKworICAgIG5vSW5saW5lKHRlc3QxKTsKKyAgICBub0lu
bGluZSh0ZXN0Mik7CisgICAgbm9JbmxpbmUodGVzdEludmVydCk7CisKKyAgICBmb3IgKGxldCBp
ID0gMDsgaSA8IDFlNTsgaSsrKSB7CisgICAgICAgIHNob3VsZEJlKHRlc3QxKDAuNSksIHRydWUp
OworICAgICAgICBzaG91bGRCZSh0ZXN0MSgtSW5maW5pdHkpLCB0cnVlKTsKKyAgICAgICAgc2hv
dWxkQmUodGVzdDIoLTApLCBmYWxzZSk7CisgICAgICAgIHNob3VsZEJlKHRlc3RJbnZlcnQoTmFO
KSwgdHJ1ZSk7CisgICAgfQorfSkoKTsKKworKGZ1bmN0aW9uIEJvb2xlYW5Vc2UoKSB7CisgICAg
ZnVuY3Rpb24gdGVzdDEoeCkgeyByZXR1cm4gISF4OyB9CisgICAgZnVuY3Rpb24gdGVzdDIoeCkg
eyByZXR1cm4gQm9vbGVhbih4KTsgfQorICAgIGZ1bmN0aW9uIHRlc3RJbnZlcnQoeCkgeyByZXR1
cm4gIXg7IH0KKworICAgIG5vSW5saW5lKHRlc3QxKTsKKyAgICBub0lubGluZSh0ZXN0Mik7Cisg
ICAgbm9JbmxpbmUodGVzdEludmVydCk7CisKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDFlNTsg
aSsrKSB7CisgICAgICAgIC8vIG5lZWRzVHlwZUNoZWNrOiBmYWxzZQorICAgICAgICBzaG91bGRC
ZSh0ZXN0MSh0cnVlKSwgdHJ1ZSk7CisgICAgICAgIHNob3VsZEJlKHRlc3QyKGZhbHNlKSwgZmFs
c2UpOworICAgICAgICBzaG91bGRCZSh0ZXN0SW52ZXJ0KHRydWUpLCBmYWxzZSk7CisKKyAgICAg
ICAgLy8gbmVlZHNUeXBlQ2hlY2s6IHRydWUKKyAgICAgICAgc2hvdWxkQmUoIXRlc3QxKGZhbHNl
KSwgdHJ1ZSk7CisgICAgICAgIHNob3VsZEJlKEJvb2xlYW4odGVzdDIodHJ1ZSkpLCB0cnVlKTsK
KyAgICAgICAgc2hvdWxkQmUoIXRlc3RJbnZlcnQoZmFsc2UpLCBmYWxzZSk7CisgICAgfQorfSko
KTsKKworKGZ1bmN0aW9uIFVudHlwZWRVc2UoKSB7CisgICAgZnVuY3Rpb24gdGVzdDEoeCkgeyBy
ZXR1cm4gISF4OyB9CisgICAgZnVuY3Rpb24gdGVzdDIoeCkgeyByZXR1cm4gQm9vbGVhbih4KTsg
fQorICAgIGZ1bmN0aW9uIHRlc3RJbnZlcnQoeCkgeyByZXR1cm4gIXg7IH0KKworICAgIG5vSW5s
aW5lKHRlc3QxKTsKKyAgICBub0lubGluZSh0ZXN0Mik7CisgICAgbm9JbmxpbmUodGVzdEludmVy
dCk7CisKKyAgICBjb25zdCB0ZXN0Q2FzZXMgPSBbCisgICAgICAgIFt1bmRlZmluZWQsIGZhbHNl
XSwKKyAgICAgICAgW251bGwsIGZhbHNlXSwKKyAgICAgICAgWzAsIGZhbHNlXSwKKyAgICAgICAg
WzIxNDc0ODM2NDcsIHRydWVdLAorICAgICAgICBbZmFsc2UsIGZhbHNlXSwKKyAgICAgICAgW3Ry
dWUsIHRydWVdLAorICAgICAgICBbIiIgKyAiIiArICIiLCBmYWxzZV0sCisgICAgICAgIFsiZm9v
IiwgdHJ1ZV0sCisgICAgICAgIFstMCwgZmFsc2VdLAorICAgICAgICBbMy4xNCwgdHJ1ZV0sCisg
ICAgICAgIFtOYU4sIGZhbHNlXSwKKyAgICAgICAgW0luZmluaXR5LCB0cnVlXSwKKyAgICAgICAg
W1N5bWJvbCgpLCB0cnVlXSwKKyAgICAgICAgW3t9LCB0cnVlXSwKKyAgICAgICAgW1tdLCB0cnVl
XSwKKyAgICAgICAgW2Z1bmN0aW9uKCkge30sIHRydWVdLAorICAgICAgICBbbWFrZU1hc3F1ZXJh
ZGVyKCksIGZhbHNlXSwKKyAgICBdOworCisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxZTU7IGkr
KykgeworICAgICAgICBmb3IgKGNvbnN0IFt2YWx1ZSwgZXhwZWN0ZWRdIG9mIHRlc3RDYXNlcykg
eworICAgICAgICAgICAgc2hvdWxkQmUodGVzdDEodmFsdWUpLCBleHBlY3RlZCk7CisgICAgICAg
ICAgICBzaG91bGRCZSh0ZXN0Mih2YWx1ZSksIGV4cGVjdGVkKTsKKyAgICAgICAgICAgIHNob3Vs
ZEJlKHRlc3RJbnZlcnQodmFsdWUpLCAhZXhwZWN0ZWQpOworICAgICAgICB9CisgICAgfQorfSko
KTsKKworKGZ1bmN0aW9uIFN0cmluZ1VzZSgpIHsKKyAgICBmdW5jdGlvbiB0ZXN0MSh4KSB7IHJl
dHVybiAhIXg7IH0KKyAgICBmdW5jdGlvbiB0ZXN0Mih4KSB7IHJldHVybiBCb29sZWFuKHgpOyB9
CisgICAgZnVuY3Rpb24gdGVzdEludmVydCh4KSB7IHJldHVybiAheDsgfQorCisgICAgbm9Jbmxp
bmUodGVzdDEpOworICAgIG5vSW5saW5lKHRlc3QyKTsKKyAgICBub0lubGluZSh0ZXN0SW52ZXJ0
KTsKKworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMWU1OyBpKyspIHsKKyAgICAgICAgc2hvdWxk
QmUodGVzdDEoIlwwIiksIHRydWUpOworICAgICAgICBzaG91bGRCZSh0ZXN0MigiIiksIGZhbHNl
KTsKKyAgICAgICAgc2hvdWxkQmUodGVzdEludmVydCgiIiArICIiICsgIiIpLCB0cnVlKTsKKyAg
ICAgICAgc2hvdWxkQmUodGVzdEludmVydCgiZm9vIiArICJmb28iICsgImZvbyIpLCBmYWxzZSk7
CisgICAgfQorfSkoKTsKKworKGZ1bmN0aW9uIFN0cmluZ09yT3RoZXJVc2UoKSB7CisgICAgZnVu
Y3Rpb24gdGVzdDEoeCkgeyByZXR1cm4gISF4OyB9CisgICAgZnVuY3Rpb24gdGVzdDIoeCkgeyBy
ZXR1cm4gQm9vbGVhbih4KTsgfQorICAgIGZ1bmN0aW9uIHRlc3RJbnZlcnQoeCkgeyByZXR1cm4g
IXg7IH0KKworICAgIG5vSW5saW5lKHRlc3QxKTsKKyAgICBub0lubGluZSh0ZXN0Mik7CisgICAg
bm9JbmxpbmUodGVzdEludmVydCk7CisKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDFlNTsgaSsr
KSB7CisgICAgICAgIHNob3VsZEJlKHRlc3QxKCIiICsgIiIgKyAiIiksIGZhbHNlKTsKKyAgICAg
ICAgc2hvdWxkQmUodGVzdDEobnVsbCksIGZhbHNlKTsKKyAgICAgICAgc2hvdWxkQmUodGVzdDIo
ImZvbyIpLCB0cnVlKTsKKyAgICAgICAgc2hvdWxkQmUodGVzdDIodW5kZWZpbmVkKSwgZmFsc2Up
OworICAgICAgICBzaG91bGRCZSh0ZXN0SW52ZXJ0KCIiKSwgdHJ1ZSk7CisgICAgICAgIHNob3Vs
ZEJlKHRlc3RJbnZlcnQobnVsbCksIHRydWUpOworICAgIH0KK30pKCk7CkluZGV4OiBKU1Rlc3Rz
L3N0cmVzcy9sb2dpY2FsLW5vdC1tYXNxdWVyYWRlcy1hcy11bmRlZmluZWQuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSlNUZXN0cy9zdHJlc3MvbG9naWNhbC1ub3QtbWFzcXVlcmFkZXMtYXMtdW5kZWZpbmVk
LmpzCShyZXZpc2lvbiAyNzM2NDUpCisrKyBKU1Rlc3RzL3N0cmVzcy9sb2dpY2FsLW5vdC1tYXNx
dWVyYWRlcy1hcy11bmRlZmluZWQuanMJKG5vbmV4aXN0ZW50KQpAQCAtMSwzNSArMCwwIEBACi1m
dW5jdGlvbiBzaG91bGRCZShhY3R1YWwsIGV4cGVjdGVkKSB7Ci0gICAgaWYgKGFjdHVhbCAhPT0g
ZXhwZWN0ZWQpCi0gICAgICAgIHRocm93IG5ldyBFcnJvcignYmFkIHZhbHVlOiAnICsgYWN0dWFs
KTsKLX0KLQotZnVuY3Rpb24gdGVzdCh2YWx1ZSkKLXsKLSAgICByZXR1cm4gIXZhbHVlOwotfQot
bm9JbmxpbmUodGVzdCk7Ci0KLXZhciBkYXRhID0gWwotICAgIFsge30sIHRydWUgXSwKLSAgICBb
IHRydWUsIHRydWUgXSwKLSAgICBbIGZhbHNlLCBmYWxzZSBdLAotICAgIFsgLTAsIGZhbHNlIF0s
Ci0gICAgWyAxLCB0cnVlIF0sCi0gICAgWyA0LjIsIHRydWUgXSwKLSAgICBbIE5hTiwgZmFsc2Ug
XSwKLSAgICBbIEluZmluaXR5LCB0cnVlIF0sCi0gICAgWyBbXSwgdHJ1ZSBdLAotICAgIFsgbmV3
IERhdGUoKSwgdHJ1ZSBdLAotICAgIFsgIiIsIGZhbHNlIF0sCi0gICAgWyAiIiArICIiICsgIiIs
IGZhbHNlIF0sCi0gICAgWyAiQ29jb2EiLCB0cnVlIF0sCi0gICAgWyB1bmRlZmluZWQsIGZhbHNl
IF0sCi0gICAgWyBudWxsLCBmYWxzZSBdLAotICAgIFsgU3ltYm9sKCksIHRydWUgXSwKLSAgICBb
IG1ha2VNYXNxdWVyYWRlcigpICwgZmFsc2VdCi1dOwotCi1mb3IgKHZhciBpID0gMDsgaSA8IDFl
NDsgKytpKSB7Ci0gICAgZm9yIChsZXQgWyB2YWx1ZSwgcmVzdWx0IF0gb2YgZGF0YSkKLSAgICAg
ICAgc2hvdWxkQmUoIXRlc3QodmFsdWUpLCByZXN1bHQpOwotfQpJbmRleDogSlNUZXN0cy9zdHJl
c3MvbG9naWNhbC1ub3QtbWFzcXVlcmFkZXMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJl
c3MvbG9naWNhbC1ub3QtbWFzcXVlcmFkZXMuanMJKHJldmlzaW9uIDI3MzY0NSkKKysrIEpTVGVz
dHMvc3RyZXNzL2xvZ2ljYWwtbm90LW1hc3F1ZXJhZGVzLmpzCShub25leGlzdGVudCkKQEAgLTEs
MzMgKzAsMCBAQAotZnVuY3Rpb24gZm9vKHZhbHVlKSB7Ci0gICAgcmV0dXJuICEhdmFsdWU7Ci19
Ci0KLW5vSW5saW5lKGZvbyk7Ci0KLXZhciB0ZXN0cyA9IFsKLSAgICBbMCwgZmFsc2VdLAotICAg
IFsxLCB0cnVlXSwKLSAgICBbMC8wLCBmYWxzZV0sCi0gICAgWzAvLTEsIGZhbHNlXSwKLSAgICBb
MC4wLCBmYWxzZV0sCi0gICAgWyIiLCBmYWxzZV0sCi0gICAgWyJmIiwgdHJ1ZV0sCi0gICAgWyJo
ZWxsbyIsIHRydWVdLAotICAgIFt7fSwgdHJ1ZV0sCi0gICAgW1tdLCB0cnVlXSwKLSAgICBbbnVs
bCwgZmFsc2VdLAotICAgIFt2b2lkIDAsIGZhbHNlXSwKLSAgICBbZmFsc2UsIGZhbHNlXSwKLSAg
ICBbdHJ1ZSwgdHJ1ZV0sCi0gICAgW21ha2VNYXNxdWVyYWRlcigpLCBmYWxzZV0KLV07Ci0KLWZv
ciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgewotICAgIGZvciAodmFyIGogPSAwOyBqIDwg
dGVzdHMubGVuZ3RoOyArK2opIHsKLSAgICAgICAgdmFyIGlucHV0ID0gdGVzdHNbal1bMF07Ci0g
ICAgICAgIHZhciBleHBlY3RlZCA9IHRlc3RzW2pdWzFdOwotICAgICAgICB2YXIgcmVzdWx0ID0g
Zm9vKGlucHV0KTsKLSAgICAgICAgaWYgKHJlc3VsdCAhPT0gZXhwZWN0ZWQpCi0gICAgICAgICAg
ICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQgZm9yICIgKyBpbnB1dCArICI6ICIgKyByZXN1bHQ7
Ci0gICAgfQotfQpJbmRleDogSlNUZXN0cy9zdHJlc3MvbG9naWNhbC1ub3QuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSlNUZXN0cy9zdHJlc3MvbG9naWNhbC1ub3QuanMJKHJldmlzaW9uIDI3MzY0NSkKKysr
IEpTVGVzdHMvc3RyZXNzL2xvZ2ljYWwtbm90LmpzCShub25leGlzdGVudCkKQEAgLTEsMzQgKzAs
MCBAQAotZnVuY3Rpb24gc2hvdWxkQmUoYWN0dWFsLCBleHBlY3RlZCkgewotICAgIGlmIChhY3R1
YWwgIT09IGV4cGVjdGVkKQotICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2JhZCB2YWx1ZTogJyAr
IGFjdHVhbCk7Ci19Ci0KLWZ1bmN0aW9uIHRlc3QodmFsdWUpCi17Ci0gICAgcmV0dXJuICF2YWx1
ZTsKLX0KLW5vSW5saW5lKHRlc3QpOwotCi12YXIgZGF0YSA9IFsKLSAgICBbIHt9LCB0cnVlIF0s
Ci0gICAgWyB0cnVlLCB0cnVlIF0sCi0gICAgWyBmYWxzZSwgZmFsc2UgXSwKLSAgICBbIC0wLCBm
YWxzZSBdLAotICAgIFsgMSwgdHJ1ZSBdLAotICAgIFsgNC4yLCB0cnVlIF0sCi0gICAgWyBOYU4s
IGZhbHNlIF0sCi0gICAgWyBJbmZpbml0eSwgdHJ1ZSBdLAotICAgIFsgW10sIHRydWUgXSwKLSAg
ICBbIG5ldyBEYXRlKCksIHRydWUgXSwKLSAgICBbICIiLCBmYWxzZSBdLAotICAgIFsgIiIgKyAi
IiArICIiLCBmYWxzZSBdLAotICAgIFsgIkNvY29hIiwgdHJ1ZSBdLAotICAgIFsgdW5kZWZpbmVk
LCBmYWxzZSBdLAotICAgIFsgbnVsbCwgZmFsc2UgXSwKLSAgICBbIFN5bWJvbCgpLCB0cnVlIF0s
Ci1dOwotCi1mb3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytpKSB7Ci0gICAgZm9yIChsZXQgWyB2
YWx1ZSwgcmVzdWx0IF0gb2YgZGF0YSkKLSAgICAgICAgc2hvdWxkQmUoIXRlc3QodmFsdWUpLCBy
ZXN1bHQpOwotfQpJbmRleDogSlNUZXN0cy9zdHJlc3MvdmFsdWUtdG8tYm9vbGVhbi5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy92YWx1ZS10by1ib29sZWFuLmpzCShyZXZpc2lvbiAy
NzM2NDUpCisrKyBKU1Rlc3RzL3N0cmVzcy92YWx1ZS10by1ib29sZWFuLmpzCShub25leGlzdGVu
dCkKQEAgLTEsNjUgKzAsMCBAQAotLy9AIGlmICRidWlsZFR5cGUgPT0gInJlbGVhc2UiIHRoZW4g
cnVuRGVmYXVsdCBlbHNlIHNraXAgZW5kCi0KLWZ1bmN0aW9uIGFzc2VydChiKSB7Ci0gICAgaWYg
KCFiKQotICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCBhc3NlcnRpb24iKQotfQotbm9Jbmxp
bmUoYXNzZXJ0KTsKLQotbGV0IHRlc3RzID0gWwotICAgIFt0cnVlLCB0cnVlXSwKLSAgICBbZmFs
c2UsIGZhbHNlXSwKLSAgICBbIiIsIGZhbHNlXSwKLSAgICBbIiIgKyAiIiArICIiLCBmYWxzZV0s
Ci0gICAgWyJmb28iLCB0cnVlXSwKLSAgICBbImZvbyIgKyAiYmFyIiwgdHJ1ZV0sCi0gICAgW3t9
LCB0cnVlXSwKLSAgICBbU3ltYm9sKCksIHRydWVdLAotICAgIFt1bmRlZmluZWQsIGZhbHNlXSwK
LSAgICBbbnVsbCwgZmFsc2VdLAotICAgIFswLCBmYWxzZV0sCi0gICAgWy0wLCBmYWxzZV0sCi0g
ICAgWyswLCBmYWxzZV0sCi0gICAgW05hTiwgZmFsc2VdLAotICAgIFsxMCwgdHJ1ZV0sCi0gICAg
WzEwLjIwMTIsIHRydWVdLAotICAgIFtmdW5jdGlvbigpIHsgfSwgdHJ1ZV0sCi0gICAgW25ldyBT
dHJpbmcoImZvbyIpLCB0cnVlXSwKLSAgICBbbmV3IFN0cmluZygiIiksIHRydWVdLAotICAgIFtu
ZXcgU3RyaW5nLCB0cnVlXQotXTsKLQotZnVuY3Rpb24gdGVzdDEoYykgewotICAgIHJldHVybiAh
IWM7Ci19Ci1ub0lubGluZSh0ZXN0MSk7Ci0KLWZ1bmN0aW9uIHRlc3QyKGMpIHsKLSAgICBpZiAo
YykKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotbm9JbmxpbmUo
dGVzdDIpOwotCi1mdW5jdGlvbiB0ZXN0MyhjKSB7Ci0gICAgaWYgKCFjKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci1ub0lubGluZSh0ZXN0Myk7Ci0KLWxldCB0
ZXN0RnVuY3Rpb25zID0gW3Rlc3QxLCB0ZXN0MiwgdGVzdDNdOwotCi1mb3IgKGxldCB0ZXN0RnVu
Y3Rpb24gb2YgdGVzdEZ1bmN0aW9ucykgewotICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDA7
IGkrKykgewotICAgICAgICBsZXQgaXRlbSA9IHRlc3RzW2kgJSB0ZXN0cy5sZW5ndGhdOwotICAg
ICAgICBhc3NlcnQodGVzdEZ1bmN0aW9uKGl0ZW1bMF0pID09PSBpdGVtWzFdKTsKLSAgICB9Ci19
Ci0KLWxldCBtYXNxdWVyYWRlciA9IG1ha2VNYXNxdWVyYWRlcigpOwotZm9yIChsZXQgdGVzdEZ1
bmN0aW9uIG9mIHRlc3RGdW5jdGlvbnMpIHsKLSAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAw
OyBpKyspIHsKLSAgICAgICAgYXNzZXJ0KHRlc3RGdW5jdGlvbihtYXNxdWVyYWRlcikgPT09IGZh
bHNlKTsKLSAgICB9Ci19CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3
MzY0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSw2OCBAQAorMjAyMS0wMy0wMiAgQWxleGV5IFNodmF5a2EgIDxzaHZhaWthbGVz
aEBnbWFpbC5jb20+CisKKyAgICAgICAgQm9vbGVhbkNvbnN0cnVjdG9yIHNob3VsZCBiZSBpbmxp
bmVkIGluIERGRyAvIEZUTAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjIwMzIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgYGFycmF5LmZpbHRlcihCb29sZWFuKWAgaXMgYSByYXRoZXIgcG9wdWxhciBpZGlv
bSBmb3IgcmVtb3ZpbmcgZmFsc3kgaXRlbXMgZnJvbSBhbiBhcnJheS4KKyAgICAgICAgQWxzbywg
YEJvb2xlYW4oWClgIGlzIHNvbWV0aW1lcyB1c2VkIGZvciBleHBsaWNpdCB0eXBlIGNhc3Rpbmcu
CisKKyAgICAgICAgVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIFRvQm9vbGVhbiBERkcgbm9kZSBhbmQg
cmVvcmdhbml6ZXMgY29tcGlsZUxvZ2ljYWxOb3Qobm9kZSkgaW50bworICAgICAgICBjb21waWxl
VG9Cb29sZWFuKG5vZGUsIGJvb2wgaW52ZXJ0KSwgbGV2ZXJhZ2luZyBhbHJlYWR5IGV4aXN0aW5n
IGVtaXRDb252ZXJ0VmFsdWVUb0Jvb2xlYW4oKS4KKworICAgICAgICBUaGlzIGFwcHJvYWNoIGlz
IGJldHRlciB0aGFuIGVtaXR0aW5nIExvZ2ljYWxOb3Q8S25vd25Cb29sZWFuVXNlPihMb2dpY2Fs
Tm90KFgpKSBhcyBpdCByZXN1bHRzCisgICAgICAgIGluIGNsZWFuZXIgREZHIG5vZGUgdHJlZSBh
bmQgaXMgfjclIGZhc3RlciB3L28gRlRMLiBBbHNvLCBpdCBlbmFibGVzIGFkZGluZyBhIG9wX3Rv
X2Jvb2xlYW4KKyAgICAgICAgYnl0ZWNvZGUgdGhhdCB3aWxsIGJlIGdlbmVyYXRlZCBmb3IgdmVy
eSBjb21tb24gYCEhWGAgcGF0dGVybnMsIHJlZHVjaW5nIGluc3RydWN0aW9uIGNvdW50LgorCisg
ICAgICAgIEp1c3QgYXMgTG9naWNhbE5vdCwgQm9vbGVhbkNvbnN0cnVjdG9yIHNob3VsZCBoYW5k
bGUgbWFzcXVlcmFkZXIgb2JqZWN0cywgYmVjYXVzZSBBbm5leCBCCisgICAgICAgIHBhdGNoZXMg
VG9Cb29sZWFuIGFic3RyYWN0IG9wIFsxXSwgcHJldmVudGluZyB1cyBmcm9tIGVtaXR0aW5nIHNp
bXBsZXIgY29kZS4KKworICAgICAgICBUaGlzIGNoYW5nZSBhZHZhbmNlcyBwcm92aWRlZCBtaWNy
b2JlbmNobWFyayBieSAxMTAlLCBhbmQgaXMgbmV1dHJhbCBmb3Igb3RoZXIgVG9Cb29sZWFuIGNh
c2VzLgorCisgICAgICAgIFsxXTogaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1Jc0hUTUxE
REEtaW50ZXJuYWwtc2xvdC10by1ib29sZWFuCisKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJ
bnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAqIGRmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6
OmhhbmRsZUNvbnN0YW50SW50ZXJuYWxGdW5jdGlvbik6CisgICAgICAgICogZGZnL0RGR0Nsb2Ji
ZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToKKyAgICAgICAgKiBkZmcv
REZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpkb2VzR0MpOgorICAgICAgICAqIGRm
Zy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1
cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdNYXlFeGl0LmNwcDoKKyAgICAgICAgKiBkZmcvREZH
Tm9kZVR5cGUuaDoKKyAgICAgICAgKiBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2Uu
Y3BwOgorICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVjdXRlLmg6CisgICAgICAgIChKU0M6OkRG
Rzo6c2FmZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVRvQm9vbGVhblN0cmlu
Zyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVUb0Jvb2xlYW5T
dHJpbmdPck90aGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVN0cmluZ1plcm9MZW5ndGgpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlTG9naWNhbE5vdFN0cmluZ09yT3RoZXIpOiBEZWxldGVkLgorICAgICAg
ICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2
ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVRvQm9vbGVhbk9iamVjdE9yT3RoZXIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlVG9Cb29sZWFuKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVP
YmplY3RPck90aGVyTG9naWNhbE5vdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2dpY2FsTm90KTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVUb0Jvb2xlYW5PYmplY3RPck90aGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVRvQm9vbGVhbik6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpjb21waWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3QpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9naWNhbE5vdCk6IERlbGV0ZWQuCisgICAg
ICAgICogZGZnL0RGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlND
OjpERkc6OldhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2U6OmhhbmRsZSk6CisgICAgICAgICogZnRs
L0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6Cisg
ICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZH
OjpMb3dlckRGR1RvQjM6OmNvbXBpbGVOb2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxv
d2VyREZHVG9CMzo6Y29tcGlsZVRvQm9vbGVhbik6CisKIDIwMjEtMDItMjggIFl1c3VrZSBTdXp1
a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBBZGQgZ2MgYW5kIGNsZWFy
S2VwdE9iamVjdHMgdG8gJDI2MgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMjcz
NjQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVy
SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQ4LDE4ICsxMzQ4LDE4IEBAIGJvb2wgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgZXhlY3V0ZURvdWJsZVVu
YXJ5T3BFZmZlY3RzKG5vZGUsIGFyaXRoVW5hcnlGdW5jdGlvbihub2RlLT5hcml0aFVuYXJ5VHlw
ZSgpKSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCisgICAgY2FzZSBUb0Jvb2xlYW46
CiAgICAgY2FzZSBMb2dpY2FsTm90OiB7Ci0gICAgICAgIHN3aXRjaCAoYm9vbGVhblJlc3VsdChu
b2RlLCBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKSkpIHsKLSAgICAgICAgY2FzZSBUcmlTdGF0ZTo6
VHJ1ZToKLSAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsIGpzQm9vbGVhbihmYWxzZSkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVHJpU3RhdGU6OkZhbHNlOgotICAgICAg
ICAgICAgc2V0Q29uc3RhbnQobm9kZSwganNCb29sZWFuKHRydWUpKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIFRyaVN0YXRlOjpJbmRldGVybWluYXRlOgorICAgICAgICBUcmlT
dGF0ZSByZXN1bHQgPSBib29sZWFuUmVzdWx0KG5vZGUsIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkp
KTsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBUcmlTdGF0ZTo6SW5kZXRlcm1pbmF0ZSkgewogICAg
ICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNCb29sZWFuKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CisKKyAgICAgICAgYm9vbCByZXN1bHRBc0Jvb2wgPSBy
ZXN1bHQgPT0gVHJpU3RhdGU6OlRydWU7CisgICAgICAgIGlmIChub2RlLT5vcCgpID09IExvZ2lj
YWxOb3QpCisgICAgICAgICAgICByZXN1bHRBc0Jvb2wgPSAhcmVzdWx0QXNCb29sOworICAgICAg
ICBzZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4ocmVzdWx0QXNCb29sKSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29k
ZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
eXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDI3MzY0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICsz
MSw3IEBACiAjaW5jbHVkZSAiQXJpdGhQcm9maWxlLmgiCiAjaW5jbHVkZSAiQXJyYXlDb25zdHJ1
Y3Rvci5oIgogI2luY2x1ZGUgIkFycmF5UHJvdG90eXBlLmgiCisjaW5jbHVkZSAiQm9vbGVhbkNv
bnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiQnVpbHRpbk5hbWVzLmgiCiAjaW5jbHVkZSAiQnlWYWxJ
bmZvLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVHZW5lcmF0b3IuaCIKQEAgLTQwNjcsNiArNDA2OCwy
MiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDb25zdGFudEludGVyCiAKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQorCisgICAgaWYgKGZ1bmN0aW9uLT5jbGFzc0luZm8oKm1fdm0p
ID09IEJvb2xlYW5Db25zdHJ1Y3Rvcjo6aW5mbygpKSB7CisgICAgICAgIGlmIChraW5kID09IENv
ZGVGb3JDb25zdHJ1Y3QpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaW5z
ZXJ0Q2hlY2tzKCk7CisKKyAgICAgICAgTm9kZSogcmVzdWx0Tm9kZTsKKyAgICAgICAgaWYgKGFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIDw9IDEpCisgICAgICAgICAgICByZXN1bHROb2RlID0g
anNDb25zdGFudChqc0Jvb2xlYW4oZmFsc2UpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
cmVzdWx0Tm9kZSA9IGFkZFRvR3JhcGgoVG9Cb29sZWFuLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9y
QXJndW1lbnRJbmNsdWRpbmdUaGlzKDEsIHJlZ2lzdGVyT2Zmc2V0KSkpOworCisgICAgICAgIHNl
dChyZXN1bHQsIHJlc3VsdE5vZGUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CiAgICAg
CiAgICAgaWYgKGZ1bmN0aW9uLT5jbGFzc0luZm8oKm1fdm0pID09IFN0cmluZ0NvbnN0cnVjdG9y
OjppbmZvKCkpIHsKICAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMjczNjQ1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTIz
Myw2ICsyMzMsNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAg
ICAgY2FzZSBOdW1iZXJJc0ludGVnZXI6CiAgICAgY2FzZSBJc09iamVjdDoKICAgICBjYXNlIElz
VHlwZWRBcnJheVZpZXc6CisgICAgY2FzZSBUb0Jvb2xlYW46CiAgICAgY2FzZSBMb2dpY2FsTm90
OgogICAgIGNhc2UgQ2hlY2tJbkJvdW5kczoKICAgICBjYXNlIERvdWJsZVJlcDoKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHJldmlzaW9uIDI3MzY0NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTU2LDYgKzE1Niw3IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkK
ICAgICBjYXNlIElzQ2VsbFdpdGhUeXBlOgogICAgIGNhc2UgSXNUeXBlZEFycmF5VmlldzoKICAg
ICBjYXNlIFR5cGVPZjoKKyAgICBjYXNlIFRvQm9vbGVhbjoKICAgICBjYXNlIExvZ2ljYWxOb3Q6
CiAgICAgY2FzZSBKdW1wOgogICAgIGNhc2UgQnJhbmNoOgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAyNzM2NDUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04MzMsNiArODMzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBUb0Jvb2xlYW46CiAgICAgICAgIGNhc2UgTG9n
aWNhbE5vdDogewogICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxh
dGVCb29sZWFuKCkpIHsKICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnJlc3Vs
dCgpID09IE5vZGVSZXN1bHRCb29sZWFuKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR01heUV4aXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTWF5RXhpdC5jcHAJKHJldmlzaW9uIDI3MzY0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkzLDYgKzkzLDcgQEAg
RXhpdE1vZGUgbWF5RXhpdEltcGwoR3JhcGgmIGdyYXBoLCBOb2RlKgogICAgIGNhc2UgRXh0cmFj
dE9TUkVudHJ5TG9jYWw6CiAgICAgY2FzZSBFeHRyYWN0Q2F0Y2hMb2NhbDoKICAgICBjYXNlIENs
ZWFyQ2F0Y2hMb2NhbHM6CisgICAgY2FzZSBUb0Jvb2xlYW46CiAgICAgY2FzZSBMb2dpY2FsTm90
OgogICAgIGNhc2UgTm90aWZ5V3JpdGU6CiAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lvbiAyNzM2NDUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQxNSw2ICs0MTUsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAg
bWFjcm8oSXNDb25zdHJ1Y3RvciwgTm9kZVJlc3VsdEJvb2xlYW4pIFwKICAgICBtYWNybyhJc1R5
cGVkQXJyYXlWaWV3LCBOb2RlUmVzdWx0Qm9vbGVhbikgXAogICAgIG1hY3JvKFR5cGVPZiwgTm9k
ZVJlc3VsdEpTKSBcCisgICAgbWFjcm8oVG9Cb29sZWFuLCBOb2RlUmVzdWx0Qm9vbGVhbikgXAog
ICAgIG1hY3JvKExvZ2ljYWxOb3QsIE5vZGVSZXN1bHRCb29sZWFuKSBcCiAgICAgbWFjcm8oVG9Q
cmltaXRpdmUsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhU
b1Byb3BlcnR5S2V5LCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Q
cm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMjczNjQ1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEwMjUsNiArMTAyNSw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgRGVsZXRlQnlW
YWw6CiAgICAgICAgIGNhc2UgRGVsZXRlQnlJZDoKICAgICAgICAgY2FzZSBNdWx0aURlbGV0ZUJ5
T2Zmc2V0OgorICAgICAgICBjYXNlIFRvQm9vbGVhbjoKICAgICAgICAgY2FzZSBMb2dpY2FsTm90
OgogICAgICAgICBjYXNlIENvbXBhcmVMZXNzOgogICAgICAgICBjYXNlIENvbXBhcmVMZXNzRXE6
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAko
cmV2aXNpb24gMjczNjQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9F
eGVjdXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3MCw2ICsyNzAsNyBAQCBib29sIHNhZmVUb0V4
ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgY2FzZSBJc0NlbGxXaXRoVHlwZToKICAg
ICBjYXNlIElzVHlwZWRBcnJheVZpZXc6CiAgICAgY2FzZSBUeXBlT2Y6CisgICAgY2FzZSBUb0Jv
b2xlYW46CiAgICAgY2FzZSBMb2dpY2FsTm90OgogICAgIGNhc2UgVG9TdHJpbmc6CiAgICAgY2Fz
ZSBOdW1iZXJUb1N0cmluZ1dpdGhWYWxpZFJhZGl4Q29uc3RhbnQ6CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJl
dmlzaW9uIDI3MzY0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NTgsNyArMTQ1OCw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTeW1ib2xVbnR5cGUKICAgICBib29sZWFuUmVzdWx0KHJl
c3VsdFBheWxvYWRHUFIsIG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
T2JqZWN0T3JPdGhlckxvZ2ljYWxOb3QoRWRnZSBub2RlVXNlKQordm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZVRvQm9vbGVhbk9iamVjdE9yT3RoZXIoRWRnZSBub2RlVXNlLCBib29sIGludmVy
dCkKIHsKICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlVXNlLCBNYW51YWxPcGVy
YW5kU3BlY3VsYXRpb24pOwogICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMpOwpA
QCAtMTUwNCw3ICsxNTA0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9y
T3RoZQogCiAgICAgICAgIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKCZtX2ppdCk7
CiAgICAgfQotICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKDApLCByZXN1bHRQYXlsb2FkR1BS
KTsKKyAgICBtX2ppdC5tb3ZlKGludmVydCA/IFRydXN0ZWRJbW0zMigwKSA6IFRydXN0ZWRJbW0z
MigxKSwgcmVzdWx0UGF5bG9hZEdQUik7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9
IG1faml0Lmp1bXAoKTsKICAgICAKICAgICBub3RDZWxsLmxpbmsoJm1faml0KTsKQEAgLTE1MTks
MzQgKzE1MTksMzcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9yT3RoZQog
ICAgICAgICAgICAgICAgIHJlc3VsdFBheWxvYWRHUFIsIAogICAgICAgICAgICAgICAgIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpOdWxsVGFnKSkpOwogICAgIH0KLSAgICBtX2ppdC5tb3ZlKFRydXN0
ZWRJbW0zMigxKSwgcmVzdWx0UGF5bG9hZEdQUik7CisgICAgbV9qaXQubW92ZShpbnZlcnQgPyBU
cnVzdGVkSW1tMzIoMSkgOiBUcnVzdGVkSW1tMzIoMCksIHJlc3VsdFBheWxvYWRHUFIpOwogICAg
IAogICAgIGRvbmUubGluaygmbV9qaXQpOwogICAgIAogICAgIGJvb2xlYW5SZXN1bHQocmVzdWx0
UGF5bG9hZEdQUiwgbV9jdXJyZW50Tm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVMb2dpY2FsTm90KE5vZGUqIG5vZGUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
VG9Cb29sZWFuKE5vZGUqIG5vZGUsIGJvb2wgaW52ZXJ0KQogewogICAgIHN3aXRjaCAobm9kZS0+
Y2hpbGQxKCkudXNlS2luZCgpKSB7CiAgICAgY2FzZSBCb29sZWFuVXNlOgogICAgIGNhc2UgS25v
d25Cb29sZWFuVXNlOiB7CiAgICAgICAgIFNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kIHZhbHVlKHRo
aXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBS
ZXVzZSwgdmFsdWUpOwotICAgICAgICBtX2ppdC54b3IzMihUcnVzdGVkSW1tMzIoMSksIHZhbHVl
LmdwcigpLCByZXN1bHQuZ3ByKCkpOworCisgICAgICAgIG1faml0Lm1vdmUodmFsdWUuZ3ByKCks
IHJlc3VsdC5ncHIoKSk7CisgICAgICAgIGlmIChpbnZlcnQpCisgICAgICAgICAgICBtX2ppdC54
b3IzMihUcnVzdGVkSW1tMzIoMSksIHZhbHVlLmdwcigpLCByZXN1bHQuZ3ByKCkpOwogICAgICAg
ICBib29sZWFuUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgICAgIAogICAgIGNhc2UgT2JqZWN0T3JPdGhlclVzZTogewotICAgICAgICBjb21w
aWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3Qobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBjb21w
aWxlVG9Cb29sZWFuT2JqZWN0T3JPdGhlcihub2RlLT5jaGlsZDEoKSwgaW52ZXJ0KTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBJbnQzMlVzZTogewogICAgICAg
ICBTcGVjdWxhdGVJbnQzMk9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAg
ICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0UGF5bG9hZCh0aGlzLCBSZXVzZSwgdmFsdWUpOwotICAg
ICAgICBtX2ppdC5jb21wYXJlMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB2YWx1ZS5ncHIoKSwg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSk7Cisg
ICAgICAgIG1faml0LmNvbXBhcmUzMihpbnZlcnQgPyBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwgOiBN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHZhbHVlLmdwcigpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKDApLCByZXN1bHRQYXlsb2FkLmdwcigpKTsKICAgICAgICAgYm9vbGVhblJlc3Vs
dChyZXN1bHRQYXlsb2FkLmdwcigpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAg
LTE1NTUsOSArMTU1OCw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2dpY2FsTm90
KE4KICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGls
ZDEoKSk7CiAgICAgICAgIEZQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogICAgICAgICBHUFJU
ZW1wb3JhcnkgcmVzdWx0UGF5bG9hZCh0aGlzKTsKLSAgICAgICAgbV9qaXQubW92ZShUcnVzdGVk
SW1tMzIoMCksIHJlc3VsdFBheWxvYWQuZ3ByKCkpOworICAgICAgICBtX2ppdC5tb3ZlKGludmVy
dCA/IFRydXN0ZWRJbW0zMigwKSA6IFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0UGF5bG9hZC5ncHIo
KSk7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vblplcm8gPSBtX2ppdC5icmFuY2hE
b3VibGVOb25aZXJvKHZhbHVlLmZwcigpLCBzY3JhdGNoLmZwcigpKTsKLSAgICAgICAgbV9qaXQu
bW92ZShUcnVzdGVkSW1tMzIoMSksIHJlc3VsdFBheWxvYWQuZ3ByKCkpOworICAgICAgICBtX2pp
dC5tb3ZlKGludmVydCA/IFRydXN0ZWRJbW0zMigxKSA6IFRydXN0ZWRJbW0zMigwKSwgcmVzdWx0
UGF5bG9hZC5ncHIoKSk7CiAgICAgICAgIG5vblplcm8ubGluaygmbV9qaXQpOwogICAgICAgICBi
b29sZWFuUmVzdWx0KHJlc3VsdFBheWxvYWQuZ3ByKCksIG5vZGUpOwogICAgICAgICByZXR1cm47
CkBAIC0xNTc0LDE2ICsxNTc3LDE3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2dp
Y2FsTm90KE4KIAogICAgICAgICBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCA9ICFtYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludElzU3RpbGxWYWxpZCgpOwogICAg
ICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9qaXQuZ3JhcGgoKS5nbG9iYWxP
YmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKLSAgICAgICAgYm9vbCBuZWdhdGVSZXN1
bHQgPSB0cnVlOwotICAgICAgICBtX2ppdC5lbWl0Q29udmVydFZhbHVlVG9Cb29sZWFuKHZtKCks
IGFyZzEuanNWYWx1ZVJlZ3MoKSwgcmVzdWx0R1BSLCB0ZW1wLmdwcigpLCB2YWx1ZUZQUi5mcHIo
KSwgdGVtcEZQUi5mcHIoKSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9i
YWxPYmplY3QsIG5lZ2F0ZVJlc3VsdCk7CisgICAgICAgIG1faml0LmVtaXRDb252ZXJ0VmFsdWVU
b0Jvb2xlYW4odm0oKSwgYXJnMS5qc1ZhbHVlUmVncygpLCByZXN1bHRHUFIsIHRlbXAuZ3ByKCks
IHZhbHVlRlBSLmZwcigpLCB0ZW1wRlBSLmZwcigpLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNV
bmRlZmluZWQsIGdsb2JhbE9iamVjdCwgaW52ZXJ0KTsKICAgICAgICAgYm9vbGVhblJlc3VsdChy
ZXN1bHRHUFIsIG5vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGNhc2UgU3RyaW5n
VXNlOgotICAgICAgICByZXR1cm4gY29tcGlsZVN0cmluZ1plcm9MZW5ndGgobm9kZSk7CisgICAg
ICAgIGNvbXBpbGVUb0Jvb2xlYW5TdHJpbmcobm9kZSwgaW52ZXJ0KTsKKyAgICAgICAgcmV0dXJu
OwogCiAgICAgY2FzZSBTdHJpbmdPck90aGVyVXNlOgotICAgICAgICByZXR1cm4gY29tcGlsZUxv
Z2ljYWxOb3RTdHJpbmdPck90aGVyKG5vZGUpOworICAgICAgICBjb21waWxlVG9Cb29sZWFuU3Ry
aW5nT3JPdGhlcihub2RlLCBpbnZlcnQpOworICAgICAgICByZXR1cm47CiAKICAgICBkZWZhdWx0
OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjE1OSw5ICsyMTYz
LDE3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAg
Y29tcGlsZUFyaXRoVW5hcnkobm9kZSk7CiAgICAgICAgIGJyZWFrOwogCi0gICAgY2FzZSBMb2dp
Y2FsTm90OgotICAgICAgICBjb21waWxlTG9naWNhbE5vdChub2RlKTsKKyAgICBjYXNlIFRvQm9v
bGVhbjogeworICAgICAgICBib29sIGludmVydCA9IGZhbHNlOworICAgICAgICBjb21waWxlVG9C
b29sZWFuKG5vZGUsIGludmVydCk7CiAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ug
TG9naWNhbE5vdDogeworICAgICAgICBib29sIGludmVydCA9IHRydWU7CisgICAgICAgIGNvbXBp
bGVUb0Jvb2xlYW4obm9kZSwgaW52ZXJ0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogCiAgICAg
Y2FzZSBDb21wYXJlTGVzczoKICAgICAgICAgaWYgKGNvbXBhcmUobm9kZSwgSklUQ29tcGlsZXI6
Okxlc3NUaGFuLCBKSVRDb21waWxlcjo6RG91YmxlTGVzc1RoYW5BbmRPcmRlcmVkLCBvcGVyYXRp
b25Db21wYXJlTGVzcykpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDI3MzY0NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE4MDAsNyArMTgwMCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDb21wYXJlRXFQ
dHIKICAgICB1bmJsZXNzZWRCb29sZWFuUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiB9CiAKLXZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RPck90aGVyTG9naWNhbE5vdChFZGdlIG5v
ZGVVc2UpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVG9Cb29sZWFuT2JqZWN0T3JPdGhl
cihFZGdlIG5vZGVVc2UsIGJvb2wgaW52ZXJ0KQogewogICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVl
KHRoaXMsIG5vZGVVc2UsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CiAgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzKTsKQEAgLTE4NDgsNyArMTg0OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVPYmplY3RPck90aGUKIAogICAgICAgICBpc05vdE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQubGluaygmbV9qaXQpOwogICAgIH0KLSAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICBtX2ppdC5tb3ZlKGludmVydCA/
IFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSA6IFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUg
PSBtX2ppdC5qdW1wKCk7CiAgICAgCiAgICAgbm90Q2VsbC5saW5rKCZtX2ppdCk7CkBAIC0xODYy
LDI1ICsxODYyLDI1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RPck90aGUK
ICAgICAgICAgICAgICAgICByZXN1bHRHUFIsIAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6VmFsdWVOdWxsKSkpOwogICAgIH0KLSAgICBtX2pp
dC5tb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHRHUFIpOworICAg
IG1faml0Lm1vdmUoaW52ZXJ0ID8gVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVHJ1ZSkgOiBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CiAgICAgCiAgICAg
ZG9uZS5saW5rKCZtX2ppdCk7CiAgICAgCiAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG1f
Y3VycmVudE5vZGUsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOwogfQogCi12b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlTG9naWNhbE5vdChOb2RlKiBub2RlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZVRvQm9vbGVhbihOb2RlKiBub2RlLCBib29sIGludmVydCkKIHsKICAgICBzd2l0Y2gg
KG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgewogICAgIGNhc2UgT2JqZWN0T3JPdGhlclVzZTog
ewotICAgICAgICBjb21waWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3Qobm9kZS0+Y2hpbGQxKCkp
OworICAgICAgICBjb21waWxlVG9Cb29sZWFuT2JqZWN0T3JPdGhlcihub2RlLT5jaGlsZDEoKSwg
aW52ZXJ0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBJbnQz
MlVzZTogewogICAgICAgICBTcGVjdWxhdGVJbnQzMk9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+
Y2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNlLCB2YWx1
ZSk7Ci0gICAgICAgIG1faml0LmNvbXBhcmUzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVl
LmdwcigpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDApLCByZXN1bHQuZ3ByKCkpOwor
ICAgICAgICBtX2ppdC5jb21wYXJlMzIoaW52ZXJ0ID8gTWFjcm9Bc3NlbWJsZXI6OkVxdWFsIDog
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB2YWx1ZS5ncHIoKSwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMigwKSwgcmVzdWx0LmdwcigpKTsKICAgICAgICAgbV9qaXQub3IzMihUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgIGpzVmFs
dWVSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlLCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKICAgICAg
ICAgcmV0dXJuOwpAQCAtMTg5MCw5ICsxODkwLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUxvZ2ljYWxOb3QoTgogICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIHZhbHVlKHRo
aXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgRlBSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7
CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAgIG1faml0Lm1vdmUo
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZXN1bHQuZ3ByKCkpOworICAgICAg
ICBtX2ppdC5tb3ZlKGludmVydCA/IFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZUZhbHNlKSA6
IFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVRydWUpLCByZXN1bHQuZ3ByKCkpOwogICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub25aZXJvID0gbV9qaXQuYnJhbmNoRG91YmxlTm9uWmVy
byh2YWx1ZS5mcHIoKSwgc2NyYXRjaC5mcHIoKSk7Ci0gICAgICAgIG1faml0LnhvcjMyKFRydXN0
ZWRJbW0zMih0cnVlKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgbV9qaXQubW92ZShpbnZlcnQg
PyBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSA6IFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpWYWx1ZUZhbHNlKSwgcmVzdWx0LmdwcigpKTsKICAgICAgICAgbm9uWmVyby5saW5rKCZtX2pp
dCk7CiAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlLCBEYXRhRm9ybWF0
SlNCb29sZWFuKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTkwNSw3ICsxOTA1LDggQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ2ljYWxOb3QoTgogICAgICAgICAgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzLCBSZXVzZSwgdmFsdWUpOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBtX2ppdC5tb3ZlKHZhbHVlLmdwcigpLCByZXN1bHQuZ3ByKCkpOwotICAgICAgICAgICAgbV9q
aXQueG9yNjQoVHJ1c3RlZEltbTMyKHRydWUpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAg
aWYgKGludmVydCkKKyAgICAgICAgICAgICAgICBtX2ppdC54b3I2NChUcnVzdGVkSW1tMzIoMSks
IHJlc3VsdC5ncHIoKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQo
cmVzdWx0LmdwcigpLCBub2RlLCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKICAgICAgICAgICAgIHJl
dHVybjsKQEAgLTE5MTksNyArMTkyMCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVM
b2dpY2FsTm90KE4KICAgICAgICAgdHlwZUNoZWNrKAogICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mo
dmFsdWUuZ3ByKCkpLCBub2RlLT5jaGlsZDEoKSwgU3BlY0Jvb2xlYW4sIG1faml0LmJyYW5jaFRl
c3Q2NCgKICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6Tm9uWmVybywgcmVzdWx0Lmdwcigp
LCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSkpOwotICAgICAgICBtX2pp
dC54b3I2NChUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVzdWx0LmdwcigpKTsK
KyAgICAgICAgbV9qaXQueG9yNjQoaW52ZXJ0ID8gVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVl
VHJ1ZSkgOiBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVGYWxzZSksIHJlc3VsdC5ncHIoKSk7
CiAgICAgICAgIAogICAgICAgICAvLyBJZiB3ZSBhZGQgYSBEYXRhRm9ybWF0Qm9vbCwgd2Ugc2hv
dWxkIHVzZSBpdCBoZXJlLgogICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9k
ZSwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CkBAIC0xOTQ0LDE3ICsxOTQ1LDE4IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2dpY2FsTm90KE4KICAgICAgICAgICAgIHNjcmF0Y2guZW1w
bGFjZSh0aGlzKTsKICAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLT5ncHIoKTsKICAg
ICAgICAgfQotICAgICAgICBib29sIG5lZ2F0ZVJlc3VsdCA9IHRydWU7Ci0gICAgICAgIG1faml0
LmVtaXRDb252ZXJ0VmFsdWVUb0Jvb2xlYW4odm0oKSwgSlNWYWx1ZVJlZ3MoYXJnMUdQUiksIHJl
c3VsdEdQUiwgc2NyYXRjaEdQUiwgdmFsdWVGUFIuZnByKCksIHRlbXBGUFIuZnByKCksIHNob3Vs
ZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0LCBuZWdhdGVSZXN1bHQp
OworICAgICAgICBtX2ppdC5lbWl0Q29udmVydFZhbHVlVG9Cb29sZWFuKHZtKCksIEpTVmFsdWVS
ZWdzKGFyZzFHUFIpLCByZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIHZhbHVlRlBSLmZwcigpLCB0ZW1w
RlBSLmZwcigpLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIGdsb2JhbE9iamVj
dCwgaW52ZXJ0KTsKICAgICAgICAgbV9qaXQub3IzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFs
dWVGYWxzZSksIHJlc3VsdEdQUik7CiAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBu
b2RlLCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBj
YXNlIFN0cmluZ1VzZToKLSAgICAgICAgcmV0dXJuIGNvbXBpbGVTdHJpbmdaZXJvTGVuZ3RoKG5v
ZGUpOworICAgICAgICBjb21waWxlVG9Cb29sZWFuU3RyaW5nKG5vZGUsIGludmVydCk7CisgICAg
ICAgIHJldHVybjsKIAogICAgIGNhc2UgU3RyaW5nT3JPdGhlclVzZToKLSAgICAgICAgcmV0dXJu
IGNvbXBpbGVMb2dpY2FsTm90U3RyaW5nT3JPdGhlcihub2RlKTsKKyAgICAgICAgY29tcGlsZVRv
Qm9vbGVhblN0cmluZ09yT3RoZXIobm9kZSwgaW52ZXJ0KTsKKyAgICAgICAgcmV0dXJuOwogCiAg
ICAgZGVmYXVsdDoKICAgICAgICAgREZHX0NSQVNIKG1faml0LmdyYXBoKCksIG5vZGUsICJCYWQg
dXNlIGtpbmQiKTsKQEAgLTI1MjksOSArMjUzMSwxNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGNvbXBpbGVBcml0aFVuYXJ5KG5vZGUpOwogICAg
ICAgICBicmVhazsKIAotICAgIGNhc2UgTG9naWNhbE5vdDoKLSAgICAgICAgY29tcGlsZUxvZ2lj
YWxOb3Qobm9kZSk7CisgICAgY2FzZSBUb0Jvb2xlYW46IHsKKyAgICAgICAgYm9vbCBpbnZlcnQg
PSBmYWxzZTsKKyAgICAgICAgY29tcGlsZVRvQm9vbGVhbihub2RlLCBpbnZlcnQpOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIExvZ2ljYWxOb3Q6IHsKKyAgICAgICAgYm9vbCBp
bnZlcnQgPSB0cnVlOworICAgICAgICBjb21waWxlVG9Cb29sZWFuKG5vZGUsIGludmVydCk7CiAg
ICAgICAgIGJyZWFrOworICAgIH0KIAogICAgIGNhc2UgQ29tcGFyZUxlc3M6CiAgICAgICAgIGlm
IChjb21wYXJlKG5vZGUsIEpJVENvbXBpbGVyOjpMZXNzVGhhbiwgSklUQ29tcGlsZXI6OkRvdWJs
ZUxlc3NUaGFuQW5kT3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3MpKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9u
IDI3MzY0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Mzg5LDcgKzczODksNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlU2FtZVZhbHVlKE5vCiAgICAgdW5ibGVzc2VkQm9vbGVhblJlc3VsdChyZXN1
bHRHUFIsIG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CiB9CiAKLXZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJpbmdaZXJvTGVuZ3RoKE5vZGUqIG5vZGUpCit2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlVG9Cb29sZWFuU3RyaW5nKE5vZGUqIG5vZGUsIGJvb2wgaW52
ZXJ0KQogewogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHN0cih0aGlzLCBub2RlLT5jaGlsZDEo
KSk7CiAgICAgR1BSUmVnIHN0ckdQUiA9IHN0ci5ncHIoKTsKQEAgLTc0MDEsMTEgKzc0MDEsMTEg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmluZ1plcm9MZQogICAgIEdQUlJlZyBl
cUdQUiA9IGVxLmdwcigpOwogCiAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyOjp3ZWFrUG9p
bnRlcihtX2ppdC5ncmFwaCgpLCBqc0VtcHR5U3RyaW5nKHZtKCkpKSwgZXFHUFIpOwotICAgIG1f
aml0LmNvbXBhcmVQdHIoQ0NhbGxIZWxwZXJzOjpFcXVhbCwgc3RyR1BSLCBlcUdQUiwgZXFHUFIp
OworICAgIG1faml0LmNvbXBhcmVQdHIoaW52ZXJ0ID8gQ0NhbGxIZWxwZXJzOjpFcXVhbCA6IEND
YWxsSGVscGVyczo6Tm90RXF1YWwsIHN0ckdQUiwgZXFHUFIsIGVxR1BSKTsKICAgICB1bmJsZXNz
ZWRCb29sZWFuUmVzdWx0KGVxR1BSLCBub2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUxvZ2ljYWxOb3RTdHJpbmdPck90aGVyKE5vZGUqIG5vZGUpCit2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlVG9Cb29sZWFuU3RyaW5nT3JPdGhlcihOb2RlKiBub2RlLCBib29sIGlu
dmVydCkKIHsKICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSwg
TWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsK
QEAgLTc0MTgsMTcgKzc0MTgsMTYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ2lj
YWxOb3RTdAogICAgICAgICB2YWx1ZVJlZ3MsIG5vZGUtPmNoaWxkMSgpLCAoflNwZWNDZWxsQ2hl
Y2spIHwgU3BlY1N0cmluZywgbV9qaXQuYnJhbmNoSWZOb3RTdHJpbmcoY2VsbEdQUikpOwogCiAg
ICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2ppdC5ncmFwaCgpLCBq
c0VtcHR5U3RyaW5nKHZtKCkpKSwgdGVtcEdQUik7Ci0gICAgbV9qaXQuY29tcGFyZVB0cihDQ2Fs
bEhlbHBlcnM6OkVxdWFsLCBjZWxsR1BSLCB0ZW1wR1BSLCB0ZW1wR1BSKTsKKyAgICBtX2ppdC5j
b21wYXJlUHRyKGludmVydCA/IENDYWxsSGVscGVyczo6RXF1YWwgOiBDQ2FsbEhlbHBlcnM6Ok5v
dEVxdWFsLCBjZWxsR1BSLCB0ZW1wR1BSLCB0ZW1wR1BSKTsKICAgICBhdXRvIGRvbmUgPSBtX2pp
dC5qdW1wKCk7CiAKICAgICBub3RDZWxsLmxpbmsoJm1faml0KTsKICAgICBERkdfVFlQRV9DSEVD
SygKICAgICAgICAgdmFsdWVSZWdzLCBub2RlLT5jaGlsZDEoKSwgU3BlY0NlbGxDaGVjayB8IFNw
ZWNPdGhlciwgbV9qaXQuYnJhbmNoSWZOb3RPdGhlcih2YWx1ZVJlZ3MsIHRlbXBHUFIpKTsKLSAg
ICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMigxKSwgdGVtcEdQUik7CisgICAgbV9qaXQubW92ZShp
bnZlcnQgPyBUcnVzdGVkSW1tMzIoMSkgOiBUcnVzdGVkSW1tMzIoMCksIHRlbXBHUFIpOwogCiAg
ICAgZG9uZS5saW5rKCZtX2ppdCk7CiAgICAgdW5ibGVzc2VkQm9vbGVhblJlc3VsdCh0ZW1wR1BS
LCBub2RlKTsKLQogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0U3RyaW5nQnJhbmNoKEVk
Z2Ugbm9kZVVzZSwgQmFzaWNCbG9jayogdGFrZW4sIEJhc2ljQmxvY2sqIG5vdFRha2VuKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2
aXNpb24gMjczNjQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTY5LDkgKzExNjksMTAgQEAgcHVibGljOgogICAg
IHZvaWQgY29tcGlsZU9iamVjdEVxdWFsaXR5KE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVPYmpl
Y3RTdHJpY3RFcXVhbGl0eShFZGdlIG9iamVjdENoaWxkLCBFZGdlIG90aGVyQ2hpbGQpOwogICAg
IHZvaWQgY29tcGlsZU9iamVjdFRvT2JqZWN0T3JPdGhlckVxdWFsaXR5KEVkZ2UgbGVmdENoaWxk
LCBFZGdlIHJpZ2h0Q2hpbGQpOwotICAgIHZvaWQgY29tcGlsZU9iamVjdE9yT3RoZXJMb2dpY2Fs
Tm90KEVkZ2UgdmFsdWUpOwotICAgIHZvaWQgY29tcGlsZUxvZ2ljYWxOb3QoTm9kZSopOwotICAg
IHZvaWQgY29tcGlsZUxvZ2ljYWxOb3RTdHJpbmdPck90aGVyKE5vZGUqKTsKKyAgICB2b2lkIGNv
bXBpbGVUb0Jvb2xlYW4oTm9kZSosIGJvb2wgaW52ZXJ0KTsKKyAgICB2b2lkIGNvbXBpbGVUb0Jv
b2xlYW5PYmplY3RPck90aGVyKEVkZ2UgdmFsdWUsIGJvb2wgaW52ZXJ0KTsKKyAgICB2b2lkIGNv
bXBpbGVUb0Jvb2xlYW5TdHJpbmcoTm9kZSosIGJvb2wgaW52ZXJ0KTsKKyAgICB2b2lkIGNvbXBp
bGVUb0Jvb2xlYW5TdHJpbmdPck90aGVyKE5vZGUqLCBib29sIGludmVydCk7CiAgICAgdm9pZCBj
b21waWxlU3RyaW5nRXF1YWxpdHkoCiAgICAgICAgIE5vZGUqLCBHUFJSZWcgbGVmdEdQUiwgR1BS
UmVnIHJpZ2h0R1BSLCBHUFJSZWcgbGVuZ3RoR1BSLAogICAgICAgICBHUFJSZWcgbGVmdFRlbXBH
UFIsIEdQUlJlZyByaWdodFRlbXBHUFIsIEdQUlJlZyBsZWZ0VGVtcDJHUFIsCkBAIC0xMTgxLDcg
KzExODIsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb21waWxlU3RyaW5nSWRlbnRFcXVhbGl0eShO
b2RlKik7CiAgICAgdm9pZCBjb21waWxlU3RyaW5nVG9VbnR5cGVkRXF1YWxpdHkoTm9kZSosIEVk
Z2Ugc3RyaW5nRWRnZSwgRWRnZSB1bnR5cGVkRWRnZSk7CiAgICAgdm9pZCBjb21waWxlU3RyaW5n
SWRlbnRUb05vdFN0cmluZ1ZhckVxdWFsaXR5KE5vZGUqLCBFZGdlIHN0cmluZ0VkZ2UsIEVkZ2Ug
bm90U3RyaW5nVmFyRWRnZSk7Ci0gICAgdm9pZCBjb21waWxlU3RyaW5nWmVyb0xlbmd0aChOb2Rl
Kik7CiAgICAgdm9pZCBjb21waWxlTWlzY1N0cmljdEVxKE5vZGUqKTsKIAogICAgIHZvaWQgY29t
cGlsZVN5bWJvbEVxdWFsaXR5KE5vZGUqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNlLmNwcAkocmV2
aXNpb24gMjczNjQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXYXRjaHBvaW50
Q29sbGVjdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMsNiArODMsNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgIGhhbmRsZU1hc3F1ZXJhZGVzQXNVbmRlZmluZWQoKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCisgICAgICAgIGNhc2UgVG9Cb29sZWFuOgog
ICAgICAgICBjYXNlIExvZ2ljYWxOb3Q6CiAgICAgICAgIGNhc2UgQnJhbmNoOgogICAgICAgICAg
ICAgc3dpdGNoIChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMjczNjQ1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xOTUsNiArMTk1LDcgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5D
b21waWxlKE5vZGUqIAogICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgY2FzZSBWYWx1ZVRvSW50
MzI6CiAgICAgY2FzZSBCcmFuY2g6CisgICAgY2FzZSBUb0Jvb2xlYW46CiAgICAgY2FzZSBMb2dp
Y2FsTm90OgogICAgIGNhc2UgQXNzZXJ0SW5Cb3VuZHM6CiAgICAgY2FzZSBDaGVja0luQm91bmRz
OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNw
cAkocmV2aXNpb24gMjczNjQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dl
ckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIwLDYgKzEzMjAsOSBAQCBwcml2YXRl
OgogICAgICAgICBjYXNlIFNhbWVWYWx1ZToKICAgICAgICAgICAgIGNvbXBpbGVTYW1lVmFsdWUo
KTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFRvQm9vbGVhbjoKKyAgICAgICAg
ICAgIGNvbXBpbGVUb0Jvb2xlYW4oKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IExvZ2ljYWxOb3Q6CiAgICAgICAgICAgICBjb21waWxlTG9naWNhbE5vdCgpOwogICAgICAgICAg
ICAgYnJlYWs7CkBAIC05NjM3LDYgKzk2NDAsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgc2V0Qm9v
bGVhbih2bUNhbGwoSW50MzIsIG9wZXJhdGlvblNhbWVWYWx1ZSwgd2Vha1BvaW50ZXIoZ2xvYmFs
T2JqZWN0KSwgbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKSwgbG93SlNWYWx1ZShtX25vZGUt
PmNoaWxkMigpKSkpOwogICAgIH0KICAgICAKKyAgICB2b2lkIGNvbXBpbGVUb0Jvb2xlYW4oKQor
ICAgIHsKKyAgICAgICAgc2V0Qm9vbGVhbihib29saWZ5KG1fbm9kZS0+Y2hpbGQxKCkpKTsKKyAg
ICB9CisKICAgICB2b2lkIGNvbXBpbGVMb2dpY2FsTm90KCkKICAgICB7CiAgICAgICAgIHNldEJv
b2xlYW4obV9vdXQubG9naWNhbE5vdChib29saWZ5KG1fbm9kZS0+Y2hpbGQxKCkpKSk7Cg==
</data>
<flag name="review"
          id="441103"
          type_id="1"
          status="+"
          setter="ysuzuki"
    />
          </attachment>
      

    </bug>

</bugzilla>