<?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>195131</bug_id>
          
          <creation_ts>2019-02-27 16:45:50 -0800</creation_ts>
          <short_desc>Fix incorrect handling of try-finally completion values.</short_desc>
          <delta_ts>2019-03-06 21:10:35 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>fpizlo</cc>
    
    <cc>keith_miller</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1510695</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-02-27 16:45:50 -0800</bug_when>
    <thetext>&lt;rdar://problem/46222079&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1510709</commentid>
    <comment_count>1</comment_count>
      <attachid>363158</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-02-27 16:57:19 -0800</bug_when>
    <thetext>Created attachment 363158
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1510767</commentid>
    <comment_count>2</comment_count>
      <attachid>363158</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-02-27 18:37:58 -0800</bug_when>
    <thetext>Comment on attachment 363158
proposed patch.

Talked to Saam.  This fix is incorrect.  New patch coming soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1510787</commentid>
    <comment_count>3</comment_count>
      <attachid>363188</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-02-27 20:02:22 -0800</bug_when>
    <thetext>Created attachment 363188
work in progress for EWS testing only.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1513038</commentid>
    <comment_count>4</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-03-06 08:38:08 -0800</bug_when>
    <thetext>The real bug I was investigating turns out to be due to incorrect handling of completion values of try-finally blocks.

The relevant specs:
Section 13.15.8: https://www.ecma-international.org/ecma-262/9.0/index.html#sec-try-statement-runtime-semantics-evaluation
Section 6.3.2.4: https://www.ecma-international.org/ecma-262/9.0/index.html#sec-updateempty</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1513099</commentid>
    <comment_count>5</comment_count>
      <attachid>363763</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-03-06 11:35:58 -0800</bug_when>
    <thetext>Created attachment 363763
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1513284</commentid>
    <comment_count>6</comment_count>
      <attachid>363763</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-03-06 16:45:03 -0800</bug_when>
    <thetext>Comment on attachment 363763
proposed patch.

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

&gt; Source/JavaScriptCore/ChangeLog:39
&gt; +        One might be deceived into thinking that the above example should complete with
&gt; +        the exception thrown at line 7.  However, according to Section 13.15.8 of the
&gt; +        ECMAScript spec, the &apos;continue&apos; in the finally at line 9 counts as an abrupt
&gt; +        completion.  As a result, it overrides the throw from line 7.  After the continue,
&gt; +        execution resumes at the top of the top of the loop at line 5, followed by a
&gt; +        normal completion at line 11.

Crazy example.

&gt; Source/JavaScriptCore/ChangeLog:60
&gt; +        4. Allocate the FinallyContext on the stack instead of as a member of the
&gt; +           heap allocated ControlFlowScope.  This simplifies its life-cycle management
&gt; +           and reduces the amount of needed copying.

I&apos;m not sure it&apos;s worth reverting behavior on this. I feel like it&apos;d be cleaner just to make it an inline field again and use a move constructor to avoid copying the object.

&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:201
&gt; +FinallyContext::~FinallyContext()
&gt; +{
&gt; +    m_completion.typeRegister = nullptr;
&gt; +    m_completion.valueRegister = nullptr;
&gt; +}

Why? The default destructor already does this.

&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:273
&gt; +            // finally need to rethrow. catch does not.

make this: Finally needs to rethrow. Catch does not.
Alternatively, just remove the comment.

&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:4814
&gt; +            if (hasBreaksOrContinuesNotCoveredByJumps) {

name nit: Let&apos;s call this something like hasBreaksOrContinuesThatEscapeFinally (or similar). As we discussed in person, renaming may be more apt for a follow-up

&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:4816
&gt; +                emitJumpIf&lt;OpBeloweq&gt;(context.completionTypeRegister(), CompletionType::Throw, isThrowOrNormalLabel.get());

Can you also add static_assert(return &gt; throw &amp;&amp; return &gt; normal)?

&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h:160
&gt; +        struct {
&gt; +            RefPtr&lt;RegisterID&gt; typeRegister;
&gt; +            RefPtr&lt;RegisterID&gt; valueRegister;
&gt; +        } m_completion;

Why in a struct?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1513285</commentid>
    <comment_count>7</comment_count>
      <attachid>363763</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-03-06 16:47:34 -0800</bug_when>
    <thetext>Comment on attachment 363763
proposed patch.

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

r=me too, with some suggestions.

&gt; Source/JavaScriptCore/ChangeLog:17
&gt; +                            throw &apos;&apos;;               // line 7

OK. This produces [[Type] == throw, but

&gt; Source/JavaScriptCore/ChangeLog:19
&gt; +                            continue;               // line 9

This makes Completion of try-finally { continue, undefined }, and execution goes on.

&gt; Source/JavaScriptCore/ChangeLog:21
&gt; +                    }

Here, the completion becomes { normal, undefined }.

&gt; Source/JavaScriptCore/ChangeLog:22
&gt; +                }                                   // line 11

Then, try-finally&apos;s completion becomes { return, 42 } because finally block produces normal completion.

&gt; Source/JavaScriptCore/ChangeLog:38
&gt; +        execution resumes at the top of the top of the loop at line 5, followed by a

/the top of the top of the/the top of the/

