<?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>60860</bug_id>
          
          <creation_ts>2011-05-15 16:44:26 -0700</creation_ts>
          <short_desc>Simplify backtracking in YARR JIT</short_desc>
          <delta_ts>2011-05-16 00:24:27 -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>528+ (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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>60866</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Gavin Barraclough">barraclough</reporter>
          <assigned_to name="Gavin Barraclough">barraclough</assigned_to>
          <cc>ggaren</cc>
    
    <cc>msaboff</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>404221</commentid>
    <comment_count>0</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-05-15 16:44:26 -0700</bug_when>
    <thetext>YARR JIT currently performs a single pass of code generation over the pattern, with special handling to allow the code generation for some backtracking code out of line.  We can simplify things by moving to a common mechanism whereby all forwards matching code is generated in one pass, and all backtracking code is generated in another.  Backtracking code can be generated in reverse order, to optimized the common fall-through case.

To make it easier to walk over the pattern, we can first convert to a more byte-code like format before JIT generating.  In time we should unify this with the YARR interpreter to more closely unify the two.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404222</commentid>
    <comment_count>1</comment_count>
      <attachid>93592</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-05-15 16:46:56 -0700</bug_when>
    <thetext>Created attachment 93592
The patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404223</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-05-15 16:49:44 -0700</bug_when>
    <thetext>Attachment 93592 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1

Source/JavaScriptCore/yarr/YarrJIT.cpp:1503:  Missing space before ( in while(  [whitespace/parens] [5]
Source/JavaScriptCore/yarr/YarrJIT.cpp:1581:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/JavaScriptCore/yarr/YarrJIT.cpp:1660:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/JavaScriptCore/yarr/YarrJIT.cpp:2002:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/JavaScriptCore/yarr/YarrJIT.cpp:2026:  Missing space before ( in while(  [whitespace/parens] [5]
Source/JavaScriptCore/yarr/YarrJIT.cpp:2399:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Total errors found: 6 in 2 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404226</commentid>
    <comment_count>3</comment_count>
      <attachid>93593</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-05-15 17:26:28 -0700</bug_when>
    <thetext>Created attachment 93593
Layout tests for expressions fixed by the prior patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404252</commentid>
    <comment_count>4</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-05-15 19:34:07 -0700</bug_when>
    <thetext>Fixing backtracking is blocking https://bugs.webkit.org/show_bug.cgi?id=60866.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404292</commentid>
    <comment_count>5</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-05-15 22:38:45 -0700</bug_when>
    <thetext>Please fix style bot issues, and remove this:

+//        breakpoint();</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404301</commentid>
    <comment_count>6</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-05-15 23:04:00 -0700</bug_when>
    <thetext>There are a lot of great comments here, but also a lot of comments that describe the &quot;what&quot; and not the &quot;why&quot;. I think you should remove comments that just describe the &quot;what&quot; (listed below).

In theory, a &quot;what&quot; comment clutters the code, since it&apos;s redundant with what the code says. When a &quot;what&quot; comment does add something, that&apos;s probably a sign that the code it comments needs clearer names and abstractions.

+                    break; // Nothing else to do! break back to the switch.

+                // Find the beginning of this set of alternatives.

+                // Check whether this set of alternatives are repeating or &apos;once through&apos;.

+                        // Update the input position.

+                    // Link any input check failures from the prior alternative to this point.

+                    // Calculate the difference in minimum size between the two alternatives, and
+                    // update the input position.

+                // If the size of the pattern is not fixed, then we need to update the start index.

+                // Store the match start index, if we needed to &amp; didn&apos;t do so above.

+                    // If minimum size is zero, thenwe can store the current index directly.

+                    // Increment position &amp; check input for the first alternative - if sufficient
+                    // input is available just to it, else jump to it&apos;s input check failure handler.

+                // Manage m_checked.

+                // Manage m_checked.

+                // For fixed count (always executed once) subpatterns, nothing to do here.

+        // Emit all alternatives, connect as a doubly linked list.

+        // Emit all alternatives, connect as a doubly linked list.

+        // If there are no repeating alternatives then emit an
+        // &apos;OpMatchFailed&apos; to return no match.

+        // Run forwards over &apos;m_ops&apos;, generating the main matching path.
+        generate();
+        // Run backwards over &apos;m_ops&apos;, generating code for backtracking.
+        backtrack();</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404306</commentid>
    <comment_count>7</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-05-15 23:19:33 -0700</bug_when>
    <thetext>+        // The &apos;optimized&apos; flag is used to null out the second pattern character,
+        // when two are fused to match a pair together.
+        bool m_optimized;

How about &quot;m_isDeadCode&quot; or &quot;m_didFuseWithPrevious&quot; to make it more clear that this means the op can be removed because it fused with the previous op?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404312</commentid>
    <comment_count>8</comment_count>
      <attachid>93613</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-05-15 23:28:13 -0700</bug_when>
    <thetext>Created attachment 93613
Almost identical to the old patch, fix stylebot issues, remove &apos;what&apos; comments, renamed m_optimized to m_isDeadCode, add backtrackTermDefault.

Per a request over IRC by msaboff, have shared common implementations of term backtracking in backtrackTermDefault().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404321</commentid>
    <comment_count>9</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-05-16 00:02:18 -0700</bug_when>
    <thetext>Comments from reviewing the first patch.  Couldn&apos;t publish due to &quot;midair&quot; collision.

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

&gt; Source/JavaScriptCore/yarr/YarrJIT.cpp:354
&gt; +        // The operation, as a YarOpCode, and also a reference to the PatternTerm.
Spelling of YarOpCode

&gt; Source/JavaScriptCore/yarr/YarrJIT.cpp:376
&gt; +        bool m_optimized;
Too generic a name for the specific character pairing optimization.

&gt; Source/JavaScriptCore/yarr/YarrJIT.cpp:378
&gt; +        // Currentlyused in the case of some of the more complex management of

Currently used

&gt; Source/JavaScriptCore/yarr/YarrJIT.cpp:384
&gt; +        // value that will be puched into the pattern&apos;s frame to return to,

*pushed*

&gt; Source/JavaScriptCore/yarr/YarrJIT.cpp:390
&gt; +    // This class encapsualtes information about the state of code generation

*encapsulates*

&gt; Source/JavaScriptCore/yarr/YarrJIT.cpp:642
&gt; +        YarrOp&amp; nextOp = m_ops[opIndex + 1];

Added ASSERT(opIndex + 1 &lt; m_ops.size()); before.

&gt; Source/JavaScriptCore/yarr/YarrJIT.cpp:1154
&gt; +            // In the case &apos;once through&apos; expressions, the End node will laso have a reentry
*also*

&gt; Source/JavaScriptCore/yarr/YarrJIT.cpp:1196
&gt; +

Remove extra blank line.

&gt; Source/JavaScriptCore/yarr/YarrJIT.cpp:1200
&gt; +

ditto

&gt; Source/JavaScriptCore/yarr/YarrJIT.cpp:1231
&gt; +            // we do not need to be able  to backtrack back into any alternative other than

remove extra space between able &amp; to.

&gt; Source/JavaScriptCore/yarr/YarrJIT.cpp:1280
&gt; +                // alternatives bve responsible for checking that input is available (if

spelling of &quot;bve&quot;?

&gt; Source/JavaScriptCore/yarr/YarrJIT.cpp:1759
&gt; +            // In the case of non-simple nested assertions we nedd to also link the

*need*

&gt; Source/JavaScriptCore/yarr/YarrJIT.cpp:1782
&gt; +                // In the case of a single alterantive on its own, we don&apos;t need to

*alternative*

&gt; Source/JavaScriptCore/yarr/YarrJIT.cpp:1784
&gt; +                // continue to backtrack out of the paretheses without jumping.

*parentheses*

&gt; Source/JavaScriptCore/yarr/YarrJIT.cpp:1792
&gt; +                // If the alternative had adjusted the input possition we must link
*position*

&gt; Source/JavaScriptCore/yarr/YarrJIT.cpp:1803
&gt; +                        // The last of more than one alterantives must jump back to the begnning.
*alternatives*

&gt; Source/JavaScriptCore/yarr/YarrJIT.cpp:1902
&gt; +                    // If caputring, clear the capture (we only need to reset start).
*capturing*

&gt; Source/JavaScriptCore/yarr/YarrJIT.cpp:1929
&gt; +                    // Check whether we should backtrack back into the paretheses, or if we
*parentheses*

&gt; Source/JavaScriptCore/yarr/YarrJIT.cpp:1972
&gt; +                // We should never be backtracking  to here (hence the &apos;terminal&apos; in the name).

remove extra space between backtracking and to</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404324</commentid>
    <comment_count>10</comment_count>
      <attachid>93613</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-05-16 00:07:15 -0700</bug_when>
    <thetext>Comment on attachment 93613
Almost identical to the old patch, fix stylebot issues, remove &apos;what&apos; comments, renamed m_optimized to m_isDeadCode, add backtrackTermDefault.

r=me, modulo Michael&apos;s comments above.

Would be good to come up with a fix to the o(n^2) issue soon.

These YarrOps really lend themselves to a future refactoring that makes them objects with virtual generate / backtrack functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404331</commentid>
    <comment_count>11</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-05-16 00:22:23 -0700</bug_when>
    <thetext>Fixed in r86536, will follow up with an investigation of alternatives to the O(N^2) code in backtracking.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404335</commentid>
    <comment_count>12</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-05-16 00:24:27 -0700</bug_when>
    <thetext>(This patch got about 1 1/2 hours of regex fuzzing before landing, and has no performance impact on sunspidey / v8).</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>93592</attachid>
            <date>2011-05-15 16:46:56 -0700</date>
            <delta_ts>2011-05-15 23:28:13 -0700</delta_ts>
            <desc>The patch</desc>
            <filename>60860.patch</filename>
            <type>text/plain</type>
            <size>168998</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gODY1MTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjcgQEAK
KzIwMTEtMDUtMTUgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MDg2MAorICAgICAgICBTaW1wbGlmeSBi
YWNrdHJhY2tpbmcgaW4gWUFSUiBKSVQKKworICAgICAgICBZQVJSIEpJVCBjdXJyZW50bHkgcGVy
Zm9ybXMgYSBzaW5nbGUgcGFzcyBvZiBjb2RlIGdlbmVyYXRpb24gb3ZlciB0aGUgcGF0dGVybiwK
KyAgICAgICAgd2l0aCBzcGVjaWFsIGhhbmRsaW5nIHRvIGFsbG93IHRoZSBjb2RlIGdlbmVyYXRp
b24gZm9yIHNvbWUgYmFja3RyYWNraW5nIGNvZGUKKyAgICAgICAgb3V0IG9mIGxpbmUuIFdlIGNh
biBzaW1wbGlmeSB0aGluZ3MgYnkgbW92aW5nIHRvIGEgY29tbW9uIG1lY2hhbmlzbSB3aGVyZWJ5
IGFsbAorICAgICAgICBmb3J3YXJkcyBtYXRjaGluZyBjb2RlIGlzIGdlbmVyYXRlZCBpbiBvbmUg
cGFzcywgYW5kIGFsbCBiYWNrdHJhY2tpbmcgY29kZSBpcworICAgICAgICBnZW5lcmF0ZWQgaW4g
YW5vdGhlci4gQmFja3RyYWNraW5nIGNvZGUgY2FuIGJlIGdlbmVyYXRlZCBpbiByZXZlcnNlIG9y
ZGVyLCB0bworICAgICAgICBvcHRpbWl6ZWQgdGhlIGNvbW1vbiBmYWxsLXRocm91Z2ggY2FzZS4K
KworICAgICAgICBUbyBtYWtlIGl0IGVhc2llciB0byB3YWxrIG92ZXIgdGhlIHBhdHRlcm4sIHdl
IGNhbiBmaXJzdCBjb252ZXJ0IHRvIGEgbW9yZQorICAgICAgICBieXRlLWNvZGUgbGlrZSBmb3Jt
YXQgYmVmb3JlIEpJVCBnZW5lcmF0aW5nLiBJbiB0aW1lIHdlIHNob3VsZCB1bmlmeSB0aGlzIHdp
dGgKKyAgICAgICAgdGhlIFlBUlIgaW50ZXJwcmV0ZXIgdG8gbW9yZSBjbG9zZWx5IHVuaWZ5IHRo
ZSB0d28uCisKKyAgICAgICAgKiB5YXJyL1lhcnJKSVQuY3BwOgorICAgICAgICAoSlNDOjpZYXJy
OjpZYXJyR2VuZXJhdG9yOjpqdW1wSWZOb0F2YWlsYWJsZUlucHV0KToKKyAgICAgICAgKEpTQzo6
WWFycjo6WWFyckdlbmVyYXRvcjo6WWFyck9wOjpZYXJyT3ApOgorICAgICAgICAoSlNDOjpZYXJy
OjpZYXJyR2VuZXJhdG9yOjpCYWNrdHJhY2tpbmdTdGF0ZTo6QmFja3RyYWNraW5nU3RhdGUpOgor
ICAgICAgICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjpCYWNrdHJhY2tpbmdTdGF0ZTo6YXBw
ZW5kKToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckdlbmVyYXRvcjo6QmFja3RyYWNraW5nU3Rh
dGU6OmZhbGx0aHJvdWdoKToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckdlbmVyYXRvcjo6QmFj
a3RyYWNraW5nU3RhdGU6OmxpbmspOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9y
OjpCYWNrdHJhY2tpbmdTdGF0ZTo6bGlua1RvKToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckdl
bmVyYXRvcjo6QmFja3RyYWNraW5nU3RhdGU6OnRha2VCYWNrdHJhY2tzVG9KdW1wTGlzdCk6Cisg
ICAgICAgIChKU0M6OllhcnI6OllhcnJHZW5lcmF0b3I6OkJhY2t0cmFja2luZ1N0YXRlOjppc0Vt
cHR5KToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckdlbmVyYXRvcjo6QmFja3RyYWNraW5nU3Rh
dGU6OmxpbmtEYXRhTGFiZWxzKToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckdlbmVyYXRvcjo6
QmFja3RyYWNraW5nU3RhdGU6OlJldHVybkFkZHJlc3NSZWNvcmQ6OlJldHVybkFkZHJlc3NSZWNv
cmQpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjpnZW5lcmF0ZUFzc2VydGlv
bkJPTCk6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJHZW5lcmF0b3I6OmJhY2t0cmFja0Fzc2Vy
dGlvbkJPTCk6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJHZW5lcmF0b3I6OmdlbmVyYXRlQXNz
ZXJ0aW9uRU9MKToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckdlbmVyYXRvcjo6YmFja3RyYWNr
QXNzZXJ0aW9uRU9MKToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckdlbmVyYXRvcjo6bWF0Y2hB
c3NlcnRpb25Xb3JkY2hhcik6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJHZW5lcmF0b3I6Omdl
bmVyYXRlQXNzZXJ0aW9uV29yZEJvdW5kYXJ5KToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckdl
bmVyYXRvcjo6YmFja3RyYWNrQXNzZXJ0aW9uV29yZEJvdW5kYXJ5KToKKyAgICAgICAgKEpTQzo6
WWFycjo6WWFyckdlbmVyYXRvcjo6Z2VuZXJhdGVQYXR0ZXJuQ2hhcmFjdGVyT25jZSk6CisgICAg
ICAgIChKU0M6OllhcnI6OllhcnJHZW5lcmF0b3I6OmJhY2t0cmFja1BhdHRlcm5DaGFyYWN0ZXJP
bmNlKToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckdlbmVyYXRvcjo6Z2VuZXJhdGVQYXR0ZXJu
Q2hhcmFjdGVyRml4ZWQpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjpiYWNr
dHJhY2tQYXR0ZXJuQ2hhcmFjdGVyRml4ZWQpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyR2Vu
ZXJhdG9yOjpnZW5lcmF0ZVBhdHRlcm5DaGFyYWN0ZXJHcmVlZHkpOgorICAgICAgICAoSlNDOjpZ
YXJyOjpZYXJyR2VuZXJhdG9yOjpiYWNrdHJhY2tQYXR0ZXJuQ2hhcmFjdGVyR3JlZWR5KToKKyAg
ICAgICAgKEpTQzo6WWFycjo6WWFyckdlbmVyYXRvcjo6Z2VuZXJhdGVQYXR0ZXJuQ2hhcmFjdGVy
Tm9uR3JlZWR5KToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckdlbmVyYXRvcjo6YmFja3RyYWNr
UGF0dGVybkNoYXJhY3Rlck5vbkdyZWVkeSk6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJHZW5l
cmF0b3I6OmdlbmVyYXRlQ2hhcmFjdGVyQ2xhc3NPbmNlKToKKyAgICAgICAgKEpTQzo6WWFycjo6
WWFyckdlbmVyYXRvcjo6YmFja3RyYWNrQ2hhcmFjdGVyQ2xhc3NPbmNlKToKKyAgICAgICAgKEpT
Qzo6WWFycjo6WWFyckdlbmVyYXRvcjo6Z2VuZXJhdGVDaGFyYWN0ZXJDbGFzc0ZpeGVkKToKKyAg
ICAgICAgKEpTQzo6WWFycjo6WWFyckdlbmVyYXRvcjo6YmFja3RyYWNrQ2hhcmFjdGVyQ2xhc3NG
aXhlZCk6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJHZW5lcmF0b3I6OmdlbmVyYXRlQ2hhcmFj
dGVyQ2xhc3NHcmVlZHkpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjpiYWNr
dHJhY2tDaGFyYWN0ZXJDbGFzc0dyZWVkeSk6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJHZW5l
cmF0b3I6OmdlbmVyYXRlQ2hhcmFjdGVyQ2xhc3NOb25HcmVlZHkpOgorICAgICAgICAoSlNDOjpZ
YXJyOjpZYXJyR2VuZXJhdG9yOjpiYWNrdHJhY2tDaGFyYWN0ZXJDbGFzc05vbkdyZWVkeSk6Cisg
ICAgICAgIChKU0M6OllhcnI6OllhcnJHZW5lcmF0b3I6OmdlbmVyYXRlVGVybSk6CisgICAgICAg
IChKU0M6OllhcnI6OllhcnJHZW5lcmF0b3I6OmJhY2t0cmFja1Rlcm0pOgorICAgICAgICAoSlND
OjpZYXJyOjpZYXJyR2VuZXJhdG9yOjpnZW5lcmF0ZSk6CisgICAgICAgIChKU0M6OllhcnI6Ollh
cnJHZW5lcmF0b3I6OmJhY2t0cmFjayk6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJHZW5lcmF0
b3I6Om9wQ29tcGlsZVBhcmVudGhlc2VzU3VicGF0dGVybik6CisgICAgICAgIChKU0M6OllhcnI6
OllhcnJHZW5lcmF0b3I6Om9wQ29tcGlsZVBhcmVudGhldGljYWxBc3NlcnRpb24pOgorICAgICAg
ICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjpvcENvbXBpbGVBbHRlcm5hdGl2ZSk6CisgICAg
ICAgIChKU0M6OllhcnI6OllhcnJHZW5lcmF0b3I6Om9wQ29tcGlsZUJvZHkpOgorICAgICAgICAo
SlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjpZYXJyR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6
WWFycjo6WWFyckdlbmVyYXRvcjo6Y29tcGlsZSk6CisKIDIwMTEtMDUtMTUgIEdlb2ZmcmV5IEdh
cmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBNYWNpZWogU3Rh
Y2hvd2lhay4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwCShyZXZp
c2lvbiA4NjE3OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMjgsOSArMjI4LDEwIEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgOiBw
cml2YXRlIE1hY3JvQXNzZW0KICAgICB9CiAKICAgICAvLyBKdW1wcyBpZiBpbnB1dCBub3QgYXZh
aWxhYmxlOyB3aWxsIGhhdmUgKGluY29ycmVjdGx5KSBpbmNyZW1lbnRlZCBhbHJlYWR5IQotICAg
IEp1bXAganVtcElmTm9BdmFpbGFibGVJbnB1dCh1bnNpZ25lZCBjb3VudFRvQ2hlY2spCisgICAg
SnVtcCBqdW1wSWZOb0F2YWlsYWJsZUlucHV0KHVuc2lnbmVkIGNvdW50VG9DaGVjayA9IDApCiAg
ICAgewotICAgICAgICBhZGQzMihJbW0zMihjb3VudFRvQ2hlY2spLCBpbmRleCk7CisgICAgICAg
IGlmIChjb3VudFRvQ2hlY2spCisgICAgICAgICAgICBhZGQzMihJbW0zMihjb3VudFRvQ2hlY2sp
LCBpbmRleCk7CiAgICAgICAgIHJldHVybiBicmFuY2gzMihBYm92ZSwgaW5kZXgsIGxlbmd0aCk7
CiAgICAgfQogCkBAIC0yOTUsMTA1NiArMjk2LDQ0NiBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIDog
cHJpdmF0ZSBNYWNyb0Fzc2VtCiAgICAgICAgIGp1bXAoQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdp
c3RlciwgZnJhbWVMb2NhdGlvbiAqIHNpemVvZih2b2lkKikpKTsKICAgICB9CiAKLSAgICBzdHJ1
Y3QgSW5kaXJlY3RKdW1wRW50cnkgewotICAgICAgICBJbmRpcmVjdEp1bXBFbnRyeShpbnQzMl90
IHN0YWNrT2Zmc2V0KQotICAgICAgICAgICAgOiBtX3N0YWNrT2Zmc2V0KHN0YWNrT2Zmc2V0KQot
ICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBJbmRpcmVjdEp1bXBFbnRyeShpbnQzMl90
IHN0YWNrT2Zmc2V0LCBKdW1wIGp1bXApCi0gICAgICAgICAgICA6IG1fc3RhY2tPZmZzZXQoc3Rh
Y2tPZmZzZXQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFkZEp1bXAoanVtcCk7Ci0gICAgICAg
IH0KLQotICAgICAgICBJbmRpcmVjdEp1bXBFbnRyeShpbnQzMl90IHN0YWNrT2Zmc2V0LCBEYXRh
TGFiZWxQdHIgZGF0YUxhYmVsKQotICAgICAgICA6IG1fc3RhY2tPZmZzZXQoc3RhY2tPZmZzZXQp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGFkZERhdGFMYWJlbChkYXRhTGFiZWwpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgdm9pZCBhZGRKdW1wKEp1bXAganVtcCkKLSAgICAgICAgewotICAgICAg
ICAgICAgbV9yZWxKdW1wcy5hcHBlbmQoanVtcCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIHZvaWQgYWRkRGF0YUxhYmVsKERhdGFMYWJlbFB0ciBkYXRhTGFiZWwpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIG1fZGF0YUxhYmVsUHRyVmVjdG9yLmFwcGVuZChkYXRhTGFiZWwpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaW50MzJfdCBtX3N0YWNrT2Zmc2V0OwotICAgICAgICBKdW1wTGlz
dCBtX3JlbEp1bXBzOwotICAgICAgICBWZWN0b3I8RGF0YUxhYmVsUHRyLCAxNj4gbV9kYXRhTGFi
ZWxQdHJWZWN0b3I7CisgICAgZW51bSBZYXJyT3BDb2RlIHsKKyAgICAgICAgLy8gVGhlc2Ugbm9k
ZXMgd3JhcCBib2R5IGFsdGVybmF0aXZlcyAtIHRob3NlIGluIHRoZSBtYWluIGRpc2p1bmN0aW9u
LAorICAgICAgICAvLyByYXRoZXIgdGhhbiBzdWJwYXR0ZXJucyBvciBhc3NlcnRpb25zLiBUaGVz
ZSBhcmUgY2hhaW5lZCB0b2dldGhlciBpbgorICAgICAgICAvLyBhIGRvdWJseSBsaW5rZWQgbGlz
dCwgd2l0aCBhICdiZWdpbicgbm9kZSBmb3IgdGhlIGZpcnN0IGFsdGVybmF0aXZlLAorICAgICAg
ICAvLyBhICduZXh0JyBub2RlIGZvciBlYWNoIHN1YnNlcXVlbnQgYWx0ZXJuYXRpdmUsIGFuZCBh
biAnZW5kJyBub2RlIGF0CisgICAgICAgIC8vIHRoZSBlbmQuIEluIHRoZSBjYXNlIG9mIHJlcGVh
dGluZyBhbHRlcm5hdGl2ZXMsIHRoZSAnZW5kJyBub2RlIGFsc28KKyAgICAgICAgLy8gaGFzIGEg
cmVmZXJlbmNlIGJhY2sgdG8gJ2JlZ2luJy4KKyAgICAgICAgT3BCb2R5QWx0ZXJuYXRpdmVCZWdp
biwKKyAgICAgICAgT3BCb2R5QWx0ZXJuYXRpdmVOZXh0LAorICAgICAgICBPcEJvZHlBbHRlcm5h
dGl2ZUVuZCwKKyAgICAgICAgLy8gU2ltaWxhciB0byB0aGUgYm9keSBhbHRlcm5hdGl2ZXMsIGJ1
dCB1c2VkIGZvciBzdWJwYXR0ZXJucyB3aXRoIHR3bworICAgICAgICAvLyBvciBtb3JlIGFsdGVy
bmF0aXZlcy4KKyAgICAgICAgT3BOZXN0ZWRBbHRlcm5hdGl2ZUJlZ2luLAorICAgICAgICBPcE5l
c3RlZEFsdGVybmF0aXZlTmV4dCwKKyAgICAgICAgT3BOZXN0ZWRBbHRlcm5hdGl2ZUVuZCwKKyAg
ICAgICAgLy8gVXNlZCBmb3IgYWx0ZXJuYXRpdmVzIGluIHN1YnBhdHRlcm5zIHdoZXJlIHRoZXJl
IGlzIG9ubHkgYSBzaW5nbGUKKyAgICAgICAgLy8gYWx0ZXJuYXRpdmUgKGJhY2t0cmFja2luZ2lz
IGVhc2llciBpbiB0aGVzZSBjYXNlcyksIG9yIGZvciBhbHRlcm5hdGl2ZXMKKyAgICAgICAgLy8g
d2hpY2ggbmV2ZXIgbmVlZCB0byBiZSBiYWNrdHJhY2tlZCAodGhvc2UgaW4gcGFyZW50aGV0aWNh
bCBhc3NlcnRpb25zLAorICAgICAgICAvLyB0ZXJtaW5hbCBzdWJwYXR0ZXJucykuCisgICAgICAg
IE9wU2ltcGxlTmVzdGVkQWx0ZXJuYXRpdmVCZWdpbiwKKyAgICAgICAgT3BTaW1wbGVOZXN0ZWRB
bHRlcm5hdGl2ZU5leHQsCisgICAgICAgIE9wU2ltcGxlTmVzdGVkQWx0ZXJuYXRpdmVFbmQsCisg
ICAgICAgIC8vIFVzZWQgdG8gd3JhcCAnT25jZScgc3VicGF0dGVybiBtYXRjaGVzIChxdWFudGl0
eUNvdW50ID09IDEpLgorICAgICAgICBPcFBhcmVudGhlc2VzU3VicGF0dGVybk9uY2VCZWdpbiwK
KyAgICAgICAgT3BQYXJlbnRoZXNlc1N1YnBhdHRlcm5PbmNlRW5kLAorICAgICAgICAvLyBVc2Vk
IHRvIHdyYXAgJ1Rlcm1pbmFsJyBzdWJwYXR0ZXJuIG1hdGNoZXMgKGF0IHRoZSBlbmQgb2YgdGhl
IHJlZ2V4cCkuCisgICAgICAgIE9wUGFyZW50aGVzZXNTdWJwYXR0ZXJuVGVybWluYWxCZWdpbiwK
KyAgICAgICAgT3BQYXJlbnRoZXNlc1N1YnBhdHRlcm5UZXJtaW5hbEVuZCwKKyAgICAgICAgLy8g
VXNlZCB0byB3cmFwIHBhcmVudGhldGljYWwgYXNzZXJ0aW9ucy4KKyAgICAgICAgT3BQYXJlbnRo
ZXRpY2FsQXNzZXJ0aW9uQmVnaW4sCisgICAgICAgIE9wUGFyZW50aGV0aWNhbEFzc2VydGlvbkVu
ZCwKKyAgICAgICAgLy8gV3JhcHMgYWxsIHNpbXBsZSB0ZXJtcyAocGF0dGVybiBjaGFyYWN0ZXJz
LCBjaGFyYWN0ZXIgY2xhc3NlcykuCisgICAgICAgIE9wVGVybSwKKyAgICAgICAgLy8gV2hlcmUg
YW4gZXhwcmVzc2lvbiBjb250YWlucyBvbmx5ICdvbmNlIHRocm91Z2gnIGJvZHkgYWx0ZXJuYXRp
dmVzCisgICAgICAgIC8vIGFuZCBubyByZXBlYXRpbmcgb25lcywgdGhpcyBvcCBpcyB1c2VkIHRv
IHJldHVybiBtYXRjaCBmYWlsdXJlLgorICAgICAgICBPcE1hdGNoRmFpbGVkCiAgICAgfTsKIAot
ICAgIHN0cnVjdCBBbHRlcm5hdGl2ZUJhY2t0cmFja1JlY29yZCB7Ci0gICAgICAgIERhdGFMYWJl
bFB0ciBkYXRhTGFiZWw7Ci0gICAgICAgIExhYmVsIGJhY2t0cmFja0xvY2F0aW9uOwotCi0gICAg
ICAgIEFsdGVybmF0aXZlQmFja3RyYWNrUmVjb3JkKERhdGFMYWJlbFB0ciBkYXRhTGFiZWwsIExh
YmVsIGJhY2t0cmFja0xvY2F0aW9uKQotICAgICAgICAgICAgOiBkYXRhTGFiZWwoZGF0YUxhYmVs
KQotICAgICAgICAgICAgLCBiYWNrdHJhY2tMb2NhdGlvbihiYWNrdHJhY2tMb2NhdGlvbikKLSAg
ICAgICAgewotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHN0cnVjdCBQYXJlbnRoZXNlc1RhaWw7
Ci0gICAgc3RydWN0IFRlcm1HZW5lcmF0aW9uU3RhdGU7Ci0KLSAgICBzdHJ1Y3QgR2VuZXJhdGlv
blN0YXRlIHsKLSAgICAgICAgdHlwZWRlZiBIYXNoTWFwPGludCwgSW5kaXJlY3RKdW1wRW50cnkq
LCBXVEY6OkludEhhc2g8dWludDMyX3Q+LCBVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1
aW50MzJfdD4gPiBJbmRpcmVjdEp1bXBIYXNoTWFwOwotCi0gICAgICAgIEdlbmVyYXRpb25TdGF0
ZSgpCi0gICAgICAgICAgICA6IG1fcGFyZW5OZXN0aW5nTGV2ZWwoMCkKLSAgICAgICAgewotICAg
ICAgICB9Ci0KLSAgICAgICAgdm9pZCBhZGRJbmRpcmVjdEp1bXBFbnRyeShpbnQzMl90IHN0YWNr
T2Zmc2V0LCBKdW1wIGp1bXApCi0gICAgICAgIHsKLSAgICAgICAgICAgIEluZGlyZWN0SnVtcEhh
c2hNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IG1faW5kaXJlY3RKdW1wTWFwLmZpbmQoc3RhY2tPZmZz
ZXQpOwotCi0gICAgICAgICAgICBBU1NFUlQoc3RhY2tPZmZzZXQgPj0gMCk7Ci0KLSAgICAgICAg
ICAgIHVpbnQzMl90IG9mZnNldCA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihzdGFja09mZnNldCk7
Ci0KLSAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gbV9pbmRpcmVjdEp1bXBNYXAuZW5kKCkpCi0g
ICAgICAgICAgICAgICAgbV9pbmRpcmVjdEp1bXBNYXAuYWRkKG9mZnNldCwgbmV3IEluZGlyZWN0
SnVtcEVudHJ5KHN0YWNrT2Zmc2V0LCBqdW1wKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgcmVzdWx0LT5zZWNvbmQtPmFkZEp1bXAoanVtcCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICB2b2lkIGFkZEluZGlyZWN0SnVtcEVudHJ5KGludDMyX3Qgc3RhY2tPZmZzZXQsIEp1bXBM
aXN0IGp1bXBzKQotICAgICAgICB7Ci0gICAgICAgICAgICBKdW1wTGlzdDo6SnVtcFZlY3RvciBq
dW1wVmVjdG9yID0ganVtcHMuanVtcHMoKTsKLSAgICAgICAgICAgIHNpemVfdCBzaXplID0ganVt
cFZlY3Rvci5zaXplKCk7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7
ICsraSkKLSAgICAgICAgICAgICAgICBhZGRJbmRpcmVjdEp1bXBFbnRyeShzdGFja09mZnNldCwg
anVtcFZlY3RvcltpXSk7Ci0KLSAgICAgICAgICAgIGp1bXBzLmVtcHR5KCk7Ci0gICAgICAgIH0K
LQotICAgICAgICB2b2lkIGFkZEluZGlyZWN0SnVtcEVudHJ5KGludDMyX3Qgc3RhY2tPZmZzZXQs
IERhdGFMYWJlbFB0ciBkYXRhTGFiZWwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEluZGlyZWN0
SnVtcEhhc2hNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IG1faW5kaXJlY3RKdW1wTWFwLmZpbmQoc3Rh
Y2tPZmZzZXQpOwotCi0gICAgICAgICAgICBBU1NFUlQoc3RhY2tPZmZzZXQgPj0gMCk7Ci0KLSAg
ICAgICAgICAgIHVpbnQzMl90IG9mZnNldCA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihzdGFja09m
ZnNldCk7Ci0KLSAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gbV9pbmRpcmVjdEp1bXBNYXAuZW5k
KCkpCi0gICAgICAgICAgICAgICAgbV9pbmRpcmVjdEp1bXBNYXAuYWRkKG9mZnNldCwgbmV3IElu
ZGlyZWN0SnVtcEVudHJ5KHN0YWNrT2Zmc2V0LCBkYXRhTGFiZWwpKTsKLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICByZXN1bHQtPnNlY29uZC0+YWRkRGF0YUxhYmVsKGRhdGFMYWJl
bCk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGVtaXRJbmRpcmVjdEp1bXBUYWJsZShNYWNy
b0Fzc2VtYmxlciogbWFzbSkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChJbmRpcmVjdEp1
bXBIYXNoTWFwOjppdGVyYXRvciBpdGVyID0gbV9pbmRpcmVjdEp1bXBNYXAuYmVnaW4oKTsgaXRl
ciAhPSBtX2luZGlyZWN0SnVtcE1hcC5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgICAgICAgICAg
SW5kaXJlY3RKdW1wRW50cnkqIGluZEp1bXBFbnRyeSA9IGl0ZXItPnNlY29uZDsKLSAgICAgICAg
ICAgICAgICBzaXplX3Qgc2l6ZSA9IGluZEp1bXBFbnRyeS0+bV9kYXRhTGFiZWxQdHJWZWN0b3Iu
c2l6ZSgpOwotICAgICAgICAgICAgICAgIGlmIChzaXplKSB7Ci0gICAgICAgICAgICAgICAgICAg
IC8vIExpbmsgYW55IGFzc29jaWF0ZWQgRGF0YUxhYmVsUHRyJ3Mgd2l0aCBpbmRpcmVjdCBqdW1w
IHZpYSBsYWJlbAotICAgICAgICAgICAgICAgICAgICBMYWJlbCBoZXJlTGFiZWwgPSBtYXNtLT5s
YWJlbCgpOwotICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7
ICsraSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fYmFja3RyYWNrUmVjb3Jkcy5hcHBlbmQo
QWx0ZXJuYXRpdmVCYWNrdHJhY2tSZWNvcmQoaW5kSnVtcEVudHJ5LT5tX2RhdGFMYWJlbFB0clZl
Y3RvcltpXSwgaGVyZUxhYmVsKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGluZEp1bXBFbnRyeS0+bV9yZWxKdW1wcy5saW5rKG1hc20pOwotICAgICAgICAgICAgICAgIG1h
c20tPmp1bXAoQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgaW5kSnVtcEVudHJ5LT5tX3N0
YWNrT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgZGVsZXRlIGluZEp1bXBFbnRyeTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgaW5jcmVtZW50UGFyZW5OZXN0aW5n
TGV2ZWwoKQotICAgICAgICB7Ci0gICAgICAgICAgICArK21fcGFyZW5OZXN0aW5nTGV2ZWw7Ci0g
ICAgICAgIH0KLQotICAgICAgICB2b2lkIGRlY3JlbWVudFBhcmVuTmVzdGluZ0xldmVsKCkKLSAg
ICAgICAgewotICAgICAgICAgICAgLS1tX3BhcmVuTmVzdGluZ0xldmVsOwotICAgICAgICB9Ci0K
LSAgICAgICAgUGFyZW50aGVzZXNUYWlsKiBhZGRQYXJlbnRoZXNlc1RhaWwoUGF0dGVyblRlcm0m
IHRlcm0sIEp1bXBMaXN0KiBqdW1wTGlzdFRvUHJpb3JQYXJlbikKLSAgICAgICAgewotICAgICAg
ICAgICAgT3duUHRyPFBhcmVudGhlc2VzVGFpbD4gdGFpbCA9IGFkb3B0UHRyKG5ldyBQYXJlbnRo
ZXNlc1RhaWwodGVybSwgbV9wYXJlbk5lc3RpbmdMZXZlbCwganVtcExpc3RUb1ByaW9yUGFyZW4p
KTsKLSAgICAgICAgICAgIFBhcmVudGhlc2VzVGFpbCogcmF3VGFpbCA9IHRhaWwuZ2V0KCk7Ci0K
LSAgICAgICAgICAgIG1fcGFyZW5UYWlscy5hcHBlbmQodGFpbC5yZWxlYXNlKCkpOwotICAgICAg
ICAgICAgbV9wYXJlblRhaWxzRm9ySXRlcmF0aW9uLmFwcGVuZChyYXdUYWlsKTsKLQotICAgICAg
ICAgICAgcmV0dXJuIHJhd1RhaWw7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGVtaXRQYXJl
bnRoZXNlc1RhaWwoWWFyckdlbmVyYXRvciogZ2VuZXJhdG9yKQotICAgICAgICB7Ci0gICAgICAg
ICAgICB1bnNpZ25lZCB2ZWN0b3JTaXplID0gbV9wYXJlblRhaWxzLnNpemUoKTsKLSAgICAgICAg
ICAgIGJvb2wgcHJpb3JCYWNrdHJhY2tGYWxsVGhyb3VnaCA9IGZhbHNlOwotCi0gICAgICAgICAg
ICAvLyBFbWl0IGluIHJldmVyc2Ugb3JkZXIgc28gcGFyZW50VGFpbCBOIGNhbiBmYWxsIHRocm91
Z2ggdG8gTi0xCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gdmVjdG9yU2l6ZTsg
aW5kZXggPiAwOyAtLWluZGV4KSB7Ci0gICAgICAgICAgICAgICAgSnVtcExpc3QganVtcHNUb05l
eHQ7Ci0gICAgICAgICAgICAgICAgcHJpb3JCYWNrdHJhY2tGYWxsVGhyb3VnaCA9IG1fcGFyZW5U
YWlsc1tpbmRleC0xXS5nZXQoKS0+Z2VuZXJhdGVDb2RlKGdlbmVyYXRvciwganVtcHNUb05leHQs
IHByaW9yQmFja3RyYWNrRmFsbFRocm91Z2gsIGluZGV4ID4gMSk7Ci0gICAgICAgICAgICAgICAg
aWYgKGluZGV4ID4gMSkKLSAgICAgICAgICAgICAgICAgICAganVtcHNUb05leHQubGlua1RvKGdl
bmVyYXRvci0+bGFiZWwoKSwgZ2VuZXJhdG9yKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgIGFkZEp1bXBzVG9OZXh0SW50ZXJhdGlvbihqdW1wc1RvTmV4dCk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX3BhcmVuVGFpbHMuY2xlYXIoKTsKLSAgICAgICAg
fQotCi0gICAgICAgIHZvaWQgYWRkSnVtcFRvTmV4dEludGVyYXRpb24oSnVtcCBqdW1wKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBtX2p1bXBzVG9OZXh0SW50ZXJhdGlvbi5hcHBlbmQoanVtcCk7
Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGFkZEp1bXBzVG9OZXh0SW50ZXJhdGlvbihKdW1w
TGlzdCBqdW1wcykKKyAgICAvLyBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIHRvIGhvbGQgdGhlIGNv
bXBpbGVkIG9wY29kZSBpbmZvcm1hdGlvbiwKKyAgICAvLyBpbmNsdWRpbmcgcmVmZXJlbmNlIGJh
Y2sgdG8gdGhlIG9yaWdpbmFsIFBhdHRlcm5UZXJtL1BhdHRlcm5BbHRlcm5hdGl2ZXMsCisgICAg
Ly8gYW5kIEpJVCBjb21waWxhdGlvbiBkYXRhIHN0cnVjdHVyZXMuCisgICAgc3RydWN0IFlhcnJP
cCB7CisgICAgICAgIGV4cGxpY2l0IFlhcnJPcChQYXR0ZXJuVGVybSogdGVybSkKKyAgICAgICAg
ICAgIDogbV9vcChPcFRlcm0pCisgICAgICAgICAgICAsIG1fdGVybSh0ZXJtKQorICAgICAgICAg
ICAgLCBtX29wdGltaXplZChmYWxzZSkKICAgICAgICAgewotICAgICAgICAgICAgbV9qdW1wc1Rv
TmV4dEludGVyYXRpb24uYXBwZW5kKGp1bXBzKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQg
YWRkRGF0YUxhYmVsVG9OZXh0SXRlcmF0aW9uKERhdGFMYWJlbFB0ciBkYXRhTGFiZWwpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIG1fZGF0YVB0cnNUb05leHRJdGVyYXRpb24uYXBwZW5kKGRhdGFM
YWJlbCk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGxpbmtUb05leHRJdGVyYXRpb24oTGFi
ZWwgbGFiZWwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fbmV4dEl0ZXJhdGlvbiA9IGxhYmVs
OwotCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9kYXRhUHRyc1RvTmV4
dEl0ZXJhdGlvbi5zaXplKCk7ICsraSkKLSAgICAgICAgICAgICAgICBtX2JhY2t0cmFja1JlY29y
ZHMuYXBwZW5kKEFsdGVybmF0aXZlQmFja3RyYWNrUmVjb3JkKG1fZGF0YVB0cnNUb05leHRJdGVy
YXRpb25baV0sIG1fbmV4dEl0ZXJhdGlvbikpOwotCi0gICAgICAgICAgICBtX2RhdGFQdHJzVG9O
ZXh0SXRlcmF0aW9uLmNsZWFyKCk7Ci0KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtX3BhcmVuVGFpbHNGb3JJdGVyYXRpb24uc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICAg
ICAgbV9wYXJlblRhaWxzRm9ySXRlcmF0aW9uW2ldLT5zZXROZXh0SXRlcmF0aW9uKG1fbmV4dEl0
ZXJhdGlvbik7Ci0KLSAgICAgICAgICAgIG1fcGFyZW5UYWlsc0Zvckl0ZXJhdGlvbi5jbGVhcigp
OwogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCBsaW5rVG9OZXh0SXRlcmF0aW9uKFlhcnJHZW5l
cmF0b3IqIGdlbmVyYXRvcikKKyAgICAgICAgZXhwbGljaXQgWWFyck9wKFlhcnJPcENvZGUgb3Ap
CisgICAgICAgICAgICA6IG1fb3Aob3ApCisgICAgICAgICAgICAsIG1fb3B0aW1pemVkKGZhbHNl
KQogICAgICAgICB7Ci0gICAgICAgICAgICBtX2p1bXBzVG9OZXh0SW50ZXJhdGlvbi5saW5rVG8o
bV9uZXh0SXRlcmF0aW9uLCBnZW5lcmF0b3IpOwogICAgICAgICB9CiAKLSAgICAgICAgaW50IG1f
cGFyZW5OZXN0aW5nTGV2ZWw7Ci0gICAgICAgIFZlY3RvcjxBbHRlcm5hdGl2ZUJhY2t0cmFja1Jl
Y29yZD4gbV9iYWNrdHJhY2tSZWNvcmRzOwotICAgICAgICBJbmRpcmVjdEp1bXBIYXNoTWFwIG1f
aW5kaXJlY3RKdW1wTWFwOwotICAgICAgICBMYWJlbCBtX25leHRJdGVyYXRpb247Ci0gICAgICAg
IFZlY3RvcjxPd25QdHI8UGFyZW50aGVzZXNUYWlsPiA+IG1fcGFyZW5UYWlsczsKLSAgICAgICAg
SnVtcExpc3QgbV9qdW1wc1RvTmV4dEludGVyYXRpb247Ci0gICAgICAgIFZlY3RvcjxEYXRhTGFi
ZWxQdHI+IG1fZGF0YVB0cnNUb05leHRJdGVyYXRpb247Ci0gICAgICAgIFZlY3RvcjxQYXJlbnRo
ZXNlc1RhaWwqPiBtX3BhcmVuVGFpbHNGb3JJdGVyYXRpb247CisgICAgICAgIC8vIFRoZSBvcGVy
YXRpb24sIGFzIGEgWWFyT3BDb2RlLCBhbmQgYWxzbyBhIHJlZmVyZW5jZSB0byB0aGUgUGF0dGVy
blRlcm0uCisgICAgICAgIFlhcnJPcENvZGUgbV9vcDsKKyAgICAgICAgUGF0dGVyblRlcm0qIG1f
dGVybTsKKworICAgICAgICAvLyBGb3IgYWx0ZXJuYXRpdmVzLCB0aGlzIGhvbGRzIHRoZSBQYXR0
ZXJuQWx0ZXJuYXRpdmUgYW5kIGRvdWJseSBsaW5rZWQKKyAgICAgICAgLy8gcmVmZXJlbmNlcyB0
byB0aGlzIGFsdGVybmF0aXZlJ3Mgc2libGluZ3MuIEluIHRoZSBjYXNlIG9mIHRoZQorICAgICAg
ICAvLyBPcEJvZHlBbHRlcm5hdGl2ZUVuZCBub2RlIGF0IHRoZSBlbmQgb2YgYSBzZWN0aW9uIG9m
IHJlcGVhdGluZyBub2RlcywKKyAgICAgICAgLy8gbV9uZXh0T3Agd2lsbCByZWZlcmVuY2UgdGhl
IE9wQm9keUFsdGVybmF0aXZlQmVnaW4gbm9kZSBvZiB0aGUgZmlyc3QKKyAgICAgICAgLy8gcmVw
ZWF0aW5nIGFsdGVybmF0aXZlLgorICAgICAgICBQYXR0ZXJuQWx0ZXJuYXRpdmUqIG1fYWx0ZXJu
YXRpdmU7CisgICAgICAgIHNpemVfdCBtX3ByZXZpb3VzT3A7CisgICAgICAgIHNpemVfdCBtX25l
eHRPcDsKKworICAgICAgICAvLyBVc2VkIHRvIHJlY29yZCBhIHNldCBvZiBKdW1wcyBvdXQgb2Yg
dGhlIGdlbmVyYXRlZCBjb2RlLCB0eXBpY2FsbHkKKyAgICAgICAgLy8gdXNlZCBmb3IganVtcHMg
b3V0IHRvIGJhY2t0cmFja2luZyBjb2RlLCBhbmQgYSBzaW5nbGUgcmVlbnRyeSBiYWNrCisgICAg
ICAgIC8vIGludG8gdGhlIGNvZGUgZm9yIGEgbm9kZSAobGlrZWx5IHdoZXJlIGEgYmFja3RyYWNr
IHdpbGwgdHJpZ2dlcgorICAgICAgICAvLyByZW1hdGNoaW5nKS4KKyAgICAgICAgTGFiZWwgbV9y
ZWVudHJ5OworICAgICAgICBKdW1wTGlzdCBtX2p1bXBzOworCisgICAgICAgIC8vIFRoZSAnb3B0
aW1pemVkJyBmbGFnIGlzIHVzZWQgdG8gbnVsbCBvdXQgdGhlIHNlY29uZCBwYXR0ZXJuIGNoYXJh
Y3RlciwKKyAgICAgICAgLy8gd2hlbiB0d28gYXJlIGZ1c2VkIHRvIG1hdGNoIGEgcGFpciB0b2dl
dGhlci4KKyAgICAgICAgYm9vbCBtX29wdGltaXplZDsKKworICAgICAgICAvLyBDdXJyZW50bHl1
c2VkIGluIHRoZSBjYXNlIG9mIHNvbWUgb2YgdGhlIG1vcmUgY29tcGxleCBtYW5hZ2VtZW50IG9m
CisgICAgICAgIC8vICdtX2NoZWNrZWQnLCB0byBjYWNoZSB0aGUgb2Zmc2V0IHVzZWQgaW4gdGhp
cyBhbHRlcm5hdGl2ZSwgdG8gYXZvaWQKKyAgICAgICAgLy8gcmVjYWxjdWxhdGluZyBpdC4KKyAg
ICAgICAgaW50IG1fY2hlY2tBZGp1c3Q7CisKKyAgICAgICAgLy8gVXNlZCBieSBPcE5lc3RlZEFs
dGVybmF0aXZlTmV4dC9FbmQgdG8gaG9sZCB0aGUgcG9pbnRlciB0byB0aGUKKyAgICAgICAgLy8g
dmFsdWUgdGhhdCB3aWxsIGJlIHB1Y2hlZCBpbnRvIHRoZSBwYXR0ZXJuJ3MgZnJhbWUgdG8gcmV0
dXJuIHRvLAorICAgICAgICAvLyB1cG9uIGJhY2t0cmFja2luZyBiYWNrIGludG8gdGhlIGRpc2p1
bmN0aW9uLgorICAgICAgICBEYXRhTGFiZWxQdHIgbV9yZXR1cm5BZGRyZXNzOwogICAgIH07CiAK
LSAgICBzdHJ1Y3QgQmFja3RyYWNrRGVzdGluYXRpb24gewotICAgICAgICB0eXBlZGVmIGVudW0g
ewotICAgICAgICAgICAgTm9CYWNrdHJhY2ssCi0gICAgICAgICAgICBCYWNrdHJhY2tMYWJlbCwK
LSAgICAgICAgICAgIEJhY2t0cmFja1N0YWNrT2Zmc2V0LAotICAgICAgICAgICAgQmFja3RyYWNr
SnVtcExpc3QsCi0gICAgICAgICAgICBCYWNrdHJhY2tMaW5rZWQKLSAgICAgICAgfSBCYWNrdHJh
Y2tUeXBlOwotCi0gICAgICAgIEJhY2t0cmFja0Rlc3RpbmF0aW9uKCkKLSAgICAgICAgICAgIDog
bV9iYWNrdHJhY2tUeXBlKE5vQmFja3RyYWNrKQotICAgICAgICAgICAgLCBtX2JhY2t0cmFja1Rv
TGFiZWwoMCkKLSAgICAgICAgICAgICwgbV9zdWJEYXRhTGFiZWxQdHIoMCkKLSAgICAgICAgICAg
ICwgbV9uZXh0QmFja3RyYWNrKDApCi0gICAgICAgICAgICAsIG1fYmFja3RyYWNrU291cmNlTGFi
ZWwoMCkKLSAgICAgICAgICAgICwgbV9iYWNrdHJhY2tTb3VyY2VKdW1wcygwKQotICAgICAgICB7
Ci0gICAgICAgIH0KLQotICAgICAgICBCYWNrdHJhY2tEZXN0aW5hdGlvbihpbnQzMl90IHN0YWNr
T2Zmc2V0KQotICAgICAgICAgICAgOiBtX2JhY2t0cmFja1R5cGUoQmFja3RyYWNrU3RhY2tPZmZz
ZXQpCi0gICAgICAgICAgICAsIG1fYmFja3RyYWNrU3RhY2tPZmZzZXQoc3RhY2tPZmZzZXQpCi0g
ICAgICAgICAgICAsIG1fYmFja3RyYWNrVG9MYWJlbCgwKQotICAgICAgICAgICAgLCBtX3N1YkRh
dGFMYWJlbFB0cigwKQotICAgICAgICAgICAgLCBtX25leHRCYWNrdHJhY2soMCkKLSAgICAgICAg
ICAgICwgbV9iYWNrdHJhY2tTb3VyY2VMYWJlbCgwKQotICAgICAgICAgICAgLCBtX2JhY2t0cmFj
a1NvdXJjZUp1bXBzKDApCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIEJhY2t0cmFj
a0Rlc3RpbmF0aW9uKExhYmVsIGxhYmVsKQotICAgICAgICAgICAgOiBtX2JhY2t0cmFja1R5cGUo
QmFja3RyYWNrTGFiZWwpCi0gICAgICAgICAgICAsIG1fYmFja3RyYWNrTGFiZWwobGFiZWwpCi0g
ICAgICAgICAgICAsIG1fYmFja3RyYWNrVG9MYWJlbCgwKQotICAgICAgICAgICAgLCBtX3N1YkRh
dGFMYWJlbFB0cigwKQotICAgICAgICAgICAgLCBtX25leHRCYWNrdHJhY2soMCkKLSAgICAgICAg
ICAgICwgbV9iYWNrdHJhY2tTb3VyY2VMYWJlbCgwKQotICAgICAgICAgICAgLCBtX2JhY2t0cmFj
a1NvdXJjZUp1bXBzKDApCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgY2xl
YXIoYm9vbCBkb0RhdGFMYWJlbENsZWFyID0gdHJ1ZSkKLSAgICAgICAgewotICAgICAgICAgICAg
bV9iYWNrdHJhY2tUeXBlID0gTm9CYWNrdHJhY2s7Ci0gICAgICAgICAgICBpZiAoZG9EYXRhTGFi
ZWxDbGVhcikKLSAgICAgICAgICAgICAgICBjbGVhckRhdGFMYWJlbCgpOwotICAgICAgICAgICAg
bV9uZXh0QmFja3RyYWNrID0gMDsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgY2xlYXJEYXRh
TGFiZWwoKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2RhdGFMYWJlbFB0ciA9IERhdGFMYWJl
bFB0cigpOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBoYXNEZXN0aW5hdGlvbigpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiAobV9iYWNrdHJhY2tUeXBlICE9IE5vQmFja3RyYWNr
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgaXNTdGFja09mZnNldCgpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiAobV9iYWNrdHJhY2tUeXBlID09IEJhY2t0cmFja1N0YWNrT2Zm
c2V0KTsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgaXNMYWJlbCgpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiAobV9iYWNrdHJhY2tUeXBlID09IEJhY2t0cmFja0xhYmVsKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGJvb2wgaXNKdW1wTGlzdCgpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiAobV9iYWNrdHJhY2tUeXBlID09IEJhY2t0cmFja0p1bXBMaXN0KTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGJvb2wgaGFzRGF0YUxhYmVsKCkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIG1fZGF0YUxhYmVsUHRyLmlzU2V0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICB2
b2lkIGNvcHlUYXJnZXQoQmFja3RyYWNrRGVzdGluYXRpb24mIHJocywgYm9vbCBjb3B5RGF0YUxh
YmVsID0gdHJ1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgbV9iYWNrdHJhY2tUeXBlID0gcmhz
Lm1fYmFja3RyYWNrVHlwZTsKLSAgICAgICAgICAgIGlmIChtX2JhY2t0cmFja1R5cGUgPT0gQmFj
a3RyYWNrU3RhY2tPZmZzZXQpCi0gICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tTdGFja09mZnNl
dCA9IHJocy5tX2JhY2t0cmFja1N0YWNrT2Zmc2V0OwotICAgICAgICAgICAgZWxzZSBpZiAobV9i
YWNrdHJhY2tUeXBlID09IEJhY2t0cmFja0xhYmVsKQotICAgICAgICAgICAgICAgIG1fYmFja3Ry
YWNrTGFiZWwgPSByaHMubV9iYWNrdHJhY2tMYWJlbDsKLSAgICAgICAgICAgIGlmIChjb3B5RGF0
YUxhYmVsKQotICAgICAgICAgICAgICAgIG1fZGF0YUxhYmVsUHRyID0gcmhzLm1fZGF0YUxhYmVs
UHRyOwotICAgICAgICAgICAgbV9iYWNrdHJhY2tTb3VyY2VKdW1wcyA9IHJocy5tX2JhY2t0cmFj
a1NvdXJjZUp1bXBzOwotICAgICAgICAgICAgbV9iYWNrdHJhY2tTb3VyY2VMYWJlbCA9IHJocy5t
X2JhY2t0cmFja1NvdXJjZUxhYmVsOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBjb3B5VG8o
QmFja3RyYWNrRGVzdGluYXRpb24mIGxocykKLSAgICAgICAgewotICAgICAgICAgICAgbGhzLm1f
YmFja3RyYWNrVHlwZSA9IG1fYmFja3RyYWNrVHlwZTsKLSAgICAgICAgICAgIGlmIChtX2JhY2t0
cmFja1R5cGUgPT0gQmFja3RyYWNrU3RhY2tPZmZzZXQpCi0gICAgICAgICAgICAgICAgbGhzLm1f
YmFja3RyYWNrU3RhY2tPZmZzZXQgPSBtX2JhY2t0cmFja1N0YWNrT2Zmc2V0OwotICAgICAgICAg
ICAgZWxzZSBpZiAobV9iYWNrdHJhY2tUeXBlID09IEJhY2t0cmFja0xhYmVsKQotICAgICAgICAg
ICAgICAgIGxocy5tX2JhY2t0cmFja0xhYmVsID0gbV9iYWNrdHJhY2tMYWJlbDsKLSAgICAgICAg
ICAgIGxocy5tX2JhY2t0cmFja1NvdXJjZUp1bXBzID0gbV9iYWNrdHJhY2tTb3VyY2VKdW1wczsK
LSAgICAgICAgICAgIGxocy5tX2JhY2t0cmFja1NvdXJjZUxhYmVsID0gbV9iYWNrdHJhY2tTb3Vy
Y2VMYWJlbDsKLSAgICAgICAgICAgIGxocy5tX2RhdGFMYWJlbFB0ciA9IG1fZGF0YUxhYmVsUHRy
OwotICAgICAgICAgICAgbGhzLm1fYmFja1RyYWNrSnVtcHMgPSBtX2JhY2tUcmFja0p1bXBzOwot
ICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBhZGRCYWNrdHJhY2tKdW1wKEp1bXAganVtcCkKLSAg
ICAgICAgewotICAgICAgICAgICAgbV9iYWNrVHJhY2tKdW1wcy5hcHBlbmQoanVtcCk7Ci0gICAg
ICAgIH0KLQotICAgICAgICB2b2lkIHNldFN0YWNrT2Zmc2V0KGludDMyX3Qgc3RhY2tPZmZzZXQp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG1fYmFja3RyYWNrVHlwZSA9IEJhY2t0cmFja1N0YWNr
T2Zmc2V0OwotICAgICAgICAgICAgbV9iYWNrdHJhY2tTdGFja09mZnNldCA9IHN0YWNrT2Zmc2V0
OwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBzZXRMYWJlbChMYWJlbCBsYWJlbCkKLSAgICAg
ICAgewotICAgICAgICAgICAgbV9iYWNrdHJhY2tUeXBlID0gQmFja3RyYWNrTGFiZWw7Ci0gICAg
ICAgICAgICBtX2JhY2t0cmFja0xhYmVsID0gbGFiZWw7Ci0gICAgICAgIH0KLQotICAgICAgICB2
b2lkIHNldE5leHRCYWNrdHJhY2tMYWJlbChMYWJlbCBsYWJlbCkKLSAgICAgICAgewotICAgICAg
ICAgICAgaWYgKG1fbmV4dEJhY2t0cmFjaykKLSAgICAgICAgICAgICAgICBtX25leHRCYWNrdHJh
Y2stPnNldExhYmVsKGxhYmVsKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgcHJvcGFnYXRl
QmFja3RyYWNrVG9MYWJlbChjb25zdCBCYWNrdHJhY2tEZXN0aW5hdGlvbiYgcmhzKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBpZiAoIW1fYmFja3RyYWNrVG9MYWJlbCAmJiByaHMubV9iYWNrdHJh
Y2tUb0xhYmVsKQotICAgICAgICAgICAgICAgIG1fYmFja3RyYWNrVG9MYWJlbCA9IHJocy5tX2Jh
Y2t0cmFja1RvTGFiZWw7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHNldEJhY2t0cmFja1Rv
TGFiZWwoTGFiZWwqIGJhY2t0cmFja1RvTGFiZWwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlm
ICghbV9iYWNrdHJhY2tUb0xhYmVsKQotICAgICAgICAgICAgICAgIG1fYmFja3RyYWNrVG9MYWJl
bCA9IGJhY2t0cmFja1RvTGFiZWw7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIGhhc0JhY2t0
cmFja1RvTGFiZWwoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9iYWNrdHJhY2tU
b0xhYmVsOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBzZXRCYWNrdHJhY2tKdW1wTGlzdChK
dW1wTGlzdCoganVtcExpc3QpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fYmFja3RyYWNrVHlw
ZSA9IEJhY2t0cmFja0p1bXBMaXN0OwotICAgICAgICAgICAgbV9iYWNrdHJhY2tTb3VyY2VKdW1w
cyA9IGp1bXBMaXN0OwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBzZXRCYWNrdHJhY2tTb3Vy
Y2VMYWJlbChMYWJlbCogYmFja3RyYWNrU291cmNlTGFiZWwpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIG1fYmFja3RyYWNrU291cmNlTGFiZWwgPSBiYWNrdHJhY2tTb3VyY2VMYWJlbDsKLSAgICAg
ICAgfQotCi0gICAgICAgIHZvaWQgc2V0RGF0YUxhYmVsKERhdGFMYWJlbFB0ciBkcCkKLSAgICAg
ICAgewotICAgICAgICAgICAgaWYgKG1fc3ViRGF0YUxhYmVsUHRyKSB7Ci0gICAgICAgICAgICAg
ICAgKm1fc3ViRGF0YUxhYmVsUHRyID0gZHA7Ci0gICAgICAgICAgICAgICAgbV9zdWJEYXRhTGFi
ZWxQdHIgPSAwOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQo
IWhhc0RhdGFMYWJlbCgpKTsKLSAgICAgICAgICAgICAgICBtX2RhdGFMYWJlbFB0ciA9IGRwOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBjbGVhclN1YkRhdGFMYWJl
bFB0cigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fc3ViRGF0YUxhYmVsUHRyID0gMDsKLSAg
ICAgICAgfQotCi0gICAgICAgIHZvaWQgc2V0U3ViRGF0YUxhYmVsUHRyKERhdGFMYWJlbFB0ciog
c3ViRGF0YUxhYmVsUHRyKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX3N1YkRhdGFMYWJlbFB0
ciA9IHN1YkRhdGFMYWJlbFB0cjsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgbGlua1RvTmV4
dEJhY2t0cmFjayhCYWNrdHJhY2tEZXN0aW5hdGlvbiogbmV4dEJhY2t0cmFjaykKLSAgICAgICAg
ewotICAgICAgICAgICAgbV9uZXh0QmFja3RyYWNrID0gbmV4dEJhY2t0cmFjazsKLSAgICAgICAg
fQotCi0gICAgICAgIGludDMyX3QgZ2V0U3RhY2tPZmZzZXQoKQorICAgIC8vIEJhY2t0cmFja2lu
Z1N0YXRlCisgICAgLy8gVGhpcyBjbGFzcyBlbmNhcHN1YWx0ZXMgaW5mb3JtYXRpb24gYWJvdXQg
dGhlIHN0YXRlIG9mIGNvZGUgZ2VuZXJhdGlvbgorICAgIC8vIHdoaWxzdCBnZW5lcmF0aW5nIHRo
ZSBjb2RlIGZvciBiYWNrdHJhY2tpbmcsIHdoZW4gYSB0ZXJtIGZhaWxzIHRvIG1hdGNoLgorICAg
IC8vIFVwb24gZW50cnkgdG8gY29kZSBnZW5lcmF0aW9uIG9mIHRoZSBiYWNrdHJhY2tpbmcgY29k
ZSBmb3IgYSBnaXZlbiBub2RlLAorICAgIC8vIHRoZSBCYWNrdHJhY2tpbmcgc3RhdGUgd2lsbCBo
b2xkIHJlZmVyZW5jZXMgdG8gYWxsIGNvbnRyb2wgZmxvdyBzb3VyY2VzCisgICAgLy8gdGhhdCBh
cmUgb3V0cHV0cyBpbiBuZWVkIG9mIGZ1cnRoZXIgYmFja3RyYWNraW5nIGZyb20gdGhlIHByaW9y
IG5vZGUKKyAgICAvLyBnZW5lcmF0ZWQgKHdoaWNoIGlzIHRoZSBzdWJzZXF1ZW50IG9wZXJhdGlv
biBpbiB0aGUgcmVndWxhciBleHByZXNzaW9uLAorICAgIC8vIGFuZCBpbiB0aGUgbV9vcHMgVmVj
dG9yLCBzaW5jZSB3ZSBnZW5lcmF0ZWQgYmFja3RyYWNraW5nIGJhY2t3YXJkcykuCisgICAgLy8g
VGhlc2UgcmVmZXJlbmNlcyB0byBjb250cm9sIGZsb3cgdGFrZSB0aGUgZm9ybSBvZjoKKyAgICAv
LyAgLSBBIGp1bXAgbGlzdCBvZiBqdW1wcywgdG8gYmUgbGlua2VkIHRvIGNvZGUgdGhhdCB3aWxs
IGJhY2t0cmFjayB0aGVtCisgICAgLy8gICAgZnVydGhlci4KKyAgICAvLyAgLSBBIHNldCBvZiBE
YXRhTGFiZWxQdHIgdmFsdWVzLCB0byBiZSBwb3B1bGF0ZWQgd2l0aCB2YWx1ZXMgdG8gYmUKKyAg
ICAvLyAgICB0cmVhdGVkIGVmZmVjdGl2ZWx5IGFzIHJldHVybiBhZGRyZXNzZXMgYmFja3RyYWNr
aW5nIGludG8gY29tcGxleAorICAgIC8vICAgIHN1YnBhdHRlcm5zLgorICAgIC8vICAtIEEgZmxh
ZyBpbmRpY2F0aW5nIHRoYXQgdGhlIGN1cnJlbnQgc2VxdWVuY2Ugb2YgZ2VuZXJhdGVkIGNvZGUg
dXAgdG8KKyAgICAvLyAgICB0aGlzIHBvaW50IHJlcXVpcmVzIGJhY2t0cmFja2luZy4KKyAgICBj
bGFzcyBCYWNrdHJhY2tpbmdTdGF0ZSB7CisgICAgcHVibGljOgorICAgICAgICBCYWNrdHJhY2tp
bmdTdGF0ZSgpCisgICAgICAgICAgICA6IG1fcGVuZGluZ0ZhbGx0aHJvdWdoKGZhbHNlKQogICAg
ICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQobV9iYWNrdHJhY2tUeXBlID09IEJhY2t0cmFja1N0
YWNrT2Zmc2V0KTsKLSAgICAgICAgICAgIHJldHVybiBtX2JhY2t0cmFja1N0YWNrT2Zmc2V0Owog
ICAgICAgICB9CiAKLSAgICAgICAgTGFiZWwgZ2V0TGFiZWwoKQorICAgICAgICAvLyBBZGQgYSBq
dW1wIG9yIGp1bXBzLCBhIHJldHVybiBhZGRyZXNzLCBvciBzZXQgdGhlIGZsYWcgaW5kaWNhdGlu
ZworICAgICAgICAvLyB0aGF0IHRoZSBjdXJyZW50ICdmYWxsdGhyb3VnaCcgY29udHJvbCBmbG93
IHJlcXVpcmVzIGJhY2t0cmFja2luZy4KKyAgICAgICAgdm9pZCBhcHBlbmQoY29uc3QgSnVtcCYg
anVtcCkKICAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKG1fYmFja3RyYWNrVHlwZSA9PSBC
YWNrdHJhY2tMYWJlbCk7Ci0gICAgICAgICAgICByZXR1cm4gbV9iYWNrdHJhY2tMYWJlbDsKKyAg
ICAgICAgICAgIG1fbGF0ZXJGYWlsdXJlcy5hcHBlbmQoanVtcCk7CiAgICAgICAgIH0KLQotICAg
ICAgICBKdW1wTGlzdCYgZ2V0QmFja3RyYWNrSnVtcHMoKQorICAgICAgICB2b2lkIGFwcGVuZChK
dW1wTGlzdCYganVtcExpc3QpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX2JhY2tU
cmFja0p1bXBzOworICAgICAgICAgICAgbV9sYXRlckZhaWx1cmVzLmFwcGVuZChqdW1wTGlzdCk7
CiAgICAgICAgIH0KLQotICAgICAgICBEYXRhTGFiZWxQdHImIGdldERhdGFMYWJlbCgpCisgICAg
ICAgIHZvaWQgYXBwZW5kKGNvbnN0IERhdGFMYWJlbFB0ciYgcmV0dXJuQWRkcmVzcykKICAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIG1fZGF0YUxhYmVsUHRyOworICAgICAgICAgICAgbV9w
ZW5kaW5nUmV0dXJucy5hcHBlbmQocmV0dXJuQWRkcmVzcyk7CiAgICAgICAgIH0KLQotICAgICAg
ICB2b2lkIGp1bXBUb0JhY2t0cmFjayhNYWNyb0Fzc2VtYmxlciogbWFzbSkKLSAgICAgICAgewot
ICAgICAgICAgICAgaWYgKGlzSnVtcExpc3QoKSkgewotICAgICAgICAgICAgICAgIGlmIChtX2Jh
Y2t0cmFja1NvdXJjZUxhYmVsICYmIChtX2JhY2t0cmFja1NvdXJjZUxhYmVsLT5pc1NldCgpKSkK
LSAgICAgICAgICAgICAgICAgICAgbWFzbS0+anVtcCgpLmxpbmtUbygqbV9iYWNrdHJhY2tTb3Vy
Y2VMYWJlbCwgbWFzbSk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAg
ICBtX2JhY2t0cmFja1NvdXJjZUp1bXBzLT5hcHBlbmQobWFzbS0+anVtcCgpKTsKLSAgICAgICAg
ICAgIH0gZWxzZSBpZiAoaXNTdGFja09mZnNldCgpKQotICAgICAgICAgICAgICAgIG1hc20tPmp1
bXAoQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgbV9iYWNrdHJhY2tTdGFja09mZnNldCkp
OwotICAgICAgICAgICAgZWxzZSBpZiAoaXNMYWJlbCgpKQotICAgICAgICAgICAgICAgIG1hc20t
Pmp1bXAoKS5saW5rVG8obV9iYWNrdHJhY2tMYWJlbCwgbWFzbSk7Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgbV9iYWNrVHJhY2tKdW1wcy5hcHBlbmQobWFzbS0+anVtcCgpKTsK
LSAgICAgICAgfQotCi0gICAgICAgIHZvaWQganVtcFRvQmFja3RyYWNrKFlhcnJHZW5lcmF0b3Iq
IGdlbmVyYXRvciwgSnVtcCBqdW1wKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaXNKdW1w
TGlzdCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fYmFja3RyYWNrU291cmNlTGFiZWwgJiYg
KG1fYmFja3RyYWNrU291cmNlTGFiZWwtPmlzU2V0KCkpKQotICAgICAgICAgICAgICAgICAgICBq
dW1wLmxpbmtUbygqbV9iYWNrdHJhY2tTb3VyY2VMYWJlbCwgZ2VuZXJhdG9yKTsKLSAgICAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG1fYmFja3RyYWNrU291cmNlSnVtcHMt
PmFwcGVuZChqdW1wKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNTdGFja09mZnNldCgpKQot
ICAgICAgICAgICAgICAgIGdlbmVyYXRvci0+bV9leHByZXNzaW9uU3RhdGUuYWRkSW5kaXJlY3RK
dW1wRW50cnkoZ2V0U3RhY2tPZmZzZXQoKSwganVtcCk7Ci0gICAgICAgICAgICBlbHNlIGlmIChp
c0xhYmVsKCkpCi0gICAgICAgICAgICAgICAganVtcC5saW5rVG8oZ2V0TGFiZWwoKSwgZ2VuZXJh
dG9yKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX2JhY2tUcmFja0p1bXBz
LmFwcGVuZChqdW1wKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQganVtcFRvQmFja3RyYWNr
KFlhcnJHZW5lcmF0b3IqIGdlbmVyYXRvciwgSnVtcExpc3QmIGp1bXBzKQorICAgICAgICB2b2lk
IGZhbGx0aHJvdWdoKCkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKGlzSnVtcExpc3QoKSkg
ewotICAgICAgICAgICAgICAgIGlmIChtX2JhY2t0cmFja1NvdXJjZUxhYmVsICYmIChtX2JhY2t0
cmFja1NvdXJjZUxhYmVsLT5pc1NldCgpKSkKLSAgICAgICAgICAgICAgICAgICAganVtcHMubGlu
a1RvKCptX2JhY2t0cmFja1NvdXJjZUxhYmVsLCBnZW5lcmF0b3IpOwotICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tTb3VyY2VKdW1wcy0+YXBwZW5k
KGp1bXBzKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNTdGFja09mZnNldCgpKQotICAgICAg
ICAgICAgICAgIGdlbmVyYXRvci0+bV9leHByZXNzaW9uU3RhdGUuYWRkSW5kaXJlY3RKdW1wRW50
cnkoZ2V0U3RhY2tPZmZzZXQoKSwganVtcHMpOwotICAgICAgICAgICAgZWxzZSBpZiAoaXNMYWJl
bCgpKQotICAgICAgICAgICAgICAgIGp1bXBzLmxpbmtUbyhnZXRMYWJlbCgpLCBnZW5lcmF0b3Ip
OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1fYmFja1RyYWNrSnVtcHMuYXBw
ZW5kKGp1bXBzKTsKKyAgICAgICAgICAgIEFTU0VSVCghbV9wZW5kaW5nRmFsbHRocm91Z2gpOwor
ICAgICAgICAgICAgbV9wZW5kaW5nRmFsbHRocm91Z2ggPSB0cnVlOwogICAgICAgICB9CiAKLSAg
ICAgICAgYm9vbCBwbGFudEp1bXBUb0JhY2t0cmFja0lmRXhpc3RzKFlhcnJHZW5lcmF0b3IqIGdl
bmVyYXRvcikKKyAgICAgICAgLy8gVGhlc2UgbWV0aG9kcyBjbGVhciB0aGUgYmFja3RyYWNraW5n
IHN0YXRlLCBlaXRoZXIgbGlua2luZyB0byB0aGUKKyAgICAgICAgLy8gY3VycmVudCBsb2NhdGlv
biwgYSBwcm92aWRlZCBsYWJlbCwgb3IgY29weWluZyB0aGUgYmFja3RyYWNraW5nIG91dAorICAg
ICAgICAvLyB0byBhIEp1bXBMaXN0LiBBbGwgYWN0aW9ucyBtYXkgcmVxdWlyZSBjb2RlIGdlbmVy
YXRpb24gdG8gdGFrZSBwbGFjZSwKKyAgICAgICAgLy8gYW5kIGFzIHN1Y2ggYXJlIHBhc3NlZCBh
IHBvaW50ZXIgdG8gdGhlIGFzc2VtYmxlci4KKyAgICAgICAgdm9pZCBsaW5rKE1hY3JvQXNzZW1i
bGVyKiBhc3NlbWJsZXIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChpc0p1bXBMaXN0KCkp
IHsKLSAgICAgICAgICAgICAgICBpZiAobV9iYWNrdHJhY2tTb3VyY2VMYWJlbCAmJiAobV9iYWNr
dHJhY2tTb3VyY2VMYWJlbC0+aXNTZXQoKSkpCi0gICAgICAgICAgICAgICAgICAgIGdlbmVyYXRv
ci0+anVtcCgqbV9iYWNrdHJhY2tTb3VyY2VMYWJlbCk7Ci0gICAgICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgICAgICBtX2JhY2t0cmFja1NvdXJjZUp1bXBzLT5hcHBlbmQoZ2VuZXJh
dG9yLT5qdW1wKCkpOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAg
ICBpZiAobV9wZW5kaW5nUmV0dXJucy5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICBMYWJlbCBo
ZXJlKGFzc2VtYmxlcik7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fcGVuZGluZ1JldHVybnMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIG1fYmFj
a3RyYWNrUmVjb3Jkcy5hcHBlbmQoUmV0dXJuQWRkcmVzc1JlY29yZChtX3BlbmRpbmdSZXR1cm5z
W2ldLCBoZXJlKSk7CisgICAgICAgICAgICAgICAgbV9wZW5kaW5nUmV0dXJucy5jbGVhcigpOwog
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoaXNTdGFja09mZnNldCgpKSB7Ci0gICAg
ICAgICAgICAgICAgZ2VuZXJhdG9yLT5qdW1wKEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIs
IGdldFN0YWNrT2Zmc2V0KCkpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGlzTGFiZWwoKSkgewotICAgICAgICAgICAgICAg
IGdlbmVyYXRvci0+anVtcChnZXRMYWJlbCgpKTsKLSAgICAgICAgICAgICAgICBpZiAoaGFzRGF0
YUxhYmVsKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLT5tX2V4cHJlc3Npb25T
dGF0ZS5tX2JhY2t0cmFja1JlY29yZHMuYXBwZW5kKEFsdGVybmF0aXZlQmFja3RyYWNrUmVjb3Jk
KGdldERhdGFMYWJlbCgpLCBnZXRMYWJlbCgpKSk7Ci0gICAgICAgICAgICAgICAgICAgIGNsZWFy
RGF0YUxhYmVsKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICBtX2xhdGVyRmFpbHVyZXMubGluayhhc3NlbWJsZXIpOworICAgICAgICAgICAgbV9sYXRl
ckZhaWx1cmVzLmNsZWFyKCk7CisgICAgICAgICAgICBtX3BlbmRpbmdGYWxsdGhyb3VnaCA9IGZh
bHNlOwogICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBsaW5rQmFja3RyYWNrVG9MYWJlbChMYWJl
bCBiYWNrdHJhY2tMYWJlbCkKKyAgICAgICAgdm9pZCBsaW5rVG8oTGFiZWwgbGFiZWwsIE1hY3Jv
QXNzZW1ibGVyKiBhc3NlbWJsZXIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtX2JhY2t0
cmFja1RvTGFiZWwpCi0gICAgICAgICAgICAgICAgKm1fYmFja3RyYWNrVG9MYWJlbCA9IGJhY2t0
cmFja0xhYmVsOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBsaW5rQWx0ZXJuYXRpdmVCYWNr
dHJhY2tzKFlhcnJHZW5lcmF0b3IqIGdlbmVyYXRvciwgYm9vbCBuZXh0SXRlcmF0aW9uID0gZmFs
c2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIExhYmVsIGhlcmVMYWJlbCA9IGdlbmVyYXRvci0+
bGFiZWwoKTsKLQotICAgICAgICAgICAgaWYgKG1fYmFja3RyYWNrVG9MYWJlbCkgewotICAgICAg
ICAgICAgICAgICptX2JhY2t0cmFja1RvTGFiZWwgPSBoZXJlTGFiZWw7Ci0gICAgICAgICAgICAg
ICAgbV9iYWNrdHJhY2tUb0xhYmVsID0gMDsKKyAgICAgICAgICAgIGlmIChtX3BlbmRpbmdSZXR1
cm5zLnNpemUoKSkgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
X3BlbmRpbmdSZXR1cm5zLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICBtX2JhY2t0
cmFja1JlY29yZHMuYXBwZW5kKFJldHVybkFkZHJlc3NSZWNvcmQobV9wZW5kaW5nUmV0dXJuc1tp
XSwgbGFiZWwpKTsKKyAgICAgICAgICAgICAgICBtX3BlbmRpbmdSZXR1cm5zLmNsZWFyKCk7CiAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1fYmFja1RyYWNrSnVtcHMubGluayhnZW5lcmF0
b3IpOwotCi0gICAgICAgICAgICBpZiAobmV4dEl0ZXJhdGlvbikKLSAgICAgICAgICAgICAgICBn
ZW5lcmF0b3ItPm1fZXhwcmVzc2lvblN0YXRlLmxpbmtUb05leHRJdGVyYXRpb24oaGVyZUxhYmVs
KTsKLQotICAgICAgICAgICAgaWYgKGhhc0RhdGFMYWJlbCgpKSB7Ci0gICAgICAgICAgICAgICAg
Z2VuZXJhdG9yLT5tX2V4cHJlc3Npb25TdGF0ZS5tX2JhY2t0cmFja1JlY29yZHMuYXBwZW5kKEFs
dGVybmF0aXZlQmFja3RyYWNrUmVjb3JkKGdldERhdGFMYWJlbCgpLCBoZXJlTGFiZWwpKTsKLSAg
ICAgICAgICAgICAgICAvLyBkYXRhIGxhYmVsIGNsZWFyZWQgYXMgYSByZXN1bHQgb2YgdGhlIGNs
ZWFyKCkgYmVsb3cKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY2xlYXIoKTsKKyAgICAg
ICAgICAgIGlmIChtX3BlbmRpbmdGYWxsdGhyb3VnaCkKKyAgICAgICAgICAgICAgICBhc3NlbWJs
ZXItPmp1bXAobGFiZWwpOworICAgICAgICAgICAgbV9sYXRlckZhaWx1cmVzLmxpbmtUbyhsYWJl
bCwgYXNzZW1ibGVyKTsKKyAgICAgICAgICAgIG1fbGF0ZXJGYWlsdXJlcy5jbGVhcigpOworICAg
ICAgICAgICAgbV9wZW5kaW5nRmFsbHRocm91Z2ggPSBmYWxzZTsKICAgICAgICAgfQotCi0gICAg
ICAgIHZvaWQgbGlua0FsdGVybmF0aXZlQmFja3RyYWNrc1RvKFlhcnJHZW5lcmF0b3IqIGdlbmVy
YXRvciwgTGFiZWwgbGFiZWwsIGJvb2wgbmV4dEl0ZXJhdGlvbiA9IGZhbHNlKQorICAgICAgICB2
b2lkIHRha2VCYWNrdHJhY2tzVG9KdW1wTGlzdChKdW1wTGlzdCYganVtcExpc3QsIE1hY3JvQXNz
ZW1ibGVyKiBhc3NlbWJsZXIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1fYmFja1RyYWNrSnVt
cHMubGlua1RvKGxhYmVsLCBnZW5lcmF0b3IpOwotCi0gICAgICAgICAgICBpZiAobmV4dEl0ZXJh
dGlvbikKLSAgICAgICAgICAgICAgICBnZW5lcmF0b3ItPm1fZXhwcmVzc2lvblN0YXRlLmxpbmtU
b05leHRJdGVyYXRpb24obGFiZWwpOwotCi0gICAgICAgICAgICBpZiAoaGFzRGF0YUxhYmVsKCkp
IHsKLSAgICAgICAgICAgICAgICBnZW5lcmF0b3ItPm1fZXhwcmVzc2lvblN0YXRlLm1fYmFja3Ry
YWNrUmVjb3Jkcy5hcHBlbmQoQWx0ZXJuYXRpdmVCYWNrdHJhY2tSZWNvcmQoZ2V0RGF0YUxhYmVs
KCksIGxhYmVsKSk7Ci0gICAgICAgICAgICAgICAgY2xlYXJEYXRhTGFiZWwoKTsKKyAgICAgICAg
ICAgIGlmIChtX3BlbmRpbmdSZXR1cm5zLnNpemUoKSkgeworICAgICAgICAgICAgICAgIExhYmVs
IGhlcmUoYXNzZW1ibGVyKTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9wZW5kaW5nUmV0dXJucy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgbV9i
YWNrdHJhY2tSZWNvcmRzLmFwcGVuZChSZXR1cm5BZGRyZXNzUmVjb3JkKG1fcGVuZGluZ1JldHVy
bnNbaV0sIGhlcmUpKTsKKyAgICAgICAgICAgICAgICBtX3BlbmRpbmdSZXR1cm5zLmNsZWFyKCk7
CisgICAgICAgICAgICAgICAgbV9wZW5kaW5nRmFsbHRocm91Z2ggPSB0cnVlOwogICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKG1fcGVuZGluZ0ZhbGx0aHJvdWdoKQorICAgICAgICAgICAg
ICAgIGp1bXBMaXN0LmFwcGVuZChhc3NlbWJsZXItPmp1bXAoKSk7CisgICAgICAgICAgICBqdW1w
TGlzdC5hcHBlbmQobV9sYXRlckZhaWx1cmVzKTsKKyAgICAgICAgICAgIG1fbGF0ZXJGYWlsdXJl
cy5jbGVhcigpOworICAgICAgICAgICAgbV9wZW5kaW5nRmFsbHRocm91Z2ggPSBmYWxzZTsKICAg
ICAgICAgfQogCi0gICAgcHJpdmF0ZToKLSAgICAgICAgQmFja3RyYWNrVHlwZSBtX2JhY2t0cmFj
a1R5cGU7Ci0gICAgICAgIGludDMyX3QgbV9iYWNrdHJhY2tTdGFja09mZnNldDsKLSAgICAgICAg
TGFiZWwgbV9iYWNrdHJhY2tMYWJlbDsKLSAgICAgICAgRGF0YUxhYmVsUHRyIG1fZGF0YUxhYmVs
UHRyOwotICAgICAgICBMYWJlbCogbV9iYWNrdHJhY2tUb0xhYmVsOwotICAgICAgICBEYXRhTGFi
ZWxQdHIqIG1fc3ViRGF0YUxhYmVsUHRyOwotICAgICAgICBCYWNrdHJhY2tEZXN0aW5hdGlvbiog
bV9uZXh0QmFja3RyYWNrOwotICAgICAgICBMYWJlbCogbV9iYWNrdHJhY2tTb3VyY2VMYWJlbDsK
LSAgICAgICAgSnVtcExpc3QqIG1fYmFja3RyYWNrU291cmNlSnVtcHM7Ci0gICAgICAgIEp1bXBM
aXN0IG1fYmFja1RyYWNrSnVtcHM7Ci0gICAgfTsKLQotICAgIHN0cnVjdCBUZXJtR2VuZXJhdGlv
blN0YXRlIHsKLSAgICAgICAgVGVybUdlbmVyYXRpb25TdGF0ZShQYXR0ZXJuRGlzanVuY3Rpb24q
IGRpc2p1bmN0aW9uLCB1bnNpZ25lZCBjaGVja2VkVG90YWwpCi0gICAgICAgICAgICA6IGRpc2p1
bmN0aW9uKGRpc2p1bmN0aW9uKQotICAgICAgICAgICAgLCBjaGVja2VkVG90YWwoY2hlY2tlZFRv
dGFsKQotICAgICAgICAgICAgLCBtX3N1YlBhcmVuTnVtKDApCi0gICAgICAgICAgICAsIG1fbGlu
a2VkQmFja3RyYWNrKDApCi0gICAgICAgICAgICAsIG1fanVtcExpc3QoMCkKLSAgICAgICAgewot
ICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCByZXNldEFsdGVybmF0aXZlKCkKLSAgICAgICAgewot
ICAgICAgICAgICAgbV9iYWNrdHJhY2suY2xlYXIoKTsKLSAgICAgICAgICAgIGFsdCA9IDA7Ci0g
ICAgICAgIH0KLSAgICAgICAgYm9vbCBhbHRlcm5hdGl2ZVZhbGlkKCkKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIGFsdCA8IGRpc2p1bmN0aW9uLT5tX2FsdGVybmF0aXZlcy5zaXplKCk7
Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBuZXh0QWx0ZXJuYXRpdmUoKQotICAgICAgICB7Ci0g
ICAgICAgICAgICArK2FsdDsKLSAgICAgICAgfQotICAgICAgICBQYXR0ZXJuQWx0ZXJuYXRpdmUq
IGFsdGVybmF0aXZlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGRpc2p1bmN0aW9u
LT5tX2FsdGVybmF0aXZlc1thbHRdOwotICAgICAgICB9Ci0gICAgICAgIGJvb2wgaXNMYXN0QWx0
ZXJuYXRpdmUoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKGFsdCArIDEpID09IGRp
c2p1bmN0aW9uLT5tX2FsdGVybmF0aXZlcy5zaXplKCk7Ci0gICAgICAgIH0KLQotICAgICAgICB2
b2lkIHJlc2V0VGVybSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChhbHRlcm5hdGl2
ZVZhbGlkKCkpOwotICAgICAgICAgICAgdCA9IDA7Ci0gICAgICAgICAgICBtX3N1YlBhcmVuTnVt
ID0gMDsKLSAgICAgICAgfQotICAgICAgICBib29sIHRlcm1WYWxpZCgpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIEFTU0VSVChhbHRlcm5hdGl2ZVZhbGlkKCkpOwotICAgICAgICAgICAgcmV0dXJu
IHQgPCBhbHRlcm5hdGl2ZSgpLT5tX3Rlcm1zLnNpemUoKTsKLSAgICAgICAgfQotICAgICAgICB2
b2lkIG5leHRUZXJtKCkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKGFsdGVybmF0aXZl
VmFsaWQoKSk7Ci0gICAgICAgICAgICArK3Q7Ci0gICAgICAgIH0KLSAgICAgICAgUGF0dGVyblRl
cm0mIHRlcm0oKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoYWx0ZXJuYXRpdmVWYWxp
ZCgpKTsKLSAgICAgICAgICAgIHJldHVybiBhbHRlcm5hdGl2ZSgpLT5tX3Rlcm1zW3RdOwotICAg
ICAgICB9Ci0gICAgICAgIGJvb2wgaXNMYXN0VGVybSgpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IEFTU0VSVChhbHRlcm5hdGl2ZVZhbGlkKCkpOwotICAgICAgICAgICAgcmV0dXJuICh0ICsgMSkg
PT0gYWx0ZXJuYXRpdmUoKS0+bV90ZXJtcy5zaXplKCk7Ci0gICAgICAgIH0KLSAgICAgICAgdW5z
aWduZWQgZ2V0U3ViUGFyZW5OdW0oKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9z
dWJQYXJlbk51bSsrOwotICAgICAgICB9Ci0gICAgICAgIGJvb2wgaXNNYWluRGlzanVuY3Rpb24o
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gIWRpc2p1bmN0aW9uLT5tX3BhcmVudDsK
LSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgc2V0SnVtcExpc3RUb1ByaW9yUGFyZW4oSnVtcExp
c3QqIGp1bXBMaXN0KQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2p1bXBMaXN0ID0ganVtcExp
c3Q7Ci0gICAgICAgIH0KLQotICAgICAgICBKdW1wTGlzdCogZ2V0SnVtcExpc3RUb1ByaW9yUGFy
ZW4oKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9qdW1wTGlzdDsKLSAgICAgICAg
fQotCi0gICAgICAgIFBhdHRlcm5UZXJtJiBsb29rYWhlYWRUZXJtKCkKLSAgICAgICAgewotICAg
ICAgICAgICAgQVNTRVJUKGFsdGVybmF0aXZlVmFsaWQoKSk7Ci0gICAgICAgICAgICBBU1NFUlQo
KHQgKyAxKSA8IGFsdGVybmF0aXZlKCktPm1fdGVybXMuc2l6ZSgpKTsKLSAgICAgICAgICAgIHJl
dHVybiBhbHRlcm5hdGl2ZSgpLT5tX3Rlcm1zW3QgKyAxXTsKLSAgICAgICAgfQotICAgICAgICBi
b29sIGlzU2luZ2xlUGF0dGVybkNoYXJhY3Rlckxvb2thaGVhZFRlcm0oKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBBU1NFUlQoYWx0ZXJuYXRpdmVWYWxpZCgpKTsKLSAgICAgICAgICAgIHJldHVy
biAoKHQgKyAxKSA8IGFsdGVybmF0aXZlKCktPm1fdGVybXMuc2l6ZSgpKQotICAgICAgICAgICAg
ICAgICYmIChsb29rYWhlYWRUZXJtKCkudHlwZSA9PSBQYXR0ZXJuVGVybTo6VHlwZVBhdHRlcm5D
aGFyYWN0ZXIpCi0gICAgICAgICAgICAgICAgJiYgKGxvb2thaGVhZFRlcm0oKS5xdWFudGl0eVR5
cGUgPT0gUXVhbnRpZmllckZpeGVkQ291bnQpCi0gICAgICAgICAgICAgICAgJiYgKGxvb2thaGVh
ZFRlcm0oKS5xdWFudGl0eUNvdW50ID09IDEpOwotICAgICAgICB9Ci0KLSAgICAgICAgaW50IGlu
cHV0T2Zmc2V0KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHRlcm0oKS5pbnB1dFBv
c2l0aW9uIC0gY2hlY2tlZFRvdGFsOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBjbGVhckJh
Y2t0cmFjaygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fYmFja3RyYWNrLmNsZWFyKGZhbHNl
KTsKLSAgICAgICAgICAgIG1fbGlua2VkQmFja3RyYWNrID0gMDsKLSAgICAgICAgfQotCi0gICAg
ICAgIHZvaWQganVtcFRvQmFja3RyYWNrKE1hY3JvQXNzZW1ibGVyKiBtYXNtKQotICAgICAgICB7
Ci0gICAgICAgICAgICBtX2JhY2t0cmFjay5qdW1wVG9CYWNrdHJhY2sobWFzbSk7Ci0gICAgICAg
IH0KLQotICAgICAgICB2b2lkIGp1bXBUb0JhY2t0cmFjayhZYXJyR2VuZXJhdG9yKiBnZW5lcmF0
b3IsIEp1bXAganVtcCkKKyAgICAgICAgYm9vbCBpc0VtcHR5KCkKICAgICAgICAgewotICAgICAg
ICAgICAgbV9iYWNrdHJhY2suanVtcFRvQmFja3RyYWNrKGdlbmVyYXRvciwganVtcCk7CisgICAg
ICAgICAgICByZXR1cm4gbV9sYXRlckZhaWx1cmVzLmVtcHR5KCkgJiYgbV9wZW5kaW5nUmV0dXJu
cy5pc0VtcHR5KCkgJiYgIW1fcGVuZGluZ0ZhbGx0aHJvdWdoOwogICAgICAgICB9CiAKLSAgICAg
ICAgdm9pZCBqdW1wVG9CYWNrdHJhY2soWWFyckdlbmVyYXRvciogZ2VuZXJhdG9yLCBKdW1wTGlz
dCYganVtcHMpCisgICAgICAgIC8vIENhbGxlZCBhdCB0aGUgZW5kIG9mIGNvZGUgZ2VuZXJhdGlv
biB0byBsaW5rIGFsbCByZXR1cm4gYWRkcmVzc2VzLgorICAgICAgICB2b2lkIGxpbmtEYXRhTGFi
ZWxzKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1fYmFj
a3RyYWNrLmp1bXBUb0JhY2t0cmFjayhnZW5lcmF0b3IsIGp1bXBzKTsKKyAgICAgICAgICAgIEFT
U0VSVChpc0VtcHR5KCkpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1f
YmFja3RyYWNrUmVjb3Jkcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICBsaW5rQnVmZmVy
LnBhdGNoKG1fYmFja3RyYWNrUmVjb3Jkc1tpXS5tX2RhdGFMYWJlbCwgbGlua0J1ZmZlci5sb2Nh
dGlvbk9mKG1fYmFja3RyYWNrUmVjb3Jkc1tpXS5tX2JhY2t0cmFja0xvY2F0aW9uKSk7CiAgICAg
ICAgIH0KIAotICAgICAgICBib29sIHBsYW50SnVtcFRvQmFja3RyYWNrSWZFeGlzdHMoWWFyckdl
bmVyYXRvciogZ2VuZXJhdG9yKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9iYWNr
dHJhY2sucGxhbnRKdW1wVG9CYWNrdHJhY2tJZkV4aXN0cyhnZW5lcmF0b3IpOwotICAgICAgICB9
Ci0KLSAgICAgICAgdm9pZCBsaW5rRGF0YUxhYmVsVG9CYWNrdHJhY2tJZkV4aXN0cyhZYXJyR2Vu
ZXJhdG9yKiBnZW5lcmF0b3IsIERhdGFMYWJlbFB0ciBkYXRhTGFiZWwpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIC8vIElmIHdlIGhhdmUgYSBzdGFjayBvZmZzZXQgYmFja3RyYWNrIGRlc3RpbmF0
aW9uLCB1c2UgaXQgZGlyZWN0bHkKLSAgICAgICAgICAgIGlmIChtX2JhY2t0cmFjay5pc1N0YWNr
T2Zmc2V0KCkpIHsKLSAgICAgICAgICAgICAgICBnZW5lcmF0b3ItPm1fZXhwcmVzc2lvblN0YXRl
LmFkZEluZGlyZWN0SnVtcEVudHJ5KG1fYmFja3RyYWNrLmdldFN0YWNrT2Zmc2V0KCksIGRhdGFM
YWJlbCk7Ci0gICAgICAgICAgICAgICAgbV9iYWNrdHJhY2suY2xlYXJTdWJEYXRhTGFiZWxQdHIo
KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBh
IGJhY2t0cmFjayBsYWJlbCwgY29ubmVjdCB0aGUgZGF0YWxhYmVsIHRvIGl0IGRpcmVjdGx5Lgot
ICAgICAgICAgICAgICAgIGlmIChtX2JhY2t0cmFjay5pc0xhYmVsKCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgZ2VuZXJhdG9yLT5tX2V4cHJlc3Npb25TdGF0ZS5tX2JhY2t0cmFja1JlY29yZHMu
YXBwZW5kKEFsdGVybmF0aXZlQmFja3RyYWNrUmVjb3JkKGRhdGFMYWJlbCwgbV9iYWNrdHJhY2su
Z2V0TGFiZWwoKSkpOwotICAgICAgICAgICAgICAgICAgICBtX2JhY2t0cmFjay5jbGVhclN1YkRh
dGFMYWJlbFB0cigpOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAg
ICBzZXRCYWNrdHJhY2tEYXRhTGFiZWwoZGF0YUxhYmVsKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotCi0gICAgICAgIHZvaWQgYWRkQmFja3RyYWNrSnVtcChKdW1wIGp1bXApCi0gICAgICAg
IHsKLSAgICAgICAgICAgIG1fYmFja3RyYWNrLmFkZEJhY2t0cmFja0p1bXAoanVtcCk7Ci0gICAg
ICAgIH0KLQotICAgICAgICB2b2lkIHNldEJhY2t0cmFja0RhdGFMYWJlbChEYXRhTGFiZWxQdHIg
ZHApCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fYmFja3RyYWNrLnNldERhdGFMYWJlbChkcCk7
Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHNldEJhY2tUcmFja1N0YWNrT2Zmc2V0KGludDMy
X3Qgc3RhY2tPZmZzZXQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fYmFja3RyYWNrLnNldFN0
YWNrT2Zmc2V0KHN0YWNrT2Zmc2V0KTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgc2V0QmFj
a3RyYWNrTGFiZWwoTGFiZWwgbGFiZWwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fYmFja3Ry
YWNrLnNldExhYmVsKGxhYmVsKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgbGlua0FsdGVy
bmF0aXZlQmFja3RyYWNrcyhZYXJyR2VuZXJhdG9yKiBnZW5lcmF0b3IsIGJvb2wgbmV4dEl0ZXJh
dGlvbiA9IGZhbHNlKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2JhY2t0cmFjay5saW5rQWx0
ZXJuYXRpdmVCYWNrdHJhY2tzKGdlbmVyYXRvciwgbmV4dEl0ZXJhdGlvbik7Ci0gICAgICAgICAg
ICBtX2xpbmtlZEJhY2t0cmFjayA9IDA7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGxpbmtB
bHRlcm5hdGl2ZUJhY2t0cmFja3NUbyhZYXJyR2VuZXJhdG9yKiBnZW5lcmF0b3IsIExhYmVsIGxh
YmVsLCBib29sIG5leHRJdGVyYXRpb24gPSBmYWxzZSkKLSAgICAgICAgewotICAgICAgICAgICAg
bV9iYWNrdHJhY2subGlua0FsdGVybmF0aXZlQmFja3RyYWNrc1RvKGdlbmVyYXRvciwgbGFiZWws
IG5leHRJdGVyYXRpb24pOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBzZXRCYWNrdHJhY2tM
aW5rKEJhY2t0cmFja0Rlc3RpbmF0aW9uKiBsaW5rZWRCYWNrdHJhY2spCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIG1fbGlua2VkQmFja3RyYWNrID0gbGlua2VkQmFja3RyYWNrOwotICAgICAgICB9
Ci0KLSAgICAgICAgdm9pZCBjaGFpbkJhY2t0cmFja3MoQmFja3RyYWNrRGVzdGluYXRpb24qIGZv
bGxvd29uQmFja3RyYWNrKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobV9saW5rZWRCYWNr
dHJhY2spCi0gICAgICAgICAgICAgICAgbV9saW5rZWRCYWNrdHJhY2stPmxpbmtUb05leHRCYWNr
dHJhY2soZm9sbG93b25CYWNrdHJhY2spOwotICAgICAgICB9Ci0KLSAgICAgICAgQmFja3RyYWNr
RGVzdGluYXRpb24mIGdldEJhY2t0cmFja0Rlc3RpbmF0aW9uKCkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIG1fYmFja3RyYWNrOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBwcm9w
YWdhdGVCYWNrdHJhY2tpbmdGcm9tKFlhcnJHZW5lcmF0b3IqIGdlbmVyYXRvciwgQmFja3RyYWNr
RGVzdGluYXRpb24mIGJhY2t0cmFjaywgYm9vbCBkb0p1bXAgPSB0cnVlKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBpZiAoZG9KdW1wKQotICAgICAgICAgICAgICAgIG1fYmFja3RyYWNrLmp1bXBU
b0JhY2t0cmFjayhnZW5lcmF0b3IsIGJhY2t0cmFjay5nZXRCYWNrdHJhY2tKdW1wcygpKTsKLQot
ICAgICAgICAgICAgaWYgKG1fYmFja3RyYWNrLmlzTGFiZWwoKSAmJiBiYWNrdHJhY2suaGFzQmFj
a3RyYWNrVG9MYWJlbCgpKQotICAgICAgICAgICAgICAgIGJhY2t0cmFjay5saW5rQmFja3RyYWNr
VG9MYWJlbChtX2JhY2t0cmFjay5nZXRMYWJlbCgpKTsKLQotICAgICAgICAgICAgaWYgKGJhY2t0
cmFjay5oYXNEZXN0aW5hdGlvbigpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fYmFja3RyYWNr
Lmhhc0RhdGFMYWJlbCgpKQotICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3ItPm1fZXhwcmVz
c2lvblN0YXRlLmFkZERhdGFMYWJlbFRvTmV4dEl0ZXJhdGlvbihtX2JhY2t0cmFjay5nZXREYXRh
TGFiZWwoKSk7Ci0KLSAgICAgICAgICAgICAgICBtX2JhY2t0cmFjay5jb3B5VGFyZ2V0KGJhY2t0
cmFjaywgZG9KdW1wKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIFBhdHRl
cm5EaXNqdW5jdGlvbiogZGlzanVuY3Rpb247Ci0gICAgICAgIGludCBjaGVja2VkVG90YWw7CiAg
ICAgcHJpdmF0ZToKLSAgICAgICAgdW5zaWduZWQgYWx0OwotICAgICAgICB1bnNpZ25lZCB0Owot
ICAgICAgICB1bnNpZ25lZCBtX3N1YlBhcmVuTnVtOwotICAgICAgICBCYWNrdHJhY2tEZXN0aW5h
dGlvbiBtX2JhY2t0cmFjazsKLSAgICAgICAgQmFja3RyYWNrRGVzdGluYXRpb24qIG1fbGlua2Vk
QmFja3RyYWNrOwotICAgICAgICBKdW1wTGlzdCogbV9qdW1wTGlzdDsKLSAgICB9OwotCi0gICAg
c3RydWN0IFBhcmVudGhlc2VzVGFpbCB7Ci0gICAgICAgIFBhcmVudGhlc2VzVGFpbChQYXR0ZXJu
VGVybSYgdGVybSwgaW50IG5lc3RpbmdMZXZlbCwgSnVtcExpc3QqIGp1bXBMaXN0VG9QcmlvclBh
cmVuKQotICAgICAgICAgICAgOiBtX3Rlcm0odGVybSkKLSAgICAgICAgICAgICwgbV9uZXN0aW5n
TGV2ZWwobmVzdGluZ0xldmVsKQotICAgICAgICAgICAgLCBtX3N1YlBhcmVuSW5kZXgoMCkKLSAg
ICAgICAgICAgICwgbV9qdW1wTGlzdFRvUHJpb3JQYXJlbihqdW1wTGlzdFRvUHJpb3JQYXJlbikK
LSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBwcm9jZXNzQmFja3RyYWNrcyhZ
YXJyR2VuZXJhdG9yKiBnZW5lcmF0b3IsIFRlcm1HZW5lcmF0aW9uU3RhdGUmIHN0YXRlLCBUZXJt
R2VuZXJhdGlvblN0YXRlJiBwYXJlbnRoZXNlc1N0YXRlLCBMYWJlbCBub25HcmVlZHlUcnlQYXJl
bnRoZXNlcywgTGFiZWwgZmFsbFRocm91Z2gpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fbm9u
R3JlZWR5VHJ5UGFyZW50aGVzZXMgPSBub25HcmVlZHlUcnlQYXJlbnRoZXNlczsKLSAgICAgICAg
ICAgIG1fZmFsbFRocm91Z2ggPSBmYWxsVGhyb3VnaDsKLQotICAgICAgICAgICAgbV9zdWJQYXJl
bkluZGV4ID0gc3RhdGUuZ2V0U3ViUGFyZW5OdW0oKTsKLSAgICAgICAgICAgIHBhcmVudGhlc2Vz
U3RhdGUuZ2V0QmFja3RyYWNrRGVzdGluYXRpb24oKS5jb3B5VG8obV9wYXJlbkJhY2t0cmFjayk7
Ci0gICAgICAgICAgICBzdGF0ZS5jaGFpbkJhY2t0cmFja3MoJm1fYmFja3RyYWNrKTsKLSAgICAg
ICAgICAgIEJhY2t0cmFja0Rlc3RpbmF0aW9uJiBzdGF0ZUJhY2t0cmFjayA9IHN0YXRlLmdldEJh
Y2t0cmFja0Rlc3RpbmF0aW9uKCk7Ci0gICAgICAgICAgICBzdGF0ZUJhY2t0cmFjay5jb3B5VG8o
bV9iYWNrdHJhY2spOwotICAgICAgICAgICAgc3RhdGVCYWNrdHJhY2suc2V0QmFja3RyYWNrVG9M
YWJlbCgmbV9iYWNrdHJhY2tUb0xhYmVsKTsKLSAgICAgICAgICAgIHN0YXRlLnNldEJhY2t0cmFj
a0xpbmsoJm1fYmFja3RyYWNrKTsKLSAgICAgICAgICAgIHN0YXRlQmFja3RyYWNrLnNldFN1YkRh
dGFMYWJlbFB0cigmbV9kYXRhQWZ0ZXJMYWJlbFB0cik7Ci0KLSAgICAgICAgICAgIG1fZG9EaXJl
Y3RCYWNrdHJhY2sgPSBtX3BhcmVuQmFja3RyYWNrLmhhc0Rlc3RpbmF0aW9uKCk7Ci0KLSAgICAg
ICAgICAgIGlmICgobV90ZXJtLnF1YW50aXR5VHlwZSA9PSBRdWFudGlmaWVyR3JlZWR5KSB8fCAo
bV90ZXJtLnF1YW50aXR5VHlwZSA9PSBRdWFudGlmaWVyTm9uR3JlZWR5KSkKLSAgICAgICAgICAg
ICAgICBtX2RvRGlyZWN0QmFja3RyYWNrID0gZmFsc2U7Ci0KLSAgICAgICAgICAgIGlmIChtX2Rv
RGlyZWN0QmFja3RyYWNrKQotICAgICAgICAgICAgICAgIHN0YXRlLnByb3BhZ2F0ZUJhY2t0cmFj
a2luZ0Zyb20oZ2VuZXJhdG9yLCBtX3BhcmVuQmFja3RyYWNrLCBmYWxzZSk7Ci0gICAgICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgICAgICBzdGF0ZUJhY2t0cmFjay5zZXRCYWNrdHJhY2tKdW1w
TGlzdCgmbV9hZnRlckJhY2t0cmFja0p1bXBzKTsKLSAgICAgICAgICAgICAgICBzdGF0ZUJhY2t0
cmFjay5zZXRCYWNrdHJhY2tTb3VyY2VMYWJlbCgmbV9iYWNrdHJhY2tGcm9tQWZ0ZXJQYXJlbnMp
OworICAgICAgICBzdHJ1Y3QgUmV0dXJuQWRkcmVzc1JlY29yZCB7CisgICAgICAgICAgICBSZXR1
cm5BZGRyZXNzUmVjb3JkKERhdGFMYWJlbFB0ciBkYXRhTGFiZWwsIExhYmVsIGJhY2t0cmFja0xv
Y2F0aW9uKQorICAgICAgICAgICAgICAgIDogbV9kYXRhTGFiZWwoZGF0YUxhYmVsKQorICAgICAg
ICAgICAgICAgICwgbV9iYWNrdHJhY2tMb2NhdGlvbihiYWNrdHJhY2tMb2NhdGlvbikKKyAgICAg
ICAgICAgIHsKICAgICAgICAgICAgIH0KLSAgICAgICAgfQogCi0gICAgICAgIHZvaWQgc2V0TmV4
dEl0ZXJhdGlvbihMYWJlbCBuZXh0SXRlcmF0aW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICBp
ZiAoIW1fbmVzdGluZ0xldmVsICYmICFtX2JhY2t0cmFja1RvTGFiZWwuaXNTZXQoKSkKLSAgICAg
ICAgICAgICAgICBtX2JhY2t0cmFja1RvTGFiZWwgPSBuZXh0SXRlcmF0aW9uOwotICAgICAgICB9
Ci0KLSAgICAgICAgdm9pZCBhZGRBZnRlclBhcmVuSnVtcChKdW1wIGp1bXApCi0gICAgICAgIHsK
LSAgICAgICAgICAgIG1fYWZ0ZXJCYWNrdHJhY2tKdW1wcy5hcHBlbmQoanVtcCk7Ci0gICAgICAg
IH0KLQotICAgICAgICBib29sIGdlbmVyYXRlQ29kZShZYXJyR2VuZXJhdG9yKiBnZW5lcmF0b3Is
IEp1bXBMaXN0JiBqdW1wc1RvTmV4dCwgYm9vbCBwcmlvckJhY2tUcmFja0ZhbGxUaHJvdWdoLCBi
b29sIG5leHRCYWNrdHJhY2tGYWxsVGhyb3VnaCkKLSAgICAgICAgewotICAgICAgICAgICAgY29u
c3QgUmVnaXN0ZXJJRCBpbmRleFRlbXBvcmFyeSA9IHJlZ1QwOwotICAgICAgICAgICAgdW5zaWdu
ZWQgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uID0gbV90ZXJtLmZyYW1lTG9jYXRpb247Ci0gICAg
ICAgICAgICBKdW1wIGZyb21QcmlvckJhY2t0cmFjazsKLSAgICAgICAgICAgIGJvb2wgbmVlZEp1
bXBGb3JQcmlvclBhcmVuVGFpbCA9IGZhbHNlOwotCi0gICAgICAgICAgICBpZiAocHJpb3JCYWNr
VHJhY2tGYWxsVGhyb3VnaAotICAgICAgICAgICAgICAgICYmICgobV90ZXJtLnF1YW50aXR5VHlw
ZSA9PSBRdWFudGlmaWVyR3JlZWR5KQotICAgICAgICAgICAgICAgICB8fCAobV90ZXJtLnF1YW50
aXR5VHlwZSA9PSBRdWFudGlmaWVyTm9uR3JlZWR5KQotICAgICAgICAgICAgICAgICB8fCAoIW1f
ZG9EaXJlY3RCYWNrdHJhY2sgJiYgbV9wYXJlbkJhY2t0cmFjay5oYXNEZXN0aW5hdGlvbigpKSkp
IHsKLSAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcHJpb3IgcGFyZW4gdGFpbCBjb2RlIGFzc3Vt
ZWQgdGhhdCBpdCBjb3VsZCBmYWxsIHRocm91Z2gsCi0gICAgICAgICAgICAgICAgLy8gYnV0IHdl
IG5lZWQgdG8gZ2VuZXJhdGUgYWZ0ZXIgcGFyZW4gYmFja3RyYWNrIGNvZGUsIHRoZW4gcHJvdmlk
ZQotICAgICAgICAgICAgICAgIC8vIGEganVtcCBhcm91bmQgdGhhdCBjb2RlIGZvciB0aGUgcHJp
b3IgcGFyZW4gdGFpbCBjb2RlLgotICAgICAgICAgICAgICAgIC8vIEEgcmVndWxhciBleHByZXNz
aW5nIGxpa2UgKCh4eHgpLi4uKT8gbmVlZHMgdGhpcy4KLSAgICAgICAgICAgICAgICBmcm9tUHJp
b3JCYWNrdHJhY2sgPSBnZW5lcmF0b3ItPmp1bXAoKTsKLSAgICAgICAgICAgICAgICBuZWVkSnVt
cEZvclByaW9yUGFyZW5UYWlsID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
aWYgKCFtX2JhY2t0cmFjay5oYXNEZXN0aW5hdGlvbigpKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KG1fYmFja3RyYWNrVG9MYWJlbC5pc1NldCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fYmFj
a3RyYWNrLnNldExhYmVsKG1fYmFja3RyYWNrVG9MYWJlbCk7Ci0gICAgICAgICAgICAgICAgICAg
IG5leHRCYWNrdHJhY2tGYWxsVGhyb3VnaCA9IGZhbHNlOwotICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAobV9qdW1wTGlzdFRvUHJpb3JQYXJlbikgewotICAgICAgICAgICAgICAgICAgICAvLyBJ
ZiB3ZSBkb24ndCBoYXZlIGEgZGVzdGluYXRpb24sIGdvIGJhY2sgdG8gZWl0aGVyIHRoZSBwcmlv
ciBwYXJlbiBvciB0aGUgbmV4dCBvdXRlciBwYXJlbi4KLSAgICAgICAgICAgICAgICAgICAgbV9i
YWNrdHJhY2suc2V0QmFja3RyYWNrSnVtcExpc3QobV9qdW1wTGlzdFRvUHJpb3JQYXJlbik7Ci0g
ICAgICAgICAgICAgICAgICAgIG5leHRCYWNrdHJhY2tGYWxsVGhyb3VnaCA9IGZhbHNlOwotICAg
ICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBtX2JhY2t0cmFjay5zZXRC
YWNrdHJhY2tKdW1wTGlzdCgmanVtcHNUb05leHQpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICAgICAgbmV4dEJhY2t0cmFja0ZhbGxUaHJvdWdoID0gZmFsc2U7Ci0KLSAgICAgICAg
ICAgIC8vIEEgZmFpbHVyZSBBRlRFUiB0aGUgcGFyZW5zIGp1bXBzIGhlcmUgLSBCYWNrdHJhY2sg
dG8gdGhpcyBwYXJlbgotICAgICAgICAgICAgbV9iYWNrdHJhY2tGcm9tQWZ0ZXJQYXJlbnMgPSBn
ZW5lcmF0b3ItPmxhYmVsKCk7Ci0KLSAgICAgICAgICAgIGlmIChtX2RhdGFBZnRlckxhYmVsUHRy
LmlzU2V0KCkpCi0gICAgICAgICAgICAgICAgZ2VuZXJhdG9yLT5tX2V4cHJlc3Npb25TdGF0ZS5t
X2JhY2t0cmFja1JlY29yZHMuYXBwZW5kKEFsdGVybmF0aXZlQmFja3RyYWNrUmVjb3JkKG1fZGF0
YUFmdGVyTGFiZWxQdHIsIG1fYmFja3RyYWNrRnJvbUFmdGVyUGFyZW5zKSk7Ci0KLSAgICAgICAg
ICAgIG1fYWZ0ZXJCYWNrdHJhY2tKdW1wcy5saW5rKGdlbmVyYXRvcik7Ci0KLSAgICAgICAgICAg
IGlmIChtX3Rlcm0ucXVhbnRpdHlUeXBlID09IFF1YW50aWZpZXJHcmVlZHkpIHsKLSAgICAgICAg
ICAgICAgICAvLyBJZiB0aGlzIGlzIC0xIHdlIGhhdmUgbm93IHRlc3RlZCB3aXRoIGJvdGggd2l0
aCBhbmQgd2l0aG91dCB0aGUgcGFyZW5zLgotICAgICAgICAgICAgICAgIGdlbmVyYXRvci0+bG9h
ZEZyb21GcmFtZShwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24sIGluZGV4VGVtcG9yYXJ5KTsKLSAg
ICAgICAgICAgICAgICBtX2JhY2t0cmFjay5qdW1wVG9CYWNrdHJhY2soZ2VuZXJhdG9yLCBnZW5l
cmF0b3ItPmJyYW5jaDMyKEVxdWFsLCBpbmRleFRlbXBvcmFyeSwgVHJ1c3RlZEltbTMyKC0xKSkp
OwotICAgICAgICAgICAgfSBlbHNlIGlmIChtX3Rlcm0ucXVhbnRpdHlUeXBlID09IFF1YW50aWZp
ZXJOb25HcmVlZHkpIHsKLSAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIC0xIHdlIGhhdmUg
bm93IHRlc3RlZCB3aXRoIGJvdGggd2l0aCBhbmQgd2l0aG91dCB0aGUgcGFyZW5zLgotICAgICAg
ICAgICAgICAgIGdlbmVyYXRvci0+bG9hZEZyb21GcmFtZShwYXJlbnRoZXNlc0ZyYW1lTG9jYXRp
b24sIGluZGV4VGVtcG9yYXJ5KTsKLSAgICAgICAgICAgICAgICBnZW5lcmF0b3ItPmJyYW5jaDMy
KEVxdWFsLCBpbmRleFRlbXBvcmFyeSwgVHJ1c3RlZEltbTMyKC0xKSkubGlua1RvKG1fbm9uR3Jl
ZWR5VHJ5UGFyZW50aGVzZXMsIGdlbmVyYXRvcik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIGlmICghbV9kb0RpcmVjdEJhY2t0cmFjaykKLSAgICAgICAgICAgICAgICBtX3BhcmVuQmFj
a3RyYWNrLnBsYW50SnVtcFRvQmFja3RyYWNrSWZFeGlzdHMoZ2VuZXJhdG9yKTsKLQotICAgICAg
ICAgICAgLy8gQSBmYWlsdXJlIFdJVEhJTiB0aGUgcGFyZW5zIGp1bXBzIGhlcmUKLSAgICAgICAg
ICAgIGlmIChuZWVkSnVtcEZvclByaW9yUGFyZW5UYWlsKQotICAgICAgICAgICAgICAgIGZyb21Q
cmlvckJhY2t0cmFjay5saW5rKGdlbmVyYXRvcik7Ci0gICAgICAgICAgICBtX3BhcmVuQmFja3Ry
YWNrLmxpbmtBbHRlcm5hdGl2ZUJhY2t0cmFja3MoZ2VuZXJhdG9yKTsKLSAgICAgICAgICAgIG1f
d2l0aGluQmFja3RyYWNrSnVtcHMubGluayhnZW5lcmF0b3IpOwotCi0gICAgICAgICAgICBpZiAo
bV90ZXJtLmNhcHR1cmUoKSkKLSAgICAgICAgICAgICAgICBnZW5lcmF0b3ItPnN0b3JlMzIoVHJ1
c3RlZEltbTMyKC0xKSwgQWRkcmVzcyhvdXRwdXQsIChtX3Rlcm0ucGFyZW50aGVzZXMuc3VicGF0
dGVybklkIDw8IDEpICogc2l6ZW9mKGludCkpKTsKLQotICAgICAgICAgICAgaWYgKG1fdGVybS5x
dWFudGl0eVR5cGUgPT0gUXVhbnRpZmllckdyZWVkeSkgewotICAgICAgICAgICAgICAgIGdlbmVy
YXRvci0+c3RvcmVUb0ZyYW1lKFRydXN0ZWRJbW0zMigtMSksIHBhcmVudGhlc2VzRnJhbWVMb2Nh
dGlvbik7Ci0gICAgICAgICAgICAgICAgZ2VuZXJhdG9yLT5qdW1wKCkubGlua1RvKG1fZmFsbFRo
cm91Z2gsIGdlbmVyYXRvcik7Ci0gICAgICAgICAgICAgICAgbmV4dEJhY2t0cmFja0ZhbGxUaHJv
dWdoID0gZmFsc2U7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKCFuZXh0QmFja3RyYWNrRmFsbFRo
cm91Z2gpCi0gICAgICAgICAgICAgICAgbV9iYWNrdHJhY2suanVtcFRvQmFja3RyYWNrKGdlbmVy
YXRvcik7Ci0KLSAgICAgICAgICAgIGlmICghbV9kb0RpcmVjdEJhY2t0cmFjaykKLSAgICAgICAg
ICAgICAgICBtX2JhY2t0cmFjay5zZXROZXh0QmFja3RyYWNrTGFiZWwobV9iYWNrdHJhY2tGcm9t
QWZ0ZXJQYXJlbnMpOwotCi0gICAgICAgICAgICByZXR1cm4gbmV4dEJhY2t0cmFja0ZhbGxUaHJv
dWdoOwotICAgICAgICB9Ci0KLSAgICAgICAgUGF0dGVyblRlcm0mIG1fdGVybTsKLSAgICAgICAg
aW50IG1fbmVzdGluZ0xldmVsOwotICAgICAgICB1bnNpZ25lZCBtX3N1YlBhcmVuSW5kZXg7Ci0g
ICAgICAgIEp1bXBMaXN0KiBtX2p1bXBMaXN0VG9QcmlvclBhcmVuOwotICAgICAgICBMYWJlbCBt
X25vbkdyZWVkeVRyeVBhcmVudGhlc2VzOwotICAgICAgICBMYWJlbCBtX2ZhbGxUaHJvdWdoOwot
ICAgICAgICBMYWJlbCBtX2JhY2t0cmFja1RvTGFiZWw7Ci0gICAgICAgIExhYmVsIG1fYmFja3Ry
YWNrRnJvbUFmdGVyUGFyZW5zOwotICAgICAgICBEYXRhTGFiZWxQdHIgbV9kYXRhQWZ0ZXJMYWJl
bFB0cjsKLSAgICAgICAgSnVtcExpc3QgbV93aXRoaW5CYWNrdHJhY2tKdW1wczsKLSAgICAgICAg
SnVtcExpc3QgbV9hZnRlckJhY2t0cmFja0p1bXBzOwotICAgICAgICBCYWNrdHJhY2tEZXN0aW5h
dGlvbiBtX3BhcmVuQmFja3RyYWNrOwotICAgICAgICBCYWNrdHJhY2tEZXN0aW5hdGlvbiBtX2Jh
Y2t0cmFjazsKLSAgICAgICAgYm9vbCBtX2RvRGlyZWN0QmFja3RyYWNrOworICAgICAgICAgICAg
RGF0YUxhYmVsUHRyIG1fZGF0YUxhYmVsOworICAgICAgICAgICAgTGFiZWwgbV9iYWNrdHJhY2tM
b2NhdGlvbjsKKyAgICAgICAgfTsKKworICAgICAgICBKdW1wTGlzdCBtX2xhdGVyRmFpbHVyZXM7
CisgICAgICAgIGJvb2wgbV9wZW5kaW5nRmFsbHRocm91Z2g7CisgICAgICAgIFZlY3RvcjxEYXRh
TGFiZWxQdHIsIDQ+IG1fcGVuZGluZ1JldHVybnM7CisgICAgICAgIFZlY3RvcjxSZXR1cm5BZGRy
ZXNzUmVjb3JkLCA0PiBtX2JhY2t0cmFja1JlY29yZHM7CiAgICAgfTsKIAotICAgIHZvaWQgZ2Vu
ZXJhdGVBc3NlcnRpb25CT0woVGVybUdlbmVyYXRpb25TdGF0ZSYgc3RhdGUpCisgICAgLy8gR2Vu
ZXJhdGlvbiBtZXRob2RzOgorICAgIC8vID09PT09PT09PT09PT09PT09PT0KKworICAgIHZvaWQg
Z2VuZXJhdGVBc3NlcnRpb25CT0woc2l6ZV90IG9wSW5kZXgpCiAgICAgewotICAgICAgICBQYXR0
ZXJuVGVybSYgdGVybSA9IHN0YXRlLnRlcm0oKTsKKyAgICAgICAgWWFyck9wJiBvcCA9IG1fb3Bz
W29wSW5kZXhdOworICAgICAgICBQYXR0ZXJuVGVybSogdGVybSA9IG9wLm1fdGVybTsKIAogICAg
ICAgICBpZiAobV9wYXR0ZXJuLm1fbXVsdGlsaW5lKSB7CiAgICAgICAgICAgICBjb25zdCBSZWdp
c3RlcklEIGNoYXJhY3RlciA9IHJlZ1QwOwogCiAgICAgICAgICAgICBKdW1wTGlzdCBtYXRjaERl
c3Q7Ci0gICAgICAgICAgICBpZiAoIXRlcm0uaW5wdXRQb3NpdGlvbikKLSAgICAgICAgICAgICAg
ICBtYXRjaERlc3QuYXBwZW5kKGJyYW5jaDMyKEVxdWFsLCBpbmRleCwgSW1tMzIoc3RhdGUuY2hl
Y2tlZFRvdGFsKSkpOworICAgICAgICAgICAgaWYgKCF0ZXJtLT5pbnB1dFBvc2l0aW9uKQorICAg
ICAgICAgICAgICAgIG1hdGNoRGVzdC5hcHBlbmQoYnJhbmNoMzIoRXF1YWwsIGluZGV4LCBJbW0z
MihtX2NoZWNrZWQpKSk7CiAKLSAgICAgICAgICAgIHJlYWRDaGFyYWN0ZXIoc3RhdGUuaW5wdXRP
ZmZzZXQoKSAtIDEsIGNoYXJhY3Rlcik7CisgICAgICAgICAgICByZWFkQ2hhcmFjdGVyKCh0ZXJt
LT5pbnB1dFBvc2l0aW9uIC0gbV9jaGVja2VkKSAtIDEsIGNoYXJhY3Rlcik7CiAgICAgICAgICAg
ICBtYXRjaENoYXJhY3RlckNsYXNzKGNoYXJhY3RlciwgbWF0Y2hEZXN0LCBtX3BhdHRlcm4ubmV3
bGluZUNoYXJhY3RlckNsYXNzKCkpOwotICAgICAgICAgICAgc3RhdGUuanVtcFRvQmFja3RyYWNr
KHRoaXMpOworICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQoanVtcCgpKTsKIAogICAgICAg
ICAgICAgbWF0Y2hEZXN0LmxpbmsodGhpcyk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAvLyBFcmssIHJlYWxseSBzaG91bGQgcG9pc29uIG91dCB0aGVzZSBhbHRlcm5hdGl2ZXMgZWFy
bHkuIDotLwotICAgICAgICAgICAgaWYgKHRlcm0uaW5wdXRQb3NpdGlvbikKLSAgICAgICAgICAg
ICAgICBzdGF0ZS5qdW1wVG9CYWNrdHJhY2sodGhpcyk7CisgICAgICAgICAgICBpZiAodGVybS0+
aW5wdXRQb3NpdGlvbikKKyAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChqdW1wKCkp
OwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHN0YXRlLmp1bXBUb0JhY2t0cmFj
ayh0aGlzLCBicmFuY2gzMihOb3RFcXVhbCwgaW5kZXgsIEltbTMyKHN0YXRlLmNoZWNrZWRUb3Rh
bCkpKTsKKyAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChicmFuY2gzMihOb3RFcXVh
bCwgaW5kZXgsIEltbTMyKG1fY2hlY2tlZCkpKTsKICAgICAgICAgfQogICAgIH0KKyAgICB2b2lk
IGJhY2t0cmFja0Fzc2VydGlvbkJPTChzaXplX3Qgb3BJbmRleCkKKyAgICB7CisgICAgICAgIFlh
cnJPcCYgb3AgPSBtX29wc1tvcEluZGV4XTsKKyAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5h
cHBlbmQob3AubV9qdW1wcyk7CisgICAgfQogCi0gICAgdm9pZCBnZW5lcmF0ZUFzc2VydGlvbkVP
TChUZXJtR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSkKKyAgICB2b2lkIGdlbmVyYXRlQXNzZXJ0aW9u
RU9MKHNpemVfdCBvcEluZGV4KQogICAgIHsKLSAgICAgICAgUGF0dGVyblRlcm0mIHRlcm0gPSBz
dGF0ZS50ZXJtKCk7CisgICAgICAgIFlhcnJPcCYgb3AgPSBtX29wc1tvcEluZGV4XTsKKyAgICAg
ICAgUGF0dGVyblRlcm0qIHRlcm0gPSBvcC5tX3Rlcm07CiAKICAgICAgICAgaWYgKG1fcGF0dGVy
bi5tX211bHRpbGluZSkgewogICAgICAgICAgICAgY29uc3QgUmVnaXN0ZXJJRCBjaGFyYWN0ZXIg
PSByZWdUMDsKIAogICAgICAgICAgICAgSnVtcExpc3QgbWF0Y2hEZXN0OwotICAgICAgICAgICAg
aWYgKHRlcm0uaW5wdXRQb3NpdGlvbiA9PSBzdGF0ZS5jaGVja2VkVG90YWwpCisgICAgICAgICAg
ICBpZiAodGVybS0+aW5wdXRQb3NpdGlvbiA9PSBtX2NoZWNrZWQpCiAgICAgICAgICAgICAgICAg
bWF0Y2hEZXN0LmFwcGVuZChhdEVuZE9mSW5wdXQoKSk7CiAKLSAgICAgICAgICAgIHJlYWRDaGFy
YWN0ZXIoc3RhdGUuaW5wdXRPZmZzZXQoKSwgY2hhcmFjdGVyKTsKKyAgICAgICAgICAgIHJlYWRD
aGFyYWN0ZXIoKHRlcm0tPmlucHV0UG9zaXRpb24gLSBtX2NoZWNrZWQpLCBjaGFyYWN0ZXIpOwog
ICAgICAgICAgICAgbWF0Y2hDaGFyYWN0ZXJDbGFzcyhjaGFyYWN0ZXIsIG1hdGNoRGVzdCwgbV9w
YXR0ZXJuLm5ld2xpbmVDaGFyYWN0ZXJDbGFzcygpKTsKLSAgICAgICAgICAgIHN0YXRlLmp1bXBU
b0JhY2t0cmFjayh0aGlzKTsKKyAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGp1bXAoKSk7
CiAKICAgICAgICAgICAgIG1hdGNoRGVzdC5saW5rKHRoaXMpOwogICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgaWYgKHRlcm0uaW5wdXRQb3NpdGlvbiA9PSBzdGF0ZS5jaGVja2VkVG90YWwp
Ci0gICAgICAgICAgICAgICAgc3RhdGUuanVtcFRvQmFja3RyYWNrKHRoaXMsIG5vdEF0RW5kT2ZJ
bnB1dCgpKTsKKyAgICAgICAgICAgIGlmICh0ZXJtLT5pbnB1dFBvc2l0aW9uID09IG1fY2hlY2tl
ZCkKKyAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChub3RBdEVuZE9mSW5wdXQoKSk7
CiAgICAgICAgICAgICAvLyBFcmssIHJlYWxseSBzaG91bGQgcG9pc29uIG91dCB0aGVzZSBhbHRl
cm5hdGl2ZXMgZWFybHkuIDotLwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHN0
YXRlLmp1bXBUb0JhY2t0cmFjayh0aGlzKTsKKyAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFw
cGVuZChqdW1wKCkpOwogICAgICAgICB9CiAgICAgfQorICAgIHZvaWQgYmFja3RyYWNrQXNzZXJ0
aW9uRU9MKHNpemVfdCBvcEluZGV4KQorICAgIHsKKyAgICAgICAgWWFyck9wJiBvcCA9IG1fb3Bz
W29wSW5kZXhdOworICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmFwcGVuZChvcC5tX2p1bXBz
KTsKKyAgICB9CiAKICAgICAvLyBBbHNvIGZhbGxzIHRob3VnaCBvbiBuZXh0SXNOb3RXb3JkQ2hh
ci4KLSAgICB2b2lkIG1hdGNoQXNzZXJ0aW9uV29yZGNoYXIoVGVybUdlbmVyYXRpb25TdGF0ZSYg
c3RhdGUsIEp1bXBMaXN0JiBuZXh0SXNXb3JkQ2hhciwgSnVtcExpc3QmIG5leHRJc05vdFdvcmRD
aGFyKQorICAgIHZvaWQgbWF0Y2hBc3NlcnRpb25Xb3JkY2hhcihzaXplX3Qgb3BJbmRleCwgSnVt
cExpc3QmIG5leHRJc1dvcmRDaGFyLCBKdW1wTGlzdCYgbmV4dElzTm90V29yZENoYXIpCiAgICAg
eworICAgICAgICBZYXJyT3AmIG9wID0gbV9vcHNbb3BJbmRleF07CisgICAgICAgIFBhdHRlcm5U
ZXJtKiB0ZXJtID0gb3AubV90ZXJtOworCiAgICAgICAgIGNvbnN0IFJlZ2lzdGVySUQgY2hhcmFj
dGVyID0gcmVnVDA7Ci0gICAgICAgIFBhdHRlcm5UZXJtJiB0ZXJtID0gc3RhdGUudGVybSgpOwog
Ci0gICAgICAgIGlmICh0ZXJtLmlucHV0UG9zaXRpb24gPT0gc3RhdGUuY2hlY2tlZFRvdGFsKQor
ICAgICAgICBpZiAodGVybS0+aW5wdXRQb3NpdGlvbiA9PSBtX2NoZWNrZWQpCiAgICAgICAgICAg
ICBuZXh0SXNOb3RXb3JkQ2hhci5hcHBlbmQoYXRFbmRPZklucHV0KCkpOwogCi0gICAgICAgIHJl
YWRDaGFyYWN0ZXIoc3RhdGUuaW5wdXRPZmZzZXQoKSwgY2hhcmFjdGVyKTsKKyAgICAgICAgcmVh
ZENoYXJhY3RlcigodGVybS0+aW5wdXRQb3NpdGlvbiAtIG1fY2hlY2tlZCksIGNoYXJhY3Rlcik7
CiAgICAgICAgIG1hdGNoQ2hhcmFjdGVyQ2xhc3MoY2hhcmFjdGVyLCBuZXh0SXNXb3JkQ2hhciwg
bV9wYXR0ZXJuLndvcmRjaGFyQ2hhcmFjdGVyQ2xhc3MoKSk7CiAgICAgfQogCi0gICAgdm9pZCBn
ZW5lcmF0ZUFzc2VydGlvbldvcmRCb3VuZGFyeShUZXJtR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSkK
KyAgICB2b2lkIGdlbmVyYXRlQXNzZXJ0aW9uV29yZEJvdW5kYXJ5KHNpemVfdCBvcEluZGV4KQog
ICAgIHsKKyAgICAgICAgWWFyck9wJiBvcCA9IG1fb3BzW29wSW5kZXhdOworICAgICAgICBQYXR0
ZXJuVGVybSogdGVybSA9IG9wLm1fdGVybTsKKwogICAgICAgICBjb25zdCBSZWdpc3RlcklEIGNo
YXJhY3RlciA9IHJlZ1QwOwotICAgICAgICBQYXR0ZXJuVGVybSYgdGVybSA9IHN0YXRlLnRlcm0o
KTsKIAogICAgICAgICBKdW1wIGF0QmVnaW47CiAgICAgICAgIEp1bXBMaXN0IG1hdGNoRGVzdDsK
LSAgICAgICAgaWYgKCF0ZXJtLmlucHV0UG9zaXRpb24pCi0gICAgICAgICAgICBhdEJlZ2luID0g
YnJhbmNoMzIoRXF1YWwsIGluZGV4LCBJbW0zMihzdGF0ZS5jaGVja2VkVG90YWwpKTsKLSAgICAg
ICAgcmVhZENoYXJhY3RlcihzdGF0ZS5pbnB1dE9mZnNldCgpIC0gMSwgY2hhcmFjdGVyKTsKKyAg
ICAgICAgaWYgKCF0ZXJtLT5pbnB1dFBvc2l0aW9uKQorICAgICAgICAgICAgYXRCZWdpbiA9IGJy
YW5jaDMyKEVxdWFsLCBpbmRleCwgSW1tMzIobV9jaGVja2VkKSk7CisgICAgICAgIHJlYWRDaGFy
YWN0ZXIoKHRlcm0tPmlucHV0UG9zaXRpb24gLSBtX2NoZWNrZWQpIC0gMSwgY2hhcmFjdGVyKTsK
ICAgICAgICAgbWF0Y2hDaGFyYWN0ZXJDbGFzcyhjaGFyYWN0ZXIsIG1hdGNoRGVzdCwgbV9wYXR0
ZXJuLndvcmRjaGFyQ2hhcmFjdGVyQ2xhc3MoKSk7Ci0gICAgICAgIGlmICghdGVybS5pbnB1dFBv
c2l0aW9uKQorICAgICAgICBpZiAoIXRlcm0tPmlucHV0UG9zaXRpb24pCiAgICAgICAgICAgICBh
dEJlZ2luLmxpbmsodGhpcyk7CiAKICAgICAgICAgLy8gV2UgZmFsbCB0aHJvdWdoIHRvIGhlcmUg
aWYgdGhlIGxhc3QgY2hhcmFjdGVyIHdhcyBub3QgYSB3b3JkY2hhci4KICAgICAgICAgSnVtcExp
c3Qgbm9uV29yZENoYXJUaGVuV29yZENoYXI7CiAgICAgICAgIEp1bXBMaXN0IG5vbldvcmRDaGFy
VGhlbk5vbldvcmRDaGFyOwotICAgICAgICBpZiAodGVybS5pbnZlcnQoKSkgewotICAgICAgICAg
ICAgbWF0Y2hBc3NlcnRpb25Xb3JkY2hhcihzdGF0ZSwgbm9uV29yZENoYXJUaGVuTm9uV29yZENo
YXIsIG5vbldvcmRDaGFyVGhlbldvcmRDaGFyKTsKKyAgICAgICAgaWYgKHRlcm0tPmludmVydCgp
KSB7CisgICAgICAgICAgICBtYXRjaEFzc2VydGlvbldvcmRjaGFyKG9wSW5kZXgsIG5vbldvcmRD
aGFyVGhlbk5vbldvcmRDaGFyLCBub25Xb3JkQ2hhclRoZW5Xb3JkQ2hhcik7CiAgICAgICAgICAg
ICBub25Xb3JkQ2hhclRoZW5Xb3JkQ2hhci5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIG1hdGNoQXNzZXJ0aW9uV29yZGNoYXIoc3RhdGUsIG5vbldvcmRDaGFy
VGhlbldvcmRDaGFyLCBub25Xb3JkQ2hhclRoZW5Ob25Xb3JkQ2hhcik7CisgICAgICAgICAgICBt
YXRjaEFzc2VydGlvbldvcmRjaGFyKG9wSW5kZXgsIG5vbldvcmRDaGFyVGhlbldvcmRDaGFyLCBu
b25Xb3JkQ2hhclRoZW5Ob25Xb3JkQ2hhcik7CiAgICAgICAgICAgICBub25Xb3JkQ2hhclRoZW5O
b25Xb3JkQ2hhci5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgfQotICAgICAgICBzdGF0ZS5qdW1w
VG9CYWNrdHJhY2sodGhpcywgbm9uV29yZENoYXJUaGVuTm9uV29yZENoYXIpOworICAgICAgICBv
cC5tX2p1bXBzLmFwcGVuZChub25Xb3JkQ2hhclRoZW5Ob25Xb3JkQ2hhcik7CiAKICAgICAgICAg
Ly8gV2UganVtcCBoZXJlIGlmIHRoZSBsYXN0IGNoYXJhY3RlciB3YXMgYSB3b3JkY2hhci4KICAg
ICAgICAgbWF0Y2hEZXN0LmxpbmsodGhpcyk7CiAgICAgICAgIEp1bXBMaXN0IHdvcmRDaGFyVGhl
bldvcmRDaGFyOwogICAgICAgICBKdW1wTGlzdCB3b3JkQ2hhclRoZW5Ob25Xb3JkQ2hhcjsKLSAg
ICAgICAgaWYgKHRlcm0uaW52ZXJ0KCkpIHsKLSAgICAgICAgICAgIG1hdGNoQXNzZXJ0aW9uV29y
ZGNoYXIoc3RhdGUsIHdvcmRDaGFyVGhlbk5vbldvcmRDaGFyLCB3b3JkQ2hhclRoZW5Xb3JkQ2hh
cik7CisgICAgICAgIGlmICh0ZXJtLT5pbnZlcnQoKSkgeworICAgICAgICAgICAgbWF0Y2hBc3Nl
cnRpb25Xb3JkY2hhcihvcEluZGV4LCB3b3JkQ2hhclRoZW5Ob25Xb3JkQ2hhciwgd29yZENoYXJU
aGVuV29yZENoYXIpOwogICAgICAgICAgICAgd29yZENoYXJUaGVuV29yZENoYXIuYXBwZW5kKGp1
bXAoKSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtYXRjaEFzc2VydGlvbldvcmRj
aGFyKHN0YXRlLCB3b3JkQ2hhclRoZW5Xb3JkQ2hhciwgd29yZENoYXJUaGVuTm9uV29yZENoYXIp
OworICAgICAgICAgICAgbWF0Y2hBc3NlcnRpb25Xb3JkY2hhcihvcEluZGV4LCB3b3JkQ2hhclRo
ZW5Xb3JkQ2hhciwgd29yZENoYXJUaGVuTm9uV29yZENoYXIpOwogICAgICAgICAgICAgLy8gVGhp
cyBjYW4gZmFsbC10aG91Z2ghCiAgICAgICAgIH0KIAotICAgICAgICBzdGF0ZS5qdW1wVG9CYWNr
dHJhY2sodGhpcywgd29yZENoYXJUaGVuV29yZENoYXIpOworICAgICAgICBvcC5tX2p1bXBzLmFw
cGVuZCh3b3JkQ2hhclRoZW5Xb3JkQ2hhcik7CiAKICAgICAgICAgbm9uV29yZENoYXJUaGVuV29y
ZENoYXIubGluayh0aGlzKTsKICAgICAgICAgd29yZENoYXJUaGVuTm9uV29yZENoYXIubGluayh0
aGlzKTsKICAgICB9CisgICAgdm9pZCBiYWNrdHJhY2tBc3NlcnRpb25Xb3JkQm91bmRhcnkoc2l6
ZV90IG9wSW5kZXgpCisgICAgeworICAgICAgICBZYXJyT3AmIG9wID0gbV9vcHNbb3BJbmRleF07
CisgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUuYXBwZW5kKG9wLm1fanVtcHMpOworICAgIH0K
IAotICAgIHZvaWQgZ2VuZXJhdGVQYXR0ZXJuQ2hhcmFjdGVyU2luZ2xlKFRlcm1HZW5lcmF0aW9u
U3RhdGUmIHN0YXRlKQorICAgIHZvaWQgZ2VuZXJhdGVQYXR0ZXJuQ2hhcmFjdGVyT25jZShzaXpl
X3Qgb3BJbmRleCkKICAgICB7CisgICAgICAgIFlhcnJPcCYgb3AgPSBtX29wc1tvcEluZGV4XTsK
KyAgICAgICAgWWFyck9wJiBuZXh0T3AgPSBtX29wc1tvcEluZGV4ICsgMV07CisKKyAgICAgICAg
aWYgKG9wLm1fb3B0aW1pemVkKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFBhdHRl
cm5UZXJtKiB0ZXJtID0gb3AubV90ZXJtOworICAgICAgICBVQ2hhciBjaCA9IHRlcm0tPnBhdHRl
cm5DaGFyYWN0ZXI7CisKICAgICAgICAgY29uc3QgUmVnaXN0ZXJJRCBjaGFyYWN0ZXIgPSByZWdU
MDsKLSAgICAgICAgVUNoYXIgY2ggPSBzdGF0ZS50ZXJtKCkucGF0dGVybkNoYXJhY3RlcjsKKwor
ICAgICAgICBpZiAobmV4dE9wLm1fb3AgPT0gT3BUZXJtKSB7CisgICAgICAgICAgICBQYXR0ZXJu
VGVybSogbmV4dFRlcm0gPSBuZXh0T3AubV90ZXJtOworICAgICAgICAgICAgaWYgKG5leHRUZXJt
LT50eXBlID09IFBhdHRlcm5UZXJtOjpUeXBlUGF0dGVybkNoYXJhY3RlcgorICAgICAgICAgICAg
ICAgICYmIG5leHRUZXJtLT5xdWFudGl0eVR5cGUgPT0gUXVhbnRpZmllckZpeGVkQ291bnQKKyAg
ICAgICAgICAgICAgICAmJiBuZXh0VGVybS0+cXVhbnRpdHlDb3VudCA9PSAxCisgICAgICAgICAg
ICAgICAgJiYgbmV4dFRlcm0tPmlucHV0UG9zaXRpb24gPT0gKHRlcm0tPmlucHV0UG9zaXRpb24g
KyAxKSkgeworCisgICAgICAgICAgICAgICAgVUNoYXIgY2gyID0gbmV4dFRlcm0tPnBhdHRlcm5D
aGFyYWN0ZXI7CisKKyAgICAgICAgICAgICAgICBpbnQgbWFzayA9IDA7CisgICAgICAgICAgICAg
ICAgaW50IGNoUGFpciA9IGNoIHwgKGNoMiA8PCAxNik7CisKKyAgICAgICAgICAgICAgICBpZiAo
bV9wYXR0ZXJuLm1faWdub3JlQ2FzZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoaXNBU0NJ
SUFscGhhKGNoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hc2sgfD0gMzI7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChpc0FTQ0lJQWxwaGEoY2gyKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1hc2sgfD0gMzIgPDwgMTY7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgQmFzZUluZGV4IGFkZHJlc3MoaW5wdXQsIGluZGV4LCBUaW1lc1R3bywgKHRlcm0tPmlucHV0
UG9zaXRpb24gLSBtX2NoZWNrZWQpICogc2l6ZW9mKFVDaGFyKSk7CisgICAgICAgICAgICAgICAg
aWYgKG1hc2spIHsKKyAgICAgICAgICAgICAgICAgICAgbG9hZDMyV2l0aFVuYWxpZ25lZEhhbGZX
b3JkcyhhZGRyZXNzLCBjaGFyYWN0ZXIpOworICAgICAgICAgICAgICAgICAgICBvcjMyKEltbTMy
KG1hc2spLCBjaGFyYWN0ZXIpOworICAgICAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVu
ZChicmFuY2gzMihOb3RFcXVhbCwgY2hhcmFjdGVyLCBJbW0zMihjaFBhaXIgfCBtYXNrKSkpOwor
ICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFw
cGVuZChicmFuY2gzMldpdGhVbmFsaWduZWRIYWxmV29yZHMoTm90RXF1YWwsIGFkZHJlc3MsIElt
bTMyKGNoUGFpcikpKTsKKworICAgICAgICAgICAgICAgIG5leHRPcC5tX29wdGltaXplZCA9IHRy
dWU7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CiAK
ICAgICAgICAgaWYgKG1fcGF0dGVybi5tX2lnbm9yZUNhc2UgJiYgaXNBU0NJSUFscGhhKGNoKSkg
ewotICAgICAgICAgICAgcmVhZENoYXJhY3RlcihzdGF0ZS5pbnB1dE9mZnNldCgpLCBjaGFyYWN0
ZXIpOworICAgICAgICAgICAgcmVhZENoYXJhY3Rlcih0ZXJtLT5pbnB1dFBvc2l0aW9uIC0gbV9j
aGVja2VkLCBjaGFyYWN0ZXIpOwogICAgICAgICAgICAgb3IzMihUcnVzdGVkSW1tMzIoMzIpLCBj
aGFyYWN0ZXIpOwotICAgICAgICAgICAgc3RhdGUuanVtcFRvQmFja3RyYWNrKHRoaXMsIGJyYW5j
aDMyKE5vdEVxdWFsLCBjaGFyYWN0ZXIsIEltbTMyKFVuaWNvZGU6OnRvTG93ZXIoY2gpKSkpOwor
ICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIGNoYXJhY3Rl
ciwgSW1tMzIoVW5pY29kZTo6dG9Mb3dlcihjaCkpKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICBBU1NFUlQoIW1fcGF0dGVybi5tX2lnbm9yZUNhc2UgfHwgKFVuaWNvZGU6OnRvTG93
ZXIoY2gpID09IFVuaWNvZGU6OnRvVXBwZXIoY2gpKSk7Ci0gICAgICAgICAgICBzdGF0ZS5qdW1w
VG9CYWNrdHJhY2sodGhpcywganVtcElmQ2hhck5vdEVxdWFscyhjaCwgc3RhdGUuaW5wdXRPZmZz
ZXQoKSkpOworICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQoanVtcElmQ2hhck5vdEVxdWFs
cyhjaCwgdGVybS0+aW5wdXRQb3NpdGlvbiAtIG1fY2hlY2tlZCkpOwogICAgICAgICB9CiAgICAg
fQotCi0gICAgdm9pZCBnZW5lcmF0ZVBhdHRlcm5DaGFyYWN0ZXJQYWlyKFRlcm1HZW5lcmF0aW9u
U3RhdGUmIHN0YXRlKQorICAgIHZvaWQgYmFja3RyYWNrUGF0dGVybkNoYXJhY3Rlck9uY2Uoc2l6
ZV90IG9wSW5kZXgpCiAgICAgewotICAgICAgICBjb25zdCBSZWdpc3RlcklEIGNoYXJhY3RlciA9
IHJlZ1QwOwotICAgICAgICBVQ2hhciBjaDEgPSBzdGF0ZS50ZXJtKCkucGF0dGVybkNoYXJhY3Rl
cjsKLSAgICAgICAgVUNoYXIgY2gyID0gc3RhdGUubG9va2FoZWFkVGVybSgpLnBhdHRlcm5DaGFy
YWN0ZXI7Ci0KLSAgICAgICAgaW50IG1hc2sgPSAwOwotICAgICAgICBpbnQgY2hQYWlyID0gY2gx
IHwgKGNoMiA8PCAxNik7Ci0KLSAgICAgICAgaWYgKG1fcGF0dGVybi5tX2lnbm9yZUNhc2UpIHsK
LSAgICAgICAgICAgIGlmIChpc0FTQ0lJQWxwaGEoY2gxKSkKLSAgICAgICAgICAgICAgICBtYXNr
IHw9IDMyOwotICAgICAgICAgICAgaWYgKGlzQVNDSUlBbHBoYShjaDIpKQotICAgICAgICAgICAg
ICAgIG1hc2sgfD0gMzIgPDwgMTY7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobWFzaykgewot
ICAgICAgICAgICAgbG9hZDMyV2l0aFVuYWxpZ25lZEhhbGZXb3JkcyhCYXNlSW5kZXgoaW5wdXQs
IGluZGV4LCBUaW1lc1R3bywgc3RhdGUuaW5wdXRPZmZzZXQoKSAqIHNpemVvZihVQ2hhcikpLCBj
aGFyYWN0ZXIpOwotICAgICAgICAgICAgb3IzMihJbW0zMihtYXNrKSwgY2hhcmFjdGVyKTsKLSAg
ICAgICAgICAgIHN0YXRlLmp1bXBUb0JhY2t0cmFjayh0aGlzLCBicmFuY2gzMihOb3RFcXVhbCwg
Y2hhcmFjdGVyLCBJbW0zMihjaFBhaXIgfCBtYXNrKSkpOwotICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgIHN0YXRlLmp1bXBUb0JhY2t0cmFjayh0aGlzLCBicmFuY2gzMldpdGhVbmFsaWduZWRI
YWxmV29yZHMoTm90RXF1YWwsIEJhc2VJbmRleChpbnB1dCwgaW5kZXgsIFRpbWVzVHdvLCBzdGF0
ZS5pbnB1dE9mZnNldCgpICogc2l6ZW9mKFVDaGFyKSksIEltbTMyKGNoUGFpcikpKTsKKyAgICAg
ICAgWWFyck9wJiBvcCA9IG1fb3BzW29wSW5kZXhdOworICAgICAgICBtX2JhY2t0cmFja2luZ1N0
YXRlLmFwcGVuZChvcC5tX2p1bXBzKTsKICAgICB9CiAKLSAgICB2b2lkIGdlbmVyYXRlUGF0dGVy
bkNoYXJhY3RlckZpeGVkKFRlcm1HZW5lcmF0aW9uU3RhdGUmIHN0YXRlKQorICAgIHZvaWQgZ2Vu
ZXJhdGVQYXR0ZXJuQ2hhcmFjdGVyRml4ZWQoc2l6ZV90IG9wSW5kZXgpCiAgICAgeworICAgICAg
ICBZYXJyT3AmIG9wID0gbV9vcHNbb3BJbmRleF07CisgICAgICAgIFBhdHRlcm5UZXJtKiB0ZXJt
ID0gb3AubV90ZXJtOworICAgICAgICBVQ2hhciBjaCA9IHRlcm0tPnBhdHRlcm5DaGFyYWN0ZXI7
CisKICAgICAgICAgY29uc3QgUmVnaXN0ZXJJRCBjaGFyYWN0ZXIgPSByZWdUMDsKICAgICAgICAg
Y29uc3QgUmVnaXN0ZXJJRCBjb3VudFJlZ2lzdGVyID0gcmVnVDE7Ci0gICAgICAgIFBhdHRlcm5U
ZXJtJiB0ZXJtID0gc3RhdGUudGVybSgpOwotICAgICAgICBVQ2hhciBjaCA9IHRlcm0ucGF0dGVy
bkNoYXJhY3RlcjsKIAogICAgICAgICBtb3ZlKGluZGV4LCBjb3VudFJlZ2lzdGVyKTsKLSAgICAg
ICAgc3ViMzIoSW1tMzIodGVybS5xdWFudGl0eUNvdW50KSwgY291bnRSZWdpc3Rlcik7CisgICAg
ICAgIHN1YjMyKEltbTMyKHRlcm0tPnF1YW50aXR5Q291bnQpLCBjb3VudFJlZ2lzdGVyKTsKIAog
ICAgICAgICBMYWJlbCBsb29wKHRoaXMpOworICAgICAgICBCYXNlSW5kZXggYWRkcmVzcyhpbnB1
dCwgY291bnRSZWdpc3RlciwgVGltZXNUd28sICh0ZXJtLT5pbnB1dFBvc2l0aW9uIC0gbV9jaGVj
a2VkICsgdGVybS0+cXVhbnRpdHlDb3VudCkgKiBzaXplb2YoVUNoYXIpKTsKKwogICAgICAgICBp
ZiAobV9wYXR0ZXJuLm1faWdub3JlQ2FzZSAmJiBpc0FTQ0lJQWxwaGEoY2gpKSB7Ci0gICAgICAg
ICAgICBsb2FkMTYoQmFzZUluZGV4KGlucHV0LCBjb3VudFJlZ2lzdGVyLCBUaW1lc1R3bywgKHN0
YXRlLmlucHV0T2Zmc2V0KCkgKyB0ZXJtLnF1YW50aXR5Q291bnQpICogc2l6ZW9mKFVDaGFyKSks
IGNoYXJhY3Rlcik7CisgICAgICAgICAgICBsb2FkMTYoYWRkcmVzcywgY2hhcmFjdGVyKTsKICAg
ICAgICAgICAgIG9yMzIoVHJ1c3RlZEltbTMyKDMyKSwgY2hhcmFjdGVyKTsKLSAgICAgICAgICAg
IHN0YXRlLmp1bXBUb0JhY2t0cmFjayh0aGlzLCBicmFuY2gzMihOb3RFcXVhbCwgY2hhcmFjdGVy
LCBJbW0zMihVbmljb2RlOjp0b0xvd2VyKGNoKSkpKTsKKyAgICAgICAgICAgIG9wLm1fanVtcHMu
YXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBjaGFyYWN0ZXIsIEltbTMyKFVuaWNvZGU6OnRvTG93
ZXIoY2gpKSkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQVNTRVJUKCFtX3BhdHRl
cm4ubV9pZ25vcmVDYXNlIHx8IChVbmljb2RlOjp0b0xvd2VyKGNoKSA9PSBVbmljb2RlOjp0b1Vw
cGVyKGNoKSkpOwotICAgICAgICAgICAgc3RhdGUuanVtcFRvQmFja3RyYWNrKHRoaXMsIGJyYW5j
aDE2KE5vdEVxdWFsLCBCYXNlSW5kZXgoaW5wdXQsIGNvdW50UmVnaXN0ZXIsIFRpbWVzVHdvLCAo
c3RhdGUuaW5wdXRPZmZzZXQoKSArIHRlcm0ucXVhbnRpdHlDb3VudCkgKiBzaXplb2YoVUNoYXIp
KSwgSW1tMzIoY2gpKSk7CisgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChicmFuY2gxNihO
b3RFcXVhbCwgYWRkcmVzcywgSW1tMzIoY2gpKSk7CiAgICAgICAgIH0KICAgICAgICAgYWRkMzIo
VHJ1c3RlZEltbTMyKDEpLCBjb3VudFJlZ2lzdGVyKTsKICAgICAgICAgYnJhbmNoMzIoTm90RXF1
YWwsIGNvdW50UmVnaXN0ZXIsIGluZGV4KS5saW5rVG8obG9vcCwgdGhpcyk7CiAgICAgfQorICAg
IHZvaWQgYmFja3RyYWNrUGF0dGVybkNoYXJhY3RlckZpeGVkKHNpemVfdCBvcEluZGV4KQorICAg
IHsKKyAgICAgICAgWWFyck9wJiBvcCA9IG1fb3BzW29wSW5kZXhdOworICAgICAgICBtX2JhY2t0
cmFja2luZ1N0YXRlLmFwcGVuZChvcC5tX2p1bXBzKTsKKyAgICB9CiAKLSAgICB2b2lkIGdlbmVy
YXRlUGF0dGVybkNoYXJhY3RlckdyZWVkeShUZXJtR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSkKKyAg
ICB2b2lkIGdlbmVyYXRlUGF0dGVybkNoYXJhY3RlckdyZWVkeShzaXplX3Qgb3BJbmRleCkKICAg
ICB7CisgICAgICAgIFlhcnJPcCYgb3AgPSBtX29wc1tvcEluZGV4XTsKKyAgICAgICAgUGF0dGVy
blRlcm0qIHRlcm0gPSBvcC5tX3Rlcm07CisgICAgICAgIFVDaGFyIGNoID0gdGVybS0+cGF0dGVy
bkNoYXJhY3RlcjsKKwogICAgICAgICBjb25zdCBSZWdpc3RlcklEIGNoYXJhY3RlciA9IHJlZ1Qw
OwogICAgICAgICBjb25zdCBSZWdpc3RlcklEIGNvdW50UmVnaXN0ZXIgPSByZWdUMTsKLSAgICAg
ICAgUGF0dGVyblRlcm0mIHRlcm0gPSBzdGF0ZS50ZXJtKCk7Ci0gICAgICAgIFVDaGFyIGNoID0g
dGVybS5wYXR0ZXJuQ2hhcmFjdGVyOwogCiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCBj
b3VudFJlZ2lzdGVyKTsKIApAQCAtMTM1Miw4MTQgKzc0MywxNTM5IEBAIGNsYXNzIFlhcnJHZW5l
cmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZW0KICAgICAgICAgTGFiZWwgbG9vcCh0aGlzKTsKICAg
ICAgICAgZmFpbHVyZXMuYXBwZW5kKGF0RW5kT2ZJbnB1dCgpKTsKICAgICAgICAgaWYgKG1fcGF0
dGVybi5tX2lnbm9yZUNhc2UgJiYgaXNBU0NJSUFscGhhKGNoKSkgewotICAgICAgICAgICAgcmVh
ZENoYXJhY3RlcihzdGF0ZS5pbnB1dE9mZnNldCgpLCBjaGFyYWN0ZXIpOworICAgICAgICAgICAg
cmVhZENoYXJhY3Rlcih0ZXJtLT5pbnB1dFBvc2l0aW9uIC0gbV9jaGVja2VkLCBjaGFyYWN0ZXIp
OwogICAgICAgICAgICAgb3IzMihUcnVzdGVkSW1tMzIoMzIpLCBjaGFyYWN0ZXIpOwogICAgICAg
ICAgICAgZmFpbHVyZXMuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBjaGFyYWN0ZXIsIEltbTMy
KFVuaWNvZGU6OnRvTG93ZXIoY2gpKSkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
QVNTRVJUKCFtX3BhdHRlcm4ubV9pZ25vcmVDYXNlIHx8IChVbmljb2RlOjp0b0xvd2VyKGNoKSA9
PSBVbmljb2RlOjp0b1VwcGVyKGNoKSkpOwotICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKGp1
bXBJZkNoYXJOb3RFcXVhbHMoY2gsIHN0YXRlLmlucHV0T2Zmc2V0KCkpKTsKKyAgICAgICAgICAg
IGZhaWx1cmVzLmFwcGVuZChqdW1wSWZDaGFyTm90RXF1YWxzKGNoLCB0ZXJtLT5pbnB1dFBvc2l0
aW9uIC0gbV9jaGVja2VkKSk7CiAgICAgICAgIH0KIAogICAgICAgICBhZGQzMihUcnVzdGVkSW1t
MzIoMSksIGNvdW50UmVnaXN0ZXIpOwogICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIGlu
ZGV4KTsKLSAgICAgICAgaWYgKHRlcm0ucXVhbnRpdHlDb3VudCAhPSBxdWFudGlmeUluZmluaXRl
KSB7Ci0gICAgICAgICAgICBicmFuY2gzMihOb3RFcXVhbCwgY291bnRSZWdpc3RlciwgSW1tMzIo
dGVybS5xdWFudGl0eUNvdW50KSkubGlua1RvKGxvb3AsIHRoaXMpOwotICAgICAgICAgICAgZmFp
bHVyZXMuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIH0gZWxzZQorICAgICAgICBpZiAodGVybS0+
cXVhbnRpdHlDb3VudCA9PSBxdWFudGlmeUluZmluaXRlKQogICAgICAgICAgICAganVtcChsb29w
KTsKLQotICAgICAgICBMYWJlbCBiYWNrdHJhY2tCZWdpbih0aGlzKTsKLSAgICAgICAgbG9hZEZy
b21GcmFtZSh0ZXJtLmZyYW1lTG9jYXRpb24sIGNvdW50UmVnaXN0ZXIpOwotICAgICAgICBzdGF0
ZS5qdW1wVG9CYWNrdHJhY2sodGhpcywgYnJhbmNoVGVzdDMyKFplcm8sIGNvdW50UmVnaXN0ZXIp
KTsKLSAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBjb3VudFJlZ2lzdGVyKTsKLSAgICAg
ICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBpbmRleCk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGJyYW5jaDMyKE5vdEVxdWFsLCBjb3VudFJlZ2lzdGVyLCBJbW0zMih0ZXJtLT5xdWFudGl0
eUNvdW50KSkubGlua1RvKGxvb3AsIHRoaXMpOwogCiAgICAgICAgIGZhaWx1cmVzLmxpbmsodGhp
cyk7CisgICAgICAgIG9wLm1fcmVlbnRyeSA9IGxhYmVsKCk7CiAKLSAgICAgICAgc3RvcmVUb0Zy
YW1lKGNvdW50UmVnaXN0ZXIsIHRlcm0uZnJhbWVMb2NhdGlvbik7CisgICAgICAgIHN0b3JlVG9G
cmFtZShjb3VudFJlZ2lzdGVyLCB0ZXJtLT5mcmFtZUxvY2F0aW9uKTsKIAotICAgICAgICBzdGF0
ZS5zZXRCYWNrdHJhY2tMYWJlbChiYWNrdHJhY2tCZWdpbik7CiAgICAgfQorICAgIHZvaWQgYmFj
a3RyYWNrUGF0dGVybkNoYXJhY3RlckdyZWVkeShzaXplX3Qgb3BJbmRleCkKKyAgICB7CisgICAg
ICAgIFlhcnJPcCYgb3AgPSBtX29wc1tvcEluZGV4XTsKKyAgICAgICAgUGF0dGVyblRlcm0qIHRl
cm0gPSBvcC5tX3Rlcm07CiAKLSAgICB2b2lkIGdlbmVyYXRlUGF0dGVybkNoYXJhY3Rlck5vbkdy
ZWVkeShUZXJtR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSkKKyAgICAgICAgY29uc3QgUmVnaXN0ZXJJ
RCBjb3VudFJlZ2lzdGVyID0gcmVnVDE7CisKKyAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5s
aW5rKHRoaXMpOworCisgICAgICAgIGxvYWRGcm9tRnJhbWUodGVybS0+ZnJhbWVMb2NhdGlvbiwg
Y291bnRSZWdpc3Rlcik7CisgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUuYXBwZW5kKGJyYW5j
aFRlc3QzMihaZXJvLCBjb3VudFJlZ2lzdGVyKSk7CisgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0z
MigxKSwgY291bnRSZWdpc3Rlcik7CisgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgaW5k
ZXgpOworICAgICAgICBqdW1wKG9wLm1fcmVlbnRyeSk7CisgICAgfQorCisgICAgdm9pZCBnZW5l
cmF0ZVBhdHRlcm5DaGFyYWN0ZXJOb25HcmVlZHkoc2l6ZV90IG9wSW5kZXgpCiAgICAgewotICAg
ICAgICBjb25zdCBSZWdpc3RlcklEIGNoYXJhY3RlciA9IHJlZ1QwOworICAgICAgICBZYXJyT3Am
IG9wID0gbV9vcHNbb3BJbmRleF07CisgICAgICAgIFBhdHRlcm5UZXJtKiB0ZXJtID0gb3AubV90
ZXJtOworCiAgICAgICAgIGNvbnN0IFJlZ2lzdGVySUQgY291bnRSZWdpc3RlciA9IHJlZ1QxOwot
ICAgICAgICBQYXR0ZXJuVGVybSYgdGVybSA9IHN0YXRlLnRlcm0oKTsKLSAgICAgICAgVUNoYXIg
Y2ggPSB0ZXJtLnBhdHRlcm5DaGFyYWN0ZXI7CiAKICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIo
MCksIGNvdW50UmVnaXN0ZXIpOworICAgICAgICBvcC5tX3JlZW50cnkgPSBsYWJlbCgpOworICAg
ICAgICBzdG9yZVRvRnJhbWUoY291bnRSZWdpc3RlciwgdGVybS0+ZnJhbWVMb2NhdGlvbik7Cisg
ICAgfQorICAgIHZvaWQgYmFja3RyYWNrUGF0dGVybkNoYXJhY3Rlck5vbkdyZWVkeShzaXplX3Qg
b3BJbmRleCkKKyAgICB7CisgICAgICAgIFlhcnJPcCYgb3AgPSBtX29wc1tvcEluZGV4XTsKKyAg
ICAgICAgUGF0dGVyblRlcm0qIHRlcm0gPSBvcC5tX3Rlcm07CisgICAgICAgIFVDaGFyIGNoID0g
dGVybS0+cGF0dGVybkNoYXJhY3RlcjsKKworICAgICAgICBjb25zdCBSZWdpc3RlcklEIGNoYXJh
Y3RlciA9IHJlZ1QwOworICAgICAgICBjb25zdCBSZWdpc3RlcklEIGNvdW50UmVnaXN0ZXIgPSBy
ZWdUMTsKIAotICAgICAgICBKdW1wIGZpcnN0VGltZURvTm90aGluZyA9IGp1bXAoKTsKKyAgICAg
ICAgSnVtcExpc3Qgbm9uR3JlZWR5RmFpbHVyZXM7CiAKLSAgICAgICAgTGFiZWwgaGFyZEZhaWwo
dGhpcyk7Ci0gICAgICAgIHN1YjMyKGNvdW50UmVnaXN0ZXIsIGluZGV4KTsKLSAgICAgICAgc3Rh
dGUuanVtcFRvQmFja3RyYWNrKHRoaXMpOworICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmxp
bmsodGhpcyk7CiAKLSAgICAgICAgTGFiZWwgYmFja3RyYWNrQmVnaW4odGhpcyk7Ci0gICAgICAg
IGxvYWRGcm9tRnJhbWUodGVybS5mcmFtZUxvY2F0aW9uLCBjb3VudFJlZ2lzdGVyKTsKKyAgICAg
ICAgbG9hZEZyb21GcmFtZSh0ZXJtLT5mcmFtZUxvY2F0aW9uLCBjb3VudFJlZ2lzdGVyKTsKIAot
ICAgICAgICBhdEVuZE9mSW5wdXQoKS5saW5rVG8oaGFyZEZhaWwsIHRoaXMpOwotICAgICAgICBp
ZiAodGVybS5xdWFudGl0eUNvdW50ICE9IHF1YW50aWZ5SW5maW5pdGUpCi0gICAgICAgICAgICBi
cmFuY2gzMihFcXVhbCwgY291bnRSZWdpc3RlciwgSW1tMzIodGVybS5xdWFudGl0eUNvdW50KSwg
aGFyZEZhaWwpOworICAgICAgICBub25HcmVlZHlGYWlsdXJlcy5hcHBlbmQoYXRFbmRPZklucHV0
KCkpOworICAgICAgICBpZiAodGVybS0+cXVhbnRpdHlDb3VudCAhPSBxdWFudGlmeUluZmluaXRl
KQorICAgICAgICAgICAgbm9uR3JlZWR5RmFpbHVyZXMuYXBwZW5kKGJyYW5jaDMyKEVxdWFsLCBj
b3VudFJlZ2lzdGVyLCBJbW0zMih0ZXJtLT5xdWFudGl0eUNvdW50KSkpOwogICAgICAgICBpZiAo
bV9wYXR0ZXJuLm1faWdub3JlQ2FzZSAmJiBpc0FTQ0lJQWxwaGEoY2gpKSB7Ci0gICAgICAgICAg
ICByZWFkQ2hhcmFjdGVyKHN0YXRlLmlucHV0T2Zmc2V0KCksIGNoYXJhY3Rlcik7CisgICAgICAg
ICAgICByZWFkQ2hhcmFjdGVyKHRlcm0tPmlucHV0UG9zaXRpb24gLSBtX2NoZWNrZWQsIGNoYXJh
Y3Rlcik7CiAgICAgICAgICAgICBvcjMyKFRydXN0ZWRJbW0zMigzMiksIGNoYXJhY3Rlcik7Ci0g
ICAgICAgICAgICBicmFuY2gzMihOb3RFcXVhbCwgY2hhcmFjdGVyLCBJbW0zMihVbmljb2RlOjp0
b0xvd2VyKGNoKSkpLmxpbmtUbyhoYXJkRmFpbCwgdGhpcyk7CisgICAgICAgICAgICBub25HcmVl
ZHlGYWlsdXJlcy5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIGNoYXJhY3RlciwgSW1tMzIoVW5p
Y29kZTo6dG9Mb3dlcihjaCkpKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBBU1NF
UlQoIW1fcGF0dGVybi5tX2lnbm9yZUNhc2UgfHwgKFVuaWNvZGU6OnRvTG93ZXIoY2gpID09IFVu
aWNvZGU6OnRvVXBwZXIoY2gpKSk7Ci0gICAgICAgICAgICBqdW1wSWZDaGFyTm90RXF1YWxzKGNo
LCBzdGF0ZS5pbnB1dE9mZnNldCgpKS5saW5rVG8oaGFyZEZhaWwsIHRoaXMpOworICAgICAgICAg
ICAgbm9uR3JlZWR5RmFpbHVyZXMuYXBwZW5kKGp1bXBJZkNoYXJOb3RFcXVhbHMoY2gsIHRlcm0t
PmlucHV0UG9zaXRpb24gLSBtX2NoZWNrZWQpKTsKICAgICAgICAgfQogCiAgICAgICAgIGFkZDMy
KFRydXN0ZWRJbW0zMigxKSwgY291bnRSZWdpc3Rlcik7CiAgICAgICAgIGFkZDMyKFRydXN0ZWRJ
bW0zMigxKSwgaW5kZXgpOwogCi0gICAgICAgIGZpcnN0VGltZURvTm90aGluZy5saW5rKHRoaXMp
OwotICAgICAgICBzdG9yZVRvRnJhbWUoY291bnRSZWdpc3RlciwgdGVybS5mcmFtZUxvY2F0aW9u
KTsKKyAgICAgICAganVtcChvcC5tX3JlZW50cnkpOwogCi0gICAgICAgIHN0YXRlLnNldEJhY2t0
cmFja0xhYmVsKGJhY2t0cmFja0JlZ2luKTsKKyAgICAgICAgbm9uR3JlZWR5RmFpbHVyZXMubGlu
ayh0aGlzKTsKKyAgICAgICAgc3ViMzIoY291bnRSZWdpc3RlciwgaW5kZXgpOworICAgICAgICBt
X2JhY2t0cmFja2luZ1N0YXRlLmZhbGx0aHJvdWdoKCk7CiAgICAgfQogCi0gICAgdm9pZCBnZW5l
cmF0ZUNoYXJhY3RlckNsYXNzU2luZ2xlKFRlcm1HZW5lcmF0aW9uU3RhdGUmIHN0YXRlKQorICAg
IHZvaWQgZ2VuZXJhdGVDaGFyYWN0ZXJDbGFzc09uY2Uoc2l6ZV90IG9wSW5kZXgpCiAgICAgewot
ICAgICAgICBjb25zdCBSZWdpc3RlcklEIGNoYXJhY3RlciA9IHJlZ1QwOwotICAgICAgICBQYXR0
ZXJuVGVybSYgdGVybSA9IHN0YXRlLnRlcm0oKTsKLQotICAgICAgICBKdW1wTGlzdCBtYXRjaERl
c3Q7Ci0gICAgICAgIHJlYWRDaGFyYWN0ZXIoc3RhdGUuaW5wdXRPZmZzZXQoKSwgY2hhcmFjdGVy
KTsKLSAgICAgICAgbWF0Y2hDaGFyYWN0ZXJDbGFzcyhjaGFyYWN0ZXIsIG1hdGNoRGVzdCwgdGVy
bS5jaGFyYWN0ZXJDbGFzcyk7CisgICAgICAgIFlhcnJPcCYgb3AgPSBtX29wc1tvcEluZGV4XTsK
KyAgICAgICAgUGF0dGVyblRlcm0qIHRlcm0gPSBvcC5tX3Rlcm07CiAKLSAgICAgICAgaWYgKHRl
cm0uaW52ZXJ0KCkpCi0gICAgICAgICAgICBzdGF0ZS5qdW1wVG9CYWNrdHJhY2sodGhpcywgbWF0
Y2hEZXN0KTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBzdGF0ZS5qdW1wVG9CYWNrdHJh
Y2sodGhpcyk7Ci0gICAgICAgICAgICBtYXRjaERlc3QubGluayh0aGlzKTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIHZvaWQgZ2VuZXJhdGVDaGFyYWN0ZXJDbGFzc0ZpeGVkKFRlcm1HZW5lcmF0
aW9uU3RhdGUmIHN0YXRlKQotICAgIHsKICAgICAgICAgY29uc3QgUmVnaXN0ZXJJRCBjaGFyYWN0
ZXIgPSByZWdUMDsKLSAgICAgICAgY29uc3QgUmVnaXN0ZXJJRCBjb3VudFJlZ2lzdGVyID0gcmVn
VDE7Ci0gICAgICAgIFBhdHRlcm5UZXJtJiB0ZXJtID0gc3RhdGUudGVybSgpOwogCi0gICAgICAg
IG1vdmUoaW5kZXgsIGNvdW50UmVnaXN0ZXIpOwotICAgICAgICBzdWIzMihJbW0zMih0ZXJtLnF1
YW50aXR5Q291bnQpLCBjb3VudFJlZ2lzdGVyKTsKLQotICAgICAgICBMYWJlbCBsb29wKHRoaXMp
OwogICAgICAgICBKdW1wTGlzdCBtYXRjaERlc3Q7Ci0gICAgICAgIGxvYWQxNihCYXNlSW5kZXgo
aW5wdXQsIGNvdW50UmVnaXN0ZXIsIFRpbWVzVHdvLCAoc3RhdGUuaW5wdXRPZmZzZXQoKSArIHRl
cm0ucXVhbnRpdHlDb3VudCkgKiBzaXplb2YoVUNoYXIpKSwgY2hhcmFjdGVyKTsKLSAgICAgICAg
bWF0Y2hDaGFyYWN0ZXJDbGFzcyhjaGFyYWN0ZXIsIG1hdGNoRGVzdCwgdGVybS5jaGFyYWN0ZXJD
bGFzcyk7CisgICAgICAgIHJlYWRDaGFyYWN0ZXIoKHRlcm0tPmlucHV0UG9zaXRpb24gLSBtX2No
ZWNrZWQpLCBjaGFyYWN0ZXIpOworICAgICAgICBtYXRjaENoYXJhY3RlckNsYXNzKGNoYXJhY3Rl
ciwgbWF0Y2hEZXN0LCB0ZXJtLT5jaGFyYWN0ZXJDbGFzcyk7CiAKLSAgICAgICAgaWYgKHRlcm0u
aW52ZXJ0KCkpCi0gICAgICAgICAgICBzdGF0ZS5qdW1wVG9CYWNrdHJhY2sodGhpcywgbWF0Y2hE
ZXN0KTsKKyAgICAgICAgaWYgKHRlcm0tPmludmVydCgpKQorICAgICAgICAgICAgb3AubV9qdW1w
cy5hcHBlbmQobWF0Y2hEZXN0KTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBzdGF0ZS5q
dW1wVG9CYWNrdHJhY2sodGhpcyk7CisgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChqdW1w
KCkpOwogICAgICAgICAgICAgbWF0Y2hEZXN0LmxpbmsodGhpcyk7CiAgICAgICAgIH0KLQotICAg
ICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIGNvdW50UmVnaXN0ZXIpOwotICAgICAgICBicmFu
Y2gzMihOb3RFcXVhbCwgY291bnRSZWdpc3RlciwgaW5kZXgpLmxpbmtUbyhsb29wLCB0aGlzKTsK
ICAgICB9Ci0KLSAgICB2b2lkIGdlbmVyYXRlQ2hhcmFjdGVyQ2xhc3NHcmVlZHkoVGVybUdlbmVy
YXRpb25TdGF0ZSYgc3RhdGUpCisgICAgdm9pZCBiYWNrdHJhY2tDaGFyYWN0ZXJDbGFzc09uY2Uo
c2l6ZV90IG9wSW5kZXgpCiAgICAgewotICAgICAgICBjb25zdCBSZWdpc3RlcklEIGNoYXJhY3Rl
ciA9IHJlZ1QwOwotICAgICAgICBjb25zdCBSZWdpc3RlcklEIGNvdW50UmVnaXN0ZXIgPSByZWdU
MTsKLSAgICAgICAgUGF0dGVyblRlcm0mIHRlcm0gPSBzdGF0ZS50ZXJtKCk7Ci0KLSAgICAgICAg
bW92ZShUcnVzdGVkSW1tMzIoMCksIGNvdW50UmVnaXN0ZXIpOwotCi0gICAgICAgIEp1bXBMaXN0
IGZhaWx1cmVzOwotICAgICAgICBMYWJlbCBsb29wKHRoaXMpOwotICAgICAgICBmYWlsdXJlcy5h
cHBlbmQoYXRFbmRPZklucHV0KCkpOwotCi0gICAgICAgIGlmICh0ZXJtLmludmVydCgpKSB7Ci0g
ICAgICAgICAgICByZWFkQ2hhcmFjdGVyKHN0YXRlLmlucHV0T2Zmc2V0KCksIGNoYXJhY3Rlcik7
Ci0gICAgICAgICAgICBtYXRjaENoYXJhY3RlckNsYXNzKGNoYXJhY3RlciwgZmFpbHVyZXMsIHRl
cm0uY2hhcmFjdGVyQ2xhc3MpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgSnVtcExp
c3QgbWF0Y2hEZXN0OwotICAgICAgICAgICAgcmVhZENoYXJhY3RlcihzdGF0ZS5pbnB1dE9mZnNl
dCgpLCBjaGFyYWN0ZXIpOwotICAgICAgICAgICAgbWF0Y2hDaGFyYWN0ZXJDbGFzcyhjaGFyYWN0
ZXIsIG1hdGNoRGVzdCwgdGVybS5jaGFyYWN0ZXJDbGFzcyk7Ci0gICAgICAgICAgICBmYWlsdXJl
cy5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgICAgIG1hdGNoRGVzdC5saW5rKHRoaXMpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBjb3VudFJlZ2lzdGVyKTsK
LSAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBpbmRleCk7Ci0gICAgICAgIGlmICh0ZXJt
LnF1YW50aXR5Q291bnQgIT0gcXVhbnRpZnlJbmZpbml0ZSkgewotICAgICAgICAgICAgYnJhbmNo
MzIoTm90RXF1YWwsIGNvdW50UmVnaXN0ZXIsIEltbTMyKHRlcm0ucXVhbnRpdHlDb3VudCkpLmxp
bmtUbyhsb29wLCB0aGlzKTsKLSAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZChqdW1wKCkpOwot
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGp1bXAobG9vcCk7Ci0KLSAgICAgICAgTGFiZWwg
YmFja3RyYWNrQmVnaW4odGhpcyk7Ci0gICAgICAgIGxvYWRGcm9tRnJhbWUodGVybS5mcmFtZUxv
Y2F0aW9uLCBjb3VudFJlZ2lzdGVyKTsKLSAgICAgICAgc3RhdGUuanVtcFRvQmFja3RyYWNrKHRo
aXMsIGJyYW5jaFRlc3QzMihaZXJvLCBjb3VudFJlZ2lzdGVyKSk7Ci0gICAgICAgIHN1YjMyKFRy
dXN0ZWRJbW0zMigxKSwgY291bnRSZWdpc3Rlcik7Ci0gICAgICAgIHN1YjMyKFRydXN0ZWRJbW0z
MigxKSwgaW5kZXgpOwotCi0gICAgICAgIGZhaWx1cmVzLmxpbmsodGhpcyk7Ci0KLSAgICAgICAg
c3RvcmVUb0ZyYW1lKGNvdW50UmVnaXN0ZXIsIHRlcm0uZnJhbWVMb2NhdGlvbik7Ci0KLSAgICAg
ICAgc3RhdGUuc2V0QmFja3RyYWNrTGFiZWwoYmFja3RyYWNrQmVnaW4pOworICAgICAgICBZYXJy
T3AmIG9wID0gbV9vcHNbb3BJbmRleF07CisgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUuYXBw
ZW5kKG9wLm1fanVtcHMpOwogICAgIH0KIAotICAgIHZvaWQgZ2VuZXJhdGVDaGFyYWN0ZXJDbGFz
c05vbkdyZWVkeShUZXJtR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSkKKyAgICB2b2lkIGdlbmVyYXRl
Q2hhcmFjdGVyQ2xhc3NGaXhlZChzaXplX3Qgb3BJbmRleCkKICAgICB7CisgICAgICAgIFlhcnJP
cCYgb3AgPSBtX29wc1tvcEluZGV4XTsKKyAgICAgICAgUGF0dGVyblRlcm0qIHRlcm0gPSBvcC5t
X3Rlcm07CisKICAgICAgICAgY29uc3QgUmVnaXN0ZXJJRCBjaGFyYWN0ZXIgPSByZWdUMDsKICAg
ICAgICAgY29uc3QgUmVnaXN0ZXJJRCBjb3VudFJlZ2lzdGVyID0gcmVnVDE7Ci0gICAgICAgIFBh
dHRlcm5UZXJtJiB0ZXJtID0gc3RhdGUudGVybSgpOwotCi0gICAgICAgIG1vdmUoVHJ1c3RlZElt
bTMyKDApLCBjb3VudFJlZ2lzdGVyKTsKLQotICAgICAgICBKdW1wIGZpcnN0VGltZURvTm90aGlu
ZyA9IGp1bXAoKTsKLQotICAgICAgICBMYWJlbCBoYXJkRmFpbCh0aGlzKTsKLSAgICAgICAgc3Vi
MzIoY291bnRSZWdpc3RlciwgaW5kZXgpOwotICAgICAgICBzdGF0ZS5qdW1wVG9CYWNrdHJhY2so
dGhpcyk7CiAKLSAgICAgICAgTGFiZWwgYmFja3RyYWNrQmVnaW4odGhpcyk7Ci0gICAgICAgIGxv
YWRGcm9tRnJhbWUodGVybS5mcmFtZUxvY2F0aW9uLCBjb3VudFJlZ2lzdGVyKTsKLQotICAgICAg
ICBhdEVuZE9mSW5wdXQoKS5saW5rVG8oaGFyZEZhaWwsIHRoaXMpOwotICAgICAgICBicmFuY2gz
MihFcXVhbCwgY291bnRSZWdpc3RlciwgSW1tMzIodGVybS5xdWFudGl0eUNvdW50KSwgaGFyZEZh
aWwpOworICAgICAgICBtb3ZlKGluZGV4LCBjb3VudFJlZ2lzdGVyKTsKKyAgICAgICAgc3ViMzIo
SW1tMzIodGVybS0+cXVhbnRpdHlDb3VudCksIGNvdW50UmVnaXN0ZXIpOwogCisgICAgICAgIExh
YmVsIGxvb3AodGhpcyk7CiAgICAgICAgIEp1bXBMaXN0IG1hdGNoRGVzdDsKLSAgICAgICAgcmVh
ZENoYXJhY3RlcihzdGF0ZS5pbnB1dE9mZnNldCgpLCBjaGFyYWN0ZXIpOwotICAgICAgICBtYXRj
aENoYXJhY3RlckNsYXNzKGNoYXJhY3RlciwgbWF0Y2hEZXN0LCB0ZXJtLmNoYXJhY3RlckNsYXNz
KTsKKyAgICAgICAgbG9hZDE2KEJhc2VJbmRleChpbnB1dCwgY291bnRSZWdpc3RlciwgVGltZXNU
d28sICh0ZXJtLT5pbnB1dFBvc2l0aW9uIC0gbV9jaGVja2VkICsgdGVybS0+cXVhbnRpdHlDb3Vu
dCkgKiBzaXplb2YoVUNoYXIpKSwgY2hhcmFjdGVyKTsKKyAgICAgICAgbWF0Y2hDaGFyYWN0ZXJD
bGFzcyhjaGFyYWN0ZXIsIG1hdGNoRGVzdCwgdGVybS0+Y2hhcmFjdGVyQ2xhc3MpOwogCi0gICAg
ICAgIGlmICh0ZXJtLmludmVydCgpKQotICAgICAgICAgICAgbWF0Y2hEZXN0LmxpbmtUbyhoYXJk
RmFpbCwgdGhpcyk7CisgICAgICAgIGlmICh0ZXJtLT5pbnZlcnQoKSkKKyAgICAgICAgICAgIG9w
Lm1fanVtcHMuYXBwZW5kKG1hdGNoRGVzdCk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAg
anVtcChoYXJkRmFpbCk7CisgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChqdW1wKCkpOwog
ICAgICAgICAgICAgbWF0Y2hEZXN0LmxpbmsodGhpcyk7CiAgICAgICAgIH0KIAogICAgICAgICBh
ZGQzMihUcnVzdGVkSW1tMzIoMSksIGNvdW50UmVnaXN0ZXIpOwotICAgICAgICBhZGQzMihUcnVz
dGVkSW1tMzIoMSksIGluZGV4KTsKLQotICAgICAgICBmaXJzdFRpbWVEb05vdGhpbmcubGluayh0
aGlzKTsKLSAgICAgICAgc3RvcmVUb0ZyYW1lKGNvdW50UmVnaXN0ZXIsIHRlcm0uZnJhbWVMb2Nh
dGlvbik7Ci0KLSAgICAgICAgc3RhdGUuc2V0QmFja3RyYWNrTGFiZWwoYmFja3RyYWNrQmVnaW4p
OwotICAgIH0KLQotICAgIHZvaWQgZ2VuZXJhdGVQYXJlbnRoZXNlc0Rpc2p1bmN0aW9uKFBhdHRl
cm5UZXJtJiBwYXJlbnRoZXNlc1Rlcm0sIFRlcm1HZW5lcmF0aW9uU3RhdGUmIHN0YXRlLCB1bnNp
Z25lZCBhbHRlcm5hdGl2ZUZyYW1lTG9jYXRpb24pCi0gICAgewotICAgICAgICBBU1NFUlQoKHBh
cmVudGhlc2VzVGVybS50eXBlID09IFBhdHRlcm5UZXJtOjpUeXBlUGFyZW50aGVzZXNTdWJwYXR0
ZXJuKSB8fCAocGFyZW50aGVzZXNUZXJtLnR5cGUgPT0gUGF0dGVyblRlcm06OlR5cGVQYXJlbnRo
ZXRpY2FsQXNzZXJ0aW9uKSk7Ci0gICAgICAgIEFTU0VSVChwYXJlbnRoZXNlc1Rlcm0ucXVhbnRp
dHlDb3VudCA9PSAxKTsKLQotICAgICAgICBQYXR0ZXJuRGlzanVuY3Rpb24qIGRpc2p1bmN0aW9u
ID0gcGFyZW50aGVzZXNUZXJtLnBhcmVudGhlc2VzLmRpc2p1bmN0aW9uOwotICAgICAgICB1bnNp
Z25lZCBwcmVDaGVja2VkQ291bnQgPSAoKHBhcmVudGhlc2VzVGVybS5xdWFudGl0eVR5cGUgPT0g
UXVhbnRpZmllckZpeGVkQ291bnQpICYmIChwYXJlbnRoZXNlc1Rlcm0udHlwZSAhPSBQYXR0ZXJu
VGVybTo6VHlwZVBhcmVudGhldGljYWxBc3NlcnRpb24pKSA/IGRpc2p1bmN0aW9uLT5tX21pbmlt
dW1TaXplIDogMDsKLQotICAgICAgICBpZiAoZGlzanVuY3Rpb24tPm1fYWx0ZXJuYXRpdmVzLnNp
emUoKSA9PSAxKSB7Ci0gICAgICAgICAgICBzdGF0ZS5yZXNldEFsdGVybmF0aXZlKCk7Ci0gICAg
ICAgICAgICBBU1NFUlQoc3RhdGUuYWx0ZXJuYXRpdmVWYWxpZCgpKTsKLSAgICAgICAgICAgIFBh
dHRlcm5BbHRlcm5hdGl2ZSogYWx0ZXJuYXRpdmUgPSBzdGF0ZS5hbHRlcm5hdGl2ZSgpOwotICAg
ICAgICAgICAgb3B0aW1pemVBbHRlcm5hdGl2ZShhbHRlcm5hdGl2ZSk7Ci0KLSAgICAgICAgICAg
IGludCBjb3VudFRvQ2hlY2sgPSBhbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSAtIHByZUNoZWNr
ZWRDb3VudDsKLSAgICAgICAgICAgIGlmIChjb3VudFRvQ2hlY2spIHsKLSAgICAgICAgICAgICAg
ICBBU1NFUlQoKHBhcmVudGhlc2VzVGVybS50eXBlID09IFBhdHRlcm5UZXJtOjpUeXBlUGFyZW50
aGV0aWNhbEFzc2VydGlvbikgfHwgKHBhcmVudGhlc2VzVGVybS5xdWFudGl0eVR5cGUgIT0gUXVh
bnRpZmllckZpeGVkQ291bnQpKTsKLQotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlz
IHF1aXRlIGhvcnJpYmxlLiAgVGhlIGNhbGwgdG8gJ3BsYW50SnVtcFRvQmFja3RyYWNrSWZFeGlz
dHMnCi0gICAgICAgICAgICAgICAgLy8gd2lsbCBiZSBmb3JjZWQgdG8gYWx3YXlzIHRyYW1wb2xp
bmUgaW50byBoZXJlLCBqdXN0IHRvIGRlY3JlbWVudCB0aGUgaW5kZXguCi0gICAgICAgICAgICAg
ICAgLy8gSWNrLiAKLSAgICAgICAgICAgICAgICBKdW1wIHNraXAgPSBqdW1wKCk7Ci0KLSAgICAg
ICAgICAgICAgICBMYWJlbCBiYWNrdHJhY2tCZWdpbih0aGlzKTsKLSAgICAgICAgICAgICAgICBz
dWIzMihJbW0zMihjb3VudFRvQ2hlY2spLCBpbmRleCk7Ci0gICAgICAgICAgICAgICAgc3RhdGUu
YWRkQmFja3RyYWNrSnVtcChqdW1wKCkpOwotCi0gICAgICAgICAgICAgICAgc2tpcC5saW5rKHRo
aXMpOwotCi0gICAgICAgICAgICAgICAgc3RhdGUuc2V0QmFja3RyYWNrTGFiZWwoYmFja3RyYWNr
QmVnaW4pOwotCi0gICAgICAgICAgICAgICAgc3RhdGUuanVtcFRvQmFja3RyYWNrKHRoaXMsIGp1
bXBJZk5vQXZhaWxhYmxlSW5wdXQoY291bnRUb0NoZWNrKSk7Ci0gICAgICAgICAgICAgICAgc3Rh
dGUuY2hlY2tlZFRvdGFsICs9IGNvdW50VG9DaGVjazsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgZm9yIChzdGF0ZS5yZXNldFRlcm0oKTsgc3RhdGUudGVybVZhbGlkKCk7IHN0YXRlLm5l
eHRUZXJtKCkpCi0gICAgICAgICAgICAgICAgZ2VuZXJhdGVUZXJtKHN0YXRlKTsKLQotICAgICAg
ICAgICAgc3RhdGUuY2hlY2tlZFRvdGFsIC09IGNvdW50VG9DaGVjazsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIEp1bXBMaXN0IHN1Y2Nlc3NlczsKLSAgICAgICAgICAgIGJvb2wgcHJv
cG9nYXRlQmFja3RyYWNrID0gZmFsc2U7Ci0KLSAgICAgICAgICAgIC8vIFNhdmUgY3VycmVudCBz
dGF0ZSdzIHBhcmVuIGp1bXAgbGlzdCBmb3IgdXNlIHdpdGggZWFjaCBhbHRlcm5hdGl2ZSAKLSAg
ICAgICAgICAgIEp1bXBMaXN0KiBvdXRlckp1bXBMaXN0ID0gc3RhdGUuZ2V0SnVtcExpc3RUb1By
aW9yUGFyZW4oKTsKLQotICAgICAgICAgICAgZm9yIChzdGF0ZS5yZXNldEFsdGVybmF0aXZlKCk7
IHN0YXRlLmFsdGVybmF0aXZlVmFsaWQoKTsgc3RhdGUubmV4dEFsdGVybmF0aXZlKCksIHN0YXRl
LnNldEp1bXBMaXN0VG9QcmlvclBhcmVuKG91dGVySnVtcExpc3QpKSB7Ci0gICAgICAgICAgICAg
ICAgUGF0dGVybkFsdGVybmF0aXZlKiBhbHRlcm5hdGl2ZSA9IHN0YXRlLmFsdGVybmF0aXZlKCk7
Ci0gICAgICAgICAgICAgICAgb3B0aW1pemVBbHRlcm5hdGl2ZShhbHRlcm5hdGl2ZSk7Ci0KLSAg
ICAgICAgICAgICAgICBBU1NFUlQoYWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUgPj0gcHJlQ2hl
Y2tlZENvdW50KTsKLSAgICAgICAgICAgICAgICBpbnQgY291bnRUb0NoZWNrID0gYWx0ZXJuYXRp
dmUtPm1fbWluaW11bVNpemUgLSBwcmVDaGVja2VkQ291bnQ7Ci0gICAgICAgICAgICAgICAgaWYg
KGNvdW50VG9DaGVjaykgewotICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hZGRCYWNrdHJhY2tK
dW1wKGp1bXBJZk5vQXZhaWxhYmxlSW5wdXQoY291bnRUb0NoZWNrKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIHN0YXRlLmNoZWNrZWRUb3RhbCArPSBjb3VudFRvQ2hlY2s7Ci0gICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgZm9yIChzdGF0ZS5yZXNldFRlcm0oKTsgc3RhdGUudGVy
bVZhbGlkKCk7IHN0YXRlLm5leHRUZXJtKCkpCi0gICAgICAgICAgICAgICAgICAgIGdlbmVyYXRl
VGVybShzdGF0ZSk7Ci0KLSAgICAgICAgICAgICAgICAvLyBNYXRjaGVkIGFuIGFsdGVybmF0aXZl
LgotICAgICAgICAgICAgICAgIERhdGFMYWJlbFB0ciBkYXRhTGFiZWwgPSBzdG9yZVRvRnJhbWVX
aXRoUGF0Y2goYWx0ZXJuYXRpdmVGcmFtZUxvY2F0aW9uKTsKLQotICAgICAgICAgICAgICAgIGlm
ICghc3RhdGUuaXNMYXN0QWx0ZXJuYXRpdmUoKSB8fCBjb3VudFRvQ2hlY2spCi0gICAgICAgICAg
ICAgICAgICAgIHN1Y2Nlc3Nlcy5hcHBlbmQoanVtcCgpKTsKLQotICAgICAgICAgICAgICAgIC8v
IEFsdGVybmF0aXZlIGRpZCBub3QgbWF0Y2guCi0KLSAgICAgICAgICAgICAgICAvLyBEbyB3ZSBo
YXZlIGEgYmFja3RyYWNrIGRlc3RpbmF0aW9uPwotICAgICAgICAgICAgICAgIC8vICAgIGlmIHNv
LCBsaW5rIHRoZSBkYXRhIGxhYmVsIHRvIGl0LgotICAgICAgICAgICAgICAgIHN0YXRlLmxpbmtE
YXRhTGFiZWxUb0JhY2t0cmFja0lmRXhpc3RzKHRoaXMsIGRhdGFMYWJlbCk7Ci0KLSAgICAgICAg
ICAgICAgICBpZiAoIXN0YXRlLmlzTGFzdEFsdGVybmF0aXZlKCkgfHwgY291bnRUb0NoZWNrKQot
ICAgICAgICAgICAgICAgICAgICBzdGF0ZS5saW5rQWx0ZXJuYXRpdmVCYWNrdHJhY2tzKHRoaXMp
OwotCi0gICAgICAgICAgICAgICAgaWYgKGNvdW50VG9DaGVjaykgewotICAgICAgICAgICAgICAg
ICAgICBzdWIzMihJbW0zMihjb3VudFRvQ2hlY2spLCBpbmRleCk7Ci0gICAgICAgICAgICAgICAg
ICAgIHN0YXRlLmNoZWNrZWRUb3RhbCAtPSBjb3VudFRvQ2hlY2s7Ci0gICAgICAgICAgICAgICAg
fSBlbHNlIGlmIChzdGF0ZS5pc0xhc3RBbHRlcm5hdGl2ZSgpKQotICAgICAgICAgICAgICAgICAg
ICBwcm9wb2dhdGVCYWNrdHJhY2sgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
Ly8gV2UgZmFsbCB0aHJvdWdoIHRvIGhlcmUgd2hlbiB0aGUgbGFzdCBhbHRlcm5hdGl2ZSBmYWls
cy4KLSAgICAgICAgICAgIC8vIEFkZCBhIGJhY2t0cmFjayBvdXQgb2YgaGVyZSBmb3IgdGhlIHBh
cmVudGhlc2UgaGFuZGxpbmcgY29kZSB0byBsaW5rIHVwLgotICAgICAgICAgICAgaWYgKCFwcm9w
b2dhdGVCYWNrdHJhY2spCi0gICAgICAgICAgICAgICAgc3RhdGUuYWRkQmFja3RyYWNrSnVtcChq
dW1wKCkpOwotCi0gICAgICAgICAgICAvLyBTYXZlIGFkZHJlc3Mgb24gc3RhY2sgZm9yIHRoZSBw
YXJlbnMgY29kZSB0byBiYWNrdHJhY2sgdG8sIHRvIHJldHJ5IHRoZQotICAgICAgICAgICAgLy8g
bmV4dCBhbHRlcm5hdGl2ZS4KLSAgICAgICAgICAgIHN0YXRlLnNldEJhY2tUcmFja1N0YWNrT2Zm
c2V0KGFsdGVybmF0aXZlRnJhbWVMb2NhdGlvbiAqIHNpemVvZih2b2lkKikpOwotCi0gICAgICAg
ICAgICBzdWNjZXNzZXMubGluayh0aGlzKTsKLSAgICAgICAgfQorICAgICAgICBicmFuY2gzMihO
b3RFcXVhbCwgY291bnRSZWdpc3RlciwgaW5kZXgpLmxpbmtUbyhsb29wLCB0aGlzKTsKICAgICB9
Ci0KLSAgICB2b2lkIGdlbmVyYXRlUGFyZW50aGVzZXNTaW5nbGUoVGVybUdlbmVyYXRpb25TdGF0
ZSYgc3RhdGUpCisgICAgdm9pZCBiYWNrdHJhY2tDaGFyYWN0ZXJDbGFzc0ZpeGVkKHNpemVfdCBv
cEluZGV4KQogICAgIHsKLSAgICAgICAgY29uc3QgUmVnaXN0ZXJJRCBpbmRleFRlbXBvcmFyeSA9
IHJlZ1QwOwotICAgICAgICBQYXR0ZXJuVGVybSYgdGVybSA9IHN0YXRlLnRlcm0oKTsKLSAgICAg
ICAgUGF0dGVybkRpc2p1bmN0aW9uKiBkaXNqdW5jdGlvbiA9IHRlcm0ucGFyZW50aGVzZXMuZGlz
anVuY3Rpb247Ci0gICAgICAgIEFTU0VSVCh0ZXJtLnF1YW50aXR5Q291bnQgPT0gMSk7Ci0KLSAg
ICAgICAgdW5zaWduZWQgcHJlQ2hlY2tlZENvdW50ID0gKHRlcm0ucXVhbnRpdHlUeXBlID09IFF1
YW50aWZpZXJGaXhlZENvdW50KSA/IGRpc2p1bmN0aW9uLT5tX21pbmltdW1TaXplIDogMDsKLQot
ICAgICAgICB1bnNpZ25lZCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gPSB0ZXJtLmZyYW1lTG9j
YXRpb247Ci0gICAgICAgIHVuc2lnbmVkIGFsdGVybmF0aXZlRnJhbWVMb2NhdGlvbiA9IHBhcmVu
dGhlc2VzRnJhbWVMb2NhdGlvbjsKLSAgICAgICAgaWYgKHRlcm0ucXVhbnRpdHlUeXBlICE9IFF1
YW50aWZpZXJGaXhlZENvdW50KQotICAgICAgICAgICAgYWx0ZXJuYXRpdmVGcmFtZUxvY2F0aW9u
ICs9IFlhcnJTdGFja1NwYWNlRm9yQmFja1RyYWNrSW5mb1BhcmVudGhlc2VzT25jZTsKLQotICAg
ICAgICAvLyBvcHRpbWl6ZWQgY2FzZSAtIG5vIGNhcHR1cmUgJiBubyBxdWFudGlmaWVyIGNhbiBi
ZSBoYW5kbGVkIGluIGEgbGlnaHQtd2VpZ2h0IG1hbm5lci4KLSAgICAgICAgaWYgKCF0ZXJtLmNh
cHR1cmUoKSAmJiAodGVybS5xdWFudGl0eVR5cGUgPT0gUXVhbnRpZmllckZpeGVkQ291bnQpKSB7
Ci0gICAgICAgICAgICBtX2V4cHJlc3Npb25TdGF0ZS5pbmNyZW1lbnRQYXJlbk5lc3RpbmdMZXZl
bCgpOwotCi0gICAgICAgICAgICBUZXJtR2VuZXJhdGlvblN0YXRlIHBhcmVudGhlc2VzU3RhdGUo
ZGlzanVuY3Rpb24sIHN0YXRlLmNoZWNrZWRUb3RhbCk7Ci0KLSAgICAgICAgICAgIC8vIFVzZSB0
aGUgY3VycmVudCBzdGF0ZSdzIGp1bXAgbGlzdCBmb3IgdGhlIG5lc3RlZCBwYXJlbnRoZXNlcy4K
LSAgICAgICAgICAgIHBhcmVudGhlc2VzU3RhdGUuc2V0SnVtcExpc3RUb1ByaW9yUGFyZW4oc3Rh
dGUuZ2V0SnVtcExpc3RUb1ByaW9yUGFyZW4oKSk7Ci0KLSAgICAgICAgICAgIGdlbmVyYXRlUGFy
ZW50aGVzZXNEaXNqdW5jdGlvbihzdGF0ZS50ZXJtKCksIHBhcmVudGhlc2VzU3RhdGUsIGFsdGVy
bmF0aXZlRnJhbWVMb2NhdGlvbik7Ci0gICAgICAgICAgICAvLyB0aGlzIGV4cGVjdHMgdGhhdCBh
bnkgYmFja3RyYWNrcyBiYWNrIG91dCBvZiB0aGUgcGFyZW50aGVzZXMgd2lsbCBiZSBpbiB0aGUK
LSAgICAgICAgICAgIC8vIHBhcmVudGhlc2VzU3RhdGUncyBtX2JhY2tUcmFja0p1bXBzIHZlY3Rv
ciwgYW5kIHRoYXQgaWYgdGhleSBuZWVkIGJhY2t0cmFja2luZwotICAgICAgICAgICAgLy8gdGhl
eSB3aWxsIGhhdmUgc2V0IGFuIGVudHJ5IHBvaW50IG9uIHRoZSBwYXJlbnRoZXNlc1N0YXRlJ3Mg
bV9iYWNrdHJhY2tMYWJlbC4KLSAgICAgICAgICAgIEJhY2t0cmFja0Rlc3RpbmF0aW9uJiBwYXJl
bnRoZXNlc0JhY2t0cmFjayA9IHBhcmVudGhlc2VzU3RhdGUuZ2V0QmFja3RyYWNrRGVzdGluYXRp
b24oKTsKLSAgICAgICAgICAgIEJhY2t0cmFja0Rlc3RpbmF0aW9uJiBzdGF0ZUJhY2t0cmFjayA9
IHN0YXRlLmdldEJhY2t0cmFja0Rlc3RpbmF0aW9uKCk7Ci0KLSAgICAgICAgICAgIHN0YXRlLnBy
b3BhZ2F0ZUJhY2t0cmFja2luZ0Zyb20odGhpcywgcGFyZW50aGVzZXNCYWNrdHJhY2spOwotICAg
ICAgICAgICAgc3RhdGVCYWNrdHJhY2sucHJvcGFnYXRlQmFja3RyYWNrVG9MYWJlbChwYXJlbnRo
ZXNlc0JhY2t0cmFjayk7Ci0KLSAgICAgICAgICAgIHN0YXRlLnNldEp1bXBMaXN0VG9QcmlvclBh
cmVuKHBhcmVudGhlc2VzU3RhdGUuZ2V0SnVtcExpc3RUb1ByaW9yUGFyZW4oKSk7Ci0KLSAgICAg
ICAgICAgIG1fZXhwcmVzc2lvblN0YXRlLmRlY3JlbWVudFBhcmVuTmVzdGluZ0xldmVsKCk7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBKdW1wIG5vbkdyZWVkeVNraXBQYXJlbnRoZXNl
czsKLSAgICAgICAgICAgIExhYmVsIG5vbkdyZWVkeVRyeVBhcmVudGhlc2VzOwotICAgICAgICAg
ICAgaWYgKHRlcm0ucXVhbnRpdHlUeXBlID09IFF1YW50aWZpZXJHcmVlZHkpCi0gICAgICAgICAg
ICAgICAgc3RvcmVUb0ZyYW1lKGluZGV4LCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24pOwotICAg
ICAgICAgICAgZWxzZSBpZiAodGVybS5xdWFudGl0eVR5cGUgPT0gUXVhbnRpZmllck5vbkdyZWVk
eSkgewotICAgICAgICAgICAgICAgIHN0b3JlVG9GcmFtZShUcnVzdGVkSW1tMzIoLTEpLCBwYXJl
bnRoZXNlc0ZyYW1lTG9jYXRpb24pOwotICAgICAgICAgICAgICAgIG5vbkdyZWVkeVNraXBQYXJl
bnRoZXNlcyA9IGp1bXAoKTsKLSAgICAgICAgICAgICAgICBub25HcmVlZHlUcnlQYXJlbnRoZXNl
cyA9IGxhYmVsKCk7Ci0gICAgICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKGluZGV4LCBwYXJlbnRo
ZXNlc0ZyYW1lTG9jYXRpb24pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBzdG9y
ZSB0aGUgbWF0Y2ggc3RhcnQgaW5kZXgKLSAgICAgICAgICAgIGlmICh0ZXJtLmNhcHR1cmUoKSkg
ewotICAgICAgICAgICAgICAgIGludCBpbnB1dE9mZnNldCA9IHN0YXRlLmlucHV0T2Zmc2V0KCkg
LSBwcmVDaGVja2VkQ291bnQ7Ci0gICAgICAgICAgICAgICAgaWYgKGlucHV0T2Zmc2V0KSB7Ci0g
ICAgICAgICAgICAgICAgICAgIG1vdmUoaW5kZXgsIGluZGV4VGVtcG9yYXJ5KTsKLSAgICAgICAg
ICAgICAgICAgICAgYWRkMzIoSW1tMzIoaW5wdXRPZmZzZXQpLCBpbmRleFRlbXBvcmFyeSk7Ci0g
ICAgICAgICAgICAgICAgICAgIHN0b3JlMzIoaW5kZXhUZW1wb3JhcnksIEFkZHJlc3Mob3V0cHV0
LCAodGVybS5wYXJlbnRoZXNlcy5zdWJwYXR0ZXJuSWQgPDwgMSkgKiBzaXplb2YoaW50KSkpOwot
ICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBzdG9yZTMyKGluZGV4
LCBBZGRyZXNzKG91dHB1dCwgKHRlcm0ucGFyZW50aGVzZXMuc3VicGF0dGVybklkIDw8IDEpICog
c2l6ZW9mKGludCkpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgUGFyZW50aGVzZXNU
YWlsKiBwYXJlbnRoZXNlc1RhaWwgPSBtX2V4cHJlc3Npb25TdGF0ZS5hZGRQYXJlbnRoZXNlc1Rh
aWwodGVybSwgc3RhdGUuZ2V0SnVtcExpc3RUb1ByaW9yUGFyZW4oKSk7Ci0KLSAgICAgICAgICAg
IG1fZXhwcmVzc2lvblN0YXRlLmluY3JlbWVudFBhcmVuTmVzdGluZ0xldmVsKCk7Ci0KLSAgICAg
ICAgICAgIFRlcm1HZW5lcmF0aW9uU3RhdGUgcGFyZW50aGVzZXNTdGF0ZShkaXNqdW5jdGlvbiwg
c3RhdGUuY2hlY2tlZFRvdGFsKTsKLQotICAgICAgICAgICAgLy8gU2F2ZSB0aGUgcGFyZW50aGVz
ZXNUYWlsIGZvciBiYWNrdHJhY2tpbmcgZnJvbSBuZXN0ZWQgcGFyZW5zIHRvIHRoaXMgb25lLgot
ICAgICAgICAgICAgcGFyZW50aGVzZXNTdGF0ZS5zZXRKdW1wTGlzdFRvUHJpb3JQYXJlbigmcGFy
ZW50aGVzZXNUYWlsLT5tX3dpdGhpbkJhY2t0cmFja0p1bXBzKTsKLQotICAgICAgICAgICAgLy8g
Z2VuZXJhdGUgdGhlIGJvZHkgb2YgdGhlIHBhcmVudGhlc2VzCi0gICAgICAgICAgICBnZW5lcmF0
ZVBhcmVudGhlc2VzRGlzanVuY3Rpb24oc3RhdGUudGVybSgpLCBwYXJlbnRoZXNlc1N0YXRlLCBh
bHRlcm5hdGl2ZUZyYW1lTG9jYXRpb24pOwotCi0gICAgICAgICAgICAvLyBGb3Igbm9uLWZpeGVk
IGNvdW50cywgYmFja3RyYWNrIGlmIHdlIGRpZG4ndCBtYXRjaCBhbnl0aGluZy4KLSAgICAgICAg
ICAgIGlmICh0ZXJtLnF1YW50aXR5VHlwZSAhPSBRdWFudGlmaWVyRml4ZWRDb3VudCkKLSAgICAg
ICAgICAgICAgICBwYXJlbnRoZXNlc1RhaWwtPmFkZEFmdGVyUGFyZW5KdW1wKGJyYW5jaDMyKEVx
dWFsLCBpbmRleCwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgKHBhcmVudGhlc2VzRnJh
bWVMb2NhdGlvbiAqIHNpemVvZih2b2lkKikpKSkpOwotCi0gICAgICAgICAgICAvLyBzdG9yZSB0
aGUgbWF0Y2ggZW5kIGluZGV4Ci0gICAgICAgICAgICBpZiAodGVybS5jYXB0dXJlKCkpIHsKLSAg
ICAgICAgICAgICAgICBpbnQgaW5wdXRPZmZzZXQgPSBzdGF0ZS5pbnB1dE9mZnNldCgpOwotICAg
ICAgICAgICAgICAgIGlmIChpbnB1dE9mZnNldCkgewotICAgICAgICAgICAgICAgICAgICBtb3Zl
KGluZGV4LCBpbmRleFRlbXBvcmFyeSk7Ci0gICAgICAgICAgICAgICAgICAgIGFkZDMyKEltbTMy
KHN0YXRlLmlucHV0T2Zmc2V0KCkpLCBpbmRleFRlbXBvcmFyeSk7Ci0gICAgICAgICAgICAgICAg
ICAgIHN0b3JlMzIoaW5kZXhUZW1wb3JhcnksIEFkZHJlc3Mob3V0cHV0LCAoKHRlcm0ucGFyZW50
aGVzZXMuc3VicGF0dGVybklkIDw8IDEpICsgMSkgKiBzaXplb2YoaW50KSkpOwotICAgICAgICAg
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBzdG9yZTMyKGluZGV4LCBBZGRyZXNz
KG91dHB1dCwgKCh0ZXJtLnBhcmVudGhlc2VzLnN1YnBhdHRlcm5JZCA8PCAxKSArIDEpICogc2l6
ZW9mKGludCkpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbV9leHByZXNzaW9uU3Rh
dGUuZGVjcmVtZW50UGFyZW5OZXN0aW5nTGV2ZWwoKTsKLQotICAgICAgICAgICAgcGFyZW50aGVz
ZXNUYWlsLT5wcm9jZXNzQmFja3RyYWNrcyh0aGlzLCBzdGF0ZSwgcGFyZW50aGVzZXNTdGF0ZSwg
bm9uR3JlZWR5VHJ5UGFyZW50aGVzZXMsIGxhYmVsKCkpOwotCi0gICAgICAgICAgICBzdGF0ZS5z
ZXRKdW1wTGlzdFRvUHJpb3JQYXJlbigmcGFyZW50aGVzZXNUYWlsLT5tX2FmdGVyQmFja3RyYWNr
SnVtcHMpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBwYXJlbnRoZXNlc1N0YXRlLmdldEJh
Y2t0cmFja0Rlc3RpbmF0aW9uKCkuY2xlYXIoKTsKLQotICAgICAgICAgICAgaWYgKHRlcm0ucXVh
bnRpdHlUeXBlID09IFF1YW50aWZpZXJOb25HcmVlZHkpCi0gICAgICAgICAgICAgICAgbm9uR3Jl
ZWR5U2tpcFBhcmVudGhlc2VzLmxpbmsodGhpcyk7Ci0gICAgICAgIH0KKyAgICAgICAgWWFyck9w
JiBvcCA9IG1fb3BzW29wSW5kZXhdOworICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmFwcGVu
ZChvcC5tX2p1bXBzKTsKICAgICB9CiAKLSAgICB2b2lkIGdlbmVyYXRlUGFyZW50aGVzZXNHcmVl
ZHlOb0JhY2t0cmFjayhUZXJtR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSkKLSAgICB7Ci0gICAgICAg
IFBhdHRlcm5UZXJtJiBwYXJlbnRoZXNlc1Rlcm0gPSBzdGF0ZS50ZXJtKCk7Ci0gICAgICAgIFBh
dHRlcm5EaXNqdW5jdGlvbiogZGlzanVuY3Rpb24gPSBwYXJlbnRoZXNlc1Rlcm0ucGFyZW50aGVz
ZXMuZGlzanVuY3Rpb247Ci0gICAgICAgIEFTU0VSVChwYXJlbnRoZXNlc1Rlcm0udHlwZSA9PSBQ
YXR0ZXJuVGVybTo6VHlwZVBhcmVudGhlc2VzU3VicGF0dGVybik7Ci0gICAgICAgIEFTU0VSVChw
YXJlbnRoZXNlc1Rlcm0ucXVhbnRpdHlDb3VudCAhPSAxKTsgLy8gSGFuZGxlZCBieSBnZW5lcmF0
ZVBhcmVudGhlc2VzU2luZ2xlLgotCi0gICAgICAgIFRlcm1HZW5lcmF0aW9uU3RhdGUgcGFyZW50
aGVzZXNTdGF0ZShkaXNqdW5jdGlvbiwgc3RhdGUuY2hlY2tlZFRvdGFsKTsKLQotICAgICAgICBM
YWJlbCBtYXRjaEFnYWluKHRoaXMpOwotCi0gICAgICAgIHN0b3JlVG9GcmFtZShpbmRleCwgcGFy
ZW50aGVzZXNUZXJtLmZyYW1lTG9jYXRpb24pOyAvLyBTYXZlIHRoZSBjdXJyZW50IGluZGV4IHRv
IGNoZWNrIGZvciB6ZXJvIGxlbiBtYXRjaGVzIGxhdGVyLgorICAgIHZvaWQgZ2VuZXJhdGVDaGFy
YWN0ZXJDbGFzc0dyZWVkeShzaXplX3Qgb3BJbmRleCkKKyAgICB7CisgICAgICAgIFlhcnJPcCYg
b3AgPSBtX29wc1tvcEluZGV4XTsKKyAgICAgICAgUGF0dGVyblRlcm0qIHRlcm0gPSBvcC5tX3Rl
cm07CiAKLSAgICAgICAgZm9yIChwYXJlbnRoZXNlc1N0YXRlLnJlc2V0QWx0ZXJuYXRpdmUoKTsg
cGFyZW50aGVzZXNTdGF0ZS5hbHRlcm5hdGl2ZVZhbGlkKCk7IHBhcmVudGhlc2VzU3RhdGUubmV4
dEFsdGVybmF0aXZlKCkpIHsKKyAgICAgICAgY29uc3QgUmVnaXN0ZXJJRCBjaGFyYWN0ZXIgPSBy
ZWdUMDsKKyAgICAgICAgY29uc3QgUmVnaXN0ZXJJRCBjb3VudFJlZ2lzdGVyID0gcmVnVDE7CiAK
LSAgICAgICAgICAgIFBhdHRlcm5BbHRlcm5hdGl2ZSogYWx0ZXJuYXRpdmUgPSBwYXJlbnRoZXNl
c1N0YXRlLmFsdGVybmF0aXZlKCk7Ci0gICAgICAgICAgICBvcHRpbWl6ZUFsdGVybmF0aXZlKGFs
dGVybmF0aXZlKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIGNvdW50UmVnaXN0ZXIp
OwogCi0gICAgICAgICAgICBpbnQgY291bnRUb0NoZWNrID0gYWx0ZXJuYXRpdmUtPm1fbWluaW11
bVNpemU7Ci0gICAgICAgICAgICBpZiAoY291bnRUb0NoZWNrKSB7Ci0gICAgICAgICAgICAgICAg
cGFyZW50aGVzZXNTdGF0ZS5hZGRCYWNrdHJhY2tKdW1wKGp1bXBJZk5vQXZhaWxhYmxlSW5wdXQo
Y291bnRUb0NoZWNrKSk7Ci0gICAgICAgICAgICAgICAgcGFyZW50aGVzZXNTdGF0ZS5jaGVja2Vk
VG90YWwgKz0gY291bnRUb0NoZWNrOwotICAgICAgICAgICAgfQorICAgICAgICBKdW1wTGlzdCBm
YWlsdXJlczsKKyAgICAgICAgTGFiZWwgbG9vcCh0aGlzKTsKKyAgICAgICAgZmFpbHVyZXMuYXBw
ZW5kKGF0RW5kT2ZJbnB1dCgpKTsKIAotICAgICAgICAgICAgZm9yIChwYXJlbnRoZXNlc1N0YXRl
LnJlc2V0VGVybSgpOyBwYXJlbnRoZXNlc1N0YXRlLnRlcm1WYWxpZCgpOyBwYXJlbnRoZXNlc1N0
YXRlLm5leHRUZXJtKCkpCi0gICAgICAgICAgICAgICAgZ2VuZXJhdGVUZXJtKHBhcmVudGhlc2Vz
U3RhdGUpOworICAgICAgICBpZiAodGVybS0+aW52ZXJ0KCkpIHsKKyAgICAgICAgICAgIHJlYWRD
aGFyYWN0ZXIodGVybS0+aW5wdXRQb3NpdGlvbiAtIG1fY2hlY2tlZCwgY2hhcmFjdGVyKTsKKyAg
ICAgICAgICAgIG1hdGNoQ2hhcmFjdGVyQ2xhc3MoY2hhcmFjdGVyLCBmYWlsdXJlcywgdGVybS0+
Y2hhcmFjdGVyQ2xhc3MpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgSnVtcExpc3Qg
bWF0Y2hEZXN0OworICAgICAgICAgICAgcmVhZENoYXJhY3Rlcih0ZXJtLT5pbnB1dFBvc2l0aW9u
IC0gbV9jaGVja2VkLCBjaGFyYWN0ZXIpOworICAgICAgICAgICAgbWF0Y2hDaGFyYWN0ZXJDbGFz
cyhjaGFyYWN0ZXIsIG1hdGNoRGVzdCwgdGVybS0+Y2hhcmFjdGVyQ2xhc3MpOworICAgICAgICAg
ICAgZmFpbHVyZXMuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAgICBtYXRjaERlc3QubGluayh0
aGlzKTsKKyAgICAgICAgfQogCi0gICAgICAgICAgICAvLyBJZiB3ZSBnZXQgaGVyZSwgd2UgbWF0
Y2hlZCEgSWYgdGhlIGluZGV4IGFkdmFuY2VkIHRoZW4gdHJ5IHRvIG1hdGNoIG1vcmUgc2luY2Ug
bGltaXQgaXNuJ3Qgc3VwcG9ydGVkIHlldC4KLSAgICAgICAgICAgIGJyYW5jaDMyKE5vdEVxdWFs
LCBpbmRleCwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgKHBhcmVudGhlc2VzVGVybS5m
cmFtZUxvY2F0aW9uICogc2l6ZW9mKHZvaWQqKSkpLCBtYXRjaEFnYWluKTsKKyAgICAgICAgYWRk
MzIoVHJ1c3RlZEltbTMyKDEpLCBjb3VudFJlZ2lzdGVyKTsKKyAgICAgICAgYWRkMzIoVHJ1c3Rl
ZEltbTMyKDEpLCBpbmRleCk7CisgICAgICAgIGlmICh0ZXJtLT5xdWFudGl0eUNvdW50ICE9IHF1
YW50aWZ5SW5maW5pdGUpIHsKKyAgICAgICAgICAgIGJyYW5jaDMyKE5vdEVxdWFsLCBjb3VudFJl
Z2lzdGVyLCBJbW0zMih0ZXJtLT5xdWFudGl0eUNvdW50KSkubGlua1RvKGxvb3AsIHRoaXMpOwor
ICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAganVtcChsb29wKTsKIAotICAgICAgICAgICAgLy8gSWYgd2UgZ2V0IGhlcmUgd2Ug
bWF0Y2hlZCwgYnV0IHdlIG1hdGNoZWQgIiIgLSBjYW5ub3QgYWNjZXB0IHRoaXMgYWx0ZXJuYXRp
dmUgYXMgaXMsIHNvIGVpdGhlciBiYWNrdHJhY2ssCi0gICAgICAgICAgICAvLyBvciBmYWxsIHRo
cm91Z2ggdG8gdHJ5IHRoZSBuZXh0IGFsdGVybmF0aXZlIGlmIG5vIGJhY2t0cmFjayBpcyBhdmFp
bGFibGUuCi0gICAgICAgICAgICBwYXJlbnRoZXNlc1N0YXRlLnBsYW50SnVtcFRvQmFja3RyYWNr
SWZFeGlzdHModGhpcyk7CisgICAgICAgIGZhaWx1cmVzLmxpbmsodGhpcyk7CisgICAgICAgIG9w
Lm1fcmVlbnRyeSA9IGxhYmVsKCk7CiAKLSAgICAgICAgICAgIHBhcmVudGhlc2VzU3RhdGUubGlu
a0FsdGVybmF0aXZlQmFja3RyYWNrcyh0aGlzKTsKKyAgICAgICAgc3RvcmVUb0ZyYW1lKGNvdW50
UmVnaXN0ZXIsIHRlcm0tPmZyYW1lTG9jYXRpb24pOworICAgIH0KKyAgICB2b2lkIGJhY2t0cmFj
a0NoYXJhY3RlckNsYXNzR3JlZWR5KHNpemVfdCBvcEluZGV4KQorICAgIHsKKyAgICAgICAgWWFy
ck9wJiBvcCA9IG1fb3BzW29wSW5kZXhdOworICAgICAgICBQYXR0ZXJuVGVybSogdGVybSA9IG9w
Lm1fdGVybTsKIAotICAgICAgICAgICAgLy8gV2UgZ2V0IGhlcmUgaWYgdGhlIGFsdGVybmF0aXZl
IGZhaWxzIHRvIG1hdGNoIC0gZmFsbCB0aHJvdWdoIHRvIHRoZSBuZXh0IGl0ZXJhdGlvbiwgb3Ig
b3V0IG9mIHRoZSBsb29wLgorICAgICAgICBjb25zdCBSZWdpc3RlcklEIGNvdW50UmVnaXN0ZXIg
PSByZWdUMTsKIAotICAgICAgICAgICAgaWYgKGNvdW50VG9DaGVjaykgewotICAgICAgICAgICAg
ICAgIHN1YjMyKEltbTMyKGNvdW50VG9DaGVjayksIGluZGV4KTsKLSAgICAgICAgICAgICAgICBw
YXJlbnRoZXNlc1N0YXRlLmNoZWNrZWRUb3RhbCAtPSBjb3VudFRvQ2hlY2s7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KKyAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5rKHRoaXMpOwog
Ci0gICAgICAgIC8vIElmIHRoZSBsYXN0IGFsdGVybmF0aXZlIGZhbGxzIHRocm91Z2ggdG8gaGVy
ZSwgd2UgaGF2ZSBhIGZhaWxlZCBtYXRjaC4uLgotICAgICAgICAvLyBXaGljaCBtZWFucyB0aGF0
IHdlIG1hdGNoIHdoYXRldmVyIHdlIGhhdmUgbWF0Y2hlZCB1cCB0byB0aGlzIHBvaW50IChldmVu
IGlmIG5vdGhpbmcpLgorICAgICAgICBsb2FkRnJvbUZyYW1lKHRlcm0tPmZyYW1lTG9jYXRpb24s
IGNvdW50UmVnaXN0ZXIpOworICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmFwcGVuZChicmFu
Y2hUZXN0MzIoWmVybywgY291bnRSZWdpc3RlcikpOworICAgICAgICBzdWIzMihUcnVzdGVkSW1t
MzIoMSksIGNvdW50UmVnaXN0ZXIpOworICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIGlu
ZGV4KTsKKyAgICAgICAganVtcChvcC5tX3JlZW50cnkpOwogICAgIH0KIAotICAgIHZvaWQgZ2Vu
ZXJhdGVQYXJlbnRoZXRpY2FsQXNzZXJ0aW9uKFRlcm1HZW5lcmF0aW9uU3RhdGUmIHN0YXRlKQor
ICAgIHZvaWQgZ2VuZXJhdGVDaGFyYWN0ZXJDbGFzc05vbkdyZWVkeShzaXplX3Qgb3BJbmRleCkK
ICAgICB7Ci0gICAgICAgIFBhdHRlcm5UZXJtJiB0ZXJtID0gc3RhdGUudGVybSgpOwotICAgICAg
ICBQYXR0ZXJuRGlzanVuY3Rpb24qIGRpc2p1bmN0aW9uID0gdGVybS5wYXJlbnRoZXNlcy5kaXNq
dW5jdGlvbjsKLSAgICAgICAgQVNTRVJUKHRlcm0ucXVhbnRpdHlDb3VudCA9PSAxKTsKLSAgICAg
ICAgQVNTRVJUKHRlcm0ucXVhbnRpdHlUeXBlID09IFF1YW50aWZpZXJGaXhlZENvdW50KTsKLQot
ICAgICAgICB1bnNpZ25lZCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gPSB0ZXJtLmZyYW1lTG9j
YXRpb247Ci0gICAgICAgIHVuc2lnbmVkIGFsdGVybmF0aXZlRnJhbWVMb2NhdGlvbiA9IHBhcmVu
dGhlc2VzRnJhbWVMb2NhdGlvbiArIFlhcnJTdGFja1NwYWNlRm9yQmFja1RyYWNrSW5mb1BhcmVu
dGhldGljYWxBc3NlcnRpb247Ci0KLSAgICAgICAgaW50IGNvdW50Q2hlY2tlZEFmdGVyQXNzZXJ0
aW9uID0gc3RhdGUuY2hlY2tlZFRvdGFsIC0gdGVybS5pbnB1dFBvc2l0aW9uOworICAgICAgICBZ
YXJyT3AmIG9wID0gbV9vcHNbb3BJbmRleF07CisgICAgICAgIFBhdHRlcm5UZXJtKiB0ZXJtID0g
b3AubV90ZXJtOwogCi0gICAgICAgIGlmICh0ZXJtLmludmVydCgpKSB7Ci0gICAgICAgICAgICAv
LyBJbnZlcnRlZCBjYXNlCi0gICAgICAgICAgICBzdG9yZVRvRnJhbWUoaW5kZXgsIHBhcmVudGhl
c2VzRnJhbWVMb2NhdGlvbik7CisgICAgICAgIGNvbnN0IFJlZ2lzdGVySUQgY291bnRSZWdpc3Rl
ciA9IHJlZ1QxOwogCi0gICAgICAgICAgICBzdGF0ZS5jaGVja2VkVG90YWwgLT0gY291bnRDaGVj
a2VkQWZ0ZXJBc3NlcnRpb247Ci0gICAgICAgICAgICBpZiAoY291bnRDaGVja2VkQWZ0ZXJBc3Nl
cnRpb24pCi0gICAgICAgICAgICAgICAgc3ViMzIoSW1tMzIoY291bnRDaGVja2VkQWZ0ZXJBc3Nl
cnRpb24pLCBpbmRleCk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCBjb3VudFJlZ2lz
dGVyKTsKKyAgICAgICAgb3AubV9yZWVudHJ5ID0gbGFiZWwoKTsKKyAgICAgICAgc3RvcmVUb0Zy
YW1lKGNvdW50UmVnaXN0ZXIsIHRlcm0tPmZyYW1lTG9jYXRpb24pOworICAgIH0KKyAgICB2b2lk
IGJhY2t0cmFja0NoYXJhY3RlckNsYXNzTm9uR3JlZWR5KHNpemVfdCBvcEluZGV4KQorICAgIHsK
KyAgICAgICAgWWFyck9wJiBvcCA9IG1fb3BzW29wSW5kZXhdOworICAgICAgICBQYXR0ZXJuVGVy
bSogdGVybSA9IG9wLm1fdGVybTsKIAotICAgICAgICAgICAgVGVybUdlbmVyYXRpb25TdGF0ZSBw
YXJlbnRoZXNlc1N0YXRlKGRpc2p1bmN0aW9uLCBzdGF0ZS5jaGVja2VkVG90YWwpOwotICAgICAg
ICAgICAgZ2VuZXJhdGVQYXJlbnRoZXNlc0Rpc2p1bmN0aW9uKHN0YXRlLnRlcm0oKSwgcGFyZW50
aGVzZXNTdGF0ZSwgYWx0ZXJuYXRpdmVGcmFtZUxvY2F0aW9uKTsKLSAgICAgICAgICAgIC8vIFN1
Y2Nlc3MhIC0gd2hpY2ggbWVhbnMgLSBGYWlsIQotICAgICAgICAgICAgbG9hZEZyb21GcmFtZShw
YXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24sIGluZGV4KTsKLSAgICAgICAgICAgIHN0YXRlLmp1bXBU
b0JhY2t0cmFjayh0aGlzKTsKKyAgICAgICAgY29uc3QgUmVnaXN0ZXJJRCBjaGFyYWN0ZXIgPSBy
ZWdUMDsKKyAgICAgICAgY29uc3QgUmVnaXN0ZXJJRCBjb3VudFJlZ2lzdGVyID0gcmVnVDE7CiAK
LSAgICAgICAgICAgIC8vIEFuZCBmYWlsIG1lYW5zIHN1Y2Nlc3MuCi0gICAgICAgICAgICBwYXJl
bnRoZXNlc1N0YXRlLmxpbmtBbHRlcm5hdGl2ZUJhY2t0cmFja3ModGhpcyk7CisgICAgICAgIEp1
bXBMaXN0IG5vbkdyZWVkeUZhaWx1cmVzOwogCi0gICAgICAgICAgICBsb2FkRnJvbUZyYW1lKHBh
cmVudGhlc2VzRnJhbWVMb2NhdGlvbiwgaW5kZXgpOworICAgICAgICBtX2JhY2t0cmFja2luZ1N0
YXRlLmxpbmsodGhpcyk7CiAKLSAgICAgICAgICAgIHN0YXRlLmNoZWNrZWRUb3RhbCArPSBjb3Vu
dENoZWNrZWRBZnRlckFzc2VydGlvbjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8v
IE5vcm1hbCBjYXNlCi0gICAgICAgICAgICBzdG9yZVRvRnJhbWUoaW5kZXgsIHBhcmVudGhlc2Vz
RnJhbWVMb2NhdGlvbik7CisgICAgICAgIExhYmVsIGJhY2t0cmFja0JlZ2luKHRoaXMpOworICAg
ICAgICBsb2FkRnJvbUZyYW1lKHRlcm0tPmZyYW1lTG9jYXRpb24sIGNvdW50UmVnaXN0ZXIpOwog
Ci0gICAgICAgICAgICBzdGF0ZS5jaGVja2VkVG90YWwgLT0gY291bnRDaGVja2VkQWZ0ZXJBc3Nl
cnRpb247Ci0gICAgICAgICAgICBpZiAoY291bnRDaGVja2VkQWZ0ZXJBc3NlcnRpb24pCi0gICAg
ICAgICAgICAgICAgc3ViMzIoSW1tMzIoY291bnRDaGVja2VkQWZ0ZXJBc3NlcnRpb24pLCBpbmRl
eCk7CisgICAgICAgIG5vbkdyZWVkeUZhaWx1cmVzLmFwcGVuZChhdEVuZE9mSW5wdXQoKSk7Cisg
ICAgICAgIG5vbkdyZWVkeUZhaWx1cmVzLmFwcGVuZChicmFuY2gzMihFcXVhbCwgY291bnRSZWdp
c3RlciwgSW1tMzIodGVybS0+cXVhbnRpdHlDb3VudCkpKTsKIAotICAgICAgICAgICAgVGVybUdl
bmVyYXRpb25TdGF0ZSBwYXJlbnRoZXNlc1N0YXRlKGRpc2p1bmN0aW9uLCBzdGF0ZS5jaGVja2Vk
VG90YWwpOwotICAgICAgICAgICAgZ2VuZXJhdGVQYXJlbnRoZXNlc0Rpc2p1bmN0aW9uKHN0YXRl
LnRlcm0oKSwgcGFyZW50aGVzZXNTdGF0ZSwgYWx0ZXJuYXRpdmVGcmFtZUxvY2F0aW9uKTsKLSAg
ICAgICAgICAgIC8vIFN1Y2Nlc3MhIC0gd2hpY2ggbWVhbnMgLSBTdWNjZXNzIQotICAgICAgICAg
ICAgbG9hZEZyb21GcmFtZShwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24sIGluZGV4KTsKLSAgICAg
ICAgICAgIEp1bXAgc3VjY2VzcyA9IGp1bXAoKTsKKyAgICAgICAgSnVtcExpc3QgbWF0Y2hEZXN0
OworICAgICAgICByZWFkQ2hhcmFjdGVyKHRlcm0tPmlucHV0UG9zaXRpb24gLSBtX2NoZWNrZWQs
IGNoYXJhY3Rlcik7CisgICAgICAgIG1hdGNoQ2hhcmFjdGVyQ2xhc3MoY2hhcmFjdGVyLCBtYXRj
aERlc3QsIHRlcm0tPmNoYXJhY3RlckNsYXNzKTsKIAotICAgICAgICAgICAgcGFyZW50aGVzZXNT
dGF0ZS5saW5rQWx0ZXJuYXRpdmVCYWNrdHJhY2tzKHRoaXMpOworICAgICAgICBpZiAodGVybS0+
aW52ZXJ0KCkpCisgICAgICAgICAgICBub25HcmVlZHlGYWlsdXJlcy5hcHBlbmQobWF0Y2hEZXN0
KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBub25HcmVlZHlGYWlsdXJlcy5hcHBlbmQo
anVtcCgpKTsKKyAgICAgICAgICAgIG1hdGNoRGVzdC5saW5rKHRoaXMpOworICAgICAgICB9CiAK
LSAgICAgICAgICAgIGxvYWRGcm9tRnJhbWUocGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uLCBpbmRl
eCk7Ci0gICAgICAgICAgICBzdGF0ZS5qdW1wVG9CYWNrdHJhY2sodGhpcyk7CisgICAgICAgIGFk
ZDMyKFRydXN0ZWRJbW0zMigxKSwgY291bnRSZWdpc3Rlcik7CisgICAgICAgIGFkZDMyKFRydXN0
ZWRJbW0zMigxKSwgaW5kZXgpOwogCi0gICAgICAgICAgICBzdWNjZXNzLmxpbmsodGhpcyk7Cisg
ICAgICAgIGp1bXAob3AubV9yZWVudHJ5KTsKIAotICAgICAgICAgICAgc3RhdGUuY2hlY2tlZFRv
dGFsICs9IGNvdW50Q2hlY2tlZEFmdGVyQXNzZXJ0aW9uOwotICAgICAgICB9CisgICAgICAgIG5v
bkdyZWVkeUZhaWx1cmVzLmxpbmsodGhpcyk7CisgICAgICAgIHN1YjMyKGNvdW50UmVnaXN0ZXIs
IGluZGV4KTsKKyAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5mYWxsdGhyb3VnaCgpOwogICAg
IH0KIAotICAgIHZvaWQgZ2VuZXJhdGVUZXJtKFRlcm1HZW5lcmF0aW9uU3RhdGUmIHN0YXRlKQor
ICAgIC8vIENvZGUgZ2VuZXJhdGlvbi9iYWNrdHJhY2tpbmcgZm9yIHNpbXBsZSB0ZXJtcworICAg
IC8vIChwYXR0ZXJuIGNoYXJhY3RlcnMsIGNoYXJhY3RlciBjbGFzc2VzLCBhbmQgYXNzZXJ0aW9u
cykuCisgICAgLy8gVGhlc2UgbWV0aG9kcyBmYXJtIG91dCB3b3JrIHRvIHRoZSBzZXQgb2YgZnVu
Y3Rpb25zIGFib3ZlLgorICAgIHZvaWQgZ2VuZXJhdGVUZXJtKHNpemVfdCBvcEluZGV4KQogICAg
IHsKLSAgICAgICAgUGF0dGVyblRlcm0mIHRlcm0gPSBzdGF0ZS50ZXJtKCk7CisgICAgICAgIFlh
cnJPcCYgb3AgPSBtX29wc1tvcEluZGV4XTsKKyAgICAgICAgUGF0dGVyblRlcm0qIHRlcm0gPSBv
cC5tX3Rlcm07CisKKyAgICAgICAgc3dpdGNoICh0ZXJtLT50eXBlKSB7CisgICAgICAgIGNhc2Ug
UGF0dGVyblRlcm06OlR5cGVQYXR0ZXJuQ2hhcmFjdGVyOgorICAgICAgICAgICAgc3dpdGNoICh0
ZXJtLT5xdWFudGl0eVR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgUXVhbnRpZmllckZpeGVkQ291
bnQ6CisgICAgICAgICAgICAgICAgaWYgKHRlcm0tPnF1YW50aXR5Q291bnQgPT0gMSkKKyAgICAg
ICAgICAgICAgICAgICAgZ2VuZXJhdGVQYXR0ZXJuQ2hhcmFjdGVyT25jZShvcEluZGV4KTsKKyAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlUGF0dGVybkNo
YXJhY3RlckZpeGVkKG9wSW5kZXgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgY2FzZSBRdWFudGlmaWVyR3JlZWR5OgorICAgICAgICAgICAgICAgIGdlbmVyYXRlUGF0dGVy
bkNoYXJhY3RlckdyZWVkeShvcEluZGV4KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgUXVhbnRpZmllck5vbkdyZWVkeToKKyAgICAgICAgICAgICAgICBnZW5lcmF0
ZVBhdHRlcm5DaGFyYWN0ZXJOb25HcmVlZHkob3BJbmRleCk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFBh
dHRlcm5UZXJtOjpUeXBlQ2hhcmFjdGVyQ2xhc3M6CisgICAgICAgICAgICBzd2l0Y2ggKHRlcm0t
PnF1YW50aXR5VHlwZSkgeworICAgICAgICAgICAgY2FzZSBRdWFudGlmaWVyRml4ZWRDb3VudDoK
KyAgICAgICAgICAgICAgICBpZiAodGVybS0+cXVhbnRpdHlDb3VudCA9PSAxKQorICAgICAgICAg
ICAgICAgICAgICBnZW5lcmF0ZUNoYXJhY3RlckNsYXNzT25jZShvcEluZGV4KTsKKyAgICAgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlQ2hhcmFjdGVyQ2xhc3NG
aXhlZChvcEluZGV4KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
UXVhbnRpZmllckdyZWVkeToKKyAgICAgICAgICAgICAgICBnZW5lcmF0ZUNoYXJhY3RlckNsYXNz
R3JlZWR5KG9wSW5kZXgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBRdWFudGlmaWVyTm9uR3JlZWR5OgorICAgICAgICAgICAgICAgIGdlbmVyYXRlQ2hhcmFjdGVy
Q2xhc3NOb25HcmVlZHkob3BJbmRleCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBicmVhazsKIAotICAgICAgICBzd2l0Y2ggKHRlcm0udHlwZSkg
ewogICAgICAgICBjYXNlIFBhdHRlcm5UZXJtOjpUeXBlQXNzZXJ0aW9uQk9MOgotICAgICAgICAg
ICAgZ2VuZXJhdGVBc3NlcnRpb25CT0woc3RhdGUpOworICAgICAgICAgICAgZ2VuZXJhdGVBc3Nl
cnRpb25CT0wob3BJbmRleCk7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIFBh
dHRlcm5UZXJtOjpUeXBlQXNzZXJ0aW9uRU9MOgotICAgICAgICAgICAgZ2VuZXJhdGVBc3NlcnRp
b25FT0woc3RhdGUpOworICAgICAgICAgICAgZ2VuZXJhdGVBc3NlcnRpb25FT0wob3BJbmRleCk7
CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIFBhdHRlcm5UZXJtOjpUeXBlQXNz
ZXJ0aW9uV29yZEJvdW5kYXJ5OgotICAgICAgICAgICAgZ2VuZXJhdGVBc3NlcnRpb25Xb3JkQm91
bmRhcnkoc3RhdGUpOworICAgICAgICAgICAgZ2VuZXJhdGVBc3NlcnRpb25Xb3JkQm91bmRhcnko
b3BJbmRleCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFBhdHRlcm5UZXJt
OjpUeXBlRm9yd2FyZFJlZmVyZW5jZToKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNh
c2UgUGF0dGVyblRlcm06OlR5cGVQYXJlbnRoZXNlc1N1YnBhdHRlcm46CisgICAgICAgIGNhc2Ug
UGF0dGVyblRlcm06OlR5cGVQYXJlbnRoZXRpY2FsQXNzZXJ0aW9uOgorICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGNhc2UgUGF0dGVyblRlcm06OlR5cGVCYWNrUmVm
ZXJlbmNlOgorICAgICAgICAgICAgbV9zaG91bGRGYWxsQmFjayA9IHRydWU7CiAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICB2b2lkIGJhY2t0cmFja1Rlcm0oc2l6ZV90
IG9wSW5kZXgpCisgICAgeworICAgICAgICBZYXJyT3AmIG9wID0gbV9vcHNbb3BJbmRleF07Cisg
ICAgICAgIFBhdHRlcm5UZXJtKiB0ZXJtID0gb3AubV90ZXJtOwogCisgICAgICAgIHN3aXRjaCAo
dGVybS0+dHlwZSkgewogICAgICAgICBjYXNlIFBhdHRlcm5UZXJtOjpUeXBlUGF0dGVybkNoYXJh
Y3RlcjoKLSAgICAgICAgICAgIHN3aXRjaCAodGVybS5xdWFudGl0eVR5cGUpIHsKKyAgICAgICAg
ICAgIHN3aXRjaCAodGVybS0+cXVhbnRpdHlUeXBlKSB7CiAgICAgICAgICAgICBjYXNlIFF1YW50
aWZpZXJGaXhlZENvdW50OgotICAgICAgICAgICAgICAgIGlmICh0ZXJtLnF1YW50aXR5Q291bnQg
PT0gMSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUuaXNTaW5nbGVQYXR0ZXJuQ2hh
cmFjdGVyTG9va2FoZWFkVGVybSgpICYmIChzdGF0ZS5sb29rYWhlYWRUZXJtKCkuaW5wdXRQb3Np
dGlvbiA9PSAodGVybS5pbnB1dFBvc2l0aW9uICsgMSkpKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBnZW5lcmF0ZVBhdHRlcm5DaGFyYWN0ZXJQYWlyKHN0YXRlKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YXRlLm5leHRUZXJtKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVQYXR0ZXJuQ2hhcmFjdGVyU2luZ2xlKHN0
YXRlKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZ2VuZXJh
dGVQYXR0ZXJuQ2hhcmFjdGVyRml4ZWQoc3RhdGUpOworICAgICAgICAgICAgICAgIGlmICh0ZXJt
LT5xdWFudGl0eUNvdW50ID09IDEpCisgICAgICAgICAgICAgICAgICAgIGJhY2t0cmFja1BhdHRl
cm5DaGFyYWN0ZXJPbmNlKG9wSW5kZXgpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgYmFja3RyYWNrUGF0dGVybkNoYXJhY3RlckZpeGVkKG9wSW5kZXgpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBRdWFudGlmaWVyR3JlZWR5Ogot
ICAgICAgICAgICAgICAgIGdlbmVyYXRlUGF0dGVybkNoYXJhY3RlckdyZWVkeShzdGF0ZSk7Cisg
ICAgICAgICAgICAgICAgYmFja3RyYWNrUGF0dGVybkNoYXJhY3RlckdyZWVkeShvcEluZGV4KTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgUXVhbnRpZmllck5vbkdy
ZWVkeToKLSAgICAgICAgICAgICAgICBnZW5lcmF0ZVBhdHRlcm5DaGFyYWN0ZXJOb25HcmVlZHko
c3RhdGUpOworICAgICAgICAgICAgICAgIGJhY2t0cmFja1BhdHRlcm5DaGFyYWN0ZXJOb25HcmVl
ZHkob3BJbmRleCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIFBhdHRlcm5UZXJtOjpUeXBlQ2hhcmFjdGVy
Q2xhc3M6Ci0gICAgICAgICAgICBzd2l0Y2ggKHRlcm0ucXVhbnRpdHlUeXBlKSB7CisgICAgICAg
ICAgICBzd2l0Y2ggKHRlcm0tPnF1YW50aXR5VHlwZSkgewogICAgICAgICAgICAgY2FzZSBRdWFu
dGlmaWVyRml4ZWRDb3VudDoKLSAgICAgICAgICAgICAgICBpZiAodGVybS5xdWFudGl0eUNvdW50
ID09IDEpCi0gICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlQ2hhcmFjdGVyQ2xhc3NTaW5nbGUo
c3RhdGUpOworICAgICAgICAgICAgICAgIGlmICh0ZXJtLT5xdWFudGl0eUNvdW50ID09IDEpCisg
ICAgICAgICAgICAgICAgICAgIGJhY2t0cmFja0NoYXJhY3RlckNsYXNzT25jZShvcEluZGV4KTsK
ICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlQ2hhcmFj
dGVyQ2xhc3NGaXhlZChzdGF0ZSk7CisgICAgICAgICAgICAgICAgICAgIGJhY2t0cmFja0NoYXJh
Y3RlckNsYXNzRml4ZWQob3BJbmRleCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICBjYXNlIFF1YW50aWZpZXJHcmVlZHk6Ci0gICAgICAgICAgICAgICAgZ2VuZXJhdGVDaGFy
YWN0ZXJDbGFzc0dyZWVkeShzdGF0ZSk7CisgICAgICAgICAgICAgICAgYmFja3RyYWNrQ2hhcmFj
dGVyQ2xhc3NHcmVlZHkob3BJbmRleCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICBjYXNlIFF1YW50aWZpZXJOb25HcmVlZHk6Ci0gICAgICAgICAgICAgICAgZ2VuZXJhdGVD
aGFyYWN0ZXJDbGFzc05vbkdyZWVkeShzdGF0ZSk7CisgICAgICAgICAgICAgICAgYmFja3RyYWNr
Q2hhcmFjdGVyQ2xhc3NOb25HcmVlZHkob3BJbmRleCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICBjYXNlIFBhdHRl
cm5UZXJtOjpUeXBlQmFja1JlZmVyZW5jZToKLSAgICAgICAgICAgIG1fc2hvdWxkRmFsbEJhY2sg
PSB0cnVlOworICAgICAgICBjYXNlIFBhdHRlcm5UZXJtOjpUeXBlQXNzZXJ0aW9uQk9MOgorICAg
ICAgICAgICAgYmFja3RyYWNrQXNzZXJ0aW9uQk9MKG9wSW5kZXgpOwogICAgICAgICAgICAgYnJl
YWs7CiAKLSAgICAgICAgY2FzZSBQYXR0ZXJuVGVybTo6VHlwZUZvcndhcmRSZWZlcmVuY2U6Cisg
ICAgICAgIGNhc2UgUGF0dGVyblRlcm06OlR5cGVBc3NlcnRpb25FT0w6CisgICAgICAgICAgICBi
YWNrdHJhY2tBc3NlcnRpb25FT0wob3BJbmRleCk7CiAgICAgICAgICAgICBicmVhazsKIAotICAg
ICAgICBjYXNlIFBhdHRlcm5UZXJtOjpUeXBlUGFyZW50aGVzZXNTdWJwYXR0ZXJuOgotICAgICAg
ICAgICAgaWYgKHRlcm0ucXVhbnRpdHlDb3VudCA9PSAxICYmICF0ZXJtLnBhcmVudGhlc2VzLmlz
Q29weSkKLSAgICAgICAgICAgICAgICBnZW5lcmF0ZVBhcmVudGhlc2VzU2luZ2xlKHN0YXRlKTsK
LSAgICAgICAgICAgIGVsc2UgaWYgKHRlcm0ucGFyZW50aGVzZXMuaXNUZXJtaW5hbCkKLSAgICAg
ICAgICAgICAgICBnZW5lcmF0ZVBhcmVudGhlc2VzR3JlZWR5Tm9CYWNrdHJhY2soc3RhdGUpOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1fc2hvdWxkRmFsbEJhY2sgPSB0cnVl
OworICAgICAgICBjYXNlIFBhdHRlcm5UZXJtOjpUeXBlQXNzZXJ0aW9uV29yZEJvdW5kYXJ5Ogor
ICAgICAgICAgICAgYmFja3RyYWNrQXNzZXJ0aW9uV29yZEJvdW5kYXJ5KG9wSW5kZXgpOworICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBQYXR0ZXJuVGVybTo6VHlwZUZvcndhcmRS
ZWZlcmVuY2U6CiAgICAgICAgICAgICBicmVhazsKIAorICAgICAgICBjYXNlIFBhdHRlcm5UZXJt
OjpUeXBlUGFyZW50aGVzZXNTdWJwYXR0ZXJuOgogICAgICAgICBjYXNlIFBhdHRlcm5UZXJtOjpU
eXBlUGFyZW50aGV0aWNhbEFzc2VydGlvbjoKLSAgICAgICAgICAgIGdlbmVyYXRlUGFyZW50aGV0
aWNhbEFzc2VydGlvbihzdGF0ZSk7CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgY2FzZSBQYXR0ZXJuVGVybTo6VHlwZUJhY2tSZWZlcmVuY2U6CisgICAgICAgICAg
ICBtX3Nob3VsZEZhbGxCYWNrID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgfQogCi0gICAgdm9pZCBnZW5lcmF0ZURpc2p1bmN0aW9uKFBhdHRlcm5EaXNqdW5jdGlv
biogZGlzanVuY3Rpb24pCisgICAgdm9pZCBnZW5lcmF0ZSgpCiAgICAgewotICAgICAgICBUZXJt
R2VuZXJhdGlvblN0YXRlIHN0YXRlKGRpc2p1bmN0aW9uLCAwKTsKLSAgICAgICAgc3RhdGUucmVz
ZXRBbHRlcm5hdGl2ZSgpOworICAgICAgICAvLyBGb3J3YXJkcyBnZW5lcmF0ZSB0aGUgbWF0Y2hp
bmcgY29kZS4KKyAgICAgICAgQVNTRVJUKG1fb3BzLnNpemUoKSk7CisgICAgICAgIHNpemVfdCBv
cEluZGV4ID0gMDsKKworICAgICAgICBkbyB7CisgICAgICAgICAgICBZYXJyT3AmIG9wID0gbV9v
cHNbb3BJbmRleF07CisgICAgICAgICAgICBzd2l0Y2ggKG9wLm1fb3ApIHsKIAotICAgICAgICAv
LyBjaGVjayBhdmFpbGFiaWxpdHkgZm9yIHRoZSBuZXh0IGFsdGVybmF0aXZlCi0gICAgICAgIGlu
dCBjb3VudENoZWNrZWRGb3JDdXJyZW50QWx0ZXJuYXRpdmUgPSAwOwotICAgICAgICBpbnQgY291
bnRUb0NoZWNrRm9yRmlyc3RBbHRlcm5hdGl2ZSA9IDA7Ci0gICAgICAgIGJvb2wgaGFzU2hvcnRl
ckFsdGVybmF0aXZlcyA9IGZhbHNlOwotICAgICAgICBib29sIHNldFJlcGVhdEFsdGVybmF0aXZl
TGFiZWxzID0gZmFsc2U7Ci0gICAgICAgIEp1bXBMaXN0IG5vdEVub3VnaElucHV0Rm9yUHJldmlv
dXNBbHRlcm5hdGl2ZTsKLSAgICAgICAgTGFiZWwgZmlyc3RBbHRlcm5hdGl2ZTsKLSAgICAgICAg
TGFiZWwgZmlyc3RBbHRlcm5hdGl2ZUlucHV0Q2hlY2tlZDsKKyAgICAgICAgICAgIGNhc2UgT3BU
ZXJtOgorICAgICAgICAgICAgICAgIGdlbmVyYXRlVGVybShvcEluZGV4KTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKIAotICAgICAgICAvLyBUaGUgbGFiZWwgJ2ZpcnN0QWx0ZXJuYXRpdmUnIGlz
IHVzZWQgdG8gcGxhbnQgYSBjaGVjayB0byBzZWUgaWYgdGhlcmUgaXMgCi0gICAgICAgIC8vIHN1
ZmZpY2llbnQgaW5wdXQgYXZhaWxhYmxlIHRvIHJ1biB0aGUgZmlyc3QgcmVwZWF0aW5nIGFsdGVy
bmF0aXZlLgotICAgICAgICAvLyBUaGUgbGFiZWwgJ2ZpcnN0QWx0ZXJuYXRpdmVJbnB1dENoZWNr
ZWQnIHdpbGwganVtcCBkaXJlY3RseSB0byBtYXRjaGluZyAKLSAgICAgICAgLy8gdGhlIGZpcnN0
IHJlcGVhdGluZyBhbHRlcm5hdGl2ZSBoYXZpbmcgc2tpcHBlZCB0aGlzIGNoZWNrLgorICAgICAg
ICAgICAgLy8gT3BCb2R5QWx0ZXJuYXRpdmVCZWdpbi9OZXh0L0VuZAorICAgICAgICAgICAgLy8K
KyAgICAgICAgICAgIC8vIFRoZXNlIG5vZGVzIHdyYXAgdGhlIHNldCBvZiBhbHRlcm5hdGl2ZXMg
aW4gdGhlIGJvZHkgb2YgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbi4KKyAgICAgICAgICAgIC8vIFRo
ZXJlIG1heSBiZSBlaXRoZXIgb25lIG9yIHR3byBjaGFpbnMgb2YgT3BCb2R5QWx0ZXJuYXRpdmUg
bm9kZXMsIG9uZSByZXByZXNlbnRpbmcKKyAgICAgICAgICAgIC8vIHRoZSAnb25jZSB0aHJvdWdo
JyBzZXF1ZW5jZSBvZiBhbHRlcm5hdGl2ZXMgKGlmIGFueSBleGlzdCksIGFuZCBvbmUgcmVwcmVz
ZW50aW5nCisgICAgICAgICAgICAvLyB0aGUgcmVwZWF0aW5nIGFsdGVybmF0aXZlcyAoYWdhaW4s
IGlmIGFueSBleGlzdCkuCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gVXBvbiBub3Jt
YWwgZW50cnkgdG8gdGhlIEJlZ2luIGFsdGVybmF0aXZlLCB3ZSB3aWxsIGNoZWNrIHRoYXQgaW5w
dXQgaXMgYXZhaWxhYmxlLgorICAgICAgICAgICAgLy8gUmVlbnRyeSB0byB0aGUgQmVnaW4gYWx0
ZXJuYXRpdmUgd2lsbCB0YWtlIHBsYWNlIGFmdGVyIHRoZSBjaGVjayBoYXMgdGFrZW4gcGxhY2Us
CisgICAgICAgICAgICAvLyBhbmQgd2lsbCBhc3N1bWUgdGhhdCB0aGUgaW5wdXQgcG9zaXRpb24g
aGFzIGFscmVhZHkgYmVlbiBwcm9ncmVzc2VkIGFzIGFwcHJvcHJpYXRlLgorICAgICAgICAgICAg
Ly8KKyAgICAgICAgICAgIC8vIEVudHJ5IHRvIHN1YnNlcXVlbnQgTmV4dC9FbmQgYWx0ZXJuYXRp
dmVzIG9jY3VycyB3aGVuIHRoZSBwcmlvciBhbHRlcm5hdGl2ZSBoYXMKKyAgICAgICAgICAgIC8v
IHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQgYSBtYXRjaCAtIHJldHVybiBhIHN1Y2Nlc3Mgc3RhdGUg
ZnJvbSBKSVQgY29kZS4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBOZXh0IGFsdGVy
bmF0aXZlcyBhbGxvdyBmb3IgcmVlbnRyeSBvcHRpbWl6ZWQgdG8gc3VpdCBiYWNrdHJhY2tpbmcg
ZnJvbSBpdHMKKyAgICAgICAgICAgIC8vIHByZWNlZGluZyBhbHRlcm5hdGl2ZS4gSXQgZXhwZWN0
cyB0aGUgaW5wdXQgcG9zaXRpb24gdG8gc3RpbGwgYmUgc2V0IHRvIGEgcG9zaXRpb24KKyAgICAg
ICAgICAgIC8vIGFwcHJvcHJpYXRlIHRvIGl0cyBwcmVkZWNlc3NvciwgYW5kIGl0IHdpbGwgb25s
eSBwZXJmb3JtIGFuIGlucHV0IGNoZWNrIGlmIHRoZQorICAgICAgICAgICAgLy8gcHJlZGVjZXNz
b3IgaGFkIGEgbWluaW11bSBzaXplIGxlc3MgdGhhbiBpdHMgb3duLgorICAgICAgICAgICAgLy8K
KyAgICAgICAgICAgIC8vIEluIHRoZSBjYXNlICdvbmNlIHRocm91Z2gnIGV4cHJlc3Npb25zLCB0
aGUgRW5kIG5vZGUgd2lsbCBsYXNvIGhhdmUgYSByZWVudHJ5CisgICAgICAgICAgICAvLyBwb2lu
dCB0byBqdW1wIHRvIHdoZW4gdGhlIGxhc3QgYWx0ZXJuYXRpdmUgZmFpbHMuIEFnYWluLCB0aGlz
IGV4cGVjdHMgdGhlIGlucHV0CisgICAgICAgICAgICAvLyBwb3NpdGlvbiB0byBzdGlsbCByZWZs
ZWN0IHRoYXQgZXhwZWN0ZWQgYnkgdGhlIHByaW9yIGFsdGVybmF0aXZlLgorICAgICAgICAgICAg
Y2FzZSBPcEJvZHlBbHRlcm5hdGl2ZUJlZ2luOiB7CisgICAgICAgICAgICAgICAgUGF0dGVybkFs
dGVybmF0aXZlKiBhbHRlcm5hdGl2ZSA9IG9wLm1fYWx0ZXJuYXRpdmU7CisKKyAgICAgICAgICAg
ICAgICAvLyBVcG9uIGVudHJ5IGF0IHRoZSBoZWFkIG9mIHRoZSBzZXQgb2YgYWx0ZXJuYXRpdmVz
LCBjaGVjayBpZiBpbnB1dCBpcyBhdmFpbGFibGUKKyAgICAgICAgICAgICAgICAvLyB0byBydW4g
dGhlIGZpcnN0IGFsdGVybmF0aXZlLiAoVGhpcyBwcm9ncmVzc2VzIHRoZSBpbnB1dCBwb3NpdGlv
bikuCisgICAgICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQoanVtcElmTm9BdmFpbGFibGVJ
bnB1dChhbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSkpOworICAgICAgICAgICAgICAgIC8vIFdl
IHdpbGwgcmVlbnRlciBhZnRlciB0aGUgY2hlY2ssIGFuZCBhc3N1bWUgdGhlIGlucHV0IHBvc2l0
aW9uIHRvIGhhdmUgYmVlbgorICAgICAgICAgICAgICAgIC8vIHNldCBhcyBhcHByb3ByaWF0ZSB0
byB0aGlzIGFsdGVybmF0aXZlLgorICAgICAgICAgICAgICAgIG9wLm1fcmVlbnRyeSA9IGxhYmVs
KCk7CiAKLSAgICAgICAgaWYgKHN0YXRlLmFsdGVybmF0aXZlVmFsaWQoKSkgewotICAgICAgICAg
ICAgUGF0dGVybkFsdGVybmF0aXZlKiBhbHRlcm5hdGl2ZSA9IHN0YXRlLmFsdGVybmF0aXZlKCk7
Ci0gICAgICAgICAgICBpZiAoIWFsdGVybmF0aXZlLT5vbmNlVGhyb3VnaCgpKSB7Ci0gICAgICAg
ICAgICAgICAgZmlyc3RBbHRlcm5hdGl2ZSA9IExhYmVsKHRoaXMpOwotICAgICAgICAgICAgICAg
IHNldFJlcGVhdEFsdGVybmF0aXZlTGFiZWxzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAvLyBN
YW5hZ2UgbV9jaGVja2VkLgorICAgICAgICAgICAgICAgIG1fY2hlY2tlZCArPSBhbHRlcm5hdGl2
ZS0+bV9taW5pbXVtU2l6ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGNvdW50VG9DaGVja0ZvckZpcnN0QWx0ZXJuYXRpdmUgPSBhbHRlcm5hdGl2
ZS0+bV9taW5pbXVtU2l6ZTsKLSAgICAgICAgICAgIHN0YXRlLmNoZWNrZWRUb3RhbCArPSBjb3Vu
dFRvQ2hlY2tGb3JGaXJzdEFsdGVybmF0aXZlOwotICAgICAgICAgICAgaWYgKGNvdW50VG9DaGVj
a0ZvckZpcnN0QWx0ZXJuYXRpdmUpCi0gICAgICAgICAgICAgICAgbm90RW5vdWdoSW5wdXRGb3JQ
cmV2aW91c0FsdGVybmF0aXZlLmFwcGVuZChqdW1wSWZOb0F2YWlsYWJsZUlucHV0KGNvdW50VG9D
aGVja0ZvckZpcnN0QWx0ZXJuYXRpdmUpKTsKLSAgICAgICAgICAgIGNvdW50Q2hlY2tlZEZvckN1
cnJlbnRBbHRlcm5hdGl2ZSA9IGNvdW50VG9DaGVja0ZvckZpcnN0QWx0ZXJuYXRpdmU7Ci0gICAg
ICAgIH0KKyAgICAgICAgICAgIGNhc2UgT3BCb2R5QWx0ZXJuYXRpdmVOZXh0OgorICAgICAgICAg
ICAgY2FzZSBPcEJvZHlBbHRlcm5hdGl2ZUVuZDogeworICAgICAgICAgICAgICAgIFBhdHRlcm5B
bHRlcm5hdGl2ZSogcHJpb3JBbHRlcm5hdGl2ZSA9IG1fb3BzW29wLm1fcHJldmlvdXNPcF0ubV9h
bHRlcm5hdGl2ZTsKKyAgICAgICAgICAgICAgICBQYXR0ZXJuQWx0ZXJuYXRpdmUqIGFsdGVybmF0
aXZlID0gb3AubV9hbHRlcm5hdGl2ZTsKKworICAgICAgICAgICAgICAgIC8vIElmIHdlIGdldCBo
ZXJlLCB0aGUgcHJpb3IgYWx0ZXJuYXRpdmUgbWF0Y2hlZCAtIHJldHVybiBzdWNjZXNzLgorICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIEFkanVzdCB0aGUgc3RhY2sgcG9pbnRl
ciB0byByZW1vdmUgdGhlIHBhdHRlcm4ncyBmcmFtZS4KKyAgICAgICAgICAgICAgICBpZiAobV9w
YXR0ZXJuLm1fYm9keS0+bV9jYWxsRnJhbWVTaXplKQorICAgICAgICAgICAgICAgICAgICBhZGRQ
dHIoSW1tMzIobV9wYXR0ZXJuLm1fYm9keS0+bV9jYWxsRnJhbWVTaXplICogc2l6ZW9mKHZvaWQq
KSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAgICAgICAgICAgICAgIC8vIExvYWQgYXBw
cm9wcmlhdGUgdmFsdWVzIGludG8gdGhlIHJldHVybiByZWdpc3RlciBhbmQgdGhlIGZpcnN0IG91
dHB1dAorICAgICAgICAgICAgICAgIC8vIHNsb3QsIGFuZCByZXR1cm4uIEluIHRoZSBjYXNlIG9m
IHBhdHRlcm4gd2l0aCBhIGZpeGVkIHNpemUsIHdlIHdpbGwKKyAgICAgICAgICAgICAgICAvLyBu
b3QgaGF2ZSB5ZXQgc2V0IHRoZSB2YWx1ZSBpbiB0aGUgZmlyc3QgCisgICAgICAgICAgICAgICAg
QVNTRVJUKGluZGV4ICE9IHJldHVyblJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICBpZiAobV9w
YXR0ZXJuLm1fYm9keS0+bV9oYXNGaXhlZFNpemUpIHsKKyAgICAgICAgICAgICAgICAgICAgbW92
ZShpbmRleCwgcmV0dXJuUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgICAgICBpZiAocHJpb3JB
bHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1YjMy
KEltbTMyKHByaW9yQWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUpLCByZXR1cm5SZWdpc3Rlcik7
CisgICAgICAgICAgICAgICAgICAgIHN0b3JlMzIocmV0dXJuUmVnaXN0ZXIsIG91dHB1dCk7Cisg
ICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIGxvYWQzMihBZGRyZXNz
KG91dHB1dCksIHJldHVyblJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICBzdG9yZTMyKGluZGV4
LCBBZGRyZXNzKG91dHB1dCwgNCkpOworICAgICAgICAgICAgICAgIGdlbmVyYXRlUmV0dXJuKCk7
CisKKworICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGRpdmlkZSBiZXR3ZWVuIHRoZSB0
YWlsIG9mIHRoZSBwcmlvciBhbHRlcm5hdGl2ZSwgYWJvdmUsIGFuZAorICAgICAgICAgICAgICAg
IC8vIHRoZSBoZWFkIG9mIHRoZSBzdWJzZXF1ZW50IGFsdGVybmF0aXZlLCBiZWxvdy4KKworCisg
ICAgICAgICAgICAgICAgaWYgKG9wLm1fb3AgPT0gT3BCb2R5QWx0ZXJuYXRpdmVOZXh0KSB7Cisg
ICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIHJlZW50cnkgcG9pbnQgZm9yIHRoZSBO
ZXh0IGFsdGVybmF0aXZlLiBXZSBleHBlY3QgYW55IGNvZGUKKyAgICAgICAgICAgICAgICAgICAg
Ly8gdGhhdCBqdW1wcyBoZXJlIHRvIGRvIHNvIHdpdGggdGhlIGlucHV0IHBvc2l0aW9uIG1hdGNo
aW5nIHRoYXQgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIC8vIFBSSU9SIGFsdGVyYW5hdGl2
ZSwgYW5kIHdlIHdpbGwgb25seSBjaGVjayBpbnB1dCBhdmFpbGFiaWxpdHkgaWYgd2UKKyAgICAg
ICAgICAgICAgICAgICAgLy8gbmVlZCB0byBwcm9ncmVzcyBpdCBmb3J3YXJkcy4KKyAgICAgICAg
ICAgICAgICAgICAgb3AubV9yZWVudHJ5ID0gbGFiZWwoKTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGludCBkZWx0YSA9IGFsdGVybmF0aXZlLT5tX21pbmltdW1TaXplIC0gcHJpb3JBbHRlcm5h
dGl2ZS0+bV9taW5pbXVtU2l6ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYWRkMzIoSW1t
MzIoZGVsdGEpLCBpbmRleCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVsdGEgPiAw
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGp1bXBJZk5v
QXZhaWxhYmxlSW5wdXQoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKG9wLm1fbmV4dE9wID09IG5vdEZvdW5kKSB7CisgICAgICAgICAgICAgICAg
ICAgIC8vIFRoaXMgaXMgdGhlIHJlZW50cnkgcG9pbnQgZm9yIHRoZSBFbmQgb2YgJ29uY2UgdGhy
b3VnaCcgYWx0ZXJuYXRpdmVzLAorICAgICAgICAgICAgICAgICAgICAvLyBqdW1wZWQgdG8gd2hl
biB0aGUgbGFzIGFsdGVybmF0aXZlIGZhaWxzIHRvIG1hdGNoLgorICAgICAgICAgICAgICAgICAg
ICBvcC5tX3JlZW50cnkgPSBsYWJlbCgpOworICAgICAgICAgICAgICAgICAgICBzdWIzMihJbW0z
MihwcmlvckFsdGVybmF0aXZlLT5tX21pbmltdW1TaXplKSwgaW5kZXgpOworICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgIC8vIE1hbmFnZSBtX2NoZWNrZWQuCisgICAgICAgICAg
ICAgICAgaWYgKG9wLm1fb3AgPT0gT3BCb2R5QWx0ZXJuYXRpdmVOZXh0KQorICAgICAgICAgICAg
ICAgICAgICBtX2NoZWNrZWQgKz0gYWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemU7CisgICAgICAg
ICAgICAgICAgbV9jaGVja2VkIC09IHByaW9yQWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemU7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIE9w
U2ltcGxlTmVzdGVkQWx0ZXJuYXRpdmVCZWdpbi9OZXh0L0VuZAorICAgICAgICAgICAgLy8gT3BO
ZXN0ZWRBbHRlcm5hdGl2ZUJlZ2luL05leHQvRW5kCisgICAgICAgICAgICAvLworICAgICAgICAg
ICAgLy8gVGhlc2Ugbm9kZXMgYXJlIHVzZWQgdG8gaGFuZGxlIHNldHMgb2YgYWx0ZXJuYXRpdmVz
IHRoYXQgYXJlIG5lc3RlZCB3aXRoaW4KKyAgICAgICAgICAgIC8vIHN1YnBhdHRlcm5zIGFuZCBw
YXJlbnRoZXRpY2FsIGFzc2VydGlvbnMuIFRoZSAnc2ltcGxlJyBmb3JtcyBhcmUgdXNlZCB3aGVy
ZQorICAgICAgICAgICAgLy8gd2UgZG8gbm90IG5lZWQgdG8gYmUgYWJsZSAgdG8gYmFja3RyYWNr
IGJhY2sgaW50byBhbnkgYWx0ZXJuYXRpdmUgb3RoZXIgdGhhbgorICAgICAgICAgICAgLy8gdGhl
IGxhc3QsIHRoZSBub3JtYWwgZm9ybXMgYWxsb3cgYmFja3RyYWNraW5nIGludG8gYW55IGFsdGVy
bmF0aXZlLgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIEVhY2ggQmVnaW4vTmV4dCBu
b2RlIGlzIHJlc3BvbnNpYmxlIGZvciBwbGFudGluZyBhbiBpbnB1dCBjaGVjayB0byBlbnN1cmUK
KyAgICAgICAgICAgIC8vIHN1ZmZpY2llbnQgaW5wdXQgaXMgYXZhaWxhYmxlIG9uIGVudHJ5LiBO
ZXh0IG5vZGVzIGFkZGl0aW9uYWxseSBuZWVkIHRvCisgICAgICAgICAgICAvLyBqdW1wIHRvIHRo
ZSBlbmQgLSBOZXh0IG5vZGVzIHVzZSB0aGUgRW5kIG5vZGUncyBtX2p1bXBzIGxpc3QgdG8gaG9s
ZCB0aGlzCisgICAgICAgICAgICAvLyBzZXQgb2YganVtcHMuCisgICAgICAgICAgICAvLworICAg
ICAgICAgICAgLy8gSW4gdGhlIG5vbi1zaW1wbGUgZm9ybXMsIHN1Y2Nlc3NmdWwgYWx0ZXJuYXRp
dmUgbWF0Y2hlcyBtdXN0IHN0b3JlIGEKKyAgICAgICAgICAgIC8vICdyZXR1cm4gYWRkcmVzcycg
dXNpbmcgYSBEYXRhTGFiZWxQdHIsIHVzZWQgdG8gc3RvcmUgdGhlIGFkZHJlc3MgdG8ganVtcAor
ICAgICAgICAgICAgLy8gdG8gd2hlbiBiYWNrdHJhY2tpbmcsIHRvIGdldCB0byB0aGUgY29kZSBm
b3IgdGhlIGFwcHJvcHJpYXRlIGFsdGVybmF0aXZlLgorICAgICAgICAgICAgY2FzZSBPcFNpbXBs
ZU5lc3RlZEFsdGVybmF0aXZlQmVnaW46CisgICAgICAgICAgICBjYXNlIE9wTmVzdGVkQWx0ZXJu
YXRpdmVCZWdpbjogeworICAgICAgICAgICAgICAgIFBhdHRlcm5UZXJtKiB0ZXJtID0gb3AubV90
ZXJtOworICAgICAgICAgICAgICAgIFBhdHRlcm5BbHRlcm5hdGl2ZSogYWx0ZXJuYXRpdmUgPSBv
cC5tX2FsdGVybmF0aXZlOworICAgICAgICAgICAgICAgIFBhdHRlcm5EaXNqdW5jdGlvbiogZGlz
anVuY3Rpb24gPSB0ZXJtLT5wYXJlbnRoZXNlcy5kaXNqdW5jdGlvbjsKKworICAgICAgICAgICAg
ICAgIC8vIENhbGN1bGF0ZSBob3cgbXVjaCBpbnB1dCB3ZSBuZWVkIHRvIGNoZWNrIGZvciwgYW5k
IGlmIG5vbi16ZXJvIGNoZWNrLgorICAgICAgICAgICAgICAgIG9wLm1fY2hlY2tBZGp1c3QgPSBh
bHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZTsKKyAgICAgICAgICAgICAgICBpZiAoKHRlcm0tPnF1
YW50aXR5VHlwZSA9PSBRdWFudGlmaWVyRml4ZWRDb3VudCkgJiYgKHRlcm0tPnR5cGUgIT0gUGF0
dGVyblRlcm06OlR5cGVQYXJlbnRoZXRpY2FsQXNzZXJ0aW9uKSkKKyAgICAgICAgICAgICAgICAg
ICAgb3AubV9jaGVja0FkanVzdCAtPSBkaXNqdW5jdGlvbi0+bV9taW5pbXVtU2l6ZTsKKyAgICAg
ICAgICAgICAgICBpZiAob3AubV9jaGVja0FkanVzdCkKKyAgICAgICAgICAgICAgICAgICAgb3Au
bV9qdW1wcy5hcHBlbmQoanVtcElmTm9BdmFpbGFibGVJbnB1dChvcC5tX2NoZWNrQWRqdXN0KSk7
CisgCisgICAgICAgICAgICAgICAgLy8gTWFuYWdlIG1fY2hlY2tlZC4KKyAgICAgICAgICAgICAg
ICBtX2NoZWNrZWQgKz0gb3AubV9jaGVja0FkanVzdDsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgT3BTaW1wbGVOZXN0ZWRBbHRlcm5hdGl2
ZU5leHQ6CisgICAgICAgICAgICBjYXNlIE9wTmVzdGVkQWx0ZXJuYXRpdmVOZXh0OiB7CisgICAg
ICAgICAgICAgICAgUGF0dGVyblRlcm0qIHRlcm0gPSBvcC5tX3Rlcm07CisgICAgICAgICAgICAg
ICAgUGF0dGVybkFsdGVybmF0aXZlKiBhbHRlcm5hdGl2ZSA9IG9wLm1fYWx0ZXJuYXRpdmU7Cisg
ICAgICAgICAgICAgICAgUGF0dGVybkRpc2p1bmN0aW9uKiBkaXNqdW5jdGlvbiA9IHRlcm0tPnBh
cmVudGhlc2VzLmRpc2p1bmN0aW9uOworCisgICAgICAgICAgICAgICAgLy8gSW4gdGhlIG5vbi1z
aW1wbGUgY2FzZSwgc3RvcmUgYSAncmV0dXJuIGFkZHJlc3MnIHNvIHdlIGNhbiBiYWNrdHJhY2sg
Y29ycmVjdGx5LgorICAgICAgICAgICAgICAgIGlmIChvcC5tX29wID09IE9wTmVzdGVkQWx0ZXJu
YXRpdmVOZXh0KSB7CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHBhcmVudGhlc2VzRnJh
bWVMb2NhdGlvbiA9IHRlcm0tPmZyYW1lTG9jYXRpb247CisgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGFsdGVybmF0aXZlRnJhbWVMb2NhdGlvbiA9IHBhcmVudGhlc2VzRnJhbWVMb2NhdGlv
bjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRlcm0tPnF1YW50aXR5VHlwZSAhPSBRdWFudGlm
aWVyRml4ZWRDb3VudCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGFsdGVybmF0aXZlRnJhbWVM
b2NhdGlvbiArPSBZYXJyU3RhY2tTcGFjZUZvckJhY2tUcmFja0luZm9QYXJlbnRoZXNlc09uY2U7
CisgICAgICAgICAgICAgICAgICAgIG9wLm1fcmV0dXJuQWRkcmVzcyA9IHN0b3JlVG9GcmFtZVdp
dGhQYXRjaChhbHRlcm5hdGl2ZUZyYW1lTG9jYXRpb24pOworICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIC8vIElmIHdlIHJlYWNoIGhlcmUgdGhlbiB0aGUgbGFzdCBhbHRlcm5h
dGl2ZSBoYXMgbWF0Y2hlZCAtIGp1bXAgdG8gdGhlCisgICAgICAgICAgICAgICAgLy8gRW5kIG5v
ZGUsIHRvIHNraXAgb3ZlciBhbnkgZnVydGhlciBhbHRlcm5hdGl2ZXMuCisgICAgICAgICAgICAg
ICAgLy8KKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogdGhpcyBpcyBsb2dpY2FsbHkgTyhOXjIp
ICh0aG91Z2ggTiBjYW4gYmUgZXhwZWN0ZWQgdG8gYmUgdmVyeQorICAgICAgICAgICAgICAgIC8v
IHNtYWxsKS4gV2UgY291bGQgYXZvaWQgdGhpcyBlaXRoZXIgYnkgYWRkaW5nIGFuIGV4dHJhIGp1
bXAgdG8gdGhlIEpJVAorICAgICAgICAgICAgICAgIC8vIGRhdGEgc3RydWN0dXJlcywgb3IgYnkg
bWFraW5nIGJhY2t0cmFja2luZyBjb2RlIHRoYXQganVtcHMgdG8gTmV4dAorICAgICAgICAgICAg
ICAgIC8vIGFsdGVybmF0aXZlcyBidmUgcmVzcG9uc2libGUgZm9yIGNoZWNraW5nIHRoYXQgaW5w
dXQgaXMgYXZhaWxhYmxlIChpZgorICAgICAgICAgICAgICAgIC8vIHdlIGRpZG4ndCBuZWVkIHRv
IHBsYW50IHRoZSBpbnB1dCBjaGVja3MsIHRoZW4gbV9qdW1wcyB3b3VsZCBiZSBmcmVlKS4KKyAg
ICAgICAgICAgICAgICBZYXJyT3AqIGVuZE9wID0gJm1fb3BzW29wLm1fbmV4dE9wXTsKKyAgICAg
ICAgICAgICAgICB3aGlsZSAoZW5kT3AtPm1fbmV4dE9wICE9IG5vdEZvdW5kKSB7CisgICAgICAg
ICAgICAgICAgICAgIEFTU0VSVChlbmRPcC0+bV9vcCA9PSBPcFNpbXBsZU5lc3RlZEFsdGVybmF0
aXZlTmV4dCB8fCBlbmRPcC0+bV9vcCA9PSBPcE5lc3RlZEFsdGVybmF0aXZlTmV4dCk7CisgICAg
ICAgICAgICAgICAgICAgIGVuZE9wID0gJm1fb3BzW2VuZE9wLT5tX25leHRPcF07CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIEFTU0VSVChlbmRPcC0+bV9vcCA9PSBPcFNpbXBs
ZU5lc3RlZEFsdGVybmF0aXZlRW5kIHx8IGVuZE9wLT5tX29wID09IE9wTmVzdGVkQWx0ZXJuYXRp
dmVFbmQpOworICAgICAgICAgICAgICAgIGVuZE9wLT5tX2p1bXBzLmFwcGVuZChqdW1wKCkpOwor
CisgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIHRoZSBuZXh0
IGFsdGVybmF0aXZlLgorICAgICAgICAgICAgICAgIG9wLm1fcmVlbnRyeSA9IGxhYmVsKCk7CisK
KyAgICAgICAgICAgICAgICAvLyBDYWxjdWxhdGUgaG93IG11Y2ggaW5wdXQgd2UgbmVlZCB0byBj
aGVjayBmb3IsIGFuZCBpZiBub24temVybyBjaGVjay4KKyAgICAgICAgICAgICAgICBvcC5tX2No
ZWNrQWRqdXN0ID0gYWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemU7CisgICAgICAgICAgICAgICAg
aWYgKCh0ZXJtLT5xdWFudGl0eVR5cGUgPT0gUXVhbnRpZmllckZpeGVkQ291bnQpICYmICh0ZXJt
LT50eXBlICE9IFBhdHRlcm5UZXJtOjpUeXBlUGFyZW50aGV0aWNhbEFzc2VydGlvbikpCisgICAg
ICAgICAgICAgICAgICAgIG9wLm1fY2hlY2tBZGp1c3QgLT0gZGlzanVuY3Rpb24tPm1fbWluaW11
bVNpemU7CisgICAgICAgICAgICAgICAgaWYgKG9wLm1fY2hlY2tBZGp1c3QpCisgICAgICAgICAg
ICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGp1bXBJZk5vQXZhaWxhYmxlSW5wdXQob3AubV9j
aGVja0FkanVzdCkpOworCisgICAgICAgICAgICAgICAgLy8gTWFuYWdlIG1fY2hlY2tlZC4KKyAg
ICAgICAgICAgICAgICBZYXJyT3AmIGxhc3RPcCA9IG1fb3BzW29wLm1fcHJldmlvdXNPcF07Cisg
ICAgICAgICAgICAgICAgbV9jaGVja2VkIC09IGxhc3RPcC5tX2NoZWNrQWRqdXN0OworICAgICAg
ICAgICAgICAgIG1fY2hlY2tlZCArPSBvcC5tX2NoZWNrQWRqdXN0OworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBPcFNpbXBsZU5lc3RlZEFs
dGVybmF0aXZlRW5kOgorICAgICAgICAgICAgY2FzZSBPcE5lc3RlZEFsdGVybmF0aXZlRW5kOiB7
CisgICAgICAgICAgICAgICAgUGF0dGVyblRlcm0qIHRlcm0gPSBvcC5tX3Rlcm07CisKKyAgICAg
ICAgICAgICAgICAvLyBJbiB0aGUgbm9uLXNpbXBsZSBjYXNlLCBzdG9yZSBhICdyZXR1cm4gYWRk
cmVzcycgc28gd2UgY2FuIGJhY2t0cmFjayBjb3JyZWN0bHkuCisgICAgICAgICAgICAgICAgaWYg
KG9wLm1fb3AgPT0gT3BOZXN0ZWRBbHRlcm5hdGl2ZUVuZCkgeworICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gPSB0ZXJtLT5mcmFtZUxvY2F0aW9u
OworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBhbHRlcm5hdGl2ZUZyYW1lTG9jYXRpb24g
PSBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb247CisgICAgICAgICAgICAgICAgICAgIGlmICh0ZXJt
LT5xdWFudGl0eVR5cGUgIT0gUXVhbnRpZmllckZpeGVkQ291bnQpCisgICAgICAgICAgICAgICAg
ICAgICAgICBhbHRlcm5hdGl2ZUZyYW1lTG9jYXRpb24gKz0gWWFyclN0YWNrU3BhY2VGb3JCYWNr
VHJhY2tJbmZvUGFyZW50aGVzZXNPbmNlOworICAgICAgICAgICAgICAgICAgICBvcC5tX3JldHVy
bkFkZHJlc3MgPSBzdG9yZVRvRnJhbWVXaXRoUGF0Y2goYWx0ZXJuYXRpdmVGcmFtZUxvY2F0aW9u
KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIHNldCBv
ZiBhbHRlcm5hdGl2ZXMgY29udGFpbnMgbW9yZSB0aGFuIG9uZSBhbHRlcm5hdGl2ZSwKKyAgICAg
ICAgICAgICAgICAvLyB0aGVuIHRoZSBOZXh0IG5vZGVzIHdpbGwgaGF2ZSBwbGFudGVkIGp1bXBz
IHRvIHRoZSBFbmQsIGFuZCBhZGRlZAorICAgICAgICAgICAgICAgIC8vIHRoZW0gdG8gdGhpcyBu
b2RlJ3MgbV9qdW1wcyBsaXN0LgorICAgICAgICAgICAgICAgIG9wLm1fanVtcHMubGluayh0aGlz
KTsKKyAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmNsZWFyKCk7CisKKyAgICAgICAgICAgICAg
ICAvLyBNYW5hZ2UgbV9jaGVja2VkLgorICAgICAgICAgICAgICAgIFlhcnJPcCYgbGFzdE9wID0g
bV9vcHNbb3AubV9wcmV2aW91c09wXTsKKyAgICAgICAgICAgICAgICBtX2NoZWNrZWQgLT0gbGFz
dE9wLm1fY2hlY2tBZGp1c3Q7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIC8vIE9wUGFyZW50aGVzZXNTdWJwYXR0ZXJuT25jZUJlZ2luL0VuZAor
ICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIFRoZXNlIG5vZGVzIHN1cHBvcnQgKG9wdGlv
bmFsbHkpIGNhcHR1cmluZyBzdWJwYXR0ZXJucywgdGhhdCBoYXZlIGEKKyAgICAgICAgICAgIC8v
IHF1YW50aXR5IGNvdW50IG9mIDEgKHRoaXMgY292ZXJzIGZpeGVkIG9uY2UsIGFuZCA/Lz8/IHF1
YW50aWZpZXJzKS4gCisgICAgICAgICAgICBjYXNlIE9wUGFyZW50aGVzZXNTdWJwYXR0ZXJuT25j
ZUJlZ2luOiB7CisgICAgICAgICAgICAgICAgUGF0dGVyblRlcm0qIHRlcm0gPSBvcC5tX3Rlcm07
CisgICAgICAgICAgICAgICAgdW5zaWduZWQgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uID0gdGVy
bS0+ZnJhbWVMb2NhdGlvbjsKKyAgICAgICAgICAgICAgICBjb25zdCBSZWdpc3RlcklEIGluZGV4
VGVtcG9yYXJ5ID0gcmVnVDA7CisgICAgICAgICAgICAgICAgQVNTRVJUKHRlcm0tPnF1YW50aXR5
Q291bnQgPT0gMSk7CisKKyAgICAgICAgICAgICAgICAvLyBVcG9uIGVudHJ5IHRvIGEgR3JlZWR5
IHF1YW50aWZpZWQgc2V0IG9mIHBhcmVudGhlc2Ugc3RvcmUgdGhlIGluZGV4LgorICAgICAgICAg
ICAgICAgIC8vIFdlJ2xsIHVzZSB0aGlzIGZvciB0d28gcHVycG9zZXM6CisgICAgICAgICAgICAg
ICAgLy8gIC0gVG8gaW5kaWNhdGUgd2hpY2ggaXRlcmF0aW9uIHdlIGFyZSBvbiBvZiBtYXRoaW5n
IHRoZSByZW1haW5kZXIgb2YKKyAgICAgICAgICAgICAgICAvLyAgICB0aGUgZXhwcmVzc2lvbiBh
ZnRlciB0aGUgcGFyZW50aGVzZXMgLSB0aGUgZmlyc3QsIGluY2x1ZGluZyB0aGUKKyAgICAgICAg
ICAgICAgICAvLyAgICBtYXRjaCB3aXRoaW4gdGhlIHBhcmVudGhlc2VzLCBvciB0aGUgc2Vjb25k
IGhhdmluZyBza2lwcGVkIG92ZXIgdGhlbS4KKyAgICAgICAgICAgICAgICAvLyAgLSBUbyBjaGVj
ayBmb3IgZW1wdHkgbWF0Y2hlcywgd2hpY2ggbXVzdCBiZSByZWplY3RlZC4KKyAgICAgICAgICAg
ICAgICAvLworICAgICAgICAgICAgICAgIC8vIEF0IHRoZSBoZWFkIG9mIGEgTm9uR3JlZWR5IHNl
dCBvZiBwYXJlbnRoZXNlcyB3ZSdsbCBpbW1lZGlhdGVseSBzZXQgdGhlCisgICAgICAgICAgICAg
ICAgLy8gdmFsdWUgb24gdGhlIHN0YWNrIHRvIC0xIChpbmRpY2F0aW5nIGEgbWF0Y2ggc2tpcHBp
bmcgdGhlIHN1YnBhdHRlcm4pLAorICAgICAgICAgICAgICAgIC8vIGFuZCBwbGFudCBhIGp1bXAg
dG8gdGhlIGVuZC4gV2UnbGwgYWxzbyBwbGFudCBhIGxhYmVsIHRvIGJhY2t0cmFjayB0bworICAg
ICAgICAgICAgICAgIC8vIHRvIHJlZW50ZXIgdGhlIHN1YnBhdHRlcm4gbGF0ZXIsIHdpdGggYSBz
dG9yZSB0byBzZXQgdXAgaW5kZXggb24gdGhlCisgICAgICAgICAgICAgICAgLy8gc2Vjb25kIGl0
ZXJhdGlvbi4KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBm
b3IgY2FwdHVyaW5nIHBhcmVucywgY291bGQgdXNlIHRoZSBpbmRleCBpbiB0aGUgY2FwdHVyZSBh
cnJheT8KKyAgICAgICAgICAgICAgICBpZiAodGVybS0+cXVhbnRpdHlUeXBlID09IFF1YW50aWZp
ZXJHcmVlZHkpCisgICAgICAgICAgICAgICAgICAgIHN0b3JlVG9GcmFtZShpbmRleCwgcGFyZW50
aGVzZXNGcmFtZUxvY2F0aW9uKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmICh0ZXJtLT5xdWFu
dGl0eVR5cGUgPT0gUXVhbnRpZmllck5vbkdyZWVkeSkgeworICAgICAgICAgICAgICAgICAgICBz
dG9yZVRvRnJhbWUoVHJ1c3RlZEltbTMyKC0xKSwgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uKTsK
KyAgICAgICAgICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgb3AubV9yZWVudHJ5ID0gbGFiZWwoKTsKKyAgICAgICAgICAgICAgICAgICAg
c3RvcmVUb0ZyYW1lKGluZGV4LCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24pOworICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIElmIHRoZSBwYXJlbnRoZXNlIGFyZSBjYXB0
dXJpbmcsIHN0b3JlIHRoZSBzdGFydGluZyBpbmRleCB2YWx1ZSB0byB0aGUKKyAgICAgICAgICAg
ICAgICAvLyBjYXB0dXJlcyBhcnJheSwgb2Zmc2V0dGluZyBhcyBuZWNlc3NhcnkuCisgICAgICAg
ICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogY291bGQgYXZvaWQgb2Zmc2V0
dGluZyB0aGlzIHZhbHVlIGluIEpJVCBjb2RlLCBhcHBseQorICAgICAgICAgICAgICAgIC8vIG9m
ZnNldHMgb25seSBhZnRlcndhcmRzLCBhdCB0aGUgcG9pbnQgdGhlIHJlc3VsdHMgYXJyYXkgaXMK
KyAgICAgICAgICAgICAgICAvLyBiZWluZyBhY2Nlc3NlZC4KKyAgICAgICAgICAgICAgICBpZiAo
dGVybS0+Y2FwdHVyZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGludCBvZmZzZXRJZCA9IHRl
cm0tPnBhcmVudGhlc2VzLnN1YnBhdHRlcm5JZCA8PCAxOworICAgICAgICAgICAgICAgICAgICBp
bnQgaW5wdXRPZmZzZXQgPSB0ZXJtLT5pbnB1dFBvc2l0aW9uIC0gbV9jaGVja2VkOworICAgICAg
ICAgICAgICAgICAgICBpZiAodGVybS0+cXVhbnRpdHlUeXBlID09IFF1YW50aWZpZXJGaXhlZENv
dW50KQorICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRPZmZzZXQgLT0gdGVybS0+cGFyZW50
aGVzZXMuZGlzanVuY3Rpb24tPm1fbWluaW11bVNpemU7CisgICAgICAgICAgICAgICAgICAgIGlm
IChpbnB1dE9mZnNldCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbW92ZShpbmRleCwgaW5k
ZXhUZW1wb3JhcnkpOworICAgICAgICAgICAgICAgICAgICAgICAgYWRkMzIoSW1tMzIoaW5wdXRP
ZmZzZXQpLCBpbmRleFRlbXBvcmFyeSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdG9yZTMy
KGluZGV4VGVtcG9yYXJ5LCBBZGRyZXNzKG91dHB1dCwgb2Zmc2V0SWQgKiBzaXplb2YoaW50KSkp
OworICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0
b3JlMzIoaW5kZXgsIEFkZHJlc3Mob3V0cHV0LCBvZmZzZXRJZCAqIHNpemVvZihpbnQpKSk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgY2FzZSBPcFBhcmVudGhlc2VzU3VicGF0dGVybk9uY2VFbmQ6IHsKKyAgICAg
ICAgICAgICAgICBQYXR0ZXJuVGVybSogdGVybSA9IG9wLm1fdGVybTsKKyAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gPSB0ZXJtLT5mcmFtZUxvY2F0aW9u
OworICAgICAgICAgICAgICAgIGNvbnN0IFJlZ2lzdGVySUQgaW5kZXhUZW1wb3JhcnkgPSByZWdU
MDsKKyAgICAgICAgICAgICAgICBBU1NFUlQodGVybS0+cXVhbnRpdHlDb3VudCA9PSAxKTsKKwor
ICAgICAgICAgICAgICAgIC8vIEZvciBHcmVlZHkvTm9uR3JlZWR5IHF1YW50aWZpZWQgcGFyZW50
aGVzZXMsIHdlIG11c3QgcmVqZWN0IHplcm8gbGVuZ3RoCisgICAgICAgICAgICAgICAgLy8gbWF0
Y2hlcy4gSWYgdGhlIG1pbmltdW0gc2l6ZSBpcyBrbm93IHRvIGJlIG5vbi16ZXJvIHdlIG5lZWQg
bm90IGNoZWNrLgorICAgICAgICAgICAgICAgIGlmICh0ZXJtLT5xdWFudGl0eVR5cGUgIT0gUXVh
bnRpZmllckZpeGVkQ291bnQgJiYgIXRlcm0tPnBhcmVudGhlc2VzLmRpc2p1bmN0aW9uLT5tX21p
bmltdW1TaXplKQorICAgICAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChicmFuY2gz
MihFcXVhbCwgaW5kZXgsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHBhcmVudGhlc2Vz
RnJhbWVMb2NhdGlvbiAqIHNpemVvZih2b2lkKikpKSk7CisKKyAgICAgICAgICAgICAgICAvLyBJ
ZiB0aGUgcGFyZW50aGVzZSBhcmUgY2FwdHVyaW5nLCBzdG9yZSB0aGUgZW5kaW5nIGluZGV4IHZh
bHVlIHRvIHRoZQorICAgICAgICAgICAgICAgIC8vIGNhcHR1cmVzIGFycmF5LCBvZmZzZXR0aW5n
IGFzIG5lY2Vzc2FyeS4KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIEZJ
WE1FOiBjb3VsZCBhdm9pZCBvZmZzZXR0aW5nIHRoaXMgdmFsdWUgaW4gSklUIGNvZGUsIGFwcGx5
CisgICAgICAgICAgICAgICAgLy8gb2Zmc2V0cyBvbmx5IGFmdGVyd2FyZHMsIGF0IHRoZSBwb2lu
dCB0aGUgcmVzdWx0cyBhcnJheSBpcworICAgICAgICAgICAgICAgIC8vIGJlaW5nIGFjY2Vzc2Vk
LgorICAgICAgICAgICAgICAgIGlmICh0ZXJtLT5jYXB0dXJlKCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaW50IG9mZnNldElkID0gKHRlcm0tPnBhcmVudGhlc2VzLnN1YnBhdHRlcm5JZCA8PCAx
KSArIDE7CisgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dE9mZnNldCA9IHRlcm0tPmlucHV0
UG9zaXRpb24gLSBtX2NoZWNrZWQ7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dE9mZnNl
dCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbW92ZShpbmRleCwgaW5kZXhUZW1wb3Jhcnkp
OworICAgICAgICAgICAgICAgICAgICAgICAgYWRkMzIoSW1tMzIoaW5wdXRPZmZzZXQpLCBpbmRl
eFRlbXBvcmFyeSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdG9yZTMyKGluZGV4VGVtcG9y
YXJ5LCBBZGRyZXNzKG91dHB1dCwgb2Zmc2V0SWQgKiBzaXplb2YoaW50KSkpOworICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlMzIoaW5kZXgs
IEFkZHJlc3Mob3V0cHV0LCBvZmZzZXRJZCAqIHNpemVvZihpbnQpKSk7CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHBhcmVudGhlc2VzIGFyZSBxdWFudGlm
aWVkIEdyZWVkeSB0aGVuIGFkZCBhIGxhYmVsIHRvIGp1bXAgYmFjaworICAgICAgICAgICAgICAg
IC8vIHRvIGlmIGdldCBhIGZhaWxlZCBtYXRjaCBmcm9tIGFmdGVyIHRoZSBwYXJlbnRoZXNlcy4g
Rm9yIE5vbkdyZWVkeQorICAgICAgICAgICAgICAgIC8vIHBhcmVudGhlc2VzLCBsaW5rIHRoZSBq
dW1wIGZyb20gYmVmb3JlIHRoZSBzdWJwYXR0ZXJuIHRvIGhlcmUuCisgICAgICAgICAgICAgICAg
aWYgKHRlcm0tPnF1YW50aXR5VHlwZSA9PSBRdWFudGlmaWVyR3JlZWR5KQorICAgICAgICAgICAg
ICAgICAgICBvcC5tX3JlZW50cnkgPSBsYWJlbCgpOworICAgICAgICAgICAgICAgIGVsc2UgaWYg
KHRlcm0tPnF1YW50aXR5VHlwZSA9PSBRdWFudGlmaWVyTm9uR3JlZWR5KSB7CisgICAgICAgICAg
ICAgICAgICAgIFlhcnJPcCYgYmVnaW5PcCA9IG1fb3BzW29wLm1fcHJldmlvdXNPcF07CisgICAg
ICAgICAgICAgICAgICAgIGJlZ2luT3AubV9qdW1wcy5saW5rKHRoaXMpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgLy8gT3BQYXJlbnRoZXNlc1N1YnBhdHRlcm5UZXJtaW5hbEJlZ2luL0VuZAorICAgICAgICAg
ICAgY2FzZSBPcFBhcmVudGhlc2VzU3VicGF0dGVyblRlcm1pbmFsQmVnaW46IHsKKyAgICAgICAg
ICAgICAgICBQYXR0ZXJuVGVybSogdGVybSA9IG9wLm1fdGVybTsKKyAgICAgICAgICAgICAgICBB
U1NFUlQodGVybS0+cXVhbnRpdHlUeXBlID09IFF1YW50aWZpZXJHcmVlZHkpOworICAgICAgICAg
ICAgICAgIEFTU0VSVCh0ZXJtLT5xdWFudGl0eUNvdW50ID09IHF1YW50aWZ5SW5maW5pdGUpOwor
ICAgICAgICAgICAgICAgIEFTU0VSVCghdGVybS0+Y2FwdHVyZSgpKTsKKworICAgICAgICAgICAg
ICAgIC8vIFVwb24gZW50cnkgc2V0IGEgbGFiZWwgdG8gbG9vcCBiYWNrIHRvLgorICAgICAgICAg
ICAgICAgIG9wLm1fcmVlbnRyeSA9IGxhYmVsKCk7CisKKyAgICAgICAgICAgICAgICAvLyBTdG9y
ZSB0aGUgc3RhcnQgaW5kZXggb2YgdGhlIGN1cnJlbnQgbWF0Y2g7IHdlIG5lZWQgdG8gcmVqZWN0
IHplcm8KKyAgICAgICAgICAgICAgICAvLyBsZW5ndGggbWF0Y2hlcy4KKyAgICAgICAgICAgICAg
ICBzdG9yZVRvRnJhbWUoaW5kZXgsIHRlcm0tPmZyYW1lTG9jYXRpb24pOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBPcFBhcmVudGhlc2Vz
U3VicGF0dGVyblRlcm1pbmFsRW5kOiB7CisgICAgICAgICAgICAgICAgUGF0dGVyblRlcm0qIHRl
cm0gPSBvcC5tX3Rlcm07CiAKLSAgICAgICAgaWYgKHNldFJlcGVhdEFsdGVybmF0aXZlTGFiZWxz
KQotICAgICAgICAgICAgZmlyc3RBbHRlcm5hdGl2ZUlucHV0Q2hlY2tlZCA9IExhYmVsKHRoaXMp
OworICAgICAgICAgICAgICAgIC8vIENoZWNrIGZvciB6ZXJvIGxlbmd0aCBtYXRjaGVzIC0gaWYg
dGhlIG1hdGNoIGlzIG5vbi16ZXJvLCB0aGVuIHdlCisgICAgICAgICAgICAgICAgLy8gY2FuIGFj
Y2VwdCBpdCAmIGxvb3AgYmFjayB1cCB0byB0aGUgaGVhZCBvZiB0aGUgc3VicGF0dGVybi4KKyAg
ICAgICAgICAgICAgICBZYXJyT3AmIGJlZ2luT3AgPSBtX29wc1tvcC5tX3ByZXZpb3VzT3BdOwor
ICAgICAgICAgICAgICAgIGJyYW5jaDMyKE5vdEVxdWFsLCBpbmRleCwgQWRkcmVzcyhzdGFja1Bv
aW50ZXJSZWdpc3RlciwgdGVybS0+ZnJhbWVMb2NhdGlvbiAqIHNpemVvZih2b2lkKikpLCBiZWdp
bk9wLm1fcmVlbnRyeSk7CisKKyAgICAgICAgICAgICAgICAvLyBSZWplY3QgdGhlIG1hdGNoIC0g
YmFja3RyYWNrIGJhY2sgaW50byB0aGUgc3VicGF0dGVybi4KKyAgICAgICAgICAgICAgICBvcC5t
X2p1bXBzLmFwcGVuZChqdW1wKCkpOworCisgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUg
ZW50cnkgcG9pbnQgdG8ganVtcCB0byB3aGVuIHdlIHN0b3AgbWF0Y2hpbmcgLSB3ZSB3aWxsCisg
ICAgICAgICAgICAgICAgLy8gZG8gc28gb25jZSB0aGUgc3VicGF0dGVybiBjYW5ub3QgbWF0Y2gg
YW55IG1vcmUuCisgICAgICAgICAgICAgICAgb3AubV9yZWVudHJ5ID0gbGFiZWwoKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gT3BQYXJl
bnRoZXRpY2FsQXNzZXJ0aW9uQmVnaW4vRW5kCisgICAgICAgICAgICBjYXNlIE9wUGFyZW50aGV0
aWNhbEFzc2VydGlvbkJlZ2luOiB7CisgICAgICAgICAgICAgICAgUGF0dGVyblRlcm0qIHRlcm0g
PSBvcC5tX3Rlcm07CisKKyAgICAgICAgICAgICAgICAvLyBTdG9yZSB0aGUgY3VycmVudCBpbmRl
eCAtIGFzc2VydGlvbnMgc2hvdWxkIG5vdCB1cGRhdGUgaW5kZXgsIHNvCisgICAgICAgICAgICAg
ICAgLy8gd2Ugd2lsbCBuZWVkIHRvIHJlc3RvcmUgaXQgdXBvbiBhIHN1Y2Nlc3NmdWwgbWF0Y2gu
CisgICAgICAgICAgICAgICAgdW5zaWduZWQgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uID0gdGVy
bS0+ZnJhbWVMb2NhdGlvbjsKKyAgICAgICAgICAgICAgICBzdG9yZVRvRnJhbWUoaW5kZXgsIHBh
cmVudGhlc2VzRnJhbWVMb2NhdGlvbik7CisKKyAgICAgICAgICAgICAgICAvLyBDaGVjayAKKyAg
ICAgICAgICAgICAgICBvcC5tX2NoZWNrQWRqdXN0ID0gbV9jaGVja2VkIC0gdGVybS0+aW5wdXRQ
b3NpdGlvbjsKKyAgICAgICAgICAgICAgICBpZiAob3AubV9jaGVja0FkanVzdCkKKyAgICAgICAg
ICAgICAgICAgICAgc3ViMzIoSW1tMzIob3AubV9jaGVja0FkanVzdCksIGluZGV4KTsKKworICAg
ICAgICAgICAgICAgIC8vIE1hbmFnZSBtX2NoZWNrZWQuCisgICAgICAgICAgICAgICAgbV9jaGVj
a2VkIC09IG9wLm1fY2hlY2tBZGp1c3Q7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBjYXNlIE9wUGFyZW50aGV0aWNhbEFzc2VydGlvbkVuZDogewor
ICAgICAgICAgICAgICAgIFBhdHRlcm5UZXJtKiB0ZXJtID0gb3AubV90ZXJtOwogCi0gICAgICAg
IHdoaWxlIChzdGF0ZS5hbHRlcm5hdGl2ZVZhbGlkKCkpIHsKLSAgICAgICAgICAgIFBhdHRlcm5B
bHRlcm5hdGl2ZSogYWx0ZXJuYXRpdmUgPSBzdGF0ZS5hbHRlcm5hdGl2ZSgpOwotICAgICAgICAg
ICAgb3B0aW1pemVBbHRlcm5hdGl2ZShhbHRlcm5hdGl2ZSk7CisgICAgICAgICAgICAgICAgLy8g
UmVzdG9yZSB0aGUgaW5wdXQgaW5kZXggdmFsdWUuCisgICAgICAgICAgICAgICAgdW5zaWduZWQg
cGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uID0gdGVybS0+ZnJhbWVMb2NhdGlvbjsKKyAgICAgICAg
ICAgICAgICBsb2FkRnJvbUZyYW1lKHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiwgaW5kZXgpOwor
CisgICAgICAgICAgICAgICAgLy8gSWYgaW52ZXJ0ZWQsIGEgc3VjY2Vzc2Z1bCBtYXRjaCBvZiB0
aGUgYXNzZXJ0aW9uIG11c3QgYmUgdHJlYXRlZAorICAgICAgICAgICAgICAgIC8vIGFzIGEgZmFp
bHVyZSwgc28ganVtcCB0byBiYWNrdHJhY2tpbmcuCisgICAgICAgICAgICAgICAgaWYgKHRlcm0t
PmludmVydCgpKSB7CisgICAgICAgICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGp1bXAo
KSk7CisgICAgICAgICAgICAgICAgICAgIG9wLm1fcmVlbnRyeSA9IGxhYmVsKCk7CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gTWFuYWdlIG1fY2hlY2tlZC4KKyAgICAg
ICAgICAgICAgICBZYXJyT3AmIGxhc3RPcCA9IG1fb3BzW29wLm1fcHJldmlvdXNPcF07CisgICAg
ICAgICAgICAgICAgbV9jaGVja2VkICs9IGxhc3RPcC5tX2NoZWNrQWRqdXN0OworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAvLyBUcmFjayB3aGV0
aGVyIGFueSBhbHRlcm5hdGl2ZXMgYXJlIHNob3J0ZXIgdGhhbiB0aGUgZmlyc3Qgb25lLgotICAg
ICAgICAgICAgaWYgKCFhbHRlcm5hdGl2ZS0+b25jZVRocm91Z2goKSkKLSAgICAgICAgICAgICAg
ICBoYXNTaG9ydGVyQWx0ZXJuYXRpdmVzID0gaGFzU2hvcnRlckFsdGVybmF0aXZlcyB8fCAoY291
bnRDaGVja2VkRm9yQ3VycmVudEFsdGVybmF0aXZlIDwgY291bnRUb0NoZWNrRm9yRmlyc3RBbHRl
cm5hdGl2ZSk7CisgICAgICAgICAgICBjYXNlIE9wTWF0Y2hGYWlsZWQ6CisgICAgICAgICAgICAg
ICAgaWYgKG1fcGF0dGVybi5tX2JvZHktPm1fY2FsbEZyYW1lU2l6ZSkKKyAgICAgICAgICAgICAg
ICAgICAgYWRkUHRyKEltbTMyKG1fcGF0dGVybi5tX2JvZHktPm1fY2FsbEZyYW1lU2l6ZSAqIHNp
emVvZih2b2lkKikpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgbW92
ZShUcnVzdGVkSW1tMzIoLTEpLCByZXR1cm5SZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgZ2Vu
ZXJhdGVSZXR1cm4oKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgKytvcEluZGV4OworICAgICAgICB9IHdoaWxlKG9wSW5kZXggPCBtX29wcy5z
aXplKCkpOworICAgIH0KIAotICAgICAgICAgICAgZm9yIChzdGF0ZS5yZXNldFRlcm0oKTsgc3Rh
dGUudGVybVZhbGlkKCk7IHN0YXRlLm5leHRUZXJtKCkpCi0gICAgICAgICAgICAgICAgZ2VuZXJh
dGVUZXJtKHN0YXRlKTsKKyAgICB2b2lkIGJhY2t0cmFjaygpCisgICAgeworICAgICAgICAvLyBC
YWNrd2FyZHMgZ2VuZXJhdGUgdGhlIGJhY2t0cmFja2luZyBjb2RlLgorICAgICAgICBzaXplX3Qg
b3BJbmRleCA9IG1fb3BzLnNpemUoKTsKKyAgICAgICAgQVNTRVJUKG9wSW5kZXgpOwogCi0gICAg
ICAgICAgICAvLyBJZiB3ZSBnZXQgaGVyZSwgdGhlIGFsdGVybmF0aXZlIG1hdGNoZWQuCi0gICAg
ICAgICAgICBpZiAobV9wYXR0ZXJuLm1fYm9keS0+bV9jYWxsRnJhbWVTaXplKQotICAgICAgICAg
ICAgICAgIGFkZFB0cihJbW0zMihtX3BhdHRlcm4ubV9ib2R5LT5tX2NhbGxGcmFtZVNpemUgKiBz
aXplb2Yodm9pZCopKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgICAgICBkbyB7CisgICAg
ICAgICAgICAtLW9wSW5kZXg7CisgICAgICAgICAgICBZYXJyT3AmIG9wID0gbV9vcHNbb3BJbmRl
eF07CisgICAgICAgICAgICBzd2l0Y2ggKG9wLm1fb3ApIHsKIAotICAgICAgICAgICAgQVNTRVJU
KGluZGV4ICE9IHJldHVyblJlZ2lzdGVyKTsKLSAgICAgICAgICAgIGlmIChtX3BhdHRlcm4ubV9i
b2R5LT5tX2hhc0ZpeGVkU2l6ZSkgewotICAgICAgICAgICAgICAgIG1vdmUoaW5kZXgsIHJldHVy
blJlZ2lzdGVyKTsKLSAgICAgICAgICAgICAgICBpZiAoYWx0ZXJuYXRpdmUtPm1fbWluaW11bVNp
emUpCi0gICAgICAgICAgICAgICAgICAgIHN1YjMyKEltbTMyKGFsdGVybmF0aXZlLT5tX21pbmlt
dW1TaXplKSwgcmV0dXJuUmVnaXN0ZXIpOworICAgICAgICAgICAgY2FzZSBPcFRlcm06CisgICAg
ICAgICAgICAgICAgYmFja3RyYWNrVGVybShvcEluZGV4KTsKKyAgICAgICAgICAgICAgICBicmVh
azsKIAotICAgICAgICAgICAgICAgIHN0b3JlMzIocmV0dXJuUmVnaXN0ZXIsIG91dHB1dCk7Ci0g
ICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhvdXRwdXQp
LCByZXR1cm5SZWdpc3Rlcik7CisgICAgICAgICAgICAvLyBPcEJvZHlBbHRlcm5hdGl2ZUJlZ2lu
L05leHQvRW5kCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gRm9yIGVhY2ggQmVnaW4v
TmV4dCBub2RlIHJlcHJlc2VudGluZyBhbiBhbHRlcm5hdGl2ZSwgd2UgbmVlZCB0byBkZWNpZGUg
d2hhdCB0byBkbworICAgICAgICAgICAgLy8gaW4gdHdvIGNpcmN1bXN0YW5jZXM6CisgICAgICAg
ICAgICAvLyAgLSBJZiB3ZSBiYWNrdHJhY2sgYmFjayBpbnRvIHRoaXMgbm9kZSwgZnJvbSB3aXRo
aW4gdGhlIGFsdGVybmF0aXZlLgorICAgICAgICAgICAgLy8gIC0gSWYgdGhlIGlucHV0IGNoZWNr
IGF0IHRoZSBoZWFkIG9mIHRoZSBhbHRlcm5hdGl2ZSBmYWlscyAoaWYgdGhpcyBleGlzdHMpLgor
ICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIFdlIHRyZWF0IHRoZXNlIHR3byBjYXNlcyBk
aWZmZXJlbnRseSBzaW5jZSBpbiB0aGUgZm9ybWVyIGNhc2Ugd2UgaGF2ZSBzbGlnaHRseQorICAg
ICAgICAgICAgLy8gbW9yZSBpbmZvcm1hdGlvbiAtIHNpbmNlIHdlIGFyZSBiYWNrdHJhY2tpbmcg
b3V0IG9mIGEgcHJpb3IgYWx0ZXJuYXRpdmUgd2Uga25vdworICAgICAgICAgICAgLy8gdGhhdCBh
dCBsZWFzdCBlbm91Z2ggaW5wdXQgd2FzIGF2YWlsYWJsZSB0byBydW4gaXQuIEZvciBleGFtcGxl
LCBnaXZlbiB0aGUgcmVndWxhcgorICAgICAgICAgICAgLy8gZXhwcmVzc2lvbiAvYXxiLywgaWYg
d2UgYmFja3RyYWNrIG91dCBvZiB0aGUgZmlyc3QgYWx0ZXJuYXRpdmUgKGEgZmFpbGVkIHBhdHRl
cm4KKyAgICAgICAgICAgIC8vIGNoYXJhY3RlciBtYXRjaCBvZiAnYScpLCB0aGVuIHdlIG5lZWQg
bm90IHBlcmZvcm0gYW4gYWRkaXRpb25hbCBpbnB1dCBhdmFpbGFiaWxpdHkKKyAgICAgICAgICAg
IC8vIGNoZWNrIGJlZm9yZSBydW5uaW5nIHRoZSBzZWNvbmQgYWx0ZXJuYXRpdmUuCisgICAgICAg
ICAgICAvLworICAgICAgICAgICAgLy8gQmFja3RyYWNraW5nIHJlcXVpcmVkIGRpZmZlcnMgZm9y
IHRoZSBsYXN0IGFsdGVybmF0aXZlLCB3aGljaCBpbiB0aGUgY2FzZSBvZiB0aGUKKyAgICAgICAg
ICAgIC8vIHJlcGVhdGluZyBzZXQgb2YgYWx0ZXJuYXRpdmVzIG11c3QgbG9vcC4gVGhlIGNvZGUg
Z2VuZXJhdGVkIGZvciB0aGUgbGFzdCBhbHRlcm5hdGl2ZQorICAgICAgICAgICAgLy8gd2lsbCBh
bHNvIGJlIHVzZWQgdG8gaGFuZGxlIGFsbCBpbnB1dCBjaGVjayBmYWlsdXJlcyBmcm9tIGFueSBw
cmlvciBhbHRlcm5hdGl2ZXMgLQorICAgICAgICAgICAgLy8gdGhlc2UgcmVxdWlyZSBzaW1pbGFy
IGZ1bmN0aW9uYWxpdHksIGluIHNlZWtpbmcgdGhlIG5leHQgYXZhaWxhYmxlIGFsdGVybmF0aXZl
IGZvcgorICAgICAgICAgICAgLy8gd2hpY2ggdGhlcmUgaXMgc3VmZmljaWVudCBpbnB1dC4KKyAg
ICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBTaW5jZSBiYWNrdHJhY2tpbmcgb2YgYWxsIG90
aGVyIGFsdGVybmF0aXZlcyBzaW1wbHkgcmVxdWlyZXMgdXMgdG8gbGluayBiYWNrdHJhY2tzCisg
ICAgICAgICAgICAvLyB0byB0aGUgcmVlbnRyeSBwb2ludCBmb3IgdGhlIHN1YnNlcXVlbnQgYWx0
ZXJuYXRpdmUsIHdlIHdpbGwgb25seSBiZSBnZW5lcmF0aW5nIGFueQorICAgICAgICAgICAgLy8g
Y29kZSB3aGVuIGJhY2t0cmFja2luZyB0aGUgbGFzdCBhbHRlcm5hdGl2ZS4KKyAgICAgICAgICAg
IGNhc2UgT3BCb2R5QWx0ZXJuYXRpdmVCZWdpbjoKKyAgICAgICAgICAgIGNhc2UgT3BCb2R5QWx0
ZXJuYXRpdmVOZXh0OiB7CisgICAgICAgICAgICAgICAgUGF0dGVybkFsdGVybmF0aXZlKiBhbHRl
cm5hdGl2ZSA9IG9wLm1fYWx0ZXJuYXRpdmU7CisKKyAgICAgICAgICAgICAgICAvLyBNYW5hZ2Ug
bV9jaGVja2VkLgorICAgICAgICAgICAgICAgIGlmIChvcC5tX29wID09IE9wQm9keUFsdGVybmF0
aXZlTmV4dCkgeworICAgICAgICAgICAgICAgICAgICBQYXR0ZXJuQWx0ZXJuYXRpdmUqIHByaW9y
QWx0ZXJuYXRpdmUgPSBtX29wc1tvcC5tX3ByZXZpb3VzT3BdLm1fYWx0ZXJuYXRpdmU7CisgICAg
ICAgICAgICAgICAgICAgIG1fY2hlY2tlZCArPSBwcmlvckFsdGVybmF0aXZlLT5tX21pbmltdW1T
aXplOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtX2NoZWNrZWQgLT0gYWx0
ZXJuYXRpdmUtPm1fbWluaW11bVNpemU7CiAKLSAgICAgICAgICAgIHN0b3JlMzIoaW5kZXgsIEFk
ZHJlc3Mob3V0cHV0LCA0KSk7CisgICAgICAgICAgICAgICAgLy8gSXMgdGhpcyB0aGUgbGFzdCBh
bHRlcm5hdGl2ZT8gSWYgbm90LCB0aGVuIGlmIHdlIGJhY2t0cmFjayB0byB0aGlzIHBvaW50IHdl
IGp1c3QKKyAgICAgICAgICAgICAgICAvLyBuZWVkIHRvIGp1bXAgdG8gdHJ5IHRvIG1hdGNoIHRo
ZSBuZXh0IGFsdGVybmF0aXZlLgorICAgICAgICAgICAgICAgIGlmIChtX29wc1tvcC5tX25leHRP
cF0ubV9vcCAhPSBPcEJvZHlBbHRlcm5hdGl2ZUVuZCkgeworICAgICAgICAgICAgICAgICAgICBt
X2JhY2t0cmFja2luZ1N0YXRlLmxpbmtUbyhtX29wc1tvcC5tX25leHRPcF0ubV9yZWVudHJ5LCB0
aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIE5vdGhpbmcgZWxzZSB0byBkbyEg
YnJlYWsgYmFjayB0byB0aGUgc3dpdGNoLgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBZYXJyT3AmIGVuZE9wID0gbV9vcHNbb3AubV9uZXh0T3BdOwogCi0gICAgICAgICAgICBn
ZW5lcmF0ZVJldHVybigpOworICAgICAgICAgICAgICAgIC8vIEZpbmQgdGhlIGJlZ2lubmluZyBv
ZiB0aGlzIHNldCBvZiBhbHRlcm5hdGl2ZXMuCisgICAgICAgICAgICAgICAgWWFyck9wKiBiZWdp
bk9wID0gJm9wOworICAgICAgICAgICAgICAgIHdoaWxlIChiZWdpbk9wLT5tX29wICE9IE9wQm9k
eUFsdGVybmF0aXZlQmVnaW4pIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGJlZ2luT3At
Pm1fb3AgPT0gT3BCb2R5QWx0ZXJuYXRpdmVOZXh0KTsKKyAgICAgICAgICAgICAgICAgICAgYmVn
aW5PcCA9ICZtX29wc1tiZWdpbk9wLT5tX3ByZXZpb3VzT3BdOworICAgICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgc3RhdGUubmV4dEFsdGVybmF0aXZlKCk7Ci0gICAgICAgICAgICBpZiAo
YWx0ZXJuYXRpdmUtPm9uY2VUaHJvdWdoKCkgJiYgc3RhdGUuYWx0ZXJuYXRpdmVWYWxpZCgpKQot
ICAgICAgICAgICAgICAgIHN0YXRlLmNsZWFyQmFja3RyYWNrKCk7CisgICAgICAgICAgICAgICAg
Ly8gQ2hlY2sgd2hldGhlciB0aGlzIHNldCBvZiBhbHRlcm5hdGl2ZXMgYXJlIHJlcGVhdGluZyBv
ciAnb25jZSB0aHJvdWdoJy4KKyAgICAgICAgICAgICAgICBib29sIG9uY2VUaHJvdWdoID0gZW5k
T3AubV9uZXh0T3AgPT0gbm90Rm91bmQ7CiAKLSAgICAgICAgICAgIC8vIGlmIHRoZXJlIGFyZSBh
bnkgbW9yZSBhbHRlcm5hdGl2ZXMsIHBsYW50IHRoZSBjaGVjayBmb3IgaW5wdXQgYmVmb3JlIGxv
b3BpbmcuCi0gICAgICAgICAgICBpZiAoc3RhdGUuYWx0ZXJuYXRpdmVWYWxpZCgpKSB7Ci0gICAg
ICAgICAgICAgICAgc3RhdGUuc2V0SnVtcExpc3RUb1ByaW9yUGFyZW4oMCk7Ci0gICAgICAgICAg
ICAgICAgUGF0dGVybkFsdGVybmF0aXZlKiBuZXh0QWx0ZXJuYXRpdmUgPSBzdGF0ZS5hbHRlcm5h
dGl2ZSgpOwotICAgICAgICAgICAgICAgIGlmICghc2V0UmVwZWF0QWx0ZXJuYXRpdmVMYWJlbHMg
JiYgIW5leHRBbHRlcm5hdGl2ZS0+b25jZVRocm91Z2goKSkgewotICAgICAgICAgICAgICAgICAg
ICAvLyBXZSBoYXZlIGhhbmRsZWQgbm9uLXJlcGVhdGluZyBhbHRlcm5hdGl2ZXMsIGp1bXAgdG8g
bmV4dCBpdGVyYXRpb24gCi0gICAgICAgICAgICAgICAgICAgIC8vIGFuZCBsb29wIG92ZXIgcmVw
ZWF0aW5nIGFsdGVybmF0aXZlcy4KLSAgICAgICAgICAgICAgICAgICAgc3RhdGUuanVtcFRvQmFj
a3RyYWNrKHRoaXMpOworICAgICAgICAgICAgICAgIC8vIEZpcnN0LCBnZW5lcmF0ZSBjb2RlIHRv
IGhhbmRsZSBjYXNlcyB3aGVyZSB3ZSBiYWNrdHJhY2sgb3V0IG9mIGFuIGF0dGVtcHRlZCBtYXRj
aAorICAgICAgICAgICAgICAgIC8vIG9mIHRoZSBsYXN0IGFsdGVybmF0aXZlLiBJZiB0aGlzIGlz
IGEgJ29uY2UgdGhyb3VnaCcgc2V0IG9mIGFsdGVybmF0aXZlcyB0aGVuIHdlCisgICAgICAgICAg
ICAgICAgLy8gaGF2ZSBub3RoaW5nIHRvIGRvIC0gbGluayB0aGlzIHN0cmFpZ2h0IHRocm91Z2gg
dG8gdGhlIEVuZC4KKyAgICAgICAgICAgICAgICBpZiAob25jZVRocm91Z2gpCisgICAgICAgICAg
ICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGlua1RvKGVuZE9wLm1fcmVlbnRyeSwgdGhp
cyk7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIE9rYXks
IHdlJ3JlIGdvaW5nIHRvIG5lZWQgdG8gbG9vcC4gQ2FsY3VsYXRlIHRoZSBkZWx0YSBiZXR3ZWVu
IHdoZXJlIHRoZSBpbnB1dAorICAgICAgICAgICAgICAgICAgICAvLyBwb3NpdGlvbiB3YXMsIGFu
ZCB3aGVyZSB3ZSB3YW50IGl0IHRvIGJlIGFsbG93aW5nIGZvciB0aGUgZmFjdCB0aGF0IHdlIG5l
ZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgLy8gaW5jcmVtZW50IGJ5IDEuICBFLmcuIGZvciB0
aGUgcmVnZXhwIC9hfHgvIHdlIG5lZWQgdG8gaW5jcmVtZW50IHRoZSBwb3NpdGlvbiBieQorICAg
ICAgICAgICAgICAgICAgICAvLyAxIGJldHdlZW4gbG9vcCBpdGVyYXRpb25zLCBidXQgZm9yIC9h
YmNkfHh5ei8gd2UgbmVlZCB0byBpbmNyZW1lbnQgYnkgdHdvIHdoZW4KKyAgICAgICAgICAgICAg
ICAgICAgLy8gbG9vcGluZyBmcm9tIHRoZSBsYXN0IGFsdGVybmF0aXZlIHRvIHRoZSBmaXJzdCwg
Zm9yIC9hfHh5ei8gd2UgbmVlZCB0byBkZWNyZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgLy8g
YnkgMSwgYW5kIGZvciAvYXx4eS8gd2UgZG9uJ3QgbmVlZCB0byBtb3ZlIHRoZSBpbnB1dCBwb3Np
dGlvbiBhdCBhbGwuCisgICAgICAgICAgICAgICAgICAgIGludCBkZWx0YUxhc3RBbHRlcm5hdGl2
ZVRvRmlyc3RBbHRlcm5hdGl2ZVBsdXNPbmUgPSAoYmVnaW5PcC0+bV9hbHRlcm5hdGl2ZS0+bV9t
aW5pbXVtU2l6ZSAtIGFsdGVybmF0aXZlLT5tX21pbmltdW1TaXplKSArIDE7CisKKyAgICAgICAg
ICAgICAgICAgICAgLy8gSWYgd2UgZG9uJ3QgbmVlZCB0byBtb3ZlIHRoZSBpbnB1dCBwb2lzdGlv
biwgYW5kIHRoZSBwYXR0ZXJuIGhhcyBhIGZpeGVkIHNpemUKKyAgICAgICAgICAgICAgICAgICAg
Ly8gKGluIHdoaWNoIGNhc2Ugd2Ugb21pdCB0aGUgc3RvcmUgb2YgdGhlIHN0YXJ0IGluZGV4IHVu
dGlsIHRoZSBwYXR0ZXJuIGhhcyBtYXRjaGVkKQorICAgICAgICAgICAgICAgICAgICAvLyB0aGVu
IHdlIGNhbiBqdXN0IGxpbmsgdGhlIGJhY2t0cmFjayBvdXQgb2YgdGhlIGxhc3QgYWx0ZXJuYXRp
dmUgc3RyYWlnaHQgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIC8vIGhlYWQgb2YgdGhlIGZp
cnN0IGFsdGVybmF0aXZlLgorICAgICAgICAgICAgICAgICAgICBpZiAoIWRlbHRhTGFzdEFsdGVy
bmF0aXZlVG9GaXJzdEFsdGVybmF0aXZlUGx1c09uZSAmJiBtX3BhdHRlcm4ubV9ib2R5LT5tX2hh
c0ZpeGVkU2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUu
bGlua1RvKGJlZ2luT3AtPm1fcmVlbnRyeSwgdGhpcyk7CisgICAgICAgICAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBnZW5lcmF0ZSBhIHRy
YW1wb2xpbmUgb2YgY29kZSB0byBleGVjdXRlIGJlZm9yZSBsb29waW5nIGJhY2sKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIGFyb3VuZCB0byB0aGUgZmlyc3QgYWx0ZXJuYXRpdmUuCisgICAg
ICAgICAgICAgICAgICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmxpbmsodGhpcyk7CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBwYXR0ZXJuIHNpemUgaXMgbm90IGZpeGVk
LCB0aGVuIHN0b3JlIHRoZSBzdGFydCBpbmRleCwgZm9yIHVzZSBpZiB3ZSBtYXRjaC4KKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICghbV9wYXR0ZXJuLm1fYm9keS0+bV9oYXNGaXhlZFNpemUp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWx0ZXJuYXRpdmUtPm1fbWluaW11
bVNpemUgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmUzMihpbmRl
eCwgQWRkcmVzcyhvdXRwdXQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92ZShpbmRleCwgcmVnVDApOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWx0ZXJuYXRpdmUtPm1fbWluaW11bVNp
emUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWIzMihJbW0zMihhbHRl
cm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSAtIDEpLCByZWdUMCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFk
ZDMyKEltbTMyKDEpLCByZWdUMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
b3JlMzIocmVnVDAsIEFkZHJlc3Mob3V0cHV0KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBVcGRhdGUgdGhlIGlucHV0IHBvc2l0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGRlbHRhTGFzdEFsdGVybmF0aXZlVG9GaXJzdEFsdGVybmF0aXZlUGx1c09uZSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhZGQzMihJbW0zMihkZWx0YUxhc3RBbHRlcm5hdGl2ZVRv
Rmlyc3RBbHRlcm5hdGl2ZVBsdXNPbmUpLCBpbmRleCk7CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIExvb3AuIFNpbmNlIHRoaXMgY29kZSBpcyBvbmx5IHJlYWNoZWQgd2hlbiB3ZSBiYWNr
dHJhY2sgb3V0IG9mIHRoZSBsYXN0CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbHRlcm5h
dGl2ZSAoYW5kIE5PVCBsaW5rZWQgdG8gZnJvbSB0aGUgaW5wdXQgY2hlY2sgdXBvbiBlbnRyeSB0
byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxhc3QgYWx0ZXJuYXRpdmUpIHdlIGtu
b3cgdGhhdCB0aGVyZSBtdXN0IGJlIGF0IGxlYXN0IGVub3VnaCBpbnB1dCBhcworICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gcmVxdWlyZWQgYnkgdGhlIGxhc3QgYWx0ZXJuYXRpdmUuIEFzIHN1
Y2gsIHdlIG9ubHkgbmVlZCB0byBjaGVjayBpZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGZpcnN0IHdpbGwgcmVxdWlyZSBtb3JlIHRvIHJ1biAtIGlmIHRoZSBzYW1lIG9yIGxlc3Mg
aXMgcmVxdWlyZWQgd2UgY2FuCisgICAgICAgICAgICAgICAgICAgICAgICAvLyB1bmNvbmRpdGlv
bmFsbHkganVtcC4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWx0YUxhc3RBbHRlcm5h
dGl2ZVRvRmlyc3RBbHRlcm5hdGl2ZVBsdXNPbmUgPiAwKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNoZWNrSW5wdXQoKS5saW5rVG8oYmVnaW5PcC0+bV9yZWVudHJ5LCB0aGlzKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBq
dW1wKGJlZ2luT3AtPm1fcmVlbnRyeSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgY291bnRUb0NoZWNrRm9yRmlyc3RBbHRl
cm5hdGl2ZSA9IG5leHRBbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZTsKKyAgICAgICAgICAgICAg
ICAvLyBXZSBjYW4gcmVhY2ggdGhpcyBwb2ludCBpbiB0aGUgY29kZSBpbiB0d28gd2F5czoKKyAg
ICAgICAgICAgICAgICAvLyAgLSBGYWxsdGhyb3VnaCBmcm9tIHRoZSBjb2RlIGFib3ZlIChhIHJl
cGVhdGluZyBhbHRlcm5hdGl2ZSBiYWNrdHJhY2tlZCBvdXQgb2YgaXRzCisgICAgICAgICAgICAg
ICAgLy8gICAgbGFzdCBhbHRlcm5hdGl2ZSwgYW5kIGRpZCBub3QgaGF2ZSBzdWZmaWNlbnQgaW5w
dXQgdG8gcnVuIHRoZSBmaXJzdCkuCisgICAgICAgICAgICAgICAgLy8gIC0gV2Ugd2lsbCBsb29w
IGJhY2sgdXAgdG8gdGhlIGZvbGxvd2luZyBsYWJlbCB3aGVuIGEgcmVsZWF0aW5nIGFsdGVybmF0
aXZlIGxvb3BzLAorICAgICAgICAgICAgICAgIC8vICAgIGZvbGxvd2luZyBhIGZhaWxlZCBpbnB1
dCBjaGVjay4KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIEVpdGhlciB3
YXksIHdlIGhhdmUganVzdCBmYWlsZWQgdGhlIGlucHV0IGNoZWNrIGZvciB0aGUgZmlyc3QgYWx0
ZXJuYXRpdmUuCisgICAgICAgICAgICAgICAgTGFiZWwgZmlyc3RJbnB1dENoZWNrRmFpbGVkKHRo
aXMpOworCisgICAgICAgICAgICAgICAgLy8gR2VuZXJhdGUgY29kZSB0byBoYW5kbGUgaW5wdXQg
Y2hlY2sgZmFpbHVyZXMgZnJvbSBhbHRlcm5hdGl2ZXMgZXhjZXB0IHRoZSBsYXN0LgorICAgICAg
ICAgICAgICAgIC8vIHByZXZPcCBpcyB0aGUgYWx0ZXJuYXRpdmUgd2UncmUgaGFuZGxpbmcgYSBi
YWlsIG91dCBmcm9tIChpbml0aWFsbHkgQmVnaW4pLCBhbmQKKyAgICAgICAgICAgICAgICAvLyBu
ZXh0T3AgaXMgdGhlIGFsdGVybmF0aXZlIHdlIHdpbGwgYmUgYXR0ZW1wdGluZyB0byByZWVudGVy
IGludG8uCisgICAgICAgICAgICAgICAgLy8gCisgICAgICAgICAgICAgICAgLy8gV2Ugd2lsbCBs
aW5rIGlucHV0IGNoZWNrIGZhaWx1cmVzIGZyb20gdGhlIGZvcndhcmRzIG1hdGNoaW5nIHBhdGgg
YmFjayB0byB0aGUgY29kZQorICAgICAgICAgICAgICAgIC8vIHRoYXQgY2FuIGhhbmRsZSB0aGVt
LgorICAgICAgICAgICAgICAgIFlhcnJPcCogcHJldk9wID0gYmVnaW5PcDsKKyAgICAgICAgICAg
ICAgICBZYXJyT3AqIG5leHRPcCA9ICZtX29wc1tiZWdpbk9wLT5tX25leHRPcF07CisgICAgICAg
ICAgICAgICAgd2hpbGUgKG5leHRPcC0+bV9vcCAhPSBPcEJvZHlBbHRlcm5hdGl2ZUVuZCkgewor
ICAgICAgICAgICAgICAgICAgICAvLyBMaW5rIGFueSBpbnB1dCBjaGVjayBmYWlsdXJlcyBmcm9t
IHRoZSBwcmlvciBhbHRlcm5hdGl2ZSB0byB0aGlzIHBvaW50LgorICAgICAgICAgICAgICAgICAg
ICBwcmV2T3AtPm1fanVtcHMubGluayh0aGlzKTsKKworICAgICAgICAgICAgICAgICAgICAvLyBD
YWxjdWxhdGUgdGhlIGRpZmZlcmVuY2UgaW4gbWluaW11bSBzaXplIGJldHdlZW4gdGhlIHR3byBh
bHRlcm5hdGl2ZXMsIGFuZAorICAgICAgICAgICAgICAgICAgICAvLyB1cGRhdGUgdGhlIGlucHV0
IHBvc2l0aW9uLgorICAgICAgICAgICAgICAgICAgICBpbnQgZGVsdGEgPSBuZXh0T3AtPm1fYWx0
ZXJuYXRpdmUtPm1fbWluaW11bVNpemUgLSBwcmV2T3AtPm1fYWx0ZXJuYXRpdmUtPm1fbWluaW11
bVNpemU7CisgICAgICAgICAgICAgICAgICAgIGlmIChkZWx0YSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGFkZDMyKEltbTMyKGRlbHRhKSwgaW5kZXgpOworCisgICAgICAgICAgICAgICAgICAg
IC8vIFdlIG9ubHkgZ2V0IGhlcmUgaWYgYW4gaW5wdXQgY2hlY2sgZmFpbHMsIGl0IGlzIG9ubHkg
d29ydGggY2hlY2tpbmcgYWdhaW4KKyAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlIG5leHQg
YWx0ZXJuYXRpdmUgaGFzIGEgbWluaW11bSBzaXplIGxlc3MgdGhhbiB0aGUgbGFzdC4KKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGRlbHRhIDwgMCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gRklYTUU6IGlmIHdlIGFkZGVkIGFuIGV4dHJhIGxhYmVsIHRvIFlhcnJPcCwgd2UgY291bGQg
YXZvaWQgbmVlZGluZyB0bworICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3VidHJhY3QgZGVs
dGEgYmFjayBvdXQsIGFuZCByZWR1Y2UgdGhpcyBjb2RlLiAgU2hvdWxkIHBlcmZvcm1hbmNlIHRl
c3QKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBiZW5lZml0IG9mIHRoaXMuCisgICAg
ICAgICAgICAgICAgICAgICAgICBKdW1wIGZhaWwgPSBqdW1wSWZOb0F2YWlsYWJsZUlucHV0KCk7
CisgICAgICAgICAgICAgICAgICAgICAgICBzdWIzMihJbW0zMihkZWx0YSksIGluZGV4KTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGp1bXAobmV4dE9wLT5tX3JlZW50cnkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgZmFpbC5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIHByZXZPcCA9IG5leHRPcDsKKyAgICAgICAgICAgICAgICAgICAg
bmV4dE9wID0gJm1fb3BzW25leHRPcC0+bV9uZXh0T3BdOworICAgICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBnZXQgaGVyZSwgdGhlcmUgdGhlIGxhc3QgaW5w
dXQgY2hlY2tlZCBmYWlsZWQuCi0gICAgICAgICAgICAgICAgICAgIG5vdEVub3VnaElucHV0Rm9y
UHJldmlvdXNBbHRlcm5hdGl2ZS5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgIC8vIFdlIGZh
bGwgdGhyb3VnaCB0byBoZXJlIGlmIHRoZXJlIGlzIGluc3VmZmljaWVudCBpbnB1dCB0byBydW4g
dGhlIGxhc3QgYWx0ZXJuYXRpdmUuCiAKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUubGlua0Fs
dGVybmF0aXZlQmFja3RyYWNrcyh0aGlzKTsKKyAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSBp
cyBpbnN1ZmZpY2llbnQgaW5wdXQgdG8gcnVuIHRoZSBsYXN0IGFsdGVybmF0aXZlLCB0aGVuIGZv
ciAnb25jZSB0aHJvdWdoJworICAgICAgICAgICAgICAgIC8vIGFsdGVybmF0aXZlcyB3ZSBhcmUg
ZG9uZSAtIGp1c3QganVtcCBiYWNrIHVwIGludG8gdGhlIGZvcndhcmRzIG1hdGNoaW5nIHBhdGgg
YXQgdGhlIEVuZC4KKyAgICAgICAgICAgICAgICBpZiAob25jZVRocm91Z2gpIHsKKyAgICAgICAg
ICAgICAgICAgICAgb3AubV9qdW1wcy5saW5rVG8oZW5kT3AubV9yZWVudHJ5LCB0aGlzKTsKKyAg
ICAgICAgICAgICAgICAgICAganVtcChlbmRPcC5tX3JlZW50cnkpOworICAgICAgICAgICAgICAg
ICAgICBicmVhazsgLy8gTm90aGluZyBlbHNlIHRvIGRvISBicmVhayBiYWNrIHRvIHRoZSBzd2l0
Y2guCisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIC8vIEJhY2sgdXAg
dG8gc3RhcnQgdGhlIGxvb3BpbmcgYWx0ZXJuYXRpdmVzLgotICAgICAgICAgICAgICAgICAgICBp
ZiAoY291bnRDaGVja2VkRm9yQ3VycmVudEFsdGVybmF0aXZlKQotICAgICAgICAgICAgICAgICAg
ICAgICAgc3ViMzIoSW1tMzIoY291bnRDaGVja2VkRm9yQ3VycmVudEFsdGVybmF0aXZlKSwgaW5k
ZXgpOworICAgICAgICAgICAgICAgIC8vIEZvciByZXBlYXRpbmcgYWx0ZXJuYXRpdmVzLCBsaW5r
IGFueSBpbnB1dCBjaGVjayBmYWlsdXJlIGZyb20gdGhlIGxhc3QgYWx0ZXJuYXRpdmUgdG8KKyAg
ICAgICAgICAgICAgICAvLyB0aGlzIHBvaW50LgorICAgICAgICAgICAgICAgIG9wLm1fanVtcHMu
bGluayh0aGlzKTsKKworICAgICAgICAgICAgICAgIC8vIElmIHRoZSBzaXplIG9mIHRoZSBwYXR0
ZXJuIGlzIG5vdCBmaXhlZCwgdGhlbiB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgc3RhcnQgaW5kZXgu
CisgICAgICAgICAgICAgICAgYm9vbCBuZWVkc1RvVXBkYXRlTWF0Y2hTdGFydCA9ICFtX3BhdHRl
cm4ubV9ib2R5LT5tX2hhc0ZpeGVkU2l6ZTsKKworICAgICAgICAgICAgICAgIC8vIENoZWNrIGZv
ciBjYXNlcyB3aGVyZSBpbnB1dCBwb3NpdGlvbiBpcyBhbHJlYWR5IGluY3JlbWVudGVkIGJ5IDEg
Zm9yIHRoZSBsYXN0CisgICAgICAgICAgICAgICAgLy8gYWx0ZXJuYXRpdmUgKHRoaXMgaXMgcGFy
dGljdWxhcmx5IHVzZWZ1bCB3aGVyZSB0aGUgbWluaW11bSBzaXplIG9mIHRoZSBib2R5CisgICAg
ICAgICAgICAgICAgLy8gZGlzanVuY3Rpb24gaXMgMCwgZS5nLiAvYSp8Yi8pLgorICAgICAgICAg
ICAgICAgIGlmIChuZWVkc1RvVXBkYXRlTWF0Y2hTdGFydCAmJiBhbHRlcm5hdGl2ZS0+bV9taW5p
bXVtU2l6ZSA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIGluZGV4IGlzIGFscmVhZHkg
aW5jcmVtZW50ZWQgYnkgMSwgc28ganVzdCBzdG9yZSBpdCBub3chCisgICAgICAgICAgICAgICAg
ICAgIHN0b3JlMzIoaW5kZXgsIEFkZHJlc3Mob3V0cHV0KSk7CisgICAgICAgICAgICAgICAgICAg
IG5lZWRzVG9VcGRhdGVNYXRjaFN0YXJ0ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICAgICAgICAgIGZpcnN0QWx0ZXJuYXRpdmUgPSBMYWJlbCh0aGlzKTsKKyAgICAg
ICAgICAgICAgICAvLyBDaGVjayB3aGV0aGVyIHRoZXJlIGlzIHN1ZmZpY2llbnQgaW5wdXQgdG8g
bG9vcC4gSW5jcmVtZW50IHRoZSBpbnB1dCBwb3NpdGlvbiBieQorICAgICAgICAgICAgICAgIC8v
IG9uZSwgYW5kIGNoZWNrLiBBbHNvIGFkZCBpbiB0aGUgbWluaW11bSBkaXNqdW5jdGlvbiBzaXpl
IGJlZm9yZSBjaGVja2luZyAtIHRoZXJlCisgICAgICAgICAgICAgICAgLy8gaXMgbm8gcG9pbnQg
aW4gbG9vcGluZyBpZiB3ZSdyZSBqdXN0IGdvaW5nIHRvIGZhaWwgYWxsIHRoZSBpbnB1dCBjaGVj
a3MgYXJvdW5kCisgICAgICAgICAgICAgICAgLy8gdGhlIG5leHQgaXRlcmF0aW9uLgorICAgICAg
ICAgICAgICAgIGludCBkZWx0YUxhc3RBbHRlcm5hdGl2ZVRvQm9keU1pbmltdW1QbHVzT25lID0g
KG1fcGF0dGVybi5tX2JvZHktPm1fbWluaW11bVNpemUgKyAxKSAtIGFsdGVybmF0aXZlLT5tX21p
bmltdW1TaXplOworICAgICAgICAgICAgICAgIGlmIChkZWx0YUxhc3RBbHRlcm5hdGl2ZVRvQm9k
eU1pbmltdW1QbHVzT25lKQorICAgICAgICAgICAgICAgICAgICBhZGQzMihJbW0zMihkZWx0YUxh
c3RBbHRlcm5hdGl2ZVRvQm9keU1pbmltdW1QbHVzT25lKSwgaW5kZXgpOworICAgICAgICAgICAg
ICAgIEp1bXAgbWF0Y2hGYWlsZWQgPSBqdW1wSWZOb0F2YWlsYWJsZUlucHV0KCk7CisKKyAgICAg
ICAgICAgICAgICAvLyBTdG9yZSB0aGUgbWF0Y2ggc3RhcnQgaW5kZXgsIGlmIHdlIG5lZWRlZCB0
byAmIGRpZG4ndCBkbyBzbyBhYm92ZS4KKyAgICAgICAgICAgICAgICBpZiAobmVlZHNUb1VwZGF0
ZU1hdGNoU3RhcnQpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgbWluaW11bSBzaXplIGlz
IHplcm8sIHRoZW53ZSBjYW4gc3RvcmUgdGhlIGN1cnJlbnQgaW5kZXggZGlyZWN0bHkuCisgICAg
ICAgICAgICAgICAgICAgIGlmICghbV9wYXR0ZXJuLm1fYm9keS0+bV9taW5pbXVtU2l6ZSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHN0b3JlMzIoaW5kZXgsIEFkZHJlc3Mob3V0cHV0KSk7Cisg
ICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgbW92ZShp
bmRleCwgcmVnVDApOworICAgICAgICAgICAgICAgICAgICAgICAgc3ViMzIoSW1tMzIobV9wYXR0
ZXJuLm1fYm9keS0+bV9taW5pbXVtU2l6ZSksIHJlZ1QwKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHN0b3JlMzIocmVnVDAsIEFkZHJlc3Mob3V0cHV0KSk7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUuY2hlY2tl
ZFRvdGFsID0gY291bnRUb0NoZWNrRm9yRmlyc3RBbHRlcm5hdGl2ZTsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGNvdW50VG9DaGVja0ZvckZpcnN0QWx0ZXJuYXRpdmUpCi0gICAgICAgICAgICAg
ICAgICAgICAgICBub3RFbm91Z2hJbnB1dEZvclByZXZpb3VzQWx0ZXJuYXRpdmUuYXBwZW5kKGp1
bXBJZk5vQXZhaWxhYmxlSW5wdXQoY291bnRUb0NoZWNrRm9yRmlyc3RBbHRlcm5hdGl2ZSkpOwor
ICAgICAgICAgICAgICAgIC8vIENhbGN1bGF0ZSBob3cgbXVjaCBtb3JlIGlucHV0IHRoZSBmaXJz
dCBhbHRlcm5hdGl2ZSByZXF1aXJlcyB0aGFuIHRoZSBtaW5pbXVtCisgICAgICAgICAgICAgICAg
Ly8gZm9yIHRoZSBib2R5IGFzIGEgd2hvbGUuIElmIG5vIG1vcmUgaXMgbmVlZGVkIHRoZW4gd2Ug
ZG9udCBuZWVkIGFuIGFkZGl0aW9uYWwKKyAgICAgICAgICAgICAgICAvLyBpbnB1dCBjaGVjayBo
ZXJlIC0ganVtcCBzdHJhaWdodCBiYWNrIHVwIHRvIHRoZSBzdGFydCBvZiB0aGUgZmlyc3QgYWx0
ZXJuYXRpdmUuCisgICAgICAgICAgICAgICAgaW50IGRlbHRhQm9keU1pbmltdW1Ub0ZpcnN0QWx0
ZXJuYXRpdmUgPSBiZWdpbk9wLT5tX2FsdGVybmF0aXZlLT5tX21pbmltdW1TaXplIC0gbV9wYXR0
ZXJuLm1fYm9keS0+bV9taW5pbXVtU2l6ZTsKKyAgICAgICAgICAgICAgICBpZiAoIWRlbHRhQm9k
eU1pbmltdW1Ub0ZpcnN0QWx0ZXJuYXRpdmUpCisgICAgICAgICAgICAgICAgICAgIGp1bXAoYmVn
aW5PcC0+bV9yZWVudHJ5KTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgLy8gSW5jcmVtZW50IHBvc2l0aW9uICYgY2hlY2sgaW5wdXQgZm9yIHRoZSBmaXJzdCBh
bHRlcm5hdGl2ZSAtIGlmIHN1ZmZpY2llbnQKKyAgICAgICAgICAgICAgICAgICAgLy8gaW5wdXQg
aXMgYXZhaWxhYmxlIGp1c3QgdG8gaXQsIGVsc2UganVtcCB0byBpdCdzIGlucHV0IGNoZWNrIGZh
aWx1cmUgaGFuZGxlci4KKyAgICAgICAgICAgICAgICAgICAgYWRkMzIoSW1tMzIoZGVsdGFCb2R5
TWluaW11bVRvRmlyc3RBbHRlcm5hdGl2ZSksIGluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAg
Y2hlY2tJbnB1dCgpLmxpbmtUbyhiZWdpbk9wLT5tX3JlZW50cnksIHRoaXMpOworICAgICAgICAg
ICAgICAgICAgICBqdW1wKGZpcnN0SW5wdXRDaGVja0ZhaWxlZCk7CisgICAgICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICAgICAgICAgIGNvdW50Q2hlY2tlZEZvckN1cnJlbnRBbHRlcm5hdGl2
ZSA9IGNvdW50VG9DaGVja0ZvckZpcnN0QWx0ZXJuYXRpdmU7CisgICAgICAgICAgICAgICAgLy8g
V2UganVtcCB0byBoZXJlIGlmIHdlIGl0ZXJhdGUgdG8gdGhlIHBvaW50IHRoYXQgdGhlcmUgaXMg
aW5zdWZmaWNpZW50IGlucHV0IHRvCisgICAgICAgICAgICAgICAgLy8gcnVuIGFueSBtYXRjaGVz
LCBhbmQgbmVlZCB0byByZXR1cm4gYSBmYWlsdXJlIHN0YXRlIGZyb20gSklUIGNvZGUuCisgICAg
ICAgICAgICAgICAgbWF0Y2hGYWlsZWQubGluayh0aGlzKTsKKworICAgICAgICAgICAgICAgIGlm
IChtX3BhdHRlcm4ubV9ib2R5LT5tX2NhbGxGcmFtZVNpemUpCisgICAgICAgICAgICAgICAgICAg
IGFkZFB0cihJbW0zMihtX3BhdHRlcm4ubV9ib2R5LT5tX2NhbGxGcmFtZVNpemUgKiBzaXplb2Yo
dm9pZCopKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTMyKC0xKSwgcmV0dXJuUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgIGdlbmVyYXRl
UmV0dXJuKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBjYXNlIE9wQm9keUFsdGVybmF0aXZlRW5kOiB7CisgICAgICAgICAgICAgICAgLy8gV2Ug
c2hvdWxkIG5ldmVyIGJhY2t0cmFjayBiYWNrIGludG8gYSBib2R5IGRpc2p1bmN0aW9uLgorICAg
ICAgICAgICAgICAgIEFTU0VSVChtX2JhY2t0cmFja2luZ1N0YXRlLmlzRW1wdHkoKSk7CiAKLSAg
ICAgICAgICAgICAgICAgICAgZmlyc3RBbHRlcm5hdGl2ZUlucHV0Q2hlY2tlZCA9IExhYmVsKHRo
aXMpOworICAgICAgICAgICAgICAgIFBhdHRlcm5BbHRlcm5hdGl2ZSogcHJpb3JBbHRlcm5hdGl2
ZSA9IG1fb3BzW29wLm1fcHJldmlvdXNPcF0ubV9hbHRlcm5hdGl2ZTsKKyAgICAgICAgICAgICAg
ICBtX2NoZWNrZWQgKz0gcHJpb3JBbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBzZXRS
ZXBlYXRBbHRlcm5hdGl2ZUxhYmVscyA9IHRydWU7CisgICAgICAgICAgICAvLyBPcFNpbXBsZU5l
c3RlZEFsdGVybmF0aXZlQmVnaW4vTmV4dC9FbmQKKyAgICAgICAgICAgIC8vIE9wTmVzdGVkQWx0
ZXJuYXRpdmVCZWdpbi9OZXh0L0VuZAorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIEdl
bmVyYXRlIGNvZGUgZm9yIHdoZW4gd2UgYmFja3RyYWNrIGJhY2sgb3V0IG9mIGFuIGFsdGVybmF0
aXZlIGludG8KKyAgICAgICAgICAgIC8vIGEgQmVnaW4gb3IgTmV4dCBub2RlLCBvciB3aGVuIHRo
ZSBlbnRyeSBpbnB1dCBjb3VudCBjaGVjayBmYWlscy4gSWYKKyAgICAgICAgICAgIC8vIHRoZXJl
IGFyZSBtb3JlIGFsdGVybmF0aXZlcyB3ZSBuZWVkIHRvIGp1bXAgdG8gdGhlIG5leHQgYWx0ZXJu
YXRpdmUsCisgICAgICAgICAgICAvLyBpZiBub3Qgd2UgYmFja3RyYWNrIGJhY2sgb3V0IG9mIHRo
ZSBjdXJyZW50IHNldCBvZiBwYXJlbnRoZXNlcy4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAg
ICAvLyBJbiB0aGUgY2FzZSBvZiBub24tc2ltcGxlIG5lc3RlZCBhc3NlcnRpb25zIHdlIG5lZGQg
dG8gYWxzbyBsaW5rIHRoZQorICAgICAgICAgICAgLy8gJ3JldHVybiBhZGRyZXNzJyBhcHByb3By
aWF0ZWx5IHRvIGJhY2t0cmFjayBiYWNrIG91dCBpbnRvIHRoZSBjb3JyZWN0CisgICAgICAgICAg
ICAvLyBhbHRlcm5hdGl2ZS4KKyAgICAgICAgICAgIGNhc2UgT3BTaW1wbGVOZXN0ZWRBbHRlcm5h
dGl2ZUJlZ2luOgorICAgICAgICAgICAgY2FzZSBPcFNpbXBsZU5lc3RlZEFsdGVybmF0aXZlTmV4
dDoKKyAgICAgICAgICAgIGNhc2UgT3BOZXN0ZWRBbHRlcm5hdGl2ZUJlZ2luOgorICAgICAgICAg
ICAgY2FzZSBPcE5lc3RlZEFsdGVybmF0aXZlTmV4dDogeworICAgICAgICAgICAgICAgIFlhcnJP
cCYgbmV4dE9wID0gbV9vcHNbb3AubV9uZXh0T3BdOworICAgICAgICAgICAgICAgIGJvb2wgaXNC
ZWdpbiA9IG9wLm1fcHJldmlvdXNPcCA9PSBub3RGb3VuZDsKKyAgICAgICAgICAgICAgICBib29s
IGlzTGFzdEFsdGVybmF0aXZlID0gbmV4dE9wLm1fbmV4dE9wID09IG5vdEZvdW5kOworICAgICAg
ICAgICAgICAgIEFTU0VSVChpc0JlZ2luID09IChvcC5tX29wID09IE9wU2ltcGxlTmVzdGVkQWx0
ZXJuYXRpdmVCZWdpbiB8fCBvcC5tX29wID09IE9wTmVzdGVkQWx0ZXJuYXRpdmVCZWdpbikpOwor
ICAgICAgICAgICAgICAgIEFTU0VSVChpc0xhc3RBbHRlcm5hdGl2ZSA9PSAobmV4dE9wLm1fb3Ag
PT0gT3BTaW1wbGVOZXN0ZWRBbHRlcm5hdGl2ZUVuZCB8fCBuZXh0T3AubV9vcCA9PSBPcE5lc3Rl
ZEFsdGVybmF0aXZlRW5kKSk7CisKKyAgICAgICAgICAgICAgICAvLyBUcmVhdCBhbiBpbnB1dCBj
aGVjayBmYWlsdXJlIHRoZSBzYW1lIGFzIGEgZmFpbGVkIG1hdGNoLgorICAgICAgICAgICAgICAg
IG1fYmFja3RyYWNraW5nU3RhdGUuYXBwZW5kKG9wLm1fanVtcHMpOworCisgICAgICAgICAgICAg
ICAgLy8gU2V0IHRoZSBiYWNrdHJhY2tzIHRvIGp1bXAgdG8gdGhlIGFwcHJvcHJpYXRlIHBsYWNl
LiBXZSBtYXkgbmVlZAorICAgICAgICAgICAgICAgIC8vIHRvIGxpbmsgdGhlIGJhY2t0cmFja3Mg
aW4gb25lIG9mIHRocmVlIGRpZmZlcmVudCB3YXkgZGVwZW5kaW5nIG9uCisgICAgICAgICAgICAg
ICAgLy8gdGhlIHR5cGUgb2YgYWx0ZXJhbnRpdmUgd2UgYXJlIGRlYWxpbmcgd2l0aDoKKyAgICAg
ICAgICAgICAgICAvLyAgLSBBIHNpbmdsZSBhbHRlcm5hdGl2ZSwgd2l0aCBubyBzaW1wbGluZ3Mu
CisgICAgICAgICAgICAgICAgLy8gIC0gVGhlIGxhc3QgYWx0ZXJuYXRpdmUgb2YgYSBzZXQgb2Yg
dHdvIG9yIG1vcmUuCisgICAgICAgICAgICAgICAgLy8gIC0gQW4gYWx0ZXJuYXRpdmUgb3RoZXIg
dGhhbiB0aGUgbGFzdCBvZiBhIHNldCBvZiB0d28gb3IgbW9yZS4KKyAgICAgICAgICAgICAgICAv
LworICAgICAgICAgICAgICAgIC8vIEluIHRoZSBjYXNlIG9mIGEgc2luZ2xlIGFsdGVyYW50aXZl
IG9uIGl0cyBvd24sIHdlIGRvbid0IG5lZWQgdG8KKyAgICAgICAgICAgICAgICAvLyBqdW1wIGFu
eXdoZXJlIC0gaWYgdGhlIGFsdGVybmF0aXZlIGZhaWxzIHRvIG1hdGNoIHdlIGNhbiBqdXN0Cisg
ICAgICAgICAgICAgICAgLy8gY29udGludWUgdG8gYmFja3RyYWNrIG91dCBvZiB0aGUgcGFyZXRo
ZXNlcyB3aXRob3V0IGp1bXBpbmcuCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAg
ICAvLyBJbiB0aGUgY2FzZSBvZiB0aGUgbGFzdCBhbHRlcm5hdGl2ZSBpbiBhIHNldCBvZiBtb3Jl
IHRoYW4gb25lLCB3ZQorICAgICAgICAgICAgICAgIC8vIG5lZWQgdG8ganVtcCB0byByZXR1cm4g
YmFjayBvdXQgdG8gdGhlIGJlZ2lubmluZy4gV2UnbGwgZG8gc28gYnkKKyAgICAgICAgICAgICAg
ICAvLyBhZGRpbmcgYSBqdW1wIHRvIHRoZSBFbmQgbm9kZSdzIG1fanVtcHMgbGlzdCwgYW5kIGxp
bmtpbmcgdGhpcworICAgICAgICAgICAgICAgIC8vIHdoZW4gd2UgY29tZSB0byBnZW5lcmF0ZSB0
aGUgQmVnaW4gbm9kZS4gRm9yIGFsdGVybmF0aXZlcyBvdGhlcgorICAgICAgICAgICAgICAgIC8v
IHRoYW4gdGhlIGxhc3QsIHdlIG5lZWQgdG8ganVtcCB0byB0aGUgbmV4dCBhbHRlcm5hdGl2ZS4K
KyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIElmIHRoZSBhbHRlcm5hdGl2
ZSBoYWQgYWRqdXN0ZWQgdGhlIGlucHV0IHBvc3NpdGlvbiB3ZSBtdXN0IGxpbmsKKyAgICAgICAg
ICAgICAgICAvLyBiYWNrdHJhY2tpbmcgdG8gaGVyZSwgY29ycmVjdCwgYW5kIHRoZW4ganVtcCBv
bi4gSWYgbm90IHdlIGNhbgorICAgICAgICAgICAgICAgIC8vIGxpbmsgdGhlIGJhY2t0cmFja3Mg
ZGlyZWN0bHkgdG8gdGhlaXIgZGVzdGluYXRpb24uCisgICAgICAgICAgICAgICAgaWYgKG9wLm1f
Y2hlY2tBZGp1c3QpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIHRoZSBjYXNlcyB3
aGVyZSB3ZSBuZWVkIHRvIGxpbmsgdGhlIGJhY2t0cmFja3MgaGVyZS4KKyAgICAgICAgICAgICAg
ICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgICAg
ICBzdWIzMihJbW0zMihvcC5tX2NoZWNrQWRqdXN0KSwgaW5kZXgpOworICAgICAgICAgICAgICAg
ICAgICBpZiAoIWlzTGFzdEFsdGVybmF0aXZlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAv
LyBBbiBhbHRlcm5hdGl2ZSB0aGF0IGlzIG5vdCB0aGUgbGFzdCBzaG91bGQganVtcCB0byBpdHMg
c3VjY2Vzc29yLgorICAgICAgICAgICAgICAgICAgICAgICAganVtcChuZXh0T3AubV9yZWVudHJ5
KTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghaXNCZWdpbikgeworICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gVGhlIGxhc3Qgb2YgbW9yZSB0aGFuIG9uZSBhbHRlcmFudGl2ZXMg
bXVzdCBqdW1wIGJhY2sgdG8gdGhlIGJlZ25uaW5nLgorICAgICAgICAgICAgICAgICAgICAgICAg
bmV4dE9wLm1fanVtcHMuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBBIHNpbmdsZSBhbHRlcm5hdGl2ZSBvbiBp
dHMgb3duIGNhbiBmYWxsIHRocm91Z2guCisgICAgICAgICAgICAgICAgICAgICAgICBtX2JhY2t0
cmFja2luZ1N0YXRlLmZhbGx0aHJvdWdoKCk7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpbnQgY291bnRUb0NoZWNr
Rm9yTmV4dEFsdGVybmF0aXZlID0gbmV4dEFsdGVybmF0aXZlLT5tX21pbmltdW1TaXplOworICAg
ICAgICAgICAgICAgICAgICAvLyBIYW5kbGUgdGhlIGNhc2VzIHdoZXJlIHdlIGNhbiBsaW5rIHRo
ZSBiYWNrdHJhY2tzIGRpcmVjdGx5IHRvIHRoZWlyIGRlc3RpbmF0aW9ucy4KKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCFpc0xhc3RBbHRlcm5hdGl2ZSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gQW4gYWx0ZXJuYXRpdmUgdGhhdCBpcyBub3QgdGhlIGxhc3Qgc2hvdWxkIGp1bXAgdG8g
aXRzIHN1Y2Nlc3Nvci4KKyAgICAgICAgICAgICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3Rh
dGUubGlua1RvKG5leHRPcC5tX3JlZW50cnksIHRoaXMpOworICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgaWYgKCFpc0JlZ2luKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgbGFz
dCBvZiBtb3JlIHRoYW4gb25lIGFsdGVyYW50aXZlcyBtdXN0IGp1bXAgYmFjayB0byB0aGUgYmVn
bm5pbmcuCisgICAgICAgICAgICAgICAgICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLnRha2VC
YWNrdHJhY2tzVG9KdW1wTGlzdChuZXh0T3AubV9qdW1wcywgdGhpcyk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgLy8gSW4gdGhlIGNhc2Ugb2YgYSBzaW5nbGUg
YWx0ZXJuYXRpdmUgb24gaXRzIG93biBkbyBub3RoaW5nIC0gaXQgY2FuIGZhbGwgdGhyb3VnaC4K
KyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50Q2hlY2tl
ZEZvckN1cnJlbnRBbHRlcm5hdGl2ZSA+IGNvdW50VG9DaGVja0Zvck5leHRBbHRlcm5hdGl2ZSkg
eyAvLyBDQVNFIDE6IGN1cnJlbnQgYWx0ZXJuYXRpdmUgd2FzIGxvbmdlciB0aGFuIHRoZSBuZXh0
IG9uZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGdldCBoZXJlLCB0aGVuIHRo
ZSBsYXN0IGlucHV0IGNoZWNrZWQgZmFpbGVkLgotICAgICAgICAgICAgICAgICAgICAgICAgbm90
RW5vdWdoSW5wdXRGb3JQcmV2aW91c0FsdGVybmF0aXZlLmxpbmsodGhpcyk7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHN1ZmZpY2VudCBpbnB1dCBhdmFpbGFibGUgdG8g
cnVuIHRoZSBuZXh0IGFsdGVybmF0aXZlIAotICAgICAgICAgICAgICAgICAgICAgICAgbm90RW5v
dWdoSW5wdXRGb3JQcmV2aW91c0FsdGVybmF0aXZlLmFwcGVuZChqdW1wSWZOb0F2YWlsYWJsZUlu
cHV0KGNvdW50VG9DaGVja0Zvck5leHRBbHRlcm5hdGl2ZSAtIGNvdW50Q2hlY2tlZEZvckN1cnJl
bnRBbHRlcm5hdGl2ZSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgYXJlIG5vdyBp
biB0aGUgY29ycmVjdCBzdGF0ZSB0byBlbnRlciB0aGUgbmV4dCBhbHRlcm5hdGl2ZTsgdGhpcyBh
ZGQgaXMgb25seSByZXF1aXJlZAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gbWlycm9y
IGFuZCByZXZlcnQgb3BlcmF0aW9uIG9mIHRoZSBzdWIzMiwganVzdCBiZWxvdy4KLSAgICAgICAg
ICAgICAgICAgICAgICAgIGFkZDMyKEltbTMyKGNvdW50Q2hlY2tlZEZvckN1cnJlbnRBbHRlcm5h
dGl2ZSAtIGNvdW50VG9DaGVja0Zvck5leHRBbHRlcm5hdGl2ZSksIGluZGV4KTsKLQotICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgZ2V0IGhlcmUsIHRoZW4gdGhlIGxhc3QgaW5wdXQg
Y2hlY2tlZCBwYXNzZWQuCi0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5saW5rQWx0ZXJu
YXRpdmVCYWNrdHJhY2tzKHRoaXMpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBObyBu
ZWVkIHRvIGNoZWNrIGlmIHdlIGNhbiBydW4gdGhlIG5leHQgYWx0ZXJuYXRpdmUsIHNpbmNlIGl0
IGlzIHNob3J0ZXIgLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8ganVzdCB1cGRhdGUgaW5k
ZXguCi0gICAgICAgICAgICAgICAgICAgICAgICBzdWIzMihJbW0zMihjb3VudENoZWNrZWRGb3JD
dXJyZW50QWx0ZXJuYXRpdmUgLSBjb3VudFRvQ2hlY2tGb3JOZXh0QWx0ZXJuYXRpdmUpLCBpbmRl
eCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY291bnRDaGVja2VkRm9yQ3VycmVu
dEFsdGVybmF0aXZlIDwgY291bnRUb0NoZWNrRm9yTmV4dEFsdGVybmF0aXZlKSB7IC8vIENBU0Ug
MjogbmV4dCBhbHRlcm5hdGl2ZSBpcyBsb25nZXIgdGhhbiB0aGUgY3VycmVudCBvbmUuCi0gICAg
ICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBnZXQgaGVyZSwgdGhlbiB0aGUgbGFzdCBpbnB1
dCBjaGVja2VkIGZhaWxlZC4KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGlz
IGluc3VmZmljaWVudCBpbnB1dCB0byBydW4gdGhlIGN1cnJlbnQgYWx0ZXJuYXRpdmUsIGFuZCB0
aGUgbmV4dCBhbHRlcm5hdGl2ZSBpcyBsb25nZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAv
LyB0aGVuIHRoZXJlIGlzIGRlZmluaXRlbHkgbm90IGVub3VnaCBpbnB1dCB0byBydW4gaXQgLSBk
b24ndCBldmVuIGNoZWNrLiBKdXN0IGFkanVzdCBpbmRleCwgYXMgaWYKLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIHdlIGhhZCBjaGVja2VkLgotICAgICAgICAgICAgICAgICAgICAgICAgbm90
RW5vdWdoSW5wdXRGb3JQcmV2aW91c0FsdGVybmF0aXZlLmxpbmsodGhpcyk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBhZGQzMihJbW0zMihjb3VudFRvQ2hlY2tGb3JOZXh0QWx0ZXJuYXRpdmUg
LSBjb3VudENoZWNrZWRGb3JDdXJyZW50QWx0ZXJuYXRpdmUpLCBpbmRleCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBub3RFbm91Z2hJbnB1dEZvclByZXZpb3VzQWx0ZXJuYXRpdmUuYXBwZW5k
KGp1bXAoKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBuZXh0IGFsdGVybmF0
aXZlIGlzIGxvbmdlciB0aGFuIHRoZSBjdXJyZW50IG9uZTsgY2hlY2sgdGhlIGRpZmZlcmVuY2Uu
Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5saW5rQWx0ZXJuYXRpdmVCYWNrdHJhY2tz
KHRoaXMpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBub3RFbm91Z2hJbnB1dEZvclByZXZp
b3VzQWx0ZXJuYXRpdmUuYXBwZW5kKGp1bXBJZk5vQXZhaWxhYmxlSW5wdXQoY291bnRUb0NoZWNr
Rm9yTmV4dEFsdGVybmF0aXZlIC0gY291bnRDaGVja2VkRm9yQ3VycmVudEFsdGVybmF0aXZlKSk7
Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7IC8vIENBU0UgMzogQm90aCBhbHRlcm5hdGl2
ZXMgYXJlIHRoZSBzYW1lIGxlbmd0aC4KLSAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChj
b3VudENoZWNrZWRGb3JDdXJyZW50QWx0ZXJuYXRpdmUgPT0gY291bnRUb0NoZWNrRm9yTmV4dEFs
dGVybmF0aXZlKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIG5leHQgYWx0
ZXJhdGl2ZSBpcyB0aGUgc2FtZSBsZW5ndGggYXMgdGhpcyBvbmUsIHRoZW4gbm8gbmVlZCB0byBj
aGVjayB0aGUgaW5wdXQgLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlcmUgd2Fz
IHN1ZmZpY2VudCBpbnB1dCB0byBydW4gdGhlIGN1cnJlbnQgYWx0ZXJuYXRpdmUgdGhlbiB0aGVy
ZSBpcyBzdWZmaWNpZW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBpbnB1dCB0byBydW4g
dGhlIG5leHQgb25lOyBpZiBub3QsIHRoZXJlIGlzbid0LgotICAgICAgICAgICAgICAgICAgICAg
ICAgc3RhdGUubGlua0FsdGVybmF0aXZlQmFja3RyYWNrcyh0aGlzKTsKKyAgICAgICAgICAgICAg
ICAvLyBBdCB0aGlzIHBvaW50IHdlJ3ZlIGhhbmRsZWQgdGhlIGJhY2t0cmFja2luZyBiYWNrIGlu
dG8gdGhpcyBub2RlLgorICAgICAgICAgICAgICAgIC8vIE5vdyBsaW5rIGFueSBiYWNrdHJhY2tz
IHRoYXQgbmVlZCB0byBqdW1wIHRvIGhlcmUuCisKKyAgICAgICAgICAgICAgICAvLyBGb3Igbm9u
LXNpbXBsZSBhbHRlcm5hdGl2ZXMsIGxpbmsgdGhlIGFsdGVybmF0aXZlJ3MgJ3JldHVybiBhZGRy
ZXNzJworICAgICAgICAgICAgICAgIC8vIHNvIHRoYXQgd2UgYmFja3RyYWNrIGJhY2sgb3V0IGlu
dG8gdGhlIHByZXZpb3VzIGFsdGVybmF0aXZlLgorICAgICAgICAgICAgICAgIGlmIChvcC5tX29w
ID09IE9wTmVzdGVkQWx0ZXJuYXRpdmVOZXh0KQorICAgICAgICAgICAgICAgICAgICBtX2JhY2t0
cmFja2luZ1N0YXRlLmFwcGVuZChvcC5tX3JldHVybkFkZHJlc3MpOworCisgICAgICAgICAgICAg
ICAgLy8gSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBhbHRlcm5hdGl2ZSwgdGhlbiB0aGUgbGFz
dCBhbHRlcm5hdGl2ZSB3aWxsCisgICAgICAgICAgICAgICAgLy8gaGF2ZSBwbGFudGVkIGEganVt
cCB0byBiZSBsaW5rZWQgdG8gdGhlIGVuZC4gVGhpcyBqdW1wIHdhcyBhZGRlZCB0byB0aGUKKyAg
ICAgICAgICAgICAgICAvLyBFbmQgbm9kZSdzIG1fanVtcHMgbGlzdC4gSWYgd2UgYXJlIGJhY2sg
YXQgdGhlIGJlZ2lubmluZywgbGluayBpdCBoZXJlLgorICAgICAgICAgICAgICAgIGlmIChpc0Jl
Z2luKSB7CisgICAgICAgICAgICAgICAgICAgIFlhcnJPcCogZW5kT3AgPSAmbV9vcHNbb3AubV9u
ZXh0T3BdOworICAgICAgICAgICAgICAgICAgICB3aGlsZSAoZW5kT3AtPm1fbmV4dE9wICE9IG5v
dEZvdW5kKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoZW5kT3AtPm1fb3AgPT0g
T3BTaW1wbGVOZXN0ZWRBbHRlcm5hdGl2ZU5leHQgfHwgZW5kT3AtPm1fb3AgPT0gT3BOZXN0ZWRB
bHRlcm5hdGl2ZU5leHQpOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kT3AgPSAmbV9vcHNb
ZW5kT3AtPm1fbmV4dE9wXTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICBzdGF0ZS5jaGVja2VkVG90YWwgLT0gY291bnRDaGVja2VkRm9yQ3VycmVudEFsdGVybmF0
aXZlOwotICAgICAgICAgICAgICAgICAgICBjb3VudENoZWNrZWRGb3JDdXJyZW50QWx0ZXJuYXRp
dmUgPSBjb3VudFRvQ2hlY2tGb3JOZXh0QWx0ZXJuYXRpdmU7Ci0gICAgICAgICAgICAgICAgICAg
IHN0YXRlLmNoZWNrZWRUb3RhbCArPSBjb3VudENoZWNrZWRGb3JDdXJyZW50QWx0ZXJuYXRpdmU7
CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChlbmRPcC0+bV9vcCA9PSBPcFNpbXBsZU5lc3Rl
ZEFsdGVybmF0aXZlRW5kIHx8IGVuZE9wLT5tX29wID09IE9wTmVzdGVkQWx0ZXJuYXRpdmVFbmQp
OworICAgICAgICAgICAgICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmFwcGVuZChlbmRPcC0+
bV9qdW1wcyk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gTWFuYWdl
IG1fY2hlY2tlZC4KKyAgICAgICAgICAgICAgICBpZiAoIWlzQmVnaW4pIHsKKyAgICAgICAgICAg
ICAgICAgICAgWWFyck9wJiBsYXN0T3AgPSBtX29wc1tvcC5tX3ByZXZpb3VzT3BdOworICAgICAg
ICAgICAgICAgICAgICBtX2NoZWNrZWQgKz0gbGFzdE9wLm1fY2hlY2tBZGp1c3Q7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1fY2hlY2tlZCAtPSBvcC5tX2NoZWNrQWRqdXN0
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2Fz
ZSBPcFNpbXBsZU5lc3RlZEFsdGVybmF0aXZlRW5kOgorICAgICAgICAgICAgY2FzZSBPcE5lc3Rl
ZEFsdGVybmF0aXZlRW5kOiB7CisgICAgICAgICAgICAgICAgUGF0dGVyblRlcm0qIHRlcm0gPSBv
cC5tX3Rlcm07CisKKyAgICAgICAgICAgICAgICAvLyBJZiB3ZSBiYWNrdHJhY2sgaW50byB0aGUg
ZW5kIG9mIGEgc2ltcGxlIHN1YnBhdHRlcm4gZG8gbm90aGluZzsKKyAgICAgICAgICAgICAgICAv
LyBqdXN0IGNvbnRpbnVlIHRocm91Z2ggaW50byB0aGUgbGFzdCBhbHRlcm5hdGl2ZS4gSWYgd2Ug
YmFja3RyYWNrCisgICAgICAgICAgICAgICAgLy8gaW50byB0aGUgZW5kIG9mIGEgbm9uLXNpbXBs
ZSBzZXQgb2YgYWx0ZXJudGl2ZXMgd2UgbmVlZCB0byBqdW1wCisgICAgICAgICAgICAgICAgLy8g
dG8gdGhlIGJhY2t0cmFja2luZyByZXR1cm4gYWRkcmVzcyBzZXQgdXAgZHVyaW5nIGdlbmVyYXRp
b24uCisgICAgICAgICAgICAgICAgaWYgKG9wLm1fb3AgPT0gT3BOZXN0ZWRBbHRlcm5hdGl2ZUVu
ZCkgeworICAgICAgICAgICAgICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmxpbmsodGhpcyk7
CisKKyAgICAgICAgICAgICAgICAgICAgLy8gUGxhbnQgYSBqdW1wIHRvIHRoZSByZXR1cm4gYWRk
cmVzcy4KKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgcGFyZW50aGVzZXNGcmFtZUxvY2F0
aW9uID0gdGVybS0+ZnJhbWVMb2NhdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
YWx0ZXJuYXRpdmVGcmFtZUxvY2F0aW9uID0gcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uOworICAg
ICAgICAgICAgICAgICAgICBpZiAodGVybS0+cXVhbnRpdHlUeXBlICE9IFF1YW50aWZpZXJGaXhl
ZENvdW50KQorICAgICAgICAgICAgICAgICAgICAgICAgYWx0ZXJuYXRpdmVGcmFtZUxvY2F0aW9u
ICs9IFlhcnJTdGFja1NwYWNlRm9yQmFja1RyYWNrSW5mb1BhcmVudGhlc2VzT25jZTsKKyAgICAg
ICAgICAgICAgICAgICAgbG9hZEZyb21GcmFtZUFuZEp1bXAoYWx0ZXJuYXRpdmVGcmFtZUxvY2F0
aW9uKTsKKworICAgICAgICAgICAgICAgICAgICAvLyBMaW5rIHRoZSBEYXRhTGFiZWxQdHIgYXNz
b2NpYXRlZCB3aXRoIHRoZSBlbmQgb2YgdGhlIGxhc3QKKyAgICAgICAgICAgICAgICAgICAgLy8g
YWx0ZXJuYXRpdmUgdG8gdGhpcyBwb2ludC4KKyAgICAgICAgICAgICAgICAgICAgbV9iYWNrdHJh
Y2tpbmdTdGF0ZS5hcHBlbmQob3AubV9yZXR1cm5BZGRyZXNzKTsKICAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAvLyBNYW5hZ2UgbV9jaGVja2VkLgorICAgICAgICAgICAgICAg
IFlhcnJPcCYgbGFzdE9wID0gbV9vcHNbb3AubV9wcmV2aW91c09wXTsKKyAgICAgICAgICAgICAg
ICBtX2NoZWNrZWQgKz0gbGFzdE9wLm1fY2hlY2tBZGp1c3Q7CisgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0KIAotICAgICAgICAvLyBJZiB3ZSBnZXQgaGVy
ZSwgYWxsIEFsdGVybmF0aXZlcyBmYWlsZWQuLi4KKyAgICAgICAgICAgIC8vIE9wUGFyZW50aGVz
ZXNTdWJwYXR0ZXJuT25jZUJlZ2luL0VuZAorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8v
IFdoZW4gd2UgYXJlIGJhY2t0cmFja2luZyBiYWNrIG91dCBvZiBhIGNhcHR1cmluZyBzdWJwYXR0
ZXJuIHdlIG5lZWQKKyAgICAgICAgICAgIC8vIHRvIGNsZWFyIHRoZSBzdGFydCBpbmRleCBpbiB0
aGUgbWF0Y2hlcyBvdXRwdXQgYXJyYXksIHRvIHJlY29yZCB0aGF0CisgICAgICAgICAgICAvLyB0
aGlzIHN1YnBhdHRlcm4gaGFzIG5vdCBiZWVuIGNhcHR1cmVkLgorICAgICAgICAgICAgLy8KKyAg
ICAgICAgICAgIC8vIFdoZW4gYmFja3RyYWNraW5nIGJhY2sgb3V0IG9mIGEgR3JlZWR5IHF1YW50
aWZpZWQgc3VicGF0dGVybiB3ZSBuZWVkCisgICAgICAgICAgICAvLyB0byBjYXRjaCB0aGlzLCBh
bmQgdHJ5IHJ1bm5pbmcgdGhlIHJlbWFpbmRlciBvZiB0aGUgYWx0ZXJuYXRpdmUgYWZ0ZXIKKyAg
ICAgICAgICAgIC8vIHRoZSBzdWJwYXR0ZXJuIGFnYWluLCBza2lwcGluZyB0aGUgcGFyZW50aGVz
ZXMuCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gVXBvbiBiYWNrdHJhY2tpbmcgYmFj
ayBpbnRvIGEgcXVhbnRpZmllZCBzZXQgb2YgcGFyZXRoZXNlcyB3ZSBuZWVkIHRvCisgICAgICAg
ICAgICAvLyBjaGVjayB3aGV0aGVyIHdlIHdlcmUgY3VycmVudGx5IHNraXBwaW5nIHRoZSBzdWJw
YXR0ZXJuLiBJZiBub3QsIHdlCisgICAgICAgICAgICAvLyBjYW4gYmFja3RyYWNrIGludG8gdGhl
bSwgaWYgd2Ugd2VyZSB3ZSBuZWVkIHRvIGVpdGhlciBiYWNrdHJhY2sgYmFjaworICAgICAgICAg
ICAgLy8gb3V0IG9mIHRoZSBzdGFydCBvZiB0aGUgcGFyZW50aGVzZXMsIG9yIGp1bXAgYmFjayB0
byB0aGUgZm9yd2FyZHMKKyAgICAgICAgICAgIC8vIG1hdGNoaW5nIHN0YXJ0LCBkZXBlbmRpbmcg
b2Ygd2hldGhlciB0aGUgbWF0Y2ggaXMgR3JlZWR5IG9yIE5vbkdyZWVkeS4KKyAgICAgICAgICAg
IGNhc2UgT3BQYXJlbnRoZXNlc1N1YnBhdHRlcm5PbmNlQmVnaW46IHsKKyAgICAgICAgICAgICAg
ICBQYXR0ZXJuVGVybSogdGVybSA9IG9wLm1fdGVybTsKKyAgICAgICAgICAgICAgICBBU1NFUlQo
dGVybS0+cXVhbnRpdHlDb3VudCA9PSAxKTsKKworICAgICAgICAgICAgICAgIC8vIFdlIG9ubHkg
bmVlZCB0byBiYWNrdHJhY2sgdG8gdGhpc3BvaW50IGlmIGNhcHR1cmluZyBvciBncmVlZHkuCisg
ICAgICAgICAgICAgICAgaWYgKHRlcm0tPmNhcHR1cmUoKSB8fCB0ZXJtLT5xdWFudGl0eVR5cGUg
PT0gUXVhbnRpZmllckdyZWVkeSkgeworICAgICAgICAgICAgICAgICAgICBtX2JhY2t0cmFja2lu
Z1N0YXRlLmxpbmsodGhpcyk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgY2FwdXRyaW5n
LCBjbGVhciB0aGUgY2FwdHVyZSAod2Ugb25seSBuZWVkIHRvIHJlc2V0IHN0YXJ0KS4KKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHRlcm0tPmNhcHR1cmUoKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKC0xKSwgQWRkcmVzcyhvdXRwdXQsICh0ZXJtLT5wYXJl
bnRoZXNlcy5zdWJwYXR0ZXJuSWQgPDwgMSkgKiBzaXplb2YoaW50KSkpOworCisgICAgICAgICAg
ICAgICAgICAgIC8vIElmIEdyZWVkeSwganVtcCB0byB0aGUgZW5kLgorICAgICAgICAgICAgICAg
ICAgICBpZiAodGVybS0+cXVhbnRpdHlUeXBlID09IFF1YW50aWZpZXJHcmVlZHkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIENsZWFyIHRoZSBmbGFnIGluIHRoZSBzdGFja2ZyYW1lIGlu
ZGljYXRpbmcgd2UgcmFuIHRocm91Z2ggdGhlIHN1YnBhdHRlcm4uCisgICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gPSB0ZXJtLT5mcmFtZUxv
Y2F0aW9uOworICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKFRydXN0ZWRJbW0z
MigtMSksIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbik7CisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBKdW1wIHRvIGFmdGVyIHRoZSBwYXJlbnRoZXNlcywgc2tpcHBpbmcgdGhlIHN1YnBhdHRl
cm4uCisgICAgICAgICAgICAgICAgICAgICAgICBqdW1wKG1fb3BzW29wLm1fbmV4dE9wXS5tX3Jl
ZW50cnkpOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gQSBiYWNrdHJhY2sgZnJvbSBhZnRl
ciB0aGUgcGFyZW50aGVzZXMsIHdoZW4gc2tpcHBpbmcgdGhlIHN1YnBhdHRlcm4sCisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyB3aWxsIGp1bXAgYmFjayB0byBoZXJlLgorICAgICAgICAgICAg
ICAgICAgICAgICAgb3AubV9qdW1wcy5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgICAgICB9
CiAKLSAgICAgICAgc3RhdGUuY2hlY2tlZFRvdGFsIC09IGNvdW50Q2hlY2tlZEZvckN1cnJlbnRB
bHRlcm5hdGl2ZTsKKyAgICAgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5mYWxs
dGhyb3VnaCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgT3BQYXJlbnRoZXNlc1N1YnBhdHRlcm5PbmNl
RW5kOiB7CisgICAgICAgICAgICAgICAgUGF0dGVyblRlcm0qIHRlcm0gPSBvcC5tX3Rlcm07CiAK
LSAgICAgICAgaWYgKCFzZXRSZXBlYXRBbHRlcm5hdGl2ZUxhYmVscykgewotICAgICAgICAgICAg
Ly8gSWYgdGhlcmUgYXJlIG5vIGFsdGVybmF0aXZlcyB0aGF0IG5lZWQgcmVwZWF0aW5nIChhbGwg
YXJlIG1hcmtlZCAnb25jZVRocm91Z2gnKSB0aGVuIGp1c3QgbGluawotICAgICAgICAgICAgLy8g
dGhlIG1hdGNoIGZhaWx1cmVzIHRvIHRoaXMgcG9pbnQsIGFuZCBmYWxsIHRocm91Z2ggdG8gdGhl
IHJldHVybiBiZWxvdy4KLSAgICAgICAgICAgIHN0YXRlLmxpbmtBbHRlcm5hdGl2ZUJhY2t0cmFj
a3ModGhpcywgdHJ1ZSk7CisgICAgICAgICAgICAgICAgLy8gRm9yIGZpeGVkIGNvdW50IChhbHdh
eXMgZXhlY3V0ZWQgb25jZSkgc3VicGF0dGVybnMsIG5vdGhpbmcgdG8gZG8gaGVyZS4KKyAgICAg
ICAgICAgICAgICBpZiAodGVybS0+cXVhbnRpdHlUeXBlICE9IFF1YW50aWZpZXJGaXhlZENvdW50
KSB7CisgICAgICAgICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGluayh0aGlzKTsK
KworICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayB3aGV0aGVyIHdlIHNob3VsZCBiYWNrdHJh
Y2sgYmFjayBpbnRvIHRoZSBwYXJldGhlc2VzLCBvciBpZiB3ZQorICAgICAgICAgICAgICAgICAg
ICAvLyBhcmUgY3VycmVudGx5IGluIGEgc3RhdGUgd2hlcmUgd2UgaGFkIHNraXBwZWQgb3ZlciB0
aGUgc3VicGF0dGVybgorICAgICAgICAgICAgICAgICAgICAvLyAoaW4gd2hpY2ggY2FzZSB0aGUg
ZmxhZyB2YWx1ZSBvbiB0aGUgc3RhY2sgd2lsbCBiZSAtMSkuCisgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiA9IHRlcm0tPmZyYW1lTG9jYXRpb247
CisgICAgICAgICAgICAgICAgICAgIEp1bXAgaGFkU2tpcHBlZCA9IGJyYW5jaDMyKEVxdWFsLCBB
ZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gKiBz
aXplb2Yodm9pZCopKSwgVHJ1c3RlZEltbTMyKC0xKSk7CisKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHRlcm0tPnF1YW50aXR5VHlwZSA9PSBRdWFudGlmaWVyR3JlZWR5KSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBGb3IgR3JlZWR5IHBhcmV0aGVzZXMsIHdlIHNraXAgYWZ0ZXIgaGF2
aW5nIGFscmVhZHkgdHJpZWQgZ29pbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRocm91
Z2ggdGhlIHN1YnBhdHRlcm4sIHNvIGlmIHdlIGdldCBoZXJlIHdlJ3JlIGRvbmUuCisgICAgICAg
ICAgICAgICAgICAgICAgICBZYXJyT3AmIGJlZ2luT3AgPSBtX29wc1tvcC5tX3ByZXZpb3VzT3Bd
OworICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW5PcC5tX2p1bXBzLmFwcGVuZChoYWRTa2lw
cGVkKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIEZvciBOb25HcmVlZHkgcGFyZXRoZXNlcywgd2UgdHJ5IHNraXBwaW5nIHRoZSBzdWJw
YXR0ZXJuIGZpcnN0LAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gc28gaWYgd2UgZ2V0IGhl
cmUgd2UgbmVlZCB0byB0cnkgcnVubmluZyB0aHJvdWdoIHRoZSBzdWJwYXR0ZXJuCisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBuZXh0LiBKdW1wIGJhY2sgdG8gdGhlIHN0YXJ0IG9mIHRoZSBw
YXJlbnRoZXNlcyBpbiB0aGUgZm9yd2FyZHMKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1h
dGNoaW5nIHBhdGguCisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQodGVybS0+cXVhbnRp
dHlUeXBlID09IFF1YW50aWZpZXJOb25HcmVlZHkpOworICAgICAgICAgICAgICAgICAgICAgICAg
WWFyck9wJiBiZWdpbk9wID0gbV9vcHNbb3AubV9wcmV2aW91c09wXTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGhhZFNraXBwZWQubGlua1RvKGJlZ2luT3AubV9yZWVudHJ5LCB0aGlzKTsKKyAg
ICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBub3RFbm91Z2hJbnB1dEZvclByZXZp
b3VzQWx0ZXJuYXRpdmUubGluayh0aGlzKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IC8vIEhvdyBtdWNoIG1vcmUgaW5wdXQgbmVlZCB0aGVyZSBiZSB0byBiZSBhYmxlIHRvIHJldHJ5
IGZyb20gdGhlIGZpcnN0IGFsdGVybmF0aXZlPwotICAgICAgICAgICAgLy8gZXhhbXBsZXM6Ci0g
ICAgICAgICAgICAvLyAgIC95YXJyX2ppdC8gb3IgL3dyZWN8cGNyZS8KLSAgICAgICAgICAgIC8v
ICAgICBJbiB0aGVzZSBleGFtcGxlcyB3ZSBuZWVkIGNoZWNrIGZvciBvbmUgbW9yZSBpbnB1dCBi
ZWZvcmUgbG9vcGluZy4KLSAgICAgICAgICAgIC8vICAgL3lhcnJfaml0fHBjcmUvCi0gICAgICAg
ICAgICAvLyAgICAgSW4gdGhpcyBjYXNlIHdlIG5lZWQgY2hlY2sgZm9yIDUgbW9yZSBpbnB1dCB0
byBsb29wICgrNCB0byBhbGxvdyBmb3IgdGhlIGZpcnN0IGFsdGVyYXRpdmUKLSAgICAgICAgICAg
IC8vICAgICBiZWluZyBmb3VyIGxvbmdlciB0aGFuIHRoZSBsYXN0IGFsdGVybmF0aXZlIGNoZWNr
ZWQsIGFuZCBhbm90aGVyICsxIHRvIGVmZmVjdGl2ZWx5IG1vdmUKLSAgICAgICAgICAgIC8vICAg
ICB0aGUgc3RhcnQgcG9zaXRpb24gYWxvbmcgYnkgb25lKS4KLSAgICAgICAgICAgIC8vICAgL3lh
cnJ8cnVsZXMvIG9yIC93cmVjfG5vdHNvbXVjaC8KLSAgICAgICAgICAgIC8vICAgICBJbiB0aGVz
ZSBleGFtcGxlcywgcHJvdmlkZWQgdGhhdCB0aGVyZSB3YXMgc3VmZmljaWVudCBpbnB1dCB0byBo
YXZlIGp1c3QgYmVlbiBtYXRjaGluZyBmb3IKLSAgICAgICAgICAgIC8vICAgICB0aGUgc2Vjb25k
IGFsdGVybmF0aXZlIHdlIGNhbiBsb29wIHdpdGhvdXQgY2hlY2tpbmcgZm9yIGF2YWlsYWJsZSBp
bnB1dCAoc2luY2UgdGhlIHNlY29uZAotICAgICAgICAgICAgLy8gICAgIGFsdGVybmF0aXZlIGlz
IGxvbmdlciB0aGFuIHRoZSBmaXJzdCkuICBJbiB0aGUgbGF0dGVyIGV4YW1wbGUgd2UgbmVlZCB0
byBkZWNyZW1lbnQgaW5kZXgKLSAgICAgICAgICAgIC8vICAgICAoYnkgNCkgc28gdGhlIHN0YXJ0
IHBvc2l0aW9uIGlzIG9ubHkgcHJvZ3Jlc3NlZCBieSAxIGZyb20gdGhlIGxhc3QgaXRlcmF0aW9u
LgotICAgICAgICAgICAgaW50IGluY3JlbWVudEZvck5leHRJdGVyID0gKGNvdW50VG9DaGVja0Zv
ckZpcnN0QWx0ZXJuYXRpdmUgLSBjb3VudENoZWNrZWRGb3JDdXJyZW50QWx0ZXJuYXRpdmUpICsg
MTsKLQotICAgICAgICAgICAgLy8gRmlyc3QsIGRlYWwgd2l0aCB0aGUgY2FzZXMgd2hlcmUgdGhl
cmUgd2FzIHN1ZmZpY2llbnQgaW5wdXQgdG8gdHJ5IHRoZSBsYXN0IGFsdGVybmF0aXZlLgotICAg
ICAgICAgICAgaWYgKGluY3JlbWVudEZvck5leHRJdGVyID4gMCkgLy8gV2UgbmVlZCB0byBjaGVj
ayBmb3IgbW9yZSBpbnB1dCBhbnl3YXksIGZhbGwgdGhyb3VnaCB0byB0aGUgY2hlY2tpbmcgYmVs
b3cuCi0gICAgICAgICAgICAgICAgc3RhdGUubGlua0FsdGVybmF0aXZlQmFja3RyYWNrcyh0aGlz
LCB0cnVlKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKG1fcGF0dGVybi5tX2JvZHktPm1faGFzRml4
ZWRTaXplICYmICFpbmNyZW1lbnRGb3JOZXh0SXRlcikgLy8gTm8gbmVlZCB0byB1cGRhdGUgYW55
dGhpbmcsIGxpbmsgdGhlc2UgYmFja3RyYWNrcyBzdHJhaWdodCB0byB0aGUgdG8gcG9mIHRoZSBs
b29wIQotICAgICAgICAgICAgICAgIHN0YXRlLmxpbmtBbHRlcm5hdGl2ZUJhY2t0cmFja3NUbyh0
aGlzLCBmaXJzdEFsdGVybmF0aXZlSW5wdXRDaGVja2VkLCB0cnVlKTsKLSAgICAgICAgICAgIGVs
c2UgeyAvLyBubyBuZWVkIHRvIGNoZWNrIHRoZSBpbnB1dCwgYnV0IHdlIGRvIGhhdmUgc29tZSBi
b29ra2VlcGluZyB0byBkbyBmaXJzdC4KLSAgICAgICAgICAgICAgICBzdGF0ZS5saW5rQWx0ZXJu
YXRpdmVCYWNrdHJhY2tzKHRoaXMsIHRydWUpOwotCi0gICAgICAgICAgICAgICAgLy8gV2hlcmUg
bmVjZXNzYXJ5IHVwZGF0ZSBvdXIgcHJlc2VydmVkIHN0YXJ0IHBvc2l0aW9uLgotICAgICAgICAg
ICAgICAgIGlmICghbV9wYXR0ZXJuLm1fYm9keS0+bV9oYXNGaXhlZFNpemUpIHsKLSAgICAgICAg
ICAgICAgICAgICAgbW92ZShpbmRleCwgcmVnVDApOwotICAgICAgICAgICAgICAgICAgICBzdWIz
MihJbW0zMihjb3VudENoZWNrZWRGb3JDdXJyZW50QWx0ZXJuYXRpdmUgLSAxKSwgcmVnVDApOwot
ICAgICAgICAgICAgICAgICAgICBzdG9yZTMyKHJlZ1QwLCBBZGRyZXNzKG91dHB1dCkpOwotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBpbmRleCBpZiBuZWNl
c3NhcnksIGFuZCBsb29wICh3aXRob3V0IGNoZWNraW5nKS4KLSAgICAgICAgICAgICAgICBpZiAo
aW5jcmVtZW50Rm9yTmV4dEl0ZXIpCi0gICAgICAgICAgICAgICAgICAgIGFkZDMyKEltbTMyKGlu
Y3JlbWVudEZvck5leHRJdGVyKSwgaW5kZXgpOwotICAgICAgICAgICAgICAgIGp1bXAoKS5saW5r
VG8oZmlyc3RBbHRlcm5hdGl2ZUlucHV0Q2hlY2tlZCwgdGhpcyk7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIG5vdEVub3VnaElucHV0Rm9yUHJldmlvdXNBbHRlcm5hdGl2ZS5saW5rKHRo
aXMpOwotICAgICAgICAgICAgLy8gVXBkYXRlIG91ciBpZGVhIG9mIHRoZSBzdGFydCBwb3NpdGlv
biwgaWYgd2UncmUgdHJhY2tpbmcgdGhpcy4KLSAgICAgICAgICAgIGlmICghbV9wYXR0ZXJuLm1f
Ym9keS0+bV9oYXNGaXhlZFNpemUpIHsKLSAgICAgICAgICAgICAgICBpZiAoY291bnRDaGVja2Vk
Rm9yQ3VycmVudEFsdGVybmF0aXZlIC0gMSkgewotICAgICAgICAgICAgICAgICAgICBtb3ZlKGlu
ZGV4LCByZWdUMCk7Ci0gICAgICAgICAgICAgICAgICAgIHN1YjMyKEltbTMyKGNvdW50Q2hlY2tl
ZEZvckN1cnJlbnRBbHRlcm5hdGl2ZSAtIDEpLCByZWdUMCk7Ci0gICAgICAgICAgICAgICAgICAg
IHN0b3JlMzIocmVnVDAsIEFkZHJlc3Mob3V0cHV0KSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICAgICAgICAgIHN0b3JlMzIoaW5kZXgsIEFkZHJlc3Mob3V0cHV0KSk7Cisg
ICAgICAgICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUuZmFsbHRocm91Z2goKTsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmFw
cGVuZChvcC5tX2p1bXBzKTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlcmUgaXMgc3VmZmljZW50IGlucHV0IHRvIHJ1
biB0aGUgZmlyc3QgYWx0ZXJuYXRpdmUgYWdhaW4uCi0gICAgICAgICAgICBqdW1wSWZBdmFpbGFi
bGVJbnB1dChpbmNyZW1lbnRGb3JOZXh0SXRlcikubGlua1RvKGZpcnN0QWx0ZXJuYXRpdmVJbnB1
dENoZWNrZWQsIHRoaXMpOwotICAgICAgICAgICAgLy8gTm8gLSBpbnN1ZmZpY2VudCBpbnB1dCB0
byBydW4gdGhlIGZpcnN0IGFsdGVyYW5hdGl2ZSwgYXJlIHRoZXJlIGFueSBvdGhlciBhbHRlcm5h
dGl2ZXMgd2UKLSAgICAgICAgICAgIC8vIG1pZ2h0IG5lZWQgdG8gY2hlY2s/ICBJZiBzbywgdGhl
IGxhc3QgY2hlY2sgd2lsbCBoYXZlIGxlZnQgdGhlIGluZGV4IGluY3JlbWVudGVkIGJ5Ci0gICAg
ICAgICAgICAvLyAoY291bnRUb0NoZWNrRm9yRmlyc3RBbHRlcm5hdGl2ZSArIDEpLCBzbyB3ZSBu
ZWVkIHRlc3Qgd2hldGhlciBjb3VudFRvQ2hlY2tGb3JGaXJzdEFsdGVybmF0aXZlCi0gICAgICAg
ICAgICAvLyBMRVNTIGlucHV0IGlzIGF2YWlsYWJsZSwgdG8gaGF2ZSB0aGUgZWZmZWN0IG9mIGp1
c3QgcHJvZ3Jlc3NpbmcgdGhlIHN0YXJ0IHBvc2l0aW9uIGJ5IDEKLSAgICAgICAgICAgIC8vIGZy
b20gdGhlIGxhc3QgaXRlcmF0aW9uLiAgSWYgdGhpcyBjaGVjayBwYXNzZXMgd2UgY2FuIGp1c3Qg
anVtcCB1cCB0byB0aGUgY2hlY2sgYXNzb2NpYXRlZAotICAgICAgICAgICAgLy8gd2l0aCB0aGUg
Zmlyc3QgYWx0ZXJuYXRpdmUgaW4gdGhlIGxvb3AuICBUaGlzIGlzIGEgYml0IHNhZCwgc2luY2Ug
d2UnbGwgZW5kIHVwIHRyeWluZyB0aGUKLSAgICAgICAgICAgIC8vIGZpcnN0IGFsdGVybmF0aXZl
IGFnYWluLCBhbmQgdGhpcyBjaGVjayB3aWxsIGZhaWwgKG90aGVyd2lzZSB0aGUgY2hlY2sgcGxh
bnRlZCBqdXN0IGFib3ZlCi0gICAgICAgICAgICAvLyBoZXJlIHdvdWxkIGhhdmUgcGFzc2VkKS4g
IFRoaXMgaXMgYSBiaXQgc2FkLCBob3dldmVyIGl0IHNhdmVzIHRyeWluZyB0byBkbyBzb21ldGhp
bmcgbW9yZQotICAgICAgICAgICAgLy8gY29tcGxleCBoZXJlIGluIGNvbXBpbGF0aW9uLCBhbmQg
aW4gdGhlIGNvbW1vbiBjYXNlIHdlIHNob3VsZCBlbmQgdXAgY29hbGxlc2NpbmcgdGhlIGNoZWNr
cy4KKyAgICAgICAgICAgIC8vIE9wUGFyZW50aGVzZXNTdWJwYXR0ZXJuVGVybWluYWxCZWdpbi9F
bmQKICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBGSVhNRTogYSBuaWNlIGltcHJvdmVt
ZW50IGhlcmUgbWF5IGJlIHRvIHN0b3AgdHJ5aW5nIHRvIG1hdGNoIHNvb25lciwgYmFzZWQgb24g
dGhlIGxlYXN0Ci0gICAgICAgICAgICAvLyBvZiB0aGUgbWluaW11bS1hbHRlcm5hdGl2ZS1sZW5n
dGhzLiAgRS5nLiBpZiBJIGhhdmUgdHdvIGFsdGVybmF0aXZlcyBvZiBsZW5ndGggMjAwIGFuZCAx
NTAsCi0gICAgICAgICAgICAvLyBhbmQgYSBzdHJpbmcgb2YgbGVuZ3RoIDEwMCwgd2UnbGwgZW5k
IHVwIGxvb3BpbmcgaW5kZXggZnJvbSAwIHRvIDEwMCwgY2hlY2tpbmcgd2hldGhlciB0aGVyZQot
ICAgICAgICAgICAgLy8gaXMgc3VmZmljaWVudCBpbnB1dCB0byBydW4gZWl0aGVyIGFsdGVybmF0
aXZlIChjb25zdGFudGx5IGZhaWxpbmcpLiAgSWYgdGhlcmUgaGFkIGJlZW4gb25seQotICAgICAg
ICAgICAgLy8gb25lIGFsdGVybmF0aXZlLCBvciBpZiB0aGUgc2hvcnRlciBhbHRlcm5hdGl2ZSBo
YWQgY29tZSBmaXJzdCwgd2Ugd291bGQgaGF2ZSB0ZXJtaW5hdGVkCi0gICAgICAgICAgICAvLyBp
bW1lZGlhdGVseS4gOi0vCi0gICAgICAgICAgICBpZiAoaGFzU2hvcnRlckFsdGVybmF0aXZlcykK
LSAgICAgICAgICAgICAgICBqdW1wSWZBdmFpbGFibGVJbnB1dCgtY291bnRUb0NoZWNrRm9yRmly
c3RBbHRlcm5hdGl2ZSkubGlua1RvKGZpcnN0QWx0ZXJuYXRpdmUsIHRoaXMpOwotICAgICAgICAg
ICAgLy8gaW5kZXggd2lsbCBub3cgYmUgYSBiaXQgZ2FyYmxlZCAoZGVwZW5kaW5nIG9uIHdoZXRo
ZXIgJ2hhc1Nob3J0ZXJBbHRlcm5hdGl2ZXMnIGlzIHRydWUsCi0gICAgICAgICAgICAvLyBpdCBo
YXMgZWl0aGVyIGJlZW4gaW5jcmVtZW50ZWQgYnkgMSBvciBieSAoY291bnRUb0NoZWNrRm9yRmly
c3RBbHRlcm5hdGl2ZSArIDEpIC4uLiAKLSAgICAgICAgICAgIC8vIGJ1dCBzaW5jZSB3ZSdyZSBh
Ym91dCB0byByZXR1cm4gYSBmYWlsdXJlIHRoaXMgZG9lc24ndCByZWFsbHkgbWF0dGVyISkKKyAg
ICAgICAgICAgIC8vIFRlcm1pbmFsIHN1YnBhdHRlcm5zIHdpbGwgYWx3YXlzIG1hdGNoIC0gdGhl
cmUgaXMgbm90aGluZyBhZnRlciB0aGVtIHRvCisgICAgICAgICAgICAvLyBmb3JjZSBhIGJhY2t0
cmFjaywgYW5kIHRoZXkgaGF2ZSBhIG1pbmltdW0gY291bnQgb2YgMCwgYW5kIGFzIHN1Y2ggd2ls
bAorICAgICAgICAgICAgLy8gYWx3YXlzIHByb2R1Y2UgYW4gYWNjZXB0YWJsZSByZXN1bHQuCisg
ICAgICAgICAgICBjYXNlIE9wUGFyZW50aGVzZXNTdWJwYXR0ZXJuVGVybWluYWxCZWdpbjogewor
ICAgICAgICAgICAgICAgIC8vIFdlIHdpbGwgYmFja3RyYWNrIHRvIHRoaXMgcG9pbnQgb25jZSB0
aGUgc3VicGF0dGVybiBjYW5ub3QgbWF0Y2ggYW55CisgICAgICAgICAgICAgICAgLy8gbW9yZS4g
U2luY2Ugbm8gbWF0Y2ggaXMgYWNjZXB0ZWQgYXMgYSBzdWNjZXNzZnVsIG1hdGNoICh3ZSBhcmUg
R3JlZWR5CisgICAgICAgICAgICAgICAgLy8gcXVhbnRpZmllZCB3aXRoIGEgbWluaW11bSBvZiB6
ZXJvKSBqdW1wIGJhY2sgdG8gdGhlIGZvcndhcmRzIG1hdGNoaW5nCisgICAgICAgICAgICAgICAg
Ly8gcGF0aCBhdCB0aGUgZW5kLgorICAgICAgICAgICAgICAgIFlhcnJPcCYgZW5kT3AgPSBtX29w
c1tvcC5tX25leHRPcF07CisgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5r
VG8oZW5kT3AubV9yZWVudHJ5LCB0aGlzKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgT3BQYXJlbnRoZXNlc1N1YnBhdHRlcm5UZXJtaW5h
bEVuZDoKKyAgICAgICAgICAgICAgICAvLyBXZSBzaG91bGQgbmV2ZXIgYmUgYmFja3RyYWNraW5n
ICB0byBoZXJlIChoZW5jZSB0aGUgJ3Rlcm1pbmFsJyBpbiB0aGUgbmFtZSkuCisgICAgICAgICAg
ICAgICAgQVNTRVJUKG1fYmFja3RyYWNraW5nU3RhdGUuaXNFbXB0eSgpKTsKKyAgICAgICAgICAg
ICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmFwcGVuZChvcC5tX2p1bXBzKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICAgICAgLy8gT3BQYXJlbnRoZXRpY2FsQXNzZXJ0aW9uQmVn
aW4vRW5kCisgICAgICAgICAgICBjYXNlIE9wUGFyZW50aGV0aWNhbEFzc2VydGlvbkJlZ2luOiB7
CisgICAgICAgICAgICAgICAgUGF0dGVyblRlcm0qIHRlcm0gPSBvcC5tX3Rlcm07CisgICAgICAg
ICAgICAgICAgWWFyck9wJiBlbmRPcCA9IG1fb3BzW29wLm1fbmV4dE9wXTsKKworICAgICAgICAg
ICAgICAgIC8vIFdlIG5lZWQgdG8gaGFuZGxlIHRoZSBiYWNrdHJhY2tzIHVwb24gYmFja3RyYWNr
aW5nIGJhY2sgb3V0CisgICAgICAgICAgICAgICAgLy8gb2YgYSBwYXJlbnRoZXRpY2FsIGFzc2Vy
dGlvbiBpZiBlaXRoZXIgd2UgbmVlZCB0byBjb3JyZWN0CisgICAgICAgICAgICAgICAgLy8gdGhl
IGlucHV0IGluZGV4LCBvciB0aGUgYXNzZXJ0aW9uIHdhcyBpbnZlcnRlZC4KKyAgICAgICAgICAg
ICAgICBpZiAob3AubV9jaGVja0FkanVzdCB8fCB0ZXJtLT5pbnZlcnQoKSkgeworICAgICAgICAg
ICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5rKHRoaXMpOworCisgICAgICAgICAg
ICAgICAgICAgIGlmIChvcC5tX2NoZWNrQWRqdXN0KQorICAgICAgICAgICAgICAgICAgICAgICAg
YWRkMzIoSW1tMzIob3AubV9jaGVja0FkanVzdCksIGluZGV4KTsKKworICAgICAgICAgICAgICAg
ICAgICAvLyBJbiBhbiBpbnZlcnRlZCBhc3NlcnRpb24gZmFpbHVyZSB0byBtYXRjaCB0aGUgc3Vi
cGF0dGVybgorICAgICAgICAgICAgICAgICAgICAvLyBpcyB0cmVhdGVkIGFzIGEgc3VjY2Vzc2Z1
bCBtYXRjaCAtIGp1bXAgdG8gdGhlIGVuZCBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgLy8g
c3VicGF0dGVybi4gV2UgYWxyZWFkeSBoYXZlIGFkanVzdGVkIHRoZSBpbnB1dCBwb3NpdGlvbgor
ICAgICAgICAgICAgICAgICAgICAvLyBiYWNrIHRvIHRoYXQgYmVmb3JlIHRoZSBhc3NlcnRpb24s
IHdoaWNoIGlzIGNvcnJlY3QuCisgICAgICAgICAgICAgICAgICAgIGlmICh0ZXJtLT5pbnZlcnQo
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGp1bXAoZW5kT3AubV9yZWVudHJ5KTsKKworICAg
ICAgICAgICAgICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmZhbGx0aHJvdWdoKCk7CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gVGhlIEVuZCBub2RlJ3MganVtcCBs
aXN0IHdpbGwgY29udGFpbiBhbnkgYmFja3RyYWNrcyBpbnRvCisgICAgICAgICAgICAgICAgLy8g
dGhlIGVuZCBvZiB0aGUgYXNzZXJ0aW9uLiAgQWxzbywgaWYgaW52ZXJ0ZWQsIHdlIHdpbGwgaGF2
ZQorICAgICAgICAgICAgICAgIC8vIGFkZGVkIHRoZSBmYWlsdXJlIGNhdXNlZCBieSBhIHN1Y2Nl
c3NmdWwgbWF0Y2ggdG8gdGhpcy4KKyAgICAgICAgICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRl
LmFwcGVuZChlbmRPcC5tX2p1bXBzKTsKKworICAgICAgICAgICAgICAgIG1fY2hlY2tlZCArPSBv
cC5tX2NoZWNrQWRqdXN0OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgY2FzZSBPcFBhcmVudGhldGljYWxBc3NlcnRpb25FbmQ6IHsKKyAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHJlYWxseSBiZSBjbGVhcmluZyBhbnkgbmVzdGVk
IHN1YnBhdHRlcm4KKyAgICAgICAgICAgICAgICAvLyBtYXRjaGVzIG9uIGJhaWxpbmcgb3V0IGZy
b20gYWZ0ZXIgdGhlIHBhdHRlcm4uIEZpcmVmb3ggaGFzCisgICAgICAgICAgICAgICAgLy8gdGhp
cyBidWcgdG9vIChwcmVzdW1hYmx5IGJlY2F1c2UgdGhleSB1c2UgWUFSUiEpCisKKyAgICAgICAg
ICAgICAgICAvLyBOZXZlciBiYWNrdHJhY2sgaW50byBhbiBhc3NlcnRpb247IGxhdGVyIGZhaWx1
cmVzIGJhaWwgdG8gYmVmb3JlIHRoZSBiZWdpbi4KKyAgICAgICAgICAgICAgICBtX2JhY2t0cmFj
a2luZ1N0YXRlLnRha2VCYWNrdHJhY2tzVG9KdW1wTGlzdChvcC5tX2p1bXBzLCB0aGlzKTsKKwor
ICAgICAgICAgICAgICAgIFlhcnJPcCYgbGFzdE9wID0gbV9vcHNbb3AubV9wcmV2aW91c09wXTsK
KyAgICAgICAgICAgICAgICBtX2NoZWNrZWQgLT0gbGFzdE9wLm1fY2hlY2tBZGp1c3Q7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNhc2UgT3BN
YXRjaEZhaWxlZDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICB9IHdoaWxlKG9wSW5kZXgpOworICAgIH0KKworICAgIC8vIENvbXBpbGF0aW9uIG1ldGhv
ZHM6CisgICAgLy8gPT09PT09PT09PT09PT09PT09PT0KKworICAgIC8vIG9wQ29tcGlsZVBhcmVu
dGhlc2VzU3VicGF0dGVybgorICAgIC8vIEVtaXRzIG9wcyBmb3IgYSBzdWJwYXR0ZXJuIChzZXQg
b2YgcGFyZW50aGVzZXMpLiBUaGVzZSBjb25zaXN0CisgICAgLy8gb2YgYSBzZXQgb2YgYWx0ZXJu
YXRpdmVzIHdyYXBwZWQgaW4gYW4gb3V0ZXIgc2V0IG9mIG5vZGVzIGZvcgorICAgIC8vIHRoZSBw
YXJlbnRoZXNlcy4KKyAgICAvLyBTdXBwb3J0ZWQgdHlwZXMgb2YgcGFyZW50aGVzZXMgYXJlICdP
bmNlJyAocXVhbnRpdHlDb3VudCA9PSAxKQorICAgIC8vIGFuZCAnVGVybWluYWwnIChub24tY2Fw
dHVyaW5nIHBhcmVudGhlc2VzIHF1YW50aWZpZWQgYXMgZ3JlZWR5CisgICAgLy8gYW5kIGluZmlu
aXRlKS4KKyAgICAvLyBBbHRlcm5hdGl2ZXMgd2lsbCB1c2UgdGhlICdTaW1wbGUnIHNldCBvZiBv
cHMgaWYgZWl0aGVyIHRoZQorICAgIC8vIHN1YnBhdHRlcm4gaXMgdGVybWluYWwgKGluIHdoaWNo
IGNhc2Ugd2Ugd2lsbCBuZXZlciBuZWVkIHRvCisgICAgLy8gYmFja3RyYWNrKSwgb3IgaWYgdGhl
IHN1YnBhdHRlcm4gb25seSBjb250YWlucyBvbmUgYWx0ZXJuYXRpdmUuCisgICAgdm9pZCBvcENv
bXBpbGVQYXJlbnRoZXNlc1N1YnBhdHRlcm4oUGF0dGVyblRlcm0qIHRlcm0pCisgICAgeworICAg
ICAgICBZYXJyT3BDb2RlIHBhcmVudGhlc2VzQmVnaW5PcENvZGU7CisgICAgICAgIFlhcnJPcENv
ZGUgcGFyZW50aGVzZXNFbmRPcENvZGU7CisgICAgICAgIFlhcnJPcENvZGUgYWx0ZXJuYXRpdmVC
ZWdpbk9wQ29kZSA9IE9wU2ltcGxlTmVzdGVkQWx0ZXJuYXRpdmVCZWdpbjsKKyAgICAgICAgWWFy
ck9wQ29kZSBhbHRlcm5hdGl2ZU5leHRPcENvZGUgPSBPcFNpbXBsZU5lc3RlZEFsdGVybmF0aXZl
TmV4dDsKKyAgICAgICAgWWFyck9wQ29kZSBhbHRlcm5hdGl2ZUVuZE9wQ29kZSA9IE9wU2ltcGxl
TmVzdGVkQWx0ZXJuYXRpdmVFbmQ7CisKKyAgICAgICAgLy8gV2UgY2FuIGN1cnJlbnRseSBvbmx5
IGNvbXBpbGUgcXVhbnRpdHkgMSBzdWJwYXR0ZXJucyB0aGF0IGFyZQorICAgICAgICAvLyBub3Qg
Y29waWVzLiBXZSBnZW5lcmF0ZSBhIGNvcHkgaW4gdGhlIGNhc2Ugb2YgYSByYW5nZSBxdWFudGlm
aWVyLAorICAgICAgICAvLyBlLmcuIC8oPzp4KXszLDl9Lywgb3IgLyg/OngpKy8gKFRoZXNlIGFy
ZSBlZmZlY3RpdmVseSBleHBhbmRlZCB0bworICAgICAgICAvLyAvKD86eCl7MywzfSg/OngpezAs
Nn0vIGFuZCAvKD86eCkoPzp4KSovIHJlcGVjdGl2ZWx5KS4gVGhlIHByb2JsZW0KKyAgICAgICAg
Ly8gY29tZXMgd2hlcmUgdGhlIHN1YnBhdHRlcm4gaXMgY2FwdHVyaW5nLCBpbiB3aGljaCBjYXNl
IHdlIHdvdWxkCisgICAgICAgIC8vIG5lZWQgdG8gcmVzdG9yZSB0aGUgY2FwdHVyZSBmcm9tIHRo
ZSBmaXJzdCBzdWJwYXR0ZXJuIHVwb24gYQorICAgICAgICAvLyBmYWlsdXJlIGluIHRoZSBzZWNv
bmQuCisgICAgICAgIGlmICh0ZXJtLT5xdWFudGl0eUNvdW50ID09IDEgJiYgIXRlcm0tPnBhcmVu
dGhlc2VzLmlzQ29weSkgeworICAgICAgICAgICAgLy8gU2VsZWN0IHRoZSAnT25jZScgbm9kZXMu
CisgICAgICAgICAgICBwYXJlbnRoZXNlc0JlZ2luT3BDb2RlID0gT3BQYXJlbnRoZXNlc1N1YnBh
dHRlcm5PbmNlQmVnaW47CisgICAgICAgICAgICBwYXJlbnRoZXNlc0VuZE9wQ29kZSA9IE9wUGFy
ZW50aGVzZXNTdWJwYXR0ZXJuT25jZUVuZDsKKworICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMg
bW9yZSB0aGFuIG9uZSBhbHRlcm5hdGl2ZSB3ZSBjYW5ub3QgdXNlIHRoZSAnc2ltcGxlJyBub2Rl
cy4KKyAgICAgICAgICAgIGlmICh0ZXJtLT5wYXJlbnRoZXNlcy5kaXNqdW5jdGlvbi0+bV9hbHRl
cm5hdGl2ZXMuc2l6ZSgpICE9IDEpIHsKKyAgICAgICAgICAgICAgICBhbHRlcm5hdGl2ZUJlZ2lu
T3BDb2RlID0gT3BOZXN0ZWRBbHRlcm5hdGl2ZUJlZ2luOworICAgICAgICAgICAgICAgIGFsdGVy
bmF0aXZlTmV4dE9wQ29kZSA9IE9wTmVzdGVkQWx0ZXJuYXRpdmVOZXh0OworICAgICAgICAgICAg
ICAgIGFsdGVybmF0aXZlRW5kT3BDb2RlID0gT3BOZXN0ZWRBbHRlcm5hdGl2ZUVuZDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICh0ZXJtLT5wYXJlbnRoZXNlcy5pc1Rlcm1pbmFs
KSB7CisgICAgICAgICAgICAvLyBTZWxlY3QgdGhlICdUZXJtaW5hbCcgbm9kZXMuCisgICAgICAg
ICAgICBwYXJlbnRoZXNlc0JlZ2luT3BDb2RlID0gT3BQYXJlbnRoZXNlc1N1YnBhdHRlcm5UZXJt
aW5hbEJlZ2luOworICAgICAgICAgICAgcGFyZW50aGVzZXNFbmRPcENvZGUgPSBPcFBhcmVudGhl
c2VzU3VicGF0dGVyblRlcm1pbmFsRW5kOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
Ly8gVGhpcyBzdWJwYXR0ZXJuIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIEpJVC4KKyAgICAgICAg
ICAgIG1fc2hvdWxkRmFsbEJhY2sgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAKLSAgICAgICAgaWYgKG1fcGF0dGVybi5tX2JvZHktPm1fY2FsbEZyYW1lU2l6ZSkKLSAg
ICAgICAgICAgIGFkZFB0cihJbW0zMihtX3BhdHRlcm4ubV9ib2R5LT5tX2NhbGxGcmFtZVNpemUg
KiBzaXplb2Yodm9pZCopKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgICAgICBzaXplX3Qg
cGFyZW5CZWdpbiA9IG1fb3BzLnNpemUoKTsKKyAgICAgICAgbV9vcHMuYXBwZW5kKHBhcmVudGhl
c2VzQmVnaW5PcENvZGUpOworCisgICAgICAgIC8vIEVtaXQgYWxsIGFsdGVybmF0aXZlcywgY29u
bmVjdCBhcyBhIGRvdWJseSBsaW5rZWQgbGlzdC4KKyAgICAgICAgbV9vcHMuYXBwZW5kKGFsdGVy
bmF0aXZlQmVnaW5PcENvZGUpOworICAgICAgICBtX29wcy5sYXN0KCkubV9wcmV2aW91c09wID0g
bm90Rm91bmQ7CisgICAgICAgIG1fb3BzLmxhc3QoKS5tX3Rlcm0gPSB0ZXJtOworICAgICAgICBW
ZWN0b3I8UGF0dGVybkFsdGVybmF0aXZlKj4mIGFsdGVybmF0aXZlcyA9ICB0ZXJtLT5wYXJlbnRo
ZXNlcy5kaXNqdW5jdGlvbi0+bV9hbHRlcm5hdGl2ZXM7CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBhbHRlcm5hdGl2ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIHNpemVf
dCBsYXN0T3BJbmRleCA9IG1fb3BzLnNpemUoKSAtIDE7CisKKyAgICAgICAgICAgIFBhdHRlcm5B
bHRlcm5hdGl2ZSogbmVzdGVkQWx0ZXJuYXRpdmUgPSBhbHRlcm5hdGl2ZXNbaV07CisgICAgICAg
ICAgICBvcENvbXBpbGVBbHRlcm5hdGl2ZShuZXN0ZWRBbHRlcm5hdGl2ZSk7CisKKyAgICAgICAg
ICAgIHNpemVfdCB0aGlzT3BJbmRleCA9IG1fb3BzLnNpemUoKTsKKyAgICAgICAgICAgIG1fb3Bz
LmFwcGVuZChZYXJyT3AoYWx0ZXJuYXRpdmVOZXh0T3BDb2RlKSk7CisKKyAgICAgICAgICAgIFlh
cnJPcCYgbGFzdE9wID0gbV9vcHNbbGFzdE9wSW5kZXhdOworICAgICAgICAgICAgWWFyck9wJiB0
aGlzT3AgPSBtX29wc1t0aGlzT3BJbmRleF07CisKKyAgICAgICAgICAgIGxhc3RPcC5tX2FsdGVy
bmF0aXZlID0gbmVzdGVkQWx0ZXJuYXRpdmU7CisgICAgICAgICAgICBsYXN0T3AubV9uZXh0T3Ag
PSB0aGlzT3BJbmRleDsKKyAgICAgICAgICAgIHRoaXNPcC5tX3ByZXZpb3VzT3AgPSBsYXN0T3BJ
bmRleDsKKyAgICAgICAgICAgIHRoaXNPcC5tX3Rlcm0gPSB0ZXJtOworICAgICAgICB9CisgICAg
ICAgIFlhcnJPcCYgbGFzdE9wID0gbV9vcHMubGFzdCgpOworICAgICAgICBBU1NFUlQobGFzdE9w
Lm1fb3AgPT0gYWx0ZXJuYXRpdmVOZXh0T3BDb2RlKTsKKyAgICAgICAgbGFzdE9wLm1fb3AgPSBh
bHRlcm5hdGl2ZUVuZE9wQ29kZTsKKyAgICAgICAgbGFzdE9wLm1fYWx0ZXJuYXRpdmUgPSAwOwor
ICAgICAgICBsYXN0T3AubV9uZXh0T3AgPSBub3RGb3VuZDsKKworICAgICAgICBzaXplX3QgcGFy
ZW5FbmQgPSBtX29wcy5zaXplKCk7CisgICAgICAgIG1fb3BzLmFwcGVuZChwYXJlbnRoZXNlc0Vu
ZE9wQ29kZSk7CisKKyAgICAgICAgbV9vcHNbcGFyZW5CZWdpbl0ubV90ZXJtID0gdGVybTsKKyAg
ICAgICAgbV9vcHNbcGFyZW5CZWdpbl0ubV9wcmV2aW91c09wID0gbm90Rm91bmQ7CisgICAgICAg
IG1fb3BzW3BhcmVuQmVnaW5dLm1fbmV4dE9wID0gcGFyZW5FbmQ7CisgICAgICAgIG1fb3BzW3Bh
cmVuRW5kXS5tX3Rlcm0gPSB0ZXJtOworICAgICAgICBtX29wc1twYXJlbkVuZF0ubV9wcmV2aW91
c09wID0gcGFyZW5CZWdpbjsKKyAgICAgICAgbV9vcHNbcGFyZW5FbmRdLm1fbmV4dE9wID0gbm90
Rm91bmQ7CisgICAgfQorCisgICAgLy8gb3BDb21waWxlUGFyZW50aGV0aWNhbEFzc2VydGlvbgor
ICAgIC8vIEVtaXRzIG9wcyBmb3IgYSBwYXJlbnRoZXRpY2FsIGFzc2VydGlvbi4gVGhlc2UgY29u
c2lzdCBvZiBhbgorICAgIC8vIE9wU2ltcGxlTmVzdGVkQWx0ZXJuYXRpdmVCZWdpbi9OZXh0L0Vu
ZCBzZXQgb2Ygbm9kZXMgd3JhcHBpbmcKKyAgICAvLyB0aGUgYWx0ZXJuYXRpdmVzLCB3aXRoIHRo
ZXNlIHdyYXBwZWQgYnkgYW4gb3V0ZXIgcGFpciBvZgorICAgIC8vIE9wUGFyZW50aGV0aWNhbEFz
c2VydGlvbkJlZ2luL0VuZCBub2Rlcy4KKyAgICAvLyBXZSBjYW4gYWx3YXlzIHVzZSB0aGUgT3BT
aW1wbGVOZXN0ZWRBbHRlcm5hdGl2ZSBub2RlcyBpbiB0aGUKKyAgICAvLyBjYXNlIG9mIHBhcmVu
dGhldGljYWwgYXNzZXJ0aW9ucyBzaW5jZSB0aGVzZSBvbmx5IGV2ZXIgbWF0Y2gKKyAgICAvLyBv
bmNlLCBhbmQgd2lsbCBuZXZlciBiYWNrdHJhY2sgYmFjayBpbnRvIHRoZSBhc3NlcnRpb24uCisg
ICAgdm9pZCBvcENvbXBpbGVQYXJlbnRoZXRpY2FsQXNzZXJ0aW9uKFBhdHRlcm5UZXJtKiB0ZXJt
KQorICAgIHsKKyAgICAgICAgc2l6ZV90IHBhcmVuQmVnaW4gPSBtX29wcy5zaXplKCk7CisgICAg
ICAgIG1fb3BzLmFwcGVuZChPcFBhcmVudGhldGljYWxBc3NlcnRpb25CZWdpbik7CisKKyAgICAg
ICAgLy8gRW1pdCBhbGwgYWx0ZXJuYXRpdmVzLCBjb25uZWN0IGFzIGEgZG91Ymx5IGxpbmtlZCBs
aXN0LgorICAgICAgICBtX29wcy5hcHBlbmQoT3BTaW1wbGVOZXN0ZWRBbHRlcm5hdGl2ZUJlZ2lu
KTsKKyAgICAgICAgbV9vcHMubGFzdCgpLm1fcHJldmlvdXNPcCA9IG5vdEZvdW5kOworICAgICAg
ICBtX29wcy5sYXN0KCkubV90ZXJtID0gdGVybTsKKyAgICAgICAgVmVjdG9yPFBhdHRlcm5BbHRl
cm5hdGl2ZSo+JiBhbHRlcm5hdGl2ZXMgPSAgdGVybS0+cGFyZW50aGVzZXMuZGlzanVuY3Rpb24t
Pm1fYWx0ZXJuYXRpdmVzOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYWx0ZXJu
YXRpdmVzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBzaXplX3QgbGFzdE9wSW5kZXggPSBt
X29wcy5zaXplKCkgLSAxOworCisgICAgICAgICAgICBQYXR0ZXJuQWx0ZXJuYXRpdmUqIG5lc3Rl
ZEFsdGVybmF0aXZlID0gYWx0ZXJuYXRpdmVzW2ldOworICAgICAgICAgICAgb3BDb21waWxlQWx0
ZXJuYXRpdmUobmVzdGVkQWx0ZXJuYXRpdmUpOworCisgICAgICAgICAgICBzaXplX3QgdGhpc09w
SW5kZXggPSBtX29wcy5zaXplKCk7CisgICAgICAgICAgICBtX29wcy5hcHBlbmQoWWFyck9wKE9w
U2ltcGxlTmVzdGVkQWx0ZXJuYXRpdmVOZXh0KSk7CisKKyAgICAgICAgICAgIFlhcnJPcCYgbGFz
dE9wID0gbV9vcHNbbGFzdE9wSW5kZXhdOworICAgICAgICAgICAgWWFyck9wJiB0aGlzT3AgPSBt
X29wc1t0aGlzT3BJbmRleF07CisKKyAgICAgICAgICAgIGxhc3RPcC5tX2FsdGVybmF0aXZlID0g
bmVzdGVkQWx0ZXJuYXRpdmU7CisgICAgICAgICAgICBsYXN0T3AubV9uZXh0T3AgPSB0aGlzT3BJ
bmRleDsKKyAgICAgICAgICAgIHRoaXNPcC5tX3ByZXZpb3VzT3AgPSBsYXN0T3BJbmRleDsKKyAg
ICAgICAgICAgIHRoaXNPcC5tX3Rlcm0gPSB0ZXJtOworICAgICAgICB9CisgICAgICAgIFlhcnJP
cCYgbGFzdE9wID0gbV9vcHMubGFzdCgpOworICAgICAgICBBU1NFUlQobGFzdE9wLm1fb3AgPT0g
T3BTaW1wbGVOZXN0ZWRBbHRlcm5hdGl2ZU5leHQpOworICAgICAgICBsYXN0T3AubV9vcCA9IE9w
U2ltcGxlTmVzdGVkQWx0ZXJuYXRpdmVFbmQ7CisgICAgICAgIGxhc3RPcC5tX2FsdGVybmF0aXZl
ID0gMDsKKyAgICAgICAgbGFzdE9wLm1fbmV4dE9wID0gbm90Rm91bmQ7CisKKyAgICAgICAgc2l6
ZV90IHBhcmVuRW5kID0gbV9vcHMuc2l6ZSgpOworICAgICAgICBtX29wcy5hcHBlbmQoT3BQYXJl
bnRoZXRpY2FsQXNzZXJ0aW9uRW5kKTsKKworICAgICAgICBtX29wc1twYXJlbkJlZ2luXS5tX3Rl
cm0gPSB0ZXJtOworICAgICAgICBtX29wc1twYXJlbkJlZ2luXS5tX3ByZXZpb3VzT3AgPSBub3RG
b3VuZDsKKyAgICAgICAgbV9vcHNbcGFyZW5CZWdpbl0ubV9uZXh0T3AgPSBwYXJlbkVuZDsKKyAg
ICAgICAgbV9vcHNbcGFyZW5FbmRdLm1fdGVybSA9IHRlcm07CisgICAgICAgIG1fb3BzW3BhcmVu
RW5kXS5tX3ByZXZpb3VzT3AgPSBwYXJlbkJlZ2luOworICAgICAgICBtX29wc1twYXJlbkVuZF0u
bV9uZXh0T3AgPSBub3RGb3VuZDsKKyAgICB9CisKKyAgICAvLyBvcENvbXBpbGVBbHRlcm5hdGl2
ZQorICAgIC8vIENhbGxlZCB0byBlbWl0IG5vZGVzIGZvciBhbGwgdGVybXMgaW4gYW4gYWx0ZXJu
YXRpdmUuCisgICAgdm9pZCBvcENvbXBpbGVBbHRlcm5hdGl2ZShQYXR0ZXJuQWx0ZXJuYXRpdmUq
IGFsdGVybmF0aXZlKQorICAgIHsKKyAgICAgICAgb3B0aW1pemVBbHRlcm5hdGl2ZShhbHRlcm5h
dGl2ZSk7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFsdGVybmF0aXZlLT5t
X3Rlcm1zLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBQYXR0ZXJuVGVybSogdGVybSA9ICZh
bHRlcm5hdGl2ZS0+bV90ZXJtc1tpXTsKKworICAgICAgICAgICAgc3dpdGNoICh0ZXJtLT50eXBl
KSB7CisgICAgICAgICAgICBjYXNlIFBhdHRlcm5UZXJtOjpUeXBlUGFyZW50aGVzZXNTdWJwYXR0
ZXJuOgorICAgICAgICAgICAgICAgIG9wQ29tcGlsZVBhcmVudGhlc2VzU3VicGF0dGVybih0ZXJt
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMigt
MSksIHJldHVyblJlZ2lzdGVyKTsKKyAgICAgICAgICAgIGNhc2UgUGF0dGVyblRlcm06OlR5cGVQ
YXJlbnRoZXRpY2FsQXNzZXJ0aW9uOgorICAgICAgICAgICAgICAgIG9wQ29tcGlsZVBhcmVudGhl
dGljYWxBc3NlcnRpb24odGVybSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAg
Z2VuZXJhdGVSZXR1cm4oKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
bV9vcHMuYXBwZW5kKHRlcm0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQogCi0g
ICAgICAgIG1fZXhwcmVzc2lvblN0YXRlLmVtaXRQYXJlbnRoZXNlc1RhaWwodGhpcyk7Ci0gICAg
ICAgIG1fZXhwcmVzc2lvblN0YXRlLmVtaXRJbmRpcmVjdEp1bXBUYWJsZSh0aGlzKTsKLSAgICAg
ICAgbV9leHByZXNzaW9uU3RhdGUubGlua1RvTmV4dEl0ZXJhdGlvbih0aGlzKTsKKyAgICAvLyBv
cENvbXBpbGVCb2R5CisgICAgLy8gVGhpcyBtZXRob2QgY29tcGlsZXMgdGhlIGJvZHkgZGlzanVu
Y3Rpb24gb2YgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbi4KKyAgICAvLyBUaGUgYm9keSBjb25zaXN0
cyBvZiB0d28gc2V0cyBvZiBhbHRlcm5hdGl2ZXMgLSB6ZXJvIG9yIG1vcmUgJ29uY2UKKyAgICAv
LyB0aHJvdWdoJyAoQk9MIGFuY2hvcmVkKSBhbHRlcm5hdGl2ZXMsIGZvbGxvd2VkIGJ5IHplcm8g
b3IgbW9yZQorICAgIC8vIHJlcGVhdGVkIGFsdGVybmF0aXZlcy4KKyAgICAvLyBGb3IgZWFjaCBv
ZiB0aGVzZSB0d28gc2V0cyBvZiBhbHRlcmF0aXZlcywgaWYgbm90IGVtcHR5IHRoZXkgd2lsbCBi
ZQorICAgIC8vIHdyYXBwZWQgaW4gYSBzZXQgb2YgT3BCb2R5QWx0ZXJuYXRpdmVCZWdpbi9OZXh0
L0VuZCBub2RlcyAod2l0aCB0aGUKKyAgICAvLyAnYmVnaW4nIG5vZGUgcmVmZXJlbmNpbmcgdGhl
IGZpcnN0IGFsdGVybmF0aXZlLCBhbmQgJ25leHQnIG5vZGVzCisgICAgLy8gcmVmZXJlbmNpbmcg
YW55IGZ1cnRoZXIgYWx0ZXJuYXRpdmVzLiBUaGUgYmVnaW4vbmV4dC9lbmQgbm9kZXMgYXJlCisg
ICAgLy8gbGlua2VkIHRvZ2V0aGVyIGluIGEgZG91Ymx5IGxpbmtlZCBsaXN0LiBJbiB0aGUgY2Fz
ZSBvZiByZXBlYXRpbmcKKyAgICAvLyBhbHRlcm5hdGl2ZXMsIHRoZSBlbmQgbm9kZSBpcyBhbHNv
IGxpbmtlZCBiYWNrIHRvIHRoZSBiZWdpbm5pbmcuCisgICAgLy8gSWYgbm8gcmVwZWF0aW5nIGFs
dGVybmF0aXZlcyBleGlzdCwgdGhlbiBhIE9wTWF0Y2hGYWlsZWQgbm9kZSBleGlzdHMKKyAgICAv
LyB0byByZXR1cm4gdGhlIGZhaWxpbmcgcmVzdWx0LgorICAgIHZvaWQgb3BDb21waWxlQm9keShQ
YXR0ZXJuRGlzanVuY3Rpb24qIGRpc2p1bmN0aW9uKQorICAgIHsKKyAgICAgICAgVmVjdG9yPFBh
dHRlcm5BbHRlcm5hdGl2ZSo+JiBhbHRlcm5hdGl2ZXMgPSAgZGlzanVuY3Rpb24tPm1fYWx0ZXJu
YXRpdmVzOworICAgICAgICBzaXplX3QgY3VycmVudEFsdGVybmF0aXZlSW5kZXggPSAwOworCisg
ICAgICAgIC8vIEVtaXQgdGhlICdvbmNlIHRocm91Z2gnIGFsdGVybmF0aXZlcy4KKyAgICAgICAg
aWYgKGFsdGVybmF0aXZlcy5zaXplKCkgJiYgYWx0ZXJuYXRpdmVzWzBdLT5vbmNlVGhyb3VnaCgp
KSB7CisgICAgICAgICAgICBtX29wcy5hcHBlbmQoWWFyck9wKE9wQm9keUFsdGVybmF0aXZlQmVn
aW4pKTsKKyAgICAgICAgICAgIG1fb3BzLmxhc3QoKS5tX3ByZXZpb3VzT3AgPSBub3RGb3VuZDsK
KworICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgIHNpemVfdCBsYXN0T3BJbmRleCA9
IG1fb3BzLnNpemUoKSAtIDE7CisgICAgICAgICAgICAgICAgUGF0dGVybkFsdGVybmF0aXZlKiBh
bHRlcm5hdGl2ZSA9IGFsdGVybmF0aXZlc1tjdXJyZW50QWx0ZXJuYXRpdmVJbmRleF07CisgICAg
ICAgICAgICAgICAgb3BDb21waWxlQWx0ZXJuYXRpdmUoYWx0ZXJuYXRpdmUpOworCisgICAgICAg
ICAgICAgICAgc2l6ZV90IHRoaXNPcEluZGV4ID0gbV9vcHMuc2l6ZSgpOworICAgICAgICAgICAg
ICAgIG1fb3BzLmFwcGVuZChZYXJyT3AoT3BCb2R5QWx0ZXJuYXRpdmVOZXh0KSk7CisKKyAgICAg
ICAgICAgICAgICBZYXJyT3AmIGxhc3RPcCA9IG1fb3BzW2xhc3RPcEluZGV4XTsKKyAgICAgICAg
ICAgICAgICBZYXJyT3AmIHRoaXNPcCA9IG1fb3BzW3RoaXNPcEluZGV4XTsKKworICAgICAgICAg
ICAgICAgIGxhc3RPcC5tX2FsdGVybmF0aXZlID0gYWx0ZXJuYXRpdmU7CisgICAgICAgICAgICAg
ICAgbGFzdE9wLm1fbmV4dE9wID0gdGhpc09wSW5kZXg7CisgICAgICAgICAgICAgICAgdGhpc09w
Lm1fcHJldmlvdXNPcCA9IGxhc3RPcEluZGV4OworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgICsrY3VycmVudEFsdGVybmF0aXZlSW5kZXg7CisgICAgICAgICAgICB9IHdoaWxlIChj
dXJyZW50QWx0ZXJuYXRpdmVJbmRleCA8IGFsdGVybmF0aXZlcy5zaXplKCkgJiYgYWx0ZXJuYXRp
dmVzW2N1cnJlbnRBbHRlcm5hdGl2ZUluZGV4XS0+b25jZVRocm91Z2goKSk7CisKKyAgICAgICAg
ICAgIFlhcnJPcCYgbGFzdE9wID0gbV9vcHMubGFzdCgpOworCisgICAgICAgICAgICBBU1NFUlQo
bGFzdE9wLm1fb3AgPT0gT3BCb2R5QWx0ZXJuYXRpdmVOZXh0KTsKKyAgICAgICAgICAgIGxhc3RP
cC5tX29wID0gT3BCb2R5QWx0ZXJuYXRpdmVFbmQ7CisgICAgICAgICAgICBsYXN0T3AubV9hbHRl
cm5hdGl2ZSA9IDA7CisgICAgICAgICAgICBsYXN0T3AubV9uZXh0T3AgPSBub3RGb3VuZDsKKyAg
ICAgICAgfQorCisgICAgICAgIC8vIElmIHRoZXJlIGFyZSBubyByZXBlYXRpbmcgYWx0ZXJuYXRp
dmVzIHRoZW4gZW1pdCBhbgorICAgICAgICAvLyAnT3BNYXRjaEZhaWxlZCcgdG8gcmV0dXJuIG5v
IG1hdGNoLgorICAgICAgICBpZiAoY3VycmVudEFsdGVybmF0aXZlSW5kZXggPT0gYWx0ZXJuYXRp
dmVzLnNpemUoKSkgeworICAgICAgICAgICAgbV9vcHMuYXBwZW5kKFlhcnJPcChPcE1hdGNoRmFp
bGVkKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBFbWl0
IHRoZSByZXBlYXRlZCBhbHRlcm5hdGl2ZXMuCisgICAgICAgIHNpemVfdCByZXBlYXRMb29wID0g
bV9vcHMuc2l6ZSgpOworICAgICAgICBtX29wcy5hcHBlbmQoWWFyck9wKE9wQm9keUFsdGVybmF0
aXZlQmVnaW4pKTsKKyAgICAgICAgbV9vcHMubGFzdCgpLm1fcHJldmlvdXNPcCA9IG5vdEZvdW5k
OworICAgICAgICBkbyB7CisgICAgICAgICAgICBzaXplX3QgbGFzdE9wSW5kZXggPSBtX29wcy5z
aXplKCkgLSAxOworICAgICAgICAgICAgUGF0dGVybkFsdGVybmF0aXZlKiBhbHRlcm5hdGl2ZSA9
IGFsdGVybmF0aXZlc1tjdXJyZW50QWx0ZXJuYXRpdmVJbmRleF07CisgICAgICAgICAgICBBU1NF
UlQoIWFsdGVybmF0aXZlLT5vbmNlVGhyb3VnaCgpKTsKKyAgICAgICAgICAgIG9wQ29tcGlsZUFs
dGVybmF0aXZlKGFsdGVybmF0aXZlKTsKKworICAgICAgICAgICAgc2l6ZV90IHRoaXNPcEluZGV4
ID0gbV9vcHMuc2l6ZSgpOworICAgICAgICAgICAgbV9vcHMuYXBwZW5kKFlhcnJPcChPcEJvZHlB
bHRlcm5hdGl2ZU5leHQpKTsKKworICAgICAgICAgICAgWWFyck9wJiBsYXN0T3AgPSBtX29wc1ts
YXN0T3BJbmRleF07CisgICAgICAgICAgICBZYXJyT3AmIHRoaXNPcCA9IG1fb3BzW3RoaXNPcElu
ZGV4XTsKKworICAgICAgICAgICAgbGFzdE9wLm1fYWx0ZXJuYXRpdmUgPSBhbHRlcm5hdGl2ZTsK
KyAgICAgICAgICAgIGxhc3RPcC5tX25leHRPcCA9IHRoaXNPcEluZGV4OworICAgICAgICAgICAg
dGhpc09wLm1fcHJldmlvdXNPcCA9IGxhc3RPcEluZGV4OworICAgICAgICAgICAgCisgICAgICAg
ICAgICArK2N1cnJlbnRBbHRlcm5hdGl2ZUluZGV4OworICAgICAgICB9IHdoaWxlIChjdXJyZW50
QWx0ZXJuYXRpdmVJbmRleCA8IGFsdGVybmF0aXZlcy5zaXplKCkpOworICAgICAgICBZYXJyT3Am
IGxhc3RPcCA9IG1fb3BzLmxhc3QoKTsKKyAgICAgICAgQVNTRVJUKGxhc3RPcC5tX29wID09IE9w
Qm9keUFsdGVybmF0aXZlTmV4dCk7CisgICAgICAgIGxhc3RPcC5tX29wID0gT3BCb2R5QWx0ZXJu
YXRpdmVFbmQ7CisgICAgICAgIGxhc3RPcC5tX2FsdGVybmF0aXZlID0gMDsKKyAgICAgICAgbGFz
dE9wLm1fbmV4dE9wID0gcmVwZWF0TG9vcDsKICAgICB9CiAKICAgICB2b2lkIGdlbmVyYXRlRW50
ZXIoKQpAQCAtMjIzMCwxMSArMjM0NiwxNCBAQCBwdWJsaWM6CiAgICAgWWFyckdlbmVyYXRvcihZ
YXJyUGF0dGVybiYgcGF0dGVybikKICAgICAgICAgOiBtX3BhdHRlcm4ocGF0dGVybikKICAgICAg
ICAgLCBtX3Nob3VsZEZhbGxCYWNrKGZhbHNlKQorICAgICAgICAsIG1fY2hlY2tlZCgwKQogICAg
IHsKICAgICB9CiAKLSAgICB2b2lkIGdlbmVyYXRlKCkKKyAgICB2b2lkIGNvbXBpbGUoSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhLCBZYXJyQ29kZUJsb2NrJiBqaXRPYmplY3QpCiAgICAgeworLy8g
ICAgICAgIGJyZWFrcG9pbnQoKTsKKwogICAgICAgICBnZW5lcmF0ZUVudGVyKCk7CiAKICAgICAg
ICAgaWYgKCFtX3BhdHRlcm4ubV9ib2R5LT5tX2hhc0ZpeGVkU2l6ZSkKQEAgLTIyNDMsMjYgKzIz
NjIsNTIgQEAgcHVibGljOgogICAgICAgICBpZiAobV9wYXR0ZXJuLm1fYm9keS0+bV9jYWxsRnJh
bWVTaXplKQogICAgICAgICAgICAgc3ViUHRyKEltbTMyKG1fcGF0dGVybi5tX2JvZHktPm1fY2Fs
bEZyYW1lU2l6ZSAqIHNpemVvZih2b2lkKikpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKLSAg
ICAgICAgZ2VuZXJhdGVEaXNqdW5jdGlvbihtX3BhdHRlcm4ubV9ib2R5KTsKLSAgICB9Ci0KLSAg
ICB2b2lkIGNvbXBpbGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBZYXJyQ29kZUJsb2NrJiBq
aXRPYmplY3QpCi0gICAgewotICAgICAgICBnZW5lcmF0ZSgpOworICAgICAgICAvLyBDb21waWxl
IHRoZSBwYXR0ZXJuIHRvIHRoZSBpbnRlcm5hbCAnWWFyck9wJyByZXByZXNlbnRhdGlvbi4KKyAg
ICAgICAgb3BDb21waWxlQm9keShtX3BhdHRlcm4ubV9ib2R5KTsKIAotICAgICAgICBMaW5rQnVm
ZmVyIHBhdGNoQnVmZmVyKHRoaXMsIGdsb2JhbERhdGEtPnJlZ2V4QWxsb2NhdG9yKTsKKyAgICAg
ICAgLy8gSWYgd2UgZW5jb3VudGVyZWQgYW55dGhpbmcgd2UgY2FuJ3QgaGFuZGxlIGluIHRoZSBK
SVQgY29kZQorICAgICAgICAvLyAoZS5nLiBiYWNrcmVmZXJlbmNlcykgdGhlbiByZXR1cm4gZWFy
bHkuCisgICAgICAgIGlmIChtX3Nob3VsZEZhbGxCYWNrKSB7CisgICAgICAgICAgICBqaXRPYmpl
Y3Quc2V0RmFsbEJhY2sodHJ1ZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9leHByZXNzaW9uU3RhdGUubV9iYWNr
dHJhY2tSZWNvcmRzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgcGF0Y2hCdWZmZXIucGF0Y2go
bV9leHByZXNzaW9uU3RhdGUubV9iYWNrdHJhY2tSZWNvcmRzW2ldLmRhdGFMYWJlbCwgcGF0Y2hC
dWZmZXIubG9jYXRpb25PZihtX2V4cHJlc3Npb25TdGF0ZS5tX2JhY2t0cmFja1JlY29yZHNbaV0u
YmFja3RyYWNrTG9jYXRpb24pKTsKKyAgICAgICAgLy8gUnVuIGZvcndhcmRzIG92ZXIgJ21fb3Bz
JywgZ2VuZXJhdGluZyB0aGUgbWFpbiBtYXRjaGluZyBwYXRoLgorICAgICAgICBnZW5lcmF0ZSgp
OworICAgICAgICAvLyBSdW4gYmFja3dhcmRzIG92ZXIgJ21fb3BzJywgZ2VuZXJhdGluZyBjb2Rl
IGZvciBiYWNrdHJhY2tpbmcuCisgICAgICAgIGJhY2t0cmFjaygpOwogCi0gICAgICAgIGppdE9i
amVjdC5zZXQocGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCkpOworICAgICAgICAvLyBMaW5rICYg
ZmluYWxpemUgdGhlIGNvZGUuCisgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcih0aGlzLCBn
bG9iYWxEYXRhLT5yZWdleEFsbG9jYXRvcik7CisgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUu
bGlua0RhdGFMYWJlbHMobGlua0J1ZmZlcik7CisgICAgICAgIGppdE9iamVjdC5zZXQobGlua0J1
ZmZlci5maW5hbGl6ZUNvZGUoKSk7CiAgICAgICAgIGppdE9iamVjdC5zZXRGYWxsQmFjayhtX3No
b3VsZEZhbGxCYWNrKTsKICAgICB9CiAKIHByaXZhdGU6CiAgICAgWWFyclBhdHRlcm4mIG1fcGF0
dGVybjsKKworICAgIC8vIFVzZWQgdG8gZGV0ZWN0IHJlZ3VsYXIgZXhwcmVzc2lvbiBjb25zdHJ1
Y3RzIHRoYXQgYXJlIG5vdCBjdXJyZW50bHkKKyAgICAvLyBzdXBwb3J0ZWQgaW4gdGhlIEpJVDsg
ZmFsbCBiYWNrIHRvIHRoZSBpbnRlcnByZXRlciB3aGVuIHRoaXMgaXMgZGV0ZWN0ZWQuCiAgICAg
Ym9vbCBtX3Nob3VsZEZhbGxCYWNrOwotICAgIEdlbmVyYXRpb25TdGF0ZSBtX2V4cHJlc3Npb25T
dGF0ZTsKKworICAgIC8vIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gZXhwcmVzc2VkIGFzIGEgbGlu
ZWFyIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMuCisgICAgVmVjdG9yPFlhcnJPcCwgMTI4PiBtX29w
czsKKworICAgIC8vIFRoaXMgcmVjb3JkcyB0aGUgY3VycmVudCBpbnB1dCBvZmZzZXQgYmVpbmcg
YXBwbGllZCBkdWUgdG8gdGhlIGN1cnJlbnQKKyAgICAvLyBzZXQgb2YgYWx0ZXJuYXRpdmVzIHdl
IGFyZSBuZXN0ZWQgd2l0aGluLiBFLmcuIHdoZW4gbWF0Y2hpbmcgdGhlCisgICAgLy8gY2hhcmFj
dGVyICdiJyB3aXRoaW4gdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiAvYWJjLywgIHdlIHdpbGwga25v
dyB0aGF0CisgICAgLy8gdGhlIG1pbmltdW0gc2l6ZSBmb3IgdGhlIGFsdGVybmF0aXZlIGlzIDMs
IGNoZWNrZWQgdXBvbiBlbnRyeSB0byB0aGUKKyAgICAvLyBhbHRlcm5hdGl2ZSwgYW5kIHRoYXQg
J2InIGlzIGF0IG9mZnNldCAxIGZyb20gdGhlIHN0YXJ0LCBhbmQgYXMgc3VjaAorICAgIC8vIHdo
ZW4gbWF0Y2hpbmcgJ2InIHdlIG5lZWQgdG8gYXBwbHkgYW4gb2Zmc2V0IG9mIC0yIHRvIHRoZSBs
b2FkLgorICAgIC8vCisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGdvIGF3YXkuIFJhdGhlciB0
aGFuIHRyYWNraW5nIHRoaXMgdmFsdWUgdGhyb3VnaG91dAorICAgIC8vIGNvZGUgZ2VuZXJhdGlv
biwgd2Ugc2hvdWxkIGdhdGhlciB0aGlzIGluZm9ybWF0aW9uIHVwIGZyb250ICYgc3RvcmUgaXQK
KyAgICAvLyBvbiB0aGUgWWFyck9wIHN0cnVjdHVyZS4KKyAgICBpbnQgbV9jaGVja2VkOworCisg
ICAgLy8gVGhpcyBjbGFzcyByZWNvcmRzIHN0YXRlIHdoaWxzdCBnZW5lcmF0aW5nIHRoZSBiYWNr
dHJhY2tpbmcgcGF0aCBvZiBjb2RlLgorICAgIEJhY2t0cmFja2luZ1N0YXRlIG1fYmFja3RyYWNr
aW5nU3RhdGU7CiB9OwogCiB2b2lkIGppdENvbXBpbGUoWWFyclBhdHRlcm4mIHBhdHRlcm4sIEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgWWFyckNvZGVCbG9jayYgaml0T2JqZWN0KQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>93593</attachid>
            <date>2011-05-15 17:26:28 -0700</date>
            <delta_ts>2011-05-15 23:28:13 -0700</delta_ts>
            <desc>Layout tests for expressions fixed by the prior patch.</desc>
            <filename>60860.tests.patch</filename>
            <type>text/plain</type>
            <size>3702</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDg2NTE1KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTEtMDUtMTUgIEdhdmluIEJhcnJhY2xvdWdo
ICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD02MDg2MAorICAgICAgICBBZGQgbGF5b3V0IHRlc3RzIGZvciBzb21lIHJlZ3VsYXIgZXhwcmVz
c2lvbnMgdGhhdCB1c2VkIHRvIGNyYXNoIHRoZSBjb21waWxlci4KKworICAgICAgICAqIGZhc3Qv
cmVnZXgvcGFyZW50aGVzZXMtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZhc3QvcmVnZXgvc2Ny
aXB0LXRlc3RzL3BhcmVudGhlc2VzLmpzOgorCiAyMDExLTA1LTE1ICBSb2IgQnVpcyAgPHJidWlz
QHJpbS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L3JlZ2V4L3BhcmVudGhlc2VzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L3JlZ2V4L3BhcmVudGhlc2VzLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gODYxNzkpCisrKyBMYXlvdXRUZXN0cy9mYXN0L3JlZ2V4L3BhcmVudGhlc2VzLWV4cGVjdGVk
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtODcsNyArODcsMTAgQEAgUEFTUyByZWdleHA1MC5leGVj
KCdhYmJiYmJiYmJiYmJiYmJiYmJiYgogUEFTUyByZWdleHA1MC5leGVjKCdkeCcpIGlzIFsnZHgn
LCAnZCcsIHVuZGVmaW5lZF0KIFBBU1MgcmVnZXhwNTEuZXhlYygnYWJjJykgaXMgbnVsbAogUEFT
UyByZWdleHA1MS5leGVjKHMpIGlzIFsnKcKeey0sfVB7QW55fScsJyknLHVuZGVmaW5lZF0KLVBB
U1MgJ0hpIEJvYicubWF0Y2goLyhSb2IpfChCb2IpfChSb2JlcnQpfChCb2JieSkvKSBpcyBbJ0Jv
YicsdW5kZWZpbmVkLCdCb2InLHVuZGVmaW5lZCx1bmRlZmluZWRdCitQQVNTICdIaSBCb2InLm1h
dGNoKHJlZ2V4cDUyKSBpcyBbJ0JvYicsdW5kZWZpbmVkLCdCb2InLHVuZGVmaW5lZCx1bmRlZmlu
ZWRdCitQQVNTIHJlZ2V4cDUzLmV4ZWMoJyMnKSBpcyBbJycsdW5kZWZpbmVkLCcnXQorUEFTUyBy
ZWdleHA1NC5leGVjKCcjJykgaXMgWycnLCcnLHVuZGVmaW5lZCx1bmRlZmluZWQsJyddCitQQVNT
IHJlZ2V4cDU1LmV4ZWMoJyMnKSBpcyBbJycsJyddCiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBp
cyB0cnVlCiAKIFRFU1QgQ09NUExFVEUKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvcmVnZXgvc2Ny
aXB0LXRlc3RzL3BhcmVudGhlc2VzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qv
cmVnZXgvc2NyaXB0LXRlc3RzL3BhcmVudGhlc2VzLmpzCShyZXZpc2lvbiA4NjE3OSkKKysrIExh
eW91dFRlc3RzL2Zhc3QvcmVnZXgvc2NyaXB0LXRlc3RzL3BhcmVudGhlc2VzLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC0yMTIsOSArMjEyLDExIEBAIHZhciByZWdleHA0NyA9IC8oLio/KSg/Oig/Olw/
KC4qPyk/KT8pKD8KIHNob3VsZEJlKCJyZWdleHA0Ny5leGVjKCcvd3d3LmFjbWUuY29tL3RoaXMv
aXMvYS9wYXRoL2ZpbGUudHh0JykiLCAiWycvd3d3LmFjbWUuY29tL3RoaXMvaXMvYS9wYXRoL2Zp
bGUudHh0JywnL3d3dy5hY21lLmNvbS90aGlzL2lzL2EvcGF0aC9maWxlLnR4dCcsdW5kZWZpbmVk
XSIpOwogCiB2YXIgcmVnZXhwNDggPSAvXig/OihcdyspOlwvKihbXHdcLlwtXGRdKykoPzo6KFxk
Kyl8KSg/PSg/OlwvfCQpKXwpKD86JHxcLz8oLio/KSg/Olw/KC4qPyk/fCkoPzojKC4qKXwpJCkv
OworLyogVGhlIHJlZ2V4cCBvbiB0aGUgcHJpb3IgbGluZSBjb25mdXNlcyBYY29kZSBzeW50YXgg
aGlnaGxpZ2h0aW5nLCB0aGlzIGNvbWVudCBmaXhlcyBpdCEgKi8KIHNob3VsZEJlKCJyZWdleHA0
OC5leGVjKCdodHRwOi8vd3d3LmFjbWUuY29tL3RoaXMvaXMvYS9wYXRoL2ZpbGUudHh0JykiLCAi
WydodHRwOi8vd3d3LmFjbWUuY29tL3RoaXMvaXMvYS9wYXRoL2ZpbGUudHh0JywnaHR0cCcsJ3d3
dy5hY21lLmNvbScsdW5kZWZpbmVkLCd0aGlzL2lzL2EvcGF0aC9maWxlLnR4dCcsdW5kZWZpbmVk
LHVuZGVmaW5lZF0iKTsKIAogdmFyIHJlZ2V4cDQ5ID0gLyg/OihbXjpdKj8pKD86KD86XD8oLio/
KT8pPykoPzooPzojKT8pJCl8KD86Xig/OihcdyspOlwvKihbXHdcLlwtXGRdKykoPzo6KFxkKyl8
KSg/PSg/OlwvfCQpKXwpKD86JHxcLz8oLio/KSg/Olw/KC4qPyk/fCkoPzojKC4qKXwpJCkpLzsK
Ky8qIFRoZSByZWdleHAgb24gdGhlIHByaW9yIGxpbmUgY29uZnVzZXMgWGNvZGUgc3ludGF4IGhp
Z2hsaWdodGluZywgdGhpcyBjb21lbnQgZml4ZXMgaXQhICovCiBzaG91bGRCZSgicmVnZXhwNDku
ZXhlYygnaHR0cDovL3d3dy5hY21lLmNvbS90aGlzL2lzL2EvcGF0aC9maWxlLnR4dCcpIiwgIlsn
aHR0cDovL3d3dy5hY21lLmNvbS90aGlzL2lzL2EvcGF0aC9maWxlLnR4dCcsdW5kZWZpbmVkLHVu
ZGVmaW5lZCwnaHR0cCcsJ3d3dy5hY21lLmNvbScsdW5kZWZpbmVkLCd0aGlzL2lzL2EvcGF0aC9m
aWxlLnR4dCcsdW5kZWZpbmVkLHVuZGVmaW5lZF0iKTsKIAogdmFyIHJlZ2V4cDUwID0gLygoYSli
ezI4LH1jfGQpeC87CkBAIC0yMjcsNyArMjI5LDE2IEBAIHZhciByZWdleHA1MSA9IG5ldyBSZWdF
eHAocyk7CiBzaG91bGRCZU51bGwoInJlZ2V4cDUxLmV4ZWMoJ2FiYycpIik7CiBzaG91bGRCZSgi
cmVnZXhwNTEuZXhlYyhzKSIsICJbJylceDlley0sfVB7QW55fScsJyknLHVuZGVmaW5lZF0iKTsK
IAotc2hvdWxkQmUoIidIaSBCb2InLm1hdGNoKC8oUm9iKXwoQm9iKXwoUm9iZXJ0KXwoQm9iYnkp
LykiLCAiWydCb2InLHVuZGVmaW5lZCwnQm9iJyx1bmRlZmluZWQsdW5kZWZpbmVkXSIpOwordmFy
IHJlZ2V4cDUyID0gLyhSb2IpfChCb2IpfChSb2JlcnQpfChCb2JieSkvOworc2hvdWxkQmUoIidI
aSBCb2InLm1hdGNoKHJlZ2V4cDUyKSIsICJbJ0JvYicsdW5kZWZpbmVkLCdCb2InLHVuZGVmaW5l
ZCx1bmRlZmluZWRdIik7CisKKy8vIFRlc3QgY2FzZXMgZGlzY292ZXJlZCBieSBmdXp6aW5nIHRo
YXQgY3Jhc2hlZCB0aGUgY29tcGlsZXIuCit2YXIgcmVnZXhwNTMgPSAvKD89KD86KD86KGdCKXwo
PyFjc3w8KSkoKD89KD8hdjYpezAsfSkpKXwoPz0jKSs/KS9tOworc2hvdWxkQmUoInJlZ2V4cDUz
LmV4ZWMoJyMnKSIsICJbJycsdW5kZWZpbmVkLCcnXSIpOwordmFyIHJlZ2V4cDU0ID0gLygoPzoo
PzooKXwoPyEpKSgoPz0oPyEpKSkpfCgpKS9tOworc2hvdWxkQmUoInJlZ2V4cDU0LmV4ZWMoJyMn
KSIsICJbJycsJycsdW5kZWZpbmVkLHVuZGVmaW5lZCwnJ10iKTsKK3ZhciByZWdleHA1NSA9IC8o
PzooPzooPzphP3woPzopKSgoPzopKSl8YT8pL207CitzaG91bGRCZSgicmVnZXhwNTUuZXhlYygn
IycpIiwgIlsnJywnJ10iKTsKIAogdmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>93613</attachid>
            <date>2011-05-15 23:28:13 -0700</date>
            <delta_ts>2011-05-16 00:07:15 -0700</delta_ts>
            <desc>Almost identical to the old patch, fix stylebot issues, remove &apos;what&apos; comments, renamed m_optimized to m_isDeadCode, add backtrackTermDefault.</desc>
            <filename>60860.4.patch</filename>
            <type>text/plain</type>
            <size>170838</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gODY1MTUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjcgQEAK
KzIwMTEtMDUtMTUgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MDg2MAorICAgICAgICBTaW1wbGlmeSBi
YWNrdHJhY2tpbmcgaW4gWUFSUiBKSVQKKworICAgICAgICBZQVJSIEpJVCBjdXJyZW50bHkgcGVy
Zm9ybXMgYSBzaW5nbGUgcGFzcyBvZiBjb2RlIGdlbmVyYXRpb24gb3ZlciB0aGUgcGF0dGVybiwK
KyAgICAgICAgd2l0aCBzcGVjaWFsIGhhbmRsaW5nIHRvIGFsbG93IHRoZSBjb2RlIGdlbmVyYXRp
b24gZm9yIHNvbWUgYmFja3RyYWNraW5nIGNvZGUKKyAgICAgICAgb3V0IG9mIGxpbmUuIFdlIGNh
biBzaW1wbGlmeSB0aGluZ3MgYnkgbW92aW5nIHRvIGEgY29tbW9uIG1lY2hhbmlzbSB3aGVyZWJ5
IGFsbAorICAgICAgICBmb3J3YXJkcyBtYXRjaGluZyBjb2RlIGlzIGdlbmVyYXRlZCBpbiBvbmUg
cGFzcywgYW5kIGFsbCBiYWNrdHJhY2tpbmcgY29kZSBpcworICAgICAgICBnZW5lcmF0ZWQgaW4g
YW5vdGhlci4gQmFja3RyYWNraW5nIGNvZGUgY2FuIGJlIGdlbmVyYXRlZCBpbiByZXZlcnNlIG9y
ZGVyLCB0bworICAgICAgICBvcHRpbWl6ZWQgdGhlIGNvbW1vbiBmYWxsLXRocm91Z2ggY2FzZS4K
KworICAgICAgICBUbyBtYWtlIGl0IGVhc2llciB0byB3YWxrIG92ZXIgdGhlIHBhdHRlcm4sIHdl
IGNhbiBmaXJzdCBjb252ZXJ0IHRvIGEgbW9yZQorICAgICAgICBieXRlLWNvZGUgbGlrZSBmb3Jt
YXQgYmVmb3JlIEpJVCBnZW5lcmF0aW5nLiBJbiB0aW1lIHdlIHNob3VsZCB1bmlmeSB0aGlzIHdp
dGgKKyAgICAgICAgdGhlIFlBUlIgaW50ZXJwcmV0ZXIgdG8gbW9yZSBjbG9zZWx5IHVuaWZ5IHRo
ZSB0d28uCisKKyAgICAgICAgKiB5YXJyL1lhcnJKSVQuY3BwOgorICAgICAgICAoSlNDOjpZYXJy
OjpZYXJyR2VuZXJhdG9yOjpqdW1wSWZOb0F2YWlsYWJsZUlucHV0KToKKyAgICAgICAgKEpTQzo6
WWFycjo6WWFyckdlbmVyYXRvcjo6WWFyck9wOjpZYXJyT3ApOgorICAgICAgICAoSlNDOjpZYXJy
OjpZYXJyR2VuZXJhdG9yOjpCYWNrdHJhY2tpbmdTdGF0ZTo6QmFja3RyYWNraW5nU3RhdGUpOgor
ICAgICAgICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjpCYWNrdHJhY2tpbmdTdGF0ZTo6YXBw
ZW5kKToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckdlbmVyYXRvcjo6QmFja3RyYWNraW5nU3Rh
dGU6OmZhbGx0aHJvdWdoKToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckdlbmVyYXRvcjo6QmFj
a3RyYWNraW5nU3RhdGU6OmxpbmspOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9y
OjpCYWNrdHJhY2tpbmdTdGF0ZTo6bGlua1RvKToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckdl
bmVyYXRvcjo6QmFja3RyYWNraW5nU3RhdGU6OnRha2VCYWNrdHJhY2tzVG9KdW1wTGlzdCk6Cisg
ICAgICAgIChKU0M6OllhcnI6OllhcnJHZW5lcmF0b3I6OkJhY2t0cmFja2luZ1N0YXRlOjppc0Vt
cHR5KToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckdlbmVyYXRvcjo6QmFja3RyYWNraW5nU3Rh
dGU6OmxpbmtEYXRhTGFiZWxzKToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckdlbmVyYXRvcjo6
QmFja3RyYWNraW5nU3RhdGU6OlJldHVybkFkZHJlc3NSZWNvcmQ6OlJldHVybkFkZHJlc3NSZWNv
cmQpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjpnZW5lcmF0ZUFzc2VydGlv
bkJPTCk6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJHZW5lcmF0b3I6OmJhY2t0cmFja0Fzc2Vy
dGlvbkJPTCk6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJHZW5lcmF0b3I6OmdlbmVyYXRlQXNz
ZXJ0aW9uRU9MKToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckdlbmVyYXRvcjo6YmFja3RyYWNr
QXNzZXJ0aW9uRU9MKToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckdlbmVyYXRvcjo6bWF0Y2hB
c3NlcnRpb25Xb3JkY2hhcik6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJHZW5lcmF0b3I6Omdl
bmVyYXRlQXNzZXJ0aW9uV29yZEJvdW5kYXJ5KToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckdl
bmVyYXRvcjo6YmFja3RyYWNrQXNzZXJ0aW9uV29yZEJvdW5kYXJ5KToKKyAgICAgICAgKEpTQzo6
WWFycjo6WWFyckdlbmVyYXRvcjo6Z2VuZXJhdGVQYXR0ZXJuQ2hhcmFjdGVyT25jZSk6CisgICAg
ICAgIChKU0M6OllhcnI6OllhcnJHZW5lcmF0b3I6OmJhY2t0cmFja1BhdHRlcm5DaGFyYWN0ZXJP
bmNlKToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckdlbmVyYXRvcjo6Z2VuZXJhdGVQYXR0ZXJu
Q2hhcmFjdGVyRml4ZWQpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjpiYWNr
dHJhY2tQYXR0ZXJuQ2hhcmFjdGVyRml4ZWQpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyR2Vu
ZXJhdG9yOjpnZW5lcmF0ZVBhdHRlcm5DaGFyYWN0ZXJHcmVlZHkpOgorICAgICAgICAoSlNDOjpZ
YXJyOjpZYXJyR2VuZXJhdG9yOjpiYWNrdHJhY2tQYXR0ZXJuQ2hhcmFjdGVyR3JlZWR5KToKKyAg
ICAgICAgKEpTQzo6WWFycjo6WWFyckdlbmVyYXRvcjo6Z2VuZXJhdGVQYXR0ZXJuQ2hhcmFjdGVy
Tm9uR3JlZWR5KToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckdlbmVyYXRvcjo6YmFja3RyYWNr
UGF0dGVybkNoYXJhY3Rlck5vbkdyZWVkeSk6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJHZW5l
cmF0b3I6OmdlbmVyYXRlQ2hhcmFjdGVyQ2xhc3NPbmNlKToKKyAgICAgICAgKEpTQzo6WWFycjo6
WWFyckdlbmVyYXRvcjo6YmFja3RyYWNrQ2hhcmFjdGVyQ2xhc3NPbmNlKToKKyAgICAgICAgKEpT
Qzo6WWFycjo6WWFyckdlbmVyYXRvcjo6Z2VuZXJhdGVDaGFyYWN0ZXJDbGFzc0ZpeGVkKToKKyAg
ICAgICAgKEpTQzo6WWFycjo6WWFyckdlbmVyYXRvcjo6YmFja3RyYWNrQ2hhcmFjdGVyQ2xhc3NG
aXhlZCk6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJHZW5lcmF0b3I6OmdlbmVyYXRlQ2hhcmFj
dGVyQ2xhc3NHcmVlZHkpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjpiYWNr
dHJhY2tDaGFyYWN0ZXJDbGFzc0dyZWVkeSk6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJHZW5l
cmF0b3I6OmdlbmVyYXRlQ2hhcmFjdGVyQ2xhc3NOb25HcmVlZHkpOgorICAgICAgICAoSlNDOjpZ
YXJyOjpZYXJyR2VuZXJhdG9yOjpiYWNrdHJhY2tDaGFyYWN0ZXJDbGFzc05vbkdyZWVkeSk6Cisg
ICAgICAgIChKU0M6OllhcnI6OllhcnJHZW5lcmF0b3I6OmdlbmVyYXRlVGVybSk6CisgICAgICAg
IChKU0M6OllhcnI6OllhcnJHZW5lcmF0b3I6OmJhY2t0cmFja1Rlcm0pOgorICAgICAgICAoSlND
OjpZYXJyOjpZYXJyR2VuZXJhdG9yOjpnZW5lcmF0ZSk6CisgICAgICAgIChKU0M6OllhcnI6Ollh
cnJHZW5lcmF0b3I6OmJhY2t0cmFjayk6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJHZW5lcmF0
b3I6Om9wQ29tcGlsZVBhcmVudGhlc2VzU3VicGF0dGVybik6CisgICAgICAgIChKU0M6OllhcnI6
OllhcnJHZW5lcmF0b3I6Om9wQ29tcGlsZVBhcmVudGhldGljYWxBc3NlcnRpb24pOgorICAgICAg
ICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjpvcENvbXBpbGVBbHRlcm5hdGl2ZSk6CisgICAg
ICAgIChKU0M6OllhcnI6OllhcnJHZW5lcmF0b3I6Om9wQ29tcGlsZUJvZHkpOgorICAgICAgICAo
SlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjpZYXJyR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6
WWFycjo6WWFyckdlbmVyYXRvcjo6Y29tcGlsZSk6CisKIDIwMTEtMDUtMTUgIEdlb2ZmcmV5IEdh
cmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBNYWNpZWogU3Rh
Y2hvd2lhay4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwCShyZXZp
c2lvbiA4NjUxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMjgsOSArMjI4LDEwIEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgOiBw
cml2YXRlIE1hY3JvQXNzZW0KICAgICB9CiAKICAgICAvLyBKdW1wcyBpZiBpbnB1dCBub3QgYXZh
aWxhYmxlOyB3aWxsIGhhdmUgKGluY29ycmVjdGx5KSBpbmNyZW1lbnRlZCBhbHJlYWR5IQotICAg
IEp1bXAganVtcElmTm9BdmFpbGFibGVJbnB1dCh1bnNpZ25lZCBjb3VudFRvQ2hlY2spCisgICAg
SnVtcCBqdW1wSWZOb0F2YWlsYWJsZUlucHV0KHVuc2lnbmVkIGNvdW50VG9DaGVjayA9IDApCiAg
ICAgewotICAgICAgICBhZGQzMihJbW0zMihjb3VudFRvQ2hlY2spLCBpbmRleCk7CisgICAgICAg
IGlmIChjb3VudFRvQ2hlY2spCisgICAgICAgICAgICBhZGQzMihJbW0zMihjb3VudFRvQ2hlY2sp
LCBpbmRleCk7CiAgICAgICAgIHJldHVybiBicmFuY2gzMihBYm92ZSwgaW5kZXgsIGxlbmd0aCk7
CiAgICAgfQogCkBAIC0yOTUsMTA1NiArMjk2LDQ1MSBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIDog
cHJpdmF0ZSBNYWNyb0Fzc2VtCiAgICAgICAgIGp1bXAoQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdp
c3RlciwgZnJhbWVMb2NhdGlvbiAqIHNpemVvZih2b2lkKikpKTsKICAgICB9CiAKLSAgICBzdHJ1
Y3QgSW5kaXJlY3RKdW1wRW50cnkgewotICAgICAgICBJbmRpcmVjdEp1bXBFbnRyeShpbnQzMl90
IHN0YWNrT2Zmc2V0KQotICAgICAgICAgICAgOiBtX3N0YWNrT2Zmc2V0KHN0YWNrT2Zmc2V0KQot
ICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBJbmRpcmVjdEp1bXBFbnRyeShpbnQzMl90
IHN0YWNrT2Zmc2V0LCBKdW1wIGp1bXApCi0gICAgICAgICAgICA6IG1fc3RhY2tPZmZzZXQoc3Rh
Y2tPZmZzZXQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFkZEp1bXAoanVtcCk7Ci0gICAgICAg
IH0KLQotICAgICAgICBJbmRpcmVjdEp1bXBFbnRyeShpbnQzMl90IHN0YWNrT2Zmc2V0LCBEYXRh
TGFiZWxQdHIgZGF0YUxhYmVsKQotICAgICAgICA6IG1fc3RhY2tPZmZzZXQoc3RhY2tPZmZzZXQp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGFkZERhdGFMYWJlbChkYXRhTGFiZWwpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgdm9pZCBhZGRKdW1wKEp1bXAganVtcCkKLSAgICAgICAgewotICAgICAg
ICAgICAgbV9yZWxKdW1wcy5hcHBlbmQoanVtcCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIHZvaWQgYWRkRGF0YUxhYmVsKERhdGFMYWJlbFB0ciBkYXRhTGFiZWwpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIG1fZGF0YUxhYmVsUHRyVmVjdG9yLmFwcGVuZChkYXRhTGFiZWwpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaW50MzJfdCBtX3N0YWNrT2Zmc2V0OwotICAgICAgICBKdW1wTGlz
dCBtX3JlbEp1bXBzOwotICAgICAgICBWZWN0b3I8RGF0YUxhYmVsUHRyLCAxNj4gbV9kYXRhTGFi
ZWxQdHJWZWN0b3I7CisgICAgZW51bSBZYXJyT3BDb2RlIHsKKyAgICAgICAgLy8gVGhlc2Ugbm9k
ZXMgd3JhcCBib2R5IGFsdGVybmF0aXZlcyAtIHRob3NlIGluIHRoZSBtYWluIGRpc2p1bmN0aW9u
LAorICAgICAgICAvLyByYXRoZXIgdGhhbiBzdWJwYXR0ZXJucyBvciBhc3NlcnRpb25zLiBUaGVz
ZSBhcmUgY2hhaW5lZCB0b2dldGhlciBpbgorICAgICAgICAvLyBhIGRvdWJseSBsaW5rZWQgbGlz
dCwgd2l0aCBhICdiZWdpbicgbm9kZSBmb3IgdGhlIGZpcnN0IGFsdGVybmF0aXZlLAorICAgICAg
ICAvLyBhICduZXh0JyBub2RlIGZvciBlYWNoIHN1YnNlcXVlbnQgYWx0ZXJuYXRpdmUsIGFuZCBh
biAnZW5kJyBub2RlIGF0CisgICAgICAgIC8vIHRoZSBlbmQuIEluIHRoZSBjYXNlIG9mIHJlcGVh
dGluZyBhbHRlcm5hdGl2ZXMsIHRoZSAnZW5kJyBub2RlIGFsc28KKyAgICAgICAgLy8gaGFzIGEg
cmVmZXJlbmNlIGJhY2sgdG8gJ2JlZ2luJy4KKyAgICAgICAgT3BCb2R5QWx0ZXJuYXRpdmVCZWdp
biwKKyAgICAgICAgT3BCb2R5QWx0ZXJuYXRpdmVOZXh0LAorICAgICAgICBPcEJvZHlBbHRlcm5h
dGl2ZUVuZCwKKyAgICAgICAgLy8gU2ltaWxhciB0byB0aGUgYm9keSBhbHRlcm5hdGl2ZXMsIGJ1
dCB1c2VkIGZvciBzdWJwYXR0ZXJucyB3aXRoIHR3bworICAgICAgICAvLyBvciBtb3JlIGFsdGVy
bmF0aXZlcy4KKyAgICAgICAgT3BOZXN0ZWRBbHRlcm5hdGl2ZUJlZ2luLAorICAgICAgICBPcE5l
c3RlZEFsdGVybmF0aXZlTmV4dCwKKyAgICAgICAgT3BOZXN0ZWRBbHRlcm5hdGl2ZUVuZCwKKyAg
ICAgICAgLy8gVXNlZCBmb3IgYWx0ZXJuYXRpdmVzIGluIHN1YnBhdHRlcm5zIHdoZXJlIHRoZXJl
IGlzIG9ubHkgYSBzaW5nbGUKKyAgICAgICAgLy8gYWx0ZXJuYXRpdmUgKGJhY2t0cmFja2luZ2lz
IGVhc2llciBpbiB0aGVzZSBjYXNlcyksIG9yIGZvciBhbHRlcm5hdGl2ZXMKKyAgICAgICAgLy8g
d2hpY2ggbmV2ZXIgbmVlZCB0byBiZSBiYWNrdHJhY2tlZCAodGhvc2UgaW4gcGFyZW50aGV0aWNh
bCBhc3NlcnRpb25zLAorICAgICAgICAvLyB0ZXJtaW5hbCBzdWJwYXR0ZXJucykuCisgICAgICAg
IE9wU2ltcGxlTmVzdGVkQWx0ZXJuYXRpdmVCZWdpbiwKKyAgICAgICAgT3BTaW1wbGVOZXN0ZWRB
bHRlcm5hdGl2ZU5leHQsCisgICAgICAgIE9wU2ltcGxlTmVzdGVkQWx0ZXJuYXRpdmVFbmQsCisg
ICAgICAgIC8vIFVzZWQgdG8gd3JhcCAnT25jZScgc3VicGF0dGVybiBtYXRjaGVzIChxdWFudGl0
eUNvdW50ID09IDEpLgorICAgICAgICBPcFBhcmVudGhlc2VzU3VicGF0dGVybk9uY2VCZWdpbiwK
KyAgICAgICAgT3BQYXJlbnRoZXNlc1N1YnBhdHRlcm5PbmNlRW5kLAorICAgICAgICAvLyBVc2Vk
IHRvIHdyYXAgJ1Rlcm1pbmFsJyBzdWJwYXR0ZXJuIG1hdGNoZXMgKGF0IHRoZSBlbmQgb2YgdGhl
IHJlZ2V4cCkuCisgICAgICAgIE9wUGFyZW50aGVzZXNTdWJwYXR0ZXJuVGVybWluYWxCZWdpbiwK
KyAgICAgICAgT3BQYXJlbnRoZXNlc1N1YnBhdHRlcm5UZXJtaW5hbEVuZCwKKyAgICAgICAgLy8g
VXNlZCB0byB3cmFwIHBhcmVudGhldGljYWwgYXNzZXJ0aW9ucy4KKyAgICAgICAgT3BQYXJlbnRo
ZXRpY2FsQXNzZXJ0aW9uQmVnaW4sCisgICAgICAgIE9wUGFyZW50aGV0aWNhbEFzc2VydGlvbkVu
ZCwKKyAgICAgICAgLy8gV3JhcHMgYWxsIHNpbXBsZSB0ZXJtcyAocGF0dGVybiBjaGFyYWN0ZXJz
LCBjaGFyYWN0ZXIgY2xhc3NlcykuCisgICAgICAgIE9wVGVybSwKKyAgICAgICAgLy8gV2hlcmUg
YW4gZXhwcmVzc2lvbiBjb250YWlucyBvbmx5ICdvbmNlIHRocm91Z2gnIGJvZHkgYWx0ZXJuYXRp
dmVzCisgICAgICAgIC8vIGFuZCBubyByZXBlYXRpbmcgb25lcywgdGhpcyBvcCBpcyB1c2VkIHRv
IHJldHVybiBtYXRjaCBmYWlsdXJlLgorICAgICAgICBPcE1hdGNoRmFpbGVkCiAgICAgfTsKIAot
ICAgIHN0cnVjdCBBbHRlcm5hdGl2ZUJhY2t0cmFja1JlY29yZCB7Ci0gICAgICAgIERhdGFMYWJl
bFB0ciBkYXRhTGFiZWw7Ci0gICAgICAgIExhYmVsIGJhY2t0cmFja0xvY2F0aW9uOwotCi0gICAg
ICAgIEFsdGVybmF0aXZlQmFja3RyYWNrUmVjb3JkKERhdGFMYWJlbFB0ciBkYXRhTGFiZWwsIExh
YmVsIGJhY2t0cmFja0xvY2F0aW9uKQotICAgICAgICAgICAgOiBkYXRhTGFiZWwoZGF0YUxhYmVs
KQotICAgICAgICAgICAgLCBiYWNrdHJhY2tMb2NhdGlvbihiYWNrdHJhY2tMb2NhdGlvbikKLSAg
ICAgICAgewotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHN0cnVjdCBQYXJlbnRoZXNlc1RhaWw7
Ci0gICAgc3RydWN0IFRlcm1HZW5lcmF0aW9uU3RhdGU7Ci0KLSAgICBzdHJ1Y3QgR2VuZXJhdGlv
blN0YXRlIHsKLSAgICAgICAgdHlwZWRlZiBIYXNoTWFwPGludCwgSW5kaXJlY3RKdW1wRW50cnkq
LCBXVEY6OkludEhhc2g8dWludDMyX3Q+LCBVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1
aW50MzJfdD4gPiBJbmRpcmVjdEp1bXBIYXNoTWFwOwotCi0gICAgICAgIEdlbmVyYXRpb25TdGF0
ZSgpCi0gICAgICAgICAgICA6IG1fcGFyZW5OZXN0aW5nTGV2ZWwoMCkKLSAgICAgICAgewotICAg
ICAgICB9Ci0KLSAgICAgICAgdm9pZCBhZGRJbmRpcmVjdEp1bXBFbnRyeShpbnQzMl90IHN0YWNr
T2Zmc2V0LCBKdW1wIGp1bXApCi0gICAgICAgIHsKLSAgICAgICAgICAgIEluZGlyZWN0SnVtcEhh
c2hNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IG1faW5kaXJlY3RKdW1wTWFwLmZpbmQoc3RhY2tPZmZz
ZXQpOwotCi0gICAgICAgICAgICBBU1NFUlQoc3RhY2tPZmZzZXQgPj0gMCk7Ci0KLSAgICAgICAg
ICAgIHVpbnQzMl90IG9mZnNldCA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihzdGFja09mZnNldCk7
Ci0KLSAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gbV9pbmRpcmVjdEp1bXBNYXAuZW5kKCkpCi0g
ICAgICAgICAgICAgICAgbV9pbmRpcmVjdEp1bXBNYXAuYWRkKG9mZnNldCwgbmV3IEluZGlyZWN0
SnVtcEVudHJ5KHN0YWNrT2Zmc2V0LCBqdW1wKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgcmVzdWx0LT5zZWNvbmQtPmFkZEp1bXAoanVtcCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICB2b2lkIGFkZEluZGlyZWN0SnVtcEVudHJ5KGludDMyX3Qgc3RhY2tPZmZzZXQsIEp1bXBM
aXN0IGp1bXBzKQotICAgICAgICB7Ci0gICAgICAgICAgICBKdW1wTGlzdDo6SnVtcFZlY3RvciBq
dW1wVmVjdG9yID0ganVtcHMuanVtcHMoKTsKLSAgICAgICAgICAgIHNpemVfdCBzaXplID0ganVt
cFZlY3Rvci5zaXplKCk7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7
ICsraSkKLSAgICAgICAgICAgICAgICBhZGRJbmRpcmVjdEp1bXBFbnRyeShzdGFja09mZnNldCwg
anVtcFZlY3RvcltpXSk7Ci0KLSAgICAgICAgICAgIGp1bXBzLmVtcHR5KCk7Ci0gICAgICAgIH0K
LQotICAgICAgICB2b2lkIGFkZEluZGlyZWN0SnVtcEVudHJ5KGludDMyX3Qgc3RhY2tPZmZzZXQs
IERhdGFMYWJlbFB0ciBkYXRhTGFiZWwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEluZGlyZWN0
SnVtcEhhc2hNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IG1faW5kaXJlY3RKdW1wTWFwLmZpbmQoc3Rh
Y2tPZmZzZXQpOwotCi0gICAgICAgICAgICBBU1NFUlQoc3RhY2tPZmZzZXQgPj0gMCk7Ci0KLSAg
ICAgICAgICAgIHVpbnQzMl90IG9mZnNldCA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihzdGFja09m
ZnNldCk7Ci0KLSAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gbV9pbmRpcmVjdEp1bXBNYXAuZW5k
KCkpCi0gICAgICAgICAgICAgICAgbV9pbmRpcmVjdEp1bXBNYXAuYWRkKG9mZnNldCwgbmV3IElu
ZGlyZWN0SnVtcEVudHJ5KHN0YWNrT2Zmc2V0LCBkYXRhTGFiZWwpKTsKLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICByZXN1bHQtPnNlY29uZC0+YWRkRGF0YUxhYmVsKGRhdGFMYWJl
bCk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGVtaXRJbmRpcmVjdEp1bXBUYWJsZShNYWNy
b0Fzc2VtYmxlciogbWFzbSkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChJbmRpcmVjdEp1
bXBIYXNoTWFwOjppdGVyYXRvciBpdGVyID0gbV9pbmRpcmVjdEp1bXBNYXAuYmVnaW4oKTsgaXRl
ciAhPSBtX2luZGlyZWN0SnVtcE1hcC5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgICAgICAgICAg
SW5kaXJlY3RKdW1wRW50cnkqIGluZEp1bXBFbnRyeSA9IGl0ZXItPnNlY29uZDsKLSAgICAgICAg
ICAgICAgICBzaXplX3Qgc2l6ZSA9IGluZEp1bXBFbnRyeS0+bV9kYXRhTGFiZWxQdHJWZWN0b3Iu
c2l6ZSgpOwotICAgICAgICAgICAgICAgIGlmIChzaXplKSB7Ci0gICAgICAgICAgICAgICAgICAg
IC8vIExpbmsgYW55IGFzc29jaWF0ZWQgRGF0YUxhYmVsUHRyJ3Mgd2l0aCBpbmRpcmVjdCBqdW1w
IHZpYSBsYWJlbAotICAgICAgICAgICAgICAgICAgICBMYWJlbCBoZXJlTGFiZWwgPSBtYXNtLT5s
YWJlbCgpOwotICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7
ICsraSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fYmFja3RyYWNrUmVjb3Jkcy5hcHBlbmQo
QWx0ZXJuYXRpdmVCYWNrdHJhY2tSZWNvcmQoaW5kSnVtcEVudHJ5LT5tX2RhdGFMYWJlbFB0clZl
Y3RvcltpXSwgaGVyZUxhYmVsKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGluZEp1bXBFbnRyeS0+bV9yZWxKdW1wcy5saW5rKG1hc20pOwotICAgICAgICAgICAgICAgIG1h
c20tPmp1bXAoQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgaW5kSnVtcEVudHJ5LT5tX3N0
YWNrT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgZGVsZXRlIGluZEp1bXBFbnRyeTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgaW5jcmVtZW50UGFyZW5OZXN0aW5n
TGV2ZWwoKQotICAgICAgICB7Ci0gICAgICAgICAgICArK21fcGFyZW5OZXN0aW5nTGV2ZWw7Ci0g
ICAgICAgIH0KLQotICAgICAgICB2b2lkIGRlY3JlbWVudFBhcmVuTmVzdGluZ0xldmVsKCkKLSAg
ICAgICAgewotICAgICAgICAgICAgLS1tX3BhcmVuTmVzdGluZ0xldmVsOwotICAgICAgICB9Ci0K
LSAgICAgICAgUGFyZW50aGVzZXNUYWlsKiBhZGRQYXJlbnRoZXNlc1RhaWwoUGF0dGVyblRlcm0m
IHRlcm0sIEp1bXBMaXN0KiBqdW1wTGlzdFRvUHJpb3JQYXJlbikKLSAgICAgICAgewotICAgICAg
ICAgICAgT3duUHRyPFBhcmVudGhlc2VzVGFpbD4gdGFpbCA9IGFkb3B0UHRyKG5ldyBQYXJlbnRo
ZXNlc1RhaWwodGVybSwgbV9wYXJlbk5lc3RpbmdMZXZlbCwganVtcExpc3RUb1ByaW9yUGFyZW4p
KTsKLSAgICAgICAgICAgIFBhcmVudGhlc2VzVGFpbCogcmF3VGFpbCA9IHRhaWwuZ2V0KCk7Ci0K
LSAgICAgICAgICAgIG1fcGFyZW5UYWlscy5hcHBlbmQodGFpbC5yZWxlYXNlKCkpOwotICAgICAg
ICAgICAgbV9wYXJlblRhaWxzRm9ySXRlcmF0aW9uLmFwcGVuZChyYXdUYWlsKTsKLQotICAgICAg
ICAgICAgcmV0dXJuIHJhd1RhaWw7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGVtaXRQYXJl
bnRoZXNlc1RhaWwoWWFyckdlbmVyYXRvciogZ2VuZXJhdG9yKQotICAgICAgICB7Ci0gICAgICAg
ICAgICB1bnNpZ25lZCB2ZWN0b3JTaXplID0gbV9wYXJlblRhaWxzLnNpemUoKTsKLSAgICAgICAg
ICAgIGJvb2wgcHJpb3JCYWNrdHJhY2tGYWxsVGhyb3VnaCA9IGZhbHNlOwotCi0gICAgICAgICAg
ICAvLyBFbWl0IGluIHJldmVyc2Ugb3JkZXIgc28gcGFyZW50VGFpbCBOIGNhbiBmYWxsIHRocm91
Z2ggdG8gTi0xCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gdmVjdG9yU2l6ZTsg
aW5kZXggPiAwOyAtLWluZGV4KSB7Ci0gICAgICAgICAgICAgICAgSnVtcExpc3QganVtcHNUb05l
eHQ7Ci0gICAgICAgICAgICAgICAgcHJpb3JCYWNrdHJhY2tGYWxsVGhyb3VnaCA9IG1fcGFyZW5U
YWlsc1tpbmRleC0xXS5nZXQoKS0+Z2VuZXJhdGVDb2RlKGdlbmVyYXRvciwganVtcHNUb05leHQs
IHByaW9yQmFja3RyYWNrRmFsbFRocm91Z2gsIGluZGV4ID4gMSk7Ci0gICAgICAgICAgICAgICAg
aWYgKGluZGV4ID4gMSkKLSAgICAgICAgICAgICAgICAgICAganVtcHNUb05leHQubGlua1RvKGdl
bmVyYXRvci0+bGFiZWwoKSwgZ2VuZXJhdG9yKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgIGFkZEp1bXBzVG9OZXh0SW50ZXJhdGlvbihqdW1wc1RvTmV4dCk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX3BhcmVuVGFpbHMuY2xlYXIoKTsKLSAgICAgICAg
fQotCi0gICAgICAgIHZvaWQgYWRkSnVtcFRvTmV4dEludGVyYXRpb24oSnVtcCBqdW1wKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBtX2p1bXBzVG9OZXh0SW50ZXJhdGlvbi5hcHBlbmQoanVtcCk7
Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGFkZEp1bXBzVG9OZXh0SW50ZXJhdGlvbihKdW1w
TGlzdCBqdW1wcykKKyAgICAvLyBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIHRvIGhvbGQgdGhlIGNv
bXBpbGVkIG9wY29kZSBpbmZvcm1hdGlvbiwKKyAgICAvLyBpbmNsdWRpbmcgcmVmZXJlbmNlIGJh
Y2sgdG8gdGhlIG9yaWdpbmFsIFBhdHRlcm5UZXJtL1BhdHRlcm5BbHRlcm5hdGl2ZXMsCisgICAg
Ly8gYW5kIEpJVCBjb21waWxhdGlvbiBkYXRhIHN0cnVjdHVyZXMuCisgICAgc3RydWN0IFlhcnJP
cCB7CisgICAgICAgIGV4cGxpY2l0IFlhcnJPcChQYXR0ZXJuVGVybSogdGVybSkKKyAgICAgICAg
ICAgIDogbV9vcChPcFRlcm0pCisgICAgICAgICAgICAsIG1fdGVybSh0ZXJtKQorICAgICAgICAg
ICAgLCBtX2lzRGVhZENvZGUoZmFsc2UpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1fanVtcHNU
b05leHRJbnRlcmF0aW9uLmFwcGVuZChqdW1wcyk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lk
IGFkZERhdGFMYWJlbFRvTmV4dEl0ZXJhdGlvbihEYXRhTGFiZWxQdHIgZGF0YUxhYmVsKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBtX2RhdGFQdHJzVG9OZXh0SXRlcmF0aW9uLmFwcGVuZChkYXRh
TGFiZWwpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBsaW5rVG9OZXh0SXRlcmF0aW9uKExh
YmVsIGxhYmVsKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX25leHRJdGVyYXRpb24gPSBsYWJl
bDsKLQotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZGF0YVB0cnNUb05l
eHRJdGVyYXRpb24uc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tSZWNv
cmRzLmFwcGVuZChBbHRlcm5hdGl2ZUJhY2t0cmFja1JlY29yZChtX2RhdGFQdHJzVG9OZXh0SXRl
cmF0aW9uW2ldLCBtX25leHRJdGVyYXRpb24pKTsKLQotICAgICAgICAgICAgbV9kYXRhUHRyc1Rv
TmV4dEl0ZXJhdGlvbi5jbGVhcigpOwotCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9wYXJlblRhaWxzRm9ySXRlcmF0aW9uLnNpemUoKTsgKytpKQotICAgICAgICAgICAg
ICAgIG1fcGFyZW5UYWlsc0Zvckl0ZXJhdGlvbltpXS0+c2V0TmV4dEl0ZXJhdGlvbihtX25leHRJ
dGVyYXRpb24pOwotCi0gICAgICAgICAgICBtX3BhcmVuVGFpbHNGb3JJdGVyYXRpb24uY2xlYXIo
KTsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQgbGlua1RvTmV4dEl0ZXJhdGlvbihZYXJyR2Vu
ZXJhdG9yKiBnZW5lcmF0b3IpCisgICAgICAgIGV4cGxpY2l0IFlhcnJPcChZYXJyT3BDb2RlIG9w
KQorICAgICAgICAgICAgOiBtX29wKG9wKQorICAgICAgICAgICAgLCBtX2lzRGVhZENvZGUoZmFs
c2UpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1fanVtcHNUb05leHRJbnRlcmF0aW9uLmxpbmtU
byhtX25leHRJdGVyYXRpb24sIGdlbmVyYXRvcik7CiAgICAgICAgIH0KIAotICAgICAgICBpbnQg
bV9wYXJlbk5lc3RpbmdMZXZlbDsKLSAgICAgICAgVmVjdG9yPEFsdGVybmF0aXZlQmFja3RyYWNr
UmVjb3JkPiBtX2JhY2t0cmFja1JlY29yZHM7Ci0gICAgICAgIEluZGlyZWN0SnVtcEhhc2hNYXAg
bV9pbmRpcmVjdEp1bXBNYXA7Ci0gICAgICAgIExhYmVsIG1fbmV4dEl0ZXJhdGlvbjsKLSAgICAg
ICAgVmVjdG9yPE93blB0cjxQYXJlbnRoZXNlc1RhaWw+ID4gbV9wYXJlblRhaWxzOwotICAgICAg
ICBKdW1wTGlzdCBtX2p1bXBzVG9OZXh0SW50ZXJhdGlvbjsKLSAgICAgICAgVmVjdG9yPERhdGFM
YWJlbFB0cj4gbV9kYXRhUHRyc1RvTmV4dEl0ZXJhdGlvbjsKLSAgICAgICAgVmVjdG9yPFBhcmVu
dGhlc2VzVGFpbCo+IG1fcGFyZW5UYWlsc0Zvckl0ZXJhdGlvbjsKKyAgICAgICAgLy8gVGhlIG9w
ZXJhdGlvbiwgYXMgYSBZYXJPcENvZGUsIGFuZCBhbHNvIGEgcmVmZXJlbmNlIHRvIHRoZSBQYXR0
ZXJuVGVybS4KKyAgICAgICAgWWFyck9wQ29kZSBtX29wOworICAgICAgICBQYXR0ZXJuVGVybSog
bV90ZXJtOworCisgICAgICAgIC8vIEZvciBhbHRlcm5hdGl2ZXMsIHRoaXMgaG9sZHMgdGhlIFBh
dHRlcm5BbHRlcm5hdGl2ZSBhbmQgZG91Ymx5IGxpbmtlZAorICAgICAgICAvLyByZWZlcmVuY2Vz
IHRvIHRoaXMgYWx0ZXJuYXRpdmUncyBzaWJsaW5ncy4gSW4gdGhlIGNhc2Ugb2YgdGhlCisgICAg
ICAgIC8vIE9wQm9keUFsdGVybmF0aXZlRW5kIG5vZGUgYXQgdGhlIGVuZCBvZiBhIHNlY3Rpb24g
b2YgcmVwZWF0aW5nIG5vZGVzLAorICAgICAgICAvLyBtX25leHRPcCB3aWxsIHJlZmVyZW5jZSB0
aGUgT3BCb2R5QWx0ZXJuYXRpdmVCZWdpbiBub2RlIG9mIHRoZSBmaXJzdAorICAgICAgICAvLyBy
ZXBlYXRpbmcgYWx0ZXJuYXRpdmUuCisgICAgICAgIFBhdHRlcm5BbHRlcm5hdGl2ZSogbV9hbHRl
cm5hdGl2ZTsKKyAgICAgICAgc2l6ZV90IG1fcHJldmlvdXNPcDsKKyAgICAgICAgc2l6ZV90IG1f
bmV4dE9wOworCisgICAgICAgIC8vIFVzZWQgdG8gcmVjb3JkIGEgc2V0IG9mIEp1bXBzIG91dCBv
ZiB0aGUgZ2VuZXJhdGVkIGNvZGUsIHR5cGljYWxseQorICAgICAgICAvLyB1c2VkIGZvciBqdW1w
cyBvdXQgdG8gYmFja3RyYWNraW5nIGNvZGUsIGFuZCBhIHNpbmdsZSByZWVudHJ5IGJhY2sKKyAg
ICAgICAgLy8gaW50byB0aGUgY29kZSBmb3IgYSBub2RlIChsaWtlbHkgd2hlcmUgYSBiYWNrdHJh
Y2sgd2lsbCB0cmlnZ2VyCisgICAgICAgIC8vIHJlbWF0Y2hpbmcpLgorICAgICAgICBMYWJlbCBt
X3JlZW50cnk7CisgICAgICAgIEp1bXBMaXN0IG1fanVtcHM7CisKKyAgICAgICAgLy8gVGhpcyBm
bGFnIGlzIHVzZWQgdG8gbnVsbCBvdXQgdGhlIHNlY29uZCBwYXR0ZXJuIGNoYXJhY3Rlciwgd2hl
bgorICAgICAgICAvLyB0d28gYXJlIGZ1c2VkIHRvIG1hdGNoIGEgcGFpciB0b2dldGhlci4KKyAg
ICAgICAgYm9vbCBtX2lzRGVhZENvZGU7CisKKyAgICAgICAgLy8gQ3VycmVudGx5dXNlZCBpbiB0
aGUgY2FzZSBvZiBzb21lIG9mIHRoZSBtb3JlIGNvbXBsZXggbWFuYWdlbWVudCBvZgorICAgICAg
ICAvLyAnbV9jaGVja2VkJywgdG8gY2FjaGUgdGhlIG9mZnNldCB1c2VkIGluIHRoaXMgYWx0ZXJu
YXRpdmUsIHRvIGF2b2lkCisgICAgICAgIC8vIHJlY2FsY3VsYXRpbmcgaXQuCisgICAgICAgIGlu
dCBtX2NoZWNrQWRqdXN0OworCisgICAgICAgIC8vIFVzZWQgYnkgT3BOZXN0ZWRBbHRlcm5hdGl2
ZU5leHQvRW5kIHRvIGhvbGQgdGhlIHBvaW50ZXIgdG8gdGhlCisgICAgICAgIC8vIHZhbHVlIHRo
YXQgd2lsbCBiZSBwdWNoZWQgaW50byB0aGUgcGF0dGVybidzIGZyYW1lIHRvIHJldHVybiB0bywK
KyAgICAgICAgLy8gdXBvbiBiYWNrdHJhY2tpbmcgYmFjayBpbnRvIHRoZSBkaXNqdW5jdGlvbi4K
KyAgICAgICAgRGF0YUxhYmVsUHRyIG1fcmV0dXJuQWRkcmVzczsKICAgICB9OwogCi0gICAgc3Ry
dWN0IEJhY2t0cmFja0Rlc3RpbmF0aW9uIHsKLSAgICAgICAgdHlwZWRlZiBlbnVtIHsKLSAgICAg
ICAgICAgIE5vQmFja3RyYWNrLAotICAgICAgICAgICAgQmFja3RyYWNrTGFiZWwsCi0gICAgICAg
ICAgICBCYWNrdHJhY2tTdGFja09mZnNldCwKLSAgICAgICAgICAgIEJhY2t0cmFja0p1bXBMaXN0
LAotICAgICAgICAgICAgQmFja3RyYWNrTGlua2VkCi0gICAgICAgIH0gQmFja3RyYWNrVHlwZTsK
LQotICAgICAgICBCYWNrdHJhY2tEZXN0aW5hdGlvbigpCi0gICAgICAgICAgICA6IG1fYmFja3Ry
YWNrVHlwZShOb0JhY2t0cmFjaykKLSAgICAgICAgICAgICwgbV9iYWNrdHJhY2tUb0xhYmVsKDAp
Ci0gICAgICAgICAgICAsIG1fc3ViRGF0YUxhYmVsUHRyKDApCi0gICAgICAgICAgICAsIG1fbmV4
dEJhY2t0cmFjaygwKQotICAgICAgICAgICAgLCBtX2JhY2t0cmFja1NvdXJjZUxhYmVsKDApCi0g
ICAgICAgICAgICAsIG1fYmFja3RyYWNrU291cmNlSnVtcHMoMCkKLSAgICAgICAgewotICAgICAg
ICB9Ci0KLSAgICAgICAgQmFja3RyYWNrRGVzdGluYXRpb24oaW50MzJfdCBzdGFja09mZnNldCkK
LSAgICAgICAgICAgIDogbV9iYWNrdHJhY2tUeXBlKEJhY2t0cmFja1N0YWNrT2Zmc2V0KQotICAg
ICAgICAgICAgLCBtX2JhY2t0cmFja1N0YWNrT2Zmc2V0KHN0YWNrT2Zmc2V0KQotICAgICAgICAg
ICAgLCBtX2JhY2t0cmFja1RvTGFiZWwoMCkKLSAgICAgICAgICAgICwgbV9zdWJEYXRhTGFiZWxQ
dHIoMCkKLSAgICAgICAgICAgICwgbV9uZXh0QmFja3RyYWNrKDApCi0gICAgICAgICAgICAsIG1f
YmFja3RyYWNrU291cmNlTGFiZWwoMCkKLSAgICAgICAgICAgICwgbV9iYWNrdHJhY2tTb3VyY2VK
dW1wcygwKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBCYWNrdHJhY2tEZXN0aW5h
dGlvbihMYWJlbCBsYWJlbCkKLSAgICAgICAgICAgIDogbV9iYWNrdHJhY2tUeXBlKEJhY2t0cmFj
a0xhYmVsKQotICAgICAgICAgICAgLCBtX2JhY2t0cmFja0xhYmVsKGxhYmVsKQotICAgICAgICAg
ICAgLCBtX2JhY2t0cmFja1RvTGFiZWwoMCkKLSAgICAgICAgICAgICwgbV9zdWJEYXRhTGFiZWxQ
dHIoMCkKLSAgICAgICAgICAgICwgbV9uZXh0QmFja3RyYWNrKDApCi0gICAgICAgICAgICAsIG1f
YmFja3RyYWNrU291cmNlTGFiZWwoMCkKLSAgICAgICAgICAgICwgbV9iYWNrdHJhY2tTb3VyY2VK
dW1wcygwKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGNsZWFyKGJvb2wg
ZG9EYXRhTGFiZWxDbGVhciA9IHRydWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fYmFja3Ry
YWNrVHlwZSA9IE5vQmFja3RyYWNrOwotICAgICAgICAgICAgaWYgKGRvRGF0YUxhYmVsQ2xlYXIp
Ci0gICAgICAgICAgICAgICAgY2xlYXJEYXRhTGFiZWwoKTsKLSAgICAgICAgICAgIG1fbmV4dEJh
Y2t0cmFjayA9IDA7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGNsZWFyRGF0YUxhYmVsKCkK
LSAgICAgICAgewotICAgICAgICAgICAgbV9kYXRhTGFiZWxQdHIgPSBEYXRhTGFiZWxQdHIoKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgaGFzRGVzdGluYXRpb24oKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gKG1fYmFja3RyYWNrVHlwZSAhPSBOb0JhY2t0cmFjayk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBib29sIGlzU3RhY2tPZmZzZXQoKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gKG1fYmFja3RyYWNrVHlwZSA9PSBCYWNrdHJhY2tTdGFja09mZnNldCk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBib29sIGlzTGFiZWwoKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gKG1fYmFja3RyYWNrVHlwZSA9PSBCYWNrdHJhY2tMYWJlbCk7Ci0gICAgICAgIH0K
LQotICAgICAgICBib29sIGlzSnVtcExpc3QoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gKG1fYmFja3RyYWNrVHlwZSA9PSBCYWNrdHJhY2tKdW1wTGlzdCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBib29sIGhhc0RhdGFMYWJlbCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBtX2RhdGFMYWJlbFB0ci5pc1NldCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBjb3B5
VGFyZ2V0KEJhY2t0cmFja0Rlc3RpbmF0aW9uJiByaHMsIGJvb2wgY29weURhdGFMYWJlbCA9IHRy
dWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fYmFja3RyYWNrVHlwZSA9IHJocy5tX2JhY2t0
cmFja1R5cGU7Ci0gICAgICAgICAgICBpZiAobV9iYWNrdHJhY2tUeXBlID09IEJhY2t0cmFja1N0
YWNrT2Zmc2V0KQotICAgICAgICAgICAgICAgIG1fYmFja3RyYWNrU3RhY2tPZmZzZXQgPSByaHMu
bV9iYWNrdHJhY2tTdGFja09mZnNldDsKLSAgICAgICAgICAgIGVsc2UgaWYgKG1fYmFja3RyYWNr
VHlwZSA9PSBCYWNrdHJhY2tMYWJlbCkKLSAgICAgICAgICAgICAgICBtX2JhY2t0cmFja0xhYmVs
ID0gcmhzLm1fYmFja3RyYWNrTGFiZWw7Ci0gICAgICAgICAgICBpZiAoY29weURhdGFMYWJlbCkK
LSAgICAgICAgICAgICAgICBtX2RhdGFMYWJlbFB0ciA9IHJocy5tX2RhdGFMYWJlbFB0cjsKLSAg
ICAgICAgICAgIG1fYmFja3RyYWNrU291cmNlSnVtcHMgPSByaHMubV9iYWNrdHJhY2tTb3VyY2VK
dW1wczsKLSAgICAgICAgICAgIG1fYmFja3RyYWNrU291cmNlTGFiZWwgPSByaHMubV9iYWNrdHJh
Y2tTb3VyY2VMYWJlbDsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgY29weVRvKEJhY2t0cmFj
a0Rlc3RpbmF0aW9uJiBsaHMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGxocy5tX2JhY2t0cmFj
a1R5cGUgPSBtX2JhY2t0cmFja1R5cGU7Ci0gICAgICAgICAgICBpZiAobV9iYWNrdHJhY2tUeXBl
ID09IEJhY2t0cmFja1N0YWNrT2Zmc2V0KQotICAgICAgICAgICAgICAgIGxocy5tX2JhY2t0cmFj
a1N0YWNrT2Zmc2V0ID0gbV9iYWNrdHJhY2tTdGFja09mZnNldDsKLSAgICAgICAgICAgIGVsc2Ug
aWYgKG1fYmFja3RyYWNrVHlwZSA9PSBCYWNrdHJhY2tMYWJlbCkKLSAgICAgICAgICAgICAgICBs
aHMubV9iYWNrdHJhY2tMYWJlbCA9IG1fYmFja3RyYWNrTGFiZWw7Ci0gICAgICAgICAgICBsaHMu
bV9iYWNrdHJhY2tTb3VyY2VKdW1wcyA9IG1fYmFja3RyYWNrU291cmNlSnVtcHM7Ci0gICAgICAg
ICAgICBsaHMubV9iYWNrdHJhY2tTb3VyY2VMYWJlbCA9IG1fYmFja3RyYWNrU291cmNlTGFiZWw7
Ci0gICAgICAgICAgICBsaHMubV9kYXRhTGFiZWxQdHIgPSBtX2RhdGFMYWJlbFB0cjsKLSAgICAg
ICAgICAgIGxocy5tX2JhY2tUcmFja0p1bXBzID0gbV9iYWNrVHJhY2tKdW1wczsKLSAgICAgICAg
fQotCi0gICAgICAgIHZvaWQgYWRkQmFja3RyYWNrSnVtcChKdW1wIGp1bXApCi0gICAgICAgIHsK
LSAgICAgICAgICAgIG1fYmFja1RyYWNrSnVtcHMuYXBwZW5kKGp1bXApOwotICAgICAgICB9Ci0K
LSAgICAgICAgdm9pZCBzZXRTdGFja09mZnNldChpbnQzMl90IHN0YWNrT2Zmc2V0KQotICAgICAg
ICB7Ci0gICAgICAgICAgICBtX2JhY2t0cmFja1R5cGUgPSBCYWNrdHJhY2tTdGFja09mZnNldDsK
LSAgICAgICAgICAgIG1fYmFja3RyYWNrU3RhY2tPZmZzZXQgPSBzdGFja09mZnNldDsKLSAgICAg
ICAgfQotCi0gICAgICAgIHZvaWQgc2V0TGFiZWwoTGFiZWwgbGFiZWwpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIG1fYmFja3RyYWNrVHlwZSA9IEJhY2t0cmFja0xhYmVsOwotICAgICAgICAgICAg
bV9iYWNrdHJhY2tMYWJlbCA9IGxhYmVsOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBzZXRO
ZXh0QmFja3RyYWNrTGFiZWwoTGFiZWwgbGFiZWwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlm
IChtX25leHRCYWNrdHJhY2spCi0gICAgICAgICAgICAgICAgbV9uZXh0QmFja3RyYWNrLT5zZXRM
YWJlbChsYWJlbCk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHByb3BhZ2F0ZUJhY2t0cmFj
a1RvTGFiZWwoY29uc3QgQmFja3RyYWNrRGVzdGluYXRpb24mIHJocykKLSAgICAgICAgewotICAg
ICAgICAgICAgaWYgKCFtX2JhY2t0cmFja1RvTGFiZWwgJiYgcmhzLm1fYmFja3RyYWNrVG9MYWJl
bCkKLSAgICAgICAgICAgICAgICBtX2JhY2t0cmFja1RvTGFiZWwgPSByaHMubV9iYWNrdHJhY2tU
b0xhYmVsOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBzZXRCYWNrdHJhY2tUb0xhYmVsKExh
YmVsKiBiYWNrdHJhY2tUb0xhYmVsKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIW1fYmFj
a3RyYWNrVG9MYWJlbCkKLSAgICAgICAgICAgICAgICBtX2JhY2t0cmFja1RvTGFiZWwgPSBiYWNr
dHJhY2tUb0xhYmVsOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBoYXNCYWNrdHJhY2tUb0xh
YmVsKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fYmFja3RyYWNrVG9MYWJlbDsK
LSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgc2V0QmFja3RyYWNrSnVtcExpc3QoSnVtcExpc3Qq
IGp1bXBMaXN0KQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2JhY2t0cmFja1R5cGUgPSBCYWNr
dHJhY2tKdW1wTGlzdDsKLSAgICAgICAgICAgIG1fYmFja3RyYWNrU291cmNlSnVtcHMgPSBqdW1w
TGlzdDsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgc2V0QmFja3RyYWNrU291cmNlTGFiZWwo
TGFiZWwqIGJhY2t0cmFja1NvdXJjZUxhYmVsKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2Jh
Y2t0cmFja1NvdXJjZUxhYmVsID0gYmFja3RyYWNrU291cmNlTGFiZWw7Ci0gICAgICAgIH0KLQot
ICAgICAgICB2b2lkIHNldERhdGFMYWJlbChEYXRhTGFiZWxQdHIgZHApCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGlmIChtX3N1YkRhdGFMYWJlbFB0cikgewotICAgICAgICAgICAgICAgICptX3N1
YkRhdGFMYWJlbFB0ciA9IGRwOwotICAgICAgICAgICAgICAgIG1fc3ViRGF0YUxhYmVsUHRyID0g
MDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKCFoYXNEYXRh
TGFiZWwoKSk7Ci0gICAgICAgICAgICAgICAgbV9kYXRhTGFiZWxQdHIgPSBkcDsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgY2xlYXJTdWJEYXRhTGFiZWxQdHIoKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBtX3N1YkRhdGFMYWJlbFB0ciA9IDA7Ci0gICAgICAgIH0K
LQotICAgICAgICB2b2lkIHNldFN1YkRhdGFMYWJlbFB0cihEYXRhTGFiZWxQdHIqIHN1YkRhdGFM
YWJlbFB0cikKLSAgICAgICAgewotICAgICAgICAgICAgbV9zdWJEYXRhTGFiZWxQdHIgPSBzdWJE
YXRhTGFiZWxQdHI7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGxpbmtUb05leHRCYWNrdHJh
Y2soQmFja3RyYWNrRGVzdGluYXRpb24qIG5leHRCYWNrdHJhY2spCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIG1fbmV4dEJhY2t0cmFjayA9IG5leHRCYWNrdHJhY2s7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpbnQzMl90IGdldFN0YWNrT2Zmc2V0KCkKKyAgICAvLyBCYWNrdHJhY2tpbmdTdGF0ZQor
ICAgIC8vIFRoaXMgY2xhc3MgZW5jYXBzdWFsdGVzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzdGF0
ZSBvZiBjb2RlIGdlbmVyYXRpb24KKyAgICAvLyB3aGlsc3QgZ2VuZXJhdGluZyB0aGUgY29kZSBm
b3IgYmFja3RyYWNraW5nLCB3aGVuIGEgdGVybSBmYWlscyB0byBtYXRjaC4KKyAgICAvLyBVcG9u
IGVudHJ5IHRvIGNvZGUgZ2VuZXJhdGlvbiBvZiB0aGUgYmFja3RyYWNraW5nIGNvZGUgZm9yIGEg
Z2l2ZW4gbm9kZSwKKyAgICAvLyB0aGUgQmFja3RyYWNraW5nIHN0YXRlIHdpbGwgaG9sZCByZWZl
cmVuY2VzIHRvIGFsbCBjb250cm9sIGZsb3cgc291cmNlcworICAgIC8vIHRoYXQgYXJlIG91dHB1
dHMgaW4gbmVlZCBvZiBmdXJ0aGVyIGJhY2t0cmFja2luZyBmcm9tIHRoZSBwcmlvciBub2RlCisg
ICAgLy8gZ2VuZXJhdGVkICh3aGljaCBpcyB0aGUgc3Vic2VxdWVudCBvcGVyYXRpb24gaW4gdGhl
IHJlZ3VsYXIgZXhwcmVzc2lvbiwKKyAgICAvLyBhbmQgaW4gdGhlIG1fb3BzIFZlY3Rvciwgc2lu
Y2Ugd2UgZ2VuZXJhdGVkIGJhY2t0cmFja2luZyBiYWNrd2FyZHMpLgorICAgIC8vIFRoZXNlIHJl
ZmVyZW5jZXMgdG8gY29udHJvbCBmbG93IHRha2UgdGhlIGZvcm0gb2Y6CisgICAgLy8gIC0gQSBq
dW1wIGxpc3Qgb2YganVtcHMsIHRvIGJlIGxpbmtlZCB0byBjb2RlIHRoYXQgd2lsbCBiYWNrdHJh
Y2sgdGhlbQorICAgIC8vICAgIGZ1cnRoZXIuCisgICAgLy8gIC0gQSBzZXQgb2YgRGF0YUxhYmVs
UHRyIHZhbHVlcywgdG8gYmUgcG9wdWxhdGVkIHdpdGggdmFsdWVzIHRvIGJlCisgICAgLy8gICAg
dHJlYXRlZCBlZmZlY3RpdmVseSBhcyByZXR1cm4gYWRkcmVzc2VzIGJhY2t0cmFja2luZyBpbnRv
IGNvbXBsZXgKKyAgICAvLyAgICBzdWJwYXR0ZXJucy4KKyAgICAvLyAgLSBBIGZsYWcgaW5kaWNh
dGluZyB0aGF0IHRoZSBjdXJyZW50IHNlcXVlbmNlIG9mIGdlbmVyYXRlZCBjb2RlIHVwIHRvCisg
ICAgLy8gICAgdGhpcyBwb2ludCByZXF1aXJlcyBiYWNrdHJhY2tpbmcuCisgICAgY2xhc3MgQmFj
a3RyYWNraW5nU3RhdGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgQmFja3RyYWNraW5nU3RhdGUo
KQorICAgICAgICAgICAgOiBtX3BlbmRpbmdGYWxsdGhyb3VnaChmYWxzZSkKICAgICAgICAgewot
ICAgICAgICAgICAgQVNTRVJUKG1fYmFja3RyYWNrVHlwZSA9PSBCYWNrdHJhY2tTdGFja09mZnNl
dCk7Ci0gICAgICAgICAgICByZXR1cm4gbV9iYWNrdHJhY2tTdGFja09mZnNldDsKICAgICAgICAg
fQogCi0gICAgICAgIExhYmVsIGdldExhYmVsKCkKKyAgICAgICAgLy8gQWRkIGEganVtcCBvciBq
dW1wcywgYSByZXR1cm4gYWRkcmVzcywgb3Igc2V0IHRoZSBmbGFnIGluZGljYXRpbmcKKyAgICAg
ICAgLy8gdGhhdCB0aGUgY3VycmVudCAnZmFsbHRocm91Z2gnIGNvbnRyb2wgZmxvdyByZXF1aXJl
cyBiYWNrdHJhY2tpbmcuCisgICAgICAgIHZvaWQgYXBwZW5kKGNvbnN0IEp1bXAmIGp1bXApCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChtX2JhY2t0cmFja1R5cGUgPT0gQmFja3RyYWNr
TGFiZWwpOwotICAgICAgICAgICAgcmV0dXJuIG1fYmFja3RyYWNrTGFiZWw7CisgICAgICAgICAg
ICBtX2xhdGVyRmFpbHVyZXMuYXBwZW5kKGp1bXApOwogICAgICAgICB9Ci0KLSAgICAgICAgSnVt
cExpc3QmIGdldEJhY2t0cmFja0p1bXBzKCkKKyAgICAgICAgdm9pZCBhcHBlbmQoSnVtcExpc3Qm
IGp1bXBMaXN0KQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9iYWNrVHJhY2tKdW1w
czsKKyAgICAgICAgICAgIG1fbGF0ZXJGYWlsdXJlcy5hcHBlbmQoanVtcExpc3QpOwogICAgICAg
ICB9Ci0KLSAgICAgICAgRGF0YUxhYmVsUHRyJiBnZXREYXRhTGFiZWwoKQorICAgICAgICB2b2lk
IGFwcGVuZChjb25zdCBEYXRhTGFiZWxQdHImIHJldHVybkFkZHJlc3MpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBtX2RhdGFMYWJlbFB0cjsKKyAgICAgICAgICAgIG1fcGVuZGluZ1Jl
dHVybnMuYXBwZW5kKHJldHVybkFkZHJlc3MpOwogICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBq
dW1wVG9CYWNrdHJhY2soTWFjcm9Bc3NlbWJsZXIqIG1hc20pCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGlmIChpc0p1bXBMaXN0KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAobV9iYWNrdHJhY2tT
b3VyY2VMYWJlbCAmJiAobV9iYWNrdHJhY2tTb3VyY2VMYWJlbC0+aXNTZXQoKSkpCi0gICAgICAg
ICAgICAgICAgICAgIG1hc20tPmp1bXAoKS5saW5rVG8oKm1fYmFja3RyYWNrU291cmNlTGFiZWws
IG1hc20pOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV9iYWNr
dHJhY2tTb3VyY2VKdW1wcy0+YXBwZW5kKG1hc20tPmp1bXAoKSk7Ci0gICAgICAgICAgICB9IGVs
c2UgaWYgKGlzU3RhY2tPZmZzZXQoKSkKLSAgICAgICAgICAgICAgICBtYXNtLT5qdW1wKEFkZHJl
c3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIG1fYmFja3RyYWNrU3RhY2tPZmZzZXQpKTsKLSAgICAg
ICAgICAgIGVsc2UgaWYgKGlzTGFiZWwoKSkKLSAgICAgICAgICAgICAgICBtYXNtLT5qdW1wKCku
bGlua1RvKG1fYmFja3RyYWNrTGFiZWwsIG1hc20pOwotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIG1fYmFja1RyYWNrSnVtcHMuYXBwZW5kKG1hc20tPmp1bXAoKSk7Ci0gICAgICAg
IH0KLQotICAgICAgICB2b2lkIGp1bXBUb0JhY2t0cmFjayhZYXJyR2VuZXJhdG9yKiBnZW5lcmF0
b3IsIEp1bXAganVtcCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGlzSnVtcExpc3QoKSkg
ewotICAgICAgICAgICAgICAgIGlmIChtX2JhY2t0cmFja1NvdXJjZUxhYmVsICYmIChtX2JhY2t0
cmFja1NvdXJjZUxhYmVsLT5pc1NldCgpKSkKLSAgICAgICAgICAgICAgICAgICAganVtcC5saW5r
VG8oKm1fYmFja3RyYWNrU291cmNlTGFiZWwsIGdlbmVyYXRvcik7Ci0gICAgICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgICAgICBtX2JhY2t0cmFja1NvdXJjZUp1bXBzLT5hcHBlbmQo
anVtcCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGlzU3RhY2tPZmZzZXQoKSkKLSAgICAgICAg
ICAgICAgICBnZW5lcmF0b3ItPm1fZXhwcmVzc2lvblN0YXRlLmFkZEluZGlyZWN0SnVtcEVudHJ5
KGdldFN0YWNrT2Zmc2V0KCksIGp1bXApOwotICAgICAgICAgICAgZWxzZSBpZiAoaXNMYWJlbCgp
KQotICAgICAgICAgICAgICAgIGp1bXAubGlua1RvKGdldExhYmVsKCksIGdlbmVyYXRvcik7Ci0g
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9iYWNrVHJhY2tKdW1wcy5hcHBlbmQo
anVtcCk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGp1bXBUb0JhY2t0cmFjayhZYXJyR2Vu
ZXJhdG9yKiBnZW5lcmF0b3IsIEp1bXBMaXN0JiBqdW1wcykKKyAgICAgICAgdm9pZCBmYWxsdGhy
b3VnaCgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChpc0p1bXBMaXN0KCkpIHsKLSAgICAg
ICAgICAgICAgICBpZiAobV9iYWNrdHJhY2tTb3VyY2VMYWJlbCAmJiAobV9iYWNrdHJhY2tTb3Vy
Y2VMYWJlbC0+aXNTZXQoKSkpCi0gICAgICAgICAgICAgICAgICAgIGp1bXBzLmxpbmtUbygqbV9i
YWNrdHJhY2tTb3VyY2VMYWJlbCwgZ2VuZXJhdG9yKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgIG1fYmFja3RyYWNrU291cmNlSnVtcHMtPmFwcGVuZChqdW1wcyk7
Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGlzU3RhY2tPZmZzZXQoKSkKLSAgICAgICAgICAgICAg
ICBnZW5lcmF0b3ItPm1fZXhwcmVzc2lvblN0YXRlLmFkZEluZGlyZWN0SnVtcEVudHJ5KGdldFN0
YWNrT2Zmc2V0KCksIGp1bXBzKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGlzTGFiZWwoKSkKLSAg
ICAgICAgICAgICAgICBqdW1wcy5saW5rVG8oZ2V0TGFiZWwoKSwgZ2VuZXJhdG9yKTsKLSAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX2JhY2tUcmFja0p1bXBzLmFwcGVuZChqdW1w
cyk7CisgICAgICAgICAgICBBU1NFUlQoIW1fcGVuZGluZ0ZhbGx0aHJvdWdoKTsKKyAgICAgICAg
ICAgIG1fcGVuZGluZ0ZhbGx0aHJvdWdoID0gdHJ1ZTsKICAgICAgICAgfQogCi0gICAgICAgIGJv
b2wgcGxhbnRKdW1wVG9CYWNrdHJhY2tJZkV4aXN0cyhZYXJyR2VuZXJhdG9yKiBnZW5lcmF0b3Ip
CisgICAgICAgIC8vIFRoZXNlIG1ldGhvZHMgY2xlYXIgdGhlIGJhY2t0cmFja2luZyBzdGF0ZSwg
ZWl0aGVyIGxpbmtpbmcgdG8gdGhlCisgICAgICAgIC8vIGN1cnJlbnQgbG9jYXRpb24sIGEgcHJv
dmlkZWQgbGFiZWwsIG9yIGNvcHlpbmcgdGhlIGJhY2t0cmFja2luZyBvdXQKKyAgICAgICAgLy8g
dG8gYSBKdW1wTGlzdC4gQWxsIGFjdGlvbnMgbWF5IHJlcXVpcmUgY29kZSBnZW5lcmF0aW9uIHRv
IHRha2UgcGxhY2UsCisgICAgICAgIC8vIGFuZCBhcyBzdWNoIGFyZSBwYXNzZWQgYSBwb2ludGVy
IHRvIHRoZSBhc3NlbWJsZXIuCisgICAgICAgIHZvaWQgbGluayhNYWNyb0Fzc2VtYmxlciogYXNz
ZW1ibGVyKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaXNKdW1wTGlzdCgpKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKG1fYmFja3RyYWNrU291cmNlTGFiZWwgJiYgKG1fYmFja3RyYWNrU291
cmNlTGFiZWwtPmlzU2V0KCkpKQotICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3ItPmp1bXAo
Km1fYmFja3RyYWNrU291cmNlTGFiZWwpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICAgICAgbV9iYWNrdHJhY2tTb3VyY2VKdW1wcy0+YXBwZW5kKGdlbmVyYXRvci0+anVt
cCgpKTsKLQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgaWYgKG1f
cGVuZGluZ1JldHVybnMuc2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgTGFiZWwgaGVyZShhc3Nl
bWJsZXIpOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3BlbmRp
bmdSZXR1cm5zLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICBtX2JhY2t0cmFja1Jl
Y29yZHMuYXBwZW5kKFJldHVybkFkZHJlc3NSZWNvcmQobV9wZW5kaW5nUmV0dXJuc1tpXSwgaGVy
ZSkpOworICAgICAgICAgICAgICAgIG1fcGVuZGluZ1JldHVybnMuY2xlYXIoKTsKICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgaWYgKGlzU3RhY2tPZmZzZXQoKSkgewotICAgICAgICAgICAg
ICAgIGdlbmVyYXRvci0+anVtcChBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBnZXRTdGFj
a09mZnNldCgpKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGlmIChpc0xhYmVsKCkpIHsKLSAgICAgICAgICAgICAgICBnZW5lcmF0
b3ItPmp1bXAoZ2V0TGFiZWwoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGhhc0RhdGFMYWJlbCgp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvci0+bV9leHByZXNzaW9uU3RhdGUubV9i
YWNrdHJhY2tSZWNvcmRzLmFwcGVuZChBbHRlcm5hdGl2ZUJhY2t0cmFja1JlY29yZChnZXREYXRh
TGFiZWwoKSwgZ2V0TGFiZWwoKSkpOwotICAgICAgICAgICAgICAgICAgICBjbGVhckRhdGFMYWJl
bCgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgbV9s
YXRlckZhaWx1cmVzLmxpbmsoYXNzZW1ibGVyKTsKKyAgICAgICAgICAgIG1fbGF0ZXJGYWlsdXJl
cy5jbGVhcigpOworICAgICAgICAgICAgbV9wZW5kaW5nRmFsbHRocm91Z2ggPSBmYWxzZTsKICAg
ICAgICAgfQotCi0gICAgICAgIHZvaWQgbGlua0JhY2t0cmFja1RvTGFiZWwoTGFiZWwgYmFja3Ry
YWNrTGFiZWwpCisgICAgICAgIHZvaWQgbGlua1RvKExhYmVsIGxhYmVsLCBNYWNyb0Fzc2VtYmxl
ciogYXNzZW1ibGVyKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobV9iYWNrdHJhY2tUb0xh
YmVsKQotICAgICAgICAgICAgICAgICptX2JhY2t0cmFja1RvTGFiZWwgPSBiYWNrdHJhY2tMYWJl
bDsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgbGlua0FsdGVybmF0aXZlQmFja3RyYWNrcyhZ
YXJyR2VuZXJhdG9yKiBnZW5lcmF0b3IsIGJvb2wgbmV4dEl0ZXJhdGlvbiA9IGZhbHNlKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBMYWJlbCBoZXJlTGFiZWwgPSBnZW5lcmF0b3ItPmxhYmVsKCk7
Ci0KLSAgICAgICAgICAgIGlmIChtX2JhY2t0cmFja1RvTGFiZWwpIHsKLSAgICAgICAgICAgICAg
ICAqbV9iYWNrdHJhY2tUb0xhYmVsID0gaGVyZUxhYmVsOwotICAgICAgICAgICAgICAgIG1fYmFj
a3RyYWNrVG9MYWJlbCA9IDA7CisgICAgICAgICAgICBpZiAobV9wZW5kaW5nUmV0dXJucy5zaXpl
KCkpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wZW5kaW5n
UmV0dXJucy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tSZWNv
cmRzLmFwcGVuZChSZXR1cm5BZGRyZXNzUmVjb3JkKG1fcGVuZGluZ1JldHVybnNbaV0sIGxhYmVs
KSk7CisgICAgICAgICAgICAgICAgbV9wZW5kaW5nUmV0dXJucy5jbGVhcigpOwogICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBtX2JhY2tUcmFja0p1bXBzLmxpbmsoZ2VuZXJhdG9yKTsKLQot
ICAgICAgICAgICAgaWYgKG5leHRJdGVyYXRpb24pCi0gICAgICAgICAgICAgICAgZ2VuZXJhdG9y
LT5tX2V4cHJlc3Npb25TdGF0ZS5saW5rVG9OZXh0SXRlcmF0aW9uKGhlcmVMYWJlbCk7Ci0KLSAg
ICAgICAgICAgIGlmIChoYXNEYXRhTGFiZWwoKSkgewotICAgICAgICAgICAgICAgIGdlbmVyYXRv
ci0+bV9leHByZXNzaW9uU3RhdGUubV9iYWNrdHJhY2tSZWNvcmRzLmFwcGVuZChBbHRlcm5hdGl2
ZUJhY2t0cmFja1JlY29yZChnZXREYXRhTGFiZWwoKSwgaGVyZUxhYmVsKSk7Ci0gICAgICAgICAg
ICAgICAgLy8gZGF0YSBsYWJlbCBjbGVhcmVkIGFzIGEgcmVzdWx0IG9mIHRoZSBjbGVhcigpIGJl
bG93Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNsZWFyKCk7CisgICAgICAgICAgICBp
ZiAobV9wZW5kaW5nRmFsbHRocm91Z2gpCisgICAgICAgICAgICAgICAgYXNzZW1ibGVyLT5qdW1w
KGxhYmVsKTsKKyAgICAgICAgICAgIG1fbGF0ZXJGYWlsdXJlcy5saW5rVG8obGFiZWwsIGFzc2Vt
Ymxlcik7CisgICAgICAgICAgICBtX2xhdGVyRmFpbHVyZXMuY2xlYXIoKTsKKyAgICAgICAgICAg
IG1fcGVuZGluZ0ZhbGx0aHJvdWdoID0gZmFsc2U7CiAgICAgICAgIH0KLQotICAgICAgICB2b2lk
IGxpbmtBbHRlcm5hdGl2ZUJhY2t0cmFja3NUbyhZYXJyR2VuZXJhdG9yKiBnZW5lcmF0b3IsIExh
YmVsIGxhYmVsLCBib29sIG5leHRJdGVyYXRpb24gPSBmYWxzZSkKKyAgICAgICAgdm9pZCB0YWtl
QmFja3RyYWNrc1RvSnVtcExpc3QoSnVtcExpc3QmIGp1bXBMaXN0LCBNYWNyb0Fzc2VtYmxlciog
YXNzZW1ibGVyKQogICAgICAgICB7Ci0gICAgICAgICAgICBtX2JhY2tUcmFja0p1bXBzLmxpbmtU
byhsYWJlbCwgZ2VuZXJhdG9yKTsKLQotICAgICAgICAgICAgaWYgKG5leHRJdGVyYXRpb24pCi0g
ICAgICAgICAgICAgICAgZ2VuZXJhdG9yLT5tX2V4cHJlc3Npb25TdGF0ZS5saW5rVG9OZXh0SXRl
cmF0aW9uKGxhYmVsKTsKLQotICAgICAgICAgICAgaWYgKGhhc0RhdGFMYWJlbCgpKSB7Ci0gICAg
ICAgICAgICAgICAgZ2VuZXJhdG9yLT5tX2V4cHJlc3Npb25TdGF0ZS5tX2JhY2t0cmFja1JlY29y
ZHMuYXBwZW5kKEFsdGVybmF0aXZlQmFja3RyYWNrUmVjb3JkKGdldERhdGFMYWJlbCgpLCBsYWJl
bCkpOwotICAgICAgICAgICAgICAgIGNsZWFyRGF0YUxhYmVsKCk7CisgICAgICAgICAgICBpZiAo
bV9wZW5kaW5nUmV0dXJucy5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICBMYWJlbCBoZXJlKGFz
c2VtYmxlcik7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcGVu
ZGluZ1JldHVybnMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgIG1fYmFja3RyYWNr
UmVjb3Jkcy5hcHBlbmQoUmV0dXJuQWRkcmVzc1JlY29yZChtX3BlbmRpbmdSZXR1cm5zW2ldLCBo
ZXJlKSk7CisgICAgICAgICAgICAgICAgbV9wZW5kaW5nUmV0dXJucy5jbGVhcigpOworICAgICAg
ICAgICAgICAgIG1fcGVuZGluZ0ZhbGx0aHJvdWdoID0gdHJ1ZTsKICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmIChtX3BlbmRpbmdGYWxsdGhyb3VnaCkKKyAgICAgICAgICAgICAgICBqdW1w
TGlzdC5hcHBlbmQoYXNzZW1ibGVyLT5qdW1wKCkpOworICAgICAgICAgICAganVtcExpc3QuYXBw
ZW5kKG1fbGF0ZXJGYWlsdXJlcyk7CisgICAgICAgICAgICBtX2xhdGVyRmFpbHVyZXMuY2xlYXIo
KTsKKyAgICAgICAgICAgIG1fcGVuZGluZ0ZhbGx0aHJvdWdoID0gZmFsc2U7CiAgICAgICAgIH0K
IAotICAgIHByaXZhdGU6Ci0gICAgICAgIEJhY2t0cmFja1R5cGUgbV9iYWNrdHJhY2tUeXBlOwot
ICAgICAgICBpbnQzMl90IG1fYmFja3RyYWNrU3RhY2tPZmZzZXQ7Ci0gICAgICAgIExhYmVsIG1f
YmFja3RyYWNrTGFiZWw7Ci0gICAgICAgIERhdGFMYWJlbFB0ciBtX2RhdGFMYWJlbFB0cjsKLSAg
ICAgICAgTGFiZWwqIG1fYmFja3RyYWNrVG9MYWJlbDsKLSAgICAgICAgRGF0YUxhYmVsUHRyKiBt
X3N1YkRhdGFMYWJlbFB0cjsKLSAgICAgICAgQmFja3RyYWNrRGVzdGluYXRpb24qIG1fbmV4dEJh
Y2t0cmFjazsKLSAgICAgICAgTGFiZWwqIG1fYmFja3RyYWNrU291cmNlTGFiZWw7Ci0gICAgICAg
IEp1bXBMaXN0KiBtX2JhY2t0cmFja1NvdXJjZUp1bXBzOwotICAgICAgICBKdW1wTGlzdCBtX2Jh
Y2tUcmFja0p1bXBzOwotICAgIH07Ci0KLSAgICBzdHJ1Y3QgVGVybUdlbmVyYXRpb25TdGF0ZSB7
Ci0gICAgICAgIFRlcm1HZW5lcmF0aW9uU3RhdGUoUGF0dGVybkRpc2p1bmN0aW9uKiBkaXNqdW5j
dGlvbiwgdW5zaWduZWQgY2hlY2tlZFRvdGFsKQotICAgICAgICAgICAgOiBkaXNqdW5jdGlvbihk
aXNqdW5jdGlvbikKLSAgICAgICAgICAgICwgY2hlY2tlZFRvdGFsKGNoZWNrZWRUb3RhbCkKLSAg
ICAgICAgICAgICwgbV9zdWJQYXJlbk51bSgwKQotICAgICAgICAgICAgLCBtX2xpbmtlZEJhY2t0
cmFjaygwKQotICAgICAgICAgICAgLCBtX2p1bXBMaXN0KDApCi0gICAgICAgIHsKLSAgICAgICAg
fQotCi0gICAgICAgIHZvaWQgcmVzZXRBbHRlcm5hdGl2ZSgpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIG1fYmFja3RyYWNrLmNsZWFyKCk7Ci0gICAgICAgICAgICBhbHQgPSAwOwotICAgICAgICB9
Ci0gICAgICAgIGJvb2wgYWx0ZXJuYXRpdmVWYWxpZCgpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBhbHQgPCBkaXNqdW5jdGlvbi0+bV9hbHRlcm5hdGl2ZXMuc2l6ZSgpOwotICAgICAg
ICB9Ci0gICAgICAgIHZvaWQgbmV4dEFsdGVybmF0aXZlKCkKLSAgICAgICAgewotICAgICAgICAg
ICAgKythbHQ7Ci0gICAgICAgIH0KLSAgICAgICAgUGF0dGVybkFsdGVybmF0aXZlKiBhbHRlcm5h
dGl2ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBkaXNqdW5jdGlvbi0+bV9hbHRl
cm5hdGl2ZXNbYWx0XTsKLSAgICAgICAgfQotICAgICAgICBib29sIGlzTGFzdEFsdGVybmF0aXZl
KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIChhbHQgKyAxKSA9PSBkaXNqdW5jdGlv
bi0+bV9hbHRlcm5hdGl2ZXMuc2l6ZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCByZXNl
dFRlcm0oKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoYWx0ZXJuYXRpdmVWYWxpZCgp
KTsKLSAgICAgICAgICAgIHQgPSAwOwotICAgICAgICAgICAgbV9zdWJQYXJlbk51bSA9IDA7Ci0g
ICAgICAgIH0KLSAgICAgICAgYm9vbCB0ZXJtVmFsaWQoKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBBU1NFUlQoYWx0ZXJuYXRpdmVWYWxpZCgpKTsKLSAgICAgICAgICAgIHJldHVybiB0IDwgYWx0
ZXJuYXRpdmUoKS0+bV90ZXJtcy5zaXplKCk7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBuZXh0
VGVybSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChhbHRlcm5hdGl2ZVZhbGlkKCkp
OwotICAgICAgICAgICAgKyt0OwotICAgICAgICB9Ci0gICAgICAgIFBhdHRlcm5UZXJtJiB0ZXJt
KCkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKGFsdGVybmF0aXZlVmFsaWQoKSk7Ci0g
ICAgICAgICAgICByZXR1cm4gYWx0ZXJuYXRpdmUoKS0+bV90ZXJtc1t0XTsKLSAgICAgICAgfQot
ICAgICAgICBib29sIGlzTGFzdFRlcm0oKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQo
YWx0ZXJuYXRpdmVWYWxpZCgpKTsKLSAgICAgICAgICAgIHJldHVybiAodCArIDEpID09IGFsdGVy
bmF0aXZlKCktPm1fdGVybXMuc2l6ZSgpOwotICAgICAgICB9Ci0gICAgICAgIHVuc2lnbmVkIGdl
dFN1YlBhcmVuTnVtKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fc3ViUGFyZW5O
dW0rKzsKLSAgICAgICAgfQotICAgICAgICBib29sIGlzTWFpbkRpc2p1bmN0aW9uKCkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuICFkaXNqdW5jdGlvbi0+bV9wYXJlbnQ7Ci0gICAgICAg
IH0KLQotICAgICAgICB2b2lkIHNldEp1bXBMaXN0VG9QcmlvclBhcmVuKEp1bXBMaXN0KiBqdW1w
TGlzdCkKLSAgICAgICAgewotICAgICAgICAgICAgbV9qdW1wTGlzdCA9IGp1bXBMaXN0OwotICAg
ICAgICB9Ci0KLSAgICAgICAgSnVtcExpc3QqIGdldEp1bXBMaXN0VG9QcmlvclBhcmVuKCkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fanVtcExpc3Q7Ci0gICAgICAgIH0KLQotICAg
ICAgICBQYXR0ZXJuVGVybSYgbG9va2FoZWFkVGVybSgpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IEFTU0VSVChhbHRlcm5hdGl2ZVZhbGlkKCkpOwotICAgICAgICAgICAgQVNTRVJUKCh0ICsgMSkg
PCBhbHRlcm5hdGl2ZSgpLT5tX3Rlcm1zLnNpemUoKSk7Ci0gICAgICAgICAgICByZXR1cm4gYWx0
ZXJuYXRpdmUoKS0+bV90ZXJtc1t0ICsgMV07Ci0gICAgICAgIH0KLSAgICAgICAgYm9vbCBpc1Np
bmdsZVBhdHRlcm5DaGFyYWN0ZXJMb29rYWhlYWRUZXJtKCkKLSAgICAgICAgewotICAgICAgICAg
ICAgQVNTRVJUKGFsdGVybmF0aXZlVmFsaWQoKSk7Ci0gICAgICAgICAgICByZXR1cm4gKCh0ICsg
MSkgPCBhbHRlcm5hdGl2ZSgpLT5tX3Rlcm1zLnNpemUoKSkKLSAgICAgICAgICAgICAgICAmJiAo
bG9va2FoZWFkVGVybSgpLnR5cGUgPT0gUGF0dGVyblRlcm06OlR5cGVQYXR0ZXJuQ2hhcmFjdGVy
KQotICAgICAgICAgICAgICAgICYmIChsb29rYWhlYWRUZXJtKCkucXVhbnRpdHlUeXBlID09IFF1
YW50aWZpZXJGaXhlZENvdW50KQotICAgICAgICAgICAgICAgICYmIChsb29rYWhlYWRUZXJtKCku
cXVhbnRpdHlDb3VudCA9PSAxKTsKLSAgICAgICAgfQotCi0gICAgICAgIGludCBpbnB1dE9mZnNl
dCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiB0ZXJtKCkuaW5wdXRQb3NpdGlvbiAt
IGNoZWNrZWRUb3RhbDsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgY2xlYXJCYWNrdHJhY2so
KQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2JhY2t0cmFjay5jbGVhcihmYWxzZSk7Ci0gICAg
ICAgICAgICBtX2xpbmtlZEJhY2t0cmFjayA9IDA7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lk
IGp1bXBUb0JhY2t0cmFjayhNYWNyb0Fzc2VtYmxlciogbWFzbSkKLSAgICAgICAgewotICAgICAg
ICAgICAgbV9iYWNrdHJhY2suanVtcFRvQmFja3RyYWNrKG1hc20pOwotICAgICAgICB9Ci0KLSAg
ICAgICAgdm9pZCBqdW1wVG9CYWNrdHJhY2soWWFyckdlbmVyYXRvciogZ2VuZXJhdG9yLCBKdW1w
IGp1bXApCisgICAgICAgIGJvb2wgaXNFbXB0eSgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1f
YmFja3RyYWNrLmp1bXBUb0JhY2t0cmFjayhnZW5lcmF0b3IsIGp1bXApOworICAgICAgICAgICAg
cmV0dXJuIG1fbGF0ZXJGYWlsdXJlcy5lbXB0eSgpICYmIG1fcGVuZGluZ1JldHVybnMuaXNFbXB0
eSgpICYmICFtX3BlbmRpbmdGYWxsdGhyb3VnaDsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQg
anVtcFRvQmFja3RyYWNrKFlhcnJHZW5lcmF0b3IqIGdlbmVyYXRvciwgSnVtcExpc3QmIGp1bXBz
KQorICAgICAgICAvLyBDYWxsZWQgYXQgdGhlIGVuZCBvZiBjb2RlIGdlbmVyYXRpb24gdG8gbGlu
ayBhbGwgcmV0dXJuIGFkZHJlc3Nlcy4KKyAgICAgICAgdm9pZCBsaW5rRGF0YUxhYmVscyhMaW5r
QnVmZmVyJiBsaW5rQnVmZmVyKQogICAgICAgICB7Ci0gICAgICAgICAgICBtX2JhY2t0cmFjay5q
dW1wVG9CYWNrdHJhY2soZ2VuZXJhdG9yLCBqdW1wcyk7CisgICAgICAgICAgICBBU1NFUlQoaXNF
bXB0eSgpKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2JhY2t0cmFj
a1JlY29yZHMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5wYXRjaCht
X2JhY2t0cmFja1JlY29yZHNbaV0ubV9kYXRhTGFiZWwsIGxpbmtCdWZmZXIubG9jYXRpb25PZiht
X2JhY2t0cmFja1JlY29yZHNbaV0ubV9iYWNrdHJhY2tMb2NhdGlvbikpOwogICAgICAgICB9CiAK
LSAgICAgICAgYm9vbCBwbGFudEp1bXBUb0JhY2t0cmFja0lmRXhpc3RzKFlhcnJHZW5lcmF0b3Iq
IGdlbmVyYXRvcikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fYmFja3RyYWNrLnBs
YW50SnVtcFRvQmFja3RyYWNrSWZFeGlzdHMoZ2VuZXJhdG9yKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHZvaWQgbGlua0RhdGFMYWJlbFRvQmFja3RyYWNrSWZFeGlzdHMoWWFyckdlbmVyYXRvciog
Z2VuZXJhdG9yLCBEYXRhTGFiZWxQdHIgZGF0YUxhYmVsKQotICAgICAgICB7Ci0gICAgICAgICAg
ICAvLyBJZiB3ZSBoYXZlIGEgc3RhY2sgb2Zmc2V0IGJhY2t0cmFjayBkZXN0aW5hdGlvbiwgdXNl
IGl0IGRpcmVjdGx5Ci0gICAgICAgICAgICBpZiAobV9iYWNrdHJhY2suaXNTdGFja09mZnNldCgp
KSB7Ci0gICAgICAgICAgICAgICAgZ2VuZXJhdG9yLT5tX2V4cHJlc3Npb25TdGF0ZS5hZGRJbmRp
cmVjdEp1bXBFbnRyeShtX2JhY2t0cmFjay5nZXRTdGFja09mZnNldCgpLCBkYXRhTGFiZWwpOwot
ICAgICAgICAgICAgICAgIG1fYmFja3RyYWNrLmNsZWFyU3ViRGF0YUxhYmVsUHRyKCk7Ci0gICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgYSBiYWNrdHJh
Y2sgbGFiZWwsIGNvbm5lY3QgdGhlIGRhdGFsYWJlbCB0byBpdCBkaXJlY3RseS4KLSAgICAgICAg
ICAgICAgICBpZiAobV9iYWNrdHJhY2suaXNMYWJlbCgpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGdlbmVyYXRvci0+bV9leHByZXNzaW9uU3RhdGUubV9iYWNrdHJhY2tSZWNvcmRzLmFwcGVuZChB
bHRlcm5hdGl2ZUJhY2t0cmFja1JlY29yZChkYXRhTGFiZWwsIG1fYmFja3RyYWNrLmdldExhYmVs
KCkpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2suY2xlYXJTdWJEYXRhTGFiZWxQ
dHIoKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgc2V0QmFj
a3RyYWNrRGF0YUxhYmVsKGRhdGFMYWJlbCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQot
ICAgICAgICB2b2lkIGFkZEJhY2t0cmFja0p1bXAoSnVtcCBqdW1wKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBtX2JhY2t0cmFjay5hZGRCYWNrdHJhY2tKdW1wKGp1bXApOwotICAgICAgICB9Ci0K
LSAgICAgICAgdm9pZCBzZXRCYWNrdHJhY2tEYXRhTGFiZWwoRGF0YUxhYmVsUHRyIGRwKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBtX2JhY2t0cmFjay5zZXREYXRhTGFiZWwoZHApOwotICAgICAg
ICB9Ci0KLSAgICAgICAgdm9pZCBzZXRCYWNrVHJhY2tTdGFja09mZnNldChpbnQzMl90IHN0YWNr
T2Zmc2V0KQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2JhY2t0cmFjay5zZXRTdGFja09mZnNl
dChzdGFja09mZnNldCk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHNldEJhY2t0cmFja0xh
YmVsKExhYmVsIGxhYmVsKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2JhY2t0cmFjay5zZXRM
YWJlbChsYWJlbCk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGxpbmtBbHRlcm5hdGl2ZUJh
Y2t0cmFja3MoWWFyckdlbmVyYXRvciogZ2VuZXJhdG9yLCBib29sIG5leHRJdGVyYXRpb24gPSBm
YWxzZSkKLSAgICAgICAgewotICAgICAgICAgICAgbV9iYWNrdHJhY2subGlua0FsdGVybmF0aXZl
QmFja3RyYWNrcyhnZW5lcmF0b3IsIG5leHRJdGVyYXRpb24pOwotICAgICAgICAgICAgbV9saW5r
ZWRCYWNrdHJhY2sgPSAwOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBsaW5rQWx0ZXJuYXRp
dmVCYWNrdHJhY2tzVG8oWWFyckdlbmVyYXRvciogZ2VuZXJhdG9yLCBMYWJlbCBsYWJlbCwgYm9v
bCBuZXh0SXRlcmF0aW9uID0gZmFsc2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fYmFja3Ry
YWNrLmxpbmtBbHRlcm5hdGl2ZUJhY2t0cmFja3NUbyhnZW5lcmF0b3IsIGxhYmVsLCBuZXh0SXRl
cmF0aW9uKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgc2V0QmFja3RyYWNrTGluayhCYWNr
dHJhY2tEZXN0aW5hdGlvbiogbGlua2VkQmFja3RyYWNrKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBtX2xpbmtlZEJhY2t0cmFjayA9IGxpbmtlZEJhY2t0cmFjazsKLSAgICAgICAgfQotCi0gICAg
ICAgIHZvaWQgY2hhaW5CYWNrdHJhY2tzKEJhY2t0cmFja0Rlc3RpbmF0aW9uKiBmb2xsb3dvbkJh
Y2t0cmFjaykKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1fbGlua2VkQmFja3RyYWNrKQot
ICAgICAgICAgICAgICAgIG1fbGlua2VkQmFja3RyYWNrLT5saW5rVG9OZXh0QmFja3RyYWNrKGZv
bGxvd29uQmFja3RyYWNrKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJhY2t0cmFja0Rlc3RpbmF0
aW9uJiBnZXRCYWNrdHJhY2tEZXN0aW5hdGlvbigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBtX2JhY2t0cmFjazsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgcHJvcGFnYXRlQmFj
a3RyYWNraW5nRnJvbShZYXJyR2VuZXJhdG9yKiBnZW5lcmF0b3IsIEJhY2t0cmFja0Rlc3RpbmF0
aW9uJiBiYWNrdHJhY2ssIGJvb2wgZG9KdW1wID0gdHJ1ZSkKLSAgICAgICAgewotICAgICAgICAg
ICAgaWYgKGRvSnVtcCkKLSAgICAgICAgICAgICAgICBtX2JhY2t0cmFjay5qdW1wVG9CYWNrdHJh
Y2soZ2VuZXJhdG9yLCBiYWNrdHJhY2suZ2V0QmFja3RyYWNrSnVtcHMoKSk7Ci0KLSAgICAgICAg
ICAgIGlmIChtX2JhY2t0cmFjay5pc0xhYmVsKCkgJiYgYmFja3RyYWNrLmhhc0JhY2t0cmFja1Rv
TGFiZWwoKSkKLSAgICAgICAgICAgICAgICBiYWNrdHJhY2subGlua0JhY2t0cmFja1RvTGFiZWwo
bV9iYWNrdHJhY2suZ2V0TGFiZWwoKSk7Ci0KLSAgICAgICAgICAgIGlmIChiYWNrdHJhY2suaGFz
RGVzdGluYXRpb24oKSkgewotICAgICAgICAgICAgICAgIGlmIChtX2JhY2t0cmFjay5oYXNEYXRh
TGFiZWwoKSkKLSAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLT5tX2V4cHJlc3Npb25TdGF0
ZS5hZGREYXRhTGFiZWxUb05leHRJdGVyYXRpb24obV9iYWNrdHJhY2suZ2V0RGF0YUxhYmVsKCkp
OwotCi0gICAgICAgICAgICAgICAgbV9iYWNrdHJhY2suY29weVRhcmdldChiYWNrdHJhY2ssIGRv
SnVtcCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBQYXR0ZXJuRGlzanVu
Y3Rpb24qIGRpc2p1bmN0aW9uOwotICAgICAgICBpbnQgY2hlY2tlZFRvdGFsOwogICAgIHByaXZh
dGU6Ci0gICAgICAgIHVuc2lnbmVkIGFsdDsKLSAgICAgICAgdW5zaWduZWQgdDsKLSAgICAgICAg
dW5zaWduZWQgbV9zdWJQYXJlbk51bTsKLSAgICAgICAgQmFja3RyYWNrRGVzdGluYXRpb24gbV9i
YWNrdHJhY2s7Ci0gICAgICAgIEJhY2t0cmFja0Rlc3RpbmF0aW9uKiBtX2xpbmtlZEJhY2t0cmFj
azsKLSAgICAgICAgSnVtcExpc3QqIG1fanVtcExpc3Q7Ci0gICAgfTsKLQotICAgIHN0cnVjdCBQ
YXJlbnRoZXNlc1RhaWwgewotICAgICAgICBQYXJlbnRoZXNlc1RhaWwoUGF0dGVyblRlcm0mIHRl
cm0sIGludCBuZXN0aW5nTGV2ZWwsIEp1bXBMaXN0KiBqdW1wTGlzdFRvUHJpb3JQYXJlbikKLSAg
ICAgICAgICAgIDogbV90ZXJtKHRlcm0pCi0gICAgICAgICAgICAsIG1fbmVzdGluZ0xldmVsKG5l
c3RpbmdMZXZlbCkKLSAgICAgICAgICAgICwgbV9zdWJQYXJlbkluZGV4KDApCi0gICAgICAgICAg
ICAsIG1fanVtcExpc3RUb1ByaW9yUGFyZW4oanVtcExpc3RUb1ByaW9yUGFyZW4pCi0gICAgICAg
IHsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgcHJvY2Vzc0JhY2t0cmFja3MoWWFyckdlbmVy
YXRvciogZ2VuZXJhdG9yLCBUZXJtR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSwgVGVybUdlbmVyYXRp
b25TdGF0ZSYgcGFyZW50aGVzZXNTdGF0ZSwgTGFiZWwgbm9uR3JlZWR5VHJ5UGFyZW50aGVzZXMs
IExhYmVsIGZhbGxUaHJvdWdoKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX25vbkdyZWVkeVRy
eVBhcmVudGhlc2VzID0gbm9uR3JlZWR5VHJ5UGFyZW50aGVzZXM7Ci0gICAgICAgICAgICBtX2Zh
bGxUaHJvdWdoID0gZmFsbFRocm91Z2g7Ci0KLSAgICAgICAgICAgIG1fc3ViUGFyZW5JbmRleCA9
IHN0YXRlLmdldFN1YlBhcmVuTnVtKCk7Ci0gICAgICAgICAgICBwYXJlbnRoZXNlc1N0YXRlLmdl
dEJhY2t0cmFja0Rlc3RpbmF0aW9uKCkuY29weVRvKG1fcGFyZW5CYWNrdHJhY2spOwotICAgICAg
ICAgICAgc3RhdGUuY2hhaW5CYWNrdHJhY2tzKCZtX2JhY2t0cmFjayk7Ci0gICAgICAgICAgICBC
YWNrdHJhY2tEZXN0aW5hdGlvbiYgc3RhdGVCYWNrdHJhY2sgPSBzdGF0ZS5nZXRCYWNrdHJhY2tE
ZXN0aW5hdGlvbigpOwotICAgICAgICAgICAgc3RhdGVCYWNrdHJhY2suY29weVRvKG1fYmFja3Ry
YWNrKTsKLSAgICAgICAgICAgIHN0YXRlQmFja3RyYWNrLnNldEJhY2t0cmFja1RvTGFiZWwoJm1f
YmFja3RyYWNrVG9MYWJlbCk7Ci0gICAgICAgICAgICBzdGF0ZS5zZXRCYWNrdHJhY2tMaW5rKCZt
X2JhY2t0cmFjayk7Ci0gICAgICAgICAgICBzdGF0ZUJhY2t0cmFjay5zZXRTdWJEYXRhTGFiZWxQ
dHIoJm1fZGF0YUFmdGVyTGFiZWxQdHIpOwotCi0gICAgICAgICAgICBtX2RvRGlyZWN0QmFja3Ry
YWNrID0gbV9wYXJlbkJhY2t0cmFjay5oYXNEZXN0aW5hdGlvbigpOwotCi0gICAgICAgICAgICBp
ZiAoKG1fdGVybS5xdWFudGl0eVR5cGUgPT0gUXVhbnRpZmllckdyZWVkeSkgfHwgKG1fdGVybS5x
dWFudGl0eVR5cGUgPT0gUXVhbnRpZmllck5vbkdyZWVkeSkpCi0gICAgICAgICAgICAgICAgbV9k
b0RpcmVjdEJhY2t0cmFjayA9IGZhbHNlOwotCi0gICAgICAgICAgICBpZiAobV9kb0RpcmVjdEJh
Y2t0cmFjaykKLSAgICAgICAgICAgICAgICBzdGF0ZS5wcm9wYWdhdGVCYWNrdHJhY2tpbmdGcm9t
KGdlbmVyYXRvciwgbV9wYXJlbkJhY2t0cmFjaywgZmFsc2UpOwotICAgICAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICAgICAgc3RhdGVCYWNrdHJhY2suc2V0QmFja3RyYWNrSnVtcExpc3QoJm1f
YWZ0ZXJCYWNrdHJhY2tKdW1wcyk7Ci0gICAgICAgICAgICAgICAgc3RhdGVCYWNrdHJhY2suc2V0
QmFja3RyYWNrU291cmNlTGFiZWwoJm1fYmFja3RyYWNrRnJvbUFmdGVyUGFyZW5zKTsKKyAgICAg
ICAgc3RydWN0IFJldHVybkFkZHJlc3NSZWNvcmQgeworICAgICAgICAgICAgUmV0dXJuQWRkcmVz
c1JlY29yZChEYXRhTGFiZWxQdHIgZGF0YUxhYmVsLCBMYWJlbCBiYWNrdHJhY2tMb2NhdGlvbikK
KyAgICAgICAgICAgICAgICA6IG1fZGF0YUxhYmVsKGRhdGFMYWJlbCkKKyAgICAgICAgICAgICAg
ICAsIG1fYmFja3RyYWNrTG9jYXRpb24oYmFja3RyYWNrTG9jYXRpb24pCisgICAgICAgICAgICB7
CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0KIAotICAgICAgICB2b2lkIHNldE5leHRJdGVyYXRp
b24oTGFiZWwgbmV4dEl0ZXJhdGlvbikKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFtX25l
c3RpbmdMZXZlbCAmJiAhbV9iYWNrdHJhY2tUb0xhYmVsLmlzU2V0KCkpCi0gICAgICAgICAgICAg
ICAgbV9iYWNrdHJhY2tUb0xhYmVsID0gbmV4dEl0ZXJhdGlvbjsKLSAgICAgICAgfQorICAgICAg
ICAgICAgRGF0YUxhYmVsUHRyIG1fZGF0YUxhYmVsOworICAgICAgICAgICAgTGFiZWwgbV9iYWNr
dHJhY2tMb2NhdGlvbjsKKyAgICAgICAgfTsKKworICAgICAgICBKdW1wTGlzdCBtX2xhdGVyRmFp
bHVyZXM7CisgICAgICAgIGJvb2wgbV9wZW5kaW5nRmFsbHRocm91Z2g7CisgICAgICAgIFZlY3Rv
cjxEYXRhTGFiZWxQdHIsIDQ+IG1fcGVuZGluZ1JldHVybnM7CisgICAgICAgIFZlY3RvcjxSZXR1
cm5BZGRyZXNzUmVjb3JkLCA0PiBtX2JhY2t0cmFja1JlY29yZHM7CisgICAgfTsKIAotICAgICAg
ICB2b2lkIGFkZEFmdGVyUGFyZW5KdW1wKEp1bXAganVtcCkKLSAgICAgICAgewotICAgICAgICAg
ICAgbV9hZnRlckJhY2t0cmFja0p1bXBzLmFwcGVuZChqdW1wKTsKLSAgICAgICAgfQorICAgIC8v
IEdlbmVyYXRpb24gbWV0aG9kczoKKyAgICAvLyA9PT09PT09PT09PT09PT09PT09CiAKLSAgICAg
ICAgYm9vbCBnZW5lcmF0ZUNvZGUoWWFyckdlbmVyYXRvciogZ2VuZXJhdG9yLCBKdW1wTGlzdCYg
anVtcHNUb05leHQsIGJvb2wgcHJpb3JCYWNrVHJhY2tGYWxsVGhyb3VnaCwgYm9vbCBuZXh0QmFj
a3RyYWNrRmFsbFRocm91Z2gpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0IFJlZ2lzdGVy
SUQgaW5kZXhUZW1wb3JhcnkgPSByZWdUMDsKLSAgICAgICAgICAgIHVuc2lnbmVkIHBhcmVudGhl
c2VzRnJhbWVMb2NhdGlvbiA9IG1fdGVybS5mcmFtZUxvY2F0aW9uOwotICAgICAgICAgICAgSnVt
cCBmcm9tUHJpb3JCYWNrdHJhY2s7Ci0gICAgICAgICAgICBib29sIG5lZWRKdW1wRm9yUHJpb3JQ
YXJlblRhaWwgPSBmYWxzZTsKLQotICAgICAgICAgICAgaWYgKHByaW9yQmFja1RyYWNrRmFsbFRo
cm91Z2gKLSAgICAgICAgICAgICAgICAmJiAoKG1fdGVybS5xdWFudGl0eVR5cGUgPT0gUXVhbnRp
ZmllckdyZWVkeSkKLSAgICAgICAgICAgICAgICAgfHwgKG1fdGVybS5xdWFudGl0eVR5cGUgPT0g
UXVhbnRpZmllck5vbkdyZWVkeSkKLSAgICAgICAgICAgICAgICAgfHwgKCFtX2RvRGlyZWN0QmFj
a3RyYWNrICYmIG1fcGFyZW5CYWNrdHJhY2suaGFzRGVzdGluYXRpb24oKSkpKSB7Ci0gICAgICAg
ICAgICAgICAgLy8gSWYgdGhlIHByaW9yIHBhcmVuIHRhaWwgY29kZSBhc3N1bWVkIHRoYXQgaXQg
Y291bGQgZmFsbCB0aHJvdWdoLAotICAgICAgICAgICAgICAgIC8vIGJ1dCB3ZSBuZWVkIHRvIGdl
bmVyYXRlIGFmdGVyIHBhcmVuIGJhY2t0cmFjayBjb2RlLCB0aGVuIHByb3ZpZGUKLSAgICAgICAg
ICAgICAgICAvLyBhIGp1bXAgYXJvdW5kIHRoYXQgY29kZSBmb3IgdGhlIHByaW9yIHBhcmVuIHRh
aWwgY29kZS4KLSAgICAgICAgICAgICAgICAvLyBBIHJlZ3VsYXIgZXhwcmVzc2luZyBsaWtlICgo
eHh4KS4uLik/IG5lZWRzIHRoaXMuCi0gICAgICAgICAgICAgICAgZnJvbVByaW9yQmFja3RyYWNr
ID0gZ2VuZXJhdG9yLT5qdW1wKCk7Ci0gICAgICAgICAgICAgICAgbmVlZEp1bXBGb3JQcmlvclBh
cmVuVGFpbCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghbV9iYWNr
dHJhY2suaGFzRGVzdGluYXRpb24oKSkgewotICAgICAgICAgICAgICAgIGlmIChtX2JhY2t0cmFj
a1RvTGFiZWwuaXNTZXQoKSkgewotICAgICAgICAgICAgICAgICAgICBtX2JhY2t0cmFjay5zZXRM
YWJlbChtX2JhY2t0cmFja1RvTGFiZWwpOwotICAgICAgICAgICAgICAgICAgICBuZXh0QmFja3Ry
YWNrRmFsbFRocm91Z2ggPSBmYWxzZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1fanVt
cExpc3RUb1ByaW9yUGFyZW4pIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgZG9uJ3Qg
aGF2ZSBhIGRlc3RpbmF0aW9uLCBnbyBiYWNrIHRvIGVpdGhlciB0aGUgcHJpb3IgcGFyZW4gb3Ig
dGhlIG5leHQgb3V0ZXIgcGFyZW4uCi0gICAgICAgICAgICAgICAgICAgIG1fYmFja3RyYWNrLnNl
dEJhY2t0cmFja0p1bXBMaXN0KG1fanVtcExpc3RUb1ByaW9yUGFyZW4pOwotICAgICAgICAgICAg
ICAgICAgICBuZXh0QmFja3RyYWNrRmFsbFRocm91Z2ggPSBmYWxzZTsKLSAgICAgICAgICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2suc2V0QmFja3RyYWNrSnVt
cExpc3QoJmp1bXBzVG9OZXh0KTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAg
IG5leHRCYWNrdHJhY2tGYWxsVGhyb3VnaCA9IGZhbHNlOwotCi0gICAgICAgICAgICAvLyBBIGZh
aWx1cmUgQUZURVIgdGhlIHBhcmVucyBqdW1wcyBoZXJlIC0gQmFja3RyYWNrIHRvIHRoaXMgcGFy
ZW4KLSAgICAgICAgICAgIG1fYmFja3RyYWNrRnJvbUFmdGVyUGFyZW5zID0gZ2VuZXJhdG9yLT5s
YWJlbCgpOwotCi0gICAgICAgICAgICBpZiAobV9kYXRhQWZ0ZXJMYWJlbFB0ci5pc1NldCgpKQot
ICAgICAgICAgICAgICAgIGdlbmVyYXRvci0+bV9leHByZXNzaW9uU3RhdGUubV9iYWNrdHJhY2tS
ZWNvcmRzLmFwcGVuZChBbHRlcm5hdGl2ZUJhY2t0cmFja1JlY29yZChtX2RhdGFBZnRlckxhYmVs
UHRyLCBtX2JhY2t0cmFja0Zyb21BZnRlclBhcmVucykpOwotCi0gICAgICAgICAgICBtX2FmdGVy
QmFja3RyYWNrSnVtcHMubGluayhnZW5lcmF0b3IpOwotCi0gICAgICAgICAgICBpZiAobV90ZXJt
LnF1YW50aXR5VHlwZSA9PSBRdWFudGlmaWVyR3JlZWR5KSB7Ci0gICAgICAgICAgICAgICAgLy8g
SWYgdGhpcyBpcyAtMSB3ZSBoYXZlIG5vdyB0ZXN0ZWQgd2l0aCBib3RoIHdpdGggYW5kIHdpdGhv
dXQgdGhlIHBhcmVucy4KLSAgICAgICAgICAgICAgICBnZW5lcmF0b3ItPmxvYWRGcm9tRnJhbWUo
cGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uLCBpbmRleFRlbXBvcmFyeSk7Ci0gICAgICAgICAgICAg
ICAgbV9iYWNrdHJhY2suanVtcFRvQmFja3RyYWNrKGdlbmVyYXRvciwgZ2VuZXJhdG9yLT5icmFu
Y2gzMihFcXVhbCwgaW5kZXhUZW1wb3JhcnksIFRydXN0ZWRJbW0zMigtMSkpKTsKLSAgICAgICAg
ICAgIH0gZWxzZSBpZiAobV90ZXJtLnF1YW50aXR5VHlwZSA9PSBRdWFudGlmaWVyTm9uR3JlZWR5
KSB7Ci0gICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyAtMSB3ZSBoYXZlIG5vdyB0ZXN0ZWQg
d2l0aCBib3RoIHdpdGggYW5kIHdpdGhvdXQgdGhlIHBhcmVucy4KLSAgICAgICAgICAgICAgICBn
ZW5lcmF0b3ItPmxvYWRGcm9tRnJhbWUocGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uLCBpbmRleFRl
bXBvcmFyeSk7Ci0gICAgICAgICAgICAgICAgZ2VuZXJhdG9yLT5icmFuY2gzMihFcXVhbCwgaW5k
ZXhUZW1wb3JhcnksIFRydXN0ZWRJbW0zMigtMSkpLmxpbmtUbyhtX25vbkdyZWVkeVRyeVBhcmVu
dGhlc2VzLCBnZW5lcmF0b3IpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIW1f
ZG9EaXJlY3RCYWNrdHJhY2spCi0gICAgICAgICAgICAgICAgbV9wYXJlbkJhY2t0cmFjay5wbGFu
dEp1bXBUb0JhY2t0cmFja0lmRXhpc3RzKGdlbmVyYXRvcik7Ci0KLSAgICAgICAgICAgIC8vIEEg
ZmFpbHVyZSBXSVRISU4gdGhlIHBhcmVucyBqdW1wcyBoZXJlCi0gICAgICAgICAgICBpZiAobmVl
ZEp1bXBGb3JQcmlvclBhcmVuVGFpbCkKLSAgICAgICAgICAgICAgICBmcm9tUHJpb3JCYWNrdHJh
Y2subGluayhnZW5lcmF0b3IpOwotICAgICAgICAgICAgbV9wYXJlbkJhY2t0cmFjay5saW5rQWx0
ZXJuYXRpdmVCYWNrdHJhY2tzKGdlbmVyYXRvcik7Ci0gICAgICAgICAgICBtX3dpdGhpbkJhY2t0
cmFja0p1bXBzLmxpbmsoZ2VuZXJhdG9yKTsKLQotICAgICAgICAgICAgaWYgKG1fdGVybS5jYXB0
dXJlKCkpCi0gICAgICAgICAgICAgICAgZ2VuZXJhdG9yLT5zdG9yZTMyKFRydXN0ZWRJbW0zMigt
MSksIEFkZHJlc3Mob3V0cHV0LCAobV90ZXJtLnBhcmVudGhlc2VzLnN1YnBhdHRlcm5JZCA8PCAx
KSAqIHNpemVvZihpbnQpKSk7Ci0KLSAgICAgICAgICAgIGlmIChtX3Rlcm0ucXVhbnRpdHlUeXBl
ID09IFF1YW50aWZpZXJHcmVlZHkpIHsKLSAgICAgICAgICAgICAgICBnZW5lcmF0b3ItPnN0b3Jl
VG9GcmFtZShUcnVzdGVkSW1tMzIoLTEpLCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24pOwotICAg
ICAgICAgICAgICAgIGdlbmVyYXRvci0+anVtcCgpLmxpbmtUbyhtX2ZhbGxUaHJvdWdoLCBnZW5l
cmF0b3IpOwotICAgICAgICAgICAgICAgIG5leHRCYWNrdHJhY2tGYWxsVGhyb3VnaCA9IGZhbHNl
OwotICAgICAgICAgICAgfSBlbHNlIGlmICghbmV4dEJhY2t0cmFja0ZhbGxUaHJvdWdoKQotICAg
ICAgICAgICAgICAgIG1fYmFja3RyYWNrLmp1bXBUb0JhY2t0cmFjayhnZW5lcmF0b3IpOwotCi0g
ICAgICAgICAgICBpZiAoIW1fZG9EaXJlY3RCYWNrdHJhY2spCi0gICAgICAgICAgICAgICAgbV9i
YWNrdHJhY2suc2V0TmV4dEJhY2t0cmFja0xhYmVsKG1fYmFja3RyYWNrRnJvbUFmdGVyUGFyZW5z
KTsKLQotICAgICAgICAgICAgcmV0dXJuIG5leHRCYWNrdHJhY2tGYWxsVGhyb3VnaDsKLSAgICAg
ICAgfQotCi0gICAgICAgIFBhdHRlcm5UZXJtJiBtX3Rlcm07Ci0gICAgICAgIGludCBtX25lc3Rp
bmdMZXZlbDsKLSAgICAgICAgdW5zaWduZWQgbV9zdWJQYXJlbkluZGV4OwotICAgICAgICBKdW1w
TGlzdCogbV9qdW1wTGlzdFRvUHJpb3JQYXJlbjsKLSAgICAgICAgTGFiZWwgbV9ub25HcmVlZHlU
cnlQYXJlbnRoZXNlczsKLSAgICAgICAgTGFiZWwgbV9mYWxsVGhyb3VnaDsKLSAgICAgICAgTGFi
ZWwgbV9iYWNrdHJhY2tUb0xhYmVsOwotICAgICAgICBMYWJlbCBtX2JhY2t0cmFja0Zyb21BZnRl
clBhcmVuczsKLSAgICAgICAgRGF0YUxhYmVsUHRyIG1fZGF0YUFmdGVyTGFiZWxQdHI7Ci0gICAg
ICAgIEp1bXBMaXN0IG1fd2l0aGluQmFja3RyYWNrSnVtcHM7Ci0gICAgICAgIEp1bXBMaXN0IG1f
YWZ0ZXJCYWNrdHJhY2tKdW1wczsKLSAgICAgICAgQmFja3RyYWNrRGVzdGluYXRpb24gbV9wYXJl
bkJhY2t0cmFjazsKLSAgICAgICAgQmFja3RyYWNrRGVzdGluYXRpb24gbV9iYWNrdHJhY2s7Ci0g
ICAgICAgIGJvb2wgbV9kb0RpcmVjdEJhY2t0cmFjazsKLSAgICB9OworICAgIC8vIFRoaXMgbWV0
aG9kIHByb3ZpZGVzIGEgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBiYWNrdHJhY2tpbmcgY29t
bW9uCisgICAgLy8gdG8gbWFueSB0ZXJtczsgdGVybXMgY29tbW9ubHkganVtcCBvdXQgb2YgdGhl
IGZvcndhcmRzICBtYXRjaGluZyBwYXRoCisgICAgLy8gb24gYW55IGZhaWxlZCBjb25kaXRpb25z
LCBhbmQgYWRkIHRoZXNlIGp1bXBzIHRvIHRoZSBtX2p1bXBzIGxpc3QuIElmCisgICAgLy8gbm8g
c3BlY2lhbCBoYW5kbGluZyBpcyByZXF1aXJlZCB3ZSBjYW4gb2Z0ZW4ganVzdCBiYWNrdHJhY2sg
dG8gbV9qdW1wcy4KKyAgICB2b2lkIGJhY2t0cmFja1Rlcm1EZWZhdWx0KHNpemVfdCBvcEluZGV4
KQorICAgIHsKKyAgICAgICAgWWFyck9wJiBvcCA9IG1fb3BzW29wSW5kZXhdOworICAgICAgICBt
X2JhY2t0cmFja2luZ1N0YXRlLmFwcGVuZChvcC5tX2p1bXBzKTsKKyAgICB9CiAKLSAgICB2b2lk
IGdlbmVyYXRlQXNzZXJ0aW9uQk9MKFRlcm1HZW5lcmF0aW9uU3RhdGUmIHN0YXRlKQorICAgIHZv
aWQgZ2VuZXJhdGVBc3NlcnRpb25CT0woc2l6ZV90IG9wSW5kZXgpCiAgICAgewotICAgICAgICBQ
YXR0ZXJuVGVybSYgdGVybSA9IHN0YXRlLnRlcm0oKTsKKyAgICAgICAgWWFyck9wJiBvcCA9IG1f
b3BzW29wSW5kZXhdOworICAgICAgICBQYXR0ZXJuVGVybSogdGVybSA9IG9wLm1fdGVybTsKIAog
ICAgICAgICBpZiAobV9wYXR0ZXJuLm1fbXVsdGlsaW5lKSB7CiAgICAgICAgICAgICBjb25zdCBS
ZWdpc3RlcklEIGNoYXJhY3RlciA9IHJlZ1QwOwogCiAgICAgICAgICAgICBKdW1wTGlzdCBtYXRj
aERlc3Q7Ci0gICAgICAgICAgICBpZiAoIXRlcm0uaW5wdXRQb3NpdGlvbikKLSAgICAgICAgICAg
ICAgICBtYXRjaERlc3QuYXBwZW5kKGJyYW5jaDMyKEVxdWFsLCBpbmRleCwgSW1tMzIoc3RhdGUu
Y2hlY2tlZFRvdGFsKSkpOworICAgICAgICAgICAgaWYgKCF0ZXJtLT5pbnB1dFBvc2l0aW9uKQor
ICAgICAgICAgICAgICAgIG1hdGNoRGVzdC5hcHBlbmQoYnJhbmNoMzIoRXF1YWwsIGluZGV4LCBJ
bW0zMihtX2NoZWNrZWQpKSk7CiAKLSAgICAgICAgICAgIHJlYWRDaGFyYWN0ZXIoc3RhdGUuaW5w
dXRPZmZzZXQoKSAtIDEsIGNoYXJhY3Rlcik7CisgICAgICAgICAgICByZWFkQ2hhcmFjdGVyKCh0
ZXJtLT5pbnB1dFBvc2l0aW9uIC0gbV9jaGVja2VkKSAtIDEsIGNoYXJhY3Rlcik7CiAgICAgICAg
ICAgICBtYXRjaENoYXJhY3RlckNsYXNzKGNoYXJhY3RlciwgbWF0Y2hEZXN0LCBtX3BhdHRlcm4u
bmV3bGluZUNoYXJhY3RlckNsYXNzKCkpOwotICAgICAgICAgICAgc3RhdGUuanVtcFRvQmFja3Ry
YWNrKHRoaXMpOworICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQoanVtcCgpKTsKIAogICAg
ICAgICAgICAgbWF0Y2hEZXN0LmxpbmsodGhpcyk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAvLyBFcmssIHJlYWxseSBzaG91bGQgcG9pc29uIG91dCB0aGVzZSBhbHRlcm5hdGl2ZXMg
ZWFybHkuIDotLwotICAgICAgICAgICAgaWYgKHRlcm0uaW5wdXRQb3NpdGlvbikKLSAgICAgICAg
ICAgICAgICBzdGF0ZS5qdW1wVG9CYWNrdHJhY2sodGhpcyk7CisgICAgICAgICAgICBpZiAodGVy
bS0+aW5wdXRQb3NpdGlvbikKKyAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChqdW1w
KCkpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHN0YXRlLmp1bXBUb0JhY2t0
cmFjayh0aGlzLCBicmFuY2gzMihOb3RFcXVhbCwgaW5kZXgsIEltbTMyKHN0YXRlLmNoZWNrZWRU
b3RhbCkpKTsKKyAgICAgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChicmFuY2gzMihOb3RF
cXVhbCwgaW5kZXgsIEltbTMyKG1fY2hlY2tlZCkpKTsKICAgICAgICAgfQogICAgIH0KKyAgICB2
b2lkIGJhY2t0cmFja0Fzc2VydGlvbkJPTChzaXplX3Qgb3BJbmRleCkKKyAgICB7CisgICAgICAg
IGJhY2t0cmFja1Rlcm1EZWZhdWx0KG9wSW5kZXgpOworICAgIH0KIAotICAgIHZvaWQgZ2VuZXJh
dGVBc3NlcnRpb25FT0woVGVybUdlbmVyYXRpb25TdGF0ZSYgc3RhdGUpCisgICAgdm9pZCBnZW5l
cmF0ZUFzc2VydGlvbkVPTChzaXplX3Qgb3BJbmRleCkKICAgICB7Ci0gICAgICAgIFBhdHRlcm5U
ZXJtJiB0ZXJtID0gc3RhdGUudGVybSgpOworICAgICAgICBZYXJyT3AmIG9wID0gbV9vcHNbb3BJ
bmRleF07CisgICAgICAgIFBhdHRlcm5UZXJtKiB0ZXJtID0gb3AubV90ZXJtOwogCiAgICAgICAg
IGlmIChtX3BhdHRlcm4ubV9tdWx0aWxpbmUpIHsKICAgICAgICAgICAgIGNvbnN0IFJlZ2lzdGVy
SUQgY2hhcmFjdGVyID0gcmVnVDA7CiAKICAgICAgICAgICAgIEp1bXBMaXN0IG1hdGNoRGVzdDsK
LSAgICAgICAgICAgIGlmICh0ZXJtLmlucHV0UG9zaXRpb24gPT0gc3RhdGUuY2hlY2tlZFRvdGFs
KQorICAgICAgICAgICAgaWYgKHRlcm0tPmlucHV0UG9zaXRpb24gPT0gbV9jaGVja2VkKQogICAg
ICAgICAgICAgICAgIG1hdGNoRGVzdC5hcHBlbmQoYXRFbmRPZklucHV0KCkpOwogCi0gICAgICAg
ICAgICByZWFkQ2hhcmFjdGVyKHN0YXRlLmlucHV0T2Zmc2V0KCksIGNoYXJhY3Rlcik7CisgICAg
ICAgICAgICByZWFkQ2hhcmFjdGVyKCh0ZXJtLT5pbnB1dFBvc2l0aW9uIC0gbV9jaGVja2VkKSwg
Y2hhcmFjdGVyKTsKICAgICAgICAgICAgIG1hdGNoQ2hhcmFjdGVyQ2xhc3MoY2hhcmFjdGVyLCBt
YXRjaERlc3QsIG1fcGF0dGVybi5uZXdsaW5lQ2hhcmFjdGVyQ2xhc3MoKSk7Ci0gICAgICAgICAg
ICBzdGF0ZS5qdW1wVG9CYWNrdHJhY2sodGhpcyk7CisgICAgICAgICAgICBvcC5tX2p1bXBzLmFw
cGVuZChqdW1wKCkpOwogCiAgICAgICAgICAgICBtYXRjaERlc3QubGluayh0aGlzKTsKICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmICh0ZXJtLmlucHV0UG9zaXRpb24gPT0gc3RhdGUu
Y2hlY2tlZFRvdGFsKQotICAgICAgICAgICAgICAgIHN0YXRlLmp1bXBUb0JhY2t0cmFjayh0aGlz
LCBub3RBdEVuZE9mSW5wdXQoKSk7CisgICAgICAgICAgICBpZiAodGVybS0+aW5wdXRQb3NpdGlv
biA9PSBtX2NoZWNrZWQpCisgICAgICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQobm90QXRF
bmRPZklucHV0KCkpOwogICAgICAgICAgICAgLy8gRXJrLCByZWFsbHkgc2hvdWxkIHBvaXNvbiBv
dXQgdGhlc2UgYWx0ZXJuYXRpdmVzIGVhcmx5LiA6LS8KICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBzdGF0ZS5qdW1wVG9CYWNrdHJhY2sodGhpcyk7CisgICAgICAgICAgICAgICAg
b3AubV9qdW1wcy5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgfQogICAgIH0KKyAgICB2b2lkIGJh
Y2t0cmFja0Fzc2VydGlvbkVPTChzaXplX3Qgb3BJbmRleCkKKyAgICB7CisgICAgICAgIGJhY2t0
cmFja1Rlcm1EZWZhdWx0KG9wSW5kZXgpOworICAgIH0KIAogICAgIC8vIEFsc28gZmFsbHMgdGhv
dWdoIG9uIG5leHRJc05vdFdvcmRDaGFyLgotICAgIHZvaWQgbWF0Y2hBc3NlcnRpb25Xb3JkY2hh
cihUZXJtR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSwgSnVtcExpc3QmIG5leHRJc1dvcmRDaGFyLCBK
dW1wTGlzdCYgbmV4dElzTm90V29yZENoYXIpCisgICAgdm9pZCBtYXRjaEFzc2VydGlvbldvcmRj
aGFyKHNpemVfdCBvcEluZGV4LCBKdW1wTGlzdCYgbmV4dElzV29yZENoYXIsIEp1bXBMaXN0JiBu
ZXh0SXNOb3RXb3JkQ2hhcikKICAgICB7CisgICAgICAgIFlhcnJPcCYgb3AgPSBtX29wc1tvcElu
ZGV4XTsKKyAgICAgICAgUGF0dGVyblRlcm0qIHRlcm0gPSBvcC5tX3Rlcm07CisKICAgICAgICAg
Y29uc3QgUmVnaXN0ZXJJRCBjaGFyYWN0ZXIgPSByZWdUMDsKLSAgICAgICAgUGF0dGVyblRlcm0m
IHRlcm0gPSBzdGF0ZS50ZXJtKCk7CiAKLSAgICAgICAgaWYgKHRlcm0uaW5wdXRQb3NpdGlvbiA9
PSBzdGF0ZS5jaGVja2VkVG90YWwpCisgICAgICAgIGlmICh0ZXJtLT5pbnB1dFBvc2l0aW9uID09
IG1fY2hlY2tlZCkKICAgICAgICAgICAgIG5leHRJc05vdFdvcmRDaGFyLmFwcGVuZChhdEVuZE9m
SW5wdXQoKSk7CiAKLSAgICAgICAgcmVhZENoYXJhY3RlcihzdGF0ZS5pbnB1dE9mZnNldCgpLCBj
aGFyYWN0ZXIpOworICAgICAgICByZWFkQ2hhcmFjdGVyKCh0ZXJtLT5pbnB1dFBvc2l0aW9uIC0g
bV9jaGVja2VkKSwgY2hhcmFjdGVyKTsKICAgICAgICAgbWF0Y2hDaGFyYWN0ZXJDbGFzcyhjaGFy
YWN0ZXIsIG5leHRJc1dvcmRDaGFyLCBtX3BhdHRlcm4ud29yZGNoYXJDaGFyYWN0ZXJDbGFzcygp
KTsKICAgICB9CiAKLSAgICB2b2lkIGdlbmVyYXRlQXNzZXJ0aW9uV29yZEJvdW5kYXJ5KFRlcm1H
ZW5lcmF0aW9uU3RhdGUmIHN0YXRlKQorICAgIHZvaWQgZ2VuZXJhdGVBc3NlcnRpb25Xb3JkQm91
bmRhcnkoc2l6ZV90IG9wSW5kZXgpCiAgICAgeworICAgICAgICBZYXJyT3AmIG9wID0gbV9vcHNb
b3BJbmRleF07CisgICAgICAgIFBhdHRlcm5UZXJtKiB0ZXJtID0gb3AubV90ZXJtOworCiAgICAg
ICAgIGNvbnN0IFJlZ2lzdGVySUQgY2hhcmFjdGVyID0gcmVnVDA7Ci0gICAgICAgIFBhdHRlcm5U
ZXJtJiB0ZXJtID0gc3RhdGUudGVybSgpOwogCiAgICAgICAgIEp1bXAgYXRCZWdpbjsKICAgICAg
ICAgSnVtcExpc3QgbWF0Y2hEZXN0OwotICAgICAgICBpZiAoIXRlcm0uaW5wdXRQb3NpdGlvbikK
LSAgICAgICAgICAgIGF0QmVnaW4gPSBicmFuY2gzMihFcXVhbCwgaW5kZXgsIEltbTMyKHN0YXRl
LmNoZWNrZWRUb3RhbCkpOwotICAgICAgICByZWFkQ2hhcmFjdGVyKHN0YXRlLmlucHV0T2Zmc2V0
KCkgLSAxLCBjaGFyYWN0ZXIpOworICAgICAgICBpZiAoIXRlcm0tPmlucHV0UG9zaXRpb24pCisg
ICAgICAgICAgICBhdEJlZ2luID0gYnJhbmNoMzIoRXF1YWwsIGluZGV4LCBJbW0zMihtX2NoZWNr
ZWQpKTsKKyAgICAgICAgcmVhZENoYXJhY3RlcigodGVybS0+aW5wdXRQb3NpdGlvbiAtIG1fY2hl
Y2tlZCkgLSAxLCBjaGFyYWN0ZXIpOwogICAgICAgICBtYXRjaENoYXJhY3RlckNsYXNzKGNoYXJh
Y3RlciwgbWF0Y2hEZXN0LCBtX3BhdHRlcm4ud29yZGNoYXJDaGFyYWN0ZXJDbGFzcygpKTsKLSAg
ICAgICAgaWYgKCF0ZXJtLmlucHV0UG9zaXRpb24pCisgICAgICAgIGlmICghdGVybS0+aW5wdXRQ
b3NpdGlvbikKICAgICAgICAgICAgIGF0QmVnaW4ubGluayh0aGlzKTsKIAogICAgICAgICAvLyBX
ZSBmYWxsIHRocm91Z2ggdG8gaGVyZSBpZiB0aGUgbGFzdCBjaGFyYWN0ZXIgd2FzIG5vdCBhIHdv
cmRjaGFyLgogICAgICAgICBKdW1wTGlzdCBub25Xb3JkQ2hhclRoZW5Xb3JkQ2hhcjsKICAgICAg
ICAgSnVtcExpc3Qgbm9uV29yZENoYXJUaGVuTm9uV29yZENoYXI7Ci0gICAgICAgIGlmICh0ZXJt
LmludmVydCgpKSB7Ci0gICAgICAgICAgICBtYXRjaEFzc2VydGlvbldvcmRjaGFyKHN0YXRlLCBu
b25Xb3JkQ2hhclRoZW5Ob25Xb3JkQ2hhciwgbm9uV29yZENoYXJUaGVuV29yZENoYXIpOworICAg
ICAgICBpZiAodGVybS0+aW52ZXJ0KCkpIHsKKyAgICAgICAgICAgIG1hdGNoQXNzZXJ0aW9uV29y
ZGNoYXIob3BJbmRleCwgbm9uV29yZENoYXJUaGVuTm9uV29yZENoYXIsIG5vbldvcmRDaGFyVGhl
bldvcmRDaGFyKTsKICAgICAgICAgICAgIG5vbldvcmRDaGFyVGhlbldvcmRDaGFyLmFwcGVuZChq
dW1wKCkpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbWF0Y2hBc3NlcnRpb25Xb3Jk
Y2hhcihzdGF0ZSwgbm9uV29yZENoYXJUaGVuV29yZENoYXIsIG5vbldvcmRDaGFyVGhlbk5vbldv
cmRDaGFyKTsKKyAgICAgICAgICAgIG1hdGNoQXNzZXJ0aW9uV29yZGNoYXIob3BJbmRleCwgbm9u
V29yZENoYXJUaGVuV29yZENoYXIsIG5vbldvcmRDaGFyVGhlbk5vbldvcmRDaGFyKTsKICAgICAg
ICAgICAgIG5vbldvcmRDaGFyVGhlbk5vbldvcmRDaGFyLmFwcGVuZChqdW1wKCkpOwogICAgICAg
ICB9Ci0gICAgICAgIHN0YXRlLmp1bXBUb0JhY2t0cmFjayh0aGlzLCBub25Xb3JkQ2hhclRoZW5O
b25Xb3JkQ2hhcik7CisgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKG5vbldvcmRDaGFyVGhlbk5v
bldvcmRDaGFyKTsKIAogICAgICAgICAvLyBXZSBqdW1wIGhlcmUgaWYgdGhlIGxhc3QgY2hhcmFj
dGVyIHdhcyBhIHdvcmRjaGFyLgogICAgICAgICBtYXRjaERlc3QubGluayh0aGlzKTsKICAgICAg
ICAgSnVtcExpc3Qgd29yZENoYXJUaGVuV29yZENoYXI7CiAgICAgICAgIEp1bXBMaXN0IHdvcmRD
aGFyVGhlbk5vbldvcmRDaGFyOwotICAgICAgICBpZiAodGVybS5pbnZlcnQoKSkgewotICAgICAg
ICAgICAgbWF0Y2hBc3NlcnRpb25Xb3JkY2hhcihzdGF0ZSwgd29yZENoYXJUaGVuTm9uV29yZENo
YXIsIHdvcmRDaGFyVGhlbldvcmRDaGFyKTsKKyAgICAgICAgaWYgKHRlcm0tPmludmVydCgpKSB7
CisgICAgICAgICAgICBtYXRjaEFzc2VydGlvbldvcmRjaGFyKG9wSW5kZXgsIHdvcmRDaGFyVGhl
bk5vbldvcmRDaGFyLCB3b3JkQ2hhclRoZW5Xb3JkQ2hhcik7CiAgICAgICAgICAgICB3b3JkQ2hh
clRoZW5Xb3JkQ2hhci5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIG1hdGNoQXNzZXJ0aW9uV29yZGNoYXIoc3RhdGUsIHdvcmRDaGFyVGhlbldvcmRDaGFyLCB3
b3JkQ2hhclRoZW5Ob25Xb3JkQ2hhcik7CisgICAgICAgICAgICBtYXRjaEFzc2VydGlvbldvcmRj
aGFyKG9wSW5kZXgsIHdvcmRDaGFyVGhlbldvcmRDaGFyLCB3b3JkQ2hhclRoZW5Ob25Xb3JkQ2hh
cik7CiAgICAgICAgICAgICAvLyBUaGlzIGNhbiBmYWxsLXRob3VnaCEKICAgICAgICAgfQogCi0g
ICAgICAgIHN0YXRlLmp1bXBUb0JhY2t0cmFjayh0aGlzLCB3b3JkQ2hhclRoZW5Xb3JkQ2hhcik7
CisgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKHdvcmRDaGFyVGhlbldvcmRDaGFyKTsKIAogICAg
ICAgICBub25Xb3JkQ2hhclRoZW5Xb3JkQ2hhci5saW5rKHRoaXMpOwogICAgICAgICB3b3JkQ2hh
clRoZW5Ob25Xb3JkQ2hhci5saW5rKHRoaXMpOwogICAgIH0KKyAgICB2b2lkIGJhY2t0cmFja0Fz
c2VydGlvbldvcmRCb3VuZGFyeShzaXplX3Qgb3BJbmRleCkKKyAgICB7CisgICAgICAgIGJhY2t0
cmFja1Rlcm1EZWZhdWx0KG9wSW5kZXgpOworICAgIH0KIAotICAgIHZvaWQgZ2VuZXJhdGVQYXR0
ZXJuQ2hhcmFjdGVyU2luZ2xlKFRlcm1HZW5lcmF0aW9uU3RhdGUmIHN0YXRlKQorICAgIHZvaWQg
Z2VuZXJhdGVQYXR0ZXJuQ2hhcmFjdGVyT25jZShzaXplX3Qgb3BJbmRleCkKICAgICB7CisgICAg
ICAgIFlhcnJPcCYgb3AgPSBtX29wc1tvcEluZGV4XTsKKyAgICAgICAgWWFyck9wJiBuZXh0T3Ag
PSBtX29wc1tvcEluZGV4ICsgMV07CisKKyAgICAgICAgaWYgKG9wLm1faXNEZWFkQ29kZSkKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICBQYXR0ZXJuVGVybSogdGVybSA9IG9wLm1fdGVy
bTsKKyAgICAgICAgVUNoYXIgY2ggPSB0ZXJtLT5wYXR0ZXJuQ2hhcmFjdGVyOworCiAgICAgICAg
IGNvbnN0IFJlZ2lzdGVySUQgY2hhcmFjdGVyID0gcmVnVDA7Ci0gICAgICAgIFVDaGFyIGNoID0g
c3RhdGUudGVybSgpLnBhdHRlcm5DaGFyYWN0ZXI7CisKKyAgICAgICAgaWYgKG5leHRPcC5tX29w
ID09IE9wVGVybSkgeworICAgICAgICAgICAgUGF0dGVyblRlcm0qIG5leHRUZXJtID0gbmV4dE9w
Lm1fdGVybTsKKyAgICAgICAgICAgIGlmIChuZXh0VGVybS0+dHlwZSA9PSBQYXR0ZXJuVGVybTo6
VHlwZVBhdHRlcm5DaGFyYWN0ZXIKKyAgICAgICAgICAgICAgICAmJiBuZXh0VGVybS0+cXVhbnRp
dHlUeXBlID09IFF1YW50aWZpZXJGaXhlZENvdW50CisgICAgICAgICAgICAgICAgJiYgbmV4dFRl
cm0tPnF1YW50aXR5Q291bnQgPT0gMQorICAgICAgICAgICAgICAgICYmIG5leHRUZXJtLT5pbnB1
dFBvc2l0aW9uID09ICh0ZXJtLT5pbnB1dFBvc2l0aW9uICsgMSkpIHsKKworICAgICAgICAgICAg
ICAgIFVDaGFyIGNoMiA9IG5leHRUZXJtLT5wYXR0ZXJuQ2hhcmFjdGVyOworCisgICAgICAgICAg
ICAgICAgaW50IG1hc2sgPSAwOworICAgICAgICAgICAgICAgIGludCBjaFBhaXIgPSBjaCB8IChj
aDIgPDwgMTYpOworCisgICAgICAgICAgICAgICAgaWYgKG1fcGF0dGVybi5tX2lnbm9yZUNhc2Up
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzQVNDSUlBbHBoYShjaCkpCisgICAgICAgICAg
ICAgICAgICAgICAgICBtYXNrIHw9IDMyOworICAgICAgICAgICAgICAgICAgICBpZiAoaXNBU0NJ
SUFscGhhKGNoMikpCisgICAgICAgICAgICAgICAgICAgICAgICBtYXNrIHw9IDMyIDw8IDE2Owor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIEJhc2VJbmRleCBhZGRyZXNzKGlu
cHV0LCBpbmRleCwgVGltZXNUd28sICh0ZXJtLT5pbnB1dFBvc2l0aW9uIC0gbV9jaGVja2VkKSAq
IHNpemVvZihVQ2hhcikpOworICAgICAgICAgICAgICAgIGlmIChtYXNrKSB7CisgICAgICAgICAg
ICAgICAgICAgIGxvYWQzMldpdGhVbmFsaWduZWRIYWxmV29yZHMoYWRkcmVzcywgY2hhcmFjdGVy
KTsKKyAgICAgICAgICAgICAgICAgICAgb3IzMihJbW0zMihtYXNrKSwgY2hhcmFjdGVyKTsKKyAg
ICAgICAgICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIGNo
YXJhY3RlciwgSW1tMzIoY2hQYWlyIHwgbWFzaykpKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQoYnJhbmNoMzJXaXRoVW5hbGln
bmVkSGFsZldvcmRzKE5vdEVxdWFsLCBhZGRyZXNzLCBJbW0zMihjaFBhaXIpKSk7CisKKyAgICAg
ICAgICAgICAgICBuZXh0T3AubV9pc0RlYWRDb2RlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KIAogICAgICAgICBpZiAobV9wYXR0ZXJu
Lm1faWdub3JlQ2FzZSAmJiBpc0FTQ0lJQWxwaGEoY2gpKSB7Ci0gICAgICAgICAgICByZWFkQ2hh
cmFjdGVyKHN0YXRlLmlucHV0T2Zmc2V0KCksIGNoYXJhY3Rlcik7CisgICAgICAgICAgICByZWFk
Q2hhcmFjdGVyKHRlcm0tPmlucHV0UG9zaXRpb24gLSBtX2NoZWNrZWQsIGNoYXJhY3Rlcik7CiAg
ICAgICAgICAgICBvcjMyKFRydXN0ZWRJbW0zMigzMiksIGNoYXJhY3Rlcik7Ci0gICAgICAgICAg
ICBzdGF0ZS5qdW1wVG9CYWNrdHJhY2sodGhpcywgYnJhbmNoMzIoTm90RXF1YWwsIGNoYXJhY3Rl
ciwgSW1tMzIoVW5pY29kZTo6dG9Mb3dlcihjaCkpKSk7CisgICAgICAgICAgICBvcC5tX2p1bXBz
LmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgY2hhcmFjdGVyLCBJbW0zMihVbmljb2RlOjp0b0xv
d2VyKGNoKSkpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEFTU0VSVCghbV9wYXR0
ZXJuLm1faWdub3JlQ2FzZSB8fCAoVW5pY29kZTo6dG9Mb3dlcihjaCkgPT0gVW5pY29kZTo6dG9V
cHBlcihjaCkpKTsKLSAgICAgICAgICAgIHN0YXRlLmp1bXBUb0JhY2t0cmFjayh0aGlzLCBqdW1w
SWZDaGFyTm90RXF1YWxzKGNoLCBzdGF0ZS5pbnB1dE9mZnNldCgpKSk7CisgICAgICAgICAgICBv
cC5tX2p1bXBzLmFwcGVuZChqdW1wSWZDaGFyTm90RXF1YWxzKGNoLCB0ZXJtLT5pbnB1dFBvc2l0
aW9uIC0gbV9jaGVja2VkKSk7CiAgICAgICAgIH0KICAgICB9Ci0KLSAgICB2b2lkIGdlbmVyYXRl
UGF0dGVybkNoYXJhY3RlclBhaXIoVGVybUdlbmVyYXRpb25TdGF0ZSYgc3RhdGUpCisgICAgdm9p
ZCBiYWNrdHJhY2tQYXR0ZXJuQ2hhcmFjdGVyT25jZShzaXplX3Qgb3BJbmRleCkKICAgICB7Ci0g
ICAgICAgIGNvbnN0IFJlZ2lzdGVySUQgY2hhcmFjdGVyID0gcmVnVDA7Ci0gICAgICAgIFVDaGFy
IGNoMSA9IHN0YXRlLnRlcm0oKS5wYXR0ZXJuQ2hhcmFjdGVyOwotICAgICAgICBVQ2hhciBjaDIg
PSBzdGF0ZS5sb29rYWhlYWRUZXJtKCkucGF0dGVybkNoYXJhY3RlcjsKLQotICAgICAgICBpbnQg
bWFzayA9IDA7Ci0gICAgICAgIGludCBjaFBhaXIgPSBjaDEgfCAoY2gyIDw8IDE2KTsKLQotICAg
ICAgICBpZiAobV9wYXR0ZXJuLm1faWdub3JlQ2FzZSkgewotICAgICAgICAgICAgaWYgKGlzQVND
SUlBbHBoYShjaDEpKQotICAgICAgICAgICAgICAgIG1hc2sgfD0gMzI7Ci0gICAgICAgICAgICBp
ZiAoaXNBU0NJSUFscGhhKGNoMikpCi0gICAgICAgICAgICAgICAgbWFzayB8PSAzMiA8PCAxNjsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmIChtYXNrKSB7Ci0gICAgICAgICAgICBsb2FkMzJXaXRo
VW5hbGlnbmVkSGFsZldvcmRzKEJhc2VJbmRleChpbnB1dCwgaW5kZXgsIFRpbWVzVHdvLCBzdGF0
ZS5pbnB1dE9mZnNldCgpICogc2l6ZW9mKFVDaGFyKSksIGNoYXJhY3Rlcik7Ci0gICAgICAgICAg
ICBvcjMyKEltbTMyKG1hc2spLCBjaGFyYWN0ZXIpOwotICAgICAgICAgICAgc3RhdGUuanVtcFRv
QmFja3RyYWNrKHRoaXMsIGJyYW5jaDMyKE5vdEVxdWFsLCBjaGFyYWN0ZXIsIEltbTMyKGNoUGFp
ciB8IG1hc2spKSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgc3RhdGUuanVtcFRvQmFj
a3RyYWNrKHRoaXMsIGJyYW5jaDMyV2l0aFVuYWxpZ25lZEhhbGZXb3JkcyhOb3RFcXVhbCwgQmFz
ZUluZGV4KGlucHV0LCBpbmRleCwgVGltZXNUd28sIHN0YXRlLmlucHV0T2Zmc2V0KCkgKiBzaXpl
b2YoVUNoYXIpKSwgSW1tMzIoY2hQYWlyKSkpOworICAgICAgICBiYWNrdHJhY2tUZXJtRGVmYXVs
dChvcEluZGV4KTsKICAgICB9CiAKLSAgICB2b2lkIGdlbmVyYXRlUGF0dGVybkNoYXJhY3RlckZp
eGVkKFRlcm1HZW5lcmF0aW9uU3RhdGUmIHN0YXRlKQorICAgIHZvaWQgZ2VuZXJhdGVQYXR0ZXJu
Q2hhcmFjdGVyRml4ZWQoc2l6ZV90IG9wSW5kZXgpCiAgICAgeworICAgICAgICBZYXJyT3AmIG9w
ID0gbV9vcHNbb3BJbmRleF07CisgICAgICAgIFBhdHRlcm5UZXJtKiB0ZXJtID0gb3AubV90ZXJt
OworICAgICAgICBVQ2hhciBjaCA9IHRlcm0tPnBhdHRlcm5DaGFyYWN0ZXI7CisKICAgICAgICAg
Y29uc3QgUmVnaXN0ZXJJRCBjaGFyYWN0ZXIgPSByZWdUMDsKICAgICAgICAgY29uc3QgUmVnaXN0
ZXJJRCBjb3VudFJlZ2lzdGVyID0gcmVnVDE7Ci0gICAgICAgIFBhdHRlcm5UZXJtJiB0ZXJtID0g
c3RhdGUudGVybSgpOwotICAgICAgICBVQ2hhciBjaCA9IHRlcm0ucGF0dGVybkNoYXJhY3RlcjsK
IAogICAgICAgICBtb3ZlKGluZGV4LCBjb3VudFJlZ2lzdGVyKTsKLSAgICAgICAgc3ViMzIoSW1t
MzIodGVybS5xdWFudGl0eUNvdW50KSwgY291bnRSZWdpc3Rlcik7CisgICAgICAgIHN1YjMyKElt
bTMyKHRlcm0tPnF1YW50aXR5Q291bnQpLCBjb3VudFJlZ2lzdGVyKTsKIAogICAgICAgICBMYWJl
bCBsb29wKHRoaXMpOworICAgICAgICBCYXNlSW5kZXggYWRkcmVzcyhpbnB1dCwgY291bnRSZWdp
c3RlciwgVGltZXNUd28sICh0ZXJtLT5pbnB1dFBvc2l0aW9uIC0gbV9jaGVja2VkICsgdGVybS0+
cXVhbnRpdHlDb3VudCkgKiBzaXplb2YoVUNoYXIpKTsKKwogICAgICAgICBpZiAobV9wYXR0ZXJu
Lm1faWdub3JlQ2FzZSAmJiBpc0FTQ0lJQWxwaGEoY2gpKSB7Ci0gICAgICAgICAgICBsb2FkMTYo
QmFzZUluZGV4KGlucHV0LCBjb3VudFJlZ2lzdGVyLCBUaW1lc1R3bywgKHN0YXRlLmlucHV0T2Zm
c2V0KCkgKyB0ZXJtLnF1YW50aXR5Q291bnQpICogc2l6ZW9mKFVDaGFyKSksIGNoYXJhY3Rlcik7
CisgICAgICAgICAgICBsb2FkMTYoYWRkcmVzcywgY2hhcmFjdGVyKTsKICAgICAgICAgICAgIG9y
MzIoVHJ1c3RlZEltbTMyKDMyKSwgY2hhcmFjdGVyKTsKLSAgICAgICAgICAgIHN0YXRlLmp1bXBU
b0JhY2t0cmFjayh0aGlzLCBicmFuY2gzMihOb3RFcXVhbCwgY2hhcmFjdGVyLCBJbW0zMihVbmlj
b2RlOjp0b0xvd2VyKGNoKSkpKTsKKyAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGJyYW5j
aDMyKE5vdEVxdWFsLCBjaGFyYWN0ZXIsIEltbTMyKFVuaWNvZGU6OnRvTG93ZXIoY2gpKSkpOwog
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQVNTRVJUKCFtX3BhdHRlcm4ubV9pZ25vcmVD
YXNlIHx8IChVbmljb2RlOjp0b0xvd2VyKGNoKSA9PSBVbmljb2RlOjp0b1VwcGVyKGNoKSkpOwot
ICAgICAgICAgICAgc3RhdGUuanVtcFRvQmFja3RyYWNrKHRoaXMsIGJyYW5jaDE2KE5vdEVxdWFs
LCBCYXNlSW5kZXgoaW5wdXQsIGNvdW50UmVnaXN0ZXIsIFRpbWVzVHdvLCAoc3RhdGUuaW5wdXRP
ZmZzZXQoKSArIHRlcm0ucXVhbnRpdHlDb3VudCkgKiBzaXplb2YoVUNoYXIpKSwgSW1tMzIoY2gp
KSk7CisgICAgICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChicmFuY2gxNihOb3RFcXVhbCwgYWRk
cmVzcywgSW1tMzIoY2gpKSk7CiAgICAgICAgIH0KICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMy
KDEpLCBjb3VudFJlZ2lzdGVyKTsKICAgICAgICAgYnJhbmNoMzIoTm90RXF1YWwsIGNvdW50UmVn
aXN0ZXIsIGluZGV4KS5saW5rVG8obG9vcCwgdGhpcyk7CiAgICAgfQorICAgIHZvaWQgYmFja3Ry
YWNrUGF0dGVybkNoYXJhY3RlckZpeGVkKHNpemVfdCBvcEluZGV4KQorICAgIHsKKyAgICAgICAg
YmFja3RyYWNrVGVybURlZmF1bHQob3BJbmRleCk7CisgICAgfQogCi0gICAgdm9pZCBnZW5lcmF0
ZVBhdHRlcm5DaGFyYWN0ZXJHcmVlZHkoVGVybUdlbmVyYXRpb25TdGF0ZSYgc3RhdGUpCisgICAg
dm9pZCBnZW5lcmF0ZVBhdHRlcm5DaGFyYWN0ZXJHcmVlZHkoc2l6ZV90IG9wSW5kZXgpCiAgICAg
eworICAgICAgICBZYXJyT3AmIG9wID0gbV9vcHNbb3BJbmRleF07CisgICAgICAgIFBhdHRlcm5U
ZXJtKiB0ZXJtID0gb3AubV90ZXJtOworICAgICAgICBVQ2hhciBjaCA9IHRlcm0tPnBhdHRlcm5D
aGFyYWN0ZXI7CisKICAgICAgICAgY29uc3QgUmVnaXN0ZXJJRCBjaGFyYWN0ZXIgPSByZWdUMDsK
ICAgICAgICAgY29uc3QgUmVnaXN0ZXJJRCBjb3VudFJlZ2lzdGVyID0gcmVnVDE7Ci0gICAgICAg
IFBhdHRlcm5UZXJtJiB0ZXJtID0gc3RhdGUudGVybSgpOwotICAgICAgICBVQ2hhciBjaCA9IHRl
cm0ucGF0dGVybkNoYXJhY3RlcjsKIAogICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgY291
bnRSZWdpc3Rlcik7CiAKQEAgLTEzNTIsODE0ICs3NDgsMTUxMSBAQCBjbGFzcyBZYXJyR2VuZXJh
dG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2VtCiAgICAgICAgIExhYmVsIGxvb3AodGhpcyk7CiAgICAg
ICAgIGZhaWx1cmVzLmFwcGVuZChhdEVuZE9mSW5wdXQoKSk7CiAgICAgICAgIGlmIChtX3BhdHRl
cm4ubV9pZ25vcmVDYXNlICYmIGlzQVNDSUlBbHBoYShjaCkpIHsKLSAgICAgICAgICAgIHJlYWRD
aGFyYWN0ZXIoc3RhdGUuaW5wdXRPZmZzZXQoKSwgY2hhcmFjdGVyKTsKKyAgICAgICAgICAgIHJl
YWRDaGFyYWN0ZXIodGVybS0+aW5wdXRQb3NpdGlvbiAtIG1fY2hlY2tlZCwgY2hhcmFjdGVyKTsK
ICAgICAgICAgICAgIG9yMzIoVHJ1c3RlZEltbTMyKDMyKSwgY2hhcmFjdGVyKTsKICAgICAgICAg
ICAgIGZhaWx1cmVzLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgY2hhcmFjdGVyLCBJbW0zMihV
bmljb2RlOjp0b0xvd2VyKGNoKSkpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEFT
U0VSVCghbV9wYXR0ZXJuLm1faWdub3JlQ2FzZSB8fCAoVW5pY29kZTo6dG9Mb3dlcihjaCkgPT0g
VW5pY29kZTo6dG9VcHBlcihjaCkpKTsKLSAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZChqdW1w
SWZDaGFyTm90RXF1YWxzKGNoLCBzdGF0ZS5pbnB1dE9mZnNldCgpKSk7CisgICAgICAgICAgICBm
YWlsdXJlcy5hcHBlbmQoanVtcElmQ2hhck5vdEVxdWFscyhjaCwgdGVybS0+aW5wdXRQb3NpdGlv
biAtIG1fY2hlY2tlZCkpOwogICAgICAgICB9CiAKICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMy
KDEpLCBjb3VudFJlZ2lzdGVyKTsKICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBpbmRl
eCk7Ci0gICAgICAgIGlmICh0ZXJtLnF1YW50aXR5Q291bnQgIT0gcXVhbnRpZnlJbmZpbml0ZSkg
ewotICAgICAgICAgICAgYnJhbmNoMzIoTm90RXF1YWwsIGNvdW50UmVnaXN0ZXIsIEltbTMyKHRl
cm0ucXVhbnRpdHlDb3VudCkpLmxpbmtUbyhsb29wLCB0aGlzKTsKLSAgICAgICAgICAgIGZhaWx1
cmVzLmFwcGVuZChqdW1wKCkpOwotICAgICAgICB9IGVsc2UKKyAgICAgICAgaWYgKHRlcm0tPnF1
YW50aXR5Q291bnQgPT0gcXVhbnRpZnlJbmZpbml0ZSkKICAgICAgICAgICAgIGp1bXAobG9vcCk7
Ci0KLSAgICAgICAgTGFiZWwgYmFja3RyYWNrQmVnaW4odGhpcyk7Ci0gICAgICAgIGxvYWRGcm9t
RnJhbWUodGVybS5mcmFtZUxvY2F0aW9uLCBjb3VudFJlZ2lzdGVyKTsKLSAgICAgICAgc3RhdGUu
anVtcFRvQmFja3RyYWNrKHRoaXMsIGJyYW5jaFRlc3QzMihaZXJvLCBjb3VudFJlZ2lzdGVyKSk7
Ci0gICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgY291bnRSZWdpc3Rlcik7Ci0gICAgICAg
IHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgaW5kZXgpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBicmFuY2gzMihOb3RFcXVhbCwgY291bnRSZWdpc3RlciwgSW1tMzIodGVybS0+cXVhbnRpdHlD
b3VudCkpLmxpbmtUbyhsb29wLCB0aGlzKTsKIAogICAgICAgICBmYWlsdXJlcy5saW5rKHRoaXMp
OworICAgICAgICBvcC5tX3JlZW50cnkgPSBsYWJlbCgpOwogCi0gICAgICAgIHN0b3JlVG9GcmFt
ZShjb3VudFJlZ2lzdGVyLCB0ZXJtLmZyYW1lTG9jYXRpb24pOworICAgICAgICBzdG9yZVRvRnJh
bWUoY291bnRSZWdpc3RlciwgdGVybS0+ZnJhbWVMb2NhdGlvbik7CiAKLSAgICAgICAgc3RhdGUu
c2V0QmFja3RyYWNrTGFiZWwoYmFja3RyYWNrQmVnaW4pOworICAgIH0KKyAgICB2b2lkIGJhY2t0
cmFja1BhdHRlcm5DaGFyYWN0ZXJHcmVlZHkoc2l6ZV90IG9wSW5kZXgpCisgICAgeworICAgICAg
ICBZYXJyT3AmIG9wID0gbV9vcHNbb3BJbmRleF07CisgICAgICAgIFBhdHRlcm5UZXJtKiB0ZXJt
ID0gb3AubV90ZXJtOworCisgICAgICAgIGNvbnN0IFJlZ2lzdGVySUQgY291bnRSZWdpc3RlciA9
IHJlZ1QxOworCisgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGluayh0aGlzKTsKKworICAg
ICAgICBsb2FkRnJvbUZyYW1lKHRlcm0tPmZyYW1lTG9jYXRpb24sIGNvdW50UmVnaXN0ZXIpOwor
ICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmFwcGVuZChicmFuY2hUZXN0MzIoWmVybywgY291
bnRSZWdpc3RlcikpOworICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIGNvdW50UmVnaXN0
ZXIpOworICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIGluZGV4KTsKKyAgICAgICAganVt
cChvcC5tX3JlZW50cnkpOwogICAgIH0KIAotICAgIHZvaWQgZ2VuZXJhdGVQYXR0ZXJuQ2hhcmFj
dGVyTm9uR3JlZWR5KFRlcm1HZW5lcmF0aW9uU3RhdGUmIHN0YXRlKQorICAgIHZvaWQgZ2VuZXJh
dGVQYXR0ZXJuQ2hhcmFjdGVyTm9uR3JlZWR5KHNpemVfdCBvcEluZGV4KQogICAgIHsKLSAgICAg
ICAgY29uc3QgUmVnaXN0ZXJJRCBjaGFyYWN0ZXIgPSByZWdUMDsKKyAgICAgICAgWWFyck9wJiBv
cCA9IG1fb3BzW29wSW5kZXhdOworICAgICAgICBQYXR0ZXJuVGVybSogdGVybSA9IG9wLm1fdGVy
bTsKKwogICAgICAgICBjb25zdCBSZWdpc3RlcklEIGNvdW50UmVnaXN0ZXIgPSByZWdUMTsKLSAg
ICAgICAgUGF0dGVyblRlcm0mIHRlcm0gPSBzdGF0ZS50ZXJtKCk7Ci0gICAgICAgIFVDaGFyIGNo
ID0gdGVybS5wYXR0ZXJuQ2hhcmFjdGVyOwogCiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDAp
LCBjb3VudFJlZ2lzdGVyKTsKKyAgICAgICAgb3AubV9yZWVudHJ5ID0gbGFiZWwoKTsKKyAgICAg
ICAgc3RvcmVUb0ZyYW1lKGNvdW50UmVnaXN0ZXIsIHRlcm0tPmZyYW1lTG9jYXRpb24pOworICAg
IH0KKyAgICB2b2lkIGJhY2t0cmFja1BhdHRlcm5DaGFyYWN0ZXJOb25HcmVlZHkoc2l6ZV90IG9w
SW5kZXgpCisgICAgeworICAgICAgICBZYXJyT3AmIG9wID0gbV9vcHNbb3BJbmRleF07CisgICAg
ICAgIFBhdHRlcm5UZXJtKiB0ZXJtID0gb3AubV90ZXJtOworICAgICAgICBVQ2hhciBjaCA9IHRl
cm0tPnBhdHRlcm5DaGFyYWN0ZXI7CiAKLSAgICAgICAgSnVtcCBmaXJzdFRpbWVEb05vdGhpbmcg
PSBqdW1wKCk7CisgICAgICAgIGNvbnN0IFJlZ2lzdGVySUQgY2hhcmFjdGVyID0gcmVnVDA7Cisg
ICAgICAgIGNvbnN0IFJlZ2lzdGVySUQgY291bnRSZWdpc3RlciA9IHJlZ1QxOwogCi0gICAgICAg
IExhYmVsIGhhcmRGYWlsKHRoaXMpOwotICAgICAgICBzdWIzMihjb3VudFJlZ2lzdGVyLCBpbmRl
eCk7Ci0gICAgICAgIHN0YXRlLmp1bXBUb0JhY2t0cmFjayh0aGlzKTsKKyAgICAgICAgSnVtcExp
c3Qgbm9uR3JlZWR5RmFpbHVyZXM7CiAKLSAgICAgICAgTGFiZWwgYmFja3RyYWNrQmVnaW4odGhp
cyk7Ci0gICAgICAgIGxvYWRGcm9tRnJhbWUodGVybS5mcmFtZUxvY2F0aW9uLCBjb3VudFJlZ2lz
dGVyKTsKKyAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5rKHRoaXMpOwogCi0gICAgICAg
IGF0RW5kT2ZJbnB1dCgpLmxpbmtUbyhoYXJkRmFpbCwgdGhpcyk7Ci0gICAgICAgIGlmICh0ZXJt
LnF1YW50aXR5Q291bnQgIT0gcXVhbnRpZnlJbmZpbml0ZSkKLSAgICAgICAgICAgIGJyYW5jaDMy
KEVxdWFsLCBjb3VudFJlZ2lzdGVyLCBJbW0zMih0ZXJtLnF1YW50aXR5Q291bnQpLCBoYXJkRmFp
bCk7CisgICAgICAgIGxvYWRGcm9tRnJhbWUodGVybS0+ZnJhbWVMb2NhdGlvbiwgY291bnRSZWdp
c3Rlcik7CisKKyAgICAgICAgbm9uR3JlZWR5RmFpbHVyZXMuYXBwZW5kKGF0RW5kT2ZJbnB1dCgp
KTsKKyAgICAgICAgaWYgKHRlcm0tPnF1YW50aXR5Q291bnQgIT0gcXVhbnRpZnlJbmZpbml0ZSkK
KyAgICAgICAgICAgIG5vbkdyZWVkeUZhaWx1cmVzLmFwcGVuZChicmFuY2gzMihFcXVhbCwgY291
bnRSZWdpc3RlciwgSW1tMzIodGVybS0+cXVhbnRpdHlDb3VudCkpKTsKICAgICAgICAgaWYgKG1f
cGF0dGVybi5tX2lnbm9yZUNhc2UgJiYgaXNBU0NJSUFscGhhKGNoKSkgewotICAgICAgICAgICAg
cmVhZENoYXJhY3RlcihzdGF0ZS5pbnB1dE9mZnNldCgpLCBjaGFyYWN0ZXIpOworICAgICAgICAg
ICAgcmVhZENoYXJhY3Rlcih0ZXJtLT5pbnB1dFBvc2l0aW9uIC0gbV9jaGVja2VkLCBjaGFyYWN0
ZXIpOwogICAgICAgICAgICAgb3IzMihUcnVzdGVkSW1tMzIoMzIpLCBjaGFyYWN0ZXIpOwotICAg
ICAgICAgICAgYnJhbmNoMzIoTm90RXF1YWwsIGNoYXJhY3RlciwgSW1tMzIoVW5pY29kZTo6dG9M
b3dlcihjaCkpKS5saW5rVG8oaGFyZEZhaWwsIHRoaXMpOworICAgICAgICAgICAgbm9uR3JlZWR5
RmFpbHVyZXMuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBjaGFyYWN0ZXIsIEltbTMyKFVuaWNv
ZGU6OnRvTG93ZXIoY2gpKSkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQVNTRVJU
KCFtX3BhdHRlcm4ubV9pZ25vcmVDYXNlIHx8IChVbmljb2RlOjp0b0xvd2VyKGNoKSA9PSBVbmlj
b2RlOjp0b1VwcGVyKGNoKSkpOwotICAgICAgICAgICAganVtcElmQ2hhck5vdEVxdWFscyhjaCwg
c3RhdGUuaW5wdXRPZmZzZXQoKSkubGlua1RvKGhhcmRGYWlsLCB0aGlzKTsKKyAgICAgICAgICAg
IG5vbkdyZWVkeUZhaWx1cmVzLmFwcGVuZChqdW1wSWZDaGFyTm90RXF1YWxzKGNoLCB0ZXJtLT5p
bnB1dFBvc2l0aW9uIC0gbV9jaGVja2VkKSk7CiAgICAgICAgIH0KIAogICAgICAgICBhZGQzMihU
cnVzdGVkSW1tMzIoMSksIGNvdW50UmVnaXN0ZXIpOwogICAgICAgICBhZGQzMihUcnVzdGVkSW1t
MzIoMSksIGluZGV4KTsKIAotICAgICAgICBmaXJzdFRpbWVEb05vdGhpbmcubGluayh0aGlzKTsK
LSAgICAgICAgc3RvcmVUb0ZyYW1lKGNvdW50UmVnaXN0ZXIsIHRlcm0uZnJhbWVMb2NhdGlvbik7
CisgICAgICAgIGp1bXAob3AubV9yZWVudHJ5KTsKIAotICAgICAgICBzdGF0ZS5zZXRCYWNrdHJh
Y2tMYWJlbChiYWNrdHJhY2tCZWdpbik7CisgICAgICAgIG5vbkdyZWVkeUZhaWx1cmVzLmxpbmso
dGhpcyk7CisgICAgICAgIHN1YjMyKGNvdW50UmVnaXN0ZXIsIGluZGV4KTsKKyAgICAgICAgbV9i
YWNrdHJhY2tpbmdTdGF0ZS5mYWxsdGhyb3VnaCgpOwogICAgIH0KIAotICAgIHZvaWQgZ2VuZXJh
dGVDaGFyYWN0ZXJDbGFzc1NpbmdsZShUZXJtR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSkKKyAgICB2
b2lkIGdlbmVyYXRlQ2hhcmFjdGVyQ2xhc3NPbmNlKHNpemVfdCBvcEluZGV4KQogICAgIHsKLSAg
ICAgICAgY29uc3QgUmVnaXN0ZXJJRCBjaGFyYWN0ZXIgPSByZWdUMDsKLSAgICAgICAgUGF0dGVy
blRlcm0mIHRlcm0gPSBzdGF0ZS50ZXJtKCk7CisgICAgICAgIFlhcnJPcCYgb3AgPSBtX29wc1tv
cEluZGV4XTsKKyAgICAgICAgUGF0dGVyblRlcm0qIHRlcm0gPSBvcC5tX3Rlcm07CiAKLSAgICAg
ICAgSnVtcExpc3QgbWF0Y2hEZXN0OwotICAgICAgICByZWFkQ2hhcmFjdGVyKHN0YXRlLmlucHV0
T2Zmc2V0KCksIGNoYXJhY3Rlcik7Ci0gICAgICAgIG1hdGNoQ2hhcmFjdGVyQ2xhc3MoY2hhcmFj
dGVyLCBtYXRjaERlc3QsIHRlcm0uY2hhcmFjdGVyQ2xhc3MpOwotCi0gICAgICAgIGlmICh0ZXJt
LmludmVydCgpKQotICAgICAgICAgICAgc3RhdGUuanVtcFRvQmFja3RyYWNrKHRoaXMsIG1hdGNo
RGVzdCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgc3RhdGUuanVtcFRvQmFja3RyYWNr
KHRoaXMpOwotICAgICAgICAgICAgbWF0Y2hEZXN0LmxpbmsodGhpcyk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICB2b2lkIGdlbmVyYXRlQ2hhcmFjdGVyQ2xhc3NGaXhlZChUZXJtR2VuZXJhdGlv
blN0YXRlJiBzdGF0ZSkKLSAgICB7CiAgICAgICAgIGNvbnN0IFJlZ2lzdGVySUQgY2hhcmFjdGVy
ID0gcmVnVDA7Ci0gICAgICAgIGNvbnN0IFJlZ2lzdGVySUQgY291bnRSZWdpc3RlciA9IHJlZ1Qx
OwotICAgICAgICBQYXR0ZXJuVGVybSYgdGVybSA9IHN0YXRlLnRlcm0oKTsKLQotICAgICAgICBt
b3ZlKGluZGV4LCBjb3VudFJlZ2lzdGVyKTsKLSAgICAgICAgc3ViMzIoSW1tMzIodGVybS5xdWFu
dGl0eUNvdW50KSwgY291bnRSZWdpc3Rlcik7CiAKLSAgICAgICAgTGFiZWwgbG9vcCh0aGlzKTsK
ICAgICAgICAgSnVtcExpc3QgbWF0Y2hEZXN0OwotICAgICAgICBsb2FkMTYoQmFzZUluZGV4KGlu
cHV0LCBjb3VudFJlZ2lzdGVyLCBUaW1lc1R3bywgKHN0YXRlLmlucHV0T2Zmc2V0KCkgKyB0ZXJt
LnF1YW50aXR5Q291bnQpICogc2l6ZW9mKFVDaGFyKSksIGNoYXJhY3Rlcik7Ci0gICAgICAgIG1h
dGNoQ2hhcmFjdGVyQ2xhc3MoY2hhcmFjdGVyLCBtYXRjaERlc3QsIHRlcm0uY2hhcmFjdGVyQ2xh
c3MpOworICAgICAgICByZWFkQ2hhcmFjdGVyKCh0ZXJtLT5pbnB1dFBvc2l0aW9uIC0gbV9jaGVj
a2VkKSwgY2hhcmFjdGVyKTsKKyAgICAgICAgbWF0Y2hDaGFyYWN0ZXJDbGFzcyhjaGFyYWN0ZXIs
IG1hdGNoRGVzdCwgdGVybS0+Y2hhcmFjdGVyQ2xhc3MpOwogCi0gICAgICAgIGlmICh0ZXJtLmlu
dmVydCgpKQotICAgICAgICAgICAgc3RhdGUuanVtcFRvQmFja3RyYWNrKHRoaXMsIG1hdGNoRGVz
dCk7CisgICAgICAgIGlmICh0ZXJtLT5pbnZlcnQoKSkKKyAgICAgICAgICAgIG9wLm1fanVtcHMu
YXBwZW5kKG1hdGNoRGVzdCk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgc3RhdGUuanVt
cFRvQmFja3RyYWNrKHRoaXMpOworICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQoanVtcCgp
KTsKICAgICAgICAgICAgIG1hdGNoRGVzdC5saW5rKHRoaXMpOwogICAgICAgICB9Ci0KLSAgICAg
ICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBjb3VudFJlZ2lzdGVyKTsKLSAgICAgICAgYnJhbmNo
MzIoTm90RXF1YWwsIGNvdW50UmVnaXN0ZXIsIGluZGV4KS5saW5rVG8obG9vcCwgdGhpcyk7CiAg
ICAgfQotCi0gICAgdm9pZCBnZW5lcmF0ZUNoYXJhY3RlckNsYXNzR3JlZWR5KFRlcm1HZW5lcmF0
aW9uU3RhdGUmIHN0YXRlKQorICAgIHZvaWQgYmFja3RyYWNrQ2hhcmFjdGVyQ2xhc3NPbmNlKHNp
emVfdCBvcEluZGV4KQogICAgIHsKLSAgICAgICAgY29uc3QgUmVnaXN0ZXJJRCBjaGFyYWN0ZXIg
PSByZWdUMDsKLSAgICAgICAgY29uc3QgUmVnaXN0ZXJJRCBjb3VudFJlZ2lzdGVyID0gcmVnVDE7
Ci0gICAgICAgIFBhdHRlcm5UZXJtJiB0ZXJtID0gc3RhdGUudGVybSgpOwotCi0gICAgICAgIG1v
dmUoVHJ1c3RlZEltbTMyKDApLCBjb3VudFJlZ2lzdGVyKTsKLQotICAgICAgICBKdW1wTGlzdCBm
YWlsdXJlczsKLSAgICAgICAgTGFiZWwgbG9vcCh0aGlzKTsKLSAgICAgICAgZmFpbHVyZXMuYXBw
ZW5kKGF0RW5kT2ZJbnB1dCgpKTsKLQotICAgICAgICBpZiAodGVybS5pbnZlcnQoKSkgewotICAg
ICAgICAgICAgcmVhZENoYXJhY3RlcihzdGF0ZS5pbnB1dE9mZnNldCgpLCBjaGFyYWN0ZXIpOwot
ICAgICAgICAgICAgbWF0Y2hDaGFyYWN0ZXJDbGFzcyhjaGFyYWN0ZXIsIGZhaWx1cmVzLCB0ZXJt
LmNoYXJhY3RlckNsYXNzKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEp1bXBMaXN0
IG1hdGNoRGVzdDsKLSAgICAgICAgICAgIHJlYWRDaGFyYWN0ZXIoc3RhdGUuaW5wdXRPZmZzZXQo
KSwgY2hhcmFjdGVyKTsKLSAgICAgICAgICAgIG1hdGNoQ2hhcmFjdGVyQ2xhc3MoY2hhcmFjdGVy
LCBtYXRjaERlc3QsIHRlcm0uY2hhcmFjdGVyQ2xhc3MpOwotICAgICAgICAgICAgZmFpbHVyZXMu
YXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgICAgICBtYXRjaERlc3QubGluayh0aGlzKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgY291bnRSZWdpc3Rlcik7Ci0g
ICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgaW5kZXgpOwotICAgICAgICBpZiAodGVybS5x
dWFudGl0eUNvdW50ICE9IHF1YW50aWZ5SW5maW5pdGUpIHsKLSAgICAgICAgICAgIGJyYW5jaDMy
KE5vdEVxdWFsLCBjb3VudFJlZ2lzdGVyLCBJbW0zMih0ZXJtLnF1YW50aXR5Q291bnQpKS5saW5r
VG8obG9vcCwgdGhpcyk7Ci0gICAgICAgICAgICBmYWlsdXJlcy5hcHBlbmQoanVtcCgpKTsKLSAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICBqdW1wKGxvb3ApOwotCi0gICAgICAgIExhYmVsIGJh
Y2t0cmFja0JlZ2luKHRoaXMpOwotICAgICAgICBsb2FkRnJvbUZyYW1lKHRlcm0uZnJhbWVMb2Nh
dGlvbiwgY291bnRSZWdpc3Rlcik7Ci0gICAgICAgIHN0YXRlLmp1bXBUb0JhY2t0cmFjayh0aGlz
LCBicmFuY2hUZXN0MzIoWmVybywgY291bnRSZWdpc3RlcikpOwotICAgICAgICBzdWIzMihUcnVz
dGVkSW1tMzIoMSksIGNvdW50UmVnaXN0ZXIpOwotICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIo
MSksIGluZGV4KTsKLQotICAgICAgICBmYWlsdXJlcy5saW5rKHRoaXMpOwotCi0gICAgICAgIHN0
b3JlVG9GcmFtZShjb3VudFJlZ2lzdGVyLCB0ZXJtLmZyYW1lTG9jYXRpb24pOwotCi0gICAgICAg
IHN0YXRlLnNldEJhY2t0cmFja0xhYmVsKGJhY2t0cmFja0JlZ2luKTsKKyAgICAgICAgYmFja3Ry
YWNrVGVybURlZmF1bHQob3BJbmRleCk7CiAgICAgfQogCi0gICAgdm9pZCBnZW5lcmF0ZUNoYXJh
Y3RlckNsYXNzTm9uR3JlZWR5KFRlcm1HZW5lcmF0aW9uU3RhdGUmIHN0YXRlKQorICAgIHZvaWQg
Z2VuZXJhdGVDaGFyYWN0ZXJDbGFzc0ZpeGVkKHNpemVfdCBvcEluZGV4KQogICAgIHsKKyAgICAg
ICAgWWFyck9wJiBvcCA9IG1fb3BzW29wSW5kZXhdOworICAgICAgICBQYXR0ZXJuVGVybSogdGVy
bSA9IG9wLm1fdGVybTsKKwogICAgICAgICBjb25zdCBSZWdpc3RlcklEIGNoYXJhY3RlciA9IHJl
Z1QwOwogICAgICAgICBjb25zdCBSZWdpc3RlcklEIGNvdW50UmVnaXN0ZXIgPSByZWdUMTsKLSAg
ICAgICAgUGF0dGVyblRlcm0mIHRlcm0gPSBzdGF0ZS50ZXJtKCk7Ci0KLSAgICAgICAgbW92ZShU
cnVzdGVkSW1tMzIoMCksIGNvdW50UmVnaXN0ZXIpOwotCi0gICAgICAgIEp1bXAgZmlyc3RUaW1l
RG9Ob3RoaW5nID0ganVtcCgpOwotCi0gICAgICAgIExhYmVsIGhhcmRGYWlsKHRoaXMpOwotICAg
ICAgICBzdWIzMihjb3VudFJlZ2lzdGVyLCBpbmRleCk7Ci0gICAgICAgIHN0YXRlLmp1bXBUb0Jh
Y2t0cmFjayh0aGlzKTsKLQotICAgICAgICBMYWJlbCBiYWNrdHJhY2tCZWdpbih0aGlzKTsKLSAg
ICAgICAgbG9hZEZyb21GcmFtZSh0ZXJtLmZyYW1lTG9jYXRpb24sIGNvdW50UmVnaXN0ZXIpOwog
Ci0gICAgICAgIGF0RW5kT2ZJbnB1dCgpLmxpbmtUbyhoYXJkRmFpbCwgdGhpcyk7Ci0gICAgICAg
IGJyYW5jaDMyKEVxdWFsLCBjb3VudFJlZ2lzdGVyLCBJbW0zMih0ZXJtLnF1YW50aXR5Q291bnQp
LCBoYXJkRmFpbCk7CisgICAgICAgIG1vdmUoaW5kZXgsIGNvdW50UmVnaXN0ZXIpOworICAgICAg
ICBzdWIzMihJbW0zMih0ZXJtLT5xdWFudGl0eUNvdW50KSwgY291bnRSZWdpc3Rlcik7CiAKKyAg
ICAgICAgTGFiZWwgbG9vcCh0aGlzKTsKICAgICAgICAgSnVtcExpc3QgbWF0Y2hEZXN0OwotICAg
ICAgICByZWFkQ2hhcmFjdGVyKHN0YXRlLmlucHV0T2Zmc2V0KCksIGNoYXJhY3Rlcik7Ci0gICAg
ICAgIG1hdGNoQ2hhcmFjdGVyQ2xhc3MoY2hhcmFjdGVyLCBtYXRjaERlc3QsIHRlcm0uY2hhcmFj
dGVyQ2xhc3MpOworICAgICAgICBsb2FkMTYoQmFzZUluZGV4KGlucHV0LCBjb3VudFJlZ2lzdGVy
LCBUaW1lc1R3bywgKHRlcm0tPmlucHV0UG9zaXRpb24gLSBtX2NoZWNrZWQgKyB0ZXJtLT5xdWFu
dGl0eUNvdW50KSAqIHNpemVvZihVQ2hhcikpLCBjaGFyYWN0ZXIpOworICAgICAgICBtYXRjaENo
YXJhY3RlckNsYXNzKGNoYXJhY3RlciwgbWF0Y2hEZXN0LCB0ZXJtLT5jaGFyYWN0ZXJDbGFzcyk7
CiAKLSAgICAgICAgaWYgKHRlcm0uaW52ZXJ0KCkpCi0gICAgICAgICAgICBtYXRjaERlc3QubGlu
a1RvKGhhcmRGYWlsLCB0aGlzKTsKKyAgICAgICAgaWYgKHRlcm0tPmludmVydCgpKQorICAgICAg
ICAgICAgb3AubV9qdW1wcy5hcHBlbmQobWF0Y2hEZXN0KTsKICAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICBqdW1wKGhhcmRGYWlsKTsKKyAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGp1
bXAoKSk7CiAgICAgICAgICAgICBtYXRjaERlc3QubGluayh0aGlzKTsKICAgICAgICAgfQogCiAg
ICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgY291bnRSZWdpc3Rlcik7Ci0gICAgICAgIGFk
ZDMyKFRydXN0ZWRJbW0zMigxKSwgaW5kZXgpOwotCi0gICAgICAgIGZpcnN0VGltZURvTm90aGlu
Zy5saW5rKHRoaXMpOwotICAgICAgICBzdG9yZVRvRnJhbWUoY291bnRSZWdpc3RlciwgdGVybS5m
cmFtZUxvY2F0aW9uKTsKLQotICAgICAgICBzdGF0ZS5zZXRCYWNrdHJhY2tMYWJlbChiYWNrdHJh
Y2tCZWdpbik7Ci0gICAgfQotCi0gICAgdm9pZCBnZW5lcmF0ZVBhcmVudGhlc2VzRGlzanVuY3Rp
b24oUGF0dGVyblRlcm0mIHBhcmVudGhlc2VzVGVybSwgVGVybUdlbmVyYXRpb25TdGF0ZSYgc3Rh
dGUsIHVuc2lnbmVkIGFsdGVybmF0aXZlRnJhbWVMb2NhdGlvbikKLSAgICB7Ci0gICAgICAgIEFT
U0VSVCgocGFyZW50aGVzZXNUZXJtLnR5cGUgPT0gUGF0dGVyblRlcm06OlR5cGVQYXJlbnRoZXNl
c1N1YnBhdHRlcm4pIHx8IChwYXJlbnRoZXNlc1Rlcm0udHlwZSA9PSBQYXR0ZXJuVGVybTo6VHlw
ZVBhcmVudGhldGljYWxBc3NlcnRpb24pKTsKLSAgICAgICAgQVNTRVJUKHBhcmVudGhlc2VzVGVy
bS5xdWFudGl0eUNvdW50ID09IDEpOwotCi0gICAgICAgIFBhdHRlcm5EaXNqdW5jdGlvbiogZGlz
anVuY3Rpb24gPSBwYXJlbnRoZXNlc1Rlcm0ucGFyZW50aGVzZXMuZGlzanVuY3Rpb247Ci0gICAg
ICAgIHVuc2lnbmVkIHByZUNoZWNrZWRDb3VudCA9ICgocGFyZW50aGVzZXNUZXJtLnF1YW50aXR5
VHlwZSA9PSBRdWFudGlmaWVyRml4ZWRDb3VudCkgJiYgKHBhcmVudGhlc2VzVGVybS50eXBlICE9
IFBhdHRlcm5UZXJtOjpUeXBlUGFyZW50aGV0aWNhbEFzc2VydGlvbikpID8gZGlzanVuY3Rpb24t
Pm1fbWluaW11bVNpemUgOiAwOwotCi0gICAgICAgIGlmIChkaXNqdW5jdGlvbi0+bV9hbHRlcm5h
dGl2ZXMuc2l6ZSgpID09IDEpIHsKLSAgICAgICAgICAgIHN0YXRlLnJlc2V0QWx0ZXJuYXRpdmUo
KTsKLSAgICAgICAgICAgIEFTU0VSVChzdGF0ZS5hbHRlcm5hdGl2ZVZhbGlkKCkpOwotICAgICAg
ICAgICAgUGF0dGVybkFsdGVybmF0aXZlKiBhbHRlcm5hdGl2ZSA9IHN0YXRlLmFsdGVybmF0aXZl
KCk7Ci0gICAgICAgICAgICBvcHRpbWl6ZUFsdGVybmF0aXZlKGFsdGVybmF0aXZlKTsKLQotICAg
ICAgICAgICAgaW50IGNvdW50VG9DaGVjayA9IGFsdGVybmF0aXZlLT5tX21pbmltdW1TaXplIC0g
cHJlQ2hlY2tlZENvdW50OwotICAgICAgICAgICAgaWYgKGNvdW50VG9DaGVjaykgewotICAgICAg
ICAgICAgICAgIEFTU0VSVCgocGFyZW50aGVzZXNUZXJtLnR5cGUgPT0gUGF0dGVyblRlcm06OlR5
cGVQYXJlbnRoZXRpY2FsQXNzZXJ0aW9uKSB8fCAocGFyZW50aGVzZXNUZXJtLnF1YW50aXR5VHlw
ZSAhPSBRdWFudGlmaWVyRml4ZWRDb3VudCkpOwotCi0gICAgICAgICAgICAgICAgLy8gRklYTUU6
IFRoaXMgaXMgcXVpdGUgaG9ycmlibGUuICBUaGUgY2FsbCB0byAncGxhbnRKdW1wVG9CYWNrdHJh
Y2tJZkV4aXN0cycKLSAgICAgICAgICAgICAgICAvLyB3aWxsIGJlIGZvcmNlZCB0byBhbHdheXMg
dHJhbXBvbGluZSBpbnRvIGhlcmUsIGp1c3QgdG8gZGVjcmVtZW50IHRoZSBpbmRleC4KLSAgICAg
ICAgICAgICAgICAvLyBJY2suIAotICAgICAgICAgICAgICAgIEp1bXAgc2tpcCA9IGp1bXAoKTsK
LQotICAgICAgICAgICAgICAgIExhYmVsIGJhY2t0cmFja0JlZ2luKHRoaXMpOwotICAgICAgICAg
ICAgICAgIHN1YjMyKEltbTMyKGNvdW50VG9DaGVjayksIGluZGV4KTsKLSAgICAgICAgICAgICAg
ICBzdGF0ZS5hZGRCYWNrdHJhY2tKdW1wKGp1bXAoKSk7Ci0KLSAgICAgICAgICAgICAgICBza2lw
LmxpbmsodGhpcyk7Ci0KLSAgICAgICAgICAgICAgICBzdGF0ZS5zZXRCYWNrdHJhY2tMYWJlbChi
YWNrdHJhY2tCZWdpbik7Ci0KLSAgICAgICAgICAgICAgICBzdGF0ZS5qdW1wVG9CYWNrdHJhY2so
dGhpcywganVtcElmTm9BdmFpbGFibGVJbnB1dChjb3VudFRvQ2hlY2spKTsKLSAgICAgICAgICAg
ICAgICBzdGF0ZS5jaGVja2VkVG90YWwgKz0gY291bnRUb0NoZWNrOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBmb3IgKHN0YXRlLnJlc2V0VGVybSgpOyBzdGF0ZS50ZXJtVmFsaWQoKTsg
c3RhdGUubmV4dFRlcm0oKSkKLSAgICAgICAgICAgICAgICBnZW5lcmF0ZVRlcm0oc3RhdGUpOwot
Ci0gICAgICAgICAgICBzdGF0ZS5jaGVja2VkVG90YWwgLT0gY291bnRUb0NoZWNrOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgSnVtcExpc3Qgc3VjY2Vzc2VzOwotICAgICAgICAgICAg
Ym9vbCBwcm9wb2dhdGVCYWNrdHJhY2sgPSBmYWxzZTsKLQotICAgICAgICAgICAgLy8gU2F2ZSBj
dXJyZW50IHN0YXRlJ3MgcGFyZW4ganVtcCBsaXN0IGZvciB1c2Ugd2l0aCBlYWNoIGFsdGVybmF0
aXZlIAotICAgICAgICAgICAgSnVtcExpc3QqIG91dGVySnVtcExpc3QgPSBzdGF0ZS5nZXRKdW1w
TGlzdFRvUHJpb3JQYXJlbigpOwotCi0gICAgICAgICAgICBmb3IgKHN0YXRlLnJlc2V0QWx0ZXJu
YXRpdmUoKTsgc3RhdGUuYWx0ZXJuYXRpdmVWYWxpZCgpOyBzdGF0ZS5uZXh0QWx0ZXJuYXRpdmUo
KSwgc3RhdGUuc2V0SnVtcExpc3RUb1ByaW9yUGFyZW4ob3V0ZXJKdW1wTGlzdCkpIHsKLSAgICAg
ICAgICAgICAgICBQYXR0ZXJuQWx0ZXJuYXRpdmUqIGFsdGVybmF0aXZlID0gc3RhdGUuYWx0ZXJu
YXRpdmUoKTsKLSAgICAgICAgICAgICAgICBvcHRpbWl6ZUFsdGVybmF0aXZlKGFsdGVybmF0aXZl
KTsKLQotICAgICAgICAgICAgICAgIEFTU0VSVChhbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSA+
PSBwcmVDaGVja2VkQ291bnQpOwotICAgICAgICAgICAgICAgIGludCBjb3VudFRvQ2hlY2sgPSBh
bHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSAtIHByZUNoZWNrZWRDb3VudDsKLSAgICAgICAgICAg
ICAgICBpZiAoY291bnRUb0NoZWNrKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlLmFkZEJh
Y2t0cmFja0p1bXAoanVtcElmTm9BdmFpbGFibGVJbnB1dChjb3VudFRvQ2hlY2spKTsKLSAgICAg
ICAgICAgICAgICAgICAgc3RhdGUuY2hlY2tlZFRvdGFsICs9IGNvdW50VG9DaGVjazsKLSAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBmb3IgKHN0YXRlLnJlc2V0VGVybSgpOyBz
dGF0ZS50ZXJtVmFsaWQoKTsgc3RhdGUubmV4dFRlcm0oKSkKLSAgICAgICAgICAgICAgICAgICAg
Z2VuZXJhdGVUZXJtKHN0YXRlKTsKLQotICAgICAgICAgICAgICAgIC8vIE1hdGNoZWQgYW4gYWx0
ZXJuYXRpdmUuCi0gICAgICAgICAgICAgICAgRGF0YUxhYmVsUHRyIGRhdGFMYWJlbCA9IHN0b3Jl
VG9GcmFtZVdpdGhQYXRjaChhbHRlcm5hdGl2ZUZyYW1lTG9jYXRpb24pOwotCi0gICAgICAgICAg
ICAgICAgaWYgKCFzdGF0ZS5pc0xhc3RBbHRlcm5hdGl2ZSgpIHx8IGNvdW50VG9DaGVjaykKLSAg
ICAgICAgICAgICAgICAgICAgc3VjY2Vzc2VzLmFwcGVuZChqdW1wKCkpOwotCi0gICAgICAgICAg
ICAgICAgLy8gQWx0ZXJuYXRpdmUgZGlkIG5vdCBtYXRjaC4KLQotICAgICAgICAgICAgICAgIC8v
IERvIHdlIGhhdmUgYSBiYWNrdHJhY2sgZGVzdGluYXRpb24/Ci0gICAgICAgICAgICAgICAgLy8g
ICAgaWYgc28sIGxpbmsgdGhlIGRhdGEgbGFiZWwgdG8gaXQuCi0gICAgICAgICAgICAgICAgc3Rh
dGUubGlua0RhdGFMYWJlbFRvQmFja3RyYWNrSWZFeGlzdHModGhpcywgZGF0YUxhYmVsKTsKLQot
ICAgICAgICAgICAgICAgIGlmICghc3RhdGUuaXNMYXN0QWx0ZXJuYXRpdmUoKSB8fCBjb3VudFRv
Q2hlY2spCi0gICAgICAgICAgICAgICAgICAgIHN0YXRlLmxpbmtBbHRlcm5hdGl2ZUJhY2t0cmFj
a3ModGhpcyk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoY291bnRUb0NoZWNrKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHN1YjMyKEltbTMyKGNvdW50VG9DaGVjayksIGluZGV4KTsKLSAgICAgICAg
ICAgICAgICAgICAgc3RhdGUuY2hlY2tlZFRvdGFsIC09IGNvdW50VG9DaGVjazsKLSAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLmlzTGFzdEFsdGVybmF0aXZlKCkpCi0gICAgICAgICAg
ICAgICAgICAgIHByb3BvZ2F0ZUJhY2t0cmFjayA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAvLyBXZSBmYWxsIHRocm91Z2ggdG8gaGVyZSB3aGVuIHRoZSBsYXN0IGFsdGVybmF0
aXZlIGZhaWxzLgotICAgICAgICAgICAgLy8gQWRkIGEgYmFja3RyYWNrIG91dCBvZiBoZXJlIGZv
ciB0aGUgcGFyZW50aGVzZSBoYW5kbGluZyBjb2RlIHRvIGxpbmsgdXAuCi0gICAgICAgICAgICBp
ZiAoIXByb3BvZ2F0ZUJhY2t0cmFjaykKLSAgICAgICAgICAgICAgICBzdGF0ZS5hZGRCYWNrdHJh
Y2tKdW1wKGp1bXAoKSk7Ci0KLSAgICAgICAgICAgIC8vIFNhdmUgYWRkcmVzcyBvbiBzdGFjayBm
b3IgdGhlIHBhcmVucyBjb2RlIHRvIGJhY2t0cmFjayB0bywgdG8gcmV0cnkgdGhlCi0gICAgICAg
ICAgICAvLyBuZXh0IGFsdGVybmF0aXZlLgotICAgICAgICAgICAgc3RhdGUuc2V0QmFja1RyYWNr
U3RhY2tPZmZzZXQoYWx0ZXJuYXRpdmVGcmFtZUxvY2F0aW9uICogc2l6ZW9mKHZvaWQqKSk7Ci0K
LSAgICAgICAgICAgIHN1Y2Nlc3Nlcy5saW5rKHRoaXMpOwotICAgICAgICB9CisgICAgICAgIGJy
YW5jaDMyKE5vdEVxdWFsLCBjb3VudFJlZ2lzdGVyLCBpbmRleCkubGlua1RvKGxvb3AsIHRoaXMp
OwogICAgIH0KLQotICAgIHZvaWQgZ2VuZXJhdGVQYXJlbnRoZXNlc1NpbmdsZShUZXJtR2VuZXJh
dGlvblN0YXRlJiBzdGF0ZSkKKyAgICB2b2lkIGJhY2t0cmFja0NoYXJhY3RlckNsYXNzRml4ZWQo
c2l6ZV90IG9wSW5kZXgpCiAgICAgewotICAgICAgICBjb25zdCBSZWdpc3RlcklEIGluZGV4VGVt
cG9yYXJ5ID0gcmVnVDA7Ci0gICAgICAgIFBhdHRlcm5UZXJtJiB0ZXJtID0gc3RhdGUudGVybSgp
OwotICAgICAgICBQYXR0ZXJuRGlzanVuY3Rpb24qIGRpc2p1bmN0aW9uID0gdGVybS5wYXJlbnRo
ZXNlcy5kaXNqdW5jdGlvbjsKLSAgICAgICAgQVNTRVJUKHRlcm0ucXVhbnRpdHlDb3VudCA9PSAx
KTsKLQotICAgICAgICB1bnNpZ25lZCBwcmVDaGVja2VkQ291bnQgPSAodGVybS5xdWFudGl0eVR5
cGUgPT0gUXVhbnRpZmllckZpeGVkQ291bnQpID8gZGlzanVuY3Rpb24tPm1fbWluaW11bVNpemUg
OiAwOwotCi0gICAgICAgIHVuc2lnbmVkIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiA9IHRlcm0u
ZnJhbWVMb2NhdGlvbjsKLSAgICAgICAgdW5zaWduZWQgYWx0ZXJuYXRpdmVGcmFtZUxvY2F0aW9u
ID0gcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uOwotICAgICAgICBpZiAodGVybS5xdWFudGl0eVR5
cGUgIT0gUXVhbnRpZmllckZpeGVkQ291bnQpCi0gICAgICAgICAgICBhbHRlcm5hdGl2ZUZyYW1l
TG9jYXRpb24gKz0gWWFyclN0YWNrU3BhY2VGb3JCYWNrVHJhY2tJbmZvUGFyZW50aGVzZXNPbmNl
OwotCi0gICAgICAgIC8vIG9wdGltaXplZCBjYXNlIC0gbm8gY2FwdHVyZSAmIG5vIHF1YW50aWZp
ZXIgY2FuIGJlIGhhbmRsZWQgaW4gYSBsaWdodC13ZWlnaHQgbWFubmVyLgotICAgICAgICBpZiAo
IXRlcm0uY2FwdHVyZSgpICYmICh0ZXJtLnF1YW50aXR5VHlwZSA9PSBRdWFudGlmaWVyRml4ZWRD
b3VudCkpIHsKLSAgICAgICAgICAgIG1fZXhwcmVzc2lvblN0YXRlLmluY3JlbWVudFBhcmVuTmVz
dGluZ0xldmVsKCk7Ci0KLSAgICAgICAgICAgIFRlcm1HZW5lcmF0aW9uU3RhdGUgcGFyZW50aGVz
ZXNTdGF0ZShkaXNqdW5jdGlvbiwgc3RhdGUuY2hlY2tlZFRvdGFsKTsKLQotICAgICAgICAgICAg
Ly8gVXNlIHRoZSBjdXJyZW50IHN0YXRlJ3MganVtcCBsaXN0IGZvciB0aGUgbmVzdGVkIHBhcmVu
dGhlc2VzLgotICAgICAgICAgICAgcGFyZW50aGVzZXNTdGF0ZS5zZXRKdW1wTGlzdFRvUHJpb3JQ
YXJlbihzdGF0ZS5nZXRKdW1wTGlzdFRvUHJpb3JQYXJlbigpKTsKLQotICAgICAgICAgICAgZ2Vu
ZXJhdGVQYXJlbnRoZXNlc0Rpc2p1bmN0aW9uKHN0YXRlLnRlcm0oKSwgcGFyZW50aGVzZXNTdGF0
ZSwgYWx0ZXJuYXRpdmVGcmFtZUxvY2F0aW9uKTsKLSAgICAgICAgICAgIC8vIHRoaXMgZXhwZWN0
cyB0aGF0IGFueSBiYWNrdHJhY2tzIGJhY2sgb3V0IG9mIHRoZSBwYXJlbnRoZXNlcyB3aWxsIGJl
IGluIHRoZQotICAgICAgICAgICAgLy8gcGFyZW50aGVzZXNTdGF0ZSdzIG1fYmFja1RyYWNrSnVt
cHMgdmVjdG9yLCBhbmQgdGhhdCBpZiB0aGV5IG5lZWQgYmFja3RyYWNraW5nCi0gICAgICAgICAg
ICAvLyB0aGV5IHdpbGwgaGF2ZSBzZXQgYW4gZW50cnkgcG9pbnQgb24gdGhlIHBhcmVudGhlc2Vz
U3RhdGUncyBtX2JhY2t0cmFja0xhYmVsLgotICAgICAgICAgICAgQmFja3RyYWNrRGVzdGluYXRp
b24mIHBhcmVudGhlc2VzQmFja3RyYWNrID0gcGFyZW50aGVzZXNTdGF0ZS5nZXRCYWNrdHJhY2tE
ZXN0aW5hdGlvbigpOwotICAgICAgICAgICAgQmFja3RyYWNrRGVzdGluYXRpb24mIHN0YXRlQmFj
a3RyYWNrID0gc3RhdGUuZ2V0QmFja3RyYWNrRGVzdGluYXRpb24oKTsKLQotICAgICAgICAgICAg
c3RhdGUucHJvcGFnYXRlQmFja3RyYWNraW5nRnJvbSh0aGlzLCBwYXJlbnRoZXNlc0JhY2t0cmFj
ayk7Ci0gICAgICAgICAgICBzdGF0ZUJhY2t0cmFjay5wcm9wYWdhdGVCYWNrdHJhY2tUb0xhYmVs
KHBhcmVudGhlc2VzQmFja3RyYWNrKTsKLQotICAgICAgICAgICAgc3RhdGUuc2V0SnVtcExpc3RU
b1ByaW9yUGFyZW4ocGFyZW50aGVzZXNTdGF0ZS5nZXRKdW1wTGlzdFRvUHJpb3JQYXJlbigpKTsK
LQotICAgICAgICAgICAgbV9leHByZXNzaW9uU3RhdGUuZGVjcmVtZW50UGFyZW5OZXN0aW5nTGV2
ZWwoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEp1bXAgbm9uR3JlZWR5U2tpcFBh
cmVudGhlc2VzOwotICAgICAgICAgICAgTGFiZWwgbm9uR3JlZWR5VHJ5UGFyZW50aGVzZXM7Ci0g
ICAgICAgICAgICBpZiAodGVybS5xdWFudGl0eVR5cGUgPT0gUXVhbnRpZmllckdyZWVkeSkKLSAg
ICAgICAgICAgICAgICBzdG9yZVRvRnJhbWUoaW5kZXgsIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlv
bik7Ci0gICAgICAgICAgICBlbHNlIGlmICh0ZXJtLnF1YW50aXR5VHlwZSA9PSBRdWFudGlmaWVy
Tm9uR3JlZWR5KSB7Ci0gICAgICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKFRydXN0ZWRJbW0zMigt
MSksIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbik7Ci0gICAgICAgICAgICAgICAgbm9uR3JlZWR5
U2tpcFBhcmVudGhlc2VzID0ganVtcCgpOwotICAgICAgICAgICAgICAgIG5vbkdyZWVkeVRyeVBh
cmVudGhlc2VzID0gbGFiZWwoKTsKLSAgICAgICAgICAgICAgICBzdG9yZVRvRnJhbWUoaW5kZXgs
IHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IC8vIHN0b3JlIHRoZSBtYXRjaCBzdGFydCBpbmRleAotICAgICAgICAgICAgaWYgKHRlcm0uY2Fw
dHVyZSgpKSB7Ci0gICAgICAgICAgICAgICAgaW50IGlucHV0T2Zmc2V0ID0gc3RhdGUuaW5wdXRP
ZmZzZXQoKSAtIHByZUNoZWNrZWRDb3VudDsKLSAgICAgICAgICAgICAgICBpZiAoaW5wdXRPZmZz
ZXQpIHsKLSAgICAgICAgICAgICAgICAgICAgbW92ZShpbmRleCwgaW5kZXhUZW1wb3JhcnkpOwot
ICAgICAgICAgICAgICAgICAgICBhZGQzMihJbW0zMihpbnB1dE9mZnNldCksIGluZGV4VGVtcG9y
YXJ5KTsKLSAgICAgICAgICAgICAgICAgICAgc3RvcmUzMihpbmRleFRlbXBvcmFyeSwgQWRkcmVz
cyhvdXRwdXQsICh0ZXJtLnBhcmVudGhlc2VzLnN1YnBhdHRlcm5JZCA8PCAxKSAqIHNpemVvZihp
bnQpKSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHN0b3Jl
MzIoaW5kZXgsIEFkZHJlc3Mob3V0cHV0LCAodGVybS5wYXJlbnRoZXNlcy5zdWJwYXR0ZXJuSWQg
PDwgMSkgKiBzaXplb2YoaW50KSkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBQYXJl
bnRoZXNlc1RhaWwqIHBhcmVudGhlc2VzVGFpbCA9IG1fZXhwcmVzc2lvblN0YXRlLmFkZFBhcmVu
dGhlc2VzVGFpbCh0ZXJtLCBzdGF0ZS5nZXRKdW1wTGlzdFRvUHJpb3JQYXJlbigpKTsKLQotICAg
ICAgICAgICAgbV9leHByZXNzaW9uU3RhdGUuaW5jcmVtZW50UGFyZW5OZXN0aW5nTGV2ZWwoKTsK
LQotICAgICAgICAgICAgVGVybUdlbmVyYXRpb25TdGF0ZSBwYXJlbnRoZXNlc1N0YXRlKGRpc2p1
bmN0aW9uLCBzdGF0ZS5jaGVja2VkVG90YWwpOwotCi0gICAgICAgICAgICAvLyBTYXZlIHRoZSBw
YXJlbnRoZXNlc1RhaWwgZm9yIGJhY2t0cmFja2luZyBmcm9tIG5lc3RlZCBwYXJlbnMgdG8gdGhp
cyBvbmUuCi0gICAgICAgICAgICBwYXJlbnRoZXNlc1N0YXRlLnNldEp1bXBMaXN0VG9QcmlvclBh
cmVuKCZwYXJlbnRoZXNlc1RhaWwtPm1fd2l0aGluQmFja3RyYWNrSnVtcHMpOwotCi0gICAgICAg
ICAgICAvLyBnZW5lcmF0ZSB0aGUgYm9keSBvZiB0aGUgcGFyZW50aGVzZXMKLSAgICAgICAgICAg
IGdlbmVyYXRlUGFyZW50aGVzZXNEaXNqdW5jdGlvbihzdGF0ZS50ZXJtKCksIHBhcmVudGhlc2Vz
U3RhdGUsIGFsdGVybmF0aXZlRnJhbWVMb2NhdGlvbik7Ci0KLSAgICAgICAgICAgIC8vIEZvciBu
b24tZml4ZWQgY291bnRzLCBiYWNrdHJhY2sgaWYgd2UgZGlkbid0IG1hdGNoIGFueXRoaW5nLgot
ICAgICAgICAgICAgaWYgKHRlcm0ucXVhbnRpdHlUeXBlICE9IFF1YW50aWZpZXJGaXhlZENvdW50
KQotICAgICAgICAgICAgICAgIHBhcmVudGhlc2VzVGFpbC0+YWRkQWZ0ZXJQYXJlbkp1bXAoYnJh
bmNoMzIoRXF1YWwsIGluZGV4LCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCAocGFyZW50
aGVzZXNGcmFtZUxvY2F0aW9uICogc2l6ZW9mKHZvaWQqKSkpKSk7Ci0KLSAgICAgICAgICAgIC8v
IHN0b3JlIHRoZSBtYXRjaCBlbmQgaW5kZXgKLSAgICAgICAgICAgIGlmICh0ZXJtLmNhcHR1cmUo
KSkgewotICAgICAgICAgICAgICAgIGludCBpbnB1dE9mZnNldCA9IHN0YXRlLmlucHV0T2Zmc2V0
KCk7Ci0gICAgICAgICAgICAgICAgaWYgKGlucHV0T2Zmc2V0KSB7Ci0gICAgICAgICAgICAgICAg
ICAgIG1vdmUoaW5kZXgsIGluZGV4VGVtcG9yYXJ5KTsKLSAgICAgICAgICAgICAgICAgICAgYWRk
MzIoSW1tMzIoc3RhdGUuaW5wdXRPZmZzZXQoKSksIGluZGV4VGVtcG9yYXJ5KTsKLSAgICAgICAg
ICAgICAgICAgICAgc3RvcmUzMihpbmRleFRlbXBvcmFyeSwgQWRkcmVzcyhvdXRwdXQsICgodGVy
bS5wYXJlbnRoZXNlcy5zdWJwYXR0ZXJuSWQgPDwgMSkgKyAxKSAqIHNpemVvZihpbnQpKSk7Ci0g
ICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHN0b3JlMzIoaW5kZXgs
IEFkZHJlc3Mob3V0cHV0LCAoKHRlcm0ucGFyZW50aGVzZXMuc3VicGF0dGVybklkIDw8IDEpICsg
MSkgKiBzaXplb2YoaW50KSkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtX2V4cHJl
c3Npb25TdGF0ZS5kZWNyZW1lbnRQYXJlbk5lc3RpbmdMZXZlbCgpOwotCi0gICAgICAgICAgICBw
YXJlbnRoZXNlc1RhaWwtPnByb2Nlc3NCYWNrdHJhY2tzKHRoaXMsIHN0YXRlLCBwYXJlbnRoZXNl
c1N0YXRlLCBub25HcmVlZHlUcnlQYXJlbnRoZXNlcywgbGFiZWwoKSk7Ci0KLSAgICAgICAgICAg
IHN0YXRlLnNldEp1bXBMaXN0VG9QcmlvclBhcmVuKCZwYXJlbnRoZXNlc1RhaWwtPm1fYWZ0ZXJC
YWNrdHJhY2tKdW1wcyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHBhcmVudGhlc2VzU3Rh
dGUuZ2V0QmFja3RyYWNrRGVzdGluYXRpb24oKS5jbGVhcigpOwotCi0gICAgICAgICAgICBpZiAo
dGVybS5xdWFudGl0eVR5cGUgPT0gUXVhbnRpZmllck5vbkdyZWVkeSkKLSAgICAgICAgICAgICAg
ICBub25HcmVlZHlTa2lwUGFyZW50aGVzZXMubGluayh0aGlzKTsKLSAgICAgICAgfQorICAgICAg
ICBiYWNrdHJhY2tUZXJtRGVmYXVsdChvcEluZGV4KTsKICAgICB9CiAKLSAgICB2b2lkIGdlbmVy
YXRlUGFyZW50aGVzZXNHcmVlZHlOb0JhY2t0cmFjayhUZXJtR2VuZXJhdGlvblN0YXRlJiBzdGF0
ZSkKKyAgICB2b2lkIGdlbmVyYXRlQ2hhcmFjdGVyQ2xhc3NHcmVlZHkoc2l6ZV90IG9wSW5kZXgp
CiAgICAgewotICAgICAgICBQYXR0ZXJuVGVybSYgcGFyZW50aGVzZXNUZXJtID0gc3RhdGUudGVy
bSgpOwotICAgICAgICBQYXR0ZXJuRGlzanVuY3Rpb24qIGRpc2p1bmN0aW9uID0gcGFyZW50aGVz
ZXNUZXJtLnBhcmVudGhlc2VzLmRpc2p1bmN0aW9uOwotICAgICAgICBBU1NFUlQocGFyZW50aGVz
ZXNUZXJtLnR5cGUgPT0gUGF0dGVyblRlcm06OlR5cGVQYXJlbnRoZXNlc1N1YnBhdHRlcm4pOwot
ICAgICAgICBBU1NFUlQocGFyZW50aGVzZXNUZXJtLnF1YW50aXR5Q291bnQgIT0gMSk7IC8vIEhh
bmRsZWQgYnkgZ2VuZXJhdGVQYXJlbnRoZXNlc1NpbmdsZS4KLQotICAgICAgICBUZXJtR2VuZXJh
dGlvblN0YXRlIHBhcmVudGhlc2VzU3RhdGUoZGlzanVuY3Rpb24sIHN0YXRlLmNoZWNrZWRUb3Rh
bCk7Ci0KLSAgICAgICAgTGFiZWwgbWF0Y2hBZ2Fpbih0aGlzKTsKLQotICAgICAgICBzdG9yZVRv
RnJhbWUoaW5kZXgsIHBhcmVudGhlc2VzVGVybS5mcmFtZUxvY2F0aW9uKTsgLy8gU2F2ZSB0aGUg
Y3VycmVudCBpbmRleCB0byBjaGVjayBmb3IgemVybyBsZW4gbWF0Y2hlcyBsYXRlci4KKyAgICAg
ICAgWWFyck9wJiBvcCA9IG1fb3BzW29wSW5kZXhdOworICAgICAgICBQYXR0ZXJuVGVybSogdGVy
bSA9IG9wLm1fdGVybTsKIAotICAgICAgICBmb3IgKHBhcmVudGhlc2VzU3RhdGUucmVzZXRBbHRl
cm5hdGl2ZSgpOyBwYXJlbnRoZXNlc1N0YXRlLmFsdGVybmF0aXZlVmFsaWQoKTsgcGFyZW50aGVz
ZXNTdGF0ZS5uZXh0QWx0ZXJuYXRpdmUoKSkgeworICAgICAgICBjb25zdCBSZWdpc3RlcklEIGNo
YXJhY3RlciA9IHJlZ1QwOworICAgICAgICBjb25zdCBSZWdpc3RlcklEIGNvdW50UmVnaXN0ZXIg
PSByZWdUMTsKIAotICAgICAgICAgICAgUGF0dGVybkFsdGVybmF0aXZlKiBhbHRlcm5hdGl2ZSA9
IHBhcmVudGhlc2VzU3RhdGUuYWx0ZXJuYXRpdmUoKTsKLSAgICAgICAgICAgIG9wdGltaXplQWx0
ZXJuYXRpdmUoYWx0ZXJuYXRpdmUpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgY291
bnRSZWdpc3Rlcik7CiAKLSAgICAgICAgICAgIGludCBjb3VudFRvQ2hlY2sgPSBhbHRlcm5hdGl2
ZS0+bV9taW5pbXVtU2l6ZTsKLSAgICAgICAgICAgIGlmIChjb3VudFRvQ2hlY2spIHsKLSAgICAg
ICAgICAgICAgICBwYXJlbnRoZXNlc1N0YXRlLmFkZEJhY2t0cmFja0p1bXAoanVtcElmTm9BdmFp
bGFibGVJbnB1dChjb3VudFRvQ2hlY2spKTsKLSAgICAgICAgICAgICAgICBwYXJlbnRoZXNlc1N0
YXRlLmNoZWNrZWRUb3RhbCArPSBjb3VudFRvQ2hlY2s7Ci0gICAgICAgICAgICB9CisgICAgICAg
IEp1bXBMaXN0IGZhaWx1cmVzOworICAgICAgICBMYWJlbCBsb29wKHRoaXMpOworICAgICAgICBm
YWlsdXJlcy5hcHBlbmQoYXRFbmRPZklucHV0KCkpOwogCi0gICAgICAgICAgICBmb3IgKHBhcmVu
dGhlc2VzU3RhdGUucmVzZXRUZXJtKCk7IHBhcmVudGhlc2VzU3RhdGUudGVybVZhbGlkKCk7IHBh
cmVudGhlc2VzU3RhdGUubmV4dFRlcm0oKSkKLSAgICAgICAgICAgICAgICBnZW5lcmF0ZVRlcm0o
cGFyZW50aGVzZXNTdGF0ZSk7CisgICAgICAgIGlmICh0ZXJtLT5pbnZlcnQoKSkgeworICAgICAg
ICAgICAgcmVhZENoYXJhY3Rlcih0ZXJtLT5pbnB1dFBvc2l0aW9uIC0gbV9jaGVja2VkLCBjaGFy
YWN0ZXIpOworICAgICAgICAgICAgbWF0Y2hDaGFyYWN0ZXJDbGFzcyhjaGFyYWN0ZXIsIGZhaWx1
cmVzLCB0ZXJtLT5jaGFyYWN0ZXJDbGFzcyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBKdW1wTGlzdCBtYXRjaERlc3Q7CisgICAgICAgICAgICByZWFkQ2hhcmFjdGVyKHRlcm0tPmlu
cHV0UG9zaXRpb24gLSBtX2NoZWNrZWQsIGNoYXJhY3Rlcik7CisgICAgICAgICAgICBtYXRjaENo
YXJhY3RlckNsYXNzKGNoYXJhY3RlciwgbWF0Y2hEZXN0LCB0ZXJtLT5jaGFyYWN0ZXJDbGFzcyk7
CisgICAgICAgICAgICBmYWlsdXJlcy5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgICAgIG1hdGNo
RGVzdC5saW5rKHRoaXMpOworICAgICAgICB9CiAKLSAgICAgICAgICAgIC8vIElmIHdlIGdldCBo
ZXJlLCB3ZSBtYXRjaGVkISBJZiB0aGUgaW5kZXggYWR2YW5jZWQgdGhlbiB0cnkgdG8gbWF0Y2gg
bW9yZSBzaW5jZSBsaW1pdCBpc24ndCBzdXBwb3J0ZWQgeWV0LgotICAgICAgICAgICAgYnJhbmNo
MzIoTm90RXF1YWwsIGluZGV4LCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCAocGFyZW50
aGVzZXNUZXJtLmZyYW1lTG9jYXRpb24gKiBzaXplb2Yodm9pZCopKSksIG1hdGNoQWdhaW4pOwor
ICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIGNvdW50UmVnaXN0ZXIpOworICAgICAgICBh
ZGQzMihUcnVzdGVkSW1tMzIoMSksIGluZGV4KTsKKyAgICAgICAgaWYgKHRlcm0tPnF1YW50aXR5
Q291bnQgIT0gcXVhbnRpZnlJbmZpbml0ZSkgeworICAgICAgICAgICAgYnJhbmNoMzIoTm90RXF1
YWwsIGNvdW50UmVnaXN0ZXIsIEltbTMyKHRlcm0tPnF1YW50aXR5Q291bnQpKS5saW5rVG8obG9v
cCwgdGhpcyk7CisgICAgICAgICAgICBmYWlsdXJlcy5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICBqdW1wKGxvb3ApOwogCi0gICAgICAgICAgICAvLyBJZiB3ZSBn
ZXQgaGVyZSB3ZSBtYXRjaGVkLCBidXQgd2UgbWF0Y2hlZCAiIiAtIGNhbm5vdCBhY2NlcHQgdGhp
cyBhbHRlcm5hdGl2ZSBhcyBpcywgc28gZWl0aGVyIGJhY2t0cmFjaywKLSAgICAgICAgICAgIC8v
IG9yIGZhbGwgdGhyb3VnaCB0byB0cnkgdGhlIG5leHQgYWx0ZXJuYXRpdmUgaWYgbm8gYmFja3Ry
YWNrIGlzIGF2YWlsYWJsZS4KLSAgICAgICAgICAgIHBhcmVudGhlc2VzU3RhdGUucGxhbnRKdW1w
VG9CYWNrdHJhY2tJZkV4aXN0cyh0aGlzKTsKKyAgICAgICAgZmFpbHVyZXMubGluayh0aGlzKTsK
KyAgICAgICAgb3AubV9yZWVudHJ5ID0gbGFiZWwoKTsKIAotICAgICAgICAgICAgcGFyZW50aGVz
ZXNTdGF0ZS5saW5rQWx0ZXJuYXRpdmVCYWNrdHJhY2tzKHRoaXMpOworICAgICAgICBzdG9yZVRv
RnJhbWUoY291bnRSZWdpc3RlciwgdGVybS0+ZnJhbWVMb2NhdGlvbik7CisgICAgfQorICAgIHZv
aWQgYmFja3RyYWNrQ2hhcmFjdGVyQ2xhc3NHcmVlZHkoc2l6ZV90IG9wSW5kZXgpCisgICAgewor
ICAgICAgICBZYXJyT3AmIG9wID0gbV9vcHNbb3BJbmRleF07CisgICAgICAgIFBhdHRlcm5UZXJt
KiB0ZXJtID0gb3AubV90ZXJtOwogCi0gICAgICAgICAgICAvLyBXZSBnZXQgaGVyZSBpZiB0aGUg
YWx0ZXJuYXRpdmUgZmFpbHMgdG8gbWF0Y2ggLSBmYWxsIHRocm91Z2ggdG8gdGhlIG5leHQgaXRl
cmF0aW9uLCBvciBvdXQgb2YgdGhlIGxvb3AuCisgICAgICAgIGNvbnN0IFJlZ2lzdGVySUQgY291
bnRSZWdpc3RlciA9IHJlZ1QxOwogCi0gICAgICAgICAgICBpZiAoY291bnRUb0NoZWNrKSB7Ci0g
ICAgICAgICAgICAgICAgc3ViMzIoSW1tMzIoY291bnRUb0NoZWNrKSwgaW5kZXgpOwotICAgICAg
ICAgICAgICAgIHBhcmVudGhlc2VzU3RhdGUuY2hlY2tlZFRvdGFsIC09IGNvdW50VG9DaGVjazsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmxp
bmsodGhpcyk7CiAKLSAgICAgICAgLy8gSWYgdGhlIGxhc3QgYWx0ZXJuYXRpdmUgZmFsbHMgdGhy
b3VnaCB0byBoZXJlLCB3ZSBoYXZlIGEgZmFpbGVkIG1hdGNoLi4uCi0gICAgICAgIC8vIFdoaWNo
IG1lYW5zIHRoYXQgd2UgbWF0Y2ggd2hhdGV2ZXIgd2UgaGF2ZSBtYXRjaGVkIHVwIHRvIHRoaXMg
cG9pbnQgKGV2ZW4gaWYgbm90aGluZykuCisgICAgICAgIGxvYWRGcm9tRnJhbWUodGVybS0+ZnJh
bWVMb2NhdGlvbiwgY291bnRSZWdpc3Rlcik7CisgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUu
YXBwZW5kKGJyYW5jaFRlc3QzMihaZXJvLCBjb3VudFJlZ2lzdGVyKSk7CisgICAgICAgIHN1YjMy
KFRydXN0ZWRJbW0zMigxKSwgY291bnRSZWdpc3Rlcik7CisgICAgICAgIHN1YjMyKFRydXN0ZWRJ
bW0zMigxKSwgaW5kZXgpOworICAgICAgICBqdW1wKG9wLm1fcmVlbnRyeSk7CiAgICAgfQogCi0g
ICAgdm9pZCBnZW5lcmF0ZVBhcmVudGhldGljYWxBc3NlcnRpb24oVGVybUdlbmVyYXRpb25TdGF0
ZSYgc3RhdGUpCisgICAgdm9pZCBnZW5lcmF0ZUNoYXJhY3RlckNsYXNzTm9uR3JlZWR5KHNpemVf
dCBvcEluZGV4KQogICAgIHsKLSAgICAgICAgUGF0dGVyblRlcm0mIHRlcm0gPSBzdGF0ZS50ZXJt
KCk7Ci0gICAgICAgIFBhdHRlcm5EaXNqdW5jdGlvbiogZGlzanVuY3Rpb24gPSB0ZXJtLnBhcmVu
dGhlc2VzLmRpc2p1bmN0aW9uOwotICAgICAgICBBU1NFUlQodGVybS5xdWFudGl0eUNvdW50ID09
IDEpOwotICAgICAgICBBU1NFUlQodGVybS5xdWFudGl0eVR5cGUgPT0gUXVhbnRpZmllckZpeGVk
Q291bnQpOwotCi0gICAgICAgIHVuc2lnbmVkIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiA9IHRl
cm0uZnJhbWVMb2NhdGlvbjsKLSAgICAgICAgdW5zaWduZWQgYWx0ZXJuYXRpdmVGcmFtZUxvY2F0
aW9uID0gcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICsgWWFyclN0YWNrU3BhY2VGb3JCYWNrVHJh
Y2tJbmZvUGFyZW50aGV0aWNhbEFzc2VydGlvbjsKKyAgICAgICAgWWFyck9wJiBvcCA9IG1fb3Bz
W29wSW5kZXhdOworICAgICAgICBQYXR0ZXJuVGVybSogdGVybSA9IG9wLm1fdGVybTsKIAotICAg
ICAgICBpbnQgY291bnRDaGVja2VkQWZ0ZXJBc3NlcnRpb24gPSBzdGF0ZS5jaGVja2VkVG90YWwg
LSB0ZXJtLmlucHV0UG9zaXRpb247Ci0KLSAgICAgICAgaWYgKHRlcm0uaW52ZXJ0KCkpIHsKLSAg
ICAgICAgICAgIC8vIEludmVydGVkIGNhc2UKLSAgICAgICAgICAgIHN0b3JlVG9GcmFtZShpbmRl
eCwgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uKTsKKyAgICAgICAgY29uc3QgUmVnaXN0ZXJJRCBj
b3VudFJlZ2lzdGVyID0gcmVnVDE7CiAKLSAgICAgICAgICAgIHN0YXRlLmNoZWNrZWRUb3RhbCAt
PSBjb3VudENoZWNrZWRBZnRlckFzc2VydGlvbjsKLSAgICAgICAgICAgIGlmIChjb3VudENoZWNr
ZWRBZnRlckFzc2VydGlvbikKLSAgICAgICAgICAgICAgICBzdWIzMihJbW0zMihjb3VudENoZWNr
ZWRBZnRlckFzc2VydGlvbiksIGluZGV4KTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCks
IGNvdW50UmVnaXN0ZXIpOworICAgICAgICBvcC5tX3JlZW50cnkgPSBsYWJlbCgpOworICAgICAg
ICBzdG9yZVRvRnJhbWUoY291bnRSZWdpc3RlciwgdGVybS0+ZnJhbWVMb2NhdGlvbik7CisgICAg
fQorICAgIHZvaWQgYmFja3RyYWNrQ2hhcmFjdGVyQ2xhc3NOb25HcmVlZHkoc2l6ZV90IG9wSW5k
ZXgpCisgICAgeworICAgICAgICBZYXJyT3AmIG9wID0gbV9vcHNbb3BJbmRleF07CisgICAgICAg
IFBhdHRlcm5UZXJtKiB0ZXJtID0gb3AubV90ZXJtOwogCi0gICAgICAgICAgICBUZXJtR2VuZXJh
dGlvblN0YXRlIHBhcmVudGhlc2VzU3RhdGUoZGlzanVuY3Rpb24sIHN0YXRlLmNoZWNrZWRUb3Rh
bCk7Ci0gICAgICAgICAgICBnZW5lcmF0ZVBhcmVudGhlc2VzRGlzanVuY3Rpb24oc3RhdGUudGVy
bSgpLCBwYXJlbnRoZXNlc1N0YXRlLCBhbHRlcm5hdGl2ZUZyYW1lTG9jYXRpb24pOwotICAgICAg
ICAgICAgLy8gU3VjY2VzcyEgLSB3aGljaCBtZWFucyAtIEZhaWwhCi0gICAgICAgICAgICBsb2Fk
RnJvbUZyYW1lKHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiwgaW5kZXgpOwotICAgICAgICAgICAg
c3RhdGUuanVtcFRvQmFja3RyYWNrKHRoaXMpOworICAgICAgICBjb25zdCBSZWdpc3RlcklEIGNo
YXJhY3RlciA9IHJlZ1QwOworICAgICAgICBjb25zdCBSZWdpc3RlcklEIGNvdW50UmVnaXN0ZXIg
PSByZWdUMTsKIAotICAgICAgICAgICAgLy8gQW5kIGZhaWwgbWVhbnMgc3VjY2Vzcy4KLSAgICAg
ICAgICAgIHBhcmVudGhlc2VzU3RhdGUubGlua0FsdGVybmF0aXZlQmFja3RyYWNrcyh0aGlzKTsK
KyAgICAgICAgSnVtcExpc3Qgbm9uR3JlZWR5RmFpbHVyZXM7CiAKLSAgICAgICAgICAgIGxvYWRG
cm9tRnJhbWUocGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uLCBpbmRleCk7CisgICAgICAgIG1fYmFj
a3RyYWNraW5nU3RhdGUubGluayh0aGlzKTsKIAotICAgICAgICAgICAgc3RhdGUuY2hlY2tlZFRv
dGFsICs9IGNvdW50Q2hlY2tlZEFmdGVyQXNzZXJ0aW9uOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgLy8gTm9ybWFsIGNhc2UKLSAgICAgICAgICAgIHN0b3JlVG9GcmFtZShpbmRleCwg
cGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uKTsKKyAgICAgICAgTGFiZWwgYmFja3RyYWNrQmVnaW4o
dGhpcyk7CisgICAgICAgIGxvYWRGcm9tRnJhbWUodGVybS0+ZnJhbWVMb2NhdGlvbiwgY291bnRS
ZWdpc3Rlcik7CiAKLSAgICAgICAgICAgIHN0YXRlLmNoZWNrZWRUb3RhbCAtPSBjb3VudENoZWNr
ZWRBZnRlckFzc2VydGlvbjsKLSAgICAgICAgICAgIGlmIChjb3VudENoZWNrZWRBZnRlckFzc2Vy
dGlvbikKLSAgICAgICAgICAgICAgICBzdWIzMihJbW0zMihjb3VudENoZWNrZWRBZnRlckFzc2Vy
dGlvbiksIGluZGV4KTsKKyAgICAgICAgbm9uR3JlZWR5RmFpbHVyZXMuYXBwZW5kKGF0RW5kT2ZJ
bnB1dCgpKTsKKyAgICAgICAgbm9uR3JlZWR5RmFpbHVyZXMuYXBwZW5kKGJyYW5jaDMyKEVxdWFs
LCBjb3VudFJlZ2lzdGVyLCBJbW0zMih0ZXJtLT5xdWFudGl0eUNvdW50KSkpOwogCi0gICAgICAg
ICAgICBUZXJtR2VuZXJhdGlvblN0YXRlIHBhcmVudGhlc2VzU3RhdGUoZGlzanVuY3Rpb24sIHN0
YXRlLmNoZWNrZWRUb3RhbCk7Ci0gICAgICAgICAgICBnZW5lcmF0ZVBhcmVudGhlc2VzRGlzanVu
Y3Rpb24oc3RhdGUudGVybSgpLCBwYXJlbnRoZXNlc1N0YXRlLCBhbHRlcm5hdGl2ZUZyYW1lTG9j
YXRpb24pOwotICAgICAgICAgICAgLy8gU3VjY2VzcyEgLSB3aGljaCBtZWFucyAtIFN1Y2Nlc3Mh
Ci0gICAgICAgICAgICBsb2FkRnJvbUZyYW1lKHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiwgaW5k
ZXgpOwotICAgICAgICAgICAgSnVtcCBzdWNjZXNzID0ganVtcCgpOworICAgICAgICBKdW1wTGlz
dCBtYXRjaERlc3Q7CisgICAgICAgIHJlYWRDaGFyYWN0ZXIodGVybS0+aW5wdXRQb3NpdGlvbiAt
IG1fY2hlY2tlZCwgY2hhcmFjdGVyKTsKKyAgICAgICAgbWF0Y2hDaGFyYWN0ZXJDbGFzcyhjaGFy
YWN0ZXIsIG1hdGNoRGVzdCwgdGVybS0+Y2hhcmFjdGVyQ2xhc3MpOwogCi0gICAgICAgICAgICBw
YXJlbnRoZXNlc1N0YXRlLmxpbmtBbHRlcm5hdGl2ZUJhY2t0cmFja3ModGhpcyk7CisgICAgICAg
IGlmICh0ZXJtLT5pbnZlcnQoKSkKKyAgICAgICAgICAgIG5vbkdyZWVkeUZhaWx1cmVzLmFwcGVu
ZChtYXRjaERlc3QpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG5vbkdyZWVkeUZhaWx1
cmVzLmFwcGVuZChqdW1wKCkpOworICAgICAgICAgICAgbWF0Y2hEZXN0LmxpbmsodGhpcyk7Cisg
ICAgICAgIH0KIAotICAgICAgICAgICAgbG9hZEZyb21GcmFtZShwYXJlbnRoZXNlc0ZyYW1lTG9j
YXRpb24sIGluZGV4KTsKLSAgICAgICAgICAgIHN0YXRlLmp1bXBUb0JhY2t0cmFjayh0aGlzKTsK
KyAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBjb3VudFJlZ2lzdGVyKTsKKyAgICAgICAg
YWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBpbmRleCk7CiAKLSAgICAgICAgICAgIHN1Y2Nlc3MubGlu
ayh0aGlzKTsKKyAgICAgICAganVtcChvcC5tX3JlZW50cnkpOwogCi0gICAgICAgICAgICBzdGF0
ZS5jaGVja2VkVG90YWwgKz0gY291bnRDaGVja2VkQWZ0ZXJBc3NlcnRpb247Ci0gICAgICAgIH0K
KyAgICAgICAgbm9uR3JlZWR5RmFpbHVyZXMubGluayh0aGlzKTsKKyAgICAgICAgc3ViMzIoY291
bnRSZWdpc3RlciwgaW5kZXgpOworICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmZhbGx0aHJv
dWdoKCk7CiAgICAgfQogCi0gICAgdm9pZCBnZW5lcmF0ZVRlcm0oVGVybUdlbmVyYXRpb25TdGF0
ZSYgc3RhdGUpCisgICAgLy8gQ29kZSBnZW5lcmF0aW9uL2JhY2t0cmFja2luZyBmb3Igc2ltcGxl
IHRlcm1zCisgICAgLy8gKHBhdHRlcm4gY2hhcmFjdGVycywgY2hhcmFjdGVyIGNsYXNzZXMsIGFu
ZCBhc3NlcnRpb25zKS4KKyAgICAvLyBUaGVzZSBtZXRob2RzIGZhcm0gb3V0IHdvcmsgdG8gdGhl
IHNldCBvZiBmdW5jdGlvbnMgYWJvdmUuCisgICAgdm9pZCBnZW5lcmF0ZVRlcm0oc2l6ZV90IG9w
SW5kZXgpCiAgICAgewotICAgICAgICBQYXR0ZXJuVGVybSYgdGVybSA9IHN0YXRlLnRlcm0oKTsK
KyAgICAgICAgWWFyck9wJiBvcCA9IG1fb3BzW29wSW5kZXhdOworICAgICAgICBQYXR0ZXJuVGVy
bSogdGVybSA9IG9wLm1fdGVybTsKKworICAgICAgICBzd2l0Y2ggKHRlcm0tPnR5cGUpIHsKKyAg
ICAgICAgY2FzZSBQYXR0ZXJuVGVybTo6VHlwZVBhdHRlcm5DaGFyYWN0ZXI6CisgICAgICAgICAg
ICBzd2l0Y2ggKHRlcm0tPnF1YW50aXR5VHlwZSkgeworICAgICAgICAgICAgY2FzZSBRdWFudGlm
aWVyRml4ZWRDb3VudDoKKyAgICAgICAgICAgICAgICBpZiAodGVybS0+cXVhbnRpdHlDb3VudCA9
PSAxKQorICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZVBhdHRlcm5DaGFyYWN0ZXJPbmNlKG9w
SW5kZXgpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZ2VuZXJh
dGVQYXR0ZXJuQ2hhcmFjdGVyRml4ZWQob3BJbmRleCk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIFF1YW50aWZpZXJHcmVlZHk6CisgICAgICAgICAgICAgICAgZ2Vu
ZXJhdGVQYXR0ZXJuQ2hhcmFjdGVyR3JlZWR5KG9wSW5kZXgpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSBRdWFudGlmaWVyTm9uR3JlZWR5OgorICAgICAgICAgICAg
ICAgIGdlbmVyYXRlUGF0dGVybkNoYXJhY3Rlck5vbkdyZWVkeShvcEluZGV4KTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgIGNhc2UgUGF0dGVyblRlcm06OlR5cGVDaGFyYWN0ZXJDbGFzczoKKyAgICAgICAgICAgIHN3
aXRjaCAodGVybS0+cXVhbnRpdHlUeXBlKSB7CisgICAgICAgICAgICBjYXNlIFF1YW50aWZpZXJG
aXhlZENvdW50OgorICAgICAgICAgICAgICAgIGlmICh0ZXJtLT5xdWFudGl0eUNvdW50ID09IDEp
CisgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlQ2hhcmFjdGVyQ2xhc3NPbmNlKG9wSW5kZXgp
OworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVDaGFy
YWN0ZXJDbGFzc0ZpeGVkKG9wSW5kZXgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBRdWFudGlmaWVyR3JlZWR5OgorICAgICAgICAgICAgICAgIGdlbmVyYXRlQ2hh
cmFjdGVyQ2xhc3NHcmVlZHkob3BJbmRleCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIFF1YW50aWZpZXJOb25HcmVlZHk6CisgICAgICAgICAgICAgICAgZ2VuZXJh
dGVDaGFyYWN0ZXJDbGFzc05vbkdyZWVkeShvcEluZGV4KTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIHN3aXRjaCAo
dGVybS50eXBlKSB7CiAgICAgICAgIGNhc2UgUGF0dGVyblRlcm06OlR5cGVBc3NlcnRpb25CT0w6
Ci0gICAgICAgICAgICBnZW5lcmF0ZUFzc2VydGlvbkJPTChzdGF0ZSk7CisgICAgICAgICAgICBn
ZW5lcmF0ZUFzc2VydGlvbkJPTChvcEluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAg
ICAgIGNhc2UgUGF0dGVyblRlcm06OlR5cGVBc3NlcnRpb25FT0w6Ci0gICAgICAgICAgICBnZW5l
cmF0ZUFzc2VydGlvbkVPTChzdGF0ZSk7CisgICAgICAgICAgICBnZW5lcmF0ZUFzc2VydGlvbkVP
TChvcEluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgUGF0dGVyblRl
cm06OlR5cGVBc3NlcnRpb25Xb3JkQm91bmRhcnk6Ci0gICAgICAgICAgICBnZW5lcmF0ZUFzc2Vy
dGlvbldvcmRCb3VuZGFyeShzdGF0ZSk7CisgICAgICAgICAgICBnZW5lcmF0ZUFzc2VydGlvbldv
cmRCb3VuZGFyeShvcEluZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Ug
UGF0dGVyblRlcm06OlR5cGVGb3J3YXJkUmVmZXJlbmNlOgorICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgY2FzZSBQYXR0ZXJuVGVybTo6VHlwZVBhcmVudGhlc2VzU3VicGF0dGVybjoKKyAg
ICAgICAgY2FzZSBQYXR0ZXJuVGVybTo6VHlwZVBhcmVudGhldGljYWxBc3NlcnRpb246CisgICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgY2FzZSBQYXR0ZXJuVGVybTo6
VHlwZUJhY2tSZWZlcmVuY2U6CisgICAgICAgICAgICBtX3Nob3VsZEZhbGxCYWNrID0gdHJ1ZTsK
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIHZvaWQgYmFja3RyYWNr
VGVybShzaXplX3Qgb3BJbmRleCkKKyAgICB7CisgICAgICAgIFlhcnJPcCYgb3AgPSBtX29wc1tv
cEluZGV4XTsKKyAgICAgICAgUGF0dGVyblRlcm0qIHRlcm0gPSBvcC5tX3Rlcm07CiAKKyAgICAg
ICAgc3dpdGNoICh0ZXJtLT50eXBlKSB7CiAgICAgICAgIGNhc2UgUGF0dGVyblRlcm06OlR5cGVQ
YXR0ZXJuQ2hhcmFjdGVyOgotICAgICAgICAgICAgc3dpdGNoICh0ZXJtLnF1YW50aXR5VHlwZSkg
eworICAgICAgICAgICAgc3dpdGNoICh0ZXJtLT5xdWFudGl0eVR5cGUpIHsKICAgICAgICAgICAg
IGNhc2UgUXVhbnRpZmllckZpeGVkQ291bnQ6Ci0gICAgICAgICAgICAgICAgaWYgKHRlcm0ucXVh
bnRpdHlDb3VudCA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5pc1Npbmds
ZVBhdHRlcm5DaGFyYWN0ZXJMb29rYWhlYWRUZXJtKCkgJiYgKHN0YXRlLmxvb2thaGVhZFRlcm0o
KS5pbnB1dFBvc2l0aW9uID09ICh0ZXJtLmlucHV0UG9zaXRpb24gKyAxKSkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGdlbmVyYXRlUGF0dGVybkNoYXJhY3RlclBhaXIoc3RhdGUpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgc3RhdGUubmV4dFRlcm0oKTsKLSAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZVBhdHRlcm5DaGFyYWN0
ZXJTaW5nbGUoc3RhdGUpOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAg
ICAgICBnZW5lcmF0ZVBhdHRlcm5DaGFyYWN0ZXJGaXhlZChzdGF0ZSk7CisgICAgICAgICAgICAg
ICAgaWYgKHRlcm0tPnF1YW50aXR5Q291bnQgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgYmFj
a3RyYWNrUGF0dGVybkNoYXJhY3Rlck9uY2Uob3BJbmRleCk7CisgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICBiYWNrdHJhY2tQYXR0ZXJuQ2hhcmFjdGVyRml4ZWQob3BJ
bmRleCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFF1YW50aWZp
ZXJHcmVlZHk6Ci0gICAgICAgICAgICAgICAgZ2VuZXJhdGVQYXR0ZXJuQ2hhcmFjdGVyR3JlZWR5
KHN0YXRlKTsKKyAgICAgICAgICAgICAgICBiYWNrdHJhY2tQYXR0ZXJuQ2hhcmFjdGVyR3JlZWR5
KG9wSW5kZXgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBRdWFu
dGlmaWVyTm9uR3JlZWR5OgotICAgICAgICAgICAgICAgIGdlbmVyYXRlUGF0dGVybkNoYXJhY3Rl
ck5vbkdyZWVkeShzdGF0ZSk7CisgICAgICAgICAgICAgICAgYmFja3RyYWNrUGF0dGVybkNoYXJh
Y3Rlck5vbkdyZWVkeShvcEluZGV4KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgUGF0dGVyblRlcm06OlR5
cGVDaGFyYWN0ZXJDbGFzczoKLSAgICAgICAgICAgIHN3aXRjaCAodGVybS5xdWFudGl0eVR5cGUp
IHsKKyAgICAgICAgICAgIHN3aXRjaCAodGVybS0+cXVhbnRpdHlUeXBlKSB7CiAgICAgICAgICAg
ICBjYXNlIFF1YW50aWZpZXJGaXhlZENvdW50OgotICAgICAgICAgICAgICAgIGlmICh0ZXJtLnF1
YW50aXR5Q291bnQgPT0gMSkKLSAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVDaGFyYWN0ZXJD
bGFzc1NpbmdsZShzdGF0ZSk7CisgICAgICAgICAgICAgICAgaWYgKHRlcm0tPnF1YW50aXR5Q291
bnQgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgYmFja3RyYWNrQ2hhcmFjdGVyQ2xhc3NPbmNl
KG9wSW5kZXgpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZ2Vu
ZXJhdGVDaGFyYWN0ZXJDbGFzc0ZpeGVkKHN0YXRlKTsKKyAgICAgICAgICAgICAgICAgICAgYmFj
a3RyYWNrQ2hhcmFjdGVyQ2xhc3NGaXhlZChvcEluZGV4KTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIGNhc2UgUXVhbnRpZmllckdyZWVkeToKLSAgICAgICAgICAgICAgICBn
ZW5lcmF0ZUNoYXJhY3RlckNsYXNzR3JlZWR5KHN0YXRlKTsKKyAgICAgICAgICAgICAgICBiYWNr
dHJhY2tDaGFyYWN0ZXJDbGFzc0dyZWVkeShvcEluZGV4KTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIGNhc2UgUXVhbnRpZmllck5vbkdyZWVkeToKLSAgICAgICAgICAgICAg
ICBnZW5lcmF0ZUNoYXJhY3RlckNsYXNzTm9uR3JlZWR5KHN0YXRlKTsKKyAgICAgICAgICAgICAg
ICBiYWNrdHJhY2tDaGFyYWN0ZXJDbGFzc05vbkdyZWVkeShvcEluZGV4KTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAg
IGNhc2UgUGF0dGVyblRlcm06OlR5cGVCYWNrUmVmZXJlbmNlOgotICAgICAgICAgICAgbV9zaG91
bGRGYWxsQmFjayA9IHRydWU7CisgICAgICAgIGNhc2UgUGF0dGVyblRlcm06OlR5cGVBc3NlcnRp
b25CT0w6CisgICAgICAgICAgICBiYWNrdHJhY2tBc3NlcnRpb25CT0wob3BJbmRleCk7CiAgICAg
ICAgICAgICBicmVhazsKIAotICAgICAgICBjYXNlIFBhdHRlcm5UZXJtOjpUeXBlRm9yd2FyZFJl
ZmVyZW5jZToKKyAgICAgICAgY2FzZSBQYXR0ZXJuVGVybTo6VHlwZUFzc2VydGlvbkVPTDoKKyAg
ICAgICAgICAgIGJhY2t0cmFja0Fzc2VydGlvbkVPTChvcEluZGV4KTsKICAgICAgICAgICAgIGJy
ZWFrOwogCi0gICAgICAgIGNhc2UgUGF0dGVyblRlcm06OlR5cGVQYXJlbnRoZXNlc1N1YnBhdHRl
cm46Ci0gICAgICAgICAgICBpZiAodGVybS5xdWFudGl0eUNvdW50ID09IDEgJiYgIXRlcm0ucGFy
ZW50aGVzZXMuaXNDb3B5KQotICAgICAgICAgICAgICAgIGdlbmVyYXRlUGFyZW50aGVzZXNTaW5n
bGUoc3RhdGUpOwotICAgICAgICAgICAgZWxzZSBpZiAodGVybS5wYXJlbnRoZXNlcy5pc1Rlcm1p
bmFsKQotICAgICAgICAgICAgICAgIGdlbmVyYXRlUGFyZW50aGVzZXNHcmVlZHlOb0JhY2t0cmFj
ayhzdGF0ZSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9zaG91bGRGYWxs
QmFjayA9IHRydWU7CisgICAgICAgIGNhc2UgUGF0dGVyblRlcm06OlR5cGVBc3NlcnRpb25Xb3Jk
Qm91bmRhcnk6CisgICAgICAgICAgICBiYWNrdHJhY2tBc3NlcnRpb25Xb3JkQm91bmRhcnkob3BJ
bmRleCk7CiAgICAgICAgICAgICBicmVhazsKIAorICAgICAgICBjYXNlIFBhdHRlcm5UZXJtOjpU
eXBlRm9yd2FyZFJlZmVyZW5jZToKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Ug
UGF0dGVyblRlcm06OlR5cGVQYXJlbnRoZXNlc1N1YnBhdHRlcm46CiAgICAgICAgIGNhc2UgUGF0
dGVyblRlcm06OlR5cGVQYXJlbnRoZXRpY2FsQXNzZXJ0aW9uOgotICAgICAgICAgICAgZ2VuZXJh
dGVQYXJlbnRoZXRpY2FsQXNzZXJ0aW9uKHN0YXRlKTsKKyAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICBjYXNlIFBhdHRlcm5UZXJtOjpUeXBlQmFja1JlZmVyZW5jZToK
KyAgICAgICAgICAgIG1fc2hvdWxkRmFsbEJhY2sgPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICB9CiAKLSAgICB2b2lkIGdlbmVyYXRlRGlzanVuY3Rpb24oUGF0dGVy
bkRpc2p1bmN0aW9uKiBkaXNqdW5jdGlvbikKKyAgICB2b2lkIGdlbmVyYXRlKCkKICAgICB7Ci0g
ICAgICAgIFRlcm1HZW5lcmF0aW9uU3RhdGUgc3RhdGUoZGlzanVuY3Rpb24sIDApOwotICAgICAg
ICBzdGF0ZS5yZXNldEFsdGVybmF0aXZlKCk7CisgICAgICAgIC8vIEZvcndhcmRzIGdlbmVyYXRl
IHRoZSBtYXRjaGluZyBjb2RlLgorICAgICAgICBBU1NFUlQobV9vcHMuc2l6ZSgpKTsKKyAgICAg
ICAgc2l6ZV90IG9wSW5kZXggPSAwOworCisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIFlhcnJP
cCYgb3AgPSBtX29wc1tvcEluZGV4XTsKKyAgICAgICAgICAgIHN3aXRjaCAob3AubV9vcCkgewor
CisgICAgICAgICAgICBjYXNlIE9wVGVybToKKyAgICAgICAgICAgICAgICBnZW5lcmF0ZVRlcm0o
b3BJbmRleCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgLy8gY2hlY2sgYXZh
aWxhYmlsaXR5IGZvciB0aGUgbmV4dCBhbHRlcm5hdGl2ZQotICAgICAgICBpbnQgY291bnRDaGVj
a2VkRm9yQ3VycmVudEFsdGVybmF0aXZlID0gMDsKLSAgICAgICAgaW50IGNvdW50VG9DaGVja0Zv
ckZpcnN0QWx0ZXJuYXRpdmUgPSAwOwotICAgICAgICBib29sIGhhc1Nob3J0ZXJBbHRlcm5hdGl2
ZXMgPSBmYWxzZTsKLSAgICAgICAgYm9vbCBzZXRSZXBlYXRBbHRlcm5hdGl2ZUxhYmVscyA9IGZh
bHNlOwotICAgICAgICBKdW1wTGlzdCBub3RFbm91Z2hJbnB1dEZvclByZXZpb3VzQWx0ZXJuYXRp
dmU7Ci0gICAgICAgIExhYmVsIGZpcnN0QWx0ZXJuYXRpdmU7Ci0gICAgICAgIExhYmVsIGZpcnN0
QWx0ZXJuYXRpdmVJbnB1dENoZWNrZWQ7CisgICAgICAgICAgICAvLyBPcEJvZHlBbHRlcm5hdGl2
ZUJlZ2luL05leHQvRW5kCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gVGhlc2Ugbm9k
ZXMgd3JhcCB0aGUgc2V0IG9mIGFsdGVybmF0aXZlcyBpbiB0aGUgYm9keSBvZiB0aGUgcmVndWxh
ciBleHByZXNzaW9uLgorICAgICAgICAgICAgLy8gVGhlcmUgbWF5IGJlIGVpdGhlciBvbmUgb3Ig
dHdvIGNoYWlucyBvZiBPcEJvZHlBbHRlcm5hdGl2ZSBub2Rlcywgb25lIHJlcHJlc2VudGluZwor
ICAgICAgICAgICAgLy8gdGhlICdvbmNlIHRocm91Z2gnIHNlcXVlbmNlIG9mIGFsdGVybmF0aXZl
cyAoaWYgYW55IGV4aXN0KSwgYW5kIG9uZSByZXByZXNlbnRpbmcKKyAgICAgICAgICAgIC8vIHRo
ZSByZXBlYXRpbmcgYWx0ZXJuYXRpdmVzIChhZ2FpbiwgaWYgYW55IGV4aXN0KS4KKyAgICAgICAg
ICAgIC8vCisgICAgICAgICAgICAvLyBVcG9uIG5vcm1hbCBlbnRyeSB0byB0aGUgQmVnaW4gYWx0
ZXJuYXRpdmUsIHdlIHdpbGwgY2hlY2sgdGhhdCBpbnB1dCBpcyBhdmFpbGFibGUuCisgICAgICAg
ICAgICAvLyBSZWVudHJ5IHRvIHRoZSBCZWdpbiBhbHRlcm5hdGl2ZSB3aWxsIHRha2UgcGxhY2Ug
YWZ0ZXIgdGhlIGNoZWNrIGhhcyB0YWtlbiBwbGFjZSwKKyAgICAgICAgICAgIC8vIGFuZCB3aWxs
IGFzc3VtZSB0aGF0IHRoZSBpbnB1dCBwb3NpdGlvbiBoYXMgYWxyZWFkeSBiZWVuIHByb2dyZXNz
ZWQgYXMgYXBwcm9wcmlhdGUuCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gRW50cnkg
dG8gc3Vic2VxdWVudCBOZXh0L0VuZCBhbHRlcm5hdGl2ZXMgb2NjdXJzIHdoZW4gdGhlIHByaW9y
IGFsdGVybmF0aXZlIGhhcworICAgICAgICAgICAgLy8gc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZCBh
IG1hdGNoIC0gcmV0dXJuIGEgc3VjY2VzcyBzdGF0ZSBmcm9tIEpJVCBjb2RlLgorICAgICAgICAg
ICAgLy8KKyAgICAgICAgICAgIC8vIE5leHQgYWx0ZXJuYXRpdmVzIGFsbG93IGZvciByZWVudHJ5
IG9wdGltaXplZCB0byBzdWl0IGJhY2t0cmFja2luZyBmcm9tIGl0cworICAgICAgICAgICAgLy8g
cHJlY2VkaW5nIGFsdGVybmF0aXZlLiBJdCBleHBlY3RzIHRoZSBpbnB1dCBwb3NpdGlvbiB0byBz
dGlsbCBiZSBzZXQgdG8gYSBwb3NpdGlvbgorICAgICAgICAgICAgLy8gYXBwcm9wcmlhdGUgdG8g
aXRzIHByZWRlY2Vzc29yLCBhbmQgaXQgd2lsbCBvbmx5IHBlcmZvcm0gYW4gaW5wdXQgY2hlY2sg
aWYgdGhlCisgICAgICAgICAgICAvLyBwcmVkZWNlc3NvciBoYWQgYSBtaW5pbXVtIHNpemUgbGVz
cyB0aGFuIGl0cyBvd24uCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gSW4gdGhlIGNh
c2UgJ29uY2UgdGhyb3VnaCcgZXhwcmVzc2lvbnMsIHRoZSBFbmQgbm9kZSB3aWxsIGxhc28gaGF2
ZSBhIHJlZW50cnkKKyAgICAgICAgICAgIC8vIHBvaW50IHRvIGp1bXAgdG8gd2hlbiB0aGUgbGFz
dCBhbHRlcm5hdGl2ZSBmYWlscy4gQWdhaW4sIHRoaXMgZXhwZWN0cyB0aGUgaW5wdXQKKyAgICAg
ICAgICAgIC8vIHBvc2l0aW9uIHRvIHN0aWxsIHJlZmxlY3QgdGhhdCBleHBlY3RlZCBieSB0aGUg
cHJpb3IgYWx0ZXJuYXRpdmUuCisgICAgICAgICAgICBjYXNlIE9wQm9keUFsdGVybmF0aXZlQmVn
aW46IHsKKyAgICAgICAgICAgICAgICBQYXR0ZXJuQWx0ZXJuYXRpdmUqIGFsdGVybmF0aXZlID0g
b3AubV9hbHRlcm5hdGl2ZTsKKworICAgICAgICAgICAgICAgIC8vIFVwb24gZW50cnkgYXQgdGhl
IGhlYWQgb2YgdGhlIHNldCBvZiBhbHRlcm5hdGl2ZXMsIGNoZWNrIGlmIGlucHV0IGlzIGF2YWls
YWJsZQorICAgICAgICAgICAgICAgIC8vIHRvIHJ1biB0aGUgZmlyc3QgYWx0ZXJuYXRpdmUuIChU
aGlzIHByb2dyZXNzZXMgdGhlIGlucHV0IHBvc2l0aW9uKS4KKyAgICAgICAgICAgICAgICBvcC5t
X2p1bXBzLmFwcGVuZChqdW1wSWZOb0F2YWlsYWJsZUlucHV0KGFsdGVybmF0aXZlLT5tX21pbmlt
dW1TaXplKSk7CisgICAgICAgICAgICAgICAgLy8gV2Ugd2lsbCByZWVudGVyIGFmdGVyIHRoZSBj
aGVjaywgYW5kIGFzc3VtZSB0aGUgaW5wdXQgcG9zaXRpb24gdG8gaGF2ZSBiZWVuCisgICAgICAg
ICAgICAgICAgLy8gc2V0IGFzIGFwcHJvcHJpYXRlIHRvIHRoaXMgYWx0ZXJuYXRpdmUuCisgICAg
ICAgICAgICAgICAgb3AubV9yZWVudHJ5ID0gbGFiZWwoKTsKIAotICAgICAgICAvLyBUaGUgbGFi
ZWwgJ2ZpcnN0QWx0ZXJuYXRpdmUnIGlzIHVzZWQgdG8gcGxhbnQgYSBjaGVjayB0byBzZWUgaWYg
dGhlcmUgaXMgCi0gICAgICAgIC8vIHN1ZmZpY2llbnQgaW5wdXQgYXZhaWxhYmxlIHRvIHJ1biB0
aGUgZmlyc3QgcmVwZWF0aW5nIGFsdGVybmF0aXZlLgotICAgICAgICAvLyBUaGUgbGFiZWwgJ2Zp
cnN0QWx0ZXJuYXRpdmVJbnB1dENoZWNrZWQnIHdpbGwganVtcCBkaXJlY3RseSB0byBtYXRjaGlu
ZyAKLSAgICAgICAgLy8gdGhlIGZpcnN0IHJlcGVhdGluZyBhbHRlcm5hdGl2ZSBoYXZpbmcgc2tp
cHBlZCB0aGlzIGNoZWNrLgorICAgICAgICAgICAgICAgIG1fY2hlY2tlZCArPSBhbHRlcm5hdGl2
ZS0+bV9taW5pbXVtU2l6ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGNhc2UgT3BCb2R5QWx0ZXJuYXRpdmVOZXh0OgorICAgICAgICAgICAgY2Fz
ZSBPcEJvZHlBbHRlcm5hdGl2ZUVuZDogeworICAgICAgICAgICAgICAgIFBhdHRlcm5BbHRlcm5h
dGl2ZSogcHJpb3JBbHRlcm5hdGl2ZSA9IG1fb3BzW29wLm1fcHJldmlvdXNPcF0ubV9hbHRlcm5h
dGl2ZTsKKyAgICAgICAgICAgICAgICBQYXR0ZXJuQWx0ZXJuYXRpdmUqIGFsdGVybmF0aXZlID0g
b3AubV9hbHRlcm5hdGl2ZTsKKworICAgICAgICAgICAgICAgIC8vIElmIHdlIGdldCBoZXJlLCB0
aGUgcHJpb3IgYWx0ZXJuYXRpdmUgbWF0Y2hlZCAtIHJldHVybiBzdWNjZXNzLgorICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIC8vIEFkanVzdCB0aGUgc3RhY2sgcG9pbnRlciB0byBy
ZW1vdmUgdGhlIHBhdHRlcm4ncyBmcmFtZS4KKyAgICAgICAgICAgICAgICBpZiAobV9wYXR0ZXJu
Lm1fYm9keS0+bV9jYWxsRnJhbWVTaXplKQorICAgICAgICAgICAgICAgICAgICBhZGRQdHIoSW1t
MzIobV9wYXR0ZXJuLm1fYm9keS0+bV9jYWxsRnJhbWVTaXplICogc2l6ZW9mKHZvaWQqKSksIHN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAgICAgICAgICAgICAgIC8vIExvYWQgYXBwcm9wcmlh
dGUgdmFsdWVzIGludG8gdGhlIHJldHVybiByZWdpc3RlciBhbmQgdGhlIGZpcnN0IG91dHB1dAor
ICAgICAgICAgICAgICAgIC8vIHNsb3QsIGFuZCByZXR1cm4uIEluIHRoZSBjYXNlIG9mIHBhdHRl
cm4gd2l0aCBhIGZpeGVkIHNpemUsIHdlIHdpbGwKKyAgICAgICAgICAgICAgICAvLyBub3QgaGF2
ZSB5ZXQgc2V0IHRoZSB2YWx1ZSBpbiB0aGUgZmlyc3QgCisgICAgICAgICAgICAgICAgQVNTRVJU
KGluZGV4ICE9IHJldHVyblJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICBpZiAobV9wYXR0ZXJu
Lm1fYm9keS0+bV9oYXNGaXhlZFNpemUpIHsKKyAgICAgICAgICAgICAgICAgICAgbW92ZShpbmRl
eCwgcmV0dXJuUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgICAgICBpZiAocHJpb3JBbHRlcm5h
dGl2ZS0+bV9taW5pbXVtU2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1YjMyKEltbTMy
KHByaW9yQWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUpLCByZXR1cm5SZWdpc3Rlcik7CisgICAg
ICAgICAgICAgICAgICAgIHN0b3JlMzIocmV0dXJuUmVnaXN0ZXIsIG91dHB1dCk7CisgICAgICAg
ICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKG91dHB1
dCksIHJldHVyblJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICBzdG9yZTMyKGluZGV4LCBBZGRy
ZXNzKG91dHB1dCwgNCkpOworICAgICAgICAgICAgICAgIGdlbmVyYXRlUmV0dXJuKCk7CisKKwor
ICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGRpdmlkZSBiZXR3ZWVuIHRoZSB0YWlsIG9m
IHRoZSBwcmlvciBhbHRlcm5hdGl2ZSwgYWJvdmUsIGFuZAorICAgICAgICAgICAgICAgIC8vIHRo
ZSBoZWFkIG9mIHRoZSBzdWJzZXF1ZW50IGFsdGVybmF0aXZlLCBiZWxvdy4KKworCisgICAgICAg
ICAgICAgICAgaWYgKG9wLm1fb3AgPT0gT3BCb2R5QWx0ZXJuYXRpdmVOZXh0KSB7CisgICAgICAg
ICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIHJlZW50cnkgcG9pbnQgZm9yIHRoZSBOZXh0IGFs
dGVybmF0aXZlLiBXZSBleHBlY3QgYW55IGNvZGUKKyAgICAgICAgICAgICAgICAgICAgLy8gdGhh
dCBqdW1wcyBoZXJlIHRvIGRvIHNvIHdpdGggdGhlIGlucHV0IHBvc2l0aW9uIG1hdGNoaW5nIHRo
YXQgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIC8vIFBSSU9SIGFsdGVyYW5hdGl2ZSwgYW5k
IHdlIHdpbGwgb25seSBjaGVjayBpbnB1dCBhdmFpbGFiaWxpdHkgaWYgd2UKKyAgICAgICAgICAg
ICAgICAgICAgLy8gbmVlZCB0byBwcm9ncmVzcyBpdCBmb3J3YXJkcy4KKyAgICAgICAgICAgICAg
ICAgICAgb3AubV9yZWVudHJ5ID0gbGFiZWwoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlu
dCBkZWx0YSA9IGFsdGVybmF0aXZlLT5tX21pbmltdW1TaXplIC0gcHJpb3JBbHRlcm5hdGl2ZS0+
bV9taW5pbXVtU2l6ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYWRkMzIoSW1tMzIoZGVs
dGEpLCBpbmRleCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVsdGEgPiAwKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG9wLm1fanVtcHMuYXBwZW5kKGp1bXBJZk5vQXZhaWxh
YmxlSW5wdXQoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKG9wLm1fbmV4dE9wID09IG5vdEZvdW5kKSB7CisgICAgICAgICAgICAgICAgICAgIC8v
IFRoaXMgaXMgdGhlIHJlZW50cnkgcG9pbnQgZm9yIHRoZSBFbmQgb2YgJ29uY2UgdGhyb3VnaCcg
YWx0ZXJuYXRpdmVzLAorICAgICAgICAgICAgICAgICAgICAvLyBqdW1wZWQgdG8gd2hlbiB0aGUg
bGFzIGFsdGVybmF0aXZlIGZhaWxzIHRvIG1hdGNoLgorICAgICAgICAgICAgICAgICAgICBvcC5t
X3JlZW50cnkgPSBsYWJlbCgpOworICAgICAgICAgICAgICAgICAgICBzdWIzMihJbW0zMihwcmlv
ckFsdGVybmF0aXZlLT5tX21pbmltdW1TaXplKSwgaW5kZXgpOworICAgICAgICAgICAgICAgIH0K
IAotICAgICAgICBpZiAoc3RhdGUuYWx0ZXJuYXRpdmVWYWxpZCgpKSB7Ci0gICAgICAgICAgICBQ
YXR0ZXJuQWx0ZXJuYXRpdmUqIGFsdGVybmF0aXZlID0gc3RhdGUuYWx0ZXJuYXRpdmUoKTsKLSAg
ICAgICAgICAgIGlmICghYWx0ZXJuYXRpdmUtPm9uY2VUaHJvdWdoKCkpIHsKLSAgICAgICAgICAg
ICAgICBmaXJzdEFsdGVybmF0aXZlID0gTGFiZWwodGhpcyk7Ci0gICAgICAgICAgICAgICAgc2V0
UmVwZWF0QWx0ZXJuYXRpdmVMYWJlbHMgPSB0cnVlOworICAgICAgICAgICAgICAgIGlmIChvcC5t
X29wID09IE9wQm9keUFsdGVybmF0aXZlTmV4dCkKKyAgICAgICAgICAgICAgICAgICAgbV9jaGVj
a2VkICs9IGFsdGVybmF0aXZlLT5tX21pbmltdW1TaXplOworICAgICAgICAgICAgICAgIG1fY2hl
Y2tlZCAtPSBwcmlvckFsdGVybmF0aXZlLT5tX21pbmltdW1TaXplOworICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgY291bnRUb0NoZWNrRm9yRmlyc3RB
bHRlcm5hdGl2ZSA9IGFsdGVybmF0aXZlLT5tX21pbmltdW1TaXplOwotICAgICAgICAgICAgc3Rh
dGUuY2hlY2tlZFRvdGFsICs9IGNvdW50VG9DaGVja0ZvckZpcnN0QWx0ZXJuYXRpdmU7Ci0gICAg
ICAgICAgICBpZiAoY291bnRUb0NoZWNrRm9yRmlyc3RBbHRlcm5hdGl2ZSkKLSAgICAgICAgICAg
ICAgICBub3RFbm91Z2hJbnB1dEZvclByZXZpb3VzQWx0ZXJuYXRpdmUuYXBwZW5kKGp1bXBJZk5v
QXZhaWxhYmxlSW5wdXQoY291bnRUb0NoZWNrRm9yRmlyc3RBbHRlcm5hdGl2ZSkpOwotICAgICAg
ICAgICAgY291bnRDaGVja2VkRm9yQ3VycmVudEFsdGVybmF0aXZlID0gY291bnRUb0NoZWNrRm9y
Rmlyc3RBbHRlcm5hdGl2ZTsKLSAgICAgICAgfQogCi0gICAgICAgIGlmIChzZXRSZXBlYXRBbHRl
cm5hdGl2ZUxhYmVscykKLSAgICAgICAgICAgIGZpcnN0QWx0ZXJuYXRpdmVJbnB1dENoZWNrZWQg
PSBMYWJlbCh0aGlzKTsKKyAgICAgICAgICAgIC8vIE9wU2ltcGxlTmVzdGVkQWx0ZXJuYXRpdmVC
ZWdpbi9OZXh0L0VuZAorICAgICAgICAgICAgLy8gT3BOZXN0ZWRBbHRlcm5hdGl2ZUJlZ2luL05l
eHQvRW5kCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gVGhlc2Ugbm9kZXMgYXJlIHVz
ZWQgdG8gaGFuZGxlIHNldHMgb2YgYWx0ZXJuYXRpdmVzIHRoYXQgYXJlIG5lc3RlZCB3aXRoaW4K
KyAgICAgICAgICAgIC8vIHN1YnBhdHRlcm5zIGFuZCBwYXJlbnRoZXRpY2FsIGFzc2VydGlvbnMu
IFRoZSAnc2ltcGxlJyBmb3JtcyBhcmUgdXNlZCB3aGVyZQorICAgICAgICAgICAgLy8gd2UgZG8g
bm90IG5lZWQgdG8gYmUgYWJsZSAgdG8gYmFja3RyYWNrIGJhY2sgaW50byBhbnkgYWx0ZXJuYXRp
dmUgb3RoZXIgdGhhbgorICAgICAgICAgICAgLy8gdGhlIGxhc3QsIHRoZSBub3JtYWwgZm9ybXMg
YWxsb3cgYmFja3RyYWNraW5nIGludG8gYW55IGFsdGVybmF0aXZlLgorICAgICAgICAgICAgLy8K
KyAgICAgICAgICAgIC8vIEVhY2ggQmVnaW4vTmV4dCBub2RlIGlzIHJlc3BvbnNpYmxlIGZvciBw
bGFudGluZyBhbiBpbnB1dCBjaGVjayB0byBlbnN1cmUKKyAgICAgICAgICAgIC8vIHN1ZmZpY2ll
bnQgaW5wdXQgaXMgYXZhaWxhYmxlIG9uIGVudHJ5LiBOZXh0IG5vZGVzIGFkZGl0aW9uYWxseSBu
ZWVkIHRvCisgICAgICAgICAgICAvLyBqdW1wIHRvIHRoZSBlbmQgLSBOZXh0IG5vZGVzIHVzZSB0
aGUgRW5kIG5vZGUncyBtX2p1bXBzIGxpc3QgdG8gaG9sZCB0aGlzCisgICAgICAgICAgICAvLyBz
ZXQgb2YganVtcHMuCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gSW4gdGhlIG5vbi1z
aW1wbGUgZm9ybXMsIHN1Y2Nlc3NmdWwgYWx0ZXJuYXRpdmUgbWF0Y2hlcyBtdXN0IHN0b3JlIGEK
KyAgICAgICAgICAgIC8vICdyZXR1cm4gYWRkcmVzcycgdXNpbmcgYSBEYXRhTGFiZWxQdHIsIHVz
ZWQgdG8gc3RvcmUgdGhlIGFkZHJlc3MgdG8ganVtcAorICAgICAgICAgICAgLy8gdG8gd2hlbiBi
YWNrdHJhY2tpbmcsIHRvIGdldCB0byB0aGUgY29kZSBmb3IgdGhlIGFwcHJvcHJpYXRlIGFsdGVy
bmF0aXZlLgorICAgICAgICAgICAgY2FzZSBPcFNpbXBsZU5lc3RlZEFsdGVybmF0aXZlQmVnaW46
CisgICAgICAgICAgICBjYXNlIE9wTmVzdGVkQWx0ZXJuYXRpdmVCZWdpbjogeworICAgICAgICAg
ICAgICAgIFBhdHRlcm5UZXJtKiB0ZXJtID0gb3AubV90ZXJtOworICAgICAgICAgICAgICAgIFBh
dHRlcm5BbHRlcm5hdGl2ZSogYWx0ZXJuYXRpdmUgPSBvcC5tX2FsdGVybmF0aXZlOworICAgICAg
ICAgICAgICAgIFBhdHRlcm5EaXNqdW5jdGlvbiogZGlzanVuY3Rpb24gPSB0ZXJtLT5wYXJlbnRo
ZXNlcy5kaXNqdW5jdGlvbjsKKworICAgICAgICAgICAgICAgIC8vIENhbGN1bGF0ZSBob3cgbXVj
aCBpbnB1dCB3ZSBuZWVkIHRvIGNoZWNrIGZvciwgYW5kIGlmIG5vbi16ZXJvIGNoZWNrLgorICAg
ICAgICAgICAgICAgIG9wLm1fY2hlY2tBZGp1c3QgPSBhbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6
ZTsKKyAgICAgICAgICAgICAgICBpZiAoKHRlcm0tPnF1YW50aXR5VHlwZSA9PSBRdWFudGlmaWVy
Rml4ZWRDb3VudCkgJiYgKHRlcm0tPnR5cGUgIT0gUGF0dGVyblRlcm06OlR5cGVQYXJlbnRoZXRp
Y2FsQXNzZXJ0aW9uKSkKKyAgICAgICAgICAgICAgICAgICAgb3AubV9jaGVja0FkanVzdCAtPSBk
aXNqdW5jdGlvbi0+bV9taW5pbXVtU2l6ZTsKKyAgICAgICAgICAgICAgICBpZiAob3AubV9jaGVj
a0FkanVzdCkKKyAgICAgICAgICAgICAgICAgICAgb3AubV9qdW1wcy5hcHBlbmQoanVtcElmTm9B
dmFpbGFibGVJbnB1dChvcC5tX2NoZWNrQWRqdXN0KSk7CisgCisgICAgICAgICAgICAgICAgbV9j
aGVja2VkICs9IG9wLm1fY2hlY2tBZGp1c3Q7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBjYXNlIE9wU2ltcGxlTmVzdGVkQWx0ZXJuYXRpdmVOZXh0
OgorICAgICAgICAgICAgY2FzZSBPcE5lc3RlZEFsdGVybmF0aXZlTmV4dDogeworICAgICAgICAg
ICAgICAgIFBhdHRlcm5UZXJtKiB0ZXJtID0gb3AubV90ZXJtOworICAgICAgICAgICAgICAgIFBh
dHRlcm5BbHRlcm5hdGl2ZSogYWx0ZXJuYXRpdmUgPSBvcC5tX2FsdGVybmF0aXZlOworICAgICAg
ICAgICAgICAgIFBhdHRlcm5EaXNqdW5jdGlvbiogZGlzanVuY3Rpb24gPSB0ZXJtLT5wYXJlbnRo
ZXNlcy5kaXNqdW5jdGlvbjsKKworICAgICAgICAgICAgICAgIC8vIEluIHRoZSBub24tc2ltcGxl
IGNhc2UsIHN0b3JlIGEgJ3JldHVybiBhZGRyZXNzJyBzbyB3ZSBjYW4gYmFja3RyYWNrIGNvcnJl
Y3RseS4KKyAgICAgICAgICAgICAgICBpZiAob3AubV9vcCA9PSBPcE5lc3RlZEFsdGVybmF0aXZl
TmV4dCkgeworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBwYXJlbnRoZXNlc0ZyYW1lTG9j
YXRpb24gPSB0ZXJtLT5mcmFtZUxvY2F0aW9uOworICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBhbHRlcm5hdGl2ZUZyYW1lTG9jYXRpb24gPSBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb247Cisg
ICAgICAgICAgICAgICAgICAgIGlmICh0ZXJtLT5xdWFudGl0eVR5cGUgIT0gUXVhbnRpZmllckZp
eGVkQ291bnQpCisgICAgICAgICAgICAgICAgICAgICAgICBhbHRlcm5hdGl2ZUZyYW1lTG9jYXRp
b24gKz0gWWFyclN0YWNrU3BhY2VGb3JCYWNrVHJhY2tJbmZvUGFyZW50aGVzZXNPbmNlOworICAg
ICAgICAgICAgICAgICAgICBvcC5tX3JldHVybkFkZHJlc3MgPSBzdG9yZVRvRnJhbWVXaXRoUGF0
Y2goYWx0ZXJuYXRpdmVGcmFtZUxvY2F0aW9uKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICAvLyBJZiB3ZSByZWFjaCBoZXJlIHRoZW4gdGhlIGxhc3QgYWx0ZXJuYXRpdmUg
aGFzIG1hdGNoZWQgLSBqdW1wIHRvIHRoZQorICAgICAgICAgICAgICAgIC8vIEVuZCBub2RlLCB0
byBza2lwIG92ZXIgYW55IGZ1cnRoZXIgYWx0ZXJuYXRpdmVzLgorICAgICAgICAgICAgICAgIC8v
CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IHRoaXMgaXMgbG9naWNhbGx5IE8oTl4yKSAodGhv
dWdoIE4gY2FuIGJlIGV4cGVjdGVkIHRvIGJlIHZlcnkKKyAgICAgICAgICAgICAgICAvLyBzbWFs
bCkuIFdlIGNvdWxkIGF2b2lkIHRoaXMgZWl0aGVyIGJ5IGFkZGluZyBhbiBleHRyYSBqdW1wIHRv
IHRoZSBKSVQKKyAgICAgICAgICAgICAgICAvLyBkYXRhIHN0cnVjdHVyZXMsIG9yIGJ5IG1ha2lu
ZyBiYWNrdHJhY2tpbmcgY29kZSB0aGF0IGp1bXBzIHRvIE5leHQKKyAgICAgICAgICAgICAgICAv
LyBhbHRlcm5hdGl2ZXMgYnZlIHJlc3BvbnNpYmxlIGZvciBjaGVja2luZyB0aGF0IGlucHV0IGlz
IGF2YWlsYWJsZSAoaWYKKyAgICAgICAgICAgICAgICAvLyB3ZSBkaWRuJ3QgbmVlZCB0byBwbGFu
dCB0aGUgaW5wdXQgY2hlY2tzLCB0aGVuIG1fanVtcHMgd291bGQgYmUgZnJlZSkuCisgICAgICAg
ICAgICAgICAgWWFyck9wKiBlbmRPcCA9ICZtX29wc1tvcC5tX25leHRPcF07CisgICAgICAgICAg
ICAgICAgd2hpbGUgKGVuZE9wLT5tX25leHRPcCAhPSBub3RGb3VuZCkgeworICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQoZW5kT3AtPm1fb3AgPT0gT3BTaW1wbGVOZXN0ZWRBbHRlcm5hdGl2ZU5l
eHQgfHwgZW5kT3AtPm1fb3AgPT0gT3BOZXN0ZWRBbHRlcm5hdGl2ZU5leHQpOworICAgICAgICAg
ICAgICAgICAgICBlbmRPcCA9ICZtX29wc1tlbmRPcC0+bV9uZXh0T3BdOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBBU1NFUlQoZW5kT3AtPm1fb3AgPT0gT3BTaW1wbGVOZXN0
ZWRBbHRlcm5hdGl2ZUVuZCB8fCBlbmRPcC0+bV9vcCA9PSBPcE5lc3RlZEFsdGVybmF0aXZlRW5k
KTsKKyAgICAgICAgICAgICAgICBlbmRPcC0+bV9qdW1wcy5hcHBlbmQoanVtcCgpKTsKKworICAg
ICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgbmV4dCBhbHRl
cm5hdGl2ZS4KKyAgICAgICAgICAgICAgICBvcC5tX3JlZW50cnkgPSBsYWJlbCgpOworCisgICAg
ICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIGhvdyBtdWNoIGlucHV0IHdlIG5lZWQgdG8gY2hlY2sg
Zm9yLCBhbmQgaWYgbm9uLXplcm8gY2hlY2suCisgICAgICAgICAgICAgICAgb3AubV9jaGVja0Fk
anVzdCA9IGFsdGVybmF0aXZlLT5tX21pbmltdW1TaXplOworICAgICAgICAgICAgICAgIGlmICgo
dGVybS0+cXVhbnRpdHlUeXBlID09IFF1YW50aWZpZXJGaXhlZENvdW50KSAmJiAodGVybS0+dHlw
ZSAhPSBQYXR0ZXJuVGVybTo6VHlwZVBhcmVudGhldGljYWxBc3NlcnRpb24pKQorICAgICAgICAg
ICAgICAgICAgICBvcC5tX2NoZWNrQWRqdXN0IC09IGRpc2p1bmN0aW9uLT5tX21pbmltdW1TaXpl
OworICAgICAgICAgICAgICAgIGlmIChvcC5tX2NoZWNrQWRqdXN0KQorICAgICAgICAgICAgICAg
ICAgICBvcC5tX2p1bXBzLmFwcGVuZChqdW1wSWZOb0F2YWlsYWJsZUlucHV0KG9wLm1fY2hlY2tB
ZGp1c3QpKTsKKworICAgICAgICAgICAgICAgIFlhcnJPcCYgbGFzdE9wID0gbV9vcHNbb3AubV9w
cmV2aW91c09wXTsKKyAgICAgICAgICAgICAgICBtX2NoZWNrZWQgLT0gbGFzdE9wLm1fY2hlY2tB
ZGp1c3Q7CisgICAgICAgICAgICAgICAgbV9jaGVja2VkICs9IG9wLm1fY2hlY2tBZGp1c3Q7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIE9w
U2ltcGxlTmVzdGVkQWx0ZXJuYXRpdmVFbmQ6CisgICAgICAgICAgICBjYXNlIE9wTmVzdGVkQWx0
ZXJuYXRpdmVFbmQ6IHsKKyAgICAgICAgICAgICAgICBQYXR0ZXJuVGVybSogdGVybSA9IG9wLm1f
dGVybTsKKworICAgICAgICAgICAgICAgIC8vIEluIHRoZSBub24tc2ltcGxlIGNhc2UsIHN0b3Jl
IGEgJ3JldHVybiBhZGRyZXNzJyBzbyB3ZSBjYW4gYmFja3RyYWNrIGNvcnJlY3RseS4KKyAgICAg
ICAgICAgICAgICBpZiAob3AubV9vcCA9PSBPcE5lc3RlZEFsdGVybmF0aXZlRW5kKSB7CisgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiA9IHRlcm0t
PmZyYW1lTG9jYXRpb247CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFsdGVybmF0aXZl
RnJhbWVMb2NhdGlvbiA9IHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbjsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHRlcm0tPnF1YW50aXR5VHlwZSAhPSBRdWFudGlmaWVyRml4ZWRDb3VudCkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGFsdGVybmF0aXZlRnJhbWVMb2NhdGlvbiArPSBZYXJyU3Rh
Y2tTcGFjZUZvckJhY2tUcmFja0luZm9QYXJlbnRoZXNlc09uY2U7CisgICAgICAgICAgICAgICAg
ICAgIG9wLm1fcmV0dXJuQWRkcmVzcyA9IHN0b3JlVG9GcmFtZVdpdGhQYXRjaChhbHRlcm5hdGl2
ZUZyYW1lTG9jYXRpb24pOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8v
IElmIHRoaXMgc2V0IG9mIGFsdGVybmF0aXZlcyBjb250YWlucyBtb3JlIHRoYW4gb25lIGFsdGVy
bmF0aXZlLAorICAgICAgICAgICAgICAgIC8vIHRoZW4gdGhlIE5leHQgbm9kZXMgd2lsbCBoYXZl
IHBsYW50ZWQganVtcHMgdG8gdGhlIEVuZCwgYW5kIGFkZGVkCisgICAgICAgICAgICAgICAgLy8g
dGhlbSB0byB0aGlzIG5vZGUncyBtX2p1bXBzIGxpc3QuCisgICAgICAgICAgICAgICAgb3AubV9q
dW1wcy5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgIG9wLm1fanVtcHMuY2xlYXIoKTsKKwor
ICAgICAgICAgICAgICAgIFlhcnJPcCYgbGFzdE9wID0gbV9vcHNbb3AubV9wcmV2aW91c09wXTsK
KyAgICAgICAgICAgICAgICBtX2NoZWNrZWQgLT0gbGFzdE9wLm1fY2hlY2tBZGp1c3Q7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIE9wUGFy
ZW50aGVzZXNTdWJwYXR0ZXJuT25jZUJlZ2luL0VuZAorICAgICAgICAgICAgLy8KKyAgICAgICAg
ICAgIC8vIFRoZXNlIG5vZGVzIHN1cHBvcnQgKG9wdGlvbmFsbHkpIGNhcHR1cmluZyBzdWJwYXR0
ZXJucywgdGhhdCBoYXZlIGEKKyAgICAgICAgICAgIC8vIHF1YW50aXR5IGNvdW50IG9mIDEgKHRo
aXMgY292ZXJzIGZpeGVkIG9uY2UsIGFuZCA/Lz8/IHF1YW50aWZpZXJzKS4gCisgICAgICAgICAg
ICBjYXNlIE9wUGFyZW50aGVzZXNTdWJwYXR0ZXJuT25jZUJlZ2luOiB7CisgICAgICAgICAgICAg
ICAgUGF0dGVyblRlcm0qIHRlcm0gPSBvcC5tX3Rlcm07CisgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uID0gdGVybS0+ZnJhbWVMb2NhdGlvbjsKKyAgICAg
ICAgICAgICAgICBjb25zdCBSZWdpc3RlcklEIGluZGV4VGVtcG9yYXJ5ID0gcmVnVDA7CisgICAg
ICAgICAgICAgICAgQVNTRVJUKHRlcm0tPnF1YW50aXR5Q291bnQgPT0gMSk7CisKKyAgICAgICAg
ICAgICAgICAvLyBVcG9uIGVudHJ5IHRvIGEgR3JlZWR5IHF1YW50aWZpZWQgc2V0IG9mIHBhcmVu
dGhlc2Ugc3RvcmUgdGhlIGluZGV4LgorICAgICAgICAgICAgICAgIC8vIFdlJ2xsIHVzZSB0aGlz
IGZvciB0d28gcHVycG9zZXM6CisgICAgICAgICAgICAgICAgLy8gIC0gVG8gaW5kaWNhdGUgd2hp
Y2ggaXRlcmF0aW9uIHdlIGFyZSBvbiBvZiBtYXRoaW5nIHRoZSByZW1haW5kZXIgb2YKKyAgICAg
ICAgICAgICAgICAvLyAgICB0aGUgZXhwcmVzc2lvbiBhZnRlciB0aGUgcGFyZW50aGVzZXMgLSB0
aGUgZmlyc3QsIGluY2x1ZGluZyB0aGUKKyAgICAgICAgICAgICAgICAvLyAgICBtYXRjaCB3aXRo
aW4gdGhlIHBhcmVudGhlc2VzLCBvciB0aGUgc2Vjb25kIGhhdmluZyBza2lwcGVkIG92ZXIgdGhl
bS4KKyAgICAgICAgICAgICAgICAvLyAgLSBUbyBjaGVjayBmb3IgZW1wdHkgbWF0Y2hlcywgd2hp
Y2ggbXVzdCBiZSByZWplY3RlZC4KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAg
IC8vIEF0IHRoZSBoZWFkIG9mIGEgTm9uR3JlZWR5IHNldCBvZiBwYXJlbnRoZXNlcyB3ZSdsbCBp
bW1lZGlhdGVseSBzZXQgdGhlCisgICAgICAgICAgICAgICAgLy8gdmFsdWUgb24gdGhlIHN0YWNr
IHRvIC0xIChpbmRpY2F0aW5nIGEgbWF0Y2ggc2tpcHBpbmcgdGhlIHN1YnBhdHRlcm4pLAorICAg
ICAgICAgICAgICAgIC8vIGFuZCBwbGFudCBhIGp1bXAgdG8gdGhlIGVuZC4gV2UnbGwgYWxzbyBw
bGFudCBhIGxhYmVsIHRvIGJhY2t0cmFjayB0bworICAgICAgICAgICAgICAgIC8vIHRvIHJlZW50
ZXIgdGhlIHN1YnBhdHRlcm4gbGF0ZXIsIHdpdGggYSBzdG9yZSB0byBzZXQgdXAgaW5kZXggb24g
dGhlCisgICAgICAgICAgICAgICAgLy8gc2Vjb25kIGl0ZXJhdGlvbi4KKyAgICAgICAgICAgICAg
ICAvLworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBmb3IgY2FwdHVyaW5nIHBhcmVucywgY291
bGQgdXNlIHRoZSBpbmRleCBpbiB0aGUgY2FwdHVyZSBhcnJheT8KKyAgICAgICAgICAgICAgICBp
ZiAodGVybS0+cXVhbnRpdHlUeXBlID09IFF1YW50aWZpZXJHcmVlZHkpCisgICAgICAgICAgICAg
ICAgICAgIHN0b3JlVG9GcmFtZShpbmRleCwgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uKTsKKyAg
ICAgICAgICAgICAgICBlbHNlIGlmICh0ZXJtLT5xdWFudGl0eVR5cGUgPT0gUXVhbnRpZmllck5v
bkdyZWVkeSkgeworICAgICAgICAgICAgICAgICAgICBzdG9yZVRvRnJhbWUoVHJ1c3RlZEltbTMy
KC0xKSwgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgb3Au
bV9qdW1wcy5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgICAgICAgICAgICAgb3AubV9yZWVudHJ5
ID0gbGFiZWwoKTsKKyAgICAgICAgICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKGluZGV4LCBwYXJl
bnRoZXNlc0ZyYW1lTG9jYXRpb24pOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIC8vIElmIHRoZSBwYXJlbnRoZXNlIGFyZSBjYXB0dXJpbmcsIHN0b3JlIHRoZSBzdGFydGlu
ZyBpbmRleCB2YWx1ZSB0byB0aGUKKyAgICAgICAgICAgICAgICAvLyBjYXB0dXJlcyBhcnJheSwg
b2Zmc2V0dGluZyBhcyBuZWNlc3NhcnkuCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogY291bGQgYXZvaWQgb2Zmc2V0dGluZyB0aGlzIHZhbHVlIGluIEpJVCBj
b2RlLCBhcHBseQorICAgICAgICAgICAgICAgIC8vIG9mZnNldHMgb25seSBhZnRlcndhcmRzLCBh
dCB0aGUgcG9pbnQgdGhlIHJlc3VsdHMgYXJyYXkgaXMKKyAgICAgICAgICAgICAgICAvLyBiZWlu
ZyBhY2Nlc3NlZC4KKyAgICAgICAgICAgICAgICBpZiAodGVybS0+Y2FwdHVyZSgpKSB7CisgICAg
ICAgICAgICAgICAgICAgIGludCBvZmZzZXRJZCA9IHRlcm0tPnBhcmVudGhlc2VzLnN1YnBhdHRl
cm5JZCA8PCAxOworICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRPZmZzZXQgPSB0ZXJtLT5p
bnB1dFBvc2l0aW9uIC0gbV9jaGVja2VkOworICAgICAgICAgICAgICAgICAgICBpZiAodGVybS0+
cXVhbnRpdHlUeXBlID09IFF1YW50aWZpZXJGaXhlZENvdW50KQorICAgICAgICAgICAgICAgICAg
ICAgICAgaW5wdXRPZmZzZXQgLT0gdGVybS0+cGFyZW50aGVzZXMuZGlzanVuY3Rpb24tPm1fbWlu
aW11bVNpemU7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dE9mZnNldCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgbW92ZShpbmRleCwgaW5kZXhUZW1wb3JhcnkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgYWRkMzIoSW1tMzIoaW5wdXRPZmZzZXQpLCBpbmRleFRlbXBvcmFyeSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBzdG9yZTMyKGluZGV4VGVtcG9yYXJ5LCBBZGRyZXNz
KG91dHB1dCwgb2Zmc2V0SWQgKiBzaXplb2YoaW50KSkpOworICAgICAgICAgICAgICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlMzIoaW5kZXgsIEFkZHJlc3Mob3V0
cHV0LCBvZmZzZXRJZCAqIHNpemVvZihpbnQpKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBPcFBhcmVu
dGhlc2VzU3VicGF0dGVybk9uY2VFbmQ6IHsKKyAgICAgICAgICAgICAgICBQYXR0ZXJuVGVybSog
dGVybSA9IG9wLm1fdGVybTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBwYXJlbnRoZXNlc0Zy
YW1lTG9jYXRpb24gPSB0ZXJtLT5mcmFtZUxvY2F0aW9uOworICAgICAgICAgICAgICAgIGNvbnN0
IFJlZ2lzdGVySUQgaW5kZXhUZW1wb3JhcnkgPSByZWdUMDsKKyAgICAgICAgICAgICAgICBBU1NF
UlQodGVybS0+cXVhbnRpdHlDb3VudCA9PSAxKTsKKworICAgICAgICAgICAgICAgIC8vIEZvciBH
cmVlZHkvTm9uR3JlZWR5IHF1YW50aWZpZWQgcGFyZW50aGVzZXMsIHdlIG11c3QgcmVqZWN0IHpl
cm8gbGVuZ3RoCisgICAgICAgICAgICAgICAgLy8gbWF0Y2hlcy4gSWYgdGhlIG1pbmltdW0gc2l6
ZSBpcyBrbm93IHRvIGJlIG5vbi16ZXJvIHdlIG5lZWQgbm90IGNoZWNrLgorICAgICAgICAgICAg
ICAgIGlmICh0ZXJtLT5xdWFudGl0eVR5cGUgIT0gUXVhbnRpZmllckZpeGVkQ291bnQgJiYgIXRl
cm0tPnBhcmVudGhlc2VzLmRpc2p1bmN0aW9uLT5tX21pbmltdW1TaXplKQorICAgICAgICAgICAg
ICAgICAgICBvcC5tX2p1bXBzLmFwcGVuZChicmFuY2gzMihFcXVhbCwgaW5kZXgsIEFkZHJlc3Mo
c3RhY2tQb2ludGVyUmVnaXN0ZXIsIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiAqIHNpemVvZih2
b2lkKikpKSk7CisKKyAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcGFyZW50aGVzZSBhcmUgY2Fw
dHVyaW5nLCBzdG9yZSB0aGUgZW5kaW5nIGluZGV4IHZhbHVlIHRvIHRoZQorICAgICAgICAgICAg
ICAgIC8vIGNhcHR1cmVzIGFycmF5LCBvZmZzZXR0aW5nIGFzIG5lY2Vzc2FyeS4KKyAgICAgICAg
ICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBjb3VsZCBhdm9pZCBvZmZzZXR0
aW5nIHRoaXMgdmFsdWUgaW4gSklUIGNvZGUsIGFwcGx5CisgICAgICAgICAgICAgICAgLy8gb2Zm
c2V0cyBvbmx5IGFmdGVyd2FyZHMsIGF0IHRoZSBwb2ludCB0aGUgcmVzdWx0cyBhcnJheSBpcwor
ICAgICAgICAgICAgICAgIC8vIGJlaW5nIGFjY2Vzc2VkLgorICAgICAgICAgICAgICAgIGlmICh0
ZXJtLT5jYXB0dXJlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IG9mZnNldElkID0gKHRl
cm0tPnBhcmVudGhlc2VzLnN1YnBhdHRlcm5JZCA8PCAxKSArIDE7CisgICAgICAgICAgICAgICAg
ICAgIGludCBpbnB1dE9mZnNldCA9IHRlcm0tPmlucHV0UG9zaXRpb24gLSBtX2NoZWNrZWQ7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dE9mZnNldCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgbW92ZShpbmRleCwgaW5kZXhUZW1wb3JhcnkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgYWRkMzIoSW1tMzIoaW5wdXRPZmZzZXQpLCBpbmRleFRlbXBvcmFyeSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBzdG9yZTMyKGluZGV4VGVtcG9yYXJ5LCBBZGRyZXNzKG91dHB1dCwgb2Zm
c2V0SWQgKiBzaXplb2YoaW50KSkpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHN0b3JlMzIoaW5kZXgsIEFkZHJlc3Mob3V0cHV0LCBvZmZzZXRJ
ZCAqIHNpemVvZihpbnQpKSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
Ly8gSWYgdGhlIHBhcmVudGhlc2VzIGFyZSBxdWFudGlmaWVkIEdyZWVkeSB0aGVuIGFkZCBhIGxh
YmVsIHRvIGp1bXAgYmFjaworICAgICAgICAgICAgICAgIC8vIHRvIGlmIGdldCBhIGZhaWxlZCBt
YXRjaCBmcm9tIGFmdGVyIHRoZSBwYXJlbnRoZXNlcy4gRm9yIE5vbkdyZWVkeQorICAgICAgICAg
ICAgICAgIC8vIHBhcmVudGhlc2VzLCBsaW5rIHRoZSBqdW1wIGZyb20gYmVmb3JlIHRoZSBzdWJw
YXR0ZXJuIHRvIGhlcmUuCisgICAgICAgICAgICAgICAgaWYgKHRlcm0tPnF1YW50aXR5VHlwZSA9
PSBRdWFudGlmaWVyR3JlZWR5KQorICAgICAgICAgICAgICAgICAgICBvcC5tX3JlZW50cnkgPSBs
YWJlbCgpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRlcm0tPnF1YW50aXR5VHlwZSA9PSBR
dWFudGlmaWVyTm9uR3JlZWR5KSB7CisgICAgICAgICAgICAgICAgICAgIFlhcnJPcCYgYmVnaW5P
cCA9IG1fb3BzW29wLm1fcHJldmlvdXNPcF07CisgICAgICAgICAgICAgICAgICAgIGJlZ2luT3Au
bV9qdW1wcy5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gT3BQYXJlbnRoZXNlc1N1YnBh
dHRlcm5UZXJtaW5hbEJlZ2luL0VuZAorICAgICAgICAgICAgY2FzZSBPcFBhcmVudGhlc2VzU3Vi
cGF0dGVyblRlcm1pbmFsQmVnaW46IHsKKyAgICAgICAgICAgICAgICBQYXR0ZXJuVGVybSogdGVy
bSA9IG9wLm1fdGVybTsKKyAgICAgICAgICAgICAgICBBU1NFUlQodGVybS0+cXVhbnRpdHlUeXBl
ID09IFF1YW50aWZpZXJHcmVlZHkpOworICAgICAgICAgICAgICAgIEFTU0VSVCh0ZXJtLT5xdWFu
dGl0eUNvdW50ID09IHF1YW50aWZ5SW5maW5pdGUpOworICAgICAgICAgICAgICAgIEFTU0VSVCgh
dGVybS0+Y2FwdHVyZSgpKTsKKworICAgICAgICAgICAgICAgIC8vIFVwb24gZW50cnkgc2V0IGEg
bGFiZWwgdG8gbG9vcCBiYWNrIHRvLgorICAgICAgICAgICAgICAgIG9wLm1fcmVlbnRyeSA9IGxh
YmVsKCk7CisKKyAgICAgICAgICAgICAgICAvLyBTdG9yZSB0aGUgc3RhcnQgaW5kZXggb2YgdGhl
IGN1cnJlbnQgbWF0Y2g7IHdlIG5lZWQgdG8gcmVqZWN0IHplcm8KKyAgICAgICAgICAgICAgICAv
LyBsZW5ndGggbWF0Y2hlcy4KKyAgICAgICAgICAgICAgICBzdG9yZVRvRnJhbWUoaW5kZXgsIHRl
cm0tPmZyYW1lTG9jYXRpb24pOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgY2FzZSBPcFBhcmVudGhlc2VzU3VicGF0dGVyblRlcm1pbmFsRW5kOiB7
CisgICAgICAgICAgICAgICAgUGF0dGVyblRlcm0qIHRlcm0gPSBvcC5tX3Rlcm07CisKKyAgICAg
ICAgICAgICAgICAvLyBDaGVjayBmb3IgemVybyBsZW5ndGggbWF0Y2hlcyAtIGlmIHRoZSBtYXRj
aCBpcyBub24temVybywgdGhlbiB3ZQorICAgICAgICAgICAgICAgIC8vIGNhbiBhY2NlcHQgaXQg
JiBsb29wIGJhY2sgdXAgdG8gdGhlIGhlYWQgb2YgdGhlIHN1YnBhdHRlcm4uCisgICAgICAgICAg
ICAgICAgWWFyck9wJiBiZWdpbk9wID0gbV9vcHNbb3AubV9wcmV2aW91c09wXTsKKyAgICAgICAg
ICAgICAgICBicmFuY2gzMihOb3RFcXVhbCwgaW5kZXgsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVn
aXN0ZXIsIHRlcm0tPmZyYW1lTG9jYXRpb24gKiBzaXplb2Yodm9pZCopKSwgYmVnaW5PcC5tX3Jl
ZW50cnkpOworCisgICAgICAgICAgICAgICAgLy8gUmVqZWN0IHRoZSBtYXRjaCAtIGJhY2t0cmFj
ayBiYWNrIGludG8gdGhlIHN1YnBhdHRlcm4uCisgICAgICAgICAgICAgICAgb3AubV9qdW1wcy5h
cHBlbmQoanVtcCgpKTsKKworICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGVudHJ5IHBv
aW50IHRvIGp1bXAgdG8gd2hlbiB3ZSBzdG9wIG1hdGNoaW5nIC0gd2Ugd2lsbAorICAgICAgICAg
ICAgICAgIC8vIGRvIHNvIG9uY2UgdGhlIHN1YnBhdHRlcm4gY2Fubm90IG1hdGNoIGFueSBtb3Jl
LgorICAgICAgICAgICAgICAgIG9wLm1fcmVlbnRyeSA9IGxhYmVsKCk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIE9wUGFyZW50aGV0aWNh
bEFzc2VydGlvbkJlZ2luL0VuZAorICAgICAgICAgICAgY2FzZSBPcFBhcmVudGhldGljYWxBc3Nl
cnRpb25CZWdpbjogeworICAgICAgICAgICAgICAgIFBhdHRlcm5UZXJtKiB0ZXJtID0gb3AubV90
ZXJtOworCisgICAgICAgICAgICAgICAgLy8gU3RvcmUgdGhlIGN1cnJlbnQgaW5kZXggLSBhc3Nl
cnRpb25zIHNob3VsZCBub3QgdXBkYXRlIGluZGV4LCBzbworICAgICAgICAgICAgICAgIC8vIHdl
IHdpbGwgbmVlZCB0byByZXN0b3JlIGl0IHVwb24gYSBzdWNjZXNzZnVsIG1hdGNoLgorICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiA9IHRlcm0tPmZyYW1l
TG9jYXRpb247CisgICAgICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKGluZGV4LCBwYXJlbnRoZXNl
c0ZyYW1lTG9jYXRpb24pOworCisgICAgICAgICAgICAgICAgLy8gQ2hlY2sgCisgICAgICAgICAg
ICAgICAgb3AubV9jaGVja0FkanVzdCA9IG1fY2hlY2tlZCAtIHRlcm0tPmlucHV0UG9zaXRpb247
CisgICAgICAgICAgICAgICAgaWYgKG9wLm1fY2hlY2tBZGp1c3QpCisgICAgICAgICAgICAgICAg
ICAgIHN1YjMyKEltbTMyKG9wLm1fY2hlY2tBZGp1c3QpLCBpbmRleCk7CisKKyAgICAgICAgICAg
ICAgICBtX2NoZWNrZWQgLT0gb3AubV9jaGVja0FkanVzdDsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgT3BQYXJlbnRoZXRpY2FsQXNzZXJ0
aW9uRW5kOiB7CisgICAgICAgICAgICAgICAgUGF0dGVyblRlcm0qIHRlcm0gPSBvcC5tX3Rlcm07
CiAKLSAgICAgICAgd2hpbGUgKHN0YXRlLmFsdGVybmF0aXZlVmFsaWQoKSkgewotICAgICAgICAg
ICAgUGF0dGVybkFsdGVybmF0aXZlKiBhbHRlcm5hdGl2ZSA9IHN0YXRlLmFsdGVybmF0aXZlKCk7
Ci0gICAgICAgICAgICBvcHRpbWl6ZUFsdGVybmF0aXZlKGFsdGVybmF0aXZlKTsKKyAgICAgICAg
ICAgICAgICAvLyBSZXN0b3JlIHRoZSBpbnB1dCBpbmRleCB2YWx1ZS4KKyAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gPSB0ZXJtLT5mcmFtZUxvY2F0aW9u
OworICAgICAgICAgICAgICAgIGxvYWRGcm9tRnJhbWUocGFyZW50aGVzZXNGcmFtZUxvY2F0aW9u
LCBpbmRleCk7CisKKyAgICAgICAgICAgICAgICAvLyBJZiBpbnZlcnRlZCwgYSBzdWNjZXNzZnVs
IG1hdGNoIG9mIHRoZSBhc3NlcnRpb24gbXVzdCBiZSB0cmVhdGVkCisgICAgICAgICAgICAgICAg
Ly8gYXMgYSBmYWlsdXJlLCBzbyBqdW1wIHRvIGJhY2t0cmFja2luZy4KKyAgICAgICAgICAgICAg
ICBpZiAodGVybS0+aW52ZXJ0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgb3AubV9qdW1wcy5h
cHBlbmQoanVtcCgpKTsKKyAgICAgICAgICAgICAgICAgICAgb3AubV9yZWVudHJ5ID0gbGFiZWwo
KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBZYXJyT3AmIGxhc3RPcCA9
IG1fb3BzW29wLm1fcHJldmlvdXNPcF07CisgICAgICAgICAgICAgICAgbV9jaGVja2VkICs9IGxh
c3RPcC5tX2NoZWNrQWRqdXN0OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICAvLyBUcmFjayB3aGV0aGVyIGFueSBhbHRlcm5hdGl2ZXMgYXJlIHNo
b3J0ZXIgdGhhbiB0aGUgZmlyc3Qgb25lLgotICAgICAgICAgICAgaWYgKCFhbHRlcm5hdGl2ZS0+
b25jZVRocm91Z2goKSkKLSAgICAgICAgICAgICAgICBoYXNTaG9ydGVyQWx0ZXJuYXRpdmVzID0g
aGFzU2hvcnRlckFsdGVybmF0aXZlcyB8fCAoY291bnRDaGVja2VkRm9yQ3VycmVudEFsdGVybmF0
aXZlIDwgY291bnRUb0NoZWNrRm9yRmlyc3RBbHRlcm5hdGl2ZSk7CisgICAgICAgICAgICBjYXNl
IE9wTWF0Y2hGYWlsZWQ6CisgICAgICAgICAgICAgICAgaWYgKG1fcGF0dGVybi5tX2JvZHktPm1f
Y2FsbEZyYW1lU2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgYWRkUHRyKEltbTMyKG1fcGF0dGVy
bi5tX2JvZHktPm1fY2FsbEZyYW1lU2l6ZSAqIHNpemVvZih2b2lkKikpLCBzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoLTEpLCByZXR1cm5S
ZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgZ2VuZXJhdGVSZXR1cm4oKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgKytvcEluZGV4OworICAg
ICAgICB9IHdoaWxlIChvcEluZGV4IDwgbV9vcHMuc2l6ZSgpKTsKKyAgICB9CiAKLSAgICAgICAg
ICAgIGZvciAoc3RhdGUucmVzZXRUZXJtKCk7IHN0YXRlLnRlcm1WYWxpZCgpOyBzdGF0ZS5uZXh0
VGVybSgpKQotICAgICAgICAgICAgICAgIGdlbmVyYXRlVGVybShzdGF0ZSk7CisgICAgdm9pZCBi
YWNrdHJhY2soKQorICAgIHsKKyAgICAgICAgLy8gQmFja3dhcmRzIGdlbmVyYXRlIHRoZSBiYWNr
dHJhY2tpbmcgY29kZS4KKyAgICAgICAgc2l6ZV90IG9wSW5kZXggPSBtX29wcy5zaXplKCk7Cisg
ICAgICAgIEFTU0VSVChvcEluZGV4KTsKIAotICAgICAgICAgICAgLy8gSWYgd2UgZ2V0IGhlcmUs
IHRoZSBhbHRlcm5hdGl2ZSBtYXRjaGVkLgotICAgICAgICAgICAgaWYgKG1fcGF0dGVybi5tX2Jv
ZHktPm1fY2FsbEZyYW1lU2l6ZSkKLSAgICAgICAgICAgICAgICBhZGRQdHIoSW1tMzIobV9wYXR0
ZXJuLm1fYm9keS0+bV9jYWxsRnJhbWVTaXplICogc2l6ZW9mKHZvaWQqKSksIHN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKKyAgICAgICAgZG8geworICAgICAgICAgICAgLS1vcEluZGV4OworICAgICAg
ICAgICAgWWFyck9wJiBvcCA9IG1fb3BzW29wSW5kZXhdOworICAgICAgICAgICAgc3dpdGNoIChv
cC5tX29wKSB7CiAKLSAgICAgICAgICAgIEFTU0VSVChpbmRleCAhPSByZXR1cm5SZWdpc3Rlcik7
Ci0gICAgICAgICAgICBpZiAobV9wYXR0ZXJuLm1fYm9keS0+bV9oYXNGaXhlZFNpemUpIHsKLSAg
ICAgICAgICAgICAgICBtb3ZlKGluZGV4LCByZXR1cm5SZWdpc3Rlcik7Ci0gICAgICAgICAgICAg
ICAgaWYgKGFsdGVybmF0aXZlLT5tX21pbmltdW1TaXplKQotICAgICAgICAgICAgICAgICAgICBz
dWIzMihJbW0zMihhbHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSksIHJldHVyblJlZ2lzdGVyKTsK
KyAgICAgICAgICAgIGNhc2UgT3BUZXJtOgorICAgICAgICAgICAgICAgIGJhY2t0cmFja1Rlcm0o
b3BJbmRleCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgICAgICBzdG9y
ZTMyKHJldHVyblJlZ2lzdGVyLCBvdXRwdXQpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICAgICAgbG9hZDMyKEFkZHJlc3Mob3V0cHV0KSwgcmV0dXJuUmVnaXN0ZXIpOworICAgICAg
ICAgICAgLy8gT3BCb2R5QWx0ZXJuYXRpdmVCZWdpbi9OZXh0L0VuZAorICAgICAgICAgICAgLy8K
KyAgICAgICAgICAgIC8vIEZvciBlYWNoIEJlZ2luL05leHQgbm9kZSByZXByZXNlbnRpbmcgYW4g
YWx0ZXJuYXRpdmUsIHdlIG5lZWQgdG8gZGVjaWRlIHdoYXQgdG8gZG8KKyAgICAgICAgICAgIC8v
IGluIHR3byBjaXJjdW1zdGFuY2VzOgorICAgICAgICAgICAgLy8gIC0gSWYgd2UgYmFja3RyYWNr
IGJhY2sgaW50byB0aGlzIG5vZGUsIGZyb20gd2l0aGluIHRoZSBhbHRlcm5hdGl2ZS4KKyAgICAg
ICAgICAgIC8vICAtIElmIHRoZSBpbnB1dCBjaGVjayBhdCB0aGUgaGVhZCBvZiB0aGUgYWx0ZXJu
YXRpdmUgZmFpbHMgKGlmIHRoaXMgZXhpc3RzKS4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAg
ICAvLyBXZSB0cmVhdCB0aGVzZSB0d28gY2FzZXMgZGlmZmVyZW50bHkgc2luY2UgaW4gdGhlIGZv
cm1lciBjYXNlIHdlIGhhdmUgc2xpZ2h0bHkKKyAgICAgICAgICAgIC8vIG1vcmUgaW5mb3JtYXRp
b24gLSBzaW5jZSB3ZSBhcmUgYmFja3RyYWNraW5nIG91dCBvZiBhIHByaW9yIGFsdGVybmF0aXZl
IHdlIGtub3cKKyAgICAgICAgICAgIC8vIHRoYXQgYXQgbGVhc3QgZW5vdWdoIGlucHV0IHdhcyBh
dmFpbGFibGUgdG8gcnVuIGl0LiBGb3IgZXhhbXBsZSwgZ2l2ZW4gdGhlIHJlZ3VsYXIKKyAgICAg
ICAgICAgIC8vIGV4cHJlc3Npb24gL2F8Yi8sIGlmIHdlIGJhY2t0cmFjayBvdXQgb2YgdGhlIGZp
cnN0IGFsdGVybmF0aXZlIChhIGZhaWxlZCBwYXR0ZXJuCisgICAgICAgICAgICAvLyBjaGFyYWN0
ZXIgbWF0Y2ggb2YgJ2EnKSwgdGhlbiB3ZSBuZWVkIG5vdCBwZXJmb3JtIGFuIGFkZGl0aW9uYWwg
aW5wdXQgYXZhaWxhYmlsaXR5CisgICAgICAgICAgICAvLyBjaGVjayBiZWZvcmUgcnVubmluZyB0
aGUgc2Vjb25kIGFsdGVybmF0aXZlLgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIEJh
Y2t0cmFja2luZyByZXF1aXJlZCBkaWZmZXJzIGZvciB0aGUgbGFzdCBhbHRlcm5hdGl2ZSwgd2hp
Y2ggaW4gdGhlIGNhc2Ugb2YgdGhlCisgICAgICAgICAgICAvLyByZXBlYXRpbmcgc2V0IG9mIGFs
dGVybmF0aXZlcyBtdXN0IGxvb3AuIFRoZSBjb2RlIGdlbmVyYXRlZCBmb3IgdGhlIGxhc3QgYWx0
ZXJuYXRpdmUKKyAgICAgICAgICAgIC8vIHdpbGwgYWxzbyBiZSB1c2VkIHRvIGhhbmRsZSBhbGwg
aW5wdXQgY2hlY2sgZmFpbHVyZXMgZnJvbSBhbnkgcHJpb3IgYWx0ZXJuYXRpdmVzIC0KKyAgICAg
ICAgICAgIC8vIHRoZXNlIHJlcXVpcmUgc2ltaWxhciBmdW5jdGlvbmFsaXR5LCBpbiBzZWVraW5n
IHRoZSBuZXh0IGF2YWlsYWJsZSBhbHRlcm5hdGl2ZSBmb3IKKyAgICAgICAgICAgIC8vIHdoaWNo
IHRoZXJlIGlzIHN1ZmZpY2llbnQgaW5wdXQuCisgICAgICAgICAgICAvLworICAgICAgICAgICAg
Ly8gU2luY2UgYmFja3RyYWNraW5nIG9mIGFsbCBvdGhlciBhbHRlcm5hdGl2ZXMgc2ltcGx5IHJl
cXVpcmVzIHVzIHRvIGxpbmsgYmFja3RyYWNrcworICAgICAgICAgICAgLy8gdG8gdGhlIHJlZW50
cnkgcG9pbnQgZm9yIHRoZSBzdWJzZXF1ZW50IGFsdGVybmF0aXZlLCB3ZSB3aWxsIG9ubHkgYmUg
Z2VuZXJhdGluZyBhbnkKKyAgICAgICAgICAgIC8vIGNvZGUgd2hlbiBiYWNrdHJhY2tpbmcgdGhl
IGxhc3QgYWx0ZXJuYXRpdmUuCisgICAgICAgICAgICBjYXNlIE9wQm9keUFsdGVybmF0aXZlQmVn
aW46CisgICAgICAgICAgICBjYXNlIE9wQm9keUFsdGVybmF0aXZlTmV4dDogeworICAgICAgICAg
ICAgICAgIFBhdHRlcm5BbHRlcm5hdGl2ZSogYWx0ZXJuYXRpdmUgPSBvcC5tX2FsdGVybmF0aXZl
OworCisgICAgICAgICAgICAgICAgaWYgKG9wLm1fb3AgPT0gT3BCb2R5QWx0ZXJuYXRpdmVOZXh0
KSB7CisgICAgICAgICAgICAgICAgICAgIFBhdHRlcm5BbHRlcm5hdGl2ZSogcHJpb3JBbHRlcm5h
dGl2ZSA9IG1fb3BzW29wLm1fcHJldmlvdXNPcF0ubV9hbHRlcm5hdGl2ZTsKKyAgICAgICAgICAg
ICAgICAgICAgbV9jaGVja2VkICs9IHByaW9yQWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemU7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1fY2hlY2tlZCAtPSBhbHRlcm5hdGl2
ZS0+bV9taW5pbXVtU2l6ZTsKIAotICAgICAgICAgICAgc3RvcmUzMihpbmRleCwgQWRkcmVzcyhv
dXRwdXQsIDQpKTsKKyAgICAgICAgICAgICAgICAvLyBJcyB0aGlzIHRoZSBsYXN0IGFsdGVybmF0
aXZlPyBJZiBub3QsIHRoZW4gaWYgd2UgYmFja3RyYWNrIHRvIHRoaXMgcG9pbnQgd2UganVzdAor
ICAgICAgICAgICAgICAgIC8vIG5lZWQgdG8ganVtcCB0byB0cnkgdG8gbWF0Y2ggdGhlIG5leHQg
YWx0ZXJuYXRpdmUuCisgICAgICAgICAgICAgICAgaWYgKG1fb3BzW29wLm1fbmV4dE9wXS5tX29w
ICE9IE9wQm9keUFsdGVybmF0aXZlRW5kKSB7CisgICAgICAgICAgICAgICAgICAgIG1fYmFja3Ry
YWNraW5nU3RhdGUubGlua1RvKG1fb3BzW29wLm1fbmV4dE9wXS5tX3JlZW50cnksIHRoaXMpOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgWWFyck9wJiBlbmRPcCA9IG1fb3BzW29wLm1fbmV4dE9wXTsKIAotICAgICAgICAgICAg
Z2VuZXJhdGVSZXR1cm4oKTsKKyAgICAgICAgICAgICAgICBZYXJyT3AqIGJlZ2luT3AgPSAmb3A7
CisgICAgICAgICAgICAgICAgd2hpbGUgKGJlZ2luT3AtPm1fb3AgIT0gT3BCb2R5QWx0ZXJuYXRp
dmVCZWdpbikgeworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYmVnaW5PcC0+bV9vcCA9PSBP
cEJvZHlBbHRlcm5hdGl2ZU5leHQpOworICAgICAgICAgICAgICAgICAgICBiZWdpbk9wID0gJm1f
b3BzW2JlZ2luT3AtPm1fcHJldmlvdXNPcF07CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICBzdGF0ZS5uZXh0QWx0ZXJuYXRpdmUoKTsKLSAgICAgICAgICAgIGlmIChhbHRlcm5hdGl2
ZS0+b25jZVRocm91Z2goKSAmJiBzdGF0ZS5hbHRlcm5hdGl2ZVZhbGlkKCkpCi0gICAgICAgICAg
ICAgICAgc3RhdGUuY2xlYXJCYWNrdHJhY2soKTsKKyAgICAgICAgICAgICAgICBib29sIG9uY2VU
aHJvdWdoID0gZW5kT3AubV9uZXh0T3AgPT0gbm90Rm91bmQ7CiAKLSAgICAgICAgICAgIC8vIGlm
IHRoZXJlIGFyZSBhbnkgbW9yZSBhbHRlcm5hdGl2ZXMsIHBsYW50IHRoZSBjaGVjayBmb3IgaW5w
dXQgYmVmb3JlIGxvb3BpbmcuCi0gICAgICAgICAgICBpZiAoc3RhdGUuYWx0ZXJuYXRpdmVWYWxp
ZCgpKSB7Ci0gICAgICAgICAgICAgICAgc3RhdGUuc2V0SnVtcExpc3RUb1ByaW9yUGFyZW4oMCk7
Ci0gICAgICAgICAgICAgICAgUGF0dGVybkFsdGVybmF0aXZlKiBuZXh0QWx0ZXJuYXRpdmUgPSBz
dGF0ZS5hbHRlcm5hdGl2ZSgpOwotICAgICAgICAgICAgICAgIGlmICghc2V0UmVwZWF0QWx0ZXJu
YXRpdmVMYWJlbHMgJiYgIW5leHRBbHRlcm5hdGl2ZS0+b25jZVRocm91Z2goKSkgewotICAgICAg
ICAgICAgICAgICAgICAvLyBXZSBoYXZlIGhhbmRsZWQgbm9uLXJlcGVhdGluZyBhbHRlcm5hdGl2
ZXMsIGp1bXAgdG8gbmV4dCBpdGVyYXRpb24gCi0gICAgICAgICAgICAgICAgICAgIC8vIGFuZCBs
b29wIG92ZXIgcmVwZWF0aW5nIGFsdGVybmF0aXZlcy4KLSAgICAgICAgICAgICAgICAgICAgc3Rh
dGUuanVtcFRvQmFja3RyYWNrKHRoaXMpOworICAgICAgICAgICAgICAgIC8vIEZpcnN0LCBnZW5l
cmF0ZSBjb2RlIHRvIGhhbmRsZSBjYXNlcyB3aGVyZSB3ZSBiYWNrdHJhY2sgb3V0IG9mIGFuIGF0
dGVtcHRlZCBtYXRjaAorICAgICAgICAgICAgICAgIC8vIG9mIHRoZSBsYXN0IGFsdGVybmF0aXZl
LiBJZiB0aGlzIGlzIGEgJ29uY2UgdGhyb3VnaCcgc2V0IG9mIGFsdGVybmF0aXZlcyB0aGVuIHdl
CisgICAgICAgICAgICAgICAgLy8gaGF2ZSBub3RoaW5nIHRvIGRvIC0gbGluayB0aGlzIHN0cmFp
Z2h0IHRocm91Z2ggdG8gdGhlIEVuZC4KKyAgICAgICAgICAgICAgICBpZiAob25jZVRocm91Z2gp
CisgICAgICAgICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGlua1RvKGVuZE9wLm1f
cmVlbnRyeSwgdGhpcyk7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgIC8vIE9rYXksIHdlJ3JlIGdvaW5nIHRvIG5lZWQgdG8gbG9vcC4gQ2FsY3VsYXRlIHRoZSBk
ZWx0YSBiZXR3ZWVuIHdoZXJlIHRoZSBpbnB1dAorICAgICAgICAgICAgICAgICAgICAvLyBwb3Np
dGlvbiB3YXMsIGFuZCB3aGVyZSB3ZSB3YW50IGl0IHRvIGJlIGFsbG93aW5nIGZvciB0aGUgZmFj
dCB0aGF0IHdlIG5lZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgLy8gaW5jcmVtZW50IGJ5IDEu
IEUuZy4gZm9yIHRoZSByZWdleHAgL2F8eC8gd2UgbmVlZCB0byBpbmNyZW1lbnQgdGhlIHBvc2l0
aW9uIGJ5CisgICAgICAgICAgICAgICAgICAgIC8vIDEgYmV0d2VlbiBsb29wIGl0ZXJhdGlvbnMs
IGJ1dCBmb3IgL2FiY2R8eHl6LyB3ZSBuZWVkIHRvIGluY3JlbWVudCBieSB0d28gd2hlbgorICAg
ICAgICAgICAgICAgICAgICAvLyBsb29waW5nIGZyb20gdGhlIGxhc3QgYWx0ZXJuYXRpdmUgdG8g
dGhlIGZpcnN0LCBmb3IgL2F8eHl6LyB3ZSBuZWVkIHRvIGRlY3JlbWVudAorICAgICAgICAgICAg
ICAgICAgICAvLyBieSAxLCBhbmQgZm9yIC9hfHh5LyB3ZSBkb24ndCBuZWVkIHRvIG1vdmUgdGhl
IGlucHV0IHBvc2l0aW9uIGF0IGFsbC4KKyAgICAgICAgICAgICAgICAgICAgaW50IGRlbHRhTGFz
dEFsdGVybmF0aXZlVG9GaXJzdEFsdGVybmF0aXZlUGx1c09uZSA9IChiZWdpbk9wLT5tX2FsdGVy
bmF0aXZlLT5tX21pbmltdW1TaXplIC0gYWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUpICsgMTsK
KworICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBkb24ndCBuZWVkIHRvIG1vdmUgdGhlIGlu
cHV0IHBvaXN0aW9uLCBhbmQgdGhlIHBhdHRlcm4gaGFzIGEgZml4ZWQgc2l6ZQorICAgICAgICAg
ICAgICAgICAgICAvLyAoaW4gd2hpY2ggY2FzZSB3ZSBvbWl0IHRoZSBzdG9yZSBvZiB0aGUgc3Rh
cnQgaW5kZXggdW50aWwgdGhlIHBhdHRlcm4gaGFzIG1hdGNoZWQpCisgICAgICAgICAgICAgICAg
ICAgIC8vIHRoZW4gd2UgY2FuIGp1c3QgbGluayB0aGUgYmFja3RyYWNrIG91dCBvZiB0aGUgbGFz
dCBhbHRlcm5hdGl2ZSBzdHJhaWdodCB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgLy8gaGVh
ZCBvZiB0aGUgZmlyc3QgYWx0ZXJuYXRpdmUuCisgICAgICAgICAgICAgICAgICAgIGlmICghZGVs
dGFMYXN0QWx0ZXJuYXRpdmVUb0ZpcnN0QWx0ZXJuYXRpdmVQbHVzT25lICYmIG1fcGF0dGVybi5t
X2JvZHktPm1faGFzRml4ZWRTaXplKQorICAgICAgICAgICAgICAgICAgICAgICAgbV9iYWNrdHJh
Y2tpbmdTdGF0ZS5saW5rVG8oYmVnaW5PcC0+bV9yZWVudHJ5LCB0aGlzKTsKKyAgICAgICAgICAg
ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGdl
bmVyYXRlIGEgdHJhbXBvbGluZSBvZiBjb2RlIHRvIGV4ZWN1dGUgYmVmb3JlIGxvb3BpbmcgYmFj
aworICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXJvdW5kIHRvIHRoZSBmaXJzdCBhbHRlcm5h
dGl2ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGluayh0
aGlzKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHBhdHRlcm4gc2l6ZSBp
cyBub3QgZml4ZWQsIHRoZW4gc3RvcmUgdGhlIHN0YXJ0IGluZGV4LCBmb3IgdXNlIGlmIHdlIG1h
dGNoLgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtX3BhdHRlcm4ubV9ib2R5LT5tX2hh
c0ZpeGVkU2l6ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbHRlcm5hdGl2
ZS0+bV9taW5pbXVtU2l6ZSA9PSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dG9yZTMyKGluZGV4LCBBZGRyZXNzKG91dHB1dCkpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZlKGluZGV4LCBy
ZWdUMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbHRlcm5hdGl2ZS0+
bV9taW5pbXVtU2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YjMy
KEltbTMyKGFsdGVybmF0aXZlLT5tX21pbmltdW1TaXplIC0gMSksIHJlZ1QwKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYWRkMzIoSW1tMzIoMSksIHJlZ1QwKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RvcmUzMihyZWdUMCwgQWRkcmVzcyhvdXRwdXQpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChkZWx0YUxhc3RBbHRlcm5hdGl2ZVRvRmlyc3RBbHRlcm5hdGl2ZVBs
dXNPbmUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkMzIoSW1tMzIoZGVsdGFMYXN0
QWx0ZXJuYXRpdmVUb0ZpcnN0QWx0ZXJuYXRpdmVQbHVzT25lKSwgaW5kZXgpOworCisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBMb29wLiBTaW5jZSB0aGlzIGNvZGUgaXMgb25seSByZWFjaGVk
IHdoZW4gd2UgYmFja3RyYWNrIG91dCBvZiB0aGUgbGFzdAorICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gYWx0ZXJuYXRpdmUgKGFuZCBOT1QgbGlua2VkIHRvIGZyb20gdGhlIGlucHV0IGNoZWNr
IHVwb24gZW50cnkgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBsYXN0IGFsdGVy
bmF0aXZlKSB3ZSBrbm93IHRoYXQgdGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBlbm91Z2ggaW5wdXQg
YXMKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlcXVpcmVkIGJ5IHRoZSBsYXN0IGFsdGVy
bmF0aXZlLiBBcyBzdWNoLCB3ZSBvbmx5IG5lZWQgdG8gY2hlY2sgaWYgdGhlCisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBmaXJzdCB3aWxsIHJlcXVpcmUgbW9yZSB0byBydW4gLSBpZiB0aGUg
c2FtZSBvciBsZXNzIGlzIHJlcXVpcmVkIHdlIGNhbgorICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gdW5jb25kaXRpb25hbGx5IGp1bXAuCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVs
dGFMYXN0QWx0ZXJuYXRpdmVUb0ZpcnN0QWx0ZXJuYXRpdmVQbHVzT25lID4gMCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjaGVja0lucHV0KCkubGlua1RvKGJlZ2luT3AtPm1fcmVlbnRy
eSwgdGhpcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAganVtcChiZWdpbk9wLT5tX3JlZW50cnkpOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIGNvdW50VG9DaGVj
a0ZvckZpcnN0QWx0ZXJuYXRpdmUgPSBuZXh0QWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemU7Cisg
ICAgICAgICAgICAgICAgLy8gV2UgY2FuIHJlYWNoIHRoaXMgcG9pbnQgaW4gdGhlIGNvZGUgaW4g
dHdvIHdheXM6CisgICAgICAgICAgICAgICAgLy8gIC0gRmFsbHRocm91Z2ggZnJvbSB0aGUgY29k
ZSBhYm92ZSAoYSByZXBlYXRpbmcgYWx0ZXJuYXRpdmUgYmFja3RyYWNrZWQgb3V0IG9mIGl0cwor
ICAgICAgICAgICAgICAgIC8vICAgIGxhc3QgYWx0ZXJuYXRpdmUsIGFuZCBkaWQgbm90IGhhdmUg
c3VmZmljZW50IGlucHV0IHRvIHJ1biB0aGUgZmlyc3QpLgorICAgICAgICAgICAgICAgIC8vICAt
IFdlIHdpbGwgbG9vcCBiYWNrIHVwIHRvIHRoZSBmb2xsb3dpbmcgbGFiZWwgd2hlbiBhIHJlbGVh
dGluZyBhbHRlcm5hdGl2ZSBsb29wcywKKyAgICAgICAgICAgICAgICAvLyAgICBmb2xsb3dpbmcg
YSBmYWlsZWQgaW5wdXQgY2hlY2suCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAg
ICAvLyBFaXRoZXIgd2F5LCB3ZSBoYXZlIGp1c3QgZmFpbGVkIHRoZSBpbnB1dCBjaGVjayBmb3Ig
dGhlIGZpcnN0IGFsdGVybmF0aXZlLgorICAgICAgICAgICAgICAgIExhYmVsIGZpcnN0SW5wdXRD
aGVja0ZhaWxlZCh0aGlzKTsKKworICAgICAgICAgICAgICAgIC8vIEdlbmVyYXRlIGNvZGUgdG8g
aGFuZGxlIGlucHV0IGNoZWNrIGZhaWx1cmVzIGZyb20gYWx0ZXJuYXRpdmVzIGV4Y2VwdCB0aGUg
bGFzdC4KKyAgICAgICAgICAgICAgICAvLyBwcmV2T3AgaXMgdGhlIGFsdGVybmF0aXZlIHdlJ3Jl
IGhhbmRsaW5nIGEgYmFpbCBvdXQgZnJvbSAoaW5pdGlhbGx5IEJlZ2luKSwgYW5kCisgICAgICAg
ICAgICAgICAgLy8gbmV4dE9wIGlzIHRoZSBhbHRlcm5hdGl2ZSB3ZSB3aWxsIGJlIGF0dGVtcHRp
bmcgdG8gcmVlbnRlciBpbnRvLgorICAgICAgICAgICAgICAgIC8vIAorICAgICAgICAgICAgICAg
IC8vIFdlIHdpbGwgbGluayBpbnB1dCBjaGVjayBmYWlsdXJlcyBmcm9tIHRoZSBmb3J3YXJkcyBt
YXRjaGluZyBwYXRoIGJhY2sgdG8gdGhlIGNvZGUKKyAgICAgICAgICAgICAgICAvLyB0aGF0IGNh
biBoYW5kbGUgdGhlbS4KKyAgICAgICAgICAgICAgICBZYXJyT3AqIHByZXZPcCA9IGJlZ2luT3A7
CisgICAgICAgICAgICAgICAgWWFyck9wKiBuZXh0T3AgPSAmbV9vcHNbYmVnaW5PcC0+bV9uZXh0
T3BdOworICAgICAgICAgICAgICAgIHdoaWxlIChuZXh0T3AtPm1fb3AgIT0gT3BCb2R5QWx0ZXJu
YXRpdmVFbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJldk9wLT5tX2p1bXBzLmxpbmsodGhp
cyk7CisKKyAgICAgICAgICAgICAgICAgICAgaW50IGRlbHRhID0gbmV4dE9wLT5tX2FsdGVybmF0
aXZlLT5tX21pbmltdW1TaXplIC0gcHJldk9wLT5tX2FsdGVybmF0aXZlLT5tX21pbmltdW1TaXpl
OworICAgICAgICAgICAgICAgICAgICBpZiAoZGVsdGEpCisgICAgICAgICAgICAgICAgICAgICAg
ICBhZGQzMihJbW0zMihkZWx0YSksIGluZGV4KTsKKworICAgICAgICAgICAgICAgICAgICAvLyBX
ZSBvbmx5IGdldCBoZXJlIGlmIGFuIGlucHV0IGNoZWNrIGZhaWxzLCBpdCBpcyBvbmx5IHdvcnRo
IGNoZWNraW5nIGFnYWluCisgICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBuZXh0IGFsdGVy
bmF0aXZlIGhhcyBhIG1pbmltdW0gc2l6ZSBsZXNzIHRoYW4gdGhlIGxhc3QuCisgICAgICAgICAg
ICAgICAgICAgIGlmIChkZWx0YSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJ
WE1FOiBpZiB3ZSBhZGRlZCBhbiBleHRyYSBsYWJlbCB0byBZYXJyT3AsIHdlIGNvdWxkIGF2b2lk
IG5lZWRpbmcgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN1YnRyYWN0IGRlbHRhIGJh
Y2sgb3V0LCBhbmQgcmVkdWNlIHRoaXMgY29kZS4gU2hvdWxkIHBlcmZvcm1hbmNlIHRlc3QKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBiZW5lZml0IG9mIHRoaXMuCisgICAgICAgICAg
ICAgICAgICAgICAgICBKdW1wIGZhaWwgPSBqdW1wSWZOb0F2YWlsYWJsZUlucHV0KCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBzdWIzMihJbW0zMihkZWx0YSksIGluZGV4KTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGp1bXAobmV4dE9wLT5tX3JlZW50cnkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgZmFpbC5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIHByZXZPcCA9IG5leHRPcDsKKyAgICAgICAgICAgICAgICAgICAgbmV4dE9w
ID0gJm1fb3BzW25leHRPcC0+bV9uZXh0T3BdOworICAgICAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgICAgICAgICAvLyBJZiB3ZSBnZXQgaGVyZSwgdGhlcmUgdGhlIGxhc3QgaW5wdXQgY2hl
Y2tlZCBmYWlsZWQuCi0gICAgICAgICAgICAgICAgICAgIG5vdEVub3VnaElucHV0Rm9yUHJldmlv
dXNBbHRlcm5hdGl2ZS5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgIC8vIFdlIGZhbGwgdGhy
b3VnaCB0byBoZXJlIGlmIHRoZXJlIGlzIGluc3VmZmljaWVudCBpbnB1dCB0byBydW4gdGhlIGxh
c3QgYWx0ZXJuYXRpdmUuCiAKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUubGlua0FsdGVybmF0
aXZlQmFja3RyYWNrcyh0aGlzKTsKKyAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBpbnN1
ZmZpY2llbnQgaW5wdXQgdG8gcnVuIHRoZSBsYXN0IGFsdGVybmF0aXZlLCB0aGVuIGZvciAnb25j
ZSB0aHJvdWdoJworICAgICAgICAgICAgICAgIC8vIGFsdGVybmF0aXZlcyB3ZSBhcmUgZG9uZSAt
IGp1c3QganVtcCBiYWNrIHVwIGludG8gdGhlIGZvcndhcmRzIG1hdGNoaW5nIHBhdGggYXQgdGhl
IEVuZC4KKyAgICAgICAgICAgICAgICBpZiAob25jZVRocm91Z2gpIHsKKyAgICAgICAgICAgICAg
ICAgICAgb3AubV9qdW1wcy5saW5rVG8oZW5kT3AubV9yZWVudHJ5LCB0aGlzKTsKKyAgICAgICAg
ICAgICAgICAgICAganVtcChlbmRPcC5tX3JlZW50cnkpOworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgLy8gQmFjayB1
cCB0byBzdGFydCB0aGUgbG9vcGluZyBhbHRlcm5hdGl2ZXMuCi0gICAgICAgICAgICAgICAgICAg
IGlmIChjb3VudENoZWNrZWRGb3JDdXJyZW50QWx0ZXJuYXRpdmUpCi0gICAgICAgICAgICAgICAg
ICAgICAgICBzdWIzMihJbW0zMihjb3VudENoZWNrZWRGb3JDdXJyZW50QWx0ZXJuYXRpdmUpLCBp
bmRleCk7CisgICAgICAgICAgICAgICAgLy8gRm9yIHJlcGVhdGluZyBhbHRlcm5hdGl2ZXMsIGxp
bmsgYW55IGlucHV0IGNoZWNrIGZhaWx1cmUgZnJvbSB0aGUgbGFzdCBhbHRlcm5hdGl2ZSB0bwor
ICAgICAgICAgICAgICAgIC8vIHRoaXMgcG9pbnQuCisgICAgICAgICAgICAgICAgb3AubV9qdW1w
cy5saW5rKHRoaXMpOworCisgICAgICAgICAgICAgICAgYm9vbCBuZWVkc1RvVXBkYXRlTWF0Y2hT
dGFydCA9ICFtX3BhdHRlcm4ubV9ib2R5LT5tX2hhc0ZpeGVkU2l6ZTsKKworICAgICAgICAgICAg
ICAgIC8vIENoZWNrIGZvciBjYXNlcyB3aGVyZSBpbnB1dCBwb3NpdGlvbiBpcyBhbHJlYWR5IGlu
Y3JlbWVudGVkIGJ5IDEgZm9yIHRoZSBsYXN0CisgICAgICAgICAgICAgICAgLy8gYWx0ZXJuYXRp
dmUgKHRoaXMgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCB3aGVyZSB0aGUgbWluaW11bSBzaXplIG9m
IHRoZSBib2R5CisgICAgICAgICAgICAgICAgLy8gZGlzanVuY3Rpb24gaXMgMCwgZS5nLiAvYSp8
Yi8pLgorICAgICAgICAgICAgICAgIGlmIChuZWVkc1RvVXBkYXRlTWF0Y2hTdGFydCAmJiBhbHRl
cm5hdGl2ZS0+bV9taW5pbXVtU2l6ZSA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIGlu
ZGV4IGlzIGFscmVhZHkgaW5jcmVtZW50ZWQgYnkgMSwgc28ganVzdCBzdG9yZSBpdCBub3chCisg
ICAgICAgICAgICAgICAgICAgIHN0b3JlMzIoaW5kZXgsIEFkZHJlc3Mob3V0cHV0KSk7CisgICAg
ICAgICAgICAgICAgICAgIG5lZWRzVG9VcGRhdGVNYXRjaFN0YXJ0ID0gZmFsc2U7CisgICAgICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIGZpcnN0QWx0ZXJuYXRpdmUgPSBMYWJl
bCh0aGlzKTsKKyAgICAgICAgICAgICAgICAvLyBDaGVjayB3aGV0aGVyIHRoZXJlIGlzIHN1ZmZp
Y2llbnQgaW5wdXQgdG8gbG9vcC4gSW5jcmVtZW50IHRoZSBpbnB1dCBwb3NpdGlvbiBieQorICAg
ICAgICAgICAgICAgIC8vIG9uZSwgYW5kIGNoZWNrLiBBbHNvIGFkZCBpbiB0aGUgbWluaW11bSBk
aXNqdW5jdGlvbiBzaXplIGJlZm9yZSBjaGVja2luZyAtIHRoZXJlCisgICAgICAgICAgICAgICAg
Ly8gaXMgbm8gcG9pbnQgaW4gbG9vcGluZyBpZiB3ZSdyZSBqdXN0IGdvaW5nIHRvIGZhaWwgYWxs
IHRoZSBpbnB1dCBjaGVja3MgYXJvdW5kCisgICAgICAgICAgICAgICAgLy8gdGhlIG5leHQgaXRl
cmF0aW9uLgorICAgICAgICAgICAgICAgIGludCBkZWx0YUxhc3RBbHRlcm5hdGl2ZVRvQm9keU1p
bmltdW1QbHVzT25lID0gKG1fcGF0dGVybi5tX2JvZHktPm1fbWluaW11bVNpemUgKyAxKSAtIGFs
dGVybmF0aXZlLT5tX21pbmltdW1TaXplOworICAgICAgICAgICAgICAgIGlmIChkZWx0YUxhc3RB
bHRlcm5hdGl2ZVRvQm9keU1pbmltdW1QbHVzT25lKQorICAgICAgICAgICAgICAgICAgICBhZGQz
MihJbW0zMihkZWx0YUxhc3RBbHRlcm5hdGl2ZVRvQm9keU1pbmltdW1QbHVzT25lKSwgaW5kZXgp
OworICAgICAgICAgICAgICAgIEp1bXAgbWF0Y2hGYWlsZWQgPSBqdW1wSWZOb0F2YWlsYWJsZUlu
cHV0KCk7CisKKyAgICAgICAgICAgICAgICBpZiAobmVlZHNUb1VwZGF0ZU1hdGNoU3RhcnQpIHsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCFtX3BhdHRlcm4ubV9ib2R5LT5tX21pbmltdW1TaXpl
KQorICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmUzMihpbmRleCwgQWRkcmVzcyhvdXRwdXQp
KTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBt
b3ZlKGluZGV4LCByZWdUMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdWIzMihJbW0zMiht
X3BhdHRlcm4ubV9ib2R5LT5tX21pbmltdW1TaXplKSwgcmVnVDApOworICAgICAgICAgICAgICAg
ICAgICAgICAgc3RvcmUzMihyZWdUMCwgQWRkcmVzcyhvdXRwdXQpKTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBzdGF0ZS5j
aGVja2VkVG90YWwgPSBjb3VudFRvQ2hlY2tGb3JGaXJzdEFsdGVybmF0aXZlOwotICAgICAgICAg
ICAgICAgICAgICBpZiAoY291bnRUb0NoZWNrRm9yRmlyc3RBbHRlcm5hdGl2ZSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG5vdEVub3VnaElucHV0Rm9yUHJldmlvdXNBbHRlcm5hdGl2ZS5hcHBl
bmQoanVtcElmTm9BdmFpbGFibGVJbnB1dChjb3VudFRvQ2hlY2tGb3JGaXJzdEFsdGVybmF0aXZl
KSk7CisgICAgICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIGhvdyBtdWNoIG1vcmUgaW5wdXQgdGhl
IGZpcnN0IGFsdGVybmF0aXZlIHJlcXVpcmVzIHRoYW4gdGhlIG1pbmltdW0KKyAgICAgICAgICAg
ICAgICAvLyBmb3IgdGhlIGJvZHkgYXMgYSB3aG9sZS4gSWYgbm8gbW9yZSBpcyBuZWVkZWQgdGhl
biB3ZSBkb250IG5lZWQgYW4gYWRkaXRpb25hbAorICAgICAgICAgICAgICAgIC8vIGlucHV0IGNo
ZWNrIGhlcmUgLSBqdW1wIHN0cmFpZ2h0IGJhY2sgdXAgdG8gdGhlIHN0YXJ0IG9mIHRoZSBmaXJz
dCBhbHRlcm5hdGl2ZS4KKyAgICAgICAgICAgICAgICBpbnQgZGVsdGFCb2R5TWluaW11bVRvRmly
c3RBbHRlcm5hdGl2ZSA9IGJlZ2luT3AtPm1fYWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUgLSBt
X3BhdHRlcm4ubV9ib2R5LT5tX21pbmltdW1TaXplOworICAgICAgICAgICAgICAgIGlmICghZGVs
dGFCb2R5TWluaW11bVRvRmlyc3RBbHRlcm5hdGl2ZSkKKyAgICAgICAgICAgICAgICAgICAganVt
cChiZWdpbk9wLT5tX3JlZW50cnkpOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICBhZGQzMihJbW0zMihkZWx0YUJvZHlNaW5pbXVtVG9GaXJzdEFsdGVybmF0aXZl
KSwgaW5kZXgpOworICAgICAgICAgICAgICAgICAgICBjaGVja0lucHV0KCkubGlua1RvKGJlZ2lu
T3AtPm1fcmVlbnRyeSwgdGhpcyk7CisgICAgICAgICAgICAgICAgICAgIGp1bXAoZmlyc3RJbnB1
dENoZWNrRmFpbGVkKTsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAg
Y291bnRDaGVja2VkRm9yQ3VycmVudEFsdGVybmF0aXZlID0gY291bnRUb0NoZWNrRm9yRmlyc3RB
bHRlcm5hdGl2ZTsKKyAgICAgICAgICAgICAgICAvLyBXZSBqdW1wIHRvIGhlcmUgaWYgd2UgaXRl
cmF0ZSB0byB0aGUgcG9pbnQgdGhhdCB0aGVyZSBpcyBpbnN1ZmZpY2llbnQgaW5wdXQgdG8KKyAg
ICAgICAgICAgICAgICAvLyBydW4gYW55IG1hdGNoZXMsIGFuZCBuZWVkIHRvIHJldHVybiBhIGZh
aWx1cmUgc3RhdGUgZnJvbSBKSVQgY29kZS4KKyAgICAgICAgICAgICAgICBtYXRjaEZhaWxlZC5s
aW5rKHRoaXMpOworCisgICAgICAgICAgICAgICAgaWYgKG1fcGF0dGVybi5tX2JvZHktPm1fY2Fs
bEZyYW1lU2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgYWRkUHRyKEltbTMyKG1fcGF0dGVybi5t
X2JvZHktPm1fY2FsbEZyYW1lU2l6ZSAqIHNpemVvZih2b2lkKikpLCBzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CisgICAgICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoLTEpLCByZXR1cm5SZWdp
c3Rlcik7CisgICAgICAgICAgICAgICAgZ2VuZXJhdGVSZXR1cm4oKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgT3BCb2R5QWx0ZXJuYXRp
dmVFbmQ6IHsKKyAgICAgICAgICAgICAgICAvLyBXZSBzaG91bGQgbmV2ZXIgYmFja3RyYWNrIGJh
Y2sgaW50byBhIGJvZHkgZGlzanVuY3Rpb24uCisgICAgICAgICAgICAgICAgQVNTRVJUKG1fYmFj
a3RyYWNraW5nU3RhdGUuaXNFbXB0eSgpKTsKIAotICAgICAgICAgICAgICAgICAgICBmaXJzdEFs
dGVybmF0aXZlSW5wdXRDaGVja2VkID0gTGFiZWwodGhpcyk7CisgICAgICAgICAgICAgICAgUGF0
dGVybkFsdGVybmF0aXZlKiBwcmlvckFsdGVybmF0aXZlID0gbV9vcHNbb3AubV9wcmV2aW91c09w
XS5tX2FsdGVybmF0aXZlOworICAgICAgICAgICAgICAgIG1fY2hlY2tlZCArPSBwcmlvckFsdGVy
bmF0aXZlLT5tX21pbmltdW1TaXplOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICAgICAgICAgIHNldFJlcGVhdEFsdGVybmF0aXZlTGFiZWxzID0g
dHJ1ZTsKKyAgICAgICAgICAgIC8vIE9wU2ltcGxlTmVzdGVkQWx0ZXJuYXRpdmVCZWdpbi9OZXh0
L0VuZAorICAgICAgICAgICAgLy8gT3BOZXN0ZWRBbHRlcm5hdGl2ZUJlZ2luL05leHQvRW5kCisg
ICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gR2VuZXJhdGUgY29kZSBmb3Igd2hlbiB3ZSBi
YWNrdHJhY2sgYmFjayBvdXQgb2YgYW4gYWx0ZXJuYXRpdmUgaW50bworICAgICAgICAgICAgLy8g
YSBCZWdpbiBvciBOZXh0IG5vZGUsIG9yIHdoZW4gdGhlIGVudHJ5IGlucHV0IGNvdW50IGNoZWNr
IGZhaWxzLiBJZgorICAgICAgICAgICAgLy8gdGhlcmUgYXJlIG1vcmUgYWx0ZXJuYXRpdmVzIHdl
IG5lZWQgdG8ganVtcCB0byB0aGUgbmV4dCBhbHRlcm5hdGl2ZSwKKyAgICAgICAgICAgIC8vIGlm
IG5vdCB3ZSBiYWNrdHJhY2sgYmFjayBvdXQgb2YgdGhlIGN1cnJlbnQgc2V0IG9mIHBhcmVudGhl
c2VzLgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIEluIHRoZSBjYXNlIG9mIG5vbi1z
aW1wbGUgbmVzdGVkIGFzc2VydGlvbnMgd2UgbmVkZCB0byBhbHNvIGxpbmsgdGhlCisgICAgICAg
ICAgICAvLyAncmV0dXJuIGFkZHJlc3MnIGFwcHJvcHJpYXRlbHkgdG8gYmFja3RyYWNrIGJhY2sg
b3V0IGludG8gdGhlIGNvcnJlY3QKKyAgICAgICAgICAgIC8vIGFsdGVybmF0aXZlLgorICAgICAg
ICAgICAgY2FzZSBPcFNpbXBsZU5lc3RlZEFsdGVybmF0aXZlQmVnaW46CisgICAgICAgICAgICBj
YXNlIE9wU2ltcGxlTmVzdGVkQWx0ZXJuYXRpdmVOZXh0OgorICAgICAgICAgICAgY2FzZSBPcE5l
c3RlZEFsdGVybmF0aXZlQmVnaW46CisgICAgICAgICAgICBjYXNlIE9wTmVzdGVkQWx0ZXJuYXRp
dmVOZXh0OiB7CisgICAgICAgICAgICAgICAgWWFyck9wJiBuZXh0T3AgPSBtX29wc1tvcC5tX25l
eHRPcF07CisgICAgICAgICAgICAgICAgYm9vbCBpc0JlZ2luID0gb3AubV9wcmV2aW91c09wID09
IG5vdEZvdW5kOworICAgICAgICAgICAgICAgIGJvb2wgaXNMYXN0QWx0ZXJuYXRpdmUgPSBuZXh0
T3AubV9uZXh0T3AgPT0gbm90Rm91bmQ7CisgICAgICAgICAgICAgICAgQVNTRVJUKGlzQmVnaW4g
PT0gKG9wLm1fb3AgPT0gT3BTaW1wbGVOZXN0ZWRBbHRlcm5hdGl2ZUJlZ2luIHx8IG9wLm1fb3Ag
PT0gT3BOZXN0ZWRBbHRlcm5hdGl2ZUJlZ2luKSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKGlz
TGFzdEFsdGVybmF0aXZlID09IChuZXh0T3AubV9vcCA9PSBPcFNpbXBsZU5lc3RlZEFsdGVybmF0
aXZlRW5kIHx8IG5leHRPcC5tX29wID09IE9wTmVzdGVkQWx0ZXJuYXRpdmVFbmQpKTsKKworICAg
ICAgICAgICAgICAgIC8vIFRyZWF0IGFuIGlucHV0IGNoZWNrIGZhaWx1cmUgdGhlIHNhbWUgYXMg
YSBmYWlsZWQgbWF0Y2guCisgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5hcHBl
bmQob3AubV9qdW1wcyk7CisKKyAgICAgICAgICAgICAgICAvLyBTZXQgdGhlIGJhY2t0cmFja3Mg
dG8ganVtcCB0byB0aGUgYXBwcm9wcmlhdGUgcGxhY2UuIFdlIG1heSBuZWVkCisgICAgICAgICAg
ICAgICAgLy8gdG8gbGluayB0aGUgYmFja3RyYWNrcyBpbiBvbmUgb2YgdGhyZWUgZGlmZmVyZW50
IHdheSBkZXBlbmRpbmcgb24KKyAgICAgICAgICAgICAgICAvLyB0aGUgdHlwZSBvZiBhbHRlcmFu
dGl2ZSB3ZSBhcmUgZGVhbGluZyB3aXRoOgorICAgICAgICAgICAgICAgIC8vICAtIEEgc2luZ2xl
IGFsdGVybmF0aXZlLCB3aXRoIG5vIHNpbXBsaW5ncy4KKyAgICAgICAgICAgICAgICAvLyAgLSBU
aGUgbGFzdCBhbHRlcm5hdGl2ZSBvZiBhIHNldCBvZiB0d28gb3IgbW9yZS4KKyAgICAgICAgICAg
ICAgICAvLyAgLSBBbiBhbHRlcm5hdGl2ZSBvdGhlciB0aGFuIHRoZSBsYXN0IG9mIGEgc2V0IG9m
IHR3byBvciBtb3JlLgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gSW4g
dGhlIGNhc2Ugb2YgYSBzaW5nbGUgYWx0ZXJhbnRpdmUgb24gaXRzIG93biwgd2UgZG9uJ3QgbmVl
ZCB0bworICAgICAgICAgICAgICAgIC8vIGp1bXAgYW55d2hlcmUgLSBpZiB0aGUgYWx0ZXJuYXRp
dmUgZmFpbHMgdG8gbWF0Y2ggd2UgY2FuIGp1c3QKKyAgICAgICAgICAgICAgICAvLyBjb250aW51
ZSB0byBiYWNrdHJhY2sgb3V0IG9mIHRoZSBwYXJldGhlc2VzIHdpdGhvdXQganVtcGluZy4KKyAg
ICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIEluIHRoZSBjYXNlIG9mIHRoZSBs
YXN0IGFsdGVybmF0aXZlIGluIGEgc2V0IG9mIG1vcmUgdGhhbiBvbmUsIHdlCisgICAgICAgICAg
ICAgICAgLy8gbmVlZCB0byBqdW1wIHRvIHJldHVybiBiYWNrIG91dCB0byB0aGUgYmVnaW5uaW5n
LiBXZSdsbCBkbyBzbyBieQorICAgICAgICAgICAgICAgIC8vIGFkZGluZyBhIGp1bXAgdG8gdGhl
IEVuZCBub2RlJ3MgbV9qdW1wcyBsaXN0LCBhbmQgbGlua2luZyB0aGlzCisgICAgICAgICAgICAg
ICAgLy8gd2hlbiB3ZSBjb21lIHRvIGdlbmVyYXRlIHRoZSBCZWdpbiBub2RlLiBGb3IgYWx0ZXJu
YXRpdmVzIG90aGVyCisgICAgICAgICAgICAgICAgLy8gdGhhbiB0aGUgbGFzdCwgd2UgbmVlZCB0
byBqdW1wIHRvIHRoZSBuZXh0IGFsdGVybmF0aXZlLgorICAgICAgICAgICAgICAgIC8vCisgICAg
ICAgICAgICAgICAgLy8gSWYgdGhlIGFsdGVybmF0aXZlIGhhZCBhZGp1c3RlZCB0aGUgaW5wdXQg
cG9zc2l0aW9uIHdlIG11c3QgbGluaworICAgICAgICAgICAgICAgIC8vIGJhY2t0cmFja2luZyB0
byBoZXJlLCBjb3JyZWN0LCBhbmQgdGhlbiBqdW1wIG9uLiBJZiBub3Qgd2UgY2FuCisgICAgICAg
ICAgICAgICAgLy8gbGluayB0aGUgYmFja3RyYWNrcyBkaXJlY3RseSB0byB0aGVpciBkZXN0aW5h
dGlvbi4KKyAgICAgICAgICAgICAgICBpZiAob3AubV9jaGVja0FkanVzdCkgeworICAgICAgICAg
ICAgICAgICAgICAvLyBIYW5kbGUgdGhlIGNhc2VzIHdoZXJlIHdlIG5lZWQgdG8gbGluayB0aGUg
YmFja3RyYWNrcyBoZXJlLgorICAgICAgICAgICAgICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRl
LmxpbmsodGhpcyk7CisgICAgICAgICAgICAgICAgICAgIHN1YjMyKEltbTMyKG9wLm1fY2hlY2tB
ZGp1c3QpLCBpbmRleCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghaXNMYXN0QWx0ZXJuYXRp
dmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFuIGFsdGVybmF0aXZlIHRoYXQgaXMg
bm90IHRoZSBsYXN0IHNob3VsZCBqdW1wIHRvIGl0cyBzdWNjZXNzb3IuCisgICAgICAgICAgICAg
ICAgICAgICAgICBqdW1wKG5leHRPcC5tX3JlZW50cnkpOworICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgaWYgKCFpc0JlZ2luKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgbGFz
dCBvZiBtb3JlIHRoYW4gb25lIGFsdGVyYW50aXZlcyBtdXN0IGp1bXAgYmFjayB0byB0aGUgYmVn
bm5pbmcuCisgICAgICAgICAgICAgICAgICAgICAgICBuZXh0T3AubV9qdW1wcy5hcHBlbmQoanVt
cCgpKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIEEgc2luZ2xlIGFsdGVybmF0aXZlIG9uIGl0cyBvd24gY2FuIGZhbGwgdGhyb3VnaC4K
KyAgICAgICAgICAgICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUuZmFsbHRocm91Z2go
KTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGludCBjb3VudFRvQ2hlY2tGb3JOZXh0QWx0ZXJuYXRpdmUgPSBuZXh0
QWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemU7CisgICAgICAgICAgICAgICAgICAgIC8vIEhhbmRs
ZSB0aGUgY2FzZXMgd2hlcmUgd2UgY2FuIGxpbmsgdGhlIGJhY2t0cmFja3MgZGlyZWN0bHkgdG8g
dGhlaXIgZGVzdGluYXRpb25zLgorICAgICAgICAgICAgICAgICAgICBpZiAoIWlzTGFzdEFsdGVy
bmF0aXZlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBBbiBhbHRlcm5hdGl2ZSB0aGF0
IGlzIG5vdCB0aGUgbGFzdCBzaG91bGQganVtcCB0byBpdHMgc3VjY2Vzc29yLgorICAgICAgICAg
ICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5rVG8obmV4dE9wLm1fcmVlbnRy
eSwgdGhpcyk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWlzQmVnaW4pIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBsYXN0IG9mIG1vcmUgdGhhbiBvbmUgYWx0ZXJh
bnRpdmVzIG11c3QganVtcCBiYWNrIHRvIHRoZSBiZWdubmluZy4KKyAgICAgICAgICAgICAgICAg
ICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUudGFrZUJhY2t0cmFja3NUb0p1bXBMaXN0KG5leHRP
cC5tX2p1bXBzLCB0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAvLyBJbiB0aGUgY2FzZSBvZiBhIHNpbmdsZSBhbHRlcm5hdGl2ZSBvbiBpdHMgb3duIGRv
IG5vdGhpbmcgLSBpdCBjYW4gZmFsbCB0aHJvdWdoLgorICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgd2UndmUgaGFuZGxlZCB0aGUgYmFja3RyYWNr
aW5nIGJhY2sgaW50byB0aGlzIG5vZGUuCisgICAgICAgICAgICAgICAgLy8gTm93IGxpbmsgYW55
IGJhY2t0cmFja3MgdGhhdCBuZWVkIHRvIGp1bXAgdG8gaGVyZS4KKworICAgICAgICAgICAgICAg
IC8vIEZvciBub24tc2ltcGxlIGFsdGVybmF0aXZlcywgbGluayB0aGUgYWx0ZXJuYXRpdmUncyAn
cmV0dXJuIGFkZHJlc3MnCisgICAgICAgICAgICAgICAgLy8gc28gdGhhdCB3ZSBiYWNrdHJhY2sg
YmFjayBvdXQgaW50byB0aGUgcHJldmlvdXMgYWx0ZXJuYXRpdmUuCisgICAgICAgICAgICAgICAg
aWYgKG9wLm1fb3AgPT0gT3BOZXN0ZWRBbHRlcm5hdGl2ZU5leHQpCisgICAgICAgICAgICAgICAg
ICAgIG1fYmFja3RyYWNraW5nU3RhdGUuYXBwZW5kKG9wLm1fcmV0dXJuQWRkcmVzcyk7CisKKyAg
ICAgICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIGFsdGVybmF0aXZlLCB0
aGVuIHRoZSBsYXN0IGFsdGVybmF0aXZlIHdpbGwKKyAgICAgICAgICAgICAgICAvLyBoYXZlIHBs
YW50ZWQgYSBqdW1wIHRvIGJlIGxpbmtlZCB0byB0aGUgZW5kLiBUaGlzIGp1bXAgd2FzIGFkZGVk
IHRvIHRoZQorICAgICAgICAgICAgICAgIC8vIEVuZCBub2RlJ3MgbV9qdW1wcyBsaXN0LiBJZiB3
ZSBhcmUgYmFjayBhdCB0aGUgYmVnaW5uaW5nLCBsaW5rIGl0IGhlcmUuCisgICAgICAgICAgICAg
ICAgaWYgKGlzQmVnaW4pIHsKKyAgICAgICAgICAgICAgICAgICAgWWFyck9wKiBlbmRPcCA9ICZt
X29wc1tvcC5tX25leHRPcF07CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIChlbmRPcC0+bV9u
ZXh0T3AgIT0gbm90Rm91bmQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChlbmRP
cC0+bV9vcCA9PSBPcFNpbXBsZU5lc3RlZEFsdGVybmF0aXZlTmV4dCB8fCBlbmRPcC0+bV9vcCA9
PSBPcE5lc3RlZEFsdGVybmF0aXZlTmV4dCk7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmRP
cCA9ICZtX29wc1tlbmRPcC0+bV9uZXh0T3BdOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIEFTU0VSVChlbmRPcC0+bV9vcCA9PSBPcFNpbXBsZU5lc3RlZEFsdGVy
bmF0aXZlRW5kIHx8IGVuZE9wLT5tX29wID09IE9wTmVzdGVkQWx0ZXJuYXRpdmVFbmQpOworICAg
ICAgICAgICAgICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmFwcGVuZChlbmRPcC0+bV9qdW1w
cyk7CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIGlmIChjb3VudENo
ZWNrZWRGb3JDdXJyZW50QWx0ZXJuYXRpdmUgPiBjb3VudFRvQ2hlY2tGb3JOZXh0QWx0ZXJuYXRp
dmUpIHsgLy8gQ0FTRSAxOiBjdXJyZW50IGFsdGVybmF0aXZlIHdhcyBsb25nZXIgdGhhbiB0aGUg
bmV4dCBvbmUuCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBnZXQgaGVyZSwgdGhl
biB0aGUgbGFzdCBpbnB1dCBjaGVja2VkIGZhaWxlZC4KLSAgICAgICAgICAgICAgICAgICAgICAg
IG5vdEVub3VnaElucHV0Rm9yUHJldmlvdXNBbHRlcm5hdGl2ZS5saW5rKHRoaXMpOwotCi0gICAg
ICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiBzdWZmaWNlbnQgaW5wdXQgYXZhaWxhYmxl
IHRvIHJ1biB0aGUgbmV4dCBhbHRlcm5hdGl2ZSAKLSAgICAgICAgICAgICAgICAgICAgICAgIG5v
dEVub3VnaElucHV0Rm9yUHJldmlvdXNBbHRlcm5hdGl2ZS5hcHBlbmQoanVtcElmTm9BdmFpbGFi
bGVJbnB1dChjb3VudFRvQ2hlY2tGb3JOZXh0QWx0ZXJuYXRpdmUgLSBjb3VudENoZWNrZWRGb3JD
dXJyZW50QWx0ZXJuYXRpdmUpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGFyZSBu
b3cgaW4gdGhlIGNvcnJlY3Qgc3RhdGUgdG8gZW50ZXIgdGhlIG5leHQgYWx0ZXJuYXRpdmU7IHRo
aXMgYWRkIGlzIG9ubHkgcmVxdWlyZWQKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIG1p
cnJvciBhbmQgcmV2ZXJ0IG9wZXJhdGlvbiBvZiB0aGUgc3ViMzIsIGp1c3QgYmVsb3cuCi0gICAg
ICAgICAgICAgICAgICAgICAgICBhZGQzMihJbW0zMihjb3VudENoZWNrZWRGb3JDdXJyZW50QWx0
ZXJuYXRpdmUgLSBjb3VudFRvQ2hlY2tGb3JOZXh0QWx0ZXJuYXRpdmUpLCBpbmRleCk7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGdldCBoZXJlLCB0aGVuIHRoZSBsYXN0IGlu
cHV0IGNoZWNrZWQgcGFzc2VkLgotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUubGlua0Fs
dGVybmF0aXZlQmFja3RyYWNrcyh0aGlzKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8g
Tm8gbmVlZCB0byBjaGVjayBpZiB3ZSBjYW4gcnVuIHRoZSBuZXh0IGFsdGVybmF0aXZlLCBzaW5j
ZSBpdCBpcyBzaG9ydGVyIC0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGp1c3QgdXBkYXRl
IGluZGV4LgotICAgICAgICAgICAgICAgICAgICAgICAgc3ViMzIoSW1tMzIoY291bnRDaGVja2Vk
Rm9yQ3VycmVudEFsdGVybmF0aXZlIC0gY291bnRUb0NoZWNrRm9yTmV4dEFsdGVybmF0aXZlKSwg
aW5kZXgpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvdW50Q2hlY2tlZEZvckN1
cnJlbnRBbHRlcm5hdGl2ZSA8IGNvdW50VG9DaGVja0Zvck5leHRBbHRlcm5hdGl2ZSkgeyAvLyBD
QVNFIDI6IG5leHQgYWx0ZXJuYXRpdmUgaXMgbG9uZ2VyIHRoYW4gdGhlIGN1cnJlbnQgb25lLgot
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgZ2V0IGhlcmUsIHRoZW4gdGhlIGxhc3Qg
aW5wdXQgY2hlY2tlZCBmYWlsZWQuCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGVy
ZSBpcyBpbnN1ZmZpY2llbnQgaW5wdXQgdG8gcnVuIHRoZSBjdXJyZW50IGFsdGVybmF0aXZlLCBh
bmQgdGhlIG5leHQgYWx0ZXJuYXRpdmUgaXMgbG9uZ2VyLAotICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gdGhlbiB0aGVyZSBpcyBkZWZpbml0ZWx5IG5vdCBlbm91Z2ggaW5wdXQgdG8gcnVuIGl0
IC0gZG9uJ3QgZXZlbiBjaGVjay4gSnVzdCBhZGp1c3QgaW5kZXgsIGFzIGlmCi0gICAgICAgICAg
ICAgICAgICAgICAgICAvLyB3ZSBoYWQgY2hlY2tlZC4KLSAgICAgICAgICAgICAgICAgICAgICAg
IG5vdEVub3VnaElucHV0Rm9yUHJldmlvdXNBbHRlcm5hdGl2ZS5saW5rKHRoaXMpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgYWRkMzIoSW1tMzIoY291bnRUb0NoZWNrRm9yTmV4dEFsdGVybmF0
aXZlIC0gY291bnRDaGVja2VkRm9yQ3VycmVudEFsdGVybmF0aXZlKSwgaW5kZXgpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgbm90RW5vdWdoSW5wdXRGb3JQcmV2aW91c0FsdGVybmF0aXZlLmFw
cGVuZChqdW1wKCkpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgbmV4dCBhbHRl
cm5hdGl2ZSBpcyBsb25nZXIgdGhhbiB0aGUgY3VycmVudCBvbmU7IGNoZWNrIHRoZSBkaWZmZXJl
bmNlLgotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUubGlua0FsdGVybmF0aXZlQmFja3Ry
YWNrcyh0aGlzKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgbm90RW5vdWdoSW5wdXRGb3JQ
cmV2aW91c0FsdGVybmF0aXZlLmFwcGVuZChqdW1wSWZOb0F2YWlsYWJsZUlucHV0KGNvdW50VG9D
aGVja0Zvck5leHRBbHRlcm5hdGl2ZSAtIGNvdW50Q2hlY2tlZEZvckN1cnJlbnRBbHRlcm5hdGl2
ZSkpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeyAvLyBDQVNFIDM6IEJvdGggYWx0ZXJu
YXRpdmVzIGFyZSB0aGUgc2FtZSBsZW5ndGguCi0gICAgICAgICAgICAgICAgICAgICAgICBBU1NF
UlQoY291bnRDaGVja2VkRm9yQ3VycmVudEFsdGVybmF0aXZlID09IGNvdW50VG9DaGVja0Zvck5l
eHRBbHRlcm5hdGl2ZSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBuZXh0
IGFsdGVyYXRpdmUgaXMgdGhlIHNhbWUgbGVuZ3RoIGFzIHRoaXMgb25lLCB0aGVuIG5vIG5lZWQg
dG8gY2hlY2sgdGhlIGlucHV0IC0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoZXJl
IHdhcyBzdWZmaWNlbnQgaW5wdXQgdG8gcnVuIHRoZSBjdXJyZW50IGFsdGVybmF0aXZlIHRoZW4g
dGhlcmUgaXMgc3VmZmljaWVudAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW5wdXQgdG8g
cnVuIHRoZSBuZXh0IG9uZTsgaWYgbm90LCB0aGVyZSBpc24ndC4KLSAgICAgICAgICAgICAgICAg
ICAgICAgIHN0YXRlLmxpbmtBbHRlcm5hdGl2ZUJhY2t0cmFja3ModGhpcyk7CisgICAgICAgICAg
ICAgICAgaWYgKCFpc0JlZ2luKSB7CisgICAgICAgICAgICAgICAgICAgIFlhcnJPcCYgbGFzdE9w
ID0gbV9vcHNbb3AubV9wcmV2aW91c09wXTsKKyAgICAgICAgICAgICAgICAgICAgbV9jaGVja2Vk
ICs9IGxhc3RPcC5tX2NoZWNrQWRqdXN0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBtX2NoZWNrZWQgLT0gb3AubV9jaGVja0FkanVzdDsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgT3BTaW1wbGVOZXN0ZWRBbHRlcm5h
dGl2ZUVuZDoKKyAgICAgICAgICAgIGNhc2UgT3BOZXN0ZWRBbHRlcm5hdGl2ZUVuZDogeworICAg
ICAgICAgICAgICAgIFBhdHRlcm5UZXJtKiB0ZXJtID0gb3AubV90ZXJtOworCisgICAgICAgICAg
ICAgICAgLy8gSWYgd2UgYmFja3RyYWNrIGludG8gdGhlIGVuZCBvZiBhIHNpbXBsZSBzdWJwYXR0
ZXJuIGRvIG5vdGhpbmc7CisgICAgICAgICAgICAgICAgLy8ganVzdCBjb250aW51ZSB0aHJvdWdo
IGludG8gdGhlIGxhc3QgYWx0ZXJuYXRpdmUuIElmIHdlIGJhY2t0cmFjaworICAgICAgICAgICAg
ICAgIC8vIGludG8gdGhlIGVuZCBvZiBhIG5vbi1zaW1wbGUgc2V0IG9mIGFsdGVybnRpdmVzIHdl
IG5lZWQgdG8ganVtcAorICAgICAgICAgICAgICAgIC8vIHRvIHRoZSBiYWNrdHJhY2tpbmcgcmV0
dXJuIGFkZHJlc3Mgc2V0IHVwIGR1cmluZyBnZW5lcmF0aW9uLgorICAgICAgICAgICAgICAgIGlm
IChvcC5tX29wID09IE9wTmVzdGVkQWx0ZXJuYXRpdmVFbmQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5rKHRoaXMpOworCisgICAgICAgICAgICAgICAgICAg
IC8vIFBsYW50IGEganVtcCB0byB0aGUgcmV0dXJuIGFkZHJlc3MuCisgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiA9IHRlcm0tPmZyYW1lTG9jYXRp
b247CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFsdGVybmF0aXZlRnJhbWVMb2NhdGlv
biA9IHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRl
cm0tPnF1YW50aXR5VHlwZSAhPSBRdWFudGlmaWVyRml4ZWRDb3VudCkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGFsdGVybmF0aXZlRnJhbWVMb2NhdGlvbiArPSBZYXJyU3RhY2tTcGFjZUZvckJh
Y2tUcmFja0luZm9QYXJlbnRoZXNlc09uY2U7CisgICAgICAgICAgICAgICAgICAgIGxvYWRGcm9t
RnJhbWVBbmRKdW1wKGFsdGVybmF0aXZlRnJhbWVMb2NhdGlvbik7CisKKyAgICAgICAgICAgICAg
ICAgICAgLy8gTGluayB0aGUgRGF0YUxhYmVsUHRyIGFzc29jaWF0ZWQgd2l0aCB0aGUgZW5kIG9m
IHRoZSBsYXN0CisgICAgICAgICAgICAgICAgICAgIC8vIGFsdGVybmF0aXZlIHRvIHRoaXMgcG9p
bnQuCisgICAgICAgICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUuYXBwZW5kKG9wLm1f
cmV0dXJuQWRkcmVzcyk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgWWFy
ck9wJiBsYXN0T3AgPSBtX29wc1tvcC5tX3ByZXZpb3VzT3BdOworICAgICAgICAgICAgICAgIG1f
Y2hlY2tlZCArPSBsYXN0T3AubV9jaGVja0FkanVzdDsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gT3BQYXJlbnRoZXNlc1N1YnBhdHRlcm5P
bmNlQmVnaW4vRW5kCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUg
YmFja3RyYWNraW5nIGJhY2sgb3V0IG9mIGEgY2FwdHVyaW5nIHN1YnBhdHRlcm4gd2UgbmVlZAor
ICAgICAgICAgICAgLy8gdG8gY2xlYXIgdGhlIHN0YXJ0IGluZGV4IGluIHRoZSBtYXRjaGVzIG91
dHB1dCBhcnJheSwgdG8gcmVjb3JkIHRoYXQKKyAgICAgICAgICAgIC8vIHRoaXMgc3VicGF0dGVy
biBoYXMgbm90IGJlZW4gY2FwdHVyZWQuCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8g
V2hlbiBiYWNrdHJhY2tpbmcgYmFjayBvdXQgb2YgYSBHcmVlZHkgcXVhbnRpZmllZCBzdWJwYXR0
ZXJuIHdlIG5lZWQKKyAgICAgICAgICAgIC8vIHRvIGNhdGNoIHRoaXMsIGFuZCB0cnkgcnVubmlu
ZyB0aGUgcmVtYWluZGVyIG9mIHRoZSBhbHRlcm5hdGl2ZSBhZnRlcgorICAgICAgICAgICAgLy8g
dGhlIHN1YnBhdHRlcm4gYWdhaW4sIHNraXBwaW5nIHRoZSBwYXJlbnRoZXNlcy4KKyAgICAgICAg
ICAgIC8vCisgICAgICAgICAgICAvLyBVcG9uIGJhY2t0cmFja2luZyBiYWNrIGludG8gYSBxdWFu
dGlmaWVkIHNldCBvZiBwYXJldGhlc2VzIHdlIG5lZWQgdG8KKyAgICAgICAgICAgIC8vIGNoZWNr
IHdoZXRoZXIgd2Ugd2VyZSBjdXJyZW50bHkgc2tpcHBpbmcgdGhlIHN1YnBhdHRlcm4uIElmIG5v
dCwgd2UKKyAgICAgICAgICAgIC8vIGNhbiBiYWNrdHJhY2sgaW50byB0aGVtLCBpZiB3ZSB3ZXJl
IHdlIG5lZWQgdG8gZWl0aGVyIGJhY2t0cmFjayBiYWNrCisgICAgICAgICAgICAvLyBvdXQgb2Yg
dGhlIHN0YXJ0IG9mIHRoZSBwYXJlbnRoZXNlcywgb3IganVtcCBiYWNrIHRvIHRoZSBmb3J3YXJk
cworICAgICAgICAgICAgLy8gbWF0Y2hpbmcgc3RhcnQsIGRlcGVuZGluZyBvZiB3aGV0aGVyIHRo
ZSBtYXRjaCBpcyBHcmVlZHkgb3IgTm9uR3JlZWR5LgorICAgICAgICAgICAgY2FzZSBPcFBhcmVu
dGhlc2VzU3VicGF0dGVybk9uY2VCZWdpbjogeworICAgICAgICAgICAgICAgIFBhdHRlcm5UZXJt
KiB0ZXJtID0gb3AubV90ZXJtOworICAgICAgICAgICAgICAgIEFTU0VSVCh0ZXJtLT5xdWFudGl0
eUNvdW50ID09IDEpOworCisgICAgICAgICAgICAgICAgLy8gV2Ugb25seSBuZWVkIHRvIGJhY2t0
cmFjayB0byB0aGlzcG9pbnQgaWYgY2FwdHVyaW5nIG9yIGdyZWVkeS4KKyAgICAgICAgICAgICAg
ICBpZiAodGVybS0+Y2FwdHVyZSgpIHx8IHRlcm0tPnF1YW50aXR5VHlwZSA9PSBRdWFudGlmaWVy
R3JlZWR5KSB7CisgICAgICAgICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGluayh0
aGlzKTsKKworICAgICAgICAgICAgICAgICAgICAvLyBJZiBjYXB1dHJpbmcsIGNsZWFyIHRoZSBj
YXB0dXJlICh3ZSBvbmx5IG5lZWQgdG8gcmVzZXQgc3RhcnQpLgorICAgICAgICAgICAgICAgICAg
ICBpZiAodGVybS0+Y2FwdHVyZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmUzMihU
cnVzdGVkSW1tMzIoLTEpLCBBZGRyZXNzKG91dHB1dCwgKHRlcm0tPnBhcmVudGhlc2VzLnN1YnBh
dHRlcm5JZCA8PCAxKSAqIHNpemVvZihpbnQpKSk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8g
SWYgR3JlZWR5LCBqdW1wIHRvIHRoZSBlbmQuCisgICAgICAgICAgICAgICAgICAgIGlmICh0ZXJt
LT5xdWFudGl0eVR5cGUgPT0gUXVhbnRpZmllckdyZWVkeSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gQ2xlYXIgdGhlIGZsYWcgaW4gdGhlIHN0YWNrZnJhbWUgaW5kaWNhdGluZyB3ZSBy
YW4gdGhyb3VnaCB0aGUgc3VicGF0dGVybi4KKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiA9IHRlcm0tPmZyYW1lTG9jYXRpb247CisgICAg
ICAgICAgICAgICAgICAgICAgICBzdG9yZVRvRnJhbWUoVHJ1c3RlZEltbTMyKC0xKSwgcGFyZW50
aGVzZXNGcmFtZUxvY2F0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEp1bXAgdG8g
YWZ0ZXIgdGhlIHBhcmVudGhlc2VzLCBza2lwcGluZyB0aGUgc3VicGF0dGVybi4KKyAgICAgICAg
ICAgICAgICAgICAgICAgIGp1bXAobV9vcHNbb3AubV9uZXh0T3BdLm1fcmVlbnRyeSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBBIGJhY2t0cmFjayBmcm9tIGFmdGVyIHRoZSBwYXJlbnRo
ZXNlcywgd2hlbiBza2lwcGluZyB0aGUgc3VicGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIHdpbGwganVtcCBiYWNrIHRvIGhlcmUuCisgICAgICAgICAgICAgICAgICAgICAgICBv
cC5tX2p1bXBzLmxpbmsodGhpcyk7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgc3RhdGUuY2hlY2tlZFRvdGFsIC09IGNvdW50Q2hlY2tlZEZvckN1cnJlbnRBbHRl
cm5hdGl2ZTsKLSAgICAgICAgICAgICAgICAgICAgY291bnRDaGVja2VkRm9yQ3VycmVudEFsdGVy
bmF0aXZlID0gY291bnRUb0NoZWNrRm9yTmV4dEFsdGVybmF0aXZlOwotICAgICAgICAgICAgICAg
ICAgICBzdGF0ZS5jaGVja2VkVG90YWwgKz0gY291bnRDaGVja2VkRm9yQ3VycmVudEFsdGVybmF0
aXZlOworCisgICAgICAgICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUuZmFsbHRocm91
Z2goKTsKICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgT3BQYXJlbnRoZXNlc1N1YnBhdHRl
cm5PbmNlRW5kOiB7CisgICAgICAgICAgICAgICAgUGF0dGVyblRlcm0qIHRlcm0gPSBvcC5tX3Rl
cm07CiAKLSAgICAgICAgLy8gSWYgd2UgZ2V0IGhlcmUsIGFsbCBBbHRlcm5hdGl2ZXMgZmFpbGVk
Li4uCisgICAgICAgICAgICAgICAgaWYgKHRlcm0tPnF1YW50aXR5VHlwZSAhPSBRdWFudGlmaWVy
Rml4ZWRDb3VudCkgeworICAgICAgICAgICAgICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmxp
bmsodGhpcyk7CiAKLSAgICAgICAgc3RhdGUuY2hlY2tlZFRvdGFsIC09IGNvdW50Q2hlY2tlZEZv
ckN1cnJlbnRBbHRlcm5hdGl2ZTsKKyAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgd2hldGhl
ciB3ZSBzaG91bGQgYmFja3RyYWNrIGJhY2sgaW50byB0aGUgcGFyZXRoZXNlcywgb3IgaWYgd2UK
KyAgICAgICAgICAgICAgICAgICAgLy8gYXJlIGN1cnJlbnRseSBpbiBhIHN0YXRlIHdoZXJlIHdl
IGhhZCBza2lwcGVkIG92ZXIgdGhlIHN1YnBhdHRlcm4KKyAgICAgICAgICAgICAgICAgICAgLy8g
KGluIHdoaWNoIGNhc2UgdGhlIGZsYWcgdmFsdWUgb24gdGhlIHN0YWNrIHdpbGwgYmUgLTEpLgor
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gPSB0
ZXJtLT5mcmFtZUxvY2F0aW9uOworICAgICAgICAgICAgICAgICAgICBKdW1wIGhhZFNraXBwZWQg
PSBicmFuY2gzMihFcXVhbCwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgcGFyZW50aGVz
ZXNGcmFtZUxvY2F0aW9uICogc2l6ZW9mKHZvaWQqKSksIFRydXN0ZWRJbW0zMigtMSkpOworCisg
ICAgICAgICAgICAgICAgICAgIGlmICh0ZXJtLT5xdWFudGl0eVR5cGUgPT0gUXVhbnRpZmllckdy
ZWVkeSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gRm9yIEdyZWVkeSBwYXJldGhlc2Vz
LCB3ZSBza2lwIGFmdGVyIGhhdmluZyBhbHJlYWR5IHRyaWVkIGdvaW5nCisgICAgICAgICAgICAg
ICAgICAgICAgICAvLyB0aHJvdWdoIHRoZSBzdWJwYXR0ZXJuLCBzbyBpZiB3ZSBnZXQgaGVyZSB3
ZSdyZSBkb25lLgorICAgICAgICAgICAgICAgICAgICAgICAgWWFyck9wJiBiZWdpbk9wID0gbV9v
cHNbb3AubV9wcmV2aW91c09wXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luT3AubV9q
dW1wcy5hcHBlbmQoaGFkU2tpcHBlZCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBGb3IgTm9uR3JlZWR5IHBhcmV0aGVzZXMsIHdlIHRy
eSBza2lwcGluZyB0aGUgc3VicGF0dGVybiBmaXJzdCwKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIHNvIGlmIHdlIGdldCBoZXJlIHdlIG5lZWQgdG8gdHJ5IHJ1bm5pbmcgdGhyb3VnaCB0aGUg
c3VicGF0dGVybgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gbmV4dC4gSnVtcCBiYWNrIHRv
IHRoZSBzdGFydCBvZiB0aGUgcGFyZW50aGVzZXMgaW4gdGhlIGZvcndhcmRzCisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBtYXRjaGluZyBwYXRoLgorICAgICAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKHRlcm0tPnF1YW50aXR5VHlwZSA9PSBRdWFudGlmaWVyTm9uR3JlZWR5KTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFlhcnJPcCYgYmVnaW5PcCA9IG1fb3BzW29wLm1fcHJldmlvdXNP
cF07CisgICAgICAgICAgICAgICAgICAgICAgICBoYWRTa2lwcGVkLmxpbmtUbyhiZWdpbk9wLm1f
cmVlbnRyeSwgdGhpcyk7CisgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICBpZiAoIXNl
dFJlcGVhdEFsdGVybmF0aXZlTGFiZWxzKSB7Ci0gICAgICAgICAgICAvLyBJZiB0aGVyZSBhcmUg
bm8gYWx0ZXJuYXRpdmVzIHRoYXQgbmVlZCByZXBlYXRpbmcgKGFsbCBhcmUgbWFya2VkICdvbmNl
VGhyb3VnaCcpIHRoZW4ganVzdCBsaW5rCi0gICAgICAgICAgICAvLyB0aGUgbWF0Y2ggZmFpbHVy
ZXMgdG8gdGhpcyBwb2ludCwgYW5kIGZhbGwgdGhyb3VnaCB0byB0aGUgcmV0dXJuIGJlbG93Lgot
ICAgICAgICAgICAgc3RhdGUubGlua0FsdGVybmF0aXZlQmFja3RyYWNrcyh0aGlzLCB0cnVlKTsK
KyAgICAgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5mYWxsdGhyb3VnaCgpOwor
ICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgbm90RW5vdWdoSW5wdXRGb3JQcmV2aW91
c0FsdGVybmF0aXZlLmxpbmsodGhpcyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAv
LyBIb3cgbXVjaCBtb3JlIGlucHV0IG5lZWQgdGhlcmUgYmUgdG8gYmUgYWJsZSB0byByZXRyeSBm
cm9tIHRoZSBmaXJzdCBhbHRlcm5hdGl2ZT8KLSAgICAgICAgICAgIC8vIGV4YW1wbGVzOgotICAg
ICAgICAgICAgLy8gICAveWFycl9qaXQvIG9yIC93cmVjfHBjcmUvCi0gICAgICAgICAgICAvLyAg
ICAgSW4gdGhlc2UgZXhhbXBsZXMgd2UgbmVlZCBjaGVjayBmb3Igb25lIG1vcmUgaW5wdXQgYmVm
b3JlIGxvb3BpbmcuCi0gICAgICAgICAgICAvLyAgIC95YXJyX2ppdHxwY3JlLwotICAgICAgICAg
ICAgLy8gICAgIEluIHRoaXMgY2FzZSB3ZSBuZWVkIGNoZWNrIGZvciA1IG1vcmUgaW5wdXQgdG8g
bG9vcCAoKzQgdG8gYWxsb3cgZm9yIHRoZSBmaXJzdCBhbHRlcmF0aXZlCi0gICAgICAgICAgICAv
LyAgICAgYmVpbmcgZm91ciBsb25nZXIgdGhhbiB0aGUgbGFzdCBhbHRlcm5hdGl2ZSBjaGVja2Vk
LCBhbmQgYW5vdGhlciArMSB0byBlZmZlY3RpdmVseSBtb3ZlCi0gICAgICAgICAgICAvLyAgICAg
dGhlIHN0YXJ0IHBvc2l0aW9uIGFsb25nIGJ5IG9uZSkuCi0gICAgICAgICAgICAvLyAgIC95YXJy
fHJ1bGVzLyBvciAvd3JlY3xub3Rzb211Y2gvCi0gICAgICAgICAgICAvLyAgICAgSW4gdGhlc2Ug
ZXhhbXBsZXMsIHByb3ZpZGVkIHRoYXQgdGhlcmUgd2FzIHN1ZmZpY2llbnQgaW5wdXQgdG8gaGF2
ZSBqdXN0IGJlZW4gbWF0Y2hpbmcgZm9yCi0gICAgICAgICAgICAvLyAgICAgdGhlIHNlY29uZCBh
bHRlcm5hdGl2ZSB3ZSBjYW4gbG9vcCB3aXRob3V0IGNoZWNraW5nIGZvciBhdmFpbGFibGUgaW5w
dXQgKHNpbmNlIHRoZSBzZWNvbmQKLSAgICAgICAgICAgIC8vICAgICBhbHRlcm5hdGl2ZSBpcyBs
b25nZXIgdGhhbiB0aGUgZmlyc3QpLiAgSW4gdGhlIGxhdHRlciBleGFtcGxlIHdlIG5lZWQgdG8g
ZGVjcmVtZW50IGluZGV4Ci0gICAgICAgICAgICAvLyAgICAgKGJ5IDQpIHNvIHRoZSBzdGFydCBw
b3NpdGlvbiBpcyBvbmx5IHByb2dyZXNzZWQgYnkgMSBmcm9tIHRoZSBsYXN0IGl0ZXJhdGlvbi4K
LSAgICAgICAgICAgIGludCBpbmNyZW1lbnRGb3JOZXh0SXRlciA9IChjb3VudFRvQ2hlY2tGb3JG
aXJzdEFsdGVybmF0aXZlIC0gY291bnRDaGVja2VkRm9yQ3VycmVudEFsdGVybmF0aXZlKSArIDE7
Ci0KLSAgICAgICAgICAgIC8vIEZpcnN0LCBkZWFsIHdpdGggdGhlIGNhc2VzIHdoZXJlIHRoZXJl
IHdhcyBzdWZmaWNpZW50IGlucHV0IHRvIHRyeSB0aGUgbGFzdCBhbHRlcm5hdGl2ZS4KLSAgICAg
ICAgICAgIGlmIChpbmNyZW1lbnRGb3JOZXh0SXRlciA+IDApIC8vIFdlIG5lZWQgdG8gY2hlY2sg
Zm9yIG1vcmUgaW5wdXQgYW55d2F5LCBmYWxsIHRocm91Z2ggdG8gdGhlIGNoZWNraW5nIGJlbG93
LgotICAgICAgICAgICAgICAgIHN0YXRlLmxpbmtBbHRlcm5hdGl2ZUJhY2t0cmFja3ModGhpcywg
dHJ1ZSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChtX3BhdHRlcm4ubV9ib2R5LT5tX2hhc0ZpeGVk
U2l6ZSAmJiAhaW5jcmVtZW50Rm9yTmV4dEl0ZXIpIC8vIE5vIG5lZWQgdG8gdXBkYXRlIGFueXRo
aW5nLCBsaW5rIHRoZXNlIGJhY2t0cmFja3Mgc3RyYWlnaHQgdG8gdGhlIHRvIHBvZiB0aGUgbG9v
cCEKLSAgICAgICAgICAgICAgICBzdGF0ZS5saW5rQWx0ZXJuYXRpdmVCYWNrdHJhY2tzVG8odGhp
cywgZmlyc3RBbHRlcm5hdGl2ZUlucHV0Q2hlY2tlZCwgdHJ1ZSk7Ci0gICAgICAgICAgICBlbHNl
IHsgLy8gbm8gbmVlZCB0byBjaGVjayB0aGUgaW5wdXQsIGJ1dCB3ZSBkbyBoYXZlIHNvbWUgYm9v
a2tlZXBpbmcgdG8gZG8gZmlyc3QuCi0gICAgICAgICAgICAgICAgc3RhdGUubGlua0FsdGVybmF0
aXZlQmFja3RyYWNrcyh0aGlzLCB0cnVlKTsKLQotICAgICAgICAgICAgICAgIC8vIFdoZXJlIG5l
Y2Vzc2FyeSB1cGRhdGUgb3VyIHByZXNlcnZlZCBzdGFydCBwb3NpdGlvbi4KLSAgICAgICAgICAg
ICAgICBpZiAoIW1fcGF0dGVybi5tX2JvZHktPm1faGFzRml4ZWRTaXplKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIG1vdmUoaW5kZXgsIHJlZ1QwKTsKLSAgICAgICAgICAgICAgICAgICAgc3ViMzIo
SW1tMzIoY291bnRDaGVja2VkRm9yQ3VycmVudEFsdGVybmF0aXZlIC0gMSksIHJlZ1QwKTsKLSAg
ICAgICAgICAgICAgICAgICAgc3RvcmUzMihyZWdUMCwgQWRkcmVzcyhvdXRwdXQpKTsKLSAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBVcGRhdGUgaW5kZXggaWYgbmVjZXNz
YXJ5LCBhbmQgbG9vcCAod2l0aG91dCBjaGVja2luZykuCi0gICAgICAgICAgICAgICAgaWYgKGlu
Y3JlbWVudEZvck5leHRJdGVyKQotICAgICAgICAgICAgICAgICAgICBhZGQzMihJbW0zMihpbmNy
ZW1lbnRGb3JOZXh0SXRlciksIGluZGV4KTsKLSAgICAgICAgICAgICAgICBqdW1wKCkubGlua1Rv
KGZpcnN0QWx0ZXJuYXRpdmVJbnB1dENoZWNrZWQsIHRoaXMpOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBub3RFbm91Z2hJbnB1dEZvclByZXZpb3VzQWx0ZXJuYXRpdmUubGluayh0aGlz
KTsKLSAgICAgICAgICAgIC8vIFVwZGF0ZSBvdXIgaWRlYSBvZiB0aGUgc3RhcnQgcG9zaXRpb24s
IGlmIHdlJ3JlIHRyYWNraW5nIHRoaXMuCi0gICAgICAgICAgICBpZiAoIW1fcGF0dGVybi5tX2Jv
ZHktPm1faGFzRml4ZWRTaXplKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvdW50Q2hlY2tlZEZv
ckN1cnJlbnRBbHRlcm5hdGl2ZSAtIDEpIHsKLSAgICAgICAgICAgICAgICAgICAgbW92ZShpbmRl
eCwgcmVnVDApOwotICAgICAgICAgICAgICAgICAgICBzdWIzMihJbW0zMihjb3VudENoZWNrZWRG
b3JDdXJyZW50QWx0ZXJuYXRpdmUgLSAxKSwgcmVnVDApOwotICAgICAgICAgICAgICAgICAgICBz
dG9yZTMyKHJlZ1QwLCBBZGRyZXNzKG91dHB1dCkpOwotICAgICAgICAgICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgICAgICAgICBzdG9yZTMyKGluZGV4LCBBZGRyZXNzKG91dHB1dCkpOworICAg
ICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUuYXBwZW5kKG9wLm1fanVtcHMpOworICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAvLyBDaGVj
ayBpZiB0aGVyZSBpcyBzdWZmaWNlbnQgaW5wdXQgdG8gcnVuIHRoZSBmaXJzdCBhbHRlcm5hdGl2
ZSBhZ2Fpbi4KLSAgICAgICAgICAgIGp1bXBJZkF2YWlsYWJsZUlucHV0KGluY3JlbWVudEZvck5l
eHRJdGVyKS5saW5rVG8oZmlyc3RBbHRlcm5hdGl2ZUlucHV0Q2hlY2tlZCwgdGhpcyk7Ci0gICAg
ICAgICAgICAvLyBObyAtIGluc3VmZmljZW50IGlucHV0IHRvIHJ1biB0aGUgZmlyc3QgYWx0ZXJh
bmF0aXZlLCBhcmUgdGhlcmUgYW55IG90aGVyIGFsdGVybmF0aXZlcyB3ZQotICAgICAgICAgICAg
Ly8gbWlnaHQgbmVlZCB0byBjaGVjaz8gIElmIHNvLCB0aGUgbGFzdCBjaGVjayB3aWxsIGhhdmUg
bGVmdCB0aGUgaW5kZXggaW5jcmVtZW50ZWQgYnkKLSAgICAgICAgICAgIC8vIChjb3VudFRvQ2hl
Y2tGb3JGaXJzdEFsdGVybmF0aXZlICsgMSksIHNvIHdlIG5lZWQgdGVzdCB3aGV0aGVyIGNvdW50
VG9DaGVja0ZvckZpcnN0QWx0ZXJuYXRpdmUKLSAgICAgICAgICAgIC8vIExFU1MgaW5wdXQgaXMg
YXZhaWxhYmxlLCB0byBoYXZlIHRoZSBlZmZlY3Qgb2YganVzdCBwcm9ncmVzc2luZyB0aGUgc3Rh
cnQgcG9zaXRpb24gYnkgMQotICAgICAgICAgICAgLy8gZnJvbSB0aGUgbGFzdCBpdGVyYXRpb24u
ICBJZiB0aGlzIGNoZWNrIHBhc3NlcyB3ZSBjYW4ganVzdCBqdW1wIHVwIHRvIHRoZSBjaGVjayBh
c3NvY2lhdGVkCi0gICAgICAgICAgICAvLyB3aXRoIHRoZSBmaXJzdCBhbHRlcm5hdGl2ZSBpbiB0
aGUgbG9vcC4gIFRoaXMgaXMgYSBiaXQgc2FkLCBzaW5jZSB3ZSdsbCBlbmQgdXAgdHJ5aW5nIHRo
ZQotICAgICAgICAgICAgLy8gZmlyc3QgYWx0ZXJuYXRpdmUgYWdhaW4sIGFuZCB0aGlzIGNoZWNr
IHdpbGwgZmFpbCAob3RoZXJ3aXNlIHRoZSBjaGVjayBwbGFudGVkIGp1c3QgYWJvdmUKLSAgICAg
ICAgICAgIC8vIGhlcmUgd291bGQgaGF2ZSBwYXNzZWQpLiAgVGhpcyBpcyBhIGJpdCBzYWQsIGhv
d2V2ZXIgaXQgc2F2ZXMgdHJ5aW5nIHRvIGRvIHNvbWV0aGluZyBtb3JlCi0gICAgICAgICAgICAv
LyBjb21wbGV4IGhlcmUgaW4gY29tcGlsYXRpb24sIGFuZCBpbiB0aGUgY29tbW9uIGNhc2Ugd2Ug
c2hvdWxkIGVuZCB1cCBjb2FsbGVzY2luZyB0aGUgY2hlY2tzLgorICAgICAgICAgICAgLy8gT3BQ
YXJlbnRoZXNlc1N1YnBhdHRlcm5UZXJtaW5hbEJlZ2luL0VuZAogICAgICAgICAgICAgLy8KLSAg
ICAgICAgICAgIC8vIEZJWE1FOiBhIG5pY2UgaW1wcm92ZW1lbnQgaGVyZSBtYXkgYmUgdG8gc3Rv
cCB0cnlpbmcgdG8gbWF0Y2ggc29vbmVyLCBiYXNlZCBvbiB0aGUgbGVhc3QKLSAgICAgICAgICAg
IC8vIG9mIHRoZSBtaW5pbXVtLWFsdGVybmF0aXZlLWxlbmd0aHMuICBFLmcuIGlmIEkgaGF2ZSB0
d28gYWx0ZXJuYXRpdmVzIG9mIGxlbmd0aCAyMDAgYW5kIDE1MCwKLSAgICAgICAgICAgIC8vIGFu
ZCBhIHN0cmluZyBvZiBsZW5ndGggMTAwLCB3ZSdsbCBlbmQgdXAgbG9vcGluZyBpbmRleCBmcm9t
IDAgdG8gMTAwLCBjaGVja2luZyB3aGV0aGVyIHRoZXJlCi0gICAgICAgICAgICAvLyBpcyBzdWZm
aWNpZW50IGlucHV0IHRvIHJ1biBlaXRoZXIgYWx0ZXJuYXRpdmUgKGNvbnN0YW50bHkgZmFpbGlu
ZykuICBJZiB0aGVyZSBoYWQgYmVlbiBvbmx5Ci0gICAgICAgICAgICAvLyBvbmUgYWx0ZXJuYXRp
dmUsIG9yIGlmIHRoZSBzaG9ydGVyIGFsdGVybmF0aXZlIGhhZCBjb21lIGZpcnN0LCB3ZSB3b3Vs
ZCBoYXZlIHRlcm1pbmF0ZWQKLSAgICAgICAgICAgIC8vIGltbWVkaWF0ZWx5LiA6LS8KLSAgICAg
ICAgICAgIGlmIChoYXNTaG9ydGVyQWx0ZXJuYXRpdmVzKQotICAgICAgICAgICAgICAgIGp1bXBJ
ZkF2YWlsYWJsZUlucHV0KC1jb3VudFRvQ2hlY2tGb3JGaXJzdEFsdGVybmF0aXZlKS5saW5rVG8o
Zmlyc3RBbHRlcm5hdGl2ZSwgdGhpcyk7Ci0gICAgICAgICAgICAvLyBpbmRleCB3aWxsIG5vdyBi
ZSBhIGJpdCBnYXJibGVkIChkZXBlbmRpbmcgb24gd2hldGhlciAnaGFzU2hvcnRlckFsdGVybmF0
aXZlcycgaXMgdHJ1ZSwKLSAgICAgICAgICAgIC8vIGl0IGhhcyBlaXRoZXIgYmVlbiBpbmNyZW1l
bnRlZCBieSAxIG9yIGJ5IChjb3VudFRvQ2hlY2tGb3JGaXJzdEFsdGVybmF0aXZlICsgMSkgLi4u
IAotICAgICAgICAgICAgLy8gYnV0IHNpbmNlIHdlJ3JlIGFib3V0IHRvIHJldHVybiBhIGZhaWx1
cmUgdGhpcyBkb2Vzbid0IHJlYWxseSBtYXR0ZXIhKQorICAgICAgICAgICAgLy8gVGVybWluYWwg
c3VicGF0dGVybnMgd2lsbCBhbHdheXMgbWF0Y2ggLSB0aGVyZSBpcyBub3RoaW5nIGFmdGVyIHRo
ZW0gdG8KKyAgICAgICAgICAgIC8vIGZvcmNlIGEgYmFja3RyYWNrLCBhbmQgdGhleSBoYXZlIGEg
bWluaW11bSBjb3VudCBvZiAwLCBhbmQgYXMgc3VjaCB3aWxsCisgICAgICAgICAgICAvLyBhbHdh
eXMgcHJvZHVjZSBhbiBhY2NlcHRhYmxlIHJlc3VsdC4KKyAgICAgICAgICAgIGNhc2UgT3BQYXJl
bnRoZXNlc1N1YnBhdHRlcm5UZXJtaW5hbEJlZ2luOiB7CisgICAgICAgICAgICAgICAgLy8gV2Ug
d2lsbCBiYWNrdHJhY2sgdG8gdGhpcyBwb2ludCBvbmNlIHRoZSBzdWJwYXR0ZXJuIGNhbm5vdCBt
YXRjaCBhbnkKKyAgICAgICAgICAgICAgICAvLyBtb3JlLiBTaW5jZSBubyBtYXRjaCBpcyBhY2Nl
cHRlZCBhcyBhIHN1Y2Nlc3NmdWwgbWF0Y2ggKHdlIGFyZSBHcmVlZHkKKyAgICAgICAgICAgICAg
ICAvLyBxdWFudGlmaWVkIHdpdGggYSBtaW5pbXVtIG9mIHplcm8pIGp1bXAgYmFjayB0byB0aGUg
Zm9yd2FyZHMgbWF0Y2hpbmcKKyAgICAgICAgICAgICAgICAvLyBwYXRoIGF0IHRoZSBlbmQuCisg
ICAgICAgICAgICAgICAgWWFyck9wJiBlbmRPcCA9IG1fb3BzW29wLm1fbmV4dE9wXTsKKyAgICAg
ICAgICAgICAgICBtX2JhY2t0cmFja2luZ1N0YXRlLmxpbmtUbyhlbmRPcC5tX3JlZW50cnksIHRo
aXMpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
Y2FzZSBPcFBhcmVudGhlc2VzU3VicGF0dGVyblRlcm1pbmFsRW5kOgorICAgICAgICAgICAgICAg
IC8vIFdlIHNob3VsZCBuZXZlciBiZSBiYWNrdHJhY2tpbmcgIHRvIGhlcmUgKGhlbmNlIHRoZSAn
dGVybWluYWwnIGluIHRoZSBuYW1lKS4KKyAgICAgICAgICAgICAgICBBU1NFUlQobV9iYWNrdHJh
Y2tpbmdTdGF0ZS5pc0VtcHR5KCkpOworICAgICAgICAgICAgICAgIG1fYmFja3RyYWNraW5nU3Rh
dGUuYXBwZW5kKG9wLm1fanVtcHMpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
ICAgICAvLyBPcFBhcmVudGhldGljYWxBc3NlcnRpb25CZWdpbi9FbmQKKyAgICAgICAgICAgIGNh
c2UgT3BQYXJlbnRoZXRpY2FsQXNzZXJ0aW9uQmVnaW46IHsKKyAgICAgICAgICAgICAgICBQYXR0
ZXJuVGVybSogdGVybSA9IG9wLm1fdGVybTsKKyAgICAgICAgICAgICAgICBZYXJyT3AmIGVuZE9w
ID0gbV9vcHNbb3AubV9uZXh0T3BdOworCisgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBo
YW5kbGUgdGhlIGJhY2t0cmFja3MgdXBvbiBiYWNrdHJhY2tpbmcgYmFjayBvdXQKKyAgICAgICAg
ICAgICAgICAvLyBvZiBhIHBhcmVudGhldGljYWwgYXNzZXJ0aW9uIGlmIGVpdGhlciB3ZSBuZWVk
IHRvIGNvcnJlY3QKKyAgICAgICAgICAgICAgICAvLyB0aGUgaW5wdXQgaW5kZXgsIG9yIHRoZSBh
c3NlcnRpb24gd2FzIGludmVydGVkLgorICAgICAgICAgICAgICAgIGlmIChvcC5tX2NoZWNrQWRq
dXN0IHx8IHRlcm0tPmludmVydCgpKSB7CisgICAgICAgICAgICAgICAgICAgICBtX2JhY2t0cmFj
a2luZ1N0YXRlLmxpbmsodGhpcyk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKG9wLm1fY2hl
Y2tBZGp1c3QpCisgICAgICAgICAgICAgICAgICAgICAgICBhZGQzMihJbW0zMihvcC5tX2NoZWNr
QWRqdXN0KSwgaW5kZXgpOworCisgICAgICAgICAgICAgICAgICAgIC8vIEluIGFuIGludmVydGVk
IGFzc2VydGlvbiBmYWlsdXJlIHRvIG1hdGNoIHRoZSBzdWJwYXR0ZXJuCisgICAgICAgICAgICAg
ICAgICAgIC8vIGlzIHRyZWF0ZWQgYXMgYSBzdWNjZXNzZnVsIG1hdGNoIC0ganVtcCB0byB0aGUg
ZW5kIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAvLyBzdWJwYXR0ZXJuLiBXZSBhbHJlYWR5
IGhhdmUgYWRqdXN0ZWQgdGhlIGlucHV0IHBvc2l0aW9uCisgICAgICAgICAgICAgICAgICAgIC8v
IGJhY2sgdG8gdGhhdCBiZWZvcmUgdGhlIGFzc2VydGlvbiwgd2hpY2ggaXMgY29ycmVjdC4KKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHRlcm0tPmludmVydCgpKQorICAgICAgICAgICAgICAgICAg
ICAgICAganVtcChlbmRPcC5tX3JlZW50cnkpOworCisgICAgICAgICAgICAgICAgICAgIG1fYmFj
a3RyYWNraW5nU3RhdGUuZmFsbHRocm91Z2goKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICAvLyBUaGUgRW5kIG5vZGUncyBqdW1wIGxpc3Qgd2lsbCBjb250YWluIGFueSBi
YWNrdHJhY2tzIGludG8KKyAgICAgICAgICAgICAgICAvLyB0aGUgZW5kIG9mIHRoZSBhc3NlcnRp
b24uIEFsc28sIGlmIGludmVydGVkLCB3ZSB3aWxsIGhhdmUKKyAgICAgICAgICAgICAgICAvLyBh
ZGRlZCB0aGUgZmFpbHVyZSBjYXVzZWQgYnkgYSBzdWNjZXNzZnVsIG1hdGNoIHRvIHRoaXMuCisg
ICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5hcHBlbmQoZW5kT3AubV9qdW1wcyk7
CisKKyAgICAgICAgICAgICAgICBtX2NoZWNrZWQgKz0gb3AubV9jaGVja0FkanVzdDsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgT3BQYXJl
bnRoZXRpY2FsQXNzZXJ0aW9uRW5kOiB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNo
b3VsZCByZWFsbHkgYmUgY2xlYXJpbmcgYW55IG5lc3RlZCBzdWJwYXR0ZXJuCisgICAgICAgICAg
ICAgICAgLy8gbWF0Y2hlcyBvbiBiYWlsaW5nIG91dCBmcm9tIGFmdGVyIHRoZSBwYXR0ZXJuLiBG
aXJlZm94IGhhcworICAgICAgICAgICAgICAgIC8vIHRoaXMgYnVnIHRvbyAocHJlc3VtYWJseSBi
ZWNhdXNlIHRoZXkgdXNlIFlBUlIhKQorCisgICAgICAgICAgICAgICAgLy8gTmV2ZXIgYmFja3Ry
YWNrIGludG8gYW4gYXNzZXJ0aW9uOyBsYXRlciBmYWlsdXJlcyBiYWlsIHRvIGJlZm9yZSB0aGUg
YmVnaW4uCisgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS50YWtlQmFja3RyYWNr
c1RvSnVtcExpc3Qob3AubV9qdW1wcywgdGhpcyk7CisKKyAgICAgICAgICAgICAgICBZYXJyT3Am
IGxhc3RPcCA9IG1fb3BzW29wLm1fcHJldmlvdXNPcF07CisgICAgICAgICAgICAgICAgbV9jaGVj
a2VkIC09IGxhc3RPcC5tX2NoZWNrQWRqdXN0OworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBjYXNlIE9wTWF0Y2hGYWlsZWQ6CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgfSB3aGlsZSAob3BJbmRleCk7
CisgICAgfQorCisgICAgLy8gQ29tcGlsYXRpb24gbWV0aG9kczoKKyAgICAvLyA9PT09PT09PT09
PT09PT09PT09PQorCisgICAgLy8gb3BDb21waWxlUGFyZW50aGVzZXNTdWJwYXR0ZXJuCisgICAg
Ly8gRW1pdHMgb3BzIGZvciBhIHN1YnBhdHRlcm4gKHNldCBvZiBwYXJlbnRoZXNlcykuIFRoZXNl
IGNvbnNpc3QKKyAgICAvLyBvZiBhIHNldCBvZiBhbHRlcm5hdGl2ZXMgd3JhcHBlZCBpbiBhbiBv
dXRlciBzZXQgb2Ygbm9kZXMgZm9yCisgICAgLy8gdGhlIHBhcmVudGhlc2VzLgorICAgIC8vIFN1
cHBvcnRlZCB0eXBlcyBvZiBwYXJlbnRoZXNlcyBhcmUgJ09uY2UnIChxdWFudGl0eUNvdW50ID09
IDEpCisgICAgLy8gYW5kICdUZXJtaW5hbCcgKG5vbi1jYXB0dXJpbmcgcGFyZW50aGVzZXMgcXVh
bnRpZmllZCBhcyBncmVlZHkKKyAgICAvLyBhbmQgaW5maW5pdGUpLgorICAgIC8vIEFsdGVybmF0
aXZlcyB3aWxsIHVzZSB0aGUgJ1NpbXBsZScgc2V0IG9mIG9wcyBpZiBlaXRoZXIgdGhlCisgICAg
Ly8gc3VicGF0dGVybiBpcyB0ZXJtaW5hbCAoaW4gd2hpY2ggY2FzZSB3ZSB3aWxsIG5ldmVyIG5l
ZWQgdG8KKyAgICAvLyBiYWNrdHJhY2spLCBvciBpZiB0aGUgc3VicGF0dGVybiBvbmx5IGNvbnRh
aW5zIG9uZSBhbHRlcm5hdGl2ZS4KKyAgICB2b2lkIG9wQ29tcGlsZVBhcmVudGhlc2VzU3VicGF0
dGVybihQYXR0ZXJuVGVybSogdGVybSkKKyAgICB7CisgICAgICAgIFlhcnJPcENvZGUgcGFyZW50
aGVzZXNCZWdpbk9wQ29kZTsKKyAgICAgICAgWWFyck9wQ29kZSBwYXJlbnRoZXNlc0VuZE9wQ29k
ZTsKKyAgICAgICAgWWFyck9wQ29kZSBhbHRlcm5hdGl2ZUJlZ2luT3BDb2RlID0gT3BTaW1wbGVO
ZXN0ZWRBbHRlcm5hdGl2ZUJlZ2luOworICAgICAgICBZYXJyT3BDb2RlIGFsdGVybmF0aXZlTmV4
dE9wQ29kZSA9IE9wU2ltcGxlTmVzdGVkQWx0ZXJuYXRpdmVOZXh0OworICAgICAgICBZYXJyT3BD
b2RlIGFsdGVybmF0aXZlRW5kT3BDb2RlID0gT3BTaW1wbGVOZXN0ZWRBbHRlcm5hdGl2ZUVuZDsK
KworICAgICAgICAvLyBXZSBjYW4gY3VycmVudGx5IG9ubHkgY29tcGlsZSBxdWFudGl0eSAxIHN1
YnBhdHRlcm5zIHRoYXQgYXJlCisgICAgICAgIC8vIG5vdCBjb3BpZXMuIFdlIGdlbmVyYXRlIGEg
Y29weSBpbiB0aGUgY2FzZSBvZiBhIHJhbmdlIHF1YW50aWZpZXIsCisgICAgICAgIC8vIGUuZy4g
Lyg/OngpezMsOX0vLCBvciAvKD86eCkrLyAoVGhlc2UgYXJlIGVmZmVjdGl2ZWx5IGV4cGFuZGVk
IHRvCisgICAgICAgIC8vIC8oPzp4KXszLDN9KD86eCl7MCw2fS8gYW5kIC8oPzp4KSg/OngpKi8g
cmVwZWN0aXZlbHkpLiBUaGUgcHJvYmxlbQorICAgICAgICAvLyBjb21lcyB3aGVyZSB0aGUgc3Vi
cGF0dGVybiBpcyBjYXB0dXJpbmcsIGluIHdoaWNoIGNhc2Ugd2Ugd291bGQKKyAgICAgICAgLy8g
bmVlZCB0byByZXN0b3JlIHRoZSBjYXB0dXJlIGZyb20gdGhlIGZpcnN0IHN1YnBhdHRlcm4gdXBv
biBhCisgICAgICAgIC8vIGZhaWx1cmUgaW4gdGhlIHNlY29uZC4KKyAgICAgICAgaWYgKHRlcm0t
PnF1YW50aXR5Q291bnQgPT0gMSAmJiAhdGVybS0+cGFyZW50aGVzZXMuaXNDb3B5KSB7CisgICAg
ICAgICAgICAvLyBTZWxlY3QgdGhlICdPbmNlJyBub2Rlcy4KKyAgICAgICAgICAgIHBhcmVudGhl
c2VzQmVnaW5PcENvZGUgPSBPcFBhcmVudGhlc2VzU3VicGF0dGVybk9uY2VCZWdpbjsKKyAgICAg
ICAgICAgIHBhcmVudGhlc2VzRW5kT3BDb2RlID0gT3BQYXJlbnRoZXNlc1N1YnBhdHRlcm5PbmNl
RW5kOworCisgICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIGFsdGVybmF0
aXZlIHdlIGNhbm5vdCB1c2UgdGhlICdzaW1wbGUnIG5vZGVzLgorICAgICAgICAgICAgaWYgKHRl
cm0tPnBhcmVudGhlc2VzLmRpc2p1bmN0aW9uLT5tX2FsdGVybmF0aXZlcy5zaXplKCkgIT0gMSkg
eworICAgICAgICAgICAgICAgIGFsdGVybmF0aXZlQmVnaW5PcENvZGUgPSBPcE5lc3RlZEFsdGVy
bmF0aXZlQmVnaW47CisgICAgICAgICAgICAgICAgYWx0ZXJuYXRpdmVOZXh0T3BDb2RlID0gT3BO
ZXN0ZWRBbHRlcm5hdGl2ZU5leHQ7CisgICAgICAgICAgICAgICAgYWx0ZXJuYXRpdmVFbmRPcENv
ZGUgPSBPcE5lc3RlZEFsdGVybmF0aXZlRW5kOworICAgICAgICAgICAgfQorICAgICAgICB9IGVs
c2UgaWYgKHRlcm0tPnBhcmVudGhlc2VzLmlzVGVybWluYWwpIHsKKyAgICAgICAgICAgIC8vIFNl
bGVjdCB0aGUgJ1Rlcm1pbmFsJyBub2Rlcy4KKyAgICAgICAgICAgIHBhcmVudGhlc2VzQmVnaW5P
cENvZGUgPSBPcFBhcmVudGhlc2VzU3VicGF0dGVyblRlcm1pbmFsQmVnaW47CisgICAgICAgICAg
ICBwYXJlbnRoZXNlc0VuZE9wQ29kZSA9IE9wUGFyZW50aGVzZXNTdWJwYXR0ZXJuVGVybWluYWxF
bmQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBUaGlzIHN1YnBhdHRlcm4gaXMg
bm90IHN1cHBvcnRlZCBieSB0aGUgSklULgorICAgICAgICAgICAgbV9zaG91bGRGYWxsQmFjayA9
IHRydWU7CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobV9w
YXR0ZXJuLm1fYm9keS0+bV9jYWxsRnJhbWVTaXplKQotICAgICAgICAgICAgYWRkUHRyKEltbTMy
KG1fcGF0dGVybi5tX2JvZHktPm1fY2FsbEZyYW1lU2l6ZSAqIHNpemVvZih2b2lkKikpLCBzdGFj
a1BvaW50ZXJSZWdpc3Rlcik7CisgICAgICAgIHNpemVfdCBwYXJlbkJlZ2luID0gbV9vcHMuc2l6
ZSgpOworICAgICAgICBtX29wcy5hcHBlbmQocGFyZW50aGVzZXNCZWdpbk9wQ29kZSk7CiAKLSAg
ICAgICAgbW92ZShUcnVzdGVkSW1tMzIoLTEpLCByZXR1cm5SZWdpc3Rlcik7CisgICAgICAgIG1f
b3BzLmFwcGVuZChhbHRlcm5hdGl2ZUJlZ2luT3BDb2RlKTsKKyAgICAgICAgbV9vcHMubGFzdCgp
Lm1fcHJldmlvdXNPcCA9IG5vdEZvdW5kOworICAgICAgICBtX29wcy5sYXN0KCkubV90ZXJtID0g
dGVybTsKKyAgICAgICAgVmVjdG9yPFBhdHRlcm5BbHRlcm5hdGl2ZSo+JiBhbHRlcm5hdGl2ZXMg
PSAgdGVybS0+cGFyZW50aGVzZXMuZGlzanVuY3Rpb24tPm1fYWx0ZXJuYXRpdmVzOworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYWx0ZXJuYXRpdmVzLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgICAgICBzaXplX3QgbGFzdE9wSW5kZXggPSBtX29wcy5zaXplKCkgLSAxOworCisgICAg
ICAgICAgICBQYXR0ZXJuQWx0ZXJuYXRpdmUqIG5lc3RlZEFsdGVybmF0aXZlID0gYWx0ZXJuYXRp
dmVzW2ldOworICAgICAgICAgICAgb3BDb21waWxlQWx0ZXJuYXRpdmUobmVzdGVkQWx0ZXJuYXRp
dmUpOworCisgICAgICAgICAgICBzaXplX3QgdGhpc09wSW5kZXggPSBtX29wcy5zaXplKCk7Cisg
ICAgICAgICAgICBtX29wcy5hcHBlbmQoWWFyck9wKGFsdGVybmF0aXZlTmV4dE9wQ29kZSkpOwor
CisgICAgICAgICAgICBZYXJyT3AmIGxhc3RPcCA9IG1fb3BzW2xhc3RPcEluZGV4XTsKKyAgICAg
ICAgICAgIFlhcnJPcCYgdGhpc09wID0gbV9vcHNbdGhpc09wSW5kZXhdOworCisgICAgICAgICAg
ICBsYXN0T3AubV9hbHRlcm5hdGl2ZSA9IG5lc3RlZEFsdGVybmF0aXZlOworICAgICAgICAgICAg
bGFzdE9wLm1fbmV4dE9wID0gdGhpc09wSW5kZXg7CisgICAgICAgICAgICB0aGlzT3AubV9wcmV2
aW91c09wID0gbGFzdE9wSW5kZXg7CisgICAgICAgICAgICB0aGlzT3AubV90ZXJtID0gdGVybTsK
KyAgICAgICAgfQorICAgICAgICBZYXJyT3AmIGxhc3RPcCA9IG1fb3BzLmxhc3QoKTsKKyAgICAg
ICAgQVNTRVJUKGxhc3RPcC5tX29wID09IGFsdGVybmF0aXZlTmV4dE9wQ29kZSk7CisgICAgICAg
IGxhc3RPcC5tX29wID0gYWx0ZXJuYXRpdmVFbmRPcENvZGU7CisgICAgICAgIGxhc3RPcC5tX2Fs
dGVybmF0aXZlID0gMDsKKyAgICAgICAgbGFzdE9wLm1fbmV4dE9wID0gbm90Rm91bmQ7CisKKyAg
ICAgICAgc2l6ZV90IHBhcmVuRW5kID0gbV9vcHMuc2l6ZSgpOworICAgICAgICBtX29wcy5hcHBl
bmQocGFyZW50aGVzZXNFbmRPcENvZGUpOworCisgICAgICAgIG1fb3BzW3BhcmVuQmVnaW5dLm1f
dGVybSA9IHRlcm07CisgICAgICAgIG1fb3BzW3BhcmVuQmVnaW5dLm1fcHJldmlvdXNPcCA9IG5v
dEZvdW5kOworICAgICAgICBtX29wc1twYXJlbkJlZ2luXS5tX25leHRPcCA9IHBhcmVuRW5kOwor
ICAgICAgICBtX29wc1twYXJlbkVuZF0ubV90ZXJtID0gdGVybTsKKyAgICAgICAgbV9vcHNbcGFy
ZW5FbmRdLm1fcHJldmlvdXNPcCA9IHBhcmVuQmVnaW47CisgICAgICAgIG1fb3BzW3BhcmVuRW5k
XS5tX25leHRPcCA9IG5vdEZvdW5kOworICAgIH0KKworICAgIC8vIG9wQ29tcGlsZVBhcmVudGhl
dGljYWxBc3NlcnRpb24KKyAgICAvLyBFbWl0cyBvcHMgZm9yIGEgcGFyZW50aGV0aWNhbCBhc3Nl
cnRpb24uIFRoZXNlIGNvbnNpc3Qgb2YgYW4KKyAgICAvLyBPcFNpbXBsZU5lc3RlZEFsdGVybmF0
aXZlQmVnaW4vTmV4dC9FbmQgc2V0IG9mIG5vZGVzIHdyYXBwaW5nCisgICAgLy8gdGhlIGFsdGVy
bmF0aXZlcywgd2l0aCB0aGVzZSB3cmFwcGVkIGJ5IGFuIG91dGVyIHBhaXIgb2YKKyAgICAvLyBP
cFBhcmVudGhldGljYWxBc3NlcnRpb25CZWdpbi9FbmQgbm9kZXMuCisgICAgLy8gV2UgY2FuIGFs
d2F5cyB1c2UgdGhlIE9wU2ltcGxlTmVzdGVkQWx0ZXJuYXRpdmUgbm9kZXMgaW4gdGhlCisgICAg
Ly8gY2FzZSBvZiBwYXJlbnRoZXRpY2FsIGFzc2VydGlvbnMgc2luY2UgdGhlc2Ugb25seSBldmVy
IG1hdGNoCisgICAgLy8gb25jZSwgYW5kIHdpbGwgbmV2ZXIgYmFja3RyYWNrIGJhY2sgaW50byB0
aGUgYXNzZXJ0aW9uLgorICAgIHZvaWQgb3BDb21waWxlUGFyZW50aGV0aWNhbEFzc2VydGlvbihQ
YXR0ZXJuVGVybSogdGVybSkKKyAgICB7CisgICAgICAgIHNpemVfdCBwYXJlbkJlZ2luID0gbV9v
cHMuc2l6ZSgpOworICAgICAgICBtX29wcy5hcHBlbmQoT3BQYXJlbnRoZXRpY2FsQXNzZXJ0aW9u
QmVnaW4pOworCisgICAgICAgIG1fb3BzLmFwcGVuZChPcFNpbXBsZU5lc3RlZEFsdGVybmF0aXZl
QmVnaW4pOworICAgICAgICBtX29wcy5sYXN0KCkubV9wcmV2aW91c09wID0gbm90Rm91bmQ7Cisg
ICAgICAgIG1fb3BzLmxhc3QoKS5tX3Rlcm0gPSB0ZXJtOworICAgICAgICBWZWN0b3I8UGF0dGVy
bkFsdGVybmF0aXZlKj4mIGFsdGVybmF0aXZlcyA9ICB0ZXJtLT5wYXJlbnRoZXNlcy5kaXNqdW5j
dGlvbi0+bV9hbHRlcm5hdGl2ZXM7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBh
bHRlcm5hdGl2ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIHNpemVfdCBsYXN0T3BJbmRl
eCA9IG1fb3BzLnNpemUoKSAtIDE7CisKKyAgICAgICAgICAgIFBhdHRlcm5BbHRlcm5hdGl2ZSog
bmVzdGVkQWx0ZXJuYXRpdmUgPSBhbHRlcm5hdGl2ZXNbaV07CisgICAgICAgICAgICBvcENvbXBp
bGVBbHRlcm5hdGl2ZShuZXN0ZWRBbHRlcm5hdGl2ZSk7CisKKyAgICAgICAgICAgIHNpemVfdCB0
aGlzT3BJbmRleCA9IG1fb3BzLnNpemUoKTsKKyAgICAgICAgICAgIG1fb3BzLmFwcGVuZChZYXJy
T3AoT3BTaW1wbGVOZXN0ZWRBbHRlcm5hdGl2ZU5leHQpKTsKKworICAgICAgICAgICAgWWFyck9w
JiBsYXN0T3AgPSBtX29wc1tsYXN0T3BJbmRleF07CisgICAgICAgICAgICBZYXJyT3AmIHRoaXNP
cCA9IG1fb3BzW3RoaXNPcEluZGV4XTsKKworICAgICAgICAgICAgbGFzdE9wLm1fYWx0ZXJuYXRp
dmUgPSBuZXN0ZWRBbHRlcm5hdGl2ZTsKKyAgICAgICAgICAgIGxhc3RPcC5tX25leHRPcCA9IHRo
aXNPcEluZGV4OworICAgICAgICAgICAgdGhpc09wLm1fcHJldmlvdXNPcCA9IGxhc3RPcEluZGV4
OworICAgICAgICAgICAgdGhpc09wLm1fdGVybSA9IHRlcm07CisgICAgICAgIH0KKyAgICAgICAg
WWFyck9wJiBsYXN0T3AgPSBtX29wcy5sYXN0KCk7CisgICAgICAgIEFTU0VSVChsYXN0T3AubV9v
cCA9PSBPcFNpbXBsZU5lc3RlZEFsdGVybmF0aXZlTmV4dCk7CisgICAgICAgIGxhc3RPcC5tX29w
ID0gT3BTaW1wbGVOZXN0ZWRBbHRlcm5hdGl2ZUVuZDsKKyAgICAgICAgbGFzdE9wLm1fYWx0ZXJu
YXRpdmUgPSAwOworICAgICAgICBsYXN0T3AubV9uZXh0T3AgPSBub3RGb3VuZDsKKworICAgICAg
ICBzaXplX3QgcGFyZW5FbmQgPSBtX29wcy5zaXplKCk7CisgICAgICAgIG1fb3BzLmFwcGVuZChP
cFBhcmVudGhldGljYWxBc3NlcnRpb25FbmQpOworCisgICAgICAgIG1fb3BzW3BhcmVuQmVnaW5d
Lm1fdGVybSA9IHRlcm07CisgICAgICAgIG1fb3BzW3BhcmVuQmVnaW5dLm1fcHJldmlvdXNPcCA9
IG5vdEZvdW5kOworICAgICAgICBtX29wc1twYXJlbkJlZ2luXS5tX25leHRPcCA9IHBhcmVuRW5k
OworICAgICAgICBtX29wc1twYXJlbkVuZF0ubV90ZXJtID0gdGVybTsKKyAgICAgICAgbV9vcHNb
cGFyZW5FbmRdLm1fcHJldmlvdXNPcCA9IHBhcmVuQmVnaW47CisgICAgICAgIG1fb3BzW3BhcmVu
RW5kXS5tX25leHRPcCA9IG5vdEZvdW5kOworICAgIH0KKworICAgIC8vIG9wQ29tcGlsZUFsdGVy
bmF0aXZlCisgICAgLy8gQ2FsbGVkIHRvIGVtaXQgbm9kZXMgZm9yIGFsbCB0ZXJtcyBpbiBhbiBh
bHRlcm5hdGl2ZS4KKyAgICB2b2lkIG9wQ29tcGlsZUFsdGVybmF0aXZlKFBhdHRlcm5BbHRlcm5h
dGl2ZSogYWx0ZXJuYXRpdmUpCisgICAgeworICAgICAgICBvcHRpbWl6ZUFsdGVybmF0aXZlKGFs
dGVybmF0aXZlKTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYWx0ZXJuYXRp
dmUtPm1fdGVybXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIFBhdHRlcm5UZXJtKiB0ZXJt
ID0gJmFsdGVybmF0aXZlLT5tX3Rlcm1zW2ldOworCisgICAgICAgICAgICBzd2l0Y2ggKHRlcm0t
PnR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgUGF0dGVyblRlcm06OlR5cGVQYXJlbnRoZXNlc1N1
YnBhdHRlcm46CisgICAgICAgICAgICAgICAgb3BDb21waWxlUGFyZW50aGVzZXNTdWJwYXR0ZXJu
KHRlcm0pOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFBhdHRl
cm5UZXJtOjpUeXBlUGFyZW50aGV0aWNhbEFzc2VydGlvbjoKKyAgICAgICAgICAgICAgICBvcENv
bXBpbGVQYXJlbnRoZXRpY2FsQXNzZXJ0aW9uKHRlcm0pOworICAgICAgICAgICAgICAgIGJyZWFr
OwogCi0gICAgICAgIGdlbmVyYXRlUmV0dXJuKCk7CisgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgIG1fb3BzLmFwcGVuZCh0ZXJtKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KIAotICAgICAgICBtX2V4cHJlc3Npb25TdGF0ZS5lbWl0UGFyZW50aGVzZXNUYWls
KHRoaXMpOwotICAgICAgICBtX2V4cHJlc3Npb25TdGF0ZS5lbWl0SW5kaXJlY3RKdW1wVGFibGUo
dGhpcyk7Ci0gICAgICAgIG1fZXhwcmVzc2lvblN0YXRlLmxpbmtUb05leHRJdGVyYXRpb24odGhp
cyk7CisgICAgLy8gb3BDb21waWxlQm9keQorICAgIC8vIFRoaXMgbWV0aG9kIGNvbXBpbGVzIHRo
ZSBib2R5IGRpc2p1bmN0aW9uIG9mIHRoZSByZWd1bGFyIGV4cHJlc3Npb24uCisgICAgLy8gVGhl
IGJvZHkgY29uc2lzdHMgb2YgdHdvIHNldHMgb2YgYWx0ZXJuYXRpdmVzIC0gemVybyBvciBtb3Jl
ICdvbmNlCisgICAgLy8gdGhyb3VnaCcgKEJPTCBhbmNob3JlZCkgYWx0ZXJuYXRpdmVzLCBmb2xs
b3dlZCBieSB6ZXJvIG9yIG1vcmUKKyAgICAvLyByZXBlYXRlZCBhbHRlcm5hdGl2ZXMuCisgICAg
Ly8gRm9yIGVhY2ggb2YgdGhlc2UgdHdvIHNldHMgb2YgYWx0ZXJhdGl2ZXMsIGlmIG5vdCBlbXB0
eSB0aGV5IHdpbGwgYmUKKyAgICAvLyB3cmFwcGVkIGluIGEgc2V0IG9mIE9wQm9keUFsdGVybmF0
aXZlQmVnaW4vTmV4dC9FbmQgbm9kZXMgKHdpdGggdGhlCisgICAgLy8gJ2JlZ2luJyBub2RlIHJl
ZmVyZW5jaW5nIHRoZSBmaXJzdCBhbHRlcm5hdGl2ZSwgYW5kICduZXh0JyBub2RlcworICAgIC8v
IHJlZmVyZW5jaW5nIGFueSBmdXJ0aGVyIGFsdGVybmF0aXZlcy4gVGhlIGJlZ2luL25leHQvZW5k
IG5vZGVzIGFyZQorICAgIC8vIGxpbmtlZCB0b2dldGhlciBpbiBhIGRvdWJseSBsaW5rZWQgbGlz
dC4gSW4gdGhlIGNhc2Ugb2YgcmVwZWF0aW5nCisgICAgLy8gYWx0ZXJuYXRpdmVzLCB0aGUgZW5k
IG5vZGUgaXMgYWxzbyBsaW5rZWQgYmFjayB0byB0aGUgYmVnaW5uaW5nLgorICAgIC8vIElmIG5v
IHJlcGVhdGluZyBhbHRlcm5hdGl2ZXMgZXhpc3QsIHRoZW4gYSBPcE1hdGNoRmFpbGVkIG5vZGUg
ZXhpc3RzCisgICAgLy8gdG8gcmV0dXJuIHRoZSBmYWlsaW5nIHJlc3VsdC4KKyAgICB2b2lkIG9w
Q29tcGlsZUJvZHkoUGF0dGVybkRpc2p1bmN0aW9uKiBkaXNqdW5jdGlvbikKKyAgICB7CisgICAg
ICAgIFZlY3RvcjxQYXR0ZXJuQWx0ZXJuYXRpdmUqPiYgYWx0ZXJuYXRpdmVzID0gIGRpc2p1bmN0
aW9uLT5tX2FsdGVybmF0aXZlczsKKyAgICAgICAgc2l6ZV90IGN1cnJlbnRBbHRlcm5hdGl2ZUlu
ZGV4ID0gMDsKKworICAgICAgICAvLyBFbWl0IHRoZSAnb25jZSB0aHJvdWdoJyBhbHRlcm5hdGl2
ZXMuCisgICAgICAgIGlmIChhbHRlcm5hdGl2ZXMuc2l6ZSgpICYmIGFsdGVybmF0aXZlc1swXS0+
b25jZVRocm91Z2goKSkgeworICAgICAgICAgICAgbV9vcHMuYXBwZW5kKFlhcnJPcChPcEJvZHlB
bHRlcm5hdGl2ZUJlZ2luKSk7CisgICAgICAgICAgICBtX29wcy5sYXN0KCkubV9wcmV2aW91c09w
ID0gbm90Rm91bmQ7CisKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICBzaXplX3Qg
bGFzdE9wSW5kZXggPSBtX29wcy5zaXplKCkgLSAxOworICAgICAgICAgICAgICAgIFBhdHRlcm5B
bHRlcm5hdGl2ZSogYWx0ZXJuYXRpdmUgPSBhbHRlcm5hdGl2ZXNbY3VycmVudEFsdGVybmF0aXZl
SW5kZXhdOworICAgICAgICAgICAgICAgIG9wQ29tcGlsZUFsdGVybmF0aXZlKGFsdGVybmF0aXZl
KTsKKworICAgICAgICAgICAgICAgIHNpemVfdCB0aGlzT3BJbmRleCA9IG1fb3BzLnNpemUoKTsK
KyAgICAgICAgICAgICAgICBtX29wcy5hcHBlbmQoWWFyck9wKE9wQm9keUFsdGVybmF0aXZlTmV4
dCkpOworCisgICAgICAgICAgICAgICAgWWFyck9wJiBsYXN0T3AgPSBtX29wc1tsYXN0T3BJbmRl
eF07CisgICAgICAgICAgICAgICAgWWFyck9wJiB0aGlzT3AgPSBtX29wc1t0aGlzT3BJbmRleF07
CisKKyAgICAgICAgICAgICAgICBsYXN0T3AubV9hbHRlcm5hdGl2ZSA9IGFsdGVybmF0aXZlOwor
ICAgICAgICAgICAgICAgIGxhc3RPcC5tX25leHRPcCA9IHRoaXNPcEluZGV4OworICAgICAgICAg
ICAgICAgIHRoaXNPcC5tX3ByZXZpb3VzT3AgPSBsYXN0T3BJbmRleDsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICArK2N1cnJlbnRBbHRlcm5hdGl2ZUluZGV4OworICAgICAgICAg
ICAgfSB3aGlsZSAoY3VycmVudEFsdGVybmF0aXZlSW5kZXggPCBhbHRlcm5hdGl2ZXMuc2l6ZSgp
ICYmIGFsdGVybmF0aXZlc1tjdXJyZW50QWx0ZXJuYXRpdmVJbmRleF0tPm9uY2VUaHJvdWdoKCkp
OworCisgICAgICAgICAgICBZYXJyT3AmIGxhc3RPcCA9IG1fb3BzLmxhc3QoKTsKKworICAgICAg
ICAgICAgQVNTRVJUKGxhc3RPcC5tX29wID09IE9wQm9keUFsdGVybmF0aXZlTmV4dCk7CisgICAg
ICAgICAgICBsYXN0T3AubV9vcCA9IE9wQm9keUFsdGVybmF0aXZlRW5kOworICAgICAgICAgICAg
bGFzdE9wLm1fYWx0ZXJuYXRpdmUgPSAwOworICAgICAgICAgICAgbGFzdE9wLm1fbmV4dE9wID0g
bm90Rm91bmQ7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY3VycmVudEFsdGVybmF0aXZlSW5k
ZXggPT0gYWx0ZXJuYXRpdmVzLnNpemUoKSkgeworICAgICAgICAgICAgbV9vcHMuYXBwZW5kKFlh
cnJPcChPcE1hdGNoRmFpbGVkKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBFbWl0IHRoZSByZXBlYXRlZCBhbHRlcm5hdGl2ZXMuCisgICAgICAgIHNpemVf
dCByZXBlYXRMb29wID0gbV9vcHMuc2l6ZSgpOworICAgICAgICBtX29wcy5hcHBlbmQoWWFyck9w
KE9wQm9keUFsdGVybmF0aXZlQmVnaW4pKTsKKyAgICAgICAgbV9vcHMubGFzdCgpLm1fcHJldmlv
dXNPcCA9IG5vdEZvdW5kOworICAgICAgICBkbyB7CisgICAgICAgICAgICBzaXplX3QgbGFzdE9w
SW5kZXggPSBtX29wcy5zaXplKCkgLSAxOworICAgICAgICAgICAgUGF0dGVybkFsdGVybmF0aXZl
KiBhbHRlcm5hdGl2ZSA9IGFsdGVybmF0aXZlc1tjdXJyZW50QWx0ZXJuYXRpdmVJbmRleF07Cisg
ICAgICAgICAgICBBU1NFUlQoIWFsdGVybmF0aXZlLT5vbmNlVGhyb3VnaCgpKTsKKyAgICAgICAg
ICAgIG9wQ29tcGlsZUFsdGVybmF0aXZlKGFsdGVybmF0aXZlKTsKKworICAgICAgICAgICAgc2l6
ZV90IHRoaXNPcEluZGV4ID0gbV9vcHMuc2l6ZSgpOworICAgICAgICAgICAgbV9vcHMuYXBwZW5k
KFlhcnJPcChPcEJvZHlBbHRlcm5hdGl2ZU5leHQpKTsKKworICAgICAgICAgICAgWWFyck9wJiBs
YXN0T3AgPSBtX29wc1tsYXN0T3BJbmRleF07CisgICAgICAgICAgICBZYXJyT3AmIHRoaXNPcCA9
IG1fb3BzW3RoaXNPcEluZGV4XTsKKworICAgICAgICAgICAgbGFzdE9wLm1fYWx0ZXJuYXRpdmUg
PSBhbHRlcm5hdGl2ZTsKKyAgICAgICAgICAgIGxhc3RPcC5tX25leHRPcCA9IHRoaXNPcEluZGV4
OworICAgICAgICAgICAgdGhpc09wLm1fcHJldmlvdXNPcCA9IGxhc3RPcEluZGV4OworICAgICAg
ICAgICAgCisgICAgICAgICAgICArK2N1cnJlbnRBbHRlcm5hdGl2ZUluZGV4OworICAgICAgICB9
IHdoaWxlIChjdXJyZW50QWx0ZXJuYXRpdmVJbmRleCA8IGFsdGVybmF0aXZlcy5zaXplKCkpOwor
ICAgICAgICBZYXJyT3AmIGxhc3RPcCA9IG1fb3BzLmxhc3QoKTsKKyAgICAgICAgQVNTRVJUKGxh
c3RPcC5tX29wID09IE9wQm9keUFsdGVybmF0aXZlTmV4dCk7CisgICAgICAgIGxhc3RPcC5tX29w
ID0gT3BCb2R5QWx0ZXJuYXRpdmVFbmQ7CisgICAgICAgIGxhc3RPcC5tX2FsdGVybmF0aXZlID0g
MDsKKyAgICAgICAgbGFzdE9wLm1fbmV4dE9wID0gcmVwZWF0TG9vcDsKICAgICB9CiAKICAgICB2
b2lkIGdlbmVyYXRlRW50ZXIoKQpAQCAtMjIzMCwxMCArMjMyMywxMSBAQCBwdWJsaWM6CiAgICAg
WWFyckdlbmVyYXRvcihZYXJyUGF0dGVybiYgcGF0dGVybikKICAgICAgICAgOiBtX3BhdHRlcm4o
cGF0dGVybikKICAgICAgICAgLCBtX3Nob3VsZEZhbGxCYWNrKGZhbHNlKQorICAgICAgICAsIG1f
Y2hlY2tlZCgwKQogICAgIHsKICAgICB9CiAKLSAgICB2b2lkIGdlbmVyYXRlKCkKKyAgICB2b2lk
IGNvbXBpbGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBZYXJyQ29kZUJsb2NrJiBqaXRPYmpl
Y3QpCiAgICAgewogICAgICAgICBnZW5lcmF0ZUVudGVyKCk7CiAKQEAgLTIyNDMsMjYgKzIzMzcs
NTAgQEAgcHVibGljOgogICAgICAgICBpZiAobV9wYXR0ZXJuLm1fYm9keS0+bV9jYWxsRnJhbWVT
aXplKQogICAgICAgICAgICAgc3ViUHRyKEltbTMyKG1fcGF0dGVybi5tX2JvZHktPm1fY2FsbEZy
YW1lU2l6ZSAqIHNpemVvZih2b2lkKikpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKLSAgICAg
ICAgZ2VuZXJhdGVEaXNqdW5jdGlvbihtX3BhdHRlcm4ubV9ib2R5KTsKLSAgICB9Ci0KLSAgICB2
b2lkIGNvbXBpbGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBZYXJyQ29kZUJsb2NrJiBqaXRP
YmplY3QpCi0gICAgewotICAgICAgICBnZW5lcmF0ZSgpOworICAgICAgICAvLyBDb21waWxlIHRo
ZSBwYXR0ZXJuIHRvIHRoZSBpbnRlcm5hbCAnWWFyck9wJyByZXByZXNlbnRhdGlvbi4KKyAgICAg
ICAgb3BDb21waWxlQm9keShtX3BhdHRlcm4ubV9ib2R5KTsKIAotICAgICAgICBMaW5rQnVmZmVy
IHBhdGNoQnVmZmVyKHRoaXMsIGdsb2JhbERhdGEtPnJlZ2V4QWxsb2NhdG9yKTsKKyAgICAgICAg
Ly8gSWYgd2UgZW5jb3VudGVyZWQgYW55dGhpbmcgd2UgY2FuJ3QgaGFuZGxlIGluIHRoZSBKSVQg
Y29kZQorICAgICAgICAvLyAoZS5nLiBiYWNrcmVmZXJlbmNlcykgdGhlbiByZXR1cm4gZWFybHku
CisgICAgICAgIGlmIChtX3Nob3VsZEZhbGxCYWNrKSB7CisgICAgICAgICAgICBqaXRPYmplY3Qu
c2V0RmFsbEJhY2sodHJ1ZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9leHByZXNzaW9uU3RhdGUubV9iYWNrdHJh
Y2tSZWNvcmRzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgcGF0Y2hCdWZmZXIucGF0Y2gobV9l
eHByZXNzaW9uU3RhdGUubV9iYWNrdHJhY2tSZWNvcmRzW2ldLmRhdGFMYWJlbCwgcGF0Y2hCdWZm
ZXIubG9jYXRpb25PZihtX2V4cHJlc3Npb25TdGF0ZS5tX2JhY2t0cmFja1JlY29yZHNbaV0uYmFj
a3RyYWNrTG9jYXRpb24pKTsKKyAgICAgICAgZ2VuZXJhdGUoKTsKKyAgICAgICAgYmFja3RyYWNr
KCk7CiAKLSAgICAgICAgaml0T2JqZWN0LnNldChwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKSk7
CisgICAgICAgIC8vIExpbmsgJiBmaW5hbGl6ZSB0aGUgY29kZS4KKyAgICAgICAgTGlua0J1ZmZl
ciBsaW5rQnVmZmVyKHRoaXMsIGdsb2JhbERhdGEtPnJlZ2V4QWxsb2NhdG9yKTsKKyAgICAgICAg
bV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5rRGF0YUxhYmVscyhsaW5rQnVmZmVyKTsKKyAgICAgICAg
aml0T2JqZWN0LnNldChsaW5rQnVmZmVyLmZpbmFsaXplQ29kZSgpKTsKICAgICAgICAgaml0T2Jq
ZWN0LnNldEZhbGxCYWNrKG1fc2hvdWxkRmFsbEJhY2spOwogICAgIH0KIAogcHJpdmF0ZToKICAg
ICBZYXJyUGF0dGVybiYgbV9wYXR0ZXJuOworCisgICAgLy8gVXNlZCB0byBkZXRlY3QgcmVndWxh
ciBleHByZXNzaW9uIGNvbnN0cnVjdHMgdGhhdCBhcmUgbm90IGN1cnJlbnRseQorICAgIC8vIHN1
cHBvcnRlZCBpbiB0aGUgSklUOyBmYWxsIGJhY2sgdG8gdGhlIGludGVycHJldGVyIHdoZW4gdGhp
cyBpcyBkZXRlY3RlZC4KICAgICBib29sIG1fc2hvdWxkRmFsbEJhY2s7Ci0gICAgR2VuZXJhdGlv
blN0YXRlIG1fZXhwcmVzc2lvblN0YXRlOworCisgICAgLy8gVGhlIHJlZ3VsYXIgZXhwcmVzc2lv
biBleHByZXNzZWQgYXMgYSBsaW5lYXIgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucy4KKyAgICBWZWN0
b3I8WWFyck9wLCAxMjg+IG1fb3BzOworCisgICAgLy8gVGhpcyByZWNvcmRzIHRoZSBjdXJyZW50
IGlucHV0IG9mZnNldCBiZWluZyBhcHBsaWVkIGR1ZSB0byB0aGUgY3VycmVudAorICAgIC8vIHNl
dCBvZiBhbHRlcm5hdGl2ZXMgd2UgYXJlIG5lc3RlZCB3aXRoaW4uIEUuZy4gd2hlbiBtYXRjaGlu
ZyB0aGUKKyAgICAvLyBjaGFyYWN0ZXIgJ2InIHdpdGhpbiB0aGUgcmVndWxhciBleHByZXNzaW9u
IC9hYmMvLCB3ZSB3aWxsIGtub3cgdGhhdAorICAgIC8vIHRoZSBtaW5pbXVtIHNpemUgZm9yIHRo
ZSBhbHRlcm5hdGl2ZSBpcyAzLCBjaGVja2VkIHVwb24gZW50cnkgdG8gdGhlCisgICAgLy8gYWx0
ZXJuYXRpdmUsIGFuZCB0aGF0ICdiJyBpcyBhdCBvZmZzZXQgMSBmcm9tIHRoZSBzdGFydCwgYW5k
IGFzIHN1Y2gKKyAgICAvLyB3aGVuIG1hdGNoaW5nICdiJyB3ZSBuZWVkIHRvIGFwcGx5IGFuIG9m
ZnNldCBvZiAtMiB0byB0aGUgbG9hZC4KKyAgICAvLworICAgIC8vIEZJWE1FOiBUaGlzIHNob3Vs
ZCBnbyBhd2F5LiBSYXRoZXIgdGhhbiB0cmFja2luZyB0aGlzIHZhbHVlIHRocm91Z2hvdXQKKyAg
ICAvLyBjb2RlIGdlbmVyYXRpb24sIHdlIHNob3VsZCBnYXRoZXIgdGhpcyBpbmZvcm1hdGlvbiB1
cCBmcm9udCAmIHN0b3JlIGl0CisgICAgLy8gb24gdGhlIFlhcnJPcCBzdHJ1Y3R1cmUuCisgICAg
aW50IG1fY2hlY2tlZDsKKworICAgIC8vIFRoaXMgY2xhc3MgcmVjb3JkcyBzdGF0ZSB3aGlsc3Qg
Z2VuZXJhdGluZyB0aGUgYmFja3RyYWNraW5nIHBhdGggb2YgY29kZS4KKyAgICBCYWNrdHJhY2tp
bmdTdGF0ZSBtX2JhY2t0cmFja2luZ1N0YXRlOwogfTsKIAogdm9pZCBqaXRDb21waWxlKFlhcnJQ
YXR0ZXJuJiBwYXR0ZXJuLCBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFlhcnJDb2RlQmxvY2sm
IGppdE9iamVjdCkKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDg2NTE1KQorKysgTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTEtMDUtMTUgIEdhdmlu
IEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD02MDg2MAorICAgICAgICBBZGQgbGF5b3V0IHRlc3RzIGZvciBzb21lIHJl
Z3VsYXIgZXhwcmVzc2lvbnMgdGhhdCB1c2VkIHRvIGNyYXNoIHRoZSBjb21waWxlci4KKworICAg
ICAgICAqIGZhc3QvcmVnZXgvcGFyZW50aGVzZXMtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZh
c3QvcmVnZXgvc2NyaXB0LXRlc3RzL3BhcmVudGhlc2VzLmpzOgorCiAyMDExLTA1LTE1ICBSb2Ig
QnVpcyAgPHJidWlzQHJpbS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwu
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3JlZ2V4L3BhcmVudGhlc2VzLWV4cGVjdGVkLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3JlZ2V4L3BhcmVudGhlc2VzLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gODY1MTUpCisrKyBMYXlvdXRUZXN0cy9mYXN0L3JlZ2V4L3BhcmVudGhl
c2VzLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtODcsNyArODcsMTAgQEAgUEFTUyBy
ZWdleHA1MC5leGVjKCdhYmJiYmJiYmJiYmJiYmJiYmJiYgogUEFTUyByZWdleHA1MC5leGVjKCdk
eCcpIGlzIFsnZHgnLCAnZCcsIHVuZGVmaW5lZF0KIFBBU1MgcmVnZXhwNTEuZXhlYygnYWJjJykg
aXMgbnVsbAogUEFTUyByZWdleHA1MS5leGVjKHMpIGlzIFsnKcKeey0sfVB7QW55fScsJyknLHVu
ZGVmaW5lZF0KLVBBU1MgJ0hpIEJvYicubWF0Y2goLyhSb2IpfChCb2IpfChSb2JlcnQpfChCb2Ji
eSkvKSBpcyBbJ0JvYicsdW5kZWZpbmVkLCdCb2InLHVuZGVmaW5lZCx1bmRlZmluZWRdCitQQVNT
ICdIaSBCb2InLm1hdGNoKHJlZ2V4cDUyKSBpcyBbJ0JvYicsdW5kZWZpbmVkLCdCb2InLHVuZGVm
aW5lZCx1bmRlZmluZWRdCitQQVNTIHJlZ2V4cDUzLmV4ZWMoJyMnKSBpcyBbJycsdW5kZWZpbmVk
LCcnXQorUEFTUyByZWdleHA1NC5leGVjKCcjJykgaXMgWycnLCcnLHVuZGVmaW5lZCx1bmRlZmlu
ZWQsJyddCitQQVNTIHJlZ2V4cDU1LmV4ZWMoJyMnKSBpcyBbJycsJyddCiBQQVNTIHN1Y2Nlc3Nm
dWxseVBhcnNlZCBpcyB0cnVlCiAKIFRFU1QgQ09NUExFVEUKSW5kZXg6IExheW91dFRlc3RzL2Zh
c3QvcmVnZXgvc2NyaXB0LXRlc3RzL3BhcmVudGhlc2VzLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2Zhc3QvcmVnZXgvc2NyaXB0LXRlc3RzL3BhcmVudGhlc2VzLmpzCShyZXZpc2lvbiA4
NjUxNSkKKysrIExheW91dFRlc3RzL2Zhc3QvcmVnZXgvc2NyaXB0LXRlc3RzL3BhcmVudGhlc2Vz
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yMTIsOSArMjEyLDExIEBAIHZhciByZWdleHA0NyA9IC8o
Lio/KSg/Oig/Olw/KC4qPyk/KT8pKD8KIHNob3VsZEJlKCJyZWdleHA0Ny5leGVjKCcvd3d3LmFj
bWUuY29tL3RoaXMvaXMvYS9wYXRoL2ZpbGUudHh0JykiLCAiWycvd3d3LmFjbWUuY29tL3RoaXMv
aXMvYS9wYXRoL2ZpbGUudHh0JywnL3d3dy5hY21lLmNvbS90aGlzL2lzL2EvcGF0aC9maWxlLnR4
dCcsdW5kZWZpbmVkXSIpOwogCiB2YXIgcmVnZXhwNDggPSAvXig/OihcdyspOlwvKihbXHdcLlwt
XGRdKykoPzo6KFxkKyl8KSg/PSg/OlwvfCQpKXwpKD86JHxcLz8oLio/KSg/Olw/KC4qPyk/fCko
PzojKC4qKXwpJCkvOworLyogVGhlIHJlZ2V4cCBvbiB0aGUgcHJpb3IgbGluZSBjb25mdXNlcyBY
Y29kZSBzeW50YXggaGlnaGxpZ2h0aW5nLCB0aGlzIGNvbWVudCBmaXhlcyBpdCEgKi8KIHNob3Vs
ZEJlKCJyZWdleHA0OC5leGVjKCdodHRwOi8vd3d3LmFjbWUuY29tL3RoaXMvaXMvYS9wYXRoL2Zp
bGUudHh0JykiLCAiWydodHRwOi8vd3d3LmFjbWUuY29tL3RoaXMvaXMvYS9wYXRoL2ZpbGUudHh0
JywnaHR0cCcsJ3d3dy5hY21lLmNvbScsdW5kZWZpbmVkLCd0aGlzL2lzL2EvcGF0aC9maWxlLnR4
dCcsdW5kZWZpbmVkLHVuZGVmaW5lZF0iKTsKIAogdmFyIHJlZ2V4cDQ5ID0gLyg/OihbXjpdKj8p
KD86KD86XD8oLio/KT8pPykoPzooPzojKT8pJCl8KD86Xig/OihcdyspOlwvKihbXHdcLlwtXGRd
KykoPzo6KFxkKyl8KSg/PSg/OlwvfCQpKXwpKD86JHxcLz8oLio/KSg/Olw/KC4qPyk/fCkoPzoj
KC4qKXwpJCkpLzsKKy8qIFRoZSByZWdleHAgb24gdGhlIHByaW9yIGxpbmUgY29uZnVzZXMgWGNv
ZGUgc3ludGF4IGhpZ2hsaWdodGluZywgdGhpcyBjb21lbnQgZml4ZXMgaXQhICovCiBzaG91bGRC
ZSgicmVnZXhwNDkuZXhlYygnaHR0cDovL3d3dy5hY21lLmNvbS90aGlzL2lzL2EvcGF0aC9maWxl
LnR4dCcpIiwgIlsnaHR0cDovL3d3dy5hY21lLmNvbS90aGlzL2lzL2EvcGF0aC9maWxlLnR4dCcs
dW5kZWZpbmVkLHVuZGVmaW5lZCwnaHR0cCcsJ3d3dy5hY21lLmNvbScsdW5kZWZpbmVkLCd0aGlz
L2lzL2EvcGF0aC9maWxlLnR4dCcsdW5kZWZpbmVkLHVuZGVmaW5lZF0iKTsKIAogdmFyIHJlZ2V4
cDUwID0gLygoYSliezI4LH1jfGQpeC87CkBAIC0yMjcsNyArMjI5LDE2IEBAIHZhciByZWdleHA1
MSA9IG5ldyBSZWdFeHAocyk7CiBzaG91bGRCZU51bGwoInJlZ2V4cDUxLmV4ZWMoJ2FiYycpIik7
CiBzaG91bGRCZSgicmVnZXhwNTEuZXhlYyhzKSIsICJbJylceDlley0sfVB7QW55fScsJyknLHVu
ZGVmaW5lZF0iKTsKIAotc2hvdWxkQmUoIidIaSBCb2InLm1hdGNoKC8oUm9iKXwoQm9iKXwoUm9i
ZXJ0KXwoQm9iYnkpLykiLCAiWydCb2InLHVuZGVmaW5lZCwnQm9iJyx1bmRlZmluZWQsdW5kZWZp
bmVkXSIpOwordmFyIHJlZ2V4cDUyID0gLyhSb2IpfChCb2IpfChSb2JlcnQpfChCb2JieSkvOwor
c2hvdWxkQmUoIidIaSBCb2InLm1hdGNoKHJlZ2V4cDUyKSIsICJbJ0JvYicsdW5kZWZpbmVkLCdC
b2InLHVuZGVmaW5lZCx1bmRlZmluZWRdIik7CisKKy8vIFRlc3QgY2FzZXMgZGlzY292ZXJlZCBi
eSBmdXp6aW5nIHRoYXQgY3Jhc2hlZCB0aGUgY29tcGlsZXIuCit2YXIgcmVnZXhwNTMgPSAvKD89
KD86KD86KGdCKXwoPyFjc3w8KSkoKD89KD8hdjYpezAsfSkpKXwoPz0jKSs/KS9tOworc2hvdWxk
QmUoInJlZ2V4cDUzLmV4ZWMoJyMnKSIsICJbJycsdW5kZWZpbmVkLCcnXSIpOwordmFyIHJlZ2V4
cDU0ID0gLygoPzooPzooKXwoPyEpKSgoPz0oPyEpKSkpfCgpKS9tOworc2hvdWxkQmUoInJlZ2V4
cDU0LmV4ZWMoJyMnKSIsICJbJycsJycsdW5kZWZpbmVkLHVuZGVmaW5lZCwnJ10iKTsKK3ZhciBy
ZWdleHA1NSA9IC8oPzooPzooPzphP3woPzopKSgoPzopKSl8YT8pL207CitzaG91bGRCZSgicmVn
ZXhwNTUuZXhlYygnIycpIiwgIlsnJywnJ10iKTsKIAogdmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9
IHRydWU7CiAK
</data>
<flag name="review"
          id="86805"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>