<?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>210882</bug_id>
          
          <creation_ts>2020-04-22 15:33:20 -0700</creation_ts>
          <short_desc>Fix OSR exiting/iterator object checks in for-of bytecodes</short_desc>
          <delta_ts>2020-04-25 09:39:00 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</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="Keith Miller">keith_miller</reporter>
          <assigned_to name="Keith Miller">keith_miller</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1644543</commentid>
    <comment_count>0</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2020-04-22 15:33:20 -0700</bug_when>
    <thetext>Fix OSR exiting/iterator object checks in for-of bytecodes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1644551</commentid>
    <comment_count>1</comment_count>
      <attachid>397279</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2020-04-22 15:39:22 -0700</bug_when>
    <thetext>Created attachment 397279
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1644562</commentid>
    <comment_count>2</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2020-04-22 15:58:31 -0700</bug_when>
    <thetext>rdar://problem/62094397</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1644615</commentid>
    <comment_count>3</comment_count>
      <attachid>397279</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-04-22 18:40:33 -0700</bug_when>
    <thetext>Comment on attachment 397279
Patch

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

&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:180
&gt; +        Operand result, NodeType op, InlineCallFrame::Kind, BytecodeIndex nextIndex,

Let&apos;s call this osrExitIndex instead of nextIndex.  Ditto for argument names below for each of the handler functions.

&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:184
&gt; +    Terminality handleCall(const Instruction* pc, NodeType op, CallMode, BytecodeIndex nextIndex = BytecodeIndex());

nit: Is it possible to use a default arg of osrExitIndex = nextBytecodeIndex() here?  If not, can we just not have a default argument and pass nextBytecodeIndex() at the 5 locations that calls this function?  A default osrExitIndex of &quot;nowhere&quot; as implied by BytecodeIndex() just doesn&apos;t read right to me.

&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:295
&gt; +    BytecodeIndex nextBytecodeIndex() const { return BytecodeIndex(m_currentIndex.offset() + m_currentInstruction-&gt;size()); }

I&apos;m not in love with this name, mostly because &quot;Bytecode&quot; is so overloaded in our usage.  nextBytecodeIndex can mean the (1) next bytecode instruction boundary&apos;s index, or (2) the next thing that can be a BytecodeIndex.  How about naming this nextBytecodeInstructionIndex() or nextBytecodeBoundaryIndex() or nextBytecodeOpcodeIndex() instead?  Personally, I prefer nextBytecodeOpcodeIndex() because it&apos;s the shortest and reads as (1) the index of the next bytecode&apos;s opcode, or (2) the index of the next bytecode instruction, both of which conveys exactly what this function returns.

&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:1323
&gt; +    if (!nextIndex)
&gt; +        nextIndex = nextBytecodeIndex();

Please remove this if you can address the default argument suggestion I noted in my nit above.

&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:6898
&gt; +                    Node* doneIndex = jsConstant(jsNumber(-1));
&gt; +                    Node* index = addToGraph(GetInternalField, OpInfo(static_cast&lt;uint32_t&gt;(JSArrayIterator::Field::Index)), OpInfo(SpecInt32Only), iterator);
&gt; +                    Node* isDone = addToGraph(CompareStrictEq, index, doneIndex);
&gt;  
&gt; -                    Node* index = addToGraph(GetInternalField, OpInfo(static_cast&lt;uint32_t&gt;(JSArrayIterator::Field::Index)), OpInfo(SpecInt32Only), get(bytecode.m_iterator));
&gt;                      Node* iterable = get(bytecode.m_iterable);
&gt;                      Node* butterfly = addToGraph(GetButterfly, iterable);
&gt;                      Node* length = addToGraph(GetArrayLength, OpInfo(arrayMode.asWord()), iterable, butterfly);
&gt; -                    Node* isDone = addToGraph(CompareGreaterEq, Edge(index, Int32Use), Edge(length, Int32Use));
&gt; -                    m_exitOK = true; // The above compare doesn&apos;t produce effects since we know index and length are int32s.
&gt; +                    Node* isOutOfBounds = addToGraph(CompareGreaterEq, Edge(index, Int32Use), Edge(length, Int32Use));
&gt; +
&gt; +                    isDone = addToGraph(ArithBitOr, isDone, isOutOfBounds);
&gt; +                    // The above compare doesn&apos;t produce effects since we know the values are booleans. We don&apos;t set UseKinds because Fixup likes to add edges.

You&apos;re still doing 2 compares and then Or&apos;ing the boolean results.  Why not just do an unsigned compare of index against length?  If we&apos;re done, index == -1 which is UINT_MAX, and would be greater than length because length can only be INT_MAX at most, right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1644648</commentid>
    <comment_count>4</comment_count>
      <attachid>397279</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2020-04-22 20:27:19 -0700</bug_when>
    <thetext>Comment on attachment 397279
Patch

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

&gt;&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:180
&gt;&gt; +        Operand result, NodeType op, InlineCallFrame::Kind, BytecodeIndex nextIndex,
&gt; 
&gt; Let&apos;s call this osrExitIndex instead of nextIndex.  Ditto for argument names below for each of the handler functions.

Sure, changed.

&gt;&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:184
&gt;&gt; +    Terminality handleCall(const Instruction* pc, NodeType op, CallMode, BytecodeIndex nextIndex = BytecodeIndex());
&gt; 
&gt; nit: Is it possible to use a default arg of osrExitIndex = nextBytecodeIndex() here?  If not, can we just not have a default argument and pass nextBytecodeIndex() at the 5 locations that calls this function?  A default osrExitIndex of &quot;nowhere&quot; as implied by BytecodeIndex() just doesn&apos;t read right to me.

No, you can&apos;t call a member function in a default parameter... idk why, sadly. But I can change it to not have a default parameter, I both assumed there were more callsites and wanted to maintain consistency with handleVarargsCall below.

&gt;&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:295
&gt;&gt; +    BytecodeIndex nextBytecodeIndex() const { return BytecodeIndex(m_currentIndex.offset() + m_currentInstruction-&gt;size()); }
&gt; 
&gt; I&apos;m not in love with this name, mostly because &quot;Bytecode&quot; is so overloaded in our usage.  nextBytecodeIndex can mean the (1) next bytecode instruction boundary&apos;s index, or (2) the next thing that can be a BytecodeIndex.  How about naming this nextBytecodeInstructionIndex() or nextBytecodeBoundaryIndex() or nextBytecodeOpcodeIndex() instead?  Personally, I prefer nextBytecodeOpcodeIndex() because it&apos;s the shortest and reads as (1) the index of the next bytecode&apos;s opcode, or (2) the index of the next bytecode instruction, both of which conveys exactly what this function returns.

How about nextOpcodeIndex() If I had to pick something wordier I would say nextOpcodesBytecodeIndex() but I&apos;m not sure that&apos;s more meaningful since we use index fairly regularly to mean the bytecodeIndex.

&gt;&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:1323
&gt;&gt; +        nextIndex = nextBytecodeIndex();
&gt; 
&gt; Please remove this if you can address the default argument suggestion I noted in my nit above.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1644649</commentid>
    <comment_count>5</comment_count>
      <attachid>397311</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2020-04-22 20:36:31 -0700</bug_when>
    <thetext>Created attachment 397311
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1644691</commentid>
    <comment_count>6</comment_count>
      <attachid>397321</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2020-04-22 22:37:24 -0700</bug_when>
    <thetext>Created attachment 397321
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1644839</commentid>
    <comment_count>7</comment_count>
      <attachid>397358</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2020-04-23 10:26:19 -0700</bug_when>
    <thetext>Created attachment 397358
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1644856</commentid>
    <comment_count>8</comment_count>
      <attachid>397358</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-04-23 10:51:32 -0700</bug_when>
    <thetext>Comment on attachment 397358
Patch

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

&gt; Source/JavaScriptCore/ChangeLog:20
&gt; +        iterator&apos;s closed state (index == -1) and index is out of bounds. We can&apos;t
&gt; +        do a CompareBelow check because the index is effectively an int33_t.

Why not?  CompareBelow is for comparing int32_t (btw, typo with int33_t here).

    case CompareBelow:
        compileCompareUnsigned(node, JITCompiler::Below);

void SpeculativeJIT::compileInt32Compare(Node* node, MacroAssembler::RelationalCondition condition)
{
    if (node-&gt;child1()-&gt;isInt32Constant()) {
        SpeculateInt32Operand op2(this, node-&gt;child2());
        GPRTemporary result(this, Reuse, op2);
        int32_t imm = node-&gt;child1()-&gt;asInt32();
        m_jit.compare32(condition, JITCompiler::Imm32(imm), op2.gpr(), result.gpr());

        unblessedBooleanResult(result.gpr(), node);
    } else if (node-&gt;child2()-&gt;isInt32Constant()) {
        SpeculateInt32Operand op1(this, node-&gt;child1());
        GPRTemporary result(this, Reuse, op1);
        int32_t imm = node-&gt;child2()-&gt;asInt32();
        m_jit.compare32(condition, op1.gpr(), JITCompiler::Imm32(imm), result.gpr());

        unblessedBooleanResult(result.gpr(), node);
    } else {
        SpeculateInt32Operand op1(this, node-&gt;child1());  // &lt;=============== int32_t
        SpeculateInt32Operand op2(this, node-&gt;child2()); // &lt;=============== int32_t
        GPRTemporary result(this, Reuse, op1, op2);
        m_jit.compare32(condition, op1.gpr(), op2.gpr(), result.gpr());

        unblessedBooleanResult(result.gpr(), node);
    }
}

What am I missing?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1644858</commentid>
    <comment_count>9</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-04-23 10:52:14 -0700</bug_when>
    <thetext>(In reply to Mark Lam from comment #8)
&gt; Comment on attachment 397358 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=397358&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:20
&gt; &gt; +        iterator&apos;s closed state (index == -1) and index is out of bounds. We can&apos;t
&gt; &gt; +        do a CompareBelow check because the index is effectively an int33_t.
&gt; 
&gt; Why not?  CompareBelow is for comparing int32_t (btw, typo with int33_t
&gt; here).
&gt; 
&gt;     case CompareBelow:
&gt;         compileCompareUnsigned(node, JITCompiler::Below);
&gt; 
&gt; void SpeculativeJIT::compileInt32Compare(Node* node,
&gt; MacroAssembler::RelationalCondition condition)
&gt; {
&gt;     if (node-&gt;child1()-&gt;isInt32Constant()) {
&gt;         SpeculateInt32Operand op2(this, node-&gt;child2());
&gt;         GPRTemporary result(this, Reuse, op2);
&gt;         int32_t imm = node-&gt;child1()-&gt;asInt32();
&gt;         m_jit.compare32(condition, JITCompiler::Imm32(imm), op2.gpr(),
&gt; result.gpr());
&gt; 
&gt;         unblessedBooleanResult(result.gpr(), node);
&gt;     } else if (node-&gt;child2()-&gt;isInt32Constant()) {
&gt;         SpeculateInt32Operand op1(this, node-&gt;child1());
&gt;         GPRTemporary result(this, Reuse, op1);
&gt;         int32_t imm = node-&gt;child2()-&gt;asInt32();
&gt;         m_jit.compare32(condition, op1.gpr(), JITCompiler::Imm32(imm),
&gt; result.gpr());
&gt; 
&gt;         unblessedBooleanResult(result.gpr(), node);
&gt;     } else {
&gt;         SpeculateInt32Operand op1(this, node-&gt;child1());  //
&gt; &lt;=============== int32_t
&gt;         SpeculateInt32Operand op2(this, node-&gt;child2()); // &lt;===============
&gt; int32_t
&gt;         GPRTemporary result(this, Reuse, op1, op2);
&gt;         m_jit.compare32(condition, op1.gpr(), op2.gpr(), result.gpr());
&gt; 
&gt;         unblessedBooleanResult(result.gpr(), node);
&gt;     }
&gt; }
&gt; 
&gt; What am I missing?

Forgot:

void SpeculativeJIT::compileCompareUnsigned(Node* node, MacroAssembler::RelationalCondition condition)
{
    compileInt32Compare(node, condition);
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1644868</commentid>
    <comment_count>10</comment_count>
      <attachid>397358</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-04-23 11:08:16 -0700</bug_when>
    <thetext>Comment on attachment 397358
Patch

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

r=me

&gt; Source/JavaScriptCore/ChangeLog:19
&gt; +        Finally, this patch makes a small optimization where we just ArithBitOr the
&gt; +        iterator&apos;s closed state (index == -1) and index is out of bounds. We can&apos;t

Is this actually faster?

&gt; Source/JavaScriptCore/ChangeLog:20
&gt; +        do a CompareBelow check because the index is effectively an int33_t.

int33 =&gt; int32_t

&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:255
&gt; -        bool isDirect, unsigned intructionSize, ECMAMode);
&gt; +        bool isDirect, BytecodeIndex osrExitIndex, ECMAMode);

nice

&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:6887
&gt; +                    Node* doneIndex = jsConstant(jsNumber(-1));

same comment as your original patch: can we make this a constant somewhere and use it by name? We hardcode -1 in a lot of places and it&apos;s not the best abstraction</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1644877</commentid>
    <comment_count>11</comment_count>
      <attachid>397358</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2020-04-23 11:39:37 -0700</bug_when>
    <thetext>Comment on attachment 397358
Patch

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

&gt;&gt; Source/JavaScriptCore/ChangeLog:19
&gt;&gt; +        iterator&apos;s closed state (index == -1) and index is out of bounds. We can&apos;t
&gt; 
&gt; Is this actually faster?

I didn&apos;t test it but it seems unlikely that the currently impossible case of getting a closed iterator is common enough to justify having a basic block for it.

&gt;&gt;&gt;&gt; Source/JavaScriptCore/ChangeLog:20
&gt;&gt;&gt;&gt; +        do a CompareBelow check because the index is effectively an int33_t.
&gt;&gt;&gt; 
&gt;&gt;&gt; Why not?  CompareBelow is for comparing int32_t (btw, typo with int33_t here).
&gt;&gt;&gt; 
&gt;&gt;&gt;     case CompareBelow:
&gt;&gt;&gt;         compileCompareUnsigned(node, JITCompiler::Below);
&gt;&gt;&gt; 
&gt;&gt;&gt; void SpeculativeJIT::compileInt32Compare(Node* node, MacroAssembler::RelationalCondition condition)
&gt;&gt;&gt; {
&gt;&gt;&gt;     if (node-&gt;child1()-&gt;isInt32Constant()) {
&gt;&gt;&gt;         SpeculateInt32Operand op2(this, node-&gt;child2());
&gt;&gt;&gt;         GPRTemporary result(this, Reuse, op2);
&gt;&gt;&gt;         int32_t imm = node-&gt;child1()-&gt;asInt32();
&gt;&gt;&gt;         m_jit.compare32(condition, JITCompiler::Imm32(imm), op2.gpr(), result.gpr());
&gt;&gt;&gt; 
&gt;&gt;&gt;         unblessedBooleanResult(result.gpr(), node);
&gt;&gt;&gt;     } else if (node-&gt;child2()-&gt;isInt32Constant()) {
&gt;&gt;&gt;         SpeculateInt32Operand op1(this, node-&gt;child1());
&gt;&gt;&gt;         GPRTemporary result(this, Reuse, op1);
&gt;&gt;&gt;         int32_t imm = node-&gt;child2()-&gt;asInt32();
&gt;&gt;&gt;         m_jit.compare32(condition, op1.gpr(), JITCompiler::Imm32(imm), result.gpr());
&gt;&gt;&gt; 
&gt;&gt;&gt;         unblessedBooleanResult(result.gpr(), node);
&gt;&gt;&gt;     } else {
&gt;&gt;&gt;         SpeculateInt32Operand op1(this, node-&gt;child1());  // &lt;=============== int32_t
&gt;&gt;&gt;         SpeculateInt32Operand op2(this, node-&gt;child2()); // &lt;=============== int32_t
&gt;&gt;&gt;         GPRTemporary result(this, Reuse, op1, op2);
&gt;&gt;&gt;         m_jit.compare32(condition, op1.gpr(), op2.gpr(), result.gpr());
&gt;&gt;&gt; 
&gt;&gt;&gt;         unblessedBooleanResult(result.gpr(), node);
&gt;&gt;&gt;     }
&gt;&gt;&gt; }
&gt;&gt;&gt; 
&gt;&gt;&gt; What am I missing?
&gt;&gt; 
&gt;&gt; Forgot:
&gt;&gt; 
&gt;&gt; void SpeculativeJIT::compileCompareUnsigned(Node* node, MacroAssembler::RelationalCondition condition)
&gt;&gt; {
&gt;&gt;     compileInt32Compare(node, condition);
&gt;&gt; }
&gt; 
&gt; int33 =&gt; int32_t

It&apos;s int33 because GetArrayLength secretly returns an uint32_t so you can&apos;t mix it with a int32_t. To be fair I think it should work but for some reason doesn&apos;t today... I filed a bug to investigate later: https://bugs.webkit.org/show_bug.cgi?id=210927

&gt;&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:6887
&gt;&gt; +                    Node* doneIndex = jsConstant(jsNumber(-1));
&gt; 
&gt; same comment as your original patch: can we make this a constant somewhere and use it by name? We hardcode -1 in a lot of places and it&apos;s not the best abstraction

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645574</commentid>
    <comment_count>12</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2020-04-25 04:54:41 -0700</bug_when>
    <thetext>This landed in r260585</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397279</attachid>
            <date>2020-04-22 15:39:22 -0700</date>
            <delta_ts>2020-04-22 20:36:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-210882-20200422153921.patch</filename>
            <type>text/plain</type>
            <size>34972</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwNDQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
ZTQ3YWMyMmU2MTkxNGYyZjYzNDlmMjM5NzY0MWVlNWRmNWE1OGY3Li40MzgwYTZlY2QwMGRkYWJl
ZDYyZTQzODg4MTQ1NDI0MDllNzRmYzI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0MiBAQAorMjAyMC0wNC0yMiAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBGaXggT1NSIGV4aXRpbmcvaXRlcmF0b3Igb2JqZWN0IGNoZWNrcyBp
biBmb3Itb2YgYnl0ZWNvZGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMTA4ODIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBUaGlzIHBhdGNoIGZpeGVzIHNvbWUgYnVncyBpbiB0aGUgREZHQnl0ZWNvZGVQ
YXJzZXIgd2hlcmUgd2Ugd291bGQKKyAgICAgICAgc2V0IHRoZSBleGl0IG9yaWdpbiBmb3IgdGhl
IFNldExvY2FsIGZvbGxvd2luZyB0aGUgaXRlcmF0b3Jfb3Blbi9uZXh0CisgICAgICAgIGZpcnN0
IGNhbGwgdG8gdGhlIG5leHQgYnl0ZWNvZGUuIFRoaXMgbWVhbnQgdGhhdCBpZiBvdXQtb2YtbGlu
ZQorICAgICAgICBTeW1ib2wuaXRlcmF0b3Igb3IgbmV4dCBmdW5jdGlvbnMgcmV0dXJuZWQgYW4g
dW5leHBlY3RlZCBub24tY2VsbAorICAgICAgICB3ZSB3b3VsZCBPU1IgcGFzdCB0aGUgcmVzdCBv
ZiB0aGUgbmV4dCBieXRlY29kZSByYXRoZXIgdGhhbiB0byB0aGUKKyAgICAgICAgZmlyc3QgY2hl
Y2twb2ludC4KKworICAgICAgICBUaGlzIHBhdGNoIGFsc28gbWFrZXMgc3VyZSB3ZSBwcm9wZXJs
eSB0aHJvdyBmb3Igbm9uLW9iamVjdHMgcmV0dXJuZWQKKyAgICAgICAgZnJvbSBlaXRoZXIgb2Yg
dGhlIGFib3ZlIGZ1bmN0aW9ucyBpbiBhbGwgdGllcnMgKGFuZCBhZGRzIHRlc3RzKS4KKworICAg
ICAgICBGaW5hbGx5LCB0aGlzIHBhdGNoIG1ha2VzIGEgc21hbGwgb3B0aW1pemF0aW9uIHdoZXJl
IHdlIGp1c3QgQXJpdGhCaXRPcgorICAgICAgICBBcnJheUl0ZXJhdG9yJ3MgY2xvc2VkIChpbmRl
eCA9PSAtMSkgYW5kIGRvbmUgKGluZGV4ID49IGxlbmd0aCkgY29uZGl0aW9ucworICAgICAgICBy
YXRoZXIgdGhhbiBoYXZlIGFuIGV4dHJhIGJhc2ljIGJsb2NrLgorCisgICAgICAgICogYnl0ZWNv
ZGUvQnl0ZWNvZGVJbmRleC5oOgorICAgICAgICAoSlNDOjpCeXRlY29kZUluZGV4Ojp3aXRoQ2hl
Y2twb2ludCBjb25zdCk6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6bmV4dEJ5dGVjb2RlSW5kZXggY29uc3Qp
OgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpuZXh0Q2hlY2twb2ludCBjb25z
dCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnByb2dyZXNzVG9OZXh0Q2hl
Y2twb2ludCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwp
OgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlkKToKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCk6CisgICAgICAg
IChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlR2V0QnlJZCk6CisgICAgICAgIChKU0M6
OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkJ5
dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeVZhbCk6CisgICAgICAgICogaml0L0pJVENhbGwuY3Bw
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4pOgorICAgICAg
ICAqIGxsaW50L0xMSW50U2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OkxMSU5U
X1NMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmhhbmRsZUl0ZXJhdG9yTmV4
dENoZWNrcG9pbnQpOgorCiAyMDIwLTA0LTIwICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBs
ZS5jb20+CiAKICAgICAgICAgQ2hlY2sgU3RydWN0dXJlIGF0dHJpYnV0ZXMgaW4gT2JqZWN0LmFz
c2lnbiBleGhhdXN0aXZlbHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9CeXRlY29kZUluZGV4LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0
ZWNvZGVJbmRleC5oCmluZGV4IDEwZmJhNDQwNThlYzlkZmVkMjU0ODA5YTZkNzgzMzdkMDExYTRi
NjEuLjZlMjY2ZDNkYWYzYjEyNWU4NzM2NzU3NTQwNTJjMzEzYzBlNWE1NzEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUluZGV4LmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXguaApAQCAtNjIsNiArNjIs
NyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsg
cmV0dXJuICp0aGlzID09IGRlbGV0ZWRWYWx1ZSgpOyB9CiAKICAgICBzdGF0aWMgQnl0ZWNvZGVJ
bmRleCBmcm9tQml0cyh1aW50MzJfdCBiaXRzKTsKKyAgICBCeXRlY29kZUluZGV4IHdpdGhDaGVj
a3BvaW50KHVuc2lnbmVkIGNoZWNrcG9pbnQpIGNvbnN0IHsgcmV0dXJuIEJ5dGVjb2RlSW5kZXgo
b2Zmc2V0KCksIGNoZWNrcG9pbnQpOyB9CiAKICAgICAvLyBDb21wYXJpc29uIG9wZXJhdG9ycy4K
ICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gbV9wYWNrZWRCaXRz
ICE9IGludmFsaWRPZmZzZXQgJiYgbV9wYWNrZWRCaXRzICE9IGRlbGV0ZWRWYWx1ZSgpLm9mZnNl
dCgpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwCmluZGV4IDM0ZGEzYjFmYzc1MWJmY2U5YmY5NWRjMjZhOTRhMmQ4N2U5MTU1MTQuLmUyNTI4
YjBkM2NhNDBlN2ZkY2Y3ZGExZjkwYWNhY2NkMTI5ODAyMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCkBAIC0xNzcsMTEgKzE3NywxMSBA
QCBwcml2YXRlOgogICAgIC8vIEhhbmRsZSBjYWxscy4gVGhpcyByZXNvbHZlcyBpc3N1ZXMgc3Vy
cm91bmRpbmcgaW5saW5pbmcgYW5kIGludHJpbnNpY3MuCiAgICAgZW51bSBUZXJtaW5hbGl0eSB7
IFRlcm1pbmFsLCBOb25UZXJtaW5hbCB9OwogICAgIFRlcm1pbmFsaXR5IGhhbmRsZUNhbGwoCi0g
ICAgICAgIE9wZXJhbmQgcmVzdWx0LCBOb2RlVHlwZSBvcCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5k
LCB1bnNpZ25lZCBpbnN0cnVjdGlvblNpemUsCisgICAgICAgIE9wZXJhbmQgcmVzdWx0LCBOb2Rl
VHlwZSBvcCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCBCeXRlY29kZUluZGV4IG5leHRJbmRleCwK
ICAgICAgICAgTm9kZSogY2FsbFRhcmdldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIENhbGxMaW5rU3RhdHVzLAogICAgICAgICBTcGVjdWxhdGVk
VHlwZSBwcmVkaWN0aW9uKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDYWxsT3A+Ci0gICAgVGVy
bWluYWxpdHkgaGFuZGxlQ2FsbChjb25zdCBJbnN0cnVjdGlvbiogcGMsIE5vZGVUeXBlIG9wLCBD
YWxsTW9kZSk7CisgICAgVGVybWluYWxpdHkgaGFuZGxlQ2FsbChjb25zdCBJbnN0cnVjdGlvbiog
cGMsIE5vZGVUeXBlIG9wLCBDYWxsTW9kZSwgQnl0ZWNvZGVJbmRleCBuZXh0SW5kZXggPSBCeXRl
Y29kZUluZGV4KCkpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENhbGxPcD4KICAgICBUZXJtaW5h
bGl0eSBoYW5kbGVWYXJhcmdzQ2FsbChjb25zdCBJbnN0cnVjdGlvbiogcGMsIE5vZGVUeXBlIG9w
LCBDYWxsTW9kZSk7CiAgICAgdm9pZCBlbWl0RnVuY3Rpb25DaGVja3MoQ2FsbFZhcmlhbnQsIE5v
ZGUqIGNhbGxUYXJnZXQsIFZpcnR1YWxSZWdpc3RlciB0aGlzQXJndW1udCk7CkBAIC0yMTUsNyAr
MjE1LDcgQEAgcHJpdmF0ZToKICAgICBib29sIGhhbmRsZU1vZHVsZU5hbWVzcGFjZUxvYWQoVmly
dHVhbFJlZ2lzdGVyIHJlc3VsdCwgU3BlY3VsYXRlZFR5cGUsIE5vZGUqIGJhc2UsIEdldEJ5U3Rh
dHVzKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgotICAgIHZvaWQgaGFuZGxl
UHV0QnlWYWwoQnl0ZWNvZGUsIHVuc2lnbmVkIGluc3RydWN0aW9uU2l6ZSk7CisgICAgdm9pZCBo
YW5kbGVQdXRCeVZhbChCeXRlY29kZSwgQnl0ZWNvZGVJbmRleCBuZXh0SW5kZXgpOwogICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KICAgICB2b2lkIGhhbmRsZVB1dEFjY2Vzc29yQnlJ
ZChOb2RlVHlwZSwgQnl0ZWNvZGUpOwogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4K
QEAgLTI0NywxMiArMjQ3LDEyIEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+
CiAgICAgdm9pZCBwYXJzZUdldEJ5SWQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICB2b2lkIGhh
bmRsZUdldEJ5SWQoCi0gICAgICAgIFZpcnR1YWxSZWdpc3RlciBkZXN0aW5hdGlvbiwgU3BlY3Vs
YXRlZFR5cGUsIE5vZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIsIHVuc2lnbmVkIGlkZW50
aWZpZXJOdW1iZXIsIEdldEJ5U3RhdHVzLCBBY2Nlc3NUeXBlLCB1bnNpZ25lZCBpbnN0cnVjdGlv
blNpemUpOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZGVzdGluYXRpb24sIFNwZWN1bGF0ZWRU
eXBlLCBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyLCB1bnNpZ25lZCBpZGVudGlmaWVy
TnVtYmVyLCBHZXRCeVN0YXR1cywgQWNjZXNzVHlwZSwgQnl0ZWNvZGVJbmRleCBuZXh0SW5kZXgp
OwogICAgIHZvaWQgZW1pdFB1dEJ5SWQoCiAgICAgICAgIE5vZGUqIGJhc2UsIENhY2hlYWJsZUlk
ZW50aWZpZXIsIE5vZGUqIHZhbHVlLCAgY29uc3QgUHV0QnlJZFN0YXR1cyYsIGJvb2wgaXNEaXJl
Y3QsIEVDTUFNb2RlKTsKICAgICB2b2lkIGhhbmRsZVB1dEJ5SWQoCiAgICAgICAgIE5vZGUqIGJh
c2UsIENhY2hlYWJsZUlkZW50aWZpZXIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIE5vZGUq
IHZhbHVlLCBjb25zdCBQdXRCeUlkU3RhdHVzJiwKLSAgICAgICAgYm9vbCBpc0RpcmVjdCwgdW5z
aWduZWQgaW50cnVjdGlvblNpemUsIEVDTUFNb2RlKTsKKyAgICAgICAgYm9vbCBpc0RpcmVjdCwg
Qnl0ZWNvZGVJbmRleCBuZXh0SW5kZXgsIEVDTUFNb2RlKTsKIAogICAgIHZvaWQgaGFuZGxlRGVs
ZXRlQnlJZCgKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRlc3RpbmF0aW9uLCBOb2RlKiBiYXNl
LCBDYWNoZWFibGVJZGVudGlmaWVyLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBEZWxldGVC
eVN0YXR1cywgRUNNQU1vZGUpOwpAQCAtMjkyLDkgKzI5MiwxMiBAQCBwcml2YXRlOgogICAgIHZv
aWQgbGlua0Jsb2NrKEJhc2ljQmxvY2sqLCBWZWN0b3I8QmFzaWNCbG9jayo+JiBwb3NzaWJsZVRh
cmdldHMpOwogICAgIHZvaWQgbGlua0Jsb2NrcyhWZWN0b3I8QmFzaWNCbG9jayo+JiB1bmxpbmtl
ZEJsb2NrcywgVmVjdG9yPEJhc2ljQmxvY2sqPiYgcG9zc2libGVUYXJnZXRzKTsKICAgICAKKyAg
ICBCeXRlY29kZUluZGV4IG5leHRCeXRlY29kZUluZGV4KCkgY29uc3QgeyByZXR1cm4gQnl0ZWNv
ZGVJbmRleChtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSArIG1fY3VycmVudEluc3RydWN0aW9uLT5z
aXplKCkpOyB9CisgICAgQnl0ZWNvZGVJbmRleCBuZXh0Q2hlY2twb2ludCgpIGNvbnN0IHsgcmV0
dXJuIG1fY3VycmVudEluZGV4LndpdGhDaGVja3BvaW50KG1fY3VycmVudEluZGV4LmNoZWNrcG9p
bnQoKSArIDEpOyB9CisKICAgICB2b2lkIHByb2dyZXNzVG9OZXh0Q2hlY2twb2ludCgpCiAgICAg
ewotICAgICAgICBtX2N1cnJlbnRJbmRleCA9IEJ5dGVjb2RlSW5kZXgobV9jdXJyZW50SW5kZXgu
b2Zmc2V0KCksIG1fY3VycmVudEluZGV4LmNoZWNrcG9pbnQoKSArIDEpOworICAgICAgICBtX2N1
cnJlbnRJbmRleCA9IG5leHRDaGVja3BvaW50KCk7CiAgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQs
IGl0J3MgYWdhaW4gT0sgdG8gT1NSIGV4aXQuCiAgICAgICAgIG1fZXhpdE9LID0gdHJ1ZTsKICAg
ICAgICAgcHJvY2Vzc1NldExvY2FsUXVldWUoKTsKQEAgLTEzMDUsNyArMTMwOCw3IEBAIHZvaWQg
Qnl0ZUNvZGVQYXJzZXI6OmFkZEp1bXBUbyh1bnNpZ25lZCBieXRlY29kZUluZGV4KQogfQogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBDYWxsT3A+Ci1CeXRlQ29kZVBhcnNlcjo6VGVybWluYWxpdHkgQnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIHBjLCBOb2RlVHlwZSBv
cCwgQ2FsbE1vZGUgY2FsbE1vZGUpCitCeXRlQ29kZVBhcnNlcjo6VGVybWluYWxpdHkgQnl0ZUNv
ZGVQYXJzZXI6OmhhbmRsZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIHBjLCBOb2RlVHlwZSBvcCwg
Q2FsbE1vZGUgY2FsbE1vZGUsIEJ5dGVjb2RlSW5kZXggbmV4dEluZGV4KQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBwYy0+YXM8Q2FsbE9wPigpOwogICAgIE5vZGUqIGNhbGxUYXJnZXQgPSBnZXQo
Y2FsbGVlRm9yKGJ5dGVjb2RlLCBtX2N1cnJlbnRJbmRleC5jaGVja3BvaW50KCkpKTsKQEAgLTEz
MTYsOCArMTMxOSwxMCBAQCBCeXRlQ29kZVBhcnNlcjo6VGVybWluYWxpdHkgQnl0ZUNvZGVQYXJz
ZXI6OmhhbmRsZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIHBjLCBObwogICAgICAgICBtX2lubGlu
ZVN0YWNrVG9wLT5tX2Jhc2VsaW5lTWFwLCBtX2ljQ29udGV4dFN0YWNrKTsKIAogICAgIElubGlu
ZUNhbGxGcmFtZTo6S2luZCBraW5kID0gSW5saW5lQ2FsbEZyYW1lOjpraW5kRm9yKGNhbGxNb2Rl
KTsKKyAgICBpZiAoIW5leHRJbmRleCkKKyAgICAgICAgbmV4dEluZGV4ID0gbmV4dEJ5dGVjb2Rl
SW5kZXgoKTsKIAotICAgIHJldHVybiBoYW5kbGVDYWxsKGRlc3RpbmF0aW9uRm9yKGJ5dGVjb2Rl
LCBtX2N1cnJlbnRJbmRleC5jaGVja3BvaW50KCksIEpJVFR5cGU6OkRGR0pJVCksIG9wLCBraW5k
LCBwYy0+c2l6ZSgpLCBjYWxsVGFyZ2V0LAorICAgIHJldHVybiBoYW5kbGVDYWxsKGRlc3RpbmF0
aW9uRm9yKGJ5dGVjb2RlLCBtX2N1cnJlbnRJbmRleC5jaGVja3BvaW50KCksIEpJVFR5cGU6OkRG
R0pJVCksIG9wLCBraW5kLCBuZXh0SW5kZXgsIGNhbGxUYXJnZXQsCiAgICAgICAgIGFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzRm9yKGJ5dGVjb2RlLCBtX2N1cnJlbnRJbmRleC5jaGVja3BvaW50
KCkpLCByZWdpc3Rlck9mZnNldCwgY2FsbExpbmtTdGF0dXMsIGdldFByZWRpY3Rpb24oKSk7CiB9
CiAKQEAgLTEzMjgsNyArMTMzMyw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnJlZmluZVN0YXRp
Y2FsbHkoQ2FsbExpbmtTdGF0dXMmIGNhbGxMaW5rU3RhdHVzLCBOb2RlKiBjYWxsCiB9CiAKIEJ5
dGVDb2RlUGFyc2VyOjpUZXJtaW5hbGl0eSBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbCgKLSAg
ICBPcGVyYW5kIHJlc3VsdCwgTm9kZVR5cGUgb3AsIElubGluZUNhbGxGcmFtZTo6S2luZCBraW5k
LCB1bnNpZ25lZCBpbnN0cnVjdGlvblNpemUsCisgICAgT3BlcmFuZCByZXN1bHQsIE5vZGVUeXBl
IG9wLCBJbmxpbmVDYWxsRnJhbWU6OktpbmQga2luZCwgQnl0ZWNvZGVJbmRleCBuZXh0SW5kZXgs
CiAgICAgTm9kZSogY2FsbFRhcmdldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBp
bnQgcmVnaXN0ZXJPZmZzZXQsCiAgICAgQ2FsbExpbmtTdGF0dXMgY2FsbExpbmtTdGF0dXMsIFNw
ZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24pCiB7CkBAIC0xMzQ1LDcgKzEzNTAsNyBAQCBCeXRlQ29k
ZVBhcnNlcjo6VGVybWluYWxpdHkgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwoCiAKICAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNBcmd1bWVudCA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3Vt
ZW50SW5jbHVkaW5nVGhpcygwLCByZWdpc3Rlck9mZnNldCk7CiAgICAgICAgIGF1dG8gb3B0aW1p
emF0aW9uUmVzdWx0ID0gaGFuZGxlSW5saW5pbmcoY2FsbFRhcmdldCwgcmVzdWx0LCBjYWxsTGlu
a1N0YXR1cywgcmVnaXN0ZXJPZmZzZXQsIHRoaXNBcmd1bWVudCwKLSAgICAgICAgICAgIGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzLCBCeXRlY29kZUluZGV4KG1fY3VycmVudEluZGV4Lm9mZnNl
dCgpICsgaW5zdHJ1Y3Rpb25TaXplKSwgb3AsIGtpbmQsIHByZWRpY3Rpb24pOworICAgICAgICAg
ICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIG5leHRJbmRleCwgb3AsIGtpbmQsIHByZWRp
Y3Rpb24pOwogICAgICAgICBpZiAob3B0aW1pemF0aW9uUmVzdWx0ID09IENhbGxPcHRpbWl6YXRp
b25SZXN1bHQ6Ok9wdGltaXplZFRvSnVtcCkKICAgICAgICAgICAgIHJldHVybiBUZXJtaW5hbDsK
ICAgICAgICAgaWYgKG9wdGltaXphdGlvblJlc3VsdCA9PSBDYWxsT3B0aW1pemF0aW9uUmVzdWx0
OjpJbmxpbmVkKSB7CkBAIC00NDg3LDcgKzQ0OTIsNyBAQCBOb2RlKiBCeXRlQ29kZVBhcnNlcjo6
c3RvcmUoTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllciwgY29uc3QgUHV0QnlJZFZhcmlh
bgogCiB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlkKAogICAgIFZpcnR1YWxSZWdp
c3RlciBkZXN0aW5hdGlvbiwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgTm9kZSogYmFzZSwg
Q2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVy
LAotICAgIEdldEJ5U3RhdHVzIGdldEJ5U3RhdHVzLCBBY2Nlc3NUeXBlIHR5cGUsIHVuc2lnbmVk
IGluc3RydWN0aW9uU2l6ZSkKKyAgICBHZXRCeVN0YXR1cyBnZXRCeVN0YXR1cywgQWNjZXNzVHlw
ZSB0eXBlLCBCeXRlY29kZUluZGV4IG5leHRJbmRleCkKIHsKICAgICAvLyBBdHRlbXB0IHRvIHJl
ZHVjZSB0aGUgc2V0IG9mIHRoaW5ncyBpbiB0aGUgR2V0QnlTdGF0dXMuCiAgICAgaWYgKGJhc2Ut
Pm9wKCkgPT0gTmV3T2JqZWN0KSB7CkBAIC00NjY3LDcgKzQ2NzIsNyBAQCB2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVHZXRCeUlkKAogICAgIGFkZFRvR3JhcGgoRXhpdE9LKTsKICAgICAKICAg
ICBoYW5kbGVDYWxsKAotICAgICAgICBkZXN0aW5hdGlvbiwgQ2FsbCwgSW5saW5lQ2FsbEZyYW1l
OjpHZXR0ZXJDYWxsLCBpbnN0cnVjdGlvblNpemUsCisgICAgICAgIGRlc3RpbmF0aW9uLCBDYWxs
LCBJbmxpbmVDYWxsRnJhbWU6OkdldHRlckNhbGwsIG5leHRJbmRleCwKICAgICAgICAgZ2V0dGVy
LCBudW1iZXJPZlBhcmFtZXRlcnMgLSAxLCByZWdpc3Rlck9mZnNldCwgKnZhcmlhbnQuY2FsbExp
bmtTdGF0dXMoKSwgcHJlZGljdGlvbik7CiB9CiAKQEAgLTQ3ODAsNyArNDc4NSw3IEBAIHZvaWQg
Qnl0ZUNvZGVQYXJzZXI6OmVtaXRQdXRCeUlkKAogCiB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5k
bGVQdXRCeUlkKAogICAgIE5vZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIgaWRlbnRpZmll
ciwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgTm9kZSogdmFsdWUsCi0gICAgY29uc3QgUHV0
QnlJZFN0YXR1cyYgcHV0QnlJZFN0YXR1cywgYm9vbCBpc0RpcmVjdCwgdW5zaWduZWQgaW5zdHJ1
Y3Rpb25TaXplLCBFQ01BTW9kZSBlY21hTW9kZSkKKyAgICBjb25zdCBQdXRCeUlkU3RhdHVzJiBw
dXRCeUlkU3RhdHVzLCBib29sIGlzRGlyZWN0LCBCeXRlY29kZUluZGV4IG5leHRJbmRleCwgRUNN
QU1vZGUgZWNtYU1vZGUpCiB7CiAgICAgaWYgKCFwdXRCeUlkU3RhdHVzLmlzU2ltcGxlKCkgfHwg
IXB1dEJ5SWRTdGF0dXMubnVtVmFyaWFudHMoKSB8fCAhT3B0aW9uczo6dXNlQWNjZXNzSW5saW5p
bmcoKSkgewogICAgICAgICBpZiAoIXB1dEJ5SWRTdGF0dXMuaXNTZXQoKSkKQEAgLTQ5NTAsNyAr
NDk1NSw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgCiAgICAg
ICAgIGhhbmRsZUNhbGwoCiAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIoKSwgQ2FsbCwgSW5s
aW5lQ2FsbEZyYW1lOjpTZXR0ZXJDYWxsLAotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25TaXplLCBz
ZXR0ZXIsIG51bWJlck9mUGFyYW1ldGVycyAtIDEsIHJlZ2lzdGVyT2Zmc2V0LAorICAgICAgICAg
ICAgbmV4dEluZGV4LCBzZXR0ZXIsIG51bWJlck9mUGFyYW1ldGVycyAtIDEsIHJlZ2lzdGVyT2Zm
c2V0LAogICAgICAgICAgICAgKnZhcmlhbnQuY2FsbExpbmtTdGF0dXMoKSwgU3BlY090aGVyKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTQ5ODMsNyArNDk4OCw2IEBAIHZvaWQgQnl0ZUNv
ZGVQYXJzZXI6OnBhcnNlR2V0QnlJZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClb
aWRlbnRpZmllck51bWJlcl07CiAgICAgCiAgICAgQWNjZXNzVHlwZSB0eXBlID0gQWNjZXNzVHlw
ZTo6R2V0QnlJZDsKLSAgICB1bnNpZ25lZCBvcGNvZGVMZW5ndGggPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPnNpemUoKTsKICAgICBpZiAoT3A6Om9wY29kZUlEID09IG9wX3RyeV9nZXRfYnlfaWQpCiAg
ICAgICAgIHR5cGUgPSBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkOwogICAgIGVsc2UgaWYgKE9wOjpv
cGNvZGVJRCA9PSBvcF9nZXRfYnlfaWRfZGlyZWN0KQpAQCAtNDk5NCw3ICs0OTk4LDcgQEAgdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VHZXRCeUlkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fYmFzZWxpbmVNYXAsIG1f
aWNDb250ZXh0U3RhY2ssCiAgICAgICAgIGN1cnJlbnRDb2RlT3JpZ2luKCkpOwogCi0gICAgaGFu
ZGxlR2V0QnlJZChieXRlY29kZS5tX2RzdCwgcHJlZGljdGlvbiwgYmFzZSwgQ2FjaGVhYmxlSWRl
bnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1faW5saW5lU3Rh
Y2tUb3AtPm1fcHJvZmlsZWRCbG9jaywgdWlkKSwgaWRlbnRpZmllck51bWJlciwgZ2V0QnlTdGF0
dXMsIHR5cGUsIG9wY29kZUxlbmd0aCk7CisgICAgaGFuZGxlR2V0QnlJZChieXRlY29kZS5tX2Rz
dCwgcHJlZGljdGlvbiwgYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywg
dWlkKSwgaWRlbnRpZmllck51bWJlciwgZ2V0QnlTdGF0dXMsIHR5cGUsIG5leHRCeXRlY29kZUlu
ZGV4KCkpOwogfQogCiBzdGF0aWMgdWludDY0X3QgbWFrZUR5bmFtaWNWYXJPcEluZm8odW5zaWdu
ZWQgaWRlbnRpZmllck51bWJlciwgdW5zaWduZWQgZ2V0UHV0SW5mbykKQEAgLTU5NDIsNyArNTk0
Niw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAg
ICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChzaG91bGRDb21waWxlQXNHZXRCeUlkKQot
ICAgICAgICAgICAgICAgIGhhbmRsZUdldEJ5SWQoYnl0ZWNvZGUubV9kc3QsIHByZWRpY3Rpb24s
IGJhc2UsIGlkZW50aWZpZXIsIGlkZW50aWZpZXJOdW1iZXIsIGdldEJ5U3RhdHVzLCBBY2Nlc3NU
eXBlOjpHZXRCeUlkLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSk7CisgICAgICAgICAgICAg
ICAgaGFuZGxlR2V0QnlJZChieXRlY29kZS5tX2RzdCwgcHJlZGljdGlvbiwgYmFzZSwgaWRlbnRp
ZmllciwgaWRlbnRpZmllck51bWJlciwgZ2V0QnlTdGF0dXMsIEFjY2Vzc1R5cGU6OkdldEJ5SWQs
IG5leHRCeXRlY29kZUluZGV4KCkpOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAg
ICAgQXJyYXlNb2RlIGFycmF5TW9kZSA9IGdldEFycmF5TW9kZShieXRlY29kZS5tZXRhZGF0YShj
b2RlQmxvY2spLm1fYXJyYXlQcm9maWxlLCBBcnJheTo6UmVhZCk7CiAgICAgICAgICAgICAgICAg
Ly8gRklYTUU6IFdlIGNvdWxkIGNvbnNpZGVyIG1ha2luZyB0aGlzIG5vdCB2YXJhcmcsIHNpbmNl
IGl0IG9ubHkgdXNlcyB0aHJlZSBjaGlsZApAQCAtNTk3NSwxMSArNTk3OSwxMSBAQCB2b2lkIEJ5
dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICB9CiAKICAg
ICAgICAgY2FzZSBvcF9wdXRfYnlfdmFsX2RpcmVjdDoKLSAgICAgICAgICAgIGhhbmRsZVB1dEJ5
VmFsKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbERpcmVjdD4oKSwgY3VycmVudElu
c3RydWN0aW9uLT5zaXplKCkpOworICAgICAgICAgICAgaGFuZGxlUHV0QnlWYWwoY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsRGlyZWN0PigpLCBuZXh0Qnl0ZWNvZGVJbmRleCgpKTsK
ICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3B1dF9ieV92YWxfZGlyZWN0KTsKIAogICAgICAg
ICBjYXNlIG9wX3B1dF9ieV92YWw6IHsKLSAgICAgICAgICAgIGhhbmRsZVB1dEJ5VmFsKGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbD4oKSwgY3VycmVudEluc3RydWN0aW9uLT5zaXpl
KCkpOworICAgICAgICAgICAgaGFuZGxlUHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFB1dEJ5VmFsPigpLCBuZXh0Qnl0ZWNvZGVJbmRleCgpKTsKICAgICAgICAgICAgIE5FWFRfT1BD
T0RFKG9wX3B1dF9ieV92YWwpOwogICAgICAgICB9CiAKQEAgLTYwNzEsNyArNjA3NSw3IEBAIHZv
aWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAg
ICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9iYXNlbGluZU1hcCwgbV9pY0NvbnRleHRTdGFjaywK
ICAgICAgICAgICAgICAgICBjdXJyZW50Q29kZU9yaWdpbigpLCBtX2dyYXBoLmlkZW50aWZpZXJz
KClbaWRlbnRpZmllck51bWJlcl0pOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBoYW5kbGVQ
dXRCeUlkKGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3du
ZWRCeUNvZGVCbG9jayhtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssIHVpZCksIGlk
ZW50aWZpZXJOdW1iZXIsIHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBkaXJlY3QsIGN1cnJlbnRJbnN0
cnVjdGlvbi0+c2l6ZSgpLCBieXRlY29kZS5tX2ZsYWdzLmVjbWFNb2RlKCkpOworICAgICAgICAg
ICAgaGFuZGxlUHV0QnlJZChiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRl
bnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2Nr
LCB1aWQpLCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywgZGlyZWN0LCBu
ZXh0Qnl0ZWNvZGVJbmRleCgpLCBieXRlY29kZS5tX2ZsYWdzLmVjbWFNb2RlKCkpOwogICAgICAg
ICAgICAgTkVYVF9PUENPREUob3BfcHV0X2J5X2lkKTsKICAgICAgICAgfQogCkBAIC02NzQ3LDcg
KzY3NTEsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0
KQogICAgICAgICAgICAgICAgIHNldChieXRlY29kZS5tX25leHQsIG5leHQpOwogCiAgICAgICAg
ICAgICAgICAgLy8gRG8gb3VyIHNldCBsb2NhbHMuIFdlIGRvbid0IHdhbnQgdG8gZXhpdCBiYWNr
d2FyZHMgc28gbW92ZSBvdXIgZXhpdCB0byB0aGUgbmV4dCBieXRlY29kZS4KLSAgICAgICAgICAg
ICAgICBtX2N1cnJlbnRJbmRleCA9IEJ5dGVjb2RlSW5kZXgobV9jdXJyZW50SW5kZXgub2Zmc2V0
KCkgKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSk7CisgICAgICAgICAgICAgICAgbV9jdXJy
ZW50SW5kZXggPSBuZXh0Qnl0ZWNvZGVJbmRleCgpOwogICAgICAgICAgICAgICAgIG1fZXhpdE9L
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBwcm9jZXNzU2V0TG9jYWxRdWV1ZSgpOwogCkBAIC02
NzY2LDcgKzY3NzAsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVk
IGxpbWl0KQogICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICBBU1NF
UlQoIWdlbmVyYXRlZENhc2UpOwogCi0gICAgICAgICAgICAgICAgVGVybWluYWxpdHkgdGVybWlu
YWxpdHkgPSBoYW5kbGVDYWxsPE9wSXRlcmF0b3JPcGVuPihjdXJyZW50SW5zdHJ1Y3Rpb24sIENh
bGwsIENhbGxNb2RlOjpSZWd1bGFyKTsKKyAgICAgICAgICAgICAgICBUZXJtaW5hbGl0eSB0ZXJt
aW5hbGl0eSA9IGhhbmRsZUNhbGw8T3BJdGVyYXRvck9wZW4+KGN1cnJlbnRJbnN0cnVjdGlvbiwg
Q2FsbCwgQ2FsbE1vZGU6OlJlZ3VsYXIsIG5leHRDaGVja3BvaW50KCkpOwogICAgICAgICAgICAg
ICAgIEFTU0VSVF9VTlVTRUQodGVybWluYWxpdHksIHRlcm1pbmFsaXR5ID09IE5vblRlcm1pbmFs
KTsKICAgICAgICAgICAgICAgICBwcm9ncmVzc1RvTmV4dENoZWNrcG9pbnQoKTsKIApAQCAtNjc5
OCw3ICs2ODAyLDYgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBs
aW1pdCkKICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG1f
Z3JhcGguaWRlbnRpZmllcnMoKS5lbnN1cmUobmV4dEltcGwpOwogCiAgICAgICAgICAgICAgICAg
ICAgIEFjY2Vzc1R5cGUgdHlwZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWQ7Ci0gICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIG9wY29kZUxlbmd0aCA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgp
OwogCiAgICAgICAgICAgICAgICAgICAgIEdldEJ5U3RhdHVzIGdldEJ5U3RhdHVzID0gR2V0QnlT
dGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNr
VG9wLT5tX3Byb2ZpbGVkQmxvY2ssCkBAIC02ODA2LDEwICs2ODA5LDEwIEBAIHZvaWQgQnl0ZUNv
ZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICAgICAgICAg
ICAgICBjdXJyZW50Q29kZU9yaWdpbigpKTsKIAogCi0gICAgICAgICAgICAgICAgICAgIGhhbmRs
ZUdldEJ5SWQoYnl0ZWNvZGUubV9uZXh0LCBwcmVkaWN0aW9uLCBiYXNlLCBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKG5leHRJbXBsKSwgaWRlbnRpZmll
ck51bWJlciwgZ2V0QnlTdGF0dXMsIHR5cGUsIG9wY29kZUxlbmd0aCk7CisgICAgICAgICAgICAg
ICAgICAgIGhhbmRsZUdldEJ5SWQoYnl0ZWNvZGUubV9uZXh0LCBwcmVkaWN0aW9uLCBiYXNlLCBD
YWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKG5leHRJbXBs
KSwgaWRlbnRpZmllck51bWJlciwgZ2V0QnlTdGF0dXMsIHR5cGUsIG5leHRCeXRlY29kZUluZGV4
KCkpOwogCiAgICAgICAgICAgICAgICAgICAgIC8vIERvIG91ciBzZXQgbG9jYWxzLiBXZSBkb24n
dCB3YW50IHRvIHJ1biBvdXIgZ2V0X2J5X2lkIGFnYWluIHNvIHdlIG1vdmUgdG8gdGhlIG5leHQg
Ynl0ZWNvZGUuCi0gICAgICAgICAgICAgICAgICAgIG1fY3VycmVudEluZGV4ID0gQnl0ZWNvZGVJ
bmRleChtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSArIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgp
KTsKKyAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50SW5kZXggPSBuZXh0Qnl0ZWNvZGVJbmRl
eCgpOwogICAgICAgICAgICAgICAgICAgICBtX2V4aXRPSyA9IHRydWU7CiAgICAgICAgICAgICAg
ICAgICAgIHByb2Nlc3NTZXRMb2NhbFF1ZXVlKCk7CiAKQEAgLTY4MjQsNyArNjgyNyw3IEBAIHZv
aWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAg
ICAgICAgc2V0KGJ5dGVjb2RlLm1faXRlcmF0b3IsIHJlc3VsdCk7CiAgICAgICAgICAgICAgICAg
c2V0KGJ5dGVjb2RlLm1fbmV4dCwgcmVzdWx0KTsKIAotICAgICAgICAgICAgICAgIG1fY3VycmVu
dEluZGV4ID0gQnl0ZWNvZGVJbmRleChtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSArIGN1cnJlbnRJ
bnN0cnVjdGlvbi0+c2l6ZSgpKTsKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRJbmRleCA9IG5l
eHRCeXRlY29kZUluZGV4KCk7CiAgICAgICAgICAgICAgICAgbV9leGl0T0sgPSB0cnVlOwogICAg
ICAgICAgICAgICAgIHByb2Nlc3NTZXRMb2NhbFF1ZXVlKCk7CiAKQEAgLTY4NzYsMzMgKzY4Nzks
MjQgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAg
ICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5h
ZGRTdHJ1Y3R1cmVTZXQoZ2xvYmFsT2JqZWN0LT5hcnJheUl0ZXJhdG9yU3RydWN0dXJlKCkpKSwg
aXRlcmF0b3IpOwogCiAgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogaXNEb25lQmxvY2sgPSBh
bGxvY2F0ZVVudGFyZ2V0YWJsZUJsb2NrKCk7Ci0gICAgICAgICAgICAgICAgQmFzaWNCbG9jayog
bm90RG9uZUJsb2NrID0gYWxsb2NhdGVVbnRhcmdldGFibGVCbG9jaygpOwogICAgICAgICAgICAg
ICAgIEJhc2ljQmxvY2sqIGRvTG9hZEJsb2NrID0gYWxsb2NhdGVVbnRhcmdldGFibGVCbG9jaygp
OwogCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBOb2RlKiBkb25lSW5k
ZXggPSBqc0NvbnN0YW50KGpzTnVtYmVyKC0xKSk7Ci0gICAgICAgICAgICAgICAgICAgIE5vZGUq
IGluZGV4ID0gYWRkVG9HcmFwaChHZXRJbnRlcm5hbEZpZWxkLCBPcEluZm8oc3RhdGljX2Nhc3Q8
dWludDMyX3Q+KEpTQXJyYXlJdGVyYXRvcjo6RmllbGQ6OkluZGV4KSksIE9wSW5mbyhTcGVjSW50
MzJPbmx5KSwgaXRlcmF0b3IpOwotICAgICAgICAgICAgICAgICAgICBOb2RlKiBpc0RvbmUgPSBh
ZGRUb0dyYXBoKENvbXBhcmVTdHJpY3RFcSwgaW5kZXgsIGRvbmVJbmRleCk7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgQnJhbmNoRGF0YSogaXNEb25lQnJhbmNoRGF0YSA9IG1fZ3JhcGgubV9icmFu
Y2hEYXRhLmFkZCgpOwotICAgICAgICAgICAgICAgICAgICBpc0RvbmVCcmFuY2hEYXRhLT50YWtl
biA9IEJyYW5jaFRhcmdldChpc0RvbmVCbG9jayk7Ci0gICAgICAgICAgICAgICAgICAgIGlzRG9u
ZUJyYW5jaERhdGEtPm5vdFRha2VuID0gQnJhbmNoVGFyZ2V0KG5vdERvbmVCbG9jayk7Ci0gICAg
ICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8oaXNEb25lQnJhbmNoRGF0
YSksIGlzRG9uZSk7Ci0gICAgICAgICAgICAgICAgfQotCiAgICAgICAgICAgICAgICAgQXJyYXlN
b2RlIGFycmF5TW9kZSA9IGdldEFycmF5TW9kZShtZXRhZGF0YS5tX2l0ZXJhYmxlUHJvZmlsZSwg
QXJyYXk6OlJlYWQpOwogICAgICAgICAgICAgICAgIGF1dG8gcHJlZGljdGlvbiA9IGdldFByZWRp
Y3Rpb25XaXRob3V0T1NSRXhpdChCeXRlY29kZUluZGV4KG1fY3VycmVudEluZGV4Lm9mZnNldCgp
LCBPcEl0ZXJhdG9yTmV4dDo6Z2V0VmFsdWUpKTsKIAogICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBub3REb25lQmxvY2s7Ci0gICAgICAgICAg
ICAgICAgICAgIGNsZWFyQ2FjaGVzKCk7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIGRvbmVJ
bmRleCA9IGpzQ29uc3RhbnQoanNOdW1iZXIoLTEpKTsKKyAgICAgICAgICAgICAgICAgICAgTm9k
ZSogaW5kZXggPSBhZGRUb0dyYXBoKEdldEludGVybmFsRmllbGQsIE9wSW5mbyhzdGF0aWNfY2Fz
dDx1aW50MzJfdD4oSlNBcnJheUl0ZXJhdG9yOjpGaWVsZDo6SW5kZXgpKSwgT3BJbmZvKFNwZWNJ
bnQzMk9ubHkpLCBpdGVyYXRvcik7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIGlzRG9uZSA9
IGFkZFRvR3JhcGgoQ29tcGFyZVN0cmljdEVxLCBpbmRleCwgZG9uZUluZGV4KTsKIAotICAgICAg
ICAgICAgICAgICAgICBOb2RlKiBpbmRleCA9IGFkZFRvR3JhcGgoR2V0SW50ZXJuYWxGaWVsZCwg
T3BJbmZvKHN0YXRpY19jYXN0PHVpbnQzMl90PihKU0FycmF5SXRlcmF0b3I6OkZpZWxkOjpJbmRl
eCkpLCBPcEluZm8oU3BlY0ludDMyT25seSksIGdldChieXRlY29kZS5tX2l0ZXJhdG9yKSk7CiAg
ICAgICAgICAgICAgICAgICAgIE5vZGUqIGl0ZXJhYmxlID0gZ2V0KGJ5dGVjb2RlLm1faXRlcmFi
bGUpOwogICAgICAgICAgICAgICAgICAgICBOb2RlKiBidXR0ZXJmbHkgPSBhZGRUb0dyYXBoKEdl
dEJ1dHRlcmZseSwgaXRlcmFibGUpOwogICAgICAgICAgICAgICAgICAgICBOb2RlKiBsZW5ndGgg
PSBhZGRUb0dyYXBoKEdldEFycmF5TGVuZ3RoLCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwg
aXRlcmFibGUsIGJ1dHRlcmZseSk7Ci0gICAgICAgICAgICAgICAgICAgIE5vZGUqIGlzRG9uZSA9
IGFkZFRvR3JhcGgoQ29tcGFyZUdyZWF0ZXJFcSwgRWRnZShpbmRleCwgSW50MzJVc2UpLCBFZGdl
KGxlbmd0aCwgSW50MzJVc2UpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9leGl0T0sgPSB0cnVl
OyAvLyBUaGUgYWJvdmUgY29tcGFyZSBkb2Vzbid0IHByb2R1Y2UgZWZmZWN0cyBzaW5jZSB3ZSBr
bm93IGluZGV4IGFuZCBsZW5ndGggYXJlIGludDMycy4KKyAgICAgICAgICAgICAgICAgICAgTm9k
ZSogaXNPdXRPZkJvdW5kcyA9IGFkZFRvR3JhcGgoQ29tcGFyZUdyZWF0ZXJFcSwgRWRnZShpbmRl
eCwgSW50MzJVc2UpLCBFZGdlKGxlbmd0aCwgSW50MzJVc2UpKTsKKworICAgICAgICAgICAgICAg
ICAgICBpc0RvbmUgPSBhZGRUb0dyYXBoKEFyaXRoQml0T3IsIGlzRG9uZSwgaXNPdXRPZkJvdW5k
cyk7CisgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBhYm92ZSBjb21wYXJlIGRvZXNuJ3QgcHJv
ZHVjZSBlZmZlY3RzIHNpbmNlIHdlIGtub3cgdGhlIHZhbHVlcyBhcmUgYm9vbGVhbnMuIFdlIGRv
bid0IHNldCBVc2VLaW5kcyBiZWNhdXNlIEZpeHVwIGxpa2VzIHRvIGFkZCBlZGdlcy4KKyAgICAg
ICAgICAgICAgICAgICAgbV9leGl0T0sgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBhZGRU
b0dyYXBoKEV4aXRPSyk7CiAKICAgICAgICAgICAgICAgICAgICAgQnJhbmNoRGF0YSogYnJhbmNo
RGF0YSA9IG1fZ3JhcGgubV9icmFuY2hEYXRhLmFkZCgpOwpAQCAtNjkzMiw3ICs2OTI2LDcgQEAg
dm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAg
ICAgICAgICAgICAgYWRkVG9HcmFwaChQdXRJbnRlcm5hbEZpZWxkLCBPcEluZm8oc3RhdGljX2Nh
c3Q8dWludDMyX3Q+KEpTQXJyYXlJdGVyYXRvcjo6RmllbGQ6OkluZGV4KSksIGdldChieXRlY29k
ZS5tX2l0ZXJhdG9yKSwgbmV3SW5kZXgpOwogCiAgICAgICAgICAgICAgICAgICAgIC8vIERvIG91
ciBzZXQgbG9jYWxzLiBXZSBkb24ndCB3YW50IHRvIHJ1biBvdXIgZ2V0QnlWYWwgYWdhaW4gc28g
d2UgbW92ZSB0byB0aGUgbmV4dCBieXRlY29kZS4KLSAgICAgICAgICAgICAgICAgICAgbV9jdXJy
ZW50SW5kZXggPSBCeXRlY29kZUluZGV4KG1fY3VycmVudEluZGV4Lm9mZnNldCgpICsgY3VycmVu
dEluc3RydWN0aW9uLT5zaXplKCkpOworICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRJbmRl
eCA9IG5leHRCeXRlY29kZUluZGV4KCk7CiAgICAgICAgICAgICAgICAgICAgIG1fZXhpdE9LID0g
dHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc1NldExvY2FsUXVldWUoKTsKIApAQCAt
Njk1NCw3ICs2OTQ4LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25l
ZCBsaW1pdCkKICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQdXRJbnRlcm5hbEZpZWxk
LCBPcEluZm8oc3RhdGljX2Nhc3Q8dWludDMyX3Q+KEpTQXJyYXlJdGVyYXRvcjo6RmllbGQ6Oklu
ZGV4KSksIGdldChieXRlY29kZS5tX2l0ZXJhdG9yKSwgZG9uZUluZGV4KTsKIAogICAgICAgICAg
ICAgICAgICAgICAvLyBEbyBvdXIgc2V0IGxvY2Fscy4gV2UgZG9uJ3Qgd2FudCB0byBydW4gdGhp
cyBhZ2FpbiBzbyB3ZSBoYXZlIHRvIG1vdmUgdGhlIGV4aXQgb3JpZ2luIGZvcndhcmQuCi0gICAg
ICAgICAgICAgICAgICAgIG1fY3VycmVudEluZGV4ID0gQnl0ZWNvZGVJbmRleChtX2N1cnJlbnRJ
bmRleC5vZmZzZXQoKSArIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgbV9jdXJyZW50SW5kZXggPSBuZXh0Qnl0ZWNvZGVJbmRleCgpOwogICAgICAgICAg
ICAgICAgICAgICBtX2V4aXRPSyA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NT
ZXRMb2NhbFF1ZXVlKCk7CiAKQEAgLTY5NzMsNyArNjk2Nyw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJz
ZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICAgICAgfSBlbHNlCiAg
ICAgICAgICAgICAgICAgICAgIEFTU0VSVCghZ2VuZXJhdGVkQ2FzZSk7CiAKLSAgICAgICAgICAg
ICAgICBUZXJtaW5hbGl0eSB0ZXJtaW5hbGl0eSA9IGhhbmRsZUNhbGw8T3BJdGVyYXRvck5leHQ+
KGN1cnJlbnRJbnN0cnVjdGlvbiwgQ2FsbCwgQ2FsbE1vZGU6OlJlZ3VsYXIpOworICAgICAgICAg
ICAgICAgIFRlcm1pbmFsaXR5IHRlcm1pbmFsaXR5ID0gaGFuZGxlQ2FsbDxPcEl0ZXJhdG9yTmV4
dD4oY3VycmVudEluc3RydWN0aW9uLCBDYWxsLCBDYWxsTW9kZTo6UmVndWxhciwgbmV4dENoZWNr
cG9pbnQoKSk7CiAgICAgICAgICAgICAgICAgQVNTRVJUX1VOVVNFRCh0ZXJtaW5hbGl0eSwgdGVy
bWluYWxpdHkgPT0gTm9uVGVybWluYWwpOwogICAgICAgICAgICAgICAgIHByb2dyZXNzVG9OZXh0
Q2hlY2twb2ludCgpOwogCkBAIC03MDAwLDcgKzY5OTQsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgICAgICAgICBmbHVzaEZv
clRlcm1pbmFsKCk7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgYXV0byB2
YWx1ZVByZWRpY2l0aW9uID0gZ2V0UHJlZGljdGlvbldpdGhvdXRPU1JFeGl0KEJ5dGVjb2RlSW5k
ZXgobV9jdXJyZW50SW5kZXgub2Zmc2V0KCksIE9wSXRlcmF0b3JOZXh0OjpnZXRWYWx1ZSkpOwor
ICAgICAgICAgICAgICAgIGF1dG8gdmFsdWVQcmVkaWNpdGlvbiA9IGdldFByZWRpY3Rpb25XaXRo
b3V0T1NSRXhpdChtX2N1cnJlbnRJbmRleC53aXRoQ2hlY2twb2ludChPcEl0ZXJhdG9yTmV4dDo6
Z2V0VmFsdWUpKTsKIAogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgbV9l
eGl0T0sgPSB0cnVlOwpAQCAtNzAxNCwxNCArNzAwOCwxMyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBpZGVudGlmaWVyTnVtYmVyID0gbV9ncmFwaC5pZGVudGlmaWVycygpLmVuc3VyZShkb25lSW1w
bCk7CiAKICAgICAgICAgICAgICAgICAgICAgQWNjZXNzVHlwZSB0eXBlID0gQWNjZXNzVHlwZTo6
R2V0QnlJZDsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgb3Bjb2RlTGVuZ3RoID0gY3Vy
cmVudEluc3RydWN0aW9uLT5zaXplKCk7CiAKICAgICAgICAgICAgICAgICAgICAgR2V0QnlTdGF0
dXMgZ2V0QnlTdGF0dXMgPSBHZXRCeVN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgICAgICAg
ICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywKICAgICAgICAgICAg
ICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fYmFzZWxpbmVNYXAsIG1faWNDb250ZXh0
U3RhY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q29kZU9yaWdpbigpKTsKIAot
ICAgICAgICAgICAgICAgICAgICBoYW5kbGVHZXRCeUlkKGJ5dGVjb2RlLm1fZG9uZSwgcHJlZGlj
dGlvbiwgYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRp
Zmllcihkb25lSW1wbCksIGlkZW50aWZpZXJOdW1iZXIsIGdldEJ5U3RhdHVzLCB0eXBlLCBvcGNv
ZGVMZW5ndGgpOworICAgICAgICAgICAgICAgICAgICBoYW5kbGVHZXRCeUlkKGJ5dGVjb2RlLm1f
ZG9uZSwgcHJlZGljdGlvbiwgYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlt
bW9ydGFsSWRlbnRpZmllcihkb25lSW1wbCksIGlkZW50aWZpZXJOdW1iZXIsIGdldEJ5U3RhdHVz
LCB0eXBlLCBuZXh0Q2hlY2twb2ludCgpKTsKICAgICAgICAgICAgICAgICAgICAgLy8gU2V0IGEg
dmFsdWUgZm9yIG1fdmFsdWUgc28gd2UgZG9uJ3QgZXhpdCBvbiBpdCBkaWZmZXJpbmcgZnJvbSB3
aGF0IHdlIGV4cGVjdGVkLgogICAgICAgICAgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV92YWx1
ZSwgYm90dG9tVmFsdWUpOwogICAgICAgICAgICAgICAgICAgICBwcm9ncmVzc1RvTmV4dENoZWNr
cG9pbnQoKTsKQEAgLTcwNDEsMTUgKzcwMzQsMTggQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFy
c2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaWRl
bnRpZmllck51bWJlciA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKS5lbnN1cmUodmFsdWVJbXBsKTsK
IAogICAgICAgICAgICAgICAgICAgICBBY2Nlc3NUeXBlIHR5cGUgPSBBY2Nlc3NUeXBlOjpHZXRC
eUlkOwotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBvcGNvZGVMZW5ndGggPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPnNpemUoKTsKIAogICAgICAgICAgICAgICAgICAgICBHZXRCeVN0YXR1cyBn
ZXRCeVN0YXR1cyA9IEdldEJ5U3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICAgICAgICAgICAg
ICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLAogICAgICAgICAgICAgICAg
ICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9iYXNlbGluZU1hcCwgbV9pY0NvbnRleHRTdGFj
aywKICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDb2RlT3JpZ2luKCkpOwogCi0gICAg
ICAgICAgICAgICAgICAgIGhhbmRsZUdldEJ5SWQoYnl0ZWNvZGUubV92YWx1ZSwgdmFsdWVQcmVk
aWNpdGlvbiwgYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRl
bnRpZmllcih2YWx1ZUltcGwpLCBpZGVudGlmaWVyTnVtYmVyLCBnZXRCeVN0YXR1cywgdHlwZSwg
b3Bjb2RlTGVuZ3RoKTsKLSAgICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3NUb05leHRDaGVja3Bv
aW50KCk7CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZUdldEJ5SWQoYnl0ZWNvZGUubV92YWx1
ZSwgdmFsdWVQcmVkaWNpdGlvbiwgYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJv
bUltbW9ydGFsSWRlbnRpZmllcih2YWx1ZUltcGwpLCBpZGVudGlmaWVyTnVtYmVyLCBnZXRCeVN0
YXR1cywgdHlwZSwgbmV4dEJ5dGVjb2RlSW5kZXgoKSk7CisKKyAgICAgICAgICAgICAgICAgICAg
Ly8gV2UncmUgZG9uZSwgZXhpdCBmb3J3YXJkcy4KKyAgICAgICAgICAgICAgICAgICAgbV9jdXJy
ZW50SW5kZXggPSBuZXh0Qnl0ZWNvZGVJbmRleCgpOworICAgICAgICAgICAgICAgICAgICBtX2V4
aXRPSyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NTZXRMb2NhbFF1ZXVlKCk7
CiAKICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChKdW1wLCBPcEluZm8oY29udGludWF0
aW9uKSk7CiAgICAgICAgICAgICAgICAgfQpAQCAtODE0MSw3ICs4MTM3LDcgQEAgdm9pZCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2VDb2RlQmxvY2soKQogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0
ZWNvZGU+Ci12b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeVZhbChCeXRlY29kZSBieXRl
Y29kZSwgdW5zaWduZWQgaW5zdHJ1Y3Rpb25TaXplKQordm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFu
ZGxlUHV0QnlWYWwoQnl0ZWNvZGUgYnl0ZWNvZGUsIEJ5dGVjb2RlSW5kZXggbmV4dEluZGV4KQog
ewogICAgIE5vZGUqIGJhc2UgPSBnZXQoYnl0ZWNvZGUubV9iYXNlKTsKICAgICBOb2RlKiBwcm9w
ZXJ0eSA9IGdldChieXRlY29kZS5tX3Byb3BlcnR5KTsKQEAgLTgxODYsNyArODE4Miw3IEBAIHZv
aWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5VmFsKEJ5dGVjb2RlIGJ5dGVjb2RlLCB1bnNp
Z25lZCBpbnN0cnVjdGlvblNpemUpCiAgICAgICAgIH0KIAogICAgICAgICBpZiAoY29tcGlsZWRB
c1B1dEJ5SWQpCi0gICAgICAgICAgICBoYW5kbGVQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIsIGlk
ZW50aWZpZXJOdW1iZXIsIHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBpc0RpcmVjdCwgaW5zdHJ1Y3Rp
b25TaXplLCBieXRlY29kZS5tX2VjbWFNb2RlKTsKKyAgICAgICAgICAgIGhhbmRsZVB1dEJ5SWQo
YmFzZSwgaWRlbnRpZmllciwgaWRlbnRpZmllck51bWJlciwgdmFsdWUsIHB1dEJ5SWRTdGF0dXMs
IGlzRGlyZWN0LCBuZXh0SW5kZXgsIGJ5dGVjb2RlLm1fZWNtYU1vZGUpOwogICAgIH0KIAogICAg
IGlmICghY29tcGlsZWRBc1B1dEJ5SWQpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ2FsbC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwu
Y3BwCmluZGV4IDAxZTM3ZmFkY2IyZjIwMjRhMzAxNzk5NWZiZDUyOTMyOGYwYjUzMjkuLjA4MDRl
NGRhZTFlOWI4ODI3MWI1ZjU4NDljOWI5OTQ1ZDc3ZTk0MWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRDYWxsLmNwcApAQCAtNDI4LDYgKzQyOCwxMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93QwogCiAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworCisgICAgR1BSUmVnIGl0ZXJh
dG9yR1BSID0gcmVnVDA7CisgICAgSnVtcExpc3Qgbm90T2JqZWN0OworICAgIG5vdE9iamVjdC5h
cHBlbmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJhdG9yR1BSKSk7CisgICAgbm90T2JqZWN0LmFwcGVu
ZChicmFuY2hJZk5vdE9iamVjdChpdGVyYXRvckdQUikpOworCiAgICAgYXV0byBieXRlY29kZSA9
IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yT3Blbj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
bmV4dFZSZWcgPSBieXRlY29kZS5tX25leHQ7CiAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIGlkZW50
ID0gdm0oKS5wcm9wZXJ0eU5hbWVzLT5uZXh0LmltcGwoKTsKQEAgLTQzNiw5ICs0NDIsMTQgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGlu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0MKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0g
bGFiZWwoKTsKIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgbmV4
dFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0
dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJ
ZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwotCisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9u
R2V0QnlJZE9wdGltaXplLCBuZXh0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgaXRlcmF0b3JHUFIsIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7CiAg
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBhdXRv
IGRvbmUgPSBqdW1wKCk7CisKKyAgICBub3RPYmplY3QubGluayh0aGlzKTsKKyAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9iamVjdCwgVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKworICAgIGRvbmUubGluayh0aGlz
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlv
biogaW5zdHJ1Y3Rpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnRTbG93UGF0aHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xv
d1BhdGhzLmNwcAppbmRleCBmZmQ2YjVlMTE1YjZmZDllYjVlNmI4OTgyOGRiZDdmZTk2YmNhOWQw
Li5hYjIyNzFmMmMwOWYwMmQ3NWNlOWIzNjQ4NWYyZThiZmQ0YzFjOGZlIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKQEAgLTg0NSw2ICs4NDUs
OSBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfaXRlcmF0b3Jfb3Blbl9nZXRfbmV4
dCkKICAgICBKU1ZhbHVlIGl0ZXJhdG9yID0gZ2V0T3BlcmFuZChjYWxsRnJhbWUsIGJ5dGVjb2Rl
Lm1faXRlcmF0b3IpOwogICAgIFJlZ2lzdGVyJiBuZXh0UmVnaXN0ZXIgPSBjYWxsRnJhbWUtPnVu
Y2hlY2tlZFIoYnl0ZWNvZGUubV9uZXh0KTsKIAorICAgIGlmICghaXRlcmF0b3IuaXNPYmplY3Qo
KSkKKyAgICAgICAgTExJTlRfVEhST1coY3JlYXRlVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgIkl0
ZXJhdG9yIHJlc3VsdCBpbnRlcmZhY2UgaXMgbm90IGFuIG9iamVjdC4iX3MpKTsKKwogICAgIEpT
VmFsdWUgcmVzdWx0ID0gcGVyZm9ybUxMSW50R2V0QnlJRChwYywgY29kZUJsb2NrLCBnbG9iYWxP
YmplY3QsIGl0ZXJhdG9yLCB2bS5wcm9wZXJ0eU5hbWVzLT5uZXh0LCBtZXRhZGF0YS5tX21vZGVN
ZXRhZGF0YSk7CiAgICAgTExJTlRfQ0hFQ0tfRVhDRVBUSU9OKCk7CiAgICAgbmV4dFJlZ2lzdGVy
ID0gcmVzdWx0OwpAQCAtMjA4OSw5ICsyMDkyLDEzIEBAIHN0YXRpYyB2b2lkIGhhbmRsZUl0ZXJh
dG9yTmV4dENoZWNrcG9pbnQoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNHbG9iYWxP
CiAgICAgYXV0byYgdmFsdWVSZWdpc3RlciA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29k
ZS5tX3ZhbHVlKTsKICAgICBhdXRvIGl0ZXJhdG9yUmVzdWx0T2JqZWN0ID0gc2lkZVN0YXRlLnRt
cHNbT3BJdGVyYXRvck5leHQ6Om5leHRSZXN1bHRdOwogICAgIGF1dG8gbmV4dCA9IGNhbGxGcmFt
ZS0+dW5jaGVja2VkUihieXRlY29kZS5tX25leHQpLmpzVmFsdWUoKTsgICAgCi0KICAgICBSRUxF
QVNFX0FTU0VSVF9XSVRIX01FU1NBR0UobmV4dCwgIldlIHNob3VsZCBub3QgT1NSIGV4aXQgdG8g
YSBjaGVja3BvaW50IGZvciBmYXN0IGNhc2VzLiIpOwogCisgICAgaWYgKCFpdGVyYXRvclJlc3Vs
dE9iamVjdC5pc09iamVjdCgpKSB7CisgICAgICAgIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2Jq
ZWN0LCBzY29wZSwgIkl0ZXJhdG9yIHJlc3VsdCBpbnRlcmZhY2UgaXMgbm90IGFuIG9iamVjdC4i
X3MpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgYXV0byYgZG9uZVJlZ2lzdGVyID0g
Y2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fZG9uZSk7CiAgICAgaWYgKGNoZWNrcG9p
bnRJbmRleCA9PSBPcEl0ZXJhdG9yTmV4dDo6Z2V0RG9uZSkgewogICAgICAgICBkb25lUmVnaXN0
ZXIgPSBpdGVyYXRvclJlc3VsdE9iamVjdC5nZXQoZ2xvYmFsT2JqZWN0LCB2bS5wcm9wZXJ0eU5h
bWVzLT5kb25lKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvQ2hhbmdlTG9nIGIvSlNUZXN0cy9DaGFu
Z2VMb2cKaW5kZXggMTExZGEzZDZmMGRhYzE4NjZhZjZkY2FkYTQ3MjM3OGIwOGRjN2Y0MC4uZjgw
MTE4Y2QwZmZmYzQzN2E4ZGIzNzY0ZWNlNmFhOGFkZTBjMzU0MyAxMDA2NDQKLS0tIGEvSlNUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMyBAQAorMjAy
MC0wNC0yMiAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KKworICAgICAg
ICBGaXggT1NSIGV4aXRpbmcvaXRlcmF0b3Igb2JqZWN0IGNoZWNrcyBpbiBmb3Itb2YgYnl0ZWNv
ZGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTA4
ODIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHN0
cmVzcy9mb3Itb2YtaXRlcmF0b3ItbmV4dC1vc3ItYXQtaW5saW5lZC1yZXR1cm4tbm9uLW9iamVj
dC5qczogQWRkZWQuCisgICAgICAgICh2ZW5kTmV4dCk6CisgICAgICAgICh0ZXN0KToKKyAgICAg
ICAgKGNhdGNoKToKKyAgICAgICAgKiBzdHJlc3MvZm9yLW9mLWl0ZXJhdG9yLW5leHQtb3NyLWF0
LW5leHQtc2V0LWxvY2FsLmpzOiBBZGRlZC4KKyAgICAgICAgKHZlbmROZXh0KToKKyAgICAgICAg
KHRlc3QpOgorICAgICAgICAoY2F0Y2gpOgorICAgICAgICAqIHN0cmVzcy9mb3Itb2YtaXRlcmF0
b3Itb3Blbi1vc3ItYXQtaW5saW5lZC1yZXR1cm4tbm9uLW9iamVjdC5qczogQWRkZWQuCisgICAg
ICAgICh2ZW5kSXRlcmF0b3IpOgorICAgICAgICAodGVzdCk6CisgICAgICAgIChjYXRjaCk6Cisg
ICAgICAgICogc3RyZXNzL2Zvci1vZi1pdGVyYXRvci1vcGVuLW9zci1hdC1pdGVyYXRvci1zZXQt
bG9jYWwuanM6IEFkZGVkLgorICAgICAgICAodmVuZEl0ZXJhdG9yKToKKyAgICAgICAgKHRlc3Qp
OgorICAgICAgICAoY2F0Y2gpOgorICAgICAgICAqIHN0cmVzcy9mb3Itb2YtaXRlcmF0b3Itb3Bl
bi1yZXR1cm4tbm9uLW9iamVjdC5qczogQWRkZWQuCisgICAgICAgICh2ZW5kSXRlcmF0b3IpOgor
ICAgICAgICAodGVzdCk6CisgICAgICAgIChpLmNhdGNoKToKKyAgICAgICAgKiBzdHJlc3MvdGVz
dC1mb3Itb2YtY2ZnLXNpbXBsaWNhdGlvbi1leGl0LW9rLmpzOiBBZGRlZC4KKyAgICAgICAgKHou
X19wcm90b19fKToKKwogMjAyMC0wNC0yMSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUu
Y29tPgogCiAgICAgICAgIE1vdmUgdmFsdWUtcG93LWFpLXJ1bGUtc2hvdWxkLWJveC10aGUtc2Ft
ZS13YXktYXMtdGhlLXJ1bnRpbWUuanMgdG8gSlNUZXN0cy9zdHJlc3MvCmRpZmYgLS1naXQgYS9K
U1Rlc3RzL3N0cmVzcy9mb3Itb2YtaXRlcmF0b3ItbmV4dC1vc3ItYXQtaW5saW5lZC1yZXR1cm4t
bm9uLW9iamVjdC5qcyBiL0pTVGVzdHMvc3RyZXNzL2Zvci1vZi1pdGVyYXRvci1uZXh0LW9zci1h
dC1pbmxpbmVkLXJldHVybi1ub24tb2JqZWN0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIyN2YyZTExNmRhZDlk
MDI0OGQ2NWZmOWFiZTI5MDRjNjZmZjQ2OWUKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3N0
cmVzcy9mb3Itb2YtaXRlcmF0b3ItbmV4dC1vc3ItYXQtaW5saW5lZC1yZXR1cm4tbm9uLW9iamVj
dC5qcwpAQCAtMCwwICsxLDM0IEBACitsZXQgc2hvdWxkVmVuZE51bGwgPSBmYWxzZTsKK2Z1bmN0
aW9uIHZlbmROZXh0KCkgeworICAgIGlmIChzaG91bGRWZW5kTnVsbCkKKyAgICAgICAgcmV0dXJu
IDE7CisgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSB9OworfQorbm9JbmxpbmUodmVuZE5leHQpOwor
CisvLyBQYXNzIHNob3VsZFZlbmROdWxsIGFzIHBhcmFtIHNvIHdlIGRvbid0IE9TUiB3aGVuIGl0
IGJlY29tZXMgdHJ1ZS4KK2Z1bmN0aW9uIHRlc3Qoc2hvdWxkVmVuZE51bGwpIHsKKyAgICBsZXQg
aXRlcmFibGUgPSB7CisgICAgICAgIFtTeW1ib2wuaXRlcmF0b3JdKCkgeyByZXR1cm4gdGhpczsg
fSwKKyAgICAgICAgbmV4dCgpIHsgcmV0dXJuIHZlbmROZXh0KCk7IH0KKyAgICB9CisgICAgZm9y
IChsZXQgbyBvZiBpdGVyYWJsZSkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7CisgICAgaWYg
KHNob3VsZFZlbmROdWxsKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTsKK30KK25vSW5saW5l
KHRlc3QpOworCitmb3IgKGxldCBpID0gMDsgaSA8IDFlNTsgKytpKQorICAgIHRlc3QoKTsKKwor
c2hvdWxkVmVuZE51bGwgPSB0cnVlOworbGV0IGVycm9yOwordHJ5IHsKKyAgICB0ZXN0KHRydWUp
OworfSBjYXRjaCAoZSkgeworICAgIGVycm9yID0gZTsKK30KKworaWYgKGVycm9yICE9ICJUeXBl
RXJyb3I6IEl0ZXJhdG9yIHJlc3VsdCBpbnRlcmZhY2UgaXMgbm90IGFuIG9iamVjdC4iKQorICAg
IHRocm93IGVycm9yOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3MvZm9yLW9mLWl0ZXJhdG9y
LW5leHQtb3NyLWF0LW5leHQtc2V0LWxvY2FsLmpzIGIvSlNUZXN0cy9zdHJlc3MvZm9yLW9mLWl0
ZXJhdG9yLW5leHQtb3NyLWF0LW5leHQtc2V0LWxvY2FsLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI5ODM0ZTI1
ZWFkNjFmYjQ2YjUzZTc0YmJkNWNkMTQ4YWVmNzY1OWEKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rl
c3RzL3N0cmVzcy9mb3Itb2YtaXRlcmF0b3ItbmV4dC1vc3ItYXQtbmV4dC1zZXQtbG9jYWwuanMK
QEAgLTAsMCArMSwzNCBAQAorbGV0IHNob3VsZFZlbmROdWxsID0gZmFsc2U7CitmdW5jdGlvbiB2
ZW5kTmV4dCgpIHsKKyAgICBpZiAoc2hvdWxkVmVuZE51bGwpCisgICAgICAgIHJldHVybiAxOwor
ICAgIHJldHVybiB7IGRvbmU6IHRydWUgfTsKK30KK25vSW5saW5lKHZlbmROZXh0KTsKKworLy8g
UGFzcyBzaG91bGRWZW5kTnVsbCBhcyBwYXJhbSBzbyB3ZSBkb24ndCBPU1Igd2hlbiBpdCBiZWNv
bWVzIHRydWUuCitmdW5jdGlvbiB0ZXN0KHNob3VsZFZlbmROdWxsKSB7CisgICAgbGV0IGl0ZXJh
YmxlID0geworICAgICAgICBbU3ltYm9sLml0ZXJhdG9yXSgpIHsgcmV0dXJuIHRoaXM7IH0sCisg
ICAgICAgIG5leHQ6IHZlbmROZXh0LAorICAgIH0KKyAgICBmb3IgKGxldCBvIG9mIGl0ZXJhYmxl
KQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTsKKyAgICBpZiAoc2hvdWxkVmVuZE51bGwpCisg
ICAgICAgIHRocm93IG5ldyBFcnJvcigpOworfQorbm9JbmxpbmUodGVzdCk7CisKK2ZvciAobGV0
IGkgPSAwOyBpIDwgMWU1OyArK2kpCisgICAgdGVzdCgpOworCitzaG91bGRWZW5kTnVsbCA9IHRy
dWU7CitsZXQgZXJyb3I7Cit0cnkgeworICAgIHRlc3QodHJ1ZSk7Cit9IGNhdGNoIChlKSB7Cisg
ICAgZXJyb3IgPSBlOworfQorCitpZiAoZXJyb3IgIT0gIlR5cGVFcnJvcjogSXRlcmF0b3IgcmVz
dWx0IGludGVyZmFjZSBpcyBub3QgYW4gb2JqZWN0LiIpCisgICAgdGhyb3cgZXJyb3I7CmRpZmYg
LS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9mb3Itb2YtaXRlcmF0b3Itb3Blbi1vc3ItYXQtaW5saW5l
ZC1yZXR1cm4tbm9uLW9iamVjdC5qcyBiL0pTVGVzdHMvc3RyZXNzL2Zvci1vZi1pdGVyYXRvci1v
cGVuLW9zci1hdC1pbmxpbmVkLXJldHVybi1ub24tb2JqZWN0LmpzCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIxODk3
ZmJjZWIxZWQ1ZjU0N2QzODQ3NzYwZDVjYzMyMzEwZDBmOTQKLS0tIC9kZXYvbnVsbAorKysgYi9K
U1Rlc3RzL3N0cmVzcy9mb3Itb2YtaXRlcmF0b3Itb3Blbi1vc3ItYXQtaW5saW5lZC1yZXR1cm4t
bm9uLW9iamVjdC5qcwpAQCAtMCwwICsxLDM0IEBACitsZXQgc2hvdWxkVmVuZE51bGwgPSBmYWxz
ZTsKK2Z1bmN0aW9uIHZlbmRJdGVyYXRvcigpIHsKKyAgICBpZiAoc2hvdWxkVmVuZE51bGwpCisg
ICAgICAgIHJldHVybiAxOworICAgIHJldHVybiB0aGlzOworfQorbm9JbmxpbmUodmVuZEl0ZXJh
dG9yKTsKKworLy8gUGFzcyBzaG91bGRWZW5kTnVsbCBhcyBwYXJhbSBzbyB3ZSBkb24ndCBPU1Ig
d2hlbiBpdCBiZWNvbWVzIHRydWUuCitmdW5jdGlvbiB0ZXN0KHNob3VsZFZlbmROdWxsKSB7Cisg
ICAgbGV0IGl0ZXJhYmxlID0geworICAgICAgICBbU3ltYm9sLml0ZXJhdG9yXSgpIHsgcmV0dXJu
IHZlbmRJdGVyYXRvci5jYWxsKHRoaXMpIH0sCisgICAgICAgIG5leHQoKSB7IHJldHVybiB7IGRv
bmU6IHRydWUgfTsgfQorICAgIH0KKyAgICBmb3IgKGxldCBvIG9mIGl0ZXJhYmxlKQorICAgICAg
ICB0aHJvdyBuZXcgRXJyb3IoKTsKKyAgICBpZiAoc2hvdWxkVmVuZE51bGwpCisgICAgICAgIHRo
cm93IG5ldyBFcnJvcigpOworfQorbm9JbmxpbmUodGVzdCk7CisKK2ZvciAobGV0IGkgPSAwOyBp
IDwgMWU1OyArK2kpCisgICAgdGVzdCgpOworCitzaG91bGRWZW5kTnVsbCA9IHRydWU7CitsZXQg
ZXJyb3I7Cit0cnkgeworICAgIHRlc3QodHJ1ZSk7Cit9IGNhdGNoIChlKSB7CisgICAgZXJyb3Ig
PSBlOworfQorCitpZiAoZXJyb3IgIT0gIlR5cGVFcnJvcjogSXRlcmF0b3IgcmVzdWx0IGludGVy
ZmFjZSBpcyBub3QgYW4gb2JqZWN0LiIpCisgICAgdGhyb3cgbmV3IEVycm9yKCk7CmRpZmYgLS1n
aXQgYS9KU1Rlc3RzL3N0cmVzcy9mb3Itb2YtaXRlcmF0b3Itb3Blbi1vc3ItYXQtaXRlcmF0b3It
c2V0LWxvY2FsLmpzIGIvSlNUZXN0cy9zdHJlc3MvZm9yLW9mLWl0ZXJhdG9yLW9wZW4tb3NyLWF0
LWl0ZXJhdG9yLXNldC1sb2NhbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iYzNjZjdmMTFkNTM0YTQ4NjNjMjMy
YWZjYTI5NjIyNGM4MjBhZDIxCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9zdHJlc3MvZm9y
LW9mLWl0ZXJhdG9yLW9wZW4tb3NyLWF0LWl0ZXJhdG9yLXNldC1sb2NhbC5qcwpAQCAtMCwwICsx
LDM0IEBACitsZXQgc2hvdWxkVmVuZE51bGwgPSBmYWxzZTsKK2Z1bmN0aW9uIHZlbmRJdGVyYXRv
cigpIHsKKyAgICBpZiAoc2hvdWxkVmVuZE51bGwpCisgICAgICAgIHJldHVybiAxOworICAgIHJl
dHVybiB0aGlzOworfQorbm9JbmxpbmUodmVuZEl0ZXJhdG9yKTsKKworLy8gUGFzcyBzaG91bGRW
ZW5kTnVsbCBhcyBwYXJhbSBzbyB3ZSBkb24ndCBPU1Igd2hlbiBpdCBiZWNvbWVzIHRydWUuCitm
dW5jdGlvbiB0ZXN0KHNob3VsZFZlbmROdWxsKSB7CisgICAgbGV0IGl0ZXJhYmxlID0geworICAg
ICAgICBbU3ltYm9sLml0ZXJhdG9yXTogdmVuZEl0ZXJhdG9yLAorICAgICAgICBuZXh0KCkgeyBy
ZXR1cm4geyBkb25lOiB0cnVlIH07IH0KKyAgICB9CisgICAgZm9yIChsZXQgbyBvZiBpdGVyYWJs
ZSkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7CisgICAgaWYgKHNob3VsZFZlbmROdWxsKQor
ICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTsKK30KK25vSW5saW5lKHRlc3QpOworCitmb3IgKGxl
dCBpID0gMDsgaSA8IDFlNTsgKytpKQorICAgIHRlc3QoKTsKKworc2hvdWxkVmVuZE51bGwgPSB0
cnVlOworbGV0IGVycm9yOwordHJ5IHsKKyAgICB0ZXN0KHRydWUpOworfSBjYXRjaCAoZSkgewor
ICAgIGVycm9yID0gZTsKK30KKworaWYgKGVycm9yICE9ICJUeXBlRXJyb3I6IEl0ZXJhdG9yIHJl
c3VsdCBpbnRlcmZhY2UgaXMgbm90IGFuIG9iamVjdC4iKQorICAgIHRocm93IG5ldyBFcnJvcigp
OwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3MvZm9yLW9mLWl0ZXJhdG9yLW9wZW4tcmV0dXJu
LW5vbi1vYmplY3QuanMgYi9KU1Rlc3RzL3N0cmVzcy9mb3Itb2YtaXRlcmF0b3Itb3Blbi1yZXR1
cm4tbm9uLW9iamVjdC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNmYzOWNjMzQzZWI5OGFlZTMwNjJkZTFjZmVj
NGViMWI2NDI5NjdjCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9zdHJlc3MvZm9yLW9mLWl0
ZXJhdG9yLW9wZW4tcmV0dXJuLW5vbi1vYmplY3QuanMKQEAgLTAsMCArMSwyNiBAQAorZnVuY3Rp
b24gdmVuZEl0ZXJhdG9yKCkgeworICAgIHJldHVybiAxOworfQorbm9JbmxpbmUodmVuZEl0ZXJh
dG9yKTsKKworZnVuY3Rpb24gdGVzdCgpIHsKKyAgICBsZXQgaXRlcmFibGUgPSB7CisgICAgICAg
IFtTeW1ib2wuaXRlcmF0b3JdKCkgeyByZXR1cm4gdmVuZEl0ZXJhdG9yKCk7IH0sCisgICAgICAg
IG5leHQoKSB7IHJldHVybiB7IGRvbmU6IHRydWUgfTsgfQorICAgIH0KKyAgICBmb3IgKGxldCBv
IG9mIGl0ZXJhYmxlKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTsKKyAgICB0aHJvdyBuZXcg
RXJyb3IoKTsKK30KK25vSW5saW5lKHRlc3QpOworCitmb3IgKGxldCBpID0gMDsgaSA8IDFlNTsg
KytpKSB7CisgICAgbGV0IGVycm9yOworICAgIHRyeSB7CisgICAgICAgIHRlc3QoKTsKKyAgICB9
IGNhdGNoIChlKSB7CisgICAgICAgIGVycm9yID0gZTsKKyAgICB9CisgICAgaWYgKGVycm9yICE9
ICJUeXBlRXJyb3I6IEl0ZXJhdG9yIHJlc3VsdCBpbnRlcmZhY2UgaXMgbm90IGFuIG9iamVjdC4i
KQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTsKK30KZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3Ry
ZXNzL3Rlc3QtZm9yLW9mLWNmZy1zaW1wbGljYXRpb24tZXhpdC1vay5qcyBiL0pTVGVzdHMvc3Ry
ZXNzL3Rlc3QtZm9yLW9mLWNmZy1zaW1wbGljYXRpb24tZXhpdC1vay5qcwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44
OWIyMjY3OWM2ODQ4MTI3MGI4Nzc2MmEwMmE1MWZmOGZhNmVlNWFlCi0tLSAvZGV2L251bGwKKysr
IGIvSlNUZXN0cy9zdHJlc3MvdGVzdC1mb3Itb2YtY2ZnLXNpbXBsaWNhdGlvbi1leGl0LW9rLmpz
CkBAIC0wLDAgKzEsNyBAQAorbGV0IHogPSB7fQorei5fX3Byb3RvX18gPSBbXQorZm9yIChsZXQg
aSA9IDA7IGkgPCAxMDAwMDAwOyBpKyspIHsKKyAgZm9yIChsZXQgeCBvZiBbJycsIHpdKSB7Cisg
ICAgZm9yIChsZXQgeSBvZiB4KSB7fQorICB9Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397311</attachid>
            <date>2020-04-22 20:36:31 -0700</date>
            <delta_ts>2020-04-22 22:37:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-210882-20200422203629.patch</filename>
            <type>text/plain</type>
            <size>42256</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwNDQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
ZTQ3YWMyMmU2MTkxNGYyZjYzNDlmMjM5NzY0MWVlNWRmNWE1OGY3Li4xMjVlMWJkNDFhNDNlNDll
NGQ2YjNmZDM5NWMyYjM4NTI0MjcyMWM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NCBAQAorMjAyMC0wNC0yMiAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBGaXggT1NSIGV4aXRpbmcvaXRlcmF0b3Igb2JqZWN0IGNoZWNrcyBp
biBmb3Itb2YgYnl0ZWNvZGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMTA4ODIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBUaGlzIHBhdGNoIGZpeGVzIHNvbWUgYnVncyBpbiB0aGUgREZHQnl0ZWNvZGVQ
YXJzZXIgd2hlcmUgd2Ugd291bGQKKyAgICAgICAgc2V0IHRoZSBleGl0IG9yaWdpbiBmb3IgdGhl
IFNldExvY2FsIGZvbGxvd2luZyB0aGUgaXRlcmF0b3Jfb3Blbi9uZXh0CisgICAgICAgIGZpcnN0
IGNhbGwgdG8gdGhlIG5leHQgYnl0ZWNvZGUuIFRoaXMgbWVhbnQgdGhhdCBpZiBvdXQtb2YtbGlu
ZQorICAgICAgICBTeW1ib2wuaXRlcmF0b3Igb3IgbmV4dCBmdW5jdGlvbnMgcmV0dXJuZWQgYW4g
dW5leHBlY3RlZCBub24tY2VsbAorICAgICAgICB3ZSB3b3VsZCBPU1IgcGFzdCB0aGUgcmVzdCBv
ZiB0aGUgbmV4dCBieXRlY29kZSByYXRoZXIgdGhhbiB0byB0aGUKKyAgICAgICAgZmlyc3QgY2hl
Y2twb2ludC4KKworICAgICAgICBUaGlzIHBhdGNoIGFsc28gbWFrZXMgc3VyZSB3ZSBwcm9wZXJs
eSB0aHJvdyBmb3Igbm9uLW9iamVjdHMgcmV0dXJuZWQKKyAgICAgICAgZnJvbSBlaXRoZXIgb2Yg
dGhlIGFib3ZlIGZ1bmN0aW9ucyBpbiBhbGwgdGllcnMgKGFuZCBhZGRzIHRlc3RzKS4KKworICAg
ICAgICBGaW5hbGx5LCB0aGlzIHBhdGNoIG1ha2VzIGEgc21hbGwgb3B0aW1pemF0aW9uIHdoZXJl
IHdlIGp1c3QgQXJpdGhCaXRPcgorICAgICAgICBBcnJheUl0ZXJhdG9yJ3MgY2xvc2VkIChpbmRl
eCA9PSAtMSkgYW5kIGRvbmUgKGluZGV4ID49IGxlbmd0aCkgY29uZGl0aW9ucworICAgICAgICBy
YXRoZXIgdGhhbiBoYXZlIGFuIGV4dHJhIGJhc2ljIGJsb2NrLgorCisgICAgICAgICogYnl0ZWNv
ZGUvQnl0ZWNvZGVJbmRleC5oOgorICAgICAgICAoSlNDOjpCeXRlY29kZUluZGV4Ojp3aXRoQ2hl
Y2twb2ludCBjb25zdCk6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6bmV4dE9wY29kZUluZGV4IGNvbnN0KToK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6bmV4dENoZWNrcG9pbnQgY29uc3Qp
OgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwcm9ncmVzc1RvTmV4dENoZWNr
cG9pbnQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKToK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbFZhcmlhbnQpOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyk6CisgICAg
ICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5SWQpOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKToKKyAgICAgICAgKEpTQzo6
REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VHZXRCeUlkKToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQ
YXJzZXI6OmhhbmRsZVB1dEJ5VmFsKToKKyAgICAgICAgKiBqaXQvSklUQ2FsbC5jcHA6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbik6CisgICAgICAgICogbGxp
bnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6TExJTlRfU0xPV19Q
QVRIX0RFQ0wpOgorICAgICAgICAoSlNDOjpMTEludDo6aGFuZGxlSXRlcmF0b3JOZXh0Q2hlY2tw
b2ludCk6CisKIDIwMjAtMDQtMjAgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4K
IAogICAgICAgICBDaGVjayBTdHJ1Y3R1cmUgYXR0cmlidXRlcyBpbiBPYmplY3QuYXNzaWduIGV4
aGF1c3RpdmVseQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlSW5kZXguaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUlu
ZGV4LmgKaW5kZXggMTBmYmE0NDA1OGVjOWRmZWQyNTQ4MDlhNmQ3ODMzN2QwMTFhNGI2MS4uNmUy
NjZkM2RhZjNiMTI1ZTg3MzY3NTc1NDA1MmMzMTNjMGU1YTU3MSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXguaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5oCkBAIC02Miw2ICs2Miw3IEBAIHB1
YmxpYzoKICAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4g
KnRoaXMgPT0gZGVsZXRlZFZhbHVlKCk7IH0KIAogICAgIHN0YXRpYyBCeXRlY29kZUluZGV4IGZy
b21CaXRzKHVpbnQzMl90IGJpdHMpOworICAgIEJ5dGVjb2RlSW5kZXggd2l0aENoZWNrcG9pbnQo
dW5zaWduZWQgY2hlY2twb2ludCkgY29uc3QgeyByZXR1cm4gQnl0ZWNvZGVJbmRleChvZmZzZXQo
KSwgY2hlY2twb2ludCk7IH0KIAogICAgIC8vIENvbXBhcmlzb24gb3BlcmF0b3JzLgogICAgIGV4
cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX3BhY2tlZEJpdHMgIT0gaW52
YWxpZE9mZnNldCAmJiBtX3BhY2tlZEJpdHMgIT0gZGVsZXRlZFZhbHVlKCkub2Zmc2V0KCk7IH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKaW5k
ZXggMzRkYTNiMWZjNzUxYmZjZTliZjk1ZGMyNmE5NGEyZDg3ZTkxNTUxNC4uMDc3YjU4YzE4NTQ5
YTc2NTAwNDY2NDU3NTI3ZDIxODQ1NmJjYTM1ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKQEAgLTE3NywxMSArMTc3LDExIEBAIHByaXZh
dGU6CiAgICAgLy8gSGFuZGxlIGNhbGxzLiBUaGlzIHJlc29sdmVzIGlzc3VlcyBzdXJyb3VuZGlu
ZyBpbmxpbmluZyBhbmQgaW50cmluc2ljcy4KICAgICBlbnVtIFRlcm1pbmFsaXR5IHsgVGVybWlu
YWwsIE5vblRlcm1pbmFsIH07CiAgICAgVGVybWluYWxpdHkgaGFuZGxlQ2FsbCgKLSAgICAgICAg
T3BlcmFuZCByZXN1bHQsIE5vZGVUeXBlIG9wLCBJbmxpbmVDYWxsRnJhbWU6OktpbmQsIHVuc2ln
bmVkIGluc3RydWN0aW9uU2l6ZSwKKyAgICAgICAgT3BlcmFuZCByZXN1bHQsIE5vZGVUeXBlIG9w
LCBJbmxpbmVDYWxsRnJhbWU6OktpbmQsIEJ5dGVjb2RlSW5kZXggb3NyRXhpdEluZGV4LAogICAg
ICAgICBOb2RlKiBjYWxsVGFyZ2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIGlu
dCByZWdpc3Rlck9mZnNldCwgQ2FsbExpbmtTdGF0dXMsCiAgICAgICAgIFNwZWN1bGF0ZWRUeXBl
IHByZWRpY3Rpb24pOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENhbGxPcD4KLSAgICBUZXJtaW5h
bGl0eSBoYW5kbGVDYWxsKGNvbnN0IEluc3RydWN0aW9uKiBwYywgTm9kZVR5cGUgb3AsIENhbGxN
b2RlKTsKKyAgICBUZXJtaW5hbGl0eSBoYW5kbGVDYWxsKGNvbnN0IEluc3RydWN0aW9uKiBwYywg
Tm9kZVR5cGUgb3AsIENhbGxNb2RlLCBCeXRlY29kZUluZGV4IG9zckV4aXRJbmRleCk7CiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgQ2FsbE9wPgogICAgIFRlcm1pbmFsaXR5IGhhbmRsZVZhcmFyZ3ND
YWxsKGNvbnN0IEluc3RydWN0aW9uKiBwYywgTm9kZVR5cGUgb3AsIENhbGxNb2RlKTsKICAgICB2
b2lkIGVtaXRGdW5jdGlvbkNoZWNrcyhDYWxsVmFyaWFudCwgTm9kZSogY2FsbFRhcmdldCwgVmly
dHVhbFJlZ2lzdGVyIHRoaXNBcmd1bW50KTsKQEAgLTE5NCw4ICsxOTQsOCBAQCBwcml2YXRlOgog
ICAgIGJvb2wgaGFuZGxlVmFyYXJnc0lubGluaW5nKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBPcGVy
YW5kIHJlc3VsdCwgY29uc3QgQ2FsbExpbmtTdGF0dXMmLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIFZp
cnR1YWxSZWdpc3RlciB0aGlzQXJndW1lbnQsIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHNBcmd1
bWVudCwgdW5zaWduZWQgYXJndW1lbnRzT2Zmc2V0LCBOb2RlVHlwZSBjYWxsT3AsIElubGluZUNh
bGxGcmFtZTo6S2luZCk7CiAgICAgdW5zaWduZWQgZ2V0SW5saW5pbmdCYWxhbmNlKGNvbnN0IENh
bGxMaW5rU3RhdHVzJiwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7CiAgICAgZW51bSBjbGFzcyBD
YWxsT3B0aW1pemF0aW9uUmVzdWx0IHsgT3B0aW1pemVkVG9KdW1wLCBJbmxpbmVkLCBEaWROb3Ro
aW5nIH07Ci0gICAgQ2FsbE9wdGltaXphdGlvblJlc3VsdCBoYW5kbGVDYWxsVmFyaWFudChOb2Rl
KiBjYWxsVGFyZ2V0Tm9kZSwgT3BlcmFuZCByZXN1bHQsIENhbGxWYXJpYW50LCBpbnQgcmVnaXN0
ZXJPZmZzZXQsIFZpcnR1YWxSZWdpc3RlciB0aGlzQXJndW1lbnQsIGludCBhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcywgQnl0ZWNvZGVJbmRleCBuZXh0SW5kZXgsIElubGluZUNhbGxGcmFtZTo6
S2luZCwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgdW5zaWduZWQmIGlubGluaW5nQmFsYW5j
ZSwgQmFzaWNCbG9jayogY29udGludWF0aW9uQmxvY2ssIGJvb2wgbmVlZHNUb0NoZWNrQ2FsbGVl
KTsKLSAgICBDYWxsT3B0aW1pemF0aW9uUmVzdWx0IGhhbmRsZUlubGluaW5nKE5vZGUqIGNhbGxU
YXJnZXROb2RlLCBPcGVyYW5kIHJlc3VsdCwgY29uc3QgQ2FsbExpbmtTdGF0dXMmLCBpbnQgcmVn
aXN0ZXJPZmZzZXQsIFZpcnR1YWxSZWdpc3RlciB0aGlzQXJndW1lbnQsIGludCBhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcywgQnl0ZWNvZGVJbmRleCBuZXh0SW5kZXgsIE5vZGVUeXBlIGNhbGxP
cCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKTsKKyAg
ICBDYWxsT3B0aW1pemF0aW9uUmVzdWx0IGhhbmRsZUNhbGxWYXJpYW50KE5vZGUqIGNhbGxUYXJn
ZXROb2RlLCBPcGVyYW5kIHJlc3VsdCwgQ2FsbFZhcmlhbnQsIGludCByZWdpc3Rlck9mZnNldCwg
VmlydHVhbFJlZ2lzdGVyIHRoaXNBcmd1bWVudCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzLCBCeXRlY29kZUluZGV4IG9zckV4aXRJbmRleCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCBT
cGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCB1bnNpZ25lZCYgaW5saW5pbmdCYWxhbmNlLCBCYXNp
Y0Jsb2NrKiBjb250aW51YXRpb25CbG9jaywgYm9vbCBuZWVkc1RvQ2hlY2tDYWxsZWUpOworICAg
IENhbGxPcHRpbWl6YXRpb25SZXN1bHQgaGFuZGxlSW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5v
ZGUsIE9wZXJhbmQgcmVzdWx0LCBjb25zdCBDYWxsTGlua1N0YXR1cyYsIGludCByZWdpc3Rlck9m
ZnNldCwgVmlydHVhbFJlZ2lzdGVyIHRoaXNBcmd1bWVudCwgaW50IGFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzLCBCeXRlY29kZUluZGV4IG9zckV4aXRJbmRleCwgTm9kZVR5cGUgY2FsbE9wLCBJ
bmxpbmVDYWxsRnJhbWU6OktpbmQsIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24pOwogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIENoZWNrc0Z1bmN0b3I+CiAgICAgdm9pZCBpbmxpbmVDYWxsKE5vZGUq
IGNhbGxUYXJnZXROb2RlLCBPcGVyYW5kIHJlc3VsdCwgQ2FsbFZhcmlhbnQsIGludCByZWdpc3Rl
ck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBJbmxpbmVDYWxsRnJhbWU6
OktpbmQsIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbkJsb2NrLCBjb25zdCBDaGVja3NGdW5jdG9y
JiBpbnNlcnRDaGVja3MpOwogICAgIC8vIEhhbmRsZSBpbnRyaW5zaWMgZnVuY3Rpb25zLiBSZXR1
cm4gdHJ1ZSBpZiBpdCBzdWNjZWVkZWQsIGZhbHNlIGlmIHdlIG5lZWQgdG8gcGxhbnQgYSBjYWxs
LgpAQCAtMjE1LDcgKzIxNSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBoYW5kbGVNb2R1bGVOYW1l
c3BhY2VMb2FkKFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBi
YXNlLCBHZXRCeVN0YXR1cyk7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KLSAg
ICB2b2lkIGhhbmRsZVB1dEJ5VmFsKEJ5dGVjb2RlLCB1bnNpZ25lZCBpbnN0cnVjdGlvblNpemUp
OworICAgIHZvaWQgaGFuZGxlUHV0QnlWYWwoQnl0ZWNvZGUsIEJ5dGVjb2RlSW5kZXggb3NyRXhp
dEluZGV4KTsKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CiAgICAgdm9pZCBoYW5k
bGVQdXRBY2Nlc3NvckJ5SWQoTm9kZVR5cGUsIEJ5dGVjb2RlKTsKICAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgQnl0ZWNvZGU+CkBAIC0yNDcsMTIgKzI0NywxMiBAQCBwcml2YXRlOgogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIE9wPgogICAgIHZvaWQgcGFyc2VHZXRCeUlkKGNvbnN0IEluc3RydWN0aW9u
Kik7CiAgICAgdm9pZCBoYW5kbGVHZXRCeUlkKAotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZGVz
dGluYXRpb24sIFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVy
LCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBHZXRCeVN0YXR1cywgQWNjZXNzVHlwZSwgdW5z
aWduZWQgaW5zdHJ1Y3Rpb25TaXplKTsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRlc3RpbmF0
aW9uLCBTcGVjdWxhdGVkVHlwZSwgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciwgdW5z
aWduZWQgaWRlbnRpZmllck51bWJlciwgR2V0QnlTdGF0dXMsIEFjY2Vzc1R5cGUsIEJ5dGVjb2Rl
SW5kZXggb3NyRXhpdEluZGV4KTsKICAgICB2b2lkIGVtaXRQdXRCeUlkKAogICAgICAgICBOb2Rl
KiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyLCBOb2RlKiB2YWx1ZSwgIGNvbnN0IFB1dEJ5SWRT
dGF0dXMmLCBib29sIGlzRGlyZWN0LCBFQ01BTW9kZSk7CiAgICAgdm9pZCBoYW5kbGVQdXRCeUlk
KAogICAgICAgICBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyLCB1bnNpZ25lZCBpZGVu
dGlmaWVyTnVtYmVyLCBOb2RlKiB2YWx1ZSwgY29uc3QgUHV0QnlJZFN0YXR1cyYsCi0gICAgICAg
IGJvb2wgaXNEaXJlY3QsIHVuc2lnbmVkIGludHJ1Y3Rpb25TaXplLCBFQ01BTW9kZSk7CisgICAg
ICAgIGJvb2wgaXNEaXJlY3QsIEJ5dGVjb2RlSW5kZXggb3NyRXhpdEluZGV4LCBFQ01BTW9kZSk7
CiAKICAgICB2b2lkIGhhbmRsZURlbGV0ZUJ5SWQoCiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBk
ZXN0aW5hdGlvbiwgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciwgdW5zaWduZWQgaWRl
bnRpZmllck51bWJlciwgRGVsZXRlQnlTdGF0dXMsIEVDTUFNb2RlKTsKQEAgLTI5Miw5ICsyOTIs
MTIgQEAgcHJpdmF0ZToKICAgICB2b2lkIGxpbmtCbG9jayhCYXNpY0Jsb2NrKiwgVmVjdG9yPEJh
c2ljQmxvY2sqPiYgcG9zc2libGVUYXJnZXRzKTsKICAgICB2b2lkIGxpbmtCbG9ja3MoVmVjdG9y
PEJhc2ljQmxvY2sqPiYgdW5saW5rZWRCbG9ja3MsIFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHBvc3Np
YmxlVGFyZ2V0cyk7CiAgICAgCisgICAgQnl0ZWNvZGVJbmRleCBuZXh0Qnl0ZWNvZGVJbmRleCgp
IGNvbnN0IHsgcmV0dXJuIEJ5dGVjb2RlSW5kZXgobV9jdXJyZW50SW5kZXgub2Zmc2V0KCkgKyBt
X2N1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKTsgfQorICAgIEJ5dGVjb2RlSW5kZXggbmV4dENo
ZWNrcG9pbnQoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRJbmRleC53aXRoQ2hlY2twb2ludCht
X2N1cnJlbnRJbmRleC5jaGVja3BvaW50KCkgKyAxKTsgfQorCiAgICAgdm9pZCBwcm9ncmVzc1Rv
TmV4dENoZWNrcG9pbnQoKQogICAgIHsKLSAgICAgICAgbV9jdXJyZW50SW5kZXggPSBCeXRlY29k
ZUluZGV4KG1fY3VycmVudEluZGV4Lm9mZnNldCgpLCBtX2N1cnJlbnRJbmRleC5jaGVja3BvaW50
KCkgKyAxKTsKKyAgICAgICAgbV9jdXJyZW50SW5kZXggPSBuZXh0Q2hlY2twb2ludCgpOwogICAg
ICAgICAvLyBBdCB0aGlzIHBvaW50LCBpdCdzIGFnYWluIE9LIHRvIE9TUiBleGl0LgogICAgICAg
ICBtX2V4aXRPSyA9IHRydWU7CiAgICAgICAgIHByb2Nlc3NTZXRMb2NhbFF1ZXVlKCk7CkBAIC0x
MzA1LDcgKzEzMDgsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjphZGRKdW1wVG8odW5zaWduZWQg
Ynl0ZWNvZGVJbmRleCkKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ2FsbE9wPgotQnl0ZUNvZGVQ
YXJzZXI6OlRlcm1pbmFsaXR5IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKGNvbnN0IEluc3Ry
dWN0aW9uKiBwYywgTm9kZVR5cGUgb3AsIENhbGxNb2RlIGNhbGxNb2RlKQorQnl0ZUNvZGVQYXJz
ZXI6OlRlcm1pbmFsaXR5IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKGNvbnN0IEluc3RydWN0
aW9uKiBwYywgTm9kZVR5cGUgb3AsIENhbGxNb2RlIGNhbGxNb2RlLCBCeXRlY29kZUluZGV4IG9z
ckV4aXRJbmRleCkKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPENhbGxPcD4oKTsKICAg
ICBOb2RlKiBjYWxsVGFyZ2V0ID0gZ2V0KGNhbGxlZUZvcihieXRlY29kZSwgbV9jdXJyZW50SW5k
ZXguY2hlY2twb2ludCgpKSk7CkBAIC0xMzE2LDggKzEzMTksOSBAQCBCeXRlQ29kZVBhcnNlcjo6
VGVybWluYWxpdHkgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24q
IHBjLCBObwogICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2Jhc2VsaW5lTWFwLCBtX2ljQ29u
dGV4dFN0YWNrKTsKIAogICAgIElubGluZUNhbGxGcmFtZTo6S2luZCBraW5kID0gSW5saW5lQ2Fs
bEZyYW1lOjpraW5kRm9yKGNhbGxNb2RlKTsKKyAgICBBU1NFUlQob3NyRXhpdEluZGV4KTsKIAot
ICAgIHJldHVybiBoYW5kbGVDYWxsKGRlc3RpbmF0aW9uRm9yKGJ5dGVjb2RlLCBtX2N1cnJlbnRJ
bmRleC5jaGVja3BvaW50KCksIEpJVFR5cGU6OkRGR0pJVCksIG9wLCBraW5kLCBwYy0+c2l6ZSgp
LCBjYWxsVGFyZ2V0LAorICAgIHJldHVybiBoYW5kbGVDYWxsKGRlc3RpbmF0aW9uRm9yKGJ5dGVj
b2RlLCBtX2N1cnJlbnRJbmRleC5jaGVja3BvaW50KCksIEpJVFR5cGU6OkRGR0pJVCksIG9wLCBr
aW5kLCBvc3JFeGl0SW5kZXgsIGNhbGxUYXJnZXQsCiAgICAgICAgIGFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzRm9yKGJ5dGVjb2RlLCBtX2N1cnJlbnRJbmRleC5jaGVja3BvaW50KCkpLCByZWdp
c3Rlck9mZnNldCwgY2FsbExpbmtTdGF0dXMsIGdldFByZWRpY3Rpb24oKSk7CiB9CiAKQEAgLTEz
MjgsNyArMTMzMiw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnJlZmluZVN0YXRpY2FsbHkoQ2Fs
bExpbmtTdGF0dXMmIGNhbGxMaW5rU3RhdHVzLCBOb2RlKiBjYWxsCiB9CiAKIEJ5dGVDb2RlUGFy
c2VyOjpUZXJtaW5hbGl0eSBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbCgKLSAgICBPcGVyYW5k
IHJlc3VsdCwgTm9kZVR5cGUgb3AsIElubGluZUNhbGxGcmFtZTo6S2luZCBraW5kLCB1bnNpZ25l
ZCBpbnN0cnVjdGlvblNpemUsCisgICAgT3BlcmFuZCByZXN1bHQsIE5vZGVUeXBlIG9wLCBJbmxp
bmVDYWxsRnJhbWU6OktpbmQga2luZCwgQnl0ZWNvZGVJbmRleCBvc3JFeGl0SW5kZXgsCiAgICAg
Tm9kZSogY2FsbFRhcmdldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBpbnQgcmVn
aXN0ZXJPZmZzZXQsCiAgICAgQ2FsbExpbmtTdGF0dXMgY2FsbExpbmtTdGF0dXMsIFNwZWN1bGF0
ZWRUeXBlIHByZWRpY3Rpb24pCiB7CkBAIC0xMzQ1LDcgKzEzNDksNyBAQCBCeXRlQ29kZVBhcnNl
cjo6VGVybWluYWxpdHkgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwoCiAKICAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIHRoaXNBcmd1bWVudCA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5j
bHVkaW5nVGhpcygwLCByZWdpc3Rlck9mZnNldCk7CiAgICAgICAgIGF1dG8gb3B0aW1pemF0aW9u
UmVzdWx0ID0gaGFuZGxlSW5saW5pbmcoY2FsbFRhcmdldCwgcmVzdWx0LCBjYWxsTGlua1N0YXR1
cywgcmVnaXN0ZXJPZmZzZXQsIHRoaXNBcmd1bWVudCwKLSAgICAgICAgICAgIGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzLCBCeXRlY29kZUluZGV4KG1fY3VycmVudEluZGV4Lm9mZnNldCgpICsg
aW5zdHJ1Y3Rpb25TaXplKSwgb3AsIGtpbmQsIHByZWRpY3Rpb24pOworICAgICAgICAgICAgYXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIG9zckV4aXRJbmRleCwgb3AsIGtpbmQsIHByZWRpY3Rp
b24pOwogICAgICAgICBpZiAob3B0aW1pemF0aW9uUmVzdWx0ID09IENhbGxPcHRpbWl6YXRpb25S
ZXN1bHQ6Ok9wdGltaXplZFRvSnVtcCkKICAgICAgICAgICAgIHJldHVybiBUZXJtaW5hbDsKICAg
ICAgICAgaWYgKG9wdGltaXphdGlvblJlc3VsdCA9PSBDYWxsT3B0aW1pemF0aW9uUmVzdWx0OjpJ
bmxpbmVkKSB7CkBAIC0xODMwLDcgKzE4MzQsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjppbmxp
bmVDYWxsKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBPcGVyYW5kIHJlc3VsdCwgQ2FsbFZhcmlhbgog
ICAgIG1fY3VycmVudEluc3RydWN0aW9uID0gc2F2ZWRDdXJyZW50SW5zdHJ1Y3Rpb247CiB9CiAK
LUJ5dGVDb2RlUGFyc2VyOjpDYWxsT3B0aW1pemF0aW9uUmVzdWx0IEJ5dGVDb2RlUGFyc2VyOjpo
YW5kbGVDYWxsVmFyaWFudChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgT3BlcmFuZCByZXN1bHQsIENh
bGxWYXJpYW50IGNhbGxlZSwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBWaXJ0dWFsUmVnaXN0ZXIgdGhp
c0FyZ3VtZW50LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIEJ5dGVjb2RlSW5kZXgg
bmV4dEluZGV4LCBJbmxpbmVDYWxsRnJhbWU6OktpbmQga2luZCwgU3BlY3VsYXRlZFR5cGUgcHJl
ZGljdGlvbiwgdW5zaWduZWQmIGlubGluaW5nQmFsYW5jZSwgQmFzaWNCbG9jayogY29udGludWF0
aW9uQmxvY2ssIGJvb2wgbmVlZHNUb0NoZWNrQ2FsbGVlKQorQnl0ZUNvZGVQYXJzZXI6OkNhbGxP
cHRpbWl6YXRpb25SZXN1bHQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGxWYXJpYW50KE5vZGUq
IGNhbGxUYXJnZXROb2RlLCBPcGVyYW5kIHJlc3VsdCwgQ2FsbFZhcmlhbnQgY2FsbGVlLCBpbnQg
cmVnaXN0ZXJPZmZzZXQsIFZpcnR1YWxSZWdpc3RlciB0aGlzQXJndW1lbnQsIGludCBhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcywgQnl0ZWNvZGVJbmRleCBvc3JFeGl0SW5kZXgsIElubGluZUNh
bGxGcmFtZTo6S2luZCBraW5kLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCB1bnNpZ25lZCYg
aW5saW5pbmdCYWxhbmNlLCBCYXNpY0Jsb2NrKiBjb250aW51YXRpb25CbG9jaywgYm9vbCBuZWVk
c1RvQ2hlY2tDYWxsZWUpCiB7CiAgICAgVkVSQk9TRV9MT0coIiAgICBDb25zaWRlcmluZyBjYWxs
ZWUgIiwgY2FsbGVlLCAiXG4iKTsKIApAQCAtMTg1OCw3ICsxODYyLDcgQEAgQnl0ZUNvZGVQYXJz
ZXI6OkNhbGxPcHRpbWl6YXRpb25SZXN1bHQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGxWYXJp
YW50KE5vZGUqIGMKICAgICAgICAgZW1pdEFyZ3VtZW50UGhhbnRvbXMocmVnaXN0ZXJPZmZzZXQs
IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKICAgICAgICAgaW5saW5pbmdCYWxhbmNlLS07
CiAgICAgICAgIGlmIChjb250aW51YXRpb25CbG9jaykgewotICAgICAgICAgICAgbV9jdXJyZW50
SW5kZXggPSBuZXh0SW5kZXg7CisgICAgICAgICAgICBtX2N1cnJlbnRJbmRleCA9IG9zckV4aXRJ
bmRleDsKICAgICAgICAgICAgIG1fZXhpdE9LID0gdHJ1ZTsKICAgICAgICAgICAgIHByb2Nlc3NT
ZXRMb2NhbFF1ZXVlKCk7CiAgICAgICAgICAgICBhZGRKdW1wVG8oY29udGludWF0aW9uQmxvY2sp
OwpAQCAtMjA1NCw3ICsyMDU4LDcgQEAgQnl0ZUNvZGVQYXJzZXI6OkNhbGxPcHRpbWl6YXRpb25S
ZXN1bHQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKAogICAgIE5vZGUqIGNhbGxUYXJn
ZXROb2RlLCBPcGVyYW5kIHJlc3VsdCwgY29uc3QgQ2FsbExpbmtTdGF0dXMmIGNhbGxMaW5rU3Rh
dHVzLAogICAgIGludCByZWdpc3Rlck9mZnNldCwgVmlydHVhbFJlZ2lzdGVyIHRoaXNBcmd1bWVu
dCwKICAgICBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsCi0gICAgQnl0ZWNvZGVJbmRl
eCBuZXh0SW5kZXgsIE5vZGVUeXBlIGNhbGxPcCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kIGtpbmQs
IFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24pCisgICAgQnl0ZWNvZGVJbmRleCBvc3JFeGl0SW5k
ZXgsIE5vZGVUeXBlIGNhbGxPcCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kIGtpbmQsIFNwZWN1bGF0
ZWRUeXBlIHByZWRpY3Rpb24pCiB7CiAgICAgVkVSQk9TRV9MT0coIkhhbmRsaW5nIGlubGluaW5n
Li4uXG5TdGFjazogIiwgY3VycmVudENvZGVPcmlnaW4oKSwgIlxuIik7CiAgICAgCkBAIC0yMDY3
LDcgKzIwNzEsNyBAQCBCeXRlQ29kZVBhcnNlcjo6Q2FsbE9wdGltaXphdGlvblJlc3VsdCBCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoCiAgICAgaWYgKCFjYWxsTGlua1N0YXR1cy5jb3Vs
ZFRha2VTbG93UGF0aCgpICYmIGNhbGxMaW5rU3RhdHVzLnNpemUoKSA9PSAxKSB7CiAgICAgICAg
IHJldHVybiBoYW5kbGVDYWxsVmFyaWFudCgKICAgICAgICAgICAgIGNhbGxUYXJnZXROb2RlLCBy
ZXN1bHQsIGNhbGxMaW5rU3RhdHVzWzBdLCByZWdpc3Rlck9mZnNldCwgdGhpc0FyZ3VtZW50LAot
ICAgICAgICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIG5leHRJbmRleCwga2luZCwg
cHJlZGljdGlvbiwgaW5saW5pbmdCYWxhbmNlLCBudWxscHRyLCB0cnVlKTsKKyAgICAgICAgICAg
IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBvc3JFeGl0SW5kZXgsIGtpbmQsIHByZWRpY3Rp
b24sIGlubGluaW5nQmFsYW5jZSwgbnVsbHB0ciwgdHJ1ZSk7CiAgICAgfQogCiAgICAgLy8gV2Ug
bmVlZCB0byBjcmVhdGUgc29tZSBraW5kIG9mIHN3aXRjaCBvdmVyIGNhbGxlZS4gRm9yIG5vdyB3
ZSBvbmx5IGRvIHRoaXMgaWYgd2UgYmVsaWV2ZSB0aGF0CkBAIC0yMTU3LDcgKzIxNjEsNyBAQCBC
eXRlQ29kZVBhcnNlcjo6Q2FsbE9wdGltaXphdGlvblJlc3VsdCBCeXRlQ29kZVBhcnNlcjo6aGFu
ZGxlSW5saW5pbmcoCiAgICAgICAgIAogICAgICAgICBhdXRvIGlubGluaW5nUmVzdWx0ID0gaGFu
ZGxlQ2FsbFZhcmlhbnQoCiAgICAgICAgICAgICBteUNhbGxUYXJnZXROb2RlLCByZXN1bHQsIGNh
bGxMaW5rU3RhdHVzW2ldLCByZWdpc3Rlck9mZnNldCwKLSAgICAgICAgICAgIHRoaXNBcmd1bWVu
dCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIG5leHRJbmRleCwga2luZCwgcHJlZGljdGlv
biwKKyAgICAgICAgICAgIHRoaXNBcmd1bWVudCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMs
IG9zckV4aXRJbmRleCwga2luZCwgcHJlZGljdGlvbiwKICAgICAgICAgICAgIGlubGluaW5nQmFs
YW5jZSwgY29udGludWF0aW9uQmxvY2ssIGZhbHNlKTsKICAgICAgICAgCiAgICAgICAgIGlmIChp
bmxpbmluZ1Jlc3VsdCA9PSBDYWxsT3B0aW1pemF0aW9uUmVzdWx0OjpEaWROb3RoaW5nKSB7CkBA
IC0yMjA2LDcgKzIyMTAsNyBAQCBCeXRlQ29kZVBhcnNlcjo6Q2FsbE9wdGltaXphdGlvblJlc3Vs
dCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoCiAgICAgICAgIFZFUkJPU0VfTE9HKCJj
b3VsZFRha2VTbG93UGF0aCB3YXMgZmFsc2VcbiIpOwogICAgIH0KIAotICAgIG1fY3VycmVudElu
ZGV4ID0gbmV4dEluZGV4OworICAgIG1fY3VycmVudEluZGV4ID0gb3NyRXhpdEluZGV4OwogICAg
IG1fZXhpdE9LID0gdHJ1ZTsgLy8gT3JpZ2luIGNoYW5nZWQsIHNvIGl0J3MgZmluZSB0byBleGl0
IGFnYWluLgogICAgIHByb2Nlc3NTZXRMb2NhbFF1ZXVlKCk7CiAKQEAgLTQ0ODcsNyArNDQ5MSw3
IEBAIE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpzdG9yZShOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVu
dGlmaWVyLCBjb25zdCBQdXRCeUlkVmFyaWFuCiAKIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZUdldEJ5SWQoCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRlc3RpbmF0aW9uLCBTcGVjdWxhdGVkVHlw
ZSBwcmVkaWN0aW9uLCBOb2RlKiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyIGlkZW50aWZpZXIs
IHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsCi0gICAgR2V0QnlTdGF0dXMgZ2V0QnlTdGF0dXMs
IEFjY2Vzc1R5cGUgdHlwZSwgdW5zaWduZWQgaW5zdHJ1Y3Rpb25TaXplKQorICAgIEdldEJ5U3Rh
dHVzIGdldEJ5U3RhdHVzLCBBY2Nlc3NUeXBlIHR5cGUsIEJ5dGVjb2RlSW5kZXggb3NyRXhpdElu
ZGV4KQogewogICAgIC8vIEF0dGVtcHQgdG8gcmVkdWNlIHRoZSBzZXQgb2YgdGhpbmdzIGluIHRo
ZSBHZXRCeVN0YXR1cy4KICAgICBpZiAoYmFzZS0+b3AoKSA9PSBOZXdPYmplY3QpIHsKQEAgLTQ2
NjcsNyArNDY3MSw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5SWQoCiAgICAg
YWRkVG9HcmFwaChFeGl0T0spOwogICAgIAogICAgIGhhbmRsZUNhbGwoCi0gICAgICAgIGRlc3Rp
bmF0aW9uLCBDYWxsLCBJbmxpbmVDYWxsRnJhbWU6OkdldHRlckNhbGwsIGluc3RydWN0aW9uU2l6
ZSwKKyAgICAgICAgZGVzdGluYXRpb24sIENhbGwsIElubGluZUNhbGxGcmFtZTo6R2V0dGVyQ2Fs
bCwgb3NyRXhpdEluZGV4LAogICAgICAgICBnZXR0ZXIsIG51bWJlck9mUGFyYW1ldGVycyAtIDEs
IHJlZ2lzdGVyT2Zmc2V0LCAqdmFyaWFudC5jYWxsTGlua1N0YXR1cygpLCBwcmVkaWN0aW9uKTsK
IH0KIApAQCAtNDc4MCw3ICs0Nzg0LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6ZW1pdFB1dEJ5
SWQoCiAKIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgTm9kZSogYmFz
ZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVt
YmVyLCBOb2RlKiB2YWx1ZSwKLSAgICBjb25zdCBQdXRCeUlkU3RhdHVzJiBwdXRCeUlkU3RhdHVz
LCBib29sIGlzRGlyZWN0LCB1bnNpZ25lZCBpbnN0cnVjdGlvblNpemUsIEVDTUFNb2RlIGVjbWFN
b2RlKQorICAgIGNvbnN0IFB1dEJ5SWRTdGF0dXMmIHB1dEJ5SWRTdGF0dXMsIGJvb2wgaXNEaXJl
Y3QsIEJ5dGVjb2RlSW5kZXggb3NyRXhpdEluZGV4LCBFQ01BTW9kZSBlY21hTW9kZSkKIHsKICAg
ICBpZiAoIXB1dEJ5SWRTdGF0dXMuaXNTaW1wbGUoKSB8fCAhcHV0QnlJZFN0YXR1cy5udW1WYXJp
YW50cygpIHx8ICFPcHRpb25zOjp1c2VBY2Nlc3NJbmxpbmluZygpKSB7CiAgICAgICAgIGlmICgh
cHV0QnlJZFN0YXR1cy5pc1NldCgpKQpAQCAtNDk1MCw3ICs0OTU0LDcgQEAgdm9pZCBCeXRlQ29k
ZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgKICAgICAKICAgICAgICAgaGFuZGxlQ2FsbCgKICAgICAg
ICAgICAgIFZpcnR1YWxSZWdpc3RlcigpLCBDYWxsLCBJbmxpbmVDYWxsRnJhbWU6OlNldHRlckNh
bGwsCi0gICAgICAgICAgICBpbnN0cnVjdGlvblNpemUsIHNldHRlciwgbnVtYmVyT2ZQYXJhbWV0
ZXJzIC0gMSwgcmVnaXN0ZXJPZmZzZXQsCisgICAgICAgICAgICBvc3JFeGl0SW5kZXgsIHNldHRl
ciwgbnVtYmVyT2ZQYXJhbWV0ZXJzIC0gMSwgcmVnaXN0ZXJPZmZzZXQsCiAgICAgICAgICAgICAq
dmFyaWFudC5jYWxsTGlua1N0YXR1cygpLCBTcGVjT3RoZXIpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQpAQCAtNDk4Myw3ICs0OTg3LDYgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VHZXRC
eUlkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVW5pcXVlZFN0
cmluZ0ltcGwqIHVpZCA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVudGlmaWVyTnVtYmVyXTsK
ICAgICAKICAgICBBY2Nlc3NUeXBlIHR5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkOwotICAgIHVu
c2lnbmVkIG9wY29kZUxlbmd0aCA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpOwogICAgIGlm
IChPcDo6b3Bjb2RlSUQgPT0gb3BfdHJ5X2dldF9ieV9pZCkKICAgICAgICAgdHlwZSA9IEFjY2Vz
c1R5cGU6OlRyeUdldEJ5SWQ7CiAgICAgZWxzZSBpZiAoT3A6Om9wY29kZUlEID09IG9wX2dldF9i
eV9pZF9kaXJlY3QpCkBAIC00OTk0LDcgKzQ5OTcsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpw
YXJzZUdldEJ5SWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICAg
ICAgbV9pbmxpbmVTdGFja1RvcC0+bV9iYXNlbGluZU1hcCwgbV9pY0NvbnRleHRTdGFjaywKICAg
ICAgICAgY3VycmVudENvZGVPcmlnaW4oKSk7CiAKLSAgICBoYW5kbGVHZXRCeUlkKGJ5dGVjb2Rl
Lm1fZHN0LCBwcmVkaWN0aW9uLCBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJs
b2NrLCB1aWQpLCBpZGVudGlmaWVyTnVtYmVyLCBnZXRCeVN0YXR1cywgdHlwZSwgb3Bjb2RlTGVu
Z3RoKTsKKyAgICBoYW5kbGVHZXRCeUlkKGJ5dGVjb2RlLm1fZHN0LCBwcmVkaWN0aW9uLCBiYXNl
LCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxv
Y2sobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLCB1aWQpLCBpZGVudGlmaWVyTnVt
YmVyLCBnZXRCeVN0YXR1cywgdHlwZSwgbmV4dEJ5dGVjb2RlSW5kZXgoKSk7CiB9CiAKIHN0YXRp
YyB1aW50NjRfdCBtYWtlRHluYW1pY1Zhck9wSW5mbyh1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVy
LCB1bnNpZ25lZCBnZXRQdXRJbmZvKQpAQCAtNTk0Miw3ICs1OTQ1LDcgQEAgdm9pZCBCeXRlQ29k
ZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgIH0KIAogICAg
ICAgICAgICAgaWYgKHNob3VsZENvbXBpbGVBc0dldEJ5SWQpCi0gICAgICAgICAgICAgICAgaGFu
ZGxlR2V0QnlJZChieXRlY29kZS5tX2RzdCwgcHJlZGljdGlvbiwgYmFzZSwgaWRlbnRpZmllciwg
aWRlbnRpZmllck51bWJlciwgZ2V0QnlTdGF0dXMsIEFjY2Vzc1R5cGU6OkdldEJ5SWQsIGN1cnJl
bnRJbnN0cnVjdGlvbi0+c2l6ZSgpKTsKKyAgICAgICAgICAgICAgICBoYW5kbGVHZXRCeUlkKGJ5
dGVjb2RlLm1fZHN0LCBwcmVkaWN0aW9uLCBiYXNlLCBpZGVudGlmaWVyLCBpZGVudGlmaWVyTnVt
YmVyLCBnZXRCeVN0YXR1cywgQWNjZXNzVHlwZTo6R2V0QnlJZCwgbmV4dEJ5dGVjb2RlSW5kZXgo
KSk7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlN
b2RlID0gZ2V0QXJyYXlNb2RlKGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jaykubV9hcnJheVBy
b2ZpbGUsIEFycmF5OjpSZWFkKTsKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2UgY291bGQg
Y29uc2lkZXIgbWFraW5nIHRoaXMgbm90IHZhcmFyZywgc2luY2UgaXQgb25seSB1c2VzIHRocmVl
IGNoaWxkCkBAIC01OTc1LDExICs1OTc4LDExIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNl
QmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX3B1dF9i
eV92YWxfZGlyZWN0OgotICAgICAgICAgICAgaGFuZGxlUHV0QnlWYWwoY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFB1dEJ5VmFsRGlyZWN0PigpLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSk7
CisgICAgICAgICAgICBoYW5kbGVQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0
QnlWYWxEaXJlY3Q+KCksIG5leHRCeXRlY29kZUluZGV4KCkpOwogICAgICAgICAgICAgTkVYVF9P
UENPREUob3BfcHV0X2J5X3ZhbF9kaXJlY3QpOwogCiAgICAgICAgIGNhc2Ugb3BfcHV0X2J5X3Zh
bDogewotICAgICAgICAgICAgaGFuZGxlUHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFB1dEJ5VmFsPigpLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSk7CisgICAgICAgICAgICBo
YW5kbGVQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWw+KCksIG5leHRC
eXRlY29kZUluZGV4KCkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfcHV0X2J5X3ZhbCk7
CiAgICAgICAgIH0KIApAQCAtNjA3MSw3ICs2MDc0LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6
cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNr
VG9wLT5tX2Jhc2VsaW5lTWFwLCBtX2ljQ29udGV4dFN0YWNrLAogICAgICAgICAgICAgICAgIGN1
cnJlbnRDb2RlT3JpZ2luKCksIG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVudGlmaWVyTnVtYmVy
XSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGhhbmRsZVB1dEJ5SWQoYmFzZSwgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1faW5s
aW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywgdWlkKSwgaWRlbnRpZmllck51bWJlciwgdmFs
dWUsIHB1dEJ5SWRTdGF0dXMsIGRpcmVjdCwgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCksIGJ5
dGVjb2RlLm1fZmxhZ3MuZWNtYU1vZGUoKSk7CisgICAgICAgICAgICBoYW5kbGVQdXRCeUlkKGJh
c2UsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVC
bG9jayhtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssIHVpZCksIGlkZW50aWZpZXJO
dW1iZXIsIHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBkaXJlY3QsIG5leHRCeXRlY29kZUluZGV4KCks
IGJ5dGVjb2RlLm1fZmxhZ3MuZWNtYU1vZGUoKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShv
cF9wdXRfYnlfaWQpOwogICAgICAgICB9CiAKQEAgLTY2MTQsMTMgKzY2MTcsMTMgQEAgdm9pZCBC
eXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgfQogCiAg
ICAgICAgIGNhc2Ugb3BfY2FsbDoKLSAgICAgICAgICAgIGhhbmRsZUNhbGw8T3BDYWxsPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIENhbGwsIENhbGxNb2RlOjpSZWd1bGFyKTsKKyAgICAgICAgICAgIGhh
bmRsZUNhbGw8T3BDYWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIENhbGwsIENhbGxNb2RlOjpSZWd1
bGFyLCBuZXh0Qnl0ZWNvZGVJbmRleCgpKTsKICAgICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NB
R0UobV9jdXJyZW50SW5zdHJ1Y3Rpb24gPT0gY3VycmVudEluc3RydWN0aW9uLCAiaGFuZGxlQ2Fs
bCwgd2hpY2ggbWF5IGhhdmUgaW5saW5lZCB0aGUgY2FsbGVlLCB0cmFzaGVkIG1fY3VycmVudElu
c3RydWN0aW9uIik7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9jYWxsKTsKIAogICAgICAg
ICBjYXNlIG9wX3RhaWxfY2FsbDogewogICAgICAgICAgICAgZmx1c2hGb3JSZXR1cm4oKTsKLSAg
ICAgICAgICAgIFRlcm1pbmFsaXR5IHRlcm1pbmFsaXR5ID0gaGFuZGxlQ2FsbDxPcFRhaWxDYWxs
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIFRhaWxDYWxsLCBDYWxsTW9kZTo6VGFpbCk7CisgICAgICAg
ICAgICBUZXJtaW5hbGl0eSB0ZXJtaW5hbGl0eSA9IGhhbmRsZUNhbGw8T3BUYWlsQ2FsbD4oY3Vy
cmVudEluc3RydWN0aW9uLCBUYWlsQ2FsbCwgQ2FsbE1vZGU6OlRhaWwsIG5leHRCeXRlY29kZUlu
ZGV4KCkpOwogICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX2N1cnJlbnRJbnN0cnVj
dGlvbiA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24sICJoYW5kbGVDYWxsLCB3aGljaCBtYXkgaGF2ZSBp
bmxpbmVkIHRoZSBjYWxsZWUsIHRyYXNoZWQgbV9jdXJyZW50SW5zdHJ1Y3Rpb24iKTsKICAgICAg
ICAgICAgIC8vIElmIHRoZSBjYWxsIGlzIHRlcm1pbmFsIHRoZW4gd2Ugc2hvdWxkIG5vdCBwYXJz
ZSBhbnkgZnVydGhlciBieXRlY29kZXMgYXMgdGhlIFRhaWxDYWxsIHdpbGwgZXhpdCB0aGUgZnVu
Y3Rpb24uCiAgICAgICAgICAgICAvLyBJZiB0aGUgY2FsbCBpcyBub3QgdGVybWluYWwsIGhvd2V2
ZXIsIHRoZW4gd2Ugd2FudCB0aGUgc3Vic2VxdWVudCBvcF9yZXQvb3Bfam1wIHRvIHVwZGF0ZSBt
ZXRhZGF0YSBhbmQgY2xlYW4KQEAgLTY2MzMsNyArNjYzNiw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJz
ZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgIH0KIAogICAgICAgICBjYXNl
IG9wX2NvbnN0cnVjdDoKLSAgICAgICAgICAgIGhhbmRsZUNhbGw8T3BDb25zdHJ1Y3Q+KGN1cnJl
bnRJbnN0cnVjdGlvbiwgQ29uc3RydWN0LCBDYWxsTW9kZTo6Q29uc3RydWN0KTsKKyAgICAgICAg
ICAgIGhhbmRsZUNhbGw8T3BDb25zdHJ1Y3Q+KGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29uc3RydWN0
LCBDYWxsTW9kZTo6Q29uc3RydWN0LCBuZXh0Qnl0ZWNvZGVJbmRleCgpKTsKICAgICAgICAgICAg
IEFTU0VSVF9XSVRIX01FU1NBR0UobV9jdXJyZW50SW5zdHJ1Y3Rpb24gPT0gY3VycmVudEluc3Ry
dWN0aW9uLCAiaGFuZGxlQ2FsbCwgd2hpY2ggbWF5IGhhdmUgaW5saW5lZCB0aGUgY2FsbGVlLCB0
cmFzaGVkIG1fY3VycmVudEluc3RydWN0aW9uIik7CiAgICAgICAgICAgICBORVhUX09QQ09ERShv
cF9jb25zdHJ1Y3QpOwogICAgICAgICAgICAgCkBAIC02NzQ3LDcgKzY3NTAsNyBAQCB2b2lkIEJ5
dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgICAg
IHNldChieXRlY29kZS5tX25leHQsIG5leHQpOwogCiAgICAgICAgICAgICAgICAgLy8gRG8gb3Vy
IHNldCBsb2NhbHMuIFdlIGRvbid0IHdhbnQgdG8gZXhpdCBiYWNrd2FyZHMgc28gbW92ZSBvdXIg
ZXhpdCB0byB0aGUgbmV4dCBieXRlY29kZS4KLSAgICAgICAgICAgICAgICBtX2N1cnJlbnRJbmRl
eCA9IEJ5dGVjb2RlSW5kZXgobV9jdXJyZW50SW5kZXgub2Zmc2V0KCkgKyBjdXJyZW50SW5zdHJ1
Y3Rpb24tPnNpemUoKSk7CisgICAgICAgICAgICAgICAgbV9jdXJyZW50SW5kZXggPSBuZXh0Qnl0
ZWNvZGVJbmRleCgpOwogICAgICAgICAgICAgICAgIG1fZXhpdE9LID0gdHJ1ZTsKICAgICAgICAg
ICAgICAgICBwcm9jZXNzU2V0TG9jYWxRdWV1ZSgpOwogCkBAIC02NzY2LDcgKzY3NjksNyBAQCB2
b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAg
ICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWdlbmVyYXRlZENhc2Up
OwogCi0gICAgICAgICAgICAgICAgVGVybWluYWxpdHkgdGVybWluYWxpdHkgPSBoYW5kbGVDYWxs
PE9wSXRlcmF0b3JPcGVuPihjdXJyZW50SW5zdHJ1Y3Rpb24sIENhbGwsIENhbGxNb2RlOjpSZWd1
bGFyKTsKKyAgICAgICAgICAgICAgICBUZXJtaW5hbGl0eSB0ZXJtaW5hbGl0eSA9IGhhbmRsZUNh
bGw8T3BJdGVyYXRvck9wZW4+KGN1cnJlbnRJbnN0cnVjdGlvbiwgQ2FsbCwgQ2FsbE1vZGU6OlJl
Z3VsYXIsIG5leHRDaGVja3BvaW50KCkpOwogICAgICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQo
dGVybWluYWxpdHksIHRlcm1pbmFsaXR5ID09IE5vblRlcm1pbmFsKTsKICAgICAgICAgICAgICAg
ICBwcm9ncmVzc1RvTmV4dENoZWNrcG9pbnQoKTsKIApAQCAtNjc5OCw3ICs2ODAxLDYgQEAgdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG1fZ3JhcGguaWRlbnRpZmllcnMo
KS5lbnN1cmUobmV4dEltcGwpOwogCiAgICAgICAgICAgICAgICAgICAgIEFjY2Vzc1R5cGUgdHlw
ZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWQ7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9w
Y29kZUxlbmd0aCA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpOwogCiAgICAgICAgICAgICAg
ICAgICAgIEdldEJ5U3RhdHVzIGdldEJ5U3RhdHVzID0gR2V0QnlTdGF0dXM6OmNvbXB1dGVGb3Io
CiAgICAgICAgICAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxv
Y2ssCkBAIC02ODA2LDEwICs2ODA4LDEwIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxv
Y2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q29kZU9y
aWdpbigpKTsKIAogCi0gICAgICAgICAgICAgICAgICAgIGhhbmRsZUdldEJ5SWQoYnl0ZWNvZGUu
bV9uZXh0LCBwcmVkaWN0aW9uLCBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9t
SW1tb3J0YWxJZGVudGlmaWVyKG5leHRJbXBsKSwgaWRlbnRpZmllck51bWJlciwgZ2V0QnlTdGF0
dXMsIHR5cGUsIG9wY29kZUxlbmd0aCk7CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZUdldEJ5
SWQoYnl0ZWNvZGUubV9uZXh0LCBwcmVkaWN0aW9uLCBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKG5leHRJbXBsKSwgaWRlbnRpZmllck51bWJl
ciwgZ2V0QnlTdGF0dXMsIHR5cGUsIG5leHRCeXRlY29kZUluZGV4KCkpOwogCiAgICAgICAgICAg
ICAgICAgICAgIC8vIERvIG91ciBzZXQgbG9jYWxzLiBXZSBkb24ndCB3YW50IHRvIHJ1biBvdXIg
Z2V0X2J5X2lkIGFnYWluIHNvIHdlIG1vdmUgdG8gdGhlIG5leHQgYnl0ZWNvZGUuCi0gICAgICAg
ICAgICAgICAgICAgIG1fY3VycmVudEluZGV4ID0gQnl0ZWNvZGVJbmRleChtX2N1cnJlbnRJbmRl
eC5vZmZzZXQoKSArIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgbV9jdXJyZW50SW5kZXggPSBuZXh0Qnl0ZWNvZGVJbmRleCgpOwogICAgICAgICAgICAg
ICAgICAgICBtX2V4aXRPSyA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NTZXRM
b2NhbFF1ZXVlKCk7CiAKQEAgLTY4MjQsNyArNjgyNiw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6
OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICAgICAgc2V0KGJ5dGVjb2Rl
Lm1faXRlcmF0b3IsIHJlc3VsdCk7CiAgICAgICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fbmV4
dCwgcmVzdWx0KTsKIAotICAgICAgICAgICAgICAgIG1fY3VycmVudEluZGV4ID0gQnl0ZWNvZGVJ
bmRleChtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSArIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgp
KTsKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRJbmRleCA9IG5leHRCeXRlY29kZUluZGV4KCk7
CiAgICAgICAgICAgICAgICAgbV9leGl0T0sgPSB0cnVlOwogICAgICAgICAgICAgICAgIHByb2Nl
c3NTZXRMb2NhbFF1ZXVlKCk7CiAKQEAgLTY4NzYsMzMgKzY4NzgsMjQgQEAgdm9pZCBCeXRlQ29k
ZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgICAgICBhZGRU
b0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoZ2xv
YmFsT2JqZWN0LT5hcnJheUl0ZXJhdG9yU3RydWN0dXJlKCkpKSwgaXRlcmF0b3IpOwogCiAgICAg
ICAgICAgICAgICAgQmFzaWNCbG9jayogaXNEb25lQmxvY2sgPSBhbGxvY2F0ZVVudGFyZ2V0YWJs
ZUJsb2NrKCk7Ci0gICAgICAgICAgICAgICAgQmFzaWNCbG9jayogbm90RG9uZUJsb2NrID0gYWxs
b2NhdGVVbnRhcmdldGFibGVCbG9jaygpOwogICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGRv
TG9hZEJsb2NrID0gYWxsb2NhdGVVbnRhcmdldGFibGVCbG9jaygpOwogCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICBOb2RlKiBkb25lSW5kZXggPSBqc0NvbnN0YW50KGpz
TnVtYmVyKC0xKSk7Ci0gICAgICAgICAgICAgICAgICAgIE5vZGUqIGluZGV4ID0gYWRkVG9HcmFw
aChHZXRJbnRlcm5hbEZpZWxkLCBPcEluZm8oc3RhdGljX2Nhc3Q8dWludDMyX3Q+KEpTQXJyYXlJ
dGVyYXRvcjo6RmllbGQ6OkluZGV4KSksIE9wSW5mbyhTcGVjSW50MzJPbmx5KSwgaXRlcmF0b3Ip
OwotICAgICAgICAgICAgICAgICAgICBOb2RlKiBpc0RvbmUgPSBhZGRUb0dyYXBoKENvbXBhcmVT
dHJpY3RFcSwgaW5kZXgsIGRvbmVJbmRleCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgQnJhbmNo
RGF0YSogaXNEb25lQnJhbmNoRGF0YSA9IG1fZ3JhcGgubV9icmFuY2hEYXRhLmFkZCgpOwotICAg
ICAgICAgICAgICAgICAgICBpc0RvbmVCcmFuY2hEYXRhLT50YWtlbiA9IEJyYW5jaFRhcmdldChp
c0RvbmVCbG9jayk7Ci0gICAgICAgICAgICAgICAgICAgIGlzRG9uZUJyYW5jaERhdGEtPm5vdFRh
a2VuID0gQnJhbmNoVGFyZ2V0KG5vdERvbmVCbG9jayk7Ci0gICAgICAgICAgICAgICAgICAgIGFk
ZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8oaXNEb25lQnJhbmNoRGF0YSksIGlzRG9uZSk7Ci0gICAg
ICAgICAgICAgICAgfQotCiAgICAgICAgICAgICAgICAgQXJyYXlNb2RlIGFycmF5TW9kZSA9IGdl
dEFycmF5TW9kZShtZXRhZGF0YS5tX2l0ZXJhYmxlUHJvZmlsZSwgQXJyYXk6OlJlYWQpOwogICAg
ICAgICAgICAgICAgIGF1dG8gcHJlZGljdGlvbiA9IGdldFByZWRpY3Rpb25XaXRob3V0T1NSRXhp
dChCeXRlY29kZUluZGV4KG1fY3VycmVudEluZGV4Lm9mZnNldCgpLCBPcEl0ZXJhdG9yTmV4dDo6
Z2V0VmFsdWUpKTsKIAogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbV9j
dXJyZW50QmxvY2sgPSBub3REb25lQmxvY2s7Ci0gICAgICAgICAgICAgICAgICAgIGNsZWFyQ2Fj
aGVzKCk7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIGRvbmVJbmRleCA9IGpzQ29uc3RhbnQo
anNOdW1iZXIoLTEpKTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogaW5kZXggPSBhZGRUb0dy
YXBoKEdldEludGVybmFsRmllbGQsIE9wSW5mbyhzdGF0aWNfY2FzdDx1aW50MzJfdD4oSlNBcnJh
eUl0ZXJhdG9yOjpGaWVsZDo6SW5kZXgpKSwgT3BJbmZvKFNwZWNJbnQzMk9ubHkpLCBpdGVyYXRv
cik7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIGlzRG9uZSA9IGFkZFRvR3JhcGgoQ29tcGFy
ZVN0cmljdEVxLCBpbmRleCwgZG9uZUluZGV4KTsKIAotICAgICAgICAgICAgICAgICAgICBOb2Rl
KiBpbmRleCA9IGFkZFRvR3JhcGgoR2V0SW50ZXJuYWxGaWVsZCwgT3BJbmZvKHN0YXRpY19jYXN0
PHVpbnQzMl90PihKU0FycmF5SXRlcmF0b3I6OkZpZWxkOjpJbmRleCkpLCBPcEluZm8oU3BlY0lu
dDMyT25seSksIGdldChieXRlY29kZS5tX2l0ZXJhdG9yKSk7CiAgICAgICAgICAgICAgICAgICAg
IE5vZGUqIGl0ZXJhYmxlID0gZ2V0KGJ5dGVjb2RlLm1faXRlcmFibGUpOwogICAgICAgICAgICAg
ICAgICAgICBOb2RlKiBidXR0ZXJmbHkgPSBhZGRUb0dyYXBoKEdldEJ1dHRlcmZseSwgaXRlcmFi
bGUpOwogICAgICAgICAgICAgICAgICAgICBOb2RlKiBsZW5ndGggPSBhZGRUb0dyYXBoKEdldEFy
cmF5TGVuZ3RoLCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgaXRlcmFibGUsIGJ1dHRlcmZs
eSk7Ci0gICAgICAgICAgICAgICAgICAgIE5vZGUqIGlzRG9uZSA9IGFkZFRvR3JhcGgoQ29tcGFy
ZUdyZWF0ZXJFcSwgRWRnZShpbmRleCwgSW50MzJVc2UpLCBFZGdlKGxlbmd0aCwgSW50MzJVc2Up
KTsKLSAgICAgICAgICAgICAgICAgICAgbV9leGl0T0sgPSB0cnVlOyAvLyBUaGUgYWJvdmUgY29t
cGFyZSBkb2Vzbid0IHByb2R1Y2UgZWZmZWN0cyBzaW5jZSB3ZSBrbm93IGluZGV4IGFuZCBsZW5n
dGggYXJlIGludDMycy4KKyAgICAgICAgICAgICAgICAgICAgTm9kZSogaXNPdXRPZkJvdW5kcyA9
IGFkZFRvR3JhcGgoQ29tcGFyZUdyZWF0ZXJFcSwgRWRnZShpbmRleCwgSW50MzJVc2UpLCBFZGdl
KGxlbmd0aCwgSW50MzJVc2UpKTsKKworICAgICAgICAgICAgICAgICAgICBpc0RvbmUgPSBhZGRU
b0dyYXBoKEFyaXRoQml0T3IsIGlzRG9uZSwgaXNPdXRPZkJvdW5kcyk7CisgICAgICAgICAgICAg
ICAgICAgIC8vIFRoZSBhYm92ZSBjb21wYXJlIGRvZXNuJ3QgcHJvZHVjZSBlZmZlY3RzIHNpbmNl
IHdlIGtub3cgdGhlIHZhbHVlcyBhcmUgYm9vbGVhbnMuIFdlIGRvbid0IHNldCBVc2VLaW5kcyBi
ZWNhdXNlIEZpeHVwIGxpa2VzIHRvIGFkZCBlZGdlcy4KKyAgICAgICAgICAgICAgICAgICAgbV9l
eGl0T0sgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKEV4aXRPSyk7CiAK
ICAgICAgICAgICAgICAgICAgICAgQnJhbmNoRGF0YSogYnJhbmNoRGF0YSA9IG1fZ3JhcGgubV9i
cmFuY2hEYXRhLmFkZCgpOwpAQCAtNjkzMiw3ICs2OTI1LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNl
cjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgICAgICAgICAgYWRkVG9H
cmFwaChQdXRJbnRlcm5hbEZpZWxkLCBPcEluZm8oc3RhdGljX2Nhc3Q8dWludDMyX3Q+KEpTQXJy
YXlJdGVyYXRvcjo6RmllbGQ6OkluZGV4KSksIGdldChieXRlY29kZS5tX2l0ZXJhdG9yKSwgbmV3
SW5kZXgpOwogCiAgICAgICAgICAgICAgICAgICAgIC8vIERvIG91ciBzZXQgbG9jYWxzLiBXZSBk
b24ndCB3YW50IHRvIHJ1biBvdXIgZ2V0QnlWYWwgYWdhaW4gc28gd2UgbW92ZSB0byB0aGUgbmV4
dCBieXRlY29kZS4KLSAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50SW5kZXggPSBCeXRlY29k
ZUluZGV4KG1fY3VycmVudEluZGV4Lm9mZnNldCgpICsgY3VycmVudEluc3RydWN0aW9uLT5zaXpl
KCkpOworICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRJbmRleCA9IG5leHRCeXRlY29kZUlu
ZGV4KCk7CiAgICAgICAgICAgICAgICAgICAgIG1fZXhpdE9LID0gdHJ1ZTsKICAgICAgICAgICAg
ICAgICAgICAgcHJvY2Vzc1NldExvY2FsUXVldWUoKTsKIApAQCAtNjk1NCw3ICs2OTQ3LDcgQEAg
dm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAg
ICAgICAgICAgICAgYWRkVG9HcmFwaChQdXRJbnRlcm5hbEZpZWxkLCBPcEluZm8oc3RhdGljX2Nh
c3Q8dWludDMyX3Q+KEpTQXJyYXlJdGVyYXRvcjo6RmllbGQ6OkluZGV4KSksIGdldChieXRlY29k
ZS5tX2l0ZXJhdG9yKSwgZG9uZUluZGV4KTsKIAogICAgICAgICAgICAgICAgICAgICAvLyBEbyBv
dXIgc2V0IGxvY2Fscy4gV2UgZG9uJ3Qgd2FudCB0byBydW4gdGhpcyBhZ2FpbiBzbyB3ZSBoYXZl
IHRvIG1vdmUgdGhlIGV4aXQgb3JpZ2luIGZvcndhcmQuCi0gICAgICAgICAgICAgICAgICAgIG1f
Y3VycmVudEluZGV4ID0gQnl0ZWNvZGVJbmRleChtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSArIGN1
cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50
SW5kZXggPSBuZXh0Qnl0ZWNvZGVJbmRleCgpOwogICAgICAgICAgICAgICAgICAgICBtX2V4aXRP
SyA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NTZXRMb2NhbFF1ZXVlKCk7CiAK
QEAgLTY5NzMsNyArNjk2Niw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5z
aWduZWQgbGltaXQpCiAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAg
IEFTU0VSVCghZ2VuZXJhdGVkQ2FzZSk7CiAKLSAgICAgICAgICAgICAgICBUZXJtaW5hbGl0eSB0
ZXJtaW5hbGl0eSA9IGhhbmRsZUNhbGw8T3BJdGVyYXRvck5leHQ+KGN1cnJlbnRJbnN0cnVjdGlv
biwgQ2FsbCwgQ2FsbE1vZGU6OlJlZ3VsYXIpOworICAgICAgICAgICAgICAgIFRlcm1pbmFsaXR5
IHRlcm1pbmFsaXR5ID0gaGFuZGxlQ2FsbDxPcEl0ZXJhdG9yTmV4dD4oY3VycmVudEluc3RydWN0
aW9uLCBDYWxsLCBDYWxsTW9kZTo6UmVndWxhciwgbmV4dENoZWNrcG9pbnQoKSk7CiAgICAgICAg
ICAgICAgICAgQVNTRVJUX1VOVVNFRCh0ZXJtaW5hbGl0eSwgdGVybWluYWxpdHkgPT0gTm9uVGVy
bWluYWwpOwogICAgICAgICAgICAgICAgIHByb2dyZXNzVG9OZXh0Q2hlY2twb2ludCgpOwogCkBA
IC03MDAwLDcgKzY5OTMsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2ln
bmVkIGxpbWl0KQogICAgICAgICAgICAgICAgICAgICBmbHVzaEZvclRlcm1pbmFsKCk7CiAgICAg
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgYXV0byB2YWx1ZVByZWRpY2l0aW9uID0g
Z2V0UHJlZGljdGlvbldpdGhvdXRPU1JFeGl0KEJ5dGVjb2RlSW5kZXgobV9jdXJyZW50SW5kZXgu
b2Zmc2V0KCksIE9wSXRlcmF0b3JOZXh0OjpnZXRWYWx1ZSkpOworICAgICAgICAgICAgICAgIGF1
dG8gdmFsdWVQcmVkaWNpdGlvbiA9IGdldFByZWRpY3Rpb25XaXRob3V0T1NSRXhpdChtX2N1cnJl
bnRJbmRleC53aXRoQ2hlY2twb2ludChPcEl0ZXJhdG9yTmV4dDo6Z2V0VmFsdWUpKTsKIAogICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgbV9leGl0T0sgPSB0cnVlOwpAQCAt
NzAxNCwxNCArNzAwNywxMyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2ln
bmVkIGxpbWl0KQogICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVy
ID0gbV9ncmFwaC5pZGVudGlmaWVycygpLmVuc3VyZShkb25lSW1wbCk7CiAKICAgICAgICAgICAg
ICAgICAgICAgQWNjZXNzVHlwZSB0eXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKLSAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgb3Bjb2RlTGVuZ3RoID0gY3VycmVudEluc3RydWN0aW9uLT5z
aXplKCk7CiAKICAgICAgICAgICAgICAgICAgICAgR2V0QnlTdGF0dXMgZ2V0QnlTdGF0dXMgPSBH
ZXRCeVN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5saW5l
U3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywKICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5s
aW5lU3RhY2tUb3AtPm1fYmFzZWxpbmVNYXAsIG1faWNDb250ZXh0U3RhY2ssCiAgICAgICAgICAg
ICAgICAgICAgICAgICBjdXJyZW50Q29kZU9yaWdpbigpKTsKIAotICAgICAgICAgICAgICAgICAg
ICBoYW5kbGVHZXRCeUlkKGJ5dGVjb2RlLm1fZG9uZSwgcHJlZGljdGlvbiwgYmFzZSwgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihkb25lSW1wbCksIGlk
ZW50aWZpZXJOdW1iZXIsIGdldEJ5U3RhdHVzLCB0eXBlLCBvcGNvZGVMZW5ndGgpOworICAgICAg
ICAgICAgICAgICAgICBoYW5kbGVHZXRCeUlkKGJ5dGVjb2RlLm1fZG9uZSwgcHJlZGljdGlvbiwg
YmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihk
b25lSW1wbCksIGlkZW50aWZpZXJOdW1iZXIsIGdldEJ5U3RhdHVzLCB0eXBlLCBuZXh0Q2hlY2tw
b2ludCgpKTsKICAgICAgICAgICAgICAgICAgICAgLy8gU2V0IGEgdmFsdWUgZm9yIG1fdmFsdWUg
c28gd2UgZG9uJ3QgZXhpdCBvbiBpdCBkaWZmZXJpbmcgZnJvbSB3aGF0IHdlIGV4cGVjdGVkLgog
ICAgICAgICAgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV92YWx1ZSwgYm90dG9tVmFsdWUpOwog
ICAgICAgICAgICAgICAgICAgICBwcm9ncmVzc1RvTmV4dENoZWNrcG9pbnQoKTsKQEAgLTcwNDEs
MTUgKzcwMzMsMTggQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBs
aW1pdCkKICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG1f
Z3JhcGguaWRlbnRpZmllcnMoKS5lbnN1cmUodmFsdWVJbXBsKTsKIAogICAgICAgICAgICAgICAg
ICAgICBBY2Nlc3NUeXBlIHR5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlkOwotICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBvcGNvZGVMZW5ndGggPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUo
KTsKIAogICAgICAgICAgICAgICAgICAgICBHZXRCeVN0YXR1cyBnZXRCeVN0YXR1cyA9IEdldEJ5
U3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFj
a1RvcC0+bV9wcm9maWxlZEJsb2NrLAogICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmxpbmVT
dGFja1RvcC0+bV9iYXNlbGluZU1hcCwgbV9pY0NvbnRleHRTdGFjaywKICAgICAgICAgICAgICAg
ICAgICAgICAgIGN1cnJlbnRDb2RlT3JpZ2luKCkpOwogCi0gICAgICAgICAgICAgICAgICAgIGhh
bmRsZUdldEJ5SWQoYnl0ZWNvZGUubV92YWx1ZSwgdmFsdWVQcmVkaWNpdGlvbiwgYmFzZSwgQ2Fj
aGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2YWx1ZUltcGwp
LCBpZGVudGlmaWVyTnVtYmVyLCBnZXRCeVN0YXR1cywgdHlwZSwgb3Bjb2RlTGVuZ3RoKTsKLSAg
ICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3NUb05leHRDaGVja3BvaW50KCk7CisgICAgICAgICAg
ICAgICAgICAgIGhhbmRsZUdldEJ5SWQoYnl0ZWNvZGUubV92YWx1ZSwgdmFsdWVQcmVkaWNpdGlv
biwgYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmll
cih2YWx1ZUltcGwpLCBpZGVudGlmaWVyTnVtYmVyLCBnZXRCeVN0YXR1cywgdHlwZSwgbmV4dEJ5
dGVjb2RlSW5kZXgoKSk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gV2UncmUgZG9uZSwgZXhp
dCBmb3J3YXJkcy4KKyAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50SW5kZXggPSBuZXh0Qnl0
ZWNvZGVJbmRleCgpOworICAgICAgICAgICAgICAgICAgICBtX2V4aXRPSyA9IHRydWU7CisgICAg
ICAgICAgICAgICAgICAgIHByb2Nlc3NTZXRMb2NhbFF1ZXVlKCk7CiAKICAgICAgICAgICAgICAg
ICAgICAgYWRkVG9HcmFwaChKdW1wLCBPcEluZm8oY29udGludWF0aW9uKSk7CiAgICAgICAgICAg
ICAgICAgfQpAQCAtODE0MSw3ICs4MTM2LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VD
b2RlQmxvY2soKQogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+Ci12b2lkIEJ5dGVD
b2RlUGFyc2VyOjpoYW5kbGVQdXRCeVZhbChCeXRlY29kZSBieXRlY29kZSwgdW5zaWduZWQgaW5z
dHJ1Y3Rpb25TaXplKQordm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlWYWwoQnl0ZWNv
ZGUgYnl0ZWNvZGUsIEJ5dGVjb2RlSW5kZXggb3NyRXhpdEluZGV4KQogewogICAgIE5vZGUqIGJh
c2UgPSBnZXQoYnl0ZWNvZGUubV9iYXNlKTsKICAgICBOb2RlKiBwcm9wZXJ0eSA9IGdldChieXRl
Y29kZS5tX3Byb3BlcnR5KTsKQEAgLTgxODYsNyArODE4MSw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJz
ZXI6OmhhbmRsZVB1dEJ5VmFsKEJ5dGVjb2RlIGJ5dGVjb2RlLCB1bnNpZ25lZCBpbnN0cnVjdGlv
blNpemUpCiAgICAgICAgIH0KIAogICAgICAgICBpZiAoY29tcGlsZWRBc1B1dEJ5SWQpCi0gICAg
ICAgICAgICBoYW5kbGVQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIsIGlkZW50aWZpZXJOdW1iZXIs
IHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBpc0RpcmVjdCwgaW5zdHJ1Y3Rpb25TaXplLCBieXRlY29k
ZS5tX2VjbWFNb2RlKTsKKyAgICAgICAgICAgIGhhbmRsZVB1dEJ5SWQoYmFzZSwgaWRlbnRpZmll
ciwgaWRlbnRpZmllck51bWJlciwgdmFsdWUsIHB1dEJ5SWRTdGF0dXMsIGlzRGlyZWN0LCBvc3JF
eGl0SW5kZXgsIGJ5dGVjb2RlLm1fZWNtYU1vZGUpOwogICAgIH0KIAogICAgIGlmICghY29tcGls
ZWRBc1B1dEJ5SWQpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
Q2FsbC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCmluZGV4IDAx
ZTM3ZmFkY2IyZjIwMjRhMzAxNzk5NWZiZDUyOTMyOGYwYjUzMjkuLjA4MDRlNGRhZTFlOWI4ODI3
MWI1ZjU4NDljOWI5OTQ1ZDc3ZTk0MWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQ2FsbC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxs
LmNwcApAQCAtNDI4LDYgKzQyOCwxMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jf
b3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93QwogCiAKICAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworCisgICAgR1BSUmVnIGl0ZXJhdG9yR1BSID0gcmVn
VDA7CisgICAgSnVtcExpc3Qgbm90T2JqZWN0OworICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNo
SWZOb3RDZWxsKGl0ZXJhdG9yR1BSKSk7CisgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5v
dE9iamVjdChpdGVyYXRvckdQUikpOworCiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcEl0ZXJhdG9yT3Blbj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbmV4dFZSZWcgPSBi
eXRlY29kZS5tX25leHQ7CiAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIGlkZW50ID0gdm0oKS5wcm9w
ZXJ0eU5hbWVzLT5uZXh0LmltcGwoKTsKQEAgLTQzNiw5ICs0NDIsMTQgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0MKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKIAot
ICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgbmV4dFZSZWcsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJl
Z1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVyKGlk
ZW50KS5yYXdCaXRzKCkpOwotCisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9m
aWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGlt
aXplLCBuZXh0VlJlZywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCBnZW4uc3R1YkluZm8oKSwgaXRlcmF0b3JHUFIsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJhd0JpdHMoKSk7CiAgICAgZ2VuLnJlcG9y
dFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBhdXRvIGRvbmUgPSBqdW1w
KCk7CisKKyAgICBub3RPYmplY3QubGluayh0aGlzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9iamVjdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKworICAgIGRvbmUubGluayh0aGlzKTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0
aHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcApp
bmRleCBmZmQ2YjVlMTE1YjZmZDllYjVlNmI4OTgyOGRiZDdmZTk2YmNhOWQwLi5hYjIyNzFmMmMw
OWYwMmQ3NWNlOWIzNjQ4NWYyZThiZmQ0YzFjOGZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKQEAgLTg0NSw2ICs4NDUsOSBAQCBMTElOVF9T
TE9XX1BBVEhfREVDTChzbG93X3BhdGhfaXRlcmF0b3Jfb3Blbl9nZXRfbmV4dCkKICAgICBKU1Zh
bHVlIGl0ZXJhdG9yID0gZ2V0T3BlcmFuZChjYWxsRnJhbWUsIGJ5dGVjb2RlLm1faXRlcmF0b3Ip
OwogICAgIFJlZ2lzdGVyJiBuZXh0UmVnaXN0ZXIgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYnl0
ZWNvZGUubV9uZXh0KTsKIAorICAgIGlmICghaXRlcmF0b3IuaXNPYmplY3QoKSkKKyAgICAgICAg
TExJTlRfVEhST1coY3JlYXRlVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgIkl0ZXJhdG9yIHJlc3Vs
dCBpbnRlcmZhY2UgaXMgbm90IGFuIG9iamVjdC4iX3MpKTsKKwogICAgIEpTVmFsdWUgcmVzdWx0
ID0gcGVyZm9ybUxMSW50R2V0QnlJRChwYywgY29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIGl0ZXJh
dG9yLCB2bS5wcm9wZXJ0eU5hbWVzLT5uZXh0LCBtZXRhZGF0YS5tX21vZGVNZXRhZGF0YSk7CiAg
ICAgTExJTlRfQ0hFQ0tfRVhDRVBUSU9OKCk7CiAgICAgbmV4dFJlZ2lzdGVyID0gcmVzdWx0OwpA
QCAtMjA4OSw5ICsyMDkyLDEzIEBAIHN0YXRpYyB2b2lkIGhhbmRsZUl0ZXJhdG9yTmV4dENoZWNr
cG9pbnQoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNHbG9iYWxPCiAgICAgYXV0byYg
dmFsdWVSZWdpc3RlciA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29kZS5tX3ZhbHVlKTsK
ICAgICBhdXRvIGl0ZXJhdG9yUmVzdWx0T2JqZWN0ID0gc2lkZVN0YXRlLnRtcHNbT3BJdGVyYXRv
ck5leHQ6Om5leHRSZXN1bHRdOwogICAgIGF1dG8gbmV4dCA9IGNhbGxGcmFtZS0+dW5jaGVja2Vk
UihieXRlY29kZS5tX25leHQpLmpzVmFsdWUoKTsgICAgCi0KICAgICBSRUxFQVNFX0FTU0VSVF9X
SVRIX01FU1NBR0UobmV4dCwgIldlIHNob3VsZCBub3QgT1NSIGV4aXQgdG8gYSBjaGVja3BvaW50
IGZvciBmYXN0IGNhc2VzLiIpOwogCisgICAgaWYgKCFpdGVyYXRvclJlc3VsdE9iamVjdC5pc09i
amVjdCgpKSB7CisgICAgICAgIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwg
Ikl0ZXJhdG9yIHJlc3VsdCBpbnRlcmZhY2UgaXMgbm90IGFuIG9iamVjdC4iX3MpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCiAgICAgYXV0byYgZG9uZVJlZ2lzdGVyID0gY2FsbEZyYW1lLT51
bmNoZWNrZWRSKGJ5dGVjb2RlLm1fZG9uZSk7CiAgICAgaWYgKGNoZWNrcG9pbnRJbmRleCA9PSBP
cEl0ZXJhdG9yTmV4dDo6Z2V0RG9uZSkgewogICAgICAgICBkb25lUmVnaXN0ZXIgPSBpdGVyYXRv
clJlc3VsdE9iamVjdC5nZXQoZ2xvYmFsT2JqZWN0LCB2bS5wcm9wZXJ0eU5hbWVzLT5kb25lKTsK
ZGlmZiAtLWdpdCBhL0pTVGVzdHMvQ2hhbmdlTG9nIGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXgg
MTExZGEzZDZmMGRhYzE4NjZhZjZkY2FkYTQ3MjM3OGIwOGRjN2Y0MC4uZjgwMTE4Y2QwZmZmYzQz
N2E4ZGIzNzY0ZWNlNmFhOGFkZTBjMzU0MyAxMDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cK
KysrIGIvSlNUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMyBAQAorMjAyMC0wNC0yMiAgS2Vp
dGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KKworICAgICAgICBGaXggT1NSIGV4
aXRpbmcvaXRlcmF0b3Igb2JqZWN0IGNoZWNrcyBpbiBmb3Itb2YgYnl0ZWNvZGVzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTA4ODIKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHN0cmVzcy9mb3Itb2Yt
aXRlcmF0b3ItbmV4dC1vc3ItYXQtaW5saW5lZC1yZXR1cm4tbm9uLW9iamVjdC5qczogQWRkZWQu
CisgICAgICAgICh2ZW5kTmV4dCk6CisgICAgICAgICh0ZXN0KToKKyAgICAgICAgKGNhdGNoKToK
KyAgICAgICAgKiBzdHJlc3MvZm9yLW9mLWl0ZXJhdG9yLW5leHQtb3NyLWF0LW5leHQtc2V0LWxv
Y2FsLmpzOiBBZGRlZC4KKyAgICAgICAgKHZlbmROZXh0KToKKyAgICAgICAgKHRlc3QpOgorICAg
ICAgICAoY2F0Y2gpOgorICAgICAgICAqIHN0cmVzcy9mb3Itb2YtaXRlcmF0b3Itb3Blbi1vc3It
YXQtaW5saW5lZC1yZXR1cm4tbm9uLW9iamVjdC5qczogQWRkZWQuCisgICAgICAgICh2ZW5kSXRl
cmF0b3IpOgorICAgICAgICAodGVzdCk6CisgICAgICAgIChjYXRjaCk6CisgICAgICAgICogc3Ry
ZXNzL2Zvci1vZi1pdGVyYXRvci1vcGVuLW9zci1hdC1pdGVyYXRvci1zZXQtbG9jYWwuanM6IEFk
ZGVkLgorICAgICAgICAodmVuZEl0ZXJhdG9yKToKKyAgICAgICAgKHRlc3QpOgorICAgICAgICAo
Y2F0Y2gpOgorICAgICAgICAqIHN0cmVzcy9mb3Itb2YtaXRlcmF0b3Itb3Blbi1yZXR1cm4tbm9u
LW9iamVjdC5qczogQWRkZWQuCisgICAgICAgICh2ZW5kSXRlcmF0b3IpOgorICAgICAgICAodGVz
dCk6CisgICAgICAgIChpLmNhdGNoKToKKyAgICAgICAgKiBzdHJlc3MvdGVzdC1mb3Itb2YtY2Zn
LXNpbXBsaWNhdGlvbi1leGl0LW9rLmpzOiBBZGRlZC4KKyAgICAgICAgKHouX19wcm90b19fKToK
KwogMjAyMC0wNC0yMSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgogCiAgICAg
ICAgIE1vdmUgdmFsdWUtcG93LWFpLXJ1bGUtc2hvdWxkLWJveC10aGUtc2FtZS13YXktYXMtdGhl
LXJ1bnRpbWUuanMgdG8gSlNUZXN0cy9zdHJlc3MvCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVz
cy9mb3Itb2YtaXRlcmF0b3ItbmV4dC1vc3ItYXQtaW5saW5lZC1yZXR1cm4tbm9uLW9iamVjdC5q
cyBiL0pTVGVzdHMvc3RyZXNzL2Zvci1vZi1pdGVyYXRvci1uZXh0LW9zci1hdC1pbmxpbmVkLXJl
dHVybi1ub24tb2JqZWN0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIyN2YyZTExNmRhZDlkMDI0OGQ2NWZmOWFi
ZTI5MDRjNjZmZjQ2OWUKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3N0cmVzcy9mb3Itb2Yt
aXRlcmF0b3ItbmV4dC1vc3ItYXQtaW5saW5lZC1yZXR1cm4tbm9uLW9iamVjdC5qcwpAQCAtMCww
ICsxLDM0IEBACitsZXQgc2hvdWxkVmVuZE51bGwgPSBmYWxzZTsKK2Z1bmN0aW9uIHZlbmROZXh0
KCkgeworICAgIGlmIChzaG91bGRWZW5kTnVsbCkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgcmV0
dXJuIHsgZG9uZTogdHJ1ZSB9OworfQorbm9JbmxpbmUodmVuZE5leHQpOworCisvLyBQYXNzIHNo
b3VsZFZlbmROdWxsIGFzIHBhcmFtIHNvIHdlIGRvbid0IE9TUiB3aGVuIGl0IGJlY29tZXMgdHJ1
ZS4KK2Z1bmN0aW9uIHRlc3Qoc2hvdWxkVmVuZE51bGwpIHsKKyAgICBsZXQgaXRlcmFibGUgPSB7
CisgICAgICAgIFtTeW1ib2wuaXRlcmF0b3JdKCkgeyByZXR1cm4gdGhpczsgfSwKKyAgICAgICAg
bmV4dCgpIHsgcmV0dXJuIHZlbmROZXh0KCk7IH0KKyAgICB9CisgICAgZm9yIChsZXQgbyBvZiBp
dGVyYWJsZSkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7CisgICAgaWYgKHNob3VsZFZlbmRO
dWxsKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTsKK30KK25vSW5saW5lKHRlc3QpOworCitm
b3IgKGxldCBpID0gMDsgaSA8IDFlNTsgKytpKQorICAgIHRlc3QoKTsKKworc2hvdWxkVmVuZE51
bGwgPSB0cnVlOworbGV0IGVycm9yOwordHJ5IHsKKyAgICB0ZXN0KHRydWUpOworfSBjYXRjaCAo
ZSkgeworICAgIGVycm9yID0gZTsKK30KKworaWYgKGVycm9yICE9ICJUeXBlRXJyb3I6IEl0ZXJh
dG9yIHJlc3VsdCBpbnRlcmZhY2UgaXMgbm90IGFuIG9iamVjdC4iKQorICAgIHRocm93IGVycm9y
OwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3MvZm9yLW9mLWl0ZXJhdG9yLW5leHQtb3NyLWF0
LW5leHQtc2V0LWxvY2FsLmpzIGIvSlNUZXN0cy9zdHJlc3MvZm9yLW9mLWl0ZXJhdG9yLW5leHQt
b3NyLWF0LW5leHQtc2V0LWxvY2FsLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI5ODM0ZTI1ZWFkNjFmYjQ2YjUz
ZTc0YmJkNWNkMTQ4YWVmNzY1OWEKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3N0cmVzcy9m
b3Itb2YtaXRlcmF0b3ItbmV4dC1vc3ItYXQtbmV4dC1zZXQtbG9jYWwuanMKQEAgLTAsMCArMSwz
NCBAQAorbGV0IHNob3VsZFZlbmROdWxsID0gZmFsc2U7CitmdW5jdGlvbiB2ZW5kTmV4dCgpIHsK
KyAgICBpZiAoc2hvdWxkVmVuZE51bGwpCisgICAgICAgIHJldHVybiAxOworICAgIHJldHVybiB7
IGRvbmU6IHRydWUgfTsKK30KK25vSW5saW5lKHZlbmROZXh0KTsKKworLy8gUGFzcyBzaG91bGRW
ZW5kTnVsbCBhcyBwYXJhbSBzbyB3ZSBkb24ndCBPU1Igd2hlbiBpdCBiZWNvbWVzIHRydWUuCitm
dW5jdGlvbiB0ZXN0KHNob3VsZFZlbmROdWxsKSB7CisgICAgbGV0IGl0ZXJhYmxlID0geworICAg
ICAgICBbU3ltYm9sLml0ZXJhdG9yXSgpIHsgcmV0dXJuIHRoaXM7IH0sCisgICAgICAgIG5leHQ6
IHZlbmROZXh0LAorICAgIH0KKyAgICBmb3IgKGxldCBvIG9mIGl0ZXJhYmxlKQorICAgICAgICB0
aHJvdyBuZXcgRXJyb3IoKTsKKyAgICBpZiAoc2hvdWxkVmVuZE51bGwpCisgICAgICAgIHRocm93
IG5ldyBFcnJvcigpOworfQorbm9JbmxpbmUodGVzdCk7CisKK2ZvciAobGV0IGkgPSAwOyBpIDwg
MWU1OyArK2kpCisgICAgdGVzdCgpOworCitzaG91bGRWZW5kTnVsbCA9IHRydWU7CitsZXQgZXJy
b3I7Cit0cnkgeworICAgIHRlc3QodHJ1ZSk7Cit9IGNhdGNoIChlKSB7CisgICAgZXJyb3IgPSBl
OworfQorCitpZiAoZXJyb3IgIT0gIlR5cGVFcnJvcjogSXRlcmF0b3IgcmVzdWx0IGludGVyZmFj
ZSBpcyBub3QgYW4gb2JqZWN0LiIpCisgICAgdGhyb3cgZXJyb3I7CmRpZmYgLS1naXQgYS9KU1Rl
c3RzL3N0cmVzcy9mb3Itb2YtaXRlcmF0b3Itb3Blbi1vc3ItYXQtaW5saW5lZC1yZXR1cm4tbm9u
LW9iamVjdC5qcyBiL0pTVGVzdHMvc3RyZXNzL2Zvci1vZi1pdGVyYXRvci1vcGVuLW9zci1hdC1p
bmxpbmVkLXJldHVybi1ub24tb2JqZWN0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIxODk3ZmJjZWIxZWQ1ZjU0
N2QzODQ3NzYwZDVjYzMyMzEwZDBmOTQKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3N0cmVz
cy9mb3Itb2YtaXRlcmF0b3Itb3Blbi1vc3ItYXQtaW5saW5lZC1yZXR1cm4tbm9uLW9iamVjdC5q
cwpAQCAtMCwwICsxLDM0IEBACitsZXQgc2hvdWxkVmVuZE51bGwgPSBmYWxzZTsKK2Z1bmN0aW9u
IHZlbmRJdGVyYXRvcigpIHsKKyAgICBpZiAoc2hvdWxkVmVuZE51bGwpCisgICAgICAgIHJldHVy
biAxOworICAgIHJldHVybiB0aGlzOworfQorbm9JbmxpbmUodmVuZEl0ZXJhdG9yKTsKKworLy8g
UGFzcyBzaG91bGRWZW5kTnVsbCBhcyBwYXJhbSBzbyB3ZSBkb24ndCBPU1Igd2hlbiBpdCBiZWNv
bWVzIHRydWUuCitmdW5jdGlvbiB0ZXN0KHNob3VsZFZlbmROdWxsKSB7CisgICAgbGV0IGl0ZXJh
YmxlID0geworICAgICAgICBbU3ltYm9sLml0ZXJhdG9yXSgpIHsgcmV0dXJuIHZlbmRJdGVyYXRv
ci5jYWxsKHRoaXMpIH0sCisgICAgICAgIG5leHQoKSB7IHJldHVybiB7IGRvbmU6IHRydWUgfTsg
fQorICAgIH0KKyAgICBmb3IgKGxldCBvIG9mIGl0ZXJhYmxlKQorICAgICAgICB0aHJvdyBuZXcg
RXJyb3IoKTsKKyAgICBpZiAoc2hvdWxkVmVuZE51bGwpCisgICAgICAgIHRocm93IG5ldyBFcnJv
cigpOworfQorbm9JbmxpbmUodGVzdCk7CisKK2ZvciAobGV0IGkgPSAwOyBpIDwgMWU1OyArK2kp
CisgICAgdGVzdCgpOworCitzaG91bGRWZW5kTnVsbCA9IHRydWU7CitsZXQgZXJyb3I7Cit0cnkg
eworICAgIHRlc3QodHJ1ZSk7Cit9IGNhdGNoIChlKSB7CisgICAgZXJyb3IgPSBlOworfQorCitp
ZiAoZXJyb3IgIT0gIlR5cGVFcnJvcjogSXRlcmF0b3IgcmVzdWx0IGludGVyZmFjZSBpcyBub3Qg
YW4gb2JqZWN0LiIpCisgICAgdGhyb3cgbmV3IEVycm9yKCk7CmRpZmYgLS1naXQgYS9KU1Rlc3Rz
L3N0cmVzcy9mb3Itb2YtaXRlcmF0b3Itb3Blbi1vc3ItYXQtaXRlcmF0b3Itc2V0LWxvY2FsLmpz
IGIvSlNUZXN0cy9zdHJlc3MvZm9yLW9mLWl0ZXJhdG9yLW9wZW4tb3NyLWF0LWl0ZXJhdG9yLXNl
dC1sb2NhbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iYzNjZjdmMTFkNTM0YTQ4NjNjMjMyYWZjYTI5NjIyNGM4
MjBhZDIxCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9zdHJlc3MvZm9yLW9mLWl0ZXJhdG9y
LW9wZW4tb3NyLWF0LWl0ZXJhdG9yLXNldC1sb2NhbC5qcwpAQCAtMCwwICsxLDM0IEBACitsZXQg
c2hvdWxkVmVuZE51bGwgPSBmYWxzZTsKK2Z1bmN0aW9uIHZlbmRJdGVyYXRvcigpIHsKKyAgICBp
ZiAoc2hvdWxkVmVuZE51bGwpCisgICAgICAgIHJldHVybiAxOworICAgIHJldHVybiB0aGlzOwor
fQorbm9JbmxpbmUodmVuZEl0ZXJhdG9yKTsKKworLy8gUGFzcyBzaG91bGRWZW5kTnVsbCBhcyBw
YXJhbSBzbyB3ZSBkb24ndCBPU1Igd2hlbiBpdCBiZWNvbWVzIHRydWUuCitmdW5jdGlvbiB0ZXN0
KHNob3VsZFZlbmROdWxsKSB7CisgICAgbGV0IGl0ZXJhYmxlID0geworICAgICAgICBbU3ltYm9s
Lml0ZXJhdG9yXTogdmVuZEl0ZXJhdG9yLAorICAgICAgICBuZXh0KCkgeyByZXR1cm4geyBkb25l
OiB0cnVlIH07IH0KKyAgICB9CisgICAgZm9yIChsZXQgbyBvZiBpdGVyYWJsZSkKKyAgICAgICAg
dGhyb3cgbmV3IEVycm9yKCk7CisgICAgaWYgKHNob3VsZFZlbmROdWxsKQorICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoKTsKK30KK25vSW5saW5lKHRlc3QpOworCitmb3IgKGxldCBpID0gMDsgaSA8
IDFlNTsgKytpKQorICAgIHRlc3QoKTsKKworc2hvdWxkVmVuZE51bGwgPSB0cnVlOworbGV0IGVy
cm9yOwordHJ5IHsKKyAgICB0ZXN0KHRydWUpOworfSBjYXRjaCAoZSkgeworICAgIGVycm9yID0g
ZTsKK30KKworaWYgKGVycm9yICE9ICJUeXBlRXJyb3I6IEl0ZXJhdG9yIHJlc3VsdCBpbnRlcmZh
Y2UgaXMgbm90IGFuIG9iamVjdC4iKQorICAgIHRocm93IG5ldyBFcnJvcigpOwpkaWZmIC0tZ2l0
IGEvSlNUZXN0cy9zdHJlc3MvZm9yLW9mLWl0ZXJhdG9yLW9wZW4tcmV0dXJuLW5vbi1vYmplY3Qu
anMgYi9KU1Rlc3RzL3N0cmVzcy9mb3Itb2YtaXRlcmF0b3Itb3Blbi1yZXR1cm4tbm9uLW9iamVj
dC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5lNmYzOWNjMzQzZWI5OGFlZTMwNjJkZTFjZmVjNGViMWI2NDI5Njdj
Ci0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9zdHJlc3MvZm9yLW9mLWl0ZXJhdG9yLW9wZW4t
cmV0dXJuLW5vbi1vYmplY3QuanMKQEAgLTAsMCArMSwyNiBAQAorZnVuY3Rpb24gdmVuZEl0ZXJh
dG9yKCkgeworICAgIHJldHVybiAxOworfQorbm9JbmxpbmUodmVuZEl0ZXJhdG9yKTsKKworZnVu
Y3Rpb24gdGVzdCgpIHsKKyAgICBsZXQgaXRlcmFibGUgPSB7CisgICAgICAgIFtTeW1ib2wuaXRl
cmF0b3JdKCkgeyByZXR1cm4gdmVuZEl0ZXJhdG9yKCk7IH0sCisgICAgICAgIG5leHQoKSB7IHJl
dHVybiB7IGRvbmU6IHRydWUgfTsgfQorICAgIH0KKyAgICBmb3IgKGxldCBvIG9mIGl0ZXJhYmxl
KQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTsKKyAgICB0aHJvdyBuZXcgRXJyb3IoKTsKK30K
K25vSW5saW5lKHRlc3QpOworCitmb3IgKGxldCBpID0gMDsgaSA8IDFlNTsgKytpKSB7CisgICAg
bGV0IGVycm9yOworICAgIHRyeSB7CisgICAgICAgIHRlc3QoKTsKKyAgICB9IGNhdGNoIChlKSB7
CisgICAgICAgIGVycm9yID0gZTsKKyAgICB9CisgICAgaWYgKGVycm9yICE9ICJUeXBlRXJyb3I6
IEl0ZXJhdG9yIHJlc3VsdCBpbnRlcmZhY2UgaXMgbm90IGFuIG9iamVjdC4iKQorICAgICAgICB0
aHJvdyBuZXcgRXJyb3IoKTsKK30KZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL3Rlc3QtZm9y
LW9mLWNmZy1zaW1wbGljYXRpb24tZXhpdC1vay5qcyBiL0pTVGVzdHMvc3RyZXNzL3Rlc3QtZm9y
LW9mLWNmZy1zaW1wbGljYXRpb24tZXhpdC1vay5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44OWIyMjY3OWM2ODQ4
MTI3MGI4Nzc2MmEwMmE1MWZmOGZhNmVlNWFlCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9z
dHJlc3MvdGVzdC1mb3Itb2YtY2ZnLXNpbXBsaWNhdGlvbi1leGl0LW9rLmpzCkBAIC0wLDAgKzEs
NyBAQAorbGV0IHogPSB7fQorei5fX3Byb3RvX18gPSBbXQorZm9yIChsZXQgaSA9IDA7IGkgPCAx
MDAwMDAwOyBpKyspIHsKKyAgZm9yIChsZXQgeCBvZiBbJycsIHpdKSB7CisgICAgZm9yIChsZXQg
eSBvZiB4KSB7fQorICB9Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397321</attachid>
            <date>2020-04-22 22:37:24 -0700</date>
            <delta_ts>2020-04-23 10:26:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-210882-20200422223724.patch</filename>
            <type>text/plain</type>
            <size>41938</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwNDQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
ZTQ3YWMyMmU2MTkxNGYyZjYzNDlmMjM5NzY0MWVlNWRmNWE1OGY3Li5iNGVhMjNlMTBiN2U0MzIz
YTEyNWQ1NzNmYzJhYzcwOGY0NWE5YTczIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NCBAQAorMjAyMC0wNC0yMiAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBGaXggT1NSIGV4aXRpbmcvaXRlcmF0b3Igb2JqZWN0IGNoZWNrcyBp
biBmb3Itb2YgYnl0ZWNvZGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMTA4ODIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBUaGlzIHBhdGNoIGZpeGVzIHNvbWUgYnVncyBpbiB0aGUgREZHQnl0ZWNvZGVQ
YXJzZXIgd2hlcmUgd2Ugd291bGQKKyAgICAgICAgc2V0IHRoZSBleGl0IG9yaWdpbiBmb3IgdGhl
IFNldExvY2FsIGZvbGxvd2luZyB0aGUgaXRlcmF0b3Jfb3Blbi9uZXh0CisgICAgICAgIGZpcnN0
IGNhbGwgdG8gdGhlIG5leHQgYnl0ZWNvZGUuIFRoaXMgbWVhbnQgdGhhdCBpZiBvdXQtb2YtbGlu
ZQorICAgICAgICBTeW1ib2wuaXRlcmF0b3Igb3IgbmV4dCBmdW5jdGlvbnMgcmV0dXJuZWQgYW4g
dW5leHBlY3RlZCBub24tY2VsbAorICAgICAgICB3ZSB3b3VsZCBPU1IgcGFzdCB0aGUgcmVzdCBv
ZiB0aGUgbmV4dCBieXRlY29kZSByYXRoZXIgdGhhbiB0byB0aGUKKyAgICAgICAgZmlyc3QgY2hl
Y2twb2ludC4KKworICAgICAgICBUaGlzIHBhdGNoIGFsc28gbWFrZXMgc3VyZSB3ZSBwcm9wZXJs
eSB0aHJvdyBmb3Igbm9uLW9iamVjdHMgcmV0dXJuZWQKKyAgICAgICAgZnJvbSBlaXRoZXIgb2Yg
dGhlIGFib3ZlIGZ1bmN0aW9ucyBpbiBhbGwgdGllcnMgKGFuZCBhZGRzIHRlc3RzKS4KKworICAg
ICAgICBGaW5hbGx5LCB0aGlzIHBhdGNoIG1ha2VzIGEgc21hbGwgb3B0aW1pemF0aW9uIHdoZXJl
IHdlIGp1c3QgY29tcGFyZSB0aGUKKyAgICAgICAgaXRlcmF0b3IncyBpbmRleCB0byB0aGUgYXJy
YXkgbGVuZ3RoIHdpdGggdGhlIENvbXBhcmVCZWxvdyBvcGNvZGUgc28gaXQncworICAgICAgICBq
dXN0IG9uZSBjb21wYXJpc29uIG9wZXJhdGlvbi4KKworICAgICAgICAqIGJ5dGVjb2RlL0J5dGVj
b2RlSW5kZXguaDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6d2l0aENoZWNrcG9pbnQg
Y29uc3QpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6Om5leHRPcGNvZGVJbmRleCBjb25zdCk6CisgICAgICAg
IChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6Om5leHRDaGVja3BvaW50IGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cHJvZ3Jlc3NUb05leHRDaGVja3BvaW50KToK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbCk6CisgICAgICAg
IChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGxWYXJpYW50KToKKyAgICAgICAg
KEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcpOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlkKToKKyAgICAgICAgKEpTQzo6REZH
OjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0
ZUNvZGVQYXJzZXI6OnBhcnNlR2V0QnlJZCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQ
YXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpo
YW5kbGVQdXRCeVZhbCk6CisgICAgICAgICogaml0L0pJVENhbGwuY3BwOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4pOgorICAgICAgICAqIGxsaW50L0xMSW50
U2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OkxMSU5UX1NMT1dfUEFUSF9ERUNM
KToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmhhbmRsZUl0ZXJhdG9yTmV4dENoZWNrcG9pbnQpOgor
CiAyMDIwLTA0LTIwICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAg
ICAgQ2hlY2sgU3RydWN0dXJlIGF0dHJpYnV0ZXMgaW4gT2JqZWN0LmFzc2lnbiBleGhhdXN0aXZl
bHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUlu
ZGV4LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5oCmlu
ZGV4IDEwZmJhNDQwNThlYzlkZmVkMjU0ODA5YTZkNzgzMzdkMDExYTRiNjEuLjZlMjY2ZDNkYWYz
YjEyNWU4NzM2NzU3NTQwNTJjMzEzYzBlNWE1NzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUluZGV4LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXguaApAQCAtNjIsNiArNjIsNyBAQCBwdWJsaWM6CiAg
ICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuICp0aGlzID09
IGRlbGV0ZWRWYWx1ZSgpOyB9CiAKICAgICBzdGF0aWMgQnl0ZWNvZGVJbmRleCBmcm9tQml0cyh1
aW50MzJfdCBiaXRzKTsKKyAgICBCeXRlY29kZUluZGV4IHdpdGhDaGVja3BvaW50KHVuc2lnbmVk
IGNoZWNrcG9pbnQpIGNvbnN0IHsgcmV0dXJuIEJ5dGVjb2RlSW5kZXgob2Zmc2V0KCksIGNoZWNr
cG9pbnQpOyB9CiAKICAgICAvLyBDb21wYXJpc29uIG9wZXJhdG9ycy4KICAgICBleHBsaWNpdCBv
cGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gbV9wYWNrZWRCaXRzICE9IGludmFsaWRPZmZz
ZXQgJiYgbV9wYWNrZWRCaXRzICE9IGRlbGV0ZWRWYWx1ZSgpLm9mZnNldCgpOyB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCmluZGV4IDM0ZGEz
YjFmYzc1MWJmY2U5YmY5NWRjMjZhOTRhMmQ4N2U5MTU1MTQuLjc1YmUxYTg5ZWExMTYxYTcwMTM1
ZmU0MTMxYzM0ODQ2NTUwMmZjNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQnl0ZUNvZGVQYXJzZXIuY3BwCkBAIC0xNzcsMTEgKzE3NywxMSBAQCBwcml2YXRlOgogICAg
IC8vIEhhbmRsZSBjYWxscy4gVGhpcyByZXNvbHZlcyBpc3N1ZXMgc3Vycm91bmRpbmcgaW5saW5p
bmcgYW5kIGludHJpbnNpY3MuCiAgICAgZW51bSBUZXJtaW5hbGl0eSB7IFRlcm1pbmFsLCBOb25U
ZXJtaW5hbCB9OwogICAgIFRlcm1pbmFsaXR5IGhhbmRsZUNhbGwoCi0gICAgICAgIE9wZXJhbmQg
cmVzdWx0LCBOb2RlVHlwZSBvcCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCB1bnNpZ25lZCBpbnN0
cnVjdGlvblNpemUsCisgICAgICAgIE9wZXJhbmQgcmVzdWx0LCBOb2RlVHlwZSBvcCwgSW5saW5l
Q2FsbEZyYW1lOjpLaW5kLCBCeXRlY29kZUluZGV4IG9zckV4aXRJbmRleCwKICAgICAgICAgTm9k
ZSogY2FsbFRhcmdldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBpbnQgcmVnaXN0
ZXJPZmZzZXQsIENhbGxMaW5rU3RhdHVzLAogICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0
aW9uKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDYWxsT3A+Ci0gICAgVGVybWluYWxpdHkgaGFu
ZGxlQ2FsbChjb25zdCBJbnN0cnVjdGlvbiogcGMsIE5vZGVUeXBlIG9wLCBDYWxsTW9kZSk7Cisg
ICAgVGVybWluYWxpdHkgaGFuZGxlQ2FsbChjb25zdCBJbnN0cnVjdGlvbiogcGMsIE5vZGVUeXBl
IG9wLCBDYWxsTW9kZSwgQnl0ZWNvZGVJbmRleCBvc3JFeGl0SW5kZXgpOwogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENhbGxPcD4KICAgICBUZXJtaW5hbGl0eSBoYW5kbGVWYXJhcmdzQ2FsbChjb25z
dCBJbnN0cnVjdGlvbiogcGMsIE5vZGVUeXBlIG9wLCBDYWxsTW9kZSk7CiAgICAgdm9pZCBlbWl0
RnVuY3Rpb25DaGVja3MoQ2FsbFZhcmlhbnQsIE5vZGUqIGNhbGxUYXJnZXQsIFZpcnR1YWxSZWdp
c3RlciB0aGlzQXJndW1udCk7CkBAIC0xOTQsOCArMTk0LDggQEAgcHJpdmF0ZToKICAgICBib29s
IGhhbmRsZVZhcmFyZ3NJbmxpbmluZyhOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgT3BlcmFuZCByZXN1
bHQsIGNvbnN0IENhbGxMaW5rU3RhdHVzJiwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBWaXJ0dWFsUmVn
aXN0ZXIgdGhpc0FyZ3VtZW50LCBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzQXJndW1lbnQsIHVu
c2lnbmVkIGFyZ3VtZW50c09mZnNldCwgTm9kZVR5cGUgY2FsbE9wLCBJbmxpbmVDYWxsRnJhbWU6
OktpbmQpOwogICAgIHVuc2lnbmVkIGdldElubGluaW5nQmFsYW5jZShjb25zdCBDYWxsTGlua1N0
YXR1cyYsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwogICAgIGVudW0gY2xhc3MgQ2FsbE9wdGlt
aXphdGlvblJlc3VsdCB7IE9wdGltaXplZFRvSnVtcCwgSW5saW5lZCwgRGlkTm90aGluZyB9Owot
ICAgIENhbGxPcHRpbWl6YXRpb25SZXN1bHQgaGFuZGxlQ2FsbFZhcmlhbnQoTm9kZSogY2FsbFRh
cmdldE5vZGUsIE9wZXJhbmQgcmVzdWx0LCBDYWxsVmFyaWFudCwgaW50IHJlZ2lzdGVyT2Zmc2V0
LCBWaXJ0dWFsUmVnaXN0ZXIgdGhpc0FyZ3VtZW50LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMsIEJ5dGVjb2RlSW5kZXggbmV4dEluZGV4LCBJbmxpbmVDYWxsRnJhbWU6OktpbmQsIFNw
ZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIHVuc2lnbmVkJiBpbmxpbmluZ0JhbGFuY2UsIEJhc2lj
QmxvY2sqIGNvbnRpbnVhdGlvbkJsb2NrLCBib29sIG5lZWRzVG9DaGVja0NhbGxlZSk7Ci0gICAg
Q2FsbE9wdGltaXphdGlvblJlc3VsdCBoYW5kbGVJbmxpbmluZyhOb2RlKiBjYWxsVGFyZ2V0Tm9k
ZSwgT3BlcmFuZCByZXN1bHQsIGNvbnN0IENhbGxMaW5rU3RhdHVzJiwgaW50IHJlZ2lzdGVyT2Zm
c2V0LCBWaXJ0dWFsUmVnaXN0ZXIgdGhpc0FyZ3VtZW50LCBpbnQgYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMsIEJ5dGVjb2RlSW5kZXggbmV4dEluZGV4LCBOb2RlVHlwZSBjYWxsT3AsIElubGlu
ZUNhbGxGcmFtZTo6S2luZCwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbik7CisgICAgQ2FsbE9w
dGltaXphdGlvblJlc3VsdCBoYW5kbGVDYWxsVmFyaWFudChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwg
T3BlcmFuZCByZXN1bHQsIENhbGxWYXJpYW50LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIFZpcnR1YWxS
ZWdpc3RlciB0aGlzQXJndW1lbnQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgQnl0
ZWNvZGVJbmRleCBvc3JFeGl0SW5kZXgsIElubGluZUNhbGxGcmFtZTo6S2luZCwgU3BlY3VsYXRl
ZFR5cGUgcHJlZGljdGlvbiwgdW5zaWduZWQmIGlubGluaW5nQmFsYW5jZSwgQmFzaWNCbG9jayog
Y29udGludWF0aW9uQmxvY2ssIGJvb2wgbmVlZHNUb0NoZWNrQ2FsbGVlKTsKKyAgICBDYWxsT3B0
aW1pemF0aW9uUmVzdWx0IGhhbmRsZUlubGluaW5nKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBPcGVy
YW5kIHJlc3VsdCwgY29uc3QgQ2FsbExpbmtTdGF0dXMmLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIFZp
cnR1YWxSZWdpc3RlciB0aGlzQXJndW1lbnQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cywgQnl0ZWNvZGVJbmRleCBvc3JFeGl0SW5kZXgsIE5vZGVUeXBlIGNhbGxPcCwgSW5saW5lQ2Fs
bEZyYW1lOjpLaW5kLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKTsKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBDaGVja3NGdW5jdG9yPgogICAgIHZvaWQgaW5saW5lQ2FsbChOb2RlKiBjYWxsVGFy
Z2V0Tm9kZSwgT3BlcmFuZCByZXN1bHQsIENhbGxWYXJpYW50LCBpbnQgcmVnaXN0ZXJPZmZzZXQs
IGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCBC
YXNpY0Jsb2NrKiBjb250aW51YXRpb25CbG9jaywgY29uc3QgQ2hlY2tzRnVuY3RvciYgaW5zZXJ0
Q2hlY2tzKTsKICAgICAvLyBIYW5kbGUgaW50cmluc2ljIGZ1bmN0aW9ucy4gUmV0dXJuIHRydWUg
aWYgaXQgc3VjY2VlZGVkLCBmYWxzZSBpZiB3ZSBuZWVkIHRvIHBsYW50IGEgY2FsbC4KQEAgLTIx
NSw3ICsyMTUsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgaGFuZGxlTW9kdWxlTmFtZXNwYWNlTG9h
ZChWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBTcGVjdWxhdGVkVHlwZSwgTm9kZSogYmFzZSwgR2V0
QnlTdGF0dXMpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+Ci0gICAgdm9pZCBo
YW5kbGVQdXRCeVZhbChCeXRlY29kZSwgdW5zaWduZWQgaW5zdHJ1Y3Rpb25TaXplKTsKKyAgICB2
b2lkIGhhbmRsZVB1dEJ5VmFsKEJ5dGVjb2RlLCBCeXRlY29kZUluZGV4IG9zckV4aXRJbmRleCk7
CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgogICAgIHZvaWQgaGFuZGxlUHV0QWNj
ZXNzb3JCeUlkKE5vZGVUeXBlLCBCeXRlY29kZSk7CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5
dGVjb2RlPgpAQCAtMjQ3LDEyICsyNDcsMTIgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KICAgICB2b2lkIHBhcnNlR2V0QnlJZChjb25zdCBJbnN0cnVjdGlvbiopOwogICAg
IHZvaWQgaGFuZGxlR2V0QnlJZCgKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRlc3RpbmF0aW9u
LCBTcGVjdWxhdGVkVHlwZSwgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciwgdW5zaWdu
ZWQgaWRlbnRpZmllck51bWJlciwgR2V0QnlTdGF0dXMsIEFjY2Vzc1R5cGUsIHVuc2lnbmVkIGlu
c3RydWN0aW9uU2l6ZSk7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBkZXN0aW5hdGlvbiwgU3Bl
Y3VsYXRlZFR5cGUsIE5vZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIsIHVuc2lnbmVkIGlk
ZW50aWZpZXJOdW1iZXIsIEdldEJ5U3RhdHVzLCBBY2Nlc3NUeXBlLCBCeXRlY29kZUluZGV4IG9z
ckV4aXRJbmRleCk7CiAgICAgdm9pZCBlbWl0UHV0QnlJZCgKICAgICAgICAgTm9kZSogYmFzZSwg
Q2FjaGVhYmxlSWRlbnRpZmllciwgTm9kZSogdmFsdWUsICBjb25zdCBQdXRCeUlkU3RhdHVzJiwg
Ym9vbCBpc0RpcmVjdCwgRUNNQU1vZGUpOwogICAgIHZvaWQgaGFuZGxlUHV0QnlJZCgKICAgICAg
ICAgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciwgdW5zaWduZWQgaWRlbnRpZmllck51
bWJlciwgTm9kZSogdmFsdWUsIGNvbnN0IFB1dEJ5SWRTdGF0dXMmLAotICAgICAgICBib29sIGlz
RGlyZWN0LCB1bnNpZ25lZCBpbnRydWN0aW9uU2l6ZSwgRUNNQU1vZGUpOworICAgICAgICBib29s
IGlzRGlyZWN0LCBCeXRlY29kZUluZGV4IG9zckV4aXRJbmRleCwgRUNNQU1vZGUpOwogCiAgICAg
dm9pZCBoYW5kbGVEZWxldGVCeUlkKAogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZGVzdGluYXRp
b24sIE5vZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIsIHVuc2lnbmVkIGlkZW50aWZpZXJO
dW1iZXIsIERlbGV0ZUJ5U3RhdHVzLCBFQ01BTW9kZSk7CkBAIC0yOTIsOSArMjkyLDEyIEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBsaW5rQmxvY2soQmFzaWNCbG9jayosIFZlY3RvcjxCYXNpY0Jsb2Nr
Kj4mIHBvc3NpYmxlVGFyZ2V0cyk7CiAgICAgdm9pZCBsaW5rQmxvY2tzKFZlY3RvcjxCYXNpY0Js
b2NrKj4mIHVubGlua2VkQmxvY2tzLCBWZWN0b3I8QmFzaWNCbG9jayo+JiBwb3NzaWJsZVRhcmdl
dHMpOwogICAgIAorICAgIEJ5dGVjb2RlSW5kZXggbmV4dEJ5dGVjb2RlSW5kZXgoKSBjb25zdCB7
IHJldHVybiBCeXRlY29kZUluZGV4KG1fY3VycmVudEluZGV4Lm9mZnNldCgpICsgbV9jdXJyZW50
SW5zdHJ1Y3Rpb24tPnNpemUoKSk7IH0KKyAgICBCeXRlY29kZUluZGV4IG5leHRDaGVja3BvaW50
KCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50SW5kZXgud2l0aENoZWNrcG9pbnQobV9jdXJyZW50
SW5kZXguY2hlY2twb2ludCgpICsgMSk7IH0KKwogICAgIHZvaWQgcHJvZ3Jlc3NUb05leHRDaGVj
a3BvaW50KCkKICAgICB7Ci0gICAgICAgIG1fY3VycmVudEluZGV4ID0gQnl0ZWNvZGVJbmRleCht
X2N1cnJlbnRJbmRleC5vZmZzZXQoKSwgbV9jdXJyZW50SW5kZXguY2hlY2twb2ludCgpICsgMSk7
CisgICAgICAgIG1fY3VycmVudEluZGV4ID0gbmV4dENoZWNrcG9pbnQoKTsKICAgICAgICAgLy8g
QXQgdGhpcyBwb2ludCwgaXQncyBhZ2FpbiBPSyB0byBPU1IgZXhpdC4KICAgICAgICAgbV9leGl0
T0sgPSB0cnVlOwogICAgICAgICBwcm9jZXNzU2V0TG9jYWxRdWV1ZSgpOwpAQCAtMTMwNSw3ICsx
MzA4LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6YWRkSnVtcFRvKHVuc2lnbmVkIGJ5dGVjb2Rl
SW5kZXgpCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENhbGxPcD4KLUJ5dGVDb2RlUGFyc2VyOjpU
ZXJtaW5hbGl0eSBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbChjb25zdCBJbnN0cnVjdGlvbiog
cGMsIE5vZGVUeXBlIG9wLCBDYWxsTW9kZSBjYWxsTW9kZSkKK0J5dGVDb2RlUGFyc2VyOjpUZXJt
aW5hbGl0eSBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbChjb25zdCBJbnN0cnVjdGlvbiogcGMs
IE5vZGVUeXBlIG9wLCBDYWxsTW9kZSBjYWxsTW9kZSwgQnl0ZWNvZGVJbmRleCBvc3JFeGl0SW5k
ZXgpCiB7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxDYWxsT3A+KCk7CiAgICAgTm9kZSog
Y2FsbFRhcmdldCA9IGdldChjYWxsZWVGb3IoYnl0ZWNvZGUsIG1fY3VycmVudEluZGV4LmNoZWNr
cG9pbnQoKSkpOwpAQCAtMTMxNiw4ICsxMzE5LDkgQEAgQnl0ZUNvZGVQYXJzZXI6OlRlcm1pbmFs
aXR5IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKGNvbnN0IEluc3RydWN0aW9uKiBwYywgTm8K
ICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9iYXNlbGluZU1hcCwgbV9pY0NvbnRleHRTdGFj
ayk7CiAKICAgICBJbmxpbmVDYWxsRnJhbWU6OktpbmQga2luZCA9IElubGluZUNhbGxGcmFtZTo6
a2luZEZvcihjYWxsTW9kZSk7CisgICAgQVNTRVJUKG9zckV4aXRJbmRleCk7CiAKLSAgICByZXR1
cm4gaGFuZGxlQ2FsbChkZXN0aW5hdGlvbkZvcihieXRlY29kZSwgbV9jdXJyZW50SW5kZXguY2hl
Y2twb2ludCgpLCBKSVRUeXBlOjpERkdKSVQpLCBvcCwga2luZCwgcGMtPnNpemUoKSwgY2FsbFRh
cmdldCwKKyAgICByZXR1cm4gaGFuZGxlQ2FsbChkZXN0aW5hdGlvbkZvcihieXRlY29kZSwgbV9j
dXJyZW50SW5kZXguY2hlY2twb2ludCgpLCBKSVRUeXBlOjpERkdKSVQpLCBvcCwga2luZCwgb3Ny
RXhpdEluZGV4LCBjYWxsVGFyZ2V0LAogICAgICAgICBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
c0ZvcihieXRlY29kZSwgbV9jdXJyZW50SW5kZXguY2hlY2twb2ludCgpKSwgcmVnaXN0ZXJPZmZz
ZXQsIGNhbGxMaW5rU3RhdHVzLCBnZXRQcmVkaWN0aW9uKCkpOwogfQogCkBAIC0xMzI4LDcgKzEz
MzIsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpyZWZpbmVTdGF0aWNhbGx5KENhbGxMaW5rU3Rh
dHVzJiBjYWxsTGlua1N0YXR1cywgTm9kZSogY2FsbAogfQogCiBCeXRlQ29kZVBhcnNlcjo6VGVy
bWluYWxpdHkgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwoCi0gICAgT3BlcmFuZCByZXN1bHQs
IE5vZGVUeXBlIG9wLCBJbmxpbmVDYWxsRnJhbWU6OktpbmQga2luZCwgdW5zaWduZWQgaW5zdHJ1
Y3Rpb25TaXplLAorICAgIE9wZXJhbmQgcmVzdWx0LCBOb2RlVHlwZSBvcCwgSW5saW5lQ2FsbEZy
YW1lOjpLaW5kIGtpbmQsIEJ5dGVjb2RlSW5kZXggb3NyRXhpdEluZGV4LAogICAgIE5vZGUqIGNh
bGxUYXJnZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgaW50IHJlZ2lzdGVyT2Zm
c2V0LAogICAgIENhbGxMaW5rU3RhdHVzIGNhbGxMaW5rU3RhdHVzLCBTcGVjdWxhdGVkVHlwZSBw
cmVkaWN0aW9uKQogewpAQCAtMTM0NSw3ICsxMzQ5LDcgQEAgQnl0ZUNvZGVQYXJzZXI6OlRlcm1p
bmFsaXR5IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKAogCiAgICAgICAgIFZpcnR1YWxSZWdp
c3RlciB0aGlzQXJndW1lbnQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1Ro
aXMoMCwgcmVnaXN0ZXJPZmZzZXQpOwogICAgICAgICBhdXRvIG9wdGltaXphdGlvblJlc3VsdCA9
IGhhbmRsZUlubGluaW5nKGNhbGxUYXJnZXQsIHJlc3VsdCwgY2FsbExpbmtTdGF0dXMsIHJlZ2lz
dGVyT2Zmc2V0LCB0aGlzQXJndW1lbnQsCi0gICAgICAgICAgICBhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcywgQnl0ZWNvZGVJbmRleChtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSArIGluc3RydWN0
aW9uU2l6ZSksIG9wLCBraW5kLCBwcmVkaWN0aW9uKTsKKyAgICAgICAgICAgIGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzLCBvc3JFeGl0SW5kZXgsIG9wLCBraW5kLCBwcmVkaWN0aW9uKTsKICAg
ICAgICAgaWYgKG9wdGltaXphdGlvblJlc3VsdCA9PSBDYWxsT3B0aW1pemF0aW9uUmVzdWx0OjpP
cHRpbWl6ZWRUb0p1bXApCiAgICAgICAgICAgICByZXR1cm4gVGVybWluYWw7CiAgICAgICAgIGlm
IChvcHRpbWl6YXRpb25SZXN1bHQgPT0gQ2FsbE9wdGltaXphdGlvblJlc3VsdDo6SW5saW5lZCkg
ewpAQCAtMTgzMCw3ICsxODM0LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aW5saW5lQ2FsbChO
b2RlKiBjYWxsVGFyZ2V0Tm9kZSwgT3BlcmFuZCByZXN1bHQsIENhbGxWYXJpYW4KICAgICBtX2N1
cnJlbnRJbnN0cnVjdGlvbiA9IHNhdmVkQ3VycmVudEluc3RydWN0aW9uOwogfQogCi1CeXRlQ29k
ZVBhcnNlcjo6Q2FsbE9wdGltaXphdGlvblJlc3VsdCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2Fs
bFZhcmlhbnQoTm9kZSogY2FsbFRhcmdldE5vZGUsIE9wZXJhbmQgcmVzdWx0LCBDYWxsVmFyaWFu
dCBjYWxsZWUsIGludCByZWdpc3Rlck9mZnNldCwgVmlydHVhbFJlZ2lzdGVyIHRoaXNBcmd1bWVu
dCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBCeXRlY29kZUluZGV4IG5leHRJbmRl
eCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kIGtpbmQsIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24s
IHVuc2lnbmVkJiBpbmxpbmluZ0JhbGFuY2UsIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbkJsb2Nr
LCBib29sIG5lZWRzVG9DaGVja0NhbGxlZSkKK0J5dGVDb2RlUGFyc2VyOjpDYWxsT3B0aW1pemF0
aW9uUmVzdWx0IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsVmFyaWFudChOb2RlKiBjYWxsVGFy
Z2V0Tm9kZSwgT3BlcmFuZCByZXN1bHQsIENhbGxWYXJpYW50IGNhbGxlZSwgaW50IHJlZ2lzdGVy
T2Zmc2V0LCBWaXJ0dWFsUmVnaXN0ZXIgdGhpc0FyZ3VtZW50LCBpbnQgYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMsIEJ5dGVjb2RlSW5kZXggb3NyRXhpdEluZGV4LCBJbmxpbmVDYWxsRnJhbWU6
OktpbmQga2luZCwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgdW5zaWduZWQmIGlubGluaW5n
QmFsYW5jZSwgQmFzaWNCbG9jayogY29udGludWF0aW9uQmxvY2ssIGJvb2wgbmVlZHNUb0NoZWNr
Q2FsbGVlKQogewogICAgIFZFUkJPU0VfTE9HKCIgICAgQ29uc2lkZXJpbmcgY2FsbGVlICIsIGNh
bGxlZSwgIlxuIik7CiAKQEAgLTE4NTgsNyArMTg2Miw3IEBAIEJ5dGVDb2RlUGFyc2VyOjpDYWxs
T3B0aW1pemF0aW9uUmVzdWx0IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsVmFyaWFudChOb2Rl
KiBjCiAgICAgICAgIGVtaXRBcmd1bWVudFBoYW50b21zKHJlZ2lzdGVyT2Zmc2V0LCBhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyk7CiAgICAgICAgIGlubGluaW5nQmFsYW5jZS0tOwogICAgICAg
ICBpZiAoY29udGludWF0aW9uQmxvY2spIHsKLSAgICAgICAgICAgIG1fY3VycmVudEluZGV4ID0g
bmV4dEluZGV4OworICAgICAgICAgICAgbV9jdXJyZW50SW5kZXggPSBvc3JFeGl0SW5kZXg7CiAg
ICAgICAgICAgICBtX2V4aXRPSyA9IHRydWU7CiAgICAgICAgICAgICBwcm9jZXNzU2V0TG9jYWxR
dWV1ZSgpOwogICAgICAgICAgICAgYWRkSnVtcFRvKGNvbnRpbnVhdGlvbkJsb2NrKTsKQEAgLTIw
NTQsNyArMjA1OCw3IEBAIEJ5dGVDb2RlUGFyc2VyOjpDYWxsT3B0aW1pemF0aW9uUmVzdWx0IEJ5
dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZygKICAgICBOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwg
T3BlcmFuZCByZXN1bHQsIGNvbnN0IENhbGxMaW5rU3RhdHVzJiBjYWxsTGlua1N0YXR1cywKICAg
ICBpbnQgcmVnaXN0ZXJPZmZzZXQsIFZpcnR1YWxSZWdpc3RlciB0aGlzQXJndW1lbnQsCiAgICAg
aW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLAotICAgIEJ5dGVjb2RlSW5kZXggbmV4dElu
ZGV4LCBOb2RlVHlwZSBjYWxsT3AsIElubGluZUNhbGxGcmFtZTo6S2luZCBraW5kLCBTcGVjdWxh
dGVkVHlwZSBwcmVkaWN0aW9uKQorICAgIEJ5dGVjb2RlSW5kZXggb3NyRXhpdEluZGV4LCBOb2Rl
VHlwZSBjYWxsT3AsIElubGluZUNhbGxGcmFtZTo6S2luZCBraW5kLCBTcGVjdWxhdGVkVHlwZSBw
cmVkaWN0aW9uKQogewogICAgIFZFUkJPU0VfTE9HKCJIYW5kbGluZyBpbmxpbmluZy4uLlxuU3Rh
Y2s6ICIsIGN1cnJlbnRDb2RlT3JpZ2luKCksICJcbiIpOwogICAgIApAQCAtMjA2Nyw3ICsyMDcx
LDcgQEAgQnl0ZUNvZGVQYXJzZXI6OkNhbGxPcHRpbWl6YXRpb25SZXN1bHQgQnl0ZUNvZGVQYXJz
ZXI6OmhhbmRsZUlubGluaW5nKAogICAgIGlmICghY2FsbExpbmtTdGF0dXMuY291bGRUYWtlU2xv
d1BhdGgoKSAmJiBjYWxsTGlua1N0YXR1cy5zaXplKCkgPT0gMSkgewogICAgICAgICByZXR1cm4g
aGFuZGxlQ2FsbFZhcmlhbnQoCiAgICAgICAgICAgICBjYWxsVGFyZ2V0Tm9kZSwgcmVzdWx0LCBj
YWxsTGlua1N0YXR1c1swXSwgcmVnaXN0ZXJPZmZzZXQsIHRoaXNBcmd1bWVudCwKLSAgICAgICAg
ICAgIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBuZXh0SW5kZXgsIGtpbmQsIHByZWRpY3Rp
b24sIGlubGluaW5nQmFsYW5jZSwgbnVsbHB0ciwgdHJ1ZSk7CisgICAgICAgICAgICBhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcywgb3NyRXhpdEluZGV4LCBraW5kLCBwcmVkaWN0aW9uLCBpbmxp
bmluZ0JhbGFuY2UsIG51bGxwdHIsIHRydWUpOwogICAgIH0KIAogICAgIC8vIFdlIG5lZWQgdG8g
Y3JlYXRlIHNvbWUga2luZCBvZiBzd2l0Y2ggb3ZlciBjYWxsZWUuIEZvciBub3cgd2Ugb25seSBk
byB0aGlzIGlmIHdlIGJlbGlldmUgdGhhdApAQCAtMjE1Nyw3ICsyMTYxLDcgQEAgQnl0ZUNvZGVQ
YXJzZXI6OkNhbGxPcHRpbWl6YXRpb25SZXN1bHQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGlu
aW5nKAogICAgICAgICAKICAgICAgICAgYXV0byBpbmxpbmluZ1Jlc3VsdCA9IGhhbmRsZUNhbGxW
YXJpYW50KAogICAgICAgICAgICAgbXlDYWxsVGFyZ2V0Tm9kZSwgcmVzdWx0LCBjYWxsTGlua1N0
YXR1c1tpXSwgcmVnaXN0ZXJPZmZzZXQsCi0gICAgICAgICAgICB0aGlzQXJndW1lbnQsIGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzLCBuZXh0SW5kZXgsIGtpbmQsIHByZWRpY3Rpb24sCisgICAg
ICAgICAgICB0aGlzQXJndW1lbnQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBvc3JFeGl0
SW5kZXgsIGtpbmQsIHByZWRpY3Rpb24sCiAgICAgICAgICAgICBpbmxpbmluZ0JhbGFuY2UsIGNv
bnRpbnVhdGlvbkJsb2NrLCBmYWxzZSk7CiAgICAgICAgIAogICAgICAgICBpZiAoaW5saW5pbmdS
ZXN1bHQgPT0gQ2FsbE9wdGltaXphdGlvblJlc3VsdDo6RGlkTm90aGluZykgewpAQCAtMjIwNiw3
ICsyMjEwLDcgQEAgQnl0ZUNvZGVQYXJzZXI6OkNhbGxPcHRpbWl6YXRpb25SZXN1bHQgQnl0ZUNv
ZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKAogICAgICAgICBWRVJCT1NFX0xPRygiY291bGRUYWtl
U2xvd1BhdGggd2FzIGZhbHNlXG4iKTsKICAgICB9CiAKLSAgICBtX2N1cnJlbnRJbmRleCA9IG5l
eHRJbmRleDsKKyAgICBtX2N1cnJlbnRJbmRleCA9IG9zckV4aXRJbmRleDsKICAgICBtX2V4aXRP
SyA9IHRydWU7IC8vIE9yaWdpbiBjaGFuZ2VkLCBzbyBpdCdzIGZpbmUgdG8gZXhpdCBhZ2Fpbi4K
ICAgICBwcm9jZXNzU2V0TG9jYWxRdWV1ZSgpOwogCkBAIC00NDg3LDcgKzQ0OTEsNyBAQCBOb2Rl
KiBCeXRlQ29kZVBhcnNlcjo6c3RvcmUoTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllciwg
Y29uc3QgUHV0QnlJZFZhcmlhbgogCiB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlk
KAogICAgIFZpcnR1YWxSZWdpc3RlciBkZXN0aW5hdGlvbiwgU3BlY3VsYXRlZFR5cGUgcHJlZGlj
dGlvbiwgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyLCB1bnNpZ25l
ZCBpZGVudGlmaWVyTnVtYmVyLAotICAgIEdldEJ5U3RhdHVzIGdldEJ5U3RhdHVzLCBBY2Nlc3NU
eXBlIHR5cGUsIHVuc2lnbmVkIGluc3RydWN0aW9uU2l6ZSkKKyAgICBHZXRCeVN0YXR1cyBnZXRC
eVN0YXR1cywgQWNjZXNzVHlwZSB0eXBlLCBCeXRlY29kZUluZGV4IG9zckV4aXRJbmRleCkKIHsK
ICAgICAvLyBBdHRlbXB0IHRvIHJlZHVjZSB0aGUgc2V0IG9mIHRoaW5ncyBpbiB0aGUgR2V0QnlT
dGF0dXMuCiAgICAgaWYgKGJhc2UtPm9wKCkgPT0gTmV3T2JqZWN0KSB7CkBAIC00NjY3LDcgKzQ2
NzEsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlkKAogICAgIGFkZFRvR3Jh
cGgoRXhpdE9LKTsKICAgICAKICAgICBoYW5kbGVDYWxsKAotICAgICAgICBkZXN0aW5hdGlvbiwg
Q2FsbCwgSW5saW5lQ2FsbEZyYW1lOjpHZXR0ZXJDYWxsLCBpbnN0cnVjdGlvblNpemUsCisgICAg
ICAgIGRlc3RpbmF0aW9uLCBDYWxsLCBJbmxpbmVDYWxsRnJhbWU6OkdldHRlckNhbGwsIG9zckV4
aXRJbmRleCwKICAgICAgICAgZ2V0dGVyLCBudW1iZXJPZlBhcmFtZXRlcnMgLSAxLCByZWdpc3Rl
ck9mZnNldCwgKnZhcmlhbnQuY2FsbExpbmtTdGF0dXMoKSwgcHJlZGljdGlvbik7CiB9CiAKQEAg
LTQ3ODAsNyArNDc4NCw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmVtaXRQdXRCeUlkKAogCiB2
b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgIE5vZGUqIGJhc2UsIENhY2hl
YWJsZUlkZW50aWZpZXIgaWRlbnRpZmllciwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgTm9k
ZSogdmFsdWUsCi0gICAgY29uc3QgUHV0QnlJZFN0YXR1cyYgcHV0QnlJZFN0YXR1cywgYm9vbCBp
c0RpcmVjdCwgdW5zaWduZWQgaW5zdHJ1Y3Rpb25TaXplLCBFQ01BTW9kZSBlY21hTW9kZSkKKyAg
ICBjb25zdCBQdXRCeUlkU3RhdHVzJiBwdXRCeUlkU3RhdHVzLCBib29sIGlzRGlyZWN0LCBCeXRl
Y29kZUluZGV4IG9zckV4aXRJbmRleCwgRUNNQU1vZGUgZWNtYU1vZGUpCiB7CiAgICAgaWYgKCFw
dXRCeUlkU3RhdHVzLmlzU2ltcGxlKCkgfHwgIXB1dEJ5SWRTdGF0dXMubnVtVmFyaWFudHMoKSB8
fCAhT3B0aW9uczo6dXNlQWNjZXNzSW5saW5pbmcoKSkgewogICAgICAgICBpZiAoIXB1dEJ5SWRT
dGF0dXMuaXNTZXQoKSkKQEAgLTQ5NTAsNyArNDk1NCw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6
OmhhbmRsZVB1dEJ5SWQoCiAgICAgCiAgICAgICAgIGhhbmRsZUNhbGwoCiAgICAgICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIoKSwgQ2FsbCwgSW5saW5lQ2FsbEZyYW1lOjpTZXR0ZXJDYWxsLAotICAg
ICAgICAgICAgaW5zdHJ1Y3Rpb25TaXplLCBzZXR0ZXIsIG51bWJlck9mUGFyYW1ldGVycyAtIDEs
IHJlZ2lzdGVyT2Zmc2V0LAorICAgICAgICAgICAgb3NyRXhpdEluZGV4LCBzZXR0ZXIsIG51bWJl
ck9mUGFyYW1ldGVycyAtIDEsIHJlZ2lzdGVyT2Zmc2V0LAogICAgICAgICAgICAgKnZhcmlhbnQu
Y2FsbExpbmtTdGF0dXMoKSwgU3BlY090aGVyKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAg
LTQ5ODMsNyArNDk4Nyw2IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlR2V0QnlJZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIFVuaXF1ZWRTdHJpbmdJbXBs
KiB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmllck51bWJlcl07CiAgICAgCiAg
ICAgQWNjZXNzVHlwZSB0eXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKLSAgICB1bnNpZ25lZCBv
cGNvZGVMZW5ndGggPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKTsKICAgICBpZiAoT3A6Om9w
Y29kZUlEID09IG9wX3RyeV9nZXRfYnlfaWQpCiAgICAgICAgIHR5cGUgPSBBY2Nlc3NUeXBlOjpU
cnlHZXRCeUlkOwogICAgIGVsc2UgaWYgKE9wOjpvcGNvZGVJRCA9PSBvcF9nZXRfYnlfaWRfZGly
ZWN0KQpAQCAtNDk5NCw3ICs0OTk3LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VHZXRC
eUlkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgICAgIG1faW5s
aW5lU3RhY2tUb3AtPm1fYmFzZWxpbmVNYXAsIG1faWNDb250ZXh0U3RhY2ssCiAgICAgICAgIGN1
cnJlbnRDb2RlT3JpZ2luKCkpOwogCi0gICAgaGFuZGxlR2V0QnlJZChieXRlY29kZS5tX2RzdCwg
cHJlZGljdGlvbiwgYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZp
ZXJPd25lZEJ5Q29kZUJsb2NrKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywgdWlk
KSwgaWRlbnRpZmllck51bWJlciwgZ2V0QnlTdGF0dXMsIHR5cGUsIG9wY29kZUxlbmd0aCk7Cisg
ICAgaGFuZGxlR2V0QnlJZChieXRlY29kZS5tX2RzdCwgcHJlZGljdGlvbiwgYmFzZSwgQ2FjaGVh
YmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1faW5s
aW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywgdWlkKSwgaWRlbnRpZmllck51bWJlciwgZ2V0
QnlTdGF0dXMsIHR5cGUsIG5leHRCeXRlY29kZUluZGV4KCkpOwogfQogCiBzdGF0aWMgdWludDY0
X3QgbWFrZUR5bmFtaWNWYXJPcEluZm8odW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgdW5zaWdu
ZWQgZ2V0UHV0SW5mbykKQEAgLTU5NDIsNyArNTk0NSw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6
OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
IGlmIChzaG91bGRDb21waWxlQXNHZXRCeUlkKQotICAgICAgICAgICAgICAgIGhhbmRsZUdldEJ5
SWQoYnl0ZWNvZGUubV9kc3QsIHByZWRpY3Rpb24sIGJhc2UsIGlkZW50aWZpZXIsIGlkZW50aWZp
ZXJOdW1iZXIsIGdldEJ5U3RhdHVzLCBBY2Nlc3NUeXBlOjpHZXRCeUlkLCBjdXJyZW50SW5zdHJ1
Y3Rpb24tPnNpemUoKSk7CisgICAgICAgICAgICAgICAgaGFuZGxlR2V0QnlJZChieXRlY29kZS5t
X2RzdCwgcHJlZGljdGlvbiwgYmFzZSwgaWRlbnRpZmllciwgaWRlbnRpZmllck51bWJlciwgZ2V0
QnlTdGF0dXMsIEFjY2Vzc1R5cGU6OkdldEJ5SWQsIG5leHRCeXRlY29kZUluZGV4KCkpOwogICAg
ICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgQXJyYXlNb2RlIGFycmF5TW9kZSA9IGdl
dEFycmF5TW9kZShieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spLm1fYXJyYXlQcm9maWxlLCBB
cnJheTo6UmVhZCk7CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIGNvbnNpZGVy
IG1ha2luZyB0aGlzIG5vdCB2YXJhcmcsIHNpbmNlIGl0IG9ubHkgdXNlcyB0aHJlZSBjaGlsZApA
QCAtNTk3NSwxMSArNTk3OCwxMSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVu
c2lnbmVkIGxpbWl0KQogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9wdXRfYnlfdmFsX2Rp
cmVjdDoKLSAgICAgICAgICAgIGhhbmRsZVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BQdXRCeVZhbERpcmVjdD4oKSwgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpOworICAgICAg
ICAgICAgaGFuZGxlUHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsRGly
ZWN0PigpLCBuZXh0Qnl0ZWNvZGVJbmRleCgpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9w
X3B1dF9ieV92YWxfZGlyZWN0KTsKIAogICAgICAgICBjYXNlIG9wX3B1dF9ieV92YWw6IHsKLSAg
ICAgICAgICAgIGhhbmRsZVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZh
bD4oKSwgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpOworICAgICAgICAgICAgaGFuZGxlUHV0
QnlWYWwoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsPigpLCBuZXh0Qnl0ZWNvZGVJ
bmRleCgpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3B1dF9ieV92YWwpOwogICAgICAg
ICB9CiAKQEAgLTYwNzEsNyArNjA3NCw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxv
Y2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9i
YXNlbGluZU1hcCwgbV9pY0NvbnRleHRTdGFjaywKICAgICAgICAgICAgICAgICBjdXJyZW50Q29k
ZU9yaWdpbigpLCBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmllck51bWJlcl0pOwogICAg
ICAgICAgICAgCi0gICAgICAgICAgICBoYW5kbGVQdXRCeUlkKGJhc2UsIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2lubGluZVN0YWNr
VG9wLT5tX3Byb2ZpbGVkQmxvY2ssIHVpZCksIGlkZW50aWZpZXJOdW1iZXIsIHZhbHVlLCBwdXRC
eUlkU3RhdHVzLCBkaXJlY3QsIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpLCBieXRlY29kZS5t
X2ZsYWdzLmVjbWFNb2RlKCkpOworICAgICAgICAgICAgaGFuZGxlUHV0QnlJZChiYXNlLCBDYWNo
ZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9p
bmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLCB1aWQpLCBpZGVudGlmaWVyTnVtYmVyLCB2
YWx1ZSwgcHV0QnlJZFN0YXR1cywgZGlyZWN0LCBuZXh0Qnl0ZWNvZGVJbmRleCgpLCBieXRlY29k
ZS5tX2ZsYWdzLmVjbWFNb2RlKCkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfcHV0X2J5
X2lkKTsKICAgICAgICAgfQogCkBAIC02NjE0LDEzICs2NjE3LDEzIEBAIHZvaWQgQnl0ZUNvZGVQ
YXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgIH0KIAogICAgICAgICBj
YXNlIG9wX2NhbGw6Ci0gICAgICAgICAgICBoYW5kbGVDYWxsPE9wQ2FsbD4oY3VycmVudEluc3Ry
dWN0aW9uLCBDYWxsLCBDYWxsTW9kZTo6UmVndWxhcik7CisgICAgICAgICAgICBoYW5kbGVDYWxs
PE9wQ2FsbD4oY3VycmVudEluc3RydWN0aW9uLCBDYWxsLCBDYWxsTW9kZTo6UmVndWxhciwgbmV4
dEJ5dGVjb2RlSW5kZXgoKSk7CiAgICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fY3Vy
cmVudEluc3RydWN0aW9uID09IGN1cnJlbnRJbnN0cnVjdGlvbiwgImhhbmRsZUNhbGwsIHdoaWNo
IG1heSBoYXZlIGlubGluZWQgdGhlIGNhbGxlZSwgdHJhc2hlZCBtX2N1cnJlbnRJbnN0cnVjdGlv
biIpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY2FsbCk7CiAKICAgICAgICAgY2FzZSBv
cF90YWlsX2NhbGw6IHsKICAgICAgICAgICAgIGZsdXNoRm9yUmV0dXJuKCk7Ci0gICAgICAgICAg
ICBUZXJtaW5hbGl0eSB0ZXJtaW5hbGl0eSA9IGhhbmRsZUNhbGw8T3BUYWlsQ2FsbD4oY3VycmVu
dEluc3RydWN0aW9uLCBUYWlsQ2FsbCwgQ2FsbE1vZGU6OlRhaWwpOworICAgICAgICAgICAgVGVy
bWluYWxpdHkgdGVybWluYWxpdHkgPSBoYW5kbGVDYWxsPE9wVGFpbENhbGw+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgVGFpbENhbGwsIENhbGxNb2RlOjpUYWlsLCBuZXh0Qnl0ZWNvZGVJbmRleCgpKTsK
ICAgICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9jdXJyZW50SW5zdHJ1Y3Rpb24gPT0g
Y3VycmVudEluc3RydWN0aW9uLCAiaGFuZGxlQ2FsbCwgd2hpY2ggbWF5IGhhdmUgaW5saW5lZCB0
aGUgY2FsbGVlLCB0cmFzaGVkIG1fY3VycmVudEluc3RydWN0aW9uIik7CiAgICAgICAgICAgICAv
LyBJZiB0aGUgY2FsbCBpcyB0ZXJtaW5hbCB0aGVuIHdlIHNob3VsZCBub3QgcGFyc2UgYW55IGZ1
cnRoZXIgYnl0ZWNvZGVzIGFzIHRoZSBUYWlsQ2FsbCB3aWxsIGV4aXQgdGhlIGZ1bmN0aW9uLgog
ICAgICAgICAgICAgLy8gSWYgdGhlIGNhbGwgaXMgbm90IHRlcm1pbmFsLCBob3dldmVyLCB0aGVu
IHdlIHdhbnQgdGhlIHN1YnNlcXVlbnQgb3BfcmV0L29wX2ptcCB0byB1cGRhdGUgbWV0YWRhdGEg
YW5kIGNsZWFuCkBAIC02NjMzLDcgKzY2MzYsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9jb25z
dHJ1Y3Q6Ci0gICAgICAgICAgICBoYW5kbGVDYWxsPE9wQ29uc3RydWN0PihjdXJyZW50SW5zdHJ1
Y3Rpb24sIENvbnN0cnVjdCwgQ2FsbE1vZGU6OkNvbnN0cnVjdCk7CisgICAgICAgICAgICBoYW5k
bGVDYWxsPE9wQ29uc3RydWN0PihjdXJyZW50SW5zdHJ1Y3Rpb24sIENvbnN0cnVjdCwgQ2FsbE1v
ZGU6OkNvbnN0cnVjdCwgbmV4dEJ5dGVjb2RlSW5kZXgoKSk7CiAgICAgICAgICAgICBBU1NFUlRf
V0lUSF9NRVNTQUdFKG1fY3VycmVudEluc3RydWN0aW9uID09IGN1cnJlbnRJbnN0cnVjdGlvbiwg
ImhhbmRsZUNhbGwsIHdoaWNoIG1heSBoYXZlIGlubGluZWQgdGhlIGNhbGxlZSwgdHJhc2hlZCBt
X2N1cnJlbnRJbnN0cnVjdGlvbiIpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY29uc3Ry
dWN0KTsKICAgICAgICAgICAgIApAQCAtNjc0Nyw3ICs2NzUwLDcgQEAgdm9pZCBCeXRlQ29kZVBh
cnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgICAgICBzZXQoYnl0
ZWNvZGUubV9uZXh0LCBuZXh0KTsKIAogICAgICAgICAgICAgICAgIC8vIERvIG91ciBzZXQgbG9j
YWxzLiBXZSBkb24ndCB3YW50IHRvIGV4aXQgYmFja3dhcmRzIHNvIG1vdmUgb3VyIGV4aXQgdG8g
dGhlIG5leHQgYnl0ZWNvZGUuCi0gICAgICAgICAgICAgICAgbV9jdXJyZW50SW5kZXggPSBCeXRl
Y29kZUluZGV4KG1fY3VycmVudEluZGV4Lm9mZnNldCgpICsgY3VycmVudEluc3RydWN0aW9uLT5z
aXplKCkpOworICAgICAgICAgICAgICAgIG1fY3VycmVudEluZGV4ID0gbmV4dEJ5dGVjb2RlSW5k
ZXgoKTsKICAgICAgICAgICAgICAgICBtX2V4aXRPSyA9IHRydWU7CiAgICAgICAgICAgICAgICAg
cHJvY2Vzc1NldExvY2FsUXVldWUoKTsKIApAQCAtNjc2Niw3ICs2NzY5LDcgQEAgdm9pZCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgICAgICB9
IGVsc2UKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFnZW5lcmF0ZWRDYXNlKTsKIAotICAg
ICAgICAgICAgICAgIFRlcm1pbmFsaXR5IHRlcm1pbmFsaXR5ID0gaGFuZGxlQ2FsbDxPcEl0ZXJh
dG9yT3Blbj4oY3VycmVudEluc3RydWN0aW9uLCBDYWxsLCBDYWxsTW9kZTo6UmVndWxhcik7Cisg
ICAgICAgICAgICAgICAgVGVybWluYWxpdHkgdGVybWluYWxpdHkgPSBoYW5kbGVDYWxsPE9wSXRl
cmF0b3JPcGVuPihjdXJyZW50SW5zdHJ1Y3Rpb24sIENhbGwsIENhbGxNb2RlOjpSZWd1bGFyLCBu
ZXh0Q2hlY2twb2ludCgpKTsKICAgICAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHRlcm1pbmFs
aXR5LCB0ZXJtaW5hbGl0eSA9PSBOb25UZXJtaW5hbCk7CiAgICAgICAgICAgICAgICAgcHJvZ3Jl
c3NUb05leHRDaGVja3BvaW50KCk7CiAKQEAgLTY3OTgsNyArNjgwMSw2IEBAIHZvaWQgQnl0ZUNv
ZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBtX2dyYXBoLmlkZW50aWZpZXJzKCkuZW5zdXJl
KG5leHRJbXBsKTsKIAogICAgICAgICAgICAgICAgICAgICBBY2Nlc3NUeXBlIHR5cGUgPSBBY2Nl
c3NUeXBlOjpHZXRCeUlkOwotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBvcGNvZGVMZW5n
dGggPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKTsKIAogICAgICAgICAgICAgICAgICAgICBH
ZXRCeVN0YXR1cyBnZXRCeVN0YXR1cyA9IEdldEJ5U3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAg
ICAgICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLApAQCAt
NjgwNiwxMCArNjgwOCwxMCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2ln
bmVkIGxpbWl0KQogICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudENvZGVPcmlnaW4oKSk7
CiAKIAotICAgICAgICAgICAgICAgICAgICBoYW5kbGVHZXRCeUlkKGJ5dGVjb2RlLm1fbmV4dCwg
cHJlZGljdGlvbiwgYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFs
SWRlbnRpZmllcihuZXh0SW1wbCksIGlkZW50aWZpZXJOdW1iZXIsIGdldEJ5U3RhdHVzLCB0eXBl
LCBvcGNvZGVMZW5ndGgpOworICAgICAgICAgICAgICAgICAgICBoYW5kbGVHZXRCeUlkKGJ5dGVj
b2RlLm1fbmV4dCwgcHJlZGljdGlvbiwgYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUltbW9ydGFsSWRlbnRpZmllcihuZXh0SW1wbCksIGlkZW50aWZpZXJOdW1iZXIsIGdldEJ5
U3RhdHVzLCB0eXBlLCBuZXh0Qnl0ZWNvZGVJbmRleCgpKTsKIAogICAgICAgICAgICAgICAgICAg
ICAvLyBEbyBvdXIgc2V0IGxvY2Fscy4gV2UgZG9uJ3Qgd2FudCB0byBydW4gb3VyIGdldF9ieV9p
ZCBhZ2FpbiBzbyB3ZSBtb3ZlIHRvIHRoZSBuZXh0IGJ5dGVjb2RlLgotICAgICAgICAgICAgICAg
ICAgICBtX2N1cnJlbnRJbmRleCA9IEJ5dGVjb2RlSW5kZXgobV9jdXJyZW50SW5kZXgub2Zmc2V0
KCkgKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSk7CisgICAgICAgICAgICAgICAgICAgIG1f
Y3VycmVudEluZGV4ID0gbmV4dEJ5dGVjb2RlSW5kZXgoKTsKICAgICAgICAgICAgICAgICAgICAg
bV9leGl0T0sgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBwcm9jZXNzU2V0TG9jYWxRdWV1
ZSgpOwogCkBAIC02ODI0LDcgKzY4MjYsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJs
b2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgICAgIHNldChieXRlY29kZS5tX2l0ZXJh
dG9yLCByZXN1bHQpOwogICAgICAgICAgICAgICAgIHNldChieXRlY29kZS5tX25leHQsIHJlc3Vs
dCk7CiAKLSAgICAgICAgICAgICAgICBtX2N1cnJlbnRJbmRleCA9IEJ5dGVjb2RlSW5kZXgobV9j
dXJyZW50SW5kZXgub2Zmc2V0KCkgKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSk7CisgICAg
ICAgICAgICAgICAgbV9jdXJyZW50SW5kZXggPSBuZXh0Qnl0ZWNvZGVJbmRleCgpOwogICAgICAg
ICAgICAgICAgIG1fZXhpdE9LID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBwcm9jZXNzU2V0TG9j
YWxRdWV1ZSgpOwogCkBAIC02ODc2LDMzICs2ODc4LDIxIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6
OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChD
aGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KGdsb2JhbE9iamVj
dC0+YXJyYXlJdGVyYXRvclN0cnVjdHVyZSgpKSksIGl0ZXJhdG9yKTsKIAogICAgICAgICAgICAg
ICAgIEJhc2ljQmxvY2sqIGlzRG9uZUJsb2NrID0gYWxsb2NhdGVVbnRhcmdldGFibGVCbG9jaygp
OwotICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIG5vdERvbmVCbG9jayA9IGFsbG9jYXRlVW50
YXJnZXRhYmxlQmxvY2soKTsKICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBkb0xvYWRCbG9j
ayA9IGFsbG9jYXRlVW50YXJnZXRhYmxlQmxvY2soKTsKIAotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgTm9kZSogZG9uZUluZGV4ID0ganNDb25zdGFudChqc051bWJlcigt
MSkpOwotICAgICAgICAgICAgICAgICAgICBOb2RlKiBpbmRleCA9IGFkZFRvR3JhcGgoR2V0SW50
ZXJuYWxGaWVsZCwgT3BJbmZvKHN0YXRpY19jYXN0PHVpbnQzMl90PihKU0FycmF5SXRlcmF0b3I6
OkZpZWxkOjpJbmRleCkpLCBPcEluZm8oU3BlY0ludDMyT25seSksIGl0ZXJhdG9yKTsKLSAgICAg
ICAgICAgICAgICAgICAgTm9kZSogaXNEb25lID0gYWRkVG9HcmFwaChDb21wYXJlU3RyaWN0RXEs
IGluZGV4LCBkb25lSW5kZXgpOwotCi0gICAgICAgICAgICAgICAgICAgIEJyYW5jaERhdGEqIGlz
RG9uZUJyYW5jaERhdGEgPSBtX2dyYXBoLm1fYnJhbmNoRGF0YS5hZGQoKTsKLSAgICAgICAgICAg
ICAgICAgICAgaXNEb25lQnJhbmNoRGF0YS0+dGFrZW4gPSBCcmFuY2hUYXJnZXQoaXNEb25lQmxv
Y2spOwotICAgICAgICAgICAgICAgICAgICBpc0RvbmVCcmFuY2hEYXRhLT5ub3RUYWtlbiA9IEJy
YW5jaFRhcmdldChub3REb25lQmxvY2spOwotICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBo
KEJyYW5jaCwgT3BJbmZvKGlzRG9uZUJyYW5jaERhdGEpLCBpc0RvbmUpOwotICAgICAgICAgICAg
ICAgIH0KLQogICAgICAgICAgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBnZXRBcnJheU1v
ZGUobWV0YWRhdGEubV9pdGVyYWJsZVByb2ZpbGUsIEFycmF5OjpSZWFkKTsKICAgICAgICAgICAg
ICAgICBhdXRvIHByZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9uV2l0aG91dE9TUkV4aXQoQnl0ZWNv
ZGVJbmRleChtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSwgT3BJdGVyYXRvck5leHQ6OmdldFZhbHVl
KSk7CiAKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1fY3VycmVudEJs
b2NrID0gbm90RG9uZUJsb2NrOwotICAgICAgICAgICAgICAgICAgICBjbGVhckNhY2hlcygpOwor
ICAgICAgICAgICAgICAgICAgICBOb2RlKiBpbmRleCA9IGFkZFRvR3JhcGgoR2V0SW50ZXJuYWxG
aWVsZCwgT3BJbmZvKHN0YXRpY19jYXN0PHVpbnQzMl90PihKU0FycmF5SXRlcmF0b3I6OkZpZWxk
OjpJbmRleCkpLCBPcEluZm8oU3BlY0ludDMyT25seSksIGl0ZXJhdG9yKTsKIAotICAgICAgICAg
ICAgICAgICAgICBOb2RlKiBpbmRleCA9IGFkZFRvR3JhcGgoR2V0SW50ZXJuYWxGaWVsZCwgT3BJ
bmZvKHN0YXRpY19jYXN0PHVpbnQzMl90PihKU0FycmF5SXRlcmF0b3I6OkZpZWxkOjpJbmRleCkp
LCBPcEluZm8oU3BlY0ludDMyT25seSksIGdldChieXRlY29kZS5tX2l0ZXJhdG9yKSk7CiAgICAg
ICAgICAgICAgICAgICAgIE5vZGUqIGl0ZXJhYmxlID0gZ2V0KGJ5dGVjb2RlLm1faXRlcmFibGUp
OwogICAgICAgICAgICAgICAgICAgICBOb2RlKiBidXR0ZXJmbHkgPSBhZGRUb0dyYXBoKEdldEJ1
dHRlcmZseSwgaXRlcmFibGUpOwogICAgICAgICAgICAgICAgICAgICBOb2RlKiBsZW5ndGggPSBh
ZGRUb0dyYXBoKEdldEFycmF5TGVuZ3RoLCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgaXRl
cmFibGUsIGJ1dHRlcmZseSk7Ci0gICAgICAgICAgICAgICAgICAgIE5vZGUqIGlzRG9uZSA9IGFk
ZFRvR3JhcGgoQ29tcGFyZUdyZWF0ZXJFcSwgRWRnZShpbmRleCwgSW50MzJVc2UpLCBFZGdlKGxl
bmd0aCwgSW50MzJVc2UpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9leGl0T0sgPSB0cnVlOyAv
LyBUaGUgYWJvdmUgY29tcGFyZSBkb2Vzbid0IHByb2R1Y2UgZWZmZWN0cyBzaW5jZSB3ZSBrbm93
IGluZGV4IGFuZCBsZW5ndGggYXJlIGludDMycy4KKyAgICAgICAgICAgICAgICAgICAgLy8gV2Ug
cmVseSBzZXR0aW5nIGRvbmUgdG8gLTEgdGhhdCBnZXR0aW5nIHRyZWF0ZWQgYXMgYSB1aW50MzJf
dC4KKyAgICAgICAgICAgICAgICAgICAgTm9kZSogaXNEb25lID0gYWRkVG9HcmFwaChDb21wYXJl
QmVsb3csIEVkZ2UobGVuZ3RoLCBJbnQzMlVzZSksIEVkZ2UoaW5kZXgsIEludDMyVXNlKSk7CisK
KyAgICAgICAgICAgICAgICAgICAgbV9leGl0T0sgPSB0cnVlOwogICAgICAgICAgICAgICAgICAg
ICBhZGRUb0dyYXBoKEV4aXRPSyk7CiAKICAgICAgICAgICAgICAgICAgICAgQnJhbmNoRGF0YSog
YnJhbmNoRGF0YSA9IG1fZ3JhcGgubV9icmFuY2hEYXRhLmFkZCgpOwpAQCAtNjkzMiw3ICs2OTIy
LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAg
ICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQdXRJbnRlcm5hbEZpZWxkLCBPcEluZm8oc3Rh
dGljX2Nhc3Q8dWludDMyX3Q+KEpTQXJyYXlJdGVyYXRvcjo6RmllbGQ6OkluZGV4KSksIGdldChi
eXRlY29kZS5tX2l0ZXJhdG9yKSwgbmV3SW5kZXgpOwogCiAgICAgICAgICAgICAgICAgICAgIC8v
IERvIG91ciBzZXQgbG9jYWxzLiBXZSBkb24ndCB3YW50IHRvIHJ1biBvdXIgZ2V0QnlWYWwgYWdh
aW4gc28gd2UgbW92ZSB0byB0aGUgbmV4dCBieXRlY29kZS4KLSAgICAgICAgICAgICAgICAgICAg
bV9jdXJyZW50SW5kZXggPSBCeXRlY29kZUluZGV4KG1fY3VycmVudEluZGV4Lm9mZnNldCgpICsg
Y3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpOworICAgICAgICAgICAgICAgICAgICBtX2N1cnJl
bnRJbmRleCA9IG5leHRCeXRlY29kZUluZGV4KCk7CiAgICAgICAgICAgICAgICAgICAgIG1fZXhp
dE9LID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc1NldExvY2FsUXVldWUoKTsK
IApAQCAtNjk1NCw3ICs2OTQ0LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1
bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQdXRJbnRlcm5h
bEZpZWxkLCBPcEluZm8oc3RhdGljX2Nhc3Q8dWludDMyX3Q+KEpTQXJyYXlJdGVyYXRvcjo6Rmll
bGQ6OkluZGV4KSksIGdldChieXRlY29kZS5tX2l0ZXJhdG9yKSwgZG9uZUluZGV4KTsKIAogICAg
ICAgICAgICAgICAgICAgICAvLyBEbyBvdXIgc2V0IGxvY2Fscy4gV2UgZG9uJ3Qgd2FudCB0byBy
dW4gdGhpcyBhZ2FpbiBzbyB3ZSBoYXZlIHRvIG1vdmUgdGhlIGV4aXQgb3JpZ2luIGZvcndhcmQu
Ci0gICAgICAgICAgICAgICAgICAgIG1fY3VycmVudEluZGV4ID0gQnl0ZWNvZGVJbmRleChtX2N1
cnJlbnRJbmRleC5vZmZzZXQoKSArIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgbV9jdXJyZW50SW5kZXggPSBuZXh0Qnl0ZWNvZGVJbmRleCgpOwogICAg
ICAgICAgICAgICAgICAgICBtX2V4aXRPSyA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIHBy
b2Nlc3NTZXRMb2NhbFF1ZXVlKCk7CiAKQEAgLTY5NzMsNyArNjk2Myw3IEBAIHZvaWQgQnl0ZUNv
ZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICAgICAgfSBl
bHNlCiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghZ2VuZXJhdGVkQ2FzZSk7CiAKLSAgICAg
ICAgICAgICAgICBUZXJtaW5hbGl0eSB0ZXJtaW5hbGl0eSA9IGhhbmRsZUNhbGw8T3BJdGVyYXRv
ck5leHQ+KGN1cnJlbnRJbnN0cnVjdGlvbiwgQ2FsbCwgQ2FsbE1vZGU6OlJlZ3VsYXIpOworICAg
ICAgICAgICAgICAgIFRlcm1pbmFsaXR5IHRlcm1pbmFsaXR5ID0gaGFuZGxlQ2FsbDxPcEl0ZXJh
dG9yTmV4dD4oY3VycmVudEluc3RydWN0aW9uLCBDYWxsLCBDYWxsTW9kZTo6UmVndWxhciwgbmV4
dENoZWNrcG9pbnQoKSk7CiAgICAgICAgICAgICAgICAgQVNTRVJUX1VOVVNFRCh0ZXJtaW5hbGl0
eSwgdGVybWluYWxpdHkgPT0gTm9uVGVybWluYWwpOwogICAgICAgICAgICAgICAgIHByb2dyZXNz
VG9OZXh0Q2hlY2twb2ludCgpOwogCkBAIC03MDAwLDcgKzY5OTAsNyBAQCB2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgICAgICAgICBm
bHVzaEZvclRlcm1pbmFsKCk7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAg
YXV0byB2YWx1ZVByZWRpY2l0aW9uID0gZ2V0UHJlZGljdGlvbldpdGhvdXRPU1JFeGl0KEJ5dGVj
b2RlSW5kZXgobV9jdXJyZW50SW5kZXgub2Zmc2V0KCksIE9wSXRlcmF0b3JOZXh0OjpnZXRWYWx1
ZSkpOworICAgICAgICAgICAgICAgIGF1dG8gdmFsdWVQcmVkaWNpdGlvbiA9IGdldFByZWRpY3Rp
b25XaXRob3V0T1NSRXhpdChtX2N1cnJlbnRJbmRleC53aXRoQ2hlY2twb2ludChPcEl0ZXJhdG9y
TmV4dDo6Z2V0VmFsdWUpKTsKIAogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg
ICAgbV9leGl0T0sgPSB0cnVlOwpAQCAtNzAxNCwxNCArNzAwNCwxMyBAQCB2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gbV9ncmFwaC5pZGVudGlmaWVycygpLmVuc3VyZShk
b25lSW1wbCk7CiAKICAgICAgICAgICAgICAgICAgICAgQWNjZXNzVHlwZSB0eXBlID0gQWNjZXNz
VHlwZTo6R2V0QnlJZDsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgb3Bjb2RlTGVuZ3Ro
ID0gY3VycmVudEluc3RydWN0aW9uLT5zaXplKCk7CiAKICAgICAgICAgICAgICAgICAgICAgR2V0
QnlTdGF0dXMgZ2V0QnlTdGF0dXMgPSBHZXRCeVN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAg
ICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywKICAgICAg
ICAgICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fYmFzZWxpbmVNYXAsIG1faWND
b250ZXh0U3RhY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q29kZU9yaWdpbigp
KTsKIAotICAgICAgICAgICAgICAgICAgICBoYW5kbGVHZXRCeUlkKGJ5dGVjb2RlLm1fZG9uZSwg
cHJlZGljdGlvbiwgYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFs
SWRlbnRpZmllcihkb25lSW1wbCksIGlkZW50aWZpZXJOdW1iZXIsIGdldEJ5U3RhdHVzLCB0eXBl
LCBvcGNvZGVMZW5ndGgpOworICAgICAgICAgICAgICAgICAgICBoYW5kbGVHZXRCeUlkKGJ5dGVj
b2RlLm1fZG9uZSwgcHJlZGljdGlvbiwgYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRl
RnJvbUltbW9ydGFsSWRlbnRpZmllcihkb25lSW1wbCksIGlkZW50aWZpZXJOdW1iZXIsIGdldEJ5
U3RhdHVzLCB0eXBlLCBuZXh0Q2hlY2twb2ludCgpKTsKICAgICAgICAgICAgICAgICAgICAgLy8g
U2V0IGEgdmFsdWUgZm9yIG1fdmFsdWUgc28gd2UgZG9uJ3QgZXhpdCBvbiBpdCBkaWZmZXJpbmcg
ZnJvbSB3aGF0IHdlIGV4cGVjdGVkLgogICAgICAgICAgICAgICAgICAgICBzZXQoYnl0ZWNvZGUu
bV92YWx1ZSwgYm90dG9tVmFsdWUpOwogICAgICAgICAgICAgICAgICAgICBwcm9ncmVzc1RvTmV4
dENoZWNrcG9pbnQoKTsKQEAgLTcwNDEsMTUgKzcwMzAsMTggQEAgdm9pZCBCeXRlQ29kZVBhcnNl
cjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgaWRlbnRpZmllck51bWJlciA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKS5lbnN1cmUodmFsdWVJ
bXBsKTsKIAogICAgICAgICAgICAgICAgICAgICBBY2Nlc3NUeXBlIHR5cGUgPSBBY2Nlc3NUeXBl
OjpHZXRCeUlkOwotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBvcGNvZGVMZW5ndGggPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKTsKIAogICAgICAgICAgICAgICAgICAgICBHZXRCeVN0
YXR1cyBnZXRCeVN0YXR1cyA9IEdldEJ5U3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICAgICAg
ICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLAogICAgICAgICAg
ICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9iYXNlbGluZU1hcCwgbV9pY0NvbnRl
eHRTdGFjaywKICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDb2RlT3JpZ2luKCkpOwog
Ci0gICAgICAgICAgICAgICAgICAgIGhhbmRsZUdldEJ5SWQoYnl0ZWNvZGUubV92YWx1ZSwgdmFs
dWVQcmVkaWNpdGlvbiwgYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9y
dGFsSWRlbnRpZmllcih2YWx1ZUltcGwpLCBpZGVudGlmaWVyTnVtYmVyLCBnZXRCeVN0YXR1cywg
dHlwZSwgb3Bjb2RlTGVuZ3RoKTsKLSAgICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3NUb05leHRD
aGVja3BvaW50KCk7CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZUdldEJ5SWQoYnl0ZWNvZGUu
bV92YWx1ZSwgdmFsdWVQcmVkaWNpdGlvbiwgYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2YWx1ZUltcGwpLCBpZGVudGlmaWVyTnVtYmVyLCBn
ZXRCeVN0YXR1cywgdHlwZSwgbmV4dEJ5dGVjb2RlSW5kZXgoKSk7CisKKyAgICAgICAgICAgICAg
ICAgICAgLy8gV2UncmUgZG9uZSwgZXhpdCBmb3J3YXJkcy4KKyAgICAgICAgICAgICAgICAgICAg
bV9jdXJyZW50SW5kZXggPSBuZXh0Qnl0ZWNvZGVJbmRleCgpOworICAgICAgICAgICAgICAgICAg
ICBtX2V4aXRPSyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NTZXRMb2NhbFF1
ZXVlKCk7CiAKICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChKdW1wLCBPcEluZm8oY29u
dGludWF0aW9uKSk7CiAgICAgICAgICAgICAgICAgfQpAQCAtODE0MSw3ICs4MTMzLDcgQEAgdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VDb2RlQmxvY2soKQogfQogCiB0ZW1wbGF0ZSA8dHlwZW5h
bWUgQnl0ZWNvZGU+Ci12b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeVZhbChCeXRlY29k
ZSBieXRlY29kZSwgdW5zaWduZWQgaW5zdHJ1Y3Rpb25TaXplKQordm9pZCBCeXRlQ29kZVBhcnNl
cjo6aGFuZGxlUHV0QnlWYWwoQnl0ZWNvZGUgYnl0ZWNvZGUsIEJ5dGVjb2RlSW5kZXggb3NyRXhp
dEluZGV4KQogewogICAgIE5vZGUqIGJhc2UgPSBnZXQoYnl0ZWNvZGUubV9iYXNlKTsKICAgICBO
b2RlKiBwcm9wZXJ0eSA9IGdldChieXRlY29kZS5tX3Byb3BlcnR5KTsKQEAgLTgxODYsNyArODE3
OCw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5VmFsKEJ5dGVjb2RlIGJ5dGVj
b2RlLCB1bnNpZ25lZCBpbnN0cnVjdGlvblNpemUpCiAgICAgICAgIH0KIAogICAgICAgICBpZiAo
Y29tcGlsZWRBc1B1dEJ5SWQpCi0gICAgICAgICAgICBoYW5kbGVQdXRCeUlkKGJhc2UsIGlkZW50
aWZpZXIsIGlkZW50aWZpZXJOdW1iZXIsIHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBpc0RpcmVjdCwg
aW5zdHJ1Y3Rpb25TaXplLCBieXRlY29kZS5tX2VjbWFNb2RlKTsKKyAgICAgICAgICAgIGhhbmRs
ZVB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllciwgaWRlbnRpZmllck51bWJlciwgdmFsdWUsIHB1dEJ5
SWRTdGF0dXMsIGlzRGlyZWN0LCBvc3JFeGl0SW5kZXgsIGJ5dGVjb2RlLm1fZWNtYU1vZGUpOwog
ICAgIH0KIAogICAgIGlmICghY29tcGlsZWRBc1B1dEJ5SWQpIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVENhbGwuY3BwCmluZGV4IDAxZTM3ZmFkY2IyZjIwMjRhMzAxNzk5NWZiZDUyOTMyOGYw
YjUzMjkuLjA4MDRlNGRhZTFlOWI4ODI3MWI1ZjU4NDljOWI5OTQ1ZDc3ZTk0MWUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcApAQCAtNDI4LDYgKzQyOCwxMiBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93QwogCiAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworCisgICAg
R1BSUmVnIGl0ZXJhdG9yR1BSID0gcmVnVDA7CisgICAgSnVtcExpc3Qgbm90T2JqZWN0OworICAg
IG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKGl0ZXJhdG9yR1BSKSk7CisgICAgbm90
T2JqZWN0LmFwcGVuZChicmFuY2hJZk5vdE9iamVjdChpdGVyYXRvckdQUikpOworCiAgICAgYXV0
byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yT3Blbj4oKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgbmV4dFZSZWcgPSBieXRlY29kZS5tX25leHQ7CiAgICAgVW5pcXVlZFN0cmlu
Z0ltcGwqIGlkZW50ID0gdm0oKS5wcm9wZXJ0eU5hbWVzLT5uZXh0LmltcGwoKTsKQEAgLTQzNiw5
ICs0NDIsMTQgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5z
dHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0MKICAgICAKICAgICBMYWJlbCBjb2xk
UGF0aEJlZ2luID0gbGFiZWwoKTsKIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRo
UHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRP
cHRpbWl6ZSwgbmV4dFZSZWcsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVG
cm9tSW1tb3J0YWxJZGVudGlmaWVyKGlkZW50KS5yYXdCaXRzKCkpOwotCisgICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCBuZXh0VlJlZywgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBnZW4uc3R1YkluZm8oKSwgaXRlcmF0b3JHUFIsIENh
Y2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoaWRlbnQpLnJh
d0JpdHMoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxs
KTsKKyAgICBhdXRvIGRvbmUgPSBqdW1wKCk7CisKKyAgICBub3RPYmplY3QubGluayh0aGlzKTsK
KyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9iamVj
dCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKKworICAgIGRv
bmUubGluayh0aGlzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25z
dCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xMSW50U2xvd1BhdGhzLmNwcAppbmRleCBmZmQ2YjVlMTE1YjZmZDllYjVlNmI4OTgyOGRi
ZDdmZTk2YmNhOWQwLi5hYjIyNzFmMmMwOWYwMmQ3NWNlOWIzNjQ4NWYyZThiZmQ0YzFjOGZlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKQEAg
LTg0NSw2ICs4NDUsOSBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfaXRlcmF0b3Jf
b3Blbl9nZXRfbmV4dCkKICAgICBKU1ZhbHVlIGl0ZXJhdG9yID0gZ2V0T3BlcmFuZChjYWxsRnJh
bWUsIGJ5dGVjb2RlLm1faXRlcmF0b3IpOwogICAgIFJlZ2lzdGVyJiBuZXh0UmVnaXN0ZXIgPSBj
YWxsRnJhbWUtPnVuY2hlY2tlZFIoYnl0ZWNvZGUubV9uZXh0KTsKIAorICAgIGlmICghaXRlcmF0
b3IuaXNPYmplY3QoKSkKKyAgICAgICAgTExJTlRfVEhST1coY3JlYXRlVHlwZUVycm9yKGdsb2Jh
bE9iamVjdCwgIkl0ZXJhdG9yIHJlc3VsdCBpbnRlcmZhY2UgaXMgbm90IGFuIG9iamVjdC4iX3Mp
KTsKKwogICAgIEpTVmFsdWUgcmVzdWx0ID0gcGVyZm9ybUxMSW50R2V0QnlJRChwYywgY29kZUJs
b2NrLCBnbG9iYWxPYmplY3QsIGl0ZXJhdG9yLCB2bS5wcm9wZXJ0eU5hbWVzLT5uZXh0LCBtZXRh
ZGF0YS5tX21vZGVNZXRhZGF0YSk7CiAgICAgTExJTlRfQ0hFQ0tfRVhDRVBUSU9OKCk7CiAgICAg
bmV4dFJlZ2lzdGVyID0gcmVzdWx0OwpAQCAtMjA4OSw5ICsyMDkyLDEzIEBAIHN0YXRpYyB2b2lk
IGhhbmRsZUl0ZXJhdG9yTmV4dENoZWNrcG9pbnQoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgSlNHbG9iYWxPCiAgICAgYXV0byYgdmFsdWVSZWdpc3RlciA9IGNhbGxGcmFtZS0+dW5jaGVj
a2VkUihieXRlY29kZS5tX3ZhbHVlKTsKICAgICBhdXRvIGl0ZXJhdG9yUmVzdWx0T2JqZWN0ID0g
c2lkZVN0YXRlLnRtcHNbT3BJdGVyYXRvck5leHQ6Om5leHRSZXN1bHRdOwogICAgIGF1dG8gbmV4
dCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29kZS5tX25leHQpLmpzVmFsdWUoKTsgICAg
Ci0KICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UobmV4dCwgIldlIHNob3VsZCBub3Qg
T1NSIGV4aXQgdG8gYSBjaGVja3BvaW50IGZvciBmYXN0IGNhc2VzLiIpOwogCisgICAgaWYgKCFp
dGVyYXRvclJlc3VsdE9iamVjdC5pc09iamVjdCgpKSB7CisgICAgICAgIHRocm93Vk1UeXBlRXJy
b3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIkl0ZXJhdG9yIHJlc3VsdCBpbnRlcmZhY2UgaXMgbm90
IGFuIG9iamVjdC4iX3MpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgYXV0byYgZG9u
ZVJlZ2lzdGVyID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fZG9uZSk7CiAgICAg
aWYgKGNoZWNrcG9pbnRJbmRleCA9PSBPcEl0ZXJhdG9yTmV4dDo6Z2V0RG9uZSkgewogICAgICAg
ICBkb25lUmVnaXN0ZXIgPSBpdGVyYXRvclJlc3VsdE9iamVjdC5nZXQoZ2xvYmFsT2JqZWN0LCB2
bS5wcm9wZXJ0eU5hbWVzLT5kb25lKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvQ2hhbmdlTG9nIGIv
SlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMTExZGEzZDZmMGRhYzE4NjZhZjZkY2FkYTQ3MjM3OGIw
OGRjN2Y0MC4uZjgwMTE4Y2QwZmZmYzQzN2E4ZGIzNzY0ZWNlNmFhOGFkZTBjMzU0MyAxMDA2NDQK
LS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwzMyBAQAorMjAyMC0wNC0yMiAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNv
bT4KKworICAgICAgICBGaXggT1NSIGV4aXRpbmcvaXRlcmF0b3Igb2JqZWN0IGNoZWNrcyBpbiBm
b3Itb2YgYnl0ZWNvZGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMTA4ODIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIHN0cmVzcy9mb3Itb2YtaXRlcmF0b3ItbmV4dC1vc3ItYXQtaW5saW5lZC1yZXR1
cm4tbm9uLW9iamVjdC5qczogQWRkZWQuCisgICAgICAgICh2ZW5kTmV4dCk6CisgICAgICAgICh0
ZXN0KToKKyAgICAgICAgKGNhdGNoKToKKyAgICAgICAgKiBzdHJlc3MvZm9yLW9mLWl0ZXJhdG9y
LW5leHQtb3NyLWF0LW5leHQtc2V0LWxvY2FsLmpzOiBBZGRlZC4KKyAgICAgICAgKHZlbmROZXh0
KToKKyAgICAgICAgKHRlc3QpOgorICAgICAgICAoY2F0Y2gpOgorICAgICAgICAqIHN0cmVzcy9m
b3Itb2YtaXRlcmF0b3Itb3Blbi1vc3ItYXQtaW5saW5lZC1yZXR1cm4tbm9uLW9iamVjdC5qczog
QWRkZWQuCisgICAgICAgICh2ZW5kSXRlcmF0b3IpOgorICAgICAgICAodGVzdCk6CisgICAgICAg
IChjYXRjaCk6CisgICAgICAgICogc3RyZXNzL2Zvci1vZi1pdGVyYXRvci1vcGVuLW9zci1hdC1p
dGVyYXRvci1zZXQtbG9jYWwuanM6IEFkZGVkLgorICAgICAgICAodmVuZEl0ZXJhdG9yKToKKyAg
ICAgICAgKHRlc3QpOgorICAgICAgICAoY2F0Y2gpOgorICAgICAgICAqIHN0cmVzcy9mb3Itb2Yt
aXRlcmF0b3Itb3Blbi1yZXR1cm4tbm9uLW9iamVjdC5qczogQWRkZWQuCisgICAgICAgICh2ZW5k
SXRlcmF0b3IpOgorICAgICAgICAodGVzdCk6CisgICAgICAgIChpLmNhdGNoKToKKyAgICAgICAg
KiBzdHJlc3MvdGVzdC1mb3Itb2YtY2ZnLXNpbXBsaWNhdGlvbi1leGl0LW9rLmpzOiBBZGRlZC4K
KyAgICAgICAgKHouX19wcm90b19fKToKKwogMjAyMC0wNC0yMSAgWXVzdWtlIFN1enVraSAgPHlz
dXp1a2lAYXBwbGUuY29tPgogCiAgICAgICAgIE1vdmUgdmFsdWUtcG93LWFpLXJ1bGUtc2hvdWxk
LWJveC10aGUtc2FtZS13YXktYXMtdGhlLXJ1bnRpbWUuanMgdG8gSlNUZXN0cy9zdHJlc3MvCmRp
ZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9mb3Itb2YtaXRlcmF0b3ItbmV4dC1vc3ItYXQtaW5s
aW5lZC1yZXR1cm4tbm9uLW9iamVjdC5qcyBiL0pTVGVzdHMvc3RyZXNzL2Zvci1vZi1pdGVyYXRv
ci1uZXh0LW9zci1hdC1pbmxpbmVkLXJldHVybi1ub24tb2JqZWN0LmpzCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIy
N2YyZTExNmRhZDlkMDI0OGQ2NWZmOWFiZTI5MDRjNjZmZjQ2OWUKLS0tIC9kZXYvbnVsbAorKysg
Yi9KU1Rlc3RzL3N0cmVzcy9mb3Itb2YtaXRlcmF0b3ItbmV4dC1vc3ItYXQtaW5saW5lZC1yZXR1
cm4tbm9uLW9iamVjdC5qcwpAQCAtMCwwICsxLDM0IEBACitsZXQgc2hvdWxkVmVuZE51bGwgPSBm
YWxzZTsKK2Z1bmN0aW9uIHZlbmROZXh0KCkgeworICAgIGlmIChzaG91bGRWZW5kTnVsbCkKKyAg
ICAgICAgcmV0dXJuIDE7CisgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSB9OworfQorbm9JbmxpbmUo
dmVuZE5leHQpOworCisvLyBQYXNzIHNob3VsZFZlbmROdWxsIGFzIHBhcmFtIHNvIHdlIGRvbid0
IE9TUiB3aGVuIGl0IGJlY29tZXMgdHJ1ZS4KK2Z1bmN0aW9uIHRlc3Qoc2hvdWxkVmVuZE51bGwp
IHsKKyAgICBsZXQgaXRlcmFibGUgPSB7CisgICAgICAgIFtTeW1ib2wuaXRlcmF0b3JdKCkgeyBy
ZXR1cm4gdGhpczsgfSwKKyAgICAgICAgbmV4dCgpIHsgcmV0dXJuIHZlbmROZXh0KCk7IH0KKyAg
ICB9CisgICAgZm9yIChsZXQgbyBvZiBpdGVyYWJsZSkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9y
KCk7CisgICAgaWYgKHNob3VsZFZlbmROdWxsKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTsK
K30KK25vSW5saW5lKHRlc3QpOworCitmb3IgKGxldCBpID0gMDsgaSA8IDFlNTsgKytpKQorICAg
IHRlc3QoKTsKKworc2hvdWxkVmVuZE51bGwgPSB0cnVlOworbGV0IGVycm9yOwordHJ5IHsKKyAg
ICB0ZXN0KHRydWUpOworfSBjYXRjaCAoZSkgeworICAgIGVycm9yID0gZTsKK30KKworaWYgKGVy
cm9yICE9ICJUeXBlRXJyb3I6IEl0ZXJhdG9yIHJlc3VsdCBpbnRlcmZhY2UgaXMgbm90IGFuIG9i
amVjdC4iKQorICAgIHRocm93IGVycm9yOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3MvZm9y
LW9mLWl0ZXJhdG9yLW5leHQtb3NyLWF0LW5leHQtc2V0LWxvY2FsLmpzIGIvSlNUZXN0cy9zdHJl
c3MvZm9yLW9mLWl0ZXJhdG9yLW5leHQtb3NyLWF0LW5leHQtc2V0LWxvY2FsLmpzCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmI5ODM0ZTI1ZWFkNjFmYjQ2YjUzZTc0YmJkNWNkMTQ4YWVmNzY1OWEKLS0tIC9kZXYvbnVs
bAorKysgYi9KU1Rlc3RzL3N0cmVzcy9mb3Itb2YtaXRlcmF0b3ItbmV4dC1vc3ItYXQtbmV4dC1z
ZXQtbG9jYWwuanMKQEAgLTAsMCArMSwzNCBAQAorbGV0IHNob3VsZFZlbmROdWxsID0gZmFsc2U7
CitmdW5jdGlvbiB2ZW5kTmV4dCgpIHsKKyAgICBpZiAoc2hvdWxkVmVuZE51bGwpCisgICAgICAg
IHJldHVybiAxOworICAgIHJldHVybiB7IGRvbmU6IHRydWUgfTsKK30KK25vSW5saW5lKHZlbmRO
ZXh0KTsKKworLy8gUGFzcyBzaG91bGRWZW5kTnVsbCBhcyBwYXJhbSBzbyB3ZSBkb24ndCBPU1Ig
d2hlbiBpdCBiZWNvbWVzIHRydWUuCitmdW5jdGlvbiB0ZXN0KHNob3VsZFZlbmROdWxsKSB7Cisg
ICAgbGV0IGl0ZXJhYmxlID0geworICAgICAgICBbU3ltYm9sLml0ZXJhdG9yXSgpIHsgcmV0dXJu
IHRoaXM7IH0sCisgICAgICAgIG5leHQ6IHZlbmROZXh0LAorICAgIH0KKyAgICBmb3IgKGxldCBv
IG9mIGl0ZXJhYmxlKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTsKKyAgICBpZiAoc2hvdWxk
VmVuZE51bGwpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigpOworfQorbm9JbmxpbmUodGVzdCk7
CisKK2ZvciAobGV0IGkgPSAwOyBpIDwgMWU1OyArK2kpCisgICAgdGVzdCgpOworCitzaG91bGRW
ZW5kTnVsbCA9IHRydWU7CitsZXQgZXJyb3I7Cit0cnkgeworICAgIHRlc3QodHJ1ZSk7Cit9IGNh
dGNoIChlKSB7CisgICAgZXJyb3IgPSBlOworfQorCitpZiAoZXJyb3IgIT0gIlR5cGVFcnJvcjog
SXRlcmF0b3IgcmVzdWx0IGludGVyZmFjZSBpcyBub3QgYW4gb2JqZWN0LiIpCisgICAgdGhyb3cg
ZXJyb3I7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9mb3Itb2YtaXRlcmF0b3Itb3Blbi1v
c3ItYXQtaW5saW5lZC1yZXR1cm4tbm9uLW9iamVjdC5qcyBiL0pTVGVzdHMvc3RyZXNzL2Zvci1v
Zi1pdGVyYXRvci1vcGVuLW9zci1hdC1pbmxpbmVkLXJldHVybi1ub24tb2JqZWN0LmpzCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjIxODk3ZmJjZWIxZWQ1ZjU0N2QzODQ3NzYwZDVjYzMyMzEwZDBmOTQKLS0tIC9kZXYv
bnVsbAorKysgYi9KU1Rlc3RzL3N0cmVzcy9mb3Itb2YtaXRlcmF0b3Itb3Blbi1vc3ItYXQtaW5s
aW5lZC1yZXR1cm4tbm9uLW9iamVjdC5qcwpAQCAtMCwwICsxLDM0IEBACitsZXQgc2hvdWxkVmVu
ZE51bGwgPSBmYWxzZTsKK2Z1bmN0aW9uIHZlbmRJdGVyYXRvcigpIHsKKyAgICBpZiAoc2hvdWxk
VmVuZE51bGwpCisgICAgICAgIHJldHVybiAxOworICAgIHJldHVybiB0aGlzOworfQorbm9Jbmxp
bmUodmVuZEl0ZXJhdG9yKTsKKworLy8gUGFzcyBzaG91bGRWZW5kTnVsbCBhcyBwYXJhbSBzbyB3
ZSBkb24ndCBPU1Igd2hlbiBpdCBiZWNvbWVzIHRydWUuCitmdW5jdGlvbiB0ZXN0KHNob3VsZFZl
bmROdWxsKSB7CisgICAgbGV0IGl0ZXJhYmxlID0geworICAgICAgICBbU3ltYm9sLml0ZXJhdG9y
XSgpIHsgcmV0dXJuIHZlbmRJdGVyYXRvci5jYWxsKHRoaXMpIH0sCisgICAgICAgIG5leHQoKSB7
IHJldHVybiB7IGRvbmU6IHRydWUgfTsgfQorICAgIH0KKyAgICBmb3IgKGxldCBvIG9mIGl0ZXJh
YmxlKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTsKKyAgICBpZiAoc2hvdWxkVmVuZE51bGwp
CisgICAgICAgIHRocm93IG5ldyBFcnJvcigpOworfQorbm9JbmxpbmUodGVzdCk7CisKK2ZvciAo
bGV0IGkgPSAwOyBpIDwgMWU1OyArK2kpCisgICAgdGVzdCgpOworCitzaG91bGRWZW5kTnVsbCA9
IHRydWU7CitsZXQgZXJyb3I7Cit0cnkgeworICAgIHRlc3QodHJ1ZSk7Cit9IGNhdGNoIChlKSB7
CisgICAgZXJyb3IgPSBlOworfQorCitpZiAoZXJyb3IgIT0gIlR5cGVFcnJvcjogSXRlcmF0b3Ig
cmVzdWx0IGludGVyZmFjZSBpcyBub3QgYW4gb2JqZWN0LiIpCisgICAgdGhyb3cgbmV3IEVycm9y
KCk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9mb3Itb2YtaXRlcmF0b3Itb3Blbi1vc3It
YXQtaXRlcmF0b3Itc2V0LWxvY2FsLmpzIGIvSlNUZXN0cy9zdHJlc3MvZm9yLW9mLWl0ZXJhdG9y
LW9wZW4tb3NyLWF0LWl0ZXJhdG9yLXNldC1sb2NhbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iYzNjZjdmMTFk
NTM0YTQ4NjNjMjMyYWZjYTI5NjIyNGM4MjBhZDIxCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0
cy9zdHJlc3MvZm9yLW9mLWl0ZXJhdG9yLW9wZW4tb3NyLWF0LWl0ZXJhdG9yLXNldC1sb2NhbC5q
cwpAQCAtMCwwICsxLDM0IEBACitsZXQgc2hvdWxkVmVuZE51bGwgPSBmYWxzZTsKK2Z1bmN0aW9u
IHZlbmRJdGVyYXRvcigpIHsKKyAgICBpZiAoc2hvdWxkVmVuZE51bGwpCisgICAgICAgIHJldHVy
biAxOworICAgIHJldHVybiB0aGlzOworfQorbm9JbmxpbmUodmVuZEl0ZXJhdG9yKTsKKworLy8g
UGFzcyBzaG91bGRWZW5kTnVsbCBhcyBwYXJhbSBzbyB3ZSBkb24ndCBPU1Igd2hlbiBpdCBiZWNv
bWVzIHRydWUuCitmdW5jdGlvbiB0ZXN0KHNob3VsZFZlbmROdWxsKSB7CisgICAgbGV0IGl0ZXJh
YmxlID0geworICAgICAgICBbU3ltYm9sLml0ZXJhdG9yXTogdmVuZEl0ZXJhdG9yLAorICAgICAg
ICBuZXh0KCkgeyByZXR1cm4geyBkb25lOiB0cnVlIH07IH0KKyAgICB9CisgICAgZm9yIChsZXQg
byBvZiBpdGVyYWJsZSkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7CisgICAgaWYgKHNob3Vs
ZFZlbmROdWxsKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTsKK30KK25vSW5saW5lKHRlc3Qp
OworCitmb3IgKGxldCBpID0gMDsgaSA8IDFlNTsgKytpKQorICAgIHRlc3QoKTsKKworc2hvdWxk
VmVuZE51bGwgPSB0cnVlOworbGV0IGVycm9yOwordHJ5IHsKKyAgICB0ZXN0KHRydWUpOworfSBj
YXRjaCAoZSkgeworICAgIGVycm9yID0gZTsKK30KKworaWYgKGVycm9yICE9ICJUeXBlRXJyb3I6
IEl0ZXJhdG9yIHJlc3VsdCBpbnRlcmZhY2UgaXMgbm90IGFuIG9iamVjdC4iKQorICAgIHRocm93
IG5ldyBFcnJvcigpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3MvZm9yLW9mLWl0ZXJhdG9y
LW9wZW4tcmV0dXJuLW5vbi1vYmplY3QuanMgYi9KU1Rlc3RzL3N0cmVzcy9mb3Itb2YtaXRlcmF0
b3Itb3Blbi1yZXR1cm4tbm9uLW9iamVjdC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNmYzOWNjMzQzZWI5OGFl
ZTMwNjJkZTFjZmVjNGViMWI2NDI5NjdjCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9zdHJl
c3MvZm9yLW9mLWl0ZXJhdG9yLW9wZW4tcmV0dXJuLW5vbi1vYmplY3QuanMKQEAgLTAsMCArMSwy
NiBAQAorZnVuY3Rpb24gdmVuZEl0ZXJhdG9yKCkgeworICAgIHJldHVybiAxOworfQorbm9Jbmxp
bmUodmVuZEl0ZXJhdG9yKTsKKworZnVuY3Rpb24gdGVzdCgpIHsKKyAgICBsZXQgaXRlcmFibGUg
PSB7CisgICAgICAgIFtTeW1ib2wuaXRlcmF0b3JdKCkgeyByZXR1cm4gdmVuZEl0ZXJhdG9yKCk7
IH0sCisgICAgICAgIG5leHQoKSB7IHJldHVybiB7IGRvbmU6IHRydWUgfTsgfQorICAgIH0KKyAg
ICBmb3IgKGxldCBvIG9mIGl0ZXJhYmxlKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTsKKyAg
ICB0aHJvdyBuZXcgRXJyb3IoKTsKK30KK25vSW5saW5lKHRlc3QpOworCitmb3IgKGxldCBpID0g
MDsgaSA8IDFlNTsgKytpKSB7CisgICAgbGV0IGVycm9yOworICAgIHRyeSB7CisgICAgICAgIHRl
c3QoKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIGVycm9yID0gZTsKKyAgICB9CisgICAg
aWYgKGVycm9yICE9ICJUeXBlRXJyb3I6IEl0ZXJhdG9yIHJlc3VsdCBpbnRlcmZhY2UgaXMgbm90
IGFuIG9iamVjdC4iKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTsKK30KZGlmZiAtLWdpdCBh
L0pTVGVzdHMvc3RyZXNzL3Rlc3QtZm9yLW9mLWNmZy1zaW1wbGljYXRpb24tZXhpdC1vay5qcyBi
L0pTVGVzdHMvc3RyZXNzL3Rlc3QtZm9yLW9mLWNmZy1zaW1wbGljYXRpb24tZXhpdC1vay5qcwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi44OWIyMjY3OWM2ODQ4MTI3MGI4Nzc2MmEwMmE1MWZmOGZhNmVlNWFlCi0tLSAv
ZGV2L251bGwKKysrIGIvSlNUZXN0cy9zdHJlc3MvdGVzdC1mb3Itb2YtY2ZnLXNpbXBsaWNhdGlv
bi1leGl0LW9rLmpzCkBAIC0wLDAgKzEsNyBAQAorbGV0IHogPSB7fQorei5fX3Byb3RvX18gPSBb
XQorZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwMDAwOyBpKyspIHsKKyAgZm9yIChsZXQgeCBvZiBb
JycsIHpdKSB7CisgICAgZm9yIChsZXQgeSBvZiB4KSB7fQorICB9Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397358</attachid>
            <date>2020-04-23 10:26:19 -0700</date>
            <delta_ts>2020-04-23 11:08:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-210882-20200423102618.patch</filename>
            <type>text/plain</type>
            <size>42290</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwNDQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
ZTQ3YWMyMmU2MTkxNGYyZjYzNDlmMjM5NzY0MWVlNWRmNWE1OGY3Li40MDE1YzlmNmZjYmU5MDRh
NWQ2YTViMjJiNThiZDQxZmY0MDI4Y2Q5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NCBAQAorMjAyMC0wNC0yMiAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBGaXggT1NSIGV4aXRpbmcvaXRlcmF0b3Igb2JqZWN0IGNoZWNrcyBp
biBmb3Itb2YgYnl0ZWNvZGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMTA4ODIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBUaGlzIHBhdGNoIGZpeGVzIHNvbWUgYnVncyBpbiB0aGUgREZHQnl0ZWNvZGVQ
YXJzZXIgd2hlcmUgd2Ugd291bGQKKyAgICAgICAgc2V0IHRoZSBleGl0IG9yaWdpbiBmb3IgdGhl
IFNldExvY2FsIGZvbGxvd2luZyB0aGUgaXRlcmF0b3Jfb3Blbi9uZXh0CisgICAgICAgIGZpcnN0
IGNhbGwgdG8gdGhlIG5leHQgYnl0ZWNvZGUuIFRoaXMgbWVhbnQgdGhhdCBpZiBvdXQtb2YtbGlu
ZQorICAgICAgICBTeW1ib2wuaXRlcmF0b3Igb3IgbmV4dCBmdW5jdGlvbnMgcmV0dXJuZWQgYW4g
dW5leHBlY3RlZCBub24tY2VsbAorICAgICAgICB3ZSB3b3VsZCBPU1IgcGFzdCB0aGUgcmVzdCBv
ZiB0aGUgbmV4dCBieXRlY29kZSByYXRoZXIgdGhhbiB0byB0aGUKKyAgICAgICAgZmlyc3QgY2hl
Y2twb2ludC4KKworICAgICAgICBUaGlzIHBhdGNoIGFsc28gbWFrZXMgc3VyZSB3ZSBwcm9wZXJs
eSB0aHJvdyBmb3Igbm9uLW9iamVjdHMgcmV0dXJuZWQKKyAgICAgICAgZnJvbSBlaXRoZXIgb2Yg
dGhlIGFib3ZlIGZ1bmN0aW9ucyBpbiBhbGwgdGllcnMgKGFuZCBhZGRzIHRlc3RzKS4KKworICAg
ICAgICBGaW5hbGx5LCB0aGlzIHBhdGNoIG1ha2VzIGEgc21hbGwgb3B0aW1pemF0aW9uIHdoZXJl
IHdlIGp1c3QgQXJpdGhCaXRPciB0aGUKKyAgICAgICAgaXRlcmF0b3IncyBjbG9zZWQgc3RhdGUg
KGluZGV4ID09IC0xKSBhbmQgaW5kZXggaXMgb3V0IG9mIGJvdW5kcy4gV2UgY2FuJ3QKKyAgICAg
ICAgZG8gYSBDb21wYXJlQmVsb3cgY2hlY2sgYmVjYXVzZSB0aGUgaW5kZXggaXMgZWZmZWN0aXZl
bHkgYW4gaW50MzNfdC4KKworICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlSW5kZXguaDoKKyAg
ICAgICAgKEpTQzo6Qnl0ZWNvZGVJbmRleDo6d2l0aENoZWNrcG9pbnQgY29uc3QpOgorICAgICAg
ICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVQYXJzZXI6Om5leHRPcGNvZGVJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0
ZUNvZGVQYXJzZXI6Om5leHRDaGVja3BvaW50IGNvbnN0KToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6cHJvZ3Jlc3NUb05leHRDaGVja3BvaW50KToKKyAgICAgICAgKEpTQzo6
REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGxWYXJpYW50KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVHZXRCeUlkKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6aGFuZGxlUHV0QnlJZCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBh
cnNlR2V0QnlJZCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxv
Y2spOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeVZhbCk6
CisgICAgICAgICogaml0L0pJVENhbGwuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93
X29wX2l0ZXJhdG9yX29wZW4pOgorICAgICAgICAqIGxsaW50L0xMSW50U2xvd1BhdGhzLmNwcDoK
KyAgICAgICAgKEpTQzo6TExJbnQ6OkxMSU5UX1NMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKEpT
Qzo6TExJbnQ6OmhhbmRsZUl0ZXJhdG9yTmV4dENoZWNrcG9pbnQpOgorCiAyMDIwLTA0LTIwICBZ
dXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgQ2hlY2sgU3RydWN0
dXJlIGF0dHJpYnV0ZXMgaW4gT2JqZWN0LmFzc2lnbiBleGhhdXN0aXZlbHkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUluZGV4LmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5oCmluZGV4IDEwZmJhNDQwNThl
YzlkZmVkMjU0ODA5YTZkNzgzMzdkMDExYTRiNjEuLjZlMjY2ZDNkYWYzYjEyNWU4NzM2NzU3NTQw
NTJjMzEzYzBlNWE1NzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUluZGV4LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlSW5kZXguaApAQCAtNjIsNiArNjIsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0hhc2hU
YWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuICp0aGlzID09IGRlbGV0ZWRWYWx1ZSgp
OyB9CiAKICAgICBzdGF0aWMgQnl0ZWNvZGVJbmRleCBmcm9tQml0cyh1aW50MzJfdCBiaXRzKTsK
KyAgICBCeXRlY29kZUluZGV4IHdpdGhDaGVja3BvaW50KHVuc2lnbmVkIGNoZWNrcG9pbnQpIGNv
bnN0IHsgcmV0dXJuIEJ5dGVjb2RlSW5kZXgob2Zmc2V0KCksIGNoZWNrcG9pbnQpOyB9CiAKICAg
ICAvLyBDb21wYXJpc29uIG9wZXJhdG9ycy4KICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkg
Y29uc3QgeyByZXR1cm4gbV9wYWNrZWRCaXRzICE9IGludmFsaWRPZmZzZXQgJiYgbV9wYWNrZWRC
aXRzICE9IGRlbGV0ZWRWYWx1ZSgpLm9mZnNldCgpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCmluZGV4IDM0ZGEzYjFmYzc1MWJmY2U5YmY5
NWRjMjZhOTRhMmQ4N2U5MTU1MTQuLjA3N2I1OGMxODU0OWE3NjUwMDQ2NjQ1NzUyN2QyMTg0NTZi
Y2EzNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJz
ZXIuY3BwCkBAIC0xNzcsMTEgKzE3NywxMSBAQCBwcml2YXRlOgogICAgIC8vIEhhbmRsZSBjYWxs
cy4gVGhpcyByZXNvbHZlcyBpc3N1ZXMgc3Vycm91bmRpbmcgaW5saW5pbmcgYW5kIGludHJpbnNp
Y3MuCiAgICAgZW51bSBUZXJtaW5hbGl0eSB7IFRlcm1pbmFsLCBOb25UZXJtaW5hbCB9OwogICAg
IFRlcm1pbmFsaXR5IGhhbmRsZUNhbGwoCi0gICAgICAgIE9wZXJhbmQgcmVzdWx0LCBOb2RlVHlw
ZSBvcCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCB1bnNpZ25lZCBpbnN0cnVjdGlvblNpemUsCisg
ICAgICAgIE9wZXJhbmQgcmVzdWx0LCBOb2RlVHlwZSBvcCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5k
LCBCeXRlY29kZUluZGV4IG9zckV4aXRJbmRleCwKICAgICAgICAgTm9kZSogY2FsbFRhcmdldCwg
aW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIENhbGxM
aW5rU3RhdHVzLAogICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKTsKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDYWxsT3A+Ci0gICAgVGVybWluYWxpdHkgaGFuZGxlQ2FsbChjb25zdCBJ
bnN0cnVjdGlvbiogcGMsIE5vZGVUeXBlIG9wLCBDYWxsTW9kZSk7CisgICAgVGVybWluYWxpdHkg
aGFuZGxlQ2FsbChjb25zdCBJbnN0cnVjdGlvbiogcGMsIE5vZGVUeXBlIG9wLCBDYWxsTW9kZSwg
Qnl0ZWNvZGVJbmRleCBvc3JFeGl0SW5kZXgpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENhbGxP
cD4KICAgICBUZXJtaW5hbGl0eSBoYW5kbGVWYXJhcmdzQ2FsbChjb25zdCBJbnN0cnVjdGlvbiog
cGMsIE5vZGVUeXBlIG9wLCBDYWxsTW9kZSk7CiAgICAgdm9pZCBlbWl0RnVuY3Rpb25DaGVja3Mo
Q2FsbFZhcmlhbnQsIE5vZGUqIGNhbGxUYXJnZXQsIFZpcnR1YWxSZWdpc3RlciB0aGlzQXJndW1u
dCk7CkBAIC0xOTQsOCArMTk0LDggQEAgcHJpdmF0ZToKICAgICBib29sIGhhbmRsZVZhcmFyZ3NJ
bmxpbmluZyhOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgT3BlcmFuZCByZXN1bHQsIGNvbnN0IENhbGxM
aW5rU3RhdHVzJiwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBWaXJ0dWFsUmVnaXN0ZXIgdGhpc0FyZ3Vt
ZW50LCBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzQXJndW1lbnQsIHVuc2lnbmVkIGFyZ3VtZW50
c09mZnNldCwgTm9kZVR5cGUgY2FsbE9wLCBJbmxpbmVDYWxsRnJhbWU6OktpbmQpOwogICAgIHVu
c2lnbmVkIGdldElubGluaW5nQmFsYW5jZShjb25zdCBDYWxsTGlua1N0YXR1cyYsIENvZGVTcGVj
aWFsaXphdGlvbktpbmQpOwogICAgIGVudW0gY2xhc3MgQ2FsbE9wdGltaXphdGlvblJlc3VsdCB7
IE9wdGltaXplZFRvSnVtcCwgSW5saW5lZCwgRGlkTm90aGluZyB9OwotICAgIENhbGxPcHRpbWl6
YXRpb25SZXN1bHQgaGFuZGxlQ2FsbFZhcmlhbnQoTm9kZSogY2FsbFRhcmdldE5vZGUsIE9wZXJh
bmQgcmVzdWx0LCBDYWxsVmFyaWFudCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBWaXJ0dWFsUmVnaXN0
ZXIgdGhpc0FyZ3VtZW50LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIEJ5dGVjb2Rl
SW5kZXggbmV4dEluZGV4LCBJbmxpbmVDYWxsRnJhbWU6OktpbmQsIFNwZWN1bGF0ZWRUeXBlIHBy
ZWRpY3Rpb24sIHVuc2lnbmVkJiBpbmxpbmluZ0JhbGFuY2UsIEJhc2ljQmxvY2sqIGNvbnRpbnVh
dGlvbkJsb2NrLCBib29sIG5lZWRzVG9DaGVja0NhbGxlZSk7Ci0gICAgQ2FsbE9wdGltaXphdGlv
blJlc3VsdCBoYW5kbGVJbmxpbmluZyhOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgT3BlcmFuZCByZXN1
bHQsIGNvbnN0IENhbGxMaW5rU3RhdHVzJiwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBWaXJ0dWFsUmVn
aXN0ZXIgdGhpc0FyZ3VtZW50LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIEJ5dGVj
b2RlSW5kZXggbmV4dEluZGV4LCBOb2RlVHlwZSBjYWxsT3AsIElubGluZUNhbGxGcmFtZTo6S2lu
ZCwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbik7CisgICAgQ2FsbE9wdGltaXphdGlvblJlc3Vs
dCBoYW5kbGVDYWxsVmFyaWFudChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgT3BlcmFuZCByZXN1bHQs
IENhbGxWYXJpYW50LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIFZpcnR1YWxSZWdpc3RlciB0aGlzQXJn
dW1lbnQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgQnl0ZWNvZGVJbmRleCBvc3JF
eGl0SW5kZXgsIElubGluZUNhbGxGcmFtZTo6S2luZCwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlv
biwgdW5zaWduZWQmIGlubGluaW5nQmFsYW5jZSwgQmFzaWNCbG9jayogY29udGludWF0aW9uQmxv
Y2ssIGJvb2wgbmVlZHNUb0NoZWNrQ2FsbGVlKTsKKyAgICBDYWxsT3B0aW1pemF0aW9uUmVzdWx0
IGhhbmRsZUlubGluaW5nKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBPcGVyYW5kIHJlc3VsdCwgY29u
c3QgQ2FsbExpbmtTdGF0dXMmLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIFZpcnR1YWxSZWdpc3RlciB0
aGlzQXJndW1lbnQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgQnl0ZWNvZGVJbmRl
eCBvc3JFeGl0SW5kZXgsIE5vZGVUeXBlIGNhbGxPcCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCBT
cGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGVja3NG
dW5jdG9yPgogICAgIHZvaWQgaW5saW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgT3BlcmFu
ZCByZXN1bHQsIENhbGxWYXJpYW50LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcywgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCBCYXNpY0Jsb2NrKiBjb250
aW51YXRpb25CbG9jaywgY29uc3QgQ2hlY2tzRnVuY3RvciYgaW5zZXJ0Q2hlY2tzKTsKICAgICAv
LyBIYW5kbGUgaW50cmluc2ljIGZ1bmN0aW9ucy4gUmV0dXJuIHRydWUgaWYgaXQgc3VjY2VlZGVk
LCBmYWxzZSBpZiB3ZSBuZWVkIHRvIHBsYW50IGEgY2FsbC4KQEAgLTIxNSw3ICsyMTUsNyBAQCBw
cml2YXRlOgogICAgIGJvb2wgaGFuZGxlTW9kdWxlTmFtZXNwYWNlTG9hZChWaXJ0dWFsUmVnaXN0
ZXIgcmVzdWx0LCBTcGVjdWxhdGVkVHlwZSwgTm9kZSogYmFzZSwgR2V0QnlTdGF0dXMpOwogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+Ci0gICAgdm9pZCBoYW5kbGVQdXRCeVZhbChC
eXRlY29kZSwgdW5zaWduZWQgaW5zdHJ1Y3Rpb25TaXplKTsKKyAgICB2b2lkIGhhbmRsZVB1dEJ5
VmFsKEJ5dGVjb2RlLCBCeXRlY29kZUluZGV4IG9zckV4aXRJbmRleCk7CiAgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIEJ5dGVjb2RlPgogICAgIHZvaWQgaGFuZGxlUHV0QWNjZXNzb3JCeUlkKE5vZGVU
eXBlLCBCeXRlY29kZSk7CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgpAQCAtMjQ3
LDEyICsyNDcsMTIgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICB2
b2lkIHBhcnNlR2V0QnlJZChjb25zdCBJbnN0cnVjdGlvbiopOwogICAgIHZvaWQgaGFuZGxlR2V0
QnlJZCgKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRlc3RpbmF0aW9uLCBTcGVjdWxhdGVkVHlw
ZSwgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciwgdW5zaWduZWQgaWRlbnRpZmllck51
bWJlciwgR2V0QnlTdGF0dXMsIEFjY2Vzc1R5cGUsIHVuc2lnbmVkIGluc3RydWN0aW9uU2l6ZSk7
CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBkZXN0aW5hdGlvbiwgU3BlY3VsYXRlZFR5cGUsIE5v
ZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIs
IEdldEJ5U3RhdHVzLCBBY2Nlc3NUeXBlLCBCeXRlY29kZUluZGV4IG9zckV4aXRJbmRleCk7CiAg
ICAgdm9pZCBlbWl0UHV0QnlJZCgKICAgICAgICAgTm9kZSogYmFzZSwgQ2FjaGVhYmxlSWRlbnRp
ZmllciwgTm9kZSogdmFsdWUsICBjb25zdCBQdXRCeUlkU3RhdHVzJiwgYm9vbCBpc0RpcmVjdCwg
RUNNQU1vZGUpOwogICAgIHZvaWQgaGFuZGxlUHV0QnlJZCgKICAgICAgICAgTm9kZSogYmFzZSwg
Q2FjaGVhYmxlSWRlbnRpZmllciwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgTm9kZSogdmFs
dWUsIGNvbnN0IFB1dEJ5SWRTdGF0dXMmLAotICAgICAgICBib29sIGlzRGlyZWN0LCB1bnNpZ25l
ZCBpbnRydWN0aW9uU2l6ZSwgRUNNQU1vZGUpOworICAgICAgICBib29sIGlzRGlyZWN0LCBCeXRl
Y29kZUluZGV4IG9zckV4aXRJbmRleCwgRUNNQU1vZGUpOwogCiAgICAgdm9pZCBoYW5kbGVEZWxl
dGVCeUlkKAogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZGVzdGluYXRpb24sIE5vZGUqIGJhc2Us
IENhY2hlYWJsZUlkZW50aWZpZXIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIERlbGV0ZUJ5
U3RhdHVzLCBFQ01BTW9kZSk7CkBAIC0yOTIsOSArMjkyLDEyIEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBsaW5rQmxvY2soQmFzaWNCbG9jayosIFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHBvc3NpYmxlVGFy
Z2V0cyk7CiAgICAgdm9pZCBsaW5rQmxvY2tzKFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHVubGlua2Vk
QmxvY2tzLCBWZWN0b3I8QmFzaWNCbG9jayo+JiBwb3NzaWJsZVRhcmdldHMpOwogICAgIAorICAg
IEJ5dGVjb2RlSW5kZXggbmV4dEJ5dGVjb2RlSW5kZXgoKSBjb25zdCB7IHJldHVybiBCeXRlY29k
ZUluZGV4KG1fY3VycmVudEluZGV4Lm9mZnNldCgpICsgbV9jdXJyZW50SW5zdHJ1Y3Rpb24tPnNp
emUoKSk7IH0KKyAgICBCeXRlY29kZUluZGV4IG5leHRDaGVja3BvaW50KCkgY29uc3QgeyByZXR1
cm4gbV9jdXJyZW50SW5kZXgud2l0aENoZWNrcG9pbnQobV9jdXJyZW50SW5kZXguY2hlY2twb2lu
dCgpICsgMSk7IH0KKwogICAgIHZvaWQgcHJvZ3Jlc3NUb05leHRDaGVja3BvaW50KCkKICAgICB7
Ci0gICAgICAgIG1fY3VycmVudEluZGV4ID0gQnl0ZWNvZGVJbmRleChtX2N1cnJlbnRJbmRleC5v
ZmZzZXQoKSwgbV9jdXJyZW50SW5kZXguY2hlY2twb2ludCgpICsgMSk7CisgICAgICAgIG1fY3Vy
cmVudEluZGV4ID0gbmV4dENoZWNrcG9pbnQoKTsKICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCwg
aXQncyBhZ2FpbiBPSyB0byBPU1IgZXhpdC4KICAgICAgICAgbV9leGl0T0sgPSB0cnVlOwogICAg
ICAgICBwcm9jZXNzU2V0TG9jYWxRdWV1ZSgpOwpAQCAtMTMwNSw3ICsxMzA4LDcgQEAgdm9pZCBC
eXRlQ29kZVBhcnNlcjo6YWRkSnVtcFRvKHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCiB9CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIENhbGxPcD4KLUJ5dGVDb2RlUGFyc2VyOjpUZXJtaW5hbGl0eSBCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlQ2FsbChjb25zdCBJbnN0cnVjdGlvbiogcGMsIE5vZGVUeXBlIG9w
LCBDYWxsTW9kZSBjYWxsTW9kZSkKK0J5dGVDb2RlUGFyc2VyOjpUZXJtaW5hbGl0eSBCeXRlQ29k
ZVBhcnNlcjo6aGFuZGxlQ2FsbChjb25zdCBJbnN0cnVjdGlvbiogcGMsIE5vZGVUeXBlIG9wLCBD
YWxsTW9kZSBjYWxsTW9kZSwgQnl0ZWNvZGVJbmRleCBvc3JFeGl0SW5kZXgpCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IHBjLT5hczxDYWxsT3A+KCk7CiAgICAgTm9kZSogY2FsbFRhcmdldCA9IGdl
dChjYWxsZWVGb3IoYnl0ZWNvZGUsIG1fY3VycmVudEluZGV4LmNoZWNrcG9pbnQoKSkpOwpAQCAt
MTMxNiw4ICsxMzE5LDkgQEAgQnl0ZUNvZGVQYXJzZXI6OlRlcm1pbmFsaXR5IEJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVDYWxsKGNvbnN0IEluc3RydWN0aW9uKiBwYywgTm8KICAgICAgICAgbV9pbmxp
bmVTdGFja1RvcC0+bV9iYXNlbGluZU1hcCwgbV9pY0NvbnRleHRTdGFjayk7CiAKICAgICBJbmxp
bmVDYWxsRnJhbWU6OktpbmQga2luZCA9IElubGluZUNhbGxGcmFtZTo6a2luZEZvcihjYWxsTW9k
ZSk7CisgICAgQVNTRVJUKG9zckV4aXRJbmRleCk7CiAKLSAgICByZXR1cm4gaGFuZGxlQ2FsbChk
ZXN0aW5hdGlvbkZvcihieXRlY29kZSwgbV9jdXJyZW50SW5kZXguY2hlY2twb2ludCgpLCBKSVRU
eXBlOjpERkdKSVQpLCBvcCwga2luZCwgcGMtPnNpemUoKSwgY2FsbFRhcmdldCwKKyAgICByZXR1
cm4gaGFuZGxlQ2FsbChkZXN0aW5hdGlvbkZvcihieXRlY29kZSwgbV9jdXJyZW50SW5kZXguY2hl
Y2twb2ludCgpLCBKSVRUeXBlOjpERkdKSVQpLCBvcCwga2luZCwgb3NyRXhpdEluZGV4LCBjYWxs
VGFyZ2V0LAogICAgICAgICBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpc0ZvcihieXRlY29kZSwg
bV9jdXJyZW50SW5kZXguY2hlY2twb2ludCgpKSwgcmVnaXN0ZXJPZmZzZXQsIGNhbGxMaW5rU3Rh
dHVzLCBnZXRQcmVkaWN0aW9uKCkpOwogfQogCkBAIC0xMzI4LDcgKzEzMzIsNyBAQCB2b2lkIEJ5
dGVDb2RlUGFyc2VyOjpyZWZpbmVTdGF0aWNhbGx5KENhbGxMaW5rU3RhdHVzJiBjYWxsTGlua1N0
YXR1cywgTm9kZSogY2FsbAogfQogCiBCeXRlQ29kZVBhcnNlcjo6VGVybWluYWxpdHkgQnl0ZUNv
ZGVQYXJzZXI6OmhhbmRsZUNhbGwoCi0gICAgT3BlcmFuZCByZXN1bHQsIE5vZGVUeXBlIG9wLCBJ
bmxpbmVDYWxsRnJhbWU6OktpbmQga2luZCwgdW5zaWduZWQgaW5zdHJ1Y3Rpb25TaXplLAorICAg
IE9wZXJhbmQgcmVzdWx0LCBOb2RlVHlwZSBvcCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kIGtpbmQs
IEJ5dGVjb2RlSW5kZXggb3NyRXhpdEluZGV4LAogICAgIE5vZGUqIGNhbGxUYXJnZXQsIGludCBh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgaW50IHJlZ2lzdGVyT2Zmc2V0LAogICAgIENhbGxM
aW5rU3RhdHVzIGNhbGxMaW5rU3RhdHVzLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKQogewpA
QCAtMTM0NSw3ICsxMzQ5LDcgQEAgQnl0ZUNvZGVQYXJzZXI6OlRlcm1pbmFsaXR5IEJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVDYWxsKAogCiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzQXJndW1l
bnQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoMCwgcmVnaXN0ZXJP
ZmZzZXQpOwogICAgICAgICBhdXRvIG9wdGltaXphdGlvblJlc3VsdCA9IGhhbmRsZUlubGluaW5n
KGNhbGxUYXJnZXQsIHJlc3VsdCwgY2FsbExpbmtTdGF0dXMsIHJlZ2lzdGVyT2Zmc2V0LCB0aGlz
QXJndW1lbnQsCi0gICAgICAgICAgICBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgQnl0ZWNv
ZGVJbmRleChtX2N1cnJlbnRJbmRleC5vZmZzZXQoKSArIGluc3RydWN0aW9uU2l6ZSksIG9wLCBr
aW5kLCBwcmVkaWN0aW9uKTsKKyAgICAgICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
LCBvc3JFeGl0SW5kZXgsIG9wLCBraW5kLCBwcmVkaWN0aW9uKTsKICAgICAgICAgaWYgKG9wdGlt
aXphdGlvblJlc3VsdCA9PSBDYWxsT3B0aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWRUb0p1bXAp
CiAgICAgICAgICAgICByZXR1cm4gVGVybWluYWw7CiAgICAgICAgIGlmIChvcHRpbWl6YXRpb25S
ZXN1bHQgPT0gQ2FsbE9wdGltaXphdGlvblJlc3VsdDo6SW5saW5lZCkgewpAQCAtMTgzMCw3ICsx
ODM0LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aW5saW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0
Tm9kZSwgT3BlcmFuZCByZXN1bHQsIENhbGxWYXJpYW4KICAgICBtX2N1cnJlbnRJbnN0cnVjdGlv
biA9IHNhdmVkQ3VycmVudEluc3RydWN0aW9uOwogfQogCi1CeXRlQ29kZVBhcnNlcjo6Q2FsbE9w
dGltaXphdGlvblJlc3VsdCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbFZhcmlhbnQoTm9kZSog
Y2FsbFRhcmdldE5vZGUsIE9wZXJhbmQgcmVzdWx0LCBDYWxsVmFyaWFudCBjYWxsZWUsIGludCBy
ZWdpc3Rlck9mZnNldCwgVmlydHVhbFJlZ2lzdGVyIHRoaXNBcmd1bWVudCwgaW50IGFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzLCBCeXRlY29kZUluZGV4IG5leHRJbmRleCwgSW5saW5lQ2FsbEZy
YW1lOjpLaW5kIGtpbmQsIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIHVuc2lnbmVkJiBpbmxp
bmluZ0JhbGFuY2UsIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbkJsb2NrLCBib29sIG5lZWRzVG9D
aGVja0NhbGxlZSkKK0J5dGVDb2RlUGFyc2VyOjpDYWxsT3B0aW1pemF0aW9uUmVzdWx0IEJ5dGVD
b2RlUGFyc2VyOjpoYW5kbGVDYWxsVmFyaWFudChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgT3BlcmFu
ZCByZXN1bHQsIENhbGxWYXJpYW50IGNhbGxlZSwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBWaXJ0dWFs
UmVnaXN0ZXIgdGhpc0FyZ3VtZW50LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIEJ5
dGVjb2RlSW5kZXggb3NyRXhpdEluZGV4LCBJbmxpbmVDYWxsRnJhbWU6OktpbmQga2luZCwgU3Bl
Y3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgdW5zaWduZWQmIGlubGluaW5nQmFsYW5jZSwgQmFzaWNC
bG9jayogY29udGludWF0aW9uQmxvY2ssIGJvb2wgbmVlZHNUb0NoZWNrQ2FsbGVlKQogewogICAg
IFZFUkJPU0VfTE9HKCIgICAgQ29uc2lkZXJpbmcgY2FsbGVlICIsIGNhbGxlZSwgIlxuIik7CiAK
QEAgLTE4NTgsNyArMTg2Miw3IEBAIEJ5dGVDb2RlUGFyc2VyOjpDYWxsT3B0aW1pemF0aW9uUmVz
dWx0IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsVmFyaWFudChOb2RlKiBjCiAgICAgICAgIGVt
aXRBcmd1bWVudFBoYW50b21zKHJlZ2lzdGVyT2Zmc2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyk7CiAgICAgICAgIGlubGluaW5nQmFsYW5jZS0tOwogICAgICAgICBpZiAoY29udGludWF0
aW9uQmxvY2spIHsKLSAgICAgICAgICAgIG1fY3VycmVudEluZGV4ID0gbmV4dEluZGV4OworICAg
ICAgICAgICAgbV9jdXJyZW50SW5kZXggPSBvc3JFeGl0SW5kZXg7CiAgICAgICAgICAgICBtX2V4
aXRPSyA9IHRydWU7CiAgICAgICAgICAgICBwcm9jZXNzU2V0TG9jYWxRdWV1ZSgpOwogICAgICAg
ICAgICAgYWRkSnVtcFRvKGNvbnRpbnVhdGlvbkJsb2NrKTsKQEAgLTIwNTQsNyArMjA1OCw3IEBA
IEJ5dGVDb2RlUGFyc2VyOjpDYWxsT3B0aW1pemF0aW9uUmVzdWx0IEJ5dGVDb2RlUGFyc2VyOjpo
YW5kbGVJbmxpbmluZygKICAgICBOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgT3BlcmFuZCByZXN1bHQs
IGNvbnN0IENhbGxMaW5rU3RhdHVzJiBjYWxsTGlua1N0YXR1cywKICAgICBpbnQgcmVnaXN0ZXJP
ZmZzZXQsIFZpcnR1YWxSZWdpc3RlciB0aGlzQXJndW1lbnQsCiAgICAgaW50IGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzLAotICAgIEJ5dGVjb2RlSW5kZXggbmV4dEluZGV4LCBOb2RlVHlwZSBj
YWxsT3AsIElubGluZUNhbGxGcmFtZTo6S2luZCBraW5kLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0
aW9uKQorICAgIEJ5dGVjb2RlSW5kZXggb3NyRXhpdEluZGV4LCBOb2RlVHlwZSBjYWxsT3AsIElu
bGluZUNhbGxGcmFtZTo6S2luZCBraW5kLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKQogewog
ICAgIFZFUkJPU0VfTE9HKCJIYW5kbGluZyBpbmxpbmluZy4uLlxuU3RhY2s6ICIsIGN1cnJlbnRD
b2RlT3JpZ2luKCksICJcbiIpOwogICAgIApAQCAtMjA2Nyw3ICsyMDcxLDcgQEAgQnl0ZUNvZGVQ
YXJzZXI6OkNhbGxPcHRpbWl6YXRpb25SZXN1bHQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGlu
aW5nKAogICAgIGlmICghY2FsbExpbmtTdGF0dXMuY291bGRUYWtlU2xvd1BhdGgoKSAmJiBjYWxs
TGlua1N0YXR1cy5zaXplKCkgPT0gMSkgewogICAgICAgICByZXR1cm4gaGFuZGxlQ2FsbFZhcmlh
bnQoCiAgICAgICAgICAgICBjYWxsVGFyZ2V0Tm9kZSwgcmVzdWx0LCBjYWxsTGlua1N0YXR1c1sw
XSwgcmVnaXN0ZXJPZmZzZXQsIHRoaXNBcmd1bWVudCwKLSAgICAgICAgICAgIGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzLCBuZXh0SW5kZXgsIGtpbmQsIHByZWRpY3Rpb24sIGlubGluaW5nQmFs
YW5jZSwgbnVsbHB0ciwgdHJ1ZSk7CisgICAgICAgICAgICBhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcywgb3NyRXhpdEluZGV4LCBraW5kLCBwcmVkaWN0aW9uLCBpbmxpbmluZ0JhbGFuY2UsIG51
bGxwdHIsIHRydWUpOwogICAgIH0KIAogICAgIC8vIFdlIG5lZWQgdG8gY3JlYXRlIHNvbWUga2lu
ZCBvZiBzd2l0Y2ggb3ZlciBjYWxsZWUuIEZvciBub3cgd2Ugb25seSBkbyB0aGlzIGlmIHdlIGJl
bGlldmUgdGhhdApAQCAtMjE1Nyw3ICsyMTYxLDcgQEAgQnl0ZUNvZGVQYXJzZXI6OkNhbGxPcHRp
bWl6YXRpb25SZXN1bHQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKAogICAgICAgICAK
ICAgICAgICAgYXV0byBpbmxpbmluZ1Jlc3VsdCA9IGhhbmRsZUNhbGxWYXJpYW50KAogICAgICAg
ICAgICAgbXlDYWxsVGFyZ2V0Tm9kZSwgcmVzdWx0LCBjYWxsTGlua1N0YXR1c1tpXSwgcmVnaXN0
ZXJPZmZzZXQsCi0gICAgICAgICAgICB0aGlzQXJndW1lbnQsIGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzLCBuZXh0SW5kZXgsIGtpbmQsIHByZWRpY3Rpb24sCisgICAgICAgICAgICB0aGlzQXJn
dW1lbnQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBvc3JFeGl0SW5kZXgsIGtpbmQsIHBy
ZWRpY3Rpb24sCiAgICAgICAgICAgICBpbmxpbmluZ0JhbGFuY2UsIGNvbnRpbnVhdGlvbkJsb2Nr
LCBmYWxzZSk7CiAgICAgICAgIAogICAgICAgICBpZiAoaW5saW5pbmdSZXN1bHQgPT0gQ2FsbE9w
dGltaXphdGlvblJlc3VsdDo6RGlkTm90aGluZykgewpAQCAtMjIwNiw3ICsyMjEwLDcgQEAgQnl0
ZUNvZGVQYXJzZXI6OkNhbGxPcHRpbWl6YXRpb25SZXN1bHQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZUlubGluaW5nKAogICAgICAgICBWRVJCT1NFX0xPRygiY291bGRUYWtlU2xvd1BhdGggd2FzIGZh
bHNlXG4iKTsKICAgICB9CiAKLSAgICBtX2N1cnJlbnRJbmRleCA9IG5leHRJbmRleDsKKyAgICBt
X2N1cnJlbnRJbmRleCA9IG9zckV4aXRJbmRleDsKICAgICBtX2V4aXRPSyA9IHRydWU7IC8vIE9y
aWdpbiBjaGFuZ2VkLCBzbyBpdCdzIGZpbmUgdG8gZXhpdCBhZ2Fpbi4KICAgICBwcm9jZXNzU2V0
TG9jYWxRdWV1ZSgpOwogCkBAIC00NDg3LDcgKzQ0OTEsNyBAQCBOb2RlKiBCeXRlQ29kZVBhcnNl
cjo6c3RvcmUoTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllciwgY29uc3QgUHV0QnlJZFZh
cmlhbgogCiB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlkKAogICAgIFZpcnR1YWxS
ZWdpc3RlciBkZXN0aW5hdGlvbiwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgTm9kZSogYmFz
ZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVt
YmVyLAotICAgIEdldEJ5U3RhdHVzIGdldEJ5U3RhdHVzLCBBY2Nlc3NUeXBlIHR5cGUsIHVuc2ln
bmVkIGluc3RydWN0aW9uU2l6ZSkKKyAgICBHZXRCeVN0YXR1cyBnZXRCeVN0YXR1cywgQWNjZXNz
VHlwZSB0eXBlLCBCeXRlY29kZUluZGV4IG9zckV4aXRJbmRleCkKIHsKICAgICAvLyBBdHRlbXB0
IHRvIHJlZHVjZSB0aGUgc2V0IG9mIHRoaW5ncyBpbiB0aGUgR2V0QnlTdGF0dXMuCiAgICAgaWYg
KGJhc2UtPm9wKCkgPT0gTmV3T2JqZWN0KSB7CkBAIC00NjY3LDcgKzQ2NzEsNyBAQCB2b2lkIEJ5
dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlkKAogICAgIGFkZFRvR3JhcGgoRXhpdE9LKTsKICAg
ICAKICAgICBoYW5kbGVDYWxsKAotICAgICAgICBkZXN0aW5hdGlvbiwgQ2FsbCwgSW5saW5lQ2Fs
bEZyYW1lOjpHZXR0ZXJDYWxsLCBpbnN0cnVjdGlvblNpemUsCisgICAgICAgIGRlc3RpbmF0aW9u
LCBDYWxsLCBJbmxpbmVDYWxsRnJhbWU6OkdldHRlckNhbGwsIG9zckV4aXRJbmRleCwKICAgICAg
ICAgZ2V0dGVyLCBudW1iZXJPZlBhcmFtZXRlcnMgLSAxLCByZWdpc3Rlck9mZnNldCwgKnZhcmlh
bnQuY2FsbExpbmtTdGF0dXMoKSwgcHJlZGljdGlvbik7CiB9CiAKQEAgLTQ3ODAsNyArNDc4NCw3
IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmVtaXRQdXRCeUlkKAogCiB2b2lkIEJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVQdXRCeUlkKAogICAgIE5vZGUqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIg
aWRlbnRpZmllciwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgTm9kZSogdmFsdWUsCi0gICAg
Y29uc3QgUHV0QnlJZFN0YXR1cyYgcHV0QnlJZFN0YXR1cywgYm9vbCBpc0RpcmVjdCwgdW5zaWdu
ZWQgaW5zdHJ1Y3Rpb25TaXplLCBFQ01BTW9kZSBlY21hTW9kZSkKKyAgICBjb25zdCBQdXRCeUlk
U3RhdHVzJiBwdXRCeUlkU3RhdHVzLCBib29sIGlzRGlyZWN0LCBCeXRlY29kZUluZGV4IG9zckV4
aXRJbmRleCwgRUNNQU1vZGUgZWNtYU1vZGUpCiB7CiAgICAgaWYgKCFwdXRCeUlkU3RhdHVzLmlz
U2ltcGxlKCkgfHwgIXB1dEJ5SWRTdGF0dXMubnVtVmFyaWFudHMoKSB8fCAhT3B0aW9uczo6dXNl
QWNjZXNzSW5saW5pbmcoKSkgewogICAgICAgICBpZiAoIXB1dEJ5SWRTdGF0dXMuaXNTZXQoKSkK
QEAgLTQ5NTAsNyArNDk1NCw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQo
CiAgICAgCiAgICAgICAgIGhhbmRsZUNhbGwoCiAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIo
KSwgQ2FsbCwgSW5saW5lQ2FsbEZyYW1lOjpTZXR0ZXJDYWxsLAotICAgICAgICAgICAgaW5zdHJ1
Y3Rpb25TaXplLCBzZXR0ZXIsIG51bWJlck9mUGFyYW1ldGVycyAtIDEsIHJlZ2lzdGVyT2Zmc2V0
LAorICAgICAgICAgICAgb3NyRXhpdEluZGV4LCBzZXR0ZXIsIG51bWJlck9mUGFyYW1ldGVycyAt
IDEsIHJlZ2lzdGVyT2Zmc2V0LAogICAgICAgICAgICAgKnZhcmlhbnQuY2FsbExpbmtTdGF0dXMo
KSwgU3BlY090aGVyKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTQ5ODMsNyArNDk4Nyw2
IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlR2V0QnlJZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBo
LmlkZW50aWZpZXJzKClbaWRlbnRpZmllck51bWJlcl07CiAgICAgCiAgICAgQWNjZXNzVHlwZSB0
eXBlID0gQWNjZXNzVHlwZTo6R2V0QnlJZDsKLSAgICB1bnNpZ25lZCBvcGNvZGVMZW5ndGggPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKTsKICAgICBpZiAoT3A6Om9wY29kZUlEID09IG9wX3Ry
eV9nZXRfYnlfaWQpCiAgICAgICAgIHR5cGUgPSBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkOwogICAg
IGVsc2UgaWYgKE9wOjpvcGNvZGVJRCA9PSBvcF9nZXRfYnlfaWRfZGlyZWN0KQpAQCAtNDk5NCw3
ICs0OTk3LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VHZXRCeUlkKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1f
YmFzZWxpbmVNYXAsIG1faWNDb250ZXh0U3RhY2ssCiAgICAgICAgIGN1cnJlbnRDb2RlT3JpZ2lu
KCkpOwogCi0gICAgaGFuZGxlR2V0QnlJZChieXRlY29kZS5tX2RzdCwgcHJlZGljdGlvbiwgYmFz
ZSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJs
b2NrKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywgdWlkKSwgaWRlbnRpZmllck51
bWJlciwgZ2V0QnlTdGF0dXMsIHR5cGUsIG9wY29kZUxlbmd0aCk7CisgICAgaGFuZGxlR2V0QnlJ
ZChieXRlY29kZS5tX2RzdCwgcHJlZGljdGlvbiwgYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6
Y3JlYXRlRnJvbUlkZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1faW5saW5lU3RhY2tUb3AtPm1f
cHJvZmlsZWRCbG9jaywgdWlkKSwgaWRlbnRpZmllck51bWJlciwgZ2V0QnlTdGF0dXMsIHR5cGUs
IG5leHRCeXRlY29kZUluZGV4KCkpOwogfQogCiBzdGF0aWMgdWludDY0X3QgbWFrZUR5bmFtaWNW
YXJPcEluZm8odW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgdW5zaWduZWQgZ2V0UHV0SW5mbykK
QEAgLTU5NDIsNyArNTk0NSw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5z
aWduZWQgbGltaXQpCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChzaG91bGRDb21w
aWxlQXNHZXRCeUlkKQotICAgICAgICAgICAgICAgIGhhbmRsZUdldEJ5SWQoYnl0ZWNvZGUubV9k
c3QsIHByZWRpY3Rpb24sIGJhc2UsIGlkZW50aWZpZXIsIGlkZW50aWZpZXJOdW1iZXIsIGdldEJ5
U3RhdHVzLCBBY2Nlc3NUeXBlOjpHZXRCeUlkLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSk7
CisgICAgICAgICAgICAgICAgaGFuZGxlR2V0QnlJZChieXRlY29kZS5tX2RzdCwgcHJlZGljdGlv
biwgYmFzZSwgaWRlbnRpZmllciwgaWRlbnRpZmllck51bWJlciwgZ2V0QnlTdGF0dXMsIEFjY2Vz
c1R5cGU6OkdldEJ5SWQsIG5leHRCeXRlY29kZUluZGV4KCkpOwogICAgICAgICAgICAgZWxzZSB7
CiAgICAgICAgICAgICAgICAgQXJyYXlNb2RlIGFycmF5TW9kZSA9IGdldEFycmF5TW9kZShieXRl
Y29kZS5tZXRhZGF0YShjb2RlQmxvY2spLm1fYXJyYXlQcm9maWxlLCBBcnJheTo6UmVhZCk7CiAg
ICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIGNvbnNpZGVyIG1ha2luZyB0aGlzIG5v
dCB2YXJhcmcsIHNpbmNlIGl0IG9ubHkgdXNlcyB0aHJlZSBjaGlsZApAQCAtNTk3NSwxMSArNTk3
OCwxMSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQog
ICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9wdXRfYnlfdmFsX2RpcmVjdDoKLSAgICAgICAg
ICAgIGhhbmRsZVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbERpcmVj
dD4oKSwgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpOworICAgICAgICAgICAgaGFuZGxlUHV0
QnlWYWwoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsRGlyZWN0PigpLCBuZXh0Qnl0
ZWNvZGVJbmRleCgpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3B1dF9ieV92YWxfZGly
ZWN0KTsKIAogICAgICAgICBjYXNlIG9wX3B1dF9ieV92YWw6IHsKLSAgICAgICAgICAgIGhhbmRs
ZVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbD4oKSwgY3VycmVudElu
c3RydWN0aW9uLT5zaXplKCkpOworICAgICAgICAgICAgaGFuZGxlUHV0QnlWYWwoY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsPigpLCBuZXh0Qnl0ZWNvZGVJbmRleCgpKTsKICAgICAg
ICAgICAgIE5FWFRfT1BDT0RFKG9wX3B1dF9ieV92YWwpOwogICAgICAgICB9CiAKQEAgLTYwNzEs
NyArNjA3NCw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGlt
aXQpCiAgICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9iYXNlbGluZU1hcCwgbV9p
Y0NvbnRleHRTdGFjaywKICAgICAgICAgICAgICAgICBjdXJyZW50Q29kZU9yaWdpbigpLCBtX2dy
YXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmllck51bWJlcl0pOwogICAgICAgICAgICAgCi0gICAg
ICAgICAgICBoYW5kbGVQdXRCeUlkKGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JZGVudGlmaWVyT3duZWRCeUNvZGVCbG9jayhtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVk
QmxvY2ssIHVpZCksIGlkZW50aWZpZXJOdW1iZXIsIHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBkaXJl
Y3QsIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpLCBieXRlY29kZS5tX2ZsYWdzLmVjbWFNb2Rl
KCkpOworICAgICAgICAgICAgaGFuZGxlUHV0QnlJZChiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV9pbmxpbmVTdGFja1RvcC0+
bV9wcm9maWxlZEJsb2NrLCB1aWQpLCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgcHV0QnlJZFN0
YXR1cywgZGlyZWN0LCBuZXh0Qnl0ZWNvZGVJbmRleCgpLCBieXRlY29kZS5tX2ZsYWdzLmVjbWFN
b2RlKCkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfcHV0X2J5X2lkKTsKICAgICAgICAg
fQogCkBAIC02NjE0LDEzICs2NjE3LDEzIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxv
Y2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2NhbGw6Ci0g
ICAgICAgICAgICBoYW5kbGVDYWxsPE9wQ2FsbD4oY3VycmVudEluc3RydWN0aW9uLCBDYWxsLCBD
YWxsTW9kZTo6UmVndWxhcik7CisgICAgICAgICAgICBoYW5kbGVDYWxsPE9wQ2FsbD4oY3VycmVu
dEluc3RydWN0aW9uLCBDYWxsLCBDYWxsTW9kZTo6UmVndWxhciwgbmV4dEJ5dGVjb2RlSW5kZXgo
KSk7CiAgICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fY3VycmVudEluc3RydWN0aW9u
ID09IGN1cnJlbnRJbnN0cnVjdGlvbiwgImhhbmRsZUNhbGwsIHdoaWNoIG1heSBoYXZlIGlubGlu
ZWQgdGhlIGNhbGxlZSwgdHJhc2hlZCBtX2N1cnJlbnRJbnN0cnVjdGlvbiIpOwogICAgICAgICAg
ICAgTkVYVF9PUENPREUob3BfY2FsbCk7CiAKICAgICAgICAgY2FzZSBvcF90YWlsX2NhbGw6IHsK
ICAgICAgICAgICAgIGZsdXNoRm9yUmV0dXJuKCk7Ci0gICAgICAgICAgICBUZXJtaW5hbGl0eSB0
ZXJtaW5hbGl0eSA9IGhhbmRsZUNhbGw8T3BUYWlsQ2FsbD4oY3VycmVudEluc3RydWN0aW9uLCBU
YWlsQ2FsbCwgQ2FsbE1vZGU6OlRhaWwpOworICAgICAgICAgICAgVGVybWluYWxpdHkgdGVybWlu
YWxpdHkgPSBoYW5kbGVDYWxsPE9wVGFpbENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgVGFpbENh
bGwsIENhbGxNb2RlOjpUYWlsLCBuZXh0Qnl0ZWNvZGVJbmRleCgpKTsKICAgICAgICAgICAgIEFT
U0VSVF9XSVRIX01FU1NBR0UobV9jdXJyZW50SW5zdHJ1Y3Rpb24gPT0gY3VycmVudEluc3RydWN0
aW9uLCAiaGFuZGxlQ2FsbCwgd2hpY2ggbWF5IGhhdmUgaW5saW5lZCB0aGUgY2FsbGVlLCB0cmFz
aGVkIG1fY3VycmVudEluc3RydWN0aW9uIik7CiAgICAgICAgICAgICAvLyBJZiB0aGUgY2FsbCBp
cyB0ZXJtaW5hbCB0aGVuIHdlIHNob3VsZCBub3QgcGFyc2UgYW55IGZ1cnRoZXIgYnl0ZWNvZGVz
IGFzIHRoZSBUYWlsQ2FsbCB3aWxsIGV4aXQgdGhlIGZ1bmN0aW9uLgogICAgICAgICAgICAgLy8g
SWYgdGhlIGNhbGwgaXMgbm90IHRlcm1pbmFsLCBob3dldmVyLCB0aGVuIHdlIHdhbnQgdGhlIHN1
YnNlcXVlbnQgb3BfcmV0L29wX2ptcCB0byB1cGRhdGUgbWV0YWRhdGEgYW5kIGNsZWFuCkBAIC02
NjMzLDcgKzY2MzYsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVk
IGxpbWl0KQogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9jb25zdHJ1Y3Q6Ci0gICAgICAg
ICAgICBoYW5kbGVDYWxsPE9wQ29uc3RydWN0PihjdXJyZW50SW5zdHJ1Y3Rpb24sIENvbnN0cnVj
dCwgQ2FsbE1vZGU6OkNvbnN0cnVjdCk7CisgICAgICAgICAgICBoYW5kbGVDYWxsPE9wQ29uc3Ry
dWN0PihjdXJyZW50SW5zdHJ1Y3Rpb24sIENvbnN0cnVjdCwgQ2FsbE1vZGU6OkNvbnN0cnVjdCwg
bmV4dEJ5dGVjb2RlSW5kZXgoKSk7CiAgICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1f
Y3VycmVudEluc3RydWN0aW9uID09IGN1cnJlbnRJbnN0cnVjdGlvbiwgImhhbmRsZUNhbGwsIHdo
aWNoIG1heSBoYXZlIGlubGluZWQgdGhlIGNhbGxlZSwgdHJhc2hlZCBtX2N1cnJlbnRJbnN0cnVj
dGlvbiIpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY29uc3RydWN0KTsKICAgICAgICAg
ICAgIApAQCAtNjc0Nyw3ICs2NzUwLDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9uZXh0LCBu
ZXh0KTsKIAogICAgICAgICAgICAgICAgIC8vIERvIG91ciBzZXQgbG9jYWxzLiBXZSBkb24ndCB3
YW50IHRvIGV4aXQgYmFja3dhcmRzIHNvIG1vdmUgb3VyIGV4aXQgdG8gdGhlIG5leHQgYnl0ZWNv
ZGUuCi0gICAgICAgICAgICAgICAgbV9jdXJyZW50SW5kZXggPSBCeXRlY29kZUluZGV4KG1fY3Vy
cmVudEluZGV4Lm9mZnNldCgpICsgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpOworICAgICAg
ICAgICAgICAgIG1fY3VycmVudEluZGV4ID0gbmV4dEJ5dGVjb2RlSW5kZXgoKTsKICAgICAgICAg
ICAgICAgICBtX2V4aXRPSyA9IHRydWU7CiAgICAgICAgICAgICAgICAgcHJvY2Vzc1NldExvY2Fs
UXVldWUoKTsKIApAQCAtNjc2Niw3ICs2NzY5LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFy
c2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKCFnZW5lcmF0ZWRDYXNlKTsKIAotICAgICAgICAgICAgICAgIFRl
cm1pbmFsaXR5IHRlcm1pbmFsaXR5ID0gaGFuZGxlQ2FsbDxPcEl0ZXJhdG9yT3Blbj4oY3VycmVu
dEluc3RydWN0aW9uLCBDYWxsLCBDYWxsTW9kZTo6UmVndWxhcik7CisgICAgICAgICAgICAgICAg
VGVybWluYWxpdHkgdGVybWluYWxpdHkgPSBoYW5kbGVDYWxsPE9wSXRlcmF0b3JPcGVuPihjdXJy
ZW50SW5zdHJ1Y3Rpb24sIENhbGwsIENhbGxNb2RlOjpSZWd1bGFyLCBuZXh0Q2hlY2twb2ludCgp
KTsKICAgICAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHRlcm1pbmFsaXR5LCB0ZXJtaW5hbGl0
eSA9PSBOb25UZXJtaW5hbCk7CiAgICAgICAgICAgICAgICAgcHJvZ3Jlc3NUb05leHRDaGVja3Bv
aW50KCk7CiAKQEAgLTY3OTgsNyArNjgwMSw2IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNl
QmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50
aWZpZXJOdW1iZXIgPSBtX2dyYXBoLmlkZW50aWZpZXJzKCkuZW5zdXJlKG5leHRJbXBsKTsKIAog
ICAgICAgICAgICAgICAgICAgICBBY2Nlc3NUeXBlIHR5cGUgPSBBY2Nlc3NUeXBlOjpHZXRCeUlk
OwotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBvcGNvZGVMZW5ndGggPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPnNpemUoKTsKIAogICAgICAgICAgICAgICAgICAgICBHZXRCeVN0YXR1cyBnZXRC
eVN0YXR1cyA9IEdldEJ5U3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICAgICAgICAgICAgICAg
ICAgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLApAQCAtNjgwNiwxMCArNjgwOCwx
MCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAg
ICAgICAgICAgICAgICAgICAgICAgY3VycmVudENvZGVPcmlnaW4oKSk7CiAKIAotICAgICAgICAg
ICAgICAgICAgICBoYW5kbGVHZXRCeUlkKGJ5dGVjb2RlLm1fbmV4dCwgcHJlZGljdGlvbiwgYmFz
ZSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihuZXh0
SW1wbCksIGlkZW50aWZpZXJOdW1iZXIsIGdldEJ5U3RhdHVzLCB0eXBlLCBvcGNvZGVMZW5ndGgp
OworICAgICAgICAgICAgICAgICAgICBoYW5kbGVHZXRCeUlkKGJ5dGVjb2RlLm1fbmV4dCwgcHJl
ZGljdGlvbiwgYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRl
bnRpZmllcihuZXh0SW1wbCksIGlkZW50aWZpZXJOdW1iZXIsIGdldEJ5U3RhdHVzLCB0eXBlLCBu
ZXh0Qnl0ZWNvZGVJbmRleCgpKTsKIAogICAgICAgICAgICAgICAgICAgICAvLyBEbyBvdXIgc2V0
IGxvY2Fscy4gV2UgZG9uJ3Qgd2FudCB0byBydW4gb3VyIGdldF9ieV9pZCBhZ2FpbiBzbyB3ZSBt
b3ZlIHRvIHRoZSBuZXh0IGJ5dGVjb2RlLgotICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRJ
bmRleCA9IEJ5dGVjb2RlSW5kZXgobV9jdXJyZW50SW5kZXgub2Zmc2V0KCkgKyBjdXJyZW50SW5z
dHJ1Y3Rpb24tPnNpemUoKSk7CisgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudEluZGV4ID0g
bmV4dEJ5dGVjb2RlSW5kZXgoKTsKICAgICAgICAgICAgICAgICAgICAgbV9leGl0T0sgPSB0cnVl
OwogICAgICAgICAgICAgICAgICAgICBwcm9jZXNzU2V0TG9jYWxRdWV1ZSgpOwogCkBAIC02ODI0
LDcgKzY4MjYsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxp
bWl0KQogICAgICAgICAgICAgICAgIHNldChieXRlY29kZS5tX2l0ZXJhdG9yLCByZXN1bHQpOwog
ICAgICAgICAgICAgICAgIHNldChieXRlY29kZS5tX25leHQsIHJlc3VsdCk7CiAKLSAgICAgICAg
ICAgICAgICBtX2N1cnJlbnRJbmRleCA9IEJ5dGVjb2RlSW5kZXgobV9jdXJyZW50SW5kZXgub2Zm
c2V0KCkgKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSk7CisgICAgICAgICAgICAgICAgbV9j
dXJyZW50SW5kZXggPSBuZXh0Qnl0ZWNvZGVJbmRleCgpOwogICAgICAgICAgICAgICAgIG1fZXhp
dE9LID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBwcm9jZXNzU2V0TG9jYWxRdWV1ZSgpOwogCkBA
IC02ODc2LDMzICs2ODc4LDI0IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5z
aWduZWQgbGltaXQpCiAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVyZSwg
T3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KGdsb2JhbE9iamVjdC0+YXJyYXlJdGVyYXRv
clN0cnVjdHVyZSgpKSksIGl0ZXJhdG9yKTsKIAogICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sq
IGlzRG9uZUJsb2NrID0gYWxsb2NhdGVVbnRhcmdldGFibGVCbG9jaygpOwotICAgICAgICAgICAg
ICAgIEJhc2ljQmxvY2sqIG5vdERvbmVCbG9jayA9IGFsbG9jYXRlVW50YXJnZXRhYmxlQmxvY2so
KTsKICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBkb0xvYWRCbG9jayA9IGFsbG9jYXRlVW50
YXJnZXRhYmxlQmxvY2soKTsKIAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgTm9kZSogZG9uZUluZGV4ID0ganNDb25zdGFudChqc051bWJlcigtMSkpOwotICAgICAgICAg
ICAgICAgICAgICBOb2RlKiBpbmRleCA9IGFkZFRvR3JhcGgoR2V0SW50ZXJuYWxGaWVsZCwgT3BJ
bmZvKHN0YXRpY19jYXN0PHVpbnQzMl90PihKU0FycmF5SXRlcmF0b3I6OkZpZWxkOjpJbmRleCkp
LCBPcEluZm8oU3BlY0ludDMyT25seSksIGl0ZXJhdG9yKTsKLSAgICAgICAgICAgICAgICAgICAg
Tm9kZSogaXNEb25lID0gYWRkVG9HcmFwaChDb21wYXJlU3RyaWN0RXEsIGluZGV4LCBkb25lSW5k
ZXgpOwotCi0gICAgICAgICAgICAgICAgICAgIEJyYW5jaERhdGEqIGlzRG9uZUJyYW5jaERhdGEg
PSBtX2dyYXBoLm1fYnJhbmNoRGF0YS5hZGQoKTsKLSAgICAgICAgICAgICAgICAgICAgaXNEb25l
QnJhbmNoRGF0YS0+dGFrZW4gPSBCcmFuY2hUYXJnZXQoaXNEb25lQmxvY2spOwotICAgICAgICAg
ICAgICAgICAgICBpc0RvbmVCcmFuY2hEYXRhLT5ub3RUYWtlbiA9IEJyYW5jaFRhcmdldChub3RE
b25lQmxvY2spOwotICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZv
KGlzRG9uZUJyYW5jaERhdGEpLCBpc0RvbmUpOwotICAgICAgICAgICAgICAgIH0KLQogICAgICAg
ICAgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBnZXRBcnJheU1vZGUobWV0YWRhdGEubV9p
dGVyYWJsZVByb2ZpbGUsIEFycmF5OjpSZWFkKTsKICAgICAgICAgICAgICAgICBhdXRvIHByZWRp
Y3Rpb24gPSBnZXRQcmVkaWN0aW9uV2l0aG91dE9TUkV4aXQoQnl0ZWNvZGVJbmRleChtX2N1cnJl
bnRJbmRleC5vZmZzZXQoKSwgT3BJdGVyYXRvck5leHQ6OmdldFZhbHVlKSk7CiAKICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrID0gbm90RG9uZUJs
b2NrOwotICAgICAgICAgICAgICAgICAgICBjbGVhckNhY2hlcygpOworICAgICAgICAgICAgICAg
ICAgICBOb2RlKiBkb25lSW5kZXggPSBqc0NvbnN0YW50KGpzTnVtYmVyKC0xKSk7CisgICAgICAg
ICAgICAgICAgICAgIE5vZGUqIGluZGV4ID0gYWRkVG9HcmFwaChHZXRJbnRlcm5hbEZpZWxkLCBP
cEluZm8oc3RhdGljX2Nhc3Q8dWludDMyX3Q+KEpTQXJyYXlJdGVyYXRvcjo6RmllbGQ6OkluZGV4
KSksIE9wSW5mbyhTcGVjSW50MzJPbmx5KSwgaXRlcmF0b3IpOworICAgICAgICAgICAgICAgICAg
ICBOb2RlKiBpc0RvbmUgPSBhZGRUb0dyYXBoKENvbXBhcmVTdHJpY3RFcSwgaW5kZXgsIGRvbmVJ
bmRleCk7CiAKLSAgICAgICAgICAgICAgICAgICAgTm9kZSogaW5kZXggPSBhZGRUb0dyYXBoKEdl
dEludGVybmFsRmllbGQsIE9wSW5mbyhzdGF0aWNfY2FzdDx1aW50MzJfdD4oSlNBcnJheUl0ZXJh
dG9yOjpGaWVsZDo6SW5kZXgpKSwgT3BJbmZvKFNwZWNJbnQzMk9ubHkpLCBnZXQoYnl0ZWNvZGUu
bV9pdGVyYXRvcikpOwogICAgICAgICAgICAgICAgICAgICBOb2RlKiBpdGVyYWJsZSA9IGdldChi
eXRlY29kZS5tX2l0ZXJhYmxlKTsKICAgICAgICAgICAgICAgICAgICAgTm9kZSogYnV0dGVyZmx5
ID0gYWRkVG9HcmFwaChHZXRCdXR0ZXJmbHksIGl0ZXJhYmxlKTsKICAgICAgICAgICAgICAgICAg
ICAgTm9kZSogbGVuZ3RoID0gYWRkVG9HcmFwaChHZXRBcnJheUxlbmd0aCwgT3BJbmZvKGFycmF5
TW9kZS5hc1dvcmQoKSksIGl0ZXJhYmxlLCBidXR0ZXJmbHkpOwotICAgICAgICAgICAgICAgICAg
ICBOb2RlKiBpc0RvbmUgPSBhZGRUb0dyYXBoKENvbXBhcmVHcmVhdGVyRXEsIEVkZ2UoaW5kZXgs
IEludDMyVXNlKSwgRWRnZShsZW5ndGgsIEludDMyVXNlKSk7Ci0gICAgICAgICAgICAgICAgICAg
IG1fZXhpdE9LID0gdHJ1ZTsgLy8gVGhlIGFib3ZlIGNvbXBhcmUgZG9lc24ndCBwcm9kdWNlIGVm
ZmVjdHMgc2luY2Ugd2Uga25vdyBpbmRleCBhbmQgbGVuZ3RoIGFyZSBpbnQzMnMuCisgICAgICAg
ICAgICAgICAgICAgIE5vZGUqIGlzT3V0T2ZCb3VuZHMgPSBhZGRUb0dyYXBoKENvbXBhcmVHcmVh
dGVyRXEsIEVkZ2UoaW5kZXgsIEludDMyVXNlKSwgRWRnZShsZW5ndGgsIEludDMyVXNlKSk7CisK
KyAgICAgICAgICAgICAgICAgICAgaXNEb25lID0gYWRkVG9HcmFwaChBcml0aEJpdE9yLCBpc0Rv
bmUsIGlzT3V0T2ZCb3VuZHMpOworICAgICAgICAgICAgICAgICAgICAvLyBUaGUgYWJvdmUgY29t
cGFyZSBkb2Vzbid0IHByb2R1Y2UgZWZmZWN0cyBzaW5jZSB3ZSBrbm93IHRoZSB2YWx1ZXMgYXJl
IGJvb2xlYW5zLiBXZSBkb24ndCBzZXQgVXNlS2luZHMgYmVjYXVzZSBGaXh1cCBsaWtlcyB0byBh
ZGQgZWRnZXMuCisgICAgICAgICAgICAgICAgICAgIG1fZXhpdE9LID0gdHJ1ZTsKICAgICAgICAg
ICAgICAgICAgICAgYWRkVG9HcmFwaChFeGl0T0spOwogCiAgICAgICAgICAgICAgICAgICAgIEJy
YW5jaERhdGEqIGJyYW5jaERhdGEgPSBtX2dyYXBoLm1fYnJhbmNoRGF0YS5hZGQoKTsKQEAgLTY5
MzIsNyArNjkyNSw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQg
bGltaXQpCiAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUHV0SW50ZXJuYWxGaWVsZCwg
T3BJbmZvKHN0YXRpY19jYXN0PHVpbnQzMl90PihKU0FycmF5SXRlcmF0b3I6OkZpZWxkOjpJbmRl
eCkpLCBnZXQoYnl0ZWNvZGUubV9pdGVyYXRvciksIG5ld0luZGV4KTsKIAogICAgICAgICAgICAg
ICAgICAgICAvLyBEbyBvdXIgc2V0IGxvY2Fscy4gV2UgZG9uJ3Qgd2FudCB0byBydW4gb3VyIGdl
dEJ5VmFsIGFnYWluIHNvIHdlIG1vdmUgdG8gdGhlIG5leHQgYnl0ZWNvZGUuCi0gICAgICAgICAg
ICAgICAgICAgIG1fY3VycmVudEluZGV4ID0gQnl0ZWNvZGVJbmRleChtX2N1cnJlbnRJbmRleC5v
ZmZzZXQoKSArIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgbV9jdXJyZW50SW5kZXggPSBuZXh0Qnl0ZWNvZGVJbmRleCgpOwogICAgICAgICAgICAgICAg
ICAgICBtX2V4aXRPSyA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NTZXRMb2Nh
bFF1ZXVlKCk7CiAKQEAgLTY5NTQsNyArNjk0Nyw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBh
cnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgo
UHV0SW50ZXJuYWxGaWVsZCwgT3BJbmZvKHN0YXRpY19jYXN0PHVpbnQzMl90PihKU0FycmF5SXRl
cmF0b3I6OkZpZWxkOjpJbmRleCkpLCBnZXQoYnl0ZWNvZGUubV9pdGVyYXRvciksIGRvbmVJbmRl
eCk7CiAKICAgICAgICAgICAgICAgICAgICAgLy8gRG8gb3VyIHNldCBsb2NhbHMuIFdlIGRvbid0
IHdhbnQgdG8gcnVuIHRoaXMgYWdhaW4gc28gd2UgaGF2ZSB0byBtb3ZlIHRoZSBleGl0IG9yaWdp
biBmb3J3YXJkLgotICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRJbmRleCA9IEJ5dGVjb2Rl
SW5kZXgobV9jdXJyZW50SW5kZXgub2Zmc2V0KCkgKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUo
KSk7CisgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudEluZGV4ID0gbmV4dEJ5dGVjb2RlSW5k
ZXgoKTsKICAgICAgICAgICAgICAgICAgICAgbV9leGl0T0sgPSB0cnVlOwogICAgICAgICAgICAg
ICAgICAgICBwcm9jZXNzU2V0TG9jYWxRdWV1ZSgpOwogCkBAIC02OTczLDcgKzY5NjYsNyBAQCB2
b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAg
ICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWdlbmVyYXRlZENhc2Up
OwogCi0gICAgICAgICAgICAgICAgVGVybWluYWxpdHkgdGVybWluYWxpdHkgPSBoYW5kbGVDYWxs
PE9wSXRlcmF0b3JOZXh0PihjdXJyZW50SW5zdHJ1Y3Rpb24sIENhbGwsIENhbGxNb2RlOjpSZWd1
bGFyKTsKKyAgICAgICAgICAgICAgICBUZXJtaW5hbGl0eSB0ZXJtaW5hbGl0eSA9IGhhbmRsZUNh
bGw8T3BJdGVyYXRvck5leHQ+KGN1cnJlbnRJbnN0cnVjdGlvbiwgQ2FsbCwgQ2FsbE1vZGU6OlJl
Z3VsYXIsIG5leHRDaGVja3BvaW50KCkpOwogICAgICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQo
dGVybWluYWxpdHksIHRlcm1pbmFsaXR5ID09IE5vblRlcm1pbmFsKTsKICAgICAgICAgICAgICAg
ICBwcm9ncmVzc1RvTmV4dENoZWNrcG9pbnQoKTsKIApAQCAtNzAwMCw3ICs2OTkzLDcgQEAgdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAg
ICAgICAgICAgZmx1c2hGb3JUZXJtaW5hbCgpOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgICAgIGF1dG8gdmFsdWVQcmVkaWNpdGlvbiA9IGdldFByZWRpY3Rpb25XaXRob3V0T1NS
RXhpdChCeXRlY29kZUluZGV4KG1fY3VycmVudEluZGV4Lm9mZnNldCgpLCBPcEl0ZXJhdG9yTmV4
dDo6Z2V0VmFsdWUpKTsKKyAgICAgICAgICAgICAgICBhdXRvIHZhbHVlUHJlZGljaXRpb24gPSBn
ZXRQcmVkaWN0aW9uV2l0aG91dE9TUkV4aXQobV9jdXJyZW50SW5kZXgud2l0aENoZWNrcG9pbnQo
T3BJdGVyYXRvck5leHQ6OmdldFZhbHVlKSk7CiAKICAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgICAgIG1fZXhpdE9LID0gdHJ1ZTsKQEAgLTcwMTQsMTQgKzcwMDcsMTMgQEAgdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG1fZ3JhcGguaWRlbnRpZmllcnMo
KS5lbnN1cmUoZG9uZUltcGwpOwogCiAgICAgICAgICAgICAgICAgICAgIEFjY2Vzc1R5cGUgdHlw
ZSA9IEFjY2Vzc1R5cGU6OkdldEJ5SWQ7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9w
Y29kZUxlbmd0aCA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpOwogCiAgICAgICAgICAgICAg
ICAgICAgIEdldEJ5U3RhdHVzIGdldEJ5U3RhdHVzID0gR2V0QnlTdGF0dXM6OmNvbXB1dGVGb3Io
CiAgICAgICAgICAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxv
Y2ssCiAgICAgICAgICAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2Jhc2VsaW5l
TWFwLCBtX2ljQ29udGV4dFN0YWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudENv
ZGVPcmlnaW4oKSk7CiAKLSAgICAgICAgICAgICAgICAgICAgaGFuZGxlR2V0QnlJZChieXRlY29k
ZS5tX2RvbmUsIHByZWRpY3Rpb24sIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0ZUZy
b21JbW1vcnRhbElkZW50aWZpZXIoZG9uZUltcGwpLCBpZGVudGlmaWVyTnVtYmVyLCBnZXRCeVN0
YXR1cywgdHlwZSwgb3Bjb2RlTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlR2V0
QnlJZChieXRlY29kZS5tX2RvbmUsIHByZWRpY3Rpb24sIGJhc2UsIENhY2hlYWJsZUlkZW50aWZp
ZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIoZG9uZUltcGwpLCBpZGVudGlmaWVyTnVt
YmVyLCBnZXRCeVN0YXR1cywgdHlwZSwgbmV4dENoZWNrcG9pbnQoKSk7CiAgICAgICAgICAgICAg
ICAgICAgIC8vIFNldCBhIHZhbHVlIGZvciBtX3ZhbHVlIHNvIHdlIGRvbid0IGV4aXQgb24gaXQg
ZGlmZmVyaW5nIGZyb20gd2hhdCB3ZSBleHBlY3RlZC4KICAgICAgICAgICAgICAgICAgICAgc2V0
KGJ5dGVjb2RlLm1fdmFsdWUsIGJvdHRvbVZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgcHJv
Z3Jlc3NUb05leHRDaGVja3BvaW50KCk7CkBAIC03MDQxLDE1ICs3MDMzLDE4IEBAIHZvaWQgQnl0
ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBtX2dyYXBoLmlkZW50aWZpZXJzKCkuZW5z
dXJlKHZhbHVlSW1wbCk7CiAKICAgICAgICAgICAgICAgICAgICAgQWNjZXNzVHlwZSB0eXBlID0g
QWNjZXNzVHlwZTo6R2V0QnlJZDsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgb3Bjb2Rl
TGVuZ3RoID0gY3VycmVudEluc3RydWN0aW9uLT5zaXplKCk7CiAKICAgICAgICAgICAgICAgICAg
ICAgR2V0QnlTdGF0dXMgZ2V0QnlTdGF0dXMgPSBHZXRCeVN0YXR1czo6Y29tcHV0ZUZvcigKICAg
ICAgICAgICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywK
ICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fYmFzZWxpbmVNYXAs
IG1faWNDb250ZXh0U3RhY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q29kZU9y
aWdpbigpKTsKIAotICAgICAgICAgICAgICAgICAgICBoYW5kbGVHZXRCeUlkKGJ5dGVjb2RlLm1f
dmFsdWUsIHZhbHVlUHJlZGljaXRpb24sIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXI6OmNyZWF0
ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodmFsdWVJbXBsKSwgaWRlbnRpZmllck51bWJlciwgZ2V0
QnlTdGF0dXMsIHR5cGUsIG9wY29kZUxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgICAgIHByb2dy
ZXNzVG9OZXh0Q2hlY2twb2ludCgpOworICAgICAgICAgICAgICAgICAgICBoYW5kbGVHZXRCeUlk
KGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVlUHJlZGljaXRpb24sIGJhc2UsIENhY2hlYWJsZUlkZW50
aWZpZXI6OmNyZWF0ZUZyb21JbW1vcnRhbElkZW50aWZpZXIodmFsdWVJbXBsKSwgaWRlbnRpZmll
ck51bWJlciwgZ2V0QnlTdGF0dXMsIHR5cGUsIG5leHRCeXRlY29kZUluZGV4KCkpOworCisgICAg
ICAgICAgICAgICAgICAgIC8vIFdlJ3JlIGRvbmUsIGV4aXQgZm9yd2FyZHMuCisgICAgICAgICAg
ICAgICAgICAgIG1fY3VycmVudEluZGV4ID0gbmV4dEJ5dGVjb2RlSW5kZXgoKTsKKyAgICAgICAg
ICAgICAgICAgICAgbV9leGl0T0sgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBwcm9jZXNz
U2V0TG9jYWxRdWV1ZSgpOwogCiAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoSnVtcCwg
T3BJbmZvKGNvbnRpbnVhdGlvbikpOwogICAgICAgICAgICAgICAgIH0KQEAgLTgxNDEsNyArODEz
Niw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQ29kZUJsb2NrKCkKIH0KIAogdGVtcGxh
dGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgotdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlW
YWwoQnl0ZWNvZGUgYnl0ZWNvZGUsIHVuc2lnbmVkIGluc3RydWN0aW9uU2l6ZSkKK3ZvaWQgQnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5VmFsKEJ5dGVjb2RlIGJ5dGVjb2RlLCBCeXRlY29kZUlu
ZGV4IG9zckV4aXRJbmRleCkKIHsKICAgICBOb2RlKiBiYXNlID0gZ2V0KGJ5dGVjb2RlLm1fYmFz
ZSk7CiAgICAgTm9kZSogcHJvcGVydHkgPSBnZXQoYnl0ZWNvZGUubV9wcm9wZXJ0eSk7CkBAIC04
MTg2LDcgKzgxODEsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeVZhbChCeXRl
Y29kZSBieXRlY29kZSwgdW5zaWduZWQgaW5zdHJ1Y3Rpb25TaXplKQogICAgICAgICB9CiAKICAg
ICAgICAgaWYgKGNvbXBpbGVkQXNQdXRCeUlkKQotICAgICAgICAgICAgaGFuZGxlUHV0QnlJZChi
YXNlLCBpZGVudGlmaWVyLCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywg
aXNEaXJlY3QsIGluc3RydWN0aW9uU2l6ZSwgYnl0ZWNvZGUubV9lY21hTW9kZSk7CisgICAgICAg
ICAgICBoYW5kbGVQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXIsIGlkZW50aWZpZXJOdW1iZXIsIHZh
bHVlLCBwdXRCeUlkU3RhdHVzLCBpc0RpcmVjdCwgb3NyRXhpdEluZGV4LCBieXRlY29kZS5tX2Vj
bWFNb2RlKTsKICAgICB9CiAKICAgICBpZiAoIWNvbXBpbGVkQXNQdXRCeUlkKSB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAppbmRleCAwMWUzN2ZhZGNiMmYyMDI0YTMwMTc5OTVm
YmQ1MjkzMjhmMGI1MzI5Li4wODA0ZTRkYWUxZTliODgyNzFiNWY1ODQ5YzliOTk0NWQ3N2U5NDFl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKQEAgLTQyOCw2ICs0MjgsMTIg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24q
IGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0MKIAogCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKKworICAgIEdQUlJlZyBpdGVyYXRvckdQUiA9IHJlZ1QwOworICAgIEp1bXBMaXN0IG5vdE9i
amVjdDsKKyAgICBub3RPYmplY3QuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChpdGVyYXRvckdQUikp
OworICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3QoaXRlcmF0b3JHUFIpKTsK
KwogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck9wZW4+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIG5leHRWUmVnID0gYnl0ZWNvZGUubV9uZXh0OwogICAgIFVu
aXF1ZWRTdHJpbmdJbXBsKiBpZGVudCA9IHZtKCkucHJvcGVydHlOYW1lcy0+bmV4dC5pbXBsKCk7
CkBAIC00MzYsOSArNDQyLDE0IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVu
KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDCiAgICAgCiAgICAg
TGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3Bl
cmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRp
b25HZXRCeUlkT3B0aW1pemUsIG5leHRWUmVnLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIGdlbi5zdHViSW5mbygpLCByZWdUMCwgQ2FjaGVhYmxlSWRlbnRpZmll
cjo6Y3JlYXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcihpZGVudCkucmF3Qml0cygpKTsKLQorICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgbmV4dFZSZWcsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgZ2VuLnN0dWJJbmZvKCksIGl0ZXJh
dG9yR1BSLCBDYWNoZWFibGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSW1tb3J0YWxJZGVudGlmaWVy
KGlkZW50KS5yYXdCaXRzKCkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhC
ZWdpbiwgY2FsbCk7CisgICAgYXV0byBkb25lID0ganVtcCgpOworCisgICAgbm90T2JqZWN0Lmxp
bmsodGhpcyk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0
SXNOb3RPYmplY3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7
CisKKyAgICBkb25lLmxpbmsodGhpcyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9y
X25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKaW5kZXggZmZkNmI1ZTExNWI2ZmQ5ZWI1
ZTZiODk4MjhkYmQ3ZmU5NmJjYTlkMC4uYWIyMjcxZjJjMDlmMDJkNzVjZTliMzY0ODVmMmU4YmZk
NGMxYzhmZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xv
d1BhdGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0
aHMuY3BwCkBAIC04NDUsNiArODQ1LDkgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRo
X2l0ZXJhdG9yX29wZW5fZ2V0X25leHQpCiAgICAgSlNWYWx1ZSBpdGVyYXRvciA9IGdldE9wZXJh
bmQoY2FsbEZyYW1lLCBieXRlY29kZS5tX2l0ZXJhdG9yKTsKICAgICBSZWdpc3RlciYgbmV4dFJl
Z2lzdGVyID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fbmV4dCk7CiAKKyAgICBp
ZiAoIWl0ZXJhdG9yLmlzT2JqZWN0KCkpCisgICAgICAgIExMSU5UX1RIUk9XKGNyZWF0ZVR5cGVF
cnJvcihnbG9iYWxPYmplY3QsICJJdGVyYXRvciByZXN1bHQgaW50ZXJmYWNlIGlzIG5vdCBhbiBv
YmplY3QuIl9zKSk7CisKICAgICBKU1ZhbHVlIHJlc3VsdCA9IHBlcmZvcm1MTEludEdldEJ5SUQo
cGMsIGNvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBpdGVyYXRvciwgdm0ucHJvcGVydHlOYW1lcy0+
bmV4dCwgbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEpOwogICAgIExMSU5UX0NIRUNLX0VYQ0VQVElP
TigpOwogICAgIG5leHRSZWdpc3RlciA9IHJlc3VsdDsKQEAgLTIwODksOSArMjA5MiwxMyBAQCBz
dGF0aWMgdm9pZCBoYW5kbGVJdGVyYXRvck5leHRDaGVja3BvaW50KFZNJiB2bSwgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUsIEpTR2xvYmFsTwogICAgIGF1dG8mIHZhbHVlUmVnaXN0ZXIgPSBjYWxsRnJh
bWUtPnVuY2hlY2tlZFIoYnl0ZWNvZGUubV92YWx1ZSk7CiAgICAgYXV0byBpdGVyYXRvclJlc3Vs
dE9iamVjdCA9IHNpZGVTdGF0ZS50bXBzW09wSXRlcmF0b3JOZXh0OjpuZXh0UmVzdWx0XTsKICAg
ICBhdXRvIG5leHQgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYnl0ZWNvZGUubV9uZXh0KS5qc1Zh
bHVlKCk7ICAgIAotCiAgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKG5leHQsICJXZSBz
aG91bGQgbm90IE9TUiBleGl0IHRvIGEgY2hlY2twb2ludCBmb3IgZmFzdCBjYXNlcy4iKTsKIAor
ICAgIGlmICghaXRlcmF0b3JSZXN1bHRPYmplY3QuaXNPYmplY3QoKSkgeworICAgICAgICB0aHJv
d1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJJdGVyYXRvciByZXN1bHQgaW50ZXJm
YWNlIGlzIG5vdCBhbiBvYmplY3QuIl9zKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAg
IGF1dG8mIGRvbmVSZWdpc3RlciA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29kZS5tX2Rv
bmUpOwogICAgIGlmIChjaGVja3BvaW50SW5kZXggPT0gT3BJdGVyYXRvck5leHQ6OmdldERvbmUp
IHsKICAgICAgICAgZG9uZVJlZ2lzdGVyID0gaXRlcmF0b3JSZXN1bHRPYmplY3QuZ2V0KGdsb2Jh
bE9iamVjdCwgdm0ucHJvcGVydHlOYW1lcy0+ZG9uZSk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL0No
YW5nZUxvZyBiL0pTVGVzdHMvQ2hhbmdlTG9nCmluZGV4IDExMWRhM2Q2ZjBkYWMxODY2YWY2ZGNh
ZGE0NzIzNzhiMDhkYzdmNDAuLmY4MDExOGNkMGZmZmM0MzdhOGRiMzc2NGVjZTZhYThhZGUwYzM1
NDMgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvQ2hhbmdlTG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMzMgQEAKKzIwMjAtMDQtMjIgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxl
ckBhcHBsZS5jb20+CisKKyAgICAgICAgRml4IE9TUiBleGl0aW5nL2l0ZXJhdG9yIG9iamVjdCBj
aGVja3MgaW4gZm9yLW9mIGJ5dGVjb2RlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjEwODgyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBzdHJlc3MvZm9yLW9mLWl0ZXJhdG9yLW5leHQtb3NyLWF0LWlu
bGluZWQtcmV0dXJuLW5vbi1vYmplY3QuanM6IEFkZGVkLgorICAgICAgICAodmVuZE5leHQpOgor
ICAgICAgICAodGVzdCk6CisgICAgICAgIChjYXRjaCk6CisgICAgICAgICogc3RyZXNzL2Zvci1v
Zi1pdGVyYXRvci1uZXh0LW9zci1hdC1uZXh0LXNldC1sb2NhbC5qczogQWRkZWQuCisgICAgICAg
ICh2ZW5kTmV4dCk6CisgICAgICAgICh0ZXN0KToKKyAgICAgICAgKGNhdGNoKToKKyAgICAgICAg
KiBzdHJlc3MvZm9yLW9mLWl0ZXJhdG9yLW9wZW4tb3NyLWF0LWlubGluZWQtcmV0dXJuLW5vbi1v
YmplY3QuanM6IEFkZGVkLgorICAgICAgICAodmVuZEl0ZXJhdG9yKToKKyAgICAgICAgKHRlc3Qp
OgorICAgICAgICAoY2F0Y2gpOgorICAgICAgICAqIHN0cmVzcy9mb3Itb2YtaXRlcmF0b3Itb3Bl
bi1vc3ItYXQtaXRlcmF0b3Itc2V0LWxvY2FsLmpzOiBBZGRlZC4KKyAgICAgICAgKHZlbmRJdGVy
YXRvcik6CisgICAgICAgICh0ZXN0KToKKyAgICAgICAgKGNhdGNoKToKKyAgICAgICAgKiBzdHJl
c3MvZm9yLW9mLWl0ZXJhdG9yLW9wZW4tcmV0dXJuLW5vbi1vYmplY3QuanM6IEFkZGVkLgorICAg
ICAgICAodmVuZEl0ZXJhdG9yKToKKyAgICAgICAgKHRlc3QpOgorICAgICAgICAoaS5jYXRjaCk6
CisgICAgICAgICogc3RyZXNzL3Rlc3QtZm9yLW9mLWNmZy1zaW1wbGljYXRpb24tZXhpdC1vay5q
czogQWRkZWQuCisgICAgICAgICh6Ll9fcHJvdG9fXyk6CisKIDIwMjAtMDQtMjEgIFl1c3VrZSBT
dXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBNb3ZlIHZhbHVlLXBvdy1haS1y
dWxlLXNob3VsZC1ib3gtdGhlLXNhbWUtd2F5LWFzLXRoZS1ydW50aW1lLmpzIHRvIEpTVGVzdHMv
c3RyZXNzLwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3MvZm9yLW9mLWl0ZXJhdG9yLW5leHQt
b3NyLWF0LWlubGluZWQtcmV0dXJuLW5vbi1vYmplY3QuanMgYi9KU1Rlc3RzL3N0cmVzcy9mb3It
b2YtaXRlcmF0b3ItbmV4dC1vc3ItYXQtaW5saW5lZC1yZXR1cm4tbm9uLW9iamVjdC5qcwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4yMjdmMmUxMTZkYWQ5ZDAyNDhkNjVmZjlhYmUyOTA0YzY2ZmY0NjllCi0tLSAvZGV2
L251bGwKKysrIGIvSlNUZXN0cy9zdHJlc3MvZm9yLW9mLWl0ZXJhdG9yLW5leHQtb3NyLWF0LWlu
bGluZWQtcmV0dXJuLW5vbi1vYmplY3QuanMKQEAgLTAsMCArMSwzNCBAQAorbGV0IHNob3VsZFZl
bmROdWxsID0gZmFsc2U7CitmdW5jdGlvbiB2ZW5kTmV4dCgpIHsKKyAgICBpZiAoc2hvdWxkVmVu
ZE51bGwpCisgICAgICAgIHJldHVybiAxOworICAgIHJldHVybiB7IGRvbmU6IHRydWUgfTsKK30K
K25vSW5saW5lKHZlbmROZXh0KTsKKworLy8gUGFzcyBzaG91bGRWZW5kTnVsbCBhcyBwYXJhbSBz
byB3ZSBkb24ndCBPU1Igd2hlbiBpdCBiZWNvbWVzIHRydWUuCitmdW5jdGlvbiB0ZXN0KHNob3Vs
ZFZlbmROdWxsKSB7CisgICAgbGV0IGl0ZXJhYmxlID0geworICAgICAgICBbU3ltYm9sLml0ZXJh
dG9yXSgpIHsgcmV0dXJuIHRoaXM7IH0sCisgICAgICAgIG5leHQoKSB7IHJldHVybiB2ZW5kTmV4
dCgpOyB9CisgICAgfQorICAgIGZvciAobGV0IG8gb2YgaXRlcmFibGUpCisgICAgICAgIHRocm93
IG5ldyBFcnJvcigpOworICAgIGlmIChzaG91bGRWZW5kTnVsbCkKKyAgICAgICAgdGhyb3cgbmV3
IEVycm9yKCk7Cit9Citub0lubGluZSh0ZXN0KTsKKworZm9yIChsZXQgaSA9IDA7IGkgPCAxZTU7
ICsraSkKKyAgICB0ZXN0KCk7CisKK3Nob3VsZFZlbmROdWxsID0gdHJ1ZTsKK2xldCBlcnJvcjsK
K3RyeSB7CisgICAgdGVzdCh0cnVlKTsKK30gY2F0Y2ggKGUpIHsKKyAgICBlcnJvciA9IGU7Cit9
CisKK2lmIChlcnJvciAhPSAiVHlwZUVycm9yOiBJdGVyYXRvciByZXN1bHQgaW50ZXJmYWNlIGlz
IG5vdCBhbiBvYmplY3QuIikKKyAgICB0aHJvdyBlcnJvcjsKZGlmZiAtLWdpdCBhL0pTVGVzdHMv
c3RyZXNzL2Zvci1vZi1pdGVyYXRvci1uZXh0LW9zci1hdC1uZXh0LXNldC1sb2NhbC5qcyBiL0pT
VGVzdHMvc3RyZXNzL2Zvci1vZi1pdGVyYXRvci1uZXh0LW9zci1hdC1uZXh0LXNldC1sb2NhbC5q
cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5iOTgzNGUyNWVhZDYxZmI0NmI1M2U3NGJiZDVjZDE0OGFlZjc2NTlhCi0t
LSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9zdHJlc3MvZm9yLW9mLWl0ZXJhdG9yLW5leHQtb3Ny
LWF0LW5leHQtc2V0LWxvY2FsLmpzCkBAIC0wLDAgKzEsMzQgQEAKK2xldCBzaG91bGRWZW5kTnVs
bCA9IGZhbHNlOworZnVuY3Rpb24gdmVuZE5leHQoKSB7CisgICAgaWYgKHNob3VsZFZlbmROdWxs
KQorICAgICAgICByZXR1cm4gMTsKKyAgICByZXR1cm4geyBkb25lOiB0cnVlIH07Cit9Citub0lu
bGluZSh2ZW5kTmV4dCk7CisKKy8vIFBhc3Mgc2hvdWxkVmVuZE51bGwgYXMgcGFyYW0gc28gd2Ug
ZG9uJ3QgT1NSIHdoZW4gaXQgYmVjb21lcyB0cnVlLgorZnVuY3Rpb24gdGVzdChzaG91bGRWZW5k
TnVsbCkgeworICAgIGxldCBpdGVyYWJsZSA9IHsKKyAgICAgICAgW1N5bWJvbC5pdGVyYXRvcl0o
KSB7IHJldHVybiB0aGlzOyB9LAorICAgICAgICBuZXh0OiB2ZW5kTmV4dCwKKyAgICB9CisgICAg
Zm9yIChsZXQgbyBvZiBpdGVyYWJsZSkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7CisgICAg
aWYgKHNob3VsZFZlbmROdWxsKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTsKK30KK25vSW5s
aW5lKHRlc3QpOworCitmb3IgKGxldCBpID0gMDsgaSA8IDFlNTsgKytpKQorICAgIHRlc3QoKTsK
Kworc2hvdWxkVmVuZE51bGwgPSB0cnVlOworbGV0IGVycm9yOwordHJ5IHsKKyAgICB0ZXN0KHRy
dWUpOworfSBjYXRjaCAoZSkgeworICAgIGVycm9yID0gZTsKK30KKworaWYgKGVycm9yICE9ICJU
eXBlRXJyb3I6IEl0ZXJhdG9yIHJlc3VsdCBpbnRlcmZhY2UgaXMgbm90IGFuIG9iamVjdC4iKQor
ICAgIHRocm93IGVycm9yOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3MvZm9yLW9mLWl0ZXJh
dG9yLW9wZW4tb3NyLWF0LWlubGluZWQtcmV0dXJuLW5vbi1vYmplY3QuanMgYi9KU1Rlc3RzL3N0
cmVzcy9mb3Itb2YtaXRlcmF0b3Itb3Blbi1vc3ItYXQtaW5saW5lZC1yZXR1cm4tbm9uLW9iamVj
dC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4yMTg5N2ZiY2ViMWVkNWY1NDdkMzg0Nzc2MGQ1Y2MzMjMxMGQwZjk0
Ci0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9zdHJlc3MvZm9yLW9mLWl0ZXJhdG9yLW9wZW4t
b3NyLWF0LWlubGluZWQtcmV0dXJuLW5vbi1vYmplY3QuanMKQEAgLTAsMCArMSwzNCBAQAorbGV0
IHNob3VsZFZlbmROdWxsID0gZmFsc2U7CitmdW5jdGlvbiB2ZW5kSXRlcmF0b3IoKSB7CisgICAg
aWYgKHNob3VsZFZlbmROdWxsKQorICAgICAgICByZXR1cm4gMTsKKyAgICByZXR1cm4gdGhpczsK
K30KK25vSW5saW5lKHZlbmRJdGVyYXRvcik7CisKKy8vIFBhc3Mgc2hvdWxkVmVuZE51bGwgYXMg
cGFyYW0gc28gd2UgZG9uJ3QgT1NSIHdoZW4gaXQgYmVjb21lcyB0cnVlLgorZnVuY3Rpb24gdGVz
dChzaG91bGRWZW5kTnVsbCkgeworICAgIGxldCBpdGVyYWJsZSA9IHsKKyAgICAgICAgW1N5bWJv
bC5pdGVyYXRvcl0oKSB7IHJldHVybiB2ZW5kSXRlcmF0b3IuY2FsbCh0aGlzKSB9LAorICAgICAg
ICBuZXh0KCkgeyByZXR1cm4geyBkb25lOiB0cnVlIH07IH0KKyAgICB9CisgICAgZm9yIChsZXQg
byBvZiBpdGVyYWJsZSkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7CisgICAgaWYgKHNob3Vs
ZFZlbmROdWxsKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTsKK30KK25vSW5saW5lKHRlc3Qp
OworCitmb3IgKGxldCBpID0gMDsgaSA8IDFlNTsgKytpKQorICAgIHRlc3QoKTsKKworc2hvdWxk
VmVuZE51bGwgPSB0cnVlOworbGV0IGVycm9yOwordHJ5IHsKKyAgICB0ZXN0KHRydWUpOworfSBj
YXRjaCAoZSkgeworICAgIGVycm9yID0gZTsKK30KKworaWYgKGVycm9yICE9ICJUeXBlRXJyb3I6
IEl0ZXJhdG9yIHJlc3VsdCBpbnRlcmZhY2UgaXMgbm90IGFuIG9iamVjdC4iKQorICAgIHRocm93
IG5ldyBFcnJvcigpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3MvZm9yLW9mLWl0ZXJhdG9y
LW9wZW4tb3NyLWF0LWl0ZXJhdG9yLXNldC1sb2NhbC5qcyBiL0pTVGVzdHMvc3RyZXNzL2Zvci1v
Zi1pdGVyYXRvci1vcGVuLW9zci1hdC1pdGVyYXRvci1zZXQtbG9jYWwuanMKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YmMzY2Y3ZjExZDUzNGE0ODYzYzIzMmFmY2EyOTYyMjRjODIwYWQyMQotLS0gL2Rldi9udWxsCisr
KyBiL0pTVGVzdHMvc3RyZXNzL2Zvci1vZi1pdGVyYXRvci1vcGVuLW9zci1hdC1pdGVyYXRvci1z
ZXQtbG9jYWwuanMKQEAgLTAsMCArMSwzNCBAQAorbGV0IHNob3VsZFZlbmROdWxsID0gZmFsc2U7
CitmdW5jdGlvbiB2ZW5kSXRlcmF0b3IoKSB7CisgICAgaWYgKHNob3VsZFZlbmROdWxsKQorICAg
ICAgICByZXR1cm4gMTsKKyAgICByZXR1cm4gdGhpczsKK30KK25vSW5saW5lKHZlbmRJdGVyYXRv
cik7CisKKy8vIFBhc3Mgc2hvdWxkVmVuZE51bGwgYXMgcGFyYW0gc28gd2UgZG9uJ3QgT1NSIHdo
ZW4gaXQgYmVjb21lcyB0cnVlLgorZnVuY3Rpb24gdGVzdChzaG91bGRWZW5kTnVsbCkgeworICAg
IGxldCBpdGVyYWJsZSA9IHsKKyAgICAgICAgW1N5bWJvbC5pdGVyYXRvcl06IHZlbmRJdGVyYXRv
ciwKKyAgICAgICAgbmV4dCgpIHsgcmV0dXJuIHsgZG9uZTogdHJ1ZSB9OyB9CisgICAgfQorICAg
IGZvciAobGV0IG8gb2YgaXRlcmFibGUpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigpOworICAg
IGlmIChzaG91bGRWZW5kTnVsbCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7Cit9Citub0lu
bGluZSh0ZXN0KTsKKworZm9yIChsZXQgaSA9IDA7IGkgPCAxZTU7ICsraSkKKyAgICB0ZXN0KCk7
CisKK3Nob3VsZFZlbmROdWxsID0gdHJ1ZTsKK2xldCBlcnJvcjsKK3RyeSB7CisgICAgdGVzdCh0
cnVlKTsKK30gY2F0Y2ggKGUpIHsKKyAgICBlcnJvciA9IGU7Cit9CisKK2lmIChlcnJvciAhPSAi
VHlwZUVycm9yOiBJdGVyYXRvciByZXN1bHQgaW50ZXJmYWNlIGlzIG5vdCBhbiBvYmplY3QuIikK
KyAgICB0aHJvdyBuZXcgRXJyb3IoKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2Zvci1v
Zi1pdGVyYXRvci1vcGVuLXJldHVybi1ub24tb2JqZWN0LmpzIGIvSlNUZXN0cy9zdHJlc3MvZm9y
LW9mLWl0ZXJhdG9yLW9wZW4tcmV0dXJuLW5vbi1vYmplY3QuanMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTZmMzlj
YzM0M2ViOThhZWUzMDYyZGUxY2ZlYzRlYjFiNjQyOTY3YwotLS0gL2Rldi9udWxsCisrKyBiL0pT
VGVzdHMvc3RyZXNzL2Zvci1vZi1pdGVyYXRvci1vcGVuLXJldHVybi1ub24tb2JqZWN0LmpzCkBA
IC0wLDAgKzEsMjYgQEAKK2Z1bmN0aW9uIHZlbmRJdGVyYXRvcigpIHsKKyAgICByZXR1cm4gMTsK
K30KK25vSW5saW5lKHZlbmRJdGVyYXRvcik7CisKK2Z1bmN0aW9uIHRlc3QoKSB7CisgICAgbGV0
IGl0ZXJhYmxlID0geworICAgICAgICBbU3ltYm9sLml0ZXJhdG9yXSgpIHsgcmV0dXJuIHZlbmRJ
dGVyYXRvcigpOyB9LAorICAgICAgICBuZXh0KCkgeyByZXR1cm4geyBkb25lOiB0cnVlIH07IH0K
KyAgICB9CisgICAgZm9yIChsZXQgbyBvZiBpdGVyYWJsZSkKKyAgICAgICAgdGhyb3cgbmV3IEVy
cm9yKCk7CisgICAgdGhyb3cgbmV3IEVycm9yKCk7Cit9Citub0lubGluZSh0ZXN0KTsKKworZm9y
IChsZXQgaSA9IDA7IGkgPCAxZTU7ICsraSkgeworICAgIGxldCBlcnJvcjsKKyAgICB0cnkgewor
ICAgICAgICB0ZXN0KCk7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICBlcnJvciA9IGU7Cisg
ICAgfQorICAgIGlmIChlcnJvciAhPSAiVHlwZUVycm9yOiBJdGVyYXRvciByZXN1bHQgaW50ZXJm
YWNlIGlzIG5vdCBhbiBvYmplY3QuIikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7Cit9CmRp
ZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy90ZXN0LWZvci1vZi1jZmctc2ltcGxpY2F0aW9uLWV4
aXQtb2suanMgYi9KU1Rlc3RzL3N0cmVzcy90ZXN0LWZvci1vZi1jZmctc2ltcGxpY2F0aW9uLWV4
aXQtb2suanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uODliMjI2NzljNjg0ODEyNzBiODc3NjJhMDJhNTFmZjhmYTZl
ZTVhZQotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvc3RyZXNzL3Rlc3QtZm9yLW9mLWNmZy1z
aW1wbGljYXRpb24tZXhpdC1vay5qcwpAQCAtMCwwICsxLDcgQEAKK2xldCB6ID0ge30KK3ouX19w
cm90b19fID0gW10KK2ZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDAwMDsgaSsrKSB7CisgIGZvciAo
bGV0IHggb2YgWycnLCB6XSkgeworICAgIGZvciAobGV0IHkgb2YgeCkge30KKyAgfQorfQo=
</data>
<flag name="review"
          id="412750"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
      

    </bug>

</bugzilla>