&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:271
&gt; +    for (auto&amp; tuple : m_exceptionHandlersToEmit) {
&gt;          Ref&lt;Label&gt; realCatchTarget = newLabel();
&gt; +        TryData* tryData = std::get&lt;0&gt;(tuple);
&gt; +
&gt;          OpCatch::emit(this, std::get&lt;1&gt;(tuple), std::get&lt;2&gt;(tuple));
&gt;          realCatchTarget-&gt;setLocation(*this, m_lastInstruction.offset());
&gt; +        if (std::get&lt;3&gt;(tuple).isValid()) {

tuple hurts readability... can we replace it with a struct?

&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:4788
&gt; +            // completion type to Normal. We can also  set the completion value to undefined,

unnecessary space after &quot;also&quot;.

&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:4823
&gt; +                // Not Throw means we have a Break or Continue that should be handled by the outer context.
&gt; +                // These are for Break or Continue completions that have not reached their jump targets
&gt; +                // yet. The outer context needs to run its finally, and resume the jump outwards (unless
&gt; +                // interrupted by another abrupt completion). So, we need to pass the completion type to
&gt; +                // the outer finally. Again, we can skip the completion value because it&apos;s not used for
&gt; +                // Break nor Continue.

This means the following code, is it right?
I think it would be nice if we can have the example for each emitFinallyCompletion&apos;s case.

label: {
    try {
        try {
            break label;
        } finally {
            // this completion is here.
        }
    } finally {
        // we need to jump here next.
    }
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1513318</commentid>
    <comment_count>8</comment_count>
      <attachid>363763</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-03-06 17:27:50 -0800</bug_when>
    <thetext>Comment on attachment 363763
proposed patch.

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

Thanks for the reviews.

&gt;&gt; Source/JavaScriptCore/ChangeLog:60
&gt;&gt; +           and reduces the amount of needed copying.
&gt; 
&gt; I&apos;m not sure it&apos;s worth reverting behavior on this. I feel like it&apos;d be cleaner just to make it an inline field again and use a move constructor to avoid copying the object.

I still think the current form is easier to reason about.  So, I&apos;m going to leave it as is.

&gt;&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:201
&gt;&gt; +}
&gt; 
&gt; Why? The default destructor already does this.

I agree.  Not needed.  Will remove.

&gt;&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:271
&gt;&gt; +        if (std::get&lt;3&gt;(tuple).isValid()) {
&gt; 
&gt; tuple hurts readability... can we replace it with a struct?

I&apos;ll do this in a follow up patch.

&gt;&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:4814
&gt;&gt; +            if (hasBreaksOrContinuesNotCoveredByJumps) {
&gt; 
&gt; name nit: Let&apos;s call this something like hasBreaksOrContinuesThatEscapeFinally (or similar). As we discussed in person, renaming may be more apt for a follow-up

Will do in a follow up.

&gt;&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:4816
&gt;&gt; +                emitJumpIf&lt;OpBeloweq&gt;(context.completionTypeRegister(), CompletionType::Throw, isThrowOrNormalLabel.get());
&gt; 
&gt; Can you also add static_assert(return &gt; throw &amp;&amp; return &gt; normal)?

I thought about adding this, but the assert we really want is that (all jumpIDs &gt; throw &amp;&amp; all jumpIDs &gt; normal).  I couldn&apos;t think of how to express that in a meaningful way, and ended up leaving out the assert.  That said, I think I&apos;ll at least add the following to serve as documentation even if it isn&apos;t a strong guarantee about jumpIDs.

&gt;&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:4823
&gt;&gt; +                // Break nor Continue.
&gt; 
&gt; This means the following code, is it right?
&gt; I think it would be nice if we can have the example for each emitFinallyCompletion&apos;s case.
&gt; 
&gt; label: {
&gt;     try {
&gt;         try {
&gt;             break label;
&gt;         } finally {
&gt;             // this completion is here.
&gt;         }
&gt;     } finally {
&gt;         // we need to jump here next.
&gt;     }
&gt; }

Yes.  That example is correct.  I agree that example JS code does help make this code easier to understand.  I&apos;ll add these in a follow up patch.

&gt;&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h:160
&gt;&gt; +        } m_completion;
&gt; 
&gt; Why in a struct?

The spec speaks of a Completion record.  This helps communicate that concept and also documents the fact that these 2 registers work together as a pair.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1513319</commentid>
    <comment_count>9</comment_count>
      <attachid>363826</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-03-06 17:28:32 -0800</bug_when>
    <thetext>Created attachment 363826
patch for landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1513338</commentid>
    <comment_count>10</comment_count>
      <attachid>363763</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-03-06 18:38:03 -0800</bug_when>
    <thetext>Comment on attachment 363763
proposed patch.

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

&gt;&gt;&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h:160
&gt;&gt;&gt; +        } m_completion;
&gt;&gt; 
&gt;&gt; Why in a struct?
&gt; 
&gt; The spec speaks of a Completion record.  This helps communicate that concept and also documents the fact that these 2 registers work together as a pair.

can you call it m_completionRecord then?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1513386</commentid>
    <comment_count>11</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-03-06 21:01:12 -0800</bug_when>
    <thetext>(In reply to Saam Barati from comment #10)
&gt; Comment on attachment 363763 [details]
&gt; proposed patch.
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=363763&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h:160
&gt; &gt;&gt;&gt; +        } m_completion;
&gt; &gt;&gt; 
&gt; &gt;&gt; Why in a struct?
&gt; &gt; 
&gt; &gt; The spec speaks of a Completion record.  This helps communicate that concept and also documents the fact that these 2 registers work together as a pair.
&gt; 
&gt; can you call it m_completionRecord then?

Will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1513396</commentid>
    <comment_count>12</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-03-06 21:10:35 -0800</bug_when>
    <thetext>Landed in r242591: &lt;http://trac.webkit.org/r242591&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>363158</attachid>
            <date>2019-02-27 16:57:19 -0800</date>
            <delta_ts>2019-02-27 18:37:58 -0800</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-195131.patch</filename>
            <type>text/plain</type>
            <size>2972</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNDIxODEpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEzIEBACisyMDE5LTAyLTI3ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNv
bT4KKworICAgICAgICBNYWtlIEpTT2JqZWN0OjpjYWxjdWxhdGVkQ2xhc3NOYW1lKCkgbW9yZSBy
b2J1c3QgYWdhaW5zdCBpbnRlcm5hbCBvYmplY3RzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1MTMxCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS80
NjIyMjA3OT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIHN0cmVzcy9vYmplY3QtY2FsY3VsYXRlZENsYXNzTmFtZS1zaG91bGQtYmUtcm9idXN0LWFn
YWluc3QtaW50ZXJuYWwtb2JqZWN0cy5qczogQWRkZWQuCisKIDIwMTktMDItMjYgIFl1c3VrZSBT
dXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OOiBzdHJlc3Mv
cmVncmVzcy0xNzgzODYuanMgaXMgdGltaW5nIG91dCBvbiBKU0MgZGVidWcgYm90CkluZGV4OiBK
U1Rlc3RzL3N0cmVzcy9vYmplY3QtY2FsY3VsYXRlZENsYXNzTmFtZS1zaG91bGQtYmUtcm9idXN0
LWFnYWluc3QtaW50ZXJuYWwtb2JqZWN0cy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVz
cy9vYmplY3QtY2FsY3VsYXRlZENsYXNzTmFtZS1zaG91bGQtYmUtcm9idXN0LWFnYWluc3QtaW50
ZXJuYWwtb2JqZWN0cy5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL3N0cmVzcy9vYmplY3Qt
Y2FsY3VsYXRlZENsYXNzTmFtZS1zaG91bGQtYmUtcm9idXN0LWFnYWluc3QtaW50ZXJuYWwtb2Jq
ZWN0cy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIwIEBACisvL0AgcnVuRGVmYXVsdCgi
LS11c2VUeXBlUHJvZmlsZXI9dHJ1ZSIpCisKKy8vIFRoaXMgdGVzdCBzaG91bGQgbm90IGNyYXNo
LgorCitmdW5jdGlvbiBmb28oKSB7CisgIHRyeSB7CisgICAgcmV0dXJuOworICB9IGZpbmFsbHkg
eworICAgIGZvciAodmFyIGogPSAwOyBqIDwgMTsgaisrKSB7CisgICAgICB0cnkgeworICAgICAg
ICB0aHJvdyAnJzsKKyAgICAgIH0gZmluYWxseSB7CisgICAgICAgIGNvbnRpbnVlOworICAgICAg
fQorICAgIH0KKyAgfQorfQorCitmb28oKTsKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDsgKytp
KSB7fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNDIxNzQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTcgQEAKKzIwMTktMDItMjcgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisgICAg
ICAgIE1ha2UgSlNPYmplY3Q6OmNhbGN1bGF0ZWRDbGFzc05hbWUoKSBtb3JlIHJvYnVzdCBhZ2Fp
bnN0IGludGVybmFsIG9iamVjdHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xOTUxMzEKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzQ2MjIyMDc5Pgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIElmIHRoZSBz
dHJ1Y3R1cmUgZG9lcyBub3QgaGF2ZSBhIGdsb2JhbE9iamVjdCwgdGhlbiBpdCBiZWxvbmdzIHRv
IGFuIGludGVybmFsCisgICAgICAgIG9iamVjdC4gIEp1c3QgcmV0dXJuICJPYmplY3QiIGFzIHRo
ZSBjYWxjdWxhdGVkIG5hbWUuCisKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0LmNwcDoKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OmNhbGN1bGF0ZWRDbGFzc05hbWUpOgorCiAyMDE5LTAyLTI3
ICBBbnRvaW5lIFF1aW50ICA8Z3Jhb3V0c0BhcHBsZS5jb20+CiAKICAgICAgICAgU3VwcG9ydCBQ
b2ludGVyIEV2ZW50cyBvbiBtYWNPUwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMjQyMTc0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MjcsNiArNTI3LDEy
IEBAIFN0cmluZyBKU09iamVjdDo6Y2FsY3VsYXRlZENsYXNzTmFtZShKU08KICAgICBTdHJpbmcg
Y29uc3RydWN0b3JGdW5jdGlvbk5hbWU7CiAgICAgYXV0byogc3RydWN0dXJlID0gb2JqZWN0LT5z
dHJ1Y3R1cmUoKTsKICAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSBzdHJ1Y3R1cmUtPmdsb2JhbE9i
amVjdCgpOworICAgIGlmICghZ2xvYmFsT2JqZWN0KSB7CisgICAgICAgIC8vIE9ubHkgaW50ZXJu
YWwgb2JqZWN0cyBkb24ndCBoYXZlIGEgZ2xvYmFsT2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGUK
KyAgICAgICAgLy8gc3RydWN0dXJlLiBGb3IgdGhlc2UsIGp1c3QgaWRlbnRpZnkgb2JqZWN0IGFz
IGEgZ2VuZXJpYyBPYmplY3QuCisgICAgICAgIHJldHVybiAiT2JqZWN0Il9zOworICAgIH0KKwog
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9DQVRDSF9TQ09QRSh2bSk7CiAgICAgYXV0byogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFs
RXhlYygpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>363188</attachid>
            <date>2019-02-27 20:02:22 -0800</date>
            <delta_ts>2019-03-06 08:38:25 -0800</delta_ts>
            <desc>work in progress for EWS testing only.</desc>
            <filename>wip.patch</filename>
            <type>text/plain</type>
            <size>17942</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNDIxODEpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEzIEBACisyMDE5LTAyLTI3ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNv
bT4KKworICAgICAgICBNYWtlIEpTT2JqZWN0OjpjYWxjdWxhdGVkQ2xhc3NOYW1lKCkgbW9yZSBy
b2J1c3QgYWdhaW5zdCBpbnRlcm5hbCBvYmplY3RzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1MTMxCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS80
NjIyMjA3OT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIHN0cmVzcy9vYmplY3QtY2FsY3VsYXRlZENsYXNzTmFtZS1zaG91bGQtYmUtcm9idXN0LWFn
YWluc3QtaW50ZXJuYWwtb2JqZWN0cy5qczogQWRkZWQuCisKIDIwMTktMDItMjYgIFl1c3VrZSBT
dXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OOiBzdHJlc3Mv
cmVncmVzcy0xNzgzODYuanMgaXMgdGltaW5nIG91dCBvbiBKU0MgZGVidWcgYm90CkluZGV4OiBK
U1Rlc3RzL3N0cmVzcy9vYmplY3QtY2FsY3VsYXRlZENsYXNzTmFtZS1zaG91bGQtYmUtcm9idXN0
LWFnYWluc3QtaW50ZXJuYWwtb2JqZWN0cy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVz
cy9vYmplY3QtY2FsY3VsYXRlZENsYXNzTmFtZS1zaG91bGQtYmUtcm9idXN0LWFnYWluc3QtaW50
ZXJuYWwtb2JqZWN0cy5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL3N0cmVzcy9vYmplY3Qt
Y2FsY3VsYXRlZENsYXNzTmFtZS1zaG91bGQtYmUtcm9idXN0LWFnYWluc3QtaW50ZXJuYWwtb2Jq
ZWN0cy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIwIEBACisvL0AgcnVuRGVmYXVsdCgi
LS11c2VUeXBlUHJvZmlsZXI9dHJ1ZSIpCisKKy8vIFRoaXMgdGVzdCBzaG91bGQgbm90IGNyYXNo
LgorCitmdW5jdGlvbiBmb28oKSB7CisgIHRyeSB7CisgICAgcmV0dXJuOworICB9IGZpbmFsbHkg
eworICAgIGZvciAodmFyIGogPSAwOyBqIDwgMTsgaisrKSB7CisgICAgICB0cnkgeworICAgICAg
ICB0aHJvdyAnJzsKKyAgICAgIH0gZmluYWxseSB7CisgICAgICAgIGNvbnRpbnVlOworICAgICAg
fQorICAgIH0KKyAgfQorfQorCitmb28oKTsKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDsgKytp
KSB7fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNDIxNzQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTcgQEAKKzIwMTktMDItMjcgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisgICAg
ICAgIE1ha2UgSlNPYmplY3Q6OmNhbGN1bGF0ZWRDbGFzc05hbWUoKSBtb3JlIHJvYnVzdCBhZ2Fp
bnN0IGludGVybmFsIG9iamVjdHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xOTUxMzEKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzQ2MjIyMDc5Pgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIElmIHRoZSBz
dHJ1Y3R1cmUgZG9lcyBub3QgaGF2ZSBhIGdsb2JhbE9iamVjdCwgdGhlbiBpdCBiZWxvbmdzIHRv
IGFuIGludGVybmFsCisgICAgICAgIG9iamVjdC4gIEp1c3QgcmV0dXJuICJPYmplY3QiIGFzIHRo
ZSBjYWxjdWxhdGVkIG5hbWUuCisKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0LmNwcDoKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OmNhbGN1bGF0ZWRDbGFzc05hbWUpOgorCiAyMDE5LTAyLTI3
ICBBbnRvaW5lIFF1aW50ICA8Z3Jhb3V0c0BhcHBsZS5jb20+CiAKICAgICAgICAgU3VwcG9ydCBQ
b2ludGVyIEV2ZW50cyBvbiBtYWNPUwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9B
UElVdGlscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvQVBJVXRp
bHMuaAkocmV2aXNpb24gMjQyMTc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9BUElV
dGlscy5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw4IEBAIGlubGluZSB2b2lkIHNldEV4
Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSoKICAgICAgICAgKnJldHVybmVkRXhjZXB0aW9uUmVmID0g
dG9SZWYoZXhlYywgZXhjZXB0aW9uKTsKICNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKICAg
ICBKU0M6OlZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgdm0udm1FbnRyeUdsb2JhbE9iamVjdChl
eGVjKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLnJlcG9ydEFQSUV4Y2VwdGlvbihleGVjLCBKU0M6
OkV4Y2VwdGlvbjo6Y3JlYXRlKHZtLCBleGNlcHRpb24pKTsKKyAgICBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgPSB2bS52bUVudHJ5R2xvYmFsT2JqZWN0KGV4ZWMpOworICAgIGds
b2JhbE9iamVjdC0+aW5zcGVjdG9yQ29udHJvbGxlcigpLnJlcG9ydEFQSUV4Y2VwdGlvbihleGVj
LCBKU0M6OkV4Y2VwdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIGV4Y2VwdGlvbikpOwog
I2VuZGlmCiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNCYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQmFzZS5jcHAJKHJldmlz
aW9uIDI0MjE3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNCYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTE1LDE0ICsxMTUsMTUgQEAgYm9vbCBKU0NoZWNrU2NyaXB0U3ludGF4
KEpTQ29udGV4dFJlZiBjdAogICAgIFNvdXJjZUNvZGUgc291cmNlID0gbWFrZVNvdXJjZShzY3Jp
cHQtPnN0cmluZygpLCBTb3VyY2VPcmlnaW4geyBzb3VyY2VVUkxTdHJpbmcgfSwgVVJMKHsgfSwg
c291cmNlVVJMU3RyaW5nKSwgVGV4dFBvc2l0aW9uKE9yZGluYWxOdW1iZXI6OmZyb21PbmVCYXNl
ZEludChzdGFydGluZ0xpbmVOdW1iZXIpLCBPcmRpbmFsTnVtYmVyKCkpKTsKICAgICAKICAgICBK
U1ZhbHVlIHN5bnRheEV4Y2VwdGlvbjsKLSAgICBib29sIGlzVmFsaWRTeW50YXggPSBjaGVja1N5
bnRheCh2bS52bUVudHJ5R2xvYmFsT2JqZWN0KGV4ZWMpLT5nbG9iYWxFeGVjKCksIHNvdXJjZSwg
JnN5bnRheEV4Y2VwdGlvbik7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHZt
LnZtRW50cnlHbG9iYWxPYmplY3QoZXhlYyk7CisgICAgYm9vbCBpc1ZhbGlkU3ludGF4ID0gY2hl
Y2tTeW50YXgoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIHNvdXJjZSwgJnN5bnRheEV4Y2Vw
dGlvbik7CiAKICAgICBpZiAoIWlzVmFsaWRTeW50YXgpIHsKICAgICAgICAgaWYgKGV4Y2VwdGlv
bikKICAgICAgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihleGVjLCBzeW50YXhFeGNlcHRpb24p
OwogI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotICAgICAgICBFeGNlcHRpb24qIGV4Y2Vw
dGlvbiA9IEV4Y2VwdGlvbjo6Y3JlYXRlKHZtLCBzeW50YXhFeGNlcHRpb24pOwotICAgICAgICB2
bS52bUVudHJ5R2xvYmFsT2JqZWN0KGV4ZWMpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkucmVwb3J0
QVBJRXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7CisgICAgICAgIEV4Y2VwdGlvbiogZXhjZXB0
aW9uID0gRXhjZXB0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgc3ludGF4RXhjZXB0aW9u
KTsKKyAgICAgICAgZ2xvYmFsT2JqZWN0LT5pbnNwZWN0b3JDb250cm9sbGVyKCkucmVwb3J0QVBJ
RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7CiAjZW5kaWYKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZS5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWUubW0JKHJldmlzaW9u
IDI0MjE3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZS5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTcxMSw4ICs3MTEsOSBAQCBzdGF0aWMgdm9pZCByZXBvcnRFeGNlcHRpb25U
b0luc3BlY3RvcihKCiB7CiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGNvbnRleHQp
OwogICAgIEpTQzo6Vk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBKU0M6OkV4Y2VwdGlvbiogZXhj
ZXB0aW9uID0gSlNDOjpFeGNlcHRpb246OmNyZWF0ZSh2bSwgZXhjZXB0aW9uVmFsdWUpOwotICAg
IHZtLnZtRW50cnlHbG9iYWxPYmplY3QoZXhlYyktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5yZXBv
cnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uKTsKKyAgICBKU0M6OkpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QgPSB2bS52bUVudHJ5R2xvYmFsT2JqZWN0KGV4ZWMpOworICAgIEpTQzo6
RXhjZXB0aW9uKiBleGNlcHRpb24gPSBKU0M6OkV4Y2VwdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxP
YmplY3QsIGV4Y2VwdGlvblZhbHVlKTsKKyAgICBnbG9iYWxPYmplY3QtPmluc3BlY3RvckNvbnRy
b2xsZXIoKS5yZXBvcnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uKTsKIH0KICNlbmRpZgog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb24uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbi5jcHAJKHJl
dmlzaW9uIDI0MjE3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlv
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE1LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMyw5ICszMywxMCBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogY29uc3QgQ2xhc3NJbmZvIEV4Y2VwdGlvbjo6c19pbmZvID0geyAiRXhjZXB0aW9uIiwgJkJh
c2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShFeGNlcHRp
b24pIH07CiAKLUV4Y2VwdGlvbiogRXhjZXB0aW9uOjpjcmVhdGUoVk0mIHZtLCBKU1ZhbHVlIHRo
cm93blZhbHVlLCBTdGFja0NhcHR1cmVBY3Rpb24gYWN0aW9uKQorRXhjZXB0aW9uKiBFeGNlcHRp
b246OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUg
dGhyb3duVmFsdWUsIFN0YWNrQ2FwdHVyZUFjdGlvbiBhY3Rpb24pCiB7Ci0gICAgRXhjZXB0aW9u
KiByZXN1bHQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxFeGNlcHRpb24+KHZtLmhlYXAp
KSBFeGNlcHRpb24odm0pOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0
LT5leGNlcHRpb25TdHJ1Y3R1cmUoKTsKKyAgICBFeGNlcHRpb24qIHJlc3VsdCA9IG5ldyAoTm90
TnVsbCwgYWxsb2NhdGVDZWxsPEV4Y2VwdGlvbj4odm0uaGVhcCkpIEV4Y2VwdGlvbih2bSwgc3Ry
dWN0dXJlKTsKICAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtLCB0aHJvd25WYWx1ZSwgYWN0
aW9uKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtNjIsOCArNjMsOCBAQCB2b2lkIEV4Y2Vw
dGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlCiAgICAgICAgIGZyYW1lLnZpc2l0Q2hpbGRy
ZW4odmlzaXRvcik7CiB9CiAKLUV4Y2VwdGlvbjo6RXhjZXB0aW9uKFZNJiB2bSkKLSAgICA6IEJh
c2Uodm0sIHZtLmV4Y2VwdGlvblN0cnVjdHVyZS5nZXQoKSkKK0V4Y2VwdGlvbjo6RXhjZXB0aW9u
KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUp
CiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbi5o
CShyZXZpc2lvbiAyNDIxNzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNl
cHRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgogICAgICAg
ICBDYXB0dXJlU3RhY2ssCiAgICAgICAgIERvTm90Q2FwdHVyZVN0YWNrCiAgICAgfTsKLSAgICBK
U19FWFBPUlRfUFJJVkFURSBzdGF0aWMgRXhjZXB0aW9uKiBjcmVhdGUoVk0mLCBKU1ZhbHVlIHRo
cm93blZhbHVlLCBTdGFja0NhcHR1cmVBY3Rpb24gPSBDYXB0dXJlU3RhY2spOworICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyBFeGNlcHRpb24qIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0
KiwgSlNWYWx1ZSB0aHJvd25WYWx1ZSwgU3RhY2tDYXB0dXJlQWN0aW9uID0gQ2FwdHVyZVN0YWNr
KTsKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFs
T2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOwogCkBAIC02Miw3ICs2Miw3IEBAIHB1YmxpYzoK
ICAgICB+RXhjZXB0aW9uKCk7CiAKIHByaXZhdGU6Ci0gICAgRXhjZXB0aW9uKFZNJik7CisgICAg
RXhjZXB0aW9uKFZNJiwgU3RydWN0dXJlKik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYs
IEpTVmFsdWUgdGhyb3duVmFsdWUsIFN0YWNrQ2FwdHVyZUFjdGlvbik7CiAgICAgc3RhdGljIHZv
aWQgZGVzdHJveShKU0NlbGwqKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjQyMTc0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00NTQsNiArNDU0LDEwIEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OmluaXQoVk0mIHZtKQog
ICAgIGluaXRGdW5jdGlvblN0cnVjdHVyZXMobV9idWlsdGluRnVuY3Rpb25zKTsKICAgICBpbml0
RnVuY3Rpb25TdHJ1Y3R1cmVzKG1fb3JkaW5hcnlGdW5jdGlvbnMpOwogCisgICAgbV9leGNlcHRp
b25TdHJ1Y3R1cmUuaW5pdExhdGVyKAorICAgICAgICBbXSAoY29uc3QgSW5pdGlhbGl6ZXI8U3Ry
dWN0dXJlPiYgaW5pdCkgeworICAgICAgICAgICAgaW5pdC5zZXQoRXhjZXB0aW9uOjpjcmVhdGVT
dHJ1Y3R1cmUoaW5pdC52bSwgaW5pdC5vd25lciwganNOdWxsKCkpKTsKKyAgICAgICAgfSk7CiAg
ICAgbV9jdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvblN0cnVjdHVyZS5pbml0TGF0ZXIoCiAgICAg
ICAgIFtdIChjb25zdCBJbml0aWFsaXplcjxTdHJ1Y3R1cmU+JiBpbml0KSB7CiAgICAgICAgICAg
ICBpbml0LnNldChKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUo
aW5pdC52bSwgaW5pdC5vd25lciwgaW5pdC5vd25lci0+bV9mdW5jdGlvblByb3RvdHlwZS5nZXQo
KSkpOwpAQCAtMTY3Niw2ICsxNjgwLDcgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6dmlzaXRDaGls
ZHJlbihKU0NlbAogICAgIHZpc2l0RnVuY3Rpb25TdHJ1Y3R1cmVzKHRoaXNPYmplY3QtPm1fYnVp
bHRpbkZ1bmN0aW9ucyk7CiAgICAgdmlzaXRGdW5jdGlvblN0cnVjdHVyZXModGhpc09iamVjdC0+
bV9vcmRpbmFyeUZ1bmN0aW9ucyk7CiAKKyAgICB0aGlzT2JqZWN0LT5tX2V4Y2VwdGlvblN0cnVj
dHVyZS52aXNpdCh2aXNpdG9yKTsKICAgICB0aGlzT2JqZWN0LT5tX2N1c3RvbUdldHRlclNldHRl
ckZ1bmN0aW9uU3RydWN0dXJlLnZpc2l0KHZpc2l0b3IpOwogICAgIHRoaXNPYmplY3QtPm1fYm91
bmRGdW5jdGlvblN0cnVjdHVyZS52aXNpdCh2aXNpdG9yKTsKICAgICB2aXNpdG9yLmFwcGVuZCh0
aGlzT2JqZWN0LT5tX2dldHRlclNldHRlclN0cnVjdHVyZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDI0MjE3NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTM2MCw2ICszNjAsNyBAQCBwdWJsaWM6CiAgICAgRnVuY3Rpb25TdHJ1Y3R1
cmVzIG1fYnVpbHRpbkZ1bmN0aW9uczsKICAgICBGdW5jdGlvblN0cnVjdHVyZXMgbV9vcmRpbmFy
eUZ1bmN0aW9uczsKIAorICAgIExhenlQcm9wZXJ0eTxKU0dsb2JhbE9iamVjdCwgU3RydWN0dXJl
PiBtX2V4Y2VwdGlvblN0cnVjdHVyZTsKICAgICBMYXp5UHJvcGVydHk8SlNHbG9iYWxPYmplY3Qs
IFN0cnVjdHVyZT4gbV9ib3VuZEZ1bmN0aW9uU3RydWN0dXJlOwogICAgIExhenlQcm9wZXJ0eTxK
U0dsb2JhbE9iamVjdCwgU3RydWN0dXJlPiBtX2N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uU3Ry
dWN0dXJlOwogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fZ2V0dGVyU2V0dGVyU3RydWN0
dXJlOwpAQCAtNzM2LDYgKzczNyw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fb3JkaW5h
cnlGdW5jdGlvbnMuc3RyaWN0RnVuY3Rpb25TdHJ1Y3R1cmUuZ2V0KCk7CiAgICAgfQogCisgICAg
U3RydWN0dXJlKiBleGNlcHRpb25TdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX2V4Y2VwdGlv
blN0cnVjdHVyZS5nZXQodGhpcyk7IH0KICAgICBTdHJ1Y3R1cmUqIGJvdW5kRnVuY3Rpb25TdHJ1
Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX2JvdW5kRnVuY3Rpb25TdHJ1Y3R1cmUuZ2V0KHRoaXMp
OyB9CiAgICAgU3RydWN0dXJlKiBjdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvblN0cnVjdHVyZSgp
IGNvbnN0IHsgcmV0dXJuIG1fY3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb25TdHJ1Y3R1cmUuZ2V0
KHRoaXMpOyB9CiAgICAgU3RydWN0dXJlKiBnZXR0ZXJTZXR0ZXJTdHJ1Y3R1cmUoKSBjb25zdCB7
IHJldHVybiBtX2dldHRlclNldHRlclN0cnVjdHVyZS5nZXQoKTsgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMjQyMTc0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01MjcsNiArNTI3LDEyIEBAIFN0cmluZyBKU09iamVjdDo6Y2FsY3VsYXRlZENsYXNzTmFt
ZShKU08KICAgICBTdHJpbmcgY29uc3RydWN0b3JGdW5jdGlvbk5hbWU7CiAgICAgYXV0byogc3Ry
dWN0dXJlID0gb2JqZWN0LT5zdHJ1Y3R1cmUoKTsKICAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSBz
dHJ1Y3R1cmUtPmdsb2JhbE9iamVjdCgpOworLy8gICAgaWYgKCFnbG9iYWxPYmplY3QpIHsKKy8v
ICAgICAgICAvLyBPbmx5IGludGVybmFsIG9iamVjdHMgZG9uJ3QgaGF2ZSBhIGdsb2JhbE9iamVj
dCBhc3NvY2lhdGVkIHdpdGggdGhlCisvLyAgICAgICAgLy8gc3RydWN0dXJlLiBGb3IgdGhlc2Us
IGp1c3QgaWRlbnRpZnkgb2JqZWN0IGFzIGEgZ2VuZXJpYyBPYmplY3QuCisvLyAgICAgICAgcmV0
dXJuICJPYmplY3QiX3M7CisvLyAgICB9CisvLwogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAgICAgYXV0
byogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNLmNwcAkocmV2aXNpb24gMjQyMTc0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODYsNyArMzg2LDYgQEAg
Vk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgIGlmIChWTTo6Y2Fu
VXNlSklUKCkpCiAgICAgICAgIGluZmVycmVkVmFsdWVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBJbmZl
cnJlZFZhbHVlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgZnVu
Y3Rpb25SYXJlRGF0YVN0cnVjdHVyZS5zZXQoKnRoaXMsIEZ1bmN0aW9uUmFyZURhdGE6OmNyZWF0
ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKLSAgICBleGNlcHRpb25TdHJ1Y3R1cmUu
c2V0KCp0aGlzLCBFeGNlcHRpb246OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkp
KTsKICAgICBwcm9taXNlRGVmZXJyZWRTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBKU1Byb21pc2VEZWZl
cnJlZDo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIGludGVybmFs
UHJvbWlzZURlZmVycmVkU3RydWN0dXJlLnNldCgqdGhpcywgSlNJbnRlcm5hbFByb21pc2VEZWZl
cnJlZDo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIG5hdGl2ZVN0
ZEZ1bmN0aW9uQ2VsbFN0cnVjdHVyZS5zZXQoKnRoaXMsIE5hdGl2ZVN0ZEZ1bmN0aW9uQ2VsbDo6
Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwpAQCAtODMyLDggKzgzMSwxMCBA
QCBKU1ZhbHVlIFZNOjp0aHJvd0V4Y2VwdGlvbihFeGVjU3RhdGUqIGV4CiB7CiAgICAgVk0mIHZt
ID0gKnRoaXM7CiAgICAgRXhjZXB0aW9uKiBleGNlcHRpb24gPSBqc0R5bmFtaWNDYXN0PEV4Y2Vw
dGlvbio+KHZtLCB0aHJvd25WYWx1ZSk7Ci0gICAgaWYgKCFleGNlcHRpb24pCi0gICAgICAgIGV4
Y2VwdGlvbiA9IEV4Y2VwdGlvbjo6Y3JlYXRlKCp0aGlzLCB0aHJvd25WYWx1ZSk7CisgICAgaWYg
KCFleGNlcHRpb24pIHsKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHZt
LnZtRW50cnlHbG9iYWxPYmplY3QoZXhlYyk7CisgICAgICAgIGV4Y2VwdGlvbiA9IEV4Y2VwdGlv
bjo6Y3JlYXRlKCp0aGlzLCBnbG9iYWxPYmplY3QsIHRocm93blZhbHVlKTsKKyAgICB9CiAKICAg
ICB0aHJvd0V4Y2VwdGlvbihleGVjLCBleGNlcHRpb24pOwogICAgIHJldHVybiBKU1ZhbHVlKGV4
Y2VwdGlvbik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDI0
MjE3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTUyMyw3ICs1MjMsNiBAQCBwdWJsaWM6CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gcHJv
cGVydHlUYWJsZVN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiBpbmZlcnJlZFZhbHVl
U3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGZ1bmN0aW9uUmFyZURhdGFTdHJ1Y3R1
cmU7Ci0gICAgU3Ryb25nPFN0cnVjdHVyZT4gZXhjZXB0aW9uU3RydWN0dXJlOwogICAgIFN0cm9u
ZzxTdHJ1Y3R1cmU+IHByb21pc2VEZWZlcnJlZFN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0
dXJlPiBpbnRlcm5hbFByb21pc2VEZWZlcnJlZFN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0
dXJlPiBuYXRpdmVTdGRGdW5jdGlvbkNlbGxTdHJ1Y3R1cmU7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9hbmltYXRpb24vS2V5ZnJhbWVFZmZlY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2FuaW1hdGlvbi9LZXlmcmFtZUVmZmVjdC5jcHAJKHJldmlzaW9uIDI0MjE3NCkKKysrIFNv
dXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9LZXlmcmFtZUVmZmVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0yNzIsNyArMjcyLDggQEAgc3RhdGljIGlubGluZSBFeGNlcHRpb25Pcjx2b2lkPiBwcm9j
ZXNzSQogICAgICAgICAvLyBTdGVwcyAyIHRocm91Z2ggNiBhcmUgYWxyZWFkeSBpbXBsZW1lbnRl
ZCBieSBmb3JFYWNoSW5JdGVyYWJsZSgpLgogICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAgICAgICAgIGlmICghbmV4dFZhbHVlIHx8ICFuZXh0VmFsdWUuaXNP
YmplY3QoKSkgewotICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgSlND
OjpFeGNlcHRpb246OmNyZWF0ZSh2bSwgY3JlYXRlVHlwZUVycm9yKCZzdGF0ZSkpKTsKKyAgICAg
ICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB2bS52bUVudHJ5R2xvYmFsT2Jq
ZWN0KCZzdGF0ZSk7CisgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBK
U0M6OkV4Y2VwdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIGNyZWF0ZVR5cGVFcnJvcigm
c3RhdGUpKSk7CiAgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbGxiYWNrRGF0YS5jcHAJKHJldmlzaW9u
IDI0MjE3NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDctMjAwOSwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDctMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU0LDcgKzU0LDcgQEAgSlNWYWx1ZSBKU0NhbGxi
YWNrRGF0YTo6aW52b2tlQ2FsbGJhY2soSgogICAgIH0KICAgICBpZiAoY2FsbFR5cGUgPT0gQ2Fs
bFR5cGU6Ok5vbmUpIHsKICAgICAgICAgaWYgKG1ldGhvZCA9PSBDYWxsYmFja1R5cGU6OkZ1bmN0
aW9uKSB7Ci0gICAgICAgICAgICByZXR1cm5lZEV4Y2VwdGlvbiA9IEpTQzo6RXhjZXB0aW9uOjpj
cmVhdGUodm0sIGNyZWF0ZVR5cGVFcnJvcihleGVjKSk7CisgICAgICAgICAgICByZXR1cm5lZEV4
Y2VwdGlvbiA9IEpTQzo6RXhjZXB0aW9uOjpjcmVhdGUodm0sICZnbG9iYWxPYmplY3QsIGNyZWF0
ZVR5cGVFcnJvcihleGVjKSk7CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAg
ICB9CiAKQEAgLTYyLDcgKzYyLDcgQEAgSlNWYWx1ZSBKU0NhbGxiYWNrRGF0YTo6aW52b2tlQ2Fs
bGJhY2soSgogICAgICAgICBmdW5jdGlvbiA9IGNhbGxiYWNrLT5nZXQoZXhlYywgZnVuY3Rpb25O
YW1lKTsKICAgICAgICAgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YSh2bSwgZnVuY3Rpb24sIGNhbGxE
YXRhKTsKICAgICAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlOjpOb25lKSB7Ci0gICAgICAg
ICAgICByZXR1cm5lZEV4Y2VwdGlvbiA9IEpTQzo6RXhjZXB0aW9uOjpjcmVhdGUodm0sIGNyZWF0
ZVR5cGVFcnJvcihleGVjKSk7CisgICAgICAgICAgICByZXR1cm5lZEV4Y2VwdGlvbiA9IEpTQzo6
RXhjZXB0aW9uOjpjcmVhdGUodm0sICZnbG9iYWxPYmplY3QsIGNyZWF0ZVR5cGVFcnJvcihleGVj
KSk7CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAgICB9CiAgICAgfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01FeGNlcHRpb25IYW5kbGluZy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01FeGNlcHRpb25I
YW5kbGluZy5jcHAJKHJldmlzaW9uIDI0MjE3NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NRXhjZXB0aW9uSGFuZGxpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEs
NiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRl
bkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwNC0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IFNhbXVlbCBXZWluaWcg
PHNhbUB3ZWJraXQub3JnPgogICogIENvcHlyaWdodCAoQykgMjAxMyBNaWNoYWVsIFBydWV0dCA8
bWljaGFlbEA2OGsub3JnPgogICoKQEAgLTQ2LDggKzQ2LDEwIEBAIHZvaWQgcmVwb3J0RXhjZXB0
aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlMKICAgICBhdXRvKiBleGNlcHRpb24gPSBqc0R5bmFtaWND
YXN0PEpTQzo6RXhjZXB0aW9uKj4odm0sIGV4Y2VwdGlvblZhbHVlKTsKICAgICBpZiAoIWV4Y2Vw
dGlvbikgewogICAgICAgICBleGNlcHRpb24gPSB2bS5sYXN0RXhjZXB0aW9uKCk7Ci0gICAgICAg
IGlmICghZXhjZXB0aW9uKQotICAgICAgICAgICAgZXhjZXB0aW9uID0gSlNDOjpFeGNlcHRpb246
OmNyZWF0ZShleGVjLT52bSgpLCBleGNlcHRpb25WYWx1ZSwgSlNDOjpFeGNlcHRpb246OkRvTm90
Q2FwdHVyZVN0YWNrKTsKKyAgICAgICAgaWYgKCFleGNlcHRpb24pIHsKKyAgICAgICAgICAgIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB2bS52bUVudHJ5R2xvYmFsT2JqZWN0KGV4ZWMp
OworICAgICAgICAgICAgZXhjZXB0aW9uID0gSlNDOjpFeGNlcHRpb246OmNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0LCBleGNlcHRpb25WYWx1ZSwgSlNDOjpFeGNlcHRpb246OkRvTm90Q2FwdHVyZVN0
YWNrKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHJlcG9ydEV4Y2VwdGlvbihleGVjLCBleGNl
cHRpb24sIGNhY2hlZFNjcmlwdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9X
b3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMjQyMTc0KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4
LTIwMTcgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA4LTIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICogQ29weXJpZ2h0IChD
KSAyMDExLCAyMDEyIEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CkBAIC0xNjMsNyArMTYzLDggQEAgdm9pZCBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpl
dmFsdWF0ZShjbwogICAgICAgICAgICAgU3RyaW5nIGdlbmVyaWNFcnJvck1lc3NhZ2UgeyAiU2Ny
aXB0IGVycm9yLiJfcyB9OwogICAgICAgICAgICAgaWYgKHJldHVybmVkRXhjZXB0aW9uTWVzc2Fn
ZSkKICAgICAgICAgICAgICAgICAqcmV0dXJuZWRFeGNlcHRpb25NZXNzYWdlID0gZ2VuZXJpY0Vy
cm9yTWVzc2FnZTsKLSAgICAgICAgICAgIHJldHVybmVkRXhjZXB0aW9uID0gSlNDOjpFeGNlcHRp
b246OmNyZWF0ZSh2bSwgY3JlYXRlRXJyb3IoJnN0YXRlLCBnZW5lcmljRXJyb3JNZXNzYWdlKSk7
CisgICAgICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdm0udm1FbnRyeUds
b2JhbE9iamVjdCgmc3RhdGUpOworICAgICAgICAgICAgcmV0dXJuZWRFeGNlcHRpb24gPSBKU0M6
OkV4Y2VwdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIGNyZWF0ZUVycm9yKCZzdGF0ZSwg
Z2VuZXJpY0Vycm9yTWVzc2FnZSkpOwogICAgICAgICB9CiAgICAgfQogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>363763</attachid>
            <date>2019-03-06 11:35:58 -0800</date>
            <delta_ts>2019-03-06 17:28:32 -0800</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-195131.patch</filename>
            <type>text/plain</type>
            <size>52020</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNDI1NTIpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE3IEBACisyMDE5LTAzLTA2ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNv
bT4KKworICAgICAgICBGaXggaW5jb3JyZWN0IGhhbmRsaW5nIG9mIHRyeS1maW5hbGx5IGNvbXBs
ZXRpb24gdmFsdWVzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTk1MTMxCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS80NjIyMjA3OT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBtYW55IHBlcm11
dGF0aW9ucyBvZiBuZXcgdGVzdCBjYXNlIHRvIHRlc3QtZmluYWxseS5qcy4gIHRlc3QtZmluYWxs
eS5qcyBoYXMKKyAgICAgICAgYmVlbiBydW4gb24gQ2hyb21lIGFuZCBGaXJlZm94IGFzIGEgc2Fu
aXR5IGNoZWNrLCBhbmQgd2UgY29uZmlybWVkIHRoYXQgYWxsIHRoZQorICAgICAgICB0ZXN0cyBw
YXNzZXMgdGhlcmUgYXMgd2VsbC4KKworICAgICAgICAqIHN0cmVzcy90ZXN0LWZpbmFsbHkuanM6
CisKIDIwMTktMDMtMDUgIFNhYW0gYmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CiAKICAgICAg
ICAgb3Bfc3dpdGNoX2NoYXIgYnJva2VuIGZvciByb3BlIHN0cmluZ3MgYWZ0ZXIgSlNSb3BlU3Ry
aW5nIGxheW91dCByZXdyaXRlCkluZGV4OiBKU1Rlc3RzL3N0cmVzcy90ZXN0LWZpbmFsbHkuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvdGVzdC1maW5hbGx5LmpzCShyZXZpc2lvbiAy
NDI1MTkpCisrKyBKU1Rlc3RzL3N0cmVzcy90ZXN0LWZpbmFsbHkuanMJKHdvcmtpbmcgY29weSkK
QEAgLTcyNSw2ICs3MjUsNjYwIEBAIHRlc3QoKCkgPT4gewogCiB9LCAiYSxiLGMseSxkLHosZiIs
IE5vdGhpbmdSZXR1cm5lZCwgNjAwKTsKIAordGVzdCgoKSA9PiB7CisgICAgYXBwZW5kKCJhIik7
CisgICAgdHJ5IHsKKyAgICAgICAgYXBwZW5kKCJiIik7CisgICAgICAgIHRocm93IDEwMDsKKyAg
ICB9IGZpbmFsbHkgeworICAgICAgICBhcHBlbmQoImMiKTsKKyAgICAgICAgdHJ5IHsKKyAgICAg
ICAgICAgIGFwcGVuZCgiZCIpOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgYXBw
ZW5kKCJlIik7CisgICAgICAgIH0KKyAgICAgICAgYXBwZW5kKCJmIik7CisgICAgfQorICAgIGFw
cGVuZCgiZyIpOworICAgIHJldHVybiA3MDA7CisKK30sICJhLGIsYyxkLGUsZiIsIE5vdGhpbmdS
ZXR1cm5lZCwgMTAwKTsKKwordGVzdCgoKSA9PiB7CisgICAgYXBwZW5kKCJhIik7CisgICAgdHJ5
IHsKKyAgICAgICAgYXBwZW5kKCJiIik7CisgICAgICAgIHJldHVybiAxMDA7CisgICAgfSBmaW5h
bGx5IHsKKyAgICAgICAgYXBwZW5kKCJjIik7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBh
cHBlbmQoImQiKTsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIGFwcGVuZCgiZSIp
OworICAgICAgICB9CisgICAgICAgIGFwcGVuZCgiZiIpOworICAgIH0KKyAgICBhcHBlbmQoImci
KTsKKyAgICByZXR1cm4gNzAwOworCit9LCAiYSxiLGMsZCxlLGYiLCAxMDAsIE5vdGhpbmdUaHJv
d24pOworCit0ZXN0KCgpID0+IHsKKyAgICBhcHBlbmQoImEiKTsKKyAgICBsYWJlbDogdHJ5IHsK
KyAgICAgICAgYXBwZW5kKCJiIik7CisgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgMTsgaisr
KSB7CisgICAgICAgICAgICBhcHBlbmQoIngiKTsKKyAgICAgICAgICAgIGJyZWFrIGxhYmVsOwor
ICAgICAgICB9CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgYXBwZW5kKCJjIik7CisgICAgICAg
IHRyeSB7CisgICAgICAgICAgICBhcHBlbmQoImQiKTsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAg
ICAgICAgICAgIGFwcGVuZCgiZSIpOworICAgICAgICB9CisgICAgICAgIGFwcGVuZCgiZiIpOwor
ICAgIH0KKyAgICBhcHBlbmQoImciKTsKKyAgICByZXR1cm4gNzAwOworCit9LCAiYSxiLHgsYyxk
LGUsZixnIiwgNzAwLCBOb3RoaW5nVGhyb3duKTsKKwordGVzdCgoKSA9PiB7CisgICAgYXBwZW5k
KCJhIik7CisgICAgdHJ5IHsKKyAgICAgICAgYXBwZW5kKCJiIik7CisgICAgICAgIHRocm93IDEw
MDsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICBhcHBlbmQoImMiKTsKKyAgICAgICAgZm9yICh2
YXIgaiA9IDA7IGogPCAxOyBqKyspIHsKKyAgICAgICAgICAgIGFwcGVuZCgieSIpOworICAgICAg
ICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBhcHBlbmQoImQiKTsKKyAgICAgICAgICAgIH0g
ZmluYWxseSB7CisgICAgICAgICAgICAgICAgYXBwZW5kKCJlIik7CisgICAgICAgICAgICAgICAg
dGhyb3cgMjAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYXBwZW5kKCJmIik7CisgICAg
ICAgIH0KKyAgICAgICAgYXBwZW5kKCJ6Iik7CisgICAgfQorICAgIGFwcGVuZCgiZyIpOworICAg
IHJldHVybiA3MDA7CisKK30sICJhLGIsYyx5LGQsZSIsIE5vdGhpbmdSZXR1cm5lZCwgMjAwKTsK
KwordGVzdCgoKSA9PiB7CisgICAgYXBwZW5kKCJhIik7CisgICAgdHJ5IHsKKyAgICAgICAgYXBw
ZW5kKCJiIik7CisgICAgICAgIHRocm93IDEwMDsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICBh
cHBlbmQoImMiKTsKKyAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCAxOyBqKyspIHsKKyAgICAg
ICAgICAgIGFwcGVuZCgieSIpOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBh
cHBlbmQoImQiKTsKKyAgICAgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICAgICAgYXBw
ZW5kKCJlIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIDIwMDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGFwcGVuZCgiZiIpOworICAgICAgICB9CisgICAgICAgIGFwcGVuZCgieiIpOwor
ICAgIH0KKyAgICBhcHBlbmQoImciKTsKKyAgICByZXR1cm4gNzAwOworCit9LCAiYSxiLGMseSxk
LGUiLCAyMDAsIE5vdGhpbmdUaHJvd24pOworCit0ZXN0KCgpID0+IHsKKyAgICBhcHBlbmQoImEi
KTsKKyAgICB0cnkgeworICAgICAgICBhcHBlbmQoImIiKTsKKyAgICAgICAgdGhyb3cgMTAwOwor
ICAgIH0gZmluYWxseSB7CisgICAgICAgIGFwcGVuZCgiYyIpOworICAgICAgICBmb3IgKHZhciBq
ID0gMDsgaiA8IDE7IGorKykgeworICAgICAgICAgICAgYXBwZW5kKCJ5Iik7CisgICAgICAgICAg
ICB0cnkgeworICAgICAgICAgICAgICAgIGFwcGVuZCgiZCIpOworICAgICAgICAgICAgfSBmaW5h
bGx5IHsKKyAgICAgICAgICAgICAgICBhcHBlbmQoImUiKTsKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFwcGVuZCgiZiIpOworICAgICAgICB9
CisgICAgICAgIGFwcGVuZCgieiIpOworICAgIH0KKyAgICBhcHBlbmQoImciKTsKKyAgICByZXR1
cm4gNzAwOworCit9LCAiYSxiLGMseSxkLGUseiIsIE5vdGhpbmdSZXR1cm5lZCwgMTAwKTsKKwor
dGVzdCgoKSA9PiB7CisgICAgYXBwZW5kKCJhIik7CisgICAgdHJ5IHsKKyAgICAgICAgYXBwZW5k
KCJiIik7CisgICAgICAgIHJldHVybiAxMDA7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgYXBw
ZW5kKCJjIik7CisgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgMTsgaisrKSB7CisgICAgICAg
ICAgICBhcHBlbmQoInkiKTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgYXBw
ZW5kKCJkIik7CisgICAgICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgICAgIGFwcGVu
ZCgiZSIpOworICAgICAgICAgICAgICAgIHRocm93IDIwMDsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGFwcGVuZCgiZiIpOworICAgICAgICB9CisgICAgICAgIGFwcGVuZCgieiIpOworICAg
IH0KKyAgICBhcHBlbmQoImciKTsKKyAgICByZXR1cm4gNzAwOworCit9LCAiYSxiLGMseSxkLGUi
LCBOb3RoaW5nUmV0dXJuZWQsIDIwMCk7CisKK3Rlc3QoKCkgPT4geworICAgIGFwcGVuZCgiYSIp
OworICAgIHRyeSB7CisgICAgICAgIGFwcGVuZCgiYiIpOworICAgICAgICByZXR1cm4gMTAwOwor
ICAgIH0gZmluYWxseSB7CisgICAgICAgIGFwcGVuZCgiYyIpOworICAgICAgICBmb3IgKHZhciBq
ID0gMDsgaiA8IDE7IGorKykgeworICAgICAgICAgICAgYXBwZW5kKCJ5Iik7CisgICAgICAgICAg
ICB0cnkgeworICAgICAgICAgICAgICAgIGFwcGVuZCgiZCIpOworICAgICAgICAgICAgfSBmaW5h
bGx5IHsKKyAgICAgICAgICAgICAgICBhcHBlbmQoImUiKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gMjAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYXBwZW5kKCJmIik7CisgICAgICAg
IH0KKyAgICAgICAgYXBwZW5kKCJ6Iik7CisgICAgfQorICAgIGFwcGVuZCgiZyIpOworICAgIHJl
dHVybiA3MDA7CisKK30sICJhLGIsYyx5LGQsZSIsIDIwMCwgTm90aGluZ1Rocm93bik7CisKK3Rl
c3QoKCkgPT4geworICAgIGFwcGVuZCgiYSIpOworICAgIHRyeSB7CisgICAgICAgIGFwcGVuZCgi
YiIpOworICAgICAgICByZXR1cm4gMTAwOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGFwcGVu
ZCgiYyIpOworICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDE7IGorKykgeworICAgICAgICAg
ICAgYXBwZW5kKCJ5Iik7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGFwcGVu
ZCgiZCIpOworICAgICAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgICAgICBhcHBlbmQo
ImUiKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGFwcGVuZCgiZiIpOworICAgICAgICB9CisgICAgICAgIGFwcGVuZCgieiIpOworICAgIH0K
KyAgICBhcHBlbmQoImciKTsKKyAgICByZXR1cm4gNzAwOworCit9LCAiYSxiLGMseSxkLGUseiIs
IDEwMCwgTm90aGluZ1Rocm93bik7CisKK3Rlc3QoKCkgPT4geworICAgIGFwcGVuZCgiYSIpOwor
ICAgIHRyeSB7CisgICAgICAgIGFwcGVuZCgiYiIpOworICAgICAgICB0aHJvdyAxMDA7CisgICAg
fSBmaW5hbGx5IHsKKyAgICAgICAgYXBwZW5kKCJjIik7CisgICAgICAgIGZvciAodmFyIGogPSAw
OyBqIDwgMTsgaisrKSB7CisgICAgICAgICAgICBhcHBlbmQoInkiKTsKKyAgICAgICAgICAgIHRy
eSB7CisgICAgICAgICAgICAgICAgYXBwZW5kKCJkIik7CisgICAgICAgICAgICAgICAgdGhyb3cg
NDI7CisgICAgICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgICAgIGFwcGVuZCgiZSIp
OworICAgICAgICAgICAgICAgIHRocm93IDIwMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGFwcGVuZCgiZiIpOworICAgICAgICB9CisgICAgICAgIGFwcGVuZCgieiIpOworICAgIH0KKyAg
ICBhcHBlbmQoImciKTsKKyAgICByZXR1cm4gNzAwOworCit9LCAiYSxiLGMseSxkLGUiLCBOb3Ro
aW5nUmV0dXJuZWQsIDIwMCk7CisKK3Rlc3QoKCkgPT4geworICAgIGFwcGVuZCgiYSIpOworICAg
IHRyeSB7CisgICAgICAgIGFwcGVuZCgiYiIpOworICAgICAgICB0aHJvdyAxMDA7CisgICAgfSBm
aW5hbGx5IHsKKyAgICAgICAgYXBwZW5kKCJjIik7CisgICAgICAgIGZvciAodmFyIGogPSAwOyBq
IDwgMTsgaisrKSB7CisgICAgICAgICAgICBhcHBlbmQoInkiKTsKKyAgICAgICAgICAgIHRyeSB7
CisgICAgICAgICAgICAgICAgYXBwZW5kKCJkIik7CisgICAgICAgICAgICAgICAgdGhyb3cgNDI7
CisgICAgICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgICAgIGFwcGVuZCgiZSIpOwor
ICAgICAgICAgICAgICAgIHJldHVybiAyMDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBh
cHBlbmQoImYiKTsKKyAgICAgICAgfQorICAgICAgICBhcHBlbmQoInoiKTsKKyAgICB9CisgICAg
YXBwZW5kKCJnIik7CisgICAgcmV0dXJuIDcwMDsKKworfSwgImEsYixjLHksZCxlIiwgMjAwLCBO
b3RoaW5nVGhyb3duKTsKKwordGVzdCgoKSA9PiB7CisgICAgYXBwZW5kKCJhIik7CisgICAgdHJ5
IHsKKyAgICAgICAgYXBwZW5kKCJiIik7CisgICAgICAgIHRocm93IDEwMDsKKyAgICB9IGZpbmFs
bHkgeworICAgICAgICBhcHBlbmQoImMiKTsKKyAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCAx
OyBqKyspIHsKKyAgICAgICAgICAgIGFwcGVuZCgieSIpOworICAgICAgICAgICAgdHJ5IHsKKyAg
ICAgICAgICAgICAgICBhcHBlbmQoImQiKTsKKyAgICAgICAgICAgICAgICB0aHJvdyA0MjsKKyAg
ICAgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICAgICAgYXBwZW5kKCJlIik7CisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhcHBlbmQo
ImYiKTsKKyAgICAgICAgfQorICAgICAgICBhcHBlbmQoInoiKTsKKyAgICB9CisgICAgYXBwZW5k
KCJnIik7CisgICAgcmV0dXJuIDcwMDsKKworfSwgImEsYixjLHksZCxlLHoiLCBOb3RoaW5nUmV0
dXJuZWQsIDEwMCk7CisKK3Rlc3QoKCkgPT4geworICAgIGFwcGVuZCgiYSIpOworICAgIHRyeSB7
CisgICAgICAgIGFwcGVuZCgiYiIpOworICAgICAgICByZXR1cm4gMTAwOworICAgIH0gZmluYWxs
eSB7CisgICAgICAgIGFwcGVuZCgiYyIpOworICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDE7
IGorKykgeworICAgICAgICAgICAgYXBwZW5kKCJ5Iik7CisgICAgICAgICAgICB0cnkgeworICAg
ICAgICAgICAgICAgIGFwcGVuZCgiZCIpOworICAgICAgICAgICAgICAgIHRocm93IDQyOworICAg
ICAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgICAgICBhcHBlbmQoImUiKTsKKyAgICAg
ICAgICAgICAgICB0aHJvdyAyMDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhcHBlbmQo
ImYiKTsKKyAgICAgICAgfQorICAgICAgICBhcHBlbmQoInoiKTsKKyAgICB9CisgICAgYXBwZW5k
KCJnIik7CisgICAgcmV0dXJuIDcwMDsKKworfSwgImEsYixjLHksZCxlIiwgTm90aGluZ1JldHVy
bmVkLCAyMDApOworCit0ZXN0KCgpID0+IHsKKyAgICBhcHBlbmQoImEiKTsKKyAgICB0cnkgewor
ICAgICAgICBhcHBlbmQoImIiKTsKKyAgICAgICAgcmV0dXJuIDEwMDsKKyAgICB9IGZpbmFsbHkg
eworICAgICAgICBhcHBlbmQoImMiKTsKKyAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCAxOyBq
KyspIHsKKyAgICAgICAgICAgIGFwcGVuZCgieSIpOworICAgICAgICAgICAgdHJ5IHsKKyAgICAg
ICAgICAgICAgICBhcHBlbmQoImQiKTsKKyAgICAgICAgICAgICAgICB0aHJvdyA0MjsKKyAgICAg
ICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICAgICAgYXBwZW5kKCJlIik7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIDIwMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFwcGVuZCgi
ZiIpOworICAgICAgICB9CisgICAgICAgIGFwcGVuZCgieiIpOworICAgIH0KKyAgICBhcHBlbmQo
ImciKTsKKyAgICByZXR1cm4gNzAwOworCit9LCAiYSxiLGMseSxkLGUiLCAyMDAsIE5vdGhpbmdU
aHJvd24pOworCit0ZXN0KCgpID0+IHsKKyAgICBhcHBlbmQoImEiKTsKKyAgICB0cnkgeworICAg
ICAgICBhcHBlbmQoImIiKTsKKyAgICAgICAgcmV0dXJuIDEwMDsKKyAgICB9IGZpbmFsbHkgewor
ICAgICAgICBhcHBlbmQoImMiKTsKKyAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCAxOyBqKysp
IHsKKyAgICAgICAgICAgIGFwcGVuZCgieSIpOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAg
ICAgICAgICBhcHBlbmQoImQiKTsKKyAgICAgICAgICAgICAgICB0aHJvdyA0MjsKKyAgICAgICAg
ICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICAgICAgYXBwZW5kKCJlIik7CisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhcHBlbmQoImYiKTsK
KyAgICAgICAgfQorICAgICAgICBhcHBlbmQoInoiKTsKKyAgICB9CisgICAgYXBwZW5kKCJnIik7
CisgICAgcmV0dXJuIDcwMDsKKworfSwgImEsYixjLHksZCxlLHoiLCAxMDAsIE5vdGhpbmdUaHJv
d24pOworCit0ZXN0KCgpID0+IHsKKyAgICBhcHBlbmQoImEiKTsKKyAgICB0cnkgeworICAgICAg
ICBhcHBlbmQoImIiKTsKKyAgICAgICAgdGhyb3cgMTAwOworICAgIH0gZmluYWxseSB7CisgICAg
ICAgIGFwcGVuZCgiYyIpOworICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDE7IGorKykgewor
ICAgICAgICAgICAgYXBwZW5kKCJ5Iik7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAg
ICAgIGFwcGVuZCgiZCIpOworICAgICAgICAgICAgICAgIHJldHVybiA0MjsKKyAgICAgICAgICAg
IH0gZmluYWxseSB7CisgICAgICAgICAgICAgICAgYXBwZW5kKCJlIik7CisgICAgICAgICAgICAg
ICAgdGhyb3cgMjAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYXBwZW5kKCJmIik7Cisg
ICAgICAgIH0KKyAgICAgICAgYXBwZW5kKCJ6Iik7CisgICAgfQorICAgIGFwcGVuZCgiZyIpOwor
ICAgIHJldHVybiA3MDA7CisKK30sICJhLGIsYyx5LGQsZSIsIE5vdGhpbmdSZXR1cm5lZCwgMjAw
KTsKKwordGVzdCgoKSA9PiB7CisgICAgYXBwZW5kKCJhIik7CisgICAgdHJ5IHsKKyAgICAgICAg
YXBwZW5kKCJiIik7CisgICAgICAgIHRocm93IDEwMDsKKyAgICB9IGZpbmFsbHkgeworICAgICAg
ICBhcHBlbmQoImMiKTsKKyAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCAxOyBqKyspIHsKKyAg
ICAgICAgICAgIGFwcGVuZCgieSIpOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAg
ICBhcHBlbmQoImQiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gNDI7CisgICAgICAgICAgICB9
IGZpbmFsbHkgeworICAgICAgICAgICAgICAgIGFwcGVuZCgiZSIpOworICAgICAgICAgICAgICAg
IHJldHVybiAyMDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhcHBlbmQoImYiKTsKKyAg
ICAgICAgfQorICAgICAgICBhcHBlbmQoInoiKTsKKyAgICB9CisgICAgYXBwZW5kKCJnIik7Cisg
ICAgcmV0dXJuIDcwMDsKKworfSwgImEsYixjLHksZCxlIiwgMjAwLCBOb3RoaW5nVGhyb3duKTsK
KwordGVzdCgoKSA9PiB7CisgICAgYXBwZW5kKCJhIik7CisgICAgdHJ5IHsKKyAgICAgICAgYXBw
ZW5kKCJiIik7CisgICAgICAgIHRocm93IDEwMDsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICBh
cHBlbmQoImMiKTsKKyAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCAxOyBqKyspIHsKKyAgICAg
ICAgICAgIGFwcGVuZCgieSIpOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBh
cHBlbmQoImQiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gNDI7CisgICAgICAgICAgICB9IGZp
bmFsbHkgeworICAgICAgICAgICAgICAgIGFwcGVuZCgiZSIpOworICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYXBwZW5kKCJmIik7CisgICAgICAg
IH0KKyAgICAgICAgYXBwZW5kKCJ6Iik7CisgICAgfQorICAgIGFwcGVuZCgiZyIpOworICAgIHJl
dHVybiA3MDA7CisKK30sICJhLGIsYyx5LGQsZSx6IiwgTm90aGluZ1JldHVybmVkLCAxMDApOwor
Cit0ZXN0KCgpID0+IHsKKyAgICBhcHBlbmQoImEiKTsKKyAgICB0cnkgeworICAgICAgICBhcHBl
bmQoImIiKTsKKyAgICAgICAgcmV0dXJuIDEwMDsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICBh
cHBlbmQoImMiKTsKKyAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCAxOyBqKyspIHsKKyAgICAg
ICAgICAgIGFwcGVuZCgieSIpOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBh
cHBlbmQoImQiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gNDI7CisgICAgICAgICAgICB9IGZp
bmFsbHkgeworICAgICAgICAgICAgICAgIGFwcGVuZCgiZSIpOworICAgICAgICAgICAgICAgIHRo
cm93IDIwMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFwcGVuZCgiZiIpOworICAgICAg
ICB9CisgICAgICAgIGFwcGVuZCgieiIpOworICAgIH0KKyAgICBhcHBlbmQoImciKTsKKyAgICBy
ZXR1cm4gNzAwOworCit9LCAiYSxiLGMseSxkLGUiLCBOb3RoaW5nUmV0dXJuZWQsIDIwMCk7CisK
K3Rlc3QoKCkgPT4geworICAgIGFwcGVuZCgiYSIpOworICAgIHRyeSB7CisgICAgICAgIGFwcGVu
ZCgiYiIpOworICAgICAgICByZXR1cm4gMTAwOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGFw
cGVuZCgiYyIpOworICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDE7IGorKykgeworICAgICAg
ICAgICAgYXBwZW5kKCJ5Iik7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGFw
cGVuZCgiZCIpOworICAgICAgICAgICAgICAgIHJldHVybiA0MjsKKyAgICAgICAgICAgIH0gZmlu
YWxseSB7CisgICAgICAgICAgICAgICAgYXBwZW5kKCJlIik7CisgICAgICAgICAgICAgICAgcmV0
dXJuIDIwMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFwcGVuZCgiZiIpOworICAgICAg
ICB9CisgICAgICAgIGFwcGVuZCgieiIpOworICAgIH0KKyAgICBhcHBlbmQoImciKTsKKyAgICBy
ZXR1cm4gNzAwOworCit9LCAiYSxiLGMseSxkLGUiLCAyMDAsIE5vdGhpbmdUaHJvd24pOworCit0
ZXN0KCgpID0+IHsKKyAgICBhcHBlbmQoImEiKTsKKyAgICB0cnkgeworICAgICAgICBhcHBlbmQo
ImIiKTsKKyAgICAgICAgcmV0dXJuIDEwMDsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICBhcHBl
bmQoImMiKTsKKyAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCAxOyBqKyspIHsKKyAgICAgICAg
ICAgIGFwcGVuZCgieSIpOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBhcHBl
bmQoImQiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gNDI7CisgICAgICAgICAgICB9IGZpbmFs
bHkgeworICAgICAgICAgICAgICAgIGFwcGVuZCgiZSIpOworICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYXBwZW5kKCJmIik7CisgICAgICAgIH0K
KyAgICAgICAgYXBwZW5kKCJ6Iik7CisgICAgfQorICAgIGFwcGVuZCgiZyIpOworICAgIHJldHVy
biA3MDA7CisKK30sICJhLGIsYyx5LGQsZSx6IiwgMTAwLCBOb3RoaW5nVGhyb3duKTsKKwordGVz
dCgoKSA9PiB7CisgICAgYXBwZW5kKCJhIik7CisgICAgdHJ5IHsKKyAgICAgICAgYXBwZW5kKCJi
Iik7CisgICAgICAgIHRocm93IDEwMDsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICBhcHBlbmQo
ImMiKTsKKyAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCAxOyBqKyspIHsKKyAgICAgICAgICAg
IGFwcGVuZCgieSIpOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBhcHBlbmQo
ImQiKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0gZmluYWxseSB7
CisgICAgICAgICAgICAgICAgYXBwZW5kKCJlIik7CisgICAgICAgICAgICAgICAgdGhyb3cgMjAw
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYXBwZW5kKCJmIik7CisgICAgICAgIH0KKyAg
ICAgICAgYXBwZW5kKCJ6Iik7CisgICAgfQorICAgIGFwcGVuZCgiZyIpOworICAgIHJldHVybiA3
MDA7CisKK30sICJhLGIsYyx5LGQsZSIsIE5vdGhpbmdSZXR1cm5lZCwgMjAwKTsKKwordGVzdCgo
KSA9PiB7CisgICAgYXBwZW5kKCJhIik7CisgICAgdHJ5IHsKKyAgICAgICAgYXBwZW5kKCJiIik7
CisgICAgICAgIHRocm93IDEwMDsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICBhcHBlbmQoImMi
KTsKKyAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCAxOyBqKyspIHsKKyAgICAgICAgICAgIGFw
cGVuZCgieSIpOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBhcHBlbmQoImQi
KTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0gZmluYWxseSB7Cisg
ICAgICAgICAgICAgICAgYXBwZW5kKCJlIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIDIwMDsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFwcGVuZCgiZiIpOworICAgICAgICB9CisgICAg
ICAgIGFwcGVuZCgieiIpOworICAgIH0KKyAgICBhcHBlbmQoImciKTsKKyAgICByZXR1cm4gNzAw
OworCit9LCAiYSxiLGMseSxkLGUiLCAyMDAsIE5vdGhpbmdUaHJvd24pOworCit0ZXN0KCgpID0+
IHsKKyAgICBhcHBlbmQoImEiKTsKKyAgICB0cnkgeworICAgICAgICBhcHBlbmQoImIiKTsKKyAg
ICAgICAgdGhyb3cgMTAwOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGFwcGVuZCgiYyIpOwor
ICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDE7IGorKykgeworICAgICAgICAgICAgYXBwZW5k
KCJ5Iik7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGFwcGVuZCgiZCIpOwor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAg
ICAgICAgICAgICBhcHBlbmQoImUiKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGFwcGVuZCgiZiIpOworICAgICAgICB9CisgICAgICAgIGFw
cGVuZCgieiIpOworICAgIH0KKyAgICBhcHBlbmQoImciKTsKKyAgICByZXR1cm4gNzAwOworCit9
LCAiYSxiLGMseSxkLGUseiIsIE5vdGhpbmdSZXR1cm5lZCwgMTAwKTsKKwordGVzdCgoKSA9PiB7
CisgICAgYXBwZW5kKCJhIik7CisgICAgdHJ5IHsKKyAgICAgICAgYXBwZW5kKCJiIik7CisgICAg
ICAgIHJldHVybiAxMDA7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgYXBwZW5kKCJjIik7Cisg
ICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgMTsgaisrKSB7CisgICAgICAgICAgICBhcHBlbmQo
InkiKTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgYXBwZW5kKCJkIik7Cisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9IGZpbmFsbHkgeworICAgICAg
ICAgICAgICAgIGFwcGVuZCgiZSIpOworICAgICAgICAgICAgICAgIHRocm93IDIwMDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGFwcGVuZCgiZiIpOworICAgICAgICB9CisgICAgICAgIGFw
cGVuZCgieiIpOworICAgIH0KKyAgICBhcHBlbmQoImciKTsKKyAgICByZXR1cm4gNzAwOworCit9
LCAiYSxiLGMseSxkLGUiLCBOb3RoaW5nUmV0dXJuZWQsIDIwMCk7CisKK3Rlc3QoKCkgPT4gewor
ICAgIGFwcGVuZCgiYSIpOworICAgIHRyeSB7CisgICAgICAgIGFwcGVuZCgiYiIpOworICAgICAg
ICByZXR1cm4gMTAwOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGFwcGVuZCgiYyIpOworICAg
ICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDE7IGorKykgeworICAgICAgICAgICAgYXBwZW5kKCJ5
Iik7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGFwcGVuZCgiZCIpOworICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAg
ICAgICAgICBhcHBlbmQoImUiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMjAwOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgYXBwZW5kKCJmIik7CisgICAgICAgIH0KKyAgICAgICAgYXBw
ZW5kKCJ6Iik7CisgICAgfQorICAgIGFwcGVuZCgiZyIpOworICAgIHJldHVybiA3MDA7CisKK30s
ICJhLGIsYyx5LGQsZSIsIDIwMCwgTm90aGluZ1Rocm93bik7CisKK3Rlc3QoKCkgPT4geworICAg
IGFwcGVuZCgiYSIpOworICAgIHRyeSB7CisgICAgICAgIGFwcGVuZCgiYiIpOworICAgICAgICBy
ZXR1cm4gMTAwOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGFwcGVuZCgiYyIpOworICAgICAg
ICBmb3IgKHZhciBqID0gMDsgaiA8IDE7IGorKykgeworICAgICAgICAgICAgYXBwZW5kKCJ5Iik7
CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGFwcGVuZCgiZCIpOworICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAg
ICAgICBhcHBlbmQoImUiKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGFwcGVuZCgiZiIpOworICAgICAgICB9CisgICAgICAgIGFwcGVuZCgi
eiIpOworICAgIH0KKyAgICBhcHBlbmQoImciKTsKKyAgICByZXR1cm4gNzAwOworCit9LCAiYSxi
LGMseSxkLGUseiIsIDEwMCwgTm90aGluZ1Rocm93bik7CisKIC8vIE5vIHRocm93IG9yIHJldHVy
biBpbiBmb3Itb2YgbG9vcC4KIHRlc3QoKCkgPT4gewogICAgIGNsYXNzIFRlc3RJdGVyYXRvciB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0MjUxOSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMTEg
QEAKKzIwMTktMDMtMDYgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisgICAgICAg
IEZpeCBpbmNvcnJlY3QgaGFuZGxpbmcgb2YgdHJ5LWZpbmFsbHkgY29tcGxldGlvbiB2YWx1ZXMu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTUxMzEK
KyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzQ2MjIyMDc5PgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENvbnNpZGVyIHRoZSBmb2xsb3dpbmc6CisKKyAg
ICAgICAgICAgIGZ1bmN0aW9uIGZvbygpIHsgICAgICAgICAgICAgICAgICAgICAgICAvLyBsaW5l
IDEKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gNDI7
ICAgICAgICAgICAgICAgICAgICAgIC8vIGxpbmUgMworICAgICAgICAgICAgICAgIH0gZmluYWxs
eSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgMTsgaisrKSB7ICAg
Ly8gbGluZSA1CisgICAgICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRocm93ICcnOyAgICAgICAgICAgICAgIC8vIGxpbmUgNworICAgICAgICAg
ICAgICAgICAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsgICAgICAgICAgICAgICAvLyBsaW5lIDkKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIGxpbmUgMTEKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHZhciByZXN1bHQgPSBmb28oKTsKKworICAgICAgICBXaXRoIHRoZSBjdXJyZW50IChiZWZv
cmUgZml4KSBjb2RlIGJhc2UsIHJlc3VsdCB3aWxsIHRoZSBleGNlcHRpb24gb2JqZWN0IHRocm93
bgorICAgICAgICBhdCBsaW5lIDcuICBUaGUgZXhwZWN0ZWQgcmVzdWx0IHNob3VsZCBiZSA0Miwg
cmV0dXJuZWQgYXQgbGluZSAzLgorCisgICAgICAgIFRoZSBidWcgaXMgdGhhdCB3ZSB3ZXJlIHBy
ZXZpb3VzbHkgb25seSB1c2luZyBvbmUgc2V0IG9mIGNvbXBsZXRpb24gdHlwZSBhbmQKKyAgICAg
ICAgdmFsdWUgcmVnaXN0ZXJzIGZvciB0aGUgZW50aXJlIGZ1bmN0aW9uLiAgVGhpcyBpcyBpbmFk
ZXF1YXRlIGJlY2F1c2UgdGhlIG91dGVyCisgICAgICAgIHRyeS1maW5hbGx5IG5lZWRzIHRvIHBy
ZXNlcnZlIGl0cyBvd24gY29tcGxldGlvbiB0eXBlIGFuZCB2YWx1ZSAoeyBSZXR1cm4sIDQyIH0K
KyAgICAgICAgaW4gdGhpcyBjYXNlKSBpbiBvcmRlciB0byBiZSBhYmxlIHRvIGNvbXBsZXRlIGNv
cnJlY3RseS4KKworICAgICAgICBPbmUgbWlnaHQgYmUgZGVjZWl2ZWQgaW50byB0aGlua2luZyB0
aGF0IHRoZSBhYm92ZSBleGFtcGxlIHNob3VsZCBjb21wbGV0ZSB3aXRoCisgICAgICAgIHRoZSBl
eGNlcHRpb24gdGhyb3duIGF0IGxpbmUgNy4gIEhvd2V2ZXIsIGFjY29yZGluZyB0byBTZWN0aW9u
IDEzLjE1Ljggb2YgdGhlCisgICAgICAgIEVDTUFTY3JpcHQgc3BlYywgdGhlICdjb250aW51ZScg
aW4gdGhlIGZpbmFsbHkgYXQgbGluZSA5IGNvdW50cyBhcyBhbiBhYnJ1cHQKKyAgICAgICAgY29t
cGxldGlvbi4gIEFzIGEgcmVzdWx0LCBpdCBvdmVycmlkZXMgdGhlIHRocm93IGZyb20gbGluZSA3
LiAgQWZ0ZXIgdGhlIGNvbnRpbnVlLAorICAgICAgICBleGVjdXRpb24gcmVzdW1lcyBhdCB0aGUg
dG9wIG9mIHRoZSB0b3Agb2YgdGhlIGxvb3AgYXQgbGluZSA1LCBmb2xsb3dlZCBieSBhCisgICAg
ICAgIG5vcm1hbCBjb21wbGV0aW9uIGF0IGxpbmUgMTEuCisKKyAgICAgICAgQWxzbyBhY2NvcmRp
bmcgdG8gU2VjdGlvbiAxMy4xNS44LCBnaXZlbiB0aGF0IHRoZSBjb21wbGV0aW9uIHR5cGUgb2Yg
dGhlIG91dGVyCisgICAgICAgIGZpbmFsbHkgaXMgbm9ybWFsLCB0aGUgcmVzdWx0YW50IGNvbXBs
ZXRpb24gb2YgdGhlIG91dGVyIHRyeS1maW5hbGx5IHNob3VsZCBiZQorICAgICAgICB0aGUgY29t
cGxldGlvbiBvZiB0aGUgb3V0ZXIgdHJ5IGJsb2NrIGkuZS4geyBSZXR1cm4sIDQyIH0uCisKKyAg
ICAgICAgVGhpcyBwYXRjaCBtYWtlcyB0aGUgZm9sbG93aW5nIGNoYW5nZXM6CisgICAgICAgIAor
ICAgICAgICAxLiBGaXggaGFuZGxpbmcgb2YgZmluYWxseSBjb21wbGV0aW9uIHRvIHVzZSBhIHVu
aXF1ZSBzZXQgb2YgY29tcGxldGlvbgorICAgICAgICAgICB0eXBlIGFuZCB2YWx1ZSByZWdpc3Rl
cnMgZm9yIGVhY2ggRmluYWxseUNvbnRleHQuCisKKyAgICAgICAgMi4gTW92ZSB0aGUgc2V0dGlu
ZyBvZiBUaHJvdyBjb21wbGV0aW9uIHR5cGUgdG8gdGhlIG91dCBvZiBsaW5lIGV4Y2VwdGlvbiBo
YW5kbGVyLgorICAgICAgICAgICBUaGlzIG1ha2VzIHRoZSBtYWlubGluZSBjb2RlIHNsaWdodGx5
IGxlc3MgYnJhbmNoeS4KKworICAgICAgICAzLiBJbnRyb2R1Y2UgZW1pdE91dE9mTGluZUNhdGNo
SGFuZGxlcigpLCBlbWl0T3V0T2ZMaW5lRmluYWxseUhhbmRsZXIoKSwgYW5kCisgICAgICAgICAg
IGVtaXRPdXRPZkxpbmVFeGNlcHRpb25IYW5kbGVyKCkgdG8gbWFrZSBpdCBjbGVhcmVyIHRoYXQg
dGhlc2UgYXJlIG5vdCBlbWl0dGluZworICAgICAgICAgICBieXRlY29kZSBpbmxpbmUuICBBbHNv
LCB0aGVzZSBtYWtlIGl0IGNsZWFyZXIgd2hlbiB3ZSdyZSBlbWl0dGluZyBhIGhhbmRsZXIKKyAg
ICAgICAgICAgZm9yIGEgY2F0Y2ggdnMgYSBmaW5hbGx5LgorCisgICAgICAgIDQuIEFsbG9jYXRl
IHRoZSBGaW5hbGx5Q29udGV4dCBvbiB0aGUgc3RhY2sgaW5zdGVhZCBvZiBhcyBhIG1lbWJlciBv
ZiB0aGUKKyAgICAgICAgICAgaGVhcCBhbGxvY2F0ZWQgQ29udHJvbEZsb3dTY29wZS4gIFRoaXMg
c2ltcGxpZmllcyBpdHMgbGlmZS1jeWNsZSBtYW5hZ2VtZW50CisgICAgICAgICAgIGFuZCByZWR1
Y2VzIHRoZSBhbW91bnQgb2YgbmVlZGVkIGNvcHlpbmcuCisKKyAgICAgICAgNS4gVXBkYXRlIGVt
aXRGaW5hbGx5Q29tcGxldGlvbigpIHRvIHByb3BhZ2F0ZSB0aGUgY29tcGxldGlvbiB0eXBlIGFu
ZCB2YWx1ZSB0bworICAgICAgICAgICB0aGUgb3V0ZXIgRmluYWxseUNvbnRleHQgd2hlbiBuZWVk
ZWQuCisKKyAgICAgICAgNi4gRml4IGVtaXRKdW1wSWYoKSB0byB1c2UgdGhlIHJpZ2h0IG9yZGVy
IG9mIG9wZXJhbmRzLiAgUHJldmlvdXNseSwgd2Ugd2VyZQorICAgICAgICAgICBvbmx5IHVzaW5n
IGl0IHRvIGRvIG9wX3N0cmljdGVxIGFuZCBvcF9uc3RyaWN0ZXEgY29tcGFyaXNvbnMuICBTbywg
dGhlIG9yZGVyCisgICAgICAgICAgIHdhc24ndCBpbXBvcnRhbnQuICBXZSBub3cgdXNlIGl0IHRv
IGFsc28gZG8gb3BfYmVsb3dlcSBjb21wYXJpc29ucy4gIEhlbmNlLAorICAgICAgICAgICB0aGUg
b3JkZXIgbmVlZHMgdG8gYmUgY29ycmVjdGVkLgorCisgICAgICAgIDcuIFJlbW92ZSB0aGUgdW51
c2VkIENvbXBsZXRpb25UeXBlOjpCcmVhayBhbmQgQ29udGludWUuICBUaGVzZSBhcmUgZW5jb2Rl
ZCB3aXRoCisgICAgICAgICAgIHRoZSBqdW1wSURzIG9mIHRoZSBqdW1wIHRhcmdldHMgaW5zdGVh
ZC4KKworICAgICAgICBSZWxldmFudCBzcGVjaWZpY2F0aW9uczoKKyAgICAgICAgU2VjdGlvbiAx
My4xNS44OiBodHRwczovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzkuMC9p
bmRleC5odG1sI3NlYy10cnktc3RhdGVtZW50LXJ1bnRpbWUtc2VtYW50aWNzLWV2YWx1YXRpb24K
KyAgICAgICAgU2VjdGlvbiA2LjMuMi40OiBodHRwczovL3d3dy5lY21hLWludGVybmF0aW9uYWwu
b3JnL2VjbWEtMjYyLzkuMC9pbmRleC5odG1sI3NlYy11cGRhdGVlbXB0eQorCisgICAgICAgICog
Ynl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6RmluYWxs
eUNvbnRleHQ6OkZpbmFsbHlDb250ZXh0KToKKyAgICAgICAgKEpTQzo6RmluYWxseUNvbnRleHQ6
On5GaW5hbGx5Q29udGV4dCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpnZW5l
cmF0ZSk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRv
cik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNoRmluYWxseUNvbnRyb2xG
bG93U2NvcGUpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wRmluYWxseUNv
bnRyb2xGbG93U2NvcGUpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE91
dE9mTGluZUNhdGNoSGFuZGxlcik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpl
bWl0T3V0T2ZMaW5lRmluYWxseUhhbmRsZXIpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdE91dE9mTGluZUV4Y2VwdGlvbkhhbmRsZXIpOgorICAgICAgICAoSlNDOjpCeXRl
Y29kZUdlbmVyYXRvcjo6ZW1pdEVudW1lcmF0aW9uKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVH
ZW5lcmF0b3I6OmVtaXRKdW1wVmlhRmluYWxseUlmTmVlZGVkKToKKyAgICAgICAgKEpTQzo6Qnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXRSZXR1cm5WaWFGaW5hbGx5SWZOZWVkZWQpOgorICAgICAgICAo
SlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEZpbmFsbHlDb21wbGV0aW9uKToKKyAgICAgICAg
KEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRKdW1wSWYpOgorICAgICAgICAoSlNDOjpCeXRl
Y29kZUdlbmVyYXRvcjo6ZW1pdENhdGNoKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNv
ZGVHZW5lcmF0b3I6OmFsbG9jYXRlQ29tcGxldGlvblJlY29yZFJlZ2lzdGVycyk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpyZWxlYXNlQ29tcGxldGlvblJlY29y
ZFJlZ2lzdGVycyk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmg6CisgICAgICAgIChKU0M6OkZpbmFsbHlDb250ZXh0Ojpjb21wbGV0aW9uVHlwZVJl
Z2lzdGVyIGNvbnN0KToKKyAgICAgICAgKEpTQzo6RmluYWxseUNvbnRleHQ6OmNvbXBsZXRpb25W
YWx1ZVJlZ2lzdGVyIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q29udHJvbEZsb3dTY29wZTo6Q29u
dHJvbEZsb3dTY29wZSk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TG9h
ZCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpDb21wbGV0aW9uUmVjb3JkU2Nv
cGU6OkNvbXBsZXRpb25SZWNvcmRTY29wZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVj
b2RlR2VuZXJhdG9yOjpDb21wbGV0aW9uUmVjb3JkU2NvcGU6On5Db21wbGV0aW9uUmVjb3JkU2Nv
cGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6Y29tcGxldGlv
blR5cGVSZWdpc3RlciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2Vu
ZXJhdG9yOjpjb21wbGV0aW9uVmFsdWVSZWdpc3RlciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0U2V0Q29tcGxldGlvblR5cGUpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFNldENvbXBsZXRpb25WYWx1
ZSk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHA6Cisg
ICAgICAgIChKU0M6OlRyeU5vZGU6OmVtaXRCeXRlY29kZSk6CisKIDIwMTktMDMtMDUgIFNhYW0g
YmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgb3Bfc3dpdGNoX2NoYXIgYnJv
a2VuIGZvciByb3BlIHN0cmluZ3MgYWZ0ZXIgSlNSb3BlU3RyaW5nIGxheW91dCByZXdyaXRlCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5
dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjQyNTE5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE4Myw2ICsxODMsMjMgQEAgdm9pZCBWYXJpYWJsZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0
KSBjbwogICAgICAgICAiLCBpc0xleGljYWxseVNjb3BlZCA9ICIsIG1faXNMZXhpY2FsbHlTY29w
ZWQsICJ9Iik7CiB9CiAKK0ZpbmFsbHlDb250ZXh0OjpGaW5hbGx5Q29udGV4dChCeXRlY29kZUdl
bmVyYXRvciYgZ2VuZXJhdG9yLCBMYWJlbCYgZmluYWxseUxhYmVsKQorICAgIDogbV9vdXRlckNv
bnRleHQoZ2VuZXJhdG9yLm1fY3VycmVudEZpbmFsbHlDb250ZXh0KQorICAgICwgbV9maW5hbGx5
TGFiZWwoJmZpbmFsbHlMYWJlbCkKK3sKKyAgICBBU1NFUlQobV9qdW1wcy5pc0VtcHR5KCkpOwor
ICAgIG1fY29tcGxldGlvbi50eXBlUmVnaXN0ZXIgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7
CisgICAgbV9jb21wbGV0aW9uLnZhbHVlUmVnaXN0ZXIgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5
KCk7CisgICAgZ2VuZXJhdG9yLmVtaXRMb2FkKGNvbXBsZXRpb25UeXBlUmVnaXN0ZXIoKSwgQ29t
cGxldGlvblR5cGU6Ok5vcm1hbCk7CisgICAgZ2VuZXJhdG9yLm1vdmVFbXB0eVZhbHVlKGNvbXBs
ZXRpb25WYWx1ZVJlZ2lzdGVyKCkpOworfQorCitGaW5hbGx5Q29udGV4dDo6fkZpbmFsbHlDb250
ZXh0KCkKK3sKKyAgICBtX2NvbXBsZXRpb24udHlwZVJlZ2lzdGVyID0gbnVsbHB0cjsKKyAgICBt
X2NvbXBsZXRpb24udmFsdWVSZWdpc3RlciA9IG51bGxwdHI7Cit9CisKIFBhcnNlckVycm9yIEJ5
dGVjb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZSgpCiB7CiAgICAgbV9jb2RlQmxvY2stPnNldFRoaXNS
ZWdpc3RlcihtX3RoaXNSZWdpc3Rlci52aXJ0dWFsUmVnaXN0ZXIoKSk7CkBAIC0yNDUsMTQgKzI2
MiwyNCBAQCBQYXJzZXJFcnJvciBCeXRlY29kZUdlbmVyYXRvcjo6Z2VuZXJhdGUoCiAgICAgICAg
IGVtaXRVbnJlYWNoYWJsZSgpOwogICAgIH0KIAotICAgIGZvciAoYXV0byYgdHVwbGUgOiBtX2Nh
dGNoZXNUb0VtaXQpIHsKKyAgICBmb3IgKGF1dG8mIHR1cGxlIDogbV9leGNlcHRpb25IYW5kbGVy
c1RvRW1pdCkgewogICAgICAgICBSZWY8TGFiZWw+IHJlYWxDYXRjaFRhcmdldCA9IG5ld0xhYmVs
KCk7CisgICAgICAgIFRyeURhdGEqIHRyeURhdGEgPSBzdGQ6OmdldDwwPih0dXBsZSk7CisKICAg
ICAgICAgT3BDYXRjaDo6ZW1pdCh0aGlzLCBzdGQ6OmdldDwxPih0dXBsZSksIHN0ZDo6Z2V0PDI+
KHR1cGxlKSk7CiAgICAgICAgIHJlYWxDYXRjaFRhcmdldC0+c2V0TG9jYXRpb24oKnRoaXMsIG1f
bGFzdEluc3RydWN0aW9uLm9mZnNldCgpKTsKKyAgICAgICAgaWYgKHN0ZDo6Z2V0PDM+KHR1cGxl
KS5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIFJlZ2lzdGVySUQgY29tcGxldGlvblR5cGVSZWdp
c3RlciB7IHN0ZDo6Z2V0PDM+KHR1cGxlKSB9OworICAgICAgICAgICAgLy8gZmluYWxseSBuZWVk
IHRvIHJldGhyb3cuIGNhdGNoIGRvZXMgbm90LgorICAgICAgICAgICAgQ29tcGxldGlvblR5cGUg
Y29tcGxldGlvblR5cGUgPQorICAgICAgICAgICAgICAgIHRyeURhdGEtPmhhbmRsZXJUeXBlID09
IEhhbmRsZXJUeXBlOjpGaW5hbGx5IHx8IHRyeURhdGEtPmhhbmRsZXJUeXBlID09IEhhbmRsZXJU
eXBlOjpTeW50aGVzaXplZEZpbmFsbHkKKyAgICAgICAgICAgICAgICA/IENvbXBsZXRpb25UeXBl
OjpUaHJvdworICAgICAgICAgICAgICAgIDogQ29tcGxldGlvblR5cGU6Ok5vcm1hbDsKKyAgICAg
ICAgICAgIGVtaXRMb2FkKCZjb21wbGV0aW9uVHlwZVJlZ2lzdGVyLCBjb21wbGV0aW9uVHlwZSk7
CisgICAgICAgIH0KICAgICAgICAgbV9jb2RlQmxvY2stPmFkZEp1bXBUYXJnZXQobV9sYXN0SW5z
dHJ1Y3Rpb24ub2Zmc2V0KCkpOwogCiAKLSAgICAgICAgVHJ5RGF0YSogdHJ5RGF0YSA9IHN0ZDo6
Z2V0PDA+KHR1cGxlKTsKICAgICAgICAgZW1pdEp1bXAodHJ5RGF0YS0+dGFyZ2V0LmdldCgpKTsK
ICAgICAgICAgdHJ5RGF0YS0+dGFyZ2V0ID0gV1RGTW92ZShyZWFsQ2F0Y2hUYXJnZXQpOwogICAg
IH0KQEAgLTc4OCw4ICs4MTUsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0
b3IoVk0mCiAgICAgICAgIHBvcFRyeSh0cnlGb3JtYWxQYXJhbWV0ZXJzRGF0YSwgY2F0Y2hMYWJl
bC5nZXQoKSk7CiAKICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHRocm93blZhbHVlID0gbmV3
VGVtcG9yYXJ5KCk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIHVudXNlZCA9IG5ld1RlbXBvcmFyeSgp
OwotICAgICAgICBlbWl0Q2F0Y2godW51c2VkLCB0aHJvd25WYWx1ZS5nZXQoKSwgdHJ5Rm9ybWFs
UGFyYW1ldGVyc0RhdGEpOworICAgICAgICBlbWl0T3V0T2ZMaW5lQ2F0Y2hIYW5kbGVyKHRocm93
blZhbHVlLmdldCgpLCBudWxscHRyLCB0cnlGb3JtYWxQYXJhbWV0ZXJzRGF0YSk7CiAKICAgICAg
ICAgLy8gcmV0dXJuIHByb21pc2VDYXBhYmlsaXR5LkByZWplY3QodGhyb3duVmFsdWUpCiAgICAg
ICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZWplY3QgPSBlbWl0R2V0QnlJZChuZXdUZW1wb3Jhcnko
KSwgcHJvbWlzZUNhcGFiaWxpdHlSZWdpc3RlcigpLCBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5idWls
dGluTmFtZXMoKS5yZWplY3RQcml2YXRlTmFtZSgpKTsKQEAgLTM1MTMsMTcgKzM1MzksMTYgQEAg
dm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFdpbGxMZWF2ZUNhbAogICAgIGVtaXREZWJ1Z0hv
b2soV2lsbExlYXZlQ2FsbEZyYW1lLCBtX3Njb3BlTm9kZS0+bGFzdExpbmUoKSwgbV9zY29wZU5v
ZGUtPnN0YXJ0T2Zmc2V0KCksIG1fc2NvcGVOb2RlLT5saW5lU3RhcnRPZmZzZXQoKSk7CiB9CiAK
LUZpbmFsbHlDb250ZXh0KiBCeXRlY29kZUdlbmVyYXRvcjo6cHVzaEZpbmFsbHlDb250cm9sRmxv
d1Njb3BlKExhYmVsJiBmaW5hbGx5TGFiZWwpCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNo
RmluYWxseUNvbnRyb2xGbG93U2NvcGUoRmluYWxseUNvbnRleHQmIGZpbmFsbHlDb250ZXh0KQog
ewotICAgIENvbnRyb2xGbG93U2NvcGUgc2NvcGUoQ29udHJvbEZsb3dTY29wZTo6RmluYWxseSwg
Y3VycmVudExleGljYWxTY29wZUluZGV4KCksIEZpbmFsbHlDb250ZXh0KG1fY3VycmVudEZpbmFs
bHlDb250ZXh0LCBmaW5hbGx5TGFiZWwpKTsKKyAgICBDb250cm9sRmxvd1Njb3BlIHNjb3BlKENv
bnRyb2xGbG93U2NvcGU6OkZpbmFsbHksIGN1cnJlbnRMZXhpY2FsU2NvcGVJbmRleCgpLCAmZmlu
YWxseUNvbnRleHQpOwogICAgIG1fY29udHJvbEZsb3dTY29wZVN0YWNrLmFwcGVuZChXVEZNb3Zl
KHNjb3BlKSk7CiAKICAgICBtX2ZpbmFsbHlEZXB0aCsrOwotICAgIG1fY3VycmVudEZpbmFsbHlD
b250ZXh0ID0gJm1fY29udHJvbEZsb3dTY29wZVN0YWNrLmxhc3QoKS5maW5hbGx5Q29udGV4dDsK
LSAgICByZXR1cm4gbV9jdXJyZW50RmluYWxseUNvbnRleHQ7CisgICAgbV9jdXJyZW50RmluYWxs
eUNvbnRleHQgPSAmZmluYWxseUNvbnRleHQ7CiB9CiAKLUZpbmFsbHlDb250ZXh0IEJ5dGVjb2Rl
R2VuZXJhdG9yOjpwb3BGaW5hbGx5Q29udHJvbEZsb3dTY29wZSgpCit2b2lkIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjpwb3BGaW5hbGx5Q29udHJvbEZsb3dTY29wZSgpCiB7CiAgICAgQVNTRVJUKG1fY29u
dHJvbEZsb3dTY29wZVN0YWNrLnNpemUoKSk7CiAgICAgQVNTRVJUKG1fY29udHJvbEZsb3dTY29w
ZVN0YWNrLmxhc3QoKS5pc0ZpbmFsbHlTY29wZSgpKTsKQEAgLTM1MzEsNyArMzU1Niw3IEBAIEZp
bmFsbHlDb250ZXh0IEJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BGaW4KICAgICBBU1NFUlQobV9jdXJy
ZW50RmluYWxseUNvbnRleHQpOwogICAgIG1fY3VycmVudEZpbmFsbHlDb250ZXh0ID0gbV9jdXJy
ZW50RmluYWxseUNvbnRleHQtPm91dGVyQ29udGV4dCgpOwogICAgIG1fZmluYWxseURlcHRoLS07
Ci0gICAgcmV0dXJuIG1fY29udHJvbEZsb3dTY29wZVN0YWNrLnRha2VMYXN0KCkuZmluYWxseUNv
bnRleHQ7CisgICAgbV9jb250cm9sRmxvd1Njb3BlU3RhY2sucmVtb3ZlTGFzdCgpOwogfQogCiBM
YWJlbFNjb3BlKiBCeXRlY29kZUdlbmVyYXRvcjo6YnJlYWtUYXJnZXQoY29uc3QgSWRlbnRpZmll
ciYgbmFtZSkKQEAgLTM2NDIsOSArMzY2NywyMyBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpw
b3BUcnkoVHJ5RGF0YSogCiAgICAgbV90cnlDb250ZXh0U3RhY2sucmVtb3ZlTGFzdCgpOwogfQog
Ci12b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q2F0Y2goUmVnaXN0ZXJJRCogZXhjZXB0aW9u
UmVnaXN0ZXIsIFJlZ2lzdGVySUQqIHRocm93blZhbHVlUmVnaXN0ZXIsIFRyeURhdGEqIGRhdGEp
Cit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0T3V0T2ZMaW5lQ2F0Y2hIYW5kbGVyKFJlZ2lz
dGVySUQqIHRocm93blZhbHVlUmVnaXN0ZXIsIFJlZ2lzdGVySUQqIGNvbXBsZXRpb25UeXBlUmVn
aXN0ZXIsIFRyeURhdGEqIGRhdGEpCit7CisgICAgUmVnaXN0ZXJJRCogdW51c2VkID0gbmV3VGVt
cG9yYXJ5KCk7CisgICAgZW1pdE91dE9mTGluZUV4Y2VwdGlvbkhhbmRsZXIodW51c2VkLCB0aHJv
d25WYWx1ZVJlZ2lzdGVyLCBjb21wbGV0aW9uVHlwZVJlZ2lzdGVyLCBkYXRhKTsKK30KKwordm9p
ZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE91dE9mTGluZUZpbmFsbHlIYW5kbGVyKFJlZ2lzdGVy
SUQqIGV4Y2VwdGlvblJlZ2lzdGVyLCBSZWdpc3RlcklEKiBjb21wbGV0aW9uVHlwZVJlZ2lzdGVy
LCBUcnlEYXRhKiBkYXRhKQoreworICAgIFJlZ2lzdGVySUQqIHVudXNlZCA9IG5ld1RlbXBvcmFy
eSgpOworICAgIEFTU0VSVChjb21wbGV0aW9uVHlwZVJlZ2lzdGVyKTsKKyAgICBlbWl0T3V0T2ZM
aW5lRXhjZXB0aW9uSGFuZGxlcihleGNlcHRpb25SZWdpc3RlciwgdW51c2VkLCBjb21wbGV0aW9u
VHlwZVJlZ2lzdGVyLCBkYXRhKTsKK30KKwordm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE91
dE9mTGluZUV4Y2VwdGlvbkhhbmRsZXIoUmVnaXN0ZXJJRCogZXhjZXB0aW9uUmVnaXN0ZXIsIFJl
Z2lzdGVySUQqIHRocm93blZhbHVlUmVnaXN0ZXIsIFJlZ2lzdGVySUQqIGNvbXBsZXRpb25UeXBl
UmVnaXN0ZXIsIFRyeURhdGEqIGRhdGEpCiB7Ci0gICAgbV9jYXRjaGVzVG9FbWl0LmFwcGVuZChD
YXRjaEVudHJ5IHsgZGF0YSwgZXhjZXB0aW9uUmVnaXN0ZXIsIHRocm93blZhbHVlUmVnaXN0ZXIg
fSk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGNvbXBsZXRpb25UeXBlVmlydHVhbFJlZ2lzdGVyID0g
Y29tcGxldGlvblR5cGVSZWdpc3RlciA/IGNvbXBsZXRpb25UeXBlUmVnaXN0ZXIgOiBWaXJ0dWFs
UmVnaXN0ZXIoKTsKKyAgICBtX2V4Y2VwdGlvbkhhbmRsZXJzVG9FbWl0LmFwcGVuZChDYXRjaEVu
dHJ5IHsgZGF0YSwgZXhjZXB0aW9uUmVnaXN0ZXIsIHRocm93blZhbHVlUmVnaXN0ZXIsIGNvbXBs
ZXRpb25UeXBlVmlydHVhbFJlZ2lzdGVyIH0pOwogfQogCiB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9y
OjpyZXN0b3JlU2NvcGVSZWdpc3RlcihpbnQgbGV4aWNhbFNjb3BlSW5kZXgpCkBAIC0zOTU5LDgg
KzM5OTgsNiBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RW51bWVyYXRpb24oCiAgICAg
Ym9vbCBpc0ZvckF3YWl0ID0gZm9yTG9vcE5vZGUgPyBmb3JMb29wTm9kZS0+aXNGb3JBd2FpdCgp
IDogZmFsc2U7CiAgICAgQVNTRVJUKCFpc0ZvckF3YWl0IHx8IChpc0ZvckF3YWl0ICYmIGlzQXN5
bmNGdW5jdGlvblBhcnNlTW9kZShwYXJzZU1vZGUoKSkpKTsKIAotICAgIENvbXBsZXRpb25SZWNv
cmRTY29wZSBjb21wbGV0aW9uUmVjb3JkU2NvcGUoKnRoaXMpOwotCiAgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IHN1YmplY3QgPSBuZXdUZW1wb3JhcnkoKTsKICAgICBlbWl0Tm9kZShzdWJqZWN0Lmdl
dCgpLCBzdWJqZWN0Tm9kZSk7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGl0ZXJhdG9yID0gaXNG
b3JBd2FpdCA/IGVtaXRHZXRBc3luY0l0ZXJhdG9yKHN1YmplY3QuZ2V0KCksIG5vZGUpIDogZW1p
dEdldEl0ZXJhdG9yKHN1YmplY3QuZ2V0KCksIG5vZGUpOwpAQCAtMzk3NCw3ICs0MDExLDggQEAg
dm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEVudW1lcmF0aW9uKAogICAgIFJlZjxMYWJlbD4g
ZW5kQ2F0Y2hMYWJlbCA9IG5ld0xhYmVsKCk7CiAKICAgICAvLyBSZWZQdHI8UmVnaXN0ZXI+IGl0
ZXJhdG9yJ3MgbGlmZXRpbWUgbXVzdCBiZSBsb25nZXIgdGhhbiBJdGVyYXRvckNsb3NlQ29udGV4
dC4KLSAgICBGaW5hbGx5Q29udGV4dCogZmluYWxseUNvbnRleHQgPSBwdXNoRmluYWxseUNvbnRy
b2xGbG93U2NvcGUoZmluYWxseUxhYmVsLmdldCgpKTsKKyAgICBGaW5hbGx5Q29udGV4dCBmaW5h
bGx5Q29udGV4dCgqdGhpcywgZmluYWxseUxhYmVsLmdldCgpKTsKKyAgICBwdXNoRmluYWxseUNv
bnRyb2xGbG93U2NvcGUoZmluYWxseUNvbnRleHQpOwogCiAgICAgewogICAgICAgICBSZWY8TGFi
ZWxTY29wZT4gc2NvcGUgPSBuZXdMYWJlbFNjb3BlKExhYmVsU2NvcGU6Okxvb3ApOwpAQCAtNDAw
MCwxNiArNDAzOCwxNSBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RW51bWVyYXRpb24o
CiAKICAgICAgICAgICAgIFJlZjxMYWJlbD4gZmluYWxseUJvZHlMYWJlbCA9IG5ld0xhYmVsKCk7
CiAgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZmluYWxseUV4Y2VwdGlvblJlZ2lzdGVy
ID0gbmV3VGVtcG9yYXJ5KCk7Ci0gICAgICAgICAgICBSZWdpc3RlcklEKiB1bnVzZWQgPSBuZXdU
ZW1wb3JhcnkoKTsKIAotICAgICAgICAgICAgZW1pdENhdGNoKGNvbXBsZXRpb25WYWx1ZVJlZ2lz
dGVyKCksIHVudXNlZCwgdHJ5RGF0YSk7Ci0gICAgICAgICAgICBlbWl0U2V0Q29tcGxldGlvblR5
cGUoQ29tcGxldGlvblR5cGU6OlRocm93KTsKLSAgICAgICAgICAgIG1vdmUoZmluYWxseUV4Y2Vw
dGlvblJlZ2lzdGVyLmdldCgpLCBjb21wbGV0aW9uVmFsdWVSZWdpc3RlcigpKTsKKyAgICAgICAg
ICAgIGVtaXRPdXRPZkxpbmVGaW5hbGx5SGFuZGxlcihmaW5hbGx5Q29udGV4dC5jb21wbGV0aW9u
VmFsdWVSZWdpc3RlcigpLCBmaW5hbGx5Q29udGV4dC5jb21wbGV0aW9uVHlwZVJlZ2lzdGVyKCks
IHRyeURhdGEpOworICAgICAgICAgICAgbW92ZShmaW5hbGx5RXhjZXB0aW9uUmVnaXN0ZXIuZ2V0
KCksIGZpbmFsbHlDb250ZXh0LmNvbXBsZXRpb25WYWx1ZVJlZ2lzdGVyKCkpOwogICAgICAgICAg
ICAgZW1pdEp1bXAoZmluYWxseUJvZHlMYWJlbC5nZXQoKSk7CiAKICAgICAgICAgICAgIGVtaXRM
YWJlbChmaW5hbGx5TGFiZWwuZ2V0KCkpOwogICAgICAgICAgICAgbW92ZUVtcHR5VmFsdWUoZmlu
YWxseUV4Y2VwdGlvblJlZ2lzdGVyLmdldCgpKTsKIAorICAgICAgICAgICAgLy8gRmluYWxseSBm
YWxsIHRocm91Z2ggY2FzZS4KICAgICAgICAgICAgIGVtaXRMYWJlbChmaW5hbGx5Qm9keUxhYmVs
LmdldCgpKTsKICAgICAgICAgICAgIHJlc3RvcmVTY29wZVJlZ2lzdGVyKCk7CiAKQEAgLTQwMzMs
NyArNDA3MCw3IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRFbnVtZXJhdGlvbigKICAg
ICAgICAgICAgIGVtaXRUaHJvd1R5cGVFcnJvcigiSXRlcmF0b3IgcmVzdWx0IGludGVyZmFjZSBp
cyBub3QgYW4gb2JqZWN0LiJfcyk7CiAKICAgICAgICAgICAgIGVtaXRMYWJlbChmaW5hbGx5RG9u
ZS5nZXQoKSk7Ci0gICAgICAgICAgICBlbWl0RmluYWxseUNvbXBsZXRpb24oKmZpbmFsbHlDb250
ZXh0LCBjb21wbGV0aW9uVHlwZVJlZ2lzdGVyKCksIGVuZENhdGNoTGFiZWwuZ2V0KCkpOworICAg
ICAgICAgICAgZW1pdEZpbmFsbHlDb21wbGV0aW9uKGZpbmFsbHlDb250ZXh0LCBlbmRDYXRjaExh
YmVsLmdldCgpKTsKIAogICAgICAgICAgICAgcG9wVHJ5KHJldHVybkNhbGxUcnlEYXRhLCBmaW5h
bGx5RG9uZS5nZXQoKSk7CiAKQEAgLTQwNDQsOSArNDA4MSw5IEBAIHZvaWQgQnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXRFbnVtZXJhdGlvbigKICAgICAgICAgICAgIC8vIHRoZSBmaW5hbGx5IGJsb2Nr
LiBPdGhlcndpc2UsIHdlJ2xsIGxldCBhbnkgbmV3IGV4Y2VwdGlvbiBwYXNzIHRocm91Z2guCiAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgZW1pdExhYmVsKGNhdGNoTGFiZWwuZ2V0KCkp
OworCiAgICAgICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGV4Y2VwdGlvblJlZ2lzdGVy
ID0gbmV3VGVtcG9yYXJ5KCk7Ci0gICAgICAgICAgICAgICAgUmVnaXN0ZXJJRCogdW51c2VkID0g
bmV3VGVtcG9yYXJ5KCk7Ci0gICAgICAgICAgICAgICAgZW1pdENhdGNoKGV4Y2VwdGlvblJlZ2lz
dGVyLmdldCgpLCB1bnVzZWQsIHJldHVybkNhbGxUcnlEYXRhKTsKKyAgICAgICAgICAgICAgICBl
bWl0T3V0T2ZMaW5lRmluYWxseUhhbmRsZXIoZXhjZXB0aW9uUmVnaXN0ZXIuZ2V0KCksIGZpbmFs
bHlDb250ZXh0LmNvbXBsZXRpb25UeXBlUmVnaXN0ZXIoKSwgcmV0dXJuQ2FsbFRyeURhdGEpOwog
ICAgICAgICAgICAgICAgIC8vIFNpbmNlIHRoaXMgaXMgYSBzeW50aGVzaXplZCBjYXRjaCBibG9j
ayBhbmQgd2UncmUgZ3VhcmFudGVlZCB0byBuZXZlciBuZWVkCiAgICAgICAgICAgICAgICAgLy8g
dG8gcmVzb2x2ZSBhbnkgc3ltYm9scyBmcm9tIHRoZSBzY29wZSwgd2UgY2FuIHNraXAgcmVzdG9y
aW5nIHRoZSBzY29wZQogICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIGhlcmUuCkBAIC00Njg1
LDcgKzQ3MjIsNyBAQCBib29sIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SnVtcFZpYUZpbmFsCiAg
ICAgd2hpbGUgKG51bWJlck9mU2NvcGVzVG9DaGVja0ZvckZpbmFsbHktLSkgewogICAgICAgICBD
b250cm9sRmxvd1Njb3BlKiBzY29wZSA9ICZtX2NvbnRyb2xGbG93U2NvcGVTdGFja1tzY29wZUlu
ZGV4LS1dOwogICAgICAgICBpZiAoc2NvcGUtPmlzRmluYWxseVNjb3BlKCkpIHsKLSAgICAgICAg
ICAgIEZpbmFsbHlDb250ZXh0KiBmaW5hbGx5Q29udGV4dCA9ICZzY29wZS0+ZmluYWxseUNvbnRl
eHQ7CisgICAgICAgICAgICBGaW5hbGx5Q29udGV4dCogZmluYWxseUNvbnRleHQgPSBzY29wZS0+
ZmluYWxseUNvbnRleHQ7CiAgICAgICAgICAgICBpZiAoIWlubmVybW9zdEZpbmFsbHlDb250ZXh0
KQogICAgICAgICAgICAgICAgIGlubmVybW9zdEZpbmFsbHlDb250ZXh0ID0gZmluYWxseUNvbnRl
eHQ7CiAgICAgICAgICAgICBvdXRlcm1vc3RGaW5hbGx5Q29udGV4dCA9IGZpbmFsbHlDb250ZXh0
OwpAQCAtNDY5OSw3ICs0NzM2LDcgQEAgYm9vbCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEp1bXBW
aWFGaW5hbAogICAgIGludCBsZXhpY2FsU2NvcGVJbmRleCA9IGxhYmVsU2NvcGVEZXB0aFRvTGV4
aWNhbFNjb3BlSW5kZXgodGFyZ2V0TGFiZWxTY29wZURlcHRoKTsKICAgICBvdXRlcm1vc3RGaW5h
bGx5Q29udGV4dC0+cmVnaXN0ZXJKdW1wKGp1bXBJRCwgbGV4aWNhbFNjb3BlSW5kZXgsIGp1bXBU
YXJnZXQpOwogCi0gICAgZW1pdFNldENvbXBsZXRpb25UeXBlKGp1bXBJRCk7CisgICAgZW1pdExv
YWQoaW5uZXJtb3N0RmluYWxseUNvbnRleHQtPmNvbXBsZXRpb25UeXBlUmVnaXN0ZXIoKSwganVt
cElEKTsKICAgICBlbWl0SnVtcCgqaW5uZXJtb3N0RmluYWxseUNvbnRleHQtPmZpbmFsbHlMYWJl
bCgpKTsKICAgICByZXR1cm4gdHJ1ZTsgLy8gV2UnbGwgYmUganVtcGluZyB0byBhIGZpbmFsbHkg
YmxvY2suCiB9CkBAIC00NzE1LDcgKzQ3NTIsNyBAQCBib29sIEJ5dGVjb2RlR2VuZXJhdG9yOjpl
bWl0UmV0dXJuVmlhRmluCiAgICAgICAgIHNpemVfdCBzY29wZUluZGV4ID0gLS1udW1iZXJPZlNj
b3Blc1RvQ2hlY2tGb3JGaW5hbGx5OwogICAgICAgICBDb250cm9sRmxvd1Njb3BlKiBzY29wZSA9
ICZtX2NvbnRyb2xGbG93U2NvcGVTdGFja1tzY29wZUluZGV4XTsKICAgICAgICAgaWYgKHNjb3Bl
LT5pc0ZpbmFsbHlTY29wZSgpKSB7Ci0gICAgICAgICAgICBGaW5hbGx5Q29udGV4dCogZmluYWxs
eUNvbnRleHQgPSAmc2NvcGUtPmZpbmFsbHlDb250ZXh0OworICAgICAgICAgICAgRmluYWxseUNv
bnRleHQqIGZpbmFsbHlDb250ZXh0ID0gc2NvcGUtPmZpbmFsbHlDb250ZXh0OwogICAgICAgICAg
ICAgaWYgKCFpbm5lcm1vc3RGaW5hbGx5Q29udGV4dCkKICAgICAgICAgICAgICAgICBpbm5lcm1v
c3RGaW5hbGx5Q29udGV4dCA9IGZpbmFsbHlDb250ZXh0OwogICAgICAgICAgICAgZmluYWxseUNv
bnRleHQtPnNldEhhbmRsZXNSZXR1cm5zKCk7CkBAIC00NzI0LDc2ICs0NzYxLDk0IEBAIGJvb2wg
Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRSZXR1cm5WaWFGaW4KICAgICBpZiAoIWlubmVybW9zdEZp
bmFsbHlDb250ZXh0KQogICAgICAgICByZXR1cm4gZmFsc2U7IC8vIE5vIGZpbmFsbHlzIHRvIHRo
cmVhZCB0aHJvdWdoLgogCi0gICAgZW1pdFNldENvbXBsZXRpb25UeXBlKENvbXBsZXRpb25UeXBl
OjpSZXR1cm4pOwotICAgIGVtaXRTZXRDb21wbGV0aW9uVmFsdWUocmV0dXJuUmVnaXN0ZXIpOwor
ICAgIGVtaXRMb2FkKGlubmVybW9zdEZpbmFsbHlDb250ZXh0LT5jb21wbGV0aW9uVHlwZVJlZ2lz
dGVyKCksIENvbXBsZXRpb25UeXBlOjpSZXR1cm4pOworICAgIG1vdmUoaW5uZXJtb3N0RmluYWxs
eUNvbnRleHQtPmNvbXBsZXRpb25WYWx1ZVJlZ2lzdGVyKCksIHJldHVyblJlZ2lzdGVyKTsKICAg
ICBlbWl0SnVtcCgqaW5uZXJtb3N0RmluYWxseUNvbnRleHQtPmZpbmFsbHlMYWJlbCgpKTsKICAg
ICByZXR1cm4gdHJ1ZTsgLy8gV2UnbGwgYmUganVtcGluZyB0byBhIGZpbmFsbHkgYmxvY2suCiB9
CiAKLXZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRGaW5hbGx5Q29tcGxldGlvbihGaW5hbGx5
Q29udGV4dCYgY29udGV4dCwgUmVnaXN0ZXJJRCogY29tcGxldGlvblR5cGVSZWdpc3RlciwgTGFi
ZWwmIG5vcm1hbENvbXBsZXRpb25MYWJlbCkKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRG
aW5hbGx5Q29tcGxldGlvbihGaW5hbGx5Q29udGV4dCYgY29udGV4dCwgTGFiZWwmIG5vcm1hbENv
bXBsZXRpb25MYWJlbCkKIHsKICAgICBpZiAoY29udGV4dC5udW1iZXJPZkJyZWFrc09yQ29udGlu
dWVzKCkgfHwgY29udGV4dC5oYW5kbGVzUmV0dXJucygpKSB7Ci0gICAgICAgIGVtaXRKdW1wSWY8
T3BTdHJpY3RlcT4oY29tcGxldGlvblR5cGVSZWdpc3RlciwgQ29tcGxldGlvblR5cGU6Ok5vcm1h
bCwgbm9ybWFsQ29tcGxldGlvbkxhYmVsKTsKKyAgICAgICAgZW1pdEp1bXBJZjxPcFN0cmljdGVx
Pihjb250ZXh0LmNvbXBsZXRpb25UeXBlUmVnaXN0ZXIoKSwgQ29tcGxldGlvblR5cGU6Ok5vcm1h
bCwgbm9ybWFsQ29tcGxldGlvbkxhYmVsKTsKIAogICAgICAgICBGaW5hbGx5Q29udGV4dCogb3V0
ZXJDb250ZXh0ID0gY29udGV4dC5vdXRlckNvbnRleHQoKTsKIAogICAgICAgICBzaXplX3QgbnVt
YmVyT2ZKdW1wcyA9IGNvbnRleHQubnVtYmVyT2ZKdW1wcygpOwogICAgICAgICBBU1NFUlQob3V0
ZXJDb250ZXh0IHx8IG51bWJlck9mSnVtcHMgPT0gY29udGV4dC5udW1iZXJPZkJyZWFrc09yQ29u
dGludWVzKCkpOwogCisgICAgICAgIC8vIEhhbmRsZSBCcmVhayBvciBDb250aW51ZSBjb21wbGV0
aW9ucyB0aGF0IGp1bXBzIGludG8gdGhpcyBGaW5hbGx5Q29udGV4dC4KICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZkp1bXBzOyBpKyspIHsKICAgICAgICAgICAgIFJlZjxM
YWJlbD4gbmV4dExhYmVsID0gbmV3TGFiZWwoKTsKICAgICAgICAgICAgIGF1dG8mIGp1bXAgPSBj
b250ZXh0Lmp1bXBzKGkpOwotICAgICAgICAgICAgZW1pdEp1bXBJZjxPcE5zdHJpY3RlcT4oY29t
cGxldGlvblR5cGVSZWdpc3RlciwganVtcC5qdW1wSUQsIG5leHRMYWJlbC5nZXQoKSk7CisgICAg
ICAgICAgICBlbWl0SnVtcElmPE9wTnN0cmljdGVxPihjb250ZXh0LmNvbXBsZXRpb25UeXBlUmVn
aXN0ZXIoKSwganVtcC5qdW1wSUQsIG5leHRMYWJlbC5nZXQoKSk7CiAKKyAgICAgICAgICAgIC8v
IEFmdGVyIGEgQnJlYWsgb3IgQ29udGludWUsIHdlIHJlc3VtZSBleGVjdXRpb24gYW5kIG1heSBl
dmVudHVhbGx5IGNvbXBsZXRlIHdpdGgKKyAgICAgICAgICAgIC8vIE5vcm1hbCBjb21wbGV0aW9u
ICh1bmxlc3MgYWJydXB0bHkgY29tcGxldGVkIGFnYWluKS4gU28sIHByZS1lbXB0aXZlbHkgc2V0
IHRoZQorICAgICAgICAgICAgLy8gY29tcGxldGlvbiB0eXBlIHRvIE5vcm1hbC4gV2UgY2FuIGFs
c28gIHNldCB0aGUgY29tcGxldGlvbiB2YWx1ZSB0byB1bmRlZmluZWQsCisgICAgICAgICAgICAv
LyBidXQgaXQgd2lsbCBuZXZlciBiZSB1c2VkIGZvciBub3JtYWwgY29tcGxldGlvbiBhbnl3YXku
IFNvLCB3ZSdsbCBza2lwIHNldHRpbmcgaXQuCiAgICAgICAgICAgICByZXN0b3JlU2NvcGVSZWdp
c3RlcihqdW1wLnRhcmdldExleGljYWxTY29wZUluZGV4KTsKLSAgICAgICAgICAgIGVtaXRTZXRD
b21wbGV0aW9uVHlwZShDb21wbGV0aW9uVHlwZTo6Tm9ybWFsKTsKKyAgICAgICAgICAgIGVtaXRM
b2FkKGNvbnRleHQuY29tcGxldGlvblR5cGVSZWdpc3RlcigpLCBDb21wbGV0aW9uVHlwZTo6Tm9y
bWFsKTsKICAgICAgICAgICAgIGVtaXRKdW1wKGp1bXAudGFyZ2V0TGFiZWwuZ2V0KCkpOwogCiAg
ICAgICAgICAgICBlbWl0TGFiZWwobmV4dExhYmVsLmdldCgpKTsKICAgICAgICAgfQogCisgICAg
ICAgIC8vIEhhbmRsZSBjb21wbGV0aW9ucyB0aGF0IHRha2UgdXMgb3V0IG9mIHRoaXMgRmluYWxs
eUNvbnRleHQuCiAgICAgICAgIGlmIChvdXRlckNvbnRleHQpIHsKLSAgICAgICAgICAgIC8vIFdl
IGFyZSBub3QgdGhlIG91dGVybW9zdCBmaW5hbGx5LgorICAgICAgICAgICAgaWYgKGNvbnRleHQu
aGFuZGxlc1JldHVybnMoKSkgeworICAgICAgICAgICAgICAgIFJlZjxMYWJlbD4gaXNOb3RSZXR1
cm5MYWJlbCA9IG5ld0xhYmVsKCk7CisgICAgICAgICAgICAgICAgZW1pdEp1bXBJZjxPcE5zdHJp
Y3RlcT4oY29udGV4dC5jb21wbGV0aW9uVHlwZVJlZ2lzdGVyKCksIENvbXBsZXRpb25UeXBlOjpS
ZXR1cm4sIGlzTm90UmV0dXJuTGFiZWwuZ2V0KCkpOworCisgICAgICAgICAgICAgICAgLy8gRm9y
IFJldHVybiBjb21wbGV0aW9uLCB3ZSBuZWVkIHRvIHBhc3MgdGhlIGNvbXBsZXRpb24gdHlwZSBh
bmQgdmFsdWUgdG8KKyAgICAgICAgICAgICAgICAvLyB0aGUgb3V0ZXIgZmluYWxseSBzbyB0aGF0
IGl0IGNhbiByZXR1cm4gd2hlbiBpdCdzIGRvbmUgKHVubGVzcyBpbnRlcnJ1cHRlZAorICAgICAg
ICAgICAgICAgIC8vIGJ5IGFub3RoZXIgYWJydXB0IGNvbXBsZXRpb24pLgorICAgICAgICAgICAg
ICAgIG1vdmUob3V0ZXJDb250ZXh0LT5jb21wbGV0aW9uVHlwZVJlZ2lzdGVyKCksIGNvbnRleHQu
Y29tcGxldGlvblR5cGVSZWdpc3RlcigpKTsKKyAgICAgICAgICAgICAgICBtb3ZlKG91dGVyQ29u
dGV4dC0+Y29tcGxldGlvblZhbHVlUmVnaXN0ZXIoKSwgY29udGV4dC5jb21wbGV0aW9uVmFsdWVS
ZWdpc3RlcigpKTsKKyAgICAgICAgICAgICAgICBlbWl0SnVtcCgqb3V0ZXJDb250ZXh0LT5maW5h
bGx5TGFiZWwoKSk7CisKKyAgICAgICAgICAgICAgICBlbWl0TGFiZWwoaXNOb3RSZXR1cm5MYWJl
bC5nZXQoKSk7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGJvb2wgaGFzQnJlYWtzT3JD
b250aW51ZXNOb3RDb3ZlcmVkQnlKdW1wcyA9IGNvbnRleHQubnVtYmVyT2ZCcmVha3NPckNvbnRp
bnVlcygpID4gbnVtYmVyT2ZKdW1wczsKLSAgICAgICAgICAgIGlmIChoYXNCcmVha3NPckNvbnRp
bnVlc05vdENvdmVyZWRCeUp1bXBzIHx8IGNvbnRleHQuaGFuZGxlc1JldHVybnMoKSkKLSAgICAg
ICAgICAgICAgICBlbWl0SnVtcElmPE9wTnN0cmljdGVxPihjb21wbGV0aW9uVHlwZVJlZ2lzdGVy
LCBDb21wbGV0aW9uVHlwZTo6VGhyb3csICpvdXRlckNvbnRleHQtPmZpbmFsbHlMYWJlbCgpKTsK
KyAgICAgICAgICAgIGlmIChoYXNCcmVha3NPckNvbnRpbnVlc05vdENvdmVyZWRCeUp1bXBzKSB7
CisgICAgICAgICAgICAgICAgUmVmPExhYmVsPiBpc1Rocm93T3JOb3JtYWxMYWJlbCA9IG5ld0xh
YmVsKCk7CisgICAgICAgICAgICAgICAgZW1pdEp1bXBJZjxPcEJlbG93ZXE+KGNvbnRleHQuY29t
cGxldGlvblR5cGVSZWdpc3RlcigpLCBDb21wbGV0aW9uVHlwZTo6VGhyb3csIGlzVGhyb3dPck5v
cm1hbExhYmVsLmdldCgpKTsKKworICAgICAgICAgICAgICAgIC8vIE5vdCBUaHJvdyBtZWFucyB3
ZSBoYXZlIGEgQnJlYWsgb3IgQ29udGludWUgdGhhdCBzaG91bGQgYmUgaGFuZGxlZCBieSB0aGUg
b3V0ZXIgY29udGV4dC4KKyAgICAgICAgICAgICAgICAvLyBUaGVzZSBhcmUgZm9yIEJyZWFrIG9y
IENvbnRpbnVlIGNvbXBsZXRpb25zIHRoYXQgaGF2ZSBub3QgcmVhY2hlZCB0aGVpciBqdW1wIHRh
cmdldHMKKyAgICAgICAgICAgICAgICAvLyB5ZXQuIFRoZSBvdXRlciBjb250ZXh0IG5lZWRzIHRv
IHJ1biBpdHMgZmluYWxseSwgYW5kIHJlc3VtZSB0aGUganVtcCBvdXR3YXJkcyAodW5sZXNzCisg
ICAgICAgICAgICAgICAgLy8gaW50ZXJydXB0ZWQgYnkgYW5vdGhlciBhYnJ1cHQgY29tcGxldGlv
bikuIFNvLCB3ZSBuZWVkIHRvIHBhc3MgdGhlIGNvbXBsZXRpb24gdHlwZSB0bworICAgICAgICAg
ICAgICAgIC8vIHRoZSBvdXRlciBmaW5hbGx5LiBBZ2Fpbiwgd2UgY2FuIHNraXAgdGhlIGNvbXBs
ZXRpb24gdmFsdWUgYmVjYXVzZSBpdCdzIG5vdCB1c2VkIGZvcgorICAgICAgICAgICAgICAgIC8v
IEJyZWFrIG5vciBDb250aW51ZS4KKyAgICAgICAgICAgICAgICBtb3ZlKG91dGVyQ29udGV4dC0+
Y29tcGxldGlvblR5cGVSZWdpc3RlcigpLCBjb250ZXh0LmNvbXBsZXRpb25UeXBlUmVnaXN0ZXIo
KSk7CisgICAgICAgICAgICAgICAgZW1pdEp1bXAoKm91dGVyQ29udGV4dC0+ZmluYWxseUxhYmVs
KCkpOworCisgICAgICAgICAgICAgICAgZW1pdExhYmVsKGlzVGhyb3dPck5vcm1hbExhYmVsLmdl
dCgpKTsKKyAgICAgICAgICAgIH0KIAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8g
V2UgYXJlIHRoZSBvdXRlcm1vc3QgZmluYWxseS4KICAgICAgICAgICAgIGlmIChjb250ZXh0Lmhh
bmRsZXNSZXR1cm5zKCkpIHsKICAgICAgICAgICAgICAgICBSZWY8TGFiZWw+IG5vdFJldHVybkxh
YmVsID0gbmV3TGFiZWwoKTsKLSAgICAgICAgICAgICAgICBlbWl0SnVtcElmPE9wTnN0cmljdGVx
Pihjb21wbGV0aW9uVHlwZVJlZ2lzdGVyLCBDb21wbGV0aW9uVHlwZTo6UmV0dXJuLCBub3RSZXR1
cm5MYWJlbC5nZXQoKSk7CisgICAgICAgICAgICAgICAgZW1pdEp1bXBJZjxPcE5zdHJpY3RlcT4o
Y29udGV4dC5jb21wbGV0aW9uVHlwZVJlZ2lzdGVyKCksIENvbXBsZXRpb25UeXBlOjpSZXR1cm4s
IG5vdFJldHVybkxhYmVsLmdldCgpKTsKIAogICAgICAgICAgICAgICAgIGVtaXRXaWxsTGVhdmVD
YWxsRnJhbWVEZWJ1Z0hvb2soKTsKLSAgICAgICAgICAgICAgICBlbWl0UmV0dXJuKGNvbXBsZXRp
b25WYWx1ZVJlZ2lzdGVyKCksIFJldHVybkZyb206OkZpbmFsbHkpOwotICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIGVtaXRSZXR1cm4oY29udGV4dC5jb21wbGV0aW9uVmFsdWVSZWdp
c3RlcigpLCBSZXR1cm5Gcm9tOjpGaW5hbGx5KTsKKwogICAgICAgICAgICAgICAgIGVtaXRMYWJl
bChub3RSZXR1cm5MYWJlbC5nZXQoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9
Ci0gICAgZW1pdEp1bXBJZjxPcE5zdHJpY3RlcT4oY29tcGxldGlvblR5cGVSZWdpc3RlciwgQ29t
cGxldGlvblR5cGU6OlRocm93LCBub3JtYWxDb21wbGV0aW9uTGFiZWwpOwotICAgIGVtaXRUaHJv
dyhjb21wbGV0aW9uVmFsdWVSZWdpc3RlcigpKTsKLX0KLQotYm9vbCBCeXRlY29kZUdlbmVyYXRv
cjo6YWxsb2NhdGVDb21wbGV0aW9uUmVjb3JkUmVnaXN0ZXJzKCkKLXsKLSAgICBpZiAobV9jb21w
bGV0aW9uVHlwZVJlZ2lzdGVyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBBU1NFUlQo
IW1fY29tcGxldGlvblZhbHVlUmVnaXN0ZXIpOwotICAgIG1fY29tcGxldGlvblR5cGVSZWdpc3Rl
ciA9IG5ld1RlbXBvcmFyeSgpOwotICAgIG1fY29tcGxldGlvblZhbHVlUmVnaXN0ZXIgPSBuZXdU
ZW1wb3JhcnkoKTsKIAotICAgIGVtaXRTZXRDb21wbGV0aW9uVHlwZShDb21wbGV0aW9uVHlwZTo6
Tm9ybWFsKTsKLSAgICBtb3ZlRW1wdHlWYWx1ZShtX2NvbXBsZXRpb25WYWx1ZVJlZ2lzdGVyLmdl
dCgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KKyAgICAvLyBIYW5kbGUgVGhyb3cgb3IgTm9ybWFs
IGNvbXBsZXRpb25zLgorICAgIGVtaXRKdW1wSWY8T3BOc3RyaWN0ZXE+KGNvbnRleHQuY29tcGxl
dGlvblR5cGVSZWdpc3RlcigpLCBDb21wbGV0aW9uVHlwZTo6VGhyb3csIG5vcm1hbENvbXBsZXRp
b25MYWJlbCk7CiAKLXZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnJlbGVhc2VDb21wbGV0aW9uUmVj
b3JkUmVnaXN0ZXJzKCkKLXsKLSAgICBBU1NFUlQobV9jb21wbGV0aW9uVHlwZVJlZ2lzdGVyICYm
IG1fY29tcGxldGlvblZhbHVlUmVnaXN0ZXIpOwotICAgIG1fY29tcGxldGlvblR5cGVSZWdpc3Rl
ciA9IG51bGxwdHI7Ci0gICAgbV9jb21wbGV0aW9uVmFsdWVSZWdpc3RlciA9IG51bGxwdHI7Cisg
ICAgLy8gRm9yIFRocm93LCB3ZSBqdXN0IHJlLXRocm93IHRoZSBwcmV2aW91c2x5IGNhdWdodCBl
eGNlcHRpb24gY2FwdHVyZWQgaW4gdGhlIGNvbXBsZXRpb24gdmFsdWUuCisgICAgLy8gVGhlIGV4
Y2VwdGlvbiBoYW5kbGVyIHdpbGwgc2V0IHRoZSBjb21wbGV0aW9uIHR5cGUgdG8gVGhyb3csIGFu
ZCByZS1jYXB0dXJlIHRoZSBjb21wbGV0aW9uCisgICAgLy8gdmFsdWUgaWYgbmVlZGVkIChpLmUu
IGlmIHRoZSBleGNlcHRpb24gaGFuZGxlciBpcyBmb3IgYSBmaW5hbGx5KS4gSGVuY2UsIG5vIG5l
ZWQgdG8gc2V0IHRoZQorICAgIC8vIGNvbXBsZXRpb24gdHlwZSBhbmQgdmFsdWUgaGVyZS4KKyAg
ICBlbWl0VGhyb3coY29udGV4dC5jb21wbGV0aW9uVmFsdWVSZWdpc3RlcigpKTsKIH0KIAogdGVt
cGxhdGU8dHlwZW5hbWUgQ29tcGFyZU9wPgpAQCAtNDgwMyw3ICs0ODU4LDcgQEAgdm9pZCBCeXRl
Y29kZUdlbmVyYXRvcjo6ZW1pdEp1bXBJZihSZWdpcwogICAgIFJlZ2lzdGVySUQqIHZhbHVlQ29u
c3RhbnQgPSBhZGRDb25zdGFudFZhbHVlKGpzTnVtYmVyKHN0YXRpY19jYXN0PGludD4odHlwZSkp
KTsKICAgICBPcGVyYW5kVHlwZXMgb3BlcmFuZFR5cGVzID0gT3BlcmFuZFR5cGVzKFJlc3VsdFR5
cGU6Om51bWJlclR5cGVJc0ludDMyKCksIFJlc3VsdFR5cGU6OnVua25vd25UeXBlKCkpOwogCi0g
ICAgYXV0byBlcXVpdmFsZW5jZVJlc3VsdCA9IGVtaXRCaW5hcnlPcDxDb21wYXJlT3A+KHRlbXBS
ZWdpc3Rlci5nZXQoKSwgdmFsdWVDb25zdGFudCwgY29tcGxldGlvblR5cGVSZWdpc3Rlciwgb3Bl
cmFuZFR5cGVzKTsKKyAgICBhdXRvIGVxdWl2YWxlbmNlUmVzdWx0ID0gZW1pdEJpbmFyeU9wPENv
bXBhcmVPcD4odGVtcFJlZ2lzdGVyLmdldCgpLCBjb21wbGV0aW9uVHlwZVJlZ2lzdGVyLCB2YWx1
ZUNvbnN0YW50LCBvcGVyYW5kVHlwZXMpOwogICAgIGVtaXRKdW1wSWZUcnVlKGVxdWl2YWxlbmNl
UmVzdWx0LCBqdW1wVGFyZ2V0KTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkocmV2aXNpb24gMjQy
NTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVy
YXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwOC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHly
aWdodCAoQykgMjAwOCBDYW1lcm9uIFp3YXJpY2ggPGN3endhcmljaEB1d2F0ZXJsb28uY2E+CiAg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhLCBTLkwuCiAgKgpAQCAtOTgsMTEgKzk4LDggQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgLy8gSGVuY2UsIHRoZXJlIHdvbid0IGJlIGFueSBjb2xsaXNp
b24gYmV0d2VlbiBqdW1wSURzIGFuZCBDb21wbGV0aW9uVHlwZSBlbnVtcy4KICAgICBlbnVtIGNs
YXNzIENvbXBsZXRpb25UeXBlIDogaW50IHsKICAgICAgICAgTm9ybWFsLAotICAgICAgICBCcmVh
aywKLSAgICAgICAgQ29udGludWUsCi0gICAgICAgIFJldHVybiwKICAgICAgICAgVGhyb3csCi0g
ICAgICAgIAorICAgICAgICBSZXR1cm4sCiAgICAgICAgIE51bWJlck9mVHlwZXMKICAgICB9Owog
CkBAIC0xMjUsMTggKzEyMiwxOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgUmVmPExhYmVs
PiB0YXJnZXRMYWJlbDsKICAgICB9OwogCi0gICAgc3RydWN0IEZpbmFsbHlDb250ZXh0IHsKKyAg
ICBjbGFzcyBGaW5hbGx5Q29udGV4dCB7CisgICAgcHVibGljOgogICAgICAgICBGaW5hbGx5Q29u
dGV4dCgpIHsgfQotICAgICAgICBGaW5hbGx5Q29udGV4dChGaW5hbGx5Q29udGV4dCogb3V0ZXJD
b250ZXh0LCBMYWJlbCYgZmluYWxseUxhYmVsKQotICAgICAgICAgICAgOiBtX291dGVyQ29udGV4
dChvdXRlckNvbnRleHQpCi0gICAgICAgICAgICAsIG1fZmluYWxseUxhYmVsKCZmaW5hbGx5TGFi
ZWwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChtX2p1bXBzLmlzRW1wdHkoKSk7Ci0g
ICAgICAgIH0KKyAgICAgICAgRmluYWxseUNvbnRleHQoQnl0ZWNvZGVHZW5lcmF0b3ImLCBMYWJl
bCYgZmluYWxseUxhYmVsKTsKKyAgICAgICAgfkZpbmFsbHlDb250ZXh0KCk7CiAKICAgICAgICAg
RmluYWxseUNvbnRleHQqIG91dGVyQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fb3V0ZXJDb250
ZXh0OyB9CiAgICAgICAgIExhYmVsKiBmaW5hbGx5TGFiZWwoKSBjb25zdCB7IHJldHVybiBtX2Zp
bmFsbHlMYWJlbDsgfQogCisgICAgICAgIFJlZ2lzdGVySUQqIGNvbXBsZXRpb25UeXBlUmVnaXN0
ZXIoKSBjb25zdCB7IHJldHVybiBtX2NvbXBsZXRpb24udHlwZVJlZ2lzdGVyLmdldCgpOyB9Cisg
ICAgICAgIFJlZ2lzdGVySUQqIGNvbXBsZXRpb25WYWx1ZVJlZ2lzdGVyKCkgY29uc3QgeyByZXR1
cm4gbV9jb21wbGV0aW9uLnZhbHVlUmVnaXN0ZXIuZ2V0KCk7IH0KKwogICAgICAgICB1aW50MzJf
dCBudW1iZXJPZkJyZWFrc09yQ29udGludWVzKCkgY29uc3QgeyByZXR1cm4gbV9udW1iZXJPZkJy
ZWFrc09yQ29udGludWVzLnVuc2FmZUdldCgpOyB9CiAgICAgICAgIHZvaWQgaW5jTnVtYmVyT2ZC
cmVha3NPckNvbnRpbnVlcygpIHsgbV9udW1iZXJPZkJyZWFrc09yQ29udGludWVzKys7IH0KIApA
QCAtMTU3LDYgKzE1NCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgQ2hlY2tlZDx1aW50
MzJfdCwgV1RGOjpDcmFzaE9uT3ZlcmZsb3c+IG1fbnVtYmVyT2ZCcmVha3NPckNvbnRpbnVlczsK
ICAgICAgICAgYm9vbCBtX2hhbmRsZXNSZXR1cm5zIHsgZmFsc2UgfTsKICAgICAgICAgVmVjdG9y
PEZpbmFsbHlKdW1wPiBtX2p1bXBzOworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgUmVm
UHRyPFJlZ2lzdGVySUQ+IHR5cGVSZWdpc3RlcjsKKyAgICAgICAgICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiB2YWx1ZVJlZ2lzdGVyOworICAgICAgICB9IG1fY29tcGxldGlvbjsKICAgICB9OwogCiAg
ICAgc3RydWN0IENvbnRyb2xGbG93U2NvcGUgewpAQCAtMTY1LDEwICsxNjYsMTAgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgICAgICBMYWJlbCwKICAgICAgICAgICAgIEZpbmFsbHkKICAgICAg
ICAgfTsKLSAgICAgICAgQ29udHJvbEZsb3dTY29wZShUeXBlIHR5cGUsIGludCBsZXhpY2FsU2Nv
cGVJbmRleCwgRmluYWxseUNvbnRleHQmJiBmaW5hbGx5Q29udGV4dCA9IEZpbmFsbHlDb250ZXh0
KCkpCisgICAgICAgIENvbnRyb2xGbG93U2NvcGUoVHlwZSB0eXBlLCBpbnQgbGV4aWNhbFNjb3Bl
SW5kZXgsIEZpbmFsbHlDb250ZXh0KiBmaW5hbGx5Q29udGV4dCA9IG51bGxwdHIpCiAgICAgICAg
ICAgICA6IHR5cGUodHlwZSkKICAgICAgICAgICAgICwgbGV4aWNhbFNjb3BlSW5kZXgobGV4aWNh
bFNjb3BlSW5kZXgpCi0gICAgICAgICAgICAsIGZpbmFsbHlDb250ZXh0KHN0ZDo6Zm9yd2FyZDxG
aW5hbGx5Q29udGV4dD4oZmluYWxseUNvbnRleHQpKQorICAgICAgICAgICAgLCBmaW5hbGx5Q29u
dGV4dChmaW5hbGx5Q29udGV4dCkKICAgICAgICAgeyB9CiAKICAgICAgICAgYm9vbCBpc0xhYmVs
U2NvcGUoKSBjb25zdCB7IHJldHVybiB0eXBlID09IExhYmVsOyB9CkBAIC0xNzYsNyArMTc3LDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgVHlwZSB0eXBlOwogICAgICAgICBpbnQgbGV4
aWNhbFNjb3BlSW5kZXg7Ci0gICAgICAgIEZpbmFsbHlDb250ZXh0IGZpbmFsbHlDb250ZXh0Owor
ICAgICAgICBGaW5hbGx5Q29udGV4dCogZmluYWxseUNvbnRleHQ7CiAgICAgfTsKIAogICAgIGNs
YXNzIEZvckluQ29udGV4dCA6IHB1YmxpYyBSZWZDb3VudGVkPEZvckluQ29udGV4dD4gewpAQCAt
MzY0LDYgKzM2NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShCeXRlY29kZUdlbmVyYXRvcik7CiAKICAgICAgICAgZnJpZW5kIGNsYXNzIEJvdW5kTGFi
ZWw7CisgICAgICAgIGZyaWVuZCBjbGFzcyBGaW5hbGx5Q29udGV4dDsKICAgICAgICAgZnJpZW5k
IGNsYXNzIExhYmVsOwogICAgICAgICBmcmllbmQgY2xhc3MgSW5kZXhlZEZvckluQ29udGV4dDsK
ICAgICAgICAgZnJpZW5kIGNsYXNzIFN0cnVjdHVyZUZvckluQ29udGV4dDsKQEAgLTg3NSw3ICs4
NzcsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVHJ5RGF0YSogcHVzaFRyeShMYWJlbCYg
c3RhcnQsIExhYmVsJiBoYW5kbGVyTGFiZWwsIEhhbmRsZXJUeXBlKTsKICAgICAgICAgLy8gRW5k
IGEgdHJ5IGJsb2NrLiAnZW5kJyBtdXN0IGhhdmUgYmVlbiBlbWl0dGVkLgogICAgICAgICB2b2lk
IHBvcFRyeShUcnlEYXRhKiwgTGFiZWwmIGVuZCk7Ci0gICAgICAgIHZvaWQgZW1pdENhdGNoKFJl
Z2lzdGVySUQqIGV4Y2VwdGlvblJlZ2lzdGVyLCBSZWdpc3RlcklEKiB0aHJvd25WYWx1ZVJlZ2lz
dGVyLCBUcnlEYXRhKik7CisKKyAgICAgICAgdm9pZCBlbWl0T3V0T2ZMaW5lQ2F0Y2hIYW5kbGVy
KFJlZ2lzdGVySUQqIHRocm93blZhbHVlUmVnaXN0ZXIsIFJlZ2lzdGVySUQqIGNvbXBsZXRpb25U
eXBlUmVnaXN0ZXIsIFRyeURhdGEqKTsKKyAgICAgICAgdm9pZCBlbWl0T3V0T2ZMaW5lRmluYWxs
eUhhbmRsZXIoUmVnaXN0ZXJJRCogZXhjZXB0aW9uUmVnaXN0ZXIsIFJlZ2lzdGVySUQqIGNvbXBs
ZXRpb25UeXBlUmVnaXN0ZXIsIFRyeURhdGEqKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHN0
YXRpYyBjb25zdCBpbnQgQ3VycmVudExleGljYWxTY29wZUluZGV4ID0gLTI7CkBAIC04OTEsNiAr
ODk1LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gc2l6ZSAtIDE7CiAg
ICAgICAgIH0KIAorICAgICAgICB2b2lkIGVtaXRPdXRPZkxpbmVFeGNlcHRpb25IYW5kbGVyKFJl
Z2lzdGVySUQqIGV4Y2VwdGlvblJlZ2lzdGVyLCBSZWdpc3RlcklEKiB0aHJvd25WYWx1ZVJlZ2lz
dGVyLCBSZWdpc3RlcklEKiBjb21wbGV0aW9uVHlwZVJlZ2lzdGVyLCBUcnlEYXRhKik7CisKICAg
ICBwdWJsaWM6CiAgICAgICAgIHZvaWQgcmVzdG9yZVNjb3BlUmVnaXN0ZXIoKTsKICAgICAgICAg
dm9pZCByZXN0b3JlU2NvcGVSZWdpc3RlcihpbnQgbGV4aWNhbFNjb3BlSW5kZXgpOwpAQCAtOTI5
LDQzICs5MzUsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0RGVidWdIb29r
KEV4cHJlc3Npb25Ob2RlKik7CiAgICAgICAgIHZvaWQgZW1pdFdpbGxMZWF2ZUNhbGxGcmFtZURl
YnVnSG9vaygpOwogCi0gICAgICAgIGNsYXNzIENvbXBsZXRpb25SZWNvcmRTY29wZSB7Ci0gICAg
ICAgIHB1YmxpYzoKLSAgICAgICAgICAgIENvbXBsZXRpb25SZWNvcmRTY29wZShCeXRlY29kZUdl
bmVyYXRvciYgZ2VuZXJhdG9yLCBib29sIG5lZWRDb21wbGV0aW9uUmVjb3JkUmVnaXN0ZXJzID0g
dHJ1ZSkKLSAgICAgICAgICAgICAgICA6IG1fZ2VuZXJhdG9yKGdlbmVyYXRvcikKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBpZiAobmVlZENvbXBsZXRpb25SZWNvcmRSZWdpc3RlcnMg
JiYgbV9nZW5lcmF0b3IuYWxsb2NhdGVDb21wbGV0aW9uUmVjb3JkUmVnaXN0ZXJzKCkpCi0gICAg
ICAgICAgICAgICAgICAgIG1fbmVlZFRvUmVsZWFzZU9uRGVzdHJ1Y3Rpb24gPSB0cnVlOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfkNvbXBsZXRpb25SZWNvcmRTY29wZSgpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fbmVlZFRvUmVsZWFzZU9uRGVzdHJ1Y3Rpb24p
Ci0gICAgICAgICAgICAgICAgICAgIG1fZ2VuZXJhdG9yLnJlbGVhc2VDb21wbGV0aW9uUmVjb3Jk
UmVnaXN0ZXJzKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZToKLSAgICAgICAg
ICAgIEJ5dGVjb2RlR2VuZXJhdG9yJiBtX2dlbmVyYXRvcjsKLSAgICAgICAgICAgIGJvb2wgbV9u
ZWVkVG9SZWxlYXNlT25EZXN0cnVjdGlvbiB7IGZhbHNlIH07Ci0gICAgICAgIH07Ci0KLSAgICAg
ICAgUmVnaXN0ZXJJRCogY29tcGxldGlvblR5cGVSZWdpc3RlcigpIGNvbnN0Ci0gICAgICAgIHsK
LSAgICAgICAgICAgIEFTU0VSVChtX2NvbXBsZXRpb25UeXBlUmVnaXN0ZXIpOwotICAgICAgICAg
ICAgcmV0dXJuIG1fY29tcGxldGlvblR5cGVSZWdpc3Rlci5nZXQoKTsKLSAgICAgICAgfQotICAg
ICAgICBSZWdpc3RlcklEKiBjb21wbGV0aW9uVmFsdWVSZWdpc3RlcigpIGNvbnN0CisgICAgICAg
IHZvaWQgZW1pdExvYWQoUmVnaXN0ZXJJRCogY29tcGxldGlvblR5cGVSZWdpc3RlciwgQ29tcGxl
dGlvblR5cGUgdHlwZSkKICAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKG1fY29tcGxldGlv
blZhbHVlUmVnaXN0ZXIpOwotICAgICAgICAgICAgcmV0dXJuIG1fY29tcGxldGlvblZhbHVlUmVn
aXN0ZXIuZ2V0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGVtaXRTZXRDb21wbGV0aW9u
VHlwZShDb21wbGV0aW9uVHlwZSB0eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgICBlbWl0TG9h
ZChjb21wbGV0aW9uVHlwZVJlZ2lzdGVyKCksIEpTVmFsdWUoc3RhdGljX2Nhc3Q8aW50Pih0eXBl
KSkpOwotICAgICAgICB9Ci0gICAgICAgIHZvaWQgZW1pdFNldENvbXBsZXRpb25WYWx1ZShSZWdp
c3RlcklEKiByZWcpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1vdmUoY29tcGxldGlvblZhbHVl
UmVnaXN0ZXIoKSwgcmVnKTsKKyAgICAgICAgICAgIGVtaXRMb2FkKGNvbXBsZXRpb25UeXBlUmVn
aXN0ZXIsIEpTVmFsdWUoc3RhdGljX2Nhc3Q8aW50Pih0eXBlKSkpOwogICAgICAgICB9CiAKICAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29tcGFyZU9wPgpAQCAtOTczLDE1ICs5NDUsMTEgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgYm9vbCBlbWl0SnVtcFZpYUZpbmFsbHlJZk5lZWRl
ZChpbnQgdGFyZ2V0TGFiZWxTY29wZURlcHRoLCBMYWJlbCYganVtcFRhcmdldCk7CiAgICAgICAg
IGJvb2wgZW1pdFJldHVyblZpYUZpbmFsbHlJZk5lZWRlZChSZWdpc3RlcklEKiByZXR1cm5SZWdp
c3Rlcik7Ci0gICAgICAgIHZvaWQgZW1pdEZpbmFsbHlDb21wbGV0aW9uKEZpbmFsbHlDb250ZXh0
JiwgUmVnaXN0ZXJJRCogY29tcGxldGlvblR5cGVSZWdpc3RlciwgTGFiZWwmIG5vcm1hbENvbXBs
ZXRpb25MYWJlbCk7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBib29sIGFsbG9jYXRlQ29tcGxl
dGlvblJlY29yZFJlZ2lzdGVycygpOwotICAgICAgICB2b2lkIHJlbGVhc2VDb21wbGV0aW9uUmVj
b3JkUmVnaXN0ZXJzKCk7CisgICAgICAgIHZvaWQgZW1pdEZpbmFsbHlDb21wbGV0aW9uKEZpbmFs
bHlDb250ZXh0JiwgTGFiZWwmIG5vcm1hbENvbXBsZXRpb25MYWJlbCk7CiAKICAgICBwdWJsaWM6
Ci0gICAgICAgIEZpbmFsbHlDb250ZXh0KiBwdXNoRmluYWxseUNvbnRyb2xGbG93U2NvcGUoTGFi
ZWwmIGZpbmFsbHlMYWJlbCk7Ci0gICAgICAgIEZpbmFsbHlDb250ZXh0IHBvcEZpbmFsbHlDb250
cm9sRmxvd1Njb3BlKCk7CisgICAgICAgIHZvaWQgcHVzaEZpbmFsbHlDb250cm9sRmxvd1Njb3Bl
KEZpbmFsbHlDb250ZXh0Jik7CisgICAgICAgIHZvaWQgcG9wRmluYWxseUNvbnRyb2xGbG93U2Nv
cGUoKTsKIAogICAgICAgICB2b2lkIHB1c2hJbmRleGVkRm9ySW5TY29wZShSZWdpc3RlcklEKiBs
b2NhbCwgUmVnaXN0ZXJJRCogaW5kZXgpOwogICAgICAgICB2b2lkIHBvcEluZGV4ZWRGb3JJblNj
b3BlKFJlZ2lzdGVySUQqIGxvY2FsKTsKQEAgLTEyNDUsOSArMTIxMyw2IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBSZWdpc3RlcklEKiBtX2Fycm93RnVuY3Rpb25Db250ZXh0TGV4aWNhbEVu
dmlyb25tZW50UmVnaXN0ZXIgeyBudWxscHRyIH07CiAgICAgICAgIFJlZ2lzdGVySUQqIG1fcHJv
bWlzZUNhcGFiaWxpdHlSZWdpc3RlciB7IG51bGxwdHIgfTsKIAotICAgICAgICBSZWZQdHI8UmVn
aXN0ZXJJRD4gbV9jb21wbGV0aW9uVHlwZVJlZ2lzdGVyOwotICAgICAgICBSZWZQdHI8UmVnaXN0
ZXJJRD4gbV9jb21wbGV0aW9uVmFsdWVSZWdpc3RlcjsKLQogICAgICAgICBGaW5hbGx5Q29udGV4
dCogbV9jdXJyZW50RmluYWxseUNvbnRleHQgeyBudWxscHRyIH07CiAKICAgICAgICAgU2VnbWVu
dGVkVmVjdG9yPFJlZ2lzdGVySUQqLCAxNj4gbV9sb2NhbFJlZ2lzdGVyc0ZvckNhbGxlZVNhdmVS
ZWdpc3RlcnM7CkBAIC0xMzE0LDExICsxMjc5LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAg
ICAgIENvbXBhY3RWYXJpYWJsZU1hcDo6SGFuZGxlIG1fY2FjaGVkVmFyaWFibGVzVW5kZXJURFo7
CiAKLSAgICAgICAgdXNpbmcgQ2F0Y2hFbnRyeSA9IHN0ZDo6dHVwbGU8VHJ5RGF0YSosIFZpcnR1
YWxSZWdpc3RlciwgVmlydHVhbFJlZ2lzdGVyPjsKLSAgICAgICAgVmVjdG9yPENhdGNoRW50cnk+
IG1fY2F0Y2hlc1RvRW1pdDsKKyAgICAgICAgdXNpbmcgQ2F0Y2hFbnRyeSA9IHN0ZDo6dHVwbGU8
VHJ5RGF0YSosIFZpcnR1YWxSZWdpc3RlciwgVmlydHVhbFJlZ2lzdGVyLCBWaXJ0dWFsUmVnaXN0
ZXI+OworICAgICAgICBWZWN0b3I8Q2F0Y2hFbnRyeT4gbV9leGNlcHRpb25IYW5kbGVyc1RvRW1p
dDsKICAgICB9OwogCi0KIH0gLy8gbmFtZXNwYWNlIEpTQwogCiBuYW1lc3BhY2UgV1RGIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29k
ZWdlbi5jcHAJKHJldmlzaW9uIDI0MjUxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAK
IC8qCiAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMiBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUu
b3JnKQogKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0q
ICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQ2FtZXJvbiBad2FyaWNoIChjd3p3YXJpY2hAdXdh
dGVybG9vLmNhKQogKiAgQ29weXJpZ2h0IChDKSAyMDA3IE1ha3MgT3Jsb3ZpY2gKICogIENvcHly
aWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgpAQCAtMzU4MiwzMiAr
MzU4MiwyOSBAQCB2b2lkIFRyeU5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyCiAgICAg
ICAgIGdlbmVyYXRvci5lbWl0TG9hZChkc3QsIGpzVW5kZWZpbmVkKCkpOwogCiAgICAgQVNTRVJU
KG1fY2F0Y2hCbG9jayB8fCBtX2ZpbmFsbHlCbG9jayk7Ci0gICAgQnl0ZWNvZGVHZW5lcmF0b3I6
OkNvbXBsZXRpb25SZWNvcmRTY29wZSBjb21wbGV0aW9uUmVjb3JkU2NvcGUoZ2VuZXJhdG9yLCBt
X2ZpbmFsbHlCbG9jayk7CiAKICAgICBSZWZQdHI8TGFiZWw+IGNhdGNoTGFiZWw7CiAgICAgUmVm
UHRyPExhYmVsPiBjYXRjaEVuZExhYmVsOwotICAgIFJlZlB0cjxMYWJlbD4gZmluYWxseVZpYVRo
cm93TGFiZWw7CiAgICAgUmVmUHRyPExhYmVsPiBmaW5hbGx5TGFiZWw7CiAgICAgUmVmUHRyPExh
YmVsPiBmaW5hbGx5RW5kTGFiZWw7Ci0KLSAgICBSZWY8TGFiZWw+IHRyeVN0YXJ0TGFiZWwgPSBn
ZW5lcmF0b3IubmV3TGFiZWwoKTsKLSAgICBnZW5lcmF0b3IuZW1pdExhYmVsKHRyeVN0YXJ0TGFi
ZWwuZ2V0KCkpOworICAgIE9wdGlvbmFsPEZpbmFsbHlDb250ZXh0PiBmaW5hbGx5Q29udGV4dDsK
IAogICAgIGlmIChtX2ZpbmFsbHlCbG9jaykgewotICAgICAgICBmaW5hbGx5VmlhVGhyb3dMYWJl
bCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOwogICAgICAgICBmaW5hbGx5TGFiZWwgPSBnZW5lcmF0
b3IubmV3TGFiZWwoKTsKICAgICAgICAgZmluYWxseUVuZExhYmVsID0gZ2VuZXJhdG9yLm5ld0xh
YmVsKCk7CiAKLSAgICAgICAgZ2VuZXJhdG9yLnB1c2hGaW5hbGx5Q29udHJvbEZsb3dTY29wZSgq
ZmluYWxseUxhYmVsKTsKKyAgICAgICAgZmluYWxseUNvbnRleHQuZW1wbGFjZShnZW5lcmF0b3Is
ICpmaW5hbGx5TGFiZWwpOworICAgICAgICBnZW5lcmF0b3IucHVzaEZpbmFsbHlDb250cm9sRmxv
d1Njb3BlKGZpbmFsbHlDb250ZXh0LnZhbHVlKCkpOwogICAgIH0KICAgICBpZiAobV9jYXRjaEJs
b2NrKSB7CiAgICAgICAgIGNhdGNoTGFiZWwgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKICAgICAg
ICAgY2F0Y2hFbmRMYWJlbCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOwogICAgIH0KIAotICAgIExh
YmVsJiB0cnlIYW5kbGVyTGFiZWwgPSBtX2NhdGNoQmxvY2sgPyAqY2F0Y2hMYWJlbCA6ICpmaW5h
bGx5VmlhVGhyb3dMYWJlbDsKKyAgICBSZWY8TGFiZWw+IHRyeUxhYmVsID0gZ2VuZXJhdG9yLm5l
d0VtaXR0ZWRMYWJlbCgpOworICAgIExhYmVsJiB0cnlIYW5kbGVyTGFiZWwgPSBtX2NhdGNoQmxv
Y2sgPyAqY2F0Y2hMYWJlbCA6ICpmaW5hbGx5TGFiZWw7CiAgICAgSGFuZGxlclR5cGUgdHJ5SGFu
ZGxlclR5cGUgPSBtX2NhdGNoQmxvY2sgPyBIYW5kbGVyVHlwZTo6Q2F0Y2ggOiBIYW5kbGVyVHlw
ZTo6RmluYWxseTsKLSAgICBUcnlEYXRhKiB0cnlEYXRhID0gZ2VuZXJhdG9yLnB1c2hUcnkodHJ5
U3RhcnRMYWJlbC5nZXQoKSwgdHJ5SGFuZGxlckxhYmVsLCB0cnlIYW5kbGVyVHlwZSk7CisgICAg
VHJ5RGF0YSogdHJ5RGF0YSA9IGdlbmVyYXRvci5wdXNoVHJ5KHRyeUxhYmVsLmdldCgpLCB0cnlI
YW5kbGVyTGFiZWwsIHRyeUhhbmRsZXJUeXBlKTsKICAgICBUcnlEYXRhKiBmaW5hbGx5VHJ5RGF0
YSA9IG51bGxwdHI7CiAgICAgaWYgKCFtX2NhdGNoQmxvY2sgJiYgbV9maW5hbGx5QmxvY2spCiAg
ICAgICAgIGZpbmFsbHlUcnlEYXRhID0gdHJ5RGF0YTsKQEAgLTM2MTksMjEgKzM2MTYsMjEgQEAg
dm9pZCBUcnlOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcgogICAgIGVsc2UKICAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRKdW1wKCpjYXRjaEVuZExhYmVsKTsKIAotICAgIFJlZjxMYWJlbD4g
ZW5kVHJ5TGFiZWwgPSBnZW5lcmF0b3IubmV3RW1pdHRlZExhYmVsKCk7Ci0gICAgZ2VuZXJhdG9y
LnBvcFRyeSh0cnlEYXRhLCBlbmRUcnlMYWJlbC5nZXQoKSk7CisgICAgUmVmPExhYmVsPiB0cnlF
bmRMYWJlbCA9IGdlbmVyYXRvci5uZXdFbWl0dGVkTGFiZWwoKTsKKyAgICBnZW5lcmF0b3IucG9w
VHJ5KHRyeURhdGEsIHRyeUVuZExhYmVsLmdldCgpKTsKIAogICAgIGlmIChtX2NhdGNoQmxvY2sp
IHsKICAgICAgICAgLy8gVW5jYXVnaHQgZXhjZXB0aW9uIHBhdGg6IHRoZSBjYXRjaCBibG9jay4K
ICAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbCgqY2F0Y2hMYWJlbCk7CiAgICAgICAgIFJlZlB0
cjxSZWdpc3RlcklEPiB0aHJvd25WYWx1ZVJlZ2lzdGVyID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFy
eSgpOwotICAgICAgICBSZWdpc3RlcklEKiB1bnVzZWQgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5
KCk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0Q2F0Y2godW51c2VkLCB0aHJvd25WYWx1ZVJlZ2lz
dGVyLmdldCgpLCB0cnlEYXRhKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogY29tcGxldGlvblR5cGVS
ZWdpc3RlciA9IG1fZmluYWxseUJsb2NrID8gZmluYWxseUNvbnRleHQtPmNvbXBsZXRpb25UeXBl
UmVnaXN0ZXIoKSA6IG51bGxwdHI7CisgICAgICAgIGdlbmVyYXRvci5lbWl0T3V0T2ZMaW5lQ2F0
Y2hIYW5kbGVyKHRocm93blZhbHVlUmVnaXN0ZXIuZ2V0KCksIGNvbXBsZXRpb25UeXBlUmVnaXN0
ZXIsIHRyeURhdGEpOwogICAgICAgICBnZW5lcmF0b3IucmVzdG9yZVNjb3BlUmVnaXN0ZXIoKTsK
IAogICAgICAgICBpZiAobV9maW5hbGx5QmxvY2spIHsKICAgICAgICAgICAgIC8vIElmIHRoZSBj
YXRjaCBibG9jayB0aHJvd3MgYW4gZXhjZXB0aW9uIGFuZCB3ZSBoYXZlIGEgZmluYWxseSBibG9j
aywgdGhlbiB0aGUgZmluYWxseQogICAgICAgICAgICAgLy8gYmxvY2sgc2hvdWxkICJjYXRjaCIg
dGhhdCBleGNlcHRpb24uCi0gICAgICAgICAgICBmaW5hbGx5VHJ5RGF0YSA9IGdlbmVyYXRvci5w
dXNoVHJ5KCpjYXRjaExhYmVsLCAqZmluYWxseVZpYVRocm93TGFiZWwsIEhhbmRsZXJUeXBlOjpG
aW5hbGx5KTsKKyAgICAgICAgICAgIGZpbmFsbHlUcnlEYXRhID0gZ2VuZXJhdG9yLnB1c2hUcnko
KmNhdGNoTGFiZWwsICpmaW5hbGx5TGFiZWwsIEhhbmRsZXJUeXBlOjpGaW5hbGx5KTsKICAgICAg
ICAgfQogCiAgICAgICAgIGlmIChtX2NhdGNoUGF0dGVybikgewpAQCAtMzY1Miw5ICszNjQ5LDkg
QEAgdm9pZCBUcnlOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcgogICAgICAgICAgICAg
Z2VuZXJhdG9yLmVtaXRQb3BDYXRjaFNjb3BlKG1fbGV4aWNhbFZhcmlhYmxlcyk7CiAKICAgICAg
ICAgaWYgKG1fZmluYWxseUJsb2NrKSB7Ci0gICAgICAgICAgICBnZW5lcmF0b3IuZW1pdFNldENv
bXBsZXRpb25UeXBlKENvbXBsZXRpb25UeXBlOjpOb3JtYWwpOworICAgICAgICAgICAgZ2VuZXJh
dG9yLmVtaXRMb2FkKGZpbmFsbHlDb250ZXh0LT5jb21wbGV0aW9uVHlwZVJlZ2lzdGVyKCksIENv
bXBsZXRpb25UeXBlOjpOb3JtYWwpOwogICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wKCpm
aW5hbGx5TGFiZWwpOwotICAgICAgICAgICAgZ2VuZXJhdG9yLnBvcFRyeShmaW5hbGx5VHJ5RGF0
YSwgKmZpbmFsbHlWaWFUaHJvd0xhYmVsKTsKKyAgICAgICAgICAgIGdlbmVyYXRvci5wb3BUcnko
ZmluYWxseVRyeURhdGEsICpmaW5hbGx5TGFiZWwpOwogICAgICAgICB9CiAKICAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRMYWJlbCgqY2F0Y2hFbmRMYWJlbCk7CkBAIC0zNjYyLDI2ICszNjU5LDIwIEBA
IHZvaWQgVHJ5Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXIKICAgICB9CiAKICAgICBp
ZiAobV9maW5hbGx5QmxvY2spIHsKLSAgICAgICAgRmluYWxseUNvbnRleHQgZmluYWxseUNvbnRl
eHQgPSBnZW5lcmF0b3IucG9wRmluYWxseUNvbnRyb2xGbG93U2NvcGUoKTsKKyAgICAgICAgZ2Vu
ZXJhdG9yLnBvcEZpbmFsbHlDb250cm9sRmxvd1Njb3BlKCk7CiAKLSAgICAgICAgLy8gRW50cnkg
dG8gdGhlIGZpbmFsbHkgYmxvY2sgZm9yIENvbXBsZXRpb25UeXBlOjpUaHJvdy4KLSAgICAgICAg
Z2VuZXJhdG9yLmVtaXRMYWJlbCgqZmluYWxseVZpYVRocm93TGFiZWwpOwotICAgICAgICBSZWdp
c3RlcklEKiB1bnVzZWQgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7Ci0gICAgICAgIGdlbmVy
YXRvci5lbWl0Q2F0Y2goZ2VuZXJhdG9yLmNvbXBsZXRpb25WYWx1ZVJlZ2lzdGVyKCksIHVudXNl
ZCwgZmluYWxseVRyeURhdGEpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdFNldENvbXBsZXRpb25U
eXBlKENvbXBsZXRpb25UeXBlOjpUaHJvdyk7CisgICAgICAgIC8vIEVudHJ5IHRvIHRoZSBmaW5h
bGx5IGJsb2NrIGZvciBDb21wbGV0aW9uVHlwZTo6VGhyb3cgdG8gYmUgZ2VuZXJhdGVkIGxhdGVy
LgorICAgICAgICBnZW5lcmF0b3IuZW1pdE91dE9mTGluZUZpbmFsbHlIYW5kbGVyKGZpbmFsbHlD
b250ZXh0LT5jb21wbGV0aW9uVmFsdWVSZWdpc3RlcigpLCBmaW5hbGx5Q29udGV4dC0+Y29tcGxl
dGlvblR5cGVSZWdpc3RlcigpLCBmaW5hbGx5VHJ5RGF0YSk7CiAKICAgICAgICAgLy8gRW50cnkg
dG8gdGhlIGZpbmFsbHkgYmxvY2sgZm9yIENvbXBsZXRpb25UeXBlcyBvdGhlciB0aGFuIFRocm93
LgogICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKCpmaW5hbGx5TGFiZWwpOwogICAgICAgICBn
ZW5lcmF0b3IucmVzdG9yZVNjb3BlUmVnaXN0ZXIoKTsKIAotICAgICAgICBSZWZQdHI8UmVnaXN0
ZXJJRD4gc2F2ZWRDb21wbGV0aW9uVHlwZVJlZ2lzdGVyID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFy
eSgpOwotICAgICAgICBnZW5lcmF0b3IubW92ZShzYXZlZENvbXBsZXRpb25UeXBlUmVnaXN0ZXIu
Z2V0KCksIGdlbmVyYXRvci5jb21wbGV0aW9uVHlwZVJlZ2lzdGVyKCkpOwotCiAgICAgICAgIGlu
dCBmaW5hbGx5U3RhcnRPZmZzZXQgPSBtX2NhdGNoQmxvY2sgPyBtX2NhdGNoQmxvY2stPmVuZE9m
ZnNldCgpICsgMSA6IG1fdHJ5QmxvY2stPmVuZE9mZnNldCgpICsgMTsKICAgICAgICAgZ2VuZXJh
dG9yLmVtaXRQcm9maWxlQ29udHJvbEZsb3coZmluYWxseVN0YXJ0T2Zmc2V0KTsKICAgICAgICAg
Z2VuZXJhdG9yLmVtaXROb2RlSW5UYWlsUG9zaXRpb24obV9maW5hbGx5QmxvY2spOwogCi0gICAg
ICAgIGdlbmVyYXRvci5lbWl0RmluYWxseUNvbXBsZXRpb24oZmluYWxseUNvbnRleHQsIHNhdmVk
Q29tcGxldGlvblR5cGVSZWdpc3Rlci5nZXQoKSwgKmZpbmFsbHlFbmRMYWJlbCk7CisgICAgICAg
IGdlbmVyYXRvci5lbWl0RmluYWxseUNvbXBsZXRpb24oZmluYWxseUNvbnRleHQudmFsdWUoKSwg
KmZpbmFsbHlFbmRMYWJlbCk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoKmZpbmFsbHlF
bmRMYWJlbCk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZUNvbnRyb2xGbG93KG1fZmlu
YWxseUJsb2NrLT5lbmRPZmZzZXQoKSArIDEpOwogICAgIH0K
</data>
<flag name="review"
          id="380333"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>363826</attachid>
            <date>2019-03-06 17:28:32 -0800</date>
            <delta_ts>2019-03-06 17:28:32 -0800</delta_ts>
            <desc>patch for landing.</desc>
            <filename>bug-195131.patch</filename>
            <type>text/plain</type>
            <size>51952</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNDI1ODIpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE3IEBACisyMDE5LTAzLTA2ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNv
bT4KKworICAgICAgICBGaXggaW5jb3JyZWN0IGhhbmRsaW5nIG9mIHRyeS1maW5hbGx5IGNvbXBs
ZXRpb24gdmFsdWVzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTk1MTMxCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS80NjIyMjA3OT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBTYWFtIEJhcmF0aSBhbmQgWXVzdWtlIFN1enVraS4KKworICAgICAgICBB
ZGRlZCBtYW55IHBlcm11dGF0aW9ucyBvZiBuZXcgdGVzdCBjYXNlIHRvIHRlc3QtZmluYWxseS5q
cy4gIHRlc3QtZmluYWxseS5qcyBoYXMKKyAgICAgICAgYmVlbiBydW4gb24gQ2hyb21lIGFuZCBG
aXJlZm94IGFzIGEgc2FuaXR5IGNoZWNrLCBhbmQgd2UgY29uZmlybWVkIHRoYXQgYWxsIHRoZQor
ICAgICAgICB0ZXN0cyBwYXNzZXMgdGhlcmUgYXMgd2VsbC4KKworICAgICAgICAqIHN0cmVzcy90
ZXN0LWZpbmFsbHkuanM6CisKIDIwMTktMDMtMDYgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBs
ZS5jb20+CiAKICAgICAgICAgQWlyOjpyZXBvcnRVc2VkUmVnaXN0ZXJzIG11c3QgcGFkSW50ZXJm
ZXJlbmNlCkluZGV4OiBKU1Rlc3RzL3N0cmVzcy90ZXN0LWZpbmFsbHkuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSlNUZXN0cy9zdHJlc3MvdGVzdC1maW5hbGx5LmpzCShyZXZpc2lvbiAyNDI1ODIpCisrKyBK
U1Rlc3RzL3N0cmVzcy90ZXN0LWZpbmFsbHkuanMJKHdvcmtpbmcgY29weSkKQEAgLTcyNSw2ICs3
MjUsNjYwIEBAIHRlc3QoKCkgPT4gewogCiB9LCAiYSxiLGMseSxkLHosZiIsIE5vdGhpbmdSZXR1
cm5lZCwgNjAwKTsKIAordGVzdCgoKSA9PiB7CisgICAgYXBwZW5kKCJhIik7CisgICAgdHJ5IHsK
KyAgICAgICAgYXBwZW5kKCJiIik7CisgICAgICAgIHRocm93IDEwMDsKKyAgICB9IGZpbmFsbHkg
eworICAgICAgICBhcHBlbmQoImMiKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGFwcGVu
ZCgiZCIpOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgYXBwZW5kKCJlIik7Cisg
ICAgICAgIH0KKyAgICAgICAgYXBwZW5kKCJmIik7CisgICAgfQorICAgIGFwcGVuZCgiZyIpOwor
ICAgIHJldHVybiA3MDA7CisKK30sICJhLGIsYyxkLGUsZiIsIE5vdGhpbmdSZXR1cm5lZCwgMTAw
KTsKKwordGVzdCgoKSA9PiB7CisgICAgYXBwZW5kKCJhIik7CisgICAgdHJ5IHsKKyAgICAgICAg
YXBwZW5kKCJiIik7CisgICAgICAgIHJldHVybiAxMDA7CisgICAgfSBmaW5hbGx5IHsKKyAgICAg
ICAgYXBwZW5kKCJjIik7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBhcHBlbmQoImQiKTsK
KyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIGFwcGVuZCgiZSIpOworICAgICAgICB9
CisgICAgICAgIGFwcGVuZCgiZiIpOworICAgIH0KKyAgICBhcHBlbmQoImciKTsKKyAgICByZXR1
cm4gNzAwOworCit9LCAiYSxiLGMsZCxlLGYiLCAxMDAsIE5vdGhpbmdUaHJvd24pOworCit0ZXN0
KCgpID0+IHsKKyAgICBhcHBlbmQoImEiKTsKKyAgICBsYWJlbDogdHJ5IHsKKyAgICAgICAgYXBw
ZW5kKCJiIik7CisgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgMTsgaisrKSB7CisgICAgICAg
ICAgICBhcHBlbmQoIngiKTsKKyAgICAgICAgICAgIGJyZWFrIGxhYmVsOworICAgICAgICB9Cisg
ICAgfSBmaW5hbGx5IHsKKyAgICAgICAgYXBwZW5kKCJjIik7CisgICAgICAgIHRyeSB7CisgICAg
ICAgICAgICBhcHBlbmQoImQiKTsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIGFw
cGVuZCgiZSIpOworICAgICAgICB9CisgICAgICAgIGFwcGVuZCgiZiIpOworICAgIH0KKyAgICBh
cHBlbmQoImciKTsKKyAgICByZXR1cm4gNzAwOworCit9LCAiYSxiLHgsYyxkLGUsZixnIiwgNzAw
LCBOb3RoaW5nVGhyb3duKTsKKwordGVzdCgoKSA9PiB7CisgICAgYXBwZW5kKCJhIik7CisgICAg
dHJ5IHsKKyAgICAgICAgYXBwZW5kKCJiIik7CisgICAgICAgIHRocm93IDEwMDsKKyAgICB9IGZp
bmFsbHkgeworICAgICAgICBhcHBlbmQoImMiKTsKKyAgICAgICAgZm9yICh2YXIgaiA9IDA7IGog
PCAxOyBqKyspIHsKKyAgICAgICAgICAgIGFwcGVuZCgieSIpOworICAgICAgICAgICAgdHJ5IHsK
KyAgICAgICAgICAgICAgICBhcHBlbmQoImQiKTsKKyAgICAgICAgICAgIH0gZmluYWxseSB7Cisg
ICAgICAgICAgICAgICAgYXBwZW5kKCJlIik7CisgICAgICAgICAgICAgICAgdGhyb3cgMjAwOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgYXBwZW5kKCJmIik7CisgICAgICAgIH0KKyAgICAg
ICAgYXBwZW5kKCJ6Iik7CisgICAgfQorICAgIGFwcGVuZCgiZyIpOworICAgIHJldHVybiA3MDA7
CisKK30sICJhLGIsYyx5LGQsZSIsIE5vdGhpbmdSZXR1cm5lZCwgMjAwKTsKKwordGVzdCgoKSA9
PiB7CisgICAgYXBwZW5kKCJhIik7CisgICAgdHJ5IHsKKyAgICAgICAgYXBwZW5kKCJiIik7Cisg
ICAgICAgIHRocm93IDEwMDsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICBhcHBlbmQoImMiKTsK
KyAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCAxOyBqKyspIHsKKyAgICAgICAgICAgIGFwcGVu
ZCgieSIpOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBhcHBlbmQoImQiKTsK
KyAgICAgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICAgICAgYXBwZW5kKCJlIik7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIDIwMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFw
cGVuZCgiZiIpOworICAgICAgICB9CisgICAgICAgIGFwcGVuZCgieiIpOworICAgIH0KKyAgICBh
cHBlbmQoImciKTsKKyAgICByZXR1cm4gNzAwOworCit9LCAiYSxiLGMseSxkLGUiLCAyMDAsIE5v
dGhpbmdUaHJvd24pOworCit0ZXN0KCgpID0+IHsKKyAgICBhcHBlbmQoImEiKTsKKyAgICB0cnkg
eworICAgICAgICBhcHBlbmQoImIiKTsKKyAgICAgICAgdGhyb3cgMTAwOworICAgIH0gZmluYWxs
eSB7CisgICAgICAgIGFwcGVuZCgiYyIpOworICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDE7
IGorKykgeworICAgICAgICAgICAgYXBwZW5kKCJ5Iik7CisgICAgICAgICAgICB0cnkgeworICAg
ICAgICAgICAgICAgIGFwcGVuZCgiZCIpOworICAgICAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAg
ICAgICAgICAgICBhcHBlbmQoImUiKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGFwcGVuZCgiZiIpOworICAgICAgICB9CisgICAgICAgIGFw
cGVuZCgieiIpOworICAgIH0KKyAgICBhcHBlbmQoImciKTsKKyAgICByZXR1cm4gNzAwOworCit9
LCAiYSxiLGMseSxkLGUseiIsIE5vdGhpbmdSZXR1cm5lZCwgMTAwKTsKKwordGVzdCgoKSA9PiB7
CisgICAgYXBwZW5kKCJhIik7CisgICAgdHJ5IHsKKyAgICAgICAgYXBwZW5kKCJiIik7CisgICAg
ICAgIHJldHVybiAxMDA7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgYXBwZW5kKCJjIik7Cisg
ICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgMTsgaisrKSB7CisgICAgICAgICAgICBhcHBlbmQo
InkiKTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgYXBwZW5kKCJkIik7Cisg
ICAgICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgICAgIGFwcGVuZCgiZSIpOworICAg
ICAgICAgICAgICAgIHRocm93IDIwMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFwcGVu
ZCgiZiIpOworICAgICAgICB9CisgICAgICAgIGFwcGVuZCgieiIpOworICAgIH0KKyAgICBhcHBl
bmQoImciKTsKKyAgICByZXR1cm4gNzAwOworCit9LCAiYSxiLGMseSxkLGUiLCBOb3RoaW5nUmV0
dXJuZWQsIDIwMCk7CisKK3Rlc3QoKCkgPT4geworICAgIGFwcGVuZCgiYSIpOworICAgIHRyeSB7
CisgICAgICAgIGFwcGVuZCgiYiIpOworICAgICAgICByZXR1cm4gMTAwOworICAgIH0gZmluYWxs
eSB7CisgICAgICAgIGFwcGVuZCgiYyIpOworICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDE7
IGorKykgeworICAgICAgICAgICAgYXBwZW5kKCJ5Iik7CisgICAgICAgICAgICB0cnkgeworICAg
ICAgICAgICAgICAgIGFwcGVuZCgiZCIpOworICAgICAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAg
ICAgICAgICAgICBhcHBlbmQoImUiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMjAwOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgYXBwZW5kKCJmIik7CisgICAgICAgIH0KKyAgICAgICAg
YXBwZW5kKCJ6Iik7CisgICAgfQorICAgIGFwcGVuZCgiZyIpOworICAgIHJldHVybiA3MDA7CisK
K30sICJhLGIsYyx5LGQsZSIsIDIwMCwgTm90aGluZ1Rocm93bik7CisKK3Rlc3QoKCkgPT4gewor
ICAgIGFwcGVuZCgiYSIpOworICAgIHRyeSB7CisgICAgICAgIGFwcGVuZCgiYiIpOworICAgICAg
ICByZXR1cm4gMTAwOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGFwcGVuZCgiYyIpOworICAg
ICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDE7IGorKykgeworICAgICAgICAgICAgYXBwZW5kKCJ5
Iik7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGFwcGVuZCgiZCIpOworICAg
ICAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgICAgICBhcHBlbmQoImUiKTsKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFwcGVuZCgi
ZiIpOworICAgICAgICB9CisgICAgICAgIGFwcGVuZCgieiIpOworICAgIH0KKyAgICBhcHBlbmQo
ImciKTsKKyAgICByZXR1cm4gNzAwOworCit9LCAiYSxiLGMseSxkLGUseiIsIDEwMCwgTm90aGlu
Z1Rocm93bik7CisKK3Rlc3QoKCkgPT4geworICAgIGFwcGVuZCgiYSIpOworICAgIHRyeSB7Cisg
ICAgICAgIGFwcGVuZCgiYiIpOworICAgICAgICB0aHJvdyAxMDA7CisgICAgfSBmaW5hbGx5IHsK
KyAgICAgICAgYXBwZW5kKCJjIik7CisgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgMTsgaisr
KSB7CisgICAgICAgICAgICBhcHBlbmQoInkiKTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAg
ICAgICAgICAgYXBwZW5kKCJkIik7CisgICAgICAgICAgICAgICAgdGhyb3cgNDI7CisgICAgICAg
ICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgICAgIGFwcGVuZCgiZSIpOworICAgICAgICAg
ICAgICAgIHRocm93IDIwMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFwcGVuZCgiZiIp
OworICAgICAgICB9CisgICAgICAgIGFwcGVuZCgieiIpOworICAgIH0KKyAgICBhcHBlbmQoImci
KTsKKyAgICByZXR1cm4gNzAwOworCit9LCAiYSxiLGMseSxkLGUiLCBOb3RoaW5nUmV0dXJuZWQs
IDIwMCk7CisKK3Rlc3QoKCkgPT4geworICAgIGFwcGVuZCgiYSIpOworICAgIHRyeSB7CisgICAg
ICAgIGFwcGVuZCgiYiIpOworICAgICAgICB0aHJvdyAxMDA7CisgICAgfSBmaW5hbGx5IHsKKyAg
ICAgICAgYXBwZW5kKCJjIik7CisgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgMTsgaisrKSB7
CisgICAgICAgICAgICBhcHBlbmQoInkiKTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAg
ICAgICAgYXBwZW5kKCJkIik7CisgICAgICAgICAgICAgICAgdGhyb3cgNDI7CisgICAgICAgICAg
ICB9IGZpbmFsbHkgeworICAgICAgICAgICAgICAgIGFwcGVuZCgiZSIpOworICAgICAgICAgICAg
ICAgIHJldHVybiAyMDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhcHBlbmQoImYiKTsK
KyAgICAgICAgfQorICAgICAgICBhcHBlbmQoInoiKTsKKyAgICB9CisgICAgYXBwZW5kKCJnIik7
CisgICAgcmV0dXJuIDcwMDsKKworfSwgImEsYixjLHksZCxlIiwgMjAwLCBOb3RoaW5nVGhyb3du
KTsKKwordGVzdCgoKSA9PiB7CisgICAgYXBwZW5kKCJhIik7CisgICAgdHJ5IHsKKyAgICAgICAg
YXBwZW5kKCJiIik7CisgICAgICAgIHRocm93IDEwMDsKKyAgICB9IGZpbmFsbHkgeworICAgICAg
ICBhcHBlbmQoImMiKTsKKyAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCAxOyBqKyspIHsKKyAg
ICAgICAgICAgIGFwcGVuZCgieSIpOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAg
ICBhcHBlbmQoImQiKTsKKyAgICAgICAgICAgICAgICB0aHJvdyA0MjsKKyAgICAgICAgICAgIH0g
ZmluYWxseSB7CisgICAgICAgICAgICAgICAgYXBwZW5kKCJlIik7CisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhcHBlbmQoImYiKTsKKyAgICAg
ICAgfQorICAgICAgICBhcHBlbmQoInoiKTsKKyAgICB9CisgICAgYXBwZW5kKCJnIik7CisgICAg
cmV0dXJuIDcwMDsKKworfSwgImEsYixjLHksZCxlLHoiLCBOb3RoaW5nUmV0dXJuZWQsIDEwMCk7
CisKK3Rlc3QoKCkgPT4geworICAgIGFwcGVuZCgiYSIpOworICAgIHRyeSB7CisgICAgICAgIGFw
cGVuZCgiYiIpOworICAgICAgICByZXR1cm4gMTAwOworICAgIH0gZmluYWxseSB7CisgICAgICAg
IGFwcGVuZCgiYyIpOworICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDE7IGorKykgeworICAg
ICAgICAgICAgYXBwZW5kKCJ5Iik7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAg
IGFwcGVuZCgiZCIpOworICAgICAgICAgICAgICAgIHRocm93IDQyOworICAgICAgICAgICAgfSBm
aW5hbGx5IHsKKyAgICAgICAgICAgICAgICBhcHBlbmQoImUiKTsKKyAgICAgICAgICAgICAgICB0
aHJvdyAyMDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhcHBlbmQoImYiKTsKKyAgICAg
ICAgfQorICAgICAgICBhcHBlbmQoInoiKTsKKyAgICB9CisgICAgYXBwZW5kKCJnIik7CisgICAg
cmV0dXJuIDcwMDsKKworfSwgImEsYixjLHksZCxlIiwgTm90aGluZ1JldHVybmVkLCAyMDApOwor
Cit0ZXN0KCgpID0+IHsKKyAgICBhcHBlbmQoImEiKTsKKyAgICB0cnkgeworICAgICAgICBhcHBl
bmQoImIiKTsKKyAgICAgICAgcmV0dXJuIDEwMDsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICBh
cHBlbmQoImMiKTsKKyAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCAxOyBqKyspIHsKKyAgICAg
ICAgICAgIGFwcGVuZCgieSIpOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBh
cHBlbmQoImQiKTsKKyAgICAgICAgICAgICAgICB0aHJvdyA0MjsKKyAgICAgICAgICAgIH0gZmlu
YWxseSB7CisgICAgICAgICAgICAgICAgYXBwZW5kKCJlIik7CisgICAgICAgICAgICAgICAgcmV0
dXJuIDIwMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFwcGVuZCgiZiIpOworICAgICAg
ICB9CisgICAgICAgIGFwcGVuZCgieiIpOworICAgIH0KKyAgICBhcHBlbmQoImciKTsKKyAgICBy
ZXR1cm4gNzAwOworCit9LCAiYSxiLGMseSxkLGUiLCAyMDAsIE5vdGhpbmdUaHJvd24pOworCit0
ZXN0KCgpID0+IHsKKyAgICBhcHBlbmQoImEiKTsKKyAgICB0cnkgeworICAgICAgICBhcHBlbmQo
ImIiKTsKKyAgICAgICAgcmV0dXJuIDEwMDsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICBhcHBl
bmQoImMiKTsKKyAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCAxOyBqKyspIHsKKyAgICAgICAg
ICAgIGFwcGVuZCgieSIpOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBhcHBl
bmQoImQiKTsKKyAgICAgICAgICAgICAgICB0aHJvdyA0MjsKKyAgICAgICAgICAgIH0gZmluYWxs
eSB7CisgICAgICAgICAgICAgICAgYXBwZW5kKCJlIik7CisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhcHBlbmQoImYiKTsKKyAgICAgICAgfQor
ICAgICAgICBhcHBlbmQoInoiKTsKKyAgICB9CisgICAgYXBwZW5kKCJnIik7CisgICAgcmV0dXJu
IDcwMDsKKworfSwgImEsYixjLHksZCxlLHoiLCAxMDAsIE5vdGhpbmdUaHJvd24pOworCit0ZXN0
KCgpID0+IHsKKyAgICBhcHBlbmQoImEiKTsKKyAgICB0cnkgeworICAgICAgICBhcHBlbmQoImIi
KTsKKyAgICAgICAgdGhyb3cgMTAwOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGFwcGVuZCgi
YyIpOworICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDE7IGorKykgeworICAgICAgICAgICAg
YXBwZW5kKCJ5Iik7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGFwcGVuZCgi
ZCIpOworICAgICAgICAgICAgICAgIHJldHVybiA0MjsKKyAgICAgICAgICAgIH0gZmluYWxseSB7
CisgICAgICAgICAgICAgICAgYXBwZW5kKCJlIik7CisgICAgICAgICAgICAgICAgdGhyb3cgMjAw
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYXBwZW5kKCJmIik7CisgICAgICAgIH0KKyAg
ICAgICAgYXBwZW5kKCJ6Iik7CisgICAgfQorICAgIGFwcGVuZCgiZyIpOworICAgIHJldHVybiA3
MDA7CisKK30sICJhLGIsYyx5LGQsZSIsIE5vdGhpbmdSZXR1cm5lZCwgMjAwKTsKKwordGVzdCgo
KSA9PiB7CisgICAgYXBwZW5kKCJhIik7CisgICAgdHJ5IHsKKyAgICAgICAgYXBwZW5kKCJiIik7
CisgICAgICAgIHRocm93IDEwMDsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICBhcHBlbmQoImMi
KTsKKyAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCAxOyBqKyspIHsKKyAgICAgICAgICAgIGFw
cGVuZCgieSIpOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBhcHBlbmQoImQi
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gNDI7CisgICAgICAgICAgICB9IGZpbmFsbHkgewor
ICAgICAgICAgICAgICAgIGFwcGVuZCgiZSIpOworICAgICAgICAgICAgICAgIHJldHVybiAyMDA7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhcHBlbmQoImYiKTsKKyAgICAgICAgfQorICAg
ICAgICBhcHBlbmQoInoiKTsKKyAgICB9CisgICAgYXBwZW5kKCJnIik7CisgICAgcmV0dXJuIDcw
MDsKKworfSwgImEsYixjLHksZCxlIiwgMjAwLCBOb3RoaW5nVGhyb3duKTsKKwordGVzdCgoKSA9
PiB7CisgICAgYXBwZW5kKCJhIik7CisgICAgdHJ5IHsKKyAgICAgICAgYXBwZW5kKCJiIik7Cisg
ICAgICAgIHRocm93IDEwMDsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICBhcHBlbmQoImMiKTsK
KyAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCAxOyBqKyspIHsKKyAgICAgICAgICAgIGFwcGVu
ZCgieSIpOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBhcHBlbmQoImQiKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gNDI7CisgICAgICAgICAgICB9IGZpbmFsbHkgeworICAg
ICAgICAgICAgICAgIGFwcGVuZCgiZSIpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgYXBwZW5kKCJmIik7CisgICAgICAgIH0KKyAgICAgICAg
YXBwZW5kKCJ6Iik7CisgICAgfQorICAgIGFwcGVuZCgiZyIpOworICAgIHJldHVybiA3MDA7CisK
K30sICJhLGIsYyx5LGQsZSx6IiwgTm90aGluZ1JldHVybmVkLCAxMDApOworCit0ZXN0KCgpID0+
IHsKKyAgICBhcHBlbmQoImEiKTsKKyAgICB0cnkgeworICAgICAgICBhcHBlbmQoImIiKTsKKyAg
ICAgICAgcmV0dXJuIDEwMDsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICBhcHBlbmQoImMiKTsK
KyAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCAxOyBqKyspIHsKKyAgICAgICAgICAgIGFwcGVu
ZCgieSIpOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBhcHBlbmQoImQiKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gNDI7CisgICAgICAgICAgICB9IGZpbmFsbHkgeworICAg
ICAgICAgICAgICAgIGFwcGVuZCgiZSIpOworICAgICAgICAgICAgICAgIHRocm93IDIwMDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGFwcGVuZCgiZiIpOworICAgICAgICB9CisgICAgICAg
IGFwcGVuZCgieiIpOworICAgIH0KKyAgICBhcHBlbmQoImciKTsKKyAgICByZXR1cm4gNzAwOwor
Cit9LCAiYSxiLGMseSxkLGUiLCBOb3RoaW5nUmV0dXJuZWQsIDIwMCk7CisKK3Rlc3QoKCkgPT4g
eworICAgIGFwcGVuZCgiYSIpOworICAgIHRyeSB7CisgICAgICAgIGFwcGVuZCgiYiIpOworICAg
ICAgICByZXR1cm4gMTAwOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGFwcGVuZCgiYyIpOwor
ICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDE7IGorKykgeworICAgICAgICAgICAgYXBwZW5k
KCJ5Iik7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGFwcGVuZCgiZCIpOwor
ICAgICAgICAgICAgICAgIHJldHVybiA0MjsKKyAgICAgICAgICAgIH0gZmluYWxseSB7CisgICAg
ICAgICAgICAgICAgYXBwZW5kKCJlIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIDIwMDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGFwcGVuZCgiZiIpOworICAgICAgICB9CisgICAgICAg
IGFwcGVuZCgieiIpOworICAgIH0KKyAgICBhcHBlbmQoImciKTsKKyAgICByZXR1cm4gNzAwOwor
Cit9LCAiYSxiLGMseSxkLGUiLCAyMDAsIE5vdGhpbmdUaHJvd24pOworCit0ZXN0KCgpID0+IHsK
KyAgICBhcHBlbmQoImEiKTsKKyAgICB0cnkgeworICAgICAgICBhcHBlbmQoImIiKTsKKyAgICAg
ICAgcmV0dXJuIDEwMDsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICBhcHBlbmQoImMiKTsKKyAg
ICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCAxOyBqKyspIHsKKyAgICAgICAgICAgIGFwcGVuZCgi
eSIpOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBhcHBlbmQoImQiKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gNDI7CisgICAgICAgICAgICB9IGZpbmFsbHkgeworICAgICAg
ICAgICAgICAgIGFwcGVuZCgiZSIpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgYXBwZW5kKCJmIik7CisgICAgICAgIH0KKyAgICAgICAgYXBw
ZW5kKCJ6Iik7CisgICAgfQorICAgIGFwcGVuZCgiZyIpOworICAgIHJldHVybiA3MDA7CisKK30s
ICJhLGIsYyx5LGQsZSx6IiwgMTAwLCBOb3RoaW5nVGhyb3duKTsKKwordGVzdCgoKSA9PiB7Cisg
ICAgYXBwZW5kKCJhIik7CisgICAgdHJ5IHsKKyAgICAgICAgYXBwZW5kKCJiIik7CisgICAgICAg
IHRocm93IDEwMDsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICBhcHBlbmQoImMiKTsKKyAgICAg
ICAgZm9yICh2YXIgaiA9IDA7IGogPCAxOyBqKyspIHsKKyAgICAgICAgICAgIGFwcGVuZCgieSIp
OworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBhcHBlbmQoImQiKTsKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAg
ICAgICAgYXBwZW5kKCJlIik7CisgICAgICAgICAgICAgICAgdGhyb3cgMjAwOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgYXBwZW5kKCJmIik7CisgICAgICAgIH0KKyAgICAgICAgYXBwZW5k
KCJ6Iik7CisgICAgfQorICAgIGFwcGVuZCgiZyIpOworICAgIHJldHVybiA3MDA7CisKK30sICJh
LGIsYyx5LGQsZSIsIE5vdGhpbmdSZXR1cm5lZCwgMjAwKTsKKwordGVzdCgoKSA9PiB7CisgICAg
YXBwZW5kKCJhIik7CisgICAgdHJ5IHsKKyAgICAgICAgYXBwZW5kKCJiIik7CisgICAgICAgIHRo
cm93IDEwMDsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICBhcHBlbmQoImMiKTsKKyAgICAgICAg
Zm9yICh2YXIgaiA9IDA7IGogPCAxOyBqKyspIHsKKyAgICAgICAgICAgIGFwcGVuZCgieSIpOwor
ICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBhcHBlbmQoImQiKTsKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICAg
ICAgYXBwZW5kKCJlIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIDIwMDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGFwcGVuZCgiZiIpOworICAgICAgICB9CisgICAgICAgIGFwcGVuZCgi
eiIpOworICAgIH0KKyAgICBhcHBlbmQoImciKTsKKyAgICByZXR1cm4gNzAwOworCit9LCAiYSxi
LGMseSxkLGUiLCAyMDAsIE5vdGhpbmdUaHJvd24pOworCit0ZXN0KCgpID0+IHsKKyAgICBhcHBl
bmQoImEiKTsKKyAgICB0cnkgeworICAgICAgICBhcHBlbmQoImIiKTsKKyAgICAgICAgdGhyb3cg
MTAwOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGFwcGVuZCgiYyIpOworICAgICAgICBmb3Ig
KHZhciBqID0gMDsgaiA8IDE7IGorKykgeworICAgICAgICAgICAgYXBwZW5kKCJ5Iik7CisgICAg
ICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGFwcGVuZCgiZCIpOworICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgICAgICBh
cHBlbmQoImUiKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGFwcGVuZCgiZiIpOworICAgICAgICB9CisgICAgICAgIGFwcGVuZCgieiIpOwor
ICAgIH0KKyAgICBhcHBlbmQoImciKTsKKyAgICByZXR1cm4gNzAwOworCit9LCAiYSxiLGMseSxk
LGUseiIsIE5vdGhpbmdSZXR1cm5lZCwgMTAwKTsKKwordGVzdCgoKSA9PiB7CisgICAgYXBwZW5k
KCJhIik7CisgICAgdHJ5IHsKKyAgICAgICAgYXBwZW5kKCJiIik7CisgICAgICAgIHJldHVybiAx
MDA7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgYXBwZW5kKCJjIik7CisgICAgICAgIGZvciAo
dmFyIGogPSAwOyBqIDwgMTsgaisrKSB7CisgICAgICAgICAgICBhcHBlbmQoInkiKTsKKyAgICAg
ICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgYXBwZW5kKCJkIik7CisgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgICAgIGFw
cGVuZCgiZSIpOworICAgICAgICAgICAgICAgIHRocm93IDIwMDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGFwcGVuZCgiZiIpOworICAgICAgICB9CisgICAgICAgIGFwcGVuZCgieiIpOwor
ICAgIH0KKyAgICBhcHBlbmQoImciKTsKKyAgICByZXR1cm4gNzAwOworCit9LCAiYSxiLGMseSxk
LGUiLCBOb3RoaW5nUmV0dXJuZWQsIDIwMCk7CisKK3Rlc3QoKCkgPT4geworICAgIGFwcGVuZCgi
YSIpOworICAgIHRyeSB7CisgICAgICAgIGFwcGVuZCgiYiIpOworICAgICAgICByZXR1cm4gMTAw
OworICAgIH0gZmluYWxseSB7CisgICAgICAgIGFwcGVuZCgiYyIpOworICAgICAgICBmb3IgKHZh
ciBqID0gMDsgaiA8IDE7IGorKykgeworICAgICAgICAgICAgYXBwZW5kKCJ5Iik7CisgICAgICAg
ICAgICB0cnkgeworICAgICAgICAgICAgICAgIGFwcGVuZCgiZCIpOworICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgICAgICBhcHBl
bmQoImUiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMjAwOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgYXBwZW5kKCJmIik7CisgICAgICAgIH0KKyAgICAgICAgYXBwZW5kKCJ6Iik7Cisg
ICAgfQorICAgIGFwcGVuZCgiZyIpOworICAgIHJldHVybiA3MDA7CisKK30sICJhLGIsYyx5LGQs
ZSIsIDIwMCwgTm90aGluZ1Rocm93bik7CisKK3Rlc3QoKCkgPT4geworICAgIGFwcGVuZCgiYSIp
OworICAgIHRyeSB7CisgICAgICAgIGFwcGVuZCgiYiIpOworICAgICAgICByZXR1cm4gMTAwOwor
ICAgIH0gZmluYWxseSB7CisgICAgICAgIGFwcGVuZCgiYyIpOworICAgICAgICBmb3IgKHZhciBq
ID0gMDsgaiA8IDE7IGorKykgeworICAgICAgICAgICAgYXBwZW5kKCJ5Iik7CisgICAgICAgICAg
ICB0cnkgeworICAgICAgICAgICAgICAgIGFwcGVuZCgiZCIpOworICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgICAgICBhcHBlbmQo
ImUiKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGFwcGVuZCgiZiIpOworICAgICAgICB9CisgICAgICAgIGFwcGVuZCgieiIpOworICAgIH0K
KyAgICBhcHBlbmQoImciKTsKKyAgICByZXR1cm4gNzAwOworCit9LCAiYSxiLGMseSxkLGUseiIs
IDEwMCwgTm90aGluZ1Rocm93bik7CisKIC8vIE5vIHRocm93IG9yIHJldHVybiBpbiBmb3Itb2Yg
bG9vcC4KIHRlc3QoKCkgPT4gewogICAgIGNsYXNzIFRlc3RJdGVyYXRvciB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0MjU4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMTAgQEAKKzIwMTktMDMt
MDYgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisgICAgICAgIEZpeCBpbmNvcnJl
Y3QgaGFuZGxpbmcgb2YgdHJ5LWZpbmFsbHkgY29tcGxldGlvbiB2YWx1ZXMuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTUxMzEKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzQ2MjIyMDc5PgorCisgICAgICAgIFJldmlld2VkIGJ5IFNhYW0gQmFyYXRp
IGFuZCBZdXN1a2UgU3V6dWtpLgorCisgICAgICAgIENvbnNpZGVyIHRoZSBmb2xsb3dpbmc6CisK
KyAgICAgICAgICAgIGZ1bmN0aW9uIGZvbygpIHsgICAgICAgICAgICAgICAgICAgICAgICAvLyBs
aW5lIDEKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
NDI7ICAgICAgICAgICAgICAgICAgICAgIC8vIGxpbmUgMworICAgICAgICAgICAgICAgIH0gZmlu
YWxseSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgMTsgaisrKSB7
ICAgLy8gbGluZSA1CisgICAgICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRocm93ICcnOyAgICAgICAgICAgICAgIC8vIGxpbmUgNworICAgICAg
ICAgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsgICAgICAgICAgICAgICAvLyBsaW5lIDkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxpbmUgMTEKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHZhciByZXN1bHQgPSBmb28oKTsKKworICAgICAgICBXaXRoIHRoZSBjdXJyZW50IChi
ZWZvcmUgZml4KSBjb2RlIGJhc2UsIHJlc3VsdCB3aWxsIGJlIHRoZSBleGNlcHRpb24gb2JqZWN0
IHRocm93bgorICAgICAgICBhdCBsaW5lIDcuICBUaGUgZXhwZWN0ZWQgcmVzdWx0IHNob3VsZCBi
ZSA0MiwgcmV0dXJuZWQgYXQgbGluZSAzLgorCisgICAgICAgIFRoZSBidWcgaXMgdGhhdCB3ZSB3
ZXJlIHByZXZpb3VzbHkgb25seSB1c2luZyBvbmUgc2V0IG9mIGNvbXBsZXRpb24gdHlwZSBhbmQK
KyAgICAgICAgdmFsdWUgcmVnaXN0ZXJzIGZvciB0aGUgZW50aXJlIGZ1bmN0aW9uLiAgVGhpcyBp
cyBpbmFkZXF1YXRlIGJlY2F1c2UgdGhlIG91dGVyCisgICAgICAgIHRyeS1maW5hbGx5IG5lZWRz
IHRvIHByZXNlcnZlIGl0cyBvd24gY29tcGxldGlvbiB0eXBlIGFuZCB2YWx1ZSAoeyBSZXR1cm4s
IDQyIH0KKyAgICAgICAgaW4gdGhpcyBjYXNlKSBpbiBvcmRlciB0byBiZSBhYmxlIHRvIGNvbXBs
ZXRlIGNvcnJlY3RseS4KKworICAgICAgICBPbmUgbWlnaHQgYmUgZGVjZWl2ZWQgaW50byB0aGlu
a2luZyB0aGF0IHRoZSBhYm92ZSBleGFtcGxlIHNob3VsZCBjb21wbGV0ZSB3aXRoCisgICAgICAg
IHRoZSBleGNlcHRpb24gdGhyb3duIGF0IGxpbmUgNy4gIEhvd2V2ZXIsIGFjY29yZGluZyB0byBT
ZWN0aW9uIDEzLjE1Ljggb2YgdGhlCisgICAgICAgIEVDTUFTY3JpcHQgc3BlYywgdGhlICdjb250
aW51ZScgaW4gdGhlIGZpbmFsbHkgYXQgbGluZSA5IGNvdW50cyBhcyBhbiBhYnJ1cHQKKyAgICAg
ICAgY29tcGxldGlvbi4gIEFzIGEgcmVzdWx0LCBpdCBvdmVycmlkZXMgdGhlIHRocm93IGZyb20g
bGluZSA3LiAgQWZ0ZXIgdGhlIGNvbnRpbnVlLAorICAgICAgICBleGVjdXRpb24gcmVzdW1lcyBh
dCB0aGUgdG9wIG9mIHRoZSBsb29wIGF0IGxpbmUgNSwgZm9sbG93ZWQgYnkgYSBub3JtYWwgY29t
cGxldGlvbgorICAgICAgICBhdCBsaW5lIDExLgorCisgICAgICAgIEFsc28gYWNjb3JkaW5nIHRv
IFNlY3Rpb24gMTMuMTUuOCwgZ2l2ZW4gdGhhdCB0aGUgY29tcGxldGlvbiB0eXBlIG9mIHRoZSBv
dXRlcgorICAgICAgICBmaW5hbGx5IGlzIG5vcm1hbCwgdGhlIHJlc3VsdGFudCBjb21wbGV0aW9u
IG9mIHRoZSBvdXRlciB0cnktZmluYWxseSBzaG91bGQgYmUKKyAgICAgICAgdGhlIGNvbXBsZXRp
b24gb2YgdGhlIG91dGVyIHRyeSBibG9jayBpLmUuIHsgUmV0dXJuLCA0MiB9LgorCisgICAgICAg
IFRoaXMgcGF0Y2ggbWFrZXMgdGhlIGZvbGxvd2luZyBjaGFuZ2VzOgorICAgICAgICAKKyAgICAg
ICAgMS4gRml4IGhhbmRsaW5nIG9mIGZpbmFsbHkgY29tcGxldGlvbiB0byB1c2UgYSB1bmlxdWUg
c2V0IG9mIGNvbXBsZXRpb24KKyAgICAgICAgICAgdHlwZSBhbmQgdmFsdWUgcmVnaXN0ZXJzIGZv
ciBlYWNoIEZpbmFsbHlDb250ZXh0LgorCisgICAgICAgIDIuIE1vdmUgdGhlIHNldHRpbmcgb2Yg
VGhyb3cgY29tcGxldGlvbiB0eXBlIHRvIHRoZSBvdXQgb2YgbGluZSBleGNlcHRpb24gaGFuZGxl
ci4KKyAgICAgICAgICAgVGhpcyBtYWtlcyB0aGUgbWFpbmxpbmUgY29kZSBzbGlnaHRseSBsZXNz
IGJyYW5jaHkuCisKKyAgICAgICAgMy4gSW50cm9kdWNlIGVtaXRPdXRPZkxpbmVDYXRjaEhhbmRs
ZXIoKSwgZW1pdE91dE9mTGluZUZpbmFsbHlIYW5kbGVyKCksIGFuZAorICAgICAgICAgICBlbWl0
T3V0T2ZMaW5lRXhjZXB0aW9uSGFuZGxlcigpIHRvIG1ha2UgaXQgY2xlYXJlciB0aGF0IHRoZXNl
IGFyZSBub3QgZW1pdHRpbmcKKyAgICAgICAgICAgYnl0ZWNvZGUgaW5saW5lLiAgQWxzbywgdGhl
c2UgbWFrZSBpdCBjbGVhcmVyIHdoZW4gd2UncmUgZW1pdHRpbmcgYSBoYW5kbGVyCisgICAgICAg
ICAgIGZvciBhIGNhdGNoIHZzIGEgZmluYWxseS4KKworICAgICAgICA0LiBBbGxvY2F0ZSB0aGUg
RmluYWxseUNvbnRleHQgb24gdGhlIHN0YWNrIGluc3RlYWQgb2YgYXMgYSBtZW1iZXIgb2YgdGhl
CisgICAgICAgICAgIGhlYXAgYWxsb2NhdGVkIENvbnRyb2xGbG93U2NvcGUuICBUaGlzIHNpbXBs
aWZpZXMgaXRzIGxpZmUtY3ljbGUgbWFuYWdlbWVudAorICAgICAgICAgICBhbmQgcmVkdWNlcyB0
aGUgYW1vdW50IG9mIG5lZWRlZCBjb3B5aW5nLgorCisgICAgICAgIDUuIFVwZGF0ZSBlbWl0Rmlu
YWxseUNvbXBsZXRpb24oKSB0byBwcm9wYWdhdGUgdGhlIGNvbXBsZXRpb24gdHlwZSBhbmQgdmFs
dWUgdG8KKyAgICAgICAgICAgdGhlIG91dGVyIEZpbmFsbHlDb250ZXh0IHdoZW4gbmVlZGVkLgor
CisgICAgICAgIDYuIEZpeCBlbWl0SnVtcElmKCkgdG8gdXNlIHRoZSByaWdodCBvcmRlciBvZiBv
cGVyYW5kcy4gIFByZXZpb3VzbHksIHdlIHdlcmUKKyAgICAgICAgICAgb25seSB1c2luZyBpdCB0
byBkbyBvcF9zdHJpY3RlcSBhbmQgb3BfbnN0cmljdGVxIGNvbXBhcmlzb25zLiAgU28sIHRoZSBv
cmRlcgorICAgICAgICAgICB3YXNuJ3QgaW1wb3J0YW50LiAgV2Ugbm93IHVzZSBpdCB0byBhbHNv
IGRvIG9wX2JlbG93ZXEgY29tcGFyaXNvbnMuICBIZW5jZSwKKyAgICAgICAgICAgdGhlIG9yZGVy
IG5lZWRzIHRvIGJlIGNvcnJlY3RlZC4KKworICAgICAgICA3LiBSZW1vdmUgdGhlIHVudXNlZCBD
b21wbGV0aW9uVHlwZTo6QnJlYWsgYW5kIENvbnRpbnVlLiAgVGhlc2UgYXJlIGVuY29kZWQgd2l0
aAorICAgICAgICAgICB0aGUganVtcElEcyBvZiB0aGUganVtcCB0YXJnZXRzIGluc3RlYWQuCisK
KyAgICAgICAgUmVsZXZhbnQgc3BlY2lmaWNhdGlvbnM6CisgICAgICAgIFNlY3Rpb24gMTMuMTUu
ODogaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi85LjAvaW5kZXgu
aHRtbCNzZWMtdHJ5LXN0YXRlbWVudC1ydW50aW1lLXNlbWFudGljcy1ldmFsdWF0aW9uCisgICAg
ICAgIFNlY3Rpb24gNi4zLjIuNDogaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9l
Y21hLTI2Mi85LjAvaW5kZXguaHRtbCNzZWMtdXBkYXRlZW1wdHkKKworICAgICAgICAqIGJ5dGVj
b21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkZpbmFsbHlDb250
ZXh0OjpGaW5hbGx5Q29udGV4dCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpn
ZW5lcmF0ZSk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVy
YXRvcik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNoRmluYWxseUNvbnRy
b2xGbG93U2NvcGUpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wRmluYWxs
eUNvbnRyb2xGbG93U2NvcGUpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1p
dE91dE9mTGluZUNhdGNoSGFuZGxlcik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0T3V0T2ZMaW5lRmluYWxseUhhbmRsZXIpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdE91dE9mTGluZUV4Y2VwdGlvbkhhbmRsZXIpOgorICAgICAgICAoSlNDOjpC
eXRlY29kZUdlbmVyYXRvcjo6ZW1pdEVudW1lcmF0aW9uKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNv
ZGVHZW5lcmF0b3I6OmVtaXRKdW1wVmlhRmluYWxseUlmTmVlZGVkKToKKyAgICAgICAgKEpTQzo6
Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRSZXR1cm5WaWFGaW5hbGx5SWZOZWVkZWQpOgorICAgICAg
ICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEZpbmFsbHlDb21wbGV0aW9uKToKKyAgICAg
ICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRKdW1wSWYpOgorICAgICAgICAoSlNDOjpC
eXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhdGNoKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Qnl0
ZWNvZGVHZW5lcmF0b3I6OmFsbG9jYXRlQ29tcGxldGlvblJlY29yZFJlZ2lzdGVycyk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpyZWxlYXNlQ29tcGxldGlvblJl
Y29yZFJlZ2lzdGVycyk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmg6CisgICAgICAgIChKU0M6OkZpbmFsbHlDb250ZXh0Ojpjb21wbGV0aW9uVHlw
ZVJlZ2lzdGVyIGNvbnN0KToKKyAgICAgICAgKEpTQzo6RmluYWxseUNvbnRleHQ6OmNvbXBsZXRp
b25WYWx1ZVJlZ2lzdGVyIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Q29udHJvbEZsb3dTY29wZTo6
Q29udHJvbEZsb3dTY29wZSk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
TG9hZCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpDb21wbGV0aW9uUmVjb3Jk
U2NvcGU6OkNvbXBsZXRpb25SZWNvcmRTY29wZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5
dGVjb2RlR2VuZXJhdG9yOjpDb21wbGV0aW9uUmVjb3JkU2NvcGU6On5Db21wbGV0aW9uUmVjb3Jk
U2NvcGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6Y29tcGxl
dGlvblR5cGVSZWdpc3RlciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2Rl
R2VuZXJhdG9yOjpjb21wbGV0aW9uVmFsdWVSZWdpc3RlciBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0U2V0Q29tcGxldGlvblR5cGUpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFNldENvbXBsZXRpb25W
YWx1ZSk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHA6
CisgICAgICAgIChKU0M6OlRyeU5vZGU6OmVtaXRCeXRlY29kZSk6CisKIDIwMTktMDMtMDYgIENo
cmlzdG9waGVyIFJlaWQgIDxjaHJpcy5yZWlkQHNvbnkuY29tPgogCiAgICAgICAgIEZvbGxvd3Vw
cyB0byAocjI0MjMwNik6IFVzZSBMb2NrSG9sZGVyIGluc3RlYWQgb2Ygc3RkOjpsb2NrX2d1YXJk
IG9uIFJlbW90ZSBJbnNwZWN0b3IgTG9ja3MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lv
biAyNDI1ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgzLDYgKzE4MywxNyBAQCB2b2lkIFZh
cmlhYmxlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvCiAgICAgICAgICIsIGlzTGV4aWNhbGx5
U2NvcGVkID0gIiwgbV9pc0xleGljYWxseVNjb3BlZCwgIn0iKTsKIH0KIAorRmluYWxseUNvbnRl
eHQ6OkZpbmFsbHlDb250ZXh0KEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIExhYmVsJiBm
aW5hbGx5TGFiZWwpCisgICAgOiBtX291dGVyQ29udGV4dChnZW5lcmF0b3IubV9jdXJyZW50Rmlu
YWxseUNvbnRleHQpCisgICAgLCBtX2ZpbmFsbHlMYWJlbCgmZmluYWxseUxhYmVsKQoreworICAg
IEFTU0VSVChtX2p1bXBzLmlzRW1wdHkoKSk7CisgICAgbV9jb21wbGV0aW9uLnR5cGVSZWdpc3Rl
ciA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKKyAgICBtX2NvbXBsZXRpb24udmFsdWVSZWdp
c3RlciA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKKyAgICBnZW5lcmF0b3IuZW1pdExvYWQo
Y29tcGxldGlvblR5cGVSZWdpc3RlcigpLCBDb21wbGV0aW9uVHlwZTo6Tm9ybWFsKTsKKyAgICBn
ZW5lcmF0b3IubW92ZUVtcHR5VmFsdWUoY29tcGxldGlvblZhbHVlUmVnaXN0ZXIoKSk7Cit9CisK
IFBhcnNlckVycm9yIEJ5dGVjb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZSgpCiB7CiAgICAgbV9jb2Rl
QmxvY2stPnNldFRoaXNSZWdpc3RlcihtX3RoaXNSZWdpc3Rlci52aXJ0dWFsUmVnaXN0ZXIoKSk7
CkBAIC0yNDUsMTQgKzI1NiwyMyBAQCBQYXJzZXJFcnJvciBCeXRlY29kZUdlbmVyYXRvcjo6Z2Vu
ZXJhdGUoCiAgICAgICAgIGVtaXRVbnJlYWNoYWJsZSgpOwogICAgIH0KIAotICAgIGZvciAoYXV0
byYgdHVwbGUgOiBtX2NhdGNoZXNUb0VtaXQpIHsKKyAgICBmb3IgKGF1dG8mIHR1cGxlIDogbV9l
eGNlcHRpb25IYW5kbGVyc1RvRW1pdCkgewogICAgICAgICBSZWY8TGFiZWw+IHJlYWxDYXRjaFRh
cmdldCA9IG5ld0xhYmVsKCk7CisgICAgICAgIFRyeURhdGEqIHRyeURhdGEgPSBzdGQ6OmdldDww
Pih0dXBsZSk7CisKICAgICAgICAgT3BDYXRjaDo6ZW1pdCh0aGlzLCBzdGQ6OmdldDwxPih0dXBs
ZSksIHN0ZDo6Z2V0PDI+KHR1cGxlKSk7CiAgICAgICAgIHJlYWxDYXRjaFRhcmdldC0+c2V0TG9j
YXRpb24oKnRoaXMsIG1fbGFzdEluc3RydWN0aW9uLm9mZnNldCgpKTsKKyAgICAgICAgaWYgKHN0
ZDo6Z2V0PDM+KHR1cGxlKS5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIFJlZ2lzdGVySUQgY29t
cGxldGlvblR5cGVSZWdpc3RlciB7IHN0ZDo6Z2V0PDM+KHR1cGxlKSB9OworICAgICAgICAgICAg
Q29tcGxldGlvblR5cGUgY29tcGxldGlvblR5cGUgPQorICAgICAgICAgICAgICAgIHRyeURhdGEt
PmhhbmRsZXJUeXBlID09IEhhbmRsZXJUeXBlOjpGaW5hbGx5IHx8IHRyeURhdGEtPmhhbmRsZXJU
eXBlID09IEhhbmRsZXJUeXBlOjpTeW50aGVzaXplZEZpbmFsbHkKKyAgICAgICAgICAgICAgICA/
IENvbXBsZXRpb25UeXBlOjpUaHJvdworICAgICAgICAgICAgICAgIDogQ29tcGxldGlvblR5cGU6
Ok5vcm1hbDsKKyAgICAgICAgICAgIGVtaXRMb2FkKCZjb21wbGV0aW9uVHlwZVJlZ2lzdGVyLCBj
b21wbGV0aW9uVHlwZSk7CisgICAgICAgIH0KICAgICAgICAgbV9jb2RlQmxvY2stPmFkZEp1bXBU
YXJnZXQobV9sYXN0SW5zdHJ1Y3Rpb24ub2Zmc2V0KCkpOwogCiAKLSAgICAgICAgVHJ5RGF0YSog
dHJ5RGF0YSA9IHN0ZDo6Z2V0PDA+KHR1cGxlKTsKICAgICAgICAgZW1pdEp1bXAodHJ5RGF0YS0+
dGFyZ2V0LmdldCgpKTsKICAgICAgICAgdHJ5RGF0YS0+dGFyZ2V0ID0gV1RGTW92ZShyZWFsQ2F0
Y2hUYXJnZXQpOwogICAgIH0KQEAgLTc4OCw4ICs4MDgsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6
Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mCiAgICAgICAgIHBvcFRyeSh0cnlGb3JtYWxQYXJhbWV0ZXJz
RGF0YSwgY2F0Y2hMYWJlbC5nZXQoKSk7CiAKICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHRo
cm93blZhbHVlID0gbmV3VGVtcG9yYXJ5KCk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIHVudXNlZCA9
IG5ld1RlbXBvcmFyeSgpOwotICAgICAgICBlbWl0Q2F0Y2godW51c2VkLCB0aHJvd25WYWx1ZS5n
ZXQoKSwgdHJ5Rm9ybWFsUGFyYW1ldGVyc0RhdGEpOworICAgICAgICBlbWl0T3V0T2ZMaW5lQ2F0
Y2hIYW5kbGVyKHRocm93blZhbHVlLmdldCgpLCBudWxscHRyLCB0cnlGb3JtYWxQYXJhbWV0ZXJz
RGF0YSk7CiAKICAgICAgICAgLy8gcmV0dXJuIHByb21pc2VDYXBhYmlsaXR5LkByZWplY3QodGhy
b3duVmFsdWUpCiAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZWplY3QgPSBlbWl0R2V0QnlJ
ZChuZXdUZW1wb3JhcnkoKSwgcHJvbWlzZUNhcGFiaWxpdHlSZWdpc3RlcigpLCBtX3ZtLT5wcm9w
ZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5yZWplY3RQcml2YXRlTmFtZSgpKTsKQEAgLTM1MTMs
MTcgKzM1MzIsMTYgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFdpbGxMZWF2ZUNhbAog
ICAgIGVtaXREZWJ1Z0hvb2soV2lsbExlYXZlQ2FsbEZyYW1lLCBtX3Njb3BlTm9kZS0+bGFzdExp
bmUoKSwgbV9zY29wZU5vZGUtPnN0YXJ0T2Zmc2V0KCksIG1fc2NvcGVOb2RlLT5saW5lU3RhcnRP
ZmZzZXQoKSk7CiB9CiAKLUZpbmFsbHlDb250ZXh0KiBCeXRlY29kZUdlbmVyYXRvcjo6cHVzaEZp
bmFsbHlDb250cm9sRmxvd1Njb3BlKExhYmVsJiBmaW5hbGx5TGFiZWwpCit2b2lkIEJ5dGVjb2Rl
R2VuZXJhdG9yOjpwdXNoRmluYWxseUNvbnRyb2xGbG93U2NvcGUoRmluYWxseUNvbnRleHQmIGZp
bmFsbHlDb250ZXh0KQogewotICAgIENvbnRyb2xGbG93U2NvcGUgc2NvcGUoQ29udHJvbEZsb3dT
Y29wZTo6RmluYWxseSwgY3VycmVudExleGljYWxTY29wZUluZGV4KCksIEZpbmFsbHlDb250ZXh0
KG1fY3VycmVudEZpbmFsbHlDb250ZXh0LCBmaW5hbGx5TGFiZWwpKTsKKyAgICBDb250cm9sRmxv
d1Njb3BlIHNjb3BlKENvbnRyb2xGbG93U2NvcGU6OkZpbmFsbHksIGN1cnJlbnRMZXhpY2FsU2Nv
cGVJbmRleCgpLCAmZmluYWxseUNvbnRleHQpOwogICAgIG1fY29udHJvbEZsb3dTY29wZVN0YWNr
LmFwcGVuZChXVEZNb3ZlKHNjb3BlKSk7CiAKICAgICBtX2ZpbmFsbHlEZXB0aCsrOwotICAgIG1f
Y3VycmVudEZpbmFsbHlDb250ZXh0ID0gJm1fY29udHJvbEZsb3dTY29wZVN0YWNrLmxhc3QoKS5m
aW5hbGx5Q29udGV4dDsKLSAgICByZXR1cm4gbV9jdXJyZW50RmluYWxseUNvbnRleHQ7CisgICAg
bV9jdXJyZW50RmluYWxseUNvbnRleHQgPSAmZmluYWxseUNvbnRleHQ7CiB9CiAKLUZpbmFsbHlD
b250ZXh0IEJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BGaW5hbGx5Q29udHJvbEZsb3dTY29wZSgpCit2
b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BGaW5hbGx5Q29udHJvbEZsb3dTY29wZSgpCiB7CiAg
ICAgQVNTRVJUKG1fY29udHJvbEZsb3dTY29wZVN0YWNrLnNpemUoKSk7CiAgICAgQVNTRVJUKG1f
Y29udHJvbEZsb3dTY29wZVN0YWNrLmxhc3QoKS5pc0ZpbmFsbHlTY29wZSgpKTsKQEAgLTM1MzEs
NyArMzU0OSw3IEBAIEZpbmFsbHlDb250ZXh0IEJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BGaW4KICAg
ICBBU1NFUlQobV9jdXJyZW50RmluYWxseUNvbnRleHQpOwogICAgIG1fY3VycmVudEZpbmFsbHlD
b250ZXh0ID0gbV9jdXJyZW50RmluYWxseUNvbnRleHQtPm91dGVyQ29udGV4dCgpOwogICAgIG1f
ZmluYWxseURlcHRoLS07Ci0gICAgcmV0dXJuIG1fY29udHJvbEZsb3dTY29wZVN0YWNrLnRha2VM
YXN0KCkuZmluYWxseUNvbnRleHQ7CisgICAgbV9jb250cm9sRmxvd1Njb3BlU3RhY2sucmVtb3Zl
TGFzdCgpOwogfQogCiBMYWJlbFNjb3BlKiBCeXRlY29kZUdlbmVyYXRvcjo6YnJlYWtUYXJnZXQo
Y29uc3QgSWRlbnRpZmllciYgbmFtZSkKQEAgLTM2NDIsOSArMzY2MCwyMyBAQCB2b2lkIEJ5dGVj
b2RlR2VuZXJhdG9yOjpwb3BUcnkoVHJ5RGF0YSogCiAgICAgbV90cnlDb250ZXh0U3RhY2sucmVt
b3ZlTGFzdCgpOwogfQogCi12b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q2F0Y2goUmVnaXN0
ZXJJRCogZXhjZXB0aW9uUmVnaXN0ZXIsIFJlZ2lzdGVySUQqIHRocm93blZhbHVlUmVnaXN0ZXIs
IFRyeURhdGEqIGRhdGEpCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0T3V0T2ZMaW5lQ2F0
Y2hIYW5kbGVyKFJlZ2lzdGVySUQqIHRocm93blZhbHVlUmVnaXN0ZXIsIFJlZ2lzdGVySUQqIGNv
bXBsZXRpb25UeXBlUmVnaXN0ZXIsIFRyeURhdGEqIGRhdGEpCiB7Ci0gICAgbV9jYXRjaGVzVG9F
bWl0LmFwcGVuZChDYXRjaEVudHJ5IHsgZGF0YSwgZXhjZXB0aW9uUmVnaXN0ZXIsIHRocm93blZh
bHVlUmVnaXN0ZXIgfSk7CisgICAgUmVnaXN0ZXJJRCogdW51c2VkID0gbmV3VGVtcG9yYXJ5KCk7
CisgICAgZW1pdE91dE9mTGluZUV4Y2VwdGlvbkhhbmRsZXIodW51c2VkLCB0aHJvd25WYWx1ZVJl
Z2lzdGVyLCBjb21wbGV0aW9uVHlwZVJlZ2lzdGVyLCBkYXRhKTsKK30KKwordm9pZCBCeXRlY29k
ZUdlbmVyYXRvcjo6ZW1pdE91dE9mTGluZUZpbmFsbHlIYW5kbGVyKFJlZ2lzdGVySUQqIGV4Y2Vw
dGlvblJlZ2lzdGVyLCBSZWdpc3RlcklEKiBjb21wbGV0aW9uVHlwZVJlZ2lzdGVyLCBUcnlEYXRh
KiBkYXRhKQoreworICAgIFJlZ2lzdGVySUQqIHVudXNlZCA9IG5ld1RlbXBvcmFyeSgpOworICAg
IEFTU0VSVChjb21wbGV0aW9uVHlwZVJlZ2lzdGVyKTsKKyAgICBlbWl0T3V0T2ZMaW5lRXhjZXB0
aW9uSGFuZGxlcihleGNlcHRpb25SZWdpc3RlciwgdW51c2VkLCBjb21wbGV0aW9uVHlwZVJlZ2lz
dGVyLCBkYXRhKTsKK30KKwordm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE91dE9mTGluZUV4
Y2VwdGlvbkhhbmRsZXIoUmVnaXN0ZXJJRCogZXhjZXB0aW9uUmVnaXN0ZXIsIFJlZ2lzdGVySUQq
IHRocm93blZhbHVlUmVnaXN0ZXIsIFJlZ2lzdGVySUQqIGNvbXBsZXRpb25UeXBlUmVnaXN0ZXIs
IFRyeURhdGEqIGRhdGEpCit7CisgICAgVmlydHVhbFJlZ2lzdGVyIGNvbXBsZXRpb25UeXBlVmly
dHVhbFJlZ2lzdGVyID0gY29tcGxldGlvblR5cGVSZWdpc3RlciA/IGNvbXBsZXRpb25UeXBlUmVn
aXN0ZXIgOiBWaXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICBtX2V4Y2VwdGlvbkhhbmRsZXJzVG9FbWl0
LmFwcGVuZChDYXRjaEVudHJ5IHsgZGF0YSwgZXhjZXB0aW9uUmVnaXN0ZXIsIHRocm93blZhbHVl
UmVnaXN0ZXIsIGNvbXBsZXRpb25UeXBlVmlydHVhbFJlZ2lzdGVyIH0pOwogfQogCiB2b2lkIEJ5
dGVjb2RlR2VuZXJhdG9yOjpyZXN0b3JlU2NvcGVSZWdpc3RlcihpbnQgbGV4aWNhbFNjb3BlSW5k
ZXgpCkBAIC0zOTU5LDggKzM5OTEsNiBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RW51
bWVyYXRpb24oCiAgICAgYm9vbCBpc0ZvckF3YWl0ID0gZm9yTG9vcE5vZGUgPyBmb3JMb29wTm9k
ZS0+aXNGb3JBd2FpdCgpIDogZmFsc2U7CiAgICAgQVNTRVJUKCFpc0ZvckF3YWl0IHx8IChpc0Zv
ckF3YWl0ICYmIGlzQXN5bmNGdW5jdGlvblBhcnNlTW9kZShwYXJzZU1vZGUoKSkpKTsKIAotICAg
IENvbXBsZXRpb25SZWNvcmRTY29wZSBjb21wbGV0aW9uUmVjb3JkU2NvcGUoKnRoaXMpOwotCiAg
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHN1YmplY3QgPSBuZXdUZW1wb3JhcnkoKTsKICAgICBlbWl0
Tm9kZShzdWJqZWN0LmdldCgpLCBzdWJqZWN0Tm9kZSk7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IGl0ZXJhdG9yID0gaXNGb3JBd2FpdCA/IGVtaXRHZXRBc3luY0l0ZXJhdG9yKHN1YmplY3QuZ2V0
KCksIG5vZGUpIDogZW1pdEdldEl0ZXJhdG9yKHN1YmplY3QuZ2V0KCksIG5vZGUpOwpAQCAtMzk3
NCw3ICs0MDA0LDggQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEVudW1lcmF0aW9uKAog
ICAgIFJlZjxMYWJlbD4gZW5kQ2F0Y2hMYWJlbCA9IG5ld0xhYmVsKCk7CiAKICAgICAvLyBSZWZQ
dHI8UmVnaXN0ZXI+IGl0ZXJhdG9yJ3MgbGlmZXRpbWUgbXVzdCBiZSBsb25nZXIgdGhhbiBJdGVy
YXRvckNsb3NlQ29udGV4dC4KLSAgICBGaW5hbGx5Q29udGV4dCogZmluYWxseUNvbnRleHQgPSBw
dXNoRmluYWxseUNvbnRyb2xGbG93U2NvcGUoZmluYWxseUxhYmVsLmdldCgpKTsKKyAgICBGaW5h
bGx5Q29udGV4dCBmaW5hbGx5Q29udGV4dCgqdGhpcywgZmluYWxseUxhYmVsLmdldCgpKTsKKyAg
ICBwdXNoRmluYWxseUNvbnRyb2xGbG93U2NvcGUoZmluYWxseUNvbnRleHQpOwogCiAgICAgewog
ICAgICAgICBSZWY8TGFiZWxTY29wZT4gc2NvcGUgPSBuZXdMYWJlbFNjb3BlKExhYmVsU2NvcGU6
Okxvb3ApOwpAQCAtNDAwMCwxNiArNDAzMSwxNSBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpl
bWl0RW51bWVyYXRpb24oCiAKICAgICAgICAgICAgIFJlZjxMYWJlbD4gZmluYWxseUJvZHlMYWJl
bCA9IG5ld0xhYmVsKCk7CiAgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZmluYWxseUV4
Y2VwdGlvblJlZ2lzdGVyID0gbmV3VGVtcG9yYXJ5KCk7Ci0gICAgICAgICAgICBSZWdpc3RlcklE
KiB1bnVzZWQgPSBuZXdUZW1wb3JhcnkoKTsKIAotICAgICAgICAgICAgZW1pdENhdGNoKGNvbXBs
ZXRpb25WYWx1ZVJlZ2lzdGVyKCksIHVudXNlZCwgdHJ5RGF0YSk7Ci0gICAgICAgICAgICBlbWl0
U2V0Q29tcGxldGlvblR5cGUoQ29tcGxldGlvblR5cGU6OlRocm93KTsKLSAgICAgICAgICAgIG1v
dmUoZmluYWxseUV4Y2VwdGlvblJlZ2lzdGVyLmdldCgpLCBjb21wbGV0aW9uVmFsdWVSZWdpc3Rl
cigpKTsKKyAgICAgICAgICAgIGVtaXRPdXRPZkxpbmVGaW5hbGx5SGFuZGxlcihmaW5hbGx5Q29u
dGV4dC5jb21wbGV0aW9uVmFsdWVSZWdpc3RlcigpLCBmaW5hbGx5Q29udGV4dC5jb21wbGV0aW9u
VHlwZVJlZ2lzdGVyKCksIHRyeURhdGEpOworICAgICAgICAgICAgbW92ZShmaW5hbGx5RXhjZXB0
aW9uUmVnaXN0ZXIuZ2V0KCksIGZpbmFsbHlDb250ZXh0LmNvbXBsZXRpb25WYWx1ZVJlZ2lzdGVy
KCkpOwogICAgICAgICAgICAgZW1pdEp1bXAoZmluYWxseUJvZHlMYWJlbC5nZXQoKSk7CiAKICAg
ICAgICAgICAgIGVtaXRMYWJlbChmaW5hbGx5TGFiZWwuZ2V0KCkpOwogICAgICAgICAgICAgbW92
ZUVtcHR5VmFsdWUoZmluYWxseUV4Y2VwdGlvblJlZ2lzdGVyLmdldCgpKTsKIAorICAgICAgICAg
ICAgLy8gRmluYWxseSBmYWxsIHRocm91Z2ggY2FzZS4KICAgICAgICAgICAgIGVtaXRMYWJlbChm
aW5hbGx5Qm9keUxhYmVsLmdldCgpKTsKICAgICAgICAgICAgIHJlc3RvcmVTY29wZVJlZ2lzdGVy
KCk7CiAKQEAgLTQwMzMsNyArNDA2Myw3IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRF
bnVtZXJhdGlvbigKICAgICAgICAgICAgIGVtaXRUaHJvd1R5cGVFcnJvcigiSXRlcmF0b3IgcmVz
dWx0IGludGVyZmFjZSBpcyBub3QgYW4gb2JqZWN0LiJfcyk7CiAKICAgICAgICAgICAgIGVtaXRM
YWJlbChmaW5hbGx5RG9uZS5nZXQoKSk7Ci0gICAgICAgICAgICBlbWl0RmluYWxseUNvbXBsZXRp
b24oKmZpbmFsbHlDb250ZXh0LCBjb21wbGV0aW9uVHlwZVJlZ2lzdGVyKCksIGVuZENhdGNoTGFi
ZWwuZ2V0KCkpOworICAgICAgICAgICAgZW1pdEZpbmFsbHlDb21wbGV0aW9uKGZpbmFsbHlDb250
ZXh0LCBlbmRDYXRjaExhYmVsLmdldCgpKTsKIAogICAgICAgICAgICAgcG9wVHJ5KHJldHVybkNh
bGxUcnlEYXRhLCBmaW5hbGx5RG9uZS5nZXQoKSk7CiAKQEAgLTQwNDQsOSArNDA3NCw5IEBAIHZv
aWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRFbnVtZXJhdGlvbigKICAgICAgICAgICAgIC8vIHRo
ZSBmaW5hbGx5IGJsb2NrLiBPdGhlcndpc2UsIHdlJ2xsIGxldCBhbnkgbmV3IGV4Y2VwdGlvbiBw
YXNzIHRocm91Z2guCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgZW1pdExhYmVsKGNh
dGNoTGFiZWwuZ2V0KCkpOworCiAgICAgICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGV4
Y2VwdGlvblJlZ2lzdGVyID0gbmV3VGVtcG9yYXJ5KCk7Ci0gICAgICAgICAgICAgICAgUmVnaXN0
ZXJJRCogdW51c2VkID0gbmV3VGVtcG9yYXJ5KCk7Ci0gICAgICAgICAgICAgICAgZW1pdENhdGNo
KGV4Y2VwdGlvblJlZ2lzdGVyLmdldCgpLCB1bnVzZWQsIHJldHVybkNhbGxUcnlEYXRhKTsKKyAg
ICAgICAgICAgICAgICBlbWl0T3V0T2ZMaW5lRmluYWxseUhhbmRsZXIoZXhjZXB0aW9uUmVnaXN0
ZXIuZ2V0KCksIGZpbmFsbHlDb250ZXh0LmNvbXBsZXRpb25UeXBlUmVnaXN0ZXIoKSwgcmV0dXJu
Q2FsbFRyeURhdGEpOwogICAgICAgICAgICAgICAgIC8vIFNpbmNlIHRoaXMgaXMgYSBzeW50aGVz
aXplZCBjYXRjaCBibG9jayBhbmQgd2UncmUgZ3VhcmFudGVlZCB0byBuZXZlciBuZWVkCiAgICAg
ICAgICAgICAgICAgLy8gdG8gcmVzb2x2ZSBhbnkgc3ltYm9scyBmcm9tIHRoZSBzY29wZSwgd2Ug
Y2FuIHNraXAgcmVzdG9yaW5nIHRoZSBzY29wZQogICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVy
IGhlcmUuCkBAIC00Njg1LDcgKzQ3MTUsNyBAQCBib29sIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
SnVtcFZpYUZpbmFsCiAgICAgd2hpbGUgKG51bWJlck9mU2NvcGVzVG9DaGVja0ZvckZpbmFsbHkt
LSkgewogICAgICAgICBDb250cm9sRmxvd1Njb3BlKiBzY29wZSA9ICZtX2NvbnRyb2xGbG93U2Nv
cGVTdGFja1tzY29wZUluZGV4LS1dOwogICAgICAgICBpZiAoc2NvcGUtPmlzRmluYWxseVNjb3Bl
KCkpIHsKLSAgICAgICAgICAgIEZpbmFsbHlDb250ZXh0KiBmaW5hbGx5Q29udGV4dCA9ICZzY29w
ZS0+ZmluYWxseUNvbnRleHQ7CisgICAgICAgICAgICBGaW5hbGx5Q29udGV4dCogZmluYWxseUNv
bnRleHQgPSBzY29wZS0+ZmluYWxseUNvbnRleHQ7CiAgICAgICAgICAgICBpZiAoIWlubmVybW9z
dEZpbmFsbHlDb250ZXh0KQogICAgICAgICAgICAgICAgIGlubmVybW9zdEZpbmFsbHlDb250ZXh0
ID0gZmluYWxseUNvbnRleHQ7CiAgICAgICAgICAgICBvdXRlcm1vc3RGaW5hbGx5Q29udGV4dCA9
IGZpbmFsbHlDb250ZXh0OwpAQCAtNDY5OSw3ICs0NzI5LDcgQEAgYm9vbCBCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdEp1bXBWaWFGaW5hbAogICAgIGludCBsZXhpY2FsU2NvcGVJbmRleCA9IGxhYmVs
U2NvcGVEZXB0aFRvTGV4aWNhbFNjb3BlSW5kZXgodGFyZ2V0TGFiZWxTY29wZURlcHRoKTsKICAg
ICBvdXRlcm1vc3RGaW5hbGx5Q29udGV4dC0+cmVnaXN0ZXJKdW1wKGp1bXBJRCwgbGV4aWNhbFNj
b3BlSW5kZXgsIGp1bXBUYXJnZXQpOwogCi0gICAgZW1pdFNldENvbXBsZXRpb25UeXBlKGp1bXBJ
RCk7CisgICAgZW1pdExvYWQoaW5uZXJtb3N0RmluYWxseUNvbnRleHQtPmNvbXBsZXRpb25UeXBl
UmVnaXN0ZXIoKSwganVtcElEKTsKICAgICBlbWl0SnVtcCgqaW5uZXJtb3N0RmluYWxseUNvbnRl
eHQtPmZpbmFsbHlMYWJlbCgpKTsKICAgICByZXR1cm4gdHJ1ZTsgLy8gV2UnbGwgYmUganVtcGlu
ZyB0byBhIGZpbmFsbHkgYmxvY2suCiB9CkBAIC00NzE1LDcgKzQ3NDUsNyBAQCBib29sIEJ5dGVj
b2RlR2VuZXJhdG9yOjplbWl0UmV0dXJuVmlhRmluCiAgICAgICAgIHNpemVfdCBzY29wZUluZGV4
ID0gLS1udW1iZXJPZlNjb3Blc1RvQ2hlY2tGb3JGaW5hbGx5OwogICAgICAgICBDb250cm9sRmxv
d1Njb3BlKiBzY29wZSA9ICZtX2NvbnRyb2xGbG93U2NvcGVTdGFja1tzY29wZUluZGV4XTsKICAg
ICAgICAgaWYgKHNjb3BlLT5pc0ZpbmFsbHlTY29wZSgpKSB7Ci0gICAgICAgICAgICBGaW5hbGx5
Q29udGV4dCogZmluYWxseUNvbnRleHQgPSAmc2NvcGUtPmZpbmFsbHlDb250ZXh0OworICAgICAg
ICAgICAgRmluYWxseUNvbnRleHQqIGZpbmFsbHlDb250ZXh0ID0gc2NvcGUtPmZpbmFsbHlDb250
ZXh0OwogICAgICAgICAgICAgaWYgKCFpbm5lcm1vc3RGaW5hbGx5Q29udGV4dCkKICAgICAgICAg
ICAgICAgICBpbm5lcm1vc3RGaW5hbGx5Q29udGV4dCA9IGZpbmFsbHlDb250ZXh0OwogICAgICAg
ICAgICAgZmluYWxseUNvbnRleHQtPnNldEhhbmRsZXNSZXR1cm5zKCk7CkBAIC00NzI0LDc2ICs0
NzU0LDk1IEBAIGJvb2wgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRSZXR1cm5WaWFGaW4KICAgICBp
ZiAoIWlubmVybW9zdEZpbmFsbHlDb250ZXh0KQogICAgICAgICByZXR1cm4gZmFsc2U7IC8vIE5v
IGZpbmFsbHlzIHRvIHRocmVhZCB0aHJvdWdoLgogCi0gICAgZW1pdFNldENvbXBsZXRpb25UeXBl
KENvbXBsZXRpb25UeXBlOjpSZXR1cm4pOwotICAgIGVtaXRTZXRDb21wbGV0aW9uVmFsdWUocmV0
dXJuUmVnaXN0ZXIpOworICAgIGVtaXRMb2FkKGlubmVybW9zdEZpbmFsbHlDb250ZXh0LT5jb21w
bGV0aW9uVHlwZVJlZ2lzdGVyKCksIENvbXBsZXRpb25UeXBlOjpSZXR1cm4pOworICAgIG1vdmUo
aW5uZXJtb3N0RmluYWxseUNvbnRleHQtPmNvbXBsZXRpb25WYWx1ZVJlZ2lzdGVyKCksIHJldHVy
blJlZ2lzdGVyKTsKICAgICBlbWl0SnVtcCgqaW5uZXJtb3N0RmluYWxseUNvbnRleHQtPmZpbmFs
bHlMYWJlbCgpKTsKICAgICByZXR1cm4gdHJ1ZTsgLy8gV2UnbGwgYmUganVtcGluZyB0byBhIGZp
bmFsbHkgYmxvY2suCiB9CiAKLXZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRGaW5hbGx5Q29t
cGxldGlvbihGaW5hbGx5Q29udGV4dCYgY29udGV4dCwgUmVnaXN0ZXJJRCogY29tcGxldGlvblR5
cGVSZWdpc3RlciwgTGFiZWwmIG5vcm1hbENvbXBsZXRpb25MYWJlbCkKK3ZvaWQgQnl0ZWNvZGVH
ZW5lcmF0b3I6OmVtaXRGaW5hbGx5Q29tcGxldGlvbihGaW5hbGx5Q29udGV4dCYgY29udGV4dCwg
TGFiZWwmIG5vcm1hbENvbXBsZXRpb25MYWJlbCkKIHsKICAgICBpZiAoY29udGV4dC5udW1iZXJP
ZkJyZWFrc09yQ29udGludWVzKCkgfHwgY29udGV4dC5oYW5kbGVzUmV0dXJucygpKSB7Ci0gICAg
ICAgIGVtaXRKdW1wSWY8T3BTdHJpY3RlcT4oY29tcGxldGlvblR5cGVSZWdpc3RlciwgQ29tcGxl
dGlvblR5cGU6Ok5vcm1hbCwgbm9ybWFsQ29tcGxldGlvbkxhYmVsKTsKKyAgICAgICAgZW1pdEp1
bXBJZjxPcFN0cmljdGVxPihjb250ZXh0LmNvbXBsZXRpb25UeXBlUmVnaXN0ZXIoKSwgQ29tcGxl
dGlvblR5cGU6Ok5vcm1hbCwgbm9ybWFsQ29tcGxldGlvbkxhYmVsKTsKIAogICAgICAgICBGaW5h
bGx5Q29udGV4dCogb3V0ZXJDb250ZXh0ID0gY29udGV4dC5vdXRlckNvbnRleHQoKTsKIAogICAg
ICAgICBzaXplX3QgbnVtYmVyT2ZKdW1wcyA9IGNvbnRleHQubnVtYmVyT2ZKdW1wcygpOwogICAg
ICAgICBBU1NFUlQob3V0ZXJDb250ZXh0IHx8IG51bWJlck9mSnVtcHMgPT0gY29udGV4dC5udW1i
ZXJPZkJyZWFrc09yQ29udGludWVzKCkpOwogCisgICAgICAgIC8vIEhhbmRsZSBCcmVhayBvciBD
b250aW51ZSBjb21wbGV0aW9ucyB0aGF0IGp1bXBzIGludG8gdGhpcyBGaW5hbGx5Q29udGV4dC4K
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZkp1bXBzOyBpKyspIHsKICAg
ICAgICAgICAgIFJlZjxMYWJlbD4gbmV4dExhYmVsID0gbmV3TGFiZWwoKTsKICAgICAgICAgICAg
IGF1dG8mIGp1bXAgPSBjb250ZXh0Lmp1bXBzKGkpOwotICAgICAgICAgICAgZW1pdEp1bXBJZjxP
cE5zdHJpY3RlcT4oY29tcGxldGlvblR5cGVSZWdpc3RlciwganVtcC5qdW1wSUQsIG5leHRMYWJl
bC5nZXQoKSk7CisgICAgICAgICAgICBlbWl0SnVtcElmPE9wTnN0cmljdGVxPihjb250ZXh0LmNv
bXBsZXRpb25UeXBlUmVnaXN0ZXIoKSwganVtcC5qdW1wSUQsIG5leHRMYWJlbC5nZXQoKSk7CiAK
KyAgICAgICAgICAgIC8vIEFmdGVyIGEgQnJlYWsgb3IgQ29udGludWUsIHdlIHJlc3VtZSBleGVj
dXRpb24gYW5kIG1heSBldmVudHVhbGx5IGNvbXBsZXRlIHdpdGgKKyAgICAgICAgICAgIC8vIE5v
cm1hbCBjb21wbGV0aW9uICh1bmxlc3MgYWJydXB0bHkgY29tcGxldGVkIGFnYWluKS4gU28sIHBy
ZS1lbXB0aXZlbHkgc2V0IHRoZQorICAgICAgICAgICAgLy8gY29tcGxldGlvbiB0eXBlIHRvIE5v
cm1hbC4gV2UgY2FuIGFsc28gc2V0IHRoZSBjb21wbGV0aW9uIHZhbHVlIHRvIHVuZGVmaW5lZCwK
KyAgICAgICAgICAgIC8vIGJ1dCBpdCB3aWxsIG5ldmVyIGJlIHVzZWQgZm9yIG5vcm1hbCBjb21w
bGV0aW9uIGFueXdheS4gU28sIHdlJ2xsIHNraXAgc2V0dGluZyBpdC4KICAgICAgICAgICAgIHJl
c3RvcmVTY29wZVJlZ2lzdGVyKGp1bXAudGFyZ2V0TGV4aWNhbFNjb3BlSW5kZXgpOwotICAgICAg
ICAgICAgZW1pdFNldENvbXBsZXRpb25UeXBlKENvbXBsZXRpb25UeXBlOjpOb3JtYWwpOworICAg
ICAgICAgICAgZW1pdExvYWQoY29udGV4dC5jb21wbGV0aW9uVHlwZVJlZ2lzdGVyKCksIENvbXBs
ZXRpb25UeXBlOjpOb3JtYWwpOwogICAgICAgICAgICAgZW1pdEp1bXAoanVtcC50YXJnZXRMYWJl
bC5nZXQoKSk7CiAKICAgICAgICAgICAgIGVtaXRMYWJlbChuZXh0TGFiZWwuZ2V0KCkpOwogICAg
ICAgICB9CiAKKyAgICAgICAgLy8gSGFuZGxlIGNvbXBsZXRpb25zIHRoYXQgdGFrZSB1cyBvdXQg
b2YgdGhpcyBGaW5hbGx5Q29udGV4dC4KICAgICAgICAgaWYgKG91dGVyQ29udGV4dCkgewotICAg
ICAgICAgICAgLy8gV2UgYXJlIG5vdCB0aGUgb3V0ZXJtb3N0IGZpbmFsbHkuCisgICAgICAgICAg
ICBpZiAoY29udGV4dC5oYW5kbGVzUmV0dXJucygpKSB7CisgICAgICAgICAgICAgICAgUmVmPExh
YmVsPiBpc05vdFJldHVybkxhYmVsID0gbmV3TGFiZWwoKTsKKyAgICAgICAgICAgICAgICBlbWl0
SnVtcElmPE9wTnN0cmljdGVxPihjb250ZXh0LmNvbXBsZXRpb25UeXBlUmVnaXN0ZXIoKSwgQ29t
cGxldGlvblR5cGU6OlJldHVybiwgaXNOb3RSZXR1cm5MYWJlbC5nZXQoKSk7CisKKyAgICAgICAg
ICAgICAgICAvLyBGb3IgUmV0dXJuIGNvbXBsZXRpb24sIHdlIG5lZWQgdG8gcGFzcyB0aGUgY29t
cGxldGlvbiB0eXBlIGFuZCB2YWx1ZSB0bworICAgICAgICAgICAgICAgIC8vIHRoZSBvdXRlciBm
aW5hbGx5IHNvIHRoYXQgaXQgY2FuIHJldHVybiB3aGVuIGl0J3MgZG9uZSAodW5sZXNzIGludGVy
cnVwdGVkCisgICAgICAgICAgICAgICAgLy8gYnkgYW5vdGhlciBhYnJ1cHQgY29tcGxldGlvbiku
CisgICAgICAgICAgICAgICAgbW92ZShvdXRlckNvbnRleHQtPmNvbXBsZXRpb25UeXBlUmVnaXN0
ZXIoKSwgY29udGV4dC5jb21wbGV0aW9uVHlwZVJlZ2lzdGVyKCkpOworICAgICAgICAgICAgICAg
IG1vdmUob3V0ZXJDb250ZXh0LT5jb21wbGV0aW9uVmFsdWVSZWdpc3RlcigpLCBjb250ZXh0LmNv
bXBsZXRpb25WYWx1ZVJlZ2lzdGVyKCkpOworICAgICAgICAgICAgICAgIGVtaXRKdW1wKCpvdXRl
ckNvbnRleHQtPmZpbmFsbHlMYWJlbCgpKTsKKworICAgICAgICAgICAgICAgIGVtaXRMYWJlbChp
c05vdFJldHVybkxhYmVsLmdldCgpKTsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgYm9v
bCBoYXNCcmVha3NPckNvbnRpbnVlc05vdENvdmVyZWRCeUp1bXBzID0gY29udGV4dC5udW1iZXJP
ZkJyZWFrc09yQ29udGludWVzKCkgPiBudW1iZXJPZkp1bXBzOwotICAgICAgICAgICAgaWYgKGhh
c0JyZWFrc09yQ29udGludWVzTm90Q292ZXJlZEJ5SnVtcHMgfHwgY29udGV4dC5oYW5kbGVzUmV0
dXJucygpKQotICAgICAgICAgICAgICAgIGVtaXRKdW1wSWY8T3BOc3RyaWN0ZXE+KGNvbXBsZXRp
b25UeXBlUmVnaXN0ZXIsIENvbXBsZXRpb25UeXBlOjpUaHJvdywgKm91dGVyQ29udGV4dC0+Zmlu
YWxseUxhYmVsKCkpOworICAgICAgICAgICAgaWYgKGhhc0JyZWFrc09yQ29udGludWVzTm90Q292
ZXJlZEJ5SnVtcHMpIHsKKyAgICAgICAgICAgICAgICBSZWY8TGFiZWw+IGlzVGhyb3dPck5vcm1h
bExhYmVsID0gbmV3TGFiZWwoKTsKKyAgICAgICAgICAgICAgICBlbWl0SnVtcElmPE9wQmVsb3dl
cT4oY29udGV4dC5jb21wbGV0aW9uVHlwZVJlZ2lzdGVyKCksIENvbXBsZXRpb25UeXBlOjpUaHJv
dywgaXNUaHJvd09yTm9ybWFsTGFiZWwuZ2V0KCkpOworICAgICAgICAgICAgICAgIHN0YXRpY19h
c3NlcnQoQ29tcGxldGlvblR5cGU6OlRocm93IDwgQ29tcGxldGlvblR5cGU6OlJldHVybiAmJiBD
b21wbGV0aW9uVHlwZTo6VGhyb3cgPCBDb21wbGV0aW9uVHlwZTo6UmV0dXJuLCAianVtcElEcyBh
cmUgYWJvdmUgQ29tcGxldGlvblR5cGU6OlJldHVybiIpOworCisgICAgICAgICAgICAgICAgLy8g
Tm90IFRocm93IG1lYW5zIHdlIGhhdmUgYSBCcmVhayBvciBDb250aW51ZSB0aGF0IHNob3VsZCBi
ZSBoYW5kbGVkIGJ5IHRoZSBvdXRlciBjb250ZXh0LgorICAgICAgICAgICAgICAgIC8vIFRoZXNl
IGFyZSBmb3IgQnJlYWsgb3IgQ29udGludWUgY29tcGxldGlvbnMgdGhhdCBoYXZlIG5vdCByZWFj
aGVkIHRoZWlyIGp1bXAgdGFyZ2V0cworICAgICAgICAgICAgICAgIC8vIHlldC4gVGhlIG91dGVy
IGNvbnRleHQgbmVlZHMgdG8gcnVuIGl0cyBmaW5hbGx5LCBhbmQgcmVzdW1lIHRoZSBqdW1wIG91
dHdhcmRzICh1bmxlc3MKKyAgICAgICAgICAgICAgICAvLyBpbnRlcnJ1cHRlZCBieSBhbm90aGVy
IGFicnVwdCBjb21wbGV0aW9uKS4gU28sIHdlIG5lZWQgdG8gcGFzcyB0aGUgY29tcGxldGlvbiB0
eXBlIHRvCisgICAgICAgICAgICAgICAgLy8gdGhlIG91dGVyIGZpbmFsbHkuIEFnYWluLCB3ZSBj
YW4gc2tpcCB0aGUgY29tcGxldGlvbiB2YWx1ZSBiZWNhdXNlIGl0J3Mgbm90IHVzZWQgZm9yCisg
ICAgICAgICAgICAgICAgLy8gQnJlYWsgbm9yIENvbnRpbnVlLgorICAgICAgICAgICAgICAgIG1v
dmUob3V0ZXJDb250ZXh0LT5jb21wbGV0aW9uVHlwZVJlZ2lzdGVyKCksIGNvbnRleHQuY29tcGxl
dGlvblR5cGVSZWdpc3RlcigpKTsKKyAgICAgICAgICAgICAgICBlbWl0SnVtcCgqb3V0ZXJDb250
ZXh0LT5maW5hbGx5TGFiZWwoKSk7CisKKyAgICAgICAgICAgICAgICBlbWl0TGFiZWwoaXNUaHJv
d09yTm9ybWFsTGFiZWwuZ2V0KCkpOworICAgICAgICAgICAgfQogCiAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAvLyBXZSBhcmUgdGhlIG91dGVybW9zdCBmaW5hbGx5LgogICAgICAgICAg
ICAgaWYgKGNvbnRleHQuaGFuZGxlc1JldHVybnMoKSkgewogICAgICAgICAgICAgICAgIFJlZjxM
YWJlbD4gbm90UmV0dXJuTGFiZWwgPSBuZXdMYWJlbCgpOwotICAgICAgICAgICAgICAgIGVtaXRK
dW1wSWY8T3BOc3RyaWN0ZXE+KGNvbXBsZXRpb25UeXBlUmVnaXN0ZXIsIENvbXBsZXRpb25UeXBl
OjpSZXR1cm4sIG5vdFJldHVybkxhYmVsLmdldCgpKTsKKyAgICAgICAgICAgICAgICBlbWl0SnVt
cElmPE9wTnN0cmljdGVxPihjb250ZXh0LmNvbXBsZXRpb25UeXBlUmVnaXN0ZXIoKSwgQ29tcGxl
dGlvblR5cGU6OlJldHVybiwgbm90UmV0dXJuTGFiZWwuZ2V0KCkpOwogCiAgICAgICAgICAgICAg
ICAgZW1pdFdpbGxMZWF2ZUNhbGxGcmFtZURlYnVnSG9vaygpOwotICAgICAgICAgICAgICAgIGVt
aXRSZXR1cm4oY29tcGxldGlvblZhbHVlUmVnaXN0ZXIoKSwgUmV0dXJuRnJvbTo6RmluYWxseSk7
Ci0gICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZW1pdFJldHVybihjb250ZXh0LmNv
bXBsZXRpb25WYWx1ZVJlZ2lzdGVyKCksIFJldHVybkZyb206OkZpbmFsbHkpOworCiAgICAgICAg
ICAgICAgICAgZW1pdExhYmVsKG5vdFJldHVybkxhYmVsLmdldCgpKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgIH0KLSAgICBlbWl0SnVtcElmPE9wTnN0cmljdGVxPihjb21wbGV0aW9u
VHlwZVJlZ2lzdGVyLCBDb21wbGV0aW9uVHlwZTo6VGhyb3csIG5vcm1hbENvbXBsZXRpb25MYWJl
bCk7Ci0gICAgZW1pdFRocm93KGNvbXBsZXRpb25WYWx1ZVJlZ2lzdGVyKCkpOwotfQotCi1ib29s
IEJ5dGVjb2RlR2VuZXJhdG9yOjphbGxvY2F0ZUNvbXBsZXRpb25SZWNvcmRSZWdpc3RlcnMoKQot
ewotICAgIGlmIChtX2NvbXBsZXRpb25UeXBlUmVnaXN0ZXIpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIEFTU0VSVCghbV9jb21wbGV0aW9uVmFsdWVSZWdpc3Rlcik7Ci0gICAgbV9jb21w
bGV0aW9uVHlwZVJlZ2lzdGVyID0gbmV3VGVtcG9yYXJ5KCk7Ci0gICAgbV9jb21wbGV0aW9uVmFs
dWVSZWdpc3RlciA9IG5ld1RlbXBvcmFyeSgpOworICAgIC8vIEhhbmRsZSBUaHJvdyBvciBOb3Jt
YWwgY29tcGxldGlvbnMuCisgICAgZW1pdEp1bXBJZjxPcE5zdHJpY3RlcT4oY29udGV4dC5jb21w
bGV0aW9uVHlwZVJlZ2lzdGVyKCksIENvbXBsZXRpb25UeXBlOjpUaHJvdywgbm9ybWFsQ29tcGxl
dGlvbkxhYmVsKTsKIAotICAgIGVtaXRTZXRDb21wbGV0aW9uVHlwZShDb21wbGV0aW9uVHlwZTo6
Tm9ybWFsKTsKLSAgICBtb3ZlRW1wdHlWYWx1ZShtX2NvbXBsZXRpb25WYWx1ZVJlZ2lzdGVyLmdl
dCgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cmVs
ZWFzZUNvbXBsZXRpb25SZWNvcmRSZWdpc3RlcnMoKQotewotICAgIEFTU0VSVChtX2NvbXBsZXRp
b25UeXBlUmVnaXN0ZXIgJiYgbV9jb21wbGV0aW9uVmFsdWVSZWdpc3Rlcik7Ci0gICAgbV9jb21w
bGV0aW9uVHlwZVJlZ2lzdGVyID0gbnVsbHB0cjsKLSAgICBtX2NvbXBsZXRpb25WYWx1ZVJlZ2lz
dGVyID0gbnVsbHB0cjsKKyAgICAvLyBGb3IgVGhyb3csIHdlIGp1c3QgcmUtdGhyb3cgdGhlIHBy
ZXZpb3VzbHkgY2F1Z2h0IGV4Y2VwdGlvbiBjYXB0dXJlZCBpbiB0aGUgY29tcGxldGlvbiB2YWx1
ZS4KKyAgICAvLyBUaGUgZXhjZXB0aW9uIGhhbmRsZXIgd2lsbCBzZXQgdGhlIGNvbXBsZXRpb24g
dHlwZSB0byBUaHJvdywgYW5kIHJlLWNhcHR1cmUgdGhlIGNvbXBsZXRpb24KKyAgICAvLyB2YWx1
ZSBpZiBuZWVkZWQgKGkuZS4gaWYgdGhlIGV4Y2VwdGlvbiBoYW5kbGVyIGlzIGZvciBhIGZpbmFs
bHkpLiBIZW5jZSwgbm8gbmVlZCB0byBzZXQgdGhlCisgICAgLy8gY29tcGxldGlvbiB0eXBlIGFu
ZCB2YWx1ZSBoZXJlLgorICAgIGVtaXRUaHJvdyhjb250ZXh0LmNvbXBsZXRpb25WYWx1ZVJlZ2lz
dGVyKCkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb21wYXJlT3A+CkBAIC00ODAzLDcgKzQ4
NTIsNyBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SnVtcElmKFJlZ2lzCiAgICAgUmVn
aXN0ZXJJRCogdmFsdWVDb25zdGFudCA9IGFkZENvbnN0YW50VmFsdWUoanNOdW1iZXIoc3RhdGlj
X2Nhc3Q8aW50Pih0eXBlKSkpOwogICAgIE9wZXJhbmRUeXBlcyBvcGVyYW5kVHlwZXMgPSBPcGVy
YW5kVHlwZXMoUmVzdWx0VHlwZTo6bnVtYmVyVHlwZUlzSW50MzIoKSwgUmVzdWx0VHlwZTo6dW5r
bm93blR5cGUoKSk7CiAKLSAgICBhdXRvIGVxdWl2YWxlbmNlUmVzdWx0ID0gZW1pdEJpbmFyeU9w
PENvbXBhcmVPcD4odGVtcFJlZ2lzdGVyLmdldCgpLCB2YWx1ZUNvbnN0YW50LCBjb21wbGV0aW9u
VHlwZVJlZ2lzdGVyLCBvcGVyYW5kVHlwZXMpOworICAgIGF1dG8gZXF1aXZhbGVuY2VSZXN1bHQg
PSBlbWl0QmluYXJ5T3A8Q29tcGFyZU9wPih0ZW1wUmVnaXN0ZXIuZ2V0KCksIGNvbXBsZXRpb25U
eXBlUmVnaXN0ZXIsIHZhbHVlQ29uc3RhbnQsIG9wZXJhbmRUeXBlcyk7CiAgICAgZW1pdEp1bXBJ
ZlRydWUoZXF1aXZhbGVuY2VSZXN1bHQsIGp1bXBUYXJnZXQpOwogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRv
ci5oCShyZXZpc2lvbiAyNDI1ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4IENhbWVyb24gWndhcmljaCA8Y3d6d2FyaWNo
QHV3YXRlcmxvby5jYT4KICAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEsIFMuTC4KICAqCkBA
IC05OCwxMSArOTgsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAvLyBIZW5jZSwgdGhlcmUgd29u
J3QgYmUgYW55IGNvbGxpc2lvbiBiZXR3ZWVuIGp1bXBJRHMgYW5kIENvbXBsZXRpb25UeXBlIGVu
dW1zLgogICAgIGVudW0gY2xhc3MgQ29tcGxldGlvblR5cGUgOiBpbnQgewogICAgICAgICBOb3Jt
YWwsCi0gICAgICAgIEJyZWFrLAotICAgICAgICBDb250aW51ZSwKLSAgICAgICAgUmV0dXJuLAog
ICAgICAgICBUaHJvdywKLSAgICAgICAgCisgICAgICAgIFJldHVybiwKICAgICAgICAgTnVtYmVy
T2ZUeXBlcwogICAgIH07CiAKQEAgLTEyNSwxOCArMTIyLDE3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBSZWY8TGFiZWw+IHRhcmdldExhYmVsOwogICAgIH07CiAKLSAgICBzdHJ1Y3QgRmlu
YWxseUNvbnRleHQgeworICAgIGNsYXNzIEZpbmFsbHlDb250ZXh0IHsKKyAgICBwdWJsaWM6CiAg
ICAgICAgIEZpbmFsbHlDb250ZXh0KCkgeyB9Ci0gICAgICAgIEZpbmFsbHlDb250ZXh0KEZpbmFs
bHlDb250ZXh0KiBvdXRlckNvbnRleHQsIExhYmVsJiBmaW5hbGx5TGFiZWwpCi0gICAgICAgICAg
ICA6IG1fb3V0ZXJDb250ZXh0KG91dGVyQ29udGV4dCkKLSAgICAgICAgICAgICwgbV9maW5hbGx5
TGFiZWwoJmZpbmFsbHlMYWJlbCkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKG1fanVt
cHMuaXNFbXB0eSgpKTsKLSAgICAgICAgfQorICAgICAgICBGaW5hbGx5Q29udGV4dChCeXRlY29k
ZUdlbmVyYXRvciYsIExhYmVsJiBmaW5hbGx5TGFiZWwpOwogCiAgICAgICAgIEZpbmFsbHlDb250
ZXh0KiBvdXRlckNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX291dGVyQ29udGV4dDsgfQogICAg
ICAgICBMYWJlbCogZmluYWxseUxhYmVsKCkgY29uc3QgeyByZXR1cm4gbV9maW5hbGx5TGFiZWw7
IH0KIAorICAgICAgICBSZWdpc3RlcklEKiBjb21wbGV0aW9uVHlwZVJlZ2lzdGVyKCkgY29uc3Qg
eyByZXR1cm4gbV9jb21wbGV0aW9uLnR5cGVSZWdpc3Rlci5nZXQoKTsgfQorICAgICAgICBSZWdp
c3RlcklEKiBjb21wbGV0aW9uVmFsdWVSZWdpc3RlcigpIGNvbnN0IHsgcmV0dXJuIG1fY29tcGxl
dGlvbi52YWx1ZVJlZ2lzdGVyLmdldCgpOyB9CisKICAgICAgICAgdWludDMyX3QgbnVtYmVyT2ZC
cmVha3NPckNvbnRpbnVlcygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtYmVyT2ZCcmVha3NPckNvbnRp
bnVlcy51bnNhZmVHZXQoKTsgfQogICAgICAgICB2b2lkIGluY051bWJlck9mQnJlYWtzT3JDb250
aW51ZXMoKSB7IG1fbnVtYmVyT2ZCcmVha3NPckNvbnRpbnVlcysrOyB9CiAKQEAgLTE1Nyw2ICsx
NTMsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIENoZWNrZWQ8dWludDMyX3QsIFdURjo6
Q3Jhc2hPbk92ZXJmbG93PiBtX251bWJlck9mQnJlYWtzT3JDb250aW51ZXM7CiAgICAgICAgIGJv
b2wgbV9oYW5kbGVzUmV0dXJucyB7IGZhbHNlIH07CiAgICAgICAgIFZlY3RvcjxGaW5hbGx5SnVt
cD4gbV9qdW1wczsKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiB0eXBlUmVnaXN0ZXI7CisgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdmFsdWVS
ZWdpc3RlcjsKKyAgICAgICAgfSBtX2NvbXBsZXRpb247CiAgICAgfTsKIAogICAgIHN0cnVjdCBD
b250cm9sRmxvd1Njb3BlIHsKQEAgLTE2NSwxMCArMTY1LDEwIEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICAgICAgTGFiZWwsCiAgICAgICAgICAgICBGaW5hbGx5CiAgICAgICAgIH07Ci0gICAg
ICAgIENvbnRyb2xGbG93U2NvcGUoVHlwZSB0eXBlLCBpbnQgbGV4aWNhbFNjb3BlSW5kZXgsIEZp
bmFsbHlDb250ZXh0JiYgZmluYWxseUNvbnRleHQgPSBGaW5hbGx5Q29udGV4dCgpKQorICAgICAg
ICBDb250cm9sRmxvd1Njb3BlKFR5cGUgdHlwZSwgaW50IGxleGljYWxTY29wZUluZGV4LCBGaW5h
bGx5Q29udGV4dCogZmluYWxseUNvbnRleHQgPSBudWxscHRyKQogICAgICAgICAgICAgOiB0eXBl
KHR5cGUpCiAgICAgICAgICAgICAsIGxleGljYWxTY29wZUluZGV4KGxleGljYWxTY29wZUluZGV4
KQotICAgICAgICAgICAgLCBmaW5hbGx5Q29udGV4dChzdGQ6OmZvcndhcmQ8RmluYWxseUNvbnRl
eHQ+KGZpbmFsbHlDb250ZXh0KSkKKyAgICAgICAgICAgICwgZmluYWxseUNvbnRleHQoZmluYWxs
eUNvbnRleHQpCiAgICAgICAgIHsgfQogCiAgICAgICAgIGJvb2wgaXNMYWJlbFNjb3BlKCkgY29u
c3QgeyByZXR1cm4gdHlwZSA9PSBMYWJlbDsgfQpAQCAtMTc2LDcgKzE3Niw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogCiAgICAgICAgIFR5cGUgdHlwZTsKICAgICAgICAgaW50IGxleGljYWxTY29wZUlu
ZGV4OwotICAgICAgICBGaW5hbGx5Q29udGV4dCBmaW5hbGx5Q29udGV4dDsKKyAgICAgICAgRmlu
YWxseUNvbnRleHQqIGZpbmFsbHlDb250ZXh0OwogICAgIH07CiAKICAgICBjbGFzcyBGb3JJbkNv
bnRleHQgOiBwdWJsaWMgUmVmQ291bnRlZDxGb3JJbkNvbnRleHQ+IHsKQEAgLTM2NCw2ICszNjQs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQnl0ZWNv
ZGVHZW5lcmF0b3IpOwogCiAgICAgICAgIGZyaWVuZCBjbGFzcyBCb3VuZExhYmVsOworICAgICAg
ICBmcmllbmQgY2xhc3MgRmluYWxseUNvbnRleHQ7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBMYWJl
bDsKICAgICAgICAgZnJpZW5kIGNsYXNzIEluZGV4ZWRGb3JJbkNvbnRleHQ7CiAgICAgICAgIGZy
aWVuZCBjbGFzcyBTdHJ1Y3R1cmVGb3JJbkNvbnRleHQ7CkBAIC04NzUsNyArODc2LDkgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIFRyeURhdGEqIHB1c2hUcnkoTGFiZWwmIHN0YXJ0LCBMYWJl
bCYgaGFuZGxlckxhYmVsLCBIYW5kbGVyVHlwZSk7CiAgICAgICAgIC8vIEVuZCBhIHRyeSBibG9j
ay4gJ2VuZCcgbXVzdCBoYXZlIGJlZW4gZW1pdHRlZC4KICAgICAgICAgdm9pZCBwb3BUcnkoVHJ5
RGF0YSosIExhYmVsJiBlbmQpOwotICAgICAgICB2b2lkIGVtaXRDYXRjaChSZWdpc3RlcklEKiBl
eGNlcHRpb25SZWdpc3RlciwgUmVnaXN0ZXJJRCogdGhyb3duVmFsdWVSZWdpc3RlciwgVHJ5RGF0
YSopOworCisgICAgICAgIHZvaWQgZW1pdE91dE9mTGluZUNhdGNoSGFuZGxlcihSZWdpc3RlcklE
KiB0aHJvd25WYWx1ZVJlZ2lzdGVyLCBSZWdpc3RlcklEKiBjb21wbGV0aW9uVHlwZVJlZ2lzdGVy
LCBUcnlEYXRhKik7CisgICAgICAgIHZvaWQgZW1pdE91dE9mTGluZUZpbmFsbHlIYW5kbGVyKFJl
Z2lzdGVySUQqIGV4Y2VwdGlvblJlZ2lzdGVyLCBSZWdpc3RlcklEKiBjb21wbGV0aW9uVHlwZVJl
Z2lzdGVyLCBUcnlEYXRhKik7CiAKICAgICBwcml2YXRlOgogICAgICAgICBzdGF0aWMgY29uc3Qg
aW50IEN1cnJlbnRMZXhpY2FsU2NvcGVJbmRleCA9IC0yOwpAQCAtODkxLDYgKzg5NCw4IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIHNpemUgLSAxOwogICAgICAgICB9CiAK
KyAgICAgICAgdm9pZCBlbWl0T3V0T2ZMaW5lRXhjZXB0aW9uSGFuZGxlcihSZWdpc3RlcklEKiBl
eGNlcHRpb25SZWdpc3RlciwgUmVnaXN0ZXJJRCogdGhyb3duVmFsdWVSZWdpc3RlciwgUmVnaXN0
ZXJJRCogY29tcGxldGlvblR5cGVSZWdpc3RlciwgVHJ5RGF0YSopOworCiAgICAgcHVibGljOgog
ICAgICAgICB2b2lkIHJlc3RvcmVTY29wZVJlZ2lzdGVyKCk7CiAgICAgICAgIHZvaWQgcmVzdG9y
ZVNjb3BlUmVnaXN0ZXIoaW50IGxleGljYWxTY29wZUluZGV4KTsKQEAgLTkyOSw0MyArOTM0LDkg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdERlYnVnSG9vayhFeHByZXNzaW9u
Tm9kZSopOwogICAgICAgICB2b2lkIGVtaXRXaWxsTGVhdmVDYWxsRnJhbWVEZWJ1Z0hvb2soKTsK
IAotICAgICAgICBjbGFzcyBDb21wbGV0aW9uUmVjb3JkU2NvcGUgewotICAgICAgICBwdWJsaWM6
Ci0gICAgICAgICAgICBDb21wbGV0aW9uUmVjb3JkU2NvcGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdl
bmVyYXRvciwgYm9vbCBuZWVkQ29tcGxldGlvblJlY29yZFJlZ2lzdGVycyA9IHRydWUpCi0gICAg
ICAgICAgICAgICAgOiBtX2dlbmVyYXRvcihnZW5lcmF0b3IpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgaWYgKG5lZWRDb21wbGV0aW9uUmVjb3JkUmVnaXN0ZXJzICYmIG1fZ2VuZXJh
dG9yLmFsbG9jYXRlQ29tcGxldGlvblJlY29yZFJlZ2lzdGVycygpKQotICAgICAgICAgICAgICAg
ICAgICBtX25lZWRUb1JlbGVhc2VPbkRlc3RydWN0aW9uID0gdHJ1ZTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH5Db21wbGV0aW9uUmVjb3JkU2NvcGUoKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIGlmIChtX25lZWRUb1JlbGVhc2VPbkRlc3RydWN0aW9uKQotICAgICAgICAg
ICAgICAgICAgICBtX2dlbmVyYXRvci5yZWxlYXNlQ29tcGxldGlvblJlY29yZFJlZ2lzdGVycygp
OwotICAgICAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGU6Ci0gICAgICAgICAgICBCeXRlY29k
ZUdlbmVyYXRvciYgbV9nZW5lcmF0b3I7Ci0gICAgICAgICAgICBib29sIG1fbmVlZFRvUmVsZWFz
ZU9uRGVzdHJ1Y3Rpb24geyBmYWxzZSB9OwotICAgICAgICB9OwotCi0gICAgICAgIFJlZ2lzdGVy
SUQqIGNvbXBsZXRpb25UeXBlUmVnaXN0ZXIoKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAg
ICBBU1NFUlQobV9jb21wbGV0aW9uVHlwZVJlZ2lzdGVyKTsKLSAgICAgICAgICAgIHJldHVybiBt
X2NvbXBsZXRpb25UeXBlUmVnaXN0ZXIuZ2V0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgUmVnaXN0
ZXJJRCogY29tcGxldGlvblZhbHVlUmVnaXN0ZXIoKSBjb25zdAorICAgICAgICB2b2lkIGVtaXRM
b2FkKFJlZ2lzdGVySUQqIGNvbXBsZXRpb25UeXBlUmVnaXN0ZXIsIENvbXBsZXRpb25UeXBlIHR5
cGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChtX2NvbXBsZXRpb25WYWx1ZVJlZ2lz
dGVyKTsKLSAgICAgICAgICAgIHJldHVybiBtX2NvbXBsZXRpb25WYWx1ZVJlZ2lzdGVyLmdldCgp
OwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBlbWl0U2V0Q29tcGxldGlvblR5cGUoQ29tcGxl
dGlvblR5cGUgdHlwZSkKLSAgICAgICAgewotICAgICAgICAgICAgZW1pdExvYWQoY29tcGxldGlv
blR5cGVSZWdpc3RlcigpLCBKU1ZhbHVlKHN0YXRpY19jYXN0PGludD4odHlwZSkpKTsKLSAgICAg
ICAgfQotICAgICAgICB2b2lkIGVtaXRTZXRDb21wbGV0aW9uVmFsdWUoUmVnaXN0ZXJJRCogcmVn
KQotICAgICAgICB7Ci0gICAgICAgICAgICBtb3ZlKGNvbXBsZXRpb25WYWx1ZVJlZ2lzdGVyKCks
IHJlZyk7CisgICAgICAgICAgICBlbWl0TG9hZChjb21wbGV0aW9uVHlwZVJlZ2lzdGVyLCBKU1Zh
bHVlKHN0YXRpY19jYXN0PGludD4odHlwZSkpKTsKICAgICAgICAgfQogCiAgICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIENvbXBhcmVPcD4KQEAgLTk3MywxNSArOTQ0LDExIEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgICAgIGJvb2wgZW1pdEp1bXBWaWFGaW5hbGx5SWZOZWVkZWQoaW50IHRhcmdl
dExhYmVsU2NvcGVEZXB0aCwgTGFiZWwmIGp1bXBUYXJnZXQpOwogICAgICAgICBib29sIGVtaXRS
ZXR1cm5WaWFGaW5hbGx5SWZOZWVkZWQoUmVnaXN0ZXJJRCogcmV0dXJuUmVnaXN0ZXIpOwotICAg
ICAgICB2b2lkIGVtaXRGaW5hbGx5Q29tcGxldGlvbihGaW5hbGx5Q29udGV4dCYsIFJlZ2lzdGVy
SUQqIGNvbXBsZXRpb25UeXBlUmVnaXN0ZXIsIExhYmVsJiBub3JtYWxDb21wbGV0aW9uTGFiZWwp
OwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgYm9vbCBhbGxvY2F0ZUNvbXBsZXRpb25SZWNvcmRS
ZWdpc3RlcnMoKTsKLSAgICAgICAgdm9pZCByZWxlYXNlQ29tcGxldGlvblJlY29yZFJlZ2lzdGVy
cygpOworICAgICAgICB2b2lkIGVtaXRGaW5hbGx5Q29tcGxldGlvbihGaW5hbGx5Q29udGV4dCYs
IExhYmVsJiBub3JtYWxDb21wbGV0aW9uTGFiZWwpOwogCiAgICAgcHVibGljOgotICAgICAgICBG
aW5hbGx5Q29udGV4dCogcHVzaEZpbmFsbHlDb250cm9sRmxvd1Njb3BlKExhYmVsJiBmaW5hbGx5
TGFiZWwpOwotICAgICAgICBGaW5hbGx5Q29udGV4dCBwb3BGaW5hbGx5Q29udHJvbEZsb3dTY29w
ZSgpOworICAgICAgICB2b2lkIHB1c2hGaW5hbGx5Q29udHJvbEZsb3dTY29wZShGaW5hbGx5Q29u
dGV4dCYpOworICAgICAgICB2b2lkIHBvcEZpbmFsbHlDb250cm9sRmxvd1Njb3BlKCk7CiAKICAg
ICAgICAgdm9pZCBwdXNoSW5kZXhlZEZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWwsIFJlZ2lz
dGVySUQqIGluZGV4KTsKICAgICAgICAgdm9pZCBwb3BJbmRleGVkRm9ySW5TY29wZShSZWdpc3Rl
cklEKiBsb2NhbCk7CkBAIC0xMjQ1LDkgKzEyMTIsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgUmVnaXN0ZXJJRCogbV9hcnJvd0Z1bmN0aW9uQ29udGV4dExleGljYWxFbnZpcm9ubWVudFJl
Z2lzdGVyIHsgbnVsbHB0ciB9OwogICAgICAgICBSZWdpc3RlcklEKiBtX3Byb21pc2VDYXBhYmls
aXR5UmVnaXN0ZXIgeyBudWxscHRyIH07CiAKLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1f
Y29tcGxldGlvblR5cGVSZWdpc3RlcjsKLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1fY29t
cGxldGlvblZhbHVlUmVnaXN0ZXI7Ci0KICAgICAgICAgRmluYWxseUNvbnRleHQqIG1fY3VycmVu
dEZpbmFsbHlDb250ZXh0IHsgbnVsbHB0ciB9OwogCiAgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxS
ZWdpc3RlcklEKiwgMTY+IG1fbG9jYWxSZWdpc3RlcnNGb3JDYWxsZWVTYXZlUmVnaXN0ZXJzOwpA
QCAtMTMxNCwxMSArMTI3OCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBDb21wYWN0
VmFyaWFibGVNYXA6OkhhbmRsZSBtX2NhY2hlZFZhcmlhYmxlc1VuZGVyVERaOwogCi0gICAgICAg
IHVzaW5nIENhdGNoRW50cnkgPSBzdGQ6OnR1cGxlPFRyeURhdGEqLCBWaXJ0dWFsUmVnaXN0ZXIs
IFZpcnR1YWxSZWdpc3Rlcj47Ci0gICAgICAgIFZlY3RvcjxDYXRjaEVudHJ5PiBtX2NhdGNoZXNU
b0VtaXQ7CisgICAgICAgIHVzaW5nIENhdGNoRW50cnkgPSBzdGQ6OnR1cGxlPFRyeURhdGEqLCBW
aXJ0dWFsUmVnaXN0ZXIsIFZpcnR1YWxSZWdpc3RlciwgVmlydHVhbFJlZ2lzdGVyPjsKKyAgICAg
ICAgVmVjdG9yPENhdGNoRW50cnk+IG1fZXhjZXB0aW9uSGFuZGxlcnNUb0VtaXQ7CiAgICAgfTsK
IAotCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogbmFtZXNwYWNlIFdURiB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCShy
ZXZpc2lvbiAyNDI1ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05v
ZGVzQ29kZWdlbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogKiAgQ29w
eXJpZ2h0IChDKSAxOTk5LTIwMDIgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICogIENv
cHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotKiAgQ29weXJpZ2h0
IChDKSAyMDAzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKiAgQ29weXJp
Z2h0IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKiAgQ29w
eXJpZ2h0IChDKSAyMDA3IENhbWVyb24gWndhcmljaCAoY3d6d2FyaWNoQHV3YXRlcmxvby5jYSkK
ICogIENvcHlyaWdodCAoQykgMjAwNyBNYWtzIE9ybG92aWNoCiAqICBDb3B5cmlnaHQgKEMpIDIw
MDcgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KQEAgLTM1ODIsMzIgKzM1ODIsMjkgQEAg
dm9pZCBUcnlOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcgogICAgICAgICBnZW5lcmF0
b3IuZW1pdExvYWQoZHN0LCBqc1VuZGVmaW5lZCgpKTsKIAogICAgIEFTU0VSVChtX2NhdGNoQmxv
Y2sgfHwgbV9maW5hbGx5QmxvY2spOwotICAgIEJ5dGVjb2RlR2VuZXJhdG9yOjpDb21wbGV0aW9u
UmVjb3JkU2NvcGUgY29tcGxldGlvblJlY29yZFNjb3BlKGdlbmVyYXRvciwgbV9maW5hbGx5Qmxv
Y2spOwogCiAgICAgUmVmUHRyPExhYmVsPiBjYXRjaExhYmVsOwogICAgIFJlZlB0cjxMYWJlbD4g
Y2F0Y2hFbmRMYWJlbDsKLSAgICBSZWZQdHI8TGFiZWw+IGZpbmFsbHlWaWFUaHJvd0xhYmVsOwog
ICAgIFJlZlB0cjxMYWJlbD4gZmluYWxseUxhYmVsOwogICAgIFJlZlB0cjxMYWJlbD4gZmluYWxs
eUVuZExhYmVsOwotCi0gICAgUmVmPExhYmVsPiB0cnlTdGFydExhYmVsID0gZ2VuZXJhdG9yLm5l
d0xhYmVsKCk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRMYWJlbCh0cnlTdGFydExhYmVsLmdldCgpKTsK
KyAgICBPcHRpb25hbDxGaW5hbGx5Q29udGV4dD4gZmluYWxseUNvbnRleHQ7CiAKICAgICBpZiAo
bV9maW5hbGx5QmxvY2spIHsKLSAgICAgICAgZmluYWxseVZpYVRocm93TGFiZWwgPSBnZW5lcmF0
b3IubmV3TGFiZWwoKTsKICAgICAgICAgZmluYWxseUxhYmVsID0gZ2VuZXJhdG9yLm5ld0xhYmVs
KCk7CiAgICAgICAgIGZpbmFsbHlFbmRMYWJlbCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOwogCi0g
ICAgICAgIGdlbmVyYXRvci5wdXNoRmluYWxseUNvbnRyb2xGbG93U2NvcGUoKmZpbmFsbHlMYWJl
bCk7CisgICAgICAgIGZpbmFsbHlDb250ZXh0LmVtcGxhY2UoZ2VuZXJhdG9yLCAqZmluYWxseUxh
YmVsKTsKKyAgICAgICAgZ2VuZXJhdG9yLnB1c2hGaW5hbGx5Q29udHJvbEZsb3dTY29wZShmaW5h
bGx5Q29udGV4dC52YWx1ZSgpKTsKICAgICB9CiAgICAgaWYgKG1fY2F0Y2hCbG9jaykgewogICAg
ICAgICBjYXRjaExhYmVsID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CiAgICAgICAgIGNhdGNoRW5k
TGFiZWwgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKICAgICB9CiAKLSAgICBMYWJlbCYgdHJ5SGFu
ZGxlckxhYmVsID0gbV9jYXRjaEJsb2NrID8gKmNhdGNoTGFiZWwgOiAqZmluYWxseVZpYVRocm93
TGFiZWw7CisgICAgUmVmPExhYmVsPiB0cnlMYWJlbCA9IGdlbmVyYXRvci5uZXdFbWl0dGVkTGFi
ZWwoKTsKKyAgICBMYWJlbCYgdHJ5SGFuZGxlckxhYmVsID0gbV9jYXRjaEJsb2NrID8gKmNhdGNo
TGFiZWwgOiAqZmluYWxseUxhYmVsOwogICAgIEhhbmRsZXJUeXBlIHRyeUhhbmRsZXJUeXBlID0g
bV9jYXRjaEJsb2NrID8gSGFuZGxlclR5cGU6OkNhdGNoIDogSGFuZGxlclR5cGU6OkZpbmFsbHk7
Ci0gICAgVHJ5RGF0YSogdHJ5RGF0YSA9IGdlbmVyYXRvci5wdXNoVHJ5KHRyeVN0YXJ0TGFiZWwu
Z2V0KCksIHRyeUhhbmRsZXJMYWJlbCwgdHJ5SGFuZGxlclR5cGUpOworICAgIFRyeURhdGEqIHRy
eURhdGEgPSBnZW5lcmF0b3IucHVzaFRyeSh0cnlMYWJlbC5nZXQoKSwgdHJ5SGFuZGxlckxhYmVs
LCB0cnlIYW5kbGVyVHlwZSk7CiAgICAgVHJ5RGF0YSogZmluYWxseVRyeURhdGEgPSBudWxscHRy
OwogICAgIGlmICghbV9jYXRjaEJsb2NrICYmIG1fZmluYWxseUJsb2NrKQogICAgICAgICBmaW5h
bGx5VHJ5RGF0YSA9IHRyeURhdGE7CkBAIC0zNjE5LDIxICszNjE2LDIxIEBAIHZvaWQgVHJ5Tm9k
ZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXIKICAgICBlbHNlCiAgICAgICAgIGdlbmVyYXRv
ci5lbWl0SnVtcCgqY2F0Y2hFbmRMYWJlbCk7CiAKLSAgICBSZWY8TGFiZWw+IGVuZFRyeUxhYmVs
ID0gZ2VuZXJhdG9yLm5ld0VtaXR0ZWRMYWJlbCgpOwotICAgIGdlbmVyYXRvci5wb3BUcnkodHJ5
RGF0YSwgZW5kVHJ5TGFiZWwuZ2V0KCkpOworICAgIFJlZjxMYWJlbD4gdHJ5RW5kTGFiZWwgPSBn
ZW5lcmF0b3IubmV3RW1pdHRlZExhYmVsKCk7CisgICAgZ2VuZXJhdG9yLnBvcFRyeSh0cnlEYXRh
LCB0cnlFbmRMYWJlbC5nZXQoKSk7CiAKICAgICBpZiAobV9jYXRjaEJsb2NrKSB7CiAgICAgICAg
IC8vIFVuY2F1Z2h0IGV4Y2VwdGlvbiBwYXRoOiB0aGUgY2F0Y2ggYmxvY2suCiAgICAgICAgIGdl
bmVyYXRvci5lbWl0TGFiZWwoKmNhdGNoTGFiZWwpOwogICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJ
RD4gdGhyb3duVmFsdWVSZWdpc3RlciA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKLSAgICAg
ICAgUmVnaXN0ZXJJRCogdW51c2VkID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwotICAgICAg
ICBnZW5lcmF0b3IuZW1pdENhdGNoKHVudXNlZCwgdGhyb3duVmFsdWVSZWdpc3Rlci5nZXQoKSwg
dHJ5RGF0YSk7CisgICAgICAgIFJlZ2lzdGVySUQqIGNvbXBsZXRpb25UeXBlUmVnaXN0ZXIgPSBt
X2ZpbmFsbHlCbG9jayA/IGZpbmFsbHlDb250ZXh0LT5jb21wbGV0aW9uVHlwZVJlZ2lzdGVyKCkg
OiBudWxscHRyOworICAgICAgICBnZW5lcmF0b3IuZW1pdE91dE9mTGluZUNhdGNoSGFuZGxlcih0
aHJvd25WYWx1ZVJlZ2lzdGVyLmdldCgpLCBjb21wbGV0aW9uVHlwZVJlZ2lzdGVyLCB0cnlEYXRh
KTsKICAgICAgICAgZ2VuZXJhdG9yLnJlc3RvcmVTY29wZVJlZ2lzdGVyKCk7CiAKICAgICAgICAg
aWYgKG1fZmluYWxseUJsb2NrKSB7CiAgICAgICAgICAgICAvLyBJZiB0aGUgY2F0Y2ggYmxvY2sg
dGhyb3dzIGFuIGV4Y2VwdGlvbiBhbmQgd2UgaGF2ZSBhIGZpbmFsbHkgYmxvY2ssIHRoZW4gdGhl
IGZpbmFsbHkKICAgICAgICAgICAgIC8vIGJsb2NrIHNob3VsZCAiY2F0Y2giIHRoYXQgZXhjZXB0
aW9uLgotICAgICAgICAgICAgZmluYWxseVRyeURhdGEgPSBnZW5lcmF0b3IucHVzaFRyeSgqY2F0
Y2hMYWJlbCwgKmZpbmFsbHlWaWFUaHJvd0xhYmVsLCBIYW5kbGVyVHlwZTo6RmluYWxseSk7Cisg
ICAgICAgICAgICBmaW5hbGx5VHJ5RGF0YSA9IGdlbmVyYXRvci5wdXNoVHJ5KCpjYXRjaExhYmVs
LCAqZmluYWxseUxhYmVsLCBIYW5kbGVyVHlwZTo6RmluYWxseSk7CiAgICAgICAgIH0KIAogICAg
ICAgICBpZiAobV9jYXRjaFBhdHRlcm4pIHsKQEAgLTM2NTIsOSArMzY0OSw5IEBAIHZvaWQgVHJ5
Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXIKICAgICAgICAgICAgIGdlbmVyYXRvci5l
bWl0UG9wQ2F0Y2hTY29wZShtX2xleGljYWxWYXJpYWJsZXMpOwogCiAgICAgICAgIGlmIChtX2Zp
bmFsbHlCbG9jaykgewotICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRTZXRDb21wbGV0aW9uVHlw
ZShDb21wbGV0aW9uVHlwZTo6Tm9ybWFsKTsKKyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0TG9h
ZChmaW5hbGx5Q29udGV4dC0+Y29tcGxldGlvblR5cGVSZWdpc3RlcigpLCBDb21wbGV0aW9uVHlw
ZTo6Tm9ybWFsKTsKICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcCgqZmluYWxseUxhYmVs
KTsKLSAgICAgICAgICAgIGdlbmVyYXRvci5wb3BUcnkoZmluYWxseVRyeURhdGEsICpmaW5hbGx5
VmlhVGhyb3dMYWJlbCk7CisgICAgICAgICAgICBnZW5lcmF0b3IucG9wVHJ5KGZpbmFsbHlUcnlE
YXRhLCAqZmluYWxseUxhYmVsKTsKICAgICAgICAgfQogCiAgICAgICAgIGdlbmVyYXRvci5lbWl0
TGFiZWwoKmNhdGNoRW5kTGFiZWwpOwpAQCAtMzY2MiwyNiArMzY1OSwyMCBAQCB2b2lkIFRyeU5v
ZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyCiAgICAgfQogCiAgICAgaWYgKG1fZmluYWxs
eUJsb2NrKSB7Ci0gICAgICAgIEZpbmFsbHlDb250ZXh0IGZpbmFsbHlDb250ZXh0ID0gZ2VuZXJh
dG9yLnBvcEZpbmFsbHlDb250cm9sRmxvd1Njb3BlKCk7CisgICAgICAgIGdlbmVyYXRvci5wb3BG
aW5hbGx5Q29udHJvbEZsb3dTY29wZSgpOwogCi0gICAgICAgIC8vIEVudHJ5IHRvIHRoZSBmaW5h
bGx5IGJsb2NrIGZvciBDb21wbGV0aW9uVHlwZTo6VGhyb3cuCi0gICAgICAgIGdlbmVyYXRvci5l
bWl0TGFiZWwoKmZpbmFsbHlWaWFUaHJvd0xhYmVsKTsKLSAgICAgICAgUmVnaXN0ZXJJRCogdW51
c2VkID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdENh
dGNoKGdlbmVyYXRvci5jb21wbGV0aW9uVmFsdWVSZWdpc3RlcigpLCB1bnVzZWQsIGZpbmFsbHlU
cnlEYXRhKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRTZXRDb21wbGV0aW9uVHlwZShDb21wbGV0
aW9uVHlwZTo6VGhyb3cpOworICAgICAgICAvLyBFbnRyeSB0byB0aGUgZmluYWxseSBibG9jayBm
b3IgQ29tcGxldGlvblR5cGU6OlRocm93IHRvIGJlIGdlbmVyYXRlZCBsYXRlci4KKyAgICAgICAg
Z2VuZXJhdG9yLmVtaXRPdXRPZkxpbmVGaW5hbGx5SGFuZGxlcihmaW5hbGx5Q29udGV4dC0+Y29t
cGxldGlvblZhbHVlUmVnaXN0ZXIoKSwgZmluYWxseUNvbnRleHQtPmNvbXBsZXRpb25UeXBlUmVn
aXN0ZXIoKSwgZmluYWxseVRyeURhdGEpOwogCiAgICAgICAgIC8vIEVudHJ5IHRvIHRoZSBmaW5h
bGx5IGJsb2NrIGZvciBDb21wbGV0aW9uVHlwZXMgb3RoZXIgdGhhbiBUaHJvdy4KICAgICAgICAg
Z2VuZXJhdG9yLmVtaXRMYWJlbCgqZmluYWxseUxhYmVsKTsKICAgICAgICAgZ2VuZXJhdG9yLnJl
c3RvcmVTY29wZVJlZ2lzdGVyKCk7CiAKLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNhdmVk
Q29tcGxldGlvblR5cGVSZWdpc3RlciA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKLSAgICAg
ICAgZ2VuZXJhdG9yLm1vdmUoc2F2ZWRDb21wbGV0aW9uVHlwZVJlZ2lzdGVyLmdldCgpLCBnZW5l
cmF0b3IuY29tcGxldGlvblR5cGVSZWdpc3RlcigpKTsKLQogICAgICAgICBpbnQgZmluYWxseVN0
YXJ0T2Zmc2V0ID0gbV9jYXRjaEJsb2NrID8gbV9jYXRjaEJsb2NrLT5lbmRPZmZzZXQoKSArIDEg
OiBtX3RyeUJsb2NrLT5lbmRPZmZzZXQoKSArIDE7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0UHJv
ZmlsZUNvbnRyb2xGbG93KGZpbmFsbHlTdGFydE9mZnNldCk7CiAgICAgICAgIGdlbmVyYXRvci5l
bWl0Tm9kZUluVGFpbFBvc2l0aW9uKG1fZmluYWxseUJsb2NrKTsKIAotICAgICAgICBnZW5lcmF0
b3IuZW1pdEZpbmFsbHlDb21wbGV0aW9uKGZpbmFsbHlDb250ZXh0LCBzYXZlZENvbXBsZXRpb25U
eXBlUmVnaXN0ZXIuZ2V0KCksICpmaW5hbGx5RW5kTGFiZWwpOworICAgICAgICBnZW5lcmF0b3Iu
ZW1pdEZpbmFsbHlDb21wbGV0aW9uKGZpbmFsbHlDb250ZXh0LnZhbHVlKCksICpmaW5hbGx5RW5k
TGFiZWwpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKCpmaW5hbGx5RW5kTGFiZWwpOwog
ICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVDb250cm9sRmxvdyhtX2ZpbmFsbHlCbG9jay0+
ZW5kT2Zmc2V0KCkgKyAxKTsKICAgICB9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>