<?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>129563</bug_id>
          
          <creation_ts>2014-03-01 16:40:12 -0800</creation_ts>
          <short_desc>DFG and FTL should specialize for and support CompareStrictEq over Misc (i.e. boolean, undefined, or null)</short_desc>
          <delta_ts>2014-03-04 23:35:41 -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>528+ (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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>129729</dependson>
          <blocked>112840</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>mmirman</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>986017</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-03-01 16:40:12 -0800</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>986018</commentid>
    <comment_count>1</comment_count>
      <attachid>225574</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-03-01 16:41:46 -0800</bug_when>
    <thetext>Created attachment 225574
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>986044</commentid>
    <comment_count>2</comment_count>
      <attachid>225584</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-03-01 20:09:33 -0800</bug_when>
    <thetext>Created attachment 225584
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>986047</commentid>
    <comment_count>3</comment_count>
      <attachid>225586</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-03-01 20:38:32 -0800</bug_when>
    <thetext>Created attachment 225586
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>986079</commentid>
    <comment_count>4</comment_count>
      <attachid>225595</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-03-02 08:21:18 -0800</bug_when>
    <thetext>Created attachment 225595
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>986085</commentid>
    <comment_count>5</comment_count>
      <attachid>225596</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-03-02 08:24:04 -0800</bug_when>
    <thetext>Created attachment 225596
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>986404</commentid>
    <comment_count>6</comment_count>
      <attachid>225596</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-03-03 10:51:49 -0800</bug_when>
    <thetext>Comment on attachment 225596
the patch

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

&gt; Source/JavaScriptCore/bytecode/SpeculatedType.cpp:403
&gt; +SpeculatedType leastUpperBoundOfStrictlyEquivalentSpeculations(SpeculatedType type)
&gt; +{
&gt; +    if (type &amp; SpecInteger)
&gt; +        type |= SpecInteger;
&gt; +    if (type &amp; SpecString)
&gt; +        type |= SpecString;
&gt; +    return type;
&gt; +}

Maybe it&apos;s just Monday morning, but this function looks like a no-op. You test the input type for SpecInteger, and then set SpecInteger if and only if it&apos;s already set. Sam for SpecString. Can this be right?

&gt; Source/JavaScriptCore/bytecode/SpeculatedType.h:79
&gt; +static const SpeculatedType SpecMisc               = 0x30000000; // It&apos;s definitely either a boolean, Null, or Undefined.

Looks like the convention here is to capitalize &quot;Boolean&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>986411</commentid>
    <comment_count>7</comment_count>
      <attachid>225596</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-03-03 11:01:50 -0800</bug_when>
    <thetext>Comment on attachment 225596
the patch

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

&gt;&gt; Source/JavaScriptCore/bytecode/SpeculatedType.cpp:403
&gt;&gt; +}
&gt; 
&gt; Maybe it&apos;s just Monday morning, but this function looks like a no-op. You test the input type for SpecInteger, and then set SpecInteger if and only if it&apos;s already set. Sam for SpecString. Can this be right?

It&apos;s right.

SpecInteger is a bitmask of SpecInt32, SpecInt52, and SpecInt52AsDouble.  So, consider that &apos;type&apos; may be just SpecInt32 (which is 0x00800000).  This function will turn it into SpecInt32 | SpecInt52 | SpecInt52AsDouble, which is 0x03800000.

Similarly for SpecString.  SpecString is a combo of SpecStringIdent and SpecStringVar.

&gt;&gt; Source/JavaScriptCore/bytecode/SpeculatedType.h:79
&gt;&gt; +static const SpeculatedType SpecMisc               = 0x30000000; // It&apos;s definitely either a boolean, Null, or Undefined.
&gt; 
&gt; Looks like the convention here is to capitalize &quot;Boolean&quot;.

Will fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>986461</commentid>
    <comment_count>8</comment_count>
      <attachid>225596</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-03-03 13:00:16 -0800</bug_when>
    <thetext>Comment on attachment 225596
the patch

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

r=me

&gt; Source/JavaScriptCore/bytecode/SpeculatedType.cpp:405
&gt; +bool speculationsCouldBeEqual(SpeculatedType a, SpeculatedType b)

I think &quot;valuesCouldBeEqual&quot; would be clearer here. The input is speculations, but the question we&apos;re asking is about the run-time values.

&gt; Source/JavaScriptCore/bytecode/SpeculatedType.cpp:421
&gt; +    // If either side could be an object or not, then we could go down some weird
&gt; +    // effectful path.

I think the effect you&apos;re talking about is that we&apos;ll do a value or string conversion on the object. Let&apos;s say that: &quot;...then the equality comparison could call a toString or valueOf conversion, which could return anything&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>987048</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-03-04 16:58:36 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/165085</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>987126</commentid>
    <comment_count>10</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-03-04 22:11:17 -0800</bug_when>
    <thetext>imported/w3c/html-templates/template-element/template-content.html started to crash with an assertion failure after this change:

Filip, are you available to take a look soon?

ASSERTION FAILED: needsTypeCheck(edge, typesPassedThrough)
/Volumes/Data/slave/mavericks-debug/build/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp(204) : void JSC::DFG::SpeculativeJIT::typeCheck(JSC::JSValueSource, JSC::DFG::Edge, SpeculatedType, MacroAssembler::Jump)
1   0x10b43b9b0 WTFCrash
2   0x10af93de8 JSC::DFG::SpeculativeJIT::typeCheck(JSC::JSValueSource, JSC::DFG::Edge, unsigned int, JSC::AbstractMacroAssembler&lt;JSC::X86Assembler&gt;::Jump)
3   0x10afab144 JSC::DFG::SpeculativeJIT::speculateMisc(JSC::DFG::Edge, JSC::JSValueRegs)
4   0x10afd99ae JSC::DFG::SpeculativeJIT::compileMiscStrictEq(JSC::DFG::Node*)
5   0x10afa682a JSC::DFG::SpeculativeJIT::compileStrictEq(JSC::DFG::Node*)
6   0x10afe3acf JSC::DFG::SpeculativeJIT::compile(JSC::DFG::Node*)
7   0x10af99a74 JSC::DFG::SpeculativeJIT::compileCurrentBlock()
8   0x10af9a3dd JSC::DFG::SpeculativeJIT::compile()
9   0x10af2cfe4 JSC::DFG::JITCompiler::compileBody()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>987144</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-03-04 23:16:25 -0800</bug_when>
    <thetext>Re-opened since this is blocked by bug 129729</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>987150</commentid>
    <comment_count>12</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-03-04 23:25:30 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; imported/w3c/html-templates/template-element/template-content.html started to crash with an assertion failure after this change:
&gt; 
&gt; Filip, are you available to take a look soon?
&gt; 
&gt; ASSERTION FAILED: needsTypeCheck(edge, typesPassedThrough)
&gt; /Volumes/Data/slave/mavericks-debug/build/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp(204) : void JSC::DFG::SpeculativeJIT::typeCheck(JSC::JSValueSource, JSC::DFG::Edge, SpeculatedType, MacroAssembler::Jump)
&gt; 1   0x10b43b9b0 WTFCrash
&gt; 2   0x10af93de8 JSC::DFG::SpeculativeJIT::typeCheck(JSC::JSValueSource, JSC::DFG::Edge, unsigned int, JSC::AbstractMacroAssembler&lt;JSC::X86Assembler&gt;::Jump)
&gt; 3   0x10afab144 JSC::DFG::SpeculativeJIT::speculateMisc(JSC::DFG::Edge, JSC::JSValueRegs)
&gt; 4   0x10afd99ae JSC::DFG::SpeculativeJIT::compileMiscStrictEq(JSC::DFG::Node*)
&gt; 5   0x10afa682a JSC::DFG::SpeculativeJIT::compileStrictEq(JSC::DFG::Node*)
&gt; 6   0x10afe3acf JSC::DFG::SpeculativeJIT::compile(JSC::DFG::Node*)
&gt; 7   0x10af99a74 JSC::DFG::SpeculativeJIT::compileCurrentBlock()
&gt; 8   0x10af9a3dd JSC::DFG::SpeculativeJIT::compile()
&gt; 9   0x10af2cfe4 JSC::DFG::JITCompiler::compileBody()

Ugh, this was a stupid typo - speculateMisc() should have said DFG_TYPE_CHECK instead of typeCheck.  That&apos;s what the assertion is noticing.

I will reland with the fix shortly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>987151</commentid>
    <comment_count>13</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-03-04 23:35:41 -0800</bug_when>
    <thetext>Relanded in http://trac.webkit.org/changeset/165099</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>225574</attachid>
            <date>2014-03-01 16:41:46 -0800</date>
            <delta_ts>2014-03-01 20:09:33 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>18869</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRU
eXBlLmNwcAkocmV2aXNpb24gMTY0OTIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1NwZWN1bGF0ZWRUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzkxLDUgKzM5MSw0MCBA
QCBUeXBlZEFycmF5VHlwZSB0eXBlZEFycmF5VHlwZUZyb21TcGVjdWxhCiAgICAgcmV0dXJuIE5v
dFR5cGVkQXJyYXk7CiB9CiAKK1NwZWN1bGF0ZWRUeXBlIGxlYXN0VXBwZXJCb3VuZE9mU3RyaWN0
bHlFcXVpdmFsZW50U3BlY3VsYXRpb25zKFNwZWN1bGF0ZWRUeXBlIHR5cGUpCit7CisgICAgaWYg
KHR5cGUgJiBTcGVjSW50ZWdlcikKKyAgICAgICAgdHlwZSB8PSBTcGVjSW50ZWdlcjsKKyAgICBp
ZiAodHlwZSAmIFNwZWNTdHJpbmcpCisgICAgICAgIHR5cGUgfD0gU3BlY1N0cmluZzsKKyAgICBy
ZXR1cm4gdHlwZTsKK30KKworYm9vbCBzcGVjdWxhdGlvbnNDb3VsZEJlRXF1YWwoU3BlY3VsYXRl
ZFR5cGUgYSwgU3BlY3VsYXRlZFR5cGUgYikKK3sKKyAgICBhID0gbGVhc3RVcHBlckJvdW5kT2ZT
dHJpY3RseUVxdWl2YWxlbnRTcGVjdWxhdGlvbnMoYSk7CisgICAgYiA9IGxlYXN0VXBwZXJCb3Vu
ZE9mU3RyaWN0bHlFcXVpdmFsZW50U3BlY3VsYXRpb25zKGIpOworICAgIAorICAgIC8vIEFueXRo
aW5nIGNvdWxkIGJlIGVxdWFsIHRvIGEgc3RyaW5nLgorICAgIGlmIChhICYgU3BlY1N0cmluZykK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKGIgJiBTcGVjU3RyaW5nKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICAvLyBJZiBib3RoIHNpZGVzIGFyZSBkZWZpbml0ZWx5IG9u
bHkgb2JqZWN0cywgdGhlbiBlcXVhbGl0eSBpcyBmYWlybHkgc2FuZS4KKyAgICBpZiAoaXNPYmpl
Y3RTcGVjdWxhdGlvbihhKSAmJiBpc09iamVjdFNwZWN1bGF0aW9uKGIpKQorICAgICAgICByZXR1
cm4gISEoYSAmIGIpOworICAgIAorICAgIC8vIElmIGVpdGhlciBzaWRlIGNvdWxkIGJlIGFuIG9i
amVjdCBvciBub3QsIHRoZW4gd2UgY291bGQgZ28gZG93biBzb21lIHdlaXJkCisgICAgLy8gZWZm
ZWN0ZnVsIHBhdGguCisgICAgaWYgKGEgJiBTcGVjT2JqZWN0KQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICBpZiAoYiAmIFNwZWNPYmplY3QpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAor
ICAgIC8vIE5laXRoZXIgc2lkZSBpcyBhbiBvYmplY3Qgb3Igc3RyaW5nLCBzbyB0aGUgd29ybGQg
aXMgcmVsYXRpdmVseSBzYW5lLgorICAgIHJldHVybiAhIShhICYgYik7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3Vs
YXRlZFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
U3BlY3VsYXRlZFR5cGUuaAkocmV2aXNpb24gMTY0OTIxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc1LDcgKzc1
LDggQEAgc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNGdWxsUmVhbAogc3RhdGljIGNv
bnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNCeXRlY29kZU51bWJlciAgICAgPSAweDBlODAwMDAwOyAv
LyBJdCdzIGVpdGhlciBhbiBJbnQzMiBvciBhIERvdWJsZS4KIHN0YXRpYyBjb25zdCBTcGVjdWxh
dGVkVHlwZSBTcGVjRnVsbE51bWJlciAgICAgICAgID0gMHgwZjgwMDAwMDsgLy8gSXQncyBlaXRo
ZXIgYW4gSW50MzIsIEludDUyLCBvciBhIERvdWJsZS4KIHN0YXRpYyBjb25zdCBTcGVjdWxhdGVk
VHlwZSBTcGVjQm9vbGVhbiAgICAgICAgICAgID0gMHgxMDAwMDAwMDsgLy8gSXQncyBkZWZpbml0
ZWx5IGEgQm9vbGVhbi4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjT3RoZXIgICAg
ICAgICAgICAgID0gMHgyMDAwMDAwMDsgLy8gSXQncyBkZWZpbml0ZWx5IG5vbmUgb2YgdGhlIGFi
b3ZlLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNPdGhlciAgICAgICAgICAgICAg
PSAweDIwMDAwMDAwOyAvLyBJdCdzIGRlZmluaXRlbHkgZWl0aGVyIE51bGwgb3IgVW5kZWZpbmVk
Lgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNNaXNjICAgICAgICAgICAgICAgPSAw
eDMwMDAwMDAwOyAvLyBJdCdzIGRlZmluaXRlbHkgZWl0aGVyIGEgYm9vbGVhbiwgTnVsbCwgb3Ig
VW5kZWZpbmVkLgogc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNIZWFwVG9wICAgICAg
ICAgICAgPSAweDNlZmZmZmZmOyAvLyBJdCBjYW4gYmUgYW55IG9mIHRoZSBhYm92ZSwgZXhjZXB0
IGZvciBTcGVjSW50NTIuCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0VtcHR5ICAg
ICAgICAgICAgICA9IDB4NDAwMDAwMDA7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBlbXB0eSB2YWx1
ZSBtYXJrZXIuCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0J5dGVjb2RlVG9wICAg
ICAgICA9IDB4N2VmZmZmZmY7IC8vIEl0IGNhbiBiZSBhbnkgb2YgdGhlIGFib3ZlLCBleGNlcHQg
Zm9yIFNwZWNJbnQ1Mi4KQEAgLTMzNSw2ICszMzYsMTEgQEAgaW5saW5lIGJvb2wgaXNPdGhlclNw
ZWN1bGF0aW9uKFNwZWN1bGF0ZQogICAgIHJldHVybiB2YWx1ZSA9PSBTcGVjT3RoZXI7CiB9CiAK
K2lubGluZSBib29sIGlzTWlzY1NwZWN1bGF0aW9uKFNwZWN1bGF0ZWRUeXBlIHZhbHVlKQorewor
ICAgIHJldHVybiAhIXZhbHVlICYmICEodmFsdWUgJiB+U3BlY01pc2MpOworfQorCiBpbmxpbmUg
Ym9vbCBpc090aGVyT3JFbXB0eVNwZWN1bGF0aW9uKFNwZWN1bGF0ZWRUeXBlIHZhbHVlKQogewog
ICAgIHJldHVybiAhdmFsdWUgfHwgdmFsdWUgPT0gU3BlY090aGVyOwpAQCAtMzgyLDYgKzM4OCwx
MCBAQCBTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlvbkZyb21WYWx1ZShKU1ZhCiBTcGVjdWxhdGVk
VHlwZSBzcGVjdWxhdGlvbkZyb21UeXBlZEFycmF5VHlwZShUeXBlZEFycmF5VHlwZSk7IC8vIG9u
bHkgdmFsaWQgZm9yIHR5cGVkIHZpZXdzLgogVHlwZWRBcnJheVR5cGUgdHlwZWRBcnJheVR5cGVG
cm9tU3BlY3VsYXRpb24oU3BlY3VsYXRlZFR5cGUpOwogCitTcGVjdWxhdGVkVHlwZSBsZWFzdFVw
cGVyQm91bmRPZlN0cmljdGx5RXF1aXZhbGVudFNwZWN1bGF0aW9ucyhTcGVjdWxhdGVkVHlwZSk7
CisKK2Jvb2wgc3BlY3VsYXRpb25zQ291bGRCZUVxdWFsKFNwZWN1bGF0ZWRUeXBlLCBTcGVjdWxh
dGVkVHlwZSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gU3BlY3VsYXRlZFR5
cGVfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJl
dGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMTY0OTIxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC05MTcsOCArOTE3LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFi
c3RyYWN0U3RhdGVUeQogICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBDb21wYXJlRXFDb25zdGFu
dCB8fCBub2RlLT5vcCgpID09IENvbXBhcmVFcSkgewogICAgICAgICAgICAgU3BlY3VsYXRlZFR5
cGUgbGVmdFR5cGUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGU7CiAgICAgICAgICAg
ICBTcGVjdWxhdGVkVHlwZSByaWdodFR5cGUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5tX3R5
cGU7Ci0gICAgICAgICAgICBpZiAoKGlzSW50MzJTcGVjdWxhdGlvbihsZWZ0VHlwZSkgJiYgaXNP
dGhlclNwZWN1bGF0aW9uKHJpZ2h0VHlwZSkpCi0gICAgICAgICAgICAgICAgfHwgKGlzT3RoZXJT
cGVjdWxhdGlvbihsZWZ0VHlwZSkgJiYgaXNJbnQzMlNwZWN1bGF0aW9uKHJpZ2h0VHlwZSkpKSB7
CisgICAgICAgICAgICBpZiAoIXNwZWN1bGF0aW9uc0NvdWxkQmVFcXVhbChsZWZ0VHlwZSwgcmln
aHRUeXBlKSkgewogICAgICAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsIGpzQm9vbGVhbihm
YWxzZSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtOTQzLDE5
ICs5NDIsMjggQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAg
ICAgICBKU1ZhbHVlIGxlZnQgPSBmb3JOb2RlKGxlZnROb2RlKS52YWx1ZSgpOwogICAgICAgICBK
U1ZhbHVlIHJpZ2h0ID0gZm9yTm9kZShyaWdodE5vZGUpLnZhbHVlKCk7CiAgICAgICAgIGlmIChs
ZWZ0ICYmIHJpZ2h0KSB7Ci0gICAgICAgICAgICBpZiAobGVmdC5pc051bWJlcigpICYmIHJpZ2h0
LmlzTnVtYmVyKCkpIHsKLSAgICAgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCBqc0Jvb2xl
YW4obGVmdC5hc051bWJlcigpID09IHJpZ2h0LmFzTnVtYmVyKCkpKTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChsZWZ0LmlzU3RyaW5nKCkg
JiYgcmlnaHQuaXNTdHJpbmcoKSkgeworICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdGhpcyBj
YXNlIGJlY2F1c2UgSlNWYWx1ZTo6c3RyaWN0RXF1YWwgaXMgb3RoZXJ3aXNlIHRvbyByYWN5IGZv
cgorICAgICAgICAgICAgICAgIC8vIHN0cmluZyBjb21wYXJpc29ucy4KICAgICAgICAgICAgICAg
ICBjb25zdCBTdHJpbmdJbXBsKiBhID0gYXNTdHJpbmcobGVmdCktPnRyeUdldFZhbHVlSW1wbCgp
OwogICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZ0ltcGwqIGIgPSBhc1N0cmluZyhyaWdodCkt
PnRyeUdldFZhbHVlSW1wbCgpOwogICAgICAgICAgICAgICAgIGlmIChhICYmIGIpIHsKICAgICAg
ICAgICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwganNCb29sZWFuKFdURjo6ZXF1YWwoYSwg
YikpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCBqc0Jv
b2xlYW4oSlNWYWx1ZTo6c3RyaWN0RXF1YWwoMCwgbGVmdCwgcmlnaHQpKSk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IFNwZWN1bGF0ZWRUeXBlIGxlZnRMVUIgPSBsZWFzdFVwcGVyQm91bmRPZlN0cmljdGx5RXF1aXZh
bGVudFNwZWN1bGF0aW9ucyhmb3JOb2RlKGxlZnROb2RlKS5tX3R5cGUpOworICAgICAgICBTcGVj
dWxhdGVkVHlwZSByaWdodExVQiA9IGxlYXN0VXBwZXJCb3VuZE9mU3RyaWN0bHlFcXVpdmFsZW50
U3BlY3VsYXRpb25zKGZvck5vZGUocmlnaHROb2RlKS5tX3R5cGUpOworICAgICAgICBpZiAoIShs
ZWZ0TFVCICYgcmlnaHRMVUIpKSB7CisgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCBqc0Jv
b2xlYW4oZmFsc2UpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAog
ICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0Jvb2xlYW4pOwogICAgICAgICBub2Rl
LT5zZXRDYW5FeGl0KHRydWUpOyAvLyBUaGlzIGlzIG92ZXJseSBjb25zZXJ2YXRpdmUuCiAgICAg
ICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhh
c2UuY3BwCShyZXZpc2lvbiAxNjQ5MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzIsNiArNDMyLDExIEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgZml4RWRnZTxPYmplY3RVc2U+KG5vZGUtPmNoaWxkMigpKTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChu
b2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlTWlzYygpICYmIG5vZGUtPmNoaWxkMigpLT5z
aG91bGRTcGVjdWxhdGVNaXNjKCkpIHsKKyAgICAgICAgICAgICAgICBmaXhFZGdlPE1pc2NVc2U+
KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICBmaXhFZGdlPE1pc2NVc2U+KG5vZGUt
PmNoaWxkMigpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZS5oCShyZXZpc2lvbiAxNjQ5MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTM5OSw2ICsxMzk5LDExIEBAIHN0cnVjdCBOb2Rl
IHsKICAgICB7CiAgICAgICAgIHJldHVybiBpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVkaWN0aW9u
KCkpOwogICAgIH0KKyAgICAKKyAgICBib29sIHNob3VsZFNwZWN1bGF0ZU1pc2MoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGlzTWlzY1NwZWN1bGF0aW9uKHByZWRpY3Rpb24oKSk7CisgICAgfQog
ICAgCiAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVTdHJpbmdJZGVudCgpCiAgICAgewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwCShyZXZpc2lvbiAxNjQ5MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MTMsNiArNjEzLDIy
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGUKICAgICBib29sZWFu
UmVzdWx0KHJlc3VsdFBheWxvYWRHUFIsIG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRs
eSk7CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNaXNjU3RyaWN0RXEoTm9kZSog
bm9kZSkKK3sKKyAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCksIE1h
bnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisgICAgSlNWYWx1ZU9wZXJhbmQgb3AyKHRoaXMsIG5v
ZGUtPmNoaWxkMigpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgIEdQUlRlbXBvcmFy
eSByZXN1bHQodGhpcyk7CisgICAgCisgICAgc3BlY3VsYXRlTWlzYyhvcDEsIG9wMS5qc1ZhbHVl
UmVncygpKTsKKyAgICBzcGVjdWxhdGVNaXNjKG9wMiwgb3AyLmpzVmFsdWVSZWdzKCkpOworICAg
IAorICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKDApLCByZXN1bHQuZ3ByKCkpOworICAgIEpJ
VENvbXBpbGVyOjpKdW1wIG5vdEVxdWFsID0gbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6Ok5v
dEVxdWFsLCBvcDEudGFnR1BSKCksIG9wMi50YWdHUFIoKSk7CisgICAgbV9qaXQuY29tcGFyZTMy
KEpJVENvbXBpbGVyOjpFcXVhbCwgb3AxLnBheWxvYWRHUFIoKSwgb3AyLnBheWxvYWRHUFIoKSwg
cmVzdWx0LmdwcigpKTsKKyAgICBub3RFcXVhbC5saW5rKCZtX2ppdCk7CisgICAgYm9vbGVhblJl
c3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOworfQorCiB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0
Q2FsbChOb2RlKiBub2RlKQogewogICAgIGlmIChub2RlLT5vcCgpICE9IENhbGwpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJ
KHJldmlzaW9uIDE2NDkyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0OCw2ICs2NDgsMjAgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZQogICAgIGpzVmFsdWVSZXN1bHQocmVz
dWx0R1BSLCBtX2N1cnJlbnROb2RlLCBEYXRhRm9ybWF0SlNCb29sZWFuLCBVc2VDaGlsZHJlbkNh
bGxlZEV4cGxpY2l0bHkpOwogfQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTWlzY1N0
cmljdEVxKE5vZGUqIG5vZGUpCit7CisgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUt
PmNoaWxkMSgpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgIEpTVmFsdWVPcGVyYW5k
IG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAg
ICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgIAorICAgIHNwZWN1bGF0ZU1pc2Mob3Ax
LCBvcDEuanNWYWx1ZVJlZ3MoKSk7CisgICAgc3BlY3VsYXRlTWlzYyhvcDIsIG9wMi5qc1ZhbHVl
UmVncygpKTsKKyAgICAKKyAgICBtX2ppdC5jb21wYXJlMzIoSklUQ29tcGlsZXI6OkVxdWFsLCBv
cDEuZ3ByKCksIG9wMi5ncHIoKSwgcmVzdWx0LmdwcigpKTsKKyAgICBtX2ppdC5vMzIoVHJ1c3Rl
ZEltbTMyKFZhbHVlRmFsc2UpLCByZXN1bHQuZ3ByKCkpOworICAgIGpzVmFsdWVSZXN1bHQocmVz
dWx0LmdwcigpLCBub2RlLCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKK30KKwogdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZSkKIHsKICAgICBpZiAobm9kZS0+b3AoKSAhPSBD
YWxsKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAJKHJldmlzaW9uIDE2NDkyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODAyLDYgKzM4MDIsMTEg
QEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmljdEVxKE5vZAogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogICAgICAgICAKKyAgICBjYXNlIE1pc2NVc2U6IHsKKyAgICAgICAg
Y29tcGlsZU1pc2NTdHJpY3RFcShub2RlKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICAgICAgCiAgICAgY2FzZSBVbnR5cGVkVXNlOiB7CiAgICAgICAgIHJldHVybiBub25TcGVj
dWxhdGl2ZVN0cmljdEVxKG5vZGUpOwogICAgIH0KQEAgLTQ4MzAsNiArNDgzNSwzMSBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVPdGhlcihFZGdlCiAjZW5kaWYgICAgCiB9CiAKK3Zv
aWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZU1pc2MoRWRnZSBlZGdlLCBKU1ZhbHVlUmVncyBy
ZWdzKQoreworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgdHlwZUNoZWNrKAorICAgICAgICByZWdz
LCBlZGdlLCBTcGVjTWlzYywKKyAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1i
bGVyOjpBYm92ZSwgcmVncy5ncHIoKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihUYWdC
aXRUeXBlT3RoZXIgfCBUYWdCaXRCb29sIHwgVGFnQml0VW5kZWZpbmVkKSkpOworI2Vsc2UKKyAg
ICB0eXBlQ2hlY2soCisgICAgICAgIHJlZ3MsIGVkZ2UsIFNwZWNNaXNjIHwgU3BlY0ludDMyLAor
ICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHJlZ3MudGFnR1BS
KCksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKSk7Cisg
ICAgdHlwZUNoZWNrKAorICAgICAgICByZWdzLCBlZGdlLCBTcGVjTWlzYywKKyAgICAgICAgbV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCByZWdzLnRhZ0dQUigpLCBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OlVuZGVmaW5lZFRhZykpKTsKKyNlbmRpZgor
fQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVNaXNjKEVkZ2UgZWRnZSkKK3sKKyAg
ICBpZiAoIW5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNNaXNjKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIEpTVmFsdWVPcGVyYW5kIG9wZXJhbmQodGhpcywgZWRnZSwgTWFudWFsT3BlcmFu
ZFNwZWN1bGF0aW9uKTsKKyAgICBzcGVjdWxhdGVNaXNjKGVkZ2UsIG9wZXJhbmQuanNWYWx1ZVJl
Z3MoKSk7Cit9CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZShOb2RlKiwgRWRnZSBl
ZGdlKQogewogICAgIHN3aXRjaCAoZWRnZS51c2VLaW5kKCkpIHsKQEAgLTQ4OTIsNiArNDkyMiw5
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZShOb2RlKiwgRWQKICAgICBjYXNlIE90
aGVyVXNlOgogICAgICAgICBzcGVjdWxhdGVPdGhlcihlZGdlKTsKICAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBNaXNjVXNlOgorICAgICAgICBzcGVjdWxhdGVNaXNjKGVkZ2UpOworICAgICAgICBi
cmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDE2NDkyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMTk4NSw2ICsx
OTg1LDcgQEAgcHVibGljOgogICAgIHZvaWQgY29tcGlsZVN0cmluZ0VxdWFsaXR5KE5vZGUqKTsK
ICAgICB2b2lkIGNvbXBpbGVTdHJpbmdJZGVudEVxdWFsaXR5KE5vZGUqKTsKICAgICB2b2lkIGNv
bXBpbGVTdHJpbmdaZXJvTGVuZ3RoKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVNaXNjU3RyaWN0
RXEoTm9kZSopOwogCiAgICAgdm9pZCBlbWl0T2JqZWN0T3JPdGhlckJyYW5jaChFZGdlIHZhbHVl
LCBCYXNpY0Jsb2NrKiB0YWtlbiwgQmFzaWNCbG9jayogbm90VGFrZW4pOwogICAgIHZvaWQgZW1p
dEJyYW5jaChOb2RlKik7CkBAIC0yMjAzLDYgKzIyMDQsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBz
cGVjdWxhdGVTdHJpbmdPclN0cmluZ09iamVjdChFZGdlKTsKICAgICB2b2lkIHNwZWN1bGF0ZU5v
dENlbGwoRWRnZSk7CiAgICAgdm9pZCBzcGVjdWxhdGVPdGhlcihFZGdlKTsKKyAgICB2b2lkIHNw
ZWN1bGF0ZU1pc2MoRWRnZSwgSlNWYWx1ZVJlZ3MpOyAvLyBSZXR1cm5zIHRvIHlvdSB0aGUgR1BS
UmVnIHRoYXQgeW91IGNhbiB1c2UgZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLgorICAgIHZvaWQg
c3BlY3VsYXRlTWlzYyhFZGdlKTsKICAgICB2b2lkIHNwZWN1bGF0ZShOb2RlKiwgRWRnZSk7CiAg
ICAgCiAgICAgSklUQ29tcGlsZXI6Okp1bXAganVtcFNsb3dGb3JVbndhbnRlZEFycmF5TW9kZShH
UFJSZWcgdGVtcFdpdGhJbmRleGluZ1R5cGVSZWcsIEFycmF5TW9kZSwgSW5kZXhpbmdUeXBlKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmNwcAkocmV2aXNpb24g
MTY0OTIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTcsNiArOTcsOSBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJl
YW0mIG91dCwgVXNlCiAgICAgY2FzZSBPdGhlclVzZToKICAgICAgICAgb3V0LnByaW50KCJPdGhl
ciIpOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIE1pc2NVc2U6CisgICAgICAgIG91dC5wcmlu
dCgiTWlzYyIpOworICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVXNlS2luZC5oCShyZXZpc2lvbiAxNjQ5MjEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsNiArNTQs
NyBAQCBlbnVtIFVzZUtpbmQgewogICAgIFN0cmluZ09yU3RyaW5nT2JqZWN0VXNlLAogICAgIE5v
dENlbGxVc2UsCiAgICAgT3RoZXJVc2UsCisgICAgTWlzY1VzZSwKICAgICBMYXN0VXNlS2luZCAv
LyBNdXN0IGFsd2F5cyBiZSB0aGUgbGFzdCBlbnRyeSBpbiB0aGUgZW51bSwgYXMgaXQgaXMgdXNl
ZCB0byBkZW5vdGUgdGhlIG51bWJlciBvZiBlbnVtIGVsZW1lbnRzLgogfTsKIApAQCAtOTYsNiAr
OTcsOCBAQCBBTFdBWVNfSU5MSU5FIFNwZWN1bGF0ZWRUeXBlIHR5cGVGaWx0ZXJGCiAgICAgICAg
IHJldHVybiB+U3BlY0NlbGw7CiAgICAgY2FzZSBPdGhlclVzZToKICAgICAgICAgcmV0dXJuIFNw
ZWNPdGhlcjsKKyAgICBjYXNlIE1pc2NVc2U6CisgICAgICAgIHJldHVybiBTcGVjTWlzYzsKICAg
ICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
ICByZXR1cm4gU3BlY0Z1bGxUb3A7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxNjQ5MjMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0OCw2
ICsyNDgsOCBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoTm9kZSogCiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgaWYgKG5vZGUtPmlzQmluYXJ5VXNlS2luZChPYmplY3RV
c2UpKQogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmIChub2RlLT5pc0JpbmFyeVVzZUtp
bmQoTWlzY1VzZSkpCisgICAgICAgICAgICBicmVhazsKICAgICAgICAgcmV0dXJuIENhbm5vdENv
bXBpbGU7CiAgICAgY2FzZSBDb21wYXJlTGVzczoKICAgICBjYXNlIENvbXBhcmVMZXNzRXE6CkBA
IC0zMzgsNiArMzQwLDcgQEAgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoR3JhcGgmIGdyYXBo
KQogICAgICAgICAgICAgICAgIGNhc2UgU3RyaW5nT3JTdHJpbmdPYmplY3RVc2U6CiAgICAgICAg
ICAgICAgICAgY2FzZSBGaW5hbE9iamVjdFVzZToKICAgICAgICAgICAgICAgICBjYXNlIE5vdENl
bGxVc2U6CisgICAgICAgICAgICAgICAgY2FzZSBNaXNjVXNlOgogICAgICAgICAgICAgICAgICAg
ICAvLyBUaGVzZSBhcmUgT0suCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2Vy
REZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTY0OTIzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzOTIs
NiArMzM5MiwxNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAg
ICAgICAgIAorICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoTWlzY1VzZSkpIHsK
KyAgICAgICAgICAgIExWYWx1ZSBsZWZ0ID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpLCBN
YW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgICAgICAgICAgTFZhbHVlIHJpZ2h0ID0gbG93
SlNWYWx1ZShtX25vZGUtPmNoaWxkMigpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAg
ICAgICAgICAgRlRMX1RZUEVfQ0hFQ0sobGVmdCwgbV9ub2RlLT5jaGlsZDEoKSwgU3BlY01pc2Ms
IGlzTm90TWlzYyhsZWZ0KSk7CisgICAgICAgICAgICBGVExfVFlQRV9DSEVDSyhyaWdodCwgbV9u
b2RlLT5jaGlsZDIoKSwgU3BlY01pc2MsIGlzTm90TWlzYyhyaWdodCkpOworICAgICAgICAgICAg
c2V0Qm9vbGVhbihtX291dC5lcXVhbChsZWZ0LCByaWdodCkpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgIH0KICAgICAKQEAgLTQ5MTgsNiArNDkyNywxNiBAQCBwcml2YXRlOgogICAgICAg
ICByZXR1cm4gbV9vdXQudGVzdElzWmVybzY0KGpzVmFsdWUsIG1fdGFnTWFzayk7CiAgICAgfQog
ICAgIAorICAgIExWYWx1ZSBpc05vdE1pc2MoTFZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fb3V0LmFib3ZlKHZhbHVlLCBtX291dC5jb25zdEludDY0KFRhZ0JpdFR5cGVPdGhl
ciB8IFRhZ0JpdEJvb2wgfCBUYWdCaXRVbmRlZmluZWQpKTsKKyAgICB9CisgICAgCisgICAgTFZh
bHVlIGlzTWlzYyhMVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gbV9vdXQuYml0
Tm90KGlzTm90TWlzYyh2YWx1ZSkpOworICAgIH0KKyAgICAKICAgICBMVmFsdWUgaXNOb3RCb29s
ZWFuKExWYWx1ZSBqc1ZhbHVlKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fb3V0LnRlc3ROb25a
ZXJvNjQoCkBAIC01MDAxLDYgKzUwMjAsOSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIE5vdENl
bGxVc2U6CiAgICAgICAgICAgICBzcGVjdWxhdGVOb3RDZWxsKGVkZ2UpOwogICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgTWlzY1VzZToKKyAgICAgICAgICAgIHNwZWN1bGF0ZU1pc2Mo
ZWRnZSk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAg
IGRhdGFMb2coIlVuc3VwcG9ydGVkIHNwZWN1bGF0aW9uIHVzZSBraW5kOiAiLCBlZGdlLnVzZUtp
bmQoKSwgIlxuIik7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpA
QCAtNTI3OCw2ICs1MzAwLDE1IEBAIHByaXZhdGU6CiAgICAgICAgIHR5cGVDaGVjayhqc1ZhbHVl
VmFsdWUodmFsdWUpLCBlZGdlLCB+U3BlY0NlbGwsIGlzQ2VsbCh2YWx1ZSkpOwogICAgIH0KICAg
ICAKKyAgICB2b2lkIHNwZWN1bGF0ZU1pc2MoRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgaWYg
KCFtX2ludGVycHJldGVyLm5lZWRzVHlwZUNoZWNrKGVkZ2UpKQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAKKyAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShlZGdlKTsKKyAg
ICAgICAgdHlwZUNoZWNrKGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2UsIFNwZWNNaXNjLCBpc05v
dE1pc2ModmFsdWUpKTsKKyAgICB9CisgICAgCiAgICAgYm9vbCBtYXNxdWVyYWRlc0FzVW5kZWZp
bmVkV2F0Y2hwb2ludElzU3RpbGxWYWxpZCgpCiAgICAgewogICAgICAgICByZXR1cm4gbV9ncmFw
aC5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludElzU3RpbGxWYWxpZChtX25vZGUtPm9y
aWdpbi5zZW1hbnRpYyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNz
L3dlaXJkLWVxdWFsaXR5LWZvbGRpbmctY2FzZXMuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy93ZWlyZC1lcXVhbGl0eS1mb2xkaW5nLWNhc2VzLmpz
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy93ZWly
ZC1lcXVhbGl0eS1mb2xkaW5nLWNhc2VzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTMg
QEAKK2Z1bmN0aW9uIHRlc3QoYWN0dWFsRnVuY3Rpb24sIGV4cGVjdGVkKSB7CisgICAgdmFyIGFj
dHVhbCA9IGFjdHVhbEZ1bmN0aW9uKCk7CisgICAgaWYgKGFjdHVhbCAhPSBleHBlY3RlZCkKKyAg
ICAgICAgdGhyb3cgbmV3IEVycm9yKCJiYWQgaW4gIiArIGFjdHVhbEZ1bmN0aW9uICsgIiByZXN1
bHQ6ICIgKyBhY3R1YWwpOworfQorCitub0lubGluZSh0ZXN0KTsKKworZm9yICh2YXIgaSA9IDA7
IGkgPCAxMDAwMDsgKytpKSB7CisgICAgdGVzdChmdW5jdGlvbigpIHsgcmV0dXJuICI1IiA9PSA1
OyB9LCB0cnVlKTsKKyAgICB0ZXN0KGZ1bmN0aW9uKCkgeyByZXR1cm4gKHt2YWx1ZU9mOmZ1bmN0
aW9uKCl7cmV0dXJuIDQyO319KSA9PSA0MjsgfSwgdHJ1ZSk7CisgICAgdGVzdChmdW5jdGlvbigp
IHsgcmV0dXJuICh7dmFsdWVPZjpmdW5jdGlvbigpe3JldHVybiA0Mjt9fSkgPT0gKHt2YWx1ZU9m
OmZ1bmN0aW9uKCl7cmV0dXJuIDQyO319KSB9LCBmYWxzZSk7Cit9CkluZGV4OiBMYXlvdXRUZXN0
cy9qcy9yZWdyZXNzL2ZvbGQtc3RyaWN0LWVxLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9qcy9yZWdyZXNzL2ZvbGQtc3RyaWN0LWVxLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZm9sZC1zdHJpY3QtZXEtZXhwZWN0ZWQu
dHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9mb2xkLXN0cmlj
dC1lcQorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3Nh
Z2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRpb24g
dGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUK
KwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9mb2xkLXN0cmljdC1lcS5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZm9sZC1zdHJpY3QtZXEuaHRtbAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZm9sZC1zdHJpY3QtZXEuaHRtbAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0v
L0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4u
L3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxz
Y3JpcHQgc3JjPSJyZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9InNjcmlwdC10ZXN0cy9mb2xkLXN0cmljdC1lcS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0icmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+
CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9mb2xkLXN0cmljdC1l
cS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9m
b2xkLXN0cmljdC1lcS5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mv
c2NyaXB0LXRlc3RzL2ZvbGQtc3RyaWN0LWVxLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTYgQEAKK2Z1bmN0aW9uIGZvbyhhLCBiKSB7CisgICAgcmV0dXJuIGEgPT09IGI7Cit9CisKK2Z1
bmN0aW9uIHRlc3QoYWN0dWFsLCBleHBlY3RlZCkgeworICAgIGlmIChhY3R1YWwgIT09IGV4cGVj
dGVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImJhZCByZXN1bHQ6ICIgKyBhY3R1YWwpOwor
fQorCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDAwOyArK2kpIHsKKyAgICB0ZXN0KGZvbyh0
cnVlLCBudWxsKSwgZmFsc2UpOworICAgIHRlc3QoZm9vKHRydWUsIGZhbHNlKSwgZmFsc2UpOwor
ICAgIHRlc3QoZm9vKHRydWUsIHRydWUpLCB0cnVlKTsKKyAgICB0ZXN0KGZvbyg1LCAiaGVsbG8i
KSwgZmFsc2UpOworICAgIHRlc3QoZm9vKHZvaWQgMCwgbmV3IE9iamVjdCgpKSwgZmFsc2UpOwor
fQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>225584</attachid>
            <date>2014-03-01 20:09:33 -0800</date>
            <delta_ts>2014-03-01 20:38:32 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>28264</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY0OTM2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYzIEBA
