<?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>184165</bug_id>
          
          <creation_ts>2018-03-29 17:45:18 -0700</creation_ts>
          <short_desc>Add some pointer profiling support to B3 and Air.</short_desc>
          <delta_ts>2018-03-29 22:15:01 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>fpizlo</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1410461</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-03-29 17:45:18 -0700</bug_when>
    <thetext>Patch coming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1410463</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-03-29 17:46:22 -0700</bug_when>
    <thetext>&lt;rdar://problem/39022125&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1410465</commentid>
    <comment_count>2</comment_count>
      <attachid>336825</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-03-29 17:50:22 -0700</bug_when>
    <thetext>Created attachment 336825
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1410502</commentid>
    <comment_count>3</comment_count>
      <attachid>336825</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2018-03-29 20:05:56 -0700</bug_when>
    <thetext>Comment on attachment 336825
proposed patch.

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

r=me with some comments.

&gt; Source/JavaScriptCore/b3/B3LowerMacros.cpp:531
&gt; +                                    jumpTable[tableIndex] = linkBuffer.locationOf(*labels[labelIndex++], tag);

For the two changes above: do we ever generate other jumps to these labels which need a tag?

Say we have:

switch(i) {
case 1:
oops:
// ...
case 2:
  switch (j) {
    case 4:
    // ...
    case 5:
      goto oops;
  }
case 3:
// ...
}

So you&apos;ve tagged the inner and outer switch differently, and the dispatch at the top of each switch has the same tag... What does case 1 and label oops end up doing? I&apos;m guessing labels are always direct jumps so we&apos;re OK? Let&apos;s talk it through tomorrow, I just want to make sure I understand!

&gt; Source/JavaScriptCore/b3/B3LowerMacrosAfterOptimizations.cpp:126
&gt; +                    functionAddress = m_insertionSet.insert&lt;ConstPtrValue&gt;(m_index, m_origin, tagCFunctionPtr(floorf, B3CCallPtrTag));

For the 4 above: I think your other idiom with tagCFunctionPtr&lt;...&gt;(f, tag) is easier to grok that this one.

&gt; Source/JavaScriptCore/b3/testb3.cpp:10236
&gt; +            root-&gt;appendNew&lt;ConstPtrValue&gt;(proc, Origin(), tagCFunctionPtr&lt;void*&gt;(simpleFunction, B3CCallPtrTag)),

No signature here and below?

&gt; Source/JavaScriptCore/b3/air/AirCCallSpecial.cpp:138
&gt; +        jit.move(CCallHelpers::TrustedImmPtr(B3CCallPtrTag), ptrTagRegister);

I thought you used TrustedImm64 for the tags?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1410509</commentid>
    <comment_count>4</comment_count>
      <attachid>336825</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-03-29 20:35:31 -0700</bug_when>
    <thetext>Comment on attachment 336825
proposed patch.

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

Thanks for the review.  Clarifications and responses below.

&gt;&gt; Source/JavaScriptCore/b3/B3LowerMacros.cpp:531
&gt;&gt; +                                    jumpTable[tableIndex] = linkBuffer.locationOf(*labels[labelIndex++], tag);
&gt; 
&gt; For the two changes above: do we ever generate other jumps to these labels which need a tag?
&gt; 
&gt; Say we have:
&gt; 
&gt; switch(i) {
&gt; case 1:
&gt; oops:
&gt; // ...
&gt; case 2:
&gt;   switch (j) {
&gt;     case 4:
&gt;     // ...
&gt;     case 5:
&gt;       goto oops;
&gt;   }
&gt; case 3:
&gt; // ...
&gt; }
&gt; 
&gt; So you&apos;ve tagged the inner and outer switch differently, and the dispatch at the top of each switch has the same tag... What does case 1 and label oops end up doing? I&apos;m guessing labels are always direct jumps so we&apos;re OK? Let&apos;s talk it through tomorrow, I just want to make sure I understand!

We&apos;re only tagging the switch cases (and default) here.  If there&apos;s a nested switch, it will have its own dispatch, and therefore, its own tag, and its cases will be linked separately.  We don&apos;t have to worry about it here.

Secondly, there&apos;s no &quot;goto&quot; in the ECMAScript spec (at least I don&apos;t see one): https://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf.

&gt;&gt; Source/JavaScriptCore/b3/B3LowerMacrosAfterOptimizations.cpp:126
&gt;&gt; +                    functionAddress = m_insertionSet.insert&lt;ConstPtrValue&gt;(m_index, m_origin, tagCFunctionPtr(floorf, B3CCallPtrTag));
&gt; 
&gt; For the 4 above: I think your other idiom with tagCFunctionPtr&lt;...&gt;(f, tag) is easier to grok that this one.

There is no other idiom.  By default, tagCFunctionPtr(ptr, tag) returns a pointer of the same type as ptr i.e. the function pointer type of the function passed to it.  However, as a convenience, we also have a form of tagCFunctionPtr that bitwise_casts the result to a different pointer type if desired e.g. tagCFunctionPtr&lt;void*&gt;(ptr, tag) returns a void*.

In the above 4, there&apos;s no reason to return a different pointer type than the function pointer we&apos;re tagging.

&gt; Source/JavaScriptCore/b3/B3MathExtras.cpp:60
&gt; +    auto* powDouble = tagCFunctionPtr&lt;double (*)(double, double)&gt;(pow, B3CCallPtrTag);

FYI, I&apos;m using the tagCFunctionPtr&lt;double (*)(double, double)&gt;(...) form here so that I can use auto* to declare powDouble.

&gt;&gt; Source/JavaScriptCore/b3/testb3.cpp:10236
&gt;&gt; +            root-&gt;appendNew&lt;ConstPtrValue&gt;(proc, Origin(), tagCFunctionPtr&lt;void*&gt;(simpleFunction, B3CCallPtrTag)),
&gt; 
&gt; No signature here and below?

No signature needed.  The original code wanted a void*, we choose the form that applies the bitwise_cast to void*.

&gt;&gt; Source/JavaScriptCore/b3/air/AirCCallSpecial.cpp:138
&gt;&gt; +        jit.move(CCallHelpers::TrustedImmPtr(B3CCallPtrTag), ptrTagRegister);
&gt; 
&gt; I thought you used TrustedImm64 for the tags?