CisyMDE0LTAzLTAxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIGFuZCBGVEwgc2hvdWxkIHNwZWNpYWxpemUgZm9yIGFuZCBzdXBwb3J0IENvbXBhcmVTdHJp
Y3RFcSBvdmVyIE1pc2MgKGkuZS4gYm9vbGVhbiwgdW5kZWZpbmVkLCBvciBudWxsKQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI5NTYzCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGFk
ZHMgYSBzcGVjaWFsaXphdGlvbiBvZiBDb21wYXJlU3RyaWN0RXEgb3ZlciBNaXNjLiBJIG5vdGlj
ZWQgdGhlIG5lZWQgZm9yIHRoaXMKKyAgICAgICAgd2hlbiBJIHNhdyB0aGF0IHdlIGRpZG4ndCBz
dXBwb3J0IENvbXBhcmVTdHJpY3RFcShVbnR5cGVkKSBpbiBGVEwgYnV0IHRoYXQgdGhlIG1haW4K
KyAgICAgICAgdXNlciBvZiB0aGlzIHdhcyBFYXJsZXlCb3llciwgYW5kIGluIHRoYXQgYmVuY2ht
YXJrIHdoYXQgaXQgd2FzIHJlYWxseSBkb2luZyB3YXMKKyAgICAgICAgY29tcGFyaW5nIHVuZGVm
aW5lZCwgbnVsbCwgYW5kIGJvb2xlYW5zIHRvIGVhY2ggb3RoZXIuCisgICAgICAgIAorICAgICAg
ICBUaGlzIGFsc28gYWRkcyBzdXBwb3J0IGZvciBtaXNjZWxsYW5lb3VzIHRoaW5ncyB0aGF0IEkg
bmVlZGVkIHRvIG1ha2UgbXkgdmFyaW91cyB0ZXN0CisgICAgICAgIGNhc2VzIHdvcmsuIFRoaXMg
aW5jbHVkZXMgY29tcGFyaXNvbiBvdmVyIGJvb2xlYW5zIGFuZCB0aGUgdmFyaW91cyBUaHJvdy1y
ZWxhdGVkIG5vZGUKKyAgICAgICAgdHlwZXMuCisgICAgICAgIAorICAgICAgICBUaGlzIGFsc28g
aW1wcm92ZXMgY29uc3RhbnQgZm9sZGluZyBvZiBDb21wYXJlU3RyaWN0RXEgYW5kIENvbXBhcmVF
cS4KKworICAgICAgICAqIGJ5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNwcDoKKyAgICAgICAgKEpT
Qzo6c3BlY3VsYXRpb25Ub0FiYnJldmlhdGVkU3RyaW5nKToKKyAgICAgICAgKEpTQzo6bGVhc3RV
cHBlckJvdW5kT2ZTdHJpY3RseUVxdWl2YWxlbnRTcGVjdWxhdGlvbnMpOgorICAgICAgICAoSlND
OjpzcGVjdWxhdGlvbnNDb3VsZEJlRXF1YWwpOgorICAgICAgICAqIGJ5dGVjb2RlL1NwZWN1bGF0
ZWRUeXBlLmg6CisgICAgICAgIChKU0M6OmlzTWlzY1NwZWN1bGF0aW9uKToKKyAgICAgICAgKiBk
ZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpB
YnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgor
ICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1
cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChK
U0M6OkRGRzo6Tm9kZTo6c2hvdWxkU3BlY3VsYXRlTWlzYyk6CisgICAgICAgICogZGZnL0RGR1Nh
ZmVUb0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTYWZlVG9FeGVjdXRlRWRnZTo6b3Bl
cmF0b3IoKSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmljdEVxKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlTWlzYyk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0
aXZlSklULmg6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTWlzY1N0cmljdEVxKToKKyAg
ICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNaXNjU3RyaWN0RXEpOgorICAgICAgICAqIGRmZy9ERkdV
c2VLaW5kLmNwcDoKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogZGZn
L0RGR1VzZUtpbmQuaDoKKyAgICAgICAgKEpTQzo6REZHOjp0eXBlRmlsdGVyRm9yKToKKyAgICAg
ICAgKiBmdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjYW5Db21w
aWxlKToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwOgorICAgICAgICAoSlND
OjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlTm9kZSk6CisgICAgICAgIChKU0M6OkZUTDo6
TG93ZXJERkdUb0xMVk06OmNvbXBpbGVDb21wYXJlRXEpOgorICAgICAgICAoSlNDOjpGVEw6Okxv
d2VyREZHVG9MTFZNOjpjb21waWxlQ29tcGFyZVN0cmljdEVxKToKKyAgICAgICAgKEpTQzo6RlRM
OjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZVRocm93KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dl
ckRGR1RvTExWTTo6aXNOb3RNaXNjKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExW
TTo6aXNNaXNjKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6c3BlY3VsYXRl
KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6c3BlY3VsYXRlTWlzYyk6Cisg
ICAgICAgICogdGVzdHMvc3RyZXNzL3dlaXJkLWVxdWFsaXR5LWZvbGRpbmctY2FzZXMuanM6IEFk
ZGVkLgorICAgICAgICAodGVzdCk6CisgICAgICAgICgudGVzdC4pOgorCiAyMDE0LTAzLTAxICBG
aWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgVGhpcyBzaG91bGRuJ3Qg
aGF2ZSBiZWVuIGEgbGF5b3V0IHRlc3Qgc2luY2UgaXQgcnVucyBvbmx5IHVuZGVyIGpzYy4gTW92
aW5nIGl0IHRvIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1
bGF0ZWRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvU3BlY3VsYXRlZFR5cGUuY3BwCShyZXZpc2lvbiAxNjQ5MjEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NTUsNiArMjU1LDggQEAgc3RhdGljIGNvbnN0IGNoYXIqIHNwZWN1bGF0aW9uVG9BYmJyZXZpYQog
ICAgICAgICByZXR1cm4gIjxCb29sZWFuPiI7CiAgICAgaWYgKGlzT3RoZXJTcGVjdWxhdGlvbihw
cmVkaWN0aW9uKSkKICAgICAgICAgcmV0dXJuICI8T3RoZXI+IjsKKyAgICBpZiAoaXNNaXNjU3Bl
Y3VsYXRpb24ocHJlZGljdGlvbikpCisgICAgICAgIHJldHVybiAiPE1pc2M+IjsKICAgICByZXR1
cm4gIiI7CiB9CiAKQEAgLTM5MSw1ICszOTMsNDAgQEAgVHlwZWRBcnJheVR5cGUgdHlwZWRBcnJh
eVR5cGVGcm9tU3BlY3VsYQogICAgIHJldHVybiBOb3RUeXBlZEFycmF5OwogfQogCitTcGVjdWxh
dGVkVHlwZSBsZWFzdFVwcGVyQm91bmRPZlN0cmljdGx5RXF1aXZhbGVudFNwZWN1bGF0aW9ucyhT
cGVjdWxhdGVkVHlwZSB0eXBlKQoreworICAgIGlmICh0eXBlICYgU3BlY0ludGVnZXIpCisgICAg
ICAgIHR5cGUgfD0gU3BlY0ludGVnZXI7CisgICAgaWYgKHR5cGUgJiBTcGVjU3RyaW5nKQorICAg
ICAgICB0eXBlIHw9IFNwZWNTdHJpbmc7CisgICAgcmV0dXJuIHR5cGU7Cit9CisKK2Jvb2wgc3Bl
Y3VsYXRpb25zQ291bGRCZUVxdWFsKFNwZWN1bGF0ZWRUeXBlIGEsIFNwZWN1bGF0ZWRUeXBlIGIp
Cit7CisgICAgYSA9IGxlYXN0VXBwZXJCb3VuZE9mU3RyaWN0bHlFcXVpdmFsZW50U3BlY3VsYXRp
b25zKGEpOworICAgIGIgPSBsZWFzdFVwcGVyQm91bmRPZlN0cmljdGx5RXF1aXZhbGVudFNwZWN1
bGF0aW9ucyhiKTsKKyAgICAKKyAgICAvLyBBbnl0aGluZyBjb3VsZCBiZSBlcXVhbCB0byBhIHN0
cmluZy4KKyAgICBpZiAoYSAmIFNwZWNTdHJpbmcpCisgICAgICAgIHJldHVybiB0cnVlOworICAg
IGlmIChiICYgU3BlY1N0cmluZykKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgLy8g
SWYgYm90aCBzaWRlcyBhcmUgZGVmaW5pdGVseSBvbmx5IG9iamVjdHMsIHRoZW4gZXF1YWxpdHkg
aXMgZmFpcmx5IHNhbmUuCisgICAgaWYgKGlzT2JqZWN0U3BlY3VsYXRpb24oYSkgJiYgaXNPYmpl
Y3RTcGVjdWxhdGlvbihiKSkKKyAgICAgICAgcmV0dXJuICEhKGEgJiBiKTsKKyAgICAKKyAgICAv
LyBJZiBlaXRoZXIgc2lkZSBjb3VsZCBiZSBhbiBvYmplY3Qgb3Igbm90LCB0aGVuIHdlIGNvdWxk
IGdvIGRvd24gc29tZSB3ZWlyZAorICAgIC8vIGVmZmVjdGZ1bCBwYXRoLgorICAgIGlmIChhICYg
U3BlY09iamVjdCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKGIgJiBTcGVjT2JqZWN0
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICAvLyBOZWl0aGVyIHNpZGUgaXMgYW4g
b2JqZWN0IG9yIHN0cmluZywgc28gdGhlIHdvcmxkIGlzIHJlbGF0aXZlbHkgc2FuZS4KKyAgICBy
ZXR1cm4gISEoYSAmIGIpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHJldmlzaW9u
IDE2NDkyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlw
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw4IEBAIHN0YXRpYyBjb25zdCBTcGVjdWxh
dGVkVHlwZSBTcGVjRnVsbFJlYWwKIHN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjQnl0
ZWNvZGVOdW1iZXIgICAgID0gMHgwZTgwMDAwMDsgLy8gSXQncyBlaXRoZXIgYW4gSW50MzIgb3Ig
YSBEb3VibGUuCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0Z1bGxOdW1iZXIgICAg
ICAgICA9IDB4MGY4MDAwMDA7IC8vIEl0J3MgZWl0aGVyIGFuIEludDMyLCBJbnQ1Miwgb3IgYSBE
b3VibGUuCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0Jvb2xlYW4gICAgICAgICAg
ICA9IDB4MTAwMDAwMDA7IC8vIEl0J3MgZGVmaW5pdGVseSBhIEJvb2xlYW4uCi1zdGF0aWMgY29u
c3QgU3BlY3VsYXRlZFR5cGUgU3BlY090aGVyICAgICAgICAgICAgICA9IDB4MjAwMDAwMDA7IC8v
IEl0J3MgZGVmaW5pdGVseSBub25lIG9mIHRoZSBhYm92ZS4KK3N0YXRpYyBjb25zdCBTcGVjdWxh
dGVkVHlwZSBTcGVjT3RoZXIgICAgICAgICAgICAgID0gMHgyMDAwMDAwMDsgLy8gSXQncyBkZWZp
bml0ZWx5IGVpdGhlciBOdWxsIG9yIFVuZGVmaW5lZC4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVk
VHlwZSBTcGVjTWlzYyAgICAgICAgICAgICAgID0gMHgzMDAwMDAwMDsgLy8gSXQncyBkZWZpbml0
ZWx5IGVpdGhlciBhIGJvb2xlYW4sIE51bGwsIG9yIFVuZGVmaW5lZC4KIHN0YXRpYyBjb25zdCBT
cGVjdWxhdGVkVHlwZSBTcGVjSGVhcFRvcCAgICAgICAgICAgID0gMHgzZWZmZmZmZjsgLy8gSXQg
Y2FuIGJlIGFueSBvZiB0aGUgYWJvdmUsIGV4Y2VwdCBmb3IgU3BlY0ludDUyLgogc3RhdGljIGNv
bnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNFbXB0eSAgICAgICAgICAgICAgPSAweDQwMDAwMDAwOyAv
LyBJdCdzIGRlZmluaXRlbHkgYW4gZW1wdHkgdmFsdWUgbWFya2VyLgogc3RhdGljIGNvbnN0IFNw
ZWN1bGF0ZWRUeXBlIFNwZWNCeXRlY29kZVRvcCAgICAgICAgPSAweDdlZmZmZmZmOyAvLyBJdCBj
YW4gYmUgYW55IG9mIHRoZSBhYm92ZSwgZXhjZXB0IGZvciBTcGVjSW50NTIuCkBAIC0zMzUsNiAr
MzM2LDExIEBAIGlubGluZSBib29sIGlzT3RoZXJTcGVjdWxhdGlvbihTcGVjdWxhdGUKICAgICBy
ZXR1cm4gdmFsdWUgPT0gU3BlY090aGVyOwogfQogCitpbmxpbmUgYm9vbCBpc01pc2NTcGVjdWxh
dGlvbihTcGVjdWxhdGVkVHlwZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gISF2YWx1ZSAmJiAhKHZh
bHVlICYgflNwZWNNaXNjKTsKK30KKwogaW5saW5lIGJvb2wgaXNPdGhlck9yRW1wdHlTcGVjdWxh
dGlvbihTcGVjdWxhdGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gIXZhbHVlIHx8IHZhbHVl
ID09IFNwZWNPdGhlcjsKQEAgLTM4Miw2ICszODgsMTAgQEAgU3BlY3VsYXRlZFR5cGUgc3BlY3Vs
YXRpb25Gcm9tVmFsdWUoSlNWYQogU3BlY3VsYXRlZFR5cGUgc3BlY3VsYXRpb25Gcm9tVHlwZWRB
cnJheVR5cGUoVHlwZWRBcnJheVR5cGUpOyAvLyBvbmx5IHZhbGlkIGZvciB0eXBlZCB2aWV3cy4K
IFR5cGVkQXJyYXlUeXBlIHR5cGVkQXJyYXlUeXBlRnJvbVNwZWN1bGF0aW9uKFNwZWN1bGF0ZWRU
eXBlKTsKIAorU3BlY3VsYXRlZFR5cGUgbGVhc3RVcHBlckJvdW5kT2ZTdHJpY3RseUVxdWl2YWxl
bnRTcGVjdWxhdGlvbnMoU3BlY3VsYXRlZFR5cGUpOworCitib29sIHNwZWN1bGF0aW9uc0NvdWxk
QmVFcXVhbChTcGVjdWxhdGVkVHlwZSwgU3BlY3VsYXRlZFR5cGUpOworCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKIAogI2VuZGlmIC8vIFNwZWN1bGF0ZWRUeXBlX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVz
LmgJKHJldmlzaW9uIDE2NDkyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtOTE3LDggKzkxNyw3
IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgaWYg
KG5vZGUtPm9wKCkgPT0gQ29tcGFyZUVxQ29uc3RhbnQgfHwgbm9kZS0+b3AoKSA9PSBDb21wYXJl
RXEpIHsKICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnRUeXBlID0gZm9yTm9kZShub2Rl
LT5jaGlsZDEoKSkubV90eXBlOwogICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHRUeXBl
ID0gZm9yTm9kZShub2RlLT5jaGlsZDIoKSkubV90eXBlOwotICAgICAgICAgICAgaWYgKChpc0lu
dDMyU3BlY3VsYXRpb24obGVmdFR5cGUpICYmIGlzT3RoZXJTcGVjdWxhdGlvbihyaWdodFR5cGUp
KQotICAgICAgICAgICAgICAgIHx8IChpc090aGVyU3BlY3VsYXRpb24obGVmdFR5cGUpICYmIGlz
SW50MzJTcGVjdWxhdGlvbihyaWdodFR5cGUpKSkgeworICAgICAgICAgICAgaWYgKCFzcGVjdWxh
dGlvbnNDb3VsZEJlRXF1YWwobGVmdFR5cGUsIHJpZ2h0VHlwZSkpIHsKICAgICAgICAgICAgICAg
ICBzZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4oZmFsc2UpKTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KQEAgLTk0MywxOSArOTQyLDI4IEBAIGJvb2wgQWJzdHJhY3RJ
bnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgSlNWYWx1ZSBsZWZ0ID0gZm9yTm9k
ZShsZWZ0Tm9kZSkudmFsdWUoKTsKICAgICAgICAgSlNWYWx1ZSByaWdodCA9IGZvck5vZGUocmln
aHROb2RlKS52YWx1ZSgpOwogICAgICAgICBpZiAobGVmdCAmJiByaWdodCkgewotICAgICAgICAg
ICAgaWYgKGxlZnQuaXNOdW1iZXIoKSAmJiByaWdodC5pc051bWJlcigpKSB7Ci0gICAgICAgICAg
ICAgICAgc2V0Q29uc3RhbnQobm9kZSwganNCb29sZWFuKGxlZnQuYXNOdW1iZXIoKSA9PSByaWdo
dC5hc051bWJlcigpKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CiAg
ICAgICAgICAgICBpZiAobGVmdC5pc1N0cmluZygpICYmIHJpZ2h0LmlzU3RyaW5nKCkpIHsKKyAg
ICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRoaXMgY2FzZSBiZWNhdXNlIEpTVmFsdWU6OnN0cmlj
dEVxdWFsIGlzIG90aGVyd2lzZSB0b28gcmFjeSBmb3IKKyAgICAgICAgICAgICAgICAvLyBzdHJp
bmcgY29tcGFyaXNvbnMuCiAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nSW1wbCogYSA9IGFz
U3RyaW5nKGxlZnQpLT50cnlHZXRWYWx1ZUltcGwoKTsKICAgICAgICAgICAgICAgICBjb25zdCBT
dHJpbmdJbXBsKiBiID0gYXNTdHJpbmcocmlnaHQpLT50cnlHZXRWYWx1ZUltcGwoKTsKICAgICAg
ICAgICAgICAgICBpZiAoYSAmJiBiKSB7CiAgICAgICAgICAgICAgICAgICAgIHNldENvbnN0YW50
KG5vZGUsIGpzQm9vbGVhbihXVEY6OmVxdWFsKGEsIGIpKSk7CiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwganNCb29sZWFuKEpTVmFsdWU6OnN0cmljdEVxdWFs
KDAsIGxlZnQsIHJpZ2h0KSkpOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQogICAgICAgICB9CisgICAgICAgIAorICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0TFVCID0g
bGVhc3RVcHBlckJvdW5kT2ZTdHJpY3RseUVxdWl2YWxlbnRTcGVjdWxhdGlvbnMoZm9yTm9kZShs
ZWZ0Tm9kZSkubV90eXBlKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHRMVUIgPSBsZWFz
dFVwcGVyQm91bmRPZlN0cmljdGx5RXF1aXZhbGVudFNwZWN1bGF0aW9ucyhmb3JOb2RlKHJpZ2h0
Tm9kZSkubV90eXBlKTsKKyAgICAgICAgaWYgKCEobGVmdExVQiAmIHJpZ2h0TFVCKSkgeworICAg
ICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwganNCb29sZWFuKGZhbHNlKSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRU
eXBlKFNwZWNCb29sZWFuKTsKICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsgLy8gVGhp
cyBpcyBvdmVybHkgY29uc2VydmF0aXZlLgogICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTY0OTIxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDMyLDYgKzQzMiwxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGZpeEVk
Z2U8T2JqZWN0VXNlPihub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1
bGF0ZU1pc2MoKSAmJiBub2RlLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlTWlzYygpKSB7Cisg
ICAgICAgICAgICAgICAgZml4RWRnZTxNaXNjVXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAgICAg
ICAgICAgICAgZml4RWRnZTxNaXNjVXNlPihub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTY0OTIxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEzOTksNiArMTM5OSwxMSBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgewogICAgICAgICByZXR1cm4g
aXNCb29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGlvbigpKTsKICAgICB9CisgICAgCisgICAgYm9v
bCBzaG91bGRTcGVjdWxhdGVNaXNjKCkKKyAgICB7CisgICAgICAgIHJldHVybiBpc01pc2NTcGVj
dWxhdGlvbihwcmVkaWN0aW9uKCkpOworICAgIH0KICAgIAogICAgIGJvb2wgc2hvdWxkU3BlY3Vs
YXRlU3RyaW5nSWRlbnQoKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU2FmZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAxNjQ5MjEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNiAr
NTksNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgU3RyaW5nT3JTdHJpbmdPYmplY3RVc2U6CiAg
ICAgICAgIGNhc2UgTm90Q2VsbFVzZToKICAgICAgICAgY2FzZSBPdGhlclVzZToKKyAgICAgICAg
Y2FzZSBNaXNjVXNlOgogICAgICAgICBjYXNlIE1hY2hpbmVJbnRVc2U6CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTY0OTIxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjEzLDYgKzYxMywyMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25T
cGVjdWxhdGl2ZU5vblBlCiAgICAgYm9vbGVhblJlc3VsdChyZXN1bHRQYXlsb2FkR1BSLCBub2Rl
LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwogfQogCit2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlTWlzY1N0cmljdEVxKE5vZGUqIG5vZGUpCit7CisgICAgSlNWYWx1ZU9wZXJhbmQg
b3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAg
IEpTVmFsdWVPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSwgTWFudWFsT3BlcmFuZFNw
ZWN1bGF0aW9uKTsKKyAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgIAorICAgIHNw
ZWN1bGF0ZU1pc2Mobm9kZS0+Y2hpbGQxKCksIG9wMS5qc1ZhbHVlUmVncygpKTsKKyAgICBzcGVj
dWxhdGVNaXNjKG5vZGUtPmNoaWxkMigpLCBvcDIuanNWYWx1ZVJlZ3MoKSk7CisgICAgCisgICAg
bV9qaXQubW92ZShUcnVzdGVkSW1tMzIoMCksIHJlc3VsdC5ncHIoKSk7CisgICAgSklUQ29tcGls
ZXI6Okp1bXAgbm90RXF1YWwgPSBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6Tm90RXF1YWws
IG9wMS50YWdHUFIoKSwgb3AyLnRhZ0dQUigpKTsKKyAgICBtX2ppdC5jb21wYXJlMzIoSklUQ29t
cGlsZXI6OkVxdWFsLCBvcDEucGF5bG9hZEdQUigpLCBvcDIucGF5bG9hZEdQUigpLCByZXN1bHQu
Z3ByKCkpOworICAgIG5vdEVxdWFsLmxpbmsoJm1faml0KTsKKyAgICBib29sZWFuUmVzdWx0KHJl
c3VsdC5ncHIoKSwgbm9kZSk7Cit9CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5v
ZGUqIG5vZGUpCiB7CiAgICAgaWYgKG5vZGUtPm9wKCkgIT0gQ2FsbCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNp
b24gMTY0OTIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQ4LDYgKzY0OCwyMCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlCiAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIs
IG1fY3VycmVudE5vZGUsIERhdGFGb3JtYXRKU0Jvb2xlYW4sIFVzZUNoaWxkcmVuQ2FsbGVkRXhw
bGljaXRseSk7CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNaXNjU3RyaWN0RXEo
Tm9kZSogbm9kZSkKK3sKKyAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQx
KCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisgICAgSlNWYWx1ZU9wZXJhbmQgb3AyKHRo
aXMsIG5vZGUtPmNoaWxkMigpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgIEdQUlRl
bXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgCisgICAgc3BlY3VsYXRlTWlzYyhub2RlLT5jaGls
ZDEoKSwgb3AxLmpzVmFsdWVSZWdzKCkpOworICAgIHNwZWN1bGF0ZU1pc2Mobm9kZS0+Y2hpbGQy
KCksIG9wMi5qc1ZhbHVlUmVncygpKTsKKyAgICAKKyAgICBtX2ppdC5jb21wYXJlMzIoSklUQ29t
cGlsZXI6OkVxdWFsLCBvcDEuZ3ByKCksIG9wMi5ncHIoKSwgcmVzdWx0LmdwcigpKTsKKyAgICBt
X2ppdC5vcjMyKFRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0LmdwcigpKTsKKyAgICBq
c1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSwgRGF0YUZvcm1hdEpTQm9vbGVhbik7Cit9
CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUpCiB7CiAgICAgaWYg
KG5vZGUtPm9wKCkgIT0gQ2FsbCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxNjQ5MjEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzgwMiw2ICszODAyLDExIEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJpY3RFcShO
b2QKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAgICAgCisgICAgY2FzZSBNaXNj
VXNlOiB7CisgICAgICAgIGNvbXBpbGVNaXNjU3RyaWN0RXEobm9kZSk7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2UgVW50eXBlZFVzZTogewogICAgICAg
ICByZXR1cm4gbm9uU3BlY3VsYXRpdmVTdHJpY3RFcShub2RlKTsKICAgICB9CkBAIC00ODMwLDYg
KzQ4MzUsMzEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlT3RoZXIoRWRnZQogI2Vu
ZGlmICAgIAogfQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVNaXNjKEVkZ2UgZWRn
ZSwgSlNWYWx1ZVJlZ3MgcmVncykKK3sKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIHR5cGVDaGVj
aygKKyAgICAgICAgcmVncywgZWRnZSwgU3BlY01pc2MsCisgICAgICAgIG1faml0LmJyYW5jaDY0
KE1hY3JvQXNzZW1ibGVyOjpBYm92ZSwgcmVncy5ncHIoKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW02NChUYWdCaXRUeXBlT3RoZXIgfCBUYWdCaXRCb29sIHwgVGFnQml0VW5kZWZpbmVkKSkp
OworI2Vsc2UKKyAgICB0eXBlQ2hlY2soCisgICAgICAgIHJlZ3MsIGVkZ2UsIFNwZWNNaXNjIHwg
U3BlY0ludDMyLAorICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWws
IHJlZ3MudGFnR1BSKCksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50
MzJUYWcpKSk7CisgICAgdHlwZUNoZWNrKAorICAgICAgICByZWdzLCBlZGdlLCBTcGVjTWlzYywK
KyAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCByZWdzLnRhZ0dQ
UigpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OlVuZGVmaW5lZFRhZykp
KTsKKyNlbmRpZgorfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVNaXNjKEVkZ2Ug
ZWRnZSkKK3sKKyAgICBpZiAoIW5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNNaXNjKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIAorICAgIEpTVmFsdWVPcGVyYW5kIG9wZXJhbmQodGhpcywgZWRnZSwg
TWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAgICBzcGVjdWxhdGVNaXNjKGVkZ2UsIG9wZXJh
bmQuanNWYWx1ZVJlZ3MoKSk7Cit9CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZShO
b2RlKiwgRWRnZSBlZGdlKQogewogICAgIHN3aXRjaCAoZWRnZS51c2VLaW5kKCkpIHsKQEAgLTQ4
OTIsNiArNDkyMiw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZShOb2RlKiwgRWQK
ICAgICBjYXNlIE90aGVyVXNlOgogICAgICAgICBzcGVjdWxhdGVPdGhlcihlZGdlKTsKICAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBNaXNjVXNlOgorICAgICAgICBzcGVjdWxhdGVNaXNjKGVkZ2Up
OworICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDE2NDkyMSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpA
QCAtMTk4NSw2ICsxOTg1LDcgQEAgcHVibGljOgogICAgIHZvaWQgY29tcGlsZVN0cmluZ0VxdWFs
aXR5KE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVTdHJpbmdJZGVudEVxdWFsaXR5KE5vZGUqKTsK
ICAgICB2b2lkIGNvbXBpbGVTdHJpbmdaZXJvTGVuZ3RoKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBp
bGVNaXNjU3RyaWN0RXEoTm9kZSopOwogCiAgICAgdm9pZCBlbWl0T2JqZWN0T3JPdGhlckJyYW5j
aChFZGdlIHZhbHVlLCBCYXNpY0Jsb2NrKiB0YWtlbiwgQmFzaWNCbG9jayogbm90VGFrZW4pOwog
ICAgIHZvaWQgZW1pdEJyYW5jaChOb2RlKik7CkBAIC0yMjAzLDYgKzIyMDQsOCBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzcGVjdWxhdGVTdHJpbmdPclN0cmluZ09iamVjdChFZGdlKTsKICAgICB2b2lk
IHNwZWN1bGF0ZU5vdENlbGwoRWRnZSk7CiAgICAgdm9pZCBzcGVjdWxhdGVPdGhlcihFZGdlKTsK
KyAgICB2b2lkIHNwZWN1bGF0ZU1pc2MoRWRnZSwgSlNWYWx1ZVJlZ3MpOyAvLyBSZXR1cm5zIHRv
IHlvdSB0aGUgR1BSUmVnIHRoYXQgeW91IGNhbiB1c2UgZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25z
LgorICAgIHZvaWQgc3BlY3VsYXRlTWlzYyhFZGdlKTsKICAgICB2b2lkIHNwZWN1bGF0ZShOb2Rl
KiwgRWRnZSk7CiAgICAgCiAgICAgSklUQ29tcGlsZXI6Okp1bXAganVtcFNsb3dGb3JVbndhbnRl
ZEFycmF5TW9kZShHUFJSZWcgdGVtcFdpdGhJbmRleGluZ1R5cGVSZWcsIEFycmF5TW9kZSwgSW5k
ZXhpbmdUeXBlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmNw
cAkocmV2aXNpb24gMTY0OTIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VL
aW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTcsNiArOTcsOSBAQCB2b2lkIHByaW50SW50ZXJuYWwo
UHJpbnRTdHJlYW0mIG91dCwgVXNlCiAgICAgY2FzZSBPdGhlclVzZToKICAgICAgICAgb3V0LnBy
aW50KCJPdGhlciIpOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIE1pc2NVc2U6CisgICAgICAg
IG91dC5wcmludCgiTWlzYyIpOworICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBicmVhazsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5oCShyZXZpc2lvbiAxNjQ5MjEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTQs
NiArNTQsNyBAQCBlbnVtIFVzZUtpbmQgewogICAgIFN0cmluZ09yU3RyaW5nT2JqZWN0VXNlLAog
ICAgIE5vdENlbGxVc2UsCiAgICAgT3RoZXJVc2UsCisgICAgTWlzY1VzZSwKICAgICBMYXN0VXNl
S2luZCAvLyBNdXN0IGFsd2F5cyBiZSB0aGUgbGFzdCBlbnRyeSBpbiB0aGUgZW51bSwgYXMgaXQg
aXMgdXNlZCB0byBkZW5vdGUgdGhlIG51bWJlciBvZiBlbnVtIGVsZW1lbnRzLgogfTsKIApAQCAt
OTYsNiArOTcsOCBAQCBBTFdBWVNfSU5MSU5FIFNwZWN1bGF0ZWRUeXBlIHR5cGVGaWx0ZXJGCiAg
ICAgICAgIHJldHVybiB+U3BlY0NlbGw7CiAgICAgY2FzZSBPdGhlclVzZToKICAgICAgICAgcmV0
dXJuIFNwZWNPdGhlcjsKKyAgICBjYXNlIE1pc2NVc2U6CisgICAgICAgIHJldHVybiBTcGVjTWlz
YzsKICAgICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgICByZXR1cm4gU3BlY0Z1bGxUb3A7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxNjQ5MjMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE0MSw2ICsxNDEsOSBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoTm9kZSog
CiAgICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OgogICAgIGNhc2UgVG9QcmltaXRpdmU6CiAgICAg
Y2FzZSBQaGFudG9tQXJndW1lbnRzOgorICAgIGNhc2UgVGhyb3c6CisgICAgY2FzZSBUaHJvd1Jl
ZmVyZW5jZUVycm9yOgorICAgIGNhc2UgVW5yZWFjaGFibGU6CiAgICAgICAgIC8vIFRoZXNlIGFy
ZSBPSy4KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBQdXRCeUlkRGlyZWN0OgpAQCAtMjMyLDYg
KzIzNSw4IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiAKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBpZiAobm9kZS0+aXNCaW5hcnlVc2VLaW5kKFVudHlwZWRV
c2UpKQogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmIChub2RlLT5pc0JpbmFyeVVzZUtp
bmQoQm9vbGVhblVzZSkpCisgICAgICAgICAgICBicmVhazsKICAgICAgICAgaWYgKG5vZGUtPmNo
aWxkMSgpLnVzZUtpbmQoKSA9PSBPYmplY3RVc2UKICAgICAgICAgICAgICYmIG5vZGUtPmNoaWxk
MigpLnVzZUtpbmQoKSA9PSBPYmplY3RPck90aGVyVXNlKQogICAgICAgICAgICAgYnJlYWs7CkBA
IC0yNDgsNiArMjUzLDEwIEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShOb2Rl
KiAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBpZiAobm9kZS0+aXNCaW5hcnlVc2VLaW5k
KE9iamVjdFVzZSkpCiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKG5vZGUtPmlzQmlu
YXJ5VXNlS2luZChNaXNjVXNlKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAobm9k
ZS0+aXNCaW5hcnlVc2VLaW5kKEJvb2xlYW5Vc2UpKQorICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIHJldHVybiBDYW5ub3RDb21waWxlOwogICAgIGNhc2UgQ29tcGFyZUxlc3M6CiAgICAgY2Fz
ZSBDb21wYXJlTGVzc0VxOgpAQCAtMzM4LDYgKzM0Nyw3IEBAIENhcGFiaWxpdHlMZXZlbCBjYW5D
b21waWxlKEdyYXBoJiBncmFwaCkKICAgICAgICAgICAgICAgICBjYXNlIFN0cmluZ09yU3RyaW5n
T2JqZWN0VXNlOgogICAgICAgICAgICAgICAgIGNhc2UgRmluYWxPYmplY3RVc2U6CiAgICAgICAg
ICAgICAgICAgY2FzZSBOb3RDZWxsVXNlOgorICAgICAgICAgICAgICAgIGNhc2UgTWlzY1VzZToK
ICAgICAgICAgICAgICAgICAgICAgLy8gVGhlc2UgYXJlIE9LLgogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICBkZWZhdWx0OgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE2NDkyMykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NTYsNiArNTU2LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgRm9y
Y2VPU1JFeGl0OgogICAgICAgICAgICAgY29tcGlsZUZvcmNlT1NSRXhpdCgpOwogICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgVGhyb3c6CisgICAgICAgIGNhc2UgVGhyb3dSZWZlcmVu
Y2VFcnJvcjoKKyAgICAgICAgICAgIGNvbXBpbGVUaHJvdygpOworICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgSW52YWxpZGF0aW9uUG9pbnQ6CiAgICAgICAgICAgICBjb21waWxlSW52
YWxpZGF0aW9uUG9pbnQoKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNTg5LDYgKzU5Myw5IEBA
IHByaXZhdGU6CiAgICAgICAgIGNhc2UgVHlwZWRBcnJheVdhdGNocG9pbnQ6CiAgICAgICAgIGNh
c2UgQWxsb2NhdGlvblByb2ZpbGVXYXRjaHBvaW50OgogICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgVW5yZWFjaGFibGU6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0z
MzI5LDcgKzMzMzYsOCBAQCBwcml2YXRlOgogICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVz
ZUtpbmQoSW50MzJVc2UpCiAgICAgICAgICAgICB8fCBtX25vZGUtPmlzQmluYXJ5VXNlS2luZChN
YWNoaW5lSW50VXNlKQogICAgICAgICAgICAgfHwgbV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoTnVt
YmVyVXNlKQotICAgICAgICAgICAgfHwgbV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoT2JqZWN0VXNl
KSkgeworICAgICAgICAgICAgfHwgbV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoT2JqZWN0VXNlKQor
ICAgICAgICAgICAgfHwgbV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoQm9vbGVhblVzZSkpIHsKICAg
ICAgICAgICAgIGNvbXBpbGVDb21wYXJlU3RyaWN0RXEoKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQpAQCAtMzM5Miw2ICszNDAwLDIxIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCisgICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5
VXNlS2luZChCb29sZWFuVXNlKSkgeworICAgICAgICAgICAgc2V0Qm9vbGVhbigKKyAgICAgICAg
ICAgICAgICBtX291dC5lcXVhbChsb3dCb29sZWFuKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dCb29s
ZWFuKG1fbm9kZS0+Y2hpbGQyKCkpKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChNaXNjVXNlKSkg
eworICAgICAgICAgICAgTFZhbHVlIGxlZnQgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCks
IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisgICAgICAgICAgICBMVmFsdWUgcmlnaHQgPSBs
b3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQyKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7Cisg
ICAgICAgICAgICBGVExfVFlQRV9DSEVDSyhqc1ZhbHVlVmFsdWUobGVmdCksIG1fbm9kZS0+Y2hp
bGQxKCksIFNwZWNNaXNjLCBpc05vdE1pc2MobGVmdCkpOworICAgICAgICAgICAgRlRMX1RZUEVf
Q0hFQ0soanNWYWx1ZVZhbHVlKHJpZ2h0KSwgbV9ub2RlLT5jaGlsZDIoKSwgU3BlY01pc2MsIGlz
Tm90TWlzYyhyaWdodCkpOworICAgICAgICAgICAgc2V0Qm9vbGVhbihtX291dC5lcXVhbChsZWZ0
LCByaWdodCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAogICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KICAgICAKQEAgLTM2NTgs
NiArMzY4MSwxMSBAQCBwcml2YXRlOgogICAgICAgICB0ZXJtaW5hdGUoSW5hZGVxdWF0ZUNvdmVy
YWdlKTsKICAgICB9CiAgICAgCisgICAgdm9pZCBjb21waWxlVGhyb3coKQorICAgIHsKKyAgICAg
ICAgdGVybWluYXRlKFVuY291bnRhYmxlKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBjb21waWxl
SW52YWxpZGF0aW9uUG9pbnQoKQogICAgIHsKICAgICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlv
bkVuYWJsZWQoKSkKQEAgLTQ5MTgsNiArNDk0NiwxNiBAQCBwcml2YXRlOgogICAgICAgICByZXR1
cm4gbV9vdXQudGVzdElzWmVybzY0KGpzVmFsdWUsIG1fdGFnTWFzayk7CiAgICAgfQogICAgIAor
ICAgIExWYWx1ZSBpc05vdE1pc2MoTFZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fb3V0LmFib3ZlKHZhbHVlLCBtX291dC5jb25zdEludDY0KFRhZ0JpdFR5cGVPdGhlciB8IFRh
Z0JpdEJvb2wgfCBUYWdCaXRVbmRlZmluZWQpKTsKKyAgICB9CisgICAgCisgICAgTFZhbHVlIGlz
TWlzYyhMVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gbV9vdXQuYml0Tm90KGlz
Tm90TWlzYyh2YWx1ZSkpOworICAgIH0KKyAgICAKICAgICBMVmFsdWUgaXNOb3RCb29sZWFuKExW
YWx1ZSBqc1ZhbHVlKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fb3V0LnRlc3ROb25aZXJvNjQo
CkBAIC01MDAxLDYgKzUwMzksOSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIE5vdENlbGxVc2U6
CiAgICAgICAgICAgICBzcGVjdWxhdGVOb3RDZWxsKGVkZ2UpOwogICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgTWlzY1VzZToKKyAgICAgICAgICAgIHNwZWN1bGF0ZU1pc2MoZWRnZSk7
CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGRhdGFM
b2coIlVuc3VwcG9ydGVkIHNwZWN1bGF0aW9uIHVzZSBraW5kOiAiLCBlZGdlLnVzZUtpbmQoKSwg
IlxuIik7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtNTI3
OCw2ICs1MzE5LDE1IEBAIHByaXZhdGU6CiAgICAgICAgIHR5cGVDaGVjayhqc1ZhbHVlVmFsdWUo
dmFsdWUpLCBlZGdlLCB+U3BlY0NlbGwsIGlzQ2VsbCh2YWx1ZSkpOwogICAgIH0KICAgICAKKyAg
ICB2b2lkIHNwZWN1bGF0ZU1pc2MoRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2lu
dGVycHJldGVyLm5lZWRzVHlwZUNoZWNrKGVkZ2UpKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAKKyAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShlZGdlKTsKKyAgICAgICAg
dHlwZUNoZWNrKGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2UsIFNwZWNNaXNjLCBpc05vdE1pc2Mo
dmFsdWUpKTsKKyAgICB9CisgICAgCiAgICAgYm9vbCBtYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0
Y2hwb2ludElzU3RpbGxWYWxpZCgpCiAgICAgewogICAgICAgICByZXR1cm4gbV9ncmFwaC5tYXNx
dWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludElzU3RpbGxWYWxpZChtX25vZGUtPm9yaWdpbi5z
ZW1hbnRpYyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3dlaXJk
LWVxdWFsaXR5LWZvbGRpbmctY2FzZXMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rlc3RzL3N0cmVzcy93ZWlyZC1lcXVhbGl0eS1mb2xkaW5nLWNhc2VzLmpzCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy93ZWlyZC1lcXVh
bGl0eS1mb2xkaW5nLWNhc2VzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTMgQEAKK2Z1
bmN0aW9uIHRlc3QoYWN0dWFsRnVuY3Rpb24sIGV4cGVjdGVkKSB7CisgICAgdmFyIGFjdHVhbCA9
IGFjdHVhbEZ1bmN0aW9uKCk7CisgICAgaWYgKGFjdHVhbCAhPSBleHBlY3RlZCkKKyAgICAgICAg
dGhyb3cgbmV3IEVycm9yKCJiYWQgaW4gIiArIGFjdHVhbEZ1bmN0aW9uICsgIiByZXN1bHQ6ICIg
KyBhY3R1YWwpOworfQorCitub0lubGluZSh0ZXN0KTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAx
MDAwMDsgKytpKSB7CisgICAgdGVzdChmdW5jdGlvbigpIHsgcmV0dXJuICI1IiA9PSA1OyB9LCB0
cnVlKTsKKyAgICB0ZXN0KGZ1bmN0aW9uKCkgeyByZXR1cm4gKHt2YWx1ZU9mOmZ1bmN0aW9uKCl7
cmV0dXJuIDQyO319KSA9PSA0MjsgfSwgdHJ1ZSk7CisgICAgdGVzdChmdW5jdGlvbigpIHsgcmV0
dXJuICh7dmFsdWVPZjpmdW5jdGlvbigpe3JldHVybiA0Mjt9fSkgPT0gKHt2YWx1ZU9mOmZ1bmN0
aW9uKCl7cmV0dXJuIDQyO319KSB9LCBmYWxzZSk7Cit9CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNjQ5
MzYpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwx
OSBAQAorMjAxNC0wMy0wMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAg
ICAgIERGRyBhbmQgRlRMIHNob3VsZCBzcGVjaWFsaXplIGZvciBhbmQgc3VwcG9ydCBDb21wYXJl
U3RyaWN0RXEgb3ZlciBNaXNjIChpLmUuIGJvb2xlYW4sIHVuZGVmaW5lZCwgb3IgbnVsbCkKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyOTU2MworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICoganMvcmVncmVz
cy9mb2xkLXN0cmljdC1lcS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jl
c3MvZm9sZC1zdHJpY3QtZXEuaHRtbDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9taXNj
LXN0cmljdC1lcS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvbWlz
Yy1zdHJpY3QtZXEuaHRtbDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9zY3JpcHQtdGVz
dHMvZm9sZC1zdHJpY3QtZXEuanM6IEFkZGVkLgorICAgICAgICAoZm9vKToKKyAgICAgICAgKHRl
c3QpOgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL21pc2Mtc3RyaWN0LWVxLmpz
OiBBZGRlZC4KKwogMjAxNC0wMy0wMSAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtp
dC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjE2NDkyOSBhbmQgcjE2
NDkzNC4KSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZm9sZC1zdHJpY3QtZXEtZXhwZWN0
ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZm9sZC1zdHJpY3Qt
ZXEtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9m
b2xkLXN0cmljdC1lcS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBA
QAorSlNSZWdyZXNzL2ZvbGQtc3RyaWN0LWVxCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBh
IHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4K
KworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlz
IHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2Zv
bGQtc3RyaWN0LWVxLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9m
b2xkLXN0cmljdC1lcS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVz
cy9mb2xkLXN0cmljdC1lcS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwh
RE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhl
YWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Njcmlw
dD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9yZWdyZXNzLXByZS5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2ZvbGQtc3RyaWN0LWVxLmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3Nj
cmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvbWlz
Yy1zdHJpY3QtZXEtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3Jl
Z3Jlc3MvbWlzYy1zdHJpY3QtZXEtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvanMvcmVncmVzcy9taXNjLXN0cmljdC1lcS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL21pc2Mtc3RyaWN0LWVxCisKK09uIHN1Y2Nl
c3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5
ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3Vj
Y2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRU
ZXN0cy9qcy9yZWdyZXNzL21pc2Mtc3RyaWN0LWVxLmh0bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvanMvcmVncmVzcy9taXNjLXN0cmljdC1lcS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvanMvcmVncmVzcy9taXNjLXN0cmljdC1lcS5odG1sCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwv
L0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRl
c3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9InJlc291
cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3Rz
L21pc2Mtc3RyaWN0LWVxLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcmVn
cmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMt
dGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRl
c3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2ZvbGQtc3RyaWN0LWVxLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2ZvbGQtc3RyaWN0LWVxLmpz
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZm9s
ZC1zdHJpY3QtZXEuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNiBAQAorZnVuY3Rpb24g
Zm9vKGEsIGIpIHsKKyAgICByZXR1cm4gYSA9PT0gYjsKK30KKworZnVuY3Rpb24gdGVzdChhY3R1
YWwsIGV4cGVjdGVkKSB7CisgICAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpCisgICAgICAgIHRo
cm93IG5ldyBFcnJvcigiYmFkIHJlc3VsdDogIiArIGFjdHVhbCk7Cit9CisKK2ZvciAodmFyIGkg
PSAwOyBpIDwgMTAwMDAwMDA7ICsraSkgeworICAgIHRlc3QoZm9vKHRydWUsIG51bGwpLCBmYWxz
ZSk7CisgICAgdGVzdChmb28odHJ1ZSwgZmFsc2UpLCBmYWxzZSk7CisgICAgdGVzdChmb28odHJ1
ZSwgdHJ1ZSksIHRydWUpOworICAgIHRlc3QoZm9vKDUsICJoZWxsbyIpLCBmYWxzZSk7CisgICAg
dGVzdChmb28odm9pZCAwLCBuZXcgT2JqZWN0KCkpLCBmYWxzZSk7Cit9CkluZGV4OiBMYXlvdXRU
ZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9taXNjLXN0cmljdC1lcS5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9taXNjLXN0cmljdC1lcS5q
cwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL21p
c2Mtc3RyaWN0LWVxLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTMgQEAKKyhmdW5jdGlv
bigpIHsKKyAgICB2YXIgYXJyYXkgPSBbdHJ1ZSwgZmFsc2UsIG51bGwsIHZvaWQgMF07CisgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDAwOyArK2kpIHsKKyAgICAgICAgZm9yICh2YXIgaiA9
IDA7IGogPCBhcnJheS5sZW5ndGg7ICsraikgeworICAgICAgICAgICAgZm9yICh2YXIgayA9IGog
OyBrIDwgYXJyYXkubGVuZ3RoOyArK2spIHsKKyAgICAgICAgICAgICAgICB2YXIgYWN0dWFsID0g
YXJyYXlbal0gPT09IGFycmF5W2tdOworICAgICAgICAgICAgICAgIHZhciBleHBlY3RlZCA9IGog
PT0gazsKKyAgICAgICAgICAgICAgICBpZiAoYWN0dWFsICE9IGV4cGVjdGVkKQorICAgICAgICAg
ICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQgZm9yIGogPSAiICsgaiArICIsIGsg
PSAiICsgazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30pKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>225586</attachid>
            <date>2014-03-01 20:38:32 -0800</date>
            <delta_ts>2014-03-02 08:21:18 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>33991</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY0OTM2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDczIEBA
CisyMDE0LTAzLTAxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIGFuZCBGVEwgc2hvdWxkIHNwZWNpYWxpemUgZm9yIGFuZCBzdXBwb3J0IENvbXBhcmVTdHJp
Y3RFcSBvdmVyIE1pc2MgKGkuZS4gYm9vbGVhbiwgdW5kZWZpbmVkLCBvciBudWxsKQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI5NTYzCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGFk
ZHMgYSBzcGVjaWFsaXphdGlvbiBvZiBDb21wYXJlU3RyaWN0RXEgb3ZlciBNaXNjLiBJIG5vdGlj
ZWQgdGhlIG5lZWQgZm9yIHRoaXMKKyAgICAgICAgd2hlbiBJIHNhdyB0aGF0IHdlIGRpZG4ndCBz
dXBwb3J0IENvbXBhcmVTdHJpY3RFcShVbnR5cGVkKSBpbiBGVEwgYnV0IHRoYXQgdGhlIG1haW4K
KyAgICAgICAgdXNlciBvZiB0aGlzIHdhcyBFYXJsZXlCb3llciwgYW5kIGluIHRoYXQgYmVuY2ht
YXJrIHdoYXQgaXQgd2FzIHJlYWxseSBkb2luZyB3YXMKKyAgICAgICAgY29tcGFyaW5nIHVuZGVm
aW5lZCwgbnVsbCwgYW5kIGJvb2xlYW5zIHRvIGVhY2ggb3RoZXIuCisgICAgICAgIAorICAgICAg
ICBUaGlzIGFsc28gYWRkcyBzdXBwb3J0IGZvciBtaXNjZWxsYW5lb3VzIHRoaW5ncyB0aGF0IEkg
bmVlZGVkIHRvIG1ha2UgbXkgdmFyaW91cyB0ZXN0CisgICAgICAgIGNhc2VzIHdvcmsuIFRoaXMg
aW5jbHVkZXMgY29tcGFyaXNvbiBvdmVyIGJvb2xlYW5zIGFuZCB0aGUgdmFyaW91cyBUaHJvdy1y
ZWxhdGVkIG5vZGUKKyAgICAgICAgdHlwZXMuCisgICAgICAgIAorICAgICAgICBUaGlzIGFsc28g
aW1wcm92ZXMgY29uc3RhbnQgZm9sZGluZyBvZiBDb21wYXJlU3RyaWN0RXEgYW5kIENvbXBhcmVF
cS4KKyAgICAgICAgCisgICAgICAgIEFsc28gZm91bmQgYSBidWcgd2hlcmUgd2Ugd2VyZSBjbGFp
bWluZyB0aGF0IEdldEJ5VmFscyBvbiB0eXBlZCBhcnJheXMgYXJlIE91dE9mQm91bmRzCisgICAg
ICAgIGJhc2VkIG9uIHByb2ZpbGluZywgd2hpY2ggY2F1c2VkIHNvbWUgZG93bnN0cmVhbSBiYWRu
ZXNzLiBXZSBkb24ndCBhY3R1YWxseSBzdXBwb3J0CisgICAgICAgIGNvbXBpbGluZyBPdXRPZkJv
dW5kcyBHZXRCeVZhbHMgb24gdHlwZWQgYXJyYXlzLiBUaGUgREZHIHdvdWxkIGlnbm9yZSB0aGUg
ZmxhZyBhbmQganVzdAorICAgICAgICBlbWl0IGEgYm91bmRzIGNoZWNrLCBidXQgaW4gdGhlIEZU
TCBwYXRoLCB0aGUgU1NBIGxvd2VyaW5nIHBoYXNlIHdvdWxkIGFzc3VtZSB0aGF0IGl0CisgICAg
ICAgIHNob3VsZG4ndCBmYWN0b3Igb3V0IHRoZSBib3VuZHMgY2hlY2sgc2luY2UgdGhlIGFjY2Vz
cyBpcyBub3QgSW5Cb3VuZHMgYnV0IHRoZW4gdGhlCisgICAgICAgIGJhY2tlbmQgd291bGQgaWdu
b3JlIHRoZSBmbGFnIGFuZCBhc3N1bWUgdGhhdCB0aGUgYm91bmRzIGNoZWNrIHdhcyBhbHJlYWR5
IGVtaXR0ZWQuCisgICAgICAgIFRoaXMgc2hvd2VkIHVwIG9uIGFuIGV4aXN0aW5nIHRlc3QgYnV0
IEkgYWRkZWQgYSB0ZXN0IGZvciB0aGlzIGV4cGxpY2l0bHkgdG8gaGF2ZSBtb3JlCisgICAgICAg
IGNlcnRhaW4gY292ZXJhZ2UuIFRoZSBmaXggaXMgdG8gbm90IG1hcmsgc29tZXRoaW5nIGFzIE91
dE9mQm91bmRzIGlmIHRoZSBzZW1hbnRpY3MgYXJlCisgICAgICAgIHRoYXQgd2UnbGwgaGF2ZSBh
IGJvdW5kcyBjaGVjayBhbnl3YXkuCisKKyAgICAgICAgKiBieXRlY29kZS9TcGVjdWxhdGVkVHlw
ZS5jcHA6CisgICAgICAgIChKU0M6OnNwZWN1bGF0aW9uVG9BYmJyZXZpYXRlZFN0cmluZyk6Cisg
ICAgICAgIChKU0M6OmxlYXN0VXBwZXJCb3VuZE9mU3RyaWN0bHlFcXVpdmFsZW50U3BlY3VsYXRp
b25zKToKKyAgICAgICAgKEpTQzo6c3BlY3VsYXRpb25zQ291bGRCZUVxdWFsKToKKyAgICAgICAg
KiBieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oOgorICAgICAgICAoSlNDOjppc01pc2NTcGVjdWxh
dGlvbik6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6Cisg
ICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46
OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAgICAgICAgKiBkZmcvREZH
Tm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnNob3VsZFNwZWN1bGF0ZU1pc2MpOgor
ICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVjdXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6U2Fm
ZVRvRXhlY3V0ZUVkZ2U6Om9wZXJhdG9yKCkpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJp
Y3RFcSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZU1pc2Mp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGUpOgorICAgICAg
ICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2
ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZU1pc2NTdHJpY3RFcSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTWlzY1N0cmljdEVxKToK
KyAgICAgICAgKiBkZmcvREZHVXNlS2luZC5jcHA6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJu
YWwpOgorICAgICAgICAqIGRmZy9ERkdVc2VLaW5kLmg6CisgICAgICAgIChKU0M6OkRGRzo6dHlw
ZUZpbHRlckZvcik6CisgICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAg
IChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9MTFZN
LmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU5vZGUpOgor
ICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQ29tcGFyZUVxKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUNvbXBhcmVTdHJpY3RFcSk6
CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVUaHJvdyk6CisgICAg
ICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmlzTm90TWlzYyk6CisgICAgICAgIChKU0M6
OkZUTDo6TG93ZXJERkdUb0xMVk06OmlzTWlzYyk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJE
RkdUb0xMVk06OnNwZWN1bGF0ZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06
OnNwZWN1bGF0ZU1pc2MpOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy93ZWlyZC1lcXVhbGl0eS1m
b2xkaW5nLWNhc2VzLmpzOiBBZGRlZC4KKyAgICAgICAgKHRlc3QpOgorICAgICAgICAoLnRlc3Qu
KToKKwogMjAxNC0wMy0wMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAg
ICAgIFRoaXMgc2hvdWxkbid0IGhhdmUgYmVlbiBhIGxheW91dCB0ZXN0IHNpbmNlIGl0IHJ1bnMg
b25seSB1bmRlciBqc2MuIE1vdmluZyBpdCB0byBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNwcAkocmV2aXNpb24gMTY0OTIx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjU1LDYgKzI1NSw4IEBAIHN0YXRpYyBjb25zdCBjaGFyKiBzcGVj
dWxhdGlvblRvQWJicmV2aWEKICAgICAgICAgcmV0dXJuICI8Qm9vbGVhbj4iOwogICAgIGlmIChp
c090aGVyU3BlY3VsYXRpb24ocHJlZGljdGlvbikpCiAgICAgICAgIHJldHVybiAiPE90aGVyPiI7
CisgICAgaWYgKGlzTWlzY1NwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQorICAgICAgICByZXR1cm4g
IjxNaXNjPiI7CiAgICAgcmV0dXJuICIiOwogfQogCkBAIC0zOTEsNSArMzkzLDQwIEBAIFR5cGVk
QXJyYXlUeXBlIHR5cGVkQXJyYXlUeXBlRnJvbVNwZWN1bGEKICAgICByZXR1cm4gTm90VHlwZWRB
cnJheTsKIH0KIAorU3BlY3VsYXRlZFR5cGUgbGVhc3RVcHBlckJvdW5kT2ZTdHJpY3RseUVxdWl2
YWxlbnRTcGVjdWxhdGlvbnMoU3BlY3VsYXRlZFR5cGUgdHlwZSkKK3sKKyAgICBpZiAodHlwZSAm
IFNwZWNJbnRlZ2VyKQorICAgICAgICB0eXBlIHw9IFNwZWNJbnRlZ2VyOworICAgIGlmICh0eXBl
ICYgU3BlY1N0cmluZykKKyAgICAgICAgdHlwZSB8PSBTcGVjU3RyaW5nOworICAgIHJldHVybiB0
eXBlOworfQorCitib29sIHNwZWN1bGF0aW9uc0NvdWxkQmVFcXVhbChTcGVjdWxhdGVkVHlwZSBh
LCBTcGVjdWxhdGVkVHlwZSBiKQoreworICAgIGEgPSBsZWFzdFVwcGVyQm91bmRPZlN0cmljdGx5
RXF1aXZhbGVudFNwZWN1bGF0aW9ucyhhKTsKKyAgICBiID0gbGVhc3RVcHBlckJvdW5kT2ZTdHJp
Y3RseUVxdWl2YWxlbnRTcGVjdWxhdGlvbnMoYik7CisgICAgCisgICAgLy8gQW55dGhpbmcgY291
bGQgYmUgZXF1YWwgdG8gYSBzdHJpbmcuCisgICAgaWYgKGEgJiBTcGVjU3RyaW5nKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoYiAmIFNwZWNTdHJpbmcpCisgICAgICAgIHJldHVybiB0
cnVlOworICAgIAorICAgIC8vIElmIGJvdGggc2lkZXMgYXJlIGRlZmluaXRlbHkgb25seSBvYmpl
Y3RzLCB0aGVuIGVxdWFsaXR5IGlzIGZhaXJseSBzYW5lLgorICAgIGlmIChpc09iamVjdFNwZWN1
bGF0aW9uKGEpICYmIGlzT2JqZWN0U3BlY3VsYXRpb24oYikpCisgICAgICAgIHJldHVybiAhIShh
ICYgYik7CisgICAgCisgICAgLy8gSWYgZWl0aGVyIHNpZGUgY291bGQgYmUgYW4gb2JqZWN0IG9y
IG5vdCwgdGhlbiB3ZSBjb3VsZCBnbyBkb3duIHNvbWUgd2VpcmQKKyAgICAvLyBlZmZlY3RmdWwg
cGF0aC4KKyAgICBpZiAoYSAmIFNwZWNPYmplY3QpCisgICAgICAgIHJldHVybiB0cnVlOworICAg
IGlmIChiICYgU3BlY09iamVjdCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgLy8g
TmVpdGhlciBzaWRlIGlzIGFuIG9iamVjdCBvciBzdHJpbmcsIHNvIHRoZSB3b3JsZCBpcyByZWxh
dGl2ZWx5IHNhbmUuCisgICAgcmV0dXJuICEhKGEgJiBiKTsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
SlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlw
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxh
dGVkVHlwZS5oCShyZXZpc2lvbiAxNjQ5MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzUsNyArNzUsOCBAQCBz
dGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0Z1bGxSZWFsCiBzdGF0aWMgY29uc3QgU3Bl
Y3VsYXRlZFR5cGUgU3BlY0J5dGVjb2RlTnVtYmVyICAgICA9IDB4MGU4MDAwMDA7IC8vIEl0J3Mg
ZWl0aGVyIGFuIEludDMyIG9yIGEgRG91YmxlLgogc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBl
IFNwZWNGdWxsTnVtYmVyICAgICAgICAgPSAweDBmODAwMDAwOyAvLyBJdCdzIGVpdGhlciBhbiBJ
bnQzMiwgSW50NTIsIG9yIGEgRG91YmxlLgogc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNw
ZWNCb29sZWFuICAgICAgICAgICAgPSAweDEwMDAwMDAwOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBC
b29sZWFuLgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNPdGhlciAgICAgICAgICAg
ICAgPSAweDIwMDAwMDAwOyAvLyBJdCdzIGRlZmluaXRlbHkgbm9uZSBvZiB0aGUgYWJvdmUuCitz
dGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY090aGVyICAgICAgICAgICAgICA9IDB4MjAw
MDAwMDA7IC8vIEl0J3MgZGVmaW5pdGVseSBlaXRoZXIgTnVsbCBvciBVbmRlZmluZWQuCitzdGF0
aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY01pc2MgICAgICAgICAgICAgICA9IDB4MzAwMDAw
MDA7IC8vIEl0J3MgZGVmaW5pdGVseSBlaXRoZXIgYSBib29sZWFuLCBOdWxsLCBvciBVbmRlZmlu
ZWQuCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0hlYXBUb3AgICAgICAgICAgICA9
IDB4M2VmZmZmZmY7IC8vIEl0IGNhbiBiZSBhbnkgb2YgdGhlIGFib3ZlLCBleGNlcHQgZm9yIFNw
ZWNJbnQ1Mi4KIHN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjRW1wdHkgICAgICAgICAg
ICAgID0gMHg0MDAwMDAwMDsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIGVtcHR5IHZhbHVlIG1hcmtl
ci4KIHN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjQnl0ZWNvZGVUb3AgICAgICAgID0g
MHg3ZWZmZmZmZjsgLy8gSXQgY2FuIGJlIGFueSBvZiB0aGUgYWJvdmUsIGV4Y2VwdCBmb3IgU3Bl
Y0ludDUyLgpAQCAtMzM1LDYgKzMzNiwxMSBAQCBpbmxpbmUgYm9vbCBpc090aGVyU3BlY3VsYXRp
b24oU3BlY3VsYXRlCiAgICAgcmV0dXJuIHZhbHVlID09IFNwZWNPdGhlcjsKIH0KIAoraW5saW5l
IGJvb2wgaXNNaXNjU3BlY3VsYXRpb24oU3BlY3VsYXRlZFR5cGUgdmFsdWUpCit7CisgICAgcmV0
dXJuICEhdmFsdWUgJiYgISh2YWx1ZSAmIH5TcGVjTWlzYyk7Cit9CisKIGlubGluZSBib29sIGlz
T3RoZXJPckVtcHR5U3BlY3VsYXRpb24oU3BlY3VsYXRlZFR5cGUgdmFsdWUpCiB7CiAgICAgcmV0
dXJuICF2YWx1ZSB8fCB2YWx1ZSA9PSBTcGVjT3RoZXI7CkBAIC0zODIsNiArMzg4LDEwIEBAIFNw
ZWN1bGF0ZWRUeXBlIHNwZWN1bGF0aW9uRnJvbVZhbHVlKEpTVmEKIFNwZWN1bGF0ZWRUeXBlIHNw
ZWN1bGF0aW9uRnJvbVR5cGVkQXJyYXlUeXBlKFR5cGVkQXJyYXlUeXBlKTsgLy8gb25seSB2YWxp
ZCBmb3IgdHlwZWQgdmlld3MuCiBUeXBlZEFycmF5VHlwZSB0eXBlZEFycmF5VHlwZUZyb21TcGVj
dWxhdGlvbihTcGVjdWxhdGVkVHlwZSk7CiAKK1NwZWN1bGF0ZWRUeXBlIGxlYXN0VXBwZXJCb3Vu
ZE9mU3RyaWN0bHlFcXVpdmFsZW50U3BlY3VsYXRpb25zKFNwZWN1bGF0ZWRUeXBlKTsKKworYm9v
bCBzcGVjdWxhdGlvbnNDb3VsZEJlRXF1YWwoU3BlY3VsYXRlZFR5cGUsIFNwZWN1bGF0ZWRUeXBl
KTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBTcGVjdWxhdGVkVHlwZV9oCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxp
bmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAxNjQ5MjEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTkxNyw4ICs5MTcsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RT
dGF0ZVR5CiAgICAgICAgIGlmIChub2RlLT5vcCgpID09IENvbXBhcmVFcUNvbnN0YW50IHx8IG5v
ZGUtPm9wKCkgPT0gQ29tcGFyZUVxKSB7CiAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0
VHlwZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZTsKICAgICAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIHJpZ2h0VHlwZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLm1fdHlwZTsKLSAg
ICAgICAgICAgIGlmICgoaXNJbnQzMlNwZWN1bGF0aW9uKGxlZnRUeXBlKSAmJiBpc090aGVyU3Bl
Y3VsYXRpb24ocmlnaHRUeXBlKSkKLSAgICAgICAgICAgICAgICB8fCAoaXNPdGhlclNwZWN1bGF0
aW9uKGxlZnRUeXBlKSAmJiBpc0ludDMyU3BlY3VsYXRpb24ocmlnaHRUeXBlKSkpIHsKKyAgICAg
ICAgICAgIGlmICghc3BlY3VsYXRpb25zQ291bGRCZUVxdWFsKGxlZnRUeXBlLCByaWdodFR5cGUp
KSB7CiAgICAgICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwganNCb29sZWFuKGZhbHNlKSk7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC05NDMsMTkgKzk0Miwy
OCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIEpT
VmFsdWUgbGVmdCA9IGZvck5vZGUobGVmdE5vZGUpLnZhbHVlKCk7CiAgICAgICAgIEpTVmFsdWUg
cmlnaHQgPSBmb3JOb2RlKHJpZ2h0Tm9kZSkudmFsdWUoKTsKICAgICAgICAgaWYgKGxlZnQgJiYg
cmlnaHQpIHsKLSAgICAgICAgICAgIGlmIChsZWZ0LmlzTnVtYmVyKCkgJiYgcmlnaHQuaXNOdW1i
ZXIoKSkgewotICAgICAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsIGpzQm9vbGVhbihsZWZ0
LmFzTnVtYmVyKCkgPT0gcmlnaHQuYXNOdW1iZXIoKSkpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGxlZnQuaXNTdHJpbmcoKSAmJiByaWdo
dC5pc1N0cmluZygpKSB7CisgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0aGlzIGNhc2UgYmVj
YXVzZSBKU1ZhbHVlOjpzdHJpY3RFcXVhbCBpcyBvdGhlcndpc2UgdG9vIHJhY3kgZm9yCisgICAg
ICAgICAgICAgICAgLy8gc3RyaW5nIGNvbXBhcmlzb25zLgogICAgICAgICAgICAgICAgIGNvbnN0
IFN0cmluZ0ltcGwqIGEgPSBhc1N0cmluZyhsZWZ0KS0+dHJ5R2V0VmFsdWVJbXBsKCk7CiAgICAg
ICAgICAgICAgICAgY29uc3QgU3RyaW5nSW1wbCogYiA9IGFzU3RyaW5nKHJpZ2h0KS0+dHJ5R2V0
VmFsdWVJbXBsKCk7CiAgICAgICAgICAgICAgICAgaWYgKGEgJiYgYikgewogICAgICAgICAgICAg
ICAgICAgICBzZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4oV1RGOjplcXVhbChhLCBiKSkpOwog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsIGpzQm9vbGVhbihK
U1ZhbHVlOjpzdHJpY3RFcXVhbCgwLCBsZWZ0LCByaWdodCkpKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgU3BlY3Vs
YXRlZFR5cGUgbGVmdExVQiA9IGxlYXN0VXBwZXJCb3VuZE9mU3RyaWN0bHlFcXVpdmFsZW50U3Bl
Y3VsYXRpb25zKGZvck5vZGUobGVmdE5vZGUpLm1fdHlwZSk7CisgICAgICAgIFNwZWN1bGF0ZWRU
eXBlIHJpZ2h0TFVCID0gbGVhc3RVcHBlckJvdW5kT2ZTdHJpY3RseUVxdWl2YWxlbnRTcGVjdWxh
dGlvbnMoZm9yTm9kZShyaWdodE5vZGUpLm1fdHlwZSk7CisgICAgICAgIGlmICghKGxlZnRMVUIg
JiByaWdodExVQikpIHsKKyAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsIGpzQm9vbGVhbihm
YWxzZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjQm9vbGVhbik7CiAgICAgICAgIG5vZGUtPnNldENh
bkV4aXQodHJ1ZSk7IC8vIFRoaXMgaXMgb3Zlcmx5IGNvbnNlcnZhdGl2ZS4KICAgICAgICAgYnJl
YWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCShy
ZXZpc2lvbiAxNjQ5MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9k
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEzMiw3ICsxMzIsNyBAQCBBcnJheU1v
ZGUgQXJyYXlNb2RlOjpmcm9tT2JzZXJ2ZWQoY29uc3QgCiB9CiAKIEFycmF5TW9kZSBBcnJheU1v
ZGU6OnJlZmluZSgKLSAgICBHcmFwaCYgZ3JhcGgsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwKKyAg
ICBHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsCiAgICAgU3BlY3VsYXRlZFR5cGUgYmFzZSwgU3Bl
Y3VsYXRlZFR5cGUgaW5kZXgsIFNwZWN1bGF0ZWRUeXBlIHZhbHVlLAogICAgIE5vZGVGbGFncyBm
bGFncykgY29uc3QKIHsKQEAgLTE5OSwxMCArMTk5LDE4IEBAIEFycmF5TW9kZSBBcnJheU1vZGU6
OnJlZmluZSgKICAgICAgICAgICAgIHJldHVybiB3aXRoVHlwZShBcnJheTo6QXJndW1lbnRzKTsK
ICAgICAgICAgCiAgICAgICAgIEFycmF5TW9kZSByZXN1bHQ7Ci0gICAgICAgIGlmIChncmFwaC5o
YXNFeGl0U2l0ZShjb2RlT3JpZ2luLCBPdXRPZkJvdW5kcykgfHwgIWlzSW5Cb3VuZHMoKSkKLSAg
ICAgICAgICAgIHJlc3VsdCA9IHdpdGhTcGVjdWxhdGlvbihBcnJheTo6T3V0T2ZCb3VuZHMpOwot
ICAgICAgICBlbHNlCisgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICBjYXNl
IFB1dEJ5VmFsOgorICAgICAgICAgICAgaWYgKGdyYXBoLmhhc0V4aXRTaXRlKG5vZGUtPm9yaWdp
bi5zZW1hbnRpYywgT3V0T2ZCb3VuZHMpIHx8ICFpc0luQm91bmRzKCkpCisgICAgICAgICAgICAg
ICAgcmVzdWx0ID0gd2l0aFNwZWN1bGF0aW9uKEFycmF5OjpPdXRPZkJvdW5kcyk7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gd2l0aFNwZWN1bGF0aW9uKEFycmF5
OjpJbkJvdW5kcyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBk
ZWZhdWx0OgogICAgICAgICAgICAgcmVzdWx0ID0gd2l0aFNwZWN1bGF0aW9uKEFycmF5OjpJbkJv
dW5kcyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICAKICAgICAgICAg
aWYgKGlzSW50OEFycmF5U3BlY3VsYXRpb24oYmFzZSkpCiAgICAgICAgICAgICByZXR1cm4gcmVz
dWx0LndpdGhUeXBlKEFycmF5OjpJbnQ4QXJyYXkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBcnJheU1vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0FycmF5TW9kZS5oCShyZXZpc2lvbiAxNjQ5MjEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0y
MjAsNyArMjIwLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gQXJyYXlNb2RlKHR5cGUsIGFy
cmF5Q2xhc3MoKSwgc3BlY3VsYXRpb24oKSwgY29udmVyc2lvbik7CiAgICAgfQogICAgIAotICAg
IEFycmF5TW9kZSByZWZpbmUoR3JhcGgmLCBDb2RlT3JpZ2luLCBTcGVjdWxhdGVkVHlwZSBiYXNl
LCBTcGVjdWxhdGVkVHlwZSBpbmRleCwgU3BlY3VsYXRlZFR5cGUgdmFsdWUgPSBTcGVjTm9uZSwg
Tm9kZUZsYWdzID0gMCkgY29uc3Q7CisgICAgQXJyYXlNb2RlIHJlZmluZShHcmFwaCYsIE5vZGUq
LCBTcGVjdWxhdGVkVHlwZSBiYXNlLCBTcGVjdWxhdGVkVHlwZSBpbmRleCwgU3BlY3VsYXRlZFR5
cGUgdmFsdWUgPSBTcGVjTm9uZSwgTm9kZUZsYWdzID0gMCkgY29uc3Q7CiAgICAgCiAgICAgYm9v
bCBhbHJlYWR5Q2hlY2tlZChHcmFwaCYsIE5vZGUqLCBBYnN0cmFjdFZhbHVlJikgY29uc3Q7CiAg
ICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJ
KHJldmlzaW9uIDE2NDkyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQ
aGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzMiw2ICs0MzIsMTEgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICBmaXhFZGdlPE9iamVjdFVzZT4obm9kZS0+Y2hpbGQyKCkpOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG5vZGUtPmNo
aWxkMSgpLT5zaG91bGRTcGVjdWxhdGVNaXNjKCkgJiYgbm9kZS0+Y2hpbGQyKCktPnNob3VsZFNw
ZWN1bGF0ZU1pc2MoKSkgeworICAgICAgICAgICAgICAgIGZpeEVkZ2U8TWlzY1VzZT4obm9kZS0+
Y2hpbGQxKCkpOworICAgICAgICAgICAgICAgIGZpeEVkZ2U8TWlzY1VzZT4obm9kZS0+Y2hpbGQy
KCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KIApAQCAtNDUyLDcgKzQ1Nyw3IEBAIHByaXZhdGU6CiAgICAgICAg
IGNhc2UgR2V0QnlWYWw6IHsKICAgICAgICAgICAgIG5vZGUtPnNldEFycmF5TW9kZSgKICAgICAg
ICAgICAgICAgICBub2RlLT5hcnJheU1vZGUoKS5yZWZpbmUoCi0gICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGgsIG5vZGUtPm9yaWdpbi5zZW1hbnRpYywKKyAgICAgICAgICAgICAgICAgICAgbV9n
cmFwaCwgbm9kZSwKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rp
b24oKSwKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCktPnByZWRpY3Rpb24oKSwK
ICAgICAgICAgICAgICAgICAgICAgU3BlY05vbmUsIG5vZGUtPmZsYWdzKCkpKTsKQEAgLTUxMCw3
ICs1MTUsNyBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICBub2RlLT5zZXRBcnJheU1vZGUoCiAg
ICAgICAgICAgICAgICAgbm9kZS0+YXJyYXlNb2RlKCkucmVmaW5lKAotICAgICAgICAgICAgICAg
ICAgICBtX2dyYXBoLCBub2RlLT5vcmlnaW4uc2VtYW50aWMsCisgICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGgsIG5vZGUsCiAgICAgICAgICAgICAgICAgICAgIGNoaWxkMS0+cHJlZGljdGlvbigp
LAogICAgICAgICAgICAgICAgICAgICBjaGlsZDItPnByZWRpY3Rpb24oKSwKICAgICAgICAgICAg
ICAgICAgICAgY2hpbGQzLT5wcmVkaWN0aW9uKCkpKTsKQEAgLTU5Niw3ICs2MDEsNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgLy8gdGhhdCB3b3VsZCBicmVhayB0aGluZ3MuCiAgICAgICAgICAg
ICBub2RlLT5zZXRBcnJheU1vZGUoCiAgICAgICAgICAgICAgICAgbm9kZS0+YXJyYXlNb2RlKCku
cmVmaW5lKAotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBub2RlLT5vcmlnaW4uc2VtYW50
aWMsCisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG5vZGUsCiAgICAgICAgICAgICAgICAg
ICAgIG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkgJiBTcGVjQ2VsbCwKICAgICAgICAgICAg
ICAgICAgICAgU3BlY0ludDMyLAogICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS0+
cHJlZGljdGlvbigpKSk7CkBAIC0xNzUwLDcgKzE3NTUsNyBAQCBwcml2YXRlOgogICAgICAgICB9
CiAgICAgICAgICAgICAKICAgICAgICAgYXJyYXlNb2RlID0gYXJyYXlNb2RlLnJlZmluZSgKLSAg
ICAgICAgICAgIG1fZ3JhcGgsIG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgbm9kZS0+Y2hpbGQxKCkt
PnByZWRpY3Rpb24oKSwgbm9kZS0+cHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgIG1fZ3JhcGgs
IG5vZGUsIG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCksIG5vZGUtPnByZWRpY3Rpb24oKSk7
CiAgICAgICAgICAgICAKICAgICAgICAgaWYgKGFycmF5TW9kZS50eXBlKCkgPT0gQXJyYXk6Okdl
bmVyaWMpIHsKICAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBpbnB1dCBpcyBzb21ldGhpbmcg
dGhhdCB3ZSBjYW4ndCBnZXQgYXJyYXkgbGVuZ3RoIGZvciwgYnV0IGZvciB3aGljaCB3ZQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE2NDkyMSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzk5
LDYgKzEzOTksMTEgQEAgc3RydWN0IE5vZGUgewogICAgIHsKICAgICAgICAgcmV0dXJuIGlzQm9v
bGVhblNwZWN1bGF0aW9uKHByZWRpY3Rpb24oKSk7CiAgICAgfQorICAgIAorICAgIGJvb2wgc2hv
dWxkU3BlY3VsYXRlTWlzYygpCisgICAgeworICAgICAgICByZXR1cm4gaXNNaXNjU3BlY3VsYXRp
b24ocHJlZGljdGlvbigpKTsKKyAgICB9CiAgICAKICAgICBib29sIHNob3VsZFNwZWN1bGF0ZVN0
cmluZ0lkZW50KCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nh
ZmVUb0V4ZWN1dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NhZmVUb0V4ZWN1dGUuaAkocmV2aXNpb24gMTY0OTIxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDYgKzU5LDcg
QEAgcHVibGljOgogICAgICAgICBjYXNlIFN0cmluZ09yU3RyaW5nT2JqZWN0VXNlOgogICAgICAg
ICBjYXNlIE5vdENlbGxVc2U6CiAgICAgICAgIGNhc2UgT3RoZXJVc2U6CisgICAgICAgIGNhc2Ug
TWlzY1VzZToKICAgICAgICAgY2FzZSBNYWNoaW5lSW50VXNlOgogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDE2NDkyMSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTYxMyw2ICs2MTMsMjIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3Vs
YXRpdmVOb25QZQogICAgIGJvb2xlYW5SZXN1bHQocmVzdWx0UGF5bG9hZEdQUiwgbm9kZSwgVXNl
Q2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKIH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZU1pc2NTdHJpY3RFcShOb2RlKiBub2RlKQoreworICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0
aGlzLCBub2RlLT5jaGlsZDEoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAgICBKU1Zh
bHVlT3BlcmFuZCBvcDIodGhpcywgbm9kZS0+Y2hpbGQyKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxh
dGlvbik7CisgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAKKyAgICBzcGVjdWxh
dGVNaXNjKG5vZGUtPmNoaWxkMSgpLCBvcDEuanNWYWx1ZVJlZ3MoKSk7CisgICAgc3BlY3VsYXRl
TWlzYyhub2RlLT5jaGlsZDIoKSwgb3AyLmpzVmFsdWVSZWdzKCkpOworICAgIAorICAgIG1faml0
Lm1vdmUoVHJ1c3RlZEltbTMyKDApLCByZXN1bHQuZ3ByKCkpOworICAgIEpJVENvbXBpbGVyOjpK
dW1wIG5vdEVxdWFsID0gbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBvcDEu
dGFnR1BSKCksIG9wMi50YWdHUFIoKSk7CisgICAgbV9qaXQuY29tcGFyZTMyKEpJVENvbXBpbGVy
OjpFcXVhbCwgb3AxLnBheWxvYWRHUFIoKSwgb3AyLnBheWxvYWRHUFIoKSwgcmVzdWx0Lmdwcigp
KTsKKyAgICBub3RFcXVhbC5saW5rKCZtX2ppdCk7CisgICAgYm9vbGVhblJlc3VsdChyZXN1bHQu
Z3ByKCksIG5vZGUpOworfQorCiB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBu
b2RlKQogewogICAgIGlmIChub2RlLT5vcCgpICE9IENhbGwpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE2
NDkyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTY0OCw2ICs2NDgsMjAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6bm9uU3BlY3VsYXRpdmVOb25QZQogICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBtX2N1
cnJlbnROb2RlLCBEYXRhRm9ybWF0SlNCb29sZWFuLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0
bHkpOwogfQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTWlzY1N0cmljdEVxKE5vZGUq
IG5vZGUpCit7CisgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpLCBN
YW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgIEpTVmFsdWVPcGVyYW5kIG9wMih0aGlzLCBu
b2RlLT5jaGlsZDIoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAgICBHUFJUZW1wb3Jh
cnkgcmVzdWx0KHRoaXMpOworICAgIAorICAgIHNwZWN1bGF0ZU1pc2Mobm9kZS0+Y2hpbGQxKCks
IG9wMS5qc1ZhbHVlUmVncygpKTsKKyAgICBzcGVjdWxhdGVNaXNjKG5vZGUtPmNoaWxkMigpLCBv
cDIuanNWYWx1ZVJlZ3MoKSk7CisgICAgCisgICAgbV9qaXQuY29tcGFyZTMyKEpJVENvbXBpbGVy
OjpFcXVhbCwgb3AxLmdwcigpLCBvcDIuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CisgICAgbV9qaXQu
b3IzMihUcnVzdGVkSW1tMzIoVmFsdWVGYWxzZSksIHJlc3VsdC5ncHIoKSk7CisgICAganNWYWx1
ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOworfQorCiB2
b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlKQogewogICAgIGlmIChub2Rl
LT5vcCgpICE9IENhbGwpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTY0OTIxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4MDIs
NiArMzgwMiwxMSBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RyaWN0RXEoTm9kCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgICAgIAorICAgIGNhc2UgTWlzY1VzZTog
eworICAgICAgICBjb21waWxlTWlzY1N0cmljdEVxKG5vZGUpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgICAgICAKICAgICBjYXNlIFVudHlwZWRVc2U6IHsKICAgICAgICAgcmV0
dXJuIG5vblNwZWN1bGF0aXZlU3RyaWN0RXEobm9kZSk7CiAgICAgfQpAQCAtNDgzMCw2ICs0ODM1
LDMxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZU90aGVyKEVkZ2UKICNlbmRpZiAg
ICAKIH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlTWlzYyhFZGdlIGVkZ2UsIEpT
VmFsdWVSZWdzIHJlZ3MpCit7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICB0eXBlQ2hlY2soCisg
ICAgICAgIHJlZ3MsIGVkZ2UsIFNwZWNNaXNjLAorICAgICAgICBtX2ppdC5icmFuY2g2NChNYWNy
b0Fzc2VtYmxlcjo6QWJvdmUsIHJlZ3MuZ3ByKCksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
NjQoVGFnQml0VHlwZU90aGVyIHwgVGFnQml0Qm9vbCB8IFRhZ0JpdFVuZGVmaW5lZCkpKTsKKyNl
bHNlCisgICAgdHlwZUNoZWNrKAorICAgICAgICByZWdzLCBlZGdlLCBTcGVjTWlzYyB8IFNwZWNJ
bnQzMiwKKyAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCByZWdz
LnRhZ0dQUigpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFn
KSkpOworICAgIHR5cGVDaGVjaygKKyAgICAgICAgcmVncywgZWRnZSwgU3BlY01pc2MsCisgICAg
ICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgcmVncy50YWdHUFIoKSwg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpVbmRlZmluZWRUYWcpKSk7Cisj
ZW5kaWYKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlTWlzYyhFZGdlIGVkZ2Up
Cit7CisgICAgaWYgKCFuZWVkc1R5cGVDaGVjayhlZGdlLCBTcGVjTWlzYykpCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICBKU1ZhbHVlT3BlcmFuZCBvcGVyYW5kKHRoaXMsIGVkZ2UsIE1hbnVh
bE9wZXJhbmRTcGVjdWxhdGlvbik7CisgICAgc3BlY3VsYXRlTWlzYyhlZGdlLCBvcGVyYW5kLmpz
VmFsdWVSZWdzKCkpOworfQorCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGUoTm9kZSos
IEVkZ2UgZWRnZSkKIHsKICAgICBzd2l0Y2ggKGVkZ2UudXNlS2luZCgpKSB7CkBAIC00ODkyLDYg
KzQ5MjIsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGUoTm9kZSosIEVkCiAgICAg
Y2FzZSBPdGhlclVzZToKICAgICAgICAgc3BlY3VsYXRlT3RoZXIoZWRnZSk7CiAgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgTWlzY1VzZToKKyAgICAgICAgc3BlY3VsYXRlTWlzYyhlZGdlKTsKKyAg
ICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAxNjQ5MjEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTE5
ODUsNiArMTk4NSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbXBpbGVTdHJpbmdFcXVhbGl0eShO
b2RlKik7CiAgICAgdm9pZCBjb21waWxlU3RyaW5nSWRlbnRFcXVhbGl0eShOb2RlKik7CiAgICAg
dm9pZCBjb21waWxlU3RyaW5nWmVyb0xlbmd0aChOb2RlKik7CisgICAgdm9pZCBjb21waWxlTWlz
Y1N0cmljdEVxKE5vZGUqKTsKIAogICAgIHZvaWQgZW1pdE9iamVjdE9yT3RoZXJCcmFuY2goRWRn
ZSB2YWx1ZSwgQmFzaWNCbG9jayogdGFrZW4sIEJhc2ljQmxvY2sqIG5vdFRha2VuKTsKICAgICB2
b2lkIGVtaXRCcmFuY2goTm9kZSopOwpAQCAtMjIwMyw2ICsyMjA0LDggQEAgcHVibGljOgogICAg
IHZvaWQgc3BlY3VsYXRlU3RyaW5nT3JTdHJpbmdPYmplY3QoRWRnZSk7CiAgICAgdm9pZCBzcGVj
dWxhdGVOb3RDZWxsKEVkZ2UpOwogICAgIHZvaWQgc3BlY3VsYXRlT3RoZXIoRWRnZSk7CisgICAg
dm9pZCBzcGVjdWxhdGVNaXNjKEVkZ2UsIEpTVmFsdWVSZWdzKTsgLy8gUmV0dXJucyB0byB5b3Ug
dGhlIEdQUlJlZyB0aGF0IHlvdSBjYW4gdXNlIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy4KKyAg
ICB2b2lkIHNwZWN1bGF0ZU1pc2MoRWRnZSk7CiAgICAgdm9pZCBzcGVjdWxhdGUoTm9kZSosIEVk
Z2UpOwogICAgIAogICAgIEpJVENvbXBpbGVyOjpKdW1wIGp1bXBTbG93Rm9yVW53YW50ZWRBcnJh
eU1vZGUoR1BSUmVnIHRlbXBXaXRoSW5kZXhpbmdUeXBlUmVnLCBBcnJheU1vZGUsIEluZGV4aW5n
VHlwZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5jcHAJKHJl
dmlzaW9uIDE2NDkyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTk3LDYgKzk3LDkgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50
U3RyZWFtJiBvdXQsIFVzZQogICAgIGNhc2UgT3RoZXJVc2U6CiAgICAgICAgIG91dC5wcmludCgi
T3RoZXIiKTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBNaXNjVXNlOgorICAgICAgICBvdXQu
cHJpbnQoIk1pc2MiKTsKKyAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuaAkocmV2aXNpb24gMTY0OTIxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU0LDYgKzU0
LDcgQEAgZW51bSBVc2VLaW5kIHsKICAgICBTdHJpbmdPclN0cmluZ09iamVjdFVzZSwKICAgICBO
b3RDZWxsVXNlLAogICAgIE90aGVyVXNlLAorICAgIE1pc2NVc2UsCiAgICAgTGFzdFVzZUtpbmQg
Ly8gTXVzdCBhbHdheXMgYmUgdGhlIGxhc3QgZW50cnkgaW4gdGhlIGVudW0sIGFzIGl0IGlzIHVz
ZWQgdG8gZGVub3RlIHRoZSBudW1iZXIgb2YgZW51bSBlbGVtZW50cy4KIH07CiAKQEAgLTk2LDYg
Kzk3LDggQEAgQUxXQVlTX0lOTElORSBTcGVjdWxhdGVkVHlwZSB0eXBlRmlsdGVyRgogICAgICAg
ICByZXR1cm4gflNwZWNDZWxsOwogICAgIGNhc2UgT3RoZXJVc2U6CiAgICAgICAgIHJldHVybiBT
cGVjT3RoZXI7CisgICAgY2FzZSBNaXNjVXNlOgorICAgICAgICByZXR1cm4gU3BlY01pc2M7CiAg
ICAgZGVmYXVsdDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgcmV0dXJuIFNwZWNGdWxsVG9wOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMTY0OTIzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDEs
NiArMTQxLDkgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIAogICAg
IGNhc2UgTXVsdGlQdXRCeU9mZnNldDoKICAgICBjYXNlIFRvUHJpbWl0aXZlOgogICAgIGNhc2Ug
UGhhbnRvbUFyZ3VtZW50czoKKyAgICBjYXNlIFRocm93OgorICAgIGNhc2UgVGhyb3dSZWZlcmVu
Y2VFcnJvcjoKKyAgICBjYXNlIFVucmVhY2hhYmxlOgogICAgICAgICAvLyBUaGVzZSBhcmUgT0su
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgUHV0QnlJZERpcmVjdDoKQEAgLTIzMiw2ICsyMzUs
OCBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoTm9kZSogCiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgaWYgKG5vZGUtPmlzQmluYXJ5VXNlS2luZChVbnR5cGVkVXNlKSkK
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAobm9kZS0+aXNCaW5hcnlVc2VLaW5kKEJv
b2xlYW5Vc2UpKQorICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGlmIChub2RlLT5jaGlsZDEo
KS51c2VLaW5kKCkgPT0gT2JqZWN0VXNlCiAgICAgICAgICAgICAmJiBub2RlLT5jaGlsZDIoKS51
c2VLaW5kKCkgPT0gT2JqZWN0T3JPdGhlclVzZSkKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjQ4
LDYgKzI1MywxMCBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoTm9kZSogCiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgaWYgKG5vZGUtPmlzQmluYXJ5VXNlS2luZChPYmpl
Y3RVc2UpKQogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmIChub2RlLT5pc0JpbmFyeVVz
ZUtpbmQoTWlzY1VzZSkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKG5vZGUtPmlz
QmluYXJ5VXNlS2luZChCb29sZWFuVXNlKSkKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBy
ZXR1cm4gQ2Fubm90Q29tcGlsZTsKICAgICBjYXNlIENvbXBhcmVMZXNzOgogICAgIGNhc2UgQ29t
cGFyZUxlc3NFcToKQEAgLTMzOCw2ICszNDcsNyBAQCBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGls
ZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgICAgICAgICAgY2FzZSBTdHJpbmdPclN0cmluZ09iamVj
dFVzZToKICAgICAgICAgICAgICAgICBjYXNlIEZpbmFsT2JqZWN0VXNlOgogICAgICAgICAgICAg
ICAgIGNhc2UgTm90Q2VsbFVzZToKKyAgICAgICAgICAgICAgICBjYXNlIE1pc2NVc2U6CiAgICAg
ICAgICAgICAgICAgICAgIC8vIFRoZXNlIGFyZSBPSy4KICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgZGVmYXVsdDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxNjQ5MjMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTU2LDYgKzU1NiwxMCBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEZvcmNlT1NS
RXhpdDoKICAgICAgICAgICAgIGNvbXBpbGVGb3JjZU9TUkV4aXQoKTsKICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFRocm93OgorICAgICAgICBjYXNlIFRocm93UmVmZXJlbmNlRXJy
b3I6CisgICAgICAgICAgICBjb21waWxlVGhyb3coKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIEludmFsaWRhdGlvblBvaW50OgogICAgICAgICAgICAgY29tcGlsZUludmFsaWRh
dGlvblBvaW50KCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTU4OSw2ICs1OTMsOSBAQCBwcml2
YXRlOgogICAgICAgICBjYXNlIFR5cGVkQXJyYXlXYXRjaHBvaW50OgogICAgICAgICBjYXNlIEFs
bG9jYXRpb25Qcm9maWxlV2F0Y2hwb2ludDoKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIFVucmVhY2hhYmxlOgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzMyOSw3
ICszMzM2LDggQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5k
KEludDMyVXNlKQogICAgICAgICAgICAgfHwgbV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoTWFjaGlu
ZUludFVzZSkKICAgICAgICAgICAgIHx8IG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKE51bWJlclVz
ZSkKLSAgICAgICAgICAgIHx8IG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKE9iamVjdFVzZSkpIHsK
KyAgICAgICAgICAgIHx8IG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKE9iamVjdFVzZSkKKyAgICAg
ICAgICAgIHx8IG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKEJvb2xlYW5Vc2UpKSB7CiAgICAgICAg
ICAgICBjb21waWxlQ29tcGFyZVN0cmljdEVxKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KQEAgLTMzOTIsNiArMzQwMCwyMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAgICAgICAgIAorICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtp
bmQoQm9vbGVhblVzZSkpIHsKKyAgICAgICAgICAgIHNldEJvb2xlYW4oCisgICAgICAgICAgICAg
ICAgbV9vdXQuZXF1YWwobG93Qm9vbGVhbihtX25vZGUtPmNoaWxkMSgpKSwgbG93Qm9vbGVhbiht
X25vZGUtPmNoaWxkMigpKSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoTWlzY1VzZSkpIHsKKyAg
ICAgICAgICAgIExWYWx1ZSBsZWZ0ID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpLCBNYW51
YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgICAgICAgICAgTFZhbHVlIHJpZ2h0ID0gbG93SlNW
YWx1ZShtX25vZGUtPmNoaWxkMigpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgICAg
ICAgICAgRlRMX1RZUEVfQ0hFQ0soanNWYWx1ZVZhbHVlKGxlZnQpLCBtX25vZGUtPmNoaWxkMSgp
LCBTcGVjTWlzYywgaXNOb3RNaXNjKGxlZnQpKTsKKyAgICAgICAgICAgIEZUTF9UWVBFX0NIRUNL
KGpzVmFsdWVWYWx1ZShyaWdodCksIG1fbm9kZS0+Y2hpbGQyKCksIFNwZWNNaXNjLCBpc05vdE1p
c2MocmlnaHQpKTsKKyAgICAgICAgICAgIHNldEJvb2xlYW4obV9vdXQuZXF1YWwobGVmdCwgcmln
aHQpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAgICAgCkBAIC0zNjU4LDYgKzM2
ODEsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgdGVybWluYXRlKEluYWRlcXVhdGVDb3ZlcmFnZSk7
CiAgICAgfQogICAgIAorICAgIHZvaWQgY29tcGlsZVRocm93KCkKKyAgICB7CisgICAgICAgIHRl
cm1pbmF0ZShVbmNvdW50YWJsZSk7CisgICAgfQorICAgIAogICAgIHZvaWQgY29tcGlsZUludmFs
aWRhdGlvblBvaW50KCkKICAgICB7CiAgICAgICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFi
bGVkKCkpCkBAIC00OTE4LDYgKzQ5NDYsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIG1f
b3V0LnRlc3RJc1plcm82NChqc1ZhbHVlLCBtX3RhZ01hc2spOwogICAgIH0KICAgICAKKyAgICBM
VmFsdWUgaXNOb3RNaXNjKExWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBtX291
dC5hYm92ZSh2YWx1ZSwgbV9vdXQuY29uc3RJbnQ2NChUYWdCaXRUeXBlT3RoZXIgfCBUYWdCaXRC
b29sIHwgVGFnQml0VW5kZWZpbmVkKSk7CisgICAgfQorICAgIAorICAgIExWYWx1ZSBpc01pc2Mo
TFZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb3V0LmJpdE5vdChpc05vdE1p
c2ModmFsdWUpKTsKKyAgICB9CisgICAgCiAgICAgTFZhbHVlIGlzTm90Qm9vbGVhbihMVmFsdWUg
anNWYWx1ZSkKICAgICB7CiAgICAgICAgIHJldHVybiBtX291dC50ZXN0Tm9uWmVybzY0KApAQCAt
NTAwMSw2ICs1MDM5LDkgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBOb3RDZWxsVXNlOgogICAg
ICAgICAgICAgc3BlY3VsYXRlTm90Q2VsbChlZGdlKTsKICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIE1pc2NVc2U6CisgICAgICAgICAgICBzcGVjdWxhdGVNaXNjKGVkZ2UpOworICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBkYXRhTG9nKCJV
bnN1cHBvcnRlZCBzcGVjdWxhdGlvbiB1c2Uga2luZDogIiwgZWRnZS51c2VLaW5kKCksICJcbiIp
OwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTUyNzgsNiAr
NTMxOSwxNSBAQCBwcml2YXRlOgogICAgICAgICB0eXBlQ2hlY2soanNWYWx1ZVZhbHVlKHZhbHVl
KSwgZWRnZSwgflNwZWNDZWxsLCBpc0NlbGwodmFsdWUpKTsKICAgICB9CiAgICAgCisgICAgdm9p
ZCBzcGVjdWxhdGVNaXNjKEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIGlmICghbV9pbnRlcnBy
ZXRlci5uZWVkc1R5cGVDaGVjayhlZGdlKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
CisgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUoZWRnZSk7CisgICAgICAgIHR5cGVD
aGVjayhqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLCBTcGVjTWlzYywgaXNOb3RNaXNjKHZhbHVl
KSk7CisgICAgfQorICAgIAogICAgIGJvb2wgbWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9p
bnRJc1N0aWxsVmFsaWQoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fZ3JhcGgubWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQobV9ub2RlLT5vcmlnaW4uc2VtYW50
aWMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9mbG9hdDMyLWFy
cmF5LW91dC1vZi1ib3VuZHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rlc3RzL3N0cmVzcy9mbG9hdDMyLWFycmF5LW91dC1vZi1ib3VuZHMuanMJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2Zsb2F0MzItYXJyYXktb3V0
LW9mLWJvdW5kcy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIzIEBACitmdW5jdGlvbiBm
b28oYSkgeworICAgIHJldHVybiBhWzQyXTsKK30KKworbm9JbmxpbmUoZm9vKTsKKwordmFyIHNo
b3J0QXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KDEwKTsKK3ZhciBsb25nQXJyYXkgPSBuZXcgRmxv
YXQzMkFycmF5KDEwMCk7CisKK2Z1bmN0aW9uIHRlc3QoYXJyYXksIGV4cGVjdGVkKSB7CisgICAg
dmFyIHJlc3VsdCA9IGZvbyhhcnJheSk7CisgICAgaWYgKHJlc3VsdCAhPSBleHBlY3RlZCkKKyAg
ICAgICAgdGhyb3cgbmV3IEVycm9yKCJiYWQgcmVzdWx0OiAiICsgcmVzdWx0KTsKK30KKworZm9y
ICh2YXIgaSA9IDA7IGkgPCAxMDAwOyArK2kpCisgICAgdGVzdChzaG9ydEFycmF5LCB2b2lkIDAp
OworCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDsgKytpKQorICAgIHRlc3QobG9uZ0FycmF5
LCAwKTsKKwordGVzdChzaG9ydEFycmF5LCB2b2lkIDApOworCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvdGVzdHMvc3RyZXNzL3dlaXJkLWVxdWFsaXR5LWZvbGRpbmctY2FzZXMuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy93ZWlyZC1lcXVh
bGl0eS1mb2xkaW5nLWNhc2VzLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rlc3RzL3N0cmVzcy93ZWlyZC1lcXVhbGl0eS1mb2xkaW5nLWNhc2VzLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTMgQEAKK2Z1bmN0aW9uIHRlc3QoYWN0dWFsRnVuY3Rpb24sIGV4
cGVjdGVkKSB7CisgICAgdmFyIGFjdHVhbCA9IGFjdHVhbEZ1bmN0aW9uKCk7CisgICAgaWYgKGFj
dHVhbCAhPSBleHBlY3RlZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJiYWQgaW4gIiArIGFj
dHVhbEZ1bmN0aW9uICsgIiByZXN1bHQ6ICIgKyBhY3R1YWwpOworfQorCitub0lubGluZSh0ZXN0
KTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgdGVzdChmdW5jdGlv
bigpIHsgcmV0dXJuICI1IiA9PSA1OyB9LCB0cnVlKTsKKyAgICB0ZXN0KGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gKHt2YWx1ZU9mOmZ1bmN0aW9uKCl7cmV0dXJuIDQyO319KSA9PSA0MjsgfSwgdHJ1ZSk7
CisgICAgdGVzdChmdW5jdGlvbigpIHsgcmV0dXJuICh7dmFsdWVPZjpmdW5jdGlvbigpe3JldHVy
biA0Mjt9fSkgPT0gKHt2YWx1ZU9mOmZ1bmN0aW9uKCl7cmV0dXJuIDQyO319KSB9LCBmYWxzZSk7
Cit9CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNjQ5MzYpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOSBAQAorMjAxNC0wMy0wMSAgRmlsaXAgUGl6bG8g
IDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIERGRyBhbmQgRlRMIHNob3VsZCBzcGVjaWFs
aXplIGZvciBhbmQgc3VwcG9ydCBDb21wYXJlU3RyaWN0RXEgb3ZlciBNaXNjIChpLmUuIGJvb2xl
YW4sIHVuZGVmaW5lZCwgb3IgbnVsbCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEyOTU2MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICoganMvcmVncmVzcy9mb2xkLXN0cmljdC1lcS1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvZm9sZC1zdHJpY3QtZXEuaHRtbDogQWRkZWQu
CisgICAgICAgICoganMvcmVncmVzcy9taXNjLXN0cmljdC1lcS1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIGpzL3JlZ3Jlc3MvbWlzYy1zdHJpY3QtZXEuaHRtbDogQWRkZWQuCisgICAg
ICAgICoganMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZm9sZC1zdHJpY3QtZXEuanM6IEFkZGVkLgor
ICAgICAgICAoZm9vKToKKyAgICAgICAgKHRlc3QpOgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2Ny
aXB0LXRlc3RzL21pc2Mtc3RyaWN0LWVxLmpzOiBBZGRlZC4KKwogMjAxNC0wMy0wMSAgQ29tbWl0
IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwg
cm9sbGluZyBvdXQgcjE2NDkyOSBhbmQgcjE2NDkzNC4KSW5kZXg6IExheW91dFRlc3RzL2pzL3Jl
Z3Jlc3MvZm9sZC1zdHJpY3QtZXEtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2pzL3JlZ3Jlc3MvZm9sZC1zdHJpY3QtZXEtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9mb2xkLXN0cmljdC1lcS1leHBlY3RlZC50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL2ZvbGQtc3RyaWN0LWVxCisK
K09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZv
bGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24K
K1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4
OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2ZvbGQtc3RyaWN0LWVxLmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9mb2xkLXN0cmljdC1lcS5odG1sCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9mb2xkLXN0cmljdC1lcS5odG1sCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8v
RFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3Vy
Y2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBz
cmM9InJlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2Ny
aXB0LXRlc3RzL2ZvbGQtc3RyaWN0LWVxLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNv
dXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNv
dXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6
IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvbWlzYy1zdHJpY3QtZXEtZXhwZWN0ZWQudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvbWlzYy1zdHJpY3QtZXEtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9taXNjLXN0cmljdC1l
cS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNz
L21pc2Mtc3RyaWN0LWVxCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAi
UEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5v
IGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVT
VCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL21pc2Mtc3RyaWN0LWVx
Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9taXNjLXN0cmljdC1l
cS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9taXNjLXN0cmlj
dC1lcS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1M
IFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4K
Kzxib2R5PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL21pc2Mtc3RyaWN0LWVxLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9k
eT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2Zv
bGQtc3RyaWN0LWVxLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2Ny
aXB0LXRlc3RzL2ZvbGQtc3RyaWN0LWVxLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
anMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZm9sZC1zdHJpY3QtZXEuanMJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxNiBAQAorZnVuY3Rpb24gZm9vKGEsIGIpIHsKKyAgICByZXR1cm4gYSA9PT0g
YjsKK30KKworZnVuY3Rpb24gdGVzdChhY3R1YWwsIGV4cGVjdGVkKSB7CisgICAgaWYgKGFjdHVh
bCAhPT0gZXhwZWN0ZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiYmFkIHJlc3VsdDogIiAr
IGFjdHVhbCk7Cit9CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwMDA7ICsraSkgeworICAg
IHRlc3QoZm9vKHRydWUsIG51bGwpLCBmYWxzZSk7CisgICAgdGVzdChmb28odHJ1ZSwgZmFsc2Up
LCBmYWxzZSk7CisgICAgdGVzdChmb28odHJ1ZSwgdHJ1ZSksIHRydWUpOworICAgIHRlc3QoZm9v
KDUsICJoZWxsbyIpLCBmYWxzZSk7CisgICAgdGVzdChmb28odm9pZCAwLCBuZXcgT2JqZWN0KCkp
LCBmYWxzZSk7Cit9CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9t
aXNjLXN0cmljdC1lcS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3Nj
cmlwdC10ZXN0cy9taXNjLXN0cmljdC1lcS5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL21pc2Mtc3RyaWN0LWVxLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTMgQEAKKyhmdW5jdGlvbigpIHsKKyAgICB2YXIgYXJyYXkgPSBbdHJ1ZSwg
ZmFsc2UsIG51bGwsIHZvaWQgMF07CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDAwOyAr
K2kpIHsKKyAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBhcnJheS5sZW5ndGg7ICsraikgewor
ICAgICAgICAgICAgZm9yICh2YXIgayA9IGogOyBrIDwgYXJyYXkubGVuZ3RoOyArK2spIHsKKyAg
ICAgICAgICAgICAgICB2YXIgYWN0dWFsID0gYXJyYXlbal0gPT09IGFycmF5W2tdOworICAgICAg
ICAgICAgICAgIHZhciBleHBlY3RlZCA9IGogPT0gazsKKyAgICAgICAgICAgICAgICBpZiAoYWN0
dWFsICE9IGV4cGVjdGVkKQorICAgICAgICAgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCBy
ZXN1bHQgZm9yIGogPSAiICsgaiArICIsIGsgPSAiICsgazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KK30pKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>225595</attachid>
            <date>2014-03-02 08:21:18 -0800</date>
            <delta_ts>2014-03-02 08:24:04 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>34275</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY0OTM2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc2IEBA
CisyMDE0LTAzLTAxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIGFuZCBGVEwgc2hvdWxkIHNwZWNpYWxpemUgZm9yIGFuZCBzdXBwb3J0IENvbXBhcmVTdHJp
Y3RFcSBvdmVyIE1pc2MgKGkuZS4gYm9vbGVhbiwgdW5kZWZpbmVkLCBvciBudWxsKQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI5NTYzCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGFk
ZHMgYSBzcGVjaWFsaXphdGlvbiBvZiBDb21wYXJlU3RyaWN0RXEgb3ZlciBNaXNjLiBJIG5vdGlj
ZWQgdGhlIG5lZWQgZm9yIHRoaXMKKyAgICAgICAgd2hlbiBJIHNhdyB0aGF0IHdlIGRpZG4ndCBz
dXBwb3J0IENvbXBhcmVTdHJpY3RFcShVbnR5cGVkKSBpbiBGVEwgYnV0IHRoYXQgdGhlIG1haW4K
KyAgICAgICAgdXNlciBvZiB0aGlzIHdhcyBFYXJsZXlCb3llciwgYW5kIGluIHRoYXQgYmVuY2ht
YXJrIHdoYXQgaXQgd2FzIHJlYWxseSBkb2luZyB3YXMKKyAgICAgICAgY29tcGFyaW5nIHVuZGVm
aW5lZCwgbnVsbCwgYW5kIGJvb2xlYW5zIHRvIGVhY2ggb3RoZXIuCisgICAgICAgIAorICAgICAg
ICBUaGlzIGFsc28gYWRkcyBzdXBwb3J0IGZvciBtaXNjZWxsYW5lb3VzIHRoaW5ncyB0aGF0IEkg
bmVlZGVkIHRvIG1ha2UgbXkgdmFyaW91cyB0ZXN0CisgICAgICAgIGNhc2VzIHdvcmsuIFRoaXMg
aW5jbHVkZXMgY29tcGFyaXNvbiBvdmVyIGJvb2xlYW5zIGFuZCB0aGUgdmFyaW91cyBUaHJvdy1y
ZWxhdGVkIG5vZGUKKyAgICAgICAgdHlwZXMuCisgICAgICAgIAorICAgICAgICBUaGlzIGFsc28g
aW1wcm92ZXMgY29uc3RhbnQgZm9sZGluZyBvZiBDb21wYXJlU3RyaWN0RXEgYW5kIENvbXBhcmVF
cS4KKyAgICAgICAgCisgICAgICAgIEFsc28gZm91bmQgYSBidWcgd2hlcmUgd2Ugd2VyZSBjbGFp
bWluZyB0aGF0IEdldEJ5VmFscyBvbiB0eXBlZCBhcnJheXMgYXJlIE91dE9mQm91bmRzCisgICAg
ICAgIGJhc2VkIG9uIHByb2ZpbGluZywgd2hpY2ggY2F1c2VkIHNvbWUgZG93bnN0cmVhbSBiYWRu
ZXNzLiBXZSBkb24ndCBhY3R1YWxseSBzdXBwb3J0CisgICAgICAgIGNvbXBpbGluZyBPdXRPZkJv
dW5kcyBHZXRCeVZhbHMgb24gdHlwZWQgYXJyYXlzLiBUaGUgREZHIHdvdWxkIGlnbm9yZSB0aGUg
ZmxhZyBhbmQganVzdAorICAgICAgICBlbWl0IGEgYm91bmRzIGNoZWNrLCBidXQgaW4gdGhlIEZU
TCBwYXRoLCB0aGUgU1NBIGxvd2VyaW5nIHBoYXNlIHdvdWxkIGFzc3VtZSB0aGF0IGl0CisgICAg
ICAgIHNob3VsZG4ndCBmYWN0b3Igb3V0IHRoZSBib3VuZHMgY2hlY2sgc2luY2UgdGhlIGFjY2Vz
cyBpcyBub3QgSW5Cb3VuZHMgYnV0IHRoZW4gdGhlCisgICAgICAgIGJhY2tlbmQgd291bGQgaWdu
b3JlIHRoZSBmbGFnIGFuZCBhc3N1bWUgdGhhdCB0aGUgYm91bmRzIGNoZWNrIHdhcyBhbHJlYWR5
IGVtaXR0ZWQuCisgICAgICAgIFRoaXMgc2hvd2VkIHVwIG9uIGFuIGV4aXN0aW5nIHRlc3QgYnV0
IEkgYWRkZWQgYSB0ZXN0IGZvciB0aGlzIGV4cGxpY2l0bHkgdG8gaGF2ZSBtb3JlCisgICAgICAg
IGNlcnRhaW4gY292ZXJhZ2UuIFRoZSBmaXggaXMgdG8gbm90IG1hcmsgc29tZXRoaW5nIGFzIE91
dE9mQm91bmRzIGlmIHRoZSBzZW1hbnRpY3MgYXJlCisgICAgICAgIHRoYXQgd2UnbGwgaGF2ZSBh
IGJvdW5kcyBjaGVjayBhbnl3YXkuCisgICAgICAgIAorICAgICAgICBUaGlzIGlzIGEgMSUgc3Bl
ZWQtdXAgb24gT2N0YW5lIG1vc3RseSBiZWNhdXNlIG9mIHJheXRyYWNlLCBidXQgYWxzbyBiZWNh
dXNlIG9mIGp1c3QKKyAgICAgICAgZ2VuZXJhbCBwcm9ncmVzc2lvbnMgYWNyb3NzIHRoZSBib2Fy
ZC4gTm8gc3BlZWQtdXAgeWV0IG9uIEVhcmxleUJveWVyLCBzaW5jZSB0aGVyZSBpcworICAgICAg
ICBzdGlsbCBhIGxvdCBtb3JlIGNvdmVyYWdlIHdvcmsgdG8gYmUgZG9uZSB0aGVyZS4KKworICAg
ICAgICAqIGJ5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNwcDoKKyAgICAgICAgKEpTQzo6c3BlY3Vs
YXRpb25Ub0FiYnJldmlhdGVkU3RyaW5nKToKKyAgICAgICAgKEpTQzo6bGVhc3RVcHBlckJvdW5k
T2ZTdHJpY3RseUVxdWl2YWxlbnRTcGVjdWxhdGlvbnMpOgorICAgICAgICAoSlNDOjpzcGVjdWxh
dGlvbnNDb3VsZEJlRXF1YWwpOgorICAgICAgICAqIGJ5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmg6
CisgICAgICAgIChKU0M6OmlzTWlzY1NwZWN1bGF0aW9uKToKKyAgICAgICAgKiBkZmcvREZHQWJz
dHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdElu
dGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAq
IGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpm
aXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6
Tm9kZTo6c2hvdWxkU3BlY3VsYXRlTWlzYyk6CisgICAgICAgICogZGZnL0RGR1NhZmVUb0V4ZWN1
dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTYWZlVG9FeGVjdXRlRWRnZTo6b3BlcmF0b3IoKSk6
CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmljdEVxKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlTWlzYyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OnNwZWN1bGF0ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6
CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTWlzY1N0cmljdEVxKToKKyAgICAgICAgKiBk
ZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVNaXNjU3RyaWN0RXEpOgorICAgICAgICAqIGRmZy9ERkdVc2VLaW5kLmNw
cDoKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogZGZnL0RGR1VzZUtp
bmQuaDoKKyAgICAgICAgKEpTQzo6REZHOjp0eXBlRmlsdGVyRm9yKToKKyAgICAgICAgKiBmdGwv
RlRMQ2FwYWJpbGl0aWVzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjYW5Db21waWxlKToKKyAg
ICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwOgorICAgICAgICAoSlNDOjpGVEw6Okxv
d2VyREZHVG9MTFZNOjpjb21waWxlTm9kZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdU
b0xMVk06OmNvbXBpbGVDb21wYXJlRXEpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9M
TFZNOjpjb21waWxlQ29tcGFyZVN0cmljdEVxKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRG
R1RvTExWTTo6Y29tcGlsZVRocm93KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExW
TTo6aXNOb3RNaXNjKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6aXNNaXNj
KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6c3BlY3VsYXRlKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6c3BlY3VsYXRlTWlzYyk6CisgICAgICAgICog
dGVzdHMvc3RyZXNzL2Zsb2F0MzItYXJyYXktb3V0LW9mLWJvdW5kcy5qczogQWRkZWQuCisgICAg
ICAgICogdGVzdHMvc3RyZXNzL3dlaXJkLWVxdWFsaXR5LWZvbGRpbmctY2FzZXMuanM6IEFkZGVk
LgorCiAyMDE0LTAzLTAxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAg
ICAgVGhpcyBzaG91bGRuJ3QgaGF2ZSBiZWVuIGEgbGF5b3V0IHRlc3Qgc2luY2UgaXQgcnVucyBv
bmx5IHVuZGVyIGpzYy4gTW92aW5nIGl0IHRvIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwCShyZXZpc2lvbiAxNjQ5MzYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNTUsNiArMjU1LDggQEAgc3RhdGljIGNvbnN0IGNoYXIqIHNwZWN1
bGF0aW9uVG9BYmJyZXZpYQogICAgICAgICByZXR1cm4gIjxCb29sZWFuPiI7CiAgICAgaWYgKGlz
T3RoZXJTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkKICAgICAgICAgcmV0dXJuICI8T3RoZXI+IjsK
KyAgICBpZiAoaXNNaXNjU3BlY3VsYXRpb24ocHJlZGljdGlvbikpCisgICAgICAgIHJldHVybiAi
PE1pc2M+IjsKICAgICByZXR1cm4gIiI7CiB9CiAKQEAgLTM5MSw1ICszOTMsNDAgQEAgVHlwZWRB
cnJheVR5cGUgdHlwZWRBcnJheVR5cGVGcm9tU3BlY3VsYQogICAgIHJldHVybiBOb3RUeXBlZEFy
cmF5OwogfQogCitTcGVjdWxhdGVkVHlwZSBsZWFzdFVwcGVyQm91bmRPZlN0cmljdGx5RXF1aXZh
bGVudFNwZWN1bGF0aW9ucyhTcGVjdWxhdGVkVHlwZSB0eXBlKQoreworICAgIGlmICh0eXBlICYg
U3BlY0ludGVnZXIpCisgICAgICAgIHR5cGUgfD0gU3BlY0ludGVnZXI7CisgICAgaWYgKHR5cGUg
JiBTcGVjU3RyaW5nKQorICAgICAgICB0eXBlIHw9IFNwZWNTdHJpbmc7CisgICAgcmV0dXJuIHR5
cGU7Cit9CisKK2Jvb2wgc3BlY3VsYXRpb25zQ291bGRCZUVxdWFsKFNwZWN1bGF0ZWRUeXBlIGEs
IFNwZWN1bGF0ZWRUeXBlIGIpCit7CisgICAgYSA9IGxlYXN0VXBwZXJCb3VuZE9mU3RyaWN0bHlF
cXVpdmFsZW50U3BlY3VsYXRpb25zKGEpOworICAgIGIgPSBsZWFzdFVwcGVyQm91bmRPZlN0cmlj
dGx5RXF1aXZhbGVudFNwZWN1bGF0aW9ucyhiKTsKKyAgICAKKyAgICAvLyBBbnl0aGluZyBjb3Vs
ZCBiZSBlcXVhbCB0byBhIHN0cmluZy4KKyAgICBpZiAoYSAmIFNwZWNTdHJpbmcpCisgICAgICAg
IHJldHVybiB0cnVlOworICAgIGlmIChiICYgU3BlY1N0cmluZykKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgCisgICAgLy8gSWYgYm90aCBzaWRlcyBhcmUgZGVmaW5pdGVseSBvbmx5IG9iamVj
dHMsIHRoZW4gZXF1YWxpdHkgaXMgZmFpcmx5IHNhbmUuCisgICAgaWYgKGlzT2JqZWN0U3BlY3Vs
YXRpb24oYSkgJiYgaXNPYmplY3RTcGVjdWxhdGlvbihiKSkKKyAgICAgICAgcmV0dXJuICEhKGEg
JiBiKTsKKyAgICAKKyAgICAvLyBJZiBlaXRoZXIgc2lkZSBjb3VsZCBiZSBhbiBvYmplY3Qgb3Ig
bm90LCB0aGVuIHdlIGNvdWxkIGdvIGRvd24gc29tZSB3ZWlyZAorICAgIC8vIGVmZmVjdGZ1bCBw
YXRoLgorICAgIGlmIChhICYgU3BlY09iamVjdCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
aWYgKGIgJiBTcGVjT2JqZWN0KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICAvLyBO
ZWl0aGVyIHNpZGUgaXMgYW4gb2JqZWN0IG9yIHN0cmluZywgc28gdGhlIHdvcmxkIGlzIHJlbGF0
aXZlbHkgc2FuZS4KKyAgICByZXR1cm4gISEoYSAmIGIpOworfQorCiB9IC8vIG5hbWVzcGFjZSBK
U0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0
ZWRUeXBlLmgJKHJldmlzaW9uIDE2NDkzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9TcGVjdWxhdGVkVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw4IEBAIHN0
YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjRnVsbFJlYWwKIHN0YXRpYyBjb25zdCBTcGVj
dWxhdGVkVHlwZSBTcGVjQnl0ZWNvZGVOdW1iZXIgICAgID0gMHgwZTgwMDAwMDsgLy8gSXQncyBl
aXRoZXIgYW4gSW50MzIgb3IgYSBEb3VibGUuCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUg
U3BlY0Z1bGxOdW1iZXIgICAgICAgICA9IDB4MGY4MDAwMDA7IC8vIEl0J3MgZWl0aGVyIGFuIElu
dDMyLCBJbnQ1Miwgb3IgYSBEb3VibGUuCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3Bl
Y0Jvb2xlYW4gICAgICAgICAgICA9IDB4MTAwMDAwMDA7IC8vIEl0J3MgZGVmaW5pdGVseSBhIEJv
b2xlYW4uCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY090aGVyICAgICAgICAgICAg
ICA9IDB4MjAwMDAwMDA7IC8vIEl0J3MgZGVmaW5pdGVseSBub25lIG9mIHRoZSBhYm92ZS4KK3N0
YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjT3RoZXIgICAgICAgICAgICAgID0gMHgyMDAw
MDAwMDsgLy8gSXQncyBkZWZpbml0ZWx5IGVpdGhlciBOdWxsIG9yIFVuZGVmaW5lZC4KK3N0YXRp
YyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjTWlzYyAgICAgICAgICAgICAgID0gMHgzMDAwMDAw
MDsgLy8gSXQncyBkZWZpbml0ZWx5IGVpdGhlciBhIGJvb2xlYW4sIE51bGwsIG9yIFVuZGVmaW5l
ZC4KIHN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjSGVhcFRvcCAgICAgICAgICAgID0g
MHgzZWZmZmZmZjsgLy8gSXQgY2FuIGJlIGFueSBvZiB0aGUgYWJvdmUsIGV4Y2VwdCBmb3IgU3Bl
Y0ludDUyLgogc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNFbXB0eSAgICAgICAgICAg
ICAgPSAweDQwMDAwMDAwOyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gZW1wdHkgdmFsdWUgbWFya2Vy
Lgogc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNCeXRlY29kZVRvcCAgICAgICAgPSAw
eDdlZmZmZmZmOyAvLyBJdCBjYW4gYmUgYW55IG9mIHRoZSBhYm92ZSwgZXhjZXB0IGZvciBTcGVj
SW50NTIuCkBAIC0zMzUsNiArMzM2LDExIEBAIGlubGluZSBib29sIGlzT3RoZXJTcGVjdWxhdGlv
bihTcGVjdWxhdGUKICAgICByZXR1cm4gdmFsdWUgPT0gU3BlY090aGVyOwogfQogCitpbmxpbmUg
Ym9vbCBpc01pc2NTcGVjdWxhdGlvbihTcGVjdWxhdGVkVHlwZSB2YWx1ZSkKK3sKKyAgICByZXR1
cm4gISF2YWx1ZSAmJiAhKHZhbHVlICYgflNwZWNNaXNjKTsKK30KKwogaW5saW5lIGJvb2wgaXNP
dGhlck9yRW1wdHlTcGVjdWxhdGlvbihTcGVjdWxhdGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1
cm4gIXZhbHVlIHx8IHZhbHVlID09IFNwZWNPdGhlcjsKQEAgLTM4Miw2ICszODgsMTAgQEAgU3Bl
Y3VsYXRlZFR5cGUgc3BlY3VsYXRpb25Gcm9tVmFsdWUoSlNWYQogU3BlY3VsYXRlZFR5cGUgc3Bl
Y3VsYXRpb25Gcm9tVHlwZWRBcnJheVR5cGUoVHlwZWRBcnJheVR5cGUpOyAvLyBvbmx5IHZhbGlk
IGZvciB0eXBlZCB2aWV3cy4KIFR5cGVkQXJyYXlUeXBlIHR5cGVkQXJyYXlUeXBlRnJvbVNwZWN1
bGF0aW9uKFNwZWN1bGF0ZWRUeXBlKTsKIAorU3BlY3VsYXRlZFR5cGUgbGVhc3RVcHBlckJvdW5k
T2ZTdHJpY3RseUVxdWl2YWxlbnRTcGVjdWxhdGlvbnMoU3BlY3VsYXRlZFR5cGUpOworCitib29s
IHNwZWN1bGF0aW9uc0NvdWxkQmVFcXVhbChTcGVjdWxhdGVkVHlwZSwgU3BlY3VsYXRlZFR5cGUp
OworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIFNwZWN1bGF0ZWRUeXBlX2gKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGlu
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0
SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE2NDkzNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtOTE3LDggKzkxNyw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0
YXRlVHkKICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gQ29tcGFyZUVxQ29uc3RhbnQgfHwgbm9k
ZS0+b3AoKSA9PSBDb21wYXJlRXEpIHsKICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnRU
eXBlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlOwogICAgICAgICAgICAgU3BlY3Vs
YXRlZFR5cGUgcmlnaHRUeXBlID0gZm9yTm9kZShub2RlLT5jaGlsZDIoKSkubV90eXBlOwotICAg
ICAgICAgICAgaWYgKChpc0ludDMyU3BlY3VsYXRpb24obGVmdFR5cGUpICYmIGlzT3RoZXJTcGVj
dWxhdGlvbihyaWdodFR5cGUpKQotICAgICAgICAgICAgICAgIHx8IChpc090aGVyU3BlY3VsYXRp
b24obGVmdFR5cGUpICYmIGlzSW50MzJTcGVjdWxhdGlvbihyaWdodFR5cGUpKSkgeworICAgICAg
ICAgICAgaWYgKCFzcGVjdWxhdGlvbnNDb3VsZEJlRXF1YWwobGVmdFR5cGUsIHJpZ2h0VHlwZSkp
IHsKICAgICAgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4oZmFsc2UpKTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTk0MywxOSArOTQyLDI4
IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgSlNW
YWx1ZSBsZWZ0ID0gZm9yTm9kZShsZWZ0Tm9kZSkudmFsdWUoKTsKICAgICAgICAgSlNWYWx1ZSBy
aWdodCA9IGZvck5vZGUocmlnaHROb2RlKS52YWx1ZSgpOwogICAgICAgICBpZiAobGVmdCAmJiBy
aWdodCkgewotICAgICAgICAgICAgaWYgKGxlZnQuaXNOdW1iZXIoKSAmJiByaWdodC5pc051bWJl
cigpKSB7Ci0gICAgICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwganNCb29sZWFuKGxlZnQu
YXNOdW1iZXIoKSA9PSByaWdodC5hc051bWJlcigpKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAobGVmdC5pc1N0cmluZygpICYmIHJpZ2h0
LmlzU3RyaW5nKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRoaXMgY2FzZSBiZWNh
dXNlIEpTVmFsdWU6OnN0cmljdEVxdWFsIGlzIG90aGVyd2lzZSB0b28gcmFjeSBmb3IKKyAgICAg
ICAgICAgICAgICAvLyBzdHJpbmcgY29tcGFyaXNvbnMuCiAgICAgICAgICAgICAgICAgY29uc3Qg
U3RyaW5nSW1wbCogYSA9IGFzU3RyaW5nKGxlZnQpLT50cnlHZXRWYWx1ZUltcGwoKTsKICAgICAg
ICAgICAgICAgICBjb25zdCBTdHJpbmdJbXBsKiBiID0gYXNTdHJpbmcocmlnaHQpLT50cnlHZXRW
YWx1ZUltcGwoKTsKICAgICAgICAgICAgICAgICBpZiAoYSAmJiBiKSB7CiAgICAgICAgICAgICAg
ICAgICAgIHNldENvbnN0YW50KG5vZGUsIGpzQm9vbGVhbihXVEY6OmVxdWFsKGEsIGIpKSk7CiAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwganNCb29sZWFuKEpT
VmFsdWU6OnN0cmljdEVxdWFsKDAsIGxlZnQsIHJpZ2h0KSkpOworICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIAorICAgICAgICBTcGVjdWxh
dGVkVHlwZSBsZWZ0TFVCID0gbGVhc3RVcHBlckJvdW5kT2ZTdHJpY3RseUVxdWl2YWxlbnRTcGVj
dWxhdGlvbnMoZm9yTm9kZShsZWZ0Tm9kZSkubV90eXBlKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5
cGUgcmlnaHRMVUIgPSBsZWFzdFVwcGVyQm91bmRPZlN0cmljdGx5RXF1aXZhbGVudFNwZWN1bGF0
aW9ucyhmb3JOb2RlKHJpZ2h0Tm9kZSkubV90eXBlKTsKKyAgICAgICAgaWYgKCEobGVmdExVQiAm
IHJpZ2h0TFVCKSkgeworICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwganNCb29sZWFuKGZh
bHNlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAg
Zm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNCb29sZWFuKTsKICAgICAgICAgbm9kZS0+c2V0Q2Fu
RXhpdCh0cnVlKTsgLy8gVGhpcyBpcyBvdmVybHkgY29uc2VydmF0aXZlLgogICAgICAgICBicmVh
azsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAJKHJl
dmlzaW9uIDE2NDkzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2Rl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTMyLDcgKzEzMiw3IEBAIEFycmF5TW9k
ZSBBcnJheU1vZGU6OmZyb21PYnNlcnZlZChjb25zdCAKIH0KIAogQXJyYXlNb2RlIEFycmF5TW9k
ZTo6cmVmaW5lKAotICAgIEdyYXBoJiBncmFwaCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLAorICAg
IEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwKICAgICBTcGVjdWxhdGVkVHlwZSBiYXNlLCBTcGVj
dWxhdGVkVHlwZSBpbmRleCwgU3BlY3VsYXRlZFR5cGUgdmFsdWUsCiAgICAgTm9kZUZsYWdzIGZs
YWdzKSBjb25zdAogewpAQCAtMTk5LDEwICsxOTksMTggQEAgQXJyYXlNb2RlIEFycmF5TW9kZTo6
cmVmaW5lKAogICAgICAgICAgICAgcmV0dXJuIHdpdGhUeXBlKEFycmF5OjpBcmd1bWVudHMpOwog
ICAgICAgICAKICAgICAgICAgQXJyYXlNb2RlIHJlc3VsdDsKLSAgICAgICAgaWYgKGdyYXBoLmhh
c0V4aXRTaXRlKGNvZGVPcmlnaW4sIE91dE9mQm91bmRzKSB8fCAhaXNJbkJvdW5kcygpKQotICAg
ICAgICAgICAgcmVzdWx0ID0gd2l0aFNwZWN1bGF0aW9uKEFycmF5OjpPdXRPZkJvdW5kcyk7Ci0g
ICAgICAgIGVsc2UKKyAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgIGNhc2Ug
UHV0QnlWYWw6CisgICAgICAgICAgICBpZiAoZ3JhcGguaGFzRXhpdFNpdGUobm9kZS0+b3JpZ2lu
LnNlbWFudGljLCBPdXRPZkJvdW5kcykgfHwgIWlzSW5Cb3VuZHMoKSkKKyAgICAgICAgICAgICAg
ICByZXN1bHQgPSB3aXRoU3BlY3VsYXRpb24oQXJyYXk6Ok91dE9mQm91bmRzKTsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXN1bHQgPSB3aXRoU3BlY3VsYXRpb24oQXJyYXk6
OkluQm91bmRzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICByZXN1bHQgPSB3aXRoU3BlY3VsYXRpb24oQXJyYXk6OkluQm91
bmRzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBp
ZiAoaXNJbnQ4QXJyYXlTcGVjdWxhdGlvbihiYXNlKSkKICAgICAgICAgICAgIHJldHVybiByZXN1
bHQud2l0aFR5cGUoQXJyYXk6OkludDhBcnJheSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0FycmF5TW9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXJyYXlNb2RlLmgJKHJldmlzaW9uIDE2NDkzNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIy
MCw3ICsyMjAsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBBcnJheU1vZGUodHlwZSwgYXJy
YXlDbGFzcygpLCBzcGVjdWxhdGlvbigpLCBjb252ZXJzaW9uKTsKICAgICB9CiAgICAgCi0gICAg
QXJyYXlNb2RlIHJlZmluZShHcmFwaCYsIENvZGVPcmlnaW4sIFNwZWN1bGF0ZWRUeXBlIGJhc2Us
IFNwZWN1bGF0ZWRUeXBlIGluZGV4LCBTcGVjdWxhdGVkVHlwZSB2YWx1ZSA9IFNwZWNOb25lLCBO
b2RlRmxhZ3MgPSAwKSBjb25zdDsKKyAgICBBcnJheU1vZGUgcmVmaW5lKEdyYXBoJiwgTm9kZSos
IFNwZWN1bGF0ZWRUeXBlIGJhc2UsIFNwZWN1bGF0ZWRUeXBlIGluZGV4LCBTcGVjdWxhdGVkVHlw
ZSB2YWx1ZSA9IFNwZWNOb25lLCBOb2RlRmxhZ3MgPSAwKSBjb25zdDsKICAgICAKICAgICBib29s
IGFscmVhZHlDaGVja2VkKEdyYXBoJiwgTm9kZSosIEFic3RyYWN0VmFsdWUmKSBjb25zdDsKICAg
ICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAko
cmV2aXNpb24gMTY0OTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBo
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMyLDYgKzQzMiwxMSBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgIGZpeEVkZ2U8T2JqZWN0VXNlPihub2RlLT5jaGlsZDIoKSk7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hp
bGQxKCktPnNob3VsZFNwZWN1bGF0ZU1pc2MoKSAmJiBub2RlLT5jaGlsZDIoKS0+c2hvdWxkU3Bl
Y3VsYXRlTWlzYygpKSB7CisgICAgICAgICAgICAgICAgZml4RWRnZTxNaXNjVXNlPihub2RlLT5j
aGlsZDEoKSk7CisgICAgICAgICAgICAgICAgZml4RWRnZTxNaXNjVXNlPihub2RlLT5jaGlsZDIo
KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogCkBAIC00NTIsNyArNDU3LDcgQEAgcHJpdmF0ZToKICAgICAgICAg
Y2FzZSBHZXRCeVZhbDogewogICAgICAgICAgICAgbm9kZS0+c2V0QXJyYXlNb2RlKAogICAgICAg
ICAgICAgICAgIG5vZGUtPmFycmF5TW9kZSgpLnJlZmluZSgKLSAgICAgICAgICAgICAgICAgICAg
bV9ncmFwaCwgbm9kZS0+b3JpZ2luLnNlbWFudGljLAorICAgICAgICAgICAgICAgICAgICBtX2dy
YXBoLCBub2RlLAogICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlv
bigpLAogICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS0+cHJlZGljdGlvbigpLAog
ICAgICAgICAgICAgICAgICAgICBTcGVjTm9uZSwgbm9kZS0+ZmxhZ3MoKSkpOwpAQCAtNTEwLDcg
KzUxNSw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgIG5vZGUtPnNldEFycmF5TW9kZSgKICAg
ICAgICAgICAgICAgICBub2RlLT5hcnJheU1vZGUoKS5yZWZpbmUoCi0gICAgICAgICAgICAgICAg
ICAgIG1fZ3JhcGgsIG5vZGUtPm9yaWdpbi5zZW1hbnRpYywKKyAgICAgICAgICAgICAgICAgICAg
bV9ncmFwaCwgbm9kZSwKICAgICAgICAgICAgICAgICAgICAgY2hpbGQxLT5wcmVkaWN0aW9uKCks
CiAgICAgICAgICAgICAgICAgICAgIGNoaWxkMi0+cHJlZGljdGlvbigpLAogICAgICAgICAgICAg
ICAgICAgICBjaGlsZDMtPnByZWRpY3Rpb24oKSkpOwpAQCAtNTk2LDcgKzYwMSw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAvLyB0aGF0IHdvdWxkIGJyZWFrIHRoaW5ncy4KICAgICAgICAgICAg
IG5vZGUtPnNldEFycmF5TW9kZSgKICAgICAgICAgICAgICAgICBub2RlLT5hcnJheU1vZGUoKS5y
ZWZpbmUoCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG5vZGUtPm9yaWdpbi5zZW1hbnRp
YywKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwKICAgICAgICAgICAgICAgICAg
ICAgbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSAmIFNwZWNDZWxsLAogICAgICAgICAgICAg
ICAgICAgICBTcGVjSW50MzIsCiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLT5w
cmVkaWN0aW9uKCkpKTsKQEAgLTE3NTAsNyArMTc1NSw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0K
ICAgICAgICAgICAgIAogICAgICAgICBhcnJheU1vZGUgPSBhcnJheU1vZGUucmVmaW5lKAotICAg
ICAgICAgICAgbV9ncmFwaCwgbm9kZS0+b3JpZ2luLnNlbWFudGljLCBub2RlLT5jaGlsZDEoKS0+
cHJlZGljdGlvbigpLCBub2RlLT5wcmVkaWN0aW9uKCkpOworICAgICAgICAgICAgbV9ncmFwaCwg
bm9kZSwgbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSwgbm9kZS0+cHJlZGljdGlvbigpKTsK
ICAgICAgICAgICAgIAogICAgICAgICBpZiAoYXJyYXlNb2RlLnR5cGUoKSA9PSBBcnJheTo6R2Vu
ZXJpYykgewogICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGlucHV0IGlzIHNvbWV0aGluZyB0
aGF0IHdlIGNhbid0IGdldCBhcnJheSBsZW5ndGggZm9yLCBidXQgZm9yIHdoaWNoIHdlCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTY0OTM2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzOTks
NiArMTM5OSwxMSBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgewogICAgICAgICByZXR1cm4gaXNCb29s
ZWFuU3BlY3VsYXRpb24ocHJlZGljdGlvbigpKTsKICAgICB9CisgICAgCisgICAgYm9vbCBzaG91
bGRTcGVjdWxhdGVNaXNjKCkKKyAgICB7CisgICAgICAgIHJldHVybiBpc01pc2NTcGVjdWxhdGlv
bihwcmVkaWN0aW9uKCkpOworICAgIH0KICAgIAogICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlU3Ry
aW5nSWRlbnQoKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2Fm
ZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAxNjQ5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNiArNTksNyBA
QCBwdWJsaWM6CiAgICAgICAgIGNhc2UgU3RyaW5nT3JTdHJpbmdPYmplY3RVc2U6CiAgICAgICAg
IGNhc2UgTm90Q2VsbFVzZToKICAgICAgICAgY2FzZSBPdGhlclVzZToKKyAgICAgICAgY2FzZSBN
aXNjVXNlOgogICAgICAgICBjYXNlIE1hY2hpbmVJbnRVc2U6CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTY0OTM2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjEzLDYgKzYxMywyMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxh
dGl2ZU5vblBlCiAgICAgYm9vbGVhblJlc3VsdChyZXN1bHRQYXlsb2FkR1BSLCBub2RlLCBVc2VD
aGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwogfQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlTWlzY1N0cmljdEVxKE5vZGUqIG5vZGUpCit7CisgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRo
aXMsIG5vZGUtPmNoaWxkMSgpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgIEpTVmFs
dWVPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0
aW9uKTsKKyAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgIAorICAgIHNwZWN1bGF0
ZU1pc2Mobm9kZS0+Y2hpbGQxKCksIG9wMS5qc1ZhbHVlUmVncygpKTsKKyAgICBzcGVjdWxhdGVN
aXNjKG5vZGUtPmNoaWxkMigpLCBvcDIuanNWYWx1ZVJlZ3MoKSk7CisgICAgCisgICAgbV9qaXQu
bW92ZShUcnVzdGVkSW1tMzIoMCksIHJlc3VsdC5ncHIoKSk7CisgICAgSklUQ29tcGlsZXI6Okp1
bXAgbm90RXF1YWwgPSBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6Tm90RXF1YWwsIG9wMS50
YWdHUFIoKSwgb3AyLnRhZ0dQUigpKTsKKyAgICBtX2ppdC5jb21wYXJlMzIoSklUQ29tcGlsZXI6
OkVxdWFsLCBvcDEucGF5bG9hZEdQUigpLCBvcDIucGF5bG9hZEdQUigpLCByZXN1bHQuZ3ByKCkp
OworICAgIG5vdEVxdWFsLmxpbmsoJm1faml0KTsKKyAgICBib29sZWFuUmVzdWx0KHJlc3VsdC5n
cHIoKSwgbm9kZSk7Cit9CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5v
ZGUpCiB7CiAgICAgaWYgKG5vZGUtPm9wKCkgIT0gQ2FsbCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTY0
OTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjQ4LDYgKzY0OCwyMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpub25TcGVjdWxhdGl2ZU5vblBlCiAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG1fY3Vy
cmVudE5vZGUsIERhdGFGb3JtYXRKU0Jvb2xlYW4sIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRs
eSk7CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNaXNjU3RyaWN0RXEoTm9kZSog
bm9kZSkKK3sKKyAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCksIE1h
bnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisgICAgSlNWYWx1ZU9wZXJhbmQgb3AyKHRoaXMsIG5v
ZGUtPmNoaWxkMigpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgIEdQUlRlbXBvcmFy
eSByZXN1bHQodGhpcyk7CisgICAgCisgICAgc3BlY3VsYXRlTWlzYyhub2RlLT5jaGlsZDEoKSwg
b3AxLmpzVmFsdWVSZWdzKCkpOworICAgIHNwZWN1bGF0ZU1pc2Mobm9kZS0+Y2hpbGQyKCksIG9w
Mi5qc1ZhbHVlUmVncygpKTsKKyAgICAKKyAgICBtX2ppdC5jb21wYXJlMzIoSklUQ29tcGlsZXI6
OkVxdWFsLCBvcDEuZ3ByKCksIG9wMi5ncHIoKSwgcmVzdWx0LmdwcigpKTsKKyAgICBtX2ppdC5v
cjMyKFRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0LmdwcigpKTsKKyAgICBqc1ZhbHVl
UmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSwgRGF0YUZvcm1hdEpTQm9vbGVhbik7Cit9CisKIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKG5vZGUt
Pm9wKCkgIT0gQ2FsbCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxNjQ5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgwMiw2
ICszODAyLDExIEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJpY3RFcShOb2QKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAgICAgCisgICAgY2FzZSBNaXNjVXNlOiB7
CisgICAgICAgIGNvbXBpbGVNaXNjU3RyaWN0RXEobm9kZSk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2UgVW50eXBlZFVzZTogewogICAgICAgICByZXR1
cm4gbm9uU3BlY3VsYXRpdmVTdHJpY3RFcShub2RlKTsKICAgICB9CkBAIC00ODMwLDYgKzQ4MzUs
MzEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlT3RoZXIoRWRnZQogI2VuZGlmICAg
IAogfQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVNaXNjKEVkZ2UgZWRnZSwgSlNW
YWx1ZVJlZ3MgcmVncykKK3sKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIHR5cGVDaGVjaygKKyAg
ICAgICAgcmVncywgZWRnZSwgU3BlY01pc2MsCisgICAgICAgIG1faml0LmJyYW5jaDY0KE1hY3Jv
QXNzZW1ibGVyOjpBYm92ZSwgcmVncy5ncHIoKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02
NChUYWdCaXRUeXBlT3RoZXIgfCBUYWdCaXRCb29sIHwgVGFnQml0VW5kZWZpbmVkKSkpOworI2Vs
c2UKKyAgICB0eXBlQ2hlY2soCisgICAgICAgIHJlZ3MsIGVkZ2UsIFNwZWNNaXNjIHwgU3BlY0lu
dDMyLAorICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHJlZ3Mu
dGFnR1BSKCksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcp
KSk7CisgICAgdHlwZUNoZWNrKAorICAgICAgICByZWdzLCBlZGdlLCBTcGVjTWlzYywKKyAgICAg
ICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCByZWdzLnRhZ0dQUigpLCBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OlVuZGVmaW5lZFRhZykpKTsKKyNl
bmRpZgorfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVNaXNjKEVkZ2UgZWRnZSkK
K3sKKyAgICBpZiAoIW5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNNaXNjKSkKKyAgICAgICAgcmV0
dXJuOworICAgIAorICAgIEpTVmFsdWVPcGVyYW5kIG9wZXJhbmQodGhpcywgZWRnZSwgTWFudWFs
T3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAgICBzcGVjdWxhdGVNaXNjKGVkZ2UsIG9wZXJhbmQuanNW
YWx1ZVJlZ3MoKSk7Cit9CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZShOb2RlKiwg
RWRnZSBlZGdlKQogewogICAgIHN3aXRjaCAoZWRnZS51c2VLaW5kKCkpIHsKQEAgLTQ4OTIsNiAr
NDkyMiw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZShOb2RlKiwgRWQKICAgICBj
YXNlIE90aGVyVXNlOgogICAgICAgICBzcGVjdWxhdGVPdGhlcihlZGdlKTsKICAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBNaXNjVXNlOgorICAgICAgICBzcGVjdWxhdGVNaXNjKGVkZ2UpOworICAg
ICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDE2NDkzNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMTk4
NSw2ICsxOTg1LDcgQEAgcHVibGljOgogICAgIHZvaWQgY29tcGlsZVN0cmluZ0VxdWFsaXR5KE5v
ZGUqKTsKICAgICB2b2lkIGNvbXBpbGVTdHJpbmdJZGVudEVxdWFsaXR5KE5vZGUqKTsKICAgICB2
b2lkIGNvbXBpbGVTdHJpbmdaZXJvTGVuZ3RoKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVNaXNj
U3RyaWN0RXEoTm9kZSopOwogCiAgICAgdm9pZCBlbWl0T2JqZWN0T3JPdGhlckJyYW5jaChFZGdl
IHZhbHVlLCBCYXNpY0Jsb2NrKiB0YWtlbiwgQmFzaWNCbG9jayogbm90VGFrZW4pOwogICAgIHZv
aWQgZW1pdEJyYW5jaChOb2RlKik7CkBAIC0yMjAzLDYgKzIyMDQsOCBAQCBwdWJsaWM6CiAgICAg
dm9pZCBzcGVjdWxhdGVTdHJpbmdPclN0cmluZ09iamVjdChFZGdlKTsKICAgICB2b2lkIHNwZWN1
bGF0ZU5vdENlbGwoRWRnZSk7CiAgICAgdm9pZCBzcGVjdWxhdGVPdGhlcihFZGdlKTsKKyAgICB2
b2lkIHNwZWN1bGF0ZU1pc2MoRWRnZSwgSlNWYWx1ZVJlZ3MpOyAvLyBSZXR1cm5zIHRvIHlvdSB0
aGUgR1BSUmVnIHRoYXQgeW91IGNhbiB1c2UgZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLgorICAg
IHZvaWQgc3BlY3VsYXRlTWlzYyhFZGdlKTsKICAgICB2b2lkIHNwZWN1bGF0ZShOb2RlKiwgRWRn
ZSk7CiAgICAgCiAgICAgSklUQ29tcGlsZXI6Okp1bXAganVtcFNsb3dGb3JVbndhbnRlZEFycmF5
TW9kZShHUFJSZWcgdGVtcFdpdGhJbmRleGluZ1R5cGVSZWcsIEFycmF5TW9kZSwgSW5kZXhpbmdU
eXBlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmNwcAkocmV2
aXNpb24gMTY0OTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtOTcsNiArOTcsOSBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRT
dHJlYW0mIG91dCwgVXNlCiAgICAgY2FzZSBPdGhlclVzZToKICAgICAgICAgb3V0LnByaW50KCJP
dGhlciIpOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIE1pc2NVc2U6CisgICAgICAgIG91dC5w
cmludCgiTWlzYyIpOworICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5oCShyZXZpc2lvbiAxNjQ5MzYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTQsNiArNTQs
NyBAQCBlbnVtIFVzZUtpbmQgewogICAgIFN0cmluZ09yU3RyaW5nT2JqZWN0VXNlLAogICAgIE5v
dENlbGxVc2UsCiAgICAgT3RoZXJVc2UsCisgICAgTWlzY1VzZSwKICAgICBMYXN0VXNlS2luZCAv
LyBNdXN0IGFsd2F5cyBiZSB0aGUgbGFzdCBlbnRyeSBpbiB0aGUgZW51bSwgYXMgaXQgaXMgdXNl
ZCB0byBkZW5vdGUgdGhlIG51bWJlciBvZiBlbnVtIGVsZW1lbnRzLgogfTsKIApAQCAtOTYsNiAr
OTcsOCBAQCBBTFdBWVNfSU5MSU5FIFNwZWN1bGF0ZWRUeXBlIHR5cGVGaWx0ZXJGCiAgICAgICAg
IHJldHVybiB+U3BlY0NlbGw7CiAgICAgY2FzZSBPdGhlclVzZToKICAgICAgICAgcmV0dXJuIFNw
ZWNPdGhlcjsKKyAgICBjYXNlIE1pc2NVc2U6CisgICAgICAgIHJldHVybiBTcGVjTWlzYzsKICAg
ICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
ICByZXR1cm4gU3BlY0Z1bGxUb3A7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxNjQ5MzYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MSw2
ICsxNDEsOSBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoTm9kZSogCiAgICAg
Y2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OgogICAgIGNhc2UgVG9QcmltaXRpdmU6CiAgICAgY2FzZSBQ
aGFudG9tQXJndW1lbnRzOgorICAgIGNhc2UgVGhyb3c6CisgICAgY2FzZSBUaHJvd1JlZmVyZW5j
ZUVycm9yOgorICAgIGNhc2UgVW5yZWFjaGFibGU6CiAgICAgICAgIC8vIFRoZXNlIGFyZSBPSy4K
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBQdXRCeUlkRGlyZWN0OgpAQCAtMjMyLDYgKzIzNSw4
IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiAKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBpZiAobm9kZS0+aXNCaW5hcnlVc2VLaW5kKFVudHlwZWRVc2UpKQog
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmIChub2RlLT5pc0JpbmFyeVVzZUtpbmQoQm9v
bGVhblVzZSkpCisgICAgICAgICAgICBicmVhazsKICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgp
LnVzZUtpbmQoKSA9PSBPYmplY3RVc2UKICAgICAgICAgICAgICYmIG5vZGUtPmNoaWxkMigpLnVz
ZUtpbmQoKSA9PSBPYmplY3RPck90aGVyVXNlKQogICAgICAgICAgICAgYnJlYWs7CkBAIC0yNDgs
NiArMjUzLDEwIEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiAKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBpZiAobm9kZS0+aXNCaW5hcnlVc2VLaW5kKE9iamVj
dFVzZSkpCiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKG5vZGUtPmlzQmluYXJ5VXNl
S2luZChNaXNjVXNlKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAobm9kZS0+aXNC
aW5hcnlVc2VLaW5kKEJvb2xlYW5Vc2UpKQorICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIHJl
dHVybiBDYW5ub3RDb21waWxlOwogICAgIGNhc2UgQ29tcGFyZUxlc3M6CiAgICAgY2FzZSBDb21w
YXJlTGVzc0VxOgpAQCAtMzM4LDYgKzM0Nyw3IEBAIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxl
KEdyYXBoJiBncmFwaCkKICAgICAgICAgICAgICAgICBjYXNlIFN0cmluZ09yU3RyaW5nT2JqZWN0
VXNlOgogICAgICAgICAgICAgICAgIGNhc2UgRmluYWxPYmplY3RVc2U6CiAgICAgICAgICAgICAg
ICAgY2FzZSBOb3RDZWxsVXNlOgorICAgICAgICAgICAgICAgIGNhc2UgTWlzY1VzZToKICAgICAg
ICAgICAgICAgICAgICAgLy8gVGhlc2UgYXJlIE9LLgogICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICBkZWZhdWx0OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE2NDkzNikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01NTYsNiArNTU2LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgRm9yY2VPU1JF
eGl0OgogICAgICAgICAgICAgY29tcGlsZUZvcmNlT1NSRXhpdCgpOwogICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgVGhyb3c6CisgICAgICAgIGNhc2UgVGhyb3dSZWZlcmVuY2VFcnJv
cjoKKyAgICAgICAgICAgIGNvbXBpbGVUaHJvdygpOworICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgSW52YWxpZGF0aW9uUG9pbnQ6CiAgICAgICAgICAgICBjb21waWxlSW52YWxpZGF0
aW9uUG9pbnQoKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNTg5LDYgKzU5Myw5IEBAIHByaXZh
dGU6CiAgICAgICAgIGNhc2UgVHlwZWRBcnJheVdhdGNocG9pbnQ6CiAgICAgICAgIGNhc2UgQWxs
b2NhdGlvblByb2ZpbGVXYXRjaHBvaW50OgogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgVW5yZWFjaGFibGU6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0zMzI5LDcg
KzMzMzYsOCBAQCBwcml2YXRlOgogICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQo
SW50MzJVc2UpCiAgICAgICAgICAgICB8fCBtX25vZGUtPmlzQmluYXJ5VXNlS2luZChNYWNoaW5l
SW50VXNlKQogICAgICAgICAgICAgfHwgbV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoTnVtYmVyVXNl
KQotICAgICAgICAgICAgfHwgbV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoT2JqZWN0VXNlKSkgewor
ICAgICAgICAgICAgfHwgbV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoT2JqZWN0VXNlKQorICAgICAg
ICAgICAgfHwgbV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoQm9vbGVhblVzZSkpIHsKICAgICAgICAg
ICAgIGNvbXBpbGVDb21wYXJlU3RyaWN0RXEoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQpAQCAtMzM5Miw2ICszNDAwLDIxIEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KICAgICAgICAgCisgICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNlS2lu
ZChCb29sZWFuVXNlKSkgeworICAgICAgICAgICAgc2V0Qm9vbGVhbigKKyAgICAgICAgICAgICAg
ICBtX291dC5lcXVhbChsb3dCb29sZWFuKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dCb29sZWFuKG1f
bm9kZS0+Y2hpbGQyKCkpKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChNaXNjVXNlKSkgeworICAg
ICAgICAgICAgTFZhbHVlIGxlZnQgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCksIE1hbnVh
bE9wZXJhbmRTcGVjdWxhdGlvbik7CisgICAgICAgICAgICBMVmFsdWUgcmlnaHQgPSBsb3dKU1Zh
bHVlKG1fbm9kZS0+Y2hpbGQyKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisgICAgICAg
ICAgICBGVExfVFlQRV9DSEVDSyhqc1ZhbHVlVmFsdWUobGVmdCksIG1fbm9kZS0+Y2hpbGQxKCks
IFNwZWNNaXNjLCBpc05vdE1pc2MobGVmdCkpOworICAgICAgICAgICAgRlRMX1RZUEVfQ0hFQ0so
anNWYWx1ZVZhbHVlKHJpZ2h0KSwgbV9ub2RlLT5jaGlsZDIoKSwgU3BlY01pc2MsIGlzTm90TWlz
YyhyaWdodCkpOworICAgICAgICAgICAgc2V0Qm9vbGVhbihtX291dC5lcXVhbChsZWZ0LCByaWdo
dCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KICAgICAKQEAgLTM2NTgsNiArMzY4
MSwxMSBAQCBwcml2YXRlOgogICAgICAgICB0ZXJtaW5hdGUoSW5hZGVxdWF0ZUNvdmVyYWdlKTsK
ICAgICB9CiAgICAgCisgICAgdm9pZCBjb21waWxlVGhyb3coKQorICAgIHsKKyAgICAgICAgdGVy
bWluYXRlKFVuY291bnRhYmxlKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBjb21waWxlSW52YWxp
ZGF0aW9uUG9pbnQoKQogICAgIHsKICAgICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJs
ZWQoKSkKQEAgLTQ5MTgsNiArNDk0NiwxNiBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gbV9v
dXQudGVzdElzWmVybzY0KGpzVmFsdWUsIG1fdGFnTWFzayk7CiAgICAgfQogICAgIAorICAgIExW
YWx1ZSBpc05vdE1pc2MoTFZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb3V0
LmFib3ZlKHZhbHVlLCBtX291dC5jb25zdEludDY0KFRhZ0JpdFR5cGVPdGhlciB8IFRhZ0JpdEJv
b2wgfCBUYWdCaXRVbmRlZmluZWQpKTsKKyAgICB9CisgICAgCisgICAgTFZhbHVlIGlzTWlzYyhM
VmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gbV9vdXQuYml0Tm90KGlzTm90TWlz
Yyh2YWx1ZSkpOworICAgIH0KKyAgICAKICAgICBMVmFsdWUgaXNOb3RCb29sZWFuKExWYWx1ZSBq
c1ZhbHVlKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fb3V0LnRlc3ROb25aZXJvNjQoCkBAIC01
MDAxLDYgKzUwMzksOSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIE5vdENlbGxVc2U6CiAgICAg
ICAgICAgICBzcGVjdWxhdGVOb3RDZWxsKGVkZ2UpOwogICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgTWlzY1VzZToKKyAgICAgICAgICAgIHNwZWN1bGF0ZU1pc2MoZWRnZSk7CisgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGRhdGFMb2coIlVu
c3VwcG9ydGVkIHNwZWN1bGF0aW9uIHVzZSBraW5kOiAiLCBlZGdlLnVzZUtpbmQoKSwgIlxuIik7
CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtNTI3OCw2ICs1
MzE5LDE1IEBAIHByaXZhdGU6CiAgICAgICAgIHR5cGVDaGVjayhqc1ZhbHVlVmFsdWUodmFsdWUp
LCBlZGdlLCB+U3BlY0NlbGwsIGlzQ2VsbCh2YWx1ZSkpOwogICAgIH0KICAgICAKKyAgICB2b2lk
IHNwZWN1bGF0ZU1pc2MoRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2ludGVycHJl
dGVyLm5lZWRzVHlwZUNoZWNrKGVkZ2UpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAK
KyAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShlZGdlKTsKKyAgICAgICAgdHlwZUNo
ZWNrKGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2UsIFNwZWNNaXNjLCBpc05vdE1pc2ModmFsdWUp
KTsKKyAgICB9CisgICAgCiAgICAgYm9vbCBtYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2lu
dElzU3RpbGxWYWxpZCgpCiAgICAgewogICAgICAgICByZXR1cm4gbV9ncmFwaC5tYXNxdWVyYWRl
c0FzVW5kZWZpbmVkV2F0Y2hwb2ludElzU3RpbGxWYWxpZChtX25vZGUtPm9yaWdpbi5zZW1hbnRp
Yyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2Zsb2F0MzItYXJy
YXktb3V0LW9mLWJvdW5kcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
dGVzdHMvc3RyZXNzL2Zsb2F0MzItYXJyYXktb3V0LW9mLWJvdW5kcy5qcwkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZmxvYXQzMi1hcnJheS1vdXQt
b2YtYm91bmRzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjMgQEAKK2Z1bmN0aW9uIGZv
byhhKSB7CisgICAgcmV0dXJuIGFbNDJdOworfQorCitub0lubGluZShmb28pOworCit2YXIgc2hv
cnRBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoMTApOwordmFyIGxvbmdBcnJheSA9IG5ldyBGbG9h
dDMyQXJyYXkoMTAwKTsKKworZnVuY3Rpb24gdGVzdChhcnJheSwgZXhwZWN0ZWQpIHsKKyAgICB2
YXIgcmVzdWx0ID0gZm9vKGFycmF5KTsKKyAgICBpZiAocmVzdWx0ICE9IGV4cGVjdGVkKQorICAg
ICAgICB0aHJvdyBuZXcgRXJyb3IoImJhZCByZXN1bHQ6ICIgKyByZXN1bHQpOworfQorCitmb3Ig
KHZhciBpID0gMDsgaSA8IDEwMDA7ICsraSkKKyAgICB0ZXN0KHNob3J0QXJyYXksIHZvaWQgMCk7
CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwOyArK2kpCisgICAgdGVzdChsb25nQXJyYXks
IDApOworCit0ZXN0KHNob3J0QXJyYXksIHZvaWQgMCk7CisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS90ZXN0cy9zdHJlc3Mvd2VpcmQtZXF1YWxpdHktZm9sZGluZy1jYXNlcy5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3dlaXJkLWVxdWFs
aXR5LWZvbGRpbmctY2FzZXMuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvdGVzdHMvc3RyZXNzL3dlaXJkLWVxdWFsaXR5LWZvbGRpbmctY2FzZXMuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMyBAQAorZnVuY3Rpb24gdGVzdChhY3R1YWxGdW5jdGlvbiwgZXhw
ZWN0ZWQpIHsKKyAgICB2YXIgYWN0dWFsID0gYWN0dWFsRnVuY3Rpb24oKTsKKyAgICBpZiAoYWN0
dWFsICE9IGV4cGVjdGVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImJhZCBpbiAiICsgYWN0
dWFsRnVuY3Rpb24gKyAiIHJlc3VsdDogIiArIGFjdHVhbCk7Cit9CisKK25vSW5saW5lKHRlc3Qp
OworCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICB0ZXN0KGZ1bmN0aW9u
KCkgeyByZXR1cm4gIjUiID09IDU7IH0sIHRydWUpOworICAgIHRlc3QoZnVuY3Rpb24oKSB7IHJl
dHVybiAoe3ZhbHVlT2Y6ZnVuY3Rpb24oKXtyZXR1cm4gNDI7fX0pID09IDQyOyB9LCB0cnVlKTsK
KyAgICB0ZXN0KGZ1bmN0aW9uKCkgeyByZXR1cm4gKHt2YWx1ZU9mOmZ1bmN0aW9uKCl7cmV0dXJu
IDQyO319KSA9PSAoe3ZhbHVlT2Y6ZnVuY3Rpb24oKXtyZXR1cm4gNDI7fX0pIH0sIGZhbHNlKTsK
K30KSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2NDkzNikKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDE0LTAzLTAxICBGaWxpcCBQaXpsbyAg
PGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgREZHIGFuZCBGVEwgc2hvdWxkIHNwZWNpYWxp
emUgZm9yIGFuZCBzdXBwb3J0IENvbXBhcmVTdHJpY3RFcSBvdmVyIE1pc2MgKGkuZS4gYm9vbGVh
biwgdW5kZWZpbmVkLCBvciBudWxsKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTI5NTYzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBqcy9yZWdyZXNzL2ZvbGQtc3RyaWN0LWVxLWV4cGVjdGVkLnR4dDog
QWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9mb2xkLXN0cmljdC1lcS5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiBqcy9yZWdyZXNzL21pc2Mtc3RyaWN0LWVxLWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICoganMvcmVncmVzcy9taXNjLXN0cmljdC1lcS5odG1sOiBBZGRlZC4KKyAgICAg
ICAgKiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9mb2xkLXN0cmljdC1lcS5qczogQWRkZWQuCisg
ICAgICAgIChmb28pOgorICAgICAgICAodGVzdCk6CisgICAgICAgICoganMvcmVncmVzcy9zY3Jp
cHQtdGVzdHMvbWlzYy1zdHJpY3QtZXEuanM6IEFkZGVkLgorCiAyMDE0LTAzLTAxICBDb21taXQg
UXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCBy
b2xsaW5nIG91dCByMTY0OTI5IGFuZCByMTY0OTM0LgpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVn
cmVzcy9mb2xkLXN0cmljdC1lcS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvanMvcmVncmVzcy9mb2xkLXN0cmljdC1lcS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2ZvbGQtc3RyaWN0LWVxLWV4cGVjdGVkLnR4dAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3MvZm9sZC1zdHJpY3QtZXEKKwor
T24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9s
bG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgor
UEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6
IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZm9sZC1zdHJpY3QtZXEuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2ZvbGQtc3RyaWN0LWVxLmh0bWwJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2ZvbGQtc3RyaWN0LWVxLmh0bWwJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9E
VEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJj
ZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNy
Yz0icmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3Jp
cHQtdGVzdHMvZm9sZC1zdHJpY3QtZXEuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291
cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291
cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDog
TGF5b3V0VGVzdHMvanMvcmVncmVzcy9taXNjLXN0cmljdC1lcS1leHBlY3RlZC50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9taXNjLXN0cmljdC1lcS1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL21pc2Mtc3RyaWN0LWVx
LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3Mv
bWlzYy1zdHJpY3QtZXEKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQ
QVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8g
ZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNU
IENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvbWlzYy1zdHJpY3QtZXEu
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL21pc2Mtc3RyaWN0LWVx
Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL21pc2Mtc3RyaWN0
LWVxLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwg
UFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQg
c3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgor
PGJvZHk+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvbWlzYy1zdHJpY3QtZXEuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9InJlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5
PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZm9s
ZC1zdHJpY3QtZXEuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3Jp
cHQtdGVzdHMvZm9sZC1zdHJpY3QtZXEuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9q
cy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9mb2xkLXN0cmljdC1lcS5qcwkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDE2IEBACitmdW5jdGlvbiBmb28oYSwgYikgeworICAgIHJldHVybiBhID09PSBi
OworfQorCitmdW5jdGlvbiB0ZXN0KGFjdHVhbCwgZXhwZWN0ZWQpIHsKKyAgICBpZiAoYWN0dWFs
ICE9PSBleHBlY3RlZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJiYWQgcmVzdWx0OiAiICsg
YWN0dWFsKTsKK30KKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDAwMDsgKytpKSB7CisgICAg
dGVzdChmb28odHJ1ZSwgbnVsbCksIGZhbHNlKTsKKyAgICB0ZXN0KGZvbyh0cnVlLCBmYWxzZSks
IGZhbHNlKTsKKyAgICB0ZXN0KGZvbyh0cnVlLCB0cnVlKSwgdHJ1ZSk7CisgICAgdGVzdChmb28o
NSwgImhlbGxvIiksIGZhbHNlKTsKKyAgICB0ZXN0KGZvbyh2b2lkIDAsIG5ldyBPYmplY3QoKSks
IGZhbHNlKTsKK30KSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL21p
c2Mtc3RyaWN0LWVxLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2Ny
aXB0LXRlc3RzL21pc2Mtc3RyaWN0LWVxLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
anMvcmVncmVzcy9zY3JpcHQtdGVzdHMvbWlzYy1zdHJpY3QtZXEuanMJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxMyBAQAorKGZ1bmN0aW9uKCkgeworICAgIHZhciBhcnJheSA9IFt0cnVlLCBm
YWxzZSwgbnVsbCwgdm9pZCAwXTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDA7ICsr
aSkgeworICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGFycmF5Lmxlbmd0aDsgKytqKSB7Cisg
ICAgICAgICAgICBmb3IgKHZhciBrID0gaiA7IGsgPCBhcnJheS5sZW5ndGg7ICsraykgeworICAg
ICAgICAgICAgICAgIHZhciBhY3R1YWwgPSBhcnJheVtqXSA9PT0gYXJyYXlba107CisgICAgICAg
ICAgICAgICAgdmFyIGV4cGVjdGVkID0gaiA9PSBrOworICAgICAgICAgICAgICAgIGlmIChhY3R1
YWwgIT0gZXhwZWN0ZWQpCisgICAgICAgICAgICAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJl
c3VsdCBmb3IgaiA9ICIgKyBqICsgIiwgayA9ICIgKyBrOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorfSkoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>225596</attachid>
            <date>2014-03-02 08:24:04 -0800</date>
            <delta_ts>2014-03-03 13:00:16 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>34203</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY0OTM2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc2IEBA