PtrTag is a uintptr_t i.e. pointer size.  Hence, TrustedImmPtr.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1410514</commentid>
    <comment_count>5</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2018-03-29 20:41:59 -0700</bug_when>
    <thetext>(In reply to Mark Lam from comment #4)
&gt; Comment on attachment 336825 [details]
&gt; proposed patch.
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=336825&amp;action=review
&gt; 
&gt; Thanks for the review.  Clarifications and responses below.
&gt; 
&gt; &gt;&gt; Source/JavaScriptCore/b3/B3LowerMacros.cpp:531
&gt; &gt;&gt; +                                    jumpTable[tableIndex] = linkBuffer.locationOf(*labels[labelIndex++], tag);
&gt; &gt; 
&gt; &gt; For the two changes above: do we ever generate other jumps to these labels which need a tag?
&gt; &gt; 
&gt; &gt; Say we have:
&gt; &gt; 
&gt; &gt; switch(i) {
&gt; &gt; case 1:
&gt; &gt; oops:
&gt; &gt; // ...
&gt; &gt; case 2:
&gt; &gt;   switch (j) {
&gt; &gt;     case 4:
&gt; &gt;     // ...
&gt; &gt;     case 5:
&gt; &gt;       goto oops;
&gt; &gt;   }
&gt; &gt; case 3:
&gt; &gt; // ...
&gt; &gt; }
&gt; &gt; 
&gt; &gt; So you&apos;ve tagged the inner and outer switch differently, and the dispatch at the top of each switch has the same tag... What does case 1 and label oops end up doing? I&apos;m guessing labels are always direct jumps so we&apos;re OK? Let&apos;s talk it through tomorrow, I just want to make sure I understand!
&gt; 
&gt; We&apos;re only tagging the switch cases (and default) here.  If there&apos;s a nested
&gt; switch, it will have its own dispatch, and therefore, its own tag, and its
&gt; cases will be linked separately.  We don&apos;t have to worry about it here.

OK makes sense.

&gt; Secondly, there&apos;s no &quot;goto&quot; in the ECMAScript spec (at least I don&apos;t see
&gt; one):
&gt; https://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf.

Totally is! https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/label

I&apos;m more asking about our IR constructs, not JS. The IR could allow goto without JS having it, at least LLVM IR allows a bunch of things C++ (even with extensions) doesn&apos;t.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1410516</commentid>
    <comment_count>6</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-03-29 20:44:53 -0700</bug_when>
    <thetext>(In reply to JF Bastien from comment #5)
&gt; &gt; Secondly, there&apos;s no &quot;goto&quot; in the ECMAScript spec (at least I don&apos;t see
&gt; &gt; one):
&gt; &gt; https://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf.
&gt; 
&gt; Totally is!
&gt; https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/
&gt; label
&gt; 
&gt; I&apos;m more asking about our IR constructs, not JS. The IR could allow goto
&gt; without JS having it, at least LLVM IR allows a bunch of things C++ (even
&gt; with extensions) doesn&apos;t.

Good point.  That would be handled by a Label and a jump in our JIT.  It&apos;s completely independent of this switch dispatch.  Hence, no need to be concerned about it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1410545</commentid>
    <comment_count>7</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-03-29 22:15:01 -0700</bug_when>
    <thetext>Landed in r230098: &lt;http://trac.webkit.org/r230098&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>336825</attachid>
            <date>2018-03-29 17:50:22 -0700</date>
            <delta_ts>2018-03-29 20:05:56 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-184165.patch</filename>
            <type>text/plain</type>
            <size>41350</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjMwMDg4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY0IEBA
CisyMDE4LTAzLTI5ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZGQgc29tZSBwb2ludGVyIHByb2ZpbGluZyBzdXBwb3J0IHRvIEIzIGFuZCBBaXIuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODQxNjUKKyAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzM5MDIyMTI1PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogYjMvQjNMb3dlck1hY3Jvcy5jcHA6CisgICAgICAgICogYjMv
QjNMb3dlck1hY3Jvc0FmdGVyT3B0aW1pemF0aW9ucy5jcHA6CisgICAgICAgICogYjMvQjNNYXRo
RXh0cmFzLmNwcDoKKyAgICAgICAgKiBiMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcDoKKyAgICAgICAg
KiBiMy9haXIvQWlyQ0NhbGxTcGVjaWFsLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0Nh
bGxTcGVjaWFsOjpnZW5lcmF0ZSk6CisgICAgICAgICogYjMvYWlyL0FpckNDYWxsU3BlY2lhbC5o
OgorICAgICAgICAqIGIzL3Rlc3RiMy5jcHA6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0Q2FsbFNp
bXBsZSk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0Q2FsbFJhcmUpOgorICAgICAgICAoSlNDOjpC
Mzo6dGVzdENhbGxSYXJlTGl2ZSk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0Q2FsbFNpbXBsZVB1
cmUpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdENhbGxGdW5jdGlvbldpdGhIZWxsYUFyZ3VtZW50
cyk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0Q2FsbEZ1bmN0aW9uV2l0aEhlbGxhQXJndW1lbnRz
Mik6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0Q2FsbEZ1bmN0aW9uV2l0aEhlbGxhQXJndW1lbnRz
Myk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0Q2FsbFNpbXBsZURvdWJsZSk6CisgICAgICAgIChK
U0M6OkIzOjp0ZXN0Q2FsbFNpbXBsZUZsb2F0KToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RDYWxs
RnVuY3Rpb25XaXRoSGVsbGFEb3VibGVBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpCMzo6dGVz
dENhbGxGdW5jdGlvbldpdGhIZWxsYUZsb2F0QXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6QjM6
OnRlc3RMaW5lYXJTY2FuV2l0aENhbGxlZU9uU3RhY2spOgorICAgICAgICAoSlNDOjpCMzo6dGVz
dEludGVycHJldGVyKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RMSUNNUHVyZSk6CisgICAgICAg
IChKU0M6OkIzOjp0ZXN0TElDTVB1cmVTaWRlRXhpdHMpOgorICAgICAgICAoSlNDOjpCMzo6dGVz
dExJQ01QdXJlV3JpdGVzUGlubmVkKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RMSUNNUHVyZVdy
aXRlcyk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0TElDTVJlYWRzTG9jYWxTdGF0ZSk6CisgICAg
ICAgIChKU0M6OkIzOjp0ZXN0TElDTVJlYWRzUGlubmVkKToKKyAgICAgICAgKEpTQzo6QjM6OnRl
c3RMSUNNUmVhZHMpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdExJQ01QdXJlTm90QmFja3dhcmRz
RG9taW5hbnQpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdExJQ01QdXJlRm9pbGVkQnlDaGlsZCk6
CisgICAgICAgIChKU0M6OkIzOjp0ZXN0TElDTVB1cmVOb3RCYWNrd2FyZHNEb21pbmFudEZvaWxl
ZEJ5Q2hpbGQpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdExJQ01FeGl0c1NpZGV3YXlzKToKKyAg
ICAgICAgKEpTQzo6QjM6OnRlc3RMSUNNV3JpdGVzTG9jYWxTdGF0ZSk6CisgICAgICAgIChKU0M6
OkIzOjp0ZXN0TElDTVdyaXRlcyk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0TElDTUZlbmNlKToK
KyAgICAgICAgKEpTQzo6QjM6OnRlc3RMSUNNV3JpdGVzUGlubmVkKToKKyAgICAgICAgKEpTQzo6
QjM6OnRlc3RMSUNNQ29udHJvbERlcGVuZGVudCk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0TElD
TUNvbnRyb2xEZXBlbmRlbnROb3RCYWNrd2FyZHNEb21pbmFudCk6CisgICAgICAgIChKU0M6OkIz
Ojp0ZXN0TElDTUNvbnRyb2xEZXBlbmRlbnRTaWRlRXhpdHMpOgorICAgICAgICAoSlNDOjpCMzo6
dGVzdExJQ01SZWFkc1Bpbm5lZFdyaXRlc1Bpbm5lZCk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0
TElDTVJlYWRzV3JpdGVzRGlmZmVyZW50SGVhcHMpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdExJ
Q01SZWFkc1dyaXRlc092ZXJsYXBwaW5nSGVhcHMpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdExJ
Q01EZWZhdWx0Q2FsbCk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0U2h1ZmZsZURvZXNudFRyYXNo
Q2FsbGVlU2F2ZXMpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAg
ICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlQ2FsbE9yQ29uc3RydWN0VmFy
YXJnc1NwcmVhZCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBp
bGVDYWxsT3JDb25zdHJ1Y3RWYXJhcmdzKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2Vy
REZHVG9CMzo6Y29tcGlsZUNhbGxFdmFsKToKKyAgICAgICAgKiBqaXQvR1BSSW5mby5oOgorICAg
ICAgICAqIHJ1bnRpbWUvUHRyVGFnLmg6CisgICAgICAgICogd2FzbS9XYXNtQmluZGluZy5jcHA6
CisgICAgICAgIChKU0M6Oldhc206Ondhc21Ub1dhc20pOgorCiAyMDE4LTAzLTI5ICBLZWl0aCBN
aWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEFycmF5TW9kZSBzaG91
bGQgbm90IHRyeSB0byBnZXQgdGhlIERGRyB0byB0aGluayBpdCBjYW4gY29udmVydCBUeXBlZEFy
cmF5cwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJNYWNyb3MuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyTWFjcm9zLmNwcAko
cmV2aXNpb24gMjMwMDg3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJNYWNy
b3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsNyArMTI4LDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIGRvdWJsZSAoKmZtb2REb3VibGUpKGRvdWJsZSwgZG91YmxlKSA9
IGZtb2Q7CisgICAgICAgICAgICAgICAgYXV0byogZm1vZERvdWJsZSA9IHRhZ0NGdW5jdGlvblB0
cjxkb3VibGUgKCopKGRvdWJsZSwgZG91YmxlKT4oZm1vZCwgQjNDQ2FsbFB0clRhZyk7CiAgICAg
ICAgICAgICAgICAgaWYgKG1fdmFsdWUtPnR5cGUoKSA9PSBEb3VibGUpIHsKICAgICAgICAgICAg
ICAgICAgICAgVmFsdWUqIGZ1bmN0aW9uQWRkcmVzcyA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxD
b25zdFB0clZhbHVlPihtX2luZGV4LCBtX29yaWdpbiwgZm1vZERvdWJsZSk7CiAgICAgICAgICAg
ICAgICAgICAgIFZhbHVlKiByZXN1bHQgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8Q0NhbGxWYWx1
ZT4obV9pbmRleCwgRG91YmxlLCBtX29yaWdpbiwKQEAgLTUwNiwxMiArNTA2LDEzIEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBHUFJSZWcgaW5kZXggPSBwYXJhbXNbMF0uZ3By
KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IHBhcmFtcy5ncFNj
cmF0Y2goMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBHUFJSZWcgcG9pc29uU2NyYXRjaCA9
IHBhcmFtcy5ncFNjcmF0Y2goMSk7CisgICAgICAgICAgICAgICAgICAgICAgICBQdHJUYWcgdGFn
ID0gcHRyVGFnKFN3aXRjaFRhYmxlUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7CiAKICAgICAgICAg
ICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KEpJVENv
ZGVQb2lzb246OmtleSgpKSwgcG9pc29uU2NyYXRjaCk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoanVtcFRhYmxlKSwgc2NyYXRj
aCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQubG9hZDY0KENDYWxsSGVscGVyczo6QmFz
ZUluZGV4KHNjcmF0Y2gsIGluZGV4LCBDQ2FsbEhlbHBlcnM6OnRpbWVzUHRyKCkpLCBzY3JhdGNo
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC54b3I2NChwb2lzb25TY3JhdGNoLCBzY3Jh
dGNoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGppdC5qdW1wKHNjcmF0Y2gsIE5vUHRyVGFn
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5qdW1wKHNjcmF0Y2gsIHRhZyk7CiAKICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZXNlIGxhYmVscyBhcmUgZ3VhcmFudGVlZCB0byBi
ZSBwb3B1bGF0ZWQgYmVmb3JlIGVpdGhlciBsYXRlIHBhdGhzIG9yCiAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBsaW5rIHRhc2tzIHJ1bi4KQEAgLTUyMCwxNyArNTIxLDE0IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNVbmhhbmRsZWRJbmRleCkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGZhbGxUaHJv
dWdoID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVy
LmxvY2F0aW9uT2YoKmxhYmVscy5sYXN0KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGZhbGxUaHJvdWdoID0gbGlua0J1ZmZlci5s
b2NhdGlvbk9mKCpsYWJlbHMubGFzdCgpLCB0YWcpOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gdGFibGVTaXplOyBpLS07KQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGp1bXBUYWJsZVtpXSA9IGZhbGxUaHJvdWdo
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBs
YWJlbEluZGV4ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCB0YWJsZUluZGV4IDogaGFuZGxlZEluZGljZXMpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGp1bXBUYWJsZVt0YWJsZUluZGV4XSA9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mKCpsYWJlbHNbbGFi
ZWxJbmRleCsrXSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCB0YWJsZUluZGV4IDogaGFuZGxl
ZEluZGljZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqdW1wVGFibGVb
dGFibGVJbmRleF0gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoKmxhYmVsc1tsYWJlbEluZGV4Kytd
LCB0YWcpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAg
ICAgICB9KTsKICAgICAgICAgICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNMb3dlck1hY3Jvc0FmdGVyT3B0aW1pemF0aW9ucy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJNYWNyb3NBZnRlck9wdGltaXphdGlv
bnMuY3BwCShyZXZpc2lvbiAyMzAwODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNM
b3dlck1hY3Jvc0FmdGVyT3B0aW1pemF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05OSw5
ICs5OSw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgVmFsdWUqIGZ1bmN0aW9uQWRkcmVz
cyA9IG51bGxwdHI7CiAgICAgICAgICAgICAgICAgaWYgKG1fdmFsdWUtPnR5cGUoKSA9PSBEb3Vi
bGUpIHsKICAgICAgICAgICAgICAgICAgICAgZG91YmxlICgqY2VpbERvdWJsZSkoZG91YmxlKSA9
IGNlaWw7Ci0gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uQWRkcmVzcyA9IG1faW5zZXJ0aW9u
U2V0Lmluc2VydDxDb25zdFB0clZhbHVlPihtX2luZGV4LCBtX29yaWdpbiwgY2VpbERvdWJsZSk7
CisgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uQWRkcmVzcyA9IG1faW5zZXJ0aW9uU2V0Lmlu
c2VydDxDb25zdFB0clZhbHVlPihtX2luZGV4LCBtX29yaWdpbiwgdGFnQ0Z1bmN0aW9uUHRyKGNl
aWxEb3VibGUsIEIzQ0NhbGxQdHJUYWcpKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1f
dmFsdWUtPnR5cGUoKSA9PSBGbG9hdCkKLSAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25BZGRy
ZXNzID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PENvbnN0UHRyVmFsdWU+KG1faW5kZXgsIG1fb3Jp
Z2luLCBjZWlsZik7CisgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uQWRkcmVzcyA9IG1faW5z
ZXJ0aW9uU2V0Lmluc2VydDxDb25zdFB0clZhbHVlPihtX2luZGV4LCBtX29yaWdpbiwgdGFnQ0Z1
bmN0aW9uUHRyKGNlaWxmLCBCM0NDYWxsUHRyVGFnKSk7CiAgICAgICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogCkBAIC0x
MjEsOSArMTIxLDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBWYWx1ZSogZnVuY3Rpb25B
ZGRyZXNzID0gbnVsbHB0cjsKICAgICAgICAgICAgICAgICBpZiAobV92YWx1ZS0+dHlwZSgpID09
IERvdWJsZSkgewogICAgICAgICAgICAgICAgICAgICBkb3VibGUgKCpmbG9vckRvdWJsZSkoZG91
YmxlKSA9IGZsb29yOwotICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbkFkZHJlc3MgPSBtX2lu
c2VydGlvblNldC5pbnNlcnQ8Q29uc3RQdHJWYWx1ZT4obV9pbmRleCwgbV9vcmlnaW4sIGZsb29y
RG91YmxlKTsKKyAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25BZGRyZXNzID0gbV9pbnNlcnRp
b25TZXQuaW5zZXJ0PENvbnN0UHRyVmFsdWU+KG1faW5kZXgsIG1fb3JpZ2luLCB0YWdDRnVuY3Rp
b25QdHIoZmxvb3JEb3VibGUsIEIzQ0NhbGxQdHJUYWcpKTsKICAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKG1fdmFsdWUtPnR5cGUoKSA9PSBGbG9hdCkKLSAgICAgICAgICAgICAgICAgICAgZnVu
Y3Rpb25BZGRyZXNzID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PENvbnN0UHRyVmFsdWU+KG1faW5k
ZXgsIG1fb3JpZ2luLCBmbG9vcmYpOworICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbkFkZHJl
c3MgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8Q29uc3RQdHJWYWx1ZT4obV9pbmRleCwgbV9vcmln
aW4sIHRhZ0NGdW5jdGlvblB0cihmbG9vcmYsIEIzQ0NhbGxQdHJUYWcpKTsKICAgICAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01hdGhFeHRyYXMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01hdGhFeHRyYXMuY3BwCShy
ZXZpc2lvbiAyMzAwODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNYXRoRXh0cmFz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJCM1Vwc2ls
b25WYWx1ZS5oIgogI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTWF0aENv
bW1vbi5oIgorI2luY2x1ZGUgIlB0clRhZy5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKIApAQCAtNTYsNyArNTcsNyBAQCBzdGQ6OnBhaXI8QmFzaWNCbG9jayosIFZhbHVlKj4g
cG93RG91YmxlCiAKICAgICAvLyBGdW5jdGlvbiBjYWxsLgogICAgIFZhbHVlKiB5QXNEb3VibGUg
PSBmdW5jdGlvbkNhbGxDYXNlLT5hcHBlbmROZXc8VmFsdWU+KHByb2NlZHVyZSwgSVRvRCwgb3Jp
Z2luLCB5KTsKLSAgICBkb3VibGUgKCpwb3dEb3VibGUpKGRvdWJsZSwgZG91YmxlKSA9IHBvdzsK
KyAgICBhdXRvKiBwb3dEb3VibGUgPSB0YWdDRnVuY3Rpb25QdHI8ZG91YmxlICgqKShkb3VibGUs
IGRvdWJsZSk+KHBvdywgQjNDQ2FsbFB0clRhZyk7CiAgICAgVmFsdWUqIHBvd1Jlc3VsdCA9IGZ1
bmN0aW9uQ2FsbENhc2UtPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPigKICAgICAgICAgcHJvY2VkdXJl
LCBEb3VibGUsIG9yaWdpbiwKICAgICAgICAgZnVuY3Rpb25DYWxsQ2FzZS0+YXBwZW5kTmV3PENv
bnN0UHRyVmFsdWU+KHByb2NlZHVyZSwgb3JpZ2luLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHBvd0Rv
dWJsZSkpLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGgu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVu
Z3RoLmNwcAkocmV2aXNpb24gMjMwMDg3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
UmVkdWNlU3RyZW5ndGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTU5OSw3ICsxNTk5LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgY2FzZSBDQ2FsbDogewogICAgICAgICAgICAgLy8gVHVybiB0aGlz
OiBDYWxsKGZtb2QsIGNvbnN0YW50MSwgY29uc3RhbnQyKQogICAgICAgICAgICAgLy8gSW50byB0
aGlzOiBmY2FsbC1jb25zdGFudChjb25zdGFudDEsIGNvbnN0YW50MikKLSAgICAgICAgICAgIGRv
dWJsZSgqZm1vZERvdWJsZSkoZG91YmxlLCBkb3VibGUpID0gZm1vZDsKKyAgICAgICAgICAgIGF1
dG8qIGZtb2REb3VibGUgPSB0YWdDRnVuY3Rpb25QdHI8ZG91YmxlICgqKShkb3VibGUsIGRvdWJs
ZSk+KGZtb2QsIEIzQ0NhbGxQdHJUYWcpOwogICAgICAgICAgICAgaWYgKG1fdmFsdWUtPnR5cGUo
KSA9PSBEb3VibGUKICAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5udW1DaGlsZHJlbigpID09
IDMKICAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+aXNJbnRQdHIocmVpbnRl
cnByZXRfY2FzdDxpbnRwdHJfdD4oZm1vZERvdWJsZSkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvdGVzdGIzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvdGVzdGIzLmNwcAkocmV2aXNpb24gMjMwMDg3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL3Rlc3RiMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMjMzLDcgKzEwMjMzLDcgQEAgdm9p
ZCB0ZXN0Q2FsbFNpbXBsZShpbnQgYSwgaW50IGIpCiAgICAgICAgIHByb2MsIFJldHVybiwgT3Jp
Z2luKCksCiAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPigKICAgICAgICAgICAg
IHByb2MsIEludDMyLCBPcmlnaW4oKSwKLSAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25z
dFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYml0d2lzZV9jYXN0PHZvaWQqPihzaW1wbGVGdW5j
dGlvbikpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCB0YWdDRnVuY3Rpb25QdHI8dm9pZCo+KHNpbXBsZUZ1bmN0aW9uLCBCM0NDYWxs
UHRyVGFnKSksCiAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCksCiAgICAgICAgICAgICByb290
LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFy
Z3VtZW50R1BSMSkpKTsKIApAQCAtMTAyNjAsNyArMTAyNjAsNyBAQCB2b2lkIHRlc3RDYWxsUmFy
ZShpbnQgYSwgaW50IGIpCiAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAgICAg
IHJhcmUtPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPigKICAgICAgICAgICAgIHByb2MsIEludDMyLCBP
cmlnaW4oKSwKLSAgICAgICAgICAgIHJhcmUtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9j
LCBPcmlnaW4oKSwgYml0d2lzZV9jYXN0PHZvaWQqPihzaW1wbGVGdW5jdGlvbikpLAorICAgICAg
ICAgICAgcmFyZS0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCB0YWdD
RnVuY3Rpb25QdHI8dm9pZCo+KHNpbXBsZUZ1bmN0aW9uLCBCM0NDYWxsUHRyVGFnKSksCiAgICAg
ICAgICAgICByYXJlLT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IEdQUkluZm86OmFyZ3VtZW50R1BSMSksCiAgICAgICAgICAgICByYXJlLT5hcHBlbmROZXc8QXJn
dW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMikpKTsK
IApAQCAtMTAyODksNyArMTAyODksNyBAQCB2b2lkIHRlc3RDYWxsUmFyZUxpdmUoaW50IGEsIGlu
dCBiLCBpbnQgCiAgICAgICAgICAgICBwcm9jLCBBZGQsIE9yaWdpbigpLAogICAgICAgICAgICAg
cmFyZS0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KAogICAgICAgICAgICAgICAgIHByb2MsIEludDMy
LCBPcmlnaW4oKSwKLSAgICAgICAgICAgICAgICByYXJlLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1
ZT4ocHJvYywgT3JpZ2luKCksIGJpdHdpc2VfY2FzdDx2b2lkKj4oc2ltcGxlRnVuY3Rpb24pKSwK
KyAgICAgICAgICAgICAgICByYXJlLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3Jp
Z2luKCksIHRhZ0NGdW5jdGlvblB0cjx2b2lkKj4oc2ltcGxlRnVuY3Rpb24sIEIzQ0NhbGxQdHJU
YWcpKSwKICAgICAgICAgICAgICAgICByYXJlLT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSksCiAgICAgICAgICAgICAgICAg
cmFyZS0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjIpKSwKICAgICAgICAgICAgIHJhcmUtPmFwcGVuZE5ldzxWYWx1ZT4oCkBA
IC0xMDMwNyw3ICsxMDMwNyw3IEBAIHZvaWQgdGVzdENhbGxTaW1wbGVQdXJlKGludCBhLCBpbnQg
YikKICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKICAgICAgICAgcm9vdC0+YXBwZW5k
TmV3PENDYWxsVmFsdWU+KAogICAgICAgICAgICAgcHJvYywgSW50MzIsIE9yaWdpbigpLCBFZmZl
Y3RzOjpub25lKCksCi0gICAgICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIGJpdHdpc2VfY2FzdDx2b2lkKj4oc2ltcGxlRnVuY3Rpb24pKSwKKyAg
ICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwg
dGFnQ0Z1bmN0aW9uUHRyPHZvaWQqPihzaW1wbGVGdW5jdGlvbiwgQjNDQ2FsbFB0clRhZykpLAog
ICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdp
bigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApLAogICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3
PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEp
KSk7CiAKQEAgLTEwMzMwLDcgKzEwMzMwLDcgQEAgdm9pZCB0ZXN0Q2FsbEZ1bmN0aW9uV2l0aEhl
bGxhQXJndW1lbnRzKAogCiAgICAgQ0NhbGxWYWx1ZSogY2FsbCA9IHJvb3QtPmFwcGVuZE5ldzxD
Q2FsbFZhbHVlPigKICAgICAgICAgcHJvYywgSW50MzIsIE9yaWdpbigpLAotICAgICAgICByb290
LT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGJpdHdpc2VfY2FzdDx2
b2lkKj4oZnVuY3Rpb25XaXRoSGVsbGFBcmd1bWVudHMpKSk7CisgICAgICAgIHJvb3QtPmFwcGVu
ZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgdGFnQ0Z1bmN0aW9uUHRyPHZvaWQq
PihmdW5jdGlvbldpdGhIZWxsYUFyZ3VtZW50cywgQjNDQ2FsbFB0clRhZykpKTsKICAgICBjYWxs
LT5jaGlsZHJlbigpLmFwcGVuZFZlY3RvcihhcmdzKTsKICAgICAKICAgICByb290LT5hcHBlbmRO
ZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgY2FsbCk7CkBAIC0xMDM1Niw3
ICsxMDM1Niw3IEBAIHZvaWQgdGVzdENhbGxGdW5jdGlvbldpdGhIZWxsYUFyZ3VtZW50czIKIAog
ICAgIENDYWxsVmFsdWUqIGNhbGwgPSByb290LT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4oCiAgICAg
ICAgIHByb2MsIEludDY0LCBPcmlnaW4oKSwKLSAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0
UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KGZ1bmN0aW9uV2l0
aEhlbGxhQXJndW1lbnRzMikpKTsKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0UHRyVmFs
dWU+KHByb2MsIE9yaWdpbigpLCB0YWdDRnVuY3Rpb25QdHI8dm9pZCo+KGZ1bmN0aW9uV2l0aEhl
bGxhQXJndW1lbnRzMiwgQjNDQ2FsbFB0clRhZykpKTsKICAgICBjYWxsLT5jaGlsZHJlbigpLmFw
cGVuZFZlY3RvcihhcmdzKTsKICAgICAKICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUo
cHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgY2FsbCk7CkBAIC0xMDM3OCw3ICsxMDM3OCw3IEBAIHZv
aWQgdGVzdENhbGxGdW5jdGlvbldpdGhIZWxsYUFyZ3VtZW50czMKIAogICAgIENDYWxsVmFsdWUq
IGNhbGwgPSByb290LT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4oCiAgICAgICAgIHByb2MsIEludDMy
LCBPcmlnaW4oKSwKLSAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KGZ1bmN0aW9uV2l0aEhlbGxhQXJndW1lbnRz
MykpKTsKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdp
bigpLCB0YWdDRnVuY3Rpb25QdHI8dm9pZCo+KGZ1bmN0aW9uV2l0aEhlbGxhQXJndW1lbnRzMywg
QjNDQ2FsbFB0clRhZykpKTsKICAgICBjYWxsLT5jaGlsZHJlbigpLmFwcGVuZFZlY3Rvcihhcmdz
KTsKICAgICAKICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBP
cmlnaW4oKSwgY2FsbCk7CkBAIC0xMDQyOSw3ICsxMDQyOSw3IEBAIHZvaWQgdGVzdENhbGxTaW1w
bGVEb3VibGUoZG91YmxlIGEsIGRvdWIKICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwK
ICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KAogICAgICAgICAgICAgcHJvYywg
RG91YmxlLCBPcmlnaW4oKSwKLSAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdFB0clZh
bHVlPihwcm9jLCBPcmlnaW4oKSwgYml0d2lzZV9jYXN0PHZvaWQqPihzaW1wbGVGdW5jdGlvbkRv
dWJsZSkpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCB0YWdDRnVuY3Rpb25QdHI8dm9pZCo+KHNpbXBsZUZ1bmN0aW9uRG91YmxlLCBC
M0NDYWxsUHRyVGFnKSksCiAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdW
YWx1ZT4ocHJvYywgT3JpZ2luKCksIEZQUkluZm86OmFyZ3VtZW50RlBSMCksCiAgICAgICAgICAg
ICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEZQUklu
Zm86OmFyZ3VtZW50RlBSMSkpKTsKIApAQCAtMTA0NTUsNyArMTA0NTUsNyBAQCB2b2lkIHRlc3RD
YWxsU2ltcGxlRmxvYXQoZmxvYXQgYSwgZmxvYXQgCiAgICAgICAgIHByb2MsIFJldHVybiwgT3Jp
Z2luKCksCiAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPigKICAgICAgICAgICAg
IHByb2MsIEZsb2F0LCBPcmlnaW4oKSwKLSAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25z
dFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYml0d2lzZV9jYXN0PHZvaWQqPihzaW1wbGVGdW5j
dGlvbkZsb2F0KSksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIHRhZ0NGdW5jdGlvblB0cjx2b2lkKj4oc2ltcGxlRnVuY3Rpb25GbG9h
dCwgQjNDQ2FsbFB0clRhZykpLAogICAgICAgICAgICAgZmxvYXRWYWx1ZTEsCiAgICAgICAgICAg
ICBmbG9hdFZhbHVlMikpOwogCkBAIC0xMDQ3OCw3ICsxMDQ3OCw3IEBAIHZvaWQgdGVzdENhbGxG
dW5jdGlvbldpdGhIZWxsYURvdWJsZUFyZ3UKIAogICAgIENDYWxsVmFsdWUqIGNhbGwgPSByb290
LT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4oCiAgICAgICAgIHByb2MsIERvdWJsZSwgT3JpZ2luKCks
Ci0gICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwg
Yml0d2lzZV9jYXN0PHZvaWQqPihmdW5jdGlvbldpdGhIZWxsYURvdWJsZUFyZ3VtZW50cykpKTsK
KyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCB0
YWdDRnVuY3Rpb25QdHI8dm9pZCo+KGZ1bmN0aW9uV2l0aEhlbGxhRG91YmxlQXJndW1lbnRzLCBC
M0NDYWxsUHRyVGFnKSkpOwogICAgIGNhbGwtPmNoaWxkcmVuKCkuYXBwZW5kVmVjdG9yKGFyZ3Mp
OwogICAgIAogICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9y
aWdpbigpLCBjYWxsKTsKQEAgLTEwNTAyLDcgKzEwNTAyLDcgQEAgdm9pZCB0ZXN0Q2FsbEZ1bmN0
aW9uV2l0aEhlbGxhRmxvYXRBcmd1bQogCiAgICAgQ0NhbGxWYWx1ZSogY2FsbCA9IHJvb3QtPmFw
cGVuZE5ldzxDQ2FsbFZhbHVlPigKICAgICAgICAgcHJvYywgRmxvYXQsIE9yaWdpbigpLAotICAg
ICAgICByb290LT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGJpdHdp
c2VfY2FzdDx2b2lkKj4oZnVuY3Rpb25XaXRoSGVsbGFGbG9hdEFyZ3VtZW50cykpKTsKKyAgICAg
ICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCB0YWdDRnVu
Y3Rpb25QdHI8dm9pZCo+KGZ1bmN0aW9uV2l0aEhlbGxhRmxvYXRBcmd1bWVudHMsIEIzQ0NhbGxQ
dHJUYWcpKSk7CiAgICAgY2FsbC0+Y2hpbGRyZW4oKS5hcHBlbmRWZWN0b3IoYXJncyk7CiAgICAg
CiAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2luKCks
IGNhbGwpOwpAQCAtMTA1MjUsNyArMTA1MjUsNyBAQCB2b2lkIHRlc3RMaW5lYXJTY2FuV2l0aENh
bGxlZU9uU3RhY2soKQogICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAogICAgICAgICBy
b290LT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4oCiAgICAgICAgICAgICBwcm9jLCBJbnQzMiwgT3Jp
Z2luKCksCi0gICAgICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywg
T3JpZ2luKCksIGJpdHdpc2VfY2FzdDx2b2lkKj4oc2ltcGxlRnVuY3Rpb24pKSwKKyAgICAgICAg
ICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgdGFnQ0Z1
bmN0aW9uUHRyPHZvaWQqPihzaW1wbGVGdW5jdGlvbiwgQjNDQ2FsbFB0clRhZykpLAogICAgICAg
ICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBH
UFJJbmZvOjphcmd1bWVudEdQUjApLAogICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3Vt
ZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpKSk7CiAK
QEAgLTEzMDQzLDEyICsxMzA0MywxMyBAQCB2b2lkIHRlc3RJbnRlcnByZXRlcigpCiAgICAgICAg
ICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NChKSVRDb2RlUG9pc29uOjpr
ZXkoKSksIHBvaXNvblNjcmF0Y2gpOwogICAgICAgICAgICAgaml0LmxvYWQ2NChDQ2FsbEhlbHBl
cnM6OkJhc2VJbmRleChzY3JhdGNoLCBwYXJhbXNbMF0uZ3ByKCksIENDYWxsSGVscGVyczo6dGlt
ZXNQdHIoKSksIHNjcmF0Y2gpOwogICAgICAgICAgICAgaml0LnhvcjY0KHBvaXNvblNjcmF0Y2gs
IHNjcmF0Y2gpOwotICAgICAgICAgICAgaml0Lmp1bXAoc2NyYXRjaCwgTm9QdHJUYWcpOworICAg
ICAgICAgICAgUHRyVGFnIHRhZyA9IHB0clRhZyhTd2l0Y2hUYWJsZVB0clRhZywgbmV4dFB0clRh
Z0lEKCkpOworICAgICAgICAgICAgaml0Lmp1bXAoc2NyYXRjaCwgdGFnKTsKIAogICAgICAgICAg
ICAgaml0LmFkZExpbmtUYXNrKAogICAgICAgICAgICAgICAgIFsmLCBqdW1wVGFibGUsIGxhYmVs
c10gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKICAgICAgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gbGFiZWxzLnNpemUoKTsgaS0tOykKLSAgICAgICAgICAgICAgICAgICAgICAg
IGp1bXBUYWJsZVtpXSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZigqbGFiZWxzW2ldLCBOb1B0clRh
Zyk7CisgICAgICAgICAgICAgICAgICAgICAgICBqdW1wVGFibGVbaV0gPSBsaW5rQnVmZmVyLmxv
Y2F0aW9uT2YoKmxhYmVsc1tpXSwgdGFnKTsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAg
fSk7CiAgICAgCkBAIC0xMzEzMSw3ICsxMzEzMiw3IEBAIHZvaWQgdGVzdEludGVycHJldGVyKCkK
ICAgICBwcmludC0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KAogICAgICAgICBwcm9jLCBWb2lkLCBP
cmlnaW4oKSwKICAgICAgICAgcHJpbnQtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPigKLSAgICAg
ICAgICAgIHByb2MsIE9yaWdpbigpLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KGludGVycHJldGVyUHJp
bnQpKSwKKyAgICAgICAgICAgIHByb2MsIE9yaWdpbigpLCB0YWdDRnVuY3Rpb25QdHI8dm9pZCo+
KGludGVycHJldGVyUHJpbnQsIEIzQ0NhbGxQdHJUYWcpKSwKICAgICAgICAgY29udGV4dCwKICAg
ICAgICAgcHJpbnQtPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9hZCwgcG9pbnRlclR5
cGUoKSwgT3JpZ2luKCksIGRhdGFQb2ludGVyVmFsdWUpKTsKICAgICBwcmludC0+YXBwZW5kTmV3
PFZhcmlhYmxlVmFsdWU+KApAQCAtMTQ3MTcsNyArMTQ3MTgsNyBAQCB2b2lkIHRlc3RMSUNNUHVy
ZSgpCiAgICAgICAgIFsmXSAoQmFzaWNCbG9jayogbG9vcCwgVmFsdWUqKSAtPiBWYWx1ZSogewog
ICAgICAgICAgICAgcmV0dXJuIGxvb3AtPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPigKICAgICAgICAg
ICAgICAgICBwcm9jLCBJbnQzMiwgT3JpZ2luKCksIEVmZmVjdHM6Om5vbmUoKSwKLSAgICAgICAg
ICAgICAgICBsb29wLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGJp
dHdpc2VfY2FzdDx2b2lkKj4ob25lRnVuY3Rpb24pKSwKKyAgICAgICAgICAgICAgICBsb29wLT5h
cHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIHRhZ0NGdW5jdGlvblB0cjx2
b2lkKj4ob25lRnVuY3Rpb24sIEIzQ0NhbGxQdHJUYWcpKSwKICAgICAgICAgICAgICAgICBsb29w
LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFy
Z3VtZW50R1BSMCkpOwogICAgICAgICB9KTsKICAgICAKQEAgLTE0NzM2LDExICsxNDczNywxMSBA
QCB2b2lkIHRlc3RMSUNNUHVyZVNpZGVFeGl0cygpCiAgICAgICAgICAgICBlZmZlY3RzLmV4aXRz
U2lkZXdheXMgPSB0cnVlOwogICAgICAgICAgICAgbG9vcC0+YXBwZW5kTmV3PENDYWxsVmFsdWU+
KAogICAgICAgICAgICAgICAgIHByb2MsIFZvaWQsIE9yaWdpbigpLCBlZmZlY3RzLAotICAgICAg
ICAgICAgICAgIGxvb3AtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwg
Yml0d2lzZV9jYXN0PHZvaWQqPihub09wRnVuY3Rpb24pKSk7CisgICAgICAgICAgICAgICAgbG9v
cC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCB0YWdDRnVuY3Rpb25Q
dHI8dm9pZCo+KG5vT3BGdW5jdGlvbiwgQjNDQ2FsbFB0clRhZykpKTsKIAogICAgICAgICAgICAg
cmV0dXJuIGxvb3AtPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPigKICAgICAgICAgICAgICAgICBwcm9j
LCBJbnQzMiwgT3JpZ2luKCksIEVmZmVjdHM6Om5vbmUoKSwKLSAgICAgICAgICAgICAgICBsb29w
LT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGJpdHdpc2VfY2FzdDx2
b2lkKj4ob25lRnVuY3Rpb24pKSwKKyAgICAgICAgICAgICAgICBsb29wLT5hcHBlbmROZXc8Q29u
c3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIHRhZ0NGdW5jdGlvblB0cjx2b2lkKj4ob25lRnVu
Y3Rpb24sIEIzQ0NhbGxQdHJUYWcpKSwKICAgICAgICAgICAgICAgICBsb29wLT5hcHBlbmROZXc8
QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkp
OwogICAgICAgICB9KTsKICAgICAKQEAgLTE0NzU5LDExICsxNDc2MCwxMSBAQCB2b2lkIHRlc3RM
SUNNUHVyZVdyaXRlc1Bpbm5lZCgpCiAgICAgICAgICAgICBlZmZlY3RzLndyaXRlc1Bpbm5lZCA9
IHRydWU7CiAgICAgICAgICAgICBsb29wLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4oCiAgICAgICAg
ICAgICAgICAgcHJvYywgVm9pZCwgT3JpZ2luKCksIGVmZmVjdHMsCi0gICAgICAgICAgICAgICAg
bG9vcC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBiaXR3aXNlX2Nh
c3Q8dm9pZCo+KG5vT3BGdW5jdGlvbikpKTsKKyAgICAgICAgICAgICAgICBsb29wLT5hcHBlbmRO
ZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIHRhZ0NGdW5jdGlvblB0cjx2b2lkKj4o
bm9PcEZ1bmN0aW9uLCBCM0NDYWxsUHRyVGFnKSkpOwogCiAgICAgICAgICAgICByZXR1cm4gbG9v
cC0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KAogICAgICAgICAgICAgICAgIHByb2MsIEludDMyLCBP
cmlnaW4oKSwgRWZmZWN0czo6bm9uZSgpLAotICAgICAgICAgICAgICAgIGxvb3AtPmFwcGVuZE5l
dzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYml0d2lzZV9jYXN0PHZvaWQqPihvbmVG
dW5jdGlvbikpLAorICAgICAgICAgICAgICAgIGxvb3AtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVl
Pihwcm9jLCBPcmlnaW4oKSwgdGFnQ0Z1bmN0aW9uUHRyPHZvaWQqPihvbmVGdW5jdGlvbiwgQjND
Q2FsbFB0clRhZykpLAogICAgICAgICAgICAgICAgIGxvb3AtPmFwcGVuZE5ldzxBcmd1bWVudFJl
Z1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CiAgICAgICAg
IH0pOwogICAgIApAQCAtMTQ3ODIsMTEgKzE0NzgzLDExIEBAIHZvaWQgdGVzdExJQ01QdXJlV3Jp
dGVzKCkKICAgICAgICAgICAgIGVmZmVjdHMud3JpdGVzID0gSGVhcFJhbmdlKDYzNDc5KTsKICAg
ICAgICAgICAgIGxvb3AtPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPigKICAgICAgICAgICAgICAgICBw
cm9jLCBWb2lkLCBPcmlnaW4oKSwgZWZmZWN0cywKLSAgICAgICAgICAgICAgICBsb29wLT5hcHBl
bmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGJpdHdpc2VfY2FzdDx2b2lkKj4o
bm9PcEZ1bmN0aW9uKSkpOworICAgICAgICAgICAgICAgIGxvb3AtPmFwcGVuZE5ldzxDb25zdFB0
clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgdGFnQ0Z1bmN0aW9uUHRyPHZvaWQqPihub09wRnVuY3Rp
b24sIEIzQ0NhbGxQdHJUYWcpKSk7CiAKICAgICAgICAgICAgIHJldHVybiBsb29wLT5hcHBlbmRO
ZXc8Q0NhbGxWYWx1ZT4oCiAgICAgICAgICAgICAgICAgcHJvYywgSW50MzIsIE9yaWdpbigpLCBF
ZmZlY3RzOjpub25lKCksCi0gICAgICAgICAgICAgICAgbG9vcC0+YXBwZW5kTmV3PENvbnN0UHRy
VmFsdWU+KHByb2MsIE9yaWdpbigpLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KG9uZUZ1bmN0aW9uKSks
CisgICAgICAgICAgICAgICAgbG9vcC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9y
aWdpbigpLCB0YWdDRnVuY3Rpb25QdHI8dm9pZCo+KG9uZUZ1bmN0aW9uLCBCM0NDYWxsUHRyVGFn
KSksCiAgICAgICAgICAgICAgICAgbG9vcC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHBy
b2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKICAgICAgICAgfSk7CiAgICAg
CkBAIC0xNDgwNSw3ICsxNDgwNiw3IEBAIHZvaWQgdGVzdExJQ01SZWFkc0xvY2FsU3RhdGUoKQog
ICAgICAgICAgICAgZWZmZWN0cy5yZWFkc0xvY2FsU3RhdGUgPSB0cnVlOwogICAgICAgICAgICAg
cmV0dXJuIGxvb3AtPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPigKICAgICAgICAgICAgICAgICBwcm9j
LCBJbnQzMiwgT3JpZ2luKCksIGVmZmVjdHMsCi0gICAgICAgICAgICAgICAgbG9vcC0+YXBwZW5k
TmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KG9u
ZUZ1bmN0aW9uKSksCisgICAgICAgICAgICAgICAgbG9vcC0+YXBwZW5kTmV3PENvbnN0UHRyVmFs
dWU+KHByb2MsIE9yaWdpbigpLCB0YWdDRnVuY3Rpb25QdHI8dm9pZCo+KG9uZUZ1bmN0aW9uLCBC
M0NDYWxsUHRyVGFnKSksCiAgICAgICAgICAgICAgICAgbG9vcC0+YXBwZW5kTmV3PEFyZ3VtZW50
UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKICAgICAg
ICAgfSk7CiAgICAgCkBAIC0xNDgyNCw3ICsxNDgyNSw3IEBAIHZvaWQgdGVzdExJQ01SZWFkc1Bp
bm5lZCgpCiAgICAgICAgICAgICBlZmZlY3RzLnJlYWRzUGlubmVkID0gdHJ1ZTsKICAgICAgICAg
ICAgIHJldHVybiBsb29wLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4oCiAgICAgICAgICAgICAgICAg
cHJvYywgSW50MzIsIE9yaWdpbigpLCBlZmZlY3RzLAotICAgICAgICAgICAgICAgIGxvb3AtPmFw
cGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYml0d2lzZV9jYXN0PHZvaWQq
PihvbmVGdW5jdGlvbikpLAorICAgICAgICAgICAgICAgIGxvb3AtPmFwcGVuZE5ldzxDb25zdFB0
clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgdGFnQ0Z1bmN0aW9uUHRyPHZvaWQqPihvbmVGdW5jdGlv
biwgQjNDQ2FsbFB0clRhZykpLAogICAgICAgICAgICAgICAgIGxvb3AtPmFwcGVuZE5ldzxBcmd1
bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CiAg
ICAgICAgIH0pOwogICAgIApAQCAtMTQ4NDMsNyArMTQ4NDQsNyBAQCB2b2lkIHRlc3RMSUNNUmVh
ZHMoKQogICAgICAgICAgICAgZWZmZWN0cy5yZWFkcyA9IEhlYXBSYW5nZTo6dG9wKCk7CiAgICAg
ICAgICAgICByZXR1cm4gbG9vcC0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KAogICAgICAgICAgICAg
ICAgIHByb2MsIEludDMyLCBPcmlnaW4oKSwgZWZmZWN0cywKLSAgICAgICAgICAgICAgICBsb29w
LT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGJpdHdpc2VfY2FzdDx2
b2lkKj4ob25lRnVuY3Rpb24pKSwKKyAgICAgICAgICAgICAgICBsb29wLT5hcHBlbmROZXc8Q29u
c3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIHRhZ0NGdW5jdGlvblB0cjx2b2lkKj4ob25lRnVu
Y3Rpb24sIEIzQ0NhbGxQdHJUYWcpKSwKICAgICAgICAgICAgICAgICBsb29wLT5hcHBlbmROZXc8
QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkp
OwogICAgICAgICB9KTsKICAgICAKQEAgLTE0ODYxLDcgKzE0ODYyLDcgQEAgdm9pZCB0ZXN0TElD
TVB1cmVOb3RCYWNrd2FyZHNEb21pbmFudCgpCiAgICAgICAgIFsmXSAoQmFzaWNCbG9jayogbG9v
cCwgVmFsdWUqKSAtPiBWYWx1ZSogewogICAgICAgICAgICAgcmV0dXJuIGxvb3AtPmFwcGVuZE5l
dzxDQ2FsbFZhbHVlPigKICAgICAgICAgICAgICAgICBwcm9jLCBJbnQzMiwgT3JpZ2luKCksIEVm
ZmVjdHM6Om5vbmUoKSwKLSAgICAgICAgICAgICAgICBsb29wLT5hcHBlbmROZXc8Q29uc3RQdHJW
YWx1ZT4ocHJvYywgT3JpZ2luKCksIGJpdHdpc2VfY2FzdDx2b2lkKj4ob25lRnVuY3Rpb24pKSwK
KyAgICAgICAgICAgICAgICBsb29wLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3Jp
Z2luKCksIHRhZ0NGdW5jdGlvblB0cjx2b2lkKj4ob25lRnVuY3Rpb24sIEIzQ0NhbGxQdHJUYWcp
KSwKICAgICAgICAgICAgICAgICBsb29wLT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOwogICAgICAgICB9KTsKICAgICAK
QEAgLTE0ODc4LDcgKzE0ODc5LDcgQEAgdm9pZCB0ZXN0TElDTVB1cmVGb2lsZWRCeUNoaWxkKCkK
ICAgICAgICAgWyZdIChCYXNpY0Jsb2NrKiBsb29wLCBWYWx1ZSogaW5kZXgpIC0+IFZhbHVlKiB7
CiAgICAgICAgICAgICByZXR1cm4gbG9vcC0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KAogICAgICAg
ICAgICAgICAgIHByb2MsIEludDMyLCBPcmlnaW4oKSwgRWZmZWN0czo6bm9uZSgpLAotICAgICAg
ICAgICAgICAgIGxvb3AtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwg
Yml0d2lzZV9jYXN0PHZvaWQqPihvbmVGdW5jdGlvbikpLAorICAgICAgICAgICAgICAgIGxvb3At
PmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgdGFnQ0Z1bmN0aW9uUHRy
PHZvaWQqPihvbmVGdW5jdGlvbiwgQjNDQ2FsbFB0clRhZykpLAogICAgICAgICAgICAgICAgIGxv
b3AtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6
YXJndW1lbnRHUFIwKSwKICAgICAgICAgICAgICAgICBpbmRleCk7CiAgICAgICAgIH0pOwpAQCAt
MTQ4OTcsNyArMTQ4OTgsNyBAQCB2b2lkIHRlc3RMSUNNUHVyZU5vdEJhY2t3YXJkc0RvbWluYW50
Rm9pCiAgICAgICAgIFsmXSAoQmFzaWNCbG9jayogbG9vcCwgVmFsdWUqIGluZGV4KSAtPiBWYWx1
ZSogewogICAgICAgICAgICAgcmV0dXJuIGxvb3AtPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPigKICAg
ICAgICAgICAgICAgICBwcm9jLCBJbnQzMiwgT3JpZ2luKCksIEVmZmVjdHM6Om5vbmUoKSwKLSAg
ICAgICAgICAgICAgICBsb29wLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2lu
KCksIGJpdHdpc2VfY2FzdDx2b2lkKj4ob25lRnVuY3Rpb24pKSwKKyAgICAgICAgICAgICAgICBs
b29wLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIHRhZ0NGdW5jdGlv
blB0cjx2b2lkKj4ob25lRnVuY3Rpb24sIEIzQ0NhbGxQdHJUYWcpKSwKICAgICAgICAgICAgICAg
ICBsb29wLT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUklu
Zm86OmFyZ3VtZW50R1BSMCksCiAgICAgICAgICAgICAgICAgaW5kZXgpOwogICAgICAgICB9KTsK
QEAgLTE0OTE3LDcgKzE0OTE4LDcgQEAgdm9pZCB0ZXN0TElDTUV4aXRzU2lkZXdheXMoKQogICAg
ICAgICAgICAgZWZmZWN0cy5leGl0c1NpZGV3YXlzID0gdHJ1ZTsKICAgICAgICAgICAgIHJldHVy
biBsb29wLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4oCiAgICAgICAgICAgICAgICAgcHJvYywgSW50
MzIsIE9yaWdpbigpLCBlZmZlY3RzLAotICAgICAgICAgICAgICAgIGxvb3AtPmFwcGVuZE5ldzxD
b25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYml0d2lzZV9jYXN0PHZvaWQqPihvbmVGdW5j
dGlvbikpLAorICAgICAgICAgICAgICAgIGxvb3AtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihw
cm9jLCBPcmlnaW4oKSwgdGFnQ0Z1bmN0aW9uUHRyPHZvaWQqPihvbmVGdW5jdGlvbiwgQjNDQ2Fs
bFB0clRhZykpLAogICAgICAgICAgICAgICAgIGxvb3AtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1Zh
bHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CiAgICAgICAgIH0p
OwogICAgIApAQCAtMTQ5MzYsNyArMTQ5MzcsNyBAQCB2b2lkIHRlc3RMSUNNV3JpdGVzTG9jYWxT
dGF0ZSgpCiAgICAgICAgICAgICBlZmZlY3RzLndyaXRlc0xvY2FsU3RhdGUgPSB0cnVlOwogICAg
ICAgICAgICAgcmV0dXJuIGxvb3AtPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPigKICAgICAgICAgICAg
ICAgICBwcm9jLCBJbnQzMiwgT3JpZ2luKCksIGVmZmVjdHMsCi0gICAgICAgICAgICAgICAgbG9v
cC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBiaXR3aXNlX2Nhc3Q8
dm9pZCo+KG9uZUZ1bmN0aW9uKSksCisgICAgICAgICAgICAgICAgbG9vcC0+YXBwZW5kTmV3PENv
bnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCB0YWdDRnVuY3Rpb25QdHI8dm9pZCo+KG9uZUZ1
bmN0aW9uLCBCM0NDYWxsUHRyVGFnKSksCiAgICAgICAgICAgICAgICAgbG9vcC0+YXBwZW5kTmV3
PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjAp
KTsKICAgICAgICAgfSk7CiAgICAgCkBAIC0xNDk1NSw3ICsxNDk1Niw3IEBAIHZvaWQgdGVzdExJ
Q01Xcml0ZXMoKQogICAgICAgICAgICAgZWZmZWN0cy53cml0ZXMgPSBIZWFwUmFuZ2UoNjY2KTsK
ICAgICAgICAgICAgIHJldHVybiBsb29wLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4oCiAgICAgICAg
ICAgICAgICAgcHJvYywgSW50MzIsIE9yaWdpbigpLCBlZmZlY3RzLAotICAgICAgICAgICAgICAg
IGxvb3AtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYml0d2lzZV9j
YXN0PHZvaWQqPihvbmVGdW5jdGlvbikpLAorICAgICAgICAgICAgICAgIGxvb3AtPmFwcGVuZE5l
dzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgdGFnQ0Z1bmN0aW9uUHRyPHZvaWQqPihv
bmVGdW5jdGlvbiwgQjNDQ2FsbFB0clRhZykpLAogICAgICAgICAgICAgICAgIGxvb3AtPmFwcGVu
ZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRH
UFIwKSk7CiAgICAgICAgIH0pOwogICAgIApAQCAtMTQ5NzQsNyArMTQ5NzUsNyBAQCB2b2lkIHRl
c3RMSUNNRmVuY2UoKQogICAgICAgICAgICAgZWZmZWN0cy5mZW5jZSA9IHRydWU7CiAgICAgICAg
ICAgICByZXR1cm4gbG9vcC0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KAogICAgICAgICAgICAgICAg
IHByb2MsIEludDMyLCBPcmlnaW4oKSwgZWZmZWN0cywKLSAgICAgICAgICAgICAgICBsb29wLT5h
cHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGJpdHdpc2VfY2FzdDx2b2lk
Kj4ob25lRnVuY3Rpb24pKSwKKyAgICAgICAgICAgICAgICBsb29wLT5hcHBlbmROZXc8Q29uc3RQ
dHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIHRhZ0NGdW5jdGlvblB0cjx2b2lkKj4ob25lRnVuY3Rp
b24sIEIzQ0NhbGxQdHJUYWcpKSwKICAgICAgICAgICAgICAgICBsb29wLT5hcHBlbmROZXc8QXJn
dW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOwog
ICAgICAgICB9KTsKICAgICAKQEAgLTE0OTkzLDcgKzE0OTk0LDcgQEAgdm9pZCB0ZXN0TElDTVdy
aXRlc1Bpbm5lZCgpCiAgICAgICAgICAgICBlZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7CiAg
ICAgICAgICAgICByZXR1cm4gbG9vcC0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KAogICAgICAgICAg
ICAgICAgIHByb2MsIEludDMyLCBPcmlnaW4oKSwgZWZmZWN0cywKLSAgICAgICAgICAgICAgICBs
b29wLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGJpdHdpc2VfY2Fz
dDx2b2lkKj4ob25lRnVuY3Rpb24pKSwKKyAgICAgICAgICAgICAgICBsb29wLT5hcHBlbmROZXc8
Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIHRhZ0NGdW5jdGlvblB0cjx2b2lkKj4ob25l
RnVuY3Rpb24sIEIzQ0NhbGxQdHJUYWcpKSwKICAgICAgICAgICAgICAgICBsb29wLT5hcHBlbmRO
ZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BS
MCkpOwogICAgICAgICB9KTsKICAgICAKQEAgLTE1MDEyLDcgKzE1MDEzLDcgQEAgdm9pZCB0ZXN0
TElDTUNvbnRyb2xEZXBlbmRlbnQoKQogICAgICAgICAgICAgZWZmZWN0cy5jb250cm9sRGVwZW5k
ZW50ID0gdHJ1ZTsKICAgICAgICAgICAgIHJldHVybiBsb29wLT5hcHBlbmROZXc8Q0NhbGxWYWx1
ZT4oCiAgICAgICAgICAgICAgICAgcHJvYywgSW50MzIsIE9yaWdpbigpLCBlZmZlY3RzLAotICAg
ICAgICAgICAgICAgIGxvb3AtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgYml0d2lzZV9jYXN0PHZvaWQqPihvbmVGdW5jdGlvbikpLAorICAgICAgICAgICAgICAgIGxv
b3AtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgdGFnQ0Z1bmN0aW9u
UHRyPHZvaWQqPihvbmVGdW5jdGlvbiwgQjNDQ2FsbFB0clRhZykpLAogICAgICAgICAgICAgICAg
IGxvb3AtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5m
bzo6YXJndW1lbnRHUFIwKSk7CiAgICAgICAgIH0pOwogICAgIApAQCAtMTUwMzIsNyArMTUwMzMs
NyBAQCB2b2lkIHRlc3RMSUNNQ29udHJvbERlcGVuZGVudE5vdEJhY2t3YXJkCiAgICAgICAgICAg
ICBlZmZlY3RzLmNvbnRyb2xEZXBlbmRlbnQgPSB0cnVlOwogICAgICAgICAgICAgcmV0dXJuIGxv
b3AtPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPigKICAgICAgICAgICAgICAgICBwcm9jLCBJbnQzMiwg
T3JpZ2luKCksIGVmZmVjdHMsCi0gICAgICAgICAgICAgICAgbG9vcC0+YXBwZW5kTmV3PENvbnN0
UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KG9uZUZ1bmN0aW9u
KSksCisgICAgICAgICAgICAgICAgbG9vcC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCB0YWdDRnVuY3Rpb25QdHI8dm9pZCo+KG9uZUZ1bmN0aW9uLCBCM0NDYWxsUHRy
VGFnKSksCiAgICAgICAgICAgICAgICAgbG9vcC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+
KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKICAgICAgICAgfSk7CiAg
ICAgCkBAIC0xNTA1MSwxMyArMTUwNTIsMTMgQEAgdm9pZCB0ZXN0TElDTUNvbnRyb2xEZXBlbmRl
bnRTaWRlRXhpdHMoKQogICAgICAgICAgICAgZWZmZWN0cy5leGl0c1NpZGV3YXlzID0gdHJ1ZTsK
ICAgICAgICAgICAgIGxvb3AtPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPigKICAgICAgICAgICAgICAg
ICBwcm9jLCBWb2lkLCBPcmlnaW4oKSwgZWZmZWN0cywKLSAgICAgICAgICAgICAgICBsb29wLT5h
cHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGJpdHdpc2VfY2FzdDx2b2lk
Kj4obm9PcEZ1bmN0aW9uKSkpOworICAgICAgICAgICAgICAgIGxvb3AtPmFwcGVuZE5ldzxDb25z
dFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgdGFnQ0Z1bmN0aW9uUHRyPHZvaWQqPihub09wRnVu
Y3Rpb24sIEIzQ0NhbGxQdHJUYWcpKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGVmZmVj
dHMgPSBFZmZlY3RzOjpub25lKCk7CiAgICAgICAgICAgICBlZmZlY3RzLmNvbnRyb2xEZXBlbmRl
bnQgPSB0cnVlOwogICAgICAgICAgICAgcmV0dXJuIGxvb3AtPmFwcGVuZE5ldzxDQ2FsbFZhbHVl
PigKICAgICAgICAgICAgICAgICBwcm9jLCBJbnQzMiwgT3JpZ2luKCksIGVmZmVjdHMsCi0gICAg
ICAgICAgICAgICAgbG9vcC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigp
LCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KG9uZUZ1bmN0aW9uKSksCisgICAgICAgICAgICAgICAgbG9v
cC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCB0YWdDRnVuY3Rpb25Q
dHI8dm9pZCo+KG9uZUZ1bmN0aW9uLCBCM0NDYWxsUHRyVGFnKSksCiAgICAgICAgICAgICAgICAg
bG9vcC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjApKTsKICAgICAgICAgfSk7CiAgICAgCkBAIC0xNTA3NiwxMyArMTUwNzcs
MTMgQEAgdm9pZCB0ZXN0TElDTVJlYWRzUGlubmVkV3JpdGVzUGlubmVkKCkKICAgICAgICAgICAg
IGVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1ZTsKICAgICAgICAgICAgIGxvb3AtPmFwcGVuZE5l
dzxDQ2FsbFZhbHVlPigKICAgICAgICAgICAgICAgICBwcm9jLCBWb2lkLCBPcmlnaW4oKSwgZWZm
ZWN0cywKLSAgICAgICAgICAgICAgICBsb29wLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIGJpdHdpc2VfY2FzdDx2b2lkKj4obm9PcEZ1bmN0aW9uKSkpOworICAgICAg
ICAgICAgICAgIGxvb3AtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwg
dGFnQ0Z1bmN0aW9uUHRyPHZvaWQqPihub09wRnVuY3Rpb24sIEIzQ0NhbGxQdHJUYWcpKSk7CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIGVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CiAgICAg
ICAgICAgICBlZmZlY3RzLnJlYWRzUGlubmVkID0gdHJ1ZTsKICAgICAgICAgICAgIHJldHVybiBs
b29wLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4oCiAgICAgICAgICAgICAgICAgcHJvYywgSW50MzIs
IE9yaWdpbigpLCBlZmZlY3RzLAotICAgICAgICAgICAgICAgIGxvb3AtPmFwcGVuZE5ldzxDb25z
dFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYml0d2lzZV9jYXN0PHZvaWQqPihvbmVGdW5jdGlv
bikpLAorICAgICAgICAgICAgICAgIGxvb3AtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9j
LCBPcmlnaW4oKSwgdGFnQ0Z1bmN0aW9uUHRyPHZvaWQqPihvbmVGdW5jdGlvbiwgQjNDQ2FsbFB0
clRhZykpLAogICAgICAgICAgICAgICAgIGxvb3AtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVl
Pihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CiAgICAgICAgIH0pOwog
ICAgIApAQCAtMTUxMDEsMTMgKzE1MTAyLDEzIEBAIHZvaWQgdGVzdExJQ01SZWFkc1dyaXRlc0Rp
ZmZlcmVudEhlYXBzKCkKICAgICAgICAgICAgIGVmZmVjdHMud3JpdGVzID0gSGVhcFJhbmdlKDY0
MzYpOwogICAgICAgICAgICAgbG9vcC0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KAogICAgICAgICAg
ICAgICAgIHByb2MsIFZvaWQsIE9yaWdpbigpLCBlZmZlY3RzLAotICAgICAgICAgICAgICAgIGxv
b3AtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYml0d2lzZV9jYXN0
PHZvaWQqPihub09wRnVuY3Rpb24pKSk7CisgICAgICAgICAgICAgICAgbG9vcC0+YXBwZW5kTmV3
PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCB0YWdDRnVuY3Rpb25QdHI8dm9pZCo+KG5v
T3BGdW5jdGlvbiwgQjNDQ2FsbFB0clRhZykpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAg
ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKICAgICAgICAgICAgIGVmZmVjdHMucmVhZHMgPSBI
ZWFwUmFuZ2UoNDg4Nik7CiAgICAgICAgICAgICByZXR1cm4gbG9vcC0+YXBwZW5kTmV3PENDYWxs
VmFsdWU+KAogICAgICAgICAgICAgICAgIHByb2MsIEludDMyLCBPcmlnaW4oKSwgZWZmZWN0cywK
LSAgICAgICAgICAgICAgICBsb29wLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3Jp
Z2luKCksIGJpdHdpc2VfY2FzdDx2b2lkKj4ob25lRnVuY3Rpb24pKSwKKyAgICAgICAgICAgICAg
ICBsb29wLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIHRhZ0NGdW5j
dGlvblB0cjx2b2lkKj4ob25lRnVuY3Rpb24sIEIzQ0NhbGxQdHJUYWcpKSwKICAgICAgICAgICAg
ICAgICBsb29wLT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQ
UkluZm86OmFyZ3VtZW50R1BSMCkpOwogICAgICAgICB9KTsKICAgICAKQEAgLTE1MTI2LDEzICsx
NTEyNywxMyBAQCB2b2lkIHRlc3RMSUNNUmVhZHNXcml0ZXNPdmVybGFwcGluZ0hlYXBzCiAgICAg
ICAgICAgICBlZmZlY3RzLndyaXRlcyA9IEhlYXBSYW5nZSg2NDM2LCA3NDQ1OCk7CiAgICAgICAg
ICAgICBsb29wLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4oCiAgICAgICAgICAgICAgICAgcHJvYywg
Vm9pZCwgT3JpZ2luKCksIGVmZmVjdHMsCi0gICAgICAgICAgICAgICAgbG9vcC0+YXBwZW5kTmV3
PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KG5vT3BG
dW5jdGlvbikpKTsKKyAgICAgICAgICAgICAgICBsb29wLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1
ZT4ocHJvYywgT3JpZ2luKCksIHRhZ0NGdW5jdGlvblB0cjx2b2lkKj4obm9PcEZ1bmN0aW9uLCBC
M0NDYWxsUHRyVGFnKSkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBlZmZlY3RzID0gRWZm
ZWN0czo6bm9uZSgpOwogICAgICAgICAgICAgZWZmZWN0cy5yZWFkcyA9IEhlYXBSYW5nZSg0ODg2
NCwgNzgyMzkpOwogICAgICAgICAgICAgcmV0dXJuIGxvb3AtPmFwcGVuZE5ldzxDQ2FsbFZhbHVl
PigKICAgICAgICAgICAgICAgICBwcm9jLCBJbnQzMiwgT3JpZ2luKCksIGVmZmVjdHMsCi0gICAg
ICAgICAgICAgICAgbG9vcC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigp
LCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KG9uZUZ1bmN0aW9uKSksCisgICAgICAgICAgICAgICAgbG9v
cC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCB0YWdDRnVuY3Rpb25Q
dHI8dm9pZCo+KG9uZUZ1bmN0aW9uLCBCM0NDYWxsUHRyVGFnKSksCiAgICAgICAgICAgICAgICAg
bG9vcC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjApKTsKICAgICAgICAgfSk7CiAgICAgCkBAIC0xNTE0OSw3ICsxNTE1MCw3
IEBAIHZvaWQgdGVzdExJQ01EZWZhdWx0Q2FsbCgpCiAgICAgICAgIFsmXSAoQmFzaWNCbG9jayog
bG9vcCwgVmFsdWUqKSAtPiBWYWx1ZSogewogICAgICAgICAgICAgcmV0dXJuIGxvb3AtPmFwcGVu
ZE5ldzxDQ2FsbFZhbHVlPigKICAgICAgICAgICAgICAgICBwcm9jLCBJbnQzMiwgT3JpZ2luKCks
Ci0gICAgICAgICAgICAgICAgbG9vcC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9y
aWdpbigpLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KG9uZUZ1bmN0aW9uKSksCisgICAgICAgICAgICAg
ICAgbG9vcC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCB0YWdDRnVu
Y3Rpb25QdHI8dm9pZCo+KG9uZUZ1bmN0aW9uLCBCM0NDYWxsUHRyVGFnKSksCiAgICAgICAgICAg
ICAgICAgbG9vcC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBH
UFJJbmZvOjphcmd1bWVudEdQUjApKTsKICAgICAgICAgfSk7CiAgICAgCkBAIC0xNjE5NCw3ICsx
NjE5NSw3IEBAIHZvaWQgdGVzdFNodWZmbGVEb2VzbnRUcmFzaENhbGxlZVNhdmVzKCkKIAogICAg
IHVubGlrZWx5LT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4oCiAgICAgICAgIHByb2MsIFZvaWQsIE9y
aWdpbigpLAotICAgICAgICB1bmxpa2VseS0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KGZ1bmN0aW9uTmluZUFyZ3MpKSwKKyAgICAg
ICAgdW5saWtlbHktPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgdGFn
Q0Z1bmN0aW9uUHRyPHZvaWQqPihmdW5jdGlvbk5pbmVBcmdzLCBCM0NDYWxsUHRyVGFnKSksCiAg
ICAgICAgIGNvbnN0TnVtYmVyLCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1LCBhcmc2LCBh
cmc3LCBhcmc4KTsKIAogICAgIFBhdGNocG9pbnRWYWx1ZSogdm9pZFBhdGNoID0gdW5saWtlbHkt
PmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KHByb2MsIFZvaWQsIE9yaWdpbigpKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxTcGVjaWFsLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNDYWxsU3BlY2lhbC5jcHAJ
KHJldmlzaW9uIDIzMDA4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0Nh
bGxTcGVjaWFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM0LDE0ICsxMzQsMjkgQEAgQ0NhbGxI
ZWxwZXJzOjpKdW1wIENDYWxsU3BlY2lhbDo6Z2VuZXJhdAogICAgIGNhc2UgQXJnOjpJbW06CiAg
ICAgY2FzZSBBcmc6OkJpZ0ltbToKICAgICAgICAgaml0Lm1vdmUoaW5zdC5hcmdzW2NhbGxlZUFy
Z09mZnNldF0uYXNUcnVzdGVkSW1tUHRyKCksIHNjcmF0Y2hSZWdpc3Rlcik7CisjaWYgVVNFKFBP
SU5URVJfUFJPRklMSU5HKQorICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW1QdHIoQjNDQ2FsbFB0clRhZyksIHB0clRhZ1JlZ2lzdGVyKTsKKyAgICAgICAgaml0LmNhbGwo
c2NyYXRjaFJlZ2lzdGVyLCBwdHJUYWdSZWdpc3Rlcik7CisjZWxzZQogICAgICAgICBqaXQuY2Fs
bChzY3JhdGNoUmVnaXN0ZXIsIE5vUHRyVGFnKTsKKyNlbmRpZgogICAgICAgICBicmVhazsKICAg
ICBjYXNlIEFyZzo6VG1wOgorI2lmIFVTRShQT0lOVEVSX1BST0ZJTElORykKKyAgICAgICAgaml0
Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKEIzQ0NhbGxQdHJUYWcpLCBwdHJUYWdS
ZWdpc3Rlcik7CisgICAgICAgIGppdC5jYWxsKGluc3QuYXJnc1tjYWxsZWVBcmdPZmZzZXRdLmdw
cigpLCBwdHJUYWdSZWdpc3Rlcik7CisjZWxzZQogICAgICAgICBqaXQuY2FsbChpbnN0LmFyZ3Nb
Y2FsbGVlQXJnT2Zmc2V0XS5ncHIoKSwgTm9QdHJUYWcpOworI2VuZGlmCiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgQXJnOjpBZGRyOgogICAgIGNhc2UgQXJnOjpFeHRlbmRlZE9mZnNldEFkZHI6
CisjaWYgVVNFKFBPSU5URVJfUFJPRklMSU5HKQorICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoQjNDQ2FsbFB0clRhZyksIHB0clRhZ1JlZ2lzdGVyKTsKKyAgICAg
ICAgaml0LmNhbGwoaW5zdC5hcmdzW2NhbGxlZUFyZ09mZnNldF0uYXNBZGRyZXNzKCksIHB0clRh
Z1JlZ2lzdGVyKTsKKyNlbHNlCiAgICAgICAgIGppdC5jYWxsKGluc3QuYXJnc1tjYWxsZWVBcmdP
ZmZzZXRdLmFzQWRkcmVzcygpLCBOb1B0clRhZyk7CisjZW5kaWYKICAgICAgICAgYnJlYWs7CiAg
ICAgZGVmYXVsdDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxTcGVjaWFsLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuaAkocmV2
aXNpb24gMjMwMDg3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNw
ZWNpYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE1LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC00OSw3ICs0OSwxMCBAQCBwdWJsaWM6CiAgICAgLy8gWW91
IGNhbm5vdCB1c2UgdGhpcyByZWdpc3RlciB0byBwYXNzIGFyZ3VtZW50cy4gSXQganVzdCBzbyBo
YXBwZW5zIHRoYXQgdGhpcyByZWdpc3RlciBpcyBub3QKICAgICAvLyB1c2VkIGZvciBhcmd1bWVu
dHMgaW4gdGhlIEMgY2FsbGluZyBjb252ZW50aW9uLiBCeSB0aGUgd2F5LCB0aGlzIGlzIHRoZSBv
bmx5IHRoaW5nIHRoYXQgY2F1c2VzCiAgICAgLy8gdGhpcyBzcGVjaWFsIHRvIGJlIHNwZWNpZmlj
IHRvIEMgY2FsbHMuCi0gICAgc3RhdGljIGNvbnN0IEdQUlJlZyBzY3JhdGNoUmVnaXN0ZXIgPSBH
UFJJbmZvOjpub25BcmdHUFIwOworICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgc2NyYXRjaFJlZ2lz
dGVyID0gR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uQXJndW1lbnRHUFIwOworI2lmIFVTRShQT0lO
VEVSX1BST0ZJTElORykKKyAgICBzdGF0aWMgY29uc3QgR1BSUmVnIHB0clRhZ1JlZ2lzdGVyID0g
R1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uQXJndW1lbnRHUFIxOworI2VuZGlmCiAKIHByb3RlY3Rl
ZDoKICAgICB2b2lkIGZvckVhY2hBcmcoSW5zdCYsIGNvbnN0IFNjb3BlZExhbWJkYTxJbnN0OjpF
YWNoQXJnQ2FsbGJhY2s+JikgZmluYWw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyMzAwODcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2
NjAsOCArNzY2MCw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgfTsKIAogICAgICAgICAg
ICAgICAgIGF1dG8gY2FsbFdpdGhFeGNlcHRpb25DaGVjayA9IFsmXSAodm9pZCogY2FsbGVlKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cihjYWxsZWUpLCBHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25Bcmd1bWVudEdQUik7Ci0gICAgICAg
ICAgICAgICAgICAgIGppdC5jYWxsKEdQUkluZm86Om5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BS
LCBOb1B0clRhZyk7CisgICAgICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbVB0cihjYWxsZWUpLCBHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25Bcmd1bWVudEdQ
UjApOworICAgICAgICAgICAgICAgICAgICBqaXQuY2FsbChHUFJJbmZvOjpub25QcmVzZXJ2ZWRO
b25Bcmd1bWVudEdQUjAsIE5vUHRyVGFnKTsKICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9u
cy0+YXBwZW5kKGppdC5lbWl0RXhjZXB0aW9uQ2hlY2soKnZtLCBBc3NlbWJseUhlbHBlcnM6Ok5v
cm1hbEV4Y2VwdGlvbkNoZWNrLCBBc3NlbWJseUhlbHBlcnM6OkZhckp1bXBXaWR0aCkpOwogICAg
ICAgICAgICAgICAgIH07CiAKQEAgLTc5OTksOCArNzk5OSw4IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWFsbG9jYXRvci5udW1iZXJPZlJldXNlZFJlZ2lzdGVy
cygpKTsKIAogICAgICAgICAgICAgICAgIGF1dG8gY2FsbFdpdGhFeGNlcHRpb25DaGVjayA9IFsm
XSAodm9pZCogY2FsbGVlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbVB0cihjYWxsZWUpLCBHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25Bcmd1
bWVudEdQUik7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5jYWxsKEdQUkluZm86Om5vblByZXNl
cnZlZE5vbkFyZ3VtZW50R1BSLCBOb1B0clRhZyk7CisgICAgICAgICAgICAgICAgICAgIGppdC5t
b3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxsZWUpLCBHUFJJbmZvOjpub25QcmVz
ZXJ2ZWROb25Bcmd1bWVudEdQUjApOworICAgICAgICAgICAgICAgICAgICBqaXQuY2FsbChHUFJJ
bmZvOjpub25QcmVzZXJ2ZWROb25Bcmd1bWVudEdQUjAsIE5vUHRyVGFnKTsKICAgICAgICAgICAg
ICAgICAgICAgZXhjZXB0aW9ucy0+YXBwZW5kKGppdC5lbWl0RXhjZXB0aW9uQ2hlY2soKnZtLCBB
c3NlbWJseUhlbHBlcnM6Ok5vcm1hbEV4Y2VwdGlvbkNoZWNrLCBBc3NlbWJseUhlbHBlcnM6OkZh
ckp1bXBXaWR0aCkpOwogICAgICAgICAgICAgICAgIH07CiAKQEAgLTgxODcsOCArODE4Nyw4IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgcmVxdWlyZWRCeXRlcyA9IFdURjo6cm91bmRVcFRv
TXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIHJlcXVpcmVkQnl0ZXMpOwogICAgICAg
ICAgICAgICAgIGppdC5zdWJQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIocmVxdWlyZWRC
eXRlcyksIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgICAgICAgICAg
ICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25DYWxsRXZhbCk+KEdQUklu
Zm86OnJlZ1QxKTsKLSAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPihvcGVyYXRpb25DYWxsRXZhbCkpLCBHUFJJbmZv
Ojpub25QcmVzZXJ2ZWROb25Bcmd1bWVudEdQUik7Ci0gICAgICAgICAgICAgICAgaml0LmNhbGwo
R1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uQXJndW1lbnRHUFIsIE5vUHRyVGFnKTsKKyAgICAgICAg
ICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0
PHZvaWQqPihvcGVyYXRpb25DYWxsRXZhbCkpLCBHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25Bcmd1
bWVudEdQUjApOworICAgICAgICAgICAgICAgIGppdC5jYWxsKEdQUkluZm86Om5vblByZXNlcnZl
ZE5vbkFyZ3VtZW50R1BSMCwgTm9QdHJUYWcpOwogICAgICAgICAgICAgICAgIGV4Y2VwdGlvbnMt
PmFwcGVuZChqaXQuZW1pdEV4Y2VwdGlvbkNoZWNrKHN0YXRlLT52bSgpLCBBc3NlbWJseUhlbHBl
cnM6Ok5vcm1hbEV4Y2VwdGlvbkNoZWNrLCBBc3NlbWJseUhlbHBlcnM6OkZhckp1bXBXaWR0aCkp
OwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBk
b25lID0gaml0LmJyYW5jaFRlc3Q2NChDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIEdQUkluZm86OnJl
dHVyblZhbHVlR1BSKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR1BSSW5mby5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR1BSSW5mby5oCShyZXZp
c2lvbiAyMzAwODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dQUkluZm8uaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEt
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTQ2NCw3ICs0NjQsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0
IEdQUlJlZyByZXR1cm5WYWx1ZUdQUiA9IFg4NlJlZ2lzdGVyczo6ZWF4OyAvLyByZWdUMAogICAg
IHN0YXRpYyBjb25zdCBHUFJSZWcgcmV0dXJuVmFsdWVHUFIyID0gWDg2UmVnaXN0ZXJzOjplZHg7
IC8vIHJlZ1QxIG9yIHJlZ1QyCiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyBub25QcmVzZXJ2ZWRO
b25SZXR1cm5HUFIgPSBYODZSZWdpc3RlcnM6OnIxMDsgLy8gcmVnVDUgKHJlZ1Q0IG9uIFdpbmRv
d3MpCi0gICAgc3RhdGljIGNvbnN0IEdQUlJlZyBub25QcmVzZXJ2ZWROb25Bcmd1bWVudEdQUiA9
IFg4NlJlZ2lzdGVyczo6cjEwOyAvLyByZWdUNSAocmVnVDQgb24gV2luZG93cykKKyAgICBzdGF0
aWMgY29uc3QgR1BSUmVnIG5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSMCA9IFg4NlJlZ2lzdGVy
czo6cjEwOyAvLyByZWdUNSAocmVnVDQgb24gV2luZG93cykKKyAgICBzdGF0aWMgY29uc3QgR1BS
UmVnIG5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSMSA9IFg4NlJlZ2lzdGVyczo6ZWF4OwogCiAg
ICAgLy8gRklYTUU6IEkgYmVsaWV2ZSB0aGF0IGFsbCB1c2VzIG9mIHRoaXMgYXJlIGRlYWQgaW4g
dGhlIHNlbnNlIHRoYXQgaXQganVzdCBjYXVzZXMgdGhlIHNjcmF0Y2gKICAgICAvLyByZWdpc3Rl
ciBhbGxvY2F0b3IgdG8gc2VsZWN0IGEgZGlmZmVyZW50IHJlZ2lzdGVyIGFuZCBwb3RlbnRpYWxs
eSBzcGlsbCB0aGluZ3MuIEl0IHdvdWxkIGJlIGJldHRlcgpAQCAtNjYwLDcgKzY2MSw4IEBAIHB1
YmxpYzoKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIHJldHVyblZhbHVlR1BSID0gQVJNNjRSZWdp
c3RlcnM6OngwOyAvLyByZWdUMAogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgcmV0dXJuVmFsdWVH
UFIyID0gQVJNNjRSZWdpc3RlcnM6OngxOyAvLyByZWdUMQogICAgIHN0YXRpYyBjb25zdCBHUFJS
ZWcgbm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSID0gQVJNNjRSZWdpc3RlcnM6OngyOwotICAgIHN0
YXRpYyBjb25zdCBHUFJSZWcgbm9uUHJlc2VydmVkTm9uQXJndW1lbnRHUFIgPSBBUk02NFJlZ2lz
dGVyczo6eDg7CisgICAgc3RhdGljIGNvbnN0IEdQUlJlZyBub25QcmVzZXJ2ZWROb25Bcmd1bWVu
dEdQUjAgPSBBUk02NFJlZ2lzdGVyczo6eDg7CisgICAgc3RhdGljIGNvbnN0IEdQUlJlZyBub25Q
cmVzZXJ2ZWROb25Bcmd1bWVudEdQUjEgPSBBUk02NFJlZ2lzdGVyczo6eDk7CiAgICAgc3RhdGlj
IGNvbnN0IEdQUlJlZyBwYXRjaHBvaW50U2NyYXRjaFJlZ2lzdGVyOwogCiAgICAgLy8gR1BSUmVn
IG1hcHBpbmcgaXMgZGlyZWN0LCB0aGUgbWFjaGluZSByZWdpc3RlciBudW1iZXJzIGNhbgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHRyVGFnLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHRyVGFnLmgJKHJldmlzaW9uIDIzMDA4NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1B0clRhZy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNSw2ICszNSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHYoTmVhckp1bXBQdHJUYWcp
IFwKICAgICB2KENGdW5jdGlvblB0clRhZykgXAogICAgIFwKKyAgICB2KEIzQ0NhbGxQdHJUYWcp
IFwKICAgICB2KEJ5dGVjb2RlUHRyVGFnKSBcCiAgICAgdihCeXRlY29kZUhlbHBlclB0clRhZykg
XAogICAgIHYoQ29kZUVudHJ5UHRyVGFnKSBcCkBAIC00NSw2ICs0Niw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgIHYoSklUVGh1bmtQdHJUYWcpIFwKICAgICB2KE5hdGl2ZUNvZGVQdHJUYWcpIFwK
ICAgICB2KFNsb3dQYXRoUHRyVGFnKSBcCisgICAgdihTd2l0Y2hUYWJsZVB0clRhZykgXAogICAg
IFwKICAgICB2KFlhcnI4Qml0UHRyVGFnKSBcCiAgICAgdihZYXJyMTZCaXRQdHJUYWcpIFwKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5jcHAJKHJldmlzaW9u
IDIzMDA4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYsIEJpbmRpbmdGCiAgICAgY29uc3QgUGlubmVkUmVnaXN0ZXJJbmZvJiBwaW5uZWRSZWdz
ID0gUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKTsKICAgICBKSVQgaml0OwogCi0gICAgR1BSUmVn
IHNjcmF0Y2ggPSBHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25Bcmd1bWVudEdQUjsKKyAgICBHUFJS
ZWcgc2NyYXRjaCA9IEdQUkluZm86Om5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSMDsKICAgICBH
UFJSZWcgYmFzZU1lbW9yeSA9IHBpbm5lZFJlZ3MuYmFzZU1lbW9yeVBvaW50ZXI7CiAgICAgQVNT
RVJUKGJhc2VNZW1vcnkgIT0gc2NyYXRjaCk7CiAgICAgY29uc3QgYXV0byYgc2l6ZVJlZ3MgPSBw
aW5uZWRSZWdzLnNpemVSZWdpc3RlcnM7Cg==
</data>
<flag name="review"
          id="355311"
          type_id="1"
          status="+"
          setter="jfbastien"
    />
          </attachment>
      

    </bug>

</bugzilla>