CisyMDE0LTAzLTAxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIGFuZCBGVEwgc2hvdWxkIHNwZWNpYWxpemUgZm9yIGFuZCBzdXBwb3J0IENvbXBhcmVTdHJp
Y3RFcSBvdmVyIE1pc2MgKGkuZS4gYm9vbGVhbiwgdW5kZWZpbmVkLCBvciBudWxsKQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI5NTYzCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGFk
ZHMgYSBzcGVjaWFsaXphdGlvbiBvZiBDb21wYXJlU3RyaWN0RXEgb3ZlciBNaXNjLiBJIG5vdGlj
ZWQgdGhlIG5lZWQgZm9yIHRoaXMKKyAgICAgICAgd2hlbiBJIHNhdyB0aGF0IHdlIGRpZG4ndCBz
dXBwb3J0IENvbXBhcmVTdHJpY3RFcShVbnR5cGVkKSBpbiBGVEwgYnV0IHRoYXQgdGhlIG1haW4K
KyAgICAgICAgdXNlciBvZiB0aGlzIHdhcyBFYXJsZXlCb3llciwgYW5kIGluIHRoYXQgYmVuY2ht
YXJrIHdoYXQgaXQgd2FzIHJlYWxseSBkb2luZyB3YXMKKyAgICAgICAgY29tcGFyaW5nIHVuZGVm
aW5lZCwgbnVsbCwgYW5kIGJvb2xlYW5zIHRvIGVhY2ggb3RoZXIuCisgICAgICAgIAorICAgICAg
ICBUaGlzIGFsc28gYWRkcyBzdXBwb3J0IGZvciBtaXNjZWxsYW5lb3VzIHRoaW5ncyB0aGF0IEkg
bmVlZGVkIHRvIG1ha2UgbXkgdmFyaW91cyB0ZXN0CisgICAgICAgIGNhc2VzIHdvcmsuIFRoaXMg
aW5jbHVkZXMgY29tcGFyaXNvbiBvdmVyIGJvb2xlYW5zIGFuZCB0aGUgdmFyaW91cyBUaHJvdy1y
ZWxhdGVkIG5vZGUKKyAgICAgICAgdHlwZXMuCisgICAgICAgIAorICAgICAgICBUaGlzIGFsc28g
aW1wcm92ZXMgY29uc3RhbnQgZm9sZGluZyBvZiBDb21wYXJlU3RyaWN0RXEgYW5kIENvbXBhcmVF
cS4KKyAgICAgICAgCisgICAgICAgIEFsc28gZm91bmQgYSBidWcgd2hlcmUgd2Ugd2VyZSBjbGFp
bWluZyB0aGF0IEdldEJ5VmFscyBvbiB0eXBlZCBhcnJheXMgYXJlIE91dE9mQm91bmRzCisgICAg
ICAgIGJhc2VkIG9uIHByb2ZpbGluZywgd2hpY2ggY2F1c2VkIHNvbWUgZG93bnN0cmVhbSBiYWRu
ZXNzLiBXZSBkb24ndCBhY3R1YWxseSBzdXBwb3J0CisgICAgICAgIGNvbXBpbGluZyBPdXRPZkJv
dW5kcyBHZXRCeVZhbHMgb24gdHlwZWQgYXJyYXlzLiBUaGUgREZHIHdvdWxkIGlnbm9yZSB0aGUg
ZmxhZyBhbmQganVzdAorICAgICAgICBlbWl0IGEgYm91bmRzIGNoZWNrLCBidXQgaW4gdGhlIEZU
TCBwYXRoLCB0aGUgU1NBIGxvd2VyaW5nIHBoYXNlIHdvdWxkIGFzc3VtZSB0aGF0IGl0CisgICAg
ICAgIHNob3VsZG4ndCBmYWN0b3Igb3V0IHRoZSBib3VuZHMgY2hlY2sgc2luY2UgdGhlIGFjY2Vz
cyBpcyBub3QgSW5Cb3VuZHMgYnV0IHRoZW4gdGhlCisgICAgICAgIGJhY2tlbmQgd291bGQgaWdu
b3JlIHRoZSBmbGFnIGFuZCBhc3N1bWUgdGhhdCB0aGUgYm91bmRzIGNoZWNrIHdhcyBhbHJlYWR5
IGVtaXR0ZWQuCisgICAgICAgIFRoaXMgc2hvd2VkIHVwIG9uIGFuIGV4aXN0aW5nIHRlc3QgYnV0
IEkgYWRkZWQgYSB0ZXN0IGZvciB0aGlzIGV4cGxpY2l0bHkgdG8gaGF2ZSBtb3JlCisgICAgICAg
IGNlcnRhaW4gY292ZXJhZ2UuIFRoZSBmaXggaXMgdG8gbm90IG1hcmsgc29tZXRoaW5nIGFzIE91
dE9mQm91bmRzIGlmIHRoZSBzZW1hbnRpY3MgYXJlCisgICAgICAgIHRoYXQgd2UnbGwgaGF2ZSBh
IGJvdW5kcyBjaGVjayBhbnl3YXkuCisgICAgICAgIAorICAgICAgICBUaGlzIGlzIGEgMSUgc3Bl
ZWQtdXAgb24gT2N0YW5lIG1vc3RseSBiZWNhdXNlIG9mIHJheXRyYWNlLCBidXQgYWxzbyBiZWNh
dXNlIG9mIGp1c3QKKyAgICAgICAgZ2VuZXJhbCBwcm9ncmVzc2lvbnMgYWNyb3NzIHRoZSBib2Fy
ZC4gTm8gc3BlZWQtdXAgeWV0IG9uIEVhcmxleUJveWVyLCBzaW5jZSB0aGVyZSBpcworICAgICAg
ICBzdGlsbCBhIGxvdCBtb3JlIGNvdmVyYWdlIHdvcmsgdG8gYmUgZG9uZSB0aGVyZS4KKworICAg
ICAgICAqIGJ5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNwcDoKKyAgICAgICAgKEpTQzo6c3BlY3Vs
YXRpb25Ub0FiYnJldmlhdGVkU3RyaW5nKToKKyAgICAgICAgKEpTQzo6bGVhc3RVcHBlckJvdW5k
T2ZTdHJpY3RseUVxdWl2YWxlbnRTcGVjdWxhdGlvbnMpOgorICAgICAgICAoSlNDOjpzcGVjdWxh
dGlvbnNDb3VsZEJlRXF1YWwpOgorICAgICAgICAqIGJ5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmg6
CisgICAgICAgIChKU0M6OmlzTWlzY1NwZWN1bGF0aW9uKToKKyAgICAgICAgKiBkZmcvREZHQWJz
dHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdElu
dGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAq
IGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpm
aXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6
Tm9kZTo6c2hvdWxkU3BlY3VsYXRlTWlzYyk6CisgICAgICAgICogZGZnL0RGR1NhZmVUb0V4ZWN1
dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTYWZlVG9FeGVjdXRlRWRnZTo6b3BlcmF0b3IoKSk6
CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmljdEVxKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlTWlzYyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OnNwZWN1bGF0ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6
CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTWlzY1N0cmljdEVxKToKKyAgICAgICAgKiBk
ZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVNaXNjU3RyaWN0RXEpOgorICAgICAgICAqIGRmZy9ERkdVc2VLaW5kLmNw
cDoKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogZGZnL0RGR1VzZUtp
bmQuaDoKKyAgICAgICAgKEpTQzo6REZHOjp0eXBlRmlsdGVyRm9yKToKKyAgICAgICAgKiBmdGwv
RlRMQ2FwYWJpbGl0aWVzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjYW5Db21waWxlKToKKyAg
ICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwOgorICAgICAgICAoSlNDOjpGVEw6Okxv
d2VyREZHVG9MTFZNOjpjb21waWxlTm9kZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdU
b0xMVk06OmNvbXBpbGVDb21wYXJlRXEpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9M
TFZNOjpjb21waWxlQ29tcGFyZVN0cmljdEVxKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRG
R1RvTExWTTo6Y29tcGlsZVRocm93KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExW
TTo6aXNOb3RNaXNjKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6aXNNaXNj
KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6c3BlY3VsYXRlKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6c3BlY3VsYXRlTWlzYyk6CisgICAgICAgICog
dGVzdHMvc3RyZXNzL2Zsb2F0MzItYXJyYXktb3V0LW9mLWJvdW5kcy5qczogQWRkZWQuCisgICAg
ICAgICogdGVzdHMvc3RyZXNzL3dlaXJkLWVxdWFsaXR5LWZvbGRpbmctY2FzZXMuanM6IEFkZGVk
LgorCiAyMDE0LTAzLTAxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAg
ICAgVGhpcyBzaG91bGRuJ3QgaGF2ZSBiZWVuIGEgbGF5b3V0IHRlc3Qgc2luY2UgaXQgcnVucyBv
bmx5IHVuZGVyIGpzYy4gTW92aW5nIGl0IHRvIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwCShyZXZpc2lvbiAxNjQ5MzYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNTUsNiArMjU1LDggQEAgc3RhdGljIGNvbnN0IGNoYXIqIHNwZWN1
bGF0aW9uVG9BYmJyZXZpYQogICAgICAgICByZXR1cm4gIjxCb29sZWFuPiI7CiAgICAgaWYgKGlz
T3RoZXJTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkKICAgICAgICAgcmV0dXJuICI8T3RoZXI+IjsK
KyAgICBpZiAoaXNNaXNjU3BlY3VsYXRpb24ocHJlZGljdGlvbikpCisgICAgICAgIHJldHVybiAi
PE1pc2M+IjsKICAgICByZXR1cm4gIiI7CiB9CiAKQEAgLTM5MSw1ICszOTMsNDAgQEAgVHlwZWRB
cnJheVR5cGUgdHlwZWRBcnJheVR5cGVGcm9tU3BlY3VsYQogICAgIHJldHVybiBOb3RUeXBlZEFy
cmF5OwogfQogCitTcGVjdWxhdGVkVHlwZSBsZWFzdFVwcGVyQm91bmRPZlN0cmljdGx5RXF1aXZh
bGVudFNwZWN1bGF0aW9ucyhTcGVjdWxhdGVkVHlwZSB0eXBlKQoreworICAgIGlmICh0eXBlICYg
U3BlY0ludGVnZXIpCisgICAgICAgIHR5cGUgfD0gU3BlY0ludGVnZXI7CisgICAgaWYgKHR5cGUg
JiBTcGVjU3RyaW5nKQorICAgICAgICB0eXBlIHw9IFNwZWNTdHJpbmc7CisgICAgcmV0dXJuIHR5
cGU7Cit9CisKK2Jvb2wgc3BlY3VsYXRpb25zQ291bGRCZUVxdWFsKFNwZWN1bGF0ZWRUeXBlIGEs
IFNwZWN1bGF0ZWRUeXBlIGIpCit7CisgICAgYSA9IGxlYXN0VXBwZXJCb3VuZE9mU3RyaWN0bHlF
cXVpdmFsZW50U3BlY3VsYXRpb25zKGEpOworICAgIGIgPSBsZWFzdFVwcGVyQm91bmRPZlN0cmlj
dGx5RXF1aXZhbGVudFNwZWN1bGF0aW9ucyhiKTsKKyAgICAKKyAgICAvLyBBbnl0aGluZyBjb3Vs
ZCBiZSBlcXVhbCB0byBhIHN0cmluZy4KKyAgICBpZiAoYSAmIFNwZWNTdHJpbmcpCisgICAgICAg
IHJldHVybiB0cnVlOworICAgIGlmIChiICYgU3BlY1N0cmluZykKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgCisgICAgLy8gSWYgYm90aCBzaWRlcyBhcmUgZGVmaW5pdGVseSBvbmx5IG9iamVj
dHMsIHRoZW4gZXF1YWxpdHkgaXMgZmFpcmx5IHNhbmUuCisgICAgaWYgKGlzT2JqZWN0U3BlY3Vs
YXRpb24oYSkgJiYgaXNPYmplY3RTcGVjdWxhdGlvbihiKSkKKyAgICAgICAgcmV0dXJuICEhKGEg
JiBiKTsKKyAgICAKKyAgICAvLyBJZiBlaXRoZXIgc2lkZSBjb3VsZCBiZSBhbiBvYmplY3Qgb3Ig
bm90LCB0aGVuIHdlIGNvdWxkIGdvIGRvd24gc29tZSB3ZWlyZAorICAgIC8vIGVmZmVjdGZ1bCBw
YXRoLgorICAgIGlmIChhICYgU3BlY09iamVjdCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
aWYgKGIgJiBTcGVjT2JqZWN0KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICAvLyBO
ZWl0aGVyIHNpZGUgaXMgYW4gb2JqZWN0IG9yIHN0cmluZywgc28gdGhlIHdvcmxkIGlzIHJlbGF0
aXZlbHkgc2FuZS4KKyAgICByZXR1cm4gISEoYSAmIGIpOworfQorCiB9IC8vIG5hbWVzcGFjZSBK
U0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0
ZWRUeXBlLmgJKHJldmlzaW9uIDE2NDkzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9TcGVjdWxhdGVkVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw4IEBAIHN0
YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjRnVsbFJlYWwKIHN0YXRpYyBjb25zdCBTcGVj
dWxhdGVkVHlwZSBTcGVjQnl0ZWNvZGVOdW1iZXIgICAgID0gMHgwZTgwMDAwMDsgLy8gSXQncyBl
aXRoZXIgYW4gSW50MzIgb3IgYSBEb3VibGUuCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUg
U3BlY0Z1bGxOdW1iZXIgICAgICAgICA9IDB4MGY4MDAwMDA7IC8vIEl0J3MgZWl0aGVyIGFuIElu
dDMyLCBJbnQ1Miwgb3IgYSBEb3VibGUuCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3Bl
Y0Jvb2xlYW4gICAgICAgICAgICA9IDB4MTAwMDAwMDA7IC8vIEl0J3MgZGVmaW5pdGVseSBhIEJv
b2xlYW4uCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY090aGVyICAgICAgICAgICAg
ICA9IDB4MjAwMDAwMDA7IC8vIEl0J3MgZGVmaW5pdGVseSBub25lIG9mIHRoZSBhYm92ZS4KK3N0
YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjT3RoZXIgICAgICAgICAgICAgID0gMHgyMDAw
MDAwMDsgLy8gSXQncyBkZWZpbml0ZWx5IGVpdGhlciBOdWxsIG9yIFVuZGVmaW5lZC4KK3N0YXRp
YyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjTWlzYyAgICAgICAgICAgICAgID0gMHgzMDAwMDAw
MDsgLy8gSXQncyBkZWZpbml0ZWx5IGVpdGhlciBhIGJvb2xlYW4sIE51bGwsIG9yIFVuZGVmaW5l
ZC4KIHN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjSGVhcFRvcCAgICAgICAgICAgID0g
MHgzZWZmZmZmZjsgLy8gSXQgY2FuIGJlIGFueSBvZiB0aGUgYWJvdmUsIGV4Y2VwdCBmb3IgU3Bl
Y0ludDUyLgogc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNFbXB0eSAgICAgICAgICAg
ICAgPSAweDQwMDAwMDAwOyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gZW1wdHkgdmFsdWUgbWFya2Vy
Lgogc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNCeXRlY29kZVRvcCAgICAgICAgPSAw
eDdlZmZmZmZmOyAvLyBJdCBjYW4gYmUgYW55IG9mIHRoZSBhYm92ZSwgZXhjZXB0IGZvciBTcGVj
SW50NTIuCkBAIC0zMzUsNiArMzM2LDExIEBAIGlubGluZSBib29sIGlzT3RoZXJTcGVjdWxhdGlv
bihTcGVjdWxhdGUKICAgICByZXR1cm4gdmFsdWUgPT0gU3BlY090aGVyOwogfQogCitpbmxpbmUg
Ym9vbCBpc01pc2NTcGVjdWxhdGlvbihTcGVjdWxhdGVkVHlwZSB2YWx1ZSkKK3sKKyAgICByZXR1
cm4gISF2YWx1ZSAmJiAhKHZhbHVlICYgflNwZWNNaXNjKTsKK30KKwogaW5saW5lIGJvb2wgaXNP
dGhlck9yRW1wdHlTcGVjdWxhdGlvbihTcGVjdWxhdGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1
cm4gIXZhbHVlIHx8IHZhbHVlID09IFNwZWNPdGhlcjsKQEAgLTM4Miw2ICszODgsMTAgQEAgU3Bl
Y3VsYXRlZFR5cGUgc3BlY3VsYXRpb25Gcm9tVmFsdWUoSlNWYQogU3BlY3VsYXRlZFR5cGUgc3Bl
Y3VsYXRpb25Gcm9tVHlwZWRBcnJheVR5cGUoVHlwZWRBcnJheVR5cGUpOyAvLyBvbmx5IHZhbGlk
IGZvciB0eXBlZCB2aWV3cy4KIFR5cGVkQXJyYXlUeXBlIHR5cGVkQXJyYXlUeXBlRnJvbVNwZWN1
bGF0aW9uKFNwZWN1bGF0ZWRUeXBlKTsKIAorU3BlY3VsYXRlZFR5cGUgbGVhc3RVcHBlckJvdW5k
T2ZTdHJpY3RseUVxdWl2YWxlbnRTcGVjdWxhdGlvbnMoU3BlY3VsYXRlZFR5cGUpOworCitib29s
IHNwZWN1bGF0aW9uc0NvdWxkQmVFcXVhbChTcGVjdWxhdGVkVHlwZSwgU3BlY3VsYXRlZFR5cGUp
OworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIFNwZWN1bGF0ZWRUeXBlX2gKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGlu
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0
SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE2NDkzNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtOTE3LDggKzkxNyw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0
YXRlVHkKICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gQ29tcGFyZUVxQ29uc3RhbnQgfHwgbm9k
ZS0+b3AoKSA9PSBDb21wYXJlRXEpIHsKICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnRU
eXBlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlOwogICAgICAgICAgICAgU3BlY3Vs
YXRlZFR5cGUgcmlnaHRUeXBlID0gZm9yTm9kZShub2RlLT5jaGlsZDIoKSkubV90eXBlOwotICAg
ICAgICAgICAgaWYgKChpc0ludDMyU3BlY3VsYXRpb24obGVmdFR5cGUpICYmIGlzT3RoZXJTcGVj
dWxhdGlvbihyaWdodFR5cGUpKQotICAgICAgICAgICAgICAgIHx8IChpc090aGVyU3BlY3VsYXRp
b24obGVmdFR5cGUpICYmIGlzSW50MzJTcGVjdWxhdGlvbihyaWdodFR5cGUpKSkgeworICAgICAg
ICAgICAgaWYgKCFzcGVjdWxhdGlvbnNDb3VsZEJlRXF1YWwobGVmdFR5cGUsIHJpZ2h0VHlwZSkp
IHsKICAgICAgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4oZmFsc2UpKTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTk0MywxOSArOTQyLDI4
IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgSlNW
YWx1ZSBsZWZ0ID0gZm9yTm9kZShsZWZ0Tm9kZSkudmFsdWUoKTsKICAgICAgICAgSlNWYWx1ZSBy
aWdodCA9IGZvck5vZGUocmlnaHROb2RlKS52YWx1ZSgpOwogICAgICAgICBpZiAobGVmdCAmJiBy
aWdodCkgewotICAgICAgICAgICAgaWYgKGxlZnQuaXNOdW1iZXIoKSAmJiByaWdodC5pc051bWJl
cigpKSB7Ci0gICAgICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwganNCb29sZWFuKGxlZnQu
YXNOdW1iZXIoKSA9PSByaWdodC5hc051bWJlcigpKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAobGVmdC5pc1N0cmluZygpICYmIHJpZ2h0
LmlzU3RyaW5nKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRoaXMgY2FzZSBiZWNh
dXNlIEpTVmFsdWU6OnN0cmljdEVxdWFsIGlzIG90aGVyd2lzZSB0b28gcmFjeSBmb3IKKyAgICAg
ICAgICAgICAgICAvLyBzdHJpbmcgY29tcGFyaXNvbnMuCiAgICAgICAgICAgICAgICAgY29uc3Qg
U3RyaW5nSW1wbCogYSA9IGFzU3RyaW5nKGxlZnQpLT50cnlHZXRWYWx1ZUltcGwoKTsKICAgICAg
ICAgICAgICAgICBjb25zdCBTdHJpbmdJbXBsKiBiID0gYXNTdHJpbmcocmlnaHQpLT50cnlHZXRW
YWx1ZUltcGwoKTsKICAgICAgICAgICAgICAgICBpZiAoYSAmJiBiKSB7CiAgICAgICAgICAgICAg
ICAgICAgIHNldENvbnN0YW50KG5vZGUsIGpzQm9vbGVhbihXVEY6OmVxdWFsKGEsIGIpKSk7CiAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwganNCb29sZWFuKEpT
VmFsdWU6OnN0cmljdEVxdWFsKDAsIGxlZnQsIHJpZ2h0KSkpOworICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIAorICAgICAgICBTcGVjdWxh
dGVkVHlwZSBsZWZ0TFVCID0gbGVhc3RVcHBlckJvdW5kT2ZTdHJpY3RseUVxdWl2YWxlbnRTcGVj
dWxhdGlvbnMoZm9yTm9kZShsZWZ0Tm9kZSkubV90eXBlKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5
cGUgcmlnaHRMVUIgPSBsZWFzdFVwcGVyQm91bmRPZlN0cmljdGx5RXF1aXZhbGVudFNwZWN1bGF0
aW9ucyhmb3JOb2RlKHJpZ2h0Tm9kZSkubV90eXBlKTsKKyAgICAgICAgaWYgKCEobGVmdExVQiAm
IHJpZ2h0TFVCKSkgeworICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwganNCb29sZWFuKGZh
bHNlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAg
Zm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNCb29sZWFuKTsKICAgICAgICAgbm9kZS0+c2V0Q2Fu
RXhpdCh0cnVlKTsgLy8gVGhpcyBpcyBvdmVybHkgY29uc2VydmF0aXZlLgogICAgICAgICBicmVh
azsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAJKHJl
dmlzaW9uIDE2NDkzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2Rl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTMyLDcgKzEzMiw3IEBAIEFycmF5TW9k
ZSBBcnJheU1vZGU6OmZyb21PYnNlcnZlZChjb25zdCAKIH0KIAogQXJyYXlNb2RlIEFycmF5TW9k
ZTo6cmVmaW5lKAotICAgIEdyYXBoJiBncmFwaCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLAorICAg
IEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwKICAgICBTcGVjdWxhdGVkVHlwZSBiYXNlLCBTcGVj
dWxhdGVkVHlwZSBpbmRleCwgU3BlY3VsYXRlZFR5cGUgdmFsdWUsCiAgICAgTm9kZUZsYWdzIGZs
YWdzKSBjb25zdAogewpAQCAtMTk5LDEwICsxOTksMTggQEAgQXJyYXlNb2RlIEFycmF5TW9kZTo6
cmVmaW5lKAogICAgICAgICAgICAgcmV0dXJuIHdpdGhUeXBlKEFycmF5OjpBcmd1bWVudHMpOwog
ICAgICAgICAKICAgICAgICAgQXJyYXlNb2RlIHJlc3VsdDsKLSAgICAgICAgaWYgKGdyYXBoLmhh
c0V4aXRTaXRlKGNvZGVPcmlnaW4sIE91dE9mQm91bmRzKSB8fCAhaXNJbkJvdW5kcygpKQotICAg
ICAgICAgICAgcmVzdWx0ID0gd2l0aFNwZWN1bGF0aW9uKEFycmF5OjpPdXRPZkJvdW5kcyk7Ci0g
ICAgICAgIGVsc2UKKyAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgIGNhc2Ug
UHV0QnlWYWw6CisgICAgICAgICAgICBpZiAoZ3JhcGguaGFzRXhpdFNpdGUobm9kZS0+b3JpZ2lu
LnNlbWFudGljLCBPdXRPZkJvdW5kcykgfHwgIWlzSW5Cb3VuZHMoKSkKKyAgICAgICAgICAgICAg
ICByZXN1bHQgPSB3aXRoU3BlY3VsYXRpb24oQXJyYXk6Ok91dE9mQm91bmRzKTsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXN1bHQgPSB3aXRoU3BlY3VsYXRpb24oQXJyYXk6
OkluQm91bmRzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICByZXN1bHQgPSB3aXRoU3BlY3VsYXRpb24oQXJyYXk6OkluQm91
bmRzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBp
ZiAoaXNJbnQ4QXJyYXlTcGVjdWxhdGlvbihiYXNlKSkKICAgICAgICAgICAgIHJldHVybiByZXN1
bHQud2l0aFR5cGUoQXJyYXk6OkludDhBcnJheSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0FycmF5TW9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXJyYXlNb2RlLmgJKHJldmlzaW9uIDE2NDkzNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIy
MCw3ICsyMjAsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBBcnJheU1vZGUodHlwZSwgYXJy
YXlDbGFzcygpLCBzcGVjdWxhdGlvbigpLCBjb252ZXJzaW9uKTsKICAgICB9CiAgICAgCi0gICAg
QXJyYXlNb2RlIHJlZmluZShHcmFwaCYsIENvZGVPcmlnaW4sIFNwZWN1bGF0ZWRUeXBlIGJhc2Us
IFNwZWN1bGF0ZWRUeXBlIGluZGV4LCBTcGVjdWxhdGVkVHlwZSB2YWx1ZSA9IFNwZWNOb25lLCBO
b2RlRmxhZ3MgPSAwKSBjb25zdDsKKyAgICBBcnJheU1vZGUgcmVmaW5lKEdyYXBoJiwgTm9kZSos
IFNwZWN1bGF0ZWRUeXBlIGJhc2UsIFNwZWN1bGF0ZWRUeXBlIGluZGV4LCBTcGVjdWxhdGVkVHlw
ZSB2YWx1ZSA9IFNwZWNOb25lLCBOb2RlRmxhZ3MgPSAwKSBjb25zdDsKICAgICAKICAgICBib29s
IGFscmVhZHlDaGVja2VkKEdyYXBoJiwgTm9kZSosIEFic3RyYWN0VmFsdWUmKSBjb25zdDsKICAg
ICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAko
cmV2aXNpb24gMTY0OTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBo
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMyLDYgKzQzMiwxMSBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgIGZpeEVkZ2U8T2JqZWN0VXNlPihub2RlLT5jaGlsZDIoKSk7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hp
bGQxKCktPnNob3VsZFNwZWN1bGF0ZU1pc2MoKSAmJiBub2RlLT5jaGlsZDIoKS0+c2hvdWxkU3Bl
Y3VsYXRlTWlzYygpKSB7CisgICAgICAgICAgICAgICAgZml4RWRnZTxNaXNjVXNlPihub2RlLT5j
aGlsZDEoKSk7CisgICAgICAgICAgICAgICAgZml4RWRnZTxNaXNjVXNlPihub2RlLT5jaGlsZDIo
KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogCkBAIC00NTIsNyArNDU3LDcgQEAgcHJpdmF0ZToKICAgICAgICAg
Y2FzZSBHZXRCeVZhbDogewogICAgICAgICAgICAgbm9kZS0+c2V0QXJyYXlNb2RlKAogICAgICAg
ICAgICAgICAgIG5vZGUtPmFycmF5TW9kZSgpLnJlZmluZSgKLSAgICAgICAgICAgICAgICAgICAg
bV9ncmFwaCwgbm9kZS0+b3JpZ2luLnNlbWFudGljLAorICAgICAgICAgICAgICAgICAgICBtX2dy
YXBoLCBub2RlLAogICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlv
bigpLAogICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS0+cHJlZGljdGlvbigpLAog
ICAgICAgICAgICAgICAgICAgICBTcGVjTm9uZSwgbm9kZS0+ZmxhZ3MoKSkpOwpAQCAtNTEwLDcg
KzUxNSw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgIG5vZGUtPnNldEFycmF5TW9kZSgKICAg
ICAgICAgICAgICAgICBub2RlLT5hcnJheU1vZGUoKS5yZWZpbmUoCi0gICAgICAgICAgICAgICAg
ICAgIG1fZ3JhcGgsIG5vZGUtPm9yaWdpbi5zZW1hbnRpYywKKyAgICAgICAgICAgICAgICAgICAg
bV9ncmFwaCwgbm9kZSwKICAgICAgICAgICAgICAgICAgICAgY2hpbGQxLT5wcmVkaWN0aW9uKCks
CiAgICAgICAgICAgICAgICAgICAgIGNoaWxkMi0+cHJlZGljdGlvbigpLAogICAgICAgICAgICAg
ICAgICAgICBjaGlsZDMtPnByZWRpY3Rpb24oKSkpOwpAQCAtNTk2LDcgKzYwMSw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAvLyB0aGF0IHdvdWxkIGJyZWFrIHRoaW5ncy4KICAgICAgICAgICAg
IG5vZGUtPnNldEFycmF5TW9kZSgKICAgICAgICAgICAgICAgICBub2RlLT5hcnJheU1vZGUoKS5y
ZWZpbmUoCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG5vZGUtPm9yaWdpbi5zZW1hbnRp
YywKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwKICAgICAgICAgICAgICAgICAg
ICAgbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSAmIFNwZWNDZWxsLAogICAgICAgICAgICAg
ICAgICAgICBTcGVjSW50MzIsCiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLT5w
cmVkaWN0aW9uKCkpKTsKQEAgLTE3NTAsNyArMTc1NSw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0K
ICAgICAgICAgICAgIAogICAgICAgICBhcnJheU1vZGUgPSBhcnJheU1vZGUucmVmaW5lKAotICAg
ICAgICAgICAgbV9ncmFwaCwgbm9kZS0+b3JpZ2luLnNlbWFudGljLCBub2RlLT5jaGlsZDEoKS0+
cHJlZGljdGlvbigpLCBub2RlLT5wcmVkaWN0aW9uKCkpOworICAgICAgICAgICAgbV9ncmFwaCwg
bm9kZSwgbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSwgbm9kZS0+cHJlZGljdGlvbigpKTsK
ICAgICAgICAgICAgIAogICAgICAgICBpZiAoYXJyYXlNb2RlLnR5cGUoKSA9PSBBcnJheTo6R2Vu
ZXJpYykgewogICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGlucHV0IGlzIHNvbWV0aGluZyB0
aGF0IHdlIGNhbid0IGdldCBhcnJheSBsZW5ndGggZm9yLCBidXQgZm9yIHdoaWNoIHdlCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTY0OTM2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzOTks
NiArMTM5OSwxMSBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgewogICAgICAgICByZXR1cm4gaXNCb29s
ZWFuU3BlY3VsYXRpb24ocHJlZGljdGlvbigpKTsKICAgICB9CisgICAgCisgICAgYm9vbCBzaG91
bGRTcGVjdWxhdGVNaXNjKCkKKyAgICB7CisgICAgICAgIHJldHVybiBpc01pc2NTcGVjdWxhdGlv
bihwcmVkaWN0aW9uKCkpOworICAgIH0KICAgIAogICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlU3Ry
aW5nSWRlbnQoKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2Fm
ZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAxNjQ5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNiArNTksNyBA
QCBwdWJsaWM6CiAgICAgICAgIGNhc2UgU3RyaW5nT3JTdHJpbmdPYmplY3RVc2U6CiAgICAgICAg
IGNhc2UgTm90Q2VsbFVzZToKICAgICAgICAgY2FzZSBPdGhlclVzZToKKyAgICAgICAgY2FzZSBN
aXNjVXNlOgogICAgICAgICBjYXNlIE1hY2hpbmVJbnRVc2U6CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTY0OTM2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjEzLDYgKzYxMywyMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxh
dGl2ZU5vblBlCiAgICAgYm9vbGVhblJlc3VsdChyZXN1bHRQYXlsb2FkR1BSLCBub2RlLCBVc2VD
aGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwogfQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlTWlzY1N0cmljdEVxKE5vZGUqIG5vZGUpCit7CisgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRo
aXMsIG5vZGUtPmNoaWxkMSgpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgIEpTVmFs
dWVPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0
aW9uKTsKKyAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgIAorICAgIHNwZWN1bGF0
ZU1pc2Mobm9kZS0+Y2hpbGQxKCksIG9wMS5qc1ZhbHVlUmVncygpKTsKKyAgICBzcGVjdWxhdGVN
aXNjKG5vZGUtPmNoaWxkMigpLCBvcDIuanNWYWx1ZVJlZ3MoKSk7CisgICAgCisgICAgbV9qaXQu
bW92ZShUcnVzdGVkSW1tMzIoMCksIHJlc3VsdC5ncHIoKSk7CisgICAgSklUQ29tcGlsZXI6Okp1
bXAgbm90RXF1YWwgPSBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6Tm90RXF1YWwsIG9wMS50
YWdHUFIoKSwgb3AyLnRhZ0dQUigpKTsKKyAgICBtX2ppdC5jb21wYXJlMzIoSklUQ29tcGlsZXI6
OkVxdWFsLCBvcDEucGF5bG9hZEdQUigpLCBvcDIucGF5bG9hZEdQUigpLCByZXN1bHQuZ3ByKCkp
OworICAgIG5vdEVxdWFsLmxpbmsoJm1faml0KTsKKyAgICBib29sZWFuUmVzdWx0KHJlc3VsdC5n
cHIoKSwgbm9kZSk7Cit9CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5v
ZGUpCiB7CiAgICAgaWYgKG5vZGUtPm9wKCkgIT0gQ2FsbCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTY0
OTM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjQ4LDYgKzY0OCwyMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpub25TcGVjdWxhdGl2ZU5vblBlCiAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG1fY3Vy
cmVudE5vZGUsIERhdGFGb3JtYXRKU0Jvb2xlYW4sIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRs
eSk7CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNaXNjU3RyaWN0RXEoTm9kZSog
bm9kZSkKK3sKKyAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCksIE1h
bnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisgICAgSlNWYWx1ZU9wZXJhbmQgb3AyKHRoaXMsIG5v
ZGUtPmNoaWxkMigpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgIEdQUlRlbXBvcmFy
eSByZXN1bHQodGhpcyk7CisgICAgCisgICAgc3BlY3VsYXRlTWlzYyhub2RlLT5jaGlsZDEoKSwg
b3AxLmpzVmFsdWVSZWdzKCkpOworICAgIHNwZWN1bGF0ZU1pc2Mobm9kZS0+Y2hpbGQyKCksIG9w
Mi5qc1ZhbHVlUmVncygpKTsKKyAgICAKKyAgICBtX2ppdC5jb21wYXJlMzIoSklUQ29tcGlsZXI6
OkVxdWFsLCBvcDEuZ3ByKCksIG9wMi5ncHIoKSwgcmVzdWx0LmdwcigpKTsKKyAgICBtX2ppdC5v
cjMyKFRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0LmdwcigpKTsKKyAgICBqc1ZhbHVl
UmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSwgRGF0YUZvcm1hdEpTQm9vbGVhbik7Cit9CisKIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKG5vZGUt
Pm9wKCkgIT0gQ2FsbCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxNjQ5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgwMiw2
ICszODAyLDExIEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJpY3RFcShOb2QKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAgICAgCisgICAgY2FzZSBNaXNjVXNlOiB7
CisgICAgICAgIGNvbXBpbGVNaXNjU3RyaWN0RXEobm9kZSk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2UgVW50eXBlZFVzZTogewogICAgICAgICByZXR1
cm4gbm9uU3BlY3VsYXRpdmVTdHJpY3RFcShub2RlKTsKICAgICB9CkBAIC00ODMwLDYgKzQ4MzUs
MzEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlT3RoZXIoRWRnZQogI2VuZGlmICAg
IAogfQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVNaXNjKEVkZ2UgZWRnZSwgSlNW
YWx1ZVJlZ3MgcmVncykKK3sKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIHR5cGVDaGVjaygKKyAg
ICAgICAgcmVncywgZWRnZSwgU3BlY01pc2MsCisgICAgICAgIG1faml0LmJyYW5jaDY0KE1hY3Jv
QXNzZW1ibGVyOjpBYm92ZSwgcmVncy5ncHIoKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02
NChUYWdCaXRUeXBlT3RoZXIgfCBUYWdCaXRCb29sIHwgVGFnQml0VW5kZWZpbmVkKSkpOworI2Vs
c2UKKyAgICB0eXBlQ2hlY2soCisgICAgICAgIHJlZ3MsIGVkZ2UsIFNwZWNNaXNjIHwgU3BlY0lu
dDMyLAorICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHJlZ3Mu
dGFnR1BSKCksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcp
KSk7CisgICAgdHlwZUNoZWNrKAorICAgICAgICByZWdzLCBlZGdlLCBTcGVjTWlzYywKKyAgICAg
ICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCByZWdzLnRhZ0dQUigpLCBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OlVuZGVmaW5lZFRhZykpKTsKKyNl
bmRpZgorfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVNaXNjKEVkZ2UgZWRnZSkK
K3sKKyAgICBpZiAoIW5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNNaXNjKSkKKyAgICAgICAgcmV0
dXJuOworICAgIAorICAgIEpTVmFsdWVPcGVyYW5kIG9wZXJhbmQodGhpcywgZWRnZSwgTWFudWFs
T3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAgICBzcGVjdWxhdGVNaXNjKGVkZ2UsIG9wZXJhbmQuanNW
YWx1ZVJlZ3MoKSk7Cit9CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZShOb2RlKiwg
RWRnZSBlZGdlKQogewogICAgIHN3aXRjaCAoZWRnZS51c2VLaW5kKCkpIHsKQEAgLTQ4OTIsNiAr
NDkyMiw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZShOb2RlKiwgRWQKICAgICBj
YXNlIE90aGVyVXNlOgogICAgICAgICBzcGVjdWxhdGVPdGhlcihlZGdlKTsKICAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBNaXNjVXNlOgorICAgICAgICBzcGVjdWxhdGVNaXNjKGVkZ2UpOworICAg
ICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDE2NDkzNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMTk4
NSw2ICsxOTg1LDcgQEAgcHVibGljOgogICAgIHZvaWQgY29tcGlsZVN0cmluZ0VxdWFsaXR5KE5v
ZGUqKTsKICAgICB2b2lkIGNvbXBpbGVTdHJpbmdJZGVudEVxdWFsaXR5KE5vZGUqKTsKICAgICB2
b2lkIGNvbXBpbGVTdHJpbmdaZXJvTGVuZ3RoKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVNaXNj
U3RyaWN0RXEoTm9kZSopOwogCiAgICAgdm9pZCBlbWl0T2JqZWN0T3JPdGhlckJyYW5jaChFZGdl
IHZhbHVlLCBCYXNpY0Jsb2NrKiB0YWtlbiwgQmFzaWNCbG9jayogbm90VGFrZW4pOwogICAgIHZv
aWQgZW1pdEJyYW5jaChOb2RlKik7CkBAIC0yMjAzLDYgKzIyMDQsOCBAQCBwdWJsaWM6CiAgICAg
dm9pZCBzcGVjdWxhdGVTdHJpbmdPclN0cmluZ09iamVjdChFZGdlKTsKICAgICB2b2lkIHNwZWN1
bGF0ZU5vdENlbGwoRWRnZSk7CiAgICAgdm9pZCBzcGVjdWxhdGVPdGhlcihFZGdlKTsKKyAgICB2
b2lkIHNwZWN1bGF0ZU1pc2MoRWRnZSwgSlNWYWx1ZVJlZ3MpOworICAgIHZvaWQgc3BlY3VsYXRl
TWlzYyhFZGdlKTsKICAgICB2b2lkIHNwZWN1bGF0ZShOb2RlKiwgRWRnZSk7CiAgICAgCiAgICAg
SklUQ29tcGlsZXI6Okp1bXAganVtcFNsb3dGb3JVbndhbnRlZEFycmF5TW9kZShHUFJSZWcgdGVt
cFdpdGhJbmRleGluZ1R5cGVSZWcsIEFycmF5TW9kZSwgSW5kZXhpbmdUeXBlKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmNwcAkocmV2aXNpb24gMTY0OTM2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtOTcsNiArOTcsOSBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgVXNl
CiAgICAgY2FzZSBPdGhlclVzZToKICAgICAgICAgb3V0LnByaW50KCJPdGhlciIpOwogICAgICAg
ICBicmVhazsKKyAgICBjYXNlIE1pc2NVc2U6CisgICAgICAgIG91dC5wcmludCgiTWlzYyIpOwor
ICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHVXNlS2luZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVXNlS2luZC5oCShyZXZpc2lvbiAxNjQ5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1VzZUtpbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTQsNiArNTQsNyBAQCBlbnVtIFVzZUtp
bmQgewogICAgIFN0cmluZ09yU3RyaW5nT2JqZWN0VXNlLAogICAgIE5vdENlbGxVc2UsCiAgICAg
T3RoZXJVc2UsCisgICAgTWlzY1VzZSwKICAgICBMYXN0VXNlS2luZCAvLyBNdXN0IGFsd2F5cyBi
ZSB0aGUgbGFzdCBlbnRyeSBpbiB0aGUgZW51bSwgYXMgaXQgaXMgdXNlZCB0byBkZW5vdGUgdGhl
IG51bWJlciBvZiBlbnVtIGVsZW1lbnRzLgogfTsKIApAQCAtOTYsNiArOTcsOCBAQCBBTFdBWVNf
SU5MSU5FIFNwZWN1bGF0ZWRUeXBlIHR5cGVGaWx0ZXJGCiAgICAgICAgIHJldHVybiB+U3BlY0Nl
bGw7CiAgICAgY2FzZSBPdGhlclVzZToKICAgICAgICAgcmV0dXJuIFNwZWNPdGhlcjsKKyAgICBj
YXNlIE1pc2NVc2U6CisgICAgICAgIHJldHVybiBTcGVjTWlzYzsKICAgICBkZWZhdWx0OgogICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gU3BlY0Z1
bGxUb3A7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRp
ZXMuY3BwCShyZXZpc2lvbiAxNjQ5MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MSw2ICsxNDEsOSBAQCBpbmxp
bmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoTm9kZSogCiAgICAgY2FzZSBNdWx0aVB1dEJ5
T2Zmc2V0OgogICAgIGNhc2UgVG9QcmltaXRpdmU6CiAgICAgY2FzZSBQaGFudG9tQXJndW1lbnRz
OgorICAgIGNhc2UgVGhyb3c6CisgICAgY2FzZSBUaHJvd1JlZmVyZW5jZUVycm9yOgorICAgIGNh
c2UgVW5yZWFjaGFibGU6CiAgICAgICAgIC8vIFRoZXNlIGFyZSBPSy4KICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBQdXRCeUlkRGlyZWN0OgpAQCAtMjMyLDYgKzIzNSw4IEBAIGlubGluZSBDYXBh
YmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBpZiAobm9kZS0+aXNCaW5hcnlVc2VLaW5kKFVudHlwZWRVc2UpKQogICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGlmIChub2RlLT5pc0JpbmFyeVVzZUtpbmQoQm9vbGVhblVzZSkpCisgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBP
YmplY3RVc2UKICAgICAgICAgICAgICYmIG5vZGUtPmNoaWxkMigpLnVzZUtpbmQoKSA9PSBPYmpl
Y3RPck90aGVyVXNlKQogICAgICAgICAgICAgYnJlYWs7CkBAIC0yNDgsNiArMjUzLDEwIEBAIGlu
bGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiAKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBpZiAobm9kZS0+aXNCaW5hcnlVc2VLaW5kKE9iamVjdFVzZSkpCiAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgaWYgKG5vZGUtPmlzQmluYXJ5VXNlS2luZChNaXNjVXNlKSkK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAobm9kZS0+aXNCaW5hcnlVc2VLaW5kKEJv
b2xlYW5Vc2UpKQorICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIHJldHVybiBDYW5ub3RDb21w
aWxlOwogICAgIGNhc2UgQ29tcGFyZUxlc3M6CiAgICAgY2FzZSBDb21wYXJlTGVzc0VxOgpAQCAt
MzM4LDYgKzM0Nyw3IEBAIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKEdyYXBoJiBncmFwaCkK
ICAgICAgICAgICAgICAgICBjYXNlIFN0cmluZ09yU3RyaW5nT2JqZWN0VXNlOgogICAgICAgICAg
ICAgICAgIGNhc2UgRmluYWxPYmplY3RVc2U6CiAgICAgICAgICAgICAgICAgY2FzZSBOb3RDZWxs
VXNlOgorICAgICAgICAgICAgICAgIGNhc2UgTWlzY1VzZToKICAgICAgICAgICAgICAgICAgICAg
Ly8gVGhlc2UgYXJlIE9LLgogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICBkZWZhdWx0OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRG
R1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExM
b3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE2NDkzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NTYsNiAr
NTU2LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgRm9yY2VPU1JFeGl0OgogICAgICAgICAg
ICAgY29tcGlsZUZvcmNlT1NSRXhpdCgpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgVGhyb3c6CisgICAgICAgIGNhc2UgVGhyb3dSZWZlcmVuY2VFcnJvcjoKKyAgICAgICAgICAg
IGNvbXBpbGVUaHJvdygpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSW52YWxp
ZGF0aW9uUG9pbnQ6CiAgICAgICAgICAgICBjb21waWxlSW52YWxpZGF0aW9uUG9pbnQoKTsKICAg
ICAgICAgICAgIGJyZWFrOwpAQCAtNTg5LDYgKzU5Myw5IEBAIHByaXZhdGU6CiAgICAgICAgIGNh
c2UgVHlwZWRBcnJheVdhdGNocG9pbnQ6CiAgICAgICAgIGNhc2UgQWxsb2NhdGlvblByb2ZpbGVX
YXRjaHBvaW50OgogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVW5yZWFjaGFibGU6
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0zMzI5LDcgKzMzMzYsOCBAQCBwcml2
YXRlOgogICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoSW50MzJVc2UpCiAgICAg
ICAgICAgICB8fCBtX25vZGUtPmlzQmluYXJ5VXNlS2luZChNYWNoaW5lSW50VXNlKQogICAgICAg
ICAgICAgfHwgbV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoTnVtYmVyVXNlKQotICAgICAgICAgICAg
fHwgbV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoT2JqZWN0VXNlKSkgeworICAgICAgICAgICAgfHwg
bV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoT2JqZWN0VXNlKQorICAgICAgICAgICAgfHwgbV9ub2Rl
LT5pc0JpbmFyeVVzZUtpbmQoQm9vbGVhblVzZSkpIHsKICAgICAgICAgICAgIGNvbXBpbGVDb21w
YXJlU3RyaWN0RXEoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMzM5Miw2
ICszNDAwLDIxIEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAg
ICAgICAgCisgICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChCb29sZWFuVXNlKSkg
eworICAgICAgICAgICAgc2V0Qm9vbGVhbigKKyAgICAgICAgICAgICAgICBtX291dC5lcXVhbChs
b3dCb29sZWFuKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dCb29sZWFuKG1fbm9kZS0+Y2hpbGQyKCkp
KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlm
IChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChNaXNjVXNlKSkgeworICAgICAgICAgICAgTFZhbHVl
IGxlZnQgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxh
dGlvbik7CisgICAgICAgICAgICBMVmFsdWUgcmlnaHQgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hp
bGQyKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisgICAgICAgICAgICBGVExfVFlQRV9D
SEVDSyhqc1ZhbHVlVmFsdWUobGVmdCksIG1fbm9kZS0+Y2hpbGQxKCksIFNwZWNNaXNjLCBpc05v
dE1pc2MobGVmdCkpOworICAgICAgICAgICAgRlRMX1RZUEVfQ0hFQ0soanNWYWx1ZVZhbHVlKHJp
Z2h0KSwgbV9ub2RlLT5jaGlsZDIoKSwgU3BlY01pc2MsIGlzTm90TWlzYyhyaWdodCkpOworICAg
ICAgICAgICAgc2V0Qm9vbGVhbihtX291dC5lcXVhbChsZWZ0LCByaWdodCkpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgIH0KICAgICAKQEAgLTM2NTgsNiArMzY4MSwxMSBAQCBwcml2YXRl
OgogICAgICAgICB0ZXJtaW5hdGUoSW5hZGVxdWF0ZUNvdmVyYWdlKTsKICAgICB9CiAgICAgCisg
ICAgdm9pZCBjb21waWxlVGhyb3coKQorICAgIHsKKyAgICAgICAgdGVybWluYXRlKFVuY291bnRh
YmxlKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBjb21waWxlSW52YWxpZGF0aW9uUG9pbnQoKQog
ICAgIHsKICAgICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkKQEAgLTQ5MTgs
NiArNDk0NiwxNiBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gbV9vdXQudGVzdElzWmVybzY0
KGpzVmFsdWUsIG1fdGFnTWFzayk7CiAgICAgfQogICAgIAorICAgIExWYWx1ZSBpc05vdE1pc2Mo
TFZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb3V0LmFib3ZlKHZhbHVlLCBt
X291dC5jb25zdEludDY0KFRhZ0JpdFR5cGVPdGhlciB8IFRhZ0JpdEJvb2wgfCBUYWdCaXRVbmRl
ZmluZWQpKTsKKyAgICB9CisgICAgCisgICAgTFZhbHVlIGlzTWlzYyhMVmFsdWUgdmFsdWUpCisg
ICAgeworICAgICAgICByZXR1cm4gbV9vdXQuYml0Tm90KGlzTm90TWlzYyh2YWx1ZSkpOworICAg
IH0KKyAgICAKICAgICBMVmFsdWUgaXNOb3RCb29sZWFuKExWYWx1ZSBqc1ZhbHVlKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIG1fb3V0LnRlc3ROb25aZXJvNjQoCkBAIC01MDAxLDYgKzUwMzksOSBA
QCBwcml2YXRlOgogICAgICAgICBjYXNlIE5vdENlbGxVc2U6CiAgICAgICAgICAgICBzcGVjdWxh
dGVOb3RDZWxsKGVkZ2UpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTWlzY1Vz
ZToKKyAgICAgICAgICAgIHNwZWN1bGF0ZU1pc2MoZWRnZSk7CisgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGRhdGFMb2coIlVuc3VwcG9ydGVkIHNwZWN1
bGF0aW9uIHVzZSBraW5kOiAiLCBlZGdlLnVzZUtpbmQoKSwgIlxuIik7CiAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtNTI3OCw2ICs1MzE5LDE1IEBAIHByaXZh
dGU6CiAgICAgICAgIHR5cGVDaGVjayhqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLCB+U3BlY0Nl
bGwsIGlzQ2VsbCh2YWx1ZSkpOwogICAgIH0KICAgICAKKyAgICB2b2lkIHNwZWN1bGF0ZU1pc2Mo
RWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2ludGVycHJldGVyLm5lZWRzVHlwZUNo
ZWNrKGVkZ2UpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgTFZhbHVl
IHZhbHVlID0gbG93SlNWYWx1ZShlZGdlKTsKKyAgICAgICAgdHlwZUNoZWNrKGpzVmFsdWVWYWx1
ZSh2YWx1ZSksIGVkZ2UsIFNwZWNNaXNjLCBpc05vdE1pc2ModmFsdWUpKTsKKyAgICB9CisgICAg
CiAgICAgYm9vbCBtYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludElzU3RpbGxWYWxpZCgp
CiAgICAgewogICAgICAgICByZXR1cm4gbV9ncmFwaC5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0
Y2hwb2ludElzU3RpbGxWYWxpZChtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2Zsb2F0MzItYXJyYXktb3V0LW9mLWJvdW5k
cy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2Zs
b2F0MzItYXJyYXktb3V0LW9mLWJvdW5kcy5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZmxvYXQzMi1hcnJheS1vdXQtb2YtYm91bmRzLmpzCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjMgQEAKK2Z1bmN0aW9uIGZvbyhhKSB7CisgICAgcmV0
dXJuIGFbNDJdOworfQorCitub0lubGluZShmb28pOworCit2YXIgc2hvcnRBcnJheSA9IG5ldyBG
bG9hdDMyQXJyYXkoMTApOwordmFyIGxvbmdBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoMTAwKTsK
KworZnVuY3Rpb24gdGVzdChhcnJheSwgZXhwZWN0ZWQpIHsKKyAgICB2YXIgcmVzdWx0ID0gZm9v
KGFycmF5KTsKKyAgICBpZiAocmVzdWx0ICE9IGV4cGVjdGVkKQorICAgICAgICB0aHJvdyBuZXcg
RXJyb3IoImJhZCByZXN1bHQ6ICIgKyByZXN1bHQpOworfQorCitmb3IgKHZhciBpID0gMDsgaSA8
IDEwMDA7ICsraSkKKyAgICB0ZXN0KHNob3J0QXJyYXksIHZvaWQgMCk7CisKK2ZvciAodmFyIGkg
PSAwOyBpIDwgMTAwMDAwOyArK2kpCisgICAgdGVzdChsb25nQXJyYXksIDApOworCit0ZXN0KHNo
b3J0QXJyYXksIHZvaWQgMCk7CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9z
dHJlc3Mvd2VpcmQtZXF1YWxpdHktZm9sZGluZy1jYXNlcy5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3dlaXJkLWVxdWFsaXR5LWZvbGRpbmctY2Fz
ZXMuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNz
L3dlaXJkLWVxdWFsaXR5LWZvbGRpbmctY2FzZXMuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMyBAQAorZnVuY3Rpb24gdGVzdChhY3R1YWxGdW5jdGlvbiwgZXhwZWN0ZWQpIHsKKyAgICB2
YXIgYWN0dWFsID0gYWN0dWFsRnVuY3Rpb24oKTsKKyAgICBpZiAoYWN0dWFsICE9IGV4cGVjdGVk
KQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImJhZCBpbiAiICsgYWN0dWFsRnVuY3Rpb24gKyAi
IHJlc3VsdDogIiArIGFjdHVhbCk7Cit9CisKK25vSW5saW5lKHRlc3QpOworCitmb3IgKHZhciBp
ID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICB0ZXN0KGZ1bmN0aW9uKCkgeyByZXR1cm4gIjUi
ID09IDU7IH0sIHRydWUpOworICAgIHRlc3QoZnVuY3Rpb24oKSB7IHJldHVybiAoe3ZhbHVlT2Y6
ZnVuY3Rpb24oKXtyZXR1cm4gNDI7fX0pID09IDQyOyB9LCB0cnVlKTsKKyAgICB0ZXN0KGZ1bmN0
aW9uKCkgeyByZXR1cm4gKHt2YWx1ZU9mOmZ1bmN0aW9uKCl7cmV0dXJuIDQyO319KSA9PSAoe3Zh
bHVlT2Y6ZnVuY3Rpb24oKXtyZXR1cm4gNDI7fX0pIH0sIGZhbHNlKTsKK30KSW5kZXg6IExheW91
dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDE2NDkzNikKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE5IEBACisyMDE0LTAzLTAxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5j
b20+CisKKyAgICAgICAgREZHIGFuZCBGVEwgc2hvdWxkIHNwZWNpYWxpemUgZm9yIGFuZCBzdXBw
b3J0IENvbXBhcmVTdHJpY3RFcSBvdmVyIE1pc2MgKGkuZS4gYm9vbGVhbiwgdW5kZWZpbmVkLCBv
ciBudWxsKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTI5NTYzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBqcy9yZWdyZXNzL2ZvbGQtc3RyaWN0LWVxLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICoganMvcmVncmVzcy9mb2xkLXN0cmljdC1lcS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBqcy9y
ZWdyZXNzL21pc2Mtc3RyaWN0LWVxLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICoganMv
cmVncmVzcy9taXNjLXN0cmljdC1lcS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNz
L3NjcmlwdC10ZXN0cy9mb2xkLXN0cmljdC1lcS5qczogQWRkZWQuCisgICAgICAgIChmb28pOgor
ICAgICAgICAodGVzdCk6CisgICAgICAgICoganMvcmVncmVzcy9zY3JpcHQtdGVzdHMvbWlzYy1z
dHJpY3QtZXEuanM6IEFkZGVkLgorCiAyMDE0LTAzLTAxICBDb21taXQgUXVldWUgIDxjb21taXQt
cXVldWVAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTY0
OTI5IGFuZCByMTY0OTM0LgpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9mb2xkLXN0cmlj
dC1lcS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9m
b2xkLXN0cmljdC1lcS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9q
cy9yZWdyZXNzL2ZvbGQtc3RyaWN0LWVxLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDEwIEBACitKU1JlZ3Jlc3MvZm9sZC1zdHJpY3QtZXEKKworT24gc3VjY2VzcywgeW91
IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1Qg
Q09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVs
bHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2pz
L3JlZ3Jlc3MvZm9sZC1zdHJpY3QtZXEuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9q
cy9yZWdyZXNzL2ZvbGQtc3RyaWN0LWVxLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9qcy9yZWdyZXNzL2ZvbGQtc3RyaWN0LWVxLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgor
PGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUu
anMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3Jl
Z3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvZm9sZC1z
dHJpY3QtZXEuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9yZWdyZXNzLXBv
c3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBv
c3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvanMv
cmVncmVzcy9taXNjLXN0cmljdC1lcS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvanMvcmVncmVzcy9taXNjLXN0cmljdC1lcS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL21pc2Mtc3RyaWN0LWVxLWV4cGVjdGVkLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3MvbWlzYy1zdHJpY3QtZXEK
KworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywg
Zm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93
bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5k
ZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvbWlzYy1zdHJpY3QtZXEuaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL21pc2Mtc3RyaWN0LWVxLmh0bWwJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL21pc2Mtc3RyaWN0LWVxLmh0bWwJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRG
Ly9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNv
dXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0
IHNyYz0icmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJz
Y3JpcHQtdGVzdHMvbWlzYy1zdHJpY3QtZXEuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJl
c291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jl
c291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRl
eDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZm9sZC1zdHJpY3QtZXEuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZm9sZC1z
dHJpY3QtZXEuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3Njcmlw
dC10ZXN0cy9mb2xkLXN0cmljdC1lcS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2IEBA
CitmdW5jdGlvbiBmb28oYSwgYikgeworICAgIHJldHVybiBhID09PSBiOworfQorCitmdW5jdGlv
biB0ZXN0KGFjdHVhbCwgZXhwZWN0ZWQpIHsKKyAgICBpZiAoYWN0dWFsICE9PSBleHBlY3RlZCkK
KyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJiYWQgcmVzdWx0OiAiICsgYWN0dWFsKTsKK30KKwor
Zm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDAwMDsgKytpKSB7CisgICAgdGVzdChmb28odHJ1ZSwg
bnVsbCksIGZhbHNlKTsKKyAgICB0ZXN0KGZvbyh0cnVlLCBmYWxzZSksIGZhbHNlKTsKKyAgICB0
ZXN0KGZvbyh0cnVlLCB0cnVlKSwgdHJ1ZSk7CisgICAgdGVzdChmb28oNSwgImhlbGxvIiksIGZh
bHNlKTsKKyAgICB0ZXN0KGZvbyh2b2lkIDAsIG5ldyBPYmplY3QoKSksIGZhbHNlKTsKK30KSW5k
ZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL21pc2Mtc3RyaWN0LWVxLmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL21pc2Mt
c3RyaWN0LWVxLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3Jp
cHQtdGVzdHMvbWlzYy1zdHJpY3QtZXEuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMyBA
QAorKGZ1bmN0aW9uKCkgeworICAgIHZhciBhcnJheSA9IFt0cnVlLCBmYWxzZSwgbnVsbCwgdm9p
ZCAwXTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDA7ICsraSkgeworICAgICAgICBm
b3IgKHZhciBqID0gMDsgaiA8IGFycmF5Lmxlbmd0aDsgKytqKSB7CisgICAgICAgICAgICBmb3Ig
KHZhciBrID0gaiA7IGsgPCBhcnJheS5sZW5ndGg7ICsraykgeworICAgICAgICAgICAgICAgIHZh
ciBhY3R1YWwgPSBhcnJheVtqXSA9PT0gYXJyYXlba107CisgICAgICAgICAgICAgICAgdmFyIGV4
cGVjdGVkID0gaiA9PSBrOworICAgICAgICAgICAgICAgIGlmIChhY3R1YWwgIT0gZXhwZWN0ZWQp
CisgICAgICAgICAgICAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCBmb3IgaiA9ICIg
KyBqICsgIiwgayA9ICIgKyBrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfSko
KTsK
</data>
<flag name="review"
          id="249736"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>